diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 10800d575c..395fb12d9e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,7 @@ jobs: - name: Install Go uses: actions/setup-go@v3 with: - go-version: 1.16.x + go-version: 1.17.x - name: Checkout code uses: actions/checkout@v3 @@ -53,7 +53,7 @@ jobs: - name: Install Go uses: actions/setup-go@v3 with: - go-version: 1.16.x + go-version: 1.17.x - name: Checkout code uses: actions/checkout@v3 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e505557e97..33bc2663f6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Go uses: actions/setup-go@master with: - go-version: 1.16.x + go-version: 1.17.x - name: Prepare id: prepare diff --git a/command/loadbot/deploy_contract.go b/command/loadbot/deploy_contract.go index 9852710fc1..76130c5d6f 100644 --- a/command/loadbot/deploy_contract.go +++ b/command/loadbot/deploy_contract.go @@ -11,7 +11,7 @@ import ( txpoolOp "github.com/0xPolygon/polygon-edge/txpool/proto" "github.com/0xPolygon/polygon-edge/types" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" ) func (l *Loadbot) deployContract( diff --git a/command/loadbot/duration.go b/command/loadbot/duration.go index a0daae251c..34169b789f 100644 --- a/command/loadbot/duration.go +++ b/command/loadbot/duration.go @@ -1,7 +1,7 @@ package loadbot import ( - "github.com/umbracle/go-web3" + "github.com/umbracle/ethgo" "sync" "sync/atomic" "time" @@ -88,7 +88,7 @@ func (ed *ExecDuration) calcTurnAroundMetrics() { // reportTurnAroundTime reports the turn around time for a transaction // for a single loadbot run func (ed *ExecDuration) reportTurnAroundTime( - txHash web3.Hash, + txHash ethgo.Hash, data *metadata, ) { ed.turnAroundMap.Store(txHash, data) diff --git a/command/loadbot/execution.go b/command/loadbot/execution.go index d77a4ff7f8..23907cd2c2 100644 --- a/command/loadbot/execution.go +++ b/command/loadbot/execution.go @@ -4,6 +4,7 @@ import ( "context" "crypto/ecdsa" "fmt" + "github.com/umbracle/ethgo" "math/big" "sync" "sync/atomic" @@ -13,10 +14,9 @@ import ( "github.com/0xPolygon/polygon-edge/helper/tests" txpoolOp "github.com/0xPolygon/polygon-edge/txpool/proto" "github.com/golang/protobuf/ptypes/any" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" "github.com/0xPolygon/polygon-edge/types" - "github.com/umbracle/go-web3" ) const ( @@ -92,7 +92,7 @@ func (b *BlockGasMetrics) AddBlockMetric(blockNum uint64, gasMetric GasMetrics) type ContractMetricsData struct { FailedContractTransactionsCount uint64 ContractDeploymentDuration ExecDuration - ContractAddress web3.Address + ContractAddress ethgo.Address ContractGasMetrics *BlockGasMetrics } @@ -358,10 +358,10 @@ func (l *Loadbot) Run() error { func (l *Loadbot) executeTxn( client txpoolOp.TxnPoolOperatorClient, -) (web3.Hash, error) { +) (ethgo.Hash, error) { txn, err := l.generator.GenerateTransaction() if err != nil { - return web3.Hash{}, err + return ethgo.Hash{}, err } addReq := &txpoolOp.AddTxnReq{ @@ -373,8 +373,8 @@ func (l *Loadbot) executeTxn( addRes, addErr := client.AddTxn(context.Background(), addReq) if addErr != nil { - return web3.Hash{}, fmt.Errorf("unable to add transaction, %w", addErr) + return ethgo.Hash{}, fmt.Errorf("unable to add transaction, %w", addErr) } - return web3.Hash(types.StringToHash(addRes.TxHash)), nil + return ethgo.Hash(types.StringToHash(addRes.TxHash)), nil } diff --git a/command/loadbot/generator/generator.go b/command/loadbot/generator/generator.go index f93d2c647c..d1ae2d5dd3 100644 --- a/command/loadbot/generator/generator.go +++ b/command/loadbot/generator/generator.go @@ -3,12 +3,12 @@ package generator import ( "crypto/ecdsa" "encoding/json" + "github.com/umbracle/ethgo" "io/ioutil" "math/big" "github.com/0xPolygon/polygon-edge/types" - "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/abi" + "github.com/umbracle/ethgo/abi" ) type TransactionGenerator interface { @@ -69,7 +69,7 @@ type GeneratorParams struct { GasPrice *big.Int ContractArtifact *ContractArtifact ConstructorArgs []byte // smart contract constructor arguments - ContractAddress web3.Address + ContractAddress ethgo.Address } // ReadContractArtifact reads the contract bytecode from the specified path diff --git a/command/loadbot/generators.go b/command/loadbot/generators.go index db496191fe..97684f63f7 100644 --- a/command/loadbot/generators.go +++ b/command/loadbot/generators.go @@ -8,7 +8,7 @@ import ( "github.com/0xPolygon/polygon-edge/crypto" txpoolOp "github.com/0xPolygon/polygon-edge/txpool/proto" "github.com/0xPolygon/polygon-edge/types" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ) diff --git a/command/loadbot/helper.go b/command/loadbot/helper.go index 970d8183b1..44def2ab0b 100644 --- a/command/loadbot/helper.go +++ b/command/loadbot/helper.go @@ -2,19 +2,19 @@ package loadbot import ( "fmt" + "github.com/umbracle/ethgo" "math/big" "sync" "time" "github.com/0xPolygon/polygon-edge/types" - "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" ) // getInitialSenderNonce queries the sender account nonce before starting the loadbot run. // The nonce used for transactions is incremented by the loadbot during runtime func getInitialSenderNonce(client *jsonrpc.Client, address types.Address) (uint64, error) { - nonce, err := client.Eth().GetNonce(web3.Address(address), web3.Latest) + nonce, err := client.Eth().GetNonce(ethgo.Address(address), ethgo.Latest) if err != nil { return 0, fmt.Errorf("failed to query initial sender nonce: %w", err) } @@ -36,9 +36,9 @@ func getAverageGasPrice(client *jsonrpc.Client) (uint64, error) { // estimateGas queries the network node for a gas estimation before starting // the loadbot run func estimateGas(client *jsonrpc.Client, txn *types.Transaction) (uint64, error) { - gasEstimate, err := client.Eth().EstimateGas(&web3.CallMsg{ - From: web3.Address(txn.From), - To: (*web3.Address)(txn.To), + gasEstimate, err := client.Eth().EstimateGas(ðgo.CallMsg{ + From: ethgo.Address(txn.From), + To: (*ethgo.Address)(txn.To), Data: txn.Input, GasPrice: txn.GasPrice.Uint64(), Value: txn.Value, @@ -99,7 +99,7 @@ func getBlockGasMetrics( ) { // Query node for block blockInfo, err := jsonClient.Eth().GetBlockByNumber( - web3.BlockNumber(blockNum), + ethgo.BlockNumber(blockNum), false, ) if err != nil { diff --git a/command/loadbot/params.go b/command/loadbot/params.go index b52d5ca41c..ae383561d0 100644 --- a/command/loadbot/params.go +++ b/command/loadbot/params.go @@ -8,7 +8,7 @@ import ( "github.com/0xPolygon/polygon-edge/command/loadbot/generator" "github.com/0xPolygon/polygon-edge/types" - "github.com/umbracle/go-web3/abi" + "github.com/umbracle/ethgo/abi" ) var ( diff --git a/command/loadbot/result.go b/command/loadbot/result.go index 4feeba4efd..ee18346bec 100644 --- a/command/loadbot/result.go +++ b/command/loadbot/result.go @@ -3,13 +3,13 @@ package loadbot import ( "bytes" "fmt" + "github.com/umbracle/ethgo" "math" "sort" "github.com/0xPolygon/polygon-edge/command/helper" "github.com/0xPolygon/polygon-edge/command/loadbot/generator" "github.com/0xPolygon/polygon-edge/helper/common" - "github.com/umbracle/go-web3" ) const ( @@ -52,7 +52,7 @@ type LoadbotResult struct { BlockData TxnBlockData `json:"block_data"` DetailedErrorData TxnDetailedErrorData `json:"detailed_error_data,omitempty"` ApproxTPS uint64 `json:"approx_tps"` - ContractAddress web3.Address `json:"contract_address,omitempty"` + ContractAddress ethgo.Address `json:"contract_address,omitempty"` ContractBlockData TxnBlockData `json:"contract_block_data,omitempty"` } @@ -185,7 +185,7 @@ func (lr *LoadbotResult) writeErrorData(buffer *bytes.Buffer) { buffer.WriteString("\n\n[DETAILED ERRORS]\n") addToBuffer := func(detailedError *generator.FailedTxnInfo) { - if detailedError.TxHash != web3.ZeroHash.String() { + if detailedError.TxHash != ethgo.ZeroHash.String() { buffer.WriteString(fmt.Sprintf("\n\n[%s]\n", detailedError.TxHash)) } else { buffer.WriteString("\n\n[Tx Hash Unavailable]\n") @@ -275,7 +275,7 @@ func (lr *LoadbotResult) writeTurnAroundData(buffer *bytes.Buffer) { func (lr *LoadbotResult) writeContractDeploymentData(buffer *bytes.Buffer) { // skip if contract was not deployed - if lr.ContractAddress == web3.ZeroAddress { + if lr.ContractAddress == ethgo.ZeroAddress { return } diff --git a/contracts/abis/abis.go b/contracts/abis/abis.go index 636ed20db1..32e03c3758 100644 --- a/contracts/abis/abis.go +++ b/contracts/abis/abis.go @@ -1,7 +1,7 @@ package abis import ( - "github.com/umbracle/go-web3/abi" + "github.com/umbracle/ethgo/abi" ) var StakingABI = abi.MustNewABI(StakingJSONABI) diff --git a/contracts/staking/query.go b/contracts/staking/query.go index c4cc0a4b27..b7265b896c 100644 --- a/contracts/staking/query.go +++ b/contracts/staking/query.go @@ -2,13 +2,13 @@ package staking import ( "errors" + "github.com/umbracle/ethgo" "math/big" "github.com/0xPolygon/polygon-edge/contracts/abis" "github.com/0xPolygon/polygon-edge/state/runtime" "github.com/0xPolygon/polygon-edge/types" - "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/abi" + "github.com/umbracle/ethgo/abi" ) var ( @@ -30,10 +30,10 @@ func DecodeValidators(method *abi.Method, returnValue []byte) ([]types.Address, return nil, errors.New("failed type assertion from decodedResults to map") } - web3Addresses, ok := results["0"].([]web3.Address) + web3Addresses, ok := results["0"].([]ethgo.Address) if !ok { - return nil, errors.New("failed type assertion from results[0] to []web3.Address") + return nil, errors.New("failed type assertion from results[0] to []ethgo.Address") } addresses := make([]types.Address, len(web3Addresses)) diff --git a/e2e/framework/helper.go b/e2e/framework/helper.go index b3161e5783..978d29681a 100644 --- a/e2e/framework/helper.go +++ b/e2e/framework/helper.go @@ -5,6 +5,7 @@ import ( "crypto/ecdsa" "errors" "fmt" + "github.com/umbracle/ethgo" "io/ioutil" "math/big" "net" @@ -23,8 +24,7 @@ import ( txpoolProto "github.com/0xPolygon/polygon-edge/txpool/proto" "github.com/0xPolygon/polygon-edge/types" "github.com/stretchr/testify/assert" - "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" "golang.org/x/crypto/sha3" empty "google.golang.org/protobuf/types/known/emptypb" ) @@ -73,8 +73,8 @@ func GetAccountBalance(t *testing.T, address types.Address, rpcClient *jsonrpc.C t.Helper() accountBalance, err := rpcClient.Eth().GetBalance( - web3.Address(address), - web3.Latest, + ethgo.Address(address), + ethgo.Latest, ) assert.NoError(t, err) @@ -89,17 +89,17 @@ func GetValidatorSet(from types.Address, rpcClient *jsonrpc.Client) ([]types.Add return nil, errors.New("validators method doesn't exist in Staking contract ABI") } - toAddress := web3.Address(staking.AddrStakingContract) + toAddress := ethgo.Address(staking.AddrStakingContract) selector := validatorsMethod.ID() response, err := rpcClient.Eth().Call( - &web3.CallMsg{ - From: web3.Address(from), + ðgo.CallMsg{ + From: ethgo.Address(from), To: &toAddress, Data: selector, GasPrice: 100000000, Value: big.NewInt(0), }, - web3.Latest, + ethgo.Latest, ) if err != nil { @@ -148,7 +148,7 @@ func UnstakeAmount( from types.Address, senderKey *ecdsa.PrivateKey, srv *TestServer, -) (*web3.Receipt, error) { +) (*ethgo.Receipt, error) { // Stake Balance txn := &PreparedTransaction{ From: from, @@ -178,17 +178,17 @@ func GetStakedAmount(from types.Address, rpcClient *jsonrpc.Client) (*big.Int, e return nil, errors.New("stakedAmount method doesn't exist in Staking contract ABI") } - toAddress := web3.Address(staking.AddrStakingContract) + toAddress := ethgo.Address(staking.AddrStakingContract) selector := stakedAmountMethod.ID() response, err := rpcClient.Eth().Call( - &web3.CallMsg{ - From: web3.Address(from), + ðgo.CallMsg{ + From: ethgo.Address(from), To: &toAddress, Data: selector, GasPrice: 100000000, Value: big.NewInt(0), }, - web3.Latest, + ethgo.Latest, ) if err != nil { diff --git a/e2e/framework/testserver.go b/e2e/framework/testserver.go index 279a3afe2b..e000020ea0 100644 --- a/e2e/framework/testserver.go +++ b/e2e/framework/testserver.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "errors" "fmt" + "github.com/umbracle/ethgo" "io" "math/big" "os" @@ -36,8 +37,7 @@ import ( "github.com/0xPolygon/polygon-edge/types" "github.com/hashicorp/go-hclog" "github.com/libp2p/go-libp2p-core/peer" - "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" empty "google.golang.org/protobuf/types/known/emptypb" @@ -441,15 +441,15 @@ func (t *TestServer) DeployContract( ctx context.Context, binary string, privateKey *ecdsa.PrivateKey, -) (web3.Address, error) { +) (ethgo.Address, error) { buf, err := hex.DecodeString(binary) if err != nil { - return web3.Address{}, err + return ethgo.Address{}, err } sender, err := crypto.GetAddressFromKey(privateKey) if err != nil { - return web3.ZeroAddress, fmt.Errorf("unable to extract key, %w", err) + return ethgo.ZeroAddress, fmt.Errorf("unable to extract key, %w", err) } receipt, err := t.SendRawTx(ctx, &PreparedTransaction{ @@ -459,7 +459,7 @@ func (t *TestServer) DeployContract( Input: buf, }, privateKey) if err != nil { - return web3.Address{}, err + return ethgo.Address{}, err } return receipt.ContractAddress, nil @@ -484,10 +484,10 @@ func (t *TestServer) SendRawTx( ctx context.Context, tx *PreparedTransaction, signerKey *ecdsa.PrivateKey, -) (*web3.Receipt, error) { +) (*ethgo.Receipt, error) { client := t.JSONRPC() - nextNonce, err := client.Eth().GetNonce(web3.Address(tx.From), web3.Latest) + nextNonce, err := client.Eth().GetNonce(ethgo.Address(tx.From), ethgo.Latest) if err != nil { return nil, err } @@ -513,11 +513,11 @@ func (t *TestServer) SendRawTx( return tests.WaitForReceipt(ctx, t.JSONRPC().Eth(), txHash) } -func (t *TestServer) WaitForReceipt(ctx context.Context, hash web3.Hash) (*web3.Receipt, error) { +func (t *TestServer) WaitForReceipt(ctx context.Context, hash ethgo.Hash) (*ethgo.Receipt, error) { client := t.JSONRPC() type result struct { - receipt *web3.Receipt + receipt *ethgo.Receipt err error } @@ -546,7 +546,7 @@ func (t *TestServer) WaitForReceipt(ctx context.Context, hash web3.Hash) (*web3. // GetGasTotal waits for the total gas used sum for the passed in // transactions -func (t *TestServer) GetGasTotal(txHashes []web3.Hash) uint64 { +func (t *TestServer) GetGasTotal(txHashes []ethgo.Hash) uint64 { t.t.Helper() var ( @@ -566,7 +566,7 @@ func (t *TestServer) GetGasTotal(txHashes []web3.Hash) uint64 { for _, txHash := range txHashes { wg.Add(1) - go func(txHash web3.Hash) { + go func(txHash ethgo.Hash) { defer wg.Done() ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout) @@ -613,7 +613,7 @@ func (t *TestServer) InvokeMethod( contractAddress types.Address, method string, fromKey *ecdsa.PrivateKey, -) *web3.Receipt { +) *ethgo.Receipt { sig := MethodSig(method) fromAddress, err := crypto.GetAddressFromKey(fromKey) diff --git a/e2e/ibft_test.go b/e2e/ibft_test.go index a71b8b4fac..b286d5281d 100644 --- a/e2e/ibft_test.go +++ b/e2e/ibft_test.go @@ -2,12 +2,11 @@ package e2e import ( "context" + "github.com/umbracle/ethgo" "math/big" "testing" "time" - "github.com/umbracle/go-web3" - "github.com/0xPolygon/polygon-edge/consensus/ibft" "github.com/0xPolygon/polygon-edge/e2e/framework" "github.com/0xPolygon/polygon-edge/helper/tests" @@ -146,7 +145,7 @@ func TestIbft_TransactionFeeRecipient(t *testing.T) { assert.NoError(t, err) // Given that this is the first transaction on the blockchain, proposer's balance should be equal to the tx fee - balanceProposer, err := clt.Eth().GetBalance(web3.Address(proposerAddr), web3.Latest) + balanceProposer, err := clt.Eth().GetBalance(ethgo.Address(proposerAddr), ethgo.Latest) assert.NoError(t, err) txFee := new(big.Int).Mul(new(big.Int).SetUint64(receipt.GasUsed), txn.GasPrice) diff --git a/e2e/logs_test.go b/e2e/logs_test.go index 964925ae47..98e0ec857e 100644 --- a/e2e/logs_test.go +++ b/e2e/logs_test.go @@ -2,6 +2,7 @@ package e2e import ( "context" + "github.com/umbracle/ethgo" "math/big" "testing" "time" @@ -12,7 +13,6 @@ import ( "github.com/0xPolygon/polygon-edge/types" "github.com/stretchr/testify/assert" - "github.com/umbracle/go-web3" "golang.org/x/crypto/sha3" ) @@ -48,7 +48,7 @@ func TestNewFilter_Logs(t *testing.T) { txpoolClient := srv.TxnPoolOperator() jsonRPCClient := srv.JSONRPC() - id, err := jsonRPCClient.Eth().NewFilter(&web3.LogFilter{}) + id, err := jsonRPCClient.Eth().NewFilter(ðgo.LogFilter{}) assert.NoError(t, err) txn, err := tests.GenerateAddTxnReq(tests.GenerateTxReqParams{ @@ -74,7 +74,7 @@ func TestNewFilter_Logs(t *testing.T) { receiptContext, cancelFn := context.WithTimeout(context.Background(), framework.DefaultTimeout) defer cancelFn() - txHash := web3.Hash(types.StringToHash(addResp.TxHash)) + txHash := ethgo.Hash(types.StringToHash(addResp.TxHash)) if _, receiptErr := srv.WaitForReceipt(receiptContext, txHash); receiptErr != nil { t.Fatalf("Unable to wait for receipt, %v", receiptErr) } @@ -183,10 +183,10 @@ func TestFilterValue(t *testing.T) { // Convert to right format var ( - placeholderWrapper []*web3.Hash - placeholder web3.Hash - filterEventHashes [][]*web3.Hash - filterAddresses []web3.Address + placeholderWrapper []*ethgo.Hash + placeholder ethgo.Hash + filterEventHashes [][]*ethgo.Hash + filterAddresses []ethgo.Address ) copy(placeholder[:], buf) @@ -195,7 +195,7 @@ func TestFilterValue(t *testing.T) { filterEventHashes = append(filterEventHashes, placeholderWrapper) filterAddresses = append(filterAddresses, contractAddr) - filterID, err := jsonRPCClient.Eth().NewFilter(&web3.LogFilter{ + filterID, err := jsonRPCClient.Eth().NewFilter(ðgo.LogFilter{ Address: filterAddresses, Topics: filterEventHashes, }) @@ -232,7 +232,7 @@ func TestFilterValue(t *testing.T) { receiptContext, cancelFn := context.WithTimeout(context.Background(), framework.DefaultTimeout) defer cancelFn() - txHash := web3.Hash(types.StringToHash(addResp.TxHash)) + txHash := ethgo.Hash(types.StringToHash(addResp.TxHash)) if _, receiptErr := srv.WaitForReceipt(receiptContext, txHash); receiptErr != nil { return } diff --git a/e2e/pos_test.go b/e2e/pos_test.go index 3d67b077f3..5a47236f01 100644 --- a/e2e/pos_test.go +++ b/e2e/pos_test.go @@ -5,6 +5,7 @@ import ( "crypto/ecdsa" "fmt" ibftOp "github.com/0xPolygon/polygon-edge/consensus/ibft/proto" + "github.com/umbracle/ethgo" "math/big" "strconv" "testing" @@ -19,8 +20,7 @@ import ( "github.com/0xPolygon/polygon-edge/types" "github.com/golang/protobuf/ptypes/any" "github.com/stretchr/testify/assert" - "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" ) // foundInValidatorSet is a helper function for searching through the passed in set for a specific @@ -376,7 +376,7 @@ func TestPoS_UnstakeExploit(t *testing.T) { return signedTx } - txHashes := make([]web3.Hash, 0) + txHashes := make([]ethgo.Hash, 0) for i := 0; i < numTransactions; i++ { var msg *txpoolOp.AddTxnReq @@ -397,7 +397,7 @@ func TestPoS_UnstakeExploit(t *testing.T) { t.Fatalf("Unable to add txn, %v", addErr) } - txHashes = append(txHashes, web3.HexToHash(addResp.TxHash)) + txHashes = append(txHashes, ethgo.HexToHash(addResp.TxHash)) addCtxCn() } @@ -521,7 +521,7 @@ func TestPoS_StakeUnstakeExploit(t *testing.T) { oneEth := framework.EthToWei(1) zeroEth := framework.EthToWei(0) - txHashes := make([]web3.Hash, 0) + txHashes := make([]ethgo.Hash, 0) for i := 0; i < numTransactions; i++ { var msg *txpoolOp.AddTxnReq @@ -549,7 +549,7 @@ func TestPoS_StakeUnstakeExploit(t *testing.T) { t.Fatalf("Unable to add txn, %v", addErr) } - txHashes = append(txHashes, web3.HexToHash(addResp.TxHash)) + txHashes = append(txHashes, ethgo.HexToHash(addResp.TxHash)) } // Set up the blockchain listener to catch the added block event @@ -652,7 +652,7 @@ func TestPoS_StakeUnstakeWithinSameBlock(t *testing.T) { } zeroEth := framework.EthToWei(0) - txHashes := make([]web3.Hash, 0) + txHashes := make([]ethgo.Hash, 0) // addTxn is a helper method for generating and adding a transaction // through the operator command @@ -670,7 +670,7 @@ func TestPoS_StakeUnstakeWithinSameBlock(t *testing.T) { t.Fatalf("Unable to add txn, %v", addErr) } - txHashes = append(txHashes, web3.HexToHash(addResp.TxHash)) + txHashes = append(txHashes, ethgo.HexToHash(addResp.TxHash)) } // Stake transaction diff --git a/e2e/transaction_test.go b/e2e/transaction_test.go index 206efe24cb..a75db0c39f 100644 --- a/e2e/transaction_test.go +++ b/e2e/transaction_test.go @@ -6,6 +6,7 @@ import ( "encoding/hex" "errors" "fmt" + "github.com/umbracle/ethgo" "math/big" "strconv" "sync" @@ -18,8 +19,7 @@ import ( "github.com/0xPolygon/polygon-edge/helper/tests" "github.com/0xPolygon/polygon-edge/types" "github.com/stretchr/testify/assert" - "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" ) func TestPreminedBalance(t *testing.T) { @@ -65,7 +65,7 @@ func TestPreminedBalance(t *testing.T) { for _, testCase := range testTable { t.Run(testCase.name, func(t *testing.T) { - balance, err := rpcClient.Eth().GetBalance(web3.Address(testCase.address), web3.Latest) + balance, err := rpcClient.Eth().GetBalance(ethgo.Address(testCase.address), ethgo.Latest) assert.NoError(t, err) assert.Equal(t, testCase.balance, balance) }) @@ -144,14 +144,14 @@ func TestEthTransfer(t *testing.T) { t.Run(testCase.name, func(t *testing.T) { // Fetch the balances before sending balanceSender, err := rpcClient.Eth().GetBalance( - web3.Address(testCase.sender), - web3.Latest, + ethgo.Address(testCase.sender), + ethgo.Latest, ) assert.NoError(t, err) balanceReceiver, err := rpcClient.Eth().GetBalance( - web3.Address(testCase.recipient), - web3.Latest, + ethgo.Address(testCase.recipient), + ethgo.Latest, ) assert.NoError(t, err) @@ -183,14 +183,14 @@ func TestEthTransfer(t *testing.T) { // Fetch the balances after sending balanceSender, err = rpcClient.Eth().GetBalance( - web3.Address(testCase.sender), - web3.Latest, + ethgo.Address(testCase.sender), + ethgo.Latest, ) assert.NoError(t, err) balanceReceiver, err = rpcClient.Eth().GetBalance( - web3.Address(testCase.recipient), - web3.Latest, + ethgo.Address(testCase.recipient), + ethgo.Latest, ) assert.NoError(t, err) @@ -229,7 +229,7 @@ func TestEthTransfer(t *testing.T) { // getCount is a helper function for the stress test SC func getCount( from types.Address, - contractAddress web3.Address, + contractAddress ethgo.Address, rpcClient *jsonrpc.Client, ) (*big.Int, error) { stressTestMethod, ok := abis.StressTestABI.Methods["getCount"] @@ -239,14 +239,14 @@ func getCount( selector := stressTestMethod.ID() response, err := rpcClient.Eth().Call( - &web3.CallMsg{ - From: web3.Address(from), + ðgo.CallMsg{ + From: ethgo.Address(from), To: &contractAddress, Data: selector, GasPrice: 100000000, Value: big.NewInt(0), }, - web3.Latest, + ethgo.Latest, ) if err != nil { @@ -320,12 +320,12 @@ func addStressTxnsWithHashes( numTransactions int, contractAddr types.Address, senderKey *ecdsa.PrivateKey, -) []web3.Hash { +) []ethgo.Hash { t.Helper() currentNonce := 1 // 1 because the first transaction was deployment - txHashes := make([]web3.Hash, 0) + txHashes := make([]ethgo.Hash, 0) for i := 0; i < numTransactions; i++ { setNameTxn := generateStressTestTx( diff --git a/e2e/txpool_test.go b/e2e/txpool_test.go index 9f9f48b73d..3e1e62cbf4 100644 --- a/e2e/txpool_test.go +++ b/e2e/txpool_test.go @@ -5,6 +5,7 @@ import ( "crypto/ecdsa" "errors" "github.com/0xPolygon/polygon-edge/txpool" + "github.com/umbracle/ethgo" "math/big" "testing" "time" @@ -16,7 +17,6 @@ import ( "github.com/0xPolygon/polygon-edge/types" "github.com/golang/protobuf/ptypes/any" "github.com/stretchr/testify/assert" - "github.com/umbracle/go-web3" ) var ( @@ -138,7 +138,7 @@ func TestTxPool_ErrorCodes(t *testing.T) { defer waitCancelFn() convertedHash := types.StringToHash(addResponse.TxHash) - _, receiptErr := tests.WaitForReceipt(receiptCtx, srv.JSONRPC().Eth(), web3.Hash(convertedHash)) + _, receiptErr := tests.WaitForReceipt(receiptCtx, srv.JSONRPC().Eth(), ethgo.Hash(convertedHash)) if receiptErr != nil { t.Fatalf("Unable to get receipt, %v", receiptErr) } @@ -227,8 +227,8 @@ func TestTxPool_TransactionCoalescing(t *testing.T) { // testTransaction is a helper structure for // keeping track of test transaction execution type testTransaction struct { - txHash web3.Hash // the transaction hash - block *uint64 // the block the transaction was included in + txHash ethgo.Hash // the transaction hash + block *uint64 // the block the transaction was included in } testTransactions := make([]*testTransaction, 0) @@ -246,7 +246,7 @@ func TestTxPool_TransactionCoalescing(t *testing.T) { } testTransactions = append(testTransactions, &testTransaction{ - txHash: web3.HexToHash(addResp.TxHash), + txHash: ethgo.HexToHash(addResp.TxHash), }) addCtxCn() @@ -284,7 +284,7 @@ func TestTxPool_TransactionCoalescing(t *testing.T) { } testTransactions = append(testTransactions, &testTransaction{ - txHash: web3.HexToHash(addResp.TxHash), + txHash: ethgo.HexToHash(addResp.TxHash), }) // Start from 1 since there was previously a txn with nonce 0 @@ -387,7 +387,7 @@ func TestTxPool_RecoverableError(t *testing.T) { client := server.JSONRPC() operator := server.TxnPoolOperator() - hashes := make([]web3.Hash, 3) + hashes := make([]ethgo.Hash, 3) for i, tx := range transactions { signedTx, err := signer.SignTx(tx, senderKey) @@ -401,7 +401,7 @@ func TestTxPool_RecoverableError(t *testing.T) { }) assert.NoError(t, err, "Unable to send transaction, %v", err) - txHash := web3.Hash(types.StringToHash(response.TxHash)) + txHash := ethgo.Hash(types.StringToHash(response.TxHash)) // save for later querying hashes[i] = txHash @@ -416,7 +416,7 @@ func TestTxPool_RecoverableError(t *testing.T) { assert.NotNil(t, receipt) // assert balance moved - balance, err := client.Eth().GetBalance(web3.Address(receiverAddress), web3.Latest) + balance, err := client.Eth().GetBalance(ethgo.Address(receiverAddress), ethgo.Latest) assert.NoError(t, err, "failed to retrieve receiver account balance") assert.Equal(t, framework.EthToWei(3).String(), balance.String()) @@ -477,7 +477,7 @@ func TestTxPool_GetPendingTx(t *testing.T) { }) assert.NoError(t, err, "Unable to send transaction, %v", err) - txHash := web3.Hash(types.StringToHash(response.TxHash)) + txHash := ethgo.Hash(types.StringToHash(response.TxHash)) // Grab the pending transaction from the pool tx, err := client.Eth().GetTransactionByHash(txHash) @@ -487,7 +487,7 @@ func TestTxPool_GetPendingTx(t *testing.T) { // Make sure the specific fields are not filled yet assert.Equal(t, uint64(0), tx.TxnIndex) assert.Equal(t, uint64(0), tx.BlockNumber) - assert.Equal(t, web3.ZeroHash, tx.BlockHash) + assert.Equal(t, ethgo.ZeroHash, tx.BlockHash) // Wait for the transaction to be included into a block ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) diff --git a/go.mod b/go.mod index e289b3bd52..051dd1bc75 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,10 @@ module github.com/0xPolygon/polygon-edge -go 1.16 +go 1.17 require ( github.com/btcsuite/btcd v0.22.1 - github.com/containerd/cgroups v1.0.2 // indirect + github.com/containerd/cgroups v1.0.4 // indirect github.com/elastic/gosigar v0.14.2 // indirect github.com/go-kit/kit v0.12.0 github.com/golang/protobuf v1.5.2 @@ -15,13 +15,12 @@ require ( github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/golang-lru v0.5.4 github.com/hashicorp/hcl v1.0.0 - github.com/hashicorp/vault/api v1.3.1 - github.com/libp2p/go-libp2p v0.18.0-rc2 - github.com/libp2p/go-libp2p-core v0.15.1 + github.com/hashicorp/vault/api v1.6.0 + github.com/libp2p/go-libp2p v0.20.0 + github.com/libp2p/go-libp2p-core v0.16.1 github.com/libp2p/go-libp2p-kbucket v0.4.7 - github.com/libp2p/go-libp2p-noise v0.4.0 - github.com/libp2p/go-libp2p-pubsub v0.6.1 - github.com/miekg/dns v1.1.45 // indirect + github.com/libp2p/go-libp2p-pubsub v0.7.0 + github.com/miekg/dns v1.1.49 // indirect github.com/multiformats/go-base32 v0.0.4 // indirect github.com/multiformats/go-multiaddr v0.5.0 github.com/multiformats/go-multihash v0.1.0 // indirect @@ -31,32 +30,158 @@ require ( github.com/spf13/cobra v1.4.0 github.com/stretchr/testify v1.7.1 github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 - github.com/umbracle/fastrlp v0.0.0-20211229195328-c1416904ae17 + github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722 github.com/umbracle/go-eth-bn256 v0.0.0-20190607160430-b36caf4e0f6b - github.com/umbracle/go-web3 v0.0.0-20220224145938-aaa1038c1b69 - golang.org/x/crypto v0.0.0-20220214200702-86341886e292 - google.golang.org/grpc v1.46.2 + golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e + google.golang.org/grpc v1.47.0 google.golang.org/protobuf v1.28.0 gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce ) require ( - cloud.google.com/go v0.100.2 // indirect cloud.google.com/go/secretmanager v1.4.0 - github.com/armon/go-metrics v0.3.10 // indirect - github.com/aws/aws-sdk-go v1.44.14 + github.com/armon/go-metrics v0.4.0 // indirect + github.com/aws/aws-sdk-go v1.44.25 github.com/benbjohnson/clock v1.3.0 // indirect github.com/fatih/color v1.13.0 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/godbus/dbus/v5 v5.0.6 // indirect - github.com/ipfs/go-cid v0.1.0 // indirect - github.com/klauspost/compress v1.14.2 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/godbus/dbus/v5 v5.1.0 // indirect + github.com/ipfs/go-cid v0.2.0 // indirect + github.com/klauspost/compress v1.15.5 // indirect github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/umbracle/ethgo v0.1.2 github.com/valyala/fastjson v1.6.3 // indirect - go.uber.org/zap v1.20.0 // indirect - golang.org/x/tools v0.1.9 // indirect - google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b + go.uber.org/zap v1.21.0 // indirect + golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect + golang.org/x/tools v0.1.10 // indirect + google.golang.org/genproto v0.0.0-20220531173845-685668d2de03 + gopkg.in/yaml.v3 v3.0.1 lukechampine.com/blake3 v1.1.7 // indirect ) + +require ( + cloud.google.com/go v0.102.0 // indirect + cloud.google.com/go/compute v1.6.1 // indirect + cloud.google.com/go/iam v0.3.0 // indirect + github.com/andybalholm/brotli v1.0.4 // indirect + github.com/armon/go-radix v1.0.0 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect + github.com/cenkalti/backoff/v3 v3.2.2 // indirect + github.com/cespare/xxhash/v2 v2.1.2 // indirect + github.com/cheekybits/genny v1.0.0 // indirect + github.com/coreos/go-systemd/v22 v22.3.2 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/docker/go-units v0.4.0 // indirect + github.com/flynn/noise v1.0.0 // indirect + github.com/francoispqt/gojay v1.2.13 // indirect + github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/snappy v0.0.4 // indirect + github.com/google/go-cmp v0.5.8 // indirect + github.com/google/gofuzz v1.2.0 // indirect + github.com/google/gopacket v1.1.19 // indirect + github.com/googleapis/gax-go/v2 v2.4.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-cleanhttp v0.5.2 // indirect + github.com/hashicorp/go-plugin v1.4.4 // indirect + github.com/hashicorp/go-retryablehttp v0.7.1 // indirect + github.com/hashicorp/go-rootcerts v1.0.2 // indirect + github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 // indirect + github.com/hashicorp/go-secure-stdlib/parseutil v0.1.5 // indirect + github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect + github.com/hashicorp/go-sockaddr v1.0.2 // indirect + github.com/hashicorp/go-uuid v1.0.3 // indirect + github.com/hashicorp/go-version v1.5.0 // indirect + github.com/hashicorp/vault/sdk v0.5.0 // indirect + github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 // indirect + github.com/huin/goupnp v1.0.3 // indirect + github.com/inconshreveable/mousetrap v1.0.0 // indirect + github.com/ipfs/go-ipfs-util v0.0.2 // indirect + github.com/ipfs/go-log v1.0.5 // indirect + github.com/ipfs/go-log/v2 v2.5.1 // indirect + github.com/jackpal/go-nat-pmp v1.0.2 // indirect + github.com/jbenet/go-temp-err-catcher v0.1.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect + github.com/klauspost/cpuid/v2 v2.0.12 // indirect + github.com/koron/go-ssdp v0.0.3 // indirect + github.com/libp2p/go-buffer-pool v0.0.2 // indirect + github.com/libp2p/go-cidranger v1.1.0 // indirect + github.com/libp2p/go-eventbus v0.2.1 // indirect + github.com/libp2p/go-flow-metrics v0.0.3 // indirect + github.com/libp2p/go-libp2p-asn-util v0.2.0 // indirect + github.com/libp2p/go-libp2p-blankhost v0.4.0 // indirect + github.com/libp2p/go-libp2p-discovery v0.7.0 // indirect + github.com/libp2p/go-libp2p-peerstore v0.7.0 // indirect + github.com/libp2p/go-libp2p-resource-manager v0.3.0 // indirect + github.com/libp2p/go-libp2p-swarm v0.11.0 // indirect + github.com/libp2p/go-msgio v0.2.0 // indirect + github.com/libp2p/go-nat v0.1.0 // indirect + github.com/libp2p/go-netroute v0.2.0 // indirect + github.com/libp2p/go-openssl v0.0.7 // indirect + github.com/libp2p/go-reuseport v0.2.0 // indirect + github.com/libp2p/go-yamux/v3 v3.1.1 // indirect + github.com/lucas-clemente/quic-go v0.27.1 // indirect + github.com/marten-seemann/qtls-go1-16 v0.1.5 // indirect + github.com/marten-seemann/qtls-go1-17 v0.1.1 // indirect + github.com/marten-seemann/qtls-go1-18 v0.1.1 // indirect + github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd // indirect + github.com/mattn/go-isatty v0.0.14 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect + github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b // indirect + github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc // indirect + github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect + github.com/minio/sha256-simd v1.0.0 // indirect + github.com/mitchellh/copystructure v1.2.0 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/reflectwalk v1.0.2 // indirect + github.com/mr-tron/base58 v1.2.0 // indirect + github.com/multiformats/go-base36 v0.1.0 // indirect + github.com/multiformats/go-multiaddr-dns v0.3.1 // indirect + github.com/multiformats/go-multiaddr-fmt v0.1.0 // indirect + github.com/multiformats/go-multibase v0.0.3 // indirect + github.com/multiformats/go-multicodec v0.5.0 // indirect + github.com/multiformats/go-multistream v0.3.1 // indirect + github.com/multiformats/go-varint v0.0.6 // indirect + github.com/nxadm/tail v1.4.8 // indirect + github.com/oklog/run v1.1.0 // indirect + github.com/opencontainers/runtime-spec v1.0.2 // indirect + github.com/opentracing/opentracing-go v1.2.0 // indirect + github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/prometheus/client_model v0.2.0 // indirect + github.com/prometheus/common v0.34.0 // indirect + github.com/prometheus/procfs v0.7.3 // indirect + github.com/raulk/clock v1.1.0 // indirect + github.com/raulk/go-watchdog v1.2.0 // indirect + github.com/ryanuber/go-glob v1.0.0 // indirect + github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect + github.com/spaolacci/murmur3 v1.1.0 // indirect + github.com/spf13/pflag v1.0.5 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.37.0 // indirect + github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 // indirect + github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee // indirect + go.opencensus.io v0.23.0 // indirect + go.uber.org/atomic v1.9.0 // indirect + go.uber.org/multierr v1.8.0 // indirect + golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 // indirect + golang.org/x/net v0.0.0-20220531201128-c960675eff93 // indirect + golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 // indirect + golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect + golang.org/x/text v0.3.7 // indirect + golang.org/x/time v0.0.0-20220411224347-583f2d630306 // indirect + golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df // indirect + google.golang.org/api v0.81.0 // indirect + google.golang.org/appengine v1.6.7 // indirect + gopkg.in/square/go-jose.v2 v2.6.0 // indirect + gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect +) diff --git a/go.sum b/go.sum index fb1d9b16bc..52f96a4a59 100644 --- a/go.sum +++ b/go.sum @@ -29,8 +29,9 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go v0.102.0 h1:DAq3r8y4mDgyB/ZPJ9v/5VJNqjgJAxTn6ZYLlUywOu8= +cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= @@ -39,8 +40,10 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM= cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1 h1:2sMmt8prCn7DPaG4Pmh0N3Inmc8cT8ae5k1M6VJ9Wqc= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= cloud.google.com/go/iam v0.3.0 h1:exkAomrVUuzx9kWFI1wm3KI0uoDeUFPB4kKGzx6x+Gc= @@ -56,6 +59,7 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= +cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= @@ -89,6 +93,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= +github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -97,8 +103,8 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10 h1:FR+drcQStOe+32sYyJYyZ7FIdgoGGBnwLl+flodp8Uo= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= +github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= +github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= @@ -106,14 +112,13 @@ github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6l github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= -github.com/aws/aws-sdk-go v1.44.14 h1:qd7/muV1rElsbvkK9D1nHUzBoDlEw2etfeo4IE82eSQ= -github.com/aws/aws-sdk-go v1.44.14/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.25 h1:cJZ4gtEpWAD/StO9GGOAyv6AaAoZ9OJUhu96gF9qaio= +github.com/aws/aws-sdk-go v1.44.25/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= @@ -130,11 +135,16 @@ github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MR github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcec/v2 v2.2.0 h1:fzn1qaOt32TuLjFlkzYSsBC35Q3KUjT1SwPxiMSCF5k= +github.com/btcsuite/btcd/btcec/v2 v2.2.0/go.mod h1:U7MHm051Al6XmscBQ0BoNydpOTsFAn707034b5nY8zU= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= @@ -148,8 +158,9 @@ github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v3 v3.0.0 h1:ske+9nBpD9qZsTBoF41nW5L+AIuFBKMeze18XQ3eG1c= github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= +github.com/cenkalti/backoff/v3 v3.2.2 h1:cfUAAO3yvKMYKPrvhDuHSwQnhZNk/RMHKdZqKTxfm6M= +github.com/cenkalti/backoff/v3 v3.2.2/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= @@ -181,8 +192,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/containerd/cgroups v1.0.2 h1:mZBclaSgNDfPWtfhj2xJY28LZ9nYIgzB0pwSURPl6JM= -github.com/containerd/cgroups v1.0.2/go.mod h1:qpbpJ1jmlqsR9f2IyaLPsdkCdnt0rbDVqIDlhuu5tRY= +github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= +github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= github.com/containerd/continuity v0.0.0-20191214063359-1097c8bae83b h1:pik3LX++5O3UiNWv45wfP/WT81l7ukBJzd3uUiifbSU= github.com/containerd/continuity v0.0.0-20191214063359-1097c8bae83b/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -210,6 +221,10 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= @@ -263,8 +278,8 @@ github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+ github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= @@ -294,8 +309,8 @@ github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3a github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6 h1:mkgN1ofwASrYnJ5W6U/BxG15eXXXjirgZc7CLqkcaro= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= +github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -358,10 +373,10 @@ github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -401,8 +416,11 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0 h1:s7jOdKSaksJVOxE0Y/S32otcfiP+UQ0cL8/GTKaONwE= github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0 h1:dS9eYAjhrE2RjmzYw2XAPvcXfmcQLtFEQWn0CR82awk= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= @@ -447,22 +465,27 @@ github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHh github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.4.3 h1:DXmvivbWD5qdiBts9TpBC7BYL1Aia5sxbRgQB+v6UZM= github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= +github.com/hashicorp/go-plugin v1.4.4 h1:NVdrSdFRt3SkZtNckJ6tog7gbpRrcbOjQi/rgF7JYWQ= +github.com/hashicorp/go-plugin v1.4.4/go.mod h1:viDMjcLJuDui6pXb8U4HVfb8AamCWhHGUjr2IrTF67s= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.6 h1:HJunrbHTDDbBb/ay4kxa1n+dLmttUlnP3V9oNE4hmsM= github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-retryablehttp v0.7.1 h1:sUiuQAnLlbvmExtFQs72iFW/HXeUn8Z1aJLQ4LJJbTQ= +github.com/hashicorp/go-retryablehttp v0.7.1/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= -github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 h1:cCRo8gK7oq6A2L6LICkUZ+/a5rLiRXFMf1Qd4xSwxTc= github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 h1:78ki3QBevHwYrVxnyVeaEz+7WtifHhauYF23es/0KlI= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 h1:p4AKXPPS24tO8Wc8i1gLvSKdmkiSY5xuju57czJ/IJQ= +github.com/hashicorp/go-secure-stdlib/mlock v0.1.2/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.5 h1:MBgwAFPUbfuI0+tmDU/aeM1MARvdbqWmiieXIalKqDE= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.5/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 h1:nd0HIW15E6FG1MsnArYaHfuw9C2zgzM8LxkG5Ty/788= github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= @@ -470,10 +493,12 @@ github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjG github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= +github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= +github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.5.0 h1:O293SZ2Eg+AAYijkVK3jR786Am1bhDEh2GHT0tIVE5E= +github.com/hashicorp/go-version v1.5.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -488,18 +513,20 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/vault/api v1.3.1 h1:pkDkcgTh47PRjY1NEFeofqR4W/HkNUi9qIakESO2aRM= -github.com/hashicorp/vault/api v1.3.1/go.mod h1:QeJoWxMFt+MsuWcYhmwRLwKEXrjwAFFywzhptMsTIUw= -github.com/hashicorp/vault/sdk v0.3.0 h1:kR3dpxNkhh/wr6ycaJYqp6AFT/i2xaftbfnwZduTKEY= -github.com/hashicorp/vault/sdk v0.3.0/go.mod h1:aZ3fNuL5VNydQk8GcLJ2TV8YCRVvyaakYkhZRoVuhj0= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= +github.com/hashicorp/vault/api v1.6.0 h1:B8UUYod1y1OoiGHq9GtpiqSnGOUEWHaA26AY8RQEDY4= +github.com/hashicorp/vault/api v1.6.0/go.mod h1:h1K70EO2DgnBaTz5IsL6D5ERsNt5Pce93ueVS2+t0Xc= +github.com/hashicorp/vault/sdk v0.5.0 h1:EED7p0OCU3OY5SAqJwSANofY1YKMytm+jDHDQ2EzGVQ= +github.com/hashicorp/vault/sdk v0.5.0/go.mod h1:UJZHlfwj7qUJG8g22CuxUgkdJouFrBNvBHCyx8XAPdo= github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= +github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 h1:xixZ2bWeofWV68J+x6AzmKuVM/JWCQwkWm6GW/MUR6I= +github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= +github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/huin/goupnp v1.0.3/go.mod h1:ZxNlw5WqJj6wSsRK5+YfflQGXYfccj5VgQsMNixHM7Y= github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= @@ -511,11 +538,13 @@ github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUP github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-cid v0.1.0 h1:YN33LQulcRHjfom/i25yoOZR4Telp1Hr/2RU3d0PnC0= github.com/ipfs/go-cid v0.1.0/go.mod h1:rH5/Xv83Rfy8Rw6xG+id3DYAMUVmem1MowoKwdXmN2o= +github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= +github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= +github.com/ipfs/go-datastore v0.5.1/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= @@ -535,8 +564,9 @@ github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscw github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= +github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= +github.com/ipfs/go-log/v2 v2.5.1/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= @@ -583,19 +613,23 @@ github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0 github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.14.2 h1:S0OHlFk/Gbon/yauFJ4FfJJF5V0fc5HbBTJazi28pRw= -github.com/klauspost/compress v1.14.2/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.0/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.5 h1:qyCLMz2JCrKADihKOh9FxnW3houKeNsp2h5OEz0QSEA= +github.com/klauspost/compress v1.15.5/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.0.12 h1:p9dKCg8i4gmOxtv35DvrYoWqYzQrvEVdjQ762Y0OqZE= +github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o= github.com/koron/go-ssdp v0.0.2/go.mod h1:XoLfkAiA2KeZsYh4DbHxD7h3nR2AZNqVQOa+LJuqPYs= +github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= +github.com/koron/go-ssdp v0.0.3/go.mod h1:b2MxI6yh02pKrsyNoQUsk4+YNikaGhe4894J+Q5lDvA= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -614,21 +648,23 @@ github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOS github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p v0.18.0-rc2 h1:ZLzGMdp1cVwxmA0vFpPVUDPQYUdHHGX7I58nXwpNr7Y= -github.com/libp2p/go-libp2p v0.18.0-rc2/go.mod h1:gGNCvn0T19AzyNPDWej2vsAlZFZVnS+IxqckjnsOyM0= +github.com/libp2p/go-libp2p v0.18.0/go.mod h1:+veaZ9z1SZQhmc5PW78jvnnxZ89Mgvmh4cggO11ETmw= +github.com/libp2p/go-libp2p v0.20.0 h1:FpwrR9l3ZVsL9ArwgENHYn1I32OogiCAFS6abxdUVH4= +github.com/libp2p/go-libp2p v0.20.0/go.mod h1:g0C5Fu+aXXbCXkusCzLycuBowEih3ElmDqtbo61Em7k= github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= -github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= +github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= +github.com/libp2p/go-libp2p-asn-util v0.2.0/go.mod h1:WoaWxbHKBymSN41hWSq/lGKJEca7TNm58+gGJi2WsLI= github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-blankhost v0.3.0 h1:kTnLArltMabZlzY63pgGDA4kkUcLkBFSM98zBssn/IY= github.com/libp2p/go-libp2p-blankhost v0.3.0/go.mod h1:urPC+7U01nCGgJ3ZsV8jdwTp6Ji9ID0dMTvq+aJ+nZU= +github.com/libp2p/go-libp2p-blankhost v0.4.0 h1:LXQsrdCsYtmlV07NClqmR/5xPW2JuTD/vC82aaHQ5Y4= +github.com/libp2p/go-libp2p-blankhost v0.4.0/go.mod h1:Ugc8dxkVEpcRxUhxDFYITLmu60bN9RabRquN+ZETjEo= github.com/libp2p/go-libp2p-circuit v0.6.0 h1:rw/HlhmUB3OktS/Ygz6+2XABOmHKzZpPUuMNUMosj8w= github.com/libp2p/go-libp2p-circuit v0.6.0/go.mod h1:kB8hY+zCpMeScyvFrKrGicRdid6vNXbunKE4rXATZ0M= github.com/libp2p/go-libp2p-connmgr v0.2.4 h1:TMS0vc0TCBomtQJyWr7fYxcVYYhx+q/2gF++G5Jkl/w= @@ -647,61 +683,67 @@ github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQR github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-core v0.15.1 h1:0RY+Mi/ARK9DgG1g9xVQLb8dDaaU8tCePMtGALEfBnM= github.com/libp2p/go-libp2p-core v0.15.1/go.mod h1:agSaboYM4hzB1cWekgVReqV5M4g5M+2eNNejV+1EEhs= -github.com/libp2p/go-libp2p-discovery v0.6.0 h1:1XdPmhMJr8Tmj/yUfkJMIi8mgwWrLUsCB3bMxdT+DSo= +github.com/libp2p/go-libp2p-core v0.16.1 h1:bWoiEBqVkpJ13hbv/f69tHODp86t6mvc4fBN4DkK73M= +github.com/libp2p/go-libp2p-core v0.16.1/go.mod h1:O3i/7y+LqUb0N+qhzXjBjjpchgptWAVMG1Voegk7b4c= github.com/libp2p/go-libp2p-discovery v0.6.0/go.mod h1:/u1voHt0tKIe5oIA1RHBKQLVCWPna2dXmPNHc2zR9S8= +github.com/libp2p/go-libp2p-discovery v0.7.0 h1:6Iu3NyningTb/BmUnEhcTwzwbs4zcywwbfTulM9LHuc= +github.com/libp2p/go-libp2p-discovery v0.7.0/go.mod h1:zPug0Rxib1aQG9iIdwOpRpBf18cAfZgzicO826UQP4I= github.com/libp2p/go-libp2p-kbucket v0.4.7 h1:spZAcgxifvFZHBD8tErvppbnNiKA5uokDu3CV7axu70= github.com/libp2p/go-libp2p-kbucket v0.4.7/go.mod h1:XyVo99AfQH0foSf176k4jY1xUJ2+jUJIZCSDm7r2YKk= github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-mplex v0.5.0 h1:vt3k4E4HSND9XH4Z8rUpacPJFSAgLOv6HDvG8W9Ks9E= github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= -github.com/libp2p/go-libp2p-nat v0.1.0 h1:vigUi2MEN+fwghe5ijpScxtbbDz+L/6y8XwlzYOJgSY= +github.com/libp2p/go-libp2p-mplex v0.6.0/go.mod h1:i3usuPrBbh9FD2fLZjGpotyNkwr42KStYZQY7BeTiu4= github.com/libp2p/go-libp2p-nat v0.1.0/go.mod h1:DQzAG+QbDYjN1/C3B6vXucLtz3u9rEonLVPtZVzQqks= github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ= -github.com/libp2p/go-libp2p-noise v0.4.0 h1:khcMsGhHNdGqKE5LDLrnHwZvdGVMsrnD4GTkTWkwmLU= -github.com/libp2p/go-libp2p-noise v0.4.0/go.mod h1:BzzY5pyzCYSyJbQy9oD8z5oP2idsafjt4/X42h9DjZU= github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= -github.com/libp2p/go-libp2p-peerstore v0.6.0 h1:HJminhQSGISBIRb93N6WK3t6Fa8OOTnHd/VBjL4mY5A= github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= +github.com/libp2p/go-libp2p-peerstore v0.7.0 h1:2iIUwok3vtmnWJTZeTeLgnBO6GbkXcwSRwgZHEKrQZs= +github.com/libp2p/go-libp2p-peerstore v0.7.0/go.mod h1:cdUWTHro83vpg6unCpGUr8qJoX3e93Vy8o97u5ppIM0= github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-pubsub v0.6.1 h1:wycbV+f4rreCoVY61Do6g/BUk0RIrbNRcYVbn+QkjGk= -github.com/libp2p/go-libp2p-pubsub v0.6.1/go.mod h1:nJv87QM2cU0w45KPR1rZicq+FmFIOD16zmT+ep1nOmg= +github.com/libp2p/go-libp2p-pubsub v0.7.0 h1:Fd9198JVc3pCsKuzd37TclzM0QcHA+uDyoiG2pvT7s4= +github.com/libp2p/go-libp2p-pubsub v0.7.0/go.mod h1:EuyBJFtF8qF67IEA98biwK8Xnw5MNJpJ/Z+8iWCMFwc= github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= -github.com/libp2p/go-libp2p-quic-transport v0.16.0 h1:aVg9/jr+R2esov5sH7wkXrmYmqJiUjtLMLYX3L9KYdY= github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= -github.com/libp2p/go-libp2p-resource-manager v0.1.2 h1:t66B/6EF6ivWEUgvO34NKOT3oPtkb+JTBJHdsIMx+mg= -github.com/libp2p/go-libp2p-resource-manager v0.1.2/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= +github.com/libp2p/go-libp2p-quic-transport v0.16.1/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= +github.com/libp2p/go-libp2p-quic-transport v0.17.0/go.mod h1:x4pw61P3/GRCcSLypcQJE/Q2+E9f4X+5aRcZLXf20LM= +github.com/libp2p/go-libp2p-resource-manager v0.1.5/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= +github.com/libp2p/go-libp2p-resource-manager v0.3.0 h1:2+cYxUNi33tcydsVLt6K5Fv2E3OTiVeafltecAj15E0= +github.com/libp2p/go-libp2p-resource-manager v0.3.0/go.mod h1:K+eCkiapf+ey/LADO4TaMpMTP9/Qde/uLlrnRqV4PLQ= github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= -github.com/libp2p/go-libp2p-swarm v0.10.1 h1:lXW3pgGt+BVmkzcFX61erX7l6Lt+WAamNhwa2Kf3eJM= -github.com/libp2p/go-libp2p-swarm v0.10.1/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= +github.com/libp2p/go-libp2p-swarm v0.10.2/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= +github.com/libp2p/go-libp2p-swarm v0.11.0 h1:ITgsTEY2tA4OxFJGcWeugiMh2x5+VOEnI2JStT1EWxI= +github.com/libp2p/go-libp2p-swarm v0.11.0/go.mod h1:sumjVYrC84gPSZOFKL8hNcnN6HZvJSwJ8ymaXeko4Lk= github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= +github.com/libp2p/go-libp2p-testing v0.8.0/go.mod h1:gRdsNxQSxAZowTgcLY7CC33xPmleZzoBpqSYbWenqPc= +github.com/libp2p/go-libp2p-testing v0.9.0/go.mod h1:Td7kbdkWqYTJYQGTwzlgXwaqldraIanyjuRiAbK/XQU= +github.com/libp2p/go-libp2p-testing v0.9.2 h1:dCpODRtRaDZKF8HXT9qqqgON+OMEB423Knrgeod8j84= +github.com/libp2p/go-libp2p-testing v0.9.2/go.mod h1:Td7kbdkWqYTJYQGTwzlgXwaqldraIanyjuRiAbK/XQU= github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-tls v0.3.1 h1:lsE2zYte+rZCEOHF72J1Fg3XK3dGQyKvI6i5ehJfEp0= github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= +github.com/libp2p/go-libp2p-transport-upgrader v0.7.1/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= -github.com/libp2p/go-libp2p-yamux v0.8.1 h1:pi7zUeZ4Z9TpbUMntvSvoP3dFD4SEw/VPybxBcOZGzg= github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= +github.com/libp2p/go-libp2p-yamux v0.8.2/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= +github.com/libp2p/go-mplex v0.6.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= +github.com/libp2p/go-mplex v0.7.0/go.mod h1:rW8ThnRcYWft/Jb2jeORBmPd6xuG3dGxWN/W168L9EU= github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-msgio v0.1.0 h1:8Q7g/528ivAlfXTFWvWhVjTE8XG8sDTkRUKPYh9+5Q8= github.com/libp2p/go-msgio v0.1.0/go.mod h1:eNlv2vy9V2X/kNldcZ+SShFE++o2Yjxwx6RAYsmgJnE= +github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= +github.com/libp2p/go-msgio v0.2.0/go.mod h1:dBVM1gW3Jk9XqHkU4eKdGvVHdLa51hoGfll6jMJMSlY= github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= @@ -713,31 +755,32 @@ github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= +github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= +github.com/libp2p/go-reuseport v0.2.0/go.mod h1:bvVho6eLMm6Bz5hmU0LYN3ixd3nPPvtIlaURZZgOY4k= github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-stream-muxer-multistream v0.4.0 h1:HsM/9OdtqnIzjVXcxTXjmqKrj3gJ8kacaOJwJS1ipaY= github.com/libp2p/go-stream-muxer-multistream v0.4.0/go.mod h1:nb+dGViZleRP4XcyHuZSVrJCBl55nRBOMmiSL/dyziw= github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-tcp-transport v0.5.0 h1:3ZPW8HAuyRAuFzyabE0hSrCXKKSWzROnZZX7DtcIatY= github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= -github.com/libp2p/go-ws-transport v0.6.0 h1:326XBL6Q+5CQ2KtjXz32+eGu02W/Kz2+Fm4SpXdr0q4= +github.com/libp2p/go-tcp-transport v0.5.1/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= github.com/libp2p/go-ws-transport v0.6.0/go.mod h1:dXqtI9e2JV9FtF1NOtWVZSKXh5zXvnuwPXfj8GPBbYU= github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/libp2p/go-yamux/v3 v3.0.2 h1:LW0q5+A1Wy0npEsPJP9wmare2NH4ohNluN5EWVwv2mE= github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= +github.com/libp2p/go-yamux/v3 v3.1.1 h1:X0qSVodCZciOu/f4KTp9V+O0LAqcqP2tdaUGB0+0lng= +github.com/libp2p/go-yamux/v3 v3.1.1/go.mod h1:jeLEQgLXqE2YqX1ilAClIfCMDY+0uXQUKmmb/qp0gT4= github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lucas-clemente/quic-go v0.25.0 h1:K+X9Gvd7JXsOHtU0N2icZ2Nw3rx82uBej3mP4CLgibc= github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg= +github.com/lucas-clemente/quic-go v0.27.0/go.mod h1:AzgQoPda7N+3IqMMMkywBKggIFo2KT6pfnlrQ2QieeI= +github.com/lucas-clemente/quic-go v0.27.1 h1:sOw+4kFSVrdWOYmUjufQ9GBVPqZ+tu+jMtXxXNmRJyk= +github.com/lucas-clemente/quic-go v0.27.1/go.mod h1:AzgQoPda7N+3IqMMMkywBKggIFo2KT6pfnlrQ2QieeI= github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= @@ -745,12 +788,15 @@ github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= +github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= +github.com/marten-seemann/qtls-go1-16 v0.1.5/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 h1:EnzzN9fPUkUck/1CuY1FlzBaIYMoiBsdwTNmNGkwUUM= +github.com/marten-seemann/qtls-go1-17 v0.1.1 h1:DQjHPq+aOzUeh9/lixAGunn6rIOQyWChPSI4+hgW7jc= +github.com/marten-seemann/qtls-go1-17 v0.1.1/go.mod h1:C2ekUKcDdz9SDWxec1N/MvcXBpaX9l3Nx67XaR84L5s= github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= +github.com/marten-seemann/qtls-go1-18 v0.1.1 h1:qp7p7XXUFL7fpBvSS1sWD+uSqPvzNQK43DH+/qEkj0Y= +github.com/marten-seemann/qtls-go1-18 v0.1.1/go.mod h1:mJttiymBAByA49mhlNZZGrH5u1uXYZJ+RW28Py7f4m4= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -781,8 +827,8 @@ github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3N github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/dns v1.1.45 h1:g5fRIhm9nx7g8osrAvgb16QJfmyMsyOCb+J7LSv+Qzk= -github.com/miekg/dns v1.1.45/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= +github.com/miekg/dns v1.1.49 h1:qe0mQU3Z/XpFeE+AEBo2rqaS1IPBJ3anmqZ4XiZJVG8= +github.com/miekg/dns v1.1.49/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= @@ -802,14 +848,16 @@ github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= +github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= +github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -817,10 +865,11 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ= +github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= @@ -857,8 +906,9 @@ github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5 github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multicodec v0.4.1 h1:BSJbf+zpghcZMZrwTYBGwy0CPcVZGWiC72Cp8bBd4R4= github.com/multiformats/go-multicodec v0.4.1/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ= +github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= +github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= @@ -870,8 +920,9 @@ github.com/multiformats/go-multihash v0.1.0 h1:CgAgwqk3//SVEw3T+6DqI4mWMyRuDwZtO github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-multistream v0.2.2 h1:TCYu1BHTDr1F/Qm75qwYISQdzGcRdC21nFgQW7l7GBo= github.com/multiformats/go-multistream v0.2.2/go.mod h1:UIcnm7Zuo8HKG+HkWgfQsGL+/MIEhyTqbODbIUwSXKs= +github.com/multiformats/go-multistream v0.3.1 h1:GQM84yyQ5EZB9l0p5+5eDwFoQgwHI2tLmYGpaWlLF/U= +github.com/multiformats/go-multistream v0.3.1/go.mod h1:ODRoqamLUsETKS9BNcII4gcRsJBU5VAwRIv7O39cEXg= github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= @@ -899,8 +950,9 @@ github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= +github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -955,8 +1007,9 @@ github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9 github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -977,6 +1030,7 @@ github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= +github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -996,8 +1050,9 @@ github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16 github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -1109,25 +1164,29 @@ github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45 github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/umbracle/fastrlp v0.0.0-20211229195328-c1416904ae17 h1:ZZy8Rj2SqGcZn1hTcoLdwFBROzrf5KiuRwhp8G4nnfA= +github.com/umbracle/ethgo v0.1.2 h1:r0o6LXfJjuKb1orDpqTNbuBJGIZJCcbEzvyC3DrbP5Y= +github.com/umbracle/ethgo v0.1.2/go.mod h1:1LP6DLZAaHoe2hbJonPd9Nhvxu1Kn9puIge9um+qavc= github.com/umbracle/fastrlp v0.0.0-20211229195328-c1416904ae17/go.mod h1:c8J0h9aULj2i3umrfyestM6jCq0LK0U6ly6bWy96nd4= +github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722 h1:10Nbw6cACsnQm7r34zlpJky+IzxVLRk6MKTS2d3Vp0E= +github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722/go.mod h1:c8J0h9aULj2i3umrfyestM6jCq0LK0U6ly6bWy96nd4= github.com/umbracle/go-eth-bn256 v0.0.0-20190607160430-b36caf4e0f6b h1:t3nz9xXkLZJz+ZlTGFT3ixsCGO5AHx1Yift2EAfjnnc= github.com/umbracle/go-eth-bn256 v0.0.0-20190607160430-b36caf4e0f6b/go.mod h1:B2zj4f3YmUPeyCNSlAEgOf6tuGzeYKvIxAZzwy9PxPA= -github.com/umbracle/go-web3 v0.0.0-20220224145938-aaa1038c1b69 h1:SrIRL9SlfBp4nOUEnWGBAS/lX9UgF6myH/rzHgdj1rE= -github.com/umbracle/go-web3 v0.0.0-20220224145938-aaa1038c1b69/go.mod h1:Go3c6psJU9tbUhrYLuuKIWJrN0ntpoxucp4MlV56k4w= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.4.0 h1:PuaTGZIw3mjYhhhbVbCQp8aciRZN9YdoB7MGX9Ko76A= github.com/valyala/fasthttp v1.4.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= +github.com/valyala/fasthttp v1.37.0 h1:7WHCyI7EAkQMVmrfBhWTCOaeROb1aCBiTopx63LkMbE= +github.com/valyala/fasthttp v1.37.0/go.mod h1:t/G+3rLek+CyY9bnIE+YlMRddxVAAGjhxndDB4i4C0I= github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o= github.com/valyala/fastjson v1.6.3 h1:tAKFnnwmeMGPbwJ7IwxcTPCNr3uIzoIj3/Fh90ra4xc= github.com/valyala/fastjson v1.6.3/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= @@ -1174,14 +1233,16 @@ go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= @@ -1190,8 +1251,8 @@ go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.20.0 h1:N4oPlghZwYG55MlU6LXk/Zp00FVNE9X9wrYO8CEs4lc= -go.uber.org/zap v1.20.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1226,8 +1287,11 @@ golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220214200702-86341886e292 h1:f+lwQ+GtmgoY+A2YaQxlSOnDjXcQ7ZRLWOHbC6HtRqE= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e h1:T8NU3HyQ8ClP4SEE+KbFlg6n0NhuTsN4MyznaarGsZM= +golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1241,6 +1305,7 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= +golang.org/x/exp v0.0.0-20220426173459-3bcf042a4bf5/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1268,8 +1333,10 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.1 h1:OJxoQ/rynoF0dcCdI7cLPktw/hR2cueqYfjm43oqK38= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20211013180041-c96bc1413d57/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 h1:kQgndtyPBW/JIYERgdxfwMYh3AVStj88WQTlNDi2a+o= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1334,11 +1401,14 @@ golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de h1:pZB1TWnKi+o4bENlbzAgLrEbY4RMYmUIRobMcSmfeYc= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220531201128-c960675eff93 h1:MYimHLfoXEpOhqd/zgoA/uoXzHB86AEky4LAx5ij9xA= +golang.org/x/net v0.0.0-20220531201128-c960675eff93/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1358,8 +1428,10 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM= golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 h1:zwrSfklXn0gxyLRX/aR+q6cgHbV/ItVyzbPlbA+dkAw= +golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1371,8 +1443,9 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 h1:w8s32wxx3sY+OjLlv9qltkLU5yvJzxjjgiHWLjdIcw4= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1475,10 +1548,14 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886 h1:eJv7u3ksNXoLbGSKuv2s/SIO4tJVxc/A+MTpzxDgz/Q= golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1497,8 +1574,9 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac h1:7zkz7BUtwNFFqcowJ+RIgu2MaV/MapERkDIy+mwPyjs= golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220411224347-583f2d630306 h1:+gHMid33q6pen7kv9xvT+JRinntgeXO2AeZVd0AWD3w= +golang.org/x/time v0.0.0-20220411224347-583f2d630306/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1567,13 +1645,16 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.8-0.20211029000441-d6a9af8af023/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10 h1:QjFRCZxdOhBJ/UNgnBZLbNV13DlbnK0quyivTnXJM20= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df h1:5Pf6pFKu98ODmgnpvkJ3kFUOQGGLIzLIkbzUHp47618= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= @@ -1616,8 +1697,12 @@ google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tD google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0 h1:ExR2D+5TYIrMphWgs5JCgwRhEDlPDXXrLwHHMgPHTXE= google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.81.0 h1:o8WF5AvfidafWbFjsRyupxyEQJNUWxLZJCK5NXrxZZ8= +google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1673,6 +1758,7 @@ google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= @@ -1693,7 +1779,6 @@ google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEc google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo7ya8kMnvprhcWM045PmkBdMO9zN0= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= @@ -1704,8 +1789,17 @@ google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2 google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= google.golang.org/genproto v0.0.0-20220405205423-9d709892a2bf/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 h1:q1kiSVscqoDeqTF27eQ2NnLLDmqF0I373qQNXYMy0fo= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220531173845-685668d2de03 h1:FG2YhwyltdDPC/0XuwzU0dijPcTzvfTtst0QdlDxoMU= +google.golang.org/genproto v0.0.0-20220531173845-685668d2de03/go.mod h1:yKyY4AMRwFiC8yMMNaMi+RkCnjZJt9LoWuvhXjMs+To= google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= @@ -1745,8 +1839,9 @@ google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzI google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2 h1:u+MLGgVf7vRdjEYZ8wDFhAVNmhkbJ5hmrA1LMWK1CAQ= google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0 h1:9n77onPX5F3qfFCqjy9dhn8PbNQsIKeVU04J9G7umt8= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1780,8 +1875,9 @@ gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce h1:+JknDZhAj8YMt7GC73Ei8pv4MzjDUNPHgQWJdtMAaDU= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= +gopkg.in/square/go-jose.v2 v2.6.0 h1:NGk74WTnPKBNUhNzQX7PYcTLUjoq7mzKk2OKbvwk2iI= +gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= @@ -1798,8 +1894,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/helper/tests/testing.go b/helper/tests/testing.go index 4727fb38f4..f526976422 100644 --- a/helper/tests/testing.go +++ b/helper/tests/testing.go @@ -9,6 +9,7 @@ import ( libp2pCrypto "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" "github.com/multiformats/go-multiaddr" + "github.com/umbracle/ethgo" "math/big" "net" "testing" @@ -18,8 +19,7 @@ import ( txpoolOp "github.com/0xPolygon/polygon-edge/txpool/proto" "github.com/0xPolygon/polygon-edge/types" "github.com/stretchr/testify/assert" - "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/jsonrpc" + "github.com/umbracle/ethgo/jsonrpc" empty "google.golang.org/protobuf/types/known/emptypb" ) @@ -130,7 +130,7 @@ func WaitUntilTxPoolEmpty( func WaitForNonce( ctx context.Context, ethClient *jsonrpc.Eth, - addr web3.Address, + addr ethgo.Address, expectedNonce uint64, ) ( interface{}, @@ -142,7 +142,7 @@ func WaitForNonce( } resObj, err := RetryUntilTimeout(ctx, func() (interface{}, bool) { - nonce, err := ethClient.GetNonce(addr, web3.Latest) + nonce, err := ethClient.GetNonce(addr, ethgo.Latest) if err != nil { // error -> stop retrying return result{nonce, err}, false @@ -170,9 +170,9 @@ func WaitForNonce( } // WaitForReceipt waits transaction receipt -func WaitForReceipt(ctx context.Context, client *jsonrpc.Eth, hash web3.Hash) (*web3.Receipt, error) { +func WaitForReceipt(ctx context.Context, client *jsonrpc.Eth, hash ethgo.Hash) (*ethgo.Receipt, error) { type result struct { - receipt *web3.Receipt + receipt *ethgo.Receipt err error } diff --git a/jsonrpc/errors.go b/jsonrpc/errors.go index c7bcfb1b01..bb2458be93 100644 --- a/jsonrpc/errors.go +++ b/jsonrpc/errors.go @@ -4,7 +4,7 @@ import ( "errors" "fmt" "github.com/0xPolygon/polygon-edge/state/runtime" - "github.com/umbracle/go-web3/abi" + "github.com/umbracle/ethgo/abi" ) var ( diff --git a/network/server.go b/network/server.go index fbb77ba62a..78f830b6c4 100644 --- a/network/server.go +++ b/network/server.go @@ -8,7 +8,7 @@ import ( "github.com/0xPolygon/polygon-edge/network/dial" "github.com/0xPolygon/polygon-edge/network/discovery" "github.com/libp2p/go-libp2p" - noise "github.com/libp2p/go-libp2p-noise" + "github.com/libp2p/go-libp2p/p2p/security/noise" rawGrpc "google.golang.org/grpc" "sync" "sync/atomic" diff --git a/vendor/cloud.google.com/go/.release-please-manifest-submodules.json b/vendor/cloud.google.com/go/.release-please-manifest-submodules.json new file mode 100644 index 0000000000..bbfc8390cb --- /dev/null +++ b/vendor/cloud.google.com/go/.release-please-manifest-submodules.json @@ -0,0 +1,105 @@ +{ + "accessapproval": "1.3.0", + "accesscontextmanager": "1.2.0", + "aiplatform": "1.10.0", + "analytics": "0.6.1", + "apigateway": "1.2.0", + "apigeeconnect": "1.2.0", + "appengine": "1.3.0", + "area120": "0.3.0", + "artifactregistry": "1.3.0", + "asset": "1.2.0", + "assuredworkloads": "0.6.0", + "automl": "1.3.0", + "billing": "1.2.0", + "binaryauthorization": "0.5.0", + "certificatemanager": "0.2.0", + "channel": "1.6.0", + "cloudbuild": "1.2.0", + "clouddms": "1.2.0", + "cloudtasks": "1.3.0", + "compute": "1.6.1", + "contactcenterinsights": "1.2.0", + "container": "1.2.0", + "containeranalysis": "0.3.0", + "datacatalog": "1.3.0", + "dataflow": "0.4.0", + "datafusion": "1.3.0", + "datalabeling": "0.3.0", + "dataplex": "0.4.0", + "dataproc": "1.5.0", + "dataqna": "0.3.0", + "datastream": "0.5.0", + "deploy": "1.2.0", + "dialogflow": "1.9.0", + "dlp": "1.4.0", + "documentai": "1.4.0", + "domains": "0.4.0", + "essentialcontacts": "1.2.0", + "eventarc": "1.6.0", + "filestore": "1.2.0", + "functions": "1.3.0", + "gaming": "1.2.0", + "gkebackup": "0.1.0", + "gkeconnect": "0.3.0", + "gkehub": "0.5.0", + "gkemulticloud": "0.2.0", + "grafeas": "0.2.0", + "gsuiteaddons": "1.2.0", + "iam": "0.3.0", + "iap": "1.3.0", + "ids": "0.3.0", + "iot": "1.2.0", + "kms": "1.4.0", + "language": "1.2.0", + "lifesciences": "0.3.0", + "managedidentities": "1.2.0", + "mediatranslation": "0.3.0", + "memcache": "1.2.0", + "metastore": "1.2.0", + "monitoring": "1.5.0", + "networkconnectivity": "1.2.0", + "networkmanagement": "1.2.0", + "networksecurity": "0.3.0", + "notebooks": "0.4.0", + "optimization": "0.1.0", + "orchestration": "1.2.0", + "orgpolicy": "1.3.0", + "osconfig": "1.5.0", + "oslogin": "1.2.0", + "phishingprotection": "0.3.0", + "policytroubleshooter": "1.2.0", + "privatecatalog": "0.3.0", + "recaptchaenterprise/v2": "2.0.0", + "recommendationengine": "0.2.0", + "recommender": "1.3.0", + "redis": "1.5.0", + "resourcemanager": "1.2.0", + "resourcesettings": "1.2.0", + "retail": "1.3.0", + "run": "0.1.1", + "scheduler": "1.2.0", + "secretmanager": "1.4.0", + "security": "1.4.0", + "securitycenter": "1.7.0", + "servicecontrol": "1.3.0", + "servicedirectory": "1.2.0", + "servicemanagement": "1.3.0", + "serviceusage": "1.2.0", + "shell": "1.2.0", + "speech": "1.4.0", + "storagetransfer": "1.3.0", + "talent": "0.5.0", + "texttospeech": "1.3.0", + "tpu": "1.2.0", + "trace": "1.2.0", + "translate": "1.2.0", + "video": "1.4.0", + "videointelligence": "1.2.0", + "vision/v2": "2.0.0", + "vmmigration": "0.3.0", + "vpcaccess": "1.2.0", + "webrisk": "1.2.0", + "websecurityscanner": "1.2.0", + "workflows": "1.4.0" +} diff --git a/vendor/cloud.google.com/go/.release-please-manifest.json b/vendor/cloud.google.com/go/.release-please-manifest.json new file mode 100644 index 0000000000..9cd82e370f --- /dev/null +++ b/vendor/cloud.google.com/go/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "0.102.0" +} diff --git a/vendor/cloud.google.com/go/CHANGES.md b/vendor/cloud.google.com/go/CHANGES.md index bac014faa3..06dec80a57 100644 --- a/vendor/cloud.google.com/go/CHANGES.md +++ b/vendor/cloud.google.com/go/CHANGES.md @@ -1,5 +1,36 @@ # Changes +## [0.102.0](https://github.com/googleapis/google-cloud-go/compare/v0.101.1...v0.102.0) (2022-05-24) + + +### Features + +* **civil:** add Before and After methods to civil.Time ([#5703](https://github.com/googleapis/google-cloud-go/issues/5703)) ([7acaaaf](https://github.com/googleapis/google-cloud-go/commit/7acaaafef47668c3e8382b8bc03475598c3db187)) + +### [0.101.1](https://github.com/googleapis/google-cloud-go/compare/v0.101.0...v0.101.1) (2022-05-03) + + +### Bug Fixes + +* **internal/gapicgen:** properly update modules that have no gapic changes ([#5945](https://github.com/googleapis/google-cloud-go/issues/5945)) ([de2befc](https://github.com/googleapis/google-cloud-go/commit/de2befcaa2a886499db9da6d4d04d28398c8d44b)) + +## [0.101.0](https://github.com/googleapis/google-cloud-go/compare/v0.100.2...v0.101.0) (2022-04-20) + + +### Features + +* **all:** bump grpc dep ([#5481](https://github.com/googleapis/google-cloud-go/issues/5481)) ([b12964d](https://github.com/googleapis/google-cloud-go/commit/b12964df5c63c647aaf204e73cfcdfd379d19682)) +* **internal/gapicgen:** change versionClient for gapics ([#5687](https://github.com/googleapis/google-cloud-go/issues/5687)) ([55f0d92](https://github.com/googleapis/google-cloud-go/commit/55f0d92bf112f14b024b4ab0076c9875a17423c9)) + + +### Bug Fixes + +* **internal/gapicgen:** add generation of internal/version.go for new client modules ([#5726](https://github.com/googleapis/google-cloud-go/issues/5726)) ([341e0df](https://github.com/googleapis/google-cloud-go/commit/341e0df1e44480706180cc5b07c49b3cee904095)) +* **internal/gapicgen:** don't gen version files for longrunning and debugger ([#5698](https://github.com/googleapis/google-cloud-go/issues/5698)) ([3a81108](https://github.com/googleapis/google-cloud-go/commit/3a81108c74cd8864c56b8ab5939afd864db3c64b)) +* **internal/gapicgen:** don't try to make snippets for non-gapics ([#5919](https://github.com/googleapis/google-cloud-go/issues/5919)) ([c94dddc](https://github.com/googleapis/google-cloud-go/commit/c94dddc60ef83a0584ba8f7dd24589d9db971672)) +* **internal/gapicgen:** move breaking change indicator if present ([#5452](https://github.com/googleapis/google-cloud-go/issues/5452)) ([e712df5](https://github.com/googleapis/google-cloud-go/commit/e712df5ebb45598a1653081d7e11e578bad22ff8)) +* **internal/godocfx:** prevent errors for filtered mods ([#5485](https://github.com/googleapis/google-cloud-go/issues/5485)) ([6cb9b89](https://github.com/googleapis/google-cloud-go/commit/6cb9b89b2d654c695eab00d8fb375cce0cd6e059)) + ## [0.100.0](https://www.github.com/googleapis/google-cloud-go/compare/v0.99.0...v0.100.0) (2022-01-04) diff --git a/vendor/cloud.google.com/go/CONTRIBUTING.md b/vendor/cloud.google.com/go/CONTRIBUTING.md index c3a3852c38..6d6e48b65b 100644 --- a/vendor/cloud.google.com/go/CONTRIBUTING.md +++ b/vendor/cloud.google.com/go/CONTRIBUTING.md @@ -2,7 +2,7 @@ 1. [File an issue](https://github.com/googleapis/google-cloud-go/issues/new/choose). The issue will be used to discuss the bug or feature and should be created - before sending a CL. + before sending a PR. 1. [Install Go](https://golang.org/dl/). 1. Ensure that your `GOBIN` directory (by default `$(go env GOPATH)/bin`) diff --git a/vendor/cloud.google.com/go/README.md b/vendor/cloud.google.com/go/README.md index acde43bc88..669cc75327 100644 --- a/vendor/cloud.google.com/go/README.md +++ b/vendor/cloud.google.com/go/README.md @@ -32,7 +32,13 @@ For an updated list of all of our released APIs please see our ## [Go Versions Supported](#supported-versions) -We currently support Go versions 1.11 and newer. +Our libraries are compatible with at least the three most recent, major Go +releases. They are currently compatible with: + +- Go 1.18 +- Go 1.17 +- Go 1.16 +- Go 1.15 ## Authorization diff --git a/vendor/cloud.google.com/go/doc.go b/vendor/cloud.google.com/go/doc.go index 746696f371..06463833e3 100644 --- a/vendor/cloud.google.com/go/doc.go +++ b/vendor/cloud.google.com/go/doc.go @@ -165,16 +165,42 @@ For HTTP logging, set the GODEBUG environment variable to "http2debug=1" or "htt Inspecting errors -Most of the errors returned by the generated clients can be converted into a -`grpc.Status`. Converting your errors to this type can be a useful to get -more information about what went wrong while debugging. - if err != { +Most of the errors returned by the generated clients are wrapped in an +`apierror.APIError` (https://pkg.go.dev/github.com/googleapis/gax-go/v2/apierror) +and can be further unwrapped into a `grpc.Status` or `googleapi.Error` depending +on the transport used to make the call (gRPC or REST). Converting your errors to +these types can be a useful way to get more information about what went wrong +while debugging. + +`apierror.APIError` gives access to specific details in the +error. The transport-specific errors can still be unwrapped using the +`apierror.APIError`. + if err != nil { + var ae *apierror.APIError + if errors.As(err, &ae) { + log.Println(ae.Reason()) + log.Println(ae.Details().Help.GetLinks()) + } + } + +If the gRPC transport was used, the `grpc.Status` can still be parsed using the +`status.FromError` function. + if err != nil { if s, ok := status.FromError(err); ok { - log.Println(s.Message()) - for _, d := range s.Proto().Details { - log.Println(d) - } - } + log.Println(s.Message()) + for _, d := range s.Proto().Details { + log.Println(d) + } + } + } + +If the REST transport was used, the `googleapi.Error` can be parsed in a similar +way. + if err != nil { + var gerr *googleapi.Error + if errors.As(err, &gerr) { + log.Println(gerr.Message) + } } Client Stability diff --git a/vendor/cloud.google.com/go/go.mod b/vendor/cloud.google.com/go/go.mod deleted file mode 100644 index 48a235d4e1..0000000000 --- a/vendor/cloud.google.com/go/go.mod +++ /dev/null @@ -1,18 +0,0 @@ -module cloud.google.com/go - -go 1.11 - -require ( - cloud.google.com/go/compute v0.1.0 - github.com/golang/protobuf v1.5.2 - github.com/google/go-cmp v0.5.6 - github.com/google/martian/v3 v3.2.1 - github.com/googleapis/gax-go/v2 v2.1.1 - go.opencensus.io v0.23.0 - golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 - golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 - google.golang.org/api v0.63.0 - google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c - google.golang.org/grpc v1.40.1 - google.golang.org/protobuf v1.27.1 -) diff --git a/vendor/cloud.google.com/go/go.sum b/vendor/cloud.google.com/go/go.sum deleted file mode 100644 index 5d2cee5093..0000000000 --- a/vendor/cloud.google.com/go/go.sum +++ /dev/null @@ -1,202 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403 h1:cqQfy1jclcSy/FwLjemeg3SR1yaINm74aQyupQ0Bl8M= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed h1:OZmjad4L3H8ncOIR8rnb5MREYqG8ixi5+WbeUsquF0c= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0 h1:dulLQAYQFYtG5MTplgNGHWuV2D+OBD+Z8lmDBmbLg+s= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/martian/v3 v3.2.1 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420 h1:a8jGStKg0XqKDlKqjLrXn0ioF5MH36pT7Z0BRTqLhbk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486 h1:5hpz5aRr+W1erYCL5JRhSUBJRph7l9XkNveoExlrKYk= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.63.0 h1:n2bqqK895ygnBpdPDYetfy23K7fJ22wsrZKCyfuRkkA= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c h1:c5afAQ+F8m49fzDEIKvD7o/D350YjVseBMjtoKL1xsg= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1 h1:pnP7OclFFFgFi4VHQDQDaoXUVauOFyktqTsqqgzFKbc= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/cloud.google.com/go/iam/go.mod b/vendor/cloud.google.com/go/iam/go.mod deleted file mode 100644 index e5c28e651f..0000000000 --- a/vendor/cloud.google.com/go/iam/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module cloud.google.com/go/iam - -go 1.15 - -require ( - cloud.google.com/go v0.100.2 - github.com/golang/protobuf v1.5.2 - github.com/googleapis/gax-go/v2 v2.1.1 - google.golang.org/api v0.70.0 - google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf - google.golang.org/grpc v1.44.0 -) diff --git a/vendor/cloud.google.com/go/iam/go.sum b/vendor/cloud.google.com/go/iam/go.sum deleted file mode 100644 index eebcbca7b6..0000000000 --- a/vendor/cloud.google.com/go/iam/go.sum +++ /dev/null @@ -1,587 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0 h1:mPL/MzDDYHsh5tHRS9mhmhWlcgClCrCa6ApQCU6wnHI= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1 h1:dp3bWCh+PPO1zjRRiCSczJav13sBvG4UhNyVTa1KqdU= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158 h1:rm+CHSpPEEW2IsXUib1ThaHIjuBVZjxNgSKmBLFfD4c= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0 h1:67zQnAE0T2rB0A3CwLSas0K+SbVzSxP+zTLkQLexeiw= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf h1:SVYXkUz2yZS9FWb2Gm8ivSlbNQzL2Z/NpPKE3RG2jWk= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/vendor/cloud.google.com/go/release-please-config-yoshi-submodules.json b/vendor/cloud.google.com/go/release-please-config-yoshi-submodules.json new file mode 100644 index 0000000000..2dd7a1b9d7 --- /dev/null +++ b/vendor/cloud.google.com/go/release-please-config-yoshi-submodules.json @@ -0,0 +1,316 @@ +{ + "release-type": "go-yoshi", + "include-component-in-tag": true, + "tag-separator": "/", + "packages": { + "accessapproval": { + "component": "accessapproval" + }, + "accesscontextmanager": { + "component": "accesscontextmanager" + }, + "aiplatform": { + "component": "aiplatform" + }, + "analytics": { + "component": "analytics" + }, + "apigateway": { + "component": "apigateway" + }, + "apigeeconnect": { + "component": "apigeeconnect" + }, + "appengine": { + "component": "appengine" + }, + "area120": { + "component": "area120" + }, + "artifactregistry": { + "component": "artifactregistry" + }, + "asset": { + "component": "asset" + }, + "assuredworkloads": { + "component": "assuredworkloads" + }, + "automl": { + "component": "automl" + }, + "billing": { + "component": "billing" + }, + "binaryauthorization": { + "component": "binaryauthorization" + }, + "certificatemanager": { + "component": "certificatemanager" + }, + "channel": { + "component": "channel" + }, + "cloudbuild": { + "component": "cloudbuild" + }, + "clouddms": { + "component": "clouddms" + }, + "cloudtasks": { + "component": "cloudtasks" + }, + "compute": { + "component": "compute" + }, + "contactcenterinsights": { + "component": "contactcenterinsights" + }, + "container": { + "component": "container" + }, + "containeranalysis": { + "component": "containeranalysis" + }, + "datacatalog": { + "component": "datacatalog" + }, + "dataflow": { + "component": "dataflow" + }, + "datafusion": { + "component": "datafusion" + }, + "datalabeling": { + "component": "datalabeling" + }, + "dataplex": { + "component": "dataplex" + }, + "dataproc": { + "component": "dataproc" + }, + "dataqna": { + "component": "dataqna" + }, + "datastream": { + "component": "datastream" + }, + "deploy": { + "component": "deploy" + }, + "dialogflow": { + "component": "dialogflow" + }, + "dlp": { + "component": "dlp" + }, + "documentai": { + "component": "documentai" + }, + "domains": { + "component": "domains" + }, + "essentialcontacts": { + "component": "essentialcontacts" + }, + "eventarc": { + "component": "eventarc" + }, + "filestore": { + "component": "filestore" + }, + "functions": { + "component": "functions" + }, + "gaming": { + "component": "gaming" + }, + "gkebackup": { + "component": "gkebackup" + }, + "gkeconnect": { + "component": "gkeconnect" + }, + "gkehub": { + "component": "gkehub" + }, + "gkemulticloud": { + "component": "gkemulticloud" + }, + "grafeas": { + "component": "grafeas" + }, + "gsuiteaddons": { + "component": "gsuiteaddons" + }, + "iam": { + "component": "iam" + }, + "iap": { + "component": "iap" + }, + "ids": { + "component": "ids" + }, + "iot": { + "component": "iot" + }, + "kms": { + "component": "kms" + }, + "language": { + "component": "language" + }, + "lifesciences": { + "component": "lifesciences" + }, + "managedidentities": { + "component": "managedidentities" + }, + "mediatranslation": { + "component": "mediatranslation" + }, + "memcache": { + "component": "memcache" + }, + "metastore": { + "component": "metastore" + }, + "monitoring": { + "component": "monitoring" + }, + "networkconnectivity": { + "component": "networkconnectivity" + }, + "networkmanagement": { + "component": "networkmanagement" + }, + "networksecurity": { + "component": "networksecurity" + }, + "notebooks": { + "component": "notebooks" + }, + "optimization": { + "component": "optimization" + }, + "orchestration": { + "component": "orchestration" + }, + "orgpolicy": { + "component": "orgpolicy" + }, + "osconfig": { + "component": "osconfig" + }, + "oslogin": { + "component": "oslogin" + }, + "phishingprotection": { + "component": "phishingprotection" + }, + "policytroubleshooter": { + "component": "policytroubleshooter" + }, + "privatecatalog": { + "component": "privatecatalog" + }, + "recaptchaenterprise/v2": { + "component": "recaptchaenterprise" + }, + "recommendationengine": { + "component": "recommendationengine" + }, + "recommender": { + "component": "recommender" + }, + "redis": { + "component": "redis" + }, + "resourcemanager": { + "component": "resourcemanager" + }, + "resourcesettings": { + "component": "resourcesettings" + }, + "retail": { + "component": "retail" + }, + "run": { + "component": "run" + }, + "scheduler": { + "component": "scheduler" + }, + "secretmanager": { + "component": "secretmanager" + }, + "security": { + "component": "security" + }, + "securitycenter": { + "component": "securitycenter" + }, + "servicecontrol": { + "component": "servicecontrol" + }, + "servicedirectory": { + "component": "servicedirectory" + }, + "servicemanagement": { + "component": "servicemanagement" + }, + "serviceusage": { + "component": "serviceusage" + }, + "shell": { + "component": "shell" + }, + "speech": { + "component": "speech" + }, + "storagetransfer": { + "component": "storagetransfer" + }, + "talent": { + "component": "talent" + }, + "texttospeech": { + "component": "texttospeech" + }, + "tpu": { + "component": "tpu" + }, + "trace": { + "component": "trace" + }, + "translate": { + "component": "translate" + }, + "video": { + "component": "video" + }, + "videointelligence": { + "component": "videointelligence" + }, + "vision/v2": { + "component": "vision" + }, + "vmmigration": { + "component": "vmmigration" + }, + "vpcaccess": { + "component": "vpcaccess" + }, + "webrisk": { + "component": "webrisk" + }, + "websecurityscanner": { + "component": "websecurityscanner" + }, + "workflows": { + "component": "workflows" + } + } +} diff --git a/vendor/cloud.google.com/go/release-please-config.json b/vendor/cloud.google.com/go/release-please-config.json new file mode 100644 index 0000000000..546e7c31ad --- /dev/null +++ b/vendor/cloud.google.com/go/release-please-config.json @@ -0,0 +1,10 @@ +{ + "release-type": "go-yoshi", + "separate-pull-requests": true, + "include-component-in-tag": false, + "packages": { + ".": { + "component": "main" + } + } +} diff --git a/vendor/github.com/libp2p/go-conn-security-multistream/LICENSE b/vendor/github.com/andybalholm/brotli/LICENSE similarity index 87% rename from vendor/github.com/libp2p/go-conn-security-multistream/LICENSE rename to vendor/github.com/andybalholm/brotli/LICENSE index 6cccfc2baf..33b7cdd2db 100644 --- a/vendor/github.com/libp2p/go-conn-security-multistream/LICENSE +++ b/vendor/github.com/andybalholm/brotli/LICENSE @@ -1,6 +1,4 @@ -The MIT License (MIT) - -Copyright (c) 2018 Protocol Labs +Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -14,7 +12,7 @@ all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN diff --git a/vendor/github.com/andybalholm/brotli/README.md b/vendor/github.com/andybalholm/brotli/README.md new file mode 100644 index 0000000000..1ea7fdb759 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/README.md @@ -0,0 +1,7 @@ +This package is a brotli compressor and decompressor implemented in Go. +It was translated from the reference implementation (https://github.com/google/brotli) +with the `c2go` tool at https://github.com/andybalholm/c2go. + +I am using it in production with https://github.com/andybalholm/redwood. + +API documentation is found at https://pkg.go.dev/github.com/andybalholm/brotli?tab=doc. diff --git a/vendor/github.com/andybalholm/brotli/backward_references.go b/vendor/github.com/andybalholm/brotli/backward_references.go new file mode 100644 index 0000000000..008c054d1c --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/backward_references.go @@ -0,0 +1,185 @@ +package brotli + +import ( + "sync" +) + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function to find backward reference copies. */ + +func computeDistanceCode(distance uint, max_distance uint, dist_cache []int) uint { + if distance <= max_distance { + var distance_plus_3 uint = distance + 3 + var offset0 uint = distance_plus_3 - uint(dist_cache[0]) + var offset1 uint = distance_plus_3 - uint(dist_cache[1]) + if distance == uint(dist_cache[0]) { + return 0 + } else if distance == uint(dist_cache[1]) { + return 1 + } else if offset0 < 7 { + return (0x9750468 >> (4 * offset0)) & 0xF + } else if offset1 < 7 { + return (0xFDB1ACE >> (4 * offset1)) & 0xF + } else if distance == uint(dist_cache[2]) { + return 2 + } else if distance == uint(dist_cache[3]) { + return 3 + } + } + + return distance + numDistanceShortCodes - 1 +} + +var hasherSearchResultPool sync.Pool + +func createBackwardReferences(num_bytes uint, position uint, ringbuffer []byte, ringbuffer_mask uint, params *encoderParams, hasher hasherHandle, dist_cache []int, last_insert_len *uint, commands *[]command, num_literals *uint) { + var max_backward_limit uint = maxBackwardLimit(params.lgwin) + var insert_length uint = *last_insert_len + var pos_end uint = position + num_bytes + var store_end uint + if num_bytes >= hasher.StoreLookahead() { + store_end = position + num_bytes - hasher.StoreLookahead() + 1 + } else { + store_end = position + } + var random_heuristics_window_size uint = literalSpreeLengthForSparseSearch(params) + var apply_random_heuristics uint = position + random_heuristics_window_size + var gap uint = 0 + /* Set maximum distance, see section 9.1. of the spec. */ + + const kMinScore uint = scoreBase + 100 + + /* For speed up heuristics for random data. */ + + /* Minimum score to accept a backward reference. */ + hasher.PrepareDistanceCache(dist_cache) + sr2, _ := hasherSearchResultPool.Get().(*hasherSearchResult) + if sr2 == nil { + sr2 = &hasherSearchResult{} + } + sr, _ := hasherSearchResultPool.Get().(*hasherSearchResult) + if sr == nil { + sr = &hasherSearchResult{} + } + + for position+hasher.HashTypeLength() < pos_end { + var max_length uint = pos_end - position + var max_distance uint = brotli_min_size_t(position, max_backward_limit) + sr.len = 0 + sr.len_code_delta = 0 + sr.distance = 0 + sr.score = kMinScore + hasher.FindLongestMatch(¶ms.dictionary, ringbuffer, ringbuffer_mask, dist_cache, position, max_length, max_distance, gap, params.dist.max_distance, sr) + if sr.score > kMinScore { + /* Found a match. Let's look for something even better ahead. */ + var delayed_backward_references_in_row int = 0 + max_length-- + for ; ; max_length-- { + var cost_diff_lazy uint = 175 + if params.quality < minQualityForExtensiveReferenceSearch { + sr2.len = brotli_min_size_t(sr.len-1, max_length) + } else { + sr2.len = 0 + } + sr2.len_code_delta = 0 + sr2.distance = 0 + sr2.score = kMinScore + max_distance = brotli_min_size_t(position+1, max_backward_limit) + hasher.FindLongestMatch(¶ms.dictionary, ringbuffer, ringbuffer_mask, dist_cache, position+1, max_length, max_distance, gap, params.dist.max_distance, sr2) + if sr2.score >= sr.score+cost_diff_lazy { + /* Ok, let's just write one byte for now and start a match from the + next byte. */ + position++ + + insert_length++ + *sr = *sr2 + delayed_backward_references_in_row++ + if delayed_backward_references_in_row < 4 && position+hasher.HashTypeLength() < pos_end { + continue + } + } + + break + } + + apply_random_heuristics = position + 2*sr.len + random_heuristics_window_size + max_distance = brotli_min_size_t(position, max_backward_limit) + { + /* The first 16 codes are special short-codes, + and the minimum offset is 1. */ + var distance_code uint = computeDistanceCode(sr.distance, max_distance+gap, dist_cache) + if (sr.distance <= (max_distance + gap)) && distance_code > 0 { + dist_cache[3] = dist_cache[2] + dist_cache[2] = dist_cache[1] + dist_cache[1] = dist_cache[0] + dist_cache[0] = int(sr.distance) + hasher.PrepareDistanceCache(dist_cache) + } + + *commands = append(*commands, makeCommand(¶ms.dist, insert_length, sr.len, sr.len_code_delta, distance_code)) + } + + *num_literals += insert_length + insert_length = 0 + /* Put the hash keys into the table, if there are enough bytes left. + Depending on the hasher implementation, it can push all positions + in the given range or only a subset of them. + Avoid hash poisoning with RLE data. */ + { + var range_start uint = position + 2 + var range_end uint = brotli_min_size_t(position+sr.len, store_end) + if sr.distance < sr.len>>2 { + range_start = brotli_min_size_t(range_end, brotli_max_size_t(range_start, position+sr.len-(sr.distance<<2))) + } + + hasher.StoreRange(ringbuffer, ringbuffer_mask, range_start, range_end) + } + + position += sr.len + } else { + insert_length++ + position++ + + /* If we have not seen matches for a long time, we can skip some + match lookups. Unsuccessful match lookups are very very expensive + and this kind of a heuristic speeds up compression quite + a lot. */ + if position > apply_random_heuristics { + /* Going through uncompressible data, jump. */ + if position > apply_random_heuristics+4*random_heuristics_window_size { + var kMargin uint = brotli_max_size_t(hasher.StoreLookahead()-1, 4) + /* It is quite a long time since we saw a copy, so we assume + that this data is not compressible, and store hashes less + often. Hashes of non compressible data are less likely to + turn out to be useful in the future, too, so we store less of + them to not to flood out the hash table of good compressible + data. */ + + var pos_jump uint = brotli_min_size_t(position+16, pos_end-kMargin) + for ; position < pos_jump; position += 4 { + hasher.Store(ringbuffer, ringbuffer_mask, position) + insert_length += 4 + } + } else { + var kMargin uint = brotli_max_size_t(hasher.StoreLookahead()-1, 2) + var pos_jump uint = brotli_min_size_t(position+8, pos_end-kMargin) + for ; position < pos_jump; position += 2 { + hasher.Store(ringbuffer, ringbuffer_mask, position) + insert_length += 2 + } + } + } + } + } + + insert_length += pos_end - position + *last_insert_len = insert_length + + hasherSearchResultPool.Put(sr) + hasherSearchResultPool.Put(sr2) +} diff --git a/vendor/github.com/andybalholm/brotli/backward_references_hq.go b/vendor/github.com/andybalholm/brotli/backward_references_hq.go new file mode 100644 index 0000000000..21629c1cdb --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/backward_references_hq.go @@ -0,0 +1,796 @@ +package brotli + +import "math" + +type zopfliNode struct { + length uint32 + distance uint32 + dcode_insert_length uint32 + u struct { + cost float32 + next uint32 + shortcut uint32 + } +} + +const maxEffectiveDistanceAlphabetSize = 544 + +const kInfinity float32 = 1.7e38 /* ~= 2 ^ 127 */ + +var kDistanceCacheIndex = []uint32{0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1} + +var kDistanceCacheOffset = []int{0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3} + +func initZopfliNodes(array []zopfliNode, length uint) { + var stub zopfliNode + var i uint + stub.length = 1 + stub.distance = 0 + stub.dcode_insert_length = 0 + stub.u.cost = kInfinity + for i = 0; i < length; i++ { + array[i] = stub + } +} + +func zopfliNodeCopyLength(self *zopfliNode) uint32 { + return self.length & 0x1FFFFFF +} + +func zopfliNodeLengthCode(self *zopfliNode) uint32 { + var modifier uint32 = self.length >> 25 + return zopfliNodeCopyLength(self) + 9 - modifier +} + +func zopfliNodeCopyDistance(self *zopfliNode) uint32 { + return self.distance +} + +func zopfliNodeDistanceCode(self *zopfliNode) uint32 { + var short_code uint32 = self.dcode_insert_length >> 27 + if short_code == 0 { + return zopfliNodeCopyDistance(self) + numDistanceShortCodes - 1 + } else { + return short_code - 1 + } +} + +func zopfliNodeCommandLength(self *zopfliNode) uint32 { + return zopfliNodeCopyLength(self) + (self.dcode_insert_length & 0x7FFFFFF) +} + +/* Histogram based cost model for zopflification. */ +type zopfliCostModel struct { + cost_cmd_ [numCommandSymbols]float32 + cost_dist_ []float32 + distance_histogram_size uint32 + literal_costs_ []float32 + min_cost_cmd_ float32 + num_bytes_ uint +} + +func initZopfliCostModel(self *zopfliCostModel, dist *distanceParams, num_bytes uint) { + var distance_histogram_size uint32 = dist.alphabet_size + if distance_histogram_size > maxEffectiveDistanceAlphabetSize { + distance_histogram_size = maxEffectiveDistanceAlphabetSize + } + + self.num_bytes_ = num_bytes + self.literal_costs_ = make([]float32, (num_bytes + 2)) + self.cost_dist_ = make([]float32, (dist.alphabet_size)) + self.distance_histogram_size = distance_histogram_size +} + +func cleanupZopfliCostModel(self *zopfliCostModel) { + self.literal_costs_ = nil + self.cost_dist_ = nil +} + +func setCost(histogram []uint32, histogram_size uint, literal_histogram bool, cost []float32) { + var sum uint = 0 + var missing_symbol_sum uint + var log2sum float32 + var missing_symbol_cost float32 + var i uint + for i = 0; i < histogram_size; i++ { + sum += uint(histogram[i]) + } + + log2sum = float32(fastLog2(sum)) + missing_symbol_sum = sum + if !literal_histogram { + for i = 0; i < histogram_size; i++ { + if histogram[i] == 0 { + missing_symbol_sum++ + } + } + } + + missing_symbol_cost = float32(fastLog2(missing_symbol_sum)) + 2 + for i = 0; i < histogram_size; i++ { + if histogram[i] == 0 { + cost[i] = missing_symbol_cost + continue + } + + /* Shannon bits for this symbol. */ + cost[i] = log2sum - float32(fastLog2(uint(histogram[i]))) + + /* Cannot be coded with less than 1 bit */ + if cost[i] < 1 { + cost[i] = 1 + } + } +} + +func zopfliCostModelSetFromCommands(self *zopfliCostModel, position uint, ringbuffer []byte, ringbuffer_mask uint, commands []command, last_insert_len uint) { + var histogram_literal [numLiteralSymbols]uint32 + var histogram_cmd [numCommandSymbols]uint32 + var histogram_dist [maxEffectiveDistanceAlphabetSize]uint32 + var cost_literal [numLiteralSymbols]float32 + var pos uint = position - last_insert_len + var min_cost_cmd float32 = kInfinity + var cost_cmd []float32 = self.cost_cmd_[:] + var literal_costs []float32 + + histogram_literal = [numLiteralSymbols]uint32{} + histogram_cmd = [numCommandSymbols]uint32{} + histogram_dist = [maxEffectiveDistanceAlphabetSize]uint32{} + + for i := range commands { + var inslength uint = uint(commands[i].insert_len_) + var copylength uint = uint(commandCopyLen(&commands[i])) + var distcode uint = uint(commands[i].dist_prefix_) & 0x3FF + var cmdcode uint = uint(commands[i].cmd_prefix_) + var j uint + + histogram_cmd[cmdcode]++ + if cmdcode >= 128 { + histogram_dist[distcode]++ + } + + for j = 0; j < inslength; j++ { + histogram_literal[ringbuffer[(pos+j)&ringbuffer_mask]]++ + } + + pos += inslength + copylength + } + + setCost(histogram_literal[:], numLiteralSymbols, true, cost_literal[:]) + setCost(histogram_cmd[:], numCommandSymbols, false, cost_cmd) + setCost(histogram_dist[:], uint(self.distance_histogram_size), false, self.cost_dist_) + + for i := 0; i < numCommandSymbols; i++ { + min_cost_cmd = brotli_min_float(min_cost_cmd, cost_cmd[i]) + } + + self.min_cost_cmd_ = min_cost_cmd + { + literal_costs = self.literal_costs_ + var literal_carry float32 = 0.0 + num_bytes := int(self.num_bytes_) + literal_costs[0] = 0.0 + for i := 0; i < num_bytes; i++ { + literal_carry += cost_literal[ringbuffer[(position+uint(i))&ringbuffer_mask]] + literal_costs[i+1] = literal_costs[i] + literal_carry + literal_carry -= literal_costs[i+1] - literal_costs[i] + } + } +} + +func zopfliCostModelSetFromLiteralCosts(self *zopfliCostModel, position uint, ringbuffer []byte, ringbuffer_mask uint) { + var literal_costs []float32 = self.literal_costs_ + var literal_carry float32 = 0.0 + var cost_dist []float32 = self.cost_dist_ + var cost_cmd []float32 = self.cost_cmd_[:] + var num_bytes uint = self.num_bytes_ + var i uint + estimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask, ringbuffer, literal_costs[1:]) + literal_costs[0] = 0.0 + for i = 0; i < num_bytes; i++ { + literal_carry += literal_costs[i+1] + literal_costs[i+1] = literal_costs[i] + literal_carry + literal_carry -= literal_costs[i+1] - literal_costs[i] + } + + for i = 0; i < numCommandSymbols; i++ { + cost_cmd[i] = float32(fastLog2(uint(11 + uint32(i)))) + } + + for i = 0; uint32(i) < self.distance_histogram_size; i++ { + cost_dist[i] = float32(fastLog2(uint(20 + uint32(i)))) + } + + self.min_cost_cmd_ = float32(fastLog2(11)) +} + +func zopfliCostModelGetCommandCost(self *zopfliCostModel, cmdcode uint16) float32 { + return self.cost_cmd_[cmdcode] +} + +func zopfliCostModelGetDistanceCost(self *zopfliCostModel, distcode uint) float32 { + return self.cost_dist_[distcode] +} + +func zopfliCostModelGetLiteralCosts(self *zopfliCostModel, from uint, to uint) float32 { + return self.literal_costs_[to] - self.literal_costs_[from] +} + +func zopfliCostModelGetMinCostCmd(self *zopfliCostModel) float32 { + return self.min_cost_cmd_ +} + +/* REQUIRES: len >= 2, start_pos <= pos */ +/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */ +/* Maintains the "ZopfliNode array invariant". */ +func updateZopfliNode(nodes []zopfliNode, pos uint, start_pos uint, len uint, len_code uint, dist uint, short_code uint, cost float32) { + var next *zopfliNode = &nodes[pos+len] + next.length = uint32(len | (len+9-len_code)<<25) + next.distance = uint32(dist) + next.dcode_insert_length = uint32(short_code<<27 | (pos - start_pos)) + next.u.cost = cost +} + +type posData struct { + pos uint + distance_cache [4]int + costdiff float32 + cost float32 +} + +/* Maintains the smallest 8 cost difference together with their positions */ +type startPosQueue struct { + q_ [8]posData + idx_ uint +} + +func initStartPosQueue(self *startPosQueue) { + self.idx_ = 0 +} + +func startPosQueueSize(self *startPosQueue) uint { + return brotli_min_size_t(self.idx_, 8) +} + +func startPosQueuePush(self *startPosQueue, posdata *posData) { + var offset uint = ^(self.idx_) & 7 + self.idx_++ + var len uint = startPosQueueSize(self) + var i uint + var q []posData = self.q_[:] + q[offset] = *posdata + + /* Restore the sorted order. In the list of |len| items at most |len - 1| + adjacent element comparisons / swaps are required. */ + for i = 1; i < len; i++ { + if q[offset&7].costdiff > q[(offset+1)&7].costdiff { + var tmp posData = q[offset&7] + q[offset&7] = q[(offset+1)&7] + q[(offset+1)&7] = tmp + } + + offset++ + } +} + +func startPosQueueAt(self *startPosQueue, k uint) *posData { + return &self.q_[(k-self.idx_)&7] +} + +/* Returns the minimum possible copy length that can improve the cost of any */ +/* future position. */ +func computeMinimumCopyLength(start_cost float32, nodes []zopfliNode, num_bytes uint, pos uint) uint { + var min_cost float32 = start_cost + var len uint = 2 + var next_len_bucket uint = 4 + /* Compute the minimum possible cost of reaching any future position. */ + + var next_len_offset uint = 10 + for pos+len <= num_bytes && nodes[pos+len].u.cost <= min_cost { + /* We already reached (pos + len) with no more cost than the minimum + possible cost of reaching anything from this pos, so there is no point in + looking for lengths <= len. */ + len++ + + if len == next_len_offset { + /* We reached the next copy length code bucket, so we add one more + extra bit to the minimum cost. */ + min_cost += 1.0 + + next_len_offset += next_len_bucket + next_len_bucket *= 2 + } + } + + return uint(len) +} + +/* REQUIRES: nodes[pos].cost < kInfinity + REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */ +func computeDistanceShortcut(block_start uint, pos uint, max_backward_limit uint, gap uint, nodes []zopfliNode) uint32 { + var clen uint = uint(zopfliNodeCopyLength(&nodes[pos])) + var ilen uint = uint(nodes[pos].dcode_insert_length & 0x7FFFFFF) + var dist uint = uint(zopfliNodeCopyDistance(&nodes[pos])) + + /* Since |block_start + pos| is the end position of the command, the copy part + starts from |block_start + pos - clen|. Distances that are greater than + this or greater than |max_backward_limit| + |gap| are static dictionary + references, and do not update the last distances. + Also distance code 0 (last distance) does not update the last distances. */ + if pos == 0 { + return 0 + } else if dist+clen <= block_start+pos+gap && dist <= max_backward_limit+gap && zopfliNodeDistanceCode(&nodes[pos]) > 0 { + return uint32(pos) + } else { + return nodes[pos-clen-ilen].u.shortcut + } +} + +/* Fills in dist_cache[0..3] with the last four distances (as defined by + Section 4. of the Spec) that would be used at (block_start + pos) if we + used the shortest path of commands from block_start, computed from + nodes[0..pos]. The last four distances at block_start are in + starting_dist_cache[0..3]. + REQUIRES: nodes[pos].cost < kInfinity + REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */ +func computeDistanceCache(pos uint, starting_dist_cache []int, nodes []zopfliNode, dist_cache []int) { + var idx int = 0 + var p uint = uint(nodes[pos].u.shortcut) + for idx < 4 && p > 0 { + var ilen uint = uint(nodes[p].dcode_insert_length & 0x7FFFFFF) + var clen uint = uint(zopfliNodeCopyLength(&nodes[p])) + var dist uint = uint(zopfliNodeCopyDistance(&nodes[p])) + dist_cache[idx] = int(dist) + idx++ + + /* Because of prerequisite, p >= clen + ilen >= 2. */ + p = uint(nodes[p-clen-ilen].u.shortcut) + } + + for ; idx < 4; idx++ { + dist_cache[idx] = starting_dist_cache[0] + starting_dist_cache = starting_dist_cache[1:] + } +} + +/* Maintains "ZopfliNode array invariant" and pushes node to the queue, if it + is eligible. */ +func evaluateNode(block_start uint, pos uint, max_backward_limit uint, gap uint, starting_dist_cache []int, model *zopfliCostModel, queue *startPosQueue, nodes []zopfliNode) { + /* Save cost, because ComputeDistanceCache invalidates it. */ + var node_cost float32 = nodes[pos].u.cost + nodes[pos].u.shortcut = computeDistanceShortcut(block_start, pos, max_backward_limit, gap, nodes) + if node_cost <= zopfliCostModelGetLiteralCosts(model, 0, pos) { + var posdata posData + posdata.pos = pos + posdata.cost = node_cost + posdata.costdiff = node_cost - zopfliCostModelGetLiteralCosts(model, 0, pos) + computeDistanceCache(pos, starting_dist_cache, nodes, posdata.distance_cache[:]) + startPosQueuePush(queue, &posdata) + } +} + +/* Returns longest copy length. */ +func updateNodes(num_bytes uint, block_start uint, pos uint, ringbuffer []byte, ringbuffer_mask uint, params *encoderParams, max_backward_limit uint, starting_dist_cache []int, num_matches uint, matches []backwardMatch, model *zopfliCostModel, queue *startPosQueue, nodes []zopfliNode) uint { + var cur_ix uint = block_start + pos + var cur_ix_masked uint = cur_ix & ringbuffer_mask + var max_distance uint = brotli_min_size_t(cur_ix, max_backward_limit) + var max_len uint = num_bytes - pos + var max_zopfli_len uint = maxZopfliLen(params) + var max_iters uint = maxZopfliCandidates(params) + var min_len uint + var result uint = 0 + var k uint + var gap uint = 0 + + evaluateNode(block_start, pos, max_backward_limit, gap, starting_dist_cache, model, queue, nodes) + { + var posdata *posData = startPosQueueAt(queue, 0) + var min_cost float32 = (posdata.cost + zopfliCostModelGetMinCostCmd(model) + zopfliCostModelGetLiteralCosts(model, posdata.pos, pos)) + min_len = computeMinimumCopyLength(min_cost, nodes, num_bytes, pos) + } + + /* Go over the command starting positions in order of increasing cost + difference. */ + for k = 0; k < max_iters && k < startPosQueueSize(queue); k++ { + var posdata *posData = startPosQueueAt(queue, k) + var start uint = posdata.pos + var inscode uint16 = getInsertLengthCode(pos - start) + var start_costdiff float32 = posdata.costdiff + var base_cost float32 = start_costdiff + float32(getInsertExtra(inscode)) + zopfliCostModelGetLiteralCosts(model, 0, pos) + var best_len uint = min_len - 1 + var j uint = 0 + /* Look for last distance matches using the distance cache from this + starting position. */ + for ; j < numDistanceShortCodes && best_len < max_len; j++ { + var idx uint = uint(kDistanceCacheIndex[j]) + var backward uint = uint(posdata.distance_cache[idx] + kDistanceCacheOffset[j]) + var prev_ix uint = cur_ix - backward + var len uint = 0 + var continuation byte = ringbuffer[cur_ix_masked+best_len] + if cur_ix_masked+best_len > ringbuffer_mask { + break + } + + if backward > max_distance+gap { + /* Word dictionary -> ignore. */ + continue + } + + if backward <= max_distance { + /* Regular backward reference. */ + if prev_ix >= cur_ix { + continue + } + + prev_ix &= ringbuffer_mask + if prev_ix+best_len > ringbuffer_mask || continuation != ringbuffer[prev_ix+best_len] { + continue + } + + len = findMatchLengthWithLimit(ringbuffer[prev_ix:], ringbuffer[cur_ix_masked:], max_len) + } else { + continue + } + { + var dist_cost float32 = base_cost + zopfliCostModelGetDistanceCost(model, j) + var l uint + for l = best_len + 1; l <= len; l++ { + var copycode uint16 = getCopyLengthCode(l) + var cmdcode uint16 = combineLengthCodes(inscode, copycode, j == 0) + var tmp float32 + if cmdcode < 128 { + tmp = base_cost + } else { + tmp = dist_cost + } + var cost float32 = tmp + float32(getCopyExtra(copycode)) + zopfliCostModelGetCommandCost(model, cmdcode) + if cost < nodes[pos+l].u.cost { + updateZopfliNode(nodes, pos, start, l, l, backward, j+1, cost) + result = brotli_max_size_t(result, l) + } + + best_len = l + } + } + } + + /* At higher iterations look only for new last distance matches, since + looking only for new command start positions with the same distances + does not help much. */ + if k >= 2 { + continue + } + { + /* Loop through all possible copy lengths at this position. */ + var len uint = min_len + for j = 0; j < num_matches; j++ { + var match backwardMatch = matches[j] + var dist uint = uint(match.distance) + var is_dictionary_match bool = (dist > max_distance+gap) + var dist_code uint = dist + numDistanceShortCodes - 1 + var dist_symbol uint16 + var distextra uint32 + var distnumextra uint32 + var dist_cost float32 + var max_match_len uint + /* We already tried all possible last distance matches, so we can use + normal distance code here. */ + prefixEncodeCopyDistance(dist_code, uint(params.dist.num_direct_distance_codes), uint(params.dist.distance_postfix_bits), &dist_symbol, &distextra) + + distnumextra = uint32(dist_symbol) >> 10 + dist_cost = base_cost + float32(distnumextra) + zopfliCostModelGetDistanceCost(model, uint(dist_symbol)&0x3FF) + + /* Try all copy lengths up until the maximum copy length corresponding + to this distance. If the distance refers to the static dictionary, or + the maximum length is long enough, try only one maximum length. */ + max_match_len = backwardMatchLength(&match) + + if len < max_match_len && (is_dictionary_match || max_match_len > max_zopfli_len) { + len = max_match_len + } + + for ; len <= max_match_len; len++ { + var len_code uint + if is_dictionary_match { + len_code = backwardMatchLengthCode(&match) + } else { + len_code = len + } + var copycode uint16 = getCopyLengthCode(len_code) + var cmdcode uint16 = combineLengthCodes(inscode, copycode, false) + var cost float32 = dist_cost + float32(getCopyExtra(copycode)) + zopfliCostModelGetCommandCost(model, cmdcode) + if cost < nodes[pos+len].u.cost { + updateZopfliNode(nodes, pos, start, uint(len), len_code, dist, 0, cost) + if len > result { + result = len + } + } + } + } + } + } + + return result +} + +func computeShortestPathFromNodes(num_bytes uint, nodes []zopfliNode) uint { + var index uint = num_bytes + var num_commands uint = 0 + for nodes[index].dcode_insert_length&0x7FFFFFF == 0 && nodes[index].length == 1 { + index-- + } + nodes[index].u.next = math.MaxUint32 + for index != 0 { + var len uint = uint(zopfliNodeCommandLength(&nodes[index])) + index -= uint(len) + nodes[index].u.next = uint32(len) + num_commands++ + } + + return num_commands +} + +/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */ +func zopfliCreateCommands(num_bytes uint, block_start uint, nodes []zopfliNode, dist_cache []int, last_insert_len *uint, params *encoderParams, commands *[]command, num_literals *uint) { + var max_backward_limit uint = maxBackwardLimit(params.lgwin) + var pos uint = 0 + var offset uint32 = nodes[0].u.next + var i uint + var gap uint = 0 + for i = 0; offset != math.MaxUint32; i++ { + var next *zopfliNode = &nodes[uint32(pos)+offset] + var copy_length uint = uint(zopfliNodeCopyLength(next)) + var insert_length uint = uint(next.dcode_insert_length & 0x7FFFFFF) + pos += insert_length + offset = next.u.next + if i == 0 { + insert_length += *last_insert_len + *last_insert_len = 0 + } + { + var distance uint = uint(zopfliNodeCopyDistance(next)) + var len_code uint = uint(zopfliNodeLengthCode(next)) + var max_distance uint = brotli_min_size_t(block_start+pos, max_backward_limit) + var is_dictionary bool = (distance > max_distance+gap) + var dist_code uint = uint(zopfliNodeDistanceCode(next)) + *commands = append(*commands, makeCommand(¶ms.dist, insert_length, copy_length, int(len_code)-int(copy_length), dist_code)) + + if !is_dictionary && dist_code > 0 { + dist_cache[3] = dist_cache[2] + dist_cache[2] = dist_cache[1] + dist_cache[1] = dist_cache[0] + dist_cache[0] = int(distance) + } + } + + *num_literals += insert_length + pos += copy_length + } + + *last_insert_len += num_bytes - pos +} + +func zopfliIterate(num_bytes uint, position uint, ringbuffer []byte, ringbuffer_mask uint, params *encoderParams, gap uint, dist_cache []int, model *zopfliCostModel, num_matches []uint32, matches []backwardMatch, nodes []zopfliNode) uint { + var max_backward_limit uint = maxBackwardLimit(params.lgwin) + var max_zopfli_len uint = maxZopfliLen(params) + var queue startPosQueue + var cur_match_pos uint = 0 + var i uint + nodes[0].length = 0 + nodes[0].u.cost = 0 + initStartPosQueue(&queue) + for i = 0; i+3 < num_bytes; i++ { + var skip uint = updateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask, params, max_backward_limit, dist_cache, uint(num_matches[i]), matches[cur_match_pos:], model, &queue, nodes) + if skip < longCopyQuickStep { + skip = 0 + } + cur_match_pos += uint(num_matches[i]) + if num_matches[i] == 1 && backwardMatchLength(&matches[cur_match_pos-1]) > max_zopfli_len { + skip = brotli_max_size_t(backwardMatchLength(&matches[cur_match_pos-1]), skip) + } + + if skip > 1 { + skip-- + for skip != 0 { + i++ + if i+3 >= num_bytes { + break + } + evaluateNode(position, i, max_backward_limit, gap, dist_cache, model, &queue, nodes) + cur_match_pos += uint(num_matches[i]) + skip-- + } + } + } + + return computeShortestPathFromNodes(num_bytes, nodes) +} + +/* Computes the shortest path of commands from position to at most + position + num_bytes. + + On return, path->size() is the number of commands found and path[i] is the + length of the i-th command (copy length plus insert length). + Note that the sum of the lengths of all commands can be less than num_bytes. + + On return, the nodes[0..num_bytes] array will have the following + "ZopfliNode array invariant": + For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then + (1) nodes[i].copy_length() >= 2 + (2) nodes[i].command_length() <= i and + (3) nodes[i - nodes[i].command_length()].cost < kInfinity + + REQUIRES: nodes != nil and len(nodes) >= num_bytes + 1 */ +func zopfliComputeShortestPath(num_bytes uint, position uint, ringbuffer []byte, ringbuffer_mask uint, params *encoderParams, dist_cache []int, hasher *h10, nodes []zopfliNode) uint { + var max_backward_limit uint = maxBackwardLimit(params.lgwin) + var max_zopfli_len uint = maxZopfliLen(params) + var model zopfliCostModel + var queue startPosQueue + var matches [2 * (maxNumMatchesH10 + 64)]backwardMatch + var store_end uint + if num_bytes >= hasher.StoreLookahead() { + store_end = position + num_bytes - hasher.StoreLookahead() + 1 + } else { + store_end = position + } + var i uint + var gap uint = 0 + var lz_matches_offset uint = 0 + nodes[0].length = 0 + nodes[0].u.cost = 0 + initZopfliCostModel(&model, ¶ms.dist, num_bytes) + zopfliCostModelSetFromLiteralCosts(&model, position, ringbuffer, ringbuffer_mask) + initStartPosQueue(&queue) + for i = 0; i+hasher.HashTypeLength()-1 < num_bytes; i++ { + var pos uint = position + i + var max_distance uint = brotli_min_size_t(pos, max_backward_limit) + var skip uint + var num_matches uint + num_matches = findAllMatchesH10(hasher, ¶ms.dictionary, ringbuffer, ringbuffer_mask, pos, num_bytes-i, max_distance, gap, params, matches[lz_matches_offset:]) + if num_matches > 0 && backwardMatchLength(&matches[num_matches-1]) > max_zopfli_len { + matches[0] = matches[num_matches-1] + num_matches = 1 + } + + skip = updateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask, params, max_backward_limit, dist_cache, num_matches, matches[:], &model, &queue, nodes) + if skip < longCopyQuickStep { + skip = 0 + } + if num_matches == 1 && backwardMatchLength(&matches[0]) > max_zopfli_len { + skip = brotli_max_size_t(backwardMatchLength(&matches[0]), skip) + } + + if skip > 1 { + /* Add the tail of the copy to the hasher. */ + hasher.StoreRange(ringbuffer, ringbuffer_mask, pos+1, brotli_min_size_t(pos+skip, store_end)) + + skip-- + for skip != 0 { + i++ + if i+hasher.HashTypeLength()-1 >= num_bytes { + break + } + evaluateNode(position, i, max_backward_limit, gap, dist_cache, &model, &queue, nodes) + skip-- + } + } + } + + cleanupZopfliCostModel(&model) + return computeShortestPathFromNodes(num_bytes, nodes) +} + +func createZopfliBackwardReferences(num_bytes uint, position uint, ringbuffer []byte, ringbuffer_mask uint, params *encoderParams, hasher *h10, dist_cache []int, last_insert_len *uint, commands *[]command, num_literals *uint) { + var nodes []zopfliNode + nodes = make([]zopfliNode, (num_bytes + 1)) + initZopfliNodes(nodes, num_bytes+1) + zopfliComputeShortestPath(num_bytes, position, ringbuffer, ringbuffer_mask, params, dist_cache, hasher, nodes) + zopfliCreateCommands(num_bytes, position, nodes, dist_cache, last_insert_len, params, commands, num_literals) + nodes = nil +} + +func createHqZopfliBackwardReferences(num_bytes uint, position uint, ringbuffer []byte, ringbuffer_mask uint, params *encoderParams, hasher hasherHandle, dist_cache []int, last_insert_len *uint, commands *[]command, num_literals *uint) { + var max_backward_limit uint = maxBackwardLimit(params.lgwin) + var num_matches []uint32 = make([]uint32, num_bytes) + var matches_size uint = 4 * num_bytes + var store_end uint + if num_bytes >= hasher.StoreLookahead() { + store_end = position + num_bytes - hasher.StoreLookahead() + 1 + } else { + store_end = position + } + var cur_match_pos uint = 0 + var i uint + var orig_num_literals uint + var orig_last_insert_len uint + var orig_dist_cache [4]int + var orig_num_commands int + var model zopfliCostModel + var nodes []zopfliNode + var matches []backwardMatch = make([]backwardMatch, matches_size) + var gap uint = 0 + var shadow_matches uint = 0 + var new_array []backwardMatch + for i = 0; i+hasher.HashTypeLength()-1 < num_bytes; i++ { + var pos uint = position + i + var max_distance uint = brotli_min_size_t(pos, max_backward_limit) + var max_length uint = num_bytes - i + var num_found_matches uint + var cur_match_end uint + var j uint + + /* Ensure that we have enough free slots. */ + if matches_size < cur_match_pos+maxNumMatchesH10+shadow_matches { + var new_size uint = matches_size + if new_size == 0 { + new_size = cur_match_pos + maxNumMatchesH10 + shadow_matches + } + + for new_size < cur_match_pos+maxNumMatchesH10+shadow_matches { + new_size *= 2 + } + + new_array = make([]backwardMatch, new_size) + if matches_size != 0 { + copy(new_array, matches[:matches_size]) + } + + matches = new_array + matches_size = new_size + } + + num_found_matches = findAllMatchesH10(hasher.(*h10), ¶ms.dictionary, ringbuffer, ringbuffer_mask, pos, max_length, max_distance, gap, params, matches[cur_match_pos+shadow_matches:]) + cur_match_end = cur_match_pos + num_found_matches + for j = cur_match_pos; j+1 < cur_match_end; j++ { + assert(backwardMatchLength(&matches[j]) <= backwardMatchLength(&matches[j+1])) + } + + num_matches[i] = uint32(num_found_matches) + if num_found_matches > 0 { + var match_len uint = backwardMatchLength(&matches[cur_match_end-1]) + if match_len > maxZopfliLenQuality11 { + var skip uint = match_len - 1 + matches[cur_match_pos] = matches[cur_match_end-1] + cur_match_pos++ + num_matches[i] = 1 + + /* Add the tail of the copy to the hasher. */ + hasher.StoreRange(ringbuffer, ringbuffer_mask, pos+1, brotli_min_size_t(pos+match_len, store_end)) + var pos uint = i + for i := 0; i < int(skip); i++ { + num_matches[pos+1:][i] = 0 + } + i += skip + } else { + cur_match_pos = cur_match_end + } + } + } + + orig_num_literals = *num_literals + orig_last_insert_len = *last_insert_len + copy(orig_dist_cache[:], dist_cache[:4]) + orig_num_commands = len(*commands) + nodes = make([]zopfliNode, (num_bytes + 1)) + initZopfliCostModel(&model, ¶ms.dist, num_bytes) + for i = 0; i < 2; i++ { + initZopfliNodes(nodes, num_bytes+1) + if i == 0 { + zopfliCostModelSetFromLiteralCosts(&model, position, ringbuffer, ringbuffer_mask) + } else { + zopfliCostModelSetFromCommands(&model, position, ringbuffer, ringbuffer_mask, (*commands)[orig_num_commands:], orig_last_insert_len) + } + + *commands = (*commands)[:orig_num_commands] + *num_literals = orig_num_literals + *last_insert_len = orig_last_insert_len + copy(dist_cache, orig_dist_cache[:4]) + zopfliIterate(num_bytes, position, ringbuffer, ringbuffer_mask, params, gap, dist_cache, &model, num_matches, matches, nodes) + zopfliCreateCommands(num_bytes, position, nodes, dist_cache, last_insert_len, params, commands, num_literals) + } + + cleanupZopfliCostModel(&model) + nodes = nil + matches = nil + num_matches = nil +} diff --git a/vendor/github.com/andybalholm/brotli/bit_cost.go b/vendor/github.com/andybalholm/brotli/bit_cost.go new file mode 100644 index 0000000000..0005fc15e6 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/bit_cost.go @@ -0,0 +1,436 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions to estimate the bit cost of Huffman trees. */ +func shannonEntropy(population []uint32, size uint, total *uint) float64 { + var sum uint = 0 + var retval float64 = 0 + var population_end []uint32 = population[size:] + var p uint + for -cap(population) < -cap(population_end) { + p = uint(population[0]) + population = population[1:] + sum += p + retval -= float64(p) * fastLog2(p) + } + + if sum != 0 { + retval += float64(sum) * fastLog2(sum) + } + *total = sum + return retval +} + +func bitsEntropy(population []uint32, size uint) float64 { + var sum uint + var retval float64 = shannonEntropy(population, size, &sum) + if retval < float64(sum) { + /* At least one bit per literal is needed. */ + retval = float64(sum) + } + + return retval +} + +const kOneSymbolHistogramCost float64 = 12 +const kTwoSymbolHistogramCost float64 = 20 +const kThreeSymbolHistogramCost float64 = 28 +const kFourSymbolHistogramCost float64 = 37 + +func populationCostLiteral(histogram *histogramLiteral) float64 { + var data_size uint = histogramDataSizeLiteral() + var count int = 0 + var s [5]uint + var bits float64 = 0.0 + var i uint + if histogram.total_count_ == 0 { + return kOneSymbolHistogramCost + } + + for i = 0; i < data_size; i++ { + if histogram.data_[i] > 0 { + s[count] = i + count++ + if count > 4 { + break + } + } + } + + if count == 1 { + return kOneSymbolHistogramCost + } + + if count == 2 { + return kTwoSymbolHistogramCost + float64(histogram.total_count_) + } + + if count == 3 { + var histo0 uint32 = histogram.data_[s[0]] + var histo1 uint32 = histogram.data_[s[1]] + var histo2 uint32 = histogram.data_[s[2]] + var histomax uint32 = brotli_max_uint32_t(histo0, brotli_max_uint32_t(histo1, histo2)) + return kThreeSymbolHistogramCost + 2*(float64(histo0)+float64(histo1)+float64(histo2)) - float64(histomax) + } + + if count == 4 { + var histo [4]uint32 + var h23 uint32 + var histomax uint32 + for i = 0; i < 4; i++ { + histo[i] = histogram.data_[s[i]] + } + + /* Sort */ + for i = 0; i < 4; i++ { + var j uint + for j = i + 1; j < 4; j++ { + if histo[j] > histo[i] { + var tmp uint32 = histo[j] + histo[j] = histo[i] + histo[i] = tmp + } + } + } + + h23 = histo[2] + histo[3] + histomax = brotli_max_uint32_t(h23, histo[0]) + return kFourSymbolHistogramCost + 3*float64(h23) + 2*(float64(histo[0])+float64(histo[1])) - float64(histomax) + } + { + var max_depth uint = 1 + var depth_histo = [codeLengthCodes]uint32{0} + /* In this loop we compute the entropy of the histogram and simultaneously + build a simplified histogram of the code length codes where we use the + zero repeat code 17, but we don't use the non-zero repeat code 16. */ + + var log2total float64 = fastLog2(histogram.total_count_) + for i = 0; i < data_size; { + if histogram.data_[i] > 0 { + var log2p float64 = log2total - fastLog2(uint(histogram.data_[i])) + /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = + = log2(total_count) - log2(count(symbol)) */ + + var depth uint = uint(log2p + 0.5) + /* Approximate the bit depth by round(-log2(P(symbol))) */ + bits += float64(histogram.data_[i]) * log2p + + if depth > 15 { + depth = 15 + } + + if depth > max_depth { + max_depth = depth + } + + depth_histo[depth]++ + i++ + } else { + var reps uint32 = 1 + /* Compute the run length of zeros and add the appropriate number of 0 + and 17 code length codes to the code length code histogram. */ + + var k uint + for k = i + 1; k < data_size && histogram.data_[k] == 0; k++ { + reps++ + } + + i += uint(reps) + if i == data_size { + /* Don't add any cost for the last zero run, since these are encoded + only implicitly. */ + break + } + + if reps < 3 { + depth_histo[0] += reps + } else { + reps -= 2 + for reps > 0 { + depth_histo[repeatZeroCodeLength]++ + + /* Add the 3 extra bits for the 17 code length code. */ + bits += 3 + + reps >>= 3 + } + } + } + } + + /* Add the estimated encoding cost of the code length code histogram. */ + bits += float64(18 + 2*max_depth) + + /* Add the entropy of the code length code histogram. */ + bits += bitsEntropy(depth_histo[:], codeLengthCodes) + } + + return bits +} + +func populationCostCommand(histogram *histogramCommand) float64 { + var data_size uint = histogramDataSizeCommand() + var count int = 0 + var s [5]uint + var bits float64 = 0.0 + var i uint + if histogram.total_count_ == 0 { + return kOneSymbolHistogramCost + } + + for i = 0; i < data_size; i++ { + if histogram.data_[i] > 0 { + s[count] = i + count++ + if count > 4 { + break + } + } + } + + if count == 1 { + return kOneSymbolHistogramCost + } + + if count == 2 { + return kTwoSymbolHistogramCost + float64(histogram.total_count_) + } + + if count == 3 { + var histo0 uint32 = histogram.data_[s[0]] + var histo1 uint32 = histogram.data_[s[1]] + var histo2 uint32 = histogram.data_[s[2]] + var histomax uint32 = brotli_max_uint32_t(histo0, brotli_max_uint32_t(histo1, histo2)) + return kThreeSymbolHistogramCost + 2*(float64(histo0)+float64(histo1)+float64(histo2)) - float64(histomax) + } + + if count == 4 { + var histo [4]uint32 + var h23 uint32 + var histomax uint32 + for i = 0; i < 4; i++ { + histo[i] = histogram.data_[s[i]] + } + + /* Sort */ + for i = 0; i < 4; i++ { + var j uint + for j = i + 1; j < 4; j++ { + if histo[j] > histo[i] { + var tmp uint32 = histo[j] + histo[j] = histo[i] + histo[i] = tmp + } + } + } + + h23 = histo[2] + histo[3] + histomax = brotli_max_uint32_t(h23, histo[0]) + return kFourSymbolHistogramCost + 3*float64(h23) + 2*(float64(histo[0])+float64(histo[1])) - float64(histomax) + } + { + var max_depth uint = 1 + var depth_histo = [codeLengthCodes]uint32{0} + /* In this loop we compute the entropy of the histogram and simultaneously + build a simplified histogram of the code length codes where we use the + zero repeat code 17, but we don't use the non-zero repeat code 16. */ + + var log2total float64 = fastLog2(histogram.total_count_) + for i = 0; i < data_size; { + if histogram.data_[i] > 0 { + var log2p float64 = log2total - fastLog2(uint(histogram.data_[i])) + /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = + = log2(total_count) - log2(count(symbol)) */ + + var depth uint = uint(log2p + 0.5) + /* Approximate the bit depth by round(-log2(P(symbol))) */ + bits += float64(histogram.data_[i]) * log2p + + if depth > 15 { + depth = 15 + } + + if depth > max_depth { + max_depth = depth + } + + depth_histo[depth]++ + i++ + } else { + var reps uint32 = 1 + /* Compute the run length of zeros and add the appropriate number of 0 + and 17 code length codes to the code length code histogram. */ + + var k uint + for k = i + 1; k < data_size && histogram.data_[k] == 0; k++ { + reps++ + } + + i += uint(reps) + if i == data_size { + /* Don't add any cost for the last zero run, since these are encoded + only implicitly. */ + break + } + + if reps < 3 { + depth_histo[0] += reps + } else { + reps -= 2 + for reps > 0 { + depth_histo[repeatZeroCodeLength]++ + + /* Add the 3 extra bits for the 17 code length code. */ + bits += 3 + + reps >>= 3 + } + } + } + } + + /* Add the estimated encoding cost of the code length code histogram. */ + bits += float64(18 + 2*max_depth) + + /* Add the entropy of the code length code histogram. */ + bits += bitsEntropy(depth_histo[:], codeLengthCodes) + } + + return bits +} + +func populationCostDistance(histogram *histogramDistance) float64 { + var data_size uint = histogramDataSizeDistance() + var count int = 0 + var s [5]uint + var bits float64 = 0.0 + var i uint + if histogram.total_count_ == 0 { + return kOneSymbolHistogramCost + } + + for i = 0; i < data_size; i++ { + if histogram.data_[i] > 0 { + s[count] = i + count++ + if count > 4 { + break + } + } + } + + if count == 1 { + return kOneSymbolHistogramCost + } + + if count == 2 { + return kTwoSymbolHistogramCost + float64(histogram.total_count_) + } + + if count == 3 { + var histo0 uint32 = histogram.data_[s[0]] + var histo1 uint32 = histogram.data_[s[1]] + var histo2 uint32 = histogram.data_[s[2]] + var histomax uint32 = brotli_max_uint32_t(histo0, brotli_max_uint32_t(histo1, histo2)) + return kThreeSymbolHistogramCost + 2*(float64(histo0)+float64(histo1)+float64(histo2)) - float64(histomax) + } + + if count == 4 { + var histo [4]uint32 + var h23 uint32 + var histomax uint32 + for i = 0; i < 4; i++ { + histo[i] = histogram.data_[s[i]] + } + + /* Sort */ + for i = 0; i < 4; i++ { + var j uint + for j = i + 1; j < 4; j++ { + if histo[j] > histo[i] { + var tmp uint32 = histo[j] + histo[j] = histo[i] + histo[i] = tmp + } + } + } + + h23 = histo[2] + histo[3] + histomax = brotli_max_uint32_t(h23, histo[0]) + return kFourSymbolHistogramCost + 3*float64(h23) + 2*(float64(histo[0])+float64(histo[1])) - float64(histomax) + } + { + var max_depth uint = 1 + var depth_histo = [codeLengthCodes]uint32{0} + /* In this loop we compute the entropy of the histogram and simultaneously + build a simplified histogram of the code length codes where we use the + zero repeat code 17, but we don't use the non-zero repeat code 16. */ + + var log2total float64 = fastLog2(histogram.total_count_) + for i = 0; i < data_size; { + if histogram.data_[i] > 0 { + var log2p float64 = log2total - fastLog2(uint(histogram.data_[i])) + /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) = + = log2(total_count) - log2(count(symbol)) */ + + var depth uint = uint(log2p + 0.5) + /* Approximate the bit depth by round(-log2(P(symbol))) */ + bits += float64(histogram.data_[i]) * log2p + + if depth > 15 { + depth = 15 + } + + if depth > max_depth { + max_depth = depth + } + + depth_histo[depth]++ + i++ + } else { + var reps uint32 = 1 + /* Compute the run length of zeros and add the appropriate number of 0 + and 17 code length codes to the code length code histogram. */ + + var k uint + for k = i + 1; k < data_size && histogram.data_[k] == 0; k++ { + reps++ + } + + i += uint(reps) + if i == data_size { + /* Don't add any cost for the last zero run, since these are encoded + only implicitly. */ + break + } + + if reps < 3 { + depth_histo[0] += reps + } else { + reps -= 2 + for reps > 0 { + depth_histo[repeatZeroCodeLength]++ + + /* Add the 3 extra bits for the 17 code length code. */ + bits += 3 + + reps >>= 3 + } + } + } + } + + /* Add the estimated encoding cost of the code length code histogram. */ + bits += float64(18 + 2*max_depth) + + /* Add the entropy of the code length code histogram. */ + bits += bitsEntropy(depth_histo[:], codeLengthCodes) + } + + return bits +} diff --git a/vendor/github.com/andybalholm/brotli/bit_reader.go b/vendor/github.com/andybalholm/brotli/bit_reader.go new file mode 100644 index 0000000000..fba8687c69 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/bit_reader.go @@ -0,0 +1,266 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Bit reading helpers */ + +const shortFillBitWindowRead = (8 >> 1) + +var kBitMask = [33]uint32{ + 0x00000000, + 0x00000001, + 0x00000003, + 0x00000007, + 0x0000000F, + 0x0000001F, + 0x0000003F, + 0x0000007F, + 0x000000FF, + 0x000001FF, + 0x000003FF, + 0x000007FF, + 0x00000FFF, + 0x00001FFF, + 0x00003FFF, + 0x00007FFF, + 0x0000FFFF, + 0x0001FFFF, + 0x0003FFFF, + 0x0007FFFF, + 0x000FFFFF, + 0x001FFFFF, + 0x003FFFFF, + 0x007FFFFF, + 0x00FFFFFF, + 0x01FFFFFF, + 0x03FFFFFF, + 0x07FFFFFF, + 0x0FFFFFFF, + 0x1FFFFFFF, + 0x3FFFFFFF, + 0x7FFFFFFF, + 0xFFFFFFFF, +} + +func bitMask(n uint32) uint32 { + return kBitMask[n] +} + +type bitReader struct { + val_ uint64 + bit_pos_ uint32 + input []byte + input_len uint + byte_pos uint +} + +type bitReaderState struct { + val_ uint64 + bit_pos_ uint32 + input []byte + input_len uint + byte_pos uint +} + +/* Initializes the BrotliBitReader fields. */ + +/* Ensures that accumulator is not empty. + May consume up to sizeof(brotli_reg_t) - 1 bytes of input. + Returns false if data is required but there is no input available. + For BROTLI_ALIGNED_READ this function also prepares bit reader for aligned + reading. */ +func bitReaderSaveState(from *bitReader, to *bitReaderState) { + to.val_ = from.val_ + to.bit_pos_ = from.bit_pos_ + to.input = from.input + to.input_len = from.input_len + to.byte_pos = from.byte_pos +} + +func bitReaderRestoreState(to *bitReader, from *bitReaderState) { + to.val_ = from.val_ + to.bit_pos_ = from.bit_pos_ + to.input = from.input + to.input_len = from.input_len + to.byte_pos = from.byte_pos +} + +func getAvailableBits(br *bitReader) uint32 { + return 64 - br.bit_pos_ +} + +/* Returns amount of unread bytes the bit reader still has buffered from the + BrotliInput, including whole bytes in br->val_. */ +func getRemainingBytes(br *bitReader) uint { + return uint(uint32(br.input_len-br.byte_pos) + (getAvailableBits(br) >> 3)) +} + +/* Checks if there is at least |num| bytes left in the input ring-buffer + (excluding the bits remaining in br->val_). */ +func checkInputAmount(br *bitReader, num uint) bool { + return br.input_len-br.byte_pos >= num +} + +/* Guarantees that there are at least |n_bits| + 1 bits in accumulator. + Precondition: accumulator contains at least 1 bit. + |n_bits| should be in the range [1..24] for regular build. For portable + non-64-bit little-endian build only 16 bits are safe to request. */ +func fillBitWindow(br *bitReader, n_bits uint32) { + if br.bit_pos_ >= 32 { + br.val_ >>= 32 + br.bit_pos_ ^= 32 /* here same as -= 32 because of the if condition */ + br.val_ |= (uint64(binary.LittleEndian.Uint32(br.input[br.byte_pos:]))) << 32 + br.byte_pos += 4 + } +} + +/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no + more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */ +func fillBitWindow16(br *bitReader) { + fillBitWindow(br, 17) +} + +/* Tries to pull one byte of input to accumulator. + Returns false if there is no input available. */ +func pullByte(br *bitReader) bool { + if br.byte_pos == br.input_len { + return false + } + + br.val_ >>= 8 + br.val_ |= (uint64(br.input[br.byte_pos])) << 56 + br.bit_pos_ -= 8 + br.byte_pos++ + return true +} + +/* Returns currently available bits. + The number of valid bits could be calculated by BrotliGetAvailableBits. */ +func getBitsUnmasked(br *bitReader) uint64 { + return br.val_ >> br.bit_pos_ +} + +/* Like BrotliGetBits, but does not mask the result. + The result contains at least 16 valid bits. */ +func get16BitsUnmasked(br *bitReader) uint32 { + fillBitWindow(br, 16) + return uint32(getBitsUnmasked(br)) +} + +/* Returns the specified number of bits from |br| without advancing bit + position. */ +func getBits(br *bitReader, n_bits uint32) uint32 { + fillBitWindow(br, n_bits) + return uint32(getBitsUnmasked(br)) & bitMask(n_bits) +} + +/* Tries to peek the specified amount of bits. Returns false, if there + is not enough input. */ +func safeGetBits(br *bitReader, n_bits uint32, val *uint32) bool { + for getAvailableBits(br) < n_bits { + if !pullByte(br) { + return false + } + } + + *val = uint32(getBitsUnmasked(br)) & bitMask(n_bits) + return true +} + +/* Advances the bit pos by |n_bits|. */ +func dropBits(br *bitReader, n_bits uint32) { + br.bit_pos_ += n_bits +} + +func bitReaderUnload(br *bitReader) { + var unused_bytes uint32 = getAvailableBits(br) >> 3 + var unused_bits uint32 = unused_bytes << 3 + br.byte_pos -= uint(unused_bytes) + if unused_bits == 64 { + br.val_ = 0 + } else { + br.val_ <<= unused_bits + } + + br.bit_pos_ += unused_bits +} + +/* Reads the specified number of bits from |br| and advances the bit pos. + Precondition: accumulator MUST contain at least |n_bits|. */ +func takeBits(br *bitReader, n_bits uint32, val *uint32) { + *val = uint32(getBitsUnmasked(br)) & bitMask(n_bits) + dropBits(br, n_bits) +} + +/* Reads the specified number of bits from |br| and advances the bit pos. + Assumes that there is enough input to perform BrotliFillBitWindow. */ +func readBits(br *bitReader, n_bits uint32) uint32 { + var val uint32 + fillBitWindow(br, n_bits) + takeBits(br, n_bits, &val) + return val +} + +/* Tries to read the specified amount of bits. Returns false, if there + is not enough input. |n_bits| MUST be positive. */ +func safeReadBits(br *bitReader, n_bits uint32, val *uint32) bool { + for getAvailableBits(br) < n_bits { + if !pullByte(br) { + return false + } + } + + takeBits(br, n_bits, val) + return true +} + +/* Advances the bit reader position to the next byte boundary and verifies + that any skipped bits are set to zero. */ +func bitReaderJumpToByteBoundary(br *bitReader) bool { + var pad_bits_count uint32 = getAvailableBits(br) & 0x7 + var pad_bits uint32 = 0 + if pad_bits_count != 0 { + takeBits(br, pad_bits_count, &pad_bits) + } + + return pad_bits == 0 +} + +/* Copies remaining input bytes stored in the bit reader to the output. Value + |num| may not be larger than BrotliGetRemainingBytes. The bit reader must be + warmed up again after this. */ +func copyBytes(dest []byte, br *bitReader, num uint) { + for getAvailableBits(br) >= 8 && num > 0 { + dest[0] = byte(getBitsUnmasked(br)) + dropBits(br, 8) + dest = dest[1:] + num-- + } + + copy(dest, br.input[br.byte_pos:][:num]) + br.byte_pos += num +} + +func initBitReader(br *bitReader) { + br.val_ = 0 + br.bit_pos_ = 64 +} + +func warmupBitReader(br *bitReader) bool { + /* Fixing alignment after unaligned BrotliFillWindow would result accumulator + overflow. If unalignment is caused by BrotliSafeReadBits, then there is + enough space in accumulator to fix alignment. */ + if getAvailableBits(br) == 0 { + if !pullByte(br) { + return false + } + } + + return true +} diff --git a/vendor/github.com/andybalholm/brotli/block_splitter.go b/vendor/github.com/andybalholm/brotli/block_splitter.go new file mode 100644 index 0000000000..978a131474 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/block_splitter.go @@ -0,0 +1,144 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Block split point selection utilities. */ + +type blockSplit struct { + num_types uint + num_blocks uint + types []byte + lengths []uint32 + types_alloc_size uint + lengths_alloc_size uint +} + +const ( + kMaxLiteralHistograms uint = 100 + kMaxCommandHistograms uint = 50 + kLiteralBlockSwitchCost float64 = 28.1 + kCommandBlockSwitchCost float64 = 13.5 + kDistanceBlockSwitchCost float64 = 14.6 + kLiteralStrideLength uint = 70 + kCommandStrideLength uint = 40 + kSymbolsPerLiteralHistogram uint = 544 + kSymbolsPerCommandHistogram uint = 530 + kSymbolsPerDistanceHistogram uint = 544 + kMinLengthForBlockSplitting uint = 128 + kIterMulForRefining uint = 2 + kMinItersForRefining uint = 100 +) + +func countLiterals(cmds []command) uint { + var total_length uint = 0 + /* Count how many we have. */ + + for i := range cmds { + total_length += uint(cmds[i].insert_len_) + } + + return total_length +} + +func copyLiteralsToByteArray(cmds []command, data []byte, offset uint, mask uint, literals []byte) { + var pos uint = 0 + var from_pos uint = offset & mask + for i := range cmds { + var insert_len uint = uint(cmds[i].insert_len_) + if from_pos+insert_len > mask { + var head_size uint = mask + 1 - from_pos + copy(literals[pos:], data[from_pos:][:head_size]) + from_pos = 0 + pos += head_size + insert_len -= head_size + } + + if insert_len > 0 { + copy(literals[pos:], data[from_pos:][:insert_len]) + pos += insert_len + } + + from_pos = uint((uint32(from_pos+insert_len) + commandCopyLen(&cmds[i])) & uint32(mask)) + } +} + +func myRand(seed *uint32) uint32 { + /* Initial seed should be 7. In this case, loop length is (1 << 29). */ + *seed *= 16807 + + return *seed +} + +func bitCost(count uint) float64 { + if count == 0 { + return -2.0 + } else { + return fastLog2(count) + } +} + +const histogramsPerBatch = 64 + +const clustersPerBatch = 16 + +func initBlockSplit(self *blockSplit) { + self.num_types = 0 + self.num_blocks = 0 + self.types = self.types[:0] + self.lengths = self.lengths[:0] + self.types_alloc_size = 0 + self.lengths_alloc_size = 0 +} + +func splitBlock(cmds []command, data []byte, pos uint, mask uint, params *encoderParams, literal_split *blockSplit, insert_and_copy_split *blockSplit, dist_split *blockSplit) { + { + var literals_count uint = countLiterals(cmds) + var literals []byte = make([]byte, literals_count) + + /* Create a continuous array of literals. */ + copyLiteralsToByteArray(cmds, data, pos, mask, literals) + + /* Create the block split on the array of literals. + Literal histograms have alphabet size 256. */ + splitByteVectorLiteral(literals, literals_count, kSymbolsPerLiteralHistogram, kMaxLiteralHistograms, kLiteralStrideLength, kLiteralBlockSwitchCost, params, literal_split) + + literals = nil + } + { + var insert_and_copy_codes []uint16 = make([]uint16, len(cmds)) + /* Compute prefix codes for commands. */ + + for i := range cmds { + insert_and_copy_codes[i] = cmds[i].cmd_prefix_ + } + + /* Create the block split on the array of command prefixes. */ + splitByteVectorCommand(insert_and_copy_codes, kSymbolsPerCommandHistogram, kMaxCommandHistograms, kCommandStrideLength, kCommandBlockSwitchCost, params, insert_and_copy_split) + + /* TODO: reuse for distances? */ + + insert_and_copy_codes = nil + } + { + var distance_prefixes []uint16 = make([]uint16, len(cmds)) + var j uint = 0 + /* Create a continuous array of distance prefixes. */ + + for i := range cmds { + var cmd *command = &cmds[i] + if commandCopyLen(cmd) != 0 && cmd.cmd_prefix_ >= 128 { + distance_prefixes[j] = cmd.dist_prefix_ & 0x3FF + j++ + } + } + + /* Create the block split on the array of distance prefixes. */ + splitByteVectorDistance(distance_prefixes, j, kSymbolsPerDistanceHistogram, kMaxCommandHistograms, kCommandStrideLength, kDistanceBlockSwitchCost, params, dist_split) + + distance_prefixes = nil + } +} diff --git a/vendor/github.com/andybalholm/brotli/block_splitter_command.go b/vendor/github.com/andybalholm/brotli/block_splitter_command.go new file mode 100644 index 0000000000..9dec13e4d9 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/block_splitter_command.go @@ -0,0 +1,434 @@ +package brotli + +import "math" + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +func initialEntropyCodesCommand(data []uint16, length uint, stride uint, num_histograms uint, histograms []histogramCommand) { + var seed uint32 = 7 + var block_length uint = length / num_histograms + var i uint + clearHistogramsCommand(histograms, num_histograms) + for i = 0; i < num_histograms; i++ { + var pos uint = length * i / num_histograms + if i != 0 { + pos += uint(myRand(&seed) % uint32(block_length)) + } + + if pos+stride >= length { + pos = length - stride - 1 + } + + histogramAddVectorCommand(&histograms[i], data[pos:], stride) + } +} + +func randomSampleCommand(seed *uint32, data []uint16, length uint, stride uint, sample *histogramCommand) { + var pos uint = 0 + if stride >= length { + stride = length + } else { + pos = uint(myRand(seed) % uint32(length-stride+1)) + } + + histogramAddVectorCommand(sample, data[pos:], stride) +} + +func refineEntropyCodesCommand(data []uint16, length uint, stride uint, num_histograms uint, histograms []histogramCommand) { + var iters uint = kIterMulForRefining*length/stride + kMinItersForRefining + var seed uint32 = 7 + var iter uint + iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms + for iter = 0; iter < iters; iter++ { + var sample histogramCommand + histogramClearCommand(&sample) + randomSampleCommand(&seed, data, length, stride, &sample) + histogramAddHistogramCommand(&histograms[iter%num_histograms], &sample) + } +} + +/* Assigns a block id from the range [0, num_histograms) to each data element + in data[0..length) and fills in block_id[0..length) with the assigned values. + Returns the number of blocks, i.e. one plus the number of block switches. */ +func findBlocksCommand(data []uint16, length uint, block_switch_bitcost float64, num_histograms uint, histograms []histogramCommand, insert_cost []float64, cost []float64, switch_signal []byte, block_id []byte) uint { + var data_size uint = histogramDataSizeCommand() + var bitmaplen uint = (num_histograms + 7) >> 3 + var num_blocks uint = 1 + var i uint + var j uint + assert(num_histograms <= 256) + if num_histograms <= 1 { + for i = 0; i < length; i++ { + block_id[i] = 0 + } + + return 1 + } + + for i := 0; i < int(data_size*num_histograms); i++ { + insert_cost[i] = 0 + } + for i = 0; i < num_histograms; i++ { + insert_cost[i] = fastLog2(uint(uint32(histograms[i].total_count_))) + } + + for i = data_size; i != 0; { + i-- + for j = 0; j < num_histograms; j++ { + insert_cost[i*num_histograms+j] = insert_cost[j] - bitCost(uint(histograms[j].data_[i])) + } + } + + for i := 0; i < int(num_histograms); i++ { + cost[i] = 0 + } + for i := 0; i < int(length*bitmaplen); i++ { + switch_signal[i] = 0 + } + + /* After each iteration of this loop, cost[k] will contain the difference + between the minimum cost of arriving at the current byte position using + entropy code k, and the minimum cost of arriving at the current byte + position. This difference is capped at the block switch cost, and if it + reaches block switch cost, it means that when we trace back from the last + position, we need to switch here. */ + for i = 0; i < length; i++ { + var byte_ix uint = i + var ix uint = byte_ix * bitmaplen + var insert_cost_ix uint = uint(data[byte_ix]) * num_histograms + var min_cost float64 = 1e99 + var block_switch_cost float64 = block_switch_bitcost + var k uint + for k = 0; k < num_histograms; k++ { + /* We are coding the symbol in data[byte_ix] with entropy code k. */ + cost[k] += insert_cost[insert_cost_ix+k] + + if cost[k] < min_cost { + min_cost = cost[k] + block_id[byte_ix] = byte(k) + } + } + + /* More blocks for the beginning. */ + if byte_ix < 2000 { + block_switch_cost *= 0.77 + 0.07*float64(byte_ix)/2000 + } + + for k = 0; k < num_histograms; k++ { + cost[k] -= min_cost + if cost[k] >= block_switch_cost { + var mask byte = byte(1 << (k & 7)) + cost[k] = block_switch_cost + assert(k>>3 < bitmaplen) + switch_signal[ix+(k>>3)] |= mask + /* Trace back from the last position and switch at the marked places. */ + } + } + } + { + var byte_ix uint = length - 1 + var ix uint = byte_ix * bitmaplen + var cur_id byte = block_id[byte_ix] + for byte_ix > 0 { + var mask byte = byte(1 << (cur_id & 7)) + assert(uint(cur_id)>>3 < bitmaplen) + byte_ix-- + ix -= bitmaplen + if switch_signal[ix+uint(cur_id>>3)]&mask != 0 { + if cur_id != block_id[byte_ix] { + cur_id = block_id[byte_ix] + num_blocks++ + } + } + + block_id[byte_ix] = cur_id + } + } + + return num_blocks +} + +var remapBlockIdsCommand_kInvalidId uint16 = 256 + +func remapBlockIdsCommand(block_ids []byte, length uint, new_id []uint16, num_histograms uint) uint { + var next_id uint16 = 0 + var i uint + for i = 0; i < num_histograms; i++ { + new_id[i] = remapBlockIdsCommand_kInvalidId + } + + for i = 0; i < length; i++ { + assert(uint(block_ids[i]) < num_histograms) + if new_id[block_ids[i]] == remapBlockIdsCommand_kInvalidId { + new_id[block_ids[i]] = next_id + next_id++ + } + } + + for i = 0; i < length; i++ { + block_ids[i] = byte(new_id[block_ids[i]]) + assert(uint(block_ids[i]) < num_histograms) + } + + assert(uint(next_id) <= num_histograms) + return uint(next_id) +} + +func buildBlockHistogramsCommand(data []uint16, length uint, block_ids []byte, num_histograms uint, histograms []histogramCommand) { + var i uint + clearHistogramsCommand(histograms, num_histograms) + for i = 0; i < length; i++ { + histogramAddCommand(&histograms[block_ids[i]], uint(data[i])) + } +} + +var clusterBlocksCommand_kInvalidIndex uint32 = math.MaxUint32 + +func clusterBlocksCommand(data []uint16, length uint, num_blocks uint, block_ids []byte, split *blockSplit) { + var histogram_symbols []uint32 = make([]uint32, num_blocks) + var block_lengths []uint32 = make([]uint32, num_blocks) + var expected_num_clusters uint = clustersPerBatch * (num_blocks + histogramsPerBatch - 1) / histogramsPerBatch + var all_histograms_size uint = 0 + var all_histograms_capacity uint = expected_num_clusters + var all_histograms []histogramCommand = make([]histogramCommand, all_histograms_capacity) + var cluster_size_size uint = 0 + var cluster_size_capacity uint = expected_num_clusters + var cluster_size []uint32 = make([]uint32, cluster_size_capacity) + var num_clusters uint = 0 + var histograms []histogramCommand = make([]histogramCommand, brotli_min_size_t(num_blocks, histogramsPerBatch)) + var max_num_pairs uint = histogramsPerBatch * histogramsPerBatch / 2 + var pairs_capacity uint = max_num_pairs + 1 + var pairs []histogramPair = make([]histogramPair, pairs_capacity) + var pos uint = 0 + var clusters []uint32 + var num_final_clusters uint + var new_index []uint32 + var i uint + var sizes = [histogramsPerBatch]uint32{0} + var new_clusters = [histogramsPerBatch]uint32{0} + var symbols = [histogramsPerBatch]uint32{0} + var remap = [histogramsPerBatch]uint32{0} + + for i := 0; i < int(num_blocks); i++ { + block_lengths[i] = 0 + } + { + var block_idx uint = 0 + for i = 0; i < length; i++ { + assert(block_idx < num_blocks) + block_lengths[block_idx]++ + if i+1 == length || block_ids[i] != block_ids[i+1] { + block_idx++ + } + } + + assert(block_idx == num_blocks) + } + + for i = 0; i < num_blocks; i += histogramsPerBatch { + var num_to_combine uint = brotli_min_size_t(num_blocks-i, histogramsPerBatch) + var num_new_clusters uint + var j uint + for j = 0; j < num_to_combine; j++ { + var k uint + histogramClearCommand(&histograms[j]) + for k = 0; uint32(k) < block_lengths[i+j]; k++ { + histogramAddCommand(&histograms[j], uint(data[pos])) + pos++ + } + + histograms[j].bit_cost_ = populationCostCommand(&histograms[j]) + new_clusters[j] = uint32(j) + symbols[j] = uint32(j) + sizes[j] = 1 + } + + num_new_clusters = histogramCombineCommand(histograms, sizes[:], symbols[:], new_clusters[:], []histogramPair(pairs), num_to_combine, num_to_combine, histogramsPerBatch, max_num_pairs) + if all_histograms_capacity < (all_histograms_size + num_new_clusters) { + var _new_size uint + if all_histograms_capacity == 0 { + _new_size = all_histograms_size + num_new_clusters + } else { + _new_size = all_histograms_capacity + } + var new_array []histogramCommand + for _new_size < (all_histograms_size + num_new_clusters) { + _new_size *= 2 + } + new_array = make([]histogramCommand, _new_size) + if all_histograms_capacity != 0 { + copy(new_array, all_histograms[:all_histograms_capacity]) + } + + all_histograms = new_array + all_histograms_capacity = _new_size + } + + brotli_ensure_capacity_uint32_t(&cluster_size, &cluster_size_capacity, cluster_size_size+num_new_clusters) + for j = 0; j < num_new_clusters; j++ { + all_histograms[all_histograms_size] = histograms[new_clusters[j]] + all_histograms_size++ + cluster_size[cluster_size_size] = sizes[new_clusters[j]] + cluster_size_size++ + remap[new_clusters[j]] = uint32(j) + } + + for j = 0; j < num_to_combine; j++ { + histogram_symbols[i+j] = uint32(num_clusters) + remap[symbols[j]] + } + + num_clusters += num_new_clusters + assert(num_clusters == cluster_size_size) + assert(num_clusters == all_histograms_size) + } + + histograms = nil + + max_num_pairs = brotli_min_size_t(64*num_clusters, (num_clusters/2)*num_clusters) + if pairs_capacity < max_num_pairs+1 { + pairs = nil + pairs = make([]histogramPair, (max_num_pairs + 1)) + } + + clusters = make([]uint32, num_clusters) + for i = 0; i < num_clusters; i++ { + clusters[i] = uint32(i) + } + + num_final_clusters = histogramCombineCommand(all_histograms, cluster_size, histogram_symbols, clusters, pairs, num_clusters, num_blocks, maxNumberOfBlockTypes, max_num_pairs) + pairs = nil + cluster_size = nil + + new_index = make([]uint32, num_clusters) + for i = 0; i < num_clusters; i++ { + new_index[i] = clusterBlocksCommand_kInvalidIndex + } + pos = 0 + { + var next_index uint32 = 0 + for i = 0; i < num_blocks; i++ { + var histo histogramCommand + var j uint + var best_out uint32 + var best_bits float64 + histogramClearCommand(&histo) + for j = 0; uint32(j) < block_lengths[i]; j++ { + histogramAddCommand(&histo, uint(data[pos])) + pos++ + } + + if i == 0 { + best_out = histogram_symbols[0] + } else { + best_out = histogram_symbols[i-1] + } + best_bits = histogramBitCostDistanceCommand(&histo, &all_histograms[best_out]) + for j = 0; j < num_final_clusters; j++ { + var cur_bits float64 = histogramBitCostDistanceCommand(&histo, &all_histograms[clusters[j]]) + if cur_bits < best_bits { + best_bits = cur_bits + best_out = clusters[j] + } + } + + histogram_symbols[i] = best_out + if new_index[best_out] == clusterBlocksCommand_kInvalidIndex { + new_index[best_out] = next_index + next_index++ + } + } + } + + clusters = nil + all_histograms = nil + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, num_blocks) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, num_blocks) + { + var cur_length uint32 = 0 + var block_idx uint = 0 + var max_type byte = 0 + for i = 0; i < num_blocks; i++ { + cur_length += block_lengths[i] + if i+1 == num_blocks || histogram_symbols[i] != histogram_symbols[i+1] { + var id byte = byte(new_index[histogram_symbols[i]]) + split.types[block_idx] = id + split.lengths[block_idx] = cur_length + max_type = brotli_max_uint8_t(max_type, id) + cur_length = 0 + block_idx++ + } + } + + split.num_blocks = block_idx + split.num_types = uint(max_type) + 1 + } + + new_index = nil + block_lengths = nil + histogram_symbols = nil +} + +func splitByteVectorCommand(data []uint16, literals_per_histogram uint, max_histograms uint, sampling_stride_length uint, block_switch_cost float64, params *encoderParams, split *blockSplit) { + length := uint(len(data)) + var data_size uint = histogramDataSizeCommand() + var num_histograms uint = length/literals_per_histogram + 1 + var histograms []histogramCommand + if num_histograms > max_histograms { + num_histograms = max_histograms + } + + if length == 0 { + split.num_types = 1 + return + } else if length < kMinLengthForBlockSplitting { + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, split.num_blocks+1) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, split.num_blocks+1) + split.num_types = 1 + split.types[split.num_blocks] = 0 + split.lengths[split.num_blocks] = uint32(length) + split.num_blocks++ + return + } + + histograms = make([]histogramCommand, num_histograms) + + /* Find good entropy codes. */ + initialEntropyCodesCommand(data, length, sampling_stride_length, num_histograms, histograms) + + refineEntropyCodesCommand(data, length, sampling_stride_length, num_histograms, histograms) + { + var block_ids []byte = make([]byte, length) + var num_blocks uint = 0 + var bitmaplen uint = (num_histograms + 7) >> 3 + var insert_cost []float64 = make([]float64, (data_size * num_histograms)) + var cost []float64 = make([]float64, num_histograms) + var switch_signal []byte = make([]byte, (length * bitmaplen)) + var new_id []uint16 = make([]uint16, num_histograms) + var iters uint + if params.quality < hqZopflificationQuality { + iters = 3 + } else { + iters = 10 + } + /* Find a good path through literals with the good entropy codes. */ + + var i uint + for i = 0; i < iters; i++ { + num_blocks = findBlocksCommand(data, length, block_switch_cost, num_histograms, histograms, insert_cost, cost, switch_signal, block_ids) + num_histograms = remapBlockIdsCommand(block_ids, length, new_id, num_histograms) + buildBlockHistogramsCommand(data, length, block_ids, num_histograms, histograms) + } + + insert_cost = nil + cost = nil + switch_signal = nil + new_id = nil + histograms = nil + clusterBlocksCommand(data, length, num_blocks, block_ids, split) + block_ids = nil + } +} diff --git a/vendor/github.com/andybalholm/brotli/block_splitter_distance.go b/vendor/github.com/andybalholm/brotli/block_splitter_distance.go new file mode 100644 index 0000000000..953530d518 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/block_splitter_distance.go @@ -0,0 +1,433 @@ +package brotli + +import "math" + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +func initialEntropyCodesDistance(data []uint16, length uint, stride uint, num_histograms uint, histograms []histogramDistance) { + var seed uint32 = 7 + var block_length uint = length / num_histograms + var i uint + clearHistogramsDistance(histograms, num_histograms) + for i = 0; i < num_histograms; i++ { + var pos uint = length * i / num_histograms + if i != 0 { + pos += uint(myRand(&seed) % uint32(block_length)) + } + + if pos+stride >= length { + pos = length - stride - 1 + } + + histogramAddVectorDistance(&histograms[i], data[pos:], stride) + } +} + +func randomSampleDistance(seed *uint32, data []uint16, length uint, stride uint, sample *histogramDistance) { + var pos uint = 0 + if stride >= length { + stride = length + } else { + pos = uint(myRand(seed) % uint32(length-stride+1)) + } + + histogramAddVectorDistance(sample, data[pos:], stride) +} + +func refineEntropyCodesDistance(data []uint16, length uint, stride uint, num_histograms uint, histograms []histogramDistance) { + var iters uint = kIterMulForRefining*length/stride + kMinItersForRefining + var seed uint32 = 7 + var iter uint + iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms + for iter = 0; iter < iters; iter++ { + var sample histogramDistance + histogramClearDistance(&sample) + randomSampleDistance(&seed, data, length, stride, &sample) + histogramAddHistogramDistance(&histograms[iter%num_histograms], &sample) + } +} + +/* Assigns a block id from the range [0, num_histograms) to each data element + in data[0..length) and fills in block_id[0..length) with the assigned values. + Returns the number of blocks, i.e. one plus the number of block switches. */ +func findBlocksDistance(data []uint16, length uint, block_switch_bitcost float64, num_histograms uint, histograms []histogramDistance, insert_cost []float64, cost []float64, switch_signal []byte, block_id []byte) uint { + var data_size uint = histogramDataSizeDistance() + var bitmaplen uint = (num_histograms + 7) >> 3 + var num_blocks uint = 1 + var i uint + var j uint + assert(num_histograms <= 256) + if num_histograms <= 1 { + for i = 0; i < length; i++ { + block_id[i] = 0 + } + + return 1 + } + + for i := 0; i < int(data_size*num_histograms); i++ { + insert_cost[i] = 0 + } + for i = 0; i < num_histograms; i++ { + insert_cost[i] = fastLog2(uint(uint32(histograms[i].total_count_))) + } + + for i = data_size; i != 0; { + i-- + for j = 0; j < num_histograms; j++ { + insert_cost[i*num_histograms+j] = insert_cost[j] - bitCost(uint(histograms[j].data_[i])) + } + } + + for i := 0; i < int(num_histograms); i++ { + cost[i] = 0 + } + for i := 0; i < int(length*bitmaplen); i++ { + switch_signal[i] = 0 + } + + /* After each iteration of this loop, cost[k] will contain the difference + between the minimum cost of arriving at the current byte position using + entropy code k, and the minimum cost of arriving at the current byte + position. This difference is capped at the block switch cost, and if it + reaches block switch cost, it means that when we trace back from the last + position, we need to switch here. */ + for i = 0; i < length; i++ { + var byte_ix uint = i + var ix uint = byte_ix * bitmaplen + var insert_cost_ix uint = uint(data[byte_ix]) * num_histograms + var min_cost float64 = 1e99 + var block_switch_cost float64 = block_switch_bitcost + var k uint + for k = 0; k < num_histograms; k++ { + /* We are coding the symbol in data[byte_ix] with entropy code k. */ + cost[k] += insert_cost[insert_cost_ix+k] + + if cost[k] < min_cost { + min_cost = cost[k] + block_id[byte_ix] = byte(k) + } + } + + /* More blocks for the beginning. */ + if byte_ix < 2000 { + block_switch_cost *= 0.77 + 0.07*float64(byte_ix)/2000 + } + + for k = 0; k < num_histograms; k++ { + cost[k] -= min_cost + if cost[k] >= block_switch_cost { + var mask byte = byte(1 << (k & 7)) + cost[k] = block_switch_cost + assert(k>>3 < bitmaplen) + switch_signal[ix+(k>>3)] |= mask + /* Trace back from the last position and switch at the marked places. */ + } + } + } + { + var byte_ix uint = length - 1 + var ix uint = byte_ix * bitmaplen + var cur_id byte = block_id[byte_ix] + for byte_ix > 0 { + var mask byte = byte(1 << (cur_id & 7)) + assert(uint(cur_id)>>3 < bitmaplen) + byte_ix-- + ix -= bitmaplen + if switch_signal[ix+uint(cur_id>>3)]&mask != 0 { + if cur_id != block_id[byte_ix] { + cur_id = block_id[byte_ix] + num_blocks++ + } + } + + block_id[byte_ix] = cur_id + } + } + + return num_blocks +} + +var remapBlockIdsDistance_kInvalidId uint16 = 256 + +func remapBlockIdsDistance(block_ids []byte, length uint, new_id []uint16, num_histograms uint) uint { + var next_id uint16 = 0 + var i uint + for i = 0; i < num_histograms; i++ { + new_id[i] = remapBlockIdsDistance_kInvalidId + } + + for i = 0; i < length; i++ { + assert(uint(block_ids[i]) < num_histograms) + if new_id[block_ids[i]] == remapBlockIdsDistance_kInvalidId { + new_id[block_ids[i]] = next_id + next_id++ + } + } + + for i = 0; i < length; i++ { + block_ids[i] = byte(new_id[block_ids[i]]) + assert(uint(block_ids[i]) < num_histograms) + } + + assert(uint(next_id) <= num_histograms) + return uint(next_id) +} + +func buildBlockHistogramsDistance(data []uint16, length uint, block_ids []byte, num_histograms uint, histograms []histogramDistance) { + var i uint + clearHistogramsDistance(histograms, num_histograms) + for i = 0; i < length; i++ { + histogramAddDistance(&histograms[block_ids[i]], uint(data[i])) + } +} + +var clusterBlocksDistance_kInvalidIndex uint32 = math.MaxUint32 + +func clusterBlocksDistance(data []uint16, length uint, num_blocks uint, block_ids []byte, split *blockSplit) { + var histogram_symbols []uint32 = make([]uint32, num_blocks) + var block_lengths []uint32 = make([]uint32, num_blocks) + var expected_num_clusters uint = clustersPerBatch * (num_blocks + histogramsPerBatch - 1) / histogramsPerBatch + var all_histograms_size uint = 0 + var all_histograms_capacity uint = expected_num_clusters + var all_histograms []histogramDistance = make([]histogramDistance, all_histograms_capacity) + var cluster_size_size uint = 0 + var cluster_size_capacity uint = expected_num_clusters + var cluster_size []uint32 = make([]uint32, cluster_size_capacity) + var num_clusters uint = 0 + var histograms []histogramDistance = make([]histogramDistance, brotli_min_size_t(num_blocks, histogramsPerBatch)) + var max_num_pairs uint = histogramsPerBatch * histogramsPerBatch / 2 + var pairs_capacity uint = max_num_pairs + 1 + var pairs []histogramPair = make([]histogramPair, pairs_capacity) + var pos uint = 0 + var clusters []uint32 + var num_final_clusters uint + var new_index []uint32 + var i uint + var sizes = [histogramsPerBatch]uint32{0} + var new_clusters = [histogramsPerBatch]uint32{0} + var symbols = [histogramsPerBatch]uint32{0} + var remap = [histogramsPerBatch]uint32{0} + + for i := 0; i < int(num_blocks); i++ { + block_lengths[i] = 0 + } + { + var block_idx uint = 0 + for i = 0; i < length; i++ { + assert(block_idx < num_blocks) + block_lengths[block_idx]++ + if i+1 == length || block_ids[i] != block_ids[i+1] { + block_idx++ + } + } + + assert(block_idx == num_blocks) + } + + for i = 0; i < num_blocks; i += histogramsPerBatch { + var num_to_combine uint = brotli_min_size_t(num_blocks-i, histogramsPerBatch) + var num_new_clusters uint + var j uint + for j = 0; j < num_to_combine; j++ { + var k uint + histogramClearDistance(&histograms[j]) + for k = 0; uint32(k) < block_lengths[i+j]; k++ { + histogramAddDistance(&histograms[j], uint(data[pos])) + pos++ + } + + histograms[j].bit_cost_ = populationCostDistance(&histograms[j]) + new_clusters[j] = uint32(j) + symbols[j] = uint32(j) + sizes[j] = 1 + } + + num_new_clusters = histogramCombineDistance(histograms, sizes[:], symbols[:], new_clusters[:], []histogramPair(pairs), num_to_combine, num_to_combine, histogramsPerBatch, max_num_pairs) + if all_histograms_capacity < (all_histograms_size + num_new_clusters) { + var _new_size uint + if all_histograms_capacity == 0 { + _new_size = all_histograms_size + num_new_clusters + } else { + _new_size = all_histograms_capacity + } + var new_array []histogramDistance + for _new_size < (all_histograms_size + num_new_clusters) { + _new_size *= 2 + } + new_array = make([]histogramDistance, _new_size) + if all_histograms_capacity != 0 { + copy(new_array, all_histograms[:all_histograms_capacity]) + } + + all_histograms = new_array + all_histograms_capacity = _new_size + } + + brotli_ensure_capacity_uint32_t(&cluster_size, &cluster_size_capacity, cluster_size_size+num_new_clusters) + for j = 0; j < num_new_clusters; j++ { + all_histograms[all_histograms_size] = histograms[new_clusters[j]] + all_histograms_size++ + cluster_size[cluster_size_size] = sizes[new_clusters[j]] + cluster_size_size++ + remap[new_clusters[j]] = uint32(j) + } + + for j = 0; j < num_to_combine; j++ { + histogram_symbols[i+j] = uint32(num_clusters) + remap[symbols[j]] + } + + num_clusters += num_new_clusters + assert(num_clusters == cluster_size_size) + assert(num_clusters == all_histograms_size) + } + + histograms = nil + + max_num_pairs = brotli_min_size_t(64*num_clusters, (num_clusters/2)*num_clusters) + if pairs_capacity < max_num_pairs+1 { + pairs = nil + pairs = make([]histogramPair, (max_num_pairs + 1)) + } + + clusters = make([]uint32, num_clusters) + for i = 0; i < num_clusters; i++ { + clusters[i] = uint32(i) + } + + num_final_clusters = histogramCombineDistance(all_histograms, cluster_size, histogram_symbols, clusters, pairs, num_clusters, num_blocks, maxNumberOfBlockTypes, max_num_pairs) + pairs = nil + cluster_size = nil + + new_index = make([]uint32, num_clusters) + for i = 0; i < num_clusters; i++ { + new_index[i] = clusterBlocksDistance_kInvalidIndex + } + pos = 0 + { + var next_index uint32 = 0 + for i = 0; i < num_blocks; i++ { + var histo histogramDistance + var j uint + var best_out uint32 + var best_bits float64 + histogramClearDistance(&histo) + for j = 0; uint32(j) < block_lengths[i]; j++ { + histogramAddDistance(&histo, uint(data[pos])) + pos++ + } + + if i == 0 { + best_out = histogram_symbols[0] + } else { + best_out = histogram_symbols[i-1] + } + best_bits = histogramBitCostDistanceDistance(&histo, &all_histograms[best_out]) + for j = 0; j < num_final_clusters; j++ { + var cur_bits float64 = histogramBitCostDistanceDistance(&histo, &all_histograms[clusters[j]]) + if cur_bits < best_bits { + best_bits = cur_bits + best_out = clusters[j] + } + } + + histogram_symbols[i] = best_out + if new_index[best_out] == clusterBlocksDistance_kInvalidIndex { + new_index[best_out] = next_index + next_index++ + } + } + } + + clusters = nil + all_histograms = nil + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, num_blocks) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, num_blocks) + { + var cur_length uint32 = 0 + var block_idx uint = 0 + var max_type byte = 0 + for i = 0; i < num_blocks; i++ { + cur_length += block_lengths[i] + if i+1 == num_blocks || histogram_symbols[i] != histogram_symbols[i+1] { + var id byte = byte(new_index[histogram_symbols[i]]) + split.types[block_idx] = id + split.lengths[block_idx] = cur_length + max_type = brotli_max_uint8_t(max_type, id) + cur_length = 0 + block_idx++ + } + } + + split.num_blocks = block_idx + split.num_types = uint(max_type) + 1 + } + + new_index = nil + block_lengths = nil + histogram_symbols = nil +} + +func splitByteVectorDistance(data []uint16, length uint, literals_per_histogram uint, max_histograms uint, sampling_stride_length uint, block_switch_cost float64, params *encoderParams, split *blockSplit) { + var data_size uint = histogramDataSizeDistance() + var num_histograms uint = length/literals_per_histogram + 1 + var histograms []histogramDistance + if num_histograms > max_histograms { + num_histograms = max_histograms + } + + if length == 0 { + split.num_types = 1 + return + } else if length < kMinLengthForBlockSplitting { + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, split.num_blocks+1) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, split.num_blocks+1) + split.num_types = 1 + split.types[split.num_blocks] = 0 + split.lengths[split.num_blocks] = uint32(length) + split.num_blocks++ + return + } + + histograms = make([]histogramDistance, num_histograms) + + /* Find good entropy codes. */ + initialEntropyCodesDistance(data, length, sampling_stride_length, num_histograms, histograms) + + refineEntropyCodesDistance(data, length, sampling_stride_length, num_histograms, histograms) + { + var block_ids []byte = make([]byte, length) + var num_blocks uint = 0 + var bitmaplen uint = (num_histograms + 7) >> 3 + var insert_cost []float64 = make([]float64, (data_size * num_histograms)) + var cost []float64 = make([]float64, num_histograms) + var switch_signal []byte = make([]byte, (length * bitmaplen)) + var new_id []uint16 = make([]uint16, num_histograms) + var iters uint + if params.quality < hqZopflificationQuality { + iters = 3 + } else { + iters = 10 + } + /* Find a good path through literals with the good entropy codes. */ + + var i uint + for i = 0; i < iters; i++ { + num_blocks = findBlocksDistance(data, length, block_switch_cost, num_histograms, histograms, insert_cost, cost, switch_signal, block_ids) + num_histograms = remapBlockIdsDistance(block_ids, length, new_id, num_histograms) + buildBlockHistogramsDistance(data, length, block_ids, num_histograms, histograms) + } + + insert_cost = nil + cost = nil + switch_signal = nil + new_id = nil + histograms = nil + clusterBlocksDistance(data, length, num_blocks, block_ids, split) + block_ids = nil + } +} diff --git a/vendor/github.com/andybalholm/brotli/block_splitter_literal.go b/vendor/github.com/andybalholm/brotli/block_splitter_literal.go new file mode 100644 index 0000000000..1c895cf388 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/block_splitter_literal.go @@ -0,0 +1,433 @@ +package brotli + +import "math" + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +func initialEntropyCodesLiteral(data []byte, length uint, stride uint, num_histograms uint, histograms []histogramLiteral) { + var seed uint32 = 7 + var block_length uint = length / num_histograms + var i uint + clearHistogramsLiteral(histograms, num_histograms) + for i = 0; i < num_histograms; i++ { + var pos uint = length * i / num_histograms + if i != 0 { + pos += uint(myRand(&seed) % uint32(block_length)) + } + + if pos+stride >= length { + pos = length - stride - 1 + } + + histogramAddVectorLiteral(&histograms[i], data[pos:], stride) + } +} + +func randomSampleLiteral(seed *uint32, data []byte, length uint, stride uint, sample *histogramLiteral) { + var pos uint = 0 + if stride >= length { + stride = length + } else { + pos = uint(myRand(seed) % uint32(length-stride+1)) + } + + histogramAddVectorLiteral(sample, data[pos:], stride) +} + +func refineEntropyCodesLiteral(data []byte, length uint, stride uint, num_histograms uint, histograms []histogramLiteral) { + var iters uint = kIterMulForRefining*length/stride + kMinItersForRefining + var seed uint32 = 7 + var iter uint + iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms + for iter = 0; iter < iters; iter++ { + var sample histogramLiteral + histogramClearLiteral(&sample) + randomSampleLiteral(&seed, data, length, stride, &sample) + histogramAddHistogramLiteral(&histograms[iter%num_histograms], &sample) + } +} + +/* Assigns a block id from the range [0, num_histograms) to each data element + in data[0..length) and fills in block_id[0..length) with the assigned values. + Returns the number of blocks, i.e. one plus the number of block switches. */ +func findBlocksLiteral(data []byte, length uint, block_switch_bitcost float64, num_histograms uint, histograms []histogramLiteral, insert_cost []float64, cost []float64, switch_signal []byte, block_id []byte) uint { + var data_size uint = histogramDataSizeLiteral() + var bitmaplen uint = (num_histograms + 7) >> 3 + var num_blocks uint = 1 + var i uint + var j uint + assert(num_histograms <= 256) + if num_histograms <= 1 { + for i = 0; i < length; i++ { + block_id[i] = 0 + } + + return 1 + } + + for i := 0; i < int(data_size*num_histograms); i++ { + insert_cost[i] = 0 + } + for i = 0; i < num_histograms; i++ { + insert_cost[i] = fastLog2(uint(uint32(histograms[i].total_count_))) + } + + for i = data_size; i != 0; { + i-- + for j = 0; j < num_histograms; j++ { + insert_cost[i*num_histograms+j] = insert_cost[j] - bitCost(uint(histograms[j].data_[i])) + } + } + + for i := 0; i < int(num_histograms); i++ { + cost[i] = 0 + } + for i := 0; i < int(length*bitmaplen); i++ { + switch_signal[i] = 0 + } + + /* After each iteration of this loop, cost[k] will contain the difference + between the minimum cost of arriving at the current byte position using + entropy code k, and the minimum cost of arriving at the current byte + position. This difference is capped at the block switch cost, and if it + reaches block switch cost, it means that when we trace back from the last + position, we need to switch here. */ + for i = 0; i < length; i++ { + var byte_ix uint = i + var ix uint = byte_ix * bitmaplen + var insert_cost_ix uint = uint(data[byte_ix]) * num_histograms + var min_cost float64 = 1e99 + var block_switch_cost float64 = block_switch_bitcost + var k uint + for k = 0; k < num_histograms; k++ { + /* We are coding the symbol in data[byte_ix] with entropy code k. */ + cost[k] += insert_cost[insert_cost_ix+k] + + if cost[k] < min_cost { + min_cost = cost[k] + block_id[byte_ix] = byte(k) + } + } + + /* More blocks for the beginning. */ + if byte_ix < 2000 { + block_switch_cost *= 0.77 + 0.07*float64(byte_ix)/2000 + } + + for k = 0; k < num_histograms; k++ { + cost[k] -= min_cost + if cost[k] >= block_switch_cost { + var mask byte = byte(1 << (k & 7)) + cost[k] = block_switch_cost + assert(k>>3 < bitmaplen) + switch_signal[ix+(k>>3)] |= mask + /* Trace back from the last position and switch at the marked places. */ + } + } + } + { + var byte_ix uint = length - 1 + var ix uint = byte_ix * bitmaplen + var cur_id byte = block_id[byte_ix] + for byte_ix > 0 { + var mask byte = byte(1 << (cur_id & 7)) + assert(uint(cur_id)>>3 < bitmaplen) + byte_ix-- + ix -= bitmaplen + if switch_signal[ix+uint(cur_id>>3)]&mask != 0 { + if cur_id != block_id[byte_ix] { + cur_id = block_id[byte_ix] + num_blocks++ + } + } + + block_id[byte_ix] = cur_id + } + } + + return num_blocks +} + +var remapBlockIdsLiteral_kInvalidId uint16 = 256 + +func remapBlockIdsLiteral(block_ids []byte, length uint, new_id []uint16, num_histograms uint) uint { + var next_id uint16 = 0 + var i uint + for i = 0; i < num_histograms; i++ { + new_id[i] = remapBlockIdsLiteral_kInvalidId + } + + for i = 0; i < length; i++ { + assert(uint(block_ids[i]) < num_histograms) + if new_id[block_ids[i]] == remapBlockIdsLiteral_kInvalidId { + new_id[block_ids[i]] = next_id + next_id++ + } + } + + for i = 0; i < length; i++ { + block_ids[i] = byte(new_id[block_ids[i]]) + assert(uint(block_ids[i]) < num_histograms) + } + + assert(uint(next_id) <= num_histograms) + return uint(next_id) +} + +func buildBlockHistogramsLiteral(data []byte, length uint, block_ids []byte, num_histograms uint, histograms []histogramLiteral) { + var i uint + clearHistogramsLiteral(histograms, num_histograms) + for i = 0; i < length; i++ { + histogramAddLiteral(&histograms[block_ids[i]], uint(data[i])) + } +} + +var clusterBlocksLiteral_kInvalidIndex uint32 = math.MaxUint32 + +func clusterBlocksLiteral(data []byte, length uint, num_blocks uint, block_ids []byte, split *blockSplit) { + var histogram_symbols []uint32 = make([]uint32, num_blocks) + var block_lengths []uint32 = make([]uint32, num_blocks) + var expected_num_clusters uint = clustersPerBatch * (num_blocks + histogramsPerBatch - 1) / histogramsPerBatch + var all_histograms_size uint = 0 + var all_histograms_capacity uint = expected_num_clusters + var all_histograms []histogramLiteral = make([]histogramLiteral, all_histograms_capacity) + var cluster_size_size uint = 0 + var cluster_size_capacity uint = expected_num_clusters + var cluster_size []uint32 = make([]uint32, cluster_size_capacity) + var num_clusters uint = 0 + var histograms []histogramLiteral = make([]histogramLiteral, brotli_min_size_t(num_blocks, histogramsPerBatch)) + var max_num_pairs uint = histogramsPerBatch * histogramsPerBatch / 2 + var pairs_capacity uint = max_num_pairs + 1 + var pairs []histogramPair = make([]histogramPair, pairs_capacity) + var pos uint = 0 + var clusters []uint32 + var num_final_clusters uint + var new_index []uint32 + var i uint + var sizes = [histogramsPerBatch]uint32{0} + var new_clusters = [histogramsPerBatch]uint32{0} + var symbols = [histogramsPerBatch]uint32{0} + var remap = [histogramsPerBatch]uint32{0} + + for i := 0; i < int(num_blocks); i++ { + block_lengths[i] = 0 + } + { + var block_idx uint = 0 + for i = 0; i < length; i++ { + assert(block_idx < num_blocks) + block_lengths[block_idx]++ + if i+1 == length || block_ids[i] != block_ids[i+1] { + block_idx++ + } + } + + assert(block_idx == num_blocks) + } + + for i = 0; i < num_blocks; i += histogramsPerBatch { + var num_to_combine uint = brotli_min_size_t(num_blocks-i, histogramsPerBatch) + var num_new_clusters uint + var j uint + for j = 0; j < num_to_combine; j++ { + var k uint + histogramClearLiteral(&histograms[j]) + for k = 0; uint32(k) < block_lengths[i+j]; k++ { + histogramAddLiteral(&histograms[j], uint(data[pos])) + pos++ + } + + histograms[j].bit_cost_ = populationCostLiteral(&histograms[j]) + new_clusters[j] = uint32(j) + symbols[j] = uint32(j) + sizes[j] = 1 + } + + num_new_clusters = histogramCombineLiteral(histograms, sizes[:], symbols[:], new_clusters[:], []histogramPair(pairs), num_to_combine, num_to_combine, histogramsPerBatch, max_num_pairs) + if all_histograms_capacity < (all_histograms_size + num_new_clusters) { + var _new_size uint + if all_histograms_capacity == 0 { + _new_size = all_histograms_size + num_new_clusters + } else { + _new_size = all_histograms_capacity + } + var new_array []histogramLiteral + for _new_size < (all_histograms_size + num_new_clusters) { + _new_size *= 2 + } + new_array = make([]histogramLiteral, _new_size) + if all_histograms_capacity != 0 { + copy(new_array, all_histograms[:all_histograms_capacity]) + } + + all_histograms = new_array + all_histograms_capacity = _new_size + } + + brotli_ensure_capacity_uint32_t(&cluster_size, &cluster_size_capacity, cluster_size_size+num_new_clusters) + for j = 0; j < num_new_clusters; j++ { + all_histograms[all_histograms_size] = histograms[new_clusters[j]] + all_histograms_size++ + cluster_size[cluster_size_size] = sizes[new_clusters[j]] + cluster_size_size++ + remap[new_clusters[j]] = uint32(j) + } + + for j = 0; j < num_to_combine; j++ { + histogram_symbols[i+j] = uint32(num_clusters) + remap[symbols[j]] + } + + num_clusters += num_new_clusters + assert(num_clusters == cluster_size_size) + assert(num_clusters == all_histograms_size) + } + + histograms = nil + + max_num_pairs = brotli_min_size_t(64*num_clusters, (num_clusters/2)*num_clusters) + if pairs_capacity < max_num_pairs+1 { + pairs = nil + pairs = make([]histogramPair, (max_num_pairs + 1)) + } + + clusters = make([]uint32, num_clusters) + for i = 0; i < num_clusters; i++ { + clusters[i] = uint32(i) + } + + num_final_clusters = histogramCombineLiteral(all_histograms, cluster_size, histogram_symbols, clusters, pairs, num_clusters, num_blocks, maxNumberOfBlockTypes, max_num_pairs) + pairs = nil + cluster_size = nil + + new_index = make([]uint32, num_clusters) + for i = 0; i < num_clusters; i++ { + new_index[i] = clusterBlocksLiteral_kInvalidIndex + } + pos = 0 + { + var next_index uint32 = 0 + for i = 0; i < num_blocks; i++ { + var histo histogramLiteral + var j uint + var best_out uint32 + var best_bits float64 + histogramClearLiteral(&histo) + for j = 0; uint32(j) < block_lengths[i]; j++ { + histogramAddLiteral(&histo, uint(data[pos])) + pos++ + } + + if i == 0 { + best_out = histogram_symbols[0] + } else { + best_out = histogram_symbols[i-1] + } + best_bits = histogramBitCostDistanceLiteral(&histo, &all_histograms[best_out]) + for j = 0; j < num_final_clusters; j++ { + var cur_bits float64 = histogramBitCostDistanceLiteral(&histo, &all_histograms[clusters[j]]) + if cur_bits < best_bits { + best_bits = cur_bits + best_out = clusters[j] + } + } + + histogram_symbols[i] = best_out + if new_index[best_out] == clusterBlocksLiteral_kInvalidIndex { + new_index[best_out] = next_index + next_index++ + } + } + } + + clusters = nil + all_histograms = nil + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, num_blocks) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, num_blocks) + { + var cur_length uint32 = 0 + var block_idx uint = 0 + var max_type byte = 0 + for i = 0; i < num_blocks; i++ { + cur_length += block_lengths[i] + if i+1 == num_blocks || histogram_symbols[i] != histogram_symbols[i+1] { + var id byte = byte(new_index[histogram_symbols[i]]) + split.types[block_idx] = id + split.lengths[block_idx] = cur_length + max_type = brotli_max_uint8_t(max_type, id) + cur_length = 0 + block_idx++ + } + } + + split.num_blocks = block_idx + split.num_types = uint(max_type) + 1 + } + + new_index = nil + block_lengths = nil + histogram_symbols = nil +} + +func splitByteVectorLiteral(data []byte, length uint, literals_per_histogram uint, max_histograms uint, sampling_stride_length uint, block_switch_cost float64, params *encoderParams, split *blockSplit) { + var data_size uint = histogramDataSizeLiteral() + var num_histograms uint = length/literals_per_histogram + 1 + var histograms []histogramLiteral + if num_histograms > max_histograms { + num_histograms = max_histograms + } + + if length == 0 { + split.num_types = 1 + return + } else if length < kMinLengthForBlockSplitting { + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, split.num_blocks+1) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, split.num_blocks+1) + split.num_types = 1 + split.types[split.num_blocks] = 0 + split.lengths[split.num_blocks] = uint32(length) + split.num_blocks++ + return + } + + histograms = make([]histogramLiteral, num_histograms) + + /* Find good entropy codes. */ + initialEntropyCodesLiteral(data, length, sampling_stride_length, num_histograms, histograms) + + refineEntropyCodesLiteral(data, length, sampling_stride_length, num_histograms, histograms) + { + var block_ids []byte = make([]byte, length) + var num_blocks uint = 0 + var bitmaplen uint = (num_histograms + 7) >> 3 + var insert_cost []float64 = make([]float64, (data_size * num_histograms)) + var cost []float64 = make([]float64, num_histograms) + var switch_signal []byte = make([]byte, (length * bitmaplen)) + var new_id []uint16 = make([]uint16, num_histograms) + var iters uint + if params.quality < hqZopflificationQuality { + iters = 3 + } else { + iters = 10 + } + /* Find a good path through literals with the good entropy codes. */ + + var i uint + for i = 0; i < iters; i++ { + num_blocks = findBlocksLiteral(data, length, block_switch_cost, num_histograms, histograms, insert_cost, cost, switch_signal, block_ids) + num_histograms = remapBlockIdsLiteral(block_ids, length, new_id, num_histograms) + buildBlockHistogramsLiteral(data, length, block_ids, num_histograms, histograms) + } + + insert_cost = nil + cost = nil + switch_signal = nil + new_id = nil + histograms = nil + clusterBlocksLiteral(data, length, num_blocks, block_ids, split) + block_ids = nil + } +} diff --git a/vendor/github.com/andybalholm/brotli/brotli_bit_stream.go b/vendor/github.com/andybalholm/brotli/brotli_bit_stream.go new file mode 100644 index 0000000000..7acfb18061 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/brotli_bit_stream.go @@ -0,0 +1,1300 @@ +package brotli + +import ( + "math" + "sync" +) + +const maxHuffmanTreeSize = (2*numCommandSymbols + 1) + +/* The maximum size of Huffman dictionary for distances assuming that + NPOSTFIX = 0 and NDIRECT = 0. */ +const maxSimpleDistanceAlphabetSize = 140 + +/* Represents the range of values belonging to a prefix code: + [offset, offset + 2^nbits) */ +type prefixCodeRange struct { + offset uint32 + nbits uint32 +} + +var kBlockLengthPrefixCode = [numBlockLenSymbols]prefixCodeRange{ + prefixCodeRange{1, 2}, + prefixCodeRange{5, 2}, + prefixCodeRange{9, 2}, + prefixCodeRange{13, 2}, + prefixCodeRange{17, 3}, + prefixCodeRange{25, 3}, + prefixCodeRange{33, 3}, + prefixCodeRange{41, 3}, + prefixCodeRange{49, 4}, + prefixCodeRange{65, 4}, + prefixCodeRange{81, 4}, + prefixCodeRange{97, 4}, + prefixCodeRange{113, 5}, + prefixCodeRange{145, 5}, + prefixCodeRange{177, 5}, + prefixCodeRange{209, 5}, + prefixCodeRange{241, 6}, + prefixCodeRange{305, 6}, + prefixCodeRange{369, 7}, + prefixCodeRange{497, 8}, + prefixCodeRange{753, 9}, + prefixCodeRange{1265, 10}, + prefixCodeRange{2289, 11}, + prefixCodeRange{4337, 12}, + prefixCodeRange{8433, 13}, + prefixCodeRange{16625, 24}, +} + +func blockLengthPrefixCode(len uint32) uint32 { + var code uint32 + if len >= 177 { + if len >= 753 { + code = 20 + } else { + code = 14 + } + } else if len >= 41 { + code = 7 + } else { + code = 0 + } + for code < (numBlockLenSymbols-1) && len >= kBlockLengthPrefixCode[code+1].offset { + code++ + } + return code +} + +func getBlockLengthPrefixCode(len uint32, code *uint, n_extra *uint32, extra *uint32) { + *code = uint(blockLengthPrefixCode(uint32(len))) + *n_extra = kBlockLengthPrefixCode[*code].nbits + *extra = len - kBlockLengthPrefixCode[*code].offset +} + +type blockTypeCodeCalculator struct { + last_type uint + second_last_type uint +} + +func initBlockTypeCodeCalculator(self *blockTypeCodeCalculator) { + self.last_type = 1 + self.second_last_type = 0 +} + +func nextBlockTypeCode(calculator *blockTypeCodeCalculator, type_ byte) uint { + var type_code uint + if uint(type_) == calculator.last_type+1 { + type_code = 1 + } else if uint(type_) == calculator.second_last_type { + type_code = 0 + } else { + type_code = uint(type_) + 2 + } + calculator.second_last_type = calculator.last_type + calculator.last_type = uint(type_) + return type_code +} + +/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3) + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +func encodeMlen(length uint, bits *uint64, numbits *uint, nibblesbits *uint64) { + var lg uint + if length == 1 { + lg = 1 + } else { + lg = uint(log2FloorNonZero(uint(uint32(length-1)))) + 1 + } + var tmp uint + if lg < 16 { + tmp = 16 + } else { + tmp = (lg + 3) + } + var mnibbles uint = tmp / 4 + assert(length > 0) + assert(length <= 1<<24) + assert(lg <= 24) + *nibblesbits = uint64(mnibbles) - 4 + *numbits = mnibbles * 4 + *bits = uint64(length) - 1 +} + +func storeCommandExtra(cmd *command, storage_ix *uint, storage []byte) { + var copylen_code uint32 = commandCopyLenCode(cmd) + var inscode uint16 = getInsertLengthCode(uint(cmd.insert_len_)) + var copycode uint16 = getCopyLengthCode(uint(copylen_code)) + var insnumextra uint32 = getInsertExtra(inscode) + var insextraval uint64 = uint64(cmd.insert_len_) - uint64(getInsertBase(inscode)) + var copyextraval uint64 = uint64(copylen_code) - uint64(getCopyBase(copycode)) + var bits uint64 = copyextraval< 0 + REQUIRES: length <= (1 << 24) */ +func storeCompressedMetaBlockHeader(is_final_block bool, length uint, storage_ix *uint, storage []byte) { + var lenbits uint64 + var nlenbits uint + var nibblesbits uint64 + var is_final uint64 + if is_final_block { + is_final = 1 + } else { + is_final = 0 + } + + /* Write ISLAST bit. */ + writeBits(1, is_final, storage_ix, storage) + + /* Write ISEMPTY bit. */ + if is_final_block { + writeBits(1, 0, storage_ix, storage) + } + + encodeMlen(length, &lenbits, &nlenbits, &nibblesbits) + writeBits(2, nibblesbits, storage_ix, storage) + writeBits(nlenbits, lenbits, storage_ix, storage) + + if !is_final_block { + /* Write ISUNCOMPRESSED bit. */ + writeBits(1, 0, storage_ix, storage) + } +} + +/* Stores the uncompressed meta-block header. + REQUIRES: length > 0 + REQUIRES: length <= (1 << 24) */ +func storeUncompressedMetaBlockHeader(length uint, storage_ix *uint, storage []byte) { + var lenbits uint64 + var nlenbits uint + var nibblesbits uint64 + + /* Write ISLAST bit. + Uncompressed block cannot be the last one, so set to 0. */ + writeBits(1, 0, storage_ix, storage) + + encodeMlen(length, &lenbits, &nlenbits, &nibblesbits) + writeBits(2, nibblesbits, storage_ix, storage) + writeBits(nlenbits, lenbits, storage_ix, storage) + + /* Write ISUNCOMPRESSED bit. */ + writeBits(1, 1, storage_ix, storage) +} + +var storeHuffmanTreeOfHuffmanTreeToBitMask_kStorageOrder = [codeLengthCodes]byte{1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15} + +var storeHuffmanTreeOfHuffmanTreeToBitMask_kHuffmanBitLengthHuffmanCodeSymbols = [6]byte{0, 7, 3, 2, 1, 15} +var storeHuffmanTreeOfHuffmanTreeToBitMask_kHuffmanBitLengthHuffmanCodeBitLengths = [6]byte{2, 4, 3, 2, 2, 4} + +func storeHuffmanTreeOfHuffmanTreeToBitMask(num_codes int, code_length_bitdepth []byte, storage_ix *uint, storage []byte) { + var skip_some uint = 0 + var codes_to_store uint = codeLengthCodes + /* The bit lengths of the Huffman code over the code length alphabet + are compressed with the following static Huffman code: + Symbol Code + ------ ---- + 0 00 + 1 1110 + 2 110 + 3 01 + 4 10 + 5 1111 */ + + /* Throw away trailing zeros: */ + if num_codes > 1 { + for ; codes_to_store > 0; codes_to_store-- { + if code_length_bitdepth[storeHuffmanTreeOfHuffmanTreeToBitMask_kStorageOrder[codes_to_store-1]] != 0 { + break + } + } + } + + if code_length_bitdepth[storeHuffmanTreeOfHuffmanTreeToBitMask_kStorageOrder[0]] == 0 && code_length_bitdepth[storeHuffmanTreeOfHuffmanTreeToBitMask_kStorageOrder[1]] == 0 { + skip_some = 2 /* skips two. */ + if code_length_bitdepth[storeHuffmanTreeOfHuffmanTreeToBitMask_kStorageOrder[2]] == 0 { + skip_some = 3 /* skips three. */ + } + } + + writeBits(2, uint64(skip_some), storage_ix, storage) + { + var i uint + for i = skip_some; i < codes_to_store; i++ { + var l uint = uint(code_length_bitdepth[storeHuffmanTreeOfHuffmanTreeToBitMask_kStorageOrder[i]]) + writeBits(uint(storeHuffmanTreeOfHuffmanTreeToBitMask_kHuffmanBitLengthHuffmanCodeBitLengths[l]), uint64(storeHuffmanTreeOfHuffmanTreeToBitMask_kHuffmanBitLengthHuffmanCodeSymbols[l]), storage_ix, storage) + } + } +} + +func storeHuffmanTreeToBitMask(huffman_tree_size uint, huffman_tree []byte, huffman_tree_extra_bits []byte, code_length_bitdepth []byte, code_length_bitdepth_symbols []uint16, storage_ix *uint, storage []byte) { + var i uint + for i = 0; i < huffman_tree_size; i++ { + var ix uint = uint(huffman_tree[i]) + writeBits(uint(code_length_bitdepth[ix]), uint64(code_length_bitdepth_symbols[ix]), storage_ix, storage) + + /* Extra bits */ + switch ix { + case repeatPreviousCodeLength: + writeBits(2, uint64(huffman_tree_extra_bits[i]), storage_ix, storage) + + case repeatZeroCodeLength: + writeBits(3, uint64(huffman_tree_extra_bits[i]), storage_ix, storage) + } + } +} + +func storeSimpleHuffmanTree(depths []byte, symbols []uint, num_symbols uint, max_bits uint, storage_ix *uint, storage []byte) { + /* value of 1 indicates a simple Huffman code */ + writeBits(2, 1, storage_ix, storage) + + writeBits(2, uint64(num_symbols)-1, storage_ix, storage) /* NSYM - 1 */ + { + /* Sort */ + var i uint + for i = 0; i < num_symbols; i++ { + var j uint + for j = i + 1; j < num_symbols; j++ { + if depths[symbols[j]] < depths[symbols[i]] { + var tmp uint = symbols[j] + symbols[j] = symbols[i] + symbols[i] = tmp + } + } + } + } + + if num_symbols == 2 { + writeBits(max_bits, uint64(symbols[0]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[1]), storage_ix, storage) + } else if num_symbols == 3 { + writeBits(max_bits, uint64(symbols[0]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[1]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[2]), storage_ix, storage) + } else { + writeBits(max_bits, uint64(symbols[0]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[1]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[2]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[3]), storage_ix, storage) + + /* tree-select */ + var tmp int + if depths[symbols[0]] == 1 { + tmp = 1 + } else { + tmp = 0 + } + writeBits(1, uint64(tmp), storage_ix, storage) + } +} + +/* num = alphabet size + depths = symbol depths */ +func storeHuffmanTree(depths []byte, num uint, tree []huffmanTree, storage_ix *uint, storage []byte) { + var huffman_tree [numCommandSymbols]byte + var huffman_tree_extra_bits [numCommandSymbols]byte + var huffman_tree_size uint = 0 + var code_length_bitdepth = [codeLengthCodes]byte{0} + var code_length_bitdepth_symbols [codeLengthCodes]uint16 + var huffman_tree_histogram = [codeLengthCodes]uint32{0} + var i uint + var num_codes int = 0 + /* Write the Huffman tree into the brotli-representation. + The command alphabet is the largest, so this allocation will fit all + alphabets. */ + + var code uint = 0 + + assert(num <= numCommandSymbols) + + writeHuffmanTree(depths, num, &huffman_tree_size, huffman_tree[:], huffman_tree_extra_bits[:]) + + /* Calculate the statistics of the Huffman tree in brotli-representation. */ + for i = 0; i < huffman_tree_size; i++ { + huffman_tree_histogram[huffman_tree[i]]++ + } + + for i = 0; i < codeLengthCodes; i++ { + if huffman_tree_histogram[i] != 0 { + if num_codes == 0 { + code = i + num_codes = 1 + } else if num_codes == 1 { + num_codes = 2 + break + } + } + } + + /* Calculate another Huffman tree to use for compressing both the + earlier Huffman tree with. */ + createHuffmanTree(huffman_tree_histogram[:], codeLengthCodes, 5, tree, code_length_bitdepth[:]) + + convertBitDepthsToSymbols(code_length_bitdepth[:], codeLengthCodes, code_length_bitdepth_symbols[:]) + + /* Now, we have all the data, let's start storing it */ + storeHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth[:], storage_ix, storage) + + if num_codes == 1 { + code_length_bitdepth[code] = 0 + } + + /* Store the real Huffman tree now. */ + storeHuffmanTreeToBitMask(huffman_tree_size, huffman_tree[:], huffman_tree_extra_bits[:], code_length_bitdepth[:], code_length_bitdepth_symbols[:], storage_ix, storage) +} + +/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and + bits[0:length] and stores the encoded tree to the bit stream. */ +func buildAndStoreHuffmanTree(histogram []uint32, histogram_length uint, alphabet_size uint, tree []huffmanTree, depth []byte, bits []uint16, storage_ix *uint, storage []byte) { + var count uint = 0 + var s4 = [4]uint{0} + var i uint + var max_bits uint = 0 + for i = 0; i < histogram_length; i++ { + if histogram[i] != 0 { + if count < 4 { + s4[count] = i + } else if count > 4 { + break + } + + count++ + } + } + { + var max_bits_counter uint = alphabet_size - 1 + for max_bits_counter != 0 { + max_bits_counter >>= 1 + max_bits++ + } + } + + if count <= 1 { + writeBits(4, 1, storage_ix, storage) + writeBits(max_bits, uint64(s4[0]), storage_ix, storage) + depth[s4[0]] = 0 + bits[s4[0]] = 0 + return + } + + for i := 0; i < int(histogram_length); i++ { + depth[i] = 0 + } + createHuffmanTree(histogram, histogram_length, 15, tree, depth) + convertBitDepthsToSymbols(depth, histogram_length, bits) + + if count <= 4 { + storeSimpleHuffmanTree(depth, s4[:], count, max_bits, storage_ix, storage) + } else { + storeHuffmanTree(depth, histogram_length, tree, storage_ix, storage) + } +} + +func sortHuffmanTree1(v0 huffmanTree, v1 huffmanTree) bool { + return v0.total_count_ < v1.total_count_ +} + +var huffmanTreePool sync.Pool + +func buildAndStoreHuffmanTreeFast(histogram []uint32, histogram_total uint, max_bits uint, depth []byte, bits []uint16, storage_ix *uint, storage []byte) { + var count uint = 0 + var symbols = [4]uint{0} + var length uint = 0 + var total uint = histogram_total + for total != 0 { + if histogram[length] != 0 { + if count < 4 { + symbols[count] = length + } + + count++ + total -= uint(histogram[length]) + } + + length++ + } + + if count <= 1 { + writeBits(4, 1, storage_ix, storage) + writeBits(max_bits, uint64(symbols[0]), storage_ix, storage) + depth[symbols[0]] = 0 + bits[symbols[0]] = 0 + return + } + + for i := 0; i < int(length); i++ { + depth[i] = 0 + } + { + var max_tree_size uint = 2*length + 1 + tree, _ := huffmanTreePool.Get().(*[]huffmanTree) + if tree == nil || cap(*tree) < int(max_tree_size) { + tmp := make([]huffmanTree, max_tree_size) + tree = &tmp + } else { + *tree = (*tree)[:max_tree_size] + } + var count_limit uint32 + for count_limit = 1; ; count_limit *= 2 { + var node int = 0 + var l uint + for l = length; l != 0; { + l-- + if histogram[l] != 0 { + if histogram[l] >= count_limit { + initHuffmanTree(&(*tree)[node:][0], histogram[l], -1, int16(l)) + } else { + initHuffmanTree(&(*tree)[node:][0], count_limit, -1, int16(l)) + } + + node++ + } + } + { + var n int = node + /* Points to the next leaf node. */ /* Points to the next non-leaf node. */ + var sentinel huffmanTree + var i int = 0 + var j int = n + 1 + var k int + + sortHuffmanTreeItems(*tree, uint(n), huffmanTreeComparator(sortHuffmanTree1)) + + /* The nodes are: + [0, n): the sorted leaf nodes that we start with. + [n]: we add a sentinel here. + [n + 1, 2n): new parent nodes are added here, starting from + (n+1). These are naturally in ascending order. + [2n]: we add a sentinel at the end as well. + There will be (2n+1) elements at the end. */ + initHuffmanTree(&sentinel, math.MaxUint32, -1, -1) + + (*tree)[node] = sentinel + node++ + (*tree)[node] = sentinel + node++ + + for k = n - 1; k > 0; k-- { + var left int + var right int + if (*tree)[i].total_count_ <= (*tree)[j].total_count_ { + left = i + i++ + } else { + left = j + j++ + } + + if (*tree)[i].total_count_ <= (*tree)[j].total_count_ { + right = i + i++ + } else { + right = j + j++ + } + + /* The sentinel node becomes the parent node. */ + (*tree)[node-1].total_count_ = (*tree)[left].total_count_ + (*tree)[right].total_count_ + + (*tree)[node-1].index_left_ = int16(left) + (*tree)[node-1].index_right_or_value_ = int16(right) + + /* Add back the last sentinel node. */ + (*tree)[node] = sentinel + node++ + } + + if setDepth(2*n-1, *tree, depth, 14) { + /* We need to pack the Huffman tree in 14 bits. If this was not + successful, add fake entities to the lowest values and retry. */ + break + } + } + } + + huffmanTreePool.Put(tree) + } + + convertBitDepthsToSymbols(depth, length, bits) + if count <= 4 { + var i uint + + /* value of 1 indicates a simple Huffman code */ + writeBits(2, 1, storage_ix, storage) + + writeBits(2, uint64(count)-1, storage_ix, storage) /* NSYM - 1 */ + + /* Sort */ + for i = 0; i < count; i++ { + var j uint + for j = i + 1; j < count; j++ { + if depth[symbols[j]] < depth[symbols[i]] { + var tmp uint = symbols[j] + symbols[j] = symbols[i] + symbols[i] = tmp + } + } + } + + if count == 2 { + writeBits(max_bits, uint64(symbols[0]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[1]), storage_ix, storage) + } else if count == 3 { + writeBits(max_bits, uint64(symbols[0]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[1]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[2]), storage_ix, storage) + } else { + writeBits(max_bits, uint64(symbols[0]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[1]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[2]), storage_ix, storage) + writeBits(max_bits, uint64(symbols[3]), storage_ix, storage) + + /* tree-select */ + var tmp int + if depth[symbols[0]] == 1 { + tmp = 1 + } else { + tmp = 0 + } + writeBits(1, uint64(tmp), storage_ix, storage) + } + } else { + var previous_value byte = 8 + var i uint + + /* Complex Huffman Tree */ + storeStaticCodeLengthCode(storage_ix, storage) + + /* Actual RLE coding. */ + for i = 0; i < length; { + var value byte = depth[i] + var reps uint = 1 + var k uint + for k = i + 1; k < length && depth[k] == value; k++ { + reps++ + } + + i += reps + if value == 0 { + writeBits(uint(kZeroRepsDepth[reps]), kZeroRepsBits[reps], storage_ix, storage) + } else { + if previous_value != value { + writeBits(uint(kCodeLengthDepth[value]), uint64(kCodeLengthBits[value]), storage_ix, storage) + reps-- + } + + if reps < 3 { + for reps != 0 { + reps-- + writeBits(uint(kCodeLengthDepth[value]), uint64(kCodeLengthBits[value]), storage_ix, storage) + } + } else { + reps -= 3 + writeBits(uint(kNonZeroRepsDepth[reps]), kNonZeroRepsBits[reps], storage_ix, storage) + } + + previous_value = value + } + } + } +} + +func indexOf(v []byte, v_size uint, value byte) uint { + var i uint = 0 + for ; i < v_size; i++ { + if v[i] == value { + return i + } + } + + return i +} + +func moveToFront(v []byte, index uint) { + var value byte = v[index] + var i uint + for i = index; i != 0; i-- { + v[i] = v[i-1] + } + + v[0] = value +} + +func moveToFrontTransform(v_in []uint32, v_size uint, v_out []uint32) { + var i uint + var mtf [256]byte + var max_value uint32 + if v_size == 0 { + return + } + + max_value = v_in[0] + for i = 1; i < v_size; i++ { + if v_in[i] > max_value { + max_value = v_in[i] + } + } + + assert(max_value < 256) + for i = 0; uint32(i) <= max_value; i++ { + mtf[i] = byte(i) + } + { + var mtf_size uint = uint(max_value + 1) + for i = 0; i < v_size; i++ { + var index uint = indexOf(mtf[:], mtf_size, byte(v_in[i])) + assert(index < mtf_size) + v_out[i] = uint32(index) + moveToFront(mtf[:], index) + } + } +} + +/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of + the run length plus extra bits (lower 9 bits is the prefix code and the rest + are the extra bits). Non-zero values in v[] are shifted by + *max_length_prefix. Will not create prefix codes bigger than the initial + value of *max_run_length_prefix. The prefix code of run length L is simply + Log2Floor(L) and the number of extra bits is the same as the prefix code. */ +func runLengthCodeZeros(in_size uint, v []uint32, out_size *uint, max_run_length_prefix *uint32) { + var max_reps uint32 = 0 + var i uint + var max_prefix uint32 + for i = 0; i < in_size; { + var reps uint32 = 0 + for ; i < in_size && v[i] != 0; i++ { + } + for ; i < in_size && v[i] == 0; i++ { + reps++ + } + + max_reps = brotli_max_uint32_t(reps, max_reps) + } + + if max_reps > 0 { + max_prefix = log2FloorNonZero(uint(max_reps)) + } else { + max_prefix = 0 + } + max_prefix = brotli_min_uint32_t(max_prefix, *max_run_length_prefix) + *max_run_length_prefix = max_prefix + *out_size = 0 + for i = 0; i < in_size; { + assert(*out_size <= i) + if v[i] != 0 { + v[*out_size] = v[i] + *max_run_length_prefix + i++ + (*out_size)++ + } else { + var reps uint32 = 1 + var k uint + for k = i + 1; k < in_size && v[k] == 0; k++ { + reps++ + } + + i += uint(reps) + for reps != 0 { + if reps < 2< 0) + writeSingleBit(use_rle, storage_ix, storage) + if use_rle { + writeBits(4, uint64(max_run_length_prefix)-1, storage_ix, storage) + } + } + + buildAndStoreHuffmanTree(histogram[:], uint(uint32(num_clusters)+max_run_length_prefix), uint(uint32(num_clusters)+max_run_length_prefix), tree, depths[:], bits[:], storage_ix, storage) + for i = 0; i < num_rle_symbols; i++ { + var rle_symbol uint32 = rle_symbols[i] & encodeContextMap_kSymbolMask + var extra_bits_val uint32 = rle_symbols[i] >> symbolBits + writeBits(uint(depths[rle_symbol]), uint64(bits[rle_symbol]), storage_ix, storage) + if rle_symbol > 0 && rle_symbol <= max_run_length_prefix { + writeBits(uint(rle_symbol), uint64(extra_bits_val), storage_ix, storage) + } + } + + writeBits(1, 1, storage_ix, storage) /* use move-to-front */ + rle_symbols = nil +} + +/* Stores the block switch command with index block_ix to the bit stream. */ +func storeBlockSwitch(code *blockSplitCode, block_len uint32, block_type byte, is_first_block bool, storage_ix *uint, storage []byte) { + var typecode uint = nextBlockTypeCode(&code.type_code_calculator, block_type) + var lencode uint + var len_nextra uint32 + var len_extra uint32 + if !is_first_block { + writeBits(uint(code.type_depths[typecode]), uint64(code.type_bits[typecode]), storage_ix, storage) + } + + getBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra) + + writeBits(uint(code.length_depths[lencode]), uint64(code.length_bits[lencode]), storage_ix, storage) + writeBits(uint(len_nextra), uint64(len_extra), storage_ix, storage) +} + +/* Builds a BlockSplitCode data structure from the block split given by the + vector of block types and block lengths and stores it to the bit stream. */ +func buildAndStoreBlockSplitCode(types []byte, lengths []uint32, num_blocks uint, num_types uint, tree []huffmanTree, code *blockSplitCode, storage_ix *uint, storage []byte) { + var type_histo [maxBlockTypeSymbols]uint32 + var length_histo [numBlockLenSymbols]uint32 + var i uint + var type_code_calculator blockTypeCodeCalculator + for i := 0; i < int(num_types+2); i++ { + type_histo[i] = 0 + } + length_histo = [numBlockLenSymbols]uint32{} + initBlockTypeCodeCalculator(&type_code_calculator) + for i = 0; i < num_blocks; i++ { + var type_code uint = nextBlockTypeCode(&type_code_calculator, types[i]) + if i != 0 { + type_histo[type_code]++ + } + length_histo[blockLengthPrefixCode(lengths[i])]++ + } + + storeVarLenUint8(num_types-1, storage_ix, storage) + if num_types > 1 { /* TODO: else? could StoreBlockSwitch occur? */ + buildAndStoreHuffmanTree(type_histo[0:], num_types+2, num_types+2, tree, code.type_depths[0:], code.type_bits[0:], storage_ix, storage) + buildAndStoreHuffmanTree(length_histo[0:], numBlockLenSymbols, numBlockLenSymbols, tree, code.length_depths[0:], code.length_bits[0:], storage_ix, storage) + storeBlockSwitch(code, lengths[0], types[0], true, storage_ix, storage) + } +} + +/* Stores a context map where the histogram type is always the block type. */ +func storeTrivialContextMap(num_types uint, context_bits uint, tree []huffmanTree, storage_ix *uint, storage []byte) { + storeVarLenUint8(num_types-1, storage_ix, storage) + if num_types > 1 { + var repeat_code uint = context_bits - 1 + var repeat_bits uint = (1 << repeat_code) - 1 + var alphabet_size uint = num_types + repeat_code + var histogram [maxContextMapSymbols]uint32 + var depths [maxContextMapSymbols]byte + var bits [maxContextMapSymbols]uint16 + var i uint + for i := 0; i < int(alphabet_size); i++ { + histogram[i] = 0 + } + + /* Write RLEMAX. */ + writeBits(1, 1, storage_ix, storage) + + writeBits(4, uint64(repeat_code)-1, storage_ix, storage) + histogram[repeat_code] = uint32(num_types) + histogram[0] = 1 + for i = context_bits; i < alphabet_size; i++ { + histogram[i] = 1 + } + + buildAndStoreHuffmanTree(histogram[:], alphabet_size, alphabet_size, tree, depths[:], bits[:], storage_ix, storage) + for i = 0; i < num_types; i++ { + var tmp uint + if i == 0 { + tmp = 0 + } else { + tmp = i + context_bits - 1 + } + var code uint = tmp + writeBits(uint(depths[code]), uint64(bits[code]), storage_ix, storage) + writeBits(uint(depths[repeat_code]), uint64(bits[repeat_code]), storage_ix, storage) + writeBits(repeat_code, uint64(repeat_bits), storage_ix, storage) + } + + /* Write IMTF (inverse-move-to-front) bit. */ + writeBits(1, 1, storage_ix, storage) + } +} + +/* Manages the encoding of one block category (literal, command or distance). */ +type blockEncoder struct { + histogram_length_ uint + num_block_types_ uint + block_types_ []byte + block_lengths_ []uint32 + num_blocks_ uint + block_split_code_ blockSplitCode + block_ix_ uint + block_len_ uint + entropy_ix_ uint + depths_ []byte + bits_ []uint16 +} + +var blockEncoderPool sync.Pool + +func getBlockEncoder(histogram_length uint, num_block_types uint, block_types []byte, block_lengths []uint32, num_blocks uint) *blockEncoder { + self, _ := blockEncoderPool.Get().(*blockEncoder) + + if self != nil { + self.block_ix_ = 0 + self.entropy_ix_ = 0 + self.depths_ = self.depths_[:0] + self.bits_ = self.bits_[:0] + } else { + self = &blockEncoder{} + } + + self.histogram_length_ = histogram_length + self.num_block_types_ = num_block_types + self.block_types_ = block_types + self.block_lengths_ = block_lengths + self.num_blocks_ = num_blocks + initBlockTypeCodeCalculator(&self.block_split_code_.type_code_calculator) + if num_blocks == 0 { + self.block_len_ = 0 + } else { + self.block_len_ = uint(block_lengths[0]) + } + + return self +} + +func cleanupBlockEncoder(self *blockEncoder) { + blockEncoderPool.Put(self) +} + +/* Creates entropy codes of block lengths and block types and stores them + to the bit stream. */ +func buildAndStoreBlockSwitchEntropyCodes(self *blockEncoder, tree []huffmanTree, storage_ix *uint, storage []byte) { + buildAndStoreBlockSplitCode(self.block_types_, self.block_lengths_, self.num_blocks_, self.num_block_types_, tree, &self.block_split_code_, storage_ix, storage) +} + +/* Stores the next symbol with the entropy code of the current block type. + Updates the block type and block length at block boundaries. */ +func storeSymbol(self *blockEncoder, symbol uint, storage_ix *uint, storage []byte) { + if self.block_len_ == 0 { + self.block_ix_++ + var block_ix uint = self.block_ix_ + var block_len uint32 = self.block_lengths_[block_ix] + var block_type byte = self.block_types_[block_ix] + self.block_len_ = uint(block_len) + self.entropy_ix_ = uint(block_type) * self.histogram_length_ + storeBlockSwitch(&self.block_split_code_, block_len, block_type, false, storage_ix, storage) + } + + self.block_len_-- + { + var ix uint = self.entropy_ix_ + symbol + writeBits(uint(self.depths_[ix]), uint64(self.bits_[ix]), storage_ix, storage) + } +} + +/* Stores the next symbol with the entropy code of the current block type and + context value. + Updates the block type and block length at block boundaries. */ +func storeSymbolWithContext(self *blockEncoder, symbol uint, context uint, context_map []uint32, storage_ix *uint, storage []byte, context_bits uint) { + if self.block_len_ == 0 { + self.block_ix_++ + var block_ix uint = self.block_ix_ + var block_len uint32 = self.block_lengths_[block_ix] + var block_type byte = self.block_types_[block_ix] + self.block_len_ = uint(block_len) + self.entropy_ix_ = uint(block_type) << context_bits + storeBlockSwitch(&self.block_split_code_, block_len, block_type, false, storage_ix, storage) + } + + self.block_len_-- + { + var histo_ix uint = uint(context_map[self.entropy_ix_+context]) + var ix uint = histo_ix*self.histogram_length_ + symbol + writeBits(uint(self.depths_[ix]), uint64(self.bits_[ix]), storage_ix, storage) + } +} + +func buildAndStoreEntropyCodesLiteral(self *blockEncoder, histograms []histogramLiteral, histograms_size uint, alphabet_size uint, tree []huffmanTree, storage_ix *uint, storage []byte) { + var table_size uint = histograms_size * self.histogram_length_ + if cap(self.depths_) < int(table_size) { + self.depths_ = make([]byte, table_size) + } else { + self.depths_ = self.depths_[:table_size] + } + if cap(self.bits_) < int(table_size) { + self.bits_ = make([]uint16, table_size) + } else { + self.bits_ = self.bits_[:table_size] + } + { + var i uint + for i = 0; i < histograms_size; i++ { + var ix uint = i * self.histogram_length_ + buildAndStoreHuffmanTree(histograms[i].data_[0:], self.histogram_length_, alphabet_size, tree, self.depths_[ix:], self.bits_[ix:], storage_ix, storage) + } + } +} + +func buildAndStoreEntropyCodesCommand(self *blockEncoder, histograms []histogramCommand, histograms_size uint, alphabet_size uint, tree []huffmanTree, storage_ix *uint, storage []byte) { + var table_size uint = histograms_size * self.histogram_length_ + if cap(self.depths_) < int(table_size) { + self.depths_ = make([]byte, table_size) + } else { + self.depths_ = self.depths_[:table_size] + } + if cap(self.bits_) < int(table_size) { + self.bits_ = make([]uint16, table_size) + } else { + self.bits_ = self.bits_[:table_size] + } + { + var i uint + for i = 0; i < histograms_size; i++ { + var ix uint = i * self.histogram_length_ + buildAndStoreHuffmanTree(histograms[i].data_[0:], self.histogram_length_, alphabet_size, tree, self.depths_[ix:], self.bits_[ix:], storage_ix, storage) + } + } +} + +func buildAndStoreEntropyCodesDistance(self *blockEncoder, histograms []histogramDistance, histograms_size uint, alphabet_size uint, tree []huffmanTree, storage_ix *uint, storage []byte) { + var table_size uint = histograms_size * self.histogram_length_ + if cap(self.depths_) < int(table_size) { + self.depths_ = make([]byte, table_size) + } else { + self.depths_ = self.depths_[:table_size] + } + if cap(self.bits_) < int(table_size) { + self.bits_ = make([]uint16, table_size) + } else { + self.bits_ = self.bits_[:table_size] + } + { + var i uint + for i = 0; i < histograms_size; i++ { + var ix uint = i * self.histogram_length_ + buildAndStoreHuffmanTree(histograms[i].data_[0:], self.histogram_length_, alphabet_size, tree, self.depths_[ix:], self.bits_[ix:], storage_ix, storage) + } + } +} + +func jumpToByteBoundary(storage_ix *uint, storage []byte) { + *storage_ix = (*storage_ix + 7) &^ 7 + storage[*storage_ix>>3] = 0 +} + +func storeMetaBlock(input []byte, start_pos uint, length uint, mask uint, prev_byte byte, prev_byte2 byte, is_last bool, params *encoderParams, literal_context_mode int, commands []command, mb *metaBlockSplit, storage_ix *uint, storage []byte) { + var pos uint = start_pos + var i uint + var num_distance_symbols uint32 = params.dist.alphabet_size + var num_effective_distance_symbols uint32 = num_distance_symbols + var tree []huffmanTree + var literal_context_lut contextLUT = getContextLUT(literal_context_mode) + var dist *distanceParams = ¶ms.dist + if params.large_window && num_effective_distance_symbols > numHistogramDistanceSymbols { + num_effective_distance_symbols = numHistogramDistanceSymbols + } + + storeCompressedMetaBlockHeader(is_last, length, storage_ix, storage) + + tree = make([]huffmanTree, maxHuffmanTreeSize) + literal_enc := getBlockEncoder(numLiteralSymbols, mb.literal_split.num_types, mb.literal_split.types, mb.literal_split.lengths, mb.literal_split.num_blocks) + command_enc := getBlockEncoder(numCommandSymbols, mb.command_split.num_types, mb.command_split.types, mb.command_split.lengths, mb.command_split.num_blocks) + distance_enc := getBlockEncoder(uint(num_effective_distance_symbols), mb.distance_split.num_types, mb.distance_split.types, mb.distance_split.lengths, mb.distance_split.num_blocks) + + buildAndStoreBlockSwitchEntropyCodes(literal_enc, tree, storage_ix, storage) + buildAndStoreBlockSwitchEntropyCodes(command_enc, tree, storage_ix, storage) + buildAndStoreBlockSwitchEntropyCodes(distance_enc, tree, storage_ix, storage) + + writeBits(2, uint64(dist.distance_postfix_bits), storage_ix, storage) + writeBits(4, uint64(dist.num_direct_distance_codes)>>dist.distance_postfix_bits, storage_ix, storage) + for i = 0; i < mb.literal_split.num_types; i++ { + writeBits(2, uint64(literal_context_mode), storage_ix, storage) + } + + if mb.literal_context_map_size == 0 { + storeTrivialContextMap(mb.literal_histograms_size, literalContextBits, tree, storage_ix, storage) + } else { + encodeContextMap(mb.literal_context_map, mb.literal_context_map_size, mb.literal_histograms_size, tree, storage_ix, storage) + } + + if mb.distance_context_map_size == 0 { + storeTrivialContextMap(mb.distance_histograms_size, distanceContextBits, tree, storage_ix, storage) + } else { + encodeContextMap(mb.distance_context_map, mb.distance_context_map_size, mb.distance_histograms_size, tree, storage_ix, storage) + } + + buildAndStoreEntropyCodesLiteral(literal_enc, mb.literal_histograms, mb.literal_histograms_size, numLiteralSymbols, tree, storage_ix, storage) + buildAndStoreEntropyCodesCommand(command_enc, mb.command_histograms, mb.command_histograms_size, numCommandSymbols, tree, storage_ix, storage) + buildAndStoreEntropyCodesDistance(distance_enc, mb.distance_histograms, mb.distance_histograms_size, uint(num_distance_symbols), tree, storage_ix, storage) + tree = nil + + for _, cmd := range commands { + var cmd_code uint = uint(cmd.cmd_prefix_) + storeSymbol(command_enc, cmd_code, storage_ix, storage) + storeCommandExtra(&cmd, storage_ix, storage) + if mb.literal_context_map_size == 0 { + var j uint + for j = uint(cmd.insert_len_); j != 0; j-- { + storeSymbol(literal_enc, uint(input[pos&mask]), storage_ix, storage) + pos++ + } + } else { + var j uint + for j = uint(cmd.insert_len_); j != 0; j-- { + var context uint = uint(getContext(prev_byte, prev_byte2, literal_context_lut)) + var literal byte = input[pos&mask] + storeSymbolWithContext(literal_enc, uint(literal), context, mb.literal_context_map, storage_ix, storage, literalContextBits) + prev_byte2 = prev_byte + prev_byte = literal + pos++ + } + } + + pos += uint(commandCopyLen(&cmd)) + if commandCopyLen(&cmd) != 0 { + prev_byte2 = input[(pos-2)&mask] + prev_byte = input[(pos-1)&mask] + if cmd.cmd_prefix_ >= 128 { + var dist_code uint = uint(cmd.dist_prefix_) & 0x3FF + var distnumextra uint32 = uint32(cmd.dist_prefix_) >> 10 + var distextra uint64 = uint64(cmd.dist_extra_) + if mb.distance_context_map_size == 0 { + storeSymbol(distance_enc, dist_code, storage_ix, storage) + } else { + var context uint = uint(commandDistanceContext(&cmd)) + storeSymbolWithContext(distance_enc, dist_code, context, mb.distance_context_map, storage_ix, storage, distanceContextBits) + } + + writeBits(uint(distnumextra), distextra, storage_ix, storage) + } + } + } + + cleanupBlockEncoder(distance_enc) + cleanupBlockEncoder(command_enc) + cleanupBlockEncoder(literal_enc) + if is_last { + jumpToByteBoundary(storage_ix, storage) + } +} + +func buildHistograms(input []byte, start_pos uint, mask uint, commands []command, lit_histo *histogramLiteral, cmd_histo *histogramCommand, dist_histo *histogramDistance) { + var pos uint = start_pos + for _, cmd := range commands { + var j uint + histogramAddCommand(cmd_histo, uint(cmd.cmd_prefix_)) + for j = uint(cmd.insert_len_); j != 0; j-- { + histogramAddLiteral(lit_histo, uint(input[pos&mask])) + pos++ + } + + pos += uint(commandCopyLen(&cmd)) + if commandCopyLen(&cmd) != 0 && cmd.cmd_prefix_ >= 128 { + histogramAddDistance(dist_histo, uint(cmd.dist_prefix_)&0x3FF) + } + } +} + +func storeDataWithHuffmanCodes(input []byte, start_pos uint, mask uint, commands []command, lit_depth []byte, lit_bits []uint16, cmd_depth []byte, cmd_bits []uint16, dist_depth []byte, dist_bits []uint16, storage_ix *uint, storage []byte) { + var pos uint = start_pos + for _, cmd := range commands { + var cmd_code uint = uint(cmd.cmd_prefix_) + var j uint + writeBits(uint(cmd_depth[cmd_code]), uint64(cmd_bits[cmd_code]), storage_ix, storage) + storeCommandExtra(&cmd, storage_ix, storage) + for j = uint(cmd.insert_len_); j != 0; j-- { + var literal byte = input[pos&mask] + writeBits(uint(lit_depth[literal]), uint64(lit_bits[literal]), storage_ix, storage) + pos++ + } + + pos += uint(commandCopyLen(&cmd)) + if commandCopyLen(&cmd) != 0 && cmd.cmd_prefix_ >= 128 { + var dist_code uint = uint(cmd.dist_prefix_) & 0x3FF + var distnumextra uint32 = uint32(cmd.dist_prefix_) >> 10 + var distextra uint32 = cmd.dist_extra_ + writeBits(uint(dist_depth[dist_code]), uint64(dist_bits[dist_code]), storage_ix, storage) + writeBits(uint(distnumextra), uint64(distextra), storage_ix, storage) + } + } +} + +func storeMetaBlockTrivial(input []byte, start_pos uint, length uint, mask uint, is_last bool, params *encoderParams, commands []command, storage_ix *uint, storage []byte) { + var lit_histo histogramLiteral + var cmd_histo histogramCommand + var dist_histo histogramDistance + var lit_depth [numLiteralSymbols]byte + var lit_bits [numLiteralSymbols]uint16 + var cmd_depth [numCommandSymbols]byte + var cmd_bits [numCommandSymbols]uint16 + var dist_depth [maxSimpleDistanceAlphabetSize]byte + var dist_bits [maxSimpleDistanceAlphabetSize]uint16 + var tree []huffmanTree + var num_distance_symbols uint32 = params.dist.alphabet_size + + storeCompressedMetaBlockHeader(is_last, length, storage_ix, storage) + + histogramClearLiteral(&lit_histo) + histogramClearCommand(&cmd_histo) + histogramClearDistance(&dist_histo) + + buildHistograms(input, start_pos, mask, commands, &lit_histo, &cmd_histo, &dist_histo) + + writeBits(13, 0, storage_ix, storage) + + tree = make([]huffmanTree, maxHuffmanTreeSize) + buildAndStoreHuffmanTree(lit_histo.data_[:], numLiteralSymbols, numLiteralSymbols, tree, lit_depth[:], lit_bits[:], storage_ix, storage) + buildAndStoreHuffmanTree(cmd_histo.data_[:], numCommandSymbols, numCommandSymbols, tree, cmd_depth[:], cmd_bits[:], storage_ix, storage) + buildAndStoreHuffmanTree(dist_histo.data_[:], maxSimpleDistanceAlphabetSize, uint(num_distance_symbols), tree, dist_depth[:], dist_bits[:], storage_ix, storage) + tree = nil + storeDataWithHuffmanCodes(input, start_pos, mask, commands, lit_depth[:], lit_bits[:], cmd_depth[:], cmd_bits[:], dist_depth[:], dist_bits[:], storage_ix, storage) + if is_last { + jumpToByteBoundary(storage_ix, storage) + } +} + +func storeMetaBlockFast(input []byte, start_pos uint, length uint, mask uint, is_last bool, params *encoderParams, commands []command, storage_ix *uint, storage []byte) { + var num_distance_symbols uint32 = params.dist.alphabet_size + var distance_alphabet_bits uint32 = log2FloorNonZero(uint(num_distance_symbols-1)) + 1 + + storeCompressedMetaBlockHeader(is_last, length, storage_ix, storage) + + writeBits(13, 0, storage_ix, storage) + + if len(commands) <= 128 { + var histogram = [numLiteralSymbols]uint32{0} + var pos uint = start_pos + var num_literals uint = 0 + var lit_depth [numLiteralSymbols]byte + var lit_bits [numLiteralSymbols]uint16 + for _, cmd := range commands { + var j uint + for j = uint(cmd.insert_len_); j != 0; j-- { + histogram[input[pos&mask]]++ + pos++ + } + + num_literals += uint(cmd.insert_len_) + pos += uint(commandCopyLen(&cmd)) + } + + buildAndStoreHuffmanTreeFast(histogram[:], num_literals, /* max_bits = */ + 8, lit_depth[:], lit_bits[:], storage_ix, storage) + + storeStaticCommandHuffmanTree(storage_ix, storage) + storeStaticDistanceHuffmanTree(storage_ix, storage) + storeDataWithHuffmanCodes(input, start_pos, mask, commands, lit_depth[:], lit_bits[:], kStaticCommandCodeDepth[:], kStaticCommandCodeBits[:], kStaticDistanceCodeDepth[:], kStaticDistanceCodeBits[:], storage_ix, storage) + } else { + var lit_histo histogramLiteral + var cmd_histo histogramCommand + var dist_histo histogramDistance + var lit_depth [numLiteralSymbols]byte + var lit_bits [numLiteralSymbols]uint16 + var cmd_depth [numCommandSymbols]byte + var cmd_bits [numCommandSymbols]uint16 + var dist_depth [maxSimpleDistanceAlphabetSize]byte + var dist_bits [maxSimpleDistanceAlphabetSize]uint16 + histogramClearLiteral(&lit_histo) + histogramClearCommand(&cmd_histo) + histogramClearDistance(&dist_histo) + buildHistograms(input, start_pos, mask, commands, &lit_histo, &cmd_histo, &dist_histo) + buildAndStoreHuffmanTreeFast(lit_histo.data_[:], lit_histo.total_count_, /* max_bits = */ + 8, lit_depth[:], lit_bits[:], storage_ix, storage) + + buildAndStoreHuffmanTreeFast(cmd_histo.data_[:], cmd_histo.total_count_, /* max_bits = */ + 10, cmd_depth[:], cmd_bits[:], storage_ix, storage) + + buildAndStoreHuffmanTreeFast(dist_histo.data_[:], dist_histo.total_count_, /* max_bits = */ + uint(distance_alphabet_bits), dist_depth[:], dist_bits[:], storage_ix, storage) + + storeDataWithHuffmanCodes(input, start_pos, mask, commands, lit_depth[:], lit_bits[:], cmd_depth[:], cmd_bits[:], dist_depth[:], dist_bits[:], storage_ix, storage) + } + + if is_last { + jumpToByteBoundary(storage_ix, storage) + } +} + +/* This is for storing uncompressed blocks (simple raw storage of + bytes-as-bytes). */ +func storeUncompressedMetaBlock(is_final_block bool, input []byte, position uint, mask uint, len uint, storage_ix *uint, storage []byte) { + var masked_pos uint = position & mask + storeUncompressedMetaBlockHeader(uint(len), storage_ix, storage) + jumpToByteBoundary(storage_ix, storage) + + if masked_pos+len > mask+1 { + var len1 uint = mask + 1 - masked_pos + copy(storage[*storage_ix>>3:], input[masked_pos:][:len1]) + *storage_ix += len1 << 3 + len -= len1 + masked_pos = 0 + } + + copy(storage[*storage_ix>>3:], input[masked_pos:][:len]) + *storage_ix += uint(len << 3) + + /* We need to clear the next 4 bytes to continue to be + compatible with BrotliWriteBits. */ + writeBitsPrepareStorage(*storage_ix, storage) + + /* Since the uncompressed block itself may not be the final block, add an + empty one after this. */ + if is_final_block { + writeBits(1, 1, storage_ix, storage) /* islast */ + writeBits(1, 1, storage_ix, storage) /* isempty */ + jumpToByteBoundary(storage_ix, storage) + } +} diff --git a/vendor/github.com/andybalholm/brotli/cluster.go b/vendor/github.com/andybalholm/brotli/cluster.go new file mode 100644 index 0000000000..df8a328224 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/cluster.go @@ -0,0 +1,30 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions for clustering similar histograms together. */ + +type histogramPair struct { + idx1 uint32 + idx2 uint32 + cost_combo float64 + cost_diff float64 +} + +func histogramPairIsLess(p1 *histogramPair, p2 *histogramPair) bool { + if p1.cost_diff != p2.cost_diff { + return p1.cost_diff > p2.cost_diff + } + + return (p1.idx2 - p1.idx1) > (p2.idx2 - p2.idx1) +} + +/* Returns entropy reduction of the context map when we combine two clusters. */ +func clusterCostDiff(size_a uint, size_b uint) float64 { + var size_c uint = size_a + size_b + return float64(size_a)*fastLog2(size_a) + float64(size_b)*fastLog2(size_b) - float64(size_c)*fastLog2(size_c) +} diff --git a/vendor/github.com/andybalholm/brotli/cluster_command.go b/vendor/github.com/andybalholm/brotli/cluster_command.go new file mode 100644 index 0000000000..45b569bb2a --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/cluster_command.go @@ -0,0 +1,164 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if + it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */ +func compareAndPushToQueueCommand(out []histogramCommand, cluster_size []uint32, idx1 uint32, idx2 uint32, max_num_pairs uint, pairs []histogramPair, num_pairs *uint) { + var is_good_pair bool = false + var p histogramPair + p.idx2 = 0 + p.idx1 = p.idx2 + p.cost_combo = 0 + p.cost_diff = p.cost_combo + if idx1 == idx2 { + return + } + + if idx2 < idx1 { + var t uint32 = idx2 + idx2 = idx1 + idx1 = t + } + + p.idx1 = idx1 + p.idx2 = idx2 + p.cost_diff = 0.5 * clusterCostDiff(uint(cluster_size[idx1]), uint(cluster_size[idx2])) + p.cost_diff -= out[idx1].bit_cost_ + p.cost_diff -= out[idx2].bit_cost_ + + if out[idx1].total_count_ == 0 { + p.cost_combo = out[idx2].bit_cost_ + is_good_pair = true + } else if out[idx2].total_count_ == 0 { + p.cost_combo = out[idx1].bit_cost_ + is_good_pair = true + } else { + var threshold float64 + if *num_pairs == 0 { + threshold = 1e99 + } else { + threshold = brotli_max_double(0.0, pairs[0].cost_diff) + } + var combo histogramCommand = out[idx1] + var cost_combo float64 + histogramAddHistogramCommand(&combo, &out[idx2]) + cost_combo = populationCostCommand(&combo) + if cost_combo < threshold-p.cost_diff { + p.cost_combo = cost_combo + is_good_pair = true + } + } + + if is_good_pair { + p.cost_diff += p.cost_combo + if *num_pairs > 0 && histogramPairIsLess(&pairs[0], &p) { + /* Replace the top of the queue if needed. */ + if *num_pairs < max_num_pairs { + pairs[*num_pairs] = pairs[0] + (*num_pairs)++ + } + + pairs[0] = p + } else if *num_pairs < max_num_pairs { + pairs[*num_pairs] = p + (*num_pairs)++ + } + } +} + +func histogramCombineCommand(out []histogramCommand, cluster_size []uint32, symbols []uint32, clusters []uint32, pairs []histogramPair, num_clusters uint, symbols_size uint, max_clusters uint, max_num_pairs uint) uint { + var cost_diff_threshold float64 = 0.0 + var min_cluster_size uint = 1 + var num_pairs uint = 0 + { + /* We maintain a vector of histogram pairs, with the property that the pair + with the maximum bit cost reduction is the first. */ + var idx1 uint + for idx1 = 0; idx1 < num_clusters; idx1++ { + var idx2 uint + for idx2 = idx1 + 1; idx2 < num_clusters; idx2++ { + compareAndPushToQueueCommand(out, cluster_size, clusters[idx1], clusters[idx2], max_num_pairs, pairs[0:], &num_pairs) + } + } + } + + for num_clusters > min_cluster_size { + var best_idx1 uint32 + var best_idx2 uint32 + var i uint + if pairs[0].cost_diff >= cost_diff_threshold { + cost_diff_threshold = 1e99 + min_cluster_size = max_clusters + continue + } + + /* Take the best pair from the top of heap. */ + best_idx1 = pairs[0].idx1 + + best_idx2 = pairs[0].idx2 + histogramAddHistogramCommand(&out[best_idx1], &out[best_idx2]) + out[best_idx1].bit_cost_ = pairs[0].cost_combo + cluster_size[best_idx1] += cluster_size[best_idx2] + for i = 0; i < symbols_size; i++ { + if symbols[i] == best_idx2 { + symbols[i] = best_idx1 + } + } + + for i = 0; i < num_clusters; i++ { + if clusters[i] == best_idx2 { + copy(clusters[i:], clusters[i+1:][:num_clusters-i-1]) + break + } + } + + num_clusters-- + { + /* Remove pairs intersecting the just combined best pair. */ + var copy_to_idx uint = 0 + for i = 0; i < num_pairs; i++ { + var p *histogramPair = &pairs[i] + if p.idx1 == best_idx1 || p.idx2 == best_idx1 || p.idx1 == best_idx2 || p.idx2 == best_idx2 { + /* Remove invalid pair from the queue. */ + continue + } + + if histogramPairIsLess(&pairs[0], p) { + /* Replace the top of the queue if needed. */ + var front histogramPair = pairs[0] + pairs[0] = *p + pairs[copy_to_idx] = front + } else { + pairs[copy_to_idx] = *p + } + + copy_to_idx++ + } + + num_pairs = copy_to_idx + } + + /* Push new pairs formed with the combined histogram to the heap. */ + for i = 0; i < num_clusters; i++ { + compareAndPushToQueueCommand(out, cluster_size, best_idx1, clusters[i], max_num_pairs, pairs[0:], &num_pairs) + } + } + + return num_clusters +} + +/* What is the bit cost of moving histogram from cur_symbol to candidate. */ +func histogramBitCostDistanceCommand(histogram *histogramCommand, candidate *histogramCommand) float64 { + if histogram.total_count_ == 0 { + return 0.0 + } else { + var tmp histogramCommand = *histogram + histogramAddHistogramCommand(&tmp, candidate) + return populationCostCommand(&tmp) - candidate.bit_cost_ + } +} diff --git a/vendor/github.com/andybalholm/brotli/cluster_distance.go b/vendor/github.com/andybalholm/brotli/cluster_distance.go new file mode 100644 index 0000000000..1aaa86e6ed --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/cluster_distance.go @@ -0,0 +1,326 @@ +package brotli + +import "math" + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if + it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */ +func compareAndPushToQueueDistance(out []histogramDistance, cluster_size []uint32, idx1 uint32, idx2 uint32, max_num_pairs uint, pairs []histogramPair, num_pairs *uint) { + var is_good_pair bool = false + var p histogramPair + p.idx2 = 0 + p.idx1 = p.idx2 + p.cost_combo = 0 + p.cost_diff = p.cost_combo + if idx1 == idx2 { + return + } + + if idx2 < idx1 { + var t uint32 = idx2 + idx2 = idx1 + idx1 = t + } + + p.idx1 = idx1 + p.idx2 = idx2 + p.cost_diff = 0.5 * clusterCostDiff(uint(cluster_size[idx1]), uint(cluster_size[idx2])) + p.cost_diff -= out[idx1].bit_cost_ + p.cost_diff -= out[idx2].bit_cost_ + + if out[idx1].total_count_ == 0 { + p.cost_combo = out[idx2].bit_cost_ + is_good_pair = true + } else if out[idx2].total_count_ == 0 { + p.cost_combo = out[idx1].bit_cost_ + is_good_pair = true + } else { + var threshold float64 + if *num_pairs == 0 { + threshold = 1e99 + } else { + threshold = brotli_max_double(0.0, pairs[0].cost_diff) + } + var combo histogramDistance = out[idx1] + var cost_combo float64 + histogramAddHistogramDistance(&combo, &out[idx2]) + cost_combo = populationCostDistance(&combo) + if cost_combo < threshold-p.cost_diff { + p.cost_combo = cost_combo + is_good_pair = true + } + } + + if is_good_pair { + p.cost_diff += p.cost_combo + if *num_pairs > 0 && histogramPairIsLess(&pairs[0], &p) { + /* Replace the top of the queue if needed. */ + if *num_pairs < max_num_pairs { + pairs[*num_pairs] = pairs[0] + (*num_pairs)++ + } + + pairs[0] = p + } else if *num_pairs < max_num_pairs { + pairs[*num_pairs] = p + (*num_pairs)++ + } + } +} + +func histogramCombineDistance(out []histogramDistance, cluster_size []uint32, symbols []uint32, clusters []uint32, pairs []histogramPair, num_clusters uint, symbols_size uint, max_clusters uint, max_num_pairs uint) uint { + var cost_diff_threshold float64 = 0.0 + var min_cluster_size uint = 1 + var num_pairs uint = 0 + { + /* We maintain a vector of histogram pairs, with the property that the pair + with the maximum bit cost reduction is the first. */ + var idx1 uint + for idx1 = 0; idx1 < num_clusters; idx1++ { + var idx2 uint + for idx2 = idx1 + 1; idx2 < num_clusters; idx2++ { + compareAndPushToQueueDistance(out, cluster_size, clusters[idx1], clusters[idx2], max_num_pairs, pairs[0:], &num_pairs) + } + } + } + + for num_clusters > min_cluster_size { + var best_idx1 uint32 + var best_idx2 uint32 + var i uint + if pairs[0].cost_diff >= cost_diff_threshold { + cost_diff_threshold = 1e99 + min_cluster_size = max_clusters + continue + } + + /* Take the best pair from the top of heap. */ + best_idx1 = pairs[0].idx1 + + best_idx2 = pairs[0].idx2 + histogramAddHistogramDistance(&out[best_idx1], &out[best_idx2]) + out[best_idx1].bit_cost_ = pairs[0].cost_combo + cluster_size[best_idx1] += cluster_size[best_idx2] + for i = 0; i < symbols_size; i++ { + if symbols[i] == best_idx2 { + symbols[i] = best_idx1 + } + } + + for i = 0; i < num_clusters; i++ { + if clusters[i] == best_idx2 { + copy(clusters[i:], clusters[i+1:][:num_clusters-i-1]) + break + } + } + + num_clusters-- + { + /* Remove pairs intersecting the just combined best pair. */ + var copy_to_idx uint = 0 + for i = 0; i < num_pairs; i++ { + var p *histogramPair = &pairs[i] + if p.idx1 == best_idx1 || p.idx2 == best_idx1 || p.idx1 == best_idx2 || p.idx2 == best_idx2 { + /* Remove invalid pair from the queue. */ + continue + } + + if histogramPairIsLess(&pairs[0], p) { + /* Replace the top of the queue if needed. */ + var front histogramPair = pairs[0] + pairs[0] = *p + pairs[copy_to_idx] = front + } else { + pairs[copy_to_idx] = *p + } + + copy_to_idx++ + } + + num_pairs = copy_to_idx + } + + /* Push new pairs formed with the combined histogram to the heap. */ + for i = 0; i < num_clusters; i++ { + compareAndPushToQueueDistance(out, cluster_size, best_idx1, clusters[i], max_num_pairs, pairs[0:], &num_pairs) + } + } + + return num_clusters +} + +/* What is the bit cost of moving histogram from cur_symbol to candidate. */ +func histogramBitCostDistanceDistance(histogram *histogramDistance, candidate *histogramDistance) float64 { + if histogram.total_count_ == 0 { + return 0.0 + } else { + var tmp histogramDistance = *histogram + histogramAddHistogramDistance(&tmp, candidate) + return populationCostDistance(&tmp) - candidate.bit_cost_ + } +} + +/* Find the best 'out' histogram for each of the 'in' histograms. + When called, clusters[0..num_clusters) contains the unique values from + symbols[0..in_size), but this property is not preserved in this function. + Note: we assume that out[]->bit_cost_ is already up-to-date. */ +func histogramRemapDistance(in []histogramDistance, in_size uint, clusters []uint32, num_clusters uint, out []histogramDistance, symbols []uint32) { + var i uint + for i = 0; i < in_size; i++ { + var best_out uint32 + if i == 0 { + best_out = symbols[0] + } else { + best_out = symbols[i-1] + } + var best_bits float64 = histogramBitCostDistanceDistance(&in[i], &out[best_out]) + var j uint + for j = 0; j < num_clusters; j++ { + var cur_bits float64 = histogramBitCostDistanceDistance(&in[i], &out[clusters[j]]) + if cur_bits < best_bits { + best_bits = cur_bits + best_out = clusters[j] + } + } + + symbols[i] = best_out + } + + /* Recompute each out based on raw and symbols. */ + for i = 0; i < num_clusters; i++ { + histogramClearDistance(&out[clusters[i]]) + } + + for i = 0; i < in_size; i++ { + histogramAddHistogramDistance(&out[symbols[i]], &in[i]) + } +} + +/* Reorders elements of the out[0..length) array and changes values in + symbols[0..length) array in the following way: + * when called, symbols[] contains indexes into out[], and has N unique + values (possibly N < length) + * on return, symbols'[i] = f(symbols[i]) and + out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length, + where f is a bijection between the range of symbols[] and [0..N), and + the first occurrences of values in symbols'[i] come in consecutive + increasing order. + Returns N, the number of unique values in symbols[]. */ + +var histogramReindexDistance_kInvalidIndex uint32 = math.MaxUint32 + +func histogramReindexDistance(out []histogramDistance, symbols []uint32, length uint) uint { + var new_index []uint32 = make([]uint32, length) + var next_index uint32 + var tmp []histogramDistance + var i uint + for i = 0; i < length; i++ { + new_index[i] = histogramReindexDistance_kInvalidIndex + } + + next_index = 0 + for i = 0; i < length; i++ { + if new_index[symbols[i]] == histogramReindexDistance_kInvalidIndex { + new_index[symbols[i]] = next_index + next_index++ + } + } + + /* TODO: by using idea of "cycle-sort" we can avoid allocation of + tmp and reduce the number of copying by the factor of 2. */ + tmp = make([]histogramDistance, next_index) + + next_index = 0 + for i = 0; i < length; i++ { + if new_index[symbols[i]] == next_index { + tmp[next_index] = out[symbols[i]] + next_index++ + } + + symbols[i] = new_index[symbols[i]] + } + + new_index = nil + for i = 0; uint32(i) < next_index; i++ { + out[i] = tmp[i] + } + + tmp = nil + return uint(next_index) +} + +func clusterHistogramsDistance(in []histogramDistance, in_size uint, max_histograms uint, out []histogramDistance, out_size *uint, histogram_symbols []uint32) { + var cluster_size []uint32 = make([]uint32, in_size) + var clusters []uint32 = make([]uint32, in_size) + var num_clusters uint = 0 + var max_input_histograms uint = 64 + var pairs_capacity uint = max_input_histograms * max_input_histograms / 2 + var pairs []histogramPair = make([]histogramPair, (pairs_capacity + 1)) + var i uint + + /* For the first pass of clustering, we allow all pairs. */ + for i = 0; i < in_size; i++ { + cluster_size[i] = 1 + } + + for i = 0; i < in_size; i++ { + out[i] = in[i] + out[i].bit_cost_ = populationCostDistance(&in[i]) + histogram_symbols[i] = uint32(i) + } + + for i = 0; i < in_size; i += max_input_histograms { + var num_to_combine uint = brotli_min_size_t(in_size-i, max_input_histograms) + var num_new_clusters uint + var j uint + for j = 0; j < num_to_combine; j++ { + clusters[num_clusters+j] = uint32(i + j) + } + + num_new_clusters = histogramCombineDistance(out, cluster_size, histogram_symbols[i:], clusters[num_clusters:], pairs, num_to_combine, num_to_combine, max_histograms, pairs_capacity) + num_clusters += num_new_clusters + } + { + /* For the second pass, we limit the total number of histogram pairs. + After this limit is reached, we only keep searching for the best pair. */ + var max_num_pairs uint = brotli_min_size_t(64*num_clusters, (num_clusters/2)*num_clusters) + if pairs_capacity < (max_num_pairs + 1) { + var _new_size uint + if pairs_capacity == 0 { + _new_size = max_num_pairs + 1 + } else { + _new_size = pairs_capacity + } + var new_array []histogramPair + for _new_size < (max_num_pairs + 1) { + _new_size *= 2 + } + new_array = make([]histogramPair, _new_size) + if pairs_capacity != 0 { + copy(new_array, pairs[:pairs_capacity]) + } + + pairs = new_array + pairs_capacity = _new_size + } + + /* Collapse similar histograms. */ + num_clusters = histogramCombineDistance(out, cluster_size, histogram_symbols, clusters, pairs, num_clusters, in_size, max_histograms, max_num_pairs) + } + + pairs = nil + cluster_size = nil + + /* Find the optimal map from original histograms to the final ones. */ + histogramRemapDistance(in, in_size, clusters, num_clusters, out, histogram_symbols) + + clusters = nil + + /* Convert the context map to a canonical form. */ + *out_size = histogramReindexDistance(out, histogram_symbols, in_size) +} diff --git a/vendor/github.com/andybalholm/brotli/cluster_literal.go b/vendor/github.com/andybalholm/brotli/cluster_literal.go new file mode 100644 index 0000000000..6ba66f31b2 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/cluster_literal.go @@ -0,0 +1,326 @@ +package brotli + +import "math" + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if + it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */ +func compareAndPushToQueueLiteral(out []histogramLiteral, cluster_size []uint32, idx1 uint32, idx2 uint32, max_num_pairs uint, pairs []histogramPair, num_pairs *uint) { + var is_good_pair bool = false + var p histogramPair + p.idx2 = 0 + p.idx1 = p.idx2 + p.cost_combo = 0 + p.cost_diff = p.cost_combo + if idx1 == idx2 { + return + } + + if idx2 < idx1 { + var t uint32 = idx2 + idx2 = idx1 + idx1 = t + } + + p.idx1 = idx1 + p.idx2 = idx2 + p.cost_diff = 0.5 * clusterCostDiff(uint(cluster_size[idx1]), uint(cluster_size[idx2])) + p.cost_diff -= out[idx1].bit_cost_ + p.cost_diff -= out[idx2].bit_cost_ + + if out[idx1].total_count_ == 0 { + p.cost_combo = out[idx2].bit_cost_ + is_good_pair = true + } else if out[idx2].total_count_ == 0 { + p.cost_combo = out[idx1].bit_cost_ + is_good_pair = true + } else { + var threshold float64 + if *num_pairs == 0 { + threshold = 1e99 + } else { + threshold = brotli_max_double(0.0, pairs[0].cost_diff) + } + var combo histogramLiteral = out[idx1] + var cost_combo float64 + histogramAddHistogramLiteral(&combo, &out[idx2]) + cost_combo = populationCostLiteral(&combo) + if cost_combo < threshold-p.cost_diff { + p.cost_combo = cost_combo + is_good_pair = true + } + } + + if is_good_pair { + p.cost_diff += p.cost_combo + if *num_pairs > 0 && histogramPairIsLess(&pairs[0], &p) { + /* Replace the top of the queue if needed. */ + if *num_pairs < max_num_pairs { + pairs[*num_pairs] = pairs[0] + (*num_pairs)++ + } + + pairs[0] = p + } else if *num_pairs < max_num_pairs { + pairs[*num_pairs] = p + (*num_pairs)++ + } + } +} + +func histogramCombineLiteral(out []histogramLiteral, cluster_size []uint32, symbols []uint32, clusters []uint32, pairs []histogramPair, num_clusters uint, symbols_size uint, max_clusters uint, max_num_pairs uint) uint { + var cost_diff_threshold float64 = 0.0 + var min_cluster_size uint = 1 + var num_pairs uint = 0 + { + /* We maintain a vector of histogram pairs, with the property that the pair + with the maximum bit cost reduction is the first. */ + var idx1 uint + for idx1 = 0; idx1 < num_clusters; idx1++ { + var idx2 uint + for idx2 = idx1 + 1; idx2 < num_clusters; idx2++ { + compareAndPushToQueueLiteral(out, cluster_size, clusters[idx1], clusters[idx2], max_num_pairs, pairs[0:], &num_pairs) + } + } + } + + for num_clusters > min_cluster_size { + var best_idx1 uint32 + var best_idx2 uint32 + var i uint + if pairs[0].cost_diff >= cost_diff_threshold { + cost_diff_threshold = 1e99 + min_cluster_size = max_clusters + continue + } + + /* Take the best pair from the top of heap. */ + best_idx1 = pairs[0].idx1 + + best_idx2 = pairs[0].idx2 + histogramAddHistogramLiteral(&out[best_idx1], &out[best_idx2]) + out[best_idx1].bit_cost_ = pairs[0].cost_combo + cluster_size[best_idx1] += cluster_size[best_idx2] + for i = 0; i < symbols_size; i++ { + if symbols[i] == best_idx2 { + symbols[i] = best_idx1 + } + } + + for i = 0; i < num_clusters; i++ { + if clusters[i] == best_idx2 { + copy(clusters[i:], clusters[i+1:][:num_clusters-i-1]) + break + } + } + + num_clusters-- + { + /* Remove pairs intersecting the just combined best pair. */ + var copy_to_idx uint = 0 + for i = 0; i < num_pairs; i++ { + var p *histogramPair = &pairs[i] + if p.idx1 == best_idx1 || p.idx2 == best_idx1 || p.idx1 == best_idx2 || p.idx2 == best_idx2 { + /* Remove invalid pair from the queue. */ + continue + } + + if histogramPairIsLess(&pairs[0], p) { + /* Replace the top of the queue if needed. */ + var front histogramPair = pairs[0] + pairs[0] = *p + pairs[copy_to_idx] = front + } else { + pairs[copy_to_idx] = *p + } + + copy_to_idx++ + } + + num_pairs = copy_to_idx + } + + /* Push new pairs formed with the combined histogram to the heap. */ + for i = 0; i < num_clusters; i++ { + compareAndPushToQueueLiteral(out, cluster_size, best_idx1, clusters[i], max_num_pairs, pairs[0:], &num_pairs) + } + } + + return num_clusters +} + +/* What is the bit cost of moving histogram from cur_symbol to candidate. */ +func histogramBitCostDistanceLiteral(histogram *histogramLiteral, candidate *histogramLiteral) float64 { + if histogram.total_count_ == 0 { + return 0.0 + } else { + var tmp histogramLiteral = *histogram + histogramAddHistogramLiteral(&tmp, candidate) + return populationCostLiteral(&tmp) - candidate.bit_cost_ + } +} + +/* Find the best 'out' histogram for each of the 'in' histograms. + When called, clusters[0..num_clusters) contains the unique values from + symbols[0..in_size), but this property is not preserved in this function. + Note: we assume that out[]->bit_cost_ is already up-to-date. */ +func histogramRemapLiteral(in []histogramLiteral, in_size uint, clusters []uint32, num_clusters uint, out []histogramLiteral, symbols []uint32) { + var i uint + for i = 0; i < in_size; i++ { + var best_out uint32 + if i == 0 { + best_out = symbols[0] + } else { + best_out = symbols[i-1] + } + var best_bits float64 = histogramBitCostDistanceLiteral(&in[i], &out[best_out]) + var j uint + for j = 0; j < num_clusters; j++ { + var cur_bits float64 = histogramBitCostDistanceLiteral(&in[i], &out[clusters[j]]) + if cur_bits < best_bits { + best_bits = cur_bits + best_out = clusters[j] + } + } + + symbols[i] = best_out + } + + /* Recompute each out based on raw and symbols. */ + for i = 0; i < num_clusters; i++ { + histogramClearLiteral(&out[clusters[i]]) + } + + for i = 0; i < in_size; i++ { + histogramAddHistogramLiteral(&out[symbols[i]], &in[i]) + } +} + +/* Reorders elements of the out[0..length) array and changes values in + symbols[0..length) array in the following way: + * when called, symbols[] contains indexes into out[], and has N unique + values (possibly N < length) + * on return, symbols'[i] = f(symbols[i]) and + out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length, + where f is a bijection between the range of symbols[] and [0..N), and + the first occurrences of values in symbols'[i] come in consecutive + increasing order. + Returns N, the number of unique values in symbols[]. */ + +var histogramReindexLiteral_kInvalidIndex uint32 = math.MaxUint32 + +func histogramReindexLiteral(out []histogramLiteral, symbols []uint32, length uint) uint { + var new_index []uint32 = make([]uint32, length) + var next_index uint32 + var tmp []histogramLiteral + var i uint + for i = 0; i < length; i++ { + new_index[i] = histogramReindexLiteral_kInvalidIndex + } + + next_index = 0 + for i = 0; i < length; i++ { + if new_index[symbols[i]] == histogramReindexLiteral_kInvalidIndex { + new_index[symbols[i]] = next_index + next_index++ + } + } + + /* TODO: by using idea of "cycle-sort" we can avoid allocation of + tmp and reduce the number of copying by the factor of 2. */ + tmp = make([]histogramLiteral, next_index) + + next_index = 0 + for i = 0; i < length; i++ { + if new_index[symbols[i]] == next_index { + tmp[next_index] = out[symbols[i]] + next_index++ + } + + symbols[i] = new_index[symbols[i]] + } + + new_index = nil + for i = 0; uint32(i) < next_index; i++ { + out[i] = tmp[i] + } + + tmp = nil + return uint(next_index) +} + +func clusterHistogramsLiteral(in []histogramLiteral, in_size uint, max_histograms uint, out []histogramLiteral, out_size *uint, histogram_symbols []uint32) { + var cluster_size []uint32 = make([]uint32, in_size) + var clusters []uint32 = make([]uint32, in_size) + var num_clusters uint = 0 + var max_input_histograms uint = 64 + var pairs_capacity uint = max_input_histograms * max_input_histograms / 2 + var pairs []histogramPair = make([]histogramPair, (pairs_capacity + 1)) + var i uint + + /* For the first pass of clustering, we allow all pairs. */ + for i = 0; i < in_size; i++ { + cluster_size[i] = 1 + } + + for i = 0; i < in_size; i++ { + out[i] = in[i] + out[i].bit_cost_ = populationCostLiteral(&in[i]) + histogram_symbols[i] = uint32(i) + } + + for i = 0; i < in_size; i += max_input_histograms { + var num_to_combine uint = brotli_min_size_t(in_size-i, max_input_histograms) + var num_new_clusters uint + var j uint + for j = 0; j < num_to_combine; j++ { + clusters[num_clusters+j] = uint32(i + j) + } + + num_new_clusters = histogramCombineLiteral(out, cluster_size, histogram_symbols[i:], clusters[num_clusters:], pairs, num_to_combine, num_to_combine, max_histograms, pairs_capacity) + num_clusters += num_new_clusters + } + { + /* For the second pass, we limit the total number of histogram pairs. + After this limit is reached, we only keep searching for the best pair. */ + var max_num_pairs uint = brotli_min_size_t(64*num_clusters, (num_clusters/2)*num_clusters) + if pairs_capacity < (max_num_pairs + 1) { + var _new_size uint + if pairs_capacity == 0 { + _new_size = max_num_pairs + 1 + } else { + _new_size = pairs_capacity + } + var new_array []histogramPair + for _new_size < (max_num_pairs + 1) { + _new_size *= 2 + } + new_array = make([]histogramPair, _new_size) + if pairs_capacity != 0 { + copy(new_array, pairs[:pairs_capacity]) + } + + pairs = new_array + pairs_capacity = _new_size + } + + /* Collapse similar histograms. */ + num_clusters = histogramCombineLiteral(out, cluster_size, histogram_symbols, clusters, pairs, num_clusters, in_size, max_histograms, max_num_pairs) + } + + pairs = nil + cluster_size = nil + + /* Find the optimal map from original histograms to the final ones. */ + histogramRemapLiteral(in, in_size, clusters, num_clusters, out, histogram_symbols) + + clusters = nil + + /* Convert the context map to a canonical form. */ + *out_size = histogramReindexLiteral(out, histogram_symbols, in_size) +} diff --git a/vendor/github.com/andybalholm/brotli/command.go b/vendor/github.com/andybalholm/brotli/command.go new file mode 100644 index 0000000000..b1662a5555 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/command.go @@ -0,0 +1,254 @@ +package brotli + +var kInsBase = []uint32{ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 10, + 14, + 18, + 26, + 34, + 50, + 66, + 98, + 130, + 194, + 322, + 578, + 1090, + 2114, + 6210, + 22594, +} + +var kInsExtra = []uint32{ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 7, + 8, + 9, + 10, + 12, + 14, + 24, +} + +var kCopyBase = []uint32{ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 12, + 14, + 18, + 22, + 30, + 38, + 54, + 70, + 102, + 134, + 198, + 326, + 582, + 1094, + 2118, +} + +var kCopyExtra = []uint32{ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 7, + 8, + 9, + 10, + 24, +} + +func getInsertLengthCode(insertlen uint) uint16 { + if insertlen < 6 { + return uint16(insertlen) + } else if insertlen < 130 { + var nbits uint32 = log2FloorNonZero(insertlen-2) - 1 + return uint16((nbits << 1) + uint32((insertlen-2)>>nbits) + 2) + } else if insertlen < 2114 { + return uint16(log2FloorNonZero(insertlen-66) + 10) + } else if insertlen < 6210 { + return 21 + } else if insertlen < 22594 { + return 22 + } else { + return 23 + } +} + +func getCopyLengthCode(copylen uint) uint16 { + if copylen < 10 { + return uint16(copylen - 2) + } else if copylen < 134 { + var nbits uint32 = log2FloorNonZero(copylen-6) - 1 + return uint16((nbits << 1) + uint32((copylen-6)>>nbits) + 4) + } else if copylen < 2118 { + return uint16(log2FloorNonZero(copylen-70) + 12) + } else { + return 23 + } +} + +func combineLengthCodes(inscode uint16, copycode uint16, use_last_distance bool) uint16 { + var bits64 uint16 = uint16(copycode&0x7 | (inscode&0x7)<<3) + if use_last_distance && inscode < 8 && copycode < 16 { + if copycode < 8 { + return bits64 + } else { + return bits64 | 64 + } + } else { + /* Specification: 5 Encoding of ... (last table) */ + /* offset = 2 * index, where index is in range [0..8] */ + var offset uint32 = 2 * ((uint32(copycode) >> 3) + 3*(uint32(inscode)>>3)) + + /* All values in specification are K * 64, + where K = [2, 3, 6, 4, 5, 8, 7, 9, 10], + i + 1 = [1, 2, 3, 4, 5, 6, 7, 8, 9], + K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1, 2] = D. + All values in D require only 2 bits to encode. + Magic constant is shifted 6 bits left, to avoid final multiplication. */ + offset = (offset << 5) + 0x40 + ((0x520D40 >> offset) & 0xC0) + + return uint16(offset | uint32(bits64)) + } +} + +func getLengthCode(insertlen uint, copylen uint, use_last_distance bool, code *uint16) { + var inscode uint16 = getInsertLengthCode(insertlen) + var copycode uint16 = getCopyLengthCode(copylen) + *code = combineLengthCodes(inscode, copycode, use_last_distance) +} + +func getInsertBase(inscode uint16) uint32 { + return kInsBase[inscode] +} + +func getInsertExtra(inscode uint16) uint32 { + return kInsExtra[inscode] +} + +func getCopyBase(copycode uint16) uint32 { + return kCopyBase[copycode] +} + +func getCopyExtra(copycode uint16) uint32 { + return kCopyExtra[copycode] +} + +type command struct { + insert_len_ uint32 + copy_len_ uint32 + dist_extra_ uint32 + cmd_prefix_ uint16 + dist_prefix_ uint16 +} + +/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */ +func makeCommand(dist *distanceParams, insertlen uint, copylen uint, copylen_code_delta int, distance_code uint) (cmd command) { + /* Don't rely on signed int representation, use honest casts. */ + var delta uint32 = uint32(byte(int8(copylen_code_delta))) + cmd.insert_len_ = uint32(insertlen) + cmd.copy_len_ = uint32(uint32(copylen) | delta<<25) + + /* The distance prefix and extra bits are stored in this Command as if + npostfix and ndirect were 0, they are only recomputed later after the + clustering if needed. */ + prefixEncodeCopyDistance(distance_code, uint(dist.num_direct_distance_codes), uint(dist.distance_postfix_bits), &cmd.dist_prefix_, &cmd.dist_extra_) + getLengthCode(insertlen, uint(int(copylen)+copylen_code_delta), (cmd.dist_prefix_&0x3FF == 0), &cmd.cmd_prefix_) + + return cmd +} + +func makeInsertCommand(insertlen uint) (cmd command) { + cmd.insert_len_ = uint32(insertlen) + cmd.copy_len_ = 4 << 25 + cmd.dist_extra_ = 0 + cmd.dist_prefix_ = numDistanceShortCodes + getLengthCode(insertlen, 4, false, &cmd.cmd_prefix_) + return cmd +} + +func commandRestoreDistanceCode(self *command, dist *distanceParams) uint32 { + if uint32(self.dist_prefix_&0x3FF) < numDistanceShortCodes+dist.num_direct_distance_codes { + return uint32(self.dist_prefix_) & 0x3FF + } else { + var dcode uint32 = uint32(self.dist_prefix_) & 0x3FF + var nbits uint32 = uint32(self.dist_prefix_) >> 10 + var extra uint32 = self.dist_extra_ + var postfix_mask uint32 = (1 << dist.distance_postfix_bits) - 1 + var hcode uint32 = (dcode - dist.num_direct_distance_codes - numDistanceShortCodes) >> dist.distance_postfix_bits + var lcode uint32 = (dcode - dist.num_direct_distance_codes - numDistanceShortCodes) & postfix_mask + var offset uint32 = ((2 + (hcode & 1)) << nbits) - 4 + return ((offset + extra) << dist.distance_postfix_bits) + lcode + dist.num_direct_distance_codes + numDistanceShortCodes + } +} + +func commandDistanceContext(self *command) uint32 { + var r uint32 = uint32(self.cmd_prefix_) >> 6 + var c uint32 = uint32(self.cmd_prefix_) & 7 + if (r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2) { + return c + } + + return 3 +} + +func commandCopyLen(self *command) uint32 { + return self.copy_len_ & 0x1FFFFFF +} + +func commandCopyLenCode(self *command) uint32 { + var modifier uint32 = self.copy_len_ >> 25 + var delta int32 = int32(int8(byte(modifier | (modifier&0x40)<<1))) + return uint32(int32(self.copy_len_&0x1FFFFFF) + delta) +} diff --git a/vendor/github.com/andybalholm/brotli/compress_fragment.go b/vendor/github.com/andybalholm/brotli/compress_fragment.go new file mode 100644 index 0000000000..c9bd057705 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/compress_fragment.go @@ -0,0 +1,834 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses one-pass processing: when we find a backward + match, we immediately emit the corresponding command and literal codes to + the bit stream. + + Adapted from the CompressFragment() function in + https://github.com/google/snappy/blob/master/snappy.cc */ + +const maxDistance_compress_fragment = 262128 + +func hash5(p []byte, shift uint) uint32 { + var h uint64 = (binary.LittleEndian.Uint64(p) << 24) * uint64(kHashMul32) + return uint32(h >> shift) +} + +func hashBytesAtOffset5(v uint64, offset int, shift uint) uint32 { + assert(offset >= 0) + assert(offset <= 3) + { + var h uint64 = ((v >> uint(8*offset)) << 24) * uint64(kHashMul32) + return uint32(h >> shift) + } +} + +func isMatch5(p1 []byte, p2 []byte) bool { + return binary.LittleEndian.Uint32(p1) == binary.LittleEndian.Uint32(p2) && + p1[4] == p2[4] +} + +/* Builds a literal prefix code into "depths" and "bits" based on the statistics + of the "input" string and stores it into the bit stream. + Note that the prefix code here is built from the pre-LZ77 input, therefore + we can only approximate the statistics of the actual literal stream. + Moreover, for long inputs we build a histogram from a sample of the input + and thus have to assign a non-zero depth for each literal. + Returns estimated compression ratio millibytes/char for encoding given input + with generated code. */ +func buildAndStoreLiteralPrefixCode(input []byte, input_size uint, depths []byte, bits []uint16, storage_ix *uint, storage []byte) uint { + var histogram = [256]uint32{0} + var histogram_total uint + var i uint + if input_size < 1<<15 { + for i = 0; i < input_size; i++ { + histogram[input[i]]++ + } + + histogram_total = input_size + for i = 0; i < 256; i++ { + /* We weigh the first 11 samples with weight 3 to account for the + balancing effect of the LZ77 phase on the histogram. */ + var adjust uint32 = 2 * brotli_min_uint32_t(histogram[i], 11) + histogram[i] += adjust + histogram_total += uint(adjust) + } + } else { + const kSampleRate uint = 29 + for i = 0; i < input_size; i += kSampleRate { + histogram[input[i]]++ + } + + histogram_total = (input_size + kSampleRate - 1) / kSampleRate + for i = 0; i < 256; i++ { + /* We add 1 to each population count to avoid 0 bit depths (since this is + only a sample and we don't know if the symbol appears or not), and we + weigh the first 11 samples with weight 3 to account for the balancing + effect of the LZ77 phase on the histogram (more frequent symbols are + more likely to be in backward references instead as literals). */ + var adjust uint32 = 1 + 2*brotli_min_uint32_t(histogram[i], 11) + histogram[i] += adjust + histogram_total += uint(adjust) + } + } + + buildAndStoreHuffmanTreeFast(histogram[:], histogram_total, /* max_bits = */ + 8, depths, bits, storage_ix, storage) + { + var literal_ratio uint = 0 + for i = 0; i < 256; i++ { + if histogram[i] != 0 { + literal_ratio += uint(histogram[i] * uint32(depths[i])) + } + } + + /* Estimated encoding ratio, millibytes per symbol. */ + return (literal_ratio * 125) / histogram_total + } +} + +/* Builds a command and distance prefix code (each 64 symbols) into "depth" and + "bits" based on "histogram" and stores it into the bit stream. */ +func buildAndStoreCommandPrefixCode1(histogram []uint32, depth []byte, bits []uint16, storage_ix *uint, storage []byte) { + var tree [129]huffmanTree + var cmd_depth = [numCommandSymbols]byte{0} + /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */ + + var cmd_bits [64]uint16 + + createHuffmanTree(histogram, 64, 15, tree[:], depth) + createHuffmanTree(histogram[64:], 64, 14, tree[:], depth[64:]) + + /* We have to jump through a few hoops here in order to compute + the command bits because the symbols are in a different order than in + the full alphabet. This looks complicated, but having the symbols + in this order in the command bits saves a few branches in the Emit* + functions. */ + copy(cmd_depth[:], depth[:24]) + + copy(cmd_depth[24:][:], depth[40:][:8]) + copy(cmd_depth[32:][:], depth[24:][:8]) + copy(cmd_depth[40:][:], depth[48:][:8]) + copy(cmd_depth[48:][:], depth[32:][:8]) + copy(cmd_depth[56:][:], depth[56:][:8]) + convertBitDepthsToSymbols(cmd_depth[:], 64, cmd_bits[:]) + copy(bits, cmd_bits[:24]) + copy(bits[24:], cmd_bits[32:][:8]) + copy(bits[32:], cmd_bits[48:][:8]) + copy(bits[40:], cmd_bits[24:][:8]) + copy(bits[48:], cmd_bits[40:][:8]) + copy(bits[56:], cmd_bits[56:][:8]) + convertBitDepthsToSymbols(depth[64:], 64, bits[64:]) + { + /* Create the bit length array for the full command alphabet. */ + var i uint + for i := 0; i < int(64); i++ { + cmd_depth[i] = 0 + } /* only 64 first values were used */ + copy(cmd_depth[:], depth[:8]) + copy(cmd_depth[64:][:], depth[8:][:8]) + copy(cmd_depth[128:][:], depth[16:][:8]) + copy(cmd_depth[192:][:], depth[24:][:8]) + copy(cmd_depth[384:][:], depth[32:][:8]) + for i = 0; i < 8; i++ { + cmd_depth[128+8*i] = depth[40+i] + cmd_depth[256+8*i] = depth[48+i] + cmd_depth[448+8*i] = depth[56+i] + } + + storeHuffmanTree(cmd_depth[:], numCommandSymbols, tree[:], storage_ix, storage) + } + + storeHuffmanTree(depth[64:], 64, tree[:], storage_ix, storage) +} + +/* REQUIRES: insertlen < 6210 */ +func emitInsertLen1(insertlen uint, depth []byte, bits []uint16, histo []uint32, storage_ix *uint, storage []byte) { + if insertlen < 6 { + var code uint = insertlen + 40 + writeBits(uint(depth[code]), uint64(bits[code]), storage_ix, storage) + histo[code]++ + } else if insertlen < 130 { + var tail uint = insertlen - 2 + var nbits uint32 = log2FloorNonZero(tail) - 1 + var prefix uint = tail >> nbits + var inscode uint = uint((nbits << 1) + uint32(prefix) + 42) + writeBits(uint(depth[inscode]), uint64(bits[inscode]), storage_ix, storage) + writeBits(uint(nbits), uint64(tail)-(uint64(prefix)<> nbits + var code uint = uint((nbits << 1) + uint32(prefix) + 20) + writeBits(uint(depth[code]), uint64(bits[code]), storage_ix, storage) + writeBits(uint(nbits), uint64(tail)-(uint64(prefix)<> nbits + var code uint = uint((nbits << 1) + uint32(prefix) + 4) + writeBits(uint(depth[code]), uint64(bits[code]), storage_ix, storage) + writeBits(uint(nbits), uint64(tail)-(uint64(prefix)<> 5) + 30 + writeBits(uint(depth[code]), uint64(bits[code]), storage_ix, storage) + writeBits(5, uint64(tail)&31, storage_ix, storage) + writeBits(uint(depth[64]), uint64(bits[64]), storage_ix, storage) + histo[code]++ + histo[64]++ + } else if copylen < 2120 { + var tail uint = copylen - 72 + var nbits uint32 = log2FloorNonZero(tail) + var code uint = uint(nbits + 28) + writeBits(uint(depth[code]), uint64(bits[code]), storage_ix, storage) + writeBits(uint(nbits), uint64(tail)-(uint64(uint(1))<> nbits) & 1 + var offset uint = (2 + prefix) << nbits + var distcode uint = uint(2*(nbits-1) + uint32(prefix) + 80) + writeBits(uint(depth[distcode]), uint64(bits[distcode]), storage_ix, storage) + writeBits(uint(nbits), uint64(d)-uint64(offset), storage_ix, storage) + histo[distcode]++ +} + +func emitLiterals(input []byte, len uint, depth []byte, bits []uint16, storage_ix *uint, storage []byte) { + var j uint + for j = 0; j < len; j++ { + var lit byte = input[j] + writeBits(uint(depth[lit]), uint64(bits[lit]), storage_ix, storage) + } +} + +/* REQUIRES: len <= 1 << 24. */ +func storeMetaBlockHeader1(len uint, is_uncompressed bool, storage_ix *uint, storage []byte) { + var nibbles uint = 6 + + /* ISLAST */ + writeBits(1, 0, storage_ix, storage) + + if len <= 1<<16 { + nibbles = 4 + } else if len <= 1<<20 { + nibbles = 5 + } + + writeBits(2, uint64(nibbles)-4, storage_ix, storage) + writeBits(nibbles*4, uint64(len)-1, storage_ix, storage) + + /* ISUNCOMPRESSED */ + writeSingleBit(is_uncompressed, storage_ix, storage) +} + +func updateBits(n_bits uint, bits uint32, pos uint, array []byte) { + for n_bits > 0 { + var byte_pos uint = pos >> 3 + var n_unchanged_bits uint = pos & 7 + var n_changed_bits uint = brotli_min_size_t(n_bits, 8-n_unchanged_bits) + var total_bits uint = n_unchanged_bits + n_changed_bits + var mask uint32 = (^((1 << total_bits) - 1)) | ((1 << n_unchanged_bits) - 1) + var unchanged_bits uint32 = uint32(array[byte_pos]) & mask + var changed_bits uint32 = bits & ((1 << n_changed_bits) - 1) + array[byte_pos] = byte(changed_bits<>= n_changed_bits + pos += n_changed_bits + } +} + +func rewindBitPosition1(new_storage_ix uint, storage_ix *uint, storage []byte) { + var bitpos uint = new_storage_ix & 7 + var mask uint = (1 << bitpos) - 1 + storage[new_storage_ix>>3] &= byte(mask) + *storage_ix = new_storage_ix +} + +var shouldMergeBlock_kSampleRate uint = 43 + +func shouldMergeBlock(data []byte, len uint, depths []byte) bool { + var histo = [256]uint{0} + var i uint + for i = 0; i < len; i += shouldMergeBlock_kSampleRate { + histo[data[i]]++ + } + { + var total uint = (len + shouldMergeBlock_kSampleRate - 1) / shouldMergeBlock_kSampleRate + var r float64 = (fastLog2(total)+0.5)*float64(total) + 200 + for i = 0; i < 256; i++ { + r -= float64(histo[i]) * (float64(depths[i]) + fastLog2(histo[i])) + } + + return r >= 0.0 + } +} + +func shouldUseUncompressedMode(metablock_start []byte, next_emit []byte, insertlen uint, literal_ratio uint) bool { + var compressed uint = uint(-cap(next_emit) + cap(metablock_start)) + if compressed*50 > insertlen { + return false + } else { + return literal_ratio > 980 + } +} + +func emitUncompressedMetaBlock1(begin []byte, end []byte, storage_ix_start uint, storage_ix *uint, storage []byte) { + var len uint = uint(-cap(end) + cap(begin)) + rewindBitPosition1(storage_ix_start, storage_ix, storage) + storeMetaBlockHeader1(uint(len), true, storage_ix, storage) + *storage_ix = (*storage_ix + 7) &^ 7 + copy(storage[*storage_ix>>3:], begin[:len]) + *storage_ix += uint(len << 3) + storage[*storage_ix>>3] = 0 +} + +var kCmdHistoSeed = [128]uint32{ + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 0, + 0, + 0, + 0, +} + +var compressFragmentFastImpl_kFirstBlockSize uint = 3 << 15 +var compressFragmentFastImpl_kMergeBlockSize uint = 1 << 16 + +func compressFragmentFastImpl(in []byte, input_size uint, is_last bool, table []int, table_bits uint, cmd_depth []byte, cmd_bits []uint16, cmd_code_numbits *uint, cmd_code []byte, storage_ix *uint, storage []byte) { + var cmd_histo [128]uint32 + var ip_end int + var next_emit int = 0 + var base_ip int = 0 + var input int = 0 + const kInputMarginBytes uint = windowGap + const kMinMatchLen uint = 5 + var metablock_start int = input + var block_size uint = brotli_min_size_t(input_size, compressFragmentFastImpl_kFirstBlockSize) + var total_block_size uint = block_size + var mlen_storage_ix uint = *storage_ix + 3 + var lit_depth [256]byte + var lit_bits [256]uint16 + var literal_ratio uint + var ip int + var last_distance int + var shift uint = 64 - table_bits + + /* "next_emit" is a pointer to the first byte that is not covered by a + previous copy. Bytes between "next_emit" and the start of the next copy or + the end of the input will be emitted as literal bytes. */ + + /* Save the start of the first block for position and distance computations. + */ + + /* Save the bit position of the MLEN field of the meta-block header, so that + we can update it later if we decide to extend this meta-block. */ + storeMetaBlockHeader1(block_size, false, storage_ix, storage) + + /* No block splits, no contexts. */ + writeBits(13, 0, storage_ix, storage) + + literal_ratio = buildAndStoreLiteralPrefixCode(in[input:], block_size, lit_depth[:], lit_bits[:], storage_ix, storage) + { + /* Store the pre-compressed command and distance prefix codes. */ + var i uint + for i = 0; i+7 < *cmd_code_numbits; i += 8 { + writeBits(8, uint64(cmd_code[i>>3]), storage_ix, storage) + } + } + + writeBits(*cmd_code_numbits&7, uint64(cmd_code[*cmd_code_numbits>>3]), storage_ix, storage) + + /* Initialize the command and distance histograms. We will gather + statistics of command and distance codes during the processing + of this block and use it to update the command and distance + prefix codes for the next block. */ +emit_commands: + copy(cmd_histo[:], kCmdHistoSeed[:]) + + /* "ip" is the input pointer. */ + ip = input + + last_distance = -1 + ip_end = int(uint(input) + block_size) + + if block_size >= kInputMarginBytes { + var len_limit uint = brotli_min_size_t(block_size-kMinMatchLen, input_size-kInputMarginBytes) + var ip_limit int = int(uint(input) + len_limit) + /* For the last block, we need to keep a 16 bytes margin so that we can be + sure that all distances are at most window size - 16. + For all other blocks, we only need to keep a margin of 5 bytes so that + we don't go over the block size with a copy. */ + + var next_hash uint32 + ip++ + for next_hash = hash5(in[ip:], shift); ; { + var skip uint32 = 32 + var next_ip int = ip + /* Step 1: Scan forward in the input looking for a 5-byte-long match. + If we get close to exhausting the input then goto emit_remainder. + + Heuristic match skipping: If 32 bytes are scanned with no matches + found, start looking only at every other byte. If 32 more bytes are + scanned, look at every third byte, etc.. When a match is found, + immediately go back to looking at every byte. This is a small loss + (~5% performance, ~0.1% density) for compressible data due to more + bookkeeping, but for non-compressible data (such as JPEG) it's a huge + win since the compressor quickly "realizes" the data is incompressible + and doesn't bother looking for matches everywhere. + + The "skip" variable keeps track of how many bytes there are since the + last match; dividing it by 32 (i.e. right-shifting by five) gives the + number of bytes to move ahead for each iteration. */ + + var candidate int + assert(next_emit < ip) + + trawl: + for { + var hash uint32 = next_hash + var bytes_between_hash_lookups uint32 = skip >> 5 + skip++ + assert(hash == hash5(in[next_ip:], shift)) + ip = next_ip + next_ip = int(uint32(ip) + bytes_between_hash_lookups) + if next_ip > ip_limit { + goto emit_remainder + } + + next_hash = hash5(in[next_ip:], shift) + candidate = ip - last_distance + if isMatch5(in[ip:], in[candidate:]) { + if candidate < ip { + table[hash] = int(ip - base_ip) + break + } + } + + candidate = base_ip + table[hash] + assert(candidate >= base_ip) + assert(candidate < ip) + + table[hash] = int(ip - base_ip) + if isMatch5(in[ip:], in[candidate:]) { + break + } + } + + /* Check copy distance. If candidate is not feasible, continue search. + Checking is done outside of hot loop to reduce overhead. */ + if ip-candidate > maxDistance_compress_fragment { + goto trawl + } + + /* Step 2: Emit the found match together with the literal bytes from + "next_emit" to the bit stream, and then see if we can find a next match + immediately afterwards. Repeat until we find no match for the input + without emitting some literal bytes. */ + { + var base int = ip + /* > 0 */ + var matched uint = 5 + findMatchLengthWithLimit(in[candidate+5:], in[ip+5:], uint(ip_end-ip)-5) + var distance int = int(base - candidate) + /* We have a 5-byte match at ip, and we need to emit bytes in + [next_emit, ip). */ + + var insert uint = uint(base - next_emit) + ip += int(matched) + if insert < 6210 { + emitInsertLen1(insert, cmd_depth, cmd_bits, cmd_histo[:], storage_ix, storage) + } else if shouldUseUncompressedMode(in[metablock_start:], in[next_emit:], insert, literal_ratio) { + emitUncompressedMetaBlock1(in[metablock_start:], in[base:], mlen_storage_ix-3, storage_ix, storage) + input_size -= uint(base - input) + input = base + next_emit = input + goto next_block + } else { + emitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo[:], storage_ix, storage) + } + + emitLiterals(in[next_emit:], insert, lit_depth[:], lit_bits[:], storage_ix, storage) + if distance == last_distance { + writeBits(uint(cmd_depth[64]), uint64(cmd_bits[64]), storage_ix, storage) + cmd_histo[64]++ + } else { + emitDistance1(uint(distance), cmd_depth, cmd_bits, cmd_histo[:], storage_ix, storage) + last_distance = distance + } + + emitCopyLenLastDistance1(matched, cmd_depth, cmd_bits, cmd_histo[:], storage_ix, storage) + + next_emit = ip + if ip >= ip_limit { + goto emit_remainder + } + + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some positions + within the last copy. */ + { + var input_bytes uint64 = binary.LittleEndian.Uint64(in[ip-3:]) + var prev_hash uint32 = hashBytesAtOffset5(input_bytes, 0, shift) + var cur_hash uint32 = hashBytesAtOffset5(input_bytes, 3, shift) + table[prev_hash] = int(ip - base_ip - 3) + prev_hash = hashBytesAtOffset5(input_bytes, 1, shift) + table[prev_hash] = int(ip - base_ip - 2) + prev_hash = hashBytesAtOffset5(input_bytes, 2, shift) + table[prev_hash] = int(ip - base_ip - 1) + + candidate = base_ip + table[cur_hash] + table[cur_hash] = int(ip - base_ip) + } + } + + for isMatch5(in[ip:], in[candidate:]) { + var base int = ip + /* We have a 5-byte match at ip, and no need to emit any literal bytes + prior to ip. */ + + var matched uint = 5 + findMatchLengthWithLimit(in[candidate+5:], in[ip+5:], uint(ip_end-ip)-5) + if ip-candidate > maxDistance_compress_fragment { + break + } + ip += int(matched) + last_distance = int(base - candidate) /* > 0 */ + emitCopyLen1(matched, cmd_depth, cmd_bits, cmd_histo[:], storage_ix, storage) + emitDistance1(uint(last_distance), cmd_depth, cmd_bits, cmd_histo[:], storage_ix, storage) + + next_emit = ip + if ip >= ip_limit { + goto emit_remainder + } + + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some positions + within the last copy. */ + { + var input_bytes uint64 = binary.LittleEndian.Uint64(in[ip-3:]) + var prev_hash uint32 = hashBytesAtOffset5(input_bytes, 0, shift) + var cur_hash uint32 = hashBytesAtOffset5(input_bytes, 3, shift) + table[prev_hash] = int(ip - base_ip - 3) + prev_hash = hashBytesAtOffset5(input_bytes, 1, shift) + table[prev_hash] = int(ip - base_ip - 2) + prev_hash = hashBytesAtOffset5(input_bytes, 2, shift) + table[prev_hash] = int(ip - base_ip - 1) + + candidate = base_ip + table[cur_hash] + table[cur_hash] = int(ip - base_ip) + } + } + + ip++ + next_hash = hash5(in[ip:], shift) + } + } + +emit_remainder: + assert(next_emit <= ip_end) + input += int(block_size) + input_size -= block_size + block_size = brotli_min_size_t(input_size, compressFragmentFastImpl_kMergeBlockSize) + + /* Decide if we want to continue this meta-block instead of emitting the + last insert-only command. */ + if input_size > 0 && total_block_size+block_size <= 1<<20 && shouldMergeBlock(in[input:], block_size, lit_depth[:]) { + assert(total_block_size > 1<<16) + + /* Update the size of the current meta-block and continue emitting commands. + We can do this because the current size and the new size both have 5 + nibbles. */ + total_block_size += block_size + + updateBits(20, uint32(total_block_size-1), mlen_storage_ix, storage) + goto emit_commands + } + + /* Emit the remaining bytes as literals. */ + if next_emit < ip_end { + var insert uint = uint(ip_end - next_emit) + if insert < 6210 { + emitInsertLen1(insert, cmd_depth, cmd_bits, cmd_histo[:], storage_ix, storage) + emitLiterals(in[next_emit:], insert, lit_depth[:], lit_bits[:], storage_ix, storage) + } else if shouldUseUncompressedMode(in[metablock_start:], in[next_emit:], insert, literal_ratio) { + emitUncompressedMetaBlock1(in[metablock_start:], in[ip_end:], mlen_storage_ix-3, storage_ix, storage) + } else { + emitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo[:], storage_ix, storage) + emitLiterals(in[next_emit:], insert, lit_depth[:], lit_bits[:], storage_ix, storage) + } + } + + next_emit = ip_end + + /* If we have more data, write a new meta-block header and prefix codes and + then continue emitting commands. */ +next_block: + if input_size > 0 { + metablock_start = input + block_size = brotli_min_size_t(input_size, compressFragmentFastImpl_kFirstBlockSize) + total_block_size = block_size + + /* Save the bit position of the MLEN field of the meta-block header, so that + we can update it later if we decide to extend this meta-block. */ + mlen_storage_ix = *storage_ix + 3 + + storeMetaBlockHeader1(block_size, false, storage_ix, storage) + + /* No block splits, no contexts. */ + writeBits(13, 0, storage_ix, storage) + + literal_ratio = buildAndStoreLiteralPrefixCode(in[input:], block_size, lit_depth[:], lit_bits[:], storage_ix, storage) + buildAndStoreCommandPrefixCode1(cmd_histo[:], cmd_depth, cmd_bits, storage_ix, storage) + goto emit_commands + } + + if !is_last { + /* If this is not the last block, update the command and distance prefix + codes for the next block and store the compressed forms. */ + cmd_code[0] = 0 + + *cmd_code_numbits = 0 + buildAndStoreCommandPrefixCode1(cmd_histo[:], cmd_depth, cmd_bits, cmd_code_numbits, cmd_code) + } +} + +/* Compresses "input" string to the "*storage" buffer as one or more complete + meta-blocks, and updates the "*storage_ix" bit position. + + If "is_last" is 1, emits an additional empty last meta-block. + + "cmd_depth" and "cmd_bits" contain the command and distance prefix codes + (see comment in encode.h) used for the encoding of this input fragment. + If "is_last" is 0, they are updated to reflect the statistics + of this input fragment, to be used for the encoding of the next fragment. + + "*cmd_code_numbits" is the number of bits of the compressed representation + of the command and distance prefix codes, and "cmd_code" is an array of + at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed + command and distance prefix codes. If "is_last" is 0, these are also + updated to represent the updated "cmd_depth" and "cmd_bits". + + REQUIRES: "input_size" is greater than zero, or "is_last" is 1. + REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24). + REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. + REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two + OUTPUT: maximal copy distance <= |input_size| + OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */ +func compressFragmentFast(input []byte, input_size uint, is_last bool, table []int, table_size uint, cmd_depth []byte, cmd_bits []uint16, cmd_code_numbits *uint, cmd_code []byte, storage_ix *uint, storage []byte) { + var initial_storage_ix uint = *storage_ix + var table_bits uint = uint(log2FloorNonZero(table_size)) + + if input_size == 0 { + assert(is_last) + writeBits(1, 1, storage_ix, storage) /* islast */ + writeBits(1, 1, storage_ix, storage) /* isempty */ + *storage_ix = (*storage_ix + 7) &^ 7 + return + } + + compressFragmentFastImpl(input, input_size, is_last, table, table_bits, cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage) + + /* If output is larger than single uncompressed block, rewrite it. */ + if *storage_ix-initial_storage_ix > 31+(input_size<<3) { + emitUncompressedMetaBlock1(input, input[input_size:], initial_storage_ix, storage_ix, storage) + } + + if is_last { + writeBits(1, 1, storage_ix, storage) /* islast */ + writeBits(1, 1, storage_ix, storage) /* isempty */ + *storage_ix = (*storage_ix + 7) &^ 7 + } +} diff --git a/vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.go b/vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.go new file mode 100644 index 0000000000..172dc7f460 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/compress_fragment_two_pass.go @@ -0,0 +1,748 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function for fast encoding of an input fragment, independently from the input + history. This function uses two-pass processing: in the first pass we save + the found backward matches and literal bytes into a buffer, and in the + second pass we emit them into the bit stream using prefix codes built based + on the actual command and literal byte histograms. */ + +const kCompressFragmentTwoPassBlockSize uint = 1 << 17 + +func hash1(p []byte, shift uint, length uint) uint32 { + var h uint64 = (binary.LittleEndian.Uint64(p) << ((8 - length) * 8)) * uint64(kHashMul32) + return uint32(h >> shift) +} + +func hashBytesAtOffset(v uint64, offset uint, shift uint, length uint) uint32 { + assert(offset <= 8-length) + { + var h uint64 = ((v >> (8 * offset)) << ((8 - length) * 8)) * uint64(kHashMul32) + return uint32(h >> shift) + } +} + +func isMatch1(p1 []byte, p2 []byte, length uint) bool { + if binary.LittleEndian.Uint32(p1) != binary.LittleEndian.Uint32(p2) { + return false + } + if length == 4 { + return true + } + return p1[4] == p2[4] && p1[5] == p2[5] +} + +/* Builds a command and distance prefix code (each 64 symbols) into "depth" and + "bits" based on "histogram" and stores it into the bit stream. */ +func buildAndStoreCommandPrefixCode(histogram []uint32, depth []byte, bits []uint16, storage_ix *uint, storage []byte) { + var tree [129]huffmanTree + var cmd_depth = [numCommandSymbols]byte{0} + /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */ + + var cmd_bits [64]uint16 + createHuffmanTree(histogram, 64, 15, tree[:], depth) + createHuffmanTree(histogram[64:], 64, 14, tree[:], depth[64:]) + + /* We have to jump through a few hoops here in order to compute + the command bits because the symbols are in a different order than in + the full alphabet. This looks complicated, but having the symbols + in this order in the command bits saves a few branches in the Emit* + functions. */ + copy(cmd_depth[:], depth[24:][:24]) + + copy(cmd_depth[24:][:], depth[:8]) + copy(cmd_depth[32:][:], depth[48:][:8]) + copy(cmd_depth[40:][:], depth[8:][:8]) + copy(cmd_depth[48:][:], depth[56:][:8]) + copy(cmd_depth[56:][:], depth[16:][:8]) + convertBitDepthsToSymbols(cmd_depth[:], 64, cmd_bits[:]) + copy(bits, cmd_bits[24:][:8]) + copy(bits[8:], cmd_bits[40:][:8]) + copy(bits[16:], cmd_bits[56:][:8]) + copy(bits[24:], cmd_bits[:24]) + copy(bits[48:], cmd_bits[32:][:8]) + copy(bits[56:], cmd_bits[48:][:8]) + convertBitDepthsToSymbols(depth[64:], 64, bits[64:]) + { + /* Create the bit length array for the full command alphabet. */ + var i uint + for i := 0; i < int(64); i++ { + cmd_depth[i] = 0 + } /* only 64 first values were used */ + copy(cmd_depth[:], depth[24:][:8]) + copy(cmd_depth[64:][:], depth[32:][:8]) + copy(cmd_depth[128:][:], depth[40:][:8]) + copy(cmd_depth[192:][:], depth[48:][:8]) + copy(cmd_depth[384:][:], depth[56:][:8]) + for i = 0; i < 8; i++ { + cmd_depth[128+8*i] = depth[i] + cmd_depth[256+8*i] = depth[8+i] + cmd_depth[448+8*i] = depth[16+i] + } + + storeHuffmanTree(cmd_depth[:], numCommandSymbols, tree[:], storage_ix, storage) + } + + storeHuffmanTree(depth[64:], 64, tree[:], storage_ix, storage) +} + +func emitInsertLen(insertlen uint32, commands *[]uint32) { + if insertlen < 6 { + (*commands)[0] = insertlen + } else if insertlen < 130 { + var tail uint32 = insertlen - 2 + var nbits uint32 = log2FloorNonZero(uint(tail)) - 1 + var prefix uint32 = tail >> nbits + var inscode uint32 = (nbits << 1) + prefix + 2 + var extra uint32 = tail - (prefix << nbits) + (*commands)[0] = inscode | extra<<8 + } else if insertlen < 2114 { + var tail uint32 = insertlen - 66 + var nbits uint32 = log2FloorNonZero(uint(tail)) + var code uint32 = nbits + 10 + var extra uint32 = tail - (1 << nbits) + (*commands)[0] = code | extra<<8 + } else if insertlen < 6210 { + var extra uint32 = insertlen - 2114 + (*commands)[0] = 21 | extra<<8 + } else if insertlen < 22594 { + var extra uint32 = insertlen - 6210 + (*commands)[0] = 22 | extra<<8 + } else { + var extra uint32 = insertlen - 22594 + (*commands)[0] = 23 | extra<<8 + } + + *commands = (*commands)[1:] +} + +func emitCopyLen(copylen uint, commands *[]uint32) { + if copylen < 10 { + (*commands)[0] = uint32(copylen + 38) + } else if copylen < 134 { + var tail uint = copylen - 6 + var nbits uint = uint(log2FloorNonZero(tail) - 1) + var prefix uint = tail >> nbits + var code uint = (nbits << 1) + prefix + 44 + var extra uint = tail - (prefix << nbits) + (*commands)[0] = uint32(code | extra<<8) + } else if copylen < 2118 { + var tail uint = copylen - 70 + var nbits uint = uint(log2FloorNonZero(tail)) + var code uint = nbits + 52 + var extra uint = tail - (uint(1) << nbits) + (*commands)[0] = uint32(code | extra<<8) + } else { + var extra uint = copylen - 2118 + (*commands)[0] = uint32(63 | extra<<8) + } + + *commands = (*commands)[1:] +} + +func emitCopyLenLastDistance(copylen uint, commands *[]uint32) { + if copylen < 12 { + (*commands)[0] = uint32(copylen + 20) + *commands = (*commands)[1:] + } else if copylen < 72 { + var tail uint = copylen - 8 + var nbits uint = uint(log2FloorNonZero(tail) - 1) + var prefix uint = tail >> nbits + var code uint = (nbits << 1) + prefix + 28 + var extra uint = tail - (prefix << nbits) + (*commands)[0] = uint32(code | extra<<8) + *commands = (*commands)[1:] + } else if copylen < 136 { + var tail uint = copylen - 8 + var code uint = (tail >> 5) + 54 + var extra uint = tail & 31 + (*commands)[0] = uint32(code | extra<<8) + *commands = (*commands)[1:] + (*commands)[0] = 64 + *commands = (*commands)[1:] + } else if copylen < 2120 { + var tail uint = copylen - 72 + var nbits uint = uint(log2FloorNonZero(tail)) + var code uint = nbits + 52 + var extra uint = tail - (uint(1) << nbits) + (*commands)[0] = uint32(code | extra<<8) + *commands = (*commands)[1:] + (*commands)[0] = 64 + *commands = (*commands)[1:] + } else { + var extra uint = copylen - 2120 + (*commands)[0] = uint32(63 | extra<<8) + *commands = (*commands)[1:] + (*commands)[0] = 64 + *commands = (*commands)[1:] + } +} + +func emitDistance(distance uint32, commands *[]uint32) { + var d uint32 = distance + 3 + var nbits uint32 = log2FloorNonZero(uint(d)) - 1 + var prefix uint32 = (d >> nbits) & 1 + var offset uint32 = (2 + prefix) << nbits + var distcode uint32 = 2*(nbits-1) + prefix + 80 + var extra uint32 = d - offset + (*commands)[0] = distcode | extra<<8 + *commands = (*commands)[1:] +} + +/* REQUIRES: len <= 1 << 24. */ +func storeMetaBlockHeader(len uint, is_uncompressed bool, storage_ix *uint, storage []byte) { + var nibbles uint = 6 + + /* ISLAST */ + writeBits(1, 0, storage_ix, storage) + + if len <= 1<<16 { + nibbles = 4 + } else if len <= 1<<20 { + nibbles = 5 + } + + writeBits(2, uint64(nibbles)-4, storage_ix, storage) + writeBits(nibbles*4, uint64(len)-1, storage_ix, storage) + + /* ISUNCOMPRESSED */ + writeSingleBit(is_uncompressed, storage_ix, storage) +} + +func createCommands(input []byte, block_size uint, input_size uint, base_ip_ptr []byte, table []int, table_bits uint, min_match uint, literals *[]byte, commands *[]uint32) { + var ip int = 0 + var shift uint = 64 - table_bits + var ip_end int = int(block_size) + var base_ip int = -cap(base_ip_ptr) + cap(input) + var next_emit int = 0 + var last_distance int = -1 + /* "ip" is the input pointer. */ + + const kInputMarginBytes uint = windowGap + + /* "next_emit" is a pointer to the first byte that is not covered by a + previous copy. Bytes between "next_emit" and the start of the next copy or + the end of the input will be emitted as literal bytes. */ + if block_size >= kInputMarginBytes { + var len_limit uint = brotli_min_size_t(block_size-min_match, input_size-kInputMarginBytes) + var ip_limit int = int(len_limit) + /* For the last block, we need to keep a 16 bytes margin so that we can be + sure that all distances are at most window size - 16. + For all other blocks, we only need to keep a margin of 5 bytes so that + we don't go over the block size with a copy. */ + + var next_hash uint32 + ip++ + for next_hash = hash1(input[ip:], shift, min_match); ; { + var skip uint32 = 32 + var next_ip int = ip + /* Step 1: Scan forward in the input looking for a 6-byte-long match. + If we get close to exhausting the input then goto emit_remainder. + + Heuristic match skipping: If 32 bytes are scanned with no matches + found, start looking only at every other byte. If 32 more bytes are + scanned, look at every third byte, etc.. When a match is found, + immediately go back to looking at every byte. This is a small loss + (~5% performance, ~0.1% density) for compressible data due to more + bookkeeping, but for non-compressible data (such as JPEG) it's a huge + win since the compressor quickly "realizes" the data is incompressible + and doesn't bother looking for matches everywhere. + + The "skip" variable keeps track of how many bytes there are since the + last match; dividing it by 32 (ie. right-shifting by five) gives the + number of bytes to move ahead for each iteration. */ + + var candidate int + + assert(next_emit < ip) + + trawl: + for { + var hash uint32 = next_hash + var bytes_between_hash_lookups uint32 = skip >> 5 + skip++ + ip = next_ip + assert(hash == hash1(input[ip:], shift, min_match)) + next_ip = int(uint32(ip) + bytes_between_hash_lookups) + if next_ip > ip_limit { + goto emit_remainder + } + + next_hash = hash1(input[next_ip:], shift, min_match) + candidate = ip - last_distance + if isMatch1(input[ip:], base_ip_ptr[candidate-base_ip:], min_match) { + if candidate < ip { + table[hash] = int(ip - base_ip) + break + } + } + + candidate = base_ip + table[hash] + assert(candidate >= base_ip) + assert(candidate < ip) + + table[hash] = int(ip - base_ip) + if isMatch1(input[ip:], base_ip_ptr[candidate-base_ip:], min_match) { + break + } + } + + /* Check copy distance. If candidate is not feasible, continue search. + Checking is done outside of hot loop to reduce overhead. */ + if ip-candidate > maxDistance_compress_fragment { + goto trawl + } + + /* Step 2: Emit the found match together with the literal bytes from + "next_emit", and then see if we can find a next match immediately + afterwards. Repeat until we find no match for the input + without emitting some literal bytes. */ + { + var base int = ip + /* > 0 */ + var matched uint = min_match + findMatchLengthWithLimit(base_ip_ptr[uint(candidate-base_ip)+min_match:], input[uint(ip)+min_match:], uint(ip_end-ip)-min_match) + var distance int = int(base - candidate) + /* We have a 6-byte match at ip, and we need to emit bytes in + [next_emit, ip). */ + + var insert int = int(base - next_emit) + ip += int(matched) + emitInsertLen(uint32(insert), commands) + copy(*literals, input[next_emit:][:uint(insert)]) + *literals = (*literals)[insert:] + if distance == last_distance { + (*commands)[0] = 64 + *commands = (*commands)[1:] + } else { + emitDistance(uint32(distance), commands) + last_distance = distance + } + + emitCopyLenLastDistance(matched, commands) + + next_emit = ip + if ip >= ip_limit { + goto emit_remainder + } + { + var input_bytes uint64 + var cur_hash uint32 + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some + positions within the last copy. */ + + var prev_hash uint32 + if min_match == 4 { + input_bytes = binary.LittleEndian.Uint64(input[ip-3:]) + cur_hash = hashBytesAtOffset(input_bytes, 3, shift, min_match) + prev_hash = hashBytesAtOffset(input_bytes, 0, shift, min_match) + table[prev_hash] = int(ip - base_ip - 3) + prev_hash = hashBytesAtOffset(input_bytes, 1, shift, min_match) + table[prev_hash] = int(ip - base_ip - 2) + prev_hash = hashBytesAtOffset(input_bytes, 0, shift, min_match) + table[prev_hash] = int(ip - base_ip - 1) + } else { + input_bytes = binary.LittleEndian.Uint64(input[ip-5:]) + prev_hash = hashBytesAtOffset(input_bytes, 0, shift, min_match) + table[prev_hash] = int(ip - base_ip - 5) + prev_hash = hashBytesAtOffset(input_bytes, 1, shift, min_match) + table[prev_hash] = int(ip - base_ip - 4) + prev_hash = hashBytesAtOffset(input_bytes, 2, shift, min_match) + table[prev_hash] = int(ip - base_ip - 3) + input_bytes = binary.LittleEndian.Uint64(input[ip-2:]) + cur_hash = hashBytesAtOffset(input_bytes, 2, shift, min_match) + prev_hash = hashBytesAtOffset(input_bytes, 0, shift, min_match) + table[prev_hash] = int(ip - base_ip - 2) + prev_hash = hashBytesAtOffset(input_bytes, 1, shift, min_match) + table[prev_hash] = int(ip - base_ip - 1) + } + + candidate = base_ip + table[cur_hash] + table[cur_hash] = int(ip - base_ip) + } + } + + for ip-candidate <= maxDistance_compress_fragment && isMatch1(input[ip:], base_ip_ptr[candidate-base_ip:], min_match) { + var base int = ip + /* We have a 6-byte match at ip, and no need to emit any + literal bytes prior to ip. */ + + var matched uint = min_match + findMatchLengthWithLimit(base_ip_ptr[uint(candidate-base_ip)+min_match:], input[uint(ip)+min_match:], uint(ip_end-ip)-min_match) + ip += int(matched) + last_distance = int(base - candidate) /* > 0 */ + emitCopyLen(matched, commands) + emitDistance(uint32(last_distance), commands) + + next_emit = ip + if ip >= ip_limit { + goto emit_remainder + } + { + var input_bytes uint64 + var cur_hash uint32 + /* We could immediately start working at ip now, but to improve + compression we first update "table" with the hashes of some + positions within the last copy. */ + + var prev_hash uint32 + if min_match == 4 { + input_bytes = binary.LittleEndian.Uint64(input[ip-3:]) + cur_hash = hashBytesAtOffset(input_bytes, 3, shift, min_match) + prev_hash = hashBytesAtOffset(input_bytes, 0, shift, min_match) + table[prev_hash] = int(ip - base_ip - 3) + prev_hash = hashBytesAtOffset(input_bytes, 1, shift, min_match) + table[prev_hash] = int(ip - base_ip - 2) + prev_hash = hashBytesAtOffset(input_bytes, 2, shift, min_match) + table[prev_hash] = int(ip - base_ip - 1) + } else { + input_bytes = binary.LittleEndian.Uint64(input[ip-5:]) + prev_hash = hashBytesAtOffset(input_bytes, 0, shift, min_match) + table[prev_hash] = int(ip - base_ip - 5) + prev_hash = hashBytesAtOffset(input_bytes, 1, shift, min_match) + table[prev_hash] = int(ip - base_ip - 4) + prev_hash = hashBytesAtOffset(input_bytes, 2, shift, min_match) + table[prev_hash] = int(ip - base_ip - 3) + input_bytes = binary.LittleEndian.Uint64(input[ip-2:]) + cur_hash = hashBytesAtOffset(input_bytes, 2, shift, min_match) + prev_hash = hashBytesAtOffset(input_bytes, 0, shift, min_match) + table[prev_hash] = int(ip - base_ip - 2) + prev_hash = hashBytesAtOffset(input_bytes, 1, shift, min_match) + table[prev_hash] = int(ip - base_ip - 1) + } + + candidate = base_ip + table[cur_hash] + table[cur_hash] = int(ip - base_ip) + } + } + + ip++ + next_hash = hash1(input[ip:], shift, min_match) + } + } + +emit_remainder: + assert(next_emit <= ip_end) + + /* Emit the remaining bytes as literals. */ + if next_emit < ip_end { + var insert uint32 = uint32(ip_end - next_emit) + emitInsertLen(insert, commands) + copy(*literals, input[next_emit:][:insert]) + *literals = (*literals)[insert:] + } +} + +var storeCommands_kNumExtraBits = [128]uint32{ + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 7, + 8, + 9, + 10, + 12, + 14, + 24, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 7, + 8, + 9, + 10, + 24, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 9, + 10, + 10, + 11, + 11, + 12, + 12, + 13, + 13, + 14, + 14, + 15, + 15, + 16, + 16, + 17, + 17, + 18, + 18, + 19, + 19, + 20, + 20, + 21, + 21, + 22, + 22, + 23, + 23, + 24, + 24, +} +var storeCommands_kInsertOffset = [24]uint32{ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 8, + 10, + 14, + 18, + 26, + 34, + 50, + 66, + 98, + 130, + 194, + 322, + 578, + 1090, + 2114, + 6210, + 22594, +} + +func storeCommands(literals []byte, num_literals uint, commands []uint32, num_commands uint, storage_ix *uint, storage []byte) { + var lit_depths [256]byte + var lit_bits [256]uint16 + var lit_histo = [256]uint32{0} + var cmd_depths = [128]byte{0} + var cmd_bits = [128]uint16{0} + var cmd_histo = [128]uint32{0} + var i uint + for i = 0; i < num_literals; i++ { + lit_histo[literals[i]]++ + } + + buildAndStoreHuffmanTreeFast(lit_histo[:], num_literals, /* max_bits = */ + 8, lit_depths[:], lit_bits[:], storage_ix, storage) + + for i = 0; i < num_commands; i++ { + var code uint32 = commands[i] & 0xFF + assert(code < 128) + cmd_histo[code]++ + } + + cmd_histo[1] += 1 + cmd_histo[2] += 1 + cmd_histo[64] += 1 + cmd_histo[84] += 1 + buildAndStoreCommandPrefixCode(cmd_histo[:], cmd_depths[:], cmd_bits[:], storage_ix, storage) + + for i = 0; i < num_commands; i++ { + var cmd uint32 = commands[i] + var code uint32 = cmd & 0xFF + var extra uint32 = cmd >> 8 + assert(code < 128) + writeBits(uint(cmd_depths[code]), uint64(cmd_bits[code]), storage_ix, storage) + writeBits(uint(storeCommands_kNumExtraBits[code]), uint64(extra), storage_ix, storage) + if code < 24 { + var insert uint32 = storeCommands_kInsertOffset[code] + extra + var j uint32 + for j = 0; j < insert; j++ { + var lit byte = literals[0] + writeBits(uint(lit_depths[lit]), uint64(lit_bits[lit]), storage_ix, storage) + literals = literals[1:] + } + } + } +} + +/* Acceptable loss for uncompressible speedup is 2% */ +const minRatio = 0.98 + +const sampleRate = 43 + +func shouldCompress(input []byte, input_size uint, num_literals uint) bool { + var corpus_size float64 = float64(input_size) + if float64(num_literals) < minRatio*corpus_size { + return true + } else { + var literal_histo = [256]uint32{0} + var max_total_bit_cost float64 = corpus_size * 8 * minRatio / sampleRate + var i uint + for i = 0; i < input_size; i += sampleRate { + literal_histo[input[i]]++ + } + + return bitsEntropy(literal_histo[:], 256) < max_total_bit_cost + } +} + +func rewindBitPosition(new_storage_ix uint, storage_ix *uint, storage []byte) { + var bitpos uint = new_storage_ix & 7 + var mask uint = (1 << bitpos) - 1 + storage[new_storage_ix>>3] &= byte(mask) + *storage_ix = new_storage_ix +} + +func emitUncompressedMetaBlock(input []byte, input_size uint, storage_ix *uint, storage []byte) { + storeMetaBlockHeader(input_size, true, storage_ix, storage) + *storage_ix = (*storage_ix + 7) &^ 7 + copy(storage[*storage_ix>>3:], input[:input_size]) + *storage_ix += input_size << 3 + storage[*storage_ix>>3] = 0 +} + +func compressFragmentTwoPassImpl(input []byte, input_size uint, is_last bool, command_buf []uint32, literal_buf []byte, table []int, table_bits uint, min_match uint, storage_ix *uint, storage []byte) { + /* Save the start of the first block for position and distance computations. + */ + var base_ip []byte = input + + for input_size > 0 { + var block_size uint = brotli_min_size_t(input_size, kCompressFragmentTwoPassBlockSize) + var commands []uint32 = command_buf + var literals []byte = literal_buf + var num_literals uint + createCommands(input, block_size, input_size, base_ip, table, table_bits, min_match, &literals, &commands) + num_literals = uint(-cap(literals) + cap(literal_buf)) + if shouldCompress(input, block_size, num_literals) { + var num_commands uint = uint(-cap(commands) + cap(command_buf)) + storeMetaBlockHeader(block_size, false, storage_ix, storage) + + /* No block splits, no contexts. */ + writeBits(13, 0, storage_ix, storage) + + storeCommands(literal_buf, num_literals, command_buf, num_commands, storage_ix, storage) + } else { + /* Since we did not find many backward references and the entropy of + the data is close to 8 bits, we can simply emit an uncompressed block. + This makes compression speed of uncompressible data about 3x faster. */ + emitUncompressedMetaBlock(input, block_size, storage_ix, storage) + } + + input = input[block_size:] + input_size -= block_size + } +} + +/* Compresses "input" string to the "*storage" buffer as one or more complete + meta-blocks, and updates the "*storage_ix" bit position. + + If "is_last" is 1, emits an additional empty last meta-block. + + REQUIRES: "input_size" is greater than zero, or "is_last" is 1. + REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24). + REQUIRES: "command_buf" and "literal_buf" point to at least + kCompressFragmentTwoPassBlockSize long arrays. + REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero. + REQUIRES: "table_size" is a power of two + OUTPUT: maximal copy distance <= |input_size| + OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */ +func compressFragmentTwoPass(input []byte, input_size uint, is_last bool, command_buf []uint32, literal_buf []byte, table []int, table_size uint, storage_ix *uint, storage []byte) { + var initial_storage_ix uint = *storage_ix + var table_bits uint = uint(log2FloorNonZero(table_size)) + var min_match uint + if table_bits <= 15 { + min_match = 4 + } else { + min_match = 6 + } + compressFragmentTwoPassImpl(input, input_size, is_last, command_buf, literal_buf, table, table_bits, min_match, storage_ix, storage) + + /* If output is larger than single uncompressed block, rewrite it. */ + if *storage_ix-initial_storage_ix > 31+(input_size<<3) { + rewindBitPosition(initial_storage_ix, storage_ix, storage) + emitUncompressedMetaBlock(input, input_size, storage_ix, storage) + } + + if is_last { + writeBits(1, 1, storage_ix, storage) /* islast */ + writeBits(1, 1, storage_ix, storage) /* isempty */ + *storage_ix = (*storage_ix + 7) &^ 7 + } +} diff --git a/vendor/github.com/andybalholm/brotli/constants.go b/vendor/github.com/andybalholm/brotli/constants.go new file mode 100644 index 0000000000..a880dff789 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/constants.go @@ -0,0 +1,77 @@ +package brotli + +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Specification: 7.3. Encoding of the context map */ +const contextMapMaxRle = 16 + +/* Specification: 2. Compressed representation overview */ +const maxNumberOfBlockTypes = 256 + +/* Specification: 3.3. Alphabet sizes: insert-and-copy length */ +const numLiteralSymbols = 256 + +const numCommandSymbols = 704 + +const numBlockLenSymbols = 26 + +const maxContextMapSymbols = (maxNumberOfBlockTypes + contextMapMaxRle) + +const maxBlockTypeSymbols = (maxNumberOfBlockTypes + 2) + +/* Specification: 3.5. Complex prefix codes */ +const repeatPreviousCodeLength = 16 + +const repeatZeroCodeLength = 17 + +const codeLengthCodes = (repeatZeroCodeLength + 1) + +/* "code length of 8 is repeated" */ +const initialRepeatedCodeLength = 8 + +/* "Large Window Brotli" */ +const largeMaxDistanceBits = 62 + +const largeMinWbits = 10 + +const largeMaxWbits = 30 + +/* Specification: 4. Encoding of distances */ +const numDistanceShortCodes = 16 + +const maxNpostfix = 3 + +const maxNdirect = 120 + +const maxDistanceBits = 24 + +func distanceAlphabetSize(NPOSTFIX uint, NDIRECT uint, MAXNBITS uint) uint { + return numDistanceShortCodes + NDIRECT + uint(MAXNBITS<<(NPOSTFIX+1)) +} + +/* numDistanceSymbols == 1128 */ +const numDistanceSymbols = 1128 + +const maxDistance = 0x3FFFFFC + +const maxAllowedDistance = 0x7FFFFFFC + +/* 7.1. Context modes and context ID lookup for literals */ +/* "context IDs for literals are in the range of 0..63" */ +const literalContextBits = 6 + +/* 7.2. Context ID for distances */ +const distanceContextBits = 2 + +/* 9.1. Format of the Stream Header */ +/* Number of slack bytes for window size. Don't confuse + with BROTLI_NUM_DISTANCE_SHORT_CODES. */ +const windowGap = 16 + +func maxBackwardLimit(W uint) uint { + return (uint(1) << W) - windowGap +} diff --git a/vendor/github.com/andybalholm/brotli/context.go b/vendor/github.com/andybalholm/brotli/context.go new file mode 100644 index 0000000000..884ff8a2d6 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/context.go @@ -0,0 +1,2176 @@ +package brotli + +/* Lookup table to map the previous two bytes to a context id. + +There are four different context modeling modes defined here: + contextLSB6: context id is the least significant 6 bits of the last byte, + contextMSB6: context id is the most significant 6 bits of the last byte, + contextUTF8: second-order context model tuned for UTF8-encoded text, + contextSigned: second-order context model tuned for signed integers. + +If |p1| and |p2| are the previous two bytes, and |mode| is current context +mode, we calculate the context as: + + context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256]. + +For contextUTF8 mode, if the previous two bytes are ASCII characters +(i.e. < 128), this will be equivalent to + + context = 4 * context1(p1) + context2(p2), + +where context1 is based on the previous byte in the following way: + + 0 : non-ASCII control + 1 : \t, \n, \r + 2 : space + 3 : other punctuation + 4 : " ' + 5 : % + 6 : ( < [ { + 7 : ) > ] } + 8 : , ; : + 9 : . + 10 : = + 11 : number + 12 : upper-case vowel + 13 : upper-case consonant + 14 : lower-case vowel + 15 : lower-case consonant + +and context2 is based on the second last byte: + + 0 : control, space + 1 : punctuation + 2 : upper-case letter, number + 3 : lower-case letter + +If the last byte is ASCII, and the second last byte is not (in a valid UTF8 +stream it will be a continuation byte, value between 128 and 191), the +context is the same as if the second last byte was an ASCII control or space. + +If the last byte is a UTF8 lead byte (value >= 192), then the next byte will +be a continuation byte and the context id is 2 or 3 depending on the LSB of +the last byte and to a lesser extent on the second last byte if it is ASCII. + +If the last byte is a UTF8 continuation byte, the second last byte can be: + - continuation byte: the next byte is probably ASCII or lead byte (assuming + 4-byte UTF8 characters are rare) and the context id is 0 or 1. + - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1 + - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3 + +The possible value combinations of the previous two bytes, the range of +context ids and the type of the next byte is summarized in the table below: + +|--------\-----------------------------------------------------------------| +| \ Last byte | +| Second \---------------------------------------------------------------| +| last byte \ ASCII | cont. byte | lead byte | +| \ (0-127) | (128-191) | (192-) | +|=============|===================|=====================|==================| +| ASCII | next: ASCII/lead | not valid | next: cont. | +| (0-127) | context: 4 - 63 | | context: 2 - 3 | +|-------------|-------------------|---------------------|------------------| +| cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. | +| (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 | +|-------------|-------------------|---------------------|------------------| +| lead byte | not valid | next: ASCII/lead | not valid | +| (192-207) | | context: 0 - 1 | | +|-------------|-------------------|---------------------|------------------| +| lead byte | not valid | next: cont. | not valid | +| (208-) | | context: 2 - 3 | | +|-------------|-------------------|---------------------|------------------| +*/ + +const ( + contextLSB6 = 0 + contextMSB6 = 1 + contextUTF8 = 2 + contextSigned = 3 +) + +/* Common context lookup table for all context modes. */ +var kContextLookup = [2048]byte{ + /* CONTEXT_LSB6, last byte. */ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + + /* CONTEXT_LSB6, second last byte, */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + /* CONTEXT_MSB6, last byte. */ + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 6, + 6, + 6, + 6, + 7, + 7, + 7, + 7, + 8, + 8, + 8, + 8, + 9, + 9, + 9, + 9, + 10, + 10, + 10, + 10, + 11, + 11, + 11, + 11, + 12, + 12, + 12, + 12, + 13, + 13, + 13, + 13, + 14, + 14, + 14, + 14, + 15, + 15, + 15, + 15, + 16, + 16, + 16, + 16, + 17, + 17, + 17, + 17, + 18, + 18, + 18, + 18, + 19, + 19, + 19, + 19, + 20, + 20, + 20, + 20, + 21, + 21, + 21, + 21, + 22, + 22, + 22, + 22, + 23, + 23, + 23, + 23, + 24, + 24, + 24, + 24, + 25, + 25, + 25, + 25, + 26, + 26, + 26, + 26, + 27, + 27, + 27, + 27, + 28, + 28, + 28, + 28, + 29, + 29, + 29, + 29, + 30, + 30, + 30, + 30, + 31, + 31, + 31, + 31, + 32, + 32, + 32, + 32, + 33, + 33, + 33, + 33, + 34, + 34, + 34, + 34, + 35, + 35, + 35, + 35, + 36, + 36, + 36, + 36, + 37, + 37, + 37, + 37, + 38, + 38, + 38, + 38, + 39, + 39, + 39, + 39, + 40, + 40, + 40, + 40, + 41, + 41, + 41, + 41, + 42, + 42, + 42, + 42, + 43, + 43, + 43, + 43, + 44, + 44, + 44, + 44, + 45, + 45, + 45, + 45, + 46, + 46, + 46, + 46, + 47, + 47, + 47, + 47, + 48, + 48, + 48, + 48, + 49, + 49, + 49, + 49, + 50, + 50, + 50, + 50, + 51, + 51, + 51, + 51, + 52, + 52, + 52, + 52, + 53, + 53, + 53, + 53, + 54, + 54, + 54, + 54, + 55, + 55, + 55, + 55, + 56, + 56, + 56, + 56, + 57, + 57, + 57, + 57, + 58, + 58, + 58, + 58, + 59, + 59, + 59, + 59, + 60, + 60, + 60, + 60, + 61, + 61, + 61, + 61, + 62, + 62, + 62, + 62, + 63, + 63, + 63, + 63, + + /* CONTEXT_MSB6, second last byte, */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + /* CONTEXT_UTF8, last byte. */ + /* ASCII range. */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4, + 4, + 0, + 0, + 4, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8, + 12, + 16, + 12, + 12, + 20, + 12, + 16, + 24, + 28, + 12, + 12, + 32, + 12, + 36, + 12, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 44, + 32, + 32, + 24, + 40, + 28, + 12, + 12, + 48, + 52, + 52, + 52, + 48, + 52, + 52, + 52, + 48, + 52, + 52, + 52, + 52, + 52, + 48, + 52, + 52, + 52, + 52, + 52, + 48, + 52, + 52, + 52, + 52, + 52, + 24, + 12, + 28, + 12, + 12, + 12, + 56, + 60, + 60, + 60, + 56, + 60, + 60, + 60, + 56, + 60, + 60, + 60, + 60, + 60, + 56, + 60, + 60, + 60, + 60, + 60, + 56, + 60, + 60, + 60, + 60, + 60, + 24, + 12, + 28, + 12, + 0, + + /* UTF8 continuation byte range. */ + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + 0, + 1, + + /* UTF8 lead byte range. */ + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + 2, + 3, + + /* CONTEXT_UTF8 second last byte. */ + /* ASCII range. */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 1, + 1, + 1, + 1, + 1, + 1, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 1, + 1, + 1, + 1, + 0, + + /* UTF8 continuation byte range. */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + + /* UTF8 lead byte range. */ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + + /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */ + 0, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 8, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 16, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 32, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 40, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 48, + 56, + + /* CONTEXT_SIGNED, second last byte. */ + 0, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 5, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 7, +} + +type contextLUT []byte + +func getContextLUT(mode int) contextLUT { + return kContextLookup[mode<<9:] +} + +func getContext(p1 byte, p2 byte, lut contextLUT) byte { + return lut[p1] | lut[256+int(p2)] +} diff --git a/vendor/github.com/andybalholm/brotli/decode.go b/vendor/github.com/andybalholm/brotli/decode.go new file mode 100644 index 0000000000..6a73b88af2 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/decode.go @@ -0,0 +1,2586 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +const ( + decoderResultError = 0 + decoderResultSuccess = 1 + decoderResultNeedsMoreInput = 2 + decoderResultNeedsMoreOutput = 3 +) + +/** + * Error code for detailed logging / production debugging. + * + * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE. + */ +const ( + decoderNoError = 0 + decoderSuccess = 1 + decoderNeedsMoreInput = 2 + decoderNeedsMoreOutput = 3 + decoderErrorFormatExuberantNibble = -1 + decoderErrorFormatReserved = -2 + decoderErrorFormatExuberantMetaNibble = -3 + decoderErrorFormatSimpleHuffmanAlphabet = -4 + decoderErrorFormatSimpleHuffmanSame = -5 + decoderErrorFormatClSpace = -6 + decoderErrorFormatHuffmanSpace = -7 + decoderErrorFormatContextMapRepeat = -8 + decoderErrorFormatBlockLength1 = -9 + decoderErrorFormatBlockLength2 = -10 + decoderErrorFormatTransform = -11 + decoderErrorFormatDictionary = -12 + decoderErrorFormatWindowBits = -13 + decoderErrorFormatPadding1 = -14 + decoderErrorFormatPadding2 = -15 + decoderErrorFormatDistance = -16 + decoderErrorDictionaryNotSet = -19 + decoderErrorInvalidArguments = -20 + decoderErrorAllocContextModes = -21 + decoderErrorAllocTreeGroups = -22 + decoderErrorAllocContextMap = -25 + decoderErrorAllocRingBuffer1 = -26 + decoderErrorAllocRingBuffer2 = -27 + decoderErrorAllocBlockTypeTrees = -30 + decoderErrorUnreachable = -31 +) + +const huffmanTableBits = 8 + +const huffmanTableMask = 0xFF + +/* We need the slack region for the following reasons: + - doing up to two 16-byte copies for fast backward copying + - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */ +const kRingBufferWriteAheadSlack uint32 = 42 + +var kCodeLengthCodeOrder = [codeLengthCodes]byte{1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15} + +/* Static prefix code for the complex code length code lengths. */ +var kCodeLengthPrefixLength = [16]byte{2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4} + +var kCodeLengthPrefixValue = [16]byte{0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5} + +/* Saves error code and converts it to BrotliDecoderResult. */ +func saveErrorCode(s *Reader, e int) int { + s.error_code = int(e) + switch e { + case decoderSuccess: + return decoderResultSuccess + + case decoderNeedsMoreInput: + return decoderResultNeedsMoreInput + + case decoderNeedsMoreOutput: + return decoderResultNeedsMoreOutput + + default: + return decoderResultError + } +} + +/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for "Large Window Brotli". + Precondition: bit-reader accumulator has at least 8 bits. */ +func decodeWindowBits(s *Reader, br *bitReader) int { + var n uint32 + var large_window bool = s.large_window + s.large_window = false + takeBits(br, 1, &n) + if n == 0 { + s.window_bits = 16 + return decoderSuccess + } + + takeBits(br, 3, &n) + if n != 0 { + s.window_bits = 17 + n + return decoderSuccess + } + + takeBits(br, 3, &n) + if n == 1 { + if large_window { + takeBits(br, 1, &n) + if n == 1 { + return decoderErrorFormatWindowBits + } + + s.large_window = true + return decoderSuccess + } else { + return decoderErrorFormatWindowBits + } + } + + if n != 0 { + s.window_bits = 8 + n + return decoderSuccess + } + + s.window_bits = 17 + return decoderSuccess +} + +/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */ +func decodeVarLenUint8(s *Reader, br *bitReader, value *uint32) int { + var bits uint32 + switch s.substate_decode_uint8 { + case stateDecodeUint8None: + if !safeReadBits(br, 1, &bits) { + return decoderNeedsMoreInput + } + + if bits == 0 { + *value = 0 + return decoderSuccess + } + fallthrough + + /* Fall through. */ + case stateDecodeUint8Short: + if !safeReadBits(br, 3, &bits) { + s.substate_decode_uint8 = stateDecodeUint8Short + return decoderNeedsMoreInput + } + + if bits == 0 { + *value = 1 + s.substate_decode_uint8 = stateDecodeUint8None + return decoderSuccess + } + + /* Use output value as a temporary storage. It MUST be persisted. */ + *value = bits + fallthrough + + /* Fall through. */ + case stateDecodeUint8Long: + if !safeReadBits(br, *value, &bits) { + s.substate_decode_uint8 = stateDecodeUint8Long + return decoderNeedsMoreInput + } + + *value = (1 << *value) + bits + s.substate_decode_uint8 = stateDecodeUint8None + return decoderSuccess + + default: + return decoderErrorUnreachable + } +} + +/* Decodes a metablock length and flags by reading 2 - 31 bits. */ +func decodeMetaBlockLength(s *Reader, br *bitReader) int { + var bits uint32 + var i int + for { + switch s.substate_metablock_header { + case stateMetablockHeaderNone: + if !safeReadBits(br, 1, &bits) { + return decoderNeedsMoreInput + } + + if bits != 0 { + s.is_last_metablock = 1 + } else { + s.is_last_metablock = 0 + } + s.meta_block_remaining_len = 0 + s.is_uncompressed = 0 + s.is_metadata = 0 + if s.is_last_metablock == 0 { + s.substate_metablock_header = stateMetablockHeaderNibbles + break + } + + s.substate_metablock_header = stateMetablockHeaderEmpty + fallthrough + + /* Fall through. */ + case stateMetablockHeaderEmpty: + if !safeReadBits(br, 1, &bits) { + return decoderNeedsMoreInput + } + + if bits != 0 { + s.substate_metablock_header = stateMetablockHeaderNone + return decoderSuccess + } + + s.substate_metablock_header = stateMetablockHeaderNibbles + fallthrough + + /* Fall through. */ + case stateMetablockHeaderNibbles: + if !safeReadBits(br, 2, &bits) { + return decoderNeedsMoreInput + } + + s.size_nibbles = uint(byte(bits + 4)) + s.loop_counter = 0 + if bits == 3 { + s.is_metadata = 1 + s.substate_metablock_header = stateMetablockHeaderReserved + break + } + + s.substate_metablock_header = stateMetablockHeaderSize + fallthrough + + /* Fall through. */ + case stateMetablockHeaderSize: + i = s.loop_counter + + for ; i < int(s.size_nibbles); i++ { + if !safeReadBits(br, 4, &bits) { + s.loop_counter = i + return decoderNeedsMoreInput + } + + if uint(i+1) == s.size_nibbles && s.size_nibbles > 4 && bits == 0 { + return decoderErrorFormatExuberantNibble + } + + s.meta_block_remaining_len |= int(bits << uint(i*4)) + } + + s.substate_metablock_header = stateMetablockHeaderUncompressed + fallthrough + + /* Fall through. */ + case stateMetablockHeaderUncompressed: + if s.is_last_metablock == 0 { + if !safeReadBits(br, 1, &bits) { + return decoderNeedsMoreInput + } + + if bits != 0 { + s.is_uncompressed = 1 + } else { + s.is_uncompressed = 0 + } + } + + s.meta_block_remaining_len++ + s.substate_metablock_header = stateMetablockHeaderNone + return decoderSuccess + + case stateMetablockHeaderReserved: + if !safeReadBits(br, 1, &bits) { + return decoderNeedsMoreInput + } + + if bits != 0 { + return decoderErrorFormatReserved + } + + s.substate_metablock_header = stateMetablockHeaderBytes + fallthrough + + /* Fall through. */ + case stateMetablockHeaderBytes: + if !safeReadBits(br, 2, &bits) { + return decoderNeedsMoreInput + } + + if bits == 0 { + s.substate_metablock_header = stateMetablockHeaderNone + return decoderSuccess + } + + s.size_nibbles = uint(byte(bits)) + s.substate_metablock_header = stateMetablockHeaderMetadata + fallthrough + + /* Fall through. */ + case stateMetablockHeaderMetadata: + i = s.loop_counter + + for ; i < int(s.size_nibbles); i++ { + if !safeReadBits(br, 8, &bits) { + s.loop_counter = i + return decoderNeedsMoreInput + } + + if uint(i+1) == s.size_nibbles && s.size_nibbles > 1 && bits == 0 { + return decoderErrorFormatExuberantMetaNibble + } + + s.meta_block_remaining_len |= int(bits << uint(i*8)) + } + + s.meta_block_remaining_len++ + s.substate_metablock_header = stateMetablockHeaderNone + return decoderSuccess + + default: + return decoderErrorUnreachable + } + } +} + +/* Decodes the Huffman code. + This method doesn't read data from the bit reader, BUT drops the amount of + bits that correspond to the decoded symbol. + bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH) valid bits. */ +func decodeSymbol(bits uint32, table []huffmanCode, br *bitReader) uint32 { + table = table[bits&huffmanTableMask:] + if table[0].bits > huffmanTableBits { + var nbits uint32 = uint32(table[0].bits) - huffmanTableBits + dropBits(br, huffmanTableBits) + table = table[uint32(table[0].value)+((bits>>huffmanTableBits)&bitMask(nbits)):] + } + + dropBits(br, uint32(table[0].bits)) + return uint32(table[0].value) +} + +/* Reads and decodes the next Huffman code from bit-stream. + This method peeks 16 bits of input and drops 0 - 15 of them. */ +func readSymbol(table []huffmanCode, br *bitReader) uint32 { + return decodeSymbol(get16BitsUnmasked(br), table, br) +} + +/* Same as DecodeSymbol, but it is known that there is less than 15 bits of + input are currently available. */ +func safeDecodeSymbol(table []huffmanCode, br *bitReader, result *uint32) bool { + var val uint32 + var available_bits uint32 = getAvailableBits(br) + if available_bits == 0 { + if table[0].bits == 0 { + *result = uint32(table[0].value) + return true + } + + return false /* No valid bits at all. */ + } + + val = uint32(getBitsUnmasked(br)) + table = table[val&huffmanTableMask:] + if table[0].bits <= huffmanTableBits { + if uint32(table[0].bits) <= available_bits { + dropBits(br, uint32(table[0].bits)) + *result = uint32(table[0].value) + return true + } else { + return false /* Not enough bits for the first level. */ + } + } + + if available_bits <= huffmanTableBits { + return false /* Not enough bits to move to the second level. */ + } + + /* Speculatively drop HUFFMAN_TABLE_BITS. */ + val = (val & bitMask(uint32(table[0].bits))) >> huffmanTableBits + + available_bits -= huffmanTableBits + table = table[uint32(table[0].value)+val:] + if available_bits < uint32(table[0].bits) { + return false /* Not enough bits for the second level. */ + } + + dropBits(br, huffmanTableBits+uint32(table[0].bits)) + *result = uint32(table[0].value) + return true +} + +func safeReadSymbol(table []huffmanCode, br *bitReader, result *uint32) bool { + var val uint32 + if safeGetBits(br, 15, &val) { + *result = decodeSymbol(val, table, br) + return true + } + + return safeDecodeSymbol(table, br, result) +} + +/* Makes a look-up in first level Huffman table. Peeks 8 bits. */ +func preloadSymbol(safe int, table []huffmanCode, br *bitReader, bits *uint32, value *uint32) { + if safe != 0 { + return + } + + table = table[getBits(br, huffmanTableBits):] + *bits = uint32(table[0].bits) + *value = uint32(table[0].value) +} + +/* Decodes the next Huffman code using data prepared by PreloadSymbol. + Reads 0 - 15 bits. Also peeks 8 following bits. */ +func readPreloadedSymbol(table []huffmanCode, br *bitReader, bits *uint32, value *uint32) uint32 { + var result uint32 = *value + var ext []huffmanCode + if *bits > huffmanTableBits { + var val uint32 = get16BitsUnmasked(br) + ext = table[val&huffmanTableMask:][*value:] + var mask uint32 = bitMask((*bits - huffmanTableBits)) + dropBits(br, huffmanTableBits) + ext = ext[(val>>huffmanTableBits)&mask:] + dropBits(br, uint32(ext[0].bits)) + result = uint32(ext[0].value) + } else { + dropBits(br, *bits) + } + + preloadSymbol(0, table, br, bits, value) + return result +} + +func log2Floor(x uint32) uint32 { + var result uint32 = 0 + for x != 0 { + x >>= 1 + result++ + } + + return result +} + +/* Reads (s->symbol + 1) symbols. + Totally 1..4 symbols are read, 1..11 bits each. + The list of symbols MUST NOT contain duplicates. */ +func readSimpleHuffmanSymbols(alphabet_size uint32, max_symbol uint32, s *Reader) int { + var br *bitReader = &s.br + var max_bits uint32 = log2Floor(alphabet_size - 1) + var i uint32 = s.sub_loop_counter + /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */ + + var num_symbols uint32 = s.symbol + for i <= num_symbols { + var v uint32 + if !safeReadBits(br, max_bits, &v) { + s.sub_loop_counter = i + s.substate_huffman = stateHuffmanSimpleRead + return decoderNeedsMoreInput + } + + if v >= max_symbol { + return decoderErrorFormatSimpleHuffmanAlphabet + } + + s.symbols_lists_array[i] = uint16(v) + i++ + } + + for i = 0; i < num_symbols; i++ { + var k uint32 = i + 1 + for ; k <= num_symbols; k++ { + if s.symbols_lists_array[i] == s.symbols_lists_array[k] { + return decoderErrorFormatSimpleHuffmanSame + } + } + } + + return decoderSuccess +} + +/* Process single decoded symbol code length: + A) reset the repeat variable + B) remember code length (if it is not 0) + C) extend corresponding index-chain + D) reduce the Huffman space + E) update the histogram */ +func processSingleCodeLength(code_len uint32, symbol *uint32, repeat *uint32, space *uint32, prev_code_len *uint32, symbol_lists symbolList, code_length_histo []uint16, next_symbol []int) { + *repeat = 0 + if code_len != 0 { /* code_len == 1..15 */ + symbolListPut(symbol_lists, next_symbol[code_len], uint16(*symbol)) + next_symbol[code_len] = int(*symbol) + *prev_code_len = code_len + *space -= 32768 >> code_len + code_length_histo[code_len]++ + } + + (*symbol)++ +} + +/* Process repeated symbol code length. + A) Check if it is the extension of previous repeat sequence; if the decoded + value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new + symbol-skip + B) Update repeat variable + C) Check if operation is feasible (fits alphabet) + D) For each symbol do the same operations as in ProcessSingleCodeLength + + PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or + code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */ +func processRepeatedCodeLength(code_len uint32, repeat_delta uint32, alphabet_size uint32, symbol *uint32, repeat *uint32, space *uint32, prev_code_len *uint32, repeat_code_len *uint32, symbol_lists symbolList, code_length_histo []uint16, next_symbol []int) { + var old_repeat uint32 /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */ /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */ + var extra_bits uint32 = 3 + var new_len uint32 = 0 + if code_len == repeatPreviousCodeLength { + new_len = *prev_code_len + extra_bits = 2 + } + + if *repeat_code_len != new_len { + *repeat = 0 + *repeat_code_len = new_len + } + + old_repeat = *repeat + if *repeat > 0 { + *repeat -= 2 + *repeat <<= extra_bits + } + + *repeat += repeat_delta + 3 + repeat_delta = *repeat - old_repeat + if *symbol+repeat_delta > alphabet_size { + *symbol = alphabet_size + *space = 0xFFFFF + return + } + + if *repeat_code_len != 0 { + var last uint = uint(*symbol + repeat_delta) + var next int = next_symbol[*repeat_code_len] + for { + symbolListPut(symbol_lists, next, uint16(*symbol)) + next = int(*symbol) + (*symbol)++ + if (*symbol) == uint32(last) { + break + } + } + + next_symbol[*repeat_code_len] = next + *space -= repeat_delta << (15 - *repeat_code_len) + code_length_histo[*repeat_code_len] = uint16(uint32(code_length_histo[*repeat_code_len]) + repeat_delta) + } else { + *symbol += repeat_delta + } +} + +/* Reads and decodes symbol codelengths. */ +func readSymbolCodeLengths(alphabet_size uint32, s *Reader) int { + var br *bitReader = &s.br + var symbol uint32 = s.symbol + var repeat uint32 = s.repeat + var space uint32 = s.space + var prev_code_len uint32 = s.prev_code_len + var repeat_code_len uint32 = s.repeat_code_len + var symbol_lists symbolList = s.symbol_lists + var code_length_histo []uint16 = s.code_length_histo[:] + var next_symbol []int = s.next_symbol[:] + if !warmupBitReader(br) { + return decoderNeedsMoreInput + } + var p []huffmanCode + for symbol < alphabet_size && space > 0 { + p = s.table[:] + var code_len uint32 + if !checkInputAmount(br, shortFillBitWindowRead) { + s.symbol = symbol + s.repeat = repeat + s.prev_code_len = prev_code_len + s.repeat_code_len = repeat_code_len + s.space = space + return decoderNeedsMoreInput + } + + fillBitWindow16(br) + p = p[getBitsUnmasked(br)&uint64(bitMask(huffmanMaxCodeLengthCodeLength)):] + dropBits(br, uint32(p[0].bits)) /* Use 1..5 bits. */ + code_len = uint32(p[0].value) /* code_len == 0..17 */ + if code_len < repeatPreviousCodeLength { + processSingleCodeLength(code_len, &symbol, &repeat, &space, &prev_code_len, symbol_lists, code_length_histo, next_symbol) /* code_len == 16..17, extra_bits == 2..3 */ + } else { + var extra_bits uint32 + if code_len == repeatPreviousCodeLength { + extra_bits = 2 + } else { + extra_bits = 3 + } + var repeat_delta uint32 = uint32(getBitsUnmasked(br)) & bitMask(extra_bits) + dropBits(br, extra_bits) + processRepeatedCodeLength(code_len, repeat_delta, alphabet_size, &symbol, &repeat, &space, &prev_code_len, &repeat_code_len, symbol_lists, code_length_histo, next_symbol) + } + } + + s.space = space + return decoderSuccess +} + +func safeReadSymbolCodeLengths(alphabet_size uint32, s *Reader) int { + var br *bitReader = &s.br + var get_byte bool = false + var p []huffmanCode + for s.symbol < alphabet_size && s.space > 0 { + p = s.table[:] + var code_len uint32 + var available_bits uint32 + var bits uint32 = 0 + if get_byte && !pullByte(br) { + return decoderNeedsMoreInput + } + get_byte = false + available_bits = getAvailableBits(br) + if available_bits != 0 { + bits = uint32(getBitsUnmasked(br)) + } + + p = p[bits&bitMask(huffmanMaxCodeLengthCodeLength):] + if uint32(p[0].bits) > available_bits { + get_byte = true + continue + } + + code_len = uint32(p[0].value) /* code_len == 0..17 */ + if code_len < repeatPreviousCodeLength { + dropBits(br, uint32(p[0].bits)) + processSingleCodeLength(code_len, &s.symbol, &s.repeat, &s.space, &s.prev_code_len, s.symbol_lists, s.code_length_histo[:], s.next_symbol[:]) /* code_len == 16..17, extra_bits == 2..3 */ + } else { + var extra_bits uint32 = code_len - 14 + var repeat_delta uint32 = (bits >> p[0].bits) & bitMask(extra_bits) + if available_bits < uint32(p[0].bits)+extra_bits { + get_byte = true + continue + } + + dropBits(br, uint32(p[0].bits)+extra_bits) + processRepeatedCodeLength(code_len, repeat_delta, alphabet_size, &s.symbol, &s.repeat, &s.space, &s.prev_code_len, &s.repeat_code_len, s.symbol_lists, s.code_length_histo[:], s.next_symbol[:]) + } + } + + return decoderSuccess +} + +/* Reads and decodes 15..18 codes using static prefix code. + Each code is 2..4 bits long. In total 30..72 bits are used. */ +func readCodeLengthCodeLengths(s *Reader) int { + var br *bitReader = &s.br + var num_codes uint32 = s.repeat + var space uint32 = s.space + var i uint32 = s.sub_loop_counter + for ; i < codeLengthCodes; i++ { + var code_len_idx byte = kCodeLengthCodeOrder[i] + var ix uint32 + var v uint32 + if !safeGetBits(br, 4, &ix) { + var available_bits uint32 = getAvailableBits(br) + if available_bits != 0 { + ix = uint32(getBitsUnmasked(br) & 0xF) + } else { + ix = 0 + } + + if uint32(kCodeLengthPrefixLength[ix]) > available_bits { + s.sub_loop_counter = i + s.repeat = num_codes + s.space = space + s.substate_huffman = stateHuffmanComplex + return decoderNeedsMoreInput + } + } + + v = uint32(kCodeLengthPrefixValue[ix]) + dropBits(br, uint32(kCodeLengthPrefixLength[ix])) + s.code_length_code_lengths[code_len_idx] = byte(v) + if v != 0 { + space = space - (32 >> v) + num_codes++ + s.code_length_histo[v]++ + if space-1 >= 32 { + /* space is 0 or wrapped around. */ + break + } + } + } + + if num_codes != 1 && space != 0 { + return decoderErrorFormatClSpace + } + + return decoderSuccess +} + +/* Decodes the Huffman tables. + There are 2 scenarios: + A) Huffman code contains only few symbols (1..4). Those symbols are read + directly; their code lengths are defined by the number of symbols. + For this scenario 4 - 49 bits will be read. + + B) 2-phase decoding: + B.1) Small Huffman table is decoded; it is specified with code lengths + encoded with predefined entropy code. 32 - 74 bits are used. + B.2) Decoded table is used to decode code lengths of symbols in resulting + Huffman table. In worst case 3520 bits are read. */ +func readHuffmanCode(alphabet_size uint32, max_symbol uint32, table []huffmanCode, opt_table_size *uint32, s *Reader) int { + var br *bitReader = &s.br + + /* Unnecessary masking, but might be good for safety. */ + alphabet_size &= 0x7FF + + /* State machine. */ + for { + switch s.substate_huffman { + case stateHuffmanNone: + if !safeReadBits(br, 2, &s.sub_loop_counter) { + return decoderNeedsMoreInput + } + + /* The value is used as follows: + 1 for simple code; + 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */ + if s.sub_loop_counter != 1 { + s.space = 32 + s.repeat = 0 /* num_codes */ + var i int + for i = 0; i <= huffmanMaxCodeLengthCodeLength; i++ { + s.code_length_histo[i] = 0 + } + + for i = 0; i < codeLengthCodes; i++ { + s.code_length_code_lengths[i] = 0 + } + + s.substate_huffman = stateHuffmanComplex + continue + } + fallthrough + + /* Read symbols, codes & code lengths directly. */ + case stateHuffmanSimpleSize: + if !safeReadBits(br, 2, &s.symbol) { /* num_symbols */ + s.substate_huffman = stateHuffmanSimpleSize + return decoderNeedsMoreInput + } + + s.sub_loop_counter = 0 + fallthrough + + case stateHuffmanSimpleRead: + { + var result int = readSimpleHuffmanSymbols(alphabet_size, max_symbol, s) + if result != decoderSuccess { + return result + } + } + fallthrough + + case stateHuffmanSimpleBuild: + var table_size uint32 + if s.symbol == 3 { + var bits uint32 + if !safeReadBits(br, 1, &bits) { + s.substate_huffman = stateHuffmanSimpleBuild + return decoderNeedsMoreInput + } + + s.symbol += bits + } + + table_size = buildSimpleHuffmanTable(table, huffmanTableBits, s.symbols_lists_array[:], s.symbol) + if opt_table_size != nil { + *opt_table_size = table_size + } + + s.substate_huffman = stateHuffmanNone + return decoderSuccess + + /* Decode Huffman-coded code lengths. */ + case stateHuffmanComplex: + { + var i uint32 + var result int = readCodeLengthCodeLengths(s) + if result != decoderSuccess { + return result + } + + buildCodeLengthsHuffmanTable(s.table[:], s.code_length_code_lengths[:], s.code_length_histo[:]) + for i = 0; i < 16; i++ { + s.code_length_histo[i] = 0 + } + + for i = 0; i <= huffmanMaxCodeLength; i++ { + s.next_symbol[i] = int(i) - (huffmanMaxCodeLength + 1) + symbolListPut(s.symbol_lists, s.next_symbol[i], 0xFFFF) + } + + s.symbol = 0 + s.prev_code_len = initialRepeatedCodeLength + s.repeat = 0 + s.repeat_code_len = 0 + s.space = 32768 + s.substate_huffman = stateHuffmanLengthSymbols + } + fallthrough + + case stateHuffmanLengthSymbols: + var table_size uint32 + var result int = readSymbolCodeLengths(max_symbol, s) + if result == decoderNeedsMoreInput { + result = safeReadSymbolCodeLengths(max_symbol, s) + } + + if result != decoderSuccess { + return result + } + + if s.space != 0 { + return decoderErrorFormatHuffmanSpace + } + + table_size = buildHuffmanTable(table, huffmanTableBits, s.symbol_lists, s.code_length_histo[:]) + if opt_table_size != nil { + *opt_table_size = table_size + } + + s.substate_huffman = stateHuffmanNone + return decoderSuccess + + default: + return decoderErrorUnreachable + } + } +} + +/* Decodes a block length by reading 3..39 bits. */ +func readBlockLength(table []huffmanCode, br *bitReader) uint32 { + var code uint32 + var nbits uint32 + code = readSymbol(table, br) + nbits = kBlockLengthPrefixCode[code].nbits /* nbits == 2..24 */ + return kBlockLengthPrefixCode[code].offset + readBits(br, nbits) +} + +/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then + reading can't be continued with ReadBlockLength. */ +func safeReadBlockLength(s *Reader, result *uint32, table []huffmanCode, br *bitReader) bool { + var index uint32 + if s.substate_read_block_length == stateReadBlockLengthNone { + if !safeReadSymbol(table, br, &index) { + return false + } + } else { + index = s.block_length_index + } + { + var bits uint32 /* nbits == 2..24 */ + var nbits uint32 = kBlockLengthPrefixCode[index].nbits + if !safeReadBits(br, nbits, &bits) { + s.block_length_index = index + s.substate_read_block_length = stateReadBlockLengthSuffix + return false + } + + *result = kBlockLengthPrefixCode[index].offset + bits + s.substate_read_block_length = stateReadBlockLengthNone + return true + } +} + +/* Transform: + 1) initialize list L with values 0, 1,... 255 + 2) For each input element X: + 2.1) let Y = L[X] + 2.2) remove X-th element from L + 2.3) prepend Y to L + 2.4) append Y to output + + In most cases max(Y) <= 7, so most of L remains intact. + To reduce the cost of initialization, we reuse L, remember the upper bound + of Y values, and reinitialize only first elements in L. + + Most of input values are 0 and 1. To reduce number of branches, we replace + inner for loop with do-while. */ +func inverseMoveToFrontTransform(v []byte, v_len uint32, state *Reader) { + var mtf [256]byte + var i int + for i = 1; i < 256; i++ { + mtf[i] = byte(i) + } + var mtf_1 byte + + /* Transform the input. */ + for i = 0; uint32(i) < v_len; i++ { + var index int = int(v[i]) + var value byte = mtf[index] + v[i] = value + mtf_1 = value + for index >= 1 { + index-- + mtf[index+1] = mtf[index] + } + + mtf[0] = mtf_1 + } +} + +/* Decodes a series of Huffman table using ReadHuffmanCode function. */ +func huffmanTreeGroupDecode(group *huffmanTreeGroup, s *Reader) int { + if s.substate_tree_group != stateTreeGroupLoop { + s.next = group.codes + s.htree_index = 0 + s.substate_tree_group = stateTreeGroupLoop + } + + for s.htree_index < int(group.num_htrees) { + var table_size uint32 + var result int = readHuffmanCode(uint32(group.alphabet_size), uint32(group.max_symbol), s.next, &table_size, s) + if result != decoderSuccess { + return result + } + group.htrees[s.htree_index] = s.next + s.next = s.next[table_size:] + s.htree_index++ + } + + s.substate_tree_group = stateTreeGroupNone + return decoderSuccess +} + +/* Decodes a context map. + Decoding is done in 4 phases: + 1) Read auxiliary information (6..16 bits) and allocate memory. + In case of trivial context map, decoding is finished at this phase. + 2) Decode Huffman table using ReadHuffmanCode function. + This table will be used for reading context map items. + 3) Read context map items; "0" values could be run-length encoded. + 4) Optionally, apply InverseMoveToFront transform to the resulting map. */ +func decodeContextMap(context_map_size uint32, num_htrees *uint32, context_map_arg *[]byte, s *Reader) int { + var br *bitReader = &s.br + var result int = decoderSuccess + + switch int(s.substate_context_map) { + case stateContextMapNone: + result = decodeVarLenUint8(s, br, num_htrees) + if result != decoderSuccess { + return result + } + + (*num_htrees)++ + s.context_index = 0 + *context_map_arg = make([]byte, uint(context_map_size)) + if *context_map_arg == nil { + return decoderErrorAllocContextMap + } + + if *num_htrees <= 1 { + for i := 0; i < int(context_map_size); i++ { + (*context_map_arg)[i] = 0 + } + return decoderSuccess + } + + s.substate_context_map = stateContextMapReadPrefix + fallthrough + /* Fall through. */ + case stateContextMapReadPrefix: + { + var bits uint32 + + /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe + to peek 4 bits ahead. */ + if !safeGetBits(br, 5, &bits) { + return decoderNeedsMoreInput + } + + if bits&1 != 0 { /* Use RLE for zeros. */ + s.max_run_length_prefix = (bits >> 1) + 1 + dropBits(br, 5) + } else { + s.max_run_length_prefix = 0 + dropBits(br, 1) + } + + s.substate_context_map = stateContextMapHuffman + } + fallthrough + + /* Fall through. */ + case stateContextMapHuffman: + { + var alphabet_size uint32 = *num_htrees + s.max_run_length_prefix + result = readHuffmanCode(alphabet_size, alphabet_size, s.context_map_table[:], nil, s) + if result != decoderSuccess { + return result + } + s.code = 0xFFFF + s.substate_context_map = stateContextMapDecode + } + fallthrough + + /* Fall through. */ + case stateContextMapDecode: + { + var context_index uint32 = s.context_index + var max_run_length_prefix uint32 = s.max_run_length_prefix + var context_map []byte = *context_map_arg + var code uint32 = s.code + var skip_preamble bool = (code != 0xFFFF) + for context_index < context_map_size || skip_preamble { + if !skip_preamble { + if !safeReadSymbol(s.context_map_table[:], br, &code) { + s.code = 0xFFFF + s.context_index = context_index + return decoderNeedsMoreInput + } + + if code == 0 { + context_map[context_index] = 0 + context_index++ + continue + } + + if code > max_run_length_prefix { + context_map[context_index] = byte(code - max_run_length_prefix) + context_index++ + continue + } + } else { + skip_preamble = false + } + + /* RLE sub-stage. */ + { + var reps uint32 + if !safeReadBits(br, code, &reps) { + s.code = code + s.context_index = context_index + return decoderNeedsMoreInput + } + + reps += 1 << code + if context_index+reps > context_map_size { + return decoderErrorFormatContextMapRepeat + } + + for { + context_map[context_index] = 0 + context_index++ + reps-- + if reps == 0 { + break + } + } + } + } + } + fallthrough + + case stateContextMapTransform: + var bits uint32 + if !safeReadBits(br, 1, &bits) { + s.substate_context_map = stateContextMapTransform + return decoderNeedsMoreInput + } + + if bits != 0 { + inverseMoveToFrontTransform(*context_map_arg, context_map_size, s) + } + + s.substate_context_map = stateContextMapNone + return decoderSuccess + + default: + return decoderErrorUnreachable + } +} + +/* Decodes a command or literal and updates block type ring-buffer. + Reads 3..54 bits. */ +func decodeBlockTypeAndLength(safe int, s *Reader, tree_type int) bool { + var max_block_type uint32 = s.num_block_types[tree_type] + type_tree := s.block_type_trees[tree_type*huffmanMaxSize258:] + len_tree := s.block_len_trees[tree_type*huffmanMaxSize26:] + var br *bitReader = &s.br + var ringbuffer []uint32 = s.block_type_rb[tree_type*2:] + var block_type uint32 + if max_block_type <= 1 { + return false + } + + /* Read 0..15 + 3..39 bits. */ + if safe == 0 { + block_type = readSymbol(type_tree, br) + s.block_length[tree_type] = readBlockLength(len_tree, br) + } else { + var memento bitReaderState + bitReaderSaveState(br, &memento) + if !safeReadSymbol(type_tree, br, &block_type) { + return false + } + if !safeReadBlockLength(s, &s.block_length[tree_type], len_tree, br) { + s.substate_read_block_length = stateReadBlockLengthNone + bitReaderRestoreState(br, &memento) + return false + } + } + + if block_type == 1 { + block_type = ringbuffer[1] + 1 + } else if block_type == 0 { + block_type = ringbuffer[0] + } else { + block_type -= 2 + } + + if block_type >= max_block_type { + block_type -= max_block_type + } + + ringbuffer[0] = ringbuffer[1] + ringbuffer[1] = block_type + return true +} + +func detectTrivialLiteralBlockTypes(s *Reader) { + var i uint + for i = 0; i < 8; i++ { + s.trivial_literal_contexts[i] = 0 + } + for i = 0; uint32(i) < s.num_block_types[0]; i++ { + var offset uint = i << literalContextBits + var error uint = 0 + var sample uint = uint(s.context_map[offset]) + var j uint + for j = 0; j < 1<>5] |= 1 << (i & 31) + } + } +} + +func prepareLiteralDecoding(s *Reader) { + var context_mode byte + var trivial uint + var block_type uint32 = s.block_type_rb[1] + var context_offset uint32 = block_type << literalContextBits + s.context_map_slice = s.context_map[context_offset:] + trivial = uint(s.trivial_literal_contexts[block_type>>5]) + s.trivial_literal_context = int((trivial >> (block_type & 31)) & 1) + s.literal_htree = []huffmanCode(s.literal_hgroup.htrees[s.context_map_slice[0]]) + context_mode = s.context_modes[block_type] & 3 + s.context_lookup = getContextLUT(int(context_mode)) +} + +/* Decodes the block type and updates the state for literal context. + Reads 3..54 bits. */ +func decodeLiteralBlockSwitchInternal(safe int, s *Reader) bool { + if !decodeBlockTypeAndLength(safe, s, 0) { + return false + } + + prepareLiteralDecoding(s) + return true +} + +func decodeLiteralBlockSwitch(s *Reader) { + decodeLiteralBlockSwitchInternal(0, s) +} + +func safeDecodeLiteralBlockSwitch(s *Reader) bool { + return decodeLiteralBlockSwitchInternal(1, s) +} + +/* Block switch for insert/copy length. + Reads 3..54 bits. */ +func decodeCommandBlockSwitchInternal(safe int, s *Reader) bool { + if !decodeBlockTypeAndLength(safe, s, 1) { + return false + } + + s.htree_command = []huffmanCode(s.insert_copy_hgroup.htrees[s.block_type_rb[3]]) + return true +} + +func decodeCommandBlockSwitch(s *Reader) { + decodeCommandBlockSwitchInternal(0, s) +} + +func safeDecodeCommandBlockSwitch(s *Reader) bool { + return decodeCommandBlockSwitchInternal(1, s) +} + +/* Block switch for distance codes. + Reads 3..54 bits. */ +func decodeDistanceBlockSwitchInternal(safe int, s *Reader) bool { + if !decodeBlockTypeAndLength(safe, s, 2) { + return false + } + + s.dist_context_map_slice = s.dist_context_map[s.block_type_rb[5]< s.ringbuffer_size { + pos = uint(s.ringbuffer_size) + } else { + pos = uint(s.pos) + } + var partial_pos_rb uint = (s.rb_roundtrips * uint(s.ringbuffer_size)) + pos + return partial_pos_rb - s.partial_pos_out +} + +/* Dumps output. + Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output to push + and either ring-buffer is as big as window size, or |force| is true. */ +func writeRingBuffer(s *Reader, available_out *uint, next_out *[]byte, total_out *uint, force bool) int { + start := s.ringbuffer[s.partial_pos_out&uint(s.ringbuffer_mask):] + var to_write uint = unwrittenBytes(s, true) + var num_written uint = *available_out + if num_written > to_write { + num_written = to_write + } + + if s.meta_block_remaining_len < 0 { + return decoderErrorFormatBlockLength1 + } + + if next_out != nil && *next_out == nil { + *next_out = start + } else { + if next_out != nil { + copy(*next_out, start[:num_written]) + *next_out = (*next_out)[num_written:] + } + } + + *available_out -= num_written + s.partial_pos_out += num_written + if total_out != nil { + *total_out = s.partial_pos_out + } + + if num_written < to_write { + if s.ringbuffer_size == 1<= s.ringbuffer_size { + s.pos -= s.ringbuffer_size + s.rb_roundtrips++ + if uint(s.pos) != 0 { + s.should_wrap_ringbuffer = 1 + } else { + s.should_wrap_ringbuffer = 0 + } + } + + return decoderSuccess +} + +func wrapRingBuffer(s *Reader) { + if s.should_wrap_ringbuffer != 0 { + copy(s.ringbuffer, s.ringbuffer_end[:uint(s.pos)]) + s.should_wrap_ringbuffer = 0 + } +} + +/* Allocates ring-buffer. + + s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before + this function is called. + + Last two bytes of ring-buffer are initialized to 0, so context calculation + could be done uniformly for the first two and all other positions. */ +func ensureRingBuffer(s *Reader) bool { + var old_ringbuffer []byte = s.ringbuffer + if s.ringbuffer_size == s.new_ringbuffer_size { + return true + } + + s.ringbuffer = make([]byte, uint(s.new_ringbuffer_size)+uint(kRingBufferWriteAheadSlack)) + if s.ringbuffer == nil { + /* Restore previous value. */ + s.ringbuffer = old_ringbuffer + + return false + } + + s.ringbuffer[s.new_ringbuffer_size-2] = 0 + s.ringbuffer[s.new_ringbuffer_size-1] = 0 + + if !(old_ringbuffer == nil) { + copy(s.ringbuffer, old_ringbuffer[:uint(s.pos)]) + + old_ringbuffer = nil + } + + s.ringbuffer_size = s.new_ringbuffer_size + s.ringbuffer_mask = s.new_ringbuffer_size - 1 + s.ringbuffer_end = s.ringbuffer[s.ringbuffer_size:] + + return true +} + +func copyUncompressedBlockToOutput(available_out *uint, next_out *[]byte, total_out *uint, s *Reader) int { + /* TODO: avoid allocation for single uncompressed block. */ + if !ensureRingBuffer(s) { + return decoderErrorAllocRingBuffer1 + } + + /* State machine */ + for { + switch s.substate_uncompressed { + case stateUncompressedNone: + { + var nbytes int = int(getRemainingBytes(&s.br)) + if nbytes > s.meta_block_remaining_len { + nbytes = s.meta_block_remaining_len + } + + if s.pos+nbytes > s.ringbuffer_size { + nbytes = s.ringbuffer_size - s.pos + } + + /* Copy remaining bytes from s->br.buf_ to ring-buffer. */ + copyBytes(s.ringbuffer[s.pos:], &s.br, uint(nbytes)) + + s.pos += nbytes + s.meta_block_remaining_len -= nbytes + if s.pos < 1<>1 >= min_size { + new_ringbuffer_size >>= 1 + } + } + + s.new_ringbuffer_size = new_ringbuffer_size +} + +/* Reads 1..256 2-bit context modes. */ +func readContextModes(s *Reader) int { + var br *bitReader = &s.br + var i int = s.loop_counter + + for i < int(s.num_block_types[0]) { + var bits uint32 + if !safeReadBits(br, 2, &bits) { + s.loop_counter = i + return decoderNeedsMoreInput + } + + s.context_modes[i] = byte(bits) + i++ + } + + return decoderSuccess +} + +func takeDistanceFromRingBuffer(s *Reader) { + if s.distance_code == 0 { + s.dist_rb_idx-- + s.distance_code = s.dist_rb[s.dist_rb_idx&3] + + /* Compensate double distance-ring-buffer roll for dictionary items. */ + s.distance_context = 1 + } else { + var distance_code int = s.distance_code << 1 + const kDistanceShortCodeIndexOffset uint32 = 0xAAAFFF1B + const kDistanceShortCodeValueOffset uint32 = 0xFA5FA500 + var v int = (s.dist_rb_idx + int(kDistanceShortCodeIndexOffset>>uint(distance_code))) & 0x3 + /* kDistanceShortCodeIndexOffset has 2-bit values from LSB: + 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */ + + /* kDistanceShortCodeValueOffset has 2-bit values from LSB: + -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */ + s.distance_code = s.dist_rb[v] + + v = int(kDistanceShortCodeValueOffset>>uint(distance_code)) & 0x3 + if distance_code&0x3 != 0 { + s.distance_code += v + } else { + s.distance_code -= v + if s.distance_code <= 0 { + /* A huge distance will cause a () soon. + This is a little faster than failing here. */ + s.distance_code = 0x7FFFFFFF + } + } + } +} + +func safeReadBitsMaybeZero(br *bitReader, n_bits uint32, val *uint32) bool { + if n_bits != 0 { + return safeReadBits(br, n_bits, val) + } else { + *val = 0 + return true + } +} + +/* Precondition: s->distance_code < 0. */ +func readDistanceInternal(safe int, s *Reader, br *bitReader) bool { + var distval int + var memento bitReaderState + var distance_tree []huffmanCode = []huffmanCode(s.distance_hgroup.htrees[s.dist_htree_index]) + if safe == 0 { + s.distance_code = int(readSymbol(distance_tree, br)) + } else { + var code uint32 + bitReaderSaveState(br, &memento) + if !safeReadSymbol(distance_tree, br, &code) { + return false + } + + s.distance_code = int(code) + } + + /* Convert the distance code to the actual distance by possibly + looking up past distances from the s->ringbuffer. */ + s.distance_context = 0 + + if s.distance_code&^0xF == 0 { + takeDistanceFromRingBuffer(s) + s.block_length[2]-- + return true + } + + distval = s.distance_code - int(s.num_direct_distance_codes) + if distval >= 0 { + var nbits uint32 + var postfix int + var offset int + if safe == 0 && (s.distance_postfix_bits == 0) { + nbits = (uint32(distval) >> 1) + 1 + offset = ((2 + (distval & 1)) << nbits) - 4 + s.distance_code = int(s.num_direct_distance_codes) + offset + int(readBits(br, nbits)) + } else { + /* This branch also works well when s->distance_postfix_bits == 0. */ + var bits uint32 + postfix = distval & s.distance_postfix_mask + distval >>= s.distance_postfix_bits + nbits = (uint32(distval) >> 1) + 1 + if safe != 0 { + if !safeReadBitsMaybeZero(br, nbits, &bits) { + s.distance_code = -1 /* Restore precondition. */ + bitReaderRestoreState(br, &memento) + return false + } + } else { + bits = readBits(br, nbits) + } + + offset = ((2 + (distval & 1)) << nbits) - 4 + s.distance_code = int(s.num_direct_distance_codes) + ((offset + int(bits)) << s.distance_postfix_bits) + postfix + } + } + + s.distance_code = s.distance_code - numDistanceShortCodes + 1 + s.block_length[2]-- + return true +} + +func readDistance(s *Reader, br *bitReader) { + readDistanceInternal(0, s, br) +} + +func safeReadDistance(s *Reader, br *bitReader) bool { + return readDistanceInternal(1, s, br) +} + +func readCommandInternal(safe int, s *Reader, br *bitReader, insert_length *int) bool { + var cmd_code uint32 + var insert_len_extra uint32 = 0 + var copy_length uint32 + var v cmdLutElement + var memento bitReaderState + if safe == 0 { + cmd_code = readSymbol(s.htree_command, br) + } else { + bitReaderSaveState(br, &memento) + if !safeReadSymbol(s.htree_command, br, &cmd_code) { + return false + } + } + + v = kCmdLut[cmd_code] + s.distance_code = int(v.distance_code) + s.distance_context = int(v.context) + s.dist_htree_index = s.dist_context_map_slice[s.distance_context] + *insert_length = int(v.insert_len_offset) + if safe == 0 { + if v.insert_len_extra_bits != 0 { + insert_len_extra = readBits(br, uint32(v.insert_len_extra_bits)) + } + + copy_length = readBits(br, uint32(v.copy_len_extra_bits)) + } else { + if !safeReadBitsMaybeZero(br, uint32(v.insert_len_extra_bits), &insert_len_extra) || !safeReadBitsMaybeZero(br, uint32(v.copy_len_extra_bits), ©_length) { + bitReaderRestoreState(br, &memento) + return false + } + } + + s.copy_length = int(copy_length) + int(v.copy_len_offset) + s.block_length[1]-- + *insert_length += int(insert_len_extra) + return true +} + +func readCommand(s *Reader, br *bitReader, insert_length *int) { + readCommandInternal(0, s, br, insert_length) +} + +func safeReadCommand(s *Reader, br *bitReader, insert_length *int) bool { + return readCommandInternal(1, s, br, insert_length) +} + +func checkInputAmountMaybeSafe(safe int, br *bitReader, num uint) bool { + if safe != 0 { + return true + } + + return checkInputAmount(br, num) +} + +func processCommandsInternal(safe int, s *Reader) int { + var pos int = s.pos + var i int = s.loop_counter + var result int = decoderSuccess + var br *bitReader = &s.br + var hc []huffmanCode + + if !checkInputAmountMaybeSafe(safe, br, 28) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + + if safe == 0 { + warmupBitReader(br) + } + + /* Jump into state machine. */ + if s.state == stateCommandBegin { + goto CommandBegin + } else if s.state == stateCommandInner { + goto CommandInner + } else if s.state == stateCommandPostDecodeLiterals { + goto CommandPostDecodeLiterals + } else if s.state == stateCommandPostWrapCopy { + goto CommandPostWrapCopy + } else { + return decoderErrorUnreachable + } + +CommandBegin: + if safe != 0 { + s.state = stateCommandBegin + } + + if !checkInputAmountMaybeSafe(safe, br, 28) { /* 156 bits + 7 bytes */ + s.state = stateCommandBegin + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + + if s.block_length[1] == 0 { + if safe != 0 { + if !safeDecodeCommandBlockSwitch(s) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + } else { + decodeCommandBlockSwitch(s) + } + + goto CommandBegin + } + + /* Read the insert/copy length in the command. */ + if safe != 0 { + if !safeReadCommand(s, br, &i) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + } else { + readCommand(s, br, &i) + } + + if i == 0 { + goto CommandPostDecodeLiterals + } + + s.meta_block_remaining_len -= i + +CommandInner: + if safe != 0 { + s.state = stateCommandInner + } + + /* Read the literals in the command. */ + if s.trivial_literal_context != 0 { + var bits uint32 + var value uint32 + preloadSymbol(safe, s.literal_htree, br, &bits, &value) + for { + if !checkInputAmountMaybeSafe(safe, br, 28) { /* 162 bits + 7 bytes */ + s.state = stateCommandInner + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + + if s.block_length[0] == 0 { + if safe != 0 { + if !safeDecodeLiteralBlockSwitch(s) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + } else { + decodeLiteralBlockSwitch(s) + } + + preloadSymbol(safe, s.literal_htree, br, &bits, &value) + if s.trivial_literal_context == 0 { + goto CommandInner + } + } + + if safe == 0 { + s.ringbuffer[pos] = byte(readPreloadedSymbol(s.literal_htree, br, &bits, &value)) + } else { + var literal uint32 + if !safeReadSymbol(s.literal_htree, br, &literal) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + + s.ringbuffer[pos] = byte(literal) + } + + s.block_length[0]-- + pos++ + if pos == s.ringbuffer_size { + s.state = stateCommandInnerWrite + i-- + goto saveStateAndReturn + } + i-- + if i == 0 { + break + } + } + } else { + var p1 byte = s.ringbuffer[(pos-1)&s.ringbuffer_mask] + var p2 byte = s.ringbuffer[(pos-2)&s.ringbuffer_mask] + for { + var context byte + if !checkInputAmountMaybeSafe(safe, br, 28) { /* 162 bits + 7 bytes */ + s.state = stateCommandInner + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + + if s.block_length[0] == 0 { + if safe != 0 { + if !safeDecodeLiteralBlockSwitch(s) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + } else { + decodeLiteralBlockSwitch(s) + } + + if s.trivial_literal_context != 0 { + goto CommandInner + } + } + + context = getContext(p1, p2, s.context_lookup) + hc = []huffmanCode(s.literal_hgroup.htrees[s.context_map_slice[context]]) + p2 = p1 + if safe == 0 { + p1 = byte(readSymbol(hc, br)) + } else { + var literal uint32 + if !safeReadSymbol(hc, br, &literal) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + + p1 = byte(literal) + } + + s.ringbuffer[pos] = p1 + s.block_length[0]-- + pos++ + if pos == s.ringbuffer_size { + s.state = stateCommandInnerWrite + i-- + goto saveStateAndReturn + } + i-- + if i == 0 { + break + } + } + } + + if s.meta_block_remaining_len <= 0 { + s.state = stateMetablockDone + goto saveStateAndReturn + } + +CommandPostDecodeLiterals: + if safe != 0 { + s.state = stateCommandPostDecodeLiterals + } + + if s.distance_code >= 0 { + /* Implicit distance case. */ + if s.distance_code != 0 { + s.distance_context = 0 + } else { + s.distance_context = 1 + } + + s.dist_rb_idx-- + s.distance_code = s.dist_rb[s.dist_rb_idx&3] + } else { + /* Read distance code in the command, unless it was implicitly zero. */ + if s.block_length[2] == 0 { + if safe != 0 { + if !safeDecodeDistanceBlockSwitch(s) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + } else { + decodeDistanceBlockSwitch(s) + } + } + + if safe != 0 { + if !safeReadDistance(s, br) { + result = decoderNeedsMoreInput + goto saveStateAndReturn + } + } else { + readDistance(s, br) + } + } + + if s.max_distance != s.max_backward_distance { + if pos < s.max_backward_distance { + s.max_distance = pos + } else { + s.max_distance = s.max_backward_distance + } + } + + i = s.copy_length + + /* Apply copy of LZ77 back-reference, or static dictionary reference if + the distance is larger than the max LZ77 distance */ + if s.distance_code > s.max_distance { + /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE = 0x7FFFFFFC. + With this choice, no signed overflow can occur after decoding + a special distance code (e.g., after adding 3 to the last distance). */ + if s.distance_code > maxAllowedDistance { + return decoderErrorFormatDistance + } + + if i >= minDictionaryWordLength && i <= maxDictionaryWordLength { + var address int = s.distance_code - s.max_distance - 1 + var words *dictionary = s.dictionary + var trans *transforms = s.transforms + var offset int = int(s.dictionary.offsets_by_length[i]) + var shift uint32 = uint32(s.dictionary.size_bits_by_length[i]) + var mask int = int(bitMask(shift)) + var word_idx int = address & mask + var transform_idx int = address >> shift + + /* Compensate double distance-ring-buffer roll. */ + s.dist_rb_idx += s.distance_context + + offset += word_idx * i + if words.data == nil { + return decoderErrorDictionaryNotSet + } + + if transform_idx < int(trans.num_transforms) { + word := words.data[offset:] + var len int = i + if transform_idx == int(trans.cutOffTransforms[0]) { + copy(s.ringbuffer[pos:], word[:uint(len)]) + } else { + len = transformDictionaryWord(s.ringbuffer[pos:], word, int(len), trans, transform_idx) + } + + pos += int(len) + s.meta_block_remaining_len -= int(len) + if pos >= s.ringbuffer_size { + s.state = stateCommandPostWrite1 + goto saveStateAndReturn + } + } else { + return decoderErrorFormatTransform + } + } else { + return decoderErrorFormatDictionary + } + } else { + var src_start int = (pos - s.distance_code) & s.ringbuffer_mask + copy_dst := s.ringbuffer[pos:] + copy_src := s.ringbuffer[src_start:] + var dst_end int = pos + i + var src_end int = src_start + i + + /* Update the recent distances cache. */ + s.dist_rb[s.dist_rb_idx&3] = s.distance_code + + s.dist_rb_idx++ + s.meta_block_remaining_len -= i + + /* There are 32+ bytes of slack in the ring-buffer allocation. + Also, we have 16 short codes, that make these 16 bytes irrelevant + in the ring-buffer. Let's copy over them as a first guess. */ + copy(copy_dst, copy_src[:16]) + + if src_end > pos && dst_end > src_start { + /* Regions intersect. */ + goto CommandPostWrapCopy + } + + if dst_end >= s.ringbuffer_size || src_end >= s.ringbuffer_size { + /* At least one region wraps. */ + goto CommandPostWrapCopy + } + + pos += i + if i > 16 { + if i > 32 { + copy(copy_dst[16:], copy_src[16:][:uint(i-16)]) + } else { + /* This branch covers about 45% cases. + Fixed size short copy allows more compiler optimizations. */ + copy(copy_dst[16:], copy_src[16:][:16]) + } + } + } + + if s.meta_block_remaining_len <= 0 { + /* Next metablock, if any. */ + s.state = stateMetablockDone + + goto saveStateAndReturn + } else { + goto CommandBegin + } +CommandPostWrapCopy: + { + var wrap_guard int = s.ringbuffer_size - pos + for { + i-- + if i < 0 { + break + } + s.ringbuffer[pos] = s.ringbuffer[(pos-s.distance_code)&s.ringbuffer_mask] + pos++ + wrap_guard-- + if wrap_guard == 0 { + s.state = stateCommandPostWrite2 + goto saveStateAndReturn + } + } + } + + if s.meta_block_remaining_len <= 0 { + /* Next metablock, if any. */ + s.state = stateMetablockDone + + goto saveStateAndReturn + } else { + goto CommandBegin + } + +saveStateAndReturn: + s.pos = pos + s.loop_counter = i + return result +} + +func processCommands(s *Reader) int { + return processCommandsInternal(0, s) +} + +func safeProcessCommands(s *Reader) int { + return processCommandsInternal(1, s) +} + +/* Returns the maximum number of distance symbols which can only represent + distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */ + +var maxDistanceSymbol_bound = [maxNpostfix + 1]uint32{0, 4, 12, 28} +var maxDistanceSymbol_diff = [maxNpostfix + 1]uint32{73, 126, 228, 424} + +func maxDistanceSymbol(ndirect uint32, npostfix uint32) uint32 { + var postfix uint32 = 1 << npostfix + if ndirect < maxDistanceSymbol_bound[npostfix] { + return ndirect + maxDistanceSymbol_diff[npostfix] + postfix + } else if ndirect > maxDistanceSymbol_bound[npostfix]+postfix { + return ndirect + maxDistanceSymbol_diff[npostfix] + } else { + return maxDistanceSymbol_bound[npostfix] + maxDistanceSymbol_diff[npostfix] + postfix + } +} + +/* Invariant: input stream is never overconsumed: + - invalid input implies that the whole stream is invalid -> any amount of + input could be read and discarded + - when result is "needs more input", then at least one more byte is REQUIRED + to complete decoding; all input data MUST be consumed by decoder, so + client could swap the input buffer + - when result is "needs more output" decoder MUST ensure that it doesn't + hold more than 7 bits in bit reader; this saves client from swapping input + buffer ahead of time + - when result is "success" decoder MUST return all unused data back to input + buffer; this is possible because the invariant is held on enter */ +func decoderDecompressStream(s *Reader, available_in *uint, next_in *[]byte, available_out *uint, next_out *[]byte) int { + var result int = decoderSuccess + var br *bitReader = &s.br + + /* Do not try to process further in a case of unrecoverable error. */ + if int(s.error_code) < 0 { + return decoderResultError + } + + if *available_out != 0 && (next_out == nil || *next_out == nil) { + return saveErrorCode(s, decoderErrorInvalidArguments) + } + + if *available_out == 0 { + next_out = nil + } + if s.buffer_length == 0 { /* Just connect bit reader to input stream. */ + br.input_len = *available_in + br.input = *next_in + br.byte_pos = 0 + } else { + /* At least one byte of input is required. More than one byte of input may + be required to complete the transaction -> reading more data must be + done in a loop -> do it in a main loop. */ + result = decoderNeedsMoreInput + + br.input = s.buffer.u8[:] + br.byte_pos = 0 + } + + /* State machine */ + for { + if result != decoderSuccess { + /* Error, needs more input/output. */ + if result == decoderNeedsMoreInput { + if s.ringbuffer != nil { /* Pro-actively push output. */ + var intermediate_result int = writeRingBuffer(s, available_out, next_out, nil, true) + + /* WriteRingBuffer checks s->meta_block_remaining_len validity. */ + if int(intermediate_result) < 0 { + result = intermediate_result + break + } + } + + if s.buffer_length != 0 { /* Used with internal buffer. */ + if br.byte_pos == br.input_len { + /* Successfully finished read transaction. + Accumulator contains less than 8 bits, because internal buffer + is expanded byte-by-byte until it is enough to complete read. */ + s.buffer_length = 0 + + /* Switch to input stream and restart. */ + result = decoderSuccess + + br.input_len = *available_in + br.input = *next_in + br.byte_pos = 0 + continue + } else if *available_in != 0 { + /* Not enough data in buffer, but can take one more byte from + input stream. */ + result = decoderSuccess + + s.buffer.u8[s.buffer_length] = (*next_in)[0] + s.buffer_length++ + br.input_len = uint(s.buffer_length) + *next_in = (*next_in)[1:] + (*available_in)-- + + /* Retry with more data in buffer. */ + continue + } + + /* Can't finish reading and no more input. */ + break + /* Input stream doesn't contain enough input. */ + } else { + /* Copy tail to internal buffer and return. */ + *next_in = br.input[br.byte_pos:] + + *available_in = br.input_len - br.byte_pos + for *available_in != 0 { + s.buffer.u8[s.buffer_length] = (*next_in)[0] + s.buffer_length++ + *next_in = (*next_in)[1:] + (*available_in)-- + } + + break + } + } + + /* Unreachable. */ + + /* Fail or needs more output. */ + if s.buffer_length != 0 { + /* Just consumed the buffered input and produced some output. Otherwise + it would result in "needs more input". Reset internal buffer. */ + s.buffer_length = 0 + } else { + /* Using input stream in last iteration. When decoder switches to input + stream it has less than 8 bits in accumulator, so it is safe to + return unused accumulator bits there. */ + bitReaderUnload(br) + + *available_in = br.input_len - br.byte_pos + *next_in = br.input[br.byte_pos:] + } + + break + } + + switch s.state { + /* Prepare to the first read. */ + case stateUninited: + if !warmupBitReader(br) { + result = decoderNeedsMoreInput + break + } + + /* Decode window size. */ + result = decodeWindowBits(s, br) /* Reads 1..8 bits. */ + if result != decoderSuccess { + break + } + + if s.large_window { + s.state = stateLargeWindowBits + break + } + + s.state = stateInitialize + + case stateLargeWindowBits: + if !safeReadBits(br, 6, &s.window_bits) { + result = decoderNeedsMoreInput + break + } + + if s.window_bits < largeMinWbits || s.window_bits > largeMaxWbits { + result = decoderErrorFormatWindowBits + break + } + + s.state = stateInitialize + fallthrough + + /* Maximum distance, see section 9.1. of the spec. */ + /* Fall through. */ + case stateInitialize: + s.max_backward_distance = (1 << s.window_bits) - windowGap + + /* Allocate memory for both block_type_trees and block_len_trees. */ + s.block_type_trees = make([]huffmanCode, (3 * (huffmanMaxSize258 + huffmanMaxSize26))) + + if s.block_type_trees == nil { + result = decoderErrorAllocBlockTypeTrees + break + } + + s.block_len_trees = s.block_type_trees[3*huffmanMaxSize258:] + + s.state = stateMetablockBegin + fallthrough + + /* Fall through. */ + case stateMetablockBegin: + decoderStateMetablockBegin(s) + + s.state = stateMetablockHeader + fallthrough + + /* Fall through. */ + case stateMetablockHeader: + result = decodeMetaBlockLength(s, br) + /* Reads 2 - 31 bits. */ + if result != decoderSuccess { + break + } + + if s.is_metadata != 0 || s.is_uncompressed != 0 { + if !bitReaderJumpToByteBoundary(br) { + result = decoderErrorFormatPadding1 + break + } + } + + if s.is_metadata != 0 { + s.state = stateMetadata + break + } + + if s.meta_block_remaining_len == 0 { + s.state = stateMetablockDone + break + } + + calculateRingBufferSize(s) + if s.is_uncompressed != 0 { + s.state = stateUncompressed + break + } + + s.loop_counter = 0 + s.state = stateHuffmanCode0 + + case stateUncompressed: + result = copyUncompressedBlockToOutput(available_out, next_out, nil, s) + if result == decoderSuccess { + s.state = stateMetablockDone + } + + case stateMetadata: + for ; s.meta_block_remaining_len > 0; s.meta_block_remaining_len-- { + var bits uint32 + + /* Read one byte and ignore it. */ + if !safeReadBits(br, 8, &bits) { + result = decoderNeedsMoreInput + break + } + } + + if result == decoderSuccess { + s.state = stateMetablockDone + } + + case stateHuffmanCode0: + if s.loop_counter >= 3 { + s.state = stateMetablockHeader2 + break + } + + /* Reads 1..11 bits. */ + result = decodeVarLenUint8(s, br, &s.num_block_types[s.loop_counter]) + + if result != decoderSuccess { + break + } + + s.num_block_types[s.loop_counter]++ + if s.num_block_types[s.loop_counter] < 2 { + s.loop_counter++ + break + } + + s.state = stateHuffmanCode1 + fallthrough + + case stateHuffmanCode1: + { + var alphabet_size uint32 = s.num_block_types[s.loop_counter] + 2 + var tree_offset int = s.loop_counter * huffmanMaxSize258 + result = readHuffmanCode(alphabet_size, alphabet_size, s.block_type_trees[tree_offset:], nil, s) + if result != decoderSuccess { + break + } + s.state = stateHuffmanCode2 + } + fallthrough + + case stateHuffmanCode2: + { + var alphabet_size uint32 = numBlockLenSymbols + var tree_offset int = s.loop_counter * huffmanMaxSize26 + result = readHuffmanCode(alphabet_size, alphabet_size, s.block_len_trees[tree_offset:], nil, s) + if result != decoderSuccess { + break + } + s.state = stateHuffmanCode3 + } + fallthrough + + case stateHuffmanCode3: + var tree_offset int = s.loop_counter * huffmanMaxSize26 + if !safeReadBlockLength(s, &s.block_length[s.loop_counter], s.block_len_trees[tree_offset:], br) { + result = decoderNeedsMoreInput + break + } + + s.loop_counter++ + s.state = stateHuffmanCode0 + + case stateMetablockHeader2: + { + var bits uint32 + if !safeReadBits(br, 6, &bits) { + result = decoderNeedsMoreInput + break + } + + s.distance_postfix_bits = bits & bitMask(2) + bits >>= 2 + s.num_direct_distance_codes = numDistanceShortCodes + (bits << s.distance_postfix_bits) + s.distance_postfix_mask = int(bitMask(s.distance_postfix_bits)) + s.context_modes = make([]byte, uint(s.num_block_types[0])) + if s.context_modes == nil { + result = decoderErrorAllocContextModes + break + } + + s.loop_counter = 0 + s.state = stateContextModes + } + fallthrough + + case stateContextModes: + result = readContextModes(s) + + if result != decoderSuccess { + break + } + + s.state = stateContextMap1 + fallthrough + + case stateContextMap1: + result = decodeContextMap(s.num_block_types[0]<= 3 { + prepareLiteralDecoding(s) + s.dist_context_map_slice = s.dist_context_map + s.htree_command = []huffmanCode(s.insert_copy_hgroup.htrees[0]) + if !ensureRingBuffer(s) { + result = decoderErrorAllocRingBuffer2 + break + } + + s.state = stateCommandBegin + } + + case stateCommandBegin, stateCommandInner, stateCommandPostDecodeLiterals, stateCommandPostWrapCopy: + result = processCommands(s) + + if result == decoderNeedsMoreInput { + result = safeProcessCommands(s) + } + + case stateCommandInnerWrite, stateCommandPostWrite1, stateCommandPostWrite2: + result = writeRingBuffer(s, available_out, next_out, nil, false) + + if result != decoderSuccess { + break + } + + wrapRingBuffer(s) + if s.ringbuffer_size == 1<= uint64(block_size) { + return 0 + } + return block_size - uint(delta) +} + +/* Wraps 64-bit input position to 32-bit ring-buffer position preserving + "not-a-first-lap" feature. */ +func wrapPosition(position uint64) uint32 { + var result uint32 = uint32(position) + var gb uint64 = position >> 30 + if gb > 2 { + /* Wrap every 2GiB; The first 3GB are continuous. */ + result = result&((1<<30)-1) | (uint32((gb-1)&1)+1)<<30 + } + + return result +} + +func (s *Writer) getStorage(size int) []byte { + if len(s.storage) < size { + s.storage = make([]byte, size) + } + + return s.storage +} + +func hashTableSize(max_table_size uint, input_size uint) uint { + var htsize uint = 256 + for htsize < max_table_size && htsize < input_size { + htsize <<= 1 + } + + return htsize +} + +func getHashTable(s *Writer, quality int, input_size uint, table_size *uint) []int { + var max_table_size uint = maxHashTableSize(quality) + var htsize uint = hashTableSize(max_table_size, input_size) + /* Use smaller hash table when input.size() is smaller, since we + fill the table, incurring O(hash table size) overhead for + compression, and if the input is short, we won't need that + many hash table entries anyway. */ + + var table []int + assert(max_table_size >= 256) + if quality == fastOnePassCompressionQuality { + /* Only odd shifts are supported by fast-one-pass. */ + if htsize&0xAAAAA == 0 { + htsize <<= 1 + } + } + + if htsize <= uint(len(s.small_table_)) { + table = s.small_table_[:] + } else { + if htsize > s.large_table_size_ { + s.large_table_size_ = htsize + s.large_table_ = nil + s.large_table_ = make([]int, htsize) + } + + table = s.large_table_ + } + + *table_size = htsize + for i := 0; i < int(htsize); i++ { + table[i] = 0 + } + return table +} + +func encodeWindowBits(lgwin int, large_window bool, last_bytes *uint16, last_bytes_bits *byte) { + if large_window { + *last_bytes = uint16((lgwin&0x3F)<<8 | 0x11) + *last_bytes_bits = 14 + } else { + if lgwin == 16 { + *last_bytes = 0 + *last_bytes_bits = 1 + } else if lgwin == 17 { + *last_bytes = 1 + *last_bytes_bits = 7 + } else if lgwin > 17 { + *last_bytes = uint16((lgwin-17)<<1 | 0x01) + *last_bytes_bits = 4 + } else { + *last_bytes = uint16((lgwin-8)<<4 | 0x01) + *last_bytes_bits = 7 + } + } +} + +/* Decide about the context map based on the ability of the prediction + ability of the previous byte UTF8-prefix on the next byte. The + prediction ability is calculated as Shannon entropy. Here we need + Shannon entropy instead of 'BitsEntropy' since the prefix will be + encoded with the remaining 6 bits of the following byte, and + BitsEntropy will assume that symbol to be stored alone using Huffman + coding. */ + +var kStaticContextMapContinuation = [64]uint32{ + 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +} +var kStaticContextMapSimpleUTF8 = [64]uint32{ + 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +} + +func chooseContextMap(quality int, bigram_histo []uint32, num_literal_contexts *uint, literal_context_map *[]uint32) { + var monogram_histo = [3]uint32{0} + var two_prefix_histo = [6]uint32{0} + var total uint + var i uint + var dummy uint + var entropy [4]float64 + for i = 0; i < 9; i++ { + monogram_histo[i%3] += bigram_histo[i] + two_prefix_histo[i%6] += bigram_histo[i] + } + + entropy[1] = shannonEntropy(monogram_histo[:], 3, &dummy) + entropy[2] = (shannonEntropy(two_prefix_histo[:], 3, &dummy) + shannonEntropy(two_prefix_histo[3:], 3, &dummy)) + entropy[3] = 0 + for i = 0; i < 3; i++ { + entropy[3] += shannonEntropy(bigram_histo[3*i:], 3, &dummy) + } + + total = uint(monogram_histo[0] + monogram_histo[1] + monogram_histo[2]) + assert(total != 0) + entropy[0] = 1.0 / float64(total) + entropy[1] *= entropy[0] + entropy[2] *= entropy[0] + entropy[3] *= entropy[0] + + if quality < minQualityForHqContextModeling { + /* 3 context models is a bit slower, don't use it at lower qualities. */ + entropy[3] = entropy[1] * 10 + } + + /* If expected savings by symbol are less than 0.2 bits, skip the + context modeling -- in exchange for faster decoding speed. */ + if entropy[1]-entropy[2] < 0.2 && entropy[1]-entropy[3] < 0.2 { + *num_literal_contexts = 1 + } else if entropy[2]-entropy[3] < 0.02 { + *num_literal_contexts = 2 + *literal_context_map = kStaticContextMapSimpleUTF8[:] + } else { + *num_literal_contexts = 3 + *literal_context_map = kStaticContextMapContinuation[:] + } +} + +/* Decide if we want to use a more complex static context map containing 13 + context values, based on the entropy reduction of histograms over the + first 5 bits of literals. */ + +var kStaticContextMapComplexUTF8 = [64]uint32{ + 11, 11, 12, 12, /* 0 special */ + 0, 0, 0, 0, /* 4 lf */ + 1, 1, 9, 9, /* 8 space */ + 2, 2, 2, 2, /* !, first after space/lf and after something else. */ + 1, 1, 1, 1, /* " */ + 8, 3, 3, 3, /* % */ + 1, 1, 1, 1, /* ({[ */ + 2, 2, 2, 2, /* }]) */ + 8, 4, 4, 4, /* :; */ + 8, 7, 4, 4, /* . */ + 8, 0, 0, 0, /* > */ + 3, 3, 3, 3, /* [0..9] */ + 5, 5, 10, 5, /* [A-Z] */ + 5, 5, 10, 5, + 6, 6, 6, 6, /* [a-z] */ + 6, 6, 6, 6, +} + +func shouldUseComplexStaticContextMap(input []byte, start_pos uint, length uint, mask uint, quality int, size_hint uint, num_literal_contexts *uint, literal_context_map *[]uint32) bool { + /* Try the more complex static context map only for long data. */ + if size_hint < 1<<20 { + return false + } else { + var end_pos uint = start_pos + length + var combined_histo = [32]uint32{0} + var context_histo = [13][32]uint32{[32]uint32{0}} + var total uint32 = 0 + var entropy [3]float64 + var dummy uint + var i uint + var utf8_lut contextLUT = getContextLUT(contextUTF8) + /* To make entropy calculations faster and to fit on the stack, we collect + histograms over the 5 most significant bits of literals. One histogram + without context and 13 additional histograms for each context value. */ + for ; start_pos+64 <= end_pos; start_pos += 4096 { + var stride_end_pos uint = start_pos + 64 + var prev2 byte = input[start_pos&mask] + var prev1 byte = input[(start_pos+1)&mask] + var pos uint + + /* To make the analysis of the data faster we only examine 64 byte long + strides at every 4kB intervals. */ + for pos = start_pos + 2; pos < stride_end_pos; pos++ { + var literal byte = input[pos&mask] + var context byte = byte(kStaticContextMapComplexUTF8[getContext(prev1, prev2, utf8_lut)]) + total++ + combined_histo[literal>>3]++ + context_histo[context][literal>>3]++ + prev2 = prev1 + prev1 = literal + } + } + + entropy[1] = shannonEntropy(combined_histo[:], 32, &dummy) + entropy[2] = 0 + for i = 0; i < 13; i++ { + entropy[2] += shannonEntropy(context_histo[i][0:], 32, &dummy) + } + + entropy[0] = 1.0 / float64(total) + entropy[1] *= entropy[0] + entropy[2] *= entropy[0] + + /* The triggering heuristics below were tuned by compressing the individual + files of the silesia corpus. If we skip this kind of context modeling + for not very well compressible input (i.e. entropy using context modeling + is 60% of maximal entropy) or if expected savings by symbol are less + than 0.2 bits, then in every case when it triggers, the final compression + ratio is improved. Note however that this heuristics might be too strict + for some cases and could be tuned further. */ + if entropy[2] > 3.0 || entropy[1]-entropy[2] < 0.2 { + return false + } else { + *num_literal_contexts = 13 + *literal_context_map = kStaticContextMapComplexUTF8[:] + return true + } + } +} + +func decideOverLiteralContextModeling(input []byte, start_pos uint, length uint, mask uint, quality int, size_hint uint, num_literal_contexts *uint, literal_context_map *[]uint32) { + if quality < minQualityForContextModeling || length < 64 { + return + } else if shouldUseComplexStaticContextMap(input, start_pos, length, mask, quality, size_hint, num_literal_contexts, literal_context_map) { + } else /* Context map was already set, nothing else to do. */ + { + var end_pos uint = start_pos + length + /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of + UTF8 data faster we only examine 64 byte long strides at every 4kB + intervals. */ + + var bigram_prefix_histo = [9]uint32{0} + for ; start_pos+64 <= end_pos; start_pos += 4096 { + var lut = [4]int{0, 0, 1, 2} + var stride_end_pos uint = start_pos + 64 + var prev int = lut[input[start_pos&mask]>>6] * 3 + var pos uint + for pos = start_pos + 1; pos < stride_end_pos; pos++ { + var literal byte = input[pos&mask] + bigram_prefix_histo[prev+lut[literal>>6]]++ + prev = lut[literal>>6] * 3 + } + } + + chooseContextMap(quality, bigram_prefix_histo[0:], num_literal_contexts, literal_context_map) + } +} + +func shouldCompress_encode(data []byte, mask uint, last_flush_pos uint64, bytes uint, num_literals uint, num_commands uint) bool { + /* TODO: find more precise minimal block overhead. */ + if bytes <= 2 { + return false + } + if num_commands < (bytes>>8)+2 { + if float64(num_literals) > 0.99*float64(bytes) { + var literal_histo = [256]uint32{0} + const kSampleRate uint32 = 13 + const kMinEntropy float64 = 7.92 + var bit_cost_threshold float64 = float64(bytes) * kMinEntropy / float64(kSampleRate) + var t uint = uint((uint32(bytes) + kSampleRate - 1) / kSampleRate) + var pos uint32 = uint32(last_flush_pos) + var i uint + for i = 0; i < t; i++ { + literal_histo[data[pos&uint32(mask)]]++ + pos += kSampleRate + } + + if bitsEntropy(literal_histo[:], 256) > bit_cost_threshold { + return false + } + } + } + + return true +} + +/* Chooses the literal context mode for a metablock */ +func chooseContextMode(params *encoderParams, data []byte, pos uint, mask uint, length uint) int { + /* We only do the computation for the option of something else than + CONTEXT_UTF8 for the highest qualities */ + if params.quality >= minQualityForHqBlockSplitting && !isMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio) { + return contextSigned + } + + return contextUTF8 +} + +func writeMetaBlockInternal(data []byte, mask uint, last_flush_pos uint64, bytes uint, is_last bool, literal_context_mode int, params *encoderParams, prev_byte byte, prev_byte2 byte, num_literals uint, commands []command, saved_dist_cache []int, dist_cache []int, storage_ix *uint, storage []byte) { + var wrapped_last_flush_pos uint32 = wrapPosition(last_flush_pos) + var last_bytes uint16 + var last_bytes_bits byte + var literal_context_lut contextLUT = getContextLUT(literal_context_mode) + var block_params encoderParams = *params + + if bytes == 0 { + /* Write the ISLAST and ISEMPTY bits. */ + writeBits(2, 3, storage_ix, storage) + + *storage_ix = (*storage_ix + 7) &^ 7 + return + } + + if !shouldCompress_encode(data, mask, last_flush_pos, bytes, num_literals, uint(len(commands))) { + /* Restore the distance cache, as its last update by + CreateBackwardReferences is now unused. */ + copy(dist_cache, saved_dist_cache[:4]) + + storeUncompressedMetaBlock(is_last, data, uint(wrapped_last_flush_pos), mask, bytes, storage_ix, storage) + return + } + + assert(*storage_ix <= 14) + last_bytes = uint16(storage[1])<<8 | uint16(storage[0]) + last_bytes_bits = byte(*storage_ix) + if params.quality <= maxQualityForStaticEntropyCodes { + storeMetaBlockFast(data, uint(wrapped_last_flush_pos), bytes, mask, is_last, params, commands, storage_ix, storage) + } else if params.quality < minQualityForBlockSplit { + storeMetaBlockTrivial(data, uint(wrapped_last_flush_pos), bytes, mask, is_last, params, commands, storage_ix, storage) + } else { + mb := getMetaBlockSplit() + if params.quality < minQualityForHqBlockSplitting { + var num_literal_contexts uint = 1 + var literal_context_map []uint32 = nil + if !params.disable_literal_context_modeling { + decideOverLiteralContextModeling(data, uint(wrapped_last_flush_pos), bytes, mask, params.quality, params.size_hint, &num_literal_contexts, &literal_context_map) + } + + buildMetaBlockGreedy(data, uint(wrapped_last_flush_pos), mask, prev_byte, prev_byte2, literal_context_lut, num_literal_contexts, literal_context_map, commands, mb) + } else { + buildMetaBlock(data, uint(wrapped_last_flush_pos), mask, &block_params, prev_byte, prev_byte2, commands, literal_context_mode, mb) + } + + if params.quality >= minQualityForOptimizeHistograms { + /* The number of distance symbols effectively used for distance + histograms. It might be less than distance alphabet size + for "Large Window Brotli" (32-bit). */ + var num_effective_dist_codes uint32 = block_params.dist.alphabet_size + if num_effective_dist_codes > numHistogramDistanceSymbols { + num_effective_dist_codes = numHistogramDistanceSymbols + } + + optimizeHistograms(num_effective_dist_codes, mb) + } + + storeMetaBlock(data, uint(wrapped_last_flush_pos), bytes, mask, prev_byte, prev_byte2, is_last, &block_params, literal_context_mode, commands, mb, storage_ix, storage) + freeMetaBlockSplit(mb) + } + + if bytes+4 < *storage_ix>>3 { + /* Restore the distance cache and last byte. */ + copy(dist_cache, saved_dist_cache[:4]) + + storage[0] = byte(last_bytes) + storage[1] = byte(last_bytes >> 8) + *storage_ix = uint(last_bytes_bits) + storeUncompressedMetaBlock(is_last, data, uint(wrapped_last_flush_pos), mask, bytes, storage_ix, storage) + } +} + +func chooseDistanceParams(params *encoderParams) { + var distance_postfix_bits uint32 = 0 + var num_direct_distance_codes uint32 = 0 + + if params.quality >= minQualityForNonzeroDistanceParams { + var ndirect_msb uint32 + if params.mode == modeFont { + distance_postfix_bits = 1 + num_direct_distance_codes = 12 + } else { + distance_postfix_bits = params.dist.distance_postfix_bits + num_direct_distance_codes = params.dist.num_direct_distance_codes + } + + ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0F + if distance_postfix_bits > maxNpostfix || num_direct_distance_codes > maxNdirect || ndirect_msb<>25)), (last_command.dist_prefix_&0x3FF == 0), &last_command.cmd_prefix_) + } +} + +/* + Processes the accumulated input data and writes + the new output meta-block to s.dest, if one has been + created (otherwise the processed input data is buffered internally). + If |is_last| or |force_flush| is true, an output meta-block is + always created. However, until |is_last| is true encoder may retain up + to 7 bits of the last byte of output. To force encoder to dump the remaining + bits use WriteMetadata() to append an empty meta-data block. + Returns false if the size of the input data is larger than + input_block_size(). +*/ +func encodeData(s *Writer, is_last bool, force_flush bool) bool { + var delta uint64 = unprocessedInputSize(s) + var bytes uint32 = uint32(delta) + var wrapped_last_processed_pos uint32 = wrapPosition(s.last_processed_pos_) + var data []byte + var mask uint32 + var literal_context_mode int + + data = s.ringbuffer_.buffer_ + mask = s.ringbuffer_.mask_ + + /* Adding more blocks after "last" block is forbidden. */ + if s.is_last_block_emitted_ { + return false + } + if is_last { + s.is_last_block_emitted_ = true + } + + if delta > uint64(inputBlockSize(s)) { + return false + } + + if s.params.quality == fastTwoPassCompressionQuality { + if s.command_buf_ == nil || cap(s.command_buf_) < int(kCompressFragmentTwoPassBlockSize) { + s.command_buf_ = make([]uint32, kCompressFragmentTwoPassBlockSize) + s.literal_buf_ = make([]byte, kCompressFragmentTwoPassBlockSize) + } else { + s.command_buf_ = s.command_buf_[:kCompressFragmentTwoPassBlockSize] + s.literal_buf_ = s.literal_buf_[:kCompressFragmentTwoPassBlockSize] + } + } + + if s.params.quality == fastOnePassCompressionQuality || s.params.quality == fastTwoPassCompressionQuality { + var storage []byte + var storage_ix uint = uint(s.last_bytes_bits_) + var table_size uint + var table []int + + if delta == 0 && !is_last { + /* We have no new input data and we don't have to finish the stream, so + nothing to do. */ + return true + } + + storage = s.getStorage(int(2*bytes + 503)) + storage[0] = byte(s.last_bytes_) + storage[1] = byte(s.last_bytes_ >> 8) + table = getHashTable(s, s.params.quality, uint(bytes), &table_size) + if s.params.quality == fastOnePassCompressionQuality { + compressFragmentFast(data[wrapped_last_processed_pos&mask:], uint(bytes), is_last, table, table_size, s.cmd_depths_[:], s.cmd_bits_[:], &s.cmd_code_numbits_, s.cmd_code_[:], &storage_ix, storage) + } else { + compressFragmentTwoPass(data[wrapped_last_processed_pos&mask:], uint(bytes), is_last, s.command_buf_, s.literal_buf_, table, table_size, &storage_ix, storage) + } + + s.last_bytes_ = uint16(storage[storage_ix>>3]) + s.last_bytes_bits_ = byte(storage_ix & 7) + updateLastProcessedPos(s) + s.writeOutput(storage[:storage_ix>>3]) + return true + } + { + /* Theoretical max number of commands is 1 per 2 bytes. */ + newsize := len(s.commands) + int(bytes)/2 + 1 + if newsize > cap(s.commands) { + /* Reserve a bit more memory to allow merging with a next block + without reallocation: that would impact speed. */ + newsize += int(bytes/4) + 16 + + new_commands := make([]command, len(s.commands), newsize) + if s.commands != nil { + copy(new_commands, s.commands) + } + + s.commands = new_commands + } + } + + initOrStitchToPreviousBlock(&s.hasher_, data, uint(mask), &s.params, uint(wrapped_last_processed_pos), uint(bytes), is_last) + + literal_context_mode = chooseContextMode(&s.params, data, uint(wrapPosition(s.last_flush_pos_)), uint(mask), uint(s.input_pos_-s.last_flush_pos_)) + + if len(s.commands) != 0 && s.last_insert_len_ == 0 { + extendLastCommand(s, &bytes, &wrapped_last_processed_pos) + } + + if s.params.quality == zopflificationQuality { + assert(s.params.hasher.type_ == 10) + createZopfliBackwardReferences(uint(bytes), uint(wrapped_last_processed_pos), data, uint(mask), &s.params, s.hasher_.(*h10), s.dist_cache_[:], &s.last_insert_len_, &s.commands, &s.num_literals_) + } else if s.params.quality == hqZopflificationQuality { + assert(s.params.hasher.type_ == 10) + createHqZopfliBackwardReferences(uint(bytes), uint(wrapped_last_processed_pos), data, uint(mask), &s.params, s.hasher_, s.dist_cache_[:], &s.last_insert_len_, &s.commands, &s.num_literals_) + } else { + createBackwardReferences(uint(bytes), uint(wrapped_last_processed_pos), data, uint(mask), &s.params, s.hasher_, s.dist_cache_[:], &s.last_insert_len_, &s.commands, &s.num_literals_) + } + { + var max_length uint = maxMetablockSize(&s.params) + var max_literals uint = max_length / 8 + max_commands := int(max_length / 8) + var processed_bytes uint = uint(s.input_pos_ - s.last_flush_pos_) + var next_input_fits_metablock bool = (processed_bytes+inputBlockSize(s) <= max_length) + var should_flush bool = (s.params.quality < minQualityForBlockSplit && s.num_literals_+uint(len(s.commands)) >= maxNumDelayedSymbols) + /* If maximal possible additional block doesn't fit metablock, flush now. */ + /* TODO: Postpone decision until next block arrives? */ + + /* If block splitting is not used, then flush as soon as there is some + amount of commands / literals produced. */ + if !is_last && !force_flush && !should_flush && next_input_fits_metablock && s.num_literals_ < max_literals && len(s.commands) < max_commands { + /* Merge with next input block. Everything will happen later. */ + if updateLastProcessedPos(s) { + hasherReset(s.hasher_) + } + + return true + } + } + + /* Create the last insert-only command. */ + if s.last_insert_len_ > 0 { + s.commands = append(s.commands, makeInsertCommand(s.last_insert_len_)) + s.num_literals_ += s.last_insert_len_ + s.last_insert_len_ = 0 + } + + if !is_last && s.input_pos_ == s.last_flush_pos_ { + /* We have no new input data and we don't have to finish the stream, so + nothing to do. */ + return true + } + + assert(s.input_pos_ >= s.last_flush_pos_) + assert(s.input_pos_ > s.last_flush_pos_ || is_last) + assert(s.input_pos_-s.last_flush_pos_ <= 1<<24) + { + var metablock_size uint32 = uint32(s.input_pos_ - s.last_flush_pos_) + var storage []byte = s.getStorage(int(2*metablock_size + 503)) + var storage_ix uint = uint(s.last_bytes_bits_) + storage[0] = byte(s.last_bytes_) + storage[1] = byte(s.last_bytes_ >> 8) + writeMetaBlockInternal(data, uint(mask), s.last_flush_pos_, uint(metablock_size), is_last, literal_context_mode, &s.params, s.prev_byte_, s.prev_byte2_, s.num_literals_, s.commands, s.saved_dist_cache_[:], s.dist_cache_[:], &storage_ix, storage) + s.last_bytes_ = uint16(storage[storage_ix>>3]) + s.last_bytes_bits_ = byte(storage_ix & 7) + s.last_flush_pos_ = s.input_pos_ + if updateLastProcessedPos(s) { + hasherReset(s.hasher_) + } + + if s.last_flush_pos_ > 0 { + s.prev_byte_ = data[(uint32(s.last_flush_pos_)-1)&mask] + } + + if s.last_flush_pos_ > 1 { + s.prev_byte2_ = data[uint32(s.last_flush_pos_-2)&mask] + } + + s.commands = s.commands[:0] + s.num_literals_ = 0 + + /* Save the state of the distance cache in case we need to restore it for + emitting an uncompressed block. */ + copy(s.saved_dist_cache_[:], s.dist_cache_[:]) + + s.writeOutput(storage[:storage_ix>>3]) + return true + } +} + +/* Dumps remaining output bits and metadata header to |header|. + Returns number of produced bytes. + REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long. + REQUIRED: |block_size| <= (1 << 24). */ +func writeMetadataHeader(s *Writer, block_size uint, header []byte) uint { + storage_ix := uint(s.last_bytes_bits_) + header[0] = byte(s.last_bytes_) + header[1] = byte(s.last_bytes_ >> 8) + s.last_bytes_ = 0 + s.last_bytes_bits_ = 0 + + writeBits(1, 0, &storage_ix, header) + writeBits(2, 3, &storage_ix, header) + writeBits(1, 0, &storage_ix, header) + if block_size == 0 { + writeBits(2, 0, &storage_ix, header) + } else { + var nbits uint32 + if block_size == 1 { + nbits = 0 + } else { + nbits = log2FloorNonZero(uint(uint32(block_size)-1)) + 1 + } + var nbytes uint32 = (nbits + 7) / 8 + writeBits(2, uint64(nbytes), &storage_ix, header) + writeBits(uint(8*nbytes), uint64(block_size)-1, &storage_ix, header) + } + + return (storage_ix + 7) >> 3 +} + +func injectBytePaddingBlock(s *Writer) { + var seal uint32 = uint32(s.last_bytes_) + var seal_bits uint = uint(s.last_bytes_bits_) + s.last_bytes_ = 0 + s.last_bytes_bits_ = 0 + + /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */ + seal |= 0x6 << seal_bits + + seal_bits += 6 + + destination := s.tiny_buf_.u8[:] + + destination[0] = byte(seal) + if seal_bits > 8 { + destination[1] = byte(seal >> 8) + } + if seal_bits > 16 { + destination[2] = byte(seal >> 16) + } + s.writeOutput(destination[:(seal_bits+7)>>3]) +} + +func checkFlushComplete(s *Writer) { + if s.stream_state_ == streamFlushRequested && s.err == nil { + s.stream_state_ = streamProcessing + } +} + +func encoderCompressStreamFast(s *Writer, op int, available_in *uint, next_in *[]byte) bool { + var block_size_limit uint = uint(1) << s.params.lgwin + var buf_size uint = brotli_min_size_t(kCompressFragmentTwoPassBlockSize, brotli_min_size_t(*available_in, block_size_limit)) + var command_buf []uint32 = nil + var literal_buf []byte = nil + if s.params.quality != fastOnePassCompressionQuality && s.params.quality != fastTwoPassCompressionQuality { + return false + } + + if s.params.quality == fastTwoPassCompressionQuality { + if s.command_buf_ == nil || cap(s.command_buf_) < int(buf_size) { + s.command_buf_ = make([]uint32, buf_size) + s.literal_buf_ = make([]byte, buf_size) + } else { + s.command_buf_ = s.command_buf_[:buf_size] + s.literal_buf_ = s.literal_buf_[:buf_size] + } + + command_buf = s.command_buf_ + literal_buf = s.literal_buf_ + } + + for { + if s.stream_state_ == streamFlushRequested && s.last_bytes_bits_ != 0 { + injectBytePaddingBlock(s) + continue + } + + /* Compress block only when stream is not + finished, there is no pending flush request, and there is either + additional input or pending operation. */ + if s.stream_state_ == streamProcessing && (*available_in != 0 || op != int(operationProcess)) { + var block_size uint = brotli_min_size_t(block_size_limit, *available_in) + var is_last bool = (*available_in == block_size) && (op == int(operationFinish)) + var force_flush bool = (*available_in == block_size) && (op == int(operationFlush)) + var max_out_size uint = 2*block_size + 503 + var storage []byte = nil + var storage_ix uint = uint(s.last_bytes_bits_) + var table_size uint + var table []int + + if force_flush && block_size == 0 { + s.stream_state_ = streamFlushRequested + continue + } + + storage = s.getStorage(int(max_out_size)) + + storage[0] = byte(s.last_bytes_) + storage[1] = byte(s.last_bytes_ >> 8) + table = getHashTable(s, s.params.quality, block_size, &table_size) + + if s.params.quality == fastOnePassCompressionQuality { + compressFragmentFast(*next_in, block_size, is_last, table, table_size, s.cmd_depths_[:], s.cmd_bits_[:], &s.cmd_code_numbits_, s.cmd_code_[:], &storage_ix, storage) + } else { + compressFragmentTwoPass(*next_in, block_size, is_last, command_buf, literal_buf, table, table_size, &storage_ix, storage) + } + + *next_in = (*next_in)[block_size:] + *available_in -= block_size + var out_bytes uint = storage_ix >> 3 + s.writeOutput(storage[:out_bytes]) + + s.last_bytes_ = uint16(storage[storage_ix>>3]) + s.last_bytes_bits_ = byte(storage_ix & 7) + + if force_flush { + s.stream_state_ = streamFlushRequested + } + if is_last { + s.stream_state_ = streamFinished + } + continue + } + + break + } + + checkFlushComplete(s) + return true +} + +func processMetadata(s *Writer, available_in *uint, next_in *[]byte) bool { + if *available_in > 1<<24 { + return false + } + + /* Switch to metadata block workflow, if required. */ + if s.stream_state_ == streamProcessing { + s.remaining_metadata_bytes_ = uint32(*available_in) + s.stream_state_ = streamMetadataHead + } + + if s.stream_state_ != streamMetadataHead && s.stream_state_ != streamMetadataBody { + return false + } + + for { + if s.stream_state_ == streamFlushRequested && s.last_bytes_bits_ != 0 { + injectBytePaddingBlock(s) + continue + } + + if s.input_pos_ != s.last_flush_pos_ { + var result bool = encodeData(s, false, true) + if !result { + return false + } + continue + } + + if s.stream_state_ == streamMetadataHead { + n := writeMetadataHeader(s, uint(s.remaining_metadata_bytes_), s.tiny_buf_.u8[:]) + s.writeOutput(s.tiny_buf_.u8[:n]) + s.stream_state_ = streamMetadataBody + continue + } else { + /* Exit workflow only when there is no more input and no more output. + Otherwise client may continue producing empty metadata blocks. */ + if s.remaining_metadata_bytes_ == 0 { + s.remaining_metadata_bytes_ = math.MaxUint32 + s.stream_state_ = streamProcessing + break + } + + /* This guarantees progress in "TakeOutput" workflow. */ + var c uint32 = brotli_min_uint32_t(s.remaining_metadata_bytes_, 16) + copy(s.tiny_buf_.u8[:], (*next_in)[:c]) + *next_in = (*next_in)[c:] + *available_in -= uint(c) + s.remaining_metadata_bytes_ -= c + s.writeOutput(s.tiny_buf_.u8[:c]) + + continue + } + } + + return true +} + +func updateSizeHint(s *Writer, available_in uint) { + if s.params.size_hint == 0 { + var delta uint64 = unprocessedInputSize(s) + var tail uint64 = uint64(available_in) + var limit uint32 = 1 << 30 + var total uint32 + if (delta >= uint64(limit)) || (tail >= uint64(limit)) || ((delta + tail) >= uint64(limit)) { + total = limit + } else { + total = uint32(delta + tail) + } + + s.params.size_hint = uint(total) + } +} + +func encoderCompressStream(s *Writer, op int, available_in *uint, next_in *[]byte) bool { + if !ensureInitialized(s) { + return false + } + + /* Unfinished metadata block; check requirements. */ + if s.remaining_metadata_bytes_ != math.MaxUint32 { + if uint32(*available_in) != s.remaining_metadata_bytes_ { + return false + } + if op != int(operationEmitMetadata) { + return false + } + } + + if op == int(operationEmitMetadata) { + updateSizeHint(s, 0) /* First data metablock might be emitted here. */ + return processMetadata(s, available_in, next_in) + } + + if s.stream_state_ == streamMetadataHead || s.stream_state_ == streamMetadataBody { + return false + } + + if s.stream_state_ != streamProcessing && *available_in != 0 { + return false + } + + if s.params.quality == fastOnePassCompressionQuality || s.params.quality == fastTwoPassCompressionQuality { + return encoderCompressStreamFast(s, op, available_in, next_in) + } + + for { + var remaining_block_size uint = remainingInputBlockSize(s) + + if remaining_block_size != 0 && *available_in != 0 { + var copy_input_size uint = brotli_min_size_t(remaining_block_size, *available_in) + copyInputToRingBuffer(s, copy_input_size, *next_in) + *next_in = (*next_in)[copy_input_size:] + *available_in -= copy_input_size + continue + } + + if s.stream_state_ == streamFlushRequested && s.last_bytes_bits_ != 0 { + injectBytePaddingBlock(s) + continue + } + + /* Compress data only when stream is not + finished and there is no pending flush request. */ + if s.stream_state_ == streamProcessing { + if remaining_block_size == 0 || op != int(operationProcess) { + var is_last bool = ((*available_in == 0) && op == int(operationFinish)) + var force_flush bool = ((*available_in == 0) && op == int(operationFlush)) + var result bool + updateSizeHint(s, *available_in) + result = encodeData(s, is_last, force_flush) + if !result { + return false + } + if force_flush { + s.stream_state_ = streamFlushRequested + } + if is_last { + s.stream_state_ = streamFinished + } + continue + } + } + + break + } + + checkFlushComplete(s) + return true +} + +func (w *Writer) writeOutput(data []byte) { + if w.err != nil { + return + } + + _, w.err = w.dst.Write(data) + if w.err == nil { + checkFlushComplete(w) + } +} diff --git a/vendor/github.com/andybalholm/brotli/encoder_dict.go b/vendor/github.com/andybalholm/brotli/encoder_dict.go new file mode 100644 index 0000000000..55c051c623 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/encoder_dict.go @@ -0,0 +1,22 @@ +package brotli + +/* Dictionary data (words and transforms) for 1 possible context */ +type encoderDictionary struct { + words *dictionary + cutoffTransformsCount uint32 + cutoffTransforms uint64 + hash_table []uint16 + buckets []uint16 + dict_words []dictWord +} + +func initEncoderDictionary(dict *encoderDictionary) { + dict.words = getDictionary() + + dict.hash_table = kStaticDictionaryHash[:] + dict.buckets = kStaticDictionaryBuckets[:] + dict.dict_words = kStaticDictionaryWords[:] + + dict.cutoffTransformsCount = kCutoffTransformsCount + dict.cutoffTransforms = kCutoffTransforms +} diff --git a/vendor/github.com/andybalholm/brotli/entropy_encode.go b/vendor/github.com/andybalholm/brotli/entropy_encode.go new file mode 100644 index 0000000000..3f469a3dd9 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/entropy_encode.go @@ -0,0 +1,592 @@ +package brotli + +import "math" + +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Entropy encoding (Huffman) utilities. */ + +/* A node of a Huffman tree. */ +type huffmanTree struct { + total_count_ uint32 + index_left_ int16 + index_right_or_value_ int16 +} + +func initHuffmanTree(self *huffmanTree, count uint32, left int16, right int16) { + self.total_count_ = count + self.index_left_ = left + self.index_right_or_value_ = right +} + +/* Input size optimized Shell sort. */ +type huffmanTreeComparator func(huffmanTree, huffmanTree) bool + +var sortHuffmanTreeItems_gaps = []uint{132, 57, 23, 10, 4, 1} + +func sortHuffmanTreeItems(items []huffmanTree, n uint, comparator huffmanTreeComparator) { + if n < 13 { + /* Insertion sort. */ + var i uint + for i = 1; i < n; i++ { + var tmp huffmanTree = items[i] + var k uint = i + var j uint = i - 1 + for comparator(tmp, items[j]) { + items[k] = items[j] + k = j + if j == 0 { + break + } + j-- + } + + items[k] = tmp + } + + return + } else { + var g int + if n < 57 { + g = 2 + } else { + g = 0 + } + for ; g < 6; g++ { + var gap uint = sortHuffmanTreeItems_gaps[g] + var i uint + for i = gap; i < n; i++ { + var j uint = i + var tmp huffmanTree = items[i] + for ; j >= gap && comparator(tmp, items[j-gap]); j -= gap { + items[j] = items[j-gap] + } + + items[j] = tmp + } + } + } +} + +/* Returns 1 if assignment of depths succeeded, otherwise 0. */ +func setDepth(p0 int, pool []huffmanTree, depth []byte, max_depth int) bool { + var stack [16]int + var level int = 0 + var p int = p0 + assert(max_depth <= 15) + stack[0] = -1 + for { + if pool[p].index_left_ >= 0 { + level++ + if level > max_depth { + return false + } + stack[level] = int(pool[p].index_right_or_value_) + p = int(pool[p].index_left_) + continue + } else { + depth[pool[p].index_right_or_value_] = byte(level) + } + + for level >= 0 && stack[level] == -1 { + level-- + } + if level < 0 { + return true + } + p = stack[level] + stack[level] = -1 + } +} + +/* Sort the root nodes, least popular first. */ +func sortHuffmanTree(v0 huffmanTree, v1 huffmanTree) bool { + if v0.total_count_ != v1.total_count_ { + return v0.total_count_ < v1.total_count_ + } + + return v0.index_right_or_value_ > v1.index_right_or_value_ +} + +/* This function will create a Huffman tree. + + The catch here is that the tree cannot be arbitrarily deep. + Brotli specifies a maximum depth of 15 bits for "code trees" + and 7 bits for "code length code trees." + + count_limit is the value that is to be faked as the minimum value + and this minimum value is raised until the tree matches the + maximum length requirement. + + This algorithm is not of excellent performance for very long data blocks, + especially when population counts are longer than 2**tree_limit, but + we are not planning to use this with extremely long blocks. + + See http://en.wikipedia.org/wiki/Huffman_coding */ +func createHuffmanTree(data []uint32, length uint, tree_limit int, tree []huffmanTree, depth []byte) { + var count_limit uint32 + var sentinel huffmanTree + initHuffmanTree(&sentinel, math.MaxUint32, -1, -1) + + /* For block sizes below 64 kB, we never need to do a second iteration + of this loop. Probably all of our block sizes will be smaller than + that, so this loop is mostly of academic interest. If we actually + would need this, we would be better off with the Katajainen algorithm. */ + for count_limit = 1; ; count_limit *= 2 { + var n uint = 0 + var i uint + var j uint + var k uint + for i = length; i != 0; { + i-- + if data[i] != 0 { + var count uint32 = brotli_max_uint32_t(data[i], count_limit) + initHuffmanTree(&tree[n], count, -1, int16(i)) + n++ + } + } + + if n == 1 { + depth[tree[0].index_right_or_value_] = 1 /* Only one element. */ + break + } + + sortHuffmanTreeItems(tree, n, huffmanTreeComparator(sortHuffmanTree)) + + /* The nodes are: + [0, n): the sorted leaf nodes that we start with. + [n]: we add a sentinel here. + [n + 1, 2n): new parent nodes are added here, starting from + (n+1). These are naturally in ascending order. + [2n]: we add a sentinel at the end as well. + There will be (2n+1) elements at the end. */ + tree[n] = sentinel + + tree[n+1] = sentinel + + i = 0 /* Points to the next leaf node. */ + j = n + 1 /* Points to the next non-leaf node. */ + for k = n - 1; k != 0; k-- { + var left uint + var right uint + if tree[i].total_count_ <= tree[j].total_count_ { + left = i + i++ + } else { + left = j + j++ + } + + if tree[i].total_count_ <= tree[j].total_count_ { + right = i + i++ + } else { + right = j + j++ + } + { + /* The sentinel node becomes the parent node. */ + var j_end uint = 2*n - k + tree[j_end].total_count_ = tree[left].total_count_ + tree[right].total_count_ + tree[j_end].index_left_ = int16(left) + tree[j_end].index_right_or_value_ = int16(right) + + /* Add back the last sentinel node. */ + tree[j_end+1] = sentinel + } + } + + if setDepth(int(2*n-1), tree[0:], depth, tree_limit) { + /* We need to pack the Huffman tree in tree_limit bits. If this was not + successful, add fake entities to the lowest values and retry. */ + break + } + } +} + +func reverse(v []byte, start uint, end uint) { + end-- + for start < end { + var tmp byte = v[start] + v[start] = v[end] + v[end] = tmp + start++ + end-- + } +} + +func writeHuffmanTreeRepetitions(previous_value byte, value byte, repetitions uint, tree_size *uint, tree []byte, extra_bits_data []byte) { + assert(repetitions > 0) + if previous_value != value { + tree[*tree_size] = value + extra_bits_data[*tree_size] = 0 + (*tree_size)++ + repetitions-- + } + + if repetitions == 7 { + tree[*tree_size] = value + extra_bits_data[*tree_size] = 0 + (*tree_size)++ + repetitions-- + } + + if repetitions < 3 { + var i uint + for i = 0; i < repetitions; i++ { + tree[*tree_size] = value + extra_bits_data[*tree_size] = 0 + (*tree_size)++ + } + } else { + var start uint = *tree_size + repetitions -= 3 + for { + tree[*tree_size] = repeatPreviousCodeLength + extra_bits_data[*tree_size] = byte(repetitions & 0x3) + (*tree_size)++ + repetitions >>= 2 + if repetitions == 0 { + break + } + + repetitions-- + } + + reverse(tree, start, *tree_size) + reverse(extra_bits_data, start, *tree_size) + } +} + +func writeHuffmanTreeRepetitionsZeros(repetitions uint, tree_size *uint, tree []byte, extra_bits_data []byte) { + if repetitions == 11 { + tree[*tree_size] = 0 + extra_bits_data[*tree_size] = 0 + (*tree_size)++ + repetitions-- + } + + if repetitions < 3 { + var i uint + for i = 0; i < repetitions; i++ { + tree[*tree_size] = 0 + extra_bits_data[*tree_size] = 0 + (*tree_size)++ + } + } else { + var start uint = *tree_size + repetitions -= 3 + for { + tree[*tree_size] = repeatZeroCodeLength + extra_bits_data[*tree_size] = byte(repetitions & 0x7) + (*tree_size)++ + repetitions >>= 3 + if repetitions == 0 { + break + } + + repetitions-- + } + + reverse(tree, start, *tree_size) + reverse(extra_bits_data, start, *tree_size) + } +} + +/* Change the population counts in a way that the consequent + Huffman tree compression, especially its RLE-part will be more + likely to compress this data more efficiently. + + length contains the size of the histogram. + counts contains the population counts. + good_for_rle is a buffer of at least length size */ +func optimizeHuffmanCountsForRLE(length uint, counts []uint32, good_for_rle []byte) { + var nonzero_count uint = 0 + var stride uint + var limit uint + var sum uint + var streak_limit uint = 1240 + var i uint + /* Let's make the Huffman code more compatible with RLE encoding. */ + for i = 0; i < length; i++ { + if counts[i] != 0 { + nonzero_count++ + } + } + + if nonzero_count < 16 { + return + } + + for length != 0 && counts[length-1] == 0 { + length-- + } + + if length == 0 { + return /* All zeros. */ + } + + /* Now counts[0..length - 1] does not have trailing zeros. */ + { + var nonzeros uint = 0 + var smallest_nonzero uint32 = 1 << 30 + for i = 0; i < length; i++ { + if counts[i] != 0 { + nonzeros++ + if smallest_nonzero > counts[i] { + smallest_nonzero = counts[i] + } + } + } + + if nonzeros < 5 { + /* Small histogram will model it well. */ + return + } + + if smallest_nonzero < 4 { + var zeros uint = length - nonzeros + if zeros < 6 { + for i = 1; i < length-1; i++ { + if counts[i-1] != 0 && counts[i] == 0 && counts[i+1] != 0 { + counts[i] = 1 + } + } + } + } + + if nonzeros < 28 { + return + } + } + + /* 2) Let's mark all population counts that already can be encoded + with an RLE code. */ + for i := 0; i < int(length); i++ { + good_for_rle[i] = 0 + } + { + var symbol uint32 = counts[0] + /* Let's not spoil any of the existing good RLE codes. + Mark any seq of 0's that is longer as 5 as a good_for_rle. + Mark any seq of non-0's that is longer as 7 as a good_for_rle. */ + + var step uint = 0 + for i = 0; i <= length; i++ { + if i == length || counts[i] != symbol { + if (symbol == 0 && step >= 5) || (symbol != 0 && step >= 7) { + var k uint + for k = 0; k < step; k++ { + good_for_rle[i-k-1] = 1 + } + } + + step = 1 + if i != length { + symbol = counts[i] + } + } else { + step++ + } + } + } + + /* 3) Let's replace those population counts that lead to more RLE codes. + Math here is in 24.8 fixed point representation. */ + stride = 0 + + limit = uint(256*(counts[0]+counts[1]+counts[2])/3 + 420) + sum = 0 + for i = 0; i <= length; i++ { + if i == length || good_for_rle[i] != 0 || (i != 0 && good_for_rle[i-1] != 0) || (256*counts[i]-uint32(limit)+uint32(streak_limit)) >= uint32(2*streak_limit) { + if stride >= 4 || (stride >= 3 && sum == 0) { + var k uint + var count uint = (sum + stride/2) / stride + /* The stride must end, collapse what we have, if we have enough (4). */ + if count == 0 { + count = 1 + } + + if sum == 0 { + /* Don't make an all zeros stride to be upgraded to ones. */ + count = 0 + } + + for k = 0; k < stride; k++ { + /* We don't want to change value at counts[i], + that is already belonging to the next stride. Thus - 1. */ + counts[i-k-1] = uint32(count) + } + } + + stride = 0 + sum = 0 + if i < length-2 { + /* All interesting strides have a count of at least 4, */ + /* at least when non-zeros. */ + limit = uint(256*(counts[i]+counts[i+1]+counts[i+2])/3 + 420) + } else if i < length { + limit = uint(256 * counts[i]) + } else { + limit = 0 + } + } + + stride++ + if i != length { + sum += uint(counts[i]) + if stride >= 4 { + limit = (256*sum + stride/2) / stride + } + + if stride == 4 { + limit += 120 + } + } + } +} + +func decideOverRLEUse(depth []byte, length uint, use_rle_for_non_zero *bool, use_rle_for_zero *bool) { + var total_reps_zero uint = 0 + var total_reps_non_zero uint = 0 + var count_reps_zero uint = 1 + var count_reps_non_zero uint = 1 + var i uint + for i = 0; i < length; { + var value byte = depth[i] + var reps uint = 1 + var k uint + for k = i + 1; k < length && depth[k] == value; k++ { + reps++ + } + + if reps >= 3 && value == 0 { + total_reps_zero += reps + count_reps_zero++ + } + + if reps >= 4 && value != 0 { + total_reps_non_zero += reps + count_reps_non_zero++ + } + + i += reps + } + + *use_rle_for_non_zero = total_reps_non_zero > count_reps_non_zero*2 + *use_rle_for_zero = total_reps_zero > count_reps_zero*2 +} + +/* Write a Huffman tree from bit depths into the bit-stream representation + of a Huffman tree. The generated Huffman tree is to be compressed once + more using a Huffman tree */ +func writeHuffmanTree(depth []byte, length uint, tree_size *uint, tree []byte, extra_bits_data []byte) { + var previous_value byte = initialRepeatedCodeLength + var i uint + var use_rle_for_non_zero bool = false + var use_rle_for_zero bool = false + var new_length uint = length + /* Throw away trailing zeros. */ + for i = 0; i < length; i++ { + if depth[length-i-1] == 0 { + new_length-- + } else { + break + } + } + + /* First gather statistics on if it is a good idea to do RLE. */ + if length > 50 { + /* Find RLE coding for longer codes. + Shorter codes seem not to benefit from RLE. */ + decideOverRLEUse(depth, new_length, &use_rle_for_non_zero, &use_rle_for_zero) + } + + /* Actual RLE coding. */ + for i = 0; i < new_length; { + var value byte = depth[i] + var reps uint = 1 + if (value != 0 && use_rle_for_non_zero) || (value == 0 && use_rle_for_zero) { + var k uint + for k = i + 1; k < new_length && depth[k] == value; k++ { + reps++ + } + } + + if value == 0 { + writeHuffmanTreeRepetitionsZeros(reps, tree_size, tree, extra_bits_data) + } else { + writeHuffmanTreeRepetitions(previous_value, value, reps, tree_size, tree, extra_bits_data) + previous_value = value + } + + i += reps + } +} + +var reverseBits_kLut = [16]uint{ + 0x00, + 0x08, + 0x04, + 0x0C, + 0x02, + 0x0A, + 0x06, + 0x0E, + 0x01, + 0x09, + 0x05, + 0x0D, + 0x03, + 0x0B, + 0x07, + 0x0F, +} + +func reverseBits(num_bits uint, bits uint16) uint16 { + var retval uint = reverseBits_kLut[bits&0x0F] + var i uint + for i = 4; i < num_bits; i += 4 { + retval <<= 4 + bits = uint16(bits >> 4) + retval |= reverseBits_kLut[bits&0x0F] + } + + retval >>= ((0 - num_bits) & 0x03) + return uint16(retval) +} + +/* 0..15 are values for bits */ +const maxHuffmanBits = 16 + +/* Get the actual bit values for a tree of bit depths. */ +func convertBitDepthsToSymbols(depth []byte, len uint, bits []uint16) { + var bl_count = [maxHuffmanBits]uint16{0} + var next_code [maxHuffmanBits]uint16 + var i uint + /* In Brotli, all bit depths are [1..15] + 0 bit depth means that the symbol does not exist. */ + + var code int = 0 + for i = 0; i < len; i++ { + bl_count[depth[i]]++ + } + + bl_count[0] = 0 + next_code[0] = 0 + for i = 1; i < maxHuffmanBits; i++ { + code = (code + int(bl_count[i-1])) << 1 + next_code[i] = uint16(code) + } + + for i = 0; i < len; i++ { + if depth[i] != 0 { + bits[i] = reverseBits(uint(depth[i]), next_code[depth[i]]) + next_code[depth[i]]++ + } + } +} diff --git a/vendor/github.com/andybalholm/brotli/entropy_encode_static.go b/vendor/github.com/andybalholm/brotli/entropy_encode_static.go new file mode 100644 index 0000000000..5ddf3fcbae --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/entropy_encode_static.go @@ -0,0 +1,4394 @@ +package brotli + +var kCodeLengthDepth = [18]byte{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4} + +var kStaticCommandCodeDepth = [numCommandSymbols]byte{ + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 9, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, + 11, +} + +var kStaticDistanceCodeDepth = [64]byte{ + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, + 6, +} + +var kCodeLengthBits = [18]uint32{0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7} + +func storeStaticCodeLengthCode(storage_ix *uint, storage []byte) { + writeBits(40, 0x0000FF55555554, storage_ix, storage) +} + +var kZeroRepsBits = [numCommandSymbols]uint64{ + 0x00000000, + 0x00000000, + 0x00000000, + 0x00000007, + 0x00000017, + 0x00000027, + 0x00000037, + 0x00000047, + 0x00000057, + 0x00000067, + 0x00000077, + 0x00000770, + 0x00000b87, + 0x00001387, + 0x00001b87, + 0x00002387, + 0x00002b87, + 0x00003387, + 0x00003b87, + 0x00000397, + 0x00000b97, + 0x00001397, + 0x00001b97, + 0x00002397, + 0x00002b97, + 0x00003397, + 0x00003b97, + 0x000003a7, + 0x00000ba7, + 0x000013a7, + 0x00001ba7, + 0x000023a7, + 0x00002ba7, + 0x000033a7, + 0x00003ba7, + 0x000003b7, + 0x00000bb7, + 0x000013b7, + 0x00001bb7, + 0x000023b7, + 0x00002bb7, + 0x000033b7, + 0x00003bb7, + 0x000003c7, + 0x00000bc7, + 0x000013c7, + 0x00001bc7, + 0x000023c7, + 0x00002bc7, + 0x000033c7, + 0x00003bc7, + 0x000003d7, + 0x00000bd7, + 0x000013d7, + 0x00001bd7, + 0x000023d7, + 0x00002bd7, + 0x000033d7, + 0x00003bd7, + 0x000003e7, + 0x00000be7, + 0x000013e7, + 0x00001be7, + 0x000023e7, + 0x00002be7, + 0x000033e7, + 0x00003be7, + 0x000003f7, + 0x00000bf7, + 0x000013f7, + 0x00001bf7, + 0x000023f7, + 0x00002bf7, + 0x000033f7, + 0x00003bf7, + 0x0001c387, + 0x0005c387, + 0x0009c387, + 0x000dc387, + 0x0011c387, + 0x0015c387, + 0x0019c387, + 0x001dc387, + 0x0001cb87, + 0x0005cb87, + 0x0009cb87, + 0x000dcb87, + 0x0011cb87, + 0x0015cb87, + 0x0019cb87, + 0x001dcb87, + 0x0001d387, + 0x0005d387, + 0x0009d387, + 0x000dd387, + 0x0011d387, + 0x0015d387, + 0x0019d387, + 0x001dd387, + 0x0001db87, + 0x0005db87, + 0x0009db87, + 0x000ddb87, + 0x0011db87, + 0x0015db87, + 0x0019db87, + 0x001ddb87, + 0x0001e387, + 0x0005e387, + 0x0009e387, + 0x000de387, + 0x0011e387, + 0x0015e387, + 0x0019e387, + 0x001de387, + 0x0001eb87, + 0x0005eb87, + 0x0009eb87, + 0x000deb87, + 0x0011eb87, + 0x0015eb87, + 0x0019eb87, + 0x001deb87, + 0x0001f387, + 0x0005f387, + 0x0009f387, + 0x000df387, + 0x0011f387, + 0x0015f387, + 0x0019f387, + 0x001df387, + 0x0001fb87, + 0x0005fb87, + 0x0009fb87, + 0x000dfb87, + 0x0011fb87, + 0x0015fb87, + 0x0019fb87, + 0x001dfb87, + 0x0001c397, + 0x0005c397, + 0x0009c397, + 0x000dc397, + 0x0011c397, + 0x0015c397, + 0x0019c397, + 0x001dc397, + 0x0001cb97, + 0x0005cb97, + 0x0009cb97, + 0x000dcb97, + 0x0011cb97, + 0x0015cb97, + 0x0019cb97, + 0x001dcb97, + 0x0001d397, + 0x0005d397, + 0x0009d397, + 0x000dd397, + 0x0011d397, + 0x0015d397, + 0x0019d397, + 0x001dd397, + 0x0001db97, + 0x0005db97, + 0x0009db97, + 0x000ddb97, + 0x0011db97, + 0x0015db97, + 0x0019db97, + 0x001ddb97, + 0x0001e397, + 0x0005e397, + 0x0009e397, + 0x000de397, + 0x0011e397, + 0x0015e397, + 0x0019e397, + 0x001de397, + 0x0001eb97, + 0x0005eb97, + 0x0009eb97, + 0x000deb97, + 0x0011eb97, + 0x0015eb97, + 0x0019eb97, + 0x001deb97, + 0x0001f397, + 0x0005f397, + 0x0009f397, + 0x000df397, + 0x0011f397, + 0x0015f397, + 0x0019f397, + 0x001df397, + 0x0001fb97, + 0x0005fb97, + 0x0009fb97, + 0x000dfb97, + 0x0011fb97, + 0x0015fb97, + 0x0019fb97, + 0x001dfb97, + 0x0001c3a7, + 0x0005c3a7, + 0x0009c3a7, + 0x000dc3a7, + 0x0011c3a7, + 0x0015c3a7, + 0x0019c3a7, + 0x001dc3a7, + 0x0001cba7, + 0x0005cba7, + 0x0009cba7, + 0x000dcba7, + 0x0011cba7, + 0x0015cba7, + 0x0019cba7, + 0x001dcba7, + 0x0001d3a7, + 0x0005d3a7, + 0x0009d3a7, + 0x000dd3a7, + 0x0011d3a7, + 0x0015d3a7, + 0x0019d3a7, + 0x001dd3a7, + 0x0001dba7, + 0x0005dba7, + 0x0009dba7, + 0x000ddba7, + 0x0011dba7, + 0x0015dba7, + 0x0019dba7, + 0x001ddba7, + 0x0001e3a7, + 0x0005e3a7, + 0x0009e3a7, + 0x000de3a7, + 0x0011e3a7, + 0x0015e3a7, + 0x0019e3a7, + 0x001de3a7, + 0x0001eba7, + 0x0005eba7, + 0x0009eba7, + 0x000deba7, + 0x0011eba7, + 0x0015eba7, + 0x0019eba7, + 0x001deba7, + 0x0001f3a7, + 0x0005f3a7, + 0x0009f3a7, + 0x000df3a7, + 0x0011f3a7, + 0x0015f3a7, + 0x0019f3a7, + 0x001df3a7, + 0x0001fba7, + 0x0005fba7, + 0x0009fba7, + 0x000dfba7, + 0x0011fba7, + 0x0015fba7, + 0x0019fba7, + 0x001dfba7, + 0x0001c3b7, + 0x0005c3b7, + 0x0009c3b7, + 0x000dc3b7, + 0x0011c3b7, + 0x0015c3b7, + 0x0019c3b7, + 0x001dc3b7, + 0x0001cbb7, + 0x0005cbb7, + 0x0009cbb7, + 0x000dcbb7, + 0x0011cbb7, + 0x0015cbb7, + 0x0019cbb7, + 0x001dcbb7, + 0x0001d3b7, + 0x0005d3b7, + 0x0009d3b7, + 0x000dd3b7, + 0x0011d3b7, + 0x0015d3b7, + 0x0019d3b7, + 0x001dd3b7, + 0x0001dbb7, + 0x0005dbb7, + 0x0009dbb7, + 0x000ddbb7, + 0x0011dbb7, + 0x0015dbb7, + 0x0019dbb7, + 0x001ddbb7, + 0x0001e3b7, + 0x0005e3b7, + 0x0009e3b7, + 0x000de3b7, + 0x0011e3b7, + 0x0015e3b7, + 0x0019e3b7, + 0x001de3b7, + 0x0001ebb7, + 0x0005ebb7, + 0x0009ebb7, + 0x000debb7, + 0x0011ebb7, + 0x0015ebb7, + 0x0019ebb7, + 0x001debb7, + 0x0001f3b7, + 0x0005f3b7, + 0x0009f3b7, + 0x000df3b7, + 0x0011f3b7, + 0x0015f3b7, + 0x0019f3b7, + 0x001df3b7, + 0x0001fbb7, + 0x0005fbb7, + 0x0009fbb7, + 0x000dfbb7, + 0x0011fbb7, + 0x0015fbb7, + 0x0019fbb7, + 0x001dfbb7, + 0x0001c3c7, + 0x0005c3c7, + 0x0009c3c7, + 0x000dc3c7, + 0x0011c3c7, + 0x0015c3c7, + 0x0019c3c7, + 0x001dc3c7, + 0x0001cbc7, + 0x0005cbc7, + 0x0009cbc7, + 0x000dcbc7, + 0x0011cbc7, + 0x0015cbc7, + 0x0019cbc7, + 0x001dcbc7, + 0x0001d3c7, + 0x0005d3c7, + 0x0009d3c7, + 0x000dd3c7, + 0x0011d3c7, + 0x0015d3c7, + 0x0019d3c7, + 0x001dd3c7, + 0x0001dbc7, + 0x0005dbc7, + 0x0009dbc7, + 0x000ddbc7, + 0x0011dbc7, + 0x0015dbc7, + 0x0019dbc7, + 0x001ddbc7, + 0x0001e3c7, + 0x0005e3c7, + 0x0009e3c7, + 0x000de3c7, + 0x0011e3c7, + 0x0015e3c7, + 0x0019e3c7, + 0x001de3c7, + 0x0001ebc7, + 0x0005ebc7, + 0x0009ebc7, + 0x000debc7, + 0x0011ebc7, + 0x0015ebc7, + 0x0019ebc7, + 0x001debc7, + 0x0001f3c7, + 0x0005f3c7, + 0x0009f3c7, + 0x000df3c7, + 0x0011f3c7, + 0x0015f3c7, + 0x0019f3c7, + 0x001df3c7, + 0x0001fbc7, + 0x0005fbc7, + 0x0009fbc7, + 0x000dfbc7, + 0x0011fbc7, + 0x0015fbc7, + 0x0019fbc7, + 0x001dfbc7, + 0x0001c3d7, + 0x0005c3d7, + 0x0009c3d7, + 0x000dc3d7, + 0x0011c3d7, + 0x0015c3d7, + 0x0019c3d7, + 0x001dc3d7, + 0x0001cbd7, + 0x0005cbd7, + 0x0009cbd7, + 0x000dcbd7, + 0x0011cbd7, + 0x0015cbd7, + 0x0019cbd7, + 0x001dcbd7, + 0x0001d3d7, + 0x0005d3d7, + 0x0009d3d7, + 0x000dd3d7, + 0x0011d3d7, + 0x0015d3d7, + 0x0019d3d7, + 0x001dd3d7, + 0x0001dbd7, + 0x0005dbd7, + 0x0009dbd7, + 0x000ddbd7, + 0x0011dbd7, + 0x0015dbd7, + 0x0019dbd7, + 0x001ddbd7, + 0x0001e3d7, + 0x0005e3d7, + 0x0009e3d7, + 0x000de3d7, + 0x0011e3d7, + 0x0015e3d7, + 0x0019e3d7, + 0x001de3d7, + 0x0001ebd7, + 0x0005ebd7, + 0x0009ebd7, + 0x000debd7, + 0x0011ebd7, + 0x0015ebd7, + 0x0019ebd7, + 0x001debd7, + 0x0001f3d7, + 0x0005f3d7, + 0x0009f3d7, + 0x000df3d7, + 0x0011f3d7, + 0x0015f3d7, + 0x0019f3d7, + 0x001df3d7, + 0x0001fbd7, + 0x0005fbd7, + 0x0009fbd7, + 0x000dfbd7, + 0x0011fbd7, + 0x0015fbd7, + 0x0019fbd7, + 0x001dfbd7, + 0x0001c3e7, + 0x0005c3e7, + 0x0009c3e7, + 0x000dc3e7, + 0x0011c3e7, + 0x0015c3e7, + 0x0019c3e7, + 0x001dc3e7, + 0x0001cbe7, + 0x0005cbe7, + 0x0009cbe7, + 0x000dcbe7, + 0x0011cbe7, + 0x0015cbe7, + 0x0019cbe7, + 0x001dcbe7, + 0x0001d3e7, + 0x0005d3e7, + 0x0009d3e7, + 0x000dd3e7, + 0x0011d3e7, + 0x0015d3e7, + 0x0019d3e7, + 0x001dd3e7, + 0x0001dbe7, + 0x0005dbe7, + 0x0009dbe7, + 0x000ddbe7, + 0x0011dbe7, + 0x0015dbe7, + 0x0019dbe7, + 0x001ddbe7, + 0x0001e3e7, + 0x0005e3e7, + 0x0009e3e7, + 0x000de3e7, + 0x0011e3e7, + 0x0015e3e7, + 0x0019e3e7, + 0x001de3e7, + 0x0001ebe7, + 0x0005ebe7, + 0x0009ebe7, + 0x000debe7, + 0x0011ebe7, + 0x0015ebe7, + 0x0019ebe7, + 0x001debe7, + 0x0001f3e7, + 0x0005f3e7, + 0x0009f3e7, + 0x000df3e7, + 0x0011f3e7, + 0x0015f3e7, + 0x0019f3e7, + 0x001df3e7, + 0x0001fbe7, + 0x0005fbe7, + 0x0009fbe7, + 0x000dfbe7, + 0x0011fbe7, + 0x0015fbe7, + 0x0019fbe7, + 0x001dfbe7, + 0x0001c3f7, + 0x0005c3f7, + 0x0009c3f7, + 0x000dc3f7, + 0x0011c3f7, + 0x0015c3f7, + 0x0019c3f7, + 0x001dc3f7, + 0x0001cbf7, + 0x0005cbf7, + 0x0009cbf7, + 0x000dcbf7, + 0x0011cbf7, + 0x0015cbf7, + 0x0019cbf7, + 0x001dcbf7, + 0x0001d3f7, + 0x0005d3f7, + 0x0009d3f7, + 0x000dd3f7, + 0x0011d3f7, + 0x0015d3f7, + 0x0019d3f7, + 0x001dd3f7, + 0x0001dbf7, + 0x0005dbf7, + 0x0009dbf7, + 0x000ddbf7, + 0x0011dbf7, + 0x0015dbf7, + 0x0019dbf7, + 0x001ddbf7, + 0x0001e3f7, + 0x0005e3f7, + 0x0009e3f7, + 0x000de3f7, + 0x0011e3f7, + 0x0015e3f7, + 0x0019e3f7, + 0x001de3f7, + 0x0001ebf7, + 0x0005ebf7, + 0x0009ebf7, + 0x000debf7, + 0x0011ebf7, + 0x0015ebf7, + 0x0019ebf7, + 0x001debf7, + 0x0001f3f7, + 0x0005f3f7, + 0x0009f3f7, + 0x000df3f7, + 0x0011f3f7, + 0x0015f3f7, + 0x0019f3f7, + 0x001df3f7, + 0x0001fbf7, + 0x0005fbf7, + 0x0009fbf7, + 0x000dfbf7, + 0x0011fbf7, + 0x0015fbf7, + 0x0019fbf7, + 0x001dfbf7, + 0x00e1c387, + 0x02e1c387, + 0x04e1c387, + 0x06e1c387, + 0x08e1c387, + 0x0ae1c387, + 0x0ce1c387, + 0x0ee1c387, + 0x00e5c387, + 0x02e5c387, + 0x04e5c387, + 0x06e5c387, + 0x08e5c387, + 0x0ae5c387, + 0x0ce5c387, + 0x0ee5c387, + 0x00e9c387, + 0x02e9c387, + 0x04e9c387, + 0x06e9c387, + 0x08e9c387, + 0x0ae9c387, + 0x0ce9c387, + 0x0ee9c387, + 0x00edc387, + 0x02edc387, + 0x04edc387, + 0x06edc387, + 0x08edc387, + 0x0aedc387, + 0x0cedc387, + 0x0eedc387, + 0x00f1c387, + 0x02f1c387, + 0x04f1c387, + 0x06f1c387, + 0x08f1c387, + 0x0af1c387, + 0x0cf1c387, + 0x0ef1c387, + 0x00f5c387, + 0x02f5c387, + 0x04f5c387, + 0x06f5c387, + 0x08f5c387, + 0x0af5c387, + 0x0cf5c387, + 0x0ef5c387, + 0x00f9c387, + 0x02f9c387, + 0x04f9c387, + 0x06f9c387, + 0x08f9c387, + 0x0af9c387, + 0x0cf9c387, + 0x0ef9c387, + 0x00fdc387, + 0x02fdc387, + 0x04fdc387, + 0x06fdc387, + 0x08fdc387, + 0x0afdc387, + 0x0cfdc387, + 0x0efdc387, + 0x00e1cb87, + 0x02e1cb87, + 0x04e1cb87, + 0x06e1cb87, + 0x08e1cb87, + 0x0ae1cb87, + 0x0ce1cb87, + 0x0ee1cb87, + 0x00e5cb87, + 0x02e5cb87, + 0x04e5cb87, + 0x06e5cb87, + 0x08e5cb87, + 0x0ae5cb87, + 0x0ce5cb87, + 0x0ee5cb87, + 0x00e9cb87, + 0x02e9cb87, + 0x04e9cb87, + 0x06e9cb87, + 0x08e9cb87, + 0x0ae9cb87, + 0x0ce9cb87, + 0x0ee9cb87, + 0x00edcb87, + 0x02edcb87, + 0x04edcb87, + 0x06edcb87, + 0x08edcb87, + 0x0aedcb87, + 0x0cedcb87, + 0x0eedcb87, + 0x00f1cb87, + 0x02f1cb87, + 0x04f1cb87, + 0x06f1cb87, + 0x08f1cb87, + 0x0af1cb87, + 0x0cf1cb87, + 0x0ef1cb87, + 0x00f5cb87, + 0x02f5cb87, + 0x04f5cb87, + 0x06f5cb87, + 0x08f5cb87, + 0x0af5cb87, + 0x0cf5cb87, + 0x0ef5cb87, + 0x00f9cb87, + 0x02f9cb87, + 0x04f9cb87, + 0x06f9cb87, + 0x08f9cb87, +} + +var kZeroRepsDepth = [numCommandSymbols]uint32{ + 0, + 4, + 8, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 7, + 11, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 14, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 21, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, + 28, +} + +var kNonZeroRepsBits = [numCommandSymbols]uint64{ + 0x0000000b, + 0x0000001b, + 0x0000002b, + 0x0000003b, + 0x000002cb, + 0x000006cb, + 0x00000acb, + 0x00000ecb, + 0x000002db, + 0x000006db, + 0x00000adb, + 0x00000edb, + 0x000002eb, + 0x000006eb, + 0x00000aeb, + 0x00000eeb, + 0x000002fb, + 0x000006fb, + 0x00000afb, + 0x00000efb, + 0x0000b2cb, + 0x0001b2cb, + 0x0002b2cb, + 0x0003b2cb, + 0x0000b6cb, + 0x0001b6cb, + 0x0002b6cb, + 0x0003b6cb, + 0x0000bacb, + 0x0001bacb, + 0x0002bacb, + 0x0003bacb, + 0x0000becb, + 0x0001becb, + 0x0002becb, + 0x0003becb, + 0x0000b2db, + 0x0001b2db, + 0x0002b2db, + 0x0003b2db, + 0x0000b6db, + 0x0001b6db, + 0x0002b6db, + 0x0003b6db, + 0x0000badb, + 0x0001badb, + 0x0002badb, + 0x0003badb, + 0x0000bedb, + 0x0001bedb, + 0x0002bedb, + 0x0003bedb, + 0x0000b2eb, + 0x0001b2eb, + 0x0002b2eb, + 0x0003b2eb, + 0x0000b6eb, + 0x0001b6eb, + 0x0002b6eb, + 0x0003b6eb, + 0x0000baeb, + 0x0001baeb, + 0x0002baeb, + 0x0003baeb, + 0x0000beeb, + 0x0001beeb, + 0x0002beeb, + 0x0003beeb, + 0x0000b2fb, + 0x0001b2fb, + 0x0002b2fb, + 0x0003b2fb, + 0x0000b6fb, + 0x0001b6fb, + 0x0002b6fb, + 0x0003b6fb, + 0x0000bafb, + 0x0001bafb, + 0x0002bafb, + 0x0003bafb, + 0x0000befb, + 0x0001befb, + 0x0002befb, + 0x0003befb, + 0x002cb2cb, + 0x006cb2cb, + 0x00acb2cb, + 0x00ecb2cb, + 0x002db2cb, + 0x006db2cb, + 0x00adb2cb, + 0x00edb2cb, + 0x002eb2cb, + 0x006eb2cb, + 0x00aeb2cb, + 0x00eeb2cb, + 0x002fb2cb, + 0x006fb2cb, + 0x00afb2cb, + 0x00efb2cb, + 0x002cb6cb, + 0x006cb6cb, + 0x00acb6cb, + 0x00ecb6cb, + 0x002db6cb, + 0x006db6cb, + 0x00adb6cb, + 0x00edb6cb, + 0x002eb6cb, + 0x006eb6cb, + 0x00aeb6cb, + 0x00eeb6cb, + 0x002fb6cb, + 0x006fb6cb, + 0x00afb6cb, + 0x00efb6cb, + 0x002cbacb, + 0x006cbacb, + 0x00acbacb, + 0x00ecbacb, + 0x002dbacb, + 0x006dbacb, + 0x00adbacb, + 0x00edbacb, + 0x002ebacb, + 0x006ebacb, + 0x00aebacb, + 0x00eebacb, + 0x002fbacb, + 0x006fbacb, + 0x00afbacb, + 0x00efbacb, + 0x002cbecb, + 0x006cbecb, + 0x00acbecb, + 0x00ecbecb, + 0x002dbecb, + 0x006dbecb, + 0x00adbecb, + 0x00edbecb, + 0x002ebecb, + 0x006ebecb, + 0x00aebecb, + 0x00eebecb, + 0x002fbecb, + 0x006fbecb, + 0x00afbecb, + 0x00efbecb, + 0x002cb2db, + 0x006cb2db, + 0x00acb2db, + 0x00ecb2db, + 0x002db2db, + 0x006db2db, + 0x00adb2db, + 0x00edb2db, + 0x002eb2db, + 0x006eb2db, + 0x00aeb2db, + 0x00eeb2db, + 0x002fb2db, + 0x006fb2db, + 0x00afb2db, + 0x00efb2db, + 0x002cb6db, + 0x006cb6db, + 0x00acb6db, + 0x00ecb6db, + 0x002db6db, + 0x006db6db, + 0x00adb6db, + 0x00edb6db, + 0x002eb6db, + 0x006eb6db, + 0x00aeb6db, + 0x00eeb6db, + 0x002fb6db, + 0x006fb6db, + 0x00afb6db, + 0x00efb6db, + 0x002cbadb, + 0x006cbadb, + 0x00acbadb, + 0x00ecbadb, + 0x002dbadb, + 0x006dbadb, + 0x00adbadb, + 0x00edbadb, + 0x002ebadb, + 0x006ebadb, + 0x00aebadb, + 0x00eebadb, + 0x002fbadb, + 0x006fbadb, + 0x00afbadb, + 0x00efbadb, + 0x002cbedb, + 0x006cbedb, + 0x00acbedb, + 0x00ecbedb, + 0x002dbedb, + 0x006dbedb, + 0x00adbedb, + 0x00edbedb, + 0x002ebedb, + 0x006ebedb, + 0x00aebedb, + 0x00eebedb, + 0x002fbedb, + 0x006fbedb, + 0x00afbedb, + 0x00efbedb, + 0x002cb2eb, + 0x006cb2eb, + 0x00acb2eb, + 0x00ecb2eb, + 0x002db2eb, + 0x006db2eb, + 0x00adb2eb, + 0x00edb2eb, + 0x002eb2eb, + 0x006eb2eb, + 0x00aeb2eb, + 0x00eeb2eb, + 0x002fb2eb, + 0x006fb2eb, + 0x00afb2eb, + 0x00efb2eb, + 0x002cb6eb, + 0x006cb6eb, + 0x00acb6eb, + 0x00ecb6eb, + 0x002db6eb, + 0x006db6eb, + 0x00adb6eb, + 0x00edb6eb, + 0x002eb6eb, + 0x006eb6eb, + 0x00aeb6eb, + 0x00eeb6eb, + 0x002fb6eb, + 0x006fb6eb, + 0x00afb6eb, + 0x00efb6eb, + 0x002cbaeb, + 0x006cbaeb, + 0x00acbaeb, + 0x00ecbaeb, + 0x002dbaeb, + 0x006dbaeb, + 0x00adbaeb, + 0x00edbaeb, + 0x002ebaeb, + 0x006ebaeb, + 0x00aebaeb, + 0x00eebaeb, + 0x002fbaeb, + 0x006fbaeb, + 0x00afbaeb, + 0x00efbaeb, + 0x002cbeeb, + 0x006cbeeb, + 0x00acbeeb, + 0x00ecbeeb, + 0x002dbeeb, + 0x006dbeeb, + 0x00adbeeb, + 0x00edbeeb, + 0x002ebeeb, + 0x006ebeeb, + 0x00aebeeb, + 0x00eebeeb, + 0x002fbeeb, + 0x006fbeeb, + 0x00afbeeb, + 0x00efbeeb, + 0x002cb2fb, + 0x006cb2fb, + 0x00acb2fb, + 0x00ecb2fb, + 0x002db2fb, + 0x006db2fb, + 0x00adb2fb, + 0x00edb2fb, + 0x002eb2fb, + 0x006eb2fb, + 0x00aeb2fb, + 0x00eeb2fb, + 0x002fb2fb, + 0x006fb2fb, + 0x00afb2fb, + 0x00efb2fb, + 0x002cb6fb, + 0x006cb6fb, + 0x00acb6fb, + 0x00ecb6fb, + 0x002db6fb, + 0x006db6fb, + 0x00adb6fb, + 0x00edb6fb, + 0x002eb6fb, + 0x006eb6fb, + 0x00aeb6fb, + 0x00eeb6fb, + 0x002fb6fb, + 0x006fb6fb, + 0x00afb6fb, + 0x00efb6fb, + 0x002cbafb, + 0x006cbafb, + 0x00acbafb, + 0x00ecbafb, + 0x002dbafb, + 0x006dbafb, + 0x00adbafb, + 0x00edbafb, + 0x002ebafb, + 0x006ebafb, + 0x00aebafb, + 0x00eebafb, + 0x002fbafb, + 0x006fbafb, + 0x00afbafb, + 0x00efbafb, + 0x002cbefb, + 0x006cbefb, + 0x00acbefb, + 0x00ecbefb, + 0x002dbefb, + 0x006dbefb, + 0x00adbefb, + 0x00edbefb, + 0x002ebefb, + 0x006ebefb, + 0x00aebefb, + 0x00eebefb, + 0x002fbefb, + 0x006fbefb, + 0x00afbefb, + 0x00efbefb, + 0x0b2cb2cb, + 0x1b2cb2cb, + 0x2b2cb2cb, + 0x3b2cb2cb, + 0x0b6cb2cb, + 0x1b6cb2cb, + 0x2b6cb2cb, + 0x3b6cb2cb, + 0x0bacb2cb, + 0x1bacb2cb, + 0x2bacb2cb, + 0x3bacb2cb, + 0x0becb2cb, + 0x1becb2cb, + 0x2becb2cb, + 0x3becb2cb, + 0x0b2db2cb, + 0x1b2db2cb, + 0x2b2db2cb, + 0x3b2db2cb, + 0x0b6db2cb, + 0x1b6db2cb, + 0x2b6db2cb, + 0x3b6db2cb, + 0x0badb2cb, + 0x1badb2cb, + 0x2badb2cb, + 0x3badb2cb, + 0x0bedb2cb, + 0x1bedb2cb, + 0x2bedb2cb, + 0x3bedb2cb, + 0x0b2eb2cb, + 0x1b2eb2cb, + 0x2b2eb2cb, + 0x3b2eb2cb, + 0x0b6eb2cb, + 0x1b6eb2cb, + 0x2b6eb2cb, + 0x3b6eb2cb, + 0x0baeb2cb, + 0x1baeb2cb, + 0x2baeb2cb, + 0x3baeb2cb, + 0x0beeb2cb, + 0x1beeb2cb, + 0x2beeb2cb, + 0x3beeb2cb, + 0x0b2fb2cb, + 0x1b2fb2cb, + 0x2b2fb2cb, + 0x3b2fb2cb, + 0x0b6fb2cb, + 0x1b6fb2cb, + 0x2b6fb2cb, + 0x3b6fb2cb, + 0x0bafb2cb, + 0x1bafb2cb, + 0x2bafb2cb, + 0x3bafb2cb, + 0x0befb2cb, + 0x1befb2cb, + 0x2befb2cb, + 0x3befb2cb, + 0x0b2cb6cb, + 0x1b2cb6cb, + 0x2b2cb6cb, + 0x3b2cb6cb, + 0x0b6cb6cb, + 0x1b6cb6cb, + 0x2b6cb6cb, + 0x3b6cb6cb, + 0x0bacb6cb, + 0x1bacb6cb, + 0x2bacb6cb, + 0x3bacb6cb, + 0x0becb6cb, + 0x1becb6cb, + 0x2becb6cb, + 0x3becb6cb, + 0x0b2db6cb, + 0x1b2db6cb, + 0x2b2db6cb, + 0x3b2db6cb, + 0x0b6db6cb, + 0x1b6db6cb, + 0x2b6db6cb, + 0x3b6db6cb, + 0x0badb6cb, + 0x1badb6cb, + 0x2badb6cb, + 0x3badb6cb, + 0x0bedb6cb, + 0x1bedb6cb, + 0x2bedb6cb, + 0x3bedb6cb, + 0x0b2eb6cb, + 0x1b2eb6cb, + 0x2b2eb6cb, + 0x3b2eb6cb, + 0x0b6eb6cb, + 0x1b6eb6cb, + 0x2b6eb6cb, + 0x3b6eb6cb, + 0x0baeb6cb, + 0x1baeb6cb, + 0x2baeb6cb, + 0x3baeb6cb, + 0x0beeb6cb, + 0x1beeb6cb, + 0x2beeb6cb, + 0x3beeb6cb, + 0x0b2fb6cb, + 0x1b2fb6cb, + 0x2b2fb6cb, + 0x3b2fb6cb, + 0x0b6fb6cb, + 0x1b6fb6cb, + 0x2b6fb6cb, + 0x3b6fb6cb, + 0x0bafb6cb, + 0x1bafb6cb, + 0x2bafb6cb, + 0x3bafb6cb, + 0x0befb6cb, + 0x1befb6cb, + 0x2befb6cb, + 0x3befb6cb, + 0x0b2cbacb, + 0x1b2cbacb, + 0x2b2cbacb, + 0x3b2cbacb, + 0x0b6cbacb, + 0x1b6cbacb, + 0x2b6cbacb, + 0x3b6cbacb, + 0x0bacbacb, + 0x1bacbacb, + 0x2bacbacb, + 0x3bacbacb, + 0x0becbacb, + 0x1becbacb, + 0x2becbacb, + 0x3becbacb, + 0x0b2dbacb, + 0x1b2dbacb, + 0x2b2dbacb, + 0x3b2dbacb, + 0x0b6dbacb, + 0x1b6dbacb, + 0x2b6dbacb, + 0x3b6dbacb, + 0x0badbacb, + 0x1badbacb, + 0x2badbacb, + 0x3badbacb, + 0x0bedbacb, + 0x1bedbacb, + 0x2bedbacb, + 0x3bedbacb, + 0x0b2ebacb, + 0x1b2ebacb, + 0x2b2ebacb, + 0x3b2ebacb, + 0x0b6ebacb, + 0x1b6ebacb, + 0x2b6ebacb, + 0x3b6ebacb, + 0x0baebacb, + 0x1baebacb, + 0x2baebacb, + 0x3baebacb, + 0x0beebacb, + 0x1beebacb, + 0x2beebacb, + 0x3beebacb, + 0x0b2fbacb, + 0x1b2fbacb, + 0x2b2fbacb, + 0x3b2fbacb, + 0x0b6fbacb, + 0x1b6fbacb, + 0x2b6fbacb, + 0x3b6fbacb, + 0x0bafbacb, + 0x1bafbacb, + 0x2bafbacb, + 0x3bafbacb, + 0x0befbacb, + 0x1befbacb, + 0x2befbacb, + 0x3befbacb, + 0x0b2cbecb, + 0x1b2cbecb, + 0x2b2cbecb, + 0x3b2cbecb, + 0x0b6cbecb, + 0x1b6cbecb, + 0x2b6cbecb, + 0x3b6cbecb, + 0x0bacbecb, + 0x1bacbecb, + 0x2bacbecb, + 0x3bacbecb, + 0x0becbecb, + 0x1becbecb, + 0x2becbecb, + 0x3becbecb, + 0x0b2dbecb, + 0x1b2dbecb, + 0x2b2dbecb, + 0x3b2dbecb, + 0x0b6dbecb, + 0x1b6dbecb, + 0x2b6dbecb, + 0x3b6dbecb, + 0x0badbecb, + 0x1badbecb, + 0x2badbecb, + 0x3badbecb, + 0x0bedbecb, + 0x1bedbecb, + 0x2bedbecb, + 0x3bedbecb, + 0x0b2ebecb, + 0x1b2ebecb, + 0x2b2ebecb, + 0x3b2ebecb, + 0x0b6ebecb, + 0x1b6ebecb, + 0x2b6ebecb, + 0x3b6ebecb, + 0x0baebecb, + 0x1baebecb, + 0x2baebecb, + 0x3baebecb, + 0x0beebecb, + 0x1beebecb, + 0x2beebecb, + 0x3beebecb, + 0x0b2fbecb, + 0x1b2fbecb, + 0x2b2fbecb, + 0x3b2fbecb, + 0x0b6fbecb, + 0x1b6fbecb, + 0x2b6fbecb, + 0x3b6fbecb, + 0x0bafbecb, + 0x1bafbecb, + 0x2bafbecb, + 0x3bafbecb, + 0x0befbecb, + 0x1befbecb, + 0x2befbecb, + 0x3befbecb, + 0x0b2cb2db, + 0x1b2cb2db, + 0x2b2cb2db, + 0x3b2cb2db, + 0x0b6cb2db, + 0x1b6cb2db, + 0x2b6cb2db, + 0x3b6cb2db, + 0x0bacb2db, + 0x1bacb2db, + 0x2bacb2db, + 0x3bacb2db, + 0x0becb2db, + 0x1becb2db, + 0x2becb2db, + 0x3becb2db, + 0x0b2db2db, + 0x1b2db2db, + 0x2b2db2db, + 0x3b2db2db, + 0x0b6db2db, + 0x1b6db2db, + 0x2b6db2db, + 0x3b6db2db, + 0x0badb2db, + 0x1badb2db, + 0x2badb2db, + 0x3badb2db, + 0x0bedb2db, + 0x1bedb2db, + 0x2bedb2db, + 0x3bedb2db, + 0x0b2eb2db, + 0x1b2eb2db, + 0x2b2eb2db, + 0x3b2eb2db, + 0x0b6eb2db, + 0x1b6eb2db, + 0x2b6eb2db, + 0x3b6eb2db, + 0x0baeb2db, + 0x1baeb2db, + 0x2baeb2db, + 0x3baeb2db, + 0x0beeb2db, + 0x1beeb2db, + 0x2beeb2db, + 0x3beeb2db, + 0x0b2fb2db, + 0x1b2fb2db, + 0x2b2fb2db, + 0x3b2fb2db, + 0x0b6fb2db, + 0x1b6fb2db, + 0x2b6fb2db, + 0x3b6fb2db, + 0x0bafb2db, + 0x1bafb2db, + 0x2bafb2db, + 0x3bafb2db, + 0x0befb2db, + 0x1befb2db, + 0x2befb2db, + 0x3befb2db, + 0x0b2cb6db, + 0x1b2cb6db, + 0x2b2cb6db, + 0x3b2cb6db, + 0x0b6cb6db, + 0x1b6cb6db, + 0x2b6cb6db, + 0x3b6cb6db, + 0x0bacb6db, + 0x1bacb6db, + 0x2bacb6db, + 0x3bacb6db, + 0x0becb6db, + 0x1becb6db, + 0x2becb6db, + 0x3becb6db, + 0x0b2db6db, + 0x1b2db6db, + 0x2b2db6db, + 0x3b2db6db, + 0x0b6db6db, + 0x1b6db6db, + 0x2b6db6db, + 0x3b6db6db, + 0x0badb6db, + 0x1badb6db, + 0x2badb6db, + 0x3badb6db, + 0x0bedb6db, + 0x1bedb6db, + 0x2bedb6db, + 0x3bedb6db, + 0x0b2eb6db, + 0x1b2eb6db, + 0x2b2eb6db, + 0x3b2eb6db, + 0x0b6eb6db, + 0x1b6eb6db, + 0x2b6eb6db, + 0x3b6eb6db, + 0x0baeb6db, + 0x1baeb6db, + 0x2baeb6db, + 0x3baeb6db, +} + +var kNonZeroRepsDepth = [numCommandSymbols]uint32{ + 6, + 6, + 6, + 6, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 12, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 18, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 24, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, + 30, +} + +var kStaticCommandCodeBits = [numCommandSymbols]uint16{ + 0, + 256, + 128, + 384, + 64, + 320, + 192, + 448, + 32, + 288, + 160, + 416, + 96, + 352, + 224, + 480, + 16, + 272, + 144, + 400, + 80, + 336, + 208, + 464, + 48, + 304, + 176, + 432, + 112, + 368, + 240, + 496, + 8, + 264, + 136, + 392, + 72, + 328, + 200, + 456, + 40, + 296, + 168, + 424, + 104, + 360, + 232, + 488, + 24, + 280, + 152, + 408, + 88, + 344, + 216, + 472, + 56, + 312, + 184, + 440, + 120, + 376, + 248, + 504, + 4, + 260, + 132, + 388, + 68, + 324, + 196, + 452, + 36, + 292, + 164, + 420, + 100, + 356, + 228, + 484, + 20, + 276, + 148, + 404, + 84, + 340, + 212, + 468, + 52, + 308, + 180, + 436, + 116, + 372, + 244, + 500, + 12, + 268, + 140, + 396, + 76, + 332, + 204, + 460, + 44, + 300, + 172, + 428, + 108, + 364, + 236, + 492, + 28, + 284, + 156, + 412, + 92, + 348, + 220, + 476, + 60, + 316, + 188, + 444, + 124, + 380, + 252, + 508, + 2, + 258, + 130, + 386, + 66, + 322, + 194, + 450, + 34, + 290, + 162, + 418, + 98, + 354, + 226, + 482, + 18, + 274, + 146, + 402, + 82, + 338, + 210, + 466, + 50, + 306, + 178, + 434, + 114, + 370, + 242, + 498, + 10, + 266, + 138, + 394, + 74, + 330, + 202, + 458, + 42, + 298, + 170, + 426, + 106, + 362, + 234, + 490, + 26, + 282, + 154, + 410, + 90, + 346, + 218, + 474, + 58, + 314, + 186, + 442, + 122, + 378, + 250, + 506, + 6, + 262, + 134, + 390, + 70, + 326, + 198, + 454, + 38, + 294, + 166, + 422, + 102, + 358, + 230, + 486, + 22, + 278, + 150, + 406, + 86, + 342, + 214, + 470, + 54, + 310, + 182, + 438, + 118, + 374, + 246, + 502, + 14, + 270, + 142, + 398, + 78, + 334, + 206, + 462, + 46, + 302, + 174, + 430, + 110, + 366, + 238, + 494, + 30, + 286, + 158, + 414, + 94, + 350, + 222, + 478, + 62, + 318, + 190, + 446, + 126, + 382, + 254, + 510, + 1, + 257, + 129, + 385, + 65, + 321, + 193, + 449, + 33, + 289, + 161, + 417, + 97, + 353, + 225, + 481, + 17, + 273, + 145, + 401, + 81, + 337, + 209, + 465, + 49, + 305, + 177, + 433, + 113, + 369, + 241, + 497, + 9, + 265, + 137, + 393, + 73, + 329, + 201, + 457, + 41, + 297, + 169, + 425, + 105, + 361, + 233, + 489, + 25, + 281, + 153, + 409, + 89, + 345, + 217, + 473, + 57, + 313, + 185, + 441, + 121, + 377, + 249, + 505, + 5, + 261, + 133, + 389, + 69, + 325, + 197, + 453, + 37, + 293, + 165, + 421, + 101, + 357, + 229, + 485, + 21, + 277, + 149, + 405, + 85, + 341, + 213, + 469, + 53, + 309, + 181, + 437, + 117, + 373, + 245, + 501, + 13, + 269, + 141, + 397, + 77, + 333, + 205, + 461, + 45, + 301, + 173, + 429, + 109, + 365, + 237, + 493, + 29, + 285, + 157, + 413, + 93, + 349, + 221, + 477, + 61, + 317, + 189, + 445, + 125, + 381, + 253, + 509, + 3, + 259, + 131, + 387, + 67, + 323, + 195, + 451, + 35, + 291, + 163, + 419, + 99, + 355, + 227, + 483, + 19, + 275, + 147, + 403, + 83, + 339, + 211, + 467, + 51, + 307, + 179, + 435, + 115, + 371, + 243, + 499, + 11, + 267, + 139, + 395, + 75, + 331, + 203, + 459, + 43, + 299, + 171, + 427, + 107, + 363, + 235, + 491, + 27, + 283, + 155, + 411, + 91, + 347, + 219, + 475, + 59, + 315, + 187, + 443, + 123, + 379, + 251, + 507, + 7, + 1031, + 519, + 1543, + 263, + 1287, + 775, + 1799, + 135, + 1159, + 647, + 1671, + 391, + 1415, + 903, + 1927, + 71, + 1095, + 583, + 1607, + 327, + 1351, + 839, + 1863, + 199, + 1223, + 711, + 1735, + 455, + 1479, + 967, + 1991, + 39, + 1063, + 551, + 1575, + 295, + 1319, + 807, + 1831, + 167, + 1191, + 679, + 1703, + 423, + 1447, + 935, + 1959, + 103, + 1127, + 615, + 1639, + 359, + 1383, + 871, + 1895, + 231, + 1255, + 743, + 1767, + 487, + 1511, + 999, + 2023, + 23, + 1047, + 535, + 1559, + 279, + 1303, + 791, + 1815, + 151, + 1175, + 663, + 1687, + 407, + 1431, + 919, + 1943, + 87, + 1111, + 599, + 1623, + 343, + 1367, + 855, + 1879, + 215, + 1239, + 727, + 1751, + 471, + 1495, + 983, + 2007, + 55, + 1079, + 567, + 1591, + 311, + 1335, + 823, + 1847, + 183, + 1207, + 695, + 1719, + 439, + 1463, + 951, + 1975, + 119, + 1143, + 631, + 1655, + 375, + 1399, + 887, + 1911, + 247, + 1271, + 759, + 1783, + 503, + 1527, + 1015, + 2039, + 15, + 1039, + 527, + 1551, + 271, + 1295, + 783, + 1807, + 143, + 1167, + 655, + 1679, + 399, + 1423, + 911, + 1935, + 79, + 1103, + 591, + 1615, + 335, + 1359, + 847, + 1871, + 207, + 1231, + 719, + 1743, + 463, + 1487, + 975, + 1999, + 47, + 1071, + 559, + 1583, + 303, + 1327, + 815, + 1839, + 175, + 1199, + 687, + 1711, + 431, + 1455, + 943, + 1967, + 111, + 1135, + 623, + 1647, + 367, + 1391, + 879, + 1903, + 239, + 1263, + 751, + 1775, + 495, + 1519, + 1007, + 2031, + 31, + 1055, + 543, + 1567, + 287, + 1311, + 799, + 1823, + 159, + 1183, + 671, + 1695, + 415, + 1439, + 927, + 1951, + 95, + 1119, + 607, + 1631, + 351, + 1375, + 863, + 1887, + 223, + 1247, + 735, + 1759, + 479, + 1503, + 991, + 2015, + 63, + 1087, + 575, + 1599, + 319, + 1343, + 831, + 1855, + 191, + 1215, + 703, + 1727, + 447, + 1471, + 959, + 1983, + 127, + 1151, + 639, + 1663, + 383, + 1407, + 895, + 1919, + 255, + 1279, + 767, + 1791, + 511, + 1535, + 1023, + 2047, +} + +func storeStaticCommandHuffmanTree(storage_ix *uint, storage []byte) { + writeBits(56, 0x92624416307003, storage_ix, storage) + writeBits(3, 0x00000000, storage_ix, storage) +} + +var kStaticDistanceCodeBits = [64]uint16{ + 0, + 32, + 16, + 48, + 8, + 40, + 24, + 56, + 4, + 36, + 20, + 52, + 12, + 44, + 28, + 60, + 2, + 34, + 18, + 50, + 10, + 42, + 26, + 58, + 6, + 38, + 22, + 54, + 14, + 46, + 30, + 62, + 1, + 33, + 17, + 49, + 9, + 41, + 25, + 57, + 5, + 37, + 21, + 53, + 13, + 45, + 29, + 61, + 3, + 35, + 19, + 51, + 11, + 43, + 27, + 59, + 7, + 39, + 23, + 55, + 15, + 47, + 31, + 63, +} + +func storeStaticDistanceHuffmanTree(storage_ix *uint, storage []byte) { + writeBits(28, 0x0369DC03, storage_ix, storage) +} diff --git a/vendor/github.com/andybalholm/brotli/fast_log.go b/vendor/github.com/andybalholm/brotli/fast_log.go new file mode 100644 index 0000000000..9d6607f7e2 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/fast_log.go @@ -0,0 +1,290 @@ +package brotli + +import ( + "math" + "math/bits" +) + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Utilities for fast computation of logarithms. */ + +func log2FloorNonZero(n uint) uint32 { + return uint32(bits.Len(n)) - 1 +} + +/* A lookup table for small values of log2(int) to be used in entropy + computation. + + ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */ +var kLog2Table = []float32{ + 0.0000000000000000, + 0.0000000000000000, + 1.0000000000000000, + 1.5849625007211563, + 2.0000000000000000, + 2.3219280948873622, + 2.5849625007211561, + 2.8073549220576042, + 3.0000000000000000, + 3.1699250014423126, + 3.3219280948873626, + 3.4594316186372978, + 3.5849625007211565, + 3.7004397181410922, + 3.8073549220576037, + 3.9068905956085187, + 4.0000000000000000, + 4.0874628412503400, + 4.1699250014423122, + 4.2479275134435852, + 4.3219280948873626, + 4.3923174227787607, + 4.4594316186372973, + 4.5235619560570131, + 4.5849625007211570, + 4.6438561897747244, + 4.7004397181410926, + 4.7548875021634691, + 4.8073549220576037, + 4.8579809951275728, + 4.9068905956085187, + 4.9541963103868758, + 5.0000000000000000, + 5.0443941193584534, + 5.0874628412503400, + 5.1292830169449664, + 5.1699250014423122, + 5.2094533656289501, + 5.2479275134435852, + 5.2854022188622487, + 5.3219280948873626, + 5.3575520046180838, + 5.3923174227787607, + 5.4262647547020979, + 5.4594316186372973, + 5.4918530963296748, + 5.5235619560570131, + 5.5545888516776376, + 5.5849625007211570, + 5.6147098441152083, + 5.6438561897747244, + 5.6724253419714961, + 5.7004397181410926, + 5.7279204545631996, + 5.7548875021634691, + 5.7813597135246599, + 5.8073549220576046, + 5.8328900141647422, + 5.8579809951275719, + 5.8826430493618416, + 5.9068905956085187, + 5.9307373375628867, + 5.9541963103868758, + 5.9772799234999168, + 6.0000000000000000, + 6.0223678130284544, + 6.0443941193584534, + 6.0660891904577721, + 6.0874628412503400, + 6.1085244567781700, + 6.1292830169449672, + 6.1497471195046822, + 6.1699250014423122, + 6.1898245588800176, + 6.2094533656289510, + 6.2288186904958804, + 6.2479275134435861, + 6.2667865406949019, + 6.2854022188622487, + 6.3037807481771031, + 6.3219280948873617, + 6.3398500028846252, + 6.3575520046180847, + 6.3750394313469254, + 6.3923174227787598, + 6.4093909361377026, + 6.4262647547020979, + 6.4429434958487288, + 6.4594316186372982, + 6.4757334309663976, + 6.4918530963296748, + 6.5077946401986964, + 6.5235619560570131, + 6.5391588111080319, + 6.5545888516776376, + 6.5698556083309478, + 6.5849625007211561, + 6.5999128421871278, + 6.6147098441152092, + 6.6293566200796095, + 6.6438561897747253, + 6.6582114827517955, + 6.6724253419714952, + 6.6865005271832185, + 6.7004397181410917, + 6.7142455176661224, + 6.7279204545631988, + 6.7414669864011465, + 6.7548875021634691, + 6.7681843247769260, + 6.7813597135246599, + 6.7944158663501062, + 6.8073549220576037, + 6.8201789624151887, + 6.8328900141647422, + 6.8454900509443757, + 6.8579809951275719, + 6.8703647195834048, + 6.8826430493618416, + 6.8948177633079437, + 6.9068905956085187, + 6.9188632372745955, + 6.9307373375628867, + 6.9425145053392399, + 6.9541963103868758, + 6.9657842846620879, + 6.9772799234999168, + 6.9886846867721664, + 7.0000000000000000, + 7.0112272554232540, + 7.0223678130284544, + 7.0334230015374501, + 7.0443941193584534, + 7.0552824355011898, + 7.0660891904577721, + 7.0768155970508317, + 7.0874628412503400, + 7.0980320829605272, + 7.1085244567781700, + 7.1189410727235076, + 7.1292830169449664, + 7.1395513523987937, + 7.1497471195046822, + 7.1598713367783891, + 7.1699250014423130, + 7.1799090900149345, + 7.1898245588800176, + 7.1996723448363644, + 7.2094533656289492, + 7.2191685204621621, + 7.2288186904958804, + 7.2384047393250794, + 7.2479275134435861, + 7.2573878426926521, + 7.2667865406949019, + 7.2761244052742384, + 7.2854022188622487, + 7.2946207488916270, + 7.3037807481771031, + 7.3128829552843557, + 7.3219280948873617, + 7.3309168781146177, + 7.3398500028846243, + 7.3487281542310781, + 7.3575520046180847, + 7.3663222142458151, + 7.3750394313469254, + 7.3837042924740528, + 7.3923174227787607, + 7.4008794362821844, + 7.4093909361377026, + 7.4178525148858991, + 7.4262647547020979, + 7.4346282276367255, + 7.4429434958487288, + 7.4512111118323299, + 7.4594316186372973, + 7.4676055500829976, + 7.4757334309663976, + 7.4838157772642564, + 7.4918530963296748, + 7.4998458870832057, + 7.5077946401986964, + 7.5156998382840436, + 7.5235619560570131, + 7.5313814605163119, + 7.5391588111080319, + 7.5468944598876373, + 7.5545888516776376, + 7.5622424242210728, + 7.5698556083309478, + 7.5774288280357487, + 7.5849625007211561, + 7.5924570372680806, + 7.5999128421871278, + 7.6073303137496113, + 7.6147098441152075, + 7.6220518194563764, + 7.6293566200796095, + 7.6366246205436488, + 7.6438561897747244, + 7.6510516911789290, + 7.6582114827517955, + 7.6653359171851765, + 7.6724253419714952, + 7.6794800995054464, + 7.6865005271832185, + 7.6934869574993252, + 7.7004397181410926, + 7.7073591320808825, + 7.7142455176661224, + 7.7210991887071856, + 7.7279204545631996, + 7.7347096202258392, + 7.7414669864011465, + 7.7481928495894596, + 7.7548875021634691, + 7.7615512324444795, + 7.7681843247769260, + 7.7747870596011737, + 7.7813597135246608, + 7.7879025593914317, + 7.7944158663501062, + 7.8008998999203047, + 7.8073549220576037, + 7.8137811912170374, + 7.8201789624151887, + 7.8265484872909159, + 7.8328900141647422, + 7.8392037880969445, + 7.8454900509443757, + 7.8517490414160571, + 7.8579809951275719, + 7.8641861446542798, + 7.8703647195834048, + 7.8765169465650002, + 7.8826430493618425, + 7.8887432488982601, + 7.8948177633079446, + 7.9008668079807496, + 7.9068905956085187, + 7.9128893362299619, + 7.9188632372745955, + 7.9248125036057813, + 7.9307373375628867, + 7.9366379390025719, + 7.9425145053392399, + 7.9483672315846778, + 7.9541963103868758, + 7.9600019320680806, + 7.9657842846620870, + 7.9715435539507720, + 7.9772799234999168, + 7.9829935746943104, + 7.9886846867721664, + 7.9943534368588578, +} + +/* Faster logarithm for small integers, with the property of log2(0) == 0. */ +func fastLog2(v uint) float64 { + if v < uint(len(kLog2Table)) { + return float64(kLog2Table[v]) + } + + return math.Log2(float64(v)) +} diff --git a/vendor/github.com/andybalholm/brotli/find_match_length.go b/vendor/github.com/andybalholm/brotli/find_match_length.go new file mode 100644 index 0000000000..09d2ae6726 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/find_match_length.go @@ -0,0 +1,45 @@ +package brotli + +import ( + "encoding/binary" + "math/bits" + "runtime" +) + +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Function to find maximal matching prefixes of strings. */ +func findMatchLengthWithLimit(s1 []byte, s2 []byte, limit uint) uint { + var matched uint = 0 + _, _ = s1[limit-1], s2[limit-1] // bounds check + switch runtime.GOARCH { + case "amd64": + // Compare 8 bytes at at time. + for matched+8 <= limit { + w1 := binary.LittleEndian.Uint64(s1[matched:]) + w2 := binary.LittleEndian.Uint64(s2[matched:]) + if w1 != w2 { + return matched + uint(bits.TrailingZeros64(w1^w2)>>3) + } + matched += 8 + } + case "386": + // Compare 4 bytes at at time. + for matched+4 <= limit { + w1 := binary.LittleEndian.Uint32(s1[matched:]) + w2 := binary.LittleEndian.Uint32(s2[matched:]) + if w1 != w2 { + return matched + uint(bits.TrailingZeros32(w1^w2)>>3) + } + matched += 4 + } + } + for matched < limit && s1[matched] == s2[matched] { + matched++ + } + return matched +} diff --git a/vendor/github.com/andybalholm/brotli/h10.go b/vendor/github.com/andybalholm/brotli/h10.go new file mode 100644 index 0000000000..5662fbbbb5 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/h10.go @@ -0,0 +1,287 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +func (*h10) HashTypeLength() uint { + return 4 +} + +func (*h10) StoreLookahead() uint { + return 128 +} + +func hashBytesH10(data []byte) uint32 { + var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32 + + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - 17) +} + +/* A (forgetful) hash table where each hash bucket contains a binary tree of + sequences whose first 4 bytes share the same hash code. + Each sequence is 128 long and is identified by its starting + position in the input data. The binary tree is sorted by the lexicographic + order of the sequences, and it is also a max-heap with respect to the + starting positions. */ +type h10 struct { + hasherCommon + window_mask_ uint + buckets_ [1 << 17]uint32 + invalid_pos_ uint32 + forest []uint32 +} + +func (h *h10) Initialize(params *encoderParams) { + h.window_mask_ = (1 << params.lgwin) - 1 + h.invalid_pos_ = uint32(0 - h.window_mask_) + var num_nodes uint = uint(1) << params.lgwin + h.forest = make([]uint32, 2*num_nodes) +} + +func (h *h10) Prepare(one_shot bool, input_size uint, data []byte) { + var invalid_pos uint32 = h.invalid_pos_ + var i uint32 + for i = 0; i < 1<<17; i++ { + h.buckets_[i] = invalid_pos + } +} + +func leftChildIndexH10(self *h10, pos uint) uint { + return 2 * (pos & self.window_mask_) +} + +func rightChildIndexH10(self *h10, pos uint) uint { + return 2*(pos&self.window_mask_) + 1 +} + +/* Stores the hash of the next 4 bytes and in a single tree-traversal, the + hash bucket's binary tree is searched for matches and is re-rooted at the + current position. + + If less than 128 data is available, the hash bucket of the + current position is searched for matches, but the state of the hash table + is not changed, since we can not know the final sorting order of the + current (incomplete) sequence. + + This function must be called with increasing cur_ix positions. */ +func storeAndFindMatchesH10(self *h10, data []byte, cur_ix uint, ring_buffer_mask uint, max_length uint, max_backward uint, best_len *uint, matches []backwardMatch) []backwardMatch { + var cur_ix_masked uint = cur_ix & ring_buffer_mask + var max_comp_len uint = brotli_min_size_t(max_length, 128) + var should_reroot_tree bool = (max_length >= 128) + var key uint32 = hashBytesH10(data[cur_ix_masked:]) + var forest []uint32 = self.forest + var prev_ix uint = uint(self.buckets_[key]) + var node_left uint = leftChildIndexH10(self, cur_ix) + var node_right uint = rightChildIndexH10(self, cur_ix) + var best_len_left uint = 0 + var best_len_right uint = 0 + var depth_remaining uint + /* The forest index of the rightmost node of the left subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + + /* The forest index of the leftmost node of the right subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + + /* The match length of the rightmost node of the left subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + + /* The match length of the leftmost node of the right subtree of the new + root, updated as we traverse and re-root the tree of the hash bucket. */ + if should_reroot_tree { + self.buckets_[key] = uint32(cur_ix) + } + + for depth_remaining = 64; ; depth_remaining-- { + var backward uint = cur_ix - prev_ix + var prev_ix_masked uint = prev_ix & ring_buffer_mask + if backward == 0 || backward > max_backward || depth_remaining == 0 { + if should_reroot_tree { + forest[node_left] = self.invalid_pos_ + forest[node_right] = self.invalid_pos_ + } + + break + } + { + var cur_len uint = brotli_min_size_t(best_len_left, best_len_right) + var len uint + assert(cur_len <= 128) + len = cur_len + findMatchLengthWithLimit(data[cur_ix_masked+cur_len:], data[prev_ix_masked+cur_len:], max_length-cur_len) + if matches != nil && len > *best_len { + *best_len = uint(len) + initBackwardMatch(&matches[0], backward, uint(len)) + matches = matches[1:] + } + + if len >= max_comp_len { + if should_reroot_tree { + forest[node_left] = forest[leftChildIndexH10(self, prev_ix)] + forest[node_right] = forest[rightChildIndexH10(self, prev_ix)] + } + + break + } + + if data[cur_ix_masked+len] > data[prev_ix_masked+len] { + best_len_left = uint(len) + if should_reroot_tree { + forest[node_left] = uint32(prev_ix) + } + + node_left = rightChildIndexH10(self, prev_ix) + prev_ix = uint(forest[node_left]) + } else { + best_len_right = uint(len) + if should_reroot_tree { + forest[node_right] = uint32(prev_ix) + } + + node_right = leftChildIndexH10(self, prev_ix) + prev_ix = uint(forest[node_right]) + } + } + } + + return matches +} + +/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the + length of max_length and stores the position cur_ix in the hash table. + + Sets *num_matches to the number of matches found, and stores the found + matches in matches[0] to matches[*num_matches - 1]. The matches will be + sorted by strictly increasing length and (non-strictly) increasing + distance. */ +func findAllMatchesH10(handle *h10, dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, cur_ix uint, max_length uint, max_backward uint, gap uint, params *encoderParams, matches []backwardMatch) uint { + var orig_matches []backwardMatch = matches + var cur_ix_masked uint = cur_ix & ring_buffer_mask + var best_len uint = 1 + var short_match_max_backward uint + if params.quality != hqZopflificationQuality { + short_match_max_backward = 16 + } else { + short_match_max_backward = 64 + } + var stop uint = cur_ix - short_match_max_backward + var dict_matches [maxStaticDictionaryMatchLen + 1]uint32 + var i uint + if cur_ix < short_match_max_backward { + stop = 0 + } + for i = cur_ix - 1; i > stop && best_len <= 2; i-- { + var prev_ix uint = i + var backward uint = cur_ix - prev_ix + if backward > max_backward { + break + } + + prev_ix &= ring_buffer_mask + if data[cur_ix_masked] != data[prev_ix] || data[cur_ix_masked+1] != data[prev_ix+1] { + continue + } + { + var len uint = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len > best_len { + best_len = uint(len) + initBackwardMatch(&matches[0], backward, uint(len)) + matches = matches[1:] + } + } + } + + if best_len < max_length { + matches = storeAndFindMatchesH10(handle, data, cur_ix, ring_buffer_mask, max_length, max_backward, &best_len, matches) + } + + for i = 0; i <= maxStaticDictionaryMatchLen; i++ { + dict_matches[i] = kInvalidMatch + } + { + var minlen uint = brotli_max_size_t(4, best_len+1) + if findAllStaticDictionaryMatches(dictionary, data[cur_ix_masked:], minlen, max_length, dict_matches[0:]) { + var maxlen uint = brotli_min_size_t(maxStaticDictionaryMatchLen, max_length) + var l uint + for l = minlen; l <= maxlen; l++ { + var dict_id uint32 = dict_matches[l] + if dict_id < kInvalidMatch { + var distance uint = max_backward + gap + uint(dict_id>>5) + 1 + if distance <= params.dist.max_distance { + initDictionaryBackwardMatch(&matches[0], distance, l, uint(dict_id&31)) + matches = matches[1:] + } + } + } + } + } + + return uint(-cap(matches) + cap(orig_matches)) +} + +/* Stores the hash of the next 4 bytes and re-roots the binary tree at the + current sequence, without returning any matches. + REQUIRES: ix + 128 <= end-of-current-block */ +func (h *h10) Store(data []byte, mask uint, ix uint) { + var max_backward uint = h.window_mask_ - windowGap + 1 + /* Maximum distance is window size - 16, see section 9.1. of the spec. */ + storeAndFindMatchesH10(h, data, ix, mask, 128, max_backward, nil, nil) +} + +func (h *h10) StoreRange(data []byte, mask uint, ix_start uint, ix_end uint) { + var i uint = ix_start + var j uint = ix_start + if ix_start+63 <= ix_end { + i = ix_end - 63 + } + + if ix_start+512 <= i { + for ; j < i; j += 8 { + h.Store(data, mask, j) + } + } + + for ; i < ix_end; i++ { + h.Store(data, mask, i) + } +} + +func (h *h10) StitchToPreviousBlock(num_bytes uint, position uint, ringbuffer []byte, ringbuffer_mask uint) { + if num_bytes >= h.HashTypeLength()-1 && position >= 128 { + var i_start uint = position - 128 + 1 + var i_end uint = brotli_min_size_t(position, i_start+num_bytes) + /* Store the last `128 - 1` positions in the hasher. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + + var i uint + for i = i_start; i < i_end; i++ { + /* Maximum distance is window size - 16, see section 9.1. of the spec. + Furthermore, we have to make sure that we don't look further back + from the start of the next block than the window size, otherwise we + could access already overwritten areas of the ring-buffer. */ + var max_backward uint = h.window_mask_ - brotli_max_size_t(windowGap-1, position-i) + + /* We know that i + 128 <= position + num_bytes, i.e. the + end of the current block and that we have at least + 128 tail in the ring-buffer. */ + storeAndFindMatchesH10(h, ringbuffer, i, ringbuffer_mask, 128, max_backward, nil, nil) + } + } +} + +/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */ +const maxNumMatchesH10 = 128 + +func (*h10) FindLongestMatch(dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *hasherSearchResult) { + panic("unimplemented") +} + +func (*h10) PrepareDistanceCache(distance_cache []int) { + panic("unimplemented") +} diff --git a/vendor/github.com/andybalholm/brotli/h5.go b/vendor/github.com/andybalholm/brotli/h5.go new file mode 100644 index 0000000000..f391b73fdd --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/h5.go @@ -0,0 +1,214 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + This is a hash map of fixed size (bucket_size_) to a ring buffer of + fixed size (block_size_). The ring buffer contains the last block_size_ + index positions of the given hash key in the compressed data. */ +func (*h5) HashTypeLength() uint { + return 4 +} + +func (*h5) StoreLookahead() uint { + return 4 +} + +/* HashBytes is the function that chooses the bucket to place the address in. */ +func hashBytesH5(data []byte, shift int) uint32 { + var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32 + + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return uint32(h >> uint(shift)) +} + +type h5 struct { + hasherCommon + bucket_size_ uint + block_size_ uint + hash_shift_ int + block_mask_ uint32 + num []uint16 + buckets []uint32 +} + +func (h *h5) Initialize(params *encoderParams) { + h.hash_shift_ = 32 - h.params.bucket_bits + h.bucket_size_ = uint(1) << uint(h.params.bucket_bits) + h.block_size_ = uint(1) << uint(h.params.block_bits) + h.block_mask_ = uint32(h.block_size_ - 1) + h.num = make([]uint16, h.bucket_size_) + h.buckets = make([]uint32, h.block_size_*h.bucket_size_) +} + +func (h *h5) Prepare(one_shot bool, input_size uint, data []byte) { + var num []uint16 = h.num + var partial_prepare_threshold uint = h.bucket_size_ >> 6 + /* Partial preparation is 100 times slower (per socket). */ + if one_shot && input_size <= partial_prepare_threshold { + var i uint + for i = 0; i < input_size; i++ { + var key uint32 = hashBytesH5(data[i:], h.hash_shift_) + num[key] = 0 + } + } else { + for i := 0; i < int(h.bucket_size_); i++ { + num[i] = 0 + } + } +} + +/* Look at 4 bytes at &data[ix & mask]. + Compute a hash from these, and store the value of ix at that position. */ +func (h *h5) Store(data []byte, mask uint, ix uint) { + var num []uint16 = h.num + var key uint32 = hashBytesH5(data[ix&mask:], h.hash_shift_) + var minor_ix uint = uint(num[key]) & uint(h.block_mask_) + var offset uint = minor_ix + uint(key<= h.HashTypeLength()-1 && position >= 3 { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + h.Store(ringbuffer, ringbuffer_mask, position-3) + h.Store(ringbuffer, ringbuffer_mask, position-2) + h.Store(ringbuffer, ringbuffer_mask, position-1) + } +} + +func (h *h5) PrepareDistanceCache(distance_cache []int) { + prepareDistanceCache(distance_cache, h.params.num_last_distances_to_check) +} + +/* Find a longest backward match of &data[cur_ix] up to the length of + max_length and stores the position cur_ix in the hash table. + + REQUIRES: PrepareDistanceCacheH5 must be invoked for current distance cache + values; if this method is invoked repeatedly with the same distance + cache values, it is enough to invoke PrepareDistanceCacheH5 once. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + |out|->score is updated only if a better match is found. */ +func (h *h5) FindLongestMatch(dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *hasherSearchResult) { + var num []uint16 = h.num + var buckets []uint32 = h.buckets + var cur_ix_masked uint = cur_ix & ring_buffer_mask + var min_score uint = out.score + var best_score uint = out.score + var best_len uint = out.len + var i uint + var bucket []uint32 + /* Don't accept a short copy from far away. */ + out.len = 0 + + out.len_code_delta = 0 + + /* Try last distance first. */ + for i = 0; i < uint(h.params.num_last_distances_to_check); i++ { + var backward uint = uint(distance_cache[i]) + var prev_ix uint = uint(cur_ix - backward) + if prev_ix >= cur_ix { + continue + } + + if backward > max_backward { + continue + } + + prev_ix &= ring_buffer_mask + + if cur_ix_masked+best_len > ring_buffer_mask || prev_ix+best_len > ring_buffer_mask || data[cur_ix_masked+best_len] != data[prev_ix+best_len] { + continue + } + { + var len uint = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 3 || (len == 2 && i < 2) { + /* Comparing for >= 2 does not change the semantics, but just saves for + a few unnecessary binary logarithms in backward reference score, + since we are not interested in such short matches. */ + var score uint = backwardReferenceScoreUsingLastDistance(uint(len)) + if best_score < score { + if i != 0 { + score -= backwardReferencePenaltyUsingLastDistance(i) + } + if best_score < score { + best_score = score + best_len = uint(len) + out.len = best_len + out.distance = backward + out.score = best_score + } + } + } + } + } + { + var key uint32 = hashBytesH5(data[cur_ix_masked:], h.hash_shift_) + bucket = buckets[key< h.block_size_ { + down = uint(num[key]) - h.block_size_ + } else { + down = 0 + } + for i = uint(num[key]); i > down; { + var prev_ix uint + i-- + prev_ix = uint(bucket[uint32(i)&h.block_mask_]) + var backward uint = cur_ix - prev_ix + if backward > max_backward { + break + } + + prev_ix &= ring_buffer_mask + if cur_ix_masked+best_len > ring_buffer_mask || prev_ix+best_len > ring_buffer_mask || data[cur_ix_masked+best_len] != data[prev_ix+best_len] { + continue + } + { + var len uint = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 4 { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + var score uint = backwardReferenceScore(uint(len), backward) + if best_score < score { + best_score = score + best_len = uint(len) + out.len = best_len + out.distance = backward + out.score = best_score + } + } + } + } + + bucket[uint32(num[key])&h.block_mask_] = uint32(cur_ix) + num[key]++ + } + + if min_score == out.score { + searchInStaticDictionary(dictionary, h, data[cur_ix_masked:], max_length, max_backward+gap, max_distance, out, false) + } +} diff --git a/vendor/github.com/andybalholm/brotli/h6.go b/vendor/github.com/andybalholm/brotli/h6.go new file mode 100644 index 0000000000..80bb224aa8 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/h6.go @@ -0,0 +1,216 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + This is a hash map of fixed size (bucket_size_) to a ring buffer of + fixed size (block_size_). The ring buffer contains the last block_size_ + index positions of the given hash key in the compressed data. */ +func (*h6) HashTypeLength() uint { + return 8 +} + +func (*h6) StoreLookahead() uint { + return 8 +} + +/* HashBytes is the function that chooses the bucket to place the address in. */ +func hashBytesH6(data []byte, mask uint64, shift int) uint32 { + var h uint64 = (binary.LittleEndian.Uint64(data) & mask) * kHashMul64Long + + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return uint32(h >> uint(shift)) +} + +type h6 struct { + hasherCommon + bucket_size_ uint + block_size_ uint + hash_shift_ int + hash_mask_ uint64 + block_mask_ uint32 + num []uint16 + buckets []uint32 +} + +func (h *h6) Initialize(params *encoderParams) { + h.hash_shift_ = 64 - h.params.bucket_bits + h.hash_mask_ = (^(uint64(0))) >> uint(64-8*h.params.hash_len) + h.bucket_size_ = uint(1) << uint(h.params.bucket_bits) + h.block_size_ = uint(1) << uint(h.params.block_bits) + h.block_mask_ = uint32(h.block_size_ - 1) + h.num = make([]uint16, h.bucket_size_) + h.buckets = make([]uint32, h.block_size_*h.bucket_size_) +} + +func (h *h6) Prepare(one_shot bool, input_size uint, data []byte) { + var num []uint16 = h.num + var partial_prepare_threshold uint = h.bucket_size_ >> 6 + /* Partial preparation is 100 times slower (per socket). */ + if one_shot && input_size <= partial_prepare_threshold { + var i uint + for i = 0; i < input_size; i++ { + var key uint32 = hashBytesH6(data[i:], h.hash_mask_, h.hash_shift_) + num[key] = 0 + } + } else { + for i := 0; i < int(h.bucket_size_); i++ { + num[i] = 0 + } + } +} + +/* Look at 4 bytes at &data[ix & mask]. + Compute a hash from these, and store the value of ix at that position. */ +func (h *h6) Store(data []byte, mask uint, ix uint) { + var num []uint16 = h.num + var key uint32 = hashBytesH6(data[ix&mask:], h.hash_mask_, h.hash_shift_) + var minor_ix uint = uint(num[key]) & uint(h.block_mask_) + var offset uint = minor_ix + uint(key<= h.HashTypeLength()-1 && position >= 3 { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + h.Store(ringbuffer, ringbuffer_mask, position-3) + h.Store(ringbuffer, ringbuffer_mask, position-2) + h.Store(ringbuffer, ringbuffer_mask, position-1) + } +} + +func (h *h6) PrepareDistanceCache(distance_cache []int) { + prepareDistanceCache(distance_cache, h.params.num_last_distances_to_check) +} + +/* Find a longest backward match of &data[cur_ix] up to the length of + max_length and stores the position cur_ix in the hash table. + + REQUIRES: PrepareDistanceCacheH6 must be invoked for current distance cache + values; if this method is invoked repeatedly with the same distance + cache values, it is enough to invoke PrepareDistanceCacheH6 once. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + |out|->score is updated only if a better match is found. */ +func (h *h6) FindLongestMatch(dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *hasherSearchResult) { + var num []uint16 = h.num + var buckets []uint32 = h.buckets + var cur_ix_masked uint = cur_ix & ring_buffer_mask + var min_score uint = out.score + var best_score uint = out.score + var best_len uint = out.len + var i uint + var bucket []uint32 + /* Don't accept a short copy from far away. */ + out.len = 0 + + out.len_code_delta = 0 + + /* Try last distance first. */ + for i = 0; i < uint(h.params.num_last_distances_to_check); i++ { + var backward uint = uint(distance_cache[i]) + var prev_ix uint = uint(cur_ix - backward) + if prev_ix >= cur_ix { + continue + } + + if backward > max_backward { + continue + } + + prev_ix &= ring_buffer_mask + + if cur_ix_masked+best_len > ring_buffer_mask || prev_ix+best_len > ring_buffer_mask || data[cur_ix_masked+best_len] != data[prev_ix+best_len] { + continue + } + { + var len uint = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 3 || (len == 2 && i < 2) { + /* Comparing for >= 2 does not change the semantics, but just saves for + a few unnecessary binary logarithms in backward reference score, + since we are not interested in such short matches. */ + var score uint = backwardReferenceScoreUsingLastDistance(uint(len)) + if best_score < score { + if i != 0 { + score -= backwardReferencePenaltyUsingLastDistance(i) + } + if best_score < score { + best_score = score + best_len = uint(len) + out.len = best_len + out.distance = backward + out.score = best_score + } + } + } + } + } + { + var key uint32 = hashBytesH6(data[cur_ix_masked:], h.hash_mask_, h.hash_shift_) + bucket = buckets[key< h.block_size_ { + down = uint(num[key]) - h.block_size_ + } else { + down = 0 + } + for i = uint(num[key]); i > down; { + var prev_ix uint + i-- + prev_ix = uint(bucket[uint32(i)&h.block_mask_]) + var backward uint = cur_ix - prev_ix + if backward > max_backward { + break + } + + prev_ix &= ring_buffer_mask + if cur_ix_masked+best_len > ring_buffer_mask || prev_ix+best_len > ring_buffer_mask || data[cur_ix_masked+best_len] != data[prev_ix+best_len] { + continue + } + { + var len uint = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 4 { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + var score uint = backwardReferenceScore(uint(len), backward) + if best_score < score { + best_score = score + best_len = uint(len) + out.len = best_len + out.distance = backward + out.score = best_score + } + } + } + } + + bucket[uint32(num[key])&h.block_mask_] = uint32(cur_ix) + num[key]++ + } + + if min_score == out.score { + searchInStaticDictionary(dictionary, h, data[cur_ix_masked:], max_length, max_backward+gap, max_distance, out, false) + } +} diff --git a/vendor/github.com/andybalholm/brotli/hash.go b/vendor/github.com/andybalholm/brotli/hash.go new file mode 100644 index 0000000000..00f812e87e --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/hash.go @@ -0,0 +1,342 @@ +package brotli + +import ( + "encoding/binary" + "fmt" +) + +type hasherCommon struct { + params hasherParams + is_prepared_ bool + dict_num_lookups uint + dict_num_matches uint +} + +func (h *hasherCommon) Common() *hasherCommon { + return h +} + +type hasherHandle interface { + Common() *hasherCommon + Initialize(params *encoderParams) + Prepare(one_shot bool, input_size uint, data []byte) + StitchToPreviousBlock(num_bytes uint, position uint, ringbuffer []byte, ringbuffer_mask uint) + HashTypeLength() uint + StoreLookahead() uint + PrepareDistanceCache(distance_cache []int) + FindLongestMatch(dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *hasherSearchResult) + StoreRange(data []byte, mask uint, ix_start uint, ix_end uint) + Store(data []byte, mask uint, ix uint) +} + +const kCutoffTransformsCount uint32 = 10 + +/* 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 */ +/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */ +const kCutoffTransforms uint64 = 0x071B520ADA2D3200 + +type hasherSearchResult struct { + len uint + distance uint + score uint + len_code_delta int +} + +/* kHashMul32 multiplier has these properties: + * The multiplier must be odd. Otherwise we may lose the highest bit. + * No long streaks of ones or zeros. + * There is no effort to ensure that it is a prime, the oddity is enough + for this use. + * The number has been tuned heuristically against compression benchmarks. */ +const kHashMul32 uint32 = 0x1E35A7BD + +const kHashMul64 uint64 = 0x1E35A7BD1E35A7BD + +const kHashMul64Long uint64 = 0x1FE35A7BD3579BD3 + +func hash14(data []byte) uint32 { + var h uint32 = binary.LittleEndian.Uint32(data) * kHashMul32 + + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> (32 - 14) +} + +func prepareDistanceCache(distance_cache []int, num_distances int) { + if num_distances > 4 { + var last_distance int = distance_cache[0] + distance_cache[4] = last_distance - 1 + distance_cache[5] = last_distance + 1 + distance_cache[6] = last_distance - 2 + distance_cache[7] = last_distance + 2 + distance_cache[8] = last_distance - 3 + distance_cache[9] = last_distance + 3 + if num_distances > 10 { + var next_last_distance int = distance_cache[1] + distance_cache[10] = next_last_distance - 1 + distance_cache[11] = next_last_distance + 1 + distance_cache[12] = next_last_distance - 2 + distance_cache[13] = next_last_distance + 2 + distance_cache[14] = next_last_distance - 3 + distance_cache[15] = next_last_distance + 3 + } + } +} + +const literalByteScore = 135 + +const distanceBitPenalty = 30 + +/* Score must be positive after applying maximal penalty. */ +const scoreBase = (distanceBitPenalty * 8 * 8) + +/* Usually, we always choose the longest backward reference. This function + allows for the exception of that rule. + + If we choose a backward reference that is further away, it will + usually be coded with more bits. We approximate this by assuming + log2(distance). If the distance can be expressed in terms of the + last four distances, we use some heuristic constants to estimate + the bits cost. For the first up to four literals we use the bit + cost of the literals from the literal cost model, after that we + use the average bit cost of the cost model. + + This function is used to sometimes discard a longer backward reference + when it is not much longer and the bit cost for encoding it is more + than the saved literals. + + backward_reference_offset MUST be positive. */ +func backwardReferenceScore(copy_length uint, backward_reference_offset uint) uint { + return scoreBase + literalByteScore*uint(copy_length) - distanceBitPenalty*uint(log2FloorNonZero(backward_reference_offset)) +} + +func backwardReferenceScoreUsingLastDistance(copy_length uint) uint { + return literalByteScore*uint(copy_length) + scoreBase + 15 +} + +func backwardReferencePenaltyUsingLastDistance(distance_short_code uint) uint { + return uint(39) + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE) +} + +func testStaticDictionaryItem(dictionary *encoderDictionary, item uint, data []byte, max_length uint, max_backward uint, max_distance uint, out *hasherSearchResult) bool { + var len uint + var word_idx uint + var offset uint + var matchlen uint + var backward uint + var score uint + len = item & 0x1F + word_idx = item >> 5 + offset = uint(dictionary.words.offsets_by_length[len]) + len*word_idx + if len > max_length { + return false + } + + matchlen = findMatchLengthWithLimit(data, dictionary.words.data[offset:], uint(len)) + if matchlen+uint(dictionary.cutoffTransformsCount) <= len || matchlen == 0 { + return false + } + { + var cut uint = len - matchlen + var transform_id uint = (cut << 2) + uint((dictionary.cutoffTransforms>>(cut*6))&0x3F) + backward = max_backward + 1 + word_idx + (transform_id << dictionary.words.size_bits_by_length[len]) + } + + if backward > max_distance { + return false + } + + score = backwardReferenceScore(matchlen, backward) + if score < out.score { + return false + } + + out.len = matchlen + out.len_code_delta = int(len) - int(matchlen) + out.distance = backward + out.score = score + return true +} + +func searchInStaticDictionary(dictionary *encoderDictionary, handle hasherHandle, data []byte, max_length uint, max_backward uint, max_distance uint, out *hasherSearchResult, shallow bool) { + var key uint + var i uint + var self *hasherCommon = handle.Common() + if self.dict_num_matches < self.dict_num_lookups>>7 { + return + } + + key = uint(hash14(data) << 1) + for i = 0; ; (func() { i++; key++ })() { + var tmp uint + if shallow { + tmp = 1 + } else { + tmp = 2 + } + if i >= tmp { + break + } + var item uint = uint(dictionary.hash_table[key]) + self.dict_num_lookups++ + if item != 0 { + var item_matches bool = testStaticDictionaryItem(dictionary, item, data, max_length, max_backward, max_distance, out) + if item_matches { + self.dict_num_matches++ + } + } + } +} + +type backwardMatch struct { + distance uint32 + length_and_code uint32 +} + +func initBackwardMatch(self *backwardMatch, dist uint, len uint) { + self.distance = uint32(dist) + self.length_and_code = uint32(len << 5) +} + +func initDictionaryBackwardMatch(self *backwardMatch, dist uint, len uint, len_code uint) { + self.distance = uint32(dist) + var tmp uint + if len == len_code { + tmp = 0 + } else { + tmp = len_code + } + self.length_and_code = uint32(len<<5 | tmp) +} + +func backwardMatchLength(self *backwardMatch) uint { + return uint(self.length_and_code >> 5) +} + +func backwardMatchLengthCode(self *backwardMatch) uint { + var code uint = uint(self.length_and_code) & 31 + if code != 0 { + return code + } else { + return backwardMatchLength(self) + } +} + +func hasherReset(handle hasherHandle) { + if handle == nil { + return + } + handle.Common().is_prepared_ = false +} + +func newHasher(typ int) hasherHandle { + switch typ { + case 2: + return &hashLongestMatchQuickly{ + bucketBits: 16, + bucketSweep: 1, + hashLen: 5, + useDictionary: true, + } + case 3: + return &hashLongestMatchQuickly{ + bucketBits: 16, + bucketSweep: 2, + hashLen: 5, + useDictionary: false, + } + case 4: + return &hashLongestMatchQuickly{ + bucketBits: 17, + bucketSweep: 4, + hashLen: 5, + useDictionary: true, + } + case 5: + return new(h5) + case 6: + return new(h6) + case 10: + return new(h10) + case 35: + return &hashComposite{ + ha: newHasher(3), + hb: &hashRolling{jump: 4}, + } + case 40: + return &hashForgetfulChain{ + bucketBits: 15, + numBanks: 1, + bankBits: 16, + numLastDistancesToCheck: 4, + } + case 41: + return &hashForgetfulChain{ + bucketBits: 15, + numBanks: 1, + bankBits: 16, + numLastDistancesToCheck: 10, + } + case 42: + return &hashForgetfulChain{ + bucketBits: 15, + numBanks: 512, + bankBits: 9, + numLastDistancesToCheck: 16, + } + case 54: + return &hashLongestMatchQuickly{ + bucketBits: 20, + bucketSweep: 4, + hashLen: 7, + useDictionary: false, + } + case 55: + return &hashComposite{ + ha: newHasher(54), + hb: &hashRolling{jump: 4}, + } + case 65: + return &hashComposite{ + ha: newHasher(6), + hb: &hashRolling{jump: 1}, + } + } + + panic(fmt.Sprintf("unknown hasher type: %d", typ)) +} + +func hasherSetup(handle *hasherHandle, params *encoderParams, data []byte, position uint, input_size uint, is_last bool) { + var self hasherHandle = nil + var common *hasherCommon = nil + var one_shot bool = (position == 0 && is_last) + if *handle == nil { + chooseHasher(params, ¶ms.hasher) + self = newHasher(params.hasher.type_) + + *handle = self + common = self.Common() + common.params = params.hasher + self.Initialize(params) + } + + self = *handle + common = self.Common() + if !common.is_prepared_ { + self.Prepare(one_shot, input_size, data) + + if position == 0 { + common.dict_num_lookups = 0 + common.dict_num_matches = 0 + } + + common.is_prepared_ = true + } +} + +func initOrStitchToPreviousBlock(handle *hasherHandle, data []byte, mask uint, params *encoderParams, position uint, input_size uint, is_last bool) { + var self hasherHandle + hasherSetup(handle, params, data, position, input_size, is_last) + self = *handle + self.StitchToPreviousBlock(input_size, position, data, mask) +} diff --git a/vendor/github.com/andybalholm/brotli/hash_composite.go b/vendor/github.com/andybalholm/brotli/hash_composite.go new file mode 100644 index 0000000000..a65fe2e6a9 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/hash_composite.go @@ -0,0 +1,93 @@ +package brotli + +/* Copyright 2018 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +func (h *hashComposite) HashTypeLength() uint { + var a uint = h.ha.HashTypeLength() + var b uint = h.hb.HashTypeLength() + if a > b { + return a + } else { + return b + } +} + +func (h *hashComposite) StoreLookahead() uint { + var a uint = h.ha.StoreLookahead() + var b uint = h.hb.StoreLookahead() + if a > b { + return a + } else { + return b + } +} + +/* Composite hasher: This hasher allows to combine two other hashers, HASHER_A + and HASHER_B. */ +type hashComposite struct { + hasherCommon + ha hasherHandle + hb hasherHandle + params *encoderParams +} + +func (h *hashComposite) Initialize(params *encoderParams) { + h.params = params +} + +/* TODO: Initialize of the hashers is defered to Prepare (and params + remembered here) because we don't get the one_shot and input_size params + here that are needed to know the memory size of them. Instead provide + those params to all hashers InitializehashComposite */ +func (h *hashComposite) Prepare(one_shot bool, input_size uint, data []byte) { + if h.ha == nil { + var common_a *hasherCommon + var common_b *hasherCommon + + common_a = h.ha.Common() + common_a.params = h.params.hasher + common_a.is_prepared_ = false + common_a.dict_num_lookups = 0 + common_a.dict_num_matches = 0 + h.ha.Initialize(h.params) + + common_b = h.hb.Common() + common_b.params = h.params.hasher + common_b.is_prepared_ = false + common_b.dict_num_lookups = 0 + common_b.dict_num_matches = 0 + h.hb.Initialize(h.params) + } + + h.ha.Prepare(one_shot, input_size, data) + h.hb.Prepare(one_shot, input_size, data) +} + +func (h *hashComposite) Store(data []byte, mask uint, ix uint) { + h.ha.Store(data, mask, ix) + h.hb.Store(data, mask, ix) +} + +func (h *hashComposite) StoreRange(data []byte, mask uint, ix_start uint, ix_end uint) { + h.ha.StoreRange(data, mask, ix_start, ix_end) + h.hb.StoreRange(data, mask, ix_start, ix_end) +} + +func (h *hashComposite) StitchToPreviousBlock(num_bytes uint, position uint, ringbuffer []byte, ring_buffer_mask uint) { + h.ha.StitchToPreviousBlock(num_bytes, position, ringbuffer, ring_buffer_mask) + h.hb.StitchToPreviousBlock(num_bytes, position, ringbuffer, ring_buffer_mask) +} + +func (h *hashComposite) PrepareDistanceCache(distance_cache []int) { + h.ha.PrepareDistanceCache(distance_cache) + h.hb.PrepareDistanceCache(distance_cache) +} + +func (h *hashComposite) FindLongestMatch(dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *hasherSearchResult) { + h.ha.FindLongestMatch(dictionary, data, ring_buffer_mask, distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out) + h.hb.FindLongestMatch(dictionary, data, ring_buffer_mask, distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out) +} diff --git a/vendor/github.com/andybalholm/brotli/hash_forgetful_chain.go b/vendor/github.com/andybalholm/brotli/hash_forgetful_chain.go new file mode 100644 index 0000000000..306e46d3db --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/hash_forgetful_chain.go @@ -0,0 +1,252 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +func (*hashForgetfulChain) HashTypeLength() uint { + return 4 +} + +func (*hashForgetfulChain) StoreLookahead() uint { + return 4 +} + +/* HashBytes is the function that chooses the bucket to place the address in.*/ +func (h *hashForgetfulChain) HashBytes(data []byte) uint { + var hash uint32 = binary.LittleEndian.Uint32(data) * kHashMul32 + + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return uint(hash >> (32 - h.bucketBits)) +} + +type slot struct { + delta uint16 + next uint16 +} + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + Hashes are stored in chains which are bucketed to groups. Group of chains + share a storage "bank". When more than "bank size" chain nodes are added, + oldest nodes are replaced; this way several chains may share a tail. */ +type hashForgetfulChain struct { + hasherCommon + + bucketBits uint + numBanks uint + bankBits uint + numLastDistancesToCheck int + + addr []uint32 + head []uint16 + tiny_hash [65536]byte + banks [][]slot + free_slot_idx []uint16 + max_hops uint +} + +func (h *hashForgetfulChain) Initialize(params *encoderParams) { + var q uint + if params.quality > 6 { + q = 7 + } else { + q = 8 + } + h.max_hops = q << uint(params.quality-4) + + bankSize := 1 << h.bankBits + bucketSize := 1 << h.bucketBits + + h.addr = make([]uint32, bucketSize) + h.head = make([]uint16, bucketSize) + h.banks = make([][]slot, h.numBanks) + for i := range h.banks { + h.banks[i] = make([]slot, bankSize) + } + h.free_slot_idx = make([]uint16, h.numBanks) +} + +func (h *hashForgetfulChain) Prepare(one_shot bool, input_size uint, data []byte) { + var partial_prepare_threshold uint = (1 << h.bucketBits) >> 6 + /* Partial preparation is 100 times slower (per socket). */ + if one_shot && input_size <= partial_prepare_threshold { + var i uint + for i = 0; i < input_size; i++ { + var bucket uint = h.HashBytes(data[i:]) + + /* See InitEmpty comment. */ + h.addr[bucket] = 0xCCCCCCCC + + h.head[bucket] = 0xCCCC + } + } else { + /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position + processed by hasher never reaches 3GB + 64M; this makes all new chains + to be terminated after the first node. */ + for i := range h.addr { + h.addr[i] = 0xCCCCCCCC + } + + for i := range h.head { + h.head[i] = 0 + } + } + + h.tiny_hash = [65536]byte{} + for i := range h.free_slot_idx { + h.free_slot_idx[i] = 0 + } +} + +/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend + node to corresponding chain; also update tiny_hash for current position. */ +func (h *hashForgetfulChain) Store(data []byte, mask uint, ix uint) { + var key uint = h.HashBytes(data[ix&mask:]) + var bank uint = key & (h.numBanks - 1) + idx := uint(h.free_slot_idx[bank]) & ((1 << h.bankBits) - 1) + h.free_slot_idx[bank]++ + var delta uint = ix - uint(h.addr[key]) + h.tiny_hash[uint16(ix)] = byte(key) + if delta > 0xFFFF { + delta = 0xFFFF + } + h.banks[bank][idx].delta = uint16(delta) + h.banks[bank][idx].next = h.head[key] + h.addr[key] = uint32(ix) + h.head[key] = uint16(idx) +} + +func (h *hashForgetfulChain) StoreRange(data []byte, mask uint, ix_start uint, ix_end uint) { + var i uint + for i = ix_start; i < ix_end; i++ { + h.Store(data, mask, i) + } +} + +func (h *hashForgetfulChain) StitchToPreviousBlock(num_bytes uint, position uint, ringbuffer []byte, ring_buffer_mask uint) { + if num_bytes >= h.HashTypeLength()-1 && position >= 3 { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + h.Store(ringbuffer, ring_buffer_mask, position-3) + h.Store(ringbuffer, ring_buffer_mask, position-2) + h.Store(ringbuffer, ring_buffer_mask, position-1) + } +} + +func (h *hashForgetfulChain) PrepareDistanceCache(distance_cache []int) { + prepareDistanceCache(distance_cache, h.numLastDistancesToCheck) +} + +/* Find a longest backward match of &data[cur_ix] up to the length of + max_length and stores the position cur_ix in the hash table. + + REQUIRES: PrepareDistanceCachehashForgetfulChain must be invoked for current distance cache + values; if this method is invoked repeatedly with the same distance + cache values, it is enough to invoke PrepareDistanceCachehashForgetfulChain once. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + |out|->score is updated only if a better match is found. */ +func (h *hashForgetfulChain) FindLongestMatch(dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *hasherSearchResult) { + var cur_ix_masked uint = cur_ix & ring_buffer_mask + var min_score uint = out.score + var best_score uint = out.score + var best_len uint = out.len + var key uint = h.HashBytes(data[cur_ix_masked:]) + var tiny_hash byte = byte(key) + /* Don't accept a short copy from far away. */ + out.len = 0 + + out.len_code_delta = 0 + + /* Try last distance first. */ + for i := 0; i < h.numLastDistancesToCheck; i++ { + var backward uint = uint(distance_cache[i]) + var prev_ix uint = (cur_ix - backward) + + /* For distance code 0 we want to consider 2-byte matches. */ + if i > 0 && h.tiny_hash[uint16(prev_ix)] != tiny_hash { + continue + } + if prev_ix >= cur_ix || backward > max_backward { + continue + } + + prev_ix &= ring_buffer_mask + { + var len uint = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 2 { + var score uint = backwardReferenceScoreUsingLastDistance(uint(len)) + if best_score < score { + if i != 0 { + score -= backwardReferencePenaltyUsingLastDistance(uint(i)) + } + if best_score < score { + best_score = score + best_len = uint(len) + out.len = best_len + out.distance = backward + out.score = best_score + } + } + } + } + } + { + var bank uint = key & (h.numBanks - 1) + var backward uint = 0 + var hops uint = h.max_hops + var delta uint = cur_ix - uint(h.addr[key]) + var slot uint = uint(h.head[key]) + for { + tmp6 := hops + hops-- + if tmp6 == 0 { + break + } + var prev_ix uint + var last uint = slot + backward += delta + if backward > max_backward { + break + } + prev_ix = (cur_ix - backward) & ring_buffer_mask + slot = uint(h.banks[bank][last].next) + delta = uint(h.banks[bank][last].delta) + if cur_ix_masked+best_len > ring_buffer_mask || prev_ix+best_len > ring_buffer_mask || data[cur_ix_masked+best_len] != data[prev_ix+best_len] { + continue + } + { + var len uint = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 4 { + /* Comparing for >= 3 does not change the semantics, but just saves + for a few unnecessary binary logarithms in backward reference + score, since we are not interested in such short matches. */ + var score uint = backwardReferenceScore(uint(len), backward) + if best_score < score { + best_score = score + best_len = uint(len) + out.len = best_len + out.distance = backward + out.score = best_score + } + } + } + } + + h.Store(data, ring_buffer_mask, cur_ix) + } + + if out.score == min_score { + searchInStaticDictionary(dictionary, h, data[cur_ix_masked:], max_length, max_backward+gap, max_distance, out, false) + } +} diff --git a/vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.go b/vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.go new file mode 100644 index 0000000000..9375dc1553 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/hash_longest_match_quickly.go @@ -0,0 +1,214 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes compression + a little faster (0.5% - 1%) and it compresses 0.15% better on small text + and HTML inputs. */ + +func (*hashLongestMatchQuickly) HashTypeLength() uint { + return 8 +} + +func (*hashLongestMatchQuickly) StoreLookahead() uint { + return 8 +} + +/* HashBytes is the function that chooses the bucket to place + the address in. The HashLongestMatch and hashLongestMatchQuickly + classes have separate, different implementations of hashing. */ +func (h *hashLongestMatchQuickly) HashBytes(data []byte) uint32 { + var hash uint64 = ((binary.LittleEndian.Uint64(data) << (64 - 8*h.hashLen)) * kHashMul64) + + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return uint32(hash >> (64 - h.bucketBits)) +} + +/* A (forgetful) hash table to the data seen by the compressor, to + help create backward references to previous data. + + This is a hash map of fixed size (1 << 16). Starting from the + given index, 1 buckets are used to store values of a key. */ +type hashLongestMatchQuickly struct { + hasherCommon + + bucketBits uint + bucketSweep int + hashLen uint + useDictionary bool + + buckets []uint32 +} + +func (h *hashLongestMatchQuickly) Initialize(params *encoderParams) { + h.buckets = make([]uint32, 1<> 7 + /* Partial preparation is 100 times slower (per socket). */ + if one_shot && input_size <= partial_prepare_threshold { + var i uint + for i = 0; i < input_size; i++ { + var key uint32 = h.HashBytes(data[i:]) + for j := 0; j < h.bucketSweep; j++ { + h.buckets[key+uint32(j)] = 0 + } + } + } else { + /* It is not strictly necessary to fill this buffer here, but + not filling will make the results of the compression stochastic + (but correct). This is because random data would cause the + system to find accidentally good backward references here and there. */ + for i := range h.buckets { + h.buckets[i] = 0 + } + } +} + +/* Look at 5 bytes at &data[ix & mask]. + Compute a hash from these, and store the value somewhere within + [ix .. ix+3]. */ +func (h *hashLongestMatchQuickly) Store(data []byte, mask uint, ix uint) { + var key uint32 = h.HashBytes(data[ix&mask:]) + var off uint32 = uint32(ix>>3) % uint32(h.bucketSweep) + /* Wiggle the value with the bucket sweep range. */ + h.buckets[key+off] = uint32(ix) +} + +func (h *hashLongestMatchQuickly) StoreRange(data []byte, mask uint, ix_start uint, ix_end uint) { + var i uint + for i = ix_start; i < ix_end; i++ { + h.Store(data, mask, i) + } +} + +func (h *hashLongestMatchQuickly) StitchToPreviousBlock(num_bytes uint, position uint, ringbuffer []byte, ringbuffer_mask uint) { + if num_bytes >= h.HashTypeLength()-1 && position >= 3 { + /* Prepare the hashes for three last bytes of the last write. + These could not be calculated before, since they require knowledge + of both the previous and the current block. */ + h.Store(ringbuffer, ringbuffer_mask, position-3) + h.Store(ringbuffer, ringbuffer_mask, position-2) + h.Store(ringbuffer, ringbuffer_mask, position-1) + } +} + +func (*hashLongestMatchQuickly) PrepareDistanceCache(distance_cache []int) { +} + +/* Find a longest backward match of &data[cur_ix & ring_buffer_mask] + up to the length of max_length and stores the position cur_ix in the + hash table. + + Does not look for matches longer than max_length. + Does not look for matches further away than max_backward. + Writes the best match into |out|. + |out|->score is updated only if a better match is found. */ +func (h *hashLongestMatchQuickly) FindLongestMatch(dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *hasherSearchResult) { + var best_len_in uint = out.len + var cur_ix_masked uint = cur_ix & ring_buffer_mask + var key uint32 = h.HashBytes(data[cur_ix_masked:]) + var compare_char int = int(data[cur_ix_masked+best_len_in]) + var min_score uint = out.score + var best_score uint = out.score + var best_len uint = best_len_in + var cached_backward uint = uint(distance_cache[0]) + var prev_ix uint = cur_ix - cached_backward + var bucket []uint32 + out.len_code_delta = 0 + if prev_ix < cur_ix { + prev_ix &= uint(uint32(ring_buffer_mask)) + if compare_char == int(data[prev_ix+best_len]) { + var len uint = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 4 { + var score uint = backwardReferenceScoreUsingLastDistance(uint(len)) + if best_score < score { + best_score = score + best_len = uint(len) + out.len = uint(len) + out.distance = cached_backward + out.score = best_score + compare_char = int(data[cur_ix_masked+best_len]) + if h.bucketSweep == 1 { + h.buckets[key] = uint32(cur_ix) + return + } + } + } + } + } + + if h.bucketSweep == 1 { + var backward uint + var len uint + + /* Only one to look for, don't bother to prepare for a loop. */ + prev_ix = uint(h.buckets[key]) + + h.buckets[key] = uint32(cur_ix) + backward = cur_ix - prev_ix + prev_ix &= uint(uint32(ring_buffer_mask)) + if compare_char != int(data[prev_ix+best_len_in]) { + return + } + + if backward == 0 || backward > max_backward { + return + } + + len = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 4 { + var score uint = backwardReferenceScore(uint(len), backward) + if best_score < score { + out.len = uint(len) + out.distance = backward + out.score = score + return + } + } + } else { + bucket = h.buckets[key:] + var i int + prev_ix = uint(bucket[0]) + bucket = bucket[1:] + for i = 0; i < h.bucketSweep; (func() { i++; tmp3 := bucket; bucket = bucket[1:]; prev_ix = uint(tmp3[0]) })() { + var backward uint = cur_ix - prev_ix + var len uint + prev_ix &= uint(uint32(ring_buffer_mask)) + if compare_char != int(data[prev_ix+best_len]) { + continue + } + + if backward == 0 || backward > max_backward { + continue + } + + len = findMatchLengthWithLimit(data[prev_ix:], data[cur_ix_masked:], max_length) + if len >= 4 { + var score uint = backwardReferenceScore(uint(len), backward) + if best_score < score { + best_score = score + best_len = uint(len) + out.len = best_len + out.distance = backward + out.score = score + compare_char = int(data[cur_ix_masked+best_len]) + } + } + } + } + + if h.useDictionary && min_score == out.score { + searchInStaticDictionary(dictionary, h, data[cur_ix_masked:], max_length, max_backward+gap, max_distance, out, true) + } + + h.buckets[key+uint32((cur_ix>>3)%uint(h.bucketSweep))] = uint32(cur_ix) +} diff --git a/vendor/github.com/andybalholm/brotli/hash_rolling.go b/vendor/github.com/andybalholm/brotli/hash_rolling.go new file mode 100644 index 0000000000..6630fc07e4 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/hash_rolling.go @@ -0,0 +1,168 @@ +package brotli + +/* Copyright 2018 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* NOTE: this hasher does not search in the dictionary. It is used as + backup-hasher, the main hasher already searches in it. */ + +const kRollingHashMul32 uint32 = 69069 + +const kInvalidPosHashRolling uint32 = 0xffffffff + +/* This hasher uses a longer forward length, but returning a higher value here + will hurt compression by the main hasher when combined with a composite + hasher. The hasher tests for forward itself instead. */ +func (*hashRolling) HashTypeLength() uint { + return 4 +} + +func (*hashRolling) StoreLookahead() uint { + return 4 +} + +/* Computes a code from a single byte. A lookup table of 256 values could be + used, but simply adding 1 works about as good. */ +func (*hashRolling) HashByte(b byte) uint32 { + return uint32(b) + 1 +} + +func (h *hashRolling) HashRollingFunctionInitial(state uint32, add byte, factor uint32) uint32 { + return uint32(factor*state + h.HashByte(add)) +} + +func (h *hashRolling) HashRollingFunction(state uint32, add byte, rem byte, factor uint32, factor_remove uint32) uint32 { + return uint32(factor*state + h.HashByte(add) - factor_remove*h.HashByte(rem)) +} + +/* Rolling hash for long distance long string matches. Stores one position + per bucket, bucket key is computed over a long region. */ +type hashRolling struct { + hasherCommon + + jump int + + state uint32 + table []uint32 + next_ix uint + factor uint32 + factor_remove uint32 +} + +func (h *hashRolling) Initialize(params *encoderParams) { + h.state = 0 + h.next_ix = 0 + + h.factor = kRollingHashMul32 + + /* Compute the factor of the oldest byte to remove: factor**steps modulo + 0xffffffff (the multiplications rely on 32-bit overflow) */ + h.factor_remove = 1 + + for i := 0; i < 32; i += h.jump { + h.factor_remove *= h.factor + } + + h.table = make([]uint32, 16777216) + for i := 0; i < 16777216; i++ { + h.table[i] = kInvalidPosHashRolling + } +} + +func (h *hashRolling) Prepare(one_shot bool, input_size uint, data []byte) { + /* Too small size, cannot use this hasher. */ + if input_size < 32 { + return + } + h.state = 0 + for i := 0; i < 32; i += h.jump { + h.state = h.HashRollingFunctionInitial(h.state, data[i], h.factor) + } +} + +func (*hashRolling) Store(data []byte, mask uint, ix uint) { +} + +func (*hashRolling) StoreRange(data []byte, mask uint, ix_start uint, ix_end uint) { +} + +func (h *hashRolling) StitchToPreviousBlock(num_bytes uint, position uint, ringbuffer []byte, ring_buffer_mask uint) { + var position_masked uint + /* In this case we must re-initialize the hasher from scratch from the + current position. */ + + var available uint = num_bytes + if position&uint(h.jump-1) != 0 { + var diff uint = uint(h.jump) - (position & uint(h.jump-1)) + if diff > available { + available = 0 + } else { + available = available - diff + } + position += diff + } + + position_masked = position & ring_buffer_mask + + /* wrapping around ringbuffer not handled. */ + if available > ring_buffer_mask-position_masked { + available = ring_buffer_mask - position_masked + } + + h.Prepare(false, available, ringbuffer[position&ring_buffer_mask:]) + h.next_ix = position +} + +func (*hashRolling) PrepareDistanceCache(distance_cache []int) { +} + +func (h *hashRolling) FindLongestMatch(dictionary *encoderDictionary, data []byte, ring_buffer_mask uint, distance_cache []int, cur_ix uint, max_length uint, max_backward uint, gap uint, max_distance uint, out *hasherSearchResult) { + var cur_ix_masked uint = cur_ix & ring_buffer_mask + var pos uint = h.next_ix + + if cur_ix&uint(h.jump-1) != 0 { + return + } + + /* Not enough lookahead */ + if max_length < 32 { + return + } + + for pos = h.next_ix; pos <= cur_ix; pos += uint(h.jump) { + var code uint32 = h.state & ((16777216 * 64) - 1) + var rem byte = data[pos&ring_buffer_mask] + var add byte = data[(pos+32)&ring_buffer_mask] + var found_ix uint = uint(kInvalidPosHashRolling) + + h.state = h.HashRollingFunction(h.state, add, rem, h.factor, h.factor_remove) + + if code < 16777216 { + found_ix = uint(h.table[code]) + h.table[code] = uint32(pos) + if pos == cur_ix && uint32(found_ix) != kInvalidPosHashRolling { + /* The cast to 32-bit makes backward distances up to 4GB work even + if cur_ix is above 4GB, despite using 32-bit values in the table. */ + var backward uint = uint(uint32(cur_ix - found_ix)) + if backward <= max_backward { + var found_ix_masked uint = found_ix & ring_buffer_mask + var len uint = findMatchLengthWithLimit(data[found_ix_masked:], data[cur_ix_masked:], max_length) + if len >= 4 && len > out.len { + var score uint = backwardReferenceScore(uint(len), backward) + if score > out.score { + out.len = uint(len) + out.distance = backward + out.score = score + out.len_code_delta = 0 + } + } + } + } + } + } + + h.next_ix = cur_ix + uint(h.jump) +} diff --git a/vendor/github.com/andybalholm/brotli/histogram.go b/vendor/github.com/andybalholm/brotli/histogram.go new file mode 100644 index 0000000000..0346622beb --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/histogram.go @@ -0,0 +1,226 @@ +package brotli + +import "math" + +/* The distance symbols effectively used by "Large Window Brotli" (32-bit). */ +const numHistogramDistanceSymbols = 544 + +type histogramLiteral struct { + data_ [numLiteralSymbols]uint32 + total_count_ uint + bit_cost_ float64 +} + +func histogramClearLiteral(self *histogramLiteral) { + self.data_ = [numLiteralSymbols]uint32{} + self.total_count_ = 0 + self.bit_cost_ = math.MaxFloat64 +} + +func clearHistogramsLiteral(array []histogramLiteral, length uint) { + var i uint + for i = 0; i < length; i++ { + histogramClearLiteral(&array[i:][0]) + } +} + +func histogramAddLiteral(self *histogramLiteral, val uint) { + self.data_[val]++ + self.total_count_++ +} + +func histogramAddVectorLiteral(self *histogramLiteral, p []byte, n uint) { + self.total_count_ += n + n += 1 + for { + n-- + if n == 0 { + break + } + self.data_[p[0]]++ + p = p[1:] + } +} + +func histogramAddHistogramLiteral(self *histogramLiteral, v *histogramLiteral) { + var i uint + self.total_count_ += v.total_count_ + for i = 0; i < numLiteralSymbols; i++ { + self.data_[i] += v.data_[i] + } +} + +func histogramDataSizeLiteral() uint { + return numLiteralSymbols +} + +type histogramCommand struct { + data_ [numCommandSymbols]uint32 + total_count_ uint + bit_cost_ float64 +} + +func histogramClearCommand(self *histogramCommand) { + self.data_ = [numCommandSymbols]uint32{} + self.total_count_ = 0 + self.bit_cost_ = math.MaxFloat64 +} + +func clearHistogramsCommand(array []histogramCommand, length uint) { + var i uint + for i = 0; i < length; i++ { + histogramClearCommand(&array[i:][0]) + } +} + +func histogramAddCommand(self *histogramCommand, val uint) { + self.data_[val]++ + self.total_count_++ +} + +func histogramAddVectorCommand(self *histogramCommand, p []uint16, n uint) { + self.total_count_ += n + n += 1 + for { + n-- + if n == 0 { + break + } + self.data_[p[0]]++ + p = p[1:] + } +} + +func histogramAddHistogramCommand(self *histogramCommand, v *histogramCommand) { + var i uint + self.total_count_ += v.total_count_ + for i = 0; i < numCommandSymbols; i++ { + self.data_[i] += v.data_[i] + } +} + +func histogramDataSizeCommand() uint { + return numCommandSymbols +} + +type histogramDistance struct { + data_ [numDistanceSymbols]uint32 + total_count_ uint + bit_cost_ float64 +} + +func histogramClearDistance(self *histogramDistance) { + self.data_ = [numDistanceSymbols]uint32{} + self.total_count_ = 0 + self.bit_cost_ = math.MaxFloat64 +} + +func clearHistogramsDistance(array []histogramDistance, length uint) { + var i uint + for i = 0; i < length; i++ { + histogramClearDistance(&array[i:][0]) + } +} + +func histogramAddDistance(self *histogramDistance, val uint) { + self.data_[val]++ + self.total_count_++ +} + +func histogramAddVectorDistance(self *histogramDistance, p []uint16, n uint) { + self.total_count_ += n + n += 1 + for { + n-- + if n == 0 { + break + } + self.data_[p[0]]++ + p = p[1:] + } +} + +func histogramAddHistogramDistance(self *histogramDistance, v *histogramDistance) { + var i uint + self.total_count_ += v.total_count_ + for i = 0; i < numDistanceSymbols; i++ { + self.data_[i] += v.data_[i] + } +} + +func histogramDataSizeDistance() uint { + return numDistanceSymbols +} + +type blockSplitIterator struct { + split_ *blockSplit + idx_ uint + type_ uint + length_ uint +} + +func initBlockSplitIterator(self *blockSplitIterator, split *blockSplit) { + self.split_ = split + self.idx_ = 0 + self.type_ = 0 + if len(split.lengths) > 0 { + self.length_ = uint(split.lengths[0]) + } else { + self.length_ = 0 + } +} + +func blockSplitIteratorNext(self *blockSplitIterator) { + if self.length_ == 0 { + self.idx_++ + self.type_ = uint(self.split_.types[self.idx_]) + self.length_ = uint(self.split_.lengths[self.idx_]) + } + + self.length_-- +} + +func buildHistogramsWithContext(cmds []command, literal_split *blockSplit, insert_and_copy_split *blockSplit, dist_split *blockSplit, ringbuffer []byte, start_pos uint, mask uint, prev_byte byte, prev_byte2 byte, context_modes []int, literal_histograms []histogramLiteral, insert_and_copy_histograms []histogramCommand, copy_dist_histograms []histogramDistance) { + var pos uint = start_pos + var literal_it blockSplitIterator + var insert_and_copy_it blockSplitIterator + var dist_it blockSplitIterator + + initBlockSplitIterator(&literal_it, literal_split) + initBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split) + initBlockSplitIterator(&dist_it, dist_split) + for i := range cmds { + var cmd *command = &cmds[i] + var j uint + blockSplitIteratorNext(&insert_and_copy_it) + histogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_], uint(cmd.cmd_prefix_)) + + /* TODO: unwrap iterator blocks. */ + for j = uint(cmd.insert_len_); j != 0; j-- { + var context uint + blockSplitIteratorNext(&literal_it) + context = literal_it.type_ + if context_modes != nil { + var lut contextLUT = getContextLUT(context_modes[context]) + context = (context << literalContextBits) + uint(getContext(prev_byte, prev_byte2, lut)) + } + + histogramAddLiteral(&literal_histograms[context], uint(ringbuffer[pos&mask])) + prev_byte2 = prev_byte + prev_byte = ringbuffer[pos&mask] + pos++ + } + + pos += uint(commandCopyLen(cmd)) + if commandCopyLen(cmd) != 0 { + prev_byte2 = ringbuffer[(pos-2)&mask] + prev_byte = ringbuffer[(pos-1)&mask] + if cmd.cmd_prefix_ >= 128 { + var context uint + blockSplitIteratorNext(&dist_it) + context = uint(uint32(dist_it.type_< bestQ && + (spec.Value == "*" || spec.Value == offer) { + bestQ = spec.Q + bestOffer = offer + } + } + } + if bestQ == 0 { + bestOffer = "" + } + return bestOffer +} + +// acceptSpec describes an Accept* header. +type acceptSpec struct { + Value string + Q float64 +} + +// parseAccept parses Accept* headers. +func parseAccept(header http.Header, key string) (specs []acceptSpec) { +loop: + for _, s := range header[key] { + for { + var spec acceptSpec + spec.Value, s = expectTokenSlash(s) + if spec.Value == "" { + continue loop + } + spec.Q = 1.0 + s = skipSpace(s) + if strings.HasPrefix(s, ";") { + s = skipSpace(s[1:]) + if !strings.HasPrefix(s, "q=") { + continue loop + } + spec.Q, s = expectQuality(s[2:]) + if spec.Q < 0.0 { + continue loop + } + } + specs = append(specs, spec) + s = skipSpace(s) + if !strings.HasPrefix(s, ",") { + continue loop + } + s = skipSpace(s[1:]) + } + } + return +} + +func skipSpace(s string) (rest string) { + i := 0 + for ; i < len(s); i++ { + if octetTypes[s[i]]&isSpace == 0 { + break + } + } + return s[i:] +} + +func expectTokenSlash(s string) (token, rest string) { + i := 0 + for ; i < len(s); i++ { + b := s[i] + if (octetTypes[b]&isToken == 0) && b != '/' { + break + } + } + return s[:i], s[i:] +} + +func expectQuality(s string) (q float64, rest string) { + switch { + case len(s) == 0: + return -1, "" + case s[0] == '0': + q = 0 + case s[0] == '1': + q = 1 + default: + return -1, "" + } + s = s[1:] + if !strings.HasPrefix(s, ".") { + return q, s + } + s = s[1:] + i := 0 + n := 0 + d := 1 + for ; i < len(s); i++ { + b := s[i] + if b < '0' || b > '9' { + break + } + n = n*10 + int(b) - '0' + d *= 10 + } + return q + float64(n)/float64(d), s[i:] +} + +// Octet types from RFC 2616. +var octetTypes [256]octetType + +type octetType byte + +const ( + isToken octetType = 1 << iota + isSpace +) + +func init() { + // OCTET = + // CHAR = + // CTL = + // CR = + // LF = + // SP = + // HT = + // <"> = + // CRLF = CR LF + // LWS = [CRLF] 1*( SP | HT ) + // TEXT = + // separators = "(" | ")" | "<" | ">" | "@" | "," | ";" | ":" | "\" | <"> + // | "/" | "[" | "]" | "?" | "=" | "{" | "}" | SP | HT + // token = 1* + // qdtext = > + + for c := 0; c < 256; c++ { + var t octetType + isCtl := c <= 31 || c == 127 + isChar := 0 <= c && c <= 127 + isSeparator := strings.ContainsRune(" \t\"(),/:;<=>?@[]\\{}", rune(c)) + if strings.ContainsRune(" \t\r\n", rune(c)) { + t |= isSpace + } + if isChar && !isCtl && !isSeparator { + t |= isToken + } + octetTypes[c] = t + } +} diff --git a/vendor/github.com/andybalholm/brotli/huffman.go b/vendor/github.com/andybalholm/brotli/huffman.go new file mode 100644 index 0000000000..182f3d2a55 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/huffman.go @@ -0,0 +1,653 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Utilities for building Huffman decoding tables. */ + +const huffmanMaxCodeLength = 15 + +/* Maximum possible Huffman table size for an alphabet size of (index * 32), + max code length 15 and root table bits 8. */ +var kMaxHuffmanTableSize = []uint16{ + 256, + 402, + 436, + 468, + 500, + 534, + 566, + 598, + 630, + 662, + 694, + 726, + 758, + 790, + 822, + 854, + 886, + 920, + 952, + 984, + 1016, + 1048, + 1080, + 1112, + 1144, + 1176, + 1208, + 1240, + 1272, + 1304, + 1336, + 1368, + 1400, + 1432, + 1464, + 1496, + 1528, +} + +/* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */ +const huffmanMaxSize26 = 396 + +/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */ +const huffmanMaxSize258 = 632 + +/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS == 272 */ +const huffmanMaxSize272 = 646 + +const huffmanMaxCodeLengthCodeLength = 5 + +/* Do not create this struct directly - use the ConstructHuffmanCode + * constructor below! */ +type huffmanCode struct { + bits byte + value uint16 +} + +func constructHuffmanCode(bits byte, value uint16) huffmanCode { + var h huffmanCode + h.bits = bits + h.value = value + return h +} + +/* Builds Huffman lookup table assuming code lengths are in symbol order. */ + +/* Builds Huffman lookup table assuming code lengths are in symbol order. + Returns size of resulting table. */ + +/* Builds a simple Huffman table. The |num_symbols| parameter is to be + interpreted as follows: 0 means 1 symbol, 1 means 2 symbols, + 2 means 3 symbols, 3 means 4 symbols with lengths [2, 2, 2, 2], + 4 means 4 symbols with lengths [1, 2, 3, 3]. */ + +/* Contains a collection of Huffman trees with the same alphabet size. */ +/* max_symbol is needed due to simple codes since log2(alphabet_size) could be + greater than log2(max_symbol). */ +type huffmanTreeGroup struct { + htrees [][]huffmanCode + codes []huffmanCode + alphabet_size uint16 + max_symbol uint16 + num_htrees uint16 +} + +const reverseBitsMax = 8 + +const reverseBitsBase = 0 + +var kReverseBits = [1 << reverseBitsMax]byte{ + 0x00, + 0x80, + 0x40, + 0xC0, + 0x20, + 0xA0, + 0x60, + 0xE0, + 0x10, + 0x90, + 0x50, + 0xD0, + 0x30, + 0xB0, + 0x70, + 0xF0, + 0x08, + 0x88, + 0x48, + 0xC8, + 0x28, + 0xA8, + 0x68, + 0xE8, + 0x18, + 0x98, + 0x58, + 0xD8, + 0x38, + 0xB8, + 0x78, + 0xF8, + 0x04, + 0x84, + 0x44, + 0xC4, + 0x24, + 0xA4, + 0x64, + 0xE4, + 0x14, + 0x94, + 0x54, + 0xD4, + 0x34, + 0xB4, + 0x74, + 0xF4, + 0x0C, + 0x8C, + 0x4C, + 0xCC, + 0x2C, + 0xAC, + 0x6C, + 0xEC, + 0x1C, + 0x9C, + 0x5C, + 0xDC, + 0x3C, + 0xBC, + 0x7C, + 0xFC, + 0x02, + 0x82, + 0x42, + 0xC2, + 0x22, + 0xA2, + 0x62, + 0xE2, + 0x12, + 0x92, + 0x52, + 0xD2, + 0x32, + 0xB2, + 0x72, + 0xF2, + 0x0A, + 0x8A, + 0x4A, + 0xCA, + 0x2A, + 0xAA, + 0x6A, + 0xEA, + 0x1A, + 0x9A, + 0x5A, + 0xDA, + 0x3A, + 0xBA, + 0x7A, + 0xFA, + 0x06, + 0x86, + 0x46, + 0xC6, + 0x26, + 0xA6, + 0x66, + 0xE6, + 0x16, + 0x96, + 0x56, + 0xD6, + 0x36, + 0xB6, + 0x76, + 0xF6, + 0x0E, + 0x8E, + 0x4E, + 0xCE, + 0x2E, + 0xAE, + 0x6E, + 0xEE, + 0x1E, + 0x9E, + 0x5E, + 0xDE, + 0x3E, + 0xBE, + 0x7E, + 0xFE, + 0x01, + 0x81, + 0x41, + 0xC1, + 0x21, + 0xA1, + 0x61, + 0xE1, + 0x11, + 0x91, + 0x51, + 0xD1, + 0x31, + 0xB1, + 0x71, + 0xF1, + 0x09, + 0x89, + 0x49, + 0xC9, + 0x29, + 0xA9, + 0x69, + 0xE9, + 0x19, + 0x99, + 0x59, + 0xD9, + 0x39, + 0xB9, + 0x79, + 0xF9, + 0x05, + 0x85, + 0x45, + 0xC5, + 0x25, + 0xA5, + 0x65, + 0xE5, + 0x15, + 0x95, + 0x55, + 0xD5, + 0x35, + 0xB5, + 0x75, + 0xF5, + 0x0D, + 0x8D, + 0x4D, + 0xCD, + 0x2D, + 0xAD, + 0x6D, + 0xED, + 0x1D, + 0x9D, + 0x5D, + 0xDD, + 0x3D, + 0xBD, + 0x7D, + 0xFD, + 0x03, + 0x83, + 0x43, + 0xC3, + 0x23, + 0xA3, + 0x63, + 0xE3, + 0x13, + 0x93, + 0x53, + 0xD3, + 0x33, + 0xB3, + 0x73, + 0xF3, + 0x0B, + 0x8B, + 0x4B, + 0xCB, + 0x2B, + 0xAB, + 0x6B, + 0xEB, + 0x1B, + 0x9B, + 0x5B, + 0xDB, + 0x3B, + 0xBB, + 0x7B, + 0xFB, + 0x07, + 0x87, + 0x47, + 0xC7, + 0x27, + 0xA7, + 0x67, + 0xE7, + 0x17, + 0x97, + 0x57, + 0xD7, + 0x37, + 0xB7, + 0x77, + 0xF7, + 0x0F, + 0x8F, + 0x4F, + 0xCF, + 0x2F, + 0xAF, + 0x6F, + 0xEF, + 0x1F, + 0x9F, + 0x5F, + 0xDF, + 0x3F, + 0xBF, + 0x7F, + 0xFF, +} + +const reverseBitsLowest = (uint64(1) << (reverseBitsMax - 1 + reverseBitsBase)) + +/* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX), + where reverse(value, len) is the bit-wise reversal of the len least + significant bits of value. */ +func reverseBits8(num uint64) uint64 { + return uint64(kReverseBits[num]) +} + +/* Stores code in table[0], table[step], table[2*step], ..., table[end] */ +/* Assumes that end is an integer multiple of step */ +func replicateValue(table []huffmanCode, step int, end int, code huffmanCode) { + for { + end -= step + table[end] = code + if end <= 0 { + break + } + } +} + +/* Returns the table width of the next 2nd level table. |count| is the histogram + of bit lengths for the remaining symbols, |len| is the code length of the + next processed symbol. */ +func nextTableBitSize(count []uint16, len int, root_bits int) int { + var left int = 1 << uint(len-root_bits) + for len < huffmanMaxCodeLength { + left -= int(count[len]) + if left <= 0 { + break + } + len++ + left <<= 1 + } + + return len - root_bits +} + +func buildCodeLengthsHuffmanTable(table []huffmanCode, code_lengths []byte, count []uint16) { + var code huffmanCode /* current table entry */ /* symbol index in original or sorted table */ /* prefix code */ /* prefix code addend */ /* step size to replicate values in current table */ /* size of current table */ /* symbols sorted by code length */ + var symbol int + var key uint64 + var key_step uint64 + var step int + var table_size int + var sorted [codeLengthCodes]int + var offset [huffmanMaxCodeLengthCodeLength + 1]int + var bits int + var bits_count int + /* offsets in sorted table for each length */ + assert(huffmanMaxCodeLengthCodeLength <= reverseBitsMax) + + /* Generate offsets into sorted symbol table by code length. */ + symbol = -1 + + bits = 1 + var i int + for i = 0; i < huffmanMaxCodeLengthCodeLength; i++ { + symbol += int(count[bits]) + offset[bits] = symbol + bits++ + } + + /* Symbols with code length 0 are placed after all other symbols. */ + offset[0] = codeLengthCodes - 1 + + /* Sort symbols by length, by symbol order within each length. */ + symbol = codeLengthCodes + + for { + var i int + for i = 0; i < 6; i++ { + symbol-- + sorted[offset[code_lengths[symbol]]] = symbol + offset[code_lengths[symbol]]-- + } + if symbol == 0 { + break + } + } + + table_size = 1 << huffmanMaxCodeLengthCodeLength + + /* Special case: all symbols but one have 0 code length. */ + if offset[0] == 0 { + code = constructHuffmanCode(0, uint16(sorted[0])) + for key = 0; key < uint64(table_size); key++ { + table[key] = code + } + + return + } + + /* Fill in table. */ + key = 0 + + key_step = reverseBitsLowest + symbol = 0 + bits = 1 + step = 2 + for { + for bits_count = int(count[bits]); bits_count != 0; bits_count-- { + code = constructHuffmanCode(byte(bits), uint16(sorted[symbol])) + symbol++ + replicateValue(table[reverseBits8(key):], step, table_size, code) + key += key_step + } + + step <<= 1 + key_step >>= 1 + bits++ + if bits > huffmanMaxCodeLengthCodeLength { + break + } + } +} + +func buildHuffmanTable(root_table []huffmanCode, root_bits int, symbol_lists symbolList, count []uint16) uint32 { + var code huffmanCode /* current table entry */ /* next available space in table */ /* current code length */ /* symbol index in original or sorted table */ /* prefix code */ /* prefix code addend */ /* 2nd level table prefix code */ /* 2nd level table prefix code addend */ /* step size to replicate values in current table */ /* key length of current table */ /* size of current table */ /* sum of root table size and 2nd level table sizes */ + var table []huffmanCode + var len int + var symbol int + var key uint64 + var key_step uint64 + var sub_key uint64 + var sub_key_step uint64 + var step int + var table_bits int + var table_size int + var total_size int + var max_length int = -1 + var bits int + var bits_count int + + assert(root_bits <= reverseBitsMax) + assert(huffmanMaxCodeLength-root_bits <= reverseBitsMax) + + for symbolListGet(symbol_lists, max_length) == 0xFFFF { + max_length-- + } + max_length += huffmanMaxCodeLength + 1 + + table = root_table + table_bits = root_bits + table_size = 1 << uint(table_bits) + total_size = table_size + + /* Fill in the root table. Reduce the table size to if possible, + and create the repetitions by memcpy. */ + if table_bits > max_length { + table_bits = max_length + table_size = 1 << uint(table_bits) + } + + key = 0 + key_step = reverseBitsLowest + bits = 1 + step = 2 + for { + symbol = bits - (huffmanMaxCodeLength + 1) + for bits_count = int(count[bits]); bits_count != 0; bits_count-- { + symbol = int(symbolListGet(symbol_lists, symbol)) + code = constructHuffmanCode(byte(bits), uint16(symbol)) + replicateValue(table[reverseBits8(key):], step, table_size, code) + key += key_step + } + + step <<= 1 + key_step >>= 1 + bits++ + if bits > table_bits { + break + } + } + + /* If root_bits != table_bits then replicate to fill the remaining slots. */ + for total_size != table_size { + copy(table[table_size:], table[:uint(table_size)]) + table_size <<= 1 + } + + /* Fill in 2nd level tables and add pointers to root table. */ + key_step = reverseBitsLowest >> uint(root_bits-1) + + sub_key = reverseBitsLowest << 1 + sub_key_step = reverseBitsLowest + len = root_bits + 1 + step = 2 + for ; len <= max_length; len++ { + symbol = len - (huffmanMaxCodeLength + 1) + for ; count[len] != 0; count[len]-- { + if sub_key == reverseBitsLowest<<1 { + table = table[table_size:] + table_bits = nextTableBitSize(count, int(len), root_bits) + table_size = 1 << uint(table_bits) + total_size += table_size + sub_key = reverseBits8(key) + key += key_step + root_table[sub_key] = constructHuffmanCode(byte(table_bits+root_bits), uint16(uint64(uint(-cap(table)+cap(root_table)))-sub_key)) + sub_key = 0 + } + + symbol = int(symbolListGet(symbol_lists, symbol)) + code = constructHuffmanCode(byte(len-root_bits), uint16(symbol)) + replicateValue(table[reverseBits8(sub_key):], step, table_size, code) + sub_key += sub_key_step + } + + step <<= 1 + sub_key_step >>= 1 + } + + return uint32(total_size) +} + +func buildSimpleHuffmanTable(table []huffmanCode, root_bits int, val []uint16, num_symbols uint32) uint32 { + var table_size uint32 = 1 + var goal_size uint32 = 1 << uint(root_bits) + switch num_symbols { + case 0: + table[0] = constructHuffmanCode(0, val[0]) + + case 1: + if val[1] > val[0] { + table[0] = constructHuffmanCode(1, val[0]) + table[1] = constructHuffmanCode(1, val[1]) + } else { + table[0] = constructHuffmanCode(1, val[1]) + table[1] = constructHuffmanCode(1, val[0]) + } + + table_size = 2 + + case 2: + table[0] = constructHuffmanCode(1, val[0]) + table[2] = constructHuffmanCode(1, val[0]) + if val[2] > val[1] { + table[1] = constructHuffmanCode(2, val[1]) + table[3] = constructHuffmanCode(2, val[2]) + } else { + table[1] = constructHuffmanCode(2, val[2]) + table[3] = constructHuffmanCode(2, val[1]) + } + + table_size = 4 + + case 3: + var i int + var k int + for i = 0; i < 3; i++ { + for k = i + 1; k < 4; k++ { + if val[k] < val[i] { + var t uint16 = val[k] + val[k] = val[i] + val[i] = t + } + } + } + + table[0] = constructHuffmanCode(2, val[0]) + table[2] = constructHuffmanCode(2, val[1]) + table[1] = constructHuffmanCode(2, val[2]) + table[3] = constructHuffmanCode(2, val[3]) + table_size = 4 + + case 4: + if val[3] < val[2] { + var t uint16 = val[3] + val[3] = val[2] + val[2] = t + } + + table[0] = constructHuffmanCode(1, val[0]) + table[1] = constructHuffmanCode(2, val[1]) + table[2] = constructHuffmanCode(1, val[0]) + table[3] = constructHuffmanCode(3, val[2]) + table[4] = constructHuffmanCode(1, val[0]) + table[5] = constructHuffmanCode(2, val[1]) + table[6] = constructHuffmanCode(1, val[0]) + table[7] = constructHuffmanCode(3, val[3]) + table_size = 8 + } + + for table_size != goal_size { + copy(table[table_size:], table[:uint(table_size)]) + table_size <<= 1 + } + + return goal_size +} diff --git a/vendor/github.com/andybalholm/brotli/literal_cost.go b/vendor/github.com/andybalholm/brotli/literal_cost.go new file mode 100644 index 0000000000..5a9ace94ee --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/literal_cost.go @@ -0,0 +1,182 @@ +package brotli + +func utf8Position(last uint, c uint, clamp uint) uint { + if c < 128 { + return 0 /* Next one is the 'Byte 1' again. */ + } else if c >= 192 { /* Next one is the 'Byte 2' of utf-8 encoding. */ + return brotli_min_size_t(1, clamp) + } else { + /* Let's decide over the last byte if this ends the sequence. */ + if last < 0xE0 { + return 0 /* Completed two or three byte coding. */ /* Next one is the 'Byte 3' of utf-8 encoding. */ + } else { + return brotli_min_size_t(2, clamp) + } + } +} + +func decideMultiByteStatsLevel(pos uint, len uint, mask uint, data []byte) uint { + var counts = [3]uint{0} /* should be 2, but 1 compresses better. */ + var max_utf8 uint = 1 + var last_c uint = 0 + var i uint + for i = 0; i < len; i++ { + var c uint = uint(data[(pos+i)&mask]) + counts[utf8Position(last_c, c, 2)]++ + last_c = c + } + + if counts[2] < 500 { + max_utf8 = 1 + } + + if counts[1]+counts[2] < 25 { + max_utf8 = 0 + } + + return max_utf8 +} + +func estimateBitCostsForLiteralsUTF8(pos uint, len uint, mask uint, data []byte, cost []float32) { + var max_utf8 uint = decideMultiByteStatsLevel(pos, uint(len), mask, data) + /* Bootstrap histograms. */ + var histogram = [3][256]uint{[256]uint{0}} + var window_half uint = 495 + var in_window uint = brotli_min_size_t(window_half, uint(len)) + var in_window_utf8 = [3]uint{0} + /* max_utf8 is 0 (normal ASCII single byte modeling), + 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */ + + var i uint + { + var last_c uint = 0 + var utf8_pos uint = 0 + for i = 0; i < in_window; i++ { + var c uint = uint(data[(pos+i)&mask]) + histogram[utf8_pos][c]++ + in_window_utf8[utf8_pos]++ + utf8_pos = utf8Position(last_c, c, max_utf8) + last_c = c + } + } + + /* Compute bit costs with sliding window. */ + for i = 0; i < len; i++ { + if i >= window_half { + var c uint + var last_c uint + if i < window_half+1 { + c = 0 + } else { + c = uint(data[(pos+i-window_half-1)&mask]) + } + if i < window_half+2 { + last_c = 0 + } else { + last_c = uint(data[(pos+i-window_half-2)&mask]) + } + /* Remove a byte in the past. */ + + var utf8_pos2 uint = utf8Position(last_c, c, max_utf8) + histogram[utf8_pos2][data[(pos+i-window_half)&mask]]-- + in_window_utf8[utf8_pos2]-- + } + + if i+window_half < len { + var c uint = uint(data[(pos+i+window_half-1)&mask]) + var last_c uint = uint(data[(pos+i+window_half-2)&mask]) + /* Add a byte in the future. */ + + var utf8_pos2 uint = utf8Position(last_c, c, max_utf8) + histogram[utf8_pos2][data[(pos+i+window_half)&mask]]++ + in_window_utf8[utf8_pos2]++ + } + { + var c uint + var last_c uint + if i < 1 { + c = 0 + } else { + c = uint(data[(pos+i-1)&mask]) + } + if i < 2 { + last_c = 0 + } else { + last_c = uint(data[(pos+i-2)&mask]) + } + var utf8_pos uint = utf8Position(last_c, c, max_utf8) + var masked_pos uint = (pos + i) & mask + var histo uint = histogram[utf8_pos][data[masked_pos]] + var lit_cost float64 + if histo == 0 { + histo = 1 + } + + lit_cost = fastLog2(in_window_utf8[utf8_pos]) - fastLog2(histo) + lit_cost += 0.02905 + if lit_cost < 1.0 { + lit_cost *= 0.5 + lit_cost += 0.5 + } + + /* Make the first bytes more expensive -- seems to help, not sure why. + Perhaps because the entropy source is changing its properties + rapidly in the beginning of the file, perhaps because the beginning + of the data is a statistical "anomaly". */ + if i < 2000 { + lit_cost += 0.7 - (float64(2000-i) / 2000.0 * 0.35) + } + + cost[i] = float32(lit_cost) + } + } +} + +func estimateBitCostsForLiterals(pos uint, len uint, mask uint, data []byte, cost []float32) { + if isMostlyUTF8(data, pos, mask, uint(len), kMinUTF8Ratio) { + estimateBitCostsForLiteralsUTF8(pos, uint(len), mask, data, cost) + return + } else { + var histogram = [256]uint{0} + var window_half uint = 2000 + var in_window uint = brotli_min_size_t(window_half, uint(len)) + var i uint + /* Bootstrap histogram. */ + for i = 0; i < in_window; i++ { + histogram[data[(pos+i)&mask]]++ + } + + /* Compute bit costs with sliding window. */ + for i = 0; i < len; i++ { + var histo uint + if i >= window_half { + /* Remove a byte in the past. */ + histogram[data[(pos+i-window_half)&mask]]-- + + in_window-- + } + + if i+window_half < len { + /* Add a byte in the future. */ + histogram[data[(pos+i+window_half)&mask]]++ + + in_window++ + } + + histo = histogram[data[(pos+i)&mask]] + if histo == 0 { + histo = 1 + } + { + var lit_cost float64 = fastLog2(in_window) - fastLog2(histo) + lit_cost += 0.029 + if lit_cost < 1.0 { + lit_cost *= 0.5 + lit_cost += 0.5 + } + + cost[i] = float32(lit_cost) + } + } + } +} diff --git a/vendor/github.com/andybalholm/brotli/memory.go b/vendor/github.com/andybalholm/brotli/memory.go new file mode 100644 index 0000000000..a07c7050a0 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/memory.go @@ -0,0 +1,66 @@ +package brotli + +/* Copyright 2016 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* +Dynamically grows array capacity to at least the requested size +T: data type +A: array +C: capacity +R: requested size +*/ +func brotli_ensure_capacity_uint8_t(a *[]byte, c *uint, r uint) { + if *c < r { + var new_size uint = *c + if new_size == 0 { + new_size = r + } + + for new_size < r { + new_size *= 2 + } + + if cap(*a) < int(new_size) { + var new_array []byte = make([]byte, new_size) + if *c != 0 { + copy(new_array, (*a)[:*c]) + } + + *a = new_array + } else { + *a = (*a)[:new_size] + } + + *c = new_size + } +} + +func brotli_ensure_capacity_uint32_t(a *[]uint32, c *uint, r uint) { + var new_array []uint32 + if *c < r { + var new_size uint = *c + if new_size == 0 { + new_size = r + } + + for new_size < r { + new_size *= 2 + } + + if cap(*a) < int(new_size) { + new_array = make([]uint32, new_size) + if *c != 0 { + copy(new_array, (*a)[:*c]) + } + + *a = new_array + } else { + *a = (*a)[:new_size] + } + *c = new_size + } +} diff --git a/vendor/github.com/andybalholm/brotli/metablock.go b/vendor/github.com/andybalholm/brotli/metablock.go new file mode 100644 index 0000000000..3014df8cdf --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/metablock.go @@ -0,0 +1,574 @@ +package brotli + +import ( + "sync" +) + +/* Copyright 2014 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Algorithms for distributing the literals and commands of a metablock between + block types and contexts. */ + +type metaBlockSplit struct { + literal_split blockSplit + command_split blockSplit + distance_split blockSplit + literal_context_map []uint32 + literal_context_map_size uint + distance_context_map []uint32 + distance_context_map_size uint + literal_histograms []histogramLiteral + literal_histograms_size uint + command_histograms []histogramCommand + command_histograms_size uint + distance_histograms []histogramDistance + distance_histograms_size uint +} + +var metaBlockPool sync.Pool + +func getMetaBlockSplit() *metaBlockSplit { + mb, _ := metaBlockPool.Get().(*metaBlockSplit) + + if mb == nil { + mb = &metaBlockSplit{} + } else { + initBlockSplit(&mb.literal_split) + initBlockSplit(&mb.command_split) + initBlockSplit(&mb.distance_split) + mb.literal_context_map = mb.literal_context_map[:0] + mb.literal_context_map_size = 0 + mb.distance_context_map = mb.distance_context_map[:0] + mb.distance_context_map_size = 0 + mb.literal_histograms = mb.literal_histograms[:0] + mb.command_histograms = mb.command_histograms[:0] + mb.distance_histograms = mb.distance_histograms[:0] + } + return mb +} + +func freeMetaBlockSplit(mb *metaBlockSplit) { + metaBlockPool.Put(mb) +} + +func initDistanceParams(params *encoderParams, npostfix uint32, ndirect uint32) { + var dist_params *distanceParams = ¶ms.dist + var alphabet_size uint32 + var max_distance uint32 + + dist_params.distance_postfix_bits = npostfix + dist_params.num_direct_distance_codes = ndirect + + alphabet_size = uint32(distanceAlphabetSize(uint(npostfix), uint(ndirect), maxDistanceBits)) + max_distance = ndirect + (1 << (maxDistanceBits + npostfix + 2)) - (1 << (npostfix + 2)) + + if params.large_window { + var bound = [maxNpostfix + 1]uint32{0, 4, 12, 28} + var postfix uint32 = 1 << npostfix + alphabet_size = uint32(distanceAlphabetSize(uint(npostfix), uint(ndirect), largeMaxDistanceBits)) + + /* The maximum distance is set so that no distance symbol used can encode + a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all + its extra bits set. */ + if ndirect < bound[npostfix] { + max_distance = maxAllowedDistance - (bound[npostfix] - ndirect) + } else if ndirect >= bound[npostfix]+postfix { + max_distance = (3 << 29) - 4 + (ndirect - bound[npostfix]) + } else { + max_distance = maxAllowedDistance + } + } + + dist_params.alphabet_size = alphabet_size + dist_params.max_distance = uint(max_distance) +} + +func recomputeDistancePrefixes(cmds []command, orig_params *distanceParams, new_params *distanceParams) { + if orig_params.distance_postfix_bits == new_params.distance_postfix_bits && orig_params.num_direct_distance_codes == new_params.num_direct_distance_codes { + return + } + + for i := range cmds { + var cmd *command = &cmds[i] + if commandCopyLen(cmd) != 0 && cmd.cmd_prefix_ >= 128 { + prefixEncodeCopyDistance(uint(commandRestoreDistanceCode(cmd, orig_params)), uint(new_params.num_direct_distance_codes), uint(new_params.distance_postfix_bits), &cmd.dist_prefix_, &cmd.dist_extra_) + } + } +} + +func computeDistanceCost(cmds []command, orig_params *distanceParams, new_params *distanceParams, cost *float64) bool { + var equal_params bool = false + var dist_prefix uint16 + var dist_extra uint32 + var extra_bits float64 = 0.0 + var histo histogramDistance + histogramClearDistance(&histo) + + if orig_params.distance_postfix_bits == new_params.distance_postfix_bits && orig_params.num_direct_distance_codes == new_params.num_direct_distance_codes { + equal_params = true + } + + for i := range cmds { + cmd := &cmds[i] + if commandCopyLen(cmd) != 0 && cmd.cmd_prefix_ >= 128 { + if equal_params { + dist_prefix = cmd.dist_prefix_ + } else { + var distance uint32 = commandRestoreDistanceCode(cmd, orig_params) + if distance > uint32(new_params.max_distance) { + return false + } + + prefixEncodeCopyDistance(uint(distance), uint(new_params.num_direct_distance_codes), uint(new_params.distance_postfix_bits), &dist_prefix, &dist_extra) + } + + histogramAddDistance(&histo, uint(dist_prefix)&0x3FF) + extra_bits += float64(dist_prefix >> 10) + } + } + + *cost = populationCostDistance(&histo) + extra_bits + return true +} + +var buildMetaBlock_kMaxNumberOfHistograms uint = 256 + +func buildMetaBlock(ringbuffer []byte, pos uint, mask uint, params *encoderParams, prev_byte byte, prev_byte2 byte, cmds []command, literal_context_mode int, mb *metaBlockSplit) { + var distance_histograms []histogramDistance + var literal_histograms []histogramLiteral + var literal_context_modes []int = nil + var literal_histograms_size uint + var distance_histograms_size uint + var i uint + var literal_context_multiplier uint = 1 + var npostfix uint32 + var ndirect_msb uint32 = 0 + var check_orig bool = true + var best_dist_cost float64 = 1e99 + var orig_params encoderParams = *params + /* Histogram ids need to fit in one byte. */ + + var new_params encoderParams = *params + + for npostfix = 0; npostfix <= maxNpostfix; npostfix++ { + for ; ndirect_msb < 16; ndirect_msb++ { + var ndirect uint32 = ndirect_msb << npostfix + var skip bool + var dist_cost float64 + initDistanceParams(&new_params, npostfix, ndirect) + if npostfix == orig_params.dist.distance_postfix_bits && ndirect == orig_params.dist.num_direct_distance_codes { + check_orig = false + } + + skip = !computeDistanceCost(cmds, &orig_params.dist, &new_params.dist, &dist_cost) + if skip || (dist_cost > best_dist_cost) { + break + } + + best_dist_cost = dist_cost + params.dist = new_params.dist + } + + if ndirect_msb > 0 { + ndirect_msb-- + } + ndirect_msb /= 2 + } + + if check_orig { + var dist_cost float64 + computeDistanceCost(cmds, &orig_params.dist, &orig_params.dist, &dist_cost) + if dist_cost < best_dist_cost { + /* NB: currently unused; uncomment when more param tuning is added. */ + /* best_dist_cost = dist_cost; */ + params.dist = orig_params.dist + } + } + + recomputeDistancePrefixes(cmds, &orig_params.dist, ¶ms.dist) + + splitBlock(cmds, ringbuffer, pos, mask, params, &mb.literal_split, &mb.command_split, &mb.distance_split) + + if !params.disable_literal_context_modeling { + literal_context_multiplier = 1 << literalContextBits + literal_context_modes = make([]int, (mb.literal_split.num_types)) + for i = 0; i < mb.literal_split.num_types; i++ { + literal_context_modes[i] = literal_context_mode + } + } + + literal_histograms_size = mb.literal_split.num_types * literal_context_multiplier + literal_histograms = make([]histogramLiteral, literal_histograms_size) + clearHistogramsLiteral(literal_histograms, literal_histograms_size) + + distance_histograms_size = mb.distance_split.num_types << distanceContextBits + distance_histograms = make([]histogramDistance, distance_histograms_size) + clearHistogramsDistance(distance_histograms, distance_histograms_size) + + mb.command_histograms_size = mb.command_split.num_types + if cap(mb.command_histograms) < int(mb.command_histograms_size) { + mb.command_histograms = make([]histogramCommand, (mb.command_histograms_size)) + } else { + mb.command_histograms = mb.command_histograms[:mb.command_histograms_size] + } + clearHistogramsCommand(mb.command_histograms, mb.command_histograms_size) + + buildHistogramsWithContext(cmds, &mb.literal_split, &mb.command_split, &mb.distance_split, ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes, literal_histograms, mb.command_histograms, distance_histograms) + literal_context_modes = nil + + mb.literal_context_map_size = mb.literal_split.num_types << literalContextBits + if cap(mb.literal_context_map) < int(mb.literal_context_map_size) { + mb.literal_context_map = make([]uint32, (mb.literal_context_map_size)) + } else { + mb.literal_context_map = mb.literal_context_map[:mb.literal_context_map_size] + } + + mb.literal_histograms_size = mb.literal_context_map_size + if cap(mb.literal_histograms) < int(mb.literal_histograms_size) { + mb.literal_histograms = make([]histogramLiteral, (mb.literal_histograms_size)) + } else { + mb.literal_histograms = mb.literal_histograms[:mb.literal_histograms_size] + } + + clusterHistogramsLiteral(literal_histograms, literal_histograms_size, buildMetaBlock_kMaxNumberOfHistograms, mb.literal_histograms, &mb.literal_histograms_size, mb.literal_context_map) + literal_histograms = nil + + if params.disable_literal_context_modeling { + /* Distribute assignment to all contexts. */ + for i = mb.literal_split.num_types; i != 0; { + var j uint = 0 + i-- + for ; j < 1< 0 { + var entropy [maxStaticContexts]float64 + var combined_histo []histogramLiteral = make([]histogramLiteral, (2 * num_contexts)) + var combined_entropy [2 * maxStaticContexts]float64 + var diff = [2]float64{0.0} + /* Try merging the set of histograms for the current block type with the + respective set of histograms for the last and second last block types. + Decide over the split based on the total reduction of entropy across + all contexts. */ + + var i uint + for i = 0; i < num_contexts; i++ { + var curr_histo_ix uint = self.curr_histogram_ix_ + i + var j uint + entropy[i] = bitsEntropy(histograms[curr_histo_ix].data_[:], self.alphabet_size_) + for j = 0; j < 2; j++ { + var jx uint = j*num_contexts + i + var last_histogram_ix uint = self.last_histogram_ix_[j] + i + combined_histo[jx] = histograms[curr_histo_ix] + histogramAddHistogramLiteral(&combined_histo[jx], &histograms[last_histogram_ix]) + combined_entropy[jx] = bitsEntropy(combined_histo[jx].data_[0:], self.alphabet_size_) + diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx] + } + } + + if split.num_types < self.max_block_types_ && diff[0] > self.split_threshold_ && diff[1] > self.split_threshold_ { + /* Create new block. */ + split.lengths[self.num_blocks_] = uint32(self.block_size_) + + split.types[self.num_blocks_] = byte(split.num_types) + self.last_histogram_ix_[1] = self.last_histogram_ix_[0] + self.last_histogram_ix_[0] = split.num_types * num_contexts + for i = 0; i < num_contexts; i++ { + last_entropy[num_contexts+i] = last_entropy[i] + last_entropy[i] = entropy[i] + } + + self.num_blocks_++ + split.num_types++ + self.curr_histogram_ix_ += num_contexts + if self.curr_histogram_ix_ < *self.histograms_size_ { + clearHistogramsLiteral(self.histograms_[self.curr_histogram_ix_:], self.num_contexts_) + } + + self.block_size_ = 0 + self.merge_last_count_ = 0 + self.target_block_size_ = self.min_block_size_ + } else if diff[1] < diff[0]-20.0 { + split.lengths[self.num_blocks_] = uint32(self.block_size_) + split.types[self.num_blocks_] = split.types[self.num_blocks_-2] + /* Combine this block with second last block. */ + + var tmp uint = self.last_histogram_ix_[0] + self.last_histogram_ix_[0] = self.last_histogram_ix_[1] + self.last_histogram_ix_[1] = tmp + for i = 0; i < num_contexts; i++ { + histograms[self.last_histogram_ix_[0]+i] = combined_histo[num_contexts+i] + last_entropy[num_contexts+i] = last_entropy[i] + last_entropy[i] = combined_entropy[num_contexts+i] + histogramClearLiteral(&histograms[self.curr_histogram_ix_+i]) + } + + self.num_blocks_++ + self.block_size_ = 0 + self.merge_last_count_ = 0 + self.target_block_size_ = self.min_block_size_ + } else { + /* Combine this block with last block. */ + split.lengths[self.num_blocks_-1] += uint32(self.block_size_) + + for i = 0; i < num_contexts; i++ { + histograms[self.last_histogram_ix_[0]+i] = combined_histo[i] + last_entropy[i] = combined_entropy[i] + if split.num_types == 1 { + last_entropy[num_contexts+i] = last_entropy[i] + } + + histogramClearLiteral(&histograms[self.curr_histogram_ix_+i]) + } + + self.block_size_ = 0 + self.merge_last_count_++ + if self.merge_last_count_ > 1 { + self.target_block_size_ += self.min_block_size_ + } + } + + combined_histo = nil + } + + if is_final { + *self.histograms_size_ = split.num_types * num_contexts + split.num_blocks = self.num_blocks_ + } +} + +/* Adds the next symbol to the current block type and context. When the + current block reaches the target size, decides on merging the block. */ +func contextBlockSplitterAddSymbol(self *contextBlockSplitter, symbol uint, context uint) { + histogramAddLiteral(&self.histograms_[self.curr_histogram_ix_+context], symbol) + self.block_size_++ + if self.block_size_ == self.target_block_size_ { + contextBlockSplitterFinishBlock(self, false) /* is_final = */ + } +} + +func mapStaticContexts(num_contexts uint, static_context_map []uint32, mb *metaBlockSplit) { + var i uint + mb.literal_context_map_size = mb.literal_split.num_types << literalContextBits + if cap(mb.literal_context_map) < int(mb.literal_context_map_size) { + mb.literal_context_map = make([]uint32, (mb.literal_context_map_size)) + } else { + mb.literal_context_map = mb.literal_context_map[:mb.literal_context_map_size] + } + + for i = 0; i < mb.literal_split.num_types; i++ { + var offset uint32 = uint32(i * num_contexts) + var j uint + for j = 0; j < 1<= 128 { + blockSplitterAddSymbolDistance(&dist_blocks, uint(cmd.dist_prefix_)&0x3FF) + } + } + } + + if num_contexts == 1 { + blockSplitterFinishBlockLiteral(&lit_blocks.plain, true) /* is_final = */ + } else { + contextBlockSplitterFinishBlock(&lit_blocks.ctx, true) /* is_final = */ + } + + blockSplitterFinishBlockCommand(&cmd_blocks, true) /* is_final = */ + blockSplitterFinishBlockDistance(&dist_blocks, true) /* is_final = */ + + if num_contexts > 1 { + mapStaticContexts(num_contexts, static_context_map, mb) + } +} + +func buildMetaBlockGreedy(ringbuffer []byte, pos uint, mask uint, prev_byte byte, prev_byte2 byte, literal_context_lut contextLUT, num_contexts uint, static_context_map []uint32, commands []command, mb *metaBlockSplit) { + if num_contexts == 1 { + buildMetaBlockGreedyInternal(ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_lut, 1, nil, commands, mb) + } else { + buildMetaBlockGreedyInternal(ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_lut, num_contexts, static_context_map, commands, mb) + } +} + +func optimizeHistograms(num_distance_codes uint32, mb *metaBlockSplit) { + var good_for_rle [numCommandSymbols]byte + var i uint + for i = 0; i < mb.literal_histograms_size; i++ { + optimizeHuffmanCountsForRLE(256, mb.literal_histograms[i].data_[:], good_for_rle[:]) + } + + for i = 0; i < mb.command_histograms_size; i++ { + optimizeHuffmanCountsForRLE(numCommandSymbols, mb.command_histograms[i].data_[:], good_for_rle[:]) + } + + for i = 0; i < mb.distance_histograms_size; i++ { + optimizeHuffmanCountsForRLE(uint(num_distance_codes), mb.distance_histograms[i].data_[:], good_for_rle[:]) + } +} diff --git a/vendor/github.com/andybalholm/brotli/metablock_command.go b/vendor/github.com/andybalholm/brotli/metablock_command.go new file mode 100644 index 0000000000..14c7b77135 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/metablock_command.go @@ -0,0 +1,165 @@ +package brotli + +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Greedy block splitter for one block category (literal, command or distance). + */ +type blockSplitterCommand struct { + alphabet_size_ uint + min_block_size_ uint + split_threshold_ float64 + num_blocks_ uint + split_ *blockSplit + histograms_ []histogramCommand + histograms_size_ *uint + target_block_size_ uint + block_size_ uint + curr_histogram_ix_ uint + last_histogram_ix_ [2]uint + last_entropy_ [2]float64 + merge_last_count_ uint +} + +func initBlockSplitterCommand(self *blockSplitterCommand, alphabet_size uint, min_block_size uint, split_threshold float64, num_symbols uint, split *blockSplit, histograms *[]histogramCommand, histograms_size *uint) { + var max_num_blocks uint = num_symbols/min_block_size + 1 + var max_num_types uint = brotli_min_size_t(max_num_blocks, maxNumberOfBlockTypes+1) + /* We have to allocate one more histogram than the maximum number of block + types for the current histogram when the meta-block is too big. */ + self.alphabet_size_ = alphabet_size + + self.min_block_size_ = min_block_size + self.split_threshold_ = split_threshold + self.num_blocks_ = 0 + self.split_ = split + self.histograms_size_ = histograms_size + self.target_block_size_ = min_block_size + self.block_size_ = 0 + self.curr_histogram_ix_ = 0 + self.merge_last_count_ = 0 + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, max_num_blocks) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, max_num_blocks) + self.split_.num_blocks = max_num_blocks + *histograms_size = max_num_types + if histograms == nil || cap(*histograms) < int(*histograms_size) { + *histograms = make([]histogramCommand, (*histograms_size)) + } else { + *histograms = (*histograms)[:*histograms_size] + } + self.histograms_ = *histograms + + /* Clear only current histogram. */ + histogramClearCommand(&self.histograms_[0]) + + self.last_histogram_ix_[1] = 0 + self.last_histogram_ix_[0] = self.last_histogram_ix_[1] +} + +/* Does either of three things: + (1) emits the current block with a new block type; + (2) emits the current block with the type of the second last block; + (3) merges the current block with the last block. */ +func blockSplitterFinishBlockCommand(self *blockSplitterCommand, is_final bool) { + var split *blockSplit = self.split_ + var last_entropy []float64 = self.last_entropy_[:] + var histograms []histogramCommand = self.histograms_ + self.block_size_ = brotli_max_size_t(self.block_size_, self.min_block_size_) + if self.num_blocks_ == 0 { + /* Create first block. */ + split.lengths[0] = uint32(self.block_size_) + + split.types[0] = 0 + last_entropy[0] = bitsEntropy(histograms[0].data_[:], self.alphabet_size_) + last_entropy[1] = last_entropy[0] + self.num_blocks_++ + split.num_types++ + self.curr_histogram_ix_++ + if self.curr_histogram_ix_ < *self.histograms_size_ { + histogramClearCommand(&histograms[self.curr_histogram_ix_]) + } + self.block_size_ = 0 + } else if self.block_size_ > 0 { + var entropy float64 = bitsEntropy(histograms[self.curr_histogram_ix_].data_[:], self.alphabet_size_) + var combined_histo [2]histogramCommand + var combined_entropy [2]float64 + var diff [2]float64 + var j uint + for j = 0; j < 2; j++ { + var last_histogram_ix uint = self.last_histogram_ix_[j] + combined_histo[j] = histograms[self.curr_histogram_ix_] + histogramAddHistogramCommand(&combined_histo[j], &histograms[last_histogram_ix]) + combined_entropy[j] = bitsEntropy(combined_histo[j].data_[0:], self.alphabet_size_) + diff[j] = combined_entropy[j] - entropy - last_entropy[j] + } + + if split.num_types < maxNumberOfBlockTypes && diff[0] > self.split_threshold_ && diff[1] > self.split_threshold_ { + /* Create new block. */ + split.lengths[self.num_blocks_] = uint32(self.block_size_) + + split.types[self.num_blocks_] = byte(split.num_types) + self.last_histogram_ix_[1] = self.last_histogram_ix_[0] + self.last_histogram_ix_[0] = uint(byte(split.num_types)) + last_entropy[1] = last_entropy[0] + last_entropy[0] = entropy + self.num_blocks_++ + split.num_types++ + self.curr_histogram_ix_++ + if self.curr_histogram_ix_ < *self.histograms_size_ { + histogramClearCommand(&histograms[self.curr_histogram_ix_]) + } + self.block_size_ = 0 + self.merge_last_count_ = 0 + self.target_block_size_ = self.min_block_size_ + } else if diff[1] < diff[0]-20.0 { + split.lengths[self.num_blocks_] = uint32(self.block_size_) + split.types[self.num_blocks_] = split.types[self.num_blocks_-2] + /* Combine this block with second last block. */ + + var tmp uint = self.last_histogram_ix_[0] + self.last_histogram_ix_[0] = self.last_histogram_ix_[1] + self.last_histogram_ix_[1] = tmp + histograms[self.last_histogram_ix_[0]] = combined_histo[1] + last_entropy[1] = last_entropy[0] + last_entropy[0] = combined_entropy[1] + self.num_blocks_++ + self.block_size_ = 0 + histogramClearCommand(&histograms[self.curr_histogram_ix_]) + self.merge_last_count_ = 0 + self.target_block_size_ = self.min_block_size_ + } else { + /* Combine this block with last block. */ + split.lengths[self.num_blocks_-1] += uint32(self.block_size_) + + histograms[self.last_histogram_ix_[0]] = combined_histo[0] + last_entropy[0] = combined_entropy[0] + if split.num_types == 1 { + last_entropy[1] = last_entropy[0] + } + + self.block_size_ = 0 + histogramClearCommand(&histograms[self.curr_histogram_ix_]) + self.merge_last_count_++ + if self.merge_last_count_ > 1 { + self.target_block_size_ += self.min_block_size_ + } + } + } + + if is_final { + *self.histograms_size_ = split.num_types + split.num_blocks = self.num_blocks_ + } +} + +/* Adds the next symbol to the current histogram. When the current histogram + reaches the target size, decides on merging the block. */ +func blockSplitterAddSymbolCommand(self *blockSplitterCommand, symbol uint) { + histogramAddCommand(&self.histograms_[self.curr_histogram_ix_], symbol) + self.block_size_++ + if self.block_size_ == self.target_block_size_ { + blockSplitterFinishBlockCommand(self, false) /* is_final = */ + } +} diff --git a/vendor/github.com/andybalholm/brotli/metablock_distance.go b/vendor/github.com/andybalholm/brotli/metablock_distance.go new file mode 100644 index 0000000000..5110a810e9 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/metablock_distance.go @@ -0,0 +1,165 @@ +package brotli + +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Greedy block splitter for one block category (literal, command or distance). + */ +type blockSplitterDistance struct { + alphabet_size_ uint + min_block_size_ uint + split_threshold_ float64 + num_blocks_ uint + split_ *blockSplit + histograms_ []histogramDistance + histograms_size_ *uint + target_block_size_ uint + block_size_ uint + curr_histogram_ix_ uint + last_histogram_ix_ [2]uint + last_entropy_ [2]float64 + merge_last_count_ uint +} + +func initBlockSplitterDistance(self *blockSplitterDistance, alphabet_size uint, min_block_size uint, split_threshold float64, num_symbols uint, split *blockSplit, histograms *[]histogramDistance, histograms_size *uint) { + var max_num_blocks uint = num_symbols/min_block_size + 1 + var max_num_types uint = brotli_min_size_t(max_num_blocks, maxNumberOfBlockTypes+1) + /* We have to allocate one more histogram than the maximum number of block + types for the current histogram when the meta-block is too big. */ + self.alphabet_size_ = alphabet_size + + self.min_block_size_ = min_block_size + self.split_threshold_ = split_threshold + self.num_blocks_ = 0 + self.split_ = split + self.histograms_size_ = histograms_size + self.target_block_size_ = min_block_size + self.block_size_ = 0 + self.curr_histogram_ix_ = 0 + self.merge_last_count_ = 0 + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, max_num_blocks) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, max_num_blocks) + self.split_.num_blocks = max_num_blocks + *histograms_size = max_num_types + if histograms == nil || cap(*histograms) < int(*histograms_size) { + *histograms = make([]histogramDistance, *histograms_size) + } else { + *histograms = (*histograms)[:*histograms_size] + } + self.histograms_ = *histograms + + /* Clear only current histogram. */ + histogramClearDistance(&self.histograms_[0]) + + self.last_histogram_ix_[1] = 0 + self.last_histogram_ix_[0] = self.last_histogram_ix_[1] +} + +/* Does either of three things: + (1) emits the current block with a new block type; + (2) emits the current block with the type of the second last block; + (3) merges the current block with the last block. */ +func blockSplitterFinishBlockDistance(self *blockSplitterDistance, is_final bool) { + var split *blockSplit = self.split_ + var last_entropy []float64 = self.last_entropy_[:] + var histograms []histogramDistance = self.histograms_ + self.block_size_ = brotli_max_size_t(self.block_size_, self.min_block_size_) + if self.num_blocks_ == 0 { + /* Create first block. */ + split.lengths[0] = uint32(self.block_size_) + + split.types[0] = 0 + last_entropy[0] = bitsEntropy(histograms[0].data_[:], self.alphabet_size_) + last_entropy[1] = last_entropy[0] + self.num_blocks_++ + split.num_types++ + self.curr_histogram_ix_++ + if self.curr_histogram_ix_ < *self.histograms_size_ { + histogramClearDistance(&histograms[self.curr_histogram_ix_]) + } + self.block_size_ = 0 + } else if self.block_size_ > 0 { + var entropy float64 = bitsEntropy(histograms[self.curr_histogram_ix_].data_[:], self.alphabet_size_) + var combined_histo [2]histogramDistance + var combined_entropy [2]float64 + var diff [2]float64 + var j uint + for j = 0; j < 2; j++ { + var last_histogram_ix uint = self.last_histogram_ix_[j] + combined_histo[j] = histograms[self.curr_histogram_ix_] + histogramAddHistogramDistance(&combined_histo[j], &histograms[last_histogram_ix]) + combined_entropy[j] = bitsEntropy(combined_histo[j].data_[0:], self.alphabet_size_) + diff[j] = combined_entropy[j] - entropy - last_entropy[j] + } + + if split.num_types < maxNumberOfBlockTypes && diff[0] > self.split_threshold_ && diff[1] > self.split_threshold_ { + /* Create new block. */ + split.lengths[self.num_blocks_] = uint32(self.block_size_) + + split.types[self.num_blocks_] = byte(split.num_types) + self.last_histogram_ix_[1] = self.last_histogram_ix_[0] + self.last_histogram_ix_[0] = uint(byte(split.num_types)) + last_entropy[1] = last_entropy[0] + last_entropy[0] = entropy + self.num_blocks_++ + split.num_types++ + self.curr_histogram_ix_++ + if self.curr_histogram_ix_ < *self.histograms_size_ { + histogramClearDistance(&histograms[self.curr_histogram_ix_]) + } + self.block_size_ = 0 + self.merge_last_count_ = 0 + self.target_block_size_ = self.min_block_size_ + } else if diff[1] < diff[0]-20.0 { + split.lengths[self.num_blocks_] = uint32(self.block_size_) + split.types[self.num_blocks_] = split.types[self.num_blocks_-2] + /* Combine this block with second last block. */ + + var tmp uint = self.last_histogram_ix_[0] + self.last_histogram_ix_[0] = self.last_histogram_ix_[1] + self.last_histogram_ix_[1] = tmp + histograms[self.last_histogram_ix_[0]] = combined_histo[1] + last_entropy[1] = last_entropy[0] + last_entropy[0] = combined_entropy[1] + self.num_blocks_++ + self.block_size_ = 0 + histogramClearDistance(&histograms[self.curr_histogram_ix_]) + self.merge_last_count_ = 0 + self.target_block_size_ = self.min_block_size_ + } else { + /* Combine this block with last block. */ + split.lengths[self.num_blocks_-1] += uint32(self.block_size_) + + histograms[self.last_histogram_ix_[0]] = combined_histo[0] + last_entropy[0] = combined_entropy[0] + if split.num_types == 1 { + last_entropy[1] = last_entropy[0] + } + + self.block_size_ = 0 + histogramClearDistance(&histograms[self.curr_histogram_ix_]) + self.merge_last_count_++ + if self.merge_last_count_ > 1 { + self.target_block_size_ += self.min_block_size_ + } + } + } + + if is_final { + *self.histograms_size_ = split.num_types + split.num_blocks = self.num_blocks_ + } +} + +/* Adds the next symbol to the current histogram. When the current histogram + reaches the target size, decides on merging the block. */ +func blockSplitterAddSymbolDistance(self *blockSplitterDistance, symbol uint) { + histogramAddDistance(&self.histograms_[self.curr_histogram_ix_], symbol) + self.block_size_++ + if self.block_size_ == self.target_block_size_ { + blockSplitterFinishBlockDistance(self, false) /* is_final = */ + } +} diff --git a/vendor/github.com/andybalholm/brotli/metablock_literal.go b/vendor/github.com/andybalholm/brotli/metablock_literal.go new file mode 100644 index 0000000000..307f8da88f --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/metablock_literal.go @@ -0,0 +1,165 @@ +package brotli + +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Greedy block splitter for one block category (literal, command or distance). + */ +type blockSplitterLiteral struct { + alphabet_size_ uint + min_block_size_ uint + split_threshold_ float64 + num_blocks_ uint + split_ *blockSplit + histograms_ []histogramLiteral + histograms_size_ *uint + target_block_size_ uint + block_size_ uint + curr_histogram_ix_ uint + last_histogram_ix_ [2]uint + last_entropy_ [2]float64 + merge_last_count_ uint +} + +func initBlockSplitterLiteral(self *blockSplitterLiteral, alphabet_size uint, min_block_size uint, split_threshold float64, num_symbols uint, split *blockSplit, histograms *[]histogramLiteral, histograms_size *uint) { + var max_num_blocks uint = num_symbols/min_block_size + 1 + var max_num_types uint = brotli_min_size_t(max_num_blocks, maxNumberOfBlockTypes+1) + /* We have to allocate one more histogram than the maximum number of block + types for the current histogram when the meta-block is too big. */ + self.alphabet_size_ = alphabet_size + + self.min_block_size_ = min_block_size + self.split_threshold_ = split_threshold + self.num_blocks_ = 0 + self.split_ = split + self.histograms_size_ = histograms_size + self.target_block_size_ = min_block_size + self.block_size_ = 0 + self.curr_histogram_ix_ = 0 + self.merge_last_count_ = 0 + brotli_ensure_capacity_uint8_t(&split.types, &split.types_alloc_size, max_num_blocks) + brotli_ensure_capacity_uint32_t(&split.lengths, &split.lengths_alloc_size, max_num_blocks) + self.split_.num_blocks = max_num_blocks + *histograms_size = max_num_types + if histograms == nil || cap(*histograms) < int(*histograms_size) { + *histograms = make([]histogramLiteral, *histograms_size) + } else { + *histograms = (*histograms)[:*histograms_size] + } + self.histograms_ = *histograms + + /* Clear only current histogram. */ + histogramClearLiteral(&self.histograms_[0]) + + self.last_histogram_ix_[1] = 0 + self.last_histogram_ix_[0] = self.last_histogram_ix_[1] +} + +/* Does either of three things: + (1) emits the current block with a new block type; + (2) emits the current block with the type of the second last block; + (3) merges the current block with the last block. */ +func blockSplitterFinishBlockLiteral(self *blockSplitterLiteral, is_final bool) { + var split *blockSplit = self.split_ + var last_entropy []float64 = self.last_entropy_[:] + var histograms []histogramLiteral = self.histograms_ + self.block_size_ = brotli_max_size_t(self.block_size_, self.min_block_size_) + if self.num_blocks_ == 0 { + /* Create first block. */ + split.lengths[0] = uint32(self.block_size_) + + split.types[0] = 0 + last_entropy[0] = bitsEntropy(histograms[0].data_[:], self.alphabet_size_) + last_entropy[1] = last_entropy[0] + self.num_blocks_++ + split.num_types++ + self.curr_histogram_ix_++ + if self.curr_histogram_ix_ < *self.histograms_size_ { + histogramClearLiteral(&histograms[self.curr_histogram_ix_]) + } + self.block_size_ = 0 + } else if self.block_size_ > 0 { + var entropy float64 = bitsEntropy(histograms[self.curr_histogram_ix_].data_[:], self.alphabet_size_) + var combined_histo [2]histogramLiteral + var combined_entropy [2]float64 + var diff [2]float64 + var j uint + for j = 0; j < 2; j++ { + var last_histogram_ix uint = self.last_histogram_ix_[j] + combined_histo[j] = histograms[self.curr_histogram_ix_] + histogramAddHistogramLiteral(&combined_histo[j], &histograms[last_histogram_ix]) + combined_entropy[j] = bitsEntropy(combined_histo[j].data_[0:], self.alphabet_size_) + diff[j] = combined_entropy[j] - entropy - last_entropy[j] + } + + if split.num_types < maxNumberOfBlockTypes && diff[0] > self.split_threshold_ && diff[1] > self.split_threshold_ { + /* Create new block. */ + split.lengths[self.num_blocks_] = uint32(self.block_size_) + + split.types[self.num_blocks_] = byte(split.num_types) + self.last_histogram_ix_[1] = self.last_histogram_ix_[0] + self.last_histogram_ix_[0] = uint(byte(split.num_types)) + last_entropy[1] = last_entropy[0] + last_entropy[0] = entropy + self.num_blocks_++ + split.num_types++ + self.curr_histogram_ix_++ + if self.curr_histogram_ix_ < *self.histograms_size_ { + histogramClearLiteral(&histograms[self.curr_histogram_ix_]) + } + self.block_size_ = 0 + self.merge_last_count_ = 0 + self.target_block_size_ = self.min_block_size_ + } else if diff[1] < diff[0]-20.0 { + split.lengths[self.num_blocks_] = uint32(self.block_size_) + split.types[self.num_blocks_] = split.types[self.num_blocks_-2] + /* Combine this block with second last block. */ + + var tmp uint = self.last_histogram_ix_[0] + self.last_histogram_ix_[0] = self.last_histogram_ix_[1] + self.last_histogram_ix_[1] = tmp + histograms[self.last_histogram_ix_[0]] = combined_histo[1] + last_entropy[1] = last_entropy[0] + last_entropy[0] = combined_entropy[1] + self.num_blocks_++ + self.block_size_ = 0 + histogramClearLiteral(&histograms[self.curr_histogram_ix_]) + self.merge_last_count_ = 0 + self.target_block_size_ = self.min_block_size_ + } else { + /* Combine this block with last block. */ + split.lengths[self.num_blocks_-1] += uint32(self.block_size_) + + histograms[self.last_histogram_ix_[0]] = combined_histo[0] + last_entropy[0] = combined_entropy[0] + if split.num_types == 1 { + last_entropy[1] = last_entropy[0] + } + + self.block_size_ = 0 + histogramClearLiteral(&histograms[self.curr_histogram_ix_]) + self.merge_last_count_++ + if self.merge_last_count_ > 1 { + self.target_block_size_ += self.min_block_size_ + } + } + } + + if is_final { + *self.histograms_size_ = split.num_types + split.num_blocks = self.num_blocks_ + } +} + +/* Adds the next symbol to the current histogram. When the current histogram + reaches the target size, decides on merging the block. */ +func blockSplitterAddSymbolLiteral(self *blockSplitterLiteral, symbol uint) { + histogramAddLiteral(&self.histograms_[self.curr_histogram_ix_], symbol) + self.block_size_++ + if self.block_size_ == self.target_block_size_ { + blockSplitterFinishBlockLiteral(self, false) /* is_final = */ + } +} diff --git a/vendor/github.com/andybalholm/brotli/params.go b/vendor/github.com/andybalholm/brotli/params.go new file mode 100644 index 0000000000..0a4c687521 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/params.go @@ -0,0 +1,37 @@ +package brotli + +/* Copyright 2017 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Parameters for the Brotli encoder with chosen quality levels. */ +type hasherParams struct { + type_ int + bucket_bits int + block_bits int + hash_len int + num_last_distances_to_check int +} + +type distanceParams struct { + distance_postfix_bits uint32 + num_direct_distance_codes uint32 + alphabet_size uint32 + max_distance uint +} + +/* Encoding parameters */ +type encoderParams struct { + mode int + quality int + lgwin uint + lgblock int + size_hint uint + disable_literal_context_modeling bool + large_window bool + hasher hasherParams + dist distanceParams + dictionary encoderDictionary +} diff --git a/vendor/github.com/andybalholm/brotli/platform.go b/vendor/github.com/andybalholm/brotli/platform.go new file mode 100644 index 0000000000..4ebfb1528b --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/platform.go @@ -0,0 +1,103 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +func brotli_min_double(a float64, b float64) float64 { + if a < b { + return a + } else { + return b + } +} + +func brotli_max_double(a float64, b float64) float64 { + if a > b { + return a + } else { + return b + } +} + +func brotli_min_float(a float32, b float32) float32 { + if a < b { + return a + } else { + return b + } +} + +func brotli_max_float(a float32, b float32) float32 { + if a > b { + return a + } else { + return b + } +} + +func brotli_min_int(a int, b int) int { + if a < b { + return a + } else { + return b + } +} + +func brotli_max_int(a int, b int) int { + if a > b { + return a + } else { + return b + } +} + +func brotli_min_size_t(a uint, b uint) uint { + if a < b { + return a + } else { + return b + } +} + +func brotli_max_size_t(a uint, b uint) uint { + if a > b { + return a + } else { + return b + } +} + +func brotli_min_uint32_t(a uint32, b uint32) uint32 { + if a < b { + return a + } else { + return b + } +} + +func brotli_max_uint32_t(a uint32, b uint32) uint32 { + if a > b { + return a + } else { + return b + } +} + +func brotli_min_uint8_t(a byte, b byte) byte { + if a < b { + return a + } else { + return b + } +} + +func brotli_max_uint8_t(a byte, b byte) byte { + if a > b { + return a + } else { + return b + } +} diff --git a/vendor/github.com/andybalholm/brotli/prefix.go b/vendor/github.com/andybalholm/brotli/prefix.go new file mode 100644 index 0000000000..484df0d61e --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/prefix.go @@ -0,0 +1,30 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Functions for encoding of integers into prefix codes the amount of extra + bits, and the actual values of the extra bits. */ + +/* Here distance_code is an intermediate code, i.e. one of the special codes or + the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */ +func prefixEncodeCopyDistance(distance_code uint, num_direct_codes uint, postfix_bits uint, code *uint16, extra_bits *uint32) { + if distance_code < numDistanceShortCodes+num_direct_codes { + *code = uint16(distance_code) + *extra_bits = 0 + return + } else { + var dist uint = (uint(1) << (postfix_bits + 2)) + (distance_code - numDistanceShortCodes - num_direct_codes) + var bucket uint = uint(log2FloorNonZero(dist) - 1) + var postfix_mask uint = (1 << postfix_bits) - 1 + var postfix uint = dist & postfix_mask + var prefix uint = (dist >> bucket) & 1 + var offset uint = (2 + prefix) << bucket + var nbits uint = bucket - postfix_bits + *code = uint16(nbits<<10 | (numDistanceShortCodes + num_direct_codes + ((2*(nbits-1) + prefix) << postfix_bits) + postfix)) + *extra_bits = uint32((dist - offset) >> postfix_bits) + } +} diff --git a/vendor/github.com/andybalholm/brotli/prefix_dec.go b/vendor/github.com/andybalholm/brotli/prefix_dec.go new file mode 100644 index 0000000000..183f0d53fe --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/prefix_dec.go @@ -0,0 +1,723 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +type cmdLutElement struct { + insert_len_extra_bits byte + copy_len_extra_bits byte + distance_code int8 + context byte + insert_len_offset uint16 + copy_len_offset uint16 +} + +var kCmdLut = [numCommandSymbols]cmdLutElement{ + cmdLutElement{0x00, 0x00, 0, 0x00, 0x0000, 0x0002}, + cmdLutElement{0x00, 0x00, 0, 0x01, 0x0000, 0x0003}, + cmdLutElement{0x00, 0x00, 0, 0x02, 0x0000, 0x0004}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0000, 0x0005}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0000, 0x0006}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0000, 0x0007}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0000, 0x0008}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0000, 0x0009}, + cmdLutElement{0x00, 0x00, 0, 0x00, 0x0001, 0x0002}, + cmdLutElement{0x00, 0x00, 0, 0x01, 0x0001, 0x0003}, + cmdLutElement{0x00, 0x00, 0, 0x02, 0x0001, 0x0004}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0001, 0x0005}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0001, 0x0006}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0001, 0x0007}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0001, 0x0008}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0001, 0x0009}, + cmdLutElement{0x00, 0x00, 0, 0x00, 0x0002, 0x0002}, + cmdLutElement{0x00, 0x00, 0, 0x01, 0x0002, 0x0003}, + cmdLutElement{0x00, 0x00, 0, 0x02, 0x0002, 0x0004}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0002, 0x0005}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0002, 0x0006}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0002, 0x0007}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0002, 0x0008}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0002, 0x0009}, + cmdLutElement{0x00, 0x00, 0, 0x00, 0x0003, 0x0002}, + cmdLutElement{0x00, 0x00, 0, 0x01, 0x0003, 0x0003}, + cmdLutElement{0x00, 0x00, 0, 0x02, 0x0003, 0x0004}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0003, 0x0005}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0003, 0x0006}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0003, 0x0007}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0003, 0x0008}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0003, 0x0009}, + cmdLutElement{0x00, 0x00, 0, 0x00, 0x0004, 0x0002}, + cmdLutElement{0x00, 0x00, 0, 0x01, 0x0004, 0x0003}, + cmdLutElement{0x00, 0x00, 0, 0x02, 0x0004, 0x0004}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0004, 0x0005}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0004, 0x0006}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0004, 0x0007}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0004, 0x0008}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0004, 0x0009}, + cmdLutElement{0x00, 0x00, 0, 0x00, 0x0005, 0x0002}, + cmdLutElement{0x00, 0x00, 0, 0x01, 0x0005, 0x0003}, + cmdLutElement{0x00, 0x00, 0, 0x02, 0x0005, 0x0004}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0005, 0x0005}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0005, 0x0006}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0005, 0x0007}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0005, 0x0008}, + cmdLutElement{0x00, 0x00, 0, 0x03, 0x0005, 0x0009}, + cmdLutElement{0x01, 0x00, 0, 0x00, 0x0006, 0x0002}, + cmdLutElement{0x01, 0x00, 0, 0x01, 0x0006, 0x0003}, + cmdLutElement{0x01, 0x00, 0, 0x02, 0x0006, 0x0004}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0006, 0x0005}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0006, 0x0006}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0006, 0x0007}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0006, 0x0008}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0006, 0x0009}, + cmdLutElement{0x01, 0x00, 0, 0x00, 0x0008, 0x0002}, + cmdLutElement{0x01, 0x00, 0, 0x01, 0x0008, 0x0003}, + cmdLutElement{0x01, 0x00, 0, 0x02, 0x0008, 0x0004}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0008, 0x0005}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0008, 0x0006}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0008, 0x0007}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0008, 0x0008}, + cmdLutElement{0x01, 0x00, 0, 0x03, 0x0008, 0x0009}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0000, 0x000a}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0000, 0x000c}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0000, 0x000e}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0000, 0x0012}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0000, 0x0016}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0000, 0x001e}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0000, 0x0026}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0000, 0x0036}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0001, 0x000a}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0001, 0x000c}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0001, 0x000e}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0001, 0x0012}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0001, 0x0016}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0001, 0x001e}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0001, 0x0026}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0001, 0x0036}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0002, 0x000a}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0002, 0x000c}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0002, 0x000e}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0002, 0x0012}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0002, 0x0016}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0002, 0x001e}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0002, 0x0026}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0002, 0x0036}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0003, 0x000a}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0003, 0x000c}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0003, 0x000e}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0003, 0x0012}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0003, 0x0016}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0003, 0x001e}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0003, 0x0026}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0003, 0x0036}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0004, 0x000a}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0004, 0x000c}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0004, 0x000e}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0004, 0x0012}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0004, 0x0016}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0004, 0x001e}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0004, 0x0026}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0004, 0x0036}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0005, 0x000a}, + cmdLutElement{0x00, 0x01, 0, 0x03, 0x0005, 0x000c}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0005, 0x000e}, + cmdLutElement{0x00, 0x02, 0, 0x03, 0x0005, 0x0012}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0005, 0x0016}, + cmdLutElement{0x00, 0x03, 0, 0x03, 0x0005, 0x001e}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0005, 0x0026}, + cmdLutElement{0x00, 0x04, 0, 0x03, 0x0005, 0x0036}, + cmdLutElement{0x01, 0x01, 0, 0x03, 0x0006, 0x000a}, + cmdLutElement{0x01, 0x01, 0, 0x03, 0x0006, 0x000c}, + cmdLutElement{0x01, 0x02, 0, 0x03, 0x0006, 0x000e}, + cmdLutElement{0x01, 0x02, 0, 0x03, 0x0006, 0x0012}, + cmdLutElement{0x01, 0x03, 0, 0x03, 0x0006, 0x0016}, + cmdLutElement{0x01, 0x03, 0, 0x03, 0x0006, 0x001e}, + cmdLutElement{0x01, 0x04, 0, 0x03, 0x0006, 0x0026}, + cmdLutElement{0x01, 0x04, 0, 0x03, 0x0006, 0x0036}, + cmdLutElement{0x01, 0x01, 0, 0x03, 0x0008, 0x000a}, + cmdLutElement{0x01, 0x01, 0, 0x03, 0x0008, 0x000c}, + cmdLutElement{0x01, 0x02, 0, 0x03, 0x0008, 0x000e}, + cmdLutElement{0x01, 0x02, 0, 0x03, 0x0008, 0x0012}, + cmdLutElement{0x01, 0x03, 0, 0x03, 0x0008, 0x0016}, + cmdLutElement{0x01, 0x03, 0, 0x03, 0x0008, 0x001e}, + cmdLutElement{0x01, 0x04, 0, 0x03, 0x0008, 0x0026}, + cmdLutElement{0x01, 0x04, 0, 0x03, 0x0008, 0x0036}, + cmdLutElement{0x00, 0x00, -1, 0x00, 0x0000, 0x0002}, + cmdLutElement{0x00, 0x00, -1, 0x01, 0x0000, 0x0003}, + cmdLutElement{0x00, 0x00, -1, 0x02, 0x0000, 0x0004}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0000, 0x0005}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0000, 0x0006}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0000, 0x0007}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0000, 0x0008}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0000, 0x0009}, + cmdLutElement{0x00, 0x00, -1, 0x00, 0x0001, 0x0002}, + cmdLutElement{0x00, 0x00, -1, 0x01, 0x0001, 0x0003}, + cmdLutElement{0x00, 0x00, -1, 0x02, 0x0001, 0x0004}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0001, 0x0005}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0001, 0x0006}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0001, 0x0007}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0001, 0x0008}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0001, 0x0009}, + cmdLutElement{0x00, 0x00, -1, 0x00, 0x0002, 0x0002}, + cmdLutElement{0x00, 0x00, -1, 0x01, 0x0002, 0x0003}, + cmdLutElement{0x00, 0x00, -1, 0x02, 0x0002, 0x0004}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0002, 0x0005}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0002, 0x0006}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0002, 0x0007}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0002, 0x0008}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0002, 0x0009}, + cmdLutElement{0x00, 0x00, -1, 0x00, 0x0003, 0x0002}, + cmdLutElement{0x00, 0x00, -1, 0x01, 0x0003, 0x0003}, + cmdLutElement{0x00, 0x00, -1, 0x02, 0x0003, 0x0004}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0003, 0x0005}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0003, 0x0006}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0003, 0x0007}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0003, 0x0008}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0003, 0x0009}, + cmdLutElement{0x00, 0x00, -1, 0x00, 0x0004, 0x0002}, + cmdLutElement{0x00, 0x00, -1, 0x01, 0x0004, 0x0003}, + cmdLutElement{0x00, 0x00, -1, 0x02, 0x0004, 0x0004}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0004, 0x0005}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0004, 0x0006}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0004, 0x0007}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0004, 0x0008}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0004, 0x0009}, + cmdLutElement{0x00, 0x00, -1, 0x00, 0x0005, 0x0002}, + cmdLutElement{0x00, 0x00, -1, 0x01, 0x0005, 0x0003}, + cmdLutElement{0x00, 0x00, -1, 0x02, 0x0005, 0x0004}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0005, 0x0005}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0005, 0x0006}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0005, 0x0007}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0005, 0x0008}, + cmdLutElement{0x00, 0x00, -1, 0x03, 0x0005, 0x0009}, + cmdLutElement{0x01, 0x00, -1, 0x00, 0x0006, 0x0002}, + cmdLutElement{0x01, 0x00, -1, 0x01, 0x0006, 0x0003}, + cmdLutElement{0x01, 0x00, -1, 0x02, 0x0006, 0x0004}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0006, 0x0005}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0006, 0x0006}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0006, 0x0007}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0006, 0x0008}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0006, 0x0009}, + cmdLutElement{0x01, 0x00, -1, 0x00, 0x0008, 0x0002}, + cmdLutElement{0x01, 0x00, -1, 0x01, 0x0008, 0x0003}, + cmdLutElement{0x01, 0x00, -1, 0x02, 0x0008, 0x0004}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0008, 0x0005}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0008, 0x0006}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0008, 0x0007}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0008, 0x0008}, + cmdLutElement{0x01, 0x00, -1, 0x03, 0x0008, 0x0009}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0000, 0x000a}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0000, 0x000c}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0000, 0x000e}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0000, 0x0012}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0000, 0x0016}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0000, 0x001e}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0000, 0x0026}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0000, 0x0036}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0001, 0x000a}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0001, 0x000c}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0001, 0x000e}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0001, 0x0012}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0001, 0x0016}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0001, 0x001e}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0001, 0x0026}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0001, 0x0036}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0002, 0x000a}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0002, 0x000c}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0002, 0x000e}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0002, 0x0012}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0002, 0x0016}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0002, 0x001e}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0002, 0x0026}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0002, 0x0036}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0003, 0x000a}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0003, 0x000c}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0003, 0x000e}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0003, 0x0012}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0003, 0x0016}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0003, 0x001e}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0003, 0x0026}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0003, 0x0036}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0004, 0x000a}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0004, 0x000c}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0004, 0x000e}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0004, 0x0012}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0004, 0x0016}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0004, 0x001e}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0004, 0x0026}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0004, 0x0036}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0005, 0x000a}, + cmdLutElement{0x00, 0x01, -1, 0x03, 0x0005, 0x000c}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0005, 0x000e}, + cmdLutElement{0x00, 0x02, -1, 0x03, 0x0005, 0x0012}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0005, 0x0016}, + cmdLutElement{0x00, 0x03, -1, 0x03, 0x0005, 0x001e}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0005, 0x0026}, + cmdLutElement{0x00, 0x04, -1, 0x03, 0x0005, 0x0036}, + cmdLutElement{0x01, 0x01, -1, 0x03, 0x0006, 0x000a}, + cmdLutElement{0x01, 0x01, -1, 0x03, 0x0006, 0x000c}, + cmdLutElement{0x01, 0x02, -1, 0x03, 0x0006, 0x000e}, + cmdLutElement{0x01, 0x02, -1, 0x03, 0x0006, 0x0012}, + cmdLutElement{0x01, 0x03, -1, 0x03, 0x0006, 0x0016}, + cmdLutElement{0x01, 0x03, -1, 0x03, 0x0006, 0x001e}, + cmdLutElement{0x01, 0x04, -1, 0x03, 0x0006, 0x0026}, + cmdLutElement{0x01, 0x04, -1, 0x03, 0x0006, 0x0036}, + cmdLutElement{0x01, 0x01, -1, 0x03, 0x0008, 0x000a}, + cmdLutElement{0x01, 0x01, -1, 0x03, 0x0008, 0x000c}, + cmdLutElement{0x01, 0x02, -1, 0x03, 0x0008, 0x000e}, + cmdLutElement{0x01, 0x02, -1, 0x03, 0x0008, 0x0012}, + cmdLutElement{0x01, 0x03, -1, 0x03, 0x0008, 0x0016}, + cmdLutElement{0x01, 0x03, -1, 0x03, 0x0008, 0x001e}, + cmdLutElement{0x01, 0x04, -1, 0x03, 0x0008, 0x0026}, + cmdLutElement{0x01, 0x04, -1, 0x03, 0x0008, 0x0036}, + cmdLutElement{0x02, 0x00, -1, 0x00, 0x000a, 0x0002}, + cmdLutElement{0x02, 0x00, -1, 0x01, 0x000a, 0x0003}, + cmdLutElement{0x02, 0x00, -1, 0x02, 0x000a, 0x0004}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000a, 0x0005}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000a, 0x0006}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000a, 0x0007}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000a, 0x0008}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000a, 0x0009}, + cmdLutElement{0x02, 0x00, -1, 0x00, 0x000e, 0x0002}, + cmdLutElement{0x02, 0x00, -1, 0x01, 0x000e, 0x0003}, + cmdLutElement{0x02, 0x00, -1, 0x02, 0x000e, 0x0004}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000e, 0x0005}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000e, 0x0006}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000e, 0x0007}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000e, 0x0008}, + cmdLutElement{0x02, 0x00, -1, 0x03, 0x000e, 0x0009}, + cmdLutElement{0x03, 0x00, -1, 0x00, 0x0012, 0x0002}, + cmdLutElement{0x03, 0x00, -1, 0x01, 0x0012, 0x0003}, + cmdLutElement{0x03, 0x00, -1, 0x02, 0x0012, 0x0004}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x0012, 0x0005}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x0012, 0x0006}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x0012, 0x0007}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x0012, 0x0008}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x0012, 0x0009}, + cmdLutElement{0x03, 0x00, -1, 0x00, 0x001a, 0x0002}, + cmdLutElement{0x03, 0x00, -1, 0x01, 0x001a, 0x0003}, + cmdLutElement{0x03, 0x00, -1, 0x02, 0x001a, 0x0004}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x001a, 0x0005}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x001a, 0x0006}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x001a, 0x0007}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x001a, 0x0008}, + cmdLutElement{0x03, 0x00, -1, 0x03, 0x001a, 0x0009}, + cmdLutElement{0x04, 0x00, -1, 0x00, 0x0022, 0x0002}, + cmdLutElement{0x04, 0x00, -1, 0x01, 0x0022, 0x0003}, + cmdLutElement{0x04, 0x00, -1, 0x02, 0x0022, 0x0004}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0022, 0x0005}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0022, 0x0006}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0022, 0x0007}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0022, 0x0008}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0022, 0x0009}, + cmdLutElement{0x04, 0x00, -1, 0x00, 0x0032, 0x0002}, + cmdLutElement{0x04, 0x00, -1, 0x01, 0x0032, 0x0003}, + cmdLutElement{0x04, 0x00, -1, 0x02, 0x0032, 0x0004}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0032, 0x0005}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0032, 0x0006}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0032, 0x0007}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0032, 0x0008}, + cmdLutElement{0x04, 0x00, -1, 0x03, 0x0032, 0x0009}, + cmdLutElement{0x05, 0x00, -1, 0x00, 0x0042, 0x0002}, + cmdLutElement{0x05, 0x00, -1, 0x01, 0x0042, 0x0003}, + cmdLutElement{0x05, 0x00, -1, 0x02, 0x0042, 0x0004}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0042, 0x0005}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0042, 0x0006}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0042, 0x0007}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0042, 0x0008}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0042, 0x0009}, + cmdLutElement{0x05, 0x00, -1, 0x00, 0x0062, 0x0002}, + cmdLutElement{0x05, 0x00, -1, 0x01, 0x0062, 0x0003}, + cmdLutElement{0x05, 0x00, -1, 0x02, 0x0062, 0x0004}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0062, 0x0005}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0062, 0x0006}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0062, 0x0007}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0062, 0x0008}, + cmdLutElement{0x05, 0x00, -1, 0x03, 0x0062, 0x0009}, + cmdLutElement{0x02, 0x01, -1, 0x03, 0x000a, 0x000a}, + cmdLutElement{0x02, 0x01, -1, 0x03, 0x000a, 0x000c}, + cmdLutElement{0x02, 0x02, -1, 0x03, 0x000a, 0x000e}, + cmdLutElement{0x02, 0x02, -1, 0x03, 0x000a, 0x0012}, + cmdLutElement{0x02, 0x03, -1, 0x03, 0x000a, 0x0016}, + cmdLutElement{0x02, 0x03, -1, 0x03, 0x000a, 0x001e}, + cmdLutElement{0x02, 0x04, -1, 0x03, 0x000a, 0x0026}, + cmdLutElement{0x02, 0x04, -1, 0x03, 0x000a, 0x0036}, + cmdLutElement{0x02, 0x01, -1, 0x03, 0x000e, 0x000a}, + cmdLutElement{0x02, 0x01, -1, 0x03, 0x000e, 0x000c}, + cmdLutElement{0x02, 0x02, -1, 0x03, 0x000e, 0x000e}, + cmdLutElement{0x02, 0x02, -1, 0x03, 0x000e, 0x0012}, + cmdLutElement{0x02, 0x03, -1, 0x03, 0x000e, 0x0016}, + cmdLutElement{0x02, 0x03, -1, 0x03, 0x000e, 0x001e}, + cmdLutElement{0x02, 0x04, -1, 0x03, 0x000e, 0x0026}, + cmdLutElement{0x02, 0x04, -1, 0x03, 0x000e, 0x0036}, + cmdLutElement{0x03, 0x01, -1, 0x03, 0x0012, 0x000a}, + cmdLutElement{0x03, 0x01, -1, 0x03, 0x0012, 0x000c}, + cmdLutElement{0x03, 0x02, -1, 0x03, 0x0012, 0x000e}, + cmdLutElement{0x03, 0x02, -1, 0x03, 0x0012, 0x0012}, + cmdLutElement{0x03, 0x03, -1, 0x03, 0x0012, 0x0016}, + cmdLutElement{0x03, 0x03, -1, 0x03, 0x0012, 0x001e}, + cmdLutElement{0x03, 0x04, -1, 0x03, 0x0012, 0x0026}, + cmdLutElement{0x03, 0x04, -1, 0x03, 0x0012, 0x0036}, + cmdLutElement{0x03, 0x01, -1, 0x03, 0x001a, 0x000a}, + cmdLutElement{0x03, 0x01, -1, 0x03, 0x001a, 0x000c}, + cmdLutElement{0x03, 0x02, -1, 0x03, 0x001a, 0x000e}, + cmdLutElement{0x03, 0x02, -1, 0x03, 0x001a, 0x0012}, + cmdLutElement{0x03, 0x03, -1, 0x03, 0x001a, 0x0016}, + cmdLutElement{0x03, 0x03, -1, 0x03, 0x001a, 0x001e}, + cmdLutElement{0x03, 0x04, -1, 0x03, 0x001a, 0x0026}, + cmdLutElement{0x03, 0x04, -1, 0x03, 0x001a, 0x0036}, + cmdLutElement{0x04, 0x01, -1, 0x03, 0x0022, 0x000a}, + cmdLutElement{0x04, 0x01, -1, 0x03, 0x0022, 0x000c}, + cmdLutElement{0x04, 0x02, -1, 0x03, 0x0022, 0x000e}, + cmdLutElement{0x04, 0x02, -1, 0x03, 0x0022, 0x0012}, + cmdLutElement{0x04, 0x03, -1, 0x03, 0x0022, 0x0016}, + cmdLutElement{0x04, 0x03, -1, 0x03, 0x0022, 0x001e}, + cmdLutElement{0x04, 0x04, -1, 0x03, 0x0022, 0x0026}, + cmdLutElement{0x04, 0x04, -1, 0x03, 0x0022, 0x0036}, + cmdLutElement{0x04, 0x01, -1, 0x03, 0x0032, 0x000a}, + cmdLutElement{0x04, 0x01, -1, 0x03, 0x0032, 0x000c}, + cmdLutElement{0x04, 0x02, -1, 0x03, 0x0032, 0x000e}, + cmdLutElement{0x04, 0x02, -1, 0x03, 0x0032, 0x0012}, + cmdLutElement{0x04, 0x03, -1, 0x03, 0x0032, 0x0016}, + cmdLutElement{0x04, 0x03, -1, 0x03, 0x0032, 0x001e}, + cmdLutElement{0x04, 0x04, -1, 0x03, 0x0032, 0x0026}, + cmdLutElement{0x04, 0x04, -1, 0x03, 0x0032, 0x0036}, + cmdLutElement{0x05, 0x01, -1, 0x03, 0x0042, 0x000a}, + cmdLutElement{0x05, 0x01, -1, 0x03, 0x0042, 0x000c}, + cmdLutElement{0x05, 0x02, -1, 0x03, 0x0042, 0x000e}, + cmdLutElement{0x05, 0x02, -1, 0x03, 0x0042, 0x0012}, + cmdLutElement{0x05, 0x03, -1, 0x03, 0x0042, 0x0016}, + cmdLutElement{0x05, 0x03, -1, 0x03, 0x0042, 0x001e}, + cmdLutElement{0x05, 0x04, -1, 0x03, 0x0042, 0x0026}, + cmdLutElement{0x05, 0x04, -1, 0x03, 0x0042, 0x0036}, + cmdLutElement{0x05, 0x01, -1, 0x03, 0x0062, 0x000a}, + cmdLutElement{0x05, 0x01, -1, 0x03, 0x0062, 0x000c}, + cmdLutElement{0x05, 0x02, -1, 0x03, 0x0062, 0x000e}, + cmdLutElement{0x05, 0x02, -1, 0x03, 0x0062, 0x0012}, + cmdLutElement{0x05, 0x03, -1, 0x03, 0x0062, 0x0016}, + cmdLutElement{0x05, 0x03, -1, 0x03, 0x0062, 0x001e}, + cmdLutElement{0x05, 0x04, -1, 0x03, 0x0062, 0x0026}, + cmdLutElement{0x05, 0x04, -1, 0x03, 0x0062, 0x0036}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0000, 0x0046}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0000, 0x0066}, + cmdLutElement{0x00, 0x06, -1, 0x03, 0x0000, 0x0086}, + cmdLutElement{0x00, 0x07, -1, 0x03, 0x0000, 0x00c6}, + cmdLutElement{0x00, 0x08, -1, 0x03, 0x0000, 0x0146}, + cmdLutElement{0x00, 0x09, -1, 0x03, 0x0000, 0x0246}, + cmdLutElement{0x00, 0x0a, -1, 0x03, 0x0000, 0x0446}, + cmdLutElement{0x00, 0x18, -1, 0x03, 0x0000, 0x0846}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0001, 0x0046}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0001, 0x0066}, + cmdLutElement{0x00, 0x06, -1, 0x03, 0x0001, 0x0086}, + cmdLutElement{0x00, 0x07, -1, 0x03, 0x0001, 0x00c6}, + cmdLutElement{0x00, 0x08, -1, 0x03, 0x0001, 0x0146}, + cmdLutElement{0x00, 0x09, -1, 0x03, 0x0001, 0x0246}, + cmdLutElement{0x00, 0x0a, -1, 0x03, 0x0001, 0x0446}, + cmdLutElement{0x00, 0x18, -1, 0x03, 0x0001, 0x0846}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0002, 0x0046}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0002, 0x0066}, + cmdLutElement{0x00, 0x06, -1, 0x03, 0x0002, 0x0086}, + cmdLutElement{0x00, 0x07, -1, 0x03, 0x0002, 0x00c6}, + cmdLutElement{0x00, 0x08, -1, 0x03, 0x0002, 0x0146}, + cmdLutElement{0x00, 0x09, -1, 0x03, 0x0002, 0x0246}, + cmdLutElement{0x00, 0x0a, -1, 0x03, 0x0002, 0x0446}, + cmdLutElement{0x00, 0x18, -1, 0x03, 0x0002, 0x0846}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0003, 0x0046}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0003, 0x0066}, + cmdLutElement{0x00, 0x06, -1, 0x03, 0x0003, 0x0086}, + cmdLutElement{0x00, 0x07, -1, 0x03, 0x0003, 0x00c6}, + cmdLutElement{0x00, 0x08, -1, 0x03, 0x0003, 0x0146}, + cmdLutElement{0x00, 0x09, -1, 0x03, 0x0003, 0x0246}, + cmdLutElement{0x00, 0x0a, -1, 0x03, 0x0003, 0x0446}, + cmdLutElement{0x00, 0x18, -1, 0x03, 0x0003, 0x0846}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0004, 0x0046}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0004, 0x0066}, + cmdLutElement{0x00, 0x06, -1, 0x03, 0x0004, 0x0086}, + cmdLutElement{0x00, 0x07, -1, 0x03, 0x0004, 0x00c6}, + cmdLutElement{0x00, 0x08, -1, 0x03, 0x0004, 0x0146}, + cmdLutElement{0x00, 0x09, -1, 0x03, 0x0004, 0x0246}, + cmdLutElement{0x00, 0x0a, -1, 0x03, 0x0004, 0x0446}, + cmdLutElement{0x00, 0x18, -1, 0x03, 0x0004, 0x0846}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0005, 0x0046}, + cmdLutElement{0x00, 0x05, -1, 0x03, 0x0005, 0x0066}, + cmdLutElement{0x00, 0x06, -1, 0x03, 0x0005, 0x0086}, + cmdLutElement{0x00, 0x07, -1, 0x03, 0x0005, 0x00c6}, + cmdLutElement{0x00, 0x08, -1, 0x03, 0x0005, 0x0146}, + cmdLutElement{0x00, 0x09, -1, 0x03, 0x0005, 0x0246}, + cmdLutElement{0x00, 0x0a, -1, 0x03, 0x0005, 0x0446}, + cmdLutElement{0x00, 0x18, -1, 0x03, 0x0005, 0x0846}, + cmdLutElement{0x01, 0x05, -1, 0x03, 0x0006, 0x0046}, + cmdLutElement{0x01, 0x05, -1, 0x03, 0x0006, 0x0066}, + cmdLutElement{0x01, 0x06, -1, 0x03, 0x0006, 0x0086}, + cmdLutElement{0x01, 0x07, -1, 0x03, 0x0006, 0x00c6}, + cmdLutElement{0x01, 0x08, -1, 0x03, 0x0006, 0x0146}, + cmdLutElement{0x01, 0x09, -1, 0x03, 0x0006, 0x0246}, + cmdLutElement{0x01, 0x0a, -1, 0x03, 0x0006, 0x0446}, + cmdLutElement{0x01, 0x18, -1, 0x03, 0x0006, 0x0846}, + cmdLutElement{0x01, 0x05, -1, 0x03, 0x0008, 0x0046}, + cmdLutElement{0x01, 0x05, -1, 0x03, 0x0008, 0x0066}, + cmdLutElement{0x01, 0x06, -1, 0x03, 0x0008, 0x0086}, + cmdLutElement{0x01, 0x07, -1, 0x03, 0x0008, 0x00c6}, + cmdLutElement{0x01, 0x08, -1, 0x03, 0x0008, 0x0146}, + cmdLutElement{0x01, 0x09, -1, 0x03, 0x0008, 0x0246}, + cmdLutElement{0x01, 0x0a, -1, 0x03, 0x0008, 0x0446}, + cmdLutElement{0x01, 0x18, -1, 0x03, 0x0008, 0x0846}, + cmdLutElement{0x06, 0x00, -1, 0x00, 0x0082, 0x0002}, + cmdLutElement{0x06, 0x00, -1, 0x01, 0x0082, 0x0003}, + cmdLutElement{0x06, 0x00, -1, 0x02, 0x0082, 0x0004}, + cmdLutElement{0x06, 0x00, -1, 0x03, 0x0082, 0x0005}, + cmdLutElement{0x06, 0x00, -1, 0x03, 0x0082, 0x0006}, + cmdLutElement{0x06, 0x00, -1, 0x03, 0x0082, 0x0007}, + cmdLutElement{0x06, 0x00, -1, 0x03, 0x0082, 0x0008}, + cmdLutElement{0x06, 0x00, -1, 0x03, 0x0082, 0x0009}, + cmdLutElement{0x07, 0x00, -1, 0x00, 0x00c2, 0x0002}, + cmdLutElement{0x07, 0x00, -1, 0x01, 0x00c2, 0x0003}, + cmdLutElement{0x07, 0x00, -1, 0x02, 0x00c2, 0x0004}, + cmdLutElement{0x07, 0x00, -1, 0x03, 0x00c2, 0x0005}, + cmdLutElement{0x07, 0x00, -1, 0x03, 0x00c2, 0x0006}, + cmdLutElement{0x07, 0x00, -1, 0x03, 0x00c2, 0x0007}, + cmdLutElement{0x07, 0x00, -1, 0x03, 0x00c2, 0x0008}, + cmdLutElement{0x07, 0x00, -1, 0x03, 0x00c2, 0x0009}, + cmdLutElement{0x08, 0x00, -1, 0x00, 0x0142, 0x0002}, + cmdLutElement{0x08, 0x00, -1, 0x01, 0x0142, 0x0003}, + cmdLutElement{0x08, 0x00, -1, 0x02, 0x0142, 0x0004}, + cmdLutElement{0x08, 0x00, -1, 0x03, 0x0142, 0x0005}, + cmdLutElement{0x08, 0x00, -1, 0x03, 0x0142, 0x0006}, + cmdLutElement{0x08, 0x00, -1, 0x03, 0x0142, 0x0007}, + cmdLutElement{0x08, 0x00, -1, 0x03, 0x0142, 0x0008}, + cmdLutElement{0x08, 0x00, -1, 0x03, 0x0142, 0x0009}, + cmdLutElement{0x09, 0x00, -1, 0x00, 0x0242, 0x0002}, + cmdLutElement{0x09, 0x00, -1, 0x01, 0x0242, 0x0003}, + cmdLutElement{0x09, 0x00, -1, 0x02, 0x0242, 0x0004}, + cmdLutElement{0x09, 0x00, -1, 0x03, 0x0242, 0x0005}, + cmdLutElement{0x09, 0x00, -1, 0x03, 0x0242, 0x0006}, + cmdLutElement{0x09, 0x00, -1, 0x03, 0x0242, 0x0007}, + cmdLutElement{0x09, 0x00, -1, 0x03, 0x0242, 0x0008}, + cmdLutElement{0x09, 0x00, -1, 0x03, 0x0242, 0x0009}, + cmdLutElement{0x0a, 0x00, -1, 0x00, 0x0442, 0x0002}, + cmdLutElement{0x0a, 0x00, -1, 0x01, 0x0442, 0x0003}, + cmdLutElement{0x0a, 0x00, -1, 0x02, 0x0442, 0x0004}, + cmdLutElement{0x0a, 0x00, -1, 0x03, 0x0442, 0x0005}, + cmdLutElement{0x0a, 0x00, -1, 0x03, 0x0442, 0x0006}, + cmdLutElement{0x0a, 0x00, -1, 0x03, 0x0442, 0x0007}, + cmdLutElement{0x0a, 0x00, -1, 0x03, 0x0442, 0x0008}, + cmdLutElement{0x0a, 0x00, -1, 0x03, 0x0442, 0x0009}, + cmdLutElement{0x0c, 0x00, -1, 0x00, 0x0842, 0x0002}, + cmdLutElement{0x0c, 0x00, -1, 0x01, 0x0842, 0x0003}, + cmdLutElement{0x0c, 0x00, -1, 0x02, 0x0842, 0x0004}, + cmdLutElement{0x0c, 0x00, -1, 0x03, 0x0842, 0x0005}, + cmdLutElement{0x0c, 0x00, -1, 0x03, 0x0842, 0x0006}, + cmdLutElement{0x0c, 0x00, -1, 0x03, 0x0842, 0x0007}, + cmdLutElement{0x0c, 0x00, -1, 0x03, 0x0842, 0x0008}, + cmdLutElement{0x0c, 0x00, -1, 0x03, 0x0842, 0x0009}, + cmdLutElement{0x0e, 0x00, -1, 0x00, 0x1842, 0x0002}, + cmdLutElement{0x0e, 0x00, -1, 0x01, 0x1842, 0x0003}, + cmdLutElement{0x0e, 0x00, -1, 0x02, 0x1842, 0x0004}, + cmdLutElement{0x0e, 0x00, -1, 0x03, 0x1842, 0x0005}, + cmdLutElement{0x0e, 0x00, -1, 0x03, 0x1842, 0x0006}, + cmdLutElement{0x0e, 0x00, -1, 0x03, 0x1842, 0x0007}, + cmdLutElement{0x0e, 0x00, -1, 0x03, 0x1842, 0x0008}, + cmdLutElement{0x0e, 0x00, -1, 0x03, 0x1842, 0x0009}, + cmdLutElement{0x18, 0x00, -1, 0x00, 0x5842, 0x0002}, + cmdLutElement{0x18, 0x00, -1, 0x01, 0x5842, 0x0003}, + cmdLutElement{0x18, 0x00, -1, 0x02, 0x5842, 0x0004}, + cmdLutElement{0x18, 0x00, -1, 0x03, 0x5842, 0x0005}, + cmdLutElement{0x18, 0x00, -1, 0x03, 0x5842, 0x0006}, + cmdLutElement{0x18, 0x00, -1, 0x03, 0x5842, 0x0007}, + cmdLutElement{0x18, 0x00, -1, 0x03, 0x5842, 0x0008}, + cmdLutElement{0x18, 0x00, -1, 0x03, 0x5842, 0x0009}, + cmdLutElement{0x02, 0x05, -1, 0x03, 0x000a, 0x0046}, + cmdLutElement{0x02, 0x05, -1, 0x03, 0x000a, 0x0066}, + cmdLutElement{0x02, 0x06, -1, 0x03, 0x000a, 0x0086}, + cmdLutElement{0x02, 0x07, -1, 0x03, 0x000a, 0x00c6}, + cmdLutElement{0x02, 0x08, -1, 0x03, 0x000a, 0x0146}, + cmdLutElement{0x02, 0x09, -1, 0x03, 0x000a, 0x0246}, + cmdLutElement{0x02, 0x0a, -1, 0x03, 0x000a, 0x0446}, + cmdLutElement{0x02, 0x18, -1, 0x03, 0x000a, 0x0846}, + cmdLutElement{0x02, 0x05, -1, 0x03, 0x000e, 0x0046}, + cmdLutElement{0x02, 0x05, -1, 0x03, 0x000e, 0x0066}, + cmdLutElement{0x02, 0x06, -1, 0x03, 0x000e, 0x0086}, + cmdLutElement{0x02, 0x07, -1, 0x03, 0x000e, 0x00c6}, + cmdLutElement{0x02, 0x08, -1, 0x03, 0x000e, 0x0146}, + cmdLutElement{0x02, 0x09, -1, 0x03, 0x000e, 0x0246}, + cmdLutElement{0x02, 0x0a, -1, 0x03, 0x000e, 0x0446}, + cmdLutElement{0x02, 0x18, -1, 0x03, 0x000e, 0x0846}, + cmdLutElement{0x03, 0x05, -1, 0x03, 0x0012, 0x0046}, + cmdLutElement{0x03, 0x05, -1, 0x03, 0x0012, 0x0066}, + cmdLutElement{0x03, 0x06, -1, 0x03, 0x0012, 0x0086}, + cmdLutElement{0x03, 0x07, -1, 0x03, 0x0012, 0x00c6}, + cmdLutElement{0x03, 0x08, -1, 0x03, 0x0012, 0x0146}, + cmdLutElement{0x03, 0x09, -1, 0x03, 0x0012, 0x0246}, + cmdLutElement{0x03, 0x0a, -1, 0x03, 0x0012, 0x0446}, + cmdLutElement{0x03, 0x18, -1, 0x03, 0x0012, 0x0846}, + cmdLutElement{0x03, 0x05, -1, 0x03, 0x001a, 0x0046}, + cmdLutElement{0x03, 0x05, -1, 0x03, 0x001a, 0x0066}, + cmdLutElement{0x03, 0x06, -1, 0x03, 0x001a, 0x0086}, + cmdLutElement{0x03, 0x07, -1, 0x03, 0x001a, 0x00c6}, + cmdLutElement{0x03, 0x08, -1, 0x03, 0x001a, 0x0146}, + cmdLutElement{0x03, 0x09, -1, 0x03, 0x001a, 0x0246}, + cmdLutElement{0x03, 0x0a, -1, 0x03, 0x001a, 0x0446}, + cmdLutElement{0x03, 0x18, -1, 0x03, 0x001a, 0x0846}, + cmdLutElement{0x04, 0x05, -1, 0x03, 0x0022, 0x0046}, + cmdLutElement{0x04, 0x05, -1, 0x03, 0x0022, 0x0066}, + cmdLutElement{0x04, 0x06, -1, 0x03, 0x0022, 0x0086}, + cmdLutElement{0x04, 0x07, -1, 0x03, 0x0022, 0x00c6}, + cmdLutElement{0x04, 0x08, -1, 0x03, 0x0022, 0x0146}, + cmdLutElement{0x04, 0x09, -1, 0x03, 0x0022, 0x0246}, + cmdLutElement{0x04, 0x0a, -1, 0x03, 0x0022, 0x0446}, + cmdLutElement{0x04, 0x18, -1, 0x03, 0x0022, 0x0846}, + cmdLutElement{0x04, 0x05, -1, 0x03, 0x0032, 0x0046}, + cmdLutElement{0x04, 0x05, -1, 0x03, 0x0032, 0x0066}, + cmdLutElement{0x04, 0x06, -1, 0x03, 0x0032, 0x0086}, + cmdLutElement{0x04, 0x07, -1, 0x03, 0x0032, 0x00c6}, + cmdLutElement{0x04, 0x08, -1, 0x03, 0x0032, 0x0146}, + cmdLutElement{0x04, 0x09, -1, 0x03, 0x0032, 0x0246}, + cmdLutElement{0x04, 0x0a, -1, 0x03, 0x0032, 0x0446}, + cmdLutElement{0x04, 0x18, -1, 0x03, 0x0032, 0x0846}, + cmdLutElement{0x05, 0x05, -1, 0x03, 0x0042, 0x0046}, + cmdLutElement{0x05, 0x05, -1, 0x03, 0x0042, 0x0066}, + cmdLutElement{0x05, 0x06, -1, 0x03, 0x0042, 0x0086}, + cmdLutElement{0x05, 0x07, -1, 0x03, 0x0042, 0x00c6}, + cmdLutElement{0x05, 0x08, -1, 0x03, 0x0042, 0x0146}, + cmdLutElement{0x05, 0x09, -1, 0x03, 0x0042, 0x0246}, + cmdLutElement{0x05, 0x0a, -1, 0x03, 0x0042, 0x0446}, + cmdLutElement{0x05, 0x18, -1, 0x03, 0x0042, 0x0846}, + cmdLutElement{0x05, 0x05, -1, 0x03, 0x0062, 0x0046}, + cmdLutElement{0x05, 0x05, -1, 0x03, 0x0062, 0x0066}, + cmdLutElement{0x05, 0x06, -1, 0x03, 0x0062, 0x0086}, + cmdLutElement{0x05, 0x07, -1, 0x03, 0x0062, 0x00c6}, + cmdLutElement{0x05, 0x08, -1, 0x03, 0x0062, 0x0146}, + cmdLutElement{0x05, 0x09, -1, 0x03, 0x0062, 0x0246}, + cmdLutElement{0x05, 0x0a, -1, 0x03, 0x0062, 0x0446}, + cmdLutElement{0x05, 0x18, -1, 0x03, 0x0062, 0x0846}, + cmdLutElement{0x06, 0x01, -1, 0x03, 0x0082, 0x000a}, + cmdLutElement{0x06, 0x01, -1, 0x03, 0x0082, 0x000c}, + cmdLutElement{0x06, 0x02, -1, 0x03, 0x0082, 0x000e}, + cmdLutElement{0x06, 0x02, -1, 0x03, 0x0082, 0x0012}, + cmdLutElement{0x06, 0x03, -1, 0x03, 0x0082, 0x0016}, + cmdLutElement{0x06, 0x03, -1, 0x03, 0x0082, 0x001e}, + cmdLutElement{0x06, 0x04, -1, 0x03, 0x0082, 0x0026}, + cmdLutElement{0x06, 0x04, -1, 0x03, 0x0082, 0x0036}, + cmdLutElement{0x07, 0x01, -1, 0x03, 0x00c2, 0x000a}, + cmdLutElement{0x07, 0x01, -1, 0x03, 0x00c2, 0x000c}, + cmdLutElement{0x07, 0x02, -1, 0x03, 0x00c2, 0x000e}, + cmdLutElement{0x07, 0x02, -1, 0x03, 0x00c2, 0x0012}, + cmdLutElement{0x07, 0x03, -1, 0x03, 0x00c2, 0x0016}, + cmdLutElement{0x07, 0x03, -1, 0x03, 0x00c2, 0x001e}, + cmdLutElement{0x07, 0x04, -1, 0x03, 0x00c2, 0x0026}, + cmdLutElement{0x07, 0x04, -1, 0x03, 0x00c2, 0x0036}, + cmdLutElement{0x08, 0x01, -1, 0x03, 0x0142, 0x000a}, + cmdLutElement{0x08, 0x01, -1, 0x03, 0x0142, 0x000c}, + cmdLutElement{0x08, 0x02, -1, 0x03, 0x0142, 0x000e}, + cmdLutElement{0x08, 0x02, -1, 0x03, 0x0142, 0x0012}, + cmdLutElement{0x08, 0x03, -1, 0x03, 0x0142, 0x0016}, + cmdLutElement{0x08, 0x03, -1, 0x03, 0x0142, 0x001e}, + cmdLutElement{0x08, 0x04, -1, 0x03, 0x0142, 0x0026}, + cmdLutElement{0x08, 0x04, -1, 0x03, 0x0142, 0x0036}, + cmdLutElement{0x09, 0x01, -1, 0x03, 0x0242, 0x000a}, + cmdLutElement{0x09, 0x01, -1, 0x03, 0x0242, 0x000c}, + cmdLutElement{0x09, 0x02, -1, 0x03, 0x0242, 0x000e}, + cmdLutElement{0x09, 0x02, -1, 0x03, 0x0242, 0x0012}, + cmdLutElement{0x09, 0x03, -1, 0x03, 0x0242, 0x0016}, + cmdLutElement{0x09, 0x03, -1, 0x03, 0x0242, 0x001e}, + cmdLutElement{0x09, 0x04, -1, 0x03, 0x0242, 0x0026}, + cmdLutElement{0x09, 0x04, -1, 0x03, 0x0242, 0x0036}, + cmdLutElement{0x0a, 0x01, -1, 0x03, 0x0442, 0x000a}, + cmdLutElement{0x0a, 0x01, -1, 0x03, 0x0442, 0x000c}, + cmdLutElement{0x0a, 0x02, -1, 0x03, 0x0442, 0x000e}, + cmdLutElement{0x0a, 0x02, -1, 0x03, 0x0442, 0x0012}, + cmdLutElement{0x0a, 0x03, -1, 0x03, 0x0442, 0x0016}, + cmdLutElement{0x0a, 0x03, -1, 0x03, 0x0442, 0x001e}, + cmdLutElement{0x0a, 0x04, -1, 0x03, 0x0442, 0x0026}, + cmdLutElement{0x0a, 0x04, -1, 0x03, 0x0442, 0x0036}, + cmdLutElement{0x0c, 0x01, -1, 0x03, 0x0842, 0x000a}, + cmdLutElement{0x0c, 0x01, -1, 0x03, 0x0842, 0x000c}, + cmdLutElement{0x0c, 0x02, -1, 0x03, 0x0842, 0x000e}, + cmdLutElement{0x0c, 0x02, -1, 0x03, 0x0842, 0x0012}, + cmdLutElement{0x0c, 0x03, -1, 0x03, 0x0842, 0x0016}, + cmdLutElement{0x0c, 0x03, -1, 0x03, 0x0842, 0x001e}, + cmdLutElement{0x0c, 0x04, -1, 0x03, 0x0842, 0x0026}, + cmdLutElement{0x0c, 0x04, -1, 0x03, 0x0842, 0x0036}, + cmdLutElement{0x0e, 0x01, -1, 0x03, 0x1842, 0x000a}, + cmdLutElement{0x0e, 0x01, -1, 0x03, 0x1842, 0x000c}, + cmdLutElement{0x0e, 0x02, -1, 0x03, 0x1842, 0x000e}, + cmdLutElement{0x0e, 0x02, -1, 0x03, 0x1842, 0x0012}, + cmdLutElement{0x0e, 0x03, -1, 0x03, 0x1842, 0x0016}, + cmdLutElement{0x0e, 0x03, -1, 0x03, 0x1842, 0x001e}, + cmdLutElement{0x0e, 0x04, -1, 0x03, 0x1842, 0x0026}, + cmdLutElement{0x0e, 0x04, -1, 0x03, 0x1842, 0x0036}, + cmdLutElement{0x18, 0x01, -1, 0x03, 0x5842, 0x000a}, + cmdLutElement{0x18, 0x01, -1, 0x03, 0x5842, 0x000c}, + cmdLutElement{0x18, 0x02, -1, 0x03, 0x5842, 0x000e}, + cmdLutElement{0x18, 0x02, -1, 0x03, 0x5842, 0x0012}, + cmdLutElement{0x18, 0x03, -1, 0x03, 0x5842, 0x0016}, + cmdLutElement{0x18, 0x03, -1, 0x03, 0x5842, 0x001e}, + cmdLutElement{0x18, 0x04, -1, 0x03, 0x5842, 0x0026}, + cmdLutElement{0x18, 0x04, -1, 0x03, 0x5842, 0x0036}, + cmdLutElement{0x06, 0x05, -1, 0x03, 0x0082, 0x0046}, + cmdLutElement{0x06, 0x05, -1, 0x03, 0x0082, 0x0066}, + cmdLutElement{0x06, 0x06, -1, 0x03, 0x0082, 0x0086}, + cmdLutElement{0x06, 0x07, -1, 0x03, 0x0082, 0x00c6}, + cmdLutElement{0x06, 0x08, -1, 0x03, 0x0082, 0x0146}, + cmdLutElement{0x06, 0x09, -1, 0x03, 0x0082, 0x0246}, + cmdLutElement{0x06, 0x0a, -1, 0x03, 0x0082, 0x0446}, + cmdLutElement{0x06, 0x18, -1, 0x03, 0x0082, 0x0846}, + cmdLutElement{0x07, 0x05, -1, 0x03, 0x00c2, 0x0046}, + cmdLutElement{0x07, 0x05, -1, 0x03, 0x00c2, 0x0066}, + cmdLutElement{0x07, 0x06, -1, 0x03, 0x00c2, 0x0086}, + cmdLutElement{0x07, 0x07, -1, 0x03, 0x00c2, 0x00c6}, + cmdLutElement{0x07, 0x08, -1, 0x03, 0x00c2, 0x0146}, + cmdLutElement{0x07, 0x09, -1, 0x03, 0x00c2, 0x0246}, + cmdLutElement{0x07, 0x0a, -1, 0x03, 0x00c2, 0x0446}, + cmdLutElement{0x07, 0x18, -1, 0x03, 0x00c2, 0x0846}, + cmdLutElement{0x08, 0x05, -1, 0x03, 0x0142, 0x0046}, + cmdLutElement{0x08, 0x05, -1, 0x03, 0x0142, 0x0066}, + cmdLutElement{0x08, 0x06, -1, 0x03, 0x0142, 0x0086}, + cmdLutElement{0x08, 0x07, -1, 0x03, 0x0142, 0x00c6}, + cmdLutElement{0x08, 0x08, -1, 0x03, 0x0142, 0x0146}, + cmdLutElement{0x08, 0x09, -1, 0x03, 0x0142, 0x0246}, + cmdLutElement{0x08, 0x0a, -1, 0x03, 0x0142, 0x0446}, + cmdLutElement{0x08, 0x18, -1, 0x03, 0x0142, 0x0846}, + cmdLutElement{0x09, 0x05, -1, 0x03, 0x0242, 0x0046}, + cmdLutElement{0x09, 0x05, -1, 0x03, 0x0242, 0x0066}, + cmdLutElement{0x09, 0x06, -1, 0x03, 0x0242, 0x0086}, + cmdLutElement{0x09, 0x07, -1, 0x03, 0x0242, 0x00c6}, + cmdLutElement{0x09, 0x08, -1, 0x03, 0x0242, 0x0146}, + cmdLutElement{0x09, 0x09, -1, 0x03, 0x0242, 0x0246}, + cmdLutElement{0x09, 0x0a, -1, 0x03, 0x0242, 0x0446}, + cmdLutElement{0x09, 0x18, -1, 0x03, 0x0242, 0x0846}, + cmdLutElement{0x0a, 0x05, -1, 0x03, 0x0442, 0x0046}, + cmdLutElement{0x0a, 0x05, -1, 0x03, 0x0442, 0x0066}, + cmdLutElement{0x0a, 0x06, -1, 0x03, 0x0442, 0x0086}, + cmdLutElement{0x0a, 0x07, -1, 0x03, 0x0442, 0x00c6}, + cmdLutElement{0x0a, 0x08, -1, 0x03, 0x0442, 0x0146}, + cmdLutElement{0x0a, 0x09, -1, 0x03, 0x0442, 0x0246}, + cmdLutElement{0x0a, 0x0a, -1, 0x03, 0x0442, 0x0446}, + cmdLutElement{0x0a, 0x18, -1, 0x03, 0x0442, 0x0846}, + cmdLutElement{0x0c, 0x05, -1, 0x03, 0x0842, 0x0046}, + cmdLutElement{0x0c, 0x05, -1, 0x03, 0x0842, 0x0066}, + cmdLutElement{0x0c, 0x06, -1, 0x03, 0x0842, 0x0086}, + cmdLutElement{0x0c, 0x07, -1, 0x03, 0x0842, 0x00c6}, + cmdLutElement{0x0c, 0x08, -1, 0x03, 0x0842, 0x0146}, + cmdLutElement{0x0c, 0x09, -1, 0x03, 0x0842, 0x0246}, + cmdLutElement{0x0c, 0x0a, -1, 0x03, 0x0842, 0x0446}, + cmdLutElement{0x0c, 0x18, -1, 0x03, 0x0842, 0x0846}, + cmdLutElement{0x0e, 0x05, -1, 0x03, 0x1842, 0x0046}, + cmdLutElement{0x0e, 0x05, -1, 0x03, 0x1842, 0x0066}, + cmdLutElement{0x0e, 0x06, -1, 0x03, 0x1842, 0x0086}, + cmdLutElement{0x0e, 0x07, -1, 0x03, 0x1842, 0x00c6}, + cmdLutElement{0x0e, 0x08, -1, 0x03, 0x1842, 0x0146}, + cmdLutElement{0x0e, 0x09, -1, 0x03, 0x1842, 0x0246}, + cmdLutElement{0x0e, 0x0a, -1, 0x03, 0x1842, 0x0446}, + cmdLutElement{0x0e, 0x18, -1, 0x03, 0x1842, 0x0846}, + cmdLutElement{0x18, 0x05, -1, 0x03, 0x5842, 0x0046}, + cmdLutElement{0x18, 0x05, -1, 0x03, 0x5842, 0x0066}, + cmdLutElement{0x18, 0x06, -1, 0x03, 0x5842, 0x0086}, + cmdLutElement{0x18, 0x07, -1, 0x03, 0x5842, 0x00c6}, + cmdLutElement{0x18, 0x08, -1, 0x03, 0x5842, 0x0146}, + cmdLutElement{0x18, 0x09, -1, 0x03, 0x5842, 0x0246}, + cmdLutElement{0x18, 0x0a, -1, 0x03, 0x5842, 0x0446}, + cmdLutElement{0x18, 0x18, -1, 0x03, 0x5842, 0x0846}, +} diff --git a/vendor/github.com/andybalholm/brotli/quality.go b/vendor/github.com/andybalholm/brotli/quality.go new file mode 100644 index 0000000000..49709a3823 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/quality.go @@ -0,0 +1,196 @@ +package brotli + +const fastOnePassCompressionQuality = 0 + +const fastTwoPassCompressionQuality = 1 + +const zopflificationQuality = 10 + +const hqZopflificationQuality = 11 + +const maxQualityForStaticEntropyCodes = 2 + +const minQualityForBlockSplit = 4 + +const minQualityForNonzeroDistanceParams = 4 + +const minQualityForOptimizeHistograms = 4 + +const minQualityForExtensiveReferenceSearch = 5 + +const minQualityForContextModeling = 5 + +const minQualityForHqContextModeling = 7 + +const minQualityForHqBlockSplitting = 10 + +/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting, + so we buffer at most this much literals and commands. */ +const maxNumDelayedSymbols = 0x2FFF + +/* Returns hash-table size for quality levels 0 and 1. */ +func maxHashTableSize(quality int) uint { + if quality == fastOnePassCompressionQuality { + return 1 << 15 + } else { + return 1 << 17 + } +} + +/* The maximum length for which the zopflification uses distinct distances. */ +const maxZopfliLenQuality10 = 150 + +const maxZopfliLenQuality11 = 325 + +/* Do not thoroughly search when a long copy is found. */ +const longCopyQuickStep = 16384 + +func maxZopfliLen(params *encoderParams) uint { + if params.quality <= 10 { + return maxZopfliLenQuality10 + } else { + return maxZopfliLenQuality11 + } +} + +/* Number of best candidates to evaluate to expand Zopfli chain. */ +func maxZopfliCandidates(params *encoderParams) uint { + if params.quality <= 10 { + return 1 + } else { + return 5 + } +} + +func sanitizeParams(params *encoderParams) { + params.quality = brotli_min_int(maxQuality, brotli_max_int(minQuality, params.quality)) + if params.quality <= maxQualityForStaticEntropyCodes { + params.large_window = false + } + + if params.lgwin < minWindowBits { + params.lgwin = minWindowBits + } else { + var max_lgwin int + if params.large_window { + max_lgwin = largeMaxWindowBits + } else { + max_lgwin = maxWindowBits + } + if params.lgwin > uint(max_lgwin) { + params.lgwin = uint(max_lgwin) + } + } +} + +/* Returns optimized lg_block value. */ +func computeLgBlock(params *encoderParams) int { + var lgblock int = params.lgblock + if params.quality == fastOnePassCompressionQuality || params.quality == fastTwoPassCompressionQuality { + lgblock = int(params.lgwin) + } else if params.quality < minQualityForBlockSplit { + lgblock = 14 + } else if lgblock == 0 { + lgblock = 16 + if params.quality >= 9 && params.lgwin > uint(lgblock) { + lgblock = brotli_min_int(18, int(params.lgwin)) + } + } else { + lgblock = brotli_min_int(maxInputBlockBits, brotli_max_int(minInputBlockBits, lgblock)) + } + + return lgblock +} + +/* Returns log2 of the size of main ring buffer area. + Allocate at least lgwin + 1 bits for the ring buffer so that the newly + added block fits there completely and we still get lgwin bits and at least + read_block_size_bits + 1 bits because the copy tail length needs to be + smaller than ring-buffer size. */ +func computeRbBits(params *encoderParams) int { + return 1 + brotli_max_int(int(params.lgwin), params.lgblock) +} + +func maxMetablockSize(params *encoderParams) uint { + var bits int = brotli_min_int(computeRbBits(params), maxInputBlockBits) + return uint(1) << uint(bits) +} + +/* When searching for backward references and have not seen matches for a long + time, we can skip some match lookups. Unsuccessful match lookups are very + expensive and this kind of a heuristic speeds up compression quite a lot. + At first 8 byte strides are taken and every second byte is put to hasher. + After 4x more literals stride by 16 bytes, every put 4-th byte to hasher. + Applied only to qualities 2 to 9. */ +func literalSpreeLengthForSparseSearch(params *encoderParams) uint { + if params.quality < 9 { + return 64 + } else { + return 512 + } +} + +func chooseHasher(params *encoderParams, hparams *hasherParams) { + if params.quality > 9 { + hparams.type_ = 10 + } else if params.quality == 4 && params.size_hint >= 1<<20 { + hparams.type_ = 54 + } else if params.quality < 5 { + hparams.type_ = params.quality + } else if params.lgwin <= 16 { + if params.quality < 7 { + hparams.type_ = 40 + } else if params.quality < 9 { + hparams.type_ = 41 + } else { + hparams.type_ = 42 + } + } else if params.size_hint >= 1<<20 && params.lgwin >= 19 { + hparams.type_ = 6 + hparams.block_bits = params.quality - 1 + hparams.bucket_bits = 15 + hparams.hash_len = 5 + if params.quality < 7 { + hparams.num_last_distances_to_check = 4 + } else if params.quality < 9 { + hparams.num_last_distances_to_check = 10 + } else { + hparams.num_last_distances_to_check = 16 + } + } else { + hparams.type_ = 5 + hparams.block_bits = params.quality - 1 + if params.quality < 7 { + hparams.bucket_bits = 14 + } else { + hparams.bucket_bits = 15 + } + if params.quality < 7 { + hparams.num_last_distances_to_check = 4 + } else if params.quality < 9 { + hparams.num_last_distances_to_check = 10 + } else { + hparams.num_last_distances_to_check = 16 + } + } + + if params.lgwin > 24 { + /* Different hashers for large window brotli: not for qualities <= 2, + these are too fast for large window. Not for qualities >= 10: their + hasher already works well with large window. So the changes are: + H3 --> H35: for quality 3. + H54 --> H55: for quality 4 with size hint > 1MB + H6 --> H65: for qualities 5, 6, 7, 8, 9. */ + if hparams.type_ == 3 { + hparams.type_ = 35 + } + + if hparams.type_ == 54 { + hparams.type_ = 55 + } + + if hparams.type_ == 6 { + hparams.type_ = 65 + } + } +} diff --git a/vendor/github.com/andybalholm/brotli/reader.go b/vendor/github.com/andybalholm/brotli/reader.go new file mode 100644 index 0000000000..cdc67645a8 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/reader.go @@ -0,0 +1,102 @@ +package brotli + +import ( + "errors" + "io" +) + +type decodeError int + +func (err decodeError) Error() string { + return "brotli: " + string(decoderErrorString(int(err))) +} + +var errExcessiveInput = errors.New("brotli: excessive input") +var errInvalidState = errors.New("brotli: invalid state") + +// readBufSize is a "good" buffer size that avoids excessive round-trips +// between C and Go but doesn't waste too much memory on buffering. +// It is arbitrarily chosen to be equal to the constant used in io.Copy. +const readBufSize = 32 * 1024 + +// NewReader creates a new Reader reading the given reader. +func NewReader(src io.Reader) *Reader { + r := new(Reader) + r.Reset(src) + return r +} + +// Reset discards the Reader's state and makes it equivalent to the result of +// its original state from NewReader, but writing to src instead. +// This permits reusing a Reader rather than allocating a new one. +// Error is always nil +func (r *Reader) Reset(src io.Reader) error { + decoderStateInit(r) + r.src = src + if r.buf == nil { + r.buf = make([]byte, readBufSize) + } + return nil +} + +func (r *Reader) Read(p []byte) (n int, err error) { + if !decoderHasMoreOutput(r) && len(r.in) == 0 { + m, readErr := r.src.Read(r.buf) + if m == 0 { + // If readErr is `nil`, we just proxy underlying stream behavior. + return 0, readErr + } + r.in = r.buf[:m] + } + + if len(p) == 0 { + return 0, nil + } + + for { + var written uint + in_len := uint(len(r.in)) + out_len := uint(len(p)) + in_remaining := in_len + out_remaining := out_len + result := decoderDecompressStream(r, &in_remaining, &r.in, &out_remaining, &p) + written = out_len - out_remaining + n = int(written) + + switch result { + case decoderResultSuccess: + if len(r.in) > 0 { + return n, errExcessiveInput + } + return n, nil + case decoderResultError: + return n, decodeError(decoderGetErrorCode(r)) + case decoderResultNeedsMoreOutput: + if n == 0 { + return 0, io.ErrShortBuffer + } + return n, nil + case decoderNeedsMoreInput: + } + + if len(r.in) != 0 { + return 0, errInvalidState + } + + // Calling r.src.Read may block. Don't block if we have data to return. + if n > 0 { + return n, nil + } + + // Top off the buffer. + encN, err := r.src.Read(r.buf) + if encN == 0 { + // Not enough data to complete decoding. + if err == io.EOF { + return 0, io.ErrUnexpectedEOF + } + return 0, err + } + r.in = r.buf[:encN] + } +} diff --git a/vendor/github.com/andybalholm/brotli/ringbuffer.go b/vendor/github.com/andybalholm/brotli/ringbuffer.go new file mode 100644 index 0000000000..1c8f86feec --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/ringbuffer.go @@ -0,0 +1,134 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* A ringBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of + data in a circular manner: writing a byte writes it to: + `position() % (1 << window_bits)'. + For convenience, the ringBuffer array contains another copy of the + first `1 << tail_bits' bytes: + buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits), + and another copy of the last two bytes: + buffer_[-1] == buffer_[(1 << window_bits) - 1] and + buffer_[-2] == buffer_[(1 << window_bits) - 2]. */ +type ringBuffer struct { + size_ uint32 + mask_ uint32 + tail_size_ uint32 + total_size_ uint32 + cur_size_ uint32 + pos_ uint32 + data_ []byte + buffer_ []byte +} + +func ringBufferInit(rb *ringBuffer) { + rb.pos_ = 0 +} + +func ringBufferSetup(params *encoderParams, rb *ringBuffer) { + var window_bits int = computeRbBits(params) + var tail_bits int = params.lgblock + *(*uint32)(&rb.size_) = 1 << uint(window_bits) + *(*uint32)(&rb.mask_) = (1 << uint(window_bits)) - 1 + *(*uint32)(&rb.tail_size_) = 1 << uint(tail_bits) + *(*uint32)(&rb.total_size_) = rb.size_ + rb.tail_size_ +} + +const kSlackForEightByteHashingEverywhere uint = 7 + +/* Allocates or re-allocates data_ to the given length + plus some slack + region before and after. Fills the slack regions with zeros. */ +func ringBufferInitBuffer(buflen uint32, rb *ringBuffer) { + var new_data []byte + var i uint + size := 2 + int(buflen) + int(kSlackForEightByteHashingEverywhere) + if cap(rb.data_) < size { + new_data = make([]byte, size) + } else { + new_data = rb.data_[:size] + } + if rb.data_ != nil { + copy(new_data, rb.data_[:2+rb.cur_size_+uint32(kSlackForEightByteHashingEverywhere)]) + } + + rb.data_ = new_data + rb.cur_size_ = buflen + rb.buffer_ = rb.data_[2:] + rb.data_[1] = 0 + rb.data_[0] = rb.data_[1] + for i = 0; i < kSlackForEightByteHashingEverywhere; i++ { + rb.buffer_[rb.cur_size_+uint32(i)] = 0 + } +} + +func ringBufferWriteTail(bytes []byte, n uint, rb *ringBuffer) { + var masked_pos uint = uint(rb.pos_ & rb.mask_) + if uint32(masked_pos) < rb.tail_size_ { + /* Just fill the tail buffer with the beginning data. */ + var p uint = uint(rb.size_ + uint32(masked_pos)) + copy(rb.buffer_[p:], bytes[:brotli_min_size_t(n, uint(rb.tail_size_-uint32(masked_pos)))]) + } +} + +/* Push bytes into the ring buffer. */ +func ringBufferWrite(bytes []byte, n uint, rb *ringBuffer) { + if rb.pos_ == 0 && uint32(n) < rb.tail_size_ { + /* Special case for the first write: to process the first block, we don't + need to allocate the whole ring-buffer and we don't need the tail + either. However, we do this memory usage optimization only if the + first write is less than the tail size, which is also the input block + size, otherwise it is likely that other blocks will follow and we + will need to reallocate to the full size anyway. */ + rb.pos_ = uint32(n) + + ringBufferInitBuffer(rb.pos_, rb) + copy(rb.buffer_, bytes[:n]) + return + } + + if rb.cur_size_ < rb.total_size_ { + /* Lazily allocate the full buffer. */ + ringBufferInitBuffer(rb.total_size_, rb) + + /* Initialize the last two bytes to zero, so that we don't have to worry + later when we copy the last two bytes to the first two positions. */ + rb.buffer_[rb.size_-2] = 0 + + rb.buffer_[rb.size_-1] = 0 + } + { + var masked_pos uint = uint(rb.pos_ & rb.mask_) + + /* The length of the writes is limited so that we do not need to worry + about a write */ + ringBufferWriteTail(bytes, n, rb) + + if uint32(masked_pos+n) <= rb.size_ { + /* A single write fits. */ + copy(rb.buffer_[masked_pos:], bytes[:n]) + } else { + /* Split into two writes. + Copy into the end of the buffer, including the tail buffer. */ + copy(rb.buffer_[masked_pos:], bytes[:brotli_min_size_t(n, uint(rb.total_size_-uint32(masked_pos)))]) + + /* Copy into the beginning of the buffer */ + copy(rb.buffer_, bytes[rb.size_-uint32(masked_pos):][:uint32(n)-(rb.size_-uint32(masked_pos))]) + } + } + { + var not_first_lap bool = rb.pos_&(1<<31) != 0 + var rb_pos_mask uint32 = (1 << 31) - 1 + rb.data_[0] = rb.buffer_[rb.size_-2] + rb.data_[1] = rb.buffer_[rb.size_-1] + rb.pos_ = (rb.pos_ & rb_pos_mask) + uint32(uint32(n)&rb_pos_mask) + if not_first_lap { + /* Wrap, but preserve not-a-first-lap feature. */ + rb.pos_ |= 1 << 31 + } + } +} diff --git a/vendor/github.com/andybalholm/brotli/state.go b/vendor/github.com/andybalholm/brotli/state.go new file mode 100644 index 0000000000..d03348fe80 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/state.go @@ -0,0 +1,295 @@ +package brotli + +import "io" + +/* Copyright 2015 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Brotli state for partial streaming decoding. */ +const ( + stateUninited = iota + stateLargeWindowBits + stateInitialize + stateMetablockBegin + stateMetablockHeader + stateMetablockHeader2 + stateContextModes + stateCommandBegin + stateCommandInner + stateCommandPostDecodeLiterals + stateCommandPostWrapCopy + stateUncompressed + stateMetadata + stateCommandInnerWrite + stateMetablockDone + stateCommandPostWrite1 + stateCommandPostWrite2 + stateHuffmanCode0 + stateHuffmanCode1 + stateHuffmanCode2 + stateHuffmanCode3 + stateContextMap1 + stateContextMap2 + stateTreeGroup + stateDone +) + +const ( + stateMetablockHeaderNone = iota + stateMetablockHeaderEmpty + stateMetablockHeaderNibbles + stateMetablockHeaderSize + stateMetablockHeaderUncompressed + stateMetablockHeaderReserved + stateMetablockHeaderBytes + stateMetablockHeaderMetadata +) + +const ( + stateUncompressedNone = iota + stateUncompressedWrite +) + +const ( + stateTreeGroupNone = iota + stateTreeGroupLoop +) + +const ( + stateContextMapNone = iota + stateContextMapReadPrefix + stateContextMapHuffman + stateContextMapDecode + stateContextMapTransform +) + +const ( + stateHuffmanNone = iota + stateHuffmanSimpleSize + stateHuffmanSimpleRead + stateHuffmanSimpleBuild + stateHuffmanComplex + stateHuffmanLengthSymbols +) + +const ( + stateDecodeUint8None = iota + stateDecodeUint8Short + stateDecodeUint8Long +) + +const ( + stateReadBlockLengthNone = iota + stateReadBlockLengthSuffix +) + +type Reader struct { + src io.Reader + buf []byte // scratch space for reading from src + in []byte // current chunk to decode; usually aliases buf + + state int + loop_counter int + br bitReader + buffer struct { + u64 uint64 + u8 [8]byte + } + buffer_length uint32 + pos int + max_backward_distance int + max_distance int + ringbuffer_size int + ringbuffer_mask int + dist_rb_idx int + dist_rb [4]int + error_code int + sub_loop_counter uint32 + ringbuffer []byte + ringbuffer_end []byte + htree_command []huffmanCode + context_lookup []byte + context_map_slice []byte + dist_context_map_slice []byte + literal_hgroup huffmanTreeGroup + insert_copy_hgroup huffmanTreeGroup + distance_hgroup huffmanTreeGroup + block_type_trees []huffmanCode + block_len_trees []huffmanCode + trivial_literal_context int + distance_context int + meta_block_remaining_len int + block_length_index uint32 + block_length [3]uint32 + num_block_types [3]uint32 + block_type_rb [6]uint32 + distance_postfix_bits uint32 + num_direct_distance_codes uint32 + distance_postfix_mask int + num_dist_htrees uint32 + dist_context_map []byte + literal_htree []huffmanCode + dist_htree_index byte + repeat_code_len uint32 + prev_code_len uint32 + copy_length int + distance_code int + rb_roundtrips uint + partial_pos_out uint + symbol uint32 + repeat uint32 + space uint32 + table [32]huffmanCode + symbol_lists symbolList + symbols_lists_array [huffmanMaxCodeLength + 1 + numCommandSymbols]uint16 + next_symbol [32]int + code_length_code_lengths [codeLengthCodes]byte + code_length_histo [16]uint16 + htree_index int + next []huffmanCode + context_index uint32 + max_run_length_prefix uint32 + code uint32 + context_map_table [huffmanMaxSize272]huffmanCode + substate_metablock_header int + substate_tree_group int + substate_context_map int + substate_uncompressed int + substate_huffman int + substate_decode_uint8 int + substate_read_block_length int + is_last_metablock uint + is_uncompressed uint + is_metadata uint + should_wrap_ringbuffer uint + canny_ringbuffer_allocation uint + large_window bool + size_nibbles uint + window_bits uint32 + new_ringbuffer_size int + num_literal_htrees uint32 + context_map []byte + context_modes []byte + dictionary *dictionary + transforms *transforms + trivial_literal_contexts [8]uint32 +} + +func decoderStateInit(s *Reader) bool { + s.error_code = 0 /* BROTLI_DECODER_NO_ERROR */ + + initBitReader(&s.br) + s.state = stateUninited + s.large_window = false + s.substate_metablock_header = stateMetablockHeaderNone + s.substate_tree_group = stateTreeGroupNone + s.substate_context_map = stateContextMapNone + s.substate_uncompressed = stateUncompressedNone + s.substate_huffman = stateHuffmanNone + s.substate_decode_uint8 = stateDecodeUint8None + s.substate_read_block_length = stateReadBlockLengthNone + + s.buffer_length = 0 + s.loop_counter = 0 + s.pos = 0 + s.rb_roundtrips = 0 + s.partial_pos_out = 0 + + s.block_type_trees = nil + s.block_len_trees = nil + s.ringbuffer = nil + s.ringbuffer_size = 0 + s.new_ringbuffer_size = 0 + s.ringbuffer_mask = 0 + + s.context_map = nil + s.context_modes = nil + s.dist_context_map = nil + s.context_map_slice = nil + s.dist_context_map_slice = nil + + s.sub_loop_counter = 0 + + s.literal_hgroup.codes = nil + s.literal_hgroup.htrees = nil + s.insert_copy_hgroup.codes = nil + s.insert_copy_hgroup.htrees = nil + s.distance_hgroup.codes = nil + s.distance_hgroup.htrees = nil + + s.is_last_metablock = 0 + s.is_uncompressed = 0 + s.is_metadata = 0 + s.should_wrap_ringbuffer = 0 + s.canny_ringbuffer_allocation = 1 + + s.window_bits = 0 + s.max_distance = 0 + s.dist_rb[0] = 16 + s.dist_rb[1] = 15 + s.dist_rb[2] = 11 + s.dist_rb[3] = 4 + s.dist_rb_idx = 0 + s.block_type_trees = nil + s.block_len_trees = nil + + s.symbol_lists.storage = s.symbols_lists_array[:] + s.symbol_lists.offset = huffmanMaxCodeLength + 1 + + s.dictionary = getDictionary() + s.transforms = getTransforms() + + return true +} + +func decoderStateMetablockBegin(s *Reader) { + s.meta_block_remaining_len = 0 + s.block_length[0] = 1 << 24 + s.block_length[1] = 1 << 24 + s.block_length[2] = 1 << 24 + s.num_block_types[0] = 1 + s.num_block_types[1] = 1 + s.num_block_types[2] = 1 + s.block_type_rb[0] = 1 + s.block_type_rb[1] = 0 + s.block_type_rb[2] = 1 + s.block_type_rb[3] = 0 + s.block_type_rb[4] = 1 + s.block_type_rb[5] = 0 + s.context_map = nil + s.context_modes = nil + s.dist_context_map = nil + s.context_map_slice = nil + s.literal_htree = nil + s.dist_context_map_slice = nil + s.dist_htree_index = 0 + s.context_lookup = nil + s.literal_hgroup.codes = nil + s.literal_hgroup.htrees = nil + s.insert_copy_hgroup.codes = nil + s.insert_copy_hgroup.htrees = nil + s.distance_hgroup.codes = nil + s.distance_hgroup.htrees = nil +} + +func decoderStateCleanupAfterMetablock(s *Reader) { + s.context_modes = nil + s.context_map = nil + s.dist_context_map = nil + s.literal_hgroup.htrees = nil + s.insert_copy_hgroup.htrees = nil + s.distance_hgroup.htrees = nil +} + +func decoderHuffmanTreeGroupInit(s *Reader, group *huffmanTreeGroup, alphabet_size uint32, max_symbol uint32, ntrees uint32) bool { + var max_table_size uint = uint(kMaxHuffmanTableSize[(alphabet_size+31)>>5]) + group.alphabet_size = uint16(alphabet_size) + group.max_symbol = uint16(max_symbol) + group.num_htrees = uint16(ntrees) + group.htrees = make([][]huffmanCode, ntrees) + group.codes = make([]huffmanCode, (uint(ntrees) * max_table_size)) + return !(group.codes == nil) +} diff --git a/vendor/github.com/andybalholm/brotli/static_dict.go b/vendor/github.com/andybalholm/brotli/static_dict.go new file mode 100644 index 0000000000..bc05566d6f --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/static_dict.go @@ -0,0 +1,662 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Class to model the static dictionary. */ + +const maxStaticDictionaryMatchLen = 37 + +const kInvalidMatch uint32 = 0xFFFFFFF + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ +func hash(data []byte) uint32 { + var h uint32 = binary.LittleEndian.Uint32(data) * kDictHashMul32 + + /* The higher bits contain more mixture from the multiplication, + so we take our results from there. */ + return h >> uint(32-kDictNumBits) +} + +func addMatch(distance uint, len uint, len_code uint, matches []uint32) { + var match uint32 = uint32((distance << 5) + len_code) + matches[len] = brotli_min_uint32_t(matches[len], match) +} + +func dictMatchLength(dict *dictionary, data []byte, id uint, len uint, maxlen uint) uint { + var offset uint = uint(dict.offsets_by_length[len]) + len*id + return findMatchLengthWithLimit(dict.data[offset:], data, brotli_min_size_t(uint(len), maxlen)) +} + +func isMatch(d *dictionary, w dictWord, data []byte, max_length uint) bool { + if uint(w.len) > max_length { + return false + } else { + var offset uint = uint(d.offsets_by_length[w.len]) + uint(w.len)*uint(w.idx) + var dict []byte = d.data[offset:] + if w.transform == 0 { + /* Match against base dictionary word. */ + return findMatchLengthWithLimit(dict, data, uint(w.len)) == uint(w.len) + } else if w.transform == 10 { + /* Match against uppercase first transform. + Note that there are only ASCII uppercase words in the lookup table. */ + return dict[0] >= 'a' && dict[0] <= 'z' && (dict[0]^32) == data[0] && findMatchLengthWithLimit(dict[1:], data[1:], uint(w.len)-1) == uint(w.len-1) + } else { + /* Match against uppercase all transform. + Note that there are only ASCII uppercase words in the lookup table. */ + var i uint + for i = 0; i < uint(w.len); i++ { + if dict[i] >= 'a' && dict[i] <= 'z' { + if (dict[i] ^ 32) != data[i] { + return false + } + } else { + if dict[i] != data[i] { + return false + } + } + } + + return true + } + } +} + +func findAllStaticDictionaryMatches(dict *encoderDictionary, data []byte, min_length uint, max_length uint, matches []uint32) bool { + var has_found_match bool = false + { + var offset uint = uint(dict.buckets[hash(data)]) + var end bool = offset == 0 + for !end { + w := dict.dict_words[offset] + offset++ + var l uint = uint(w.len) & 0x1F + var n uint = uint(1) << dict.words.size_bits_by_length[l] + var id uint = uint(w.idx) + end = !(w.len&0x80 == 0) + w.len = byte(l) + if w.transform == 0 { + var matchlen uint = dictMatchLength(dict.words, data, id, l, max_length) + var s []byte + var minlen uint + var maxlen uint + var len uint + + /* Transform "" + BROTLI_TRANSFORM_IDENTITY + "" */ + if matchlen == l { + addMatch(id, l, l, matches) + has_found_match = true + } + + /* Transforms "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "" and + "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "ing " */ + if matchlen >= l-1 { + addMatch(id+12*n, l-1, l, matches) + if l+2 < max_length && data[l-1] == 'i' && data[l] == 'n' && data[l+1] == 'g' && data[l+2] == ' ' { + addMatch(id+49*n, l+3, l, matches) + } + + has_found_match = true + } + + /* Transform "" + BROTLI_TRANSFORM_OMIT_LAST_# + "" (# = 2 .. 9) */ + minlen = min_length + + if l > 9 { + minlen = brotli_max_size_t(minlen, l-9) + } + maxlen = brotli_min_size_t(matchlen, l-2) + for len = minlen; len <= maxlen; len++ { + var cut uint = l - len + var transform_id uint = (cut << 2) + uint((dict.cutoffTransforms>>(cut*6))&0x3F) + addMatch(id+transform_id*n, uint(len), l, matches) + has_found_match = true + } + + if matchlen < l || l+6 >= max_length { + continue + } + + s = data[l:] + + /* Transforms "" + BROTLI_TRANSFORM_IDENTITY + */ + if s[0] == ' ' { + addMatch(id+n, l+1, l, matches) + if s[1] == 'a' { + if s[2] == ' ' { + addMatch(id+28*n, l+3, l, matches) + } else if s[2] == 's' { + if s[3] == ' ' { + addMatch(id+46*n, l+4, l, matches) + } + } else if s[2] == 't' { + if s[3] == ' ' { + addMatch(id+60*n, l+4, l, matches) + } + } else if s[2] == 'n' { + if s[3] == 'd' && s[4] == ' ' { + addMatch(id+10*n, l+5, l, matches) + } + } + } else if s[1] == 'b' { + if s[2] == 'y' && s[3] == ' ' { + addMatch(id+38*n, l+4, l, matches) + } + } else if s[1] == 'i' { + if s[2] == 'n' { + if s[3] == ' ' { + addMatch(id+16*n, l+4, l, matches) + } + } else if s[2] == 's' { + if s[3] == ' ' { + addMatch(id+47*n, l+4, l, matches) + } + } + } else if s[1] == 'f' { + if s[2] == 'o' { + if s[3] == 'r' && s[4] == ' ' { + addMatch(id+25*n, l+5, l, matches) + } + } else if s[2] == 'r' { + if s[3] == 'o' && s[4] == 'm' && s[5] == ' ' { + addMatch(id+37*n, l+6, l, matches) + } + } + } else if s[1] == 'o' { + if s[2] == 'f' { + if s[3] == ' ' { + addMatch(id+8*n, l+4, l, matches) + } + } else if s[2] == 'n' { + if s[3] == ' ' { + addMatch(id+45*n, l+4, l, matches) + } + } + } else if s[1] == 'n' { + if s[2] == 'o' && s[3] == 't' && s[4] == ' ' { + addMatch(id+80*n, l+5, l, matches) + } + } else if s[1] == 't' { + if s[2] == 'h' { + if s[3] == 'e' { + if s[4] == ' ' { + addMatch(id+5*n, l+5, l, matches) + } + } else if s[3] == 'a' { + if s[4] == 't' && s[5] == ' ' { + addMatch(id+29*n, l+6, l, matches) + } + } + } else if s[2] == 'o' { + if s[3] == ' ' { + addMatch(id+17*n, l+4, l, matches) + } + } + } else if s[1] == 'w' { + if s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ' { + addMatch(id+35*n, l+6, l, matches) + } + } + } else if s[0] == '"' { + addMatch(id+19*n, l+1, l, matches) + if s[1] == '>' { + addMatch(id+21*n, l+2, l, matches) + } + } else if s[0] == '.' { + addMatch(id+20*n, l+1, l, matches) + if s[1] == ' ' { + addMatch(id+31*n, l+2, l, matches) + if s[2] == 'T' && s[3] == 'h' { + if s[4] == 'e' { + if s[5] == ' ' { + addMatch(id+43*n, l+6, l, matches) + } + } else if s[4] == 'i' { + if s[5] == 's' && s[6] == ' ' { + addMatch(id+75*n, l+7, l, matches) + } + } + } + } + } else if s[0] == ',' { + addMatch(id+76*n, l+1, l, matches) + if s[1] == ' ' { + addMatch(id+14*n, l+2, l, matches) + } + } else if s[0] == '\n' { + addMatch(id+22*n, l+1, l, matches) + if s[1] == '\t' { + addMatch(id+50*n, l+2, l, matches) + } + } else if s[0] == ']' { + addMatch(id+24*n, l+1, l, matches) + } else if s[0] == '\'' { + addMatch(id+36*n, l+1, l, matches) + } else if s[0] == ':' { + addMatch(id+51*n, l+1, l, matches) + } else if s[0] == '(' { + addMatch(id+57*n, l+1, l, matches) + } else if s[0] == '=' { + if s[1] == '"' { + addMatch(id+70*n, l+2, l, matches) + } else if s[1] == '\'' { + addMatch(id+86*n, l+2, l, matches) + } + } else if s[0] == 'a' { + if s[1] == 'l' && s[2] == ' ' { + addMatch(id+84*n, l+3, l, matches) + } + } else if s[0] == 'e' { + if s[1] == 'd' { + if s[2] == ' ' { + addMatch(id+53*n, l+3, l, matches) + } + } else if s[1] == 'r' { + if s[2] == ' ' { + addMatch(id+82*n, l+3, l, matches) + } + } else if s[1] == 's' { + if s[2] == 't' && s[3] == ' ' { + addMatch(id+95*n, l+4, l, matches) + } + } + } else if s[0] == 'f' { + if s[1] == 'u' && s[2] == 'l' && s[3] == ' ' { + addMatch(id+90*n, l+4, l, matches) + } + } else if s[0] == 'i' { + if s[1] == 'v' { + if s[2] == 'e' && s[3] == ' ' { + addMatch(id+92*n, l+4, l, matches) + } + } else if s[1] == 'z' { + if s[2] == 'e' && s[3] == ' ' { + addMatch(id+100*n, l+4, l, matches) + } + } + } else if s[0] == 'l' { + if s[1] == 'e' { + if s[2] == 's' && s[3] == 's' && s[4] == ' ' { + addMatch(id+93*n, l+5, l, matches) + } + } else if s[1] == 'y' { + if s[2] == ' ' { + addMatch(id+61*n, l+3, l, matches) + } + } + } else if s[0] == 'o' { + if s[1] == 'u' && s[2] == 's' && s[3] == ' ' { + addMatch(id+106*n, l+4, l, matches) + } + } + } else { + var is_all_caps bool = (w.transform != transformUppercaseFirst) + /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and + is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL) + transform. */ + + var s []byte + if !isMatch(dict.words, w, data, max_length) { + continue + } + + /* Transform "" + kUppercase{First,All} + "" */ + var tmp int + if is_all_caps { + tmp = 44 + } else { + tmp = 9 + } + addMatch(id+uint(tmp)*n, l, l, matches) + + has_found_match = true + if l+1 >= max_length { + continue + } + + /* Transforms "" + kUppercase{First,All} + */ + s = data[l:] + + if s[0] == ' ' { + var tmp int + if is_all_caps { + tmp = 68 + } else { + tmp = 4 + } + addMatch(id+uint(tmp)*n, l+1, l, matches) + } else if s[0] == '"' { + var tmp int + if is_all_caps { + tmp = 87 + } else { + tmp = 66 + } + addMatch(id+uint(tmp)*n, l+1, l, matches) + if s[1] == '>' { + var tmp int + if is_all_caps { + tmp = 97 + } else { + tmp = 69 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + } + } else if s[0] == '.' { + var tmp int + if is_all_caps { + tmp = 101 + } else { + tmp = 79 + } + addMatch(id+uint(tmp)*n, l+1, l, matches) + if s[1] == ' ' { + var tmp int + if is_all_caps { + tmp = 114 + } else { + tmp = 88 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + } + } else if s[0] == ',' { + var tmp int + if is_all_caps { + tmp = 112 + } else { + tmp = 99 + } + addMatch(id+uint(tmp)*n, l+1, l, matches) + if s[1] == ' ' { + var tmp int + if is_all_caps { + tmp = 107 + } else { + tmp = 58 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + } + } else if s[0] == '\'' { + var tmp int + if is_all_caps { + tmp = 94 + } else { + tmp = 74 + } + addMatch(id+uint(tmp)*n, l+1, l, matches) + } else if s[0] == '(' { + var tmp int + if is_all_caps { + tmp = 113 + } else { + tmp = 78 + } + addMatch(id+uint(tmp)*n, l+1, l, matches) + } else if s[0] == '=' { + if s[1] == '"' { + var tmp int + if is_all_caps { + tmp = 105 + } else { + tmp = 104 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + } else if s[1] == '\'' { + var tmp int + if is_all_caps { + tmp = 116 + } else { + tmp = 108 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + } + } + } + } + } + + /* Transforms with prefixes " " and "." */ + if max_length >= 5 && (data[0] == ' ' || data[0] == '.') { + var is_space bool = (data[0] == ' ') + var offset uint = uint(dict.buckets[hash(data[1:])]) + var end bool = offset == 0 + for !end { + w := dict.dict_words[offset] + offset++ + var l uint = uint(w.len) & 0x1F + var n uint = uint(1) << dict.words.size_bits_by_length[l] + var id uint = uint(w.idx) + end = !(w.len&0x80 == 0) + w.len = byte(l) + if w.transform == 0 { + var s []byte + if !isMatch(dict.words, w, data[1:], max_length-1) { + continue + } + + /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + "" and + "." + BROTLI_TRANSFORM_IDENTITY + "" */ + var tmp int + if is_space { + tmp = 6 + } else { + tmp = 32 + } + addMatch(id+uint(tmp)*n, l+1, l, matches) + + has_found_match = true + if l+2 >= max_length { + continue + } + + /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + and + "." + BROTLI_TRANSFORM_IDENTITY + + */ + s = data[l+1:] + + if s[0] == ' ' { + var tmp int + if is_space { + tmp = 2 + } else { + tmp = 77 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + } else if s[0] == '(' { + var tmp int + if is_space { + tmp = 89 + } else { + tmp = 67 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + } else if is_space { + if s[0] == ',' { + addMatch(id+103*n, l+2, l, matches) + if s[1] == ' ' { + addMatch(id+33*n, l+3, l, matches) + } + } else if s[0] == '.' { + addMatch(id+71*n, l+2, l, matches) + if s[1] == ' ' { + addMatch(id+52*n, l+3, l, matches) + } + } else if s[0] == '=' { + if s[1] == '"' { + addMatch(id+81*n, l+3, l, matches) + } else if s[1] == '\'' { + addMatch(id+98*n, l+3, l, matches) + } + } + } + } else if is_space { + var is_all_caps bool = (w.transform != transformUppercaseFirst) + /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and + is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL) + transform. */ + + var s []byte + if !isMatch(dict.words, w, data[1:], max_length-1) { + continue + } + + /* Transforms " " + kUppercase{First,All} + "" */ + var tmp int + if is_all_caps { + tmp = 85 + } else { + tmp = 30 + } + addMatch(id+uint(tmp)*n, l+1, l, matches) + + has_found_match = true + if l+2 >= max_length { + continue + } + + /* Transforms " " + kUppercase{First,All} + */ + s = data[l+1:] + + if s[0] == ' ' { + var tmp int + if is_all_caps { + tmp = 83 + } else { + tmp = 15 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + } else if s[0] == ',' { + if !is_all_caps { + addMatch(id+109*n, l+2, l, matches) + } + + if s[1] == ' ' { + var tmp int + if is_all_caps { + tmp = 111 + } else { + tmp = 65 + } + addMatch(id+uint(tmp)*n, l+3, l, matches) + } + } else if s[0] == '.' { + var tmp int + if is_all_caps { + tmp = 115 + } else { + tmp = 96 + } + addMatch(id+uint(tmp)*n, l+2, l, matches) + if s[1] == ' ' { + var tmp int + if is_all_caps { + tmp = 117 + } else { + tmp = 91 + } + addMatch(id+uint(tmp)*n, l+3, l, matches) + } + } else if s[0] == '=' { + if s[1] == '"' { + var tmp int + if is_all_caps { + tmp = 110 + } else { + tmp = 118 + } + addMatch(id+uint(tmp)*n, l+3, l, matches) + } else if s[1] == '\'' { + var tmp int + if is_all_caps { + tmp = 119 + } else { + tmp = 120 + } + addMatch(id+uint(tmp)*n, l+3, l, matches) + } + } + } + } + } + + if max_length >= 6 { + /* Transforms with prefixes "e ", "s ", ", " and "\xC2\xA0" */ + if (data[1] == ' ' && (data[0] == 'e' || data[0] == 's' || data[0] == ',')) || (data[0] == 0xC2 && data[1] == 0xA0) { + var offset uint = uint(dict.buckets[hash(data[2:])]) + var end bool = offset == 0 + for !end { + w := dict.dict_words[offset] + offset++ + var l uint = uint(w.len) & 0x1F + var n uint = uint(1) << dict.words.size_bits_by_length[l] + var id uint = uint(w.idx) + end = !(w.len&0x80 == 0) + w.len = byte(l) + if w.transform == 0 && isMatch(dict.words, w, data[2:], max_length-2) { + if data[0] == 0xC2 { + addMatch(id+102*n, l+2, l, matches) + has_found_match = true + } else if l+2 < max_length && data[l+2] == ' ' { + var t uint = 13 + if data[0] == 'e' { + t = 18 + } else if data[0] == 's' { + t = 7 + } + addMatch(id+t*n, l+3, l, matches) + has_found_match = true + } + } + } + } + } + + if max_length >= 9 { + /* Transforms with prefixes " the " and ".com/" */ + if (data[0] == ' ' && data[1] == 't' && data[2] == 'h' && data[3] == 'e' && data[4] == ' ') || (data[0] == '.' && data[1] == 'c' && data[2] == 'o' && data[3] == 'm' && data[4] == '/') { + var offset uint = uint(dict.buckets[hash(data[5:])]) + var end bool = offset == 0 + for !end { + w := dict.dict_words[offset] + offset++ + var l uint = uint(w.len) & 0x1F + var n uint = uint(1) << dict.words.size_bits_by_length[l] + var id uint = uint(w.idx) + end = !(w.len&0x80 == 0) + w.len = byte(l) + if w.transform == 0 && isMatch(dict.words, w, data[5:], max_length-5) { + var tmp int + if data[0] == ' ' { + tmp = 41 + } else { + tmp = 72 + } + addMatch(id+uint(tmp)*n, l+5, l, matches) + has_found_match = true + if l+5 < max_length { + var s []byte = data[l+5:] + if data[0] == ' ' { + if l+8 < max_length && s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ' { + addMatch(id+62*n, l+9, l, matches) + if l+12 < max_length && s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ' { + addMatch(id+73*n, l+13, l, matches) + } + } + } + } + } + } + } + } + + return has_found_match +} diff --git a/vendor/github.com/andybalholm/brotli/static_dict_lut.go b/vendor/github.com/andybalholm/brotli/static_dict_lut.go new file mode 100644 index 0000000000..b33963e967 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/static_dict_lut.go @@ -0,0 +1,75094 @@ +package brotli + +/* Copyright 2017 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Lookup table for static dictionary and transforms. */ + +type dictWord struct { + len byte + transform byte + idx uint16 +} + +const kDictNumBits int = 15 + +const kDictHashMul32 uint32 = 0x1E35A7BD + +var kStaticDictionaryBuckets = [32768]uint16{ + 1, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3, + 6, + 0, + 0, + 0, + 0, + 0, + 20, + 0, + 0, + 0, + 21, + 0, + 22, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23, + 0, + 0, + 25, + 0, + 29, + 0, + 53, + 0, + 0, + 0, + 0, + 0, + 0, + 55, + 0, + 0, + 0, + 0, + 0, + 0, + 61, + 76, + 0, + 0, + 0, + 94, + 0, + 0, + 0, + 0, + 0, + 0, + 96, + 0, + 97, + 0, + 98, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 99, + 101, + 106, + 108, + 0, + 0, + 0, + 0, + 0, + 110, + 0, + 111, + 112, + 0, + 113, + 118, + 124, + 0, + 0, + 0, + 0, + 0, + 125, + 128, + 0, + 0, + 0, + 0, + 129, + 0, + 0, + 131, + 0, + 0, + 0, + 0, + 0, + 0, + 132, + 0, + 0, + 135, + 0, + 0, + 0, + 137, + 0, + 0, + 0, + 0, + 0, + 138, + 139, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 142, + 143, + 144, + 0, + 0, + 0, + 0, + 0, + 145, + 0, + 0, + 0, + 146, + 149, + 151, + 152, + 0, + 0, + 153, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 154, + 0, + 0, + 0, + 0, + 0, + 0, + 155, + 0, + 0, + 0, + 0, + 160, + 182, + 0, + 0, + 0, + 0, + 0, + 0, + 183, + 0, + 0, + 0, + 188, + 189, + 0, + 0, + 192, + 0, + 0, + 0, + 0, + 0, + 0, + 194, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 197, + 202, + 209, + 0, + 0, + 210, + 0, + 224, + 0, + 0, + 0, + 225, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 231, + 0, + 0, + 0, + 232, + 0, + 240, + 0, + 0, + 242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 244, + 0, + 0, + 0, + 246, + 0, + 0, + 249, + 251, + 253, + 0, + 0, + 0, + 0, + 0, + 258, + 0, + 0, + 261, + 263, + 0, + 0, + 0, + 267, + 0, + 0, + 268, + 0, + 269, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 271, + 0, + 0, + 0, + 0, + 0, + 0, + 272, + 0, + 273, + 0, + 277, + 0, + 278, + 286, + 0, + 0, + 0, + 0, + 287, + 0, + 289, + 290, + 291, + 0, + 0, + 0, + 295, + 0, + 0, + 296, + 297, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 298, + 0, + 0, + 0, + 299, + 0, + 0, + 305, + 0, + 324, + 0, + 0, + 0, + 0, + 0, + 327, + 0, + 328, + 329, + 0, + 0, + 0, + 0, + 336, + 0, + 0, + 340, + 0, + 341, + 342, + 343, + 0, + 0, + 346, + 0, + 348, + 0, + 0, + 0, + 0, + 0, + 0, + 349, + 351, + 0, + 0, + 355, + 0, + 363, + 0, + 364, + 0, + 368, + 369, + 0, + 370, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 372, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 373, + 0, + 375, + 0, + 0, + 0, + 0, + 376, + 377, + 0, + 0, + 394, + 395, + 396, + 0, + 0, + 398, + 0, + 0, + 0, + 0, + 400, + 0, + 0, + 408, + 0, + 0, + 0, + 0, + 420, + 0, + 0, + 0, + 0, + 0, + 0, + 421, + 0, + 0, + 422, + 423, + 0, + 0, + 429, + 435, + 436, + 442, + 0, + 0, + 443, + 0, + 444, + 445, + 453, + 456, + 0, + 457, + 0, + 0, + 0, + 0, + 0, + 458, + 0, + 0, + 0, + 459, + 0, + 0, + 0, + 460, + 0, + 462, + 463, + 465, + 0, + 0, + 0, + 0, + 0, + 0, + 466, + 469, + 0, + 0, + 0, + 0, + 0, + 0, + 470, + 0, + 0, + 0, + 474, + 0, + 476, + 0, + 0, + 0, + 0, + 483, + 0, + 485, + 0, + 0, + 0, + 486, + 0, + 0, + 488, + 491, + 492, + 0, + 0, + 497, + 499, + 500, + 0, + 501, + 0, + 0, + 0, + 505, + 0, + 0, + 506, + 0, + 0, + 0, + 507, + 0, + 0, + 0, + 509, + 0, + 0, + 0, + 0, + 511, + 512, + 519, + 0, + 0, + 0, + 0, + 0, + 0, + 529, + 530, + 0, + 0, + 0, + 534, + 0, + 0, + 0, + 0, + 543, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 553, + 0, + 0, + 0, + 0, + 557, + 560, + 0, + 0, + 0, + 0, + 0, + 0, + 561, + 0, + 564, + 0, + 0, + 0, + 0, + 0, + 0, + 565, + 566, + 0, + 575, + 0, + 619, + 0, + 620, + 0, + 0, + 623, + 624, + 0, + 0, + 0, + 625, + 0, + 0, + 626, + 627, + 0, + 0, + 628, + 0, + 0, + 0, + 0, + 630, + 0, + 631, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 641, + 0, + 0, + 0, + 0, + 643, + 656, + 668, + 0, + 0, + 0, + 673, + 0, + 0, + 0, + 674, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 682, + 0, + 687, + 0, + 690, + 0, + 693, + 699, + 700, + 0, + 0, + 0, + 0, + 0, + 0, + 704, + 705, + 0, + 0, + 0, + 0, + 707, + 710, + 0, + 711, + 0, + 0, + 0, + 0, + 726, + 0, + 0, + 729, + 0, + 0, + 0, + 730, + 731, + 0, + 0, + 0, + 0, + 0, + 752, + 0, + 0, + 0, + 762, + 0, + 763, + 0, + 0, + 767, + 0, + 0, + 0, + 770, + 774, + 0, + 0, + 775, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 776, + 0, + 0, + 0, + 777, + 783, + 0, + 0, + 0, + 785, + 788, + 0, + 0, + 0, + 0, + 790, + 0, + 0, + 0, + 793, + 0, + 0, + 0, + 0, + 794, + 0, + 0, + 804, + 819, + 821, + 0, + 827, + 0, + 0, + 0, + 834, + 0, + 0, + 835, + 0, + 0, + 0, + 841, + 0, + 844, + 0, + 850, + 851, + 859, + 0, + 860, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 874, + 0, + 876, + 0, + 877, + 890, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 893, + 894, + 898, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 899, + 0, + 0, + 0, + 900, + 904, + 906, + 0, + 0, + 0, + 907, + 0, + 908, + 909, + 0, + 910, + 0, + 0, + 0, + 0, + 911, + 0, + 0, + 0, + 0, + 0, + 916, + 0, + 0, + 0, + 922, + 925, + 0, + 930, + 0, + 934, + 0, + 0, + 0, + 0, + 0, + 943, + 0, + 0, + 944, + 0, + 953, + 954, + 0, + 0, + 0, + 0, + 0, + 0, + 955, + 0, + 962, + 963, + 0, + 0, + 976, + 0, + 0, + 977, + 978, + 979, + 980, + 0, + 981, + 0, + 0, + 0, + 0, + 984, + 0, + 0, + 985, + 0, + 0, + 987, + 989, + 991, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 992, + 0, + 0, + 0, + 993, + 0, + 0, + 0, + 0, + 0, + 0, + 996, + 0, + 0, + 0, + 1000, + 0, + 0, + 0, + 0, + 0, + 1002, + 0, + 0, + 0, + 0, + 1005, + 1007, + 0, + 0, + 0, + 1009, + 0, + 0, + 0, + 1010, + 0, + 0, + 0, + 0, + 0, + 0, + 1011, + 0, + 1012, + 0, + 0, + 0, + 0, + 1014, + 1016, + 0, + 0, + 0, + 1020, + 0, + 1021, + 0, + 0, + 0, + 0, + 1022, + 0, + 0, + 0, + 1024, + 0, + 0, + 0, + 0, + 0, + 0, + 1025, + 0, + 0, + 1026, + 1027, + 0, + 0, + 0, + 0, + 0, + 1031, + 0, + 1033, + 0, + 0, + 0, + 0, + 1034, + 0, + 0, + 0, + 1037, + 1040, + 0, + 0, + 0, + 1042, + 1043, + 0, + 0, + 1053, + 0, + 1054, + 0, + 0, + 1057, + 0, + 0, + 0, + 1058, + 0, + 0, + 1060, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1061, + 0, + 0, + 1062, + 0, + 0, + 0, + 0, + 1063, + 0, + 0, + 0, + 0, + 1064, + 0, + 0, + 0, + 0, + 0, + 1065, + 0, + 0, + 0, + 0, + 1066, + 1067, + 0, + 0, + 0, + 1069, + 1070, + 1072, + 0, + 0, + 0, + 0, + 0, + 0, + 1073, + 0, + 1075, + 0, + 0, + 0, + 0, + 0, + 0, + 1080, + 1084, + 0, + 0, + 0, + 0, + 1088, + 0, + 0, + 0, + 0, + 0, + 0, + 1094, + 0, + 1095, + 0, + 1107, + 0, + 0, + 0, + 1112, + 1114, + 0, + 1119, + 0, + 1122, + 0, + 0, + 1126, + 0, + 1129, + 0, + 1130, + 0, + 0, + 0, + 0, + 0, + 1132, + 0, + 0, + 0, + 0, + 0, + 0, + 1144, + 0, + 0, + 1145, + 1146, + 0, + 1148, + 1149, + 0, + 0, + 1150, + 1151, + 0, + 0, + 0, + 0, + 1152, + 0, + 1153, + 0, + 0, + 0, + 0, + 0, + 1154, + 0, + 1163, + 0, + 0, + 0, + 1164, + 0, + 0, + 0, + 0, + 0, + 1165, + 0, + 1167, + 0, + 1170, + 0, + 0, + 0, + 0, + 0, + 1171, + 1172, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1173, + 1175, + 1177, + 0, + 1186, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1195, + 0, + 0, + 1221, + 0, + 0, + 1224, + 0, + 0, + 1227, + 0, + 0, + 0, + 0, + 0, + 1228, + 1229, + 0, + 0, + 1230, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1231, + 0, + 0, + 0, + 1233, + 0, + 0, + 1243, + 1244, + 1246, + 1248, + 0, + 0, + 0, + 0, + 1254, + 1255, + 1258, + 1259, + 0, + 0, + 0, + 1260, + 0, + 0, + 1261, + 0, + 0, + 0, + 1262, + 1264, + 0, + 0, + 1265, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1266, + 0, + 1267, + 0, + 0, + 0, + 0, + 1273, + 1274, + 1276, + 1289, + 0, + 0, + 1291, + 1292, + 1293, + 0, + 0, + 1294, + 1295, + 1296, + 0, + 0, + 0, + 0, + 1302, + 0, + 1304, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1311, + 1312, + 0, + 1314, + 0, + 1316, + 1320, + 1321, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1322, + 1323, + 1324, + 0, + 1335, + 0, + 1336, + 0, + 0, + 0, + 0, + 1341, + 1342, + 0, + 1346, + 0, + 1357, + 0, + 0, + 0, + 1358, + 1360, + 0, + 0, + 0, + 0, + 0, + 0, + 1361, + 0, + 0, + 0, + 1362, + 1365, + 0, + 1366, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1379, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1386, + 0, + 1388, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1395, + 0, + 0, + 0, + 0, + 1403, + 0, + 1405, + 0, + 0, + 1407, + 0, + 0, + 0, + 0, + 0, + 1408, + 1409, + 0, + 1410, + 0, + 0, + 0, + 1412, + 1413, + 1416, + 0, + 0, + 1429, + 1451, + 0, + 0, + 1454, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1455, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1456, + 0, + 0, + 0, + 0, + 1459, + 1460, + 1461, + 1475, + 0, + 0, + 0, + 0, + 0, + 0, + 1477, + 0, + 1480, + 0, + 1481, + 0, + 0, + 1486, + 0, + 0, + 1495, + 0, + 0, + 0, + 1496, + 0, + 0, + 1498, + 1499, + 1501, + 1520, + 1521, + 0, + 0, + 0, + 1526, + 0, + 0, + 0, + 0, + 1528, + 1529, + 0, + 1533, + 1536, + 0, + 0, + 0, + 1537, + 1538, + 1549, + 0, + 1550, + 1558, + 1559, + 1572, + 0, + 1573, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1575, + 0, + 0, + 0, + 0, + 0, + 1579, + 0, + 1599, + 0, + 1603, + 0, + 1604, + 0, + 1605, + 0, + 0, + 0, + 0, + 0, + 1608, + 1610, + 0, + 0, + 0, + 0, + 1611, + 0, + 1615, + 0, + 1616, + 1618, + 0, + 1619, + 0, + 0, + 1622, + 0, + 0, + 0, + 0, + 1634, + 0, + 0, + 0, + 1635, + 0, + 0, + 0, + 1641, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1643, + 0, + 0, + 0, + 1650, + 0, + 0, + 1652, + 0, + 0, + 0, + 0, + 0, + 1653, + 0, + 0, + 0, + 1654, + 0, + 0, + 0, + 0, + 1655, + 0, + 1662, + 0, + 0, + 1663, + 1664, + 0, + 0, + 1668, + 0, + 0, + 1669, + 1670, + 0, + 1672, + 1673, + 0, + 0, + 0, + 0, + 0, + 1674, + 0, + 0, + 0, + 1675, + 1676, + 1680, + 0, + 1682, + 0, + 0, + 1687, + 0, + 0, + 0, + 0, + 0, + 1704, + 0, + 0, + 1705, + 0, + 0, + 1721, + 0, + 0, + 0, + 0, + 1734, + 1735, + 0, + 0, + 0, + 0, + 1737, + 0, + 0, + 0, + 0, + 1739, + 0, + 0, + 1740, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1741, + 1743, + 0, + 0, + 0, + 0, + 1745, + 0, + 0, + 0, + 1749, + 0, + 0, + 0, + 1751, + 0, + 0, + 0, + 0, + 0, + 0, + 1760, + 0, + 0, + 0, + 0, + 1765, + 0, + 0, + 0, + 0, + 0, + 1784, + 0, + 1785, + 1787, + 0, + 0, + 0, + 0, + 1788, + 1789, + 0, + 0, + 0, + 0, + 1790, + 1791, + 1793, + 0, + 1798, + 1799, + 0, + 0, + 0, + 0, + 1801, + 0, + 1803, + 1805, + 0, + 0, + 0, + 1806, + 1811, + 0, + 1812, + 1814, + 0, + 1821, + 0, + 0, + 0, + 0, + 0, + 1822, + 1833, + 0, + 0, + 0, + 0, + 0, + 0, + 1848, + 0, + 0, + 0, + 0, + 0, + 0, + 1857, + 0, + 0, + 0, + 1859, + 0, + 0, + 0, + 0, + 1861, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1866, + 0, + 1921, + 1925, + 0, + 0, + 0, + 1929, + 1930, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1931, + 0, + 0, + 0, + 0, + 1932, + 0, + 0, + 0, + 1934, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1946, + 0, + 0, + 1948, + 0, + 0, + 0, + 0, + 1950, + 0, + 1957, + 0, + 1958, + 0, + 0, + 0, + 0, + 0, + 1965, + 1967, + 0, + 0, + 0, + 0, + 1968, + 0, + 1969, + 0, + 1971, + 1972, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1973, + 0, + 0, + 0, + 0, + 1975, + 0, + 0, + 0, + 0, + 1976, + 1979, + 0, + 1982, + 0, + 0, + 0, + 0, + 1984, + 1988, + 0, + 0, + 0, + 0, + 1990, + 2004, + 2008, + 0, + 0, + 0, + 2012, + 2013, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2015, + 0, + 2016, + 2017, + 0, + 0, + 0, + 0, + 2021, + 0, + 0, + 2025, + 0, + 0, + 0, + 0, + 0, + 2029, + 2036, + 2040, + 0, + 2042, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2043, + 0, + 0, + 0, + 0, + 0, + 2045, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2046, + 2047, + 0, + 2048, + 2049, + 0, + 2059, + 0, + 0, + 2063, + 0, + 2064, + 2065, + 0, + 0, + 2066, + 0, + 0, + 0, + 0, + 0, + 0, + 2069, + 0, + 0, + 0, + 0, + 2070, + 0, + 2071, + 0, + 2072, + 0, + 0, + 0, + 0, + 2080, + 2082, + 2083, + 0, + 0, + 0, + 0, + 0, + 2085, + 0, + 2086, + 2088, + 2089, + 2105, + 0, + 0, + 0, + 0, + 2107, + 0, + 0, + 2116, + 2117, + 0, + 2120, + 0, + 0, + 2122, + 0, + 0, + 0, + 0, + 0, + 2123, + 0, + 0, + 2125, + 2127, + 2128, + 0, + 0, + 0, + 2130, + 0, + 0, + 0, + 2137, + 2139, + 2140, + 2141, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2144, + 2145, + 0, + 0, + 2146, + 2149, + 0, + 0, + 0, + 0, + 2150, + 0, + 0, + 2151, + 2158, + 0, + 2159, + 0, + 2160, + 0, + 0, + 0, + 0, + 0, + 0, + 2161, + 2162, + 0, + 0, + 2194, + 2202, + 0, + 0, + 0, + 0, + 0, + 0, + 2205, + 2217, + 0, + 2220, + 0, + 2221, + 0, + 2222, + 2224, + 0, + 0, + 0, + 0, + 2237, + 0, + 0, + 0, + 0, + 0, + 2238, + 0, + 2239, + 2241, + 0, + 0, + 2242, + 0, + 0, + 0, + 0, + 0, + 2243, + 0, + 0, + 0, + 0, + 0, + 0, + 2252, + 0, + 0, + 2253, + 0, + 0, + 0, + 2257, + 2258, + 0, + 0, + 0, + 2260, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2262, + 0, + 2264, + 0, + 0, + 0, + 0, + 0, + 2269, + 2270, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2271, + 0, + 2273, + 0, + 0, + 0, + 0, + 2277, + 0, + 0, + 0, + 0, + 2278, + 0, + 0, + 0, + 0, + 2279, + 0, + 2280, + 0, + 2283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2287, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2289, + 2290, + 0, + 0, + 0, + 0, + 2291, + 0, + 2292, + 0, + 0, + 0, + 2293, + 2295, + 2296, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2298, + 0, + 0, + 0, + 0, + 0, + 2303, + 0, + 2305, + 0, + 0, + 2306, + 0, + 2307, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2313, + 2314, + 2315, + 2316, + 0, + 0, + 2318, + 0, + 2319, + 0, + 2322, + 0, + 0, + 2323, + 0, + 2324, + 0, + 2326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2335, + 0, + 2336, + 2338, + 2339, + 0, + 2340, + 0, + 0, + 0, + 2355, + 0, + 2375, + 0, + 2382, + 2386, + 0, + 2387, + 0, + 0, + 2394, + 0, + 0, + 0, + 0, + 2395, + 0, + 2397, + 0, + 0, + 0, + 0, + 0, + 2398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2399, + 2402, + 2404, + 2408, + 2411, + 0, + 0, + 0, + 2413, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2415, + 0, + 0, + 2416, + 2417, + 2419, + 0, + 2420, + 0, + 0, + 0, + 0, + 0, + 2425, + 0, + 0, + 0, + 2426, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2427, + 2428, + 0, + 2429, + 0, + 0, + 2430, + 2434, + 0, + 2436, + 0, + 0, + 0, + 0, + 0, + 0, + 2441, + 2442, + 0, + 2445, + 0, + 0, + 2446, + 2457, + 0, + 2459, + 0, + 0, + 2462, + 0, + 2464, + 0, + 2477, + 0, + 2478, + 2486, + 0, + 0, + 0, + 2491, + 0, + 0, + 2493, + 0, + 0, + 2494, + 0, + 2495, + 0, + 2513, + 2523, + 0, + 0, + 0, + 0, + 2524, + 0, + 0, + 0, + 0, + 0, + 0, + 2528, + 2529, + 2530, + 0, + 0, + 2531, + 0, + 2533, + 0, + 0, + 2534, + 2535, + 0, + 2536, + 2537, + 0, + 2538, + 0, + 2539, + 2540, + 0, + 0, + 0, + 2545, + 2546, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2548, + 0, + 0, + 2549, + 0, + 2550, + 2555, + 0, + 0, + 0, + 0, + 0, + 2557, + 0, + 2560, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2561, + 0, + 2576, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2577, + 2578, + 0, + 0, + 0, + 2579, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2580, + 0, + 0, + 0, + 0, + 2581, + 0, + 0, + 0, + 0, + 2583, + 0, + 2584, + 0, + 2588, + 2590, + 0, + 0, + 0, + 2591, + 0, + 0, + 0, + 0, + 2593, + 2594, + 0, + 2595, + 0, + 2601, + 2602, + 0, + 0, + 2603, + 0, + 2605, + 0, + 0, + 0, + 2606, + 2607, + 2611, + 0, + 2615, + 0, + 0, + 0, + 2617, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2619, + 0, + 0, + 2620, + 0, + 0, + 0, + 2621, + 0, + 2623, + 0, + 2625, + 0, + 0, + 2628, + 2629, + 0, + 0, + 2635, + 2636, + 2637, + 0, + 0, + 2639, + 0, + 0, + 0, + 2642, + 0, + 0, + 0, + 0, + 2643, + 0, + 2644, + 0, + 2649, + 0, + 0, + 0, + 0, + 0, + 0, + 2655, + 2656, + 0, + 0, + 2657, + 0, + 0, + 0, + 0, + 0, + 2658, + 0, + 0, + 0, + 0, + 0, + 2659, + 0, + 0, + 0, + 0, + 2664, + 2685, + 0, + 2687, + 0, + 2688, + 0, + 0, + 2689, + 0, + 0, + 2694, + 0, + 2695, + 0, + 0, + 2698, + 0, + 2701, + 2706, + 0, + 0, + 0, + 2707, + 0, + 2709, + 2710, + 2711, + 0, + 0, + 0, + 2720, + 2730, + 2735, + 0, + 0, + 0, + 0, + 2738, + 2740, + 0, + 0, + 0, + 0, + 2747, + 0, + 0, + 0, + 0, + 0, + 0, + 2748, + 0, + 0, + 2749, + 0, + 0, + 0, + 0, + 0, + 2750, + 0, + 0, + 2752, + 2754, + 0, + 0, + 0, + 0, + 0, + 2758, + 0, + 0, + 0, + 0, + 2762, + 0, + 0, + 0, + 0, + 2763, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2764, + 2767, + 0, + 0, + 0, + 0, + 2768, + 0, + 0, + 2770, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2771, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2772, + 0, + 0, + 0, + 0, + 0, + 2773, + 2776, + 0, + 0, + 2783, + 0, + 0, + 2784, + 0, + 2789, + 0, + 2790, + 0, + 0, + 0, + 2792, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2793, + 2795, + 0, + 0, + 0, + 0, + 0, + 0, + 2796, + 0, + 0, + 0, + 0, + 0, + 0, + 2797, + 2799, + 0, + 0, + 0, + 0, + 2803, + 0, + 0, + 0, + 0, + 2806, + 0, + 2807, + 2808, + 2817, + 2819, + 0, + 0, + 0, + 0, + 0, + 2821, + 0, + 0, + 0, + 0, + 2822, + 2823, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2824, + 0, + 0, + 2828, + 0, + 2834, + 0, + 0, + 0, + 0, + 0, + 0, + 2836, + 0, + 2838, + 0, + 0, + 2839, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2841, + 0, + 0, + 0, + 2842, + 0, + 0, + 0, + 0, + 0, + 2843, + 2844, + 0, + 0, + 0, + 0, + 2846, + 0, + 0, + 2847, + 0, + 2849, + 0, + 2853, + 0, + 0, + 0, + 0, + 0, + 2857, + 0, + 0, + 0, + 0, + 2858, + 0, + 2859, + 0, + 0, + 2860, + 0, + 2862, + 2868, + 0, + 0, + 0, + 0, + 2875, + 0, + 2876, + 0, + 0, + 2877, + 2878, + 2884, + 2889, + 2890, + 0, + 0, + 2891, + 0, + 0, + 2892, + 0, + 0, + 0, + 2906, + 2912, + 0, + 2913, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2916, + 0, + 2934, + 0, + 0, + 0, + 0, + 0, + 2935, + 0, + 0, + 0, + 0, + 2939, + 0, + 2940, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2941, + 0, + 0, + 0, + 2946, + 0, + 2949, + 0, + 0, + 2950, + 2954, + 2955, + 0, + 0, + 0, + 2959, + 2961, + 0, + 0, + 2962, + 0, + 2963, + 0, + 0, + 0, + 0, + 0, + 0, + 2964, + 2965, + 2966, + 2967, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2969, + 0, + 0, + 0, + 0, + 0, + 2970, + 2975, + 0, + 2982, + 2983, + 2984, + 0, + 0, + 0, + 0, + 0, + 2989, + 0, + 0, + 2990, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2991, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 2998, + 0, + 3000, + 3001, + 0, + 0, + 3002, + 0, + 0, + 0, + 3003, + 0, + 0, + 3012, + 0, + 0, + 3022, + 0, + 0, + 3024, + 0, + 0, + 3025, + 3027, + 0, + 0, + 0, + 3030, + 0, + 0, + 0, + 0, + 3034, + 3035, + 0, + 0, + 3036, + 0, + 3039, + 0, + 3049, + 0, + 0, + 3050, + 0, + 0, + 0, + 0, + 0, + 0, + 3051, + 0, + 3053, + 0, + 0, + 0, + 0, + 3057, + 0, + 3058, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3063, + 0, + 0, + 3073, + 3074, + 3078, + 3079, + 0, + 3080, + 3086, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3087, + 0, + 3092, + 0, + 3095, + 0, + 3099, + 0, + 0, + 0, + 3100, + 0, + 3101, + 3102, + 0, + 3122, + 0, + 0, + 0, + 3124, + 0, + 3125, + 0, + 0, + 0, + 0, + 0, + 0, + 3132, + 3134, + 0, + 0, + 3136, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3147, + 0, + 0, + 3149, + 0, + 0, + 0, + 0, + 0, + 3150, + 3151, + 3152, + 0, + 0, + 0, + 0, + 3158, + 0, + 0, + 3160, + 0, + 0, + 3161, + 0, + 0, + 3162, + 0, + 3163, + 3166, + 3168, + 0, + 0, + 3169, + 3170, + 0, + 0, + 3171, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3182, + 0, + 3184, + 0, + 0, + 3188, + 0, + 0, + 3194, + 0, + 0, + 0, + 0, + 0, + 0, + 3204, + 0, + 0, + 0, + 0, + 3209, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3216, + 3217, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3219, + 0, + 0, + 3220, + 3222, + 0, + 3223, + 0, + 0, + 0, + 0, + 3224, + 0, + 3225, + 3226, + 0, + 3228, + 3233, + 0, + 3239, + 3241, + 3242, + 0, + 0, + 3251, + 3252, + 3253, + 3255, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3260, + 0, + 0, + 3261, + 0, + 0, + 0, + 3267, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3271, + 0, + 0, + 0, + 3278, + 0, + 3282, + 0, + 0, + 0, + 3284, + 0, + 0, + 0, + 3285, + 3286, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3287, + 3292, + 0, + 0, + 0, + 0, + 3294, + 3296, + 0, + 0, + 3299, + 3300, + 3301, + 0, + 3302, + 0, + 0, + 0, + 0, + 0, + 3304, + 3306, + 0, + 0, + 0, + 0, + 0, + 0, + 3308, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3311, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3312, + 3314, + 3315, + 0, + 3318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3319, + 0, + 0, + 0, + 0, + 0, + 3321, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3322, + 0, + 0, + 3324, + 3325, + 0, + 0, + 3326, + 0, + 0, + 3328, + 3329, + 3331, + 0, + 0, + 3335, + 0, + 0, + 3337, + 0, + 3338, + 0, + 0, + 0, + 0, + 3343, + 3347, + 0, + 0, + 0, + 3348, + 0, + 0, + 3351, + 0, + 0, + 0, + 0, + 0, + 0, + 3354, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3355, + 0, + 0, + 3365, + 3366, + 3367, + 0, + 0, + 0, + 0, + 0, + 0, + 3368, + 3369, + 0, + 3370, + 0, + 0, + 3373, + 0, + 0, + 3376, + 0, + 0, + 3377, + 0, + 3379, + 3387, + 0, + 0, + 0, + 0, + 0, + 3390, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3402, + 0, + 3403, + 3436, + 3437, + 3439, + 0, + 0, + 3441, + 0, + 0, + 0, + 3442, + 0, + 0, + 3449, + 0, + 0, + 0, + 3450, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3451, + 0, + 0, + 3452, + 0, + 3453, + 3456, + 0, + 3457, + 0, + 0, + 3458, + 0, + 3459, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3460, + 0, + 0, + 3469, + 3470, + 0, + 0, + 3475, + 0, + 0, + 0, + 3480, + 3487, + 3489, + 0, + 3490, + 0, + 0, + 3491, + 3499, + 0, + 3500, + 0, + 0, + 3501, + 0, + 0, + 0, + 3502, + 0, + 3514, + 0, + 0, + 0, + 3516, + 3517, + 0, + 0, + 0, + 3518, + 0, + 0, + 0, + 0, + 3520, + 3521, + 3522, + 0, + 0, + 3526, + 3530, + 0, + 0, + 0, + 0, + 3531, + 0, + 0, + 0, + 0, + 3536, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3539, + 3541, + 0, + 0, + 3542, + 3544, + 0, + 3547, + 3548, + 0, + 0, + 3550, + 0, + 3553, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3554, + 0, + 3555, + 0, + 3558, + 0, + 3559, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3563, + 0, + 3581, + 0, + 0, + 0, + 3599, + 0, + 0, + 0, + 3600, + 0, + 3601, + 0, + 3602, + 3603, + 0, + 0, + 3606, + 3608, + 0, + 3610, + 3611, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3612, + 3616, + 3619, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3624, + 3628, + 0, + 3629, + 3634, + 3635, + 0, + 0, + 0, + 0, + 0, + 0, + 3636, + 0, + 3637, + 0, + 0, + 3638, + 3651, + 0, + 0, + 0, + 0, + 0, + 0, + 3652, + 3653, + 0, + 0, + 0, + 0, + 3656, + 3657, + 0, + 0, + 0, + 0, + 0, + 3658, + 0, + 0, + 0, + 0, + 3659, + 0, + 3661, + 3663, + 3664, + 0, + 3665, + 0, + 3692, + 0, + 0, + 0, + 3694, + 3696, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3698, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3700, + 0, + 0, + 3701, + 0, + 0, + 0, + 3708, + 3709, + 0, + 0, + 0, + 3711, + 3712, + 0, + 0, + 0, + 0, + 0, + 3723, + 0, + 3724, + 3725, + 0, + 0, + 3726, + 0, + 0, + 0, + 0, + 0, + 0, + 3728, + 3729, + 0, + 3734, + 3735, + 3737, + 0, + 0, + 0, + 3743, + 0, + 3745, + 0, + 0, + 3746, + 0, + 0, + 3747, + 3748, + 0, + 3757, + 0, + 3759, + 3766, + 3767, + 0, + 3768, + 0, + 0, + 0, + 0, + 3769, + 0, + 0, + 3771, + 0, + 3774, + 0, + 0, + 0, + 0, + 0, + 0, + 3775, + 0, + 0, + 0, + 0, + 0, + 0, + 3776, + 0, + 3777, + 3786, + 0, + 3788, + 3789, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3791, + 0, + 3811, + 0, + 0, + 0, + 0, + 0, + 3814, + 3815, + 3816, + 3820, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3821, + 0, + 0, + 3825, + 0, + 0, + 0, + 0, + 3835, + 0, + 0, + 3848, + 3849, + 0, + 0, + 0, + 0, + 3850, + 3851, + 3853, + 0, + 0, + 0, + 0, + 3859, + 0, + 3860, + 3862, + 0, + 0, + 0, + 0, + 0, + 3863, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3873, + 0, + 3874, + 0, + 3875, + 3886, + 0, + 3887, + 0, + 0, + 0, + 0, + 3892, + 3913, + 0, + 3914, + 0, + 0, + 0, + 3925, + 3931, + 0, + 0, + 0, + 0, + 3934, + 3941, + 3942, + 0, + 0, + 0, + 0, + 3943, + 0, + 0, + 0, + 3944, + 0, + 0, + 0, + 0, + 0, + 3945, + 0, + 3947, + 0, + 0, + 0, + 3956, + 3957, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3958, + 0, + 3959, + 3965, + 0, + 0, + 0, + 0, + 3966, + 0, + 0, + 0, + 3967, + 0, + 0, + 0, + 3968, + 3974, + 0, + 0, + 0, + 0, + 0, + 3975, + 3977, + 3978, + 0, + 0, + 0, + 0, + 3980, + 0, + 3985, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 3986, + 4011, + 0, + 0, + 4017, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4018, + 0, + 0, + 0, + 0, + 4019, + 0, + 4023, + 0, + 0, + 0, + 4027, + 4028, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4031, + 4034, + 0, + 0, + 4035, + 4037, + 4039, + 4040, + 0, + 0, + 0, + 0, + 0, + 4059, + 0, + 4060, + 4061, + 0, + 4062, + 4063, + 4066, + 0, + 0, + 4072, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4088, + 0, + 0, + 0, + 0, + 0, + 4091, + 0, + 0, + 0, + 0, + 4094, + 4095, + 0, + 0, + 4096, + 0, + 0, + 0, + 0, + 0, + 4098, + 4099, + 0, + 0, + 0, + 4101, + 0, + 4104, + 0, + 0, + 0, + 4105, + 4108, + 0, + 4113, + 0, + 0, + 4115, + 4116, + 0, + 4126, + 0, + 0, + 4127, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4128, + 4132, + 4133, + 0, + 4134, + 0, + 0, + 0, + 4137, + 0, + 0, + 4141, + 0, + 0, + 0, + 0, + 4144, + 4146, + 4147, + 0, + 0, + 0, + 0, + 4148, + 0, + 0, + 4311, + 0, + 0, + 0, + 4314, + 4329, + 0, + 4331, + 4332, + 0, + 4333, + 0, + 4334, + 0, + 0, + 0, + 4335, + 0, + 4336, + 0, + 0, + 0, + 4337, + 0, + 0, + 0, + 4342, + 4345, + 4346, + 4350, + 0, + 4351, + 4352, + 0, + 4354, + 4355, + 0, + 0, + 4364, + 0, + 0, + 0, + 0, + 4369, + 0, + 0, + 0, + 4373, + 0, + 4374, + 0, + 0, + 0, + 0, + 4377, + 0, + 0, + 0, + 0, + 4378, + 0, + 0, + 0, + 4380, + 0, + 0, + 0, + 4381, + 4382, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4384, + 0, + 0, + 0, + 0, + 4385, + 0, + 0, + 0, + 4386, + 0, + 0, + 0, + 4391, + 4398, + 0, + 0, + 0, + 0, + 4407, + 4409, + 0, + 0, + 0, + 0, + 4410, + 0, + 0, + 4411, + 0, + 4414, + 4415, + 4418, + 0, + 4427, + 4428, + 4430, + 0, + 4431, + 0, + 4448, + 0, + 0, + 0, + 0, + 0, + 4449, + 0, + 0, + 0, + 4451, + 4452, + 0, + 4453, + 4454, + 0, + 4456, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4459, + 0, + 4463, + 0, + 0, + 0, + 0, + 0, + 4466, + 0, + 4467, + 0, + 4469, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4470, + 4471, + 0, + 4473, + 0, + 0, + 4475, + 0, + 0, + 0, + 0, + 4477, + 4478, + 0, + 0, + 0, + 4479, + 4481, + 0, + 4482, + 0, + 4484, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4486, + 0, + 0, + 4488, + 0, + 0, + 4497, + 0, + 4508, + 0, + 0, + 4510, + 4511, + 0, + 4520, + 4523, + 0, + 4524, + 0, + 4525, + 0, + 4527, + 0, + 0, + 4528, + 0, + 0, + 0, + 0, + 4530, + 0, + 4531, + 0, + 0, + 4532, + 0, + 0, + 0, + 4533, + 0, + 0, + 0, + 0, + 0, + 4535, + 0, + 0, + 0, + 4536, + 0, + 0, + 0, + 0, + 0, + 4541, + 4543, + 4544, + 4545, + 4547, + 0, + 4548, + 0, + 0, + 0, + 0, + 4550, + 4551, + 0, + 4553, + 0, + 0, + 0, + 0, + 4562, + 0, + 0, + 4571, + 0, + 0, + 0, + 4574, + 0, + 0, + 0, + 4575, + 0, + 4576, + 0, + 4577, + 0, + 0, + 0, + 4581, + 0, + 0, + 0, + 0, + 0, + 4582, + 0, + 0, + 4586, + 0, + 0, + 0, + 4588, + 0, + 0, + 4597, + 0, + 4598, + 0, + 0, + 0, + 0, + 4616, + 4617, + 0, + 4618, + 0, + 0, + 0, + 0, + 4619, + 0, + 4620, + 0, + 0, + 4621, + 0, + 4624, + 0, + 0, + 0, + 0, + 0, + 4625, + 0, + 0, + 0, + 0, + 4657, + 0, + 4659, + 0, + 4667, + 0, + 0, + 0, + 4668, + 4670, + 0, + 4672, + 0, + 0, + 0, + 0, + 0, + 4673, + 4676, + 0, + 0, + 0, + 0, + 4687, + 0, + 0, + 0, + 0, + 4697, + 0, + 0, + 0, + 0, + 4699, + 0, + 4701, + 0, + 0, + 0, + 0, + 4702, + 0, + 0, + 4706, + 0, + 0, + 4713, + 0, + 0, + 0, + 4714, + 4715, + 4716, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4717, + 0, + 0, + 4720, + 0, + 4721, + 4729, + 4735, + 0, + 0, + 0, + 4737, + 0, + 0, + 0, + 4739, + 0, + 0, + 0, + 4740, + 0, + 0, + 0, + 4741, + 0, + 0, + 0, + 0, + 0, + 4742, + 0, + 4745, + 4746, + 4747, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4748, + 0, + 0, + 0, + 4749, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4751, + 4786, + 0, + 4787, + 0, + 4788, + 4796, + 0, + 0, + 4797, + 4798, + 0, + 4799, + 4806, + 4807, + 0, + 0, + 0, + 0, + 4809, + 4810, + 0, + 0, + 0, + 0, + 0, + 0, + 4811, + 0, + 0, + 0, + 0, + 0, + 4812, + 0, + 4813, + 0, + 0, + 4815, + 0, + 4821, + 4822, + 0, + 0, + 0, + 0, + 4823, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4824, + 0, + 0, + 0, + 0, + 4826, + 0, + 0, + 0, + 4828, + 0, + 4829, + 0, + 0, + 0, + 4843, + 0, + 0, + 4847, + 0, + 4853, + 4855, + 4858, + 0, + 0, + 0, + 0, + 0, + 4859, + 0, + 4864, + 0, + 0, + 4879, + 0, + 0, + 0, + 0, + 4880, + 0, + 0, + 0, + 0, + 4881, + 0, + 4882, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4883, + 0, + 0, + 0, + 0, + 4884, + 0, + 0, + 0, + 0, + 0, + 4886, + 4887, + 4888, + 4894, + 4896, + 0, + 4902, + 0, + 0, + 4905, + 0, + 0, + 4915, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4916, + 4917, + 4919, + 4921, + 0, + 0, + 0, + 0, + 0, + 4926, + 0, + 0, + 0, + 0, + 4927, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 4929, + 0, + 4930, + 4931, + 0, + 4938, + 0, + 4952, + 0, + 4953, + 4957, + 4960, + 4964, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5019, + 5020, + 5022, + 0, + 0, + 0, + 0, + 0, + 5023, + 0, + 0, + 0, + 5024, + 0, + 0, + 0, + 5025, + 0, + 0, + 0, + 0, + 5028, + 0, + 0, + 0, + 0, + 5029, + 5030, + 5031, + 0, + 5033, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5034, + 5035, + 0, + 5036, + 0, + 0, + 5037, + 0, + 0, + 0, + 0, + 5038, + 0, + 0, + 5039, + 0, + 0, + 0, + 5041, + 5042, + 0, + 0, + 0, + 0, + 5044, + 5049, + 5054, + 0, + 5055, + 0, + 5057, + 0, + 0, + 0, + 5060, + 0, + 0, + 0, + 0, + 0, + 5063, + 0, + 5064, + 5065, + 0, + 5067, + 0, + 0, + 0, + 5068, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5076, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5077, + 0, + 0, + 5078, + 5080, + 0, + 0, + 5083, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5085, + 0, + 0, + 0, + 0, + 0, + 0, + 5098, + 5099, + 5101, + 5105, + 5107, + 0, + 5108, + 0, + 5109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5110, + 0, + 0, + 0, + 0, + 0, + 5117, + 5118, + 0, + 5121, + 0, + 5122, + 0, + 0, + 5130, + 0, + 0, + 0, + 5137, + 0, + 0, + 0, + 5148, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5151, + 5154, + 0, + 0, + 0, + 5155, + 0, + 0, + 5156, + 5159, + 5161, + 0, + 0, + 0, + 0, + 5162, + 0, + 0, + 0, + 0, + 5163, + 5164, + 0, + 5166, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5167, + 0, + 0, + 0, + 5172, + 0, + 0, + 0, + 0, + 0, + 0, + 5178, + 5179, + 0, + 0, + 5190, + 0, + 0, + 5191, + 5192, + 5194, + 0, + 0, + 5198, + 5201, + 0, + 0, + 0, + 0, + 0, + 5203, + 0, + 5206, + 5209, + 0, + 0, + 0, + 0, + 0, + 0, + 5213, + 0, + 5214, + 5216, + 0, + 0, + 0, + 0, + 0, + 5217, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5218, + 5219, + 0, + 5231, + 0, + 0, + 5244, + 5249, + 0, + 5254, + 0, + 5255, + 0, + 0, + 5257, + 0, + 0, + 0, + 0, + 0, + 5258, + 0, + 5260, + 5270, + 0, + 5277, + 0, + 0, + 0, + 0, + 0, + 0, + 5280, + 5281, + 5282, + 5283, + 0, + 0, + 0, + 0, + 0, + 5284, + 0, + 5285, + 0, + 0, + 0, + 0, + 0, + 5287, + 5288, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5289, + 5291, + 0, + 0, + 5294, + 0, + 0, + 5295, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5304, + 0, + 0, + 5306, + 5307, + 5308, + 0, + 5309, + 0, + 0, + 5310, + 0, + 0, + 0, + 0, + 5311, + 5312, + 0, + 5313, + 0, + 0, + 0, + 0, + 0, + 5316, + 0, + 0, + 0, + 5317, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5325, + 0, + 0, + 0, + 0, + 0, + 0, + 5326, + 0, + 5327, + 5329, + 0, + 5332, + 0, + 0, + 0, + 0, + 5338, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5340, + 0, + 0, + 5341, + 0, + 0, + 0, + 5342, + 0, + 5343, + 5344, + 0, + 0, + 5345, + 0, + 0, + 0, + 0, + 0, + 0, + 5347, + 5348, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5349, + 0, + 5350, + 0, + 5354, + 0, + 0, + 0, + 0, + 5358, + 0, + 0, + 5359, + 0, + 0, + 5361, + 0, + 0, + 5365, + 0, + 5367, + 0, + 5373, + 0, + 0, + 0, + 5379, + 0, + 0, + 0, + 5380, + 0, + 0, + 0, + 5382, + 0, + 5384, + 0, + 0, + 0, + 0, + 0, + 0, + 5385, + 0, + 0, + 0, + 0, + 5387, + 0, + 0, + 0, + 0, + 0, + 0, + 5388, + 5390, + 5393, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5396, + 0, + 0, + 0, + 0, + 5397, + 5402, + 0, + 0, + 0, + 0, + 0, + 5403, + 0, + 0, + 0, + 5404, + 5405, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5406, + 0, + 0, + 0, + 0, + 5410, + 0, + 0, + 5411, + 0, + 5415, + 0, + 0, + 0, + 0, + 5416, + 5434, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5438, + 0, + 5440, + 0, + 0, + 0, + 0, + 0, + 0, + 5441, + 5442, + 0, + 0, + 0, + 5443, + 5444, + 5447, + 0, + 0, + 5448, + 5449, + 5451, + 0, + 0, + 0, + 5456, + 5457, + 0, + 0, + 0, + 5459, + 0, + 0, + 0, + 5461, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5464, + 0, + 5466, + 0, + 0, + 5467, + 0, + 5470, + 0, + 0, + 5473, + 0, + 0, + 5474, + 0, + 0, + 5476, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5477, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5484, + 0, + 0, + 5485, + 5486, + 0, + 0, + 0, + 0, + 0, + 5488, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5489, + 0, + 0, + 0, + 0, + 0, + 5507, + 0, + 0, + 0, + 5510, + 0, + 5511, + 0, + 0, + 5512, + 0, + 0, + 0, + 5513, + 0, + 5515, + 0, + 0, + 5516, + 5517, + 0, + 5518, + 0, + 0, + 5522, + 0, + 0, + 0, + 0, + 0, + 5534, + 5535, + 0, + 0, + 5536, + 0, + 5538, + 0, + 0, + 5543, + 0, + 5544, + 0, + 0, + 5545, + 0, + 5547, + 0, + 5557, + 0, + 0, + 5558, + 0, + 5560, + 5567, + 0, + 0, + 0, + 0, + 5568, + 0, + 0, + 0, + 5571, + 5573, + 0, + 5574, + 0, + 5575, + 0, + 0, + 0, + 0, + 5577, + 0, + 0, + 5598, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5600, + 5609, + 0, + 0, + 0, + 0, + 5610, + 0, + 0, + 5612, + 0, + 5624, + 0, + 5625, + 0, + 0, + 0, + 5629, + 0, + 5641, + 0, + 5642, + 5643, + 0, + 0, + 0, + 0, + 0, + 0, + 5651, + 0, + 0, + 0, + 5652, + 5653, + 0, + 5661, + 5662, + 5678, + 0, + 5679, + 0, + 0, + 0, + 0, + 5685, + 5686, + 0, + 0, + 0, + 0, + 0, + 5690, + 5692, + 0, + 5703, + 0, + 0, + 0, + 0, + 0, + 5706, + 0, + 0, + 0, + 0, + 5707, + 0, + 0, + 0, + 0, + 0, + 0, + 5708, + 0, + 0, + 5709, + 0, + 5710, + 0, + 0, + 0, + 5712, + 0, + 5733, + 0, + 5734, + 5735, + 0, + 0, + 5744, + 5751, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5752, + 0, + 5754, + 0, + 0, + 0, + 0, + 0, + 0, + 5757, + 5758, + 0, + 5760, + 5761, + 0, + 0, + 0, + 0, + 5763, + 5764, + 5765, + 0, + 5766, + 0, + 5767, + 5768, + 0, + 5770, + 0, + 0, + 0, + 0, + 5776, + 5780, + 0, + 0, + 0, + 0, + 5782, + 0, + 0, + 0, + 0, + 5784, + 0, + 0, + 5788, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5797, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5799, + 0, + 0, + 5801, + 0, + 0, + 0, + 5811, + 0, + 0, + 0, + 0, + 0, + 0, + 5816, + 0, + 0, + 5827, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5830, + 5831, + 0, + 0, + 5832, + 0, + 0, + 5833, + 0, + 5835, + 5844, + 5845, + 0, + 5846, + 0, + 0, + 0, + 0, + 0, + 5850, + 0, + 0, + 0, + 0, + 0, + 5852, + 0, + 5855, + 5857, + 0, + 0, + 5859, + 0, + 5861, + 0, + 0, + 5863, + 0, + 5865, + 0, + 0, + 0, + 5873, + 5875, + 0, + 0, + 0, + 5877, + 0, + 5879, + 0, + 0, + 0, + 5888, + 0, + 0, + 5889, + 5891, + 0, + 5894, + 0, + 0, + 0, + 0, + 0, + 0, + 5895, + 0, + 5897, + 0, + 0, + 0, + 0, + 0, + 0, + 5907, + 0, + 5911, + 0, + 0, + 5912, + 0, + 5913, + 5922, + 5924, + 0, + 5927, + 5928, + 0, + 0, + 0, + 0, + 5929, + 5930, + 0, + 5933, + 0, + 0, + 0, + 0, + 5949, + 0, + 0, + 5951, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 5953, + 0, + 0, + 5954, + 0, + 5959, + 5960, + 5961, + 0, + 5964, + 0, + 0, + 0, + 5976, + 5978, + 5987, + 5990, + 0, + 0, + 0, + 0, + 0, + 5991, + 0, + 5992, + 0, + 0, + 0, + 5994, + 5995, + 0, + 0, + 5996, + 0, + 0, + 6001, + 6003, + 0, + 0, + 0, + 0, + 6007, + 0, + 0, + 0, + 0, + 0, + 6008, + 0, + 0, + 6009, + 0, + 6010, + 0, + 0, + 0, + 6011, + 6015, + 0, + 6017, + 0, + 6019, + 0, + 6023, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6025, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6026, + 0, + 6030, + 0, + 0, + 6032, + 0, + 0, + 0, + 6033, + 6038, + 6040, + 0, + 0, + 0, + 6041, + 6045, + 0, + 0, + 6046, + 0, + 0, + 6053, + 0, + 0, + 6054, + 0, + 6055, + 0, + 0, + 0, + 0, + 0, + 0, + 6057, + 0, + 6063, + 0, + 0, + 0, + 6064, + 0, + 6066, + 6071, + 6072, + 0, + 0, + 0, + 0, + 0, + 0, + 6075, + 6076, + 0, + 0, + 6077, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6078, + 6079, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6080, + 0, + 6083, + 0, + 0, + 0, + 0, + 0, + 6084, + 0, + 0, + 6088, + 0, + 6089, + 0, + 0, + 6093, + 6105, + 0, + 0, + 6107, + 0, + 6110, + 0, + 0, + 0, + 6111, + 6125, + 6126, + 0, + 0, + 0, + 6129, + 0, + 0, + 0, + 0, + 6130, + 0, + 0, + 0, + 6131, + 6134, + 0, + 0, + 0, + 0, + 0, + 0, + 6142, + 0, + 0, + 0, + 0, + 0, + 6144, + 0, + 0, + 6146, + 6151, + 6153, + 0, + 6156, + 0, + 6163, + 0, + 6180, + 6181, + 0, + 0, + 0, + 0, + 0, + 6182, + 0, + 0, + 0, + 0, + 6184, + 6195, + 0, + 0, + 6206, + 0, + 6208, + 0, + 0, + 6212, + 6213, + 6214, + 0, + 6215, + 0, + 0, + 0, + 6228, + 0, + 0, + 0, + 6234, + 0, + 0, + 0, + 0, + 0, + 0, + 6235, + 6240, + 0, + 6242, + 6243, + 6244, + 0, + 6250, + 6255, + 0, + 0, + 0, + 0, + 0, + 6257, + 0, + 0, + 0, + 6258, + 6278, + 0, + 6284, + 0, + 0, + 0, + 6285, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6286, + 0, + 0, + 0, + 6320, + 0, + 0, + 6322, + 6332, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6334, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6335, + 0, + 0, + 6337, + 0, + 6338, + 0, + 6339, + 6340, + 0, + 0, + 6356, + 6357, + 6369, + 0, + 0, + 0, + 6370, + 6371, + 6372, + 0, + 6373, + 0, + 0, + 0, + 0, + 0, + 6376, + 0, + 0, + 0, + 0, + 0, + 6382, + 6383, + 6384, + 0, + 0, + 0, + 0, + 6386, + 0, + 6389, + 6397, + 6400, + 6411, + 0, + 6414, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6415, + 6416, + 0, + 0, + 0, + 0, + 0, + 0, + 6417, + 0, + 0, + 0, + 0, + 6418, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6420, + 0, + 6421, + 6423, + 6425, + 0, + 6429, + 6430, + 0, + 6433, + 6438, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6439, + 6440, + 0, + 0, + 6441, + 0, + 0, + 6444, + 0, + 0, + 0, + 0, + 6446, + 0, + 0, + 0, + 0, + 6447, + 6448, + 0, + 0, + 6450, + 0, + 0, + 0, + 6454, + 0, + 0, + 6455, + 0, + 6461, + 0, + 0, + 0, + 0, + 0, + 0, + 6462, + 0, + 0, + 6463, + 0, + 6464, + 0, + 6465, + 6467, + 0, + 0, + 0, + 6468, + 0, + 6479, + 6480, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6481, + 0, + 0, + 6485, + 6487, + 0, + 0, + 0, + 0, + 0, + 0, + 6493, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6494, + 6495, + 6496, + 0, + 0, + 0, + 0, + 0, + 6498, + 0, + 0, + 0, + 6507, + 6508, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6511, + 6512, + 0, + 0, + 0, + 0, + 6513, + 0, + 0, + 0, + 6514, + 0, + 0, + 0, + 0, + 0, + 6516, + 0, + 0, + 6517, + 6518, + 0, + 0, + 0, + 6519, + 6520, + 6521, + 0, + 6523, + 0, + 0, + 0, + 0, + 6524, + 6528, + 0, + 6530, + 0, + 0, + 6532, + 0, + 6578, + 0, + 0, + 0, + 6583, + 0, + 6584, + 0, + 0, + 0, + 6587, + 0, + 0, + 0, + 6590, + 0, + 6591, + 0, + 0, + 0, + 0, + 0, + 6592, + 0, + 0, + 0, + 0, + 6593, + 6594, + 0, + 0, + 0, + 0, + 0, + 6599, + 6600, + 0, + 0, + 6601, + 6602, + 6604, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6608, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6610, + 6611, + 0, + 6615, + 0, + 6616, + 6618, + 6620, + 0, + 6637, + 0, + 0, + 0, + 0, + 6639, + 0, + 0, + 0, + 0, + 6641, + 0, + 6642, + 0, + 0, + 0, + 6647, + 0, + 6660, + 6663, + 0, + 6664, + 0, + 6666, + 6669, + 0, + 6675, + 6676, + 6677, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6678, + 0, + 0, + 0, + 6679, + 0, + 6680, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6693, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6704, + 6705, + 6706, + 0, + 0, + 6711, + 6713, + 0, + 0, + 0, + 0, + 0, + 6716, + 0, + 0, + 0, + 6717, + 0, + 6719, + 6724, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6725, + 6726, + 0, + 0, + 0, + 0, + 0, + 6728, + 6729, + 6735, + 0, + 6737, + 6742, + 0, + 0, + 6743, + 6750, + 0, + 6751, + 0, + 0, + 6752, + 6753, + 0, + 0, + 0, + 0, + 0, + 0, + 6754, + 0, + 0, + 0, + 0, + 0, + 6756, + 0, + 0, + 0, + 0, + 0, + 0, + 6763, + 0, + 0, + 6764, + 6765, + 0, + 0, + 0, + 6770, + 0, + 0, + 0, + 6776, + 6780, + 0, + 6781, + 0, + 0, + 0, + 6783, + 0, + 6784, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6785, + 0, + 0, + 0, + 6792, + 0, + 0, + 0, + 6793, + 0, + 0, + 6802, + 0, + 0, + 0, + 0, + 0, + 6803, + 0, + 0, + 0, + 6804, + 0, + 0, + 0, + 6812, + 0, + 0, + 6823, + 0, + 6824, + 6839, + 0, + 0, + 0, + 0, + 6852, + 0, + 0, + 6854, + 0, + 6856, + 6857, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6867, + 0, + 6868, + 6870, + 6872, + 0, + 0, + 0, + 6873, + 6874, + 0, + 0, + 0, + 0, + 0, + 6875, + 0, + 0, + 6877, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6878, + 0, + 0, + 0, + 6879, + 0, + 6880, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6887, + 0, + 6888, + 6891, + 6893, + 0, + 6895, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6899, + 0, + 0, + 0, + 0, + 6901, + 0, + 0, + 0, + 0, + 6910, + 0, + 6911, + 0, + 0, + 6912, + 0, + 0, + 6913, + 6914, + 0, + 0, + 0, + 6915, + 0, + 0, + 0, + 6916, + 6919, + 0, + 0, + 0, + 0, + 0, + 0, + 6924, + 0, + 6925, + 0, + 0, + 0, + 6926, + 6927, + 6928, + 0, + 6929, + 0, + 6930, + 0, + 0, + 6931, + 6935, + 0, + 6936, + 0, + 0, + 0, + 0, + 6939, + 6940, + 6941, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6942, + 6948, + 6949, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6952, + 6954, + 6963, + 6965, + 6966, + 0, + 0, + 6967, + 6968, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6969, + 0, + 0, + 6970, + 6979, + 0, + 0, + 6980, + 0, + 0, + 6983, + 0, + 0, + 0, + 0, + 0, + 6984, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6988, + 6990, + 6992, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 6995, + 0, + 0, + 0, + 7012, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7019, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7021, + 0, + 0, + 7022, + 7023, + 7028, + 0, + 7030, + 7033, + 0, + 0, + 0, + 0, + 0, + 0, + 7038, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7039, + 0, + 0, + 0, + 0, + 0, + 7046, + 0, + 7047, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7048, + 7052, + 0, + 0, + 0, + 0, + 0, + 7054, + 0, + 7060, + 0, + 0, + 0, + 0, + 7061, + 0, + 7065, + 0, + 0, + 0, + 0, + 7067, + 7069, + 0, + 7070, + 7071, + 7072, + 0, + 0, + 7078, + 0, + 7080, + 7081, + 0, + 7083, + 0, + 0, + 0, + 7084, + 7087, + 7088, + 0, + 0, + 7090, + 0, + 7093, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7107, + 0, + 0, + 7108, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7110, + 0, + 7114, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7115, + 0, + 7116, + 0, + 0, + 0, + 0, + 0, + 7117, + 0, + 0, + 7118, + 0, + 0, + 7124, + 0, + 7125, + 0, + 0, + 7126, + 0, + 0, + 0, + 0, + 7128, + 0, + 0, + 0, + 0, + 0, + 7129, + 0, + 7130, + 0, + 7132, + 7133, + 0, + 0, + 7134, + 0, + 0, + 7139, + 0, + 7148, + 7150, + 0, + 0, + 0, + 0, + 7152, + 0, + 0, + 0, + 7153, + 7156, + 7157, + 0, + 0, + 0, + 0, + 0, + 7158, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7163, + 7165, + 7169, + 0, + 7171, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7172, + 0, + 7173, + 7181, + 0, + 0, + 0, + 0, + 0, + 7182, + 7185, + 0, + 0, + 0, + 0, + 7187, + 0, + 7201, + 7204, + 0, + 0, + 0, + 0, + 0, + 7206, + 7207, + 0, + 0, + 0, + 0, + 7211, + 7216, + 0, + 7218, + 0, + 0, + 0, + 0, + 7226, + 7228, + 7230, + 7232, + 7233, + 7235, + 7237, + 0, + 0, + 0, + 0, + 7238, + 7241, + 0, + 7242, + 0, + 0, + 7247, + 0, + 0, + 0, + 7266, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7289, + 0, + 0, + 7290, + 7291, + 0, + 0, + 7292, + 0, + 7297, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7300, + 0, + 7301, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7302, + 0, + 0, + 0, + 0, + 7305, + 0, + 0, + 0, + 0, + 7307, + 0, + 7308, + 0, + 7310, + 0, + 7335, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7337, + 0, + 7343, + 7347, + 0, + 0, + 0, + 0, + 0, + 7348, + 0, + 7349, + 7350, + 7352, + 7354, + 0, + 0, + 0, + 0, + 7357, + 0, + 7358, + 7366, + 0, + 7367, + 7368, + 0, + 0, + 7373, + 0, + 0, + 0, + 7374, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7376, + 0, + 0, + 0, + 7377, + 0, + 0, + 0, + 0, + 0, + 7378, + 0, + 7379, + 7380, + 0, + 0, + 0, + 0, + 0, + 7383, + 0, + 0, + 7386, + 0, + 0, + 0, + 0, + 7398, + 0, + 0, + 0, + 7399, + 7400, + 0, + 7401, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7402, + 0, + 0, + 0, + 0, + 0, + 7405, + 0, + 0, + 0, + 0, + 0, + 7406, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7421, + 7427, + 7429, + 0, + 0, + 0, + 7435, + 0, + 0, + 7436, + 0, + 0, + 0, + 7437, + 0, + 0, + 0, + 0, + 0, + 0, + 7438, + 7443, + 0, + 7446, + 0, + 7448, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7456, + 0, + 0, + 0, + 0, + 0, + 7457, + 0, + 0, + 7461, + 0, + 0, + 0, + 0, + 0, + 7462, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7463, + 7466, + 7472, + 0, + 7476, + 0, + 0, + 7490, + 0, + 7491, + 0, + 0, + 7493, + 0, + 0, + 0, + 7498, + 7499, + 0, + 0, + 7508, + 0, + 0, + 0, + 0, + 0, + 7512, + 0, + 0, + 0, + 7513, + 7514, + 7516, + 0, + 0, + 0, + 0, + 7518, + 0, + 0, + 7519, + 7521, + 7522, + 0, + 0, + 0, + 7526, + 0, + 0, + 7529, + 0, + 0, + 7531, + 0, + 7536, + 0, + 7538, + 0, + 7539, + 0, + 0, + 7541, + 7542, + 7546, + 0, + 0, + 0, + 0, + 0, + 7547, + 0, + 7548, + 0, + 0, + 0, + 0, + 0, + 7550, + 0, + 0, + 7552, + 7553, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7554, + 7563, + 0, + 7573, + 0, + 0, + 0, + 0, + 0, + 0, + 7574, + 7576, + 0, + 7578, + 7581, + 7583, + 0, + 0, + 0, + 7584, + 0, + 7587, + 0, + 0, + 0, + 0, + 0, + 7589, + 0, + 0, + 0, + 7594, + 0, + 0, + 7595, + 0, + 0, + 7600, + 7602, + 7610, + 0, + 0, + 0, + 0, + 0, + 7612, + 0, + 7613, + 7614, + 0, + 0, + 7615, + 0, + 0, + 7616, + 0, + 7620, + 0, + 7621, + 7622, + 0, + 7623, + 0, + 0, + 0, + 0, + 7626, + 0, + 0, + 0, + 0, + 7627, + 7629, + 7631, + 0, + 0, + 7633, + 0, + 0, + 0, + 0, + 0, + 7639, + 0, + 7640, + 7642, + 0, + 0, + 7643, + 0, + 0, + 0, + 0, + 7644, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7645, + 0, + 0, + 0, + 0, + 0, + 7661, + 7662, + 7663, + 7665, + 0, + 7666, + 0, + 7667, + 0, + 7684, + 7688, + 7690, + 0, + 7691, + 0, + 0, + 0, + 0, + 0, + 0, + 7692, + 0, + 0, + 7700, + 0, + 7707, + 0, + 7708, + 0, + 7709, + 0, + 7721, + 0, + 0, + 0, + 7722, + 0, + 7724, + 0, + 0, + 0, + 0, + 0, + 0, + 7729, + 7731, + 0, + 7732, + 0, + 7733, + 7735, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7739, + 0, + 0, + 7741, + 7745, + 0, + 7748, + 0, + 0, + 0, + 7751, + 0, + 0, + 0, + 7752, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7753, + 0, + 0, + 7756, + 0, + 7757, + 0, + 7759, + 0, + 7760, + 0, + 0, + 0, + 0, + 7761, + 7768, + 0, + 0, + 7769, + 0, + 0, + 7770, + 0, + 0, + 7771, + 0, + 0, + 7772, + 0, + 0, + 7773, + 0, + 0, + 0, + 0, + 0, + 7778, + 7783, + 0, + 0, + 0, + 0, + 0, + 7784, + 7785, + 0, + 7790, + 0, + 0, + 0, + 0, + 7792, + 0, + 7798, + 0, + 0, + 0, + 0, + 0, + 7799, + 0, + 7810, + 0, + 0, + 7813, + 0, + 7814, + 0, + 7816, + 0, + 7818, + 7824, + 7825, + 7826, + 0, + 7828, + 7830, + 0, + 0, + 0, + 7840, + 0, + 7842, + 0, + 7843, + 0, + 0, + 0, + 0, + 7844, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7846, + 0, + 0, + 0, + 0, + 0, + 7856, + 7857, + 7858, + 7862, + 0, + 7865, + 0, + 0, + 7866, + 0, + 0, + 7913, + 0, + 0, + 0, + 0, + 7914, + 0, + 0, + 7915, + 7917, + 7918, + 7919, + 0, + 7920, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7921, + 7922, + 0, + 7924, + 0, + 0, + 7925, + 0, + 0, + 7927, + 0, + 7930, + 7935, + 0, + 0, + 7937, + 0, + 0, + 0, + 0, + 0, + 0, + 7939, + 0, + 7940, + 0, + 0, + 0, + 0, + 0, + 7941, + 0, + 0, + 0, + 0, + 7945, + 0, + 0, + 0, + 0, + 7949, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7950, + 0, + 7953, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7968, + 0, + 0, + 0, + 0, + 7969, + 7972, + 7992, + 0, + 7993, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 7994, + 0, + 0, + 0, + 0, + 8007, + 8008, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8010, + 0, + 0, + 0, + 8012, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8018, + 0, + 8028, + 8029, + 0, + 0, + 8030, + 0, + 0, + 8032, + 8033, + 0, + 0, + 8034, + 8036, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8037, + 0, + 0, + 0, + 8043, + 8052, + 8059, + 8060, + 0, + 0, + 8061, + 0, + 0, + 0, + 8062, + 0, + 8063, + 0, + 8064, + 0, + 8066, + 8068, + 0, + 0, + 0, + 8080, + 8081, + 0, + 8089, + 0, + 0, + 0, + 0, + 0, + 8092, + 0, + 0, + 0, + 0, + 0, + 0, + 8093, + 8110, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8111, + 0, + 0, + 0, + 0, + 0, + 8112, + 8115, + 0, + 8117, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8120, + 8121, + 8122, + 8128, + 8129, + 8130, + 8131, + 0, + 0, + 8139, + 0, + 0, + 8144, + 0, + 0, + 0, + 0, + 8145, + 8146, + 8153, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8154, + 0, + 8157, + 8160, + 8162, + 0, + 8164, + 8165, + 0, + 0, + 0, + 0, + 8166, + 8167, + 0, + 0, + 8179, + 0, + 0, + 0, + 8185, + 0, + 0, + 0, + 8186, + 0, + 0, + 8187, + 0, + 0, + 0, + 8188, + 0, + 0, + 0, + 0, + 0, + 8204, + 0, + 0, + 0, + 0, + 8210, + 0, + 0, + 0, + 0, + 0, + 8213, + 0, + 8214, + 0, + 0, + 8215, + 0, + 0, + 0, + 0, + 0, + 0, + 8218, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8219, + 0, + 8221, + 0, + 0, + 8222, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8225, + 0, + 0, + 0, + 8233, + 0, + 0, + 8242, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8247, + 0, + 8248, + 8252, + 0, + 8256, + 8257, + 0, + 0, + 8261, + 0, + 8264, + 8265, + 0, + 0, + 0, + 0, + 8267, + 0, + 0, + 0, + 8269, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8270, + 0, + 0, + 0, + 8278, + 0, + 8279, + 8283, + 0, + 0, + 8285, + 8286, + 8289, + 8292, + 0, + 0, + 0, + 0, + 8293, + 8295, + 8299, + 8300, + 8301, + 0, + 0, + 0, + 0, + 0, + 0, + 8304, + 8307, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8321, + 0, + 0, + 0, + 8322, + 8323, + 8325, + 8326, + 8327, + 0, + 0, + 8332, + 8338, + 0, + 0, + 8340, + 0, + 0, + 0, + 0, + 0, + 8350, + 0, + 0, + 8351, + 0, + 8354, + 8355, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8360, + 8372, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8377, + 0, + 0, + 0, + 0, + 8380, + 0, + 0, + 0, + 8383, + 0, + 8384, + 0, + 0, + 0, + 0, + 8386, + 8392, + 0, + 0, + 8394, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8396, + 8397, + 0, + 8398, + 0, + 8399, + 0, + 0, + 0, + 0, + 0, + 8400, + 0, + 8401, + 8410, + 8411, + 0, + 8412, + 8413, + 8422, + 0, + 0, + 0, + 0, + 8423, + 0, + 0, + 0, + 0, + 8424, + 0, + 0, + 8425, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8441, + 8442, + 0, + 0, + 0, + 0, + 0, + 0, + 8443, + 0, + 0, + 8444, + 0, + 8447, + 0, + 0, + 0, + 0, + 8451, + 0, + 8458, + 0, + 8462, + 0, + 0, + 8468, + 0, + 8469, + 0, + 0, + 0, + 8470, + 0, + 8473, + 8479, + 8480, + 0, + 0, + 0, + 0, + 8481, + 8483, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8484, + 0, + 0, + 8490, + 0, + 0, + 0, + 0, + 0, + 0, + 8491, + 8493, + 8494, + 0, + 8528, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8530, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8534, + 8538, + 8540, + 0, + 0, + 8541, + 0, + 0, + 8545, + 0, + 8557, + 0, + 0, + 8569, + 8570, + 0, + 0, + 8571, + 8574, + 8575, + 8579, + 0, + 8583, + 0, + 0, + 0, + 0, + 8591, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8606, + 0, + 8607, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8608, + 0, + 0, + 8609, + 0, + 0, + 0, + 8610, + 0, + 0, + 0, + 8611, + 0, + 0, + 8613, + 8617, + 8621, + 0, + 0, + 8622, + 0, + 8623, + 0, + 8624, + 8625, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8637, + 8638, + 8639, + 8650, + 0, + 0, + 0, + 0, + 8652, + 8654, + 8655, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8656, + 0, + 0, + 0, + 0, + 0, + 8657, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8658, + 0, + 0, + 8659, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8660, + 0, + 0, + 0, + 0, + 0, + 0, + 8661, + 8663, + 8664, + 0, + 0, + 0, + 0, + 8665, + 0, + 8669, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8671, + 8674, + 0, + 8684, + 0, + 8686, + 0, + 0, + 0, + 8689, + 0, + 0, + 0, + 8690, + 0, + 8706, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8710, + 0, + 8711, + 8713, + 8714, + 8724, + 8727, + 8728, + 8733, + 8736, + 0, + 8737, + 8739, + 0, + 0, + 0, + 0, + 8742, + 8743, + 8745, + 8754, + 0, + 0, + 0, + 0, + 8756, + 0, + 0, + 0, + 0, + 0, + 0, + 8757, + 8760, + 0, + 0, + 0, + 0, + 0, + 8762, + 8763, + 8764, + 0, + 8766, + 8769, + 8770, + 8773, + 0, + 8774, + 0, + 8779, + 0, + 0, + 0, + 0, + 8780, + 0, + 0, + 8781, + 0, + 0, + 8783, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8784, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8785, + 0, + 0, + 0, + 0, + 8786, + 0, + 0, + 0, + 0, + 8788, + 8790, + 0, + 0, + 0, + 8803, + 0, + 8813, + 8814, + 0, + 0, + 0, + 0, + 0, + 8815, + 8816, + 0, + 0, + 0, + 0, + 8818, + 0, + 0, + 0, + 0, + 8822, + 8828, + 8829, + 0, + 8831, + 0, + 0, + 0, + 0, + 8833, + 0, + 0, + 0, + 8834, + 0, + 0, + 0, + 8835, + 0, + 8836, + 0, + 0, + 0, + 8837, + 0, + 0, + 0, + 0, + 0, + 0, + 8838, + 8839, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8840, + 0, + 0, + 0, + 8841, + 0, + 8842, + 0, + 0, + 0, + 8846, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8847, + 0, + 8848, + 0, + 0, + 8864, + 0, + 0, + 8866, + 0, + 0, + 8870, + 8872, + 0, + 0, + 8873, + 8874, + 0, + 0, + 0, + 0, + 0, + 0, + 8875, + 0, + 8876, + 0, + 0, + 0, + 0, + 8896, + 8900, + 0, + 0, + 0, + 0, + 8901, + 0, + 0, + 0, + 0, + 0, + 8904, + 0, + 8907, + 0, + 0, + 0, + 0, + 8911, + 8912, + 8913, + 0, + 0, + 0, + 8914, + 0, + 8915, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8916, + 0, + 0, + 0, + 8929, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 8930, + 0, + 8932, + 0, + 8943, + 0, + 0, + 0, + 8945, + 8947, + 0, + 0, + 0, + 0, + 8949, + 0, + 8950, + 0, + 8954, + 8957, + 0, + 0, + 8970, + 0, + 0, + 0, + 0, + 8971, + 0, + 8996, + 0, + 0, + 0, + 0, + 8997, + 9000, + 0, + 0, + 0, + 0, + 9001, + 9002, + 0, + 9004, + 9009, + 9024, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9027, + 9082, + 0, + 0, + 9083, + 9089, + 0, + 0, + 0, + 0, + 0, + 0, + 9090, + 0, + 0, + 0, + 9092, + 0, + 0, + 9093, + 0, + 9095, + 0, + 0, + 9096, + 9097, + 9101, + 9102, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9112, + 0, + 0, + 0, + 0, + 0, + 0, + 9114, + 0, + 0, + 9120, + 0, + 9121, + 9122, + 0, + 0, + 0, + 9123, + 9124, + 0, + 0, + 9125, + 0, + 0, + 9126, + 0, + 9127, + 0, + 0, + 9129, + 9131, + 0, + 0, + 0, + 9132, + 0, + 0, + 9136, + 0, + 9144, + 0, + 0, + 9148, + 0, + 0, + 0, + 0, + 0, + 0, + 9149, + 0, + 9152, + 9163, + 0, + 0, + 9165, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9166, + 0, + 9169, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9170, + 0, + 0, + 0, + 0, + 9172, + 0, + 9174, + 9175, + 9176, + 0, + 9177, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9186, + 0, + 9187, + 0, + 0, + 0, + 9188, + 9189, + 0, + 0, + 9190, + 0, + 0, + 0, + 0, + 9191, + 0, + 0, + 0, + 9193, + 0, + 0, + 0, + 0, + 9197, + 9198, + 0, + 0, + 0, + 9208, + 9211, + 0, + 0, + 0, + 0, + 9216, + 9217, + 0, + 9220, + 0, + 0, + 0, + 0, + 9221, + 9222, + 9223, + 0, + 9224, + 9225, + 0, + 0, + 9227, + 0, + 9228, + 9229, + 0, + 0, + 9230, + 0, + 9232, + 0, + 9233, + 0, + 0, + 0, + 0, + 0, + 9234, + 9235, + 0, + 0, + 9237, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9238, + 9240, + 0, + 0, + 9241, + 0, + 0, + 0, + 0, + 9244, + 0, + 0, + 0, + 0, + 9247, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9248, + 0, + 0, + 0, + 9249, + 0, + 0, + 0, + 0, + 0, + 9250, + 0, + 0, + 0, + 0, + 9251, + 0, + 0, + 9252, + 9255, + 0, + 0, + 0, + 9256, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9257, + 0, + 0, + 9258, + 0, + 0, + 0, + 0, + 0, + 0, + 9259, + 0, + 0, + 0, + 0, + 0, + 9262, + 9263, + 0, + 0, + 9265, + 9266, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9268, + 9271, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9273, + 0, + 0, + 0, + 9276, + 9277, + 9279, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9280, + 0, + 0, + 9293, + 0, + 0, + 0, + 0, + 0, + 9297, + 9301, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9308, + 9309, + 9313, + 9321, + 9322, + 0, + 9326, + 9327, + 0, + 0, + 9477, + 0, + 9479, + 0, + 0, + 0, + 0, + 9482, + 0, + 0, + 0, + 9483, + 0, + 9484, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9485, + 0, + 0, + 9486, + 0, + 0, + 0, + 9489, + 0, + 0, + 0, + 0, + 9490, + 9491, + 0, + 0, + 0, + 0, + 9493, + 0, + 9495, + 9496, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9500, + 0, + 9502, + 0, + 0, + 0, + 0, + 0, + 9504, + 9507, + 0, + 9509, + 0, + 9511, + 0, + 0, + 9513, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9515, + 0, + 0, + 0, + 0, + 0, + 0, + 9516, + 9517, + 0, + 0, + 0, + 0, + 9532, + 0, + 0, + 9533, + 0, + 0, + 9538, + 0, + 9539, + 9540, + 0, + 0, + 0, + 0, + 9541, + 0, + 0, + 0, + 9542, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9544, + 9545, + 0, + 9546, + 0, + 0, + 0, + 0, + 0, + 0, + 9547, + 9548, + 0, + 0, + 0, + 9550, + 0, + 9557, + 0, + 9558, + 0, + 9561, + 0, + 9563, + 9570, + 0, + 9572, + 9574, + 9575, + 0, + 0, + 0, + 9577, + 9592, + 0, + 0, + 9596, + 0, + 0, + 0, + 9598, + 0, + 9600, + 0, + 9601, + 0, + 0, + 0, + 0, + 0, + 0, + 9608, + 0, + 9638, + 9639, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9641, + 0, + 0, + 9643, + 9644, + 9645, + 9646, + 0, + 0, + 0, + 9648, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9650, + 9654, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9655, + 0, + 0, + 0, + 0, + 0, + 9656, + 0, + 9657, + 0, + 0, + 0, + 0, + 9658, + 0, + 0, + 9659, + 0, + 0, + 9664, + 0, + 0, + 9665, + 0, + 9667, + 9669, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9671, + 0, + 9673, + 9681, + 0, + 0, + 0, + 0, + 9682, + 9683, + 9684, + 0, + 0, + 0, + 0, + 9686, + 9698, + 0, + 0, + 9700, + 9701, + 9702, + 0, + 9703, + 9717, + 0, + 0, + 0, + 0, + 9718, + 0, + 9726, + 0, + 0, + 0, + 0, + 9727, + 0, + 0, + 0, + 9728, + 0, + 9742, + 0, + 9744, + 0, + 0, + 0, + 9750, + 0, + 9754, + 9755, + 0, + 0, + 0, + 0, + 0, + 9756, + 0, + 9757, + 9768, + 0, + 9769, + 0, + 0, + 0, + 9770, + 9771, + 0, + 9773, + 0, + 9774, + 0, + 9775, + 0, + 0, + 0, + 9776, + 9777, + 9784, + 0, + 0, + 0, + 9786, + 0, + 9789, + 0, + 0, + 0, + 0, + 9793, + 9794, + 0, + 0, + 0, + 9808, + 0, + 0, + 0, + 0, + 0, + 9811, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9812, + 0, + 9820, + 0, + 9823, + 0, + 9828, + 0, + 0, + 0, + 0, + 9830, + 0, + 0, + 9833, + 9836, + 0, + 0, + 0, + 9840, + 0, + 0, + 0, + 9841, + 0, + 0, + 9842, + 0, + 9845, + 0, + 0, + 0, + 9847, + 9848, + 0, + 0, + 9855, + 0, + 0, + 0, + 0, + 0, + 0, + 9856, + 9863, + 9865, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9866, + 9867, + 9868, + 9873, + 9875, + 0, + 0, + 0, + 0, + 0, + 0, + 9880, + 0, + 9886, + 0, + 0, + 0, + 9887, + 0, + 0, + 9891, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9906, + 9907, + 9908, + 0, + 0, + 0, + 9909, + 0, + 0, + 0, + 0, + 0, + 0, + 9910, + 0, + 0, + 0, + 0, + 9913, + 0, + 0, + 0, + 0, + 9914, + 0, + 0, + 0, + 0, + 0, + 9922, + 0, + 0, + 0, + 0, + 9923, + 9925, + 0, + 0, + 0, + 0, + 0, + 0, + 9930, + 0, + 0, + 0, + 9931, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9932, + 0, + 9939, + 0, + 0, + 9940, + 9962, + 9966, + 0, + 9969, + 9970, + 0, + 0, + 9974, + 0, + 9979, + 9981, + 9982, + 0, + 0, + 0, + 9985, + 0, + 0, + 0, + 0, + 0, + 0, + 9987, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 9988, + 9993, + 0, + 0, + 9994, + 0, + 0, + 0, + 9997, + 0, + 10004, + 0, + 0, + 0, + 0, + 0, + 10007, + 10019, + 10020, + 10022, + 0, + 0, + 0, + 10031, + 0, + 0, + 0, + 0, + 0, + 10032, + 0, + 0, + 10034, + 0, + 10036, + 0, + 0, + 0, + 0, + 10038, + 0, + 10039, + 10040, + 10041, + 10042, + 0, + 0, + 0, + 0, + 0, + 10043, + 0, + 0, + 0, + 0, + 0, + 10045, + 10054, + 0, + 0, + 0, + 0, + 10055, + 0, + 0, + 10057, + 10058, + 0, + 0, + 0, + 0, + 0, + 0, + 10059, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10060, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10063, + 0, + 10066, + 0, + 0, + 0, + 10070, + 0, + 10072, + 0, + 0, + 10076, + 10077, + 0, + 0, + 10084, + 0, + 10087, + 10090, + 10091, + 0, + 0, + 0, + 10094, + 10097, + 0, + 0, + 0, + 0, + 0, + 0, + 10098, + 0, + 0, + 0, + 0, + 0, + 0, + 10103, + 0, + 10104, + 0, + 10108, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10120, + 0, + 0, + 0, + 10122, + 0, + 0, + 10125, + 0, + 0, + 0, + 0, + 10127, + 10128, + 0, + 0, + 10134, + 0, + 10135, + 10136, + 0, + 10137, + 0, + 0, + 10147, + 0, + 10149, + 10150, + 0, + 0, + 10156, + 0, + 10158, + 10159, + 10160, + 10168, + 0, + 0, + 10171, + 0, + 10173, + 0, + 0, + 0, + 10176, + 0, + 0, + 0, + 0, + 10177, + 0, + 0, + 0, + 0, + 10178, + 0, + 0, + 0, + 0, + 10194, + 0, + 10202, + 0, + 0, + 10203, + 10204, + 0, + 10205, + 10206, + 0, + 10207, + 0, + 0, + 0, + 0, + 10209, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10213, + 0, + 0, + 0, + 0, + 0, + 0, + 10217, + 0, + 10229, + 0, + 10230, + 10231, + 0, + 0, + 10232, + 0, + 0, + 10237, + 10238, + 10244, + 0, + 0, + 0, + 0, + 0, + 10250, + 0, + 10252, + 0, + 0, + 0, + 0, + 0, + 0, + 10255, + 0, + 0, + 10257, + 0, + 0, + 0, + 0, + 0, + 0, + 10258, + 0, + 10259, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10260, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10284, + 10288, + 10289, + 0, + 0, + 0, + 10290, + 0, + 10296, + 0, + 0, + 0, + 0, + 0, + 10297, + 0, + 0, + 0, + 0, + 0, + 0, + 10298, + 0, + 0, + 0, + 0, + 10299, + 10303, + 0, + 0, + 0, + 0, + 0, + 10306, + 0, + 0, + 0, + 10307, + 0, + 10308, + 0, + 0, + 0, + 0, + 10311, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10315, + 10317, + 0, + 0, + 0, + 10318, + 10319, + 0, + 10321, + 0, + 10326, + 0, + 10328, + 0, + 0, + 0, + 0, + 10329, + 0, + 0, + 10331, + 0, + 10332, + 0, + 0, + 0, + 0, + 0, + 0, + 10334, + 0, + 0, + 10335, + 10338, + 0, + 0, + 0, + 0, + 0, + 10339, + 10349, + 0, + 0, + 0, + 0, + 0, + 0, + 10351, + 0, + 10353, + 0, + 0, + 0, + 0, + 0, + 0, + 10362, + 0, + 10368, + 0, + 10369, + 0, + 0, + 0, + 10372, + 10373, + 0, + 0, + 0, + 0, + 0, + 10374, + 0, + 0, + 0, + 10375, + 0, + 10376, + 0, + 0, + 10386, + 10388, + 10390, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10391, + 0, + 0, + 10392, + 10394, + 0, + 0, + 10396, + 0, + 10397, + 0, + 10403, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10404, + 0, + 10405, + 10410, + 0, + 0, + 10411, + 0, + 10412, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10421, + 10422, + 10423, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10425, + 0, + 0, + 10427, + 0, + 0, + 10430, + 0, + 0, + 0, + 0, + 0, + 10432, + 0, + 10433, + 10434, + 0, + 0, + 0, + 0, + 10436, + 10437, + 0, + 10438, + 0, + 10439, + 0, + 10444, + 10446, + 0, + 0, + 0, + 0, + 0, + 10448, + 0, + 0, + 0, + 0, + 0, + 10449, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10451, + 0, + 10453, + 0, + 0, + 0, + 10454, + 10457, + 0, + 0, + 10459, + 0, + 10469, + 0, + 0, + 0, + 0, + 0, + 10472, + 10481, + 0, + 0, + 0, + 0, + 0, + 10482, + 10483, + 0, + 10492, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10499, + 0, + 0, + 0, + 10502, + 0, + 0, + 10510, + 0, + 10521, + 10524, + 0, + 0, + 10525, + 10526, + 10528, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10530, + 0, + 0, + 0, + 0, + 10533, + 0, + 10534, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10535, + 10536, + 0, + 0, + 10544, + 0, + 10553, + 10556, + 0, + 10557, + 10559, + 0, + 0, + 0, + 0, + 0, + 10562, + 10563, + 10564, + 0, + 10565, + 0, + 0, + 0, + 10566, + 0, + 10567, + 0, + 0, + 0, + 0, + 10575, + 0, + 0, + 10576, + 0, + 10578, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10585, + 10586, + 10587, + 10589, + 0, + 10590, + 0, + 0, + 10594, + 0, + 0, + 0, + 0, + 0, + 10598, + 0, + 0, + 10601, + 0, + 0, + 0, + 10602, + 0, + 10603, + 0, + 10604, + 0, + 10605, + 0, + 0, + 10607, + 0, + 10626, + 0, + 10627, + 0, + 0, + 0, + 0, + 0, + 10629, + 10630, + 10631, + 0, + 0, + 0, + 10646, + 0, + 0, + 0, + 10647, + 0, + 10650, + 0, + 10651, + 0, + 0, + 0, + 10652, + 10653, + 10655, + 0, + 10658, + 0, + 0, + 10659, + 0, + 10667, + 0, + 0, + 0, + 0, + 10669, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10670, + 0, + 0, + 0, + 10671, + 0, + 0, + 0, + 0, + 10672, + 10673, + 0, + 10674, + 0, + 0, + 0, + 10676, + 0, + 0, + 0, + 0, + 0, + 0, + 10678, + 0, + 10682, + 0, + 0, + 10692, + 0, + 10697, + 0, + 0, + 0, + 0, + 10698, + 0, + 0, + 0, + 10700, + 0, + 0, + 0, + 0, + 0, + 10703, + 0, + 10704, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10705, + 0, + 10715, + 10718, + 10720, + 0, + 0, + 10722, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10723, + 0, + 0, + 0, + 0, + 10726, + 0, + 0, + 0, + 0, + 0, + 10727, + 10730, + 10743, + 0, + 0, + 0, + 0, + 0, + 0, + 10744, + 0, + 0, + 10745, + 0, + 0, + 0, + 0, + 0, + 0, + 10748, + 0, + 0, + 0, + 0, + 10750, + 0, + 0, + 10752, + 10753, + 0, + 0, + 0, + 10756, + 0, + 0, + 0, + 0, + 0, + 0, + 10758, + 0, + 0, + 0, + 10759, + 0, + 10769, + 0, + 0, + 10772, + 0, + 0, + 0, + 0, + 0, + 0, + 10773, + 0, + 0, + 0, + 10777, + 0, + 0, + 10779, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10780, + 10784, + 0, + 0, + 0, + 10789, + 0, + 0, + 0, + 10791, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10795, + 0, + 0, + 10796, + 0, + 10808, + 0, + 10809, + 0, + 0, + 0, + 10810, + 0, + 0, + 0, + 10812, + 0, + 0, + 10814, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10815, + 0, + 0, + 0, + 0, + 10816, + 10817, + 0, + 0, + 0, + 0, + 10819, + 0, + 10820, + 0, + 0, + 0, + 0, + 10821, + 10822, + 10823, + 0, + 10826, + 10849, + 0, + 0, + 0, + 0, + 10850, + 0, + 0, + 10852, + 0, + 10853, + 0, + 0, + 10856, + 0, + 0, + 10857, + 10858, + 10859, + 10860, + 0, + 0, + 0, + 0, + 0, + 0, + 10863, + 0, + 10866, + 10867, + 10872, + 10890, + 0, + 0, + 10891, + 10892, + 0, + 0, + 0, + 0, + 0, + 10893, + 0, + 0, + 0, + 10896, + 10899, + 0, + 0, + 10900, + 10902, + 0, + 0, + 0, + 0, + 0, + 10903, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10905, + 0, + 10906, + 0, + 0, + 0, + 0, + 10908, + 10911, + 0, + 10912, + 0, + 0, + 10916, + 0, + 0, + 0, + 0, + 0, + 10917, + 0, + 10918, + 0, + 0, + 0, + 10923, + 0, + 0, + 0, + 0, + 0, + 10924, + 0, + 0, + 10928, + 10929, + 0, + 0, + 10930, + 0, + 0, + 0, + 10932, + 0, + 0, + 0, + 0, + 10939, + 0, + 0, + 10945, + 0, + 0, + 0, + 10947, + 0, + 0, + 10948, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10958, + 0, + 10960, + 10962, + 0, + 0, + 10964, + 0, + 0, + 0, + 10966, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 10967, + 0, + 0, + 0, + 10968, + 0, + 0, + 0, + 10973, + 0, + 0, + 0, + 0, + 0, + 10975, + 0, + 0, + 0, + 10976, + 10978, + 0, + 0, + 10982, + 10984, + 10987, + 0, + 0, + 10988, + 0, + 10989, + 0, + 0, + 10991, + 0, + 0, + 0, + 0, + 10992, + 0, + 0, + 0, + 10993, + 0, + 10995, + 0, + 0, + 0, + 10996, + 10997, + 0, + 0, + 0, + 10998, + 0, + 10999, + 0, + 11001, + 0, + 0, + 0, + 0, + 0, + 0, + 11010, + 11012, + 0, + 11013, + 11016, + 11017, + 0, + 0, + 11019, + 11020, + 11021, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11022, + 0, + 0, + 11023, + 11029, + 0, + 0, + 0, + 0, + 11031, + 0, + 0, + 0, + 11034, + 0, + 0, + 0, + 0, + 11055, + 0, + 0, + 0, + 0, + 0, + 11056, + 11060, + 0, + 0, + 0, + 0, + 0, + 0, + 11061, + 0, + 0, + 11064, + 11065, + 0, + 11066, + 0, + 11069, + 0, + 11085, + 0, + 0, + 0, + 0, + 0, + 11086, + 0, + 0, + 0, + 11088, + 0, + 0, + 0, + 11094, + 0, + 0, + 0, + 11095, + 11096, + 0, + 0, + 0, + 0, + 0, + 0, + 11097, + 11098, + 0, + 0, + 0, + 0, + 0, + 0, + 11099, + 0, + 0, + 11102, + 11108, + 0, + 0, + 0, + 11109, + 0, + 11114, + 11119, + 0, + 11131, + 0, + 0, + 0, + 11142, + 0, + 0, + 11143, + 0, + 11146, + 0, + 11147, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11148, + 0, + 11149, + 11152, + 11153, + 11154, + 0, + 11156, + 0, + 11157, + 0, + 0, + 0, + 11158, + 0, + 0, + 11159, + 11160, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11163, + 0, + 0, + 11164, + 11166, + 0, + 0, + 0, + 11172, + 11174, + 0, + 0, + 0, + 11176, + 0, + 0, + 0, + 0, + 0, + 11182, + 11183, + 0, + 0, + 0, + 11184, + 11187, + 0, + 0, + 11188, + 11189, + 0, + 0, + 0, + 0, + 0, + 0, + 11194, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11200, + 11202, + 0, + 0, + 0, + 0, + 0, + 0, + 11203, + 0, + 11204, + 0, + 0, + 0, + 0, + 0, + 11205, + 0, + 0, + 0, + 11206, + 0, + 11207, + 0, + 0, + 11209, + 0, + 11211, + 0, + 11214, + 0, + 0, + 11231, + 0, + 0, + 0, + 11293, + 11295, + 0, + 0, + 11296, + 11297, + 11302, + 0, + 0, + 0, + 11307, + 0, + 0, + 0, + 0, + 11309, + 11310, + 0, + 11311, + 0, + 0, + 0, + 11313, + 0, + 11314, + 0, + 0, + 0, + 0, + 11334, + 0, + 11338, + 0, + 0, + 0, + 11339, + 0, + 0, + 0, + 0, + 0, + 11340, + 0, + 11341, + 11342, + 0, + 11344, + 0, + 11345, + 0, + 0, + 0, + 11348, + 11349, + 0, + 0, + 11350, + 0, + 0, + 0, + 11355, + 0, + 0, + 0, + 0, + 0, + 0, + 11356, + 0, + 11357, + 11370, + 0, + 0, + 11371, + 0, + 11374, + 11376, + 0, + 0, + 0, + 11377, + 0, + 0, + 11378, + 11383, + 0, + 11386, + 11399, + 0, + 11400, + 11406, + 0, + 0, + 0, + 11408, + 0, + 0, + 11409, + 11412, + 0, + 0, + 0, + 0, + 11417, + 0, + 0, + 0, + 11418, + 0, + 11421, + 0, + 11426, + 11429, + 0, + 0, + 0, + 0, + 0, + 11430, + 0, + 11437, + 0, + 11438, + 0, + 0, + 0, + 0, + 0, + 11440, + 11453, + 0, + 0, + 0, + 0, + 0, + 0, + 11454, + 0, + 0, + 0, + 0, + 11455, + 0, + 0, + 11456, + 11460, + 11461, + 11463, + 0, + 11469, + 0, + 11473, + 0, + 0, + 0, + 0, + 11474, + 0, + 0, + 0, + 11475, + 0, + 11476, + 11477, + 11480, + 0, + 0, + 0, + 0, + 11481, + 0, + 0, + 11484, + 0, + 0, + 11487, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11497, + 0, + 0, + 11502, + 0, + 11509, + 0, + 0, + 11510, + 11511, + 11513, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11515, + 0, + 0, + 0, + 0, + 11516, + 0, + 11520, + 11521, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11529, + 11530, + 11531, + 11534, + 0, + 0, + 11543, + 0, + 0, + 0, + 0, + 0, + 11547, + 0, + 11548, + 0, + 0, + 0, + 0, + 0, + 11552, + 11556, + 0, + 11557, + 0, + 0, + 11559, + 0, + 11560, + 0, + 0, + 0, + 0, + 0, + 0, + 11561, + 0, + 0, + 11563, + 11564, + 0, + 11565, + 0, + 0, + 0, + 0, + 11567, + 0, + 0, + 0, + 11569, + 0, + 11574, + 0, + 11575, + 0, + 0, + 0, + 11577, + 0, + 11578, + 0, + 0, + 0, + 11580, + 11581, + 0, + 0, + 0, + 11582, + 11584, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11587, + 0, + 11588, + 11591, + 0, + 11595, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11596, + 0, + 11597, + 0, + 0, + 0, + 0, + 11598, + 11601, + 0, + 0, + 0, + 11602, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11603, + 11604, + 0, + 11606, + 0, + 0, + 11608, + 0, + 0, + 0, + 0, + 11610, + 0, + 0, + 11611, + 0, + 0, + 0, + 0, + 11613, + 0, + 11622, + 0, + 0, + 0, + 11623, + 0, + 0, + 0, + 0, + 11625, + 0, + 0, + 11626, + 11627, + 11628, + 11630, + 0, + 0, + 0, + 0, + 0, + 0, + 11639, + 0, + 0, + 11646, + 0, + 11648, + 11649, + 0, + 11650, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11651, + 0, + 0, + 11652, + 11653, + 11656, + 0, + 0, + 11677, + 11679, + 0, + 0, + 0, + 0, + 11680, + 0, + 0, + 11681, + 0, + 11685, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11688, + 0, + 0, + 0, + 11716, + 0, + 11719, + 0, + 0, + 0, + 0, + 0, + 11721, + 0, + 0, + 11724, + 11743, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11745, + 11748, + 11750, + 0, + 0, + 0, + 0, + 0, + 11751, + 0, + 0, + 0, + 11752, + 11754, + 0, + 11755, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11759, + 0, + 0, + 0, + 0, + 0, + 0, + 11760, + 0, + 0, + 0, + 11761, + 0, + 0, + 0, + 0, + 0, + 0, + 11766, + 11767, + 0, + 11772, + 11773, + 0, + 11774, + 0, + 0, + 11775, + 0, + 11777, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11778, + 11780, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11783, + 0, + 11784, + 0, + 0, + 0, + 11785, + 0, + 0, + 0, + 11786, + 0, + 0, + 0, + 0, + 11788, + 0, + 0, + 11789, + 11791, + 11792, + 0, + 0, + 0, + 0, + 11795, + 11834, + 11835, + 11836, + 0, + 0, + 11837, + 0, + 0, + 0, + 11838, + 0, + 0, + 11846, + 11851, + 0, + 11852, + 0, + 11869, + 0, + 0, + 0, + 11871, + 0, + 0, + 0, + 11872, + 11874, + 0, + 0, + 0, + 0, + 0, + 0, + 11875, + 0, + 11876, + 11877, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11883, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11884, + 0, + 11885, + 0, + 11886, + 0, + 0, + 11887, + 0, + 11894, + 11895, + 11897, + 11909, + 11910, + 0, + 11912, + 11918, + 0, + 0, + 11920, + 0, + 11922, + 11924, + 11927, + 11928, + 0, + 0, + 0, + 0, + 11929, + 0, + 11934, + 0, + 0, + 0, + 0, + 0, + 11941, + 11943, + 11944, + 0, + 11945, + 0, + 0, + 0, + 0, + 11948, + 11949, + 0, + 0, + 0, + 0, + 11953, + 0, + 11954, + 0, + 11955, + 0, + 11956, + 0, + 0, + 0, + 0, + 0, + 11957, + 0, + 0, + 11959, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 11961, + 0, + 0, + 0, + 0, + 0, + 11978, + 0, + 0, + 0, + 11979, + 11980, + 11986, + 11987, + 0, + 11992, + 0, + 0, + 0, + 0, + 0, + 11993, + 0, + 0, + 0, + 11994, + 0, + 11999, + 12004, + 12005, + 12006, + 0, + 0, + 0, + 0, + 0, + 12011, + 0, + 0, + 12012, + 12014, + 0, + 0, + 12015, + 0, + 0, + 12019, + 12028, + 0, + 0, + 12029, + 0, + 0, + 12032, + 12033, + 0, + 0, + 0, + 0, + 12034, + 0, + 12041, + 12043, + 0, + 0, + 12044, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12046, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12054, + 12055, + 0, + 12056, + 0, + 0, + 0, + 12060, + 12064, + 0, + 0, + 0, + 0, + 0, + 12065, + 12067, + 12068, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12074, + 0, + 0, + 0, + 12075, + 12076, + 0, + 0, + 0, + 12079, + 0, + 12081, + 12086, + 12087, + 0, + 0, + 12088, + 0, + 0, + 0, + 0, + 12089, + 0, + 12092, + 0, + 0, + 0, + 0, + 12097, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12098, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12102, + 12103, + 12104, + 12111, + 0, + 0, + 12114, + 12116, + 0, + 0, + 0, + 12118, + 0, + 0, + 0, + 12119, + 12120, + 12128, + 0, + 0, + 0, + 0, + 12130, + 0, + 0, + 0, + 0, + 0, + 0, + 12131, + 0, + 0, + 0, + 12132, + 12134, + 0, + 0, + 0, + 0, + 12137, + 0, + 12139, + 0, + 12141, + 0, + 0, + 12142, + 0, + 0, + 0, + 12144, + 0, + 0, + 0, + 0, + 0, + 12145, + 0, + 12148, + 0, + 12153, + 0, + 0, + 0, + 0, + 12154, + 12171, + 12173, + 0, + 0, + 0, + 12175, + 0, + 0, + 0, + 0, + 12178, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12183, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12184, + 0, + 0, + 0, + 12186, + 0, + 0, + 0, + 0, + 0, + 12187, + 12188, + 0, + 0, + 12189, + 0, + 12196, + 0, + 12197, + 0, + 0, + 12198, + 0, + 12201, + 0, + 0, + 0, + 0, + 12203, + 0, + 12209, + 0, + 0, + 0, + 0, + 12210, + 12211, + 12212, + 12213, + 0, + 12217, + 12218, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12222, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12223, + 0, + 0, + 12229, + 0, + 0, + 0, + 0, + 12233, + 0, + 0, + 0, + 0, + 12234, + 0, + 0, + 12236, + 12242, + 0, + 0, + 0, + 12243, + 0, + 0, + 0, + 12244, + 12253, + 0, + 12254, + 12256, + 0, + 12257, + 0, + 0, + 12275, + 0, + 0, + 0, + 0, + 0, + 12277, + 0, + 0, + 0, + 0, + 0, + 12278, + 0, + 12289, + 0, + 0, + 12290, + 0, + 12292, + 12293, + 0, + 0, + 12294, + 0, + 12295, + 0, + 0, + 12296, + 0, + 12297, + 0, + 12298, + 0, + 0, + 0, + 0, + 12301, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12309, + 0, + 12338, + 12340, + 0, + 0, + 0, + 0, + 12341, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12342, + 12343, + 0, + 12344, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12345, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12346, + 0, + 0, + 0, + 0, + 12348, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12350, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12351, + 0, + 12355, + 12356, + 12357, + 0, + 0, + 12367, + 12370, + 12371, + 0, + 0, + 0, + 0, + 0, + 12372, + 12376, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12379, + 0, + 12382, + 0, + 12383, + 0, + 0, + 12384, + 0, + 0, + 0, + 0, + 12393, + 0, + 0, + 12394, + 0, + 0, + 0, + 0, + 12398, + 12403, + 0, + 0, + 12404, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12410, + 0, + 0, + 0, + 12411, + 0, + 0, + 0, + 12412, + 0, + 0, + 0, + 0, + 12420, + 0, + 12421, + 0, + 0, + 0, + 0, + 0, + 12423, + 0, + 12425, + 12429, + 0, + 0, + 0, + 12431, + 12432, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12434, + 0, + 0, + 0, + 0, + 0, + 12435, + 12436, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12437, + 0, + 0, + 0, + 0, + 0, + 12438, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12445, + 0, + 0, + 0, + 12450, + 12451, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12452, + 12475, + 0, + 0, + 12493, + 12494, + 0, + 0, + 0, + 12495, + 0, + 0, + 0, + 0, + 12496, + 12502, + 12509, + 0, + 0, + 0, + 0, + 12510, + 0, + 12512, + 12513, + 0, + 0, + 0, + 0, + 12514, + 0, + 0, + 0, + 12515, + 0, + 12520, + 0, + 0, + 0, + 12524, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12527, + 0, + 0, + 0, + 12528, + 0, + 0, + 0, + 12529, + 0, + 0, + 0, + 0, + 0, + 12530, + 0, + 12535, + 0, + 0, + 12536, + 0, + 12538, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12540, + 0, + 12548, + 0, + 0, + 0, + 0, + 0, + 12550, + 0, + 0, + 0, + 12551, + 12552, + 0, + 0, + 0, + 12554, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12555, + 0, + 0, + 12562, + 0, + 12565, + 0, + 12566, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12569, + 0, + 0, + 0, + 12571, + 12574, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12577, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12578, + 12579, + 12603, + 0, + 12608, + 0, + 0, + 12611, + 0, + 12612, + 0, + 12615, + 0, + 12625, + 0, + 0, + 0, + 0, + 12627, + 12646, + 0, + 12648, + 0, + 0, + 12657, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12670, + 0, + 0, + 12671, + 0, + 12673, + 12677, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12679, + 0, + 12681, + 0, + 12682, + 12693, + 0, + 12694, + 0, + 12697, + 0, + 12701, + 0, + 0, + 0, + 12703, + 12704, + 0, + 0, + 0, + 0, + 12707, + 12737, + 0, + 0, + 12739, + 0, + 0, + 12740, + 0, + 0, + 12742, + 12743, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12745, + 0, + 12746, + 12747, + 0, + 12748, + 0, + 0, + 12759, + 12767, + 0, + 0, + 0, + 0, + 12773, + 0, + 12774, + 12778, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12779, + 0, + 0, + 0, + 0, + 0, + 12780, + 12793, + 0, + 12824, + 0, + 12825, + 0, + 12836, + 0, + 0, + 0, + 0, + 12839, + 0, + 12842, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12843, + 12845, + 0, + 12846, + 0, + 0, + 0, + 0, + 12847, + 0, + 0, + 12850, + 12852, + 12853, + 0, + 0, + 0, + 12854, + 0, + 0, + 0, + 12855, + 0, + 12856, + 0, + 12858, + 0, + 0, + 12859, + 0, + 12862, + 0, + 12863, + 0, + 0, + 12866, + 0, + 12869, + 12872, + 12873, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12875, + 0, + 12877, + 0, + 0, + 12878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12884, + 12885, + 12888, + 0, + 12889, + 0, + 0, + 0, + 0, + 12893, + 0, + 0, + 0, + 12895, + 12896, + 12898, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12902, + 0, + 12909, + 12910, + 0, + 12926, + 0, + 12928, + 0, + 0, + 0, + 12929, + 0, + 12930, + 0, + 0, + 0, + 0, + 12931, + 0, + 12932, + 12933, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12934, + 0, + 12942, + 0, + 0, + 0, + 0, + 12944, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12946, + 0, + 0, + 12948, + 0, + 0, + 12949, + 0, + 0, + 0, + 0, + 12950, + 0, + 0, + 0, + 0, + 12951, + 0, + 12952, + 0, + 12953, + 0, + 0, + 0, + 12954, + 12958, + 12959, + 0, + 0, + 0, + 0, + 0, + 12960, + 12964, + 0, + 0, + 0, + 0, + 0, + 12966, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 12970, + 0, + 12971, + 0, + 0, + 0, + 0, + 0, + 0, + 12972, + 0, + 0, + 12982, + 0, + 0, + 0, + 12984, + 12985, + 0, + 12986, + 12996, + 12997, + 13001, + 13002, + 0, + 0, + 0, + 0, + 13004, + 0, + 0, + 13005, + 0, + 0, + 13007, + 13009, + 0, + 13017, + 0, + 0, + 0, + 13020, + 0, + 13021, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13022, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13024, + 13027, + 0, + 0, + 0, + 0, + 0, + 13028, + 0, + 0, + 13029, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13032, + 0, + 13037, + 0, + 0, + 0, + 0, + 0, + 0, + 13040, + 0, + 0, + 13041, + 0, + 0, + 0, + 13043, + 13044, + 13046, + 0, + 0, + 0, + 0, + 13047, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13049, + 13054, + 0, + 13056, + 0, + 0, + 13060, + 13061, + 0, + 0, + 0, + 0, + 0, + 13067, + 0, + 0, + 13068, + 0, + 13071, + 0, + 0, + 0, + 0, + 0, + 13077, + 13078, + 0, + 0, + 0, + 0, + 0, + 13079, + 13080, + 13081, + 0, + 13082, + 0, + 0, + 0, + 13085, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13086, + 0, + 13087, + 13088, + 0, + 0, + 0, + 0, + 0, + 13094, + 0, + 13099, + 0, + 13100, + 0, + 0, + 0, + 13101, + 0, + 13125, + 13126, + 13128, + 13129, + 0, + 0, + 13130, + 0, + 13131, + 0, + 0, + 0, + 0, + 0, + 0, + 13134, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13150, + 0, + 13168, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13169, + 0, + 0, + 13170, + 0, + 0, + 0, + 0, + 13174, + 0, + 0, + 0, + 13176, + 0, + 0, + 0, + 0, + 0, + 13177, + 0, + 13178, + 13183, + 13187, + 0, + 0, + 0, + 13189, + 0, + 0, + 13190, + 0, + 0, + 13191, + 0, + 0, + 13206, + 0, + 0, + 0, + 13207, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13212, + 0, + 0, + 13219, + 13232, + 0, + 0, + 0, + 13241, + 0, + 13249, + 13253, + 0, + 0, + 0, + 0, + 0, + 13255, + 13259, + 0, + 13260, + 13261, + 0, + 13262, + 0, + 13272, + 0, + 0, + 0, + 0, + 13276, + 0, + 0, + 0, + 0, + 13277, + 13299, + 0, + 0, + 13301, + 13302, + 0, + 0, + 13303, + 0, + 0, + 13305, + 0, + 13310, + 0, + 0, + 0, + 13311, + 0, + 0, + 0, + 0, + 13325, + 0, + 13328, + 0, + 0, + 0, + 13329, + 0, + 0, + 0, + 0, + 0, + 0, + 13330, + 0, + 0, + 13331, + 0, + 13335, + 0, + 0, + 13342, + 0, + 0, + 0, + 0, + 0, + 13343, + 0, + 13354, + 0, + 13362, + 0, + 13366, + 13367, + 13369, + 0, + 0, + 13371, + 13372, + 0, + 13373, + 13374, + 0, + 13376, + 0, + 13380, + 13381, + 13386, + 0, + 13387, + 13388, + 0, + 13389, + 13391, + 13395, + 0, + 0, + 0, + 0, + 0, + 13401, + 13409, + 0, + 13410, + 0, + 0, + 0, + 0, + 13420, + 0, + 0, + 0, + 0, + 0, + 13422, + 0, + 0, + 0, + 0, + 13423, + 0, + 0, + 0, + 0, + 13425, + 0, + 0, + 0, + 0, + 0, + 13427, + 0, + 0, + 0, + 13428, + 0, + 0, + 13430, + 13438, + 0, + 13439, + 0, + 13445, + 0, + 13448, + 13449, + 0, + 0, + 0, + 0, + 0, + 0, + 13451, + 0, + 13457, + 0, + 0, + 0, + 0, + 13458, + 13459, + 0, + 13460, + 0, + 0, + 0, + 0, + 13464, + 13465, + 13466, + 13470, + 0, + 13471, + 13472, + 13474, + 13475, + 0, + 13476, + 0, + 0, + 13478, + 13479, + 0, + 13481, + 0, + 0, + 0, + 0, + 13487, + 0, + 13490, + 0, + 13493, + 0, + 0, + 13494, + 0, + 0, + 13495, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13496, + 13497, + 0, + 13500, + 0, + 0, + 13516, + 13522, + 0, + 0, + 13525, + 13528, + 0, + 0, + 0, + 13530, + 13535, + 0, + 13537, + 13539, + 0, + 13540, + 0, + 13543, + 0, + 13544, + 0, + 0, + 0, + 0, + 0, + 0, + 13545, + 0, + 0, + 0, + 0, + 0, + 0, + 13547, + 0, + 0, + 0, + 13549, + 13555, + 0, + 0, + 0, + 13556, + 13557, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13558, + 0, + 13563, + 0, + 0, + 0, + 0, + 13564, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13566, + 0, + 0, + 0, + 0, + 0, + 0, + 13569, + 0, + 0, + 13571, + 0, + 0, + 0, + 0, + 13573, + 0, + 0, + 0, + 0, + 0, + 0, + 13578, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13581, + 0, + 13586, + 0, + 13595, + 0, + 13600, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13601, + 13603, + 0, + 13604, + 13605, + 13606, + 13607, + 0, + 0, + 13617, + 13618, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13623, + 0, + 13625, + 13627, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13629, + 0, + 0, + 0, + 13634, + 0, + 0, + 0, + 13638, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13654, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13656, + 0, + 13659, + 0, + 0, + 13660, + 0, + 0, + 13662, + 0, + 0, + 0, + 13663, + 0, + 13664, + 0, + 0, + 0, + 0, + 0, + 13668, + 0, + 13669, + 13671, + 0, + 0, + 13672, + 0, + 0, + 0, + 0, + 0, + 0, + 13675, + 13685, + 0, + 13686, + 0, + 0, + 0, + 13687, + 0, + 0, + 0, + 13692, + 13694, + 13697, + 0, + 0, + 0, + 13702, + 0, + 0, + 0, + 0, + 0, + 13705, + 0, + 0, + 0, + 0, + 13707, + 0, + 0, + 0, + 13714, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13715, + 0, + 13716, + 13717, + 0, + 0, + 13719, + 13724, + 13730, + 13731, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13732, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13734, + 0, + 13736, + 0, + 0, + 13737, + 13738, + 13747, + 0, + 13751, + 0, + 0, + 13752, + 0, + 0, + 0, + 13753, + 0, + 13757, + 0, + 0, + 13762, + 13763, + 0, + 13764, + 13765, + 0, + 13766, + 0, + 0, + 13767, + 0, + 0, + 0, + 13768, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13769, + 0, + 0, + 13772, + 0, + 13775, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13776, + 13778, + 13787, + 0, + 0, + 0, + 13797, + 0, + 13798, + 0, + 13801, + 0, + 13804, + 13806, + 0, + 0, + 0, + 0, + 13816, + 13817, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13834, + 0, + 13836, + 0, + 0, + 13838, + 0, + 0, + 13839, + 0, + 13840, + 0, + 0, + 0, + 0, + 13842, + 0, + 0, + 0, + 0, + 0, + 0, + 13843, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13845, + 0, + 0, + 0, + 0, + 0, + 13858, + 0, + 0, + 13860, + 0, + 0, + 13861, + 0, + 0, + 13862, + 13863, + 0, + 13868, + 0, + 13869, + 13870, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13872, + 0, + 0, + 0, + 0, + 13873, + 13878, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13886, + 0, + 13888, + 13889, + 13890, + 0, + 0, + 13891, + 13894, + 0, + 13897, + 13899, + 13900, + 13904, + 0, + 0, + 13906, + 0, + 0, + 0, + 13909, + 0, + 0, + 0, + 13910, + 0, + 0, + 0, + 13911, + 0, + 0, + 0, + 0, + 0, + 13912, + 13917, + 0, + 0, + 0, + 0, + 13918, + 0, + 13919, + 0, + 0, + 13920, + 0, + 0, + 0, + 13921, + 0, + 0, + 13922, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13924, + 0, + 13927, + 0, + 0, + 0, + 0, + 0, + 13932, + 0, + 13933, + 0, + 13934, + 0, + 0, + 13935, + 0, + 13944, + 0, + 0, + 0, + 13954, + 0, + 0, + 13955, + 0, + 0, + 0, + 0, + 13956, + 0, + 13957, + 0, + 13967, + 13969, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 13970, + 13990, + 0, + 13991, + 13994, + 0, + 13995, + 0, + 0, + 0, + 0, + 13996, + 0, + 0, + 13999, + 0, + 0, + 0, + 14018, + 0, + 14019, + 0, + 14021, + 0, + 0, + 0, + 0, + 0, + 0, + 14041, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14043, + 0, + 0, + 0, + 0, + 14046, + 0, + 0, + 0, + 14048, + 14049, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14051, + 0, + 0, + 14052, + 14056, + 0, + 14063, + 0, + 14064, + 14066, + 0, + 0, + 14067, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14068, + 0, + 0, + 0, + 14072, + 0, + 14074, + 14075, + 0, + 14076, + 14079, + 14085, + 14086, + 14087, + 14093, + 0, + 0, + 0, + 0, + 14095, + 0, + 0, + 0, + 0, + 0, + 0, + 14096, + 14097, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14098, + 0, + 14102, + 0, + 0, + 0, + 0, + 0, + 14103, + 0, + 0, + 0, + 14104, + 0, + 0, + 14105, + 0, + 0, + 0, + 14107, + 14108, + 0, + 0, + 14109, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14117, + 0, + 0, + 0, + 0, + 14118, + 0, + 0, + 0, + 0, + 14119, + 0, + 0, + 14120, + 0, + 0, + 14121, + 0, + 14122, + 14127, + 0, + 14128, + 14136, + 0, + 0, + 14138, + 0, + 14140, + 0, + 0, + 0, + 14141, + 14142, + 0, + 0, + 0, + 0, + 14146, + 0, + 0, + 14149, + 0, + 14151, + 0, + 0, + 0, + 14152, + 0, + 0, + 14153, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14154, + 0, + 14156, + 14157, + 0, + 0, + 14159, + 0, + 14161, + 0, + 0, + 0, + 0, + 14162, + 0, + 0, + 0, + 0, + 0, + 0, + 14163, + 0, + 0, + 14173, + 0, + 0, + 0, + 0, + 0, + 0, + 14174, + 0, + 0, + 14176, + 0, + 0, + 14178, + 0, + 0, + 14179, + 14181, + 0, + 0, + 14182, + 14185, + 14187, + 0, + 14190, + 0, + 0, + 14197, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14198, + 0, + 0, + 0, + 0, + 0, + 0, + 14199, + 14200, + 0, + 0, + 0, + 14204, + 0, + 0, + 14208, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14231, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14234, + 0, + 0, + 14235, + 0, + 0, + 0, + 14240, + 14241, + 0, + 0, + 0, + 14246, + 0, + 0, + 0, + 14247, + 0, + 14250, + 0, + 0, + 14251, + 0, + 0, + 14254, + 0, + 0, + 14256, + 0, + 0, + 0, + 14260, + 0, + 14261, + 0, + 0, + 0, + 0, + 14262, + 14267, + 14269, + 0, + 0, + 14277, + 0, + 0, + 14278, + 0, + 14279, + 14282, + 0, + 0, + 0, + 14283, + 0, + 0, + 0, + 14284, + 14285, + 0, + 0, + 0, + 0, + 14286, + 0, + 0, + 0, + 14288, + 0, + 0, + 0, + 14289, + 0, + 14290, + 0, + 14293, + 14301, + 14302, + 14304, + 14305, + 0, + 14307, + 0, + 14308, + 14309, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14311, + 14312, + 0, + 0, + 14317, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14318, + 0, + 0, + 0, + 0, + 14320, + 0, + 0, + 0, + 0, + 14321, + 14322, + 0, + 0, + 0, + 0, + 0, + 14326, + 14329, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14330, + 14331, + 0, + 0, + 0, + 0, + 14332, + 0, + 0, + 0, + 14333, + 0, + 0, + 14337, + 14340, + 0, + 14341, + 0, + 0, + 14342, + 0, + 14345, + 14346, + 0, + 0, + 14347, + 0, + 14362, + 0, + 0, + 0, + 0, + 0, + 14364, + 14365, + 14371, + 0, + 14373, + 0, + 0, + 14374, + 0, + 14379, + 0, + 14400, + 0, + 0, + 0, + 0, + 0, + 14401, + 0, + 0, + 14405, + 0, + 14406, + 0, + 14408, + 14409, + 0, + 0, + 0, + 14417, + 0, + 0, + 14424, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14430, + 0, + 0, + 0, + 14431, + 0, + 0, + 14435, + 0, + 14440, + 0, + 0, + 0, + 0, + 0, + 0, + 14442, + 0, + 0, + 14443, + 0, + 0, + 0, + 0, + 0, + 14446, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14454, + 0, + 14457, + 0, + 14460, + 0, + 0, + 14466, + 0, + 0, + 0, + 0, + 0, + 14467, + 0, + 0, + 0, + 0, + 0, + 0, + 14469, + 0, + 14477, + 0, + 0, + 0, + 0, + 0, + 0, + 14478, + 14482, + 0, + 0, + 0, + 14483, + 0, + 0, + 0, + 14485, + 14486, + 0, + 0, + 0, + 14487, + 14488, + 14489, + 14492, + 14493, + 14494, + 14495, + 14496, + 14497, + 0, + 14499, + 0, + 14501, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14502, + 0, + 14507, + 14512, + 14513, + 14514, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14515, + 14526, + 14530, + 0, + 14537, + 0, + 14544, + 0, + 14547, + 0, + 0, + 14548, + 14550, + 14551, + 0, + 0, + 14552, + 0, + 0, + 0, + 14553, + 0, + 14554, + 0, + 0, + 0, + 0, + 14556, + 14564, + 0, + 0, + 14565, + 14566, + 0, + 0, + 0, + 0, + 0, + 0, + 14568, + 0, + 0, + 14569, + 0, + 0, + 0, + 14571, + 14576, + 0, + 0, + 14577, + 14578, + 14579, + 0, + 0, + 14580, + 0, + 0, + 0, + 0, + 14582, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14583, + 0, + 0, + 0, + 0, + 0, + 14587, + 0, + 14588, + 0, + 0, + 14600, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14601, + 0, + 0, + 14604, + 14605, + 14611, + 0, + 14613, + 0, + 0, + 0, + 0, + 14615, + 0, + 0, + 0, + 0, + 0, + 0, + 14627, + 0, + 14628, + 0, + 0, + 0, + 0, + 14631, + 0, + 14633, + 14634, + 0, + 0, + 0, + 0, + 14635, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14636, + 0, + 0, + 14639, + 14642, + 0, + 0, + 0, + 0, + 14644, + 0, + 0, + 0, + 0, + 14645, + 14646, + 0, + 14653, + 0, + 0, + 14654, + 0, + 14658, + 0, + 14661, + 0, + 0, + 0, + 14665, + 0, + 0, + 0, + 14668, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14669, + 0, + 0, + 14670, + 0, + 0, + 0, + 14680, + 0, + 0, + 14681, + 0, + 0, + 0, + 0, + 0, + 14682, + 14683, + 0, + 0, + 0, + 0, + 14686, + 0, + 0, + 0, + 0, + 14687, + 14697, + 0, + 0, + 0, + 0, + 14699, + 14705, + 14711, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14712, + 0, + 0, + 0, + 14713, + 0, + 0, + 0, + 0, + 14719, + 0, + 14720, + 14721, + 14726, + 0, + 0, + 0, + 14728, + 14729, + 0, + 0, + 0, + 0, + 14731, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14733, + 14736, + 14737, + 0, + 0, + 14740, + 14742, + 0, + 0, + 0, + 14744, + 14753, + 0, + 0, + 0, + 0, + 14755, + 14758, + 14760, + 0, + 0, + 0, + 0, + 0, + 14761, + 14762, + 14765, + 14771, + 0, + 14772, + 0, + 14773, + 14774, + 0, + 0, + 14775, + 0, + 0, + 14776, + 0, + 0, + 0, + 0, + 14777, + 0, + 14779, + 0, + 0, + 14782, + 0, + 0, + 14785, + 14786, + 14788, + 0, + 0, + 0, + 0, + 0, + 14795, + 0, + 0, + 0, + 0, + 0, + 0, + 14798, + 0, + 14803, + 14804, + 14806, + 0, + 0, + 0, + 14809, + 0, + 0, + 0, + 0, + 0, + 0, + 14810, + 0, + 0, + 0, + 0, + 14811, + 0, + 14812, + 0, + 0, + 0, + 0, + 0, + 14815, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14816, + 0, + 14818, + 0, + 0, + 0, + 0, + 0, + 0, + 14819, + 0, + 14820, + 0, + 14823, + 0, + 0, + 0, + 14824, + 0, + 0, + 14826, + 14827, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14830, + 0, + 0, + 0, + 0, + 0, + 14833, + 0, + 14845, + 0, + 0, + 0, + 0, + 0, + 14846, + 0, + 0, + 14847, + 14871, + 0, + 14873, + 0, + 14876, + 0, + 14877, + 14878, + 14880, + 0, + 0, + 0, + 0, + 0, + 14881, + 0, + 14882, + 14894, + 0, + 0, + 0, + 0, + 14895, + 0, + 14907, + 0, + 14908, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14911, + 0, + 0, + 0, + 0, + 14920, + 0, + 0, + 14931, + 0, + 14932, + 14934, + 14935, + 0, + 0, + 14936, + 0, + 14945, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 14947, + 0, + 0, + 14948, + 14949, + 14951, + 0, + 0, + 14952, + 0, + 0, + 0, + 14964, + 14973, + 0, + 0, + 14990, + 0, + 0, + 0, + 0, + 14995, + 0, + 0, + 14998, + 15001, + 0, + 0, + 15002, + 15020, + 0, + 0, + 0, + 0, + 0, + 0, + 15021, + 0, + 15022, + 0, + 0, + 0, + 0, + 15023, + 0, + 0, + 15025, + 15029, + 15033, + 0, + 0, + 0, + 15034, + 0, + 0, + 0, + 15035, + 0, + 0, + 0, + 0, + 0, + 15043, + 15044, + 0, + 0, + 0, + 15045, + 15046, + 15048, + 15050, + 0, + 15065, + 0, + 0, + 0, + 0, + 15066, + 0, + 0, + 15075, + 15082, + 15084, + 0, + 0, + 15085, + 15086, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15088, + 0, + 0, + 0, + 15089, + 0, + 0, + 0, + 0, + 15094, + 0, + 15096, + 0, + 15097, + 0, + 15100, + 0, + 0, + 15102, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15105, + 0, + 0, + 15106, + 0, + 15109, + 15113, + 0, + 0, + 0, + 15115, + 0, + 15118, + 0, + 0, + 0, + 0, + 0, + 0, + 15119, + 0, + 0, + 15120, + 0, + 0, + 0, + 0, + 0, + 15123, + 15129, + 0, + 0, + 0, + 15130, + 0, + 15131, + 0, + 0, + 15134, + 0, + 15135, + 0, + 0, + 0, + 15137, + 15138, + 0, + 0, + 0, + 0, + 0, + 0, + 15139, + 0, + 0, + 0, + 0, + 0, + 15140, + 0, + 0, + 15154, + 15162, + 0, + 15169, + 15170, + 0, + 15175, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15177, + 0, + 15178, + 15179, + 0, + 0, + 0, + 0, + 0, + 15183, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15185, + 15187, + 0, + 15194, + 15195, + 15196, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15204, + 0, + 0, + 0, + 0, + 15206, + 0, + 0, + 0, + 0, + 0, + 15207, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15213, + 0, + 15214, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15232, + 0, + 0, + 0, + 0, + 15234, + 0, + 15238, + 15240, + 0, + 15248, + 0, + 0, + 0, + 0, + 15250, + 15251, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15252, + 0, + 0, + 0, + 15255, + 15262, + 15266, + 0, + 0, + 0, + 15267, + 0, + 0, + 0, + 15277, + 15279, + 0, + 0, + 0, + 15280, + 15281, + 15282, + 0, + 0, + 0, + 0, + 0, + 15285, + 0, + 0, + 0, + 0, + 15289, + 0, + 0, + 15291, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15296, + 15297, + 0, + 0, + 15304, + 0, + 0, + 0, + 0, + 15306, + 0, + 0, + 0, + 0, + 0, + 0, + 15307, + 15308, + 0, + 15309, + 0, + 0, + 15311, + 0, + 0, + 15312, + 15313, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15314, + 15317, + 0, + 0, + 0, + 15318, + 15319, + 0, + 0, + 0, + 0, + 15320, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15321, + 0, + 0, + 0, + 0, + 0, + 15324, + 0, + 15325, + 15326, + 0, + 15330, + 0, + 0, + 0, + 0, + 15334, + 0, + 15335, + 0, + 15341, + 0, + 0, + 15342, + 0, + 0, + 15343, + 15344, + 0, + 0, + 0, + 0, + 15345, + 0, + 0, + 0, + 0, + 15347, + 0, + 0, + 15348, + 15349, + 15350, + 0, + 15356, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15357, + 0, + 15358, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15359, + 15360, + 15364, + 0, + 15380, + 0, + 0, + 0, + 0, + 0, + 15392, + 0, + 0, + 15393, + 0, + 15395, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15396, + 0, + 0, + 15397, + 15398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15399, + 0, + 15400, + 0, + 0, + 0, + 15402, + 0, + 15405, + 15410, + 0, + 0, + 0, + 0, + 15411, + 0, + 0, + 0, + 15412, + 0, + 15416, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15428, + 0, + 15435, + 0, + 0, + 15438, + 0, + 0, + 0, + 0, + 15439, + 0, + 0, + 0, + 15440, + 0, + 0, + 0, + 15441, + 15449, + 15451, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15452, + 0, + 0, + 15455, + 0, + 0, + 0, + 15456, + 0, + 0, + 15458, + 0, + 15460, + 15461, + 0, + 0, + 0, + 0, + 0, + 15462, + 15464, + 0, + 15465, + 0, + 0, + 15466, + 0, + 0, + 15467, + 0, + 0, + 0, + 0, + 0, + 15468, + 0, + 0, + 0, + 0, + 15481, + 0, + 0, + 15484, + 0, + 15485, + 15486, + 0, + 0, + 0, + 15487, + 0, + 0, + 0, + 0, + 0, + 15488, + 0, + 15492, + 15498, + 0, + 0, + 0, + 15499, + 0, + 0, + 0, + 15500, + 0, + 15501, + 0, + 0, + 15512, + 0, + 15522, + 0, + 0, + 0, + 15524, + 0, + 15525, + 15526, + 0, + 0, + 15527, + 0, + 0, + 15545, + 15546, + 0, + 15548, + 15552, + 0, + 15553, + 0, + 0, + 0, + 15554, + 0, + 15555, + 0, + 15557, + 15565, + 15573, + 15577, + 15578, + 0, + 15582, + 0, + 15583, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15586, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15588, + 0, + 0, + 0, + 0, + 0, + 15589, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15593, + 15594, + 0, + 0, + 0, + 0, + 15595, + 0, + 0, + 0, + 0, + 0, + 0, + 15596, + 0, + 0, + 0, + 15597, + 0, + 0, + 0, + 0, + 15600, + 0, + 0, + 15601, + 0, + 0, + 0, + 0, + 15602, + 15603, + 0, + 0, + 0, + 0, + 0, + 0, + 15604, + 0, + 15609, + 0, + 0, + 15612, + 0, + 0, + 15613, + 0, + 0, + 15615, + 15617, + 15618, + 0, + 0, + 15620, + 0, + 15636, + 15637, + 0, + 0, + 15649, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15650, + 0, + 0, + 15651, + 0, + 0, + 0, + 15656, + 0, + 15658, + 0, + 0, + 0, + 15664, + 0, + 0, + 15665, + 0, + 0, + 15668, + 0, + 0, + 0, + 0, + 0, + 15669, + 0, + 0, + 15674, + 0, + 0, + 15675, + 0, + 0, + 0, + 0, + 15676, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15677, + 0, + 0, + 0, + 0, + 15678, + 0, + 0, + 0, + 0, + 0, + 15679, + 0, + 0, + 15681, + 0, + 15686, + 0, + 0, + 0, + 0, + 15687, + 0, + 15688, + 0, + 0, + 15690, + 0, + 0, + 0, + 15697, + 0, + 15699, + 15700, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15701, + 0, + 15702, + 15703, + 0, + 15704, + 0, + 15705, + 0, + 15707, + 0, + 15709, + 0, + 15712, + 15716, + 0, + 15717, + 0, + 15718, + 15720, + 0, + 0, + 0, + 0, + 0, + 15724, + 0, + 0, + 0, + 15725, + 0, + 15726, + 0, + 0, + 0, + 15740, + 0, + 15745, + 15746, + 0, + 0, + 15747, + 0, + 15748, + 0, + 0, + 0, + 0, + 0, + 15749, + 0, + 0, + 0, + 15752, + 0, + 15753, + 0, + 0, + 0, + 0, + 0, + 0, + 15759, + 0, + 0, + 0, + 15765, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15767, + 0, + 0, + 0, + 15771, + 0, + 0, + 15784, + 0, + 0, + 0, + 0, + 15785, + 15790, + 15791, + 0, + 0, + 15792, + 0, + 0, + 0, + 15807, + 0, + 15811, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15818, + 0, + 0, + 0, + 15819, + 0, + 0, + 0, + 0, + 15821, + 0, + 0, + 0, + 0, + 0, + 15822, + 15824, + 0, + 0, + 15827, + 0, + 0, + 15829, + 15831, + 0, + 15832, + 0, + 0, + 15833, + 0, + 15835, + 15838, + 15839, + 15843, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15844, + 0, + 0, + 0, + 0, + 15845, + 15851, + 15856, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15858, + 15860, + 0, + 15861, + 0, + 0, + 0, + 15864, + 0, + 0, + 0, + 0, + 15865, + 0, + 0, + 0, + 0, + 0, + 0, + 15866, + 0, + 15872, + 0, + 0, + 15876, + 0, + 0, + 0, + 0, + 15877, + 15878, + 15883, + 15885, + 0, + 0, + 15888, + 0, + 0, + 0, + 0, + 0, + 15889, + 15890, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15892, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15893, + 0, + 0, + 15894, + 0, + 0, + 0, + 15895, + 0, + 15896, + 15897, + 0, + 15898, + 15901, + 15902, + 0, + 15911, + 15915, + 0, + 15916, + 0, + 15924, + 15935, + 0, + 15937, + 0, + 0, + 0, + 0, + 0, + 15950, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15958, + 0, + 0, + 0, + 15961, + 0, + 0, + 15966, + 0, + 15967, + 0, + 0, + 15977, + 0, + 0, + 15978, + 0, + 0, + 15981, + 15982, + 15983, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 15986, + 0, + 0, + 0, + 15990, + 0, + 15991, + 15995, + 15998, + 0, + 15999, + 0, + 16000, + 0, + 0, + 0, + 0, + 16008, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16009, + 16011, + 0, + 16013, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16014, + 0, + 0, + 16015, + 16023, + 16024, + 16025, + 0, + 0, + 16026, + 0, + 16030, + 0, + 16032, + 0, + 16033, + 0, + 0, + 0, + 0, + 0, + 0, + 16035, + 16036, + 16037, + 0, + 0, + 0, + 0, + 0, + 16039, + 0, + 0, + 0, + 0, + 16041, + 0, + 0, + 0, + 0, + 0, + 16043, + 16044, + 0, + 0, + 16047, + 0, + 0, + 0, + 16048, + 0, + 0, + 16049, + 16050, + 16052, + 0, + 0, + 0, + 0, + 0, + 16055, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16056, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16058, + 16060, + 16061, + 0, + 0, + 16063, + 0, + 0, + 16064, + 0, + 0, + 0, + 16067, + 16068, + 0, + 0, + 16069, + 16078, + 0, + 0, + 0, + 16079, + 0, + 0, + 0, + 16080, + 0, + 16081, + 0, + 0, + 0, + 16088, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16089, + 16093, + 0, + 16097, + 0, + 16103, + 0, + 16104, + 16105, + 0, + 0, + 16256, + 0, + 0, + 16259, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16260, + 16261, + 0, + 0, + 16262, + 0, + 0, + 16263, + 0, + 16268, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16269, + 0, + 0, + 16270, + 16273, + 0, + 16274, + 0, + 0, + 0, + 0, + 16275, + 16276, + 16277, + 16280, + 0, + 0, + 0, + 16281, + 16284, + 0, + 0, + 0, + 16286, + 0, + 16289, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16290, + 0, + 0, + 0, + 0, + 16291, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16292, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16293, + 16295, + 16297, + 0, + 16302, + 0, + 16304, + 0, + 16305, + 0, + 16306, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16307, + 16308, + 16312, + 0, + 0, + 0, + 0, + 0, + 0, + 16313, + 16315, + 0, + 16318, + 0, + 0, + 0, + 16321, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16326, + 16333, + 16336, + 0, + 0, + 0, + 0, + 16337, + 16340, + 0, + 0, + 0, + 0, + 0, + 16345, + 0, + 0, + 16346, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16347, + 0, + 0, + 16348, + 0, + 0, + 0, + 0, + 16349, + 0, + 0, + 0, + 16350, + 0, + 16357, + 0, + 0, + 0, + 0, + 16359, + 16360, + 0, + 0, + 0, + 0, + 16362, + 16363, + 16364, + 16365, + 0, + 0, + 16366, + 0, + 0, + 0, + 0, + 16367, + 16368, + 0, + 16369, + 16374, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16376, + 0, + 0, + 0, + 0, + 16378, + 16379, + 0, + 16380, + 0, + 0, + 0, + 16381, + 16383, + 0, + 0, + 0, + 0, + 0, + 16390, + 0, + 0, + 0, + 16399, + 0, + 16402, + 16404, + 16406, + 16407, + 0, + 0, + 0, + 16409, + 16411, + 0, + 0, + 0, + 0, + 16412, + 0, + 16413, + 16415, + 16423, + 0, + 0, + 0, + 0, + 0, + 16424, + 0, + 0, + 0, + 16428, + 16434, + 16435, + 16449, + 0, + 16450, + 16451, + 0, + 0, + 0, + 16453, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16454, + 0, + 0, + 16456, + 16458, + 0, + 0, + 16459, + 0, + 0, + 16460, + 0, + 0, + 0, + 0, + 16462, + 0, + 16463, + 0, + 0, + 16466, + 0, + 0, + 0, + 0, + 0, + 16479, + 0, + 0, + 16480, + 0, + 16481, + 16484, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16485, + 0, + 0, + 0, + 0, + 0, + 0, + 16489, + 0, + 0, + 0, + 0, + 0, + 16491, + 0, + 0, + 16498, + 0, + 0, + 16503, + 0, + 16505, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16506, + 0, + 0, + 0, + 16508, + 16509, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16511, + 16513, + 0, + 0, + 0, + 16516, + 0, + 16517, + 0, + 16519, + 0, + 16529, + 0, + 0, + 16531, + 0, + 0, + 0, + 0, + 0, + 0, + 16534, + 0, + 0, + 16541, + 16542, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16543, + 16547, + 16548, + 0, + 0, + 0, + 16551, + 0, + 16552, + 0, + 0, + 0, + 16553, + 0, + 0, + 16558, + 0, + 0, + 16562, + 16565, + 0, + 0, + 0, + 16570, + 0, + 0, + 0, + 16573, + 16585, + 0, + 0, + 0, + 16586, + 16587, + 16595, + 0, + 16596, + 0, + 16598, + 0, + 0, + 0, + 16600, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16601, + 0, + 0, + 0, + 0, + 16603, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16604, + 16612, + 0, + 0, + 0, + 0, + 16613, + 0, + 16618, + 0, + 0, + 0, + 16640, + 0, + 0, + 16641, + 0, + 0, + 0, + 0, + 0, + 0, + 16645, + 0, + 0, + 0, + 0, + 16646, + 0, + 0, + 0, + 0, + 0, + 0, + 16651, + 0, + 0, + 0, + 0, + 16653, + 16654, + 0, + 0, + 0, + 16655, + 0, + 0, + 16656, + 16667, + 0, + 0, + 0, + 0, + 16671, + 0, + 16672, + 0, + 0, + 0, + 16673, + 0, + 0, + 0, + 0, + 0, + 16676, + 0, + 16686, + 0, + 0, + 0, + 0, + 16689, + 0, + 16690, + 0, + 16692, + 0, + 16693, + 0, + 16694, + 0, + 16696, + 0, + 0, + 0, + 16705, + 0, + 0, + 0, + 0, + 0, + 0, + 16707, + 0, + 0, + 0, + 16709, + 0, + 0, + 0, + 0, + 16711, + 0, + 16712, + 16713, + 0, + 0, + 0, + 16715, + 0, + 0, + 0, + 0, + 16716, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16718, + 16724, + 0, + 0, + 16726, + 16727, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16728, + 0, + 16729, + 0, + 0, + 16730, + 0, + 0, + 0, + 0, + 0, + 16731, + 0, + 0, + 0, + 16732, + 0, + 0, + 0, + 0, + 16734, + 16738, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16743, + 0, + 0, + 16745, + 0, + 0, + 0, + 0, + 0, + 16749, + 0, + 16752, + 0, + 0, + 0, + 0, + 16756, + 0, + 0, + 16758, + 0, + 16759, + 0, + 0, + 0, + 0, + 0, + 16760, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16762, + 0, + 16769, + 0, + 16770, + 0, + 16772, + 0, + 0, + 0, + 16777, + 16780, + 0, + 0, + 0, + 0, + 0, + 0, + 16781, + 0, + 0, + 16782, + 0, + 16784, + 0, + 0, + 16785, + 16787, + 16792, + 0, + 0, + 16794, + 0, + 0, + 0, + 16798, + 0, + 0, + 16809, + 0, + 0, + 16814, + 16816, + 16817, + 0, + 16819, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16820, + 0, + 0, + 16836, + 16839, + 0, + 0, + 16841, + 16851, + 16857, + 0, + 0, + 16858, + 16859, + 0, + 0, + 16860, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16862, + 0, + 16863, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16864, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16876, + 0, + 16881, + 16882, + 0, + 16885, + 16886, + 0, + 16887, + 0, + 0, + 0, + 16889, + 16891, + 0, + 0, + 0, + 0, + 0, + 16894, + 16895, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 16897, + 0, + 16898, + 0, + 0, + 0, + 0, + 0, + 16913, + 0, + 0, + 16924, + 16925, + 16926, + 0, + 0, + 16927, + 0, + 0, + 0, + 16937, + 16938, + 0, + 0, + 0, + 16940, + 16941, + 0, + 0, + 0, + 16942, + 16945, + 0, + 16946, + 16949, + 16950, + 0, + 0, + 0, + 16952, + 16955, + 0, + 0, + 0, + 16965, + 0, + 16969, + 0, + 0, + 16975, + 0, + 0, + 16976, + 0, + 0, + 0, + 0, + 16978, + 0, + 0, + 16981, + 0, + 16983, + 16989, + 0, + 0, + 0, + 0, + 16990, + 0, + 0, + 16991, + 0, + 0, + 0, + 16993, + 0, + 16994, + 16996, + 17000, + 0, + 0, + 0, + 0, + 0, + 17002, + 17004, + 0, + 17006, + 0, + 0, + 17007, + 0, + 0, + 0, + 0, + 17008, + 17013, + 17014, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17021, + 0, + 17031, + 0, + 0, + 0, + 0, + 0, + 17033, + 17036, + 0, + 17038, + 0, + 0, + 17039, + 0, + 17045, + 0, + 0, + 17046, + 17047, + 0, + 0, + 0, + 0, + 17048, + 0, + 17049, + 17050, + 0, + 17051, + 17053, + 0, + 17054, + 0, + 17055, + 0, + 0, + 0, + 0, + 0, + 17063, + 0, + 0, + 17064, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17065, + 0, + 0, + 17068, + 0, + 0, + 0, + 0, + 0, + 17072, + 0, + 0, + 0, + 0, + 0, + 0, + 17073, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17074, + 0, + 17080, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17081, + 17083, + 17084, + 0, + 0, + 0, + 17085, + 0, + 0, + 0, + 0, + 17092, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17093, + 0, + 17095, + 17102, + 0, + 0, + 0, + 0, + 0, + 0, + 17103, + 0, + 0, + 17105, + 0, + 17107, + 0, + 0, + 0, + 0, + 17114, + 0, + 0, + 0, + 0, + 0, + 17115, + 17125, + 17127, + 0, + 0, + 17128, + 0, + 0, + 0, + 17129, + 17130, + 0, + 17131, + 0, + 0, + 0, + 0, + 0, + 17132, + 17135, + 17145, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17146, + 0, + 17147, + 0, + 17148, + 0, + 0, + 0, + 0, + 0, + 0, + 17149, + 17150, + 0, + 17151, + 17153, + 0, + 17155, + 0, + 0, + 0, + 0, + 17163, + 17171, + 0, + 17174, + 0, + 0, + 0, + 0, + 17179, + 0, + 0, + 17182, + 17185, + 0, + 0, + 0, + 0, + 0, + 17186, + 0, + 0, + 17188, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17189, + 17191, + 0, + 17194, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17195, + 17196, + 17203, + 17204, + 0, + 0, + 17205, + 17217, + 0, + 0, + 0, + 0, + 0, + 17218, + 0, + 0, + 0, + 0, + 17219, + 0, + 17220, + 0, + 17221, + 0, + 0, + 17230, + 0, + 0, + 0, + 0, + 0, + 17236, + 0, + 17238, + 17239, + 0, + 0, + 0, + 17241, + 17244, + 0, + 0, + 17245, + 0, + 17248, + 0, + 0, + 17251, + 0, + 17252, + 0, + 0, + 17264, + 0, + 17266, + 0, + 0, + 0, + 17268, + 0, + 0, + 0, + 0, + 17271, + 17272, + 0, + 17273, + 0, + 17295, + 0, + 17302, + 0, + 17305, + 0, + 0, + 0, + 17306, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17308, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17309, + 0, + 17310, + 17313, + 0, + 0, + 0, + 0, + 17314, + 17315, + 0, + 17317, + 0, + 0, + 0, + 0, + 17318, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17320, + 0, + 0, + 0, + 0, + 0, + 0, + 17334, + 0, + 17344, + 17348, + 0, + 0, + 0, + 17350, + 17351, + 0, + 0, + 17353, + 0, + 0, + 17354, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17355, + 0, + 0, + 0, + 0, + 0, + 0, + 17356, + 17357, + 0, + 0, + 17359, + 0, + 0, + 0, + 17371, + 0, + 17372, + 0, + 0, + 0, + 17393, + 0, + 0, + 0, + 0, + 17394, + 0, + 0, + 0, + 0, + 0, + 17395, + 0, + 0, + 17399, + 0, + 0, + 0, + 17401, + 17417, + 0, + 17418, + 0, + 17419, + 0, + 0, + 0, + 0, + 0, + 17422, + 17423, + 0, + 0, + 0, + 0, + 0, + 17424, + 0, + 0, + 0, + 0, + 0, + 17428, + 17429, + 17433, + 0, + 0, + 0, + 17437, + 0, + 0, + 17441, + 0, + 0, + 17442, + 0, + 0, + 17453, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17454, + 17456, + 17462, + 0, + 0, + 17466, + 0, + 0, + 17468, + 0, + 0, + 17469, + 0, + 0, + 0, + 0, + 17470, + 0, + 17475, + 0, + 0, + 0, + 0, + 0, + 17479, + 0, + 0, + 0, + 17483, + 17484, + 0, + 17485, + 0, + 17486, + 0, + 17491, + 17492, + 0, + 0, + 17493, + 0, + 17494, + 17495, + 0, + 0, + 0, + 17496, + 0, + 0, + 0, + 17497, + 0, + 0, + 0, + 17502, + 0, + 0, + 0, + 0, + 0, + 17503, + 0, + 17505, + 0, + 17507, + 0, + 0, + 0, + 17512, + 17513, + 17514, + 0, + 0, + 17515, + 0, + 0, + 0, + 17519, + 0, + 0, + 0, + 17522, + 0, + 0, + 17523, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17527, + 0, + 0, + 0, + 17528, + 0, + 0, + 0, + 17534, + 0, + 0, + 0, + 0, + 17536, + 0, + 0, + 0, + 17539, + 0, + 17540, + 17543, + 17549, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17556, + 0, + 0, + 17558, + 0, + 17559, + 0, + 0, + 17560, + 0, + 0, + 0, + 17563, + 0, + 0, + 0, + 0, + 0, + 0, + 17564, + 0, + 0, + 17565, + 17566, + 0, + 17567, + 0, + 0, + 0, + 0, + 0, + 0, + 17569, + 17570, + 0, + 17575, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17581, + 0, + 0, + 0, + 17582, + 17583, + 0, + 17586, + 0, + 0, + 17587, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17588, + 0, + 0, + 0, + 0, + 17596, + 17597, + 0, + 0, + 17598, + 17600, + 0, + 0, + 0, + 0, + 0, + 0, + 17601, + 0, + 0, + 0, + 17604, + 0, + 0, + 17605, + 0, + 0, + 17607, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17612, + 0, + 0, + 17618, + 0, + 17621, + 17622, + 0, + 0, + 0, + 0, + 17623, + 0, + 0, + 17624, + 0, + 0, + 17630, + 0, + 0, + 17631, + 17633, + 17634, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17635, + 0, + 0, + 17636, + 0, + 0, + 17637, + 0, + 17638, + 0, + 17640, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17641, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17643, + 0, + 0, + 0, + 0, + 17645, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17646, + 17662, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17663, + 17664, + 0, + 17665, + 17666, + 0, + 0, + 0, + 17669, + 17671, + 17673, + 0, + 17679, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17684, + 0, + 0, + 0, + 17686, + 0, + 17714, + 0, + 0, + 17720, + 17722, + 17726, + 0, + 0, + 17728, + 0, + 0, + 17729, + 0, + 0, + 0, + 17732, + 0, + 17733, + 0, + 17734, + 0, + 0, + 0, + 17735, + 0, + 0, + 0, + 0, + 17737, + 0, + 0, + 0, + 0, + 17739, + 0, + 0, + 0, + 17741, + 17742, + 0, + 0, + 0, + 0, + 17743, + 17744, + 17745, + 0, + 0, + 0, + 17749, + 0, + 17750, + 17751, + 17752, + 17754, + 17761, + 17762, + 0, + 17763, + 0, + 17766, + 0, + 17772, + 0, + 0, + 0, + 0, + 0, + 17775, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17776, + 0, + 0, + 17777, + 0, + 0, + 17778, + 17779, + 0, + 17782, + 17783, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17784, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17821, + 0, + 0, + 0, + 17822, + 0, + 0, + 0, + 17823, + 17825, + 0, + 0, + 0, + 0, + 0, + 17826, + 17831, + 17832, + 17833, + 0, + 0, + 17845, + 0, + 0, + 0, + 17846, + 0, + 0, + 0, + 17848, + 17850, + 17854, + 0, + 17855, + 0, + 0, + 17859, + 0, + 0, + 0, + 0, + 0, + 0, + 17860, + 17861, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 17870, + 17871, + 0, + 0, + 0, + 0, + 0, + 0, + 17872, + 0, + 0, + 0, + 17879, + 0, + 0, + 0, + 17881, + 17883, + 0, + 17884, + 0, + 17885, + 0, + 0, + 17886, + 0, + 0, + 17887, + 17891, + 17953, + 0, + 0, + 0, + 0, + 17954, + 0, + 0, + 17955, + 0, + 17968, + 0, + 0, + 17972, + 0, + 0, + 0, + 0, + 0, + 17974, + 0, + 0, + 0, + 0, + 17976, + 17978, + 0, + 0, + 17983, + 0, + 0, + 0, + 0, + 18003, + 0, + 0, + 0, + 0, + 0, + 18007, + 0, + 0, + 0, + 0, + 0, + 18009, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18010, + 0, + 0, + 0, + 0, + 0, + 0, + 18012, + 0, + 0, + 18014, + 0, + 0, + 0, + 18015, + 0, + 0, + 0, + 18016, + 0, + 18017, + 0, + 0, + 0, + 18030, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18031, + 0, + 0, + 18036, + 18037, + 18038, + 0, + 0, + 18049, + 18056, + 0, + 18057, + 18058, + 0, + 18059, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18062, + 0, + 0, + 0, + 0, + 18064, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18067, + 0, + 0, + 0, + 18068, + 0, + 0, + 18075, + 0, + 0, + 18078, + 18093, + 18094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18097, + 0, + 0, + 0, + 0, + 0, + 18098, + 18100, + 0, + 0, + 0, + 18108, + 0, + 18111, + 0, + 0, + 18112, + 0, + 18113, + 0, + 0, + 18115, + 18116, + 0, + 18118, + 0, + 0, + 0, + 0, + 18121, + 0, + 0, + 0, + 0, + 18123, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18124, + 0, + 0, + 0, + 0, + 18125, + 18126, + 0, + 18127, + 0, + 0, + 18128, + 18135, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18150, + 0, + 0, + 0, + 0, + 0, + 18151, + 18152, + 0, + 0, + 18156, + 18164, + 0, + 18166, + 18171, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18172, + 18183, + 0, + 18184, + 0, + 0, + 0, + 0, + 18185, + 0, + 18187, + 0, + 0, + 0, + 0, + 0, + 18188, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18189, + 0, + 0, + 18190, + 0, + 0, + 18191, + 18192, + 0, + 0, + 18194, + 18195, + 18196, + 0, + 0, + 0, + 18197, + 0, + 18203, + 0, + 18204, + 0, + 0, + 0, + 0, + 18205, + 0, + 0, + 0, + 18207, + 18208, + 0, + 0, + 18214, + 0, + 0, + 0, + 18215, + 18216, + 0, + 0, + 0, + 18220, + 0, + 0, + 18222, + 0, + 0, + 0, + 0, + 0, + 18223, + 0, + 18225, + 18231, + 0, + 18234, + 0, + 18235, + 0, + 0, + 0, + 0, + 18240, + 0, + 0, + 18241, + 18242, + 0, + 0, + 0, + 0, + 0, + 18243, + 18251, + 0, + 18253, + 0, + 18254, + 0, + 0, + 0, + 18266, + 0, + 0, + 0, + 0, + 0, + 0, + 18269, + 18270, + 18271, + 18273, + 18281, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18282, + 0, + 18283, + 0, + 18284, + 0, + 0, + 0, + 0, + 0, + 0, + 18285, + 0, + 18287, + 18289, + 0, + 0, + 18290, + 0, + 0, + 0, + 0, + 18308, + 0, + 0, + 0, + 18310, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18311, + 0, + 18312, + 18313, + 0, + 18315, + 0, + 0, + 18316, + 18320, + 0, + 18331, + 0, + 18332, + 0, + 18336, + 0, + 0, + 0, + 0, + 18337, + 0, + 18340, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18341, + 0, + 18344, + 18345, + 0, + 18346, + 0, + 0, + 0, + 0, + 0, + 18348, + 0, + 18351, + 0, + 0, + 18356, + 0, + 0, + 0, + 0, + 0, + 0, + 18357, + 0, + 0, + 0, + 0, + 0, + 18367, + 0, + 0, + 0, + 18368, + 0, + 18369, + 0, + 18370, + 18371, + 0, + 0, + 0, + 18437, + 18444, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18445, + 18450, + 0, + 0, + 0, + 0, + 18451, + 0, + 18452, + 0, + 0, + 0, + 18453, + 0, + 0, + 0, + 0, + 0, + 18455, + 0, + 0, + 0, + 18456, + 0, + 18457, + 0, + 18460, + 0, + 0, + 18461, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18466, + 0, + 0, + 18467, + 0, + 0, + 0, + 0, + 18473, + 0, + 0, + 0, + 18476, + 0, + 18477, + 0, + 0, + 0, + 18478, + 18479, + 18480, + 0, + 0, + 0, + 18485, + 0, + 0, + 0, + 18486, + 0, + 0, + 0, + 0, + 0, + 0, + 18488, + 18490, + 0, + 0, + 0, + 0, + 0, + 0, + 18491, + 0, + 0, + 0, + 0, + 0, + 18495, + 0, + 0, + 18496, + 0, + 0, + 0, + 0, + 0, + 0, + 18505, + 0, + 18521, + 0, + 18522, + 18523, + 0, + 0, + 0, + 18525, + 18526, + 0, + 0, + 0, + 0, + 0, + 18527, + 0, + 0, + 0, + 0, + 18532, + 18533, + 0, + 18534, + 0, + 0, + 0, + 0, + 0, + 0, + 18535, + 18537, + 0, + 18538, + 0, + 0, + 0, + 0, + 0, + 0, + 18540, + 18541, + 18542, + 18543, + 0, + 18546, + 0, + 0, + 0, + 0, + 18553, + 18556, + 0, + 0, + 18558, + 0, + 0, + 18569, + 18571, + 0, + 0, + 0, + 18572, + 0, + 18574, + 0, + 0, + 0, + 0, + 18586, + 0, + 0, + 0, + 0, + 0, + 18588, + 0, + 0, + 18589, + 0, + 0, + 0, + 0, + 0, + 0, + 18590, + 0, + 18592, + 0, + 0, + 0, + 0, + 18594, + 0, + 0, + 0, + 18596, + 0, + 0, + 18597, + 18598, + 0, + 0, + 18601, + 0, + 0, + 0, + 0, + 18602, + 0, + 0, + 0, + 18603, + 18604, + 0, + 18605, + 0, + 0, + 0, + 0, + 18608, + 0, + 0, + 18611, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18612, + 0, + 18616, + 0, + 0, + 18617, + 18619, + 0, + 0, + 0, + 18628, + 0, + 0, + 0, + 18629, + 0, + 0, + 18630, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18631, + 0, + 18632, + 0, + 0, + 18635, + 18637, + 0, + 0, + 0, + 0, + 0, + 0, + 18641, + 18643, + 18648, + 0, + 18652, + 0, + 0, + 18653, + 0, + 18655, + 18656, + 0, + 0, + 0, + 18657, + 0, + 0, + 18666, + 18674, + 0, + 0, + 0, + 0, + 18677, + 18684, + 18685, + 0, + 0, + 18686, + 0, + 0, + 18690, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18695, + 18696, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18697, + 0, + 0, + 18700, + 0, + 0, + 0, + 0, + 0, + 0, + 18702, + 0, + 18708, + 0, + 0, + 18709, + 0, + 18710, + 0, + 0, + 18711, + 0, + 18714, + 0, + 0, + 18718, + 0, + 0, + 0, + 0, + 0, + 0, + 18719, + 0, + 0, + 18722, + 0, + 18726, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18731, + 0, + 0, + 0, + 0, + 0, + 18739, + 18741, + 0, + 0, + 18742, + 0, + 18743, + 18744, + 18746, + 18748, + 0, + 18752, + 18753, + 0, + 0, + 18754, + 18763, + 0, + 18765, + 0, + 0, + 0, + 18766, + 0, + 0, + 0, + 18769, + 0, + 0, + 0, + 0, + 0, + 18773, + 18778, + 18779, + 18781, + 0, + 0, + 18784, + 18787, + 0, + 18788, + 0, + 18793, + 0, + 0, + 0, + 0, + 0, + 0, + 18795, + 0, + 0, + 18800, + 0, + 0, + 0, + 0, + 0, + 18801, + 18804, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18806, + 0, + 0, + 0, + 18811, + 18815, + 18816, + 0, + 0, + 0, + 0, + 18825, + 0, + 0, + 18827, + 18829, + 0, + 0, + 18830, + 0, + 0, + 0, + 0, + 18831, + 0, + 0, + 18832, + 0, + 0, + 0, + 0, + 18833, + 0, + 18840, + 0, + 18841, + 0, + 18842, + 0, + 0, + 0, + 0, + 18843, + 0, + 18844, + 0, + 0, + 0, + 0, + 0, + 0, + 18845, + 18846, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18848, + 0, + 0, + 0, + 18853, + 18860, + 0, + 0, + 18862, + 18866, + 0, + 0, + 18867, + 18869, + 0, + 0, + 18874, + 18881, + 18891, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18892, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18895, + 0, + 18896, + 0, + 0, + 0, + 18900, + 0, + 0, + 0, + 18901, + 0, + 18902, + 18915, + 18916, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18919, + 0, + 0, + 0, + 0, + 0, + 18920, + 0, + 0, + 0, + 18921, + 18929, + 0, + 0, + 0, + 0, + 18930, + 0, + 0, + 0, + 0, + 0, + 0, + 18932, + 0, + 0, + 0, + 0, + 18934, + 18942, + 0, + 0, + 0, + 18951, + 18957, + 0, + 0, + 0, + 0, + 18958, + 0, + 0, + 0, + 0, + 18959, + 18960, + 0, + 0, + 18961, + 0, + 0, + 18962, + 0, + 0, + 0, + 0, + 18963, + 18964, + 0, + 0, + 0, + 18965, + 0, + 18967, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 18968, + 0, + 18969, + 0, + 18970, + 18973, + 18976, + 0, + 0, + 0, + 0, + 0, + 0, + 18977, + 0, + 0, + 0, + 18981, + 0, + 0, + 0, + 18990, + 0, + 18998, + 0, + 0, + 0, + 0, + 0, + 18999, + 19003, + 0, + 0, + 19005, + 0, + 0, + 0, + 19006, + 0, + 0, + 0, + 0, + 0, + 0, + 19008, + 19011, + 0, + 0, + 19018, + 0, + 0, + 19019, + 0, + 19024, + 0, + 19031, + 19032, + 0, + 19039, + 0, + 19041, + 19050, + 0, + 0, + 0, + 19051, + 19055, + 19056, + 0, + 19059, + 19063, + 19064, + 0, + 0, + 19088, + 0, + 0, + 0, + 19093, + 19094, + 0, + 0, + 0, + 0, + 19095, + 0, + 19096, + 0, + 0, + 0, + 19097, + 0, + 0, + 19098, + 0, + 19099, + 19100, + 0, + 0, + 19103, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19111, + 0, + 0, + 0, + 0, + 0, + 0, + 19112, + 0, + 0, + 0, + 19116, + 19117, + 0, + 19121, + 19122, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19123, + 19124, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19125, + 19126, + 0, + 19128, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19129, + 19130, + 19131, + 19132, + 0, + 0, + 19146, + 0, + 0, + 19147, + 19156, + 19158, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19182, + 19185, + 0, + 0, + 19187, + 0, + 0, + 0, + 19193, + 0, + 0, + 0, + 0, + 0, + 19194, + 0, + 19197, + 0, + 0, + 0, + 0, + 19198, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19202, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19203, + 0, + 19205, + 19210, + 0, + 0, + 0, + 19213, + 0, + 19218, + 0, + 0, + 0, + 19223, + 19229, + 0, + 0, + 19230, + 0, + 0, + 19231, + 19232, + 19233, + 19239, + 0, + 0, + 0, + 0, + 0, + 19240, + 0, + 19248, + 19249, + 0, + 0, + 0, + 0, + 19254, + 0, + 19256, + 19258, + 19259, + 0, + 0, + 19261, + 0, + 19266, + 0, + 0, + 0, + 19272, + 0, + 19278, + 19281, + 19282, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19283, + 0, + 0, + 19284, + 0, + 0, + 19285, + 19287, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19288, + 19291, + 0, + 19292, + 0, + 0, + 0, + 0, + 19297, + 0, + 19298, + 0, + 0, + 0, + 0, + 19302, + 19303, + 0, + 0, + 0, + 0, + 19304, + 19305, + 0, + 0, + 0, + 0, + 19314, + 0, + 0, + 19315, + 0, + 0, + 19321, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19322, + 0, + 19333, + 0, + 19334, + 19335, + 0, + 19336, + 19337, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19346, + 0, + 0, + 19353, + 0, + 19354, + 19362, + 0, + 19366, + 19367, + 0, + 0, + 19369, + 0, + 19375, + 0, + 19377, + 19380, + 19388, + 0, + 0, + 0, + 0, + 0, + 19389, + 19390, + 0, + 0, + 0, + 0, + 19392, + 0, + 0, + 0, + 0, + 0, + 19402, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19412, + 0, + 0, + 19413, + 19422, + 0, + 19424, + 0, + 0, + 0, + 19425, + 0, + 0, + 0, + 19428, + 0, + 0, + 0, + 0, + 19431, + 0, + 0, + 0, + 0, + 0, + 19432, + 0, + 0, + 0, + 0, + 0, + 19448, + 19459, + 0, + 0, + 19461, + 0, + 19462, + 19463, + 0, + 19467, + 19474, + 19482, + 0, + 0, + 0, + 0, + 19494, + 0, + 0, + 0, + 0, + 19501, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19502, + 19504, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19505, + 0, + 0, + 0, + 0, + 19506, + 19507, + 0, + 0, + 0, + 19508, + 0, + 0, + 19511, + 0, + 0, + 19514, + 0, + 19515, + 0, + 19516, + 0, + 19518, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19530, + 0, + 19537, + 19538, + 0, + 19543, + 19546, + 0, + 19547, + 19551, + 0, + 0, + 0, + 0, + 0, + 0, + 19552, + 19553, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19555, + 0, + 0, + 19556, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19560, + 19561, + 0, + 0, + 19562, + 0, + 0, + 0, + 0, + 0, + 0, + 19565, + 19567, + 0, + 19568, + 0, + 0, + 0, + 19569, + 19570, + 0, + 19578, + 0, + 0, + 0, + 0, + 19580, + 0, + 0, + 0, + 0, + 19581, + 19584, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19585, + 19586, + 0, + 0, + 0, + 19587, + 19588, + 0, + 19589, + 0, + 0, + 0, + 0, + 0, + 0, + 19592, + 19593, + 19599, + 0, + 19600, + 0, + 0, + 19604, + 0, + 0, + 19605, + 0, + 19606, + 19608, + 19610, + 0, + 19613, + 19614, + 0, + 0, + 0, + 0, + 0, + 0, + 19616, + 19617, + 0, + 0, + 19618, + 0, + 0, + 19619, + 0, + 0, + 0, + 19620, + 19621, + 19631, + 0, + 0, + 19632, + 19634, + 19636, + 0, + 19643, + 0, + 0, + 19644, + 19658, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19659, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19675, + 19677, + 0, + 0, + 0, + 0, + 19679, + 0, + 19683, + 0, + 19684, + 0, + 0, + 0, + 0, + 0, + 0, + 19687, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19688, + 19689, + 19692, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19695, + 19697, + 0, + 0, + 0, + 0, + 0, + 19698, + 19699, + 0, + 0, + 19700, + 0, + 19702, + 0, + 0, + 19703, + 0, + 0, + 0, + 0, + 0, + 0, + 19704, + 19708, + 0, + 19710, + 0, + 19713, + 0, + 0, + 0, + 19715, + 0, + 0, + 0, + 0, + 19718, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19720, + 0, + 19722, + 0, + 0, + 19725, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19730, + 0, + 0, + 0, + 0, + 0, + 19731, + 0, + 19734, + 19735, + 19739, + 0, + 0, + 19740, + 0, + 19741, + 0, + 0, + 0, + 19746, + 0, + 0, + 19747, + 0, + 19771, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19772, + 19775, + 0, + 0, + 0, + 0, + 0, + 0, + 19778, + 0, + 0, + 0, + 0, + 0, + 19779, + 0, + 0, + 19780, + 19790, + 0, + 19791, + 0, + 0, + 19792, + 0, + 0, + 0, + 19793, + 0, + 0, + 19796, + 19797, + 0, + 0, + 0, + 19799, + 0, + 0, + 0, + 19801, + 0, + 0, + 0, + 0, + 19803, + 0, + 19804, + 0, + 19805, + 0, + 0, + 19807, + 0, + 0, + 0, + 19808, + 0, + 0, + 0, + 0, + 0, + 0, + 19809, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19816, + 0, + 19821, + 0, + 19822, + 19830, + 19831, + 0, + 0, + 0, + 19833, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19838, + 0, + 0, + 0, + 0, + 19839, + 0, + 0, + 19843, + 0, + 0, + 0, + 0, + 19845, + 0, + 0, + 0, + 0, + 19847, + 0, + 0, + 19848, + 0, + 19849, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19851, + 0, + 0, + 0, + 19854, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19864, + 0, + 19865, + 0, + 19866, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19868, + 0, + 0, + 19870, + 0, + 0, + 19871, + 0, + 0, + 19872, + 19873, + 19875, + 0, + 19880, + 19882, + 19884, + 0, + 0, + 19885, + 19886, + 19888, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19890, + 19892, + 19893, + 0, + 0, + 19894, + 0, + 0, + 0, + 19895, + 0, + 19896, + 19902, + 0, + 0, + 19903, + 0, + 0, + 19905, + 0, + 0, + 0, + 19906, + 0, + 19908, + 0, + 19909, + 19911, + 0, + 0, + 0, + 19913, + 19920, + 0, + 19938, + 19939, + 19940, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 19942, + 0, + 19943, + 0, + 19945, + 0, + 0, + 0, + 19951, + 19952, + 19954, + 19960, + 0, + 19965, + 0, + 19971, + 0, + 0, + 0, + 0, + 0, + 19975, + 0, + 19976, + 0, + 19990, + 0, + 0, + 19991, + 0, + 19993, + 0, + 19995, + 0, + 0, + 0, + 19998, + 19999, + 20001, + 0, + 20003, + 20005, + 0, + 20011, + 20012, + 0, + 0, + 0, + 0, + 0, + 0, + 20014, + 0, + 20020, + 0, + 0, + 0, + 0, + 20021, + 0, + 0, + 0, + 0, + 0, + 20023, + 20024, + 0, + 0, + 0, + 0, + 0, + 20025, + 0, + 0, + 20027, + 0, + 0, + 20029, + 0, + 0, + 20032, + 0, + 0, + 0, + 0, + 20044, + 20045, + 0, + 20048, + 20049, + 0, + 0, + 20050, + 0, + 20052, + 0, + 0, + 20054, + 20057, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20059, + 0, + 0, + 20061, + 0, + 20062, + 0, + 20064, + 0, + 0, + 20066, + 0, + 0, + 20067, + 0, + 0, + 0, + 0, + 20069, + 0, + 0, + 0, + 0, + 0, + 0, + 20070, + 20071, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20072, + 0, + 0, + 20073, + 20074, + 0, + 0, + 0, + 0, + 0, + 20075, + 0, + 20078, + 0, + 0, + 0, + 0, + 20080, + 0, + 20081, + 0, + 0, + 0, + 0, + 0, + 0, + 20095, + 0, + 20098, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20107, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20112, + 0, + 0, + 0, + 20113, + 20114, + 0, + 0, + 0, + 20115, + 20123, + 20124, + 0, + 0, + 0, + 20131, + 20133, + 20134, + 0, + 0, + 0, + 0, + 20136, + 0, + 0, + 20137, + 20138, + 20150, + 0, + 20152, + 0, + 0, + 0, + 20153, + 0, + 0, + 20154, + 0, + 0, + 0, + 20158, + 0, + 20163, + 0, + 0, + 20164, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20166, + 0, + 20168, + 0, + 20170, + 0, + 20175, + 0, + 0, + 20178, + 0, + 0, + 0, + 0, + 20223, + 0, + 0, + 0, + 0, + 20224, + 0, + 20226, + 0, + 0, + 20230, + 0, + 20231, + 0, + 0, + 0, + 0, + 20232, + 0, + 0, + 20233, + 20234, + 0, + 20244, + 0, + 20247, + 0, + 0, + 0, + 0, + 0, + 0, + 20249, + 0, + 0, + 0, + 20250, + 0, + 0, + 0, + 0, + 20251, + 0, + 20253, + 0, + 20254, + 0, + 0, + 0, + 0, + 20256, + 0, + 0, + 20264, + 0, + 0, + 0, + 0, + 20266, + 0, + 0, + 0, + 20278, + 0, + 0, + 20279, + 20282, + 0, + 0, + 0, + 0, + 0, + 20283, + 0, + 20284, + 0, + 20285, + 0, + 20287, + 20290, + 0, + 0, + 0, + 0, + 20292, + 0, + 0, + 0, + 0, + 20293, + 20297, + 0, + 0, + 0, + 0, + 0, + 0, + 20299, + 0, + 20300, + 20303, + 0, + 0, + 0, + 0, + 0, + 0, + 20307, + 0, + 0, + 20308, + 0, + 20309, + 0, + 20310, + 0, + 0, + 0, + 0, + 0, + 0, + 20312, + 0, + 0, + 0, + 20314, + 0, + 0, + 0, + 0, + 20315, + 20316, + 0, + 20322, + 0, + 0, + 0, + 0, + 0, + 0, + 20339, + 0, + 0, + 0, + 20342, + 0, + 0, + 0, + 0, + 20352, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20362, + 0, + 0, + 20365, + 0, + 20375, + 20377, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20378, + 20379, + 0, + 20380, + 0, + 0, + 20381, + 0, + 20382, + 0, + 20383, + 0, + 20388, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20390, + 20392, + 20393, + 0, + 0, + 20395, + 0, + 0, + 0, + 0, + 0, + 20396, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20398, + 20415, + 0, + 0, + 0, + 20417, + 0, + 0, + 20420, + 0, + 0, + 20426, + 20428, + 0, + 20431, + 0, + 0, + 20432, + 0, + 20433, + 20434, + 20435, + 0, + 0, + 0, + 0, + 20440, + 0, + 0, + 0, + 0, + 0, + 20442, + 0, + 20443, + 0, + 20446, + 0, + 0, + 0, + 0, + 20448, + 0, + 20451, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20452, + 20453, + 0, + 0, + 20454, + 0, + 0, + 0, + 0, + 0, + 0, + 20457, + 0, + 20458, + 0, + 0, + 0, + 20465, + 0, + 0, + 0, + 0, + 0, + 20469, + 0, + 0, + 0, + 20473, + 0, + 20476, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20477, + 0, + 0, + 20485, + 0, + 0, + 20486, + 0, + 0, + 20487, + 0, + 20496, + 0, + 20497, + 0, + 0, + 20498, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20499, + 20500, + 0, + 20501, + 0, + 0, + 0, + 0, + 0, + 20520, + 20527, + 0, + 20529, + 0, + 0, + 0, + 0, + 20539, + 0, + 0, + 20540, + 0, + 0, + 0, + 20543, + 0, + 0, + 0, + 20546, + 0, + 0, + 0, + 0, + 0, + 20548, + 0, + 0, + 20563, + 0, + 0, + 20564, + 0, + 20566, + 0, + 0, + 0, + 0, + 0, + 20589, + 0, + 0, + 0, + 0, + 20590, + 0, + 0, + 20593, + 20594, + 0, + 0, + 0, + 0, + 20595, + 0, + 20597, + 20598, + 0, + 0, + 0, + 20618, + 20620, + 0, + 0, + 0, + 0, + 20621, + 0, + 0, + 0, + 0, + 20627, + 0, + 0, + 0, + 0, + 0, + 20628, + 0, + 0, + 0, + 20629, + 0, + 20630, + 0, + 0, + 20639, + 0, + 0, + 0, + 0, + 0, + 20707, + 0, + 0, + 20709, + 0, + 0, + 0, + 20713, + 20714, + 0, + 0, + 0, + 0, + 0, + 20724, + 20725, + 0, + 0, + 0, + 0, + 20726, + 20728, + 20729, + 0, + 20733, + 0, + 20734, + 0, + 20735, + 20736, + 0, + 20737, + 0, + 0, + 20744, + 0, + 20745, + 0, + 20748, + 0, + 0, + 20749, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20750, + 0, + 0, + 0, + 0, + 20754, + 0, + 0, + 0, + 20761, + 0, + 0, + 20763, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20766, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20767, + 0, + 0, + 0, + 0, + 20768, + 0, + 20769, + 20777, + 0, + 0, + 0, + 0, + 0, + 0, + 20785, + 0, + 0, + 0, + 20786, + 20795, + 20801, + 0, + 20802, + 0, + 20807, + 0, + 0, + 20808, + 0, + 0, + 20810, + 0, + 0, + 20811, + 0, + 20812, + 0, + 0, + 0, + 0, + 0, + 20813, + 0, + 0, + 20818, + 20820, + 20821, + 0, + 0, + 0, + 20822, + 0, + 20823, + 0, + 0, + 0, + 20826, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20829, + 20830, + 20831, + 0, + 20832, + 20836, + 0, + 0, + 20839, + 0, + 0, + 20840, + 20842, + 0, + 20843, + 0, + 20844, + 0, + 20854, + 0, + 0, + 0, + 20855, + 0, + 0, + 0, + 0, + 20856, + 0, + 0, + 0, + 20869, + 0, + 0, + 20871, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20873, + 0, + 0, + 0, + 0, + 0, + 20876, + 0, + 0, + 0, + 0, + 0, + 20880, + 0, + 0, + 20882, + 0, + 0, + 0, + 0, + 20883, + 20884, + 0, + 0, + 20890, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 20891, + 0, + 0, + 0, + 0, + 0, + 20905, + 0, + 20906, + 20910, + 0, + 0, + 20912, + 20915, + 0, + 0, + 0, + 0, + 0, + 20916, + 0, + 20917, + 0, + 20919, + 20920, + 20922, + 0, + 20927, + 0, + 20928, + 20929, + 20930, + 0, + 0, + 20935, + 0, + 0, + 20939, + 0, + 0, + 20941, + 0, + 0, + 0, + 20943, + 0, + 0, + 0, + 20946, + 20947, + 0, + 0, + 0, + 0, + 0, + 20950, + 0, + 20954, + 0, + 0, + 20955, + 20964, + 0, + 0, + 20967, + 0, + 0, + 0, + 0, + 0, + 20973, + 20975, + 0, + 0, + 0, + 20984, + 0, + 20987, + 20988, + 0, + 0, + 0, + 0, + 0, + 20989, + 0, + 0, + 0, + 20995, + 0, + 20998, + 0, + 20999, + 0, + 0, + 0, + 0, + 21000, + 21001, + 0, + 0, + 0, + 0, + 21008, + 0, + 21010, + 0, + 21016, + 0, + 0, + 0, + 21017, + 21018, + 0, + 0, + 0, + 0, + 0, + 21021, + 21026, + 21027, + 21028, + 0, + 0, + 21029, + 0, + 0, + 0, + 0, + 0, + 21030, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21031, + 21032, + 0, + 0, + 0, + 0, + 0, + 21037, + 0, + 0, + 21038, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21039, + 0, + 21041, + 0, + 21046, + 21047, + 0, + 0, + 0, + 21049, + 21053, + 0, + 0, + 21057, + 21064, + 21065, + 0, + 0, + 21066, + 21067, + 0, + 0, + 0, + 21069, + 0, + 0, + 0, + 21071, + 21072, + 0, + 0, + 21073, + 0, + 21074, + 0, + 0, + 21078, + 0, + 0, + 0, + 0, + 21079, + 0, + 0, + 21080, + 21081, + 0, + 0, + 21086, + 21087, + 0, + 21089, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21091, + 0, + 21093, + 0, + 21094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21095, + 0, + 0, + 0, + 0, + 0, + 21096, + 0, + 21098, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21099, + 0, + 0, + 21100, + 21101, + 21102, + 0, + 0, + 0, + 0, + 0, + 21103, + 0, + 21104, + 0, + 0, + 0, + 0, + 0, + 21105, + 21108, + 21109, + 0, + 0, + 21112, + 21113, + 0, + 0, + 0, + 0, + 0, + 0, + 21115, + 21122, + 21123, + 0, + 0, + 0, + 0, + 0, + 21125, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21129, + 21131, + 0, + 0, + 21134, + 0, + 0, + 0, + 21137, + 21142, + 0, + 21143, + 0, + 0, + 21144, + 0, + 21145, + 21146, + 0, + 21152, + 21154, + 21155, + 21156, + 0, + 0, + 0, + 21160, + 0, + 0, + 0, + 0, + 0, + 0, + 21161, + 0, + 21164, + 0, + 21166, + 0, + 0, + 0, + 0, + 21170, + 0, + 0, + 0, + 0, + 21171, + 0, + 0, + 21172, + 0, + 21174, + 0, + 21175, + 0, + 0, + 0, + 0, + 0, + 21176, + 21179, + 21188, + 0, + 0, + 0, + 21189, + 0, + 0, + 21190, + 0, + 0, + 0, + 21192, + 0, + 0, + 21193, + 0, + 0, + 0, + 21198, + 0, + 21212, + 0, + 0, + 21213, + 0, + 0, + 0, + 0, + 0, + 0, + 21215, + 21216, + 0, + 0, + 21223, + 21225, + 0, + 21226, + 0, + 0, + 0, + 0, + 21227, + 21228, + 0, + 0, + 21229, + 0, + 0, + 0, + 0, + 21230, + 21236, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21237, + 0, + 0, + 21238, + 21239, + 0, + 0, + 0, + 0, + 21256, + 0, + 0, + 0, + 0, + 0, + 21257, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21259, + 0, + 0, + 0, + 21263, + 0, + 21272, + 0, + 21274, + 0, + 21282, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21283, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21294, + 0, + 0, + 21297, + 0, + 0, + 0, + 0, + 21298, + 0, + 0, + 0, + 21299, + 0, + 21300, + 21302, + 0, + 21316, + 0, + 21318, + 21322, + 21323, + 0, + 21324, + 0, + 21326, + 0, + 0, + 0, + 21327, + 21328, + 0, + 0, + 0, + 21352, + 0, + 0, + 21354, + 21361, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21362, + 0, + 0, + 0, + 21363, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21366, + 0, + 0, + 21367, + 21372, + 21374, + 0, + 0, + 0, + 21375, + 21377, + 0, + 21378, + 0, + 0, + 0, + 21380, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21381, + 0, + 0, + 0, + 0, + 0, + 0, + 21382, + 0, + 21383, + 0, + 0, + 21384, + 0, + 0, + 21385, + 0, + 0, + 0, + 0, + 21389, + 21390, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21397, + 21398, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21399, + 0, + 21400, + 0, + 0, + 0, + 0, + 21402, + 0, + 0, + 0, + 21403, + 21404, + 0, + 21405, + 21406, + 0, + 0, + 0, + 21407, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21408, + 0, + 0, + 0, + 0, + 21409, + 0, + 21421, + 0, + 21422, + 0, + 0, + 0, + 21425, + 21428, + 0, + 0, + 0, + 0, + 21429, + 0, + 0, + 0, + 0, + 0, + 21433, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21434, + 0, + 21443, + 0, + 21444, + 21449, + 0, + 21452, + 0, + 21453, + 21454, + 0, + 0, + 0, + 21457, + 0, + 0, + 21458, + 0, + 0, + 0, + 21460, + 21461, + 0, + 0, + 21464, + 0, + 0, + 0, + 21473, + 21478, + 0, + 0, + 21479, + 0, + 0, + 21481, + 21483, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21484, + 0, + 0, + 21485, + 21486, + 0, + 0, + 21488, + 0, + 0, + 0, + 0, + 0, + 0, + 21523, + 0, + 0, + 21525, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21526, + 0, + 0, + 0, + 0, + 0, + 0, + 21529, + 21530, + 0, + 0, + 21531, + 0, + 0, + 21533, + 0, + 0, + 21539, + 21564, + 0, + 21567, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21575, + 0, + 0, + 0, + 0, + 21577, + 0, + 0, + 0, + 0, + 0, + 21591, + 0, + 0, + 21604, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21605, + 0, + 21606, + 0, + 0, + 21617, + 21618, + 21619, + 21620, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21623, + 0, + 0, + 0, + 0, + 21631, + 0, + 21635, + 0, + 0, + 0, + 0, + 21639, + 21646, + 21653, + 21662, + 0, + 0, + 21663, + 21664, + 0, + 21666, + 0, + 0, + 21667, + 0, + 21670, + 21672, + 21673, + 0, + 21674, + 21683, + 0, + 0, + 0, + 0, + 0, + 21684, + 0, + 21694, + 0, + 0, + 0, + 0, + 21695, + 21700, + 0, + 21703, + 0, + 21704, + 0, + 0, + 21709, + 0, + 0, + 0, + 21710, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21711, + 0, + 0, + 0, + 21712, + 0, + 21717, + 0, + 21730, + 0, + 0, + 0, + 21731, + 21733, + 0, + 0, + 0, + 0, + 21737, + 21741, + 21742, + 0, + 21747, + 0, + 0, + 0, + 21749, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21750, + 0, + 0, + 0, + 0, + 0, + 21752, + 0, + 0, + 0, + 0, + 21753, + 0, + 0, + 0, + 0, + 0, + 0, + 21755, + 21756, + 0, + 21757, + 0, + 0, + 0, + 0, + 0, + 0, + 21760, + 0, + 0, + 21763, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21764, + 0, + 0, + 21766, + 0, + 0, + 21767, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21773, + 0, + 21774, + 0, + 0, + 21775, + 0, + 0, + 0, + 0, + 21776, + 0, + 0, + 21777, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21780, + 21787, + 21788, + 21791, + 0, + 0, + 0, + 21797, + 0, + 0, + 0, + 0, + 0, + 21805, + 0, + 0, + 0, + 0, + 21806, + 0, + 21807, + 21809, + 0, + 21810, + 21811, + 0, + 21817, + 21819, + 21820, + 0, + 21823, + 0, + 21824, + 0, + 0, + 21825, + 0, + 0, + 21826, + 21832, + 0, + 0, + 0, + 0, + 0, + 21833, + 21848, + 21849, + 0, + 0, + 21867, + 21870, + 21871, + 21873, + 0, + 0, + 0, + 21874, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21875, + 0, + 21878, + 0, + 0, + 0, + 21879, + 0, + 21881, + 21886, + 0, + 0, + 0, + 0, + 21887, + 0, + 0, + 21888, + 21894, + 21895, + 21897, + 0, + 21901, + 0, + 21904, + 0, + 0, + 21906, + 0, + 0, + 0, + 21909, + 21910, + 21911, + 0, + 0, + 21912, + 0, + 0, + 21913, + 21914, + 21915, + 0, + 21919, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21921, + 0, + 0, + 21922, + 21933, + 21939, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21944, + 0, + 0, + 0, + 0, + 0, + 21945, + 0, + 21947, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21949, + 0, + 0, + 0, + 21950, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21951, + 0, + 21952, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21954, + 21957, + 0, + 0, + 0, + 0, + 21958, + 0, + 21959, + 0, + 0, + 0, + 0, + 0, + 0, + 21962, + 21963, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 21964, + 21965, + 0, + 0, + 21969, + 21970, + 0, + 0, + 0, + 21974, + 0, + 0, + 21980, + 21981, + 0, + 21982, + 0, + 0, + 0, + 0, + 0, + 21985, + 0, + 21988, + 0, + 21992, + 0, + 21999, + 0, + 0, + 0, + 0, + 0, + 0, + 22001, + 0, + 22002, + 0, + 0, + 0, + 0, + 0, + 0, + 22003, + 0, + 0, + 0, + 0, + 0, + 22004, + 0, + 0, + 0, + 22008, + 0, + 22009, + 22015, + 0, + 0, + 22016, + 0, + 0, + 0, + 22017, + 22019, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22020, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22021, + 22037, + 0, + 22039, + 0, + 0, + 0, + 22040, + 0, + 0, + 0, + 22048, + 22049, + 0, + 0, + 22053, + 22055, + 22056, + 22059, + 0, + 0, + 22060, + 22061, + 0, + 0, + 22064, + 0, + 0, + 0, + 0, + 22066, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22073, + 0, + 0, + 0, + 22074, + 22075, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22076, + 0, + 0, + 0, + 0, + 22077, + 22084, + 22099, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22104, + 0, + 0, + 22107, + 0, + 22108, + 0, + 22109, + 0, + 22110, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22111, + 22119, + 0, + 22120, + 22122, + 0, + 0, + 0, + 0, + 22125, + 0, + 0, + 0, + 22128, + 22129, + 0, + 0, + 0, + 0, + 0, + 0, + 22141, + 0, + 0, + 0, + 22142, + 0, + 0, + 22144, + 22146, + 0, + 22148, + 22149, + 22151, + 22154, + 0, + 0, + 0, + 22162, + 0, + 0, + 0, + 0, + 22164, + 22177, + 0, + 0, + 0, + 0, + 22179, + 0, + 22182, + 22183, + 0, + 0, + 22184, + 22188, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22190, + 0, + 22194, + 22201, + 0, + 0, + 22208, + 0, + 22209, + 0, + 22212, + 0, + 0, + 22215, + 0, + 22223, + 22231, + 0, + 0, + 22232, + 0, + 22234, + 0, + 0, + 22235, + 22236, + 0, + 22237, + 0, + 22240, + 0, + 0, + 0, + 0, + 0, + 22241, + 0, + 0, + 0, + 22242, + 22246, + 22247, + 0, + 0, + 0, + 22259, + 22268, + 0, + 22269, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22270, + 0, + 0, + 0, + 0, + 22271, + 0, + 22272, + 0, + 22277, + 0, + 0, + 0, + 0, + 0, + 22278, + 22280, + 22283, + 22286, + 0, + 0, + 22287, + 22289, + 0, + 0, + 22290, + 0, + 22293, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22295, + 0, + 22301, + 22302, + 0, + 0, + 0, + 22305, + 0, + 22308, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22315, + 0, + 0, + 0, + 22317, + 0, + 22334, + 0, + 0, + 0, + 22335, + 0, + 0, + 0, + 0, + 0, + 22336, + 0, + 22338, + 22344, + 0, + 22347, + 22349, + 0, + 22350, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22357, + 0, + 0, + 0, + 0, + 0, + 22358, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22359, + 22360, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22361, + 22366, + 0, + 0, + 22369, + 0, + 22370, + 22373, + 0, + 0, + 0, + 0, + 0, + 22375, + 0, + 22377, + 0, + 0, + 0, + 0, + 0, + 22378, + 0, + 0, + 0, + 0, + 22381, + 0, + 0, + 0, + 0, + 22382, + 0, + 22383, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22391, + 0, + 0, + 22392, + 22395, + 22396, + 22402, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22405, + 0, + 0, + 22406, + 0, + 0, + 22408, + 0, + 0, + 22409, + 22410, + 0, + 0, + 0, + 0, + 0, + 0, + 22424, + 0, + 0, + 0, + 0, + 22426, + 0, + 0, + 0, + 22427, + 0, + 22428, + 0, + 22432, + 0, + 22435, + 22442, + 22443, + 0, + 0, + 0, + 0, + 22444, + 0, + 0, + 0, + 0, + 0, + 22446, + 0, + 22454, + 0, + 22455, + 0, + 0, + 0, + 22465, + 0, + 22470, + 0, + 22471, + 0, + 0, + 0, + 0, + 22472, + 22473, + 0, + 22487, + 0, + 0, + 0, + 22488, + 0, + 0, + 0, + 0, + 22489, + 0, + 0, + 22499, + 0, + 0, + 0, + 0, + 0, + 0, + 22514, + 0, + 0, + 22515, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22516, + 0, + 0, + 0, + 22517, + 22520, + 0, + 0, + 0, + 22534, + 0, + 0, + 22535, + 0, + 0, + 22536, + 0, + 22540, + 22553, + 0, + 22555, + 0, + 0, + 0, + 0, + 22561, + 0, + 0, + 22562, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22566, + 0, + 0, + 0, + 0, + 22567, + 22568, + 0, + 0, + 22575, + 0, + 22579, + 0, + 22582, + 22583, + 22585, + 0, + 0, + 0, + 0, + 0, + 22586, + 0, + 0, + 22587, + 0, + 0, + 22590, + 0, + 0, + 0, + 0, + 0, + 22591, + 0, + 22592, + 0, + 0, + 0, + 0, + 0, + 22593, + 0, + 22602, + 0, + 0, + 22604, + 0, + 0, + 22609, + 0, + 0, + 22618, + 0, + 0, + 0, + 0, + 0, + 0, + 22619, + 0, + 22624, + 22625, + 0, + 0, + 22638, + 0, + 0, + 0, + 0, + 0, + 22639, + 0, + 0, + 22640, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22644, + 0, + 22645, + 22647, + 0, + 0, + 0, + 0, + 22652, + 22653, + 0, + 0, + 0, + 22654, + 0, + 22655, + 0, + 0, + 0, + 22656, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22673, + 22675, + 22676, + 0, + 0, + 22678, + 22679, + 0, + 22691, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22693, + 0, + 0, + 22696, + 0, + 22699, + 22707, + 22708, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22718, + 0, + 22719, + 0, + 0, + 0, + 0, + 22723, + 0, + 0, + 0, + 22724, + 22725, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22726, + 22728, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22729, + 0, + 0, + 22731, + 0, + 0, + 0, + 0, + 22732, + 22735, + 22736, + 0, + 0, + 0, + 0, + 22739, + 0, + 22749, + 0, + 0, + 22751, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22758, + 0, + 0, + 0, + 0, + 0, + 22760, + 0, + 0, + 0, + 0, + 0, + 22764, + 22765, + 22766, + 0, + 22768, + 0, + 0, + 0, + 0, + 0, + 22769, + 22770, + 0, + 0, + 0, + 0, + 0, + 0, + 22771, + 0, + 0, + 22772, + 22775, + 0, + 22776, + 22777, + 22780, + 0, + 0, + 22782, + 22784, + 0, + 22787, + 0, + 22789, + 22796, + 0, + 0, + 0, + 0, + 0, + 22798, + 0, + 0, + 0, + 0, + 0, + 0, + 22802, + 0, + 22803, + 22804, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22805, + 0, + 0, + 22810, + 22811, + 22814, + 22816, + 0, + 22825, + 22826, + 0, + 22831, + 22833, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22834, + 0, + 22836, + 22838, + 0, + 22839, + 0, + 0, + 0, + 0, + 0, + 22840, + 0, + 22847, + 0, + 0, + 0, + 0, + 0, + 22856, + 22857, + 0, + 22858, + 22859, + 0, + 0, + 22862, + 0, + 0, + 22864, + 0, + 0, + 0, + 0, + 22865, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22866, + 0, + 22867, + 22868, + 0, + 0, + 0, + 0, + 22869, + 0, + 22871, + 0, + 22872, + 0, + 22873, + 22881, + 22882, + 22884, + 22885, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22886, + 22887, + 0, + 22894, + 0, + 22895, + 0, + 0, + 0, + 22900, + 0, + 22901, + 0, + 0, + 0, + 0, + 22904, + 0, + 0, + 0, + 0, + 22905, + 22907, + 0, + 0, + 0, + 22915, + 22917, + 0, + 0, + 22918, + 0, + 0, + 0, + 22920, + 0, + 0, + 0, + 22929, + 22930, + 0, + 0, + 0, + 22941, + 22942, + 0, + 0, + 0, + 22943, + 0, + 0, + 0, + 22944, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22946, + 0, + 22947, + 0, + 0, + 22954, + 0, + 22956, + 0, + 0, + 22962, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22963, + 0, + 0, + 22964, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 22965, + 0, + 22968, + 0, + 0, + 0, + 22969, + 0, + 0, + 0, + 0, + 0, + 22970, + 0, + 22971, + 0, + 0, + 0, + 0, + 0, + 22978, + 0, + 0, + 22979, + 0, + 22987, + 0, + 0, + 22989, + 0, + 0, + 0, + 0, + 0, + 0, + 22990, + 0, + 23005, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23006, + 23007, + 23008, + 0, + 0, + 23023, + 23024, + 23029, + 0, + 0, + 0, + 0, + 23030, + 0, + 0, + 0, + 0, + 0, + 23032, + 0, + 0, + 0, + 0, + 0, + 23035, + 0, + 0, + 0, + 0, + 23038, + 0, + 0, + 0, + 23048, + 0, + 23049, + 23052, + 23053, + 23060, + 23061, + 0, + 23063, + 0, + 0, + 0, + 0, + 23067, + 23068, + 0, + 0, + 0, + 23069, + 23073, + 0, + 0, + 0, + 23127, + 0, + 23128, + 0, + 0, + 0, + 0, + 0, + 23129, + 0, + 23138, + 23141, + 0, + 23149, + 0, + 0, + 23150, + 0, + 0, + 0, + 23152, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23154, + 0, + 0, + 0, + 0, + 23157, + 23159, + 23160, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23180, + 0, + 0, + 0, + 0, + 23181, + 0, + 0, + 23188, + 0, + 23189, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23195, + 0, + 0, + 23196, + 23199, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23202, + 0, + 23204, + 0, + 23207, + 0, + 23209, + 23210, + 0, + 0, + 0, + 0, + 0, + 0, + 23227, + 23229, + 0, + 0, + 23230, + 23234, + 23238, + 0, + 0, + 0, + 23245, + 23246, + 23248, + 0, + 0, + 0, + 0, + 23249, + 23254, + 0, + 0, + 0, + 23265, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23268, + 0, + 23276, + 0, + 0, + 0, + 0, + 23277, + 0, + 23297, + 0, + 23298, + 0, + 0, + 0, + 0, + 23299, + 0, + 23302, + 0, + 0, + 23303, + 23312, + 0, + 0, + 23314, + 0, + 23320, + 0, + 0, + 0, + 0, + 23324, + 0, + 23325, + 0, + 23328, + 0, + 23334, + 0, + 0, + 0, + 23337, + 0, + 0, + 0, + 0, + 23343, + 23344, + 23346, + 0, + 23348, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23353, + 0, + 0, + 0, + 0, + 23355, + 0, + 23356, + 23358, + 0, + 0, + 0, + 23359, + 23360, + 0, + 23361, + 0, + 23367, + 0, + 23369, + 0, + 0, + 23373, + 0, + 23378, + 23379, + 0, + 23382, + 23383, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23387, + 0, + 0, + 0, + 0, + 0, + 0, + 23388, + 23390, + 0, + 0, + 23393, + 23398, + 0, + 0, + 0, + 23399, + 0, + 0, + 0, + 23400, + 0, + 0, + 0, + 0, + 23401, + 0, + 0, + 0, + 23415, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23416, + 0, + 23422, + 0, + 23443, + 23444, + 0, + 0, + 0, + 0, + 23448, + 0, + 23454, + 0, + 0, + 0, + 0, + 0, + 0, + 23456, + 0, + 0, + 23458, + 23464, + 0, + 0, + 0, + 0, + 0, + 0, + 23465, + 0, + 0, + 0, + 23470, + 23471, + 0, + 0, + 23472, + 0, + 0, + 0, + 23473, + 23496, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23497, + 0, + 23499, + 0, + 0, + 23502, + 0, + 0, + 23503, + 0, + 0, + 23513, + 0, + 0, + 23515, + 0, + 0, + 0, + 23517, + 0, + 0, + 0, + 0, + 23518, + 23519, + 23521, + 23524, + 0, + 23525, + 23528, + 23539, + 0, + 0, + 0, + 0, + 0, + 23541, + 0, + 0, + 23544, + 0, + 0, + 23556, + 0, + 0, + 23557, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23559, + 0, + 23560, + 0, + 0, + 23561, + 0, + 0, + 23566, + 0, + 0, + 0, + 0, + 0, + 23568, + 23569, + 23570, + 0, + 0, + 0, + 0, + 23571, + 0, + 23574, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23575, + 0, + 23579, + 0, + 0, + 23581, + 0, + 0, + 0, + 0, + 0, + 0, + 23587, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23596, + 23598, + 0, + 0, + 0, + 0, + 23602, + 23606, + 0, + 0, + 23607, + 0, + 23608, + 0, + 0, + 0, + 23614, + 23616, + 0, + 0, + 0, + 0, + 0, + 23618, + 0, + 0, + 23619, + 0, + 0, + 0, + 0, + 23621, + 23626, + 0, + 23627, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23629, + 0, + 23630, + 0, + 0, + 0, + 0, + 23634, + 0, + 23636, + 0, + 0, + 0, + 0, + 0, + 0, + 23638, + 0, + 0, + 0, + 0, + 23640, + 23667, + 0, + 23669, + 0, + 0, + 0, + 23681, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23682, + 0, + 23683, + 0, + 0, + 0, + 0, + 0, + 23684, + 0, + 0, + 0, + 23685, + 23689, + 0, + 23693, + 23694, + 23700, + 0, + 23702, + 0, + 23709, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23712, + 0, + 0, + 0, + 0, + 0, + 23714, + 0, + 0, + 23715, + 0, + 0, + 0, + 0, + 23718, + 0, + 0, + 23720, + 0, + 0, + 0, + 0, + 23722, + 0, + 0, + 0, + 23726, + 23729, + 0, + 23741, + 23746, + 0, + 23748, + 0, + 0, + 0, + 0, + 23749, + 0, + 0, + 0, + 0, + 0, + 23750, + 0, + 0, + 0, + 0, + 23751, + 0, + 23753, + 0, + 0, + 0, + 0, + 23757, + 23765, + 0, + 0, + 0, + 23770, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23771, + 0, + 23772, + 23781, + 0, + 0, + 23796, + 0, + 0, + 0, + 0, + 23798, + 0, + 23799, + 0, + 0, + 0, + 23802, + 0, + 0, + 23806, + 0, + 23807, + 0, + 0, + 23808, + 0, + 23809, + 0, + 23819, + 0, + 0, + 0, + 23821, + 0, + 23827, + 0, + 0, + 0, + 23829, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23830, + 0, + 0, + 0, + 0, + 0, + 0, + 23832, + 23833, + 23834, + 23835, + 0, + 0, + 0, + 0, + 23837, + 23838, + 0, + 0, + 0, + 0, + 0, + 23846, + 0, + 0, + 0, + 0, + 0, + 0, + 23847, + 0, + 0, + 0, + 0, + 0, + 23879, + 23881, + 0, + 0, + 23882, + 23883, + 23895, + 0, + 23899, + 0, + 0, + 0, + 0, + 23901, + 0, + 0, + 0, + 0, + 0, + 0, + 23902, + 0, + 0, + 0, + 0, + 0, + 23903, + 23905, + 0, + 23906, + 0, + 23907, + 23918, + 23919, + 23920, + 0, + 23922, + 0, + 23924, + 0, + 23927, + 0, + 23934, + 0, + 23937, + 23941, + 0, + 23942, + 23946, + 0, + 0, + 0, + 0, + 0, + 23955, + 23956, + 23958, + 0, + 0, + 0, + 0, + 0, + 0, + 23959, + 0, + 23962, + 23965, + 0, + 23966, + 0, + 0, + 0, + 0, + 23967, + 23968, + 0, + 0, + 23973, + 0, + 0, + 23974, + 0, + 0, + 0, + 0, + 23975, + 0, + 23976, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23977, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23980, + 0, + 0, + 23984, + 0, + 23985, + 0, + 0, + 23987, + 0, + 0, + 23988, + 23990, + 23991, + 0, + 0, + 0, + 0, + 0, + 0, + 23992, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23994, + 0, + 0, + 0, + 23998, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 23999, + 0, + 0, + 24003, + 0, + 24004, + 0, + 24006, + 0, + 0, + 0, + 24007, + 0, + 0, + 24008, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24009, + 0, + 0, + 24010, + 0, + 0, + 24011, + 0, + 0, + 24013, + 24014, + 0, + 0, + 24015, + 24016, + 24027, + 0, + 24028, + 24029, + 0, + 24030, + 0, + 0, + 0, + 0, + 0, + 24033, + 24034, + 0, + 24035, + 0, + 0, + 24036, + 0, + 0, + 24044, + 0, + 24048, + 24049, + 24063, + 24067, + 0, + 24068, + 24070, + 0, + 0, + 24071, + 24078, + 24087, + 0, + 24090, + 0, + 0, + 0, + 24095, + 0, + 24098, + 24101, + 24104, + 24106, + 0, + 24107, + 0, + 0, + 0, + 24108, + 0, + 0, + 0, + 0, + 24110, + 24111, + 0, + 24113, + 0, + 0, + 24115, + 24120, + 0, + 0, + 0, + 0, + 0, + 0, + 24124, + 0, + 24125, + 0, + 24126, + 0, + 24127, + 0, + 0, + 0, + 0, + 0, + 24135, + 0, + 0, + 24136, + 0, + 24137, + 24142, + 0, + 0, + 0, + 24146, + 0, + 0, + 24147, + 24149, + 24154, + 0, + 24163, + 0, + 0, + 0, + 24165, + 24166, + 24167, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24169, + 24170, + 24175, + 0, + 0, + 0, + 24178, + 0, + 0, + 24179, + 0, + 0, + 24181, + 0, + 24184, + 24197, + 0, + 24201, + 24204, + 0, + 0, + 0, + 0, + 0, + 0, + 24206, + 24212, + 24220, + 0, + 0, + 0, + 24224, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24226, + 0, + 24234, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24235, + 0, + 24236, + 0, + 0, + 0, + 0, + 0, + 24239, + 24240, + 24241, + 0, + 0, + 24248, + 0, + 0, + 24249, + 0, + 24251, + 0, + 0, + 0, + 0, + 0, + 0, + 24253, + 0, + 24268, + 0, + 0, + 0, + 24269, + 0, + 24271, + 24272, + 0, + 0, + 0, + 0, + 24273, + 0, + 0, + 24274, + 0, + 0, + 24279, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24280, + 0, + 24293, + 24294, + 0, + 0, + 0, + 0, + 0, + 0, + 24296, + 0, + 0, + 24323, + 0, + 0, + 0, + 24329, + 24330, + 24331, + 24339, + 0, + 24351, + 0, + 0, + 24369, + 24370, + 0, + 0, + 0, + 24371, + 0, + 0, + 0, + 0, + 24372, + 24373, + 24374, + 0, + 0, + 0, + 0, + 0, + 24378, + 0, + 0, + 0, + 0, + 24379, + 0, + 24381, + 0, + 24383, + 24389, + 0, + 24390, + 0, + 0, + 24394, + 24395, + 24400, + 0, + 0, + 0, + 24401, + 24402, + 0, + 24406, + 0, + 0, + 0, + 24411, + 0, + 0, + 0, + 24415, + 0, + 24416, + 0, + 0, + 0, + 0, + 0, + 24417, + 0, + 24419, + 0, + 24422, + 0, + 24423, + 24428, + 0, + 24435, + 0, + 0, + 0, + 24439, + 0, + 0, + 0, + 24440, + 24442, + 24446, + 0, + 0, + 0, + 24447, + 24448, + 24449, + 24452, + 0, + 0, + 0, + 0, + 24453, + 24457, + 0, + 0, + 24458, + 24459, + 24460, + 0, + 24465, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24470, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24471, + 0, + 24473, + 24474, + 24475, + 24476, + 0, + 24478, + 0, + 0, + 0, + 0, + 24480, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24481, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24482, + 24485, + 0, + 0, + 0, + 0, + 24486, + 0, + 0, + 0, + 24488, + 0, + 0, + 0, + 24494, + 0, + 0, + 0, + 0, + 24497, + 0, + 0, + 24498, + 0, + 0, + 0, + 24499, + 24506, + 0, + 0, + 0, + 24507, + 0, + 0, + 24511, + 0, + 0, + 24513, + 24514, + 0, + 0, + 0, + 0, + 0, + 24517, + 0, + 24518, + 0, + 24520, + 0, + 24521, + 24524, + 24525, + 0, + 0, + 0, + 0, + 0, + 24527, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24528, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24537, + 24539, + 0, + 24540, + 0, + 0, + 0, + 24548, + 0, + 0, + 0, + 0, + 0, + 24549, + 24550, + 0, + 0, + 0, + 24553, + 24554, + 0, + 24555, + 0, + 24556, + 0, + 24558, + 0, + 0, + 0, + 0, + 0, + 24560, + 0, + 0, + 0, + 24561, + 0, + 0, + 0, + 0, + 0, + 24562, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24567, + 0, + 0, + 0, + 0, + 0, + 24569, + 0, + 0, + 0, + 24574, + 0, + 24575, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24577, + 24581, + 0, + 24584, + 0, + 0, + 0, + 0, + 0, + 24585, + 0, + 0, + 0, + 0, + 0, + 24586, + 0, + 0, + 24587, + 0, + 24588, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24590, + 24591, + 0, + 0, + 0, + 0, + 24592, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24594, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24596, + 24597, + 0, + 0, + 0, + 0, + 24602, + 24603, + 0, + 0, + 0, + 0, + 24604, + 0, + 0, + 24605, + 0, + 24610, + 0, + 0, + 24611, + 0, + 0, + 0, + 0, + 24612, + 24615, + 24616, + 24624, + 0, + 0, + 0, + 24627, + 0, + 24638, + 24639, + 0, + 0, + 0, + 0, + 24640, + 0, + 0, + 0, + 24655, + 24656, + 24657, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24662, + 0, + 24663, + 24664, + 0, + 0, + 0, + 0, + 0, + 24665, + 0, + 0, + 0, + 0, + 24667, + 0, + 0, + 0, + 0, + 0, + 0, + 24668, + 24669, + 0, + 24670, + 24674, + 0, + 0, + 0, + 24675, + 0, + 24678, + 0, + 0, + 24679, + 0, + 0, + 0, + 24681, + 0, + 24683, + 0, + 0, + 0, + 0, + 24684, + 0, + 24685, + 0, + 0, + 24686, + 0, + 0, + 24688, + 24689, + 0, + 0, + 0, + 0, + 24690, + 24691, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24697, + 0, + 24698, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24709, + 0, + 0, + 0, + 0, + 0, + 24710, + 0, + 24712, + 0, + 0, + 0, + 0, + 0, + 0, + 24713, + 24714, + 0, + 24715, + 0, + 24716, + 24718, + 0, + 24719, + 0, + 0, + 0, + 0, + 24720, + 0, + 0, + 24725, + 0, + 0, + 24738, + 0, + 24749, + 24750, + 0, + 0, + 0, + 24752, + 0, + 0, + 0, + 24753, + 0, + 0, + 0, + 24758, + 0, + 0, + 0, + 0, + 0, + 24762, + 0, + 24763, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24764, + 0, + 0, + 0, + 0, + 0, + 24765, + 24767, + 24768, + 0, + 24772, + 0, + 0, + 0, + 0, + 24773, + 0, + 0, + 0, + 0, + 24777, + 0, + 0, + 0, + 0, + 0, + 24785, + 0, + 24786, + 24788, + 0, + 0, + 0, + 24789, + 0, + 0, + 0, + 0, + 24794, + 24798, + 0, + 24799, + 24800, + 0, + 0, + 0, + 24803, + 0, + 24804, + 24806, + 0, + 24807, + 0, + 0, + 0, + 24810, + 0, + 0, + 0, + 0, + 0, + 0, + 24827, + 24828, + 0, + 24835, + 0, + 0, + 0, + 0, + 0, + 0, + 24836, + 0, + 0, + 0, + 0, + 0, + 24839, + 0, + 24843, + 24844, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24847, + 0, + 0, + 24848, + 0, + 0, + 0, + 0, + 0, + 0, + 24849, + 0, + 24850, + 24851, + 0, + 0, + 0, + 24852, + 0, + 24853, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24854, + 0, + 24855, + 0, + 0, + 24868, + 0, + 0, + 0, + 24883, + 0, + 0, + 0, + 24884, + 0, + 24895, + 24897, + 0, + 0, + 0, + 0, + 0, + 24899, + 0, + 0, + 0, + 0, + 0, + 24900, + 0, + 24913, + 0, + 0, + 0, + 0, + 0, + 0, + 24914, + 0, + 0, + 24917, + 24930, + 24931, + 0, + 0, + 0, + 24932, + 0, + 0, + 24939, + 0, + 0, + 24942, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 24945, + 24950, + 0, + 24951, + 0, + 0, + 24953, + 0, + 0, + 0, + 24954, + 0, + 24959, + 0, + 0, + 0, + 24961, + 0, + 0, + 24962, + 0, + 24964, + 24968, + 24970, + 24972, + 0, + 0, + 0, + 0, + 0, + 24976, + 0, + 0, + 0, + 24977, + 0, + 24982, + 0, + 0, + 24983, + 0, + 0, + 24984, + 0, + 0, + 0, + 24993, + 0, + 0, + 0, + 24994, + 0, + 0, + 25001, + 0, + 0, + 0, + 25003, + 0, + 0, + 25018, + 0, + 0, + 25023, + 0, + 0, + 0, + 25034, + 0, + 0, + 25035, + 25036, + 0, + 25037, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25039, + 0, + 0, + 0, + 0, + 0, + 25040, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25042, + 0, + 0, + 25043, + 25045, + 0, + 0, + 0, + 0, + 0, + 0, + 25049, + 0, + 0, + 25051, + 0, + 25052, + 25053, + 0, + 0, + 25054, + 0, + 0, + 0, + 25055, + 0, + 0, + 0, + 0, + 25057, + 25059, + 0, + 0, + 25060, + 25064, + 0, + 25065, + 25069, + 25070, + 0, + 0, + 0, + 0, + 25072, + 0, + 25073, + 0, + 25090, + 0, + 0, + 25092, + 25093, + 25101, + 0, + 0, + 0, + 0, + 0, + 0, + 25105, + 25108, + 0, + 0, + 25113, + 0, + 0, + 25115, + 25116, + 0, + 0, + 0, + 0, + 0, + 0, + 25117, + 0, + 0, + 0, + 25120, + 25121, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25125, + 0, + 0, + 0, + 25126, + 0, + 25130, + 25134, + 0, + 25139, + 0, + 25143, + 0, + 0, + 0, + 25151, + 0, + 25161, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25163, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25174, + 0, + 25175, + 0, + 25207, + 0, + 0, + 0, + 25209, + 0, + 0, + 0, + 0, + 25213, + 0, + 25219, + 0, + 25223, + 0, + 25225, + 0, + 0, + 0, + 25227, + 0, + 0, + 0, + 25228, + 0, + 0, + 0, + 25229, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25231, + 25233, + 0, + 0, + 0, + 0, + 25237, + 25239, + 0, + 0, + 0, + 25243, + 0, + 0, + 0, + 25252, + 0, + 25257, + 25258, + 0, + 0, + 0, + 0, + 25260, + 25265, + 0, + 25268, + 0, + 0, + 25273, + 25324, + 0, + 25325, + 0, + 25326, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25327, + 0, + 0, + 0, + 0, + 0, + 25328, + 0, + 0, + 0, + 0, + 0, + 0, + 25332, + 0, + 0, + 0, + 25333, + 0, + 0, + 0, + 25336, + 25337, + 25338, + 0, + 0, + 25343, + 0, + 25350, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25352, + 0, + 25354, + 0, + 25375, + 0, + 25379, + 0, + 0, + 0, + 0, + 25384, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25386, + 0, + 25388, + 0, + 25390, + 0, + 0, + 25399, + 0, + 0, + 25401, + 0, + 0, + 0, + 25402, + 0, + 0, + 0, + 25407, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25413, + 25415, + 0, + 0, + 25417, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25419, + 0, + 0, + 0, + 25421, + 0, + 0, + 0, + 25424, + 0, + 0, + 0, + 0, + 25433, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25435, + 0, + 0, + 0, + 0, + 0, + 0, + 25436, + 0, + 0, + 0, + 25437, + 0, + 0, + 25440, + 0, + 0, + 0, + 0, + 0, + 0, + 25442, + 0, + 0, + 25443, + 0, + 25446, + 0, + 0, + 25449, + 0, + 0, + 0, + 25450, + 0, + 0, + 0, + 0, + 25452, + 0, + 25453, + 25454, + 25455, + 0, + 0, + 0, + 25456, + 0, + 25457, + 0, + 0, + 0, + 25459, + 0, + 25461, + 0, + 25468, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25469, + 0, + 0, + 0, + 0, + 0, + 25471, + 0, + 0, + 0, + 0, + 0, + 25474, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25475, + 0, + 0, + 0, + 0, + 25477, + 0, + 0, + 0, + 0, + 25483, + 0, + 0, + 0, + 0, + 0, + 25484, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25485, + 0, + 25497, + 0, + 0, + 25498, + 0, + 25504, + 0, + 25510, + 0, + 25512, + 0, + 0, + 25513, + 25514, + 0, + 0, + 0, + 0, + 0, + 0, + 25517, + 25518, + 25519, + 0, + 25520, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25521, + 0, + 25522, + 25527, + 25534, + 0, + 25536, + 0, + 25537, + 0, + 0, + 25548, + 25550, + 0, + 0, + 25551, + 0, + 25552, + 0, + 0, + 0, + 0, + 0, + 25554, + 0, + 25555, + 0, + 25556, + 25557, + 25568, + 0, + 0, + 0, + 25570, + 25571, + 0, + 0, + 0, + 0, + 0, + 0, + 25574, + 0, + 0, + 0, + 0, + 25579, + 0, + 0, + 0, + 25581, + 0, + 0, + 0, + 25582, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25588, + 0, + 0, + 0, + 0, + 25589, + 0, + 0, + 0, + 0, + 25590, + 0, + 25591, + 25592, + 25593, + 0, + 25594, + 0, + 0, + 0, + 25596, + 0, + 25597, + 25615, + 0, + 0, + 0, + 0, + 0, + 25618, + 0, + 0, + 0, + 0, + 25619, + 25623, + 0, + 0, + 25629, + 0, + 0, + 25631, + 0, + 0, + 0, + 25635, + 25636, + 0, + 0, + 25649, + 0, + 0, + 0, + 0, + 25654, + 0, + 0, + 0, + 25661, + 25663, + 0, + 0, + 25671, + 0, + 0, + 25678, + 25698, + 0, + 25699, + 25702, + 25703, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25704, + 0, + 0, + 0, + 0, + 0, + 25706, + 0, + 0, + 25710, + 0, + 25711, + 0, + 25712, + 0, + 25715, + 25716, + 25717, + 0, + 0, + 25718, + 25728, + 25732, + 0, + 0, + 0, + 25734, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25737, + 0, + 0, + 25739, + 0, + 0, + 0, + 25740, + 0, + 25741, + 25745, + 0, + 25746, + 0, + 25748, + 25772, + 25778, + 0, + 0, + 0, + 0, + 0, + 25780, + 0, + 0, + 0, + 0, + 25781, + 0, + 25782, + 25784, + 25785, + 0, + 0, + 0, + 25789, + 0, + 0, + 0, + 0, + 0, + 0, + 25797, + 25801, + 0, + 0, + 0, + 25808, + 25809, + 0, + 0, + 25811, + 25814, + 25815, + 0, + 0, + 25817, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25820, + 0, + 0, + 0, + 0, + 25832, + 25833, + 0, + 0, + 0, + 25846, + 0, + 0, + 0, + 25847, + 25848, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25849, + 25850, + 0, + 0, + 25851, + 0, + 0, + 25852, + 0, + 25862, + 0, + 0, + 0, + 25863, + 25865, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25867, + 25868, + 0, + 25869, + 25874, + 0, + 25875, + 0, + 25876, + 25877, + 0, + 0, + 0, + 0, + 25878, + 25902, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25903, + 25904, + 25905, + 0, + 0, + 0, + 25908, + 25909, + 0, + 0, + 0, + 0, + 25910, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25912, + 0, + 25913, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25914, + 0, + 0, + 25916, + 0, + 0, + 0, + 0, + 0, + 25917, + 25927, + 0, + 0, + 0, + 0, + 25928, + 0, + 0, + 25930, + 0, + 0, + 0, + 25933, + 0, + 0, + 25938, + 25942, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25945, + 0, + 25950, + 0, + 25956, + 0, + 0, + 25961, + 25962, + 0, + 0, + 25963, + 0, + 25964, + 25965, + 25966, + 0, + 0, + 0, + 0, + 0, + 25967, + 0, + 0, + 0, + 0, + 25968, + 0, + 0, + 0, + 25969, + 25971, + 0, + 0, + 0, + 0, + 0, + 25973, + 25975, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25978, + 0, + 25981, + 0, + 0, + 0, + 25982, + 0, + 0, + 0, + 25984, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 25993, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26002, + 0, + 0, + 0, + 26005, + 0, + 0, + 0, + 26006, + 26007, + 0, + 0, + 26014, + 26015, + 26016, + 0, + 0, + 0, + 0, + 0, + 0, + 26017, + 26018, + 26020, + 0, + 26022, + 26023, + 0, + 0, + 0, + 26024, + 26028, + 0, + 26029, + 26033, + 26034, + 26044, + 0, + 0, + 0, + 0, + 0, + 26046, + 0, + 0, + 26047, + 0, + 0, + 26049, + 0, + 26050, + 0, + 26051, + 0, + 0, + 0, + 0, + 0, + 26053, + 0, + 0, + 0, + 0, + 26054, + 26059, + 0, + 0, + 0, + 0, + 0, + 0, + 26060, + 0, + 26066, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26067, + 0, + 26069, + 0, + 0, + 26071, + 0, + 0, + 0, + 26073, + 0, + 26074, + 26077, + 0, + 0, + 0, + 0, + 26078, + 0, + 0, + 0, + 26079, + 0, + 26090, + 0, + 0, + 26094, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26095, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26096, + 26101, + 0, + 26107, + 26122, + 0, + 26124, + 0, + 0, + 26125, + 0, + 0, + 0, + 0, + 0, + 0, + 26136, + 26141, + 26155, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26164, + 26166, + 0, + 0, + 0, + 26167, + 0, + 26170, + 26171, + 0, + 0, + 26172, + 0, + 0, + 26174, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26175, + 0, + 0, + 0, + 26176, + 26177, + 0, + 26321, + 26322, + 0, + 26323, + 0, + 0, + 26324, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26325, + 0, + 26331, + 0, + 0, + 0, + 0, + 0, + 0, + 26335, + 0, + 0, + 0, + 26350, + 0, + 0, + 0, + 26379, + 0, + 0, + 26382, + 26383, + 26385, + 0, + 0, + 26392, + 26406, + 0, + 0, + 0, + 0, + 26411, + 0, + 0, + 0, + 0, + 0, + 26412, + 0, + 0, + 26420, + 0, + 0, + 26423, + 0, + 26424, + 26426, + 26432, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26435, + 0, + 26436, + 0, + 0, + 0, + 0, + 0, + 26441, + 0, + 26444, + 0, + 0, + 0, + 26446, + 0, + 0, + 0, + 0, + 26447, + 0, + 0, + 0, + 0, + 26449, + 0, + 26450, + 26452, + 0, + 26453, + 26454, + 0, + 0, + 0, + 26455, + 0, + 0, + 0, + 26456, + 0, + 0, + 26458, + 0, + 0, + 26460, + 0, + 26463, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26464, + 26470, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26473, + 0, + 0, + 26474, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26475, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26477, + 0, + 26485, + 0, + 0, + 26486, + 0, + 26487, + 0, + 0, + 26488, + 26493, + 26494, + 0, + 0, + 26495, + 0, + 26497, + 26504, + 26506, + 0, + 0, + 0, + 0, + 0, + 26507, + 0, + 0, + 0, + 0, + 0, + 26509, + 0, + 0, + 26510, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26512, + 0, + 26513, + 26515, + 0, + 0, + 0, + 26518, + 0, + 0, + 0, + 26519, + 0, + 26524, + 26526, + 0, + 0, + 0, + 26527, + 0, + 26532, + 0, + 26533, + 26537, + 26558, + 0, + 0, + 0, + 26559, + 0, + 0, + 0, + 26571, + 0, + 0, + 26573, + 0, + 26588, + 0, + 26593, + 0, + 0, + 0, + 0, + 0, + 0, + 26603, + 0, + 26604, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26606, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26607, + 26609, + 26611, + 26614, + 0, + 0, + 0, + 26616, + 26620, + 0, + 26621, + 0, + 0, + 0, + 0, + 0, + 26627, + 0, + 26629, + 0, + 0, + 26630, + 0, + 0, + 26632, + 26643, + 0, + 0, + 0, + 26644, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26646, + 26647, + 0, + 0, + 0, + 26650, + 0, + 0, + 26656, + 0, + 0, + 0, + 0, + 26663, + 26670, + 26671, + 0, + 0, + 0, + 26685, + 26686, + 26687, + 0, + 26689, + 0, + 0, + 0, + 0, + 26744, + 0, + 26745, + 0, + 26747, + 26748, + 0, + 26749, + 26750, + 26751, + 0, + 0, + 0, + 0, + 26752, + 26755, + 0, + 0, + 0, + 26756, + 26769, + 0, + 0, + 0, + 26774, + 0, + 0, + 0, + 0, + 0, + 26775, + 0, + 26777, + 26778, + 0, + 26786, + 0, + 0, + 0, + 26787, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26788, + 0, + 0, + 26789, + 0, + 0, + 0, + 0, + 0, + 26791, + 0, + 26792, + 26793, + 0, + 0, + 0, + 26794, + 0, + 26797, + 26798, + 0, + 0, + 0, + 26800, + 0, + 0, + 26803, + 0, + 26804, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26805, + 0, + 0, + 26808, + 0, + 0, + 26809, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26812, + 0, + 26825, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26826, + 0, + 0, + 26827, + 26829, + 26834, + 0, + 0, + 0, + 0, + 26835, + 0, + 0, + 26849, + 0, + 26851, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26852, + 0, + 26853, + 26857, + 0, + 26858, + 0, + 26859, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26876, + 0, + 26878, + 26882, + 26883, + 0, + 0, + 0, + 0, + 26890, + 26894, + 0, + 0, + 0, + 0, + 26895, + 26896, + 0, + 0, + 0, + 0, + 0, + 26900, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26911, + 26913, + 26914, + 26915, + 26916, + 26919, + 0, + 0, + 0, + 26921, + 26922, + 0, + 0, + 26925, + 0, + 0, + 0, + 26928, + 0, + 0, + 26929, + 26930, + 0, + 0, + 0, + 26931, + 0, + 26932, + 0, + 0, + 0, + 0, + 0, + 26933, + 0, + 0, + 0, + 0, + 0, + 0, + 26937, + 0, + 0, + 26943, + 0, + 0, + 26944, + 0, + 0, + 0, + 26946, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26956, + 0, + 26958, + 0, + 0, + 26963, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 26965, + 0, + 26969, + 26970, + 26972, + 0, + 0, + 0, + 0, + 0, + 26973, + 0, + 26974, + 0, + 26978, + 0, + 26980, + 0, + 0, + 0, + 0, + 0, + 0, + 26982, + 0, + 26986, + 26987, + 0, + 26990, + 0, + 0, + 0, + 0, + 27003, + 27006, + 0, + 0, + 27007, + 27010, + 27012, + 27013, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27014, + 27015, + 27018, + 0, + 27019, + 0, + 0, + 0, + 0, + 0, + 27025, + 0, + 0, + 0, + 27026, + 0, + 0, + 0, + 0, + 27029, + 27030, + 27031, + 27034, + 0, + 0, + 27036, + 27037, + 0, + 0, + 0, + 27038, + 27042, + 0, + 0, + 0, + 27044, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27045, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27046, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27047, + 27049, + 0, + 27050, + 0, + 0, + 0, + 27051, + 27052, + 0, + 27055, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27056, + 27058, + 27059, + 0, + 27061, + 0, + 27064, + 0, + 0, + 0, + 0, + 0, + 27069, + 0, + 0, + 27070, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27072, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27076, + 0, + 0, + 0, + 0, + 0, + 27078, + 0, + 27079, + 0, + 0, + 0, + 27081, + 0, + 0, + 0, + 0, + 0, + 0, + 27082, + 0, + 27083, + 27086, + 0, + 0, + 0, + 0, + 27087, + 0, + 0, + 0, + 0, + 0, + 27088, + 27090, + 0, + 27094, + 0, + 0, + 27095, + 0, + 27099, + 27102, + 0, + 0, + 0, + 27103, + 0, + 0, + 0, + 0, + 27105, + 0, + 0, + 0, + 27106, + 0, + 0, + 0, + 0, + 0, + 0, + 27107, + 0, + 0, + 0, + 0, + 27108, + 27117, + 0, + 0, + 0, + 0, + 27118, + 0, + 0, + 27124, + 0, + 27126, + 0, + 0, + 27130, + 27131, + 0, + 0, + 0, + 0, + 0, + 0, + 27147, + 0, + 0, + 0, + 0, + 27148, + 27149, + 0, + 0, + 0, + 0, + 27150, + 27151, + 0, + 27152, + 0, + 27159, + 0, + 0, + 0, + 27164, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27175, + 0, + 27189, + 0, + 0, + 27191, + 0, + 27193, + 0, + 27195, + 0, + 27198, + 0, + 0, + 0, + 0, + 0, + 27200, + 0, + 0, + 0, + 0, + 27202, + 0, + 0, + 0, + 0, + 27203, + 0, + 0, + 27204, + 0, + 0, + 27206, + 0, + 27207, + 0, + 0, + 0, + 0, + 27209, + 0, + 0, + 0, + 27213, + 0, + 0, + 27216, + 27219, + 27220, + 27222, + 27223, + 0, + 27224, + 0, + 27225, + 27226, + 0, + 0, + 27233, + 0, + 0, + 0, + 0, + 27235, + 0, + 27237, + 0, + 27238, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27239, + 0, + 27242, + 27243, + 0, + 27250, + 0, + 0, + 0, + 27251, + 0, + 27253, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27254, + 27255, + 27258, + 0, + 0, + 0, + 27259, + 0, + 0, + 0, + 0, + 0, + 0, + 27267, + 0, + 27276, + 27278, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27296, + 27297, + 27301, + 0, + 0, + 0, + 0, + 0, + 0, + 27302, + 0, + 0, + 0, + 0, + 0, + 0, + 27312, + 27313, + 0, + 0, + 0, + 0, + 0, + 27318, + 0, + 27320, + 0, + 27329, + 0, + 27330, + 27331, + 0, + 27332, + 0, + 0, + 0, + 0, + 27340, + 0, + 0, + 0, + 27348, + 0, + 0, + 0, + 0, + 0, + 0, + 27350, + 0, + 27351, + 0, + 0, + 0, + 0, + 27355, + 0, + 0, + 27358, + 27359, + 27361, + 0, + 0, + 0, + 27365, + 0, + 27367, + 0, + 27376, + 27378, + 0, + 0, + 27379, + 0, + 0, + 0, + 0, + 0, + 0, + 27396, + 0, + 27397, + 27404, + 0, + 0, + 0, + 0, + 0, + 27408, + 0, + 0, + 0, + 0, + 27453, + 0, + 0, + 0, + 27456, + 0, + 0, + 0, + 27458, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27459, + 0, + 0, + 0, + 27460, + 0, + 0, + 27461, + 0, + 27465, + 27467, + 0, + 0, + 27469, + 0, + 27470, + 0, + 27471, + 0, + 27477, + 27482, + 0, + 0, + 0, + 0, + 0, + 0, + 27484, + 0, + 0, + 0, + 0, + 0, + 0, + 27485, + 0, + 0, + 0, + 0, + 0, + 27493, + 0, + 27494, + 27502, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27511, + 27532, + 0, + 0, + 0, + 27533, + 27545, + 0, + 0, + 0, + 27546, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27547, + 0, + 0, + 27549, + 27550, + 0, + 27551, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27555, + 0, + 0, + 27571, + 0, + 27573, + 27574, + 27575, + 27577, + 0, + 27578, + 0, + 0, + 27579, + 27585, + 0, + 0, + 0, + 0, + 0, + 27586, + 0, + 0, + 27588, + 27589, + 0, + 0, + 0, + 0, + 27596, + 0, + 0, + 27600, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27608, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27610, + 0, + 0, + 0, + 27618, + 0, + 0, + 27620, + 0, + 0, + 0, + 27631, + 0, + 0, + 27632, + 27634, + 0, + 27636, + 27638, + 0, + 0, + 0, + 27643, + 0, + 27644, + 27649, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27651, + 27660, + 0, + 27661, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27662, + 0, + 0, + 27664, + 0, + 27665, + 0, + 0, + 0, + 27669, + 0, + 27671, + 0, + 0, + 0, + 27673, + 27674, + 0, + 0, + 0, + 27682, + 0, + 0, + 0, + 27711, + 0, + 27712, + 27713, + 27719, + 27720, + 0, + 0, + 27728, + 0, + 27729, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27731, + 0, + 0, + 27732, + 0, + 27733, + 0, + 27738, + 0, + 0, + 0, + 27742, + 0, + 0, + 0, + 27743, + 27744, + 0, + 0, + 0, + 0, + 0, + 0, + 27745, + 27746, + 0, + 0, + 0, + 27747, + 27748, + 27751, + 27752, + 0, + 0, + 0, + 27768, + 27770, + 0, + 0, + 0, + 27774, + 27775, + 0, + 27776, + 27777, + 0, + 0, + 27781, + 0, + 27784, + 0, + 27786, + 0, + 0, + 27791, + 0, + 27792, + 27793, + 27804, + 0, + 27812, + 27813, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27814, + 0, + 27825, + 0, + 27827, + 0, + 0, + 0, + 0, + 27828, + 27861, + 27862, + 0, + 0, + 0, + 27864, + 0, + 0, + 0, + 27865, + 27884, + 0, + 27889, + 0, + 0, + 0, + 0, + 0, + 27890, + 0, + 27891, + 0, + 0, + 0, + 27892, + 0, + 0, + 0, + 0, + 0, + 27897, + 27898, + 0, + 0, + 27899, + 0, + 0, + 0, + 27901, + 27905, + 0, + 0, + 27920, + 0, + 0, + 27921, + 0, + 27922, + 0, + 0, + 0, + 27931, + 27934, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27941, + 0, + 27942, + 0, + 27945, + 0, + 27947, + 27954, + 0, + 0, + 0, + 0, + 27960, + 27963, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 27964, + 27965, + 0, + 0, + 0, + 27967, + 0, + 27969, + 27975, + 0, + 27976, + 27977, + 0, + 27981, + 0, + 27983, + 28051, + 28052, + 0, + 0, + 0, + 0, + 0, + 28056, + 0, + 0, + 0, + 0, + 0, + 0, + 28058, + 28059, + 0, + 0, + 28061, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28063, + 0, + 0, + 0, + 0, + 0, + 0, + 28066, + 0, + 0, + 0, + 0, + 0, + 0, + 28069, + 28070, + 28072, + 0, + 28073, + 0, + 0, + 28074, + 0, + 0, + 0, + 0, + 28075, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28078, + 0, + 0, + 0, + 0, + 28085, + 0, + 0, + 0, + 0, + 28086, + 0, + 0, + 0, + 0, + 0, + 0, + 28088, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28090, + 0, + 28097, + 28114, + 28115, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28116, + 0, + 0, + 0, + 0, + 0, + 28118, + 0, + 28129, + 0, + 28131, + 0, + 0, + 28135, + 0, + 0, + 0, + 28140, + 28141, + 0, + 0, + 0, + 28146, + 0, + 0, + 0, + 0, + 28152, + 0, + 0, + 0, + 0, + 28155, + 28157, + 28161, + 0, + 0, + 0, + 0, + 28166, + 0, + 28167, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28172, + 0, + 0, + 0, + 0, + 0, + 0, + 28173, + 0, + 0, + 28175, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28178, + 28188, + 0, + 28190, + 0, + 0, + 0, + 0, + 0, + 28191, + 0, + 28193, + 28206, + 0, + 0, + 28207, + 28209, + 0, + 28211, + 0, + 28213, + 0, + 0, + 0, + 28215, + 28216, + 28217, + 0, + 28222, + 0, + 28223, + 28225, + 0, + 0, + 0, + 28226, + 0, + 28227, + 28229, + 28232, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28235, + 0, + 28241, + 0, + 0, + 28242, + 0, + 0, + 0, + 0, + 28243, + 0, + 0, + 0, + 28245, + 0, + 0, + 0, + 28248, + 28250, + 0, + 28251, + 28252, + 0, + 0, + 0, + 0, + 0, + 0, + 28253, + 0, + 0, + 28254, + 28255, + 0, + 0, + 28256, + 0, + 0, + 28258, + 0, + 0, + 0, + 0, + 0, + 28259, + 0, + 0, + 28260, + 0, + 0, + 28261, + 0, + 0, + 0, + 0, + 28262, + 28263, + 0, + 0, + 28264, + 0, + 0, + 0, + 28266, + 0, + 28268, + 28269, + 0, + 28270, + 28272, + 28274, + 0, + 28277, + 28278, + 0, + 0, + 0, + 28279, + 0, + 28280, + 28281, + 28283, + 0, + 28292, + 0, + 28294, + 0, + 28297, + 0, + 0, + 0, + 0, + 28299, + 0, + 0, + 0, + 0, + 0, + 28300, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28301, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28302, + 28303, + 0, + 0, + 0, + 0, + 28304, + 0, + 0, + 28305, + 0, + 28312, + 0, + 28313, + 28314, + 0, + 0, + 0, + 0, + 0, + 0, + 28315, + 0, + 0, + 0, + 28320, + 28321, + 0, + 0, + 28328, + 0, + 0, + 0, + 28329, + 28338, + 0, + 28339, + 0, + 0, + 28344, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28347, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28348, + 0, + 0, + 0, + 0, + 0, + 28411, + 0, + 28412, + 28413, + 0, + 28416, + 0, + 0, + 0, + 28420, + 0, + 0, + 0, + 0, + 0, + 28421, + 0, + 0, + 0, + 0, + 28423, + 0, + 0, + 0, + 28424, + 0, + 0, + 28428, + 0, + 0, + 0, + 0, + 0, + 28429, + 0, + 0, + 0, + 28431, + 28434, + 0, + 28458, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28464, + 0, + 0, + 0, + 0, + 28465, + 0, + 28467, + 0, + 0, + 0, + 0, + 0, + 0, + 28471, + 0, + 0, + 0, + 0, + 28474, + 0, + 28480, + 0, + 28481, + 0, + 0, + 28485, + 0, + 0, + 0, + 0, + 28486, + 28488, + 0, + 0, + 28489, + 0, + 0, + 0, + 0, + 28492, + 0, + 0, + 0, + 28495, + 0, + 28497, + 0, + 28499, + 0, + 0, + 0, + 0, + 28500, + 0, + 0, + 28502, + 28503, + 0, + 0, + 0, + 28508, + 0, + 0, + 0, + 28510, + 0, + 0, + 28512, + 28513, + 28514, + 28521, + 0, + 28526, + 0, + 28527, + 28528, + 0, + 0, + 0, + 0, + 28529, + 0, + 0, + 28532, + 0, + 0, + 28537, + 28538, + 0, + 0, + 0, + 28539, + 0, + 28548, + 0, + 28553, + 28554, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28560, + 28563, + 0, + 0, + 28564, + 0, + 0, + 0, + 0, + 28565, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28566, + 28568, + 0, + 0, + 0, + 0, + 0, + 0, + 28569, + 0, + 0, + 0, + 28570, + 0, + 28572, + 28573, + 0, + 0, + 0, + 0, + 28575, + 0, + 0, + 0, + 0, + 28576, + 28581, + 28588, + 0, + 0, + 28589, + 0, + 0, + 0, + 28590, + 28595, + 0, + 28598, + 0, + 0, + 28601, + 0, + 0, + 28605, + 0, + 0, + 0, + 0, + 28614, + 28615, + 28619, + 0, + 0, + 0, + 0, + 0, + 0, + 28620, + 0, + 28626, + 0, + 0, + 28628, + 0, + 28631, + 0, + 28632, + 0, + 0, + 0, + 0, + 0, + 0, + 28635, + 0, + 0, + 0, + 28637, + 28638, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28639, + 0, + 28643, + 0, + 0, + 28652, + 0, + 0, + 0, + 28662, + 0, + 28670, + 28671, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28672, + 28673, + 28675, + 28676, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28691, + 0, + 0, + 0, + 28695, + 0, + 0, + 0, + 28696, + 0, + 28697, + 28698, + 0, + 28705, + 0, + 28707, + 28708, + 28710, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28711, + 28728, + 0, + 0, + 0, + 28736, + 0, + 0, + 0, + 28737, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28738, + 0, + 28739, + 0, + 28741, + 0, + 0, + 28742, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28745, + 0, + 0, + 0, + 0, + 0, + 0, + 28749, + 28750, + 28752, + 28754, + 28756, + 0, + 28757, + 0, + 0, + 0, + 0, + 28759, + 28760, + 0, + 0, + 0, + 0, + 0, + 0, + 28762, + 0, + 0, + 0, + 28764, + 0, + 0, + 0, + 0, + 0, + 0, + 28766, + 0, + 28767, + 28768, + 0, + 0, + 0, + 0, + 28769, + 28770, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28771, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28772, + 0, + 28773, + 0, + 28782, + 0, + 0, + 0, + 0, + 0, + 0, + 28784, + 0, + 28785, + 0, + 28786, + 0, + 0, + 0, + 28787, + 0, + 0, + 0, + 28797, + 0, + 0, + 0, + 0, + 0, + 0, + 28799, + 0, + 0, + 28801, + 0, + 0, + 0, + 0, + 28802, + 0, + 28805, + 0, + 0, + 28806, + 0, + 0, + 28807, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28808, + 0, + 0, + 0, + 0, + 0, + 28810, + 28812, + 0, + 0, + 28816, + 28819, + 0, + 0, + 28821, + 0, + 28826, + 0, + 0, + 0, + 28842, + 28852, + 0, + 0, + 28853, + 0, + 28854, + 28855, + 0, + 0, + 0, + 28857, + 0, + 0, + 0, + 28858, + 0, + 28867, + 28868, + 28869, + 0, + 0, + 0, + 28874, + 28880, + 28882, + 28890, + 28892, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28895, + 0, + 0, + 0, + 28898, + 28899, + 0, + 0, + 0, + 28900, + 0, + 0, + 28904, + 0, + 28906, + 0, + 0, + 0, + 0, + 28907, + 0, + 0, + 0, + 0, + 0, + 0, + 28908, + 0, + 0, + 0, + 28910, + 0, + 28914, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28915, + 28916, + 28919, + 0, + 0, + 28920, + 0, + 28921, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28924, + 0, + 0, + 0, + 0, + 28926, + 28929, + 0, + 0, + 0, + 28930, + 0, + 28936, + 0, + 28939, + 0, + 0, + 0, + 0, + 28942, + 0, + 0, + 0, + 0, + 0, + 0, + 28956, + 0, + 0, + 0, + 28966, + 0, + 0, + 0, + 0, + 28967, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 28968, + 0, + 28971, + 0, + 28975, + 28976, + 0, + 28982, + 28983, + 0, + 0, + 28984, + 28989, + 28996, + 28997, + 28998, + 0, + 0, + 0, + 0, + 0, + 0, + 28999, + 0, + 0, + 0, + 0, + 0, + 29000, + 0, + 29001, + 0, + 0, + 0, + 29009, + 0, + 0, + 29011, + 0, + 0, + 29021, + 0, + 0, + 0, + 0, + 29024, + 0, + 29025, + 0, + 0, + 0, + 0, + 0, + 29026, + 0, + 0, + 0, + 29036, + 0, + 0, + 0, + 29037, + 0, + 0, + 0, + 0, + 29038, + 0, + 29045, + 0, + 29047, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29051, + 0, + 0, + 0, + 29054, + 29056, + 29062, + 0, + 29070, + 29082, + 0, + 0, + 0, + 29083, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29084, + 0, + 0, + 0, + 0, + 29085, + 29088, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29090, + 29097, + 0, + 0, + 0, + 29103, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29105, + 0, + 0, + 0, + 0, + 0, + 29107, + 0, + 29109, + 0, + 0, + 0, + 29115, + 0, + 0, + 29120, + 0, + 0, + 29138, + 29140, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29152, + 0, + 29160, + 29174, + 0, + 29176, + 0, + 0, + 29180, + 0, + 29181, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29228, + 0, + 0, + 29229, + 0, + 0, + 29230, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29234, + 0, + 0, + 0, + 29241, + 0, + 29245, + 0, + 29248, + 0, + 29250, + 29256, + 29280, + 0, + 29282, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29285, + 0, + 0, + 29286, + 29291, + 29292, + 0, + 0, + 0, + 0, + 29294, + 0, + 29295, + 0, + 0, + 0, + 0, + 0, + 29296, + 29297, + 29298, + 29300, + 0, + 29302, + 0, + 0, + 29304, + 29307, + 0, + 29312, + 0, + 0, + 0, + 29322, + 0, + 0, + 29323, + 0, + 0, + 29324, + 29326, + 29328, + 0, + 29335, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29338, + 29339, + 0, + 0, + 0, + 0, + 0, + 29341, + 29343, + 0, + 0, + 0, + 0, + 29344, + 0, + 0, + 0, + 0, + 0, + 29345, + 0, + 0, + 0, + 0, + 29346, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29347, + 29348, + 29349, + 0, + 0, + 29354, + 0, + 0, + 29355, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29357, + 0, + 0, + 0, + 0, + 29364, + 0, + 29365, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29366, + 0, + 0, + 29368, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29378, + 0, + 29381, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29386, + 0, + 0, + 0, + 0, + 0, + 0, + 29389, + 0, + 0, + 0, + 29390, + 0, + 0, + 29391, + 29397, + 0, + 29398, + 29412, + 29414, + 29418, + 29419, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29420, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29423, + 0, + 0, + 0, + 29435, + 0, + 0, + 0, + 29437, + 0, + 0, + 29439, + 0, + 29441, + 0, + 0, + 0, + 0, + 29443, + 0, + 29446, + 29450, + 29452, + 0, + 0, + 0, + 0, + 0, + 29456, + 0, + 0, + 0, + 0, + 0, + 29461, + 0, + 0, + 0, + 29464, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29468, + 0, + 29473, + 0, + 0, + 0, + 29486, + 0, + 0, + 0, + 29490, + 0, + 0, + 0, + 29491, + 29492, + 0, + 0, + 29497, + 0, + 0, + 0, + 29498, + 0, + 29499, + 0, + 29502, + 29505, + 0, + 29509, + 0, + 0, + 0, + 29510, + 0, + 0, + 0, + 29512, + 0, + 0, + 0, + 29516, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29518, + 0, + 29519, + 0, + 0, + 0, + 0, + 0, + 29520, + 29521, + 29529, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29530, + 0, + 0, + 29531, + 29538, + 0, + 29540, + 0, + 0, + 0, + 29542, + 0, + 29543, + 29544, + 29547, + 0, + 0, + 29548, + 0, + 0, + 0, + 29549, + 0, + 0, + 0, + 29550, + 0, + 0, + 29552, + 0, + 0, + 0, + 0, + 29558, + 29561, + 0, + 29562, + 29564, + 0, + 0, + 29565, + 0, + 0, + 29566, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29578, + 29584, + 29586, + 29591, + 0, + 0, + 0, + 0, + 29593, + 29594, + 0, + 0, + 29597, + 0, + 0, + 29613, + 0, + 29614, + 0, + 29615, + 0, + 0, + 0, + 0, + 29616, + 29617, + 0, + 0, + 29625, + 0, + 0, + 0, + 29632, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29633, + 0, + 0, + 0, + 0, + 0, + 29634, + 29635, + 29637, + 0, + 29638, + 0, + 29641, + 29643, + 0, + 0, + 0, + 0, + 0, + 0, + 29644, + 0, + 29645, + 0, + 29649, + 0, + 0, + 0, + 29650, + 0, + 29653, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29656, + 29659, + 0, + 0, + 29660, + 0, + 0, + 0, + 29661, + 0, + 0, + 0, + 0, + 0, + 29664, + 0, + 0, + 0, + 29671, + 29673, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29675, + 0, + 29677, + 29679, + 0, + 0, + 29684, + 0, + 0, + 0, + 0, + 0, + 29685, + 0, + 0, + 0, + 29687, + 0, + 0, + 0, + 29688, + 0, + 29689, + 29690, + 29700, + 0, + 29701, + 0, + 0, + 0, + 29702, + 0, + 29706, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29720, + 0, + 29721, + 0, + 29727, + 0, + 29733, + 29734, + 0, + 29750, + 29761, + 0, + 29763, + 0, + 0, + 0, + 0, + 0, + 29764, + 0, + 0, + 29765, + 0, + 0, + 0, + 29771, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29772, + 0, + 0, + 0, + 29773, + 29774, + 29775, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29822, + 0, + 0, + 0, + 29824, + 0, + 29825, + 0, + 0, + 0, + 0, + 0, + 29827, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29829, + 0, + 29832, + 29834, + 0, + 0, + 29835, + 0, + 0, + 29837, + 29838, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29843, + 0, + 0, + 0, + 0, + 29844, + 29845, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29849, + 0, + 0, + 29869, + 29872, + 29890, + 29905, + 0, + 0, + 0, + 0, + 0, + 29907, + 29921, + 0, + 29922, + 0, + 0, + 29923, + 29926, + 29944, + 29946, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 29947, + 29948, + 0, + 0, + 0, + 29951, + 0, + 0, + 0, + 0, + 0, + 29953, + 0, + 0, + 29956, + 0, + 29957, + 0, + 0, + 29962, + 0, + 0, + 0, + 0, + 29971, + 0, + 0, + 0, + 29972, + 0, + 0, + 0, + 0, + 0, + 29978, + 0, + 29979, + 29992, + 30007, + 30008, + 30010, + 0, + 0, + 0, + 30013, + 0, + 0, + 0, + 0, + 30014, + 30016, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30017, + 0, + 0, + 0, + 0, + 0, + 30023, + 30031, + 0, + 0, + 30033, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30034, + 0, + 30038, + 0, + 30039, + 0, + 30040, + 0, + 0, + 0, + 0, + 0, + 0, + 30067, + 30068, + 0, + 0, + 0, + 30069, + 0, + 30072, + 0, + 0, + 0, + 30073, + 0, + 0, + 0, + 0, + 30075, + 0, + 0, + 0, + 0, + 0, + 0, + 30079, + 0, + 0, + 30080, + 0, + 0, + 0, + 0, + 0, + 30082, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30084, + 30090, + 0, + 0, + 30091, + 0, + 0, + 0, + 0, + 30098, + 30118, + 0, + 30119, + 0, + 30121, + 30130, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30131, + 30132, + 30133, + 0, + 0, + 0, + 0, + 0, + 0, + 30135, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30136, + 0, + 0, + 30137, + 30138, + 0, + 0, + 0, + 30139, + 30146, + 0, + 0, + 0, + 0, + 0, + 30147, + 0, + 0, + 30148, + 30151, + 0, + 0, + 0, + 30168, + 0, + 30172, + 30173, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30180, + 30181, + 0, + 30192, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30194, + 30196, + 0, + 0, + 30199, + 0, + 0, + 30202, + 0, + 0, + 0, + 0, + 30203, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30213, + 0, + 0, + 0, + 30216, + 0, + 0, + 30217, + 0, + 0, + 0, + 30218, + 0, + 0, + 0, + 0, + 30219, + 0, + 30220, + 0, + 30222, + 30227, + 0, + 0, + 0, + 0, + 0, + 30231, + 0, + 0, + 30233, + 30235, + 0, + 0, + 0, + 0, + 30238, + 0, + 30240, + 30243, + 30245, + 0, + 30250, + 30252, + 0, + 0, + 0, + 30269, + 0, + 0, + 30271, + 30272, + 0, + 0, + 0, + 30278, + 30280, + 0, + 0, + 30282, + 0, + 30284, + 0, + 30294, + 0, + 0, + 0, + 0, + 30295, + 30296, + 0, + 0, + 0, + 0, + 0, + 30298, + 30299, + 30302, + 30304, + 30306, + 0, + 0, + 0, + 0, + 0, + 0, + 30316, + 30317, + 0, + 0, + 0, + 30318, + 0, + 0, + 0, + 30319, + 0, + 30320, + 30322, + 30326, + 0, + 0, + 0, + 0, + 0, + 30327, + 0, + 30332, + 30348, + 30349, + 0, + 0, + 30356, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30357, + 0, + 30358, + 0, + 30359, + 30360, + 0, + 0, + 30365, + 30366, + 30378, + 0, + 0, + 0, + 0, + 30379, + 0, + 0, + 30381, + 0, + 30385, + 0, + 30388, + 30397, + 0, + 0, + 0, + 30401, + 0, + 0, + 0, + 0, + 30403, + 0, + 0, + 0, + 0, + 0, + 30404, + 0, + 0, + 30405, + 0, + 30406, + 30408, + 0, + 30409, + 0, + 30410, + 0, + 0, + 0, + 30417, + 0, + 0, + 30418, + 30419, + 0, + 30420, + 0, + 30424, + 0, + 0, + 0, + 30427, + 30430, + 30432, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30433, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30436, + 0, + 30437, + 30438, + 0, + 30441, + 30442, + 0, + 0, + 0, + 30445, + 0, + 0, + 0, + 0, + 30452, + 30456, + 30457, + 0, + 0, + 0, + 30458, + 0, + 30464, + 0, + 0, + 0, + 0, + 0, + 0, + 30467, + 0, + 30469, + 0, + 0, + 0, + 0, + 0, + 30477, + 0, + 0, + 30484, + 0, + 0, + 0, + 0, + 0, + 30485, + 0, + 0, + 0, + 0, + 0, + 30486, + 30487, + 30497, + 30498, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30505, + 0, + 30508, + 0, + 0, + 0, + 30509, + 30510, + 0, + 30514, + 30516, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30523, + 0, + 30524, + 0, + 30525, + 0, + 0, + 0, + 0, + 30537, + 0, + 0, + 30538, + 0, + 0, + 0, + 0, + 0, + 30553, + 0, + 0, + 30555, + 30556, + 30558, + 30559, + 30560, + 0, + 0, + 30561, + 0, + 30562, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30563, + 30570, + 30571, + 0, + 30586, + 30587, + 0, + 0, + 30590, + 0, + 0, + 30594, + 0, + 0, + 0, + 0, + 30611, + 30612, + 30623, + 30634, + 0, + 0, + 30636, + 30640, + 30655, + 30656, + 0, + 30657, + 0, + 0, + 30658, + 30669, + 0, + 30670, + 0, + 30676, + 30678, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30679, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30695, + 0, + 0, + 30698, + 0, + 0, + 0, + 0, + 30700, + 0, + 0, + 0, + 0, + 30701, + 0, + 30702, + 30703, + 0, + 0, + 0, + 0, + 30707, + 0, + 0, + 0, + 30709, + 0, + 0, + 30710, + 30719, + 30729, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30731, + 0, + 0, + 30733, + 0, + 0, + 0, + 30734, + 0, + 0, + 0, + 0, + 0, + 30736, + 30737, + 0, + 0, + 0, + 30740, + 0, + 0, + 0, + 30743, + 0, + 30746, + 0, + 30747, + 30748, + 0, + 0, + 30751, + 30752, + 30753, + 0, + 0, + 0, + 30754, + 0, + 0, + 30760, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30763, + 0, + 30764, + 0, + 0, + 30766, + 0, + 30769, + 30770, + 30771, + 30774, + 30777, + 0, + 0, + 30779, + 30780, + 30781, + 0, + 0, + 0, + 0, + 30790, + 0, + 0, + 0, + 30792, + 0, + 0, + 0, + 0, + 30810, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30812, + 30819, + 0, + 0, + 30823, + 30824, + 0, + 30825, + 0, + 30827, + 0, + 0, + 0, + 0, + 0, + 0, + 30828, + 0, + 0, + 30830, + 0, + 0, + 0, + 30834, + 0, + 30835, + 0, + 30837, + 30838, + 0, + 30845, + 0, + 0, + 0, + 0, + 0, + 30846, + 30847, + 0, + 0, + 30849, + 0, + 30851, + 0, + 0, + 0, + 0, + 0, + 30852, + 30858, + 0, + 0, + 30859, + 0, + 30865, + 0, + 0, + 30866, + 0, + 0, + 30868, + 0, + 0, + 30869, + 0, + 0, + 0, + 30881, + 30883, + 0, + 0, + 0, + 0, + 0, + 30889, + 0, + 30891, + 0, + 0, + 0, + 0, + 30894, + 0, + 30895, + 0, + 30897, + 0, + 30898, + 0, + 0, + 0, + 30904, + 30906, + 0, + 30909, + 0, + 0, + 0, + 0, + 0, + 0, + 30910, + 0, + 0, + 0, + 30915, + 30933, + 30942, + 0, + 0, + 0, + 0, + 30943, + 0, + 0, + 30945, + 0, + 0, + 0, + 0, + 0, + 0, + 30946, + 0, + 0, + 30947, + 0, + 0, + 30955, + 30956, + 0, + 0, + 30960, + 0, + 0, + 30961, + 30962, + 30966, + 0, + 0, + 30969, + 30974, + 0, + 0, + 0, + 30976, + 0, + 0, + 30977, + 0, + 30978, + 30982, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 30994, + 30995, + 30998, + 0, + 31000, + 0, + 0, + 31001, + 0, + 0, + 31003, + 31005, + 0, + 0, + 31006, + 31011, + 0, + 0, + 31014, + 0, + 31016, + 0, + 0, + 0, + 0, + 31018, + 0, + 0, + 31020, + 31023, + 31024, + 31025, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31027, + 31028, + 31029, + 0, + 0, + 0, + 0, + 0, + 0, + 31032, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31036, + 31037, + 31038, + 0, + 0, + 0, + 31041, + 31043, + 31045, + 0, + 31047, + 0, + 0, + 0, + 31048, + 0, + 31049, + 0, + 0, + 0, + 31053, + 31054, + 31055, + 0, + 0, + 31063, + 0, + 0, + 0, + 0, + 0, + 31066, + 0, + 31068, + 31071, + 0, + 0, + 0, + 31072, + 31073, + 0, + 0, + 0, + 0, + 31075, + 0, + 0, + 31076, + 0, + 0, + 0, + 31077, + 31079, + 0, + 31080, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31087, + 0, + 31142, + 0, + 31144, + 0, + 0, + 31145, + 31146, + 31147, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31149, + 0, + 31151, + 31152, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31162, + 31171, + 31174, + 31175, + 0, + 0, + 0, + 31176, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31179, + 0, + 0, + 0, + 31186, + 0, + 0, + 0, + 31192, + 31195, + 0, + 0, + 31196, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31198, + 0, + 0, + 0, + 0, + 0, + 31199, + 0, + 0, + 0, + 31205, + 0, + 0, + 0, + 0, + 31211, + 31215, + 0, + 0, + 0, + 0, + 31231, + 0, + 31232, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31233, + 31236, + 31253, + 0, + 31254, + 0, + 0, + 0, + 0, + 0, + 0, + 31255, + 0, + 0, + 31257, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31258, + 31259, + 0, + 0, + 31260, + 0, + 31261, + 0, + 0, + 0, + 0, + 0, + 31262, + 31263, + 0, + 0, + 31264, + 0, + 31266, + 0, + 31267, + 0, + 0, + 0, + 0, + 0, + 31281, + 0, + 31282, + 0, + 31284, + 0, + 0, + 31285, + 31287, + 31288, + 0, + 0, + 31290, + 0, + 0, + 0, + 31292, + 31295, + 0, + 31299, + 0, + 31300, + 0, + 0, + 0, + 0, + 0, + 31302, + 0, + 0, + 0, + 0, + 31303, + 0, + 0, + 0, + 0, + 0, + 0, + 31304, + 0, + 0, + 0, + 0, + 0, + 31305, + 31308, + 31309, + 31315, + 0, + 31317, + 0, + 0, + 0, + 0, + 0, + 31323, + 0, + 31324, + 0, + 0, + 0, + 0, + 0, + 31325, + 31327, + 0, + 0, + 31331, + 0, + 0, + 0, + 0, + 0, + 31333, + 0, + 0, + 0, + 0, + 0, + 31336, + 0, + 0, + 31337, + 0, + 0, + 0, + 0, + 0, + 0, + 31338, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31339, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31342, + 0, + 0, + 0, + 0, + 31345, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31347, + 0, + 0, + 0, + 0, + 0, + 0, + 31348, + 0, + 0, + 31350, + 31351, + 0, + 31352, + 0, + 0, + 31354, + 0, + 0, + 0, + 0, + 31355, + 0, + 0, + 31356, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31363, + 0, + 31372, + 0, + 0, + 31373, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31376, + 0, + 31388, + 0, + 31389, + 0, + 31392, + 0, + 31401, + 0, + 31405, + 31407, + 31408, + 0, + 31409, + 0, + 0, + 0, + 0, + 0, + 0, + 31413, + 31415, + 0, + 0, + 0, + 31416, + 31418, + 0, + 0, + 0, + 0, + 0, + 0, + 31422, + 31423, + 0, + 0, + 31424, + 0, + 31425, + 31432, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31433, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31434, + 0, + 0, + 0, + 0, + 0, + 0, + 31435, + 0, + 0, + 0, + 0, + 31438, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31442, + 0, + 31444, + 0, + 31448, + 0, + 0, + 31451, + 0, + 0, + 0, + 0, + 31452, + 0, + 31461, + 31465, + 0, + 0, + 31466, + 0, + 0, + 31467, + 0, + 0, + 31468, + 0, + 0, + 0, + 31469, + 31473, + 0, + 31476, + 0, + 0, + 0, + 0, + 31489, + 31490, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31492, + 31493, + 31494, + 0, + 0, + 0, + 0, + 31501, + 31504, + 31505, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31509, + 0, + 0, + 0, + 0, + 31510, + 0, + 0, + 31511, + 0, + 0, + 31513, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31514, + 0, + 31522, + 31536, + 31539, + 31540, + 0, + 31541, + 0, + 0, + 0, + 0, + 0, + 0, + 31546, + 31553, + 31559, + 0, + 0, + 0, + 31560, + 31561, + 31562, + 0, + 0, + 31564, + 31567, + 0, + 31569, + 0, + 0, + 0, + 31570, + 0, + 0, + 0, + 0, + 31571, + 0, + 0, + 0, + 0, + 0, + 0, + 31572, + 31574, + 31580, + 31581, + 0, + 0, + 31582, + 31584, + 31585, + 31586, + 31595, + 0, + 31596, + 0, + 0, + 0, + 0, + 31597, + 0, + 31599, + 0, + 31600, + 31601, + 0, + 0, + 31603, + 31604, + 0, + 0, + 31608, + 31610, + 0, + 0, + 0, + 31611, + 0, + 31615, + 0, + 0, + 0, + 0, + 31616, + 0, + 0, + 0, + 0, + 0, + 0, + 31617, + 0, + 0, + 0, + 0, + 0, + 31618, + 0, + 0, + 0, + 0, + 0, + 0, + 31621, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31622, + 31625, + 0, + 0, + 0, + 0, + 31627, + 0, + 31641, + 0, + 0, + 31642, + 0, + 0, + 31643, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31644, + 0, + 31646, + 0, + 0, + 0, + 0, + 31648, + 0, + 0, + 0, + 31652, + 0, + 0, + 0, + 31657, + 0, + 0, + 31676, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 31689, + 31691, + 31692, + 0, + 31694, + 0, + 0, + 0, + 31696, + 0, + 31702, + 0, + 31703, + 0, +} + +var kStaticDictionaryWords = [31705]dictWord{ + dictWord{0, 0, 0}, + dictWord{8, 0, 1002}, + dictWord{136, 0, 1015}, + dictWord{4, 0, 683}, + dictWord{4, 10, 325}, + dictWord{138, 10, 125}, + dictWord{7, 11, 572}, + dictWord{ + 9, + 11, + 592, + }, + dictWord{11, 11, 680}, + dictWord{11, 11, 842}, + dictWord{11, 11, 924}, + dictWord{12, 11, 356}, + dictWord{12, 11, 550}, + dictWord{13, 11, 317}, + dictWord{13, 11, 370}, + dictWord{13, 11, 469}, + dictWord{13, 11, 471}, + dictWord{14, 11, 397}, + dictWord{18, 11, 69}, + dictWord{146, 11, 145}, + dictWord{ + 134, + 0, + 1265, + }, + dictWord{136, 11, 534}, + dictWord{134, 0, 1431}, + dictWord{11, 0, 138}, + dictWord{140, 0, 40}, + dictWord{4, 0, 155}, + dictWord{7, 0, 1689}, + dictWord{ + 4, + 10, + 718, + }, + dictWord{135, 10, 1216}, + dictWord{4, 0, 245}, + dictWord{5, 0, 151}, + dictWord{5, 0, 741}, + dictWord{6, 0, 1147}, + dictWord{7, 0, 498}, + dictWord{7, 0, 870}, + dictWord{7, 0, 1542}, + dictWord{12, 0, 213}, + dictWord{14, 0, 36}, + dictWord{14, 0, 391}, + dictWord{17, 0, 111}, + dictWord{18, 0, 6}, + dictWord{18, 0, 46}, + dictWord{ + 18, + 0, + 151, + }, + dictWord{19, 0, 36}, + dictWord{20, 0, 32}, + dictWord{20, 0, 56}, + dictWord{20, 0, 69}, + dictWord{20, 0, 102}, + dictWord{21, 0, 4}, + dictWord{22, 0, 8}, + dictWord{ + 22, + 0, + 10, + }, + dictWord{22, 0, 14}, + dictWord{150, 0, 31}, + dictWord{4, 0, 624}, + dictWord{135, 0, 1752}, + dictWord{5, 10, 124}, + dictWord{5, 10, 144}, + dictWord{6, 10, 548}, + dictWord{7, 10, 15}, + dictWord{7, 10, 153}, + dictWord{137, 10, 629}, + dictWord{6, 0, 503}, + dictWord{9, 0, 586}, + dictWord{13, 0, 468}, + dictWord{14, 0, 66}, + dictWord{ + 16, + 0, + 58, + }, + dictWord{7, 10, 1531}, + dictWord{8, 10, 416}, + dictWord{9, 10, 275}, + dictWord{10, 10, 100}, + dictWord{11, 10, 658}, + dictWord{11, 10, 979}, + dictWord{ + 12, + 10, + 86, + }, + dictWord{14, 10, 207}, + dictWord{15, 10, 20}, + dictWord{143, 10, 25}, + dictWord{5, 0, 603}, + dictWord{7, 0, 1212}, + dictWord{9, 0, 565}, + dictWord{ + 14, + 0, + 301, + }, + dictWord{5, 10, 915}, + dictWord{6, 10, 1783}, + dictWord{7, 10, 211}, + dictWord{7, 10, 1353}, + dictWord{9, 10, 83}, + dictWord{10, 10, 376}, + dictWord{ + 10, + 10, + 431, + }, + dictWord{11, 10, 543}, + dictWord{12, 10, 664}, + dictWord{13, 10, 280}, + dictWord{13, 10, 428}, + dictWord{14, 10, 128}, + dictWord{17, 10, 52}, + dictWord{ + 145, + 10, + 81, + }, + dictWord{4, 0, 492}, + dictWord{133, 0, 451}, + dictWord{135, 0, 835}, + dictWord{141, 0, 70}, + dictWord{132, 0, 539}, + dictWord{7, 11, 748}, + dictWord{ + 139, + 11, + 700, + }, + dictWord{7, 11, 1517}, + dictWord{11, 11, 597}, + dictWord{14, 11, 76}, + dictWord{14, 11, 335}, + dictWord{148, 11, 33}, + dictWord{6, 0, 113}, + dictWord{135, 0, 436}, + dictWord{4, 10, 338}, + dictWord{133, 10, 400}, + dictWord{136, 0, 718}, + dictWord{133, 11, 127}, + dictWord{133, 11, 418}, + dictWord{ + 6, + 0, + 1505, + }, + dictWord{7, 0, 520}, + dictWord{6, 11, 198}, + dictWord{11, 10, 892}, + dictWord{140, 11, 83}, + dictWord{4, 10, 221}, + dictWord{5, 10, 659}, + dictWord{ + 5, + 10, + 989, + }, + dictWord{7, 10, 697}, + dictWord{7, 10, 1211}, + dictWord{138, 10, 284}, + dictWord{135, 0, 1070}, + dictWord{5, 11, 276}, + dictWord{6, 11, 55}, + dictWord{ + 135, + 11, + 1369, + }, + dictWord{134, 0, 1515}, + dictWord{6, 11, 1752}, + dictWord{136, 11, 726}, + dictWord{138, 10, 507}, + dictWord{15, 0, 78}, + dictWord{4, 10, 188}, + dictWord{135, 10, 805}, + dictWord{5, 10, 884}, + dictWord{139, 10, 991}, + dictWord{133, 11, 764}, + dictWord{134, 10, 1653}, + dictWord{6, 11, 309}, + dictWord{ + 7, + 11, + 331, + }, + dictWord{138, 11, 550}, + dictWord{135, 11, 1861}, + dictWord{132, 11, 348}, + dictWord{135, 11, 986}, + dictWord{135, 11, 1573}, + dictWord{ + 12, + 0, + 610, + }, + dictWord{13, 0, 431}, + dictWord{144, 0, 59}, + dictWord{9, 11, 799}, + dictWord{140, 10, 166}, + dictWord{134, 0, 1530}, + dictWord{132, 0, 750}, + dictWord{132, 0, 307}, + dictWord{133, 0, 964}, + dictWord{6, 11, 194}, + dictWord{7, 11, 133}, + dictWord{10, 11, 493}, + dictWord{10, 11, 570}, + dictWord{139, 11, 664}, + dictWord{5, 11, 24}, + dictWord{5, 11, 569}, + dictWord{6, 11, 3}, + dictWord{6, 11, 119}, + dictWord{6, 11, 143}, + dictWord{6, 11, 440}, + dictWord{7, 11, 295}, + dictWord{ + 7, + 11, + 599, + }, + dictWord{7, 11, 1686}, + dictWord{7, 11, 1854}, + dictWord{8, 11, 424}, + dictWord{9, 11, 43}, + dictWord{9, 11, 584}, + dictWord{9, 11, 760}, + dictWord{ + 10, + 11, + 148, + }, + dictWord{10, 11, 328}, + dictWord{11, 11, 159}, + dictWord{11, 11, 253}, + dictWord{11, 11, 506}, + dictWord{12, 11, 487}, + dictWord{12, 11, 531}, + dictWord{144, 11, 33}, + dictWord{136, 10, 760}, + dictWord{5, 11, 14}, + dictWord{5, 11, 892}, + dictWord{6, 11, 283}, + dictWord{7, 11, 234}, + dictWord{136, 11, 537}, + dictWord{135, 11, 1251}, + dictWord{4, 11, 126}, + dictWord{8, 11, 635}, + dictWord{147, 11, 34}, + dictWord{4, 11, 316}, + dictWord{135, 11, 1561}, + dictWord{ + 6, + 0, + 999, + }, + dictWord{6, 0, 1310}, + dictWord{137, 11, 861}, + dictWord{4, 11, 64}, + dictWord{5, 11, 352}, + dictWord{5, 11, 720}, + dictWord{6, 11, 368}, + dictWord{ + 139, + 11, + 359, + }, + dictWord{4, 0, 75}, + dictWord{5, 0, 180}, + dictWord{6, 0, 500}, + dictWord{7, 0, 58}, + dictWord{7, 0, 710}, + dictWord{10, 0, 645}, + dictWord{136, 10, 770}, + dictWord{133, 0, 649}, + dictWord{6, 0, 276}, + dictWord{7, 0, 282}, + dictWord{7, 0, 879}, + dictWord{7, 0, 924}, + dictWord{8, 0, 459}, + dictWord{9, 0, 599}, + dictWord{9, 0, 754}, + dictWord{11, 0, 574}, + dictWord{12, 0, 128}, + dictWord{12, 0, 494}, + dictWord{13, 0, 52}, + dictWord{13, 0, 301}, + dictWord{15, 0, 30}, + dictWord{143, 0, 132}, + dictWord{132, 0, 200}, + dictWord{4, 10, 89}, + dictWord{5, 10, 489}, + dictWord{6, 10, 315}, + dictWord{7, 10, 553}, + dictWord{7, 10, 1745}, + dictWord{138, 10, 243}, + dictWord{135, 11, 1050}, + dictWord{7, 0, 1621}, + dictWord{6, 10, 1658}, + dictWord{9, 10, 3}, + dictWord{10, 10, 154}, + dictWord{11, 10, 641}, + dictWord{13, 10, 85}, + dictWord{13, 10, 201}, + dictWord{141, 10, 346}, + dictWord{6, 11, 175}, + dictWord{137, 11, 289}, + dictWord{5, 11, 432}, + dictWord{133, 11, 913}, + dictWord{ + 6, + 0, + 225, + }, + dictWord{137, 0, 211}, + dictWord{7, 0, 718}, + dictWord{8, 0, 687}, + dictWord{139, 0, 374}, + dictWord{4, 10, 166}, + dictWord{133, 10, 505}, + dictWord{ + 9, + 0, + 110, + }, + dictWord{134, 10, 1670}, + dictWord{8, 0, 58}, + dictWord{9, 0, 724}, + dictWord{11, 0, 809}, + dictWord{13, 0, 113}, + dictWord{145, 0, 72}, + dictWord{6, 0, 345}, + dictWord{7, 0, 1247}, + dictWord{144, 11, 82}, + dictWord{5, 11, 931}, + dictWord{134, 11, 1698}, + dictWord{8, 0, 767}, + dictWord{8, 0, 803}, + dictWord{9, 0, 301}, + dictWord{137, 0, 903}, + dictWord{139, 0, 203}, + dictWord{134, 0, 1154}, + dictWord{7, 0, 1949}, + dictWord{136, 0, 674}, + dictWord{134, 0, 259}, + dictWord{ + 135, + 0, + 1275, + }, + dictWord{5, 11, 774}, + dictWord{6, 11, 1637}, + dictWord{6, 11, 1686}, + dictWord{134, 11, 1751}, + dictWord{134, 0, 1231}, + dictWord{7, 10, 445}, + dictWord{8, 10, 307}, + dictWord{8, 10, 704}, + dictWord{10, 10, 41}, + dictWord{10, 10, 439}, + dictWord{11, 10, 237}, + dictWord{11, 10, 622}, + dictWord{140, 10, 201}, + dictWord{136, 0, 254}, + dictWord{6, 11, 260}, + dictWord{135, 11, 1484}, + dictWord{139, 0, 277}, + dictWord{135, 10, 1977}, + dictWord{4, 10, 189}, + dictWord{ + 5, + 10, + 713, + }, + dictWord{6, 11, 573}, + dictWord{136, 10, 57}, + dictWord{138, 10, 371}, + dictWord{132, 10, 552}, + dictWord{134, 11, 344}, + dictWord{133, 0, 248}, + dictWord{9, 0, 800}, + dictWord{10, 0, 693}, + dictWord{11, 0, 482}, + dictWord{11, 0, 734}, + dictWord{11, 0, 789}, + dictWord{134, 11, 240}, + dictWord{4, 0, 116}, + dictWord{ + 5, + 0, + 95, + }, + dictWord{5, 0, 445}, + dictWord{7, 0, 1688}, + dictWord{8, 0, 29}, + dictWord{9, 0, 272}, + dictWord{11, 0, 509}, + dictWord{11, 0, 915}, + dictWord{4, 11, 292}, + dictWord{4, 11, 736}, + dictWord{5, 11, 871}, + dictWord{6, 11, 171}, + dictWord{6, 11, 1689}, + dictWord{7, 11, 1324}, + dictWord{7, 11, 1944}, + dictWord{9, 11, 415}, + dictWord{9, 11, 580}, + dictWord{14, 11, 230}, + dictWord{146, 11, 68}, + dictWord{7, 0, 490}, + dictWord{13, 0, 100}, + dictWord{143, 0, 75}, + dictWord{135, 0, 1641}, + dictWord{133, 0, 543}, + dictWord{7, 11, 209}, + dictWord{8, 11, 661}, + dictWord{10, 11, 42}, + dictWord{11, 11, 58}, + dictWord{12, 11, 58}, + dictWord{12, 11, 118}, + dictWord{141, 11, 32}, + dictWord{5, 0, 181}, + dictWord{8, 0, 41}, + dictWord{6, 11, 63}, + dictWord{135, 11, 920}, + dictWord{133, 0, 657}, + dictWord{133, 11, 793}, + dictWord{138, 0, 709}, + dictWord{7, 0, 25}, + dictWord{8, 0, 202}, + dictWord{138, 0, 536}, + dictWord{5, 11, 665}, + dictWord{135, 10, 1788}, + dictWord{145, 10, 49}, + dictWord{9, 0, 423}, + dictWord{140, 0, 89}, + dictWord{5, 11, 67}, + dictWord{6, 11, 62}, + dictWord{6, 11, 374}, + dictWord{135, 11, 1391}, + dictWord{8, 0, 113}, + dictWord{ + 9, + 0, + 877, + }, + dictWord{10, 0, 554}, + dictWord{11, 0, 83}, + dictWord{12, 0, 136}, + dictWord{19, 0, 109}, + dictWord{9, 11, 790}, + dictWord{140, 11, 47}, + dictWord{ + 138, + 10, + 661, + }, + dictWord{4, 0, 963}, + dictWord{10, 0, 927}, + dictWord{14, 0, 442}, + dictWord{135, 10, 1945}, + dictWord{133, 0, 976}, + dictWord{132, 0, 206}, + dictWord{ + 4, + 11, + 391, + }, + dictWord{135, 11, 1169}, + dictWord{134, 0, 2002}, + dictWord{6, 0, 696}, + dictWord{134, 0, 1008}, + dictWord{134, 0, 1170}, + dictWord{132, 11, 271}, + dictWord{7, 0, 13}, + dictWord{8, 0, 226}, + dictWord{10, 0, 537}, + dictWord{11, 0, 570}, + dictWord{11, 0, 605}, + dictWord{11, 0, 799}, + dictWord{11, 0, 804}, + dictWord{ + 12, + 0, + 85, + }, + dictWord{12, 0, 516}, + dictWord{12, 0, 623}, + dictWord{13, 0, 112}, + dictWord{13, 0, 361}, + dictWord{14, 0, 77}, + dictWord{14, 0, 78}, + dictWord{17, 0, 28}, + dictWord{19, 0, 110}, + dictWord{140, 11, 314}, + dictWord{132, 0, 769}, + dictWord{134, 0, 1544}, + dictWord{4, 0, 551}, + dictWord{137, 0, 678}, + dictWord{5, 10, 84}, + dictWord{134, 10, 163}, + dictWord{9, 0, 57}, + dictWord{9, 0, 459}, + dictWord{10, 0, 425}, + dictWord{11, 0, 119}, + dictWord{12, 0, 184}, + dictWord{12, 0, 371}, + dictWord{ + 13, + 0, + 358, + }, + dictWord{145, 0, 51}, + dictWord{5, 0, 188}, + dictWord{5, 0, 814}, + dictWord{8, 0, 10}, + dictWord{9, 0, 421}, + dictWord{9, 0, 729}, + dictWord{10, 0, 609}, + dictWord{11, 0, 689}, + dictWord{4, 11, 253}, + dictWord{5, 10, 410}, + dictWord{5, 11, 544}, + dictWord{7, 11, 300}, + dictWord{137, 11, 340}, + dictWord{134, 0, 624}, + dictWord{138, 11, 321}, + dictWord{135, 0, 1941}, + dictWord{18, 0, 130}, + dictWord{5, 10, 322}, + dictWord{8, 10, 186}, + dictWord{9, 10, 262}, + dictWord{10, 10, 187}, + dictWord{142, 10, 208}, + dictWord{5, 11, 53}, + dictWord{5, 11, 541}, + dictWord{6, 11, 94}, + dictWord{6, 11, 499}, + dictWord{7, 11, 230}, + dictWord{139, 11, 321}, + dictWord{133, 10, 227}, + dictWord{4, 0, 378}, + dictWord{4, 11, 920}, + dictWord{5, 11, 25}, + dictWord{5, 11, 790}, + dictWord{6, 11, 457}, + dictWord{135, 11, 853}, + dictWord{137, 0, 269}, + dictWord{132, 0, 528}, + dictWord{134, 0, 1146}, + dictWord{7, 10, 1395}, + dictWord{8, 10, 486}, + dictWord{9, 10, 236}, + dictWord{9, 10, 878}, + dictWord{10, 10, 218}, + dictWord{11, 10, 95}, + dictWord{19, 10, 17}, + dictWord{147, 10, 31}, + dictWord{7, 10, 2043}, + dictWord{8, 10, 672}, + dictWord{ + 141, + 10, + 448, + }, + dictWord{134, 0, 1105}, + dictWord{134, 0, 1616}, + dictWord{134, 11, 1765}, + dictWord{140, 11, 163}, + dictWord{5, 10, 412}, + dictWord{133, 11, 822}, + dictWord{132, 11, 634}, + dictWord{6, 0, 656}, + dictWord{134, 11, 1730}, + dictWord{134, 0, 1940}, + dictWord{5, 0, 104}, + dictWord{6, 0, 173}, + dictWord{ + 135, + 0, + 1631, + }, + dictWord{136, 10, 562}, + dictWord{6, 11, 36}, + dictWord{7, 11, 658}, + dictWord{8, 11, 454}, + dictWord{147, 11, 86}, + dictWord{5, 0, 457}, + dictWord{ + 134, + 10, + 1771, + }, + dictWord{7, 0, 810}, + dictWord{8, 0, 138}, + dictWord{8, 0, 342}, + dictWord{9, 0, 84}, + dictWord{10, 0, 193}, + dictWord{11, 0, 883}, + dictWord{140, 0, 359}, + dictWord{9, 0, 620}, + dictWord{135, 10, 1190}, + dictWord{137, 10, 132}, + dictWord{7, 11, 975}, + dictWord{137, 11, 789}, + dictWord{6, 0, 95}, + dictWord{6, 0, 1934}, + dictWord{136, 0, 967}, + dictWord{141, 11, 335}, + dictWord{6, 0, 406}, + dictWord{10, 0, 409}, + dictWord{10, 0, 447}, + dictWord{11, 0, 44}, + dictWord{140, 0, 100}, + dictWord{4, 10, 317}, + dictWord{135, 10, 1279}, + dictWord{132, 0, 477}, + dictWord{134, 0, 1268}, + dictWord{6, 0, 1941}, + dictWord{8, 0, 944}, + dictWord{5, 10, 63}, + dictWord{133, 10, 509}, + dictWord{132, 0, 629}, + dictWord{132, 11, 104}, + dictWord{4, 0, 246}, + dictWord{133, 0, 375}, + dictWord{6, 0, 1636}, + dictWord{ + 132, + 10, + 288, + }, + dictWord{135, 11, 1614}, + dictWord{9, 0, 49}, + dictWord{10, 0, 774}, + dictWord{8, 10, 89}, + dictWord{8, 10, 620}, + dictWord{11, 10, 628}, + dictWord{ + 12, + 10, + 322, + }, + dictWord{143, 10, 124}, + dictWord{4, 0, 282}, + dictWord{7, 0, 1034}, + dictWord{11, 0, 398}, + dictWord{11, 0, 634}, + dictWord{12, 0, 1}, + dictWord{12, 0, 79}, + dictWord{12, 0, 544}, + dictWord{14, 0, 237}, + dictWord{17, 0, 10}, + dictWord{146, 0, 20}, + dictWord{132, 0, 824}, + dictWord{7, 11, 45}, + dictWord{9, 11, 542}, + dictWord{ + 9, + 11, + 566, + }, + dictWord{138, 11, 728}, + dictWord{5, 0, 118}, + dictWord{5, 0, 499}, + dictWord{6, 0, 476}, + dictWord{6, 0, 665}, + dictWord{6, 0, 1176}, + dictWord{ + 6, + 0, + 1196, + }, + dictWord{7, 0, 600}, + dictWord{7, 0, 888}, + dictWord{135, 0, 1096}, + dictWord{7, 0, 296}, + dictWord{7, 0, 596}, + dictWord{8, 0, 560}, + dictWord{8, 0, 586}, + dictWord{9, 0, 612}, + dictWord{11, 0, 304}, + dictWord{12, 0, 46}, + dictWord{13, 0, 89}, + dictWord{14, 0, 112}, + dictWord{145, 0, 122}, + dictWord{5, 0, 894}, + dictWord{ + 6, + 0, + 1772, + }, + dictWord{9, 0, 1009}, + dictWord{138, 10, 120}, + dictWord{5, 11, 533}, + dictWord{7, 11, 755}, + dictWord{138, 11, 780}, + dictWord{151, 10, 1}, + dictWord{ + 6, + 0, + 1474, + }, + dictWord{7, 11, 87}, + dictWord{142, 11, 288}, + dictWord{139, 0, 366}, + dictWord{137, 10, 461}, + dictWord{7, 11, 988}, + dictWord{7, 11, 1939}, + dictWord{ + 9, + 11, + 64, + }, + dictWord{9, 11, 502}, + dictWord{12, 11, 7}, + dictWord{12, 11, 34}, + dictWord{13, 11, 12}, + dictWord{13, 11, 234}, + dictWord{147, 11, 77}, + dictWord{ + 7, + 0, + 1599, + }, + dictWord{7, 0, 1723}, + dictWord{8, 0, 79}, + dictWord{8, 0, 106}, + dictWord{8, 0, 190}, + dictWord{8, 0, 302}, + dictWord{8, 0, 383}, + dictWord{8, 0, 713}, + dictWord{ + 9, + 0, + 119, + }, + dictWord{9, 0, 233}, + dictWord{9, 0, 419}, + dictWord{9, 0, 471}, + dictWord{10, 0, 181}, + dictWord{10, 0, 406}, + dictWord{11, 0, 57}, + dictWord{11, 0, 85}, + dictWord{11, 0, 120}, + dictWord{11, 0, 177}, + dictWord{11, 0, 296}, + dictWord{11, 0, 382}, + dictWord{11, 0, 454}, + dictWord{11, 0, 758}, + dictWord{11, 0, 999}, + dictWord{ + 12, + 0, + 27, + }, + dictWord{12, 0, 98}, + dictWord{12, 0, 131}, + dictWord{12, 0, 245}, + dictWord{12, 0, 312}, + dictWord{12, 0, 446}, + dictWord{12, 0, 454}, + dictWord{13, 0, 25}, + dictWord{13, 0, 98}, + dictWord{13, 0, 426}, + dictWord{13, 0, 508}, + dictWord{14, 0, 70}, + dictWord{14, 0, 163}, + dictWord{14, 0, 272}, + dictWord{14, 0, 277}, + dictWord{ + 14, + 0, + 370, + }, + dictWord{15, 0, 95}, + dictWord{15, 0, 138}, + dictWord{15, 0, 167}, + dictWord{17, 0, 38}, + dictWord{148, 0, 96}, + dictWord{135, 10, 1346}, + dictWord{ + 10, + 0, + 200, + }, + dictWord{19, 0, 2}, + dictWord{151, 0, 22}, + dictWord{135, 11, 141}, + dictWord{134, 10, 85}, + dictWord{134, 0, 1759}, + dictWord{138, 0, 372}, + dictWord{ + 145, + 0, + 16, + }, + dictWord{8, 0, 943}, + dictWord{132, 11, 619}, + dictWord{139, 11, 88}, + dictWord{5, 11, 246}, + dictWord{8, 11, 189}, + dictWord{9, 11, 355}, + dictWord{ + 9, + 11, + 512, + }, + dictWord{10, 11, 124}, + dictWord{10, 11, 453}, + dictWord{11, 11, 143}, + dictWord{11, 11, 416}, + dictWord{11, 11, 859}, + dictWord{141, 11, 341}, + dictWord{ + 5, + 0, + 258, + }, + dictWord{134, 0, 719}, + dictWord{6, 0, 1798}, + dictWord{6, 0, 1839}, + dictWord{8, 0, 900}, + dictWord{10, 0, 874}, + dictWord{10, 0, 886}, + dictWord{ + 12, + 0, + 698, + }, + dictWord{12, 0, 732}, + dictWord{12, 0, 770}, + dictWord{16, 0, 106}, + dictWord{18, 0, 163}, + dictWord{18, 0, 170}, + dictWord{18, 0, 171}, + dictWord{152, 0, 20}, + dictWord{9, 0, 707}, + dictWord{11, 0, 326}, + dictWord{11, 0, 339}, + dictWord{12, 0, 423}, + dictWord{12, 0, 502}, + dictWord{20, 0, 62}, + dictWord{9, 11, 707}, + dictWord{ + 11, + 11, + 326, + }, + dictWord{11, 11, 339}, + dictWord{12, 11, 423}, + dictWord{12, 11, 502}, + dictWord{148, 11, 62}, + dictWord{5, 0, 30}, + dictWord{7, 0, 495}, + dictWord{ + 8, + 0, + 134, + }, + dictWord{9, 0, 788}, + dictWord{140, 0, 438}, + dictWord{133, 11, 678}, + dictWord{5, 10, 279}, + dictWord{6, 10, 235}, + dictWord{7, 10, 468}, + dictWord{ + 8, + 10, + 446, + }, + dictWord{9, 10, 637}, + dictWord{10, 10, 717}, + dictWord{11, 10, 738}, + dictWord{140, 10, 514}, + dictWord{5, 11, 35}, + dictWord{6, 11, 287}, + dictWord{ + 7, + 11, + 862, + }, + dictWord{7, 11, 1886}, + dictWord{138, 11, 179}, + dictWord{7, 0, 1948}, + dictWord{7, 0, 2004}, + dictWord{132, 11, 517}, + dictWord{5, 10, 17}, + dictWord{ + 6, + 10, + 371, + }, + dictWord{137, 10, 528}, + dictWord{4, 0, 115}, + dictWord{5, 0, 669}, + dictWord{6, 0, 407}, + dictWord{8, 0, 311}, + dictWord{11, 0, 10}, + dictWord{141, 0, 5}, + dictWord{137, 0, 381}, + dictWord{5, 0, 50}, + dictWord{6, 0, 439}, + dictWord{7, 0, 780}, + dictWord{135, 0, 1040}, + dictWord{136, 11, 667}, + dictWord{11, 11, 403}, + dictWord{146, 11, 83}, + dictWord{5, 0, 1}, + dictWord{6, 0, 81}, + dictWord{138, 0, 520}, + dictWord{134, 0, 738}, + dictWord{5, 0, 482}, + dictWord{8, 0, 98}, + dictWord{9, 0, 172}, + dictWord{10, 0, 360}, + dictWord{10, 0, 700}, + dictWord{10, 0, 822}, + dictWord{11, 0, 302}, + dictWord{11, 0, 778}, + dictWord{12, 0, 50}, + dictWord{12, 0, 127}, + dictWord{ + 12, + 0, + 396, + }, + dictWord{13, 0, 62}, + dictWord{13, 0, 328}, + dictWord{14, 0, 122}, + dictWord{147, 0, 72}, + dictWord{9, 11, 157}, + dictWord{10, 11, 131}, + dictWord{ + 140, + 11, + 72, + }, + dictWord{135, 11, 714}, + dictWord{135, 11, 539}, + dictWord{5, 0, 2}, + dictWord{6, 0, 512}, + dictWord{7, 0, 797}, + dictWord{7, 0, 1494}, + dictWord{8, 0, 253}, + dictWord{8, 0, 589}, + dictWord{9, 0, 77}, + dictWord{10, 0, 1}, + dictWord{10, 0, 129}, + dictWord{10, 0, 225}, + dictWord{11, 0, 118}, + dictWord{11, 0, 226}, + dictWord{ + 11, + 0, + 251, + }, + dictWord{11, 0, 430}, + dictWord{11, 0, 701}, + dictWord{11, 0, 974}, + dictWord{11, 0, 982}, + dictWord{12, 0, 64}, + dictWord{12, 0, 260}, + dictWord{12, 0, 488}, + dictWord{140, 0, 690}, + dictWord{5, 11, 394}, + dictWord{7, 11, 367}, + dictWord{7, 11, 487}, + dictWord{7, 11, 857}, + dictWord{7, 11, 1713}, + dictWord{8, 11, 246}, + dictWord{9, 11, 537}, + dictWord{10, 11, 165}, + dictWord{12, 11, 219}, + dictWord{140, 11, 561}, + dictWord{136, 0, 557}, + dictWord{5, 10, 779}, + dictWord{5, 10, 807}, + dictWord{6, 10, 1655}, + dictWord{134, 10, 1676}, + dictWord{4, 10, 196}, + dictWord{5, 10, 558}, + dictWord{133, 10, 949}, + dictWord{11, 11, 827}, + dictWord{ + 12, + 11, + 56, + }, + dictWord{14, 11, 34}, + dictWord{143, 11, 148}, + dictWord{137, 0, 347}, + dictWord{133, 0, 572}, + dictWord{134, 0, 832}, + dictWord{4, 0, 12}, + dictWord{ + 7, + 0, + 504, + }, + dictWord{7, 0, 522}, + dictWord{7, 0, 809}, + dictWord{8, 0, 797}, + dictWord{141, 0, 88}, + dictWord{4, 10, 752}, + dictWord{133, 11, 449}, + dictWord{7, 11, 86}, + dictWord{8, 11, 103}, + dictWord{145, 11, 69}, + dictWord{7, 11, 2028}, + dictWord{138, 11, 641}, + dictWord{5, 0, 528}, + dictWord{6, 11, 1}, + dictWord{142, 11, 2}, + dictWord{134, 0, 861}, + dictWord{10, 0, 294}, + dictWord{4, 10, 227}, + dictWord{5, 10, 159}, + dictWord{5, 10, 409}, + dictWord{7, 10, 80}, + dictWord{10, 10, 479}, + dictWord{ + 12, + 10, + 418, + }, + dictWord{14, 10, 50}, + dictWord{14, 10, 249}, + dictWord{142, 10, 295}, + dictWord{7, 10, 1470}, + dictWord{8, 10, 66}, + dictWord{8, 10, 137}, + dictWord{ + 8, + 10, + 761, + }, + dictWord{9, 10, 638}, + dictWord{11, 10, 80}, + dictWord{11, 10, 212}, + dictWord{11, 10, 368}, + dictWord{11, 10, 418}, + dictWord{12, 10, 8}, + dictWord{ + 13, + 10, + 15, + }, + dictWord{16, 10, 61}, + dictWord{17, 10, 59}, + dictWord{19, 10, 28}, + dictWord{148, 10, 84}, + dictWord{20, 0, 109}, + dictWord{135, 11, 1148}, + dictWord{ + 6, + 11, + 277, + }, + dictWord{7, 11, 1274}, + dictWord{7, 11, 1386}, + dictWord{7, 11, 1392}, + dictWord{12, 11, 129}, + dictWord{146, 11, 87}, + dictWord{6, 11, 187}, + dictWord{7, 11, 39}, + dictWord{7, 11, 1203}, + dictWord{8, 11, 380}, + dictWord{8, 11, 542}, + dictWord{14, 11, 117}, + dictWord{149, 11, 28}, + dictWord{134, 0, 1187}, + dictWord{5, 0, 266}, + dictWord{9, 0, 290}, + dictWord{9, 0, 364}, + dictWord{10, 0, 293}, + dictWord{11, 0, 606}, + dictWord{142, 0, 45}, + dictWord{6, 11, 297}, + dictWord{ + 7, + 11, + 793, + }, + dictWord{139, 11, 938}, + dictWord{4, 0, 50}, + dictWord{6, 0, 594}, + dictWord{9, 0, 121}, + dictWord{10, 0, 49}, + dictWord{10, 0, 412}, + dictWord{139, 0, 834}, + dictWord{136, 0, 748}, + dictWord{7, 11, 464}, + dictWord{8, 11, 438}, + dictWord{11, 11, 105}, + dictWord{11, 11, 363}, + dictWord{12, 11, 231}, + dictWord{ + 14, + 11, + 386, + }, + dictWord{15, 11, 102}, + dictWord{148, 11, 75}, + dictWord{132, 0, 466}, + dictWord{13, 0, 399}, + dictWord{14, 0, 337}, + dictWord{6, 10, 38}, + dictWord{ + 7, + 10, + 1220, + }, + dictWord{8, 10, 185}, + dictWord{8, 10, 256}, + dictWord{9, 10, 22}, + dictWord{9, 10, 331}, + dictWord{10, 10, 738}, + dictWord{11, 10, 205}, + dictWord{ + 11, + 10, + 540, + }, + dictWord{11, 10, 746}, + dictWord{13, 10, 465}, + dictWord{142, 10, 194}, + dictWord{9, 0, 378}, + dictWord{141, 0, 162}, + dictWord{137, 0, 519}, + dictWord{ + 4, + 10, + 159, + }, + dictWord{6, 10, 115}, + dictWord{7, 10, 252}, + dictWord{7, 10, 257}, + dictWord{7, 10, 1928}, + dictWord{8, 10, 69}, + dictWord{9, 10, 384}, + dictWord{ + 10, + 10, + 91, + }, + dictWord{10, 10, 615}, + dictWord{12, 10, 375}, + dictWord{14, 10, 235}, + dictWord{18, 10, 117}, + dictWord{147, 10, 123}, + dictWord{5, 11, 604}, + dictWord{ + 5, + 10, + 911, + }, + dictWord{136, 10, 278}, + dictWord{132, 0, 667}, + dictWord{8, 0, 351}, + dictWord{9, 0, 322}, + dictWord{4, 10, 151}, + dictWord{135, 10, 1567}, + dictWord{134, 0, 902}, + dictWord{133, 10, 990}, + dictWord{12, 0, 180}, + dictWord{5, 10, 194}, + dictWord{7, 10, 1662}, + dictWord{137, 10, 90}, + dictWord{4, 0, 869}, + dictWord{134, 0, 1996}, + dictWord{134, 0, 813}, + dictWord{133, 10, 425}, + dictWord{137, 11, 761}, + dictWord{132, 0, 260}, + dictWord{133, 10, 971}, + dictWord{ + 5, + 11, + 20, + }, + dictWord{6, 11, 298}, + dictWord{7, 11, 659}, + dictWord{7, 11, 1366}, + dictWord{137, 11, 219}, + dictWord{4, 0, 39}, + dictWord{5, 0, 36}, + dictWord{ + 7, + 0, + 1843, + }, + dictWord{8, 0, 407}, + dictWord{11, 0, 144}, + dictWord{140, 0, 523}, + dictWord{4, 0, 510}, + dictWord{10, 0, 587}, + dictWord{139, 10, 752}, + dictWord{7, 0, 29}, + dictWord{7, 0, 66}, + dictWord{7, 0, 1980}, + dictWord{10, 0, 487}, + dictWord{138, 0, 809}, + dictWord{13, 0, 260}, + dictWord{14, 0, 82}, + dictWord{18, 0, 63}, + dictWord{ + 137, + 10, + 662, + }, + dictWord{5, 10, 72}, + dictWord{6, 10, 264}, + dictWord{7, 10, 21}, + dictWord{7, 10, 46}, + dictWord{7, 10, 2013}, + dictWord{8, 10, 215}, + dictWord{ + 8, + 10, + 513, + }, + dictWord{10, 10, 266}, + dictWord{139, 10, 22}, + dictWord{134, 0, 570}, + dictWord{6, 0, 565}, + dictWord{7, 0, 1667}, + dictWord{4, 11, 439}, + dictWord{ + 10, + 10, + 95, + }, + dictWord{11, 10, 603}, + dictWord{12, 11, 242}, + dictWord{13, 10, 443}, + dictWord{14, 10, 160}, + dictWord{143, 10, 4}, + dictWord{134, 0, 1464}, + dictWord{ + 134, + 10, + 431, + }, + dictWord{9, 0, 372}, + dictWord{15, 0, 2}, + dictWord{19, 0, 10}, + dictWord{19, 0, 18}, + dictWord{5, 10, 874}, + dictWord{6, 10, 1677}, + dictWord{143, 10, 0}, + dictWord{132, 0, 787}, + dictWord{6, 0, 380}, + dictWord{12, 0, 399}, + dictWord{21, 0, 19}, + dictWord{7, 10, 939}, + dictWord{7, 10, 1172}, + dictWord{7, 10, 1671}, + dictWord{9, 10, 540}, + dictWord{10, 10, 696}, + dictWord{11, 10, 265}, + dictWord{11, 10, 732}, + dictWord{11, 10, 928}, + dictWord{11, 10, 937}, + dictWord{ + 141, + 10, + 438, + }, + dictWord{137, 0, 200}, + dictWord{132, 11, 233}, + dictWord{132, 0, 516}, + dictWord{134, 11, 577}, + dictWord{132, 0, 844}, + dictWord{11, 0, 887}, + dictWord{14, 0, 365}, + dictWord{142, 0, 375}, + dictWord{132, 11, 482}, + dictWord{8, 0, 821}, + dictWord{140, 0, 44}, + dictWord{7, 0, 1655}, + dictWord{136, 0, 305}, + dictWord{5, 10, 682}, + dictWord{135, 10, 1887}, + dictWord{135, 11, 346}, + dictWord{132, 10, 696}, + dictWord{4, 0, 10}, + dictWord{7, 0, 917}, + dictWord{139, 0, 786}, + dictWord{5, 11, 795}, + dictWord{6, 11, 1741}, + dictWord{8, 11, 417}, + dictWord{137, 11, 782}, + dictWord{4, 0, 1016}, + dictWord{134, 0, 2031}, + dictWord{5, 0, 684}, + dictWord{4, 10, 726}, + dictWord{133, 10, 630}, + dictWord{6, 0, 1021}, + dictWord{134, 0, 1480}, + dictWord{8, 10, 802}, + dictWord{136, 10, 838}, + dictWord{ + 134, + 0, + 27, + }, + dictWord{134, 0, 395}, + dictWord{135, 11, 622}, + dictWord{7, 11, 625}, + dictWord{135, 11, 1750}, + dictWord{4, 11, 203}, + dictWord{135, 11, 1936}, + dictWord{6, 10, 118}, + dictWord{7, 10, 215}, + dictWord{7, 10, 1521}, + dictWord{140, 10, 11}, + dictWord{132, 0, 813}, + dictWord{136, 0, 511}, + dictWord{7, 10, 615}, + dictWord{138, 10, 251}, + dictWord{135, 10, 1044}, + dictWord{145, 0, 56}, + dictWord{133, 10, 225}, + dictWord{6, 0, 342}, + dictWord{6, 0, 496}, + dictWord{8, 0, 275}, + dictWord{137, 0, 206}, + dictWord{4, 0, 909}, + dictWord{133, 0, 940}, + dictWord{132, 0, 891}, + dictWord{7, 11, 311}, + dictWord{9, 11, 308}, + dictWord{ + 140, + 11, + 255, + }, + dictWord{4, 10, 370}, + dictWord{5, 10, 756}, + dictWord{135, 10, 1326}, + dictWord{4, 0, 687}, + dictWord{134, 0, 1596}, + dictWord{134, 0, 1342}, + dictWord{ + 6, + 10, + 1662, + }, + dictWord{7, 10, 48}, + dictWord{8, 10, 771}, + dictWord{10, 10, 116}, + dictWord{13, 10, 104}, + dictWord{14, 10, 105}, + dictWord{14, 10, 184}, + dictWord{15, 10, 168}, + dictWord{19, 10, 92}, + dictWord{148, 10, 68}, + dictWord{138, 10, 209}, + dictWord{4, 11, 400}, + dictWord{5, 11, 267}, + dictWord{135, 11, 232}, + dictWord{151, 11, 12}, + dictWord{6, 0, 41}, + dictWord{141, 0, 160}, + dictWord{141, 11, 314}, + dictWord{134, 0, 1718}, + dictWord{136, 0, 778}, + dictWord{ + 142, + 11, + 261, + }, + dictWord{134, 0, 1610}, + dictWord{133, 0, 115}, + dictWord{132, 0, 294}, + dictWord{14, 0, 314}, + dictWord{132, 10, 120}, + dictWord{132, 0, 983}, + dictWord{5, 0, 193}, + dictWord{140, 0, 178}, + dictWord{138, 10, 429}, + dictWord{5, 10, 820}, + dictWord{135, 10, 931}, + dictWord{6, 0, 994}, + dictWord{6, 0, 1051}, + dictWord{6, 0, 1439}, + dictWord{7, 0, 174}, + dictWord{133, 11, 732}, + dictWord{4, 11, 100}, + dictWord{7, 11, 679}, + dictWord{8, 11, 313}, + dictWord{138, 10, 199}, + dictWord{6, 10, 151}, + dictWord{6, 10, 1675}, + dictWord{7, 10, 383}, + dictWord{151, 10, 10}, + dictWord{6, 0, 1796}, + dictWord{8, 0, 848}, + dictWord{8, 0, 867}, + dictWord{ + 8, + 0, + 907, + }, + dictWord{10, 0, 855}, + dictWord{140, 0, 703}, + dictWord{140, 0, 221}, + dictWord{4, 0, 122}, + dictWord{5, 0, 796}, + dictWord{5, 0, 952}, + dictWord{6, 0, 1660}, + dictWord{6, 0, 1671}, + dictWord{8, 0, 567}, + dictWord{9, 0, 687}, + dictWord{9, 0, 742}, + dictWord{10, 0, 686}, + dictWord{11, 0, 682}, + dictWord{11, 0, 909}, + dictWord{ + 140, + 0, + 281, + }, + dictWord{5, 11, 362}, + dictWord{5, 11, 443}, + dictWord{6, 11, 318}, + dictWord{7, 11, 1019}, + dictWord{139, 11, 623}, + dictWord{5, 11, 463}, + dictWord{136, 11, 296}, + dictWord{11, 0, 583}, + dictWord{13, 0, 262}, + dictWord{6, 10, 1624}, + dictWord{12, 10, 422}, + dictWord{142, 10, 360}, + dictWord{5, 0, 179}, + dictWord{7, 0, 1095}, + dictWord{135, 0, 1213}, + dictWord{4, 10, 43}, + dictWord{4, 11, 454}, + dictWord{5, 10, 344}, + dictWord{133, 10, 357}, + dictWord{4, 0, 66}, + dictWord{7, 0, 722}, + dictWord{135, 0, 904}, + dictWord{134, 0, 773}, + dictWord{7, 0, 352}, + dictWord{133, 10, 888}, + dictWord{5, 11, 48}, + dictWord{5, 11, 404}, + dictWord{ + 6, + 11, + 557, + }, + dictWord{7, 11, 458}, + dictWord{8, 11, 597}, + dictWord{10, 11, 455}, + dictWord{10, 11, 606}, + dictWord{11, 11, 49}, + dictWord{11, 11, 548}, + dictWord{ + 12, + 11, + 476, + }, + dictWord{13, 11, 18}, + dictWord{141, 11, 450}, + dictWord{134, 11, 418}, + dictWord{132, 10, 711}, + dictWord{5, 11, 442}, + dictWord{ + 135, + 11, + 1984, + }, + dictWord{141, 0, 35}, + dictWord{137, 0, 152}, + dictWord{134, 0, 1197}, + dictWord{135, 11, 1093}, + dictWord{137, 11, 203}, + dictWord{137, 10, 440}, + dictWord{10, 0, 592}, + dictWord{10, 0, 753}, + dictWord{12, 0, 317}, + dictWord{12, 0, 355}, + dictWord{12, 0, 465}, + dictWord{12, 0, 469}, + dictWord{12, 0, 560}, + dictWord{12, 0, 578}, + dictWord{141, 0, 243}, + dictWord{133, 0, 564}, + dictWord{134, 0, 797}, + dictWord{5, 10, 958}, + dictWord{133, 10, 987}, + dictWord{5, 11, 55}, + dictWord{7, 11, 376}, + dictWord{140, 11, 161}, + dictWord{133, 11, 450}, + dictWord{134, 0, 556}, + dictWord{134, 0, 819}, + dictWord{11, 10, 276}, + dictWord{ + 142, + 10, + 293, + }, + dictWord{7, 0, 544}, + dictWord{138, 0, 61}, + dictWord{8, 0, 719}, + dictWord{4, 10, 65}, + dictWord{5, 10, 479}, + dictWord{5, 10, 1004}, + dictWord{7, 10, 1913}, + dictWord{8, 10, 317}, + dictWord{9, 10, 302}, + dictWord{10, 10, 612}, + dictWord{141, 10, 22}, + dictWord{4, 0, 5}, + dictWord{5, 0, 498}, + dictWord{8, 0, 637}, + dictWord{ + 9, + 0, + 521, + }, + dictWord{4, 11, 213}, + dictWord{4, 10, 261}, + dictWord{7, 11, 223}, + dictWord{7, 10, 510}, + dictWord{136, 11, 80}, + dictWord{5, 0, 927}, + dictWord{7, 0, 101}, + dictWord{4, 10, 291}, + dictWord{7, 11, 381}, + dictWord{7, 11, 806}, + dictWord{7, 11, 820}, + dictWord{8, 11, 354}, + dictWord{8, 11, 437}, + dictWord{8, 11, 787}, + dictWord{9, 10, 515}, + dictWord{9, 11, 657}, + dictWord{10, 11, 58}, + dictWord{10, 11, 339}, + dictWord{10, 11, 749}, + dictWord{11, 11, 914}, + dictWord{12, 10, 152}, + dictWord{12, 11, 162}, + dictWord{12, 10, 443}, + dictWord{13, 11, 75}, + dictWord{13, 10, 392}, + dictWord{14, 11, 106}, + dictWord{14, 11, 198}, + dictWord{ + 14, + 11, + 320, + }, + dictWord{14, 10, 357}, + dictWord{14, 11, 413}, + dictWord{146, 11, 43}, + dictWord{6, 0, 1153}, + dictWord{7, 0, 1441}, + dictWord{136, 11, 747}, + dictWord{ + 4, + 0, + 893, + }, + dictWord{5, 0, 780}, + dictWord{133, 0, 893}, + dictWord{138, 11, 654}, + dictWord{133, 11, 692}, + dictWord{133, 0, 238}, + dictWord{134, 11, 191}, + dictWord{4, 10, 130}, + dictWord{135, 10, 843}, + dictWord{6, 0, 1296}, + dictWord{5, 10, 42}, + dictWord{5, 10, 879}, + dictWord{7, 10, 245}, + dictWord{7, 10, 324}, + dictWord{ + 7, + 10, + 1532, + }, + dictWord{11, 10, 463}, + dictWord{11, 10, 472}, + dictWord{13, 10, 363}, + dictWord{144, 10, 52}, + dictWord{134, 0, 1729}, + dictWord{6, 0, 1999}, + dictWord{136, 0, 969}, + dictWord{4, 10, 134}, + dictWord{133, 10, 372}, + dictWord{4, 0, 60}, + dictWord{7, 0, 941}, + dictWord{7, 0, 1800}, + dictWord{8, 0, 314}, + dictWord{ + 9, + 0, + 700, + }, + dictWord{139, 0, 487}, + dictWord{134, 0, 1144}, + dictWord{6, 11, 162}, + dictWord{7, 11, 1960}, + dictWord{136, 11, 831}, + dictWord{132, 11, 706}, + dictWord{135, 0, 1147}, + dictWord{138, 11, 426}, + dictWord{138, 11, 89}, + dictWord{7, 0, 1853}, + dictWord{138, 0, 437}, + dictWord{136, 0, 419}, + dictWord{ + 135, + 10, + 1634, + }, + dictWord{133, 0, 828}, + dictWord{5, 0, 806}, + dictWord{7, 0, 176}, + dictWord{7, 0, 178}, + dictWord{7, 0, 1240}, + dictWord{7, 0, 1976}, + dictWord{ + 132, + 10, + 644, + }, + dictWord{135, 11, 1877}, + dictWord{5, 11, 420}, + dictWord{135, 11, 1449}, + dictWord{4, 0, 51}, + dictWord{5, 0, 39}, + dictWord{6, 0, 4}, + dictWord{7, 0, 591}, + dictWord{7, 0, 849}, + dictWord{7, 0, 951}, + dictWord{7, 0, 1613}, + dictWord{7, 0, 1760}, + dictWord{7, 0, 1988}, + dictWord{9, 0, 434}, + dictWord{10, 0, 754}, + dictWord{ + 11, + 0, + 25, + }, + dictWord{139, 0, 37}, + dictWord{10, 11, 57}, + dictWord{138, 11, 277}, + dictWord{135, 10, 540}, + dictWord{132, 11, 204}, + dictWord{135, 0, 159}, + dictWord{139, 11, 231}, + dictWord{133, 0, 902}, + dictWord{7, 0, 928}, + dictWord{7, 11, 366}, + dictWord{9, 11, 287}, + dictWord{12, 11, 199}, + dictWord{12, 11, 556}, + dictWord{140, 11, 577}, + dictWord{6, 10, 623}, + dictWord{136, 10, 789}, + dictWord{4, 10, 908}, + dictWord{5, 10, 359}, + dictWord{5, 10, 508}, + dictWord{6, 10, 1723}, + dictWord{7, 10, 343}, + dictWord{7, 10, 1996}, + dictWord{135, 10, 2026}, + dictWord{134, 0, 270}, + dictWord{4, 10, 341}, + dictWord{135, 10, 480}, + dictWord{ + 5, + 11, + 356, + }, + dictWord{135, 11, 224}, + dictWord{11, 11, 588}, + dictWord{11, 11, 864}, + dictWord{11, 11, 968}, + dictWord{143, 11, 160}, + dictWord{132, 0, 556}, + dictWord{137, 0, 801}, + dictWord{132, 0, 416}, + dictWord{142, 0, 372}, + dictWord{5, 0, 152}, + dictWord{5, 0, 197}, + dictWord{7, 0, 340}, + dictWord{7, 0, 867}, + dictWord{ + 10, + 0, + 548, + }, + dictWord{10, 0, 581}, + dictWord{11, 0, 6}, + dictWord{12, 0, 3}, + dictWord{12, 0, 19}, + dictWord{14, 0, 110}, + dictWord{142, 0, 289}, + dictWord{139, 0, 369}, + dictWord{7, 11, 630}, + dictWord{9, 11, 567}, + dictWord{11, 11, 150}, + dictWord{11, 11, 444}, + dictWord{141, 11, 119}, + dictWord{134, 11, 539}, + dictWord{ + 7, + 10, + 1995, + }, + dictWord{8, 10, 299}, + dictWord{11, 10, 890}, + dictWord{140, 10, 674}, + dictWord{7, 0, 34}, + dictWord{7, 0, 190}, + dictWord{8, 0, 28}, + dictWord{8, 0, 141}, + dictWord{8, 0, 444}, + dictWord{8, 0, 811}, + dictWord{9, 0, 468}, + dictWord{11, 0, 334}, + dictWord{12, 0, 24}, + dictWord{12, 0, 386}, + dictWord{140, 0, 576}, + dictWord{ + 133, + 0, + 757, + }, + dictWord{7, 0, 1553}, + dictWord{136, 0, 898}, + dictWord{133, 0, 721}, + dictWord{136, 0, 1012}, + dictWord{4, 0, 789}, + dictWord{5, 0, 647}, + dictWord{ + 135, + 0, + 1102, + }, + dictWord{132, 0, 898}, + dictWord{10, 0, 183}, + dictWord{4, 10, 238}, + dictWord{5, 10, 503}, + dictWord{6, 10, 179}, + dictWord{7, 10, 2003}, + dictWord{ + 8, + 10, + 381, + }, + dictWord{8, 10, 473}, + dictWord{9, 10, 149}, + dictWord{10, 10, 788}, + dictWord{15, 10, 45}, + dictWord{15, 10, 86}, + dictWord{20, 10, 110}, + dictWord{ + 150, + 10, + 57, + }, + dictWord{9, 0, 136}, + dictWord{19, 0, 107}, + dictWord{4, 10, 121}, + dictWord{5, 10, 156}, + dictWord{5, 10, 349}, + dictWord{10, 10, 605}, + dictWord{ + 142, + 10, + 342, + }, + dictWord{4, 11, 235}, + dictWord{135, 11, 255}, + dictWord{4, 11, 194}, + dictWord{5, 11, 584}, + dictWord{6, 11, 384}, + dictWord{7, 11, 583}, + dictWord{ + 10, + 11, + 761, + }, + dictWord{11, 11, 760}, + dictWord{139, 11, 851}, + dictWord{6, 10, 80}, + dictWord{6, 10, 1694}, + dictWord{7, 10, 173}, + dictWord{7, 10, 1974}, + dictWord{ + 9, + 10, + 547, + }, + dictWord{10, 10, 730}, + dictWord{14, 10, 18}, + dictWord{150, 10, 39}, + dictWord{4, 10, 923}, + dictWord{134, 10, 1711}, + dictWord{5, 0, 277}, + dictWord{141, 0, 247}, + dictWord{132, 0, 435}, + dictWord{133, 11, 562}, + dictWord{134, 0, 1311}, + dictWord{5, 11, 191}, + dictWord{137, 11, 271}, + dictWord{ + 132, + 10, + 595, + }, + dictWord{7, 11, 1537}, + dictWord{14, 11, 96}, + dictWord{143, 11, 73}, + dictWord{5, 0, 437}, + dictWord{7, 0, 502}, + dictWord{7, 0, 519}, + dictWord{7, 0, 1122}, + dictWord{7, 0, 1751}, + dictWord{14, 0, 211}, + dictWord{6, 10, 459}, + dictWord{7, 10, 1753}, + dictWord{7, 10, 1805}, + dictWord{8, 10, 658}, + dictWord{9, 10, 1}, + dictWord{11, 10, 959}, + dictWord{141, 10, 446}, + dictWord{6, 0, 814}, + dictWord{4, 11, 470}, + dictWord{5, 11, 473}, + dictWord{6, 11, 153}, + dictWord{7, 11, 1503}, + dictWord{7, 11, 1923}, + dictWord{10, 11, 701}, + dictWord{11, 11, 132}, + dictWord{11, 11, 168}, + dictWord{11, 11, 227}, + dictWord{11, 11, 320}, + dictWord{ + 11, + 11, + 436, + }, + dictWord{11, 11, 525}, + dictWord{11, 11, 855}, + dictWord{12, 11, 41}, + dictWord{12, 11, 286}, + dictWord{13, 11, 103}, + dictWord{13, 11, 284}, + dictWord{ + 14, + 11, + 255, + }, + dictWord{14, 11, 262}, + dictWord{15, 11, 117}, + dictWord{143, 11, 127}, + dictWord{5, 0, 265}, + dictWord{6, 0, 212}, + dictWord{135, 0, 28}, + dictWord{ + 138, + 0, + 750, + }, + dictWord{133, 11, 327}, + dictWord{6, 11, 552}, + dictWord{7, 11, 1754}, + dictWord{137, 11, 604}, + dictWord{134, 0, 2012}, + dictWord{132, 0, 702}, + dictWord{5, 11, 80}, + dictWord{6, 11, 405}, + dictWord{7, 11, 403}, + dictWord{7, 11, 1502}, + dictWord{7, 11, 1626}, + dictWord{8, 11, 456}, + dictWord{9, 11, 487}, + dictWord{9, 11, 853}, + dictWord{9, 11, 889}, + dictWord{10, 11, 309}, + dictWord{11, 11, 721}, + dictWord{11, 11, 994}, + dictWord{12, 11, 430}, + dictWord{ + 141, + 11, + 165, + }, + dictWord{5, 0, 808}, + dictWord{135, 0, 2045}, + dictWord{5, 0, 166}, + dictWord{8, 0, 739}, + dictWord{140, 0, 511}, + dictWord{134, 10, 490}, + dictWord{ + 4, + 11, + 453, + }, + dictWord{5, 11, 887}, + dictWord{6, 11, 535}, + dictWord{8, 11, 6}, + dictWord{136, 11, 543}, + dictWord{4, 0, 119}, + dictWord{5, 0, 170}, + dictWord{5, 0, 447}, + dictWord{7, 0, 1708}, + dictWord{7, 0, 1889}, + dictWord{9, 0, 357}, + dictWord{9, 0, 719}, + dictWord{12, 0, 486}, + dictWord{140, 0, 596}, + dictWord{137, 0, 500}, + dictWord{ + 7, + 10, + 250, + }, + dictWord{136, 10, 507}, + dictWord{132, 10, 158}, + dictWord{6, 0, 809}, + dictWord{134, 0, 1500}, + dictWord{9, 0, 327}, + dictWord{11, 0, 350}, + dictWord{11, 0, 831}, + dictWord{13, 0, 352}, + dictWord{4, 10, 140}, + dictWord{7, 10, 362}, + dictWord{8, 10, 209}, + dictWord{9, 10, 10}, + dictWord{9, 10, 503}, + dictWord{ + 9, + 10, + 614, + }, + dictWord{10, 10, 689}, + dictWord{11, 10, 327}, + dictWord{11, 10, 725}, + dictWord{12, 10, 252}, + dictWord{12, 10, 583}, + dictWord{13, 10, 192}, + dictWord{14, 10, 269}, + dictWord{14, 10, 356}, + dictWord{148, 10, 50}, + dictWord{135, 11, 741}, + dictWord{4, 0, 450}, + dictWord{7, 0, 1158}, + dictWord{19, 10, 1}, + dictWord{19, 10, 26}, + dictWord{150, 10, 9}, + dictWord{6, 0, 597}, + dictWord{135, 0, 1318}, + dictWord{134, 0, 1602}, + dictWord{6, 10, 228}, + dictWord{7, 10, 1341}, + dictWord{9, 10, 408}, + dictWord{138, 10, 343}, + dictWord{7, 0, 1375}, + dictWord{7, 0, 1466}, + dictWord{138, 0, 331}, + dictWord{132, 0, 754}, + dictWord{ + 132, + 10, + 557, + }, + dictWord{5, 11, 101}, + dictWord{6, 11, 88}, + dictWord{6, 11, 543}, + dictWord{7, 11, 1677}, + dictWord{9, 11, 100}, + dictWord{10, 11, 677}, + dictWord{ + 14, + 11, + 169, + }, + dictWord{14, 11, 302}, + dictWord{14, 11, 313}, + dictWord{15, 11, 48}, + dictWord{143, 11, 84}, + dictWord{134, 0, 1368}, + dictWord{4, 11, 310}, + dictWord{ + 9, + 11, + 795, + }, + dictWord{10, 11, 733}, + dictWord{11, 11, 451}, + dictWord{12, 11, 249}, + dictWord{14, 11, 115}, + dictWord{14, 11, 286}, + dictWord{143, 11, 100}, + dictWord{132, 10, 548}, + dictWord{10, 0, 557}, + dictWord{7, 10, 197}, + dictWord{8, 10, 142}, + dictWord{8, 10, 325}, + dictWord{9, 10, 150}, + dictWord{9, 10, 596}, + dictWord{10, 10, 353}, + dictWord{11, 10, 74}, + dictWord{11, 10, 315}, + dictWord{12, 10, 662}, + dictWord{12, 10, 681}, + dictWord{14, 10, 423}, + dictWord{ + 143, + 10, + 141, + }, + dictWord{133, 11, 587}, + dictWord{5, 0, 850}, + dictWord{136, 0, 799}, + dictWord{10, 0, 908}, + dictWord{12, 0, 701}, + dictWord{12, 0, 757}, + dictWord{ + 142, + 0, + 466, + }, + dictWord{4, 0, 62}, + dictWord{5, 0, 275}, + dictWord{18, 0, 19}, + dictWord{6, 10, 399}, + dictWord{6, 10, 579}, + dictWord{7, 10, 692}, + dictWord{7, 10, 846}, + dictWord{ + 7, + 10, + 1015, + }, + dictWord{7, 10, 1799}, + dictWord{8, 10, 403}, + dictWord{9, 10, 394}, + dictWord{10, 10, 133}, + dictWord{12, 10, 4}, + dictWord{12, 10, 297}, + dictWord{12, 10, 452}, + dictWord{16, 10, 81}, + dictWord{18, 10, 25}, + dictWord{21, 10, 14}, + dictWord{22, 10, 12}, + dictWord{151, 10, 18}, + dictWord{12, 0, 459}, + dictWord{ + 7, + 10, + 1546, + }, + dictWord{11, 10, 299}, + dictWord{142, 10, 407}, + dictWord{132, 10, 177}, + dictWord{132, 11, 498}, + dictWord{7, 11, 217}, + dictWord{ + 8, + 11, + 140, + }, + dictWord{138, 11, 610}, + dictWord{5, 10, 411}, + dictWord{135, 10, 653}, + dictWord{134, 0, 1802}, + dictWord{7, 10, 439}, + dictWord{10, 10, 727}, + dictWord{11, 10, 260}, + dictWord{139, 10, 684}, + dictWord{133, 11, 905}, + dictWord{11, 11, 580}, + dictWord{142, 11, 201}, + dictWord{134, 0, 1397}, + dictWord{ + 5, + 10, + 208, + }, + dictWord{7, 10, 753}, + dictWord{135, 10, 1528}, + dictWord{7, 0, 238}, + dictWord{7, 0, 2033}, + dictWord{8, 0, 120}, + dictWord{8, 0, 188}, + dictWord{8, 0, 659}, + dictWord{9, 0, 598}, + dictWord{10, 0, 466}, + dictWord{12, 0, 342}, + dictWord{12, 0, 588}, + dictWord{13, 0, 503}, + dictWord{14, 0, 246}, + dictWord{143, 0, 92}, + dictWord{135, 11, 1041}, + dictWord{4, 11, 456}, + dictWord{7, 11, 105}, + dictWord{7, 11, 358}, + dictWord{7, 11, 1637}, + dictWord{8, 11, 643}, + dictWord{139, 11, 483}, + dictWord{6, 0, 1318}, + dictWord{134, 0, 1324}, + dictWord{4, 0, 201}, + dictWord{7, 0, 1744}, + dictWord{8, 0, 602}, + dictWord{11, 0, 247}, + dictWord{11, 0, 826}, + dictWord{17, 0, 65}, + dictWord{133, 10, 242}, + dictWord{8, 0, 164}, + dictWord{146, 0, 62}, + dictWord{133, 10, 953}, + dictWord{139, 10, 802}, + dictWord{133, 0, 615}, + dictWord{7, 11, 1566}, + dictWord{8, 11, 269}, + dictWord{9, 11, 212}, + dictWord{9, 11, 718}, + dictWord{14, 11, 15}, + dictWord{14, 11, 132}, + dictWord{142, 11, 227}, + dictWord{133, 10, 290}, + dictWord{132, 10, 380}, + dictWord{5, 10, 52}, + dictWord{7, 10, 277}, + dictWord{9, 10, 368}, + dictWord{139, 10, 791}, + dictWord{ + 135, + 0, + 1243, + }, + dictWord{133, 11, 539}, + dictWord{11, 11, 919}, + dictWord{141, 11, 409}, + dictWord{136, 0, 968}, + dictWord{133, 11, 470}, + dictWord{134, 0, 882}, + dictWord{132, 0, 907}, + dictWord{5, 0, 100}, + dictWord{10, 0, 329}, + dictWord{12, 0, 416}, + dictWord{149, 0, 29}, + dictWord{10, 10, 138}, + dictWord{139, 10, 476}, + dictWord{5, 10, 725}, + dictWord{5, 10, 727}, + dictWord{6, 11, 91}, + dictWord{7, 11, 435}, + dictWord{135, 10, 1811}, + dictWord{4, 11, 16}, + dictWord{5, 11, 316}, + dictWord{5, 11, 842}, + dictWord{6, 11, 370}, + dictWord{6, 11, 1778}, + dictWord{8, 11, 166}, + dictWord{11, 11, 812}, + dictWord{12, 11, 206}, + dictWord{12, 11, 351}, + dictWord{14, 11, 418}, + dictWord{16, 11, 15}, + dictWord{16, 11, 34}, + dictWord{18, 11, 3}, + dictWord{19, 11, 3}, + dictWord{19, 11, 7}, + dictWord{20, 11, 4}, + dictWord{ + 149, + 11, + 21, + }, + dictWord{132, 0, 176}, + dictWord{5, 0, 636}, + dictWord{5, 0, 998}, + dictWord{7, 0, 9}, + dictWord{7, 0, 1508}, + dictWord{8, 0, 26}, + dictWord{9, 0, 317}, + dictWord{ + 9, + 0, + 358, + }, + dictWord{10, 0, 210}, + dictWord{10, 0, 292}, + dictWord{10, 0, 533}, + dictWord{11, 0, 555}, + dictWord{12, 0, 526}, + dictWord{12, 0, 607}, + dictWord{ + 13, + 0, + 263, + }, + dictWord{13, 0, 459}, + dictWord{142, 0, 271}, + dictWord{6, 0, 256}, + dictWord{8, 0, 265}, + dictWord{4, 10, 38}, + dictWord{7, 10, 307}, + dictWord{7, 10, 999}, + dictWord{7, 10, 1481}, + dictWord{7, 10, 1732}, + dictWord{7, 10, 1738}, + dictWord{9, 10, 414}, + dictWord{11, 10, 316}, + dictWord{12, 10, 52}, + dictWord{13, 10, 420}, + dictWord{147, 10, 100}, + dictWord{135, 10, 1296}, + dictWord{4, 11, 611}, + dictWord{133, 11, 606}, + dictWord{4, 0, 643}, + dictWord{142, 11, 21}, + dictWord{ + 133, + 11, + 715, + }, + dictWord{133, 10, 723}, + dictWord{6, 0, 610}, + dictWord{135, 11, 597}, + dictWord{10, 0, 127}, + dictWord{141, 0, 27}, + dictWord{6, 0, 1995}, + dictWord{ + 6, + 0, + 2001, + }, + dictWord{8, 0, 119}, + dictWord{136, 0, 973}, + dictWord{4, 11, 149}, + dictWord{138, 11, 368}, + dictWord{12, 0, 522}, + dictWord{4, 11, 154}, + dictWord{ + 5, + 10, + 109, + }, + dictWord{6, 10, 1784}, + dictWord{7, 11, 1134}, + dictWord{7, 10, 1895}, + dictWord{8, 11, 105}, + dictWord{12, 10, 296}, + dictWord{140, 10, 302}, + dictWord{4, 11, 31}, + dictWord{6, 11, 429}, + dictWord{7, 11, 962}, + dictWord{9, 11, 458}, + dictWord{139, 11, 691}, + dictWord{10, 0, 553}, + dictWord{11, 0, 876}, + dictWord{13, 0, 193}, + dictWord{13, 0, 423}, + dictWord{14, 0, 166}, + dictWord{19, 0, 84}, + dictWord{4, 11, 312}, + dictWord{5, 10, 216}, + dictWord{7, 10, 1879}, + dictWord{ + 9, + 10, + 141, + }, + dictWord{9, 10, 270}, + dictWord{9, 10, 679}, + dictWord{10, 10, 159}, + dictWord{11, 10, 197}, + dictWord{12, 10, 538}, + dictWord{12, 10, 559}, + dictWord{14, 10, 144}, + dictWord{14, 10, 167}, + dictWord{143, 10, 67}, + dictWord{134, 0, 1582}, + dictWord{7, 0, 1578}, + dictWord{135, 11, 1578}, + dictWord{ + 137, + 10, + 81, + }, + dictWord{132, 11, 236}, + dictWord{134, 10, 391}, + dictWord{134, 0, 795}, + dictWord{7, 10, 322}, + dictWord{136, 10, 249}, + dictWord{5, 11, 836}, + dictWord{ + 5, + 11, + 857, + }, + dictWord{6, 11, 1680}, + dictWord{7, 11, 59}, + dictWord{147, 11, 53}, + dictWord{135, 0, 432}, + dictWord{10, 11, 68}, + dictWord{139, 11, 494}, + dictWord{4, 11, 81}, + dictWord{139, 11, 867}, + dictWord{7, 0, 126}, + dictWord{136, 0, 84}, + dictWord{142, 11, 280}, + dictWord{5, 11, 282}, + dictWord{8, 11, 650}, + dictWord{ + 9, + 11, + 295, + }, + dictWord{9, 11, 907}, + dictWord{138, 11, 443}, + dictWord{136, 0, 790}, + dictWord{5, 10, 632}, + dictWord{138, 10, 526}, + dictWord{6, 0, 64}, + dictWord{12, 0, 377}, + dictWord{13, 0, 309}, + dictWord{14, 0, 141}, + dictWord{14, 0, 429}, + dictWord{14, 11, 141}, + dictWord{142, 11, 429}, + dictWord{134, 0, 1529}, + dictWord{6, 0, 321}, + dictWord{7, 0, 1857}, + dictWord{9, 0, 530}, + dictWord{19, 0, 99}, + dictWord{7, 10, 948}, + dictWord{7, 10, 1042}, + dictWord{8, 10, 235}, + dictWord{ + 8, + 10, + 461, + }, + dictWord{9, 10, 453}, + dictWord{10, 10, 354}, + dictWord{145, 10, 77}, + dictWord{7, 0, 1104}, + dictWord{11, 0, 269}, + dictWord{11, 0, 539}, + dictWord{ + 11, + 0, + 627, + }, + dictWord{11, 0, 706}, + dictWord{11, 0, 975}, + dictWord{12, 0, 248}, + dictWord{12, 0, 434}, + dictWord{12, 0, 600}, + dictWord{12, 0, 622}, + dictWord{ + 13, + 0, + 297, + }, + dictWord{13, 0, 485}, + dictWord{14, 0, 69}, + dictWord{14, 0, 409}, + dictWord{143, 0, 108}, + dictWord{4, 10, 362}, + dictWord{7, 10, 52}, + dictWord{7, 10, 303}, + dictWord{10, 11, 70}, + dictWord{12, 11, 26}, + dictWord{14, 11, 17}, + dictWord{14, 11, 178}, + dictWord{15, 11, 34}, + dictWord{149, 11, 12}, + dictWord{11, 0, 977}, + dictWord{141, 0, 507}, + dictWord{9, 0, 34}, + dictWord{139, 0, 484}, + dictWord{5, 10, 196}, + dictWord{6, 10, 486}, + dictWord{7, 10, 212}, + dictWord{8, 10, 309}, + dictWord{136, 10, 346}, + dictWord{6, 0, 1700}, + dictWord{7, 0, 26}, + dictWord{7, 0, 293}, + dictWord{7, 0, 382}, + dictWord{7, 0, 1026}, + dictWord{7, 0, 1087}, + dictWord{ + 7, + 0, + 2027, + }, + dictWord{8, 0, 24}, + dictWord{8, 0, 114}, + dictWord{8, 0, 252}, + dictWord{8, 0, 727}, + dictWord{8, 0, 729}, + dictWord{9, 0, 30}, + dictWord{9, 0, 199}, + dictWord{ + 9, + 0, + 231, + }, + dictWord{9, 0, 251}, + dictWord{9, 0, 334}, + dictWord{9, 0, 361}, + dictWord{9, 0, 712}, + dictWord{10, 0, 55}, + dictWord{10, 0, 60}, + dictWord{10, 0, 232}, + dictWord{ + 10, + 0, + 332, + }, + dictWord{10, 0, 384}, + dictWord{10, 0, 396}, + dictWord{10, 0, 504}, + dictWord{10, 0, 542}, + dictWord{10, 0, 652}, + dictWord{11, 0, 20}, + dictWord{11, 0, 48}, + dictWord{11, 0, 207}, + dictWord{11, 0, 291}, + dictWord{11, 0, 298}, + dictWord{11, 0, 342}, + dictWord{11, 0, 365}, + dictWord{11, 0, 394}, + dictWord{11, 0, 620}, + dictWord{11, 0, 705}, + dictWord{11, 0, 1017}, + dictWord{12, 0, 123}, + dictWord{12, 0, 340}, + dictWord{12, 0, 406}, + dictWord{12, 0, 643}, + dictWord{13, 0, 61}, + dictWord{ + 13, + 0, + 269, + }, + dictWord{13, 0, 311}, + dictWord{13, 0, 319}, + dictWord{13, 0, 486}, + dictWord{14, 0, 234}, + dictWord{15, 0, 62}, + dictWord{15, 0, 85}, + dictWord{16, 0, 71}, + dictWord{18, 0, 119}, + dictWord{20, 0, 105}, + dictWord{135, 10, 1912}, + dictWord{4, 11, 71}, + dictWord{5, 11, 376}, + dictWord{7, 11, 119}, + dictWord{138, 11, 665}, + dictWord{10, 0, 918}, + dictWord{10, 0, 926}, + dictWord{4, 10, 686}, + dictWord{136, 11, 55}, + dictWord{138, 10, 625}, + dictWord{136, 10, 706}, + dictWord{ + 132, + 11, + 479, + }, + dictWord{4, 10, 30}, + dictWord{133, 10, 43}, + dictWord{6, 0, 379}, + dictWord{7, 0, 270}, + dictWord{8, 0, 176}, + dictWord{8, 0, 183}, + dictWord{9, 0, 432}, + dictWord{ + 9, + 0, + 661, + }, + dictWord{12, 0, 247}, + dictWord{12, 0, 617}, + dictWord{18, 0, 125}, + dictWord{7, 11, 607}, + dictWord{8, 11, 99}, + dictWord{152, 11, 4}, + dictWord{ + 5, + 0, + 792, + }, + dictWord{133, 0, 900}, + dictWord{4, 11, 612}, + dictWord{133, 11, 561}, + dictWord{4, 11, 41}, + dictWord{4, 10, 220}, + dictWord{5, 11, 74}, + dictWord{ + 7, + 10, + 1535, + }, + dictWord{7, 11, 1627}, + dictWord{11, 11, 871}, + dictWord{140, 11, 619}, + dictWord{135, 0, 1920}, + dictWord{7, 11, 94}, + dictWord{11, 11, 329}, + dictWord{11, 11, 965}, + dictWord{12, 11, 241}, + dictWord{14, 11, 354}, + dictWord{15, 11, 22}, + dictWord{148, 11, 63}, + dictWord{9, 11, 209}, + dictWord{137, 11, 300}, + dictWord{134, 0, 771}, + dictWord{135, 0, 1979}, + dictWord{4, 0, 901}, + dictWord{133, 0, 776}, + dictWord{142, 0, 254}, + dictWord{133, 11, 98}, + dictWord{ + 9, + 11, + 16, + }, + dictWord{141, 11, 386}, + dictWord{133, 11, 984}, + dictWord{4, 11, 182}, + dictWord{6, 11, 205}, + dictWord{135, 11, 220}, + dictWord{7, 10, 1725}, + dictWord{ + 7, + 10, + 1774, + }, + dictWord{138, 10, 393}, + dictWord{5, 10, 263}, + dictWord{134, 10, 414}, + dictWord{4, 11, 42}, + dictWord{9, 11, 205}, + dictWord{9, 11, 786}, + dictWord{138, 11, 659}, + dictWord{14, 0, 140}, + dictWord{148, 0, 41}, + dictWord{8, 0, 440}, + dictWord{10, 0, 359}, + dictWord{6, 10, 178}, + dictWord{6, 11, 289}, + dictWord{ + 6, + 10, + 1750, + }, + dictWord{7, 11, 1670}, + dictWord{9, 10, 690}, + dictWord{10, 10, 155}, + dictWord{10, 10, 373}, + dictWord{11, 10, 698}, + dictWord{12, 11, 57}, + dictWord{13, 10, 155}, + dictWord{20, 10, 93}, + dictWord{151, 11, 4}, + dictWord{4, 0, 37}, + dictWord{5, 0, 334}, + dictWord{7, 0, 1253}, + dictWord{151, 11, 25}, + dictWord{ + 4, + 0, + 508, + }, + dictWord{4, 11, 635}, + dictWord{5, 10, 97}, + dictWord{137, 10, 393}, + dictWord{139, 11, 533}, + dictWord{4, 0, 640}, + dictWord{133, 0, 513}, + dictWord{ + 134, + 10, + 1639, + }, + dictWord{132, 11, 371}, + dictWord{4, 11, 272}, + dictWord{7, 11, 836}, + dictWord{7, 11, 1651}, + dictWord{145, 11, 89}, + dictWord{5, 11, 825}, + dictWord{6, 11, 444}, + dictWord{6, 11, 1640}, + dictWord{136, 11, 308}, + dictWord{4, 10, 191}, + dictWord{7, 10, 934}, + dictWord{8, 10, 647}, + dictWord{145, 10, 97}, + dictWord{12, 0, 246}, + dictWord{15, 0, 162}, + dictWord{19, 0, 64}, + dictWord{20, 0, 8}, + dictWord{20, 0, 95}, + dictWord{22, 0, 24}, + dictWord{152, 0, 17}, + dictWord{4, 0, 533}, + dictWord{5, 10, 165}, + dictWord{9, 10, 346}, + dictWord{138, 10, 655}, + dictWord{5, 11, 737}, + dictWord{139, 10, 885}, + dictWord{133, 10, 877}, + dictWord{ + 8, + 10, + 128, + }, + dictWord{139, 10, 179}, + dictWord{137, 11, 307}, + dictWord{140, 0, 752}, + dictWord{133, 0, 920}, + dictWord{135, 0, 1048}, + dictWord{5, 0, 153}, + dictWord{ + 6, + 0, + 580, + }, + dictWord{6, 10, 1663}, + dictWord{7, 10, 132}, + dictWord{7, 10, 1154}, + dictWord{7, 10, 1415}, + dictWord{7, 10, 1507}, + dictWord{12, 10, 493}, + dictWord{15, 10, 105}, + dictWord{151, 10, 15}, + dictWord{5, 10, 459}, + dictWord{7, 10, 1073}, + dictWord{8, 10, 241}, + dictWord{136, 10, 334}, + dictWord{138, 0, 391}, + dictWord{135, 0, 1952}, + dictWord{133, 11, 525}, + dictWord{8, 11, 641}, + dictWord{11, 11, 388}, + dictWord{140, 11, 580}, + dictWord{142, 0, 126}, + dictWord{ + 134, + 0, + 640, + }, + dictWord{132, 0, 483}, + dictWord{7, 0, 1616}, + dictWord{9, 0, 69}, + dictWord{6, 10, 324}, + dictWord{6, 10, 520}, + dictWord{7, 10, 338}, + dictWord{ + 7, + 10, + 1729, + }, + dictWord{8, 10, 228}, + dictWord{139, 10, 750}, + dictWord{5, 11, 493}, + dictWord{134, 11, 528}, + dictWord{135, 0, 734}, + dictWord{4, 11, 174}, + dictWord{135, 11, 911}, + dictWord{138, 0, 480}, + dictWord{9, 0, 495}, + dictWord{146, 0, 104}, + dictWord{135, 10, 705}, + dictWord{9, 0, 472}, + dictWord{4, 10, 73}, + dictWord{6, 10, 612}, + dictWord{7, 10, 927}, + dictWord{7, 10, 1330}, + dictWord{7, 10, 1822}, + dictWord{8, 10, 217}, + dictWord{9, 10, 765}, + dictWord{9, 10, 766}, + dictWord{10, 10, 408}, + dictWord{11, 10, 51}, + dictWord{11, 10, 793}, + dictWord{12, 10, 266}, + dictWord{15, 10, 158}, + dictWord{20, 10, 89}, + dictWord{150, 10, 32}, + dictWord{7, 11, 548}, + dictWord{137, 11, 58}, + dictWord{4, 11, 32}, + dictWord{5, 11, 215}, + dictWord{6, 11, 269}, + dictWord{7, 11, 1782}, + dictWord{7, 11, 1892}, + dictWord{10, 11, 16}, + dictWord{11, 11, 822}, + dictWord{11, 11, 954}, + dictWord{141, 11, 481}, + dictWord{132, 0, 874}, + dictWord{9, 0, 229}, + dictWord{5, 10, 389}, + dictWord{136, 10, 636}, + dictWord{7, 11, 1749}, + dictWord{136, 11, 477}, + dictWord{134, 0, 948}, + dictWord{5, 11, 308}, + dictWord{135, 11, 1088}, + dictWord{ + 4, + 0, + 748, + }, + dictWord{139, 0, 1009}, + dictWord{136, 10, 21}, + dictWord{6, 0, 555}, + dictWord{135, 0, 485}, + dictWord{5, 11, 126}, + dictWord{8, 11, 297}, + dictWord{ + 9, + 11, + 366, + }, + dictWord{9, 11, 445}, + dictWord{12, 11, 53}, + dictWord{12, 11, 374}, + dictWord{141, 11, 492}, + dictWord{7, 11, 1551}, + dictWord{139, 11, 361}, + dictWord{136, 0, 193}, + dictWord{136, 0, 472}, + dictWord{8, 0, 653}, + dictWord{13, 0, 93}, + dictWord{147, 0, 14}, + dictWord{132, 0, 984}, + dictWord{132, 11, 175}, + dictWord{5, 0, 172}, + dictWord{6, 0, 1971}, + dictWord{132, 11, 685}, + dictWord{149, 11, 8}, + dictWord{133, 11, 797}, + dictWord{13, 0, 83}, + dictWord{5, 10, 189}, + dictWord{ + 7, + 10, + 442, + }, + dictWord{7, 10, 443}, + dictWord{8, 10, 281}, + dictWord{12, 10, 174}, + dictWord{141, 10, 261}, + dictWord{134, 0, 1568}, + dictWord{133, 11, 565}, + dictWord{139, 0, 384}, + dictWord{133, 0, 260}, + dictWord{7, 0, 758}, + dictWord{7, 0, 880}, + dictWord{7, 0, 1359}, + dictWord{9, 0, 164}, + dictWord{9, 0, 167}, + dictWord{ + 10, + 0, + 156, + }, + dictWord{10, 0, 588}, + dictWord{12, 0, 101}, + dictWord{14, 0, 48}, + dictWord{15, 0, 70}, + dictWord{6, 10, 2}, + dictWord{7, 10, 1262}, + dictWord{ + 7, + 10, + 1737, + }, + dictWord{8, 10, 22}, + dictWord{8, 10, 270}, + dictWord{8, 10, 612}, + dictWord{9, 10, 312}, + dictWord{9, 10, 436}, + dictWord{10, 10, 311}, + dictWord{ + 10, + 10, + 623, + }, + dictWord{11, 10, 72}, + dictWord{11, 10, 330}, + dictWord{11, 10, 455}, + dictWord{12, 10, 321}, + dictWord{12, 10, 504}, + dictWord{12, 10, 530}, + dictWord{ + 12, + 10, + 543, + }, + dictWord{13, 10, 17}, + dictWord{13, 10, 156}, + dictWord{13, 10, 334}, + dictWord{17, 10, 60}, + dictWord{148, 10, 64}, + dictWord{4, 11, 252}, + dictWord{ + 7, + 11, + 1068, + }, + dictWord{10, 11, 434}, + dictWord{11, 11, 228}, + dictWord{11, 11, 426}, + dictWord{13, 11, 231}, + dictWord{18, 11, 106}, + dictWord{148, 11, 87}, + dictWord{7, 10, 354}, + dictWord{10, 10, 410}, + dictWord{139, 10, 815}, + dictWord{6, 0, 367}, + dictWord{7, 10, 670}, + dictWord{7, 10, 1327}, + dictWord{8, 10, 411}, + dictWord{8, 10, 435}, + dictWord{9, 10, 653}, + dictWord{9, 10, 740}, + dictWord{10, 10, 385}, + dictWord{11, 10, 222}, + dictWord{11, 10, 324}, + dictWord{11, 10, 829}, + dictWord{140, 10, 611}, + dictWord{7, 0, 1174}, + dictWord{6, 10, 166}, + dictWord{135, 10, 374}, + dictWord{146, 0, 121}, + dictWord{132, 0, 828}, + dictWord{ + 5, + 11, + 231, + }, + dictWord{138, 11, 509}, + dictWord{7, 11, 601}, + dictWord{9, 11, 277}, + dictWord{9, 11, 674}, + dictWord{10, 11, 178}, + dictWord{10, 11, 257}, + dictWord{ + 10, + 11, + 418, + }, + dictWord{11, 11, 531}, + dictWord{11, 11, 544}, + dictWord{11, 11, 585}, + dictWord{12, 11, 113}, + dictWord{12, 11, 475}, + dictWord{13, 11, 99}, + dictWord{142, 11, 428}, + dictWord{134, 0, 1541}, + dictWord{135, 11, 1779}, + dictWord{5, 0, 343}, + dictWord{134, 10, 398}, + dictWord{135, 10, 50}, + dictWord{ + 135, + 11, + 1683, + }, + dictWord{4, 0, 440}, + dictWord{7, 0, 57}, + dictWord{8, 0, 167}, + dictWord{8, 0, 375}, + dictWord{9, 0, 82}, + dictWord{9, 0, 561}, + dictWord{9, 0, 744}, + dictWord{ + 10, + 0, + 620, + }, + dictWord{137, 11, 744}, + dictWord{134, 0, 926}, + dictWord{6, 10, 517}, + dictWord{7, 10, 1159}, + dictWord{10, 10, 621}, + dictWord{139, 10, 192}, + dictWord{137, 0, 827}, + dictWord{8, 0, 194}, + dictWord{136, 0, 756}, + dictWord{10, 10, 223}, + dictWord{139, 10, 645}, + dictWord{7, 10, 64}, + dictWord{ + 136, + 10, + 245, + }, + dictWord{4, 11, 399}, + dictWord{5, 11, 119}, + dictWord{5, 11, 494}, + dictWord{7, 11, 751}, + dictWord{137, 11, 556}, + dictWord{132, 0, 808}, + dictWord{ + 135, + 0, + 22, + }, + dictWord{7, 10, 1763}, + dictWord{140, 10, 310}, + dictWord{5, 0, 639}, + dictWord{7, 0, 1249}, + dictWord{11, 0, 896}, + dictWord{134, 11, 584}, + dictWord{ + 134, + 0, + 1614, + }, + dictWord{135, 0, 860}, + dictWord{135, 11, 1121}, + dictWord{5, 10, 129}, + dictWord{6, 10, 61}, + dictWord{135, 10, 947}, + dictWord{4, 0, 102}, + dictWord{ + 7, + 0, + 815, + }, + dictWord{7, 0, 1699}, + dictWord{139, 0, 964}, + dictWord{13, 10, 505}, + dictWord{141, 10, 506}, + dictWord{139, 10, 1000}, + dictWord{ + 132, + 11, + 679, + }, + dictWord{132, 0, 899}, + dictWord{132, 0, 569}, + dictWord{5, 11, 694}, + dictWord{137, 11, 714}, + dictWord{136, 0, 795}, + dictWord{6, 0, 2045}, + dictWord{ + 139, + 11, + 7, + }, + dictWord{6, 0, 52}, + dictWord{9, 0, 104}, + dictWord{9, 0, 559}, + dictWord{12, 0, 308}, + dictWord{147, 0, 87}, + dictWord{4, 0, 301}, + dictWord{132, 0, 604}, + dictWord{133, 10, 637}, + dictWord{136, 0, 779}, + dictWord{5, 11, 143}, + dictWord{5, 11, 769}, + dictWord{6, 11, 1760}, + dictWord{7, 11, 682}, + dictWord{7, 11, 1992}, + dictWord{136, 11, 736}, + dictWord{137, 10, 590}, + dictWord{147, 0, 32}, + dictWord{137, 11, 527}, + dictWord{5, 10, 280}, + dictWord{135, 10, 1226}, + dictWord{134, 0, 494}, + dictWord{6, 0, 677}, + dictWord{6, 0, 682}, + dictWord{134, 0, 1044}, + dictWord{133, 10, 281}, + dictWord{135, 10, 1064}, + dictWord{7, 0, 508}, + dictWord{133, 11, 860}, + dictWord{6, 11, 422}, + dictWord{7, 11, 0}, + dictWord{7, 11, 1544}, + dictWord{9, 11, 577}, + dictWord{11, 11, 990}, + dictWord{12, 11, 141}, + dictWord{12, 11, 453}, + dictWord{13, 11, 47}, + dictWord{141, 11, 266}, + dictWord{134, 0, 1014}, + dictWord{5, 11, 515}, + dictWord{137, 11, 131}, + dictWord{ + 134, + 0, + 957, + }, + dictWord{132, 11, 646}, + dictWord{6, 0, 310}, + dictWord{7, 0, 1849}, + dictWord{8, 0, 72}, + dictWord{8, 0, 272}, + dictWord{8, 0, 431}, + dictWord{9, 0, 12}, + dictWord{ + 9, + 0, + 376, + }, + dictWord{10, 0, 563}, + dictWord{10, 0, 630}, + dictWord{10, 0, 796}, + dictWord{10, 0, 810}, + dictWord{11, 0, 367}, + dictWord{11, 0, 599}, + dictWord{ + 11, + 0, + 686, + }, + dictWord{140, 0, 672}, + dictWord{7, 0, 570}, + dictWord{4, 11, 396}, + dictWord{7, 10, 120}, + dictWord{7, 11, 728}, + dictWord{8, 10, 489}, + dictWord{9, 11, 117}, + dictWord{9, 10, 319}, + dictWord{10, 10, 820}, + dictWord{11, 10, 1004}, + dictWord{12, 10, 379}, + dictWord{12, 10, 679}, + dictWord{13, 10, 117}, + dictWord{ + 13, + 11, + 202, + }, + dictWord{13, 10, 412}, + dictWord{14, 10, 25}, + dictWord{15, 10, 52}, + dictWord{15, 10, 161}, + dictWord{16, 10, 47}, + dictWord{20, 11, 51}, + dictWord{ + 149, + 10, + 2, + }, + dictWord{6, 11, 121}, + dictWord{6, 11, 124}, + dictWord{6, 11, 357}, + dictWord{7, 11, 1138}, + dictWord{7, 11, 1295}, + dictWord{8, 11, 162}, + dictWord{ + 139, + 11, + 655, + }, + dictWord{8, 0, 449}, + dictWord{4, 10, 937}, + dictWord{5, 10, 801}, + dictWord{136, 11, 449}, + dictWord{139, 11, 958}, + dictWord{6, 0, 181}, + dictWord{ + 7, + 0, + 537, + }, + dictWord{8, 0, 64}, + dictWord{9, 0, 127}, + dictWord{10, 0, 496}, + dictWord{12, 0, 510}, + dictWord{141, 0, 384}, + dictWord{138, 11, 253}, + dictWord{4, 0, 244}, + dictWord{135, 0, 233}, + dictWord{133, 11, 237}, + dictWord{132, 10, 365}, + dictWord{6, 0, 1650}, + dictWord{10, 0, 702}, + dictWord{139, 0, 245}, + dictWord{ + 5, + 10, + 7, + }, + dictWord{139, 10, 774}, + dictWord{13, 0, 463}, + dictWord{20, 0, 49}, + dictWord{13, 11, 463}, + dictWord{148, 11, 49}, + dictWord{4, 10, 734}, + dictWord{ + 5, + 10, + 662, + }, + dictWord{134, 10, 430}, + dictWord{4, 10, 746}, + dictWord{135, 10, 1090}, + dictWord{5, 10, 360}, + dictWord{136, 10, 237}, + dictWord{137, 0, 338}, + dictWord{143, 11, 10}, + dictWord{7, 11, 571}, + dictWord{138, 11, 366}, + dictWord{134, 0, 1279}, + dictWord{9, 11, 513}, + dictWord{10, 11, 22}, + dictWord{10, 11, 39}, + dictWord{12, 11, 122}, + dictWord{140, 11, 187}, + dictWord{133, 0, 896}, + dictWord{146, 0, 178}, + dictWord{134, 0, 695}, + dictWord{137, 0, 808}, + dictWord{ + 134, + 11, + 587, + }, + dictWord{7, 11, 107}, + dictWord{7, 11, 838}, + dictWord{8, 11, 550}, + dictWord{138, 11, 401}, + dictWord{7, 0, 1117}, + dictWord{136, 0, 539}, + dictWord{ + 4, + 10, + 277, + }, + dictWord{5, 10, 608}, + dictWord{6, 10, 493}, + dictWord{7, 10, 457}, + dictWord{140, 10, 384}, + dictWord{133, 11, 768}, + dictWord{12, 0, 257}, + dictWord{ + 7, + 10, + 27, + }, + dictWord{135, 10, 316}, + dictWord{140, 0, 1003}, + dictWord{4, 0, 207}, + dictWord{5, 0, 586}, + dictWord{5, 0, 676}, + dictWord{6, 0, 448}, + dictWord{ + 8, + 0, + 244, + }, + dictWord{11, 0, 1}, + dictWord{13, 0, 3}, + dictWord{16, 0, 54}, + dictWord{17, 0, 4}, + dictWord{18, 0, 13}, + dictWord{133, 10, 552}, + dictWord{4, 10, 401}, + dictWord{ + 137, + 10, + 264, + }, + dictWord{5, 0, 516}, + dictWord{7, 0, 1883}, + dictWord{135, 11, 1883}, + dictWord{12, 0, 960}, + dictWord{132, 11, 894}, + dictWord{5, 0, 4}, + dictWord{ + 5, + 0, + 810, + }, + dictWord{6, 0, 13}, + dictWord{6, 0, 538}, + dictWord{6, 0, 1690}, + dictWord{6, 0, 1726}, + dictWord{7, 0, 499}, + dictWord{7, 0, 1819}, + dictWord{8, 0, 148}, + dictWord{ + 8, + 0, + 696, + }, + dictWord{8, 0, 791}, + dictWord{12, 0, 125}, + dictWord{143, 0, 9}, + dictWord{135, 0, 1268}, + dictWord{11, 0, 30}, + dictWord{14, 0, 315}, + dictWord{ + 9, + 10, + 543, + }, + dictWord{10, 10, 524}, + dictWord{12, 10, 524}, + dictWord{16, 10, 18}, + dictWord{20, 10, 26}, + dictWord{148, 10, 65}, + dictWord{6, 0, 748}, + dictWord{ + 4, + 10, + 205, + }, + dictWord{5, 10, 623}, + dictWord{7, 10, 104}, + dictWord{136, 10, 519}, + dictWord{11, 0, 542}, + dictWord{139, 0, 852}, + dictWord{140, 0, 6}, + dictWord{ + 132, + 0, + 848, + }, + dictWord{7, 0, 1385}, + dictWord{11, 0, 582}, + dictWord{11, 0, 650}, + dictWord{11, 0, 901}, + dictWord{11, 0, 949}, + dictWord{12, 0, 232}, + dictWord{12, 0, 236}, + dictWord{13, 0, 413}, + dictWord{13, 0, 501}, + dictWord{18, 0, 116}, + dictWord{7, 10, 579}, + dictWord{9, 10, 41}, + dictWord{9, 10, 244}, + dictWord{9, 10, 669}, + dictWord{10, 10, 5}, + dictWord{11, 10, 861}, + dictWord{11, 10, 951}, + dictWord{139, 10, 980}, + dictWord{4, 0, 945}, + dictWord{6, 0, 1811}, + dictWord{6, 0, 1845}, + dictWord{ + 6, + 0, + 1853, + }, + dictWord{6, 0, 1858}, + dictWord{8, 0, 862}, + dictWord{12, 0, 782}, + dictWord{12, 0, 788}, + dictWord{18, 0, 160}, + dictWord{148, 0, 117}, + dictWord{ + 132, + 10, + 717, + }, + dictWord{4, 0, 925}, + dictWord{5, 0, 803}, + dictWord{8, 0, 698}, + dictWord{138, 0, 828}, + dictWord{134, 0, 1416}, + dictWord{132, 0, 610}, + dictWord{ + 139, + 0, + 992, + }, + dictWord{6, 0, 878}, + dictWord{134, 0, 1477}, + dictWord{135, 0, 1847}, + dictWord{138, 11, 531}, + dictWord{137, 11, 539}, + dictWord{134, 11, 272}, + dictWord{133, 0, 383}, + dictWord{134, 0, 1404}, + dictWord{132, 10, 489}, + dictWord{4, 11, 9}, + dictWord{5, 11, 128}, + dictWord{7, 11, 368}, + dictWord{ + 11, + 11, + 480, + }, + dictWord{148, 11, 3}, + dictWord{136, 0, 986}, + dictWord{9, 0, 660}, + dictWord{138, 0, 347}, + dictWord{135, 10, 892}, + dictWord{136, 11, 682}, + dictWord{ + 7, + 0, + 572, + }, + dictWord{9, 0, 592}, + dictWord{11, 0, 680}, + dictWord{12, 0, 356}, + dictWord{140, 0, 550}, + dictWord{7, 0, 1411}, + dictWord{138, 11, 527}, + dictWord{ + 4, + 11, + 2, + }, + dictWord{7, 11, 545}, + dictWord{135, 11, 894}, + dictWord{137, 10, 473}, + dictWord{11, 0, 64}, + dictWord{7, 11, 481}, + dictWord{7, 10, 819}, + dictWord{9, 10, 26}, + dictWord{9, 10, 392}, + dictWord{9, 11, 792}, + dictWord{10, 10, 152}, + dictWord{10, 10, 226}, + dictWord{12, 10, 276}, + dictWord{12, 10, 426}, + dictWord{ + 12, + 10, + 589, + }, + dictWord{13, 10, 460}, + dictWord{15, 10, 97}, + dictWord{19, 10, 48}, + dictWord{148, 10, 104}, + dictWord{135, 10, 51}, + dictWord{136, 11, 445}, + dictWord{136, 11, 646}, + dictWord{135, 0, 606}, + dictWord{132, 10, 674}, + dictWord{6, 0, 1829}, + dictWord{134, 0, 1830}, + dictWord{132, 10, 770}, + dictWord{ + 5, + 10, + 79, + }, + dictWord{7, 10, 1027}, + dictWord{7, 10, 1477}, + dictWord{139, 10, 52}, + dictWord{5, 11, 530}, + dictWord{142, 11, 113}, + dictWord{134, 10, 1666}, + dictWord{ + 7, + 0, + 748, + }, + dictWord{139, 0, 700}, + dictWord{134, 10, 195}, + dictWord{133, 10, 789}, + dictWord{9, 0, 87}, + dictWord{10, 0, 365}, + dictWord{4, 10, 251}, + dictWord{ + 4, + 10, + 688, + }, + dictWord{7, 10, 513}, + dictWord{135, 10, 1284}, + dictWord{136, 11, 111}, + dictWord{133, 0, 127}, + dictWord{6, 0, 198}, + dictWord{140, 0, 83}, + dictWord{133, 11, 556}, + dictWord{133, 10, 889}, + dictWord{4, 10, 160}, + dictWord{5, 10, 330}, + dictWord{7, 10, 1434}, + dictWord{136, 10, 174}, + dictWord{5, 0, 276}, + dictWord{6, 0, 55}, + dictWord{7, 0, 1369}, + dictWord{138, 0, 864}, + dictWord{8, 11, 16}, + dictWord{140, 11, 568}, + dictWord{6, 0, 1752}, + dictWord{136, 0, 726}, + dictWord{135, 0, 1066}, + dictWord{133, 0, 764}, + dictWord{6, 11, 186}, + dictWord{137, 11, 426}, + dictWord{11, 0, 683}, + dictWord{139, 11, 683}, + dictWord{ + 6, + 0, + 309, + }, + dictWord{7, 0, 331}, + dictWord{138, 0, 550}, + dictWord{133, 10, 374}, + dictWord{6, 0, 1212}, + dictWord{6, 0, 1852}, + dictWord{7, 0, 1062}, + dictWord{ + 8, + 0, + 874, + }, + dictWord{8, 0, 882}, + dictWord{138, 0, 936}, + dictWord{132, 11, 585}, + dictWord{134, 0, 1364}, + dictWord{7, 0, 986}, + dictWord{133, 10, 731}, + dictWord{ + 6, + 0, + 723, + }, + dictWord{6, 0, 1408}, + dictWord{138, 0, 381}, + dictWord{135, 0, 1573}, + dictWord{134, 0, 1025}, + dictWord{4, 10, 626}, + dictWord{5, 10, 642}, + dictWord{ + 6, + 10, + 425, + }, + dictWord{10, 10, 202}, + dictWord{139, 10, 141}, + dictWord{4, 11, 93}, + dictWord{5, 11, 252}, + dictWord{6, 11, 229}, + dictWord{7, 11, 291}, + dictWord{ + 9, + 11, + 550, + }, + dictWord{139, 11, 644}, + dictWord{137, 11, 749}, + dictWord{137, 11, 162}, + dictWord{132, 11, 381}, + dictWord{135, 0, 1559}, + dictWord{ + 6, + 0, + 194, + }, + dictWord{7, 0, 133}, + dictWord{10, 0, 493}, + dictWord{10, 0, 570}, + dictWord{139, 0, 664}, + dictWord{5, 0, 24}, + dictWord{5, 0, 569}, + dictWord{6, 0, 3}, + dictWord{ + 6, + 0, + 119, + }, + dictWord{6, 0, 143}, + dictWord{6, 0, 440}, + dictWord{7, 0, 295}, + dictWord{7, 0, 599}, + dictWord{7, 0, 1686}, + dictWord{7, 0, 1854}, + dictWord{8, 0, 424}, + dictWord{ + 9, + 0, + 43, + }, + dictWord{9, 0, 584}, + dictWord{9, 0, 760}, + dictWord{10, 0, 148}, + dictWord{10, 0, 328}, + dictWord{11, 0, 159}, + dictWord{11, 0, 253}, + dictWord{11, 0, 506}, + dictWord{12, 0, 487}, + dictWord{140, 0, 531}, + dictWord{6, 0, 661}, + dictWord{134, 0, 1517}, + dictWord{136, 10, 835}, + dictWord{151, 10, 17}, + dictWord{5, 0, 14}, + dictWord{5, 0, 892}, + dictWord{6, 0, 283}, + dictWord{7, 0, 234}, + dictWord{136, 0, 537}, + dictWord{139, 0, 541}, + dictWord{4, 0, 126}, + dictWord{8, 0, 635}, + dictWord{ + 147, + 0, + 34, + }, + dictWord{4, 0, 316}, + dictWord{4, 0, 495}, + dictWord{135, 0, 1561}, + dictWord{4, 11, 187}, + dictWord{5, 11, 184}, + dictWord{5, 11, 690}, + dictWord{ + 7, + 11, + 1869, + }, + dictWord{138, 11, 756}, + dictWord{139, 11, 783}, + dictWord{4, 0, 998}, + dictWord{137, 0, 861}, + dictWord{136, 0, 1009}, + dictWord{139, 11, 292}, + dictWord{5, 11, 21}, + dictWord{6, 11, 77}, + dictWord{6, 11, 157}, + dictWord{7, 11, 974}, + dictWord{7, 11, 1301}, + dictWord{7, 11, 1339}, + dictWord{7, 11, 1490}, + dictWord{ + 7, + 11, + 1873, + }, + dictWord{137, 11, 628}, + dictWord{7, 11, 1283}, + dictWord{9, 11, 227}, + dictWord{9, 11, 499}, + dictWord{10, 11, 341}, + dictWord{11, 11, 325}, + dictWord{11, 11, 408}, + dictWord{14, 11, 180}, + dictWord{15, 11, 144}, + dictWord{18, 11, 47}, + dictWord{147, 11, 49}, + dictWord{4, 0, 64}, + dictWord{5, 0, 352}, + dictWord{5, 0, 720}, + dictWord{6, 0, 368}, + dictWord{139, 0, 359}, + dictWord{5, 10, 384}, + dictWord{8, 10, 455}, + dictWord{140, 10, 48}, + dictWord{5, 10, 264}, + dictWord{ + 134, + 10, + 184, + }, + dictWord{7, 0, 1577}, + dictWord{10, 0, 304}, + dictWord{10, 0, 549}, + dictWord{12, 0, 365}, + dictWord{13, 0, 220}, + dictWord{13, 0, 240}, + dictWord{ + 142, + 0, + 33, + }, + dictWord{134, 0, 1107}, + dictWord{134, 0, 929}, + dictWord{135, 0, 1142}, + dictWord{6, 0, 175}, + dictWord{137, 0, 289}, + dictWord{5, 0, 432}, + dictWord{ + 133, + 0, + 913, + }, + dictWord{6, 0, 279}, + dictWord{7, 0, 219}, + dictWord{5, 10, 633}, + dictWord{135, 10, 1323}, + dictWord{7, 0, 785}, + dictWord{7, 10, 359}, + dictWord{ + 8, + 10, + 243, + }, + dictWord{140, 10, 175}, + dictWord{139, 0, 595}, + dictWord{132, 10, 105}, + dictWord{8, 11, 398}, + dictWord{9, 11, 681}, + dictWord{139, 11, 632}, + dictWord{140, 0, 80}, + dictWord{5, 0, 931}, + dictWord{134, 0, 1698}, + dictWord{142, 11, 241}, + dictWord{134, 11, 20}, + dictWord{134, 0, 1323}, + dictWord{11, 0, 526}, + dictWord{11, 0, 939}, + dictWord{141, 0, 290}, + dictWord{5, 0, 774}, + dictWord{6, 0, 780}, + dictWord{6, 0, 1637}, + dictWord{6, 0, 1686}, + dictWord{6, 0, 1751}, + dictWord{ + 8, + 0, + 559, + }, + dictWord{141, 0, 109}, + dictWord{141, 0, 127}, + dictWord{7, 0, 1167}, + dictWord{11, 0, 934}, + dictWord{13, 0, 391}, + dictWord{17, 0, 76}, + dictWord{ + 135, + 11, + 709, + }, + dictWord{135, 0, 963}, + dictWord{6, 0, 260}, + dictWord{135, 0, 1484}, + dictWord{134, 0, 573}, + dictWord{4, 10, 758}, + dictWord{139, 11, 941}, + dictWord{135, 10, 1649}, + dictWord{145, 11, 36}, + dictWord{4, 0, 292}, + dictWord{137, 0, 580}, + dictWord{4, 0, 736}, + dictWord{5, 0, 871}, + dictWord{6, 0, 1689}, + dictWord{135, 0, 1944}, + dictWord{7, 11, 945}, + dictWord{11, 11, 713}, + dictWord{139, 11, 744}, + dictWord{134, 0, 1164}, + dictWord{135, 11, 937}, + dictWord{ + 6, + 0, + 1922, + }, + dictWord{9, 0, 982}, + dictWord{15, 0, 173}, + dictWord{15, 0, 178}, + dictWord{15, 0, 200}, + dictWord{18, 0, 189}, + dictWord{18, 0, 207}, + dictWord{21, 0, 47}, + dictWord{135, 11, 1652}, + dictWord{7, 0, 1695}, + dictWord{139, 10, 128}, + dictWord{6, 0, 63}, + dictWord{135, 0, 920}, + dictWord{133, 0, 793}, + dictWord{ + 143, + 11, + 134, + }, + dictWord{133, 10, 918}, + dictWord{5, 0, 67}, + dictWord{6, 0, 62}, + dictWord{6, 0, 374}, + dictWord{135, 0, 1391}, + dictWord{9, 0, 790}, + dictWord{12, 0, 47}, + dictWord{4, 11, 579}, + dictWord{5, 11, 226}, + dictWord{5, 11, 323}, + dictWord{135, 11, 960}, + dictWord{10, 11, 784}, + dictWord{141, 11, 191}, + dictWord{4, 0, 391}, + dictWord{135, 0, 1169}, + dictWord{137, 0, 443}, + dictWord{13, 11, 232}, + dictWord{146, 11, 35}, + dictWord{132, 10, 340}, + dictWord{132, 0, 271}, + dictWord{ + 137, + 11, + 313, + }, + dictWord{5, 11, 973}, + dictWord{137, 11, 659}, + dictWord{134, 0, 1140}, + dictWord{6, 11, 135}, + dictWord{135, 11, 1176}, + dictWord{4, 0, 253}, + dictWord{5, 0, 544}, + dictWord{7, 0, 300}, + dictWord{137, 0, 340}, + dictWord{7, 0, 897}, + dictWord{5, 10, 985}, + dictWord{7, 10, 509}, + dictWord{145, 10, 96}, + dictWord{ + 138, + 11, + 735, + }, + dictWord{135, 10, 1919}, + dictWord{138, 0, 890}, + dictWord{5, 0, 818}, + dictWord{134, 0, 1122}, + dictWord{5, 0, 53}, + dictWord{5, 0, 541}, + dictWord{ + 6, + 0, + 94, + }, + dictWord{6, 0, 499}, + dictWord{7, 0, 230}, + dictWord{139, 0, 321}, + dictWord{4, 0, 920}, + dictWord{5, 0, 25}, + dictWord{5, 0, 790}, + dictWord{6, 0, 457}, + dictWord{ + 7, + 0, + 853, + }, + dictWord{8, 0, 788}, + dictWord{142, 11, 31}, + dictWord{132, 10, 247}, + dictWord{135, 11, 314}, + dictWord{132, 0, 468}, + dictWord{7, 0, 243}, + dictWord{ + 6, + 10, + 337, + }, + dictWord{7, 10, 494}, + dictWord{8, 10, 27}, + dictWord{8, 10, 599}, + dictWord{138, 10, 153}, + dictWord{4, 10, 184}, + dictWord{5, 10, 390}, + dictWord{ + 7, + 10, + 618, + }, + dictWord{7, 10, 1456}, + dictWord{139, 10, 710}, + dictWord{134, 0, 870}, + dictWord{134, 0, 1238}, + dictWord{134, 0, 1765}, + dictWord{10, 0, 853}, + dictWord{10, 0, 943}, + dictWord{14, 0, 437}, + dictWord{14, 0, 439}, + dictWord{14, 0, 443}, + dictWord{14, 0, 446}, + dictWord{14, 0, 452}, + dictWord{14, 0, 469}, + dictWord{ + 14, + 0, + 471, + }, + dictWord{14, 0, 473}, + dictWord{16, 0, 93}, + dictWord{16, 0, 102}, + dictWord{16, 0, 110}, + dictWord{148, 0, 121}, + dictWord{4, 0, 605}, + dictWord{ + 7, + 0, + 518, + }, + dictWord{7, 0, 1282}, + dictWord{7, 0, 1918}, + dictWord{10, 0, 180}, + dictWord{139, 0, 218}, + dictWord{133, 0, 822}, + dictWord{4, 0, 634}, + dictWord{ + 11, + 0, + 916, + }, + dictWord{142, 0, 419}, + dictWord{6, 11, 281}, + dictWord{7, 11, 6}, + dictWord{8, 11, 282}, + dictWord{8, 11, 480}, + dictWord{8, 11, 499}, + dictWord{9, 11, 198}, + dictWord{10, 11, 143}, + dictWord{10, 11, 169}, + dictWord{10, 11, 211}, + dictWord{10, 11, 417}, + dictWord{10, 11, 574}, + dictWord{11, 11, 147}, + dictWord{ + 11, + 11, + 395, + }, + dictWord{12, 11, 75}, + dictWord{12, 11, 407}, + dictWord{12, 11, 608}, + dictWord{13, 11, 500}, + dictWord{142, 11, 251}, + dictWord{134, 0, 898}, + dictWord{ + 6, + 0, + 36, + }, + dictWord{7, 0, 658}, + dictWord{8, 0, 454}, + dictWord{150, 11, 48}, + dictWord{133, 11, 674}, + dictWord{135, 11, 1776}, + dictWord{4, 11, 419}, + dictWord{ + 10, + 10, + 227, + }, + dictWord{11, 10, 497}, + dictWord{11, 10, 709}, + dictWord{140, 10, 415}, + dictWord{6, 10, 360}, + dictWord{7, 10, 1664}, + dictWord{136, 10, 478}, + dictWord{137, 0, 806}, + dictWord{12, 11, 508}, + dictWord{14, 11, 102}, + dictWord{14, 11, 226}, + dictWord{144, 11, 57}, + dictWord{135, 11, 1123}, + dictWord{ + 4, + 11, + 138, + }, + dictWord{7, 11, 1012}, + dictWord{7, 11, 1280}, + dictWord{137, 11, 76}, + dictWord{5, 11, 29}, + dictWord{140, 11, 638}, + dictWord{136, 10, 699}, + dictWord{134, 0, 1326}, + dictWord{132, 0, 104}, + dictWord{135, 11, 735}, + dictWord{132, 10, 739}, + dictWord{134, 0, 1331}, + dictWord{7, 0, 260}, + dictWord{ + 135, + 11, + 260, + }, + dictWord{135, 11, 1063}, + dictWord{7, 0, 45}, + dictWord{9, 0, 542}, + dictWord{9, 0, 566}, + dictWord{10, 0, 728}, + dictWord{137, 10, 869}, + dictWord{ + 4, + 10, + 67, + }, + dictWord{5, 10, 422}, + dictWord{7, 10, 1037}, + dictWord{7, 10, 1289}, + dictWord{7, 10, 1555}, + dictWord{9, 10, 741}, + dictWord{145, 10, 108}, + dictWord{ + 139, + 0, + 263, + }, + dictWord{134, 0, 1516}, + dictWord{14, 0, 146}, + dictWord{15, 0, 42}, + dictWord{16, 0, 23}, + dictWord{17, 0, 86}, + dictWord{146, 0, 17}, + dictWord{ + 138, + 0, + 468, + }, + dictWord{136, 0, 1005}, + dictWord{4, 11, 17}, + dictWord{5, 11, 23}, + dictWord{7, 11, 995}, + dictWord{11, 11, 383}, + dictWord{11, 11, 437}, + dictWord{ + 12, + 11, + 460, + }, + dictWord{140, 11, 532}, + dictWord{7, 0, 87}, + dictWord{142, 0, 288}, + dictWord{138, 10, 96}, + dictWord{135, 11, 626}, + dictWord{144, 10, 26}, + dictWord{ + 7, + 0, + 988, + }, + dictWord{7, 0, 1939}, + dictWord{9, 0, 64}, + dictWord{9, 0, 502}, + dictWord{12, 0, 22}, + dictWord{12, 0, 34}, + dictWord{13, 0, 12}, + dictWord{13, 0, 234}, + dictWord{147, 0, 77}, + dictWord{13, 0, 133}, + dictWord{8, 10, 203}, + dictWord{11, 10, 823}, + dictWord{11, 10, 846}, + dictWord{12, 10, 482}, + dictWord{13, 10, 277}, + dictWord{13, 10, 302}, + dictWord{13, 10, 464}, + dictWord{14, 10, 205}, + dictWord{142, 10, 221}, + dictWord{4, 10, 449}, + dictWord{133, 10, 718}, + dictWord{ + 135, + 0, + 141, + }, + dictWord{6, 0, 1842}, + dictWord{136, 0, 872}, + dictWord{8, 11, 70}, + dictWord{12, 11, 171}, + dictWord{141, 11, 272}, + dictWord{4, 10, 355}, + dictWord{ + 6, + 10, + 311, + }, + dictWord{9, 10, 256}, + dictWord{138, 10, 404}, + dictWord{132, 0, 619}, + dictWord{137, 0, 261}, + dictWord{10, 11, 233}, + dictWord{10, 10, 758}, + dictWord{139, 11, 76}, + dictWord{5, 0, 246}, + dictWord{8, 0, 189}, + dictWord{9, 0, 355}, + dictWord{9, 0, 512}, + dictWord{10, 0, 124}, + dictWord{10, 0, 453}, + dictWord{ + 11, + 0, + 143, + }, + dictWord{11, 0, 416}, + dictWord{11, 0, 859}, + dictWord{141, 0, 341}, + dictWord{134, 11, 442}, + dictWord{133, 10, 827}, + dictWord{5, 10, 64}, + dictWord{ + 140, + 10, + 581, + }, + dictWord{4, 10, 442}, + dictWord{7, 10, 1047}, + dictWord{7, 10, 1352}, + dictWord{135, 10, 1643}, + dictWord{134, 11, 1709}, + dictWord{5, 0, 678}, + dictWord{6, 0, 305}, + dictWord{7, 0, 775}, + dictWord{7, 0, 1065}, + dictWord{133, 10, 977}, + dictWord{11, 11, 69}, + dictWord{12, 11, 105}, + dictWord{12, 11, 117}, + dictWord{13, 11, 213}, + dictWord{14, 11, 13}, + dictWord{14, 11, 62}, + dictWord{14, 11, 177}, + dictWord{14, 11, 421}, + dictWord{15, 11, 19}, + dictWord{146, 11, 141}, + dictWord{137, 11, 309}, + dictWord{5, 0, 35}, + dictWord{7, 0, 862}, + dictWord{7, 0, 1886}, + dictWord{138, 0, 179}, + dictWord{136, 0, 285}, + dictWord{132, 0, 517}, + dictWord{7, 11, 976}, + dictWord{9, 11, 146}, + dictWord{10, 11, 206}, + dictWord{10, 11, 596}, + dictWord{13, 11, 218}, + dictWord{142, 11, 153}, + dictWord{ + 132, + 10, + 254, + }, + dictWord{6, 0, 214}, + dictWord{12, 0, 540}, + dictWord{4, 10, 275}, + dictWord{7, 10, 1219}, + dictWord{140, 10, 376}, + dictWord{8, 0, 667}, + dictWord{ + 11, + 0, + 403, + }, + dictWord{146, 0, 83}, + dictWord{12, 0, 74}, + dictWord{10, 11, 648}, + dictWord{11, 11, 671}, + dictWord{143, 11, 46}, + dictWord{135, 0, 125}, + dictWord{ + 134, + 10, + 1753, + }, + dictWord{133, 0, 761}, + dictWord{6, 0, 912}, + dictWord{4, 11, 518}, + dictWord{6, 10, 369}, + dictWord{6, 10, 502}, + dictWord{7, 10, 1036}, + dictWord{ + 7, + 11, + 1136, + }, + dictWord{8, 10, 348}, + dictWord{9, 10, 452}, + dictWord{10, 10, 26}, + dictWord{11, 10, 224}, + dictWord{11, 10, 387}, + dictWord{11, 10, 772}, + dictWord{12, 10, 95}, + dictWord{12, 10, 629}, + dictWord{13, 10, 195}, + dictWord{13, 10, 207}, + dictWord{13, 10, 241}, + dictWord{14, 10, 260}, + dictWord{14, 10, 270}, + dictWord{143, 10, 140}, + dictWord{10, 0, 131}, + dictWord{140, 0, 72}, + dictWord{132, 10, 269}, + dictWord{5, 10, 480}, + dictWord{7, 10, 532}, + dictWord{ + 7, + 10, + 1197, + }, + dictWord{7, 10, 1358}, + dictWord{8, 10, 291}, + dictWord{11, 10, 349}, + dictWord{142, 10, 396}, + dictWord{8, 11, 689}, + dictWord{137, 11, 863}, + dictWord{ + 8, + 0, + 333, + }, + dictWord{138, 0, 182}, + dictWord{4, 11, 18}, + dictWord{7, 11, 145}, + dictWord{7, 11, 444}, + dictWord{7, 11, 1278}, + dictWord{8, 11, 49}, + dictWord{ + 8, + 11, + 400, + }, + dictWord{9, 11, 71}, + dictWord{9, 11, 250}, + dictWord{10, 11, 459}, + dictWord{12, 11, 160}, + dictWord{144, 11, 24}, + dictWord{14, 11, 35}, + dictWord{ + 142, + 11, + 191, + }, + dictWord{135, 11, 1864}, + dictWord{135, 0, 1338}, + dictWord{148, 10, 15}, + dictWord{14, 0, 94}, + dictWord{15, 0, 65}, + dictWord{16, 0, 4}, + dictWord{ + 16, + 0, + 77, + }, + dictWord{16, 0, 80}, + dictWord{145, 0, 5}, + dictWord{12, 11, 82}, + dictWord{143, 11, 36}, + dictWord{133, 11, 1010}, + dictWord{133, 0, 449}, + dictWord{ + 133, + 0, + 646, + }, + dictWord{7, 0, 86}, + dictWord{8, 0, 103}, + dictWord{135, 10, 657}, + dictWord{7, 0, 2028}, + dictWord{138, 0, 641}, + dictWord{136, 10, 533}, + dictWord{ + 134, + 0, + 1, + }, + dictWord{139, 11, 970}, + dictWord{5, 11, 87}, + dictWord{7, 11, 313}, + dictWord{7, 11, 1103}, + dictWord{10, 11, 112}, + dictWord{10, 11, 582}, + dictWord{ + 11, + 11, + 389, + }, + dictWord{11, 11, 813}, + dictWord{12, 11, 385}, + dictWord{13, 11, 286}, + dictWord{14, 11, 124}, + dictWord{146, 11, 108}, + dictWord{6, 0, 869}, + dictWord{ + 132, + 11, + 267, + }, + dictWord{6, 0, 277}, + dictWord{7, 0, 1274}, + dictWord{7, 0, 1386}, + dictWord{146, 0, 87}, + dictWord{6, 0, 187}, + dictWord{7, 0, 39}, + dictWord{7, 0, 1203}, + dictWord{8, 0, 380}, + dictWord{14, 0, 117}, + dictWord{149, 0, 28}, + dictWord{4, 10, 211}, + dictWord{4, 10, 332}, + dictWord{5, 10, 335}, + dictWord{6, 10, 238}, + dictWord{ + 7, + 10, + 269, + }, + dictWord{7, 10, 811}, + dictWord{7, 10, 1797}, + dictWord{8, 10, 836}, + dictWord{9, 10, 507}, + dictWord{141, 10, 242}, + dictWord{4, 0, 785}, + dictWord{ + 5, + 0, + 368, + }, + dictWord{6, 0, 297}, + dictWord{7, 0, 793}, + dictWord{139, 0, 938}, + dictWord{7, 0, 464}, + dictWord{8, 0, 558}, + dictWord{11, 0, 105}, + dictWord{12, 0, 231}, + dictWord{14, 0, 386}, + dictWord{15, 0, 102}, + dictWord{148, 0, 75}, + dictWord{133, 10, 1009}, + dictWord{8, 0, 877}, + dictWord{140, 0, 731}, + dictWord{ + 139, + 11, + 289, + }, + dictWord{10, 11, 249}, + dictWord{139, 11, 209}, + dictWord{132, 11, 561}, + dictWord{134, 0, 1608}, + dictWord{132, 11, 760}, + dictWord{134, 0, 1429}, + dictWord{9, 11, 154}, + dictWord{140, 11, 485}, + dictWord{5, 10, 228}, + dictWord{6, 10, 203}, + dictWord{7, 10, 156}, + dictWord{8, 10, 347}, + dictWord{ + 137, + 10, + 265, + }, + dictWord{7, 0, 1010}, + dictWord{11, 0, 733}, + dictWord{11, 0, 759}, + dictWord{13, 0, 34}, + dictWord{14, 0, 427}, + dictWord{146, 0, 45}, + dictWord{7, 10, 1131}, + dictWord{135, 10, 1468}, + dictWord{136, 11, 255}, + dictWord{7, 0, 1656}, + dictWord{9, 0, 369}, + dictWord{10, 0, 338}, + dictWord{10, 0, 490}, + dictWord{ + 11, + 0, + 154, + }, + dictWord{11, 0, 545}, + dictWord{11, 0, 775}, + dictWord{13, 0, 77}, + dictWord{141, 0, 274}, + dictWord{133, 11, 621}, + dictWord{134, 0, 1038}, + dictWord{ + 4, + 11, + 368, + }, + dictWord{135, 11, 641}, + dictWord{6, 0, 2010}, + dictWord{8, 0, 979}, + dictWord{8, 0, 985}, + dictWord{10, 0, 951}, + dictWord{138, 0, 1011}, + dictWord{ + 134, + 0, + 1005, + }, + dictWord{19, 0, 121}, + dictWord{5, 10, 291}, + dictWord{5, 10, 318}, + dictWord{7, 10, 765}, + dictWord{9, 10, 389}, + dictWord{140, 10, 548}, + dictWord{ + 5, + 0, + 20, + }, + dictWord{6, 0, 298}, + dictWord{7, 0, 659}, + dictWord{137, 0, 219}, + dictWord{7, 0, 1440}, + dictWord{11, 0, 854}, + dictWord{11, 0, 872}, + dictWord{11, 0, 921}, + dictWord{12, 0, 551}, + dictWord{13, 0, 472}, + dictWord{142, 0, 367}, + dictWord{5, 0, 490}, + dictWord{6, 0, 615}, + dictWord{6, 0, 620}, + dictWord{135, 0, 683}, + dictWord{ + 6, + 0, + 1070, + }, + dictWord{134, 0, 1597}, + dictWord{139, 0, 522}, + dictWord{132, 0, 439}, + dictWord{136, 0, 669}, + dictWord{6, 0, 766}, + dictWord{6, 0, 1143}, + dictWord{ + 6, + 0, + 1245, + }, + dictWord{10, 10, 525}, + dictWord{139, 10, 82}, + dictWord{9, 11, 92}, + dictWord{147, 11, 91}, + dictWord{6, 0, 668}, + dictWord{134, 0, 1218}, + dictWord{ + 6, + 11, + 525, + }, + dictWord{9, 11, 876}, + dictWord{140, 11, 284}, + dictWord{132, 0, 233}, + dictWord{136, 0, 547}, + dictWord{132, 10, 422}, + dictWord{5, 10, 355}, + dictWord{145, 10, 0}, + dictWord{6, 11, 300}, + dictWord{135, 11, 1515}, + dictWord{4, 0, 482}, + dictWord{137, 10, 905}, + dictWord{4, 0, 886}, + dictWord{7, 0, 346}, + dictWord{133, 11, 594}, + dictWord{133, 10, 865}, + dictWord{5, 10, 914}, + dictWord{134, 10, 1625}, + dictWord{135, 0, 334}, + dictWord{5, 0, 795}, + dictWord{ + 6, + 0, + 1741, + }, + dictWord{133, 10, 234}, + dictWord{135, 10, 1383}, + dictWord{6, 11, 1641}, + dictWord{136, 11, 820}, + dictWord{135, 0, 371}, + dictWord{7, 11, 1313}, + dictWord{138, 11, 660}, + dictWord{135, 10, 1312}, + dictWord{135, 0, 622}, + dictWord{7, 0, 625}, + dictWord{135, 0, 1750}, + dictWord{135, 0, 339}, + dictWord{ + 4, + 0, + 203, + }, + dictWord{135, 0, 1936}, + dictWord{15, 0, 29}, + dictWord{16, 0, 38}, + dictWord{15, 11, 29}, + dictWord{144, 11, 38}, + dictWord{5, 0, 338}, + dictWord{ + 135, + 0, + 1256, + }, + dictWord{135, 10, 1493}, + dictWord{10, 0, 130}, + dictWord{6, 10, 421}, + dictWord{7, 10, 61}, + dictWord{7, 10, 1540}, + dictWord{138, 10, 501}, + dictWord{ + 6, + 11, + 389, + }, + dictWord{7, 11, 149}, + dictWord{9, 11, 142}, + dictWord{138, 11, 94}, + dictWord{137, 10, 341}, + dictWord{11, 0, 678}, + dictWord{12, 0, 307}, + dictWord{142, 10, 98}, + dictWord{6, 11, 8}, + dictWord{7, 11, 1881}, + dictWord{136, 11, 91}, + dictWord{135, 0, 2044}, + dictWord{6, 0, 770}, + dictWord{6, 0, 802}, + dictWord{ + 6, + 0, + 812, + }, + dictWord{7, 0, 311}, + dictWord{9, 0, 308}, + dictWord{12, 0, 255}, + dictWord{6, 10, 102}, + dictWord{7, 10, 72}, + dictWord{15, 10, 142}, + dictWord{ + 147, + 10, + 67, + }, + dictWord{151, 10, 30}, + dictWord{135, 10, 823}, + dictWord{135, 0, 1266}, + dictWord{135, 11, 1746}, + dictWord{135, 10, 1870}, + dictWord{4, 0, 400}, + dictWord{5, 0, 267}, + dictWord{135, 0, 232}, + dictWord{7, 11, 24}, + dictWord{11, 11, 542}, + dictWord{139, 11, 852}, + dictWord{135, 11, 1739}, + dictWord{4, 11, 503}, + dictWord{135, 11, 1661}, + dictWord{5, 11, 130}, + dictWord{7, 11, 1314}, + dictWord{9, 11, 610}, + dictWord{10, 11, 718}, + dictWord{11, 11, 601}, + dictWord{ + 11, + 11, + 819, + }, + dictWord{11, 11, 946}, + dictWord{140, 11, 536}, + dictWord{10, 11, 149}, + dictWord{11, 11, 280}, + dictWord{142, 11, 336}, + dictWord{7, 0, 739}, + dictWord{11, 0, 690}, + dictWord{7, 11, 1946}, + dictWord{8, 10, 48}, + dictWord{8, 10, 88}, + dictWord{8, 10, 582}, + dictWord{8, 10, 681}, + dictWord{9, 10, 373}, + dictWord{ + 9, + 10, + 864, + }, + dictWord{11, 10, 157}, + dictWord{11, 10, 843}, + dictWord{148, 10, 27}, + dictWord{134, 0, 990}, + dictWord{4, 10, 88}, + dictWord{5, 10, 137}, + dictWord{ + 5, + 10, + 174, + }, + dictWord{5, 10, 777}, + dictWord{6, 10, 1664}, + dictWord{6, 10, 1725}, + dictWord{7, 10, 77}, + dictWord{7, 10, 426}, + dictWord{7, 10, 1317}, + dictWord{ + 7, + 10, + 1355, + }, + dictWord{8, 10, 126}, + dictWord{8, 10, 563}, + dictWord{9, 10, 523}, + dictWord{9, 10, 750}, + dictWord{10, 10, 310}, + dictWord{10, 10, 836}, + dictWord{ + 11, + 10, + 42, + }, + dictWord{11, 10, 318}, + dictWord{11, 10, 731}, + dictWord{12, 10, 68}, + dictWord{12, 10, 92}, + dictWord{12, 10, 507}, + dictWord{12, 10, 692}, + dictWord{ + 13, + 10, + 81, + }, + dictWord{13, 10, 238}, + dictWord{13, 10, 374}, + dictWord{14, 10, 436}, + dictWord{18, 10, 138}, + dictWord{19, 10, 78}, + dictWord{19, 10, 111}, + dictWord{20, 10, 55}, + dictWord{20, 10, 77}, + dictWord{148, 10, 92}, + dictWord{141, 10, 418}, + dictWord{7, 0, 1831}, + dictWord{132, 10, 938}, + dictWord{6, 0, 776}, + dictWord{134, 0, 915}, + dictWord{138, 10, 351}, + dictWord{5, 11, 348}, + dictWord{6, 11, 522}, + dictWord{6, 10, 1668}, + dictWord{7, 10, 1499}, + dictWord{8, 10, 117}, + dictWord{9, 10, 314}, + dictWord{138, 10, 174}, + dictWord{135, 10, 707}, + dictWord{132, 0, 613}, + dictWord{133, 10, 403}, + dictWord{132, 11, 392}, + dictWord{ + 5, + 11, + 433, + }, + dictWord{9, 11, 633}, + dictWord{139, 11, 629}, + dictWord{133, 0, 763}, + dictWord{132, 0, 878}, + dictWord{132, 0, 977}, + dictWord{132, 0, 100}, + dictWord{6, 0, 463}, + dictWord{4, 10, 44}, + dictWord{5, 10, 311}, + dictWord{7, 10, 639}, + dictWord{7, 10, 762}, + dictWord{7, 10, 1827}, + dictWord{9, 10, 8}, + dictWord{ + 9, + 10, + 462, + }, + dictWord{148, 10, 83}, + dictWord{134, 11, 234}, + dictWord{4, 10, 346}, + dictWord{7, 10, 115}, + dictWord{9, 10, 180}, + dictWord{9, 10, 456}, + dictWord{ + 138, + 10, + 363, + }, + dictWord{5, 0, 362}, + dictWord{5, 0, 443}, + dictWord{6, 0, 318}, + dictWord{7, 0, 1019}, + dictWord{139, 0, 623}, + dictWord{5, 0, 463}, + dictWord{8, 0, 296}, + dictWord{7, 11, 140}, + dictWord{7, 11, 1950}, + dictWord{8, 11, 680}, + dictWord{11, 11, 817}, + dictWord{147, 11, 88}, + dictWord{7, 11, 1222}, + dictWord{ + 138, + 11, + 386, + }, + dictWord{142, 0, 137}, + dictWord{132, 0, 454}, + dictWord{7, 0, 1914}, + dictWord{6, 11, 5}, + dictWord{7, 10, 1051}, + dictWord{9, 10, 545}, + dictWord{ + 11, + 11, + 249, + }, + dictWord{12, 11, 313}, + dictWord{16, 11, 66}, + dictWord{145, 11, 26}, + dictWord{135, 0, 1527}, + dictWord{145, 0, 58}, + dictWord{148, 11, 59}, + dictWord{ + 5, + 0, + 48, + }, + dictWord{5, 0, 404}, + dictWord{6, 0, 557}, + dictWord{7, 0, 458}, + dictWord{8, 0, 597}, + dictWord{10, 0, 455}, + dictWord{10, 0, 606}, + dictWord{11, 0, 49}, + dictWord{ + 11, + 0, + 548, + }, + dictWord{12, 0, 476}, + dictWord{13, 0, 18}, + dictWord{141, 0, 450}, + dictWord{5, 11, 963}, + dictWord{134, 11, 1773}, + dictWord{133, 0, 729}, + dictWord{138, 11, 586}, + dictWord{5, 0, 442}, + dictWord{135, 0, 1984}, + dictWord{134, 0, 449}, + dictWord{144, 0, 40}, + dictWord{4, 0, 853}, + dictWord{7, 11, 180}, + dictWord{8, 11, 509}, + dictWord{136, 11, 792}, + dictWord{6, 10, 185}, + dictWord{7, 10, 1899}, + dictWord{9, 10, 875}, + dictWord{139, 10, 673}, + dictWord{ + 134, + 11, + 524, + }, + dictWord{12, 0, 227}, + dictWord{4, 10, 327}, + dictWord{5, 10, 478}, + dictWord{7, 10, 1332}, + dictWord{136, 10, 753}, + dictWord{6, 0, 1491}, + dictWord{ + 5, + 10, + 1020, + }, + dictWord{133, 10, 1022}, + dictWord{4, 10, 103}, + dictWord{133, 10, 401}, + dictWord{132, 11, 931}, + dictWord{4, 10, 499}, + dictWord{135, 10, 1421}, + dictWord{5, 0, 55}, + dictWord{7, 0, 376}, + dictWord{140, 0, 161}, + dictWord{133, 0, 450}, + dictWord{6, 0, 1174}, + dictWord{134, 0, 1562}, + dictWord{10, 0, 62}, + dictWord{13, 0, 400}, + dictWord{135, 11, 1837}, + dictWord{140, 0, 207}, + dictWord{135, 0, 869}, + dictWord{4, 11, 773}, + dictWord{5, 11, 618}, + dictWord{ + 137, + 11, + 756, + }, + dictWord{132, 10, 96}, + dictWord{4, 0, 213}, + dictWord{7, 0, 223}, + dictWord{8, 0, 80}, + dictWord{135, 10, 968}, + dictWord{4, 11, 90}, + dictWord{5, 11, 337}, + dictWord{5, 11, 545}, + dictWord{7, 11, 754}, + dictWord{9, 11, 186}, + dictWord{10, 11, 72}, + dictWord{10, 11, 782}, + dictWord{11, 11, 513}, + dictWord{11, 11, 577}, + dictWord{11, 11, 610}, + dictWord{11, 11, 889}, + dictWord{11, 11, 961}, + dictWord{12, 11, 354}, + dictWord{12, 11, 362}, + dictWord{12, 11, 461}, + dictWord{ + 12, + 11, + 595, + }, + dictWord{13, 11, 79}, + dictWord{143, 11, 121}, + dictWord{7, 0, 381}, + dictWord{7, 0, 806}, + dictWord{7, 0, 820}, + dictWord{8, 0, 354}, + dictWord{8, 0, 437}, + dictWord{8, 0, 787}, + dictWord{9, 0, 657}, + dictWord{10, 0, 58}, + dictWord{10, 0, 339}, + dictWord{10, 0, 749}, + dictWord{11, 0, 914}, + dictWord{12, 0, 162}, + dictWord{ + 13, + 0, + 75, + }, + dictWord{14, 0, 106}, + dictWord{14, 0, 198}, + dictWord{14, 0, 320}, + dictWord{14, 0, 413}, + dictWord{146, 0, 43}, + dictWord{136, 0, 747}, + dictWord{ + 136, + 0, + 954, + }, + dictWord{134, 0, 1073}, + dictWord{135, 0, 556}, + dictWord{7, 11, 151}, + dictWord{9, 11, 329}, + dictWord{139, 11, 254}, + dictWord{5, 0, 692}, + dictWord{ + 134, + 0, + 1395, + }, + dictWord{6, 10, 563}, + dictWord{137, 10, 224}, + dictWord{134, 0, 191}, + dictWord{132, 0, 804}, + dictWord{9, 11, 187}, + dictWord{10, 11, 36}, + dictWord{17, 11, 44}, + dictWord{146, 11, 64}, + dictWord{7, 11, 165}, + dictWord{7, 11, 919}, + dictWord{136, 11, 517}, + dictWord{4, 11, 506}, + dictWord{5, 11, 295}, + dictWord{7, 11, 1680}, + dictWord{15, 11, 14}, + dictWord{144, 11, 5}, + dictWord{4, 0, 706}, + dictWord{6, 0, 162}, + dictWord{7, 0, 1960}, + dictWord{136, 0, 831}, + dictWord{ + 135, + 11, + 1376, + }, + dictWord{7, 11, 987}, + dictWord{9, 11, 688}, + dictWord{10, 11, 522}, + dictWord{11, 11, 788}, + dictWord{140, 11, 566}, + dictWord{150, 0, 35}, + dictWord{138, 0, 426}, + dictWord{135, 0, 1235}, + dictWord{135, 11, 1741}, + dictWord{7, 11, 389}, + dictWord{7, 11, 700}, + dictWord{7, 11, 940}, + dictWord{ + 8, + 11, + 514, + }, + dictWord{9, 11, 116}, + dictWord{9, 11, 535}, + dictWord{10, 11, 118}, + dictWord{11, 11, 107}, + dictWord{11, 11, 148}, + dictWord{11, 11, 922}, + dictWord{ + 12, + 11, + 254, + }, + dictWord{12, 11, 421}, + dictWord{142, 11, 238}, + dictWord{134, 0, 1234}, + dictWord{132, 11, 743}, + dictWord{4, 10, 910}, + dictWord{5, 10, 832}, + dictWord{135, 11, 1335}, + dictWord{141, 0, 96}, + dictWord{135, 11, 185}, + dictWord{146, 0, 149}, + dictWord{4, 0, 204}, + dictWord{137, 0, 902}, + dictWord{ + 4, + 11, + 784, + }, + dictWord{133, 11, 745}, + dictWord{136, 0, 833}, + dictWord{136, 0, 949}, + dictWord{7, 0, 366}, + dictWord{9, 0, 287}, + dictWord{12, 0, 199}, + dictWord{ + 12, + 0, + 556, + }, + dictWord{12, 0, 577}, + dictWord{5, 11, 81}, + dictWord{7, 11, 146}, + dictWord{7, 11, 1342}, + dictWord{7, 11, 1446}, + dictWord{8, 11, 53}, + dictWord{8, 11, 561}, + dictWord{8, 11, 694}, + dictWord{8, 11, 754}, + dictWord{9, 11, 97}, + dictWord{9, 11, 115}, + dictWord{9, 11, 894}, + dictWord{10, 11, 462}, + dictWord{10, 11, 813}, + dictWord{11, 11, 230}, + dictWord{11, 11, 657}, + dictWord{11, 11, 699}, + dictWord{11, 11, 748}, + dictWord{12, 11, 119}, + dictWord{12, 11, 200}, + dictWord{ + 12, + 11, + 283, + }, + dictWord{14, 11, 273}, + dictWord{145, 11, 15}, + dictWord{5, 11, 408}, + dictWord{137, 11, 747}, + dictWord{9, 11, 498}, + dictWord{140, 11, 181}, + dictWord{ + 6, + 0, + 2020, + }, + dictWord{136, 0, 992}, + dictWord{5, 0, 356}, + dictWord{135, 0, 224}, + dictWord{134, 0, 784}, + dictWord{7, 0, 630}, + dictWord{9, 0, 567}, + dictWord{ + 11, + 0, + 150, + }, + dictWord{11, 0, 444}, + dictWord{13, 0, 119}, + dictWord{8, 10, 528}, + dictWord{137, 10, 348}, + dictWord{134, 0, 539}, + dictWord{4, 10, 20}, + dictWord{ + 133, + 10, + 616, + }, + dictWord{142, 0, 27}, + dictWord{7, 11, 30}, + dictWord{8, 11, 86}, + dictWord{8, 11, 315}, + dictWord{8, 11, 700}, + dictWord{9, 11, 576}, + dictWord{9, 11, 858}, + dictWord{11, 11, 310}, + dictWord{11, 11, 888}, + dictWord{11, 11, 904}, + dictWord{12, 11, 361}, + dictWord{141, 11, 248}, + dictWord{138, 11, 839}, + dictWord{ + 134, + 0, + 755, + }, + dictWord{134, 0, 1063}, + dictWord{7, 10, 1091}, + dictWord{135, 10, 1765}, + dictWord{134, 11, 428}, + dictWord{7, 11, 524}, + dictWord{8, 11, 169}, + dictWord{8, 11, 234}, + dictWord{9, 11, 480}, + dictWord{138, 11, 646}, + dictWord{139, 0, 814}, + dictWord{7, 11, 1462}, + dictWord{139, 11, 659}, + dictWord{ + 4, + 10, + 26, + }, + dictWord{5, 10, 429}, + dictWord{6, 10, 245}, + dictWord{7, 10, 704}, + dictWord{7, 10, 1379}, + dictWord{135, 10, 1474}, + dictWord{7, 11, 1205}, + dictWord{ + 138, + 11, + 637, + }, + dictWord{139, 11, 803}, + dictWord{132, 10, 621}, + dictWord{136, 0, 987}, + dictWord{4, 11, 266}, + dictWord{8, 11, 4}, + dictWord{9, 11, 39}, + dictWord{ + 10, + 11, + 166, + }, + dictWord{11, 11, 918}, + dictWord{12, 11, 635}, + dictWord{20, 11, 10}, + dictWord{22, 11, 27}, + dictWord{150, 11, 43}, + dictWord{4, 0, 235}, + dictWord{ + 135, + 0, + 255, + }, + dictWord{4, 0, 194}, + dictWord{5, 0, 584}, + dictWord{6, 0, 384}, + dictWord{7, 0, 583}, + dictWord{10, 0, 761}, + dictWord{11, 0, 760}, + dictWord{139, 0, 851}, + dictWord{133, 10, 542}, + dictWord{134, 0, 1086}, + dictWord{133, 10, 868}, + dictWord{8, 0, 1016}, + dictWord{136, 0, 1018}, + dictWord{7, 0, 1396}, + dictWord{ + 7, + 11, + 1396, + }, + dictWord{136, 10, 433}, + dictWord{135, 10, 1495}, + dictWord{138, 10, 215}, + dictWord{141, 10, 124}, + dictWord{7, 11, 157}, + dictWord{ + 8, + 11, + 279, + }, + dictWord{9, 11, 759}, + dictWord{16, 11, 31}, + dictWord{16, 11, 39}, + dictWord{16, 11, 75}, + dictWord{18, 11, 24}, + dictWord{20, 11, 42}, + dictWord{152, 11, 1}, + dictWord{5, 0, 562}, + dictWord{134, 11, 604}, + dictWord{134, 0, 913}, + dictWord{5, 0, 191}, + dictWord{137, 0, 271}, + dictWord{4, 0, 470}, + dictWord{6, 0, 153}, + dictWord{7, 0, 1503}, + dictWord{7, 0, 1923}, + dictWord{10, 0, 701}, + dictWord{11, 0, 132}, + dictWord{11, 0, 227}, + dictWord{11, 0, 320}, + dictWord{11, 0, 436}, + dictWord{ + 11, + 0, + 525, + }, + dictWord{11, 0, 855}, + dictWord{11, 0, 873}, + dictWord{12, 0, 41}, + dictWord{12, 0, 286}, + dictWord{13, 0, 103}, + dictWord{13, 0, 284}, + dictWord{ + 14, + 0, + 255, + }, + dictWord{14, 0, 262}, + dictWord{15, 0, 117}, + dictWord{143, 0, 127}, + dictWord{7, 0, 475}, + dictWord{12, 0, 45}, + dictWord{147, 10, 112}, + dictWord{ + 132, + 11, + 567, + }, + dictWord{137, 11, 859}, + dictWord{6, 0, 713}, + dictWord{6, 0, 969}, + dictWord{6, 0, 1290}, + dictWord{134, 0, 1551}, + dictWord{133, 0, 327}, + dictWord{ + 6, + 0, + 552, + }, + dictWord{6, 0, 1292}, + dictWord{7, 0, 1754}, + dictWord{137, 0, 604}, + dictWord{4, 0, 223}, + dictWord{6, 0, 359}, + dictWord{11, 0, 3}, + dictWord{13, 0, 108}, + dictWord{14, 0, 89}, + dictWord{16, 0, 22}, + dictWord{5, 11, 762}, + dictWord{7, 11, 1880}, + dictWord{9, 11, 680}, + dictWord{139, 11, 798}, + dictWord{5, 0, 80}, + dictWord{ + 6, + 0, + 405, + }, + dictWord{7, 0, 403}, + dictWord{7, 0, 1502}, + dictWord{8, 0, 456}, + dictWord{9, 0, 487}, + dictWord{9, 0, 853}, + dictWord{9, 0, 889}, + dictWord{10, 0, 309}, + dictWord{ + 11, + 0, + 721, + }, + dictWord{11, 0, 994}, + dictWord{12, 0, 430}, + dictWord{141, 0, 165}, + dictWord{133, 11, 298}, + dictWord{132, 10, 647}, + dictWord{134, 0, 2016}, + dictWord{18, 10, 10}, + dictWord{146, 11, 10}, + dictWord{4, 0, 453}, + dictWord{5, 0, 887}, + dictWord{6, 0, 535}, + dictWord{8, 0, 6}, + dictWord{8, 0, 543}, + dictWord{ + 136, + 0, + 826, + }, + dictWord{136, 0, 975}, + dictWord{10, 0, 961}, + dictWord{138, 0, 962}, + dictWord{138, 10, 220}, + dictWord{6, 0, 1891}, + dictWord{6, 0, 1893}, + dictWord{ + 9, + 0, + 916, + }, + dictWord{9, 0, 965}, + dictWord{9, 0, 972}, + dictWord{12, 0, 801}, + dictWord{12, 0, 859}, + dictWord{12, 0, 883}, + dictWord{15, 0, 226}, + dictWord{149, 0, 51}, + dictWord{132, 10, 109}, + dictWord{135, 11, 267}, + dictWord{7, 11, 92}, + dictWord{7, 11, 182}, + dictWord{8, 11, 453}, + dictWord{9, 11, 204}, + dictWord{11, 11, 950}, + dictWord{12, 11, 94}, + dictWord{12, 11, 644}, + dictWord{16, 11, 20}, + dictWord{16, 11, 70}, + dictWord{16, 11, 90}, + dictWord{147, 11, 55}, + dictWord{ + 134, + 10, + 1746, + }, + dictWord{6, 11, 71}, + dictWord{7, 11, 845}, + dictWord{7, 11, 1308}, + dictWord{8, 11, 160}, + dictWord{137, 11, 318}, + dictWord{5, 0, 101}, + dictWord{6, 0, 88}, + dictWord{7, 0, 263}, + dictWord{7, 0, 628}, + dictWord{7, 0, 1677}, + dictWord{8, 0, 349}, + dictWord{9, 0, 100}, + dictWord{10, 0, 677}, + dictWord{14, 0, 169}, + dictWord{ + 14, + 0, + 302, + }, + dictWord{14, 0, 313}, + dictWord{15, 0, 48}, + dictWord{15, 0, 84}, + dictWord{7, 11, 237}, + dictWord{8, 11, 664}, + dictWord{9, 11, 42}, + dictWord{9, 11, 266}, + dictWord{9, 11, 380}, + dictWord{9, 11, 645}, + dictWord{10, 11, 177}, + dictWord{138, 11, 276}, + dictWord{138, 11, 69}, + dictWord{4, 0, 310}, + dictWord{7, 0, 708}, + dictWord{7, 0, 996}, + dictWord{9, 0, 795}, + dictWord{10, 0, 390}, + dictWord{10, 0, 733}, + dictWord{11, 0, 451}, + dictWord{12, 0, 249}, + dictWord{14, 0, 115}, + dictWord{ + 14, + 0, + 286, + }, + dictWord{143, 0, 100}, + dictWord{5, 0, 587}, + dictWord{4, 10, 40}, + dictWord{10, 10, 67}, + dictWord{11, 10, 117}, + dictWord{11, 10, 768}, + dictWord{ + 139, + 10, + 935, + }, + dictWord{6, 0, 1942}, + dictWord{7, 0, 512}, + dictWord{136, 0, 983}, + dictWord{7, 10, 992}, + dictWord{8, 10, 301}, + dictWord{9, 10, 722}, + dictWord{12, 10, 63}, + dictWord{13, 10, 29}, + dictWord{14, 10, 161}, + dictWord{143, 10, 18}, + dictWord{136, 11, 76}, + dictWord{139, 10, 923}, + dictWord{134, 0, 645}, + dictWord{ + 134, + 0, + 851, + }, + dictWord{4, 0, 498}, + dictWord{132, 11, 293}, + dictWord{7, 0, 217}, + dictWord{8, 0, 140}, + dictWord{10, 0, 610}, + dictWord{14, 11, 352}, + dictWord{ + 17, + 11, + 53, + }, + dictWord{18, 11, 146}, + dictWord{18, 11, 152}, + dictWord{19, 11, 11}, + dictWord{150, 11, 54}, + dictWord{134, 0, 1448}, + dictWord{138, 11, 841}, + dictWord{133, 0, 905}, + dictWord{4, 11, 605}, + dictWord{7, 11, 518}, + dictWord{7, 11, 1282}, + dictWord{7, 11, 1918}, + dictWord{10, 11, 180}, + dictWord{139, 11, 218}, + dictWord{139, 11, 917}, + dictWord{135, 10, 825}, + dictWord{140, 10, 328}, + dictWord{4, 0, 456}, + dictWord{7, 0, 105}, + dictWord{7, 0, 358}, + dictWord{7, 0, 1637}, + dictWord{8, 0, 643}, + dictWord{139, 0, 483}, + dictWord{134, 0, 792}, + dictWord{6, 11, 96}, + dictWord{135, 11, 1426}, + dictWord{137, 11, 691}, + dictWord{ + 4, + 11, + 651, + }, + dictWord{133, 11, 289}, + dictWord{7, 11, 688}, + dictWord{8, 11, 35}, + dictWord{9, 11, 511}, + dictWord{10, 11, 767}, + dictWord{147, 11, 118}, + dictWord{ + 150, + 0, + 56, + }, + dictWord{5, 0, 243}, + dictWord{5, 0, 535}, + dictWord{6, 10, 204}, + dictWord{10, 10, 320}, + dictWord{10, 10, 583}, + dictWord{13, 10, 502}, + dictWord{ + 14, + 10, + 72, + }, + dictWord{14, 10, 274}, + dictWord{14, 10, 312}, + dictWord{14, 10, 344}, + dictWord{15, 10, 159}, + dictWord{16, 10, 62}, + dictWord{16, 10, 69}, + dictWord{ + 17, + 10, + 30, + }, + dictWord{18, 10, 42}, + dictWord{18, 10, 53}, + dictWord{18, 10, 84}, + dictWord{18, 10, 140}, + dictWord{19, 10, 68}, + dictWord{19, 10, 85}, + dictWord{20, 10, 5}, + dictWord{20, 10, 45}, + dictWord{20, 10, 101}, + dictWord{22, 10, 7}, + dictWord{150, 10, 20}, + dictWord{4, 10, 558}, + dictWord{6, 10, 390}, + dictWord{7, 10, 162}, + dictWord{7, 10, 689}, + dictWord{9, 10, 360}, + dictWord{138, 10, 653}, + dictWord{146, 11, 23}, + dictWord{135, 0, 1748}, + dictWord{5, 10, 856}, + dictWord{ + 6, + 10, + 1672, + }, + dictWord{6, 10, 1757}, + dictWord{134, 10, 1781}, + dictWord{5, 0, 539}, + dictWord{5, 0, 754}, + dictWord{6, 0, 876}, + dictWord{132, 11, 704}, + dictWord{ + 135, + 11, + 1078, + }, + dictWord{5, 10, 92}, + dictWord{10, 10, 736}, + dictWord{140, 10, 102}, + dictWord{17, 0, 91}, + dictWord{5, 10, 590}, + dictWord{137, 10, 213}, + dictWord{134, 0, 1565}, + dictWord{6, 0, 91}, + dictWord{135, 0, 435}, + dictWord{4, 0, 939}, + dictWord{140, 0, 792}, + dictWord{134, 0, 1399}, + dictWord{4, 0, 16}, + dictWord{ + 5, + 0, + 316, + }, + dictWord{5, 0, 842}, + dictWord{6, 0, 370}, + dictWord{6, 0, 1778}, + dictWord{8, 0, 166}, + dictWord{11, 0, 812}, + dictWord{12, 0, 206}, + dictWord{12, 0, 351}, + dictWord{14, 0, 418}, + dictWord{16, 0, 15}, + dictWord{16, 0, 34}, + dictWord{18, 0, 3}, + dictWord{19, 0, 3}, + dictWord{19, 0, 7}, + dictWord{20, 0, 4}, + dictWord{21, 0, 21}, + dictWord{ + 4, + 11, + 720, + }, + dictWord{133, 11, 306}, + dictWord{144, 0, 95}, + dictWord{133, 11, 431}, + dictWord{132, 11, 234}, + dictWord{135, 0, 551}, + dictWord{4, 0, 999}, + dictWord{6, 0, 1966}, + dictWord{134, 0, 2042}, + dictWord{7, 0, 619}, + dictWord{10, 0, 547}, + dictWord{11, 0, 122}, + dictWord{12, 0, 601}, + dictWord{15, 0, 7}, + dictWord{148, 0, 20}, + dictWord{5, 11, 464}, + dictWord{6, 11, 236}, + dictWord{7, 11, 276}, + dictWord{7, 11, 696}, + dictWord{7, 11, 914}, + dictWord{7, 11, 1108}, + dictWord{ + 7, + 11, + 1448, + }, + dictWord{9, 11, 15}, + dictWord{9, 11, 564}, + dictWord{10, 11, 14}, + dictWord{12, 11, 565}, + dictWord{13, 11, 449}, + dictWord{14, 11, 53}, + dictWord{ + 15, + 11, + 13, + }, + dictWord{16, 11, 64}, + dictWord{145, 11, 41}, + dictWord{6, 0, 884}, + dictWord{6, 0, 1019}, + dictWord{134, 0, 1150}, + dictWord{6, 11, 1767}, + dictWord{ + 12, + 11, + 194, + }, + dictWord{145, 11, 107}, + dictWord{136, 10, 503}, + dictWord{133, 11, 840}, + dictWord{7, 0, 671}, + dictWord{134, 10, 466}, + dictWord{132, 0, 888}, + dictWord{4, 0, 149}, + dictWord{138, 0, 368}, + dictWord{4, 0, 154}, + dictWord{7, 0, 1134}, + dictWord{136, 0, 105}, + dictWord{135, 0, 983}, + dictWord{9, 11, 642}, + dictWord{11, 11, 236}, + dictWord{142, 11, 193}, + dictWord{4, 0, 31}, + dictWord{6, 0, 429}, + dictWord{7, 0, 962}, + dictWord{9, 0, 458}, + dictWord{139, 0, 691}, + dictWord{ + 6, + 0, + 643, + }, + dictWord{134, 0, 1102}, + dictWord{132, 0, 312}, + dictWord{4, 11, 68}, + dictWord{5, 11, 634}, + dictWord{6, 11, 386}, + dictWord{7, 11, 794}, + dictWord{ + 8, + 11, + 273, + }, + dictWord{9, 11, 563}, + dictWord{10, 11, 105}, + dictWord{10, 11, 171}, + dictWord{11, 11, 94}, + dictWord{139, 11, 354}, + dictWord{133, 0, 740}, + dictWord{ + 135, + 0, + 1642, + }, + dictWord{4, 11, 95}, + dictWord{7, 11, 416}, + dictWord{8, 11, 211}, + dictWord{139, 11, 830}, + dictWord{132, 0, 236}, + dictWord{138, 10, 241}, + dictWord{7, 11, 731}, + dictWord{13, 11, 20}, + dictWord{143, 11, 11}, + dictWord{5, 0, 836}, + dictWord{5, 0, 857}, + dictWord{6, 0, 1680}, + dictWord{135, 0, 59}, + dictWord{ + 10, + 0, + 68, + }, + dictWord{11, 0, 494}, + dictWord{152, 11, 6}, + dictWord{4, 0, 81}, + dictWord{139, 0, 867}, + dictWord{135, 0, 795}, + dictWord{133, 11, 689}, + dictWord{ + 4, + 0, + 1001, + }, + dictWord{5, 0, 282}, + dictWord{6, 0, 1932}, + dictWord{6, 0, 1977}, + dictWord{6, 0, 1987}, + dictWord{6, 0, 1992}, + dictWord{8, 0, 650}, + dictWord{8, 0, 919}, + dictWord{8, 0, 920}, + dictWord{8, 0, 923}, + dictWord{8, 0, 926}, + dictWord{8, 0, 927}, + dictWord{8, 0, 931}, + dictWord{8, 0, 939}, + dictWord{8, 0, 947}, + dictWord{8, 0, 956}, + dictWord{8, 0, 997}, + dictWord{9, 0, 907}, + dictWord{10, 0, 950}, + dictWord{10, 0, 953}, + dictWord{10, 0, 954}, + dictWord{10, 0, 956}, + dictWord{10, 0, 958}, + dictWord{ + 10, + 0, + 959, + }, + dictWord{10, 0, 964}, + dictWord{10, 0, 970}, + dictWord{10, 0, 972}, + dictWord{10, 0, 973}, + dictWord{10, 0, 975}, + dictWord{10, 0, 976}, + dictWord{ + 10, + 0, + 980, + }, + dictWord{10, 0, 981}, + dictWord{10, 0, 984}, + dictWord{10, 0, 988}, + dictWord{10, 0, 990}, + dictWord{10, 0, 995}, + dictWord{10, 0, 999}, + dictWord{ + 10, + 0, + 1002, + }, + dictWord{10, 0, 1003}, + dictWord{10, 0, 1005}, + dictWord{10, 0, 1006}, + dictWord{10, 0, 1008}, + dictWord{10, 0, 1009}, + dictWord{10, 0, 1012}, + dictWord{10, 0, 1014}, + dictWord{10, 0, 1015}, + dictWord{10, 0, 1019}, + dictWord{10, 0, 1020}, + dictWord{10, 0, 1022}, + dictWord{12, 0, 959}, + dictWord{12, 0, 961}, + dictWord{12, 0, 962}, + dictWord{12, 0, 963}, + dictWord{12, 0, 964}, + dictWord{12, 0, 965}, + dictWord{12, 0, 967}, + dictWord{12, 0, 968}, + dictWord{12, 0, 969}, + dictWord{12, 0, 970}, + dictWord{12, 0, 971}, + dictWord{12, 0, 972}, + dictWord{12, 0, 973}, + dictWord{12, 0, 974}, + dictWord{12, 0, 975}, + dictWord{12, 0, 976}, + dictWord{ + 12, + 0, + 977, + }, + dictWord{12, 0, 979}, + dictWord{12, 0, 981}, + dictWord{12, 0, 982}, + dictWord{12, 0, 983}, + dictWord{12, 0, 984}, + dictWord{12, 0, 985}, + dictWord{ + 12, + 0, + 986, + }, + dictWord{12, 0, 987}, + dictWord{12, 0, 989}, + dictWord{12, 0, 990}, + dictWord{12, 0, 992}, + dictWord{12, 0, 993}, + dictWord{12, 0, 995}, + dictWord{12, 0, 998}, + dictWord{12, 0, 999}, + dictWord{12, 0, 1000}, + dictWord{12, 0, 1001}, + dictWord{12, 0, 1002}, + dictWord{12, 0, 1004}, + dictWord{12, 0, 1005}, + dictWord{ + 12, + 0, + 1006, + }, + dictWord{12, 0, 1007}, + dictWord{12, 0, 1008}, + dictWord{12, 0, 1009}, + dictWord{12, 0, 1010}, + dictWord{12, 0, 1011}, + dictWord{12, 0, 1012}, + dictWord{12, 0, 1014}, + dictWord{12, 0, 1015}, + dictWord{12, 0, 1016}, + dictWord{12, 0, 1017}, + dictWord{12, 0, 1018}, + dictWord{12, 0, 1019}, + dictWord{ + 12, + 0, + 1022, + }, + dictWord{12, 0, 1023}, + dictWord{14, 0, 475}, + dictWord{14, 0, 477}, + dictWord{14, 0, 478}, + dictWord{14, 0, 479}, + dictWord{14, 0, 480}, + dictWord{ + 14, + 0, + 482, + }, + dictWord{14, 0, 483}, + dictWord{14, 0, 484}, + dictWord{14, 0, 485}, + dictWord{14, 0, 486}, + dictWord{14, 0, 487}, + dictWord{14, 0, 488}, + dictWord{14, 0, 489}, + dictWord{14, 0, 490}, + dictWord{14, 0, 491}, + dictWord{14, 0, 492}, + dictWord{14, 0, 493}, + dictWord{14, 0, 494}, + dictWord{14, 0, 495}, + dictWord{14, 0, 496}, + dictWord{14, 0, 497}, + dictWord{14, 0, 498}, + dictWord{14, 0, 499}, + dictWord{14, 0, 500}, + dictWord{14, 0, 501}, + dictWord{14, 0, 502}, + dictWord{14, 0, 503}, + dictWord{ + 14, + 0, + 504, + }, + dictWord{14, 0, 506}, + dictWord{14, 0, 507}, + dictWord{14, 0, 508}, + dictWord{14, 0, 509}, + dictWord{14, 0, 510}, + dictWord{14, 0, 511}, + dictWord{ + 16, + 0, + 113, + }, + dictWord{16, 0, 114}, + dictWord{16, 0, 115}, + dictWord{16, 0, 117}, + dictWord{16, 0, 118}, + dictWord{16, 0, 119}, + dictWord{16, 0, 121}, + dictWord{16, 0, 122}, + dictWord{16, 0, 123}, + dictWord{16, 0, 124}, + dictWord{16, 0, 125}, + dictWord{16, 0, 126}, + dictWord{16, 0, 127}, + dictWord{18, 0, 242}, + dictWord{18, 0, 243}, + dictWord{18, 0, 244}, + dictWord{18, 0, 245}, + dictWord{18, 0, 248}, + dictWord{18, 0, 249}, + dictWord{18, 0, 250}, + dictWord{18, 0, 251}, + dictWord{18, 0, 252}, + dictWord{ + 18, + 0, + 253, + }, + dictWord{18, 0, 254}, + dictWord{18, 0, 255}, + dictWord{20, 0, 125}, + dictWord{20, 0, 126}, + dictWord{148, 0, 127}, + dictWord{7, 11, 1717}, + dictWord{ + 7, + 11, + 1769, + }, + dictWord{138, 11, 546}, + dictWord{7, 11, 1127}, + dictWord{7, 11, 1572}, + dictWord{10, 11, 297}, + dictWord{10, 11, 422}, + dictWord{11, 11, 764}, + dictWord{11, 11, 810}, + dictWord{12, 11, 264}, + dictWord{13, 11, 102}, + dictWord{13, 11, 300}, + dictWord{13, 11, 484}, + dictWord{14, 11, 147}, + dictWord{ + 14, + 11, + 229, + }, + dictWord{17, 11, 71}, + dictWord{18, 11, 118}, + dictWord{147, 11, 120}, + dictWord{6, 0, 1148}, + dictWord{134, 0, 1586}, + dictWord{132, 0, 775}, + dictWord{135, 10, 954}, + dictWord{133, 11, 864}, + dictWord{133, 11, 928}, + dictWord{138, 11, 189}, + dictWord{135, 10, 1958}, + dictWord{6, 10, 549}, + dictWord{ + 8, + 10, + 34, + }, + dictWord{8, 10, 283}, + dictWord{9, 10, 165}, + dictWord{138, 10, 475}, + dictWord{5, 10, 652}, + dictWord{5, 10, 701}, + dictWord{135, 10, 449}, + dictWord{135, 11, 695}, + dictWord{4, 10, 655}, + dictWord{7, 10, 850}, + dictWord{17, 10, 75}, + dictWord{146, 10, 137}, + dictWord{140, 11, 682}, + dictWord{ + 133, + 11, + 523, + }, + dictWord{8, 0, 970}, + dictWord{136, 10, 670}, + dictWord{136, 11, 555}, + dictWord{7, 11, 76}, + dictWord{8, 11, 44}, + dictWord{9, 11, 884}, + dictWord{ + 10, + 11, + 580, + }, + dictWord{11, 11, 399}, + dictWord{11, 11, 894}, + dictWord{15, 11, 122}, + dictWord{18, 11, 144}, + dictWord{147, 11, 61}, + dictWord{6, 10, 159}, + dictWord{ + 6, + 10, + 364, + }, + dictWord{7, 10, 516}, + dictWord{7, 10, 1439}, + dictWord{137, 10, 518}, + dictWord{4, 0, 71}, + dictWord{5, 0, 376}, + dictWord{7, 0, 119}, + dictWord{ + 138, + 0, + 665, + }, + dictWord{141, 10, 151}, + dictWord{11, 0, 827}, + dictWord{14, 0, 34}, + dictWord{143, 0, 148}, + dictWord{133, 11, 518}, + dictWord{4, 0, 479}, + dictWord{ + 135, + 11, + 1787, + }, + dictWord{135, 11, 1852}, + dictWord{135, 10, 993}, + dictWord{7, 0, 607}, + dictWord{136, 0, 99}, + dictWord{134, 0, 1960}, + dictWord{132, 0, 793}, + dictWord{4, 0, 41}, + dictWord{5, 0, 74}, + dictWord{7, 0, 1627}, + dictWord{11, 0, 871}, + dictWord{140, 0, 619}, + dictWord{7, 0, 94}, + dictWord{11, 0, 329}, + dictWord{ + 11, + 0, + 965, + }, + dictWord{12, 0, 241}, + dictWord{14, 0, 354}, + dictWord{15, 0, 22}, + dictWord{148, 0, 63}, + dictWord{7, 10, 501}, + dictWord{9, 10, 111}, + dictWord{10, 10, 141}, + dictWord{11, 10, 332}, + dictWord{13, 10, 43}, + dictWord{13, 10, 429}, + dictWord{14, 10, 130}, + dictWord{14, 10, 415}, + dictWord{145, 10, 102}, + dictWord{ + 9, + 0, + 209, + }, + dictWord{137, 0, 300}, + dictWord{134, 0, 1497}, + dictWord{138, 11, 255}, + dictWord{4, 11, 934}, + dictWord{5, 11, 138}, + dictWord{136, 11, 610}, + dictWord{133, 0, 98}, + dictWord{6, 0, 1316}, + dictWord{10, 11, 804}, + dictWord{138, 11, 832}, + dictWord{8, 11, 96}, + dictWord{9, 11, 36}, + dictWord{10, 11, 607}, + dictWord{11, 11, 423}, + dictWord{11, 11, 442}, + dictWord{12, 11, 309}, + dictWord{14, 11, 199}, + dictWord{15, 11, 90}, + dictWord{145, 11, 110}, + dictWord{ + 132, + 0, + 463, + }, + dictWord{5, 10, 149}, + dictWord{136, 10, 233}, + dictWord{133, 10, 935}, + dictWord{4, 11, 652}, + dictWord{8, 11, 320}, + dictWord{9, 11, 13}, + dictWord{ + 9, + 11, + 398, + }, + dictWord{9, 11, 727}, + dictWord{10, 11, 75}, + dictWord{10, 11, 184}, + dictWord{10, 11, 230}, + dictWord{10, 11, 564}, + dictWord{10, 11, 569}, + dictWord{ + 11, + 11, + 973, + }, + dictWord{12, 11, 70}, + dictWord{12, 11, 189}, + dictWord{13, 11, 57}, + dictWord{13, 11, 257}, + dictWord{22, 11, 6}, + dictWord{150, 11, 16}, + dictWord{ + 142, + 0, + 291, + }, + dictWord{12, 10, 582}, + dictWord{146, 10, 131}, + dictWord{136, 10, 801}, + dictWord{133, 0, 984}, + dictWord{145, 11, 116}, + dictWord{4, 11, 692}, + dictWord{133, 11, 321}, + dictWord{4, 0, 182}, + dictWord{6, 0, 205}, + dictWord{135, 0, 220}, + dictWord{4, 0, 42}, + dictWord{9, 0, 205}, + dictWord{9, 0, 786}, + dictWord{ + 138, + 0, + 659, + }, + dictWord{6, 0, 801}, + dictWord{11, 11, 130}, + dictWord{140, 11, 609}, + dictWord{132, 0, 635}, + dictWord{5, 11, 345}, + dictWord{135, 11, 1016}, + dictWord{139, 0, 533}, + dictWord{132, 0, 371}, + dictWord{4, 0, 272}, + dictWord{135, 0, 836}, + dictWord{6, 0, 1282}, + dictWord{135, 11, 1100}, + dictWord{5, 0, 825}, + dictWord{134, 0, 1640}, + dictWord{135, 11, 1325}, + dictWord{133, 11, 673}, + dictWord{4, 11, 287}, + dictWord{133, 11, 1018}, + dictWord{135, 0, 357}, + dictWord{ + 6, + 0, + 467, + }, + dictWord{137, 0, 879}, + dictWord{7, 0, 317}, + dictWord{135, 0, 569}, + dictWord{6, 0, 924}, + dictWord{134, 0, 1588}, + dictWord{5, 11, 34}, + dictWord{ + 5, + 10, + 406, + }, + dictWord{10, 11, 724}, + dictWord{12, 11, 444}, + dictWord{13, 11, 354}, + dictWord{18, 11, 32}, + dictWord{23, 11, 24}, + dictWord{23, 11, 31}, + dictWord{ + 152, + 11, + 5, + }, + dictWord{6, 0, 1795}, + dictWord{6, 0, 1835}, + dictWord{6, 0, 1836}, + dictWord{6, 0, 1856}, + dictWord{8, 0, 844}, + dictWord{8, 0, 849}, + dictWord{8, 0, 854}, + dictWord{8, 0, 870}, + dictWord{8, 0, 887}, + dictWord{10, 0, 852}, + dictWord{138, 0, 942}, + dictWord{6, 10, 69}, + dictWord{135, 10, 117}, + dictWord{137, 0, 307}, + dictWord{ + 4, + 0, + 944, + }, + dictWord{6, 0, 1799}, + dictWord{6, 0, 1825}, + dictWord{10, 0, 848}, + dictWord{10, 0, 875}, + dictWord{10, 0, 895}, + dictWord{10, 0, 899}, + dictWord{ + 10, + 0, + 902, + }, + dictWord{140, 0, 773}, + dictWord{11, 0, 43}, + dictWord{13, 0, 72}, + dictWord{141, 0, 142}, + dictWord{135, 10, 1830}, + dictWord{134, 11, 382}, + dictWord{ + 4, + 10, + 432, + }, + dictWord{135, 10, 824}, + dictWord{132, 11, 329}, + dictWord{7, 0, 1820}, + dictWord{139, 11, 124}, + dictWord{133, 10, 826}, + dictWord{ + 133, + 0, + 525, + }, + dictWord{132, 11, 906}, + dictWord{7, 11, 1940}, + dictWord{136, 11, 366}, + dictWord{138, 11, 10}, + dictWord{4, 11, 123}, + dictWord{4, 11, 649}, + dictWord{ + 5, + 11, + 605, + }, + dictWord{7, 11, 1509}, + dictWord{136, 11, 36}, + dictWord{6, 0, 110}, + dictWord{135, 0, 1681}, + dictWord{133, 0, 493}, + dictWord{133, 11, 767}, + dictWord{4, 0, 174}, + dictWord{135, 0, 911}, + dictWord{138, 11, 786}, + dictWord{8, 0, 417}, + dictWord{137, 0, 782}, + dictWord{133, 10, 1000}, + dictWord{7, 0, 733}, + dictWord{137, 0, 583}, + dictWord{4, 10, 297}, + dictWord{6, 10, 529}, + dictWord{7, 10, 152}, + dictWord{7, 10, 713}, + dictWord{7, 10, 1845}, + dictWord{8, 10, 710}, + dictWord{8, 10, 717}, + dictWord{12, 10, 639}, + dictWord{140, 10, 685}, + dictWord{4, 0, 32}, + dictWord{5, 0, 215}, + dictWord{6, 0, 269}, + dictWord{7, 0, 1782}, + dictWord{ + 7, + 0, + 1892, + }, + dictWord{10, 0, 16}, + dictWord{11, 0, 822}, + dictWord{11, 0, 954}, + dictWord{141, 0, 481}, + dictWord{4, 11, 273}, + dictWord{5, 11, 658}, + dictWord{ + 133, + 11, + 995, + }, + dictWord{136, 0, 477}, + dictWord{134, 11, 72}, + dictWord{135, 11, 1345}, + dictWord{5, 0, 308}, + dictWord{7, 0, 1088}, + dictWord{4, 10, 520}, + dictWord{ + 135, + 10, + 575, + }, + dictWord{133, 11, 589}, + dictWord{5, 0, 126}, + dictWord{8, 0, 297}, + dictWord{9, 0, 366}, + dictWord{140, 0, 374}, + dictWord{7, 0, 1551}, + dictWord{ + 139, + 0, + 361, + }, + dictWord{5, 11, 117}, + dictWord{6, 11, 514}, + dictWord{6, 11, 541}, + dictWord{7, 11, 1164}, + dictWord{7, 11, 1436}, + dictWord{8, 11, 220}, + dictWord{ + 8, + 11, + 648, + }, + dictWord{10, 11, 688}, + dictWord{139, 11, 560}, + dictWord{133, 11, 686}, + dictWord{4, 0, 946}, + dictWord{6, 0, 1807}, + dictWord{8, 0, 871}, + dictWord{ + 10, + 0, + 854, + }, + dictWord{10, 0, 870}, + dictWord{10, 0, 888}, + dictWord{10, 0, 897}, + dictWord{10, 0, 920}, + dictWord{12, 0, 722}, + dictWord{12, 0, 761}, + dictWord{ + 12, + 0, + 763, + }, + dictWord{12, 0, 764}, + dictWord{14, 0, 454}, + dictWord{14, 0, 465}, + dictWord{16, 0, 107}, + dictWord{18, 0, 167}, + dictWord{18, 0, 168}, + dictWord{ + 146, + 0, + 172, + }, + dictWord{132, 0, 175}, + dictWord{135, 0, 1307}, + dictWord{132, 0, 685}, + dictWord{135, 11, 1834}, + dictWord{133, 0, 797}, + dictWord{6, 0, 745}, + dictWord{ + 6, + 0, + 858, + }, + dictWord{134, 0, 963}, + dictWord{133, 0, 565}, + dictWord{5, 10, 397}, + dictWord{6, 10, 154}, + dictWord{7, 11, 196}, + dictWord{7, 10, 676}, + dictWord{ + 8, + 10, + 443, + }, + dictWord{8, 10, 609}, + dictWord{9, 10, 24}, + dictWord{9, 10, 325}, + dictWord{10, 10, 35}, + dictWord{10, 11, 765}, + dictWord{11, 11, 347}, + dictWord{ + 11, + 10, + 535, + }, + dictWord{11, 11, 552}, + dictWord{11, 11, 576}, + dictWord{11, 10, 672}, + dictWord{11, 11, 790}, + dictWord{11, 10, 1018}, + dictWord{12, 11, 263}, + dictWord{12, 10, 637}, + dictWord{13, 11, 246}, + dictWord{13, 11, 270}, + dictWord{13, 11, 395}, + dictWord{14, 11, 74}, + dictWord{14, 11, 176}, + dictWord{ + 14, + 11, + 190, + }, + dictWord{14, 11, 398}, + dictWord{14, 11, 412}, + dictWord{15, 11, 32}, + dictWord{15, 11, 63}, + dictWord{16, 10, 30}, + dictWord{16, 11, 88}, + dictWord{ + 147, + 11, + 105, + }, + dictWord{13, 11, 84}, + dictWord{141, 11, 122}, + dictWord{4, 0, 252}, + dictWord{7, 0, 1068}, + dictWord{10, 0, 434}, + dictWord{11, 0, 228}, + dictWord{ + 11, + 0, + 426, + }, + dictWord{13, 0, 231}, + dictWord{18, 0, 106}, + dictWord{148, 0, 87}, + dictWord{137, 0, 826}, + dictWord{4, 11, 589}, + dictWord{139, 11, 282}, + dictWord{ + 5, + 11, + 381, + }, + dictWord{135, 11, 1792}, + dictWord{132, 0, 791}, + dictWord{5, 0, 231}, + dictWord{10, 0, 509}, + dictWord{133, 10, 981}, + dictWord{7, 0, 601}, + dictWord{ + 9, + 0, + 277, + }, + dictWord{9, 0, 674}, + dictWord{10, 0, 178}, + dictWord{10, 0, 418}, + dictWord{10, 0, 571}, + dictWord{11, 0, 531}, + dictWord{12, 0, 113}, + dictWord{12, 0, 475}, + dictWord{13, 0, 99}, + dictWord{142, 0, 428}, + dictWord{4, 10, 56}, + dictWord{7, 11, 616}, + dictWord{7, 10, 1791}, + dictWord{8, 10, 607}, + dictWord{8, 10, 651}, + dictWord{10, 11, 413}, + dictWord{11, 10, 465}, + dictWord{11, 10, 835}, + dictWord{12, 10, 337}, + dictWord{141, 10, 480}, + dictWord{7, 0, 1591}, + dictWord{144, 0, 43}, + dictWord{9, 10, 158}, + dictWord{138, 10, 411}, + dictWord{135, 0, 1683}, + dictWord{8, 0, 289}, + dictWord{11, 0, 45}, + dictWord{12, 0, 278}, + dictWord{140, 0, 537}, + dictWord{6, 11, 120}, + dictWord{7, 11, 1188}, + dictWord{7, 11, 1710}, + dictWord{8, 11, 286}, + dictWord{9, 11, 667}, + dictWord{11, 11, 592}, + dictWord{ + 139, + 11, + 730, + }, + dictWord{136, 10, 617}, + dictWord{135, 0, 1120}, + dictWord{135, 11, 1146}, + dictWord{139, 10, 563}, + dictWord{4, 11, 352}, + dictWord{4, 10, 369}, + dictWord{135, 11, 687}, + dictWord{143, 11, 38}, + dictWord{4, 0, 399}, + dictWord{5, 0, 119}, + dictWord{5, 0, 494}, + dictWord{7, 0, 751}, + dictWord{9, 0, 556}, + dictWord{ + 14, + 11, + 179, + }, + dictWord{15, 11, 151}, + dictWord{150, 11, 11}, + dictWord{4, 11, 192}, + dictWord{5, 11, 49}, + dictWord{6, 11, 200}, + dictWord{6, 11, 293}, + dictWord{ + 6, + 11, + 1696, + }, + dictWord{135, 11, 488}, + dictWord{4, 0, 398}, + dictWord{133, 0, 660}, + dictWord{7, 0, 1030}, + dictWord{134, 10, 622}, + dictWord{135, 11, 595}, + dictWord{141, 0, 168}, + dictWord{132, 11, 147}, + dictWord{7, 0, 973}, + dictWord{10, 10, 624}, + dictWord{142, 10, 279}, + dictWord{132, 10, 363}, + dictWord{ + 132, + 0, + 642, + }, + dictWord{133, 11, 934}, + dictWord{134, 0, 1615}, + dictWord{7, 11, 505}, + dictWord{135, 11, 523}, + dictWord{7, 0, 594}, + dictWord{7, 0, 851}, + dictWord{ + 7, + 0, + 1858, + }, + dictWord{9, 0, 411}, + dictWord{9, 0, 574}, + dictWord{9, 0, 666}, + dictWord{9, 0, 737}, + dictWord{10, 0, 346}, + dictWord{10, 0, 712}, + dictWord{11, 0, 246}, + dictWord{11, 0, 432}, + dictWord{11, 0, 517}, + dictWord{11, 0, 647}, + dictWord{11, 0, 679}, + dictWord{11, 0, 727}, + dictWord{12, 0, 304}, + dictWord{12, 0, 305}, + dictWord{ + 12, + 0, + 323, + }, + dictWord{12, 0, 483}, + dictWord{12, 0, 572}, + dictWord{12, 0, 593}, + dictWord{12, 0, 602}, + dictWord{13, 0, 95}, + dictWord{13, 0, 101}, + dictWord{ + 13, + 0, + 171, + }, + dictWord{13, 0, 315}, + dictWord{13, 0, 378}, + dictWord{13, 0, 425}, + dictWord{13, 0, 475}, + dictWord{14, 0, 63}, + dictWord{14, 0, 380}, + dictWord{14, 0, 384}, + dictWord{15, 0, 133}, + dictWord{18, 0, 112}, + dictWord{148, 0, 72}, + dictWord{135, 0, 1093}, + dictWord{132, 0, 679}, + dictWord{8, 0, 913}, + dictWord{10, 0, 903}, + dictWord{10, 0, 915}, + dictWord{12, 0, 648}, + dictWord{12, 0, 649}, + dictWord{14, 0, 455}, + dictWord{16, 0, 112}, + dictWord{138, 11, 438}, + dictWord{137, 0, 203}, + dictWord{134, 10, 292}, + dictWord{134, 0, 1492}, + dictWord{7, 0, 1374}, + dictWord{8, 0, 540}, + dictWord{5, 10, 177}, + dictWord{6, 10, 616}, + dictWord{7, 10, 827}, + dictWord{9, 10, 525}, + dictWord{138, 10, 656}, + dictWord{135, 0, 1486}, + dictWord{9, 0, 714}, + dictWord{138, 10, 31}, + dictWord{136, 0, 825}, + dictWord{ + 134, + 0, + 1511, + }, + dictWord{132, 11, 637}, + dictWord{134, 0, 952}, + dictWord{4, 10, 161}, + dictWord{133, 10, 631}, + dictWord{5, 0, 143}, + dictWord{5, 0, 769}, + dictWord{ + 6, + 0, + 1760, + }, + dictWord{7, 0, 682}, + dictWord{7, 0, 1992}, + dictWord{136, 0, 736}, + dictWord{132, 0, 700}, + dictWord{134, 0, 1540}, + dictWord{132, 11, 777}, + dictWord{ + 9, + 11, + 867, + }, + dictWord{138, 11, 837}, + dictWord{7, 0, 1557}, + dictWord{135, 10, 1684}, + dictWord{133, 0, 860}, + dictWord{6, 0, 422}, + dictWord{7, 0, 0}, + dictWord{ + 7, + 0, + 1544, + }, + dictWord{9, 0, 605}, + dictWord{11, 0, 990}, + dictWord{12, 0, 235}, + dictWord{12, 0, 453}, + dictWord{13, 0, 47}, + dictWord{13, 0, 266}, + dictWord{9, 10, 469}, + dictWord{9, 10, 709}, + dictWord{12, 10, 512}, + dictWord{14, 10, 65}, + dictWord{145, 10, 12}, + dictWord{11, 0, 807}, + dictWord{10, 10, 229}, + dictWord{11, 10, 73}, + dictWord{139, 10, 376}, + dictWord{6, 11, 170}, + dictWord{7, 11, 1080}, + dictWord{8, 11, 395}, + dictWord{8, 11, 487}, + dictWord{11, 11, 125}, + dictWord{ + 141, + 11, + 147, + }, + dictWord{5, 0, 515}, + dictWord{137, 0, 131}, + dictWord{7, 0, 1605}, + dictWord{11, 0, 962}, + dictWord{146, 0, 139}, + dictWord{132, 0, 646}, + dictWord{ + 4, + 0, + 396, + }, + dictWord{7, 0, 728}, + dictWord{9, 0, 117}, + dictWord{13, 0, 202}, + dictWord{148, 0, 51}, + dictWord{6, 0, 121}, + dictWord{6, 0, 124}, + dictWord{6, 0, 357}, + dictWord{ + 7, + 0, + 1138, + }, + dictWord{7, 0, 1295}, + dictWord{8, 0, 162}, + dictWord{8, 0, 508}, + dictWord{11, 0, 655}, + dictWord{4, 11, 535}, + dictWord{6, 10, 558}, + dictWord{ + 7, + 10, + 651, + }, + dictWord{8, 11, 618}, + dictWord{9, 10, 0}, + dictWord{10, 10, 34}, + dictWord{139, 10, 1008}, + dictWord{135, 11, 1245}, + dictWord{138, 0, 357}, + dictWord{ + 150, + 11, + 23, + }, + dictWord{133, 0, 237}, + dictWord{135, 0, 1784}, + dictWord{7, 10, 1832}, + dictWord{138, 10, 374}, + dictWord{132, 0, 713}, + dictWord{132, 11, 46}, + dictWord{6, 0, 1536}, + dictWord{10, 0, 348}, + dictWord{5, 11, 811}, + dictWord{6, 11, 1679}, + dictWord{6, 11, 1714}, + dictWord{135, 11, 2032}, + dictWord{ + 11, + 11, + 182, + }, + dictWord{142, 11, 195}, + dictWord{6, 0, 523}, + dictWord{7, 0, 738}, + dictWord{7, 10, 771}, + dictWord{7, 10, 1731}, + dictWord{9, 10, 405}, + dictWord{ + 138, + 10, + 421, + }, + dictWord{7, 11, 1458}, + dictWord{9, 11, 407}, + dictWord{139, 11, 15}, + dictWord{6, 11, 34}, + dictWord{7, 11, 69}, + dictWord{7, 11, 640}, + dictWord{ + 7, + 11, + 1089, + }, + dictWord{8, 11, 708}, + dictWord{8, 11, 721}, + dictWord{9, 11, 363}, + dictWord{9, 11, 643}, + dictWord{10, 11, 628}, + dictWord{148, 11, 98}, + dictWord{ + 133, + 0, + 434, + }, + dictWord{135, 0, 1877}, + dictWord{7, 0, 571}, + dictWord{138, 0, 366}, + dictWord{5, 10, 881}, + dictWord{133, 10, 885}, + dictWord{9, 0, 513}, + dictWord{ + 10, + 0, + 25, + }, + dictWord{10, 0, 39}, + dictWord{12, 0, 122}, + dictWord{140, 0, 187}, + dictWord{132, 0, 580}, + dictWord{5, 10, 142}, + dictWord{134, 10, 546}, + dictWord{ + 132, + 11, + 462, + }, + dictWord{137, 0, 873}, + dictWord{5, 10, 466}, + dictWord{11, 10, 571}, + dictWord{12, 10, 198}, + dictWord{13, 10, 283}, + dictWord{14, 10, 186}, + dictWord{15, 10, 21}, + dictWord{143, 10, 103}, + dictWord{7, 0, 171}, + dictWord{4, 10, 185}, + dictWord{5, 10, 257}, + dictWord{5, 10, 839}, + dictWord{5, 10, 936}, + dictWord{ + 9, + 10, + 399, + }, + dictWord{10, 10, 258}, + dictWord{10, 10, 395}, + dictWord{10, 10, 734}, + dictWord{11, 10, 1014}, + dictWord{12, 10, 23}, + dictWord{13, 10, 350}, + dictWord{14, 10, 150}, + dictWord{147, 10, 6}, + dictWord{134, 0, 625}, + dictWord{7, 0, 107}, + dictWord{7, 0, 838}, + dictWord{8, 0, 550}, + dictWord{138, 0, 401}, + dictWord{ + 5, + 11, + 73, + }, + dictWord{6, 11, 23}, + dictWord{134, 11, 338}, + dictWord{4, 0, 943}, + dictWord{6, 0, 1850}, + dictWord{12, 0, 713}, + dictWord{142, 0, 434}, + dictWord{ + 11, + 0, + 588, + }, + dictWord{11, 0, 864}, + dictWord{11, 0, 936}, + dictWord{11, 0, 968}, + dictWord{12, 0, 73}, + dictWord{12, 0, 343}, + dictWord{12, 0, 394}, + dictWord{13, 0, 275}, + dictWord{14, 0, 257}, + dictWord{15, 0, 160}, + dictWord{7, 10, 404}, + dictWord{7, 10, 1377}, + dictWord{7, 10, 1430}, + dictWord{7, 10, 2017}, + dictWord{8, 10, 149}, + dictWord{8, 10, 239}, + dictWord{8, 10, 512}, + dictWord{8, 10, 793}, + dictWord{8, 10, 818}, + dictWord{9, 10, 474}, + dictWord{9, 10, 595}, + dictWord{10, 10, 122}, + dictWord{10, 10, 565}, + dictWord{10, 10, 649}, + dictWord{10, 10, 783}, + dictWord{11, 10, 239}, + dictWord{11, 10, 295}, + dictWord{11, 10, 447}, + dictWord{ + 11, + 10, + 528, + }, + dictWord{11, 10, 639}, + dictWord{11, 10, 800}, + dictWord{12, 10, 25}, + dictWord{12, 10, 157}, + dictWord{12, 10, 316}, + dictWord{12, 10, 390}, + dictWord{ + 12, + 10, + 391, + }, + dictWord{12, 10, 395}, + dictWord{12, 10, 478}, + dictWord{12, 10, 503}, + dictWord{12, 10, 592}, + dictWord{12, 10, 680}, + dictWord{13, 10, 50}, + dictWord{13, 10, 53}, + dictWord{13, 10, 132}, + dictWord{13, 10, 198}, + dictWord{13, 10, 322}, + dictWord{13, 10, 415}, + dictWord{13, 10, 511}, + dictWord{14, 10, 71}, + dictWord{14, 10, 395}, + dictWord{15, 10, 71}, + dictWord{15, 10, 136}, + dictWord{17, 10, 123}, + dictWord{18, 10, 93}, + dictWord{147, 10, 58}, + dictWord{ + 133, + 0, + 768, + }, + dictWord{11, 0, 103}, + dictWord{142, 0, 0}, + dictWord{136, 10, 712}, + dictWord{132, 0, 799}, + dictWord{132, 0, 894}, + dictWord{7, 11, 725}, + dictWord{ + 8, + 11, + 498, + }, + dictWord{139, 11, 268}, + dictWord{135, 11, 1798}, + dictWord{135, 11, 773}, + dictWord{141, 11, 360}, + dictWord{4, 10, 377}, + dictWord{152, 10, 13}, + dictWord{135, 0, 1673}, + dictWord{132, 11, 583}, + dictWord{134, 0, 1052}, + dictWord{133, 11, 220}, + dictWord{140, 11, 69}, + dictWord{132, 11, 544}, + dictWord{ + 4, + 10, + 180, + }, + dictWord{135, 10, 1906}, + dictWord{134, 0, 272}, + dictWord{4, 0, 441}, + dictWord{134, 0, 1421}, + dictWord{4, 0, 9}, + dictWord{5, 0, 128}, + dictWord{ + 7, + 0, + 368, + }, + dictWord{11, 0, 480}, + dictWord{148, 0, 3}, + dictWord{5, 11, 176}, + dictWord{6, 11, 437}, + dictWord{6, 11, 564}, + dictWord{11, 11, 181}, + dictWord{ + 141, + 11, + 183, + }, + dictWord{132, 10, 491}, + dictWord{7, 0, 1182}, + dictWord{141, 11, 67}, + dictWord{6, 0, 1346}, + dictWord{4, 10, 171}, + dictWord{138, 10, 234}, + dictWord{ + 4, + 10, + 586, + }, + dictWord{7, 10, 1186}, + dictWord{138, 10, 631}, + dictWord{136, 0, 682}, + dictWord{134, 0, 1004}, + dictWord{15, 0, 24}, + dictWord{143, 11, 24}, + dictWord{134, 0, 968}, + dictWord{4, 0, 2}, + dictWord{6, 0, 742}, + dictWord{6, 0, 793}, + dictWord{7, 0, 545}, + dictWord{7, 0, 894}, + dictWord{9, 10, 931}, + dictWord{ + 10, + 10, + 334, + }, + dictWord{148, 10, 71}, + dictWord{136, 11, 600}, + dictWord{133, 10, 765}, + dictWord{9, 0, 769}, + dictWord{140, 0, 185}, + dictWord{4, 11, 790}, + dictWord{ + 5, + 11, + 273, + }, + dictWord{134, 11, 394}, + dictWord{7, 0, 474}, + dictWord{137, 0, 578}, + dictWord{4, 11, 135}, + dictWord{6, 11, 127}, + dictWord{7, 11, 1185}, + dictWord{ + 7, + 11, + 1511, + }, + dictWord{8, 11, 613}, + dictWord{11, 11, 5}, + dictWord{12, 11, 133}, + dictWord{12, 11, 495}, + dictWord{12, 11, 586}, + dictWord{14, 11, 385}, + dictWord{15, 11, 118}, + dictWord{17, 11, 20}, + dictWord{146, 11, 98}, + dictWord{133, 10, 424}, + dictWord{5, 0, 530}, + dictWord{142, 0, 113}, + dictWord{6, 11, 230}, + dictWord{7, 11, 961}, + dictWord{7, 11, 1085}, + dictWord{136, 11, 462}, + dictWord{7, 11, 1954}, + dictWord{137, 11, 636}, + dictWord{136, 10, 714}, + dictWord{ + 149, + 11, + 6, + }, + dictWord{135, 10, 685}, + dictWord{9, 10, 420}, + dictWord{10, 10, 269}, + dictWord{10, 10, 285}, + dictWord{10, 10, 576}, + dictWord{11, 10, 397}, + dictWord{13, 10, 175}, + dictWord{145, 10, 90}, + dictWord{132, 10, 429}, + dictWord{5, 0, 556}, + dictWord{5, 11, 162}, + dictWord{136, 11, 68}, + dictWord{132, 11, 654}, + dictWord{4, 11, 156}, + dictWord{7, 11, 998}, + dictWord{7, 11, 1045}, + dictWord{7, 11, 1860}, + dictWord{9, 11, 48}, + dictWord{9, 11, 692}, + dictWord{11, 11, 419}, + dictWord{139, 11, 602}, + dictWord{6, 0, 1317}, + dictWord{8, 0, 16}, + dictWord{9, 0, 825}, + dictWord{12, 0, 568}, + dictWord{7, 11, 1276}, + dictWord{8, 11, 474}, + dictWord{137, 11, 652}, + dictWord{18, 0, 97}, + dictWord{7, 10, 18}, + dictWord{7, 10, 699}, + dictWord{7, 10, 1966}, + dictWord{8, 10, 752}, + dictWord{9, 10, 273}, + dictWord{ + 9, + 10, + 412, + }, + dictWord{9, 10, 703}, + dictWord{10, 10, 71}, + dictWord{10, 10, 427}, + dictWord{138, 10, 508}, + dictWord{10, 0, 703}, + dictWord{7, 11, 1454}, + dictWord{138, 11, 703}, + dictWord{4, 10, 53}, + dictWord{5, 10, 186}, + dictWord{135, 10, 752}, + dictWord{134, 0, 892}, + dictWord{134, 0, 1571}, + dictWord{8, 10, 575}, + dictWord{10, 10, 289}, + dictWord{139, 10, 319}, + dictWord{6, 0, 186}, + dictWord{137, 0, 426}, + dictWord{134, 0, 1101}, + dictWord{132, 10, 675}, + dictWord{ + 132, + 0, + 585, + }, + dictWord{6, 0, 1870}, + dictWord{137, 0, 937}, + dictWord{152, 11, 10}, + dictWord{9, 11, 197}, + dictWord{10, 11, 300}, + dictWord{12, 11, 473}, + dictWord{ + 13, + 11, + 90, + }, + dictWord{141, 11, 405}, + dictWord{4, 0, 93}, + dictWord{5, 0, 252}, + dictWord{6, 0, 229}, + dictWord{7, 0, 291}, + dictWord{9, 0, 550}, + dictWord{139, 0, 644}, + dictWord{137, 0, 749}, + dictWord{9, 0, 162}, + dictWord{6, 10, 209}, + dictWord{8, 10, 468}, + dictWord{9, 10, 210}, + dictWord{11, 10, 36}, + dictWord{12, 10, 28}, + dictWord{12, 10, 630}, + dictWord{13, 10, 21}, + dictWord{13, 10, 349}, + dictWord{14, 10, 7}, + dictWord{145, 10, 13}, + dictWord{132, 0, 381}, + dictWord{132, 11, 606}, + dictWord{4, 10, 342}, + dictWord{135, 10, 1179}, + dictWord{7, 11, 1587}, + dictWord{7, 11, 1707}, + dictWord{10, 11, 528}, + dictWord{139, 11, 504}, + dictWord{ + 12, + 11, + 39, + }, + dictWord{13, 11, 265}, + dictWord{141, 11, 439}, + dictWord{4, 10, 928}, + dictWord{133, 10, 910}, + dictWord{7, 10, 1838}, + dictWord{7, 11, 1978}, + dictWord{136, 11, 676}, + dictWord{6, 0, 762}, + dictWord{6, 0, 796}, + dictWord{134, 0, 956}, + dictWord{4, 10, 318}, + dictWord{4, 10, 496}, + dictWord{7, 10, 856}, + dictWord{139, 10, 654}, + dictWord{137, 11, 242}, + dictWord{4, 11, 361}, + dictWord{133, 11, 315}, + dictWord{132, 11, 461}, + dictWord{132, 11, 472}, + dictWord{ + 132, + 0, + 857, + }, + dictWord{5, 0, 21}, + dictWord{6, 0, 77}, + dictWord{6, 0, 157}, + dictWord{7, 0, 974}, + dictWord{7, 0, 1301}, + dictWord{7, 0, 1339}, + dictWord{7, 0, 1490}, + dictWord{ + 7, + 0, + 1873, + }, + dictWord{9, 0, 628}, + dictWord{7, 10, 915}, + dictWord{8, 10, 247}, + dictWord{147, 10, 0}, + dictWord{4, 10, 202}, + dictWord{5, 10, 382}, + dictWord{ + 6, + 10, + 454, + }, + dictWord{7, 10, 936}, + dictWord{7, 10, 1803}, + dictWord{8, 10, 758}, + dictWord{9, 10, 375}, + dictWord{9, 10, 895}, + dictWord{10, 10, 743}, + dictWord{ + 10, + 10, + 792, + }, + dictWord{11, 10, 978}, + dictWord{11, 10, 1012}, + dictWord{142, 10, 109}, + dictWord{7, 11, 617}, + dictWord{10, 11, 498}, + dictWord{11, 11, 501}, + dictWord{12, 11, 16}, + dictWord{140, 11, 150}, + dictWord{7, 10, 1150}, + dictWord{7, 10, 1425}, + dictWord{7, 10, 1453}, + dictWord{10, 11, 747}, + dictWord{ + 140, + 10, + 513, + }, + dictWord{133, 11, 155}, + dictWord{11, 0, 919}, + dictWord{141, 0, 409}, + dictWord{138, 10, 791}, + dictWord{10, 0, 633}, + dictWord{139, 11, 729}, + dictWord{ + 7, + 11, + 163, + }, + dictWord{8, 11, 319}, + dictWord{9, 11, 402}, + dictWord{10, 11, 24}, + dictWord{10, 11, 681}, + dictWord{11, 11, 200}, + dictWord{11, 11, 567}, + dictWord{12, 11, 253}, + dictWord{12, 11, 410}, + dictWord{142, 11, 219}, + dictWord{5, 11, 475}, + dictWord{7, 11, 1780}, + dictWord{9, 11, 230}, + dictWord{11, 11, 297}, + dictWord{11, 11, 558}, + dictWord{14, 11, 322}, + dictWord{147, 11, 76}, + dictWord{7, 0, 332}, + dictWord{6, 10, 445}, + dictWord{137, 10, 909}, + dictWord{ + 135, + 11, + 1956, + }, + dictWord{136, 11, 274}, + dictWord{134, 10, 578}, + dictWord{135, 0, 1489}, + dictWord{135, 11, 1848}, + dictWord{5, 11, 944}, + dictWord{ + 134, + 11, + 1769, + }, + dictWord{132, 11, 144}, + dictWord{136, 10, 766}, + dictWord{4, 0, 832}, + dictWord{135, 10, 541}, + dictWord{8, 0, 398}, + dictWord{9, 0, 681}, + dictWord{ + 139, + 0, + 632, + }, + dictWord{136, 0, 645}, + dictWord{9, 0, 791}, + dictWord{10, 0, 93}, + dictWord{16, 0, 13}, + dictWord{17, 0, 23}, + dictWord{18, 0, 135}, + dictWord{19, 0, 12}, + dictWord{20, 0, 1}, + dictWord{20, 0, 12}, + dictWord{148, 0, 14}, + dictWord{6, 11, 247}, + dictWord{137, 11, 555}, + dictWord{134, 0, 20}, + dictWord{132, 0, 800}, + dictWord{135, 0, 1841}, + dictWord{139, 10, 983}, + dictWord{137, 10, 768}, + dictWord{132, 10, 584}, + dictWord{141, 11, 51}, + dictWord{6, 0, 1993}, + dictWord{ + 4, + 11, + 620, + }, + dictWord{138, 11, 280}, + dictWord{136, 0, 769}, + dictWord{11, 0, 290}, + dictWord{11, 0, 665}, + dictWord{7, 11, 1810}, + dictWord{11, 11, 866}, + dictWord{ + 12, + 11, + 103, + }, + dictWord{13, 11, 495}, + dictWord{17, 11, 67}, + dictWord{147, 11, 74}, + dictWord{134, 0, 1426}, + dictWord{139, 0, 60}, + dictWord{4, 10, 326}, + dictWord{135, 10, 1770}, + dictWord{7, 0, 1874}, + dictWord{9, 0, 641}, + dictWord{132, 10, 226}, + dictWord{6, 0, 644}, + dictWord{5, 10, 426}, + dictWord{8, 10, 30}, + dictWord{ + 9, + 10, + 2, + }, + dictWord{11, 10, 549}, + dictWord{147, 10, 122}, + dictWord{5, 11, 428}, + dictWord{138, 11, 442}, + dictWord{135, 11, 1871}, + dictWord{ + 135, + 0, + 1757, + }, + dictWord{147, 10, 117}, + dictWord{135, 0, 937}, + dictWord{135, 0, 1652}, + dictWord{6, 0, 654}, + dictWord{134, 0, 1476}, + dictWord{133, 11, 99}, + dictWord{135, 0, 527}, + dictWord{132, 10, 345}, + dictWord{4, 10, 385}, + dictWord{4, 11, 397}, + dictWord{7, 10, 265}, + dictWord{135, 10, 587}, + dictWord{4, 0, 579}, + dictWord{5, 0, 226}, + dictWord{5, 0, 323}, + dictWord{135, 0, 960}, + dictWord{134, 0, 1486}, + dictWord{8, 11, 502}, + dictWord{144, 11, 9}, + dictWord{4, 10, 347}, + dictWord{ + 5, + 10, + 423, + }, + dictWord{5, 10, 996}, + dictWord{135, 10, 1329}, + dictWord{7, 11, 727}, + dictWord{146, 11, 73}, + dictWord{4, 11, 485}, + dictWord{7, 11, 353}, + dictWord{7, 10, 1259}, + dictWord{7, 11, 1523}, + dictWord{9, 10, 125}, + dictWord{139, 10, 65}, + dictWord{6, 0, 325}, + dictWord{5, 10, 136}, + dictWord{6, 11, 366}, + dictWord{ + 7, + 11, + 1384, + }, + dictWord{7, 11, 1601}, + dictWord{136, 10, 644}, + dictWord{138, 11, 160}, + dictWord{6, 0, 1345}, + dictWord{137, 11, 282}, + dictWord{18, 0, 91}, + dictWord{147, 0, 70}, + dictWord{136, 0, 404}, + dictWord{4, 11, 157}, + dictWord{133, 11, 471}, + dictWord{133, 0, 973}, + dictWord{6, 0, 135}, + dictWord{ + 135, + 0, + 1176, + }, + dictWord{8, 11, 116}, + dictWord{11, 11, 551}, + dictWord{142, 11, 159}, + dictWord{4, 0, 549}, + dictWord{4, 10, 433}, + dictWord{133, 10, 719}, + dictWord{ + 136, + 0, + 976, + }, + dictWord{5, 11, 160}, + dictWord{7, 11, 363}, + dictWord{7, 11, 589}, + dictWord{10, 11, 170}, + dictWord{141, 11, 55}, + dictWord{144, 0, 21}, + dictWord{ + 144, + 0, + 51, + }, + dictWord{135, 0, 314}, + dictWord{135, 10, 1363}, + dictWord{4, 11, 108}, + dictWord{7, 11, 405}, + dictWord{10, 11, 491}, + dictWord{139, 11, 498}, + dictWord{146, 0, 4}, + dictWord{4, 10, 555}, + dictWord{8, 10, 536}, + dictWord{10, 10, 288}, + dictWord{139, 10, 1005}, + dictWord{135, 11, 1005}, + dictWord{6, 0, 281}, + dictWord{7, 0, 6}, + dictWord{8, 0, 282}, + dictWord{8, 0, 480}, + dictWord{8, 0, 499}, + dictWord{9, 0, 198}, + dictWord{10, 0, 143}, + dictWord{10, 0, 169}, + dictWord{ + 10, + 0, + 211, + }, + dictWord{10, 0, 417}, + dictWord{10, 0, 574}, + dictWord{11, 0, 147}, + dictWord{11, 0, 395}, + dictWord{12, 0, 75}, + dictWord{12, 0, 407}, + dictWord{12, 0, 608}, + dictWord{13, 0, 500}, + dictWord{142, 0, 251}, + dictWord{6, 0, 1093}, + dictWord{6, 0, 1405}, + dictWord{9, 10, 370}, + dictWord{138, 10, 90}, + dictWord{4, 11, 926}, + dictWord{133, 11, 983}, + dictWord{135, 0, 1776}, + dictWord{134, 0, 1528}, + dictWord{132, 0, 419}, + dictWord{132, 11, 538}, + dictWord{6, 11, 294}, + dictWord{ + 7, + 11, + 1267, + }, + dictWord{136, 11, 624}, + dictWord{135, 11, 1772}, + dictWord{138, 11, 301}, + dictWord{4, 10, 257}, + dictWord{135, 10, 2031}, + dictWord{4, 0, 138}, + dictWord{7, 0, 1012}, + dictWord{7, 0, 1280}, + dictWord{9, 0, 76}, + dictWord{135, 10, 1768}, + dictWord{132, 11, 757}, + dictWord{5, 0, 29}, + dictWord{140, 0, 638}, + dictWord{7, 11, 655}, + dictWord{135, 11, 1844}, + dictWord{7, 0, 1418}, + dictWord{6, 11, 257}, + dictWord{135, 11, 1522}, + dictWord{8, 11, 469}, + dictWord{ + 138, + 11, + 47, + }, + dictWord{142, 11, 278}, + dictWord{6, 10, 83}, + dictWord{6, 10, 1733}, + dictWord{135, 10, 1389}, + dictWord{11, 11, 204}, + dictWord{11, 11, 243}, + dictWord{140, 11, 293}, + dictWord{135, 11, 1875}, + dictWord{6, 0, 1710}, + dictWord{135, 0, 2038}, + dictWord{137, 11, 299}, + dictWord{4, 0, 17}, + dictWord{5, 0, 23}, + dictWord{7, 0, 995}, + dictWord{11, 0, 383}, + dictWord{11, 0, 437}, + dictWord{12, 0, 460}, + dictWord{140, 0, 532}, + dictWord{133, 0, 862}, + dictWord{137, 10, 696}, + dictWord{6, 0, 592}, + dictWord{138, 0, 946}, + dictWord{138, 11, 599}, + dictWord{7, 10, 1718}, + dictWord{9, 10, 95}, + dictWord{9, 10, 274}, + dictWord{10, 10, 279}, + dictWord{10, 10, 317}, + dictWord{10, 10, 420}, + dictWord{11, 10, 303}, + dictWord{11, 10, 808}, + dictWord{12, 10, 134}, + dictWord{12, 10, 367}, + dictWord{ + 13, + 10, + 149, + }, + dictWord{13, 10, 347}, + dictWord{14, 10, 349}, + dictWord{14, 10, 406}, + dictWord{18, 10, 22}, + dictWord{18, 10, 89}, + dictWord{18, 10, 122}, + dictWord{ + 147, + 10, + 47, + }, + dictWord{8, 0, 70}, + dictWord{12, 0, 171}, + dictWord{141, 0, 272}, + dictWord{133, 10, 26}, + dictWord{132, 10, 550}, + dictWord{137, 0, 812}, + dictWord{ + 10, + 0, + 233, + }, + dictWord{139, 0, 76}, + dictWord{134, 0, 988}, + dictWord{134, 0, 442}, + dictWord{136, 10, 822}, + dictWord{7, 0, 896}, + dictWord{4, 10, 902}, + dictWord{ + 5, + 10, + 809, + }, + dictWord{134, 10, 122}, + dictWord{5, 11, 150}, + dictWord{7, 11, 106}, + dictWord{8, 11, 603}, + dictWord{9, 11, 593}, + dictWord{9, 11, 634}, + dictWord{ + 10, + 11, + 44, + }, + dictWord{10, 11, 173}, + dictWord{11, 11, 462}, + dictWord{11, 11, 515}, + dictWord{13, 11, 216}, + dictWord{13, 11, 288}, + dictWord{142, 11, 400}, + dictWord{136, 0, 483}, + dictWord{135, 10, 262}, + dictWord{6, 0, 1709}, + dictWord{133, 10, 620}, + dictWord{4, 10, 34}, + dictWord{5, 10, 574}, + dictWord{7, 10, 279}, + dictWord{7, 10, 1624}, + dictWord{136, 10, 601}, + dictWord{137, 10, 170}, + dictWord{147, 0, 119}, + dictWord{12, 11, 108}, + dictWord{141, 11, 291}, + dictWord{ + 11, + 0, + 69, + }, + dictWord{12, 0, 105}, + dictWord{12, 0, 117}, + dictWord{13, 0, 213}, + dictWord{14, 0, 13}, + dictWord{14, 0, 62}, + dictWord{14, 0, 177}, + dictWord{14, 0, 421}, + dictWord{15, 0, 19}, + dictWord{146, 0, 141}, + dictWord{137, 0, 309}, + dictWord{11, 11, 278}, + dictWord{142, 11, 73}, + dictWord{7, 0, 608}, + dictWord{7, 0, 976}, + dictWord{9, 0, 146}, + dictWord{10, 0, 206}, + dictWord{10, 0, 596}, + dictWord{13, 0, 218}, + dictWord{142, 0, 153}, + dictWord{133, 10, 332}, + dictWord{6, 10, 261}, + dictWord{ + 8, + 10, + 182, + }, + dictWord{139, 10, 943}, + dictWord{4, 11, 493}, + dictWord{144, 11, 55}, + dictWord{134, 10, 1721}, + dictWord{132, 0, 768}, + dictWord{4, 10, 933}, + dictWord{133, 10, 880}, + dictWord{7, 11, 555}, + dictWord{7, 11, 1316}, + dictWord{7, 11, 1412}, + dictWord{7, 11, 1839}, + dictWord{9, 11, 192}, + dictWord{ + 9, + 11, + 589, + }, + dictWord{11, 11, 241}, + dictWord{11, 11, 676}, + dictWord{11, 11, 811}, + dictWord{11, 11, 891}, + dictWord{12, 11, 140}, + dictWord{12, 11, 346}, + dictWord{ + 12, + 11, + 479, + }, + dictWord{13, 11, 30}, + dictWord{13, 11, 49}, + dictWord{13, 11, 381}, + dictWord{14, 11, 188}, + dictWord{15, 11, 150}, + dictWord{16, 11, 76}, + dictWord{18, 11, 30}, + dictWord{148, 11, 52}, + dictWord{4, 0, 518}, + dictWord{135, 0, 1136}, + dictWord{6, 11, 568}, + dictWord{7, 11, 112}, + dictWord{7, 11, 1804}, + dictWord{8, 11, 362}, + dictWord{8, 11, 410}, + dictWord{8, 11, 830}, + dictWord{9, 11, 514}, + dictWord{11, 11, 649}, + dictWord{142, 11, 157}, + dictWord{135, 11, 673}, + dictWord{8, 0, 689}, + dictWord{137, 0, 863}, + dictWord{4, 0, 18}, + dictWord{7, 0, 145}, + dictWord{7, 0, 444}, + dictWord{7, 0, 1278}, + dictWord{8, 0, 49}, + dictWord{8, 0, 400}, + dictWord{9, 0, 71}, + dictWord{9, 0, 250}, + dictWord{10, 0, 459}, + dictWord{12, 0, 160}, + dictWord{16, 0, 24}, + dictWord{132, 11, 625}, + dictWord{140, 0, 1020}, + dictWord{4, 0, 997}, + dictWord{6, 0, 1946}, + dictWord{6, 0, 1984}, + dictWord{134, 0, 1998}, + dictWord{6, 11, 16}, + dictWord{6, 11, 158}, + dictWord{7, 11, 43}, + dictWord{ + 7, + 11, + 129, + }, + dictWord{7, 11, 181}, + dictWord{8, 11, 276}, + dictWord{8, 11, 377}, + dictWord{10, 11, 523}, + dictWord{11, 11, 816}, + dictWord{12, 11, 455}, + dictWord{ + 13, + 11, + 303, + }, + dictWord{142, 11, 135}, + dictWord{133, 10, 812}, + dictWord{134, 0, 658}, + dictWord{4, 11, 1}, + dictWord{7, 11, 1143}, + dictWord{7, 11, 1463}, + dictWord{8, 11, 61}, + dictWord{9, 11, 207}, + dictWord{9, 11, 390}, + dictWord{9, 11, 467}, + dictWord{139, 11, 836}, + dictWord{150, 11, 26}, + dictWord{140, 0, 106}, + dictWord{6, 0, 1827}, + dictWord{10, 0, 931}, + dictWord{18, 0, 166}, + dictWord{20, 0, 114}, + dictWord{4, 10, 137}, + dictWord{7, 10, 1178}, + dictWord{7, 11, 1319}, + dictWord{135, 10, 1520}, + dictWord{133, 0, 1010}, + dictWord{4, 11, 723}, + dictWord{5, 11, 895}, + dictWord{7, 11, 1031}, + dictWord{8, 11, 199}, + dictWord{8, 11, 340}, + dictWord{9, 11, 153}, + dictWord{9, 11, 215}, + dictWord{10, 11, 21}, + dictWord{10, 11, 59}, + dictWord{10, 11, 80}, + dictWord{10, 11, 224}, + dictWord{11, 11, 229}, + dictWord{11, 11, 652}, + dictWord{12, 11, 192}, + dictWord{13, 11, 146}, + dictWord{142, 11, 91}, + dictWord{132, 11, 295}, + dictWord{6, 11, 619}, + dictWord{ + 7, + 11, + 898, + }, + dictWord{7, 11, 1092}, + dictWord{8, 11, 485}, + dictWord{18, 11, 28}, + dictWord{147, 11, 116}, + dictWord{137, 11, 51}, + dictWord{6, 10, 1661}, + dictWord{ + 7, + 10, + 1975, + }, + dictWord{7, 10, 2009}, + dictWord{135, 10, 2011}, + dictWord{5, 11, 309}, + dictWord{140, 11, 211}, + dictWord{5, 0, 87}, + dictWord{7, 0, 313}, + dictWord{ + 7, + 0, + 1103, + }, + dictWord{10, 0, 208}, + dictWord{10, 0, 582}, + dictWord{11, 0, 389}, + dictWord{11, 0, 813}, + dictWord{12, 0, 385}, + dictWord{13, 0, 286}, + dictWord{ + 14, + 0, + 124, + }, + dictWord{146, 0, 108}, + dictWord{5, 11, 125}, + dictWord{8, 11, 77}, + dictWord{138, 11, 15}, + dictWord{132, 0, 267}, + dictWord{133, 0, 703}, + dictWord{ + 137, + 11, + 155, + }, + dictWord{133, 11, 439}, + dictWord{11, 11, 164}, + dictWord{140, 11, 76}, + dictWord{9, 0, 496}, + dictWord{5, 10, 89}, + dictWord{7, 10, 1915}, + dictWord{ + 9, + 10, + 185, + }, + dictWord{9, 10, 235}, + dictWord{10, 10, 64}, + dictWord{10, 10, 270}, + dictWord{10, 10, 403}, + dictWord{10, 10, 469}, + dictWord{10, 10, 529}, + dictWord{10, 10, 590}, + dictWord{11, 10, 140}, + dictWord{11, 10, 860}, + dictWord{13, 10, 1}, + dictWord{13, 10, 422}, + dictWord{14, 10, 341}, + dictWord{14, 10, 364}, + dictWord{17, 10, 93}, + dictWord{18, 10, 113}, + dictWord{19, 10, 97}, + dictWord{147, 10, 113}, + dictWord{133, 10, 695}, + dictWord{135, 0, 1121}, + dictWord{ + 5, + 10, + 6, + }, + dictWord{6, 10, 183}, + dictWord{7, 10, 680}, + dictWord{7, 10, 978}, + dictWord{7, 10, 1013}, + dictWord{7, 10, 1055}, + dictWord{12, 10, 230}, + dictWord{ + 13, + 10, + 172, + }, + dictWord{146, 10, 29}, + dictWord{4, 11, 8}, + dictWord{7, 11, 1152}, + dictWord{7, 11, 1153}, + dictWord{7, 11, 1715}, + dictWord{9, 11, 374}, + dictWord{ + 10, + 11, + 478, + }, + dictWord{139, 11, 648}, + dictWord{135, 11, 1099}, + dictWord{6, 10, 29}, + dictWord{139, 10, 63}, + dictWord{4, 0, 561}, + dictWord{10, 0, 249}, + dictWord{ + 139, + 0, + 209, + }, + dictWord{132, 0, 760}, + dictWord{7, 11, 799}, + dictWord{138, 11, 511}, + dictWord{136, 11, 87}, + dictWord{9, 0, 154}, + dictWord{140, 0, 485}, + dictWord{136, 0, 255}, + dictWord{132, 0, 323}, + dictWord{140, 0, 419}, + dictWord{132, 10, 311}, + dictWord{134, 10, 1740}, + dictWord{4, 0, 368}, + dictWord{ + 135, + 0, + 641, + }, + dictWord{7, 10, 170}, + dictWord{8, 10, 90}, + dictWord{8, 10, 177}, + dictWord{8, 10, 415}, + dictWord{11, 10, 714}, + dictWord{142, 10, 281}, + dictWord{ + 4, + 11, + 69, + }, + dictWord{5, 11, 122}, + dictWord{9, 11, 656}, + dictWord{138, 11, 464}, + dictWord{5, 11, 849}, + dictWord{134, 11, 1633}, + dictWord{8, 0, 522}, + dictWord{ + 142, + 0, + 328, + }, + dictWord{11, 10, 91}, + dictWord{13, 10, 129}, + dictWord{15, 10, 101}, + dictWord{145, 10, 125}, + dictWord{7, 0, 562}, + dictWord{8, 0, 551}, + dictWord{ + 4, + 10, + 494, + }, + dictWord{6, 10, 74}, + dictWord{7, 10, 44}, + dictWord{11, 11, 499}, + dictWord{12, 10, 17}, + dictWord{15, 10, 5}, + dictWord{148, 10, 11}, + dictWord{4, 10, 276}, + dictWord{133, 10, 296}, + dictWord{9, 0, 92}, + dictWord{147, 0, 91}, + dictWord{4, 10, 7}, + dictWord{5, 10, 90}, + dictWord{5, 10, 158}, + dictWord{6, 10, 542}, + dictWord{ + 7, + 10, + 221, + }, + dictWord{7, 10, 1574}, + dictWord{9, 10, 490}, + dictWord{10, 10, 540}, + dictWord{11, 10, 443}, + dictWord{139, 10, 757}, + dictWord{6, 0, 525}, + dictWord{ + 6, + 0, + 1976, + }, + dictWord{8, 0, 806}, + dictWord{9, 0, 876}, + dictWord{140, 0, 284}, + dictWord{5, 11, 859}, + dictWord{7, 10, 588}, + dictWord{7, 11, 1160}, + dictWord{ + 8, + 11, + 107, + }, + dictWord{9, 10, 175}, + dictWord{9, 11, 291}, + dictWord{9, 11, 439}, + dictWord{10, 10, 530}, + dictWord{10, 11, 663}, + dictWord{11, 11, 609}, + dictWord{ + 140, + 11, + 197, + }, + dictWord{7, 11, 168}, + dictWord{13, 11, 196}, + dictWord{141, 11, 237}, + dictWord{139, 0, 958}, + dictWord{133, 0, 594}, + dictWord{135, 10, 580}, + dictWord{7, 10, 88}, + dictWord{136, 10, 627}, + dictWord{6, 0, 479}, + dictWord{6, 0, 562}, + dictWord{7, 0, 1060}, + dictWord{13, 0, 6}, + dictWord{5, 10, 872}, + dictWord{ + 6, + 10, + 57, + }, + dictWord{7, 10, 471}, + dictWord{9, 10, 447}, + dictWord{137, 10, 454}, + dictWord{136, 11, 413}, + dictWord{145, 11, 19}, + dictWord{4, 11, 117}, + dictWord{ + 6, + 11, + 372, + }, + dictWord{7, 11, 1905}, + dictWord{142, 11, 323}, + dictWord{4, 11, 722}, + dictWord{139, 11, 471}, + dictWord{17, 0, 61}, + dictWord{5, 10, 31}, + dictWord{134, 10, 614}, + dictWord{8, 10, 330}, + dictWord{140, 10, 477}, + dictWord{7, 10, 1200}, + dictWord{138, 10, 460}, + dictWord{6, 10, 424}, + dictWord{ + 135, + 10, + 1866, + }, + dictWord{6, 0, 1641}, + dictWord{136, 0, 820}, + dictWord{6, 0, 1556}, + dictWord{134, 0, 1618}, + dictWord{9, 11, 5}, + dictWord{12, 11, 216}, + dictWord{ + 12, + 11, + 294, + }, + dictWord{12, 11, 298}, + dictWord{12, 11, 400}, + dictWord{12, 11, 518}, + dictWord{13, 11, 229}, + dictWord{143, 11, 139}, + dictWord{15, 11, 155}, + dictWord{144, 11, 79}, + dictWord{4, 0, 302}, + dictWord{135, 0, 1766}, + dictWord{5, 10, 13}, + dictWord{134, 10, 142}, + dictWord{6, 0, 148}, + dictWord{7, 0, 1313}, + dictWord{ + 7, + 10, + 116, + }, + dictWord{8, 10, 322}, + dictWord{8, 10, 755}, + dictWord{9, 10, 548}, + dictWord{10, 10, 714}, + dictWord{11, 10, 884}, + dictWord{141, 10, 324}, + dictWord{137, 0, 676}, + dictWord{9, 11, 88}, + dictWord{139, 11, 270}, + dictWord{5, 11, 12}, + dictWord{7, 11, 375}, + dictWord{137, 11, 438}, + dictWord{134, 0, 1674}, + dictWord{7, 10, 1472}, + dictWord{135, 10, 1554}, + dictWord{11, 0, 178}, + dictWord{7, 10, 1071}, + dictWord{7, 10, 1541}, + dictWord{7, 10, 1767}, + dictWord{ + 7, + 10, + 1806, + }, + dictWord{11, 10, 162}, + dictWord{11, 10, 242}, + dictWord{12, 10, 605}, + dictWord{15, 10, 26}, + dictWord{144, 10, 44}, + dictWord{6, 0, 389}, + dictWord{ + 7, + 0, + 149, + }, + dictWord{9, 0, 142}, + dictWord{138, 0, 94}, + dictWord{140, 11, 71}, + dictWord{145, 10, 115}, + dictWord{6, 0, 8}, + dictWord{7, 0, 1881}, + dictWord{8, 0, 91}, + dictWord{11, 11, 966}, + dictWord{12, 11, 287}, + dictWord{13, 11, 342}, + dictWord{13, 11, 402}, + dictWord{15, 11, 110}, + dictWord{143, 11, 163}, + dictWord{ + 4, + 11, + 258, + }, + dictWord{136, 11, 639}, + dictWord{6, 11, 22}, + dictWord{7, 11, 903}, + dictWord{138, 11, 577}, + dictWord{133, 11, 681}, + dictWord{135, 10, 1111}, + dictWord{135, 11, 1286}, + dictWord{9, 0, 112}, + dictWord{8, 10, 1}, + dictWord{138, 10, 326}, + dictWord{5, 10, 488}, + dictWord{6, 10, 527}, + dictWord{7, 10, 489}, + dictWord{ + 7, + 10, + 1636, + }, + dictWord{8, 10, 121}, + dictWord{8, 10, 144}, + dictWord{8, 10, 359}, + dictWord{9, 10, 193}, + dictWord{9, 10, 241}, + dictWord{9, 10, 336}, + dictWord{ + 9, + 10, + 882, + }, + dictWord{11, 10, 266}, + dictWord{11, 10, 372}, + dictWord{11, 10, 944}, + dictWord{12, 10, 401}, + dictWord{140, 10, 641}, + dictWord{4, 11, 664}, + dictWord{133, 11, 804}, + dictWord{6, 0, 747}, + dictWord{134, 0, 1015}, + dictWord{135, 0, 1746}, + dictWord{9, 10, 31}, + dictWord{10, 10, 244}, + dictWord{ + 10, + 10, + 699, + }, + dictWord{12, 10, 149}, + dictWord{141, 10, 497}, + dictWord{133, 10, 377}, + dictWord{135, 0, 24}, + dictWord{6, 0, 1352}, + dictWord{5, 11, 32}, + dictWord{ + 145, + 10, + 101, + }, + dictWord{7, 0, 1530}, + dictWord{10, 0, 158}, + dictWord{13, 0, 13}, + dictWord{13, 0, 137}, + dictWord{13, 0, 258}, + dictWord{14, 0, 111}, + dictWord{ + 14, + 0, + 225, + }, + dictWord{14, 0, 253}, + dictWord{14, 0, 304}, + dictWord{14, 0, 339}, + dictWord{14, 0, 417}, + dictWord{146, 0, 33}, + dictWord{4, 0, 503}, + dictWord{ + 135, + 0, + 1661, + }, + dictWord{5, 0, 130}, + dictWord{6, 0, 845}, + dictWord{7, 0, 1314}, + dictWord{9, 0, 610}, + dictWord{10, 0, 718}, + dictWord{11, 0, 601}, + dictWord{11, 0, 819}, + dictWord{11, 0, 946}, + dictWord{140, 0, 536}, + dictWord{10, 0, 149}, + dictWord{11, 0, 280}, + dictWord{142, 0, 336}, + dictWord{134, 0, 1401}, + dictWord{ + 135, + 0, + 1946, + }, + dictWord{8, 0, 663}, + dictWord{144, 0, 8}, + dictWord{134, 0, 1607}, + dictWord{135, 10, 2023}, + dictWord{4, 11, 289}, + dictWord{7, 11, 629}, + dictWord{ + 7, + 11, + 1698, + }, + dictWord{7, 11, 1711}, + dictWord{140, 11, 215}, + dictWord{6, 11, 450}, + dictWord{136, 11, 109}, + dictWord{10, 0, 882}, + dictWord{10, 0, 883}, + dictWord{10, 0, 914}, + dictWord{138, 0, 928}, + dictWord{133, 10, 843}, + dictWord{136, 11, 705}, + dictWord{132, 10, 554}, + dictWord{133, 10, 536}, + dictWord{ + 5, + 0, + 417, + }, + dictWord{9, 10, 79}, + dictWord{11, 10, 625}, + dictWord{145, 10, 7}, + dictWord{7, 11, 1238}, + dictWord{142, 11, 37}, + dictWord{4, 0, 392}, + dictWord{ + 135, + 0, + 1597, + }, + dictWord{5, 0, 433}, + dictWord{9, 0, 633}, + dictWord{11, 0, 629}, + dictWord{132, 10, 424}, + dictWord{7, 10, 336}, + dictWord{136, 10, 785}, + dictWord{ + 134, + 11, + 355, + }, + dictWord{6, 0, 234}, + dictWord{7, 0, 769}, + dictWord{9, 0, 18}, + dictWord{138, 0, 358}, + dictWord{4, 10, 896}, + dictWord{134, 10, 1777}, + dictWord{ + 138, + 11, + 323, + }, + dictWord{7, 0, 140}, + dictWord{7, 0, 1950}, + dictWord{8, 0, 680}, + dictWord{11, 0, 817}, + dictWord{147, 0, 88}, + dictWord{7, 0, 1222}, + dictWord{ + 138, + 0, + 386, + }, + dictWord{139, 11, 908}, + dictWord{11, 0, 249}, + dictWord{12, 0, 313}, + dictWord{16, 0, 66}, + dictWord{145, 0, 26}, + dictWord{134, 0, 5}, + dictWord{7, 10, 750}, + dictWord{9, 10, 223}, + dictWord{11, 10, 27}, + dictWord{11, 10, 466}, + dictWord{12, 10, 624}, + dictWord{14, 10, 265}, + dictWord{146, 10, 61}, + dictWord{ + 134, + 11, + 26, + }, + dictWord{134, 0, 1216}, + dictWord{5, 0, 963}, + dictWord{134, 0, 1773}, + dictWord{4, 11, 414}, + dictWord{5, 11, 467}, + dictWord{9, 11, 654}, + dictWord{ + 10, + 11, + 451, + }, + dictWord{12, 11, 59}, + dictWord{141, 11, 375}, + dictWord{135, 11, 17}, + dictWord{4, 10, 603}, + dictWord{133, 10, 661}, + dictWord{4, 10, 11}, + dictWord{ + 6, + 10, + 128, + }, + dictWord{7, 10, 231}, + dictWord{7, 10, 1533}, + dictWord{138, 10, 725}, + dictWord{135, 11, 955}, + dictWord{7, 0, 180}, + dictWord{8, 0, 509}, + dictWord{ + 136, + 0, + 792, + }, + dictWord{132, 10, 476}, + dictWord{132, 0, 1002}, + dictWord{133, 11, 538}, + dictWord{135, 10, 1807}, + dictWord{132, 0, 931}, + dictWord{7, 0, 943}, + dictWord{11, 0, 614}, + dictWord{140, 0, 747}, + dictWord{135, 0, 1837}, + dictWord{9, 10, 20}, + dictWord{10, 10, 324}, + dictWord{10, 10, 807}, + dictWord{ + 139, + 10, + 488, + }, + dictWord{134, 0, 641}, + dictWord{6, 11, 280}, + dictWord{10, 11, 502}, + dictWord{11, 11, 344}, + dictWord{140, 11, 38}, + dictWord{5, 11, 45}, + dictWord{ + 7, + 11, + 1161, + }, + dictWord{11, 11, 448}, + dictWord{11, 11, 880}, + dictWord{13, 11, 139}, + dictWord{13, 11, 407}, + dictWord{15, 11, 16}, + dictWord{17, 11, 95}, + dictWord{ + 18, + 11, + 66, + }, + dictWord{18, 11, 88}, + dictWord{18, 11, 123}, + dictWord{149, 11, 7}, + dictWord{9, 0, 280}, + dictWord{138, 0, 134}, + dictWord{22, 0, 22}, + dictWord{23, 0, 5}, + dictWord{151, 0, 29}, + dictWord{136, 11, 777}, + dictWord{4, 0, 90}, + dictWord{5, 0, 545}, + dictWord{7, 0, 754}, + dictWord{9, 0, 186}, + dictWord{10, 0, 72}, + dictWord{ + 10, + 0, + 782, + }, + dictWord{11, 0, 577}, + dictWord{11, 0, 610}, + dictWord{11, 0, 960}, + dictWord{12, 0, 354}, + dictWord{12, 0, 362}, + dictWord{12, 0, 595}, + dictWord{ + 4, + 11, + 410, + }, + dictWord{135, 11, 521}, + dictWord{135, 11, 1778}, + dictWord{5, 10, 112}, + dictWord{6, 10, 103}, + dictWord{134, 10, 150}, + dictWord{138, 10, 356}, + dictWord{132, 0, 742}, + dictWord{7, 0, 151}, + dictWord{9, 0, 329}, + dictWord{139, 0, 254}, + dictWord{8, 0, 853}, + dictWord{8, 0, 881}, + dictWord{8, 0, 911}, + dictWord{ + 8, + 0, + 912, + }, + dictWord{10, 0, 872}, + dictWord{12, 0, 741}, + dictWord{12, 0, 742}, + dictWord{152, 0, 18}, + dictWord{4, 11, 573}, + dictWord{136, 11, 655}, + dictWord{ + 6, + 0, + 921, + }, + dictWord{134, 0, 934}, + dictWord{9, 0, 187}, + dictWord{10, 0, 36}, + dictWord{11, 0, 1016}, + dictWord{17, 0, 44}, + dictWord{146, 0, 64}, + dictWord{7, 0, 833}, + dictWord{136, 0, 517}, + dictWord{4, 0, 506}, + dictWord{5, 0, 295}, + dictWord{135, 0, 1680}, + dictWord{4, 10, 708}, + dictWord{8, 10, 15}, + dictWord{9, 10, 50}, + dictWord{ + 9, + 10, + 386, + }, + dictWord{11, 10, 18}, + dictWord{11, 10, 529}, + dictWord{140, 10, 228}, + dictWord{7, 0, 251}, + dictWord{7, 0, 1701}, + dictWord{8, 0, 436}, + dictWord{ + 4, + 10, + 563, + }, + dictWord{7, 10, 592}, + dictWord{7, 10, 637}, + dictWord{7, 10, 770}, + dictWord{8, 10, 463}, + dictWord{9, 10, 60}, + dictWord{9, 10, 335}, + dictWord{9, 10, 904}, + dictWord{10, 10, 73}, + dictWord{11, 10, 434}, + dictWord{12, 10, 585}, + dictWord{13, 10, 331}, + dictWord{18, 10, 110}, + dictWord{148, 10, 60}, + dictWord{ + 132, + 10, + 502, + }, + dictWord{136, 0, 584}, + dictWord{6, 10, 347}, + dictWord{138, 10, 161}, + dictWord{7, 0, 987}, + dictWord{9, 0, 688}, + dictWord{10, 0, 522}, + dictWord{ + 11, + 0, + 788, + }, + dictWord{12, 0, 137}, + dictWord{12, 0, 566}, + dictWord{14, 0, 9}, + dictWord{14, 0, 24}, + dictWord{14, 0, 64}, + dictWord{7, 11, 899}, + dictWord{142, 11, 325}, + dictWord{4, 0, 214}, + dictWord{5, 0, 500}, + dictWord{5, 10, 102}, + dictWord{6, 10, 284}, + dictWord{7, 10, 1079}, + dictWord{7, 10, 1423}, + dictWord{7, 10, 1702}, + dictWord{ + 8, + 10, + 470, + }, + dictWord{9, 10, 554}, + dictWord{9, 10, 723}, + dictWord{139, 10, 333}, + dictWord{7, 10, 246}, + dictWord{135, 10, 840}, + dictWord{6, 10, 10}, + dictWord{ + 8, + 10, + 571, + }, + dictWord{9, 10, 739}, + dictWord{143, 10, 91}, + dictWord{133, 10, 626}, + dictWord{146, 0, 195}, + dictWord{134, 0, 1775}, + dictWord{7, 0, 389}, + dictWord{7, 0, 700}, + dictWord{7, 0, 940}, + dictWord{8, 0, 514}, + dictWord{9, 0, 116}, + dictWord{9, 0, 535}, + dictWord{10, 0, 118}, + dictWord{11, 0, 107}, + dictWord{ + 11, + 0, + 148, + }, + dictWord{11, 0, 922}, + dictWord{12, 0, 254}, + dictWord{12, 0, 421}, + dictWord{142, 0, 238}, + dictWord{5, 10, 18}, + dictWord{6, 10, 526}, + dictWord{13, 10, 24}, + dictWord{13, 10, 110}, + dictWord{19, 10, 5}, + dictWord{147, 10, 44}, + dictWord{132, 0, 743}, + dictWord{11, 0, 292}, + dictWord{4, 10, 309}, + dictWord{5, 10, 462}, + dictWord{7, 10, 970}, + dictWord{135, 10, 1097}, + dictWord{22, 10, 30}, + dictWord{150, 10, 33}, + dictWord{139, 11, 338}, + dictWord{135, 11, 1598}, + dictWord{ + 7, + 0, + 1283, + }, + dictWord{9, 0, 227}, + dictWord{11, 0, 325}, + dictWord{11, 0, 408}, + dictWord{14, 0, 180}, + dictWord{146, 0, 47}, + dictWord{4, 0, 953}, + dictWord{6, 0, 1805}, + dictWord{6, 0, 1814}, + dictWord{6, 0, 1862}, + dictWord{140, 0, 774}, + dictWord{6, 11, 611}, + dictWord{135, 11, 1733}, + dictWord{135, 11, 1464}, + dictWord{ + 5, + 0, + 81, + }, + dictWord{7, 0, 146}, + dictWord{7, 0, 1342}, + dictWord{8, 0, 53}, + dictWord{8, 0, 561}, + dictWord{8, 0, 694}, + dictWord{8, 0, 754}, + dictWord{9, 0, 115}, + dictWord{ + 9, + 0, + 179, + }, + dictWord{9, 0, 894}, + dictWord{10, 0, 462}, + dictWord{10, 0, 813}, + dictWord{11, 0, 230}, + dictWord{11, 0, 657}, + dictWord{11, 0, 699}, + dictWord{11, 0, 748}, + dictWord{12, 0, 119}, + dictWord{12, 0, 200}, + dictWord{12, 0, 283}, + dictWord{142, 0, 273}, + dictWord{5, 0, 408}, + dictWord{6, 0, 789}, + dictWord{6, 0, 877}, + dictWord{ + 6, + 0, + 1253, + }, + dictWord{6, 0, 1413}, + dictWord{137, 0, 747}, + dictWord{134, 10, 1704}, + dictWord{135, 11, 663}, + dictWord{6, 0, 1910}, + dictWord{6, 0, 1915}, + dictWord{6, 0, 1923}, + dictWord{9, 0, 913}, + dictWord{9, 0, 928}, + dictWord{9, 0, 950}, + dictWord{9, 0, 954}, + dictWord{9, 0, 978}, + dictWord{9, 0, 993}, + dictWord{12, 0, 812}, + dictWord{12, 0, 819}, + dictWord{12, 0, 831}, + dictWord{12, 0, 833}, + dictWord{12, 0, 838}, + dictWord{12, 0, 909}, + dictWord{12, 0, 928}, + dictWord{12, 0, 931}, + dictWord{12, 0, 950}, + dictWord{15, 0, 186}, + dictWord{15, 0, 187}, + dictWord{15, 0, 195}, + dictWord{15, 0, 196}, + dictWord{15, 0, 209}, + dictWord{15, 0, 215}, + dictWord{ + 15, + 0, + 236, + }, + dictWord{15, 0, 241}, + dictWord{15, 0, 249}, + dictWord{15, 0, 253}, + dictWord{18, 0, 180}, + dictWord{18, 0, 221}, + dictWord{18, 0, 224}, + dictWord{ + 18, + 0, + 227, + }, + dictWord{18, 0, 229}, + dictWord{149, 0, 60}, + dictWord{7, 0, 1826}, + dictWord{135, 0, 1938}, + dictWord{11, 0, 490}, + dictWord{18, 0, 143}, + dictWord{ + 5, + 10, + 86, + }, + dictWord{7, 10, 743}, + dictWord{9, 10, 85}, + dictWord{10, 10, 281}, + dictWord{10, 10, 432}, + dictWord{12, 10, 251}, + dictWord{13, 10, 118}, + dictWord{ + 142, + 10, + 378, + }, + dictWord{5, 10, 524}, + dictWord{133, 10, 744}, + dictWord{141, 11, 442}, + dictWord{10, 10, 107}, + dictWord{140, 10, 436}, + dictWord{135, 11, 503}, + dictWord{134, 0, 1162}, + dictWord{132, 10, 927}, + dictWord{7, 0, 30}, + dictWord{8, 0, 86}, + dictWord{8, 0, 315}, + dictWord{8, 0, 700}, + dictWord{9, 0, 576}, + dictWord{ + 9, + 0, + 858, + }, + dictWord{10, 0, 414}, + dictWord{11, 0, 310}, + dictWord{11, 0, 888}, + dictWord{11, 0, 904}, + dictWord{12, 0, 361}, + dictWord{13, 0, 248}, + dictWord{13, 0, 371}, + dictWord{14, 0, 142}, + dictWord{12, 10, 670}, + dictWord{146, 10, 94}, + dictWord{134, 0, 721}, + dictWord{4, 11, 113}, + dictWord{5, 11, 163}, + dictWord{5, 11, 735}, + dictWord{7, 11, 1009}, + dictWord{7, 10, 1149}, + dictWord{9, 11, 9}, + dictWord{9, 10, 156}, + dictWord{9, 11, 771}, + dictWord{12, 11, 90}, + dictWord{13, 11, 138}, + dictWord{13, 11, 410}, + dictWord{143, 11, 128}, + dictWord{138, 0, 839}, + dictWord{133, 10, 778}, + dictWord{137, 0, 617}, + dictWord{133, 10, 502}, + dictWord{ + 8, + 10, + 196, + }, + dictWord{10, 10, 283}, + dictWord{139, 10, 406}, + dictWord{6, 0, 428}, + dictWord{7, 0, 524}, + dictWord{8, 0, 169}, + dictWord{8, 0, 234}, + dictWord{9, 0, 480}, + dictWord{138, 0, 646}, + dictWord{133, 10, 855}, + dictWord{134, 0, 1648}, + dictWord{7, 0, 1205}, + dictWord{138, 0, 637}, + dictWord{7, 0, 1596}, + dictWord{ + 4, + 11, + 935, + }, + dictWord{133, 11, 823}, + dictWord{5, 11, 269}, + dictWord{7, 11, 434}, + dictWord{7, 11, 891}, + dictWord{8, 11, 339}, + dictWord{9, 11, 702}, + dictWord{ + 11, + 11, + 594, + }, + dictWord{11, 11, 718}, + dictWord{145, 11, 100}, + dictWord{7, 11, 878}, + dictWord{9, 11, 485}, + dictWord{141, 11, 264}, + dictWord{4, 0, 266}, + dictWord{ + 8, + 0, + 4, + }, + dictWord{9, 0, 39}, + dictWord{10, 0, 166}, + dictWord{11, 0, 918}, + dictWord{12, 0, 635}, + dictWord{20, 0, 10}, + dictWord{22, 0, 27}, + dictWord{22, 0, 43}, + dictWord{ + 22, + 0, + 52, + }, + dictWord{134, 11, 1713}, + dictWord{7, 10, 1400}, + dictWord{9, 10, 446}, + dictWord{138, 10, 45}, + dictWord{135, 11, 900}, + dictWord{132, 0, 862}, + dictWord{134, 0, 1554}, + dictWord{135, 11, 1033}, + dictWord{19, 0, 16}, + dictWord{147, 11, 16}, + dictWord{135, 11, 1208}, + dictWord{7, 0, 157}, + dictWord{ + 136, + 0, + 279, + }, + dictWord{6, 0, 604}, + dictWord{136, 0, 391}, + dictWord{13, 10, 455}, + dictWord{15, 10, 99}, + dictWord{15, 10, 129}, + dictWord{144, 10, 68}, + dictWord{ + 135, + 10, + 172, + }, + dictWord{7, 0, 945}, + dictWord{11, 0, 713}, + dictWord{139, 0, 744}, + dictWord{4, 0, 973}, + dictWord{10, 0, 877}, + dictWord{10, 0, 937}, + dictWord{ + 10, + 0, + 938, + }, + dictWord{140, 0, 711}, + dictWord{139, 0, 1022}, + dictWord{132, 10, 568}, + dictWord{142, 11, 143}, + dictWord{4, 0, 567}, + dictWord{9, 0, 859}, + dictWord{ + 132, + 10, + 732, + }, + dictWord{7, 0, 1846}, + dictWord{136, 0, 628}, + dictWord{136, 10, 733}, + dictWord{133, 0, 762}, + dictWord{4, 10, 428}, + dictWord{135, 10, 1789}, + dictWord{10, 0, 784}, + dictWord{13, 0, 191}, + dictWord{7, 10, 2015}, + dictWord{140, 10, 665}, + dictWord{133, 0, 298}, + dictWord{7, 0, 633}, + dictWord{7, 0, 905}, + dictWord{7, 0, 909}, + dictWord{7, 0, 1538}, + dictWord{9, 0, 767}, + dictWord{140, 0, 636}, + dictWord{138, 10, 806}, + dictWord{132, 0, 795}, + dictWord{139, 0, 301}, + dictWord{135, 0, 1970}, + dictWord{5, 11, 625}, + dictWord{135, 11, 1617}, + dictWord{135, 11, 275}, + dictWord{7, 11, 37}, + dictWord{8, 11, 425}, + dictWord{ + 8, + 11, + 693, + }, + dictWord{9, 11, 720}, + dictWord{10, 11, 380}, + dictWord{10, 11, 638}, + dictWord{11, 11, 273}, + dictWord{11, 11, 307}, + dictWord{11, 11, 473}, + dictWord{ + 12, + 11, + 61, + }, + dictWord{143, 11, 43}, + dictWord{135, 11, 198}, + dictWord{134, 0, 1236}, + dictWord{7, 0, 369}, + dictWord{12, 0, 644}, + dictWord{12, 0, 645}, + dictWord{144, 0, 90}, + dictWord{19, 0, 15}, + dictWord{149, 0, 27}, + dictWord{6, 0, 71}, + dictWord{7, 0, 845}, + dictWord{8, 0, 160}, + dictWord{9, 0, 318}, + dictWord{6, 10, 1623}, + dictWord{134, 10, 1681}, + dictWord{134, 0, 1447}, + dictWord{134, 0, 1255}, + dictWord{138, 0, 735}, + dictWord{8, 0, 76}, + dictWord{132, 11, 168}, + dictWord{ + 6, + 10, + 1748, + }, + dictWord{8, 10, 715}, + dictWord{9, 10, 802}, + dictWord{10, 10, 46}, + dictWord{10, 10, 819}, + dictWord{13, 10, 308}, + dictWord{14, 10, 351}, + dictWord{14, 10, 363}, + dictWord{146, 10, 67}, + dictWord{135, 11, 91}, + dictWord{6, 0, 474}, + dictWord{4, 10, 63}, + dictWord{133, 10, 347}, + dictWord{133, 10, 749}, + dictWord{138, 0, 841}, + dictWord{133, 10, 366}, + dictWord{6, 0, 836}, + dictWord{132, 11, 225}, + dictWord{135, 0, 1622}, + dictWord{135, 10, 89}, + dictWord{ + 140, + 0, + 735, + }, + dictWord{134, 0, 1601}, + dictWord{138, 11, 145}, + dictWord{6, 0, 1390}, + dictWord{137, 0, 804}, + dictWord{142, 0, 394}, + dictWord{6, 11, 15}, + dictWord{ + 7, + 11, + 70, + }, + dictWord{10, 11, 240}, + dictWord{147, 11, 93}, + dictWord{6, 0, 96}, + dictWord{135, 0, 1426}, + dictWord{4, 0, 651}, + dictWord{133, 0, 289}, + dictWord{ + 7, + 11, + 956, + }, + dictWord{7, 10, 977}, + dictWord{7, 11, 1157}, + dictWord{7, 11, 1506}, + dictWord{7, 11, 1606}, + dictWord{7, 11, 1615}, + dictWord{7, 11, 1619}, + dictWord{ + 7, + 11, + 1736, + }, + dictWord{7, 11, 1775}, + dictWord{8, 11, 590}, + dictWord{9, 11, 324}, + dictWord{9, 11, 736}, + dictWord{9, 11, 774}, + dictWord{9, 11, 776}, + dictWord{ + 9, + 11, + 784, + }, + dictWord{10, 11, 567}, + dictWord{10, 11, 708}, + dictWord{11, 11, 518}, + dictWord{11, 11, 613}, + dictWord{11, 11, 695}, + dictWord{11, 11, 716}, + dictWord{11, 11, 739}, + dictWord{11, 11, 770}, + dictWord{11, 11, 771}, + dictWord{11, 11, 848}, + dictWord{11, 11, 857}, + dictWord{11, 11, 931}, + dictWord{ + 11, + 11, + 947, + }, + dictWord{12, 11, 326}, + dictWord{12, 11, 387}, + dictWord{12, 11, 484}, + dictWord{12, 11, 528}, + dictWord{12, 11, 552}, + dictWord{12, 11, 613}, + dictWord{ + 13, + 11, + 189, + }, + dictWord{13, 11, 256}, + dictWord{13, 11, 340}, + dictWord{13, 11, 432}, + dictWord{13, 11, 436}, + dictWord{13, 11, 440}, + dictWord{13, 11, 454}, + dictWord{14, 11, 174}, + dictWord{14, 11, 220}, + dictWord{14, 11, 284}, + dictWord{14, 11, 390}, + dictWord{145, 11, 121}, + dictWord{7, 0, 688}, + dictWord{8, 0, 35}, + dictWord{9, 0, 511}, + dictWord{10, 0, 767}, + dictWord{147, 0, 118}, + dictWord{134, 0, 667}, + dictWord{4, 0, 513}, + dictWord{5, 10, 824}, + dictWord{133, 10, 941}, + dictWord{7, 10, 440}, + dictWord{8, 10, 230}, + dictWord{139, 10, 106}, + dictWord{134, 0, 2034}, + dictWord{135, 11, 1399}, + dictWord{143, 11, 66}, + dictWord{ + 135, + 11, + 1529, + }, + dictWord{4, 11, 145}, + dictWord{6, 11, 176}, + dictWord{7, 11, 395}, + dictWord{9, 11, 562}, + dictWord{144, 11, 28}, + dictWord{132, 11, 501}, + dictWord{132, 0, 704}, + dictWord{134, 0, 1524}, + dictWord{7, 0, 1078}, + dictWord{134, 11, 464}, + dictWord{6, 11, 509}, + dictWord{10, 11, 82}, + dictWord{20, 11, 91}, + dictWord{151, 11, 13}, + dictWord{4, 0, 720}, + dictWord{133, 0, 306}, + dictWord{133, 0, 431}, + dictWord{7, 0, 1196}, + dictWord{4, 10, 914}, + dictWord{5, 10, 800}, + dictWord{133, 10, 852}, + dictWord{135, 11, 1189}, + dictWord{10, 0, 54}, + dictWord{141, 10, 115}, + dictWord{7, 10, 564}, + dictWord{142, 10, 168}, + dictWord{ + 5, + 0, + 464, + }, + dictWord{6, 0, 236}, + dictWord{7, 0, 696}, + dictWord{7, 0, 914}, + dictWord{7, 0, 1108}, + dictWord{7, 0, 1448}, + dictWord{9, 0, 15}, + dictWord{9, 0, 564}, + dictWord{ + 10, + 0, + 14, + }, + dictWord{12, 0, 565}, + dictWord{13, 0, 449}, + dictWord{14, 0, 53}, + dictWord{15, 0, 13}, + dictWord{16, 0, 64}, + dictWord{17, 0, 41}, + dictWord{4, 10, 918}, + dictWord{133, 10, 876}, + dictWord{6, 0, 1418}, + dictWord{134, 10, 1764}, + dictWord{4, 10, 92}, + dictWord{133, 10, 274}, + dictWord{134, 0, 907}, + dictWord{ + 4, + 11, + 114, + }, + dictWord{8, 10, 501}, + dictWord{9, 11, 492}, + dictWord{13, 11, 462}, + dictWord{142, 11, 215}, + dictWord{4, 11, 77}, + dictWord{5, 11, 361}, + dictWord{ + 6, + 11, + 139, + }, + dictWord{6, 11, 401}, + dictWord{6, 11, 404}, + dictWord{7, 11, 413}, + dictWord{7, 11, 715}, + dictWord{7, 11, 1716}, + dictWord{11, 11, 279}, + dictWord{ + 12, + 11, + 179, + }, + dictWord{12, 11, 258}, + dictWord{13, 11, 244}, + dictWord{142, 11, 358}, + dictWord{6, 0, 1767}, + dictWord{12, 0, 194}, + dictWord{145, 0, 107}, + dictWord{ + 134, + 11, + 1717, + }, + dictWord{5, 10, 743}, + dictWord{142, 11, 329}, + dictWord{4, 10, 49}, + dictWord{7, 10, 280}, + dictWord{135, 10, 1633}, + dictWord{5, 0, 840}, + dictWord{7, 11, 1061}, + dictWord{8, 11, 82}, + dictWord{11, 11, 250}, + dictWord{12, 11, 420}, + dictWord{141, 11, 184}, + dictWord{135, 11, 724}, + dictWord{ + 134, + 0, + 900, + }, + dictWord{136, 10, 47}, + dictWord{134, 0, 1436}, + dictWord{144, 11, 0}, + dictWord{6, 0, 675}, + dictWord{7, 0, 1008}, + dictWord{7, 0, 1560}, + dictWord{ + 9, + 0, + 642, + }, + dictWord{11, 0, 236}, + dictWord{14, 0, 193}, + dictWord{5, 10, 272}, + dictWord{5, 10, 908}, + dictWord{5, 10, 942}, + dictWord{8, 10, 197}, + dictWord{9, 10, 47}, + dictWord{11, 10, 538}, + dictWord{139, 10, 742}, + dictWord{4, 0, 68}, + dictWord{5, 0, 628}, + dictWord{5, 0, 634}, + dictWord{6, 0, 386}, + dictWord{7, 0, 794}, + dictWord{ + 8, + 0, + 273, + }, + dictWord{9, 0, 563}, + dictWord{10, 0, 105}, + dictWord{10, 0, 171}, + dictWord{11, 0, 94}, + dictWord{139, 0, 354}, + dictWord{135, 10, 1911}, + dictWord{ + 137, + 10, + 891, + }, + dictWord{4, 0, 95}, + dictWord{6, 0, 1297}, + dictWord{6, 0, 1604}, + dictWord{7, 0, 416}, + dictWord{139, 0, 830}, + dictWord{6, 11, 513}, + dictWord{ + 135, + 11, + 1052, + }, + dictWord{7, 0, 731}, + dictWord{13, 0, 20}, + dictWord{143, 0, 11}, + dictWord{137, 11, 899}, + dictWord{10, 0, 850}, + dictWord{140, 0, 697}, + dictWord{ + 4, + 0, + 662, + }, + dictWord{7, 11, 1417}, + dictWord{12, 11, 382}, + dictWord{17, 11, 48}, + dictWord{152, 11, 12}, + dictWord{133, 0, 736}, + dictWord{132, 0, 861}, + dictWord{ + 4, + 10, + 407, + }, + dictWord{132, 10, 560}, + dictWord{141, 10, 490}, + dictWord{6, 11, 545}, + dictWord{7, 11, 565}, + dictWord{7, 11, 1669}, + dictWord{10, 11, 114}, + dictWord{11, 11, 642}, + dictWord{140, 11, 618}, + dictWord{6, 0, 871}, + dictWord{134, 0, 1000}, + dictWord{5, 0, 864}, + dictWord{10, 0, 648}, + dictWord{11, 0, 671}, + dictWord{15, 0, 46}, + dictWord{133, 11, 5}, + dictWord{133, 0, 928}, + dictWord{11, 0, 90}, + dictWord{13, 0, 7}, + dictWord{4, 10, 475}, + dictWord{11, 10, 35}, + dictWord{ + 13, + 10, + 71, + }, + dictWord{13, 10, 177}, + dictWord{142, 10, 422}, + dictWord{136, 0, 332}, + dictWord{135, 11, 192}, + dictWord{134, 0, 1055}, + dictWord{136, 11, 763}, + dictWord{11, 0, 986}, + dictWord{140, 0, 682}, + dictWord{7, 0, 76}, + dictWord{8, 0, 44}, + dictWord{9, 0, 884}, + dictWord{10, 0, 580}, + dictWord{11, 0, 399}, + dictWord{ + 11, + 0, + 894, + }, + dictWord{143, 0, 122}, + dictWord{135, 11, 1237}, + dictWord{135, 10, 636}, + dictWord{11, 0, 300}, + dictWord{6, 10, 222}, + dictWord{7, 10, 1620}, + dictWord{ + 8, + 10, + 409, + }, + dictWord{137, 10, 693}, + dictWord{4, 11, 87}, + dictWord{5, 11, 250}, + dictWord{10, 11, 601}, + dictWord{13, 11, 298}, + dictWord{13, 11, 353}, + dictWord{141, 11, 376}, + dictWord{5, 0, 518}, + dictWord{10, 0, 340}, + dictWord{11, 0, 175}, + dictWord{149, 0, 16}, + dictWord{140, 0, 771}, + dictWord{6, 0, 1108}, + dictWord{137, 0, 831}, + dictWord{132, 0, 836}, + dictWord{135, 0, 1852}, + dictWord{4, 0, 957}, + dictWord{6, 0, 1804}, + dictWord{8, 0, 842}, + dictWord{8, 0, 843}, + dictWord{ + 8, + 0, + 851, + }, + dictWord{8, 0, 855}, + dictWord{140, 0, 767}, + dictWord{135, 11, 814}, + dictWord{4, 11, 57}, + dictWord{7, 11, 1195}, + dictWord{7, 11, 1438}, + dictWord{ + 7, + 11, + 1548, + }, + dictWord{7, 11, 1835}, + dictWord{7, 11, 1904}, + dictWord{9, 11, 757}, + dictWord{10, 11, 604}, + dictWord{139, 11, 519}, + dictWord{133, 10, 882}, + dictWord{138, 0, 246}, + dictWord{4, 0, 934}, + dictWord{5, 0, 202}, + dictWord{8, 0, 610}, + dictWord{7, 11, 1897}, + dictWord{12, 11, 290}, + dictWord{13, 11, 80}, + dictWord{13, 11, 437}, + dictWord{145, 11, 74}, + dictWord{8, 0, 96}, + dictWord{9, 0, 36}, + dictWord{10, 0, 607}, + dictWord{10, 0, 804}, + dictWord{10, 0, 832}, + dictWord{ + 11, + 0, + 423, + }, + dictWord{11, 0, 442}, + dictWord{12, 0, 309}, + dictWord{14, 0, 199}, + dictWord{15, 0, 90}, + dictWord{145, 0, 110}, + dictWord{132, 10, 426}, + dictWord{ + 7, + 0, + 654, + }, + dictWord{8, 0, 240}, + dictWord{6, 10, 58}, + dictWord{7, 10, 745}, + dictWord{7, 10, 1969}, + dictWord{8, 10, 675}, + dictWord{9, 10, 479}, + dictWord{9, 10, 731}, + dictWord{10, 10, 330}, + dictWord{10, 10, 593}, + dictWord{10, 10, 817}, + dictWord{11, 10, 32}, + dictWord{11, 10, 133}, + dictWord{11, 10, 221}, + dictWord{ + 145, + 10, + 68, + }, + dictWord{9, 0, 13}, + dictWord{9, 0, 398}, + dictWord{9, 0, 727}, + dictWord{10, 0, 75}, + dictWord{10, 0, 184}, + dictWord{10, 0, 230}, + dictWord{10, 0, 564}, + dictWord{ + 10, + 0, + 569, + }, + dictWord{11, 0, 973}, + dictWord{12, 0, 70}, + dictWord{12, 0, 189}, + dictWord{13, 0, 57}, + dictWord{141, 0, 257}, + dictWord{4, 11, 209}, + dictWord{ + 135, + 11, + 902, + }, + dictWord{7, 0, 391}, + dictWord{137, 10, 538}, + dictWord{134, 0, 403}, + dictWord{6, 11, 303}, + dictWord{7, 11, 335}, + dictWord{7, 11, 1437}, + dictWord{ + 7, + 11, + 1668, + }, + dictWord{8, 11, 553}, + dictWord{8, 11, 652}, + dictWord{8, 11, 656}, + dictWord{9, 11, 558}, + dictWord{11, 11, 743}, + dictWord{149, 11, 18}, + dictWord{ + 132, + 11, + 559, + }, + dictWord{11, 0, 75}, + dictWord{142, 0, 267}, + dictWord{6, 0, 815}, + dictWord{141, 11, 2}, + dictWord{141, 0, 366}, + dictWord{137, 0, 631}, + dictWord{ + 133, + 11, + 1017, + }, + dictWord{5, 0, 345}, + dictWord{135, 0, 1016}, + dictWord{133, 11, 709}, + dictWord{134, 11, 1745}, + dictWord{133, 10, 566}, + dictWord{7, 0, 952}, + dictWord{6, 10, 48}, + dictWord{9, 10, 139}, + dictWord{10, 10, 399}, + dictWord{11, 10, 469}, + dictWord{12, 10, 634}, + dictWord{141, 10, 223}, + dictWord{ + 133, + 0, + 673, + }, + dictWord{9, 0, 850}, + dictWord{7, 11, 8}, + dictWord{136, 11, 206}, + dictWord{6, 0, 662}, + dictWord{149, 0, 35}, + dictWord{4, 0, 287}, + dictWord{133, 0, 1018}, + dictWord{6, 10, 114}, + dictWord{7, 10, 1224}, + dictWord{7, 10, 1556}, + dictWord{136, 10, 3}, + dictWord{8, 10, 576}, + dictWord{137, 10, 267}, + dictWord{4, 0, 884}, + dictWord{5, 0, 34}, + dictWord{10, 0, 724}, + dictWord{12, 0, 444}, + dictWord{13, 0, 354}, + dictWord{18, 0, 32}, + dictWord{23, 0, 24}, + dictWord{23, 0, 31}, + dictWord{ + 152, + 0, + 5, + }, + dictWord{133, 10, 933}, + dictWord{132, 11, 776}, + dictWord{138, 0, 151}, + dictWord{136, 0, 427}, + dictWord{134, 0, 382}, + dictWord{132, 0, 329}, + dictWord{ + 9, + 0, + 846, + }, + dictWord{10, 0, 827}, + dictWord{138, 11, 33}, + dictWord{9, 0, 279}, + dictWord{10, 0, 407}, + dictWord{14, 0, 84}, + dictWord{22, 0, 18}, + dictWord{ + 135, + 11, + 1297, + }, + dictWord{136, 11, 406}, + dictWord{132, 0, 906}, + dictWord{136, 0, 366}, + dictWord{134, 0, 843}, + dictWord{134, 0, 1443}, + dictWord{135, 0, 1372}, + dictWord{138, 0, 992}, + dictWord{4, 0, 123}, + dictWord{5, 0, 605}, + dictWord{7, 0, 1509}, + dictWord{136, 0, 36}, + dictWord{132, 0, 649}, + dictWord{8, 11, 175}, + dictWord{10, 11, 168}, + dictWord{138, 11, 573}, + dictWord{133, 0, 767}, + dictWord{134, 0, 1018}, + dictWord{135, 11, 1305}, + dictWord{12, 10, 30}, + dictWord{ + 13, + 10, + 148, + }, + dictWord{14, 10, 87}, + dictWord{14, 10, 182}, + dictWord{16, 10, 42}, + dictWord{148, 10, 70}, + dictWord{134, 11, 607}, + dictWord{4, 0, 273}, + dictWord{ + 5, + 0, + 658, + }, + dictWord{133, 0, 995}, + dictWord{6, 0, 72}, + dictWord{139, 11, 174}, + dictWord{10, 0, 483}, + dictWord{12, 0, 368}, + dictWord{7, 10, 56}, + dictWord{ + 7, + 10, + 1989, + }, + dictWord{8, 10, 337}, + dictWord{8, 10, 738}, + dictWord{9, 10, 600}, + dictWord{13, 10, 447}, + dictWord{142, 10, 92}, + dictWord{5, 11, 784}, + dictWord{ + 138, + 10, + 666, + }, + dictWord{135, 0, 1345}, + dictWord{139, 11, 882}, + dictWord{134, 0, 1293}, + dictWord{133, 0, 589}, + dictWord{134, 0, 1988}, + dictWord{5, 0, 117}, + dictWord{6, 0, 514}, + dictWord{6, 0, 541}, + dictWord{7, 0, 1164}, + dictWord{7, 0, 1436}, + dictWord{8, 0, 220}, + dictWord{8, 0, 648}, + dictWord{10, 0, 688}, + dictWord{ + 139, + 0, + 560, + }, + dictWord{136, 0, 379}, + dictWord{5, 0, 686}, + dictWord{7, 10, 866}, + dictWord{135, 10, 1163}, + dictWord{132, 10, 328}, + dictWord{9, 11, 14}, + dictWord{ + 9, + 11, + 441, + }, + dictWord{10, 11, 306}, + dictWord{139, 11, 9}, + dictWord{4, 10, 101}, + dictWord{135, 10, 1171}, + dictWord{5, 10, 833}, + dictWord{136, 10, 744}, + dictWord{5, 11, 161}, + dictWord{7, 11, 839}, + dictWord{135, 11, 887}, + dictWord{7, 0, 196}, + dictWord{10, 0, 765}, + dictWord{11, 0, 347}, + dictWord{11, 0, 552}, + dictWord{11, 0, 790}, + dictWord{12, 0, 263}, + dictWord{13, 0, 246}, + dictWord{13, 0, 270}, + dictWord{13, 0, 395}, + dictWord{14, 0, 176}, + dictWord{14, 0, 190}, + dictWord{ + 14, + 0, + 398, + }, + dictWord{14, 0, 412}, + dictWord{15, 0, 32}, + dictWord{15, 0, 63}, + dictWord{16, 0, 88}, + dictWord{147, 0, 105}, + dictWord{6, 10, 9}, + dictWord{6, 10, 397}, + dictWord{7, 10, 53}, + dictWord{7, 10, 1742}, + dictWord{10, 10, 632}, + dictWord{11, 10, 828}, + dictWord{140, 10, 146}, + dictWord{5, 0, 381}, + dictWord{135, 0, 1792}, + dictWord{134, 0, 1452}, + dictWord{135, 11, 429}, + dictWord{8, 0, 367}, + dictWord{10, 0, 760}, + dictWord{14, 0, 79}, + dictWord{20, 0, 17}, + dictWord{152, 0, 0}, + dictWord{7, 0, 616}, + dictWord{138, 0, 413}, + dictWord{11, 10, 417}, + dictWord{12, 10, 223}, + dictWord{140, 10, 265}, + dictWord{7, 11, 1611}, + dictWord{13, 11, 14}, + dictWord{15, 11, 44}, + dictWord{19, 11, 13}, + dictWord{148, 11, 76}, + dictWord{135, 0, 1229}, + dictWord{6, 0, 120}, + dictWord{7, 0, 1188}, + dictWord{7, 0, 1710}, + dictWord{8, 0, 286}, + dictWord{9, 0, 667}, + dictWord{11, 0, 592}, + dictWord{139, 0, 730}, + dictWord{135, 11, 1814}, + dictWord{135, 0, 1146}, + dictWord{4, 10, 186}, + dictWord{5, 10, 157}, + dictWord{8, 10, 168}, + dictWord{138, 10, 6}, + dictWord{4, 0, 352}, + dictWord{135, 0, 687}, + dictWord{4, 0, 192}, + dictWord{5, 0, 49}, + dictWord{ + 6, + 0, + 200, + }, + dictWord{6, 0, 293}, + dictWord{6, 0, 1696}, + dictWord{135, 0, 1151}, + dictWord{133, 10, 875}, + dictWord{5, 10, 773}, + dictWord{5, 10, 991}, + dictWord{ + 6, + 10, + 1635, + }, + dictWord{134, 10, 1788}, + dictWord{7, 10, 111}, + dictWord{136, 10, 581}, + dictWord{6, 0, 935}, + dictWord{134, 0, 1151}, + dictWord{134, 0, 1050}, + dictWord{132, 0, 650}, + dictWord{132, 0, 147}, + dictWord{11, 0, 194}, + dictWord{12, 0, 62}, + dictWord{12, 0, 88}, + dictWord{11, 11, 194}, + dictWord{12, 11, 62}, + dictWord{140, 11, 88}, + dictWord{6, 0, 339}, + dictWord{135, 0, 923}, + dictWord{134, 10, 1747}, + dictWord{7, 11, 643}, + dictWord{136, 11, 236}, + dictWord{ + 133, + 0, + 934, + }, + dictWord{7, 10, 1364}, + dictWord{7, 10, 1907}, + dictWord{141, 10, 158}, + dictWord{132, 10, 659}, + dictWord{4, 10, 404}, + dictWord{135, 10, 675}, + dictWord{7, 11, 581}, + dictWord{9, 11, 644}, + dictWord{137, 11, 699}, + dictWord{13, 0, 211}, + dictWord{14, 0, 133}, + dictWord{14, 0, 204}, + dictWord{15, 0, 64}, + dictWord{ + 15, + 0, + 69, + }, + dictWord{15, 0, 114}, + dictWord{16, 0, 10}, + dictWord{19, 0, 23}, + dictWord{19, 0, 35}, + dictWord{19, 0, 39}, + dictWord{19, 0, 51}, + dictWord{19, 0, 71}, + dictWord{19, 0, 75}, + dictWord{152, 0, 15}, + dictWord{133, 10, 391}, + dictWord{5, 11, 54}, + dictWord{135, 11, 1513}, + dictWord{7, 0, 222}, + dictWord{8, 0, 341}, + dictWord{ + 5, + 10, + 540, + }, + dictWord{134, 10, 1697}, + dictWord{134, 10, 78}, + dictWord{132, 11, 744}, + dictWord{136, 0, 293}, + dictWord{137, 11, 701}, + dictWord{ + 7, + 11, + 930, + }, + dictWord{10, 11, 402}, + dictWord{10, 11, 476}, + dictWord{13, 11, 452}, + dictWord{18, 11, 55}, + dictWord{147, 11, 104}, + dictWord{132, 0, 637}, + dictWord{133, 10, 460}, + dictWord{8, 11, 50}, + dictWord{137, 11, 624}, + dictWord{132, 11, 572}, + dictWord{134, 0, 1159}, + dictWord{4, 10, 199}, + dictWord{ + 139, + 10, + 34, + }, + dictWord{134, 0, 847}, + dictWord{134, 10, 388}, + dictWord{6, 11, 43}, + dictWord{7, 11, 38}, + dictWord{8, 11, 248}, + dictWord{9, 11, 504}, + dictWord{ + 138, + 11, + 513, + }, + dictWord{9, 0, 683}, + dictWord{4, 10, 511}, + dictWord{6, 10, 608}, + dictWord{9, 10, 333}, + dictWord{10, 10, 602}, + dictWord{11, 10, 441}, + dictWord{ + 11, + 10, + 723, + }, + dictWord{11, 10, 976}, + dictWord{140, 10, 357}, + dictWord{9, 0, 867}, + dictWord{138, 0, 837}, + dictWord{6, 0, 944}, + dictWord{135, 11, 326}, + dictWord{ + 135, + 0, + 1809, + }, + dictWord{5, 10, 938}, + dictWord{7, 11, 783}, + dictWord{136, 10, 707}, + dictWord{133, 11, 766}, + dictWord{133, 11, 363}, + dictWord{6, 0, 170}, + dictWord{7, 0, 1080}, + dictWord{8, 0, 395}, + dictWord{8, 0, 487}, + dictWord{141, 0, 147}, + dictWord{6, 11, 258}, + dictWord{140, 11, 409}, + dictWord{4, 0, 535}, + dictWord{ + 8, + 0, + 618, + }, + dictWord{5, 11, 249}, + dictWord{148, 11, 82}, + dictWord{6, 0, 1379}, + dictWord{149, 11, 15}, + dictWord{135, 0, 1625}, + dictWord{150, 0, 23}, + dictWord{ + 5, + 11, + 393, + }, + dictWord{6, 11, 378}, + dictWord{7, 11, 1981}, + dictWord{9, 11, 32}, + dictWord{9, 11, 591}, + dictWord{10, 11, 685}, + dictWord{10, 11, 741}, + dictWord{ + 142, + 11, + 382, + }, + dictWord{133, 11, 788}, + dictWord{7, 11, 1968}, + dictWord{10, 11, 19}, + dictWord{139, 11, 911}, + dictWord{7, 11, 1401}, + dictWord{ + 135, + 11, + 1476, + }, + dictWord{4, 11, 61}, + dictWord{5, 11, 58}, + dictWord{5, 11, 171}, + dictWord{5, 11, 635}, + dictWord{5, 11, 683}, + dictWord{5, 11, 700}, + dictWord{6, 11, 291}, + dictWord{6, 11, 566}, + dictWord{7, 11, 1650}, + dictWord{11, 11, 523}, + dictWord{12, 11, 273}, + dictWord{12, 11, 303}, + dictWord{15, 11, 39}, + dictWord{ + 143, + 11, + 111, + }, + dictWord{6, 10, 469}, + dictWord{7, 10, 1709}, + dictWord{138, 10, 515}, + dictWord{4, 0, 778}, + dictWord{134, 11, 589}, + dictWord{132, 0, 46}, + dictWord{ + 5, + 0, + 811, + }, + dictWord{6, 0, 1679}, + dictWord{6, 0, 1714}, + dictWord{135, 0, 2032}, + dictWord{7, 0, 1458}, + dictWord{9, 0, 407}, + dictWord{11, 0, 15}, + dictWord{12, 0, 651}, + dictWord{149, 0, 37}, + dictWord{7, 0, 938}, + dictWord{132, 10, 500}, + dictWord{6, 0, 34}, + dictWord{7, 0, 69}, + dictWord{7, 0, 1089}, + dictWord{7, 0, 1281}, + dictWord{ + 8, + 0, + 708, + }, + dictWord{8, 0, 721}, + dictWord{9, 0, 363}, + dictWord{148, 0, 98}, + dictWord{10, 11, 231}, + dictWord{147, 11, 124}, + dictWord{7, 11, 726}, + dictWord{ + 152, + 11, + 9, + }, + dictWord{5, 10, 68}, + dictWord{134, 10, 383}, + dictWord{136, 11, 583}, + dictWord{4, 11, 917}, + dictWord{133, 11, 1005}, + dictWord{11, 10, 216}, + dictWord{139, 10, 340}, + dictWord{135, 11, 1675}, + dictWord{8, 0, 441}, + dictWord{10, 0, 314}, + dictWord{143, 0, 3}, + dictWord{132, 11, 919}, + dictWord{4, 10, 337}, + dictWord{6, 10, 353}, + dictWord{7, 10, 1934}, + dictWord{8, 10, 488}, + dictWord{137, 10, 429}, + dictWord{7, 0, 889}, + dictWord{7, 10, 1795}, + dictWord{8, 10, 259}, + dictWord{9, 10, 135}, + dictWord{9, 10, 177}, + dictWord{9, 10, 860}, + dictWord{10, 10, 825}, + dictWord{11, 10, 115}, + dictWord{11, 10, 370}, + dictWord{11, 10, 405}, + dictWord{11, 10, 604}, + dictWord{12, 10, 10}, + dictWord{12, 10, 667}, + dictWord{12, 10, 669}, + dictWord{13, 10, 76}, + dictWord{14, 10, 310}, + dictWord{ + 15, + 10, + 76, + }, + dictWord{15, 10, 147}, + dictWord{148, 10, 23}, + dictWord{4, 10, 15}, + dictWord{4, 11, 255}, + dictWord{5, 10, 22}, + dictWord{5, 11, 302}, + dictWord{6, 11, 132}, + dictWord{6, 10, 244}, + dictWord{7, 10, 40}, + dictWord{7, 11, 128}, + dictWord{7, 10, 200}, + dictWord{7, 11, 283}, + dictWord{7, 10, 906}, + dictWord{7, 10, 1199}, + dictWord{ + 7, + 11, + 1299, + }, + dictWord{9, 10, 616}, + dictWord{10, 11, 52}, + dictWord{10, 11, 514}, + dictWord{10, 10, 716}, + dictWord{11, 10, 635}, + dictWord{11, 10, 801}, + dictWord{11, 11, 925}, + dictWord{12, 10, 458}, + dictWord{13, 11, 92}, + dictWord{142, 11, 309}, + dictWord{132, 0, 462}, + dictWord{137, 11, 173}, + dictWord{ + 135, + 10, + 1735, + }, + dictWord{8, 0, 525}, + dictWord{5, 10, 598}, + dictWord{7, 10, 791}, + dictWord{8, 10, 108}, + dictWord{137, 10, 123}, + dictWord{5, 0, 73}, + dictWord{6, 0, 23}, + dictWord{134, 0, 338}, + dictWord{132, 0, 676}, + dictWord{132, 10, 683}, + dictWord{7, 0, 725}, + dictWord{8, 0, 498}, + dictWord{139, 0, 268}, + dictWord{12, 0, 21}, + dictWord{151, 0, 7}, + dictWord{135, 0, 773}, + dictWord{4, 10, 155}, + dictWord{135, 10, 1689}, + dictWord{4, 0, 164}, + dictWord{5, 0, 730}, + dictWord{5, 10, 151}, + dictWord{ + 5, + 10, + 741, + }, + dictWord{6, 11, 210}, + dictWord{7, 10, 498}, + dictWord{7, 10, 870}, + dictWord{7, 10, 1542}, + dictWord{12, 10, 213}, + dictWord{14, 10, 36}, + dictWord{ + 14, + 10, + 391, + }, + dictWord{17, 10, 111}, + dictWord{18, 10, 6}, + dictWord{18, 10, 46}, + dictWord{18, 10, 151}, + dictWord{19, 10, 36}, + dictWord{20, 10, 32}, + dictWord{ + 20, + 10, + 56, + }, + dictWord{20, 10, 69}, + dictWord{20, 10, 102}, + dictWord{21, 10, 4}, + dictWord{22, 10, 8}, + dictWord{22, 10, 10}, + dictWord{22, 10, 14}, + dictWord{ + 150, + 10, + 31, + }, + dictWord{4, 10, 624}, + dictWord{135, 10, 1752}, + dictWord{4, 0, 583}, + dictWord{9, 0, 936}, + dictWord{15, 0, 214}, + dictWord{18, 0, 199}, + dictWord{24, 0, 26}, + dictWord{134, 11, 588}, + dictWord{7, 0, 1462}, + dictWord{11, 0, 659}, + dictWord{4, 11, 284}, + dictWord{134, 11, 223}, + dictWord{133, 0, 220}, + dictWord{ + 139, + 0, + 803, + }, + dictWord{132, 0, 544}, + dictWord{4, 10, 492}, + dictWord{133, 10, 451}, + dictWord{16, 0, 98}, + dictWord{148, 0, 119}, + dictWord{4, 11, 218}, + dictWord{ + 7, + 11, + 526, + }, + dictWord{143, 11, 137}, + dictWord{135, 10, 835}, + dictWord{4, 11, 270}, + dictWord{5, 11, 192}, + dictWord{6, 11, 332}, + dictWord{7, 11, 1322}, + dictWord{ + 13, + 11, + 9, + }, + dictWord{13, 10, 70}, + dictWord{14, 11, 104}, + dictWord{142, 11, 311}, + dictWord{132, 10, 539}, + dictWord{140, 11, 661}, + dictWord{5, 0, 176}, + dictWord{ + 6, + 0, + 437, + }, + dictWord{6, 0, 564}, + dictWord{11, 0, 181}, + dictWord{141, 0, 183}, + dictWord{135, 0, 1192}, + dictWord{6, 10, 113}, + dictWord{135, 10, 436}, + dictWord{136, 10, 718}, + dictWord{135, 10, 520}, + dictWord{135, 0, 1878}, + dictWord{140, 11, 196}, + dictWord{7, 11, 379}, + dictWord{8, 11, 481}, + dictWord{ + 137, + 11, + 377, + }, + dictWord{5, 11, 1003}, + dictWord{6, 11, 149}, + dictWord{137, 11, 746}, + dictWord{8, 11, 262}, + dictWord{9, 11, 627}, + dictWord{10, 11, 18}, + dictWord{ + 11, + 11, + 214, + }, + dictWord{11, 11, 404}, + dictWord{11, 11, 457}, + dictWord{11, 11, 780}, + dictWord{11, 11, 849}, + dictWord{11, 11, 913}, + dictWord{13, 11, 330}, + dictWord{13, 11, 401}, + dictWord{142, 11, 200}, + dictWord{149, 0, 26}, + dictWord{136, 11, 304}, + dictWord{132, 11, 142}, + dictWord{135, 0, 944}, + dictWord{ + 4, + 0, + 790, + }, + dictWord{5, 0, 273}, + dictWord{134, 0, 394}, + dictWord{134, 0, 855}, + dictWord{4, 0, 135}, + dictWord{6, 0, 127}, + dictWord{7, 0, 1185}, + dictWord{7, 0, 1511}, + dictWord{8, 0, 613}, + dictWord{11, 0, 5}, + dictWord{12, 0, 336}, + dictWord{12, 0, 495}, + dictWord{12, 0, 586}, + dictWord{12, 0, 660}, + dictWord{12, 0, 668}, + dictWord{ + 14, + 0, + 385, + }, + dictWord{15, 0, 118}, + dictWord{17, 0, 20}, + dictWord{146, 0, 98}, + dictWord{6, 0, 230}, + dictWord{9, 0, 752}, + dictWord{18, 0, 109}, + dictWord{12, 10, 610}, + dictWord{13, 10, 431}, + dictWord{144, 10, 59}, + dictWord{7, 0, 1954}, + dictWord{135, 11, 925}, + dictWord{4, 11, 471}, + dictWord{5, 11, 51}, + dictWord{6, 11, 602}, + dictWord{8, 11, 484}, + dictWord{10, 11, 195}, + dictWord{140, 11, 159}, + dictWord{132, 10, 307}, + dictWord{136, 11, 688}, + dictWord{132, 11, 697}, + dictWord{ + 7, + 11, + 812, + }, + dictWord{7, 11, 1261}, + dictWord{7, 11, 1360}, + dictWord{9, 11, 632}, + dictWord{140, 11, 352}, + dictWord{5, 0, 162}, + dictWord{8, 0, 68}, + dictWord{ + 133, + 10, + 964, + }, + dictWord{4, 0, 654}, + dictWord{136, 11, 212}, + dictWord{4, 0, 156}, + dictWord{7, 0, 998}, + dictWord{7, 0, 1045}, + dictWord{7, 0, 1860}, + dictWord{9, 0, 48}, + dictWord{9, 0, 692}, + dictWord{11, 0, 419}, + dictWord{139, 0, 602}, + dictWord{133, 11, 221}, + dictWord{4, 11, 373}, + dictWord{5, 11, 283}, + dictWord{6, 11, 480}, + dictWord{135, 11, 609}, + dictWord{142, 11, 216}, + dictWord{132, 0, 240}, + dictWord{6, 11, 192}, + dictWord{9, 11, 793}, + dictWord{145, 11, 55}, + dictWord{ + 4, + 10, + 75, + }, + dictWord{5, 10, 180}, + dictWord{6, 10, 500}, + dictWord{7, 10, 58}, + dictWord{7, 10, 710}, + dictWord{138, 10, 645}, + dictWord{4, 11, 132}, + dictWord{5, 11, 69}, + dictWord{5, 10, 649}, + dictWord{135, 11, 1242}, + dictWord{6, 10, 276}, + dictWord{7, 10, 282}, + dictWord{7, 10, 879}, + dictWord{7, 10, 924}, + dictWord{8, 10, 459}, + dictWord{9, 10, 599}, + dictWord{9, 10, 754}, + dictWord{11, 10, 574}, + dictWord{12, 10, 128}, + dictWord{12, 10, 494}, + dictWord{13, 10, 52}, + dictWord{13, 10, 301}, + dictWord{15, 10, 30}, + dictWord{143, 10, 132}, + dictWord{132, 10, 200}, + dictWord{4, 11, 111}, + dictWord{135, 11, 302}, + dictWord{9, 0, 197}, + dictWord{ + 10, + 0, + 300, + }, + dictWord{12, 0, 473}, + dictWord{13, 0, 90}, + dictWord{141, 0, 405}, + dictWord{132, 11, 767}, + dictWord{6, 11, 42}, + dictWord{7, 11, 1416}, + dictWord{ + 7, + 11, + 1590, + }, + dictWord{7, 11, 2005}, + dictWord{8, 11, 131}, + dictWord{8, 11, 466}, + dictWord{9, 11, 672}, + dictWord{13, 11, 252}, + dictWord{148, 11, 103}, + dictWord{ + 8, + 0, + 958, + }, + dictWord{8, 0, 999}, + dictWord{10, 0, 963}, + dictWord{138, 0, 1001}, + dictWord{135, 10, 1621}, + dictWord{135, 0, 858}, + dictWord{4, 0, 606}, + dictWord{ + 137, + 11, + 444, + }, + dictWord{6, 11, 44}, + dictWord{136, 11, 368}, + dictWord{139, 11, 172}, + dictWord{4, 11, 570}, + dictWord{133, 11, 120}, + dictWord{139, 11, 624}, + dictWord{7, 0, 1978}, + dictWord{8, 0, 676}, + dictWord{6, 10, 225}, + dictWord{137, 10, 211}, + dictWord{7, 0, 972}, + dictWord{11, 0, 102}, + dictWord{136, 10, 687}, + dictWord{6, 11, 227}, + dictWord{135, 11, 1589}, + dictWord{8, 10, 58}, + dictWord{9, 10, 724}, + dictWord{11, 10, 809}, + dictWord{13, 10, 113}, + dictWord{ + 145, + 10, + 72, + }, + dictWord{4, 0, 361}, + dictWord{133, 0, 315}, + dictWord{132, 0, 461}, + dictWord{6, 10, 345}, + dictWord{135, 10, 1247}, + dictWord{132, 0, 472}, + dictWord{ + 8, + 10, + 767, + }, + dictWord{8, 10, 803}, + dictWord{9, 10, 301}, + dictWord{137, 10, 903}, + dictWord{135, 11, 1333}, + dictWord{135, 11, 477}, + dictWord{7, 10, 1949}, + dictWord{136, 10, 674}, + dictWord{6, 0, 905}, + dictWord{138, 0, 747}, + dictWord{133, 0, 155}, + dictWord{134, 10, 259}, + dictWord{7, 0, 163}, + dictWord{8, 0, 319}, + dictWord{9, 0, 402}, + dictWord{10, 0, 24}, + dictWord{10, 0, 681}, + dictWord{11, 0, 200}, + dictWord{12, 0, 253}, + dictWord{12, 0, 410}, + dictWord{142, 0, 219}, + dictWord{ + 5, + 0, + 475, + }, + dictWord{7, 0, 1780}, + dictWord{9, 0, 230}, + dictWord{11, 0, 297}, + dictWord{11, 0, 558}, + dictWord{14, 0, 322}, + dictWord{19, 0, 76}, + dictWord{6, 11, 1667}, + dictWord{7, 11, 2036}, + dictWord{138, 11, 600}, + dictWord{136, 10, 254}, + dictWord{6, 0, 848}, + dictWord{135, 0, 1956}, + dictWord{6, 11, 511}, + dictWord{ + 140, + 11, + 132, + }, + dictWord{5, 11, 568}, + dictWord{6, 11, 138}, + dictWord{135, 11, 1293}, + dictWord{6, 0, 631}, + dictWord{137, 0, 838}, + dictWord{149, 0, 36}, + dictWord{ + 4, + 11, + 565, + }, + dictWord{8, 11, 23}, + dictWord{136, 11, 827}, + dictWord{5, 0, 944}, + dictWord{134, 0, 1769}, + dictWord{4, 0, 144}, + dictWord{6, 0, 842}, + dictWord{ + 6, + 0, + 1400, + }, + dictWord{4, 11, 922}, + dictWord{133, 11, 1023}, + dictWord{133, 10, 248}, + dictWord{9, 10, 800}, + dictWord{10, 10, 693}, + dictWord{11, 10, 482}, + dictWord{11, 10, 734}, + dictWord{139, 10, 789}, + dictWord{7, 11, 1002}, + dictWord{139, 11, 145}, + dictWord{4, 10, 116}, + dictWord{5, 10, 95}, + dictWord{5, 10, 445}, + dictWord{7, 10, 1688}, + dictWord{8, 10, 29}, + dictWord{9, 10, 272}, + dictWord{11, 10, 509}, + dictWord{139, 10, 915}, + dictWord{14, 0, 369}, + dictWord{146, 0, 72}, + dictWord{135, 10, 1641}, + dictWord{132, 11, 740}, + dictWord{133, 10, 543}, + dictWord{140, 11, 116}, + dictWord{6, 0, 247}, + dictWord{9, 0, 555}, + dictWord{ + 5, + 10, + 181, + }, + dictWord{136, 10, 41}, + dictWord{133, 10, 657}, + dictWord{136, 0, 996}, + dictWord{138, 10, 709}, + dictWord{7, 0, 189}, + dictWord{8, 10, 202}, + dictWord{ + 138, + 10, + 536, + }, + dictWord{136, 11, 402}, + dictWord{4, 11, 716}, + dictWord{141, 11, 31}, + dictWord{10, 0, 280}, + dictWord{138, 0, 797}, + dictWord{9, 10, 423}, + dictWord{140, 10, 89}, + dictWord{8, 10, 113}, + dictWord{9, 10, 877}, + dictWord{10, 10, 554}, + dictWord{11, 10, 83}, + dictWord{12, 10, 136}, + dictWord{147, 10, 109}, + dictWord{133, 10, 976}, + dictWord{7, 0, 746}, + dictWord{132, 10, 206}, + dictWord{136, 0, 526}, + dictWord{139, 0, 345}, + dictWord{136, 0, 1017}, + dictWord{ + 8, + 11, + 152, + }, + dictWord{9, 11, 53}, + dictWord{9, 11, 268}, + dictWord{9, 11, 901}, + dictWord{10, 11, 518}, + dictWord{10, 11, 829}, + dictWord{11, 11, 188}, + dictWord{ + 13, + 11, + 74, + }, + dictWord{14, 11, 46}, + dictWord{15, 11, 17}, + dictWord{15, 11, 33}, + dictWord{17, 11, 40}, + dictWord{18, 11, 36}, + dictWord{19, 11, 20}, + dictWord{22, 11, 1}, + dictWord{152, 11, 2}, + dictWord{133, 11, 736}, + dictWord{136, 11, 532}, + dictWord{5, 0, 428}, + dictWord{138, 0, 651}, + dictWord{135, 11, 681}, + dictWord{ + 135, + 0, + 1162, + }, + dictWord{7, 0, 327}, + dictWord{13, 0, 230}, + dictWord{17, 0, 113}, + dictWord{8, 10, 226}, + dictWord{10, 10, 537}, + dictWord{11, 10, 570}, + dictWord{ + 11, + 10, + 605, + }, + dictWord{11, 10, 799}, + dictWord{11, 10, 804}, + dictWord{12, 10, 85}, + dictWord{12, 10, 516}, + dictWord{12, 10, 623}, + dictWord{12, 11, 677}, + dictWord{ + 13, + 10, + 361, + }, + dictWord{14, 10, 77}, + dictWord{14, 10, 78}, + dictWord{147, 10, 110}, + dictWord{4, 0, 792}, + dictWord{7, 0, 1717}, + dictWord{10, 0, 546}, + dictWord{ + 132, + 10, + 769, + }, + dictWord{4, 11, 684}, + dictWord{136, 11, 384}, + dictWord{132, 10, 551}, + dictWord{134, 0, 1203}, + dictWord{9, 10, 57}, + dictWord{9, 10, 459}, + dictWord{10, 10, 425}, + dictWord{11, 10, 119}, + dictWord{12, 10, 184}, + dictWord{12, 10, 371}, + dictWord{13, 10, 358}, + dictWord{145, 10, 51}, + dictWord{5, 0, 672}, + dictWord{5, 10, 814}, + dictWord{8, 10, 10}, + dictWord{9, 10, 421}, + dictWord{9, 10, 729}, + dictWord{10, 10, 609}, + dictWord{139, 10, 689}, + dictWord{138, 0, 189}, + dictWord{134, 10, 624}, + dictWord{7, 11, 110}, + dictWord{7, 11, 188}, + dictWord{8, 11, 290}, + dictWord{8, 11, 591}, + dictWord{9, 11, 382}, + dictWord{9, 11, 649}, + dictWord{11, 11, 71}, + dictWord{11, 11, 155}, + dictWord{11, 11, 313}, + dictWord{12, 11, 5}, + dictWord{13, 11, 325}, + dictWord{142, 11, 287}, + dictWord{133, 0, 99}, + dictWord{6, 0, 1053}, + dictWord{135, 0, 298}, + dictWord{7, 11, 360}, + dictWord{7, 11, 425}, + dictWord{9, 11, 66}, + dictWord{9, 11, 278}, + dictWord{138, 11, 644}, + dictWord{4, 0, 397}, + dictWord{136, 0, 555}, + dictWord{137, 10, 269}, + dictWord{132, 10, 528}, + dictWord{4, 11, 900}, + dictWord{133, 11, 861}, + dictWord{ + 6, + 0, + 1157, + }, + dictWord{5, 11, 254}, + dictWord{7, 11, 985}, + dictWord{136, 11, 73}, + dictWord{7, 11, 1959}, + dictWord{136, 11, 683}, + dictWord{12, 0, 398}, + dictWord{ + 20, + 0, + 39, + }, + dictWord{21, 0, 11}, + dictWord{150, 0, 41}, + dictWord{4, 0, 485}, + dictWord{7, 0, 353}, + dictWord{135, 0, 1523}, + dictWord{6, 0, 366}, + dictWord{7, 0, 1384}, + dictWord{135, 0, 1601}, + dictWord{138, 0, 787}, + dictWord{137, 0, 282}, + dictWord{5, 10, 104}, + dictWord{6, 10, 173}, + dictWord{135, 10, 1631}, + dictWord{ + 139, + 11, + 146, + }, + dictWord{4, 0, 157}, + dictWord{133, 0, 471}, + dictWord{134, 0, 941}, + dictWord{132, 11, 725}, + dictWord{7, 0, 1336}, + dictWord{8, 10, 138}, + dictWord{ + 8, + 10, + 342, + }, + dictWord{9, 10, 84}, + dictWord{10, 10, 193}, + dictWord{11, 10, 883}, + dictWord{140, 10, 359}, + dictWord{134, 11, 196}, + dictWord{136, 0, 116}, + dictWord{133, 11, 831}, + dictWord{134, 0, 787}, + dictWord{134, 10, 95}, + dictWord{6, 10, 406}, + dictWord{10, 10, 409}, + dictWord{10, 10, 447}, + dictWord{ + 11, + 10, + 44, + }, + dictWord{140, 10, 100}, + dictWord{5, 0, 160}, + dictWord{7, 0, 363}, + dictWord{7, 0, 589}, + dictWord{10, 0, 170}, + dictWord{141, 0, 55}, + dictWord{134, 0, 1815}, + dictWord{132, 0, 866}, + dictWord{6, 0, 889}, + dictWord{6, 0, 1067}, + dictWord{6, 0, 1183}, + dictWord{4, 11, 321}, + dictWord{134, 11, 569}, + dictWord{5, 11, 848}, + dictWord{134, 11, 66}, + dictWord{4, 11, 36}, + dictWord{6, 10, 1636}, + dictWord{7, 11, 1387}, + dictWord{10, 11, 205}, + dictWord{11, 11, 755}, + dictWord{ + 141, + 11, + 271, + }, + dictWord{132, 0, 689}, + dictWord{9, 0, 820}, + dictWord{4, 10, 282}, + dictWord{7, 10, 1034}, + dictWord{11, 10, 398}, + dictWord{11, 10, 634}, + dictWord{ + 12, + 10, + 1, + }, + dictWord{12, 10, 79}, + dictWord{12, 10, 544}, + dictWord{14, 10, 237}, + dictWord{17, 10, 10}, + dictWord{146, 10, 20}, + dictWord{4, 0, 108}, + dictWord{7, 0, 804}, + dictWord{139, 0, 498}, + dictWord{132, 11, 887}, + dictWord{6, 0, 1119}, + dictWord{135, 11, 620}, + dictWord{6, 11, 165}, + dictWord{138, 11, 388}, + dictWord{ + 5, + 0, + 244, + }, + dictWord{5, 10, 499}, + dictWord{6, 10, 476}, + dictWord{7, 10, 600}, + dictWord{7, 10, 888}, + dictWord{135, 10, 1096}, + dictWord{140, 0, 609}, + dictWord{ + 135, + 0, + 1005, + }, + dictWord{4, 0, 412}, + dictWord{133, 0, 581}, + dictWord{4, 11, 719}, + dictWord{135, 11, 155}, + dictWord{7, 10, 296}, + dictWord{7, 10, 596}, + dictWord{ + 8, + 10, + 560, + }, + dictWord{8, 10, 586}, + dictWord{9, 10, 612}, + dictWord{11, 10, 304}, + dictWord{12, 10, 46}, + dictWord{13, 10, 89}, + dictWord{14, 10, 112}, + dictWord{ + 145, + 10, + 122, + }, + dictWord{4, 0, 895}, + dictWord{133, 0, 772}, + dictWord{142, 11, 307}, + dictWord{135, 0, 1898}, + dictWord{4, 0, 926}, + dictWord{133, 0, 983}, + dictWord{4, 11, 353}, + dictWord{6, 11, 146}, + dictWord{6, 11, 1789}, + dictWord{7, 11, 288}, + dictWord{7, 11, 990}, + dictWord{7, 11, 1348}, + dictWord{9, 11, 665}, + dictWord{ + 9, + 11, + 898, + }, + dictWord{11, 11, 893}, + dictWord{142, 11, 212}, + dictWord{132, 0, 538}, + dictWord{133, 11, 532}, + dictWord{6, 0, 294}, + dictWord{7, 0, 1267}, + dictWord{8, 0, 624}, + dictWord{141, 0, 496}, + dictWord{7, 0, 1325}, + dictWord{4, 11, 45}, + dictWord{135, 11, 1257}, + dictWord{138, 0, 301}, + dictWord{9, 0, 298}, + dictWord{12, 0, 291}, + dictWord{13, 0, 276}, + dictWord{14, 0, 6}, + dictWord{17, 0, 18}, + dictWord{21, 0, 32}, + dictWord{7, 10, 1599}, + dictWord{7, 10, 1723}, + dictWord{ + 8, + 10, + 79, + }, + dictWord{8, 10, 106}, + dictWord{8, 10, 190}, + dictWord{8, 10, 302}, + dictWord{8, 10, 383}, + dictWord{8, 10, 713}, + dictWord{9, 10, 119}, + dictWord{9, 10, 233}, + dictWord{9, 10, 419}, + dictWord{9, 10, 471}, + dictWord{10, 10, 181}, + dictWord{10, 10, 406}, + dictWord{11, 10, 57}, + dictWord{11, 10, 85}, + dictWord{11, 10, 120}, + dictWord{11, 10, 177}, + dictWord{11, 10, 296}, + dictWord{11, 10, 382}, + dictWord{11, 10, 454}, + dictWord{11, 10, 758}, + dictWord{11, 10, 999}, + dictWord{ + 12, + 10, + 27, + }, + dictWord{12, 10, 131}, + dictWord{12, 10, 245}, + dictWord{12, 10, 312}, + dictWord{12, 10, 446}, + dictWord{12, 10, 454}, + dictWord{13, 10, 98}, + dictWord{ + 13, + 10, + 426, + }, + dictWord{13, 10, 508}, + dictWord{14, 10, 163}, + dictWord{14, 10, 272}, + dictWord{14, 10, 277}, + dictWord{14, 10, 370}, + dictWord{15, 10, 95}, + dictWord{15, 10, 138}, + dictWord{15, 10, 167}, + dictWord{17, 10, 38}, + dictWord{148, 10, 96}, + dictWord{132, 0, 757}, + dictWord{134, 0, 1263}, + dictWord{4, 0, 820}, + dictWord{134, 10, 1759}, + dictWord{133, 0, 722}, + dictWord{136, 11, 816}, + dictWord{138, 10, 372}, + dictWord{145, 10, 16}, + dictWord{134, 0, 1039}, + dictWord{ + 4, + 0, + 991, + }, + dictWord{134, 0, 2028}, + dictWord{133, 10, 258}, + dictWord{7, 0, 1875}, + dictWord{139, 0, 124}, + dictWord{6, 11, 559}, + dictWord{6, 11, 1691}, + dictWord{135, 11, 586}, + dictWord{5, 0, 324}, + dictWord{7, 0, 881}, + dictWord{8, 10, 134}, + dictWord{9, 10, 788}, + dictWord{140, 10, 438}, + dictWord{7, 11, 1823}, + dictWord{139, 11, 693}, + dictWord{6, 0, 1348}, + dictWord{134, 0, 1545}, + dictWord{134, 0, 911}, + dictWord{132, 0, 954}, + dictWord{8, 0, 329}, + dictWord{8, 0, 414}, + dictWord{7, 10, 1948}, + dictWord{135, 10, 2004}, + dictWord{5, 0, 517}, + dictWord{6, 10, 439}, + dictWord{7, 10, 780}, + dictWord{135, 10, 1040}, + dictWord{ + 132, + 0, + 816, + }, + dictWord{5, 10, 1}, + dictWord{6, 10, 81}, + dictWord{138, 10, 520}, + dictWord{9, 0, 713}, + dictWord{10, 0, 222}, + dictWord{5, 10, 482}, + dictWord{8, 10, 98}, + dictWord{10, 10, 700}, + dictWord{10, 10, 822}, + dictWord{11, 10, 302}, + dictWord{11, 10, 778}, + dictWord{12, 10, 50}, + dictWord{12, 10, 127}, + dictWord{12, 10, 396}, + dictWord{13, 10, 62}, + dictWord{13, 10, 328}, + dictWord{14, 10, 122}, + dictWord{147, 10, 72}, + dictWord{137, 0, 33}, + dictWord{5, 10, 2}, + dictWord{7, 10, 1494}, + dictWord{136, 10, 589}, + dictWord{6, 10, 512}, + dictWord{7, 10, 797}, + dictWord{8, 10, 253}, + dictWord{9, 10, 77}, + dictWord{10, 10, 1}, + dictWord{10, 11, 108}, + dictWord{10, 10, 129}, + dictWord{10, 10, 225}, + dictWord{11, 11, 116}, + dictWord{11, 10, 118}, + dictWord{11, 10, 226}, + dictWord{11, 10, 251}, + dictWord{ + 11, + 10, + 430, + }, + dictWord{11, 10, 701}, + dictWord{11, 10, 974}, + dictWord{11, 10, 982}, + dictWord{12, 10, 64}, + dictWord{12, 10, 260}, + dictWord{12, 10, 488}, + dictWord{ + 140, + 10, + 690, + }, + dictWord{134, 11, 456}, + dictWord{133, 11, 925}, + dictWord{5, 0, 150}, + dictWord{7, 0, 106}, + dictWord{7, 0, 774}, + dictWord{8, 0, 603}, + dictWord{ + 9, + 0, + 593, + }, + dictWord{9, 0, 634}, + dictWord{10, 0, 44}, + dictWord{10, 0, 173}, + dictWord{11, 0, 462}, + dictWord{11, 0, 515}, + dictWord{13, 0, 216}, + dictWord{13, 0, 288}, + dictWord{142, 0, 400}, + dictWord{137, 10, 347}, + dictWord{5, 0, 748}, + dictWord{134, 0, 553}, + dictWord{12, 0, 108}, + dictWord{141, 0, 291}, + dictWord{7, 0, 420}, + dictWord{4, 10, 12}, + dictWord{7, 10, 522}, + dictWord{7, 10, 809}, + dictWord{8, 10, 797}, + dictWord{141, 10, 88}, + dictWord{6, 11, 193}, + dictWord{7, 11, 240}, + dictWord{ + 7, + 11, + 1682, + }, + dictWord{10, 11, 51}, + dictWord{10, 11, 640}, + dictWord{11, 11, 410}, + dictWord{13, 11, 82}, + dictWord{14, 11, 247}, + dictWord{14, 11, 331}, + dictWord{142, 11, 377}, + dictWord{133, 10, 528}, + dictWord{135, 0, 1777}, + dictWord{4, 0, 493}, + dictWord{144, 0, 55}, + dictWord{136, 11, 633}, + dictWord{ + 139, + 0, + 81, + }, + dictWord{6, 0, 980}, + dictWord{136, 0, 321}, + dictWord{148, 10, 109}, + dictWord{5, 10, 266}, + dictWord{9, 10, 290}, + dictWord{9, 10, 364}, + dictWord{ + 10, + 10, + 293, + }, + dictWord{11, 10, 606}, + dictWord{142, 10, 45}, + dictWord{6, 0, 568}, + dictWord{7, 0, 112}, + dictWord{7, 0, 1804}, + dictWord{8, 0, 362}, + dictWord{8, 0, 410}, + dictWord{8, 0, 830}, + dictWord{9, 0, 514}, + dictWord{11, 0, 649}, + dictWord{142, 0, 157}, + dictWord{4, 0, 74}, + dictWord{6, 0, 510}, + dictWord{6, 10, 594}, + dictWord{ + 9, + 10, + 121, + }, + dictWord{10, 10, 49}, + dictWord{10, 10, 412}, + dictWord{139, 10, 834}, + dictWord{134, 0, 838}, + dictWord{136, 10, 748}, + dictWord{132, 10, 466}, + dictWord{132, 0, 625}, + dictWord{135, 11, 1443}, + dictWord{4, 11, 237}, + dictWord{135, 11, 514}, + dictWord{9, 10, 378}, + dictWord{141, 10, 162}, + dictWord{6, 0, 16}, + dictWord{6, 0, 158}, + dictWord{7, 0, 43}, + dictWord{7, 0, 129}, + dictWord{7, 0, 181}, + dictWord{8, 0, 276}, + dictWord{8, 0, 377}, + dictWord{10, 0, 523}, + dictWord{ + 11, + 0, + 816, + }, + dictWord{12, 0, 455}, + dictWord{13, 0, 303}, + dictWord{142, 0, 135}, + dictWord{135, 0, 281}, + dictWord{4, 0, 1}, + dictWord{7, 0, 1143}, + dictWord{7, 0, 1463}, + dictWord{8, 0, 61}, + dictWord{9, 0, 207}, + dictWord{9, 0, 390}, + dictWord{9, 0, 467}, + dictWord{139, 0, 836}, + dictWord{6, 11, 392}, + dictWord{7, 11, 65}, + dictWord{ + 135, + 11, + 2019, + }, + dictWord{132, 10, 667}, + dictWord{4, 0, 723}, + dictWord{5, 0, 895}, + dictWord{7, 0, 1031}, + dictWord{8, 0, 199}, + dictWord{8, 0, 340}, + dictWord{9, 0, 153}, + dictWord{9, 0, 215}, + dictWord{10, 0, 21}, + dictWord{10, 0, 59}, + dictWord{10, 0, 80}, + dictWord{10, 0, 224}, + dictWord{10, 0, 838}, + dictWord{11, 0, 229}, + dictWord{ + 11, + 0, + 652, + }, + dictWord{12, 0, 192}, + dictWord{13, 0, 146}, + dictWord{142, 0, 91}, + dictWord{132, 0, 295}, + dictWord{137, 0, 51}, + dictWord{9, 11, 222}, + dictWord{ + 10, + 11, + 43, + }, + dictWord{139, 11, 900}, + dictWord{5, 0, 309}, + dictWord{140, 0, 211}, + dictWord{5, 0, 125}, + dictWord{8, 0, 77}, + dictWord{138, 0, 15}, + dictWord{136, 11, 604}, + dictWord{138, 0, 789}, + dictWord{5, 0, 173}, + dictWord{4, 10, 39}, + dictWord{7, 10, 1843}, + dictWord{8, 10, 407}, + dictWord{11, 10, 144}, + dictWord{140, 10, 523}, + dictWord{138, 11, 265}, + dictWord{133, 0, 439}, + dictWord{132, 10, 510}, + dictWord{7, 0, 648}, + dictWord{7, 0, 874}, + dictWord{11, 0, 164}, + dictWord{12, 0, 76}, + dictWord{18, 0, 9}, + dictWord{7, 10, 1980}, + dictWord{10, 10, 487}, + dictWord{138, 10, 809}, + dictWord{12, 0, 111}, + dictWord{14, 0, 294}, + dictWord{19, 0, 45}, + dictWord{13, 10, 260}, + dictWord{146, 10, 63}, + dictWord{133, 11, 549}, + dictWord{134, 10, 570}, + dictWord{4, 0, 8}, + dictWord{7, 0, 1152}, + dictWord{7, 0, 1153}, + dictWord{7, 0, 1715}, + dictWord{9, 0, 374}, + dictWord{10, 0, 478}, + dictWord{139, 0, 648}, + dictWord{135, 0, 1099}, + dictWord{5, 0, 575}, + dictWord{6, 0, 354}, + dictWord{ + 135, + 0, + 701, + }, + dictWord{7, 11, 36}, + dictWord{8, 11, 201}, + dictWord{136, 11, 605}, + dictWord{4, 10, 787}, + dictWord{136, 11, 156}, + dictWord{6, 0, 518}, + dictWord{ + 149, + 11, + 13, + }, + dictWord{140, 11, 224}, + dictWord{134, 0, 702}, + dictWord{132, 10, 516}, + dictWord{5, 11, 724}, + dictWord{10, 11, 305}, + dictWord{11, 11, 151}, + dictWord{12, 11, 33}, + dictWord{12, 11, 121}, + dictWord{12, 11, 381}, + dictWord{17, 11, 3}, + dictWord{17, 11, 27}, + dictWord{17, 11, 78}, + dictWord{18, 11, 18}, + dictWord{19, 11, 54}, + dictWord{149, 11, 5}, + dictWord{8, 0, 87}, + dictWord{4, 11, 523}, + dictWord{5, 11, 638}, + dictWord{11, 10, 887}, + dictWord{14, 10, 365}, + dictWord{ + 142, + 10, + 375, + }, + dictWord{138, 0, 438}, + dictWord{136, 10, 821}, + dictWord{135, 11, 1908}, + dictWord{6, 11, 242}, + dictWord{7, 11, 227}, + dictWord{7, 11, 1581}, + dictWord{8, 11, 104}, + dictWord{9, 11, 113}, + dictWord{9, 11, 220}, + dictWord{9, 11, 427}, + dictWord{10, 11, 74}, + dictWord{10, 11, 239}, + dictWord{11, 11, 579}, + dictWord{11, 11, 1023}, + dictWord{13, 11, 4}, + dictWord{13, 11, 204}, + dictWord{13, 11, 316}, + dictWord{18, 11, 95}, + dictWord{148, 11, 86}, + dictWord{4, 0, 69}, + dictWord{5, 0, 122}, + dictWord{5, 0, 849}, + dictWord{6, 0, 1633}, + dictWord{9, 0, 656}, + dictWord{138, 0, 464}, + dictWord{7, 0, 1802}, + dictWord{4, 10, 10}, + dictWord{ + 139, + 10, + 786, + }, + dictWord{135, 11, 861}, + dictWord{139, 0, 499}, + dictWord{7, 0, 476}, + dictWord{7, 0, 1592}, + dictWord{138, 0, 87}, + dictWord{133, 10, 684}, + dictWord{ + 4, + 0, + 840, + }, + dictWord{134, 10, 27}, + dictWord{142, 0, 283}, + dictWord{6, 0, 1620}, + dictWord{7, 11, 1328}, + dictWord{136, 11, 494}, + dictWord{5, 0, 859}, + dictWord{ + 7, + 0, + 1160, + }, + dictWord{8, 0, 107}, + dictWord{9, 0, 291}, + dictWord{9, 0, 439}, + dictWord{10, 0, 663}, + dictWord{11, 0, 609}, + dictWord{140, 0, 197}, + dictWord{ + 7, + 11, + 1306, + }, + dictWord{8, 11, 505}, + dictWord{9, 11, 482}, + dictWord{10, 11, 126}, + dictWord{11, 11, 225}, + dictWord{12, 11, 347}, + dictWord{12, 11, 449}, + dictWord{ + 13, + 11, + 19, + }, + dictWord{142, 11, 218}, + dictWord{5, 11, 268}, + dictWord{10, 11, 764}, + dictWord{12, 11, 120}, + dictWord{13, 11, 39}, + dictWord{145, 11, 127}, + dictWord{145, 10, 56}, + dictWord{7, 11, 1672}, + dictWord{10, 11, 472}, + dictWord{11, 11, 189}, + dictWord{143, 11, 51}, + dictWord{6, 10, 342}, + dictWord{6, 10, 496}, + dictWord{8, 10, 275}, + dictWord{137, 10, 206}, + dictWord{133, 0, 600}, + dictWord{4, 0, 117}, + dictWord{6, 0, 372}, + dictWord{7, 0, 1905}, + dictWord{142, 0, 323}, + dictWord{4, 10, 909}, + dictWord{5, 10, 940}, + dictWord{135, 11, 1471}, + dictWord{132, 10, 891}, + dictWord{4, 0, 722}, + dictWord{139, 0, 471}, + dictWord{4, 11, 384}, + dictWord{135, 11, 1022}, + dictWord{132, 10, 687}, + dictWord{9, 0, 5}, + dictWord{12, 0, 216}, + dictWord{12, 0, 294}, + dictWord{12, 0, 298}, + dictWord{12, 0, 400}, + dictWord{12, 0, 518}, + dictWord{13, 0, 229}, + dictWord{143, 0, 139}, + dictWord{135, 11, 1703}, + dictWord{7, 11, 1602}, + dictWord{10, 11, 698}, + dictWord{ + 12, + 11, + 212, + }, + dictWord{141, 11, 307}, + dictWord{6, 10, 41}, + dictWord{141, 10, 160}, + dictWord{135, 11, 1077}, + dictWord{9, 11, 159}, + dictWord{11, 11, 28}, + dictWord{140, 11, 603}, + dictWord{4, 0, 514}, + dictWord{7, 0, 1304}, + dictWord{138, 0, 477}, + dictWord{134, 0, 1774}, + dictWord{9, 0, 88}, + dictWord{139, 0, 270}, + dictWord{5, 0, 12}, + dictWord{7, 0, 375}, + dictWord{9, 0, 438}, + dictWord{134, 10, 1718}, + dictWord{132, 11, 515}, + dictWord{136, 10, 778}, + dictWord{8, 11, 632}, + dictWord{8, 11, 697}, + dictWord{137, 11, 854}, + dictWord{6, 0, 362}, + dictWord{6, 0, 997}, + dictWord{146, 0, 51}, + dictWord{7, 0, 816}, + dictWord{7, 0, 1241}, + dictWord{ + 9, + 0, + 283, + }, + dictWord{9, 0, 520}, + dictWord{10, 0, 213}, + dictWord{10, 0, 307}, + dictWord{10, 0, 463}, + dictWord{10, 0, 671}, + dictWord{10, 0, 746}, + dictWord{11, 0, 401}, + dictWord{11, 0, 794}, + dictWord{12, 0, 517}, + dictWord{18, 0, 107}, + dictWord{147, 0, 115}, + dictWord{133, 10, 115}, + dictWord{150, 11, 28}, + dictWord{4, 11, 136}, + dictWord{133, 11, 551}, + dictWord{142, 10, 314}, + dictWord{132, 0, 258}, + dictWord{6, 0, 22}, + dictWord{7, 0, 903}, + dictWord{7, 0, 1963}, + dictWord{8, 0, 639}, + dictWord{138, 0, 577}, + dictWord{5, 0, 681}, + dictWord{8, 0, 782}, + dictWord{13, 0, 130}, + dictWord{17, 0, 84}, + dictWord{5, 10, 193}, + dictWord{140, 10, 178}, + dictWord{ + 9, + 11, + 17, + }, + dictWord{138, 11, 291}, + dictWord{7, 11, 1287}, + dictWord{9, 11, 44}, + dictWord{10, 11, 552}, + dictWord{10, 11, 642}, + dictWord{11, 11, 839}, + dictWord{12, 11, 274}, + dictWord{12, 11, 275}, + dictWord{12, 11, 372}, + dictWord{13, 11, 91}, + dictWord{142, 11, 125}, + dictWord{135, 10, 174}, + dictWord{4, 0, 664}, + dictWord{5, 0, 804}, + dictWord{139, 0, 1013}, + dictWord{134, 0, 942}, + dictWord{6, 0, 1349}, + dictWord{6, 0, 1353}, + dictWord{6, 0, 1450}, + dictWord{7, 11, 1518}, + dictWord{139, 11, 694}, + dictWord{11, 0, 356}, + dictWord{4, 10, 122}, + dictWord{5, 10, 796}, + dictWord{5, 10, 952}, + dictWord{6, 10, 1660}, + dictWord{ + 6, + 10, + 1671, + }, + dictWord{8, 10, 567}, + dictWord{9, 10, 687}, + dictWord{9, 10, 742}, + dictWord{10, 10, 686}, + dictWord{11, 10, 682}, + dictWord{140, 10, 281}, + dictWord{ + 5, + 0, + 32, + }, + dictWord{6, 11, 147}, + dictWord{7, 11, 886}, + dictWord{9, 11, 753}, + dictWord{138, 11, 268}, + dictWord{5, 10, 179}, + dictWord{7, 10, 1095}, + dictWord{ + 135, + 10, + 1213, + }, + dictWord{4, 10, 66}, + dictWord{7, 10, 722}, + dictWord{135, 10, 904}, + dictWord{135, 10, 352}, + dictWord{9, 11, 245}, + dictWord{138, 11, 137}, + dictWord{4, 0, 289}, + dictWord{7, 0, 629}, + dictWord{7, 0, 1698}, + dictWord{7, 0, 1711}, + dictWord{12, 0, 215}, + dictWord{133, 11, 414}, + dictWord{6, 0, 1975}, + dictWord{135, 11, 1762}, + dictWord{6, 0, 450}, + dictWord{136, 0, 109}, + dictWord{141, 10, 35}, + dictWord{134, 11, 599}, + dictWord{136, 0, 705}, + dictWord{ + 133, + 0, + 664, + }, + dictWord{134, 11, 1749}, + dictWord{11, 11, 402}, + dictWord{12, 11, 109}, + dictWord{12, 11, 431}, + dictWord{13, 11, 179}, + dictWord{13, 11, 206}, + dictWord{14, 11, 175}, + dictWord{14, 11, 217}, + dictWord{16, 11, 3}, + dictWord{148, 11, 53}, + dictWord{135, 0, 1238}, + dictWord{134, 11, 1627}, + dictWord{ + 132, + 11, + 488, + }, + dictWord{13, 0, 318}, + dictWord{10, 10, 592}, + dictWord{10, 10, 753}, + dictWord{12, 10, 317}, + dictWord{12, 10, 355}, + dictWord{12, 10, 465}, + dictWord{ + 12, + 10, + 469, + }, + dictWord{12, 10, 560}, + dictWord{140, 10, 578}, + dictWord{133, 10, 564}, + dictWord{132, 11, 83}, + dictWord{140, 11, 676}, + dictWord{6, 0, 1872}, + dictWord{6, 0, 1906}, + dictWord{6, 0, 1907}, + dictWord{9, 0, 934}, + dictWord{9, 0, 956}, + dictWord{9, 0, 960}, + dictWord{9, 0, 996}, + dictWord{12, 0, 794}, + dictWord{ + 12, + 0, + 876, + }, + dictWord{12, 0, 880}, + dictWord{12, 0, 918}, + dictWord{15, 0, 230}, + dictWord{18, 0, 234}, + dictWord{18, 0, 238}, + dictWord{21, 0, 38}, + dictWord{149, 0, 62}, + dictWord{134, 10, 556}, + dictWord{134, 11, 278}, + dictWord{137, 0, 103}, + dictWord{7, 10, 544}, + dictWord{8, 10, 719}, + dictWord{138, 10, 61}, + dictWord{ + 4, + 10, + 5, + }, + dictWord{5, 10, 498}, + dictWord{8, 10, 637}, + dictWord{137, 10, 521}, + dictWord{7, 0, 777}, + dictWord{12, 0, 229}, + dictWord{12, 0, 239}, + dictWord{15, 0, 12}, + dictWord{12, 11, 229}, + dictWord{12, 11, 239}, + dictWord{143, 11, 12}, + dictWord{6, 0, 26}, + dictWord{7, 11, 388}, + dictWord{7, 11, 644}, + dictWord{139, 11, 781}, + dictWord{7, 11, 229}, + dictWord{8, 11, 59}, + dictWord{9, 11, 190}, + dictWord{9, 11, 257}, + dictWord{10, 11, 378}, + dictWord{140, 11, 191}, + dictWord{133, 10, 927}, + dictWord{135, 10, 1441}, + dictWord{4, 10, 893}, + dictWord{5, 10, 780}, + dictWord{133, 10, 893}, + dictWord{4, 0, 414}, + dictWord{5, 0, 467}, + dictWord{9, 0, 654}, + dictWord{10, 0, 451}, + dictWord{12, 0, 59}, + dictWord{141, 0, 375}, + dictWord{142, 0, 173}, + dictWord{135, 0, 17}, + dictWord{7, 0, 1350}, + dictWord{133, 10, 238}, + dictWord{135, 0, 955}, + dictWord{4, 0, 960}, + dictWord{10, 0, 887}, + dictWord{12, 0, 753}, + dictWord{18, 0, 161}, + dictWord{18, 0, 162}, + dictWord{152, 0, 19}, + dictWord{136, 11, 344}, + dictWord{6, 10, 1729}, + dictWord{137, 11, 288}, + dictWord{132, 11, 660}, + dictWord{4, 0, 217}, + dictWord{5, 0, 710}, + dictWord{7, 0, 760}, + dictWord{7, 0, 1926}, + dictWord{9, 0, 428}, + dictWord{9, 0, 708}, + dictWord{10, 0, 254}, + dictWord{10, 0, 296}, + dictWord{10, 0, 720}, + dictWord{11, 0, 109}, + dictWord{ + 11, + 0, + 255, + }, + dictWord{12, 0, 165}, + dictWord{12, 0, 315}, + dictWord{13, 0, 107}, + dictWord{13, 0, 203}, + dictWord{14, 0, 54}, + dictWord{14, 0, 99}, + dictWord{14, 0, 114}, + dictWord{14, 0, 388}, + dictWord{16, 0, 85}, + dictWord{17, 0, 9}, + dictWord{17, 0, 33}, + dictWord{20, 0, 25}, + dictWord{20, 0, 28}, + dictWord{20, 0, 29}, + dictWord{21, 0, 9}, + dictWord{21, 0, 10}, + dictWord{21, 0, 34}, + dictWord{22, 0, 17}, + dictWord{4, 10, 60}, + dictWord{7, 10, 1800}, + dictWord{8, 10, 314}, + dictWord{9, 10, 700}, + dictWord{ + 139, + 10, + 487, + }, + dictWord{7, 11, 1035}, + dictWord{138, 11, 737}, + dictWord{7, 11, 690}, + dictWord{9, 11, 217}, + dictWord{9, 11, 587}, + dictWord{140, 11, 521}, + dictWord{6, 0, 919}, + dictWord{7, 11, 706}, + dictWord{7, 11, 1058}, + dictWord{138, 11, 538}, + dictWord{7, 10, 1853}, + dictWord{138, 10, 437}, + dictWord{ + 136, + 10, + 419, + }, + dictWord{6, 0, 280}, + dictWord{10, 0, 502}, + dictWord{11, 0, 344}, + dictWord{140, 0, 38}, + dictWord{5, 0, 45}, + dictWord{7, 0, 1161}, + dictWord{11, 0, 448}, + dictWord{11, 0, 880}, + dictWord{13, 0, 139}, + dictWord{13, 0, 407}, + dictWord{15, 0, 16}, + dictWord{17, 0, 95}, + dictWord{18, 0, 66}, + dictWord{18, 0, 88}, + dictWord{ + 18, + 0, + 123, + }, + dictWord{149, 0, 7}, + dictWord{11, 11, 92}, + dictWord{11, 11, 196}, + dictWord{11, 11, 409}, + dictWord{11, 11, 450}, + dictWord{11, 11, 666}, + dictWord{ + 11, + 11, + 777, + }, + dictWord{12, 11, 262}, + dictWord{13, 11, 385}, + dictWord{13, 11, 393}, + dictWord{15, 11, 115}, + dictWord{16, 11, 45}, + dictWord{145, 11, 82}, + dictWord{136, 0, 777}, + dictWord{134, 11, 1744}, + dictWord{4, 0, 410}, + dictWord{7, 0, 521}, + dictWord{133, 10, 828}, + dictWord{134, 0, 673}, + dictWord{7, 0, 1110}, + dictWord{7, 0, 1778}, + dictWord{7, 10, 176}, + dictWord{135, 10, 178}, + dictWord{5, 10, 806}, + dictWord{7, 11, 268}, + dictWord{7, 10, 1976}, + dictWord{ + 136, + 11, + 569, + }, + dictWord{4, 11, 733}, + dictWord{9, 11, 194}, + dictWord{10, 11, 92}, + dictWord{11, 11, 198}, + dictWord{12, 11, 84}, + dictWord{12, 11, 87}, + dictWord{ + 13, + 11, + 128, + }, + dictWord{144, 11, 74}, + dictWord{5, 0, 341}, + dictWord{7, 0, 1129}, + dictWord{11, 0, 414}, + dictWord{4, 10, 51}, + dictWord{6, 10, 4}, + dictWord{7, 10, 591}, + dictWord{7, 10, 849}, + dictWord{7, 10, 951}, + dictWord{7, 10, 1613}, + dictWord{7, 10, 1760}, + dictWord{7, 10, 1988}, + dictWord{9, 10, 434}, + dictWord{10, 10, 754}, + dictWord{11, 10, 25}, + dictWord{139, 10, 37}, + dictWord{133, 10, 902}, + dictWord{135, 10, 928}, + dictWord{135, 0, 787}, + dictWord{132, 0, 436}, + dictWord{ + 134, + 10, + 270, + }, + dictWord{7, 0, 1587}, + dictWord{135, 0, 1707}, + dictWord{6, 0, 377}, + dictWord{7, 0, 1025}, + dictWord{9, 0, 613}, + dictWord{145, 0, 104}, + dictWord{ + 7, + 11, + 982, + }, + dictWord{7, 11, 1361}, + dictWord{10, 11, 32}, + dictWord{143, 11, 56}, + dictWord{139, 0, 96}, + dictWord{132, 0, 451}, + dictWord{132, 10, 416}, + dictWord{ + 142, + 10, + 372, + }, + dictWord{5, 10, 152}, + dictWord{5, 10, 197}, + dictWord{7, 11, 306}, + dictWord{7, 10, 340}, + dictWord{7, 10, 867}, + dictWord{10, 10, 548}, + dictWord{ + 10, + 10, + 581, + }, + dictWord{11, 10, 6}, + dictWord{12, 10, 3}, + dictWord{12, 10, 19}, + dictWord{14, 10, 110}, + dictWord{142, 10, 289}, + dictWord{134, 0, 680}, + dictWord{ + 134, + 11, + 609, + }, + dictWord{7, 0, 483}, + dictWord{7, 10, 190}, + dictWord{8, 10, 28}, + dictWord{8, 10, 141}, + dictWord{8, 10, 444}, + dictWord{8, 10, 811}, + dictWord{ + 9, + 10, + 468, + }, + dictWord{11, 10, 334}, + dictWord{12, 10, 24}, + dictWord{12, 10, 386}, + dictWord{140, 10, 576}, + dictWord{10, 0, 916}, + dictWord{133, 10, 757}, + dictWord{ + 5, + 10, + 721, + }, + dictWord{135, 10, 1553}, + dictWord{133, 11, 178}, + dictWord{134, 0, 937}, + dictWord{132, 10, 898}, + dictWord{133, 0, 739}, + dictWord{ + 147, + 0, + 82, + }, + dictWord{135, 0, 663}, + dictWord{146, 0, 128}, + dictWord{5, 10, 277}, + dictWord{141, 10, 247}, + dictWord{134, 0, 1087}, + dictWord{132, 10, 435}, + dictWord{ + 6, + 11, + 381, + }, + dictWord{7, 11, 645}, + dictWord{7, 11, 694}, + dictWord{136, 11, 546}, + dictWord{7, 0, 503}, + dictWord{135, 0, 1885}, + dictWord{6, 0, 1965}, + dictWord{ + 8, + 0, + 925, + }, + dictWord{138, 0, 955}, + dictWord{4, 0, 113}, + dictWord{5, 0, 163}, + dictWord{5, 0, 735}, + dictWord{7, 0, 1009}, + dictWord{9, 0, 9}, + dictWord{9, 0, 771}, + dictWord{12, 0, 90}, + dictWord{13, 0, 138}, + dictWord{13, 0, 410}, + dictWord{143, 0, 128}, + dictWord{4, 0, 324}, + dictWord{138, 0, 104}, + dictWord{7, 0, 460}, + dictWord{ + 5, + 10, + 265, + }, + dictWord{134, 10, 212}, + dictWord{133, 11, 105}, + dictWord{7, 11, 261}, + dictWord{7, 11, 1107}, + dictWord{7, 11, 1115}, + dictWord{7, 11, 1354}, + dictWord{7, 11, 1588}, + dictWord{7, 11, 1705}, + dictWord{7, 11, 1902}, + dictWord{9, 11, 465}, + dictWord{10, 11, 248}, + dictWord{10, 11, 349}, + dictWord{10, 11, 647}, + dictWord{11, 11, 527}, + dictWord{11, 11, 660}, + dictWord{11, 11, 669}, + dictWord{12, 11, 529}, + dictWord{141, 11, 305}, + dictWord{5, 11, 438}, + dictWord{ + 9, + 11, + 694, + }, + dictWord{12, 11, 627}, + dictWord{141, 11, 210}, + dictWord{152, 11, 11}, + dictWord{4, 0, 935}, + dictWord{133, 0, 823}, + dictWord{132, 10, 702}, + dictWord{ + 5, + 0, + 269, + }, + dictWord{7, 0, 434}, + dictWord{7, 0, 891}, + dictWord{8, 0, 339}, + dictWord{9, 0, 702}, + dictWord{11, 0, 594}, + dictWord{11, 0, 718}, + dictWord{17, 0, 100}, + dictWord{5, 10, 808}, + dictWord{135, 10, 2045}, + dictWord{7, 0, 1014}, + dictWord{9, 0, 485}, + dictWord{141, 0, 264}, + dictWord{134, 0, 1713}, + dictWord{7, 0, 1810}, + dictWord{11, 0, 866}, + dictWord{12, 0, 103}, + dictWord{13, 0, 495}, + dictWord{140, 11, 233}, + dictWord{4, 0, 423}, + dictWord{10, 0, 949}, + dictWord{138, 0, 1013}, + dictWord{135, 0, 900}, + dictWord{8, 11, 25}, + dictWord{138, 11, 826}, + dictWord{5, 10, 166}, + dictWord{8, 10, 739}, + dictWord{140, 10, 511}, + dictWord{ + 134, + 0, + 2018, + }, + dictWord{7, 11, 1270}, + dictWord{139, 11, 612}, + dictWord{4, 10, 119}, + dictWord{5, 10, 170}, + dictWord{5, 10, 447}, + dictWord{7, 10, 1708}, + dictWord{ + 7, + 10, + 1889, + }, + dictWord{9, 10, 357}, + dictWord{9, 10, 719}, + dictWord{12, 10, 486}, + dictWord{140, 10, 596}, + dictWord{12, 0, 574}, + dictWord{140, 11, 574}, + dictWord{132, 11, 308}, + dictWord{6, 0, 964}, + dictWord{6, 0, 1206}, + dictWord{134, 0, 1302}, + dictWord{4, 10, 450}, + dictWord{135, 10, 1158}, + dictWord{ + 135, + 11, + 150, + }, + dictWord{136, 11, 649}, + dictWord{14, 0, 213}, + dictWord{148, 0, 38}, + dictWord{9, 11, 45}, + dictWord{9, 11, 311}, + dictWord{141, 11, 42}, + dictWord{ + 134, + 11, + 521, + }, + dictWord{7, 10, 1375}, + dictWord{7, 10, 1466}, + dictWord{138, 10, 331}, + dictWord{132, 10, 754}, + dictWord{5, 11, 339}, + dictWord{7, 11, 1442}, + dictWord{14, 11, 3}, + dictWord{15, 11, 41}, + dictWord{147, 11, 66}, + dictWord{136, 11, 378}, + dictWord{134, 0, 1022}, + dictWord{5, 10, 850}, + dictWord{136, 10, 799}, + dictWord{142, 0, 143}, + dictWord{135, 0, 2029}, + dictWord{134, 11, 1628}, + dictWord{8, 0, 523}, + dictWord{150, 0, 34}, + dictWord{5, 0, 625}, + dictWord{ + 135, + 0, + 1617, + }, + dictWord{7, 0, 275}, + dictWord{7, 10, 238}, + dictWord{7, 10, 2033}, + dictWord{8, 10, 120}, + dictWord{8, 10, 188}, + dictWord{8, 10, 659}, + dictWord{ + 9, + 10, + 598, + }, + dictWord{10, 10, 466}, + dictWord{12, 10, 342}, + dictWord{12, 10, 588}, + dictWord{13, 10, 503}, + dictWord{14, 10, 246}, + dictWord{143, 10, 92}, + dictWord{ + 7, + 0, + 37, + }, + dictWord{8, 0, 425}, + dictWord{8, 0, 693}, + dictWord{9, 0, 720}, + dictWord{10, 0, 380}, + dictWord{10, 0, 638}, + dictWord{11, 0, 273}, + dictWord{11, 0, 473}, + dictWord{12, 0, 61}, + dictWord{143, 0, 43}, + dictWord{135, 11, 829}, + dictWord{135, 0, 1943}, + dictWord{132, 0, 765}, + dictWord{5, 11, 486}, + dictWord{ + 135, + 11, + 1349, + }, + dictWord{7, 11, 1635}, + dictWord{8, 11, 17}, + dictWord{10, 11, 217}, + dictWord{138, 11, 295}, + dictWord{4, 10, 201}, + dictWord{7, 10, 1744}, + dictWord{ + 8, + 10, + 602, + }, + dictWord{11, 10, 247}, + dictWord{11, 10, 826}, + dictWord{145, 10, 65}, + dictWord{138, 11, 558}, + dictWord{11, 0, 551}, + dictWord{142, 0, 159}, + dictWord{8, 10, 164}, + dictWord{146, 10, 62}, + dictWord{139, 11, 176}, + dictWord{132, 0, 168}, + dictWord{136, 0, 1010}, + dictWord{134, 0, 1994}, + dictWord{ + 135, + 0, + 91, + }, + dictWord{138, 0, 532}, + dictWord{135, 10, 1243}, + dictWord{135, 0, 1884}, + dictWord{132, 10, 907}, + dictWord{5, 10, 100}, + dictWord{10, 10, 329}, + dictWord{12, 10, 416}, + dictWord{149, 10, 29}, + dictWord{134, 11, 447}, + dictWord{132, 10, 176}, + dictWord{5, 10, 636}, + dictWord{5, 10, 998}, + dictWord{7, 10, 9}, + dictWord{7, 10, 1508}, + dictWord{8, 10, 26}, + dictWord{9, 10, 317}, + dictWord{9, 10, 358}, + dictWord{10, 10, 210}, + dictWord{10, 10, 292}, + dictWord{10, 10, 533}, + dictWord{11, 10, 555}, + dictWord{12, 10, 526}, + dictWord{12, 10, 607}, + dictWord{13, 10, 263}, + dictWord{13, 10, 459}, + dictWord{142, 10, 271}, + dictWord{ + 4, + 11, + 609, + }, + dictWord{135, 11, 756}, + dictWord{6, 0, 15}, + dictWord{7, 0, 70}, + dictWord{10, 0, 240}, + dictWord{147, 0, 93}, + dictWord{4, 11, 930}, + dictWord{133, 11, 947}, + dictWord{134, 0, 1227}, + dictWord{134, 0, 1534}, + dictWord{133, 11, 939}, + dictWord{133, 11, 962}, + dictWord{5, 11, 651}, + dictWord{8, 11, 170}, + dictWord{ + 9, + 11, + 61, + }, + dictWord{9, 11, 63}, + dictWord{10, 11, 23}, + dictWord{10, 11, 37}, + dictWord{10, 11, 834}, + dictWord{11, 11, 4}, + dictWord{11, 11, 187}, + dictWord{ + 11, + 11, + 281, + }, + dictWord{11, 11, 503}, + dictWord{11, 11, 677}, + dictWord{12, 11, 96}, + dictWord{12, 11, 130}, + dictWord{12, 11, 244}, + dictWord{14, 11, 5}, + dictWord{ + 14, + 11, + 40, + }, + dictWord{14, 11, 162}, + dictWord{14, 11, 202}, + dictWord{146, 11, 133}, + dictWord{4, 11, 406}, + dictWord{5, 11, 579}, + dictWord{12, 11, 492}, + dictWord{ + 150, + 11, + 15, + }, + dictWord{139, 0, 392}, + dictWord{6, 10, 610}, + dictWord{10, 10, 127}, + dictWord{141, 10, 27}, + dictWord{7, 0, 655}, + dictWord{7, 0, 1844}, + dictWord{ + 136, + 10, + 119, + }, + dictWord{4, 0, 145}, + dictWord{6, 0, 176}, + dictWord{7, 0, 395}, + dictWord{137, 0, 562}, + dictWord{132, 0, 501}, + dictWord{140, 11, 145}, + dictWord{ + 136, + 0, + 1019, + }, + dictWord{134, 0, 509}, + dictWord{139, 0, 267}, + dictWord{6, 11, 17}, + dictWord{7, 11, 16}, + dictWord{7, 11, 1001}, + dictWord{7, 11, 1982}, + dictWord{ + 9, + 11, + 886, + }, + dictWord{10, 11, 489}, + dictWord{10, 11, 800}, + dictWord{11, 11, 782}, + dictWord{12, 11, 320}, + dictWord{13, 11, 467}, + dictWord{14, 11, 145}, + dictWord{14, 11, 387}, + dictWord{143, 11, 119}, + dictWord{145, 11, 17}, + dictWord{6, 0, 1099}, + dictWord{133, 11, 458}, + dictWord{7, 11, 1983}, + dictWord{8, 11, 0}, + dictWord{8, 11, 171}, + dictWord{9, 11, 120}, + dictWord{9, 11, 732}, + dictWord{10, 11, 473}, + dictWord{11, 11, 656}, + dictWord{11, 11, 998}, + dictWord{18, 11, 0}, + dictWord{18, 11, 2}, + dictWord{147, 11, 21}, + dictWord{12, 11, 427}, + dictWord{146, 11, 38}, + dictWord{10, 0, 948}, + dictWord{138, 0, 968}, + dictWord{7, 10, 126}, + dictWord{136, 10, 84}, + dictWord{136, 10, 790}, + dictWord{4, 0, 114}, + dictWord{9, 0, 492}, + dictWord{13, 0, 462}, + dictWord{142, 0, 215}, + dictWord{6, 10, 64}, + dictWord{12, 10, 377}, + dictWord{141, 10, 309}, + dictWord{4, 0, 77}, + dictWord{5, 0, 361}, + dictWord{6, 0, 139}, + dictWord{6, 0, 401}, + dictWord{6, 0, 404}, + dictWord{ + 7, + 0, + 413, + }, + dictWord{7, 0, 715}, + dictWord{7, 0, 1716}, + dictWord{11, 0, 279}, + dictWord{12, 0, 179}, + dictWord{12, 0, 258}, + dictWord{13, 0, 244}, + dictWord{142, 0, 358}, + dictWord{134, 0, 1717}, + dictWord{7, 0, 772}, + dictWord{7, 0, 1061}, + dictWord{7, 0, 1647}, + dictWord{8, 0, 82}, + dictWord{11, 0, 250}, + dictWord{11, 0, 607}, + dictWord{12, 0, 311}, + dictWord{12, 0, 420}, + dictWord{13, 0, 184}, + dictWord{13, 0, 367}, + dictWord{7, 10, 1104}, + dictWord{11, 10, 269}, + dictWord{11, 10, 539}, + dictWord{11, 10, 627}, + dictWord{11, 10, 706}, + dictWord{11, 10, 975}, + dictWord{12, 10, 248}, + dictWord{12, 10, 434}, + dictWord{12, 10, 600}, + dictWord{ + 12, + 10, + 622, + }, + dictWord{13, 10, 297}, + dictWord{13, 10, 485}, + dictWord{14, 10, 69}, + dictWord{14, 10, 409}, + dictWord{143, 10, 108}, + dictWord{135, 0, 724}, + dictWord{ + 4, + 11, + 512, + }, + dictWord{4, 11, 519}, + dictWord{133, 11, 342}, + dictWord{134, 0, 1133}, + dictWord{145, 11, 29}, + dictWord{11, 10, 977}, + dictWord{141, 10, 507}, + dictWord{6, 0, 841}, + dictWord{6, 0, 1042}, + dictWord{6, 0, 1194}, + dictWord{10, 0, 993}, + dictWord{140, 0, 1021}, + dictWord{6, 11, 31}, + dictWord{7, 11, 491}, + dictWord{7, 11, 530}, + dictWord{8, 11, 592}, + dictWord{9, 10, 34}, + dictWord{11, 11, 53}, + dictWord{11, 10, 484}, + dictWord{11, 11, 779}, + dictWord{12, 11, 167}, + dictWord{12, 11, 411}, + dictWord{14, 11, 14}, + dictWord{14, 11, 136}, + dictWord{15, 11, 72}, + dictWord{16, 11, 17}, + dictWord{144, 11, 72}, + dictWord{4, 0, 1021}, + dictWord{6, 0, 2037}, + dictWord{133, 11, 907}, + dictWord{7, 0, 373}, + dictWord{8, 0, 335}, + dictWord{8, 0, 596}, + dictWord{9, 0, 488}, + dictWord{6, 10, 1700}, + dictWord{ + 7, + 10, + 293, + }, + dictWord{7, 10, 382}, + dictWord{7, 10, 1026}, + dictWord{7, 10, 1087}, + dictWord{7, 10, 2027}, + dictWord{8, 10, 252}, + dictWord{8, 10, 727}, + dictWord{ + 8, + 10, + 729, + }, + dictWord{9, 10, 30}, + dictWord{9, 10, 199}, + dictWord{9, 10, 231}, + dictWord{9, 10, 251}, + dictWord{9, 10, 334}, + dictWord{9, 10, 361}, + dictWord{9, 10, 712}, + dictWord{10, 10, 55}, + dictWord{10, 10, 60}, + dictWord{10, 10, 232}, + dictWord{10, 10, 332}, + dictWord{10, 10, 384}, + dictWord{10, 10, 396}, + dictWord{ + 10, + 10, + 504, + }, + dictWord{10, 10, 542}, + dictWord{10, 10, 652}, + dictWord{11, 10, 20}, + dictWord{11, 10, 48}, + dictWord{11, 10, 207}, + dictWord{11, 10, 291}, + dictWord{ + 11, + 10, + 298, + }, + dictWord{11, 10, 342}, + dictWord{11, 10, 365}, + dictWord{11, 10, 394}, + dictWord{11, 10, 620}, + dictWord{11, 10, 705}, + dictWord{11, 10, 1017}, + dictWord{12, 10, 123}, + dictWord{12, 10, 340}, + dictWord{12, 10, 406}, + dictWord{12, 10, 643}, + dictWord{13, 10, 61}, + dictWord{13, 10, 269}, + dictWord{ + 13, + 10, + 311, + }, + dictWord{13, 10, 319}, + dictWord{13, 10, 486}, + dictWord{14, 10, 234}, + dictWord{15, 10, 62}, + dictWord{15, 10, 85}, + dictWord{16, 10, 71}, + dictWord{ + 18, + 10, + 119, + }, + dictWord{148, 10, 105}, + dictWord{150, 0, 37}, + dictWord{4, 11, 208}, + dictWord{5, 11, 106}, + dictWord{6, 11, 531}, + dictWord{8, 11, 408}, + dictWord{ + 9, + 11, + 188, + }, + dictWord{138, 11, 572}, + dictWord{132, 0, 564}, + dictWord{6, 0, 513}, + dictWord{135, 0, 1052}, + dictWord{132, 0, 825}, + dictWord{9, 0, 899}, + dictWord{ + 140, + 11, + 441, + }, + dictWord{134, 0, 778}, + dictWord{133, 11, 379}, + dictWord{7, 0, 1417}, + dictWord{12, 0, 382}, + dictWord{17, 0, 48}, + dictWord{152, 0, 12}, + dictWord{ + 132, + 11, + 241, + }, + dictWord{7, 0, 1116}, + dictWord{6, 10, 379}, + dictWord{7, 10, 270}, + dictWord{8, 10, 176}, + dictWord{8, 10, 183}, + dictWord{9, 10, 432}, + dictWord{ + 9, + 10, + 661, + }, + dictWord{12, 10, 247}, + dictWord{12, 10, 617}, + dictWord{146, 10, 125}, + dictWord{5, 10, 792}, + dictWord{133, 10, 900}, + dictWord{6, 0, 545}, + dictWord{ + 7, + 0, + 565, + }, + dictWord{7, 0, 1669}, + dictWord{10, 0, 114}, + dictWord{11, 0, 642}, + dictWord{140, 0, 618}, + dictWord{133, 0, 5}, + dictWord{138, 11, 7}, + dictWord{ + 132, + 11, + 259, + }, + dictWord{135, 0, 192}, + dictWord{134, 0, 701}, + dictWord{136, 0, 763}, + dictWord{135, 10, 1979}, + dictWord{4, 10, 901}, + dictWord{133, 10, 776}, + dictWord{10, 0, 755}, + dictWord{147, 0, 29}, + dictWord{133, 0, 759}, + dictWord{4, 11, 173}, + dictWord{5, 11, 312}, + dictWord{5, 11, 512}, + dictWord{135, 11, 1285}, + dictWord{7, 11, 1603}, + dictWord{7, 11, 1691}, + dictWord{9, 11, 464}, + dictWord{11, 11, 195}, + dictWord{12, 11, 279}, + dictWord{12, 11, 448}, + dictWord{ + 14, + 11, + 11, + }, + dictWord{147, 11, 102}, + dictWord{7, 0, 370}, + dictWord{7, 0, 1007}, + dictWord{7, 0, 1177}, + dictWord{135, 0, 1565}, + dictWord{135, 0, 1237}, + dictWord{ + 4, + 0, + 87, + }, + dictWord{5, 0, 250}, + dictWord{141, 0, 298}, + dictWord{4, 11, 452}, + dictWord{5, 11, 583}, + dictWord{5, 11, 817}, + dictWord{6, 11, 433}, + dictWord{7, 11, 593}, + dictWord{7, 11, 720}, + dictWord{7, 11, 1378}, + dictWord{8, 11, 161}, + dictWord{9, 11, 284}, + dictWord{10, 11, 313}, + dictWord{139, 11, 886}, + dictWord{4, 11, 547}, + dictWord{135, 11, 1409}, + dictWord{136, 11, 722}, + dictWord{4, 10, 37}, + dictWord{5, 10, 334}, + dictWord{135, 10, 1253}, + dictWord{132, 10, 508}, + dictWord{ + 12, + 0, + 107, + }, + dictWord{146, 0, 31}, + dictWord{8, 11, 420}, + dictWord{139, 11, 193}, + dictWord{135, 0, 814}, + dictWord{135, 11, 409}, + dictWord{140, 0, 991}, + dictWord{4, 0, 57}, + dictWord{7, 0, 1195}, + dictWord{7, 0, 1438}, + dictWord{7, 0, 1548}, + dictWord{7, 0, 1835}, + dictWord{7, 0, 1904}, + dictWord{9, 0, 757}, + dictWord{ + 10, + 0, + 604, + }, + dictWord{139, 0, 519}, + dictWord{132, 0, 540}, + dictWord{138, 11, 308}, + dictWord{132, 10, 533}, + dictWord{136, 0, 608}, + dictWord{144, 11, 65}, + dictWord{4, 0, 1014}, + dictWord{134, 0, 2029}, + dictWord{4, 0, 209}, + dictWord{7, 0, 902}, + dictWord{5, 11, 1002}, + dictWord{136, 11, 745}, + dictWord{134, 0, 2030}, + dictWord{6, 0, 303}, + dictWord{7, 0, 335}, + dictWord{7, 0, 1437}, + dictWord{7, 0, 1668}, + dictWord{8, 0, 553}, + dictWord{8, 0, 652}, + dictWord{8, 0, 656}, + dictWord{ + 9, + 0, + 558, + }, + dictWord{11, 0, 743}, + dictWord{149, 0, 18}, + dictWord{5, 11, 575}, + dictWord{6, 11, 354}, + dictWord{135, 11, 701}, + dictWord{4, 11, 239}, + dictWord{ + 6, + 11, + 477, + }, + dictWord{7, 11, 1607}, + dictWord{11, 11, 68}, + dictWord{139, 11, 617}, + dictWord{132, 0, 559}, + dictWord{8, 0, 527}, + dictWord{18, 0, 60}, + dictWord{ + 147, + 0, + 24, + }, + dictWord{133, 10, 920}, + dictWord{138, 0, 511}, + dictWord{133, 0, 1017}, + dictWord{133, 0, 675}, + dictWord{138, 10, 391}, + dictWord{11, 0, 156}, + dictWord{135, 10, 1952}, + dictWord{138, 11, 369}, + dictWord{132, 11, 367}, + dictWord{133, 0, 709}, + dictWord{6, 0, 698}, + dictWord{134, 0, 887}, + dictWord{ + 142, + 10, + 126, + }, + dictWord{134, 0, 1745}, + dictWord{132, 10, 483}, + dictWord{13, 11, 299}, + dictWord{142, 11, 75}, + dictWord{133, 0, 714}, + dictWord{7, 0, 8}, + dictWord{ + 136, + 0, + 206, + }, + dictWord{138, 10, 480}, + dictWord{4, 11, 694}, + dictWord{9, 10, 495}, + dictWord{146, 10, 104}, + dictWord{7, 11, 1248}, + dictWord{11, 11, 621}, + dictWord{139, 11, 702}, + dictWord{140, 11, 687}, + dictWord{132, 0, 776}, + dictWord{139, 10, 1009}, + dictWord{135, 0, 1272}, + dictWord{134, 0, 1059}, + dictWord{ + 8, + 10, + 653, + }, + dictWord{13, 10, 93}, + dictWord{147, 10, 14}, + dictWord{135, 11, 213}, + dictWord{136, 0, 406}, + dictWord{133, 10, 172}, + dictWord{132, 0, 947}, + dictWord{8, 0, 175}, + dictWord{10, 0, 168}, + dictWord{138, 0, 573}, + dictWord{132, 0, 870}, + dictWord{6, 0, 1567}, + dictWord{151, 11, 28}, + dictWord{ + 134, + 11, + 472, + }, + dictWord{5, 10, 260}, + dictWord{136, 11, 132}, + dictWord{4, 11, 751}, + dictWord{11, 11, 390}, + dictWord{140, 11, 32}, + dictWord{4, 11, 409}, + dictWord{ + 133, + 11, + 78, + }, + dictWord{12, 0, 554}, + dictWord{6, 11, 473}, + dictWord{145, 11, 105}, + dictWord{133, 0, 784}, + dictWord{8, 0, 908}, + dictWord{136, 11, 306}, + dictWord{139, 0, 882}, + dictWord{6, 0, 358}, + dictWord{7, 0, 1393}, + dictWord{8, 0, 396}, + dictWord{10, 0, 263}, + dictWord{14, 0, 154}, + dictWord{16, 0, 48}, + dictWord{ + 17, + 0, + 8, + }, + dictWord{7, 11, 1759}, + dictWord{8, 11, 396}, + dictWord{10, 11, 263}, + dictWord{14, 11, 154}, + dictWord{16, 11, 48}, + dictWord{145, 11, 8}, + dictWord{ + 13, + 11, + 163, + }, + dictWord{13, 11, 180}, + dictWord{18, 11, 78}, + dictWord{148, 11, 35}, + dictWord{14, 0, 32}, + dictWord{18, 0, 85}, + dictWord{20, 0, 2}, + dictWord{152, 0, 16}, + dictWord{7, 0, 228}, + dictWord{10, 0, 770}, + dictWord{8, 10, 167}, + dictWord{8, 10, 375}, + dictWord{9, 10, 82}, + dictWord{9, 10, 561}, + dictWord{138, 10, 620}, + dictWord{132, 0, 845}, + dictWord{9, 0, 14}, + dictWord{9, 0, 441}, + dictWord{10, 0, 306}, + dictWord{139, 0, 9}, + dictWord{11, 0, 966}, + dictWord{12, 0, 287}, + dictWord{ + 13, + 0, + 342, + }, + dictWord{13, 0, 402}, + dictWord{15, 0, 110}, + dictWord{15, 0, 163}, + dictWord{8, 10, 194}, + dictWord{136, 10, 756}, + dictWord{134, 0, 1578}, + dictWord{ + 4, + 0, + 967, + }, + dictWord{6, 0, 1820}, + dictWord{6, 0, 1847}, + dictWord{140, 0, 716}, + dictWord{136, 0, 594}, + dictWord{7, 0, 1428}, + dictWord{7, 0, 1640}, + dictWord{ + 7, + 0, + 1867, + }, + dictWord{9, 0, 169}, + dictWord{9, 0, 182}, + dictWord{9, 0, 367}, + dictWord{9, 0, 478}, + dictWord{9, 0, 506}, + dictWord{9, 0, 551}, + dictWord{9, 0, 557}, + dictWord{ + 9, + 0, + 648, + }, + dictWord{9, 0, 697}, + dictWord{9, 0, 705}, + dictWord{9, 0, 725}, + dictWord{9, 0, 787}, + dictWord{9, 0, 794}, + dictWord{10, 0, 198}, + dictWord{10, 0, 214}, + dictWord{10, 0, 267}, + dictWord{10, 0, 275}, + dictWord{10, 0, 456}, + dictWord{10, 0, 551}, + dictWord{10, 0, 561}, + dictWord{10, 0, 613}, + dictWord{10, 0, 627}, + dictWord{ + 10, + 0, + 668, + }, + dictWord{10, 0, 675}, + dictWord{10, 0, 691}, + dictWord{10, 0, 695}, + dictWord{10, 0, 707}, + dictWord{10, 0, 715}, + dictWord{11, 0, 183}, + dictWord{ + 11, + 0, + 201, + }, + dictWord{11, 0, 244}, + dictWord{11, 0, 262}, + dictWord{11, 0, 352}, + dictWord{11, 0, 439}, + dictWord{11, 0, 493}, + dictWord{11, 0, 572}, + dictWord{11, 0, 591}, + dictWord{11, 0, 608}, + dictWord{11, 0, 611}, + dictWord{11, 0, 646}, + dictWord{11, 0, 674}, + dictWord{11, 0, 711}, + dictWord{11, 0, 751}, + dictWord{11, 0, 761}, + dictWord{11, 0, 776}, + dictWord{11, 0, 785}, + dictWord{11, 0, 850}, + dictWord{11, 0, 853}, + dictWord{11, 0, 862}, + dictWord{11, 0, 865}, + dictWord{11, 0, 868}, + dictWord{ + 11, + 0, + 875, + }, + dictWord{11, 0, 898}, + dictWord{11, 0, 902}, + dictWord{11, 0, 903}, + dictWord{11, 0, 910}, + dictWord{11, 0, 932}, + dictWord{11, 0, 942}, + dictWord{ + 11, + 0, + 957, + }, + dictWord{11, 0, 967}, + dictWord{11, 0, 972}, + dictWord{12, 0, 148}, + dictWord{12, 0, 195}, + dictWord{12, 0, 220}, + dictWord{12, 0, 237}, + dictWord{12, 0, 318}, + dictWord{12, 0, 339}, + dictWord{12, 0, 393}, + dictWord{12, 0, 445}, + dictWord{12, 0, 450}, + dictWord{12, 0, 474}, + dictWord{12, 0, 505}, + dictWord{12, 0, 509}, + dictWord{12, 0, 533}, + dictWord{12, 0, 591}, + dictWord{12, 0, 594}, + dictWord{12, 0, 597}, + dictWord{12, 0, 621}, + dictWord{12, 0, 633}, + dictWord{12, 0, 642}, + dictWord{ + 13, + 0, + 59, + }, + dictWord{13, 0, 60}, + dictWord{13, 0, 145}, + dictWord{13, 0, 239}, + dictWord{13, 0, 250}, + dictWord{13, 0, 329}, + dictWord{13, 0, 344}, + dictWord{13, 0, 365}, + dictWord{13, 0, 372}, + dictWord{13, 0, 387}, + dictWord{13, 0, 403}, + dictWord{13, 0, 414}, + dictWord{13, 0, 456}, + dictWord{13, 0, 470}, + dictWord{13, 0, 478}, + dictWord{13, 0, 483}, + dictWord{13, 0, 489}, + dictWord{14, 0, 55}, + dictWord{14, 0, 57}, + dictWord{14, 0, 81}, + dictWord{14, 0, 90}, + dictWord{14, 0, 148}, + dictWord{ + 14, + 0, + 239, + }, + dictWord{14, 0, 266}, + dictWord{14, 0, 321}, + dictWord{14, 0, 326}, + dictWord{14, 0, 327}, + dictWord{14, 0, 330}, + dictWord{14, 0, 347}, + dictWord{14, 0, 355}, + dictWord{14, 0, 401}, + dictWord{14, 0, 404}, + dictWord{14, 0, 411}, + dictWord{14, 0, 414}, + dictWord{14, 0, 416}, + dictWord{14, 0, 420}, + dictWord{15, 0, 61}, + dictWord{15, 0, 74}, + dictWord{15, 0, 87}, + dictWord{15, 0, 88}, + dictWord{15, 0, 94}, + dictWord{15, 0, 96}, + dictWord{15, 0, 116}, + dictWord{15, 0, 149}, + dictWord{15, 0, 154}, + dictWord{16, 0, 50}, + dictWord{16, 0, 63}, + dictWord{16, 0, 73}, + dictWord{17, 0, 2}, + dictWord{17, 0, 66}, + dictWord{17, 0, 92}, + dictWord{17, 0, 103}, + dictWord{ + 17, + 0, + 112, + }, + dictWord{17, 0, 120}, + dictWord{18, 0, 50}, + dictWord{18, 0, 54}, + dictWord{18, 0, 82}, + dictWord{18, 0, 86}, + dictWord{18, 0, 90}, + dictWord{18, 0, 111}, + dictWord{ + 18, + 0, + 115, + }, + dictWord{18, 0, 156}, + dictWord{19, 0, 40}, + dictWord{19, 0, 79}, + dictWord{20, 0, 78}, + dictWord{21, 0, 22}, + dictWord{135, 11, 883}, + dictWord{5, 0, 161}, + dictWord{135, 0, 839}, + dictWord{4, 0, 782}, + dictWord{13, 11, 293}, + dictWord{142, 11, 56}, + dictWord{133, 11, 617}, + dictWord{139, 11, 50}, + dictWord{ + 135, + 10, + 22, + }, + dictWord{145, 0, 64}, + dictWord{5, 10, 639}, + dictWord{7, 10, 1249}, + dictWord{139, 10, 896}, + dictWord{138, 0, 998}, + dictWord{135, 11, 2042}, + dictWord{ + 4, + 11, + 546, + }, + dictWord{142, 11, 233}, + dictWord{6, 0, 1043}, + dictWord{134, 0, 1574}, + dictWord{134, 0, 1496}, + dictWord{4, 10, 102}, + dictWord{7, 10, 815}, + dictWord{7, 10, 1699}, + dictWord{139, 10, 964}, + dictWord{12, 0, 781}, + dictWord{142, 0, 461}, + dictWord{4, 11, 313}, + dictWord{133, 11, 577}, + dictWord{ + 6, + 0, + 639, + }, + dictWord{6, 0, 1114}, + dictWord{137, 0, 817}, + dictWord{8, 11, 184}, + dictWord{141, 11, 433}, + dictWord{7, 0, 1814}, + dictWord{135, 11, 935}, + dictWord{ + 10, + 0, + 997, + }, + dictWord{140, 0, 958}, + dictWord{4, 0, 812}, + dictWord{137, 11, 625}, + dictWord{132, 10, 899}, + dictWord{136, 10, 795}, + dictWord{5, 11, 886}, + dictWord{6, 11, 46}, + dictWord{6, 11, 1790}, + dictWord{7, 11, 14}, + dictWord{7, 11, 732}, + dictWord{7, 11, 1654}, + dictWord{8, 11, 95}, + dictWord{8, 11, 327}, + dictWord{ + 8, + 11, + 616, + }, + dictWord{10, 11, 598}, + dictWord{10, 11, 769}, + dictWord{11, 11, 134}, + dictWord{11, 11, 747}, + dictWord{12, 11, 378}, + dictWord{142, 11, 97}, + dictWord{136, 0, 139}, + dictWord{6, 10, 52}, + dictWord{9, 10, 104}, + dictWord{9, 10, 559}, + dictWord{12, 10, 308}, + dictWord{147, 10, 87}, + dictWord{133, 11, 1021}, + dictWord{132, 10, 604}, + dictWord{132, 10, 301}, + dictWord{136, 10, 779}, + dictWord{7, 0, 643}, + dictWord{136, 0, 236}, + dictWord{132, 11, 153}, + dictWord{ + 134, + 0, + 1172, + }, + dictWord{147, 10, 32}, + dictWord{133, 11, 798}, + dictWord{6, 0, 1338}, + dictWord{132, 11, 587}, + dictWord{6, 11, 598}, + dictWord{7, 11, 42}, + dictWord{ + 8, + 11, + 695, + }, + dictWord{10, 11, 212}, + dictWord{11, 11, 158}, + dictWord{14, 11, 196}, + dictWord{145, 11, 85}, + dictWord{135, 10, 508}, + dictWord{5, 11, 957}, + dictWord{5, 11, 1008}, + dictWord{135, 11, 249}, + dictWord{4, 11, 129}, + dictWord{135, 11, 465}, + dictWord{5, 0, 54}, + dictWord{7, 11, 470}, + dictWord{7, 11, 1057}, + dictWord{7, 11, 1201}, + dictWord{9, 11, 755}, + dictWord{11, 11, 906}, + dictWord{140, 11, 527}, + dictWord{7, 11, 908}, + dictWord{146, 11, 7}, + dictWord{ + 5, + 11, + 148, + }, + dictWord{136, 11, 450}, + dictWord{144, 11, 1}, + dictWord{4, 0, 256}, + dictWord{135, 0, 1488}, + dictWord{9, 0, 351}, + dictWord{6, 10, 310}, + dictWord{ + 7, + 10, + 1849, + }, + dictWord{8, 10, 72}, + dictWord{8, 10, 272}, + dictWord{8, 10, 431}, + dictWord{9, 10, 12}, + dictWord{10, 10, 563}, + dictWord{10, 10, 630}, + dictWord{ + 10, + 10, + 796, + }, + dictWord{10, 10, 810}, + dictWord{11, 10, 367}, + dictWord{11, 10, 599}, + dictWord{11, 10, 686}, + dictWord{140, 10, 672}, + dictWord{6, 0, 1885}, + dictWord{ + 6, + 0, + 1898, + }, + dictWord{6, 0, 1899}, + dictWord{140, 0, 955}, + dictWord{4, 0, 714}, + dictWord{133, 0, 469}, + dictWord{6, 0, 1270}, + dictWord{134, 0, 1456}, + dictWord{132, 0, 744}, + dictWord{6, 0, 313}, + dictWord{7, 10, 537}, + dictWord{8, 10, 64}, + dictWord{9, 10, 127}, + dictWord{10, 10, 496}, + dictWord{12, 10, 510}, + dictWord{141, 10, 384}, + dictWord{4, 11, 217}, + dictWord{4, 10, 244}, + dictWord{5, 11, 710}, + dictWord{7, 10, 233}, + dictWord{7, 11, 1926}, + dictWord{9, 11, 428}, + dictWord{9, 11, 708}, + dictWord{10, 11, 254}, + dictWord{10, 11, 296}, + dictWord{10, 11, 720}, + dictWord{11, 11, 109}, + dictWord{11, 11, 255}, + dictWord{12, 11, 165}, + dictWord{12, 11, 315}, + dictWord{13, 11, 107}, + dictWord{13, 11, 203}, + dictWord{14, 11, 54}, + dictWord{14, 11, 99}, + dictWord{14, 11, 114}, + dictWord{ + 14, + 11, + 388, + }, + dictWord{16, 11, 85}, + dictWord{17, 11, 9}, + dictWord{17, 11, 33}, + dictWord{20, 11, 25}, + dictWord{20, 11, 28}, + dictWord{20, 11, 29}, + dictWord{21, 11, 9}, + dictWord{21, 11, 10}, + dictWord{21, 11, 34}, + dictWord{150, 11, 17}, + dictWord{138, 0, 402}, + dictWord{7, 0, 969}, + dictWord{146, 0, 55}, + dictWord{8, 0, 50}, + dictWord{ + 137, + 0, + 624, + }, + dictWord{134, 0, 1355}, + dictWord{132, 0, 572}, + dictWord{134, 10, 1650}, + dictWord{10, 10, 702}, + dictWord{139, 10, 245}, + dictWord{ + 10, + 0, + 847, + }, + dictWord{142, 0, 445}, + dictWord{6, 0, 43}, + dictWord{7, 0, 38}, + dictWord{8, 0, 248}, + dictWord{138, 0, 513}, + dictWord{133, 0, 369}, + dictWord{137, 10, 338}, + dictWord{133, 0, 766}, + dictWord{133, 0, 363}, + dictWord{133, 10, 896}, + dictWord{8, 11, 392}, + dictWord{11, 11, 54}, + dictWord{13, 11, 173}, + dictWord{ + 13, + 11, + 294, + }, + dictWord{148, 11, 7}, + dictWord{134, 0, 678}, + dictWord{7, 11, 1230}, + dictWord{136, 11, 531}, + dictWord{6, 0, 258}, + dictWord{140, 0, 409}, + dictWord{ + 5, + 0, + 249, + }, + dictWord{148, 0, 82}, + dictWord{7, 10, 1117}, + dictWord{136, 10, 539}, + dictWord{5, 0, 393}, + dictWord{6, 0, 378}, + dictWord{7, 0, 1981}, + dictWord{9, 0, 32}, + dictWord{9, 0, 591}, + dictWord{10, 0, 685}, + dictWord{10, 0, 741}, + dictWord{142, 0, 382}, + dictWord{133, 0, 788}, + dictWord{134, 0, 1281}, + dictWord{ + 134, + 0, + 1295, + }, + dictWord{7, 0, 1968}, + dictWord{141, 0, 509}, + dictWord{4, 0, 61}, + dictWord{5, 0, 58}, + dictWord{5, 0, 171}, + dictWord{5, 0, 683}, + dictWord{6, 0, 291}, + dictWord{ + 6, + 0, + 566, + }, + dictWord{7, 0, 1650}, + dictWord{11, 0, 523}, + dictWord{12, 0, 273}, + dictWord{12, 0, 303}, + dictWord{15, 0, 39}, + dictWord{143, 0, 111}, + dictWord{ + 6, + 0, + 706, + }, + dictWord{134, 0, 1283}, + dictWord{134, 0, 589}, + dictWord{135, 11, 1433}, + dictWord{133, 11, 435}, + dictWord{7, 0, 1059}, + dictWord{13, 0, 54}, + dictWord{ + 5, + 10, + 4, + }, + dictWord{5, 10, 810}, + dictWord{6, 10, 13}, + dictWord{6, 10, 538}, + dictWord{6, 10, 1690}, + dictWord{6, 10, 1726}, + dictWord{7, 10, 1819}, + dictWord{ + 8, + 10, + 148, + }, + dictWord{8, 10, 696}, + dictWord{8, 10, 791}, + dictWord{12, 10, 125}, + dictWord{143, 10, 9}, + dictWord{135, 10, 1268}, + dictWord{5, 11, 85}, + dictWord{ + 6, + 11, + 419, + }, + dictWord{7, 11, 134}, + dictWord{7, 11, 305}, + dictWord{7, 11, 361}, + dictWord{7, 11, 1337}, + dictWord{8, 11, 71}, + dictWord{140, 11, 519}, + dictWord{ + 137, + 0, + 824, + }, + dictWord{140, 11, 688}, + dictWord{5, 11, 691}, + dictWord{7, 11, 345}, + dictWord{7, 10, 1385}, + dictWord{9, 11, 94}, + dictWord{11, 10, 582}, + dictWord{ + 11, + 10, + 650, + }, + dictWord{11, 10, 901}, + dictWord{11, 10, 949}, + dictWord{12, 11, 169}, + dictWord{12, 10, 232}, + dictWord{12, 10, 236}, + dictWord{13, 10, 413}, + dictWord{13, 10, 501}, + dictWord{146, 10, 116}, + dictWord{4, 0, 917}, + dictWord{133, 0, 1005}, + dictWord{7, 0, 1598}, + dictWord{5, 11, 183}, + dictWord{6, 11, 582}, + dictWord{9, 11, 344}, + dictWord{10, 11, 679}, + dictWord{140, 11, 435}, + dictWord{4, 10, 925}, + dictWord{5, 10, 803}, + dictWord{8, 10, 698}, + dictWord{ + 138, + 10, + 828, + }, + dictWord{132, 0, 919}, + dictWord{135, 11, 511}, + dictWord{139, 10, 992}, + dictWord{4, 0, 255}, + dictWord{5, 0, 302}, + dictWord{6, 0, 132}, + dictWord{ + 7, + 0, + 128, + }, + dictWord{7, 0, 283}, + dictWord{7, 0, 1299}, + dictWord{10, 0, 52}, + dictWord{10, 0, 514}, + dictWord{11, 0, 925}, + dictWord{13, 0, 92}, + dictWord{142, 0, 309}, + dictWord{134, 0, 1369}, + dictWord{135, 10, 1847}, + dictWord{134, 0, 328}, + dictWord{7, 11, 1993}, + dictWord{136, 11, 684}, + dictWord{133, 10, 383}, + dictWord{137, 0, 173}, + dictWord{134, 11, 583}, + dictWord{134, 0, 1411}, + dictWord{19, 0, 65}, + dictWord{5, 11, 704}, + dictWord{8, 11, 357}, + dictWord{10, 11, 745}, + dictWord{14, 11, 426}, + dictWord{17, 11, 94}, + dictWord{147, 11, 57}, + dictWord{9, 10, 660}, + dictWord{138, 10, 347}, + dictWord{4, 11, 179}, + dictWord{5, 11, 198}, + dictWord{133, 11, 697}, + dictWord{7, 11, 347}, + dictWord{7, 11, 971}, + dictWord{8, 11, 181}, + dictWord{138, 11, 711}, + dictWord{141, 0, 442}, + dictWord{ + 11, + 0, + 842, + }, + dictWord{11, 0, 924}, + dictWord{13, 0, 317}, + dictWord{13, 0, 370}, + dictWord{13, 0, 469}, + dictWord{13, 0, 471}, + dictWord{14, 0, 397}, + dictWord{18, 0, 69}, + dictWord{18, 0, 145}, + dictWord{7, 10, 572}, + dictWord{9, 10, 592}, + dictWord{11, 10, 680}, + dictWord{12, 10, 356}, + dictWord{140, 10, 550}, + dictWord{14, 11, 19}, + dictWord{14, 11, 28}, + dictWord{144, 11, 29}, + dictWord{136, 0, 534}, + dictWord{4, 11, 243}, + dictWord{5, 11, 203}, + dictWord{7, 11, 19}, + dictWord{7, 11, 71}, + dictWord{7, 11, 113}, + dictWord{10, 11, 405}, + dictWord{11, 11, 357}, + dictWord{142, 11, 240}, + dictWord{6, 0, 210}, + dictWord{10, 0, 845}, + dictWord{138, 0, 862}, + dictWord{7, 11, 1351}, + dictWord{9, 11, 581}, + dictWord{10, 11, 639}, + dictWord{11, 11, 453}, + dictWord{140, 11, 584}, + dictWord{7, 11, 1450}, + dictWord{ + 139, + 11, + 99, + }, + dictWord{10, 0, 892}, + dictWord{12, 0, 719}, + dictWord{144, 0, 105}, + dictWord{4, 0, 284}, + dictWord{6, 0, 223}, + dictWord{134, 11, 492}, + dictWord{5, 11, 134}, + dictWord{6, 11, 408}, + dictWord{6, 11, 495}, + dictWord{135, 11, 1593}, + dictWord{136, 0, 529}, + dictWord{137, 0, 807}, + dictWord{4, 0, 218}, + dictWord{7, 0, 526}, + dictWord{143, 0, 137}, + dictWord{6, 0, 1444}, + dictWord{142, 11, 4}, + dictWord{132, 11, 665}, + dictWord{4, 0, 270}, + dictWord{5, 0, 192}, + dictWord{6, 0, 332}, + dictWord{7, 0, 1322}, + dictWord{4, 11, 248}, + dictWord{7, 11, 137}, + dictWord{137, 11, 349}, + dictWord{140, 0, 661}, + dictWord{7, 0, 1517}, + dictWord{11, 0, 597}, + dictWord{14, 0, 76}, + dictWord{14, 0, 335}, + dictWord{20, 0, 33}, + dictWord{7, 10, 748}, + dictWord{139, 10, 700}, + dictWord{5, 11, 371}, + dictWord{135, 11, 563}, + dictWord{146, 11, 57}, + dictWord{133, 10, 127}, + dictWord{133, 0, 418}, + dictWord{4, 11, 374}, + dictWord{7, 11, 547}, + dictWord{7, 11, 1700}, + dictWord{7, 11, 1833}, + dictWord{139, 11, 858}, + dictWord{6, 10, 198}, + dictWord{140, 10, 83}, + dictWord{7, 11, 1812}, + dictWord{13, 11, 259}, + dictWord{13, 11, 356}, + dictWord{ + 14, + 11, + 242, + }, + dictWord{147, 11, 114}, + dictWord{7, 0, 379}, + dictWord{8, 0, 481}, + dictWord{9, 0, 377}, + dictWord{5, 10, 276}, + dictWord{6, 10, 55}, + dictWord{ + 135, + 10, + 1369, + }, + dictWord{138, 11, 286}, + dictWord{5, 0, 1003}, + dictWord{6, 0, 149}, + dictWord{6, 10, 1752}, + dictWord{136, 10, 726}, + dictWord{8, 0, 262}, + dictWord{ + 9, + 0, + 627, + }, + dictWord{10, 0, 18}, + dictWord{11, 0, 214}, + dictWord{11, 0, 404}, + dictWord{11, 0, 457}, + dictWord{11, 0, 780}, + dictWord{11, 0, 913}, + dictWord{13, 0, 401}, + dictWord{14, 0, 200}, + dictWord{6, 11, 1647}, + dictWord{7, 11, 1552}, + dictWord{7, 11, 2010}, + dictWord{9, 11, 494}, + dictWord{137, 11, 509}, + dictWord{ + 135, + 0, + 742, + }, + dictWord{136, 0, 304}, + dictWord{132, 0, 142}, + dictWord{133, 10, 764}, + dictWord{6, 10, 309}, + dictWord{7, 10, 331}, + dictWord{138, 10, 550}, + dictWord{135, 10, 1062}, + dictWord{6, 11, 123}, + dictWord{7, 11, 214}, + dictWord{7, 10, 986}, + dictWord{9, 11, 728}, + dictWord{10, 11, 157}, + dictWord{11, 11, 346}, + dictWord{11, 11, 662}, + dictWord{143, 11, 106}, + dictWord{135, 10, 1573}, + dictWord{7, 0, 925}, + dictWord{137, 0, 799}, + dictWord{4, 0, 471}, + dictWord{5, 0, 51}, + dictWord{6, 0, 602}, + dictWord{8, 0, 484}, + dictWord{138, 0, 195}, + dictWord{136, 0, 688}, + dictWord{132, 0, 697}, + dictWord{6, 0, 1169}, + dictWord{6, 0, 1241}, + dictWord{6, 10, 194}, + dictWord{7, 10, 133}, + dictWord{10, 10, 493}, + dictWord{10, 10, 570}, + dictWord{139, 10, 664}, + dictWord{140, 0, 751}, + dictWord{7, 0, 929}, + dictWord{10, 0, 452}, + dictWord{11, 0, 878}, + dictWord{16, 0, 33}, + dictWord{5, 10, 24}, + dictWord{5, 10, 569}, + dictWord{6, 10, 3}, + dictWord{6, 10, 119}, + dictWord{ + 6, + 10, + 143, + }, + dictWord{6, 10, 440}, + dictWord{7, 10, 599}, + dictWord{7, 10, 1686}, + dictWord{7, 10, 1854}, + dictWord{8, 10, 424}, + dictWord{9, 10, 43}, + dictWord{ + 9, + 10, + 584, + }, + dictWord{9, 10, 760}, + dictWord{10, 10, 328}, + dictWord{11, 10, 159}, + dictWord{11, 10, 253}, + dictWord{12, 10, 487}, + dictWord{140, 10, 531}, + dictWord{ + 4, + 11, + 707, + }, + dictWord{13, 11, 106}, + dictWord{18, 11, 49}, + dictWord{147, 11, 41}, + dictWord{5, 0, 221}, + dictWord{5, 11, 588}, + dictWord{134, 11, 393}, + dictWord{134, 0, 1437}, + dictWord{6, 11, 211}, + dictWord{7, 11, 1690}, + dictWord{11, 11, 486}, + dictWord{140, 11, 369}, + dictWord{5, 10, 14}, + dictWord{5, 10, 892}, + dictWord{6, 10, 283}, + dictWord{7, 10, 234}, + dictWord{136, 10, 537}, + dictWord{4, 0, 988}, + dictWord{136, 0, 955}, + dictWord{135, 0, 1251}, + dictWord{4, 10, 126}, + dictWord{8, 10, 635}, + dictWord{147, 10, 34}, + dictWord{4, 10, 316}, + dictWord{135, 10, 1561}, + dictWord{137, 10, 861}, + dictWord{4, 10, 64}, + dictWord{ + 5, + 10, + 352, + }, + dictWord{5, 10, 720}, + dictWord{6, 10, 368}, + dictWord{139, 10, 359}, + dictWord{134, 0, 192}, + dictWord{4, 0, 132}, + dictWord{5, 0, 69}, + dictWord{ + 135, + 0, + 1242, + }, + dictWord{7, 10, 1577}, + dictWord{10, 10, 304}, + dictWord{10, 10, 549}, + dictWord{12, 10, 365}, + dictWord{13, 10, 220}, + dictWord{13, 10, 240}, + dictWord{142, 10, 33}, + dictWord{4, 0, 111}, + dictWord{7, 0, 865}, + dictWord{134, 11, 219}, + dictWord{5, 11, 582}, + dictWord{6, 11, 1646}, + dictWord{7, 11, 99}, + dictWord{ + 7, + 11, + 1962, + }, + dictWord{7, 11, 1986}, + dictWord{8, 11, 515}, + dictWord{8, 11, 773}, + dictWord{9, 11, 23}, + dictWord{9, 11, 491}, + dictWord{12, 11, 620}, + dictWord{ + 14, + 11, + 52, + }, + dictWord{145, 11, 50}, + dictWord{132, 0, 767}, + dictWord{7, 11, 568}, + dictWord{148, 11, 21}, + dictWord{6, 0, 42}, + dictWord{7, 0, 1416}, + dictWord{ + 7, + 0, + 2005, + }, + dictWord{8, 0, 131}, + dictWord{8, 0, 466}, + dictWord{9, 0, 672}, + dictWord{13, 0, 252}, + dictWord{20, 0, 103}, + dictWord{133, 11, 851}, + dictWord{ + 135, + 0, + 1050, + }, + dictWord{6, 10, 175}, + dictWord{137, 10, 289}, + dictWord{5, 10, 432}, + dictWord{133, 10, 913}, + dictWord{6, 0, 44}, + dictWord{136, 0, 368}, + dictWord{ + 135, + 11, + 784, + }, + dictWord{132, 0, 570}, + dictWord{133, 0, 120}, + dictWord{139, 10, 595}, + dictWord{140, 0, 29}, + dictWord{6, 0, 227}, + dictWord{135, 0, 1589}, + dictWord{4, 11, 98}, + dictWord{7, 11, 1365}, + dictWord{9, 11, 422}, + dictWord{9, 11, 670}, + dictWord{10, 11, 775}, + dictWord{11, 11, 210}, + dictWord{13, 11, 26}, + dictWord{13, 11, 457}, + dictWord{141, 11, 476}, + dictWord{140, 10, 80}, + dictWord{5, 10, 931}, + dictWord{134, 10, 1698}, + dictWord{133, 0, 522}, + dictWord{ + 134, + 0, + 1120, + }, + dictWord{135, 0, 1529}, + dictWord{12, 0, 739}, + dictWord{14, 0, 448}, + dictWord{142, 0, 467}, + dictWord{11, 10, 526}, + dictWord{11, 10, 939}, + dictWord{141, 10, 290}, + dictWord{5, 10, 774}, + dictWord{6, 10, 1637}, + dictWord{6, 10, 1686}, + dictWord{134, 10, 1751}, + dictWord{6, 0, 1667}, + dictWord{ + 135, + 0, + 2036, + }, + dictWord{7, 10, 1167}, + dictWord{11, 10, 934}, + dictWord{13, 10, 391}, + dictWord{145, 10, 76}, + dictWord{137, 11, 147}, + dictWord{6, 10, 260}, + dictWord{ + 7, + 10, + 1484, + }, + dictWord{11, 11, 821}, + dictWord{12, 11, 110}, + dictWord{12, 11, 153}, + dictWord{18, 11, 41}, + dictWord{150, 11, 19}, + dictWord{6, 0, 511}, + dictWord{12, 0, 132}, + dictWord{134, 10, 573}, + dictWord{5, 0, 568}, + dictWord{6, 0, 138}, + dictWord{135, 0, 1293}, + dictWord{132, 0, 1020}, + dictWord{8, 0, 258}, + dictWord{9, 0, 208}, + dictWord{137, 0, 359}, + dictWord{4, 0, 565}, + dictWord{8, 0, 23}, + dictWord{136, 0, 827}, + dictWord{134, 0, 344}, + dictWord{4, 0, 922}, + dictWord{ + 5, + 0, + 1023, + }, + dictWord{13, 11, 477}, + dictWord{14, 11, 120}, + dictWord{148, 11, 61}, + dictWord{134, 0, 240}, + dictWord{5, 11, 209}, + dictWord{6, 11, 30}, + dictWord{ + 11, + 11, + 56, + }, + dictWord{139, 11, 305}, + dictWord{6, 0, 171}, + dictWord{7, 0, 1002}, + dictWord{7, 0, 1324}, + dictWord{9, 0, 415}, + dictWord{14, 0, 230}, + dictWord{ + 18, + 0, + 68, + }, + dictWord{4, 10, 292}, + dictWord{4, 10, 736}, + dictWord{5, 10, 871}, + dictWord{6, 10, 1689}, + dictWord{7, 10, 1944}, + dictWord{137, 10, 580}, + dictWord{ + 9, + 11, + 635, + }, + dictWord{139, 11, 559}, + dictWord{4, 11, 150}, + dictWord{5, 11, 303}, + dictWord{134, 11, 327}, + dictWord{6, 10, 63}, + dictWord{135, 10, 920}, + dictWord{ + 133, + 10, + 793, + }, + dictWord{8, 11, 192}, + dictWord{10, 11, 78}, + dictWord{10, 11, 555}, + dictWord{11, 11, 308}, + dictWord{13, 11, 359}, + dictWord{147, 11, 95}, + dictWord{135, 11, 786}, + dictWord{135, 11, 1712}, + dictWord{136, 0, 402}, + dictWord{6, 0, 754}, + dictWord{6, 11, 1638}, + dictWord{7, 11, 79}, + dictWord{7, 11, 496}, + dictWord{9, 11, 138}, + dictWord{10, 11, 336}, + dictWord{11, 11, 12}, + dictWord{12, 11, 412}, + dictWord{12, 11, 440}, + dictWord{142, 11, 305}, + dictWord{4, 0, 716}, + dictWord{141, 0, 31}, + dictWord{133, 0, 982}, + dictWord{8, 0, 691}, + dictWord{8, 0, 731}, + dictWord{5, 10, 67}, + dictWord{6, 10, 62}, + dictWord{6, 10, 374}, + dictWord{ + 135, + 10, + 1391, + }, + dictWord{9, 10, 790}, + dictWord{140, 10, 47}, + dictWord{139, 11, 556}, + dictWord{151, 11, 1}, + dictWord{7, 11, 204}, + dictWord{7, 11, 415}, + dictWord{8, 11, 42}, + dictWord{10, 11, 85}, + dictWord{11, 11, 33}, + dictWord{11, 11, 564}, + dictWord{12, 11, 571}, + dictWord{149, 11, 1}, + dictWord{8, 0, 888}, + dictWord{ + 7, + 11, + 610, + }, + dictWord{135, 11, 1501}, + dictWord{4, 10, 391}, + dictWord{135, 10, 1169}, + dictWord{5, 0, 847}, + dictWord{9, 0, 840}, + dictWord{138, 0, 803}, + dictWord{137, 0, 823}, + dictWord{134, 0, 785}, + dictWord{8, 0, 152}, + dictWord{9, 0, 53}, + dictWord{9, 0, 268}, + dictWord{9, 0, 901}, + dictWord{10, 0, 518}, + dictWord{ + 10, + 0, + 829, + }, + dictWord{11, 0, 188}, + dictWord{13, 0, 74}, + dictWord{14, 0, 46}, + dictWord{15, 0, 17}, + dictWord{15, 0, 33}, + dictWord{17, 0, 40}, + dictWord{18, 0, 36}, + dictWord{ + 19, + 0, + 20, + }, + dictWord{22, 0, 1}, + dictWord{152, 0, 2}, + dictWord{4, 11, 3}, + dictWord{5, 11, 247}, + dictWord{5, 11, 644}, + dictWord{7, 11, 744}, + dictWord{7, 11, 1207}, + dictWord{7, 11, 1225}, + dictWord{7, 11, 1909}, + dictWord{146, 11, 147}, + dictWord{136, 0, 532}, + dictWord{135, 0, 681}, + dictWord{132, 10, 271}, + dictWord{ + 140, + 0, + 314, + }, + dictWord{140, 0, 677}, + dictWord{4, 0, 684}, + dictWord{136, 0, 384}, + dictWord{5, 11, 285}, + dictWord{9, 11, 67}, + dictWord{13, 11, 473}, + dictWord{ + 143, + 11, + 82, + }, + dictWord{4, 10, 253}, + dictWord{5, 10, 544}, + dictWord{7, 10, 300}, + dictWord{137, 10, 340}, + dictWord{7, 0, 110}, + dictWord{7, 0, 447}, + dictWord{8, 0, 290}, + dictWord{8, 0, 591}, + dictWord{9, 0, 382}, + dictWord{9, 0, 649}, + dictWord{11, 0, 71}, + dictWord{11, 0, 155}, + dictWord{11, 0, 313}, + dictWord{12, 0, 5}, + dictWord{13, 0, 325}, + dictWord{142, 0, 287}, + dictWord{134, 0, 1818}, + dictWord{136, 0, 1007}, + dictWord{138, 0, 321}, + dictWord{7, 0, 360}, + dictWord{7, 0, 425}, + dictWord{9, 0, 66}, + dictWord{9, 0, 278}, + dictWord{138, 0, 644}, + dictWord{133, 10, 818}, + dictWord{5, 0, 385}, + dictWord{5, 10, 541}, + dictWord{6, 10, 94}, + dictWord{6, 10, 499}, + dictWord{ + 7, + 10, + 230, + }, + dictWord{139, 10, 321}, + dictWord{4, 10, 920}, + dictWord{5, 10, 25}, + dictWord{5, 10, 790}, + dictWord{6, 10, 457}, + dictWord{7, 10, 853}, + dictWord{ + 136, + 10, + 788, + }, + dictWord{4, 0, 900}, + dictWord{133, 0, 861}, + dictWord{5, 0, 254}, + dictWord{7, 0, 985}, + dictWord{136, 0, 73}, + dictWord{7, 0, 1959}, + dictWord{ + 136, + 0, + 683, + }, + dictWord{134, 10, 1765}, + dictWord{133, 10, 822}, + dictWord{132, 10, 634}, + dictWord{4, 11, 29}, + dictWord{6, 11, 532}, + dictWord{7, 11, 1628}, + dictWord{ + 7, + 11, + 1648, + }, + dictWord{9, 11, 303}, + dictWord{9, 11, 350}, + dictWord{10, 11, 433}, + dictWord{11, 11, 97}, + dictWord{11, 11, 557}, + dictWord{11, 11, 745}, + dictWord{12, 11, 289}, + dictWord{12, 11, 335}, + dictWord{12, 11, 348}, + dictWord{12, 11, 606}, + dictWord{13, 11, 116}, + dictWord{13, 11, 233}, + dictWord{ + 13, + 11, + 466, + }, + dictWord{14, 11, 181}, + dictWord{14, 11, 209}, + dictWord{14, 11, 232}, + dictWord{14, 11, 236}, + dictWord{14, 11, 300}, + dictWord{16, 11, 41}, + dictWord{ + 148, + 11, + 97, + }, + dictWord{19, 0, 86}, + dictWord{6, 10, 36}, + dictWord{7, 10, 658}, + dictWord{136, 10, 454}, + dictWord{135, 11, 1692}, + dictWord{132, 0, 725}, + dictWord{ + 5, + 11, + 501, + }, + dictWord{7, 11, 1704}, + dictWord{9, 11, 553}, + dictWord{11, 11, 520}, + dictWord{12, 11, 557}, + dictWord{141, 11, 249}, + dictWord{134, 0, 196}, + dictWord{133, 0, 831}, + dictWord{136, 0, 723}, + dictWord{7, 0, 1897}, + dictWord{13, 0, 80}, + dictWord{13, 0, 437}, + dictWord{145, 0, 74}, + dictWord{4, 0, 992}, + dictWord{ + 6, + 0, + 627, + }, + dictWord{136, 0, 994}, + dictWord{135, 11, 1294}, + dictWord{132, 10, 104}, + dictWord{5, 0, 848}, + dictWord{6, 0, 66}, + dictWord{136, 0, 764}, + dictWord{ + 4, + 0, + 36, + }, + dictWord{7, 0, 1387}, + dictWord{10, 0, 205}, + dictWord{139, 0, 755}, + dictWord{6, 0, 1046}, + dictWord{134, 0, 1485}, + dictWord{134, 0, 950}, + dictWord{132, 0, 887}, + dictWord{14, 0, 450}, + dictWord{148, 0, 111}, + dictWord{7, 0, 620}, + dictWord{7, 0, 831}, + dictWord{9, 10, 542}, + dictWord{9, 10, 566}, + dictWord{ + 138, + 10, + 728, + }, + dictWord{6, 0, 165}, + dictWord{138, 0, 388}, + dictWord{139, 10, 263}, + dictWord{4, 0, 719}, + dictWord{135, 0, 155}, + dictWord{138, 10, 468}, + dictWord{6, 11, 453}, + dictWord{144, 11, 36}, + dictWord{134, 11, 129}, + dictWord{5, 0, 533}, + dictWord{7, 0, 755}, + dictWord{138, 0, 780}, + dictWord{134, 0, 1465}, + dictWord{4, 0, 353}, + dictWord{6, 0, 146}, + dictWord{6, 0, 1789}, + dictWord{7, 0, 427}, + dictWord{7, 0, 990}, + dictWord{7, 0, 1348}, + dictWord{9, 0, 665}, + dictWord{9, 0, 898}, + dictWord{11, 0, 893}, + dictWord{142, 0, 212}, + dictWord{7, 10, 87}, + dictWord{142, 10, 288}, + dictWord{4, 0, 45}, + dictWord{135, 0, 1257}, + dictWord{12, 0, 7}, + dictWord{7, 10, 988}, + dictWord{7, 10, 1939}, + dictWord{9, 10, 64}, + dictWord{9, 10, 502}, + dictWord{12, 10, 34}, + dictWord{13, 10, 12}, + dictWord{13, 10, 234}, + dictWord{147, 10, 77}, + dictWord{4, 0, 607}, + dictWord{5, 11, 60}, + dictWord{6, 11, 504}, + dictWord{7, 11, 614}, + dictWord{7, 11, 1155}, + dictWord{140, 11, 0}, + dictWord{ + 135, + 10, + 141, + }, + dictWord{8, 11, 198}, + dictWord{11, 11, 29}, + dictWord{140, 11, 534}, + dictWord{140, 0, 65}, + dictWord{136, 0, 816}, + dictWord{132, 10, 619}, + dictWord{139, 0, 88}, + dictWord{5, 10, 246}, + dictWord{8, 10, 189}, + dictWord{9, 10, 355}, + dictWord{9, 10, 512}, + dictWord{10, 10, 124}, + dictWord{10, 10, 453}, + dictWord{11, 10, 143}, + dictWord{11, 10, 416}, + dictWord{11, 10, 859}, + dictWord{141, 10, 341}, + dictWord{4, 11, 379}, + dictWord{135, 11, 1397}, + dictWord{ + 4, + 0, + 600, + }, + dictWord{137, 0, 621}, + dictWord{133, 0, 367}, + dictWord{134, 0, 561}, + dictWord{6, 0, 559}, + dictWord{134, 0, 1691}, + dictWord{6, 0, 585}, + dictWord{ + 134, + 11, + 585, + }, + dictWord{135, 11, 1228}, + dictWord{4, 11, 118}, + dictWord{5, 10, 678}, + dictWord{6, 11, 274}, + dictWord{6, 11, 361}, + dictWord{7, 11, 75}, + dictWord{ + 141, + 11, + 441, + }, + dictWord{135, 11, 1818}, + dictWord{137, 11, 841}, + dictWord{5, 0, 573}, + dictWord{6, 0, 287}, + dictWord{7, 10, 862}, + dictWord{7, 10, 1886}, + dictWord{138, 10, 179}, + dictWord{132, 10, 517}, + dictWord{140, 11, 693}, + dictWord{5, 11, 314}, + dictWord{6, 11, 221}, + dictWord{7, 11, 419}, + dictWord{ + 10, + 11, + 650, + }, + dictWord{11, 11, 396}, + dictWord{12, 11, 156}, + dictWord{13, 11, 369}, + dictWord{14, 11, 333}, + dictWord{145, 11, 47}, + dictWord{140, 10, 540}, + dictWord{136, 10, 667}, + dictWord{11, 10, 403}, + dictWord{146, 10, 83}, + dictWord{6, 0, 672}, + dictWord{133, 10, 761}, + dictWord{9, 0, 157}, + dictWord{10, 10, 131}, + dictWord{140, 10, 72}, + dictWord{7, 0, 714}, + dictWord{134, 11, 460}, + dictWord{134, 0, 456}, + dictWord{133, 0, 925}, + dictWord{5, 11, 682}, + dictWord{ + 135, + 11, + 1887, + }, + dictWord{136, 11, 510}, + dictWord{136, 11, 475}, + dictWord{133, 11, 1016}, + dictWord{9, 0, 19}, + dictWord{7, 11, 602}, + dictWord{8, 11, 179}, + dictWord{ + 10, + 11, + 781, + }, + dictWord{140, 11, 126}, + dictWord{6, 11, 329}, + dictWord{138, 11, 111}, + dictWord{6, 0, 822}, + dictWord{134, 0, 1473}, + dictWord{144, 11, 86}, + dictWord{11, 0, 113}, + dictWord{139, 11, 113}, + dictWord{5, 11, 821}, + dictWord{134, 11, 1687}, + dictWord{133, 10, 449}, + dictWord{7, 0, 463}, + dictWord{ + 17, + 0, + 69, + }, + dictWord{136, 10, 103}, + dictWord{7, 10, 2028}, + dictWord{138, 10, 641}, + dictWord{6, 0, 193}, + dictWord{7, 0, 240}, + dictWord{7, 0, 1682}, + dictWord{ + 10, + 0, + 51, + }, + dictWord{10, 0, 640}, + dictWord{11, 0, 410}, + dictWord{13, 0, 82}, + dictWord{14, 0, 247}, + dictWord{14, 0, 331}, + dictWord{142, 0, 377}, + dictWord{6, 0, 471}, + dictWord{11, 0, 411}, + dictWord{142, 0, 2}, + dictWord{5, 11, 71}, + dictWord{7, 11, 1407}, + dictWord{9, 11, 388}, + dictWord{9, 11, 704}, + dictWord{10, 11, 261}, + dictWord{ + 10, + 11, + 619, + }, + dictWord{11, 11, 547}, + dictWord{11, 11, 619}, + dictWord{143, 11, 157}, + dictWord{136, 0, 633}, + dictWord{135, 0, 1148}, + dictWord{6, 0, 554}, + dictWord{7, 0, 1392}, + dictWord{12, 0, 129}, + dictWord{7, 10, 1274}, + dictWord{7, 10, 1386}, + dictWord{7, 11, 2008}, + dictWord{9, 11, 337}, + dictWord{10, 11, 517}, + dictWord{146, 10, 87}, + dictWord{7, 0, 803}, + dictWord{8, 0, 542}, + dictWord{6, 10, 187}, + dictWord{7, 10, 1203}, + dictWord{8, 10, 380}, + dictWord{14, 10, 117}, + dictWord{149, 10, 28}, + dictWord{6, 10, 297}, + dictWord{7, 10, 793}, + dictWord{139, 10, 938}, + dictWord{8, 0, 438}, + dictWord{11, 0, 363}, + dictWord{7, 10, 464}, + dictWord{11, 10, 105}, + dictWord{12, 10, 231}, + dictWord{14, 10, 386}, + dictWord{15, 10, 102}, + dictWord{148, 10, 75}, + dictWord{5, 11, 16}, + dictWord{6, 11, 86}, + dictWord{6, 11, 603}, + dictWord{7, 11, 292}, + dictWord{7, 11, 561}, + dictWord{8, 11, 257}, + dictWord{8, 11, 382}, + dictWord{9, 11, 721}, + dictWord{9, 11, 778}, + dictWord{ + 11, + 11, + 581, + }, + dictWord{140, 11, 466}, + dictWord{6, 0, 717}, + dictWord{4, 11, 486}, + dictWord{133, 11, 491}, + dictWord{132, 0, 875}, + dictWord{132, 11, 72}, + dictWord{6, 11, 265}, + dictWord{135, 11, 847}, + dictWord{4, 0, 237}, + dictWord{135, 0, 514}, + dictWord{6, 0, 392}, + dictWord{7, 0, 65}, + dictWord{135, 0, 2019}, + dictWord{140, 11, 261}, + dictWord{135, 11, 922}, + dictWord{137, 11, 404}, + dictWord{12, 0, 563}, + dictWord{14, 0, 101}, + dictWord{18, 0, 129}, + dictWord{ + 7, + 10, + 1010, + }, + dictWord{11, 10, 733}, + dictWord{11, 10, 759}, + dictWord{13, 10, 34}, + dictWord{146, 10, 45}, + dictWord{7, 10, 1656}, + dictWord{9, 10, 369}, + dictWord{ + 10, + 10, + 338, + }, + dictWord{10, 10, 490}, + dictWord{11, 10, 154}, + dictWord{11, 10, 545}, + dictWord{11, 10, 775}, + dictWord{13, 10, 77}, + dictWord{141, 10, 274}, + dictWord{4, 0, 444}, + dictWord{10, 0, 146}, + dictWord{140, 0, 9}, + dictWord{139, 11, 163}, + dictWord{7, 0, 1260}, + dictWord{135, 0, 1790}, + dictWord{9, 0, 222}, + dictWord{10, 0, 43}, + dictWord{139, 0, 900}, + dictWord{137, 11, 234}, + dictWord{138, 0, 971}, + dictWord{137, 0, 761}, + dictWord{134, 0, 699}, + dictWord{ + 136, + 11, + 434, + }, + dictWord{6, 0, 1116}, + dictWord{7, 0, 1366}, + dictWord{5, 10, 20}, + dictWord{6, 11, 197}, + dictWord{6, 10, 298}, + dictWord{7, 10, 659}, + dictWord{8, 11, 205}, + dictWord{137, 10, 219}, + dictWord{132, 11, 490}, + dictWord{11, 11, 820}, + dictWord{150, 11, 51}, + dictWord{7, 10, 1440}, + dictWord{11, 10, 854}, + dictWord{ + 11, + 10, + 872, + }, + dictWord{11, 10, 921}, + dictWord{12, 10, 551}, + dictWord{13, 10, 472}, + dictWord{142, 10, 367}, + dictWord{140, 11, 13}, + dictWord{132, 0, 829}, + dictWord{12, 0, 242}, + dictWord{132, 10, 439}, + dictWord{136, 10, 669}, + dictWord{6, 0, 593}, + dictWord{6, 11, 452}, + dictWord{7, 11, 312}, + dictWord{ + 138, + 11, + 219, + }, + dictWord{4, 11, 333}, + dictWord{9, 11, 176}, + dictWord{12, 11, 353}, + dictWord{141, 11, 187}, + dictWord{7, 0, 36}, + dictWord{8, 0, 201}, + dictWord{ + 136, + 0, + 605, + }, + dictWord{140, 0, 224}, + dictWord{132, 10, 233}, + dictWord{134, 0, 1430}, + dictWord{134, 0, 1806}, + dictWord{4, 0, 523}, + dictWord{133, 0, 638}, + dictWord{ + 6, + 0, + 1889, + }, + dictWord{9, 0, 958}, + dictWord{9, 0, 971}, + dictWord{9, 0, 976}, + dictWord{12, 0, 796}, + dictWord{12, 0, 799}, + dictWord{12, 0, 808}, + dictWord{ + 12, + 0, + 835, + }, + dictWord{12, 0, 836}, + dictWord{12, 0, 914}, + dictWord{12, 0, 946}, + dictWord{15, 0, 216}, + dictWord{15, 0, 232}, + dictWord{18, 0, 183}, + dictWord{18, 0, 187}, + dictWord{18, 0, 194}, + dictWord{18, 0, 212}, + dictWord{18, 0, 232}, + dictWord{149, 0, 49}, + dictWord{132, 10, 482}, + dictWord{6, 0, 827}, + dictWord{134, 0, 1434}, + dictWord{135, 10, 346}, + dictWord{134, 0, 2043}, + dictWord{6, 0, 242}, + dictWord{7, 0, 227}, + dictWord{7, 0, 1581}, + dictWord{8, 0, 104}, + dictWord{9, 0, 113}, + dictWord{9, 0, 220}, + dictWord{9, 0, 427}, + dictWord{10, 0, 136}, + dictWord{10, 0, 239}, + dictWord{11, 0, 579}, + dictWord{11, 0, 1023}, + dictWord{13, 0, 4}, + dictWord{ + 13, + 0, + 204, + }, + dictWord{13, 0, 316}, + dictWord{148, 0, 86}, + dictWord{134, 11, 1685}, + dictWord{7, 0, 148}, + dictWord{8, 0, 284}, + dictWord{141, 0, 63}, + dictWord{ + 142, + 0, + 10, + }, + dictWord{135, 11, 584}, + dictWord{134, 0, 1249}, + dictWord{7, 0, 861}, + dictWord{135, 10, 334}, + dictWord{5, 10, 795}, + dictWord{6, 10, 1741}, + dictWord{ + 137, + 11, + 70, + }, + dictWord{132, 0, 807}, + dictWord{7, 11, 135}, + dictWord{8, 11, 7}, + dictWord{8, 11, 62}, + dictWord{9, 11, 243}, + dictWord{10, 11, 658}, + dictWord{ + 10, + 11, + 697, + }, + dictWord{11, 11, 456}, + dictWord{139, 11, 756}, + dictWord{9, 11, 395}, + dictWord{138, 11, 79}, + dictWord{137, 11, 108}, + dictWord{147, 0, 94}, + dictWord{136, 0, 494}, + dictWord{135, 11, 631}, + dictWord{135, 10, 622}, + dictWord{7, 0, 1510}, + dictWord{135, 10, 1750}, + dictWord{4, 10, 203}, + dictWord{ + 135, + 10, + 1936, + }, + dictWord{7, 11, 406}, + dictWord{7, 11, 459}, + dictWord{8, 11, 606}, + dictWord{139, 11, 726}, + dictWord{7, 0, 1306}, + dictWord{8, 0, 505}, + dictWord{ + 9, + 0, + 482, + }, + dictWord{10, 0, 126}, + dictWord{11, 0, 225}, + dictWord{12, 0, 347}, + dictWord{12, 0, 449}, + dictWord{13, 0, 19}, + dictWord{14, 0, 218}, + dictWord{142, 0, 435}, + dictWord{5, 0, 268}, + dictWord{10, 0, 764}, + dictWord{12, 0, 120}, + dictWord{13, 0, 39}, + dictWord{145, 0, 127}, + dictWord{142, 11, 68}, + dictWord{11, 10, 678}, + dictWord{140, 10, 307}, + dictWord{12, 11, 268}, + dictWord{12, 11, 640}, + dictWord{142, 11, 119}, + dictWord{135, 10, 2044}, + dictWord{133, 11, 612}, + dictWord{ + 4, + 11, + 372, + }, + dictWord{7, 11, 482}, + dictWord{8, 11, 158}, + dictWord{9, 11, 602}, + dictWord{9, 11, 615}, + dictWord{10, 11, 245}, + dictWord{10, 11, 678}, + dictWord{ + 10, + 11, + 744, + }, + dictWord{11, 11, 248}, + dictWord{139, 11, 806}, + dictWord{7, 10, 311}, + dictWord{9, 10, 308}, + dictWord{140, 10, 255}, + dictWord{4, 0, 384}, + dictWord{135, 0, 1022}, + dictWord{5, 11, 854}, + dictWord{135, 11, 1991}, + dictWord{135, 10, 1266}, + dictWord{4, 10, 400}, + dictWord{5, 10, 267}, + dictWord{ + 135, + 10, + 232, + }, + dictWord{135, 0, 1703}, + dictWord{9, 0, 159}, + dictWord{11, 0, 661}, + dictWord{140, 0, 603}, + dictWord{4, 0, 964}, + dictWord{14, 0, 438}, + dictWord{ + 14, + 0, + 444, + }, + dictWord{14, 0, 456}, + dictWord{22, 0, 60}, + dictWord{22, 0, 63}, + dictWord{9, 11, 106}, + dictWord{9, 11, 163}, + dictWord{9, 11, 296}, + dictWord{10, 11, 167}, + dictWord{10, 11, 172}, + dictWord{10, 11, 777}, + dictWord{139, 11, 16}, + dictWord{136, 0, 583}, + dictWord{132, 0, 515}, + dictWord{8, 0, 632}, + dictWord{8, 0, 697}, + dictWord{137, 0, 854}, + dictWord{5, 11, 195}, + dictWord{135, 11, 1685}, + dictWord{6, 0, 1123}, + dictWord{134, 0, 1365}, + dictWord{134, 11, 328}, + dictWord{ + 7, + 11, + 1997, + }, + dictWord{8, 11, 730}, + dictWord{139, 11, 1006}, + dictWord{4, 0, 136}, + dictWord{133, 0, 551}, + dictWord{134, 0, 1782}, + dictWord{7, 0, 1287}, + dictWord{ + 9, + 0, + 44, + }, + dictWord{10, 0, 552}, + dictWord{10, 0, 642}, + dictWord{11, 0, 839}, + dictWord{12, 0, 274}, + dictWord{12, 0, 275}, + dictWord{12, 0, 372}, + dictWord{ + 13, + 0, + 91, + }, + dictWord{142, 0, 125}, + dictWord{5, 11, 751}, + dictWord{11, 11, 797}, + dictWord{140, 11, 203}, + dictWord{133, 0, 732}, + dictWord{7, 0, 679}, + dictWord{ + 8, + 0, + 313, + }, + dictWord{4, 10, 100}, + dictWord{135, 11, 821}, + dictWord{10, 0, 361}, + dictWord{142, 0, 316}, + dictWord{134, 0, 595}, + dictWord{6, 0, 147}, + dictWord{ + 7, + 0, + 886, + }, + dictWord{9, 0, 753}, + dictWord{138, 0, 268}, + dictWord{5, 10, 362}, + dictWord{5, 10, 443}, + dictWord{6, 10, 318}, + dictWord{7, 10, 1019}, + dictWord{ + 139, + 10, + 623, + }, + dictWord{5, 10, 463}, + dictWord{136, 10, 296}, + dictWord{4, 10, 454}, + dictWord{5, 11, 950}, + dictWord{5, 11, 994}, + dictWord{134, 11, 351}, + dictWord{ + 138, + 0, + 137, + }, + dictWord{5, 10, 48}, + dictWord{5, 10, 404}, + dictWord{6, 10, 557}, + dictWord{7, 10, 458}, + dictWord{8, 10, 597}, + dictWord{10, 10, 455}, + dictWord{ + 10, + 10, + 606, + }, + dictWord{11, 10, 49}, + dictWord{11, 10, 548}, + dictWord{12, 10, 476}, + dictWord{13, 10, 18}, + dictWord{141, 10, 450}, + dictWord{133, 0, 414}, + dictWord{ + 135, + 0, + 1762, + }, + dictWord{5, 11, 421}, + dictWord{135, 11, 47}, + dictWord{5, 10, 442}, + dictWord{135, 10, 1984}, + dictWord{134, 0, 599}, + dictWord{134, 0, 1749}, + dictWord{134, 0, 1627}, + dictWord{4, 0, 488}, + dictWord{132, 11, 350}, + dictWord{137, 11, 751}, + dictWord{132, 0, 83}, + dictWord{140, 0, 676}, + dictWord{ + 133, + 11, + 967, + }, + dictWord{7, 0, 1639}, + dictWord{5, 10, 55}, + dictWord{140, 10, 161}, + dictWord{4, 11, 473}, + dictWord{7, 11, 623}, + dictWord{8, 11, 808}, + dictWord{ + 9, + 11, + 871, + }, + dictWord{9, 11, 893}, + dictWord{11, 11, 38}, + dictWord{11, 11, 431}, + dictWord{12, 11, 112}, + dictWord{12, 11, 217}, + dictWord{12, 11, 243}, + dictWord{ + 12, + 11, + 562, + }, + dictWord{12, 11, 683}, + dictWord{13, 11, 141}, + dictWord{13, 11, 197}, + dictWord{13, 11, 227}, + dictWord{13, 11, 406}, + dictWord{13, 11, 487}, + dictWord{14, 11, 156}, + dictWord{14, 11, 203}, + dictWord{14, 11, 224}, + dictWord{14, 11, 256}, + dictWord{18, 11, 58}, + dictWord{150, 11, 0}, + dictWord{ + 133, + 10, + 450, + }, + dictWord{7, 11, 736}, + dictWord{139, 11, 264}, + dictWord{134, 0, 278}, + dictWord{4, 11, 222}, + dictWord{7, 11, 286}, + dictWord{136, 11, 629}, + dictWord{ + 135, + 10, + 869, + }, + dictWord{140, 0, 97}, + dictWord{144, 0, 14}, + dictWord{134, 0, 1085}, + dictWord{4, 10, 213}, + dictWord{7, 10, 223}, + dictWord{136, 10, 80}, + dictWord{ + 7, + 0, + 388, + }, + dictWord{7, 0, 644}, + dictWord{139, 0, 781}, + dictWord{132, 0, 849}, + dictWord{7, 0, 229}, + dictWord{8, 0, 59}, + dictWord{9, 0, 190}, + dictWord{10, 0, 378}, + dictWord{140, 0, 191}, + dictWord{7, 10, 381}, + dictWord{7, 10, 806}, + dictWord{7, 10, 820}, + dictWord{8, 10, 354}, + dictWord{8, 10, 437}, + dictWord{8, 10, 787}, + dictWord{9, 10, 657}, + dictWord{10, 10, 58}, + dictWord{10, 10, 339}, + dictWord{10, 10, 749}, + dictWord{11, 10, 914}, + dictWord{12, 10, 162}, + dictWord{13, 10, 75}, + dictWord{14, 10, 106}, + dictWord{14, 10, 198}, + dictWord{14, 10, 320}, + dictWord{14, 10, 413}, + dictWord{146, 10, 43}, + dictWord{141, 11, 306}, + dictWord{ + 136, + 10, + 747, + }, + dictWord{134, 0, 1115}, + dictWord{16, 0, 94}, + dictWord{16, 0, 108}, + dictWord{136, 11, 146}, + dictWord{6, 0, 700}, + dictWord{6, 0, 817}, + dictWord{ + 134, + 0, + 1002, + }, + dictWord{133, 10, 692}, + dictWord{4, 11, 465}, + dictWord{135, 11, 1663}, + dictWord{134, 10, 191}, + dictWord{6, 0, 1414}, + dictWord{ + 135, + 11, + 913, + }, + dictWord{132, 0, 660}, + dictWord{7, 0, 1035}, + dictWord{138, 0, 737}, + dictWord{6, 10, 162}, + dictWord{7, 10, 1960}, + dictWord{136, 10, 831}, + dictWord{ + 132, + 10, + 706, + }, + dictWord{7, 0, 690}, + dictWord{9, 0, 217}, + dictWord{9, 0, 587}, + dictWord{140, 0, 521}, + dictWord{138, 10, 426}, + dictWord{135, 10, 1235}, + dictWord{ + 6, + 11, + 82, + }, + dictWord{7, 11, 138}, + dictWord{7, 11, 517}, + dictWord{9, 11, 673}, + dictWord{139, 11, 238}, + dictWord{138, 0, 272}, + dictWord{5, 11, 495}, + dictWord{ + 7, + 11, + 834, + }, + dictWord{9, 11, 733}, + dictWord{139, 11, 378}, + dictWord{134, 0, 1744}, + dictWord{132, 0, 1011}, + dictWord{7, 11, 828}, + dictWord{142, 11, 116}, + dictWord{4, 0, 733}, + dictWord{9, 0, 194}, + dictWord{10, 0, 92}, + dictWord{11, 0, 198}, + dictWord{12, 0, 84}, + dictWord{13, 0, 128}, + dictWord{133, 11, 559}, + dictWord{ + 10, + 0, + 57, + }, + dictWord{10, 0, 277}, + dictWord{6, 11, 21}, + dictWord{6, 11, 1737}, + dictWord{7, 11, 1444}, + dictWord{136, 11, 224}, + dictWord{4, 10, 204}, + dictWord{ + 137, + 10, + 902, + }, + dictWord{136, 10, 833}, + dictWord{11, 0, 348}, + dictWord{12, 0, 99}, + dictWord{18, 0, 1}, + dictWord{18, 0, 11}, + dictWord{19, 0, 4}, + dictWord{7, 10, 366}, + dictWord{9, 10, 287}, + dictWord{12, 10, 199}, + dictWord{12, 10, 556}, + dictWord{140, 10, 577}, + dictWord{6, 0, 1981}, + dictWord{136, 0, 936}, + dictWord{ + 21, + 0, + 33, + }, + dictWord{150, 0, 40}, + dictWord{5, 11, 519}, + dictWord{138, 11, 204}, + dictWord{5, 10, 356}, + dictWord{135, 10, 224}, + dictWord{134, 0, 775}, + dictWord{ + 135, + 0, + 306, + }, + dictWord{7, 10, 630}, + dictWord{9, 10, 567}, + dictWord{11, 10, 150}, + dictWord{11, 10, 444}, + dictWord{141, 10, 119}, + dictWord{5, 0, 979}, + dictWord{ + 134, + 10, + 539, + }, + dictWord{133, 0, 611}, + dictWord{4, 11, 402}, + dictWord{135, 11, 1679}, + dictWord{5, 0, 178}, + dictWord{7, 11, 2}, + dictWord{8, 11, 323}, + dictWord{ + 136, + 11, + 479, + }, + dictWord{5, 11, 59}, + dictWord{135, 11, 672}, + dictWord{4, 0, 1010}, + dictWord{6, 0, 1969}, + dictWord{138, 11, 237}, + dictWord{133, 11, 412}, + dictWord{146, 11, 34}, + dictWord{7, 11, 1740}, + dictWord{146, 11, 48}, + dictWord{134, 0, 664}, + dictWord{139, 10, 814}, + dictWord{4, 11, 85}, + dictWord{ + 135, + 11, + 549, + }, + dictWord{133, 11, 94}, + dictWord{133, 11, 457}, + dictWord{132, 0, 390}, + dictWord{134, 0, 1510}, + dictWord{4, 10, 235}, + dictWord{135, 10, 255}, + dictWord{4, 10, 194}, + dictWord{5, 10, 584}, + dictWord{6, 11, 11}, + dictWord{6, 10, 384}, + dictWord{7, 11, 187}, + dictWord{7, 10, 583}, + dictWord{10, 10, 761}, + dictWord{ + 11, + 10, + 760, + }, + dictWord{139, 10, 851}, + dictWord{4, 11, 522}, + dictWord{139, 11, 802}, + dictWord{135, 0, 493}, + dictWord{10, 11, 776}, + dictWord{13, 11, 345}, + dictWord{142, 11, 425}, + dictWord{146, 0, 37}, + dictWord{4, 11, 52}, + dictWord{135, 11, 661}, + dictWord{134, 0, 724}, + dictWord{134, 0, 829}, + dictWord{ + 133, + 11, + 520, + }, + dictWord{133, 10, 562}, + dictWord{4, 11, 281}, + dictWord{5, 11, 38}, + dictWord{7, 11, 194}, + dictWord{7, 11, 668}, + dictWord{7, 11, 1893}, + dictWord{ + 137, + 11, + 397, + }, + dictWord{5, 10, 191}, + dictWord{137, 10, 271}, + dictWord{7, 0, 1537}, + dictWord{14, 0, 96}, + dictWord{143, 0, 73}, + dictWord{5, 0, 473}, + dictWord{ + 11, + 0, + 168, + }, + dictWord{4, 10, 470}, + dictWord{6, 10, 153}, + dictWord{7, 10, 1503}, + dictWord{7, 10, 1923}, + dictWord{10, 10, 701}, + dictWord{11, 10, 132}, + dictWord{ + 11, + 10, + 227, + }, + dictWord{11, 10, 320}, + dictWord{11, 10, 436}, + dictWord{11, 10, 525}, + dictWord{11, 10, 855}, + dictWord{12, 10, 41}, + dictWord{12, 10, 286}, + dictWord{13, 10, 103}, + dictWord{13, 10, 284}, + dictWord{14, 10, 255}, + dictWord{14, 10, 262}, + dictWord{15, 10, 117}, + dictWord{143, 10, 127}, + dictWord{ + 133, + 0, + 105, + }, + dictWord{5, 0, 438}, + dictWord{9, 0, 694}, + dictWord{12, 0, 627}, + dictWord{141, 0, 210}, + dictWord{133, 10, 327}, + dictWord{6, 10, 552}, + dictWord{ + 7, + 10, + 1754, + }, + dictWord{137, 10, 604}, + dictWord{134, 0, 1256}, + dictWord{152, 0, 11}, + dictWord{5, 11, 448}, + dictWord{11, 11, 98}, + dictWord{139, 11, 524}, + dictWord{ + 7, + 0, + 1626, + }, + dictWord{5, 10, 80}, + dictWord{6, 10, 405}, + dictWord{7, 10, 403}, + dictWord{7, 10, 1502}, + dictWord{8, 10, 456}, + dictWord{9, 10, 487}, + dictWord{ + 9, + 10, + 853, + }, + dictWord{9, 10, 889}, + dictWord{10, 10, 309}, + dictWord{11, 10, 721}, + dictWord{11, 10, 994}, + dictWord{12, 10, 430}, + dictWord{13, 10, 165}, + dictWord{ + 14, + 11, + 16, + }, + dictWord{146, 11, 44}, + dictWord{132, 0, 779}, + dictWord{8, 0, 25}, + dictWord{138, 0, 826}, + dictWord{4, 10, 453}, + dictWord{5, 10, 887}, + dictWord{ + 6, + 10, + 535, + }, + dictWord{8, 10, 6}, + dictWord{8, 10, 543}, + dictWord{136, 10, 826}, + dictWord{137, 11, 461}, + dictWord{140, 11, 632}, + dictWord{132, 0, 308}, + dictWord{135, 0, 741}, + dictWord{132, 0, 671}, + dictWord{7, 0, 150}, + dictWord{8, 0, 649}, + dictWord{136, 0, 1020}, + dictWord{9, 0, 99}, + dictWord{6, 11, 336}, + dictWord{ + 8, + 11, + 552, + }, + dictWord{9, 11, 285}, + dictWord{10, 11, 99}, + dictWord{139, 11, 568}, + dictWord{134, 0, 521}, + dictWord{5, 0, 339}, + dictWord{14, 0, 3}, + dictWord{ + 15, + 0, + 41, + }, + dictWord{15, 0, 166}, + dictWord{147, 0, 66}, + dictWord{6, 11, 423}, + dictWord{7, 11, 665}, + dictWord{7, 11, 1210}, + dictWord{9, 11, 218}, + dictWord{ + 141, + 11, + 222, + }, + dictWord{6, 0, 543}, + dictWord{5, 10, 101}, + dictWord{5, 11, 256}, + dictWord{6, 10, 88}, + dictWord{7, 10, 1677}, + dictWord{9, 10, 100}, + dictWord{10, 10, 677}, + dictWord{14, 10, 169}, + dictWord{14, 10, 302}, + dictWord{14, 10, 313}, + dictWord{15, 10, 48}, + dictWord{143, 10, 84}, + dictWord{4, 10, 310}, + dictWord{ + 7, + 10, + 708, + }, + dictWord{7, 10, 996}, + dictWord{9, 10, 795}, + dictWord{10, 10, 390}, + dictWord{10, 10, 733}, + dictWord{11, 10, 451}, + dictWord{12, 10, 249}, + dictWord{ + 14, + 10, + 115, + }, + dictWord{14, 10, 286}, + dictWord{143, 10, 100}, + dictWord{133, 10, 587}, + dictWord{13, 11, 417}, + dictWord{14, 11, 129}, + dictWord{143, 11, 15}, + dictWord{134, 0, 1358}, + dictWord{136, 11, 554}, + dictWord{132, 10, 498}, + dictWord{7, 10, 217}, + dictWord{8, 10, 140}, + dictWord{138, 10, 610}, + dictWord{ + 135, + 11, + 989, + }, + dictWord{135, 11, 634}, + dictWord{6, 0, 155}, + dictWord{140, 0, 234}, + dictWord{135, 11, 462}, + dictWord{132, 11, 618}, + dictWord{ + 134, + 0, + 1628, + }, + dictWord{132, 0, 766}, + dictWord{4, 11, 339}, + dictWord{5, 10, 905}, + dictWord{135, 11, 259}, + dictWord{135, 0, 829}, + dictWord{4, 11, 759}, + dictWord{ + 141, + 11, + 169, + }, + dictWord{7, 0, 1445}, + dictWord{4, 10, 456}, + dictWord{7, 10, 358}, + dictWord{7, 10, 1637}, + dictWord{8, 10, 643}, + dictWord{139, 10, 483}, + dictWord{ + 5, + 0, + 486, + }, + dictWord{135, 0, 1349}, + dictWord{5, 11, 688}, + dictWord{135, 11, 712}, + dictWord{7, 0, 1635}, + dictWord{8, 0, 17}, + dictWord{10, 0, 217}, + dictWord{ + 10, + 0, + 295, + }, + dictWord{12, 0, 2}, + dictWord{140, 11, 2}, + dictWord{138, 0, 558}, + dictWord{150, 10, 56}, + dictWord{4, 11, 278}, + dictWord{5, 11, 465}, + dictWord{ + 135, + 11, + 1367, + }, + dictWord{136, 11, 482}, + dictWord{133, 10, 535}, + dictWord{6, 0, 1362}, + dictWord{6, 0, 1461}, + dictWord{10, 11, 274}, + dictWord{10, 11, 625}, + dictWord{139, 11, 530}, + dictWord{5, 0, 599}, + dictWord{5, 11, 336}, + dictWord{6, 11, 341}, + dictWord{6, 11, 478}, + dictWord{6, 11, 1763}, + dictWord{136, 11, 386}, + dictWord{7, 10, 1748}, + dictWord{137, 11, 151}, + dictWord{134, 0, 1376}, + dictWord{133, 10, 539}, + dictWord{135, 11, 73}, + dictWord{135, 11, 1971}, + dictWord{139, 11, 283}, + dictWord{9, 0, 93}, + dictWord{139, 0, 474}, + dictWord{6, 10, 91}, + dictWord{135, 10, 435}, + dictWord{6, 0, 447}, + dictWord{5, 11, 396}, + dictWord{134, 11, 501}, + dictWord{4, 10, 16}, + dictWord{5, 10, 316}, + dictWord{5, 10, 842}, + dictWord{6, 10, 370}, + dictWord{6, 10, 1778}, + dictWord{8, 10, 166}, + dictWord{11, 10, 812}, + dictWord{12, 10, 206}, + dictWord{12, 10, 351}, + dictWord{14, 10, 418}, + dictWord{16, 10, 15}, + dictWord{16, 10, 34}, + dictWord{18, 10, 3}, + dictWord{19, 10, 3}, + dictWord{19, 10, 7}, + dictWord{20, 10, 4}, + dictWord{149, 10, 21}, + dictWord{7, 0, 577}, + dictWord{7, 0, 1432}, + dictWord{9, 0, 475}, + dictWord{9, 0, 505}, + dictWord{9, 0, 526}, + dictWord{9, 0, 609}, + dictWord{9, 0, 689}, + dictWord{9, 0, 726}, + dictWord{9, 0, 735}, + dictWord{9, 0, 738}, + dictWord{10, 0, 556}, + dictWord{ + 10, + 0, + 674, + }, + dictWord{10, 0, 684}, + dictWord{11, 0, 89}, + dictWord{11, 0, 202}, + dictWord{11, 0, 272}, + dictWord{11, 0, 380}, + dictWord{11, 0, 415}, + dictWord{11, 0, 505}, + dictWord{11, 0, 537}, + dictWord{11, 0, 550}, + dictWord{11, 0, 562}, + dictWord{11, 0, 640}, + dictWord{11, 0, 667}, + dictWord{11, 0, 688}, + dictWord{11, 0, 847}, + dictWord{11, 0, 927}, + dictWord{11, 0, 930}, + dictWord{11, 0, 940}, + dictWord{12, 0, 144}, + dictWord{12, 0, 325}, + dictWord{12, 0, 329}, + dictWord{12, 0, 389}, + dictWord{ + 12, + 0, + 403, + }, + dictWord{12, 0, 451}, + dictWord{12, 0, 515}, + dictWord{12, 0, 604}, + dictWord{12, 0, 616}, + dictWord{12, 0, 626}, + dictWord{13, 0, 66}, + dictWord{ + 13, + 0, + 131, + }, + dictWord{13, 0, 167}, + dictWord{13, 0, 236}, + dictWord{13, 0, 368}, + dictWord{13, 0, 411}, + dictWord{13, 0, 434}, + dictWord{13, 0, 453}, + dictWord{13, 0, 461}, + dictWord{13, 0, 474}, + dictWord{14, 0, 59}, + dictWord{14, 0, 60}, + dictWord{14, 0, 139}, + dictWord{14, 0, 152}, + dictWord{14, 0, 276}, + dictWord{14, 0, 353}, + dictWord{ + 14, + 0, + 402, + }, + dictWord{15, 0, 28}, + dictWord{15, 0, 81}, + dictWord{15, 0, 123}, + dictWord{15, 0, 152}, + dictWord{18, 0, 136}, + dictWord{148, 0, 88}, + dictWord{ + 4, + 11, + 929, + }, + dictWord{133, 11, 799}, + dictWord{136, 11, 46}, + dictWord{142, 0, 307}, + dictWord{4, 0, 609}, + dictWord{7, 0, 756}, + dictWord{9, 0, 544}, + dictWord{ + 11, + 0, + 413, + }, + dictWord{144, 0, 25}, + dictWord{10, 0, 687}, + dictWord{7, 10, 619}, + dictWord{10, 10, 547}, + dictWord{11, 10, 122}, + dictWord{140, 10, 601}, + dictWord{ + 4, + 0, + 930, + }, + dictWord{133, 0, 947}, + dictWord{133, 0, 939}, + dictWord{142, 0, 21}, + dictWord{4, 11, 892}, + dictWord{133, 11, 770}, + dictWord{133, 0, 962}, + dictWord{ + 5, + 0, + 651, + }, + dictWord{8, 0, 170}, + dictWord{9, 0, 61}, + dictWord{9, 0, 63}, + dictWord{10, 0, 23}, + dictWord{10, 0, 37}, + dictWord{10, 0, 834}, + dictWord{11, 0, 4}, + dictWord{ + 11, + 0, + 187, + }, + dictWord{11, 0, 281}, + dictWord{11, 0, 503}, + dictWord{11, 0, 677}, + dictWord{12, 0, 96}, + dictWord{12, 0, 130}, + dictWord{12, 0, 244}, + dictWord{14, 0, 5}, + dictWord{14, 0, 40}, + dictWord{14, 0, 162}, + dictWord{14, 0, 202}, + dictWord{146, 0, 133}, + dictWord{4, 0, 406}, + dictWord{5, 0, 579}, + dictWord{12, 0, 492}, + dictWord{ + 150, + 0, + 15, + }, + dictWord{135, 11, 158}, + dictWord{135, 0, 597}, + dictWord{132, 0, 981}, + dictWord{132, 10, 888}, + dictWord{4, 10, 149}, + dictWord{138, 10, 368}, + dictWord{132, 0, 545}, + dictWord{4, 10, 154}, + dictWord{7, 10, 1134}, + dictWord{136, 10, 105}, + dictWord{135, 11, 2001}, + dictWord{134, 0, 1558}, + dictWord{ + 4, + 10, + 31, + }, + dictWord{6, 10, 429}, + dictWord{7, 10, 962}, + dictWord{9, 10, 458}, + dictWord{139, 10, 691}, + dictWord{132, 10, 312}, + dictWord{135, 10, 1642}, + dictWord{ + 6, + 0, + 17, + }, + dictWord{6, 0, 1304}, + dictWord{7, 0, 16}, + dictWord{7, 0, 1001}, + dictWord{9, 0, 886}, + dictWord{10, 0, 489}, + dictWord{10, 0, 800}, + dictWord{11, 0, 782}, + dictWord{12, 0, 320}, + dictWord{13, 0, 467}, + dictWord{14, 0, 145}, + dictWord{14, 0, 387}, + dictWord{143, 0, 119}, + dictWord{135, 0, 1982}, + dictWord{17, 0, 17}, + dictWord{7, 11, 1461}, + dictWord{140, 11, 91}, + dictWord{4, 10, 236}, + dictWord{132, 11, 602}, + dictWord{138, 0, 907}, + dictWord{136, 0, 110}, + dictWord{7, 0, 272}, + dictWord{19, 0, 53}, + dictWord{5, 10, 836}, + dictWord{5, 10, 857}, + dictWord{134, 10, 1680}, + dictWord{5, 0, 458}, + dictWord{7, 11, 1218}, + dictWord{136, 11, 303}, + dictWord{7, 0, 1983}, + dictWord{8, 0, 0}, + dictWord{8, 0, 171}, + dictWord{9, 0, 120}, + dictWord{9, 0, 732}, + dictWord{10, 0, 473}, + dictWord{11, 0, 656}, + dictWord{ + 11, + 0, + 998, + }, + dictWord{18, 0, 0}, + dictWord{18, 0, 2}, + dictWord{19, 0, 21}, + dictWord{10, 10, 68}, + dictWord{139, 10, 494}, + dictWord{137, 11, 662}, + dictWord{4, 11, 13}, + dictWord{5, 11, 567}, + dictWord{7, 11, 1498}, + dictWord{9, 11, 124}, + dictWord{11, 11, 521}, + dictWord{140, 11, 405}, + dictWord{4, 10, 81}, + dictWord{139, 10, 867}, + dictWord{135, 11, 1006}, + dictWord{7, 11, 800}, + dictWord{7, 11, 1783}, + dictWord{138, 11, 12}, + dictWord{9, 0, 295}, + dictWord{10, 0, 443}, + dictWord{ + 5, + 10, + 282, + }, + dictWord{8, 10, 650}, + dictWord{137, 10, 907}, + dictWord{132, 11, 735}, + dictWord{4, 11, 170}, + dictWord{4, 10, 775}, + dictWord{135, 11, 323}, + dictWord{ + 6, + 0, + 1844, + }, + dictWord{10, 0, 924}, + dictWord{11, 11, 844}, + dictWord{12, 11, 104}, + dictWord{140, 11, 625}, + dictWord{5, 11, 304}, + dictWord{7, 11, 1403}, + dictWord{140, 11, 498}, + dictWord{134, 0, 1232}, + dictWord{4, 0, 519}, + dictWord{10, 0, 70}, + dictWord{12, 0, 26}, + dictWord{14, 0, 17}, + dictWord{14, 0, 178}, + dictWord{ + 15, + 0, + 34, + }, + dictWord{149, 0, 12}, + dictWord{132, 0, 993}, + dictWord{4, 11, 148}, + dictWord{133, 11, 742}, + dictWord{6, 0, 31}, + dictWord{7, 0, 491}, + dictWord{7, 0, 530}, + dictWord{8, 0, 592}, + dictWord{11, 0, 53}, + dictWord{11, 0, 779}, + dictWord{12, 0, 167}, + dictWord{12, 0, 411}, + dictWord{14, 0, 14}, + dictWord{14, 0, 136}, + dictWord{ + 15, + 0, + 72, + }, + dictWord{16, 0, 17}, + dictWord{144, 0, 72}, + dictWord{133, 0, 907}, + dictWord{134, 0, 733}, + dictWord{133, 11, 111}, + dictWord{4, 10, 71}, + dictWord{ + 5, + 10, + 376, + }, + dictWord{7, 10, 119}, + dictWord{138, 10, 665}, + dictWord{136, 0, 55}, + dictWord{8, 0, 430}, + dictWord{136, 11, 430}, + dictWord{4, 0, 208}, + dictWord{ + 5, + 0, + 106, + }, + dictWord{6, 0, 531}, + dictWord{8, 0, 408}, + dictWord{9, 0, 188}, + dictWord{138, 0, 572}, + dictWord{12, 0, 56}, + dictWord{11, 10, 827}, + dictWord{14, 10, 34}, + dictWord{143, 10, 148}, + dictWord{134, 0, 1693}, + dictWord{133, 11, 444}, + dictWord{132, 10, 479}, + dictWord{140, 0, 441}, + dictWord{9, 0, 449}, + dictWord{ + 10, + 0, + 192, + }, + dictWord{138, 0, 740}, + dictWord{134, 0, 928}, + dictWord{4, 0, 241}, + dictWord{7, 10, 607}, + dictWord{136, 10, 99}, + dictWord{8, 11, 123}, + dictWord{ + 15, + 11, + 6, + }, + dictWord{144, 11, 7}, + dictWord{6, 11, 285}, + dictWord{8, 11, 654}, + dictWord{11, 11, 749}, + dictWord{12, 11, 190}, + dictWord{12, 11, 327}, + dictWord{ + 13, + 11, + 120, + }, + dictWord{13, 11, 121}, + dictWord{13, 11, 327}, + dictWord{15, 11, 47}, + dictWord{146, 11, 40}, + dictWord{4, 10, 41}, + dictWord{5, 10, 74}, + dictWord{ + 7, + 10, + 1627, + }, + dictWord{11, 10, 871}, + dictWord{140, 10, 619}, + dictWord{7, 0, 1525}, + dictWord{11, 10, 329}, + dictWord{11, 10, 965}, + dictWord{12, 10, 241}, + dictWord{14, 10, 354}, + dictWord{15, 10, 22}, + dictWord{148, 10, 63}, + dictWord{132, 0, 259}, + dictWord{135, 11, 183}, + dictWord{9, 10, 209}, + dictWord{ + 137, + 10, + 300, + }, + dictWord{5, 11, 937}, + dictWord{135, 11, 100}, + dictWord{133, 10, 98}, + dictWord{4, 0, 173}, + dictWord{5, 0, 312}, + dictWord{5, 0, 512}, + dictWord{ + 135, + 0, + 1285, + }, + dictWord{141, 0, 185}, + dictWord{7, 0, 1603}, + dictWord{7, 0, 1691}, + dictWord{9, 0, 464}, + dictWord{11, 0, 195}, + dictWord{12, 0, 279}, + dictWord{ + 12, + 0, + 448, + }, + dictWord{14, 0, 11}, + dictWord{147, 0, 102}, + dictWord{135, 0, 1113}, + dictWord{133, 10, 984}, + dictWord{4, 0, 452}, + dictWord{5, 0, 583}, + dictWord{ + 135, + 0, + 720, + }, + dictWord{4, 0, 547}, + dictWord{5, 0, 817}, + dictWord{6, 0, 433}, + dictWord{7, 0, 593}, + dictWord{7, 0, 1378}, + dictWord{8, 0, 161}, + dictWord{9, 0, 284}, + dictWord{ + 10, + 0, + 313, + }, + dictWord{139, 0, 886}, + dictWord{8, 0, 722}, + dictWord{4, 10, 182}, + dictWord{6, 10, 205}, + dictWord{135, 10, 220}, + dictWord{150, 0, 13}, + dictWord{ + 4, + 10, + 42, + }, + dictWord{9, 10, 205}, + dictWord{9, 10, 786}, + dictWord{138, 10, 659}, + dictWord{6, 0, 289}, + dictWord{7, 0, 1670}, + dictWord{12, 0, 57}, + dictWord{151, 0, 4}, + dictWord{132, 10, 635}, + dictWord{14, 0, 43}, + dictWord{146, 0, 21}, + dictWord{139, 10, 533}, + dictWord{135, 0, 1694}, + dictWord{8, 0, 420}, + dictWord{ + 139, + 0, + 193, + }, + dictWord{135, 0, 409}, + dictWord{132, 10, 371}, + dictWord{4, 10, 272}, + dictWord{135, 10, 836}, + dictWord{5, 10, 825}, + dictWord{134, 10, 1640}, + dictWord{5, 11, 251}, + dictWord{5, 11, 956}, + dictWord{8, 11, 268}, + dictWord{9, 11, 214}, + dictWord{146, 11, 142}, + dictWord{138, 0, 308}, + dictWord{6, 0, 1863}, + dictWord{141, 11, 37}, + dictWord{137, 10, 879}, + dictWord{7, 10, 317}, + dictWord{135, 10, 569}, + dictWord{132, 11, 294}, + dictWord{134, 0, 790}, + dictWord{ + 5, + 0, + 1002, + }, + dictWord{136, 0, 745}, + dictWord{5, 11, 346}, + dictWord{5, 11, 711}, + dictWord{136, 11, 390}, + dictWord{135, 0, 289}, + dictWord{5, 0, 504}, + dictWord{ + 11, + 0, + 68, + }, + dictWord{137, 10, 307}, + dictWord{4, 0, 239}, + dictWord{6, 0, 477}, + dictWord{7, 0, 1607}, + dictWord{139, 0, 617}, + dictWord{149, 0, 13}, + dictWord{ + 133, + 0, + 609, + }, + dictWord{133, 11, 624}, + dictWord{5, 11, 783}, + dictWord{7, 11, 1998}, + dictWord{135, 11, 2047}, + dictWord{133, 10, 525}, + dictWord{132, 0, 367}, + dictWord{132, 11, 594}, + dictWord{6, 0, 528}, + dictWord{133, 10, 493}, + dictWord{4, 10, 174}, + dictWord{135, 10, 911}, + dictWord{8, 10, 417}, + dictWord{ + 137, + 10, + 782, + }, + dictWord{132, 0, 694}, + dictWord{7, 0, 548}, + dictWord{137, 0, 58}, + dictWord{4, 10, 32}, + dictWord{5, 10, 215}, + dictWord{6, 10, 269}, + dictWord{7, 10, 1782}, + dictWord{7, 10, 1892}, + dictWord{10, 10, 16}, + dictWord{11, 10, 822}, + dictWord{11, 10, 954}, + dictWord{141, 10, 481}, + dictWord{140, 0, 687}, + dictWord{ + 7, + 0, + 1749, + }, + dictWord{136, 10, 477}, + dictWord{132, 11, 569}, + dictWord{133, 10, 308}, + dictWord{135, 10, 1088}, + dictWord{4, 0, 661}, + dictWord{138, 0, 1004}, + dictWord{5, 11, 37}, + dictWord{6, 11, 39}, + dictWord{6, 11, 451}, + dictWord{7, 11, 218}, + dictWord{7, 11, 667}, + dictWord{7, 11, 1166}, + dictWord{7, 11, 1687}, + dictWord{8, 11, 662}, + dictWord{144, 11, 2}, + dictWord{9, 0, 445}, + dictWord{12, 0, 53}, + dictWord{13, 0, 492}, + dictWord{5, 10, 126}, + dictWord{8, 10, 297}, + dictWord{ + 9, + 10, + 366, + }, + dictWord{140, 10, 374}, + dictWord{7, 10, 1551}, + dictWord{139, 10, 361}, + dictWord{148, 0, 74}, + dictWord{134, 11, 508}, + dictWord{135, 0, 213}, + dictWord{132, 10, 175}, + dictWord{132, 10, 685}, + dictWord{6, 0, 760}, + dictWord{6, 0, 834}, + dictWord{134, 0, 1248}, + dictWord{7, 11, 453}, + dictWord{7, 11, 635}, + dictWord{7, 11, 796}, + dictWord{8, 11, 331}, + dictWord{9, 11, 328}, + dictWord{9, 11, 330}, + dictWord{9, 11, 865}, + dictWord{10, 11, 119}, + dictWord{10, 11, 235}, + dictWord{11, 11, 111}, + dictWord{11, 11, 129}, + dictWord{11, 11, 240}, + dictWord{12, 11, 31}, + dictWord{12, 11, 66}, + dictWord{12, 11, 222}, + dictWord{12, 11, 269}, + dictWord{12, 11, 599}, + dictWord{12, 11, 689}, + dictWord{13, 11, 186}, + dictWord{13, 11, 364}, + dictWord{142, 11, 345}, + dictWord{7, 0, 1672}, + dictWord{ + 139, + 0, + 189, + }, + dictWord{133, 10, 797}, + dictWord{133, 10, 565}, + dictWord{6, 0, 1548}, + dictWord{6, 11, 98}, + dictWord{7, 11, 585}, + dictWord{135, 11, 702}, + dictWord{ + 9, + 0, + 968, + }, + dictWord{15, 0, 192}, + dictWord{149, 0, 56}, + dictWord{4, 10, 252}, + dictWord{6, 11, 37}, + dictWord{7, 11, 299}, + dictWord{7, 10, 1068}, + dictWord{ + 7, + 11, + 1666, + }, + dictWord{8, 11, 195}, + dictWord{8, 11, 316}, + dictWord{9, 11, 178}, + dictWord{9, 11, 276}, + dictWord{9, 11, 339}, + dictWord{9, 11, 536}, + dictWord{ + 10, + 11, + 102, + }, + dictWord{10, 11, 362}, + dictWord{10, 10, 434}, + dictWord{10, 11, 785}, + dictWord{11, 11, 55}, + dictWord{11, 11, 149}, + dictWord{11, 10, 228}, + dictWord{ + 11, + 10, + 426, + }, + dictWord{11, 11, 773}, + dictWord{13, 10, 231}, + dictWord{13, 11, 416}, + dictWord{13, 11, 419}, + dictWord{14, 11, 38}, + dictWord{14, 11, 41}, + dictWord{14, 11, 210}, + dictWord{18, 10, 106}, + dictWord{148, 10, 87}, + dictWord{4, 0, 751}, + dictWord{11, 0, 390}, + dictWord{140, 0, 32}, + dictWord{4, 0, 409}, + dictWord{133, 0, 78}, + dictWord{11, 11, 458}, + dictWord{12, 11, 15}, + dictWord{140, 11, 432}, + dictWord{7, 0, 1602}, + dictWord{10, 0, 257}, + dictWord{10, 0, 698}, + dictWord{11, 0, 544}, + dictWord{11, 0, 585}, + dictWord{12, 0, 212}, + dictWord{13, 0, 307}, + dictWord{5, 10, 231}, + dictWord{7, 10, 601}, + dictWord{9, 10, 277}, + dictWord{ + 9, + 10, + 674, + }, + dictWord{10, 10, 178}, + dictWord{10, 10, 418}, + dictWord{10, 10, 509}, + dictWord{11, 10, 531}, + dictWord{12, 10, 113}, + dictWord{12, 10, 475}, + dictWord{13, 10, 99}, + dictWord{142, 10, 428}, + dictWord{6, 0, 473}, + dictWord{145, 0, 105}, + dictWord{6, 0, 1949}, + dictWord{15, 0, 156}, + dictWord{133, 11, 645}, + dictWord{7, 10, 1591}, + dictWord{144, 10, 43}, + dictWord{135, 0, 1779}, + dictWord{135, 10, 1683}, + dictWord{4, 11, 290}, + dictWord{135, 11, 1356}, + dictWord{134, 0, 763}, + dictWord{6, 11, 70}, + dictWord{7, 11, 1292}, + dictWord{10, 11, 762}, + dictWord{139, 11, 288}, + dictWord{142, 0, 29}, + dictWord{140, 11, 428}, + dictWord{7, 0, 883}, + dictWord{7, 11, 131}, + dictWord{7, 11, 422}, + dictWord{8, 11, 210}, + dictWord{140, 11, 573}, + dictWord{134, 0, 488}, + dictWord{4, 10, 399}, + dictWord{5, 10, 119}, + dictWord{5, 10, 494}, + dictWord{7, 10, 751}, + dictWord{137, 10, 556}, + dictWord{133, 0, 617}, + dictWord{132, 11, 936}, + dictWord{ + 139, + 0, + 50, + }, + dictWord{7, 0, 1518}, + dictWord{139, 0, 694}, + dictWord{137, 0, 785}, + dictWord{4, 0, 546}, + dictWord{135, 0, 2042}, + dictWord{7, 11, 716}, + dictWord{ + 13, + 11, + 97, + }, + dictWord{141, 11, 251}, + dictWord{132, 11, 653}, + dictWord{145, 0, 22}, + dictWord{134, 0, 1016}, + dictWord{4, 0, 313}, + dictWord{133, 0, 577}, + dictWord{ + 136, + 11, + 657, + }, + dictWord{8, 0, 184}, + dictWord{141, 0, 433}, + dictWord{135, 0, 935}, + dictWord{6, 0, 720}, + dictWord{9, 0, 114}, + dictWord{146, 11, 80}, + dictWord{ + 12, + 0, + 186, + }, + dictWord{12, 0, 292}, + dictWord{14, 0, 100}, + dictWord{18, 0, 70}, + dictWord{7, 10, 594}, + dictWord{7, 10, 851}, + dictWord{7, 10, 1858}, + dictWord{ + 9, + 10, + 411, + }, + dictWord{9, 10, 574}, + dictWord{9, 10, 666}, + dictWord{9, 10, 737}, + dictWord{10, 10, 346}, + dictWord{10, 10, 712}, + dictWord{11, 10, 246}, + dictWord{ + 11, + 10, + 432, + }, + dictWord{11, 10, 517}, + dictWord{11, 10, 647}, + dictWord{11, 10, 679}, + dictWord{11, 10, 727}, + dictWord{12, 10, 304}, + dictWord{12, 10, 305}, + dictWord{12, 10, 323}, + dictWord{12, 10, 483}, + dictWord{12, 10, 572}, + dictWord{12, 10, 593}, + dictWord{12, 10, 602}, + dictWord{13, 10, 95}, + dictWord{13, 10, 101}, + dictWord{13, 10, 171}, + dictWord{13, 10, 315}, + dictWord{13, 10, 378}, + dictWord{13, 10, 425}, + dictWord{13, 10, 475}, + dictWord{14, 10, 63}, + dictWord{ + 14, + 10, + 380, + }, + dictWord{14, 10, 384}, + dictWord{15, 10, 133}, + dictWord{18, 10, 112}, + dictWord{148, 10, 72}, + dictWord{135, 10, 1093}, + dictWord{135, 11, 1836}, + dictWord{132, 10, 679}, + dictWord{137, 10, 203}, + dictWord{11, 0, 402}, + dictWord{12, 0, 109}, + dictWord{12, 0, 431}, + dictWord{13, 0, 179}, + dictWord{13, 0, 206}, + dictWord{14, 0, 217}, + dictWord{16, 0, 3}, + dictWord{148, 0, 53}, + dictWord{7, 11, 1368}, + dictWord{8, 11, 232}, + dictWord{8, 11, 361}, + dictWord{10, 11, 682}, + dictWord{138, 11, 742}, + dictWord{137, 10, 714}, + dictWord{5, 0, 886}, + dictWord{6, 0, 46}, + dictWord{6, 0, 1790}, + dictWord{7, 0, 14}, + dictWord{7, 0, 732}, + dictWord{ + 7, + 0, + 1654, + }, + dictWord{8, 0, 95}, + dictWord{8, 0, 327}, + dictWord{8, 0, 616}, + dictWord{9, 0, 892}, + dictWord{10, 0, 598}, + dictWord{10, 0, 769}, + dictWord{11, 0, 134}, + dictWord{11, 0, 747}, + dictWord{12, 0, 378}, + dictWord{14, 0, 97}, + dictWord{137, 11, 534}, + dictWord{4, 0, 969}, + dictWord{136, 10, 825}, + dictWord{137, 11, 27}, + dictWord{6, 0, 727}, + dictWord{142, 11, 12}, + dictWord{133, 0, 1021}, + dictWord{134, 0, 1190}, + dictWord{134, 11, 1657}, + dictWord{5, 10, 143}, + dictWord{ + 5, + 10, + 769, + }, + dictWord{6, 10, 1760}, + dictWord{7, 10, 682}, + dictWord{7, 10, 1992}, + dictWord{136, 10, 736}, + dictWord{132, 0, 153}, + dictWord{135, 11, 127}, + dictWord{133, 0, 798}, + dictWord{132, 0, 587}, + dictWord{6, 0, 598}, + dictWord{7, 0, 42}, + dictWord{8, 0, 695}, + dictWord{10, 0, 212}, + dictWord{11, 0, 158}, + dictWord{ + 14, + 0, + 196, + }, + dictWord{145, 0, 85}, + dictWord{133, 10, 860}, + dictWord{6, 0, 1929}, + dictWord{134, 0, 1933}, + dictWord{5, 0, 957}, + dictWord{5, 0, 1008}, + dictWord{ + 9, + 0, + 577, + }, + dictWord{12, 0, 141}, + dictWord{6, 10, 422}, + dictWord{7, 10, 0}, + dictWord{7, 10, 1544}, + dictWord{8, 11, 364}, + dictWord{11, 10, 990}, + dictWord{ + 12, + 10, + 453, + }, + dictWord{13, 10, 47}, + dictWord{141, 10, 266}, + dictWord{134, 0, 1319}, + dictWord{4, 0, 129}, + dictWord{135, 0, 465}, + dictWord{7, 0, 470}, + dictWord{ + 7, + 0, + 1057, + }, + dictWord{7, 0, 1201}, + dictWord{9, 0, 755}, + dictWord{11, 0, 906}, + dictWord{140, 0, 527}, + dictWord{7, 0, 908}, + dictWord{146, 0, 7}, + dictWord{5, 0, 148}, + dictWord{136, 0, 450}, + dictWord{5, 10, 515}, + dictWord{137, 10, 131}, + dictWord{7, 10, 1605}, + dictWord{11, 10, 962}, + dictWord{146, 10, 139}, + dictWord{ + 132, + 10, + 646, + }, + dictWord{134, 0, 1166}, + dictWord{4, 10, 396}, + dictWord{7, 10, 728}, + dictWord{9, 10, 117}, + dictWord{13, 10, 202}, + dictWord{148, 10, 51}, + dictWord{ + 6, + 10, + 121, + }, + dictWord{6, 10, 124}, + dictWord{6, 10, 357}, + dictWord{7, 10, 1138}, + dictWord{7, 10, 1295}, + dictWord{8, 10, 162}, + dictWord{139, 10, 655}, + dictWord{14, 0, 374}, + dictWord{142, 11, 374}, + dictWord{138, 0, 253}, + dictWord{139, 0, 1003}, + dictWord{5, 11, 909}, + dictWord{9, 11, 849}, + dictWord{ + 138, + 11, + 805, + }, + dictWord{133, 10, 237}, + dictWord{7, 11, 525}, + dictWord{7, 11, 1579}, + dictWord{8, 11, 497}, + dictWord{136, 11, 573}, + dictWord{137, 0, 46}, + dictWord{ + 132, + 0, + 879, + }, + dictWord{134, 0, 806}, + dictWord{135, 0, 1868}, + dictWord{6, 0, 1837}, + dictWord{134, 0, 1846}, + dictWord{6, 0, 730}, + dictWord{134, 0, 881}, + dictWord{7, 0, 965}, + dictWord{7, 0, 1460}, + dictWord{7, 0, 1604}, + dictWord{7, 11, 193}, + dictWord{7, 11, 397}, + dictWord{7, 11, 1105}, + dictWord{8, 11, 124}, + dictWord{ + 8, + 11, + 619, + }, + dictWord{9, 11, 305}, + dictWord{10, 11, 264}, + dictWord{11, 11, 40}, + dictWord{12, 11, 349}, + dictWord{13, 11, 134}, + dictWord{13, 11, 295}, + dictWord{14, 11, 155}, + dictWord{15, 11, 120}, + dictWord{146, 11, 105}, + dictWord{136, 0, 506}, + dictWord{143, 0, 10}, + dictWord{4, 11, 262}, + dictWord{7, 11, 342}, + dictWord{7, 10, 571}, + dictWord{7, 10, 1877}, + dictWord{10, 10, 366}, + dictWord{141, 11, 23}, + dictWord{133, 11, 641}, + dictWord{10, 0, 22}, + dictWord{9, 10, 513}, + dictWord{10, 10, 39}, + dictWord{12, 10, 122}, + dictWord{140, 10, 187}, + dictWord{135, 11, 1431}, + dictWord{150, 11, 49}, + dictWord{4, 11, 99}, + dictWord{ + 6, + 11, + 250, + }, + dictWord{6, 11, 346}, + dictWord{8, 11, 127}, + dictWord{138, 11, 81}, + dictWord{6, 0, 2014}, + dictWord{8, 0, 928}, + dictWord{10, 0, 960}, + dictWord{10, 0, 979}, + dictWord{140, 0, 996}, + dictWord{134, 0, 296}, + dictWord{132, 11, 915}, + dictWord{5, 11, 75}, + dictWord{9, 11, 517}, + dictWord{10, 11, 470}, + dictWord{ + 12, + 11, + 155, + }, + dictWord{141, 11, 224}, + dictWord{137, 10, 873}, + dictWord{4, 0, 854}, + dictWord{140, 11, 18}, + dictWord{134, 0, 587}, + dictWord{7, 10, 107}, + dictWord{ + 7, + 10, + 838, + }, + dictWord{8, 10, 550}, + dictWord{138, 10, 401}, + dictWord{11, 0, 636}, + dictWord{15, 0, 145}, + dictWord{17, 0, 34}, + dictWord{19, 0, 50}, + dictWord{ + 23, + 0, + 20, + }, + dictWord{11, 10, 588}, + dictWord{11, 10, 864}, + dictWord{11, 10, 968}, + dictWord{143, 10, 160}, + dictWord{135, 11, 216}, + dictWord{7, 0, 982}, + dictWord{ + 10, + 0, + 32, + }, + dictWord{143, 0, 56}, + dictWord{133, 10, 768}, + dictWord{133, 11, 954}, + dictWord{6, 11, 304}, + dictWord{7, 11, 1114}, + dictWord{8, 11, 418}, + dictWord{ + 10, + 11, + 345, + }, + dictWord{11, 11, 341}, + dictWord{11, 11, 675}, + dictWord{141, 11, 40}, + dictWord{9, 11, 410}, + dictWord{139, 11, 425}, + dictWord{136, 0, 941}, + dictWord{5, 0, 435}, + dictWord{132, 10, 894}, + dictWord{5, 0, 85}, + dictWord{6, 0, 419}, + dictWord{7, 0, 134}, + dictWord{7, 0, 305}, + dictWord{7, 0, 361}, + dictWord{ + 7, + 0, + 1337, + }, + dictWord{8, 0, 71}, + dictWord{140, 0, 519}, + dictWord{140, 0, 688}, + dictWord{135, 0, 740}, + dictWord{5, 0, 691}, + dictWord{7, 0, 345}, + dictWord{9, 0, 94}, + dictWord{140, 0, 169}, + dictWord{5, 0, 183}, + dictWord{6, 0, 582}, + dictWord{10, 0, 679}, + dictWord{140, 0, 435}, + dictWord{134, 11, 14}, + dictWord{6, 0, 945}, + dictWord{135, 0, 511}, + dictWord{134, 11, 1708}, + dictWord{5, 11, 113}, + dictWord{6, 11, 243}, + dictWord{7, 11, 1865}, + dictWord{11, 11, 161}, + dictWord{16, 11, 37}, + dictWord{145, 11, 99}, + dictWord{132, 11, 274}, + dictWord{137, 0, 539}, + dictWord{7, 0, 1993}, + dictWord{8, 0, 684}, + dictWord{134, 10, 272}, + dictWord{ + 6, + 0, + 659, + }, + dictWord{134, 0, 982}, + dictWord{4, 10, 9}, + dictWord{5, 10, 128}, + dictWord{7, 10, 368}, + dictWord{11, 10, 480}, + dictWord{148, 10, 3}, + dictWord{ + 134, + 0, + 583, + }, + dictWord{132, 0, 803}, + dictWord{133, 0, 704}, + dictWord{4, 0, 179}, + dictWord{5, 0, 198}, + dictWord{133, 0, 697}, + dictWord{7, 0, 347}, + dictWord{7, 0, 971}, + dictWord{8, 0, 181}, + dictWord{10, 0, 711}, + dictWord{135, 11, 166}, + dictWord{136, 10, 682}, + dictWord{4, 10, 2}, + dictWord{7, 10, 545}, + dictWord{7, 10, 894}, + dictWord{136, 11, 521}, + dictWord{135, 0, 481}, + dictWord{132, 0, 243}, + dictWord{5, 0, 203}, + dictWord{7, 0, 19}, + dictWord{7, 0, 71}, + dictWord{7, 0, 113}, + dictWord{ + 10, + 0, + 405, + }, + dictWord{11, 0, 357}, + dictWord{142, 0, 240}, + dictWord{5, 11, 725}, + dictWord{5, 11, 727}, + dictWord{135, 11, 1811}, + dictWord{6, 0, 826}, + dictWord{ + 137, + 11, + 304, + }, + dictWord{7, 0, 1450}, + dictWord{139, 0, 99}, + dictWord{133, 11, 654}, + dictWord{134, 0, 492}, + dictWord{5, 0, 134}, + dictWord{6, 0, 408}, + dictWord{ + 6, + 0, + 495, + }, + dictWord{7, 0, 1593}, + dictWord{6, 11, 273}, + dictWord{10, 11, 188}, + dictWord{13, 11, 377}, + dictWord{146, 11, 77}, + dictWord{9, 10, 769}, + dictWord{ + 140, + 10, + 185, + }, + dictWord{135, 11, 410}, + dictWord{142, 0, 4}, + dictWord{4, 0, 665}, + dictWord{134, 11, 1785}, + dictWord{4, 0, 248}, + dictWord{7, 0, 137}, + dictWord{ + 137, + 0, + 349, + }, + dictWord{5, 10, 530}, + dictWord{142, 10, 113}, + dictWord{7, 0, 1270}, + dictWord{139, 0, 612}, + dictWord{132, 11, 780}, + dictWord{5, 0, 371}, + dictWord{135, 0, 563}, + dictWord{135, 0, 826}, + dictWord{6, 0, 1535}, + dictWord{23, 0, 21}, + dictWord{151, 0, 23}, + dictWord{4, 0, 374}, + dictWord{7, 0, 547}, + dictWord{ + 7, + 0, + 1700, + }, + dictWord{7, 0, 1833}, + dictWord{139, 0, 858}, + dictWord{133, 10, 556}, + dictWord{7, 11, 612}, + dictWord{8, 11, 545}, + dictWord{8, 11, 568}, + dictWord{ + 8, + 11, + 642, + }, + dictWord{9, 11, 717}, + dictWord{10, 11, 541}, + dictWord{10, 11, 763}, + dictWord{11, 11, 449}, + dictWord{12, 11, 489}, + dictWord{13, 11, 153}, + dictWord{ + 13, + 11, + 296, + }, + dictWord{14, 11, 138}, + dictWord{14, 11, 392}, + dictWord{15, 11, 50}, + dictWord{16, 11, 6}, + dictWord{16, 11, 12}, + dictWord{148, 11, 9}, + dictWord{ + 9, + 0, + 311, + }, + dictWord{141, 0, 42}, + dictWord{8, 10, 16}, + dictWord{140, 10, 568}, + dictWord{6, 0, 1968}, + dictWord{6, 0, 2027}, + dictWord{138, 0, 991}, + dictWord{ + 6, + 0, + 1647, + }, + dictWord{7, 0, 1552}, + dictWord{7, 0, 2010}, + dictWord{9, 0, 494}, + dictWord{137, 0, 509}, + dictWord{133, 11, 948}, + dictWord{6, 10, 186}, + dictWord{ + 137, + 10, + 426, + }, + dictWord{134, 0, 769}, + dictWord{134, 0, 642}, + dictWord{132, 10, 585}, + dictWord{6, 0, 123}, + dictWord{7, 0, 214}, + dictWord{9, 0, 728}, + dictWord{ + 10, + 0, + 157, + }, + dictWord{11, 0, 346}, + dictWord{11, 0, 662}, + dictWord{143, 0, 106}, + dictWord{142, 11, 381}, + dictWord{135, 0, 1435}, + dictWord{4, 11, 532}, + dictWord{ + 5, + 11, + 706, + }, + dictWord{135, 11, 662}, + dictWord{5, 11, 837}, + dictWord{134, 11, 1651}, + dictWord{4, 10, 93}, + dictWord{5, 10, 252}, + dictWord{6, 10, 229}, + dictWord{ + 7, + 10, + 291, + }, + dictWord{9, 10, 550}, + dictWord{139, 10, 644}, + dictWord{148, 0, 79}, + dictWord{137, 10, 749}, + dictWord{134, 0, 1425}, + dictWord{ + 137, + 10, + 162, + }, + dictWord{4, 11, 362}, + dictWord{7, 11, 52}, + dictWord{7, 11, 303}, + dictWord{140, 11, 166}, + dictWord{132, 10, 381}, + dictWord{4, 11, 330}, + dictWord{ + 7, + 11, + 933, + }, + dictWord{7, 11, 2012}, + dictWord{136, 11, 292}, + dictWord{135, 11, 767}, + dictWord{4, 0, 707}, + dictWord{5, 0, 588}, + dictWord{6, 0, 393}, + dictWord{ + 13, + 0, + 106, + }, + dictWord{18, 0, 49}, + dictWord{147, 0, 41}, + dictWord{6, 0, 211}, + dictWord{7, 0, 1690}, + dictWord{11, 0, 486}, + dictWord{140, 0, 369}, + dictWord{ + 137, + 11, + 883, + }, + dictWord{4, 11, 703}, + dictWord{135, 11, 207}, + dictWord{4, 0, 187}, + dictWord{5, 0, 184}, + dictWord{5, 0, 690}, + dictWord{7, 0, 1869}, + dictWord{10, 0, 756}, + dictWord{139, 0, 783}, + dictWord{132, 11, 571}, + dictWord{134, 0, 1382}, + dictWord{5, 0, 175}, + dictWord{6, 10, 77}, + dictWord{6, 10, 157}, + dictWord{7, 10, 974}, + dictWord{7, 10, 1301}, + dictWord{7, 10, 1339}, + dictWord{7, 10, 1490}, + dictWord{7, 10, 1873}, + dictWord{137, 10, 628}, + dictWord{134, 0, 1493}, + dictWord{ + 5, + 11, + 873, + }, + dictWord{133, 11, 960}, + dictWord{134, 0, 1007}, + dictWord{12, 11, 93}, + dictWord{12, 11, 501}, + dictWord{13, 11, 362}, + dictWord{14, 11, 151}, + dictWord{15, 11, 40}, + dictWord{15, 11, 59}, + dictWord{16, 11, 46}, + dictWord{17, 11, 25}, + dictWord{18, 11, 14}, + dictWord{18, 11, 134}, + dictWord{19, 11, 25}, + dictWord{ + 19, + 11, + 69, + }, + dictWord{20, 11, 16}, + dictWord{20, 11, 19}, + dictWord{20, 11, 66}, + dictWord{21, 11, 23}, + dictWord{21, 11, 25}, + dictWord{150, 11, 42}, + dictWord{ + 11, + 10, + 919, + }, + dictWord{141, 10, 409}, + dictWord{134, 0, 219}, + dictWord{5, 0, 582}, + dictWord{6, 0, 1646}, + dictWord{7, 0, 99}, + dictWord{7, 0, 1962}, + dictWord{ + 7, + 0, + 1986, + }, + dictWord{8, 0, 515}, + dictWord{8, 0, 773}, + dictWord{9, 0, 23}, + dictWord{9, 0, 491}, + dictWord{12, 0, 620}, + dictWord{142, 0, 93}, + dictWord{133, 0, 851}, + dictWord{5, 11, 33}, + dictWord{134, 11, 470}, + dictWord{135, 11, 1291}, + dictWord{134, 0, 1278}, + dictWord{135, 11, 1882}, + dictWord{135, 10, 1489}, + dictWord{132, 0, 1000}, + dictWord{138, 0, 982}, + dictWord{8, 0, 762}, + dictWord{8, 0, 812}, + dictWord{137, 0, 910}, + dictWord{6, 11, 47}, + dictWord{7, 11, 90}, + dictWord{ + 7, + 11, + 664, + }, + dictWord{7, 11, 830}, + dictWord{7, 11, 1380}, + dictWord{7, 11, 2025}, + dictWord{8, 11, 448}, + dictWord{136, 11, 828}, + dictWord{4, 0, 98}, + dictWord{ + 4, + 0, + 940, + }, + dictWord{6, 0, 1819}, + dictWord{6, 0, 1834}, + dictWord{6, 0, 1841}, + dictWord{7, 0, 1365}, + dictWord{8, 0, 859}, + dictWord{8, 0, 897}, + dictWord{8, 0, 918}, + dictWord{9, 0, 422}, + dictWord{9, 0, 670}, + dictWord{10, 0, 775}, + dictWord{10, 0, 894}, + dictWord{10, 0, 909}, + dictWord{10, 0, 910}, + dictWord{10, 0, 935}, + dictWord{ + 11, + 0, + 210, + }, + dictWord{12, 0, 750}, + dictWord{12, 0, 755}, + dictWord{13, 0, 26}, + dictWord{13, 0, 457}, + dictWord{13, 0, 476}, + dictWord{16, 0, 100}, + dictWord{16, 0, 109}, + dictWord{18, 0, 173}, + dictWord{18, 0, 175}, + dictWord{8, 10, 398}, + dictWord{9, 10, 681}, + dictWord{139, 10, 632}, + dictWord{9, 11, 417}, + dictWord{ + 137, + 11, + 493, + }, + dictWord{136, 10, 645}, + dictWord{138, 0, 906}, + dictWord{134, 0, 1730}, + dictWord{134, 10, 20}, + dictWord{133, 11, 1019}, + dictWord{134, 0, 1185}, + dictWord{10, 0, 40}, + dictWord{136, 10, 769}, + dictWord{9, 0, 147}, + dictWord{134, 11, 208}, + dictWord{140, 0, 650}, + dictWord{5, 0, 209}, + dictWord{6, 0, 30}, + dictWord{11, 0, 56}, + dictWord{139, 0, 305}, + dictWord{132, 0, 553}, + dictWord{138, 11, 344}, + dictWord{6, 11, 68}, + dictWord{7, 11, 398}, + dictWord{7, 11, 448}, + dictWord{ + 7, + 11, + 1629, + }, + dictWord{7, 11, 1813}, + dictWord{8, 11, 387}, + dictWord{8, 11, 442}, + dictWord{9, 11, 710}, + dictWord{10, 11, 282}, + dictWord{138, 11, 722}, + dictWord{5, 0, 597}, + dictWord{14, 0, 20}, + dictWord{142, 11, 20}, + dictWord{135, 0, 1614}, + dictWord{135, 10, 1757}, + dictWord{4, 0, 150}, + dictWord{5, 0, 303}, + dictWord{6, 0, 327}, + dictWord{135, 10, 937}, + dictWord{16, 0, 49}, + dictWord{7, 10, 1652}, + dictWord{144, 11, 49}, + dictWord{8, 0, 192}, + dictWord{10, 0, 78}, + dictWord{ + 141, + 0, + 359, + }, + dictWord{135, 0, 786}, + dictWord{143, 0, 134}, + dictWord{6, 0, 1638}, + dictWord{7, 0, 79}, + dictWord{7, 0, 496}, + dictWord{9, 0, 138}, + dictWord{ + 10, + 0, + 336, + }, + dictWord{11, 0, 12}, + dictWord{12, 0, 412}, + dictWord{12, 0, 440}, + dictWord{142, 0, 305}, + dictWord{136, 11, 491}, + dictWord{4, 10, 579}, + dictWord{ + 5, + 10, + 226, + }, + dictWord{5, 10, 323}, + dictWord{135, 10, 960}, + dictWord{7, 0, 204}, + dictWord{7, 0, 415}, + dictWord{8, 0, 42}, + dictWord{10, 0, 85}, + dictWord{139, 0, 564}, + dictWord{132, 0, 614}, + dictWord{4, 11, 403}, + dictWord{5, 11, 441}, + dictWord{7, 11, 450}, + dictWord{11, 11, 101}, + dictWord{12, 11, 193}, + dictWord{141, 11, 430}, + dictWord{135, 11, 1927}, + dictWord{135, 11, 1330}, + dictWord{4, 0, 3}, + dictWord{5, 0, 247}, + dictWord{5, 0, 644}, + dictWord{7, 0, 744}, + dictWord{7, 0, 1207}, + dictWord{7, 0, 1225}, + dictWord{7, 0, 1909}, + dictWord{146, 0, 147}, + dictWord{136, 0, 942}, + dictWord{4, 0, 1019}, + dictWord{134, 0, 2023}, + dictWord{5, 11, 679}, + dictWord{133, 10, 973}, + dictWord{5, 0, 285}, + dictWord{9, 0, 67}, + dictWord{13, 0, 473}, + dictWord{143, 0, 82}, + dictWord{7, 11, 328}, + dictWord{137, 11, 326}, + dictWord{151, 0, 8}, + dictWord{6, 10, 135}, + dictWord{135, 10, 1176}, + dictWord{135, 11, 1128}, + dictWord{134, 0, 1309}, + dictWord{135, 11, 1796}, + dictWord{ + 135, + 10, + 314, + }, + dictWord{4, 11, 574}, + dictWord{7, 11, 350}, + dictWord{7, 11, 1024}, + dictWord{8, 11, 338}, + dictWord{9, 11, 677}, + dictWord{10, 11, 808}, + dictWord{ + 139, + 11, + 508, + }, + dictWord{7, 11, 818}, + dictWord{17, 11, 14}, + dictWord{17, 11, 45}, + dictWord{18, 11, 75}, + dictWord{148, 11, 18}, + dictWord{146, 10, 4}, + dictWord{ + 135, + 11, + 1081, + }, + dictWord{4, 0, 29}, + dictWord{6, 0, 532}, + dictWord{7, 0, 1628}, + dictWord{7, 0, 1648}, + dictWord{9, 0, 350}, + dictWord{10, 0, 433}, + dictWord{11, 0, 97}, + dictWord{11, 0, 557}, + dictWord{11, 0, 745}, + dictWord{12, 0, 289}, + dictWord{12, 0, 335}, + dictWord{12, 0, 348}, + dictWord{12, 0, 606}, + dictWord{13, 0, 116}, + dictWord{13, 0, 233}, + dictWord{13, 0, 466}, + dictWord{14, 0, 181}, + dictWord{14, 0, 209}, + dictWord{14, 0, 232}, + dictWord{14, 0, 236}, + dictWord{14, 0, 300}, + dictWord{ + 16, + 0, + 41, + }, + dictWord{148, 0, 97}, + dictWord{7, 0, 318}, + dictWord{6, 10, 281}, + dictWord{8, 10, 282}, + dictWord{8, 10, 480}, + dictWord{8, 10, 499}, + dictWord{9, 10, 198}, + dictWord{10, 10, 143}, + dictWord{10, 10, 169}, + dictWord{10, 10, 211}, + dictWord{10, 10, 417}, + dictWord{10, 10, 574}, + dictWord{11, 10, 147}, + dictWord{ + 11, + 10, + 395, + }, + dictWord{12, 10, 75}, + dictWord{12, 10, 407}, + dictWord{12, 10, 608}, + dictWord{13, 10, 500}, + dictWord{142, 10, 251}, + dictWord{135, 11, 1676}, + dictWord{135, 11, 2037}, + dictWord{135, 0, 1692}, + dictWord{5, 0, 501}, + dictWord{7, 0, 1704}, + dictWord{9, 0, 553}, + dictWord{11, 0, 520}, + dictWord{12, 0, 557}, + dictWord{141, 0, 249}, + dictWord{6, 0, 1527}, + dictWord{14, 0, 324}, + dictWord{15, 0, 55}, + dictWord{15, 0, 80}, + dictWord{14, 11, 324}, + dictWord{15, 11, 55}, + dictWord{143, 11, 80}, + dictWord{135, 10, 1776}, + dictWord{8, 0, 988}, + dictWord{137, 11, 297}, + dictWord{132, 10, 419}, + dictWord{142, 0, 223}, + dictWord{ + 139, + 11, + 234, + }, + dictWord{7, 0, 1123}, + dictWord{12, 0, 508}, + dictWord{14, 0, 102}, + dictWord{14, 0, 226}, + dictWord{144, 0, 57}, + dictWord{4, 10, 138}, + dictWord{ + 7, + 10, + 1012, + }, + dictWord{7, 10, 1280}, + dictWord{137, 10, 76}, + dictWord{7, 0, 1764}, + dictWord{5, 10, 29}, + dictWord{140, 10, 638}, + dictWord{134, 0, 2015}, + dictWord{134, 0, 1599}, + dictWord{138, 11, 56}, + dictWord{6, 11, 306}, + dictWord{7, 11, 1140}, + dictWord{7, 11, 1340}, + dictWord{8, 11, 133}, + dictWord{ + 138, + 11, + 449, + }, + dictWord{139, 11, 1011}, + dictWord{6, 10, 1710}, + dictWord{135, 10, 2038}, + dictWord{7, 11, 1763}, + dictWord{140, 11, 310}, + dictWord{6, 0, 129}, + dictWord{4, 10, 17}, + dictWord{5, 10, 23}, + dictWord{7, 10, 995}, + dictWord{11, 10, 383}, + dictWord{11, 10, 437}, + dictWord{12, 10, 460}, + dictWord{140, 10, 532}, + dictWord{5, 11, 329}, + dictWord{136, 11, 260}, + dictWord{133, 10, 862}, + dictWord{132, 0, 534}, + dictWord{6, 0, 811}, + dictWord{135, 0, 626}, + dictWord{ + 132, + 11, + 657, + }, + dictWord{4, 0, 25}, + dictWord{5, 0, 60}, + dictWord{6, 0, 504}, + dictWord{7, 0, 614}, + dictWord{7, 0, 1155}, + dictWord{12, 0, 0}, + dictWord{152, 11, 7}, + dictWord{ + 7, + 0, + 1248, + }, + dictWord{11, 0, 621}, + dictWord{139, 0, 702}, + dictWord{137, 0, 321}, + dictWord{8, 10, 70}, + dictWord{12, 10, 171}, + dictWord{141, 10, 272}, + dictWord{ + 10, + 10, + 233, + }, + dictWord{139, 10, 76}, + dictWord{4, 0, 379}, + dictWord{7, 0, 1397}, + dictWord{134, 10, 442}, + dictWord{5, 11, 66}, + dictWord{7, 11, 1896}, + dictWord{ + 136, + 11, + 288, + }, + dictWord{134, 11, 1643}, + dictWord{134, 10, 1709}, + dictWord{4, 11, 21}, + dictWord{5, 11, 91}, + dictWord{5, 11, 570}, + dictWord{5, 11, 648}, + dictWord{5, 11, 750}, + dictWord{5, 11, 781}, + dictWord{6, 11, 54}, + dictWord{6, 11, 112}, + dictWord{6, 11, 402}, + dictWord{6, 11, 1732}, + dictWord{7, 11, 315}, + dictWord{ + 7, + 11, + 749, + }, + dictWord{7, 11, 1347}, + dictWord{7, 11, 1900}, + dictWord{9, 11, 78}, + dictWord{9, 11, 508}, + dictWord{10, 11, 611}, + dictWord{11, 11, 510}, + dictWord{ + 11, + 11, + 728, + }, + dictWord{13, 11, 36}, + dictWord{14, 11, 39}, + dictWord{16, 11, 83}, + dictWord{17, 11, 124}, + dictWord{148, 11, 30}, + dictWord{4, 0, 118}, + dictWord{ + 6, + 0, + 274, + }, + dictWord{6, 0, 361}, + dictWord{7, 0, 75}, + dictWord{141, 0, 441}, + dictWord{10, 11, 322}, + dictWord{10, 11, 719}, + dictWord{139, 11, 407}, + dictWord{ + 147, + 10, + 119, + }, + dictWord{12, 11, 549}, + dictWord{14, 11, 67}, + dictWord{147, 11, 60}, + dictWord{11, 10, 69}, + dictWord{12, 10, 105}, + dictWord{12, 10, 117}, + dictWord{13, 10, 213}, + dictWord{14, 10, 13}, + dictWord{14, 10, 62}, + dictWord{14, 10, 177}, + dictWord{14, 10, 421}, + dictWord{15, 10, 19}, + dictWord{146, 10, 141}, + dictWord{9, 0, 841}, + dictWord{137, 10, 309}, + dictWord{7, 10, 608}, + dictWord{7, 10, 976}, + dictWord{8, 11, 125}, + dictWord{8, 11, 369}, + dictWord{8, 11, 524}, + dictWord{9, 10, 146}, + dictWord{10, 10, 206}, + dictWord{10, 11, 486}, + dictWord{10, 10, 596}, + dictWord{11, 11, 13}, + dictWord{11, 11, 381}, + dictWord{11, 11, 736}, + dictWord{11, 11, 766}, + dictWord{11, 11, 845}, + dictWord{13, 11, 114}, + dictWord{13, 10, 218}, + dictWord{13, 11, 292}, + dictWord{14, 11, 47}, + dictWord{ + 142, + 10, + 153, + }, + dictWord{12, 0, 693}, + dictWord{135, 11, 759}, + dictWord{5, 0, 314}, + dictWord{6, 0, 221}, + dictWord{7, 0, 419}, + dictWord{10, 0, 650}, + dictWord{11, 0, 396}, + dictWord{12, 0, 156}, + dictWord{13, 0, 369}, + dictWord{14, 0, 333}, + dictWord{145, 0, 47}, + dictWord{6, 11, 1684}, + dictWord{6, 11, 1731}, + dictWord{7, 11, 356}, + dictWord{7, 11, 1932}, + dictWord{8, 11, 54}, + dictWord{8, 11, 221}, + dictWord{9, 11, 225}, + dictWord{9, 11, 356}, + dictWord{10, 11, 77}, + dictWord{10, 11, 446}, + dictWord{10, 11, 731}, + dictWord{12, 11, 404}, + dictWord{141, 11, 491}, + dictWord{132, 11, 375}, + dictWord{4, 10, 518}, + dictWord{135, 10, 1136}, + dictWord{ + 4, + 0, + 913, + }, + dictWord{4, 11, 411}, + dictWord{11, 11, 643}, + dictWord{140, 11, 115}, + dictWord{4, 11, 80}, + dictWord{133, 11, 44}, + dictWord{8, 10, 689}, + dictWord{ + 137, + 10, + 863, + }, + dictWord{138, 0, 880}, + dictWord{4, 10, 18}, + dictWord{7, 10, 145}, + dictWord{7, 10, 444}, + dictWord{7, 10, 1278}, + dictWord{8, 10, 49}, + dictWord{ + 8, + 10, + 400, + }, + dictWord{9, 10, 71}, + dictWord{9, 10, 250}, + dictWord{10, 10, 459}, + dictWord{12, 10, 160}, + dictWord{144, 10, 24}, + dictWord{136, 0, 475}, + dictWord{ + 5, + 0, + 1016, + }, + dictWord{5, 11, 299}, + dictWord{135, 11, 1083}, + dictWord{7, 0, 602}, + dictWord{8, 0, 179}, + dictWord{10, 0, 781}, + dictWord{140, 0, 126}, + dictWord{ + 6, + 0, + 329, + }, + dictWord{138, 0, 111}, + dictWord{135, 0, 1864}, + dictWord{4, 11, 219}, + dictWord{7, 11, 1761}, + dictWord{137, 11, 86}, + dictWord{6, 0, 1888}, + dictWord{ + 6, + 0, + 1892, + }, + dictWord{6, 0, 1901}, + dictWord{6, 0, 1904}, + dictWord{9, 0, 953}, + dictWord{9, 0, 985}, + dictWord{9, 0, 991}, + dictWord{9, 0, 1001}, + dictWord{12, 0, 818}, + dictWord{12, 0, 846}, + dictWord{12, 0, 847}, + dictWord{12, 0, 861}, + dictWord{12, 0, 862}, + dictWord{12, 0, 873}, + dictWord{12, 0, 875}, + dictWord{12, 0, 877}, + dictWord{12, 0, 879}, + dictWord{12, 0, 881}, + dictWord{12, 0, 884}, + dictWord{12, 0, 903}, + dictWord{12, 0, 915}, + dictWord{12, 0, 926}, + dictWord{12, 0, 939}, + dictWord{ + 15, + 0, + 182, + }, + dictWord{15, 0, 219}, + dictWord{15, 0, 255}, + dictWord{18, 0, 191}, + dictWord{18, 0, 209}, + dictWord{18, 0, 211}, + dictWord{149, 0, 41}, + dictWord{ + 5, + 11, + 328, + }, + dictWord{135, 11, 918}, + dictWord{137, 0, 780}, + dictWord{12, 0, 82}, + dictWord{143, 0, 36}, + dictWord{133, 10, 1010}, + dictWord{5, 0, 821}, + dictWord{ + 134, + 0, + 1687, + }, + dictWord{133, 11, 514}, + dictWord{132, 0, 956}, + dictWord{134, 0, 1180}, + dictWord{10, 0, 112}, + dictWord{5, 10, 87}, + dictWord{7, 10, 313}, + dictWord{ + 7, + 10, + 1103, + }, + dictWord{10, 10, 582}, + dictWord{11, 10, 389}, + dictWord{11, 10, 813}, + dictWord{12, 10, 385}, + dictWord{13, 10, 286}, + dictWord{14, 10, 124}, + dictWord{146, 10, 108}, + dictWord{5, 0, 71}, + dictWord{7, 0, 1407}, + dictWord{9, 0, 704}, + dictWord{10, 0, 261}, + dictWord{10, 0, 619}, + dictWord{11, 0, 547}, + dictWord{11, 0, 619}, + dictWord{143, 0, 157}, + dictWord{4, 0, 531}, + dictWord{5, 0, 455}, + dictWord{5, 11, 301}, + dictWord{6, 11, 571}, + dictWord{14, 11, 49}, + dictWord{ + 146, + 11, + 102, + }, + dictWord{132, 10, 267}, + dictWord{6, 0, 385}, + dictWord{7, 0, 2008}, + dictWord{9, 0, 337}, + dictWord{138, 0, 517}, + dictWord{133, 11, 726}, + dictWord{133, 11, 364}, + dictWord{4, 11, 76}, + dictWord{7, 11, 1550}, + dictWord{9, 11, 306}, + dictWord{9, 11, 430}, + dictWord{9, 11, 663}, + dictWord{10, 11, 683}, + dictWord{11, 11, 427}, + dictWord{11, 11, 753}, + dictWord{12, 11, 334}, + dictWord{12, 11, 442}, + dictWord{14, 11, 258}, + dictWord{14, 11, 366}, + dictWord{ + 143, + 11, + 131, + }, + dictWord{6, 0, 1865}, + dictWord{6, 0, 1879}, + dictWord{6, 0, 1881}, + dictWord{6, 0, 1894}, + dictWord{6, 0, 1908}, + dictWord{9, 0, 915}, + dictWord{9, 0, 926}, + dictWord{9, 0, 940}, + dictWord{9, 0, 943}, + dictWord{9, 0, 966}, + dictWord{9, 0, 980}, + dictWord{9, 0, 989}, + dictWord{9, 0, 1005}, + dictWord{9, 0, 1010}, + dictWord{ + 12, + 0, + 813, + }, + dictWord{12, 0, 817}, + dictWord{12, 0, 840}, + dictWord{12, 0, 843}, + dictWord{12, 0, 855}, + dictWord{12, 0, 864}, + dictWord{12, 0, 871}, + dictWord{12, 0, 872}, + dictWord{12, 0, 899}, + dictWord{12, 0, 905}, + dictWord{12, 0, 924}, + dictWord{15, 0, 171}, + dictWord{15, 0, 181}, + dictWord{15, 0, 224}, + dictWord{15, 0, 235}, + dictWord{15, 0, 251}, + dictWord{146, 0, 184}, + dictWord{137, 11, 52}, + dictWord{5, 0, 16}, + dictWord{6, 0, 86}, + dictWord{6, 0, 603}, + dictWord{7, 0, 292}, + dictWord{7, 0, 561}, + dictWord{8, 0, 257}, + dictWord{8, 0, 382}, + dictWord{9, 0, 721}, + dictWord{9, 0, 778}, + dictWord{11, 0, 581}, + dictWord{140, 0, 466}, + dictWord{4, 0, 486}, + dictWord{ + 5, + 0, + 491, + }, + dictWord{135, 10, 1121}, + dictWord{4, 0, 72}, + dictWord{6, 0, 265}, + dictWord{135, 0, 1300}, + dictWord{135, 11, 1183}, + dictWord{10, 10, 249}, + dictWord{139, 10, 209}, + dictWord{132, 10, 561}, + dictWord{137, 11, 519}, + dictWord{4, 11, 656}, + dictWord{4, 10, 760}, + dictWord{135, 11, 779}, + dictWord{ + 9, + 10, + 154, + }, + dictWord{140, 10, 485}, + dictWord{135, 11, 1793}, + dictWord{135, 11, 144}, + dictWord{136, 10, 255}, + dictWord{133, 0, 621}, + dictWord{4, 10, 368}, + dictWord{135, 10, 641}, + dictWord{135, 11, 1373}, + dictWord{7, 11, 554}, + dictWord{7, 11, 605}, + dictWord{141, 11, 10}, + dictWord{137, 0, 234}, + dictWord{ + 5, + 0, + 815, + }, + dictWord{6, 0, 1688}, + dictWord{134, 0, 1755}, + dictWord{5, 11, 838}, + dictWord{5, 11, 841}, + dictWord{134, 11, 1649}, + dictWord{7, 0, 1987}, + dictWord{ + 7, + 0, + 2040, + }, + dictWord{136, 0, 743}, + dictWord{133, 11, 1012}, + dictWord{6, 0, 197}, + dictWord{136, 0, 205}, + dictWord{6, 0, 314}, + dictWord{134, 11, 314}, + dictWord{144, 11, 53}, + dictWord{6, 11, 251}, + dictWord{7, 11, 365}, + dictWord{7, 11, 1357}, + dictWord{7, 11, 1497}, + dictWord{8, 11, 154}, + dictWord{141, 11, 281}, + dictWord{133, 11, 340}, + dictWord{6, 0, 452}, + dictWord{7, 0, 312}, + dictWord{138, 0, 219}, + dictWord{138, 0, 589}, + dictWord{4, 0, 333}, + dictWord{9, 0, 176}, + dictWord{12, 0, 353}, + dictWord{141, 0, 187}, + dictWord{9, 10, 92}, + dictWord{147, 10, 91}, + dictWord{134, 0, 1110}, + dictWord{11, 0, 47}, + dictWord{139, 11, 495}, + dictWord{6, 10, 525}, + dictWord{8, 10, 806}, + dictWord{9, 10, 876}, + dictWord{140, 10, 284}, + dictWord{8, 11, 261}, + dictWord{9, 11, 144}, + dictWord{9, 11, 466}, + dictWord{10, 11, 370}, + dictWord{12, 11, 470}, + dictWord{13, 11, 144}, + dictWord{142, 11, 348}, + dictWord{137, 11, 897}, + dictWord{8, 0, 863}, + dictWord{8, 0, 864}, + dictWord{8, 0, 868}, + dictWord{8, 0, 884}, + dictWord{10, 0, 866}, + dictWord{10, 0, 868}, + dictWord{10, 0, 873}, + dictWord{10, 0, 911}, + dictWord{10, 0, 912}, + dictWord{ + 10, + 0, + 944, + }, + dictWord{12, 0, 727}, + dictWord{6, 11, 248}, + dictWord{9, 11, 546}, + dictWord{10, 11, 535}, + dictWord{11, 11, 681}, + dictWord{141, 11, 135}, + dictWord{ + 6, + 0, + 300, + }, + dictWord{135, 0, 1515}, + dictWord{134, 0, 1237}, + dictWord{139, 10, 958}, + dictWord{133, 10, 594}, + dictWord{140, 11, 250}, + dictWord{ + 134, + 0, + 1685, + }, + dictWord{134, 11, 567}, + dictWord{7, 0, 135}, + dictWord{8, 0, 7}, + dictWord{8, 0, 62}, + dictWord{9, 0, 243}, + dictWord{10, 0, 658}, + dictWord{10, 0, 697}, + dictWord{11, 0, 456}, + dictWord{139, 0, 756}, + dictWord{9, 0, 395}, + dictWord{138, 0, 79}, + dictWord{6, 10, 1641}, + dictWord{136, 10, 820}, + dictWord{4, 10, 302}, + dictWord{135, 10, 1766}, + dictWord{134, 11, 174}, + dictWord{135, 10, 1313}, + dictWord{135, 0, 631}, + dictWord{134, 10, 1674}, + dictWord{134, 11, 395}, + dictWord{138, 0, 835}, + dictWord{7, 0, 406}, + dictWord{7, 0, 459}, + dictWord{8, 0, 606}, + dictWord{139, 0, 726}, + dictWord{134, 11, 617}, + dictWord{134, 0, 979}, + dictWord{ + 6, + 10, + 389, + }, + dictWord{7, 10, 149}, + dictWord{9, 10, 142}, + dictWord{138, 10, 94}, + dictWord{5, 11, 878}, + dictWord{133, 11, 972}, + dictWord{6, 10, 8}, + dictWord{ + 7, + 10, + 1881, + }, + dictWord{8, 10, 91}, + dictWord{136, 11, 511}, + dictWord{133, 0, 612}, + dictWord{132, 11, 351}, + dictWord{4, 0, 372}, + dictWord{7, 0, 482}, + dictWord{ + 8, + 0, + 158, + }, + dictWord{9, 0, 602}, + dictWord{9, 0, 615}, + dictWord{10, 0, 245}, + dictWord{10, 0, 678}, + dictWord{10, 0, 744}, + dictWord{11, 0, 248}, + dictWord{ + 139, + 0, + 806, + }, + dictWord{5, 0, 854}, + dictWord{135, 0, 1991}, + dictWord{132, 11, 286}, + dictWord{135, 11, 344}, + dictWord{7, 11, 438}, + dictWord{7, 11, 627}, + dictWord{ + 7, + 11, + 1516, + }, + dictWord{8, 11, 40}, + dictWord{9, 11, 56}, + dictWord{9, 11, 294}, + dictWord{10, 11, 30}, + dictWord{10, 11, 259}, + dictWord{11, 11, 969}, + dictWord{ + 146, + 11, + 148, + }, + dictWord{135, 0, 1492}, + dictWord{5, 11, 259}, + dictWord{7, 11, 414}, + dictWord{7, 11, 854}, + dictWord{142, 11, 107}, + dictWord{135, 10, 1746}, + dictWord{6, 0, 833}, + dictWord{134, 0, 998}, + dictWord{135, 10, 24}, + dictWord{6, 0, 750}, + dictWord{135, 0, 1739}, + dictWord{4, 10, 503}, + dictWord{ + 135, + 10, + 1661, + }, + dictWord{5, 10, 130}, + dictWord{7, 10, 1314}, + dictWord{9, 10, 610}, + dictWord{10, 10, 718}, + dictWord{11, 10, 601}, + dictWord{11, 10, 819}, + dictWord{ + 11, + 10, + 946, + }, + dictWord{140, 10, 536}, + dictWord{10, 10, 149}, + dictWord{11, 10, 280}, + dictWord{142, 10, 336}, + dictWord{132, 11, 738}, + dictWord{ + 135, + 10, + 1946, + }, + dictWord{5, 0, 195}, + dictWord{135, 0, 1685}, + dictWord{7, 0, 1997}, + dictWord{8, 0, 730}, + dictWord{139, 0, 1006}, + dictWord{151, 11, 17}, + dictWord{ + 133, + 11, + 866, + }, + dictWord{14, 0, 463}, + dictWord{14, 0, 470}, + dictWord{150, 0, 61}, + dictWord{5, 0, 751}, + dictWord{8, 0, 266}, + dictWord{11, 0, 578}, + dictWord{ + 4, + 10, + 392, + }, + dictWord{135, 10, 1597}, + dictWord{5, 10, 433}, + dictWord{9, 10, 633}, + dictWord{139, 10, 629}, + dictWord{135, 0, 821}, + dictWord{6, 0, 715}, + dictWord{ + 134, + 0, + 1325, + }, + dictWord{133, 11, 116}, + dictWord{6, 0, 868}, + dictWord{132, 11, 457}, + dictWord{134, 0, 959}, + dictWord{6, 10, 234}, + dictWord{138, 11, 199}, + dictWord{7, 0, 1053}, + dictWord{7, 10, 1950}, + dictWord{8, 10, 680}, + dictWord{11, 10, 817}, + dictWord{147, 10, 88}, + dictWord{7, 10, 1222}, + dictWord{ + 138, + 10, + 386, + }, + dictWord{5, 0, 950}, + dictWord{5, 0, 994}, + dictWord{6, 0, 351}, + dictWord{134, 0, 1124}, + dictWord{134, 0, 1081}, + dictWord{7, 0, 1595}, + dictWord{6, 10, 5}, + dictWord{11, 10, 249}, + dictWord{12, 10, 313}, + dictWord{16, 10, 66}, + dictWord{145, 10, 26}, + dictWord{148, 0, 59}, + dictWord{5, 11, 527}, + dictWord{6, 11, 189}, + dictWord{135, 11, 859}, + dictWord{5, 10, 963}, + dictWord{6, 10, 1773}, + dictWord{11, 11, 104}, + dictWord{11, 11, 554}, + dictWord{15, 11, 60}, + dictWord{ + 143, + 11, + 125, + }, + dictWord{135, 0, 47}, + dictWord{137, 0, 684}, + dictWord{134, 11, 116}, + dictWord{134, 0, 1606}, + dictWord{134, 0, 777}, + dictWord{7, 0, 1020}, + dictWord{ + 8, + 10, + 509, + }, + dictWord{136, 10, 792}, + dictWord{135, 0, 1094}, + dictWord{132, 0, 350}, + dictWord{133, 11, 487}, + dictWord{4, 11, 86}, + dictWord{5, 11, 667}, + dictWord{5, 11, 753}, + dictWord{6, 11, 316}, + dictWord{6, 11, 455}, + dictWord{135, 11, 946}, + dictWord{7, 0, 1812}, + dictWord{13, 0, 259}, + dictWord{13, 0, 356}, + dictWord{14, 0, 242}, + dictWord{147, 0, 114}, + dictWord{132, 10, 931}, + dictWord{133, 0, 967}, + dictWord{4, 0, 473}, + dictWord{7, 0, 623}, + dictWord{8, 0, 808}, + dictWord{ + 9, + 0, + 871, + }, + dictWord{9, 0, 893}, + dictWord{11, 0, 38}, + dictWord{11, 0, 431}, + dictWord{12, 0, 112}, + dictWord{12, 0, 217}, + dictWord{12, 0, 243}, + dictWord{12, 0, 562}, + dictWord{12, 0, 663}, + dictWord{12, 0, 683}, + dictWord{13, 0, 141}, + dictWord{13, 0, 197}, + dictWord{13, 0, 227}, + dictWord{13, 0, 406}, + dictWord{13, 0, 487}, + dictWord{14, 0, 156}, + dictWord{14, 0, 203}, + dictWord{14, 0, 224}, + dictWord{14, 0, 256}, + dictWord{18, 0, 58}, + dictWord{150, 0, 0}, + dictWord{138, 0, 286}, + dictWord{ + 7, + 10, + 943, + }, + dictWord{139, 10, 614}, + dictWord{135, 10, 1837}, + dictWord{150, 11, 45}, + dictWord{132, 0, 798}, + dictWord{4, 0, 222}, + dictWord{7, 0, 286}, + dictWord{136, 0, 629}, + dictWord{4, 11, 79}, + dictWord{7, 11, 1773}, + dictWord{10, 11, 450}, + dictWord{11, 11, 589}, + dictWord{13, 11, 332}, + dictWord{13, 11, 493}, + dictWord{14, 11, 183}, + dictWord{14, 11, 334}, + dictWord{14, 11, 362}, + dictWord{14, 11, 368}, + dictWord{14, 11, 376}, + dictWord{14, 11, 379}, + dictWord{ + 19, + 11, + 90, + }, + dictWord{19, 11, 103}, + dictWord{19, 11, 127}, + dictWord{148, 11, 90}, + dictWord{5, 0, 337}, + dictWord{11, 0, 513}, + dictWord{11, 0, 889}, + dictWord{ + 11, + 0, + 961, + }, + dictWord{12, 0, 461}, + dictWord{13, 0, 79}, + dictWord{15, 0, 121}, + dictWord{4, 10, 90}, + dictWord{5, 10, 545}, + dictWord{7, 10, 754}, + dictWord{9, 10, 186}, + dictWord{10, 10, 72}, + dictWord{10, 10, 782}, + dictWord{11, 10, 577}, + dictWord{11, 10, 610}, + dictWord{12, 10, 354}, + dictWord{12, 10, 362}, + dictWord{ + 140, + 10, + 595, + }, + dictWord{141, 0, 306}, + dictWord{136, 0, 146}, + dictWord{7, 0, 1646}, + dictWord{9, 10, 329}, + dictWord{11, 10, 254}, + dictWord{141, 11, 124}, + dictWord{ + 4, + 0, + 465, + }, + dictWord{135, 0, 1663}, + dictWord{132, 0, 525}, + dictWord{133, 11, 663}, + dictWord{10, 0, 299}, + dictWord{18, 0, 74}, + dictWord{9, 10, 187}, + dictWord{ + 11, + 10, + 1016, + }, + dictWord{145, 10, 44}, + dictWord{7, 0, 165}, + dictWord{7, 0, 919}, + dictWord{4, 10, 506}, + dictWord{136, 10, 517}, + dictWord{5, 10, 295}, + dictWord{ + 135, + 10, + 1680, + }, + dictWord{133, 11, 846}, + dictWord{134, 0, 1064}, + dictWord{5, 11, 378}, + dictWord{7, 11, 1402}, + dictWord{7, 11, 1414}, + dictWord{8, 11, 465}, + dictWord{9, 11, 286}, + dictWord{10, 11, 185}, + dictWord{10, 11, 562}, + dictWord{10, 11, 635}, + dictWord{11, 11, 31}, + dictWord{11, 11, 393}, + dictWord{ + 12, + 11, + 456, + }, + dictWord{13, 11, 312}, + dictWord{18, 11, 65}, + dictWord{18, 11, 96}, + dictWord{147, 11, 89}, + dictWord{132, 0, 596}, + dictWord{7, 10, 987}, + dictWord{ + 9, + 10, + 688, + }, + dictWord{10, 10, 522}, + dictWord{11, 10, 788}, + dictWord{140, 10, 566}, + dictWord{6, 0, 82}, + dictWord{7, 0, 138}, + dictWord{7, 0, 517}, + dictWord{7, 0, 1741}, + dictWord{11, 0, 238}, + dictWord{4, 11, 648}, + dictWord{134, 10, 1775}, + dictWord{7, 0, 1233}, + dictWord{7, 10, 700}, + dictWord{7, 10, 940}, + dictWord{8, 10, 514}, + dictWord{9, 10, 116}, + dictWord{9, 10, 535}, + dictWord{10, 10, 118}, + dictWord{11, 10, 107}, + dictWord{11, 10, 148}, + dictWord{11, 10, 922}, + dictWord{ + 12, + 10, + 254, + }, + dictWord{12, 10, 421}, + dictWord{142, 10, 238}, + dictWord{4, 0, 962}, + dictWord{6, 0, 1824}, + dictWord{8, 0, 894}, + dictWord{12, 0, 708}, + dictWord{ + 12, + 0, + 725, + }, + dictWord{14, 0, 451}, + dictWord{20, 0, 94}, + dictWord{22, 0, 59}, + dictWord{150, 0, 62}, + dictWord{5, 11, 945}, + dictWord{6, 11, 1656}, + dictWord{6, 11, 1787}, + dictWord{7, 11, 167}, + dictWord{8, 11, 824}, + dictWord{9, 11, 391}, + dictWord{10, 11, 375}, + dictWord{139, 11, 185}, + dictWord{5, 0, 495}, + dictWord{7, 0, 834}, + dictWord{9, 0, 733}, + dictWord{139, 0, 378}, + dictWord{4, 10, 743}, + dictWord{135, 11, 1273}, + dictWord{6, 0, 1204}, + dictWord{7, 11, 1645}, + dictWord{8, 11, 352}, + dictWord{137, 11, 249}, + dictWord{139, 10, 292}, + dictWord{133, 0, 559}, + dictWord{132, 11, 152}, + dictWord{9, 0, 499}, + dictWord{10, 0, 341}, + dictWord{ + 15, + 0, + 144, + }, + dictWord{19, 0, 49}, + dictWord{7, 10, 1283}, + dictWord{9, 10, 227}, + dictWord{11, 10, 325}, + dictWord{11, 10, 408}, + dictWord{14, 10, 180}, + dictWord{ + 146, + 10, + 47, + }, + dictWord{6, 0, 21}, + dictWord{6, 0, 1737}, + dictWord{7, 0, 1444}, + dictWord{136, 0, 224}, + dictWord{133, 11, 1006}, + dictWord{7, 0, 1446}, + dictWord{ + 9, + 0, + 97, + }, + dictWord{17, 0, 15}, + dictWord{5, 10, 81}, + dictWord{7, 10, 146}, + dictWord{7, 10, 1342}, + dictWord{8, 10, 53}, + dictWord{8, 10, 561}, + dictWord{8, 10, 694}, + dictWord{8, 10, 754}, + dictWord{9, 10, 115}, + dictWord{9, 10, 894}, + dictWord{10, 10, 462}, + dictWord{10, 10, 813}, + dictWord{11, 10, 230}, + dictWord{11, 10, 657}, + dictWord{11, 10, 699}, + dictWord{11, 10, 748}, + dictWord{12, 10, 119}, + dictWord{12, 10, 200}, + dictWord{12, 10, 283}, + dictWord{142, 10, 273}, + dictWord{ + 5, + 10, + 408, + }, + dictWord{137, 10, 747}, + dictWord{135, 11, 431}, + dictWord{135, 11, 832}, + dictWord{6, 0, 729}, + dictWord{134, 0, 953}, + dictWord{4, 0, 727}, + dictWord{ + 8, + 0, + 565, + }, + dictWord{5, 11, 351}, + dictWord{7, 11, 264}, + dictWord{136, 11, 565}, + dictWord{134, 0, 1948}, + dictWord{5, 0, 519}, + dictWord{5, 11, 40}, + dictWord{ + 7, + 11, + 598, + }, + dictWord{7, 11, 1638}, + dictWord{8, 11, 78}, + dictWord{9, 11, 166}, + dictWord{9, 11, 640}, + dictWord{9, 11, 685}, + dictWord{9, 11, 773}, + dictWord{ + 11, + 11, + 215, + }, + dictWord{13, 11, 65}, + dictWord{14, 11, 172}, + dictWord{14, 11, 317}, + dictWord{145, 11, 6}, + dictWord{8, 11, 60}, + dictWord{9, 11, 343}, + dictWord{ + 139, + 11, + 769, + }, + dictWord{137, 11, 455}, + dictWord{134, 0, 1193}, + dictWord{140, 0, 790}, + dictWord{7, 11, 1951}, + dictWord{8, 11, 765}, + dictWord{8, 11, 772}, + dictWord{140, 11, 671}, + dictWord{7, 11, 108}, + dictWord{8, 11, 219}, + dictWord{8, 11, 388}, + dictWord{9, 11, 639}, + dictWord{9, 11, 775}, + dictWord{11, 11, 275}, + dictWord{140, 11, 464}, + dictWord{132, 11, 468}, + dictWord{7, 10, 30}, + dictWord{8, 10, 86}, + dictWord{8, 10, 315}, + dictWord{8, 10, 700}, + dictWord{9, 10, 576}, + dictWord{ + 9, + 10, + 858, + }, + dictWord{11, 10, 310}, + dictWord{11, 10, 888}, + dictWord{11, 10, 904}, + dictWord{12, 10, 361}, + dictWord{141, 10, 248}, + dictWord{5, 11, 15}, + dictWord{6, 11, 56}, + dictWord{7, 11, 1758}, + dictWord{8, 11, 500}, + dictWord{9, 11, 730}, + dictWord{11, 11, 331}, + dictWord{13, 11, 150}, + dictWord{142, 11, 282}, + dictWord{4, 0, 402}, + dictWord{7, 0, 2}, + dictWord{8, 0, 323}, + dictWord{136, 0, 479}, + dictWord{138, 10, 839}, + dictWord{11, 0, 580}, + dictWord{142, 0, 201}, + dictWord{ + 5, + 0, + 59, + }, + dictWord{135, 0, 672}, + dictWord{137, 10, 617}, + dictWord{146, 0, 34}, + dictWord{134, 11, 1886}, + dictWord{4, 0, 961}, + dictWord{136, 0, 896}, + dictWord{ + 6, + 0, + 1285, + }, + dictWord{5, 11, 205}, + dictWord{6, 11, 438}, + dictWord{137, 11, 711}, + dictWord{134, 10, 428}, + dictWord{7, 10, 524}, + dictWord{8, 10, 169}, + dictWord{8, 10, 234}, + dictWord{9, 10, 480}, + dictWord{138, 10, 646}, + dictWord{148, 0, 46}, + dictWord{141, 0, 479}, + dictWord{133, 11, 534}, + dictWord{6, 0, 2019}, + dictWord{134, 10, 1648}, + dictWord{4, 0, 85}, + dictWord{7, 0, 549}, + dictWord{7, 10, 1205}, + dictWord{138, 10, 637}, + dictWord{4, 0, 663}, + dictWord{5, 0, 94}, + dictWord{ + 7, + 11, + 235, + }, + dictWord{7, 11, 1475}, + dictWord{15, 11, 68}, + dictWord{146, 11, 120}, + dictWord{6, 11, 443}, + dictWord{9, 11, 237}, + dictWord{9, 11, 571}, + dictWord{ + 9, + 11, + 695, + }, + dictWord{10, 11, 139}, + dictWord{11, 11, 715}, + dictWord{12, 11, 417}, + dictWord{141, 11, 421}, + dictWord{132, 0, 783}, + dictWord{4, 0, 682}, + dictWord{8, 0, 65}, + dictWord{9, 10, 39}, + dictWord{10, 10, 166}, + dictWord{11, 10, 918}, + dictWord{12, 10, 635}, + dictWord{20, 10, 10}, + dictWord{22, 10, 27}, + dictWord{ + 22, + 10, + 43, + }, + dictWord{150, 10, 52}, + dictWord{6, 0, 11}, + dictWord{135, 0, 187}, + dictWord{132, 0, 522}, + dictWord{4, 0, 52}, + dictWord{135, 0, 661}, + dictWord{ + 4, + 0, + 383, + }, + dictWord{133, 0, 520}, + dictWord{135, 11, 546}, + dictWord{11, 0, 343}, + dictWord{142, 0, 127}, + dictWord{4, 11, 578}, + dictWord{7, 10, 157}, + dictWord{ + 7, + 11, + 624, + }, + dictWord{7, 11, 916}, + dictWord{8, 10, 279}, + dictWord{10, 11, 256}, + dictWord{11, 11, 87}, + dictWord{139, 11, 703}, + dictWord{134, 10, 604}, + dictWord{ + 4, + 0, + 281, + }, + dictWord{5, 0, 38}, + dictWord{7, 0, 194}, + dictWord{7, 0, 668}, + dictWord{7, 0, 1893}, + dictWord{137, 0, 397}, + dictWord{7, 10, 945}, + dictWord{11, 10, 713}, + dictWord{139, 10, 744}, + dictWord{139, 10, 1022}, + dictWord{9, 0, 635}, + dictWord{139, 0, 559}, + dictWord{5, 11, 923}, + dictWord{7, 11, 490}, + dictWord{ + 12, + 11, + 553, + }, + dictWord{13, 11, 100}, + dictWord{14, 11, 118}, + dictWord{143, 11, 75}, + dictWord{132, 0, 975}, + dictWord{132, 10, 567}, + dictWord{137, 10, 859}, + dictWord{7, 10, 1846}, + dictWord{7, 11, 1846}, + dictWord{8, 10, 628}, + dictWord{136, 11, 628}, + dictWord{148, 0, 116}, + dictWord{138, 11, 750}, + dictWord{14, 0, 51}, + dictWord{14, 11, 51}, + dictWord{15, 11, 7}, + dictWord{148, 11, 20}, + dictWord{132, 0, 858}, + dictWord{134, 0, 1075}, + dictWord{4, 11, 924}, + dictWord{ + 133, + 10, + 762, + }, + dictWord{136, 0, 535}, + dictWord{133, 0, 448}, + dictWord{10, 10, 784}, + dictWord{141, 10, 191}, + dictWord{133, 10, 298}, + dictWord{7, 0, 610}, + dictWord{135, 0, 1501}, + dictWord{7, 10, 633}, + dictWord{7, 10, 905}, + dictWord{7, 10, 909}, + dictWord{7, 10, 1538}, + dictWord{9, 10, 767}, + dictWord{140, 10, 636}, + dictWord{4, 11, 265}, + dictWord{7, 11, 807}, + dictWord{135, 11, 950}, + dictWord{5, 11, 93}, + dictWord{12, 11, 267}, + dictWord{144, 11, 26}, + dictWord{136, 0, 191}, + dictWord{139, 10, 301}, + dictWord{135, 10, 1970}, + dictWord{135, 0, 267}, + dictWord{4, 0, 319}, + dictWord{5, 0, 699}, + dictWord{138, 0, 673}, + dictWord{ + 6, + 0, + 336, + }, + dictWord{7, 0, 92}, + dictWord{7, 0, 182}, + dictWord{8, 0, 453}, + dictWord{8, 0, 552}, + dictWord{9, 0, 204}, + dictWord{9, 0, 285}, + dictWord{10, 0, 99}, + dictWord{ + 11, + 0, + 568, + }, + dictWord{11, 0, 950}, + dictWord{12, 0, 94}, + dictWord{16, 0, 20}, + dictWord{16, 0, 70}, + dictWord{19, 0, 55}, + dictWord{12, 10, 644}, + dictWord{144, 10, 90}, + dictWord{6, 0, 551}, + dictWord{7, 0, 1308}, + dictWord{7, 10, 845}, + dictWord{7, 11, 994}, + dictWord{8, 10, 160}, + dictWord{137, 10, 318}, + dictWord{19, 11, 1}, + dictWord{ + 19, + 11, + 26, + }, + dictWord{150, 11, 9}, + dictWord{7, 0, 1406}, + dictWord{9, 0, 218}, + dictWord{141, 0, 222}, + dictWord{5, 0, 256}, + dictWord{138, 0, 69}, + dictWord{ + 5, + 11, + 233, + }, + dictWord{5, 11, 320}, + dictWord{6, 11, 140}, + dictWord{7, 11, 330}, + dictWord{136, 11, 295}, + dictWord{6, 0, 1980}, + dictWord{136, 0, 952}, + dictWord{ + 4, + 0, + 833, + }, + dictWord{137, 11, 678}, + dictWord{133, 11, 978}, + dictWord{4, 11, 905}, + dictWord{6, 11, 1701}, + dictWord{137, 11, 843}, + dictWord{138, 10, 735}, + dictWord{136, 10, 76}, + dictWord{17, 0, 39}, + dictWord{148, 0, 36}, + dictWord{18, 0, 81}, + dictWord{146, 11, 81}, + dictWord{14, 0, 352}, + dictWord{17, 0, 53}, + dictWord{ + 18, + 0, + 146, + }, + dictWord{18, 0, 152}, + dictWord{19, 0, 11}, + dictWord{150, 0, 54}, + dictWord{135, 0, 634}, + dictWord{138, 10, 841}, + dictWord{132, 0, 618}, + dictWord{ + 4, + 0, + 339, + }, + dictWord{7, 0, 259}, + dictWord{17, 0, 73}, + dictWord{4, 11, 275}, + dictWord{140, 11, 376}, + dictWord{132, 11, 509}, + dictWord{7, 11, 273}, + dictWord{ + 139, + 11, + 377, + }, + dictWord{4, 0, 759}, + dictWord{13, 0, 169}, + dictWord{137, 10, 804}, + dictWord{6, 10, 96}, + dictWord{135, 10, 1426}, + dictWord{4, 10, 651}, + dictWord{133, 10, 289}, + dictWord{7, 0, 1075}, + dictWord{8, 10, 35}, + dictWord{9, 10, 511}, + dictWord{10, 10, 767}, + dictWord{147, 10, 118}, + dictWord{6, 0, 649}, + dictWord{6, 0, 670}, + dictWord{136, 0, 482}, + dictWord{5, 0, 336}, + dictWord{6, 0, 341}, + dictWord{6, 0, 478}, + dictWord{6, 0, 1763}, + dictWord{136, 0, 386}, + dictWord{ + 5, + 11, + 802, + }, + dictWord{7, 11, 2021}, + dictWord{8, 11, 805}, + dictWord{14, 11, 94}, + dictWord{15, 11, 65}, + dictWord{16, 11, 4}, + dictWord{16, 11, 77}, + dictWord{16, 11, 80}, + dictWord{145, 11, 5}, + dictWord{6, 0, 1035}, + dictWord{5, 11, 167}, + dictWord{5, 11, 899}, + dictWord{6, 11, 410}, + dictWord{137, 11, 777}, + dictWord{ + 134, + 11, + 1705, + }, + dictWord{5, 0, 924}, + dictWord{133, 0, 969}, + dictWord{132, 10, 704}, + dictWord{135, 0, 73}, + dictWord{135, 11, 10}, + dictWord{135, 10, 1078}, + dictWord{ + 5, + 11, + 11, + }, + dictWord{6, 11, 117}, + dictWord{6, 11, 485}, + dictWord{7, 11, 1133}, + dictWord{9, 11, 582}, + dictWord{9, 11, 594}, + dictWord{11, 11, 21}, + dictWord{ + 11, + 11, + 818, + }, + dictWord{12, 11, 535}, + dictWord{141, 11, 86}, + dictWord{135, 0, 1971}, + dictWord{4, 11, 264}, + dictWord{7, 11, 1067}, + dictWord{8, 11, 204}, + dictWord{8, 11, 385}, + dictWord{139, 11, 953}, + dictWord{6, 0, 1458}, + dictWord{135, 0, 1344}, + dictWord{5, 0, 396}, + dictWord{134, 0, 501}, + dictWord{4, 10, 720}, + dictWord{133, 10, 306}, + dictWord{4, 0, 929}, + dictWord{5, 0, 799}, + dictWord{8, 0, 46}, + dictWord{8, 0, 740}, + dictWord{133, 10, 431}, + dictWord{7, 11, 646}, + dictWord{ + 7, + 11, + 1730, + }, + dictWord{11, 11, 446}, + dictWord{141, 11, 178}, + dictWord{7, 0, 276}, + dictWord{5, 10, 464}, + dictWord{6, 10, 236}, + dictWord{7, 10, 696}, + dictWord{ + 7, + 10, + 914, + }, + dictWord{7, 10, 1108}, + dictWord{7, 10, 1448}, + dictWord{9, 10, 15}, + dictWord{9, 10, 564}, + dictWord{10, 10, 14}, + dictWord{12, 10, 565}, + dictWord{ + 13, + 10, + 449, + }, + dictWord{14, 10, 53}, + dictWord{15, 10, 13}, + dictWord{16, 10, 64}, + dictWord{145, 10, 41}, + dictWord{4, 0, 892}, + dictWord{133, 0, 770}, + dictWord{ + 6, + 10, + 1767, + }, + dictWord{12, 10, 194}, + dictWord{145, 10, 107}, + dictWord{135, 0, 158}, + dictWord{5, 10, 840}, + dictWord{138, 11, 608}, + dictWord{134, 0, 1432}, + dictWord{138, 11, 250}, + dictWord{8, 11, 794}, + dictWord{9, 11, 400}, + dictWord{10, 11, 298}, + dictWord{142, 11, 228}, + dictWord{151, 0, 25}, + dictWord{ + 7, + 11, + 1131, + }, + dictWord{135, 11, 1468}, + dictWord{135, 0, 2001}, + dictWord{9, 10, 642}, + dictWord{11, 10, 236}, + dictWord{142, 10, 193}, + dictWord{4, 10, 68}, + dictWord{5, 10, 634}, + dictWord{6, 10, 386}, + dictWord{7, 10, 794}, + dictWord{8, 10, 273}, + dictWord{9, 10, 563}, + dictWord{10, 10, 105}, + dictWord{10, 10, 171}, + dictWord{11, 10, 94}, + dictWord{139, 10, 354}, + dictWord{136, 11, 724}, + dictWord{132, 0, 478}, + dictWord{11, 11, 512}, + dictWord{13, 11, 205}, + dictWord{ + 19, + 11, + 30, + }, + dictWord{22, 11, 36}, + dictWord{151, 11, 19}, + dictWord{7, 0, 1461}, + dictWord{140, 0, 91}, + dictWord{6, 11, 190}, + dictWord{7, 11, 768}, + dictWord{ + 135, + 11, + 1170, + }, + dictWord{4, 0, 602}, + dictWord{8, 0, 211}, + dictWord{4, 10, 95}, + dictWord{7, 10, 416}, + dictWord{139, 10, 830}, + dictWord{7, 10, 731}, + dictWord{13, 10, 20}, + dictWord{143, 10, 11}, + dictWord{6, 0, 1068}, + dictWord{135, 0, 1872}, + dictWord{4, 0, 13}, + dictWord{5, 0, 567}, + dictWord{7, 0, 1498}, + dictWord{9, 0, 124}, + dictWord{11, 0, 521}, + dictWord{12, 0, 405}, + dictWord{135, 11, 1023}, + dictWord{135, 0, 1006}, + dictWord{132, 0, 735}, + dictWord{138, 0, 812}, + dictWord{4, 0, 170}, + dictWord{135, 0, 323}, + dictWord{6, 11, 137}, + dictWord{9, 11, 75}, + dictWord{9, 11, 253}, + dictWord{10, 11, 194}, + dictWord{138, 11, 444}, + dictWord{5, 0, 304}, + dictWord{7, 0, 1403}, + dictWord{5, 10, 864}, + dictWord{10, 10, 648}, + dictWord{11, 10, 671}, + dictWord{143, 10, 46}, + dictWord{135, 11, 1180}, + dictWord{ + 133, + 10, + 928, + }, + dictWord{4, 0, 148}, + dictWord{133, 0, 742}, + dictWord{11, 10, 986}, + dictWord{140, 10, 682}, + dictWord{133, 0, 523}, + dictWord{135, 11, 1743}, + dictWord{7, 0, 730}, + dictWord{18, 0, 144}, + dictWord{19, 0, 61}, + dictWord{8, 10, 44}, + dictWord{9, 10, 884}, + dictWord{10, 10, 580}, + dictWord{11, 10, 399}, + dictWord{ + 11, + 10, + 894, + }, + dictWord{143, 10, 122}, + dictWord{5, 11, 760}, + dictWord{7, 11, 542}, + dictWord{8, 11, 135}, + dictWord{136, 11, 496}, + dictWord{136, 0, 981}, + dictWord{133, 0, 111}, + dictWord{10, 0, 132}, + dictWord{11, 0, 191}, + dictWord{11, 0, 358}, + dictWord{139, 0, 460}, + dictWord{7, 11, 319}, + dictWord{7, 11, 355}, + dictWord{ + 7, + 11, + 763, + }, + dictWord{10, 11, 389}, + dictWord{145, 11, 43}, + dictWord{134, 0, 890}, + dictWord{134, 0, 1420}, + dictWord{136, 11, 557}, + dictWord{ + 133, + 10, + 518, + }, + dictWord{133, 0, 444}, + dictWord{135, 0, 1787}, + dictWord{135, 10, 1852}, + dictWord{8, 0, 123}, + dictWord{15, 0, 6}, + dictWord{144, 0, 7}, + dictWord{ + 6, + 0, + 2041, + }, + dictWord{10, 11, 38}, + dictWord{139, 11, 784}, + dictWord{136, 0, 932}, + dictWord{5, 0, 937}, + dictWord{135, 0, 100}, + dictWord{6, 0, 995}, + dictWord{ + 4, + 11, + 58, + }, + dictWord{5, 11, 286}, + dictWord{6, 11, 319}, + dictWord{7, 11, 402}, + dictWord{7, 11, 1254}, + dictWord{7, 11, 1903}, + dictWord{8, 11, 356}, + dictWord{ + 140, + 11, + 408, + }, + dictWord{4, 11, 389}, + dictWord{9, 11, 181}, + dictWord{9, 11, 255}, + dictWord{10, 11, 8}, + dictWord{10, 11, 29}, + dictWord{10, 11, 816}, + dictWord{ + 11, + 11, + 311, + }, + dictWord{11, 11, 561}, + dictWord{12, 11, 67}, + dictWord{141, 11, 181}, + dictWord{138, 0, 255}, + dictWord{5, 0, 138}, + dictWord{4, 10, 934}, + dictWord{ + 136, + 10, + 610, + }, + dictWord{4, 0, 965}, + dictWord{10, 0, 863}, + dictWord{138, 0, 898}, + dictWord{10, 10, 804}, + dictWord{138, 10, 832}, + dictWord{12, 0, 631}, + dictWord{ + 8, + 10, + 96, + }, + dictWord{9, 10, 36}, + dictWord{10, 10, 607}, + dictWord{11, 10, 423}, + dictWord{11, 10, 442}, + dictWord{12, 10, 309}, + dictWord{14, 10, 199}, + dictWord{ + 15, + 10, + 90, + }, + dictWord{145, 10, 110}, + dictWord{134, 0, 1394}, + dictWord{4, 0, 652}, + dictWord{8, 0, 320}, + dictWord{22, 0, 6}, + dictWord{22, 0, 16}, + dictWord{ + 9, + 10, + 13, + }, + dictWord{9, 10, 398}, + dictWord{9, 10, 727}, + dictWord{10, 10, 75}, + dictWord{10, 10, 184}, + dictWord{10, 10, 230}, + dictWord{10, 10, 564}, + dictWord{ + 10, + 10, + 569, + }, + dictWord{11, 10, 973}, + dictWord{12, 10, 70}, + dictWord{12, 10, 189}, + dictWord{13, 10, 57}, + dictWord{141, 10, 257}, + dictWord{6, 0, 897}, + dictWord{ + 134, + 0, + 1333, + }, + dictWord{4, 0, 692}, + dictWord{133, 0, 321}, + dictWord{133, 11, 373}, + dictWord{135, 0, 922}, + dictWord{5, 0, 619}, + dictWord{133, 0, 698}, + dictWord{ + 137, + 10, + 631, + }, + dictWord{5, 10, 345}, + dictWord{135, 10, 1016}, + dictWord{9, 0, 957}, + dictWord{9, 0, 1018}, + dictWord{12, 0, 828}, + dictWord{12, 0, 844}, + dictWord{ + 12, + 0, + 897, + }, + dictWord{12, 0, 901}, + dictWord{12, 0, 943}, + dictWord{15, 0, 180}, + dictWord{18, 0, 197}, + dictWord{18, 0, 200}, + dictWord{18, 0, 213}, + dictWord{ + 18, + 0, + 214, + }, + dictWord{146, 0, 226}, + dictWord{5, 0, 917}, + dictWord{134, 0, 1659}, + dictWord{135, 0, 1100}, + dictWord{134, 0, 1173}, + dictWord{134, 0, 1930}, + dictWord{5, 0, 251}, + dictWord{5, 0, 956}, + dictWord{8, 0, 268}, + dictWord{9, 0, 214}, + dictWord{146, 0, 142}, + dictWord{133, 10, 673}, + dictWord{137, 10, 850}, + dictWord{ + 4, + 10, + 287, + }, + dictWord{133, 10, 1018}, + dictWord{132, 11, 672}, + dictWord{5, 0, 346}, + dictWord{5, 0, 711}, + dictWord{8, 0, 390}, + dictWord{11, 11, 752}, + dictWord{139, 11, 885}, + dictWord{5, 10, 34}, + dictWord{10, 10, 724}, + dictWord{12, 10, 444}, + dictWord{13, 10, 354}, + dictWord{18, 10, 32}, + dictWord{23, 10, 24}, + dictWord{23, 10, 31}, + dictWord{152, 10, 5}, + dictWord{4, 11, 710}, + dictWord{134, 11, 606}, + dictWord{134, 0, 744}, + dictWord{134, 10, 382}, + dictWord{ + 133, + 11, + 145, + }, + dictWord{4, 10, 329}, + dictWord{7, 11, 884}, + dictWord{140, 11, 124}, + dictWord{4, 11, 467}, + dictWord{5, 11, 405}, + dictWord{134, 11, 544}, + dictWord{ + 9, + 10, + 846, + }, + dictWord{138, 10, 827}, + dictWord{133, 0, 624}, + dictWord{9, 11, 372}, + dictWord{15, 11, 2}, + dictWord{19, 11, 10}, + dictWord{147, 11, 18}, + dictWord{ + 4, + 11, + 387, + }, + dictWord{135, 11, 1288}, + dictWord{5, 0, 783}, + dictWord{7, 0, 1998}, + dictWord{135, 0, 2047}, + dictWord{132, 10, 906}, + dictWord{136, 10, 366}, + dictWord{135, 11, 550}, + dictWord{4, 10, 123}, + dictWord{4, 10, 649}, + dictWord{5, 10, 605}, + dictWord{7, 10, 1509}, + dictWord{136, 10, 36}, + dictWord{ + 134, + 0, + 1125, + }, + dictWord{132, 0, 594}, + dictWord{133, 10, 767}, + dictWord{135, 11, 1227}, + dictWord{136, 11, 467}, + dictWord{4, 11, 576}, + dictWord{ + 135, + 11, + 1263, + }, + dictWord{4, 0, 268}, + dictWord{7, 0, 1534}, + dictWord{135, 11, 1534}, + dictWord{4, 10, 273}, + dictWord{5, 10, 658}, + dictWord{5, 11, 919}, + dictWord{ + 5, + 10, + 995, + }, + dictWord{134, 11, 1673}, + dictWord{133, 0, 563}, + dictWord{134, 10, 72}, + dictWord{135, 10, 1345}, + dictWord{4, 11, 82}, + dictWord{5, 11, 333}, + dictWord{ + 5, + 11, + 904, + }, + dictWord{6, 11, 207}, + dictWord{7, 11, 325}, + dictWord{7, 11, 1726}, + dictWord{8, 11, 101}, + dictWord{10, 11, 778}, + dictWord{139, 11, 220}, + dictWord{5, 0, 37}, + dictWord{6, 0, 39}, + dictWord{6, 0, 451}, + dictWord{7, 0, 218}, + dictWord{7, 0, 667}, + dictWord{7, 0, 1166}, + dictWord{7, 0, 1687}, + dictWord{8, 0, 662}, + dictWord{16, 0, 2}, + dictWord{133, 10, 589}, + dictWord{134, 0, 1332}, + dictWord{133, 11, 903}, + dictWord{134, 0, 508}, + dictWord{5, 10, 117}, + dictWord{6, 10, 514}, + dictWord{6, 10, 541}, + dictWord{7, 10, 1164}, + dictWord{7, 10, 1436}, + dictWord{8, 10, 220}, + dictWord{8, 10, 648}, + dictWord{10, 10, 688}, + dictWord{11, 10, 560}, + dictWord{140, 11, 147}, + dictWord{6, 11, 555}, + dictWord{135, 11, 485}, + dictWord{133, 10, 686}, + dictWord{7, 0, 453}, + dictWord{7, 0, 635}, + dictWord{7, 0, 796}, + dictWord{8, 0, 331}, + dictWord{9, 0, 330}, + dictWord{9, 0, 865}, + dictWord{10, 0, 119}, + dictWord{10, 0, 235}, + dictWord{11, 0, 111}, + dictWord{11, 0, 129}, + dictWord{ + 11, + 0, + 240, + }, + dictWord{12, 0, 31}, + dictWord{12, 0, 66}, + dictWord{12, 0, 222}, + dictWord{12, 0, 269}, + dictWord{12, 0, 599}, + dictWord{12, 0, 684}, + dictWord{12, 0, 689}, + dictWord{12, 0, 691}, + dictWord{142, 0, 345}, + dictWord{135, 0, 1834}, + dictWord{4, 11, 705}, + dictWord{7, 11, 615}, + dictWord{138, 11, 251}, + dictWord{ + 136, + 11, + 345, + }, + dictWord{137, 0, 527}, + dictWord{6, 0, 98}, + dictWord{7, 0, 702}, + dictWord{135, 0, 991}, + dictWord{11, 0, 576}, + dictWord{14, 0, 74}, + dictWord{7, 10, 196}, + dictWord{10, 10, 765}, + dictWord{11, 10, 347}, + dictWord{11, 10, 552}, + dictWord{11, 10, 790}, + dictWord{12, 10, 263}, + dictWord{13, 10, 246}, + dictWord{ + 13, + 10, + 270, + }, + dictWord{13, 10, 395}, + dictWord{14, 10, 176}, + dictWord{14, 10, 190}, + dictWord{14, 10, 398}, + dictWord{14, 10, 412}, + dictWord{15, 10, 32}, + dictWord{ + 15, + 10, + 63, + }, + dictWord{16, 10, 88}, + dictWord{147, 10, 105}, + dictWord{134, 11, 90}, + dictWord{13, 0, 84}, + dictWord{141, 0, 122}, + dictWord{6, 0, 37}, + dictWord{ + 7, + 0, + 299, + }, + dictWord{7, 0, 1666}, + dictWord{8, 0, 195}, + dictWord{8, 0, 316}, + dictWord{9, 0, 178}, + dictWord{9, 0, 276}, + dictWord{9, 0, 339}, + dictWord{9, 0, 536}, + dictWord{ + 10, + 0, + 102, + }, + dictWord{10, 0, 362}, + dictWord{10, 0, 785}, + dictWord{11, 0, 55}, + dictWord{11, 0, 149}, + dictWord{11, 0, 773}, + dictWord{13, 0, 416}, + dictWord{ + 13, + 0, + 419, + }, + dictWord{14, 0, 38}, + dictWord{14, 0, 41}, + dictWord{142, 0, 210}, + dictWord{5, 10, 381}, + dictWord{135, 10, 1792}, + dictWord{7, 11, 813}, + dictWord{ + 12, + 11, + 497, + }, + dictWord{141, 11, 56}, + dictWord{7, 10, 616}, + dictWord{138, 10, 413}, + dictWord{133, 0, 645}, + dictWord{6, 11, 125}, + dictWord{135, 11, 1277}, + dictWord{132, 0, 290}, + dictWord{6, 0, 70}, + dictWord{7, 0, 1292}, + dictWord{10, 0, 762}, + dictWord{139, 0, 288}, + dictWord{6, 10, 120}, + dictWord{7, 10, 1188}, + dictWord{ + 7, + 10, + 1710, + }, + dictWord{8, 10, 286}, + dictWord{9, 10, 667}, + dictWord{11, 10, 592}, + dictWord{139, 10, 730}, + dictWord{135, 11, 1784}, + dictWord{7, 0, 1315}, + dictWord{135, 11, 1315}, + dictWord{134, 0, 1955}, + dictWord{135, 10, 1146}, + dictWord{7, 0, 131}, + dictWord{7, 0, 422}, + dictWord{8, 0, 210}, + dictWord{ + 140, + 0, + 573, + }, + dictWord{4, 10, 352}, + dictWord{135, 10, 687}, + dictWord{139, 0, 797}, + dictWord{143, 0, 38}, + dictWord{14, 0, 179}, + dictWord{15, 0, 151}, + dictWord{ + 150, + 0, + 11, + }, + dictWord{7, 0, 488}, + dictWord{4, 10, 192}, + dictWord{5, 10, 49}, + dictWord{6, 10, 200}, + dictWord{6, 10, 293}, + dictWord{134, 10, 1696}, + dictWord{ + 132, + 0, + 936, + }, + dictWord{135, 11, 703}, + dictWord{6, 11, 160}, + dictWord{7, 11, 1106}, + dictWord{9, 11, 770}, + dictWord{10, 11, 618}, + dictWord{11, 11, 112}, + dictWord{ + 140, + 11, + 413, + }, + dictWord{5, 0, 453}, + dictWord{134, 0, 441}, + dictWord{135, 0, 595}, + dictWord{132, 10, 650}, + dictWord{132, 10, 147}, + dictWord{6, 0, 991}, + dictWord{6, 0, 1182}, + dictWord{12, 11, 271}, + dictWord{145, 11, 109}, + dictWord{133, 10, 934}, + dictWord{140, 11, 221}, + dictWord{132, 0, 653}, + dictWord{ + 7, + 0, + 505, + }, + dictWord{135, 0, 523}, + dictWord{134, 0, 903}, + dictWord{135, 11, 479}, + dictWord{7, 11, 304}, + dictWord{9, 11, 646}, + dictWord{9, 11, 862}, + dictWord{ + 10, + 11, + 262, + }, + dictWord{11, 11, 696}, + dictWord{12, 11, 208}, + dictWord{15, 11, 79}, + dictWord{147, 11, 108}, + dictWord{146, 0, 80}, + dictWord{135, 11, 981}, + dictWord{142, 0, 432}, + dictWord{132, 0, 314}, + dictWord{137, 11, 152}, + dictWord{7, 0, 1368}, + dictWord{8, 0, 232}, + dictWord{8, 0, 361}, + dictWord{10, 0, 682}, + dictWord{138, 0, 742}, + dictWord{135, 11, 1586}, + dictWord{9, 0, 534}, + dictWord{4, 11, 434}, + dictWord{11, 11, 663}, + dictWord{12, 11, 210}, + dictWord{13, 11, 166}, + dictWord{13, 11, 310}, + dictWord{14, 11, 373}, + dictWord{147, 11, 43}, + dictWord{7, 11, 1091}, + dictWord{135, 11, 1765}, + dictWord{6, 11, 550}, + dictWord{ + 135, + 11, + 652, + }, + dictWord{137, 0, 27}, + dictWord{142, 0, 12}, + dictWord{4, 10, 637}, + dictWord{5, 11, 553}, + dictWord{7, 11, 766}, + dictWord{138, 11, 824}, + dictWord{ + 7, + 11, + 737, + }, + dictWord{8, 11, 298}, + dictWord{136, 11, 452}, + dictWord{7, 0, 736}, + dictWord{139, 0, 264}, + dictWord{134, 0, 1657}, + dictWord{133, 11, 292}, + dictWord{138, 11, 135}, + dictWord{6, 0, 844}, + dictWord{134, 0, 1117}, + dictWord{135, 0, 127}, + dictWord{9, 10, 867}, + dictWord{138, 10, 837}, + dictWord{ + 6, + 0, + 1184, + }, + dictWord{134, 0, 1208}, + dictWord{134, 0, 1294}, + dictWord{136, 0, 364}, + dictWord{6, 0, 1415}, + dictWord{7, 0, 1334}, + dictWord{11, 0, 125}, + dictWord{ + 6, + 10, + 170, + }, + dictWord{7, 11, 393}, + dictWord{8, 10, 395}, + dictWord{8, 10, 487}, + dictWord{10, 11, 603}, + dictWord{11, 11, 206}, + dictWord{141, 10, 147}, + dictWord{137, 11, 748}, + dictWord{4, 11, 912}, + dictWord{137, 11, 232}, + dictWord{4, 10, 535}, + dictWord{136, 10, 618}, + dictWord{137, 0, 792}, + dictWord{ + 7, + 11, + 1973, + }, + dictWord{136, 11, 716}, + dictWord{135, 11, 98}, + dictWord{5, 0, 909}, + dictWord{9, 0, 849}, + dictWord{138, 0, 805}, + dictWord{4, 0, 630}, + dictWord{ + 132, + 0, + 699, + }, + dictWord{5, 11, 733}, + dictWord{14, 11, 103}, + dictWord{150, 10, 23}, + dictWord{12, 11, 158}, + dictWord{18, 11, 8}, + dictWord{19, 11, 62}, + dictWord{ + 20, + 11, + 6, + }, + dictWord{22, 11, 4}, + dictWord{23, 11, 2}, + dictWord{151, 11, 9}, + dictWord{132, 0, 968}, + dictWord{132, 10, 778}, + dictWord{132, 10, 46}, + dictWord{5, 10, 811}, + dictWord{6, 10, 1679}, + dictWord{6, 10, 1714}, + dictWord{135, 10, 2032}, + dictWord{6, 0, 1446}, + dictWord{7, 10, 1458}, + dictWord{9, 10, 407}, + dictWord{ + 139, + 10, + 15, + }, + dictWord{7, 0, 206}, + dictWord{7, 0, 397}, + dictWord{7, 0, 621}, + dictWord{7, 0, 640}, + dictWord{8, 0, 124}, + dictWord{8, 0, 619}, + dictWord{9, 0, 305}, + dictWord{ + 9, + 0, + 643, + }, + dictWord{10, 0, 264}, + dictWord{10, 0, 628}, + dictWord{11, 0, 40}, + dictWord{12, 0, 349}, + dictWord{13, 0, 134}, + dictWord{13, 0, 295}, + dictWord{ + 14, + 0, + 155, + }, + dictWord{15, 0, 120}, + dictWord{18, 0, 105}, + dictWord{6, 10, 34}, + dictWord{7, 10, 1089}, + dictWord{8, 10, 708}, + dictWord{8, 10, 721}, + dictWord{9, 10, 363}, + dictWord{148, 10, 98}, + dictWord{4, 0, 262}, + dictWord{5, 0, 641}, + dictWord{135, 0, 342}, + dictWord{137, 11, 72}, + dictWord{4, 0, 99}, + dictWord{6, 0, 250}, + dictWord{ + 6, + 0, + 346, + }, + dictWord{8, 0, 127}, + dictWord{138, 0, 81}, + dictWord{132, 0, 915}, + dictWord{5, 0, 75}, + dictWord{9, 0, 517}, + dictWord{10, 0, 470}, + dictWord{12, 0, 155}, + dictWord{141, 0, 224}, + dictWord{132, 10, 462}, + dictWord{11, 11, 600}, + dictWord{11, 11, 670}, + dictWord{141, 11, 245}, + dictWord{142, 0, 83}, + dictWord{ + 5, + 10, + 73, + }, + dictWord{6, 10, 23}, + dictWord{134, 10, 338}, + dictWord{6, 0, 1031}, + dictWord{139, 11, 923}, + dictWord{7, 11, 164}, + dictWord{7, 11, 1571}, + dictWord{ + 9, + 11, + 107, + }, + dictWord{140, 11, 225}, + dictWord{134, 0, 1470}, + dictWord{133, 0, 954}, + dictWord{6, 0, 304}, + dictWord{8, 0, 418}, + dictWord{10, 0, 345}, + dictWord{ + 11, + 0, + 341, + }, + dictWord{139, 0, 675}, + dictWord{9, 0, 410}, + dictWord{139, 0, 425}, + dictWord{4, 11, 27}, + dictWord{5, 11, 484}, + dictWord{5, 11, 510}, + dictWord{6, 11, 434}, + dictWord{7, 11, 1000}, + dictWord{7, 11, 1098}, + dictWord{8, 11, 2}, + dictWord{136, 11, 200}, + dictWord{134, 0, 734}, + dictWord{140, 11, 257}, + dictWord{ + 7, + 10, + 725, + }, + dictWord{8, 10, 498}, + dictWord{139, 10, 268}, + dictWord{134, 0, 1822}, + dictWord{135, 0, 1798}, + dictWord{135, 10, 773}, + dictWord{132, 11, 460}, + dictWord{4, 11, 932}, + dictWord{133, 11, 891}, + dictWord{134, 0, 14}, + dictWord{132, 10, 583}, + dictWord{7, 10, 1462}, + dictWord{8, 11, 625}, + dictWord{ + 139, + 10, + 659, + }, + dictWord{5, 0, 113}, + dictWord{6, 0, 243}, + dictWord{6, 0, 1708}, + dictWord{7, 0, 1865}, + dictWord{11, 0, 161}, + dictWord{16, 0, 37}, + dictWord{17, 0, 99}, + dictWord{133, 10, 220}, + dictWord{134, 11, 76}, + dictWord{5, 11, 461}, + dictWord{135, 11, 1925}, + dictWord{140, 0, 69}, + dictWord{8, 11, 92}, + dictWord{ + 137, + 11, + 221, + }, + dictWord{139, 10, 803}, + dictWord{132, 10, 544}, + dictWord{4, 0, 274}, + dictWord{134, 0, 922}, + dictWord{132, 0, 541}, + dictWord{5, 0, 627}, + dictWord{ + 6, + 10, + 437, + }, + dictWord{6, 10, 564}, + dictWord{11, 10, 181}, + dictWord{141, 10, 183}, + dictWord{135, 10, 1192}, + dictWord{7, 0, 166}, + dictWord{132, 11, 763}, + dictWord{133, 11, 253}, + dictWord{134, 0, 849}, + dictWord{9, 11, 73}, + dictWord{10, 11, 110}, + dictWord{14, 11, 185}, + dictWord{145, 11, 119}, + dictWord{5, 11, 212}, + dictWord{12, 11, 35}, + dictWord{141, 11, 382}, + dictWord{133, 0, 717}, + dictWord{137, 0, 304}, + dictWord{136, 0, 600}, + dictWord{133, 0, 654}, + dictWord{ + 6, + 0, + 273, + }, + dictWord{10, 0, 188}, + dictWord{13, 0, 377}, + dictWord{146, 0, 77}, + dictWord{4, 10, 790}, + dictWord{5, 10, 273}, + dictWord{134, 10, 394}, + dictWord{ + 132, + 0, + 543, + }, + dictWord{135, 0, 410}, + dictWord{11, 0, 98}, + dictWord{11, 0, 524}, + dictWord{141, 0, 87}, + dictWord{132, 0, 941}, + dictWord{135, 11, 1175}, + dictWord{ + 4, + 0, + 250, + }, + dictWord{7, 0, 1612}, + dictWord{11, 0, 186}, + dictWord{12, 0, 133}, + dictWord{6, 10, 127}, + dictWord{7, 10, 1511}, + dictWord{8, 10, 613}, + dictWord{ + 12, + 10, + 495, + }, + dictWord{12, 10, 586}, + dictWord{12, 10, 660}, + dictWord{12, 10, 668}, + dictWord{14, 10, 385}, + dictWord{15, 10, 118}, + dictWord{17, 10, 20}, + dictWord{ + 146, + 10, + 98, + }, + dictWord{6, 0, 1785}, + dictWord{133, 11, 816}, + dictWord{134, 0, 1339}, + dictWord{7, 0, 961}, + dictWord{7, 0, 1085}, + dictWord{7, 0, 1727}, + dictWord{ + 8, + 0, + 462, + }, + dictWord{6, 10, 230}, + dictWord{135, 11, 1727}, + dictWord{9, 0, 636}, + dictWord{135, 10, 1954}, + dictWord{132, 0, 780}, + dictWord{5, 11, 869}, + dictWord{5, 11, 968}, + dictWord{6, 11, 1626}, + dictWord{8, 11, 734}, + dictWord{136, 11, 784}, + dictWord{4, 11, 542}, + dictWord{6, 11, 1716}, + dictWord{6, 11, 1727}, + dictWord{7, 11, 1082}, + dictWord{7, 11, 1545}, + dictWord{8, 11, 56}, + dictWord{8, 11, 118}, + dictWord{8, 11, 412}, + dictWord{8, 11, 564}, + dictWord{9, 11, 888}, + dictWord{9, 11, 908}, + dictWord{10, 11, 50}, + dictWord{10, 11, 423}, + dictWord{11, 11, 685}, + dictWord{11, 11, 697}, + dictWord{11, 11, 933}, + dictWord{12, 11, 299}, + dictWord{13, 11, 126}, + dictWord{13, 11, 136}, + dictWord{13, 11, 170}, + dictWord{141, 11, 190}, + dictWord{134, 11, 226}, + dictWord{4, 11, 232}, + dictWord{ + 9, + 11, + 202, + }, + dictWord{10, 11, 474}, + dictWord{140, 11, 433}, + dictWord{137, 11, 500}, + dictWord{5, 0, 529}, + dictWord{136, 10, 68}, + dictWord{132, 10, 654}, + dictWord{ + 4, + 10, + 156, + }, + dictWord{7, 10, 998}, + dictWord{7, 10, 1045}, + dictWord{7, 10, 1860}, + dictWord{9, 10, 48}, + dictWord{9, 10, 692}, + dictWord{11, 10, 419}, + dictWord{139, 10, 602}, + dictWord{7, 0, 1276}, + dictWord{8, 0, 474}, + dictWord{9, 0, 652}, + dictWord{6, 11, 108}, + dictWord{7, 11, 1003}, + dictWord{7, 11, 1181}, + dictWord{136, 11, 343}, + dictWord{7, 11, 1264}, + dictWord{7, 11, 1678}, + dictWord{11, 11, 945}, + dictWord{12, 11, 341}, + dictWord{12, 11, 471}, + dictWord{ + 140, + 11, + 569, + }, + dictWord{134, 11, 1712}, + dictWord{5, 0, 948}, + dictWord{12, 0, 468}, + dictWord{19, 0, 96}, + dictWord{148, 0, 24}, + dictWord{4, 11, 133}, + dictWord{ + 7, + 11, + 711, + }, + dictWord{7, 11, 1298}, + dictWord{7, 11, 1585}, + dictWord{135, 11, 1929}, + dictWord{6, 0, 753}, + dictWord{140, 0, 657}, + dictWord{139, 0, 941}, + dictWord{ + 6, + 11, + 99, + }, + dictWord{7, 11, 1808}, + dictWord{145, 11, 57}, + dictWord{6, 11, 574}, + dictWord{7, 11, 428}, + dictWord{7, 11, 1250}, + dictWord{10, 11, 669}, + dictWord{ + 11, + 11, + 485, + }, + dictWord{11, 11, 840}, + dictWord{12, 11, 300}, + dictWord{142, 11, 250}, + dictWord{4, 0, 532}, + dictWord{5, 0, 706}, + dictWord{135, 0, 662}, + dictWord{ + 5, + 0, + 837, + }, + dictWord{6, 0, 1651}, + dictWord{139, 0, 985}, + dictWord{7, 0, 1861}, + dictWord{9, 10, 197}, + dictWord{10, 10, 300}, + dictWord{12, 10, 473}, + dictWord{ + 13, + 10, + 90, + }, + dictWord{141, 10, 405}, + dictWord{137, 11, 252}, + dictWord{6, 11, 323}, + dictWord{135, 11, 1564}, + dictWord{4, 0, 330}, + dictWord{4, 0, 863}, + dictWord{7, 0, 933}, + dictWord{7, 0, 2012}, + dictWord{8, 0, 292}, + dictWord{7, 11, 461}, + dictWord{8, 11, 775}, + dictWord{138, 11, 435}, + dictWord{132, 10, 606}, + dictWord{ + 4, + 11, + 655, + }, + dictWord{7, 11, 850}, + dictWord{17, 11, 75}, + dictWord{146, 11, 137}, + dictWord{135, 0, 767}, + dictWord{7, 10, 1978}, + dictWord{136, 10, 676}, + dictWord{132, 0, 641}, + dictWord{135, 11, 1559}, + dictWord{134, 0, 1233}, + dictWord{137, 0, 242}, + dictWord{17, 0, 114}, + dictWord{4, 10, 361}, + dictWord{ + 133, + 10, + 315, + }, + dictWord{137, 0, 883}, + dictWord{132, 10, 461}, + dictWord{138, 0, 274}, + dictWord{134, 0, 2008}, + dictWord{134, 0, 1794}, + dictWord{4, 0, 703}, + dictWord{135, 0, 207}, + dictWord{12, 0, 285}, + dictWord{132, 10, 472}, + dictWord{132, 0, 571}, + dictWord{5, 0, 873}, + dictWord{5, 0, 960}, + dictWord{8, 0, 823}, + dictWord{9, 0, 881}, + dictWord{136, 11, 577}, + dictWord{7, 0, 617}, + dictWord{10, 0, 498}, + dictWord{11, 0, 501}, + dictWord{12, 0, 16}, + dictWord{140, 0, 150}, + dictWord{ + 138, + 10, + 747, + }, + dictWord{132, 0, 431}, + dictWord{133, 10, 155}, + dictWord{11, 0, 283}, + dictWord{11, 0, 567}, + dictWord{7, 10, 163}, + dictWord{8, 10, 319}, + dictWord{ + 9, + 10, + 402, + }, + dictWord{10, 10, 24}, + dictWord{10, 10, 681}, + dictWord{11, 10, 200}, + dictWord{12, 10, 253}, + dictWord{12, 10, 410}, + dictWord{142, 10, 219}, + dictWord{4, 11, 413}, + dictWord{5, 11, 677}, + dictWord{8, 11, 432}, + dictWord{140, 11, 280}, + dictWord{9, 0, 401}, + dictWord{5, 10, 475}, + dictWord{7, 10, 1780}, + dictWord{11, 10, 297}, + dictWord{11, 10, 558}, + dictWord{14, 10, 322}, + dictWord{147, 10, 76}, + dictWord{6, 0, 781}, + dictWord{9, 0, 134}, + dictWord{10, 0, 2}, + dictWord{ + 10, + 0, + 27, + }, + dictWord{10, 0, 333}, + dictWord{11, 0, 722}, + dictWord{143, 0, 1}, + dictWord{5, 0, 33}, + dictWord{6, 0, 470}, + dictWord{139, 0, 424}, + dictWord{ + 135, + 0, + 2006, + }, + dictWord{12, 0, 783}, + dictWord{135, 10, 1956}, + dictWord{136, 0, 274}, + dictWord{135, 0, 1882}, + dictWord{132, 0, 794}, + dictWord{135, 0, 1848}, + dictWord{5, 10, 944}, + dictWord{134, 10, 1769}, + dictWord{6, 0, 47}, + dictWord{7, 0, 90}, + dictWord{7, 0, 664}, + dictWord{7, 0, 830}, + dictWord{7, 0, 1380}, + dictWord{ + 7, + 0, + 2025, + }, + dictWord{8, 0, 448}, + dictWord{136, 0, 828}, + dictWord{132, 10, 144}, + dictWord{134, 0, 1199}, + dictWord{4, 11, 395}, + dictWord{139, 11, 762}, + dictWord{135, 11, 1504}, + dictWord{9, 0, 417}, + dictWord{137, 0, 493}, + dictWord{9, 11, 174}, + dictWord{10, 11, 164}, + dictWord{11, 11, 440}, + dictWord{11, 11, 841}, + dictWord{143, 11, 98}, + dictWord{134, 11, 426}, + dictWord{139, 11, 1002}, + dictWord{134, 0, 295}, + dictWord{134, 0, 816}, + dictWord{6, 10, 247}, + dictWord{ + 137, + 10, + 555, + }, + dictWord{133, 0, 1019}, + dictWord{4, 0, 620}, + dictWord{5, 11, 476}, + dictWord{10, 10, 280}, + dictWord{138, 10, 797}, + dictWord{139, 0, 464}, + dictWord{5, 11, 76}, + dictWord{6, 11, 458}, + dictWord{6, 11, 497}, + dictWord{7, 11, 764}, + dictWord{7, 11, 868}, + dictWord{9, 11, 658}, + dictWord{10, 11, 594}, + dictWord{ + 11, + 11, + 173, + }, + dictWord{11, 11, 566}, + dictWord{12, 11, 20}, + dictWord{12, 11, 338}, + dictWord{141, 11, 200}, + dictWord{134, 0, 208}, + dictWord{4, 11, 526}, + dictWord{7, 11, 1029}, + dictWord{135, 11, 1054}, + dictWord{132, 11, 636}, + dictWord{6, 11, 233}, + dictWord{7, 11, 660}, + dictWord{7, 11, 1124}, + dictWord{ + 17, + 11, + 31, + }, + dictWord{19, 11, 22}, + dictWord{151, 11, 14}, + dictWord{10, 0, 442}, + dictWord{133, 10, 428}, + dictWord{10, 0, 930}, + dictWord{140, 0, 778}, + dictWord{ + 6, + 0, + 68, + }, + dictWord{7, 0, 448}, + dictWord{7, 0, 1629}, + dictWord{7, 0, 1769}, + dictWord{7, 0, 1813}, + dictWord{8, 0, 442}, + dictWord{8, 0, 516}, + dictWord{9, 0, 710}, + dictWord{ + 10, + 0, + 282, + }, + dictWord{10, 0, 722}, + dictWord{7, 10, 1717}, + dictWord{138, 10, 546}, + dictWord{134, 0, 1128}, + dictWord{11, 0, 844}, + dictWord{12, 0, 104}, + dictWord{140, 0, 625}, + dictWord{4, 11, 432}, + dictWord{135, 11, 824}, + dictWord{138, 10, 189}, + dictWord{133, 0, 787}, + dictWord{133, 10, 99}, + dictWord{ + 4, + 11, + 279, + }, + dictWord{7, 11, 301}, + dictWord{137, 11, 362}, + dictWord{8, 0, 491}, + dictWord{4, 10, 397}, + dictWord{136, 10, 555}, + dictWord{4, 11, 178}, + dictWord{ + 133, + 11, + 399, + }, + dictWord{134, 0, 711}, + dictWord{144, 0, 9}, + dictWord{4, 0, 403}, + dictWord{5, 0, 441}, + dictWord{7, 0, 450}, + dictWord{10, 0, 840}, + dictWord{11, 0, 101}, + dictWord{12, 0, 193}, + dictWord{141, 0, 430}, + dictWord{135, 11, 1246}, + dictWord{12, 10, 398}, + dictWord{20, 10, 39}, + dictWord{21, 10, 11}, + dictWord{ + 150, + 10, + 41, + }, + dictWord{4, 10, 485}, + dictWord{7, 10, 353}, + dictWord{135, 10, 1523}, + dictWord{6, 10, 366}, + dictWord{7, 10, 1384}, + dictWord{7, 10, 1601}, + dictWord{ + 135, + 11, + 1912, + }, + dictWord{7, 0, 396}, + dictWord{10, 0, 160}, + dictWord{135, 11, 396}, + dictWord{137, 10, 282}, + dictWord{134, 11, 1692}, + dictWord{4, 10, 157}, + dictWord{5, 10, 471}, + dictWord{6, 11, 202}, + dictWord{10, 11, 448}, + dictWord{11, 11, 208}, + dictWord{12, 11, 360}, + dictWord{17, 11, 117}, + dictWord{ + 17, + 11, + 118, + }, + dictWord{18, 11, 27}, + dictWord{148, 11, 67}, + dictWord{133, 0, 679}, + dictWord{137, 0, 326}, + dictWord{136, 10, 116}, + dictWord{7, 11, 872}, + dictWord{ + 10, + 11, + 516, + }, + dictWord{139, 11, 167}, + dictWord{132, 11, 224}, + dictWord{5, 11, 546}, + dictWord{7, 11, 35}, + dictWord{8, 11, 11}, + dictWord{8, 11, 12}, + dictWord{ + 9, + 11, + 315, + }, + dictWord{9, 11, 533}, + dictWord{10, 11, 802}, + dictWord{11, 11, 166}, + dictWord{12, 11, 525}, + dictWord{142, 11, 243}, + dictWord{7, 0, 1128}, + dictWord{135, 11, 1920}, + dictWord{5, 11, 241}, + dictWord{8, 11, 242}, + dictWord{9, 11, 451}, + dictWord{10, 11, 667}, + dictWord{11, 11, 598}, + dictWord{ + 140, + 11, + 429, + }, + dictWord{6, 0, 737}, + dictWord{5, 10, 160}, + dictWord{7, 10, 363}, + dictWord{7, 10, 589}, + dictWord{10, 10, 170}, + dictWord{141, 10, 55}, + dictWord{ + 135, + 0, + 1796, + }, + dictWord{142, 11, 254}, + dictWord{4, 0, 574}, + dictWord{7, 0, 350}, + dictWord{7, 0, 1024}, + dictWord{8, 0, 338}, + dictWord{9, 0, 677}, + dictWord{138, 0, 808}, + dictWord{134, 0, 1096}, + dictWord{137, 11, 516}, + dictWord{7, 0, 405}, + dictWord{10, 0, 491}, + dictWord{4, 10, 108}, + dictWord{4, 11, 366}, + dictWord{ + 139, + 10, + 498, + }, + dictWord{11, 11, 337}, + dictWord{142, 11, 303}, + dictWord{134, 11, 1736}, + dictWord{7, 0, 1081}, + dictWord{140, 11, 364}, + dictWord{7, 10, 1005}, + dictWord{140, 10, 609}, + dictWord{7, 0, 1676}, + dictWord{4, 10, 895}, + dictWord{133, 10, 772}, + dictWord{135, 0, 2037}, + dictWord{6, 0, 1207}, + dictWord{ + 11, + 11, + 916, + }, + dictWord{142, 11, 419}, + dictWord{14, 11, 140}, + dictWord{148, 11, 41}, + dictWord{6, 11, 331}, + dictWord{136, 11, 623}, + dictWord{9, 0, 944}, + dictWord{ + 9, + 0, + 969, + }, + dictWord{9, 0, 1022}, + dictWord{12, 0, 913}, + dictWord{12, 0, 936}, + dictWord{15, 0, 177}, + dictWord{15, 0, 193}, + dictWord{4, 10, 926}, + dictWord{ + 133, + 10, + 983, + }, + dictWord{5, 0, 354}, + dictWord{135, 11, 506}, + dictWord{8, 0, 598}, + dictWord{9, 0, 664}, + dictWord{138, 0, 441}, + dictWord{4, 11, 640}, + dictWord{ + 133, + 11, + 513, + }, + dictWord{137, 0, 297}, + dictWord{132, 10, 538}, + dictWord{6, 10, 294}, + dictWord{7, 10, 1267}, + dictWord{136, 10, 624}, + dictWord{7, 0, 1772}, + dictWord{ + 7, + 11, + 1888, + }, + dictWord{8, 11, 289}, + dictWord{11, 11, 45}, + dictWord{12, 11, 278}, + dictWord{140, 11, 537}, + dictWord{135, 10, 1325}, + dictWord{138, 0, 751}, + dictWord{141, 0, 37}, + dictWord{134, 0, 1828}, + dictWord{132, 10, 757}, + dictWord{132, 11, 394}, + dictWord{6, 0, 257}, + dictWord{135, 0, 1522}, + dictWord{ + 4, + 0, + 582, + }, + dictWord{9, 0, 191}, + dictWord{135, 11, 1931}, + dictWord{7, 11, 574}, + dictWord{7, 11, 1719}, + dictWord{137, 11, 145}, + dictWord{132, 11, 658}, + dictWord{10, 0, 790}, + dictWord{132, 11, 369}, + dictWord{9, 11, 781}, + dictWord{10, 11, 144}, + dictWord{11, 11, 385}, + dictWord{13, 11, 161}, + dictWord{13, 11, 228}, + dictWord{13, 11, 268}, + dictWord{148, 11, 107}, + dictWord{8, 0, 469}, + dictWord{10, 0, 47}, + dictWord{136, 11, 374}, + dictWord{6, 0, 306}, + dictWord{7, 0, 1140}, + dictWord{7, 0, 1340}, + dictWord{8, 0, 133}, + dictWord{138, 0, 449}, + dictWord{139, 0, 1011}, + dictWord{7, 10, 1875}, + dictWord{139, 10, 124}, + dictWord{ + 4, + 11, + 344, + }, + dictWord{6, 11, 498}, + dictWord{139, 11, 323}, + dictWord{137, 0, 299}, + dictWord{132, 0, 837}, + dictWord{133, 11, 906}, + dictWord{5, 0, 329}, + dictWord{ + 8, + 0, + 260, + }, + dictWord{138, 0, 10}, + dictWord{134, 0, 1320}, + dictWord{4, 0, 657}, + dictWord{146, 0, 158}, + dictWord{135, 0, 1191}, + dictWord{152, 0, 7}, + dictWord{ + 6, + 0, + 1939, + }, + dictWord{8, 0, 974}, + dictWord{138, 0, 996}, + dictWord{135, 0, 1665}, + dictWord{11, 11, 126}, + dictWord{139, 11, 287}, + dictWord{143, 0, 8}, + dictWord{ + 14, + 11, + 149, + }, + dictWord{14, 11, 399}, + dictWord{143, 11, 57}, + dictWord{5, 0, 66}, + dictWord{7, 0, 1896}, + dictWord{136, 0, 288}, + dictWord{7, 0, 175}, + dictWord{ + 10, + 0, + 494, + }, + dictWord{5, 10, 150}, + dictWord{8, 10, 603}, + dictWord{9, 10, 593}, + dictWord{9, 10, 634}, + dictWord{10, 10, 173}, + dictWord{11, 10, 462}, + dictWord{ + 11, + 10, + 515, + }, + dictWord{13, 10, 216}, + dictWord{13, 10, 288}, + dictWord{142, 10, 400}, + dictWord{134, 0, 1643}, + dictWord{136, 11, 21}, + dictWord{4, 0, 21}, + dictWord{ + 5, + 0, + 91, + }, + dictWord{5, 0, 648}, + dictWord{5, 0, 750}, + dictWord{5, 0, 781}, + dictWord{6, 0, 54}, + dictWord{6, 0, 112}, + dictWord{6, 0, 402}, + dictWord{6, 0, 1732}, + dictWord{ + 7, + 0, + 315, + }, + dictWord{7, 0, 749}, + dictWord{7, 0, 1427}, + dictWord{7, 0, 1900}, + dictWord{9, 0, 78}, + dictWord{9, 0, 508}, + dictWord{10, 0, 611}, + dictWord{10, 0, 811}, + dictWord{11, 0, 510}, + dictWord{11, 0, 728}, + dictWord{13, 0, 36}, + dictWord{14, 0, 39}, + dictWord{16, 0, 83}, + dictWord{17, 0, 124}, + dictWord{148, 0, 30}, + dictWord{ + 4, + 0, + 668, + }, + dictWord{136, 0, 570}, + dictWord{10, 0, 322}, + dictWord{10, 0, 719}, + dictWord{139, 0, 407}, + dictWord{135, 11, 1381}, + dictWord{136, 11, 193}, + dictWord{12, 10, 108}, + dictWord{141, 10, 291}, + dictWord{132, 11, 616}, + dictWord{136, 11, 692}, + dictWord{8, 0, 125}, + dictWord{8, 0, 369}, + dictWord{8, 0, 524}, + dictWord{10, 0, 486}, + dictWord{11, 0, 13}, + dictWord{11, 0, 381}, + dictWord{11, 0, 736}, + dictWord{11, 0, 766}, + dictWord{11, 0, 845}, + dictWord{13, 0, 114}, + dictWord{ + 13, + 0, + 292, + }, + dictWord{142, 0, 47}, + dictWord{134, 0, 1247}, + dictWord{6, 0, 1684}, + dictWord{6, 0, 1731}, + dictWord{7, 0, 356}, + dictWord{8, 0, 54}, + dictWord{8, 0, 221}, + dictWord{9, 0, 225}, + dictWord{9, 0, 356}, + dictWord{10, 0, 77}, + dictWord{10, 0, 446}, + dictWord{10, 0, 731}, + dictWord{12, 0, 404}, + dictWord{141, 0, 491}, + dictWord{135, 10, 1777}, + dictWord{4, 11, 305}, + dictWord{4, 10, 493}, + dictWord{144, 10, 55}, + dictWord{4, 0, 951}, + dictWord{6, 0, 1809}, + dictWord{6, 0, 1849}, + dictWord{8, 0, 846}, + dictWord{8, 0, 866}, + dictWord{8, 0, 899}, + dictWord{10, 0, 896}, + dictWord{12, 0, 694}, + dictWord{142, 0, 468}, + dictWord{5, 11, 214}, + dictWord{ + 7, + 11, + 603, + }, + dictWord{8, 11, 611}, + dictWord{9, 11, 686}, + dictWord{10, 11, 88}, + dictWord{11, 11, 459}, + dictWord{11, 11, 496}, + dictWord{12, 11, 463}, + dictWord{ + 12, + 11, + 590, + }, + dictWord{13, 11, 0}, + dictWord{142, 11, 214}, + dictWord{132, 0, 411}, + dictWord{4, 0, 80}, + dictWord{133, 0, 44}, + dictWord{140, 11, 74}, + dictWord{ + 143, + 0, + 31, + }, + dictWord{7, 0, 669}, + dictWord{6, 10, 568}, + dictWord{7, 10, 1804}, + dictWord{8, 10, 362}, + dictWord{8, 10, 410}, + dictWord{8, 10, 830}, + dictWord{9, 10, 514}, + dictWord{11, 10, 649}, + dictWord{142, 10, 157}, + dictWord{7, 0, 673}, + dictWord{134, 11, 1703}, + dictWord{132, 10, 625}, + dictWord{134, 0, 1303}, + dictWord{ + 5, + 0, + 299, + }, + dictWord{135, 0, 1083}, + dictWord{138, 0, 704}, + dictWord{6, 0, 275}, + dictWord{7, 0, 408}, + dictWord{6, 10, 158}, + dictWord{7, 10, 129}, + dictWord{ + 7, + 10, + 181, + }, + dictWord{8, 10, 276}, + dictWord{8, 10, 377}, + dictWord{10, 10, 523}, + dictWord{11, 10, 816}, + dictWord{12, 10, 455}, + dictWord{13, 10, 303}, + dictWord{ + 142, + 10, + 135, + }, + dictWord{4, 0, 219}, + dictWord{7, 0, 367}, + dictWord{7, 0, 1713}, + dictWord{7, 0, 1761}, + dictWord{9, 0, 86}, + dictWord{9, 0, 537}, + dictWord{10, 0, 165}, + dictWord{12, 0, 219}, + dictWord{140, 0, 561}, + dictWord{8, 0, 216}, + dictWord{4, 10, 1}, + dictWord{4, 11, 737}, + dictWord{6, 11, 317}, + dictWord{7, 10, 1143}, + dictWord{ + 7, + 10, + 1463, + }, + dictWord{9, 10, 207}, + dictWord{9, 10, 390}, + dictWord{9, 10, 467}, + dictWord{10, 11, 98}, + dictWord{11, 11, 294}, + dictWord{11, 10, 836}, + dictWord{ + 12, + 11, + 60, + }, + dictWord{12, 11, 437}, + dictWord{13, 11, 64}, + dictWord{13, 11, 380}, + dictWord{142, 11, 430}, + dictWord{6, 11, 1758}, + dictWord{8, 11, 520}, + dictWord{9, 11, 345}, + dictWord{9, 11, 403}, + dictWord{142, 11, 350}, + dictWord{5, 11, 47}, + dictWord{10, 11, 242}, + dictWord{138, 11, 579}, + dictWord{5, 11, 139}, + dictWord{7, 11, 1168}, + dictWord{138, 11, 539}, + dictWord{135, 0, 1319}, + dictWord{4, 10, 295}, + dictWord{4, 10, 723}, + dictWord{5, 10, 895}, + dictWord{ + 7, + 10, + 1031, + }, + dictWord{8, 10, 199}, + dictWord{8, 10, 340}, + dictWord{9, 10, 153}, + dictWord{9, 10, 215}, + dictWord{10, 10, 21}, + dictWord{10, 10, 59}, + dictWord{ + 10, + 10, + 80, + }, + dictWord{10, 10, 224}, + dictWord{10, 10, 838}, + dictWord{11, 10, 229}, + dictWord{11, 10, 652}, + dictWord{12, 10, 192}, + dictWord{13, 10, 146}, + dictWord{ + 142, + 10, + 91, + }, + dictWord{140, 0, 428}, + dictWord{137, 10, 51}, + dictWord{133, 0, 514}, + dictWord{5, 10, 309}, + dictWord{140, 10, 211}, + dictWord{6, 0, 1010}, + dictWord{5, 10, 125}, + dictWord{8, 10, 77}, + dictWord{138, 10, 15}, + dictWord{4, 0, 55}, + dictWord{5, 0, 301}, + dictWord{6, 0, 571}, + dictWord{142, 0, 49}, + dictWord{ + 146, + 0, + 102, + }, + dictWord{136, 11, 370}, + dictWord{4, 11, 107}, + dictWord{7, 11, 613}, + dictWord{8, 11, 358}, + dictWord{8, 11, 439}, + dictWord{8, 11, 504}, + dictWord{ + 9, + 11, + 501, + }, + dictWord{10, 11, 383}, + dictWord{139, 11, 477}, + dictWord{132, 11, 229}, + dictWord{133, 0, 364}, + dictWord{133, 10, 439}, + dictWord{4, 11, 903}, + dictWord{135, 11, 1816}, + dictWord{11, 0, 379}, + dictWord{140, 10, 76}, + dictWord{4, 0, 76}, + dictWord{4, 0, 971}, + dictWord{7, 0, 1550}, + dictWord{9, 0, 306}, + dictWord{ + 9, + 0, + 430, + }, + dictWord{9, 0, 663}, + dictWord{10, 0, 683}, + dictWord{10, 0, 921}, + dictWord{11, 0, 427}, + dictWord{11, 0, 753}, + dictWord{12, 0, 334}, + dictWord{12, 0, 442}, + dictWord{14, 0, 258}, + dictWord{14, 0, 366}, + dictWord{143, 0, 131}, + dictWord{137, 0, 52}, + dictWord{4, 11, 47}, + dictWord{6, 11, 373}, + dictWord{7, 11, 452}, + dictWord{7, 11, 543}, + dictWord{7, 11, 1714}, + dictWord{7, 11, 1856}, + dictWord{9, 11, 6}, + dictWord{11, 11, 257}, + dictWord{139, 11, 391}, + dictWord{4, 10, 8}, + dictWord{ + 7, + 10, + 1152, + }, + dictWord{7, 10, 1153}, + dictWord{7, 10, 1715}, + dictWord{9, 10, 374}, + dictWord{10, 10, 478}, + dictWord{139, 10, 648}, + dictWord{4, 11, 785}, + dictWord{133, 11, 368}, + dictWord{135, 10, 1099}, + dictWord{135, 11, 860}, + dictWord{5, 11, 980}, + dictWord{134, 11, 1754}, + dictWord{134, 0, 1258}, + dictWord{ + 6, + 0, + 1058, + }, + dictWord{6, 0, 1359}, + dictWord{7, 11, 536}, + dictWord{7, 11, 1331}, + dictWord{136, 11, 143}, + dictWord{4, 0, 656}, + dictWord{135, 0, 779}, + dictWord{136, 10, 87}, + dictWord{5, 11, 19}, + dictWord{6, 11, 533}, + dictWord{146, 11, 126}, + dictWord{7, 0, 144}, + dictWord{138, 10, 438}, + dictWord{5, 11, 395}, + dictWord{5, 11, 951}, + dictWord{134, 11, 1776}, + dictWord{135, 0, 1373}, + dictWord{7, 0, 554}, + dictWord{7, 0, 605}, + dictWord{141, 0, 10}, + dictWord{4, 10, 69}, + dictWord{ + 5, + 10, + 122, + }, + dictWord{9, 10, 656}, + dictWord{138, 10, 464}, + dictWord{5, 10, 849}, + dictWord{134, 10, 1633}, + dictWord{5, 0, 838}, + dictWord{5, 0, 841}, + dictWord{134, 0, 1649}, + dictWord{133, 0, 1012}, + dictWord{139, 10, 499}, + dictWord{7, 10, 476}, + dictWord{7, 10, 1592}, + dictWord{138, 10, 87}, + dictWord{ + 6, + 0, + 251, + }, + dictWord{7, 0, 365}, + dictWord{7, 0, 1357}, + dictWord{7, 0, 1497}, + dictWord{8, 0, 154}, + dictWord{141, 0, 281}, + dictWord{132, 11, 441}, + dictWord{ + 132, + 11, + 695, + }, + dictWord{7, 11, 497}, + dictWord{9, 11, 387}, + dictWord{147, 11, 81}, + dictWord{133, 0, 340}, + dictWord{14, 10, 283}, + dictWord{142, 11, 283}, + dictWord{ + 134, + 0, + 810, + }, + dictWord{135, 11, 1894}, + dictWord{139, 0, 495}, + dictWord{5, 11, 284}, + dictWord{6, 11, 49}, + dictWord{6, 11, 350}, + dictWord{7, 11, 1}, + dictWord{ + 7, + 11, + 377, + }, + dictWord{7, 11, 1693}, + dictWord{8, 11, 18}, + dictWord{8, 11, 678}, + dictWord{9, 11, 161}, + dictWord{9, 11, 585}, + dictWord{9, 11, 671}, + dictWord{ + 9, + 11, + 839, + }, + dictWord{11, 11, 912}, + dictWord{141, 11, 427}, + dictWord{5, 10, 859}, + dictWord{7, 10, 1160}, + dictWord{8, 10, 107}, + dictWord{9, 10, 291}, + dictWord{ + 9, + 10, + 439, + }, + dictWord{10, 10, 663}, + dictWord{11, 10, 609}, + dictWord{140, 10, 197}, + dictWord{8, 0, 261}, + dictWord{9, 0, 144}, + dictWord{9, 0, 466}, + dictWord{ + 10, + 0, + 370, + }, + dictWord{12, 0, 470}, + dictWord{13, 0, 144}, + dictWord{142, 0, 348}, + dictWord{137, 0, 897}, + dictWord{6, 0, 248}, + dictWord{9, 0, 546}, + dictWord{10, 0, 535}, + dictWord{11, 0, 681}, + dictWord{141, 0, 135}, + dictWord{4, 0, 358}, + dictWord{135, 0, 1496}, + dictWord{134, 0, 567}, + dictWord{136, 0, 445}, + dictWord{ + 4, + 10, + 117, + }, + dictWord{6, 10, 372}, + dictWord{7, 10, 1905}, + dictWord{142, 10, 323}, + dictWord{4, 10, 722}, + dictWord{139, 10, 471}, + dictWord{6, 0, 697}, + dictWord{ + 134, + 0, + 996, + }, + dictWord{7, 11, 2007}, + dictWord{9, 11, 101}, + dictWord{9, 11, 450}, + dictWord{10, 11, 66}, + dictWord{10, 11, 842}, + dictWord{11, 11, 536}, + dictWord{ + 140, + 11, + 587, + }, + dictWord{132, 0, 577}, + dictWord{134, 0, 1336}, + dictWord{9, 10, 5}, + dictWord{12, 10, 216}, + dictWord{12, 10, 294}, + dictWord{12, 10, 298}, + dictWord{12, 10, 400}, + dictWord{12, 10, 518}, + dictWord{13, 10, 229}, + dictWord{143, 10, 139}, + dictWord{6, 0, 174}, + dictWord{138, 0, 917}, + dictWord{ + 134, + 10, + 1774, + }, + dictWord{5, 10, 12}, + dictWord{7, 10, 375}, + dictWord{9, 10, 88}, + dictWord{9, 10, 438}, + dictWord{11, 11, 62}, + dictWord{139, 10, 270}, + dictWord{ + 134, + 11, + 1766, + }, + dictWord{6, 11, 0}, + dictWord{7, 11, 84}, + dictWord{7, 10, 816}, + dictWord{7, 10, 1241}, + dictWord{9, 10, 283}, + dictWord{9, 10, 520}, + dictWord{10, 10, 213}, + dictWord{10, 10, 307}, + dictWord{10, 10, 463}, + dictWord{10, 10, 671}, + dictWord{10, 10, 746}, + dictWord{11, 10, 401}, + dictWord{11, 10, 794}, + dictWord{ + 11, + 11, + 895, + }, + dictWord{12, 10, 517}, + dictWord{17, 11, 11}, + dictWord{18, 10, 107}, + dictWord{147, 10, 115}, + dictWord{5, 0, 878}, + dictWord{133, 0, 972}, + dictWord{ + 6, + 11, + 1665, + }, + dictWord{7, 11, 256}, + dictWord{7, 11, 1388}, + dictWord{138, 11, 499}, + dictWord{4, 10, 258}, + dictWord{136, 10, 639}, + dictWord{4, 11, 22}, + dictWord{5, 11, 10}, + dictWord{6, 10, 22}, + dictWord{7, 11, 848}, + dictWord{7, 10, 903}, + dictWord{7, 10, 1963}, + dictWord{8, 11, 97}, + dictWord{138, 10, 577}, + dictWord{ + 5, + 10, + 681, + }, + dictWord{136, 10, 782}, + dictWord{133, 11, 481}, + dictWord{132, 0, 351}, + dictWord{4, 10, 664}, + dictWord{5, 10, 804}, + dictWord{139, 10, 1013}, + dictWord{6, 11, 134}, + dictWord{7, 11, 437}, + dictWord{7, 11, 959}, + dictWord{9, 11, 37}, + dictWord{14, 11, 285}, + dictWord{14, 11, 371}, + dictWord{144, 11, 60}, + dictWord{7, 11, 486}, + dictWord{8, 11, 155}, + dictWord{11, 11, 93}, + dictWord{140, 11, 164}, + dictWord{132, 0, 286}, + dictWord{7, 0, 438}, + dictWord{7, 0, 627}, + dictWord{7, 0, 1516}, + dictWord{8, 0, 40}, + dictWord{9, 0, 56}, + dictWord{9, 0, 294}, + dictWord{10, 0, 30}, + dictWord{11, 0, 969}, + dictWord{11, 0, 995}, + dictWord{146, 0, 148}, + dictWord{5, 11, 591}, + dictWord{135, 11, 337}, + dictWord{134, 0, 1950}, + dictWord{133, 10, 32}, + dictWord{138, 11, 500}, + dictWord{5, 11, 380}, + dictWord{ + 5, + 11, + 650, + }, + dictWord{136, 11, 310}, + dictWord{4, 11, 364}, + dictWord{7, 11, 1156}, + dictWord{7, 11, 1187}, + dictWord{137, 11, 409}, + dictWord{4, 0, 738}, + dictWord{134, 11, 482}, + dictWord{4, 11, 781}, + dictWord{6, 11, 487}, + dictWord{7, 11, 926}, + dictWord{8, 11, 263}, + dictWord{139, 11, 500}, + dictWord{135, 11, 418}, + dictWord{6, 0, 2047}, + dictWord{10, 0, 969}, + dictWord{4, 10, 289}, + dictWord{7, 10, 629}, + dictWord{7, 10, 1698}, + dictWord{7, 10, 1711}, + dictWord{ + 140, + 10, + 215, + }, + dictWord{6, 10, 450}, + dictWord{136, 10, 109}, + dictWord{134, 0, 818}, + dictWord{136, 10, 705}, + dictWord{133, 0, 866}, + dictWord{4, 11, 94}, + dictWord{ + 135, + 11, + 1265, + }, + dictWord{132, 11, 417}, + dictWord{134, 0, 1467}, + dictWord{135, 10, 1238}, + dictWord{4, 0, 972}, + dictWord{6, 0, 1851}, + dictWord{ + 134, + 0, + 1857, + }, + dictWord{134, 0, 355}, + dictWord{133, 0, 116}, + dictWord{132, 0, 457}, + dictWord{135, 11, 1411}, + dictWord{4, 11, 408}, + dictWord{4, 11, 741}, + dictWord{135, 11, 500}, + dictWord{134, 10, 26}, + dictWord{142, 11, 137}, + dictWord{5, 0, 527}, + dictWord{6, 0, 189}, + dictWord{7, 0, 859}, + dictWord{136, 0, 267}, + dictWord{11, 0, 104}, + dictWord{11, 0, 554}, + dictWord{15, 0, 60}, + dictWord{143, 0, 125}, + dictWord{134, 0, 1613}, + dictWord{4, 10, 414}, + dictWord{5, 10, 467}, + dictWord{ + 9, + 10, + 654, + }, + dictWord{10, 10, 451}, + dictWord{12, 10, 59}, + dictWord{141, 10, 375}, + dictWord{135, 10, 17}, + dictWord{134, 0, 116}, + dictWord{135, 11, 541}, + dictWord{135, 10, 955}, + dictWord{6, 11, 73}, + dictWord{135, 11, 177}, + dictWord{133, 11, 576}, + dictWord{134, 0, 886}, + dictWord{133, 0, 487}, + dictWord{ + 4, + 0, + 86, + }, + dictWord{5, 0, 667}, + dictWord{5, 0, 753}, + dictWord{6, 0, 316}, + dictWord{6, 0, 455}, + dictWord{135, 0, 946}, + dictWord{142, 11, 231}, + dictWord{150, 0, 45}, + dictWord{134, 0, 863}, + dictWord{134, 0, 1953}, + dictWord{6, 10, 280}, + dictWord{10, 10, 502}, + dictWord{11, 10, 344}, + dictWord{140, 10, 38}, + dictWord{4, 0, 79}, + dictWord{7, 0, 1773}, + dictWord{10, 0, 450}, + dictWord{11, 0, 589}, + dictWord{13, 0, 332}, + dictWord{13, 0, 493}, + dictWord{14, 0, 183}, + dictWord{14, 0, 334}, + dictWord{14, 0, 362}, + dictWord{14, 0, 368}, + dictWord{14, 0, 376}, + dictWord{14, 0, 379}, + dictWord{19, 0, 90}, + dictWord{19, 0, 103}, + dictWord{19, 0, 127}, + dictWord{ + 148, + 0, + 90, + }, + dictWord{5, 10, 45}, + dictWord{7, 10, 1161}, + dictWord{11, 10, 448}, + dictWord{11, 10, 880}, + dictWord{13, 10, 139}, + dictWord{13, 10, 407}, + dictWord{ + 15, + 10, + 16, + }, + dictWord{17, 10, 95}, + dictWord{18, 10, 66}, + dictWord{18, 10, 88}, + dictWord{18, 10, 123}, + dictWord{149, 10, 7}, + dictWord{136, 10, 777}, + dictWord{ + 4, + 10, + 410, + }, + dictWord{135, 10, 521}, + dictWord{135, 10, 1778}, + dictWord{135, 11, 538}, + dictWord{142, 0, 381}, + dictWord{133, 11, 413}, + dictWord{ + 134, + 0, + 1142, + }, + dictWord{6, 0, 1189}, + dictWord{136, 11, 495}, + dictWord{5, 0, 663}, + dictWord{6, 0, 1962}, + dictWord{134, 0, 2003}, + dictWord{7, 11, 54}, + dictWord{ + 8, + 11, + 312, + }, + dictWord{10, 11, 191}, + dictWord{10, 11, 614}, + dictWord{140, 11, 567}, + dictWord{132, 10, 436}, + dictWord{133, 0, 846}, + dictWord{10, 0, 528}, + dictWord{11, 0, 504}, + dictWord{7, 10, 1587}, + dictWord{135, 10, 1707}, + dictWord{5, 0, 378}, + dictWord{8, 0, 465}, + dictWord{9, 0, 286}, + dictWord{10, 0, 185}, + dictWord{ + 10, + 0, + 562, + }, + dictWord{10, 0, 635}, + dictWord{11, 0, 31}, + dictWord{11, 0, 393}, + dictWord{13, 0, 312}, + dictWord{18, 0, 65}, + dictWord{18, 0, 96}, + dictWord{147, 0, 89}, + dictWord{7, 0, 899}, + dictWord{14, 0, 325}, + dictWord{6, 11, 468}, + dictWord{7, 11, 567}, + dictWord{7, 11, 1478}, + dictWord{8, 11, 530}, + dictWord{142, 11, 290}, + dictWord{7, 0, 1880}, + dictWord{9, 0, 680}, + dictWord{139, 0, 798}, + dictWord{134, 0, 1770}, + dictWord{132, 0, 648}, + dictWord{150, 11, 35}, + dictWord{5, 0, 945}, + dictWord{6, 0, 1656}, + dictWord{6, 0, 1787}, + dictWord{7, 0, 167}, + dictWord{8, 0, 824}, + dictWord{9, 0, 391}, + dictWord{10, 0, 375}, + dictWord{139, 0, 185}, + dictWord{ + 6, + 11, + 484, + }, + dictWord{135, 11, 822}, + dictWord{134, 0, 2046}, + dictWord{7, 0, 1645}, + dictWord{8, 0, 352}, + dictWord{137, 0, 249}, + dictWord{132, 0, 152}, + dictWord{6, 0, 611}, + dictWord{135, 0, 1733}, + dictWord{6, 11, 1724}, + dictWord{135, 11, 2022}, + dictWord{133, 0, 1006}, + dictWord{141, 11, 96}, + dictWord{ + 5, + 0, + 420, + }, + dictWord{135, 0, 1449}, + dictWord{146, 11, 149}, + dictWord{135, 0, 832}, + dictWord{135, 10, 663}, + dictWord{133, 0, 351}, + dictWord{5, 0, 40}, + dictWord{ + 7, + 0, + 598, + }, + dictWord{7, 0, 1638}, + dictWord{8, 0, 78}, + dictWord{9, 0, 166}, + dictWord{9, 0, 640}, + dictWord{9, 0, 685}, + dictWord{9, 0, 773}, + dictWord{11, 0, 215}, + dictWord{13, 0, 65}, + dictWord{14, 0, 172}, + dictWord{14, 0, 317}, + dictWord{145, 0, 6}, + dictWord{8, 0, 60}, + dictWord{9, 0, 343}, + dictWord{139, 0, 769}, + dictWord{ + 134, + 0, + 1354, + }, + dictWord{132, 0, 724}, + dictWord{137, 0, 745}, + dictWord{132, 11, 474}, + dictWord{7, 0, 1951}, + dictWord{8, 0, 765}, + dictWord{8, 0, 772}, + dictWord{ + 140, + 0, + 671, + }, + dictWord{7, 0, 108}, + dictWord{8, 0, 219}, + dictWord{8, 0, 388}, + dictWord{9, 0, 775}, + dictWord{11, 0, 275}, + dictWord{140, 0, 464}, + dictWord{137, 0, 639}, + dictWord{135, 10, 503}, + dictWord{133, 11, 366}, + dictWord{5, 0, 15}, + dictWord{6, 0, 56}, + dictWord{7, 0, 1758}, + dictWord{8, 0, 500}, + dictWord{9, 0, 730}, + dictWord{ + 11, + 0, + 331, + }, + dictWord{13, 0, 150}, + dictWord{14, 0, 282}, + dictWord{5, 11, 305}, + dictWord{9, 11, 560}, + dictWord{141, 11, 208}, + dictWord{4, 10, 113}, + dictWord{ + 5, + 10, + 163, + }, + dictWord{5, 10, 735}, + dictWord{7, 10, 1009}, + dictWord{9, 10, 9}, + dictWord{9, 10, 771}, + dictWord{12, 10, 90}, + dictWord{13, 10, 138}, + dictWord{ + 13, + 10, + 410, + }, + dictWord{143, 10, 128}, + dictWord{4, 10, 324}, + dictWord{138, 10, 104}, + dictWord{135, 11, 466}, + dictWord{142, 11, 27}, + dictWord{134, 0, 1886}, + dictWord{5, 0, 205}, + dictWord{6, 0, 438}, + dictWord{9, 0, 711}, + dictWord{4, 11, 480}, + dictWord{6, 11, 167}, + dictWord{6, 11, 302}, + dictWord{6, 11, 1642}, + dictWord{ + 7, + 11, + 130, + }, + dictWord{7, 11, 656}, + dictWord{7, 11, 837}, + dictWord{7, 11, 1547}, + dictWord{7, 11, 1657}, + dictWord{8, 11, 429}, + dictWord{9, 11, 228}, + dictWord{ + 10, + 11, + 643, + }, + dictWord{13, 11, 289}, + dictWord{13, 11, 343}, + dictWord{147, 11, 101}, + dictWord{134, 0, 865}, + dictWord{6, 0, 2025}, + dictWord{136, 0, 965}, + dictWord{ + 7, + 11, + 278, + }, + dictWord{10, 11, 739}, + dictWord{11, 11, 708}, + dictWord{141, 11, 348}, + dictWord{133, 0, 534}, + dictWord{135, 11, 1922}, + dictWord{ + 137, + 0, + 691, + }, + dictWord{4, 10, 935}, + dictWord{133, 10, 823}, + dictWord{6, 0, 443}, + dictWord{9, 0, 237}, + dictWord{9, 0, 571}, + dictWord{9, 0, 695}, + dictWord{10, 0, 139}, + dictWord{11, 0, 715}, + dictWord{12, 0, 417}, + dictWord{141, 0, 421}, + dictWord{5, 10, 269}, + dictWord{7, 10, 434}, + dictWord{7, 10, 891}, + dictWord{8, 10, 339}, + dictWord{ + 9, + 10, + 702, + }, + dictWord{11, 10, 594}, + dictWord{11, 10, 718}, + dictWord{145, 10, 100}, + dictWord{6, 0, 1555}, + dictWord{7, 0, 878}, + dictWord{9, 10, 485}, + dictWord{141, 10, 264}, + dictWord{134, 10, 1713}, + dictWord{7, 10, 1810}, + dictWord{11, 10, 866}, + dictWord{12, 10, 103}, + dictWord{141, 10, 495}, + dictWord{ + 135, + 10, + 900, + }, + dictWord{6, 0, 1410}, + dictWord{9, 11, 316}, + dictWord{139, 11, 256}, + dictWord{4, 0, 995}, + dictWord{135, 0, 1033}, + dictWord{132, 0, 578}, + dictWord{10, 0, 881}, + dictWord{12, 0, 740}, + dictWord{12, 0, 743}, + dictWord{140, 0, 759}, + dictWord{132, 0, 822}, + dictWord{133, 0, 923}, + dictWord{142, 10, 143}, + dictWord{135, 11, 1696}, + dictWord{6, 11, 363}, + dictWord{7, 11, 1955}, + dictWord{136, 11, 725}, + dictWord{132, 0, 924}, + dictWord{133, 0, 665}, + dictWord{ + 135, + 10, + 2029, + }, + dictWord{135, 0, 1901}, + dictWord{4, 0, 265}, + dictWord{6, 0, 1092}, + dictWord{6, 0, 1417}, + dictWord{7, 0, 807}, + dictWord{135, 0, 950}, + dictWord{ + 5, + 0, + 93, + }, + dictWord{12, 0, 267}, + dictWord{141, 0, 498}, + dictWord{135, 0, 1451}, + dictWord{5, 11, 813}, + dictWord{135, 11, 2046}, + dictWord{5, 10, 625}, + dictWord{135, 10, 1617}, + dictWord{135, 0, 747}, + dictWord{6, 0, 788}, + dictWord{137, 0, 828}, + dictWord{7, 0, 184}, + dictWord{11, 0, 307}, + dictWord{11, 0, 400}, + dictWord{15, 0, 130}, + dictWord{5, 11, 712}, + dictWord{7, 11, 1855}, + dictWord{8, 10, 425}, + dictWord{8, 10, 693}, + dictWord{9, 10, 720}, + dictWord{10, 10, 380}, + dictWord{10, 10, 638}, + dictWord{11, 11, 17}, + dictWord{11, 10, 473}, + dictWord{12, 10, 61}, + dictWord{13, 11, 321}, + dictWord{144, 11, 67}, + dictWord{135, 0, 198}, + dictWord{6, 11, 320}, + dictWord{7, 11, 781}, + dictWord{7, 11, 1921}, + dictWord{9, 11, 55}, + dictWord{10, 11, 186}, + dictWord{10, 11, 273}, + dictWord{10, 11, 664}, + dictWord{10, 11, 801}, + dictWord{11, 11, 996}, + dictWord{11, 11, 997}, + dictWord{13, 11, 157}, + dictWord{142, 11, 170}, + dictWord{136, 11, 271}, + dictWord{ + 135, + 0, + 994, + }, + dictWord{7, 11, 103}, + dictWord{7, 11, 863}, + dictWord{11, 11, 184}, + dictWord{14, 11, 299}, + dictWord{145, 11, 62}, + dictWord{11, 10, 551}, + dictWord{142, 10, 159}, + dictWord{5, 0, 233}, + dictWord{5, 0, 320}, + dictWord{6, 0, 140}, + dictWord{8, 0, 295}, + dictWord{8, 0, 615}, + dictWord{136, 11, 615}, + dictWord{ + 133, + 0, + 978, + }, + dictWord{4, 0, 905}, + dictWord{6, 0, 1701}, + dictWord{137, 0, 843}, + dictWord{132, 10, 168}, + dictWord{4, 0, 974}, + dictWord{8, 0, 850}, + dictWord{ + 12, + 0, + 709, + }, + dictWord{12, 0, 768}, + dictWord{140, 0, 786}, + dictWord{135, 10, 91}, + dictWord{152, 0, 6}, + dictWord{138, 10, 532}, + dictWord{135, 10, 1884}, + dictWord{132, 0, 509}, + dictWord{6, 0, 1307}, + dictWord{135, 0, 273}, + dictWord{5, 11, 77}, + dictWord{7, 11, 1455}, + dictWord{10, 11, 843}, + dictWord{19, 11, 73}, + dictWord{150, 11, 5}, + dictWord{132, 11, 458}, + dictWord{135, 11, 1420}, + dictWord{6, 11, 109}, + dictWord{138, 11, 382}, + dictWord{6, 0, 201}, + dictWord{6, 11, 330}, + dictWord{7, 10, 70}, + dictWord{7, 11, 1084}, + dictWord{10, 10, 240}, + dictWord{11, 11, 142}, + dictWord{147, 10, 93}, + dictWord{7, 0, 1041}, + dictWord{ + 140, + 11, + 328, + }, + dictWord{133, 11, 354}, + dictWord{134, 0, 1040}, + dictWord{133, 0, 693}, + dictWord{134, 0, 774}, + dictWord{139, 0, 234}, + dictWord{132, 0, 336}, + dictWord{7, 0, 1399}, + dictWord{139, 10, 392}, + dictWord{20, 0, 22}, + dictWord{148, 11, 22}, + dictWord{5, 0, 802}, + dictWord{7, 0, 2021}, + dictWord{136, 0, 805}, + dictWord{ + 5, + 0, + 167, + }, + dictWord{5, 0, 899}, + dictWord{6, 0, 410}, + dictWord{137, 0, 777}, + dictWord{137, 0, 789}, + dictWord{134, 0, 1705}, + dictWord{7, 10, 655}, + dictWord{ + 135, + 10, + 1844, + }, + dictWord{4, 10, 145}, + dictWord{6, 10, 176}, + dictWord{7, 10, 395}, + dictWord{137, 10, 562}, + dictWord{132, 10, 501}, + dictWord{135, 0, 10}, + dictWord{5, 0, 11}, + dictWord{6, 0, 117}, + dictWord{6, 0, 485}, + dictWord{7, 0, 1133}, + dictWord{9, 0, 582}, + dictWord{9, 0, 594}, + dictWord{10, 0, 82}, + dictWord{11, 0, 21}, + dictWord{11, 0, 818}, + dictWord{12, 0, 535}, + dictWord{13, 0, 86}, + dictWord{20, 0, 91}, + dictWord{23, 0, 13}, + dictWord{134, 10, 509}, + dictWord{4, 0, 264}, + dictWord{ + 7, + 0, + 1067, + }, + dictWord{8, 0, 204}, + dictWord{8, 0, 385}, + dictWord{139, 0, 953}, + dictWord{139, 11, 737}, + dictWord{138, 0, 56}, + dictWord{134, 0, 1917}, + dictWord{ + 133, + 0, + 470, + }, + dictWord{10, 11, 657}, + dictWord{14, 11, 297}, + dictWord{142, 11, 361}, + dictWord{135, 11, 412}, + dictWord{7, 0, 1198}, + dictWord{7, 11, 1198}, + dictWord{8, 11, 556}, + dictWord{14, 11, 123}, + dictWord{14, 11, 192}, + dictWord{143, 11, 27}, + dictWord{7, 11, 1985}, + dictWord{14, 11, 146}, + dictWord{15, 11, 42}, + dictWord{16, 11, 23}, + dictWord{17, 11, 86}, + dictWord{146, 11, 17}, + dictWord{11, 0, 1015}, + dictWord{136, 11, 122}, + dictWord{4, 10, 114}, + dictWord{ + 9, + 10, + 492, + }, + dictWord{13, 10, 462}, + dictWord{142, 10, 215}, + dictWord{4, 10, 77}, + dictWord{5, 10, 361}, + dictWord{6, 10, 139}, + dictWord{6, 10, 401}, + dictWord{ + 6, + 10, + 404, + }, + dictWord{7, 10, 413}, + dictWord{7, 10, 715}, + dictWord{7, 10, 1716}, + dictWord{11, 10, 279}, + dictWord{12, 10, 179}, + dictWord{12, 10, 258}, + dictWord{ + 13, + 10, + 244, + }, + dictWord{142, 10, 358}, + dictWord{134, 10, 1717}, + dictWord{7, 10, 1061}, + dictWord{8, 10, 82}, + dictWord{11, 10, 250}, + dictWord{12, 10, 420}, + dictWord{141, 10, 184}, + dictWord{133, 0, 715}, + dictWord{135, 10, 724}, + dictWord{9, 0, 919}, + dictWord{9, 0, 922}, + dictWord{9, 0, 927}, + dictWord{9, 0, 933}, + dictWord{9, 0, 962}, + dictWord{9, 0, 1000}, + dictWord{9, 0, 1002}, + dictWord{9, 0, 1021}, + dictWord{12, 0, 890}, + dictWord{12, 0, 907}, + dictWord{12, 0, 930}, + dictWord{ + 15, + 0, + 207, + }, + dictWord{15, 0, 228}, + dictWord{15, 0, 238}, + dictWord{149, 0, 61}, + dictWord{8, 0, 794}, + dictWord{9, 0, 400}, + dictWord{10, 0, 298}, + dictWord{142, 0, 228}, + dictWord{5, 11, 430}, + dictWord{5, 11, 932}, + dictWord{6, 11, 131}, + dictWord{7, 11, 417}, + dictWord{9, 11, 522}, + dictWord{11, 11, 314}, + dictWord{141, 11, 390}, + dictWord{132, 0, 867}, + dictWord{8, 0, 724}, + dictWord{132, 11, 507}, + dictWord{137, 11, 261}, + dictWord{4, 11, 343}, + dictWord{133, 11, 511}, + dictWord{ + 6, + 0, + 190, + }, + dictWord{7, 0, 768}, + dictWord{135, 0, 1170}, + dictWord{6, 10, 513}, + dictWord{135, 10, 1052}, + dictWord{7, 11, 455}, + dictWord{138, 11, 591}, + dictWord{134, 0, 1066}, + dictWord{137, 10, 899}, + dictWord{14, 0, 67}, + dictWord{147, 0, 60}, + dictWord{4, 0, 948}, + dictWord{18, 0, 174}, + dictWord{146, 0, 176}, + dictWord{135, 0, 1023}, + dictWord{7, 10, 1417}, + dictWord{12, 10, 382}, + dictWord{17, 10, 48}, + dictWord{152, 10, 12}, + dictWord{134, 11, 575}, + dictWord{ + 132, + 0, + 764, + }, + dictWord{6, 10, 545}, + dictWord{7, 10, 565}, + dictWord{7, 10, 1669}, + dictWord{10, 10, 114}, + dictWord{11, 10, 642}, + dictWord{140, 10, 618}, + dictWord{ + 6, + 0, + 137, + }, + dictWord{9, 0, 75}, + dictWord{9, 0, 253}, + dictWord{10, 0, 194}, + dictWord{138, 0, 444}, + dictWord{4, 0, 756}, + dictWord{133, 10, 5}, + dictWord{8, 0, 1008}, + dictWord{135, 10, 192}, + dictWord{132, 0, 842}, + dictWord{11, 0, 643}, + dictWord{12, 0, 115}, + dictWord{136, 10, 763}, + dictWord{139, 0, 67}, + dictWord{ + 133, + 10, + 759, + }, + dictWord{4, 0, 821}, + dictWord{5, 0, 760}, + dictWord{7, 0, 542}, + dictWord{8, 0, 135}, + dictWord{8, 0, 496}, + dictWord{135, 11, 580}, + dictWord{7, 10, 370}, + dictWord{7, 10, 1007}, + dictWord{7, 10, 1177}, + dictWord{135, 10, 1565}, + dictWord{135, 10, 1237}, + dictWord{140, 0, 736}, + dictWord{7, 0, 319}, + dictWord{ + 7, + 0, + 355, + }, + dictWord{7, 0, 763}, + dictWord{10, 0, 389}, + dictWord{145, 0, 43}, + dictWord{8, 11, 333}, + dictWord{138, 11, 182}, + dictWord{4, 10, 87}, + dictWord{5, 10, 250}, + dictWord{141, 10, 298}, + dictWord{138, 0, 786}, + dictWord{134, 0, 2044}, + dictWord{8, 11, 330}, + dictWord{140, 11, 477}, + dictWord{135, 11, 1338}, + dictWord{132, 11, 125}, + dictWord{134, 0, 1030}, + dictWord{134, 0, 1083}, + dictWord{132, 11, 721}, + dictWord{135, 10, 814}, + dictWord{7, 11, 776}, + dictWord{ + 8, + 11, + 145, + }, + dictWord{147, 11, 56}, + dictWord{134, 0, 1226}, + dictWord{4, 10, 57}, + dictWord{7, 10, 1195}, + dictWord{7, 10, 1438}, + dictWord{7, 10, 1548}, + dictWord{ + 7, + 10, + 1835, + }, + dictWord{7, 10, 1904}, + dictWord{9, 10, 757}, + dictWord{10, 10, 604}, + dictWord{139, 10, 519}, + dictWord{7, 11, 792}, + dictWord{8, 11, 147}, + dictWord{10, 11, 821}, + dictWord{139, 11, 1021}, + dictWord{137, 11, 797}, + dictWord{4, 0, 58}, + dictWord{5, 0, 286}, + dictWord{6, 0, 319}, + dictWord{7, 0, 402}, + dictWord{ + 7, + 0, + 1254, + }, + dictWord{7, 0, 1903}, + dictWord{8, 0, 356}, + dictWord{140, 0, 408}, + dictWord{4, 0, 389}, + dictWord{4, 0, 815}, + dictWord{9, 0, 181}, + dictWord{9, 0, 255}, + dictWord{10, 0, 8}, + dictWord{10, 0, 29}, + dictWord{10, 0, 816}, + dictWord{11, 0, 311}, + dictWord{11, 0, 561}, + dictWord{12, 0, 67}, + dictWord{141, 0, 181}, + dictWord{ + 7, + 11, + 1472, + }, + dictWord{135, 11, 1554}, + dictWord{7, 11, 1071}, + dictWord{7, 11, 1541}, + dictWord{7, 11, 1767}, + dictWord{7, 11, 1806}, + dictWord{7, 11, 1999}, + dictWord{9, 11, 248}, + dictWord{10, 11, 400}, + dictWord{11, 11, 162}, + dictWord{11, 11, 178}, + dictWord{11, 11, 242}, + dictWord{12, 11, 605}, + dictWord{ + 15, + 11, + 26, + }, + dictWord{144, 11, 44}, + dictWord{5, 11, 168}, + dictWord{5, 11, 930}, + dictWord{8, 11, 74}, + dictWord{9, 11, 623}, + dictWord{12, 11, 500}, + dictWord{ + 12, + 11, + 579, + }, + dictWord{13, 11, 41}, + dictWord{143, 11, 93}, + dictWord{6, 11, 220}, + dictWord{7, 11, 1101}, + dictWord{141, 11, 105}, + dictWord{5, 0, 474}, + dictWord{ + 7, + 0, + 507, + }, + dictWord{4, 10, 209}, + dictWord{7, 11, 507}, + dictWord{135, 10, 902}, + dictWord{132, 0, 427}, + dictWord{6, 0, 413}, + dictWord{7, 10, 335}, + dictWord{ + 7, + 10, + 1437, + }, + dictWord{7, 10, 1668}, + dictWord{8, 10, 553}, + dictWord{8, 10, 652}, + dictWord{8, 10, 656}, + dictWord{9, 10, 558}, + dictWord{11, 10, 743}, + dictWord{ + 149, + 10, + 18, + }, + dictWord{132, 0, 730}, + dictWord{6, 11, 19}, + dictWord{7, 11, 1413}, + dictWord{139, 11, 428}, + dictWord{133, 0, 373}, + dictWord{132, 10, 559}, + dictWord{7, 11, 96}, + dictWord{8, 11, 401}, + dictWord{137, 11, 896}, + dictWord{7, 0, 799}, + dictWord{7, 0, 1972}, + dictWord{5, 10, 1017}, + dictWord{138, 10, 511}, + dictWord{135, 0, 1793}, + dictWord{7, 11, 1961}, + dictWord{7, 11, 1965}, + dictWord{8, 11, 702}, + dictWord{136, 11, 750}, + dictWord{8, 11, 150}, + dictWord{8, 11, 737}, + dictWord{140, 11, 366}, + dictWord{132, 0, 322}, + dictWord{133, 10, 709}, + dictWord{8, 11, 800}, + dictWord{9, 11, 148}, + dictWord{9, 11, 872}, + dictWord{ + 9, + 11, + 890, + }, + dictWord{11, 11, 309}, + dictWord{11, 11, 1001}, + dictWord{13, 11, 267}, + dictWord{141, 11, 323}, + dictWord{134, 10, 1745}, + dictWord{7, 0, 290}, + dictWord{136, 10, 206}, + dictWord{7, 0, 1651}, + dictWord{145, 0, 89}, + dictWord{139, 0, 2}, + dictWord{132, 0, 672}, + dictWord{6, 0, 1860}, + dictWord{8, 0, 905}, + dictWord{ + 10, + 0, + 844, + }, + dictWord{10, 0, 846}, + dictWord{10, 0, 858}, + dictWord{12, 0, 699}, + dictWord{12, 0, 746}, + dictWord{140, 0, 772}, + dictWord{135, 11, 424}, + dictWord{133, 11, 547}, + dictWord{133, 0, 737}, + dictWord{5, 11, 490}, + dictWord{6, 11, 615}, + dictWord{6, 11, 620}, + dictWord{135, 11, 683}, + dictWord{6, 0, 746}, + dictWord{134, 0, 1612}, + dictWord{132, 10, 776}, + dictWord{9, 11, 385}, + dictWord{149, 11, 17}, + dictWord{133, 0, 145}, + dictWord{135, 10, 1272}, + dictWord{ + 7, + 0, + 884, + }, + dictWord{140, 0, 124}, + dictWord{4, 0, 387}, + dictWord{135, 0, 1288}, + dictWord{5, 11, 133}, + dictWord{136, 10, 406}, + dictWord{136, 11, 187}, + dictWord{ + 6, + 0, + 679, + }, + dictWord{8, 11, 8}, + dictWord{138, 11, 0}, + dictWord{135, 0, 550}, + dictWord{135, 11, 798}, + dictWord{136, 11, 685}, + dictWord{7, 11, 1086}, + dictWord{145, 11, 46}, + dictWord{8, 10, 175}, + dictWord{10, 10, 168}, + dictWord{138, 10, 573}, + dictWord{135, 0, 1305}, + dictWord{4, 0, 576}, + dictWord{ + 135, + 0, + 1263, + }, + dictWord{6, 0, 686}, + dictWord{134, 0, 1563}, + dictWord{134, 0, 607}, + dictWord{5, 0, 919}, + dictWord{134, 0, 1673}, + dictWord{148, 0, 37}, + dictWord{ + 8, + 11, + 774, + }, + dictWord{10, 11, 670}, + dictWord{140, 11, 51}, + dictWord{133, 10, 784}, + dictWord{139, 10, 882}, + dictWord{4, 0, 82}, + dictWord{5, 0, 333}, + dictWord{ + 5, + 0, + 904, + }, + dictWord{6, 0, 207}, + dictWord{7, 0, 325}, + dictWord{7, 0, 1726}, + dictWord{8, 0, 101}, + dictWord{10, 0, 778}, + dictWord{139, 0, 220}, + dictWord{135, 11, 371}, + dictWord{132, 0, 958}, + dictWord{133, 0, 903}, + dictWord{4, 11, 127}, + dictWord{5, 11, 350}, + dictWord{6, 11, 356}, + dictWord{8, 11, 426}, + dictWord{9, 11, 572}, + dictWord{10, 11, 247}, + dictWord{139, 11, 312}, + dictWord{140, 0, 147}, + dictWord{6, 11, 59}, + dictWord{7, 11, 885}, + dictWord{9, 11, 603}, + dictWord{ + 141, + 11, + 397, + }, + dictWord{10, 0, 367}, + dictWord{9, 10, 14}, + dictWord{9, 10, 441}, + dictWord{139, 10, 9}, + dictWord{11, 10, 966}, + dictWord{12, 10, 287}, + dictWord{ + 13, + 10, + 342, + }, + dictWord{13, 10, 402}, + dictWord{15, 10, 110}, + dictWord{143, 10, 163}, + dictWord{134, 0, 690}, + dictWord{132, 0, 705}, + dictWord{9, 0, 651}, + dictWord{ + 11, + 0, + 971, + }, + dictWord{13, 0, 273}, + dictWord{7, 10, 1428}, + dictWord{7, 10, 1640}, + dictWord{7, 10, 1867}, + dictWord{9, 10, 169}, + dictWord{9, 10, 182}, + dictWord{ + 9, + 10, + 367, + }, + dictWord{9, 10, 478}, + dictWord{9, 10, 506}, + dictWord{9, 10, 551}, + dictWord{9, 10, 557}, + dictWord{9, 10, 648}, + dictWord{9, 10, 697}, + dictWord{ + 9, + 10, + 705, + }, + dictWord{9, 10, 725}, + dictWord{9, 10, 787}, + dictWord{9, 10, 794}, + dictWord{10, 10, 198}, + dictWord{10, 10, 214}, + dictWord{10, 10, 267}, + dictWord{ + 10, + 10, + 275, + }, + dictWord{10, 10, 456}, + dictWord{10, 10, 551}, + dictWord{10, 10, 561}, + dictWord{10, 10, 613}, + dictWord{10, 10, 627}, + dictWord{10, 10, 668}, + dictWord{10, 10, 675}, + dictWord{10, 10, 691}, + dictWord{10, 10, 695}, + dictWord{10, 10, 707}, + dictWord{10, 10, 715}, + dictWord{11, 10, 183}, + dictWord{ + 11, + 10, + 201, + }, + dictWord{11, 10, 262}, + dictWord{11, 10, 352}, + dictWord{11, 10, 439}, + dictWord{11, 10, 493}, + dictWord{11, 10, 572}, + dictWord{11, 10, 591}, + dictWord{ + 11, + 10, + 608, + }, + dictWord{11, 10, 611}, + dictWord{11, 10, 646}, + dictWord{11, 10, 674}, + dictWord{11, 10, 711}, + dictWord{11, 10, 751}, + dictWord{11, 10, 761}, + dictWord{11, 10, 776}, + dictWord{11, 10, 785}, + dictWord{11, 10, 850}, + dictWord{11, 10, 853}, + dictWord{11, 10, 862}, + dictWord{11, 10, 865}, + dictWord{ + 11, + 10, + 868, + }, + dictWord{11, 10, 875}, + dictWord{11, 10, 898}, + dictWord{11, 10, 902}, + dictWord{11, 10, 903}, + dictWord{11, 10, 910}, + dictWord{11, 10, 932}, + dictWord{ + 11, + 10, + 942, + }, + dictWord{11, 10, 957}, + dictWord{11, 10, 967}, + dictWord{11, 10, 972}, + dictWord{12, 10, 148}, + dictWord{12, 10, 195}, + dictWord{12, 10, 220}, + dictWord{12, 10, 237}, + dictWord{12, 10, 318}, + dictWord{12, 10, 339}, + dictWord{12, 10, 393}, + dictWord{12, 10, 445}, + dictWord{12, 10, 450}, + dictWord{ + 12, + 10, + 474, + }, + dictWord{12, 10, 505}, + dictWord{12, 10, 509}, + dictWord{12, 10, 533}, + dictWord{12, 10, 591}, + dictWord{12, 10, 594}, + dictWord{12, 10, 597}, + dictWord{ + 12, + 10, + 621, + }, + dictWord{12, 10, 633}, + dictWord{12, 10, 642}, + dictWord{13, 10, 59}, + dictWord{13, 10, 60}, + dictWord{13, 10, 145}, + dictWord{13, 10, 239}, + dictWord{13, 10, 250}, + dictWord{13, 10, 329}, + dictWord{13, 10, 344}, + dictWord{13, 10, 365}, + dictWord{13, 10, 372}, + dictWord{13, 10, 387}, + dictWord{ + 13, + 10, + 403, + }, + dictWord{13, 10, 414}, + dictWord{13, 10, 456}, + dictWord{13, 10, 470}, + dictWord{13, 10, 478}, + dictWord{13, 10, 483}, + dictWord{13, 10, 489}, + dictWord{ + 14, + 10, + 55, + }, + dictWord{14, 10, 57}, + dictWord{14, 10, 81}, + dictWord{14, 10, 90}, + dictWord{14, 10, 148}, + dictWord{14, 10, 239}, + dictWord{14, 10, 266}, + dictWord{ + 14, + 10, + 321, + }, + dictWord{14, 10, 326}, + dictWord{14, 10, 327}, + dictWord{14, 10, 330}, + dictWord{14, 10, 347}, + dictWord{14, 10, 355}, + dictWord{14, 10, 401}, + dictWord{14, 10, 404}, + dictWord{14, 10, 411}, + dictWord{14, 10, 414}, + dictWord{14, 10, 416}, + dictWord{14, 10, 420}, + dictWord{15, 10, 61}, + dictWord{ + 15, + 10, + 74, + }, + dictWord{15, 10, 87}, + dictWord{15, 10, 88}, + dictWord{15, 10, 94}, + dictWord{15, 10, 96}, + dictWord{15, 10, 116}, + dictWord{15, 10, 149}, + dictWord{ + 15, + 10, + 154, + }, + dictWord{16, 10, 50}, + dictWord{16, 10, 63}, + dictWord{16, 10, 73}, + dictWord{17, 10, 2}, + dictWord{17, 10, 66}, + dictWord{17, 10, 92}, + dictWord{17, 10, 103}, + dictWord{17, 10, 112}, + dictWord{17, 10, 120}, + dictWord{18, 10, 50}, + dictWord{18, 10, 54}, + dictWord{18, 10, 82}, + dictWord{18, 10, 86}, + dictWord{18, 10, 90}, + dictWord{18, 10, 111}, + dictWord{18, 10, 115}, + dictWord{18, 10, 156}, + dictWord{19, 10, 40}, + dictWord{19, 10, 79}, + dictWord{20, 10, 78}, + dictWord{149, 10, 22}, + dictWord{7, 0, 887}, + dictWord{5, 10, 161}, + dictWord{135, 10, 839}, + dictWord{142, 11, 98}, + dictWord{134, 0, 90}, + dictWord{138, 11, 356}, + dictWord{ + 135, + 11, + 441, + }, + dictWord{6, 11, 111}, + dictWord{7, 11, 4}, + dictWord{8, 11, 163}, + dictWord{8, 11, 776}, + dictWord{138, 11, 566}, + dictWord{134, 0, 908}, + dictWord{ + 134, + 0, + 1261, + }, + dictWord{7, 0, 813}, + dictWord{12, 0, 497}, + dictWord{141, 0, 56}, + dictWord{134, 0, 1235}, + dictWord{135, 0, 429}, + dictWord{135, 11, 1994}, + dictWord{138, 0, 904}, + dictWord{6, 0, 125}, + dictWord{7, 0, 1277}, + dictWord{137, 0, 772}, + dictWord{151, 0, 12}, + dictWord{4, 0, 841}, + dictWord{5, 0, 386}, + dictWord{ + 133, + 11, + 386, + }, + dictWord{5, 11, 297}, + dictWord{135, 11, 1038}, + dictWord{6, 0, 860}, + dictWord{6, 0, 1069}, + dictWord{135, 11, 309}, + dictWord{136, 0, 946}, + dictWord{135, 10, 1814}, + dictWord{141, 11, 418}, + dictWord{136, 11, 363}, + dictWord{10, 0, 768}, + dictWord{139, 0, 787}, + dictWord{22, 11, 30}, + dictWord{ + 150, + 11, + 33, + }, + dictWord{6, 0, 160}, + dictWord{7, 0, 1106}, + dictWord{9, 0, 770}, + dictWord{11, 0, 112}, + dictWord{140, 0, 413}, + dictWord{11, 11, 216}, + dictWord{ + 139, + 11, + 340, + }, + dictWord{136, 10, 139}, + dictWord{135, 11, 1390}, + dictWord{135, 11, 808}, + dictWord{132, 11, 280}, + dictWord{12, 0, 271}, + dictWord{17, 0, 109}, + dictWord{7, 10, 643}, + dictWord{136, 10, 236}, + dictWord{140, 11, 54}, + dictWord{4, 11, 421}, + dictWord{133, 11, 548}, + dictWord{11, 0, 719}, + dictWord{12, 0, 36}, + dictWord{141, 0, 337}, + dictWord{7, 0, 581}, + dictWord{9, 0, 644}, + dictWord{137, 0, 699}, + dictWord{11, 11, 511}, + dictWord{13, 11, 394}, + dictWord{14, 11, 298}, + dictWord{14, 11, 318}, + dictWord{146, 11, 103}, + dictWord{7, 0, 304}, + dictWord{9, 0, 646}, + dictWord{9, 0, 862}, + dictWord{11, 0, 696}, + dictWord{12, 0, 208}, + dictWord{15, 0, 79}, + dictWord{147, 0, 108}, + dictWord{4, 0, 631}, + dictWord{7, 0, 1126}, + dictWord{135, 0, 1536}, + dictWord{135, 11, 1527}, + dictWord{8, 0, 880}, + dictWord{10, 0, 869}, + dictWord{138, 0, 913}, + dictWord{7, 0, 1513}, + dictWord{5, 10, 54}, + dictWord{6, 11, 254}, + dictWord{9, 11, 109}, + dictWord{138, 11, 103}, + dictWord{135, 0, 981}, + dictWord{133, 11, 729}, + dictWord{132, 10, 744}, + dictWord{132, 0, 434}, + dictWord{134, 0, 550}, + dictWord{7, 0, 930}, + dictWord{10, 0, 476}, + dictWord{13, 0, 452}, + dictWord{19, 0, 104}, + dictWord{6, 11, 1630}, + dictWord{10, 10, 402}, + dictWord{146, 10, 55}, + dictWord{5, 0, 553}, + dictWord{138, 0, 824}, + dictWord{136, 0, 452}, + dictWord{8, 0, 151}, + dictWord{137, 10, 624}, + dictWord{132, 10, 572}, + dictWord{132, 0, 772}, + dictWord{133, 11, 671}, + dictWord{ + 133, + 0, + 292, + }, + dictWord{138, 0, 135}, + dictWord{132, 11, 889}, + dictWord{140, 11, 207}, + dictWord{9, 0, 504}, + dictWord{6, 10, 43}, + dictWord{7, 10, 38}, + dictWord{ + 8, + 10, + 248, + }, + dictWord{138, 10, 513}, + dictWord{6, 0, 1089}, + dictWord{135, 11, 1910}, + dictWord{4, 11, 627}, + dictWord{133, 11, 775}, + dictWord{135, 0, 783}, + dictWord{133, 10, 766}, + dictWord{133, 10, 363}, + dictWord{7, 0, 387}, + dictWord{135, 11, 387}, + dictWord{7, 0, 393}, + dictWord{10, 0, 603}, + dictWord{11, 0, 206}, + dictWord{7, 11, 202}, + dictWord{11, 11, 362}, + dictWord{11, 11, 948}, + dictWord{140, 11, 388}, + dictWord{6, 11, 507}, + dictWord{7, 11, 451}, + dictWord{8, 11, 389}, + dictWord{12, 11, 490}, + dictWord{13, 11, 16}, + dictWord{13, 11, 215}, + dictWord{13, 11, 351}, + dictWord{18, 11, 132}, + dictWord{147, 11, 125}, + dictWord{ + 4, + 0, + 912, + }, + dictWord{9, 0, 232}, + dictWord{135, 11, 841}, + dictWord{6, 10, 258}, + dictWord{140, 10, 409}, + dictWord{5, 10, 249}, + dictWord{148, 10, 82}, + dictWord{ + 136, + 11, + 566, + }, + dictWord{6, 0, 977}, + dictWord{135, 11, 1214}, + dictWord{7, 0, 1973}, + dictWord{136, 0, 716}, + dictWord{135, 0, 98}, + dictWord{133, 0, 733}, + dictWord{ + 5, + 11, + 912, + }, + dictWord{134, 11, 1695}, + dictWord{5, 10, 393}, + dictWord{6, 10, 378}, + dictWord{7, 10, 1981}, + dictWord{9, 10, 32}, + dictWord{9, 10, 591}, + dictWord{10, 10, 685}, + dictWord{10, 10, 741}, + dictWord{142, 10, 382}, + dictWord{133, 10, 788}, + dictWord{10, 0, 19}, + dictWord{11, 0, 911}, + dictWord{7, 10, 1968}, + dictWord{141, 10, 509}, + dictWord{5, 0, 668}, + dictWord{5, 11, 236}, + dictWord{6, 11, 572}, + dictWord{8, 11, 492}, + dictWord{11, 11, 618}, + dictWord{144, 11, 56}, + dictWord{135, 11, 1789}, + dictWord{4, 0, 360}, + dictWord{5, 0, 635}, + dictWord{5, 0, 700}, + dictWord{5, 10, 58}, + dictWord{5, 10, 171}, + dictWord{5, 10, 683}, + dictWord{ + 6, + 10, + 291, + }, + dictWord{6, 10, 566}, + dictWord{7, 10, 1650}, + dictWord{11, 10, 523}, + dictWord{12, 10, 273}, + dictWord{12, 10, 303}, + dictWord{15, 10, 39}, + dictWord{143, 10, 111}, + dictWord{133, 0, 901}, + dictWord{134, 10, 589}, + dictWord{5, 11, 190}, + dictWord{136, 11, 318}, + dictWord{140, 0, 656}, + dictWord{ + 7, + 0, + 726, + }, + dictWord{152, 0, 9}, + dictWord{4, 10, 917}, + dictWord{133, 10, 1005}, + dictWord{135, 10, 1598}, + dictWord{134, 11, 491}, + dictWord{4, 10, 919}, + dictWord{133, 11, 434}, + dictWord{137, 0, 72}, + dictWord{6, 0, 1269}, + dictWord{6, 0, 1566}, + dictWord{134, 0, 1621}, + dictWord{9, 0, 463}, + dictWord{10, 0, 595}, + dictWord{4, 10, 255}, + dictWord{5, 10, 302}, + dictWord{6, 10, 132}, + dictWord{7, 10, 128}, + dictWord{7, 10, 283}, + dictWord{7, 10, 1299}, + dictWord{10, 10, 52}, + dictWord{ + 10, + 10, + 514, + }, + dictWord{11, 10, 925}, + dictWord{13, 10, 92}, + dictWord{142, 10, 309}, + dictWord{135, 0, 1454}, + dictWord{134, 0, 1287}, + dictWord{11, 0, 600}, + dictWord{13, 0, 245}, + dictWord{137, 10, 173}, + dictWord{136, 0, 989}, + dictWord{7, 0, 164}, + dictWord{7, 0, 1571}, + dictWord{9, 0, 107}, + dictWord{140, 0, 225}, + dictWord{6, 0, 1061}, + dictWord{141, 10, 442}, + dictWord{4, 0, 27}, + dictWord{5, 0, 484}, + dictWord{5, 0, 510}, + dictWord{6, 0, 434}, + dictWord{7, 0, 1000}, + dictWord{ + 7, + 0, + 1098, + }, + dictWord{136, 0, 2}, + dictWord{7, 11, 85}, + dictWord{7, 11, 247}, + dictWord{8, 11, 585}, + dictWord{10, 11, 163}, + dictWord{138, 11, 316}, + dictWord{ + 11, + 11, + 103, + }, + dictWord{142, 11, 0}, + dictWord{134, 0, 1127}, + dictWord{4, 0, 460}, + dictWord{134, 0, 852}, + dictWord{134, 10, 210}, + dictWord{4, 0, 932}, + dictWord{ + 133, + 0, + 891, + }, + dictWord{6, 0, 588}, + dictWord{147, 11, 83}, + dictWord{8, 0, 625}, + dictWord{4, 10, 284}, + dictWord{134, 10, 223}, + dictWord{134, 0, 76}, + dictWord{8, 0, 92}, + dictWord{137, 0, 221}, + dictWord{4, 11, 124}, + dictWord{10, 11, 457}, + dictWord{11, 11, 121}, + dictWord{11, 11, 169}, + dictWord{11, 11, 422}, + dictWord{ + 11, + 11, + 870, + }, + dictWord{12, 11, 214}, + dictWord{13, 11, 389}, + dictWord{14, 11, 187}, + dictWord{143, 11, 77}, + dictWord{9, 11, 618}, + dictWord{138, 11, 482}, + dictWord{ + 4, + 10, + 218, + }, + dictWord{7, 10, 526}, + dictWord{143, 10, 137}, + dictWord{13, 0, 9}, + dictWord{14, 0, 104}, + dictWord{14, 0, 311}, + dictWord{4, 10, 270}, + dictWord{ + 5, + 10, + 192, + }, + dictWord{6, 10, 332}, + dictWord{135, 10, 1322}, + dictWord{140, 10, 661}, + dictWord{135, 11, 1193}, + dictWord{6, 11, 107}, + dictWord{7, 11, 638}, + dictWord{7, 11, 1632}, + dictWord{137, 11, 396}, + dictWord{132, 0, 763}, + dictWord{4, 0, 622}, + dictWord{5, 11, 370}, + dictWord{134, 11, 1756}, + dictWord{ + 133, + 0, + 253, + }, + dictWord{135, 0, 546}, + dictWord{9, 0, 73}, + dictWord{10, 0, 110}, + dictWord{14, 0, 185}, + dictWord{17, 0, 119}, + dictWord{133, 11, 204}, + dictWord{7, 0, 624}, + dictWord{7, 0, 916}, + dictWord{10, 0, 256}, + dictWord{139, 0, 87}, + dictWord{7, 10, 379}, + dictWord{8, 10, 481}, + dictWord{137, 10, 377}, + dictWord{5, 0, 212}, + dictWord{12, 0, 35}, + dictWord{13, 0, 382}, + dictWord{5, 11, 970}, + dictWord{134, 11, 1706}, + dictWord{9, 0, 746}, + dictWord{5, 10, 1003}, + dictWord{134, 10, 149}, + dictWord{10, 0, 150}, + dictWord{11, 0, 849}, + dictWord{13, 0, 330}, + dictWord{8, 10, 262}, + dictWord{9, 10, 627}, + dictWord{11, 10, 214}, + dictWord{11, 10, 404}, + dictWord{11, 10, 457}, + dictWord{11, 10, 780}, + dictWord{11, 10, 913}, + dictWord{13, 10, 401}, + dictWord{142, 10, 200}, + dictWord{134, 0, 1466}, + dictWord{ + 135, + 11, + 3, + }, + dictWord{6, 0, 1299}, + dictWord{4, 11, 35}, + dictWord{5, 11, 121}, + dictWord{5, 11, 483}, + dictWord{5, 11, 685}, + dictWord{6, 11, 489}, + dictWord{7, 11, 1204}, + dictWord{136, 11, 394}, + dictWord{135, 10, 742}, + dictWord{4, 10, 142}, + dictWord{136, 10, 304}, + dictWord{4, 11, 921}, + dictWord{133, 11, 1007}, + dictWord{ + 134, + 0, + 1518, + }, + dictWord{6, 0, 1229}, + dictWord{135, 0, 1175}, + dictWord{133, 0, 816}, + dictWord{12, 0, 159}, + dictWord{4, 10, 471}, + dictWord{4, 11, 712}, + dictWord{ + 5, + 10, + 51, + }, + dictWord{6, 10, 602}, + dictWord{7, 10, 925}, + dictWord{8, 10, 484}, + dictWord{138, 10, 195}, + dictWord{134, 11, 1629}, + dictWord{5, 0, 869}, + dictWord{ + 5, + 0, + 968, + }, + dictWord{6, 0, 1626}, + dictWord{8, 0, 734}, + dictWord{136, 0, 784}, + dictWord{4, 0, 542}, + dictWord{6, 0, 1716}, + dictWord{6, 0, 1727}, + dictWord{ + 7, + 0, + 1082, + }, + dictWord{7, 0, 1545}, + dictWord{8, 0, 56}, + dictWord{8, 0, 118}, + dictWord{8, 0, 412}, + dictWord{8, 0, 564}, + dictWord{9, 0, 888}, + dictWord{9, 0, 908}, + dictWord{ + 10, + 0, + 50, + }, + dictWord{10, 0, 423}, + dictWord{11, 0, 685}, + dictWord{11, 0, 697}, + dictWord{11, 0, 933}, + dictWord{12, 0, 299}, + dictWord{13, 0, 126}, + dictWord{ + 13, + 0, + 136, + }, + dictWord{13, 0, 170}, + dictWord{13, 0, 190}, + dictWord{136, 10, 688}, + dictWord{132, 10, 697}, + dictWord{4, 0, 232}, + dictWord{9, 0, 202}, + dictWord{ + 10, + 0, + 474, + }, + dictWord{140, 0, 433}, + dictWord{136, 0, 212}, + dictWord{6, 0, 108}, + dictWord{7, 0, 1003}, + dictWord{7, 0, 1181}, + dictWord{8, 0, 111}, + dictWord{ + 136, + 0, + 343, + }, + dictWord{5, 10, 221}, + dictWord{135, 11, 1255}, + dictWord{133, 11, 485}, + dictWord{134, 0, 1712}, + dictWord{142, 0, 216}, + dictWord{5, 0, 643}, + dictWord{ + 6, + 0, + 516, + }, + dictWord{4, 11, 285}, + dictWord{5, 11, 317}, + dictWord{6, 11, 301}, + dictWord{7, 11, 7}, + dictWord{8, 11, 153}, + dictWord{10, 11, 766}, + dictWord{ + 11, + 11, + 468, + }, + dictWord{12, 11, 467}, + dictWord{141, 11, 143}, + dictWord{4, 0, 133}, + dictWord{7, 0, 711}, + dictWord{7, 0, 1298}, + dictWord{135, 0, 1585}, + dictWord{ + 134, + 0, + 650, + }, + dictWord{135, 11, 512}, + dictWord{6, 0, 99}, + dictWord{7, 0, 1808}, + dictWord{145, 0, 57}, + dictWord{6, 0, 246}, + dictWord{6, 0, 574}, + dictWord{7, 0, 428}, + dictWord{9, 0, 793}, + dictWord{10, 0, 669}, + dictWord{11, 0, 485}, + dictWord{11, 0, 840}, + dictWord{12, 0, 300}, + dictWord{14, 0, 250}, + dictWord{145, 0, 55}, + dictWord{ + 4, + 10, + 132, + }, + dictWord{5, 10, 69}, + dictWord{135, 10, 1242}, + dictWord{136, 0, 1023}, + dictWord{7, 0, 302}, + dictWord{132, 10, 111}, + dictWord{135, 0, 1871}, + dictWord{132, 0, 728}, + dictWord{9, 0, 252}, + dictWord{132, 10, 767}, + dictWord{6, 0, 461}, + dictWord{7, 0, 1590}, + dictWord{7, 10, 1416}, + dictWord{7, 10, 2005}, + dictWord{8, 10, 131}, + dictWord{8, 10, 466}, + dictWord{9, 10, 672}, + dictWord{13, 10, 252}, + dictWord{148, 10, 103}, + dictWord{6, 0, 323}, + dictWord{135, 0, 1564}, + dictWord{7, 0, 461}, + dictWord{136, 0, 775}, + dictWord{6, 10, 44}, + dictWord{136, 10, 368}, + dictWord{139, 0, 172}, + dictWord{132, 0, 464}, + dictWord{4, 10, 570}, + dictWord{133, 10, 120}, + dictWord{137, 11, 269}, + dictWord{6, 10, 227}, + dictWord{135, 10, 1589}, + dictWord{6, 11, 1719}, + dictWord{6, 11, 1735}, + dictWord{ + 7, + 11, + 2016, + }, + dictWord{7, 11, 2020}, + dictWord{8, 11, 837}, + dictWord{137, 11, 852}, + dictWord{7, 0, 727}, + dictWord{146, 0, 73}, + dictWord{132, 0, 1023}, + dictWord{135, 11, 852}, + dictWord{135, 10, 1529}, + dictWord{136, 0, 577}, + dictWord{138, 11, 568}, + dictWord{134, 0, 1037}, + dictWord{8, 11, 67}, + dictWord{ + 138, + 11, + 419, + }, + dictWord{4, 0, 413}, + dictWord{5, 0, 677}, + dictWord{8, 0, 432}, + dictWord{140, 0, 280}, + dictWord{10, 0, 600}, + dictWord{6, 10, 1667}, + dictWord{ + 7, + 11, + 967, + }, + dictWord{7, 10, 2036}, + dictWord{141, 11, 11}, + dictWord{6, 10, 511}, + dictWord{140, 10, 132}, + dictWord{6, 0, 799}, + dictWord{5, 10, 568}, + dictWord{ + 6, + 10, + 138, + }, + dictWord{135, 10, 1293}, + dictWord{8, 0, 159}, + dictWord{4, 10, 565}, + dictWord{136, 10, 827}, + dictWord{7, 0, 646}, + dictWord{7, 0, 1730}, + dictWord{ + 11, + 0, + 446, + }, + dictWord{141, 0, 178}, + dictWord{4, 10, 922}, + dictWord{133, 10, 1023}, + dictWord{135, 11, 11}, + dictWord{132, 0, 395}, + dictWord{11, 0, 145}, + dictWord{135, 10, 1002}, + dictWord{9, 0, 174}, + dictWord{10, 0, 164}, + dictWord{11, 0, 440}, + dictWord{11, 0, 514}, + dictWord{11, 0, 841}, + dictWord{15, 0, 98}, + dictWord{149, 0, 20}, + dictWord{134, 0, 426}, + dictWord{10, 0, 608}, + dictWord{139, 0, 1002}, + dictWord{7, 11, 320}, + dictWord{8, 11, 51}, + dictWord{12, 11, 481}, + dictWord{12, 11, 570}, + dictWord{148, 11, 106}, + dictWord{9, 0, 977}, + dictWord{9, 0, 983}, + dictWord{132, 11, 445}, + dictWord{138, 0, 250}, + dictWord{139, 0, 100}, + dictWord{6, 0, 1982}, + dictWord{136, 10, 402}, + dictWord{133, 11, 239}, + dictWord{4, 10, 716}, + dictWord{141, 10, 31}, + dictWord{5, 0, 476}, + dictWord{7, 11, 83}, + dictWord{7, 11, 1990}, + dictWord{8, 11, 130}, + dictWord{139, 11, 720}, + dictWord{8, 10, 691}, + dictWord{136, 10, 731}, + dictWord{5, 11, 123}, + dictWord{ + 6, + 11, + 530, + }, + dictWord{7, 11, 348}, + dictWord{135, 11, 1419}, + dictWord{5, 0, 76}, + dictWord{6, 0, 458}, + dictWord{6, 0, 497}, + dictWord{7, 0, 868}, + dictWord{9, 0, 658}, + dictWord{10, 0, 594}, + dictWord{11, 0, 173}, + dictWord{11, 0, 566}, + dictWord{12, 0, 20}, + dictWord{12, 0, 338}, + dictWord{141, 0, 200}, + dictWord{9, 11, 139}, + dictWord{ + 10, + 11, + 399, + }, + dictWord{11, 11, 469}, + dictWord{12, 11, 634}, + dictWord{141, 11, 223}, + dictWord{9, 10, 840}, + dictWord{138, 10, 803}, + dictWord{133, 10, 847}, + dictWord{11, 11, 223}, + dictWord{140, 11, 168}, + dictWord{132, 11, 210}, + dictWord{8, 0, 447}, + dictWord{9, 10, 53}, + dictWord{9, 10, 268}, + dictWord{9, 10, 901}, + dictWord{10, 10, 518}, + dictWord{10, 10, 829}, + dictWord{11, 10, 188}, + dictWord{13, 10, 74}, + dictWord{14, 10, 46}, + dictWord{15, 10, 17}, + dictWord{15, 10, 33}, + dictWord{17, 10, 40}, + dictWord{18, 10, 36}, + dictWord{19, 10, 20}, + dictWord{22, 10, 1}, + dictWord{152, 10, 2}, + dictWord{4, 0, 526}, + dictWord{7, 0, 1029}, + dictWord{135, 0, 1054}, + dictWord{19, 11, 59}, + dictWord{150, 11, 2}, + dictWord{4, 0, 636}, + dictWord{6, 0, 1875}, + dictWord{6, 0, 1920}, + dictWord{9, 0, 999}, + dictWord{ + 12, + 0, + 807, + }, + dictWord{12, 0, 825}, + dictWord{15, 0, 179}, + dictWord{15, 0, 190}, + dictWord{18, 0, 182}, + dictWord{136, 10, 532}, + dictWord{6, 0, 1699}, + dictWord{ + 7, + 0, + 660, + }, + dictWord{7, 0, 1124}, + dictWord{17, 0, 31}, + dictWord{19, 0, 22}, + dictWord{151, 0, 14}, + dictWord{135, 10, 681}, + dictWord{132, 11, 430}, + dictWord{ + 140, + 10, + 677, + }, + dictWord{4, 10, 684}, + dictWord{136, 10, 384}, + dictWord{132, 11, 756}, + dictWord{133, 11, 213}, + dictWord{7, 0, 188}, + dictWord{7, 10, 110}, + dictWord{ + 8, + 10, + 290, + }, + dictWord{8, 10, 591}, + dictWord{9, 10, 382}, + dictWord{9, 10, 649}, + dictWord{11, 10, 71}, + dictWord{11, 10, 155}, + dictWord{11, 10, 313}, + dictWord{ + 12, + 10, + 5, + }, + dictWord{13, 10, 325}, + dictWord{142, 10, 287}, + dictWord{7, 10, 360}, + dictWord{7, 10, 425}, + dictWord{9, 10, 66}, + dictWord{9, 10, 278}, + dictWord{ + 138, + 10, + 644, + }, + dictWord{142, 11, 164}, + dictWord{4, 0, 279}, + dictWord{7, 0, 301}, + dictWord{137, 0, 362}, + dictWord{134, 11, 586}, + dictWord{135, 0, 1743}, + dictWord{4, 0, 178}, + dictWord{133, 0, 399}, + dictWord{4, 10, 900}, + dictWord{133, 10, 861}, + dictWord{5, 10, 254}, + dictWord{7, 10, 985}, + dictWord{136, 10, 73}, + dictWord{133, 11, 108}, + dictWord{7, 10, 1959}, + dictWord{136, 10, 683}, + dictWord{133, 11, 219}, + dictWord{4, 11, 193}, + dictWord{5, 11, 916}, + dictWord{ + 7, + 11, + 364, + }, + dictWord{10, 11, 398}, + dictWord{10, 11, 726}, + dictWord{11, 11, 317}, + dictWord{11, 11, 626}, + dictWord{12, 11, 142}, + dictWord{12, 11, 288}, + dictWord{ + 12, + 11, + 678, + }, + dictWord{13, 11, 313}, + dictWord{15, 11, 113}, + dictWord{18, 11, 114}, + dictWord{21, 11, 30}, + dictWord{150, 11, 53}, + dictWord{6, 11, 241}, + dictWord{7, 11, 907}, + dictWord{8, 11, 832}, + dictWord{9, 11, 342}, + dictWord{10, 11, 729}, + dictWord{11, 11, 284}, + dictWord{11, 11, 445}, + dictWord{11, 11, 651}, + dictWord{11, 11, 863}, + dictWord{13, 11, 398}, + dictWord{146, 11, 99}, + dictWord{132, 0, 872}, + dictWord{134, 0, 831}, + dictWord{134, 0, 1692}, + dictWord{ + 6, + 0, + 202, + }, + dictWord{6, 0, 1006}, + dictWord{9, 0, 832}, + dictWord{10, 0, 636}, + dictWord{11, 0, 208}, + dictWord{12, 0, 360}, + dictWord{17, 0, 118}, + dictWord{18, 0, 27}, + dictWord{20, 0, 67}, + dictWord{137, 11, 734}, + dictWord{132, 10, 725}, + dictWord{7, 11, 993}, + dictWord{138, 11, 666}, + dictWord{134, 0, 1954}, + dictWord{ + 134, + 10, + 196, + }, + dictWord{7, 0, 872}, + dictWord{10, 0, 516}, + dictWord{139, 0, 167}, + dictWord{133, 10, 831}, + dictWord{4, 11, 562}, + dictWord{9, 11, 254}, + dictWord{ + 139, + 11, + 879, + }, + dictWord{137, 0, 313}, + dictWord{4, 0, 224}, + dictWord{132, 11, 786}, + dictWord{11, 0, 24}, + dictWord{12, 0, 170}, + dictWord{136, 10, 723}, + dictWord{ + 5, + 0, + 546, + }, + dictWord{7, 0, 35}, + dictWord{8, 0, 11}, + dictWord{8, 0, 12}, + dictWord{9, 0, 315}, + dictWord{9, 0, 533}, + dictWord{10, 0, 802}, + dictWord{11, 0, 166}, + dictWord{ + 12, + 0, + 525, + }, + dictWord{142, 0, 243}, + dictWord{7, 0, 1937}, + dictWord{13, 10, 80}, + dictWord{13, 10, 437}, + dictWord{145, 10, 74}, + dictWord{5, 0, 241}, + dictWord{ + 8, + 0, + 242, + }, + dictWord{9, 0, 451}, + dictWord{10, 0, 667}, + dictWord{11, 0, 598}, + dictWord{140, 0, 429}, + dictWord{150, 0, 46}, + dictWord{6, 0, 1273}, + dictWord{ + 137, + 0, + 830, + }, + dictWord{5, 10, 848}, + dictWord{6, 10, 66}, + dictWord{136, 10, 764}, + dictWord{6, 0, 825}, + dictWord{134, 0, 993}, + dictWord{4, 0, 1006}, + dictWord{ + 10, + 0, + 327, + }, + dictWord{13, 0, 271}, + dictWord{4, 10, 36}, + dictWord{7, 10, 1387}, + dictWord{139, 10, 755}, + dictWord{134, 0, 1023}, + dictWord{135, 0, 1580}, + dictWord{ + 4, + 0, + 366, + }, + dictWord{137, 0, 516}, + dictWord{132, 10, 887}, + dictWord{6, 0, 1736}, + dictWord{135, 0, 1891}, + dictWord{6, 11, 216}, + dictWord{7, 11, 901}, + dictWord{ + 7, + 11, + 1343, + }, + dictWord{136, 11, 493}, + dictWord{6, 10, 165}, + dictWord{138, 10, 388}, + dictWord{7, 11, 341}, + dictWord{139, 11, 219}, + dictWord{4, 10, 719}, + dictWord{135, 10, 155}, + dictWord{134, 0, 1935}, + dictWord{132, 0, 826}, + dictWord{6, 0, 331}, + dictWord{6, 0, 1605}, + dictWord{8, 0, 623}, + dictWord{11, 0, 139}, + dictWord{139, 0, 171}, + dictWord{135, 11, 1734}, + dictWord{10, 11, 115}, + dictWord{11, 11, 420}, + dictWord{12, 11, 154}, + dictWord{13, 11, 404}, + dictWord{ + 14, + 11, + 346, + }, + dictWord{15, 11, 54}, + dictWord{143, 11, 112}, + dictWord{7, 0, 288}, + dictWord{4, 10, 353}, + dictWord{6, 10, 146}, + dictWord{6, 10, 1789}, + dictWord{ + 7, + 10, + 990, + }, + dictWord{7, 10, 1348}, + dictWord{9, 10, 665}, + dictWord{9, 10, 898}, + dictWord{11, 10, 893}, + dictWord{142, 10, 212}, + dictWord{6, 0, 916}, + dictWord{134, 0, 1592}, + dictWord{7, 0, 1888}, + dictWord{4, 10, 45}, + dictWord{135, 10, 1257}, + dictWord{5, 11, 1011}, + dictWord{136, 11, 701}, + dictWord{ + 139, + 11, + 596, + }, + dictWord{4, 11, 54}, + dictWord{5, 11, 666}, + dictWord{7, 11, 1039}, + dictWord{7, 11, 1130}, + dictWord{9, 11, 195}, + dictWord{138, 11, 302}, + dictWord{ + 134, + 0, + 1471, + }, + dictWord{134, 0, 1570}, + dictWord{132, 0, 394}, + dictWord{140, 10, 65}, + dictWord{136, 10, 816}, + dictWord{135, 0, 1931}, + dictWord{7, 0, 574}, + dictWord{135, 0, 1719}, + dictWord{134, 11, 467}, + dictWord{132, 0, 658}, + dictWord{9, 0, 781}, + dictWord{10, 0, 144}, + dictWord{11, 0, 385}, + dictWord{13, 0, 161}, + dictWord{13, 0, 228}, + dictWord{13, 0, 268}, + dictWord{20, 0, 107}, + dictWord{134, 11, 1669}, + dictWord{136, 0, 374}, + dictWord{135, 0, 735}, + dictWord{4, 0, 344}, + dictWord{6, 0, 498}, + dictWord{139, 0, 323}, + dictWord{7, 0, 586}, + dictWord{7, 0, 1063}, + dictWord{6, 10, 559}, + dictWord{134, 10, 1691}, + dictWord{137, 0, 155}, + dictWord{133, 0, 906}, + dictWord{7, 11, 122}, + dictWord{9, 11, 259}, + dictWord{10, 11, 84}, + dictWord{11, 11, 470}, + dictWord{12, 11, 541}, + dictWord{ + 141, + 11, + 379, + }, + dictWord{134, 0, 1139}, + dictWord{10, 0, 108}, + dictWord{139, 0, 116}, + dictWord{134, 10, 456}, + dictWord{133, 10, 925}, + dictWord{5, 11, 82}, + dictWord{ + 5, + 11, + 131, + }, + dictWord{7, 11, 1755}, + dictWord{8, 11, 31}, + dictWord{9, 11, 168}, + dictWord{9, 11, 764}, + dictWord{139, 11, 869}, + dictWord{134, 11, 605}, + dictWord{ + 5, + 11, + 278, + }, + dictWord{137, 11, 68}, + dictWord{4, 11, 163}, + dictWord{5, 11, 201}, + dictWord{5, 11, 307}, + dictWord{5, 11, 310}, + dictWord{6, 11, 335}, + dictWord{ + 7, + 11, + 284, + }, + dictWord{136, 11, 165}, + dictWord{135, 11, 1660}, + dictWord{6, 11, 33}, + dictWord{135, 11, 1244}, + dictWord{4, 0, 616}, + dictWord{136, 11, 483}, + dictWord{8, 0, 857}, + dictWord{8, 0, 902}, + dictWord{8, 0, 910}, + dictWord{10, 0, 879}, + dictWord{12, 0, 726}, + dictWord{4, 11, 199}, + dictWord{139, 11, 34}, + dictWord{136, 0, 692}, + dictWord{6, 10, 193}, + dictWord{7, 10, 240}, + dictWord{7, 10, 1682}, + dictWord{10, 10, 51}, + dictWord{10, 10, 640}, + dictWord{11, 10, 410}, + dictWord{13, 10, 82}, + dictWord{14, 10, 247}, + dictWord{14, 10, 331}, + dictWord{142, 10, 377}, + dictWord{6, 0, 823}, + dictWord{134, 0, 983}, + dictWord{ + 139, + 10, + 411, + }, + dictWord{132, 0, 305}, + dictWord{136, 10, 633}, + dictWord{138, 11, 203}, + dictWord{134, 0, 681}, + dictWord{6, 11, 326}, + dictWord{7, 11, 677}, + dictWord{137, 11, 425}, + dictWord{5, 0, 214}, + dictWord{7, 0, 603}, + dictWord{8, 0, 611}, + dictWord{9, 0, 686}, + dictWord{10, 0, 88}, + dictWord{11, 0, 459}, + dictWord{ + 11, + 0, + 496, + }, + dictWord{12, 0, 463}, + dictWord{12, 0, 590}, + dictWord{141, 0, 0}, + dictWord{136, 0, 1004}, + dictWord{142, 0, 23}, + dictWord{134, 0, 1703}, + dictWord{ + 147, + 11, + 8, + }, + dictWord{145, 11, 56}, + dictWord{135, 0, 1443}, + dictWord{4, 10, 237}, + dictWord{135, 10, 514}, + dictWord{6, 0, 714}, + dictWord{145, 0, 19}, + dictWord{ + 5, + 11, + 358, + }, + dictWord{7, 11, 473}, + dictWord{7, 11, 1184}, + dictWord{10, 11, 662}, + dictWord{13, 11, 212}, + dictWord{13, 11, 304}, + dictWord{13, 11, 333}, + dictWord{145, 11, 98}, + dictWord{4, 0, 737}, + dictWord{10, 0, 98}, + dictWord{11, 0, 294}, + dictWord{12, 0, 60}, + dictWord{12, 0, 437}, + dictWord{13, 0, 64}, + dictWord{ + 13, + 0, + 380, + }, + dictWord{142, 0, 430}, + dictWord{6, 10, 392}, + dictWord{7, 10, 65}, + dictWord{135, 10, 2019}, + dictWord{6, 0, 1758}, + dictWord{8, 0, 520}, + dictWord{ + 9, + 0, + 345, + }, + dictWord{9, 0, 403}, + dictWord{142, 0, 350}, + dictWord{5, 0, 47}, + dictWord{10, 0, 242}, + dictWord{138, 0, 579}, + dictWord{5, 0, 139}, + dictWord{7, 0, 1168}, + dictWord{138, 0, 539}, + dictWord{134, 0, 1459}, + dictWord{13, 0, 388}, + dictWord{141, 11, 388}, + dictWord{134, 0, 253}, + dictWord{7, 10, 1260}, + dictWord{ + 135, + 10, + 1790, + }, + dictWord{10, 0, 252}, + dictWord{9, 10, 222}, + dictWord{139, 10, 900}, + dictWord{140, 0, 745}, + dictWord{133, 11, 946}, + dictWord{4, 0, 107}, + dictWord{ + 7, + 0, + 613, + }, + dictWord{8, 0, 439}, + dictWord{8, 0, 504}, + dictWord{9, 0, 501}, + dictWord{10, 0, 383}, + dictWord{139, 0, 477}, + dictWord{135, 11, 1485}, + dictWord{ + 132, + 0, + 871, + }, + dictWord{7, 11, 411}, + dictWord{7, 11, 590}, + dictWord{8, 11, 631}, + dictWord{9, 11, 323}, + dictWord{10, 11, 355}, + dictWord{11, 11, 491}, + dictWord{ + 12, + 11, + 143, + }, + dictWord{12, 11, 402}, + dictWord{13, 11, 73}, + dictWord{14, 11, 408}, + dictWord{15, 11, 107}, + dictWord{146, 11, 71}, + dictWord{132, 0, 229}, + dictWord{132, 0, 903}, + dictWord{140, 0, 71}, + dictWord{133, 0, 549}, + dictWord{4, 0, 47}, + dictWord{6, 0, 373}, + dictWord{7, 0, 452}, + dictWord{7, 0, 543}, + dictWord{ + 7, + 0, + 1828, + }, + dictWord{7, 0, 1856}, + dictWord{9, 0, 6}, + dictWord{11, 0, 257}, + dictWord{139, 0, 391}, + dictWord{7, 11, 1467}, + dictWord{8, 11, 328}, + dictWord{ + 10, + 11, + 544, + }, + dictWord{11, 11, 955}, + dictWord{13, 11, 320}, + dictWord{145, 11, 83}, + dictWord{5, 0, 980}, + dictWord{134, 0, 1754}, + dictWord{136, 0, 865}, + dictWord{ + 5, + 0, + 705, + }, + dictWord{137, 0, 606}, + dictWord{7, 0, 161}, + dictWord{8, 10, 201}, + dictWord{136, 10, 605}, + dictWord{143, 11, 35}, + dictWord{5, 11, 835}, + dictWord{ + 6, + 11, + 483, + }, + dictWord{140, 10, 224}, + dictWord{7, 0, 536}, + dictWord{7, 0, 1331}, + dictWord{136, 0, 143}, + dictWord{134, 0, 1388}, + dictWord{5, 0, 724}, + dictWord{ + 10, + 0, + 305, + }, + dictWord{11, 0, 151}, + dictWord{12, 0, 33}, + dictWord{12, 0, 121}, + dictWord{12, 0, 381}, + dictWord{17, 0, 3}, + dictWord{17, 0, 27}, + dictWord{17, 0, 78}, + dictWord{18, 0, 18}, + dictWord{19, 0, 54}, + dictWord{149, 0, 5}, + dictWord{4, 10, 523}, + dictWord{133, 10, 638}, + dictWord{5, 0, 19}, + dictWord{134, 0, 533}, + dictWord{ + 5, + 0, + 395, + }, + dictWord{5, 0, 951}, + dictWord{134, 0, 1776}, + dictWord{135, 0, 1908}, + dictWord{132, 0, 846}, + dictWord{10, 0, 74}, + dictWord{11, 0, 663}, + dictWord{ + 12, + 0, + 210, + }, + dictWord{13, 0, 166}, + dictWord{13, 0, 310}, + dictWord{14, 0, 373}, + dictWord{18, 0, 95}, + dictWord{19, 0, 43}, + dictWord{6, 10, 242}, + dictWord{7, 10, 227}, + dictWord{7, 10, 1581}, + dictWord{8, 10, 104}, + dictWord{9, 10, 113}, + dictWord{9, 10, 220}, + dictWord{9, 10, 427}, + dictWord{10, 10, 239}, + dictWord{11, 10, 579}, + dictWord{11, 10, 1023}, + dictWord{13, 10, 4}, + dictWord{13, 10, 204}, + dictWord{13, 10, 316}, + dictWord{148, 10, 86}, + dictWord{9, 11, 716}, + dictWord{11, 11, 108}, + dictWord{13, 11, 123}, + dictWord{14, 11, 252}, + dictWord{19, 11, 38}, + dictWord{21, 11, 3}, + dictWord{151, 11, 11}, + dictWord{8, 0, 372}, + dictWord{9, 0, 122}, + dictWord{138, 0, 175}, + dictWord{132, 11, 677}, + dictWord{7, 11, 1374}, + dictWord{136, 11, 540}, + dictWord{135, 10, 861}, + dictWord{132, 0, 695}, + dictWord{ + 7, + 0, + 497, + }, + dictWord{9, 0, 387}, + dictWord{147, 0, 81}, + dictWord{136, 0, 937}, + dictWord{134, 0, 718}, + dictWord{7, 0, 1328}, + dictWord{136, 10, 494}, + dictWord{ + 132, + 11, + 331, + }, + dictWord{6, 0, 1581}, + dictWord{133, 11, 747}, + dictWord{5, 0, 284}, + dictWord{6, 0, 49}, + dictWord{6, 0, 350}, + dictWord{7, 0, 1}, + dictWord{7, 0, 377}, + dictWord{7, 0, 1693}, + dictWord{8, 0, 18}, + dictWord{8, 0, 678}, + dictWord{9, 0, 161}, + dictWord{9, 0, 585}, + dictWord{9, 0, 671}, + dictWord{9, 0, 839}, + dictWord{11, 0, 912}, + dictWord{141, 0, 427}, + dictWord{7, 10, 1306}, + dictWord{8, 10, 505}, + dictWord{9, 10, 482}, + dictWord{10, 10, 126}, + dictWord{11, 10, 225}, + dictWord{12, 10, 347}, + dictWord{12, 10, 449}, + dictWord{13, 10, 19}, + dictWord{14, 10, 218}, + dictWord{142, 10, 435}, + dictWord{10, 10, 764}, + dictWord{12, 10, 120}, + dictWord{ + 13, + 10, + 39, + }, + dictWord{145, 10, 127}, + dictWord{4, 0, 597}, + dictWord{133, 10, 268}, + dictWord{134, 0, 1094}, + dictWord{4, 0, 1008}, + dictWord{134, 0, 1973}, + dictWord{132, 0, 811}, + dictWord{139, 0, 908}, + dictWord{135, 0, 1471}, + dictWord{133, 11, 326}, + dictWord{4, 10, 384}, + dictWord{135, 10, 1022}, + dictWord{ + 7, + 0, + 1935, + }, + dictWord{8, 0, 324}, + dictWord{12, 0, 42}, + dictWord{4, 11, 691}, + dictWord{7, 11, 1935}, + dictWord{8, 11, 324}, + dictWord{9, 11, 35}, + dictWord{10, 11, 680}, + dictWord{11, 11, 364}, + dictWord{12, 11, 42}, + dictWord{13, 11, 357}, + dictWord{146, 11, 16}, + dictWord{135, 0, 2014}, + dictWord{7, 0, 2007}, + dictWord{ + 9, + 0, + 101, + }, + dictWord{9, 0, 450}, + dictWord{10, 0, 66}, + dictWord{10, 0, 842}, + dictWord{11, 0, 536}, + dictWord{12, 0, 587}, + dictWord{6, 11, 32}, + dictWord{7, 11, 385}, + dictWord{7, 11, 757}, + dictWord{7, 11, 1916}, + dictWord{8, 11, 37}, + dictWord{8, 11, 94}, + dictWord{8, 11, 711}, + dictWord{9, 11, 541}, + dictWord{10, 11, 162}, + dictWord{ + 10, + 11, + 795, + }, + dictWord{11, 11, 989}, + dictWord{11, 11, 1010}, + dictWord{12, 11, 14}, + dictWord{142, 11, 308}, + dictWord{139, 0, 586}, + dictWord{ + 135, + 10, + 1703, + }, + dictWord{7, 0, 1077}, + dictWord{11, 0, 28}, + dictWord{9, 10, 159}, + dictWord{140, 10, 603}, + dictWord{6, 0, 1221}, + dictWord{136, 10, 583}, + dictWord{ + 6, + 11, + 152, + }, + dictWord{6, 11, 349}, + dictWord{6, 11, 1682}, + dictWord{7, 11, 1252}, + dictWord{8, 11, 112}, + dictWord{9, 11, 435}, + dictWord{9, 11, 668}, + dictWord{ + 10, + 11, + 290, + }, + dictWord{10, 11, 319}, + dictWord{10, 11, 815}, + dictWord{11, 11, 180}, + dictWord{11, 11, 837}, + dictWord{12, 11, 240}, + dictWord{13, 11, 152}, + dictWord{13, 11, 219}, + dictWord{142, 11, 158}, + dictWord{139, 0, 62}, + dictWord{132, 10, 515}, + dictWord{8, 10, 632}, + dictWord{8, 10, 697}, + dictWord{ + 137, + 10, + 854, + }, + dictWord{134, 0, 1766}, + dictWord{132, 11, 581}, + dictWord{6, 11, 126}, + dictWord{7, 11, 573}, + dictWord{8, 11, 397}, + dictWord{142, 11, 44}, + dictWord{ + 150, + 0, + 28, + }, + dictWord{11, 0, 670}, + dictWord{22, 0, 25}, + dictWord{4, 10, 136}, + dictWord{133, 10, 551}, + dictWord{6, 0, 1665}, + dictWord{7, 0, 256}, + dictWord{ + 7, + 0, + 1388, + }, + dictWord{138, 0, 499}, + dictWord{4, 0, 22}, + dictWord{5, 0, 10}, + dictWord{7, 0, 1576}, + dictWord{136, 0, 97}, + dictWord{134, 10, 1782}, + dictWord{5, 0, 481}, + dictWord{7, 10, 1287}, + dictWord{9, 10, 44}, + dictWord{10, 10, 552}, + dictWord{10, 10, 642}, + dictWord{11, 10, 839}, + dictWord{12, 10, 274}, + dictWord{ + 12, + 10, + 275, + }, + dictWord{12, 10, 372}, + dictWord{13, 10, 91}, + dictWord{142, 10, 125}, + dictWord{133, 11, 926}, + dictWord{7, 11, 1232}, + dictWord{137, 11, 531}, + dictWord{6, 0, 134}, + dictWord{7, 0, 437}, + dictWord{7, 0, 1824}, + dictWord{9, 0, 37}, + dictWord{14, 0, 285}, + dictWord{142, 0, 371}, + dictWord{7, 0, 486}, + dictWord{8, 0, 155}, + dictWord{11, 0, 93}, + dictWord{140, 0, 164}, + dictWord{6, 0, 1391}, + dictWord{134, 0, 1442}, + dictWord{133, 11, 670}, + dictWord{133, 0, 591}, + dictWord{ + 6, + 10, + 147, + }, + dictWord{7, 10, 886}, + dictWord{7, 11, 1957}, + dictWord{9, 10, 753}, + dictWord{138, 10, 268}, + dictWord{5, 0, 380}, + dictWord{5, 0, 650}, + dictWord{ + 7, + 0, + 1173, + }, + dictWord{136, 0, 310}, + dictWord{4, 0, 364}, + dictWord{7, 0, 1156}, + dictWord{7, 0, 1187}, + dictWord{137, 0, 409}, + dictWord{135, 11, 1621}, + dictWord{ + 134, + 0, + 482, + }, + dictWord{133, 11, 506}, + dictWord{4, 0, 781}, + dictWord{6, 0, 487}, + dictWord{7, 0, 926}, + dictWord{8, 0, 263}, + dictWord{139, 0, 500}, + dictWord{ + 138, + 10, + 137, + }, + dictWord{135, 11, 242}, + dictWord{139, 11, 96}, + dictWord{133, 10, 414}, + dictWord{135, 10, 1762}, + dictWord{134, 0, 804}, + dictWord{5, 11, 834}, + dictWord{7, 11, 1202}, + dictWord{8, 11, 14}, + dictWord{9, 11, 481}, + dictWord{137, 11, 880}, + dictWord{134, 10, 599}, + dictWord{4, 0, 94}, + dictWord{135, 0, 1265}, + dictWord{4, 0, 415}, + dictWord{132, 0, 417}, + dictWord{5, 0, 348}, + dictWord{6, 0, 522}, + dictWord{6, 10, 1749}, + dictWord{7, 11, 1526}, + dictWord{138, 11, 465}, + dictWord{134, 10, 1627}, + dictWord{132, 0, 1012}, + dictWord{132, 10, 488}, + dictWord{4, 11, 357}, + dictWord{6, 11, 172}, + dictWord{7, 11, 143}, + dictWord{ + 137, + 11, + 413, + }, + dictWord{4, 10, 83}, + dictWord{4, 11, 590}, + dictWord{146, 11, 76}, + dictWord{140, 10, 676}, + dictWord{7, 11, 287}, + dictWord{8, 11, 355}, + dictWord{ + 9, + 11, + 293, + }, + dictWord{137, 11, 743}, + dictWord{134, 10, 278}, + dictWord{6, 0, 1803}, + dictWord{18, 0, 165}, + dictWord{24, 0, 21}, + dictWord{5, 11, 169}, + dictWord{ + 7, + 11, + 333, + }, + dictWord{136, 11, 45}, + dictWord{12, 10, 97}, + dictWord{140, 11, 97}, + dictWord{4, 0, 408}, + dictWord{4, 0, 741}, + dictWord{135, 0, 500}, + dictWord{ + 132, + 11, + 198, + }, + dictWord{7, 10, 388}, + dictWord{7, 10, 644}, + dictWord{139, 10, 781}, + dictWord{4, 11, 24}, + dictWord{5, 11, 140}, + dictWord{5, 11, 185}, + dictWord{ + 7, + 11, + 1500, + }, + dictWord{11, 11, 565}, + dictWord{139, 11, 838}, + dictWord{6, 0, 1321}, + dictWord{9, 0, 257}, + dictWord{7, 10, 229}, + dictWord{8, 10, 59}, + dictWord{ + 9, + 10, + 190, + }, + dictWord{10, 10, 378}, + dictWord{140, 10, 191}, + dictWord{4, 11, 334}, + dictWord{133, 11, 593}, + dictWord{135, 11, 1885}, + dictWord{134, 0, 1138}, + dictWord{4, 0, 249}, + dictWord{6, 0, 73}, + dictWord{135, 0, 177}, + dictWord{133, 0, 576}, + dictWord{142, 0, 231}, + dictWord{137, 0, 288}, + dictWord{132, 10, 660}, + dictWord{7, 10, 1035}, + dictWord{138, 10, 737}, + dictWord{135, 0, 1487}, + dictWord{6, 0, 989}, + dictWord{9, 0, 433}, + dictWord{7, 10, 690}, + dictWord{9, 10, 587}, + dictWord{140, 10, 521}, + dictWord{7, 0, 1264}, + dictWord{7, 0, 1678}, + dictWord{11, 0, 945}, + dictWord{12, 0, 341}, + dictWord{12, 0, 471}, + dictWord{140, 0, 569}, + dictWord{132, 11, 709}, + dictWord{133, 11, 897}, + dictWord{5, 11, 224}, + dictWord{13, 11, 174}, + dictWord{146, 11, 52}, + dictWord{135, 11, 1840}, + dictWord{ + 134, + 10, + 1744, + }, + dictWord{12, 0, 87}, + dictWord{16, 0, 74}, + dictWord{4, 10, 733}, + dictWord{9, 10, 194}, + dictWord{10, 10, 92}, + dictWord{11, 10, 198}, + dictWord{ + 12, + 10, + 84, + }, + dictWord{141, 10, 128}, + dictWord{140, 0, 779}, + dictWord{135, 0, 538}, + dictWord{4, 11, 608}, + dictWord{133, 11, 497}, + dictWord{133, 0, 413}, + dictWord{7, 11, 1375}, + dictWord{7, 11, 1466}, + dictWord{138, 11, 331}, + dictWord{136, 0, 495}, + dictWord{6, 11, 540}, + dictWord{136, 11, 136}, + dictWord{7, 0, 54}, + dictWord{8, 0, 312}, + dictWord{10, 0, 191}, + dictWord{10, 0, 614}, + dictWord{140, 0, 567}, + dictWord{6, 0, 468}, + dictWord{7, 0, 567}, + dictWord{7, 0, 1478}, + dictWord{ + 8, + 0, + 530, + }, + dictWord{14, 0, 290}, + dictWord{133, 11, 999}, + dictWord{4, 11, 299}, + dictWord{7, 10, 306}, + dictWord{135, 11, 1004}, + dictWord{142, 11, 296}, + dictWord{134, 0, 1484}, + dictWord{133, 10, 979}, + dictWord{6, 0, 609}, + dictWord{9, 0, 815}, + dictWord{12, 11, 137}, + dictWord{14, 11, 9}, + dictWord{14, 11, 24}, + dictWord{142, 11, 64}, + dictWord{133, 11, 456}, + dictWord{6, 0, 484}, + dictWord{135, 0, 822}, + dictWord{133, 10, 178}, + dictWord{136, 11, 180}, + dictWord{ + 132, + 11, + 755, + }, + dictWord{137, 0, 900}, + dictWord{135, 0, 1335}, + dictWord{6, 0, 1724}, + dictWord{135, 0, 2022}, + dictWord{135, 11, 1139}, + dictWord{5, 0, 640}, + dictWord{132, 10, 390}, + dictWord{6, 0, 1831}, + dictWord{138, 11, 633}, + dictWord{135, 11, 566}, + dictWord{4, 11, 890}, + dictWord{5, 11, 805}, + dictWord{5, 11, 819}, + dictWord{5, 11, 961}, + dictWord{6, 11, 396}, + dictWord{6, 11, 1631}, + dictWord{6, 11, 1678}, + dictWord{7, 11, 1967}, + dictWord{7, 11, 2041}, + dictWord{ + 9, + 11, + 630, + }, + dictWord{11, 11, 8}, + dictWord{11, 11, 1019}, + dictWord{12, 11, 176}, + dictWord{13, 11, 225}, + dictWord{14, 11, 292}, + dictWord{149, 11, 24}, + dictWord{ + 132, + 0, + 474, + }, + dictWord{134, 0, 1103}, + dictWord{135, 0, 1504}, + dictWord{134, 0, 1576}, + dictWord{6, 0, 961}, + dictWord{6, 0, 1034}, + dictWord{140, 0, 655}, + dictWord{11, 11, 514}, + dictWord{149, 11, 20}, + dictWord{5, 0, 305}, + dictWord{135, 11, 1815}, + dictWord{7, 11, 1505}, + dictWord{10, 11, 190}, + dictWord{ + 10, + 11, + 634, + }, + dictWord{11, 11, 792}, + dictWord{12, 11, 358}, + dictWord{140, 11, 447}, + dictWord{5, 11, 0}, + dictWord{6, 11, 536}, + dictWord{7, 11, 604}, + dictWord{ + 13, + 11, + 445, + }, + dictWord{145, 11, 126}, + dictWord{7, 0, 1236}, + dictWord{133, 10, 105}, + dictWord{4, 0, 480}, + dictWord{6, 0, 217}, + dictWord{6, 0, 302}, + dictWord{ + 6, + 0, + 1642, + }, + dictWord{7, 0, 130}, + dictWord{7, 0, 837}, + dictWord{7, 0, 1321}, + dictWord{7, 0, 1547}, + dictWord{7, 0, 1657}, + dictWord{8, 0, 429}, + dictWord{9, 0, 228}, + dictWord{13, 0, 289}, + dictWord{13, 0, 343}, + dictWord{19, 0, 101}, + dictWord{6, 11, 232}, + dictWord{6, 11, 412}, + dictWord{7, 11, 1074}, + dictWord{8, 11, 9}, + dictWord{ + 8, + 11, + 157, + }, + dictWord{8, 11, 786}, + dictWord{9, 11, 196}, + dictWord{9, 11, 352}, + dictWord{9, 11, 457}, + dictWord{10, 11, 337}, + dictWord{11, 11, 232}, + dictWord{ + 11, + 11, + 877, + }, + dictWord{12, 11, 480}, + dictWord{140, 11, 546}, + dictWord{5, 10, 438}, + dictWord{7, 11, 958}, + dictWord{9, 10, 694}, + dictWord{12, 10, 627}, + dictWord{ + 13, + 11, + 38, + }, + dictWord{141, 10, 210}, + dictWord{4, 11, 382}, + dictWord{136, 11, 579}, + dictWord{7, 0, 278}, + dictWord{10, 0, 739}, + dictWord{11, 0, 708}, + dictWord{ + 141, + 0, + 348, + }, + dictWord{4, 11, 212}, + dictWord{135, 11, 1206}, + dictWord{135, 11, 1898}, + dictWord{6, 0, 708}, + dictWord{6, 0, 1344}, + dictWord{152, 10, 11}, + dictWord{137, 11, 768}, + dictWord{134, 0, 1840}, + dictWord{140, 0, 233}, + dictWord{8, 10, 25}, + dictWord{138, 10, 826}, + dictWord{6, 0, 2017}, + dictWord{ + 133, + 11, + 655, + }, + dictWord{6, 0, 1488}, + dictWord{139, 11, 290}, + dictWord{132, 10, 308}, + dictWord{134, 0, 1590}, + dictWord{134, 0, 1800}, + dictWord{134, 0, 1259}, + dictWord{16, 0, 28}, + dictWord{6, 11, 231}, + dictWord{7, 11, 95}, + dictWord{136, 11, 423}, + dictWord{133, 11, 300}, + dictWord{135, 10, 150}, + dictWord{ + 136, + 10, + 649, + }, + dictWord{7, 11, 1874}, + dictWord{137, 11, 641}, + dictWord{6, 11, 237}, + dictWord{7, 11, 611}, + dictWord{8, 11, 100}, + dictWord{9, 11, 416}, + dictWord{ + 11, + 11, + 335, + }, + dictWord{12, 11, 173}, + dictWord{146, 11, 101}, + dictWord{137, 0, 45}, + dictWord{134, 10, 521}, + dictWord{17, 0, 36}, + dictWord{14, 11, 26}, + dictWord{ + 146, + 11, + 150, + }, + dictWord{7, 0, 1442}, + dictWord{14, 0, 22}, + dictWord{5, 10, 339}, + dictWord{15, 10, 41}, + dictWord{15, 10, 166}, + dictWord{147, 10, 66}, + dictWord{ + 8, + 0, + 378, + }, + dictWord{6, 11, 581}, + dictWord{135, 11, 1119}, + dictWord{134, 0, 1507}, + dictWord{147, 11, 117}, + dictWord{139, 0, 39}, + dictWord{134, 0, 1054}, + dictWord{6, 0, 363}, + dictWord{7, 0, 1955}, + dictWord{136, 0, 725}, + dictWord{134, 0, 2036}, + dictWord{133, 11, 199}, + dictWord{6, 0, 1871}, + dictWord{9, 0, 935}, + dictWord{9, 0, 961}, + dictWord{9, 0, 1004}, + dictWord{9, 0, 1016}, + dictWord{12, 0, 805}, + dictWord{12, 0, 852}, + dictWord{12, 0, 853}, + dictWord{12, 0, 869}, + dictWord{ + 12, + 0, + 882, + }, + dictWord{12, 0, 896}, + dictWord{12, 0, 906}, + dictWord{12, 0, 917}, + dictWord{12, 0, 940}, + dictWord{15, 0, 170}, + dictWord{15, 0, 176}, + dictWord{ + 15, + 0, + 188, + }, + dictWord{15, 0, 201}, + dictWord{15, 0, 205}, + dictWord{15, 0, 212}, + dictWord{15, 0, 234}, + dictWord{15, 0, 244}, + dictWord{18, 0, 181}, + dictWord{18, 0, 193}, + dictWord{18, 0, 196}, + dictWord{18, 0, 201}, + dictWord{18, 0, 202}, + dictWord{18, 0, 210}, + dictWord{18, 0, 217}, + dictWord{18, 0, 235}, + dictWord{18, 0, 236}, + dictWord{18, 0, 237}, + dictWord{21, 0, 54}, + dictWord{21, 0, 55}, + dictWord{21, 0, 58}, + dictWord{21, 0, 59}, + dictWord{152, 0, 22}, + dictWord{134, 10, 1628}, + dictWord{ + 137, + 0, + 805, + }, + dictWord{5, 0, 813}, + dictWord{135, 0, 2046}, + dictWord{142, 11, 42}, + dictWord{5, 0, 712}, + dictWord{6, 0, 1240}, + dictWord{11, 0, 17}, + dictWord{ + 13, + 0, + 321, + }, + dictWord{144, 0, 67}, + dictWord{132, 0, 617}, + dictWord{135, 10, 829}, + dictWord{6, 0, 320}, + dictWord{7, 0, 781}, + dictWord{7, 0, 1921}, + dictWord{9, 0, 55}, + dictWord{10, 0, 186}, + dictWord{10, 0, 273}, + dictWord{10, 0, 664}, + dictWord{10, 0, 801}, + dictWord{11, 0, 996}, + dictWord{11, 0, 997}, + dictWord{13, 0, 157}, + dictWord{142, 0, 170}, + dictWord{136, 0, 271}, + dictWord{5, 10, 486}, + dictWord{135, 10, 1349}, + dictWord{18, 11, 91}, + dictWord{147, 11, 70}, + dictWord{10, 0, 445}, + dictWord{7, 10, 1635}, + dictWord{8, 10, 17}, + dictWord{138, 10, 295}, + dictWord{136, 11, 404}, + dictWord{7, 0, 103}, + dictWord{7, 0, 863}, + dictWord{11, 0, 184}, + dictWord{145, 0, 62}, + dictWord{138, 10, 558}, + dictWord{137, 0, 659}, + dictWord{6, 11, 312}, + dictWord{6, 11, 1715}, + dictWord{10, 11, 584}, + dictWord{ + 11, + 11, + 546, + }, + dictWord{11, 11, 692}, + dictWord{12, 11, 259}, + dictWord{12, 11, 295}, + dictWord{13, 11, 46}, + dictWord{141, 11, 154}, + dictWord{134, 0, 676}, + dictWord{132, 11, 588}, + dictWord{4, 11, 231}, + dictWord{5, 11, 61}, + dictWord{6, 11, 104}, + dictWord{7, 11, 729}, + dictWord{7, 11, 964}, + dictWord{7, 11, 1658}, + dictWord{140, 11, 414}, + dictWord{6, 11, 263}, + dictWord{138, 11, 757}, + dictWord{11, 0, 337}, + dictWord{142, 0, 303}, + dictWord{135, 11, 1363}, + dictWord{ + 132, + 11, + 320, + }, + dictWord{140, 0, 506}, + dictWord{134, 10, 447}, + dictWord{5, 0, 77}, + dictWord{7, 0, 1455}, + dictWord{10, 0, 843}, + dictWord{147, 0, 73}, + dictWord{ + 7, + 10, + 577, + }, + dictWord{7, 10, 1432}, + dictWord{9, 10, 475}, + dictWord{9, 10, 505}, + dictWord{9, 10, 526}, + dictWord{9, 10, 609}, + dictWord{9, 10, 689}, + dictWord{ + 9, + 10, + 726, + }, + dictWord{9, 10, 735}, + dictWord{9, 10, 738}, + dictWord{10, 10, 556}, + dictWord{10, 10, 674}, + dictWord{10, 10, 684}, + dictWord{11, 10, 89}, + dictWord{ + 11, + 10, + 202, + }, + dictWord{11, 10, 272}, + dictWord{11, 10, 380}, + dictWord{11, 10, 415}, + dictWord{11, 10, 505}, + dictWord{11, 10, 537}, + dictWord{11, 10, 550}, + dictWord{11, 10, 562}, + dictWord{11, 10, 640}, + dictWord{11, 10, 667}, + dictWord{11, 10, 688}, + dictWord{11, 10, 847}, + dictWord{11, 10, 927}, + dictWord{ + 11, + 10, + 930, + }, + dictWord{11, 10, 940}, + dictWord{12, 10, 144}, + dictWord{12, 10, 325}, + dictWord{12, 10, 329}, + dictWord{12, 10, 389}, + dictWord{12, 10, 403}, + dictWord{ + 12, + 10, + 451, + }, + dictWord{12, 10, 515}, + dictWord{12, 10, 604}, + dictWord{12, 10, 616}, + dictWord{12, 10, 626}, + dictWord{13, 10, 66}, + dictWord{13, 10, 131}, + dictWord{13, 10, 167}, + dictWord{13, 10, 236}, + dictWord{13, 10, 368}, + dictWord{13, 10, 411}, + dictWord{13, 10, 434}, + dictWord{13, 10, 453}, + dictWord{ + 13, + 10, + 461, + }, + dictWord{13, 10, 474}, + dictWord{14, 10, 59}, + dictWord{14, 10, 60}, + dictWord{14, 10, 139}, + dictWord{14, 10, 152}, + dictWord{14, 10, 276}, + dictWord{ + 14, + 10, + 353, + }, + dictWord{14, 10, 402}, + dictWord{15, 10, 28}, + dictWord{15, 10, 81}, + dictWord{15, 10, 123}, + dictWord{15, 10, 152}, + dictWord{18, 10, 136}, + dictWord{148, 10, 88}, + dictWord{132, 0, 458}, + dictWord{135, 0, 1420}, + dictWord{6, 0, 109}, + dictWord{10, 0, 382}, + dictWord{4, 11, 405}, + dictWord{4, 10, 609}, + dictWord{7, 10, 756}, + dictWord{7, 11, 817}, + dictWord{9, 10, 544}, + dictWord{11, 10, 413}, + dictWord{14, 11, 58}, + dictWord{14, 10, 307}, + dictWord{16, 10, 25}, + dictWord{17, 11, 37}, + dictWord{146, 11, 124}, + dictWord{6, 0, 330}, + dictWord{7, 0, 1084}, + dictWord{11, 0, 142}, + dictWord{133, 11, 974}, + dictWord{4, 10, 930}, + dictWord{133, 10, 947}, + dictWord{5, 10, 939}, + dictWord{142, 11, 394}, + dictWord{16, 0, 91}, + dictWord{145, 0, 87}, + dictWord{5, 11, 235}, + dictWord{5, 10, 962}, + dictWord{7, 11, 1239}, + dictWord{11, 11, 131}, + dictWord{140, 11, 370}, + dictWord{11, 0, 492}, + dictWord{5, 10, 651}, + dictWord{8, 10, 170}, + dictWord{9, 10, 61}, + dictWord{9, 10, 63}, + dictWord{10, 10, 23}, + dictWord{10, 10, 37}, + dictWord{10, 10, 834}, + dictWord{11, 10, 4}, + dictWord{11, 10, 281}, + dictWord{11, 10, 503}, + dictWord{ + 11, + 10, + 677, + }, + dictWord{12, 10, 96}, + dictWord{12, 10, 130}, + dictWord{12, 10, 244}, + dictWord{14, 10, 5}, + dictWord{14, 10, 40}, + dictWord{14, 10, 162}, + dictWord{ + 14, + 10, + 202, + }, + dictWord{146, 10, 133}, + dictWord{4, 10, 406}, + dictWord{5, 10, 579}, + dictWord{12, 10, 492}, + dictWord{150, 10, 15}, + dictWord{9, 11, 137}, + dictWord{138, 11, 221}, + dictWord{134, 0, 1239}, + dictWord{11, 0, 211}, + dictWord{140, 0, 145}, + dictWord{7, 11, 390}, + dictWord{138, 11, 140}, + dictWord{ + 135, + 11, + 1418, + }, + dictWord{135, 11, 1144}, + dictWord{134, 0, 1049}, + dictWord{7, 0, 321}, + dictWord{6, 10, 17}, + dictWord{7, 10, 1001}, + dictWord{7, 10, 1982}, + dictWord{ + 9, + 10, + 886, + }, + dictWord{10, 10, 489}, + dictWord{10, 10, 800}, + dictWord{11, 10, 782}, + dictWord{12, 10, 320}, + dictWord{13, 10, 467}, + dictWord{14, 10, 145}, + dictWord{14, 10, 387}, + dictWord{143, 10, 119}, + dictWord{145, 10, 17}, + dictWord{5, 11, 407}, + dictWord{11, 11, 489}, + dictWord{19, 11, 37}, + dictWord{20, 11, 73}, + dictWord{150, 11, 38}, + dictWord{133, 10, 458}, + dictWord{135, 0, 1985}, + dictWord{7, 10, 1983}, + dictWord{8, 10, 0}, + dictWord{8, 10, 171}, + dictWord{ + 9, + 10, + 120, + }, + dictWord{9, 10, 732}, + dictWord{10, 10, 473}, + dictWord{11, 10, 656}, + dictWord{11, 10, 998}, + dictWord{18, 10, 0}, + dictWord{18, 10, 2}, + dictWord{ + 147, + 10, + 21, + }, + dictWord{5, 11, 325}, + dictWord{7, 11, 1483}, + dictWord{8, 11, 5}, + dictWord{8, 11, 227}, + dictWord{9, 11, 105}, + dictWord{10, 11, 585}, + dictWord{ + 140, + 11, + 614, + }, + dictWord{136, 0, 122}, + dictWord{132, 0, 234}, + dictWord{135, 11, 1196}, + dictWord{6, 0, 976}, + dictWord{6, 0, 1098}, + dictWord{134, 0, 1441}, + dictWord{ + 7, + 0, + 253, + }, + dictWord{136, 0, 549}, + dictWord{6, 11, 621}, + dictWord{13, 11, 504}, + dictWord{144, 11, 19}, + dictWord{132, 10, 519}, + dictWord{5, 0, 430}, + dictWord{ + 5, + 0, + 932, + }, + dictWord{6, 0, 131}, + dictWord{7, 0, 417}, + dictWord{9, 0, 522}, + dictWord{11, 0, 314}, + dictWord{141, 0, 390}, + dictWord{14, 0, 149}, + dictWord{14, 0, 399}, + dictWord{143, 0, 57}, + dictWord{5, 10, 907}, + dictWord{6, 10, 31}, + dictWord{6, 11, 218}, + dictWord{7, 10, 491}, + dictWord{7, 10, 530}, + dictWord{8, 10, 592}, + dictWord{11, 10, 53}, + dictWord{11, 10, 779}, + dictWord{12, 10, 167}, + dictWord{12, 10, 411}, + dictWord{14, 10, 14}, + dictWord{14, 10, 136}, + dictWord{15, 10, 72}, + dictWord{16, 10, 17}, + dictWord{144, 10, 72}, + dictWord{140, 11, 330}, + dictWord{7, 11, 454}, + dictWord{7, 11, 782}, + dictWord{136, 11, 768}, + dictWord{ + 132, + 0, + 507, + }, + dictWord{10, 11, 676}, + dictWord{140, 11, 462}, + dictWord{6, 0, 630}, + dictWord{9, 0, 811}, + dictWord{4, 10, 208}, + dictWord{5, 10, 106}, + dictWord{ + 6, + 10, + 531, + }, + dictWord{8, 10, 408}, + dictWord{9, 10, 188}, + dictWord{138, 10, 572}, + dictWord{4, 0, 343}, + dictWord{5, 0, 511}, + dictWord{134, 10, 1693}, + dictWord{ + 134, + 11, + 164, + }, + dictWord{132, 0, 448}, + dictWord{7, 0, 455}, + dictWord{138, 0, 591}, + dictWord{135, 0, 1381}, + dictWord{12, 10, 441}, + dictWord{150, 11, 50}, + dictWord{9, 10, 449}, + dictWord{10, 10, 192}, + dictWord{138, 10, 740}, + dictWord{6, 0, 575}, + dictWord{132, 10, 241}, + dictWord{134, 0, 1175}, + dictWord{ + 134, + 0, + 653, + }, + dictWord{134, 0, 1761}, + dictWord{134, 0, 1198}, + dictWord{132, 10, 259}, + dictWord{6, 11, 343}, + dictWord{7, 11, 195}, + dictWord{9, 11, 226}, + dictWord{ + 10, + 11, + 197, + }, + dictWord{10, 11, 575}, + dictWord{11, 11, 502}, + dictWord{139, 11, 899}, + dictWord{7, 0, 1127}, + dictWord{7, 0, 1572}, + dictWord{10, 0, 297}, + dictWord{10, 0, 422}, + dictWord{11, 0, 764}, + dictWord{11, 0, 810}, + dictWord{12, 0, 264}, + dictWord{13, 0, 102}, + dictWord{13, 0, 300}, + dictWord{13, 0, 484}, + dictWord{ + 14, + 0, + 147, + }, + dictWord{14, 0, 229}, + dictWord{17, 0, 71}, + dictWord{18, 0, 118}, + dictWord{147, 0, 120}, + dictWord{135, 11, 666}, + dictWord{132, 0, 678}, + dictWord{ + 4, + 10, + 173, + }, + dictWord{5, 10, 312}, + dictWord{5, 10, 512}, + dictWord{135, 10, 1285}, + dictWord{7, 10, 1603}, + dictWord{7, 10, 1691}, + dictWord{9, 10, 464}, + dictWord{11, 10, 195}, + dictWord{12, 10, 279}, + dictWord{12, 10, 448}, + dictWord{14, 10, 11}, + dictWord{147, 10, 102}, + dictWord{16, 0, 99}, + dictWord{146, 0, 164}, + dictWord{7, 11, 1125}, + dictWord{9, 11, 143}, + dictWord{11, 11, 61}, + dictWord{14, 11, 405}, + dictWord{150, 11, 21}, + dictWord{137, 11, 260}, + dictWord{ + 4, + 10, + 452, + }, + dictWord{5, 10, 583}, + dictWord{5, 10, 817}, + dictWord{6, 10, 433}, + dictWord{7, 10, 593}, + dictWord{7, 10, 720}, + dictWord{7, 10, 1378}, + dictWord{ + 8, + 10, + 161, + }, + dictWord{9, 10, 284}, + dictWord{10, 10, 313}, + dictWord{139, 10, 886}, + dictWord{132, 10, 547}, + dictWord{136, 10, 722}, + dictWord{14, 0, 35}, + dictWord{142, 0, 191}, + dictWord{141, 0, 45}, + dictWord{138, 0, 121}, + dictWord{132, 0, 125}, + dictWord{134, 0, 1622}, + dictWord{133, 11, 959}, + dictWord{ + 8, + 10, + 420, + }, + dictWord{139, 10, 193}, + dictWord{132, 0, 721}, + dictWord{135, 10, 409}, + dictWord{136, 0, 145}, + dictWord{7, 0, 792}, + dictWord{8, 0, 147}, + dictWord{ + 10, + 0, + 821, + }, + dictWord{11, 0, 970}, + dictWord{11, 0, 1021}, + dictWord{136, 11, 173}, + dictWord{134, 11, 266}, + dictWord{132, 0, 715}, + dictWord{7, 0, 1999}, + dictWord{138, 10, 308}, + dictWord{133, 0, 531}, + dictWord{5, 0, 168}, + dictWord{5, 0, 930}, + dictWord{8, 0, 74}, + dictWord{9, 0, 623}, + dictWord{12, 0, 500}, + dictWord{ + 140, + 0, + 579, + }, + dictWord{144, 0, 65}, + dictWord{138, 11, 246}, + dictWord{6, 0, 220}, + dictWord{7, 0, 1101}, + dictWord{13, 0, 105}, + dictWord{142, 11, 314}, + dictWord{ + 5, + 10, + 1002, + }, + dictWord{136, 10, 745}, + dictWord{134, 0, 960}, + dictWord{20, 0, 0}, + dictWord{148, 11, 0}, + dictWord{4, 0, 1005}, + dictWord{4, 10, 239}, + dictWord{ + 6, + 10, + 477, + }, + dictWord{7, 10, 1607}, + dictWord{11, 10, 68}, + dictWord{139, 10, 617}, + dictWord{6, 0, 19}, + dictWord{7, 0, 1413}, + dictWord{139, 0, 428}, + dictWord{ + 149, + 10, + 13, + }, + dictWord{7, 0, 96}, + dictWord{8, 0, 401}, + dictWord{8, 0, 703}, + dictWord{9, 0, 896}, + dictWord{136, 11, 300}, + dictWord{134, 0, 1595}, + dictWord{145, 0, 116}, + dictWord{136, 0, 1021}, + dictWord{7, 0, 1961}, + dictWord{7, 0, 1965}, + dictWord{7, 0, 2030}, + dictWord{8, 0, 150}, + dictWord{8, 0, 702}, + dictWord{8, 0, 737}, + dictWord{ + 8, + 0, + 750, + }, + dictWord{140, 0, 366}, + dictWord{11, 11, 75}, + dictWord{142, 11, 267}, + dictWord{132, 10, 367}, + dictWord{8, 0, 800}, + dictWord{9, 0, 148}, + dictWord{ + 9, + 0, + 872, + }, + dictWord{9, 0, 890}, + dictWord{11, 0, 309}, + dictWord{11, 0, 1001}, + dictWord{13, 0, 267}, + dictWord{13, 0, 323}, + dictWord{5, 11, 427}, + dictWord{ + 5, + 11, + 734, + }, + dictWord{7, 11, 478}, + dictWord{136, 11, 52}, + dictWord{7, 11, 239}, + dictWord{11, 11, 217}, + dictWord{142, 11, 165}, + dictWord{132, 11, 323}, + dictWord{140, 11, 419}, + dictWord{13, 0, 299}, + dictWord{142, 0, 75}, + dictWord{6, 11, 87}, + dictWord{6, 11, 1734}, + dictWord{7, 11, 20}, + dictWord{7, 11, 1056}, + dictWord{ + 8, + 11, + 732, + }, + dictWord{9, 11, 406}, + dictWord{9, 11, 911}, + dictWord{138, 11, 694}, + dictWord{134, 0, 1383}, + dictWord{132, 10, 694}, + dictWord{ + 133, + 11, + 613, + }, + dictWord{137, 0, 779}, + dictWord{4, 0, 598}, + dictWord{140, 10, 687}, + dictWord{6, 0, 970}, + dictWord{135, 0, 424}, + dictWord{133, 0, 547}, + dictWord{ + 7, + 11, + 32, + }, + dictWord{7, 11, 984}, + dictWord{8, 11, 85}, + dictWord{8, 11, 709}, + dictWord{9, 11, 579}, + dictWord{9, 11, 847}, + dictWord{9, 11, 856}, + dictWord{10, 11, 799}, + dictWord{11, 11, 258}, + dictWord{11, 11, 1007}, + dictWord{12, 11, 331}, + dictWord{12, 11, 615}, + dictWord{13, 11, 188}, + dictWord{13, 11, 435}, + dictWord{ + 14, + 11, + 8, + }, + dictWord{15, 11, 165}, + dictWord{16, 11, 27}, + dictWord{148, 11, 40}, + dictWord{6, 0, 1222}, + dictWord{134, 0, 1385}, + dictWord{132, 0, 876}, + dictWord{ + 138, + 11, + 151, + }, + dictWord{135, 10, 213}, + dictWord{4, 11, 167}, + dictWord{135, 11, 82}, + dictWord{133, 0, 133}, + dictWord{6, 11, 24}, + dictWord{7, 11, 74}, + dictWord{ + 7, + 11, + 678, + }, + dictWord{137, 11, 258}, + dictWord{5, 11, 62}, + dictWord{6, 11, 534}, + dictWord{7, 11, 684}, + dictWord{7, 11, 1043}, + dictWord{7, 11, 1072}, + dictWord{ + 8, + 11, + 280, + }, + dictWord{8, 11, 541}, + dictWord{8, 11, 686}, + dictWord{10, 11, 519}, + dictWord{11, 11, 252}, + dictWord{140, 11, 282}, + dictWord{136, 0, 187}, + dictWord{8, 0, 8}, + dictWord{10, 0, 0}, + dictWord{10, 0, 818}, + dictWord{139, 0, 988}, + dictWord{132, 11, 359}, + dictWord{11, 0, 429}, + dictWord{15, 0, 51}, + dictWord{ + 135, + 10, + 1672, + }, + dictWord{136, 0, 685}, + dictWord{5, 11, 211}, + dictWord{7, 11, 88}, + dictWord{136, 11, 627}, + dictWord{134, 0, 472}, + dictWord{136, 0, 132}, + dictWord{ + 6, + 11, + 145, + }, + dictWord{141, 11, 336}, + dictWord{4, 10, 751}, + dictWord{11, 10, 390}, + dictWord{140, 10, 32}, + dictWord{6, 0, 938}, + dictWord{6, 0, 1060}, + dictWord{ + 4, + 11, + 263, + }, + dictWord{4, 10, 409}, + dictWord{133, 10, 78}, + dictWord{137, 0, 874}, + dictWord{8, 0, 774}, + dictWord{10, 0, 670}, + dictWord{12, 0, 51}, + dictWord{ + 4, + 11, + 916, + }, + dictWord{6, 10, 473}, + dictWord{7, 10, 1602}, + dictWord{10, 10, 698}, + dictWord{12, 10, 212}, + dictWord{13, 10, 307}, + dictWord{145, 10, 105}, + dictWord{146, 0, 92}, + dictWord{143, 10, 156}, + dictWord{132, 0, 830}, + dictWord{137, 0, 701}, + dictWord{4, 11, 599}, + dictWord{6, 11, 1634}, + dictWord{7, 11, 5}, + dictWord{7, 11, 55}, + dictWord{7, 11, 67}, + dictWord{7, 11, 97}, + dictWord{7, 11, 691}, + dictWord{7, 11, 979}, + dictWord{7, 11, 1697}, + dictWord{8, 11, 207}, + dictWord{ + 8, + 11, + 214, + }, + dictWord{8, 11, 231}, + dictWord{8, 11, 294}, + dictWord{8, 11, 336}, + dictWord{8, 11, 428}, + dictWord{8, 11, 451}, + dictWord{8, 11, 460}, + dictWord{8, 11, 471}, + dictWord{8, 11, 622}, + dictWord{8, 11, 626}, + dictWord{8, 11, 679}, + dictWord{8, 11, 759}, + dictWord{8, 11, 829}, + dictWord{9, 11, 11}, + dictWord{9, 11, 246}, + dictWord{ + 9, + 11, + 484, + }, + dictWord{9, 11, 573}, + dictWord{9, 11, 706}, + dictWord{9, 11, 762}, + dictWord{9, 11, 798}, + dictWord{9, 11, 855}, + dictWord{9, 11, 870}, + dictWord{ + 9, + 11, + 912, + }, + dictWord{10, 11, 303}, + dictWord{10, 11, 335}, + dictWord{10, 11, 424}, + dictWord{10, 11, 461}, + dictWord{10, 11, 543}, + dictWord{10, 11, 759}, + dictWord{10, 11, 814}, + dictWord{11, 11, 59}, + dictWord{11, 11, 199}, + dictWord{11, 11, 235}, + dictWord{11, 11, 475}, + dictWord{11, 11, 590}, + dictWord{11, 11, 929}, + dictWord{11, 11, 963}, + dictWord{12, 11, 114}, + dictWord{12, 11, 182}, + dictWord{12, 11, 226}, + dictWord{12, 11, 332}, + dictWord{12, 11, 439}, + dictWord{ + 12, + 11, + 575, + }, + dictWord{12, 11, 598}, + dictWord{13, 11, 8}, + dictWord{13, 11, 125}, + dictWord{13, 11, 194}, + dictWord{13, 11, 287}, + dictWord{14, 11, 197}, + dictWord{ + 14, + 11, + 383, + }, + dictWord{15, 11, 53}, + dictWord{17, 11, 63}, + dictWord{19, 11, 46}, + dictWord{19, 11, 98}, + dictWord{19, 11, 106}, + dictWord{148, 11, 85}, + dictWord{ + 4, + 0, + 127, + }, + dictWord{5, 0, 350}, + dictWord{6, 0, 356}, + dictWord{8, 0, 426}, + dictWord{9, 0, 572}, + dictWord{10, 0, 247}, + dictWord{139, 0, 312}, + dictWord{134, 0, 1215}, + dictWord{6, 0, 59}, + dictWord{9, 0, 603}, + dictWord{13, 0, 397}, + dictWord{7, 11, 1853}, + dictWord{138, 11, 437}, + dictWord{134, 0, 1762}, + dictWord{ + 147, + 11, + 126, + }, + dictWord{135, 10, 883}, + dictWord{13, 0, 293}, + dictWord{142, 0, 56}, + dictWord{133, 10, 617}, + dictWord{139, 10, 50}, + dictWord{5, 11, 187}, + dictWord{ + 7, + 10, + 1518, + }, + dictWord{139, 10, 694}, + dictWord{135, 0, 441}, + dictWord{6, 0, 111}, + dictWord{7, 0, 4}, + dictWord{8, 0, 163}, + dictWord{8, 0, 776}, + dictWord{ + 138, + 0, + 566, + }, + dictWord{132, 0, 806}, + dictWord{4, 11, 215}, + dictWord{9, 11, 38}, + dictWord{10, 11, 3}, + dictWord{11, 11, 23}, + dictWord{11, 11, 127}, + dictWord{ + 139, + 11, + 796, + }, + dictWord{14, 0, 233}, + dictWord{4, 10, 546}, + dictWord{135, 10, 2042}, + dictWord{135, 0, 1994}, + dictWord{134, 0, 1739}, + dictWord{135, 11, 1530}, + dictWord{136, 0, 393}, + dictWord{5, 0, 297}, + dictWord{7, 0, 1038}, + dictWord{14, 0, 359}, + dictWord{19, 0, 52}, + dictWord{148, 0, 47}, + dictWord{135, 0, 309}, + dictWord{ + 4, + 10, + 313, + }, + dictWord{133, 10, 577}, + dictWord{8, 10, 184}, + dictWord{141, 10, 433}, + dictWord{135, 10, 935}, + dictWord{12, 10, 186}, + dictWord{ + 12, + 10, + 292, + }, + dictWord{14, 10, 100}, + dictWord{146, 10, 70}, + dictWord{136, 0, 363}, + dictWord{14, 0, 175}, + dictWord{11, 10, 402}, + dictWord{12, 10, 109}, + dictWord{ + 12, + 10, + 431, + }, + dictWord{13, 10, 179}, + dictWord{13, 10, 206}, + dictWord{14, 10, 217}, + dictWord{16, 10, 3}, + dictWord{148, 10, 53}, + dictWord{5, 10, 886}, + dictWord{ + 6, + 10, + 46, + }, + dictWord{6, 10, 1790}, + dictWord{7, 10, 14}, + dictWord{7, 10, 732}, + dictWord{7, 10, 1654}, + dictWord{8, 10, 95}, + dictWord{8, 10, 327}, + dictWord{ + 8, + 10, + 616, + }, + dictWord{9, 10, 892}, + dictWord{10, 10, 598}, + dictWord{10, 10, 769}, + dictWord{11, 10, 134}, + dictWord{11, 10, 747}, + dictWord{12, 10, 378}, + dictWord{ + 142, + 10, + 97, + }, + dictWord{136, 0, 666}, + dictWord{135, 0, 1675}, + dictWord{6, 0, 655}, + dictWord{134, 0, 1600}, + dictWord{135, 0, 808}, + dictWord{133, 10, 1021}, + dictWord{4, 11, 28}, + dictWord{5, 11, 440}, + dictWord{7, 11, 248}, + dictWord{11, 11, 833}, + dictWord{140, 11, 344}, + dictWord{134, 11, 1654}, + dictWord{ + 132, + 0, + 280, + }, + dictWord{140, 0, 54}, + dictWord{4, 0, 421}, + dictWord{133, 0, 548}, + dictWord{132, 10, 153}, + dictWord{6, 11, 339}, + dictWord{135, 11, 923}, + dictWord{ + 133, + 11, + 853, + }, + dictWord{133, 10, 798}, + dictWord{132, 10, 587}, + dictWord{6, 11, 249}, + dictWord{7, 11, 1234}, + dictWord{139, 11, 573}, + dictWord{6, 10, 598}, + dictWord{7, 10, 42}, + dictWord{8, 10, 695}, + dictWord{10, 10, 212}, + dictWord{11, 10, 158}, + dictWord{14, 10, 196}, + dictWord{145, 10, 85}, + dictWord{7, 0, 249}, + dictWord{5, 10, 957}, + dictWord{133, 10, 1008}, + dictWord{4, 10, 129}, + dictWord{135, 10, 465}, + dictWord{6, 0, 254}, + dictWord{7, 0, 842}, + dictWord{7, 0, 1659}, + dictWord{9, 0, 109}, + dictWord{10, 0, 103}, + dictWord{7, 10, 908}, + dictWord{7, 10, 1201}, + dictWord{9, 10, 755}, + dictWord{11, 10, 906}, + dictWord{12, 10, 527}, + dictWord{146, 10, 7}, + dictWord{5, 0, 262}, + dictWord{136, 10, 450}, + dictWord{144, 0, 1}, + dictWord{10, 11, 201}, + dictWord{142, 11, 319}, + dictWord{7, 11, 49}, + dictWord{ + 7, + 11, + 392, + }, + dictWord{8, 11, 20}, + dictWord{8, 11, 172}, + dictWord{8, 11, 690}, + dictWord{9, 11, 383}, + dictWord{9, 11, 845}, + dictWord{10, 11, 48}, + dictWord{ + 11, + 11, + 293, + }, + dictWord{11, 11, 832}, + dictWord{11, 11, 920}, + dictWord{141, 11, 221}, + dictWord{5, 11, 858}, + dictWord{133, 11, 992}, + dictWord{134, 0, 805}, + dictWord{139, 10, 1003}, + dictWord{6, 0, 1630}, + dictWord{134, 11, 307}, + dictWord{7, 11, 1512}, + dictWord{135, 11, 1794}, + dictWord{6, 11, 268}, + dictWord{ + 137, + 11, + 62, + }, + dictWord{135, 10, 1868}, + dictWord{133, 0, 671}, + dictWord{4, 0, 989}, + dictWord{8, 0, 972}, + dictWord{136, 0, 998}, + dictWord{132, 11, 423}, + dictWord{132, 0, 889}, + dictWord{135, 0, 1382}, + dictWord{135, 0, 1910}, + dictWord{7, 10, 965}, + dictWord{7, 10, 1460}, + dictWord{135, 10, 1604}, + dictWord{ + 4, + 0, + 627, + }, + dictWord{5, 0, 775}, + dictWord{138, 11, 106}, + dictWord{134, 11, 348}, + dictWord{7, 0, 202}, + dictWord{11, 0, 362}, + dictWord{11, 0, 948}, + dictWord{ + 140, + 0, + 388, + }, + dictWord{138, 11, 771}, + dictWord{6, 11, 613}, + dictWord{136, 11, 223}, + dictWord{6, 0, 560}, + dictWord{7, 0, 451}, + dictWord{8, 0, 389}, + dictWord{ + 12, + 0, + 490, + }, + dictWord{13, 0, 16}, + dictWord{13, 0, 215}, + dictWord{13, 0, 351}, + dictWord{18, 0, 132}, + dictWord{147, 0, 125}, + dictWord{135, 0, 841}, + dictWord{ + 136, + 0, + 566, + }, + dictWord{136, 0, 938}, + dictWord{132, 11, 670}, + dictWord{5, 0, 912}, + dictWord{6, 0, 1695}, + dictWord{140, 11, 55}, + dictWord{9, 11, 40}, + dictWord{ + 139, + 11, + 136, + }, + dictWord{7, 0, 1361}, + dictWord{7, 10, 982}, + dictWord{10, 10, 32}, + dictWord{143, 10, 56}, + dictWord{11, 11, 259}, + dictWord{140, 11, 270}, + dictWord{ + 5, + 0, + 236, + }, + dictWord{6, 0, 572}, + dictWord{8, 0, 492}, + dictWord{11, 0, 618}, + dictWord{144, 0, 56}, + dictWord{8, 11, 572}, + dictWord{9, 11, 310}, + dictWord{9, 11, 682}, + dictWord{137, 11, 698}, + dictWord{134, 0, 1854}, + dictWord{5, 0, 190}, + dictWord{136, 0, 318}, + dictWord{133, 10, 435}, + dictWord{135, 0, 1376}, + dictWord{ + 4, + 11, + 296, + }, + dictWord{6, 11, 352}, + dictWord{7, 11, 401}, + dictWord{7, 11, 1410}, + dictWord{7, 11, 1594}, + dictWord{7, 11, 1674}, + dictWord{8, 11, 63}, + dictWord{ + 8, + 11, + 660, + }, + dictWord{137, 11, 74}, + dictWord{7, 0, 349}, + dictWord{5, 10, 85}, + dictWord{6, 10, 419}, + dictWord{7, 10, 305}, + dictWord{7, 10, 361}, + dictWord{7, 10, 1337}, + dictWord{8, 10, 71}, + dictWord{140, 10, 519}, + dictWord{4, 11, 139}, + dictWord{4, 11, 388}, + dictWord{140, 11, 188}, + dictWord{6, 0, 1972}, + dictWord{6, 0, 2013}, + dictWord{8, 0, 951}, + dictWord{10, 0, 947}, + dictWord{10, 0, 974}, + dictWord{10, 0, 1018}, + dictWord{142, 0, 476}, + dictWord{140, 10, 688}, + dictWord{ + 135, + 10, + 740, + }, + dictWord{5, 10, 691}, + dictWord{7, 10, 345}, + dictWord{9, 10, 94}, + dictWord{140, 10, 169}, + dictWord{9, 0, 344}, + dictWord{5, 10, 183}, + dictWord{6, 10, 582}, + dictWord{10, 10, 679}, + dictWord{140, 10, 435}, + dictWord{135, 10, 511}, + dictWord{132, 0, 850}, + dictWord{8, 11, 441}, + dictWord{10, 11, 314}, + dictWord{ + 143, + 11, + 3, + }, + dictWord{7, 10, 1993}, + dictWord{136, 10, 684}, + dictWord{4, 11, 747}, + dictWord{6, 11, 290}, + dictWord{6, 10, 583}, + dictWord{7, 11, 649}, + dictWord{ + 7, + 11, + 1479, + }, + dictWord{135, 11, 1583}, + dictWord{133, 11, 232}, + dictWord{133, 10, 704}, + dictWord{134, 0, 910}, + dictWord{4, 10, 179}, + dictWord{5, 10, 198}, + dictWord{133, 10, 697}, + dictWord{7, 10, 347}, + dictWord{7, 10, 971}, + dictWord{8, 10, 181}, + dictWord{138, 10, 711}, + dictWord{136, 11, 525}, + dictWord{ + 14, + 0, + 19, + }, + dictWord{14, 0, 28}, + dictWord{144, 0, 29}, + dictWord{7, 0, 85}, + dictWord{7, 0, 247}, + dictWord{8, 0, 585}, + dictWord{138, 0, 163}, + dictWord{4, 0, 487}, + dictWord{ + 7, + 11, + 472, + }, + dictWord{7, 11, 1801}, + dictWord{10, 11, 748}, + dictWord{141, 11, 458}, + dictWord{4, 10, 243}, + dictWord{5, 10, 203}, + dictWord{7, 10, 19}, + dictWord{ + 7, + 10, + 71, + }, + dictWord{7, 10, 113}, + dictWord{10, 10, 405}, + dictWord{11, 10, 357}, + dictWord{142, 10, 240}, + dictWord{7, 10, 1450}, + dictWord{139, 10, 99}, + dictWord{132, 11, 425}, + dictWord{138, 0, 145}, + dictWord{147, 0, 83}, + dictWord{6, 10, 492}, + dictWord{137, 11, 247}, + dictWord{4, 0, 1013}, + dictWord{ + 134, + 0, + 2033, + }, + dictWord{5, 10, 134}, + dictWord{6, 10, 408}, + dictWord{6, 10, 495}, + dictWord{135, 10, 1593}, + dictWord{135, 0, 1922}, + dictWord{134, 11, 1768}, + dictWord{4, 0, 124}, + dictWord{10, 0, 457}, + dictWord{11, 0, 121}, + dictWord{11, 0, 169}, + dictWord{11, 0, 870}, + dictWord{11, 0, 874}, + dictWord{12, 0, 214}, + dictWord{ + 14, + 0, + 187, + }, + dictWord{143, 0, 77}, + dictWord{5, 0, 557}, + dictWord{135, 0, 1457}, + dictWord{139, 0, 66}, + dictWord{5, 11, 943}, + dictWord{6, 11, 1779}, + dictWord{ + 142, + 10, + 4, + }, + dictWord{4, 10, 248}, + dictWord{4, 10, 665}, + dictWord{7, 10, 137}, + dictWord{137, 10, 349}, + dictWord{7, 0, 1193}, + dictWord{5, 11, 245}, + dictWord{ + 6, + 11, + 576, + }, + dictWord{7, 11, 582}, + dictWord{136, 11, 225}, + dictWord{144, 0, 82}, + dictWord{7, 10, 1270}, + dictWord{139, 10, 612}, + dictWord{5, 0, 454}, + dictWord{ + 10, + 0, + 352, + }, + dictWord{138, 11, 352}, + dictWord{18, 0, 57}, + dictWord{5, 10, 371}, + dictWord{135, 10, 563}, + dictWord{135, 0, 1333}, + dictWord{6, 0, 107}, + dictWord{ + 7, + 0, + 638, + }, + dictWord{7, 0, 1632}, + dictWord{9, 0, 396}, + dictWord{134, 11, 610}, + dictWord{5, 0, 370}, + dictWord{134, 0, 1756}, + dictWord{4, 10, 374}, + dictWord{ + 7, + 10, + 547, + }, + dictWord{7, 10, 1700}, + dictWord{7, 10, 1833}, + dictWord{139, 10, 858}, + dictWord{133, 0, 204}, + dictWord{6, 0, 1305}, + dictWord{9, 10, 311}, + dictWord{ + 141, + 10, + 42, + }, + dictWord{5, 0, 970}, + dictWord{134, 0, 1706}, + dictWord{6, 10, 1647}, + dictWord{7, 10, 1552}, + dictWord{7, 10, 2010}, + dictWord{9, 10, 494}, + dictWord{137, 10, 509}, + dictWord{13, 11, 455}, + dictWord{15, 11, 99}, + dictWord{15, 11, 129}, + dictWord{144, 11, 68}, + dictWord{135, 0, 3}, + dictWord{4, 0, 35}, + dictWord{ + 5, + 0, + 121, + }, + dictWord{5, 0, 483}, + dictWord{5, 0, 685}, + dictWord{6, 0, 489}, + dictWord{6, 0, 782}, + dictWord{6, 0, 1032}, + dictWord{7, 0, 1204}, + dictWord{136, 0, 394}, + dictWord{4, 0, 921}, + dictWord{133, 0, 1007}, + dictWord{8, 11, 360}, + dictWord{138, 11, 63}, + dictWord{135, 0, 1696}, + dictWord{134, 0, 1519}, + dictWord{ + 132, + 11, + 443, + }, + dictWord{135, 11, 944}, + dictWord{6, 10, 123}, + dictWord{7, 10, 214}, + dictWord{9, 10, 728}, + dictWord{10, 10, 157}, + dictWord{11, 10, 346}, + dictWord{11, 10, 662}, + dictWord{143, 10, 106}, + dictWord{137, 0, 981}, + dictWord{135, 10, 1435}, + dictWord{134, 0, 1072}, + dictWord{132, 0, 712}, + dictWord{ + 134, + 0, + 1629, + }, + dictWord{134, 0, 728}, + dictWord{4, 11, 298}, + dictWord{137, 11, 483}, + dictWord{6, 0, 1177}, + dictWord{6, 0, 1271}, + dictWord{5, 11, 164}, + dictWord{ + 7, + 11, + 121, + }, + dictWord{142, 11, 189}, + dictWord{7, 0, 1608}, + dictWord{4, 10, 707}, + dictWord{5, 10, 588}, + dictWord{6, 10, 393}, + dictWord{13, 10, 106}, + dictWord{ + 18, + 10, + 49, + }, + dictWord{147, 10, 41}, + dictWord{23, 0, 16}, + dictWord{151, 11, 16}, + dictWord{6, 10, 211}, + dictWord{7, 10, 1690}, + dictWord{11, 10, 486}, + dictWord{140, 10, 369}, + dictWord{133, 0, 485}, + dictWord{19, 11, 15}, + dictWord{149, 11, 27}, + dictWord{4, 11, 172}, + dictWord{9, 11, 611}, + dictWord{10, 11, 436}, + dictWord{12, 11, 673}, + dictWord{141, 11, 255}, + dictWord{5, 11, 844}, + dictWord{10, 11, 484}, + dictWord{11, 11, 754}, + dictWord{12, 11, 457}, + dictWord{ + 14, + 11, + 171, + }, + dictWord{14, 11, 389}, + dictWord{146, 11, 153}, + dictWord{4, 0, 285}, + dictWord{5, 0, 27}, + dictWord{5, 0, 317}, + dictWord{6, 0, 301}, + dictWord{7, 0, 7}, + dictWord{ + 8, + 0, + 153, + }, + dictWord{10, 0, 766}, + dictWord{11, 0, 468}, + dictWord{12, 0, 467}, + dictWord{141, 0, 143}, + dictWord{134, 0, 1462}, + dictWord{9, 11, 263}, + dictWord{ + 10, + 11, + 147, + }, + dictWord{138, 11, 492}, + dictWord{133, 11, 537}, + dictWord{6, 0, 1945}, + dictWord{6, 0, 1986}, + dictWord{6, 0, 1991}, + dictWord{134, 0, 2038}, + dictWord{134, 10, 219}, + dictWord{137, 11, 842}, + dictWord{14, 0, 52}, + dictWord{17, 0, 50}, + dictWord{5, 10, 582}, + dictWord{6, 10, 1646}, + dictWord{7, 10, 99}, + dictWord{7, 10, 1962}, + dictWord{7, 10, 1986}, + dictWord{8, 10, 515}, + dictWord{8, 10, 773}, + dictWord{9, 10, 23}, + dictWord{9, 10, 491}, + dictWord{12, 10, 620}, + dictWord{142, 10, 93}, + dictWord{138, 11, 97}, + dictWord{20, 0, 21}, + dictWord{20, 0, 44}, + dictWord{133, 10, 851}, + dictWord{136, 0, 819}, + dictWord{139, 0, 917}, + dictWord{5, 11, 230}, + dictWord{5, 11, 392}, + dictWord{6, 11, 420}, + dictWord{8, 10, 762}, + dictWord{8, 10, 812}, + dictWord{9, 11, 568}, + dictWord{9, 10, 910}, + dictWord{140, 11, 612}, + dictWord{135, 0, 784}, + dictWord{15, 0, 135}, + dictWord{143, 11, 135}, + dictWord{10, 0, 454}, + dictWord{140, 0, 324}, + dictWord{4, 11, 0}, + dictWord{5, 11, 41}, + dictWord{7, 11, 1459}, + dictWord{7, 11, 1469}, + dictWord{7, 11, 1618}, + dictWord{7, 11, 1859}, + dictWord{9, 11, 549}, + dictWord{139, 11, 905}, + dictWord{4, 10, 98}, + dictWord{7, 10, 1365}, + dictWord{9, 10, 422}, + dictWord{9, 10, 670}, + dictWord{10, 10, 775}, + dictWord{11, 10, 210}, + dictWord{13, 10, 26}, + dictWord{13, 10, 457}, + dictWord{141, 10, 476}, + dictWord{6, 0, 1719}, + dictWord{6, 0, 1735}, + dictWord{7, 0, 2016}, + dictWord{7, 0, 2020}, + dictWord{8, 0, 837}, + dictWord{137, 0, 852}, + dictWord{133, 11, 696}, + dictWord{135, 0, 852}, + dictWord{132, 0, 952}, + dictWord{134, 10, 1730}, + dictWord{132, 11, 771}, + dictWord{ + 138, + 0, + 568, + }, + dictWord{137, 0, 448}, + dictWord{139, 0, 146}, + dictWord{8, 0, 67}, + dictWord{138, 0, 419}, + dictWord{133, 11, 921}, + dictWord{137, 10, 147}, + dictWord{134, 0, 1826}, + dictWord{10, 0, 657}, + dictWord{14, 0, 297}, + dictWord{142, 0, 361}, + dictWord{6, 0, 666}, + dictWord{6, 0, 767}, + dictWord{134, 0, 1542}, + dictWord{139, 0, 729}, + dictWord{6, 11, 180}, + dictWord{7, 11, 1137}, + dictWord{8, 11, 751}, + dictWord{139, 11, 805}, + dictWord{4, 11, 183}, + dictWord{7, 11, 271}, + dictWord{11, 11, 824}, + dictWord{11, 11, 952}, + dictWord{13, 11, 278}, + dictWord{13, 11, 339}, + dictWord{13, 11, 482}, + dictWord{14, 11, 424}, + dictWord{ + 148, + 11, + 99, + }, + dictWord{4, 0, 669}, + dictWord{5, 11, 477}, + dictWord{5, 11, 596}, + dictWord{6, 11, 505}, + dictWord{7, 11, 1221}, + dictWord{11, 11, 907}, + dictWord{ + 12, + 11, + 209, + }, + dictWord{141, 11, 214}, + dictWord{135, 11, 1215}, + dictWord{5, 0, 402}, + dictWord{6, 10, 30}, + dictWord{11, 10, 56}, + dictWord{139, 10, 305}, + dictWord{ + 7, + 11, + 564, + }, + dictWord{142, 11, 168}, + dictWord{139, 0, 152}, + dictWord{7, 0, 912}, + dictWord{135, 10, 1614}, + dictWord{4, 10, 150}, + dictWord{5, 10, 303}, + dictWord{134, 10, 327}, + dictWord{7, 0, 320}, + dictWord{8, 0, 51}, + dictWord{9, 0, 868}, + dictWord{10, 0, 833}, + dictWord{12, 0, 481}, + dictWord{12, 0, 570}, + dictWord{ + 148, + 0, + 106, + }, + dictWord{132, 0, 445}, + dictWord{7, 11, 274}, + dictWord{11, 11, 263}, + dictWord{11, 11, 479}, + dictWord{11, 11, 507}, + dictWord{140, 11, 277}, + dictWord{10, 0, 555}, + dictWord{11, 0, 308}, + dictWord{19, 0, 95}, + dictWord{6, 11, 1645}, + dictWord{8, 10, 192}, + dictWord{10, 10, 78}, + dictWord{141, 10, 359}, + dictWord{135, 10, 786}, + dictWord{6, 11, 92}, + dictWord{6, 11, 188}, + dictWord{7, 11, 1269}, + dictWord{7, 11, 1524}, + dictWord{7, 11, 1876}, + dictWord{10, 11, 228}, + dictWord{139, 11, 1020}, + dictWord{4, 11, 459}, + dictWord{133, 11, 966}, + dictWord{11, 0, 386}, + dictWord{6, 10, 1638}, + dictWord{7, 10, 79}, + dictWord{ + 7, + 10, + 496, + }, + dictWord{9, 10, 138}, + dictWord{10, 10, 336}, + dictWord{12, 10, 412}, + dictWord{12, 10, 440}, + dictWord{142, 10, 305}, + dictWord{133, 0, 239}, + dictWord{ + 7, + 0, + 83, + }, + dictWord{7, 0, 1990}, + dictWord{8, 0, 130}, + dictWord{139, 0, 720}, + dictWord{138, 11, 709}, + dictWord{4, 0, 143}, + dictWord{5, 0, 550}, + dictWord{ + 133, + 0, + 752, + }, + dictWord{5, 0, 123}, + dictWord{6, 0, 530}, + dictWord{7, 0, 348}, + dictWord{135, 0, 1419}, + dictWord{135, 0, 2024}, + dictWord{6, 11, 18}, + dictWord{7, 11, 179}, + dictWord{7, 11, 721}, + dictWord{7, 11, 932}, + dictWord{8, 11, 548}, + dictWord{8, 11, 757}, + dictWord{9, 11, 54}, + dictWord{9, 11, 65}, + dictWord{9, 11, 532}, + dictWord{ + 9, + 11, + 844, + }, + dictWord{10, 11, 113}, + dictWord{10, 11, 117}, + dictWord{10, 11, 236}, + dictWord{10, 11, 315}, + dictWord{10, 11, 430}, + dictWord{10, 11, 798}, + dictWord{11, 11, 153}, + dictWord{11, 11, 351}, + dictWord{11, 11, 375}, + dictWord{12, 11, 78}, + dictWord{12, 11, 151}, + dictWord{12, 11, 392}, + dictWord{ + 14, + 11, + 248, + }, + dictWord{143, 11, 23}, + dictWord{7, 10, 204}, + dictWord{7, 10, 415}, + dictWord{8, 10, 42}, + dictWord{10, 10, 85}, + dictWord{139, 10, 564}, + dictWord{ + 134, + 0, + 958, + }, + dictWord{133, 11, 965}, + dictWord{132, 0, 210}, + dictWord{135, 11, 1429}, + dictWord{138, 11, 480}, + dictWord{134, 11, 182}, + dictWord{ + 139, + 11, + 345, + }, + dictWord{10, 11, 65}, + dictWord{10, 11, 488}, + dictWord{138, 11, 497}, + dictWord{4, 10, 3}, + dictWord{5, 10, 247}, + dictWord{5, 10, 644}, + dictWord{ + 7, + 10, + 744, + }, + dictWord{7, 10, 1207}, + dictWord{7, 10, 1225}, + dictWord{7, 10, 1909}, + dictWord{146, 10, 147}, + dictWord{132, 0, 430}, + dictWord{5, 10, 285}, + dictWord{ + 9, + 10, + 67, + }, + dictWord{13, 10, 473}, + dictWord{143, 10, 82}, + dictWord{144, 11, 16}, + dictWord{7, 11, 1162}, + dictWord{9, 11, 588}, + dictWord{10, 11, 260}, + dictWord{151, 10, 8}, + dictWord{133, 0, 213}, + dictWord{138, 0, 7}, + dictWord{135, 0, 801}, + dictWord{134, 11, 1786}, + dictWord{135, 11, 308}, + dictWord{6, 0, 936}, + dictWord{134, 0, 1289}, + dictWord{133, 0, 108}, + dictWord{132, 0, 885}, + dictWord{133, 0, 219}, + dictWord{139, 0, 587}, + dictWord{4, 0, 193}, + dictWord{5, 0, 916}, + dictWord{6, 0, 1041}, + dictWord{7, 0, 364}, + dictWord{10, 0, 398}, + dictWord{10, 0, 726}, + dictWord{11, 0, 317}, + dictWord{11, 0, 626}, + dictWord{12, 0, 142}, + dictWord{12, 0, 288}, + dictWord{12, 0, 678}, + dictWord{13, 0, 313}, + dictWord{15, 0, 113}, + dictWord{146, 0, 114}, + dictWord{135, 0, 1165}, + dictWord{6, 0, 241}, + dictWord{ + 9, + 0, + 342, + }, + dictWord{10, 0, 729}, + dictWord{11, 0, 284}, + dictWord{11, 0, 445}, + dictWord{11, 0, 651}, + dictWord{11, 0, 863}, + dictWord{13, 0, 398}, + dictWord{ + 146, + 0, + 99, + }, + dictWord{7, 0, 907}, + dictWord{136, 0, 832}, + dictWord{9, 0, 303}, + dictWord{4, 10, 29}, + dictWord{6, 10, 532}, + dictWord{7, 10, 1628}, + dictWord{7, 10, 1648}, + dictWord{9, 10, 350}, + dictWord{10, 10, 433}, + dictWord{11, 10, 97}, + dictWord{11, 10, 557}, + dictWord{11, 10, 745}, + dictWord{12, 10, 289}, + dictWord{ + 12, + 10, + 335, + }, + dictWord{12, 10, 348}, + dictWord{12, 10, 606}, + dictWord{13, 10, 116}, + dictWord{13, 10, 233}, + dictWord{13, 10, 466}, + dictWord{14, 10, 181}, + dictWord{ + 14, + 10, + 209, + }, + dictWord{14, 10, 232}, + dictWord{14, 10, 236}, + dictWord{14, 10, 300}, + dictWord{16, 10, 41}, + dictWord{148, 10, 97}, + dictWord{7, 11, 423}, + dictWord{7, 10, 1692}, + dictWord{136, 11, 588}, + dictWord{6, 0, 931}, + dictWord{134, 0, 1454}, + dictWord{5, 10, 501}, + dictWord{7, 10, 1704}, + dictWord{9, 10, 553}, + dictWord{11, 10, 520}, + dictWord{12, 10, 557}, + dictWord{141, 10, 249}, + dictWord{136, 11, 287}, + dictWord{4, 0, 562}, + dictWord{9, 0, 254}, + dictWord{ + 139, + 0, + 879, + }, + dictWord{132, 0, 786}, + dictWord{14, 11, 32}, + dictWord{18, 11, 85}, + dictWord{20, 11, 2}, + dictWord{152, 11, 16}, + dictWord{135, 0, 1294}, + dictWord{ + 7, + 11, + 723, + }, + dictWord{135, 11, 1135}, + dictWord{6, 0, 216}, + dictWord{7, 0, 901}, + dictWord{7, 0, 1343}, + dictWord{8, 0, 493}, + dictWord{134, 11, 403}, + dictWord{ + 7, + 11, + 719, + }, + dictWord{8, 11, 809}, + dictWord{136, 11, 834}, + dictWord{5, 11, 210}, + dictWord{6, 11, 213}, + dictWord{7, 11, 60}, + dictWord{10, 11, 364}, + dictWord{ + 139, + 11, + 135, + }, + dictWord{7, 0, 341}, + dictWord{11, 0, 219}, + dictWord{5, 11, 607}, + dictWord{8, 11, 326}, + dictWord{136, 11, 490}, + dictWord{4, 11, 701}, + dictWord{ + 5, + 11, + 472, + }, + dictWord{5, 11, 639}, + dictWord{7, 11, 1249}, + dictWord{9, 11, 758}, + dictWord{139, 11, 896}, + dictWord{135, 11, 380}, + dictWord{135, 11, 1947}, + dictWord{139, 0, 130}, + dictWord{135, 0, 1734}, + dictWord{10, 0, 115}, + dictWord{11, 0, 420}, + dictWord{12, 0, 154}, + dictWord{13, 0, 404}, + dictWord{14, 0, 346}, + dictWord{143, 0, 54}, + dictWord{134, 10, 129}, + dictWord{4, 11, 386}, + dictWord{7, 11, 41}, + dictWord{8, 11, 405}, + dictWord{9, 11, 497}, + dictWord{11, 11, 110}, + dictWord{11, 11, 360}, + dictWord{15, 11, 37}, + dictWord{144, 11, 84}, + dictWord{141, 11, 282}, + dictWord{5, 11, 46}, + dictWord{7, 11, 1452}, + dictWord{7, 11, 1480}, + dictWord{8, 11, 634}, + dictWord{140, 11, 472}, + dictWord{4, 11, 524}, + dictWord{136, 11, 810}, + dictWord{10, 11, 238}, + dictWord{141, 11, 33}, + dictWord{ + 133, + 0, + 604, + }, + dictWord{5, 0, 1011}, + dictWord{136, 0, 701}, + dictWord{8, 0, 856}, + dictWord{8, 0, 858}, + dictWord{8, 0, 879}, + dictWord{12, 0, 702}, + dictWord{142, 0, 447}, + dictWord{4, 0, 54}, + dictWord{5, 0, 666}, + dictWord{7, 0, 1039}, + dictWord{7, 0, 1130}, + dictWord{9, 0, 195}, + dictWord{138, 0, 302}, + dictWord{4, 10, 25}, + dictWord{ + 5, + 10, + 60, + }, + dictWord{6, 10, 504}, + dictWord{7, 10, 614}, + dictWord{7, 10, 1155}, + dictWord{140, 10, 0}, + dictWord{7, 10, 1248}, + dictWord{11, 10, 621}, + dictWord{ + 139, + 10, + 702, + }, + dictWord{133, 11, 997}, + dictWord{137, 10, 321}, + dictWord{134, 0, 1669}, + dictWord{134, 0, 1791}, + dictWord{4, 10, 379}, + dictWord{ + 135, + 10, + 1397, + }, + dictWord{138, 11, 372}, + dictWord{5, 11, 782}, + dictWord{5, 11, 829}, + dictWord{134, 11, 1738}, + dictWord{135, 0, 1228}, + dictWord{4, 10, 118}, + dictWord{6, 10, 274}, + dictWord{6, 10, 361}, + dictWord{7, 10, 75}, + dictWord{141, 10, 441}, + dictWord{132, 0, 623}, + dictWord{9, 11, 279}, + dictWord{10, 11, 407}, + dictWord{14, 11, 84}, + dictWord{150, 11, 18}, + dictWord{137, 10, 841}, + dictWord{135, 0, 798}, + dictWord{140, 10, 693}, + dictWord{5, 10, 314}, + dictWord{6, 10, 221}, + dictWord{7, 10, 419}, + dictWord{10, 10, 650}, + dictWord{11, 10, 396}, + dictWord{12, 10, 156}, + dictWord{13, 10, 369}, + dictWord{14, 10, 333}, + dictWord{ + 145, + 10, + 47, + }, + dictWord{135, 11, 1372}, + dictWord{7, 0, 122}, + dictWord{9, 0, 259}, + dictWord{10, 0, 84}, + dictWord{11, 0, 470}, + dictWord{12, 0, 541}, + dictWord{ + 141, + 0, + 379, + }, + dictWord{134, 0, 837}, + dictWord{8, 0, 1013}, + dictWord{4, 11, 78}, + dictWord{5, 11, 96}, + dictWord{5, 11, 182}, + dictWord{7, 11, 1724}, + dictWord{ + 7, + 11, + 1825, + }, + dictWord{10, 11, 394}, + dictWord{10, 11, 471}, + dictWord{11, 11, 532}, + dictWord{14, 11, 340}, + dictWord{145, 11, 88}, + dictWord{134, 0, 577}, + dictWord{135, 11, 1964}, + dictWord{132, 10, 913}, + dictWord{134, 0, 460}, + dictWord{8, 0, 891}, + dictWord{10, 0, 901}, + dictWord{10, 0, 919}, + dictWord{10, 0, 932}, + dictWord{12, 0, 715}, + dictWord{12, 0, 728}, + dictWord{12, 0, 777}, + dictWord{14, 0, 457}, + dictWord{144, 0, 103}, + dictWord{5, 0, 82}, + dictWord{5, 0, 131}, + dictWord{ + 7, + 0, + 1755, + }, + dictWord{8, 0, 31}, + dictWord{9, 0, 168}, + dictWord{9, 0, 764}, + dictWord{139, 0, 869}, + dictWord{136, 10, 475}, + dictWord{6, 0, 605}, + dictWord{ + 5, + 10, + 1016, + }, + dictWord{9, 11, 601}, + dictWord{9, 11, 619}, + dictWord{10, 11, 505}, + dictWord{10, 11, 732}, + dictWord{11, 11, 355}, + dictWord{140, 11, 139}, + dictWord{ + 7, + 10, + 602, + }, + dictWord{8, 10, 179}, + dictWord{10, 10, 781}, + dictWord{140, 10, 126}, + dictWord{134, 0, 1246}, + dictWord{6, 10, 329}, + dictWord{138, 10, 111}, + dictWord{6, 11, 215}, + dictWord{7, 11, 1028}, + dictWord{7, 11, 1473}, + dictWord{7, 11, 1721}, + dictWord{9, 11, 424}, + dictWord{138, 11, 779}, + dictWord{5, 0, 278}, + dictWord{137, 0, 68}, + dictWord{6, 0, 932}, + dictWord{6, 0, 1084}, + dictWord{144, 0, 86}, + dictWord{4, 0, 163}, + dictWord{5, 0, 201}, + dictWord{5, 0, 307}, + dictWord{ + 5, + 0, + 310, + }, + dictWord{6, 0, 335}, + dictWord{7, 0, 284}, + dictWord{7, 0, 1660}, + dictWord{136, 0, 165}, + dictWord{136, 0, 781}, + dictWord{134, 0, 707}, + dictWord{6, 0, 33}, + dictWord{135, 0, 1244}, + dictWord{5, 10, 821}, + dictWord{6, 11, 67}, + dictWord{6, 10, 1687}, + dictWord{7, 11, 258}, + dictWord{7, 11, 1630}, + dictWord{9, 11, 354}, + dictWord{9, 11, 675}, + dictWord{10, 11, 830}, + dictWord{14, 11, 80}, + dictWord{145, 11, 80}, + dictWord{6, 11, 141}, + dictWord{7, 11, 225}, + dictWord{9, 11, 59}, + dictWord{9, 11, 607}, + dictWord{10, 11, 312}, + dictWord{11, 11, 687}, + dictWord{12, 11, 555}, + dictWord{13, 11, 373}, + dictWord{13, 11, 494}, + dictWord{148, 11, 58}, + dictWord{134, 0, 1113}, + dictWord{9, 0, 388}, + dictWord{5, 10, 71}, + dictWord{7, 10, 1407}, + dictWord{9, 10, 704}, + dictWord{10, 10, 261}, + dictWord{10, 10, 619}, + dictWord{11, 10, 547}, + dictWord{11, 10, 619}, + dictWord{143, 10, 157}, + dictWord{7, 0, 1953}, + dictWord{136, 0, 720}, + dictWord{138, 0, 203}, + dictWord{ + 7, + 10, + 2008, + }, + dictWord{9, 10, 337}, + dictWord{138, 10, 517}, + dictWord{6, 0, 326}, + dictWord{7, 0, 677}, + dictWord{137, 0, 425}, + dictWord{139, 11, 81}, + dictWord{ + 7, + 0, + 1316, + }, + dictWord{7, 0, 1412}, + dictWord{7, 0, 1839}, + dictWord{9, 0, 589}, + dictWord{11, 0, 241}, + dictWord{11, 0, 676}, + dictWord{11, 0, 811}, + dictWord{11, 0, 891}, + dictWord{12, 0, 140}, + dictWord{12, 0, 346}, + dictWord{12, 0, 479}, + dictWord{13, 0, 140}, + dictWord{13, 0, 381}, + dictWord{14, 0, 188}, + dictWord{18, 0, 30}, + dictWord{148, 0, 108}, + dictWord{5, 0, 416}, + dictWord{6, 10, 86}, + dictWord{6, 10, 603}, + dictWord{7, 10, 292}, + dictWord{7, 10, 561}, + dictWord{8, 10, 257}, + dictWord{ + 8, + 10, + 382, + }, + dictWord{9, 10, 721}, + dictWord{9, 10, 778}, + dictWord{11, 10, 581}, + dictWord{140, 10, 466}, + dictWord{4, 10, 486}, + dictWord{133, 10, 491}, + dictWord{134, 0, 1300}, + dictWord{132, 10, 72}, + dictWord{7, 0, 847}, + dictWord{6, 10, 265}, + dictWord{7, 11, 430}, + dictWord{139, 11, 46}, + dictWord{5, 11, 602}, + dictWord{6, 11, 106}, + dictWord{7, 11, 1786}, + dictWord{7, 11, 1821}, + dictWord{7, 11, 2018}, + dictWord{9, 11, 418}, + dictWord{137, 11, 763}, + dictWord{5, 0, 358}, + dictWord{7, 0, 535}, + dictWord{7, 0, 1184}, + dictWord{10, 0, 662}, + dictWord{13, 0, 212}, + dictWord{13, 0, 304}, + dictWord{13, 0, 333}, + dictWord{145, 0, 98}, + dictWord{ + 5, + 11, + 65, + }, + dictWord{6, 11, 416}, + dictWord{7, 11, 1720}, + dictWord{7, 11, 1924}, + dictWord{8, 11, 677}, + dictWord{10, 11, 109}, + dictWord{11, 11, 14}, + dictWord{ + 11, + 11, + 70, + }, + dictWord{11, 11, 569}, + dictWord{11, 11, 735}, + dictWord{15, 11, 153}, + dictWord{148, 11, 80}, + dictWord{6, 0, 1823}, + dictWord{8, 0, 839}, + dictWord{ + 8, + 0, + 852, + }, + dictWord{8, 0, 903}, + dictWord{10, 0, 940}, + dictWord{12, 0, 707}, + dictWord{140, 0, 775}, + dictWord{135, 11, 1229}, + dictWord{6, 0, 1522}, + dictWord{ + 140, + 0, + 654, + }, + dictWord{136, 11, 595}, + dictWord{139, 0, 163}, + dictWord{141, 0, 314}, + dictWord{132, 0, 978}, + dictWord{4, 0, 601}, + dictWord{6, 0, 2035}, + dictWord{137, 10, 234}, + dictWord{5, 10, 815}, + dictWord{6, 10, 1688}, + dictWord{134, 10, 1755}, + dictWord{133, 0, 946}, + dictWord{136, 0, 434}, + dictWord{ + 6, + 10, + 197, + }, + dictWord{136, 10, 205}, + dictWord{7, 0, 411}, + dictWord{7, 0, 590}, + dictWord{8, 0, 631}, + dictWord{9, 0, 323}, + dictWord{10, 0, 355}, + dictWord{11, 0, 491}, + dictWord{12, 0, 143}, + dictWord{12, 0, 402}, + dictWord{13, 0, 73}, + dictWord{14, 0, 408}, + dictWord{15, 0, 107}, + dictWord{146, 0, 71}, + dictWord{7, 0, 1467}, + dictWord{ + 8, + 0, + 328, + }, + dictWord{10, 0, 544}, + dictWord{11, 0, 955}, + dictWord{12, 0, 13}, + dictWord{13, 0, 320}, + dictWord{145, 0, 83}, + dictWord{142, 0, 410}, + dictWord{ + 11, + 0, + 511, + }, + dictWord{13, 0, 394}, + dictWord{14, 0, 298}, + dictWord{14, 0, 318}, + dictWord{146, 0, 103}, + dictWord{6, 10, 452}, + dictWord{7, 10, 312}, + dictWord{ + 138, + 10, + 219, + }, + dictWord{138, 10, 589}, + dictWord{4, 10, 333}, + dictWord{9, 10, 176}, + dictWord{12, 10, 353}, + dictWord{141, 10, 187}, + dictWord{135, 11, 329}, + dictWord{132, 11, 469}, + dictWord{5, 0, 835}, + dictWord{134, 0, 483}, + dictWord{134, 11, 1743}, + dictWord{5, 11, 929}, + dictWord{6, 11, 340}, + dictWord{8, 11, 376}, + dictWord{136, 11, 807}, + dictWord{134, 10, 1685}, + dictWord{132, 0, 677}, + dictWord{5, 11, 218}, + dictWord{7, 11, 1610}, + dictWord{138, 11, 83}, + dictWord{ + 5, + 11, + 571, + }, + dictWord{135, 11, 1842}, + dictWord{132, 11, 455}, + dictWord{137, 0, 70}, + dictWord{135, 0, 1405}, + dictWord{7, 10, 135}, + dictWord{8, 10, 7}, + dictWord{ + 8, + 10, + 62, + }, + dictWord{9, 10, 243}, + dictWord{10, 10, 658}, + dictWord{10, 10, 697}, + dictWord{11, 10, 456}, + dictWord{139, 10, 756}, + dictWord{9, 10, 395}, + dictWord{138, 10, 79}, + dictWord{137, 0, 108}, + dictWord{6, 11, 161}, + dictWord{7, 11, 372}, + dictWord{137, 11, 597}, + dictWord{132, 11, 349}, + dictWord{ + 132, + 0, + 777, + }, + dictWord{132, 0, 331}, + dictWord{135, 10, 631}, + dictWord{133, 0, 747}, + dictWord{6, 11, 432}, + dictWord{6, 11, 608}, + dictWord{139, 11, 322}, + dictWord{138, 10, 835}, + dictWord{5, 11, 468}, + dictWord{7, 11, 1809}, + dictWord{10, 11, 325}, + dictWord{11, 11, 856}, + dictWord{12, 11, 345}, + dictWord{ + 143, + 11, + 104, + }, + dictWord{133, 11, 223}, + dictWord{7, 10, 406}, + dictWord{7, 10, 459}, + dictWord{8, 10, 606}, + dictWord{139, 10, 726}, + dictWord{132, 11, 566}, + dictWord{142, 0, 68}, + dictWord{4, 11, 59}, + dictWord{135, 11, 1394}, + dictWord{6, 11, 436}, + dictWord{139, 11, 481}, + dictWord{4, 11, 48}, + dictWord{5, 11, 271}, + dictWord{135, 11, 953}, + dictWord{139, 11, 170}, + dictWord{5, 11, 610}, + dictWord{136, 11, 457}, + dictWord{133, 11, 755}, + dictWord{135, 11, 1217}, + dictWord{ + 133, + 10, + 612, + }, + dictWord{132, 11, 197}, + dictWord{132, 0, 505}, + dictWord{4, 10, 372}, + dictWord{7, 10, 482}, + dictWord{8, 10, 158}, + dictWord{9, 10, 602}, + dictWord{ + 9, + 10, + 615, + }, + dictWord{10, 10, 245}, + dictWord{10, 10, 678}, + dictWord{10, 10, 744}, + dictWord{11, 10, 248}, + dictWord{139, 10, 806}, + dictWord{133, 0, 326}, + dictWord{5, 10, 854}, + dictWord{135, 10, 1991}, + dictWord{4, 0, 691}, + dictWord{146, 0, 16}, + dictWord{6, 0, 628}, + dictWord{9, 0, 35}, + dictWord{10, 0, 680}, + dictWord{10, 0, 793}, + dictWord{11, 0, 364}, + dictWord{13, 0, 357}, + dictWord{143, 0, 164}, + dictWord{138, 0, 654}, + dictWord{6, 0, 32}, + dictWord{7, 0, 385}, + dictWord{ + 7, + 0, + 757, + }, + dictWord{7, 0, 1916}, + dictWord{8, 0, 37}, + dictWord{8, 0, 94}, + dictWord{8, 0, 711}, + dictWord{9, 0, 541}, + dictWord{10, 0, 162}, + dictWord{10, 0, 795}, + dictWord{ + 11, + 0, + 989, + }, + dictWord{11, 0, 1010}, + dictWord{12, 0, 14}, + dictWord{142, 0, 308}, + dictWord{133, 11, 217}, + dictWord{6, 0, 152}, + dictWord{6, 0, 349}, + dictWord{ + 6, + 0, + 1682, + }, + dictWord{7, 0, 1252}, + dictWord{8, 0, 112}, + dictWord{9, 0, 435}, + dictWord{9, 0, 668}, + dictWord{10, 0, 290}, + dictWord{10, 0, 319}, + dictWord{10, 0, 815}, + dictWord{11, 0, 180}, + dictWord{11, 0, 837}, + dictWord{12, 0, 240}, + dictWord{13, 0, 152}, + dictWord{13, 0, 219}, + dictWord{142, 0, 158}, + dictWord{4, 0, 581}, + dictWord{134, 0, 726}, + dictWord{5, 10, 195}, + dictWord{135, 10, 1685}, + dictWord{6, 0, 126}, + dictWord{7, 0, 573}, + dictWord{8, 0, 397}, + dictWord{142, 0, 44}, + dictWord{138, 0, 89}, + dictWord{7, 10, 1997}, + dictWord{8, 10, 730}, + dictWord{139, 10, 1006}, + dictWord{134, 0, 1531}, + dictWord{134, 0, 1167}, + dictWord{ + 5, + 0, + 926, + }, + dictWord{12, 0, 203}, + dictWord{133, 10, 751}, + dictWord{4, 11, 165}, + dictWord{7, 11, 1398}, + dictWord{135, 11, 1829}, + dictWord{7, 0, 1232}, + dictWord{137, 0, 531}, + dictWord{135, 10, 821}, + dictWord{134, 0, 943}, + dictWord{133, 0, 670}, + dictWord{4, 0, 880}, + dictWord{139, 0, 231}, + dictWord{ + 134, + 0, + 1617, + }, + dictWord{135, 0, 1957}, + dictWord{5, 11, 9}, + dictWord{7, 11, 297}, + dictWord{7, 11, 966}, + dictWord{140, 11, 306}, + dictWord{6, 0, 975}, + dictWord{ + 134, + 0, + 985, + }, + dictWord{5, 10, 950}, + dictWord{5, 10, 994}, + dictWord{134, 10, 351}, + dictWord{12, 11, 21}, + dictWord{151, 11, 7}, + dictWord{5, 11, 146}, + dictWord{ + 6, + 11, + 411, + }, + dictWord{138, 11, 721}, + dictWord{7, 0, 242}, + dictWord{135, 0, 1942}, + dictWord{6, 11, 177}, + dictWord{135, 11, 467}, + dictWord{5, 0, 421}, + dictWord{ + 7, + 10, + 47, + }, + dictWord{137, 10, 684}, + dictWord{5, 0, 834}, + dictWord{7, 0, 1202}, + dictWord{8, 0, 14}, + dictWord{9, 0, 481}, + dictWord{137, 0, 880}, + dictWord{138, 0, 465}, + dictWord{6, 0, 688}, + dictWord{9, 0, 834}, + dictWord{132, 10, 350}, + dictWord{132, 0, 855}, + dictWord{4, 0, 357}, + dictWord{6, 0, 172}, + dictWord{7, 0, 143}, + dictWord{137, 0, 413}, + dictWord{133, 11, 200}, + dictWord{132, 0, 590}, + dictWord{7, 10, 1812}, + dictWord{13, 10, 259}, + dictWord{13, 10, 356}, + dictWord{ + 14, + 10, + 242, + }, + dictWord{147, 10, 114}, + dictWord{133, 10, 967}, + dictWord{11, 0, 114}, + dictWord{4, 10, 473}, + dictWord{7, 10, 623}, + dictWord{8, 10, 808}, + dictWord{ + 9, + 10, + 871, + }, + dictWord{9, 10, 893}, + dictWord{11, 10, 431}, + dictWord{12, 10, 112}, + dictWord{12, 10, 217}, + dictWord{12, 10, 243}, + dictWord{12, 10, 562}, + dictWord{ + 12, + 10, + 663, + }, + dictWord{12, 10, 683}, + dictWord{13, 10, 141}, + dictWord{13, 10, 197}, + dictWord{13, 10, 227}, + dictWord{13, 10, 406}, + dictWord{13, 10, 487}, + dictWord{14, 10, 156}, + dictWord{14, 10, 203}, + dictWord{14, 10, 224}, + dictWord{14, 10, 256}, + dictWord{18, 10, 58}, + dictWord{150, 10, 0}, + dictWord{ + 138, + 10, + 286, + }, + dictWord{4, 10, 222}, + dictWord{7, 10, 286}, + dictWord{136, 10, 629}, + dictWord{5, 0, 169}, + dictWord{7, 0, 333}, + dictWord{136, 0, 45}, + dictWord{ + 134, + 11, + 481, + }, + dictWord{132, 0, 198}, + dictWord{4, 0, 24}, + dictWord{5, 0, 140}, + dictWord{5, 0, 185}, + dictWord{7, 0, 1500}, + dictWord{11, 0, 565}, + dictWord{11, 0, 838}, + dictWord{4, 11, 84}, + dictWord{7, 11, 1482}, + dictWord{10, 11, 76}, + dictWord{138, 11, 142}, + dictWord{133, 0, 585}, + dictWord{141, 10, 306}, + dictWord{ + 133, + 11, + 1015, + }, + dictWord{4, 11, 315}, + dictWord{5, 11, 507}, + dictWord{135, 11, 1370}, + dictWord{136, 10, 146}, + dictWord{6, 0, 691}, + dictWord{134, 0, 1503}, + dictWord{ + 4, + 0, + 334, + }, + dictWord{133, 0, 593}, + dictWord{4, 10, 465}, + dictWord{135, 10, 1663}, + dictWord{142, 11, 173}, + dictWord{135, 0, 913}, + dictWord{12, 0, 116}, + dictWord{134, 11, 1722}, + dictWord{134, 0, 1360}, + dictWord{132, 0, 802}, + dictWord{8, 11, 222}, + dictWord{8, 11, 476}, + dictWord{9, 11, 238}, + dictWord{ + 11, + 11, + 516, + }, + dictWord{11, 11, 575}, + dictWord{15, 11, 109}, + dictWord{146, 11, 100}, + dictWord{6, 0, 308}, + dictWord{9, 0, 673}, + dictWord{7, 10, 138}, + dictWord{ + 7, + 10, + 517, + }, + dictWord{139, 10, 238}, + dictWord{132, 0, 709}, + dictWord{6, 0, 1876}, + dictWord{6, 0, 1895}, + dictWord{9, 0, 994}, + dictWord{9, 0, 1006}, + dictWord{ + 12, + 0, + 829, + }, + dictWord{12, 0, 888}, + dictWord{12, 0, 891}, + dictWord{146, 0, 185}, + dictWord{148, 10, 94}, + dictWord{4, 0, 228}, + dictWord{133, 0, 897}, + dictWord{ + 7, + 0, + 1840, + }, + dictWord{5, 10, 495}, + dictWord{7, 10, 834}, + dictWord{9, 10, 733}, + dictWord{139, 10, 378}, + dictWord{133, 10, 559}, + dictWord{6, 10, 21}, + dictWord{ + 6, + 10, + 1737, + }, + dictWord{7, 10, 1444}, + dictWord{136, 10, 224}, + dictWord{4, 0, 608}, + dictWord{133, 0, 497}, + dictWord{6, 11, 40}, + dictWord{135, 11, 1781}, + dictWord{134, 0, 1573}, + dictWord{135, 0, 2039}, + dictWord{6, 0, 540}, + dictWord{136, 0, 136}, + dictWord{4, 0, 897}, + dictWord{5, 0, 786}, + dictWord{133, 10, 519}, + dictWord{6, 0, 1878}, + dictWord{6, 0, 1884}, + dictWord{9, 0, 938}, + dictWord{9, 0, 948}, + dictWord{9, 0, 955}, + dictWord{9, 0, 973}, + dictWord{9, 0, 1012}, + dictWord{ + 12, + 0, + 895, + }, + dictWord{12, 0, 927}, + dictWord{143, 0, 254}, + dictWord{134, 0, 1469}, + dictWord{133, 0, 999}, + dictWord{4, 0, 299}, + dictWord{135, 0, 1004}, + dictWord{ + 4, + 0, + 745, + }, + dictWord{133, 0, 578}, + dictWord{136, 11, 574}, + dictWord{133, 0, 456}, + dictWord{134, 0, 1457}, + dictWord{7, 0, 1679}, + dictWord{132, 10, 402}, + dictWord{7, 0, 693}, + dictWord{8, 0, 180}, + dictWord{12, 0, 163}, + dictWord{8, 10, 323}, + dictWord{136, 10, 479}, + dictWord{11, 10, 580}, + dictWord{142, 10, 201}, + dictWord{5, 10, 59}, + dictWord{135, 10, 672}, + dictWord{132, 11, 354}, + dictWord{146, 10, 34}, + dictWord{4, 0, 755}, + dictWord{135, 11, 1558}, + dictWord{ + 7, + 0, + 1740, + }, + dictWord{146, 0, 48}, + dictWord{4, 10, 85}, + dictWord{135, 10, 549}, + dictWord{139, 0, 338}, + dictWord{133, 10, 94}, + dictWord{134, 0, 1091}, + dictWord{135, 11, 469}, + dictWord{12, 0, 695}, + dictWord{12, 0, 704}, + dictWord{20, 0, 113}, + dictWord{5, 11, 830}, + dictWord{14, 11, 338}, + dictWord{148, 11, 81}, + dictWord{135, 0, 1464}, + dictWord{6, 10, 11}, + dictWord{135, 10, 187}, + dictWord{135, 0, 975}, + dictWord{13, 0, 335}, + dictWord{132, 10, 522}, + dictWord{ + 134, + 0, + 1979, + }, + dictWord{5, 11, 496}, + dictWord{135, 11, 203}, + dictWord{4, 10, 52}, + dictWord{135, 10, 661}, + dictWord{7, 0, 1566}, + dictWord{8, 0, 269}, + dictWord{ + 9, + 0, + 212, + }, + dictWord{9, 0, 718}, + dictWord{14, 0, 15}, + dictWord{14, 0, 132}, + dictWord{142, 0, 227}, + dictWord{4, 0, 890}, + dictWord{5, 0, 805}, + dictWord{5, 0, 819}, + dictWord{ + 5, + 0, + 961, + }, + dictWord{6, 0, 396}, + dictWord{6, 0, 1631}, + dictWord{6, 0, 1678}, + dictWord{7, 0, 1967}, + dictWord{7, 0, 2041}, + dictWord{9, 0, 630}, + dictWord{11, 0, 8}, + dictWord{11, 0, 1019}, + dictWord{12, 0, 176}, + dictWord{13, 0, 225}, + dictWord{14, 0, 292}, + dictWord{21, 0, 24}, + dictWord{4, 10, 383}, + dictWord{133, 10, 520}, + dictWord{134, 11, 547}, + dictWord{135, 11, 1748}, + dictWord{5, 11, 88}, + dictWord{137, 11, 239}, + dictWord{146, 11, 128}, + dictWord{7, 11, 650}, + dictWord{ + 135, + 11, + 1310, + }, + dictWord{4, 10, 281}, + dictWord{5, 10, 38}, + dictWord{7, 10, 194}, + dictWord{7, 10, 668}, + dictWord{7, 10, 1893}, + dictWord{137, 10, 397}, + dictWord{135, 0, 1815}, + dictWord{9, 10, 635}, + dictWord{139, 10, 559}, + dictWord{7, 0, 1505}, + dictWord{10, 0, 190}, + dictWord{10, 0, 634}, + dictWord{11, 0, 792}, + dictWord{12, 0, 358}, + dictWord{140, 0, 447}, + dictWord{5, 0, 0}, + dictWord{6, 0, 536}, + dictWord{7, 0, 604}, + dictWord{13, 0, 445}, + dictWord{145, 0, 126}, + dictWord{ + 7, + 11, + 1076, + }, + dictWord{9, 11, 80}, + dictWord{11, 11, 78}, + dictWord{11, 11, 421}, + dictWord{11, 11, 534}, + dictWord{140, 11, 545}, + dictWord{8, 0, 966}, + dictWord{ + 10, + 0, + 1023, + }, + dictWord{14, 11, 369}, + dictWord{146, 11, 72}, + dictWord{135, 11, 1641}, + dictWord{6, 0, 232}, + dictWord{6, 0, 412}, + dictWord{7, 0, 1074}, + dictWord{ + 8, + 0, + 9, + }, + dictWord{8, 0, 157}, + dictWord{8, 0, 786}, + dictWord{9, 0, 196}, + dictWord{9, 0, 352}, + dictWord{9, 0, 457}, + dictWord{10, 0, 337}, + dictWord{11, 0, 232}, + dictWord{ + 11, + 0, + 877, + }, + dictWord{12, 0, 480}, + dictWord{140, 0, 546}, + dictWord{135, 0, 958}, + dictWord{4, 0, 382}, + dictWord{136, 0, 579}, + dictWord{4, 0, 212}, + dictWord{ + 135, + 0, + 1206, + }, + dictWord{4, 11, 497}, + dictWord{5, 11, 657}, + dictWord{135, 11, 1584}, + dictWord{132, 0, 681}, + dictWord{8, 0, 971}, + dictWord{138, 0, 965}, + dictWord{ + 5, + 10, + 448, + }, + dictWord{136, 10, 535}, + dictWord{14, 0, 16}, + dictWord{146, 0, 44}, + dictWord{11, 0, 584}, + dictWord{11, 0, 616}, + dictWord{14, 0, 275}, + dictWord{ + 11, + 11, + 584, + }, + dictWord{11, 11, 616}, + dictWord{142, 11, 275}, + dictWord{136, 11, 13}, + dictWord{7, 10, 610}, + dictWord{135, 10, 1501}, + dictWord{7, 11, 642}, + dictWord{8, 11, 250}, + dictWord{11, 11, 123}, + dictWord{11, 11, 137}, + dictWord{13, 11, 48}, + dictWord{142, 11, 95}, + dictWord{133, 0, 655}, + dictWord{17, 0, 67}, + dictWord{147, 0, 74}, + dictWord{134, 0, 751}, + dictWord{134, 0, 1967}, + dictWord{6, 0, 231}, + dictWord{136, 0, 423}, + dictWord{5, 0, 300}, + dictWord{138, 0, 1016}, + dictWord{4, 10, 319}, + dictWord{5, 10, 699}, + dictWord{138, 10, 673}, + dictWord{6, 0, 237}, + dictWord{7, 0, 611}, + dictWord{8, 0, 100}, + dictWord{9, 0, 416}, + dictWord{ + 11, + 0, + 335, + }, + dictWord{12, 0, 173}, + dictWord{18, 0, 101}, + dictWord{6, 10, 336}, + dictWord{8, 10, 552}, + dictWord{9, 10, 285}, + dictWord{10, 10, 99}, + dictWord{ + 139, + 10, + 568, + }, + dictWord{134, 0, 1370}, + dictWord{7, 10, 1406}, + dictWord{9, 10, 218}, + dictWord{141, 10, 222}, + dictWord{133, 10, 256}, + dictWord{ + 135, + 0, + 1208, + }, + dictWord{14, 11, 213}, + dictWord{148, 11, 38}, + dictWord{6, 0, 1219}, + dictWord{135, 11, 1642}, + dictWord{13, 0, 417}, + dictWord{14, 0, 129}, + dictWord{143, 0, 15}, + dictWord{10, 11, 545}, + dictWord{140, 11, 301}, + dictWord{17, 10, 39}, + dictWord{148, 10, 36}, + dictWord{133, 0, 199}, + dictWord{4, 11, 904}, + dictWord{133, 11, 794}, + dictWord{12, 0, 427}, + dictWord{146, 0, 38}, + dictWord{134, 0, 949}, + dictWord{8, 0, 665}, + dictWord{135, 10, 634}, + dictWord{ + 132, + 10, + 618, + }, + dictWord{135, 10, 259}, + dictWord{132, 10, 339}, + dictWord{133, 11, 761}, + dictWord{141, 10, 169}, + dictWord{132, 10, 759}, + dictWord{5, 0, 688}, + dictWord{7, 0, 539}, + dictWord{135, 0, 712}, + dictWord{7, 11, 386}, + dictWord{138, 11, 713}, + dictWord{134, 0, 1186}, + dictWord{6, 11, 7}, + dictWord{6, 11, 35}, + dictWord{ + 7, + 11, + 147, + }, + dictWord{7, 11, 1069}, + dictWord{7, 11, 1568}, + dictWord{7, 11, 1575}, + dictWord{7, 11, 1917}, + dictWord{8, 11, 43}, + dictWord{8, 11, 208}, + dictWord{ + 9, + 11, + 128, + }, + dictWord{9, 11, 866}, + dictWord{10, 11, 20}, + dictWord{11, 11, 981}, + dictWord{147, 11, 33}, + dictWord{7, 11, 893}, + dictWord{8, 10, 482}, + dictWord{141, 11, 424}, + dictWord{6, 0, 312}, + dictWord{6, 0, 1715}, + dictWord{10, 0, 584}, + dictWord{11, 0, 546}, + dictWord{11, 0, 692}, + dictWord{12, 0, 259}, + dictWord{ + 12, + 0, + 295, + }, + dictWord{13, 0, 46}, + dictWord{141, 0, 154}, + dictWord{5, 10, 336}, + dictWord{6, 10, 341}, + dictWord{6, 10, 478}, + dictWord{6, 10, 1763}, + dictWord{ + 136, + 10, + 386, + }, + dictWord{137, 0, 151}, + dictWord{132, 0, 588}, + dictWord{152, 0, 4}, + dictWord{6, 11, 322}, + dictWord{9, 11, 552}, + dictWord{11, 11, 274}, + dictWord{ + 13, + 11, + 209, + }, + dictWord{13, 11, 499}, + dictWord{14, 11, 85}, + dictWord{15, 11, 126}, + dictWord{145, 11, 70}, + dictWord{135, 10, 73}, + dictWord{4, 0, 231}, + dictWord{ + 5, + 0, + 61, + }, + dictWord{6, 0, 104}, + dictWord{7, 0, 729}, + dictWord{7, 0, 964}, + dictWord{7, 0, 1658}, + dictWord{140, 0, 414}, + dictWord{6, 0, 263}, + dictWord{138, 0, 757}, + dictWord{135, 10, 1971}, + dictWord{4, 0, 612}, + dictWord{133, 0, 561}, + dictWord{132, 0, 320}, + dictWord{135, 10, 1344}, + dictWord{8, 11, 83}, + dictWord{ + 8, + 11, + 817, + }, + dictWord{9, 11, 28}, + dictWord{9, 11, 29}, + dictWord{9, 11, 885}, + dictWord{10, 11, 387}, + dictWord{11, 11, 633}, + dictWord{11, 11, 740}, + dictWord{ + 13, + 11, + 235, + }, + dictWord{13, 11, 254}, + dictWord{15, 11, 143}, + dictWord{143, 11, 146}, + dictWord{5, 10, 396}, + dictWord{134, 10, 501}, + dictWord{140, 11, 49}, + dictWord{132, 0, 225}, + dictWord{4, 10, 929}, + dictWord{5, 10, 799}, + dictWord{8, 10, 46}, + dictWord{136, 10, 740}, + dictWord{4, 0, 405}, + dictWord{7, 0, 817}, + dictWord{ + 14, + 0, + 58, + }, + dictWord{17, 0, 37}, + dictWord{146, 0, 124}, + dictWord{133, 0, 974}, + dictWord{4, 11, 412}, + dictWord{133, 11, 581}, + dictWord{4, 10, 892}, + dictWord{ + 133, + 10, + 770, + }, + dictWord{4, 0, 996}, + dictWord{134, 0, 2026}, + dictWord{4, 0, 527}, + dictWord{5, 0, 235}, + dictWord{7, 0, 1239}, + dictWord{11, 0, 131}, + dictWord{ + 140, + 0, + 370, + }, + dictWord{9, 0, 16}, + dictWord{13, 0, 386}, + dictWord{135, 11, 421}, + dictWord{7, 0, 956}, + dictWord{7, 0, 1157}, + dictWord{7, 0, 1506}, + dictWord{7, 0, 1606}, + dictWord{7, 0, 1615}, + dictWord{7, 0, 1619}, + dictWord{7, 0, 1736}, + dictWord{7, 0, 1775}, + dictWord{8, 0, 590}, + dictWord{9, 0, 324}, + dictWord{9, 0, 736}, + dictWord{ + 9, + 0, + 774, + }, + dictWord{9, 0, 776}, + dictWord{9, 0, 784}, + dictWord{10, 0, 567}, + dictWord{10, 0, 708}, + dictWord{11, 0, 518}, + dictWord{11, 0, 613}, + dictWord{11, 0, 695}, + dictWord{11, 0, 716}, + dictWord{11, 0, 739}, + dictWord{11, 0, 770}, + dictWord{11, 0, 771}, + dictWord{11, 0, 848}, + dictWord{11, 0, 857}, + dictWord{11, 0, 931}, + dictWord{ + 11, + 0, + 947, + }, + dictWord{12, 0, 326}, + dictWord{12, 0, 387}, + dictWord{12, 0, 484}, + dictWord{12, 0, 528}, + dictWord{12, 0, 552}, + dictWord{12, 0, 613}, + dictWord{ + 13, + 0, + 189, + }, + dictWord{13, 0, 256}, + dictWord{13, 0, 340}, + dictWord{13, 0, 432}, + dictWord{13, 0, 436}, + dictWord{13, 0, 440}, + dictWord{13, 0, 454}, + dictWord{14, 0, 174}, + dictWord{14, 0, 220}, + dictWord{14, 0, 284}, + dictWord{14, 0, 390}, + dictWord{145, 0, 121}, + dictWord{135, 10, 158}, + dictWord{9, 0, 137}, + dictWord{138, 0, 221}, + dictWord{4, 11, 110}, + dictWord{10, 11, 415}, + dictWord{10, 11, 597}, + dictWord{142, 11, 206}, + dictWord{141, 11, 496}, + dictWord{135, 11, 205}, + dictWord{ + 151, + 10, + 25, + }, + dictWord{135, 11, 778}, + dictWord{7, 11, 1656}, + dictWord{7, 10, 2001}, + dictWord{9, 11, 369}, + dictWord{10, 11, 338}, + dictWord{10, 11, 490}, + dictWord{11, 11, 154}, + dictWord{11, 11, 545}, + dictWord{11, 11, 775}, + dictWord{13, 11, 77}, + dictWord{141, 11, 274}, + dictWord{4, 11, 444}, + dictWord{ + 10, + 11, + 146, + }, + dictWord{140, 11, 9}, + dictWord{7, 0, 390}, + dictWord{138, 0, 140}, + dictWord{135, 0, 1144}, + dictWord{134, 0, 464}, + dictWord{7, 10, 1461}, + dictWord{ + 140, + 10, + 91, + }, + dictWord{132, 10, 602}, + dictWord{4, 11, 283}, + dictWord{135, 11, 1194}, + dictWord{5, 0, 407}, + dictWord{11, 0, 204}, + dictWord{11, 0, 243}, + dictWord{ + 11, + 0, + 489, + }, + dictWord{12, 0, 293}, + dictWord{19, 0, 37}, + dictWord{20, 0, 73}, + dictWord{150, 0, 38}, + dictWord{7, 0, 1218}, + dictWord{136, 0, 303}, + dictWord{ + 5, + 0, + 325, + }, + dictWord{8, 0, 5}, + dictWord{8, 0, 227}, + dictWord{9, 0, 105}, + dictWord{10, 0, 585}, + dictWord{12, 0, 614}, + dictWord{4, 10, 13}, + dictWord{5, 10, 567}, + dictWord{ + 7, + 10, + 1498, + }, + dictWord{9, 10, 124}, + dictWord{11, 10, 521}, + dictWord{140, 10, 405}, + dictWord{135, 10, 1006}, + dictWord{7, 0, 800}, + dictWord{10, 0, 12}, + dictWord{134, 11, 1720}, + dictWord{135, 0, 1783}, + dictWord{132, 10, 735}, + dictWord{138, 10, 812}, + dictWord{4, 10, 170}, + dictWord{135, 10, 323}, + dictWord{ + 6, + 0, + 621, + }, + dictWord{13, 0, 504}, + dictWord{144, 0, 89}, + dictWord{5, 10, 304}, + dictWord{135, 10, 1403}, + dictWord{137, 11, 216}, + dictWord{6, 0, 920}, + dictWord{ + 6, + 0, + 1104, + }, + dictWord{9, 11, 183}, + dictWord{139, 11, 286}, + dictWord{4, 0, 376}, + dictWord{133, 10, 742}, + dictWord{134, 0, 218}, + dictWord{8, 0, 641}, + dictWord{ + 11, + 0, + 388, + }, + dictWord{140, 0, 580}, + dictWord{7, 0, 454}, + dictWord{7, 0, 782}, + dictWord{8, 0, 768}, + dictWord{140, 0, 686}, + dictWord{137, 11, 33}, + dictWord{ + 133, + 10, + 111, + }, + dictWord{144, 0, 0}, + dictWord{10, 0, 676}, + dictWord{140, 0, 462}, + dictWord{6, 0, 164}, + dictWord{136, 11, 735}, + dictWord{133, 10, 444}, + dictWord{ + 150, + 0, + 50, + }, + dictWord{7, 11, 1862}, + dictWord{12, 11, 491}, + dictWord{12, 11, 520}, + dictWord{13, 11, 383}, + dictWord{14, 11, 244}, + dictWord{146, 11, 12}, + dictWord{ + 5, + 11, + 132, + }, + dictWord{9, 11, 486}, + dictWord{9, 11, 715}, + dictWord{10, 11, 458}, + dictWord{11, 11, 373}, + dictWord{11, 11, 668}, + dictWord{11, 11, 795}, + dictWord{11, 11, 897}, + dictWord{12, 11, 272}, + dictWord{12, 11, 424}, + dictWord{12, 11, 539}, + dictWord{12, 11, 558}, + dictWord{14, 11, 245}, + dictWord{ + 14, + 11, + 263, + }, + dictWord{14, 11, 264}, + dictWord{14, 11, 393}, + dictWord{142, 11, 403}, + dictWord{8, 10, 123}, + dictWord{15, 10, 6}, + dictWord{144, 10, 7}, + dictWord{ + 6, + 0, + 285, + }, + dictWord{8, 0, 654}, + dictWord{11, 0, 749}, + dictWord{12, 0, 190}, + dictWord{12, 0, 327}, + dictWord{13, 0, 120}, + dictWord{13, 0, 121}, + dictWord{13, 0, 327}, + dictWord{15, 0, 47}, + dictWord{146, 0, 40}, + dictWord{5, 11, 8}, + dictWord{6, 11, 89}, + dictWord{6, 11, 400}, + dictWord{7, 11, 1569}, + dictWord{7, 11, 1623}, + dictWord{ + 7, + 11, + 1850, + }, + dictWord{8, 11, 218}, + dictWord{8, 11, 422}, + dictWord{9, 11, 570}, + dictWord{138, 11, 626}, + dictWord{6, 11, 387}, + dictWord{7, 11, 882}, + dictWord{141, 11, 111}, + dictWord{6, 0, 343}, + dictWord{7, 0, 195}, + dictWord{9, 0, 226}, + dictWord{10, 0, 197}, + dictWord{10, 0, 575}, + dictWord{11, 0, 502}, + dictWord{ + 11, + 0, + 899, + }, + dictWord{6, 11, 224}, + dictWord{7, 11, 877}, + dictWord{137, 11, 647}, + dictWord{5, 10, 937}, + dictWord{135, 10, 100}, + dictWord{135, 11, 790}, + dictWord{150, 0, 29}, + dictWord{147, 0, 8}, + dictWord{134, 0, 1812}, + dictWord{149, 0, 8}, + dictWord{135, 11, 394}, + dictWord{7, 0, 1125}, + dictWord{9, 0, 143}, + dictWord{ + 11, + 0, + 61, + }, + dictWord{14, 0, 405}, + dictWord{150, 0, 21}, + dictWord{10, 11, 755}, + dictWord{147, 11, 29}, + dictWord{9, 11, 378}, + dictWord{141, 11, 162}, + dictWord{135, 10, 922}, + dictWord{5, 10, 619}, + dictWord{133, 10, 698}, + dictWord{134, 0, 1327}, + dictWord{6, 0, 1598}, + dictWord{137, 0, 575}, + dictWord{ + 9, + 11, + 569, + }, + dictWord{12, 11, 12}, + dictWord{12, 11, 81}, + dictWord{12, 11, 319}, + dictWord{13, 11, 69}, + dictWord{14, 11, 259}, + dictWord{16, 11, 87}, + dictWord{ + 17, + 11, + 1, + }, + dictWord{17, 11, 21}, + dictWord{17, 11, 24}, + dictWord{18, 11, 15}, + dictWord{18, 11, 56}, + dictWord{18, 11, 59}, + dictWord{18, 11, 127}, + dictWord{18, 11, 154}, + dictWord{19, 11, 19}, + dictWord{148, 11, 31}, + dictWord{6, 0, 895}, + dictWord{135, 11, 1231}, + dictWord{5, 0, 959}, + dictWord{7, 11, 124}, + dictWord{136, 11, 38}, + dictWord{5, 11, 261}, + dictWord{7, 11, 78}, + dictWord{7, 11, 199}, + dictWord{8, 11, 815}, + dictWord{9, 11, 126}, + dictWord{138, 11, 342}, + dictWord{5, 10, 917}, + dictWord{134, 10, 1659}, + dictWord{7, 0, 1759}, + dictWord{5, 11, 595}, + dictWord{135, 11, 1863}, + dictWord{136, 0, 173}, + dictWord{134, 0, 266}, + dictWord{ + 142, + 0, + 261, + }, + dictWord{132, 11, 628}, + dictWord{5, 10, 251}, + dictWord{5, 10, 956}, + dictWord{8, 10, 268}, + dictWord{9, 10, 214}, + dictWord{146, 10, 142}, + dictWord{ + 7, + 11, + 266, + }, + dictWord{136, 11, 804}, + dictWord{135, 11, 208}, + dictWord{6, 11, 79}, + dictWord{7, 11, 1021}, + dictWord{135, 11, 1519}, + dictWord{11, 11, 704}, + dictWord{141, 11, 396}, + dictWord{5, 10, 346}, + dictWord{5, 10, 711}, + dictWord{136, 10, 390}, + dictWord{136, 11, 741}, + dictWord{134, 11, 376}, + dictWord{ + 134, + 0, + 1427, + }, + dictWord{6, 0, 1033}, + dictWord{6, 0, 1217}, + dictWord{136, 0, 300}, + dictWord{133, 10, 624}, + dictWord{6, 11, 100}, + dictWord{7, 11, 244}, + dictWord{ + 7, + 11, + 632, + }, + dictWord{7, 11, 1609}, + dictWord{8, 11, 178}, + dictWord{8, 11, 638}, + dictWord{141, 11, 58}, + dictWord{6, 0, 584}, + dictWord{5, 10, 783}, + dictWord{ + 7, + 10, + 1998, + }, + dictWord{135, 10, 2047}, + dictWord{5, 0, 427}, + dictWord{5, 0, 734}, + dictWord{7, 0, 478}, + dictWord{136, 0, 52}, + dictWord{7, 0, 239}, + dictWord{ + 11, + 0, + 217, + }, + dictWord{142, 0, 165}, + dictWord{134, 0, 1129}, + dictWord{6, 0, 168}, + dictWord{6, 0, 1734}, + dictWord{7, 0, 20}, + dictWord{7, 0, 1056}, + dictWord{8, 0, 732}, + dictWord{9, 0, 406}, + dictWord{9, 0, 911}, + dictWord{138, 0, 694}, + dictWord{132, 10, 594}, + dictWord{133, 11, 791}, + dictWord{7, 11, 686}, + dictWord{8, 11, 33}, + dictWord{8, 11, 238}, + dictWord{10, 11, 616}, + dictWord{11, 11, 467}, + dictWord{11, 11, 881}, + dictWord{13, 11, 217}, + dictWord{13, 11, 253}, + dictWord{ + 142, + 11, + 268, + }, + dictWord{137, 11, 476}, + dictWord{134, 0, 418}, + dictWord{133, 0, 613}, + dictWord{132, 0, 632}, + dictWord{132, 11, 447}, + dictWord{7, 0, 32}, + dictWord{ + 7, + 0, + 984, + }, + dictWord{8, 0, 85}, + dictWord{8, 0, 709}, + dictWord{9, 0, 579}, + dictWord{9, 0, 847}, + dictWord{9, 0, 856}, + dictWord{10, 0, 799}, + dictWord{11, 0, 258}, + dictWord{ + 11, + 0, + 1007, + }, + dictWord{12, 0, 331}, + dictWord{12, 0, 615}, + dictWord{13, 0, 188}, + dictWord{13, 0, 435}, + dictWord{14, 0, 8}, + dictWord{15, 0, 165}, + dictWord{ + 16, + 0, + 27, + }, + dictWord{20, 0, 40}, + dictWord{144, 11, 35}, + dictWord{4, 11, 128}, + dictWord{5, 11, 415}, + dictWord{6, 11, 462}, + dictWord{7, 11, 294}, + dictWord{7, 11, 578}, + dictWord{10, 11, 710}, + dictWord{139, 11, 86}, + dictWord{5, 0, 694}, + dictWord{136, 0, 909}, + dictWord{7, 0, 1109}, + dictWord{11, 0, 7}, + dictWord{5, 10, 37}, + dictWord{ + 6, + 10, + 39, + }, + dictWord{6, 10, 451}, + dictWord{7, 10, 218}, + dictWord{7, 10, 1166}, + dictWord{7, 10, 1687}, + dictWord{8, 10, 662}, + dictWord{144, 10, 2}, + dictWord{ + 136, + 11, + 587, + }, + dictWord{6, 11, 427}, + dictWord{7, 11, 1018}, + dictWord{138, 11, 692}, + dictWord{4, 11, 195}, + dictWord{6, 10, 508}, + dictWord{135, 11, 802}, + dictWord{4, 0, 167}, + dictWord{135, 0, 82}, + dictWord{5, 0, 62}, + dictWord{6, 0, 24}, + dictWord{6, 0, 534}, + dictWord{7, 0, 74}, + dictWord{7, 0, 678}, + dictWord{7, 0, 684}, + dictWord{ + 7, + 0, + 1043, + }, + dictWord{7, 0, 1072}, + dictWord{8, 0, 280}, + dictWord{8, 0, 541}, + dictWord{8, 0, 686}, + dictWord{9, 0, 258}, + dictWord{10, 0, 519}, + dictWord{11, 0, 252}, + dictWord{140, 0, 282}, + dictWord{138, 0, 33}, + dictWord{4, 0, 359}, + dictWord{133, 11, 738}, + dictWord{7, 0, 980}, + dictWord{9, 0, 328}, + dictWord{13, 0, 186}, + dictWord{13, 0, 364}, + dictWord{7, 10, 635}, + dictWord{7, 10, 796}, + dictWord{8, 10, 331}, + dictWord{9, 10, 330}, + dictWord{9, 10, 865}, + dictWord{10, 10, 119}, + dictWord{ + 10, + 10, + 235, + }, + dictWord{11, 10, 111}, + dictWord{11, 10, 129}, + dictWord{11, 10, 240}, + dictWord{12, 10, 31}, + dictWord{12, 10, 66}, + dictWord{12, 10, 222}, + dictWord{12, 10, 269}, + dictWord{12, 10, 599}, + dictWord{12, 10, 684}, + dictWord{12, 10, 689}, + dictWord{12, 10, 691}, + dictWord{142, 10, 345}, + dictWord{ + 137, + 10, + 527, + }, + dictWord{6, 0, 596}, + dictWord{7, 0, 585}, + dictWord{135, 10, 702}, + dictWord{134, 11, 1683}, + dictWord{133, 0, 211}, + dictWord{6, 0, 145}, + dictWord{ + 141, + 0, + 336, + }, + dictWord{134, 0, 1130}, + dictWord{7, 0, 873}, + dictWord{6, 10, 37}, + dictWord{7, 10, 1666}, + dictWord{8, 10, 195}, + dictWord{8, 10, 316}, + dictWord{ + 9, + 10, + 178, + }, + dictWord{9, 10, 276}, + dictWord{9, 10, 339}, + dictWord{9, 10, 536}, + dictWord{10, 10, 102}, + dictWord{10, 10, 362}, + dictWord{10, 10, 785}, + dictWord{ + 11, + 10, + 55, + }, + dictWord{11, 10, 149}, + dictWord{11, 10, 773}, + dictWord{13, 10, 416}, + dictWord{13, 10, 419}, + dictWord{14, 10, 38}, + dictWord{14, 10, 41}, + dictWord{ + 142, + 10, + 210, + }, + dictWord{8, 0, 840}, + dictWord{136, 0, 841}, + dictWord{132, 0, 263}, + dictWord{5, 11, 3}, + dictWord{8, 11, 578}, + dictWord{9, 11, 118}, + dictWord{ + 10, + 11, + 705, + }, + dictWord{12, 11, 383}, + dictWord{141, 11, 279}, + dictWord{132, 0, 916}, + dictWord{133, 11, 229}, + dictWord{133, 10, 645}, + dictWord{15, 0, 155}, + dictWord{16, 0, 79}, + dictWord{8, 11, 102}, + dictWord{10, 11, 578}, + dictWord{10, 11, 672}, + dictWord{12, 11, 496}, + dictWord{13, 11, 408}, + dictWord{14, 11, 121}, + dictWord{145, 11, 106}, + dictWord{4, 0, 599}, + dictWord{5, 0, 592}, + dictWord{6, 0, 1634}, + dictWord{7, 0, 5}, + dictWord{7, 0, 55}, + dictWord{7, 0, 67}, + dictWord{7, 0, 97}, + dictWord{7, 0, 691}, + dictWord{7, 0, 979}, + dictWord{7, 0, 1600}, + dictWord{7, 0, 1697}, + dictWord{8, 0, 207}, + dictWord{8, 0, 214}, + dictWord{8, 0, 231}, + dictWord{8, 0, 294}, + dictWord{8, 0, 336}, + dictWord{8, 0, 428}, + dictWord{8, 0, 471}, + dictWord{8, 0, 622}, + dictWord{8, 0, 626}, + dictWord{8, 0, 679}, + dictWord{8, 0, 759}, + dictWord{8, 0, 829}, + dictWord{9, 0, 11}, + dictWord{9, 0, 246}, + dictWord{9, 0, 484}, + dictWord{9, 0, 573}, + dictWord{9, 0, 706}, + dictWord{9, 0, 762}, + dictWord{9, 0, 798}, + dictWord{9, 0, 855}, + dictWord{9, 0, 870}, + dictWord{9, 0, 912}, + dictWord{10, 0, 303}, + dictWord{10, 0, 335}, + dictWord{10, 0, 424}, + dictWord{10, 0, 461}, + dictWord{10, 0, 543}, + dictWord{ + 10, + 0, + 759, + }, + dictWord{10, 0, 814}, + dictWord{11, 0, 59}, + dictWord{11, 0, 199}, + dictWord{11, 0, 235}, + dictWord{11, 0, 590}, + dictWord{11, 0, 631}, + dictWord{11, 0, 929}, + dictWord{11, 0, 963}, + dictWord{11, 0, 987}, + dictWord{12, 0, 114}, + dictWord{12, 0, 182}, + dictWord{12, 0, 226}, + dictWord{12, 0, 332}, + dictWord{12, 0, 439}, + dictWord{12, 0, 575}, + dictWord{12, 0, 598}, + dictWord{12, 0, 675}, + dictWord{13, 0, 8}, + dictWord{13, 0, 125}, + dictWord{13, 0, 194}, + dictWord{13, 0, 287}, + dictWord{ + 14, + 0, + 197, + }, + dictWord{14, 0, 383}, + dictWord{15, 0, 53}, + dictWord{17, 0, 63}, + dictWord{19, 0, 46}, + dictWord{19, 0, 98}, + dictWord{19, 0, 106}, + dictWord{148, 0, 85}, + dictWord{ + 7, + 0, + 1356, + }, + dictWord{132, 10, 290}, + dictWord{6, 10, 70}, + dictWord{7, 10, 1292}, + dictWord{10, 10, 762}, + dictWord{139, 10, 288}, + dictWord{150, 11, 55}, + dictWord{4, 0, 593}, + dictWord{8, 11, 115}, + dictWord{8, 11, 350}, + dictWord{9, 11, 489}, + dictWord{10, 11, 128}, + dictWord{11, 11, 306}, + dictWord{12, 11, 373}, + dictWord{14, 11, 30}, + dictWord{17, 11, 79}, + dictWord{147, 11, 80}, + dictWord{135, 11, 1235}, + dictWord{134, 0, 1392}, + dictWord{4, 11, 230}, + dictWord{ + 133, + 11, + 702, + }, + dictWord{147, 0, 126}, + dictWord{7, 10, 131}, + dictWord{7, 10, 422}, + dictWord{8, 10, 210}, + dictWord{140, 10, 573}, + dictWord{134, 0, 1179}, + dictWord{ + 139, + 11, + 435, + }, + dictWord{139, 10, 797}, + dictWord{134, 11, 1728}, + dictWord{4, 0, 162}, + dictWord{18, 11, 26}, + dictWord{19, 11, 42}, + dictWord{20, 11, 43}, + dictWord{21, 11, 0}, + dictWord{23, 11, 27}, + dictWord{152, 11, 14}, + dictWord{132, 10, 936}, + dictWord{6, 0, 765}, + dictWord{5, 10, 453}, + dictWord{134, 10, 441}, + dictWord{133, 0, 187}, + dictWord{135, 0, 1286}, + dictWord{6, 0, 635}, + dictWord{6, 0, 904}, + dictWord{6, 0, 1210}, + dictWord{134, 0, 1489}, + dictWord{4, 0, 215}, + dictWord{ + 8, + 0, + 890, + }, + dictWord{9, 0, 38}, + dictWord{10, 0, 923}, + dictWord{11, 0, 23}, + dictWord{11, 0, 127}, + dictWord{139, 0, 796}, + dictWord{6, 0, 1165}, + dictWord{ + 134, + 0, + 1306, + }, + dictWord{7, 0, 716}, + dictWord{13, 0, 97}, + dictWord{141, 0, 251}, + dictWord{132, 10, 653}, + dictWord{136, 0, 657}, + dictWord{146, 10, 80}, + dictWord{ + 5, + 11, + 622, + }, + dictWord{7, 11, 1032}, + dictWord{11, 11, 26}, + dictWord{11, 11, 213}, + dictWord{11, 11, 707}, + dictWord{12, 11, 380}, + dictWord{13, 11, 226}, + dictWord{141, 11, 355}, + dictWord{6, 0, 299}, + dictWord{5, 11, 70}, + dictWord{6, 11, 334}, + dictWord{9, 11, 171}, + dictWord{11, 11, 637}, + dictWord{12, 11, 202}, + dictWord{14, 11, 222}, + dictWord{145, 11, 42}, + dictWord{142, 0, 134}, + dictWord{4, 11, 23}, + dictWord{5, 11, 313}, + dictWord{5, 11, 1014}, + dictWord{6, 11, 50}, + dictWord{ + 6, + 11, + 51, + }, + dictWord{7, 11, 142}, + dictWord{7, 11, 384}, + dictWord{9, 11, 783}, + dictWord{139, 11, 741}, + dictWord{4, 11, 141}, + dictWord{7, 11, 559}, + dictWord{ + 8, + 11, + 640, + }, + dictWord{9, 11, 460}, + dictWord{12, 11, 183}, + dictWord{141, 11, 488}, + dictWord{136, 11, 614}, + dictWord{7, 10, 1368}, + dictWord{8, 10, 232}, + dictWord{8, 10, 361}, + dictWord{10, 10, 682}, + dictWord{138, 10, 742}, + dictWord{137, 10, 534}, + dictWord{6, 0, 1082}, + dictWord{140, 0, 658}, + dictWord{ + 137, + 10, + 27, + }, + dictWord{135, 0, 2002}, + dictWord{142, 10, 12}, + dictWord{4, 0, 28}, + dictWord{5, 0, 440}, + dictWord{7, 0, 248}, + dictWord{11, 0, 833}, + dictWord{140, 0, 344}, + dictWord{7, 10, 736}, + dictWord{139, 10, 264}, + dictWord{134, 10, 1657}, + dictWord{134, 0, 1654}, + dictWord{138, 0, 531}, + dictWord{5, 11, 222}, + dictWord{ + 9, + 11, + 140, + }, + dictWord{138, 11, 534}, + dictWord{6, 0, 634}, + dictWord{6, 0, 798}, + dictWord{134, 0, 840}, + dictWord{138, 11, 503}, + dictWord{135, 10, 127}, + dictWord{133, 0, 853}, + dictWord{5, 11, 154}, + dictWord{7, 11, 1491}, + dictWord{10, 11, 379}, + dictWord{138, 11, 485}, + dictWord{6, 0, 249}, + dictWord{7, 0, 1234}, + dictWord{139, 0, 573}, + dictWord{133, 11, 716}, + dictWord{7, 11, 1570}, + dictWord{140, 11, 542}, + dictWord{136, 10, 364}, + dictWord{138, 0, 527}, + dictWord{ + 4, + 11, + 91, + }, + dictWord{5, 11, 388}, + dictWord{5, 11, 845}, + dictWord{6, 11, 206}, + dictWord{6, 11, 252}, + dictWord{6, 11, 365}, + dictWord{7, 11, 136}, + dictWord{7, 11, 531}, + dictWord{8, 11, 264}, + dictWord{136, 11, 621}, + dictWord{134, 0, 1419}, + dictWord{135, 11, 1441}, + dictWord{7, 0, 49}, + dictWord{7, 0, 392}, + dictWord{8, 0, 20}, + dictWord{8, 0, 172}, + dictWord{8, 0, 690}, + dictWord{9, 0, 383}, + dictWord{9, 0, 845}, + dictWord{10, 0, 48}, + dictWord{11, 0, 293}, + dictWord{11, 0, 832}, + dictWord{ + 11, + 0, + 920, + }, + dictWord{11, 0, 984}, + dictWord{141, 0, 221}, + dictWord{5, 0, 858}, + dictWord{133, 0, 992}, + dictWord{5, 0, 728}, + dictWord{137, 10, 792}, + dictWord{ + 5, + 10, + 909, + }, + dictWord{9, 10, 849}, + dictWord{138, 10, 805}, + dictWord{7, 0, 525}, + dictWord{7, 0, 1579}, + dictWord{8, 0, 497}, + dictWord{136, 0, 573}, + dictWord{6, 0, 268}, + dictWord{137, 0, 62}, + dictWord{135, 11, 576}, + dictWord{134, 0, 1201}, + dictWord{5, 11, 771}, + dictWord{5, 11, 863}, + dictWord{5, 11, 898}, + dictWord{ + 6, + 11, + 1632, + }, + dictWord{6, 11, 1644}, + dictWord{134, 11, 1780}, + dictWord{133, 11, 331}, + dictWord{7, 0, 193}, + dictWord{7, 0, 1105}, + dictWord{10, 0, 495}, + dictWord{ + 7, + 10, + 397, + }, + dictWord{8, 10, 124}, + dictWord{8, 10, 619}, + dictWord{9, 10, 305}, + dictWord{11, 10, 40}, + dictWord{12, 10, 349}, + dictWord{13, 10, 134}, + dictWord{ + 13, + 10, + 295, + }, + dictWord{14, 10, 155}, + dictWord{15, 10, 120}, + dictWord{146, 10, 105}, + dictWord{138, 0, 106}, + dictWord{6, 0, 859}, + dictWord{5, 11, 107}, + dictWord{ + 7, + 11, + 201, + }, + dictWord{136, 11, 518}, + dictWord{6, 11, 446}, + dictWord{135, 11, 1817}, + dictWord{13, 0, 23}, + dictWord{4, 10, 262}, + dictWord{135, 10, 342}, + dictWord{133, 10, 641}, + dictWord{137, 11, 851}, + dictWord{6, 0, 925}, + dictWord{137, 0, 813}, + dictWord{132, 11, 504}, + dictWord{6, 0, 613}, + dictWord{ + 136, + 0, + 223, + }, + dictWord{4, 10, 99}, + dictWord{6, 10, 250}, + dictWord{6, 10, 346}, + dictWord{8, 10, 127}, + dictWord{138, 10, 81}, + dictWord{136, 0, 953}, + dictWord{ + 132, + 10, + 915, + }, + dictWord{139, 11, 892}, + dictWord{5, 10, 75}, + dictWord{9, 10, 517}, + dictWord{10, 10, 470}, + dictWord{12, 10, 155}, + dictWord{141, 10, 224}, + dictWord{ + 4, + 0, + 666, + }, + dictWord{7, 0, 1017}, + dictWord{7, 11, 996}, + dictWord{138, 11, 390}, + dictWord{5, 11, 883}, + dictWord{133, 11, 975}, + dictWord{14, 10, 83}, + dictWord{ + 142, + 11, + 83, + }, + dictWord{4, 0, 670}, + dictWord{5, 11, 922}, + dictWord{134, 11, 1707}, + dictWord{135, 0, 216}, + dictWord{9, 0, 40}, + dictWord{11, 0, 136}, + dictWord{ + 135, + 11, + 787, + }, + dictWord{5, 10, 954}, + dictWord{5, 11, 993}, + dictWord{7, 11, 515}, + dictWord{137, 11, 91}, + dictWord{139, 0, 259}, + dictWord{7, 0, 1114}, + dictWord{ + 9, + 0, + 310, + }, + dictWord{9, 0, 682}, + dictWord{10, 0, 440}, + dictWord{13, 0, 40}, + dictWord{6, 10, 304}, + dictWord{8, 10, 418}, + dictWord{11, 10, 341}, + dictWord{ + 139, + 10, + 675, + }, + dictWord{14, 0, 296}, + dictWord{9, 10, 410}, + dictWord{139, 10, 425}, + dictWord{10, 11, 377}, + dictWord{12, 11, 363}, + dictWord{13, 11, 68}, + dictWord{ + 13, + 11, + 94, + }, + dictWord{14, 11, 108}, + dictWord{142, 11, 306}, + dictWord{7, 0, 1401}, + dictWord{135, 0, 1476}, + dictWord{4, 0, 296}, + dictWord{6, 0, 475}, + dictWord{ + 7, + 0, + 401, + }, + dictWord{7, 0, 1410}, + dictWord{7, 0, 1594}, + dictWord{7, 0, 1674}, + dictWord{8, 0, 63}, + dictWord{8, 0, 660}, + dictWord{137, 0, 74}, + dictWord{4, 0, 139}, + dictWord{4, 0, 388}, + dictWord{140, 0, 188}, + dictWord{132, 0, 797}, + dictWord{132, 11, 766}, + dictWord{5, 11, 103}, + dictWord{7, 11, 921}, + dictWord{8, 11, 580}, + dictWord{8, 11, 593}, + dictWord{8, 11, 630}, + dictWord{138, 11, 28}, + dictWord{4, 11, 911}, + dictWord{5, 11, 867}, + dictWord{133, 11, 1013}, + dictWord{134, 10, 14}, + dictWord{134, 0, 1572}, + dictWord{134, 10, 1708}, + dictWord{21, 0, 39}, + dictWord{5, 10, 113}, + dictWord{6, 10, 243}, + dictWord{7, 10, 1865}, + dictWord{ + 11, + 10, + 161, + }, + dictWord{16, 10, 37}, + dictWord{145, 10, 99}, + dictWord{7, 11, 1563}, + dictWord{141, 11, 182}, + dictWord{5, 11, 135}, + dictWord{6, 11, 519}, + dictWord{ + 7, + 11, + 1722, + }, + dictWord{10, 11, 271}, + dictWord{11, 11, 261}, + dictWord{145, 11, 54}, + dictWord{132, 10, 274}, + dictWord{134, 0, 1594}, + dictWord{4, 11, 300}, + dictWord{5, 11, 436}, + dictWord{135, 11, 484}, + dictWord{4, 0, 747}, + dictWord{6, 0, 290}, + dictWord{7, 0, 649}, + dictWord{7, 0, 1479}, + dictWord{135, 0, 1583}, + dictWord{133, 11, 535}, + dictWord{147, 11, 82}, + dictWord{133, 0, 232}, + dictWord{137, 0, 887}, + dictWord{135, 10, 166}, + dictWord{136, 0, 521}, + dictWord{4, 0, 14}, + dictWord{7, 0, 472}, + dictWord{7, 0, 1801}, + dictWord{10, 0, 748}, + dictWord{141, 0, 458}, + dictWord{134, 0, 741}, + dictWord{134, 0, 992}, + dictWord{16, 0, 111}, + dictWord{137, 10, 304}, + dictWord{4, 0, 425}, + dictWord{5, 11, 387}, + dictWord{7, 11, 557}, + dictWord{12, 11, 547}, + dictWord{142, 11, 86}, + dictWord{ + 135, + 11, + 1747, + }, + dictWord{5, 10, 654}, + dictWord{135, 11, 1489}, + dictWord{7, 0, 789}, + dictWord{4, 11, 6}, + dictWord{5, 11, 708}, + dictWord{136, 11, 75}, + dictWord{ + 6, + 10, + 273, + }, + dictWord{10, 10, 188}, + dictWord{13, 10, 377}, + dictWord{146, 10, 77}, + dictWord{6, 0, 1593}, + dictWord{4, 11, 303}, + dictWord{7, 11, 619}, + dictWord{ + 10, + 11, + 547, + }, + dictWord{10, 11, 687}, + dictWord{11, 11, 122}, + dictWord{140, 11, 601}, + dictWord{134, 0, 1768}, + dictWord{135, 10, 410}, + dictWord{138, 11, 772}, + dictWord{11, 0, 233}, + dictWord{139, 10, 524}, + dictWord{5, 0, 943}, + dictWord{134, 0, 1779}, + dictWord{134, 10, 1785}, + dictWord{136, 11, 529}, + dictWord{ + 132, + 0, + 955, + }, + dictWord{5, 0, 245}, + dictWord{6, 0, 576}, + dictWord{7, 0, 582}, + dictWord{136, 0, 225}, + dictWord{132, 10, 780}, + dictWord{142, 0, 241}, + dictWord{ + 134, + 0, + 1943, + }, + dictWord{4, 11, 106}, + dictWord{7, 11, 310}, + dictWord{7, 11, 1785}, + dictWord{10, 11, 690}, + dictWord{139, 11, 717}, + dictWord{134, 0, 1284}, + dictWord{5, 11, 890}, + dictWord{133, 11, 988}, + dictWord{6, 11, 626}, + dictWord{142, 11, 431}, + dictWord{10, 11, 706}, + dictWord{145, 11, 32}, + dictWord{ + 137, + 11, + 332, + }, + dictWord{132, 11, 698}, + dictWord{135, 0, 709}, + dictWord{5, 10, 948}, + dictWord{138, 11, 17}, + dictWord{136, 0, 554}, + dictWord{134, 0, 1564}, + dictWord{139, 10, 941}, + dictWord{132, 0, 443}, + dictWord{134, 0, 909}, + dictWord{134, 11, 84}, + dictWord{142, 0, 280}, + dictWord{4, 10, 532}, + dictWord{5, 10, 706}, + dictWord{135, 10, 662}, + dictWord{132, 0, 729}, + dictWord{5, 10, 837}, + dictWord{6, 10, 1651}, + dictWord{139, 10, 985}, + dictWord{135, 10, 1861}, + dictWord{ + 4, + 0, + 348, + }, + dictWord{152, 11, 3}, + dictWord{5, 11, 986}, + dictWord{6, 11, 130}, + dictWord{7, 11, 1582}, + dictWord{8, 11, 458}, + dictWord{10, 11, 101}, + dictWord{ + 10, + 11, + 318, + }, + dictWord{138, 11, 823}, + dictWord{134, 0, 758}, + dictWord{4, 0, 298}, + dictWord{137, 0, 848}, + dictWord{4, 10, 330}, + dictWord{7, 10, 933}, + dictWord{ + 7, + 10, + 2012, + }, + dictWord{136, 10, 292}, + dictWord{7, 11, 1644}, + dictWord{137, 11, 129}, + dictWord{6, 0, 1422}, + dictWord{9, 0, 829}, + dictWord{135, 10, 767}, + dictWord{5, 0, 164}, + dictWord{7, 0, 121}, + dictWord{142, 0, 189}, + dictWord{7, 0, 812}, + dictWord{7, 0, 1261}, + dictWord{7, 0, 1360}, + dictWord{9, 0, 632}, + dictWord{ + 140, + 0, + 352, + }, + dictWord{135, 11, 1788}, + dictWord{139, 0, 556}, + dictWord{135, 11, 997}, + dictWord{145, 10, 114}, + dictWord{4, 0, 172}, + dictWord{9, 0, 611}, + dictWord{10, 0, 436}, + dictWord{12, 0, 673}, + dictWord{13, 0, 255}, + dictWord{137, 10, 883}, + dictWord{11, 0, 530}, + dictWord{138, 10, 274}, + dictWord{133, 0, 844}, + dictWord{134, 0, 984}, + dictWord{13, 0, 232}, + dictWord{18, 0, 35}, + dictWord{4, 10, 703}, + dictWord{135, 10, 207}, + dictWord{132, 10, 571}, + dictWord{9, 0, 263}, + dictWord{10, 0, 147}, + dictWord{138, 0, 492}, + dictWord{7, 11, 1756}, + dictWord{137, 11, 98}, + dictWord{5, 10, 873}, + dictWord{5, 10, 960}, + dictWord{8, 10, 823}, + dictWord{137, 10, 881}, + dictWord{133, 0, 537}, + dictWord{132, 0, 859}, + dictWord{7, 11, 1046}, + dictWord{139, 11, 160}, + dictWord{137, 0, 842}, + dictWord{ + 139, + 10, + 283, + }, + dictWord{5, 10, 33}, + dictWord{6, 10, 470}, + dictWord{139, 10, 424}, + dictWord{6, 11, 45}, + dictWord{7, 11, 433}, + dictWord{8, 11, 129}, + dictWord{ + 9, + 11, + 21, + }, + dictWord{10, 11, 392}, + dictWord{11, 11, 79}, + dictWord{12, 11, 499}, + dictWord{13, 11, 199}, + dictWord{141, 11, 451}, + dictWord{135, 0, 1291}, + dictWord{135, 10, 1882}, + dictWord{7, 11, 558}, + dictWord{136, 11, 353}, + dictWord{134, 0, 1482}, + dictWord{5, 0, 230}, + dictWord{5, 0, 392}, + dictWord{6, 0, 420}, + dictWord{9, 0, 568}, + dictWord{140, 0, 612}, + dictWord{6, 0, 262}, + dictWord{7, 10, 90}, + dictWord{7, 10, 664}, + dictWord{7, 10, 830}, + dictWord{7, 10, 1380}, + dictWord{ + 7, + 10, + 2025, + }, + dictWord{8, 11, 81}, + dictWord{8, 10, 448}, + dictWord{8, 10, 828}, + dictWord{9, 11, 189}, + dictWord{9, 11, 201}, + dictWord{11, 11, 478}, + dictWord{ + 11, + 11, + 712, + }, + dictWord{141, 11, 338}, + dictWord{142, 0, 31}, + dictWord{5, 11, 353}, + dictWord{151, 11, 26}, + dictWord{132, 0, 753}, + dictWord{4, 0, 0}, + dictWord{ + 5, + 0, + 41, + }, + dictWord{7, 0, 1459}, + dictWord{7, 0, 1469}, + dictWord{7, 0, 1859}, + dictWord{9, 0, 549}, + dictWord{139, 0, 905}, + dictWord{9, 10, 417}, + dictWord{ + 137, + 10, + 493, + }, + dictWord{135, 11, 1113}, + dictWord{133, 0, 696}, + dictWord{141, 11, 448}, + dictWord{134, 10, 295}, + dictWord{132, 0, 834}, + dictWord{4, 0, 771}, + dictWord{5, 10, 1019}, + dictWord{6, 11, 25}, + dictWord{7, 11, 855}, + dictWord{7, 11, 1258}, + dictWord{144, 11, 32}, + dictWord{134, 0, 1076}, + dictWord{133, 0, 921}, + dictWord{133, 0, 674}, + dictWord{4, 11, 4}, + dictWord{7, 11, 1118}, + dictWord{7, 11, 1320}, + dictWord{7, 11, 1706}, + dictWord{8, 11, 277}, + dictWord{9, 11, 622}, + dictWord{10, 11, 9}, + dictWord{11, 11, 724}, + dictWord{12, 11, 350}, + dictWord{12, 11, 397}, + dictWord{13, 11, 28}, + dictWord{13, 11, 159}, + dictWord{15, 11, 89}, + dictWord{18, 11, 5}, + dictWord{19, 11, 9}, + dictWord{20, 11, 34}, + dictWord{150, 11, 47}, + dictWord{134, 10, 208}, + dictWord{6, 0, 444}, + dictWord{136, 0, 308}, + dictWord{ + 6, + 0, + 180, + }, + dictWord{7, 0, 1137}, + dictWord{8, 0, 751}, + dictWord{139, 0, 805}, + dictWord{4, 0, 183}, + dictWord{7, 0, 271}, + dictWord{11, 0, 824}, + dictWord{ + 11, + 0, + 952, + }, + dictWord{13, 0, 278}, + dictWord{13, 0, 339}, + dictWord{13, 0, 482}, + dictWord{14, 0, 424}, + dictWord{148, 0, 99}, + dictWord{7, 11, 317}, + dictWord{ + 135, + 11, + 569, + }, + dictWord{4, 0, 19}, + dictWord{5, 0, 477}, + dictWord{5, 0, 596}, + dictWord{6, 0, 505}, + dictWord{7, 0, 1221}, + dictWord{11, 0, 907}, + dictWord{12, 0, 209}, + dictWord{141, 0, 214}, + dictWord{135, 0, 1215}, + dictWord{6, 0, 271}, + dictWord{7, 0, 398}, + dictWord{8, 0, 387}, + dictWord{10, 0, 344}, + dictWord{7, 10, 448}, + dictWord{ + 7, + 10, + 1629, + }, + dictWord{7, 10, 1813}, + dictWord{8, 10, 442}, + dictWord{9, 10, 710}, + dictWord{10, 10, 282}, + dictWord{138, 10, 722}, + dictWord{11, 10, 844}, + dictWord{12, 10, 104}, + dictWord{140, 10, 625}, + dictWord{134, 11, 255}, + dictWord{133, 10, 787}, + dictWord{134, 0, 1645}, + dictWord{11, 11, 956}, + dictWord{ + 151, + 11, + 3, + }, + dictWord{6, 0, 92}, + dictWord{6, 0, 188}, + dictWord{7, 0, 209}, + dictWord{7, 0, 1269}, + dictWord{7, 0, 1524}, + dictWord{7, 0, 1876}, + dictWord{8, 0, 661}, + dictWord{10, 0, 42}, + dictWord{10, 0, 228}, + dictWord{11, 0, 58}, + dictWord{11, 0, 1020}, + dictWord{12, 0, 58}, + dictWord{12, 0, 118}, + dictWord{141, 0, 32}, + dictWord{ + 4, + 0, + 459, + }, + dictWord{133, 0, 966}, + dictWord{4, 11, 536}, + dictWord{7, 11, 1141}, + dictWord{10, 11, 723}, + dictWord{139, 11, 371}, + dictWord{140, 0, 330}, + dictWord{134, 0, 1557}, + dictWord{7, 11, 285}, + dictWord{135, 11, 876}, + dictWord{136, 10, 491}, + dictWord{135, 11, 560}, + dictWord{6, 0, 18}, + dictWord{7, 0, 179}, + dictWord{7, 0, 932}, + dictWord{8, 0, 548}, + dictWord{8, 0, 757}, + dictWord{9, 0, 54}, + dictWord{9, 0, 65}, + dictWord{9, 0, 532}, + dictWord{9, 0, 844}, + dictWord{10, 0, 113}, + dictWord{10, 0, 117}, + dictWord{10, 0, 315}, + dictWord{10, 0, 560}, + dictWord{10, 0, 622}, + dictWord{10, 0, 798}, + dictWord{11, 0, 153}, + dictWord{11, 0, 351}, + dictWord{ + 11, + 0, + 375, + }, + dictWord{12, 0, 78}, + dictWord{12, 0, 151}, + dictWord{12, 0, 392}, + dictWord{12, 0, 666}, + dictWord{14, 0, 248}, + dictWord{143, 0, 23}, + dictWord{ + 6, + 0, + 1742, + }, + dictWord{132, 11, 690}, + dictWord{4, 10, 403}, + dictWord{5, 10, 441}, + dictWord{7, 10, 450}, + dictWord{10, 10, 840}, + dictWord{11, 10, 101}, + dictWord{ + 12, + 10, + 193, + }, + dictWord{141, 10, 430}, + dictWord{133, 0, 965}, + dictWord{134, 0, 182}, + dictWord{10, 0, 65}, + dictWord{10, 0, 488}, + dictWord{138, 0, 497}, + dictWord{135, 11, 1346}, + dictWord{6, 0, 973}, + dictWord{6, 0, 1158}, + dictWord{10, 11, 200}, + dictWord{19, 11, 2}, + dictWord{151, 11, 22}, + dictWord{4, 11, 190}, + dictWord{133, 11, 554}, + dictWord{133, 10, 679}, + dictWord{7, 0, 328}, + dictWord{137, 10, 326}, + dictWord{133, 11, 1001}, + dictWord{9, 0, 588}, + dictWord{ + 138, + 0, + 260, + }, + dictWord{133, 11, 446}, + dictWord{135, 10, 1128}, + dictWord{135, 10, 1796}, + dictWord{147, 11, 119}, + dictWord{134, 0, 1786}, + dictWord{ + 6, + 0, + 1328, + }, + dictWord{6, 0, 1985}, + dictWord{8, 0, 962}, + dictWord{138, 0, 1017}, + dictWord{135, 0, 308}, + dictWord{11, 0, 508}, + dictWord{4, 10, 574}, + dictWord{ + 7, + 10, + 350, + }, + dictWord{7, 10, 1024}, + dictWord{8, 10, 338}, + dictWord{9, 10, 677}, + dictWord{138, 10, 808}, + dictWord{138, 11, 752}, + dictWord{135, 10, 1081}, + dictWord{137, 11, 96}, + dictWord{7, 10, 1676}, + dictWord{135, 10, 2037}, + dictWord{136, 0, 588}, + dictWord{132, 11, 304}, + dictWord{133, 0, 614}, + dictWord{ + 140, + 0, + 793, + }, + dictWord{136, 0, 287}, + dictWord{137, 10, 297}, + dictWord{141, 10, 37}, + dictWord{6, 11, 53}, + dictWord{6, 11, 199}, + dictWord{7, 11, 1408}, + dictWord{ + 8, + 11, + 32, + }, + dictWord{8, 11, 93}, + dictWord{9, 11, 437}, + dictWord{10, 11, 397}, + dictWord{10, 11, 629}, + dictWord{11, 11, 593}, + dictWord{11, 11, 763}, + dictWord{ + 13, + 11, + 326, + }, + dictWord{145, 11, 35}, + dictWord{134, 11, 105}, + dictWord{9, 11, 320}, + dictWord{10, 11, 506}, + dictWord{138, 11, 794}, + dictWord{5, 11, 114}, + dictWord{5, 11, 255}, + dictWord{141, 11, 285}, + dictWord{140, 0, 290}, + dictWord{7, 11, 2035}, + dictWord{8, 11, 19}, + dictWord{9, 11, 89}, + dictWord{138, 11, 831}, + dictWord{134, 0, 1136}, + dictWord{7, 0, 719}, + dictWord{8, 0, 796}, + dictWord{8, 0, 809}, + dictWord{8, 0, 834}, + dictWord{6, 10, 306}, + dictWord{7, 10, 1140}, + dictWord{ + 7, + 10, + 1340, + }, + dictWord{8, 10, 133}, + dictWord{138, 10, 449}, + dictWord{139, 10, 1011}, + dictWord{5, 0, 210}, + dictWord{6, 0, 213}, + dictWord{7, 0, 60}, + dictWord{ + 10, + 0, + 364, + }, + dictWord{139, 0, 135}, + dictWord{5, 0, 607}, + dictWord{8, 0, 326}, + dictWord{136, 0, 490}, + dictWord{138, 11, 176}, + dictWord{132, 0, 701}, + dictWord{ + 5, + 0, + 472, + }, + dictWord{7, 0, 380}, + dictWord{137, 0, 758}, + dictWord{135, 0, 1947}, + dictWord{6, 0, 1079}, + dictWord{138, 0, 278}, + dictWord{138, 11, 391}, + dictWord{ + 5, + 10, + 329, + }, + dictWord{8, 10, 260}, + dictWord{139, 11, 156}, + dictWord{4, 0, 386}, + dictWord{7, 0, 41}, + dictWord{8, 0, 405}, + dictWord{8, 0, 728}, + dictWord{9, 0, 497}, + dictWord{11, 0, 110}, + dictWord{11, 0, 360}, + dictWord{15, 0, 37}, + dictWord{144, 0, 84}, + dictWord{5, 0, 46}, + dictWord{7, 0, 1452}, + dictWord{7, 0, 1480}, + dictWord{ + 8, + 0, + 634, + }, + dictWord{140, 0, 472}, + dictWord{136, 0, 961}, + dictWord{4, 0, 524}, + dictWord{136, 0, 810}, + dictWord{10, 0, 238}, + dictWord{141, 0, 33}, + dictWord{ + 132, + 10, + 657, + }, + dictWord{152, 10, 7}, + dictWord{133, 0, 532}, + dictWord{5, 0, 997}, + dictWord{135, 10, 1665}, + dictWord{7, 11, 594}, + dictWord{7, 11, 851}, + dictWord{ + 7, + 11, + 1858, + }, + dictWord{9, 11, 411}, + dictWord{9, 11, 574}, + dictWord{9, 11, 666}, + dictWord{9, 11, 737}, + dictWord{10, 11, 346}, + dictWord{10, 11, 712}, + dictWord{ + 11, + 11, + 246, + }, + dictWord{11, 11, 432}, + dictWord{11, 11, 517}, + dictWord{11, 11, 647}, + dictWord{11, 11, 679}, + dictWord{11, 11, 727}, + dictWord{12, 11, 304}, + dictWord{12, 11, 305}, + dictWord{12, 11, 323}, + dictWord{12, 11, 483}, + dictWord{12, 11, 572}, + dictWord{12, 11, 593}, + dictWord{12, 11, 602}, + dictWord{ + 13, + 11, + 95, + }, + dictWord{13, 11, 101}, + dictWord{13, 11, 171}, + dictWord{13, 11, 315}, + dictWord{13, 11, 378}, + dictWord{13, 11, 425}, + dictWord{13, 11, 475}, + dictWord{ + 14, + 11, + 63, + }, + dictWord{14, 11, 380}, + dictWord{14, 11, 384}, + dictWord{15, 11, 133}, + dictWord{18, 11, 112}, + dictWord{148, 11, 72}, + dictWord{5, 11, 955}, + dictWord{136, 11, 814}, + dictWord{134, 0, 1301}, + dictWord{5, 10, 66}, + dictWord{7, 10, 1896}, + dictWord{136, 10, 288}, + dictWord{133, 11, 56}, + dictWord{ + 134, + 10, + 1643, + }, + dictWord{6, 0, 1298}, + dictWord{148, 11, 100}, + dictWord{5, 0, 782}, + dictWord{5, 0, 829}, + dictWord{6, 0, 671}, + dictWord{6, 0, 1156}, + dictWord{6, 0, 1738}, + dictWord{137, 11, 621}, + dictWord{4, 0, 306}, + dictWord{5, 0, 570}, + dictWord{7, 0, 1347}, + dictWord{5, 10, 91}, + dictWord{5, 10, 648}, + dictWord{5, 10, 750}, + dictWord{ + 5, + 10, + 781, + }, + dictWord{6, 10, 54}, + dictWord{6, 10, 112}, + dictWord{6, 10, 402}, + dictWord{6, 10, 1732}, + dictWord{7, 10, 315}, + dictWord{7, 10, 749}, + dictWord{ + 7, + 10, + 1900, + }, + dictWord{9, 10, 78}, + dictWord{9, 10, 508}, + dictWord{10, 10, 611}, + dictWord{10, 10, 811}, + dictWord{11, 10, 510}, + dictWord{11, 10, 728}, + dictWord{ + 13, + 10, + 36, + }, + dictWord{14, 10, 39}, + dictWord{16, 10, 83}, + dictWord{17, 10, 124}, + dictWord{148, 10, 30}, + dictWord{8, 10, 570}, + dictWord{9, 11, 477}, + dictWord{ + 141, + 11, + 78, + }, + dictWord{4, 11, 639}, + dictWord{10, 11, 4}, + dictWord{10, 10, 322}, + dictWord{10, 10, 719}, + dictWord{11, 10, 407}, + dictWord{11, 11, 638}, + dictWord{ + 12, + 11, + 177, + }, + dictWord{148, 11, 57}, + dictWord{7, 0, 1823}, + dictWord{139, 0, 693}, + dictWord{7, 0, 759}, + dictWord{5, 11, 758}, + dictWord{8, 10, 125}, + dictWord{ + 8, + 10, + 369, + }, + dictWord{8, 10, 524}, + dictWord{10, 10, 486}, + dictWord{11, 10, 13}, + dictWord{11, 10, 381}, + dictWord{11, 10, 736}, + dictWord{11, 10, 766}, + dictWord{ + 11, + 10, + 845, + }, + dictWord{13, 10, 114}, + dictWord{13, 10, 292}, + dictWord{142, 10, 47}, + dictWord{7, 0, 1932}, + dictWord{6, 10, 1684}, + dictWord{6, 10, 1731}, + dictWord{7, 10, 356}, + dictWord{8, 10, 54}, + dictWord{8, 10, 221}, + dictWord{9, 10, 225}, + dictWord{9, 10, 356}, + dictWord{10, 10, 77}, + dictWord{10, 10, 446}, + dictWord{ + 10, + 10, + 731, + }, + dictWord{12, 10, 404}, + dictWord{141, 10, 491}, + dictWord{135, 11, 552}, + dictWord{135, 11, 1112}, + dictWord{4, 0, 78}, + dictWord{5, 0, 96}, + dictWord{ + 5, + 0, + 182, + }, + dictWord{6, 0, 1257}, + dictWord{7, 0, 1724}, + dictWord{7, 0, 1825}, + dictWord{10, 0, 394}, + dictWord{10, 0, 471}, + dictWord{11, 0, 532}, + dictWord{ + 14, + 0, + 340, + }, + dictWord{145, 0, 88}, + dictWord{139, 11, 328}, + dictWord{135, 0, 1964}, + dictWord{132, 10, 411}, + dictWord{4, 10, 80}, + dictWord{5, 10, 44}, + dictWord{ + 137, + 11, + 133, + }, + dictWord{5, 11, 110}, + dictWord{6, 11, 169}, + dictWord{6, 11, 1702}, + dictWord{7, 11, 400}, + dictWord{8, 11, 538}, + dictWord{9, 11, 184}, + dictWord{ + 9, + 11, + 524, + }, + dictWord{140, 11, 218}, + dictWord{4, 0, 521}, + dictWord{5, 10, 299}, + dictWord{7, 10, 1083}, + dictWord{140, 11, 554}, + dictWord{6, 11, 133}, + dictWord{ + 9, + 11, + 353, + }, + dictWord{12, 11, 628}, + dictWord{146, 11, 79}, + dictWord{6, 0, 215}, + dictWord{7, 0, 584}, + dictWord{7, 0, 1028}, + dictWord{7, 0, 1473}, + dictWord{ + 7, + 0, + 1721, + }, + dictWord{9, 0, 424}, + dictWord{138, 0, 779}, + dictWord{7, 0, 857}, + dictWord{7, 0, 1209}, + dictWord{7, 10, 1713}, + dictWord{9, 10, 537}, + dictWord{ + 10, + 10, + 165, + }, + dictWord{12, 10, 219}, + dictWord{140, 10, 561}, + dictWord{4, 10, 219}, + dictWord{6, 11, 93}, + dictWord{7, 11, 1422}, + dictWord{7, 10, 1761}, + dictWord{ + 7, + 11, + 1851, + }, + dictWord{8, 11, 673}, + dictWord{9, 10, 86}, + dictWord{9, 11, 529}, + dictWord{140, 11, 43}, + dictWord{137, 11, 371}, + dictWord{136, 0, 671}, + dictWord{ + 5, + 0, + 328, + }, + dictWord{135, 0, 918}, + dictWord{132, 0, 529}, + dictWord{9, 11, 25}, + dictWord{10, 11, 467}, + dictWord{138, 11, 559}, + dictWord{4, 11, 335}, + dictWord{ + 135, + 11, + 942, + }, + dictWord{134, 0, 716}, + dictWord{134, 0, 1509}, + dictWord{6, 0, 67}, + dictWord{7, 0, 258}, + dictWord{7, 0, 1630}, + dictWord{9, 0, 354}, + dictWord{ + 9, + 0, + 675, + }, + dictWord{10, 0, 830}, + dictWord{14, 0, 80}, + dictWord{17, 0, 80}, + dictWord{140, 10, 428}, + dictWord{134, 0, 1112}, + dictWord{6, 0, 141}, + dictWord{7, 0, 225}, + dictWord{9, 0, 59}, + dictWord{9, 0, 607}, + dictWord{10, 0, 312}, + dictWord{11, 0, 687}, + dictWord{12, 0, 555}, + dictWord{13, 0, 373}, + dictWord{13, 0, 494}, + dictWord{ + 148, + 0, + 58, + }, + dictWord{133, 10, 514}, + dictWord{8, 11, 39}, + dictWord{10, 11, 773}, + dictWord{11, 11, 84}, + dictWord{12, 11, 205}, + dictWord{142, 11, 1}, + dictWord{ + 8, + 0, + 783, + }, + dictWord{5, 11, 601}, + dictWord{133, 11, 870}, + dictWord{136, 11, 594}, + dictWord{4, 10, 55}, + dictWord{5, 10, 301}, + dictWord{6, 10, 571}, + dictWord{ + 14, + 10, + 49, + }, + dictWord{146, 10, 102}, + dictWord{132, 11, 181}, + dictWord{134, 11, 1652}, + dictWord{133, 10, 364}, + dictWord{4, 11, 97}, + dictWord{5, 11, 147}, + dictWord{6, 11, 286}, + dictWord{7, 11, 1362}, + dictWord{141, 11, 176}, + dictWord{4, 10, 76}, + dictWord{7, 10, 1550}, + dictWord{9, 10, 306}, + dictWord{9, 10, 430}, + dictWord{9, 10, 663}, + dictWord{10, 10, 683}, + dictWord{11, 10, 427}, + dictWord{11, 10, 753}, + dictWord{12, 10, 334}, + dictWord{12, 10, 442}, + dictWord{ + 14, + 10, + 258, + }, + dictWord{14, 10, 366}, + dictWord{143, 10, 131}, + dictWord{137, 10, 52}, + dictWord{6, 0, 955}, + dictWord{134, 0, 1498}, + dictWord{6, 11, 375}, + dictWord{ + 7, + 11, + 169, + }, + dictWord{7, 11, 254}, + dictWord{136, 11, 780}, + dictWord{7, 0, 430}, + dictWord{11, 0, 46}, + dictWord{14, 0, 343}, + dictWord{142, 11, 343}, + dictWord{ + 135, + 0, + 1183, + }, + dictWord{5, 0, 602}, + dictWord{7, 0, 2018}, + dictWord{9, 0, 418}, + dictWord{9, 0, 803}, + dictWord{135, 11, 1447}, + dictWord{8, 0, 677}, + dictWord{ + 135, + 11, + 1044, + }, + dictWord{139, 11, 285}, + dictWord{4, 10, 656}, + dictWord{135, 10, 779}, + dictWord{135, 10, 144}, + dictWord{5, 11, 629}, + dictWord{ + 135, + 11, + 1549, + }, + dictWord{135, 10, 1373}, + dictWord{138, 11, 209}, + dictWord{7, 10, 554}, + dictWord{7, 10, 605}, + dictWord{141, 10, 10}, + dictWord{5, 10, 838}, + dictWord{ + 5, + 10, + 841, + }, + dictWord{134, 10, 1649}, + dictWord{133, 10, 1012}, + dictWord{6, 0, 1357}, + dictWord{134, 0, 1380}, + dictWord{144, 0, 53}, + dictWord{6, 0, 590}, + dictWord{7, 10, 365}, + dictWord{7, 10, 1357}, + dictWord{7, 10, 1497}, + dictWord{8, 10, 154}, + dictWord{141, 10, 281}, + dictWord{133, 10, 340}, + dictWord{ + 132, + 11, + 420, + }, + dictWord{135, 0, 329}, + dictWord{147, 11, 32}, + dictWord{4, 0, 469}, + dictWord{10, 11, 429}, + dictWord{139, 10, 495}, + dictWord{8, 10, 261}, + dictWord{ + 9, + 10, + 144, + }, + dictWord{9, 10, 466}, + dictWord{10, 10, 370}, + dictWord{12, 10, 470}, + dictWord{13, 10, 144}, + dictWord{142, 10, 348}, + dictWord{142, 0, 460}, + dictWord{4, 11, 325}, + dictWord{9, 10, 897}, + dictWord{138, 11, 125}, + dictWord{6, 0, 1743}, + dictWord{6, 10, 248}, + dictWord{9, 10, 546}, + dictWord{10, 10, 535}, + dictWord{11, 10, 681}, + dictWord{141, 10, 135}, + dictWord{4, 0, 990}, + dictWord{5, 0, 929}, + dictWord{6, 0, 340}, + dictWord{8, 0, 376}, + dictWord{8, 0, 807}, + dictWord{ + 8, + 0, + 963, + }, + dictWord{8, 0, 980}, + dictWord{138, 0, 1007}, + dictWord{134, 0, 1603}, + dictWord{140, 0, 250}, + dictWord{4, 11, 714}, + dictWord{133, 11, 469}, + dictWord{134, 10, 567}, + dictWord{136, 10, 445}, + dictWord{5, 0, 218}, + dictWord{7, 0, 1610}, + dictWord{8, 0, 646}, + dictWord{10, 0, 83}, + dictWord{11, 11, 138}, + dictWord{140, 11, 40}, + dictWord{7, 0, 1512}, + dictWord{135, 0, 1794}, + dictWord{135, 11, 1216}, + dictWord{11, 0, 0}, + dictWord{16, 0, 78}, + dictWord{132, 11, 718}, + dictWord{133, 0, 571}, + dictWord{132, 0, 455}, + dictWord{134, 0, 1012}, + dictWord{5, 11, 124}, + dictWord{5, 11, 144}, + dictWord{6, 11, 548}, + dictWord{7, 11, 15}, + dictWord{7, 11, 153}, + dictWord{137, 11, 629}, + dictWord{142, 11, 10}, + dictWord{6, 11, 75}, + dictWord{7, 11, 1531}, + dictWord{8, 11, 416}, + dictWord{9, 11, 240}, + dictWord{9, 11, 275}, + dictWord{10, 11, 100}, + dictWord{11, 11, 658}, + dictWord{11, 11, 979}, + dictWord{12, 11, 86}, + dictWord{13, 11, 468}, + dictWord{14, 11, 66}, + dictWord{14, 11, 207}, + dictWord{15, 11, 20}, + dictWord{15, 11, 25}, + dictWord{144, 11, 58}, + dictWord{132, 10, 577}, + dictWord{5, 11, 141}, + dictWord{ + 5, + 11, + 915, + }, + dictWord{6, 11, 1783}, + dictWord{7, 11, 211}, + dictWord{7, 11, 698}, + dictWord{7, 11, 1353}, + dictWord{9, 11, 83}, + dictWord{9, 11, 281}, + dictWord{ + 10, + 11, + 376, + }, + dictWord{10, 11, 431}, + dictWord{11, 11, 543}, + dictWord{12, 11, 664}, + dictWord{13, 11, 280}, + dictWord{13, 11, 428}, + dictWord{14, 11, 61}, + dictWord{ + 14, + 11, + 128, + }, + dictWord{17, 11, 52}, + dictWord{145, 11, 81}, + dictWord{6, 0, 161}, + dictWord{7, 0, 372}, + dictWord{137, 0, 597}, + dictWord{132, 0, 349}, + dictWord{ + 10, + 11, + 702, + }, + dictWord{139, 11, 245}, + dictWord{134, 0, 524}, + dictWord{134, 10, 174}, + dictWord{6, 0, 432}, + dictWord{9, 0, 751}, + dictWord{139, 0, 322}, + dictWord{147, 11, 94}, + dictWord{4, 11, 338}, + dictWord{133, 11, 400}, + dictWord{5, 0, 468}, + dictWord{10, 0, 325}, + dictWord{11, 0, 856}, + dictWord{12, 0, 345}, + dictWord{143, 0, 104}, + dictWord{133, 0, 223}, + dictWord{132, 0, 566}, + dictWord{4, 11, 221}, + dictWord{5, 11, 659}, + dictWord{5, 11, 989}, + dictWord{7, 11, 697}, + dictWord{7, 11, 1211}, + dictWord{138, 11, 284}, + dictWord{135, 11, 1070}, + dictWord{4, 0, 59}, + dictWord{135, 0, 1394}, + dictWord{6, 0, 436}, + dictWord{11, 0, 481}, + dictWord{5, 10, 878}, + dictWord{133, 10, 972}, + dictWord{4, 0, 48}, + dictWord{5, 0, 271}, + dictWord{135, 0, 953}, + dictWord{5, 0, 610}, + dictWord{136, 0, 457}, + dictWord{ + 4, + 0, + 773, + }, + dictWord{5, 0, 618}, + dictWord{137, 0, 756}, + dictWord{133, 0, 755}, + dictWord{135, 0, 1217}, + dictWord{138, 11, 507}, + dictWord{132, 10, 351}, + dictWord{132, 0, 197}, + dictWord{143, 11, 78}, + dictWord{4, 11, 188}, + dictWord{7, 11, 805}, + dictWord{11, 11, 276}, + dictWord{142, 11, 293}, + dictWord{ + 5, + 11, + 884, + }, + dictWord{139, 11, 991}, + dictWord{132, 10, 286}, + dictWord{10, 0, 259}, + dictWord{10, 0, 428}, + dictWord{7, 10, 438}, + dictWord{7, 10, 627}, + dictWord{ + 7, + 10, + 1516, + }, + dictWord{8, 10, 40}, + dictWord{9, 10, 56}, + dictWord{9, 10, 294}, + dictWord{11, 10, 969}, + dictWord{11, 10, 995}, + dictWord{146, 10, 148}, + dictWord{ + 4, + 0, + 356, + }, + dictWord{5, 0, 217}, + dictWord{5, 0, 492}, + dictWord{5, 0, 656}, + dictWord{8, 0, 544}, + dictWord{136, 11, 544}, + dictWord{5, 0, 259}, + dictWord{6, 0, 1230}, + dictWord{7, 0, 414}, + dictWord{7, 0, 854}, + dictWord{142, 0, 107}, + dictWord{132, 0, 1007}, + dictWord{15, 0, 14}, + dictWord{144, 0, 5}, + dictWord{6, 0, 1580}, + dictWord{ + 132, + 10, + 738, + }, + dictWord{132, 11, 596}, + dictWord{132, 0, 673}, + dictWord{133, 10, 866}, + dictWord{6, 0, 1843}, + dictWord{135, 11, 1847}, + dictWord{4, 0, 165}, + dictWord{7, 0, 1398}, + dictWord{135, 0, 1829}, + dictWord{135, 11, 1634}, + dictWord{147, 11, 65}, + dictWord{6, 0, 885}, + dictWord{6, 0, 1009}, + dictWord{ + 137, + 0, + 809, + }, + dictWord{133, 10, 116}, + dictWord{132, 10, 457}, + dictWord{136, 11, 770}, + dictWord{9, 0, 498}, + dictWord{12, 0, 181}, + dictWord{10, 11, 361}, + dictWord{142, 11, 316}, + dictWord{134, 11, 595}, + dictWord{5, 0, 9}, + dictWord{7, 0, 297}, + dictWord{7, 0, 966}, + dictWord{140, 0, 306}, + dictWord{4, 11, 89}, + dictWord{ + 5, + 11, + 489, + }, + dictWord{6, 11, 315}, + dictWord{7, 11, 553}, + dictWord{7, 11, 1745}, + dictWord{138, 11, 243}, + dictWord{134, 0, 1487}, + dictWord{132, 0, 437}, + dictWord{ + 5, + 0, + 146, + }, + dictWord{6, 0, 411}, + dictWord{138, 0, 721}, + dictWord{5, 10, 527}, + dictWord{6, 10, 189}, + dictWord{135, 10, 859}, + dictWord{11, 10, 104}, + dictWord{ + 11, + 10, + 554, + }, + dictWord{15, 10, 60}, + dictWord{143, 10, 125}, + dictWord{6, 11, 1658}, + dictWord{9, 11, 3}, + dictWord{10, 11, 154}, + dictWord{11, 11, 641}, + dictWord{13, 11, 85}, + dictWord{13, 11, 201}, + dictWord{141, 11, 346}, + dictWord{6, 0, 177}, + dictWord{135, 0, 467}, + dictWord{134, 0, 1377}, + dictWord{ + 134, + 10, + 116, + }, + dictWord{136, 11, 645}, + dictWord{4, 11, 166}, + dictWord{5, 11, 505}, + dictWord{6, 11, 1670}, + dictWord{137, 11, 110}, + dictWord{133, 10, 487}, + dictWord{ + 4, + 10, + 86, + }, + dictWord{5, 10, 667}, + dictWord{5, 10, 753}, + dictWord{6, 10, 316}, + dictWord{6, 10, 455}, + dictWord{135, 10, 946}, + dictWord{133, 0, 200}, + dictWord{132, 0, 959}, + dictWord{6, 0, 1928}, + dictWord{134, 0, 1957}, + dictWord{139, 11, 203}, + dictWord{150, 10, 45}, + dictWord{4, 10, 79}, + dictWord{7, 10, 1773}, + dictWord{10, 10, 450}, + dictWord{11, 10, 589}, + dictWord{13, 10, 332}, + dictWord{13, 10, 493}, + dictWord{14, 10, 183}, + dictWord{14, 10, 334}, + dictWord{ + 14, + 10, + 362, + }, + dictWord{14, 10, 368}, + dictWord{14, 10, 376}, + dictWord{14, 10, 379}, + dictWord{19, 10, 90}, + dictWord{19, 10, 103}, + dictWord{19, 10, 127}, + dictWord{148, 10, 90}, + dictWord{6, 0, 1435}, + dictWord{135, 11, 1275}, + dictWord{134, 0, 481}, + dictWord{7, 11, 445}, + dictWord{8, 11, 307}, + dictWord{8, 11, 704}, + dictWord{10, 11, 41}, + dictWord{10, 11, 439}, + dictWord{11, 11, 237}, + dictWord{11, 11, 622}, + dictWord{140, 11, 201}, + dictWord{135, 11, 869}, + dictWord{ + 4, + 0, + 84, + }, + dictWord{7, 0, 1482}, + dictWord{10, 0, 76}, + dictWord{138, 0, 142}, + dictWord{11, 11, 277}, + dictWord{144, 11, 14}, + dictWord{135, 11, 1977}, + dictWord{ + 4, + 11, + 189, + }, + dictWord{5, 11, 713}, + dictWord{136, 11, 57}, + dictWord{133, 0, 1015}, + dictWord{138, 11, 371}, + dictWord{4, 0, 315}, + dictWord{5, 0, 507}, + dictWord{ + 135, + 0, + 1370, + }, + dictWord{4, 11, 552}, + dictWord{142, 10, 381}, + dictWord{9, 0, 759}, + dictWord{16, 0, 31}, + dictWord{16, 0, 39}, + dictWord{16, 0, 75}, + dictWord{18, 0, 24}, + dictWord{20, 0, 42}, + dictWord{152, 0, 1}, + dictWord{134, 0, 712}, + dictWord{134, 0, 1722}, + dictWord{133, 10, 663}, + dictWord{133, 10, 846}, + dictWord{ + 8, + 0, + 222, + }, + dictWord{8, 0, 476}, + dictWord{9, 0, 238}, + dictWord{11, 0, 516}, + dictWord{11, 0, 575}, + dictWord{15, 0, 109}, + dictWord{146, 0, 100}, + dictWord{7, 0, 1402}, + dictWord{7, 0, 1414}, + dictWord{12, 0, 456}, + dictWord{5, 10, 378}, + dictWord{8, 10, 465}, + dictWord{9, 10, 286}, + dictWord{10, 10, 185}, + dictWord{10, 10, 562}, + dictWord{10, 10, 635}, + dictWord{11, 10, 31}, + dictWord{11, 10, 393}, + dictWord{13, 10, 312}, + dictWord{18, 10, 65}, + dictWord{18, 10, 96}, + dictWord{147, 10, 89}, + dictWord{4, 0, 986}, + dictWord{6, 0, 1958}, + dictWord{6, 0, 2032}, + dictWord{8, 0, 934}, + dictWord{138, 0, 985}, + dictWord{7, 10, 1880}, + dictWord{9, 10, 680}, + dictWord{139, 10, 798}, + dictWord{134, 10, 1770}, + dictWord{145, 11, 49}, + dictWord{132, 11, 614}, + dictWord{132, 10, 648}, + dictWord{5, 10, 945}, + dictWord{ + 6, + 10, + 1656, + }, + dictWord{6, 10, 1787}, + dictWord{7, 10, 167}, + dictWord{8, 10, 824}, + dictWord{9, 10, 391}, + dictWord{10, 10, 375}, + dictWord{139, 10, 185}, + dictWord{138, 11, 661}, + dictWord{7, 0, 1273}, + dictWord{135, 11, 1945}, + dictWord{7, 0, 706}, + dictWord{7, 0, 1058}, + dictWord{138, 0, 538}, + dictWord{7, 10, 1645}, + dictWord{8, 10, 352}, + dictWord{137, 10, 249}, + dictWord{132, 10, 152}, + dictWord{11, 0, 92}, + dictWord{11, 0, 196}, + dictWord{11, 0, 409}, + dictWord{11, 0, 450}, + dictWord{11, 0, 666}, + dictWord{11, 0, 777}, + dictWord{12, 0, 262}, + dictWord{13, 0, 385}, + dictWord{13, 0, 393}, + dictWord{15, 0, 115}, + dictWord{16, 0, 45}, + dictWord{145, 0, 82}, + dictWord{133, 10, 1006}, + dictWord{6, 0, 40}, + dictWord{135, 0, 1781}, + dictWord{9, 11, 614}, + dictWord{139, 11, 327}, + dictWord{5, 10, 420}, + dictWord{135, 10, 1449}, + dictWord{135, 0, 431}, + dictWord{10, 0, 97}, + dictWord{135, 10, 832}, + dictWord{6, 0, 423}, + dictWord{7, 0, 665}, + dictWord{ + 135, + 0, + 1210, + }, + dictWord{7, 0, 237}, + dictWord{8, 0, 664}, + dictWord{9, 0, 42}, + dictWord{9, 0, 266}, + dictWord{9, 0, 380}, + dictWord{9, 0, 645}, + dictWord{10, 0, 177}, + dictWord{ + 138, + 0, + 276, + }, + dictWord{7, 0, 264}, + dictWord{133, 10, 351}, + dictWord{8, 0, 213}, + dictWord{5, 10, 40}, + dictWord{7, 10, 598}, + dictWord{7, 10, 1638}, + dictWord{ + 9, + 10, + 166, + }, + dictWord{9, 10, 640}, + dictWord{9, 10, 685}, + dictWord{9, 10, 773}, + dictWord{11, 10, 215}, + dictWord{13, 10, 65}, + dictWord{14, 10, 172}, + dictWord{ + 14, + 10, + 317, + }, + dictWord{145, 10, 6}, + dictWord{5, 11, 84}, + dictWord{134, 11, 163}, + dictWord{8, 10, 60}, + dictWord{9, 10, 343}, + dictWord{139, 10, 769}, + dictWord{ + 137, + 0, + 455, + }, + dictWord{133, 11, 410}, + dictWord{8, 0, 906}, + dictWord{12, 0, 700}, + dictWord{12, 0, 706}, + dictWord{140, 0, 729}, + dictWord{21, 11, 33}, + dictWord{ + 150, + 11, + 40, + }, + dictWord{7, 10, 1951}, + dictWord{8, 10, 765}, + dictWord{8, 10, 772}, + dictWord{140, 10, 671}, + dictWord{7, 10, 108}, + dictWord{8, 10, 219}, + dictWord{ + 8, + 10, + 388, + }, + dictWord{9, 10, 639}, + dictWord{9, 10, 775}, + dictWord{11, 10, 275}, + dictWord{140, 10, 464}, + dictWord{5, 11, 322}, + dictWord{7, 11, 1941}, + dictWord{ + 8, + 11, + 186, + }, + dictWord{9, 11, 262}, + dictWord{10, 11, 187}, + dictWord{14, 11, 208}, + dictWord{146, 11, 130}, + dictWord{139, 0, 624}, + dictWord{8, 0, 574}, + dictWord{ + 5, + 11, + 227, + }, + dictWord{140, 11, 29}, + dictWord{7, 11, 1546}, + dictWord{11, 11, 299}, + dictWord{142, 11, 407}, + dictWord{5, 10, 15}, + dictWord{6, 10, 56}, + dictWord{ + 7, + 10, + 1758, + }, + dictWord{8, 10, 500}, + dictWord{9, 10, 730}, + dictWord{11, 10, 331}, + dictWord{13, 10, 150}, + dictWord{142, 10, 282}, + dictWord{7, 11, 1395}, + dictWord{8, 11, 486}, + dictWord{9, 11, 236}, + dictWord{9, 11, 878}, + dictWord{10, 11, 218}, + dictWord{11, 11, 95}, + dictWord{19, 11, 17}, + dictWord{147, 11, 31}, + dictWord{135, 11, 2043}, + dictWord{4, 0, 354}, + dictWord{146, 11, 4}, + dictWord{140, 11, 80}, + dictWord{135, 0, 1558}, + dictWord{134, 10, 1886}, + dictWord{ + 5, + 10, + 205, + }, + dictWord{6, 10, 438}, + dictWord{137, 10, 711}, + dictWord{133, 11, 522}, + dictWord{133, 10, 534}, + dictWord{7, 0, 235}, + dictWord{7, 0, 1475}, + dictWord{ + 15, + 0, + 68, + }, + dictWord{146, 0, 120}, + dictWord{137, 10, 691}, + dictWord{4, 0, 942}, + dictWord{6, 0, 1813}, + dictWord{8, 0, 917}, + dictWord{10, 0, 884}, + dictWord{ + 12, + 0, + 696, + }, + dictWord{12, 0, 717}, + dictWord{12, 0, 723}, + dictWord{12, 0, 738}, + dictWord{12, 0, 749}, + dictWord{12, 0, 780}, + dictWord{16, 0, 97}, + dictWord{146, 0, 169}, + dictWord{6, 10, 443}, + dictWord{8, 11, 562}, + dictWord{9, 10, 237}, + dictWord{9, 10, 571}, + dictWord{9, 10, 695}, + dictWord{10, 10, 139}, + dictWord{11, 10, 715}, + dictWord{12, 10, 417}, + dictWord{141, 10, 421}, + dictWord{135, 0, 957}, + dictWord{133, 0, 830}, + dictWord{134, 11, 1771}, + dictWord{146, 0, 23}, + dictWord{ + 5, + 0, + 496, + }, + dictWord{6, 0, 694}, + dictWord{7, 0, 203}, + dictWord{7, 11, 1190}, + dictWord{137, 11, 620}, + dictWord{137, 11, 132}, + dictWord{6, 0, 547}, + dictWord{ + 134, + 0, + 1549, + }, + dictWord{8, 11, 258}, + dictWord{9, 11, 208}, + dictWord{137, 11, 359}, + dictWord{4, 0, 864}, + dictWord{5, 0, 88}, + dictWord{137, 0, 239}, + dictWord{ + 135, + 11, + 493, + }, + dictWord{4, 11, 317}, + dictWord{135, 11, 1279}, + dictWord{132, 11, 477}, + dictWord{4, 10, 578}, + dictWord{5, 11, 63}, + dictWord{133, 11, 509}, + dictWord{ + 7, + 0, + 650, + }, + dictWord{135, 0, 1310}, + dictWord{7, 0, 1076}, + dictWord{9, 0, 80}, + dictWord{11, 0, 78}, + dictWord{11, 0, 421}, + dictWord{11, 0, 534}, + dictWord{ + 140, + 0, + 545, + }, + dictWord{132, 11, 288}, + dictWord{12, 0, 553}, + dictWord{14, 0, 118}, + dictWord{133, 10, 923}, + dictWord{7, 0, 274}, + dictWord{11, 0, 479}, + dictWord{ + 139, + 0, + 507, + }, + dictWord{8, 11, 89}, + dictWord{8, 11, 620}, + dictWord{9, 11, 49}, + dictWord{10, 11, 774}, + dictWord{11, 11, 628}, + dictWord{12, 11, 322}, + dictWord{ + 143, + 11, + 124, + }, + dictWord{4, 0, 497}, + dictWord{135, 0, 1584}, + dictWord{7, 0, 261}, + dictWord{7, 0, 1115}, + dictWord{7, 0, 1354}, + dictWord{7, 0, 1404}, + dictWord{ + 7, + 0, + 1588, + }, + dictWord{7, 0, 1705}, + dictWord{7, 0, 1902}, + dictWord{9, 0, 465}, + dictWord{10, 0, 248}, + dictWord{10, 0, 349}, + dictWord{10, 0, 647}, + dictWord{11, 0, 527}, + dictWord{11, 0, 660}, + dictWord{11, 0, 669}, + dictWord{12, 0, 529}, + dictWord{13, 0, 305}, + dictWord{132, 10, 924}, + dictWord{133, 10, 665}, + dictWord{ + 136, + 0, + 13, + }, + dictWord{6, 0, 791}, + dictWord{138, 11, 120}, + dictWord{7, 0, 642}, + dictWord{8, 0, 250}, + dictWord{11, 0, 123}, + dictWord{11, 0, 137}, + dictWord{13, 0, 48}, + dictWord{142, 0, 95}, + dictWord{4, 10, 265}, + dictWord{7, 10, 807}, + dictWord{135, 10, 950}, + dictWord{5, 10, 93}, + dictWord{140, 10, 267}, + dictWord{135, 0, 1429}, + dictWord{4, 0, 949}, + dictWord{10, 0, 885}, + dictWord{10, 0, 891}, + dictWord{10, 0, 900}, + dictWord{10, 0, 939}, + dictWord{12, 0, 760}, + dictWord{142, 0, 449}, + dictWord{139, 11, 366}, + dictWord{132, 0, 818}, + dictWord{134, 11, 85}, + dictWord{135, 10, 994}, + dictWord{7, 0, 330}, + dictWord{5, 10, 233}, + dictWord{5, 10, 320}, + dictWord{6, 10, 140}, + dictWord{136, 10, 295}, + dictWord{4, 0, 1004}, + dictWord{8, 0, 982}, + dictWord{136, 0, 993}, + dictWord{133, 10, 978}, + dictWord{4, 10, 905}, + dictWord{6, 10, 1701}, + dictWord{137, 10, 843}, + dictWord{10, 0, 545}, + dictWord{140, 0, 301}, + dictWord{6, 0, 947}, + dictWord{134, 0, 1062}, + dictWord{ + 134, + 0, + 1188, + }, + dictWord{4, 0, 904}, + dictWord{5, 0, 794}, + dictWord{152, 10, 6}, + dictWord{134, 0, 1372}, + dictWord{135, 11, 608}, + dictWord{5, 11, 279}, + dictWord{ + 6, + 11, + 235, + }, + dictWord{7, 11, 468}, + dictWord{8, 11, 446}, + dictWord{9, 11, 637}, + dictWord{10, 11, 717}, + dictWord{11, 11, 738}, + dictWord{140, 11, 514}, + dictWord{ + 132, + 10, + 509, + }, + dictWord{5, 11, 17}, + dictWord{6, 11, 371}, + dictWord{137, 11, 528}, + dictWord{132, 0, 693}, + dictWord{4, 11, 115}, + dictWord{5, 11, 669}, + dictWord{ + 6, + 11, + 407, + }, + dictWord{8, 11, 311}, + dictWord{11, 11, 10}, + dictWord{141, 11, 5}, + dictWord{11, 0, 377}, + dictWord{7, 10, 273}, + dictWord{137, 11, 381}, + dictWord{ + 135, + 0, + 695, + }, + dictWord{7, 0, 386}, + dictWord{138, 0, 713}, + dictWord{135, 10, 1041}, + dictWord{134, 0, 1291}, + dictWord{6, 0, 7}, + dictWord{6, 0, 35}, + dictWord{ + 7, + 0, + 147, + }, + dictWord{7, 0, 1069}, + dictWord{7, 0, 1568}, + dictWord{7, 0, 1575}, + dictWord{7, 0, 1917}, + dictWord{8, 0, 43}, + dictWord{8, 0, 208}, + dictWord{9, 0, 128}, + dictWord{ + 9, + 0, + 866, + }, + dictWord{10, 0, 20}, + dictWord{11, 0, 981}, + dictWord{147, 0, 33}, + dictWord{7, 0, 893}, + dictWord{141, 0, 424}, + dictWord{139, 10, 234}, + dictWord{ + 150, + 11, + 56, + }, + dictWord{5, 11, 779}, + dictWord{5, 11, 807}, + dictWord{6, 11, 1655}, + dictWord{134, 11, 1676}, + dictWord{5, 10, 802}, + dictWord{7, 10, 2021}, + dictWord{136, 10, 805}, + dictWord{4, 11, 196}, + dictWord{5, 10, 167}, + dictWord{5, 11, 558}, + dictWord{5, 10, 899}, + dictWord{5, 11, 949}, + dictWord{6, 10, 410}, + dictWord{137, 10, 777}, + dictWord{137, 10, 789}, + dictWord{134, 10, 1705}, + dictWord{8, 0, 904}, + dictWord{140, 0, 787}, + dictWord{6, 0, 322}, + dictWord{9, 0, 552}, + dictWord{11, 0, 274}, + dictWord{13, 0, 209}, + dictWord{13, 0, 499}, + dictWord{14, 0, 85}, + dictWord{15, 0, 126}, + dictWord{145, 0, 70}, + dictWord{135, 10, 10}, + dictWord{ + 5, + 10, + 11, + }, + dictWord{6, 10, 117}, + dictWord{6, 10, 485}, + dictWord{7, 10, 1133}, + dictWord{9, 10, 582}, + dictWord{9, 10, 594}, + dictWord{11, 10, 21}, + dictWord{ + 11, + 10, + 818, + }, + dictWord{12, 10, 535}, + dictWord{141, 10, 86}, + dictWord{4, 10, 264}, + dictWord{7, 10, 1067}, + dictWord{8, 10, 204}, + dictWord{8, 10, 385}, + dictWord{139, 10, 953}, + dictWord{132, 11, 752}, + dictWord{138, 10, 56}, + dictWord{133, 10, 470}, + dictWord{6, 0, 1808}, + dictWord{8, 0, 83}, + dictWord{8, 0, 742}, + dictWord{8, 0, 817}, + dictWord{9, 0, 28}, + dictWord{9, 0, 29}, + dictWord{9, 0, 885}, + dictWord{10, 0, 387}, + dictWord{11, 0, 633}, + dictWord{11, 0, 740}, + dictWord{13, 0, 235}, + dictWord{13, 0, 254}, + dictWord{15, 0, 143}, + dictWord{143, 0, 146}, + dictWord{140, 0, 49}, + dictWord{134, 0, 1832}, + dictWord{4, 11, 227}, + dictWord{5, 11, 159}, + dictWord{5, 11, 409}, + dictWord{7, 11, 80}, + dictWord{10, 11, 294}, + dictWord{10, 11, 479}, + dictWord{12, 11, 418}, + dictWord{14, 11, 50}, + dictWord{14, 11, 249}, + dictWord{142, 11, 295}, + dictWord{7, 11, 1470}, + dictWord{8, 11, 66}, + dictWord{8, 11, 137}, + dictWord{8, 11, 761}, + dictWord{9, 11, 638}, + dictWord{11, 11, 80}, + dictWord{11, 11, 212}, + dictWord{11, 11, 368}, + dictWord{11, 11, 418}, + dictWord{12, 11, 8}, + dictWord{13, 11, 15}, + dictWord{16, 11, 61}, + dictWord{17, 11, 59}, + dictWord{19, 11, 28}, + dictWord{148, 11, 84}, + dictWord{139, 10, 1015}, + dictWord{138, 11, 468}, + dictWord{135, 0, 421}, + dictWord{6, 0, 415}, + dictWord{ + 7, + 0, + 1049, + }, + dictWord{137, 0, 442}, + dictWord{6, 11, 38}, + dictWord{7, 11, 1220}, + dictWord{8, 11, 185}, + dictWord{8, 11, 256}, + dictWord{9, 11, 22}, + dictWord{ + 9, + 11, + 331, + }, + dictWord{10, 11, 738}, + dictWord{11, 11, 205}, + dictWord{11, 11, 540}, + dictWord{11, 11, 746}, + dictWord{13, 11, 399}, + dictWord{13, 11, 465}, + dictWord{ + 14, + 11, + 88, + }, + dictWord{142, 11, 194}, + dictWord{139, 0, 289}, + dictWord{133, 10, 715}, + dictWord{4, 0, 110}, + dictWord{10, 0, 415}, + dictWord{10, 0, 597}, + dictWord{142, 0, 206}, + dictWord{4, 11, 159}, + dictWord{6, 11, 115}, + dictWord{7, 11, 252}, + dictWord{7, 11, 257}, + dictWord{7, 11, 1928}, + dictWord{8, 11, 69}, + dictWord{ + 9, + 11, + 384, + }, + dictWord{10, 11, 91}, + dictWord{10, 11, 615}, + dictWord{12, 11, 375}, + dictWord{14, 11, 235}, + dictWord{18, 11, 117}, + dictWord{147, 11, 123}, + dictWord{5, 11, 911}, + dictWord{136, 11, 278}, + dictWord{7, 0, 205}, + dictWord{7, 0, 2000}, + dictWord{8, 10, 794}, + dictWord{9, 10, 400}, + dictWord{10, 10, 298}, + dictWord{142, 10, 228}, + dictWord{135, 11, 1774}, + dictWord{4, 11, 151}, + dictWord{7, 11, 1567}, + dictWord{8, 11, 351}, + dictWord{137, 11, 322}, + dictWord{ + 136, + 10, + 724, + }, + dictWord{133, 11, 990}, + dictWord{7, 0, 1539}, + dictWord{11, 0, 512}, + dictWord{13, 0, 205}, + dictWord{19, 0, 30}, + dictWord{22, 0, 36}, + dictWord{23, 0, 19}, + dictWord{135, 11, 1539}, + dictWord{5, 11, 194}, + dictWord{7, 11, 1662}, + dictWord{9, 11, 90}, + dictWord{140, 11, 180}, + dictWord{6, 10, 190}, + dictWord{ + 7, + 10, + 768, + }, + dictWord{135, 10, 1170}, + dictWord{134, 0, 1340}, + dictWord{4, 0, 283}, + dictWord{135, 0, 1194}, + dictWord{133, 11, 425}, + dictWord{133, 11, 971}, + dictWord{12, 0, 549}, + dictWord{14, 10, 67}, + dictWord{147, 10, 60}, + dictWord{135, 10, 1023}, + dictWord{134, 0, 1720}, + dictWord{138, 11, 587}, + dictWord{ + 5, + 11, + 72, + }, + dictWord{6, 11, 264}, + dictWord{7, 11, 21}, + dictWord{7, 11, 46}, + dictWord{7, 11, 2013}, + dictWord{8, 11, 215}, + dictWord{8, 11, 513}, + dictWord{10, 11, 266}, + dictWord{139, 11, 22}, + dictWord{5, 0, 319}, + dictWord{135, 0, 534}, + dictWord{6, 10, 137}, + dictWord{9, 10, 75}, + dictWord{9, 10, 253}, + dictWord{10, 10, 194}, + dictWord{138, 10, 444}, + dictWord{7, 0, 1180}, + dictWord{20, 0, 112}, + dictWord{6, 11, 239}, + dictWord{7, 11, 118}, + dictWord{10, 11, 95}, + dictWord{11, 11, 603}, + dictWord{13, 11, 443}, + dictWord{14, 11, 160}, + dictWord{143, 11, 4}, + dictWord{134, 11, 431}, + dictWord{5, 11, 874}, + dictWord{6, 11, 1677}, + dictWord{ + 11, + 10, + 643, + }, + dictWord{12, 10, 115}, + dictWord{143, 11, 0}, + dictWord{134, 0, 967}, + dictWord{6, 11, 65}, + dictWord{7, 11, 939}, + dictWord{7, 11, 1172}, + dictWord{ + 7, + 11, + 1671, + }, + dictWord{9, 11, 540}, + dictWord{10, 11, 696}, + dictWord{11, 11, 265}, + dictWord{11, 11, 732}, + dictWord{11, 11, 928}, + dictWord{11, 11, 937}, + dictWord{ + 12, + 11, + 399, + }, + dictWord{13, 11, 438}, + dictWord{149, 11, 19}, + dictWord{137, 11, 200}, + dictWord{135, 0, 1940}, + dictWord{5, 10, 760}, + dictWord{7, 10, 542}, + dictWord{8, 10, 135}, + dictWord{136, 10, 496}, + dictWord{140, 11, 44}, + dictWord{7, 11, 1655}, + dictWord{136, 11, 305}, + dictWord{7, 10, 319}, + dictWord{ + 7, + 10, + 355, + }, + dictWord{7, 10, 763}, + dictWord{10, 10, 389}, + dictWord{145, 10, 43}, + dictWord{136, 0, 735}, + dictWord{138, 10, 786}, + dictWord{137, 11, 19}, + dictWord{132, 11, 696}, + dictWord{5, 0, 132}, + dictWord{9, 0, 486}, + dictWord{9, 0, 715}, + dictWord{10, 0, 458}, + dictWord{11, 0, 373}, + dictWord{11, 0, 668}, + dictWord{ + 11, + 0, + 795, + }, + dictWord{11, 0, 897}, + dictWord{12, 0, 272}, + dictWord{12, 0, 424}, + dictWord{12, 0, 539}, + dictWord{12, 0, 558}, + dictWord{14, 0, 245}, + dictWord{ + 14, + 0, + 263, + }, + dictWord{14, 0, 264}, + dictWord{14, 0, 393}, + dictWord{142, 0, 403}, + dictWord{10, 0, 38}, + dictWord{139, 0, 784}, + dictWord{132, 0, 838}, + dictWord{ + 4, + 11, + 302, + }, + dictWord{135, 11, 1766}, + dictWord{133, 0, 379}, + dictWord{5, 0, 8}, + dictWord{6, 0, 89}, + dictWord{6, 0, 400}, + dictWord{7, 0, 1569}, + dictWord{7, 0, 1623}, + dictWord{7, 0, 1850}, + dictWord{8, 0, 218}, + dictWord{8, 0, 422}, + dictWord{9, 0, 570}, + dictWord{10, 0, 626}, + dictWord{4, 11, 726}, + dictWord{133, 11, 630}, + dictWord{ + 4, + 0, + 1017, + }, + dictWord{138, 0, 660}, + dictWord{6, 0, 387}, + dictWord{7, 0, 882}, + dictWord{141, 0, 111}, + dictWord{6, 0, 224}, + dictWord{7, 0, 877}, + dictWord{ + 137, + 0, + 647, + }, + dictWord{4, 10, 58}, + dictWord{5, 10, 286}, + dictWord{6, 10, 319}, + dictWord{7, 10, 402}, + dictWord{7, 10, 1254}, + dictWord{7, 10, 1903}, + dictWord{ + 8, + 10, + 356, + }, + dictWord{140, 10, 408}, + dictWord{135, 0, 790}, + dictWord{9, 0, 510}, + dictWord{10, 0, 53}, + dictWord{4, 10, 389}, + dictWord{9, 10, 181}, + dictWord{ + 10, + 10, + 29, + }, + dictWord{10, 10, 816}, + dictWord{11, 10, 311}, + dictWord{11, 10, 561}, + dictWord{12, 10, 67}, + dictWord{141, 10, 181}, + dictWord{142, 0, 458}, + dictWord{ + 6, + 11, + 118, + }, + dictWord{7, 11, 215}, + dictWord{7, 11, 1521}, + dictWord{140, 11, 11}, + dictWord{134, 0, 954}, + dictWord{135, 0, 394}, + dictWord{134, 0, 1367}, + dictWord{5, 11, 225}, + dictWord{133, 10, 373}, + dictWord{132, 0, 882}, + dictWord{7, 0, 1409}, + dictWord{135, 10, 1972}, + dictWord{135, 10, 1793}, + dictWord{ + 4, + 11, + 370, + }, + dictWord{5, 11, 756}, + dictWord{135, 11, 1326}, + dictWord{150, 11, 13}, + dictWord{7, 11, 354}, + dictWord{10, 11, 410}, + dictWord{139, 11, 815}, + dictWord{6, 11, 1662}, + dictWord{7, 11, 48}, + dictWord{8, 11, 771}, + dictWord{10, 11, 116}, + dictWord{13, 11, 104}, + dictWord{14, 11, 105}, + dictWord{14, 11, 184}, + dictWord{15, 11, 168}, + dictWord{19, 11, 92}, + dictWord{148, 11, 68}, + dictWord{7, 0, 124}, + dictWord{136, 0, 38}, + dictWord{5, 0, 261}, + dictWord{7, 0, 78}, + dictWord{ + 7, + 0, + 199, + }, + dictWord{8, 0, 815}, + dictWord{9, 0, 126}, + dictWord{10, 0, 342}, + dictWord{140, 0, 647}, + dictWord{4, 0, 628}, + dictWord{140, 0, 724}, + dictWord{7, 0, 266}, + dictWord{8, 0, 804}, + dictWord{7, 10, 1651}, + dictWord{145, 10, 89}, + dictWord{135, 0, 208}, + dictWord{134, 0, 1178}, + dictWord{6, 0, 79}, + dictWord{135, 0, 1519}, + dictWord{132, 10, 672}, + dictWord{133, 10, 737}, + dictWord{136, 0, 741}, + dictWord{132, 11, 120}, + dictWord{4, 0, 710}, + dictWord{6, 0, 376}, + dictWord{ + 134, + 0, + 606, + }, + dictWord{134, 0, 1347}, + dictWord{134, 0, 1494}, + dictWord{6, 0, 850}, + dictWord{6, 0, 1553}, + dictWord{137, 0, 821}, + dictWord{5, 10, 145}, + dictWord{ + 134, + 11, + 593, + }, + dictWord{7, 0, 1311}, + dictWord{140, 0, 135}, + dictWord{4, 0, 467}, + dictWord{5, 0, 405}, + dictWord{134, 0, 544}, + dictWord{5, 11, 820}, + dictWord{ + 135, + 11, + 931, + }, + dictWord{6, 0, 100}, + dictWord{7, 0, 244}, + dictWord{7, 0, 632}, + dictWord{7, 0, 1609}, + dictWord{8, 0, 178}, + dictWord{8, 0, 638}, + dictWord{141, 0, 58}, + dictWord{4, 10, 387}, + dictWord{135, 10, 1288}, + dictWord{6, 11, 151}, + dictWord{6, 11, 1675}, + dictWord{7, 11, 383}, + dictWord{151, 11, 10}, + dictWord{ + 132, + 0, + 481, + }, + dictWord{135, 10, 550}, + dictWord{134, 0, 1378}, + dictWord{6, 11, 1624}, + dictWord{11, 11, 11}, + dictWord{12, 11, 422}, + dictWord{13, 11, 262}, + dictWord{142, 11, 360}, + dictWord{133, 0, 791}, + dictWord{4, 11, 43}, + dictWord{5, 11, 344}, + dictWord{133, 11, 357}, + dictWord{7, 0, 1227}, + dictWord{140, 0, 978}, + dictWord{7, 0, 686}, + dictWord{8, 0, 33}, + dictWord{8, 0, 238}, + dictWord{10, 0, 616}, + dictWord{11, 0, 467}, + dictWord{11, 0, 881}, + dictWord{13, 0, 217}, + dictWord{ + 13, + 0, + 253, + }, + dictWord{142, 0, 268}, + dictWord{137, 0, 857}, + dictWord{8, 0, 467}, + dictWord{8, 0, 1006}, + dictWord{7, 11, 148}, + dictWord{8, 11, 284}, + dictWord{ + 141, + 11, + 63, + }, + dictWord{4, 10, 576}, + dictWord{135, 10, 1263}, + dictWord{133, 11, 888}, + dictWord{5, 10, 919}, + dictWord{134, 10, 1673}, + dictWord{20, 10, 37}, + dictWord{148, 11, 37}, + dictWord{132, 0, 447}, + dictWord{132, 11, 711}, + dictWord{4, 0, 128}, + dictWord{5, 0, 415}, + dictWord{6, 0, 462}, + dictWord{7, 0, 294}, + dictWord{ + 7, + 0, + 578, + }, + dictWord{10, 0, 710}, + dictWord{139, 0, 86}, + dictWord{4, 10, 82}, + dictWord{5, 10, 333}, + dictWord{5, 10, 904}, + dictWord{6, 10, 207}, + dictWord{7, 10, 325}, + dictWord{7, 10, 1726}, + dictWord{8, 10, 101}, + dictWord{10, 10, 778}, + dictWord{139, 10, 220}, + dictWord{136, 0, 587}, + dictWord{137, 11, 440}, + dictWord{ + 133, + 10, + 903, + }, + dictWord{6, 0, 427}, + dictWord{7, 0, 1018}, + dictWord{138, 0, 692}, + dictWord{4, 0, 195}, + dictWord{135, 0, 802}, + dictWord{140, 10, 147}, + dictWord{ + 134, + 0, + 1546, + }, + dictWord{134, 0, 684}, + dictWord{132, 10, 705}, + dictWord{136, 0, 345}, + dictWord{11, 11, 678}, + dictWord{140, 11, 307}, + dictWord{ + 133, + 0, + 365, + }, + dictWord{134, 0, 1683}, + dictWord{4, 11, 65}, + dictWord{5, 11, 479}, + dictWord{5, 11, 1004}, + dictWord{7, 11, 1913}, + dictWord{8, 11, 317}, + dictWord{ + 9, + 11, + 302, + }, + dictWord{10, 11, 612}, + dictWord{141, 11, 22}, + dictWord{138, 0, 472}, + dictWord{4, 11, 261}, + dictWord{135, 11, 510}, + dictWord{134, 10, 90}, + dictWord{142, 0, 433}, + dictWord{151, 0, 28}, + dictWord{4, 11, 291}, + dictWord{7, 11, 101}, + dictWord{9, 11, 515}, + dictWord{12, 11, 152}, + dictWord{12, 11, 443}, + dictWord{13, 11, 392}, + dictWord{142, 11, 357}, + dictWord{140, 0, 997}, + dictWord{5, 0, 3}, + dictWord{8, 0, 578}, + dictWord{9, 0, 118}, + dictWord{10, 0, 705}, + dictWord{ + 141, + 0, + 279, + }, + dictWord{135, 11, 1266}, + dictWord{7, 10, 813}, + dictWord{12, 10, 497}, + dictWord{141, 10, 56}, + dictWord{133, 0, 229}, + dictWord{6, 10, 125}, + dictWord{135, 10, 1277}, + dictWord{8, 0, 102}, + dictWord{10, 0, 578}, + dictWord{10, 0, 672}, + dictWord{12, 0, 496}, + dictWord{13, 0, 408}, + dictWord{14, 0, 121}, + dictWord{17, 0, 106}, + dictWord{151, 10, 12}, + dictWord{6, 0, 866}, + dictWord{134, 0, 1080}, + dictWord{136, 0, 1022}, + dictWord{4, 11, 130}, + dictWord{135, 11, 843}, + dictWord{5, 11, 42}, + dictWord{5, 11, 879}, + dictWord{7, 11, 245}, + dictWord{7, 11, 324}, + dictWord{7, 11, 1532}, + dictWord{11, 11, 463}, + dictWord{11, 11, 472}, + dictWord{13, 11, 363}, + dictWord{144, 11, 52}, + dictWord{150, 0, 55}, + dictWord{8, 0, 115}, + dictWord{8, 0, 350}, + dictWord{9, 0, 489}, + dictWord{10, 0, 128}, + dictWord{ + 11, + 0, + 306, + }, + dictWord{12, 0, 373}, + dictWord{14, 0, 30}, + dictWord{17, 0, 79}, + dictWord{19, 0, 80}, + dictWord{4, 11, 134}, + dictWord{133, 11, 372}, + dictWord{ + 134, + 0, + 657, + }, + dictWord{134, 0, 933}, + dictWord{135, 11, 1147}, + dictWord{4, 0, 230}, + dictWord{133, 0, 702}, + dictWord{134, 0, 1728}, + dictWord{4, 0, 484}, + dictWord{ + 18, + 0, + 26, + }, + dictWord{19, 0, 42}, + dictWord{20, 0, 43}, + dictWord{21, 0, 0}, + dictWord{23, 0, 27}, + dictWord{152, 0, 14}, + dictWord{7, 0, 185}, + dictWord{135, 0, 703}, + dictWord{ + 6, + 0, + 417, + }, + dictWord{10, 0, 618}, + dictWord{7, 10, 1106}, + dictWord{9, 10, 770}, + dictWord{11, 10, 112}, + dictWord{140, 10, 413}, + dictWord{134, 0, 803}, + dictWord{132, 11, 644}, + dictWord{134, 0, 1262}, + dictWord{7, 11, 540}, + dictWord{12, 10, 271}, + dictWord{145, 10, 109}, + dictWord{135, 11, 123}, + dictWord{ + 132, + 0, + 633, + }, + dictWord{134, 11, 623}, + dictWord{4, 11, 908}, + dictWord{5, 11, 359}, + dictWord{5, 11, 508}, + dictWord{6, 11, 1723}, + dictWord{7, 11, 343}, + dictWord{ + 7, + 11, + 1996, + }, + dictWord{135, 11, 2026}, + dictWord{135, 0, 479}, + dictWord{10, 0, 262}, + dictWord{7, 10, 304}, + dictWord{9, 10, 646}, + dictWord{9, 10, 862}, + dictWord{ + 11, + 10, + 696, + }, + dictWord{12, 10, 208}, + dictWord{15, 10, 79}, + dictWord{147, 10, 108}, + dictWord{4, 11, 341}, + dictWord{135, 11, 480}, + dictWord{134, 0, 830}, + dictWord{5, 0, 70}, + dictWord{5, 0, 622}, + dictWord{6, 0, 334}, + dictWord{7, 0, 1032}, + dictWord{9, 0, 171}, + dictWord{11, 0, 26}, + dictWord{11, 0, 213}, + dictWord{ + 11, + 0, + 637, + }, + dictWord{11, 0, 707}, + dictWord{12, 0, 202}, + dictWord{12, 0, 380}, + dictWord{13, 0, 226}, + dictWord{13, 0, 355}, + dictWord{14, 0, 222}, + dictWord{145, 0, 42}, + dictWord{135, 10, 981}, + dictWord{143, 0, 217}, + dictWord{137, 11, 114}, + dictWord{4, 0, 23}, + dictWord{4, 0, 141}, + dictWord{5, 0, 313}, + dictWord{5, 0, 1014}, + dictWord{6, 0, 50}, + dictWord{6, 0, 51}, + dictWord{7, 0, 142}, + dictWord{7, 0, 384}, + dictWord{7, 0, 559}, + dictWord{8, 0, 640}, + dictWord{9, 0, 460}, + dictWord{9, 0, 783}, + dictWord{11, 0, 741}, + dictWord{12, 0, 183}, + dictWord{141, 0, 488}, + dictWord{141, 0, 360}, + dictWord{7, 0, 1586}, + dictWord{7, 11, 1995}, + dictWord{8, 11, 299}, + dictWord{11, 11, 890}, + dictWord{140, 11, 674}, + dictWord{132, 10, 434}, + dictWord{7, 0, 652}, + dictWord{134, 10, 550}, + dictWord{7, 0, 766}, + dictWord{5, 10, 553}, + dictWord{138, 10, 824}, + dictWord{7, 0, 737}, + dictWord{8, 0, 298}, + dictWord{136, 10, 452}, + dictWord{4, 11, 238}, + dictWord{5, 11, 503}, + dictWord{6, 11, 179}, + dictWord{7, 11, 2003}, + dictWord{8, 11, 381}, + dictWord{8, 11, 473}, + dictWord{9, 11, 149}, + dictWord{10, 11, 183}, + dictWord{15, 11, 45}, + dictWord{143, 11, 86}, + dictWord{133, 10, 292}, + dictWord{5, 0, 222}, + dictWord{9, 0, 655}, + dictWord{138, 0, 534}, + dictWord{138, 10, 135}, + dictWord{4, 11, 121}, + dictWord{5, 11, 156}, + dictWord{5, 11, 349}, + dictWord{9, 11, 136}, + dictWord{10, 11, 605}, + dictWord{14, 11, 342}, + dictWord{147, 11, 107}, + dictWord{137, 0, 906}, + dictWord{6, 0, 1013}, + dictWord{134, 0, 1250}, + dictWord{6, 0, 1956}, + dictWord{6, 0, 2009}, + dictWord{8, 0, 991}, + dictWord{144, 0, 120}, + dictWord{135, 11, 1192}, + dictWord{ + 138, + 0, + 503, + }, + dictWord{5, 0, 154}, + dictWord{7, 0, 1491}, + dictWord{10, 0, 379}, + dictWord{138, 0, 485}, + dictWord{6, 0, 1867}, + dictWord{6, 0, 1914}, + dictWord{6, 0, 1925}, + dictWord{9, 0, 917}, + dictWord{9, 0, 925}, + dictWord{9, 0, 932}, + dictWord{9, 0, 951}, + dictWord{9, 0, 1007}, + dictWord{9, 0, 1013}, + dictWord{12, 0, 806}, + dictWord{ + 12, + 0, + 810, + }, + dictWord{12, 0, 814}, + dictWord{12, 0, 816}, + dictWord{12, 0, 824}, + dictWord{12, 0, 832}, + dictWord{12, 0, 837}, + dictWord{12, 0, 863}, + dictWord{ + 12, + 0, + 868, + }, + dictWord{12, 0, 870}, + dictWord{12, 0, 889}, + dictWord{12, 0, 892}, + dictWord{12, 0, 900}, + dictWord{12, 0, 902}, + dictWord{12, 0, 908}, + dictWord{12, 0, 933}, + dictWord{12, 0, 942}, + dictWord{12, 0, 949}, + dictWord{12, 0, 954}, + dictWord{15, 0, 175}, + dictWord{15, 0, 203}, + dictWord{15, 0, 213}, + dictWord{15, 0, 218}, + dictWord{15, 0, 225}, + dictWord{15, 0, 231}, + dictWord{15, 0, 239}, + dictWord{15, 0, 248}, + dictWord{15, 0, 252}, + dictWord{18, 0, 190}, + dictWord{18, 0, 204}, + dictWord{ + 18, + 0, + 215, + }, + dictWord{18, 0, 216}, + dictWord{18, 0, 222}, + dictWord{18, 0, 225}, + dictWord{18, 0, 230}, + dictWord{18, 0, 239}, + dictWord{18, 0, 241}, + dictWord{ + 21, + 0, + 42, + }, + dictWord{21, 0, 43}, + dictWord{21, 0, 44}, + dictWord{21, 0, 45}, + dictWord{21, 0, 46}, + dictWord{21, 0, 53}, + dictWord{24, 0, 27}, + dictWord{152, 0, 31}, + dictWord{ + 133, + 0, + 716, + }, + dictWord{135, 0, 844}, + dictWord{4, 0, 91}, + dictWord{5, 0, 388}, + dictWord{5, 0, 845}, + dictWord{6, 0, 206}, + dictWord{6, 0, 252}, + dictWord{6, 0, 365}, + dictWord{ + 7, + 0, + 136, + }, + dictWord{7, 0, 531}, + dictWord{136, 0, 621}, + dictWord{7, 10, 393}, + dictWord{10, 10, 603}, + dictWord{139, 10, 206}, + dictWord{6, 11, 80}, + dictWord{ + 6, + 11, + 1694, + }, + dictWord{7, 11, 173}, + dictWord{7, 11, 1974}, + dictWord{9, 11, 547}, + dictWord{10, 11, 730}, + dictWord{14, 11, 18}, + dictWord{150, 11, 39}, + dictWord{137, 0, 748}, + dictWord{4, 11, 923}, + dictWord{134, 11, 1711}, + dictWord{4, 10, 912}, + dictWord{137, 10, 232}, + dictWord{7, 10, 98}, + dictWord{7, 10, 1973}, + dictWord{136, 10, 716}, + dictWord{14, 0, 103}, + dictWord{133, 10, 733}, + dictWord{132, 11, 595}, + dictWord{12, 0, 158}, + dictWord{18, 0, 8}, + dictWord{19, 0, 62}, + dictWord{20, 0, 6}, + dictWord{22, 0, 4}, + dictWord{23, 0, 2}, + dictWord{23, 0, 9}, + dictWord{5, 11, 240}, + dictWord{6, 11, 459}, + dictWord{7, 11, 12}, + dictWord{7, 11, 114}, + dictWord{7, 11, 502}, + dictWord{7, 11, 1751}, + dictWord{7, 11, 1753}, + dictWord{7, 11, 1805}, + dictWord{8, 11, 658}, + dictWord{9, 11, 1}, + dictWord{11, 11, 959}, + dictWord{13, 11, 446}, + dictWord{142, 11, 211}, + dictWord{135, 0, 576}, + dictWord{5, 0, 771}, + dictWord{5, 0, 863}, + dictWord{5, 0, 898}, + dictWord{6, 0, 648}, + dictWord{ + 6, + 0, + 1632, + }, + dictWord{6, 0, 1644}, + dictWord{134, 0, 1780}, + dictWord{133, 0, 331}, + dictWord{7, 11, 633}, + dictWord{7, 11, 905}, + dictWord{7, 11, 909}, + dictWord{ + 7, + 11, + 1538, + }, + dictWord{9, 11, 767}, + dictWord{140, 11, 636}, + dictWord{140, 0, 632}, + dictWord{5, 0, 107}, + dictWord{7, 0, 201}, + dictWord{136, 0, 518}, + dictWord{ + 6, + 0, + 446, + }, + dictWord{7, 0, 1817}, + dictWord{134, 11, 490}, + dictWord{9, 0, 851}, + dictWord{141, 0, 510}, + dictWord{7, 11, 250}, + dictWord{8, 11, 506}, + dictWord{ + 136, + 11, + 507, + }, + dictWord{4, 0, 504}, + dictWord{137, 10, 72}, + dictWord{132, 11, 158}, + dictWord{4, 11, 140}, + dictWord{7, 11, 362}, + dictWord{8, 11, 209}, + dictWord{ + 9, + 11, + 10, + }, + dictWord{9, 11, 160}, + dictWord{9, 11, 503}, + dictWord{10, 11, 689}, + dictWord{11, 11, 350}, + dictWord{11, 11, 553}, + dictWord{11, 11, 725}, + dictWord{ + 12, + 11, + 252, + }, + dictWord{12, 11, 583}, + dictWord{13, 11, 192}, + dictWord{13, 11, 352}, + dictWord{14, 11, 269}, + dictWord{14, 11, 356}, + dictWord{148, 11, 50}, + dictWord{6, 11, 597}, + dictWord{135, 11, 1318}, + dictWord{135, 10, 1454}, + dictWord{5, 0, 883}, + dictWord{5, 0, 975}, + dictWord{8, 0, 392}, + dictWord{148, 0, 7}, + dictWord{6, 11, 228}, + dictWord{7, 11, 1341}, + dictWord{9, 11, 408}, + dictWord{138, 11, 343}, + dictWord{11, 11, 348}, + dictWord{11, 10, 600}, + dictWord{12, 11, 99}, + dictWord{13, 10, 245}, + dictWord{18, 11, 1}, + dictWord{18, 11, 11}, + dictWord{147, 11, 4}, + dictWord{134, 11, 296}, + dictWord{5, 0, 922}, + dictWord{134, 0, 1707}, + dictWord{132, 11, 557}, + dictWord{4, 11, 548}, + dictWord{7, 10, 164}, + dictWord{7, 10, 1571}, + dictWord{9, 10, 107}, + dictWord{140, 10, 225}, + dictWord{ + 7, + 11, + 197, + }, + dictWord{8, 11, 142}, + dictWord{8, 11, 325}, + dictWord{9, 11, 150}, + dictWord{9, 11, 596}, + dictWord{10, 11, 350}, + dictWord{10, 11, 353}, + dictWord{ + 11, + 11, + 74, + }, + dictWord{11, 11, 315}, + dictWord{14, 11, 423}, + dictWord{143, 11, 141}, + dictWord{5, 0, 993}, + dictWord{7, 0, 515}, + dictWord{137, 0, 91}, + dictWord{4, 0, 131}, + dictWord{8, 0, 200}, + dictWord{5, 10, 484}, + dictWord{5, 10, 510}, + dictWord{6, 10, 434}, + dictWord{7, 10, 1000}, + dictWord{7, 10, 1098}, + dictWord{136, 10, 2}, + dictWord{152, 0, 10}, + dictWord{4, 11, 62}, + dictWord{5, 11, 83}, + dictWord{6, 11, 399}, + dictWord{6, 11, 579}, + dictWord{7, 11, 692}, + dictWord{7, 11, 846}, + dictWord{ + 7, + 11, + 1015, + }, + dictWord{7, 11, 1799}, + dictWord{8, 11, 403}, + dictWord{9, 11, 394}, + dictWord{10, 11, 133}, + dictWord{12, 11, 4}, + dictWord{12, 11, 297}, + dictWord{ + 12, + 11, + 452, + }, + dictWord{16, 11, 81}, + dictWord{18, 11, 19}, + dictWord{18, 11, 25}, + dictWord{21, 11, 14}, + dictWord{22, 11, 12}, + dictWord{151, 11, 18}, + dictWord{ + 140, + 11, + 459, + }, + dictWord{132, 11, 177}, + dictWord{7, 0, 1433}, + dictWord{9, 0, 365}, + dictWord{137, 11, 365}, + dictWord{132, 10, 460}, + dictWord{5, 0, 103}, + dictWord{ + 6, + 0, + 2004, + }, + dictWord{7, 0, 921}, + dictWord{8, 0, 580}, + dictWord{8, 0, 593}, + dictWord{8, 0, 630}, + dictWord{10, 0, 28}, + dictWord{5, 11, 411}, + dictWord{ + 135, + 11, + 653, + }, + dictWord{4, 10, 932}, + dictWord{133, 10, 891}, + dictWord{4, 0, 911}, + dictWord{5, 0, 867}, + dictWord{5, 0, 1013}, + dictWord{7, 0, 2034}, + dictWord{8, 0, 798}, + dictWord{136, 0, 813}, + dictWord{7, 11, 439}, + dictWord{10, 11, 727}, + dictWord{11, 11, 260}, + dictWord{139, 11, 684}, + dictWord{136, 10, 625}, + dictWord{ + 5, + 11, + 208, + }, + dictWord{7, 11, 753}, + dictWord{135, 11, 1528}, + dictWord{5, 0, 461}, + dictWord{7, 0, 1925}, + dictWord{12, 0, 39}, + dictWord{13, 0, 265}, + dictWord{ + 13, + 0, + 439, + }, + dictWord{134, 10, 76}, + dictWord{6, 0, 853}, + dictWord{8, 10, 92}, + dictWord{137, 10, 221}, + dictWord{5, 0, 135}, + dictWord{6, 0, 519}, + dictWord{7, 0, 1722}, + dictWord{10, 0, 271}, + dictWord{11, 0, 261}, + dictWord{145, 0, 54}, + dictWord{139, 11, 814}, + dictWord{14, 0, 338}, + dictWord{148, 0, 81}, + dictWord{4, 0, 300}, + dictWord{133, 0, 436}, + dictWord{5, 0, 419}, + dictWord{5, 0, 687}, + dictWord{7, 0, 864}, + dictWord{9, 0, 470}, + dictWord{135, 11, 864}, + dictWord{9, 0, 836}, + dictWord{ + 133, + 11, + 242, + }, + dictWord{134, 0, 1937}, + dictWord{4, 10, 763}, + dictWord{133, 11, 953}, + dictWord{132, 10, 622}, + dictWord{132, 0, 393}, + dictWord{ + 133, + 10, + 253, + }, + dictWord{8, 0, 357}, + dictWord{10, 0, 745}, + dictWord{14, 0, 426}, + dictWord{17, 0, 94}, + dictWord{19, 0, 57}, + dictWord{135, 10, 546}, + dictWord{5, 11, 615}, + dictWord{146, 11, 37}, + dictWord{9, 10, 73}, + dictWord{10, 10, 110}, + dictWord{14, 10, 185}, + dictWord{145, 10, 119}, + dictWord{11, 0, 703}, + dictWord{7, 10, 624}, + dictWord{7, 10, 916}, + dictWord{10, 10, 256}, + dictWord{139, 10, 87}, + dictWord{133, 11, 290}, + dictWord{5, 10, 212}, + dictWord{12, 10, 35}, + dictWord{ + 141, + 10, + 382, + }, + dictWord{132, 11, 380}, + dictWord{5, 11, 52}, + dictWord{7, 11, 277}, + dictWord{9, 11, 368}, + dictWord{139, 11, 791}, + dictWord{133, 0, 387}, + dictWord{ + 10, + 11, + 138, + }, + dictWord{139, 11, 476}, + dictWord{4, 0, 6}, + dictWord{5, 0, 708}, + dictWord{136, 0, 75}, + dictWord{7, 0, 1351}, + dictWord{9, 0, 581}, + dictWord{10, 0, 639}, + dictWord{11, 0, 453}, + dictWord{140, 0, 584}, + dictWord{132, 0, 303}, + dictWord{138, 0, 772}, + dictWord{135, 10, 1175}, + dictWord{4, 0, 749}, + dictWord{ + 5, + 10, + 816, + }, + dictWord{6, 11, 256}, + dictWord{7, 11, 307}, + dictWord{7, 11, 999}, + dictWord{7, 11, 1481}, + dictWord{7, 11, 1732}, + dictWord{7, 11, 1738}, + dictWord{ + 8, + 11, + 265, + }, + dictWord{9, 11, 414}, + dictWord{11, 11, 316}, + dictWord{12, 11, 52}, + dictWord{13, 11, 420}, + dictWord{147, 11, 100}, + dictWord{135, 11, 1296}, + dictWord{ + 6, + 0, + 1065, + }, + dictWord{5, 10, 869}, + dictWord{5, 10, 968}, + dictWord{6, 10, 1626}, + dictWord{8, 10, 734}, + dictWord{136, 10, 784}, + dictWord{4, 10, 542}, + dictWord{ + 6, + 10, + 1716, + }, + dictWord{6, 10, 1727}, + dictWord{7, 10, 1082}, + dictWord{7, 10, 1545}, + dictWord{8, 10, 56}, + dictWord{8, 10, 118}, + dictWord{8, 10, 412}, + dictWord{ + 8, + 10, + 564, + }, + dictWord{9, 10, 888}, + dictWord{9, 10, 908}, + dictWord{10, 10, 50}, + dictWord{10, 10, 423}, + dictWord{11, 10, 685}, + dictWord{11, 10, 697}, + dictWord{11, 10, 933}, + dictWord{12, 10, 299}, + dictWord{13, 10, 126}, + dictWord{13, 10, 136}, + dictWord{13, 10, 170}, + dictWord{141, 10, 190}, + dictWord{ + 134, + 0, + 226, + }, + dictWord{4, 0, 106}, + dictWord{7, 0, 310}, + dictWord{11, 0, 717}, + dictWord{133, 11, 723}, + dictWord{5, 0, 890}, + dictWord{5, 0, 988}, + dictWord{4, 10, 232}, + dictWord{9, 10, 202}, + dictWord{10, 10, 474}, + dictWord{140, 10, 433}, + dictWord{6, 0, 626}, + dictWord{142, 0, 431}, + dictWord{10, 0, 706}, + dictWord{150, 0, 44}, + dictWord{13, 0, 51}, + dictWord{6, 10, 108}, + dictWord{7, 10, 1003}, + dictWord{7, 10, 1181}, + dictWord{8, 10, 111}, + dictWord{136, 10, 343}, + dictWord{132, 0, 698}, + dictWord{5, 11, 109}, + dictWord{6, 11, 1784}, + dictWord{7, 11, 1895}, + dictWord{12, 11, 296}, + dictWord{140, 11, 302}, + dictWord{134, 0, 828}, + dictWord{ + 134, + 10, + 1712, + }, + dictWord{138, 0, 17}, + dictWord{7, 0, 1929}, + dictWord{4, 10, 133}, + dictWord{5, 11, 216}, + dictWord{7, 10, 711}, + dictWord{7, 10, 1298}, + dictWord{ + 7, + 10, + 1585, + }, + dictWord{7, 11, 1879}, + dictWord{9, 11, 141}, + dictWord{9, 11, 270}, + dictWord{9, 11, 679}, + dictWord{10, 11, 159}, + dictWord{10, 11, 553}, + dictWord{ + 11, + 11, + 197, + }, + dictWord{11, 11, 438}, + dictWord{12, 11, 538}, + dictWord{12, 11, 559}, + dictWord{13, 11, 193}, + dictWord{13, 11, 423}, + dictWord{14, 11, 144}, + dictWord{14, 11, 166}, + dictWord{14, 11, 167}, + dictWord{15, 11, 67}, + dictWord{147, 11, 84}, + dictWord{141, 11, 127}, + dictWord{7, 11, 1872}, + dictWord{ + 137, + 11, + 81, + }, + dictWord{6, 10, 99}, + dictWord{7, 10, 1808}, + dictWord{145, 10, 57}, + dictWord{134, 11, 391}, + dictWord{5, 0, 689}, + dictWord{6, 0, 84}, + dictWord{7, 0, 1250}, + dictWord{6, 10, 574}, + dictWord{7, 10, 428}, + dictWord{10, 10, 669}, + dictWord{11, 10, 485}, + dictWord{11, 10, 840}, + dictWord{12, 10, 300}, + dictWord{ + 142, + 10, + 250, + }, + dictWord{7, 11, 322}, + dictWord{136, 11, 249}, + dictWord{7, 11, 432}, + dictWord{135, 11, 1649}, + dictWord{135, 10, 1871}, + dictWord{137, 10, 252}, + dictWord{6, 11, 155}, + dictWord{140, 11, 234}, + dictWord{7, 0, 871}, + dictWord{19, 0, 27}, + dictWord{147, 11, 27}, + dictWord{140, 0, 498}, + dictWord{5, 0, 986}, + dictWord{6, 0, 130}, + dictWord{138, 0, 823}, + dictWord{6, 0, 1793}, + dictWord{7, 0, 1582}, + dictWord{8, 0, 458}, + dictWord{10, 0, 101}, + dictWord{10, 0, 318}, + dictWord{ + 10, + 0, + 945, + }, + dictWord{12, 0, 734}, + dictWord{16, 0, 104}, + dictWord{18, 0, 177}, + dictWord{6, 10, 323}, + dictWord{135, 10, 1564}, + dictWord{5, 11, 632}, + dictWord{ + 138, + 11, + 526, + }, + dictWord{10, 0, 435}, + dictWord{7, 10, 461}, + dictWord{136, 10, 775}, + dictWord{6, 11, 144}, + dictWord{7, 11, 948}, + dictWord{7, 11, 1042}, + dictWord{ + 7, + 11, + 1857, + }, + dictWord{8, 11, 235}, + dictWord{8, 11, 461}, + dictWord{9, 11, 453}, + dictWord{9, 11, 530}, + dictWord{10, 11, 354}, + dictWord{17, 11, 77}, + dictWord{ + 19, + 11, + 99, + }, + dictWord{148, 11, 79}, + dictWord{138, 0, 966}, + dictWord{7, 0, 1644}, + dictWord{137, 0, 129}, + dictWord{135, 0, 997}, + dictWord{136, 0, 502}, + dictWord{ + 5, + 11, + 196, + }, + dictWord{6, 11, 486}, + dictWord{7, 11, 212}, + dictWord{8, 11, 309}, + dictWord{136, 11, 346}, + dictWord{7, 10, 727}, + dictWord{146, 10, 73}, + dictWord{132, 0, 823}, + dictWord{132, 11, 686}, + dictWord{135, 0, 1927}, + dictWord{4, 0, 762}, + dictWord{7, 0, 1756}, + dictWord{137, 0, 98}, + dictWord{136, 10, 577}, + dictWord{24, 0, 8}, + dictWord{4, 11, 30}, + dictWord{5, 11, 43}, + dictWord{152, 11, 8}, + dictWord{7, 0, 1046}, + dictWord{139, 0, 160}, + dictWord{7, 0, 492}, + dictWord{ + 4, + 10, + 413, + }, + dictWord{5, 10, 677}, + dictWord{7, 11, 492}, + dictWord{8, 10, 432}, + dictWord{140, 10, 280}, + dictWord{6, 0, 45}, + dictWord{7, 0, 433}, + dictWord{8, 0, 129}, + dictWord{9, 0, 21}, + dictWord{10, 0, 392}, + dictWord{11, 0, 79}, + dictWord{12, 0, 499}, + dictWord{13, 0, 199}, + dictWord{141, 0, 451}, + dictWord{7, 0, 558}, + dictWord{ + 136, + 0, + 353, + }, + dictWord{4, 11, 220}, + dictWord{7, 11, 1535}, + dictWord{9, 11, 93}, + dictWord{139, 11, 474}, + dictWord{7, 10, 646}, + dictWord{7, 10, 1730}, + dictWord{ + 11, + 10, + 446, + }, + dictWord{141, 10, 178}, + dictWord{133, 0, 785}, + dictWord{134, 0, 1145}, + dictWord{8, 0, 81}, + dictWord{9, 0, 189}, + dictWord{9, 0, 201}, + dictWord{ + 11, + 0, + 478, + }, + dictWord{11, 0, 712}, + dictWord{141, 0, 338}, + dictWord{5, 0, 353}, + dictWord{151, 0, 26}, + dictWord{11, 0, 762}, + dictWord{132, 10, 395}, + dictWord{ + 134, + 0, + 2024, + }, + dictWord{4, 0, 611}, + dictWord{133, 0, 606}, + dictWord{9, 10, 174}, + dictWord{10, 10, 164}, + dictWord{11, 10, 440}, + dictWord{11, 10, 841}, + dictWord{ + 143, + 10, + 98, + }, + dictWord{134, 10, 426}, + dictWord{10, 10, 608}, + dictWord{139, 10, 1002}, + dictWord{138, 10, 250}, + dictWord{6, 0, 25}, + dictWord{7, 0, 855}, + dictWord{7, 0, 1258}, + dictWord{144, 0, 32}, + dictWord{7, 11, 1725}, + dictWord{138, 11, 393}, + dictWord{5, 11, 263}, + dictWord{134, 11, 414}, + dictWord{6, 0, 2011}, + dictWord{133, 10, 476}, + dictWord{4, 0, 4}, + dictWord{7, 0, 1118}, + dictWord{7, 0, 1320}, + dictWord{7, 0, 1706}, + dictWord{8, 0, 277}, + dictWord{9, 0, 622}, + dictWord{ + 10, + 0, + 9, + }, + dictWord{11, 0, 724}, + dictWord{12, 0, 350}, + dictWord{12, 0, 397}, + dictWord{13, 0, 28}, + dictWord{13, 0, 159}, + dictWord{15, 0, 89}, + dictWord{18, 0, 5}, + dictWord{ + 19, + 0, + 9, + }, + dictWord{20, 0, 34}, + dictWord{22, 0, 47}, + dictWord{6, 11, 178}, + dictWord{6, 11, 1750}, + dictWord{8, 11, 251}, + dictWord{9, 11, 690}, + dictWord{ + 10, + 11, + 155, + }, + dictWord{10, 11, 196}, + dictWord{10, 11, 373}, + dictWord{11, 11, 698}, + dictWord{13, 11, 155}, + dictWord{148, 11, 93}, + dictWord{5, 11, 97}, + dictWord{ + 137, + 11, + 393, + }, + dictWord{7, 0, 764}, + dictWord{11, 0, 461}, + dictWord{12, 0, 172}, + dictWord{5, 10, 76}, + dictWord{6, 10, 458}, + dictWord{6, 10, 497}, + dictWord{ + 7, + 10, + 868, + }, + dictWord{9, 10, 658}, + dictWord{10, 10, 594}, + dictWord{11, 10, 566}, + dictWord{12, 10, 338}, + dictWord{141, 10, 200}, + dictWord{134, 0, 1449}, + dictWord{138, 11, 40}, + dictWord{134, 11, 1639}, + dictWord{134, 0, 1445}, + dictWord{6, 0, 1168}, + dictWord{4, 10, 526}, + dictWord{7, 10, 1029}, + dictWord{ + 135, + 10, + 1054, + }, + dictWord{4, 11, 191}, + dictWord{7, 11, 934}, + dictWord{8, 11, 647}, + dictWord{145, 11, 97}, + dictWord{132, 10, 636}, + dictWord{6, 0, 233}, + dictWord{ + 7, + 10, + 660, + }, + dictWord{7, 10, 1124}, + dictWord{17, 10, 31}, + dictWord{19, 10, 22}, + dictWord{151, 10, 14}, + dictWord{6, 10, 1699}, + dictWord{136, 11, 110}, + dictWord{ + 12, + 11, + 246, + }, + dictWord{15, 11, 162}, + dictWord{19, 11, 64}, + dictWord{20, 11, 8}, + dictWord{20, 11, 95}, + dictWord{22, 11, 24}, + dictWord{152, 11, 17}, + dictWord{ + 5, + 11, + 165, + }, + dictWord{9, 11, 346}, + dictWord{138, 11, 655}, + dictWord{5, 11, 319}, + dictWord{135, 11, 534}, + dictWord{134, 0, 255}, + dictWord{9, 0, 216}, + dictWord{ + 8, + 11, + 128, + }, + dictWord{139, 11, 179}, + dictWord{9, 0, 183}, + dictWord{139, 0, 286}, + dictWord{11, 0, 956}, + dictWord{151, 0, 3}, + dictWord{4, 0, 536}, + dictWord{ + 7, + 0, + 1141, + }, + dictWord{10, 0, 723}, + dictWord{139, 0, 371}, + dictWord{4, 10, 279}, + dictWord{7, 10, 301}, + dictWord{137, 10, 362}, + dictWord{7, 0, 285}, + dictWord{ + 5, + 11, + 57, + }, + dictWord{6, 11, 101}, + dictWord{6, 11, 1663}, + dictWord{7, 11, 132}, + dictWord{7, 11, 1048}, + dictWord{7, 11, 1154}, + dictWord{7, 11, 1415}, + dictWord{ + 7, + 11, + 1507, + }, + dictWord{12, 11, 493}, + dictWord{15, 11, 105}, + dictWord{151, 11, 15}, + dictWord{5, 11, 459}, + dictWord{7, 11, 1073}, + dictWord{7, 10, 1743}, + dictWord{ + 8, + 11, + 241, + }, + dictWord{136, 11, 334}, + dictWord{4, 10, 178}, + dictWord{133, 10, 399}, + dictWord{135, 0, 560}, + dictWord{132, 0, 690}, + dictWord{135, 0, 1246}, + dictWord{18, 0, 157}, + dictWord{147, 0, 63}, + dictWord{10, 0, 599}, + dictWord{11, 0, 33}, + dictWord{12, 0, 571}, + dictWord{149, 0, 1}, + dictWord{6, 11, 324}, + dictWord{ + 6, + 11, + 520, + }, + dictWord{7, 11, 338}, + dictWord{7, 11, 1616}, + dictWord{7, 11, 1729}, + dictWord{8, 11, 228}, + dictWord{9, 11, 69}, + dictWord{139, 11, 750}, + dictWord{ + 7, + 0, + 1862, + }, + dictWord{12, 0, 491}, + dictWord{12, 0, 520}, + dictWord{13, 0, 383}, + dictWord{142, 0, 244}, + dictWord{135, 11, 734}, + dictWord{134, 10, 1692}, + dictWord{10, 0, 448}, + dictWord{11, 0, 630}, + dictWord{17, 0, 117}, + dictWord{6, 10, 202}, + dictWord{7, 11, 705}, + dictWord{12, 10, 360}, + dictWord{17, 10, 118}, + dictWord{18, 10, 27}, + dictWord{148, 10, 67}, + dictWord{4, 11, 73}, + dictWord{6, 11, 612}, + dictWord{7, 11, 927}, + dictWord{7, 11, 1822}, + dictWord{8, 11, 217}, + dictWord{ + 9, + 11, + 472, + }, + dictWord{9, 11, 765}, + dictWord{9, 11, 766}, + dictWord{10, 11, 408}, + dictWord{11, 11, 51}, + dictWord{11, 11, 793}, + dictWord{12, 11, 266}, + dictWord{ + 15, + 11, + 158, + }, + dictWord{20, 11, 89}, + dictWord{150, 11, 32}, + dictWord{4, 0, 190}, + dictWord{133, 0, 554}, + dictWord{133, 0, 1001}, + dictWord{5, 11, 389}, + dictWord{ + 8, + 11, + 636, + }, + dictWord{137, 11, 229}, + dictWord{5, 0, 446}, + dictWord{7, 10, 872}, + dictWord{10, 10, 516}, + dictWord{139, 10, 167}, + dictWord{137, 10, 313}, + dictWord{132, 10, 224}, + dictWord{134, 0, 1313}, + dictWord{5, 10, 546}, + dictWord{7, 10, 35}, + dictWord{8, 10, 11}, + dictWord{8, 10, 12}, + dictWord{9, 10, 315}, + dictWord{9, 10, 533}, + dictWord{10, 10, 802}, + dictWord{11, 10, 166}, + dictWord{12, 10, 525}, + dictWord{142, 10, 243}, + dictWord{6, 0, 636}, + dictWord{137, 0, 837}, + dictWord{5, 10, 241}, + dictWord{8, 10, 242}, + dictWord{9, 10, 451}, + dictWord{10, 10, 667}, + dictWord{11, 10, 598}, + dictWord{140, 10, 429}, + dictWord{22, 10, 46}, + dictWord{150, 11, 46}, + dictWord{136, 11, 472}, + dictWord{11, 0, 278}, + dictWord{142, 0, 73}, + dictWord{141, 11, 185}, + dictWord{132, 0, 868}, + dictWord{ + 134, + 0, + 972, + }, + dictWord{4, 10, 366}, + dictWord{137, 10, 516}, + dictWord{138, 0, 1010}, + dictWord{5, 11, 189}, + dictWord{6, 10, 1736}, + dictWord{7, 11, 442}, + dictWord{ + 7, + 11, + 443, + }, + dictWord{8, 11, 281}, + dictWord{12, 11, 174}, + dictWord{13, 11, 83}, + dictWord{141, 11, 261}, + dictWord{139, 11, 384}, + dictWord{6, 11, 2}, + dictWord{ + 7, + 11, + 191, + }, + dictWord{7, 11, 446}, + dictWord{7, 11, 758}, + dictWord{7, 11, 1262}, + dictWord{7, 11, 1737}, + dictWord{8, 11, 22}, + dictWord{8, 11, 270}, + dictWord{ + 8, + 11, + 612, + }, + dictWord{9, 11, 4}, + dictWord{9, 11, 167}, + dictWord{9, 11, 312}, + dictWord{9, 11, 436}, + dictWord{10, 11, 156}, + dictWord{10, 11, 216}, + dictWord{ + 10, + 11, + 311, + }, + dictWord{10, 11, 623}, + dictWord{11, 11, 72}, + dictWord{11, 11, 330}, + dictWord{11, 11, 455}, + dictWord{12, 11, 101}, + dictWord{12, 11, 321}, + dictWord{ + 12, + 11, + 504, + }, + dictWord{12, 11, 530}, + dictWord{12, 11, 543}, + dictWord{13, 11, 17}, + dictWord{13, 11, 156}, + dictWord{13, 11, 334}, + dictWord{14, 11, 48}, + dictWord{15, 11, 70}, + dictWord{17, 11, 60}, + dictWord{148, 11, 64}, + dictWord{6, 10, 331}, + dictWord{136, 10, 623}, + dictWord{135, 0, 1231}, + dictWord{132, 0, 304}, + dictWord{6, 11, 60}, + dictWord{7, 11, 670}, + dictWord{7, 11, 1327}, + dictWord{8, 11, 411}, + dictWord{8, 11, 435}, + dictWord{9, 11, 653}, + dictWord{9, 11, 740}, + dictWord{10, 11, 385}, + dictWord{11, 11, 222}, + dictWord{11, 11, 324}, + dictWord{11, 11, 829}, + dictWord{140, 11, 611}, + dictWord{7, 0, 506}, + dictWord{6, 11, 166}, + dictWord{7, 11, 374}, + dictWord{135, 11, 1174}, + dictWord{14, 11, 43}, + dictWord{146, 11, 21}, + dictWord{135, 11, 1694}, + dictWord{135, 10, 1888}, + dictWord{ + 5, + 11, + 206, + }, + dictWord{134, 11, 398}, + dictWord{135, 11, 50}, + dictWord{150, 0, 26}, + dictWord{6, 0, 53}, + dictWord{6, 0, 199}, + dictWord{7, 0, 1408}, + dictWord{ + 8, + 0, + 32, + }, + dictWord{8, 0, 93}, + dictWord{10, 0, 397}, + dictWord{10, 0, 629}, + dictWord{11, 0, 593}, + dictWord{11, 0, 763}, + dictWord{13, 0, 326}, + dictWord{145, 0, 35}, + dictWord{134, 0, 105}, + dictWord{132, 10, 394}, + dictWord{4, 0, 843}, + dictWord{138, 0, 794}, + dictWord{11, 0, 704}, + dictWord{141, 0, 396}, + dictWord{5, 0, 114}, + dictWord{5, 0, 255}, + dictWord{141, 0, 285}, + dictWord{6, 0, 619}, + dictWord{7, 0, 898}, + dictWord{7, 0, 1092}, + dictWord{8, 0, 485}, + dictWord{18, 0, 28}, + dictWord{ + 19, + 0, + 116, + }, + dictWord{135, 10, 1931}, + dictWord{9, 0, 145}, + dictWord{7, 10, 574}, + dictWord{135, 10, 1719}, + dictWord{7, 0, 2035}, + dictWord{8, 0, 19}, + dictWord{ + 9, + 0, + 89, + }, + dictWord{138, 0, 831}, + dictWord{132, 10, 658}, + dictWord{6, 11, 517}, + dictWord{7, 11, 1159}, + dictWord{10, 11, 621}, + dictWord{139, 11, 192}, + dictWord{ + 7, + 0, + 1933, + }, + dictWord{7, 11, 1933}, + dictWord{9, 10, 781}, + dictWord{10, 10, 144}, + dictWord{11, 10, 385}, + dictWord{13, 10, 161}, + dictWord{13, 10, 228}, + dictWord{13, 10, 268}, + dictWord{148, 10, 107}, + dictWord{136, 10, 374}, + dictWord{10, 11, 223}, + dictWord{139, 11, 645}, + dictWord{135, 0, 1728}, + dictWord{ + 7, + 11, + 64, + }, + dictWord{7, 11, 289}, + dictWord{136, 11, 245}, + dictWord{4, 10, 344}, + dictWord{6, 10, 498}, + dictWord{139, 10, 323}, + dictWord{136, 0, 746}, + dictWord{ + 135, + 10, + 1063, + }, + dictWord{137, 10, 155}, + dictWord{4, 0, 987}, + dictWord{6, 0, 1964}, + dictWord{6, 0, 1974}, + dictWord{6, 0, 1990}, + dictWord{136, 0, 995}, + dictWord{133, 11, 609}, + dictWord{133, 10, 906}, + dictWord{134, 0, 1550}, + dictWord{134, 0, 874}, + dictWord{5, 11, 129}, + dictWord{6, 11, 61}, + dictWord{ + 135, + 11, + 947, + }, + dictWord{4, 0, 1018}, + dictWord{6, 0, 1938}, + dictWord{6, 0, 2021}, + dictWord{134, 0, 2039}, + dictWord{132, 0, 814}, + dictWord{11, 0, 126}, + dictWord{ + 139, + 0, + 287, + }, + dictWord{134, 0, 1264}, + dictWord{5, 0, 955}, + dictWord{136, 0, 814}, + dictWord{141, 11, 506}, + dictWord{132, 11, 314}, + dictWord{6, 0, 981}, + dictWord{139, 11, 1000}, + dictWord{5, 0, 56}, + dictWord{8, 0, 892}, + dictWord{8, 0, 915}, + dictWord{140, 0, 776}, + dictWord{148, 0, 100}, + dictWord{10, 0, 4}, + dictWord{ + 10, + 0, + 13, + }, + dictWord{11, 0, 638}, + dictWord{148, 0, 57}, + dictWord{148, 11, 74}, + dictWord{5, 0, 738}, + dictWord{132, 10, 616}, + dictWord{133, 11, 637}, + dictWord{ + 136, + 10, + 692, + }, + dictWord{133, 0, 758}, + dictWord{132, 10, 305}, + dictWord{137, 11, 590}, + dictWord{5, 11, 280}, + dictWord{135, 11, 1226}, + dictWord{ + 134, + 11, + 494, + }, + dictWord{135, 0, 1112}, + dictWord{133, 11, 281}, + dictWord{13, 0, 44}, + dictWord{14, 0, 214}, + dictWord{5, 10, 214}, + dictWord{7, 10, 603}, + dictWord{ + 8, + 10, + 611, + }, + dictWord{9, 10, 686}, + dictWord{10, 10, 88}, + dictWord{11, 10, 459}, + dictWord{11, 10, 496}, + dictWord{12, 10, 463}, + dictWord{140, 10, 590}, + dictWord{ + 139, + 0, + 328, + }, + dictWord{135, 11, 1064}, + dictWord{137, 0, 133}, + dictWord{7, 0, 168}, + dictWord{13, 0, 196}, + dictWord{141, 0, 237}, + dictWord{134, 10, 1703}, + dictWord{134, 0, 1152}, + dictWord{135, 0, 1245}, + dictWord{5, 0, 110}, + dictWord{6, 0, 169}, + dictWord{6, 0, 1702}, + dictWord{7, 0, 400}, + dictWord{8, 0, 538}, + dictWord{ + 9, + 0, + 184, + }, + dictWord{9, 0, 524}, + dictWord{140, 0, 218}, + dictWord{6, 0, 1816}, + dictWord{10, 0, 871}, + dictWord{12, 0, 769}, + dictWord{140, 0, 785}, + dictWord{ + 132, + 11, + 630, + }, + dictWord{7, 11, 33}, + dictWord{7, 11, 120}, + dictWord{8, 11, 489}, + dictWord{9, 11, 319}, + dictWord{10, 11, 820}, + dictWord{11, 11, 1004}, + dictWord{ + 12, + 11, + 379, + }, + dictWord{13, 11, 117}, + dictWord{13, 11, 412}, + dictWord{14, 11, 25}, + dictWord{15, 11, 52}, + dictWord{15, 11, 161}, + dictWord{16, 11, 47}, + dictWord{149, 11, 2}, + dictWord{6, 0, 133}, + dictWord{8, 0, 413}, + dictWord{9, 0, 353}, + dictWord{139, 0, 993}, + dictWord{145, 10, 19}, + dictWord{4, 11, 937}, + dictWord{ + 133, + 11, + 801, + }, + dictWord{134, 0, 978}, + dictWord{6, 0, 93}, + dictWord{6, 0, 1508}, + dictWord{7, 0, 1422}, + dictWord{7, 0, 1851}, + dictWord{8, 0, 673}, + dictWord{9, 0, 529}, + dictWord{140, 0, 43}, + dictWord{6, 0, 317}, + dictWord{10, 0, 512}, + dictWord{4, 10, 737}, + dictWord{11, 10, 294}, + dictWord{12, 10, 60}, + dictWord{12, 10, 437}, + dictWord{13, 10, 64}, + dictWord{13, 10, 380}, + dictWord{142, 10, 430}, + dictWord{9, 0, 371}, + dictWord{7, 11, 1591}, + dictWord{144, 11, 43}, + dictWord{6, 10, 1758}, + dictWord{8, 10, 520}, + dictWord{9, 10, 345}, + dictWord{9, 10, 403}, + dictWord{142, 10, 350}, + dictWord{5, 0, 526}, + dictWord{10, 10, 242}, + dictWord{ + 138, + 10, + 579, + }, + dictWord{9, 0, 25}, + dictWord{10, 0, 467}, + dictWord{138, 0, 559}, + dictWord{5, 10, 139}, + dictWord{7, 10, 1168}, + dictWord{138, 10, 539}, + dictWord{ + 4, + 0, + 335, + }, + dictWord{135, 0, 942}, + dictWord{140, 0, 754}, + dictWord{132, 11, 365}, + dictWord{11, 0, 182}, + dictWord{142, 0, 195}, + dictWord{142, 11, 29}, + dictWord{ + 5, + 11, + 7, + }, + dictWord{139, 11, 774}, + dictWord{4, 11, 746}, + dictWord{135, 11, 1090}, + dictWord{8, 0, 39}, + dictWord{10, 0, 773}, + dictWord{11, 0, 84}, + dictWord{ + 12, + 0, + 205, + }, + dictWord{142, 0, 1}, + dictWord{5, 0, 601}, + dictWord{5, 0, 870}, + dictWord{5, 11, 360}, + dictWord{136, 11, 237}, + dictWord{132, 0, 181}, + dictWord{ + 136, + 0, + 370, + }, + dictWord{134, 0, 1652}, + dictWord{8, 0, 358}, + dictWord{4, 10, 107}, + dictWord{7, 10, 613}, + dictWord{8, 10, 439}, + dictWord{8, 10, 504}, + dictWord{ + 9, + 10, + 501, + }, + dictWord{10, 10, 383}, + dictWord{139, 10, 477}, + dictWord{132, 10, 229}, + dictWord{137, 11, 785}, + dictWord{4, 0, 97}, + dictWord{5, 0, 147}, + dictWord{ + 6, + 0, + 286, + }, + dictWord{7, 0, 1362}, + dictWord{141, 0, 176}, + dictWord{6, 0, 537}, + dictWord{7, 0, 788}, + dictWord{7, 0, 1816}, + dictWord{132, 10, 903}, + dictWord{ + 140, + 10, + 71, + }, + dictWord{6, 0, 743}, + dictWord{134, 0, 1223}, + dictWord{6, 0, 375}, + dictWord{7, 0, 169}, + dictWord{7, 0, 254}, + dictWord{8, 0, 780}, + dictWord{135, 11, 1493}, + dictWord{7, 0, 1714}, + dictWord{4, 10, 47}, + dictWord{6, 10, 373}, + dictWord{7, 10, 452}, + dictWord{7, 10, 543}, + dictWord{7, 10, 1856}, + dictWord{9, 10, 6}, + dictWord{ + 11, + 10, + 257, + }, + dictWord{139, 10, 391}, + dictWord{6, 0, 896}, + dictWord{136, 0, 1003}, + dictWord{135, 0, 1447}, + dictWord{137, 11, 341}, + dictWord{5, 10, 980}, + dictWord{134, 10, 1754}, + dictWord{145, 11, 22}, + dictWord{4, 11, 277}, + dictWord{5, 11, 608}, + dictWord{6, 11, 493}, + dictWord{7, 11, 457}, + dictWord{ + 140, + 11, + 384, + }, + dictWord{7, 10, 536}, + dictWord{7, 10, 1331}, + dictWord{136, 10, 143}, + dictWord{140, 0, 744}, + dictWord{7, 11, 27}, + dictWord{135, 11, 316}, + dictWord{ + 18, + 0, + 126, + }, + dictWord{5, 10, 19}, + dictWord{134, 10, 533}, + dictWord{4, 0, 788}, + dictWord{11, 0, 41}, + dictWord{5, 11, 552}, + dictWord{5, 11, 586}, + dictWord{ + 5, + 11, + 676, + }, + dictWord{6, 11, 448}, + dictWord{8, 11, 244}, + dictWord{11, 11, 1}, + dictWord{11, 11, 41}, + dictWord{13, 11, 3}, + dictWord{16, 11, 54}, + dictWord{17, 11, 4}, + dictWord{146, 11, 13}, + dictWord{4, 0, 985}, + dictWord{6, 0, 1801}, + dictWord{4, 11, 401}, + dictWord{137, 11, 264}, + dictWord{5, 10, 395}, + dictWord{5, 10, 951}, + dictWord{134, 10, 1776}, + dictWord{5, 0, 629}, + dictWord{135, 0, 1549}, + dictWord{11, 10, 663}, + dictWord{12, 10, 210}, + dictWord{13, 10, 166}, + dictWord{ + 13, + 10, + 310, + }, + dictWord{14, 10, 373}, + dictWord{147, 10, 43}, + dictWord{9, 11, 543}, + dictWord{10, 11, 524}, + dictWord{11, 11, 30}, + dictWord{12, 11, 524}, + dictWord{ + 14, + 11, + 315, + }, + dictWord{16, 11, 18}, + dictWord{20, 11, 26}, + dictWord{148, 11, 65}, + dictWord{4, 11, 205}, + dictWord{5, 11, 623}, + dictWord{7, 11, 104}, + dictWord{ + 136, + 11, + 519, + }, + dictWord{5, 0, 293}, + dictWord{134, 0, 601}, + dictWord{7, 11, 579}, + dictWord{9, 11, 41}, + dictWord{9, 11, 244}, + dictWord{9, 11, 669}, + dictWord{ + 10, + 11, + 5, + }, + dictWord{11, 11, 861}, + dictWord{11, 11, 951}, + dictWord{139, 11, 980}, + dictWord{132, 11, 717}, + dictWord{132, 10, 695}, + dictWord{7, 10, 497}, + dictWord{ + 9, + 10, + 387, + }, + dictWord{147, 10, 81}, + dictWord{132, 0, 420}, + dictWord{142, 0, 37}, + dictWord{6, 0, 1134}, + dictWord{6, 0, 1900}, + dictWord{12, 0, 830}, + dictWord{ + 12, + 0, + 878, + }, + dictWord{12, 0, 894}, + dictWord{15, 0, 221}, + dictWord{143, 0, 245}, + dictWord{132, 11, 489}, + dictWord{7, 0, 1570}, + dictWord{140, 0, 542}, + dictWord{ + 8, + 0, + 933, + }, + dictWord{136, 0, 957}, + dictWord{6, 0, 1371}, + dictWord{7, 0, 31}, + dictWord{8, 0, 373}, + dictWord{5, 10, 284}, + dictWord{6, 10, 49}, + dictWord{6, 10, 350}, + dictWord{7, 10, 377}, + dictWord{7, 10, 1693}, + dictWord{8, 10, 678}, + dictWord{9, 10, 161}, + dictWord{9, 10, 585}, + dictWord{9, 10, 671}, + dictWord{9, 10, 839}, + dictWord{11, 10, 912}, + dictWord{141, 10, 427}, + dictWord{135, 11, 892}, + dictWord{4, 0, 325}, + dictWord{138, 0, 125}, + dictWord{139, 11, 47}, + dictWord{ + 132, + 10, + 597, + }, + dictWord{138, 0, 323}, + dictWord{6, 0, 1547}, + dictWord{7, 11, 1605}, + dictWord{9, 11, 473}, + dictWord{11, 11, 962}, + dictWord{146, 11, 139}, + dictWord{ + 139, + 10, + 908, + }, + dictWord{7, 11, 819}, + dictWord{9, 11, 26}, + dictWord{9, 11, 392}, + dictWord{10, 11, 152}, + dictWord{10, 11, 226}, + dictWord{11, 11, 19}, + dictWord{ + 12, + 11, + 276, + }, + dictWord{12, 11, 426}, + dictWord{12, 11, 589}, + dictWord{13, 11, 460}, + dictWord{15, 11, 97}, + dictWord{19, 11, 48}, + dictWord{148, 11, 104}, + dictWord{135, 11, 51}, + dictWord{4, 0, 718}, + dictWord{135, 0, 1216}, + dictWord{6, 0, 1896}, + dictWord{6, 0, 1905}, + dictWord{6, 0, 1912}, + dictWord{9, 0, 947}, + dictWord{ + 9, + 0, + 974, + }, + dictWord{12, 0, 809}, + dictWord{12, 0, 850}, + dictWord{12, 0, 858}, + dictWord{12, 0, 874}, + dictWord{12, 0, 887}, + dictWord{12, 0, 904}, + dictWord{ + 12, + 0, + 929, + }, + dictWord{12, 0, 948}, + dictWord{12, 0, 952}, + dictWord{15, 0, 198}, + dictWord{15, 0, 206}, + dictWord{15, 0, 220}, + dictWord{15, 0, 227}, + dictWord{15, 0, 247}, + dictWord{18, 0, 188}, + dictWord{21, 0, 48}, + dictWord{21, 0, 50}, + dictWord{24, 0, 25}, + dictWord{24, 0, 29}, + dictWord{7, 11, 761}, + dictWord{7, 11, 1051}, + dictWord{ + 137, + 11, + 545, + }, + dictWord{5, 0, 124}, + dictWord{5, 0, 144}, + dictWord{6, 0, 548}, + dictWord{7, 0, 15}, + dictWord{7, 0, 153}, + dictWord{137, 0, 629}, + dictWord{ + 135, + 11, + 606, + }, + dictWord{135, 10, 2014}, + dictWord{7, 10, 2007}, + dictWord{9, 11, 46}, + dictWord{9, 10, 101}, + dictWord{9, 10, 450}, + dictWord{10, 10, 66}, + dictWord{ + 10, + 10, + 842, + }, + dictWord{11, 10, 536}, + dictWord{140, 10, 587}, + dictWord{6, 0, 75}, + dictWord{7, 0, 1531}, + dictWord{8, 0, 416}, + dictWord{9, 0, 240}, + dictWord{9, 0, 275}, + dictWord{10, 0, 100}, + dictWord{11, 0, 658}, + dictWord{11, 0, 979}, + dictWord{12, 0, 86}, + dictWord{14, 0, 207}, + dictWord{15, 0, 20}, + dictWord{143, 0, 25}, + dictWord{ + 5, + 0, + 141, + }, + dictWord{5, 0, 915}, + dictWord{6, 0, 1783}, + dictWord{7, 0, 211}, + dictWord{7, 0, 698}, + dictWord{7, 0, 1353}, + dictWord{9, 0, 83}, + dictWord{9, 0, 281}, + dictWord{ + 10, + 0, + 376, + }, + dictWord{10, 0, 431}, + dictWord{11, 0, 543}, + dictWord{12, 0, 664}, + dictWord{13, 0, 280}, + dictWord{13, 0, 428}, + dictWord{14, 0, 61}, + dictWord{ + 14, + 0, + 128, + }, + dictWord{17, 0, 52}, + dictWord{145, 0, 81}, + dictWord{132, 11, 674}, + dictWord{135, 0, 533}, + dictWord{149, 0, 6}, + dictWord{132, 11, 770}, + dictWord{ + 133, + 0, + 538, + }, + dictWord{5, 11, 79}, + dictWord{7, 11, 1027}, + dictWord{7, 11, 1477}, + dictWord{139, 11, 52}, + dictWord{139, 10, 62}, + dictWord{4, 0, 338}, + dictWord{ + 133, + 0, + 400, + }, + dictWord{5, 11, 789}, + dictWord{134, 11, 195}, + dictWord{4, 11, 251}, + dictWord{4, 11, 688}, + dictWord{7, 11, 513}, + dictWord{7, 11, 1284}, + dictWord{ + 9, + 11, + 87, + }, + dictWord{138, 11, 365}, + dictWord{134, 10, 1766}, + dictWord{6, 0, 0}, + dictWord{7, 0, 84}, + dictWord{11, 0, 895}, + dictWord{145, 0, 11}, + dictWord{ + 139, + 0, + 892, + }, + dictWord{4, 0, 221}, + dictWord{5, 0, 659}, + dictWord{7, 0, 697}, + dictWord{7, 0, 1211}, + dictWord{138, 0, 284}, + dictWord{133, 0, 989}, + dictWord{ + 133, + 11, + 889, + }, + dictWord{4, 11, 160}, + dictWord{5, 11, 330}, + dictWord{7, 11, 1434}, + dictWord{136, 11, 174}, + dictWord{6, 10, 1665}, + dictWord{7, 10, 256}, + dictWord{ + 7, + 10, + 1388, + }, + dictWord{10, 10, 499}, + dictWord{139, 10, 670}, + dictWord{7, 0, 848}, + dictWord{4, 10, 22}, + dictWord{5, 10, 10}, + dictWord{136, 10, 97}, + dictWord{ + 138, + 0, + 507, + }, + dictWord{133, 10, 481}, + dictWord{4, 0, 188}, + dictWord{135, 0, 805}, + dictWord{5, 0, 884}, + dictWord{6, 0, 732}, + dictWord{139, 0, 991}, + dictWord{ + 135, + 11, + 968, + }, + dictWord{11, 11, 636}, + dictWord{15, 11, 145}, + dictWord{17, 11, 34}, + dictWord{19, 11, 50}, + dictWord{151, 11, 20}, + dictWord{7, 0, 959}, + dictWord{ + 16, + 0, + 60, + }, + dictWord{6, 10, 134}, + dictWord{7, 10, 437}, + dictWord{9, 10, 37}, + dictWord{14, 10, 285}, + dictWord{142, 10, 371}, + dictWord{7, 10, 486}, + dictWord{ + 8, + 10, + 155, + }, + dictWord{11, 10, 93}, + dictWord{140, 10, 164}, + dictWord{134, 0, 1653}, + dictWord{7, 0, 337}, + dictWord{133, 10, 591}, + dictWord{6, 0, 1989}, + dictWord{ + 8, + 0, + 922, + }, + dictWord{8, 0, 978}, + dictWord{133, 11, 374}, + dictWord{132, 0, 638}, + dictWord{138, 0, 500}, + dictWord{133, 11, 731}, + dictWord{5, 10, 380}, + dictWord{ + 5, + 10, + 650, + }, + dictWord{136, 10, 310}, + dictWord{138, 11, 381}, + dictWord{4, 10, 364}, + dictWord{7, 10, 1156}, + dictWord{7, 10, 1187}, + dictWord{137, 10, 409}, + dictWord{137, 11, 224}, + dictWord{140, 0, 166}, + dictWord{134, 10, 482}, + dictWord{4, 11, 626}, + dictWord{5, 11, 642}, + dictWord{6, 11, 425}, + dictWord{ + 10, + 11, + 202, + }, + dictWord{139, 11, 141}, + dictWord{4, 10, 781}, + dictWord{6, 10, 487}, + dictWord{7, 10, 926}, + dictWord{8, 10, 263}, + dictWord{139, 10, 500}, + dictWord{ + 135, + 0, + 418, + }, + dictWord{4, 10, 94}, + dictWord{135, 10, 1265}, + dictWord{136, 0, 760}, + dictWord{132, 10, 417}, + dictWord{136, 11, 835}, + dictWord{5, 10, 348}, + dictWord{134, 10, 522}, + dictWord{6, 0, 1277}, + dictWord{134, 0, 1538}, + dictWord{139, 11, 541}, + dictWord{135, 11, 1597}, + dictWord{5, 11, 384}, + dictWord{ + 8, + 11, + 455, + }, + dictWord{140, 11, 48}, + dictWord{136, 0, 770}, + dictWord{5, 11, 264}, + dictWord{134, 11, 184}, + dictWord{4, 0, 89}, + dictWord{5, 0, 489}, + dictWord{ + 6, + 0, + 315, + }, + dictWord{7, 0, 553}, + dictWord{7, 0, 1745}, + dictWord{138, 0, 243}, + dictWord{4, 10, 408}, + dictWord{4, 10, 741}, + dictWord{135, 10, 500}, + dictWord{ + 134, + 0, + 1396, + }, + dictWord{133, 0, 560}, + dictWord{6, 0, 1658}, + dictWord{9, 0, 3}, + dictWord{10, 0, 154}, + dictWord{11, 0, 641}, + dictWord{13, 0, 85}, + dictWord{13, 0, 201}, + dictWord{141, 0, 346}, + dictWord{135, 11, 1595}, + dictWord{5, 11, 633}, + dictWord{6, 11, 28}, + dictWord{7, 11, 219}, + dictWord{135, 11, 1323}, + dictWord{ + 9, + 11, + 769, + }, + dictWord{140, 11, 185}, + dictWord{135, 11, 785}, + dictWord{7, 11, 359}, + dictWord{8, 11, 243}, + dictWord{140, 11, 175}, + dictWord{138, 0, 586}, + dictWord{ + 7, + 0, + 1271, + }, + dictWord{134, 10, 73}, + dictWord{132, 11, 105}, + dictWord{4, 0, 166}, + dictWord{5, 0, 505}, + dictWord{134, 0, 1670}, + dictWord{133, 10, 576}, + dictWord{4, 11, 324}, + dictWord{138, 11, 104}, + dictWord{142, 10, 231}, + dictWord{6, 0, 637}, + dictWord{7, 10, 1264}, + dictWord{7, 10, 1678}, + dictWord{ + 11, + 10, + 945, + }, + dictWord{12, 10, 341}, + dictWord{12, 10, 471}, + dictWord{12, 10, 569}, + dictWord{23, 11, 21}, + dictWord{151, 11, 23}, + dictWord{8, 11, 559}, + dictWord{ + 141, + 11, + 109, + }, + dictWord{134, 0, 1947}, + dictWord{7, 0, 445}, + dictWord{8, 0, 307}, + dictWord{8, 0, 704}, + dictWord{10, 0, 41}, + dictWord{10, 0, 439}, + dictWord{ + 11, + 0, + 237, + }, + dictWord{11, 0, 622}, + dictWord{140, 0, 201}, + dictWord{135, 11, 963}, + dictWord{135, 0, 1977}, + dictWord{4, 0, 189}, + dictWord{5, 0, 713}, + dictWord{ + 136, + 0, + 57, + }, + dictWord{138, 0, 371}, + dictWord{135, 10, 538}, + dictWord{132, 0, 552}, + dictWord{6, 0, 883}, + dictWord{133, 10, 413}, + dictWord{6, 0, 923}, + dictWord{ + 132, + 11, + 758, + }, + dictWord{138, 11, 215}, + dictWord{136, 10, 495}, + dictWord{7, 10, 54}, + dictWord{8, 10, 312}, + dictWord{10, 10, 191}, + dictWord{10, 10, 614}, + dictWord{140, 10, 567}, + dictWord{7, 11, 351}, + dictWord{139, 11, 128}, + dictWord{7, 0, 875}, + dictWord{6, 10, 468}, + dictWord{7, 10, 1478}, + dictWord{8, 10, 530}, + dictWord{142, 10, 290}, + dictWord{135, 0, 1788}, + dictWord{17, 0, 49}, + dictWord{133, 11, 918}, + dictWord{12, 11, 398}, + dictWord{20, 11, 39}, + dictWord{ + 21, + 11, + 11, + }, + dictWord{150, 11, 41}, + dictWord{10, 0, 661}, + dictWord{6, 10, 484}, + dictWord{135, 10, 822}, + dictWord{135, 0, 1945}, + dictWord{134, 0, 794}, + dictWord{ + 137, + 10, + 900, + }, + dictWord{135, 10, 1335}, + dictWord{6, 10, 1724}, + dictWord{135, 10, 2022}, + dictWord{132, 11, 340}, + dictWord{134, 0, 1135}, + dictWord{ + 4, + 0, + 784, + }, + dictWord{133, 0, 745}, + dictWord{5, 0, 84}, + dictWord{134, 0, 163}, + dictWord{133, 0, 410}, + dictWord{4, 0, 976}, + dictWord{5, 11, 985}, + dictWord{7, 11, 509}, + dictWord{7, 11, 529}, + dictWord{145, 11, 96}, + dictWord{132, 10, 474}, + dictWord{134, 0, 703}, + dictWord{135, 11, 1919}, + dictWord{5, 0, 322}, + dictWord{ + 8, + 0, + 186, + }, + dictWord{9, 0, 262}, + dictWord{10, 0, 187}, + dictWord{142, 0, 208}, + dictWord{135, 10, 1504}, + dictWord{133, 0, 227}, + dictWord{9, 0, 560}, + dictWord{ + 13, + 0, + 208, + }, + dictWord{133, 10, 305}, + dictWord{132, 11, 247}, + dictWord{7, 0, 1395}, + dictWord{8, 0, 486}, + dictWord{9, 0, 236}, + dictWord{9, 0, 878}, + dictWord{ + 10, + 0, + 218, + }, + dictWord{11, 0, 95}, + dictWord{19, 0, 17}, + dictWord{147, 0, 31}, + dictWord{7, 0, 2043}, + dictWord{8, 0, 672}, + dictWord{141, 0, 448}, + dictWord{4, 11, 184}, + dictWord{5, 11, 390}, + dictWord{6, 11, 337}, + dictWord{7, 11, 23}, + dictWord{7, 11, 494}, + dictWord{7, 11, 618}, + dictWord{7, 11, 1456}, + dictWord{8, 11, 27}, + dictWord{ + 8, + 11, + 599, + }, + dictWord{10, 11, 153}, + dictWord{139, 11, 710}, + dictWord{135, 0, 466}, + dictWord{135, 10, 1236}, + dictWord{6, 0, 167}, + dictWord{7, 0, 186}, + dictWord{7, 0, 656}, + dictWord{10, 0, 643}, + dictWord{4, 10, 480}, + dictWord{6, 10, 302}, + dictWord{6, 10, 1642}, + dictWord{7, 10, 837}, + dictWord{7, 10, 1547}, + dictWord{ + 7, + 10, + 1657, + }, + dictWord{8, 10, 429}, + dictWord{9, 10, 228}, + dictWord{13, 10, 289}, + dictWord{13, 10, 343}, + dictWord{147, 10, 101}, + dictWord{134, 0, 1428}, + dictWord{134, 0, 1440}, + dictWord{5, 0, 412}, + dictWord{7, 10, 278}, + dictWord{10, 10, 739}, + dictWord{11, 10, 708}, + dictWord{141, 10, 348}, + dictWord{ + 134, + 0, + 1118, + }, + dictWord{136, 0, 562}, + dictWord{148, 11, 46}, + dictWord{9, 0, 316}, + dictWord{139, 0, 256}, + dictWord{134, 0, 1771}, + dictWord{135, 0, 1190}, + dictWord{137, 0, 132}, + dictWord{10, 11, 227}, + dictWord{11, 11, 497}, + dictWord{11, 11, 709}, + dictWord{140, 11, 415}, + dictWord{143, 0, 66}, + dictWord{6, 11, 360}, + dictWord{7, 11, 1664}, + dictWord{136, 11, 478}, + dictWord{144, 10, 28}, + dictWord{4, 0, 317}, + dictWord{135, 0, 1279}, + dictWord{5, 0, 63}, + dictWord{ + 133, + 0, + 509, + }, + dictWord{136, 11, 699}, + dictWord{145, 10, 36}, + dictWord{134, 0, 1475}, + dictWord{11, 11, 343}, + dictWord{142, 11, 127}, + dictWord{132, 11, 739}, + dictWord{132, 0, 288}, + dictWord{135, 11, 1757}, + dictWord{8, 0, 89}, + dictWord{8, 0, 620}, + dictWord{9, 0, 608}, + dictWord{11, 0, 628}, + dictWord{12, 0, 322}, + dictWord{143, 0, 124}, + dictWord{134, 0, 1225}, + dictWord{7, 0, 1189}, + dictWord{4, 11, 67}, + dictWord{5, 11, 422}, + dictWord{6, 10, 363}, + dictWord{7, 11, 1037}, + dictWord{7, 11, 1289}, + dictWord{7, 11, 1555}, + dictWord{7, 10, 1955}, + dictWord{8, 10, 725}, + dictWord{9, 11, 741}, + dictWord{145, 11, 108}, + dictWord{ + 134, + 0, + 1468, + }, + dictWord{6, 0, 689}, + dictWord{134, 0, 1451}, + dictWord{138, 0, 120}, + dictWord{151, 0, 1}, + dictWord{137, 10, 805}, + dictWord{142, 0, 329}, + dictWord{ + 5, + 10, + 813, + }, + dictWord{135, 10, 2046}, + dictWord{135, 0, 226}, + dictWord{138, 11, 96}, + dictWord{7, 0, 1855}, + dictWord{5, 10, 712}, + dictWord{11, 10, 17}, + dictWord{13, 10, 321}, + dictWord{144, 10, 67}, + dictWord{9, 0, 461}, + dictWord{6, 10, 320}, + dictWord{7, 10, 781}, + dictWord{7, 10, 1921}, + dictWord{9, 10, 55}, + dictWord{ + 10, + 10, + 186, + }, + dictWord{10, 10, 273}, + dictWord{10, 10, 664}, + dictWord{10, 10, 801}, + dictWord{11, 10, 996}, + dictWord{11, 10, 997}, + dictWord{13, 10, 157}, + dictWord{142, 10, 170}, + dictWord{8, 11, 203}, + dictWord{8, 10, 271}, + dictWord{11, 11, 823}, + dictWord{11, 11, 846}, + dictWord{12, 11, 482}, + dictWord{ + 13, + 11, + 133, + }, + dictWord{13, 11, 277}, + dictWord{13, 11, 302}, + dictWord{13, 11, 464}, + dictWord{14, 11, 205}, + dictWord{142, 11, 221}, + dictWord{135, 0, 1346}, + dictWord{4, 11, 449}, + dictWord{133, 11, 718}, + dictWord{134, 0, 85}, + dictWord{14, 0, 299}, + dictWord{7, 10, 103}, + dictWord{7, 10, 863}, + dictWord{11, 10, 184}, + dictWord{145, 10, 62}, + dictWord{4, 11, 355}, + dictWord{6, 11, 311}, + dictWord{9, 11, 256}, + dictWord{138, 11, 404}, + dictWord{137, 10, 659}, + dictWord{ + 138, + 11, + 758, + }, + dictWord{133, 11, 827}, + dictWord{5, 11, 64}, + dictWord{140, 11, 581}, + dictWord{134, 0, 1171}, + dictWord{4, 11, 442}, + dictWord{7, 11, 1047}, + dictWord{ + 7, + 11, + 1352, + }, + dictWord{135, 11, 1643}, + dictWord{132, 0, 980}, + dictWord{5, 11, 977}, + dictWord{6, 11, 288}, + dictWord{7, 11, 528}, + dictWord{135, 11, 1065}, + dictWord{5, 0, 279}, + dictWord{6, 0, 235}, + dictWord{7, 0, 468}, + dictWord{8, 0, 446}, + dictWord{9, 0, 637}, + dictWord{10, 0, 717}, + dictWord{11, 0, 738}, + dictWord{ + 140, + 0, + 514, + }, + dictWord{132, 0, 293}, + dictWord{11, 10, 337}, + dictWord{142, 10, 303}, + dictWord{136, 11, 285}, + dictWord{5, 0, 17}, + dictWord{6, 0, 371}, + dictWord{ + 9, + 0, + 528, + }, + dictWord{12, 0, 364}, + dictWord{132, 11, 254}, + dictWord{5, 10, 77}, + dictWord{7, 10, 1455}, + dictWord{10, 10, 843}, + dictWord{147, 10, 73}, + dictWord{ + 150, + 0, + 5, + }, + dictWord{132, 10, 458}, + dictWord{6, 11, 12}, + dictWord{7, 11, 1219}, + dictWord{145, 11, 73}, + dictWord{135, 10, 1420}, + dictWord{6, 10, 109}, + dictWord{138, 10, 382}, + dictWord{135, 11, 125}, + dictWord{6, 10, 330}, + dictWord{7, 10, 1084}, + dictWord{139, 10, 142}, + dictWord{6, 11, 369}, + dictWord{ + 6, + 11, + 502, + }, + dictWord{7, 11, 1036}, + dictWord{8, 11, 348}, + dictWord{9, 11, 452}, + dictWord{10, 11, 26}, + dictWord{11, 11, 224}, + dictWord{11, 11, 387}, + dictWord{ + 11, + 11, + 772, + }, + dictWord{12, 11, 95}, + dictWord{12, 11, 629}, + dictWord{13, 11, 195}, + dictWord{13, 11, 207}, + dictWord{13, 11, 241}, + dictWord{14, 11, 260}, + dictWord{ + 14, + 11, + 270, + }, + dictWord{143, 11, 140}, + dictWord{132, 11, 269}, + dictWord{5, 11, 480}, + dictWord{7, 11, 532}, + dictWord{7, 11, 1197}, + dictWord{7, 11, 1358}, + dictWord{8, 11, 291}, + dictWord{11, 11, 349}, + dictWord{142, 11, 396}, + dictWord{150, 0, 48}, + dictWord{10, 0, 601}, + dictWord{13, 0, 353}, + dictWord{141, 0, 376}, + dictWord{5, 0, 779}, + dictWord{5, 0, 807}, + dictWord{6, 0, 1655}, + dictWord{134, 0, 1676}, + dictWord{142, 11, 223}, + dictWord{4, 0, 196}, + dictWord{5, 0, 558}, + dictWord{133, 0, 949}, + dictWord{148, 11, 15}, + dictWord{135, 11, 1764}, + dictWord{134, 0, 1322}, + dictWord{132, 0, 752}, + dictWord{139, 0, 737}, + dictWord{ + 135, + 11, + 657, + }, + dictWord{136, 11, 533}, + dictWord{135, 0, 412}, + dictWord{4, 0, 227}, + dictWord{5, 0, 159}, + dictWord{5, 0, 409}, + dictWord{7, 0, 80}, + dictWord{8, 0, 556}, + dictWord{10, 0, 479}, + dictWord{12, 0, 418}, + dictWord{14, 0, 50}, + dictWord{14, 0, 123}, + dictWord{14, 0, 192}, + dictWord{14, 0, 249}, + dictWord{14, 0, 295}, + dictWord{143, 0, 27}, + dictWord{7, 0, 1470}, + dictWord{8, 0, 66}, + dictWord{8, 0, 137}, + dictWord{8, 0, 761}, + dictWord{9, 0, 638}, + dictWord{11, 0, 80}, + dictWord{11, 0, 212}, + dictWord{11, 0, 368}, + dictWord{11, 0, 418}, + dictWord{12, 0, 8}, + dictWord{13, 0, 15}, + dictWord{16, 0, 61}, + dictWord{17, 0, 59}, + dictWord{19, 0, 28}, + dictWord{ + 148, + 0, + 84, + }, + dictWord{135, 10, 1985}, + dictWord{4, 11, 211}, + dictWord{4, 11, 332}, + dictWord{5, 11, 335}, + dictWord{6, 11, 238}, + dictWord{7, 11, 269}, + dictWord{ + 7, + 11, + 811, + }, + dictWord{7, 11, 1797}, + dictWord{8, 10, 122}, + dictWord{8, 11, 836}, + dictWord{9, 11, 507}, + dictWord{141, 11, 242}, + dictWord{6, 0, 683}, + dictWord{ + 134, + 0, + 1252, + }, + dictWord{4, 0, 873}, + dictWord{132, 10, 234}, + dictWord{134, 0, 835}, + dictWord{6, 0, 38}, + dictWord{7, 0, 1220}, + dictWord{8, 0, 185}, + dictWord{8, 0, 256}, + dictWord{9, 0, 22}, + dictWord{9, 0, 331}, + dictWord{10, 0, 738}, + dictWord{11, 0, 205}, + dictWord{11, 0, 540}, + dictWord{11, 0, 746}, + dictWord{13, 0, 465}, + dictWord{ + 14, + 0, + 88, + }, + dictWord{142, 0, 194}, + dictWord{138, 0, 986}, + dictWord{5, 11, 1009}, + dictWord{12, 11, 582}, + dictWord{146, 11, 131}, + dictWord{4, 0, 159}, + dictWord{ + 6, + 0, + 115, + }, + dictWord{7, 0, 252}, + dictWord{7, 0, 257}, + dictWord{7, 0, 1928}, + dictWord{8, 0, 69}, + dictWord{9, 0, 384}, + dictWord{10, 0, 91}, + dictWord{10, 0, 615}, + dictWord{ + 12, + 0, + 375, + }, + dictWord{14, 0, 235}, + dictWord{18, 0, 117}, + dictWord{147, 0, 123}, + dictWord{133, 0, 911}, + dictWord{136, 0, 278}, + dictWord{5, 10, 430}, + dictWord{ + 5, + 10, + 932, + }, + dictWord{6, 10, 131}, + dictWord{7, 10, 417}, + dictWord{9, 10, 522}, + dictWord{11, 10, 314}, + dictWord{141, 10, 390}, + dictWord{14, 10, 149}, + dictWord{14, 10, 399}, + dictWord{143, 10, 57}, + dictWord{4, 0, 151}, + dictWord{7, 0, 1567}, + dictWord{136, 0, 749}, + dictWord{5, 11, 228}, + dictWord{6, 11, 203}, + dictWord{ + 7, + 11, + 156, + }, + dictWord{8, 11, 347}, + dictWord{137, 11, 265}, + dictWord{132, 10, 507}, + dictWord{10, 0, 989}, + dictWord{140, 0, 956}, + dictWord{133, 0, 990}, + dictWord{5, 0, 194}, + dictWord{6, 0, 927}, + dictWord{7, 0, 1662}, + dictWord{9, 0, 90}, + dictWord{140, 0, 564}, + dictWord{4, 10, 343}, + dictWord{133, 10, 511}, + dictWord{133, 0, 425}, + dictWord{7, 10, 455}, + dictWord{138, 10, 591}, + dictWord{4, 0, 774}, + dictWord{7, 11, 476}, + dictWord{7, 11, 1592}, + dictWord{138, 11, 87}, + dictWord{5, 0, 971}, + dictWord{135, 10, 1381}, + dictWord{5, 11, 318}, + dictWord{147, 11, 121}, + dictWord{5, 11, 291}, + dictWord{7, 11, 765}, + dictWord{9, 11, 389}, + dictWord{140, 11, 548}, + dictWord{134, 10, 575}, + dictWord{4, 0, 827}, + dictWord{12, 0, 646}, + dictWord{12, 0, 705}, + dictWord{12, 0, 712}, + dictWord{140, 0, 714}, + dictWord{139, 0, 752}, + dictWord{137, 0, 662}, + dictWord{5, 0, 72}, + dictWord{6, 0, 264}, + dictWord{7, 0, 21}, + dictWord{7, 0, 46}, + dictWord{7, 0, 2013}, + dictWord{ + 8, + 0, + 215, + }, + dictWord{8, 0, 513}, + dictWord{10, 0, 266}, + dictWord{139, 0, 22}, + dictWord{139, 11, 522}, + dictWord{6, 0, 239}, + dictWord{7, 0, 118}, + dictWord{10, 0, 95}, + dictWord{11, 0, 603}, + dictWord{13, 0, 443}, + dictWord{14, 0, 160}, + dictWord{143, 0, 4}, + dictWord{6, 0, 431}, + dictWord{134, 0, 669}, + dictWord{7, 10, 1127}, + dictWord{ + 7, + 10, + 1572, + }, + dictWord{10, 10, 297}, + dictWord{10, 10, 422}, + dictWord{11, 10, 764}, + dictWord{11, 10, 810}, + dictWord{12, 10, 264}, + dictWord{13, 10, 102}, + dictWord{13, 10, 300}, + dictWord{13, 10, 484}, + dictWord{14, 10, 147}, + dictWord{14, 10, 229}, + dictWord{17, 10, 71}, + dictWord{18, 10, 118}, + dictWord{ + 147, + 10, + 120, + }, + dictWord{5, 0, 874}, + dictWord{6, 0, 1677}, + dictWord{15, 0, 0}, + dictWord{10, 11, 525}, + dictWord{139, 11, 82}, + dictWord{6, 0, 65}, + dictWord{7, 0, 939}, + dictWord{ + 7, + 0, + 1172, + }, + dictWord{7, 0, 1671}, + dictWord{9, 0, 540}, + dictWord{10, 0, 696}, + dictWord{11, 0, 265}, + dictWord{11, 0, 732}, + dictWord{11, 0, 928}, + dictWord{ + 11, + 0, + 937, + }, + dictWord{141, 0, 438}, + dictWord{134, 0, 1350}, + dictWord{136, 11, 547}, + dictWord{132, 11, 422}, + dictWord{5, 11, 355}, + dictWord{145, 11, 0}, + dictWord{137, 11, 905}, + dictWord{5, 0, 682}, + dictWord{135, 0, 1887}, + dictWord{132, 0, 809}, + dictWord{4, 0, 696}, + dictWord{133, 11, 865}, + dictWord{6, 0, 1074}, + dictWord{6, 0, 1472}, + dictWord{14, 10, 35}, + dictWord{142, 10, 191}, + dictWord{5, 11, 914}, + dictWord{134, 11, 1625}, + dictWord{133, 11, 234}, + dictWord{ + 135, + 11, + 1383, + }, + dictWord{137, 11, 780}, + dictWord{132, 10, 125}, + dictWord{4, 0, 726}, + dictWord{133, 0, 630}, + dictWord{8, 0, 802}, + dictWord{136, 0, 838}, + dictWord{132, 10, 721}, + dictWord{6, 0, 1337}, + dictWord{7, 0, 776}, + dictWord{19, 0, 56}, + dictWord{136, 10, 145}, + dictWord{132, 0, 970}, + dictWord{7, 10, 792}, + dictWord{8, 10, 147}, + dictWord{10, 10, 821}, + dictWord{139, 10, 1021}, + dictWord{139, 10, 970}, + dictWord{8, 0, 940}, + dictWord{137, 0, 797}, + dictWord{ + 135, + 11, + 1312, + }, + dictWord{9, 0, 248}, + dictWord{10, 0, 400}, + dictWord{7, 11, 816}, + dictWord{7, 11, 1241}, + dictWord{7, 10, 1999}, + dictWord{9, 11, 283}, + dictWord{ + 9, + 11, + 520, + }, + dictWord{10, 11, 213}, + dictWord{10, 11, 307}, + dictWord{10, 11, 463}, + dictWord{10, 11, 671}, + dictWord{10, 11, 746}, + dictWord{11, 11, 401}, + dictWord{ + 11, + 11, + 794, + }, + dictWord{12, 11, 517}, + dictWord{18, 11, 107}, + dictWord{147, 11, 115}, + dictWord{6, 0, 1951}, + dictWord{134, 0, 2040}, + dictWord{ + 135, + 11, + 339, + }, + dictWord{13, 0, 41}, + dictWord{15, 0, 93}, + dictWord{5, 10, 168}, + dictWord{5, 10, 930}, + dictWord{8, 10, 74}, + dictWord{9, 10, 623}, + dictWord{12, 10, 500}, + dictWord{140, 10, 579}, + dictWord{6, 0, 118}, + dictWord{7, 0, 215}, + dictWord{7, 0, 1521}, + dictWord{140, 0, 11}, + dictWord{6, 10, 220}, + dictWord{7, 10, 1101}, + dictWord{141, 10, 105}, + dictWord{6, 11, 421}, + dictWord{7, 11, 61}, + dictWord{7, 11, 1540}, + dictWord{10, 11, 11}, + dictWord{138, 11, 501}, + dictWord{7, 0, 615}, + dictWord{138, 0, 251}, + dictWord{140, 11, 631}, + dictWord{135, 0, 1044}, + dictWord{6, 10, 19}, + dictWord{7, 10, 1413}, + dictWord{139, 10, 428}, + dictWord{ + 133, + 0, + 225, + }, + dictWord{7, 10, 96}, + dictWord{8, 10, 401}, + dictWord{8, 10, 703}, + dictWord{137, 10, 896}, + dictWord{145, 10, 116}, + dictWord{6, 11, 102}, + dictWord{ + 7, + 11, + 72, + }, + dictWord{15, 11, 142}, + dictWord{147, 11, 67}, + dictWord{7, 10, 1961}, + dictWord{7, 10, 1965}, + dictWord{8, 10, 702}, + dictWord{136, 10, 750}, + dictWord{ + 7, + 10, + 2030, + }, + dictWord{8, 10, 150}, + dictWord{8, 10, 737}, + dictWord{12, 10, 366}, + dictWord{151, 11, 30}, + dictWord{4, 0, 370}, + dictWord{5, 0, 756}, + dictWord{ + 7, + 0, + 1326, + }, + dictWord{135, 11, 823}, + dictWord{8, 10, 800}, + dictWord{9, 10, 148}, + dictWord{9, 10, 872}, + dictWord{9, 10, 890}, + dictWord{11, 10, 309}, + dictWord{ + 11, + 10, + 1001, + }, + dictWord{13, 10, 267}, + dictWord{141, 10, 323}, + dictWord{6, 0, 1662}, + dictWord{7, 0, 48}, + dictWord{8, 0, 771}, + dictWord{10, 0, 116}, + dictWord{ + 13, + 0, + 104, + }, + dictWord{14, 0, 105}, + dictWord{14, 0, 184}, + dictWord{15, 0, 168}, + dictWord{19, 0, 92}, + dictWord{148, 0, 68}, + dictWord{10, 0, 209}, + dictWord{ + 135, + 11, + 1870, + }, + dictWord{7, 11, 68}, + dictWord{8, 11, 48}, + dictWord{8, 11, 88}, + dictWord{8, 11, 582}, + dictWord{8, 11, 681}, + dictWord{9, 11, 373}, + dictWord{9, 11, 864}, + dictWord{11, 11, 157}, + dictWord{11, 11, 336}, + dictWord{11, 11, 843}, + dictWord{148, 11, 27}, + dictWord{134, 0, 930}, + dictWord{4, 11, 88}, + dictWord{5, 11, 137}, + dictWord{5, 11, 174}, + dictWord{5, 11, 777}, + dictWord{6, 11, 1664}, + dictWord{6, 11, 1725}, + dictWord{7, 11, 77}, + dictWord{7, 11, 426}, + dictWord{7, 11, 1317}, + dictWord{7, 11, 1355}, + dictWord{8, 11, 126}, + dictWord{8, 11, 563}, + dictWord{9, 11, 523}, + dictWord{9, 11, 750}, + dictWord{10, 11, 310}, + dictWord{10, 11, 836}, + dictWord{11, 11, 42}, + dictWord{11, 11, 318}, + dictWord{11, 11, 731}, + dictWord{12, 11, 68}, + dictWord{12, 11, 92}, + dictWord{12, 11, 507}, + dictWord{12, 11, 692}, + dictWord{13, 11, 81}, + dictWord{13, 11, 238}, + dictWord{13, 11, 374}, + dictWord{18, 11, 138}, + dictWord{19, 11, 78}, + dictWord{19, 11, 111}, + dictWord{20, 11, 55}, + dictWord{20, 11, 77}, + dictWord{148, 11, 92}, + dictWord{4, 11, 938}, + dictWord{135, 11, 1831}, + dictWord{5, 10, 547}, + dictWord{7, 10, 424}, + dictWord{ + 8, + 11, + 617, + }, + dictWord{138, 11, 351}, + dictWord{6, 0, 1286}, + dictWord{6, 11, 1668}, + dictWord{7, 11, 1499}, + dictWord{8, 11, 117}, + dictWord{9, 11, 314}, + dictWord{ + 138, + 11, + 174, + }, + dictWord{6, 0, 759}, + dictWord{6, 0, 894}, + dictWord{7, 11, 707}, + dictWord{139, 11, 563}, + dictWord{4, 0, 120}, + dictWord{135, 0, 1894}, + dictWord{ + 9, + 0, + 385, + }, + dictWord{149, 0, 17}, + dictWord{138, 0, 429}, + dictWord{133, 11, 403}, + dictWord{5, 0, 820}, + dictWord{135, 0, 931}, + dictWord{10, 0, 199}, + dictWord{ + 133, + 10, + 133, + }, + dictWord{6, 0, 151}, + dictWord{6, 0, 1675}, + dictWord{7, 0, 383}, + dictWord{151, 0, 10}, + dictWord{6, 0, 761}, + dictWord{136, 10, 187}, + dictWord{ + 8, + 0, + 365, + }, + dictWord{10, 10, 0}, + dictWord{10, 10, 818}, + dictWord{139, 10, 988}, + dictWord{4, 11, 44}, + dictWord{5, 11, 311}, + dictWord{6, 11, 156}, + dictWord{ + 7, + 11, + 639, + }, + dictWord{7, 11, 762}, + dictWord{7, 11, 1827}, + dictWord{9, 11, 8}, + dictWord{9, 11, 462}, + dictWord{148, 11, 83}, + dictWord{4, 11, 346}, + dictWord{7, 11, 115}, + dictWord{9, 11, 180}, + dictWord{9, 11, 456}, + dictWord{138, 11, 363}, + dictWord{136, 10, 685}, + dictWord{7, 0, 1086}, + dictWord{145, 0, 46}, + dictWord{ + 6, + 0, + 1624, + }, + dictWord{11, 0, 11}, + dictWord{12, 0, 422}, + dictWord{13, 0, 444}, + dictWord{142, 0, 360}, + dictWord{6, 0, 1020}, + dictWord{6, 0, 1260}, + dictWord{ + 134, + 0, + 1589, + }, + dictWord{4, 0, 43}, + dictWord{5, 0, 344}, + dictWord{5, 0, 357}, + dictWord{14, 0, 472}, + dictWord{150, 0, 58}, + dictWord{6, 0, 1864}, + dictWord{6, 0, 1866}, + dictWord{6, 0, 1868}, + dictWord{6, 0, 1869}, + dictWord{6, 0, 1874}, + dictWord{6, 0, 1877}, + dictWord{6, 0, 1903}, + dictWord{6, 0, 1911}, + dictWord{9, 0, 920}, + dictWord{ + 9, + 0, + 921, + }, + dictWord{9, 0, 924}, + dictWord{9, 0, 946}, + dictWord{9, 0, 959}, + dictWord{9, 0, 963}, + dictWord{9, 0, 970}, + dictWord{9, 0, 997}, + dictWord{9, 0, 1008}, + dictWord{ + 9, + 0, + 1017, + }, + dictWord{12, 0, 795}, + dictWord{12, 0, 797}, + dictWord{12, 0, 798}, + dictWord{12, 0, 800}, + dictWord{12, 0, 803}, + dictWord{12, 0, 811}, + dictWord{ + 12, + 0, + 820, + }, + dictWord{12, 0, 821}, + dictWord{12, 0, 839}, + dictWord{12, 0, 841}, + dictWord{12, 0, 848}, + dictWord{12, 0, 911}, + dictWord{12, 0, 921}, + dictWord{12, 0, 922}, + dictWord{12, 0, 925}, + dictWord{12, 0, 937}, + dictWord{12, 0, 944}, + dictWord{12, 0, 945}, + dictWord{12, 0, 953}, + dictWord{15, 0, 184}, + dictWord{15, 0, 191}, + dictWord{15, 0, 199}, + dictWord{15, 0, 237}, + dictWord{15, 0, 240}, + dictWord{15, 0, 243}, + dictWord{15, 0, 246}, + dictWord{18, 0, 203}, + dictWord{21, 0, 40}, + dictWord{ + 21, + 0, + 52, + }, + dictWord{21, 0, 57}, + dictWord{24, 0, 23}, + dictWord{24, 0, 28}, + dictWord{152, 0, 30}, + dictWord{134, 0, 725}, + dictWord{145, 11, 58}, + dictWord{133, 0, 888}, + dictWord{137, 10, 874}, + dictWord{4, 0, 711}, + dictWord{8, 10, 774}, + dictWord{10, 10, 670}, + dictWord{140, 10, 51}, + dictWord{144, 11, 40}, + dictWord{ + 6, + 11, + 185, + }, + dictWord{7, 11, 1899}, + dictWord{139, 11, 673}, + dictWord{137, 10, 701}, + dictWord{137, 0, 440}, + dictWord{4, 11, 327}, + dictWord{5, 11, 478}, + dictWord{ + 7, + 11, + 1332, + }, + dictWord{8, 11, 753}, + dictWord{140, 11, 227}, + dictWord{4, 10, 127}, + dictWord{5, 10, 350}, + dictWord{6, 10, 356}, + dictWord{8, 10, 426}, + dictWord{ + 9, + 10, + 572, + }, + dictWord{10, 10, 247}, + dictWord{139, 10, 312}, + dictWord{5, 11, 1020}, + dictWord{133, 11, 1022}, + dictWord{4, 11, 103}, + dictWord{ + 133, + 11, + 401, + }, + dictWord{6, 0, 1913}, + dictWord{6, 0, 1926}, + dictWord{6, 0, 1959}, + dictWord{9, 0, 914}, + dictWord{9, 0, 939}, + dictWord{9, 0, 952}, + dictWord{9, 0, 979}, + dictWord{ + 9, + 0, + 990, + }, + dictWord{9, 0, 998}, + dictWord{9, 0, 1003}, + dictWord{9, 0, 1023}, + dictWord{12, 0, 827}, + dictWord{12, 0, 834}, + dictWord{12, 0, 845}, + dictWord{ + 12, + 0, + 912, + }, + dictWord{12, 0, 935}, + dictWord{12, 0, 951}, + dictWord{15, 0, 172}, + dictWord{15, 0, 174}, + dictWord{18, 0, 198}, + dictWord{149, 0, 63}, + dictWord{5, 0, 958}, + dictWord{5, 0, 987}, + dictWord{4, 11, 499}, + dictWord{135, 11, 1421}, + dictWord{7, 0, 885}, + dictWord{6, 10, 59}, + dictWord{6, 10, 1762}, + dictWord{9, 10, 603}, + dictWord{141, 10, 397}, + dictWord{10, 11, 62}, + dictWord{141, 11, 164}, + dictWord{4, 0, 847}, + dictWord{135, 0, 326}, + dictWord{11, 0, 276}, + dictWord{142, 0, 293}, + dictWord{4, 0, 65}, + dictWord{5, 0, 479}, + dictWord{5, 0, 1004}, + dictWord{7, 0, 1913}, + dictWord{8, 0, 317}, + dictWord{9, 0, 302}, + dictWord{10, 0, 612}, + dictWord{ + 13, + 0, + 22, + }, + dictWord{132, 11, 96}, + dictWord{4, 0, 261}, + dictWord{135, 0, 510}, + dictWord{135, 0, 1514}, + dictWord{6, 10, 111}, + dictWord{7, 10, 4}, + dictWord{8, 10, 163}, + dictWord{8, 10, 776}, + dictWord{138, 10, 566}, + dictWord{4, 0, 291}, + dictWord{9, 0, 515}, + dictWord{12, 0, 152}, + dictWord{12, 0, 443}, + dictWord{13, 0, 392}, + dictWord{142, 0, 357}, + dictWord{7, 11, 399}, + dictWord{135, 11, 1492}, + dictWord{4, 0, 589}, + dictWord{139, 0, 282}, + dictWord{6, 11, 563}, + dictWord{ + 135, + 10, + 1994, + }, + dictWord{5, 10, 297}, + dictWord{135, 10, 1038}, + dictWord{4, 0, 130}, + dictWord{7, 0, 843}, + dictWord{135, 0, 1562}, + dictWord{5, 0, 42}, + dictWord{ + 5, + 0, + 879, + }, + dictWord{7, 0, 245}, + dictWord{7, 0, 324}, + dictWord{7, 0, 1532}, + dictWord{11, 0, 463}, + dictWord{11, 0, 472}, + dictWord{13, 0, 363}, + dictWord{144, 0, 52}, + dictWord{4, 0, 134}, + dictWord{133, 0, 372}, + dictWord{133, 0, 680}, + dictWord{136, 10, 363}, + dictWord{6, 0, 1997}, + dictWord{8, 0, 935}, + dictWord{136, 0, 977}, + dictWord{4, 0, 810}, + dictWord{135, 0, 1634}, + dictWord{135, 10, 1675}, + dictWord{7, 0, 1390}, + dictWord{4, 11, 910}, + dictWord{133, 11, 832}, + dictWord{ + 7, + 10, + 808, + }, + dictWord{8, 11, 266}, + dictWord{139, 11, 578}, + dictWord{132, 0, 644}, + dictWord{4, 0, 982}, + dictWord{138, 0, 867}, + dictWord{132, 10, 280}, + dictWord{ + 135, + 0, + 540, + }, + dictWord{140, 10, 54}, + dictWord{135, 0, 123}, + dictWord{134, 0, 1978}, + dictWord{4, 10, 421}, + dictWord{133, 10, 548}, + dictWord{6, 0, 623}, + dictWord{136, 0, 789}, + dictWord{4, 0, 908}, + dictWord{5, 0, 359}, + dictWord{5, 0, 508}, + dictWord{6, 0, 1723}, + dictWord{7, 0, 343}, + dictWord{7, 0, 1996}, + dictWord{ + 135, + 0, + 2026, + }, + dictWord{134, 0, 1220}, + dictWord{4, 0, 341}, + dictWord{135, 0, 480}, + dictWord{6, 10, 254}, + dictWord{9, 10, 109}, + dictWord{138, 10, 103}, + dictWord{ + 134, + 0, + 888, + }, + dictWord{8, 11, 528}, + dictWord{137, 11, 348}, + dictWord{7, 0, 1995}, + dictWord{8, 0, 299}, + dictWord{11, 0, 890}, + dictWord{12, 0, 674}, + dictWord{ + 4, + 11, + 20, + }, + dictWord{133, 11, 616}, + dictWord{135, 11, 1094}, + dictWord{134, 10, 1630}, + dictWord{4, 0, 238}, + dictWord{5, 0, 503}, + dictWord{6, 0, 179}, + dictWord{ + 7, + 0, + 2003, + }, + dictWord{8, 0, 381}, + dictWord{8, 0, 473}, + dictWord{9, 0, 149}, + dictWord{10, 0, 788}, + dictWord{15, 0, 45}, + dictWord{15, 0, 86}, + dictWord{20, 0, 110}, + dictWord{150, 0, 57}, + dictWord{133, 10, 671}, + dictWord{4, 11, 26}, + dictWord{5, 11, 429}, + dictWord{6, 11, 245}, + dictWord{7, 11, 704}, + dictWord{7, 11, 1379}, + dictWord{135, 11, 1474}, + dictWord{4, 0, 121}, + dictWord{5, 0, 156}, + dictWord{5, 0, 349}, + dictWord{9, 0, 431}, + dictWord{10, 0, 605}, + dictWord{142, 0, 342}, + dictWord{ + 7, + 11, + 943, + }, + dictWord{139, 11, 614}, + dictWord{132, 10, 889}, + dictWord{132, 11, 621}, + dictWord{7, 10, 1382}, + dictWord{7, 11, 1382}, + dictWord{ + 135, + 10, + 1910, + }, + dictWord{132, 10, 627}, + dictWord{133, 10, 775}, + dictWord{133, 11, 542}, + dictWord{133, 11, 868}, + dictWord{136, 11, 433}, + dictWord{6, 0, 1373}, + dictWord{7, 0, 1011}, + dictWord{11, 10, 362}, + dictWord{11, 10, 948}, + dictWord{140, 10, 388}, + dictWord{6, 0, 80}, + dictWord{7, 0, 173}, + dictWord{9, 0, 547}, + dictWord{10, 0, 730}, + dictWord{14, 0, 18}, + dictWord{22, 0, 39}, + dictWord{135, 11, 1495}, + dictWord{6, 0, 1694}, + dictWord{135, 0, 1974}, + dictWord{140, 0, 196}, + dictWord{4, 0, 923}, + dictWord{6, 0, 507}, + dictWord{6, 0, 1711}, + dictWord{7, 10, 451}, + dictWord{8, 10, 389}, + dictWord{12, 10, 490}, + dictWord{13, 10, 16}, + dictWord{ + 13, + 10, + 215, + }, + dictWord{13, 10, 351}, + dictWord{18, 10, 132}, + dictWord{147, 10, 125}, + dictWord{6, 0, 646}, + dictWord{134, 0, 1047}, + dictWord{135, 10, 841}, + dictWord{136, 10, 566}, + dictWord{6, 0, 1611}, + dictWord{135, 0, 1214}, + dictWord{139, 0, 926}, + dictWord{132, 11, 525}, + dictWord{132, 0, 595}, + dictWord{ + 5, + 0, + 240, + }, + dictWord{6, 0, 459}, + dictWord{7, 0, 12}, + dictWord{7, 0, 114}, + dictWord{7, 0, 949}, + dictWord{7, 0, 1753}, + dictWord{7, 0, 1805}, + dictWord{8, 0, 658}, + dictWord{ + 9, + 0, + 1, + }, + dictWord{11, 0, 959}, + dictWord{141, 0, 446}, + dictWord{5, 10, 912}, + dictWord{134, 10, 1695}, + dictWord{132, 0, 446}, + dictWord{7, 11, 62}, + dictWord{ + 12, + 11, + 45, + }, + dictWord{147, 11, 112}, + dictWord{5, 10, 236}, + dictWord{6, 10, 572}, + dictWord{8, 10, 492}, + dictWord{11, 10, 618}, + dictWord{144, 10, 56}, + dictWord{ + 5, + 10, + 190, + }, + dictWord{136, 10, 318}, + dictWord{135, 10, 1376}, + dictWord{4, 11, 223}, + dictWord{6, 11, 359}, + dictWord{11, 11, 3}, + dictWord{13, 11, 108}, + dictWord{ + 14, + 11, + 89, + }, + dictWord{144, 11, 22}, + dictWord{132, 11, 647}, + dictWord{134, 0, 490}, + dictWord{134, 0, 491}, + dictWord{134, 0, 1584}, + dictWord{ + 135, + 11, + 685, + }, + dictWord{138, 11, 220}, + dictWord{7, 0, 250}, + dictWord{136, 0, 507}, + dictWord{132, 0, 158}, + dictWord{4, 0, 140}, + dictWord{7, 0, 362}, + dictWord{8, 0, 209}, + dictWord{9, 0, 10}, + dictWord{9, 0, 160}, + dictWord{9, 0, 503}, + dictWord{9, 0, 614}, + dictWord{10, 0, 689}, + dictWord{11, 0, 327}, + dictWord{11, 0, 553}, + dictWord{ + 11, + 0, + 725, + }, + dictWord{11, 0, 767}, + dictWord{12, 0, 252}, + dictWord{12, 0, 583}, + dictWord{13, 0, 192}, + dictWord{14, 0, 269}, + dictWord{14, 0, 356}, + dictWord{148, 0, 50}, + dictWord{19, 0, 1}, + dictWord{19, 0, 26}, + dictWord{150, 0, 9}, + dictWord{132, 11, 109}, + dictWord{6, 0, 228}, + dictWord{7, 0, 1341}, + dictWord{9, 0, 408}, + dictWord{ + 138, + 0, + 343, + }, + dictWord{4, 0, 373}, + dictWord{5, 0, 283}, + dictWord{6, 0, 480}, + dictWord{7, 0, 609}, + dictWord{10, 0, 860}, + dictWord{138, 0, 878}, + dictWord{6, 0, 779}, + dictWord{134, 0, 1209}, + dictWord{4, 0, 557}, + dictWord{7, 11, 263}, + dictWord{7, 11, 628}, + dictWord{136, 11, 349}, + dictWord{132, 0, 548}, + dictWord{7, 0, 197}, + dictWord{8, 0, 142}, + dictWord{8, 0, 325}, + dictWord{9, 0, 150}, + dictWord{9, 0, 596}, + dictWord{10, 0, 350}, + dictWord{10, 0, 353}, + dictWord{11, 0, 74}, + dictWord{ + 11, + 0, + 315, + }, + dictWord{12, 0, 662}, + dictWord{12, 0, 681}, + dictWord{14, 0, 423}, + dictWord{143, 0, 141}, + dictWord{4, 11, 40}, + dictWord{10, 11, 67}, + dictWord{ + 11, + 11, + 117, + }, + dictWord{11, 11, 768}, + dictWord{139, 11, 935}, + dictWord{7, 11, 992}, + dictWord{8, 11, 301}, + dictWord{9, 11, 722}, + dictWord{12, 11, 63}, + dictWord{ + 13, + 11, + 29, + }, + dictWord{14, 11, 161}, + dictWord{143, 11, 18}, + dictWord{6, 0, 1490}, + dictWord{138, 11, 532}, + dictWord{5, 0, 580}, + dictWord{7, 0, 378}, + dictWord{ + 7, + 0, + 674, + }, + dictWord{7, 0, 1424}, + dictWord{15, 0, 83}, + dictWord{16, 0, 11}, + dictWord{15, 11, 83}, + dictWord{144, 11, 11}, + dictWord{6, 0, 1057}, + dictWord{6, 0, 1335}, + dictWord{10, 0, 316}, + dictWord{7, 10, 85}, + dictWord{7, 10, 247}, + dictWord{8, 10, 585}, + dictWord{138, 10, 163}, + dictWord{4, 0, 169}, + dictWord{5, 0, 83}, + dictWord{ + 6, + 0, + 399, + }, + dictWord{6, 0, 579}, + dictWord{6, 0, 1513}, + dictWord{7, 0, 692}, + dictWord{7, 0, 846}, + dictWord{7, 0, 1015}, + dictWord{7, 0, 1799}, + dictWord{8, 0, 403}, + dictWord{9, 0, 394}, + dictWord{10, 0, 133}, + dictWord{12, 0, 4}, + dictWord{12, 0, 297}, + dictWord{12, 0, 452}, + dictWord{16, 0, 81}, + dictWord{18, 0, 25}, + dictWord{21, 0, 14}, + dictWord{22, 0, 12}, + dictWord{151, 0, 18}, + dictWord{134, 0, 1106}, + dictWord{7, 0, 1546}, + dictWord{11, 0, 299}, + dictWord{142, 0, 407}, + dictWord{134, 0, 1192}, + dictWord{132, 0, 177}, + dictWord{5, 0, 411}, + dictWord{135, 0, 653}, + dictWord{7, 0, 439}, + dictWord{10, 0, 727}, + dictWord{11, 0, 260}, + dictWord{139, 0, 684}, + dictWord{138, 10, 145}, + dictWord{147, 10, 83}, + dictWord{5, 0, 208}, + dictWord{7, 0, 753}, + dictWord{135, 0, 1528}, + dictWord{137, 11, 617}, + dictWord{ + 135, + 10, + 1922, + }, + dictWord{135, 11, 825}, + dictWord{11, 0, 422}, + dictWord{13, 0, 389}, + dictWord{4, 10, 124}, + dictWord{10, 10, 457}, + dictWord{11, 10, 121}, + dictWord{ + 11, + 10, + 169, + }, + dictWord{11, 10, 870}, + dictWord{12, 10, 214}, + dictWord{14, 10, 187}, + dictWord{143, 10, 77}, + dictWord{11, 0, 615}, + dictWord{15, 0, 58}, + dictWord{ + 11, + 11, + 615, + }, + dictWord{143, 11, 58}, + dictWord{9, 0, 618}, + dictWord{138, 0, 482}, + dictWord{6, 0, 1952}, + dictWord{6, 0, 1970}, + dictWord{142, 0, 505}, + dictWord{ + 7, + 10, + 1193, + }, + dictWord{135, 11, 1838}, + dictWord{133, 0, 242}, + dictWord{135, 10, 1333}, + dictWord{6, 10, 107}, + dictWord{7, 10, 638}, + dictWord{ + 7, + 10, + 1632, + }, + dictWord{137, 10, 396}, + dictWord{133, 0, 953}, + dictWord{5, 10, 370}, + dictWord{134, 10, 1756}, + dictWord{5, 11, 28}, + dictWord{6, 11, 204}, + dictWord{ + 10, + 11, + 320, + }, + dictWord{10, 11, 583}, + dictWord{13, 11, 502}, + dictWord{14, 11, 72}, + dictWord{14, 11, 274}, + dictWord{14, 11, 312}, + dictWord{14, 11, 344}, + dictWord{15, 11, 159}, + dictWord{16, 11, 62}, + dictWord{16, 11, 69}, + dictWord{17, 11, 30}, + dictWord{18, 11, 42}, + dictWord{18, 11, 53}, + dictWord{18, 11, 84}, + dictWord{18, 11, 140}, + dictWord{19, 11, 68}, + dictWord{19, 11, 85}, + dictWord{20, 11, 5}, + dictWord{20, 11, 45}, + dictWord{20, 11, 101}, + dictWord{22, 11, 7}, + dictWord{ + 150, + 11, + 20, + }, + dictWord{4, 11, 558}, + dictWord{6, 11, 390}, + dictWord{7, 11, 162}, + dictWord{7, 11, 689}, + dictWord{9, 11, 360}, + dictWord{138, 11, 653}, + dictWord{ + 11, + 0, + 802, + }, + dictWord{141, 0, 67}, + dictWord{133, 10, 204}, + dictWord{133, 0, 290}, + dictWord{5, 10, 970}, + dictWord{134, 10, 1706}, + dictWord{132, 0, 380}, + dictWord{5, 0, 52}, + dictWord{7, 0, 277}, + dictWord{9, 0, 368}, + dictWord{139, 0, 791}, + dictWord{5, 11, 856}, + dictWord{6, 11, 1672}, + dictWord{6, 11, 1757}, + dictWord{ + 6, + 11, + 1781, + }, + dictWord{7, 11, 1150}, + dictWord{7, 11, 1425}, + dictWord{7, 11, 1453}, + dictWord{140, 11, 513}, + dictWord{5, 11, 92}, + dictWord{7, 10, 3}, + dictWord{ + 10, + 11, + 736, + }, + dictWord{140, 11, 102}, + dictWord{4, 0, 112}, + dictWord{5, 0, 653}, + dictWord{5, 10, 483}, + dictWord{5, 10, 685}, + dictWord{6, 10, 489}, + dictWord{ + 7, + 10, + 1204, + }, + dictWord{136, 10, 394}, + dictWord{132, 10, 921}, + dictWord{6, 0, 1028}, + dictWord{133, 10, 1007}, + dictWord{5, 11, 590}, + dictWord{9, 11, 213}, + dictWord{145, 11, 91}, + dictWord{135, 10, 1696}, + dictWord{10, 0, 138}, + dictWord{139, 0, 476}, + dictWord{5, 0, 725}, + dictWord{5, 0, 727}, + dictWord{135, 0, 1811}, + dictWord{4, 0, 979}, + dictWord{6, 0, 1821}, + dictWord{6, 0, 1838}, + dictWord{8, 0, 876}, + dictWord{8, 0, 883}, + dictWord{8, 0, 889}, + dictWord{8, 0, 893}, + dictWord{ + 8, + 0, + 895, + }, + dictWord{10, 0, 934}, + dictWord{12, 0, 720}, + dictWord{14, 0, 459}, + dictWord{148, 0, 123}, + dictWord{135, 11, 551}, + dictWord{4, 0, 38}, + dictWord{6, 0, 435}, + dictWord{7, 0, 307}, + dictWord{7, 0, 999}, + dictWord{7, 0, 1481}, + dictWord{7, 0, 1732}, + dictWord{7, 0, 1738}, + dictWord{8, 0, 371}, + dictWord{9, 0, 414}, + dictWord{ + 11, + 0, + 316, + }, + dictWord{12, 0, 52}, + dictWord{13, 0, 420}, + dictWord{147, 0, 100}, + dictWord{135, 0, 1296}, + dictWord{132, 10, 712}, + dictWord{134, 10, 1629}, + dictWord{133, 0, 723}, + dictWord{134, 0, 651}, + dictWord{136, 11, 191}, + dictWord{9, 11, 791}, + dictWord{10, 11, 93}, + dictWord{11, 11, 301}, + dictWord{16, 11, 13}, + dictWord{17, 11, 23}, + dictWord{18, 11, 135}, + dictWord{19, 11, 12}, + dictWord{20, 11, 1}, + dictWord{20, 11, 12}, + dictWord{148, 11, 14}, + dictWord{136, 11, 503}, + dictWord{6, 11, 466}, + dictWord{135, 11, 671}, + dictWord{6, 0, 1200}, + dictWord{134, 0, 1330}, + dictWord{135, 0, 1255}, + dictWord{134, 0, 986}, + dictWord{ + 5, + 0, + 109, + }, + dictWord{6, 0, 1784}, + dictWord{7, 0, 1895}, + dictWord{12, 0, 296}, + dictWord{140, 0, 302}, + dictWord{135, 11, 983}, + dictWord{133, 10, 485}, + dictWord{ + 134, + 0, + 660, + }, + dictWord{134, 0, 800}, + dictWord{5, 0, 216}, + dictWord{5, 0, 294}, + dictWord{6, 0, 591}, + dictWord{7, 0, 1879}, + dictWord{9, 0, 141}, + dictWord{9, 0, 270}, + dictWord{9, 0, 679}, + dictWord{10, 0, 159}, + dictWord{11, 0, 197}, + dictWord{11, 0, 438}, + dictWord{12, 0, 538}, + dictWord{12, 0, 559}, + dictWord{14, 0, 144}, + dictWord{ + 14, + 0, + 167, + }, + dictWord{15, 0, 67}, + dictWord{4, 10, 285}, + dictWord{5, 10, 317}, + dictWord{6, 10, 301}, + dictWord{7, 10, 7}, + dictWord{8, 10, 153}, + dictWord{ + 10, + 10, + 766, + }, + dictWord{11, 10, 468}, + dictWord{12, 10, 467}, + dictWord{141, 10, 143}, + dictWord{136, 0, 945}, + dictWord{134, 0, 1090}, + dictWord{137, 0, 81}, + dictWord{12, 11, 468}, + dictWord{19, 11, 96}, + dictWord{148, 11, 24}, + dictWord{134, 0, 391}, + dictWord{138, 11, 241}, + dictWord{7, 0, 322}, + dictWord{136, 0, 249}, + dictWord{134, 0, 1412}, + dictWord{135, 11, 795}, + dictWord{5, 0, 632}, + dictWord{138, 0, 526}, + dictWord{136, 10, 819}, + dictWord{6, 0, 144}, + dictWord{7, 0, 948}, + dictWord{7, 0, 1042}, + dictWord{8, 0, 235}, + dictWord{8, 0, 461}, + dictWord{9, 0, 453}, + dictWord{9, 0, 796}, + dictWord{10, 0, 354}, + dictWord{17, 0, 77}, + dictWord{ + 135, + 11, + 954, + }, + dictWord{139, 10, 917}, + dictWord{6, 0, 940}, + dictWord{134, 0, 1228}, + dictWord{4, 0, 362}, + dictWord{7, 0, 52}, + dictWord{135, 0, 303}, + dictWord{ + 6, + 11, + 549, + }, + dictWord{8, 11, 34}, + dictWord{8, 11, 283}, + dictWord{9, 11, 165}, + dictWord{138, 11, 475}, + dictWord{7, 11, 370}, + dictWord{7, 11, 1007}, + dictWord{ + 7, + 11, + 1177, + }, + dictWord{135, 11, 1565}, + dictWord{5, 11, 652}, + dictWord{5, 11, 701}, + dictWord{135, 11, 449}, + dictWord{5, 0, 196}, + dictWord{6, 0, 486}, + dictWord{ + 7, + 0, + 212, + }, + dictWord{8, 0, 309}, + dictWord{136, 0, 346}, + dictWord{6, 10, 1719}, + dictWord{6, 10, 1735}, + dictWord{7, 10, 2016}, + dictWord{7, 10, 2020}, + dictWord{ + 8, + 10, + 837, + }, + dictWord{137, 10, 852}, + dictWord{6, 11, 159}, + dictWord{6, 11, 364}, + dictWord{7, 11, 516}, + dictWord{7, 11, 1439}, + dictWord{137, 11, 518}, + dictWord{135, 0, 1912}, + dictWord{135, 0, 1290}, + dictWord{132, 0, 686}, + dictWord{141, 11, 151}, + dictWord{138, 0, 625}, + dictWord{136, 0, 706}, + dictWord{ + 138, + 10, + 568, + }, + dictWord{139, 0, 412}, + dictWord{4, 0, 30}, + dictWord{133, 0, 43}, + dictWord{8, 10, 67}, + dictWord{138, 10, 419}, + dictWord{7, 0, 967}, + dictWord{ + 141, + 0, + 11, + }, + dictWord{12, 0, 758}, + dictWord{14, 0, 441}, + dictWord{142, 0, 462}, + dictWord{10, 10, 657}, + dictWord{14, 10, 297}, + dictWord{142, 10, 361}, + dictWord{ + 139, + 10, + 729, + }, + dictWord{4, 0, 220}, + dictWord{135, 0, 1535}, + dictWord{7, 11, 501}, + dictWord{9, 11, 111}, + dictWord{10, 11, 141}, + dictWord{11, 11, 332}, + dictWord{ + 13, + 11, + 43, + }, + dictWord{13, 11, 429}, + dictWord{14, 11, 130}, + dictWord{14, 11, 415}, + dictWord{145, 11, 102}, + dictWord{4, 0, 950}, + dictWord{6, 0, 1859}, + dictWord{ + 7, + 0, + 11, + }, + dictWord{8, 0, 873}, + dictWord{12, 0, 710}, + dictWord{12, 0, 718}, + dictWord{12, 0, 748}, + dictWord{12, 0, 765}, + dictWord{148, 0, 124}, + dictWord{ + 5, + 11, + 149, + }, + dictWord{5, 11, 935}, + dictWord{136, 11, 233}, + dictWord{142, 11, 291}, + dictWord{134, 0, 1579}, + dictWord{7, 0, 890}, + dictWord{8, 10, 51}, + dictWord{ + 9, + 10, + 868, + }, + dictWord{10, 10, 833}, + dictWord{12, 10, 481}, + dictWord{12, 10, 570}, + dictWord{148, 10, 106}, + dictWord{141, 0, 2}, + dictWord{132, 10, 445}, + dictWord{136, 11, 801}, + dictWord{135, 0, 1774}, + dictWord{7, 0, 1725}, + dictWord{138, 0, 393}, + dictWord{5, 0, 263}, + dictWord{134, 0, 414}, + dictWord{ + 132, + 11, + 322, + }, + dictWord{133, 10, 239}, + dictWord{7, 0, 456}, + dictWord{7, 10, 1990}, + dictWord{8, 10, 130}, + dictWord{139, 10, 720}, + dictWord{137, 0, 818}, + dictWord{ + 5, + 10, + 123, + }, + dictWord{6, 10, 530}, + dictWord{7, 10, 348}, + dictWord{135, 10, 1419}, + dictWord{135, 10, 2024}, + dictWord{6, 0, 178}, + dictWord{6, 0, 1750}, + dictWord{8, 0, 251}, + dictWord{9, 0, 690}, + dictWord{10, 0, 155}, + dictWord{10, 0, 196}, + dictWord{10, 0, 373}, + dictWord{11, 0, 698}, + dictWord{13, 0, 155}, + dictWord{ + 148, + 0, + 93, + }, + dictWord{5, 0, 97}, + dictWord{137, 0, 393}, + dictWord{134, 0, 674}, + dictWord{11, 0, 223}, + dictWord{140, 0, 168}, + dictWord{132, 10, 210}, + dictWord{ + 139, + 11, + 464, + }, + dictWord{6, 0, 1639}, + dictWord{146, 0, 159}, + dictWord{139, 11, 2}, + dictWord{7, 0, 934}, + dictWord{8, 0, 647}, + dictWord{17, 0, 97}, + dictWord{19, 0, 59}, + dictWord{150, 0, 2}, + dictWord{132, 0, 191}, + dictWord{5, 0, 165}, + dictWord{9, 0, 346}, + dictWord{10, 0, 655}, + dictWord{11, 0, 885}, + dictWord{4, 10, 430}, + dictWord{135, 11, 357}, + dictWord{133, 0, 877}, + dictWord{5, 10, 213}, + dictWord{133, 11, 406}, + dictWord{8, 0, 128}, + dictWord{139, 0, 179}, + dictWord{6, 11, 69}, + dictWord{135, 11, 117}, + dictWord{135, 0, 1297}, + dictWord{11, 11, 43}, + dictWord{13, 11, 72}, + dictWord{141, 11, 142}, + dictWord{135, 11, 1830}, + dictWord{ + 142, + 0, + 164, + }, + dictWord{5, 0, 57}, + dictWord{6, 0, 101}, + dictWord{6, 0, 586}, + dictWord{6, 0, 1663}, + dictWord{7, 0, 132}, + dictWord{7, 0, 1154}, + dictWord{7, 0, 1415}, + dictWord{7, 0, 1507}, + dictWord{12, 0, 493}, + dictWord{15, 0, 105}, + dictWord{151, 0, 15}, + dictWord{5, 0, 459}, + dictWord{7, 0, 1073}, + dictWord{8, 0, 241}, + dictWord{ + 136, + 0, + 334, + }, + dictWord{133, 11, 826}, + dictWord{133, 10, 108}, + dictWord{5, 10, 219}, + dictWord{10, 11, 132}, + dictWord{11, 11, 191}, + dictWord{11, 11, 358}, + dictWord{139, 11, 460}, + dictWord{6, 0, 324}, + dictWord{6, 0, 520}, + dictWord{7, 0, 338}, + dictWord{7, 0, 1729}, + dictWord{8, 0, 228}, + dictWord{139, 0, 750}, + dictWord{ + 21, + 0, + 30, + }, + dictWord{22, 0, 53}, + dictWord{4, 10, 193}, + dictWord{5, 10, 916}, + dictWord{7, 10, 364}, + dictWord{10, 10, 398}, + dictWord{10, 10, 726}, + dictWord{ + 11, + 10, + 317, + }, + dictWord{11, 10, 626}, + dictWord{12, 10, 142}, + dictWord{12, 10, 288}, + dictWord{12, 10, 678}, + dictWord{13, 10, 313}, + dictWord{15, 10, 113}, + dictWord{146, 10, 114}, + dictWord{6, 11, 110}, + dictWord{135, 11, 1681}, + dictWord{135, 0, 910}, + dictWord{6, 10, 241}, + dictWord{7, 10, 907}, + dictWord{8, 10, 832}, + dictWord{9, 10, 342}, + dictWord{10, 10, 729}, + dictWord{11, 10, 284}, + dictWord{11, 10, 445}, + dictWord{11, 10, 651}, + dictWord{11, 10, 863}, + dictWord{ + 13, + 10, + 398, + }, + dictWord{146, 10, 99}, + dictWord{7, 0, 705}, + dictWord{9, 0, 734}, + dictWord{5, 11, 1000}, + dictWord{7, 11, 733}, + dictWord{137, 11, 583}, + dictWord{4, 0, 73}, + dictWord{6, 0, 612}, + dictWord{7, 0, 927}, + dictWord{7, 0, 1822}, + dictWord{8, 0, 217}, + dictWord{9, 0, 765}, + dictWord{9, 0, 766}, + dictWord{10, 0, 408}, + dictWord{ + 11, + 0, + 51, + }, + dictWord{11, 0, 793}, + dictWord{12, 0, 266}, + dictWord{15, 0, 158}, + dictWord{20, 0, 89}, + dictWord{150, 0, 32}, + dictWord{7, 0, 1330}, + dictWord{4, 11, 297}, + dictWord{6, 11, 529}, + dictWord{7, 11, 152}, + dictWord{7, 11, 713}, + dictWord{7, 11, 1845}, + dictWord{8, 11, 710}, + dictWord{8, 11, 717}, + dictWord{140, 11, 639}, + dictWord{5, 0, 389}, + dictWord{136, 0, 636}, + dictWord{134, 0, 1409}, + dictWord{4, 10, 562}, + dictWord{9, 10, 254}, + dictWord{139, 10, 879}, + dictWord{134, 0, 893}, + dictWord{132, 10, 786}, + dictWord{4, 11, 520}, + dictWord{135, 11, 575}, + dictWord{136, 0, 21}, + dictWord{140, 0, 721}, + dictWord{136, 0, 959}, + dictWord{ + 7, + 11, + 1428, + }, + dictWord{7, 11, 1640}, + dictWord{9, 11, 169}, + dictWord{9, 11, 182}, + dictWord{9, 11, 367}, + dictWord{9, 11, 478}, + dictWord{9, 11, 506}, + dictWord{ + 9, + 11, + 551, + }, + dictWord{9, 11, 648}, + dictWord{9, 11, 651}, + dictWord{9, 11, 697}, + dictWord{9, 11, 705}, + dictWord{9, 11, 725}, + dictWord{9, 11, 787}, + dictWord{9, 11, 794}, + dictWord{10, 11, 198}, + dictWord{10, 11, 214}, + dictWord{10, 11, 267}, + dictWord{10, 11, 275}, + dictWord{10, 11, 456}, + dictWord{10, 11, 551}, + dictWord{ + 10, + 11, + 561, + }, + dictWord{10, 11, 613}, + dictWord{10, 11, 627}, + dictWord{10, 11, 668}, + dictWord{10, 11, 675}, + dictWord{10, 11, 691}, + dictWord{10, 11, 695}, + dictWord{10, 11, 707}, + dictWord{10, 11, 715}, + dictWord{11, 11, 183}, + dictWord{11, 11, 201}, + dictWord{11, 11, 244}, + dictWord{11, 11, 262}, + dictWord{ + 11, + 11, + 352, + }, + dictWord{11, 11, 439}, + dictWord{11, 11, 493}, + dictWord{11, 11, 572}, + dictWord{11, 11, 591}, + dictWord{11, 11, 608}, + dictWord{11, 11, 611}, + dictWord{ + 11, + 11, + 646, + }, + dictWord{11, 11, 674}, + dictWord{11, 11, 711}, + dictWord{11, 11, 751}, + dictWord{11, 11, 761}, + dictWord{11, 11, 776}, + dictWord{11, 11, 785}, + dictWord{11, 11, 850}, + dictWord{11, 11, 853}, + dictWord{11, 11, 862}, + dictWord{11, 11, 865}, + dictWord{11, 11, 868}, + dictWord{11, 11, 898}, + dictWord{ + 11, + 11, + 902, + }, + dictWord{11, 11, 903}, + dictWord{11, 11, 910}, + dictWord{11, 11, 932}, + dictWord{11, 11, 942}, + dictWord{11, 11, 957}, + dictWord{11, 11, 967}, + dictWord{ + 11, + 11, + 972, + }, + dictWord{12, 11, 148}, + dictWord{12, 11, 195}, + dictWord{12, 11, 220}, + dictWord{12, 11, 237}, + dictWord{12, 11, 318}, + dictWord{12, 11, 339}, + dictWord{12, 11, 393}, + dictWord{12, 11, 445}, + dictWord{12, 11, 450}, + dictWord{12, 11, 474}, + dictWord{12, 11, 509}, + dictWord{12, 11, 533}, + dictWord{ + 12, + 11, + 591, + }, + dictWord{12, 11, 594}, + dictWord{12, 11, 597}, + dictWord{12, 11, 621}, + dictWord{12, 11, 633}, + dictWord{12, 11, 642}, + dictWord{13, 11, 59}, + dictWord{ + 13, + 11, + 60, + }, + dictWord{13, 11, 145}, + dictWord{13, 11, 239}, + dictWord{13, 11, 250}, + dictWord{13, 11, 273}, + dictWord{13, 11, 329}, + dictWord{13, 11, 344}, + dictWord{13, 11, 365}, + dictWord{13, 11, 372}, + dictWord{13, 11, 387}, + dictWord{13, 11, 403}, + dictWord{13, 11, 414}, + dictWord{13, 11, 456}, + dictWord{ + 13, + 11, + 478, + }, + dictWord{13, 11, 483}, + dictWord{13, 11, 489}, + dictWord{14, 11, 55}, + dictWord{14, 11, 57}, + dictWord{14, 11, 81}, + dictWord{14, 11, 90}, + dictWord{ + 14, + 11, + 148, + }, + dictWord{14, 11, 239}, + dictWord{14, 11, 266}, + dictWord{14, 11, 321}, + dictWord{14, 11, 326}, + dictWord{14, 11, 327}, + dictWord{14, 11, 330}, + dictWord{ + 14, + 11, + 347, + }, + dictWord{14, 11, 355}, + dictWord{14, 11, 401}, + dictWord{14, 11, 411}, + dictWord{14, 11, 414}, + dictWord{14, 11, 416}, + dictWord{14, 11, 420}, + dictWord{15, 11, 61}, + dictWord{15, 11, 74}, + dictWord{15, 11, 87}, + dictWord{15, 11, 88}, + dictWord{15, 11, 94}, + dictWord{15, 11, 96}, + dictWord{15, 11, 116}, + dictWord{15, 11, 149}, + dictWord{15, 11, 154}, + dictWord{16, 11, 50}, + dictWord{16, 11, 63}, + dictWord{16, 11, 73}, + dictWord{17, 11, 2}, + dictWord{17, 11, 66}, + dictWord{ + 17, + 11, + 92, + }, + dictWord{17, 11, 103}, + dictWord{17, 11, 112}, + dictWord{18, 11, 50}, + dictWord{18, 11, 54}, + dictWord{18, 11, 82}, + dictWord{18, 11, 86}, + dictWord{ + 18, + 11, + 90, + }, + dictWord{18, 11, 111}, + dictWord{18, 11, 115}, + dictWord{18, 11, 156}, + dictWord{19, 11, 40}, + dictWord{19, 11, 79}, + dictWord{20, 11, 78}, + dictWord{ + 149, + 11, + 22, + }, + dictWord{137, 11, 170}, + dictWord{134, 0, 1433}, + dictWord{135, 11, 1307}, + dictWord{139, 11, 411}, + dictWord{5, 0, 189}, + dictWord{7, 0, 442}, + dictWord{7, 0, 443}, + dictWord{8, 0, 281}, + dictWord{12, 0, 174}, + dictWord{141, 0, 261}, + dictWord{6, 10, 216}, + dictWord{7, 10, 901}, + dictWord{7, 10, 1343}, + dictWord{136, 10, 493}, + dictWord{5, 11, 397}, + dictWord{6, 11, 154}, + dictWord{7, 10, 341}, + dictWord{7, 11, 676}, + dictWord{8, 11, 443}, + dictWord{8, 11, 609}, + dictWord{ + 9, + 11, + 24, + }, + dictWord{9, 11, 325}, + dictWord{10, 11, 35}, + dictWord{11, 10, 219}, + dictWord{11, 11, 535}, + dictWord{11, 11, 672}, + dictWord{11, 11, 1018}, + dictWord{12, 11, 637}, + dictWord{144, 11, 30}, + dictWord{6, 0, 2}, + dictWord{7, 0, 191}, + dictWord{7, 0, 446}, + dictWord{7, 0, 1262}, + dictWord{7, 0, 1737}, + dictWord{8, 0, 22}, + dictWord{8, 0, 270}, + dictWord{8, 0, 612}, + dictWord{9, 0, 4}, + dictWord{9, 0, 312}, + dictWord{9, 0, 436}, + dictWord{9, 0, 626}, + dictWord{10, 0, 216}, + dictWord{10, 0, 311}, + dictWord{10, 0, 521}, + dictWord{10, 0, 623}, + dictWord{11, 0, 72}, + dictWord{11, 0, 330}, + dictWord{11, 0, 455}, + dictWord{12, 0, 321}, + dictWord{12, 0, 504}, + dictWord{12, 0, 530}, + dictWord{12, 0, 543}, + dictWord{13, 0, 17}, + dictWord{13, 0, 156}, + dictWord{13, 0, 334}, + dictWord{14, 0, 131}, + dictWord{17, 0, 60}, + dictWord{ + 148, + 0, + 64, + }, + dictWord{7, 0, 354}, + dictWord{10, 0, 410}, + dictWord{139, 0, 815}, + dictWord{139, 10, 130}, + dictWord{7, 10, 1734}, + dictWord{137, 11, 631}, + dictWord{ + 12, + 0, + 425, + }, + dictWord{15, 0, 112}, + dictWord{10, 10, 115}, + dictWord{11, 10, 420}, + dictWord{13, 10, 404}, + dictWord{14, 10, 346}, + dictWord{143, 10, 54}, + dictWord{ + 6, + 0, + 60, + }, + dictWord{6, 0, 166}, + dictWord{7, 0, 374}, + dictWord{7, 0, 670}, + dictWord{7, 0, 1327}, + dictWord{8, 0, 411}, + dictWord{8, 0, 435}, + dictWord{9, 0, 653}, + dictWord{ + 9, + 0, + 740, + }, + dictWord{10, 0, 385}, + dictWord{11, 0, 222}, + dictWord{11, 0, 324}, + dictWord{11, 0, 829}, + dictWord{140, 0, 611}, + dictWord{7, 0, 1611}, + dictWord{ + 13, + 0, + 14, + }, + dictWord{15, 0, 44}, + dictWord{19, 0, 13}, + dictWord{148, 0, 76}, + dictWord{133, 11, 981}, + dictWord{4, 11, 56}, + dictWord{7, 11, 1791}, + dictWord{8, 11, 607}, + dictWord{8, 11, 651}, + dictWord{11, 11, 465}, + dictWord{11, 11, 835}, + dictWord{12, 11, 337}, + dictWord{141, 11, 480}, + dictWord{6, 0, 1478}, + dictWord{ + 5, + 10, + 1011, + }, + dictWord{136, 10, 701}, + dictWord{139, 0, 596}, + dictWord{5, 0, 206}, + dictWord{134, 0, 398}, + dictWord{4, 10, 54}, + dictWord{5, 10, 666}, + dictWord{ + 7, + 10, + 1039, + }, + dictWord{7, 10, 1130}, + dictWord{9, 10, 195}, + dictWord{138, 10, 302}, + dictWord{7, 0, 50}, + dictWord{9, 11, 158}, + dictWord{138, 11, 411}, + dictWord{ + 135, + 11, + 1120, + }, + dictWord{6, 0, 517}, + dictWord{7, 0, 1159}, + dictWord{10, 0, 621}, + dictWord{11, 0, 192}, + dictWord{134, 10, 1669}, + dictWord{4, 0, 592}, + dictWord{ + 6, + 0, + 600, + }, + dictWord{135, 0, 1653}, + dictWord{10, 0, 223}, + dictWord{139, 0, 645}, + dictWord{136, 11, 139}, + dictWord{7, 0, 64}, + dictWord{136, 0, 245}, + dictWord{ + 142, + 0, + 278, + }, + dictWord{6, 11, 622}, + dictWord{135, 11, 1030}, + dictWord{136, 0, 604}, + dictWord{134, 0, 1502}, + dictWord{138, 0, 265}, + dictWord{ + 141, + 11, + 168, + }, + dictWord{7, 0, 1763}, + dictWord{140, 0, 310}, + dictWord{7, 10, 798}, + dictWord{139, 11, 719}, + dictWord{7, 11, 160}, + dictWord{10, 11, 624}, + dictWord{ + 142, + 11, + 279, + }, + dictWord{132, 11, 363}, + dictWord{7, 10, 122}, + dictWord{9, 10, 259}, + dictWord{10, 10, 84}, + dictWord{11, 10, 470}, + dictWord{12, 10, 541}, + dictWord{141, 10, 379}, + dictWord{5, 0, 129}, + dictWord{6, 0, 61}, + dictWord{135, 0, 947}, + dictWord{134, 0, 1356}, + dictWord{135, 11, 1191}, + dictWord{13, 0, 505}, + dictWord{141, 0, 506}, + dictWord{11, 0, 1000}, + dictWord{5, 10, 82}, + dictWord{5, 10, 131}, + dictWord{7, 10, 1755}, + dictWord{8, 10, 31}, + dictWord{9, 10, 168}, + dictWord{9, 10, 764}, + dictWord{139, 10, 869}, + dictWord{134, 0, 966}, + dictWord{134, 10, 605}, + dictWord{134, 11, 292}, + dictWord{5, 11, 177}, + dictWord{ + 6, + 11, + 616, + }, + dictWord{7, 11, 827}, + dictWord{9, 11, 525}, + dictWord{138, 11, 656}, + dictWord{135, 11, 1486}, + dictWord{138, 11, 31}, + dictWord{5, 10, 278}, + dictWord{137, 10, 68}, + dictWord{4, 10, 163}, + dictWord{5, 10, 201}, + dictWord{5, 10, 307}, + dictWord{5, 10, 310}, + dictWord{6, 10, 335}, + dictWord{7, 10, 284}, + dictWord{136, 10, 165}, + dictWord{6, 0, 839}, + dictWord{135, 10, 1660}, + dictWord{136, 10, 781}, + dictWord{6, 10, 33}, + dictWord{135, 10, 1244}, + dictWord{ + 133, + 0, + 637, + }, + dictWord{4, 11, 161}, + dictWord{133, 11, 631}, + dictWord{137, 0, 590}, + dictWord{7, 10, 1953}, + dictWord{136, 10, 720}, + dictWord{5, 0, 280}, + dictWord{ + 7, + 0, + 1226, + }, + dictWord{138, 10, 203}, + dictWord{134, 0, 1386}, + dictWord{5, 0, 281}, + dictWord{6, 0, 1026}, + dictWord{6, 10, 326}, + dictWord{7, 10, 677}, + dictWord{ + 137, + 10, + 425, + }, + dictWord{7, 11, 1557}, + dictWord{135, 11, 1684}, + dictWord{135, 0, 1064}, + dictWord{9, 11, 469}, + dictWord{9, 11, 709}, + dictWord{12, 11, 512}, + dictWord{14, 11, 65}, + dictWord{145, 11, 12}, + dictWord{134, 0, 917}, + dictWord{10, 11, 229}, + dictWord{11, 11, 73}, + dictWord{11, 11, 376}, + dictWord{ + 139, + 11, + 433, + }, + dictWord{7, 0, 555}, + dictWord{9, 0, 192}, + dictWord{13, 0, 30}, + dictWord{13, 0, 49}, + dictWord{15, 0, 150}, + dictWord{16, 0, 76}, + dictWord{20, 0, 52}, + dictWord{ + 7, + 10, + 1316, + }, + dictWord{7, 10, 1412}, + dictWord{7, 10, 1839}, + dictWord{9, 10, 589}, + dictWord{11, 10, 241}, + dictWord{11, 10, 676}, + dictWord{11, 10, 811}, + dictWord{11, 10, 891}, + dictWord{12, 10, 140}, + dictWord{12, 10, 346}, + dictWord{12, 10, 479}, + dictWord{13, 10, 381}, + dictWord{14, 10, 188}, + dictWord{ + 146, + 10, + 30, + }, + dictWord{149, 0, 15}, + dictWord{6, 0, 1882}, + dictWord{6, 0, 1883}, + dictWord{6, 0, 1897}, + dictWord{9, 0, 945}, + dictWord{9, 0, 1014}, + dictWord{9, 0, 1020}, + dictWord{12, 0, 823}, + dictWord{12, 0, 842}, + dictWord{12, 0, 866}, + dictWord{12, 0, 934}, + dictWord{15, 0, 242}, + dictWord{146, 0, 208}, + dictWord{6, 0, 965}, + dictWord{134, 0, 1499}, + dictWord{7, 0, 33}, + dictWord{7, 0, 120}, + dictWord{8, 0, 489}, + dictWord{9, 0, 319}, + dictWord{10, 0, 820}, + dictWord{11, 0, 1004}, + dictWord{ + 12, + 0, + 379, + }, + dictWord{12, 0, 679}, + dictWord{13, 0, 117}, + dictWord{13, 0, 412}, + dictWord{14, 0, 25}, + dictWord{15, 0, 52}, + dictWord{15, 0, 161}, + dictWord{16, 0, 47}, + dictWord{149, 0, 2}, + dictWord{6, 11, 558}, + dictWord{7, 11, 651}, + dictWord{8, 11, 421}, + dictWord{9, 11, 0}, + dictWord{138, 11, 34}, + dictWord{4, 0, 937}, + dictWord{ + 5, + 0, + 801, + }, + dictWord{7, 0, 473}, + dictWord{5, 10, 358}, + dictWord{7, 10, 1184}, + dictWord{10, 10, 662}, + dictWord{13, 10, 212}, + dictWord{13, 10, 304}, + dictWord{ + 13, + 10, + 333, + }, + dictWord{145, 10, 98}, + dictWord{132, 0, 877}, + dictWord{6, 0, 693}, + dictWord{134, 0, 824}, + dictWord{132, 0, 365}, + dictWord{7, 11, 1832}, + dictWord{ + 138, + 11, + 374, + }, + dictWord{5, 0, 7}, + dictWord{139, 0, 774}, + dictWord{4, 0, 734}, + dictWord{5, 0, 662}, + dictWord{134, 0, 430}, + dictWord{4, 0, 746}, + dictWord{ + 135, + 0, + 1090, + }, + dictWord{5, 0, 360}, + dictWord{8, 0, 237}, + dictWord{10, 0, 231}, + dictWord{147, 0, 124}, + dictWord{138, 11, 348}, + dictWord{6, 11, 6}, + dictWord{7, 11, 81}, + dictWord{7, 11, 771}, + dictWord{7, 11, 1731}, + dictWord{9, 11, 405}, + dictWord{138, 11, 421}, + dictWord{6, 0, 740}, + dictWord{137, 0, 822}, + dictWord{ + 133, + 10, + 946, + }, + dictWord{7, 0, 1485}, + dictWord{136, 0, 929}, + dictWord{7, 10, 411}, + dictWord{8, 10, 631}, + dictWord{9, 10, 323}, + dictWord{10, 10, 355}, + dictWord{ + 11, + 10, + 491, + }, + dictWord{12, 10, 143}, + dictWord{12, 10, 402}, + dictWord{13, 10, 73}, + dictWord{14, 10, 408}, + dictWord{15, 10, 107}, + dictWord{146, 10, 71}, + dictWord{ + 135, + 10, + 590, + }, + dictWord{5, 11, 881}, + dictWord{133, 11, 885}, + dictWord{150, 11, 25}, + dictWord{4, 0, 852}, + dictWord{5, 11, 142}, + dictWord{134, 11, 546}, + dictWord{7, 10, 1467}, + dictWord{8, 10, 328}, + dictWord{10, 10, 544}, + dictWord{11, 10, 955}, + dictWord{13, 10, 320}, + dictWord{145, 10, 83}, + dictWord{9, 0, 17}, + dictWord{10, 0, 291}, + dictWord{11, 10, 511}, + dictWord{13, 10, 394}, + dictWord{14, 10, 298}, + dictWord{14, 10, 318}, + dictWord{146, 10, 103}, + dictWord{5, 11, 466}, + dictWord{11, 11, 571}, + dictWord{12, 11, 198}, + dictWord{13, 11, 283}, + dictWord{14, 11, 186}, + dictWord{15, 11, 21}, + dictWord{143, 11, 103}, + dictWord{ + 134, + 0, + 1001, + }, + dictWord{4, 11, 185}, + dictWord{5, 11, 257}, + dictWord{5, 11, 839}, + dictWord{5, 11, 936}, + dictWord{7, 11, 171}, + dictWord{9, 11, 399}, + dictWord{ + 10, + 11, + 258, + }, + dictWord{10, 11, 395}, + dictWord{10, 11, 734}, + dictWord{11, 11, 1014}, + dictWord{12, 11, 23}, + dictWord{13, 11, 350}, + dictWord{14, 11, 150}, + dictWord{147, 11, 6}, + dictWord{143, 0, 35}, + dictWord{132, 0, 831}, + dictWord{5, 10, 835}, + dictWord{134, 10, 483}, + dictWord{4, 0, 277}, + dictWord{5, 0, 608}, + dictWord{ + 6, + 0, + 493, + }, + dictWord{7, 0, 457}, + dictWord{12, 0, 384}, + dictWord{7, 11, 404}, + dictWord{7, 11, 1377}, + dictWord{7, 11, 1430}, + dictWord{7, 11, 2017}, + dictWord{ + 8, + 11, + 149, + }, + dictWord{8, 11, 239}, + dictWord{8, 11, 512}, + dictWord{8, 11, 793}, + dictWord{8, 11, 818}, + dictWord{9, 11, 474}, + dictWord{9, 11, 595}, + dictWord{ + 10, + 11, + 122, + }, + dictWord{10, 11, 565}, + dictWord{10, 11, 649}, + dictWord{10, 11, 783}, + dictWord{11, 11, 239}, + dictWord{11, 11, 295}, + dictWord{11, 11, 447}, + dictWord{ + 11, + 11, + 528, + }, + dictWord{11, 11, 639}, + dictWord{11, 11, 800}, + dictWord{11, 11, 936}, + dictWord{12, 11, 25}, + dictWord{12, 11, 73}, + dictWord{12, 11, 77}, + dictWord{12, 11, 157}, + dictWord{12, 11, 316}, + dictWord{12, 11, 390}, + dictWord{12, 11, 391}, + dictWord{12, 11, 394}, + dictWord{12, 11, 395}, + dictWord{ + 12, + 11, + 478, + }, + dictWord{12, 11, 503}, + dictWord{12, 11, 592}, + dictWord{12, 11, 680}, + dictWord{13, 11, 50}, + dictWord{13, 11, 53}, + dictWord{13, 11, 132}, + dictWord{ + 13, + 11, + 198, + }, + dictWord{13, 11, 275}, + dictWord{13, 11, 322}, + dictWord{13, 11, 415}, + dictWord{14, 11, 71}, + dictWord{14, 11, 257}, + dictWord{14, 11, 395}, + dictWord{15, 11, 71}, + dictWord{15, 11, 136}, + dictWord{17, 11, 123}, + dictWord{18, 11, 93}, + dictWord{147, 11, 58}, + dictWord{134, 0, 1351}, + dictWord{7, 0, 27}, + dictWord{135, 0, 316}, + dictWord{136, 11, 712}, + dictWord{136, 0, 984}, + dictWord{133, 0, 552}, + dictWord{137, 0, 264}, + dictWord{132, 0, 401}, + dictWord{6, 0, 710}, + dictWord{6, 0, 1111}, + dictWord{134, 0, 1343}, + dictWord{134, 0, 1211}, + dictWord{9, 0, 543}, + dictWord{10, 0, 524}, + dictWord{11, 0, 108}, + dictWord{11, 0, 653}, + dictWord{12, 0, 524}, + dictWord{13, 0, 123}, + dictWord{14, 0, 252}, + dictWord{16, 0, 18}, + dictWord{19, 0, 38}, + dictWord{20, 0, 26}, + dictWord{20, 0, 65}, + dictWord{ + 21, + 0, + 3, + }, + dictWord{151, 0, 11}, + dictWord{4, 0, 205}, + dictWord{5, 0, 623}, + dictWord{7, 0, 104}, + dictWord{8, 0, 519}, + dictWord{137, 0, 716}, + dictWord{132, 10, 677}, + dictWord{4, 11, 377}, + dictWord{152, 11, 13}, + dictWord{135, 11, 1673}, + dictWord{7, 0, 579}, + dictWord{9, 0, 41}, + dictWord{9, 0, 244}, + dictWord{9, 0, 669}, + dictWord{ + 10, + 0, + 5, + }, + dictWord{11, 0, 861}, + dictWord{11, 0, 951}, + dictWord{139, 0, 980}, + dictWord{132, 0, 717}, + dictWord{136, 0, 1011}, + dictWord{132, 0, 805}, + dictWord{ + 4, + 11, + 180, + }, + dictWord{135, 11, 1906}, + dictWord{132, 10, 777}, + dictWord{132, 10, 331}, + dictWord{132, 0, 489}, + dictWord{6, 0, 1024}, + dictWord{4, 11, 491}, + dictWord{133, 10, 747}, + dictWord{135, 11, 1182}, + dictWord{4, 11, 171}, + dictWord{138, 11, 234}, + dictWord{4, 11, 586}, + dictWord{7, 11, 1186}, + dictWord{ + 138, + 11, + 631, + }, + dictWord{135, 0, 892}, + dictWord{135, 11, 336}, + dictWord{9, 11, 931}, + dictWord{10, 11, 334}, + dictWord{148, 11, 71}, + dictWord{137, 0, 473}, + dictWord{6, 0, 864}, + dictWord{12, 0, 659}, + dictWord{139, 11, 926}, + dictWord{7, 0, 819}, + dictWord{9, 0, 26}, + dictWord{9, 0, 392}, + dictWord{10, 0, 152}, + dictWord{ + 10, + 0, + 226, + }, + dictWord{11, 0, 19}, + dictWord{12, 0, 276}, + dictWord{12, 0, 426}, + dictWord{12, 0, 589}, + dictWord{13, 0, 460}, + dictWord{15, 0, 97}, + dictWord{19, 0, 48}, + dictWord{148, 0, 104}, + dictWord{135, 0, 51}, + dictWord{133, 10, 326}, + dictWord{4, 10, 691}, + dictWord{146, 10, 16}, + dictWord{9, 0, 130}, + dictWord{11, 0, 765}, + dictWord{10, 10, 680}, + dictWord{10, 10, 793}, + dictWord{141, 10, 357}, + dictWord{133, 11, 765}, + dictWord{8, 0, 229}, + dictWord{6, 10, 32}, + dictWord{7, 10, 385}, + dictWord{7, 10, 757}, + dictWord{7, 10, 1916}, + dictWord{8, 10, 94}, + dictWord{8, 10, 711}, + dictWord{9, 10, 541}, + dictWord{10, 10, 162}, + dictWord{10, 10, 795}, + dictWord{11, 10, 989}, + dictWord{11, 10, 1010}, + dictWord{12, 10, 14}, + dictWord{142, 10, 308}, + dictWord{7, 11, 474}, + dictWord{137, 11, 578}, + dictWord{ + 132, + 0, + 674, + }, + dictWord{132, 0, 770}, + dictWord{5, 0, 79}, + dictWord{7, 0, 1027}, + dictWord{7, 0, 1477}, + dictWord{139, 0, 52}, + dictWord{133, 11, 424}, + dictWord{ + 134, + 0, + 1666, + }, + dictWord{6, 0, 409}, + dictWord{6, 10, 349}, + dictWord{6, 10, 1682}, + dictWord{7, 10, 1252}, + dictWord{8, 10, 112}, + dictWord{8, 11, 714}, + dictWord{ + 9, + 10, + 435, + }, + dictWord{9, 10, 668}, + dictWord{10, 10, 290}, + dictWord{10, 10, 319}, + dictWord{10, 10, 815}, + dictWord{11, 10, 180}, + dictWord{11, 10, 837}, + dictWord{ + 12, + 10, + 240, + }, + dictWord{13, 10, 152}, + dictWord{13, 10, 219}, + dictWord{142, 10, 158}, + dictWord{5, 0, 789}, + dictWord{134, 0, 195}, + dictWord{4, 0, 251}, + dictWord{ + 4, + 0, + 688, + }, + dictWord{7, 0, 513}, + dictWord{135, 0, 1284}, + dictWord{132, 10, 581}, + dictWord{9, 11, 420}, + dictWord{10, 11, 269}, + dictWord{10, 11, 285}, + dictWord{10, 11, 576}, + dictWord{11, 11, 397}, + dictWord{13, 11, 175}, + dictWord{145, 11, 90}, + dictWord{6, 10, 126}, + dictWord{7, 10, 573}, + dictWord{8, 10, 397}, + dictWord{142, 10, 44}, + dictWord{132, 11, 429}, + dictWord{133, 0, 889}, + dictWord{4, 0, 160}, + dictWord{5, 0, 330}, + dictWord{7, 0, 1434}, + dictWord{136, 0, 174}, + dictWord{7, 11, 18}, + dictWord{7, 11, 699}, + dictWord{7, 11, 1966}, + dictWord{8, 11, 752}, + dictWord{9, 11, 273}, + dictWord{9, 11, 412}, + dictWord{9, 11, 703}, + dictWord{ + 10, + 11, + 71, + }, + dictWord{10, 11, 427}, + dictWord{10, 11, 508}, + dictWord{146, 11, 97}, + dictWord{6, 0, 872}, + dictWord{134, 0, 899}, + dictWord{133, 10, 926}, + dictWord{134, 0, 1126}, + dictWord{134, 0, 918}, + dictWord{4, 11, 53}, + dictWord{5, 11, 186}, + dictWord{135, 11, 752}, + dictWord{7, 0, 268}, + dictWord{136, 0, 569}, + dictWord{134, 0, 1224}, + dictWord{6, 0, 1361}, + dictWord{7, 10, 1232}, + dictWord{137, 10, 531}, + dictWord{8, 11, 575}, + dictWord{10, 11, 289}, + dictWord{ + 139, + 11, + 319, + }, + dictWord{133, 10, 670}, + dictWord{132, 11, 675}, + dictWord{133, 0, 374}, + dictWord{135, 10, 1957}, + dictWord{133, 0, 731}, + dictWord{11, 0, 190}, + dictWord{15, 0, 49}, + dictWord{11, 11, 190}, + dictWord{143, 11, 49}, + dictWord{4, 0, 626}, + dictWord{5, 0, 506}, + dictWord{5, 0, 642}, + dictWord{6, 0, 425}, + dictWord{ + 10, + 0, + 202, + }, + dictWord{139, 0, 141}, + dictWord{137, 0, 444}, + dictWord{7, 10, 242}, + dictWord{135, 10, 1942}, + dictWord{6, 11, 209}, + dictWord{8, 11, 468}, + dictWord{ + 9, + 11, + 210, + }, + dictWord{11, 11, 36}, + dictWord{12, 11, 28}, + dictWord{12, 11, 630}, + dictWord{13, 11, 21}, + dictWord{13, 11, 349}, + dictWord{14, 11, 7}, + dictWord{ + 145, + 11, + 13, + }, + dictWord{4, 11, 342}, + dictWord{135, 11, 1179}, + dictWord{5, 10, 834}, + dictWord{7, 10, 1202}, + dictWord{8, 10, 14}, + dictWord{9, 10, 481}, + dictWord{ + 137, + 10, + 880, + }, + dictWord{4, 11, 928}, + dictWord{133, 11, 910}, + dictWord{4, 11, 318}, + dictWord{4, 11, 496}, + dictWord{7, 11, 856}, + dictWord{139, 11, 654}, + dictWord{136, 0, 835}, + dictWord{7, 0, 1526}, + dictWord{138, 10, 465}, + dictWord{151, 0, 17}, + dictWord{135, 0, 477}, + dictWord{4, 10, 357}, + dictWord{6, 10, 172}, + dictWord{7, 10, 143}, + dictWord{137, 10, 413}, + dictWord{6, 0, 1374}, + dictWord{138, 0, 994}, + dictWord{18, 0, 76}, + dictWord{132, 10, 590}, + dictWord{7, 0, 287}, + dictWord{8, 0, 355}, + dictWord{9, 0, 293}, + dictWord{137, 0, 743}, + dictWord{134, 0, 1389}, + dictWord{7, 11, 915}, + dictWord{8, 11, 247}, + dictWord{147, 11, 0}, + dictWord{ + 4, + 11, + 202, + }, + dictWord{5, 11, 382}, + dictWord{6, 11, 454}, + dictWord{7, 11, 936}, + dictWord{7, 11, 1803}, + dictWord{8, 11, 758}, + dictWord{9, 11, 375}, + dictWord{ + 9, + 11, + 895, + }, + dictWord{10, 11, 743}, + dictWord{10, 11, 792}, + dictWord{11, 11, 978}, + dictWord{11, 11, 1012}, + dictWord{142, 11, 109}, + dictWord{5, 0, 384}, + dictWord{8, 0, 455}, + dictWord{140, 0, 48}, + dictWord{132, 11, 390}, + dictWord{5, 10, 169}, + dictWord{7, 10, 333}, + dictWord{136, 10, 45}, + dictWord{5, 0, 264}, + dictWord{134, 0, 184}, + dictWord{138, 11, 791}, + dictWord{133, 11, 717}, + dictWord{132, 10, 198}, + dictWord{6, 11, 445}, + dictWord{7, 11, 332}, + dictWord{ + 137, + 11, + 909, + }, + dictWord{136, 0, 1001}, + dictWord{4, 10, 24}, + dictWord{5, 10, 140}, + dictWord{5, 10, 185}, + dictWord{7, 10, 1500}, + dictWord{11, 10, 565}, + dictWord{ + 139, + 10, + 838, + }, + dictWord{134, 11, 578}, + dictWord{5, 0, 633}, + dictWord{6, 0, 28}, + dictWord{135, 0, 1323}, + dictWord{132, 0, 851}, + dictWord{136, 11, 267}, + dictWord{ + 7, + 0, + 359, + }, + dictWord{8, 0, 243}, + dictWord{140, 0, 175}, + dictWord{4, 10, 334}, + dictWord{133, 10, 593}, + dictWord{141, 11, 87}, + dictWord{136, 11, 766}, + dictWord{10, 0, 287}, + dictWord{12, 0, 138}, + dictWord{10, 11, 287}, + dictWord{140, 11, 138}, + dictWord{4, 0, 105}, + dictWord{132, 0, 740}, + dictWord{140, 10, 116}, + dictWord{134, 0, 857}, + dictWord{135, 11, 1841}, + dictWord{6, 0, 1402}, + dictWord{137, 0, 819}, + dictWord{132, 11, 584}, + dictWord{132, 10, 709}, + dictWord{ + 133, + 10, + 897, + }, + dictWord{5, 0, 224}, + dictWord{13, 0, 174}, + dictWord{146, 0, 52}, + dictWord{135, 10, 1840}, + dictWord{4, 10, 608}, + dictWord{133, 10, 497}, + dictWord{139, 11, 60}, + dictWord{4, 0, 758}, + dictWord{135, 0, 1649}, + dictWord{4, 11, 226}, + dictWord{4, 11, 326}, + dictWord{135, 11, 1770}, + dictWord{5, 11, 426}, + dictWord{8, 11, 30}, + dictWord{9, 11, 2}, + dictWord{11, 11, 549}, + dictWord{147, 11, 122}, + dictWord{135, 10, 2039}, + dictWord{6, 10, 540}, + dictWord{ + 136, + 10, + 136, + }, + dictWord{4, 0, 573}, + dictWord{8, 0, 655}, + dictWord{4, 10, 897}, + dictWord{133, 10, 786}, + dictWord{7, 0, 351}, + dictWord{139, 0, 128}, + dictWord{ + 133, + 10, + 999, + }, + dictWord{4, 10, 299}, + dictWord{135, 10, 1004}, + dictWord{133, 0, 918}, + dictWord{132, 11, 345}, + dictWord{4, 11, 385}, + dictWord{7, 11, 265}, + dictWord{135, 11, 587}, + dictWord{133, 10, 456}, + dictWord{136, 10, 180}, + dictWord{6, 0, 687}, + dictWord{134, 0, 1537}, + dictWord{4, 11, 347}, + dictWord{ + 5, + 11, + 423, + }, + dictWord{5, 11, 996}, + dictWord{135, 11, 1329}, + dictWord{132, 10, 755}, + dictWord{7, 11, 1259}, + dictWord{9, 11, 125}, + dictWord{11, 11, 65}, + dictWord{140, 11, 285}, + dictWord{5, 11, 136}, + dictWord{6, 11, 136}, + dictWord{136, 11, 644}, + dictWord{134, 0, 1525}, + dictWord{4, 0, 1009}, + dictWord{ + 135, + 0, + 1139, + }, + dictWord{139, 10, 338}, + dictWord{132, 0, 340}, + dictWord{135, 10, 1464}, + dictWord{8, 0, 847}, + dictWord{10, 0, 861}, + dictWord{10, 0, 876}, + dictWord{ + 10, + 0, + 889, + }, + dictWord{10, 0, 922}, + dictWord{10, 0, 929}, + dictWord{10, 0, 933}, + dictWord{12, 0, 784}, + dictWord{140, 0, 791}, + dictWord{139, 0, 176}, + dictWord{ + 9, + 11, + 134, + }, + dictWord{10, 11, 2}, + dictWord{10, 11, 27}, + dictWord{10, 11, 333}, + dictWord{11, 11, 722}, + dictWord{143, 11, 1}, + dictWord{4, 11, 433}, + dictWord{ + 133, + 11, + 719, + }, + dictWord{5, 0, 985}, + dictWord{7, 0, 509}, + dictWord{7, 0, 529}, + dictWord{145, 0, 96}, + dictWord{132, 0, 615}, + dictWord{4, 10, 890}, + dictWord{ + 5, + 10, + 805, + }, + dictWord{5, 10, 819}, + dictWord{5, 10, 961}, + dictWord{6, 10, 396}, + dictWord{6, 10, 1631}, + dictWord{6, 10, 1678}, + dictWord{7, 10, 1967}, + dictWord{ + 7, + 10, + 2041, + }, + dictWord{9, 10, 630}, + dictWord{11, 10, 8}, + dictWord{11, 10, 1019}, + dictWord{12, 10, 176}, + dictWord{13, 10, 225}, + dictWord{14, 10, 292}, + dictWord{ + 149, + 10, + 24, + }, + dictWord{135, 0, 1919}, + dictWord{134, 0, 1131}, + dictWord{144, 11, 21}, + dictWord{144, 11, 51}, + dictWord{135, 10, 1815}, + dictWord{4, 0, 247}, + dictWord{7, 10, 1505}, + dictWord{10, 10, 190}, + dictWord{10, 10, 634}, + dictWord{11, 10, 792}, + dictWord{12, 10, 358}, + dictWord{140, 10, 447}, + dictWord{ + 5, + 10, + 0, + }, + dictWord{6, 10, 536}, + dictWord{7, 10, 604}, + dictWord{13, 10, 445}, + dictWord{145, 10, 126}, + dictWord{4, 0, 184}, + dictWord{5, 0, 390}, + dictWord{6, 0, 337}, + dictWord{7, 0, 23}, + dictWord{7, 0, 494}, + dictWord{7, 0, 618}, + dictWord{7, 0, 1456}, + dictWord{8, 0, 27}, + dictWord{8, 0, 599}, + dictWord{10, 0, 153}, + dictWord{ + 139, + 0, + 710, + }, + dictWord{6, 10, 232}, + dictWord{6, 10, 412}, + dictWord{7, 10, 1074}, + dictWord{8, 10, 9}, + dictWord{8, 10, 157}, + dictWord{8, 10, 786}, + dictWord{9, 10, 196}, + dictWord{9, 10, 352}, + dictWord{9, 10, 457}, + dictWord{10, 10, 337}, + dictWord{11, 10, 232}, + dictWord{11, 10, 877}, + dictWord{12, 10, 480}, + dictWord{ + 140, + 10, + 546, + }, + dictWord{13, 0, 38}, + dictWord{135, 10, 958}, + dictWord{4, 10, 382}, + dictWord{136, 10, 579}, + dictWord{4, 10, 212}, + dictWord{135, 10, 1206}, + dictWord{ + 4, + 11, + 555, + }, + dictWord{8, 11, 536}, + dictWord{138, 11, 288}, + dictWord{11, 11, 139}, + dictWord{139, 11, 171}, + dictWord{9, 11, 370}, + dictWord{138, 11, 90}, + dictWord{132, 0, 1015}, + dictWord{134, 0, 1088}, + dictWord{5, 10, 655}, + dictWord{135, 11, 977}, + dictWord{134, 0, 1585}, + dictWord{17, 10, 67}, + dictWord{ + 147, + 10, + 74, + }, + dictWord{10, 0, 227}, + dictWord{11, 0, 497}, + dictWord{11, 0, 709}, + dictWord{140, 0, 415}, + dictWord{6, 0, 360}, + dictWord{7, 0, 1664}, + dictWord{ + 136, + 0, + 478, + }, + dictWord{7, 0, 95}, + dictWord{6, 10, 231}, + dictWord{136, 10, 423}, + dictWord{140, 11, 65}, + dictWord{4, 11, 257}, + dictWord{135, 11, 2031}, + dictWord{ + 135, + 11, + 1768, + }, + dictWord{133, 10, 300}, + dictWord{139, 11, 211}, + dictWord{136, 0, 699}, + dictWord{6, 10, 237}, + dictWord{7, 10, 611}, + dictWord{8, 10, 100}, + dictWord{9, 10, 416}, + dictWord{11, 10, 335}, + dictWord{12, 10, 173}, + dictWord{146, 10, 101}, + dictWord{14, 0, 26}, + dictWord{146, 0, 150}, + dictWord{6, 0, 581}, + dictWord{135, 0, 1119}, + dictWord{135, 10, 1208}, + dictWord{132, 0, 739}, + dictWord{6, 11, 83}, + dictWord{6, 11, 1733}, + dictWord{135, 11, 1389}, + dictWord{ + 137, + 0, + 869, + }, + dictWord{4, 0, 67}, + dictWord{5, 0, 422}, + dictWord{7, 0, 1037}, + dictWord{7, 0, 1289}, + dictWord{7, 0, 1555}, + dictWord{9, 0, 741}, + dictWord{145, 0, 108}, + dictWord{133, 10, 199}, + dictWord{12, 10, 427}, + dictWord{146, 10, 38}, + dictWord{136, 0, 464}, + dictWord{142, 0, 42}, + dictWord{10, 0, 96}, + dictWord{8, 11, 501}, + dictWord{137, 11, 696}, + dictWord{134, 11, 592}, + dictWord{4, 0, 512}, + dictWord{4, 0, 966}, + dictWord{5, 0, 342}, + dictWord{6, 0, 1855}, + dictWord{8, 0, 869}, + dictWord{8, 0, 875}, + dictWord{8, 0, 901}, + dictWord{144, 0, 26}, + dictWord{8, 0, 203}, + dictWord{11, 0, 823}, + dictWord{11, 0, 846}, + dictWord{12, 0, 482}, + dictWord{ + 13, + 0, + 277, + }, + dictWord{13, 0, 302}, + dictWord{13, 0, 464}, + dictWord{14, 0, 205}, + dictWord{142, 0, 221}, + dictWord{4, 0, 449}, + dictWord{133, 0, 718}, + dictWord{ + 7, + 11, + 1718, + }, + dictWord{9, 11, 95}, + dictWord{9, 11, 274}, + dictWord{10, 11, 279}, + dictWord{10, 11, 317}, + dictWord{10, 11, 420}, + dictWord{11, 11, 303}, + dictWord{ + 11, + 11, + 808, + }, + dictWord{12, 11, 134}, + dictWord{12, 11, 367}, + dictWord{13, 11, 149}, + dictWord{13, 11, 347}, + dictWord{14, 11, 349}, + dictWord{14, 11, 406}, + dictWord{18, 11, 22}, + dictWord{18, 11, 89}, + dictWord{18, 11, 122}, + dictWord{147, 11, 47}, + dictWord{133, 11, 26}, + dictWord{4, 0, 355}, + dictWord{6, 0, 311}, + dictWord{ + 9, + 0, + 256, + }, + dictWord{138, 0, 404}, + dictWord{132, 11, 550}, + dictWord{10, 0, 758}, + dictWord{6, 10, 312}, + dictWord{6, 10, 1715}, + dictWord{10, 10, 584}, + dictWord{11, 10, 546}, + dictWord{11, 10, 692}, + dictWord{12, 10, 259}, + dictWord{12, 10, 295}, + dictWord{13, 10, 46}, + dictWord{141, 10, 154}, + dictWord{ + 136, + 11, + 822, + }, + dictWord{5, 0, 827}, + dictWord{4, 11, 902}, + dictWord{5, 11, 809}, + dictWord{6, 11, 122}, + dictWord{135, 11, 896}, + dictWord{5, 0, 64}, + dictWord{140, 0, 581}, + dictWord{4, 0, 442}, + dictWord{6, 0, 739}, + dictWord{7, 0, 1047}, + dictWord{7, 0, 1352}, + dictWord{7, 0, 1643}, + dictWord{7, 11, 1911}, + dictWord{9, 11, 449}, + dictWord{10, 11, 192}, + dictWord{138, 11, 740}, + dictWord{135, 11, 262}, + dictWord{132, 10, 588}, + dictWord{133, 11, 620}, + dictWord{5, 0, 977}, + dictWord{ + 6, + 0, + 288, + }, + dictWord{7, 0, 528}, + dictWord{4, 11, 34}, + dictWord{5, 11, 574}, + dictWord{7, 11, 279}, + dictWord{7, 11, 1624}, + dictWord{136, 11, 601}, + dictWord{ + 6, + 0, + 1375, + }, + dictWord{4, 10, 231}, + dictWord{5, 10, 61}, + dictWord{6, 10, 104}, + dictWord{7, 10, 729}, + dictWord{7, 10, 964}, + dictWord{7, 10, 1658}, + dictWord{ + 140, + 10, + 414, + }, + dictWord{6, 10, 263}, + dictWord{138, 10, 757}, + dictWord{132, 10, 320}, + dictWord{4, 0, 254}, + dictWord{7, 0, 1309}, + dictWord{5, 11, 332}, + dictWord{ + 135, + 11, + 1309, + }, + dictWord{6, 11, 261}, + dictWord{8, 11, 182}, + dictWord{139, 11, 943}, + dictWord{132, 10, 225}, + dictWord{6, 0, 12}, + dictWord{135, 0, 1219}, + dictWord{4, 0, 275}, + dictWord{12, 0, 376}, + dictWord{6, 11, 1721}, + dictWord{141, 11, 490}, + dictWord{4, 11, 933}, + dictWord{133, 11, 880}, + dictWord{6, 0, 951}, + dictWord{6, 0, 1109}, + dictWord{6, 0, 1181}, + dictWord{7, 0, 154}, + dictWord{4, 10, 405}, + dictWord{7, 10, 817}, + dictWord{14, 10, 58}, + dictWord{17, 10, 37}, + dictWord{ + 146, + 10, + 124, + }, + dictWord{6, 0, 1520}, + dictWord{133, 10, 974}, + dictWord{134, 0, 1753}, + dictWord{6, 0, 369}, + dictWord{6, 0, 502}, + dictWord{7, 0, 1036}, + dictWord{ + 8, + 0, + 348, + }, + dictWord{9, 0, 452}, + dictWord{10, 0, 26}, + dictWord{11, 0, 224}, + dictWord{11, 0, 387}, + dictWord{11, 0, 772}, + dictWord{12, 0, 95}, + dictWord{12, 0, 629}, + dictWord{13, 0, 195}, + dictWord{13, 0, 207}, + dictWord{13, 0, 241}, + dictWord{14, 0, 260}, + dictWord{14, 0, 270}, + dictWord{143, 0, 140}, + dictWord{132, 0, 269}, + dictWord{5, 0, 480}, + dictWord{7, 0, 532}, + dictWord{7, 0, 1197}, + dictWord{7, 0, 1358}, + dictWord{8, 0, 291}, + dictWord{11, 0, 349}, + dictWord{142, 0, 396}, + dictWord{ + 5, + 10, + 235, + }, + dictWord{7, 10, 1239}, + dictWord{11, 10, 131}, + dictWord{140, 10, 370}, + dictWord{7, 10, 956}, + dictWord{7, 10, 1157}, + dictWord{7, 10, 1506}, + dictWord{ + 7, + 10, + 1606, + }, + dictWord{7, 10, 1615}, + dictWord{7, 10, 1619}, + dictWord{7, 10, 1736}, + dictWord{7, 10, 1775}, + dictWord{8, 10, 590}, + dictWord{9, 10, 324}, + dictWord{9, 10, 736}, + dictWord{9, 10, 774}, + dictWord{9, 10, 776}, + dictWord{9, 10, 784}, + dictWord{10, 10, 567}, + dictWord{10, 10, 708}, + dictWord{11, 10, 518}, + dictWord{11, 10, 613}, + dictWord{11, 10, 695}, + dictWord{11, 10, 716}, + dictWord{11, 10, 739}, + dictWord{11, 10, 770}, + dictWord{11, 10, 771}, + dictWord{ + 11, + 10, + 848, + }, + dictWord{11, 10, 857}, + dictWord{11, 10, 931}, + dictWord{11, 10, 947}, + dictWord{12, 10, 326}, + dictWord{12, 10, 387}, + dictWord{12, 10, 484}, + dictWord{ + 12, + 10, + 528, + }, + dictWord{12, 10, 552}, + dictWord{12, 10, 613}, + dictWord{13, 10, 189}, + dictWord{13, 10, 256}, + dictWord{13, 10, 340}, + dictWord{13, 10, 432}, + dictWord{13, 10, 436}, + dictWord{13, 10, 440}, + dictWord{13, 10, 454}, + dictWord{14, 10, 174}, + dictWord{14, 10, 220}, + dictWord{14, 10, 284}, + dictWord{ + 14, + 10, + 390, + }, + dictWord{145, 10, 121}, + dictWord{8, 11, 598}, + dictWord{9, 11, 664}, + dictWord{138, 11, 441}, + dictWord{9, 10, 137}, + dictWord{138, 10, 221}, + dictWord{133, 11, 812}, + dictWord{148, 0, 15}, + dictWord{134, 0, 1341}, + dictWord{6, 0, 1017}, + dictWord{4, 11, 137}, + dictWord{7, 11, 1178}, + dictWord{ + 135, + 11, + 1520, + }, + dictWord{7, 10, 390}, + dictWord{138, 10, 140}, + dictWord{7, 11, 1260}, + dictWord{135, 11, 1790}, + dictWord{137, 11, 191}, + dictWord{ + 135, + 10, + 1144, + }, + dictWord{6, 0, 1810}, + dictWord{7, 0, 657}, + dictWord{8, 0, 886}, + dictWord{10, 0, 857}, + dictWord{14, 0, 440}, + dictWord{144, 0, 96}, + dictWord{8, 0, 533}, + dictWord{6, 11, 1661}, + dictWord{7, 11, 1975}, + dictWord{7, 11, 2009}, + dictWord{135, 11, 2011}, + dictWord{6, 0, 1453}, + dictWord{134, 10, 464}, + dictWord{ + 132, + 11, + 715, + }, + dictWord{5, 10, 407}, + dictWord{11, 10, 204}, + dictWord{11, 10, 243}, + dictWord{11, 10, 489}, + dictWord{12, 10, 293}, + dictWord{19, 10, 37}, + dictWord{20, 10, 73}, + dictWord{150, 10, 38}, + dictWord{133, 11, 703}, + dictWord{4, 0, 211}, + dictWord{7, 0, 1483}, + dictWord{5, 10, 325}, + dictWord{8, 10, 5}, + dictWord{ + 8, + 10, + 227, + }, + dictWord{9, 10, 105}, + dictWord{10, 10, 585}, + dictWord{140, 10, 614}, + dictWord{4, 0, 332}, + dictWord{5, 0, 335}, + dictWord{6, 0, 238}, + dictWord{ + 7, + 0, + 269, + }, + dictWord{7, 0, 811}, + dictWord{7, 0, 1797}, + dictWord{8, 0, 836}, + dictWord{9, 0, 507}, + dictWord{141, 0, 242}, + dictWord{5, 11, 89}, + dictWord{7, 11, 1915}, + dictWord{9, 11, 185}, + dictWord{9, 11, 235}, + dictWord{9, 11, 496}, + dictWord{10, 11, 64}, + dictWord{10, 11, 270}, + dictWord{10, 11, 403}, + dictWord{10, 11, 469}, + dictWord{10, 11, 529}, + dictWord{10, 11, 590}, + dictWord{11, 11, 140}, + dictWord{11, 11, 860}, + dictWord{13, 11, 1}, + dictWord{13, 11, 422}, + dictWord{14, 11, 341}, + dictWord{14, 11, 364}, + dictWord{17, 11, 93}, + dictWord{18, 11, 113}, + dictWord{19, 11, 97}, + dictWord{147, 11, 113}, + dictWord{133, 11, 695}, + dictWord{ + 16, + 0, + 19, + }, + dictWord{5, 11, 6}, + dictWord{6, 11, 183}, + dictWord{6, 10, 621}, + dictWord{7, 11, 680}, + dictWord{7, 11, 978}, + dictWord{7, 11, 1013}, + dictWord{7, 11, 1055}, + dictWord{12, 11, 230}, + dictWord{13, 11, 172}, + dictWord{13, 10, 504}, + dictWord{146, 11, 29}, + dictWord{136, 0, 156}, + dictWord{133, 0, 1009}, + dictWord{ + 6, + 11, + 29, + }, + dictWord{139, 11, 63}, + dictWord{134, 0, 820}, + dictWord{134, 10, 218}, + dictWord{7, 10, 454}, + dictWord{7, 10, 782}, + dictWord{8, 10, 768}, + dictWord{ + 140, + 10, + 686, + }, + dictWord{5, 0, 228}, + dictWord{6, 0, 203}, + dictWord{7, 0, 156}, + dictWord{8, 0, 347}, + dictWord{9, 0, 265}, + dictWord{18, 0, 39}, + dictWord{20, 0, 54}, + dictWord{21, 0, 31}, + dictWord{22, 0, 3}, + dictWord{23, 0, 0}, + dictWord{15, 11, 8}, + dictWord{18, 11, 39}, + dictWord{20, 11, 54}, + dictWord{21, 11, 31}, + dictWord{22, 11, 3}, + dictWord{151, 11, 0}, + dictWord{7, 0, 1131}, + dictWord{135, 0, 1468}, + dictWord{144, 10, 0}, + dictWord{134, 0, 1276}, + dictWord{10, 10, 676}, + dictWord{ + 140, + 10, + 462, + }, + dictWord{132, 11, 311}, + dictWord{134, 11, 1740}, + dictWord{7, 11, 170}, + dictWord{8, 11, 90}, + dictWord{8, 11, 177}, + dictWord{8, 11, 415}, + dictWord{ + 11, + 11, + 714, + }, + dictWord{142, 11, 281}, + dictWord{134, 10, 164}, + dictWord{6, 0, 1792}, + dictWord{138, 0, 849}, + dictWord{150, 10, 50}, + dictWord{5, 0, 291}, + dictWord{5, 0, 318}, + dictWord{7, 0, 765}, + dictWord{9, 0, 389}, + dictWord{12, 0, 548}, + dictWord{8, 11, 522}, + dictWord{142, 11, 328}, + dictWord{11, 11, 91}, + dictWord{ + 13, + 11, + 129, + }, + dictWord{15, 11, 101}, + dictWord{145, 11, 125}, + dictWord{4, 11, 494}, + dictWord{6, 11, 74}, + dictWord{7, 11, 44}, + dictWord{7, 11, 407}, + dictWord{ + 8, + 11, + 551, + }, + dictWord{12, 11, 17}, + dictWord{15, 11, 5}, + dictWord{148, 11, 11}, + dictWord{4, 11, 276}, + dictWord{133, 11, 296}, + dictWord{6, 10, 343}, + dictWord{ + 7, + 10, + 195, + }, + dictWord{7, 11, 1777}, + dictWord{9, 10, 226}, + dictWord{10, 10, 197}, + dictWord{10, 10, 575}, + dictWord{11, 10, 502}, + dictWord{139, 10, 899}, + dictWord{ + 10, + 0, + 525, + }, + dictWord{139, 0, 82}, + dictWord{14, 0, 453}, + dictWord{4, 11, 7}, + dictWord{5, 11, 90}, + dictWord{5, 11, 158}, + dictWord{6, 11, 542}, + dictWord{7, 11, 221}, + dictWord{7, 11, 1574}, + dictWord{9, 11, 490}, + dictWord{10, 11, 540}, + dictWord{11, 11, 443}, + dictWord{139, 11, 757}, + dictWord{135, 0, 666}, + dictWord{ + 22, + 10, + 29, + }, + dictWord{150, 11, 29}, + dictWord{4, 0, 422}, + dictWord{147, 10, 8}, + dictWord{5, 0, 355}, + dictWord{145, 0, 0}, + dictWord{6, 0, 1873}, + dictWord{9, 0, 918}, + dictWord{7, 11, 588}, + dictWord{9, 11, 175}, + dictWord{138, 11, 530}, + dictWord{143, 11, 31}, + dictWord{11, 0, 165}, + dictWord{7, 10, 1125}, + dictWord{9, 10, 143}, + dictWord{14, 10, 405}, + dictWord{150, 10, 21}, + dictWord{9, 0, 260}, + dictWord{137, 0, 905}, + dictWord{5, 11, 872}, + dictWord{6, 11, 57}, + dictWord{6, 11, 479}, + dictWord{ + 6, + 11, + 562, + }, + dictWord{7, 11, 471}, + dictWord{7, 11, 1060}, + dictWord{9, 11, 447}, + dictWord{9, 11, 454}, + dictWord{141, 11, 6}, + dictWord{138, 11, 704}, + dictWord{133, 0, 865}, + dictWord{5, 0, 914}, + dictWord{134, 0, 1625}, + dictWord{133, 0, 234}, + dictWord{7, 0, 1383}, + dictWord{5, 11, 31}, + dictWord{6, 11, 614}, + dictWord{145, 11, 61}, + dictWord{7, 11, 1200}, + dictWord{138, 11, 460}, + dictWord{6, 11, 424}, + dictWord{135, 11, 1866}, + dictWord{136, 0, 306}, + dictWord{ + 5, + 10, + 959, + }, + dictWord{12, 11, 30}, + dictWord{13, 11, 148}, + dictWord{14, 11, 87}, + dictWord{14, 11, 182}, + dictWord{16, 11, 42}, + dictWord{18, 11, 92}, + dictWord{ + 148, + 11, + 70, + }, + dictWord{6, 0, 1919}, + dictWord{6, 0, 1921}, + dictWord{9, 0, 923}, + dictWord{9, 0, 930}, + dictWord{9, 0, 941}, + dictWord{9, 0, 949}, + dictWord{9, 0, 987}, + dictWord{ + 9, + 0, + 988, + }, + dictWord{9, 0, 992}, + dictWord{12, 0, 802}, + dictWord{12, 0, 815}, + dictWord{12, 0, 856}, + dictWord{12, 0, 885}, + dictWord{12, 0, 893}, + dictWord{ + 12, + 0, + 898, + }, + dictWord{12, 0, 919}, + dictWord{12, 0, 920}, + dictWord{12, 0, 941}, + dictWord{12, 0, 947}, + dictWord{15, 0, 183}, + dictWord{15, 0, 185}, + dictWord{15, 0, 189}, + dictWord{15, 0, 197}, + dictWord{15, 0, 202}, + dictWord{15, 0, 233}, + dictWord{18, 0, 218}, + dictWord{18, 0, 219}, + dictWord{18, 0, 233}, + dictWord{143, 11, 156}, + dictWord{135, 10, 1759}, + dictWord{136, 10, 173}, + dictWord{13, 0, 163}, + dictWord{13, 0, 180}, + dictWord{18, 0, 78}, + dictWord{20, 0, 35}, + dictWord{5, 11, 13}, + dictWord{134, 11, 142}, + dictWord{134, 10, 266}, + dictWord{6, 11, 97}, + dictWord{7, 11, 116}, + dictWord{8, 11, 322}, + dictWord{8, 11, 755}, + dictWord{9, 11, 548}, + dictWord{10, 11, 714}, + dictWord{11, 11, 884}, + dictWord{141, 11, 324}, + dictWord{135, 0, 1312}, + dictWord{9, 0, 814}, + dictWord{137, 11, 676}, + dictWord{ + 133, + 0, + 707, + }, + dictWord{135, 0, 1493}, + dictWord{6, 0, 421}, + dictWord{7, 0, 61}, + dictWord{7, 0, 1540}, + dictWord{10, 0, 11}, + dictWord{138, 0, 501}, + dictWord{12, 0, 733}, + dictWord{12, 0, 766}, + dictWord{7, 11, 866}, + dictWord{135, 11, 1163}, + dictWord{137, 0, 341}, + dictWord{142, 0, 98}, + dictWord{145, 11, 115}, + dictWord{ + 135, + 11, + 1111, + }, + dictWord{136, 10, 300}, + dictWord{136, 0, 1014}, + dictWord{8, 11, 1}, + dictWord{9, 11, 112}, + dictWord{138, 11, 326}, + dictWord{132, 11, 730}, + dictWord{5, 11, 488}, + dictWord{6, 11, 527}, + dictWord{7, 11, 489}, + dictWord{7, 11, 1636}, + dictWord{8, 11, 121}, + dictWord{8, 11, 144}, + dictWord{8, 11, 359}, + dictWord{ + 9, + 11, + 193, + }, + dictWord{9, 11, 241}, + dictWord{9, 11, 336}, + dictWord{9, 11, 882}, + dictWord{11, 11, 266}, + dictWord{11, 11, 372}, + dictWord{11, 11, 944}, + dictWord{ + 12, + 11, + 401, + }, + dictWord{140, 11, 641}, + dictWord{6, 0, 971}, + dictWord{134, 0, 1121}, + dictWord{6, 0, 102}, + dictWord{7, 0, 72}, + dictWord{15, 0, 142}, + dictWord{ + 147, + 0, + 67, + }, + dictWord{151, 0, 30}, + dictWord{135, 0, 823}, + dictWord{134, 0, 1045}, + dictWord{5, 10, 427}, + dictWord{5, 10, 734}, + dictWord{7, 10, 478}, + dictWord{ + 136, + 10, + 52, + }, + dictWord{7, 0, 1930}, + dictWord{11, 10, 217}, + dictWord{142, 10, 165}, + dictWord{6, 0, 1512}, + dictWord{135, 0, 1870}, + dictWord{9, 11, 31}, + dictWord{ + 10, + 11, + 244, + }, + dictWord{10, 11, 699}, + dictWord{12, 11, 149}, + dictWord{141, 11, 497}, + dictWord{133, 11, 377}, + dictWord{145, 11, 101}, + dictWord{ + 10, + 11, + 158, + }, + dictWord{13, 11, 13}, + dictWord{13, 11, 137}, + dictWord{13, 11, 258}, + dictWord{14, 11, 111}, + dictWord{14, 11, 225}, + dictWord{14, 11, 253}, + dictWord{ + 14, + 11, + 304, + }, + dictWord{14, 11, 339}, + dictWord{14, 11, 417}, + dictWord{146, 11, 33}, + dictWord{6, 0, 87}, + dictWord{6, 10, 1734}, + dictWord{7, 10, 20}, + dictWord{ + 7, + 10, + 1056, + }, + dictWord{8, 10, 732}, + dictWord{9, 10, 406}, + dictWord{9, 10, 911}, + dictWord{138, 10, 694}, + dictWord{134, 0, 1243}, + dictWord{137, 0, 245}, + dictWord{ + 7, + 0, + 68, + }, + dictWord{8, 0, 48}, + dictWord{8, 0, 88}, + dictWord{8, 0, 582}, + dictWord{8, 0, 681}, + dictWord{9, 0, 373}, + dictWord{9, 0, 864}, + dictWord{11, 0, 157}, + dictWord{ + 11, + 0, + 336, + }, + dictWord{11, 0, 843}, + dictWord{148, 0, 27}, + dictWord{8, 11, 663}, + dictWord{144, 11, 8}, + dictWord{133, 10, 613}, + dictWord{4, 0, 88}, + dictWord{ + 5, + 0, + 137, + }, + dictWord{5, 0, 174}, + dictWord{5, 0, 777}, + dictWord{6, 0, 1664}, + dictWord{6, 0, 1725}, + dictWord{7, 0, 77}, + dictWord{7, 0, 426}, + dictWord{7, 0, 1317}, + dictWord{ + 7, + 0, + 1355, + }, + dictWord{8, 0, 126}, + dictWord{8, 0, 563}, + dictWord{9, 0, 523}, + dictWord{9, 0, 750}, + dictWord{10, 0, 310}, + dictWord{10, 0, 836}, + dictWord{11, 0, 42}, + dictWord{11, 0, 318}, + dictWord{11, 0, 731}, + dictWord{12, 0, 68}, + dictWord{12, 0, 92}, + dictWord{12, 0, 507}, + dictWord{12, 0, 692}, + dictWord{13, 0, 81}, + dictWord{ + 13, + 0, + 238, + }, + dictWord{13, 0, 374}, + dictWord{14, 0, 436}, + dictWord{18, 0, 138}, + dictWord{19, 0, 78}, + dictWord{19, 0, 111}, + dictWord{20, 0, 55}, + dictWord{20, 0, 77}, + dictWord{148, 0, 92}, + dictWord{141, 0, 418}, + dictWord{4, 0, 938}, + dictWord{137, 0, 625}, + dictWord{138, 0, 351}, + dictWord{5, 11, 843}, + dictWord{7, 10, 32}, + dictWord{ + 7, + 10, + 984, + }, + dictWord{8, 10, 85}, + dictWord{8, 10, 709}, + dictWord{9, 10, 579}, + dictWord{9, 10, 847}, + dictWord{9, 10, 856}, + dictWord{10, 10, 799}, + dictWord{ + 11, + 10, + 258, + }, + dictWord{11, 10, 1007}, + dictWord{12, 10, 331}, + dictWord{12, 10, 615}, + dictWord{13, 10, 188}, + dictWord{13, 10, 435}, + dictWord{14, 10, 8}, + dictWord{ + 15, + 10, + 165, + }, + dictWord{16, 10, 27}, + dictWord{148, 10, 40}, + dictWord{6, 0, 1668}, + dictWord{7, 0, 1499}, + dictWord{8, 0, 117}, + dictWord{9, 0, 314}, + dictWord{ + 138, + 0, + 174, + }, + dictWord{135, 0, 707}, + dictWord{132, 11, 554}, + dictWord{133, 11, 536}, + dictWord{5, 0, 403}, + dictWord{5, 11, 207}, + dictWord{9, 11, 79}, + dictWord{ + 11, + 11, + 625, + }, + dictWord{145, 11, 7}, + dictWord{132, 11, 424}, + dictWord{136, 11, 785}, + dictWord{4, 10, 167}, + dictWord{135, 10, 82}, + dictWord{9, 0, 7}, + dictWord{ + 23, + 0, + 6, + }, + dictWord{9, 11, 7}, + dictWord{151, 11, 6}, + dictWord{6, 0, 282}, + dictWord{5, 10, 62}, + dictWord{6, 10, 534}, + dictWord{7, 10, 74}, + dictWord{7, 10, 678}, + dictWord{ + 7, + 10, + 684, + }, + dictWord{7, 10, 1043}, + dictWord{7, 10, 1072}, + dictWord{8, 10, 280}, + dictWord{8, 10, 541}, + dictWord{8, 10, 686}, + dictWord{9, 10, 258}, + dictWord{ + 10, + 10, + 519, + }, + dictWord{11, 10, 252}, + dictWord{140, 10, 282}, + dictWord{138, 10, 33}, + dictWord{132, 10, 359}, + dictWord{4, 0, 44}, + dictWord{5, 0, 311}, + dictWord{ + 6, + 0, + 156, + }, + dictWord{7, 0, 639}, + dictWord{7, 0, 762}, + dictWord{7, 0, 1827}, + dictWord{9, 0, 8}, + dictWord{9, 0, 462}, + dictWord{148, 0, 83}, + dictWord{7, 11, 769}, + dictWord{ + 9, + 11, + 18, + }, + dictWord{138, 11, 358}, + dictWord{4, 0, 346}, + dictWord{7, 0, 115}, + dictWord{9, 0, 180}, + dictWord{9, 0, 456}, + dictWord{10, 0, 363}, + dictWord{ + 4, + 11, + 896, + }, + dictWord{134, 11, 1777}, + dictWord{133, 10, 211}, + dictWord{7, 0, 761}, + dictWord{7, 0, 1051}, + dictWord{137, 0, 545}, + dictWord{6, 10, 145}, + dictWord{ + 141, + 10, + 336, + }, + dictWord{7, 11, 750}, + dictWord{9, 11, 223}, + dictWord{11, 11, 27}, + dictWord{11, 11, 466}, + dictWord{12, 11, 624}, + dictWord{14, 11, 265}, + dictWord{146, 11, 61}, + dictWord{6, 0, 752}, + dictWord{6, 0, 768}, + dictWord{6, 0, 1195}, + dictWord{6, 0, 1254}, + dictWord{6, 0, 1619}, + dictWord{137, 0, 835}, + dictWord{ + 6, + 0, + 1936, + }, + dictWord{8, 0, 930}, + dictWord{136, 0, 960}, + dictWord{132, 10, 263}, + dictWord{132, 11, 249}, + dictWord{12, 0, 653}, + dictWord{132, 10, 916}, + dictWord{4, 11, 603}, + dictWord{133, 11, 661}, + dictWord{8, 0, 344}, + dictWord{4, 11, 11}, + dictWord{6, 11, 128}, + dictWord{7, 11, 231}, + dictWord{7, 11, 1533}, + dictWord{138, 11, 725}, + dictWord{134, 0, 1483}, + dictWord{134, 0, 875}, + dictWord{6, 0, 185}, + dictWord{7, 0, 1899}, + dictWord{9, 0, 875}, + dictWord{139, 0, 673}, + dictWord{15, 10, 155}, + dictWord{144, 10, 79}, + dictWord{7, 0, 93}, + dictWord{7, 0, 210}, + dictWord{7, 0, 1223}, + dictWord{8, 0, 451}, + dictWord{8, 0, 460}, + dictWord{ + 11, + 0, + 353, + }, + dictWord{11, 0, 475}, + dictWord{4, 10, 599}, + dictWord{6, 10, 1634}, + dictWord{7, 10, 67}, + dictWord{7, 10, 691}, + dictWord{7, 10, 979}, + dictWord{ + 7, + 10, + 1697, + }, + dictWord{8, 10, 207}, + dictWord{8, 10, 214}, + dictWord{8, 10, 231}, + dictWord{8, 10, 294}, + dictWord{8, 10, 336}, + dictWord{8, 10, 428}, + dictWord{ + 8, + 10, + 471, + }, + dictWord{8, 10, 622}, + dictWord{8, 10, 626}, + dictWord{8, 10, 679}, + dictWord{8, 10, 759}, + dictWord{8, 10, 829}, + dictWord{9, 10, 11}, + dictWord{9, 10, 246}, + dictWord{9, 10, 484}, + dictWord{9, 10, 573}, + dictWord{9, 10, 706}, + dictWord{9, 10, 762}, + dictWord{9, 10, 798}, + dictWord{9, 10, 855}, + dictWord{9, 10, 870}, + dictWord{ + 9, + 10, + 912, + }, + dictWord{10, 10, 303}, + dictWord{10, 10, 335}, + dictWord{10, 10, 424}, + dictWord{10, 10, 461}, + dictWord{10, 10, 543}, + dictWord{10, 10, 759}, + dictWord{10, 10, 814}, + dictWord{11, 10, 59}, + dictWord{11, 10, 235}, + dictWord{11, 10, 590}, + dictWord{11, 10, 929}, + dictWord{11, 10, 963}, + dictWord{ + 11, + 10, + 987, + }, + dictWord{12, 10, 114}, + dictWord{12, 10, 182}, + dictWord{12, 10, 226}, + dictWord{12, 10, 332}, + dictWord{12, 10, 439}, + dictWord{12, 10, 575}, + dictWord{ + 12, + 10, + 598, + }, + dictWord{12, 10, 675}, + dictWord{13, 10, 8}, + dictWord{13, 10, 125}, + dictWord{13, 10, 194}, + dictWord{13, 10, 287}, + dictWord{14, 10, 197}, + dictWord{14, 10, 383}, + dictWord{15, 10, 53}, + dictWord{17, 10, 63}, + dictWord{19, 10, 46}, + dictWord{19, 10, 98}, + dictWord{19, 10, 106}, + dictWord{148, 10, 85}, + dictWord{132, 11, 476}, + dictWord{4, 0, 327}, + dictWord{5, 0, 478}, + dictWord{7, 0, 1332}, + dictWord{136, 0, 753}, + dictWord{5, 0, 1020}, + dictWord{133, 0, 1022}, + dictWord{135, 11, 1807}, + dictWord{4, 0, 103}, + dictWord{133, 0, 401}, + dictWord{4, 0, 499}, + dictWord{135, 0, 1421}, + dictWord{10, 0, 207}, + dictWord{13, 0, 164}, + dictWord{147, 10, 126}, + dictWord{9, 11, 20}, + dictWord{10, 11, 324}, + dictWord{139, 11, 488}, + dictWord{132, 0, 96}, + dictWord{9, 11, 280}, + dictWord{ + 138, + 11, + 134, + }, + dictWord{135, 0, 968}, + dictWord{133, 10, 187}, + dictWord{135, 10, 1286}, + dictWord{5, 11, 112}, + dictWord{6, 11, 103}, + dictWord{134, 11, 150}, + dictWord{8, 0, 914}, + dictWord{10, 0, 3}, + dictWord{4, 10, 215}, + dictWord{9, 10, 38}, + dictWord{11, 10, 23}, + dictWord{11, 10, 127}, + dictWord{139, 10, 796}, + dictWord{ + 135, + 0, + 399, + }, + dictWord{6, 0, 563}, + dictWord{137, 0, 224}, + dictWord{6, 0, 704}, + dictWord{134, 0, 1214}, + dictWord{4, 11, 708}, + dictWord{8, 11, 15}, + dictWord{ + 9, + 11, + 50, + }, + dictWord{9, 11, 386}, + dictWord{11, 11, 18}, + dictWord{11, 11, 529}, + dictWord{140, 11, 228}, + dictWord{4, 11, 563}, + dictWord{7, 11, 109}, + dictWord{ + 7, + 11, + 592, + }, + dictWord{7, 11, 637}, + dictWord{7, 11, 770}, + dictWord{7, 11, 1701}, + dictWord{8, 11, 436}, + dictWord{8, 11, 463}, + dictWord{9, 11, 60}, + dictWord{9, 11, 335}, + dictWord{9, 11, 904}, + dictWord{10, 11, 73}, + dictWord{11, 11, 434}, + dictWord{12, 11, 585}, + dictWord{13, 11, 331}, + dictWord{18, 11, 110}, + dictWord{ + 148, + 11, + 60, + }, + dictWord{134, 0, 1559}, + dictWord{132, 11, 502}, + dictWord{6, 11, 347}, + dictWord{138, 11, 161}, + dictWord{4, 11, 33}, + dictWord{5, 11, 102}, + dictWord{ + 5, + 11, + 500, + }, + dictWord{6, 11, 284}, + dictWord{7, 11, 1079}, + dictWord{7, 11, 1423}, + dictWord{7, 11, 1702}, + dictWord{8, 11, 470}, + dictWord{9, 11, 554}, + dictWord{ + 9, + 11, + 723, + }, + dictWord{139, 11, 333}, + dictWord{7, 11, 246}, + dictWord{135, 11, 840}, + dictWord{6, 11, 10}, + dictWord{8, 11, 571}, + dictWord{9, 11, 739}, + dictWord{ + 143, + 11, + 91, + }, + dictWord{8, 0, 861}, + dictWord{10, 0, 905}, + dictWord{12, 0, 730}, + dictWord{12, 0, 789}, + dictWord{133, 11, 626}, + dictWord{134, 0, 946}, + dictWord{ + 5, + 0, + 746, + }, + dictWord{12, 0, 333}, + dictWord{14, 0, 332}, + dictWord{12, 11, 333}, + dictWord{142, 11, 332}, + dictWord{5, 11, 18}, + dictWord{6, 11, 526}, + dictWord{ + 13, + 11, + 24, + }, + dictWord{13, 11, 110}, + dictWord{19, 11, 5}, + dictWord{147, 11, 44}, + dictWord{4, 0, 910}, + dictWord{5, 0, 832}, + dictWord{135, 10, 2002}, + dictWord{ + 10, + 11, + 768, + }, + dictWord{139, 11, 787}, + dictWord{4, 11, 309}, + dictWord{5, 11, 462}, + dictWord{7, 11, 970}, + dictWord{135, 11, 1097}, + dictWord{4, 10, 28}, + dictWord{ + 5, + 10, + 440, + }, + dictWord{7, 10, 248}, + dictWord{11, 10, 833}, + dictWord{140, 10, 344}, + dictWord{134, 10, 1654}, + dictWord{6, 0, 632}, + dictWord{6, 0, 652}, + dictWord{ + 6, + 0, + 1272, + }, + dictWord{6, 0, 1384}, + dictWord{134, 0, 1560}, + dictWord{134, 11, 1704}, + dictWord{6, 0, 1393}, + dictWord{133, 10, 853}, + dictWord{6, 10, 249}, + dictWord{7, 10, 1234}, + dictWord{139, 10, 573}, + dictWord{5, 11, 86}, + dictWord{7, 11, 743}, + dictWord{9, 11, 85}, + dictWord{10, 11, 281}, + dictWord{10, 11, 432}, + dictWord{11, 11, 490}, + dictWord{12, 11, 251}, + dictWord{13, 11, 118}, + dictWord{14, 11, 378}, + dictWord{146, 11, 143}, + dictWord{5, 11, 524}, + dictWord{ + 133, + 11, + 744, + }, + dictWord{134, 0, 1514}, + dictWord{10, 0, 201}, + dictWord{142, 0, 319}, + dictWord{7, 0, 717}, + dictWord{10, 0, 510}, + dictWord{7, 10, 392}, + dictWord{ + 8, + 10, + 20, + }, + dictWord{8, 10, 172}, + dictWord{8, 10, 690}, + dictWord{9, 10, 383}, + dictWord{9, 10, 845}, + dictWord{11, 10, 293}, + dictWord{11, 10, 832}, + dictWord{ + 11, + 10, + 920, + }, + dictWord{11, 10, 984}, + dictWord{141, 10, 221}, + dictWord{134, 0, 1381}, + dictWord{5, 10, 858}, + dictWord{133, 10, 992}, + dictWord{8, 0, 528}, + dictWord{137, 0, 348}, + dictWord{10, 11, 107}, + dictWord{140, 11, 436}, + dictWord{4, 0, 20}, + dictWord{133, 0, 616}, + dictWord{134, 0, 1251}, + dictWord{ + 132, + 11, + 927, + }, + dictWord{10, 11, 123}, + dictWord{12, 11, 670}, + dictWord{13, 11, 371}, + dictWord{14, 11, 142}, + dictWord{146, 11, 94}, + dictWord{134, 0, 1163}, + dictWord{ + 7, + 11, + 1149, + }, + dictWord{137, 11, 156}, + dictWord{134, 0, 307}, + dictWord{133, 11, 778}, + dictWord{7, 0, 1091}, + dictWord{135, 0, 1765}, + dictWord{ + 5, + 11, + 502, + }, + dictWord{6, 10, 268}, + dictWord{137, 10, 62}, + dictWord{8, 11, 196}, + dictWord{10, 11, 283}, + dictWord{139, 11, 406}, + dictWord{4, 0, 26}, + dictWord{ + 5, + 0, + 429, + }, + dictWord{6, 0, 245}, + dictWord{7, 0, 704}, + dictWord{7, 0, 1379}, + dictWord{135, 0, 1474}, + dictWord{133, 11, 855}, + dictWord{132, 0, 881}, + dictWord{ + 4, + 0, + 621, + }, + dictWord{135, 11, 1596}, + dictWord{7, 11, 1400}, + dictWord{9, 11, 446}, + dictWord{138, 11, 45}, + dictWord{6, 0, 736}, + dictWord{138, 10, 106}, + dictWord{133, 0, 542}, + dictWord{134, 0, 348}, + dictWord{133, 0, 868}, + dictWord{136, 0, 433}, + dictWord{135, 0, 1495}, + dictWord{138, 0, 771}, + dictWord{ + 6, + 10, + 613, + }, + dictWord{136, 10, 223}, + dictWord{138, 0, 215}, + dictWord{141, 0, 124}, + dictWord{136, 11, 391}, + dictWord{135, 11, 172}, + dictWord{132, 10, 670}, + dictWord{140, 0, 55}, + dictWord{9, 10, 40}, + dictWord{139, 10, 136}, + dictWord{7, 0, 62}, + dictWord{147, 0, 112}, + dictWord{132, 0, 856}, + dictWord{132, 11, 568}, + dictWord{12, 0, 270}, + dictWord{139, 10, 259}, + dictWord{8, 0, 572}, + dictWord{137, 0, 698}, + dictWord{4, 11, 732}, + dictWord{9, 10, 310}, + dictWord{137, 10, 682}, + dictWord{142, 10, 296}, + dictWord{134, 0, 939}, + dictWord{136, 11, 733}, + dictWord{135, 11, 1435}, + dictWord{7, 10, 1401}, + dictWord{135, 10, 1476}, + dictWord{6, 0, 352}, + dictWord{4, 10, 296}, + dictWord{7, 10, 401}, + dictWord{7, 10, 1410}, + dictWord{7, 10, 1594}, + dictWord{7, 10, 1674}, + dictWord{8, 10, 63}, + dictWord{ + 8, + 10, + 660, + }, + dictWord{137, 10, 74}, + dictWord{4, 11, 428}, + dictWord{133, 11, 668}, + dictWord{4, 10, 139}, + dictWord{4, 10, 388}, + dictWord{140, 10, 188}, + dictWord{7, 11, 2015}, + dictWord{140, 11, 665}, + dictWord{132, 0, 647}, + dictWord{146, 0, 10}, + dictWord{138, 0, 220}, + dictWord{142, 0, 464}, + dictWord{ + 132, + 0, + 109, + }, + dictWord{134, 0, 1746}, + dictWord{6, 0, 515}, + dictWord{4, 10, 747}, + dictWord{6, 11, 1623}, + dictWord{6, 11, 1681}, + dictWord{7, 10, 649}, + dictWord{ + 7, + 10, + 1479, + }, + dictWord{135, 10, 1583}, + dictWord{133, 10, 232}, + dictWord{135, 0, 566}, + dictWord{137, 10, 887}, + dictWord{4, 0, 40}, + dictWord{10, 0, 67}, + dictWord{ + 11, + 0, + 117, + }, + dictWord{11, 0, 768}, + dictWord{139, 0, 935}, + dictWord{132, 0, 801}, + dictWord{7, 0, 992}, + dictWord{8, 0, 301}, + dictWord{9, 0, 722}, + dictWord{ + 12, + 0, + 63, + }, + dictWord{13, 0, 29}, + dictWord{14, 0, 161}, + dictWord{143, 0, 18}, + dictWord{139, 0, 923}, + dictWord{6, 11, 1748}, + dictWord{8, 11, 715}, + dictWord{9, 11, 802}, + dictWord{10, 11, 46}, + dictWord{10, 11, 819}, + dictWord{13, 11, 308}, + dictWord{14, 11, 351}, + dictWord{14, 11, 363}, + dictWord{146, 11, 67}, + dictWord{ + 137, + 11, + 745, + }, + dictWord{7, 0, 1145}, + dictWord{4, 10, 14}, + dictWord{7, 10, 1801}, + dictWord{10, 10, 748}, + dictWord{141, 10, 458}, + dictWord{4, 11, 63}, + dictWord{ + 5, + 11, + 347, + }, + dictWord{134, 11, 474}, + dictWord{135, 0, 568}, + dictWord{4, 10, 425}, + dictWord{7, 11, 577}, + dictWord{7, 11, 1432}, + dictWord{9, 11, 475}, + dictWord{ + 9, + 11, + 505, + }, + dictWord{9, 11, 526}, + dictWord{9, 11, 609}, + dictWord{9, 11, 689}, + dictWord{9, 11, 726}, + dictWord{9, 11, 735}, + dictWord{9, 11, 738}, + dictWord{ + 10, + 11, + 556, + }, + dictWord{10, 11, 674}, + dictWord{10, 11, 684}, + dictWord{11, 11, 89}, + dictWord{11, 11, 202}, + dictWord{11, 11, 272}, + dictWord{11, 11, 380}, + dictWord{ + 11, + 11, + 415, + }, + dictWord{11, 11, 505}, + dictWord{11, 11, 537}, + dictWord{11, 11, 550}, + dictWord{11, 11, 562}, + dictWord{11, 11, 640}, + dictWord{11, 11, 667}, + dictWord{11, 11, 688}, + dictWord{11, 11, 847}, + dictWord{11, 11, 927}, + dictWord{11, 11, 930}, + dictWord{11, 11, 940}, + dictWord{12, 11, 144}, + dictWord{ + 12, + 11, + 325, + }, + dictWord{12, 11, 329}, + dictWord{12, 11, 389}, + dictWord{12, 11, 403}, + dictWord{12, 11, 451}, + dictWord{12, 11, 515}, + dictWord{12, 11, 604}, + dictWord{ + 12, + 11, + 616, + }, + dictWord{12, 11, 626}, + dictWord{13, 11, 66}, + dictWord{13, 11, 131}, + dictWord{13, 11, 167}, + dictWord{13, 11, 236}, + dictWord{13, 11, 368}, + dictWord{13, 11, 411}, + dictWord{13, 11, 434}, + dictWord{13, 11, 453}, + dictWord{13, 11, 461}, + dictWord{13, 11, 474}, + dictWord{14, 11, 59}, + dictWord{14, 11, 60}, + dictWord{14, 11, 139}, + dictWord{14, 11, 152}, + dictWord{14, 11, 276}, + dictWord{14, 11, 353}, + dictWord{14, 11, 402}, + dictWord{15, 11, 28}, + dictWord{ + 15, + 11, + 81, + }, + dictWord{15, 11, 123}, + dictWord{15, 11, 152}, + dictWord{18, 11, 136}, + dictWord{148, 11, 88}, + dictWord{137, 0, 247}, + dictWord{135, 11, 1622}, + dictWord{ + 9, + 11, + 544, + }, + dictWord{11, 11, 413}, + dictWord{144, 11, 25}, + dictWord{4, 0, 645}, + dictWord{7, 0, 825}, + dictWord{6, 10, 1768}, + dictWord{135, 11, 89}, + dictWord{140, 0, 328}, + dictWord{5, 10, 943}, + dictWord{134, 10, 1779}, + dictWord{134, 0, 1363}, + dictWord{5, 10, 245}, + dictWord{6, 10, 576}, + dictWord{7, 10, 582}, + dictWord{136, 10, 225}, + dictWord{134, 0, 1280}, + dictWord{5, 11, 824}, + dictWord{133, 11, 941}, + dictWord{7, 11, 440}, + dictWord{8, 11, 230}, + dictWord{ + 139, + 11, + 106, + }, + dictWord{5, 0, 28}, + dictWord{6, 0, 204}, + dictWord{10, 0, 320}, + dictWord{10, 0, 583}, + dictWord{13, 0, 502}, + dictWord{14, 0, 72}, + dictWord{14, 0, 274}, + dictWord{14, 0, 312}, + dictWord{14, 0, 344}, + dictWord{15, 0, 159}, + dictWord{16, 0, 62}, + dictWord{16, 0, 69}, + dictWord{17, 0, 30}, + dictWord{18, 0, 42}, + dictWord{ + 18, + 0, + 53, + }, + dictWord{18, 0, 84}, + dictWord{18, 0, 140}, + dictWord{19, 0, 68}, + dictWord{19, 0, 85}, + dictWord{20, 0, 5}, + dictWord{20, 0, 45}, + dictWord{20, 0, 101}, + dictWord{ + 22, + 0, + 7, + }, + dictWord{150, 0, 20}, + dictWord{4, 0, 558}, + dictWord{6, 0, 390}, + dictWord{7, 0, 162}, + dictWord{7, 0, 689}, + dictWord{9, 0, 360}, + dictWord{138, 0, 653}, + dictWord{134, 0, 764}, + dictWord{6, 0, 862}, + dictWord{137, 0, 833}, + dictWord{5, 0, 856}, + dictWord{6, 0, 1672}, + dictWord{6, 0, 1757}, + dictWord{134, 0, 1781}, + dictWord{ + 5, + 0, + 92, + }, + dictWord{10, 0, 736}, + dictWord{140, 0, 102}, + dictWord{6, 0, 1927}, + dictWord{6, 0, 1944}, + dictWord{8, 0, 924}, + dictWord{8, 0, 948}, + dictWord{ + 10, + 0, + 967, + }, + dictWord{138, 0, 978}, + dictWord{134, 0, 1479}, + dictWord{5, 0, 590}, + dictWord{8, 0, 360}, + dictWord{9, 0, 213}, + dictWord{138, 0, 63}, + dictWord{ + 134, + 0, + 1521, + }, + dictWord{6, 0, 709}, + dictWord{134, 0, 891}, + dictWord{132, 10, 443}, + dictWord{13, 0, 477}, + dictWord{14, 0, 120}, + dictWord{148, 0, 61}, + dictWord{ + 4, + 11, + 914, + }, + dictWord{5, 11, 800}, + dictWord{133, 11, 852}, + dictWord{10, 11, 54}, + dictWord{141, 11, 115}, + dictWord{4, 11, 918}, + dictWord{133, 11, 876}, + dictWord{139, 11, 152}, + dictWord{4, 11, 92}, + dictWord{133, 11, 274}, + dictWord{135, 11, 1901}, + dictWord{9, 11, 800}, + dictWord{10, 11, 693}, + dictWord{ + 11, + 11, + 482, + }, + dictWord{11, 11, 734}, + dictWord{139, 11, 789}, + dictWord{9, 0, 483}, + dictWord{132, 10, 298}, + dictWord{6, 0, 1213}, + dictWord{141, 11, 498}, + dictWord{135, 11, 1451}, + dictWord{133, 11, 743}, + dictWord{4, 0, 1022}, + dictWord{10, 0, 1000}, + dictWord{12, 0, 957}, + dictWord{12, 0, 980}, + dictWord{ + 12, + 0, + 1013, + }, + dictWord{14, 0, 481}, + dictWord{144, 0, 116}, + dictWord{8, 0, 503}, + dictWord{17, 0, 29}, + dictWord{4, 11, 49}, + dictWord{7, 11, 280}, + dictWord{ + 135, + 11, + 1633, + }, + dictWord{135, 0, 1712}, + dictWord{134, 0, 466}, + dictWord{136, 11, 47}, + dictWord{5, 10, 164}, + dictWord{7, 10, 121}, + dictWord{142, 10, 189}, + dictWord{ + 7, + 10, + 812, + }, + dictWord{7, 10, 1261}, + dictWord{7, 10, 1360}, + dictWord{9, 10, 632}, + dictWord{140, 10, 352}, + dictWord{139, 10, 556}, + dictWord{132, 0, 731}, + dictWord{5, 11, 272}, + dictWord{5, 11, 908}, + dictWord{5, 11, 942}, + dictWord{7, 11, 1008}, + dictWord{7, 11, 1560}, + dictWord{8, 11, 197}, + dictWord{9, 11, 47}, + dictWord{11, 11, 538}, + dictWord{139, 11, 742}, + dictWord{4, 10, 172}, + dictWord{9, 10, 611}, + dictWord{10, 10, 436}, + dictWord{12, 10, 673}, + dictWord{ + 141, + 10, + 255, + }, + dictWord{133, 10, 844}, + dictWord{10, 0, 484}, + dictWord{11, 0, 754}, + dictWord{12, 0, 457}, + dictWord{14, 0, 171}, + dictWord{14, 0, 389}, + dictWord{ + 146, + 0, + 153, + }, + dictWord{9, 10, 263}, + dictWord{10, 10, 147}, + dictWord{138, 10, 492}, + dictWord{137, 11, 891}, + dictWord{138, 0, 241}, + dictWord{133, 10, 537}, + dictWord{6, 0, 2005}, + dictWord{136, 0, 964}, + dictWord{137, 10, 842}, + dictWord{151, 11, 8}, + dictWord{4, 11, 407}, + dictWord{132, 11, 560}, + dictWord{ + 135, + 11, + 1884, + }, + dictWord{6, 0, 1100}, + dictWord{134, 0, 1242}, + dictWord{135, 0, 954}, + dictWord{5, 10, 230}, + dictWord{5, 10, 392}, + dictWord{6, 10, 420}, + dictWord{ + 9, + 10, + 568, + }, + dictWord{140, 10, 612}, + dictWord{4, 11, 475}, + dictWord{11, 11, 35}, + dictWord{11, 11, 90}, + dictWord{13, 11, 7}, + dictWord{13, 11, 71}, + dictWord{ + 13, + 11, + 177, + }, + dictWord{142, 11, 422}, + dictWord{136, 11, 332}, + dictWord{135, 0, 1958}, + dictWord{6, 0, 549}, + dictWord{8, 0, 34}, + dictWord{8, 0, 283}, + dictWord{ + 9, + 0, + 165, + }, + dictWord{138, 0, 475}, + dictWord{10, 0, 952}, + dictWord{12, 0, 966}, + dictWord{140, 0, 994}, + dictWord{5, 0, 652}, + dictWord{5, 0, 701}, + dictWord{ + 135, + 0, + 449, + }, + dictWord{4, 0, 655}, + dictWord{7, 0, 850}, + dictWord{17, 0, 75}, + dictWord{146, 0, 137}, + dictWord{4, 0, 146}, + dictWord{7, 0, 1618}, + dictWord{8, 0, 670}, + dictWord{ + 5, + 10, + 41, + }, + dictWord{7, 10, 1459}, + dictWord{7, 10, 1469}, + dictWord{7, 10, 1859}, + dictWord{9, 10, 549}, + dictWord{139, 10, 905}, + dictWord{133, 10, 696}, + dictWord{6, 0, 159}, + dictWord{6, 0, 364}, + dictWord{7, 0, 516}, + dictWord{137, 0, 518}, + dictWord{135, 0, 1439}, + dictWord{6, 11, 222}, + dictWord{7, 11, 636}, + dictWord{ + 7, + 11, + 1620, + }, + dictWord{8, 11, 409}, + dictWord{9, 11, 693}, + dictWord{139, 11, 77}, + dictWord{13, 0, 151}, + dictWord{141, 11, 45}, + dictWord{6, 0, 1027}, + dictWord{ + 4, + 11, + 336, + }, + dictWord{132, 10, 771}, + dictWord{139, 11, 392}, + dictWord{10, 11, 121}, + dictWord{11, 11, 175}, + dictWord{149, 11, 16}, + dictWord{8, 0, 950}, + dictWord{138, 0, 983}, + dictWord{133, 10, 921}, + dictWord{135, 0, 993}, + dictWord{6, 10, 180}, + dictWord{7, 10, 1137}, + dictWord{8, 10, 751}, + dictWord{ + 139, + 10, + 805, + }, + dictWord{7, 0, 501}, + dictWord{9, 0, 111}, + dictWord{10, 0, 141}, + dictWord{11, 0, 332}, + dictWord{13, 0, 43}, + dictWord{13, 0, 429}, + dictWord{14, 0, 130}, + dictWord{14, 0, 415}, + dictWord{145, 0, 102}, + dictWord{4, 10, 183}, + dictWord{5, 11, 882}, + dictWord{7, 10, 271}, + dictWord{11, 10, 824}, + dictWord{11, 10, 952}, + dictWord{13, 10, 278}, + dictWord{13, 10, 339}, + dictWord{13, 10, 482}, + dictWord{14, 10, 424}, + dictWord{148, 10, 99}, + dictWord{4, 10, 19}, + dictWord{5, 10, 477}, + dictWord{5, 10, 596}, + dictWord{6, 10, 505}, + dictWord{7, 10, 1221}, + dictWord{11, 10, 907}, + dictWord{12, 10, 209}, + dictWord{141, 10, 214}, + dictWord{ + 135, + 10, + 1215, + }, + dictWord{133, 0, 452}, + dictWord{132, 11, 426}, + dictWord{5, 0, 149}, + dictWord{136, 0, 233}, + dictWord{133, 0, 935}, + dictWord{6, 11, 58}, + dictWord{ + 7, + 11, + 654, + }, + dictWord{7, 11, 745}, + dictWord{7, 11, 1969}, + dictWord{8, 11, 240}, + dictWord{8, 11, 675}, + dictWord{9, 11, 479}, + dictWord{9, 11, 731}, + dictWord{ + 10, + 11, + 330, + }, + dictWord{10, 11, 593}, + dictWord{10, 11, 817}, + dictWord{11, 11, 32}, + dictWord{11, 11, 133}, + dictWord{11, 11, 221}, + dictWord{145, 11, 68}, + dictWord{ + 12, + 0, + 582, + }, + dictWord{18, 0, 131}, + dictWord{7, 11, 102}, + dictWord{137, 11, 538}, + dictWord{136, 0, 801}, + dictWord{134, 10, 1645}, + dictWord{132, 0, 70}, + dictWord{6, 10, 92}, + dictWord{6, 10, 188}, + dictWord{7, 10, 1269}, + dictWord{7, 10, 1524}, + dictWord{7, 10, 1876}, + dictWord{10, 10, 228}, + dictWord{139, 10, 1020}, + dictWord{4, 10, 459}, + dictWord{133, 10, 966}, + dictWord{138, 0, 369}, + dictWord{16, 0, 36}, + dictWord{140, 10, 330}, + dictWord{141, 11, 366}, + dictWord{ + 7, + 0, + 721, + }, + dictWord{10, 0, 236}, + dictWord{12, 0, 204}, + dictWord{6, 10, 18}, + dictWord{7, 10, 932}, + dictWord{8, 10, 757}, + dictWord{9, 10, 54}, + dictWord{9, 10, 65}, + dictWord{9, 10, 844}, + dictWord{10, 10, 113}, + dictWord{10, 10, 315}, + dictWord{10, 10, 798}, + dictWord{11, 10, 153}, + dictWord{12, 10, 151}, + dictWord{12, 10, 392}, + dictWord{12, 10, 666}, + dictWord{142, 10, 248}, + dictWord{7, 0, 241}, + dictWord{10, 0, 430}, + dictWord{8, 10, 548}, + dictWord{9, 10, 532}, + dictWord{10, 10, 117}, + dictWord{11, 10, 351}, + dictWord{11, 10, 375}, + dictWord{143, 10, 23}, + dictWord{134, 10, 1742}, + dictWord{133, 10, 965}, + dictWord{133, 11, 566}, + dictWord{ + 6, + 11, + 48, + }, + dictWord{135, 11, 63}, + dictWord{134, 10, 182}, + dictWord{10, 10, 65}, + dictWord{10, 10, 488}, + dictWord{138, 10, 497}, + dictWord{6, 11, 114}, + dictWord{7, 11, 1224}, + dictWord{7, 11, 1556}, + dictWord{136, 11, 3}, + dictWord{134, 0, 1817}, + dictWord{8, 11, 576}, + dictWord{137, 11, 267}, + dictWord{ + 6, + 0, + 1078, + }, + dictWord{144, 0, 16}, + dictWord{9, 10, 588}, + dictWord{138, 10, 260}, + dictWord{138, 0, 1021}, + dictWord{5, 0, 406}, + dictWord{134, 0, 2022}, + dictWord{133, 11, 933}, + dictWord{6, 0, 69}, + dictWord{135, 0, 117}, + dictWord{7, 0, 1830}, + dictWord{136, 11, 427}, + dictWord{4, 0, 432}, + dictWord{135, 0, 824}, + dictWord{134, 10, 1786}, + dictWord{133, 0, 826}, + dictWord{139, 11, 67}, + dictWord{133, 11, 759}, + dictWord{135, 10, 308}, + dictWord{137, 0, 816}, + dictWord{ + 133, + 0, + 1000, + }, + dictWord{4, 0, 297}, + dictWord{6, 0, 529}, + dictWord{7, 0, 152}, + dictWord{7, 0, 713}, + dictWord{7, 0, 1845}, + dictWord{8, 0, 710}, + dictWord{8, 0, 717}, + dictWord{12, 0, 639}, + dictWord{140, 0, 685}, + dictWord{7, 0, 423}, + dictWord{136, 10, 588}, + dictWord{136, 10, 287}, + dictWord{136, 0, 510}, + dictWord{ + 134, + 0, + 1048, + }, + dictWord{6, 0, 618}, + dictWord{7, 11, 56}, + dictWord{7, 11, 1989}, + dictWord{8, 11, 337}, + dictWord{8, 11, 738}, + dictWord{9, 11, 600}, + dictWord{ + 10, + 11, + 483, + }, + dictWord{12, 11, 37}, + dictWord{13, 11, 447}, + dictWord{142, 11, 92}, + dictWord{4, 0, 520}, + dictWord{135, 0, 575}, + dictWord{8, 0, 990}, + dictWord{ + 138, + 0, + 977, + }, + dictWord{135, 11, 774}, + dictWord{9, 11, 347}, + dictWord{11, 11, 24}, + dictWord{140, 11, 170}, + dictWord{136, 11, 379}, + dictWord{140, 10, 290}, + dictWord{132, 11, 328}, + dictWord{4, 0, 321}, + dictWord{134, 0, 569}, + dictWord{4, 11, 101}, + dictWord{135, 11, 1171}, + dictWord{7, 0, 723}, + dictWord{7, 0, 1135}, + dictWord{5, 11, 833}, + dictWord{136, 11, 744}, + dictWord{7, 10, 719}, + dictWord{8, 10, 809}, + dictWord{136, 10, 834}, + dictWord{8, 0, 921}, + dictWord{136, 10, 796}, + dictWord{5, 10, 210}, + dictWord{6, 10, 213}, + dictWord{7, 10, 60}, + dictWord{10, 10, 364}, + dictWord{139, 10, 135}, + dictWord{5, 0, 397}, + dictWord{6, 0, 154}, + dictWord{7, 0, 676}, + dictWord{8, 0, 443}, + dictWord{8, 0, 609}, + dictWord{9, 0, 24}, + dictWord{9, 0, 325}, + dictWord{10, 0, 35}, + dictWord{11, 0, 535}, + dictWord{11, 0, 672}, + dictWord{11, 0, 1018}, + dictWord{12, 0, 637}, + dictWord{16, 0, 30}, + dictWord{5, 10, 607}, + dictWord{8, 10, 326}, + dictWord{136, 10, 490}, + dictWord{4, 10, 701}, + dictWord{5, 10, 472}, + dictWord{6, 11, 9}, + dictWord{6, 11, 397}, + dictWord{7, 11, 53}, + dictWord{7, 11, 1742}, + dictWord{9, 10, 758}, + dictWord{10, 11, 632}, + dictWord{ + 11, + 11, + 828, + }, + dictWord{140, 11, 146}, + dictWord{135, 10, 380}, + dictWord{135, 10, 1947}, + dictWord{148, 11, 109}, + dictWord{10, 10, 278}, + dictWord{ + 138, + 11, + 278, + }, + dictWord{134, 0, 856}, + dictWord{7, 0, 139}, + dictWord{4, 10, 386}, + dictWord{8, 10, 405}, + dictWord{8, 10, 728}, + dictWord{9, 10, 497}, + dictWord{ + 11, + 10, + 110, + }, + dictWord{11, 10, 360}, + dictWord{15, 10, 37}, + dictWord{144, 10, 84}, + dictWord{141, 0, 282}, + dictWord{133, 0, 981}, + dictWord{5, 0, 288}, + dictWord{ + 7, + 10, + 1452, + }, + dictWord{7, 10, 1480}, + dictWord{8, 10, 634}, + dictWord{140, 10, 472}, + dictWord{7, 0, 1890}, + dictWord{8, 11, 367}, + dictWord{10, 11, 760}, + dictWord{ + 14, + 11, + 79, + }, + dictWord{20, 11, 17}, + dictWord{152, 11, 0}, + dictWord{4, 10, 524}, + dictWord{136, 10, 810}, + dictWord{4, 0, 56}, + dictWord{7, 0, 1791}, + dictWord{ + 8, + 0, + 607, + }, + dictWord{8, 0, 651}, + dictWord{11, 0, 465}, + dictWord{11, 0, 835}, + dictWord{12, 0, 337}, + dictWord{141, 0, 480}, + dictWord{10, 10, 238}, + dictWord{ + 141, + 10, + 33, + }, + dictWord{11, 11, 417}, + dictWord{12, 11, 223}, + dictWord{140, 11, 265}, + dictWord{9, 0, 158}, + dictWord{10, 0, 411}, + dictWord{140, 0, 261}, + dictWord{ + 133, + 10, + 532, + }, + dictWord{133, 10, 997}, + dictWord{12, 11, 186}, + dictWord{12, 11, 292}, + dictWord{14, 11, 100}, + dictWord{146, 11, 70}, + dictWord{6, 0, 1403}, + dictWord{136, 0, 617}, + dictWord{134, 0, 1205}, + dictWord{139, 0, 563}, + dictWord{4, 0, 242}, + dictWord{134, 0, 333}, + dictWord{4, 11, 186}, + dictWord{5, 11, 157}, + dictWord{8, 11, 168}, + dictWord{138, 11, 6}, + dictWord{132, 0, 369}, + dictWord{133, 11, 875}, + dictWord{5, 10, 782}, + dictWord{5, 10, 829}, + dictWord{ + 134, + 10, + 1738, + }, + dictWord{134, 0, 622}, + dictWord{135, 11, 1272}, + dictWord{6, 0, 1407}, + dictWord{7, 11, 111}, + dictWord{136, 11, 581}, + dictWord{7, 10, 1823}, + dictWord{139, 10, 693}, + dictWord{7, 0, 160}, + dictWord{10, 0, 624}, + dictWord{142, 0, 279}, + dictWord{132, 0, 363}, + dictWord{10, 11, 589}, + dictWord{12, 11, 111}, + dictWord{13, 11, 260}, + dictWord{14, 11, 82}, + dictWord{18, 11, 63}, + dictWord{147, 11, 45}, + dictWord{7, 11, 1364}, + dictWord{7, 11, 1907}, + dictWord{ + 141, + 11, + 158, + }, + dictWord{4, 11, 404}, + dictWord{4, 11, 659}, + dictWord{135, 11, 675}, + dictWord{13, 11, 211}, + dictWord{14, 11, 133}, + dictWord{14, 11, 204}, + dictWord{ + 15, + 11, + 64, + }, + dictWord{15, 11, 69}, + dictWord{15, 11, 114}, + dictWord{16, 11, 10}, + dictWord{19, 11, 23}, + dictWord{19, 11, 35}, + dictWord{19, 11, 39}, + dictWord{ + 19, + 11, + 51, + }, + dictWord{19, 11, 71}, + dictWord{19, 11, 75}, + dictWord{152, 11, 15}, + dictWord{4, 10, 78}, + dictWord{5, 10, 96}, + dictWord{5, 10, 182}, + dictWord{7, 10, 1724}, + dictWord{7, 10, 1825}, + dictWord{10, 10, 394}, + dictWord{10, 10, 471}, + dictWord{11, 10, 532}, + dictWord{14, 10, 340}, + dictWord{145, 10, 88}, + dictWord{ + 135, + 10, + 1964, + }, + dictWord{133, 11, 391}, + dictWord{11, 11, 887}, + dictWord{14, 11, 365}, + dictWord{142, 11, 375}, + dictWord{5, 11, 540}, + dictWord{6, 11, 1697}, + dictWord{7, 11, 222}, + dictWord{136, 11, 341}, + dictWord{134, 11, 78}, + dictWord{9, 0, 601}, + dictWord{9, 0, 619}, + dictWord{10, 0, 505}, + dictWord{10, 0, 732}, + dictWord{11, 0, 355}, + dictWord{140, 0, 139}, + dictWord{134, 0, 292}, + dictWord{139, 0, 174}, + dictWord{5, 0, 177}, + dictWord{6, 0, 616}, + dictWord{7, 0, 827}, + dictWord{ + 9, + 0, + 525, + }, + dictWord{138, 0, 656}, + dictWord{10, 0, 31}, + dictWord{6, 10, 215}, + dictWord{7, 10, 1028}, + dictWord{7, 10, 1473}, + dictWord{7, 10, 1721}, + dictWord{ + 9, + 10, + 424, + }, + dictWord{138, 10, 779}, + dictWord{135, 10, 584}, + dictWord{136, 11, 293}, + dictWord{134, 0, 685}, + dictWord{135, 11, 1868}, + dictWord{ + 133, + 11, + 460, + }, + dictWord{7, 0, 647}, + dictWord{6, 10, 67}, + dictWord{7, 10, 1630}, + dictWord{9, 10, 354}, + dictWord{9, 10, 675}, + dictWord{10, 10, 830}, + dictWord{ + 14, + 10, + 80, + }, + dictWord{145, 10, 80}, + dictWord{4, 0, 161}, + dictWord{133, 0, 631}, + dictWord{6, 10, 141}, + dictWord{7, 10, 225}, + dictWord{9, 10, 59}, + dictWord{9, 10, 607}, + dictWord{10, 10, 312}, + dictWord{11, 10, 687}, + dictWord{12, 10, 555}, + dictWord{13, 10, 373}, + dictWord{13, 10, 494}, + dictWord{148, 10, 58}, + dictWord{ + 7, + 11, + 965, + }, + dictWord{7, 11, 1460}, + dictWord{135, 11, 1604}, + dictWord{136, 10, 783}, + dictWord{134, 11, 388}, + dictWord{6, 0, 722}, + dictWord{6, 0, 1267}, + dictWord{ + 4, + 11, + 511, + }, + dictWord{9, 11, 333}, + dictWord{9, 11, 379}, + dictWord{10, 11, 602}, + dictWord{11, 11, 441}, + dictWord{11, 11, 723}, + dictWord{11, 11, 976}, + dictWord{140, 11, 357}, + dictWord{134, 0, 1797}, + dictWord{135, 0, 1684}, + dictWord{9, 0, 469}, + dictWord{9, 0, 709}, + dictWord{12, 0, 512}, + dictWord{14, 0, 65}, + dictWord{17, 0, 12}, + dictWord{5, 11, 938}, + dictWord{136, 11, 707}, + dictWord{7, 0, 1230}, + dictWord{136, 0, 531}, + dictWord{10, 0, 229}, + dictWord{11, 0, 73}, + dictWord{ + 11, + 0, + 376, + }, + dictWord{139, 0, 433}, + dictWord{12, 0, 268}, + dictWord{12, 0, 640}, + dictWord{142, 0, 119}, + dictWord{7, 10, 430}, + dictWord{139, 10, 46}, + dictWord{ + 6, + 0, + 558, + }, + dictWord{7, 0, 651}, + dictWord{8, 0, 421}, + dictWord{9, 0, 0}, + dictWord{10, 0, 34}, + dictWord{139, 0, 1008}, + dictWord{6, 0, 106}, + dictWord{7, 0, 1786}, + dictWord{7, 0, 1821}, + dictWord{9, 0, 102}, + dictWord{9, 0, 763}, + dictWord{5, 10, 602}, + dictWord{7, 10, 2018}, + dictWord{137, 10, 418}, + dictWord{5, 0, 65}, + dictWord{ + 6, + 0, + 416, + }, + dictWord{7, 0, 1720}, + dictWord{7, 0, 1924}, + dictWord{10, 0, 109}, + dictWord{11, 0, 14}, + dictWord{11, 0, 70}, + dictWord{11, 0, 569}, + dictWord{11, 0, 735}, + dictWord{15, 0, 153}, + dictWord{20, 0, 80}, + dictWord{136, 10, 677}, + dictWord{135, 11, 1625}, + dictWord{137, 11, 772}, + dictWord{136, 0, 595}, + dictWord{ + 6, + 11, + 469, + }, + dictWord{7, 11, 1709}, + dictWord{138, 11, 515}, + dictWord{7, 0, 1832}, + dictWord{138, 0, 374}, + dictWord{9, 0, 106}, + dictWord{9, 0, 163}, + dictWord{ + 9, + 0, + 296, + }, + dictWord{10, 0, 167}, + dictWord{10, 0, 172}, + dictWord{10, 0, 777}, + dictWord{139, 0, 16}, + dictWord{6, 0, 6}, + dictWord{7, 0, 81}, + dictWord{7, 0, 771}, + dictWord{ + 7, + 0, + 1731, + }, + dictWord{9, 0, 405}, + dictWord{138, 0, 421}, + dictWord{4, 11, 500}, + dictWord{135, 11, 938}, + dictWord{5, 11, 68}, + dictWord{134, 11, 383}, + dictWord{ + 5, + 0, + 881, + }, + dictWord{133, 0, 885}, + dictWord{6, 0, 854}, + dictWord{6, 0, 1132}, + dictWord{6, 0, 1495}, + dictWord{6, 0, 1526}, + dictWord{6, 0, 1533}, + dictWord{ + 134, + 0, + 1577, + }, + dictWord{4, 11, 337}, + dictWord{6, 11, 353}, + dictWord{7, 11, 1934}, + dictWord{8, 11, 488}, + dictWord{137, 11, 429}, + dictWord{7, 11, 236}, + dictWord{ + 7, + 11, + 1795, + }, + dictWord{8, 11, 259}, + dictWord{9, 11, 135}, + dictWord{9, 11, 177}, + dictWord{10, 11, 825}, + dictWord{11, 11, 115}, + dictWord{11, 11, 370}, + dictWord{ + 11, + 11, + 405, + }, + dictWord{11, 11, 604}, + dictWord{12, 11, 10}, + dictWord{12, 11, 667}, + dictWord{12, 11, 669}, + dictWord{13, 11, 76}, + dictWord{14, 11, 310}, + dictWord{15, 11, 76}, + dictWord{15, 11, 147}, + dictWord{148, 11, 23}, + dictWord{5, 0, 142}, + dictWord{134, 0, 546}, + dictWord{4, 11, 15}, + dictWord{5, 11, 22}, + dictWord{ + 6, + 11, + 244, + }, + dictWord{7, 11, 40}, + dictWord{7, 11, 200}, + dictWord{7, 11, 906}, + dictWord{7, 11, 1199}, + dictWord{9, 11, 616}, + dictWord{10, 11, 716}, + dictWord{ + 11, + 11, + 635, + }, + dictWord{11, 11, 801}, + dictWord{140, 11, 458}, + dictWord{5, 0, 466}, + dictWord{11, 0, 571}, + dictWord{12, 0, 198}, + dictWord{13, 0, 283}, + dictWord{ + 14, + 0, + 186, + }, + dictWord{15, 0, 21}, + dictWord{15, 0, 103}, + dictWord{135, 10, 329}, + dictWord{4, 0, 185}, + dictWord{5, 0, 257}, + dictWord{5, 0, 839}, + dictWord{5, 0, 936}, + dictWord{9, 0, 399}, + dictWord{10, 0, 258}, + dictWord{10, 0, 395}, + dictWord{10, 0, 734}, + dictWord{11, 0, 1014}, + dictWord{12, 0, 23}, + dictWord{13, 0, 350}, + dictWord{ + 14, + 0, + 150, + }, + dictWord{19, 0, 6}, + dictWord{135, 11, 1735}, + dictWord{12, 11, 36}, + dictWord{141, 11, 337}, + dictWord{5, 11, 598}, + dictWord{7, 11, 791}, + dictWord{ + 8, + 11, + 108, + }, + dictWord{137, 11, 123}, + dictWord{132, 10, 469}, + dictWord{7, 0, 404}, + dictWord{7, 0, 1377}, + dictWord{7, 0, 1430}, + dictWord{7, 0, 2017}, + dictWord{ + 8, + 0, + 149, + }, + dictWord{8, 0, 239}, + dictWord{8, 0, 512}, + dictWord{8, 0, 793}, + dictWord{8, 0, 818}, + dictWord{9, 0, 474}, + dictWord{9, 0, 595}, + dictWord{10, 0, 122}, + dictWord{10, 0, 565}, + dictWord{10, 0, 649}, + dictWord{10, 0, 783}, + dictWord{11, 0, 239}, + dictWord{11, 0, 295}, + dictWord{11, 0, 447}, + dictWord{11, 0, 528}, + dictWord{ + 11, + 0, + 639, + }, + dictWord{11, 0, 800}, + dictWord{12, 0, 25}, + dictWord{12, 0, 77}, + dictWord{12, 0, 157}, + dictWord{12, 0, 256}, + dictWord{12, 0, 316}, + dictWord{12, 0, 390}, + dictWord{12, 0, 391}, + dictWord{12, 0, 395}, + dictWord{12, 0, 478}, + dictWord{12, 0, 503}, + dictWord{12, 0, 592}, + dictWord{12, 0, 680}, + dictWord{13, 0, 50}, + dictWord{13, 0, 53}, + dictWord{13, 0, 132}, + dictWord{13, 0, 198}, + dictWord{13, 0, 322}, + dictWord{13, 0, 415}, + dictWord{13, 0, 511}, + dictWord{14, 0, 71}, + dictWord{ + 14, + 0, + 395, + }, + dictWord{15, 0, 71}, + dictWord{15, 0, 136}, + dictWord{17, 0, 123}, + dictWord{18, 0, 93}, + dictWord{147, 0, 58}, + dictWord{136, 0, 712}, + dictWord{ + 134, + 10, + 1743, + }, + dictWord{5, 10, 929}, + dictWord{6, 10, 340}, + dictWord{8, 10, 376}, + dictWord{136, 10, 807}, + dictWord{6, 0, 1848}, + dictWord{8, 0, 860}, + dictWord{ + 10, + 0, + 856, + }, + dictWord{10, 0, 859}, + dictWord{10, 0, 925}, + dictWord{10, 0, 941}, + dictWord{140, 0, 762}, + dictWord{6, 0, 629}, + dictWord{6, 0, 906}, + dictWord{9, 0, 810}, + dictWord{140, 0, 652}, + dictWord{5, 10, 218}, + dictWord{7, 10, 1610}, + dictWord{138, 10, 83}, + dictWord{7, 10, 1512}, + dictWord{135, 10, 1794}, + dictWord{ + 4, + 0, + 377, + }, + dictWord{24, 0, 13}, + dictWord{4, 11, 155}, + dictWord{7, 11, 1689}, + dictWord{11, 10, 0}, + dictWord{144, 10, 78}, + dictWord{4, 11, 164}, + dictWord{5, 11, 151}, + dictWord{5, 11, 730}, + dictWord{5, 11, 741}, + dictWord{7, 11, 498}, + dictWord{7, 11, 870}, + dictWord{7, 11, 1542}, + dictWord{12, 11, 213}, + dictWord{14, 11, 36}, + dictWord{14, 11, 391}, + dictWord{17, 11, 111}, + dictWord{18, 11, 6}, + dictWord{18, 11, 46}, + dictWord{18, 11, 151}, + dictWord{19, 11, 36}, + dictWord{20, 11, 32}, + dictWord{20, 11, 56}, + dictWord{20, 11, 69}, + dictWord{20, 11, 102}, + dictWord{21, 11, 4}, + dictWord{22, 11, 8}, + dictWord{22, 11, 10}, + dictWord{22, 11, 14}, + dictWord{ + 150, + 11, + 31, + }, + dictWord{7, 0, 1842}, + dictWord{133, 10, 571}, + dictWord{4, 10, 455}, + dictWord{4, 11, 624}, + dictWord{135, 11, 1752}, + dictWord{134, 0, 1501}, + dictWord{4, 11, 492}, + dictWord{5, 11, 451}, + dictWord{6, 10, 161}, + dictWord{7, 10, 372}, + dictWord{137, 10, 597}, + dictWord{132, 10, 349}, + dictWord{4, 0, 180}, + dictWord{135, 0, 1906}, + dictWord{135, 11, 835}, + dictWord{141, 11, 70}, + dictWord{132, 0, 491}, + dictWord{137, 10, 751}, + dictWord{6, 10, 432}, + dictWord{ + 139, + 10, + 322, + }, + dictWord{4, 0, 171}, + dictWord{138, 0, 234}, + dictWord{6, 11, 113}, + dictWord{135, 11, 436}, + dictWord{4, 0, 586}, + dictWord{7, 0, 1186}, + dictWord{ + 138, + 0, + 631, + }, + dictWord{5, 10, 468}, + dictWord{10, 10, 325}, + dictWord{11, 10, 856}, + dictWord{12, 10, 345}, + dictWord{143, 10, 104}, + dictWord{5, 10, 223}, + dictWord{10, 11, 592}, + dictWord{10, 11, 753}, + dictWord{12, 11, 317}, + dictWord{12, 11, 355}, + dictWord{12, 11, 465}, + dictWord{12, 11, 469}, + dictWord{ + 12, + 11, + 560, + }, + dictWord{12, 11, 578}, + dictWord{141, 11, 243}, + dictWord{132, 10, 566}, + dictWord{135, 11, 520}, + dictWord{4, 10, 59}, + dictWord{135, 10, 1394}, + dictWord{6, 10, 436}, + dictWord{139, 10, 481}, + dictWord{9, 0, 931}, + dictWord{10, 0, 334}, + dictWord{20, 0, 71}, + dictWord{4, 10, 48}, + dictWord{5, 10, 271}, + dictWord{ + 7, + 10, + 953, + }, + dictWord{135, 11, 1878}, + dictWord{11, 0, 170}, + dictWord{5, 10, 610}, + dictWord{136, 10, 457}, + dictWord{133, 10, 755}, + dictWord{6, 0, 1587}, + dictWord{135, 10, 1217}, + dictWord{4, 10, 197}, + dictWord{149, 11, 26}, + dictWord{133, 11, 585}, + dictWord{137, 11, 521}, + dictWord{133, 0, 765}, + dictWord{ + 133, + 10, + 217, + }, + dictWord{139, 11, 586}, + dictWord{133, 0, 424}, + dictWord{9, 11, 752}, + dictWord{12, 11, 610}, + dictWord{13, 11, 431}, + dictWord{16, 11, 59}, + dictWord{146, 11, 109}, + dictWord{136, 0, 714}, + dictWord{7, 0, 685}, + dictWord{132, 11, 307}, + dictWord{9, 0, 420}, + dictWord{10, 0, 269}, + dictWord{10, 0, 285}, + dictWord{10, 0, 576}, + dictWord{11, 0, 397}, + dictWord{13, 0, 175}, + dictWord{145, 0, 90}, + dictWord{132, 0, 429}, + dictWord{133, 11, 964}, + dictWord{9, 11, 463}, + dictWord{138, 11, 595}, + dictWord{7, 0, 18}, + dictWord{7, 0, 699}, + dictWord{7, 0, 1966}, + dictWord{8, 0, 752}, + dictWord{9, 0, 273}, + dictWord{9, 0, 412}, + dictWord{ + 9, + 0, + 703, + }, + dictWord{10, 0, 71}, + dictWord{10, 0, 427}, + dictWord{138, 0, 508}, + dictWord{4, 10, 165}, + dictWord{7, 10, 1398}, + dictWord{135, 10, 1829}, + dictWord{ + 4, + 0, + 53, + }, + dictWord{5, 0, 186}, + dictWord{7, 0, 752}, + dictWord{7, 0, 828}, + dictWord{142, 0, 116}, + dictWord{8, 0, 575}, + dictWord{10, 0, 289}, + dictWord{139, 0, 319}, + dictWord{132, 0, 675}, + dictWord{134, 0, 1424}, + dictWord{4, 11, 75}, + dictWord{5, 11, 180}, + dictWord{6, 11, 500}, + dictWord{7, 11, 58}, + dictWord{7, 11, 710}, + dictWord{138, 11, 645}, + dictWord{133, 11, 649}, + dictWord{6, 11, 276}, + dictWord{7, 11, 282}, + dictWord{7, 11, 879}, + dictWord{7, 11, 924}, + dictWord{8, 11, 459}, + dictWord{9, 11, 599}, + dictWord{9, 11, 754}, + dictWord{11, 11, 574}, + dictWord{12, 11, 128}, + dictWord{12, 11, 494}, + dictWord{13, 11, 52}, + dictWord{13, 11, 301}, + dictWord{15, 11, 30}, + dictWord{143, 11, 132}, + dictWord{6, 0, 647}, + dictWord{134, 0, 1095}, + dictWord{5, 10, 9}, + dictWord{7, 10, 297}, + dictWord{7, 10, 966}, + dictWord{140, 10, 306}, + dictWord{132, 11, 200}, + dictWord{134, 0, 1334}, + dictWord{5, 10, 146}, + dictWord{6, 10, 411}, + dictWord{138, 10, 721}, + dictWord{ + 6, + 0, + 209, + }, + dictWord{6, 0, 1141}, + dictWord{6, 0, 1288}, + dictWord{8, 0, 468}, + dictWord{9, 0, 210}, + dictWord{11, 0, 36}, + dictWord{12, 0, 28}, + dictWord{12, 0, 630}, + dictWord{13, 0, 21}, + dictWord{13, 0, 349}, + dictWord{14, 0, 7}, + dictWord{145, 0, 13}, + dictWord{6, 10, 177}, + dictWord{135, 10, 467}, + dictWord{4, 0, 342}, + dictWord{ + 135, + 0, + 1179, + }, + dictWord{10, 11, 454}, + dictWord{140, 11, 324}, + dictWord{4, 0, 928}, + dictWord{133, 0, 910}, + dictWord{7, 0, 1838}, + dictWord{6, 11, 225}, + dictWord{ + 137, + 11, + 211, + }, + dictWord{16, 0, 101}, + dictWord{20, 0, 115}, + dictWord{20, 0, 118}, + dictWord{148, 0, 122}, + dictWord{4, 0, 496}, + dictWord{135, 0, 856}, + dictWord{ + 4, + 0, + 318, + }, + dictWord{11, 0, 654}, + dictWord{7, 11, 718}, + dictWord{139, 11, 102}, + dictWord{8, 11, 58}, + dictWord{9, 11, 724}, + dictWord{11, 11, 809}, + dictWord{ + 13, + 11, + 113, + }, + dictWord{145, 11, 72}, + dictWord{5, 10, 200}, + dictWord{6, 11, 345}, + dictWord{135, 11, 1247}, + dictWord{8, 11, 767}, + dictWord{8, 11, 803}, + dictWord{ + 9, + 11, + 301, + }, + dictWord{137, 11, 903}, + dictWord{7, 0, 915}, + dictWord{8, 0, 247}, + dictWord{19, 0, 0}, + dictWord{7, 11, 1949}, + dictWord{136, 11, 674}, + dictWord{ + 4, + 0, + 202, + }, + dictWord{5, 0, 382}, + dictWord{6, 0, 454}, + dictWord{7, 0, 936}, + dictWord{7, 0, 1803}, + dictWord{8, 0, 758}, + dictWord{9, 0, 375}, + dictWord{9, 0, 895}, + dictWord{ + 10, + 0, + 743, + }, + dictWord{10, 0, 792}, + dictWord{11, 0, 978}, + dictWord{11, 0, 1012}, + dictWord{142, 0, 109}, + dictWord{7, 0, 1150}, + dictWord{7, 0, 1425}, + dictWord{ + 7, + 0, + 1453, + }, + dictWord{140, 0, 513}, + dictWord{134, 11, 259}, + dictWord{138, 0, 791}, + dictWord{11, 0, 821}, + dictWord{12, 0, 110}, + dictWord{12, 0, 153}, + dictWord{ + 18, + 0, + 41, + }, + dictWord{150, 0, 19}, + dictWord{134, 10, 481}, + dictWord{132, 0, 796}, + dictWord{6, 0, 445}, + dictWord{9, 0, 909}, + dictWord{136, 11, 254}, + dictWord{ + 10, + 0, + 776, + }, + dictWord{13, 0, 345}, + dictWord{142, 0, 425}, + dictWord{4, 10, 84}, + dictWord{7, 10, 1482}, + dictWord{10, 10, 76}, + dictWord{138, 10, 142}, + dictWord{ + 135, + 11, + 742, + }, + dictWord{6, 0, 578}, + dictWord{133, 10, 1015}, + dictWord{6, 0, 1387}, + dictWord{4, 10, 315}, + dictWord{5, 10, 507}, + dictWord{135, 10, 1370}, + dictWord{4, 0, 438}, + dictWord{133, 0, 555}, + dictWord{136, 0, 766}, + dictWord{133, 11, 248}, + dictWord{134, 10, 1722}, + dictWord{4, 11, 116}, + dictWord{5, 11, 95}, + dictWord{5, 11, 445}, + dictWord{7, 11, 1688}, + dictWord{8, 11, 29}, + dictWord{9, 11, 272}, + dictWord{11, 11, 509}, + dictWord{139, 11, 915}, + dictWord{135, 0, 541}, + dictWord{133, 11, 543}, + dictWord{8, 10, 222}, + dictWord{8, 10, 476}, + dictWord{9, 10, 238}, + dictWord{11, 10, 516}, + dictWord{11, 10, 575}, + dictWord{ + 15, + 10, + 109, + }, + dictWord{146, 10, 100}, + dictWord{6, 0, 880}, + dictWord{134, 0, 1191}, + dictWord{5, 11, 181}, + dictWord{136, 11, 41}, + dictWord{134, 0, 1506}, + dictWord{132, 11, 681}, + dictWord{7, 11, 25}, + dictWord{8, 11, 202}, + dictWord{138, 11, 536}, + dictWord{139, 0, 983}, + dictWord{137, 0, 768}, + dictWord{132, 0, 584}, + dictWord{9, 11, 423}, + dictWord{140, 11, 89}, + dictWord{8, 11, 113}, + dictWord{9, 11, 877}, + dictWord{10, 11, 554}, + dictWord{11, 11, 83}, + dictWord{12, 11, 136}, + dictWord{147, 11, 109}, + dictWord{7, 10, 706}, + dictWord{7, 10, 1058}, + dictWord{138, 10, 538}, + dictWord{133, 11, 976}, + dictWord{4, 11, 206}, + dictWord{ + 135, + 11, + 746, + }, + dictWord{136, 11, 526}, + dictWord{140, 0, 737}, + dictWord{11, 10, 92}, + dictWord{11, 10, 196}, + dictWord{11, 10, 409}, + dictWord{11, 10, 450}, + dictWord{11, 10, 666}, + dictWord{11, 10, 777}, + dictWord{12, 10, 262}, + dictWord{13, 10, 385}, + dictWord{13, 10, 393}, + dictWord{15, 10, 115}, + dictWord{ + 16, + 10, + 45, + }, + dictWord{145, 10, 82}, + dictWord{4, 0, 226}, + dictWord{4, 0, 326}, + dictWord{7, 0, 1770}, + dictWord{4, 11, 319}, + dictWord{5, 11, 699}, + dictWord{138, 11, 673}, + dictWord{6, 10, 40}, + dictWord{135, 10, 1781}, + dictWord{5, 0, 426}, + dictWord{8, 0, 30}, + dictWord{9, 0, 2}, + dictWord{11, 0, 549}, + dictWord{147, 0, 122}, + dictWord{ + 6, + 0, + 1161, + }, + dictWord{134, 0, 1329}, + dictWord{138, 10, 97}, + dictWord{6, 10, 423}, + dictWord{7, 10, 665}, + dictWord{135, 10, 1210}, + dictWord{7, 11, 13}, + dictWord{ + 8, + 11, + 226, + }, + dictWord{10, 11, 537}, + dictWord{11, 11, 570}, + dictWord{11, 11, 605}, + dictWord{11, 11, 799}, + dictWord{11, 11, 804}, + dictWord{12, 11, 85}, + dictWord{12, 11, 516}, + dictWord{12, 11, 623}, + dictWord{13, 11, 112}, + dictWord{13, 11, 361}, + dictWord{14, 11, 77}, + dictWord{14, 11, 78}, + dictWord{17, 11, 28}, + dictWord{147, 11, 110}, + dictWord{132, 11, 769}, + dictWord{132, 11, 551}, + dictWord{132, 11, 728}, + dictWord{147, 0, 117}, + dictWord{9, 11, 57}, + dictWord{ + 9, + 11, + 459, + }, + dictWord{10, 11, 425}, + dictWord{11, 11, 119}, + dictWord{12, 11, 184}, + dictWord{12, 11, 371}, + dictWord{13, 11, 358}, + dictWord{145, 11, 51}, + dictWord{ + 5, + 11, + 188, + }, + dictWord{5, 11, 814}, + dictWord{8, 11, 10}, + dictWord{9, 11, 421}, + dictWord{9, 11, 729}, + dictWord{10, 11, 609}, + dictWord{139, 11, 689}, + dictWord{134, 11, 624}, + dictWord{135, 11, 298}, + dictWord{135, 0, 462}, + dictWord{4, 0, 345}, + dictWord{139, 10, 624}, + dictWord{136, 10, 574}, + dictWord{ + 4, + 0, + 385, + }, + dictWord{7, 0, 265}, + dictWord{135, 0, 587}, + dictWord{6, 0, 808}, + dictWord{132, 11, 528}, + dictWord{133, 0, 398}, + dictWord{132, 10, 354}, + dictWord{ + 4, + 0, + 347, + }, + dictWord{5, 0, 423}, + dictWord{5, 0, 996}, + dictWord{135, 0, 1329}, + dictWord{135, 10, 1558}, + dictWord{7, 0, 1259}, + dictWord{9, 0, 125}, + dictWord{ + 139, + 0, + 65, + }, + dictWord{5, 0, 136}, + dictWord{6, 0, 136}, + dictWord{136, 0, 644}, + dictWord{5, 11, 104}, + dictWord{6, 11, 173}, + dictWord{135, 11, 1631}, + dictWord{ + 135, + 0, + 469, + }, + dictWord{133, 10, 830}, + dictWord{4, 0, 278}, + dictWord{5, 0, 465}, + dictWord{135, 0, 1367}, + dictWord{7, 11, 810}, + dictWord{8, 11, 138}, + dictWord{ + 8, + 11, + 342, + }, + dictWord{9, 11, 84}, + dictWord{10, 11, 193}, + dictWord{11, 11, 883}, + dictWord{140, 11, 359}, + dictWord{5, 10, 496}, + dictWord{135, 10, 203}, + dictWord{ + 4, + 0, + 433, + }, + dictWord{133, 0, 719}, + dictWord{6, 11, 95}, + dictWord{134, 10, 547}, + dictWord{5, 10, 88}, + dictWord{137, 10, 239}, + dictWord{6, 11, 406}, + dictWord{ + 10, + 11, + 409, + }, + dictWord{10, 11, 447}, + dictWord{11, 11, 44}, + dictWord{140, 11, 100}, + dictWord{134, 0, 1423}, + dictWord{7, 10, 650}, + dictWord{135, 10, 1310}, + dictWord{134, 0, 749}, + dictWord{135, 11, 1243}, + dictWord{135, 0, 1363}, + dictWord{6, 0, 381}, + dictWord{7, 0, 645}, + dictWord{7, 0, 694}, + dictWord{8, 0, 546}, + dictWord{7, 10, 1076}, + dictWord{9, 10, 80}, + dictWord{11, 10, 78}, + dictWord{11, 10, 421}, + dictWord{11, 10, 534}, + dictWord{140, 10, 545}, + dictWord{ + 134, + 11, + 1636, + }, + dictWord{135, 11, 1344}, + dictWord{12, 0, 277}, + dictWord{7, 10, 274}, + dictWord{11, 10, 479}, + dictWord{139, 10, 507}, + dictWord{6, 0, 705}, + dictWord{ + 6, + 0, + 783, + }, + dictWord{6, 0, 1275}, + dictWord{6, 0, 1481}, + dictWord{4, 11, 282}, + dictWord{7, 11, 1034}, + dictWord{11, 11, 398}, + dictWord{11, 11, 634}, + dictWord{ + 12, + 11, + 1, + }, + dictWord{12, 11, 79}, + dictWord{12, 11, 544}, + dictWord{14, 11, 237}, + dictWord{17, 11, 10}, + dictWord{146, 11, 20}, + dictWord{134, 0, 453}, + dictWord{ + 4, + 0, + 555, + }, + dictWord{8, 0, 536}, + dictWord{10, 0, 288}, + dictWord{11, 0, 1005}, + dictWord{4, 10, 497}, + dictWord{135, 10, 1584}, + dictWord{5, 11, 118}, + dictWord{ + 5, + 11, + 499, + }, + dictWord{6, 11, 476}, + dictWord{7, 11, 600}, + dictWord{7, 11, 888}, + dictWord{135, 11, 1096}, + dictWord{138, 0, 987}, + dictWord{7, 0, 1107}, + dictWord{ + 7, + 10, + 261, + }, + dictWord{7, 10, 1115}, + dictWord{7, 10, 1354}, + dictWord{7, 10, 1588}, + dictWord{7, 10, 1705}, + dictWord{7, 10, 1902}, + dictWord{9, 10, 465}, + dictWord{10, 10, 248}, + dictWord{10, 10, 349}, + dictWord{10, 10, 647}, + dictWord{11, 10, 527}, + dictWord{11, 10, 660}, + dictWord{11, 10, 669}, + dictWord{ + 12, + 10, + 529, + }, + dictWord{141, 10, 305}, + dictWord{7, 11, 296}, + dictWord{7, 11, 596}, + dictWord{8, 11, 560}, + dictWord{8, 11, 586}, + dictWord{9, 11, 612}, + dictWord{ + 11, + 11, + 100, + }, + dictWord{11, 11, 304}, + dictWord{12, 11, 46}, + dictWord{13, 11, 89}, + dictWord{14, 11, 112}, + dictWord{145, 11, 122}, + dictWord{9, 0, 370}, + dictWord{ + 138, + 0, + 90, + }, + dictWord{136, 10, 13}, + dictWord{132, 0, 860}, + dictWord{7, 10, 642}, + dictWord{8, 10, 250}, + dictWord{11, 10, 123}, + dictWord{11, 10, 137}, + dictWord{ + 13, + 10, + 48, + }, + dictWord{142, 10, 95}, + dictWord{135, 10, 1429}, + dictWord{137, 11, 321}, + dictWord{132, 0, 257}, + dictWord{135, 0, 2031}, + dictWord{7, 0, 1768}, + dictWord{7, 11, 1599}, + dictWord{7, 11, 1723}, + dictWord{8, 11, 79}, + dictWord{8, 11, 106}, + dictWord{8, 11, 190}, + dictWord{8, 11, 302}, + dictWord{8, 11, 383}, + dictWord{9, 11, 119}, + dictWord{9, 11, 233}, + dictWord{9, 11, 298}, + dictWord{9, 11, 419}, + dictWord{9, 11, 471}, + dictWord{10, 11, 181}, + dictWord{10, 11, 406}, + dictWord{11, 11, 57}, + dictWord{11, 11, 85}, + dictWord{11, 11, 120}, + dictWord{11, 11, 177}, + dictWord{11, 11, 296}, + dictWord{11, 11, 382}, + dictWord{11, 11, 454}, + dictWord{11, 11, 758}, + dictWord{11, 11, 999}, + dictWord{12, 11, 27}, + dictWord{12, 11, 98}, + dictWord{12, 11, 131}, + dictWord{12, 11, 245}, + dictWord{ + 12, + 11, + 312, + }, + dictWord{12, 11, 446}, + dictWord{12, 11, 454}, + dictWord{13, 11, 25}, + dictWord{13, 11, 98}, + dictWord{13, 11, 426}, + dictWord{13, 11, 508}, + dictWord{ + 14, + 11, + 6, + }, + dictWord{14, 11, 163}, + dictWord{14, 11, 272}, + dictWord{14, 11, 277}, + dictWord{14, 11, 370}, + dictWord{15, 11, 95}, + dictWord{15, 11, 138}, + dictWord{ + 15, + 11, + 167, + }, + dictWord{17, 11, 18}, + dictWord{17, 11, 38}, + dictWord{20, 11, 96}, + dictWord{149, 11, 32}, + dictWord{5, 11, 722}, + dictWord{134, 11, 1759}, + dictWord{145, 11, 16}, + dictWord{6, 0, 1071}, + dictWord{134, 0, 1561}, + dictWord{10, 10, 545}, + dictWord{140, 10, 301}, + dictWord{6, 0, 83}, + dictWord{6, 0, 1733}, + dictWord{135, 0, 1389}, + dictWord{4, 0, 835}, + dictWord{135, 0, 1818}, + dictWord{133, 11, 258}, + dictWord{4, 10, 904}, + dictWord{133, 10, 794}, + dictWord{ + 134, + 0, + 2006, + }, + dictWord{5, 11, 30}, + dictWord{7, 11, 495}, + dictWord{8, 11, 134}, + dictWord{9, 11, 788}, + dictWord{140, 11, 438}, + dictWord{135, 11, 2004}, + dictWord{ + 137, + 0, + 696, + }, + dictWord{5, 11, 50}, + dictWord{6, 11, 439}, + dictWord{7, 11, 780}, + dictWord{135, 11, 1040}, + dictWord{7, 11, 772}, + dictWord{7, 11, 1104}, + dictWord{ + 7, + 11, + 1647, + }, + dictWord{11, 11, 269}, + dictWord{11, 11, 539}, + dictWord{11, 11, 607}, + dictWord{11, 11, 627}, + dictWord{11, 11, 706}, + dictWord{11, 11, 975}, + dictWord{12, 11, 248}, + dictWord{12, 11, 311}, + dictWord{12, 11, 434}, + dictWord{12, 11, 600}, + dictWord{12, 11, 622}, + dictWord{13, 11, 297}, + dictWord{ + 13, + 11, + 367, + }, + dictWord{13, 11, 485}, + dictWord{14, 11, 69}, + dictWord{14, 11, 409}, + dictWord{143, 11, 108}, + dictWord{5, 11, 1}, + dictWord{6, 11, 81}, + dictWord{ + 138, + 11, + 520, + }, + dictWord{7, 0, 1718}, + dictWord{9, 0, 95}, + dictWord{9, 0, 274}, + dictWord{10, 0, 279}, + dictWord{10, 0, 317}, + dictWord{10, 0, 420}, + dictWord{11, 0, 303}, + dictWord{11, 0, 808}, + dictWord{12, 0, 134}, + dictWord{12, 0, 367}, + dictWord{13, 0, 149}, + dictWord{13, 0, 347}, + dictWord{14, 0, 349}, + dictWord{14, 0, 406}, + dictWord{ + 18, + 0, + 22, + }, + dictWord{18, 0, 89}, + dictWord{18, 0, 122}, + dictWord{147, 0, 47}, + dictWord{5, 11, 482}, + dictWord{8, 11, 98}, + dictWord{9, 11, 172}, + dictWord{10, 11, 222}, + dictWord{10, 11, 700}, + dictWord{10, 11, 822}, + dictWord{11, 11, 302}, + dictWord{11, 11, 778}, + dictWord{12, 11, 50}, + dictWord{12, 11, 127}, + dictWord{ + 12, + 11, + 396, + }, + dictWord{13, 11, 62}, + dictWord{13, 11, 328}, + dictWord{14, 11, 122}, + dictWord{147, 11, 72}, + dictWord{7, 10, 386}, + dictWord{138, 10, 713}, + dictWord{ + 6, + 10, + 7, + }, + dictWord{6, 10, 35}, + dictWord{7, 10, 147}, + dictWord{7, 10, 1069}, + dictWord{7, 10, 1568}, + dictWord{7, 10, 1575}, + dictWord{7, 10, 1917}, + dictWord{ + 8, + 10, + 43, + }, + dictWord{8, 10, 208}, + dictWord{9, 10, 128}, + dictWord{9, 10, 866}, + dictWord{10, 10, 20}, + dictWord{11, 10, 981}, + dictWord{147, 10, 33}, + dictWord{ + 133, + 0, + 26, + }, + dictWord{132, 0, 550}, + dictWord{5, 11, 2}, + dictWord{7, 11, 1494}, + dictWord{136, 11, 589}, + dictWord{6, 11, 512}, + dictWord{7, 11, 797}, + dictWord{ + 8, + 11, + 253, + }, + dictWord{9, 11, 77}, + dictWord{10, 11, 1}, + dictWord{10, 11, 129}, + dictWord{10, 11, 225}, + dictWord{11, 11, 118}, + dictWord{11, 11, 226}, + dictWord{ + 11, + 11, + 251, + }, + dictWord{11, 11, 430}, + dictWord{11, 11, 701}, + dictWord{11, 11, 974}, + dictWord{11, 11, 982}, + dictWord{12, 11, 64}, + dictWord{12, 11, 260}, + dictWord{ + 12, + 11, + 488, + }, + dictWord{140, 11, 690}, + dictWord{7, 10, 893}, + dictWord{141, 10, 424}, + dictWord{134, 0, 901}, + dictWord{136, 0, 822}, + dictWord{4, 0, 902}, + dictWord{5, 0, 809}, + dictWord{134, 0, 122}, + dictWord{6, 0, 807}, + dictWord{134, 0, 1366}, + dictWord{7, 0, 262}, + dictWord{5, 11, 748}, + dictWord{134, 11, 553}, + dictWord{133, 0, 620}, + dictWord{4, 0, 34}, + dictWord{5, 0, 574}, + dictWord{7, 0, 279}, + dictWord{7, 0, 1624}, + dictWord{136, 0, 601}, + dictWord{9, 0, 170}, + dictWord{ + 6, + 10, + 322, + }, + dictWord{9, 10, 552}, + dictWord{11, 10, 274}, + dictWord{13, 10, 209}, + dictWord{13, 10, 499}, + dictWord{14, 10, 85}, + dictWord{15, 10, 126}, + dictWord{ + 145, + 10, + 70, + }, + dictWord{132, 0, 537}, + dictWord{4, 11, 12}, + dictWord{7, 11, 420}, + dictWord{7, 11, 522}, + dictWord{7, 11, 809}, + dictWord{8, 11, 797}, + dictWord{ + 141, + 11, + 88, + }, + dictWord{133, 0, 332}, + dictWord{8, 10, 83}, + dictWord{8, 10, 742}, + dictWord{8, 10, 817}, + dictWord{9, 10, 28}, + dictWord{9, 10, 29}, + dictWord{9, 10, 885}, + dictWord{10, 10, 387}, + dictWord{11, 10, 633}, + dictWord{11, 10, 740}, + dictWord{13, 10, 235}, + dictWord{13, 10, 254}, + dictWord{15, 10, 143}, + dictWord{ + 143, + 10, + 146, + }, + dictWord{6, 0, 1909}, + dictWord{9, 0, 964}, + dictWord{12, 0, 822}, + dictWord{12, 0, 854}, + dictWord{12, 0, 865}, + dictWord{12, 0, 910}, + dictWord{12, 0, 938}, + dictWord{15, 0, 169}, + dictWord{15, 0, 208}, + dictWord{15, 0, 211}, + dictWord{18, 0, 205}, + dictWord{18, 0, 206}, + dictWord{18, 0, 220}, + dictWord{18, 0, 223}, + dictWord{152, 0, 24}, + dictWord{140, 10, 49}, + dictWord{5, 11, 528}, + dictWord{135, 11, 1580}, + dictWord{6, 0, 261}, + dictWord{8, 0, 182}, + dictWord{139, 0, 943}, + dictWord{134, 0, 1721}, + dictWord{4, 0, 933}, + dictWord{133, 0, 880}, + dictWord{136, 11, 321}, + dictWord{5, 11, 266}, + dictWord{9, 11, 290}, + dictWord{9, 11, 364}, + dictWord{10, 11, 293}, + dictWord{11, 11, 606}, + dictWord{142, 11, 45}, + dictWord{6, 0, 1609}, + dictWord{4, 11, 50}, + dictWord{6, 11, 510}, + dictWord{6, 11, 594}, + dictWord{9, 11, 121}, + dictWord{10, 11, 49}, + dictWord{10, 11, 412}, + dictWord{139, 11, 834}, + dictWord{7, 0, 895}, + dictWord{136, 11, 748}, + dictWord{132, 11, 466}, + dictWord{4, 10, 110}, + dictWord{10, 10, 415}, + dictWord{10, 10, 597}, + dictWord{142, 10, 206}, + dictWord{133, 0, 812}, + dictWord{135, 11, 281}, + dictWord{ + 6, + 0, + 1890, + }, + dictWord{6, 0, 1902}, + dictWord{6, 0, 1916}, + dictWord{9, 0, 929}, + dictWord{9, 0, 942}, + dictWord{9, 0, 975}, + dictWord{9, 0, 984}, + dictWord{9, 0, 986}, + dictWord{ + 9, + 0, + 1011, + }, + dictWord{9, 0, 1019}, + dictWord{12, 0, 804}, + dictWord{12, 0, 851}, + dictWord{12, 0, 867}, + dictWord{12, 0, 916}, + dictWord{12, 0, 923}, + dictWord{ + 15, + 0, + 194, + }, + dictWord{15, 0, 204}, + dictWord{15, 0, 210}, + dictWord{15, 0, 222}, + dictWord{15, 0, 223}, + dictWord{15, 0, 229}, + dictWord{15, 0, 250}, + dictWord{ + 18, + 0, + 179, + }, + dictWord{18, 0, 186}, + dictWord{18, 0, 192}, + dictWord{7, 10, 205}, + dictWord{135, 10, 2000}, + dictWord{132, 11, 667}, + dictWord{135, 0, 778}, + dictWord{ + 4, + 0, + 137, + }, + dictWord{7, 0, 1178}, + dictWord{135, 0, 1520}, + dictWord{134, 0, 1314}, + dictWord{4, 11, 242}, + dictWord{134, 11, 333}, + dictWord{6, 0, 1661}, + dictWord{7, 0, 1975}, + dictWord{7, 0, 2009}, + dictWord{135, 0, 2011}, + dictWord{134, 0, 1591}, + dictWord{4, 10, 283}, + dictWord{135, 10, 1194}, + dictWord{ + 11, + 0, + 820, + }, + dictWord{150, 0, 51}, + dictWord{4, 11, 39}, + dictWord{5, 11, 36}, + dictWord{7, 11, 1843}, + dictWord{8, 11, 407}, + dictWord{11, 11, 144}, + dictWord{ + 140, + 11, + 523, + }, + dictWord{134, 10, 1720}, + dictWord{4, 11, 510}, + dictWord{7, 11, 29}, + dictWord{7, 11, 66}, + dictWord{7, 11, 1980}, + dictWord{10, 11, 487}, + dictWord{ + 10, + 11, + 809, + }, + dictWord{146, 11, 9}, + dictWord{5, 0, 89}, + dictWord{7, 0, 1915}, + dictWord{9, 0, 185}, + dictWord{9, 0, 235}, + dictWord{10, 0, 64}, + dictWord{10, 0, 270}, + dictWord{10, 0, 403}, + dictWord{10, 0, 469}, + dictWord{10, 0, 529}, + dictWord{10, 0, 590}, + dictWord{11, 0, 140}, + dictWord{11, 0, 860}, + dictWord{13, 0, 1}, + dictWord{ + 13, + 0, + 422, + }, + dictWord{14, 0, 341}, + dictWord{14, 0, 364}, + dictWord{17, 0, 93}, + dictWord{18, 0, 113}, + dictWord{19, 0, 97}, + dictWord{147, 0, 113}, + dictWord{133, 0, 695}, + dictWord{6, 0, 987}, + dictWord{134, 0, 1160}, + dictWord{5, 0, 6}, + dictWord{6, 0, 183}, + dictWord{7, 0, 680}, + dictWord{7, 0, 978}, + dictWord{7, 0, 1013}, + dictWord{ + 7, + 0, + 1055, + }, + dictWord{12, 0, 230}, + dictWord{13, 0, 172}, + dictWord{146, 0, 29}, + dictWord{134, 11, 570}, + dictWord{132, 11, 787}, + dictWord{134, 11, 518}, + dictWord{ + 6, + 0, + 29, + }, + dictWord{139, 0, 63}, + dictWord{132, 11, 516}, + dictWord{136, 11, 821}, + dictWord{132, 0, 311}, + dictWord{134, 0, 1740}, + dictWord{7, 0, 170}, + dictWord{8, 0, 90}, + dictWord{8, 0, 177}, + dictWord{8, 0, 415}, + dictWord{11, 0, 714}, + dictWord{14, 0, 281}, + dictWord{136, 10, 735}, + dictWord{134, 0, 1961}, + dictWord{ + 135, + 11, + 1405, + }, + dictWord{4, 11, 10}, + dictWord{7, 11, 917}, + dictWord{139, 11, 786}, + dictWord{5, 10, 132}, + dictWord{9, 10, 486}, + dictWord{9, 10, 715}, + dictWord{ + 10, + 10, + 458, + }, + dictWord{11, 10, 373}, + dictWord{11, 10, 668}, + dictWord{11, 10, 795}, + dictWord{11, 10, 897}, + dictWord{12, 10, 272}, + dictWord{12, 10, 424}, + dictWord{12, 10, 539}, + dictWord{12, 10, 558}, + dictWord{14, 10, 245}, + dictWord{14, 10, 263}, + dictWord{14, 10, 264}, + dictWord{14, 10, 393}, + dictWord{ + 142, + 10, + 403, + }, + dictWord{11, 0, 91}, + dictWord{13, 0, 129}, + dictWord{15, 0, 101}, + dictWord{145, 0, 125}, + dictWord{135, 0, 1132}, + dictWord{4, 0, 494}, + dictWord{6, 0, 74}, + dictWord{7, 0, 44}, + dictWord{7, 0, 407}, + dictWord{12, 0, 17}, + dictWord{15, 0, 5}, + dictWord{148, 0, 11}, + dictWord{133, 10, 379}, + dictWord{5, 0, 270}, + dictWord{ + 5, + 11, + 684, + }, + dictWord{6, 10, 89}, + dictWord{6, 10, 400}, + dictWord{7, 10, 1569}, + dictWord{7, 10, 1623}, + dictWord{7, 10, 1850}, + dictWord{8, 10, 218}, + dictWord{ + 8, + 10, + 422, + }, + dictWord{9, 10, 570}, + dictWord{138, 10, 626}, + dictWord{4, 0, 276}, + dictWord{133, 0, 296}, + dictWord{6, 0, 1523}, + dictWord{134, 11, 27}, + dictWord{ + 6, + 10, + 387, + }, + dictWord{7, 10, 882}, + dictWord{141, 10, 111}, + dictWord{6, 10, 224}, + dictWord{7, 10, 877}, + dictWord{137, 10, 647}, + dictWord{135, 10, 790}, + dictWord{ + 4, + 0, + 7, + }, + dictWord{5, 0, 90}, + dictWord{5, 0, 158}, + dictWord{6, 0, 542}, + dictWord{7, 0, 221}, + dictWord{7, 0, 1574}, + dictWord{9, 0, 490}, + dictWord{10, 0, 540}, + dictWord{ + 11, + 0, + 443, + }, + dictWord{139, 0, 757}, + dictWord{7, 0, 588}, + dictWord{9, 0, 175}, + dictWord{138, 0, 530}, + dictWord{135, 10, 394}, + dictWord{142, 11, 23}, + dictWord{ + 134, + 0, + 786, + }, + dictWord{135, 0, 580}, + dictWord{7, 0, 88}, + dictWord{136, 0, 627}, + dictWord{5, 0, 872}, + dictWord{6, 0, 57}, + dictWord{7, 0, 471}, + dictWord{9, 0, 447}, + dictWord{137, 0, 454}, + dictWord{6, 11, 342}, + dictWord{6, 11, 496}, + dictWord{8, 11, 275}, + dictWord{137, 11, 206}, + dictWord{4, 11, 909}, + dictWord{133, 11, 940}, + dictWord{6, 0, 735}, + dictWord{132, 11, 891}, + dictWord{8, 0, 845}, + dictWord{8, 0, 916}, + dictWord{135, 10, 1409}, + dictWord{5, 0, 31}, + dictWord{134, 0, 614}, + dictWord{11, 0, 458}, + dictWord{12, 0, 15}, + dictWord{140, 0, 432}, + dictWord{8, 0, 330}, + dictWord{140, 0, 477}, + dictWord{4, 0, 530}, + dictWord{5, 0, 521}, + dictWord{ + 7, + 0, + 1200, + }, + dictWord{10, 0, 460}, + dictWord{132, 11, 687}, + dictWord{6, 0, 424}, + dictWord{135, 0, 1866}, + dictWord{9, 0, 569}, + dictWord{12, 0, 12}, + dictWord{ + 12, + 0, + 81, + }, + dictWord{12, 0, 319}, + dictWord{13, 0, 69}, + dictWord{14, 0, 259}, + dictWord{16, 0, 87}, + dictWord{17, 0, 1}, + dictWord{17, 0, 21}, + dictWord{17, 0, 24}, + dictWord{ + 18, + 0, + 15, + }, + dictWord{18, 0, 56}, + dictWord{18, 0, 59}, + dictWord{18, 0, 127}, + dictWord{18, 0, 154}, + dictWord{19, 0, 19}, + dictWord{148, 0, 31}, + dictWord{7, 0, 1302}, + dictWord{136, 10, 38}, + dictWord{134, 11, 253}, + dictWord{5, 10, 261}, + dictWord{7, 10, 78}, + dictWord{7, 10, 199}, + dictWord{8, 10, 815}, + dictWord{9, 10, 126}, + dictWord{138, 10, 342}, + dictWord{5, 0, 595}, + dictWord{135, 0, 1863}, + dictWord{6, 11, 41}, + dictWord{141, 11, 160}, + dictWord{5, 0, 13}, + dictWord{134, 0, 142}, + dictWord{6, 0, 97}, + dictWord{7, 0, 116}, + dictWord{8, 0, 322}, + dictWord{8, 0, 755}, + dictWord{9, 0, 548}, + dictWord{10, 0, 714}, + dictWord{11, 0, 884}, + dictWord{13, 0, 324}, + dictWord{7, 11, 1304}, + dictWord{138, 11, 477}, + dictWord{132, 10, 628}, + dictWord{134, 11, 1718}, + dictWord{7, 10, 266}, + dictWord{136, 10, 804}, + dictWord{135, 10, 208}, + dictWord{7, 0, 1021}, + dictWord{6, 10, 79}, + dictWord{135, 10, 1519}, + dictWord{7, 0, 1472}, + dictWord{135, 0, 1554}, + dictWord{6, 11, 362}, + dictWord{146, 11, 51}, + dictWord{7, 0, 1071}, + dictWord{7, 0, 1541}, + dictWord{7, 0, 1767}, + dictWord{7, 0, 1806}, + dictWord{11, 0, 162}, + dictWord{11, 0, 242}, + dictWord{11, 0, 452}, + dictWord{12, 0, 605}, + dictWord{15, 0, 26}, + dictWord{144, 0, 44}, + dictWord{136, 10, 741}, + dictWord{133, 11, 115}, + dictWord{145, 0, 115}, + dictWord{134, 10, 376}, + dictWord{6, 0, 1406}, + dictWord{134, 0, 1543}, + dictWord{5, 11, 193}, + dictWord{12, 11, 178}, + dictWord{13, 11, 130}, + dictWord{ + 145, + 11, + 84, + }, + dictWord{135, 0, 1111}, + dictWord{8, 0, 1}, + dictWord{9, 0, 650}, + dictWord{10, 0, 326}, + dictWord{5, 11, 705}, + dictWord{137, 11, 606}, + dictWord{5, 0, 488}, + dictWord{6, 0, 527}, + dictWord{7, 0, 489}, + dictWord{7, 0, 1636}, + dictWord{8, 0, 121}, + dictWord{8, 0, 144}, + dictWord{8, 0, 359}, + dictWord{9, 0, 193}, + dictWord{9, 0, 241}, + dictWord{9, 0, 336}, + dictWord{9, 0, 882}, + dictWord{11, 0, 266}, + dictWord{11, 0, 372}, + dictWord{11, 0, 944}, + dictWord{12, 0, 401}, + dictWord{140, 0, 641}, + dictWord{135, 11, 174}, + dictWord{6, 0, 267}, + dictWord{7, 10, 244}, + dictWord{7, 10, 632}, + dictWord{7, 10, 1609}, + dictWord{8, 10, 178}, + dictWord{8, 10, 638}, + dictWord{141, 10, 58}, + dictWord{134, 0, 1983}, + dictWord{134, 0, 1155}, + dictWord{134, 0, 1575}, + dictWord{134, 0, 1438}, + dictWord{9, 0, 31}, + dictWord{ + 10, + 0, + 244, + }, + dictWord{10, 0, 699}, + dictWord{12, 0, 149}, + dictWord{141, 0, 497}, + dictWord{133, 0, 377}, + dictWord{4, 11, 122}, + dictWord{5, 11, 796}, + dictWord{ + 5, + 11, + 952, + }, + dictWord{6, 11, 1660}, + dictWord{6, 11, 1671}, + dictWord{8, 11, 567}, + dictWord{9, 11, 687}, + dictWord{9, 11, 742}, + dictWord{10, 11, 686}, + dictWord{ + 11, + 11, + 356, + }, + dictWord{11, 11, 682}, + dictWord{140, 11, 281}, + dictWord{145, 0, 101}, + dictWord{11, 11, 0}, + dictWord{144, 11, 78}, + dictWord{5, 11, 179}, + dictWord{ + 5, + 10, + 791, + }, + dictWord{7, 11, 1095}, + dictWord{135, 11, 1213}, + dictWord{8, 11, 372}, + dictWord{9, 11, 122}, + dictWord{138, 11, 175}, + dictWord{7, 10, 686}, + dictWord{8, 10, 33}, + dictWord{8, 10, 238}, + dictWord{10, 10, 616}, + dictWord{11, 10, 467}, + dictWord{11, 10, 881}, + dictWord{13, 10, 217}, + dictWord{13, 10, 253}, + dictWord{142, 10, 268}, + dictWord{9, 0, 476}, + dictWord{4, 11, 66}, + dictWord{7, 11, 722}, + dictWord{135, 11, 904}, + dictWord{7, 11, 352}, + dictWord{137, 11, 684}, + dictWord{135, 0, 2023}, + dictWord{135, 0, 1836}, + dictWord{132, 10, 447}, + dictWord{5, 0, 843}, + dictWord{144, 0, 35}, + dictWord{137, 11, 779}, + dictWord{ + 141, + 11, + 35, + }, + dictWord{4, 10, 128}, + dictWord{5, 10, 415}, + dictWord{6, 10, 462}, + dictWord{7, 10, 294}, + dictWord{7, 10, 578}, + dictWord{10, 10, 710}, + dictWord{ + 139, + 10, + 86, + }, + dictWord{132, 0, 554}, + dictWord{133, 0, 536}, + dictWord{136, 10, 587}, + dictWord{5, 0, 207}, + dictWord{9, 0, 79}, + dictWord{11, 0, 625}, + dictWord{ + 145, + 0, + 7, + }, + dictWord{7, 0, 1371}, + dictWord{6, 10, 427}, + dictWord{138, 10, 692}, + dictWord{4, 0, 424}, + dictWord{4, 10, 195}, + dictWord{135, 10, 802}, + dictWord{ + 8, + 0, + 785, + }, + dictWord{133, 11, 564}, + dictWord{135, 0, 336}, + dictWord{4, 0, 896}, + dictWord{6, 0, 1777}, + dictWord{134, 11, 556}, + dictWord{137, 11, 103}, + dictWord{134, 10, 1683}, + dictWord{7, 11, 544}, + dictWord{8, 11, 719}, + dictWord{138, 11, 61}, + dictWord{138, 10, 472}, + dictWord{4, 11, 5}, + dictWord{5, 11, 498}, + dictWord{136, 11, 637}, + dictWord{7, 0, 750}, + dictWord{9, 0, 223}, + dictWord{11, 0, 27}, + dictWord{11, 0, 466}, + dictWord{12, 0, 624}, + dictWord{14, 0, 265}, + dictWord{ + 146, + 0, + 61, + }, + dictWord{12, 0, 238}, + dictWord{18, 0, 155}, + dictWord{12, 11, 238}, + dictWord{146, 11, 155}, + dictWord{151, 10, 28}, + dictWord{133, 11, 927}, + dictWord{12, 0, 383}, + dictWord{5, 10, 3}, + dictWord{8, 10, 578}, + dictWord{9, 10, 118}, + dictWord{10, 10, 705}, + dictWord{141, 10, 279}, + dictWord{4, 11, 893}, + dictWord{ + 5, + 11, + 780, + }, + dictWord{133, 11, 893}, + dictWord{4, 0, 603}, + dictWord{133, 0, 661}, + dictWord{4, 0, 11}, + dictWord{6, 0, 128}, + dictWord{7, 0, 231}, + dictWord{ + 7, + 0, + 1533, + }, + dictWord{10, 0, 725}, + dictWord{5, 10, 229}, + dictWord{5, 11, 238}, + dictWord{135, 11, 1350}, + dictWord{8, 10, 102}, + dictWord{10, 10, 578}, + dictWord{ + 10, + 10, + 672, + }, + dictWord{12, 10, 496}, + dictWord{13, 10, 408}, + dictWord{14, 10, 121}, + dictWord{145, 10, 106}, + dictWord{132, 0, 476}, + dictWord{134, 0, 1552}, + dictWord{134, 11, 1729}, + dictWord{8, 10, 115}, + dictWord{8, 10, 350}, + dictWord{9, 10, 489}, + dictWord{10, 10, 128}, + dictWord{11, 10, 306}, + dictWord{ + 12, + 10, + 373, + }, + dictWord{14, 10, 30}, + dictWord{17, 10, 79}, + dictWord{19, 10, 80}, + dictWord{150, 10, 55}, + dictWord{135, 0, 1807}, + dictWord{4, 0, 680}, + dictWord{ + 4, + 11, + 60, + }, + dictWord{7, 11, 760}, + dictWord{7, 11, 1800}, + dictWord{8, 11, 314}, + dictWord{9, 11, 700}, + dictWord{139, 11, 487}, + dictWord{4, 10, 230}, + dictWord{ + 5, + 10, + 702, + }, + dictWord{148, 11, 94}, + dictWord{132, 11, 228}, + dictWord{139, 0, 435}, + dictWord{9, 0, 20}, + dictWord{10, 0, 324}, + dictWord{10, 0, 807}, + dictWord{ + 139, + 0, + 488, + }, + dictWord{6, 10, 1728}, + dictWord{136, 11, 419}, + dictWord{4, 10, 484}, + dictWord{18, 10, 26}, + dictWord{19, 10, 42}, + dictWord{20, 10, 43}, + dictWord{ + 21, + 10, + 0, + }, + dictWord{23, 10, 27}, + dictWord{152, 10, 14}, + dictWord{135, 0, 1431}, + dictWord{133, 11, 828}, + dictWord{5, 0, 112}, + dictWord{6, 0, 103}, + dictWord{ + 6, + 0, + 150, + }, + dictWord{7, 0, 1303}, + dictWord{9, 0, 292}, + dictWord{10, 0, 481}, + dictWord{20, 0, 13}, + dictWord{7, 11, 176}, + dictWord{7, 11, 178}, + dictWord{7, 11, 1110}, + dictWord{10, 11, 481}, + dictWord{148, 11, 13}, + dictWord{138, 0, 356}, + dictWord{4, 11, 51}, + dictWord{5, 11, 39}, + dictWord{6, 11, 4}, + dictWord{7, 11, 591}, + dictWord{ + 7, + 11, + 849, + }, + dictWord{7, 11, 951}, + dictWord{7, 11, 1129}, + dictWord{7, 11, 1613}, + dictWord{7, 11, 1760}, + dictWord{7, 11, 1988}, + dictWord{9, 11, 434}, + dictWord{10, 11, 754}, + dictWord{11, 11, 25}, + dictWord{11, 11, 37}, + dictWord{139, 11, 414}, + dictWord{6, 0, 1963}, + dictWord{134, 0, 2000}, + dictWord{ + 132, + 10, + 633, + }, + dictWord{6, 0, 1244}, + dictWord{133, 11, 902}, + dictWord{135, 11, 928}, + dictWord{140, 0, 18}, + dictWord{138, 0, 204}, + dictWord{135, 11, 1173}, + dictWord{134, 0, 867}, + dictWord{4, 0, 708}, + dictWord{8, 0, 15}, + dictWord{9, 0, 50}, + dictWord{9, 0, 386}, + dictWord{11, 0, 18}, + dictWord{11, 0, 529}, + dictWord{140, 0, 228}, + dictWord{134, 11, 270}, + dictWord{4, 0, 563}, + dictWord{7, 0, 109}, + dictWord{7, 0, 592}, + dictWord{7, 0, 637}, + dictWord{7, 0, 770}, + dictWord{8, 0, 463}, + dictWord{ + 9, + 0, + 60, + }, + dictWord{9, 0, 335}, + dictWord{9, 0, 904}, + dictWord{10, 0, 73}, + dictWord{11, 0, 434}, + dictWord{12, 0, 585}, + dictWord{13, 0, 331}, + dictWord{18, 0, 110}, + dictWord{148, 0, 60}, + dictWord{132, 0, 502}, + dictWord{14, 11, 359}, + dictWord{19, 11, 52}, + dictWord{148, 11, 47}, + dictWord{6, 11, 377}, + dictWord{7, 11, 1025}, + dictWord{9, 11, 613}, + dictWord{145, 11, 104}, + dictWord{6, 0, 347}, + dictWord{10, 0, 161}, + dictWord{5, 10, 70}, + dictWord{5, 10, 622}, + dictWord{6, 10, 334}, + dictWord{ + 7, + 10, + 1032, + }, + dictWord{9, 10, 171}, + dictWord{11, 10, 26}, + dictWord{11, 10, 213}, + dictWord{11, 10, 637}, + dictWord{11, 10, 707}, + dictWord{12, 10, 202}, + dictWord{12, 10, 380}, + dictWord{13, 10, 226}, + dictWord{13, 10, 355}, + dictWord{14, 10, 222}, + dictWord{145, 10, 42}, + dictWord{132, 11, 416}, + dictWord{4, 0, 33}, + dictWord{5, 0, 102}, + dictWord{6, 0, 284}, + dictWord{7, 0, 1079}, + dictWord{7, 0, 1423}, + dictWord{7, 0, 1702}, + dictWord{8, 0, 470}, + dictWord{9, 0, 554}, + dictWord{ + 9, + 0, + 723, + }, + dictWord{11, 0, 333}, + dictWord{142, 11, 372}, + dictWord{5, 11, 152}, + dictWord{5, 11, 197}, + dictWord{7, 11, 340}, + dictWord{7, 11, 867}, + dictWord{ + 10, + 11, + 548, + }, + dictWord{10, 11, 581}, + dictWord{11, 11, 6}, + dictWord{12, 11, 3}, + dictWord{12, 11, 19}, + dictWord{14, 11, 110}, + dictWord{142, 11, 289}, + dictWord{ + 7, + 0, + 246, + }, + dictWord{135, 0, 840}, + dictWord{6, 0, 10}, + dictWord{8, 0, 571}, + dictWord{9, 0, 739}, + dictWord{143, 0, 91}, + dictWord{6, 0, 465}, + dictWord{7, 0, 1465}, + dictWord{ + 4, + 10, + 23, + }, + dictWord{4, 10, 141}, + dictWord{5, 10, 313}, + dictWord{5, 10, 1014}, + dictWord{6, 10, 50}, + dictWord{7, 10, 142}, + dictWord{7, 10, 559}, + dictWord{ + 8, + 10, + 640, + }, + dictWord{9, 10, 460}, + dictWord{9, 10, 783}, + dictWord{11, 10, 741}, + dictWord{12, 10, 183}, + dictWord{141, 10, 488}, + dictWord{133, 0, 626}, + dictWord{ + 136, + 0, + 614, + }, + dictWord{138, 0, 237}, + dictWord{7, 11, 34}, + dictWord{7, 11, 190}, + dictWord{8, 11, 28}, + dictWord{8, 11, 141}, + dictWord{8, 11, 444}, + dictWord{ + 8, + 11, + 811, + }, + dictWord{9, 11, 468}, + dictWord{11, 11, 334}, + dictWord{12, 11, 24}, + dictWord{12, 11, 386}, + dictWord{140, 11, 576}, + dictWord{133, 11, 757}, + dictWord{ + 5, + 0, + 18, + }, + dictWord{6, 0, 526}, + dictWord{13, 0, 24}, + dictWord{13, 0, 110}, + dictWord{19, 0, 5}, + dictWord{147, 0, 44}, + dictWord{6, 0, 506}, + dictWord{134, 11, 506}, + dictWord{135, 11, 1553}, + dictWord{4, 0, 309}, + dictWord{5, 0, 462}, + dictWord{7, 0, 970}, + dictWord{7, 0, 1097}, + dictWord{22, 0, 30}, + dictWord{22, 0, 33}, + dictWord{ + 7, + 11, + 1385, + }, + dictWord{11, 11, 582}, + dictWord{11, 11, 650}, + dictWord{11, 11, 901}, + dictWord{11, 11, 949}, + dictWord{12, 11, 232}, + dictWord{12, 11, 236}, + dictWord{13, 11, 413}, + dictWord{13, 11, 501}, + dictWord{146, 11, 116}, + dictWord{9, 0, 140}, + dictWord{5, 10, 222}, + dictWord{138, 10, 534}, + dictWord{6, 0, 1056}, + dictWord{137, 10, 906}, + dictWord{134, 0, 1704}, + dictWord{138, 10, 503}, + dictWord{134, 0, 1036}, + dictWord{5, 10, 154}, + dictWord{7, 10, 1491}, + dictWord{ + 10, + 10, + 379, + }, + dictWord{138, 10, 485}, + dictWord{4, 11, 383}, + dictWord{133, 10, 716}, + dictWord{134, 0, 1315}, + dictWord{5, 0, 86}, + dictWord{7, 0, 743}, + dictWord{ + 9, + 0, + 85, + }, + dictWord{10, 0, 281}, + dictWord{10, 0, 432}, + dictWord{11, 0, 825}, + dictWord{12, 0, 251}, + dictWord{13, 0, 118}, + dictWord{142, 0, 378}, + dictWord{ + 8, + 0, + 264, + }, + dictWord{4, 10, 91}, + dictWord{5, 10, 388}, + dictWord{5, 10, 845}, + dictWord{6, 10, 206}, + dictWord{6, 10, 252}, + dictWord{6, 10, 365}, + dictWord{7, 10, 136}, + dictWord{7, 10, 531}, + dictWord{136, 10, 621}, + dictWord{5, 0, 524}, + dictWord{133, 0, 744}, + dictWord{5, 11, 277}, + dictWord{141, 11, 247}, + dictWord{ + 132, + 11, + 435, + }, + dictWord{10, 0, 107}, + dictWord{140, 0, 436}, + dictWord{132, 0, 927}, + dictWord{10, 0, 123}, + dictWord{12, 0, 670}, + dictWord{146, 0, 94}, + dictWord{ + 7, + 0, + 1149, + }, + dictWord{9, 0, 156}, + dictWord{138, 0, 957}, + dictWord{5, 11, 265}, + dictWord{6, 11, 212}, + dictWord{135, 11, 28}, + dictWord{133, 0, 778}, + dictWord{ + 133, + 0, + 502, + }, + dictWord{8, 0, 196}, + dictWord{10, 0, 283}, + dictWord{139, 0, 406}, + dictWord{135, 10, 576}, + dictWord{136, 11, 535}, + dictWord{134, 0, 1312}, + dictWord{ + 5, + 10, + 771, + }, + dictWord{5, 10, 863}, + dictWord{5, 10, 898}, + dictWord{6, 10, 1632}, + dictWord{6, 10, 1644}, + dictWord{134, 10, 1780}, + dictWord{5, 0, 855}, + dictWord{5, 10, 331}, + dictWord{135, 11, 1487}, + dictWord{132, 11, 702}, + dictWord{5, 11, 808}, + dictWord{135, 11, 2045}, + dictWord{7, 0, 1400}, + dictWord{ + 9, + 0, + 446, + }, + dictWord{138, 0, 45}, + dictWord{140, 10, 632}, + dictWord{132, 0, 1003}, + dictWord{5, 11, 166}, + dictWord{8, 11, 739}, + dictWord{140, 11, 511}, + dictWord{ + 5, + 10, + 107, + }, + dictWord{7, 10, 201}, + dictWord{136, 10, 518}, + dictWord{6, 10, 446}, + dictWord{135, 10, 1817}, + dictWord{134, 0, 1532}, + dictWord{ + 134, + 0, + 1097, + }, + dictWord{4, 11, 119}, + dictWord{5, 11, 170}, + dictWord{5, 11, 447}, + dictWord{7, 11, 1708}, + dictWord{7, 11, 1889}, + dictWord{9, 11, 357}, + dictWord{ + 9, + 11, + 719, + }, + dictWord{12, 11, 486}, + dictWord{140, 11, 596}, + dictWord{9, 10, 851}, + dictWord{141, 10, 510}, + dictWord{7, 0, 612}, + dictWord{8, 0, 545}, + dictWord{ + 8, + 0, + 568, + }, + dictWord{8, 0, 642}, + dictWord{9, 0, 717}, + dictWord{10, 0, 541}, + dictWord{10, 0, 763}, + dictWord{11, 0, 449}, + dictWord{12, 0, 489}, + dictWord{13, 0, 153}, + dictWord{13, 0, 296}, + dictWord{14, 0, 138}, + dictWord{14, 0, 392}, + dictWord{15, 0, 50}, + dictWord{16, 0, 6}, + dictWord{16, 0, 12}, + dictWord{20, 0, 9}, + dictWord{ + 132, + 10, + 504, + }, + dictWord{4, 11, 450}, + dictWord{135, 11, 1158}, + dictWord{11, 0, 54}, + dictWord{13, 0, 173}, + dictWord{13, 0, 294}, + dictWord{5, 10, 883}, + dictWord{ + 5, + 10, + 975, + }, + dictWord{8, 10, 392}, + dictWord{148, 10, 7}, + dictWord{13, 0, 455}, + dictWord{15, 0, 99}, + dictWord{15, 0, 129}, + dictWord{144, 0, 68}, + dictWord{135, 0, 172}, + dictWord{132, 11, 754}, + dictWord{5, 10, 922}, + dictWord{134, 10, 1707}, + dictWord{134, 0, 1029}, + dictWord{17, 11, 39}, + dictWord{148, 11, 36}, + dictWord{ + 4, + 0, + 568, + }, + dictWord{5, 10, 993}, + dictWord{7, 10, 515}, + dictWord{137, 10, 91}, + dictWord{132, 0, 732}, + dictWord{10, 0, 617}, + dictWord{138, 11, 617}, + dictWord{ + 134, + 0, + 974, + }, + dictWord{7, 0, 989}, + dictWord{10, 0, 377}, + dictWord{12, 0, 363}, + dictWord{13, 0, 68}, + dictWord{13, 0, 94}, + dictWord{14, 0, 108}, + dictWord{ + 142, + 0, + 306, + }, + dictWord{136, 0, 733}, + dictWord{132, 0, 428}, + dictWord{7, 0, 1789}, + dictWord{135, 11, 1062}, + dictWord{7, 0, 2015}, + dictWord{140, 0, 665}, + dictWord{135, 10, 1433}, + dictWord{5, 0, 287}, + dictWord{7, 10, 921}, + dictWord{8, 10, 580}, + dictWord{8, 10, 593}, + dictWord{8, 10, 630}, + dictWord{138, 10, 28}, + dictWord{138, 0, 806}, + dictWord{4, 10, 911}, + dictWord{5, 10, 867}, + dictWord{5, 10, 1013}, + dictWord{7, 10, 2034}, + dictWord{8, 10, 798}, + dictWord{136, 10, 813}, + dictWord{134, 0, 1539}, + dictWord{8, 11, 523}, + dictWord{150, 11, 34}, + dictWord{135, 11, 740}, + dictWord{7, 11, 238}, + dictWord{7, 11, 2033}, + dictWord{ + 8, + 11, + 120, + }, + dictWord{8, 11, 188}, + dictWord{8, 11, 659}, + dictWord{9, 11, 598}, + dictWord{10, 11, 466}, + dictWord{12, 11, 342}, + dictWord{12, 11, 588}, + dictWord{ + 13, + 11, + 503, + }, + dictWord{14, 11, 246}, + dictWord{143, 11, 92}, + dictWord{7, 0, 1563}, + dictWord{141, 0, 182}, + dictWord{5, 10, 135}, + dictWord{6, 10, 519}, + dictWord{ + 7, + 10, + 1722, + }, + dictWord{10, 10, 271}, + dictWord{11, 10, 261}, + dictWord{145, 10, 54}, + dictWord{14, 10, 338}, + dictWord{148, 10, 81}, + dictWord{7, 0, 484}, + dictWord{ + 4, + 10, + 300, + }, + dictWord{133, 10, 436}, + dictWord{145, 11, 114}, + dictWord{6, 0, 1623}, + dictWord{134, 0, 1681}, + dictWord{133, 11, 640}, + dictWord{4, 11, 201}, + dictWord{7, 11, 1744}, + dictWord{8, 11, 602}, + dictWord{11, 11, 247}, + dictWord{11, 11, 826}, + dictWord{145, 11, 65}, + dictWord{8, 11, 164}, + dictWord{ + 146, + 11, + 62, + }, + dictWord{6, 0, 1833}, + dictWord{6, 0, 1861}, + dictWord{136, 0, 878}, + dictWord{134, 0, 1569}, + dictWord{8, 10, 357}, + dictWord{10, 10, 745}, + dictWord{ + 14, + 10, + 426, + }, + dictWord{17, 10, 94}, + dictWord{147, 10, 57}, + dictWord{12, 0, 93}, + dictWord{12, 0, 501}, + dictWord{13, 0, 362}, + dictWord{14, 0, 151}, + dictWord{15, 0, 40}, + dictWord{15, 0, 59}, + dictWord{16, 0, 46}, + dictWord{17, 0, 25}, + dictWord{18, 0, 14}, + dictWord{18, 0, 134}, + dictWord{19, 0, 25}, + dictWord{19, 0, 69}, + dictWord{ + 20, + 0, + 16, + }, + dictWord{20, 0, 19}, + dictWord{20, 0, 66}, + dictWord{21, 0, 23}, + dictWord{21, 0, 25}, + dictWord{150, 0, 42}, + dictWord{6, 0, 1748}, + dictWord{8, 0, 715}, + dictWord{ + 9, + 0, + 802, + }, + dictWord{10, 0, 46}, + dictWord{10, 0, 819}, + dictWord{13, 0, 308}, + dictWord{14, 0, 351}, + dictWord{14, 0, 363}, + dictWord{146, 0, 67}, + dictWord{ + 132, + 0, + 994, + }, + dictWord{4, 0, 63}, + dictWord{133, 0, 347}, + dictWord{132, 0, 591}, + dictWord{133, 0, 749}, + dictWord{7, 11, 1577}, + dictWord{10, 11, 304}, + dictWord{ + 10, + 11, + 549, + }, + dictWord{11, 11, 424}, + dictWord{12, 11, 365}, + dictWord{13, 11, 220}, + dictWord{13, 11, 240}, + dictWord{142, 11, 33}, + dictWord{133, 0, 366}, + dictWord{ + 7, + 0, + 557, + }, + dictWord{12, 0, 547}, + dictWord{14, 0, 86}, + dictWord{133, 10, 387}, + dictWord{135, 0, 1747}, + dictWord{132, 11, 907}, + dictWord{5, 11, 100}, + dictWord{10, 11, 329}, + dictWord{12, 11, 416}, + dictWord{149, 11, 29}, + dictWord{4, 10, 6}, + dictWord{5, 10, 708}, + dictWord{136, 10, 75}, + dictWord{7, 10, 1351}, + dictWord{9, 10, 581}, + dictWord{10, 10, 639}, + dictWord{11, 10, 453}, + dictWord{140, 10, 584}, + dictWord{7, 0, 89}, + dictWord{132, 10, 303}, + dictWord{138, 10, 772}, + dictWord{132, 11, 176}, + dictWord{5, 11, 636}, + dictWord{5, 11, 998}, + dictWord{8, 11, 26}, + dictWord{137, 11, 358}, + dictWord{7, 11, 9}, + dictWord{7, 11, 1508}, + dictWord{9, 11, 317}, + dictWord{10, 11, 210}, + dictWord{10, 11, 292}, + dictWord{10, 11, 533}, + dictWord{11, 11, 555}, + dictWord{12, 11, 526}, + dictWord{ + 12, + 11, + 607, + }, + dictWord{13, 11, 263}, + dictWord{13, 11, 459}, + dictWord{142, 11, 271}, + dictWord{134, 0, 1463}, + dictWord{6, 0, 772}, + dictWord{6, 0, 1137}, + dictWord{ + 139, + 11, + 595, + }, + dictWord{7, 0, 977}, + dictWord{139, 11, 66}, + dictWord{138, 0, 893}, + dictWord{20, 0, 48}, + dictWord{148, 11, 48}, + dictWord{5, 0, 824}, + dictWord{ + 133, + 0, + 941, + }, + dictWord{134, 11, 295}, + dictWord{7, 0, 1543}, + dictWord{7, 0, 1785}, + dictWord{10, 0, 690}, + dictWord{4, 10, 106}, + dictWord{139, 10, 717}, + dictWord{ + 7, + 0, + 440, + }, + dictWord{8, 0, 230}, + dictWord{139, 0, 106}, + dictWord{5, 10, 890}, + dictWord{133, 10, 988}, + dictWord{6, 10, 626}, + dictWord{142, 10, 431}, + dictWord{ + 10, + 11, + 127, + }, + dictWord{141, 11, 27}, + dictWord{17, 0, 32}, + dictWord{10, 10, 706}, + dictWord{150, 10, 44}, + dictWord{132, 0, 216}, + dictWord{137, 0, 332}, + dictWord{4, 10, 698}, + dictWord{136, 11, 119}, + dictWord{139, 11, 267}, + dictWord{138, 10, 17}, + dictWord{11, 11, 526}, + dictWord{11, 11, 939}, + dictWord{ + 141, + 11, + 290, + }, + dictWord{7, 11, 1167}, + dictWord{11, 11, 934}, + dictWord{13, 11, 391}, + dictWord{145, 11, 76}, + dictWord{139, 11, 39}, + dictWord{134, 10, 84}, + dictWord{ + 4, + 0, + 914, + }, + dictWord{5, 0, 800}, + dictWord{133, 0, 852}, + dictWord{10, 0, 416}, + dictWord{141, 0, 115}, + dictWord{7, 0, 564}, + dictWord{142, 0, 168}, + dictWord{ + 4, + 0, + 918, + }, + dictWord{133, 0, 876}, + dictWord{134, 0, 1764}, + dictWord{152, 0, 3}, + dictWord{4, 0, 92}, + dictWord{5, 0, 274}, + dictWord{7, 11, 126}, + dictWord{136, 11, 84}, + dictWord{140, 10, 498}, + dictWord{136, 11, 790}, + dictWord{8, 0, 501}, + dictWord{5, 10, 986}, + dictWord{6, 10, 130}, + dictWord{7, 10, 1582}, + dictWord{ + 8, + 10, + 458, + }, + dictWord{10, 10, 101}, + dictWord{10, 10, 318}, + dictWord{138, 10, 823}, + dictWord{6, 11, 64}, + dictWord{12, 11, 377}, + dictWord{141, 11, 309}, + dictWord{ + 5, + 0, + 743, + }, + dictWord{138, 0, 851}, + dictWord{4, 0, 49}, + dictWord{7, 0, 280}, + dictWord{135, 0, 1633}, + dictWord{134, 0, 879}, + dictWord{136, 0, 47}, + dictWord{ + 7, + 10, + 1644, + }, + dictWord{137, 10, 129}, + dictWord{132, 0, 865}, + dictWord{134, 0, 1202}, + dictWord{9, 11, 34}, + dictWord{139, 11, 484}, + dictWord{135, 10, 997}, + dictWord{5, 0, 272}, + dictWord{5, 0, 908}, + dictWord{5, 0, 942}, + dictWord{8, 0, 197}, + dictWord{9, 0, 47}, + dictWord{11, 0, 538}, + dictWord{139, 0, 742}, + dictWord{ + 6, + 11, + 1700, + }, + dictWord{7, 11, 26}, + dictWord{7, 11, 293}, + dictWord{7, 11, 382}, + dictWord{7, 11, 1026}, + dictWord{7, 11, 1087}, + dictWord{7, 11, 2027}, + dictWord{ + 8, + 11, + 24, + }, + dictWord{8, 11, 114}, + dictWord{8, 11, 252}, + dictWord{8, 11, 727}, + dictWord{8, 11, 729}, + dictWord{9, 11, 30}, + dictWord{9, 11, 199}, + dictWord{9, 11, 231}, + dictWord{9, 11, 251}, + dictWord{9, 11, 334}, + dictWord{9, 11, 361}, + dictWord{9, 11, 488}, + dictWord{9, 11, 712}, + dictWord{10, 11, 55}, + dictWord{10, 11, 60}, + dictWord{ + 10, + 11, + 232, + }, + dictWord{10, 11, 332}, + dictWord{10, 11, 384}, + dictWord{10, 11, 396}, + dictWord{10, 11, 504}, + dictWord{10, 11, 542}, + dictWord{10, 11, 652}, + dictWord{11, 11, 20}, + dictWord{11, 11, 48}, + dictWord{11, 11, 207}, + dictWord{11, 11, 291}, + dictWord{11, 11, 298}, + dictWord{11, 11, 342}, + dictWord{ + 11, + 11, + 365, + }, + dictWord{11, 11, 394}, + dictWord{11, 11, 620}, + dictWord{11, 11, 705}, + dictWord{11, 11, 1017}, + dictWord{12, 11, 123}, + dictWord{12, 11, 340}, + dictWord{12, 11, 406}, + dictWord{12, 11, 643}, + dictWord{13, 11, 61}, + dictWord{13, 11, 269}, + dictWord{13, 11, 311}, + dictWord{13, 11, 319}, + dictWord{13, 11, 486}, + dictWord{14, 11, 234}, + dictWord{15, 11, 62}, + dictWord{15, 11, 85}, + dictWord{16, 11, 71}, + dictWord{18, 11, 119}, + dictWord{148, 11, 105}, + dictWord{ + 6, + 0, + 1455, + }, + dictWord{150, 11, 37}, + dictWord{135, 10, 1927}, + dictWord{135, 0, 1911}, + dictWord{137, 0, 891}, + dictWord{7, 10, 1756}, + dictWord{137, 10, 98}, + dictWord{7, 10, 1046}, + dictWord{139, 10, 160}, + dictWord{132, 0, 761}, + dictWord{6, 11, 379}, + dictWord{7, 11, 270}, + dictWord{7, 11, 1116}, + dictWord{ + 8, + 11, + 176, + }, + dictWord{8, 11, 183}, + dictWord{9, 11, 432}, + dictWord{9, 11, 661}, + dictWord{12, 11, 247}, + dictWord{12, 11, 617}, + dictWord{146, 11, 125}, + dictWord{ + 6, + 10, + 45, + }, + dictWord{7, 10, 433}, + dictWord{8, 10, 129}, + dictWord{9, 10, 21}, + dictWord{10, 10, 392}, + dictWord{11, 10, 79}, + dictWord{12, 10, 499}, + dictWord{ + 13, + 10, + 199, + }, + dictWord{141, 10, 451}, + dictWord{4, 0, 407}, + dictWord{5, 11, 792}, + dictWord{133, 11, 900}, + dictWord{132, 0, 560}, + dictWord{135, 0, 183}, + dictWord{ + 13, + 0, + 490, + }, + dictWord{7, 10, 558}, + dictWord{136, 10, 353}, + dictWord{4, 0, 475}, + dictWord{6, 0, 731}, + dictWord{11, 0, 35}, + dictWord{13, 0, 71}, + dictWord{13, 0, 177}, + dictWord{14, 0, 422}, + dictWord{133, 10, 785}, + dictWord{8, 10, 81}, + dictWord{9, 10, 189}, + dictWord{9, 10, 201}, + dictWord{11, 10, 478}, + dictWord{11, 10, 712}, + dictWord{141, 10, 338}, + dictWord{4, 0, 418}, + dictWord{4, 0, 819}, + dictWord{133, 10, 353}, + dictWord{151, 10, 26}, + dictWord{4, 11, 901}, + dictWord{ + 133, + 11, + 776, + }, + dictWord{132, 0, 575}, + dictWord{7, 0, 818}, + dictWord{16, 0, 92}, + dictWord{17, 0, 14}, + dictWord{17, 0, 45}, + dictWord{18, 0, 75}, + dictWord{148, 0, 18}, + dictWord{ + 6, + 0, + 222, + }, + dictWord{7, 0, 636}, + dictWord{7, 0, 1620}, + dictWord{8, 0, 409}, + dictWord{9, 0, 693}, + dictWord{139, 0, 77}, + dictWord{6, 10, 25}, + dictWord{7, 10, 855}, + dictWord{7, 10, 1258}, + dictWord{144, 10, 32}, + dictWord{6, 0, 1880}, + dictWord{6, 0, 1887}, + dictWord{6, 0, 1918}, + dictWord{6, 0, 1924}, + dictWord{9, 0, 967}, + dictWord{9, 0, 995}, + dictWord{9, 0, 1015}, + dictWord{12, 0, 826}, + dictWord{12, 0, 849}, + dictWord{12, 0, 857}, + dictWord{12, 0, 860}, + dictWord{12, 0, 886}, + dictWord{ + 12, + 0, + 932, + }, + dictWord{18, 0, 228}, + dictWord{18, 0, 231}, + dictWord{146, 0, 240}, + dictWord{134, 0, 633}, + dictWord{134, 0, 1308}, + dictWord{4, 11, 37}, + dictWord{ + 5, + 11, + 334, + }, + dictWord{135, 11, 1253}, + dictWord{10, 0, 86}, + dictWord{4, 10, 4}, + dictWord{7, 10, 1118}, + dictWord{7, 10, 1320}, + dictWord{7, 10, 1706}, + dictWord{ + 8, + 10, + 277, + }, + dictWord{9, 10, 622}, + dictWord{11, 10, 724}, + dictWord{12, 10, 350}, + dictWord{12, 10, 397}, + dictWord{13, 10, 28}, + dictWord{13, 10, 159}, + dictWord{ + 15, + 10, + 89, + }, + dictWord{18, 10, 5}, + dictWord{19, 10, 9}, + dictWord{20, 10, 34}, + dictWord{150, 10, 47}, + dictWord{132, 11, 508}, + dictWord{137, 11, 448}, + dictWord{ + 12, + 11, + 107, + }, + dictWord{146, 11, 31}, + dictWord{132, 0, 817}, + dictWord{134, 0, 663}, + dictWord{133, 0, 882}, + dictWord{134, 0, 914}, + dictWord{132, 11, 540}, + dictWord{132, 11, 533}, + dictWord{136, 11, 608}, + dictWord{8, 0, 885}, + dictWord{138, 0, 865}, + dictWord{132, 0, 426}, + dictWord{6, 0, 58}, + dictWord{7, 0, 745}, + dictWord{7, 0, 1969}, + dictWord{8, 0, 399}, + dictWord{8, 0, 675}, + dictWord{9, 0, 479}, + dictWord{9, 0, 731}, + dictWord{10, 0, 330}, + dictWord{10, 0, 593}, + dictWord{ + 10, + 0, + 817, + }, + dictWord{11, 0, 32}, + dictWord{11, 0, 133}, + dictWord{11, 0, 221}, + dictWord{145, 0, 68}, + dictWord{134, 10, 255}, + dictWord{7, 0, 102}, + dictWord{ + 137, + 0, + 538, + }, + dictWord{137, 10, 216}, + dictWord{7, 11, 253}, + dictWord{136, 11, 549}, + dictWord{135, 11, 912}, + dictWord{9, 10, 183}, + dictWord{139, 10, 286}, + dictWord{11, 10, 956}, + dictWord{151, 10, 3}, + dictWord{8, 11, 527}, + dictWord{18, 11, 60}, + dictWord{147, 11, 24}, + dictWord{4, 10, 536}, + dictWord{7, 10, 1141}, + dictWord{10, 10, 723}, + dictWord{139, 10, 371}, + dictWord{133, 11, 920}, + dictWord{7, 0, 876}, + dictWord{135, 10, 285}, + dictWord{135, 10, 560}, + dictWord{ + 132, + 10, + 690, + }, + dictWord{142, 11, 126}, + dictWord{11, 10, 33}, + dictWord{12, 10, 571}, + dictWord{149, 10, 1}, + dictWord{133, 0, 566}, + dictWord{9, 0, 139}, + dictWord{ + 10, + 0, + 399, + }, + dictWord{11, 0, 469}, + dictWord{12, 0, 634}, + dictWord{13, 0, 223}, + dictWord{132, 11, 483}, + dictWord{6, 0, 48}, + dictWord{135, 0, 63}, + dictWord{18, 0, 12}, + dictWord{7, 10, 1862}, + dictWord{12, 10, 491}, + dictWord{12, 10, 520}, + dictWord{13, 10, 383}, + dictWord{142, 10, 244}, + dictWord{135, 11, 1665}, + dictWord{132, 11, 448}, + dictWord{9, 11, 495}, + dictWord{146, 11, 104}, + dictWord{6, 0, 114}, + dictWord{7, 0, 1224}, + dictWord{7, 0, 1556}, + dictWord{136, 0, 3}, + dictWord{ + 4, + 10, + 190, + }, + dictWord{133, 10, 554}, + dictWord{8, 0, 576}, + dictWord{9, 0, 267}, + dictWord{133, 10, 1001}, + dictWord{133, 10, 446}, + dictWord{133, 0, 933}, + dictWord{139, 11, 1009}, + dictWord{8, 11, 653}, + dictWord{13, 11, 93}, + dictWord{147, 11, 14}, + dictWord{6, 0, 692}, + dictWord{6, 0, 821}, + dictWord{134, 0, 1077}, + dictWord{5, 11, 172}, + dictWord{135, 11, 801}, + dictWord{138, 0, 752}, + dictWord{4, 0, 375}, + dictWord{134, 0, 638}, + dictWord{134, 0, 1011}, + dictWord{ + 140, + 11, + 540, + }, + dictWord{9, 0, 96}, + dictWord{133, 11, 260}, + dictWord{139, 11, 587}, + dictWord{135, 10, 1231}, + dictWord{12, 0, 30}, + dictWord{13, 0, 148}, + dictWord{ + 14, + 0, + 87, + }, + dictWord{14, 0, 182}, + dictWord{16, 0, 42}, + dictWord{20, 0, 70}, + dictWord{132, 10, 304}, + dictWord{6, 0, 1398}, + dictWord{7, 0, 56}, + dictWord{7, 0, 1989}, + dictWord{8, 0, 337}, + dictWord{8, 0, 738}, + dictWord{9, 0, 600}, + dictWord{12, 0, 37}, + dictWord{13, 0, 447}, + dictWord{142, 0, 92}, + dictWord{138, 0, 666}, + dictWord{ + 5, + 0, + 394, + }, + dictWord{7, 0, 487}, + dictWord{136, 0, 246}, + dictWord{9, 0, 437}, + dictWord{6, 10, 53}, + dictWord{6, 10, 199}, + dictWord{7, 10, 1408}, + dictWord{8, 10, 32}, + dictWord{8, 10, 93}, + dictWord{10, 10, 397}, + dictWord{10, 10, 629}, + dictWord{11, 10, 593}, + dictWord{11, 10, 763}, + dictWord{13, 10, 326}, + dictWord{145, 10, 35}, + dictWord{134, 10, 105}, + dictWord{9, 0, 320}, + dictWord{10, 0, 506}, + dictWord{138, 10, 794}, + dictWord{7, 11, 57}, + dictWord{8, 11, 167}, + dictWord{8, 11, 375}, + dictWord{9, 11, 82}, + dictWord{9, 11, 561}, + dictWord{10, 11, 620}, + dictWord{10, 11, 770}, + dictWord{11, 10, 704}, + dictWord{141, 10, 396}, + dictWord{6, 0, 1003}, + dictWord{5, 10, 114}, + dictWord{5, 10, 255}, + dictWord{141, 10, 285}, + dictWord{7, 0, 866}, + dictWord{135, 0, 1163}, + dictWord{133, 11, 531}, + dictWord{ + 132, + 0, + 328, + }, + dictWord{7, 10, 2035}, + dictWord{8, 10, 19}, + dictWord{9, 10, 89}, + dictWord{138, 10, 831}, + dictWord{8, 11, 194}, + dictWord{136, 11, 756}, + dictWord{ + 136, + 0, + 1000, + }, + dictWord{5, 11, 453}, + dictWord{134, 11, 441}, + dictWord{4, 0, 101}, + dictWord{5, 0, 833}, + dictWord{7, 0, 1171}, + dictWord{136, 0, 744}, + dictWord{ + 133, + 0, + 726, + }, + dictWord{136, 10, 746}, + dictWord{138, 0, 176}, + dictWord{6, 0, 9}, + dictWord{6, 0, 397}, + dictWord{7, 0, 53}, + dictWord{7, 0, 1742}, + dictWord{10, 0, 632}, + dictWord{11, 0, 828}, + dictWord{140, 0, 146}, + dictWord{135, 11, 22}, + dictWord{145, 11, 64}, + dictWord{132, 0, 839}, + dictWord{11, 0, 417}, + dictWord{12, 0, 223}, + dictWord{140, 0, 265}, + dictWord{4, 11, 102}, + dictWord{7, 11, 815}, + dictWord{7, 11, 1699}, + dictWord{139, 11, 964}, + dictWord{5, 10, 955}, + dictWord{ + 136, + 10, + 814, + }, + dictWord{6, 0, 1931}, + dictWord{6, 0, 2007}, + dictWord{18, 0, 246}, + dictWord{146, 0, 247}, + dictWord{8, 0, 198}, + dictWord{11, 0, 29}, + dictWord{140, 0, 534}, + dictWord{135, 0, 1771}, + dictWord{6, 0, 846}, + dictWord{7, 11, 1010}, + dictWord{11, 11, 733}, + dictWord{11, 11, 759}, + dictWord{12, 11, 563}, + dictWord{ + 13, + 11, + 34, + }, + dictWord{14, 11, 101}, + dictWord{18, 11, 45}, + dictWord{146, 11, 129}, + dictWord{4, 0, 186}, + dictWord{5, 0, 157}, + dictWord{8, 0, 168}, + dictWord{138, 0, 6}, + dictWord{132, 11, 899}, + dictWord{133, 10, 56}, + dictWord{148, 10, 100}, + dictWord{133, 0, 875}, + dictWord{5, 0, 773}, + dictWord{5, 0, 991}, + dictWord{6, 0, 1635}, + dictWord{134, 0, 1788}, + dictWord{6, 0, 1274}, + dictWord{9, 0, 477}, + dictWord{141, 0, 78}, + dictWord{4, 0, 639}, + dictWord{7, 0, 111}, + dictWord{8, 0, 581}, + dictWord{ + 12, + 0, + 177, + }, + dictWord{6, 11, 52}, + dictWord{9, 11, 104}, + dictWord{9, 11, 559}, + dictWord{10, 10, 4}, + dictWord{10, 10, 13}, + dictWord{11, 10, 638}, + dictWord{ + 12, + 11, + 308, + }, + dictWord{19, 11, 87}, + dictWord{148, 10, 57}, + dictWord{132, 11, 604}, + dictWord{4, 11, 301}, + dictWord{133, 10, 738}, + dictWord{133, 10, 758}, + dictWord{134, 0, 1747}, + dictWord{7, 11, 1440}, + dictWord{11, 11, 854}, + dictWord{11, 11, 872}, + dictWord{11, 11, 921}, + dictWord{12, 11, 551}, + dictWord{ + 13, + 11, + 472, + }, + dictWord{142, 11, 367}, + dictWord{7, 0, 1364}, + dictWord{7, 0, 1907}, + dictWord{141, 0, 158}, + dictWord{134, 0, 873}, + dictWord{4, 0, 404}, + dictWord{ + 4, + 0, + 659, + }, + dictWord{7, 0, 552}, + dictWord{135, 0, 675}, + dictWord{135, 10, 1112}, + dictWord{139, 10, 328}, + dictWord{7, 11, 508}, + dictWord{137, 10, 133}, + dictWord{133, 0, 391}, + dictWord{5, 10, 110}, + dictWord{6, 10, 169}, + dictWord{6, 10, 1702}, + dictWord{7, 10, 400}, + dictWord{8, 10, 538}, + dictWord{9, 10, 184}, + dictWord{ + 9, + 10, + 524, + }, + dictWord{140, 10, 218}, + dictWord{6, 11, 310}, + dictWord{7, 11, 1849}, + dictWord{8, 11, 72}, + dictWord{8, 11, 272}, + dictWord{8, 11, 431}, + dictWord{ + 9, + 11, + 12, + }, + dictWord{9, 11, 351}, + dictWord{10, 11, 563}, + dictWord{10, 11, 630}, + dictWord{10, 11, 810}, + dictWord{11, 11, 367}, + dictWord{11, 11, 599}, + dictWord{11, 11, 686}, + dictWord{140, 11, 672}, + dictWord{5, 0, 540}, + dictWord{6, 0, 1697}, + dictWord{136, 0, 668}, + dictWord{132, 0, 883}, + dictWord{134, 0, 78}, + dictWord{12, 0, 628}, + dictWord{18, 0, 79}, + dictWord{6, 10, 133}, + dictWord{9, 10, 353}, + dictWord{139, 10, 993}, + dictWord{6, 11, 181}, + dictWord{7, 11, 537}, + dictWord{ + 8, + 11, + 64, + }, + dictWord{9, 11, 127}, + dictWord{10, 11, 496}, + dictWord{12, 11, 510}, + dictWord{141, 11, 384}, + dictWord{6, 10, 93}, + dictWord{7, 10, 1422}, + dictWord{ + 7, + 10, + 1851, + }, + dictWord{8, 10, 673}, + dictWord{9, 10, 529}, + dictWord{140, 10, 43}, + dictWord{137, 10, 371}, + dictWord{134, 0, 1460}, + dictWord{134, 0, 962}, + dictWord{4, 11, 244}, + dictWord{135, 11, 233}, + dictWord{9, 10, 25}, + dictWord{10, 10, 467}, + dictWord{138, 10, 559}, + dictWord{4, 10, 335}, + dictWord{ + 135, + 10, + 942, + }, + dictWord{133, 0, 460}, + dictWord{135, 11, 334}, + dictWord{134, 11, 1650}, + dictWord{4, 0, 199}, + dictWord{139, 0, 34}, + dictWord{5, 10, 601}, + dictWord{ + 8, + 10, + 39, + }, + dictWord{10, 10, 773}, + dictWord{11, 10, 84}, + dictWord{12, 10, 205}, + dictWord{142, 10, 1}, + dictWord{133, 10, 870}, + dictWord{134, 0, 388}, + dictWord{14, 0, 474}, + dictWord{148, 0, 120}, + dictWord{133, 11, 369}, + dictWord{139, 0, 271}, + dictWord{4, 0, 511}, + dictWord{9, 0, 333}, + dictWord{9, 0, 379}, + dictWord{ + 10, + 0, + 602, + }, + dictWord{11, 0, 441}, + dictWord{11, 0, 723}, + dictWord{11, 0, 976}, + dictWord{12, 0, 357}, + dictWord{132, 10, 181}, + dictWord{134, 0, 608}, + dictWord{134, 10, 1652}, + dictWord{22, 0, 49}, + dictWord{137, 11, 338}, + dictWord{140, 0, 988}, + dictWord{134, 0, 617}, + dictWord{5, 0, 938}, + dictWord{136, 0, 707}, + dictWord{132, 10, 97}, + dictWord{5, 10, 147}, + dictWord{6, 10, 286}, + dictWord{7, 10, 1362}, + dictWord{141, 10, 176}, + dictWord{6, 0, 756}, + dictWord{ + 134, + 0, + 1149, + }, + dictWord{133, 11, 896}, + dictWord{6, 10, 375}, + dictWord{7, 10, 169}, + dictWord{7, 10, 254}, + dictWord{136, 10, 780}, + dictWord{134, 0, 1583}, + dictWord{135, 10, 1447}, + dictWord{139, 0, 285}, + dictWord{7, 11, 1117}, + dictWord{8, 11, 393}, + dictWord{136, 11, 539}, + dictWord{135, 0, 344}, + dictWord{ + 6, + 0, + 469, + }, + dictWord{7, 0, 1709}, + dictWord{138, 0, 515}, + dictWord{5, 10, 629}, + dictWord{135, 10, 1549}, + dictWord{5, 11, 4}, + dictWord{5, 11, 810}, + dictWord{ + 6, + 11, + 13, + }, + dictWord{6, 11, 538}, + dictWord{6, 11, 1690}, + dictWord{6, 11, 1726}, + dictWord{7, 11, 499}, + dictWord{7, 11, 1819}, + dictWord{8, 11, 148}, + dictWord{ + 8, + 11, + 696, + }, + dictWord{8, 11, 791}, + dictWord{12, 11, 125}, + dictWord{13, 11, 54}, + dictWord{143, 11, 9}, + dictWord{135, 11, 1268}, + dictWord{137, 0, 404}, + dictWord{ + 132, + 0, + 500, + }, + dictWord{5, 0, 68}, + dictWord{134, 0, 383}, + dictWord{11, 0, 216}, + dictWord{139, 0, 340}, + dictWord{4, 11, 925}, + dictWord{5, 11, 803}, + dictWord{ + 8, + 11, + 698, + }, + dictWord{138, 11, 828}, + dictWord{4, 0, 337}, + dictWord{6, 0, 353}, + dictWord{7, 0, 1934}, + dictWord{8, 0, 488}, + dictWord{137, 0, 429}, + dictWord{7, 0, 236}, + dictWord{7, 0, 1795}, + dictWord{8, 0, 259}, + dictWord{9, 0, 135}, + dictWord{9, 0, 177}, + dictWord{9, 0, 860}, + dictWord{10, 0, 825}, + dictWord{11, 0, 115}, + dictWord{ + 11, + 0, + 370, + }, + dictWord{11, 0, 405}, + dictWord{11, 0, 604}, + dictWord{12, 0, 10}, + dictWord{12, 0, 667}, + dictWord{12, 0, 669}, + dictWord{13, 0, 76}, + dictWord{14, 0, 310}, + dictWord{15, 0, 76}, + dictWord{15, 0, 147}, + dictWord{148, 0, 23}, + dictWord{4, 0, 15}, + dictWord{4, 0, 490}, + dictWord{5, 0, 22}, + dictWord{6, 0, 244}, + dictWord{7, 0, 40}, + dictWord{7, 0, 200}, + dictWord{7, 0, 906}, + dictWord{7, 0, 1199}, + dictWord{9, 0, 616}, + dictWord{10, 0, 716}, + dictWord{11, 0, 635}, + dictWord{11, 0, 801}, + dictWord{ + 140, + 0, + 458, + }, + dictWord{12, 0, 756}, + dictWord{132, 10, 420}, + dictWord{134, 0, 1504}, + dictWord{6, 0, 757}, + dictWord{133, 11, 383}, + dictWord{6, 0, 1266}, + dictWord{ + 135, + 0, + 1735, + }, + dictWord{5, 0, 598}, + dictWord{7, 0, 791}, + dictWord{8, 0, 108}, + dictWord{9, 0, 123}, + dictWord{7, 10, 1570}, + dictWord{140, 10, 542}, + dictWord{ + 142, + 11, + 410, + }, + dictWord{9, 11, 660}, + dictWord{138, 11, 347}, +} diff --git a/vendor/github.com/andybalholm/brotli/symbol_list.go b/vendor/github.com/andybalholm/brotli/symbol_list.go new file mode 100644 index 0000000000..c5cb49e5a9 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/symbol_list.go @@ -0,0 +1,22 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Utilities for building Huffman decoding tables. */ + +type symbolList struct { + storage []uint16 + offset int +} + +func symbolListGet(sl symbolList, i int) uint16 { + return sl.storage[i+sl.offset] +} + +func symbolListPut(sl symbolList, i int, val uint16) { + sl.storage[i+sl.offset] = val +} diff --git a/vendor/github.com/andybalholm/brotli/transform.go b/vendor/github.com/andybalholm/brotli/transform.go new file mode 100644 index 0000000000..d2c043a622 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/transform.go @@ -0,0 +1,641 @@ +package brotli + +const ( + transformIdentity = 0 + transformOmitLast1 = 1 + transformOmitLast2 = 2 + transformOmitLast3 = 3 + transformOmitLast4 = 4 + transformOmitLast5 = 5 + transformOmitLast6 = 6 + transformOmitLast7 = 7 + transformOmitLast8 = 8 + transformOmitLast9 = 9 + transformUppercaseFirst = 10 + transformUppercaseAll = 11 + transformOmitFirst1 = 12 + transformOmitFirst2 = 13 + transformOmitFirst3 = 14 + transformOmitFirst4 = 15 + transformOmitFirst5 = 16 + transformOmitFirst6 = 17 + transformOmitFirst7 = 18 + transformOmitFirst8 = 19 + transformOmitFirst9 = 20 + transformShiftFirst = 21 + transformShiftAll = 22 + iota - 22 + numTransformTypes +) + +const transformsMaxCutOff = transformOmitLast9 + +type transforms struct { + prefix_suffix_size uint16 + prefix_suffix []byte + prefix_suffix_map []uint16 + num_transforms uint32 + transforms []byte + params []byte + cutOffTransforms [transformsMaxCutOff + 1]int16 +} + +func transformPrefixId(t *transforms, I int) byte { + return t.transforms[(I*3)+0] +} + +func transformType(t *transforms, I int) byte { + return t.transforms[(I*3)+1] +} + +func transformSuffixId(t *transforms, I int) byte { + return t.transforms[(I*3)+2] +} + +func transformPrefix(t *transforms, I int) []byte { + return t.prefix_suffix[t.prefix_suffix_map[transformPrefixId(t, I)]:] +} + +func transformSuffix(t *transforms, I int) []byte { + return t.prefix_suffix[t.prefix_suffix_map[transformSuffixId(t, I)]:] +} + +/* RFC 7932 transforms string data */ +const kPrefixSuffix string = "\001 \002, \010 of the \004 of \002s \001.\005 and \004 " + "in \001\"\004 to \002\">\001\n\002. \001]\005 for \003 a \006 " + "that \001'\006 with \006 from \004 by \001(\006. T" + "he \004 on \004 as \004 is \004ing \002\n\t\001:\003ed " + "\002=\"\004 at \003ly \001,\002='\005.com/\007. This \005" + " not \003er \003al \004ful \004ive \005less \004es" + "t \004ize \002\xc2\xa0\004ous \005 the \002e \000" + +var kPrefixSuffixMap = [50]uint16{ + 0x00, + 0x02, + 0x05, + 0x0E, + 0x13, + 0x16, + 0x18, + 0x1E, + 0x23, + 0x25, + 0x2A, + 0x2D, + 0x2F, + 0x32, + 0x34, + 0x3A, + 0x3E, + 0x45, + 0x47, + 0x4E, + 0x55, + 0x5A, + 0x5C, + 0x63, + 0x68, + 0x6D, + 0x72, + 0x77, + 0x7A, + 0x7C, + 0x80, + 0x83, + 0x88, + 0x8C, + 0x8E, + 0x91, + 0x97, + 0x9F, + 0xA5, + 0xA9, + 0xAD, + 0xB2, + 0xB7, + 0xBD, + 0xC2, + 0xC7, + 0xCA, + 0xCF, + 0xD5, + 0xD8, +} + +/* RFC 7932 transforms */ +var kTransformsData = []byte{ + 49, + transformIdentity, + 49, + 49, + transformIdentity, + 0, + 0, + transformIdentity, + 0, + 49, + transformOmitFirst1, + 49, + 49, + transformUppercaseFirst, + 0, + 49, + transformIdentity, + 47, + 0, + transformIdentity, + 49, + 4, + transformIdentity, + 0, + 49, + transformIdentity, + 3, + 49, + transformUppercaseFirst, + 49, + 49, + transformIdentity, + 6, + 49, + transformOmitFirst2, + 49, + 49, + transformOmitLast1, + 49, + 1, + transformIdentity, + 0, + 49, + transformIdentity, + 1, + 0, + transformUppercaseFirst, + 0, + 49, + transformIdentity, + 7, + 49, + transformIdentity, + 9, + 48, + transformIdentity, + 0, + 49, + transformIdentity, + 8, + 49, + transformIdentity, + 5, + 49, + transformIdentity, + 10, + 49, + transformIdentity, + 11, + 49, + transformOmitLast3, + 49, + 49, + transformIdentity, + 13, + 49, + transformIdentity, + 14, + 49, + transformOmitFirst3, + 49, + 49, + transformOmitLast2, + 49, + 49, + transformIdentity, + 15, + 49, + transformIdentity, + 16, + 0, + transformUppercaseFirst, + 49, + 49, + transformIdentity, + 12, + 5, + transformIdentity, + 49, + 0, + transformIdentity, + 1, + 49, + transformOmitFirst4, + 49, + 49, + transformIdentity, + 18, + 49, + transformIdentity, + 17, + 49, + transformIdentity, + 19, + 49, + transformIdentity, + 20, + 49, + transformOmitFirst5, + 49, + 49, + transformOmitFirst6, + 49, + 47, + transformIdentity, + 49, + 49, + transformOmitLast4, + 49, + 49, + transformIdentity, + 22, + 49, + transformUppercaseAll, + 49, + 49, + transformIdentity, + 23, + 49, + transformIdentity, + 24, + 49, + transformIdentity, + 25, + 49, + transformOmitLast7, + 49, + 49, + transformOmitLast1, + 26, + 49, + transformIdentity, + 27, + 49, + transformIdentity, + 28, + 0, + transformIdentity, + 12, + 49, + transformIdentity, + 29, + 49, + transformOmitFirst9, + 49, + 49, + transformOmitFirst7, + 49, + 49, + transformOmitLast6, + 49, + 49, + transformIdentity, + 21, + 49, + transformUppercaseFirst, + 1, + 49, + transformOmitLast8, + 49, + 49, + transformIdentity, + 31, + 49, + transformIdentity, + 32, + 47, + transformIdentity, + 3, + 49, + transformOmitLast5, + 49, + 49, + transformOmitLast9, + 49, + 0, + transformUppercaseFirst, + 1, + 49, + transformUppercaseFirst, + 8, + 5, + transformIdentity, + 21, + 49, + transformUppercaseAll, + 0, + 49, + transformUppercaseFirst, + 10, + 49, + transformIdentity, + 30, + 0, + transformIdentity, + 5, + 35, + transformIdentity, + 49, + 47, + transformIdentity, + 2, + 49, + transformUppercaseFirst, + 17, + 49, + transformIdentity, + 36, + 49, + transformIdentity, + 33, + 5, + transformIdentity, + 0, + 49, + transformUppercaseFirst, + 21, + 49, + transformUppercaseFirst, + 5, + 49, + transformIdentity, + 37, + 0, + transformIdentity, + 30, + 49, + transformIdentity, + 38, + 0, + transformUppercaseAll, + 0, + 49, + transformIdentity, + 39, + 0, + transformUppercaseAll, + 49, + 49, + transformIdentity, + 34, + 49, + transformUppercaseAll, + 8, + 49, + transformUppercaseFirst, + 12, + 0, + transformIdentity, + 21, + 49, + transformIdentity, + 40, + 0, + transformUppercaseFirst, + 12, + 49, + transformIdentity, + 41, + 49, + transformIdentity, + 42, + 49, + transformUppercaseAll, + 17, + 49, + transformIdentity, + 43, + 0, + transformUppercaseFirst, + 5, + 49, + transformUppercaseAll, + 10, + 0, + transformIdentity, + 34, + 49, + transformUppercaseFirst, + 33, + 49, + transformIdentity, + 44, + 49, + transformUppercaseAll, + 5, + 45, + transformIdentity, + 49, + 0, + transformIdentity, + 33, + 49, + transformUppercaseFirst, + 30, + 49, + transformUppercaseAll, + 30, + 49, + transformIdentity, + 46, + 49, + transformUppercaseAll, + 1, + 49, + transformUppercaseFirst, + 34, + 0, + transformUppercaseFirst, + 33, + 0, + transformUppercaseAll, + 30, + 0, + transformUppercaseAll, + 1, + 49, + transformUppercaseAll, + 33, + 49, + transformUppercaseAll, + 21, + 49, + transformUppercaseAll, + 12, + 0, + transformUppercaseAll, + 5, + 49, + transformUppercaseAll, + 34, + 0, + transformUppercaseAll, + 12, + 0, + transformUppercaseFirst, + 30, + 0, + transformUppercaseAll, + 34, + 0, + transformUppercaseFirst, + 34, +} + +var kBrotliTransforms = transforms{ + 217, + []byte(kPrefixSuffix), + kPrefixSuffixMap[:], + 121, + kTransformsData, + nil, /* no extra parameters */ + [transformsMaxCutOff + 1]int16{0, 12, 27, 23, 42, 63, 56, 48, 59, 64}, +} + +func getTransforms() *transforms { + return &kBrotliTransforms +} + +func toUpperCase(p []byte) int { + if p[0] < 0xC0 { + if p[0] >= 'a' && p[0] <= 'z' { + p[0] ^= 32 + } + + return 1 + } + + /* An overly simplified uppercasing model for UTF-8. */ + if p[0] < 0xE0 { + p[1] ^= 32 + return 2 + } + + /* An arbitrary transform for three byte characters. */ + p[2] ^= 5 + + return 3 +} + +func shiftTransform(word []byte, word_len int, parameter uint16) int { + /* Limited sign extension: scalar < (1 << 24). */ + var scalar uint32 = (uint32(parameter) & 0x7FFF) + (0x1000000 - (uint32(parameter) & 0x8000)) + if word[0] < 0x80 { + /* 1-byte rune / 0sssssss / 7 bit scalar (ASCII). */ + scalar += uint32(word[0]) + + word[0] = byte(scalar & 0x7F) + return 1 + } else if word[0] < 0xC0 { + /* Continuation / 10AAAAAA. */ + return 1 + } else if word[0] < 0xE0 { + /* 2-byte rune / 110sssss AAssssss / 11 bit scalar. */ + if word_len < 2 { + return 1 + } + scalar += uint32(word[1]&0x3F | (word[0]&0x1F)<<6) + word[0] = byte(0xC0 | (scalar>>6)&0x1F) + word[1] = byte(uint32(word[1]&0xC0) | scalar&0x3F) + return 2 + } else if word[0] < 0xF0 { + /* 3-byte rune / 1110ssss AAssssss BBssssss / 16 bit scalar. */ + if word_len < 3 { + return word_len + } + scalar += uint32(word[2])&0x3F | uint32(word[1]&0x3F)<<6 | uint32(word[0]&0x0F)<<12 + word[0] = byte(0xE0 | (scalar>>12)&0x0F) + word[1] = byte(uint32(word[1]&0xC0) | (scalar>>6)&0x3F) + word[2] = byte(uint32(word[2]&0xC0) | scalar&0x3F) + return 3 + } else if word[0] < 0xF8 { + /* 4-byte rune / 11110sss AAssssss BBssssss CCssssss / 21 bit scalar. */ + if word_len < 4 { + return word_len + } + scalar += uint32(word[3])&0x3F | uint32(word[2]&0x3F)<<6 | uint32(word[1]&0x3F)<<12 | uint32(word[0]&0x07)<<18 + word[0] = byte(0xF0 | (scalar>>18)&0x07) + word[1] = byte(uint32(word[1]&0xC0) | (scalar>>12)&0x3F) + word[2] = byte(uint32(word[2]&0xC0) | (scalar>>6)&0x3F) + word[3] = byte(uint32(word[3]&0xC0) | scalar&0x3F) + return 4 + } + + return 1 +} + +func transformDictionaryWord(dst []byte, word []byte, len int, trans *transforms, transform_idx int) int { + var idx int = 0 + var prefix []byte = transformPrefix(trans, transform_idx) + var type_ byte = transformType(trans, transform_idx) + var suffix []byte = transformSuffix(trans, transform_idx) + { + var prefix_len int = int(prefix[0]) + prefix = prefix[1:] + for { + tmp1 := prefix_len + prefix_len-- + if tmp1 == 0 { + break + } + dst[idx] = prefix[0] + idx++ + prefix = prefix[1:] + } + } + { + var t int = int(type_) + var i int = 0 + if t <= transformOmitLast9 { + len -= t + } else if t >= transformOmitFirst1 && t <= transformOmitFirst9 { + var skip int = t - (transformOmitFirst1 - 1) + word = word[skip:] + len -= skip + } + + for i < len { + dst[idx] = word[i] + idx++ + i++ + } + if t == transformUppercaseFirst { + toUpperCase(dst[idx-len:]) + } else if t == transformUppercaseAll { + var uppercase []byte = dst + uppercase = uppercase[idx-len:] + for len > 0 { + var step int = toUpperCase(uppercase) + uppercase = uppercase[step:] + len -= step + } + } else if t == transformShiftFirst { + var param uint16 = uint16(trans.params[transform_idx*2]) + uint16(trans.params[transform_idx*2+1])<<8 + shiftTransform(dst[idx-len:], int(len), param) + } else if t == transformShiftAll { + var param uint16 = uint16(trans.params[transform_idx*2]) + uint16(trans.params[transform_idx*2+1])<<8 + var shift []byte = dst + shift = shift[idx-len:] + for len > 0 { + var step int = shiftTransform(shift, int(len), param) + shift = shift[step:] + len -= step + } + } + } + { + var suffix_len int = int(suffix[0]) + suffix = suffix[1:] + for { + tmp2 := suffix_len + suffix_len-- + if tmp2 == 0 { + break + } + dst[idx] = suffix[0] + idx++ + suffix = suffix[1:] + } + return idx + } +} diff --git a/vendor/github.com/andybalholm/brotli/utf8_util.go b/vendor/github.com/andybalholm/brotli/utf8_util.go new file mode 100644 index 0000000000..3244247eec --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/utf8_util.go @@ -0,0 +1,70 @@ +package brotli + +/* Copyright 2013 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Heuristics for deciding about the UTF8-ness of strings. */ + +const kMinUTF8Ratio float64 = 0.75 + +/* Returns 1 if at least min_fraction of the bytes between pos and + pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise + returns 0. */ +func parseAsUTF8(symbol *int, input []byte, size uint) uint { + /* ASCII */ + if input[0]&0x80 == 0 { + *symbol = int(input[0]) + if *symbol > 0 { + return 1 + } + } + + /* 2-byte UTF8 */ + if size > 1 && input[0]&0xE0 == 0xC0 && input[1]&0xC0 == 0x80 { + *symbol = (int(input[0])&0x1F)<<6 | int(input[1])&0x3F + if *symbol > 0x7F { + return 2 + } + } + + /* 3-byte UFT8 */ + if size > 2 && input[0]&0xF0 == 0xE0 && input[1]&0xC0 == 0x80 && input[2]&0xC0 == 0x80 { + *symbol = (int(input[0])&0x0F)<<12 | (int(input[1])&0x3F)<<6 | int(input[2])&0x3F + if *symbol > 0x7FF { + return 3 + } + } + + /* 4-byte UFT8 */ + if size > 3 && input[0]&0xF8 == 0xF0 && input[1]&0xC0 == 0x80 && input[2]&0xC0 == 0x80 && input[3]&0xC0 == 0x80 { + *symbol = (int(input[0])&0x07)<<18 | (int(input[1])&0x3F)<<12 | (int(input[2])&0x3F)<<6 | int(input[3])&0x3F + if *symbol > 0xFFFF && *symbol <= 0x10FFFF { + return 4 + } + } + + /* Not UTF8, emit a special symbol above the UTF8-code space */ + *symbol = 0x110000 | int(input[0]) + + return 1 +} + +/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/ +func isMostlyUTF8(data []byte, pos uint, mask uint, length uint, min_fraction float64) bool { + var size_utf8 uint = 0 + var i uint = 0 + for i < length { + var symbol int + current_data := data[(pos+i)&mask:] + var bytes_read uint = parseAsUTF8(&symbol, current_data, length-i) + i += bytes_read + if symbol < 0x110000 { + size_utf8 += bytes_read + } + } + + return float64(size_utf8) > min_fraction*float64(length) +} diff --git a/vendor/github.com/andybalholm/brotli/util.go b/vendor/github.com/andybalholm/brotli/util.go new file mode 100644 index 0000000000..a84553a639 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/util.go @@ -0,0 +1,7 @@ +package brotli + +func assert(cond bool) { + if !cond { + panic("assertion failure") + } +} diff --git a/vendor/github.com/andybalholm/brotli/write_bits.go b/vendor/github.com/andybalholm/brotli/write_bits.go new file mode 100644 index 0000000000..8729901198 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/write_bits.go @@ -0,0 +1,52 @@ +package brotli + +import "encoding/binary" + +/* Copyright 2010 Google Inc. All Rights Reserved. + + Distributed under MIT license. + See file LICENSE for detail or copy at https://opensource.org/licenses/MIT +*/ + +/* Write bits into a byte array. */ + +/* This function writes bits into bytes in increasing addresses, and within + a byte least-significant-bit first. + + The function can write up to 56 bits in one go with WriteBits + Example: let's assume that 3 bits (Rs below) have been written already: + + BYTE-0 BYTE+1 BYTE+2 + + 0000 0RRR 0000 0000 0000 0000 + + Now, we could write 5 or less bits in MSB by just sifting by 3 + and OR'ing to BYTE-0. + + For n bits, we take the last 5 bits, OR that with high bits in BYTE-0, + and locate the rest in BYTE+1, BYTE+2, etc. */ +func writeBits(n_bits uint, bits uint64, pos *uint, array []byte) { + /* This branch of the code can write up to 56 bits at a time, + 7 bits are lost by being perhaps already in *p and at least + 1 bit is needed to initialize the bit-stream ahead (i.e. if 7 + bits are in *p and we write 57 bits, then the next write will + access a byte that was never initialized). */ + p := array[*pos>>3:] + v := uint64(p[0]) + v |= bits << (*pos & 7) + binary.LittleEndian.PutUint64(p, v) + *pos += n_bits +} + +func writeSingleBit(bit bool, pos *uint, array []byte) { + if bit { + writeBits(1, 1, pos, array) + } else { + writeBits(1, 0, pos, array) + } +} + +func writeBitsPrepareStorage(pos uint, array []byte) { + assert(pos&7 == 0) + array[pos>>3] = 0 +} diff --git a/vendor/github.com/andybalholm/brotli/writer.go b/vendor/github.com/andybalholm/brotli/writer.go new file mode 100644 index 0000000000..39feaef521 --- /dev/null +++ b/vendor/github.com/andybalholm/brotli/writer.go @@ -0,0 +1,119 @@ +package brotli + +import ( + "errors" + "io" +) + +const ( + BestSpeed = 0 + BestCompression = 11 + DefaultCompression = 6 +) + +// WriterOptions configures Writer. +type WriterOptions struct { + // Quality controls the compression-speed vs compression-density trade-offs. + // The higher the quality, the slower the compression. Range is 0 to 11. + Quality int + // LGWin is the base 2 logarithm of the sliding window size. + // Range is 10 to 24. 0 indicates automatic configuration based on Quality. + LGWin int +} + +var ( + errEncode = errors.New("brotli: encode error") + errWriterClosed = errors.New("brotli: Writer is closed") +) + +// Writes to the returned writer are compressed and written to dst. +// It is the caller's responsibility to call Close on the Writer when done. +// Writes may be buffered and not flushed until Close. +func NewWriter(dst io.Writer) *Writer { + return NewWriterLevel(dst, DefaultCompression) +} + +// NewWriterLevel is like NewWriter but specifies the compression level instead +// of assuming DefaultCompression. +// The compression level can be DefaultCompression or any integer value between +// BestSpeed and BestCompression inclusive. +func NewWriterLevel(dst io.Writer, level int) *Writer { + return NewWriterOptions(dst, WriterOptions{ + Quality: level, + }) +} + +// NewWriterOptions is like NewWriter but specifies WriterOptions +func NewWriterOptions(dst io.Writer, options WriterOptions) *Writer { + w := new(Writer) + w.options = options + w.Reset(dst) + return w +} + +// Reset discards the Writer's state and makes it equivalent to the result of +// its original state from NewWriter or NewWriterLevel, but writing to dst +// instead. This permits reusing a Writer rather than allocating a new one. +func (w *Writer) Reset(dst io.Writer) { + encoderInitState(w) + w.params.quality = w.options.Quality + if w.options.LGWin > 0 { + w.params.lgwin = uint(w.options.LGWin) + } + w.dst = dst + w.err = nil +} + +func (w *Writer) writeChunk(p []byte, op int) (n int, err error) { + if w.dst == nil { + return 0, errWriterClosed + } + if w.err != nil { + return 0, w.err + } + + for { + availableIn := uint(len(p)) + nextIn := p + success := encoderCompressStream(w, op, &availableIn, &nextIn) + bytesConsumed := len(p) - int(availableIn) + p = p[bytesConsumed:] + n += bytesConsumed + if !success { + return n, errEncode + } + + if len(p) == 0 || w.err != nil { + return n, w.err + } + } +} + +// Flush outputs encoded data for all input provided to Write. The resulting +// output can be decoded to match all input before Flush, but the stream is +// not yet complete until after Close. +// Flush has a negative impact on compression. +func (w *Writer) Flush() error { + _, err := w.writeChunk(nil, operationFlush) + return err +} + +// Close flushes remaining data to the decorated writer. +func (w *Writer) Close() error { + // If stream is already closed, it is reported by `writeChunk`. + _, err := w.writeChunk(nil, operationFinish) + w.dst = nil + return err +} + +// Write implements io.Writer. Flush or Close must be called to ensure that the +// encoded bytes are actually flushed to the underlying Writer. +func (w *Writer) Write(p []byte) (n int, err error) { + return w.writeChunk(p, operationProcess) +} + +type nopCloser struct { + io.Writer +} + +func (nopCloser) Close() error { return nil } diff --git a/vendor/github.com/armon/go-metrics/go.mod b/vendor/github.com/armon/go-metrics/go.mod deleted file mode 100644 index e3a656ed78..0000000000 --- a/vendor/github.com/armon/go-metrics/go.mod +++ /dev/null @@ -1,17 +0,0 @@ -module github.com/armon/go-metrics - -go 1.12 - -require ( - github.com/DataDog/datadog-go v3.2.0+incompatible - github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible - github.com/circonus-labs/circonusllhist v0.1.3 // indirect - github.com/golang/protobuf v1.3.2 - github.com/hashicorp/go-immutable-radix v1.0.0 - github.com/hashicorp/go-retryablehttp v0.5.3 // indirect - github.com/pascaldekloe/goe v0.1.0 - github.com/prometheus/client_golang v1.4.0 - github.com/prometheus/client_model v0.2.0 - github.com/prometheus/common v0.9.1 - github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 // indirect -) diff --git a/vendor/github.com/armon/go-metrics/go.sum b/vendor/github.com/armon/go-metrics/go.sum deleted file mode 100644 index 519481e6b5..0000000000 --- a/vendor/github.com/armon/go-metrics/go.sum +++ /dev/null @@ -1,125 +0,0 @@ -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973 h1:xJ4a3vCFaGF/jqvzLMYoU8P317H5OQ+Via4RmuPwCS0= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/hashicorp/go-cleanhttp v0.5.0 h1:wvCrVc9TjDls6+YGAF2hAifE1E5U1+b4tH6KdvN3Gig= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0 h1:YVIb/fVcOTMSqtqZWSKnHpSLBxu8DKgxq8z6RuBZwqI= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910 h1:idejC8f05m9MGOsuEi1ATq9shN03HrxNkD/luQvxCv8= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5 h1:ymVxjfMaHvXD8RqPRmzHHsB3VvucivSkIAvJFDI5O3c= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/armon/go-metrics/metrics.go b/vendor/github.com/armon/go-metrics/metrics.go index 6753b13bb2..36642a4293 100644 --- a/vendor/github.com/armon/go-metrics/metrics.go +++ b/vendor/github.com/armon/go-metrics/metrics.go @@ -5,7 +5,7 @@ import ( "strings" "time" - "github.com/hashicorp/go-immutable-radix" + iradix "github.com/hashicorp/go-immutable-radix" ) type Label struct { @@ -172,6 +172,12 @@ func (m *Metrics) UpdateFilterAndLabels(allow, block, allowedLabels, blockedLabe } } +func (m *Metrics) Shutdown() { + if ss, ok := m.sink.(ShutdownSink); ok { + ss.Shutdown() + } +} + // labelIsAllowed return true if a should be included in metric // the caller should lock m.filterLock while calling this method func (m *Metrics) labelIsAllowed(label *Label) bool { diff --git a/vendor/github.com/armon/go-metrics/sink.go b/vendor/github.com/armon/go-metrics/sink.go index 0b7d6e4be4..6f4108ff40 100644 --- a/vendor/github.com/armon/go-metrics/sink.go +++ b/vendor/github.com/armon/go-metrics/sink.go @@ -24,6 +24,15 @@ type MetricSink interface { AddSampleWithLabels(key []string, val float32, labels []Label) } +type ShutdownSink interface { + MetricSink + + // Shutdown the metric sink, flush metrics to storage, and cleanup resources. + // Called immediately prior to application exit. Implementations must block + // until metrics are flushed to storage. + Shutdown() +} + // BlackholeSink is used to just blackhole messages type BlackholeSink struct{} @@ -74,6 +83,14 @@ func (fh FanoutSink) AddSampleWithLabels(key []string, val float32, labels []Lab } } +func (fh FanoutSink) Shutdown() { + for _, s := range fh { + if ss, ok := s.(ShutdownSink); ok { + ss.Shutdown() + } + } +} + // sinkURLFactoryFunc is an generic interface around the *SinkFromURL() function provided // by each sink type type sinkURLFactoryFunc func(*url.URL) (MetricSink, error) diff --git a/vendor/github.com/armon/go-metrics/start.go b/vendor/github.com/armon/go-metrics/start.go index 6aa0bd389a..38976f8dc9 100644 --- a/vendor/github.com/armon/go-metrics/start.go +++ b/vendor/github.com/armon/go-metrics/start.go @@ -144,3 +144,15 @@ func UpdateFilter(allow, block []string) { func UpdateFilterAndLabels(allow, block, allowedLabels, blockedLabels []string) { globalMetrics.Load().(*Metrics).UpdateFilterAndLabels(allow, block, allowedLabels, blockedLabels) } + +// Shutdown disables metric collection, then blocks while attempting to flush metrics to storage. +// WARNING: Not all MetricSink backends support this functionality, and calling this will cause them to leak resources. +// This is intended for use immediately prior to application exit. +func Shutdown() { + m := globalMetrics.Load().(*Metrics) + // Swap whatever MetricSink is currently active with a BlackholeSink. Callers must not have a + // reason to expect that calls to the library will successfully collect metrics after Shutdown + // has been called. + globalMetrics.Store(&Metrics{sink: &BlackholeSink{}}) + m.Shutdown() +} diff --git a/vendor/github.com/armon/go-radix/go.mod b/vendor/github.com/armon/go-radix/go.mod deleted file mode 100644 index 4336aa29ea..0000000000 --- a/vendor/github.com/armon/go-radix/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/armon/go-radix diff --git a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go index 11bd200980..beccfc7f6f 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/endpoints/defaults.go @@ -1937,9 +1937,15 @@ var awsPartition = partition{ }, "app-integrations": service{ Endpoints: serviceEndpoints{ + endpointKey{ + Region: "af-south-1", + }: endpoint{}, endpointKey{ Region: "ap-northeast-1", }: endpoint{}, + endpointKey{ + Region: "ap-northeast-2", + }: endpoint{}, endpointKey{ Region: "ap-southeast-1", }: endpoint{}, @@ -3046,6 +3052,73 @@ var awsPartition = partition{ }: endpoint{}, }, }, + "backup-gateway": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "af-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-east-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-2", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-3", + }: endpoint{}, + endpointKey{ + Region: "ap-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-2", + }: endpoint{}, + endpointKey{ + Region: "ca-central-1", + }: endpoint{}, + endpointKey{ + Region: "eu-central-1", + }: endpoint{}, + endpointKey{ + Region: "eu-north-1", + }: endpoint{}, + endpointKey{ + Region: "eu-south-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-2", + }: endpoint{}, + endpointKey{ + Region: "eu-west-3", + }: endpoint{}, + endpointKey{ + Region: "me-south-1", + }: endpoint{}, + endpointKey{ + Region: "sa-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-2", + }: endpoint{}, + endpointKey{ + Region: "us-west-1", + }: endpoint{}, + endpointKey{ + Region: "us-west-2", + }: endpoint{}, + }, + }, "batch": service{ Defaults: endpointDefaults{ defaultKey{}: endpoint{}, @@ -3080,6 +3153,9 @@ var awsPartition = partition{ endpointKey{ Region: "ap-southeast-2", }: endpoint{}, + endpointKey{ + Region: "ap-southeast-3", + }: endpoint{}, endpointKey{ Region: "ca-central-1", }: endpoint{}, @@ -8314,24 +8390,96 @@ var awsPartition = partition{ }, "email": service{ Endpoints: serviceEndpoints{ + endpointKey{ + Region: "af-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-2", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-3", + }: endpoint{}, endpointKey{ Region: "ap-south-1", }: endpoint{}, + endpointKey{ + Region: "ap-southeast-1", + }: endpoint{}, endpointKey{ Region: "ap-southeast-2", }: endpoint{}, + endpointKey{ + Region: "ca-central-1", + }: endpoint{}, endpointKey{ Region: "eu-central-1", }: endpoint{}, + endpointKey{ + Region: "eu-north-1", + }: endpoint{}, + endpointKey{ + Region: "eu-south-1", + }: endpoint{}, endpointKey{ Region: "eu-west-1", }: endpoint{}, + endpointKey{ + Region: "eu-west-2", + }: endpoint{}, + endpointKey{ + Region: "eu-west-3", + }: endpoint{}, + endpointKey{ + Region: "fips-us-east-1", + }: endpoint{ + Hostname: "email-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + Deprecated: boxedTrue, + }, + endpointKey{ + Region: "fips-us-west-2", + }: endpoint{ + Hostname: "email-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + Deprecated: boxedTrue, + }, + endpointKey{ + Region: "me-south-1", + }: endpoint{}, + endpointKey{ + Region: "sa-east-1", + }: endpoint{}, endpointKey{ Region: "us-east-1", }: endpoint{}, + endpointKey{ + Region: "us-east-1", + Variant: fipsVariant, + }: endpoint{ + Hostname: "email-fips.us-east-1.amazonaws.com", + }, + endpointKey{ + Region: "us-east-2", + }: endpoint{}, + endpointKey{ + Region: "us-west-1", + }: endpoint{}, endpointKey{ Region: "us-west-2", }: endpoint{}, + endpointKey{ + Region: "us-west-2", + Variant: fipsVariant, + }: endpoint{ + Hostname: "email-fips.us-west-2.amazonaws.com", + }, }, }, "emr-containers": service{ @@ -8461,6 +8609,52 @@ var awsPartition = partition{ }, }, }, + "emr-serverless": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "ap-northeast-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-1", + }: endpoint{}, + endpointKey{ + Region: "fips-us-east-1", + }: endpoint{ + Hostname: "emr-serverless-fips.us-east-1.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-east-1", + }, + Deprecated: boxedTrue, + }, + endpointKey{ + Region: "fips-us-west-2", + }: endpoint{ + Hostname: "emr-serverless-fips.us-west-2.amazonaws.com", + CredentialScope: credentialScope{ + Region: "us-west-2", + }, + Deprecated: boxedTrue, + }, + endpointKey{ + Region: "us-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-1", + Variant: fipsVariant, + }: endpoint{ + Hostname: "emr-serverless-fips.us-east-1.amazonaws.com", + }, + endpointKey{ + Region: "us-west-2", + }: endpoint{}, + endpointKey{ + Region: "us-west-2", + Variant: fipsVariant, + }: endpoint{ + Hostname: "emr-serverless-fips.us-west-2.amazonaws.com", + }, + }, + }, "entitlement.marketplace": service{ Defaults: endpointDefaults{ defaultKey{}: endpoint{ @@ -14720,6 +14914,14 @@ var awsPartition = partition{ Region: "ap-northeast-2", }, }, + endpointKey{ + Region: "ap-northeast-3", + }: endpoint{ + Hostname: "oidc.ap-northeast-3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-3", + }, + }, endpointKey{ Region: "ap-south-1", }: endpoint{ @@ -15413,6 +15615,14 @@ var awsPartition = partition{ Region: "ap-northeast-2", }, }, + endpointKey{ + Region: "ap-northeast-3", + }: endpoint{ + Hostname: "portal.sso.ap-northeast-3.amazonaws.com", + CredentialScope: credentialScope{ + Region: "ap-northeast-3", + }, + }, endpointKey{ Region: "ap-south-1", }: endpoint{ @@ -15578,6 +15788,25 @@ var awsPartition = partition{ }: endpoint{}, }, }, + "proton": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "ap-northeast-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-2", + }: endpoint{}, + endpointKey{ + Region: "us-west-2", + }: endpoint{}, + }, + }, "qldb": service{ Endpoints: serviceEndpoints{ endpointKey{ @@ -16614,6 +16843,70 @@ var awsPartition = partition{ }, }, }, + "resiliencehub": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "af-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-east-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-2", + }: endpoint{}, + endpointKey{ + Region: "ap-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-2", + }: endpoint{}, + endpointKey{ + Region: "ca-central-1", + }: endpoint{}, + endpointKey{ + Region: "eu-central-1", + }: endpoint{}, + endpointKey{ + Region: "eu-north-1", + }: endpoint{}, + endpointKey{ + Region: "eu-south-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-2", + }: endpoint{}, + endpointKey{ + Region: "eu-west-3", + }: endpoint{}, + endpointKey{ + Region: "me-south-1", + }: endpoint{}, + endpointKey{ + Region: "sa-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-2", + }: endpoint{}, + endpointKey{ + Region: "us-west-1", + }: endpoint{}, + endpointKey{ + Region: "us-west-2", + }: endpoint{}, + }, + }, "resource-groups": service{ Endpoints: serviceEndpoints{ endpointKey{ @@ -22386,6 +22679,64 @@ var awsPartition = partition{ }, }, }, + "wellarchitected": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "ap-east-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-northeast-2", + }: endpoint{}, + endpointKey{ + Region: "ap-south-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-1", + }: endpoint{}, + endpointKey{ + Region: "ap-southeast-2", + }: endpoint{}, + endpointKey{ + Region: "ca-central-1", + }: endpoint{}, + endpointKey{ + Region: "eu-central-1", + }: endpoint{}, + endpointKey{ + Region: "eu-north-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-1", + }: endpoint{}, + endpointKey{ + Region: "eu-west-2", + }: endpoint{}, + endpointKey{ + Region: "eu-west-3", + }: endpoint{}, + endpointKey{ + Region: "me-south-1", + }: endpoint{}, + endpointKey{ + Region: "sa-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-east-2", + }: endpoint{}, + endpointKey{ + Region: "us-west-1", + }: endpoint{}, + endpointKey{ + Region: "us-west-2", + }: endpoint{}, + }, + }, "wisdom": service{ Endpoints: serviceEndpoints{ endpointKey{ @@ -24910,6 +25261,16 @@ var awsusgovPartition = partition{ }: endpoint{}, }, }, + "backup-gateway": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "us-gov-east-1", + }: endpoint{}, + endpointKey{ + Region: "us-gov-west-1", + }: endpoint{}, + }, + }, "batch": service{ Defaults: endpointDefaults{ defaultKey{}: endpoint{}, @@ -29239,6 +29600,13 @@ var awsisoPartition = partition{ }: endpoint{}, }, }, + "appconfigdata": service{ + Endpoints: serviceEndpoints{ + endpointKey{ + Region: "us-iso-west-1", + }: endpoint{}, + }, + }, "application-autoscaling": service{ Defaults: endpointDefaults{ defaultKey{}: endpoint{ diff --git a/vendor/github.com/aws/aws-sdk-go/aws/version.go b/vendor/github.com/aws/aws-sdk-go/aws/version.go index 51bb3428ad..aa913d2917 100644 --- a/vendor/github.com/aws/aws-sdk-go/aws/version.go +++ b/vendor/github.com/aws/aws-sdk-go/aws/version.go @@ -5,4 +5,4 @@ package aws const SDKName = "aws-sdk-go" // SDKVersion is the version of this SDK -const SDKVersion = "1.44.14" +const SDKVersion = "1.44.25" diff --git a/vendor/github.com/aws/aws-sdk-go/service/sts/api.go b/vendor/github.com/aws/aws-sdk-go/service/sts/api.go index 718409b549..f1a7bfdd47 100644 --- a/vendor/github.com/aws/aws-sdk-go/service/sts/api.go +++ b/vendor/github.com/aws/aws-sdk-go/service/sts/api.go @@ -1279,6 +1279,12 @@ func (c *STS) GetSessionTokenRequest(input *GetSessionTokenInput) (req *request. // and Comparing the Amazon Web Services STS API operations (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_request.html#stsapi_comparison) // in the IAM User Guide. // +// No permissions are required for users to perform this operation. The purpose +// of the sts:GetSessionToken operation is to authenticate the user using MFA. +// You cannot use policies to control authentication operations. For more information, +// see Permissions for GetSessionToken (https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_control-access_getsessiontoken.html) +// in the IAM User Guide. +// // Session Duration // // The GetSessionToken operation must be called by using the long-term Amazon diff --git a/vendor/github.com/benbjohnson/clock/go.mod b/vendor/github.com/benbjohnson/clock/go.mod deleted file mode 100644 index 758903a683..0000000000 --- a/vendor/github.com/benbjohnson/clock/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/benbjohnson/clock - -go 1.15 diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/LICENSE b/vendor/github.com/btcsuite/btcd/btcec/v2/LICENSE new file mode 100644 index 0000000000..23190babb7 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/LICENSE @@ -0,0 +1,16 @@ +ISC License + +Copyright (c) 2013-2022 The btcsuite developers +Copyright (c) 2015-2016 The Decred developers + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/README.md b/vendor/github.com/btcsuite/btcd/btcec/v2/README.md new file mode 100644 index 0000000000..cbf63dd045 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/README.md @@ -0,0 +1,40 @@ +btcec +===== + +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://pkg.go.dev/github.com/btcsuite/btcd/btcec/v2?status.png)](https://pkg.go.dev/github.com/btcsuite/btcd/btcec/v2) + +Package btcec implements elliptic curve cryptography needed for working with +Bitcoin (secp256k1 only for now). It is designed so that it may be used with the +standard crypto/ecdsa packages provided with go. A comprehensive suite of test +is provided to ensure proper functionality. Package btcec was originally based +on work from ThePiachu which is licensed under the same terms as Go, but it has +signficantly diverged since then. The btcsuite developers original is licensed +under the liberal ISC license. + +Although this package was primarily written for btcd, it has intentionally been +designed so it can be used as a standalone package for any projects needing to +use secp256k1 elliptic curve cryptography. + +## Installation and Updating + +```bash +$ go install -u -v github.com/btcsuite/btcd/btcec/v2 +``` + +## Examples + +* [Sign Message](https://pkg.go.dev/github.com/btcsuite/btcd/btcec/v2#example-package--SignMessage) + Demonstrates signing a message with a secp256k1 private key that is first + parsed form raw bytes and serializing the generated signature. + +* [Verify Signature](https://pkg.go.dev/github.com/btcsuite/btcd/btcec/v2#example-package--VerifySignature) + Demonstrates verifying a secp256k1 signature against a public key that is + first parsed from raw bytes. The signature is also parsed from raw bytes. + +## License + +Package btcec is licensed under the [copyfree](http://copyfree.org) ISC License +except for btcec.go and btcec_test.go which is under the same license as Go. + diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/btcec.go b/vendor/github.com/btcsuite/btcd/btcec/v2/btcec.go new file mode 100644 index 0000000000..efde8d6a81 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/btcec.go @@ -0,0 +1,41 @@ +// Copyright 2010 The Go Authors. All rights reserved. +// Copyright 2011 ThePiachu. All rights reserved. +// Copyright 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcec + +// References: +// [SECG]: Recommended Elliptic Curve Domain Parameters +// http://www.secg.org/sec2-v2.pdf +// +// [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone) + +// This package operates, internally, on Jacobian coordinates. For a given +// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1) +// where x = x1/z1² and y = y1/z1³. The greatest speedups come when the whole +// calculation can be performed within the transform (as in ScalarMult and +// ScalarBaseMult). But even for Add and Double, it's faster to apply and +// reverse the transform than to operate in affine coordinates. + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// KoblitzCurve provides an implementation for secp256k1 that fits the ECC +// Curve interface from crypto/elliptic. +type KoblitzCurve = secp.KoblitzCurve + +// S256 returns a Curve which implements secp256k1. +func S256() *KoblitzCurve { + return secp.S256() +} + +// CurveParams contains the parameters for the secp256k1 curve. +type CurveParams = secp.CurveParams + +// Params returns the secp256k1 curve parameters for convenience. +func Params() *CurveParams { + return secp.Params() +} diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/ciphering.go b/vendor/github.com/btcsuite/btcd/btcec/v2/ciphering.go new file mode 100644 index 0000000000..88d93e2766 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/ciphering.go @@ -0,0 +1,16 @@ +// Copyright (c) 2015-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcec + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// GenerateSharedSecret generates a shared secret based on a private key and a +// public key using Diffie-Hellman key exchange (ECDH) (RFC 4753). +// RFC5903 Section 9 states we should only return x. +func GenerateSharedSecret(privkey *PrivateKey, pubkey *PublicKey) []byte { + return secp.GenerateSharedSecret(privkey, pubkey) +} diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/curve.go b/vendor/github.com/btcsuite/btcd/btcec/v2/curve.go new file mode 100644 index 0000000000..5224e35c8e --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/curve.go @@ -0,0 +1,63 @@ +// Copyright (c) 2015-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + +package btcec + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// JacobianPoint is an element of the group formed by the secp256k1 curve in +// Jacobian projective coordinates and thus represents a point on the curve. +type JacobianPoint = secp.JacobianPoint + +// MakeJacobianPoint returns a Jacobian point with the provided X, Y, and Z +// coordinates. +func MakeJacobianPoint(x, y, z *FieldVal) JacobianPoint { + return secp.MakeJacobianPoint(x, y, z) +} + +// AddNonConst adds the passed Jacobian points together and stores the result +// in the provided result param in *non-constant* time. +func AddNonConst(p1, p2, result *JacobianPoint) { + secp.AddNonConst(p1, p2, result) +} + +// DecompressY attempts to calculate the Y coordinate for the given X +// coordinate such that the result pair is a point on the secp256k1 curve. It +// adjusts Y based on the desired oddness and returns whether or not it was +// successful since not all X coordinates are valid. +// +// The magnitude of the provided X coordinate field val must be a max of 8 for +// a correct result. The resulting Y field val will have a max magnitude of 2. +func DecompressY(x *FieldVal, odd bool, resultY *FieldVal) bool { + return secp.DecompressY(x, odd, resultY) +} + +// DoubleNonConst doubles the passed Jacobian point and stores the result in +// the provided result parameter in *non-constant* time. +// +// NOTE: The point must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func DoubleNonConst(p, result *JacobianPoint) { + secp.DoubleNonConst(p, result) +} + +// ScalarBaseMultNonConst multiplies k*G where G is the base point of the group +// and k is a big endian integer. The result is stored in Jacobian coordinates +// (x1, y1, z1). +// +// NOTE: The resulting point will be normalized. +func ScalarBaseMultNonConst(k *ModNScalar, result *JacobianPoint) { + secp.ScalarBaseMultNonConst(k, result) +} + +// ScalarMultNonConst multiplies k*P where k is a big endian integer modulo the +// curve order and P is a point in Jacobian projective coordinates and stores +// the result in the provided Jacobian point. +// +// NOTE: The point must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func ScalarMultNonConst(k *ModNScalar, point, result *JacobianPoint) { + secp.ScalarMultNonConst(k, point, result) +} diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/doc.go b/vendor/github.com/btcsuite/btcd/btcec/v2/doc.go new file mode 100644 index 0000000000..fa8346ab0f --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/doc.go @@ -0,0 +1,21 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package btcec implements support for the elliptic curves needed for bitcoin. + +Bitcoin uses elliptic curve cryptography using koblitz curves +(specifically secp256k1) for cryptographic functions. See +http://www.secg.org/collateral/sec2_final.pdf for details on the +standard. + +This package provides the data structures and functions implementing the +crypto/elliptic Curve interface in order to permit using these curves +with the standard crypto/ecdsa package provided with go. Helper +functionality is provided to parse signatures and public keys from +standard formats. It was designed for use with btcd, but should be +general enough for other uses of elliptic curve crypto. It was originally based +on some initial work by ThePiachu, but has significantly diverged since then. +*/ +package btcec diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/ecdsa/error.go b/vendor/github.com/btcsuite/btcd/btcec/v2/ecdsa/error.go new file mode 100644 index 0000000000..a30d63b636 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/ecdsa/error.go @@ -0,0 +1,18 @@ +// Copyright (c) 2013-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + +package ecdsa + +import ( + secp_ecdsa "github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa" +) + +// ErrorKind identifies a kind of error. It has full support for +// errors.Is and errors.As, so the caller can directly check against +// an error kind when determining the reason for an error. +type ErrorKind = secp_ecdsa.ErrorKind + +// Error identifies an error related to an ECDSA signature. It has full +// support for errors.Is and errors.As, so the caller can ascertain the +// specific reason for the error by checking the underlying error. +type Error = secp_ecdsa.ErrorKind diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/ecdsa/signature.go b/vendor/github.com/btcsuite/btcd/btcec/v2/ecdsa/signature.go new file mode 100644 index 0000000000..092e4ceb1c --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/ecdsa/signature.go @@ -0,0 +1,240 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package ecdsa + +import ( + "errors" + "fmt" + "math/big" + + "github.com/btcsuite/btcd/btcec/v2" + secp_ecdsa "github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa" +) + +// Errors returned by canonicalPadding. +var ( + errNegativeValue = errors.New("value may be interpreted as negative") + errExcessivelyPaddedValue = errors.New("value is excessively padded") +) + +// Signature is a type representing an ecdsa signature. +type Signature = secp_ecdsa.Signature + +// NewSignature instantiates a new signature given some r and s values. +func NewSignature(r, s *btcec.ModNScalar) *Signature { + return secp_ecdsa.NewSignature(r, s) +} + +var ( + // Used in RFC6979 implementation when testing the nonce for correctness + one = big.NewInt(1) + + // oneInitializer is used to fill a byte slice with byte 0x01. It is provided + // here to avoid the need to create it multiple times. + oneInitializer = []byte{0x01} +) + +// MinSigLen is the minimum length of a DER encoded signature and is when both R +// and S are 1 byte each. +// 0x30 + <1-byte> + 0x02 + 0x01 + + 0x2 + 0x01 + +const MinSigLen = 8 + +// canonicalPadding checks whether a big-endian encoded integer could +// possibly be misinterpreted as a negative number (even though OpenSSL +// treats all numbers as unsigned), or if there is any unnecessary +// leading zero padding. +func canonicalPadding(b []byte) error { + switch { + case b[0]&0x80 == 0x80: + return errNegativeValue + case len(b) > 1 && b[0] == 0x00 && b[1]&0x80 != 0x80: + return errExcessivelyPaddedValue + default: + return nil + } +} + +func parseSig(sigStr []byte, der bool) (*Signature, error) { + // Originally this code used encoding/asn1 in order to parse the + // signature, but a number of problems were found with this approach. + // Despite the fact that signatures are stored as DER, the difference + // between go's idea of a bignum (and that they have sign) doesn't agree + // with the openssl one (where they do not). The above is true as of + // Go 1.1. In the end it was simpler to rewrite the code to explicitly + // understand the format which is this: + // 0x30 <0x02> 0x2 + // . + + if len(sigStr) < MinSigLen { + return nil, errors.New("malformed signature: too short") + } + // 0x30 + index := 0 + if sigStr[index] != 0x30 { + return nil, errors.New("malformed signature: no header magic") + } + index++ + // length of remaining message + siglen := sigStr[index] + index++ + + // siglen should be less than the entire message and greater than + // the minimal message size. + if int(siglen+2) > len(sigStr) || int(siglen+2) < MinSigLen { + return nil, errors.New("malformed signature: bad length") + } + // trim the slice we're working on so we only look at what matters. + sigStr = sigStr[:siglen+2] + + // 0x02 + if sigStr[index] != 0x02 { + return nil, + errors.New("malformed signature: no 1st int marker") + } + index++ + + // Length of signature R. + rLen := int(sigStr[index]) + // must be positive, must be able to fit in another 0x2, + // hence the -3. We assume that the length must be at least one byte. + index++ + if rLen <= 0 || rLen > len(sigStr)-index-3 { + return nil, errors.New("malformed signature: bogus R length") + } + + // Then R itself. + rBytes := sigStr[index : index+rLen] + if der { + switch err := canonicalPadding(rBytes); err { + case errNegativeValue: + return nil, errors.New("signature R is negative") + case errExcessivelyPaddedValue: + return nil, errors.New("signature R is excessively padded") + } + } + + // Strip leading zeroes from R. + for len(rBytes) > 0 && rBytes[0] == 0x00 { + rBytes = rBytes[1:] + } + + // R must be in the range [1, N-1]. Notice the check for the maximum number + // of bytes is required because SetByteSlice truncates as noted in its + // comment so it could otherwise fail to detect the overflow. + var r btcec.ModNScalar + if len(rBytes) > 32 { + str := "invalid signature: R is larger than 256 bits" + return nil, errors.New(str) + } + if overflow := r.SetByteSlice(rBytes); overflow { + str := "invalid signature: R >= group order" + return nil, errors.New(str) + } + if r.IsZero() { + str := "invalid signature: R is 0" + return nil, errors.New(str) + } + index += rLen + // 0x02. length already checked in previous if. + if sigStr[index] != 0x02 { + return nil, errors.New("malformed signature: no 2nd int marker") + } + index++ + + // Length of signature S. + sLen := int(sigStr[index]) + index++ + // S should be the rest of the string. + if sLen <= 0 || sLen > len(sigStr)-index { + return nil, errors.New("malformed signature: bogus S length") + } + + // Then S itself. + sBytes := sigStr[index : index+sLen] + if der { + switch err := canonicalPadding(sBytes); err { + case errNegativeValue: + return nil, errors.New("signature S is negative") + case errExcessivelyPaddedValue: + return nil, errors.New("signature S is excessively padded") + } + } + + // Strip leading zeroes from S. + for len(sBytes) > 0 && sBytes[0] == 0x00 { + sBytes = sBytes[1:] + } + + // S must be in the range [1, N-1]. Notice the check for the maximum number + // of bytes is required because SetByteSlice truncates as noted in its + // comment so it could otherwise fail to detect the overflow. + var s btcec.ModNScalar + if len(sBytes) > 32 { + str := "invalid signature: S is larger than 256 bits" + return nil, errors.New(str) + } + if overflow := s.SetByteSlice(sBytes); overflow { + str := "invalid signature: S >= group order" + return nil, errors.New(str) + } + if s.IsZero() { + str := "invalid signature: S is 0" + return nil, errors.New(str) + } + index += sLen + + // sanity check length parsing + if index != len(sigStr) { + return nil, fmt.Errorf("malformed signature: bad final length %v != %v", + index, len(sigStr)) + } + + return NewSignature(&r, &s), nil +} + +// ParseSignature parses a signature in BER format for the curve type `curve' +// into a Signature type, perfoming some basic sanity checks. If parsing +// according to the more strict DER format is needed, use ParseDERSignature. +func ParseSignature(sigStr []byte) (*Signature, error) { + return parseSig(sigStr, false) +} + +// ParseDERSignature parses a signature in DER format for the curve type +// `curve` into a Signature type. If parsing according to the less strict +// BER format is needed, use ParseSignature. +func ParseDERSignature(sigStr []byte) (*Signature, error) { + return parseSig(sigStr, true) +} + +// SignCompact produces a compact signature of the data in hash with the given +// private key on the given koblitz curve. The isCompressed parameter should +// be used to detail if the given signature should reference a compressed +// public key or not. If successful the bytes of the compact signature will be +// returned in the format: +// <(byte of 27+public key solution)+4 if compressed >< padded bytes for signature R> +// where the R and S parameters are padde up to the bitlengh of the curve. +func SignCompact(key *btcec.PrivateKey, hash []byte, + isCompressedKey bool) ([]byte, error) { + + return secp_ecdsa.SignCompact(key, hash, isCompressedKey), nil +} + +// RecoverCompact verifies the compact signature "signature" of "hash" for the +// Koblitz curve in "curve". If the signature matches then the recovered public +// key will be returned as well as a boolean if the original key was compressed +// or not, else an error will be returned. +func RecoverCompact(signature, hash []byte) (*btcec.PublicKey, bool, error) { + return secp_ecdsa.RecoverCompact(signature, hash) +} + +// Sign generates an ECDSA signature over the secp256k1 curve for the provided +// hash (which should be the result of hashing a larger message) using the +// given private key. The produced signature is deterministic (same message and +// same key yield the same signature) and canonical in accordance with RFC6979 +// and BIP0062. +func Sign(key *btcec.PrivateKey, hash []byte) *Signature { + return secp_ecdsa.Sign(key, hash) +} diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/error.go b/vendor/github.com/btcsuite/btcd/btcec/v2/error.go new file mode 100644 index 0000000000..81ca2b044d --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/error.go @@ -0,0 +1,19 @@ +// Copyright (c) 2013-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + +package btcec + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// Error identifies an error related to public key cryptography using a +// sec256k1 curve. It has full support for errors.Is and errors.As, so the +// caller can ascertain the specific reason for the error by checking the +// underlying error. +type Error = secp.Error + +// ErrorKind identifies a kind of error. It has full support for errors.Is and +// errors.As, so the caller can directly check against an error kind when +// determining the reason for an error. +type ErrorKind = secp.ErrorKind diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/field.go b/vendor/github.com/btcsuite/btcd/btcec/v2/field.go new file mode 100644 index 0000000000..fef6f345da --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/field.go @@ -0,0 +1,43 @@ +package btcec + +import secp "github.com/decred/dcrd/dcrec/secp256k1/v4" + +// FieldVal implements optimized fixed-precision arithmetic over the secp256k1 +// finite field. This means all arithmetic is performed modulo +// '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'. +// +// WARNING: Since it is so important for the field arithmetic to be extremely +// fast for high performance crypto, this type does not perform any validation +// of documented preconditions where it ordinarily would. As a result, it is +// IMPERATIVE for callers to understand some key concepts that are described +// below and ensure the methods are called with the necessary preconditions +// that each method is documented with. For example, some methods only give the +// correct result if the field value is normalized and others require the field +// values involved to have a maximum magnitude and THERE ARE NO EXPLICIT CHECKS +// TO ENSURE THOSE PRECONDITIONS ARE SATISFIED. This does, unfortunately, make +// the type more difficult to use correctly and while I typically prefer to +// ensure all state and input is valid for most code, this is a bit of an +// exception because those extra checks really add up in what ends up being +// critical hot paths. +// +// The first key concept when working with this type is normalization. In order +// to avoid the need to propagate a ton of carries, the internal representation +// provides additional overflow bits for each word of the overall 256-bit +// value. This means that there are multiple internal representations for the +// same value and, as a result, any methods that rely on comparison of the +// value, such as equality and oddness determination, require the caller to +// provide a normalized value. +// +// The second key concept when working with this type is magnitude. As +// previously mentioned, the internal representation provides additional +// overflow bits which means that the more math operations that are performed +// on the field value between normalizations, the more those overflow bits +// accumulate. The magnitude is effectively that maximum possible number of +// those overflow bits that could possibly be required as a result of a given +// operation. Since there are only a limited number of overflow bits available, +// this implies that the max possible magnitude MUST be tracked by the caller +// and the caller MUST normalize the field value if a given operation would +// cause the magnitude of the result to exceed the max allowed value. +// +// IMPORTANT: The max allowed magnitude of a field value is 64. +type FieldVal = secp.FieldVal diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/modnscalar.go b/vendor/github.com/btcsuite/btcd/btcec/v2/modnscalar.go new file mode 100644 index 0000000000..b18b2c1d43 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/modnscalar.go @@ -0,0 +1,45 @@ +// Copyright (c) 2013-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + +package btcec + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// ModNScalar implements optimized 256-bit constant-time fixed-precision +// arithmetic over the secp256k1 group order. This means all arithmetic is +// performed modulo: +// +// 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 +// +// It only implements the arithmetic needed for elliptic curve operations, +// however, the operations that are not implemented can typically be worked +// around if absolutely needed. For example, subtraction can be performed by +// adding the negation. +// +// Should it be absolutely necessary, conversion to the standard library +// math/big.Int can be accomplished by using the Bytes method, slicing the +// resulting fixed-size array, and feeding it to big.Int.SetBytes. However, +// that should typically be avoided when possible as conversion to big.Ints +// requires allocations, is not constant time, and is slower when working modulo +// the group order. +type ModNScalar = secp.ModNScalar + +// NonceRFC6979 generates a nonce deterministically according to RFC 6979 using +// HMAC-SHA256 for the hashing function. It takes a 32-byte hash as an input +// and returns a 32-byte nonce to be used for deterministic signing. The extra +// and version arguments are optional, but allow additional data to be added to +// the input of the HMAC. When provided, the extra data must be 32-bytes and +// version must be 16 bytes or they will be ignored. +// +// Finally, the extraIterations parameter provides a method to produce a stream +// of deterministic nonces to ensure the signing code is able to produce a nonce +// that results in a valid signature in the extremely unlikely event the +// original nonce produced results in an invalid signature (e.g. R == 0). +// Signing code should start with 0 and increment it if necessary. +func NonceRFC6979(privKey []byte, hash []byte, extra []byte, version []byte, + extraIterations uint32) *ModNScalar { + + return secp.NonceRFC6979(privKey, hash, extra, version, extraIterations) +} diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/privkey.go b/vendor/github.com/btcsuite/btcd/btcec/v2/privkey.go new file mode 100644 index 0000000000..4efa806c5f --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/privkey.go @@ -0,0 +1,37 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcec + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// PrivateKey wraps an ecdsa.PrivateKey as a convenience mainly for signing +// things with the the private key without having to directly import the ecdsa +// package. +type PrivateKey = secp.PrivateKey + +// PrivKeyFromBytes returns a private and public key for `curve' based on the +// private key passed as an argument as a byte slice. +func PrivKeyFromBytes(pk []byte) (*PrivateKey, *PublicKey) { + privKey := secp.PrivKeyFromBytes(pk) + + return privKey, privKey.PubKey() +} + +// NewPrivateKey is a wrapper for ecdsa.GenerateKey that returns a PrivateKey +// instead of the normal ecdsa.PrivateKey. +func NewPrivateKey() (*PrivateKey, error) { + return secp.GeneratePrivateKey() +} + +// PrivKeyFromScalar instantiates a new private key from a scalar encoded as a +// big integer. +func PrivKeyFromScalar(key *ModNScalar) *PrivateKey { + return &PrivateKey{Key: *key} +} + +// PrivKeyBytesLen defines the length in bytes of a serialized private key. +const PrivKeyBytesLen = 32 diff --git a/vendor/github.com/btcsuite/btcd/btcec/v2/pubkey.go b/vendor/github.com/btcsuite/btcd/btcec/v2/pubkey.go new file mode 100644 index 0000000000..7968ed042a --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/btcec/v2/pubkey.go @@ -0,0 +1,51 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcec + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// These constants define the lengths of serialized public keys. +const ( + PubKeyBytesLenCompressed = 33 +) + +const ( + pubkeyCompressed byte = 0x2 // y_bit + x coord + pubkeyUncompressed byte = 0x4 // x coord + y coord + pubkeyHybrid byte = 0x6 // y_bit + x coord + y coord +) + +// IsCompressedPubKey returns true the the passed serialized public key has +// been encoded in compressed format, and false otherwise. +func IsCompressedPubKey(pubKey []byte) bool { + // The public key is only compressed if it is the correct length and + // the format (first byte) is one of the compressed pubkey values. + return len(pubKey) == PubKeyBytesLenCompressed && + (pubKey[0]&^byte(0x1) == pubkeyCompressed) +} + +// ParsePubKey parses a public key for a koblitz curve from a bytestring into a +// ecdsa.Publickey, verifying that it is valid. It supports compressed, +// uncompressed and hybrid signature formats. +func ParsePubKey(pubKeyStr []byte) (*PublicKey, error) { + return secp.ParsePubKey(pubKeyStr) +} + +// PublicKey is an ecdsa.PublicKey with additional functions to +// serialize in uncompressed, compressed, and hybrid formats. +type PublicKey = secp.PublicKey + +// NewPublicKey instantiates a new public key with the given x and y +// coordinates. +// +// It should be noted that, unlike ParsePubKey, since this accepts arbitrary x +// and y coordinates, it allows creation of public keys that are not valid +// points on the secp256k1 curve. The IsOnCurve method of the returned instance +// can be used to determine validity. +func NewPublicKey(x, y *FieldVal) *PublicKey { + return secp.NewPublicKey(x, y) +} diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/README.md b/vendor/github.com/btcsuite/btcd/chaincfg/README.md new file mode 100644 index 0000000000..72fac2e7dc --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/README.md @@ -0,0 +1,85 @@ +chaincfg +======== + +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/chaincfg) + +Package chaincfg defines chain configuration parameters for the three standard +Bitcoin networks and provides the ability for callers to define their own custom +Bitcoin networks. + +Although this package was primarily written for btcd, it has intentionally been +designed so it can be used as a standalone package for any projects needing to +use parameters for the standard Bitcoin networks or for projects needing to +define their own network. + +## Sample Use + +```Go +package main + +import ( + "flag" + "fmt" + "log" + + "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/chaincfg" +) + +var testnet = flag.Bool("testnet", false, "operate on the testnet Bitcoin network") + +// By default (without -testnet), use mainnet. +var chainParams = &chaincfg.MainNetParams + +func main() { + flag.Parse() + + // Modify active network parameters if operating on testnet. + if *testnet { + chainParams = &chaincfg.TestNet3Params + } + + // later... + + // Create and print new payment address, specific to the active network. + pubKeyHash := make([]byte, 20) + addr, err := btcutil.NewAddressPubKeyHash(pubKeyHash, chainParams) + if err != nil { + log.Fatal(err) + } + fmt.Println(addr) +} +``` + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/chaincfg +``` + +## GPG Verification Key + +All official release tags are signed by Conformal so users can ensure the code +has not been tampered with and is coming from the btcsuite developers. To +verify the signature perform the following: + +- Download the public key from the Conformal website at + https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt + +- Import the public key into your GPG keyring: + ```bash + gpg --import GIT-GPG-KEY-conformal.txt + ``` + +- Verify the release tag with the following command where `TAG_NAME` is a + placeholder for the specific tag: + ```bash + git tag -v TAG_NAME + ``` + +## License + +Package chaincfg is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/LICENSE b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/LICENSE new file mode 100644 index 0000000000..23190babb7 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/LICENSE @@ -0,0 +1,16 @@ +ISC License + +Copyright (c) 2013-2022 The btcsuite developers +Copyright (c) 2015-2016 The Decred developers + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/README.md b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/README.md new file mode 100644 index 0000000000..b7ddf19ef7 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/README.md @@ -0,0 +1,41 @@ +chainhash +========= + +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/chaincfg/chainhash) +======= + +chainhash provides a generic hash type and associated functions that allows the +specific hash algorithm to be abstracted. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/chaincfg/chainhash +``` + +## GPG Verification Key + +All official release tags are signed by Conformal so users can ensure the code +has not been tampered with and is coming from the btcsuite developers. To +verify the signature perform the following: + +- Download the public key from the Conformal website at + https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt + +- Import the public key into your GPG keyring: + ```bash + gpg --import GIT-GPG-KEY-conformal.txt + ``` + +- Verify the release tag with the following command where `TAG_NAME` is a + placeholder for the specific tag: + ```bash + git tag -v TAG_NAME + ``` + +## License + +Package chainhash is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/doc.go b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/doc.go new file mode 100644 index 0000000000..c3eb43d321 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/doc.go @@ -0,0 +1,5 @@ +// Package chainhash provides abstracted hash functionality. +// +// This package provides a generic hash type and associated functions that +// allows the specific hash algorithm to be abstracted. +package chainhash diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/hash.go b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/hash.go new file mode 100644 index 0000000000..764ec3c40a --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/hash.go @@ -0,0 +1,198 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Copyright (c) 2015 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package chainhash + +import ( + "crypto/sha256" + "encoding/hex" + "fmt" +) + +// HashSize of array used to store hashes. See Hash. +const HashSize = 32 + +// MaxHashStringSize is the maximum length of a Hash hash string. +const MaxHashStringSize = HashSize * 2 + +var ( + // TagBIP0340Challenge is the BIP-0340 tag for challenges. + TagBIP0340Challenge = []byte("BIP0340/challenge") + + // TagBIP0340Aux is the BIP-0340 tag for aux data. + TagBIP0340Aux = []byte("BIP0340/aux") + + // TagBIP0340Nonce is the BIP-0340 tag for nonces. + TagBIP0340Nonce = []byte("BIP0340/nonce") + + // TagTapSighash is the tag used by BIP 341 to generate the sighash + // flags. + TagTapSighash = []byte("TapSighash") + + // TagTagTapLeaf is the message tag prefix used to compute the hash + // digest of a tapscript leaf. + TagTapLeaf = []byte("TapLeaf") + + // TagTapBranch is the message tag prefix used to compute the + // hash digest of two tap leaves into a taproot branch node. + TagTapBranch = []byte("TapBranch") + + // TagTapTweak is the message tag prefix used to compute the hash tweak + // used to enable a public key to commit to the taproot branch root + // for the witness program. + TagTapTweak = []byte("TapTweak") + + // precomputedTags is a map containing the SHA-256 hash of the BIP-0340 + // tags. + precomputedTags = map[string]Hash{ + string(TagBIP0340Challenge): sha256.Sum256(TagBIP0340Challenge), + string(TagBIP0340Aux): sha256.Sum256(TagBIP0340Aux), + string(TagBIP0340Nonce): sha256.Sum256(TagBIP0340Nonce), + string(TagTapSighash): sha256.Sum256(TagTapSighash), + string(TagTapLeaf): sha256.Sum256(TagTapLeaf), + string(TagTapBranch): sha256.Sum256(TagTapBranch), + string(TagTapTweak): sha256.Sum256(TagTapTweak), + } +) + +// ErrHashStrSize describes an error that indicates the caller specified a hash +// string that has too many characters. +var ErrHashStrSize = fmt.Errorf("max hash string length is %v bytes", MaxHashStringSize) + +// Hash is used in several of the bitcoin messages and common structures. It +// typically represents the double sha256 of data. +type Hash [HashSize]byte + +// String returns the Hash as the hexadecimal string of the byte-reversed +// hash. +func (hash Hash) String() string { + for i := 0; i < HashSize/2; i++ { + hash[i], hash[HashSize-1-i] = hash[HashSize-1-i], hash[i] + } + return hex.EncodeToString(hash[:]) +} + +// CloneBytes returns a copy of the bytes which represent the hash as a byte +// slice. +// +// NOTE: It is generally cheaper to just slice the hash directly thereby reusing +// the same bytes rather than calling this method. +func (hash *Hash) CloneBytes() []byte { + newHash := make([]byte, HashSize) + copy(newHash, hash[:]) + + return newHash +} + +// SetBytes sets the bytes which represent the hash. An error is returned if +// the number of bytes passed in is not HashSize. +func (hash *Hash) SetBytes(newHash []byte) error { + nhlen := len(newHash) + if nhlen != HashSize { + return fmt.Errorf("invalid hash length of %v, want %v", nhlen, + HashSize) + } + copy(hash[:], newHash) + + return nil +} + +// IsEqual returns true if target is the same as hash. +func (hash *Hash) IsEqual(target *Hash) bool { + if hash == nil && target == nil { + return true + } + if hash == nil || target == nil { + return false + } + return *hash == *target +} + +// NewHash returns a new Hash from a byte slice. An error is returned if +// the number of bytes passed in is not HashSize. +func NewHash(newHash []byte) (*Hash, error) { + var sh Hash + err := sh.SetBytes(newHash) + if err != nil { + return nil, err + } + return &sh, err +} + +// TaggedHash implements the tagged hash scheme described in BIP-340. We use +// sha-256 to bind a message hash to a specific context using a tag: +// sha256(sha256(tag) || sha256(tag) || msg). +func TaggedHash(tag []byte, msgs ...[]byte) *Hash { + // Check to see if we've already pre-computed the hash of the tag. If + // so then this'll save us an extra sha256 hash. + shaTag, ok := precomputedTags[string(tag)] + if !ok { + shaTag = sha256.Sum256(tag) + } + + // h = sha256(sha256(tag) || sha256(tag) || msg) + h := sha256.New() + h.Write(shaTag[:]) + h.Write(shaTag[:]) + + for _, msg := range msgs { + h.Write(msg) + } + + taggedHash := h.Sum(nil) + + // The function can't error out since the above hash is guaranteed to + // be 32 bytes. + hash, _ := NewHash(taggedHash) + + return hash +} + +// NewHashFromStr creates a Hash from a hash string. The string should be +// the hexadecimal string of a byte-reversed hash, but any missing characters +// result in zero padding at the end of the Hash. +func NewHashFromStr(hash string) (*Hash, error) { + ret := new(Hash) + err := Decode(ret, hash) + if err != nil { + return nil, err + } + return ret, nil +} + +// Decode decodes the byte-reversed hexadecimal string encoding of a Hash to a +// destination. +func Decode(dst *Hash, src string) error { + // Return error if hash string is too long. + if len(src) > MaxHashStringSize { + return ErrHashStrSize + } + + // Hex decoder expects the hash to be a multiple of two. When not, pad + // with a leading zero. + var srcBytes []byte + if len(src)%2 == 0 { + srcBytes = []byte(src) + } else { + srcBytes = make([]byte, 1+len(src)) + srcBytes[0] = '0' + copy(srcBytes[1:], src) + } + + // Hex decode the source bytes to a temporary destination. + var reversedHash Hash + _, err := hex.Decode(reversedHash[HashSize-hex.DecodedLen(len(srcBytes)):], srcBytes) + if err != nil { + return err + } + + // Reverse copy from the temporary hash to destination. Because the + // temporary was zeroed, the written result will be correctly padded. + for i, b := range reversedHash[:HashSize/2] { + dst[i], dst[HashSize-1-i] = reversedHash[HashSize-1-i], b + } + + return nil +} diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/hashfuncs.go b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/hashfuncs.go new file mode 100644 index 0000000000..bf74f73c39 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/chainhash/hashfuncs.go @@ -0,0 +1,33 @@ +// Copyright (c) 2015 The Decred developers +// Copyright (c) 2016-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package chainhash + +import "crypto/sha256" + +// HashB calculates hash(b) and returns the resulting bytes. +func HashB(b []byte) []byte { + hash := sha256.Sum256(b) + return hash[:] +} + +// HashH calculates hash(b) and returns the resulting bytes as a Hash. +func HashH(b []byte) Hash { + return Hash(sha256.Sum256(b)) +} + +// DoubleHashB calculates hash(hash(b)) and returns the resulting bytes. +func DoubleHashB(b []byte) []byte { + first := sha256.Sum256(b) + second := sha256.Sum256(first[:]) + return second[:] +} + +// DoubleHashH calculates hash(hash(b)) and returns the resulting bytes as a +// Hash. +func DoubleHashH(b []byte) Hash { + first := sha256.Sum256(b) + return Hash(sha256.Sum256(first[:])) +} diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/doc.go b/vendor/github.com/btcsuite/btcd/chaincfg/doc.go new file mode 100644 index 0000000000..3659adbf46 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/doc.go @@ -0,0 +1,61 @@ +// Package chaincfg defines chain configuration parameters. +// +// In addition to the main Bitcoin network, which is intended for the transfer +// of monetary value, there also exists two currently active standard networks: +// regression test and testnet (version 3). These networks are incompatible +// with each other (each sharing a different genesis block) and software should +// handle errors where input intended for one network is used on an application +// instance running on a different network. +// +// For library packages, chaincfg provides the ability to lookup chain +// parameters and encoding magics when passed a *Params. Older APIs not updated +// to the new convention of passing a *Params may lookup the parameters for a +// wire.BitcoinNet using ParamsForNet, but be aware that this usage is +// deprecated and will be removed from chaincfg in the future. +// +// For main packages, a (typically global) var may be assigned the address of +// one of the standard Param vars for use as the application's "active" network. +// When a network parameter is needed, it may then be looked up through this +// variable (either directly, or hidden in a library call). +// +// package main +// +// import ( +// "flag" +// "fmt" +// "log" +// +// "github.com/btcsuite/btcutil" +// "github.com/btcsuite/btcd/chaincfg" +// ) +// +// var testnet = flag.Bool("testnet", false, "operate on the testnet Bitcoin network") +// +// // By default (without -testnet), use mainnet. +// var chainParams = &chaincfg.MainNetParams +// +// func main() { +// flag.Parse() +// +// // Modify active network parameters if operating on testnet. +// if *testnet { +// chainParams = &chaincfg.TestNet3Params +// } +// +// // later... +// +// // Create and print new payment address, specific to the active network. +// pubKeyHash := make([]byte, 20) +// addr, err := btcutil.NewAddressPubKeyHash(pubKeyHash, chainParams) +// if err != nil { +// log.Fatal(err) +// } +// fmt.Println(addr) +// } +// +// If an application does not use one of the three standard Bitcoin networks, +// a new Params struct may be created which defines the parameters for the +// non-standard network. As a general rule of thumb, all network parameters +// should be unique to the network, but parameter collisions can still occur +// (unfortunately, this is the case with regtest and testnet3 sharing magics). +package chaincfg diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/genesis.go b/vendor/github.com/btcsuite/btcd/chaincfg/genesis.go new file mode 100644 index 0000000000..73d286102b --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/genesis.go @@ -0,0 +1,200 @@ +// Copyright (c) 2014-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package chaincfg + +import ( + "time" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +// genesisCoinbaseTx is the coinbase transaction for the genesis blocks for +// the main network, regression test network, and test network (version 3). +var genesisCoinbaseTx = wire.MsgTx{ + Version: 1, + TxIn: []*wire.TxIn{ + { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{}, + Index: 0xffffffff, + }, + SignatureScript: []byte{ + 0x04, 0xff, 0xff, 0x00, 0x1d, 0x01, 0x04, 0x45, /* |.......E| */ + 0x54, 0x68, 0x65, 0x20, 0x54, 0x69, 0x6d, 0x65, /* |The Time| */ + 0x73, 0x20, 0x30, 0x33, 0x2f, 0x4a, 0x61, 0x6e, /* |s 03/Jan| */ + 0x2f, 0x32, 0x30, 0x30, 0x39, 0x20, 0x43, 0x68, /* |/2009 Ch| */ + 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x6c, 0x6f, 0x72, /* |ancellor| */ + 0x20, 0x6f, 0x6e, 0x20, 0x62, 0x72, 0x69, 0x6e, /* | on brin| */ + 0x6b, 0x20, 0x6f, 0x66, 0x20, 0x73, 0x65, 0x63, /* |k of sec|*/ + 0x6f, 0x6e, 0x64, 0x20, 0x62, 0x61, 0x69, 0x6c, /* |ond bail| */ + 0x6f, 0x75, 0x74, 0x20, 0x66, 0x6f, 0x72, 0x20, /* |out for |*/ + 0x62, 0x61, 0x6e, 0x6b, 0x73, /* |banks| */ + }, + Sequence: 0xffffffff, + }, + }, + TxOut: []*wire.TxOut{ + { + Value: 0x12a05f200, + PkScript: []byte{ + 0x41, 0x04, 0x67, 0x8a, 0xfd, 0xb0, 0xfe, 0x55, /* |A.g....U| */ + 0x48, 0x27, 0x19, 0x67, 0xf1, 0xa6, 0x71, 0x30, /* |H'.g..q0| */ + 0xb7, 0x10, 0x5c, 0xd6, 0xa8, 0x28, 0xe0, 0x39, /* |..\..(.9| */ + 0x09, 0xa6, 0x79, 0x62, 0xe0, 0xea, 0x1f, 0x61, /* |..yb...a| */ + 0xde, 0xb6, 0x49, 0xf6, 0xbc, 0x3f, 0x4c, 0xef, /* |..I..?L.| */ + 0x38, 0xc4, 0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, /* |8..U....| */ + 0x12, 0xde, 0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, /* |..\8M...| */ + 0x8d, 0x57, 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, /* |.W.Lp+k.| */ + 0x1d, 0x5f, 0xac, /* |._.| */ + }, + }, + }, + LockTime: 0, +} + +// genesisHash is the hash of the first block in the block chain for the main +// network (genesis block). +var genesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy. + 0x6f, 0xe2, 0x8c, 0x0a, 0xb6, 0xf1, 0xb3, 0x72, + 0xc1, 0xa6, 0xa2, 0x46, 0xae, 0x63, 0xf7, 0x4f, + 0x93, 0x1e, 0x83, 0x65, 0xe1, 0x5a, 0x08, 0x9c, + 0x68, 0xd6, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, +}) + +// genesisMerkleRoot is the hash of the first transaction in the genesis block +// for the main network. +var genesisMerkleRoot = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy. + 0x3b, 0xa3, 0xed, 0xfd, 0x7a, 0x7b, 0x12, 0xb2, + 0x7a, 0xc7, 0x2c, 0x3e, 0x67, 0x76, 0x8f, 0x61, + 0x7f, 0xc8, 0x1b, 0xc3, 0x88, 0x8a, 0x51, 0x32, + 0x3a, 0x9f, 0xb8, 0xaa, 0x4b, 0x1e, 0x5e, 0x4a, +}) + +// genesisBlock defines the genesis block of the block chain which serves as the +// public transaction ledger for the main network. +var genesisBlock = wire.MsgBlock{ + Header: wire.BlockHeader{ + Version: 1, + PrevBlock: chainhash.Hash{}, // 0000000000000000000000000000000000000000000000000000000000000000 + MerkleRoot: genesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b + Timestamp: time.Unix(0x495fab29, 0), // 2009-01-03 18:15:05 +0000 UTC + Bits: 0x1d00ffff, // 486604799 [00000000ffff0000000000000000000000000000000000000000000000000000] + Nonce: 0x7c2bac1d, // 2083236893 + }, + Transactions: []*wire.MsgTx{&genesisCoinbaseTx}, +} + +// regTestGenesisHash is the hash of the first block in the block chain for the +// regression test network (genesis block). +var regTestGenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy. + 0x06, 0x22, 0x6e, 0x46, 0x11, 0x1a, 0x0b, 0x59, + 0xca, 0xaf, 0x12, 0x60, 0x43, 0xeb, 0x5b, 0xbf, + 0x28, 0xc3, 0x4f, 0x3a, 0x5e, 0x33, 0x2a, 0x1f, + 0xc7, 0xb2, 0xb7, 0x3c, 0xf1, 0x88, 0x91, 0x0f, +}) + +// regTestGenesisMerkleRoot is the hash of the first transaction in the genesis +// block for the regression test network. It is the same as the merkle root for +// the main network. +var regTestGenesisMerkleRoot = genesisMerkleRoot + +// regTestGenesisBlock defines the genesis block of the block chain which serves +// as the public transaction ledger for the regression test network. +var regTestGenesisBlock = wire.MsgBlock{ + Header: wire.BlockHeader{ + Version: 1, + PrevBlock: chainhash.Hash{}, // 0000000000000000000000000000000000000000000000000000000000000000 + MerkleRoot: regTestGenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b + Timestamp: time.Unix(1296688602, 0), // 2011-02-02 23:16:42 +0000 UTC + Bits: 0x207fffff, // 545259519 [7fffff0000000000000000000000000000000000000000000000000000000000] + Nonce: 2, + }, + Transactions: []*wire.MsgTx{&genesisCoinbaseTx}, +} + +// testNet3GenesisHash is the hash of the first block in the block chain for the +// test network (version 3). +var testNet3GenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy. + 0x43, 0x49, 0x7f, 0xd7, 0xf8, 0x26, 0x95, 0x71, + 0x08, 0xf4, 0xa3, 0x0f, 0xd9, 0xce, 0xc3, 0xae, + 0xba, 0x79, 0x97, 0x20, 0x84, 0xe9, 0x0e, 0xad, + 0x01, 0xea, 0x33, 0x09, 0x00, 0x00, 0x00, 0x00, +}) + +// testNet3GenesisMerkleRoot is the hash of the first transaction in the genesis +// block for the test network (version 3). It is the same as the merkle root +// for the main network. +var testNet3GenesisMerkleRoot = genesisMerkleRoot + +// testNet3GenesisBlock defines the genesis block of the block chain which +// serves as the public transaction ledger for the test network (version 3). +var testNet3GenesisBlock = wire.MsgBlock{ + Header: wire.BlockHeader{ + Version: 1, + PrevBlock: chainhash.Hash{}, // 0000000000000000000000000000000000000000000000000000000000000000 + MerkleRoot: testNet3GenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b + Timestamp: time.Unix(1296688602, 0), // 2011-02-02 23:16:42 +0000 UTC + Bits: 0x1d00ffff, // 486604799 [00000000ffff0000000000000000000000000000000000000000000000000000] + Nonce: 0x18aea41a, // 414098458 + }, + Transactions: []*wire.MsgTx{&genesisCoinbaseTx}, +} + +// simNetGenesisHash is the hash of the first block in the block chain for the +// simulation test network. +var simNetGenesisHash = chainhash.Hash([chainhash.HashSize]byte{ // Make go vet happy. + 0xf6, 0x7a, 0xd7, 0x69, 0x5d, 0x9b, 0x66, 0x2a, + 0x72, 0xff, 0x3d, 0x8e, 0xdb, 0xbb, 0x2d, 0xe0, + 0xbf, 0xa6, 0x7b, 0x13, 0x97, 0x4b, 0xb9, 0x91, + 0x0d, 0x11, 0x6d, 0x5c, 0xbd, 0x86, 0x3e, 0x68, +}) + +// simNetGenesisMerkleRoot is the hash of the first transaction in the genesis +// block for the simulation test network. It is the same as the merkle root for +// the main network. +var simNetGenesisMerkleRoot = genesisMerkleRoot + +// simNetGenesisBlock defines the genesis block of the block chain which serves +// as the public transaction ledger for the simulation test network. +var simNetGenesisBlock = wire.MsgBlock{ + Header: wire.BlockHeader{ + Version: 1, + PrevBlock: chainhash.Hash{}, // 0000000000000000000000000000000000000000000000000000000000000000 + MerkleRoot: simNetGenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b + Timestamp: time.Unix(1401292357, 0), // 2014-05-28 15:52:37 +0000 UTC + Bits: 0x207fffff, // 545259519 [7fffff0000000000000000000000000000000000000000000000000000000000] + Nonce: 2, + }, + Transactions: []*wire.MsgTx{&genesisCoinbaseTx}, +} + +// sigNetGenesisHash is the hash of the first block in the block chain for the +// signet test network. +var sigNetGenesisHash = chainhash.Hash{ + 0xf6, 0x1e, 0xee, 0x3b, 0x63, 0xa3, 0x80, 0xa4, + 0x77, 0xa0, 0x63, 0xaf, 0x32, 0xb2, 0xbb, 0xc9, + 0x7c, 0x9f, 0xf9, 0xf0, 0x1f, 0x2c, 0x42, 0x25, + 0xe9, 0x73, 0x98, 0x81, 0x08, 0x00, 0x00, 0x00, +} + +// sigNetGenesisMerkleRoot is the hash of the first transaction in the genesis +// block for the signet test network. It is the same as the merkle root for +// the main network. +var sigNetGenesisMerkleRoot = genesisMerkleRoot + +// sigNetGenesisBlock defines the genesis block of the block chain which serves +// as the public transaction ledger for the signet test network. +var sigNetGenesisBlock = wire.MsgBlock{ + Header: wire.BlockHeader{ + Version: 1, + PrevBlock: chainhash.Hash{}, // 0000000000000000000000000000000000000000000000000000000000000000 + MerkleRoot: sigNetGenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b + Timestamp: time.Unix(1598918400, 0), // 2020-09-01 00:00:00 +0000 UTC + Bits: 0x1e0377ae, // 503543726 [00000377ae000000000000000000000000000000000000000000000000000000] + Nonce: 52613770, + }, + Transactions: []*wire.MsgTx{&genesisCoinbaseTx}, +} diff --git a/vendor/github.com/btcsuite/btcd/chaincfg/params.go b/vendor/github.com/btcsuite/btcd/chaincfg/params.go new file mode 100644 index 0000000000..a6d8d3e551 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/chaincfg/params.go @@ -0,0 +1,875 @@ +// Copyright (c) 2014-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package chaincfg + +import ( + "encoding/binary" + "encoding/hex" + "errors" + "math" + "math/big" + "strings" + "time" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +// These variables are the chain proof-of-work limit parameters for each default +// network. +var ( + // bigOne is 1 represented as a big.Int. It is defined here to avoid + // the overhead of creating it multiple times. + bigOne = big.NewInt(1) + + // mainPowLimit is the highest proof of work value a Bitcoin block can + // have for the main network. It is the value 2^224 - 1. + mainPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 224), bigOne) + + // regressionPowLimit is the highest proof of work value a Bitcoin block + // can have for the regression test network. It is the value 2^255 - 1. + regressionPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 255), bigOne) + + // testNet3PowLimit is the highest proof of work value a Bitcoin block + // can have for the test network (version 3). It is the value + // 2^224 - 1. + testNet3PowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 224), bigOne) + + // simNetPowLimit is the highest proof of work value a Bitcoin block + // can have for the simulation test network. It is the value 2^255 - 1. + simNetPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 255), bigOne) + + // sigNetPowLimit is the highest proof of work value a bitcoin block can + // have for the signet test network. It is the value 0x0377ae << 216. + sigNetPowLimit = new(big.Int).Lsh(new(big.Int).SetInt64(0x0377ae), 216) + + // DefaultSignetChallenge is the byte representation of the signet + // challenge for the default (public, Taproot enabled) signet network. + // This is the binary equivalent of the bitcoin script + // 1 03ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430 + // 0359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c4 2 + // OP_CHECKMULTISIG + DefaultSignetChallenge, _ = hex.DecodeString( + "512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d" + + "1e086be430210359ef5021964fe22d6f8e05b2463c9540ce9688" + + "3fe3b278760f048f5189f2e6c452ae", + ) + + // DefaultSignetDNSSeeds is the list of seed nodes for the default + // (public, Taproot enabled) signet network. + DefaultSignetDNSSeeds = []DNSSeed{ + {"178.128.221.177", false}, + {"2a01:7c8:d005:390::5", false}, + {"v7ajjeirttkbnt32wpy3c6w3emwnfr3fkla7hpxcfokr3ysd3kqtzmqd.onion:38333", false}, + } +) + +// Checkpoint identifies a known good point in the block chain. Using +// checkpoints allows a few optimizations for old blocks during initial download +// and also prevents forks from old blocks. +// +// Each checkpoint is selected based upon several factors. See the +// documentation for blockchain.IsCheckpointCandidate for details on the +// selection criteria. +type Checkpoint struct { + Height int32 + Hash *chainhash.Hash +} + +// DNSSeed identifies a DNS seed. +type DNSSeed struct { + // Host defines the hostname of the seed. + Host string + + // HasFiltering defines whether the seed supports filtering + // by service flags (wire.ServiceFlag). + HasFiltering bool +} + +// ConsensusDeployment defines details related to a specific consensus rule +// change that is voted in. This is part of BIP0009. +type ConsensusDeployment struct { + // BitNumber defines the specific bit number within the block version + // this particular soft-fork deployment refers to. + BitNumber uint8 + + // StartTime is the median block time after which voting on the + // deployment starts. + StartTime uint64 + + // ExpireTime is the median block time after which the attempted + // deployment expires. + ExpireTime uint64 +} + +// Constants that define the deployment offset in the deployments field of the +// parameters for each deployment. This is useful to be able to get the details +// of a specific deployment by name. +const ( + // DeploymentTestDummy defines the rule change deployment ID for testing + // purposes. + DeploymentTestDummy = iota + + // DeploymentCSV defines the rule change deployment ID for the CSV + // soft-fork package. The CSV package includes the deployment of BIPS + // 68, 112, and 113. + DeploymentCSV + + // DeploymentSegwit defines the rule change deployment ID for the + // Segregated Witness (segwit) soft-fork package. The segwit package + // includes the deployment of BIPS 141, 142, 144, 145, 147 and 173. + DeploymentSegwit + + // DeploymentTaproot defines the rule change deployment ID for the + // Taproot (+Schnorr) soft-fork package. The taproot package includes + // the deployment of BIPS 340, 341 and 342. + DeploymentTaproot + + // NOTE: DefinedDeployments must always come last since it is used to + // determine how many defined deployments there currently are. + + // DefinedDeployments is the number of currently defined deployments. + DefinedDeployments +) + +// Params defines a Bitcoin network by its parameters. These parameters may be +// used by Bitcoin applications to differentiate networks as well as addresses +// and keys for one network from those intended for use on another network. +type Params struct { + // Name defines a human-readable identifier for the network. + Name string + + // Net defines the magic bytes used to identify the network. + Net wire.BitcoinNet + + // DefaultPort defines the default peer-to-peer port for the network. + DefaultPort string + + // DNSSeeds defines a list of DNS seeds for the network that are used + // as one method to discover peers. + DNSSeeds []DNSSeed + + // GenesisBlock defines the first block of the chain. + GenesisBlock *wire.MsgBlock + + // GenesisHash is the starting block hash. + GenesisHash *chainhash.Hash + + // PowLimit defines the highest allowed proof of work value for a block + // as a uint256. + PowLimit *big.Int + + // PowLimitBits defines the highest allowed proof of work value for a + // block in compact form. + PowLimitBits uint32 + + // These fields define the block heights at which the specified softfork + // BIP became active. + BIP0034Height int32 + BIP0065Height int32 + BIP0066Height int32 + + // CoinbaseMaturity is the number of blocks required before newly mined + // coins (coinbase transactions) can be spent. + CoinbaseMaturity uint16 + + // SubsidyReductionInterval is the interval of blocks before the subsidy + // is reduced. + SubsidyReductionInterval int32 + + // TargetTimespan is the desired amount of time that should elapse + // before the block difficulty requirement is examined to determine how + // it should be changed in order to maintain the desired block + // generation rate. + TargetTimespan time.Duration + + // TargetTimePerBlock is the desired amount of time to generate each + // block. + TargetTimePerBlock time.Duration + + // RetargetAdjustmentFactor is the adjustment factor used to limit + // the minimum and maximum amount of adjustment that can occur between + // difficulty retargets. + RetargetAdjustmentFactor int64 + + // ReduceMinDifficulty defines whether the network should reduce the + // minimum required difficulty after a long enough period of time has + // passed without finding a block. This is really only useful for test + // networks and should not be set on a main network. + ReduceMinDifficulty bool + + // MinDiffReductionTime is the amount of time after which the minimum + // required difficulty should be reduced when a block hasn't been found. + // + // NOTE: This only applies if ReduceMinDifficulty is true. + MinDiffReductionTime time.Duration + + // GenerateSupported specifies whether or not CPU mining is allowed. + GenerateSupported bool + + // Checkpoints ordered from oldest to newest. + Checkpoints []Checkpoint + + // These fields are related to voting on consensus rule changes as + // defined by BIP0009. + // + // RuleChangeActivationThreshold is the number of blocks in a threshold + // state retarget window for which a positive vote for a rule change + // must be cast in order to lock in a rule change. It should typically + // be 95% for the main network and 75% for test networks. + // + // MinerConfirmationWindow is the number of blocks in each threshold + // state retarget window. + // + // Deployments define the specific consensus rule changes to be voted + // on. + RuleChangeActivationThreshold uint32 + MinerConfirmationWindow uint32 + Deployments [DefinedDeployments]ConsensusDeployment + + // Mempool parameters + RelayNonStdTxs bool + + // Human-readable part for Bech32 encoded segwit addresses, as defined + // in BIP 173. + Bech32HRPSegwit string + + // Address encoding magics + PubKeyHashAddrID byte // First byte of a P2PKH address + ScriptHashAddrID byte // First byte of a P2SH address + PrivateKeyID byte // First byte of a WIF private key + WitnessPubKeyHashAddrID byte // First byte of a P2WPKH address + WitnessScriptHashAddrID byte // First byte of a P2WSH address + + // BIP32 hierarchical deterministic extended key magics + HDPrivateKeyID [4]byte + HDPublicKeyID [4]byte + + // BIP44 coin type used in the hierarchical deterministic path for + // address generation. + HDCoinType uint32 +} + +// MainNetParams defines the network parameters for the main Bitcoin network. +var MainNetParams = Params{ + Name: "mainnet", + Net: wire.MainNet, + DefaultPort: "8333", + DNSSeeds: []DNSSeed{ + {"seed.bitcoin.sipa.be", true}, + {"dnsseed.bluematt.me", true}, + {"dnsseed.bitcoin.dashjr.org", false}, + {"seed.bitcoinstats.com", true}, + {"seed.bitnodes.io", false}, + {"seed.bitcoin.jonasschnelli.ch", true}, + }, + + // Chain parameters + GenesisBlock: &genesisBlock, + GenesisHash: &genesisHash, + PowLimit: mainPowLimit, + PowLimitBits: 0x1d00ffff, + BIP0034Height: 227931, // 000000000000024b89b42a942fe0d9fea3bb44ab7bd1b19115dd6a759c0808b8 + BIP0065Height: 388381, // 000000000000000004c2b624ed5d7756c508d90fd0da2c7c679febfa6c4735f0 + BIP0066Height: 363725, // 00000000000000000379eaa19dce8c9b722d46ae6a57c2f1a988119488b50931 + CoinbaseMaturity: 100, + SubsidyReductionInterval: 210000, + TargetTimespan: time.Hour * 24 * 14, // 14 days + TargetTimePerBlock: time.Minute * 10, // 10 minutes + RetargetAdjustmentFactor: 4, // 25% less, 400% more + ReduceMinDifficulty: false, + MinDiffReductionTime: 0, + GenerateSupported: false, + + // Checkpoints ordered from oldest to newest. + Checkpoints: []Checkpoint{ + {11111, newHashFromStr("0000000069e244f73d78e8fd29ba2fd2ed618bd6fa2ee92559f542fdb26e7c1d")}, + {33333, newHashFromStr("000000002dd5588a74784eaa7ab0507a18ad16a236e7b1ce69f00d7ddfb5d0a6")}, + {74000, newHashFromStr("0000000000573993a3c9e41ce34471c079dcf5f52a0e824a81e7f953b8661a20")}, + {105000, newHashFromStr("00000000000291ce28027faea320c8d2b054b2e0fe44a773f3eefb151d6bdc97")}, + {134444, newHashFromStr("00000000000005b12ffd4cd315cd34ffd4a594f430ac814c91184a0d42d2b0fe")}, + {168000, newHashFromStr("000000000000099e61ea72015e79632f216fe6cb33d7899acb35b75c8303b763")}, + {193000, newHashFromStr("000000000000059f452a5f7340de6682a977387c17010ff6e6c3bd83ca8b1317")}, + {210000, newHashFromStr("000000000000048b95347e83192f69cf0366076336c639f9b7228e9ba171342e")}, + {216116, newHashFromStr("00000000000001b4f4b433e81ee46494af945cf96014816a4e2370f11b23df4e")}, + {225430, newHashFromStr("00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932")}, + {250000, newHashFromStr("000000000000003887df1f29024b06fc2200b55f8af8f35453d7be294df2d214")}, + {267300, newHashFromStr("000000000000000a83fbd660e918f218bf37edd92b748ad940483c7c116179ac")}, + {279000, newHashFromStr("0000000000000001ae8c72a0b0c301f67e3afca10e819efa9041e458e9bd7e40")}, + {300255, newHashFromStr("0000000000000000162804527c6e9b9f0563a280525f9d08c12041def0a0f3b2")}, + {319400, newHashFromStr("000000000000000021c6052e9becade189495d1c539aa37c58917305fd15f13b")}, + {343185, newHashFromStr("0000000000000000072b8bf361d01a6ba7d445dd024203fafc78768ed4368554")}, + {352940, newHashFromStr("000000000000000010755df42dba556bb72be6a32f3ce0b6941ce4430152c9ff")}, + {382320, newHashFromStr("00000000000000000a8dc6ed5b133d0eb2fd6af56203e4159789b092defd8ab2")}, + {400000, newHashFromStr("000000000000000004ec466ce4732fe6f1ed1cddc2ed4b328fff5224276e3f6f")}, + {430000, newHashFromStr("000000000000000001868b2bb3a285f3cc6b33ea234eb70facf4dcdf22186b87")}, + {460000, newHashFromStr("000000000000000000ef751bbce8e744ad303c47ece06c8d863e4d417efc258c")}, + {490000, newHashFromStr("000000000000000000de069137b17b8d5a3dfbd5b145b2dcfb203f15d0c4de90")}, + {520000, newHashFromStr("0000000000000000000d26984c0229c9f6962dc74db0a6d525f2f1640396f69c")}, + {550000, newHashFromStr("000000000000000000223b7a2298fb1c6c75fb0efc28a4c56853ff4112ec6bc9")}, + {560000, newHashFromStr("0000000000000000002c7b276daf6efb2b6aa68e2ce3be67ef925b3264ae7122")}, + }, + + // Consensus rule change deployments. + // + // The miner confirmation window is defined as: + // target proof of work timespan / target proof of work spacing + RuleChangeActivationThreshold: 1916, // 95% of MinerConfirmationWindow + MinerConfirmationWindow: 2016, // + Deployments: [DefinedDeployments]ConsensusDeployment{ + DeploymentTestDummy: { + BitNumber: 28, + StartTime: 1199145601, // January 1, 2008 UTC + ExpireTime: 1230767999, // December 31, 2008 UTC + }, + DeploymentCSV: { + BitNumber: 0, + StartTime: 1462060800, // May 1st, 2016 + ExpireTime: 1493596800, // May 1st, 2017 + }, + DeploymentSegwit: { + BitNumber: 1, + StartTime: 1479168000, // November 15, 2016 UTC + ExpireTime: 1510704000, // November 15, 2017 UTC. + }, + }, + + // Mempool parameters + RelayNonStdTxs: false, + + // Human-readable part for Bech32 encoded segwit addresses, as defined in + // BIP 173. + Bech32HRPSegwit: "bc", // always bc for main net + + // Address encoding magics + PubKeyHashAddrID: 0x00, // starts with 1 + ScriptHashAddrID: 0x05, // starts with 3 + PrivateKeyID: 0x80, // starts with 5 (uncompressed) or K (compressed) + WitnessPubKeyHashAddrID: 0x06, // starts with p2 + WitnessScriptHashAddrID: 0x0A, // starts with 7Xh + + // BIP32 hierarchical deterministic extended key magics + HDPrivateKeyID: [4]byte{0x04, 0x88, 0xad, 0xe4}, // starts with xprv + HDPublicKeyID: [4]byte{0x04, 0x88, 0xb2, 0x1e}, // starts with xpub + + // BIP44 coin type used in the hierarchical deterministic path for + // address generation. + HDCoinType: 0, +} + +// RegressionNetParams defines the network parameters for the regression test +// Bitcoin network. Not to be confused with the test Bitcoin network (version +// 3), this network is sometimes simply called "testnet". +var RegressionNetParams = Params{ + Name: "regtest", + Net: wire.TestNet, + DefaultPort: "18444", + DNSSeeds: []DNSSeed{}, + + // Chain parameters + GenesisBlock: ®TestGenesisBlock, + GenesisHash: ®TestGenesisHash, + PowLimit: regressionPowLimit, + PowLimitBits: 0x207fffff, + CoinbaseMaturity: 100, + BIP0034Height: 100000000, // Not active - Permit ver 1 blocks + BIP0065Height: 1351, // Used by regression tests + BIP0066Height: 1251, // Used by regression tests + SubsidyReductionInterval: 150, + TargetTimespan: time.Hour * 24 * 14, // 14 days + TargetTimePerBlock: time.Minute * 10, // 10 minutes + RetargetAdjustmentFactor: 4, // 25% less, 400% more + ReduceMinDifficulty: true, + MinDiffReductionTime: time.Minute * 20, // TargetTimePerBlock * 2 + GenerateSupported: true, + + // Checkpoints ordered from oldest to newest. + Checkpoints: nil, + + // Consensus rule change deployments. + // + // The miner confirmation window is defined as: + // target proof of work timespan / target proof of work spacing + RuleChangeActivationThreshold: 108, // 75% of MinerConfirmationWindow + MinerConfirmationWindow: 144, + Deployments: [DefinedDeployments]ConsensusDeployment{ + DeploymentTestDummy: { + BitNumber: 28, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires + }, + DeploymentCSV: { + BitNumber: 0, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires + }, + DeploymentSegwit: { + BitNumber: 1, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires. + }, + }, + + // Mempool parameters + RelayNonStdTxs: true, + + // Human-readable part for Bech32 encoded segwit addresses, as defined in + // BIP 173. + Bech32HRPSegwit: "bcrt", // always bcrt for reg test net + + // Address encoding magics + PubKeyHashAddrID: 0x6f, // starts with m or n + ScriptHashAddrID: 0xc4, // starts with 2 + PrivateKeyID: 0xef, // starts with 9 (uncompressed) or c (compressed) + + // BIP32 hierarchical deterministic extended key magics + HDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x94}, // starts with tprv + HDPublicKeyID: [4]byte{0x04, 0x35, 0x87, 0xcf}, // starts with tpub + + // BIP44 coin type used in the hierarchical deterministic path for + // address generation. + HDCoinType: 1, +} + +// TestNet3Params defines the network parameters for the test Bitcoin network +// (version 3). Not to be confused with the regression test network, this +// network is sometimes simply called "testnet". +var TestNet3Params = Params{ + Name: "testnet3", + Net: wire.TestNet3, + DefaultPort: "18333", + DNSSeeds: []DNSSeed{ + {"testnet-seed.bitcoin.jonasschnelli.ch", true}, + {"testnet-seed.bitcoin.schildbach.de", false}, + {"seed.tbtc.petertodd.org", true}, + {"testnet-seed.bluematt.me", false}, + }, + + // Chain parameters + GenesisBlock: &testNet3GenesisBlock, + GenesisHash: &testNet3GenesisHash, + PowLimit: testNet3PowLimit, + PowLimitBits: 0x1d00ffff, + BIP0034Height: 21111, // 0000000023b3a96d3484e5abb3755c413e7d41500f8e2a5c3f0dd01299cd8ef8 + BIP0065Height: 581885, // 00000000007f6655f22f98e72ed80d8b06dc761d5da09df0fa1dc4be4f861eb6 + BIP0066Height: 330776, // 000000002104c8c45e99a8853285a3b592602a3ccde2b832481da85e9e4ba182 + CoinbaseMaturity: 100, + SubsidyReductionInterval: 210000, + TargetTimespan: time.Hour * 24 * 14, // 14 days + TargetTimePerBlock: time.Minute * 10, // 10 minutes + RetargetAdjustmentFactor: 4, // 25% less, 400% more + ReduceMinDifficulty: true, + MinDiffReductionTime: time.Minute * 20, // TargetTimePerBlock * 2 + GenerateSupported: false, + + // Checkpoints ordered from oldest to newest. + Checkpoints: []Checkpoint{ + {546, newHashFromStr("000000002a936ca763904c3c35fce2f3556c559c0214345d31b1bcebf76acb70")}, + {100000, newHashFromStr("00000000009e2958c15ff9290d571bf9459e93b19765c6801ddeccadbb160a1e")}, + {200000, newHashFromStr("0000000000287bffd321963ef05feab753ebe274e1d78b2fd4e2bfe9ad3aa6f2")}, + {300001, newHashFromStr("0000000000004829474748f3d1bc8fcf893c88be255e6d7f571c548aff57abf4")}, + {400002, newHashFromStr("0000000005e2c73b8ecb82ae2dbc2e8274614ebad7172b53528aba7501f5a089")}, + {500011, newHashFromStr("00000000000929f63977fbac92ff570a9bd9e7715401ee96f2848f7b07750b02")}, + {600002, newHashFromStr("000000000001f471389afd6ee94dcace5ccc44adc18e8bff402443f034b07240")}, + {700000, newHashFromStr("000000000000406178b12a4dea3b27e13b3c4fe4510994fd667d7c1e6a3f4dc1")}, + {800010, newHashFromStr("000000000017ed35296433190b6829db01e657d80631d43f5983fa403bfdb4c1")}, + {900000, newHashFromStr("0000000000356f8d8924556e765b7a94aaebc6b5c8685dcfa2b1ee8b41acd89b")}, + {1000007, newHashFromStr("00000000001ccb893d8a1f25b70ad173ce955e5f50124261bbbc50379a612ddf")}, + {1100007, newHashFromStr("00000000000abc7b2cd18768ab3dee20857326a818d1946ed6796f42d66dd1e8")}, + {1200007, newHashFromStr("00000000000004f2dc41845771909db57e04191714ed8c963f7e56713a7b6cea")}, + {1300007, newHashFromStr("0000000072eab69d54df75107c052b26b0395b44f77578184293bf1bb1dbd9fa")}, + }, + + // Consensus rule change deployments. + // + // The miner confirmation window is defined as: + // target proof of work timespan / target proof of work spacing + RuleChangeActivationThreshold: 1512, // 75% of MinerConfirmationWindow + MinerConfirmationWindow: 2016, + Deployments: [DefinedDeployments]ConsensusDeployment{ + DeploymentTestDummy: { + BitNumber: 28, + StartTime: 1199145601, // January 1, 2008 UTC + ExpireTime: 1230767999, // December 31, 2008 UTC + }, + DeploymentCSV: { + BitNumber: 0, + StartTime: 1456790400, // March 1st, 2016 + ExpireTime: 1493596800, // May 1st, 2017 + }, + DeploymentSegwit: { + BitNumber: 1, + StartTime: 1462060800, // May 1, 2016 UTC + ExpireTime: 1493596800, // May 1, 2017 UTC. + }, + }, + + // Mempool parameters + RelayNonStdTxs: true, + + // Human-readable part for Bech32 encoded segwit addresses, as defined in + // BIP 173. + Bech32HRPSegwit: "tb", // always tb for test net + + // Address encoding magics + PubKeyHashAddrID: 0x6f, // starts with m or n + ScriptHashAddrID: 0xc4, // starts with 2 + WitnessPubKeyHashAddrID: 0x03, // starts with QW + WitnessScriptHashAddrID: 0x28, // starts with T7n + PrivateKeyID: 0xef, // starts with 9 (uncompressed) or c (compressed) + + // BIP32 hierarchical deterministic extended key magics + HDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x94}, // starts with tprv + HDPublicKeyID: [4]byte{0x04, 0x35, 0x87, 0xcf}, // starts with tpub + + // BIP44 coin type used in the hierarchical deterministic path for + // address generation. + HDCoinType: 1, +} + +// SimNetParams defines the network parameters for the simulation test Bitcoin +// network. This network is similar to the normal test network except it is +// intended for private use within a group of individuals doing simulation +// testing. The functionality is intended to differ in that the only nodes +// which are specifically specified are used to create the network rather than +// following normal discovery rules. This is important as otherwise it would +// just turn into another public testnet. +var SimNetParams = Params{ + Name: "simnet", + Net: wire.SimNet, + DefaultPort: "18555", + DNSSeeds: []DNSSeed{}, // NOTE: There must NOT be any seeds. + + // Chain parameters + GenesisBlock: &simNetGenesisBlock, + GenesisHash: &simNetGenesisHash, + PowLimit: simNetPowLimit, + PowLimitBits: 0x207fffff, + BIP0034Height: 0, // Always active on simnet + BIP0065Height: 0, // Always active on simnet + BIP0066Height: 0, // Always active on simnet + CoinbaseMaturity: 100, + SubsidyReductionInterval: 210000, + TargetTimespan: time.Hour * 24 * 14, // 14 days + TargetTimePerBlock: time.Minute * 10, // 10 minutes + RetargetAdjustmentFactor: 4, // 25% less, 400% more + ReduceMinDifficulty: true, + MinDiffReductionTime: time.Minute * 20, // TargetTimePerBlock * 2 + GenerateSupported: true, + + // Checkpoints ordered from oldest to newest. + Checkpoints: nil, + + // Consensus rule change deployments. + // + // The miner confirmation window is defined as: + // target proof of work timespan / target proof of work spacing + RuleChangeActivationThreshold: 75, // 75% of MinerConfirmationWindow + MinerConfirmationWindow: 100, + Deployments: [DefinedDeployments]ConsensusDeployment{ + DeploymentTestDummy: { + BitNumber: 28, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires + }, + DeploymentCSV: { + BitNumber: 0, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires + }, + DeploymentSegwit: { + BitNumber: 1, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires. + }, + }, + + // Mempool parameters + RelayNonStdTxs: true, + + // Human-readable part for Bech32 encoded segwit addresses, as defined in + // BIP 173. + Bech32HRPSegwit: "sb", // always sb for sim net + + // Address encoding magics + PubKeyHashAddrID: 0x3f, // starts with S + ScriptHashAddrID: 0x7b, // starts with s + PrivateKeyID: 0x64, // starts with 4 (uncompressed) or F (compressed) + WitnessPubKeyHashAddrID: 0x19, // starts with Gg + WitnessScriptHashAddrID: 0x28, // starts with ? + + // BIP32 hierarchical deterministic extended key magics + HDPrivateKeyID: [4]byte{0x04, 0x20, 0xb9, 0x00}, // starts with sprv + HDPublicKeyID: [4]byte{0x04, 0x20, 0xbd, 0x3a}, // starts with spub + + // BIP44 coin type used in the hierarchical deterministic path for + // address generation. + HDCoinType: 115, // ASCII for s +} + +// SigNetParams defines the network parameters for the default public signet +// Bitcoin network. Not to be confused with the regression test network, this +// network is sometimes simply called "signet" or "taproot signet". +var SigNetParams = CustomSignetParams( + DefaultSignetChallenge, DefaultSignetDNSSeeds, +) + +// CustomSignetParams creates network parameters for a custom signet network +// from a challenge. The challenge is the binary compiled version of the block +// challenge script. +func CustomSignetParams(challenge []byte, dnsSeeds []DNSSeed) Params { + // The message start is defined as the first four bytes of the sha256d + // of the challenge script, as a single push (i.e. prefixed with the + // challenge script length). + challengeLength := byte(len(challenge)) + hashDouble := chainhash.DoubleHashB( + append([]byte{challengeLength}, challenge...), + ) + + // We use little endian encoding of the hash prefix to be in line with + // the other wire network identities. + net := binary.LittleEndian.Uint32(hashDouble[0:4]) + return Params{ + Name: "signet", + Net: wire.BitcoinNet(net), + DefaultPort: "38333", + DNSSeeds: dnsSeeds, + + // Chain parameters + GenesisBlock: &sigNetGenesisBlock, + GenesisHash: &sigNetGenesisHash, + PowLimit: sigNetPowLimit, + PowLimitBits: 0x1e0377ae, + BIP0034Height: 1, + BIP0065Height: 1, + BIP0066Height: 1, + CoinbaseMaturity: 100, + SubsidyReductionInterval: 210000, + TargetTimespan: time.Hour * 24 * 14, // 14 days + TargetTimePerBlock: time.Minute * 10, // 10 minutes + RetargetAdjustmentFactor: 4, // 25% less, 400% more + ReduceMinDifficulty: false, + MinDiffReductionTime: time.Minute * 20, // TargetTimePerBlock * 2 + GenerateSupported: false, + + // Checkpoints ordered from oldest to newest. + Checkpoints: nil, + + // Consensus rule change deployments. + // + // The miner confirmation window is defined as: + // target proof of work timespan / target proof of work spacing + RuleChangeActivationThreshold: 1916, // 95% of 2016 + MinerConfirmationWindow: 2016, + Deployments: [DefinedDeployments]ConsensusDeployment{ + DeploymentTestDummy: { + BitNumber: 28, + StartTime: 1199145601, // January 1, 2008 UTC + ExpireTime: 1230767999, // December 31, 2008 UTC + }, + DeploymentCSV: { + BitNumber: 29, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires + }, + DeploymentSegwit: { + BitNumber: 29, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires. + }, + DeploymentTaproot: { + BitNumber: 29, + StartTime: 0, // Always available for vote + ExpireTime: math.MaxInt64, // Never expires. + }, + }, + + // Mempool parameters + RelayNonStdTxs: false, + + // Human-readable part for Bech32 encoded segwit addresses, as defined in + // BIP 173. + Bech32HRPSegwit: "tb", // always tb for test net + + // Address encoding magics + PubKeyHashAddrID: 0x6f, // starts with m or n + ScriptHashAddrID: 0xc4, // starts with 2 + WitnessPubKeyHashAddrID: 0x03, // starts with QW + WitnessScriptHashAddrID: 0x28, // starts with T7n + PrivateKeyID: 0xef, // starts with 9 (uncompressed) or c (compressed) + + // BIP32 hierarchical deterministic extended key magics + HDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x94}, // starts with tprv + HDPublicKeyID: [4]byte{0x04, 0x35, 0x87, 0xcf}, // starts with tpub + + // BIP44 coin type used in the hierarchical deterministic path for + // address generation. + HDCoinType: 1, + } +} + +var ( + // ErrDuplicateNet describes an error where the parameters for a Bitcoin + // network could not be set due to the network already being a standard + // network or previously-registered into this package. + ErrDuplicateNet = errors.New("duplicate Bitcoin network") + + // ErrUnknownHDKeyID describes an error where the provided id which + // is intended to identify the network for a hierarchical deterministic + // private extended key is not registered. + ErrUnknownHDKeyID = errors.New("unknown hd private extended key bytes") + + // ErrInvalidHDKeyID describes an error where the provided hierarchical + // deterministic version bytes, or hd key id, is malformed. + ErrInvalidHDKeyID = errors.New("invalid hd extended key version bytes") +) + +var ( + registeredNets = make(map[wire.BitcoinNet]struct{}) + pubKeyHashAddrIDs = make(map[byte]struct{}) + scriptHashAddrIDs = make(map[byte]struct{}) + bech32SegwitPrefixes = make(map[string]struct{}) + hdPrivToPubKeyIDs = make(map[[4]byte][]byte) +) + +// String returns the hostname of the DNS seed in human-readable form. +func (d DNSSeed) String() string { + return d.Host +} + +// Register registers the network parameters for a Bitcoin network. This may +// error with ErrDuplicateNet if the network is already registered (either +// due to a previous Register call, or the network being one of the default +// networks). +// +// Network parameters should be registered into this package by a main package +// as early as possible. Then, library packages may lookup networks or network +// parameters based on inputs and work regardless of the network being standard +// or not. +func Register(params *Params) error { + if _, ok := registeredNets[params.Net]; ok { + return ErrDuplicateNet + } + registeredNets[params.Net] = struct{}{} + pubKeyHashAddrIDs[params.PubKeyHashAddrID] = struct{}{} + scriptHashAddrIDs[params.ScriptHashAddrID] = struct{}{} + + err := RegisterHDKeyID(params.HDPublicKeyID[:], params.HDPrivateKeyID[:]) + if err != nil { + return err + } + + // A valid Bech32 encoded segwit address always has as prefix the + // human-readable part for the given net followed by '1'. + bech32SegwitPrefixes[params.Bech32HRPSegwit+"1"] = struct{}{} + return nil +} + +// mustRegister performs the same function as Register except it panics if there +// is an error. This should only be called from package init functions. +func mustRegister(params *Params) { + if err := Register(params); err != nil { + panic("failed to register network: " + err.Error()) + } +} + +// IsPubKeyHashAddrID returns whether the id is an identifier known to prefix a +// pay-to-pubkey-hash address on any default or registered network. This is +// used when decoding an address string into a specific address type. It is up +// to the caller to check both this and IsScriptHashAddrID and decide whether an +// address is a pubkey hash address, script hash address, neither, or +// undeterminable (if both return true). +func IsPubKeyHashAddrID(id byte) bool { + _, ok := pubKeyHashAddrIDs[id] + return ok +} + +// IsScriptHashAddrID returns whether the id is an identifier known to prefix a +// pay-to-script-hash address on any default or registered network. This is +// used when decoding an address string into a specific address type. It is up +// to the caller to check both this and IsPubKeyHashAddrID and decide whether an +// address is a pubkey hash address, script hash address, neither, or +// undeterminable (if both return true). +func IsScriptHashAddrID(id byte) bool { + _, ok := scriptHashAddrIDs[id] + return ok +} + +// IsBech32SegwitPrefix returns whether the prefix is a known prefix for segwit +// addresses on any default or registered network. This is used when decoding +// an address string into a specific address type. +func IsBech32SegwitPrefix(prefix string) bool { + prefix = strings.ToLower(prefix) + _, ok := bech32SegwitPrefixes[prefix] + return ok +} + +// RegisterHDKeyID registers a public and private hierarchical deterministic +// extended key ID pair. +// +// Non-standard HD version bytes, such as the ones documented in SLIP-0132, +// should be registered using this method for library packages to lookup key +// IDs (aka HD version bytes). When the provided key IDs are invalid, the +// ErrInvalidHDKeyID error will be returned. +// +// Reference: +// SLIP-0132 : Registered HD version bytes for BIP-0032 +// https://github.com/satoshilabs/slips/blob/master/slip-0132.md +func RegisterHDKeyID(hdPublicKeyID []byte, hdPrivateKeyID []byte) error { + if len(hdPublicKeyID) != 4 || len(hdPrivateKeyID) != 4 { + return ErrInvalidHDKeyID + } + + var keyID [4]byte + copy(keyID[:], hdPrivateKeyID) + hdPrivToPubKeyIDs[keyID] = hdPublicKeyID + + return nil +} + +// HDPrivateKeyToPublicKeyID accepts a private hierarchical deterministic +// extended key id and returns the associated public key id. When the provided +// id is not registered, the ErrUnknownHDKeyID error will be returned. +func HDPrivateKeyToPublicKeyID(id []byte) ([]byte, error) { + if len(id) != 4 { + return nil, ErrUnknownHDKeyID + } + + var key [4]byte + copy(key[:], id) + pubBytes, ok := hdPrivToPubKeyIDs[key] + if !ok { + return nil, ErrUnknownHDKeyID + } + + return pubBytes, nil +} + +// newHashFromStr converts the passed big-endian hex string into a +// chainhash.Hash. It only differs from the one available in chainhash in that +// it panics on an error since it will only (and must only) be called with +// hard-coded, and therefore known good, hashes. +func newHashFromStr(hexStr string) *chainhash.Hash { + hash, err := chainhash.NewHashFromStr(hexStr) + if err != nil { + // Ordinarily I don't like panics in library code since it + // can take applications down without them having a chance to + // recover which is extremely annoying, however an exception is + // being made in this case because the only way this can panic + // is if there is an error in the hard-coded hashes. Thus it + // will only ever potentially panic on init and therefore is + // 100% predictable. + panic(err) + } + return hash +} + +func init() { + // Register all default networks when the package is initialized. + mustRegister(&MainNetParams) + mustRegister(&TestNet3Params) + mustRegister(&RegressionNetParams) + mustRegister(&SimNetParams) +} diff --git a/vendor/github.com/btcsuite/btcd/wire/README.md b/vendor/github.com/btcsuite/btcd/wire/README.md new file mode 100644 index 0000000000..8660bbfd54 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/README.md @@ -0,0 +1,113 @@ +wire +==== + +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/wire) +======= + +Package wire implements the bitcoin wire protocol. A comprehensive suite of +tests with 100% test coverage is provided to ensure proper functionality. + +There is an associated blog post about the release of this package +[here](https://blog.conformal.com/btcwire-the-bitcoin-wire-protocol-package-from-btcd/). + +This package has intentionally been designed so it can be used as a standalone +package for any projects needing to interface with bitcoin peers at the wire +protocol level. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/wire +``` + +## Bitcoin Message Overview + +The bitcoin protocol consists of exchanging messages between peers. Each message +is preceded by a header which identifies information about it such as which +bitcoin network it is a part of, its type, how big it is, and a checksum to +verify validity. All encoding and decoding of message headers is handled by this +package. + +To accomplish this, there is a generic interface for bitcoin messages named +`Message` which allows messages of any type to be read, written, or passed +around through channels, functions, etc. In addition, concrete implementations +of most of the currently supported bitcoin messages are provided. For these +supported messages, all of the details of marshalling and unmarshalling to and +from the wire using bitcoin encoding are handled so the caller doesn't have to +concern themselves with the specifics. + +## Reading Messages Example + +In order to unmarshal bitcoin messages from the wire, use the `ReadMessage` +function. It accepts any `io.Reader`, but typically this will be a `net.Conn` +to a remote node running a bitcoin peer. Example syntax is: + +```Go + // Use the most recent protocol version supported by the package and the + // main bitcoin network. + pver := wire.ProtocolVersion + btcnet := wire.MainNet + + // Reads and validates the next bitcoin message from conn using the + // protocol version pver and the bitcoin network btcnet. The returns + // are a wire.Message, a []byte which contains the unmarshalled + // raw payload, and a possible error. + msg, rawPayload, err := wire.ReadMessage(conn, pver, btcnet) + if err != nil { + // Log and handle the error + } +``` + +See the package documentation for details on determining the message type. + +## Writing Messages Example + +In order to marshal bitcoin messages to the wire, use the `WriteMessage` +function. It accepts any `io.Writer`, but typically this will be a `net.Conn` +to a remote node running a bitcoin peer. Example syntax to request addresses +from a remote peer is: + +```Go + // Use the most recent protocol version supported by the package and the + // main bitcoin network. + pver := wire.ProtocolVersion + btcnet := wire.MainNet + + // Create a new getaddr bitcoin message. + msg := wire.NewMsgGetAddr() + + // Writes a bitcoin message msg to conn using the protocol version + // pver, and the bitcoin network btcnet. The return is a possible + // error. + err := wire.WriteMessage(conn, msg, pver, btcnet) + if err != nil { + // Log and handle the error + } +``` + +## GPG Verification Key + +All official release tags are signed by Conformal so users can ensure the code +has not been tampered with and is coming from the btcsuite developers. To +verify the signature perform the following: + +- Download the public key from the Conformal website at + https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt + +- Import the public key into your GPG keyring: + ```bash + gpg --import GIT-GPG-KEY-conformal.txt + ``` + +- Verify the release tag with the following command where `TAG_NAME` is a + placeholder for the specific tag: + ```bash + git tag -v TAG_NAME + ``` + +## License + +Package wire is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/vendor/github.com/btcsuite/btcd/wire/blockheader.go b/vendor/github.com/btcsuite/btcd/wire/blockheader.go new file mode 100644 index 0000000000..9c9c2237e6 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/blockheader.go @@ -0,0 +1,128 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "bytes" + "io" + "time" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// MaxBlockHeaderPayload is the maximum number of bytes a block header can be. +// Version 4 bytes + Timestamp 4 bytes + Bits 4 bytes + Nonce 4 bytes + +// PrevBlock and MerkleRoot hashes. +const MaxBlockHeaderPayload = 16 + (chainhash.HashSize * 2) + +// BlockHeader defines information about a block and is used in the bitcoin +// block (MsgBlock) and headers (MsgHeaders) messages. +type BlockHeader struct { + // Version of the block. This is not the same as the protocol version. + Version int32 + + // Hash of the previous block header in the block chain. + PrevBlock chainhash.Hash + + // Merkle tree reference to hash of all transactions for the block. + MerkleRoot chainhash.Hash + + // Time the block was created. This is, unfortunately, encoded as a + // uint32 on the wire and therefore is limited to 2106. + Timestamp time.Time + + // Difficulty target for the block. + Bits uint32 + + // Nonce used to generate the block. + Nonce uint32 +} + +// blockHeaderLen is a constant that represents the number of bytes for a block +// header. +const blockHeaderLen = 80 + +// BlockHash computes the block identifier hash for the given block header. +func (h *BlockHeader) BlockHash() chainhash.Hash { + // Encode the header and double sha256 everything prior to the number of + // transactions. Ignore the error returns since there is no way the + // encode could fail except being out of memory which would cause a + // run-time panic. + buf := bytes.NewBuffer(make([]byte, 0, MaxBlockHeaderPayload)) + _ = writeBlockHeader(buf, 0, h) + + return chainhash.DoubleHashH(buf.Bytes()) +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +// See Deserialize for decoding block headers stored to disk, such as in a +// database, as opposed to decoding block headers from the wire. +func (h *BlockHeader) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + return readBlockHeader(r, pver, h) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +// See Serialize for encoding block headers to be stored to disk, such as in a +// database, as opposed to encoding block headers for the wire. +func (h *BlockHeader) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + return writeBlockHeader(w, pver, h) +} + +// Deserialize decodes a block header from r into the receiver using a format +// that is suitable for long-term storage such as a database while respecting +// the Version field. +func (h *BlockHeader) Deserialize(r io.Reader) error { + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of readBlockHeader. + return readBlockHeader(r, 0, h) +} + +// Serialize encodes a block header from r into the receiver using a format +// that is suitable for long-term storage such as a database while respecting +// the Version field. +func (h *BlockHeader) Serialize(w io.Writer) error { + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of writeBlockHeader. + return writeBlockHeader(w, 0, h) +} + +// NewBlockHeader returns a new BlockHeader using the provided version, previous +// block hash, merkle root hash, difficulty bits, and nonce used to generate the +// block with defaults for the remaining fields. +func NewBlockHeader(version int32, prevHash, merkleRootHash *chainhash.Hash, + bits uint32, nonce uint32) *BlockHeader { + + // Limit the timestamp to one second precision since the protocol + // doesn't support better. + return &BlockHeader{ + Version: version, + PrevBlock: *prevHash, + MerkleRoot: *merkleRootHash, + Timestamp: time.Unix(time.Now().Unix(), 0), + Bits: bits, + Nonce: nonce, + } +} + +// readBlockHeader reads a bitcoin block header from r. See Deserialize for +// decoding block headers stored to disk, such as in a database, as opposed to +// decoding from the wire. +func readBlockHeader(r io.Reader, pver uint32, bh *BlockHeader) error { + return readElements(r, &bh.Version, &bh.PrevBlock, &bh.MerkleRoot, + (*uint32Time)(&bh.Timestamp), &bh.Bits, &bh.Nonce) +} + +// writeBlockHeader writes a bitcoin block header to w. See Serialize for +// encoding block headers to be stored to disk, such as in a database, as +// opposed to encoding for the wire. +func writeBlockHeader(w io.Writer, pver uint32, bh *BlockHeader) error { + sec := uint32(bh.Timestamp.Unix()) + return writeElements(w, bh.Version, &bh.PrevBlock, &bh.MerkleRoot, + sec, bh.Bits, bh.Nonce) +} diff --git a/vendor/github.com/btcsuite/btcd/wire/common.go b/vendor/github.com/btcsuite/btcd/wire/common.go new file mode 100644 index 0000000000..42c1797b32 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/common.go @@ -0,0 +1,689 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "crypto/rand" + "encoding/binary" + "fmt" + "io" + "math" + "time" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +const ( + // MaxVarIntPayload is the maximum payload size for a variable length integer. + MaxVarIntPayload = 9 + + // binaryFreeListMaxItems is the number of buffers to keep in the free + // list to use for binary serialization and deserialization. + binaryFreeListMaxItems = 1024 +) + +var ( + // littleEndian is a convenience variable since binary.LittleEndian is + // quite long. + littleEndian = binary.LittleEndian + + // bigEndian is a convenience variable since binary.BigEndian is quite + // long. + bigEndian = binary.BigEndian +) + +// binaryFreeList defines a concurrent safe free list of byte slices (up to the +// maximum number defined by the binaryFreeListMaxItems constant) that have a +// cap of 8 (thus it supports up to a uint64). It is used to provide temporary +// buffers for serializing and deserializing primitive numbers to and from their +// binary encoding in order to greatly reduce the number of allocations +// required. +// +// For convenience, functions are provided for each of the primitive unsigned +// integers that automatically obtain a buffer from the free list, perform the +// necessary binary conversion, read from or write to the given io.Reader or +// io.Writer, and return the buffer to the free list. +type binaryFreeList chan []byte + +// Borrow returns a byte slice from the free list with a length of 8. A new +// buffer is allocated if there are not any available on the free list. +func (l binaryFreeList) Borrow() []byte { + var buf []byte + select { + case buf = <-l: + default: + buf = make([]byte, 8) + } + return buf[:8] +} + +// Return puts the provided byte slice back on the free list. The buffer MUST +// have been obtained via the Borrow function and therefore have a cap of 8. +func (l binaryFreeList) Return(buf []byte) { + select { + case l <- buf: + default: + // Let it go to the garbage collector. + } +} + +// Uint8 reads a single byte from the provided reader using a buffer from the +// free list and returns it as a uint8. +func (l binaryFreeList) Uint8(r io.Reader) (uint8, error) { + buf := l.Borrow()[:1] + if _, err := io.ReadFull(r, buf); err != nil { + l.Return(buf) + return 0, err + } + rv := buf[0] + l.Return(buf) + return rv, nil +} + +// Uint16 reads two bytes from the provided reader using a buffer from the +// free list, converts it to a number using the provided byte order, and returns +// the resulting uint16. +func (l binaryFreeList) Uint16(r io.Reader, byteOrder binary.ByteOrder) (uint16, error) { + buf := l.Borrow()[:2] + if _, err := io.ReadFull(r, buf); err != nil { + l.Return(buf) + return 0, err + } + rv := byteOrder.Uint16(buf) + l.Return(buf) + return rv, nil +} + +// Uint32 reads four bytes from the provided reader using a buffer from the +// free list, converts it to a number using the provided byte order, and returns +// the resulting uint32. +func (l binaryFreeList) Uint32(r io.Reader, byteOrder binary.ByteOrder) (uint32, error) { + buf := l.Borrow()[:4] + if _, err := io.ReadFull(r, buf); err != nil { + l.Return(buf) + return 0, err + } + rv := byteOrder.Uint32(buf) + l.Return(buf) + return rv, nil +} + +// Uint64 reads eight bytes from the provided reader using a buffer from the +// free list, converts it to a number using the provided byte order, and returns +// the resulting uint64. +func (l binaryFreeList) Uint64(r io.Reader, byteOrder binary.ByteOrder) (uint64, error) { + buf := l.Borrow()[:8] + if _, err := io.ReadFull(r, buf); err != nil { + l.Return(buf) + return 0, err + } + rv := byteOrder.Uint64(buf) + l.Return(buf) + return rv, nil +} + +// PutUint8 copies the provided uint8 into a buffer from the free list and +// writes the resulting byte to the given writer. +func (l binaryFreeList) PutUint8(w io.Writer, val uint8) error { + buf := l.Borrow()[:1] + buf[0] = val + _, err := w.Write(buf) + l.Return(buf) + return err +} + +// PutUint16 serializes the provided uint16 using the given byte order into a +// buffer from the free list and writes the resulting two bytes to the given +// writer. +func (l binaryFreeList) PutUint16(w io.Writer, byteOrder binary.ByteOrder, val uint16) error { + buf := l.Borrow()[:2] + byteOrder.PutUint16(buf, val) + _, err := w.Write(buf) + l.Return(buf) + return err +} + +// PutUint32 serializes the provided uint32 using the given byte order into a +// buffer from the free list and writes the resulting four bytes to the given +// writer. +func (l binaryFreeList) PutUint32(w io.Writer, byteOrder binary.ByteOrder, val uint32) error { + buf := l.Borrow()[:4] + byteOrder.PutUint32(buf, val) + _, err := w.Write(buf) + l.Return(buf) + return err +} + +// PutUint64 serializes the provided uint64 using the given byte order into a +// buffer from the free list and writes the resulting eight bytes to the given +// writer. +func (l binaryFreeList) PutUint64(w io.Writer, byteOrder binary.ByteOrder, val uint64) error { + buf := l.Borrow()[:8] + byteOrder.PutUint64(buf, val) + _, err := w.Write(buf) + l.Return(buf) + return err +} + +// binarySerializer provides a free list of buffers to use for serializing and +// deserializing primitive integer values to and from io.Readers and io.Writers. +var binarySerializer binaryFreeList = make(chan []byte, binaryFreeListMaxItems) + +// errNonCanonicalVarInt is the common format string used for non-canonically +// encoded variable length integer errors. +var errNonCanonicalVarInt = "non-canonical varint %x - discriminant %x must " + + "encode a value greater than %x" + +// uint32Time represents a unix timestamp encoded with a uint32. It is used as +// a way to signal the readElement function how to decode a timestamp into a Go +// time.Time since it is otherwise ambiguous. +type uint32Time time.Time + +// int64Time represents a unix timestamp encoded with an int64. It is used as +// a way to signal the readElement function how to decode a timestamp into a Go +// time.Time since it is otherwise ambiguous. +type int64Time time.Time + +// readElement reads the next sequence of bytes from r using little endian +// depending on the concrete type of element pointed to. +func readElement(r io.Reader, element interface{}) error { + // Attempt to read the element based on the concrete type via fast + // type assertions first. + switch e := element.(type) { + case *int32: + rv, err := binarySerializer.Uint32(r, littleEndian) + if err != nil { + return err + } + *e = int32(rv) + return nil + + case *uint32: + rv, err := binarySerializer.Uint32(r, littleEndian) + if err != nil { + return err + } + *e = rv + return nil + + case *int64: + rv, err := binarySerializer.Uint64(r, littleEndian) + if err != nil { + return err + } + *e = int64(rv) + return nil + + case *uint64: + rv, err := binarySerializer.Uint64(r, littleEndian) + if err != nil { + return err + } + *e = rv + return nil + + case *bool: + rv, err := binarySerializer.Uint8(r) + if err != nil { + return err + } + if rv == 0x00 { + *e = false + } else { + *e = true + } + return nil + + // Unix timestamp encoded as a uint32. + case *uint32Time: + rv, err := binarySerializer.Uint32(r, binary.LittleEndian) + if err != nil { + return err + } + *e = uint32Time(time.Unix(int64(rv), 0)) + return nil + + // Unix timestamp encoded as an int64. + case *int64Time: + rv, err := binarySerializer.Uint64(r, binary.LittleEndian) + if err != nil { + return err + } + *e = int64Time(time.Unix(int64(rv), 0)) + return nil + + // Message header checksum. + case *[4]byte: + _, err := io.ReadFull(r, e[:]) + if err != nil { + return err + } + return nil + + // Message header command. + case *[CommandSize]uint8: + _, err := io.ReadFull(r, e[:]) + if err != nil { + return err + } + return nil + + // IP address. + case *[16]byte: + _, err := io.ReadFull(r, e[:]) + if err != nil { + return err + } + return nil + + case *chainhash.Hash: + _, err := io.ReadFull(r, e[:]) + if err != nil { + return err + } + return nil + + case *ServiceFlag: + rv, err := binarySerializer.Uint64(r, littleEndian) + if err != nil { + return err + } + *e = ServiceFlag(rv) + return nil + + case *InvType: + rv, err := binarySerializer.Uint32(r, littleEndian) + if err != nil { + return err + } + *e = InvType(rv) + return nil + + case *BitcoinNet: + rv, err := binarySerializer.Uint32(r, littleEndian) + if err != nil { + return err + } + *e = BitcoinNet(rv) + return nil + + case *BloomUpdateType: + rv, err := binarySerializer.Uint8(r) + if err != nil { + return err + } + *e = BloomUpdateType(rv) + return nil + + case *RejectCode: + rv, err := binarySerializer.Uint8(r) + if err != nil { + return err + } + *e = RejectCode(rv) + return nil + } + + // Fall back to the slower binary.Read if a fast path was not available + // above. + return binary.Read(r, littleEndian, element) +} + +// readElements reads multiple items from r. It is equivalent to multiple +// calls to readElement. +func readElements(r io.Reader, elements ...interface{}) error { + for _, element := range elements { + err := readElement(r, element) + if err != nil { + return err + } + } + return nil +} + +// writeElement writes the little endian representation of element to w. +func writeElement(w io.Writer, element interface{}) error { + // Attempt to write the element based on the concrete type via fast + // type assertions first. + switch e := element.(type) { + case int32: + err := binarySerializer.PutUint32(w, littleEndian, uint32(e)) + if err != nil { + return err + } + return nil + + case uint32: + err := binarySerializer.PutUint32(w, littleEndian, e) + if err != nil { + return err + } + return nil + + case int64: + err := binarySerializer.PutUint64(w, littleEndian, uint64(e)) + if err != nil { + return err + } + return nil + + case uint64: + err := binarySerializer.PutUint64(w, littleEndian, e) + if err != nil { + return err + } + return nil + + case bool: + var err error + if e { + err = binarySerializer.PutUint8(w, 0x01) + } else { + err = binarySerializer.PutUint8(w, 0x00) + } + if err != nil { + return err + } + return nil + + // Message header checksum. + case [4]byte: + _, err := w.Write(e[:]) + if err != nil { + return err + } + return nil + + // Message header command. + case [CommandSize]uint8: + _, err := w.Write(e[:]) + if err != nil { + return err + } + return nil + + // IP address. + case [16]byte: + _, err := w.Write(e[:]) + if err != nil { + return err + } + return nil + + case *chainhash.Hash: + _, err := w.Write(e[:]) + if err != nil { + return err + } + return nil + + case ServiceFlag: + err := binarySerializer.PutUint64(w, littleEndian, uint64(e)) + if err != nil { + return err + } + return nil + + case InvType: + err := binarySerializer.PutUint32(w, littleEndian, uint32(e)) + if err != nil { + return err + } + return nil + + case BitcoinNet: + err := binarySerializer.PutUint32(w, littleEndian, uint32(e)) + if err != nil { + return err + } + return nil + + case BloomUpdateType: + err := binarySerializer.PutUint8(w, uint8(e)) + if err != nil { + return err + } + return nil + + case RejectCode: + err := binarySerializer.PutUint8(w, uint8(e)) + if err != nil { + return err + } + return nil + } + + // Fall back to the slower binary.Write if a fast path was not available + // above. + return binary.Write(w, littleEndian, element) +} + +// writeElements writes multiple items to w. It is equivalent to multiple +// calls to writeElement. +func writeElements(w io.Writer, elements ...interface{}) error { + for _, element := range elements { + err := writeElement(w, element) + if err != nil { + return err + } + } + return nil +} + +// ReadVarInt reads a variable length integer from r and returns it as a uint64. +func ReadVarInt(r io.Reader, pver uint32) (uint64, error) { + discriminant, err := binarySerializer.Uint8(r) + if err != nil { + return 0, err + } + + var rv uint64 + switch discriminant { + case 0xff: + sv, err := binarySerializer.Uint64(r, littleEndian) + if err != nil { + return 0, err + } + rv = sv + + // The encoding is not canonical if the value could have been + // encoded using fewer bytes. + min := uint64(0x100000000) + if rv < min { + return 0, messageError("ReadVarInt", fmt.Sprintf( + errNonCanonicalVarInt, rv, discriminant, min)) + } + + case 0xfe: + sv, err := binarySerializer.Uint32(r, littleEndian) + if err != nil { + return 0, err + } + rv = uint64(sv) + + // The encoding is not canonical if the value could have been + // encoded using fewer bytes. + min := uint64(0x10000) + if rv < min { + return 0, messageError("ReadVarInt", fmt.Sprintf( + errNonCanonicalVarInt, rv, discriminant, min)) + } + + case 0xfd: + sv, err := binarySerializer.Uint16(r, littleEndian) + if err != nil { + return 0, err + } + rv = uint64(sv) + + // The encoding is not canonical if the value could have been + // encoded using fewer bytes. + min := uint64(0xfd) + if rv < min { + return 0, messageError("ReadVarInt", fmt.Sprintf( + errNonCanonicalVarInt, rv, discriminant, min)) + } + + default: + rv = uint64(discriminant) + } + + return rv, nil +} + +// WriteVarInt serializes val to w using a variable number of bytes depending +// on its value. +func WriteVarInt(w io.Writer, pver uint32, val uint64) error { + if val < 0xfd { + return binarySerializer.PutUint8(w, uint8(val)) + } + + if val <= math.MaxUint16 { + err := binarySerializer.PutUint8(w, 0xfd) + if err != nil { + return err + } + return binarySerializer.PutUint16(w, littleEndian, uint16(val)) + } + + if val <= math.MaxUint32 { + err := binarySerializer.PutUint8(w, 0xfe) + if err != nil { + return err + } + return binarySerializer.PutUint32(w, littleEndian, uint32(val)) + } + + err := binarySerializer.PutUint8(w, 0xff) + if err != nil { + return err + } + return binarySerializer.PutUint64(w, littleEndian, val) +} + +// VarIntSerializeSize returns the number of bytes it would take to serialize +// val as a variable length integer. +func VarIntSerializeSize(val uint64) int { + // The value is small enough to be represented by itself, so it's + // just 1 byte. + if val < 0xfd { + return 1 + } + + // Discriminant 1 byte plus 2 bytes for the uint16. + if val <= math.MaxUint16 { + return 3 + } + + // Discriminant 1 byte plus 4 bytes for the uint32. + if val <= math.MaxUint32 { + return 5 + } + + // Discriminant 1 byte plus 8 bytes for the uint64. + return 9 +} + +// ReadVarString reads a variable length string from r and returns it as a Go +// string. A variable length string is encoded as a variable length integer +// containing the length of the string followed by the bytes that represent the +// string itself. An error is returned if the length is greater than the +// maximum block payload size since it helps protect against memory exhaustion +// attacks and forced panics through malformed messages. +func ReadVarString(r io.Reader, pver uint32) (string, error) { + count, err := ReadVarInt(r, pver) + if err != nil { + return "", err + } + + // Prevent variable length strings that are larger than the maximum + // message size. It would be possible to cause memory exhaustion and + // panics without a sane upper bound on this count. + if count > MaxMessagePayload { + str := fmt.Sprintf("variable length string is too long "+ + "[count %d, max %d]", count, MaxMessagePayload) + return "", messageError("ReadVarString", str) + } + + buf := make([]byte, count) + _, err = io.ReadFull(r, buf) + if err != nil { + return "", err + } + return string(buf), nil +} + +// WriteVarString serializes str to w as a variable length integer containing +// the length of the string followed by the bytes that represent the string +// itself. +func WriteVarString(w io.Writer, pver uint32, str string) error { + err := WriteVarInt(w, pver, uint64(len(str))) + if err != nil { + return err + } + _, err = w.Write([]byte(str)) + return err +} + +// ReadVarBytes reads a variable length byte array. A byte array is encoded +// as a varInt containing the length of the array followed by the bytes +// themselves. An error is returned if the length is greater than the +// passed maxAllowed parameter which helps protect against memory exhaustion +// attacks and forced panics through malformed messages. The fieldName +// parameter is only used for the error message so it provides more context in +// the error. +func ReadVarBytes(r io.Reader, pver uint32, maxAllowed uint32, + fieldName string) ([]byte, error) { + + count, err := ReadVarInt(r, pver) + if err != nil { + return nil, err + } + + // Prevent byte array larger than the max message size. It would + // be possible to cause memory exhaustion and panics without a sane + // upper bound on this count. + if count > uint64(maxAllowed) { + str := fmt.Sprintf("%s is larger than the max allowed size "+ + "[count %d, max %d]", fieldName, count, maxAllowed) + return nil, messageError("ReadVarBytes", str) + } + + b := make([]byte, count) + _, err = io.ReadFull(r, b) + if err != nil { + return nil, err + } + return b, nil +} + +// WriteVarBytes serializes a variable length byte array to w as a varInt +// containing the number of bytes, followed by the bytes themselves. +func WriteVarBytes(w io.Writer, pver uint32, bytes []byte) error { + slen := uint64(len(bytes)) + err := WriteVarInt(w, pver, slen) + if err != nil { + return err + } + + _, err = w.Write(bytes) + return err +} + +// randomUint64 returns a cryptographically random uint64 value. This +// unexported version takes a reader primarily to ensure the error paths +// can be properly tested by passing a fake reader in the tests. +func randomUint64(r io.Reader) (uint64, error) { + rv, err := binarySerializer.Uint64(r, bigEndian) + if err != nil { + return 0, err + } + return rv, nil +} + +// RandomUint64 returns a cryptographically random uint64 value. +func RandomUint64() (uint64, error) { + return randomUint64(rand.Reader) +} diff --git a/vendor/github.com/btcsuite/btcd/wire/doc.go b/vendor/github.com/btcsuite/btcd/wire/doc.go new file mode 100644 index 0000000000..b8b8c56fff --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/doc.go @@ -0,0 +1,162 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package wire implements the bitcoin wire protocol. + +For the complete details of the bitcoin protocol, see the official wiki entry +at https://en.bitcoin.it/wiki/Protocol_specification. The following only serves +as a quick overview to provide information on how to use the package. + +At a high level, this package provides support for marshalling and unmarshalling +supported bitcoin messages to and from the wire. This package does not deal +with the specifics of message handling such as what to do when a message is +received. This provides the caller with a high level of flexibility. + +Bitcoin Message Overview + +The bitcoin protocol consists of exchanging messages between peers. Each +message is preceded by a header which identifies information about it such as +which bitcoin network it is a part of, its type, how big it is, and a checksum +to verify validity. All encoding and decoding of message headers is handled by +this package. + +To accomplish this, there is a generic interface for bitcoin messages named +Message which allows messages of any type to be read, written, or passed around +through channels, functions, etc. In addition, concrete implementations of most +of the currently supported bitcoin messages are provided. For these supported +messages, all of the details of marshalling and unmarshalling to and from the +wire using bitcoin encoding are handled so the caller doesn't have to concern +themselves with the specifics. + +Message Interaction + +The following provides a quick summary of how the bitcoin messages are intended +to interact with one another. As stated above, these interactions are not +directly handled by this package. For more in-depth details about the +appropriate interactions, see the official bitcoin protocol wiki entry at +https://en.bitcoin.it/wiki/Protocol_specification. + +The initial handshake consists of two peers sending each other a version message +(MsgVersion) followed by responding with a verack message (MsgVerAck). Both +peers use the information in the version message (MsgVersion) to negotiate +things such as protocol version and supported services with each other. Once +the initial handshake is complete, the following chart indicates message +interactions in no particular order. + + Peer A Sends Peer B Responds + ---------------------------------------------------------------------------- + getaddr message (MsgGetAddr) addr message (MsgAddr) + getblocks message (MsgGetBlocks) inv message (MsgInv) + inv message (MsgInv) getdata message (MsgGetData) + getdata message (MsgGetData) block message (MsgBlock) -or- + tx message (MsgTx) -or- + notfound message (MsgNotFound) + getheaders message (MsgGetHeaders) headers message (MsgHeaders) + ping message (MsgPing) pong message (MsgHeaders)* -or- + (none -- Ability to send message is enough) + + NOTES: + * The pong message was not added until later protocol versions as defined + in BIP0031. The BIP0031Version constant can be used to detect a recent + enough protocol version for this purpose (version > BIP0031Version). + +Common Parameters + +There are several common parameters that arise when using this package to read +and write bitcoin messages. The following sections provide a quick overview of +these parameters so the next sections can build on them. + +Protocol Version + +The protocol version should be negotiated with the remote peer at a higher +level than this package via the version (MsgVersion) message exchange, however, +this package provides the wire.ProtocolVersion constant which indicates the +latest protocol version this package supports and is typically the value to use +for all outbound connections before a potentially lower protocol version is +negotiated. + +Bitcoin Network + +The bitcoin network is a magic number which is used to identify the start of a +message and which bitcoin network the message applies to. This package provides +the following constants: + + wire.MainNet + wire.TestNet (Regression test network) + wire.TestNet3 (Test network version 3) + wire.SimNet (Simulation test network) + +Determining Message Type + +As discussed in the bitcoin message overview section, this package reads +and writes bitcoin messages using a generic interface named Message. In +order to determine the actual concrete type of the message, use a type +switch or type assertion. An example of a type switch follows: + + // Assumes msg is already a valid concrete message such as one created + // via NewMsgVersion or read via ReadMessage. + switch msg := msg.(type) { + case *wire.MsgVersion: + // The message is a pointer to a MsgVersion struct. + fmt.Printf("Protocol version: %v", msg.ProtocolVersion) + case *wire.MsgBlock: + // The message is a pointer to a MsgBlock struct. + fmt.Printf("Number of tx in block: %v", msg.Header.TxnCount) + } + +Reading Messages + +In order to unmarshall bitcoin messages from the wire, use the ReadMessage +function. It accepts any io.Reader, but typically this will be a net.Conn to +a remote node running a bitcoin peer. Example syntax is: + + // Reads and validates the next bitcoin message from conn using the + // protocol version pver and the bitcoin network btcnet. The returns + // are a wire.Message, a []byte which contains the unmarshalled + // raw payload, and a possible error. + msg, rawPayload, err := wire.ReadMessage(conn, pver, btcnet) + if err != nil { + // Log and handle the error + } + +Writing Messages + +In order to marshall bitcoin messages to the wire, use the WriteMessage +function. It accepts any io.Writer, but typically this will be a net.Conn to +a remote node running a bitcoin peer. Example syntax to request addresses +from a remote peer is: + + // Create a new getaddr bitcoin message. + msg := wire.NewMsgGetAddr() + + // Writes a bitcoin message msg to conn using the protocol version + // pver, and the bitcoin network btcnet. The return is a possible + // error. + err := wire.WriteMessage(conn, msg, pver, btcnet) + if err != nil { + // Log and handle the error + } + +Errors + +Errors returned by this package are either the raw errors provided by underlying +calls to read/write from streams such as io.EOF, io.ErrUnexpectedEOF, and +io.ErrShortWrite, or of type wire.MessageError. This allows the caller to +differentiate between general IO errors and malformed messages through type +assertions. + +Bitcoin Improvement Proposals + +This package includes spec changes outlined by the following BIPs: + + BIP0014 (https://github.com/bitcoin/bips/blob/master/bip-0014.mediawiki) + BIP0031 (https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki) + BIP0035 (https://github.com/bitcoin/bips/blob/master/bip-0035.mediawiki) + BIP0037 (https://github.com/bitcoin/bips/blob/master/bip-0037.mediawiki) + BIP0111 (https://github.com/bitcoin/bips/blob/master/bip-0111.mediawiki) + BIP0130 (https://github.com/bitcoin/bips/blob/master/bip-0130.mediawiki) + BIP0133 (https://github.com/bitcoin/bips/blob/master/bip-0133.mediawiki) +*/ +package wire diff --git a/vendor/github.com/btcsuite/btcd/wire/error.go b/vendor/github.com/btcsuite/btcd/wire/error.go new file mode 100644 index 0000000000..755c2db49a --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/error.go @@ -0,0 +1,34 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" +) + +// MessageError describes an issue with a message. +// An example of some potential issues are messages from the wrong bitcoin +// network, invalid commands, mismatched checksums, and exceeding max payloads. +// +// This provides a mechanism for the caller to type assert the error to +// differentiate between general io errors such as io.EOF and issues that +// resulted from malformed messages. +type MessageError struct { + Func string // Function name + Description string // Human readable description of the issue +} + +// Error satisfies the error interface and prints human-readable errors. +func (e *MessageError) Error() string { + if e.Func != "" { + return fmt.Sprintf("%v: %v", e.Func, e.Description) + } + return e.Description +} + +// messageError creates an error for the given function and description. +func messageError(f string, desc string) *MessageError { + return &MessageError{Func: f, Description: desc} +} diff --git a/vendor/github.com/btcsuite/btcd/wire/invvect.go b/vendor/github.com/btcsuite/btcd/wire/invvect.go new file mode 100644 index 0000000000..1e706642b4 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/invvect.go @@ -0,0 +1,86 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +const ( + // MaxInvPerMsg is the maximum number of inventory vectors that can be in a + // single bitcoin inv message. + MaxInvPerMsg = 50000 + + // Maximum payload size for an inventory vector. + maxInvVectPayload = 4 + chainhash.HashSize + + // InvWitnessFlag denotes that the inventory vector type is requesting, + // or sending a version which includes witness data. + InvWitnessFlag = 1 << 30 +) + +// InvType represents the allowed types of inventory vectors. See InvVect. +type InvType uint32 + +// These constants define the various supported inventory vector types. +const ( + InvTypeError InvType = 0 + InvTypeTx InvType = 1 + InvTypeBlock InvType = 2 + InvTypeFilteredBlock InvType = 3 + InvTypeWitnessBlock InvType = InvTypeBlock | InvWitnessFlag + InvTypeWitnessTx InvType = InvTypeTx | InvWitnessFlag + InvTypeFilteredWitnessBlock InvType = InvTypeFilteredBlock | InvWitnessFlag +) + +// Map of service flags back to their constant names for pretty printing. +var ivStrings = map[InvType]string{ + InvTypeError: "ERROR", + InvTypeTx: "MSG_TX", + InvTypeBlock: "MSG_BLOCK", + InvTypeFilteredBlock: "MSG_FILTERED_BLOCK", + InvTypeWitnessBlock: "MSG_WITNESS_BLOCK", + InvTypeWitnessTx: "MSG_WITNESS_TX", + InvTypeFilteredWitnessBlock: "MSG_FILTERED_WITNESS_BLOCK", +} + +// String returns the InvType in human-readable form. +func (invtype InvType) String() string { + if s, ok := ivStrings[invtype]; ok { + return s + } + + return fmt.Sprintf("Unknown InvType (%d)", uint32(invtype)) +} + +// InvVect defines a bitcoin inventory vector which is used to describe data, +// as specified by the Type field, that a peer wants, has, or does not have to +// another peer. +type InvVect struct { + Type InvType // Type of data + Hash chainhash.Hash // Hash of the data +} + +// NewInvVect returns a new InvVect using the provided type and hash. +func NewInvVect(typ InvType, hash *chainhash.Hash) *InvVect { + return &InvVect{ + Type: typ, + Hash: *hash, + } +} + +// readInvVect reads an encoded InvVect from r depending on the protocol +// version. +func readInvVect(r io.Reader, pver uint32, iv *InvVect) error { + return readElements(r, &iv.Type, &iv.Hash) +} + +// writeInvVect serializes an InvVect to w depending on the protocol version. +func writeInvVect(w io.Writer, pver uint32, iv *InvVect) error { + return writeElements(w, iv.Type, &iv.Hash) +} diff --git a/vendor/github.com/btcsuite/btcd/wire/message.go b/vendor/github.com/btcsuite/btcd/wire/message.go new file mode 100644 index 0000000000..6d3147a81d --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/message.go @@ -0,0 +1,444 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "bytes" + "fmt" + "io" + "unicode/utf8" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// MessageHeaderSize is the number of bytes in a bitcoin message header. +// Bitcoin network (magic) 4 bytes + command 12 bytes + payload length 4 bytes + +// checksum 4 bytes. +const MessageHeaderSize = 24 + +// CommandSize is the fixed size of all commands in the common bitcoin message +// header. Shorter commands must be zero padded. +const CommandSize = 12 + +// MaxMessagePayload is the maximum bytes a message can be regardless of other +// individual limits imposed by messages themselves. +const MaxMessagePayload = (1024 * 1024 * 32) // 32MB + +// Commands used in bitcoin message headers which describe the type of message. +const ( + CmdVersion = "version" + CmdVerAck = "verack" + CmdGetAddr = "getaddr" + CmdAddr = "addr" + CmdGetBlocks = "getblocks" + CmdInv = "inv" + CmdGetData = "getdata" + CmdNotFound = "notfound" + CmdBlock = "block" + CmdTx = "tx" + CmdGetHeaders = "getheaders" + CmdHeaders = "headers" + CmdPing = "ping" + CmdPong = "pong" + CmdAlert = "alert" + CmdMemPool = "mempool" + CmdFilterAdd = "filteradd" + CmdFilterClear = "filterclear" + CmdFilterLoad = "filterload" + CmdMerkleBlock = "merkleblock" + CmdReject = "reject" + CmdSendHeaders = "sendheaders" + CmdFeeFilter = "feefilter" + CmdGetCFilters = "getcfilters" + CmdGetCFHeaders = "getcfheaders" + CmdGetCFCheckpt = "getcfcheckpt" + CmdCFilter = "cfilter" + CmdCFHeaders = "cfheaders" + CmdCFCheckpt = "cfcheckpt" + CmdSendAddrV2 = "sendaddrv2" +) + +// MessageEncoding represents the wire message encoding format to be used. +type MessageEncoding uint32 + +const ( + // BaseEncoding encodes all messages in the default format specified + // for the Bitcoin wire protocol. + BaseEncoding MessageEncoding = 1 << iota + + // WitnessEncoding encodes all messages other than transaction messages + // using the default Bitcoin wire protocol specification. For transaction + // messages, the new encoding format detailed in BIP0144 will be used. + WitnessEncoding +) + +// LatestEncoding is the most recently specified encoding for the Bitcoin wire +// protocol. +var LatestEncoding = WitnessEncoding + +// Message is an interface that describes a bitcoin message. A type that +// implements Message has complete control over the representation of its data +// and may therefore contain additional or fewer fields than those which +// are used directly in the protocol encoded message. +type Message interface { + BtcDecode(io.Reader, uint32, MessageEncoding) error + BtcEncode(io.Writer, uint32, MessageEncoding) error + Command() string + MaxPayloadLength(uint32) uint32 +} + +// makeEmptyMessage creates a message of the appropriate concrete type based +// on the command. +func makeEmptyMessage(command string) (Message, error) { + var msg Message + switch command { + case CmdVersion: + msg = &MsgVersion{} + + case CmdVerAck: + msg = &MsgVerAck{} + + case CmdSendAddrV2: + msg = &MsgSendAddrV2{} + + case CmdGetAddr: + msg = &MsgGetAddr{} + + case CmdAddr: + msg = &MsgAddr{} + + case CmdGetBlocks: + msg = &MsgGetBlocks{} + + case CmdBlock: + msg = &MsgBlock{} + + case CmdInv: + msg = &MsgInv{} + + case CmdGetData: + msg = &MsgGetData{} + + case CmdNotFound: + msg = &MsgNotFound{} + + case CmdTx: + msg = &MsgTx{} + + case CmdPing: + msg = &MsgPing{} + + case CmdPong: + msg = &MsgPong{} + + case CmdGetHeaders: + msg = &MsgGetHeaders{} + + case CmdHeaders: + msg = &MsgHeaders{} + + case CmdAlert: + msg = &MsgAlert{} + + case CmdMemPool: + msg = &MsgMemPool{} + + case CmdFilterAdd: + msg = &MsgFilterAdd{} + + case CmdFilterClear: + msg = &MsgFilterClear{} + + case CmdFilterLoad: + msg = &MsgFilterLoad{} + + case CmdMerkleBlock: + msg = &MsgMerkleBlock{} + + case CmdReject: + msg = &MsgReject{} + + case CmdSendHeaders: + msg = &MsgSendHeaders{} + + case CmdFeeFilter: + msg = &MsgFeeFilter{} + + case CmdGetCFilters: + msg = &MsgGetCFilters{} + + case CmdGetCFHeaders: + msg = &MsgGetCFHeaders{} + + case CmdGetCFCheckpt: + msg = &MsgGetCFCheckpt{} + + case CmdCFilter: + msg = &MsgCFilter{} + + case CmdCFHeaders: + msg = &MsgCFHeaders{} + + case CmdCFCheckpt: + msg = &MsgCFCheckpt{} + + default: + return nil, fmt.Errorf("unhandled command [%s]", command) + } + return msg, nil +} + +// messageHeader defines the header structure for all bitcoin protocol messages. +type messageHeader struct { + magic BitcoinNet // 4 bytes + command string // 12 bytes + length uint32 // 4 bytes + checksum [4]byte // 4 bytes +} + +// readMessageHeader reads a bitcoin message header from r. +func readMessageHeader(r io.Reader) (int, *messageHeader, error) { + // Since readElements doesn't return the amount of bytes read, attempt + // to read the entire header into a buffer first in case there is a + // short read so the proper amount of read bytes are known. This works + // since the header is a fixed size. + var headerBytes [MessageHeaderSize]byte + n, err := io.ReadFull(r, headerBytes[:]) + if err != nil { + return n, nil, err + } + hr := bytes.NewReader(headerBytes[:]) + + // Create and populate a messageHeader struct from the raw header bytes. + hdr := messageHeader{} + var command [CommandSize]byte + readElements(hr, &hdr.magic, &command, &hdr.length, &hdr.checksum) + + // Strip trailing zeros from command string. + hdr.command = string(bytes.TrimRight(command[:], "\x00")) + + return n, &hdr, nil +} + +// discardInput reads n bytes from reader r in chunks and discards the read +// bytes. This is used to skip payloads when various errors occur and helps +// prevent rogue nodes from causing massive memory allocation through forging +// header length. +func discardInput(r io.Reader, n uint32) { + maxSize := uint32(10 * 1024) // 10k at a time + numReads := n / maxSize + bytesRemaining := n % maxSize + if n > 0 { + buf := make([]byte, maxSize) + for i := uint32(0); i < numReads; i++ { + io.ReadFull(r, buf) + } + } + if bytesRemaining > 0 { + buf := make([]byte, bytesRemaining) + io.ReadFull(r, buf) + } +} + +// WriteMessageN writes a bitcoin Message to w including the necessary header +// information and returns the number of bytes written. This function is the +// same as WriteMessage except it also returns the number of bytes written. +func WriteMessageN(w io.Writer, msg Message, pver uint32, btcnet BitcoinNet) (int, error) { + return WriteMessageWithEncodingN(w, msg, pver, btcnet, BaseEncoding) +} + +// WriteMessage writes a bitcoin Message to w including the necessary header +// information. This function is the same as WriteMessageN except it doesn't +// doesn't return the number of bytes written. This function is mainly provided +// for backwards compatibility with the original API, but it's also useful for +// callers that don't care about byte counts. +func WriteMessage(w io.Writer, msg Message, pver uint32, btcnet BitcoinNet) error { + _, err := WriteMessageN(w, msg, pver, btcnet) + return err +} + +// WriteMessageWithEncodingN writes a bitcoin Message to w including the +// necessary header information and returns the number of bytes written. +// This function is the same as WriteMessageN except it also allows the caller +// to specify the message encoding format to be used when serializing wire +// messages. +func WriteMessageWithEncodingN(w io.Writer, msg Message, pver uint32, + btcnet BitcoinNet, encoding MessageEncoding) (int, error) { + + totalBytes := 0 + + // Enforce max command size. + var command [CommandSize]byte + cmd := msg.Command() + if len(cmd) > CommandSize { + str := fmt.Sprintf("command [%s] is too long [max %v]", + cmd, CommandSize) + return totalBytes, messageError("WriteMessage", str) + } + copy(command[:], []byte(cmd)) + + // Encode the message payload. + var bw bytes.Buffer + err := msg.BtcEncode(&bw, pver, encoding) + if err != nil { + return totalBytes, err + } + payload := bw.Bytes() + lenp := len(payload) + + // Enforce maximum overall message payload. + if lenp > MaxMessagePayload { + str := fmt.Sprintf("message payload is too large - encoded "+ + "%d bytes, but maximum message payload is %d bytes", + lenp, MaxMessagePayload) + return totalBytes, messageError("WriteMessage", str) + } + + // Enforce maximum message payload based on the message type. + mpl := msg.MaxPayloadLength(pver) + if uint32(lenp) > mpl { + str := fmt.Sprintf("message payload is too large - encoded "+ + "%d bytes, but maximum message payload size for "+ + "messages of type [%s] is %d.", lenp, cmd, mpl) + return totalBytes, messageError("WriteMessage", str) + } + + // Create header for the message. + hdr := messageHeader{} + hdr.magic = btcnet + hdr.command = cmd + hdr.length = uint32(lenp) + copy(hdr.checksum[:], chainhash.DoubleHashB(payload)[0:4]) + + // Encode the header for the message. This is done to a buffer + // rather than directly to the writer since writeElements doesn't + // return the number of bytes written. + hw := bytes.NewBuffer(make([]byte, 0, MessageHeaderSize)) + writeElements(hw, hdr.magic, command, hdr.length, hdr.checksum) + + // Write header. + n, err := w.Write(hw.Bytes()) + totalBytes += n + if err != nil { + return totalBytes, err + } + + // Only write the payload if there is one, e.g., verack messages don't + // have one. + if len(payload) > 0 { + n, err = w.Write(payload) + totalBytes += n + } + + return totalBytes, err +} + +// ReadMessageWithEncodingN reads, validates, and parses the next bitcoin Message +// from r for the provided protocol version and bitcoin network. It returns the +// number of bytes read in addition to the parsed Message and raw bytes which +// comprise the message. This function is the same as ReadMessageN except it +// allows the caller to specify which message encoding is to to consult when +// decoding wire messages. +func ReadMessageWithEncodingN(r io.Reader, pver uint32, btcnet BitcoinNet, + enc MessageEncoding) (int, Message, []byte, error) { + + totalBytes := 0 + n, hdr, err := readMessageHeader(r) + totalBytes += n + if err != nil { + return totalBytes, nil, nil, err + } + + // Enforce maximum message payload. + if hdr.length > MaxMessagePayload { + str := fmt.Sprintf("message payload is too large - header "+ + "indicates %d bytes, but max message payload is %d "+ + "bytes.", hdr.length, MaxMessagePayload) + return totalBytes, nil, nil, messageError("ReadMessage", str) + + } + + // Check for messages from the wrong bitcoin network. + if hdr.magic != btcnet { + discardInput(r, hdr.length) + str := fmt.Sprintf("message from other network [%v]", hdr.magic) + return totalBytes, nil, nil, messageError("ReadMessage", str) + } + + // Check for malformed commands. + command := hdr.command + if !utf8.ValidString(command) { + discardInput(r, hdr.length) + str := fmt.Sprintf("invalid command %v", []byte(command)) + return totalBytes, nil, nil, messageError("ReadMessage", str) + } + + // Create struct of appropriate message type based on the command. + msg, err := makeEmptyMessage(command) + if err != nil { + discardInput(r, hdr.length) + return totalBytes, nil, nil, messageError("ReadMessage", + err.Error()) + } + + // Check for maximum length based on the message type as a malicious client + // could otherwise create a well-formed header and set the length to max + // numbers in order to exhaust the machine's memory. + mpl := msg.MaxPayloadLength(pver) + if hdr.length > mpl { + discardInput(r, hdr.length) + str := fmt.Sprintf("payload exceeds max length - header "+ + "indicates %v bytes, but max payload size for "+ + "messages of type [%v] is %v.", hdr.length, command, mpl) + return totalBytes, nil, nil, messageError("ReadMessage", str) + } + + // Read payload. + payload := make([]byte, hdr.length) + n, err = io.ReadFull(r, payload) + totalBytes += n + if err != nil { + return totalBytes, nil, nil, err + } + + // Test checksum. + checksum := chainhash.DoubleHashB(payload)[0:4] + if !bytes.Equal(checksum, hdr.checksum[:]) { + str := fmt.Sprintf("payload checksum failed - header "+ + "indicates %v, but actual checksum is %v.", + hdr.checksum, checksum) + return totalBytes, nil, nil, messageError("ReadMessage", str) + } + + // Unmarshal message. NOTE: This must be a *bytes.Buffer since the + // MsgVersion BtcDecode function requires it. + pr := bytes.NewBuffer(payload) + err = msg.BtcDecode(pr, pver, enc) + if err != nil { + return totalBytes, nil, nil, err + } + + return totalBytes, msg, payload, nil +} + +// ReadMessageN reads, validates, and parses the next bitcoin Message from r for +// the provided protocol version and bitcoin network. It returns the number of +// bytes read in addition to the parsed Message and raw bytes which comprise the +// message. This function is the same as ReadMessage except it also returns the +// number of bytes read. +func ReadMessageN(r io.Reader, pver uint32, btcnet BitcoinNet) (int, Message, []byte, error) { + return ReadMessageWithEncodingN(r, pver, btcnet, BaseEncoding) +} + +// ReadMessage reads, validates, and parses the next bitcoin Message from r for +// the provided protocol version and bitcoin network. It returns the parsed +// Message and raw bytes which comprise the message. This function only differs +// from ReadMessageN in that it doesn't return the number of bytes read. This +// function is mainly provided for backwards compatibility with the original +// API, but it's also useful for callers that don't care about byte counts. +func ReadMessage(r io.Reader, pver uint32, btcnet BitcoinNet) (Message, []byte, error) { + _, msg, buf, err := ReadMessageN(r, pver, btcnet) + return msg, buf, err +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgaddr.go b/vendor/github.com/btcsuite/btcd/wire/msgaddr.go new file mode 100644 index 0000000000..ce945c8c06 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgaddr.go @@ -0,0 +1,143 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MaxAddrPerMsg is the maximum number of addresses that can be in a single +// bitcoin addr message (MsgAddr). +const MaxAddrPerMsg = 1000 + +// MsgAddr implements the Message interface and represents a bitcoin +// addr message. It is used to provide a list of known active peers on the +// network. An active peer is considered one that has transmitted a message +// within the last 3 hours. Nodes which have not transmitted in that time +// frame should be forgotten. Each message is limited to a maximum number of +// addresses, which is currently 1000. As a result, multiple messages must +// be used to relay the full list. +// +// Use the AddAddress function to build up the list of known addresses when +// sending an addr message to another peer. +type MsgAddr struct { + AddrList []*NetAddress +} + +// AddAddress adds a known active peer to the message. +func (msg *MsgAddr) AddAddress(na *NetAddress) error { + if len(msg.AddrList)+1 > MaxAddrPerMsg { + str := fmt.Sprintf("too many addresses in message [max %v]", + MaxAddrPerMsg) + return messageError("MsgAddr.AddAddress", str) + } + + msg.AddrList = append(msg.AddrList, na) + return nil +} + +// AddAddresses adds multiple known active peers to the message. +func (msg *MsgAddr) AddAddresses(netAddrs ...*NetAddress) error { + for _, na := range netAddrs { + err := msg.AddAddress(na) + if err != nil { + return err + } + } + return nil +} + +// ClearAddresses removes all addresses from the message. +func (msg *MsgAddr) ClearAddresses() { + msg.AddrList = []*NetAddress{} +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgAddr) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Limit to max addresses per message. + if count > MaxAddrPerMsg { + str := fmt.Sprintf("too many addresses for message "+ + "[count %v, max %v]", count, MaxAddrPerMsg) + return messageError("MsgAddr.BtcDecode", str) + } + + addrList := make([]NetAddress, count) + msg.AddrList = make([]*NetAddress, 0, count) + for i := uint64(0); i < count; i++ { + na := &addrList[i] + err := readNetAddress(r, pver, na, true) + if err != nil { + return err + } + msg.AddAddress(na) + } + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgAddr) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + // Protocol versions before MultipleAddressVersion only allowed 1 address + // per message. + count := len(msg.AddrList) + if pver < MultipleAddressVersion && count > 1 { + str := fmt.Sprintf("too many addresses for message of "+ + "protocol version %v [count %v, max 1]", pver, count) + return messageError("MsgAddr.BtcEncode", str) + + } + if count > MaxAddrPerMsg { + str := fmt.Sprintf("too many addresses for message "+ + "[count %v, max %v]", count, MaxAddrPerMsg) + return messageError("MsgAddr.BtcEncode", str) + } + + err := WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, na := range msg.AddrList { + err = writeNetAddress(w, pver, na, true) + if err != nil { + return err + } + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgAddr) Command() string { + return CmdAddr +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgAddr) MaxPayloadLength(pver uint32) uint32 { + if pver < MultipleAddressVersion { + // Num addresses (varInt) + a single net addresses. + return MaxVarIntPayload + maxNetAddressPayload(pver) + } + + // Num addresses (varInt) + max allowed addresses. + return MaxVarIntPayload + (MaxAddrPerMsg * maxNetAddressPayload(pver)) +} + +// NewMsgAddr returns a new bitcoin addr message that conforms to the +// Message interface. See MsgAddr for details. +func NewMsgAddr() *MsgAddr { + return &MsgAddr{ + AddrList: make([]*NetAddress, 0, MaxAddrPerMsg), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgalert.go b/vendor/github.com/btcsuite/btcd/wire/msgalert.go new file mode 100644 index 0000000000..71c4e220fe --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgalert.go @@ -0,0 +1,407 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "bytes" + "fmt" + "io" +) + +// MsgAlert contains a payload and a signature: +// +// =============================================== +// | Field | Data Type | Size | +// =============================================== +// | payload | []uchar | ? | +// ----------------------------------------------- +// | signature | []uchar | ? | +// ----------------------------------------------- +// +// Here payload is an Alert serialized into a byte array to ensure that +// versions using incompatible alert formats can still relay +// alerts among one another. +// +// An Alert is the payload deserialized as follows: +// +// =============================================== +// | Field | Data Type | Size | +// =============================================== +// | Version | int32 | 4 | +// ----------------------------------------------- +// | RelayUntil | int64 | 8 | +// ----------------------------------------------- +// | Expiration | int64 | 8 | +// ----------------------------------------------- +// | ID | int32 | 4 | +// ----------------------------------------------- +// | Cancel | int32 | 4 | +// ----------------------------------------------- +// | SetCancel | set | ? | +// ----------------------------------------------- +// | MinVer | int32 | 4 | +// ----------------------------------------------- +// | MaxVer | int32 | 4 | +// ----------------------------------------------- +// | SetSubVer | set | ? | +// ----------------------------------------------- +// | Priority | int32 | 4 | +// ----------------------------------------------- +// | Comment | string | ? | +// ----------------------------------------------- +// | StatusBar | string | ? | +// ----------------------------------------------- +// | Reserved | string | ? | +// ----------------------------------------------- +// | Total (Fixed) | 45 | +// ----------------------------------------------- +// +// NOTE: +// * string is a VarString i.e VarInt length followed by the string itself +// * set is a VarInt followed by as many number of strings +// * set is a VarInt followed by as many number of ints +// * fixedAlertSize = 40 + 5*min(VarInt) = 40 + 5*1 = 45 +// +// Now we can define bounds on Alert size, SetCancel and SetSubVer + +// Fixed size of the alert payload +const fixedAlertSize = 45 + +// maxSignatureSize is the max size of an ECDSA signature. +// NOTE: Since this size is fixed and < 255, the size of VarInt required = 1. +const maxSignatureSize = 72 + +// maxAlertSize is the maximum size an alert. +// +// MessagePayload = VarInt(Alert) + Alert + VarInt(Signature) + Signature +// MaxMessagePayload = maxAlertSize + max(VarInt) + maxSignatureSize + 1 +const maxAlertSize = MaxMessagePayload - maxSignatureSize - MaxVarIntPayload - 1 + +// maxCountSetCancel is the maximum number of cancel IDs that could possibly +// fit into a maximum size alert. +// +// maxAlertSize = fixedAlertSize + max(SetCancel) + max(SetSubVer) + 3*(string) +// for caculating maximum number of cancel IDs, set all other var sizes to 0 +// maxAlertSize = fixedAlertSize + (MaxVarIntPayload-1) + x*sizeOf(int32) +// x = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 4 +const maxCountSetCancel = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 4 + +// maxCountSetSubVer is the maximum number of subversions that could possibly +// fit into a maximum size alert. +// +// maxAlertSize = fixedAlertSize + max(SetCancel) + max(SetSubVer) + 3*(string) +// for caculating maximum number of subversions, set all other var sizes to 0 +// maxAlertSize = fixedAlertSize + (MaxVarIntPayload-1) + x*sizeOf(string) +// x = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / sizeOf(string) +// subversion would typically be something like "/Satoshi:0.7.2/" (15 bytes) +// so assuming < 255 bytes, sizeOf(string) = sizeOf(uint8) + 255 = 256 +const maxCountSetSubVer = (maxAlertSize - fixedAlertSize - MaxVarIntPayload + 1) / 256 + +// Alert contains the data deserialized from the MsgAlert payload. +type Alert struct { + // Alert format version + Version int32 + + // Timestamp beyond which nodes should stop relaying this alert + RelayUntil int64 + + // Timestamp beyond which this alert is no longer in effect and + // should be ignored + Expiration int64 + + // A unique ID number for this alert + ID int32 + + // All alerts with an ID less than or equal to this number should + // cancelled, deleted and not accepted in the future + Cancel int32 + + // All alert IDs contained in this set should be cancelled as above + SetCancel []int32 + + // This alert only applies to versions greater than or equal to this + // version. Other versions should still relay it. + MinVer int32 + + // This alert only applies to versions less than or equal to this version. + // Other versions should still relay it. + MaxVer int32 + + // If this set contains any elements, then only nodes that have their + // subVer contained in this set are affected by the alert. Other versions + // should still relay it. + SetSubVer []string + + // Relative priority compared to other alerts + Priority int32 + + // A comment on the alert that is not displayed + Comment string + + // The alert message that is displayed to the user + StatusBar string + + // Reserved + Reserved string +} + +// Serialize encodes the alert to w using the alert protocol encoding format. +func (alert *Alert) Serialize(w io.Writer, pver uint32) error { + err := writeElements(w, alert.Version, alert.RelayUntil, + alert.Expiration, alert.ID, alert.Cancel) + if err != nil { + return err + } + + count := len(alert.SetCancel) + if count > maxCountSetCancel { + str := fmt.Sprintf("too many cancel alert IDs for alert "+ + "[count %v, max %v]", count, maxCountSetCancel) + return messageError("Alert.Serialize", str) + } + err = WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + for i := 0; i < count; i++ { + err = writeElement(w, alert.SetCancel[i]) + if err != nil { + return err + } + } + + err = writeElements(w, alert.MinVer, alert.MaxVer) + if err != nil { + return err + } + + count = len(alert.SetSubVer) + if count > maxCountSetSubVer { + str := fmt.Sprintf("too many sub versions for alert "+ + "[count %v, max %v]", count, maxCountSetSubVer) + return messageError("Alert.Serialize", str) + } + err = WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + for i := 0; i < count; i++ { + err = WriteVarString(w, pver, alert.SetSubVer[i]) + if err != nil { + return err + } + } + + err = writeElement(w, alert.Priority) + if err != nil { + return err + } + err = WriteVarString(w, pver, alert.Comment) + if err != nil { + return err + } + err = WriteVarString(w, pver, alert.StatusBar) + if err != nil { + return err + } + return WriteVarString(w, pver, alert.Reserved) +} + +// Deserialize decodes from r into the receiver using the alert protocol +// encoding format. +func (alert *Alert) Deserialize(r io.Reader, pver uint32) error { + err := readElements(r, &alert.Version, &alert.RelayUntil, + &alert.Expiration, &alert.ID, &alert.Cancel) + if err != nil { + return err + } + + // SetCancel: first read a VarInt that contains + // count - the number of Cancel IDs, then + // iterate count times and read them + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + if count > maxCountSetCancel { + str := fmt.Sprintf("too many cancel alert IDs for alert "+ + "[count %v, max %v]", count, maxCountSetCancel) + return messageError("Alert.Deserialize", str) + } + alert.SetCancel = make([]int32, count) + for i := 0; i < int(count); i++ { + err := readElement(r, &alert.SetCancel[i]) + if err != nil { + return err + } + } + + err = readElements(r, &alert.MinVer, &alert.MaxVer) + if err != nil { + return err + } + + // SetSubVer: similar to SetCancel + // but read count number of sub-version strings + count, err = ReadVarInt(r, pver) + if err != nil { + return err + } + if count > maxCountSetSubVer { + str := fmt.Sprintf("too many sub versions for alert "+ + "[count %v, max %v]", count, maxCountSetSubVer) + return messageError("Alert.Deserialize", str) + } + alert.SetSubVer = make([]string, count) + for i := 0; i < int(count); i++ { + alert.SetSubVer[i], err = ReadVarString(r, pver) + if err != nil { + return err + } + } + + err = readElement(r, &alert.Priority) + if err != nil { + return err + } + alert.Comment, err = ReadVarString(r, pver) + if err != nil { + return err + } + alert.StatusBar, err = ReadVarString(r, pver) + if err != nil { + return err + } + alert.Reserved, err = ReadVarString(r, pver) + return err +} + +// NewAlert returns an new Alert with values provided. +func NewAlert(version int32, relayUntil int64, expiration int64, + id int32, cancel int32, setCancel []int32, minVer int32, + maxVer int32, setSubVer []string, priority int32, comment string, + statusBar string) *Alert { + return &Alert{ + Version: version, + RelayUntil: relayUntil, + Expiration: expiration, + ID: id, + Cancel: cancel, + SetCancel: setCancel, + MinVer: minVer, + MaxVer: maxVer, + SetSubVer: setSubVer, + Priority: priority, + Comment: comment, + StatusBar: statusBar, + Reserved: "", + } +} + +// NewAlertFromPayload returns an Alert with values deserialized from the +// serialized payload. +func NewAlertFromPayload(serializedPayload []byte, pver uint32) (*Alert, error) { + var alert Alert + r := bytes.NewReader(serializedPayload) + err := alert.Deserialize(r, pver) + if err != nil { + return nil, err + } + return &alert, nil +} + +// MsgAlert implements the Message interface and defines a bitcoin alert +// message. +// +// This is a signed message that provides notifications that the client should +// display if the signature matches the key. bitcoind/bitcoin-qt only checks +// against a signature from the core developers. +type MsgAlert struct { + // SerializedPayload is the alert payload serialized as a string so that the + // version can change but the Alert can still be passed on by older + // clients. + SerializedPayload []byte + + // Signature is the ECDSA signature of the message. + Signature []byte + + // Deserialized Payload + Payload *Alert +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgAlert) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + var err error + + msg.SerializedPayload, err = ReadVarBytes(r, pver, MaxMessagePayload, + "alert serialized payload") + if err != nil { + return err + } + + msg.Payload, err = NewAlertFromPayload(msg.SerializedPayload, pver) + if err != nil { + msg.Payload = nil + } + + msg.Signature, err = ReadVarBytes(r, pver, MaxMessagePayload, + "alert signature") + return err +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgAlert) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + var err error + var serializedpayload []byte + if msg.Payload != nil { + // try to Serialize Payload if possible + r := new(bytes.Buffer) + err = msg.Payload.Serialize(r, pver) + if err != nil { + // Serialize failed - ignore & fallback + // to SerializedPayload + serializedpayload = msg.SerializedPayload + } else { + serializedpayload = r.Bytes() + } + } else { + serializedpayload = msg.SerializedPayload + } + slen := uint64(len(serializedpayload)) + if slen == 0 { + return messageError("MsgAlert.BtcEncode", "empty serialized payload") + } + err = WriteVarBytes(w, pver, serializedpayload) + if err != nil { + return err + } + return WriteVarBytes(w, pver, msg.Signature) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgAlert) Command() string { + return CmdAlert +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgAlert) MaxPayloadLength(pver uint32) uint32 { + // Since this can vary depending on the message, make it the max + // size allowed. + return MaxMessagePayload +} + +// NewMsgAlert returns a new bitcoin alert message that conforms to the Message +// interface. See MsgAlert for details. +func NewMsgAlert(serializedPayload []byte, signature []byte) *MsgAlert { + return &MsgAlert{ + SerializedPayload: serializedPayload, + Signature: signature, + Payload: nil, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgblock.go b/vendor/github.com/btcsuite/btcd/wire/msgblock.go new file mode 100644 index 0000000000..4172949dc3 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgblock.go @@ -0,0 +1,290 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "bytes" + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// defaultTransactionAlloc is the default size used for the backing array +// for transactions. The transaction array will dynamically grow as needed, but +// this figure is intended to provide enough space for the number of +// transactions in the vast majority of blocks without needing to grow the +// backing array multiple times. +const defaultTransactionAlloc = 2048 + +// MaxBlocksPerMsg is the maximum number of blocks allowed per message. +const MaxBlocksPerMsg = 500 + +// MaxBlockPayload is the maximum bytes a block message can be in bytes. +// After Segregated Witness, the max block payload has been raised to 4MB. +const MaxBlockPayload = 4000000 + +// maxTxPerBlock is the maximum number of transactions that could +// possibly fit into a block. +const maxTxPerBlock = (MaxBlockPayload / minTxPayload) + 1 + +// TxLoc holds locator data for the offset and length of where a transaction is +// located within a MsgBlock data buffer. +type TxLoc struct { + TxStart int + TxLen int +} + +// MsgBlock implements the Message interface and represents a bitcoin +// block message. It is used to deliver block and transaction information in +// response to a getdata message (MsgGetData) for a given block hash. +type MsgBlock struct { + Header BlockHeader + Transactions []*MsgTx +} + +// AddTransaction adds a transaction to the message. +func (msg *MsgBlock) AddTransaction(tx *MsgTx) error { + msg.Transactions = append(msg.Transactions, tx) + return nil + +} + +// ClearTransactions removes all transactions from the message. +func (msg *MsgBlock) ClearTransactions() { + msg.Transactions = make([]*MsgTx, 0, defaultTransactionAlloc) +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +// See Deserialize for decoding blocks stored to disk, such as in a database, as +// opposed to decoding blocks from the wire. +func (msg *MsgBlock) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + err := readBlockHeader(r, pver, &msg.Header) + if err != nil { + return err + } + + txCount, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Prevent more transactions than could possibly fit into a block. + // It would be possible to cause memory exhaustion and panics without + // a sane upper bound on this count. + if txCount > maxTxPerBlock { + str := fmt.Sprintf("too many transactions to fit into a block "+ + "[count %d, max %d]", txCount, maxTxPerBlock) + return messageError("MsgBlock.BtcDecode", str) + } + + msg.Transactions = make([]*MsgTx, 0, txCount) + for i := uint64(0); i < txCount; i++ { + tx := MsgTx{} + err := tx.BtcDecode(r, pver, enc) + if err != nil { + return err + } + msg.Transactions = append(msg.Transactions, &tx) + } + + return nil +} + +// Deserialize decodes a block from r into the receiver using a format that is +// suitable for long-term storage such as a database while respecting the +// Version field in the block. This function differs from BtcDecode in that +// BtcDecode decodes from the bitcoin wire protocol as it was sent across the +// network. The wire encoding can technically differ depending on the protocol +// version and doesn't even really need to match the format of a stored block at +// all. As of the time this comment was written, the encoded block is the same +// in both instances, but there is a distinct difference and separating the two +// allows the API to be flexible enough to deal with changes. +func (msg *MsgBlock) Deserialize(r io.Reader) error { + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of BtcDecode. + // + // Passing an encoding type of WitnessEncoding to BtcEncode for the + // MessageEncoding parameter indicates that the transactions within the + // block are expected to be serialized according to the new + // serialization structure defined in BIP0141. + return msg.BtcDecode(r, 0, WitnessEncoding) +} + +// DeserializeNoWitness decodes a block from r into the receiver similar to +// Deserialize, however DeserializeWitness strips all (if any) witness data +// from the transactions within the block before encoding them. +func (msg *MsgBlock) DeserializeNoWitness(r io.Reader) error { + return msg.BtcDecode(r, 0, BaseEncoding) +} + +// DeserializeTxLoc decodes r in the same manner Deserialize does, but it takes +// a byte buffer instead of a generic reader and returns a slice containing the +// start and length of each transaction within the raw data that is being +// deserialized. +func (msg *MsgBlock) DeserializeTxLoc(r *bytes.Buffer) ([]TxLoc, error) { + fullLen := r.Len() + + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of existing wire protocol functions. + err := readBlockHeader(r, 0, &msg.Header) + if err != nil { + return nil, err + } + + txCount, err := ReadVarInt(r, 0) + if err != nil { + return nil, err + } + + // Prevent more transactions than could possibly fit into a block. + // It would be possible to cause memory exhaustion and panics without + // a sane upper bound on this count. + if txCount > maxTxPerBlock { + str := fmt.Sprintf("too many transactions to fit into a block "+ + "[count %d, max %d]", txCount, maxTxPerBlock) + return nil, messageError("MsgBlock.DeserializeTxLoc", str) + } + + // Deserialize each transaction while keeping track of its location + // within the byte stream. + msg.Transactions = make([]*MsgTx, 0, txCount) + txLocs := make([]TxLoc, txCount) + for i := uint64(0); i < txCount; i++ { + txLocs[i].TxStart = fullLen - r.Len() + tx := MsgTx{} + err := tx.Deserialize(r) + if err != nil { + return nil, err + } + msg.Transactions = append(msg.Transactions, &tx) + txLocs[i].TxLen = (fullLen - r.Len()) - txLocs[i].TxStart + } + + return txLocs, nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +// See Serialize for encoding blocks to be stored to disk, such as in a +// database, as opposed to encoding blocks for the wire. +func (msg *MsgBlock) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + err := writeBlockHeader(w, pver, &msg.Header) + if err != nil { + return err + } + + err = WriteVarInt(w, pver, uint64(len(msg.Transactions))) + if err != nil { + return err + } + + for _, tx := range msg.Transactions { + err = tx.BtcEncode(w, pver, enc) + if err != nil { + return err + } + } + + return nil +} + +// Serialize encodes the block to w using a format that suitable for long-term +// storage such as a database while respecting the Version field in the block. +// This function differs from BtcEncode in that BtcEncode encodes the block to +// the bitcoin wire protocol in order to be sent across the network. The wire +// encoding can technically differ depending on the protocol version and doesn't +// even really need to match the format of a stored block at all. As of the +// time this comment was written, the encoded block is the same in both +// instances, but there is a distinct difference and separating the two allows +// the API to be flexible enough to deal with changes. +func (msg *MsgBlock) Serialize(w io.Writer) error { + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of BtcEncode. + // + // Passing WitnessEncoding as the encoding type here indicates that + // each of the transactions should be serialized using the witness + // serialization structure defined in BIP0141. + return msg.BtcEncode(w, 0, WitnessEncoding) +} + +// SerializeNoWitness encodes a block to w using an identical format to +// Serialize, with all (if any) witness data stripped from all transactions. +// This method is provided in additon to the regular Serialize, in order to +// allow one to selectively encode transaction witness data to non-upgraded +// peers which are unaware of the new encoding. +func (msg *MsgBlock) SerializeNoWitness(w io.Writer) error { + return msg.BtcEncode(w, 0, BaseEncoding) +} + +// SerializeSize returns the number of bytes it would take to serialize the +// block, factoring in any witness data within transaction. +func (msg *MsgBlock) SerializeSize() int { + // Block header bytes + Serialized varint size for the number of + // transactions. + n := blockHeaderLen + VarIntSerializeSize(uint64(len(msg.Transactions))) + + for _, tx := range msg.Transactions { + n += tx.SerializeSize() + } + + return n +} + +// SerializeSizeStripped returns the number of bytes it would take to serialize +// the block, excluding any witness data (if any). +func (msg *MsgBlock) SerializeSizeStripped() int { + // Block header bytes + Serialized varint size for the number of + // transactions. + n := blockHeaderLen + VarIntSerializeSize(uint64(len(msg.Transactions))) + + for _, tx := range msg.Transactions { + n += tx.SerializeSizeStripped() + } + + return n +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgBlock) Command() string { + return CmdBlock +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgBlock) MaxPayloadLength(pver uint32) uint32 { + // Block header at 80 bytes + transaction count + max transactions + // which can vary up to the MaxBlockPayload (including the block header + // and transaction count). + return MaxBlockPayload +} + +// BlockHash computes the block identifier hash for this block. +func (msg *MsgBlock) BlockHash() chainhash.Hash { + return msg.Header.BlockHash() +} + +// TxHashes returns a slice of hashes of all of transactions in this block. +func (msg *MsgBlock) TxHashes() ([]chainhash.Hash, error) { + hashList := make([]chainhash.Hash, 0, len(msg.Transactions)) + for _, tx := range msg.Transactions { + hashList = append(hashList, tx.TxHash()) + } + return hashList, nil +} + +// NewMsgBlock returns a new bitcoin block message that conforms to the +// Message interface. See MsgBlock for details. +func NewMsgBlock(blockHeader *BlockHeader) *MsgBlock { + return &MsgBlock{ + Header: *blockHeader, + Transactions: make([]*MsgTx, 0, defaultTransactionAlloc), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgcfcheckpt.go b/vendor/github.com/btcsuite/btcd/wire/msgcfcheckpt.go new file mode 100644 index 0000000000..fc3fd53295 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgcfcheckpt.go @@ -0,0 +1,164 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "errors" + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +const ( + // CFCheckptInterval is the gap (in number of blocks) between each + // filter header checkpoint. + CFCheckptInterval = 1000 + + // maxCFHeadersLen is the max number of filter headers we will attempt + // to decode. + maxCFHeadersLen = 100000 +) + +// ErrInsaneCFHeaderCount signals that we were asked to decode an +// unreasonable number of cfilter headers. +var ErrInsaneCFHeaderCount = errors.New( + "refusing to decode unreasonable number of filter headers") + +// MsgCFCheckpt implements the Message interface and represents a bitcoin +// cfcheckpt message. It is used to deliver committed filter header information +// in response to a getcfcheckpt message (MsgGetCFCheckpt). See MsgGetCFCheckpt +// for details on requesting the headers. +type MsgCFCheckpt struct { + FilterType FilterType + StopHash chainhash.Hash + FilterHeaders []*chainhash.Hash +} + +// AddCFHeader adds a new committed filter header to the message. +func (msg *MsgCFCheckpt) AddCFHeader(header *chainhash.Hash) error { + if len(msg.FilterHeaders) == cap(msg.FilterHeaders) { + str := fmt.Sprintf("FilterHeaders has insufficient capacity for "+ + "additional header: len = %d", len(msg.FilterHeaders)) + return messageError("MsgCFCheckpt.AddCFHeader", str) + } + + msg.FilterHeaders = append(msg.FilterHeaders, header) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgCFCheckpt) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error { + // Read filter type + err := readElement(r, &msg.FilterType) + if err != nil { + return err + } + + // Read stop hash + err = readElement(r, &msg.StopHash) + if err != nil { + return err + } + + // Read number of filter headers + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Refuse to decode an insane number of cfheaders. + if count > maxCFHeadersLen { + return ErrInsaneCFHeaderCount + } + + // Create a contiguous slice of hashes to deserialize into in order to + // reduce the number of allocations. + msg.FilterHeaders = make([]*chainhash.Hash, count) + for i := uint64(0); i < count; i++ { + var cfh chainhash.Hash + err := readElement(r, &cfh) + if err != nil { + return err + } + msg.FilterHeaders[i] = &cfh + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgCFCheckpt) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error { + // Write filter type + err := writeElement(w, msg.FilterType) + if err != nil { + return err + } + + // Write stop hash + err = writeElement(w, msg.StopHash) + if err != nil { + return err + } + + // Write length of FilterHeaders slice + count := len(msg.FilterHeaders) + err = WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, cfh := range msg.FilterHeaders { + err := writeElement(w, cfh) + if err != nil { + return err + } + } + + return nil +} + +// Deserialize decodes a filter header from r into the receiver using a format +// that is suitable for long-term storage such as a database. This function +// differs from BtcDecode in that BtcDecode decodes from the bitcoin wire +// protocol as it was sent across the network. The wire encoding can +// technically differ depending on the protocol version and doesn't even really +// need to match the format of a stored filter header at all. As of the time +// this comment was written, the encoded filter header is the same in both +// instances, but there is a distinct difference and separating the two allows +// the API to be flexible enough to deal with changes. +func (msg *MsgCFCheckpt) Deserialize(r io.Reader) error { + // At the current time, there is no difference between the wire encoding + // and the stable long-term storage format. As a result, make use of + // BtcDecode. + return msg.BtcDecode(r, 0, BaseEncoding) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgCFCheckpt) Command() string { + return CmdCFCheckpt +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgCFCheckpt) MaxPayloadLength(pver uint32) uint32 { + // Message size depends on the blockchain height, so return general limit + // for all messages. + return MaxMessagePayload +} + +// NewMsgCFCheckpt returns a new bitcoin cfheaders message that conforms to +// the Message interface. See MsgCFCheckpt for details. +func NewMsgCFCheckpt(filterType FilterType, stopHash *chainhash.Hash, + headersCount int) *MsgCFCheckpt { + return &MsgCFCheckpt{ + FilterType: filterType, + StopHash: *stopHash, + FilterHeaders: make([]*chainhash.Hash, 0, headersCount), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgcfheaders.go b/vendor/github.com/btcsuite/btcd/wire/msgcfheaders.go new file mode 100644 index 0000000000..40d30f9b46 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgcfheaders.go @@ -0,0 +1,180 @@ +// Copyright (c) 2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +const ( + // MaxCFHeaderPayload is the maximum byte size of a committed + // filter header. + MaxCFHeaderPayload = chainhash.HashSize + + // MaxCFHeadersPerMsg is the maximum number of committed filter headers + // that can be in a single bitcoin cfheaders message. + MaxCFHeadersPerMsg = 2000 +) + +// MsgCFHeaders implements the Message interface and represents a bitcoin +// cfheaders message. It is used to deliver committed filter header information +// in response to a getcfheaders message (MsgGetCFHeaders). The maximum number +// of committed filter headers per message is currently 2000. See +// MsgGetCFHeaders for details on requesting the headers. +type MsgCFHeaders struct { + FilterType FilterType + StopHash chainhash.Hash + PrevFilterHeader chainhash.Hash + FilterHashes []*chainhash.Hash +} + +// AddCFHash adds a new filter hash to the message. +func (msg *MsgCFHeaders) AddCFHash(hash *chainhash.Hash) error { + if len(msg.FilterHashes)+1 > MaxCFHeadersPerMsg { + str := fmt.Sprintf("too many block headers in message [max %v]", + MaxBlockHeadersPerMsg) + return messageError("MsgCFHeaders.AddCFHash", str) + } + + msg.FilterHashes = append(msg.FilterHashes, hash) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgCFHeaders) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error { + // Read filter type + err := readElement(r, &msg.FilterType) + if err != nil { + return err + } + + // Read stop hash + err = readElement(r, &msg.StopHash) + if err != nil { + return err + } + + // Read prev filter header + err = readElement(r, &msg.PrevFilterHeader) + if err != nil { + return err + } + + // Read number of filter headers + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Limit to max committed filter headers per message. + if count > MaxCFHeadersPerMsg { + str := fmt.Sprintf("too many committed filter headers for "+ + "message [count %v, max %v]", count, + MaxBlockHeadersPerMsg) + return messageError("MsgCFHeaders.BtcDecode", str) + } + + // Create a contiguous slice of hashes to deserialize into in order to + // reduce the number of allocations. + msg.FilterHashes = make([]*chainhash.Hash, 0, count) + for i := uint64(0); i < count; i++ { + var cfh chainhash.Hash + err := readElement(r, &cfh) + if err != nil { + return err + } + msg.AddCFHash(&cfh) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgCFHeaders) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error { + // Write filter type + err := writeElement(w, msg.FilterType) + if err != nil { + return err + } + + // Write stop hash + err = writeElement(w, msg.StopHash) + if err != nil { + return err + } + + // Write prev filter header + err = writeElement(w, msg.PrevFilterHeader) + if err != nil { + return err + } + + // Limit to max committed headers per message. + count := len(msg.FilterHashes) + if count > MaxCFHeadersPerMsg { + str := fmt.Sprintf("too many committed filter headers for "+ + "message [count %v, max %v]", count, + MaxBlockHeadersPerMsg) + return messageError("MsgCFHeaders.BtcEncode", str) + } + + err = WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, cfh := range msg.FilterHashes { + err := writeElement(w, cfh) + if err != nil { + return err + } + } + + return nil +} + +// Deserialize decodes a filter header from r into the receiver using a format +// that is suitable for long-term storage such as a database. This function +// differs from BtcDecode in that BtcDecode decodes from the bitcoin wire +// protocol as it was sent across the network. The wire encoding can +// technically differ depending on the protocol version and doesn't even really +// need to match the format of a stored filter header at all. As of the time +// this comment was written, the encoded filter header is the same in both +// instances, but there is a distinct difference and separating the two allows +// the API to be flexible enough to deal with changes. +func (msg *MsgCFHeaders) Deserialize(r io.Reader) error { + // At the current time, there is no difference between the wire encoding + // and the stable long-term storage format. As a result, make use of + // BtcDecode. + return msg.BtcDecode(r, 0, BaseEncoding) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgCFHeaders) Command() string { + return CmdCFHeaders +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgCFHeaders) MaxPayloadLength(pver uint32) uint32 { + // Hash size + filter type + num headers (varInt) + + // (header size * max headers). + return 1 + chainhash.HashSize + chainhash.HashSize + MaxVarIntPayload + + (MaxCFHeaderPayload * MaxCFHeadersPerMsg) +} + +// NewMsgCFHeaders returns a new bitcoin cfheaders message that conforms to +// the Message interface. See MsgCFHeaders for details. +func NewMsgCFHeaders() *MsgCFHeaders { + return &MsgCFHeaders{ + FilterHashes: make([]*chainhash.Hash, 0, MaxCFHeadersPerMsg), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgcfilter.go b/vendor/github.com/btcsuite/btcd/wire/msgcfilter.go new file mode 100644 index 0000000000..097590b2ce --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgcfilter.go @@ -0,0 +1,119 @@ +// Copyright (c) 2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// FilterType is used to represent a filter type. +type FilterType uint8 + +const ( + // GCSFilterRegular is the regular filter type. + GCSFilterRegular FilterType = iota +) + +const ( + // MaxCFilterDataSize is the maximum byte size of a committed filter. + // The maximum size is currently defined as 256KiB. + MaxCFilterDataSize = 256 * 1024 +) + +// MsgCFilter implements the Message interface and represents a bitcoin cfilter +// message. It is used to deliver a committed filter in response to a +// getcfilters (MsgGetCFilters) message. +type MsgCFilter struct { + FilterType FilterType + BlockHash chainhash.Hash + Data []byte +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgCFilter) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error { + // Read filter type + err := readElement(r, &msg.FilterType) + if err != nil { + return err + } + + // Read the hash of the filter's block + err = readElement(r, &msg.BlockHash) + if err != nil { + return err + } + + // Read filter data + msg.Data, err = ReadVarBytes(r, pver, MaxCFilterDataSize, + "cfilter data") + return err +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgCFilter) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error { + size := len(msg.Data) + if size > MaxCFilterDataSize { + str := fmt.Sprintf("cfilter size too large for message "+ + "[size %v, max %v]", size, MaxCFilterDataSize) + return messageError("MsgCFilter.BtcEncode", str) + } + + err := writeElement(w, msg.FilterType) + if err != nil { + return err + } + + err = writeElement(w, msg.BlockHash) + if err != nil { + return err + } + + return WriteVarBytes(w, pver, msg.Data) +} + +// Deserialize decodes a filter from r into the receiver using a format that is +// suitable for long-term storage such as a database. This function differs +// from BtcDecode in that BtcDecode decodes from the bitcoin wire protocol as +// it was sent across the network. The wire encoding can technically differ +// depending on the protocol version and doesn't even really need to match the +// format of a stored filter at all. As of the time this comment was written, +// the encoded filter is the same in both instances, but there is a distinct +// difference and separating the two allows the API to be flexible enough to +// deal with changes. +func (msg *MsgCFilter) Deserialize(r io.Reader) error { + // At the current time, there is no difference between the wire encoding + // and the stable long-term storage format. As a result, make use of + // BtcDecode. + return msg.BtcDecode(r, 0, BaseEncoding) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgCFilter) Command() string { + return CmdCFilter +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgCFilter) MaxPayloadLength(pver uint32) uint32 { + return uint32(VarIntSerializeSize(MaxCFilterDataSize)) + + MaxCFilterDataSize + chainhash.HashSize + 1 +} + +// NewMsgCFilter returns a new bitcoin cfilter message that conforms to the +// Message interface. See MsgCFilter for details. +func NewMsgCFilter(filterType FilterType, blockHash *chainhash.Hash, + data []byte) *MsgCFilter { + return &MsgCFilter{ + FilterType: filterType, + BlockHash: *blockHash, + Data: data, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgfeefilter.go b/vendor/github.com/btcsuite/btcd/wire/msgfeefilter.go new file mode 100644 index 0000000000..754647a275 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgfeefilter.go @@ -0,0 +1,64 @@ +// Copyright (c) 2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MsgFeeFilter implements the Message interface and represents a bitcoin +// feefilter message. It is used to request the receiving peer does not +// announce any transactions below the specified minimum fee rate. +// +// This message was not added until protocol versions starting with +// FeeFilterVersion. +type MsgFeeFilter struct { + MinFee int64 +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgFeeFilter) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + if pver < FeeFilterVersion { + str := fmt.Sprintf("feefilter message invalid for protocol "+ + "version %d", pver) + return messageError("MsgFeeFilter.BtcDecode", str) + } + + return readElement(r, &msg.MinFee) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgFeeFilter) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + if pver < FeeFilterVersion { + str := fmt.Sprintf("feefilter message invalid for protocol "+ + "version %d", pver) + return messageError("MsgFeeFilter.BtcEncode", str) + } + + return writeElement(w, msg.MinFee) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgFeeFilter) Command() string { + return CmdFeeFilter +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgFeeFilter) MaxPayloadLength(pver uint32) uint32 { + return 8 +} + +// NewMsgFeeFilter returns a new bitcoin feefilter message that conforms to +// the Message interface. See MsgFeeFilter for details. +func NewMsgFeeFilter(minfee int64) *MsgFeeFilter { + return &MsgFeeFilter{ + MinFee: minfee, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgfilteradd.go b/vendor/github.com/btcsuite/btcd/wire/msgfilteradd.go new file mode 100644 index 0000000000..21b67cabb7 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgfilteradd.go @@ -0,0 +1,81 @@ +// Copyright (c) 2014-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +const ( + // MaxFilterAddDataSize is the maximum byte size of a data + // element to add to the Bloom filter. It is equal to the + // maximum element size of a script. + MaxFilterAddDataSize = 520 +) + +// MsgFilterAdd implements the Message interface and represents a bitcoin +// filteradd message. It is used to add a data element to an existing Bloom +// filter. +// +// This message was not added until protocol version BIP0037Version. +type MsgFilterAdd struct { + Data []byte +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgFilterAdd) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + if pver < BIP0037Version { + str := fmt.Sprintf("filteradd message invalid for protocol "+ + "version %d", pver) + return messageError("MsgFilterAdd.BtcDecode", str) + } + + var err error + msg.Data, err = ReadVarBytes(r, pver, MaxFilterAddDataSize, + "filteradd data") + return err +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgFilterAdd) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + if pver < BIP0037Version { + str := fmt.Sprintf("filteradd message invalid for protocol "+ + "version %d", pver) + return messageError("MsgFilterAdd.BtcEncode", str) + } + + size := len(msg.Data) + if size > MaxFilterAddDataSize { + str := fmt.Sprintf("filteradd size too large for message "+ + "[size %v, max %v]", size, MaxFilterAddDataSize) + return messageError("MsgFilterAdd.BtcEncode", str) + } + + return WriteVarBytes(w, pver, msg.Data) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgFilterAdd) Command() string { + return CmdFilterAdd +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgFilterAdd) MaxPayloadLength(pver uint32) uint32 { + return uint32(VarIntSerializeSize(MaxFilterAddDataSize)) + + MaxFilterAddDataSize +} + +// NewMsgFilterAdd returns a new bitcoin filteradd message that conforms to the +// Message interface. See MsgFilterAdd for details. +func NewMsgFilterAdd(data []byte) *MsgFilterAdd { + return &MsgFilterAdd{ + Data: data, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgfilterclear.go b/vendor/github.com/btcsuite/btcd/wire/msgfilterclear.go new file mode 100644 index 0000000000..7562fe2c0c --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgfilterclear.go @@ -0,0 +1,59 @@ +// Copyright (c) 2014-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MsgFilterClear implements the Message interface and represents a bitcoin +// filterclear message which is used to reset a Bloom filter. +// +// This message was not added until protocol version BIP0037Version and has +// no payload. +type MsgFilterClear struct{} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgFilterClear) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + if pver < BIP0037Version { + str := fmt.Sprintf("filterclear message invalid for protocol "+ + "version %d", pver) + return messageError("MsgFilterClear.BtcDecode", str) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgFilterClear) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + if pver < BIP0037Version { + str := fmt.Sprintf("filterclear message invalid for protocol "+ + "version %d", pver) + return messageError("MsgFilterClear.BtcEncode", str) + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgFilterClear) Command() string { + return CmdFilterClear +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgFilterClear) MaxPayloadLength(pver uint32) uint32 { + return 0 +} + +// NewMsgFilterClear returns a new bitcoin filterclear message that conforms to the Message +// interface. See MsgFilterClear for details. +func NewMsgFilterClear() *MsgFilterClear { + return &MsgFilterClear{} +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgfilterload.go b/vendor/github.com/btcsuite/btcd/wire/msgfilterload.go new file mode 100644 index 0000000000..dbda737622 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgfilterload.go @@ -0,0 +1,136 @@ +// Copyright (c) 2014-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// BloomUpdateType specifies how the filter is updated when a match is found +type BloomUpdateType uint8 + +const ( + // BloomUpdateNone indicates the filter is not adjusted when a match is + // found. + BloomUpdateNone BloomUpdateType = 0 + + // BloomUpdateAll indicates if the filter matches any data element in a + // public key script, the outpoint is serialized and inserted into the + // filter. + BloomUpdateAll BloomUpdateType = 1 + + // BloomUpdateP2PubkeyOnly indicates if the filter matches a data + // element in a public key script and the script is of the standard + // pay-to-pubkey or multisig, the outpoint is serialized and inserted + // into the filter. + BloomUpdateP2PubkeyOnly BloomUpdateType = 2 +) + +const ( + // MaxFilterLoadHashFuncs is the maximum number of hash functions to + // load into the Bloom filter. + MaxFilterLoadHashFuncs = 50 + + // MaxFilterLoadFilterSize is the maximum size in bytes a filter may be. + MaxFilterLoadFilterSize = 36000 +) + +// MsgFilterLoad implements the Message interface and represents a bitcoin +// filterload message which is used to reset a Bloom filter. +// +// This message was not added until protocol version BIP0037Version. +type MsgFilterLoad struct { + Filter []byte + HashFuncs uint32 + Tweak uint32 + Flags BloomUpdateType +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgFilterLoad) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + if pver < BIP0037Version { + str := fmt.Sprintf("filterload message invalid for protocol "+ + "version %d", pver) + return messageError("MsgFilterLoad.BtcDecode", str) + } + + var err error + msg.Filter, err = ReadVarBytes(r, pver, MaxFilterLoadFilterSize, + "filterload filter size") + if err != nil { + return err + } + + err = readElements(r, &msg.HashFuncs, &msg.Tweak, &msg.Flags) + if err != nil { + return err + } + + if msg.HashFuncs > MaxFilterLoadHashFuncs { + str := fmt.Sprintf("too many filter hash functions for message "+ + "[count %v, max %v]", msg.HashFuncs, MaxFilterLoadHashFuncs) + return messageError("MsgFilterLoad.BtcDecode", str) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgFilterLoad) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + if pver < BIP0037Version { + str := fmt.Sprintf("filterload message invalid for protocol "+ + "version %d", pver) + return messageError("MsgFilterLoad.BtcEncode", str) + } + + size := len(msg.Filter) + if size > MaxFilterLoadFilterSize { + str := fmt.Sprintf("filterload filter size too large for message "+ + "[size %v, max %v]", size, MaxFilterLoadFilterSize) + return messageError("MsgFilterLoad.BtcEncode", str) + } + + if msg.HashFuncs > MaxFilterLoadHashFuncs { + str := fmt.Sprintf("too many filter hash functions for message "+ + "[count %v, max %v]", msg.HashFuncs, MaxFilterLoadHashFuncs) + return messageError("MsgFilterLoad.BtcEncode", str) + } + + err := WriteVarBytes(w, pver, msg.Filter) + if err != nil { + return err + } + + return writeElements(w, msg.HashFuncs, msg.Tweak, msg.Flags) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgFilterLoad) Command() string { + return CmdFilterLoad +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgFilterLoad) MaxPayloadLength(pver uint32) uint32 { + // Num filter bytes (varInt) + filter + 4 bytes hash funcs + + // 4 bytes tweak + 1 byte flags. + return uint32(VarIntSerializeSize(MaxFilterLoadFilterSize)) + + MaxFilterLoadFilterSize + 9 +} + +// NewMsgFilterLoad returns a new bitcoin filterload message that conforms to +// the Message interface. See MsgFilterLoad for details. +func NewMsgFilterLoad(filter []byte, hashFuncs uint32, tweak uint32, flags BloomUpdateType) *MsgFilterLoad { + return &MsgFilterLoad{ + Filter: filter, + HashFuncs: hashFuncs, + Tweak: tweak, + Flags: flags, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msggetaddr.go b/vendor/github.com/btcsuite/btcd/wire/msggetaddr.go new file mode 100644 index 0000000000..2af8018f8b --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msggetaddr.go @@ -0,0 +1,47 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "io" +) + +// MsgGetAddr implements the Message interface and represents a bitcoin +// getaddr message. It is used to request a list of known active peers on the +// network from a peer to help identify potential nodes. The list is returned +// via one or more addr messages (MsgAddr). +// +// This message has no payload. +type MsgGetAddr struct{} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgGetAddr) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgGetAddr) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgGetAddr) Command() string { + return CmdGetAddr +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgGetAddr) MaxPayloadLength(pver uint32) uint32 { + return 0 +} + +// NewMsgGetAddr returns a new bitcoin getaddr message that conforms to the +// Message interface. See MsgGetAddr for details. +func NewMsgGetAddr() *MsgGetAddr { + return &MsgGetAddr{} +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msggetblocks.go b/vendor/github.com/btcsuite/btcd/wire/msggetblocks.go new file mode 100644 index 0000000000..caf4400ca4 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msggetblocks.go @@ -0,0 +1,139 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// MaxBlockLocatorsPerMsg is the maximum number of block locator hashes allowed +// per message. +const MaxBlockLocatorsPerMsg = 500 + +// MsgGetBlocks implements the Message interface and represents a bitcoin +// getblocks message. It is used to request a list of blocks starting after the +// last known hash in the slice of block locator hashes. The list is returned +// via an inv message (MsgInv) and is limited by a specific hash to stop at or +// the maximum number of blocks per message, which is currently 500. +// +// Set the HashStop field to the hash at which to stop and use +// AddBlockLocatorHash to build up the list of block locator hashes. +// +// The algorithm for building the block locator hashes should be to add the +// hashes in reverse order until you reach the genesis block. In order to keep +// the list of locator hashes to a reasonable number of entries, first add the +// most recent 10 block hashes, then double the step each loop iteration to +// exponentially decrease the number of hashes the further away from head and +// closer to the genesis block you get. +type MsgGetBlocks struct { + ProtocolVersion uint32 + BlockLocatorHashes []*chainhash.Hash + HashStop chainhash.Hash +} + +// AddBlockLocatorHash adds a new block locator hash to the message. +func (msg *MsgGetBlocks) AddBlockLocatorHash(hash *chainhash.Hash) error { + if len(msg.BlockLocatorHashes)+1 > MaxBlockLocatorsPerMsg { + str := fmt.Sprintf("too many block locator hashes for message [max %v]", + MaxBlockLocatorsPerMsg) + return messageError("MsgGetBlocks.AddBlockLocatorHash", str) + } + + msg.BlockLocatorHashes = append(msg.BlockLocatorHashes, hash) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgGetBlocks) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + err := readElement(r, &msg.ProtocolVersion) + if err != nil { + return err + } + + // Read num block locator hashes and limit to max. + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + if count > MaxBlockLocatorsPerMsg { + str := fmt.Sprintf("too many block locator hashes for message "+ + "[count %v, max %v]", count, MaxBlockLocatorsPerMsg) + return messageError("MsgGetBlocks.BtcDecode", str) + } + + // Create a contiguous slice of hashes to deserialize into in order to + // reduce the number of allocations. + locatorHashes := make([]chainhash.Hash, count) + msg.BlockLocatorHashes = make([]*chainhash.Hash, 0, count) + for i := uint64(0); i < count; i++ { + hash := &locatorHashes[i] + err := readElement(r, hash) + if err != nil { + return err + } + msg.AddBlockLocatorHash(hash) + } + + return readElement(r, &msg.HashStop) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgGetBlocks) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + count := len(msg.BlockLocatorHashes) + if count > MaxBlockLocatorsPerMsg { + str := fmt.Sprintf("too many block locator hashes for message "+ + "[count %v, max %v]", count, MaxBlockLocatorsPerMsg) + return messageError("MsgGetBlocks.BtcEncode", str) + } + + err := writeElement(w, msg.ProtocolVersion) + if err != nil { + return err + } + + err = WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, hash := range msg.BlockLocatorHashes { + err = writeElement(w, hash) + if err != nil { + return err + } + } + + return writeElement(w, &msg.HashStop) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgGetBlocks) Command() string { + return CmdGetBlocks +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgGetBlocks) MaxPayloadLength(pver uint32) uint32 { + // Protocol version 4 bytes + num hashes (varInt) + max block locator + // hashes + hash stop. + return 4 + MaxVarIntPayload + (MaxBlockLocatorsPerMsg * chainhash.HashSize) + chainhash.HashSize +} + +// NewMsgGetBlocks returns a new bitcoin getblocks message that conforms to the +// Message interface using the passed parameters and defaults for the remaining +// fields. +func NewMsgGetBlocks(hashStop *chainhash.Hash) *MsgGetBlocks { + return &MsgGetBlocks{ + ProtocolVersion: ProtocolVersion, + BlockLocatorHashes: make([]*chainhash.Hash, 0, MaxBlockLocatorsPerMsg), + HashStop: *hashStop, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msggetcfcheckpt.go b/vendor/github.com/btcsuite/btcd/wire/msggetcfcheckpt.go new file mode 100644 index 0000000000..c30a86cecd --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msggetcfcheckpt.go @@ -0,0 +1,64 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// MsgGetCFCheckpt is a request for filter headers at evenly spaced intervals +// throughout the blockchain history. It allows to set the FilterType field to +// get headers in the chain of basic (0x00) or extended (0x01) headers. +type MsgGetCFCheckpt struct { + FilterType FilterType + StopHash chainhash.Hash +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgGetCFCheckpt) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error { + err := readElement(r, &msg.FilterType) + if err != nil { + return err + } + + return readElement(r, &msg.StopHash) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgGetCFCheckpt) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error { + err := writeElement(w, msg.FilterType) + if err != nil { + return err + } + + return writeElement(w, &msg.StopHash) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgGetCFCheckpt) Command() string { + return CmdGetCFCheckpt +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgGetCFCheckpt) MaxPayloadLength(pver uint32) uint32 { + // Filter type + uint32 + block hash + return 1 + chainhash.HashSize +} + +// NewMsgGetCFCheckpt returns a new bitcoin getcfcheckpt message that conforms +// to the Message interface using the passed parameters and defaults for the +// remaining fields. +func NewMsgGetCFCheckpt(filterType FilterType, stopHash *chainhash.Hash) *MsgGetCFCheckpt { + return &MsgGetCFCheckpt{ + FilterType: filterType, + StopHash: *stopHash, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msggetcfheaders.go b/vendor/github.com/btcsuite/btcd/wire/msggetcfheaders.go new file mode 100644 index 0000000000..03a1caf72f --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msggetcfheaders.go @@ -0,0 +1,77 @@ +// Copyright (c) 2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// MsgGetCFHeaders is a message similar to MsgGetHeaders, but for committed +// filter headers. It allows to set the FilterType field to get headers in the +// chain of basic (0x00) or extended (0x01) headers. +type MsgGetCFHeaders struct { + FilterType FilterType + StartHeight uint32 + StopHash chainhash.Hash +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgGetCFHeaders) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error { + err := readElement(r, &msg.FilterType) + if err != nil { + return err + } + + err = readElement(r, &msg.StartHeight) + if err != nil { + return err + } + + return readElement(r, &msg.StopHash) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgGetCFHeaders) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error { + err := writeElement(w, msg.FilterType) + if err != nil { + return err + } + + err = writeElement(w, &msg.StartHeight) + if err != nil { + return err + } + + return writeElement(w, &msg.StopHash) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgGetCFHeaders) Command() string { + return CmdGetCFHeaders +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgGetCFHeaders) MaxPayloadLength(pver uint32) uint32 { + // Filter type + uint32 + block hash + return 1 + 4 + chainhash.HashSize +} + +// NewMsgGetCFHeaders returns a new bitcoin getcfheader message that conforms to +// the Message interface using the passed parameters and defaults for the +// remaining fields. +func NewMsgGetCFHeaders(filterType FilterType, startHeight uint32, + stopHash *chainhash.Hash) *MsgGetCFHeaders { + return &MsgGetCFHeaders{ + FilterType: filterType, + StartHeight: startHeight, + StopHash: *stopHash, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msggetcfilters.go b/vendor/github.com/btcsuite/btcd/wire/msggetcfilters.go new file mode 100644 index 0000000000..8002413826 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msggetcfilters.go @@ -0,0 +1,81 @@ +// Copyright (c) 2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// MaxGetCFiltersReqRange the maximum number of filters that may be requested in +// a getcfheaders message. +const MaxGetCFiltersReqRange = 1000 + +// MsgGetCFilters implements the Message interface and represents a bitcoin +// getcfilters message. It is used to request committed filters for a range of +// blocks. +type MsgGetCFilters struct { + FilterType FilterType + StartHeight uint32 + StopHash chainhash.Hash +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgGetCFilters) BtcDecode(r io.Reader, pver uint32, _ MessageEncoding) error { + err := readElement(r, &msg.FilterType) + if err != nil { + return err + } + + err = readElement(r, &msg.StartHeight) + if err != nil { + return err + } + + return readElement(r, &msg.StopHash) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgGetCFilters) BtcEncode(w io.Writer, pver uint32, _ MessageEncoding) error { + err := writeElement(w, msg.FilterType) + if err != nil { + return err + } + + err = writeElement(w, &msg.StartHeight) + if err != nil { + return err + } + + return writeElement(w, &msg.StopHash) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgGetCFilters) Command() string { + return CmdGetCFilters +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgGetCFilters) MaxPayloadLength(pver uint32) uint32 { + // Filter type + uint32 + block hash + return 1 + 4 + chainhash.HashSize +} + +// NewMsgGetCFilters returns a new bitcoin getcfilters message that conforms to +// the Message interface using the passed parameters and defaults for the +// remaining fields. +func NewMsgGetCFilters(filterType FilterType, startHeight uint32, + stopHash *chainhash.Hash) *MsgGetCFilters { + return &MsgGetCFilters{ + FilterType: filterType, + StartHeight: startHeight, + StopHash: *stopHash, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msggetdata.go b/vendor/github.com/btcsuite/btcd/wire/msggetdata.go new file mode 100644 index 0000000000..5837fac5ba --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msggetdata.go @@ -0,0 +1,133 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MsgGetData implements the Message interface and represents a bitcoin +// getdata message. It is used to request data such as blocks and transactions +// from another peer. It should be used in response to the inv (MsgInv) message +// to request the actual data referenced by each inventory vector the receiving +// peer doesn't already have. Each message is limited to a maximum number of +// inventory vectors, which is currently 50,000. As a result, multiple messages +// must be used to request larger amounts of data. +// +// Use the AddInvVect function to build up the list of inventory vectors when +// sending a getdata message to another peer. +type MsgGetData struct { + InvList []*InvVect +} + +// AddInvVect adds an inventory vector to the message. +func (msg *MsgGetData) AddInvVect(iv *InvVect) error { + if len(msg.InvList)+1 > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [max %v]", + MaxInvPerMsg) + return messageError("MsgGetData.AddInvVect", str) + } + + msg.InvList = append(msg.InvList, iv) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgGetData) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Limit to max inventory vectors per message. + if count > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [%v]", count) + return messageError("MsgGetData.BtcDecode", str) + } + + // Create a contiguous slice of inventory vectors to deserialize into in + // order to reduce the number of allocations. + invList := make([]InvVect, count) + msg.InvList = make([]*InvVect, 0, count) + for i := uint64(0); i < count; i++ { + iv := &invList[i] + err := readInvVect(r, pver, iv) + if err != nil { + return err + } + msg.AddInvVect(iv) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgGetData) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + // Limit to max inventory vectors per message. + count := len(msg.InvList) + if count > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [%v]", count) + return messageError("MsgGetData.BtcEncode", str) + } + + err := WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, iv := range msg.InvList { + err := writeInvVect(w, pver, iv) + if err != nil { + return err + } + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgGetData) Command() string { + return CmdGetData +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgGetData) MaxPayloadLength(pver uint32) uint32 { + // Num inventory vectors (varInt) + max allowed inventory vectors. + return MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload) +} + +// NewMsgGetData returns a new bitcoin getdata message that conforms to the +// Message interface. See MsgGetData for details. +func NewMsgGetData() *MsgGetData { + return &MsgGetData{ + InvList: make([]*InvVect, 0, defaultInvListAlloc), + } +} + +// NewMsgGetDataSizeHint returns a new bitcoin getdata message that conforms to +// the Message interface. See MsgGetData for details. This function differs +// from NewMsgGetData in that it allows a default allocation size for the +// backing array which houses the inventory vector list. This allows callers +// who know in advance how large the inventory list will grow to avoid the +// overhead of growing the internal backing array several times when appending +// large amounts of inventory vectors with AddInvVect. Note that the specified +// hint is just that - a hint that is used for the default allocation size. +// Adding more (or less) inventory vectors will still work properly. The size +// hint is limited to MaxInvPerMsg. +func NewMsgGetDataSizeHint(sizeHint uint) *MsgGetData { + // Limit the specified hint to the maximum allow per message. + if sizeHint > MaxInvPerMsg { + sizeHint = MaxInvPerMsg + } + + return &MsgGetData{ + InvList: make([]*InvVect, 0, sizeHint), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msggetheaders.go b/vendor/github.com/btcsuite/btcd/wire/msggetheaders.go new file mode 100644 index 0000000000..0bbe42cb03 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msggetheaders.go @@ -0,0 +1,136 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// MsgGetHeaders implements the Message interface and represents a bitcoin +// getheaders message. It is used to request a list of block headers for +// blocks starting after the last known hash in the slice of block locator +// hashes. The list is returned via a headers message (MsgHeaders) and is +// limited by a specific hash to stop at or the maximum number of block headers +// per message, which is currently 2000. +// +// Set the HashStop field to the hash at which to stop and use +// AddBlockLocatorHash to build up the list of block locator hashes. +// +// The algorithm for building the block locator hashes should be to add the +// hashes in reverse order until you reach the genesis block. In order to keep +// the list of locator hashes to a resonable number of entries, first add the +// most recent 10 block hashes, then double the step each loop iteration to +// exponentially decrease the number of hashes the further away from head and +// closer to the genesis block you get. +type MsgGetHeaders struct { + ProtocolVersion uint32 + BlockLocatorHashes []*chainhash.Hash + HashStop chainhash.Hash +} + +// AddBlockLocatorHash adds a new block locator hash to the message. +func (msg *MsgGetHeaders) AddBlockLocatorHash(hash *chainhash.Hash) error { + if len(msg.BlockLocatorHashes)+1 > MaxBlockLocatorsPerMsg { + str := fmt.Sprintf("too many block locator hashes for message [max %v]", + MaxBlockLocatorsPerMsg) + return messageError("MsgGetHeaders.AddBlockLocatorHash", str) + } + + msg.BlockLocatorHashes = append(msg.BlockLocatorHashes, hash) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgGetHeaders) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + err := readElement(r, &msg.ProtocolVersion) + if err != nil { + return err + } + + // Read num block locator hashes and limit to max. + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + if count > MaxBlockLocatorsPerMsg { + str := fmt.Sprintf("too many block locator hashes for message "+ + "[count %v, max %v]", count, MaxBlockLocatorsPerMsg) + return messageError("MsgGetHeaders.BtcDecode", str) + } + + // Create a contiguous slice of hashes to deserialize into in order to + // reduce the number of allocations. + locatorHashes := make([]chainhash.Hash, count) + msg.BlockLocatorHashes = make([]*chainhash.Hash, 0, count) + for i := uint64(0); i < count; i++ { + hash := &locatorHashes[i] + err := readElement(r, hash) + if err != nil { + return err + } + msg.AddBlockLocatorHash(hash) + } + + return readElement(r, &msg.HashStop) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgGetHeaders) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + // Limit to max block locator hashes per message. + count := len(msg.BlockLocatorHashes) + if count > MaxBlockLocatorsPerMsg { + str := fmt.Sprintf("too many block locator hashes for message "+ + "[count %v, max %v]", count, MaxBlockLocatorsPerMsg) + return messageError("MsgGetHeaders.BtcEncode", str) + } + + err := writeElement(w, msg.ProtocolVersion) + if err != nil { + return err + } + + err = WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, hash := range msg.BlockLocatorHashes { + err := writeElement(w, hash) + if err != nil { + return err + } + } + + return writeElement(w, &msg.HashStop) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgGetHeaders) Command() string { + return CmdGetHeaders +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgGetHeaders) MaxPayloadLength(pver uint32) uint32 { + // Version 4 bytes + num block locator hashes (varInt) + max allowed block + // locators + hash stop. + return 4 + MaxVarIntPayload + (MaxBlockLocatorsPerMsg * + chainhash.HashSize) + chainhash.HashSize +} + +// NewMsgGetHeaders returns a new bitcoin getheaders message that conforms to +// the Message interface. See MsgGetHeaders for details. +func NewMsgGetHeaders() *MsgGetHeaders { + return &MsgGetHeaders{ + BlockLocatorHashes: make([]*chainhash.Hash, 0, + MaxBlockLocatorsPerMsg), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgheaders.go b/vendor/github.com/btcsuite/btcd/wire/msgheaders.go new file mode 100644 index 0000000000..7d18d930e0 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgheaders.go @@ -0,0 +1,136 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MaxBlockHeadersPerMsg is the maximum number of block headers that can be in +// a single bitcoin headers message. +const MaxBlockHeadersPerMsg = 2000 + +// MsgHeaders implements the Message interface and represents a bitcoin headers +// message. It is used to deliver block header information in response +// to a getheaders message (MsgGetHeaders). The maximum number of block headers +// per message is currently 2000. See MsgGetHeaders for details on requesting +// the headers. +type MsgHeaders struct { + Headers []*BlockHeader +} + +// AddBlockHeader adds a new block header to the message. +func (msg *MsgHeaders) AddBlockHeader(bh *BlockHeader) error { + if len(msg.Headers)+1 > MaxBlockHeadersPerMsg { + str := fmt.Sprintf("too many block headers in message [max %v]", + MaxBlockHeadersPerMsg) + return messageError("MsgHeaders.AddBlockHeader", str) + } + + msg.Headers = append(msg.Headers, bh) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgHeaders) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Limit to max block headers per message. + if count > MaxBlockHeadersPerMsg { + str := fmt.Sprintf("too many block headers for message "+ + "[count %v, max %v]", count, MaxBlockHeadersPerMsg) + return messageError("MsgHeaders.BtcDecode", str) + } + + // Create a contiguous slice of headers to deserialize into in order to + // reduce the number of allocations. + headers := make([]BlockHeader, count) + msg.Headers = make([]*BlockHeader, 0, count) + for i := uint64(0); i < count; i++ { + bh := &headers[i] + err := readBlockHeader(r, pver, bh) + if err != nil { + return err + } + + txCount, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Ensure the transaction count is zero for headers. + if txCount > 0 { + str := fmt.Sprintf("block headers may not contain "+ + "transactions [count %v]", txCount) + return messageError("MsgHeaders.BtcDecode", str) + } + msg.AddBlockHeader(bh) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgHeaders) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + // Limit to max block headers per message. + count := len(msg.Headers) + if count > MaxBlockHeadersPerMsg { + str := fmt.Sprintf("too many block headers for message "+ + "[count %v, max %v]", count, MaxBlockHeadersPerMsg) + return messageError("MsgHeaders.BtcEncode", str) + } + + err := WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, bh := range msg.Headers { + err := writeBlockHeader(w, pver, bh) + if err != nil { + return err + } + + // The wire protocol encoding always includes a 0 for the number + // of transactions on header messages. This is really just an + // artifact of the way the original implementation serializes + // block headers, but it is required. + err = WriteVarInt(w, pver, 0) + if err != nil { + return err + } + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgHeaders) Command() string { + return CmdHeaders +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgHeaders) MaxPayloadLength(pver uint32) uint32 { + // Num headers (varInt) + max allowed headers (header length + 1 byte + // for the number of transactions which is always 0). + return MaxVarIntPayload + ((MaxBlockHeaderPayload + 1) * + MaxBlockHeadersPerMsg) +} + +// NewMsgHeaders returns a new bitcoin headers message that conforms to the +// Message interface. See MsgHeaders for details. +func NewMsgHeaders() *MsgHeaders { + return &MsgHeaders{ + Headers: make([]*BlockHeader, 0, MaxBlockHeadersPerMsg), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msginv.go b/vendor/github.com/btcsuite/btcd/wire/msginv.go new file mode 100644 index 0000000000..5377b179c3 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msginv.go @@ -0,0 +1,141 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// defaultInvListAlloc is the default size used for the backing array for an +// inventory list. The array will dynamically grow as needed, but this +// figure is intended to provide enough space for the max number of inventory +// vectors in a *typical* inventory message without needing to grow the backing +// array multiple times. Technically, the list can grow to MaxInvPerMsg, but +// rather than using that large figure, this figure more accurately reflects the +// typical case. +const defaultInvListAlloc = 1000 + +// MsgInv implements the Message interface and represents a bitcoin inv message. +// It is used to advertise a peer's known data such as blocks and transactions +// through inventory vectors. It may be sent unsolicited to inform other peers +// of the data or in response to a getblocks message (MsgGetBlocks). Each +// message is limited to a maximum number of inventory vectors, which is +// currently 50,000. +// +// Use the AddInvVect function to build up the list of inventory vectors when +// sending an inv message to another peer. +type MsgInv struct { + InvList []*InvVect +} + +// AddInvVect adds an inventory vector to the message. +func (msg *MsgInv) AddInvVect(iv *InvVect) error { + if len(msg.InvList)+1 > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [max %v]", + MaxInvPerMsg) + return messageError("MsgInv.AddInvVect", str) + } + + msg.InvList = append(msg.InvList, iv) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgInv) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Limit to max inventory vectors per message. + if count > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [%v]", count) + return messageError("MsgInv.BtcDecode", str) + } + + // Create a contiguous slice of inventory vectors to deserialize into in + // order to reduce the number of allocations. + invList := make([]InvVect, count) + msg.InvList = make([]*InvVect, 0, count) + for i := uint64(0); i < count; i++ { + iv := &invList[i] + err := readInvVect(r, pver, iv) + if err != nil { + return err + } + msg.AddInvVect(iv) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgInv) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + // Limit to max inventory vectors per message. + count := len(msg.InvList) + if count > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [%v]", count) + return messageError("MsgInv.BtcEncode", str) + } + + err := WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, iv := range msg.InvList { + err := writeInvVect(w, pver, iv) + if err != nil { + return err + } + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgInv) Command() string { + return CmdInv +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgInv) MaxPayloadLength(pver uint32) uint32 { + // Num inventory vectors (varInt) + max allowed inventory vectors. + return MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload) +} + +// NewMsgInv returns a new bitcoin inv message that conforms to the Message +// interface. See MsgInv for details. +func NewMsgInv() *MsgInv { + return &MsgInv{ + InvList: make([]*InvVect, 0, defaultInvListAlloc), + } +} + +// NewMsgInvSizeHint returns a new bitcoin inv message that conforms to the +// Message interface. See MsgInv for details. This function differs from +// NewMsgInv in that it allows a default allocation size for the backing array +// which houses the inventory vector list. This allows callers who know in +// advance how large the inventory list will grow to avoid the overhead of +// growing the internal backing array several times when appending large amounts +// of inventory vectors with AddInvVect. Note that the specified hint is just +// that - a hint that is used for the default allocation size. Adding more +// (or less) inventory vectors will still work properly. The size hint is +// limited to MaxInvPerMsg. +func NewMsgInvSizeHint(sizeHint uint) *MsgInv { + // Limit the specified hint to the maximum allow per message. + if sizeHint > MaxInvPerMsg { + sizeHint = MaxInvPerMsg + } + + return &MsgInv{ + InvList: make([]*InvVect, 0, sizeHint), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgmempool.go b/vendor/github.com/btcsuite/btcd/wire/msgmempool.go new file mode 100644 index 0000000000..25760c52eb --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgmempool.go @@ -0,0 +1,60 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MsgMemPool implements the Message interface and represents a bitcoin mempool +// message. It is used to request a list of transactions still in the active +// memory pool of a relay. +// +// This message has no payload and was not added until protocol versions +// starting with BIP0035Version. +type MsgMemPool struct{} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgMemPool) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + if pver < BIP0035Version { + str := fmt.Sprintf("mempool message invalid for protocol "+ + "version %d", pver) + return messageError("MsgMemPool.BtcDecode", str) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgMemPool) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + if pver < BIP0035Version { + str := fmt.Sprintf("mempool message invalid for protocol "+ + "version %d", pver) + return messageError("MsgMemPool.BtcEncode", str) + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgMemPool) Command() string { + return CmdMemPool +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgMemPool) MaxPayloadLength(pver uint32) uint32 { + return 0 +} + +// NewMsgMemPool returns a new bitcoin pong message that conforms to the Message +// interface. See MsgPong for details. +func NewMsgMemPool() *MsgMemPool { + return &MsgMemPool{} +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgmerkleblock.go b/vendor/github.com/btcsuite/btcd/wire/msgmerkleblock.go new file mode 100644 index 0000000000..d2ee472178 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgmerkleblock.go @@ -0,0 +1,159 @@ +// Copyright (c) 2014-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// maxFlagsPerMerkleBlock is the maximum number of flag bytes that could +// possibly fit into a merkle block. Since each transaction is represented by +// a single bit, this is the max number of transactions per block divided by +// 8 bits per byte. Then an extra one to cover partials. +const maxFlagsPerMerkleBlock = maxTxPerBlock / 8 + +// MsgMerkleBlock implements the Message interface and represents a bitcoin +// merkleblock message which is used to reset a Bloom filter. +// +// This message was not added until protocol version BIP0037Version. +type MsgMerkleBlock struct { + Header BlockHeader + Transactions uint32 + Hashes []*chainhash.Hash + Flags []byte +} + +// AddTxHash adds a new transaction hash to the message. +func (msg *MsgMerkleBlock) AddTxHash(hash *chainhash.Hash) error { + if len(msg.Hashes)+1 > maxTxPerBlock { + str := fmt.Sprintf("too many tx hashes for message [max %v]", + maxTxPerBlock) + return messageError("MsgMerkleBlock.AddTxHash", str) + } + + msg.Hashes = append(msg.Hashes, hash) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgMerkleBlock) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + if pver < BIP0037Version { + str := fmt.Sprintf("merkleblock message invalid for protocol "+ + "version %d", pver) + return messageError("MsgMerkleBlock.BtcDecode", str) + } + + err := readBlockHeader(r, pver, &msg.Header) + if err != nil { + return err + } + + err = readElement(r, &msg.Transactions) + if err != nil { + return err + } + + // Read num block locator hashes and limit to max. + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + if count > maxTxPerBlock { + str := fmt.Sprintf("too many transaction hashes for message "+ + "[count %v, max %v]", count, maxTxPerBlock) + return messageError("MsgMerkleBlock.BtcDecode", str) + } + + // Create a contiguous slice of hashes to deserialize into in order to + // reduce the number of allocations. + hashes := make([]chainhash.Hash, count) + msg.Hashes = make([]*chainhash.Hash, 0, count) + for i := uint64(0); i < count; i++ { + hash := &hashes[i] + err := readElement(r, hash) + if err != nil { + return err + } + msg.AddTxHash(hash) + } + + msg.Flags, err = ReadVarBytes(r, pver, maxFlagsPerMerkleBlock, + "merkle block flags size") + return err +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgMerkleBlock) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + if pver < BIP0037Version { + str := fmt.Sprintf("merkleblock message invalid for protocol "+ + "version %d", pver) + return messageError("MsgMerkleBlock.BtcEncode", str) + } + + // Read num transaction hashes and limit to max. + numHashes := len(msg.Hashes) + if numHashes > maxTxPerBlock { + str := fmt.Sprintf("too many transaction hashes for message "+ + "[count %v, max %v]", numHashes, maxTxPerBlock) + return messageError("MsgMerkleBlock.BtcDecode", str) + } + numFlagBytes := len(msg.Flags) + if numFlagBytes > maxFlagsPerMerkleBlock { + str := fmt.Sprintf("too many flag bytes for message [count %v, "+ + "max %v]", numFlagBytes, maxFlagsPerMerkleBlock) + return messageError("MsgMerkleBlock.BtcDecode", str) + } + + err := writeBlockHeader(w, pver, &msg.Header) + if err != nil { + return err + } + + err = writeElement(w, msg.Transactions) + if err != nil { + return err + } + + err = WriteVarInt(w, pver, uint64(numHashes)) + if err != nil { + return err + } + for _, hash := range msg.Hashes { + err = writeElement(w, hash) + if err != nil { + return err + } + } + + return WriteVarBytes(w, pver, msg.Flags) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgMerkleBlock) Command() string { + return CmdMerkleBlock +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgMerkleBlock) MaxPayloadLength(pver uint32) uint32 { + return MaxBlockPayload +} + +// NewMsgMerkleBlock returns a new bitcoin merkleblock message that conforms to +// the Message interface. See MsgMerkleBlock for details. +func NewMsgMerkleBlock(bh *BlockHeader) *MsgMerkleBlock { + return &MsgMerkleBlock{ + Header: *bh, + Transactions: 0, + Hashes: make([]*chainhash.Hash, 0), + Flags: make([]byte, 0), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgnotfound.go b/vendor/github.com/btcsuite/btcd/wire/msgnotfound.go new file mode 100644 index 0000000000..e867681668 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgnotfound.go @@ -0,0 +1,110 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MsgNotFound defines a bitcoin notfound message which is sent in response to +// a getdata message if any of the requested data in not available on the peer. +// Each message is limited to a maximum number of inventory vectors, which is +// currently 50,000. +// +// Use the AddInvVect function to build up the list of inventory vectors when +// sending a notfound message to another peer. +type MsgNotFound struct { + InvList []*InvVect +} + +// AddInvVect adds an inventory vector to the message. +func (msg *MsgNotFound) AddInvVect(iv *InvVect) error { + if len(msg.InvList)+1 > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [max %v]", + MaxInvPerMsg) + return messageError("MsgNotFound.AddInvVect", str) + } + + msg.InvList = append(msg.InvList, iv) + return nil +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgNotFound) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Limit to max inventory vectors per message. + if count > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [%v]", count) + return messageError("MsgNotFound.BtcDecode", str) + } + + // Create a contiguous slice of inventory vectors to deserialize into in + // order to reduce the number of allocations. + invList := make([]InvVect, count) + msg.InvList = make([]*InvVect, 0, count) + for i := uint64(0); i < count; i++ { + iv := &invList[i] + err := readInvVect(r, pver, iv) + if err != nil { + return err + } + msg.AddInvVect(iv) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgNotFound) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + // Limit to max inventory vectors per message. + count := len(msg.InvList) + if count > MaxInvPerMsg { + str := fmt.Sprintf("too many invvect in message [%v]", count) + return messageError("MsgNotFound.BtcEncode", str) + } + + err := WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, iv := range msg.InvList { + err := writeInvVect(w, pver, iv) + if err != nil { + return err + } + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgNotFound) Command() string { + return CmdNotFound +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgNotFound) MaxPayloadLength(pver uint32) uint32 { + // Max var int 9 bytes + max InvVects at 36 bytes each. + // Num inventory vectors (varInt) + max allowed inventory vectors. + return MaxVarIntPayload + (MaxInvPerMsg * maxInvVectPayload) +} + +// NewMsgNotFound returns a new bitcoin notfound message that conforms to the +// Message interface. See MsgNotFound for details. +func NewMsgNotFound() *MsgNotFound { + return &MsgNotFound{ + InvList: make([]*InvVect, 0, defaultInvListAlloc), + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgping.go b/vendor/github.com/btcsuite/btcd/wire/msgping.go new file mode 100644 index 0000000000..b2f346e0e1 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgping.go @@ -0,0 +1,87 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "io" +) + +// MsgPing implements the Message interface and represents a bitcoin ping +// message. +// +// For versions BIP0031Version and earlier, it is used primarily to confirm +// that a connection is still valid. A transmission error is typically +// interpreted as a closed connection and that the peer should be removed. +// For versions AFTER BIP0031Version it contains an identifier which can be +// returned in the pong message to determine network timing. +// +// The payload for this message just consists of a nonce used for identifying +// it later. +type MsgPing struct { + // Unique value associated with message that is used to identify + // specific ping message. + Nonce uint64 +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgPing) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + // There was no nonce for BIP0031Version and earlier. + // NOTE: > is not a mistake here. The BIP0031 was defined as AFTER + // the version unlike most others. + if pver > BIP0031Version { + err := readElement(r, &msg.Nonce) + if err != nil { + return err + } + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgPing) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + // There was no nonce for BIP0031Version and earlier. + // NOTE: > is not a mistake here. The BIP0031 was defined as AFTER + // the version unlike most others. + if pver > BIP0031Version { + err := writeElement(w, msg.Nonce) + if err != nil { + return err + } + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgPing) Command() string { + return CmdPing +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgPing) MaxPayloadLength(pver uint32) uint32 { + plen := uint32(0) + // There was no nonce for BIP0031Version and earlier. + // NOTE: > is not a mistake here. The BIP0031 was defined as AFTER + // the version unlike most others. + if pver > BIP0031Version { + // Nonce 8 bytes. + plen += 8 + } + + return plen +} + +// NewMsgPing returns a new bitcoin ping message that conforms to the Message +// interface. See MsgPing for details. +func NewMsgPing(nonce uint64) *MsgPing { + return &MsgPing{ + Nonce: nonce, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgpong.go b/vendor/github.com/btcsuite/btcd/wire/msgpong.go new file mode 100644 index 0000000000..eec80d8d5b --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgpong.go @@ -0,0 +1,78 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MsgPong implements the Message interface and represents a bitcoin pong +// message which is used primarily to confirm that a connection is still valid +// in response to a bitcoin ping message (MsgPing). +// +// This message was not added until protocol versions AFTER BIP0031Version. +type MsgPong struct { + // Unique value associated with message that is used to identify + // specific ping message. + Nonce uint64 +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgPong) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + // NOTE: <= is not a mistake here. The BIP0031 was defined as AFTER + // the version unlike most others. + if pver <= BIP0031Version { + str := fmt.Sprintf("pong message invalid for protocol "+ + "version %d", pver) + return messageError("MsgPong.BtcDecode", str) + } + + return readElement(r, &msg.Nonce) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgPong) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + // NOTE: <= is not a mistake here. The BIP0031 was defined as AFTER + // the version unlike most others. + if pver <= BIP0031Version { + str := fmt.Sprintf("pong message invalid for protocol "+ + "version %d", pver) + return messageError("MsgPong.BtcEncode", str) + } + + return writeElement(w, msg.Nonce) +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgPong) Command() string { + return CmdPong +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgPong) MaxPayloadLength(pver uint32) uint32 { + plen := uint32(0) + // The pong message did not exist for BIP0031Version and earlier. + // NOTE: > is not a mistake here. The BIP0031 was defined as AFTER + // the version unlike most others. + if pver > BIP0031Version { + // Nonce 8 bytes. + plen += 8 + } + + return plen +} + +// NewMsgPong returns a new bitcoin pong message that conforms to the Message +// interface. See MsgPong for details. +func NewMsgPong(nonce uint64) *MsgPong { + return &MsgPong{ + Nonce: nonce, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgreject.go b/vendor/github.com/btcsuite/btcd/wire/msgreject.go new file mode 100644 index 0000000000..a00eeff6f6 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgreject.go @@ -0,0 +1,186 @@ +// Copyright (c) 2014-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// RejectCode represents a numeric value by which a remote peer indicates +// why a message was rejected. +type RejectCode uint8 + +// These constants define the various supported reject codes. +const ( + RejectMalformed RejectCode = 0x01 + RejectInvalid RejectCode = 0x10 + RejectObsolete RejectCode = 0x11 + RejectDuplicate RejectCode = 0x12 + RejectNonstandard RejectCode = 0x40 + RejectDust RejectCode = 0x41 + RejectInsufficientFee RejectCode = 0x42 + RejectCheckpoint RejectCode = 0x43 +) + +// Map of reject codes back strings for pretty printing. +var rejectCodeStrings = map[RejectCode]string{ + RejectMalformed: "REJECT_MALFORMED", + RejectInvalid: "REJECT_INVALID", + RejectObsolete: "REJECT_OBSOLETE", + RejectDuplicate: "REJECT_DUPLICATE", + RejectNonstandard: "REJECT_NONSTANDARD", + RejectDust: "REJECT_DUST", + RejectInsufficientFee: "REJECT_INSUFFICIENTFEE", + RejectCheckpoint: "REJECT_CHECKPOINT", +} + +// String returns the RejectCode in human-readable form. +func (code RejectCode) String() string { + if s, ok := rejectCodeStrings[code]; ok { + return s + } + + return fmt.Sprintf("Unknown RejectCode (%d)", uint8(code)) +} + +// MsgReject implements the Message interface and represents a bitcoin reject +// message. +// +// This message was not added until protocol version RejectVersion. +type MsgReject struct { + // Cmd is the command for the message which was rejected such as + // as CmdBlock or CmdTx. This can be obtained from the Command function + // of a Message. + Cmd string + + // RejectCode is a code indicating why the command was rejected. It + // is encoded as a uint8 on the wire. + Code RejectCode + + // Reason is a human-readable string with specific details (over and + // above the reject code) about why the command was rejected. + Reason string + + // Hash identifies a specific block or transaction that was rejected + // and therefore only applies the MsgBlock and MsgTx messages. + Hash chainhash.Hash +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgReject) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + if pver < RejectVersion { + str := fmt.Sprintf("reject message invalid for protocol "+ + "version %d", pver) + return messageError("MsgReject.BtcDecode", str) + } + + // Command that was rejected. + cmd, err := ReadVarString(r, pver) + if err != nil { + return err + } + msg.Cmd = cmd + + // Code indicating why the command was rejected. + err = readElement(r, &msg.Code) + if err != nil { + return err + } + + // Human readable string with specific details (over and above the + // reject code above) about why the command was rejected. + reason, err := ReadVarString(r, pver) + if err != nil { + return err + } + msg.Reason = reason + + // CmdBlock and CmdTx messages have an additional hash field that + // identifies the specific block or transaction. + if msg.Cmd == CmdBlock || msg.Cmd == CmdTx { + err := readElement(r, &msg.Hash) + if err != nil { + return err + } + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgReject) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + if pver < RejectVersion { + str := fmt.Sprintf("reject message invalid for protocol "+ + "version %d", pver) + return messageError("MsgReject.BtcEncode", str) + } + + // Command that was rejected. + err := WriteVarString(w, pver, msg.Cmd) + if err != nil { + return err + } + + // Code indicating why the command was rejected. + err = writeElement(w, msg.Code) + if err != nil { + return err + } + + // Human readable string with specific details (over and above the + // reject code above) about why the command was rejected. + err = WriteVarString(w, pver, msg.Reason) + if err != nil { + return err + } + + // CmdBlock and CmdTx messages have an additional hash field that + // identifies the specific block or transaction. + if msg.Cmd == CmdBlock || msg.Cmd == CmdTx { + err := writeElement(w, &msg.Hash) + if err != nil { + return err + } + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgReject) Command() string { + return CmdReject +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgReject) MaxPayloadLength(pver uint32) uint32 { + plen := uint32(0) + // The reject message did not exist before protocol version + // RejectVersion. + if pver >= RejectVersion { + // Unfortunately the bitcoin protocol does not enforce a sane + // limit on the length of the reason, so the max payload is the + // overall maximum message payload. + plen = MaxMessagePayload + } + + return plen +} + +// NewMsgReject returns a new bitcoin reject message that conforms to the +// Message interface. See MsgReject for details. +func NewMsgReject(command string, code RejectCode, reason string) *MsgReject { + return &MsgReject{ + Cmd: command, + Code: code, + Reason: reason, + } +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgsendaddrv2.go b/vendor/github.com/btcsuite/btcd/wire/msgsendaddrv2.go new file mode 100644 index 0000000000..d6d19efb27 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgsendaddrv2.go @@ -0,0 +1,42 @@ +package wire + +import ( + "io" +) + +// MsgSendAddrV2 defines a bitcoin sendaddrv2 message which is used for a peer +// to signal support for receiving ADDRV2 messages (BIP155). It implements the +// Message interface. +// +// This message has no payload. +type MsgSendAddrV2 struct{} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgSendAddrV2) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgSendAddrV2) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgSendAddrV2) Command() string { + return CmdSendAddrV2 +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgSendAddrV2) MaxPayloadLength(pver uint32) uint32 { + return 0 +} + +// NewMsgSendAddrV2 returns a new bitcoin sendaddrv2 message that conforms to the +// Message interface. +func NewMsgSendAddrV2() *MsgSendAddrV2 { + return &MsgSendAddrV2{} +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgsendheaders.go b/vendor/github.com/btcsuite/btcd/wire/msgsendheaders.go new file mode 100644 index 0000000000..19505351ec --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgsendheaders.go @@ -0,0 +1,60 @@ +// Copyright (c) 2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "io" +) + +// MsgSendHeaders implements the Message interface and represents a bitcoin +// sendheaders message. It is used to request the peer send block headers +// rather than inventory vectors. +// +// This message has no payload and was not added until protocol versions +// starting with SendHeadersVersion. +type MsgSendHeaders struct{} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgSendHeaders) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + if pver < SendHeadersVersion { + str := fmt.Sprintf("sendheaders message invalid for protocol "+ + "version %d", pver) + return messageError("MsgSendHeaders.BtcDecode", str) + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgSendHeaders) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + if pver < SendHeadersVersion { + str := fmt.Sprintf("sendheaders message invalid for protocol "+ + "version %d", pver) + return messageError("MsgSendHeaders.BtcEncode", str) + } + + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgSendHeaders) Command() string { + return CmdSendHeaders +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgSendHeaders) MaxPayloadLength(pver uint32) uint32 { + return 0 +} + +// NewMsgSendHeaders returns a new bitcoin sendheaders message that conforms to +// the Message interface. See MsgSendHeaders for details. +func NewMsgSendHeaders() *MsgSendHeaders { + return &MsgSendHeaders{} +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgtx.go b/vendor/github.com/btcsuite/btcd/wire/msgtx.go new file mode 100644 index 0000000000..1e2f69fad4 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgtx.go @@ -0,0 +1,1049 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "bytes" + "fmt" + "io" + "strconv" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +const ( + // TxVersion is the current latest supported transaction version. + TxVersion = 1 + + // MaxTxInSequenceNum is the maximum sequence number the sequence field + // of a transaction input can be. + MaxTxInSequenceNum uint32 = 0xffffffff + + // MaxPrevOutIndex is the maximum index the index field of a previous + // outpoint can be. + MaxPrevOutIndex uint32 = 0xffffffff + + // SequenceLockTimeDisabled is a flag that if set on a transaction + // input's sequence number, the sequence number will not be interpreted + // as a relative locktime. + SequenceLockTimeDisabled = 1 << 31 + + // SequenceLockTimeIsSeconds is a flag that if set on a transaction + // input's sequence number, the relative locktime has units of 512 + // seconds. + SequenceLockTimeIsSeconds = 1 << 22 + + // SequenceLockTimeMask is a mask that extracts the relative locktime + // when masked against the transaction input sequence number. + SequenceLockTimeMask = 0x0000ffff + + // SequenceLockTimeGranularity is the defined time based granularity + // for seconds-based relative time locks. When converting from seconds + // to a sequence number, the value is right shifted by this amount, + // therefore the granularity of relative time locks in 512 or 2^9 + // seconds. Enforced relative lock times are multiples of 512 seconds. + SequenceLockTimeGranularity = 9 + + // defaultTxInOutAlloc is the default size used for the backing array for + // transaction inputs and outputs. The array will dynamically grow as needed, + // but this figure is intended to provide enough space for the number of + // inputs and outputs in a typical transaction without needing to grow the + // backing array multiple times. + defaultTxInOutAlloc = 15 + + // minTxInPayload is the minimum payload size for a transaction input. + // PreviousOutPoint.Hash + PreviousOutPoint.Index 4 bytes + Varint for + // SignatureScript length 1 byte + Sequence 4 bytes. + minTxInPayload = 9 + chainhash.HashSize + + // maxTxInPerMessage is the maximum number of transactions inputs that + // a transaction which fits into a message could possibly have. + maxTxInPerMessage = (MaxMessagePayload / minTxInPayload) + 1 + + // MinTxOutPayload is the minimum payload size for a transaction output. + // Value 8 bytes + Varint for PkScript length 1 byte. + MinTxOutPayload = 9 + + // maxTxOutPerMessage is the maximum number of transactions outputs that + // a transaction which fits into a message could possibly have. + maxTxOutPerMessage = (MaxMessagePayload / MinTxOutPayload) + 1 + + // minTxPayload is the minimum payload size for a transaction. Note + // that any realistically usable transaction must have at least one + // input or output, but that is a rule enforced at a higher layer, so + // it is intentionally not included here. + // Version 4 bytes + Varint number of transaction inputs 1 byte + Varint + // number of transaction outputs 1 byte + LockTime 4 bytes + min input + // payload + min output payload. + minTxPayload = 10 + + // freeListMaxScriptSize is the size of each buffer in the free list + // that is used for deserializing scripts from the wire before they are + // concatenated into a single contiguous buffers. This value was chosen + // because it is slightly more than twice the size of the vast majority + // of all "standard" scripts. Larger scripts are still deserialized + // properly as the free list will simply be bypassed for them. + freeListMaxScriptSize = 512 + + // freeListMaxItems is the number of buffers to keep in the free list + // to use for script deserialization. This value allows up to 100 + // scripts per transaction being simultaneously deserialized by 125 + // peers. Thus, the peak usage of the free list is 12,500 * 512 = + // 6,400,000 bytes. + freeListMaxItems = 12500 + + // maxWitnessItemsPerInput is the maximum number of witness items to + // be read for the witness data for a single TxIn. This number is + // derived using a possble lower bound for the encoding of a witness + // item: 1 byte for length + 1 byte for the witness item itself, or two + // bytes. This value is then divided by the currently allowed maximum + // "cost" for a transaction. + maxWitnessItemsPerInput = 500000 + + // maxWitnessItemSize is the maximum allowed size for an item within + // an input's witness data. This number is derived from the fact that + // for script validation, each pushed item onto the stack must be less + // than 10k bytes. + maxWitnessItemSize = 11000 +) + +// TxFlagMarker is the first byte of the FLAG field in a bitcoin tx +// message. It allows decoders to distinguish a regular serialized +// transaction from one that would require a different parsing logic. +// +// Position of FLAG in a bitcoin tx message: +// ┌─────────┬────────────────────┬─────────────┬─────┐ +// │ VERSION │ FLAG │ TX-IN-COUNT │ ... │ +// │ 4 bytes │ 2 bytes (optional) │ varint │ │ +// └─────────┴────────────────────┴─────────────┴─────┘ +// +// Zooming into the FLAG field: +// ┌── FLAG ─────────────┬────────┐ +// │ TxFlagMarker (0x00) │ TxFlag │ +// │ 1 byte │ 1 byte │ +// └─────────────────────┴────────┘ +const TxFlagMarker = 0x00 + +// TxFlag is the second byte of the FLAG field in a bitcoin tx message. +// It indicates the decoding logic to use in the transaction parser, if +// TxFlagMarker is detected in the tx message. +// +// As of writing this, only the witness flag (0x01) is supported, but may be +// extended in the future to accommodate auxiliary non-committed fields. +type TxFlag = byte + +const ( + // WitnessFlag is a flag specific to witness encoding. If the TxFlagMarker + // is encountered followed by the WitnessFlag, then it indicates a + // transaction has witness data. This allows decoders to distinguish a + // serialized transaction with witnesses from a legacy one. + WitnessFlag TxFlag = 0x01 +) + +// scriptFreeList defines a free list of byte slices (up to the maximum number +// defined by the freeListMaxItems constant) that have a cap according to the +// freeListMaxScriptSize constant. It is used to provide temporary buffers for +// deserializing scripts in order to greatly reduce the number of allocations +// required. +// +// The caller can obtain a buffer from the free list by calling the Borrow +// function and should return it via the Return function when done using it. +type scriptFreeList chan []byte + +// Borrow returns a byte slice from the free list with a length according the +// provided size. A new buffer is allocated if there are any items available. +// +// When the size is larger than the max size allowed for items on the free list +// a new buffer of the appropriate size is allocated and returned. It is safe +// to attempt to return said buffer via the Return function as it will be +// ignored and allowed to go the garbage collector. +func (c scriptFreeList) Borrow(size uint64) []byte { + if size > freeListMaxScriptSize { + return make([]byte, size) + } + + var buf []byte + select { + case buf = <-c: + default: + buf = make([]byte, freeListMaxScriptSize) + } + return buf[:size] +} + +// Return puts the provided byte slice back on the free list when it has a cap +// of the expected length. The buffer is expected to have been obtained via +// the Borrow function. Any slices that are not of the appropriate size, such +// as those whose size is greater than the largest allowed free list item size +// are simply ignored so they can go to the garbage collector. +func (c scriptFreeList) Return(buf []byte) { + // Ignore any buffers returned that aren't the expected size for the + // free list. + if cap(buf) != freeListMaxScriptSize { + return + } + + // Return the buffer to the free list when it's not full. Otherwise let + // it be garbage collected. + select { + case c <- buf: + default: + // Let it go to the garbage collector. + } +} + +// Create the concurrent safe free list to use for script deserialization. As +// previously described, this free list is maintained to significantly reduce +// the number of allocations. +var scriptPool scriptFreeList = make(chan []byte, freeListMaxItems) + +// OutPoint defines a bitcoin data type that is used to track previous +// transaction outputs. +type OutPoint struct { + Hash chainhash.Hash + Index uint32 +} + +// NewOutPoint returns a new bitcoin transaction outpoint point with the +// provided hash and index. +func NewOutPoint(hash *chainhash.Hash, index uint32) *OutPoint { + return &OutPoint{ + Hash: *hash, + Index: index, + } +} + +// String returns the OutPoint in the human-readable form "hash:index". +func (o OutPoint) String() string { + // Allocate enough for hash string, colon, and 10 digits. Although + // at the time of writing, the number of digits can be no greater than + // the length of the decimal representation of maxTxOutPerMessage, the + // maximum message payload may increase in the future and this + // optimization may go unnoticed, so allocate space for 10 decimal + // digits, which will fit any uint32. + buf := make([]byte, 2*chainhash.HashSize+1, 2*chainhash.HashSize+1+10) + copy(buf, o.Hash.String()) + buf[2*chainhash.HashSize] = ':' + buf = strconv.AppendUint(buf, uint64(o.Index), 10) + return string(buf) +} + +// TxIn defines a bitcoin transaction input. +type TxIn struct { + PreviousOutPoint OutPoint + SignatureScript []byte + Witness TxWitness + Sequence uint32 +} + +// SerializeSize returns the number of bytes it would take to serialize the +// the transaction input. +func (t *TxIn) SerializeSize() int { + // Outpoint Hash 32 bytes + Outpoint Index 4 bytes + Sequence 4 bytes + + // serialized varint size for the length of SignatureScript + + // SignatureScript bytes. + return 40 + VarIntSerializeSize(uint64(len(t.SignatureScript))) + + len(t.SignatureScript) +} + +// NewTxIn returns a new bitcoin transaction input with the provided +// previous outpoint point and signature script with a default sequence of +// MaxTxInSequenceNum. +func NewTxIn(prevOut *OutPoint, signatureScript []byte, witness [][]byte) *TxIn { + return &TxIn{ + PreviousOutPoint: *prevOut, + SignatureScript: signatureScript, + Witness: witness, + Sequence: MaxTxInSequenceNum, + } +} + +// TxWitness defines the witness for a TxIn. A witness is to be interpreted as +// a slice of byte slices, or a stack with one or many elements. +type TxWitness [][]byte + +// SerializeSize returns the number of bytes it would take to serialize the the +// transaction input's witness. +func (t TxWitness) SerializeSize() int { + // A varint to signal the number of elements the witness has. + n := VarIntSerializeSize(uint64(len(t))) + + // For each element in the witness, we'll need a varint to signal the + // size of the element, then finally the number of bytes the element + // itself comprises. + for _, witItem := range t { + n += VarIntSerializeSize(uint64(len(witItem))) + n += len(witItem) + } + + return n +} + +// TxOut defines a bitcoin transaction output. +type TxOut struct { + Value int64 + PkScript []byte +} + +// SerializeSize returns the number of bytes it would take to serialize the +// the transaction output. +func (t *TxOut) SerializeSize() int { + // Value 8 bytes + serialized varint size for the length of PkScript + + // PkScript bytes. + return 8 + VarIntSerializeSize(uint64(len(t.PkScript))) + len(t.PkScript) +} + +// NewTxOut returns a new bitcoin transaction output with the provided +// transaction value and public key script. +func NewTxOut(value int64, pkScript []byte) *TxOut { + return &TxOut{ + Value: value, + PkScript: pkScript, + } +} + +// MsgTx implements the Message interface and represents a bitcoin tx message. +// It is used to deliver transaction information in response to a getdata +// message (MsgGetData) for a given transaction. +// +// Use the AddTxIn and AddTxOut functions to build up the list of transaction +// inputs and outputs. +type MsgTx struct { + Version int32 + TxIn []*TxIn + TxOut []*TxOut + LockTime uint32 +} + +// AddTxIn adds a transaction input to the message. +func (msg *MsgTx) AddTxIn(ti *TxIn) { + msg.TxIn = append(msg.TxIn, ti) +} + +// AddTxOut adds a transaction output to the message. +func (msg *MsgTx) AddTxOut(to *TxOut) { + msg.TxOut = append(msg.TxOut, to) +} + +// TxHash generates the Hash for the transaction. +func (msg *MsgTx) TxHash() chainhash.Hash { + // Encode the transaction and calculate double sha256 on the result. + // Ignore the error returns since the only way the encode could fail + // is being out of memory or due to nil pointers, both of which would + // cause a run-time panic. + buf := bytes.NewBuffer(make([]byte, 0, msg.SerializeSizeStripped())) + _ = msg.SerializeNoWitness(buf) + return chainhash.DoubleHashH(buf.Bytes()) +} + +// WitnessHash generates the hash of the transaction serialized according to +// the new witness serialization defined in BIP0141 and BIP0144. The final +// output is used within the Segregated Witness commitment of all the witnesses +// within a block. If a transaction has no witness data, then the witness hash, +// is the same as its txid. +func (msg *MsgTx) WitnessHash() chainhash.Hash { + if msg.HasWitness() { + buf := bytes.NewBuffer(make([]byte, 0, msg.SerializeSize())) + _ = msg.Serialize(buf) + return chainhash.DoubleHashH(buf.Bytes()) + } + + return msg.TxHash() +} + +// Copy creates a deep copy of a transaction so that the original does not get +// modified when the copy is manipulated. +func (msg *MsgTx) Copy() *MsgTx { + // Create new tx and start by copying primitive values and making space + // for the transaction inputs and outputs. + newTx := MsgTx{ + Version: msg.Version, + TxIn: make([]*TxIn, 0, len(msg.TxIn)), + TxOut: make([]*TxOut, 0, len(msg.TxOut)), + LockTime: msg.LockTime, + } + + // Deep copy the old TxIn data. + for _, oldTxIn := range msg.TxIn { + // Deep copy the old previous outpoint. + oldOutPoint := oldTxIn.PreviousOutPoint + newOutPoint := OutPoint{} + newOutPoint.Hash.SetBytes(oldOutPoint.Hash[:]) + newOutPoint.Index = oldOutPoint.Index + + // Deep copy the old signature script. + var newScript []byte + oldScript := oldTxIn.SignatureScript + oldScriptLen := len(oldScript) + if oldScriptLen > 0 { + newScript = make([]byte, oldScriptLen) + copy(newScript, oldScript[:oldScriptLen]) + } + + // Create new txIn with the deep copied data. + newTxIn := TxIn{ + PreviousOutPoint: newOutPoint, + SignatureScript: newScript, + Sequence: oldTxIn.Sequence, + } + + // If the transaction is witnessy, then also copy the + // witnesses. + if len(oldTxIn.Witness) != 0 { + // Deep copy the old witness data. + newTxIn.Witness = make([][]byte, len(oldTxIn.Witness)) + for i, oldItem := range oldTxIn.Witness { + newItem := make([]byte, len(oldItem)) + copy(newItem, oldItem) + newTxIn.Witness[i] = newItem + } + } + + // Finally, append this fully copied txin. + newTx.TxIn = append(newTx.TxIn, &newTxIn) + } + + // Deep copy the old TxOut data. + for _, oldTxOut := range msg.TxOut { + // Deep copy the old PkScript + var newScript []byte + oldScript := oldTxOut.PkScript + oldScriptLen := len(oldScript) + if oldScriptLen > 0 { + newScript = make([]byte, oldScriptLen) + copy(newScript, oldScript[:oldScriptLen]) + } + + // Create new txOut with the deep copied data and append it to + // new Tx. + newTxOut := TxOut{ + Value: oldTxOut.Value, + PkScript: newScript, + } + newTx.TxOut = append(newTx.TxOut, &newTxOut) + } + + return &newTx +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +// See Deserialize for decoding transactions stored to disk, such as in a +// database, as opposed to decoding transactions from the wire. +func (msg *MsgTx) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + version, err := binarySerializer.Uint32(r, littleEndian) + if err != nil { + return err + } + msg.Version = int32(version) + + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // A count of zero (meaning no TxIn's to the uninitiated) means that the + // value is a TxFlagMarker, and hence indicates the presence of a flag. + var flag [1]TxFlag + if count == TxFlagMarker && enc == WitnessEncoding { + // The count varint was in fact the flag marker byte. Next, we need to + // read the flag value, which is a single byte. + if _, err = io.ReadFull(r, flag[:]); err != nil { + return err + } + + // At the moment, the flag MUST be WitnessFlag (0x01). In the future + // other flag types may be supported. + if flag[0] != WitnessFlag { + str := fmt.Sprintf("witness tx but flag byte is %x", flag) + return messageError("MsgTx.BtcDecode", str) + } + + // With the Segregated Witness specific fields decoded, we can + // now read in the actual txin count. + count, err = ReadVarInt(r, pver) + if err != nil { + return err + } + } + + // Prevent more input transactions than could possibly fit into a + // message. It would be possible to cause memory exhaustion and panics + // without a sane upper bound on this count. + if count > uint64(maxTxInPerMessage) { + str := fmt.Sprintf("too many input transactions to fit into "+ + "max message size [count %d, max %d]", count, + maxTxInPerMessage) + return messageError("MsgTx.BtcDecode", str) + } + + // returnScriptBuffers is a closure that returns any script buffers that + // were borrowed from the pool when there are any deserialization + // errors. This is only valid to call before the final step which + // replaces the scripts with the location in a contiguous buffer and + // returns them. + returnScriptBuffers := func() { + for _, txIn := range msg.TxIn { + if txIn == nil { + continue + } + + if txIn.SignatureScript != nil { + scriptPool.Return(txIn.SignatureScript) + } + + for _, witnessElem := range txIn.Witness { + if witnessElem != nil { + scriptPool.Return(witnessElem) + } + } + } + for _, txOut := range msg.TxOut { + if txOut == nil || txOut.PkScript == nil { + continue + } + scriptPool.Return(txOut.PkScript) + } + } + + // Deserialize the inputs. + var totalScriptSize uint64 + txIns := make([]TxIn, count) + msg.TxIn = make([]*TxIn, count) + for i := uint64(0); i < count; i++ { + // The pointer is set now in case a script buffer is borrowed + // and needs to be returned to the pool on error. + ti := &txIns[i] + msg.TxIn[i] = ti + err = readTxIn(r, pver, msg.Version, ti) + if err != nil { + returnScriptBuffers() + return err + } + totalScriptSize += uint64(len(ti.SignatureScript)) + } + + count, err = ReadVarInt(r, pver) + if err != nil { + returnScriptBuffers() + return err + } + + // Prevent more output transactions than could possibly fit into a + // message. It would be possible to cause memory exhaustion and panics + // without a sane upper bound on this count. + if count > uint64(maxTxOutPerMessage) { + returnScriptBuffers() + str := fmt.Sprintf("too many output transactions to fit into "+ + "max message size [count %d, max %d]", count, + maxTxOutPerMessage) + return messageError("MsgTx.BtcDecode", str) + } + + // Deserialize the outputs. + txOuts := make([]TxOut, count) + msg.TxOut = make([]*TxOut, count) + for i := uint64(0); i < count; i++ { + // The pointer is set now in case a script buffer is borrowed + // and needs to be returned to the pool on error. + to := &txOuts[i] + msg.TxOut[i] = to + err = readTxOut(r, pver, msg.Version, to) + if err != nil { + returnScriptBuffers() + return err + } + totalScriptSize += uint64(len(to.PkScript)) + } + + // If the transaction's flag byte isn't 0x00 at this point, then one or + // more of its inputs has accompanying witness data. + if flag[0] != 0 && enc == WitnessEncoding { + for _, txin := range msg.TxIn { + // For each input, the witness is encoded as a stack + // with one or more items. Therefore, we first read a + // varint which encodes the number of stack items. + witCount, err := ReadVarInt(r, pver) + if err != nil { + returnScriptBuffers() + return err + } + + // Prevent a possible memory exhaustion attack by + // limiting the witCount value to a sane upper bound. + if witCount > maxWitnessItemsPerInput { + returnScriptBuffers() + str := fmt.Sprintf("too many witness items to fit "+ + "into max message size [count %d, max %d]", + witCount, maxWitnessItemsPerInput) + return messageError("MsgTx.BtcDecode", str) + } + + // Then for witCount number of stack items, each item + // has a varint length prefix, followed by the witness + // item itself. + txin.Witness = make([][]byte, witCount) + for j := uint64(0); j < witCount; j++ { + txin.Witness[j], err = readScript(r, pver, + maxWitnessItemSize, "script witness item") + if err != nil { + returnScriptBuffers() + return err + } + totalScriptSize += uint64(len(txin.Witness[j])) + } + } + } + + msg.LockTime, err = binarySerializer.Uint32(r, littleEndian) + if err != nil { + returnScriptBuffers() + return err + } + + // Create a single allocation to house all of the scripts and set each + // input signature script and output public key script to the + // appropriate subslice of the overall contiguous buffer. Then, return + // each individual script buffer back to the pool so they can be reused + // for future deserializations. This is done because it significantly + // reduces the number of allocations the garbage collector needs to + // track, which in turn improves performance and drastically reduces the + // amount of runtime overhead that would otherwise be needed to keep + // track of millions of small allocations. + // + // NOTE: It is no longer valid to call the returnScriptBuffers closure + // after these blocks of code run because it is already done and the + // scripts in the transaction inputs and outputs no longer point to the + // buffers. + var offset uint64 + scripts := make([]byte, totalScriptSize) + for i := 0; i < len(msg.TxIn); i++ { + // Copy the signature script into the contiguous buffer at the + // appropriate offset. + signatureScript := msg.TxIn[i].SignatureScript + copy(scripts[offset:], signatureScript) + + // Reset the signature script of the transaction input to the + // slice of the contiguous buffer where the script lives. + scriptSize := uint64(len(signatureScript)) + end := offset + scriptSize + msg.TxIn[i].SignatureScript = scripts[offset:end:end] + offset += scriptSize + + // Return the temporary script buffer to the pool. + scriptPool.Return(signatureScript) + + for j := 0; j < len(msg.TxIn[i].Witness); j++ { + // Copy each item within the witness stack for this + // input into the contiguous buffer at the appropriate + // offset. + witnessElem := msg.TxIn[i].Witness[j] + copy(scripts[offset:], witnessElem) + + // Reset the witness item within the stack to the slice + // of the contiguous buffer where the witness lives. + witnessElemSize := uint64(len(witnessElem)) + end := offset + witnessElemSize + msg.TxIn[i].Witness[j] = scripts[offset:end:end] + offset += witnessElemSize + + // Return the temporary buffer used for the witness stack + // item to the pool. + scriptPool.Return(witnessElem) + } + } + for i := 0; i < len(msg.TxOut); i++ { + // Copy the public key script into the contiguous buffer at the + // appropriate offset. + pkScript := msg.TxOut[i].PkScript + copy(scripts[offset:], pkScript) + + // Reset the public key script of the transaction output to the + // slice of the contiguous buffer where the script lives. + scriptSize := uint64(len(pkScript)) + end := offset + scriptSize + msg.TxOut[i].PkScript = scripts[offset:end:end] + offset += scriptSize + + // Return the temporary script buffer to the pool. + scriptPool.Return(pkScript) + } + + return nil +} + +// Deserialize decodes a transaction from r into the receiver using a format +// that is suitable for long-term storage such as a database while respecting +// the Version field in the transaction. This function differs from BtcDecode +// in that BtcDecode decodes from the bitcoin wire protocol as it was sent +// across the network. The wire encoding can technically differ depending on +// the protocol version and doesn't even really need to match the format of a +// stored transaction at all. As of the time this comment was written, the +// encoded transaction is the same in both instances, but there is a distinct +// difference and separating the two allows the API to be flexible enough to +// deal with changes. +func (msg *MsgTx) Deserialize(r io.Reader) error { + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of BtcDecode. + return msg.BtcDecode(r, 0, WitnessEncoding) +} + +// DeserializeNoWitness decodes a transaction from r into the receiver, where +// the transaction encoding format within r MUST NOT utilize the new +// serialization format created to encode transaction bearing witness data +// within inputs. +func (msg *MsgTx) DeserializeNoWitness(r io.Reader) error { + return msg.BtcDecode(r, 0, BaseEncoding) +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +// See Serialize for encoding transactions to be stored to disk, such as in a +// database, as opposed to encoding transactions for the wire. +func (msg *MsgTx) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + err := binarySerializer.PutUint32(w, littleEndian, uint32(msg.Version)) + if err != nil { + return err + } + + // If the encoding version is set to WitnessEncoding, and the Flags + // field for the MsgTx aren't 0x00, then this indicates the transaction + // is to be encoded using the new witness inclusionary structure + // defined in BIP0144. + doWitness := enc == WitnessEncoding && msg.HasWitness() + if doWitness { + // After the transaction's Version field, we include two additional + // bytes specific to the witness encoding. This byte sequence is known + // as a flag. The first byte is a marker byte (TxFlagMarker) and the + // second one is the flag value to indicate presence of witness data. + if _, err := w.Write([]byte{TxFlagMarker, WitnessFlag}); err != nil { + return err + } + } + + count := uint64(len(msg.TxIn)) + err = WriteVarInt(w, pver, count) + if err != nil { + return err + } + + for _, ti := range msg.TxIn { + err = writeTxIn(w, pver, msg.Version, ti) + if err != nil { + return err + } + } + + count = uint64(len(msg.TxOut)) + err = WriteVarInt(w, pver, count) + if err != nil { + return err + } + + for _, to := range msg.TxOut { + err = WriteTxOut(w, pver, msg.Version, to) + if err != nil { + return err + } + } + + // If this transaction is a witness transaction, and the witness + // encoded is desired, then encode the witness for each of the inputs + // within the transaction. + if doWitness { + for _, ti := range msg.TxIn { + err = writeTxWitness(w, pver, msg.Version, ti.Witness) + if err != nil { + return err + } + } + } + + return binarySerializer.PutUint32(w, littleEndian, msg.LockTime) +} + +// HasWitness returns false if none of the inputs within the transaction +// contain witness data, true false otherwise. +func (msg *MsgTx) HasWitness() bool { + for _, txIn := range msg.TxIn { + if len(txIn.Witness) != 0 { + return true + } + } + + return false +} + +// Serialize encodes the transaction to w using a format that suitable for +// long-term storage such as a database while respecting the Version field in +// the transaction. This function differs from BtcEncode in that BtcEncode +// encodes the transaction to the bitcoin wire protocol in order to be sent +// across the network. The wire encoding can technically differ depending on +// the protocol version and doesn't even really need to match the format of a +// stored transaction at all. As of the time this comment was written, the +// encoded transaction is the same in both instances, but there is a distinct +// difference and separating the two allows the API to be flexible enough to +// deal with changes. +func (msg *MsgTx) Serialize(w io.Writer) error { + // At the current time, there is no difference between the wire encoding + // at protocol version 0 and the stable long-term storage format. As + // a result, make use of BtcEncode. + // + // Passing a encoding type of WitnessEncoding to BtcEncode for MsgTx + // indicates that the transaction's witnesses (if any) should be + // serialized according to the new serialization structure defined in + // BIP0144. + return msg.BtcEncode(w, 0, WitnessEncoding) +} + +// SerializeNoWitness encodes the transaction to w in an identical manner to +// Serialize, however even if the source transaction has inputs with witness +// data, the old serialization format will still be used. +func (msg *MsgTx) SerializeNoWitness(w io.Writer) error { + return msg.BtcEncode(w, 0, BaseEncoding) +} + +// baseSize returns the serialized size of the transaction without accounting +// for any witness data. +func (msg *MsgTx) baseSize() int { + // Version 4 bytes + LockTime 4 bytes + Serialized varint size for the + // number of transaction inputs and outputs. + n := 8 + VarIntSerializeSize(uint64(len(msg.TxIn))) + + VarIntSerializeSize(uint64(len(msg.TxOut))) + + for _, txIn := range msg.TxIn { + n += txIn.SerializeSize() + } + + for _, txOut := range msg.TxOut { + n += txOut.SerializeSize() + } + + return n +} + +// SerializeSize returns the number of bytes it would take to serialize the +// the transaction. +func (msg *MsgTx) SerializeSize() int { + n := msg.baseSize() + + if msg.HasWitness() { + // The marker, and flag fields take up two additional bytes. + n += 2 + + // Additionally, factor in the serialized size of each of the + // witnesses for each txin. + for _, txin := range msg.TxIn { + n += txin.Witness.SerializeSize() + } + } + + return n +} + +// SerializeSizeStripped returns the number of bytes it would take to serialize +// the transaction, excluding any included witness data. +func (msg *MsgTx) SerializeSizeStripped() int { + return msg.baseSize() +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgTx) Command() string { + return CmdTx +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgTx) MaxPayloadLength(pver uint32) uint32 { + return MaxBlockPayload +} + +// PkScriptLocs returns a slice containing the start of each public key script +// within the raw serialized transaction. The caller can easily obtain the +// length of each script by using len on the script available via the +// appropriate transaction output entry. +func (msg *MsgTx) PkScriptLocs() []int { + numTxOut := len(msg.TxOut) + if numTxOut == 0 { + return nil + } + + // The starting offset in the serialized transaction of the first + // transaction output is: + // + // Version 4 bytes + serialized varint size for the number of + // transaction inputs and outputs + serialized size of each transaction + // input. + n := 4 + VarIntSerializeSize(uint64(len(msg.TxIn))) + + VarIntSerializeSize(uint64(numTxOut)) + + // If this transaction has a witness input, the an additional two bytes + // for the marker, and flag byte need to be taken into account. + if len(msg.TxIn) > 0 && msg.TxIn[0].Witness != nil { + n += 2 + } + + for _, txIn := range msg.TxIn { + n += txIn.SerializeSize() + } + + // Calculate and set the appropriate offset for each public key script. + pkScriptLocs := make([]int, numTxOut) + for i, txOut := range msg.TxOut { + // The offset of the script in the transaction output is: + // + // Value 8 bytes + serialized varint size for the length of + // PkScript. + n += 8 + VarIntSerializeSize(uint64(len(txOut.PkScript))) + pkScriptLocs[i] = n + n += len(txOut.PkScript) + } + + return pkScriptLocs +} + +// NewMsgTx returns a new bitcoin tx message that conforms to the Message +// interface. The return instance has a default version of TxVersion and there +// are no transaction inputs or outputs. Also, the lock time is set to zero +// to indicate the transaction is valid immediately as opposed to some time in +// future. +func NewMsgTx(version int32) *MsgTx { + return &MsgTx{ + Version: version, + TxIn: make([]*TxIn, 0, defaultTxInOutAlloc), + TxOut: make([]*TxOut, 0, defaultTxInOutAlloc), + } +} + +// readOutPoint reads the next sequence of bytes from r as an OutPoint. +func readOutPoint(r io.Reader, pver uint32, version int32, op *OutPoint) error { + _, err := io.ReadFull(r, op.Hash[:]) + if err != nil { + return err + } + + op.Index, err = binarySerializer.Uint32(r, littleEndian) + return err +} + +// writeOutPoint encodes op to the bitcoin protocol encoding for an OutPoint +// to w. +func writeOutPoint(w io.Writer, pver uint32, version int32, op *OutPoint) error { + _, err := w.Write(op.Hash[:]) + if err != nil { + return err + } + + return binarySerializer.PutUint32(w, littleEndian, op.Index) +} + +// readScript reads a variable length byte array that represents a transaction +// script. It is encoded as a varInt containing the length of the array +// followed by the bytes themselves. An error is returned if the length is +// greater than the passed maxAllowed parameter which helps protect against +// memory exhaustion attacks and forced panics through malformed messages. The +// fieldName parameter is only used for the error message so it provides more +// context in the error. +func readScript(r io.Reader, pver uint32, maxAllowed uint32, fieldName string) ([]byte, error) { + count, err := ReadVarInt(r, pver) + if err != nil { + return nil, err + } + + // Prevent byte array larger than the max message size. It would + // be possible to cause memory exhaustion and panics without a sane + // upper bound on this count. + if count > uint64(maxAllowed) { + str := fmt.Sprintf("%s is larger than the max allowed size "+ + "[count %d, max %d]", fieldName, count, maxAllowed) + return nil, messageError("readScript", str) + } + + b := scriptPool.Borrow(count) + _, err = io.ReadFull(r, b) + if err != nil { + scriptPool.Return(b) + return nil, err + } + return b, nil +} + +// readTxIn reads the next sequence of bytes from r as a transaction input +// (TxIn). +func readTxIn(r io.Reader, pver uint32, version int32, ti *TxIn) error { + err := readOutPoint(r, pver, version, &ti.PreviousOutPoint) + if err != nil { + return err + } + + ti.SignatureScript, err = readScript(r, pver, MaxMessagePayload, + "transaction input signature script") + if err != nil { + return err + } + + return readElement(r, &ti.Sequence) +} + +// writeTxIn encodes ti to the bitcoin protocol encoding for a transaction +// input (TxIn) to w. +func writeTxIn(w io.Writer, pver uint32, version int32, ti *TxIn) error { + err := writeOutPoint(w, pver, version, &ti.PreviousOutPoint) + if err != nil { + return err + } + + err = WriteVarBytes(w, pver, ti.SignatureScript) + if err != nil { + return err + } + + return binarySerializer.PutUint32(w, littleEndian, ti.Sequence) +} + +// readTxOut reads the next sequence of bytes from r as a transaction output +// (TxOut). +func readTxOut(r io.Reader, pver uint32, version int32, to *TxOut) error { + err := readElement(r, &to.Value) + if err != nil { + return err + } + + to.PkScript, err = readScript(r, pver, MaxMessagePayload, + "transaction output public key script") + return err +} + +// WriteTxOut encodes to into the bitcoin protocol encoding for a transaction +// output (TxOut) to w. +// +// NOTE: This function is exported in order to allow txscript to compute the +// new sighashes for witness transactions (BIP0143). +func WriteTxOut(w io.Writer, pver uint32, version int32, to *TxOut) error { + err := binarySerializer.PutUint64(w, littleEndian, uint64(to.Value)) + if err != nil { + return err + } + + return WriteVarBytes(w, pver, to.PkScript) +} + +// writeTxWitness encodes the bitcoin protocol encoding for a transaction +// input's witness into to w. +func writeTxWitness(w io.Writer, pver uint32, version int32, wit [][]byte) error { + err := WriteVarInt(w, pver, uint64(len(wit))) + if err != nil { + return err + } + for _, item := range wit { + err = WriteVarBytes(w, pver, item) + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgverack.go b/vendor/github.com/btcsuite/btcd/wire/msgverack.go new file mode 100644 index 0000000000..60342b5642 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgverack.go @@ -0,0 +1,46 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "io" +) + +// MsgVerAck defines a bitcoin verack message which is used for a peer to +// acknowledge a version message (MsgVersion) after it has used the information +// to negotiate parameters. It implements the Message interface. +// +// This message has no payload. +type MsgVerAck struct{} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgVerAck) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgVerAck) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgVerAck) Command() string { + return CmdVerAck +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgVerAck) MaxPayloadLength(pver uint32) uint32 { + return 0 +} + +// NewMsgVerAck returns a new bitcoin verack message that conforms to the +// Message interface. +func NewMsgVerAck() *MsgVerAck { + return &MsgVerAck{} +} diff --git a/vendor/github.com/btcsuite/btcd/wire/msgversion.go b/vendor/github.com/btcsuite/btcd/wire/msgversion.go new file mode 100644 index 0000000000..3077f12760 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/msgversion.go @@ -0,0 +1,269 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "bytes" + "fmt" + "io" + "strings" + "time" +) + +// MaxUserAgentLen is the maximum allowed length for the user agent field in a +// version message (MsgVersion). +const MaxUserAgentLen = 256 + +// DefaultUserAgent for wire in the stack +const DefaultUserAgent = "/btcwire:0.5.0/" + +// MsgVersion implements the Message interface and represents a bitcoin version +// message. It is used for a peer to advertise itself as soon as an outbound +// connection is made. The remote peer then uses this information along with +// its own to negotiate. The remote peer must then respond with a version +// message of its own containing the negotiated values followed by a verack +// message (MsgVerAck). This exchange must take place before any further +// communication is allowed to proceed. +type MsgVersion struct { + // Version of the protocol the node is using. + ProtocolVersion int32 + + // Bitfield which identifies the enabled services. + Services ServiceFlag + + // Time the message was generated. This is encoded as an int64 on the wire. + Timestamp time.Time + + // Address of the remote peer. + AddrYou NetAddress + + // Address of the local peer. + AddrMe NetAddress + + // Unique value associated with message that is used to detect self + // connections. + Nonce uint64 + + // The user agent that generated messsage. This is a encoded as a varString + // on the wire. This has a max length of MaxUserAgentLen. + UserAgent string + + // Last block seen by the generator of the version message. + LastBlock int32 + + // Don't announce transactions to peer. + DisableRelayTx bool +} + +// HasService returns whether the specified service is supported by the peer +// that generated the message. +func (msg *MsgVersion) HasService(service ServiceFlag) bool { + return msg.Services&service == service +} + +// AddService adds service as a supported service by the peer generating the +// message. +func (msg *MsgVersion) AddService(service ServiceFlag) { + msg.Services |= service +} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// The version message is special in that the protocol version hasn't been +// negotiated yet. As a result, the pver field is ignored and any fields which +// are added in new versions are optional. This also mean that r must be a +// *bytes.Buffer so the number of remaining bytes can be ascertained. +// +// This is part of the Message interface implementation. +func (msg *MsgVersion) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + buf, ok := r.(*bytes.Buffer) + if !ok { + return fmt.Errorf("MsgVersion.BtcDecode reader is not a " + + "*bytes.Buffer") + } + + err := readElements(buf, &msg.ProtocolVersion, &msg.Services, + (*int64Time)(&msg.Timestamp)) + if err != nil { + return err + } + + err = readNetAddress(buf, pver, &msg.AddrYou, false) + if err != nil { + return err + } + + // Protocol versions >= 106 added a from address, nonce, and user agent + // field and they are only considered present if there are bytes + // remaining in the message. + if buf.Len() > 0 { + err = readNetAddress(buf, pver, &msg.AddrMe, false) + if err != nil { + return err + } + } + if buf.Len() > 0 { + err = readElement(buf, &msg.Nonce) + if err != nil { + return err + } + } + if buf.Len() > 0 { + userAgent, err := ReadVarString(buf, pver) + if err != nil { + return err + } + err = validateUserAgent(userAgent) + if err != nil { + return err + } + msg.UserAgent = userAgent + } + + // Protocol versions >= 209 added a last known block field. It is only + // considered present if there are bytes remaining in the message. + if buf.Len() > 0 { + err = readElement(buf, &msg.LastBlock) + if err != nil { + return err + } + } + + // There was no relay transactions field before BIP0037Version, but + // the default behavior prior to the addition of the field was to always + // relay transactions. + if buf.Len() > 0 { + // It's safe to ignore the error here since the buffer has at + // least one byte and that byte will result in a boolean value + // regardless of its value. Also, the wire encoding for the + // field is true when transactions should be relayed, so reverse + // it for the DisableRelayTx field. + var relayTx bool + readElement(r, &relayTx) + msg.DisableRelayTx = !relayTx + } + + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgVersion) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + err := validateUserAgent(msg.UserAgent) + if err != nil { + return err + } + + err = writeElements(w, msg.ProtocolVersion, msg.Services, + msg.Timestamp.Unix()) + if err != nil { + return err + } + + err = writeNetAddress(w, pver, &msg.AddrYou, false) + if err != nil { + return err + } + + err = writeNetAddress(w, pver, &msg.AddrMe, false) + if err != nil { + return err + } + + err = writeElement(w, msg.Nonce) + if err != nil { + return err + } + + err = WriteVarString(w, pver, msg.UserAgent) + if err != nil { + return err + } + + err = writeElement(w, msg.LastBlock) + if err != nil { + return err + } + + // There was no relay transactions field before BIP0037Version. Also, + // the wire encoding for the field is true when transactions should be + // relayed, so reverse it from the DisableRelayTx field. + if pver >= BIP0037Version { + err = writeElement(w, !msg.DisableRelayTx) + if err != nil { + return err + } + } + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgVersion) Command() string { + return CmdVersion +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgVersion) MaxPayloadLength(pver uint32) uint32 { + // XXX: <= 106 different + + // Protocol version 4 bytes + services 8 bytes + timestamp 8 bytes + + // remote and local net addresses + nonce 8 bytes + length of user + // agent (varInt) + max allowed useragent length + last block 4 bytes + + // relay transactions flag 1 byte. + return 33 + (maxNetAddressPayload(pver) * 2) + MaxVarIntPayload + + MaxUserAgentLen +} + +// NewMsgVersion returns a new bitcoin version message that conforms to the +// Message interface using the passed parameters and defaults for the remaining +// fields. +func NewMsgVersion(me *NetAddress, you *NetAddress, nonce uint64, + lastBlock int32) *MsgVersion { + + // Limit the timestamp to one second precision since the protocol + // doesn't support better. + return &MsgVersion{ + ProtocolVersion: int32(ProtocolVersion), + Services: 0, + Timestamp: time.Unix(time.Now().Unix(), 0), + AddrYou: *you, + AddrMe: *me, + Nonce: nonce, + UserAgent: DefaultUserAgent, + LastBlock: lastBlock, + DisableRelayTx: false, + } +} + +// validateUserAgent checks userAgent length against MaxUserAgentLen +func validateUserAgent(userAgent string) error { + if len(userAgent) > MaxUserAgentLen { + str := fmt.Sprintf("user agent too long [len %v, max %v]", + len(userAgent), MaxUserAgentLen) + return messageError("MsgVersion", str) + } + return nil +} + +// AddUserAgent adds a user agent to the user agent string for the version +// message. The version string is not defined to any strict format, although +// it is recommended to use the form "major.minor.revision" e.g. "2.6.41". +func (msg *MsgVersion) AddUserAgent(name string, version string, + comments ...string) error { + + newUserAgent := fmt.Sprintf("%s:%s", name, version) + if len(comments) != 0 { + newUserAgent = fmt.Sprintf("%s(%s)", newUserAgent, + strings.Join(comments, "; ")) + } + newUserAgent = fmt.Sprintf("%s%s/", msg.UserAgent, newUserAgent) + err := validateUserAgent(newUserAgent) + if err != nil { + return err + } + msg.UserAgent = newUserAgent + return nil +} diff --git a/vendor/github.com/btcsuite/btcd/wire/netaddress.go b/vendor/github.com/btcsuite/btcd/wire/netaddress.go new file mode 100644 index 0000000000..5a2610bccc --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/netaddress.go @@ -0,0 +1,149 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "encoding/binary" + "io" + "net" + "time" +) + +// maxNetAddressPayload returns the max payload size for a bitcoin NetAddress +// based on the protocol version. +func maxNetAddressPayload(pver uint32) uint32 { + // Services 8 bytes + ip 16 bytes + port 2 bytes. + plen := uint32(26) + + // NetAddressTimeVersion added a timestamp field. + if pver >= NetAddressTimeVersion { + // Timestamp 4 bytes. + plen += 4 + } + + return plen +} + +// NetAddress defines information about a peer on the network including the time +// it was last seen, the services it supports, its IP address, and port. +type NetAddress struct { + // Last time the address was seen. This is, unfortunately, encoded as a + // uint32 on the wire and therefore is limited to 2106. This field is + // not present in the bitcoin version message (MsgVersion) nor was it + // added until protocol version >= NetAddressTimeVersion. + Timestamp time.Time + + // Bitfield which identifies the services supported by the address. + Services ServiceFlag + + // IP address of the peer. + IP net.IP + + // Port the peer is using. This is encoded in big endian on the wire + // which differs from most everything else. + Port uint16 +} + +// HasService returns whether the specified service is supported by the address. +func (na *NetAddress) HasService(service ServiceFlag) bool { + return na.Services&service == service +} + +// AddService adds service as a supported service by the peer generating the +// message. +func (na *NetAddress) AddService(service ServiceFlag) { + na.Services |= service +} + +// NewNetAddressIPPort returns a new NetAddress using the provided IP, port, and +// supported services with defaults for the remaining fields. +func NewNetAddressIPPort(ip net.IP, port uint16, services ServiceFlag) *NetAddress { + return NewNetAddressTimestamp(time.Now(), services, ip, port) +} + +// NewNetAddressTimestamp returns a new NetAddress using the provided +// timestamp, IP, port, and supported services. The timestamp is rounded to +// single second precision. +func NewNetAddressTimestamp( + timestamp time.Time, services ServiceFlag, ip net.IP, port uint16) *NetAddress { + // Limit the timestamp to one second precision since the protocol + // doesn't support better. + na := NetAddress{ + Timestamp: time.Unix(timestamp.Unix(), 0), + Services: services, + IP: ip, + Port: port, + } + return &na +} + +// NewNetAddress returns a new NetAddress using the provided TCP address and +// supported services with defaults for the remaining fields. +func NewNetAddress(addr *net.TCPAddr, services ServiceFlag) *NetAddress { + return NewNetAddressIPPort(addr.IP, uint16(addr.Port), services) +} + +// readNetAddress reads an encoded NetAddress from r depending on the protocol +// version and whether or not the timestamp is included per ts. Some messages +// like version do not include the timestamp. +func readNetAddress(r io.Reader, pver uint32, na *NetAddress, ts bool) error { + var ip [16]byte + + // NOTE: The bitcoin protocol uses a uint32 for the timestamp so it will + // stop working somewhere around 2106. Also timestamp wasn't added until + // protocol version >= NetAddressTimeVersion + if ts && pver >= NetAddressTimeVersion { + err := readElement(r, (*uint32Time)(&na.Timestamp)) + if err != nil { + return err + } + } + + err := readElements(r, &na.Services, &ip) + if err != nil { + return err + } + // Sigh. Bitcoin protocol mixes little and big endian. + port, err := binarySerializer.Uint16(r, bigEndian) + if err != nil { + return err + } + + *na = NetAddress{ + Timestamp: na.Timestamp, + Services: na.Services, + IP: net.IP(ip[:]), + Port: port, + } + return nil +} + +// writeNetAddress serializes a NetAddress to w depending on the protocol +// version and whether or not the timestamp is included per ts. Some messages +// like version do not include the timestamp. +func writeNetAddress(w io.Writer, pver uint32, na *NetAddress, ts bool) error { + // NOTE: The bitcoin protocol uses a uint32 for the timestamp so it will + // stop working somewhere around 2106. Also timestamp wasn't added until + // until protocol version >= NetAddressTimeVersion. + if ts && pver >= NetAddressTimeVersion { + err := writeElement(w, uint32(na.Timestamp.Unix())) + if err != nil { + return err + } + } + + // Ensure to always write 16 bytes even if the ip is nil. + var ip [16]byte + if na.IP != nil { + copy(ip[:], na.IP.To16()) + } + err := writeElements(w, na.Services, ip) + if err != nil { + return err + } + + // Sigh. Bitcoin protocol mixes little and big endian. + return binary.Write(w, bigEndian, na.Port) +} diff --git a/vendor/github.com/btcsuite/btcd/wire/protocol.go b/vendor/github.com/btcsuite/btcd/wire/protocol.go new file mode 100644 index 0000000000..8cc9838a55 --- /dev/null +++ b/vendor/github.com/btcsuite/btcd/wire/protocol.go @@ -0,0 +1,178 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package wire + +import ( + "fmt" + "strconv" + "strings" +) + +// XXX pedro: we will probably need to bump this. +const ( + // ProtocolVersion is the latest protocol version this package supports. + ProtocolVersion uint32 = 70013 + + // MultipleAddressVersion is the protocol version which added multiple + // addresses per message (pver >= MultipleAddressVersion). + MultipleAddressVersion uint32 = 209 + + // NetAddressTimeVersion is the protocol version which added the + // timestamp field (pver >= NetAddressTimeVersion). + NetAddressTimeVersion uint32 = 31402 + + // BIP0031Version is the protocol version AFTER which a pong message + // and nonce field in ping were added (pver > BIP0031Version). + BIP0031Version uint32 = 60000 + + // BIP0035Version is the protocol version which added the mempool + // message (pver >= BIP0035Version). + BIP0035Version uint32 = 60002 + + // BIP0037Version is the protocol version which added new connection + // bloom filtering related messages and extended the version message + // with a relay flag (pver >= BIP0037Version). + BIP0037Version uint32 = 70001 + + // RejectVersion is the protocol version which added a new reject + // message. + RejectVersion uint32 = 70002 + + // BIP0111Version is the protocol version which added the SFNodeBloom + // service flag. + BIP0111Version uint32 = 70011 + + // SendHeadersVersion is the protocol version which added a new + // sendheaders message. + SendHeadersVersion uint32 = 70012 + + // FeeFilterVersion is the protocol version which added a new + // feefilter message. + FeeFilterVersion uint32 = 70013 +) + +// ServiceFlag identifies services supported by a bitcoin peer. +type ServiceFlag uint64 + +const ( + // SFNodeNetwork is a flag used to indicate a peer is a full node. + SFNodeNetwork ServiceFlag = 1 << iota + + // SFNodeGetUTXO is a flag used to indicate a peer supports the + // getutxos and utxos commands (BIP0064). + SFNodeGetUTXO + + // SFNodeBloom is a flag used to indicate a peer supports bloom + // filtering. + SFNodeBloom + + // SFNodeWitness is a flag used to indicate a peer supports blocks + // and transactions including witness data (BIP0144). + SFNodeWitness + + // SFNodeXthin is a flag used to indicate a peer supports xthin blocks. + SFNodeXthin + + // SFNodeBit5 is a flag used to indicate a peer supports a service + // defined by bit 5. + SFNodeBit5 + + // SFNodeCF is a flag used to indicate a peer supports committed + // filters (CFs). + SFNodeCF + + // SFNode2X is a flag used to indicate a peer is running the Segwit2X + // software. + SFNode2X +) + +// Map of service flags back to their constant names for pretty printing. +var sfStrings = map[ServiceFlag]string{ + SFNodeNetwork: "SFNodeNetwork", + SFNodeGetUTXO: "SFNodeGetUTXO", + SFNodeBloom: "SFNodeBloom", + SFNodeWitness: "SFNodeWitness", + SFNodeXthin: "SFNodeXthin", + SFNodeBit5: "SFNodeBit5", + SFNodeCF: "SFNodeCF", + SFNode2X: "SFNode2X", +} + +// orderedSFStrings is an ordered list of service flags from highest to +// lowest. +var orderedSFStrings = []ServiceFlag{ + SFNodeNetwork, + SFNodeGetUTXO, + SFNodeBloom, + SFNodeWitness, + SFNodeXthin, + SFNodeBit5, + SFNodeCF, + SFNode2X, +} + +// String returns the ServiceFlag in human-readable form. +func (f ServiceFlag) String() string { + // No flags are set. + if f == 0 { + return "0x0" + } + + // Add individual bit flags. + s := "" + for _, flag := range orderedSFStrings { + if f&flag == flag { + s += sfStrings[flag] + "|" + f -= flag + } + } + + // Add any remaining flags which aren't accounted for as hex. + s = strings.TrimRight(s, "|") + if f != 0 { + s += "|0x" + strconv.FormatUint(uint64(f), 16) + } + s = strings.TrimLeft(s, "|") + return s +} + +// BitcoinNet represents which bitcoin network a message belongs to. +type BitcoinNet uint32 + +// Constants used to indicate the message bitcoin network. They can also be +// used to seek to the next message when a stream's state is unknown, but +// this package does not provide that functionality since it's generally a +// better idea to simply disconnect clients that are misbehaving over TCP. +const ( + // MainNet represents the main bitcoin network. + MainNet BitcoinNet = 0xd9b4bef9 + + // TestNet represents the regression test network. + TestNet BitcoinNet = 0xdab5bffa + + // TestNet3 represents the test network (version 3). + TestNet3 BitcoinNet = 0x0709110b + + // SimNet represents the simulation test network. + SimNet BitcoinNet = 0x12141c16 +) + +// bnStrings is a map of bitcoin networks back to their constant names for +// pretty printing. +var bnStrings = map[BitcoinNet]string{ + MainNet: "MainNet", + TestNet: "TestNet", + TestNet3: "TestNet3", + SimNet: "SimNet", +} + +// String returns the BitcoinNet in human-readable form. +func (n BitcoinNet) String() string { + if s, ok := bnStrings[n]; ok { + return s + } + + return fmt.Sprintf("Unknown BitcoinNet (%d)", uint32(n)) +} diff --git a/vendor/github.com/cenkalti/backoff/v3/README.md b/vendor/github.com/cenkalti/backoff/v3/README.md index 55ebc98fc2..3673df487f 100644 --- a/vendor/github.com/cenkalti/backoff/v3/README.md +++ b/vendor/github.com/cenkalti/backoff/v3/README.md @@ -9,7 +9,10 @@ The retries exponentially increase and stop increasing when a certain threshold ## Usage -See https://godoc.org/github.com/cenkalti/backoff#pkg-examples +Import path is `github.com/cenkalti/backoff/v3`. Please note the version part at the end. + +godoc.org does not support modules yet, +so you can use https://godoc.org/gopkg.in/cenkalti/backoff.v3 to view the documentation. ## Contributing diff --git a/vendor/github.com/cenkalti/backoff/v3/context.go b/vendor/github.com/cenkalti/backoff/v3/context.go index 7706faa2b6..fcff86c1b3 100644 --- a/vendor/github.com/cenkalti/backoff/v3/context.go +++ b/vendor/github.com/cenkalti/backoff/v3/context.go @@ -7,7 +7,7 @@ import ( // BackOffContext is a backoff policy that stops retrying after the context // is canceled. -type BackOffContext interface { +type BackOffContext interface { // nolint: golint BackOff Context() context.Context } @@ -20,7 +20,7 @@ type backOffContext struct { // WithContext returns a BackOffContext with context ctx // // ctx must not be nil -func WithContext(b BackOff, ctx context.Context) BackOffContext { +func WithContext(b BackOff, ctx context.Context) BackOffContext { // nolint: golint if ctx == nil { panic("nil context") } @@ -38,11 +38,14 @@ func WithContext(b BackOff, ctx context.Context) BackOffContext { } } -func ensureContext(b BackOff) BackOffContext { +func getContext(b BackOff) context.Context { if cb, ok := b.(BackOffContext); ok { - return cb + return cb.Context() } - return WithContext(b, context.Background()) + if tb, ok := b.(*backOffTries); ok { + return getContext(tb.delegate) + } + return context.Background() } func (b *backOffContext) Context() context.Context { @@ -56,7 +59,7 @@ func (b *backOffContext) NextBackOff() time.Duration { default: } next := b.BackOff.NextBackOff() - if deadline, ok := b.ctx.Deadline(); ok && deadline.Sub(time.Now()) < next { + if deadline, ok := b.ctx.Deadline(); ok && deadline.Sub(time.Now()) < next { // nolint: gosimple return Stop } return next diff --git a/vendor/github.com/cenkalti/backoff/v3/exponential.go b/vendor/github.com/cenkalti/backoff/v3/exponential.go index a031a65979..cb11cc1d21 100644 --- a/vendor/github.com/cenkalti/backoff/v3/exponential.go +++ b/vendor/github.com/cenkalti/backoff/v3/exponential.go @@ -103,13 +103,14 @@ func (t systemClock) Now() time.Time { var SystemClock = systemClock{} // Reset the interval back to the initial retry interval and restarts the timer. +// Reset must be called before using b. func (b *ExponentialBackOff) Reset() { b.currentInterval = b.InitialInterval b.startTime = b.Clock.Now() } // NextBackOff calculates the next backoff interval using the formula: -// Randomized interval = RetryInterval +/- (RandomizationFactor * RetryInterval) +// Randomized interval = RetryInterval * (1 ± RandomizationFactor) func (b *ExponentialBackOff) NextBackOff() time.Duration { // Make sure we have not gone over the maximum elapsed time. if b.MaxElapsedTime != 0 && b.GetElapsedTime() > b.MaxElapsedTime { diff --git a/vendor/github.com/cenkalti/backoff/v3/go.mod b/vendor/github.com/cenkalti/backoff/v3/go.mod deleted file mode 100644 index 479e62adaf..0000000000 --- a/vendor/github.com/cenkalti/backoff/v3/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/cenkalti/backoff/v3 - -go 1.12 diff --git a/vendor/github.com/cenkalti/backoff/v3/retry.go b/vendor/github.com/cenkalti/backoff/v3/retry.go index e936a506f8..6c776ccf8e 100644 --- a/vendor/github.com/cenkalti/backoff/v3/retry.go +++ b/vendor/github.com/cenkalti/backoff/v3/retry.go @@ -21,16 +21,31 @@ type Notify func(error, time.Duration) // // Retry sleeps the goroutine for the duration returned by BackOff after a // failed operation returns. -func Retry(o Operation, b BackOff) error { return RetryNotify(o, b, nil) } +func Retry(o Operation, b BackOff) error { + return RetryNotify(o, b, nil) +} // RetryNotify calls notify function with the error and wait duration // for each failed attempt before sleep. func RetryNotify(operation Operation, b BackOff, notify Notify) error { + return RetryNotifyWithTimer(operation, b, notify, nil) +} + +// RetryNotifyWithTimer calls notify function with the error and wait duration using the given Timer +// for each failed attempt before sleep. +// A default timer that uses system timer is used when nil is passed. +func RetryNotifyWithTimer(operation Operation, b BackOff, notify Notify, t Timer) error { var err error var next time.Duration - var t *time.Timer + if t == nil { + t = &defaultTimer{} + } - cb := ensureContext(b) + defer func() { + t.Stop() + }() + + ctx := getContext(b) b.Reset() for { @@ -42,7 +57,7 @@ func RetryNotify(operation Operation, b BackOff, notify Notify) error { return permanent.Err } - if next = cb.NextBackOff(); next == Stop { + if next = b.NextBackOff(); next == Stop { return err } @@ -50,17 +65,12 @@ func RetryNotify(operation Operation, b BackOff, notify Notify) error { notify(err, next) } - if t == nil { - t = time.NewTimer(next) - defer t.Stop() - } else { - t.Reset(next) - } + t.Start(next) select { - case <-cb.Context().Done(): - return err - case <-t.C: + case <-ctx.Done(): + return ctx.Err() + case <-t.C(): } } } @@ -74,6 +84,10 @@ func (e *PermanentError) Error() string { return e.Err.Error() } +func (e *PermanentError) Unwrap() error { + return e.Err +} + // Permanent wraps the given err in a *PermanentError. func Permanent(err error) *PermanentError { return &PermanentError{ diff --git a/vendor/github.com/cenkalti/backoff/v3/ticker.go b/vendor/github.com/cenkalti/backoff/v3/ticker.go index e41084b0ef..ed699e0e30 100644 --- a/vendor/github.com/cenkalti/backoff/v3/ticker.go +++ b/vendor/github.com/cenkalti/backoff/v3/ticker.go @@ -1,6 +1,7 @@ package backoff import ( + "context" "sync" "time" ) @@ -12,7 +13,9 @@ import ( type Ticker struct { C <-chan time.Time c chan time.Time - b BackOffContext + b BackOff + ctx context.Context + timer Timer stop chan struct{} stopOnce sync.Once } @@ -24,12 +27,20 @@ type Ticker struct { // provided backoff policy (notably calling NextBackOff or Reset) // while the ticker is running. func NewTicker(b BackOff) *Ticker { + return NewTickerWithTimer(b, &defaultTimer{}) +} + +// NewTickerWithTimer returns a new Ticker with a custom timer. +// A default timer that uses system timer is used when nil is passed. +func NewTickerWithTimer(b BackOff, timer Timer) *Ticker { c := make(chan time.Time) t := &Ticker{ - C: c, - c: c, - b: ensureContext(b), - stop: make(chan struct{}), + C: c, + c: c, + b: b, + ctx: getContext(b), + timer: timer, + stop: make(chan struct{}), } t.b.Reset() go t.run() @@ -59,7 +70,7 @@ func (t *Ticker) run() { case <-t.stop: t.c = nil // Prevent future ticks from being sent to the channel. return - case <-t.b.Context().Done(): + case <-t.ctx.Done(): return } } @@ -78,5 +89,6 @@ func (t *Ticker) send(tick time.Time) <-chan time.Time { return nil } - return time.After(next) + t.timer.Start(next) + return t.timer.C() } diff --git a/vendor/github.com/cenkalti/backoff/v3/timer.go b/vendor/github.com/cenkalti/backoff/v3/timer.go new file mode 100644 index 0000000000..8120d0213c --- /dev/null +++ b/vendor/github.com/cenkalti/backoff/v3/timer.go @@ -0,0 +1,35 @@ +package backoff + +import "time" + +type Timer interface { + Start(duration time.Duration) + Stop() + C() <-chan time.Time +} + +// defaultTimer implements Timer interface using time.Timer +type defaultTimer struct { + timer *time.Timer +} + +// C returns the timers channel which receives the current time when the timer fires. +func (t *defaultTimer) C() <-chan time.Time { + return t.timer.C +} + +// Start starts the timer to fire after the given duration +func (t *defaultTimer) Start(duration time.Duration) { + if t.timer == nil { + t.timer = time.NewTimer(duration) + } else { + t.timer.Reset(duration) + } +} + +// Stop is called when the timer is not used anymore and resources may be freed. +func (t *defaultTimer) Stop() { + if t.timer != nil { + t.timer.Stop() + } +} diff --git a/vendor/github.com/cespare/xxhash/v2/go.mod b/vendor/github.com/cespare/xxhash/v2/go.mod deleted file mode 100644 index 49f67608bf..0000000000 --- a/vendor/github.com/cespare/xxhash/v2/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/cespare/xxhash/v2 - -go 1.11 diff --git a/vendor/github.com/cespare/xxhash/v2/go.sum b/vendor/github.com/cespare/xxhash/v2/go.sum deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/vendor/github.com/containerd/cgroups/README.md b/vendor/github.com/containerd/cgroups/README.md index fc2c7a9be4..eccb9d9845 100644 --- a/vendor/github.com/containerd/cgroups/README.md +++ b/vendor/github.com/containerd/cgroups/README.md @@ -26,7 +26,7 @@ uses the v1 implementation of cgroups. ```go shares := uint64(100) control, err := cgroups.New(cgroups.V1, cgroups.StaticPath("/test"), &specs.LinuxResources{ - CPU: &specs.CPU{ + CPU: &specs.LinuxCPU{ Shares: &shares, }, }) diff --git a/vendor/github.com/containerd/cgroups/Vagrantfile b/vendor/github.com/containerd/cgroups/Vagrantfile index 4596ad8a7d..9a4aac8cb3 100644 --- a/vendor/github.com/containerd/cgroups/Vagrantfile +++ b/vendor/github.com/containerd/cgroups/Vagrantfile @@ -3,19 +3,19 @@ Vagrant.configure("2") do |config| # Fedora box is used for testing cgroup v2 support - config.vm.box = "fedora/32-cloud-base" + config.vm.box = "fedora/35-cloud-base" config.vm.provider :virtualbox do |v| - v.memory = 2048 + v.memory = 4096 v.cpus = 2 end config.vm.provider :libvirt do |v| - v.memory = 2048 + v.memory = 4096 v.cpus = 2 end config.vm.provision "shell", inline: <<-SHELL set -eux -o pipefail # configuration - GO_VERSION="1.15" + GO_VERSION="1.17.7" # install gcc and Golang dnf -y install gcc diff --git a/vendor/github.com/containerd/cgroups/go.mod b/vendor/github.com/containerd/cgroups/go.mod deleted file mode 100644 index b3df917d52..0000000000 --- a/vendor/github.com/containerd/cgroups/go.mod +++ /dev/null @@ -1,17 +0,0 @@ -module github.com/containerd/cgroups - -go 1.16 - -require ( - github.com/cilium/ebpf v0.4.0 - github.com/coreos/go-systemd/v22 v22.3.2 - github.com/cpuguy83/go-md2man/v2 v2.0.0 // indirect - github.com/docker/go-units v0.4.0 - github.com/godbus/dbus/v5 v5.0.4 - github.com/gogo/protobuf v1.3.2 - github.com/opencontainers/runtime-spec v1.0.2 - github.com/sirupsen/logrus v1.8.1 - github.com/stretchr/testify v1.6.1 - github.com/urfave/cli v1.22.2 - golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c -) diff --git a/vendor/github.com/containerd/cgroups/go.sum b/vendor/github.com/containerd/cgroups/go.sum deleted file mode 100644 index 20ed896adc..0000000000 --- a/vendor/github.com/containerd/cgroups/go.sum +++ /dev/null @@ -1,80 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/cilium/ebpf v0.4.0 h1:QlHdikaxALkqWasW8hAC1mfR0jdmvbfaBdBPFmRSglA= -github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs= -github.com/coreos/go-systemd/v22 v22.3.2 h1:D9/bQk5vlXQFZ6Kwuu6zaiXJ9oTPe68++AzAJc1DzSI= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0 h1:EoUDS0afbrsXAZ9YQ9jdu/mZ2sXgT1/2yyNng4PGlyM= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/godbus/dbus/v5 v5.0.4 h1:9349emZab16e7zQvpmsbtjc18ykshndd8y2PG3sgJbA= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/containerd/cgroups/rdma.go b/vendor/github.com/containerd/cgroups/rdma.go index b6f0d416c7..3b59b10714 100644 --- a/vendor/github.com/containerd/cgroups/rdma.go +++ b/vendor/github.com/containerd/cgroups/rdma.go @@ -67,6 +67,7 @@ func (p *rdmaController) Create(path string, resources *specs.LinuxResources) er for device, limit := range resources.Rdma { if device != "" && (limit.HcaHandles != nil || limit.HcaObjects != nil) { + limit := limit return retryingWriteFile( filepath.Join(p.Path(path), "rdma.max"), []byte(createCmdString(device, &limit)), diff --git a/vendor/github.com/containerd/cgroups/utils.go b/vendor/github.com/containerd/cgroups/utils.go index 2297980d93..2171389756 100644 --- a/vendor/github.com/containerd/cgroups/utils.go +++ b/vendor/github.com/containerd/cgroups/utils.go @@ -261,21 +261,28 @@ func parseKV(raw string) (string, uint64, error) { // "pids": "/user.slice/user-1000.slice" // etc. // -// Note that for cgroup v2 unified hierarchy, there are no per-controller -// cgroup paths, so the resulting map will have a single element where the key -// is empty string ("") and the value is the cgroup path the is in. +// The resulting map does not have an element for cgroup v2 unified hierarchy. +// Use ParseCgroupFileUnified to get the unified path. func ParseCgroupFile(path string) (map[string]string, error) { + x, _, err := ParseCgroupFileUnified(path) + return x, err +} + +// ParseCgroupFileUnified returns legacy subsystem paths as the first value, +// and returns the unified path as the second value. +func ParseCgroupFileUnified(path string) (map[string]string, string, error) { f, err := os.Open(path) if err != nil { - return nil, err + return nil, "", err } defer f.Close() - return parseCgroupFromReader(f) + return parseCgroupFromReaderUnified(f) } -func parseCgroupFromReader(r io.Reader) (map[string]string, error) { +func parseCgroupFromReaderUnified(r io.Reader) (map[string]string, string, error) { var ( cgroups = make(map[string]string) + unified = "" s = bufio.NewScanner(r) ) for s.Scan() { @@ -284,18 +291,20 @@ func parseCgroupFromReader(r io.Reader) (map[string]string, error) { parts = strings.SplitN(text, ":", 3) ) if len(parts) < 3 { - return nil, fmt.Errorf("invalid cgroup entry: %q", text) + return nil, unified, fmt.Errorf("invalid cgroup entry: %q", text) } for _, subs := range strings.Split(parts[1], ",") { - if subs != "" { + if subs == "" { + unified = parts[2] + } else { cgroups[subs] = parts[2] } } } if err := s.Err(); err != nil { - return nil, err + return nil, unified, err } - return cgroups, nil + return cgroups, unified, nil } func getCgroupDestination(subsystem string) (string, error) { diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/LICENSE b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/LICENSE new file mode 100644 index 0000000000..d2d1dd933e --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/LICENSE @@ -0,0 +1,17 @@ +ISC License + +Copyright (c) 2013-2017 The btcsuite developers +Copyright (c) 2015-2020 The Decred developers +Copyright (c) 2017 The Lightning Network Developers + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/README.md b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/README.md new file mode 100644 index 0000000000..b84bcdb77d --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/README.md @@ -0,0 +1,72 @@ +secp256k1 +========= + +[![Build Status](https://github.com/decred/dcrd/workflows/Build%20and%20Test/badge.svg)](https://github.com/decred/dcrd/actions) +[![ISC License](https://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![Doc](https://img.shields.io/badge/doc-reference-blue.svg)](https://pkg.go.dev/github.com/decred/dcrd/dcrec/secp256k1/v4) + +Package secp256k1 implements optimized secp256k1 elliptic curve operations. + +This package provides an optimized pure Go implementation of elliptic curve +cryptography operations over the secp256k1 curve as well as data structures and +functions for working with public and private secp256k1 keys. See +https://www.secg.org/sec2-v2.pdf for details on the standard. + +In addition, sub packages are provided to produce, verify, parse, and serialize +ECDSA signatures and EC-Schnorr-DCRv0 (a custom Schnorr-based signature scheme +specific to Decred) signatures. See the README.md files in the relevant sub +packages for more details about those aspects. + +An overview of the features provided by this package are as follows: + +- Private key generation, serialization, and parsing +- Public key generation, serialization and parsing per ANSI X9.62-1998 + - Parses uncompressed, compressed, and hybrid public keys + - Serializes uncompressed and compressed public keys +- Specialized types for performing optimized and constant time field operations + - `FieldVal` type for working modulo the secp256k1 field prime + - `ModNScalar` type for working modulo the secp256k1 group order +- Elliptic curve operations in Jacobian projective coordinates + - Point addition + - Point doubling + - Scalar multiplication with an arbitrary point + - Scalar multiplication with the base point (group generator) +- Point decompression from a given x coordinate +- Nonce generation via RFC6979 with support for extra data and version + information that can be used to prevent nonce reuse between signing algorithms + +It also provides an implementation of the Go standard library `crypto/elliptic` +`Curve` interface via the `S256` function so that it may be used with other +packages in the standard library such as `crypto/tls`, `crypto/x509`, and +`crypto/ecdsa`. However, in the case of ECDSA, it is highly recommended to use +the `ecdsa` sub package of this package instead since it is optimized +specifically for secp256k1 and is significantly faster as a result. + +Although this package was primarily written for dcrd, it has intentionally been +designed so it can be used as a standalone package for any projects needing to +use optimized secp256k1 elliptic curve cryptography. + +Finally, a comprehensive suite of tests is provided to provide a high level of +quality assurance. + +## secp256k1 use in Decred + +At the time of this writing, the primary public key cryptography in widespread +use on the Decred network used to secure coins is based on elliptic curves +defined by the secp256k1 domain parameters. + +## Installation and Updating + +This package is part of the `github.com/decred/dcrd/dcrec/secp256k1/v4` module. +Use the standard go tooling for working with modules to incorporate it. + +## Examples + +* [Encryption](https://pkg.go.dev/github.com/decred/dcrd/dcrec/secp256k1/v4#example-package-EncryptDecryptMessage) + Demonstrates encrypting and decrypting a message using a shared key derived + through ECDHE. + +## License + +Package secp256k1 is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/compressedbytepoints.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/compressedbytepoints.go new file mode 100644 index 0000000000..ca4be1218b --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/compressedbytepoints.go @@ -0,0 +1,11 @@ +// Copyright (c) 2015 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +// Auto-generated file (see genprecomps.go) +// DO NOT EDIT + +var compressedBytePoints = "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" diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/curve.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/curve.go new file mode 100644 index 0000000000..e8620608fb --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/curve.go @@ -0,0 +1,943 @@ +// Copyright (c) 2015-2021 The Decred developers +// Copyright 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +import ( + "encoding/hex" + "math/big" +) + +// References: +// [SECG]: Recommended Elliptic Curve Domain Parameters +// https://www.secg.org/sec2-v2.pdf +// +// [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone) +// +// [BRID]: On Binary Representations of Integers with Digits -1, 0, 1 +// (Prodinger, Helmut) + +// All group operations are performed using Jacobian coordinates. For a given +// (x, y) position on the curve, the Jacobian coordinates are (x1, y1, z1) +// where x = x1/z1^2 and y = y1/z1^3. + +// hexToFieldVal converts the passed hex string into a FieldVal and will panic +// if there is an error. This is only provided for the hard-coded constants so +// errors in the source code can be detected. It will only (and must only) be +// called with hard-coded values. +func hexToFieldVal(s string) *FieldVal { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + var f FieldVal + if overflow := f.SetByteSlice(b); overflow { + panic("hex in source file overflows mod P: " + s) + } + return &f +} + +var ( + // Next 6 constants are from Hal Finney's bitcointalk.org post: + // https://bitcointalk.org/index.php?topic=3238.msg45565#msg45565 + // May he rest in peace. + // + // They have also been independently derived from the code in the + // EndomorphismVectors function in genstatics.go. + endomorphismLambda = fromHex("5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72") + endomorphismBeta = hexToFieldVal("7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee") + endomorphismA1 = fromHex("3086d221a7d46bcde86c90e49284eb15") + endomorphismB1 = fromHex("-e4437ed6010e88286f547fa90abfe4c3") + endomorphismA2 = fromHex("114ca50f7a8e2f3f657c1108d9d44cfd8") + endomorphismB2 = fromHex("3086d221a7d46bcde86c90e49284eb15") + + // Alternatively, the following parameters are valid as well, however, they + // seem to be about 8% slower in practice. + // + // endomorphismLambda = fromHex("AC9C52B33FA3CF1F5AD9E3FD77ED9BA4A880B9FC8EC739C2E0CFC810B51283CE") + // endomorphismBeta = hexToFieldVal("851695D49A83F8EF919BB86153CBCB16630FB68AED0A766A3EC693D68E6AFA40") + // endomorphismA1 = fromHex("E4437ED6010E88286F547FA90ABFE4C3") + // endomorphismB1 = fromHex("-3086D221A7D46BCDE86C90E49284EB15") + // endomorphismA2 = fromHex("3086D221A7D46BCDE86C90E49284EB15") + // endomorphismB2 = fromHex("114CA50F7A8E2F3F657C1108D9D44CFD8") +) + +// JacobianPoint is an element of the group formed by the secp256k1 curve in +// Jacobian projective coordinates and thus represents a point on the curve. +type JacobianPoint struct { + // The X coordinate in Jacobian projective coordinates. The affine point is + // X/z^2. + X FieldVal + + // The Y coordinate in Jacobian projective coordinates. The affine point is + // Y/z^3. + Y FieldVal + + // The Z coordinate in Jacobian projective coordinates. + Z FieldVal +} + +// MakeJacobianPoint returns a Jacobian point with the provided X, Y, and Z +// coordinates. +func MakeJacobianPoint(x, y, z *FieldVal) JacobianPoint { + var p JacobianPoint + p.X.Set(x) + p.Y.Set(y) + p.Z.Set(z) + return p +} + +// Set sets the Jacobian point to the provided point. +func (p *JacobianPoint) Set(other *JacobianPoint) { + p.X.Set(&other.X) + p.Y.Set(&other.Y) + p.Z.Set(&other.Z) +} + +// ToAffine reduces the Z value of the existing point to 1 effectively +// making it an affine coordinate in constant time. The point will be +// normalized. +func (p *JacobianPoint) ToAffine() { + // Inversions are expensive and both point addition and point doubling + // are faster when working with points that have a z value of one. So, + // if the point needs to be converted to affine, go ahead and normalize + // the point itself at the same time as the calculation is the same. + var zInv, tempZ FieldVal + zInv.Set(&p.Z).Inverse() // zInv = Z^-1 + tempZ.SquareVal(&zInv) // tempZ = Z^-2 + p.X.Mul(&tempZ) // X = X/Z^2 (mag: 1) + p.Y.Mul(tempZ.Mul(&zInv)) // Y = Y/Z^3 (mag: 1) + p.Z.SetInt(1) // Z = 1 (mag: 1) + + // Normalize the x and y values. + p.X.Normalize() + p.Y.Normalize() +} + +// addZ1AndZ2EqualsOne adds two Jacobian points that are already known to have +// z values of 1 and stores the result in the provided result param. That is to +// say result = p1 + p2. It performs faster addition than the generic add +// routine since less arithmetic is needed due to the ability to avoid the z +// value multiplications. +// +// NOTE: The points must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func addZ1AndZ2EqualsOne(p1, p2, result *JacobianPoint) { + // To compute the point addition efficiently, this implementation splits + // the equation into intermediate elements which are used to minimize + // the number of field multiplications using the method shown at: + // https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-mmadd-2007-bl + // + // In particular it performs the calculations using the following: + // H = X2-X1, HH = H^2, I = 4*HH, J = H*I, r = 2*(Y2-Y1), V = X1*I + // X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*Y1*J, Z3 = 2*H + // + // This results in a cost of 4 field multiplications, 2 field squarings, + // 6 field additions, and 5 integer multiplications. + x1, y1 := &p1.X, &p1.Y + x2, y2 := &p2.X, &p2.Y + x3, y3, z3 := &result.X, &result.Y, &result.Z + + // When the x coordinates are the same for two points on the curve, the + // y coordinates either must be the same, in which case it is point + // doubling, or they are opposite and the result is the point at + // infinity per the group law for elliptic curve cryptography. + if x1.Equals(x2) { + if y1.Equals(y2) { + // Since x1 == x2 and y1 == y2, point doubling must be + // done, otherwise the addition would end up dividing + // by zero. + DoubleNonConst(p1, result) + return + } + + // Since x1 == x2 and y1 == -y2, the sum is the point at + // infinity per the group law. + x3.SetInt(0) + y3.SetInt(0) + z3.SetInt(0) + return + } + + // Calculate X3, Y3, and Z3 according to the intermediate elements + // breakdown above. + var h, i, j, r, v FieldVal + var negJ, neg2V, negX3 FieldVal + h.Set(x1).Negate(1).Add(x2) // H = X2-X1 (mag: 3) + i.SquareVal(&h).MulInt(4) // I = 4*H^2 (mag: 4) + j.Mul2(&h, &i) // J = H*I (mag: 1) + r.Set(y1).Negate(1).Add(y2).MulInt(2) // r = 2*(Y2-Y1) (mag: 6) + v.Mul2(x1, &i) // V = X1*I (mag: 1) + negJ.Set(&j).Negate(1) // negJ = -J (mag: 2) + neg2V.Set(&v).MulInt(2).Negate(2) // neg2V = -(2*V) (mag: 3) + x3.Set(&r).Square().Add(&negJ).Add(&neg2V) // X3 = r^2-J-2*V (mag: 6) + negX3.Set(x3).Negate(6) // negX3 = -X3 (mag: 7) + j.Mul(y1).MulInt(2).Negate(2) // J = -(2*Y1*J) (mag: 3) + y3.Set(&v).Add(&negX3).Mul(&r).Add(&j) // Y3 = r*(V-X3)-2*Y1*J (mag: 4) + z3.Set(&h).MulInt(2) // Z3 = 2*H (mag: 6) + + // Normalize the resulting field values to a magnitude of 1 as needed. + x3.Normalize() + y3.Normalize() + z3.Normalize() +} + +// addZ1EqualsZ2 adds two Jacobian points that are already known to have the +// same z value and stores the result in the provided result param. That is to +// say result = p1 + p2. It performs faster addition than the generic add +// routine since less arithmetic is needed due to the known equivalence. +// +// NOTE: The points must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func addZ1EqualsZ2(p1, p2, result *JacobianPoint) { + // To compute the point addition efficiently, this implementation splits + // the equation into intermediate elements which are used to minimize + // the number of field multiplications using a slightly modified version + // of the method shown at: + // https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-mmadd-2007-bl + // + // In particular it performs the calculations using the following: + // A = X2-X1, B = A^2, C=Y2-Y1, D = C^2, E = X1*B, F = X2*B + // X3 = D-E-F, Y3 = C*(E-X3)-Y1*(F-E), Z3 = Z1*A + // + // This results in a cost of 5 field multiplications, 2 field squarings, + // 9 field additions, and 0 integer multiplications. + x1, y1, z1 := &p1.X, &p1.Y, &p1.Z + x2, y2 := &p2.X, &p2.Y + x3, y3, z3 := &result.X, &result.Y, &result.Z + + // When the x coordinates are the same for two points on the curve, the + // y coordinates either must be the same, in which case it is point + // doubling, or they are opposite and the result is the point at + // infinity per the group law for elliptic curve cryptography. + if x1.Equals(x2) { + if y1.Equals(y2) { + // Since x1 == x2 and y1 == y2, point doubling must be + // done, otherwise the addition would end up dividing + // by zero. + DoubleNonConst(p1, result) + return + } + + // Since x1 == x2 and y1 == -y2, the sum is the point at + // infinity per the group law. + x3.SetInt(0) + y3.SetInt(0) + z3.SetInt(0) + return + } + + // Calculate X3, Y3, and Z3 according to the intermediate elements + // breakdown above. + var a, b, c, d, e, f FieldVal + var negX1, negY1, negE, negX3 FieldVal + negX1.Set(x1).Negate(1) // negX1 = -X1 (mag: 2) + negY1.Set(y1).Negate(1) // negY1 = -Y1 (mag: 2) + a.Set(&negX1).Add(x2) // A = X2-X1 (mag: 3) + b.SquareVal(&a) // B = A^2 (mag: 1) + c.Set(&negY1).Add(y2) // C = Y2-Y1 (mag: 3) + d.SquareVal(&c) // D = C^2 (mag: 1) + e.Mul2(x1, &b) // E = X1*B (mag: 1) + negE.Set(&e).Negate(1) // negE = -E (mag: 2) + f.Mul2(x2, &b) // F = X2*B (mag: 1) + x3.Add2(&e, &f).Negate(3).Add(&d) // X3 = D-E-F (mag: 5) + negX3.Set(x3).Negate(5).Normalize() // negX3 = -X3 (mag: 1) + y3.Set(y1).Mul(f.Add(&negE)).Negate(3) // Y3 = -(Y1*(F-E)) (mag: 4) + y3.Add(e.Add(&negX3).Mul(&c)) // Y3 = C*(E-X3)+Y3 (mag: 5) + z3.Mul2(z1, &a) // Z3 = Z1*A (mag: 1) + + // Normalize the resulting field values to a magnitude of 1 as needed. + x3.Normalize() + y3.Normalize() + z3.Normalize() +} + +// addZ2EqualsOne adds two Jacobian points when the second point is already +// known to have a z value of 1 (and the z value for the first point is not 1) +// and stores the result in the provided result param. That is to say result = +// p1 + p2. It performs faster addition than the generic add routine since +// less arithmetic is needed due to the ability to avoid multiplications by the +// second point's z value. +// +// NOTE: The points must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func addZ2EqualsOne(p1, p2, result *JacobianPoint) { + // To compute the point addition efficiently, this implementation splits + // the equation into intermediate elements which are used to minimize + // the number of field multiplications using the method shown at: + // https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-madd-2007-bl + // + // In particular it performs the calculations using the following: + // Z1Z1 = Z1^2, U2 = X2*Z1Z1, S2 = Y2*Z1*Z1Z1, H = U2-X1, HH = H^2, + // I = 4*HH, J = H*I, r = 2*(S2-Y1), V = X1*I + // X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*Y1*J, Z3 = (Z1+H)^2-Z1Z1-HH + // + // This results in a cost of 7 field multiplications, 4 field squarings, + // 9 field additions, and 4 integer multiplications. + x1, y1, z1 := &p1.X, &p1.Y, &p1.Z + x2, y2 := &p2.X, &p2.Y + x3, y3, z3 := &result.X, &result.Y, &result.Z + + // When the x coordinates are the same for two points on the curve, the + // y coordinates either must be the same, in which case it is point + // doubling, or they are opposite and the result is the point at + // infinity per the group law for elliptic curve cryptography. Since + // any number of Jacobian coordinates can represent the same affine + // point, the x and y values need to be converted to like terms. Due to + // the assumption made for this function that the second point has a z + // value of 1 (z2=1), the first point is already "converted". + var z1z1, u2, s2 FieldVal + z1z1.SquareVal(z1) // Z1Z1 = Z1^2 (mag: 1) + u2.Set(x2).Mul(&z1z1).Normalize() // U2 = X2*Z1Z1 (mag: 1) + s2.Set(y2).Mul(&z1z1).Mul(z1).Normalize() // S2 = Y2*Z1*Z1Z1 (mag: 1) + if x1.Equals(&u2) { + if y1.Equals(&s2) { + // Since x1 == x2 and y1 == y2, point doubling must be + // done, otherwise the addition would end up dividing + // by zero. + DoubleNonConst(p1, result) + return + } + + // Since x1 == x2 and y1 == -y2, the sum is the point at + // infinity per the group law. + x3.SetInt(0) + y3.SetInt(0) + z3.SetInt(0) + return + } + + // Calculate X3, Y3, and Z3 according to the intermediate elements + // breakdown above. + var h, hh, i, j, r, rr, v FieldVal + var negX1, negY1, negX3 FieldVal + negX1.Set(x1).Negate(1) // negX1 = -X1 (mag: 2) + h.Add2(&u2, &negX1) // H = U2-X1 (mag: 3) + hh.SquareVal(&h) // HH = H^2 (mag: 1) + i.Set(&hh).MulInt(4) // I = 4 * HH (mag: 4) + j.Mul2(&h, &i) // J = H*I (mag: 1) + negY1.Set(y1).Negate(1) // negY1 = -Y1 (mag: 2) + r.Set(&s2).Add(&negY1).MulInt(2) // r = 2*(S2-Y1) (mag: 6) + rr.SquareVal(&r) // rr = r^2 (mag: 1) + v.Mul2(x1, &i) // V = X1*I (mag: 1) + x3.Set(&v).MulInt(2).Add(&j).Negate(3) // X3 = -(J+2*V) (mag: 4) + x3.Add(&rr) // X3 = r^2+X3 (mag: 5) + negX3.Set(x3).Negate(5) // negX3 = -X3 (mag: 6) + y3.Set(y1).Mul(&j).MulInt(2).Negate(2) // Y3 = -(2*Y1*J) (mag: 3) + y3.Add(v.Add(&negX3).Mul(&r)) // Y3 = r*(V-X3)+Y3 (mag: 4) + z3.Add2(z1, &h).Square() // Z3 = (Z1+H)^2 (mag: 1) + z3.Add(z1z1.Add(&hh).Negate(2)) // Z3 = Z3-(Z1Z1+HH) (mag: 4) + + // Normalize the resulting field values to a magnitude of 1 as needed. + x3.Normalize() + y3.Normalize() + z3.Normalize() +} + +// addGeneric adds two Jacobian points without any assumptions about the z +// values of the two points and stores the result in the provided result param. +// That is to say result = p1 + p2. It is the slowest of the add routines due +// to requiring the most arithmetic. +// +// NOTE: The points must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func addGeneric(p1, p2, result *JacobianPoint) { + // To compute the point addition efficiently, this implementation splits + // the equation into intermediate elements which are used to minimize + // the number of field multiplications using the method shown at: + // https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl + // + // In particular it performs the calculations using the following: + // Z1Z1 = Z1^2, Z2Z2 = Z2^2, U1 = X1*Z2Z2, U2 = X2*Z1Z1, S1 = Y1*Z2*Z2Z2 + // S2 = Y2*Z1*Z1Z1, H = U2-U1, I = (2*H)^2, J = H*I, r = 2*(S2-S1) + // V = U1*I + // X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*S1*J, Z3 = ((Z1+Z2)^2-Z1Z1-Z2Z2)*H + // + // This results in a cost of 11 field multiplications, 5 field squarings, + // 9 field additions, and 4 integer multiplications. + x1, y1, z1 := &p1.X, &p1.Y, &p1.Z + x2, y2, z2 := &p2.X, &p2.Y, &p2.Z + x3, y3, z3 := &result.X, &result.Y, &result.Z + + // When the x coordinates are the same for two points on the curve, the + // y coordinates either must be the same, in which case it is point + // doubling, or they are opposite and the result is the point at + // infinity. Since any number of Jacobian coordinates can represent the + // same affine point, the x and y values need to be converted to like + // terms. + var z1z1, z2z2, u1, u2, s1, s2 FieldVal + z1z1.SquareVal(z1) // Z1Z1 = Z1^2 (mag: 1) + z2z2.SquareVal(z2) // Z2Z2 = Z2^2 (mag: 1) + u1.Set(x1).Mul(&z2z2).Normalize() // U1 = X1*Z2Z2 (mag: 1) + u2.Set(x2).Mul(&z1z1).Normalize() // U2 = X2*Z1Z1 (mag: 1) + s1.Set(y1).Mul(&z2z2).Mul(z2).Normalize() // S1 = Y1*Z2*Z2Z2 (mag: 1) + s2.Set(y2).Mul(&z1z1).Mul(z1).Normalize() // S2 = Y2*Z1*Z1Z1 (mag: 1) + if u1.Equals(&u2) { + if s1.Equals(&s2) { + // Since x1 == x2 and y1 == y2, point doubling must be + // done, otherwise the addition would end up dividing + // by zero. + DoubleNonConst(p1, result) + return + } + + // Since x1 == x2 and y1 == -y2, the sum is the point at + // infinity per the group law. + x3.SetInt(0) + y3.SetInt(0) + z3.SetInt(0) + return + } + + // Calculate X3, Y3, and Z3 according to the intermediate elements + // breakdown above. + var h, i, j, r, rr, v FieldVal + var negU1, negS1, negX3 FieldVal + negU1.Set(&u1).Negate(1) // negU1 = -U1 (mag: 2) + h.Add2(&u2, &negU1) // H = U2-U1 (mag: 3) + i.Set(&h).MulInt(2).Square() // I = (2*H)^2 (mag: 2) + j.Mul2(&h, &i) // J = H*I (mag: 1) + negS1.Set(&s1).Negate(1) // negS1 = -S1 (mag: 2) + r.Set(&s2).Add(&negS1).MulInt(2) // r = 2*(S2-S1) (mag: 6) + rr.SquareVal(&r) // rr = r^2 (mag: 1) + v.Mul2(&u1, &i) // V = U1*I (mag: 1) + x3.Set(&v).MulInt(2).Add(&j).Negate(3) // X3 = -(J+2*V) (mag: 4) + x3.Add(&rr) // X3 = r^2+X3 (mag: 5) + negX3.Set(x3).Negate(5) // negX3 = -X3 (mag: 6) + y3.Mul2(&s1, &j).MulInt(2).Negate(2) // Y3 = -(2*S1*J) (mag: 3) + y3.Add(v.Add(&negX3).Mul(&r)) // Y3 = r*(V-X3)+Y3 (mag: 4) + z3.Add2(z1, z2).Square() // Z3 = (Z1+Z2)^2 (mag: 1) + z3.Add(z1z1.Add(&z2z2).Negate(2)) // Z3 = Z3-(Z1Z1+Z2Z2) (mag: 4) + z3.Mul(&h) // Z3 = Z3*H (mag: 1) + + // Normalize the resulting field values to a magnitude of 1 as needed. + x3.Normalize() + y3.Normalize() + z3.Normalize() +} + +// AddNonConst adds the passed Jacobian points together and stores the result in +// the provided result param in *non-constant* time. +// +// NOTE: The points must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func AddNonConst(p1, p2, result *JacobianPoint) { + // A point at infinity is the identity according to the group law for + // elliptic curve cryptography. Thus, ∞ + P = P and P + ∞ = P. + if (p1.X.IsZero() && p1.Y.IsZero()) || p1.Z.IsZero() { + result.Set(p2) + return + } + if (p2.X.IsZero() && p2.Y.IsZero()) || p2.Z.IsZero() { + result.Set(p1) + return + } + + // Faster point addition can be achieved when certain assumptions are + // met. For example, when both points have the same z value, arithmetic + // on the z values can be avoided. This section thus checks for these + // conditions and calls an appropriate add function which is accelerated + // by using those assumptions. + isZ1One := p1.Z.IsOne() + isZ2One := p2.Z.IsOne() + switch { + case isZ1One && isZ2One: + addZ1AndZ2EqualsOne(p1, p2, result) + return + case p1.Z.Equals(&p2.Z): + addZ1EqualsZ2(p1, p2, result) + return + case isZ2One: + addZ2EqualsOne(p1, p2, result) + return + } + + // None of the above assumptions are true, so fall back to generic + // point addition. + addGeneric(p1, p2, result) +} + +// doubleZ1EqualsOne performs point doubling on the passed Jacobian point when +// the point is already known to have a z value of 1 and stores the result in +// the provided result param. That is to say result = 2*p. It performs faster +// point doubling than the generic routine since less arithmetic is needed due +// to the ability to avoid multiplication by the z value. +// +// NOTE: The resulting point will be normalized. +func doubleZ1EqualsOne(p, result *JacobianPoint) { + // This function uses the assumptions that z1 is 1, thus the point + // doubling formulas reduce to: + // + // X3 = (3*X1^2)^2 - 8*X1*Y1^2 + // Y3 = (3*X1^2)*(4*X1*Y1^2 - X3) - 8*Y1^4 + // Z3 = 2*Y1 + // + // To compute the above efficiently, this implementation splits the + // equation into intermediate elements which are used to minimize the + // number of field multiplications in favor of field squarings which + // are roughly 35% faster than field multiplications with the current + // implementation at the time this was written. + // + // This uses a slightly modified version of the method shown at: + // https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-mdbl-2007-bl + // + // In particular it performs the calculations using the following: + // A = X1^2, B = Y1^2, C = B^2, D = 2*((X1+B)^2-A-C) + // E = 3*A, F = E^2, X3 = F-2*D, Y3 = E*(D-X3)-8*C + // Z3 = 2*Y1 + // + // This results in a cost of 1 field multiplication, 5 field squarings, + // 6 field additions, and 5 integer multiplications. + x1, y1 := &p.X, &p.Y + x3, y3, z3 := &result.X, &result.Y, &result.Z + var a, b, c, d, e, f FieldVal + z3.Set(y1).MulInt(2) // Z3 = 2*Y1 (mag: 2) + a.SquareVal(x1) // A = X1^2 (mag: 1) + b.SquareVal(y1) // B = Y1^2 (mag: 1) + c.SquareVal(&b) // C = B^2 (mag: 1) + b.Add(x1).Square() // B = (X1+B)^2 (mag: 1) + d.Set(&a).Add(&c).Negate(2) // D = -(A+C) (mag: 3) + d.Add(&b).MulInt(2) // D = 2*(B+D)(mag: 8) + e.Set(&a).MulInt(3) // E = 3*A (mag: 3) + f.SquareVal(&e) // F = E^2 (mag: 1) + x3.Set(&d).MulInt(2).Negate(16) // X3 = -(2*D) (mag: 17) + x3.Add(&f) // X3 = F+X3 (mag: 18) + f.Set(x3).Negate(18).Add(&d).Normalize() // F = D-X3 (mag: 1) + y3.Set(&c).MulInt(8).Negate(8) // Y3 = -(8*C) (mag: 9) + y3.Add(f.Mul(&e)) // Y3 = E*F+Y3 (mag: 10) + + // Normalize the field values back to a magnitude of 1. + x3.Normalize() + y3.Normalize() + z3.Normalize() +} + +// doubleGeneric performs point doubling on the passed Jacobian point without +// any assumptions about the z value and stores the result in the provided +// result param. That is to say result = 2*p. It is the slowest of the point +// doubling routines due to requiring the most arithmetic. +// +// NOTE: The resulting point will be normalized. +func doubleGeneric(p, result *JacobianPoint) { + // Point doubling formula for Jacobian coordinates for the secp256k1 + // curve: + // + // X3 = (3*X1^2)^2 - 8*X1*Y1^2 + // Y3 = (3*X1^2)*(4*X1*Y1^2 - X3) - 8*Y1^4 + // Z3 = 2*Y1*Z1 + // + // To compute the above efficiently, this implementation splits the + // equation into intermediate elements which are used to minimize the + // number of field multiplications in favor of field squarings which + // are roughly 35% faster than field multiplications with the current + // implementation at the time this was written. + // + // This uses a slightly modified version of the method shown at: + // https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l + // + // In particular it performs the calculations using the following: + // A = X1^2, B = Y1^2, C = B^2, D = 2*((X1+B)^2-A-C) + // E = 3*A, F = E^2, X3 = F-2*D, Y3 = E*(D-X3)-8*C + // Z3 = 2*Y1*Z1 + // + // This results in a cost of 1 field multiplication, 5 field squarings, + // 6 field additions, and 5 integer multiplications. + x1, y1, z1 := &p.X, &p.Y, &p.Z + x3, y3, z3 := &result.X, &result.Y, &result.Z + var a, b, c, d, e, f FieldVal + z3.Mul2(y1, z1).MulInt(2) // Z3 = 2*Y1*Z1 (mag: 2) + a.SquareVal(x1) // A = X1^2 (mag: 1) + b.SquareVal(y1) // B = Y1^2 (mag: 1) + c.SquareVal(&b) // C = B^2 (mag: 1) + b.Add(x1).Square() // B = (X1+B)^2 (mag: 1) + d.Set(&a).Add(&c).Negate(2) // D = -(A+C) (mag: 3) + d.Add(&b).MulInt(2) // D = 2*(B+D)(mag: 8) + e.Set(&a).MulInt(3) // E = 3*A (mag: 3) + f.SquareVal(&e) // F = E^2 (mag: 1) + x3.Set(&d).MulInt(2).Negate(16) // X3 = -(2*D) (mag: 17) + x3.Add(&f) // X3 = F+X3 (mag: 18) + f.Set(x3).Negate(18).Add(&d).Normalize() // F = D-X3 (mag: 1) + y3.Set(&c).MulInt(8).Negate(8) // Y3 = -(8*C) (mag: 9) + y3.Add(f.Mul(&e)) // Y3 = E*F+Y3 (mag: 10) + + // Normalize the field values back to a magnitude of 1. + x3.Normalize() + y3.Normalize() + z3.Normalize() +} + +// DoubleNonConst doubles the passed Jacobian point and stores the result in the +// provided result parameter in *non-constant* time. +// +// NOTE: The point must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func DoubleNonConst(p, result *JacobianPoint) { + // Doubling a point at infinity is still infinity. + if p.Y.IsZero() || p.Z.IsZero() { + result.X.SetInt(0) + result.Y.SetInt(0) + result.Z.SetInt(0) + return + } + + // Slightly faster point doubling can be achieved when the z value is 1 + // by avoiding the multiplication on the z value. This section calls + // a point doubling function which is accelerated by using that + // assumption when possible. + if p.Z.IsOne() { + doubleZ1EqualsOne(p, result) + return + } + + // Fall back to generic point doubling which works with arbitrary z + // values. + doubleGeneric(p, result) +} + +// splitK returns a balanced length-two representation of k and their signs. +// This is algorithm 3.74 from [GECC]. +// +// One thing of note about this algorithm is that no matter what c1 and c2 are, +// the final equation of k = k1 + k2 * lambda (mod n) will hold. This is +// provable mathematically due to how a1/b1/a2/b2 are computed. +// +// c1 and c2 are chosen to minimize the max(k1,k2). +func splitK(k []byte) ([]byte, []byte, int, int) { + // All math here is done with big.Int, which is slow. + // At some point, it might be useful to write something similar to + // FieldVal but for N instead of P as the prime field if this ends up + // being a bottleneck. + bigIntK := new(big.Int) + c1, c2 := new(big.Int), new(big.Int) + tmp1, tmp2 := new(big.Int), new(big.Int) + k1, k2 := new(big.Int), new(big.Int) + + bigIntK.SetBytes(k) + // c1 = round(b2 * k / n) from step 4. + // Rounding isn't really necessary and costs too much, hence skipped + c1.Mul(endomorphismB2, bigIntK) + c1.Div(c1, curveParams.N) + // c2 = round(b1 * k / n) from step 4 (sign reversed to optimize one step) + // Rounding isn't really necessary and costs too much, hence skipped + c2.Mul(endomorphismB1, bigIntK) + c2.Div(c2, curveParams.N) + // k1 = k - c1 * a1 - c2 * a2 from step 5 (note c2's sign is reversed) + tmp1.Mul(c1, endomorphismA1) + tmp2.Mul(c2, endomorphismA2) + k1.Sub(bigIntK, tmp1) + k1.Add(k1, tmp2) + // k2 = - c1 * b1 - c2 * b2 from step 5 (note c2's sign is reversed) + tmp1.Mul(c1, endomorphismB1) + tmp2.Mul(c2, endomorphismB2) + k2.Sub(tmp2, tmp1) + + // Note Bytes() throws out the sign of k1 and k2. This matters + // since k1 and/or k2 can be negative. Hence, we pass that + // back separately. + return k1.Bytes(), k2.Bytes(), k1.Sign(), k2.Sign() +} + +// nafScalar represents a positive integer up to a maximum value of 2^256 - 1 +// encoded in non-adjacent form. +// +// NAF is a signed-digit representation where each digit can be +1, 0, or -1. +// +// In order to efficiently encode that information, this type uses two arrays, a +// "positive" array where set bits represent the +1 signed digits and a +// "negative" array where set bits represent the -1 signed digits. 0 is +// represented by neither array having a bit set in that position. +// +// The Pos and Neg methods return the aforementioned positive and negative +// arrays, respectively. +type nafScalar struct { + // pos houses the positive portion of the representation. An additional + // byte is required for the positive portion because the NAF encoding can be + // up to 1 bit longer than the normal binary encoding of the value. + // + // neg houses the negative portion of the representation. Even though the + // additional byte is not required for the negative portion, since it can + // never exceed the length of the normal binary encoding of the value, + // keeping the same length for positive and negative portions simplifies + // working with the representation and allows extra conditional branches to + // be avoided. + // + // start and end specify the starting and ending index to use within the pos + // and neg arrays, respectively. This allows fixed size arrays to be used + // versus needing to dynamically allocate space on the heap. + // + // NOTE: The fields are defined in the order that they are to minimize the + // padding on 32-bit and 64-bit platforms. + pos [33]byte + start, end uint8 + neg [33]byte +} + +// Pos returns the bytes of the encoded value with bits set in the positions +// that represent a signed digit of +1. +func (s *nafScalar) Pos() []byte { + return s.pos[s.start:s.end] +} + +// Neg returns the bytes of the encoded value with bits set in the positions +// that represent a signed digit of -1. +func (s *nafScalar) Neg() []byte { + return s.neg[s.start:s.end] +} + +// naf takes a positive integer up to a maximum value of 2^256 - 1 and returns +// its non-adjacent form (NAF), which is a unique signed-digit representation +// such that no two consecutive digits are nonzero. See the documentation for +// the returned type for details on how the representation is encoded +// efficiently and how to interpret it +// +// NAF is useful in that it has the fewest nonzero digits of any signed digit +// representation, only 1/3rd of its digits are nonzero on average, and at least +// half of the digits will be 0. +// +// The aforementioned properties are particularly beneficial for optimizing +// elliptic curve point multiplication because they effectively minimize the +// number of required point additions in exchange for needing to perform a mix +// of fewer point additions and subtractions and possibly one additional point +// doubling. This is an excellent tradeoff because subtraction of points has +// the same computational complexity as addition of points and point doubling is +// faster than both. +func naf(k []byte) nafScalar { + // Strip leading zero bytes. + for len(k) > 0 && k[0] == 0x00 { + k = k[1:] + } + + // The non-adjacent form (NAF) of a positive integer k is an expression + // k = ∑_(i=0, l-1) k_i * 2^i where k_i ∈ {0,±1}, k_(l-1) != 0, and no two + // consecutive digits k_i are nonzero. + // + // The traditional method of computing the NAF of a positive integer is + // given by algorithm 3.30 in [GECC]. It consists of repeatedly dividing k + // by 2 and choosing the remainder so that the quotient (k−r)/2 is even + // which ensures the next NAF digit is 0. This requires log_2(k) steps. + // + // However, in [BRID], Prodinger notes that a closed form expression for the + // NAF representation is the bitwise difference 3k/2 - k/2. This is more + // efficient as it can be computed in O(1) versus the O(log(n)) of the + // traditional approach. + // + // The following code makes use of that formula to compute the NAF more + // efficiently. + // + // To understand the logic here, observe that the only way the NAF has a + // nonzero digit at a given bit is when either 3k/2 or k/2 has a bit set in + // that position, but not both. In other words, the result of a bitwise + // xor. This can be seen simply by considering that when the bits are the + // same, the subtraction is either 0-0 or 1-1, both of which are 0. + // + // Further, observe that the "+1" digits in the result are contributed by + // 3k/2 while the "-1" digits are from k/2. So, they can be determined by + // taking the bitwise and of each respective value with the result of the + // xor which identifies which bits are nonzero. + // + // Using that information, this loops backwards from the least significant + // byte to the most significant byte while performing the aforementioned + // calculations by propagating the potential carry and high order bit from + // the next word during the right shift. + kLen := len(k) + var result nafScalar + var carry uint8 + for byteNum := kLen - 1; byteNum >= 0; byteNum-- { + // Calculate k/2. Notice the carry from the previous word is added and + // the low order bit from the next word is shifted in accordingly. + kc := uint16(k[byteNum]) + uint16(carry) + var nextWord uint8 + if byteNum > 0 { + nextWord = k[byteNum-1] + } + halfK := kc>>1 | uint16(nextWord<<7) + + // Calculate 3k/2 and determine the non-zero digits in the result. + threeHalfK := kc + halfK + nonZeroResultDigits := threeHalfK ^ halfK + + // Determine the signed digits {0, ±1}. + result.pos[byteNum+1] = uint8(threeHalfK & nonZeroResultDigits) + result.neg[byteNum+1] = uint8(halfK & nonZeroResultDigits) + + // Propagate the potential carry from the 3k/2 calculation. + carry = uint8(threeHalfK >> 8) + } + result.pos[0] = carry + + // Set the starting and ending positions within the fixed size arrays to + // identify the bytes that are actually used. This is important since the + // encoding is big endian and thus trailing zero bytes changes its value. + result.start = 1 - carry + result.end = uint8(kLen + 1) + return result +} + +// ScalarMultNonConst multiplies k*P where k is a big endian integer modulo the +// curve order and P is a point in Jacobian projective coordinates and stores +// the result in the provided Jacobian point. +// +// NOTE: The point must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func ScalarMultNonConst(k *ModNScalar, point, result *JacobianPoint) { + // Decompose K into k1 and k2 in order to halve the number of EC ops. + // See Algorithm 3.74 in [GECC]. + kBytes := k.Bytes() + k1, k2, signK1, signK2 := splitK(kBytes[:]) + zeroArray32(&kBytes) + + // The main equation here to remember is: + // k * P = k1 * P + k2 * ϕ(P) + // + // P1 below is P in the equation, P2 below is ϕ(P) in the equation + p1, p1Neg := new(JacobianPoint), new(JacobianPoint) + p1.Set(point) + p1Neg.Set(p1) + p1Neg.Y.Negate(1).Normalize() + + // NOTE: ϕ(x,y) = (βx,y). The Jacobian z coordinates are the same, so this + // math goes through. + p2, p2Neg := new(JacobianPoint), new(JacobianPoint) + p2.Set(p1) + p2.X.Mul(endomorphismBeta).Normalize() + p2Neg.Set(p2) + p2Neg.Y.Negate(1).Normalize() + + // Flip the positive and negative values of the points as needed + // depending on the signs of k1 and k2. As mentioned in the equation + // above, each of k1 and k2 are multiplied by the respective point. + // Since -k * P is the same thing as k * -P, and the group law for + // elliptic curves states that P(x, y) = -P(x, -y), it's faster and + // simplifies the code to just make the point negative. + if signK1 == -1 { + p1, p1Neg = p1Neg, p1 + } + if signK2 == -1 { + p2, p2Neg = p2Neg, p2 + } + + // NAF versions of k1 and k2 should have a lot more zeros. + // + // The Pos version of the bytes contain the +1s and the Neg versions + // contain the -1s. + k1NAF, k2NAF := naf(k1), naf(k2) + k1PosNAF, k1NegNAF := k1NAF.Pos(), k1NAF.Neg() + k2PosNAF, k2NegNAF := k2NAF.Pos(), k2NAF.Neg() + k1Len, k2Len := len(k1PosNAF), len(k2PosNAF) + + m := k1Len + if m < k2Len { + m = k2Len + } + + // Point Q = ∞ (point at infinity). + var q JacobianPoint + + // Add left-to-right using the NAF optimization. See algorithm 3.77 + // from [GECC]. This should be faster overall since there will be a lot + // more instances of 0, hence reducing the number of Jacobian additions + // at the cost of 1 possible extra doubling. + for i := 0; i < m; i++ { + // Since k1 and k2 are potentially different lengths and the calculation + // is being done left to right, pad the front of the shorter one with + // 0s. + var k1BytePos, k1ByteNeg, k2BytePos, k2ByteNeg byte + if i >= m-k1Len { + k1BytePos, k1ByteNeg = k1PosNAF[i-(m-k1Len)], k1NegNAF[i-(m-k1Len)] + } + if i >= m-k2Len { + k2BytePos, k2ByteNeg = k2PosNAF[i-(m-k2Len)], k2NegNAF[i-(m-k2Len)] + } + for bit, mask := 7, uint8(1<<7); bit >= 0; bit, mask = bit-1, mask>>1 { + // Q = 2 * Q + DoubleNonConst(&q, &q) + + // Add or subtract the first point based on the signed digit of the + // NAF representation of k1 at this bit position. + // + // +1: Q = Q + p1 + // -1: Q = Q - p1 + // 0: Q = Q (no change) + if k1BytePos&mask == mask { + AddNonConst(&q, p1, &q) + } else if k1ByteNeg&mask == mask { + AddNonConst(&q, p1Neg, &q) + } + + // Add or subtract the second point based on the signed digit of the + // NAF representation of k2 at this bit position. + // + // +1: Q = Q + p2 + // -1: Q = Q - p2 + // 0: Q = Q (no change) + if k2BytePos&mask == mask { + AddNonConst(&q, p2, &q) + } else if k2ByteNeg&mask == mask { + AddNonConst(&q, p2Neg, &q) + } + } + } + + result.Set(&q) +} + +// ScalarBaseMultNonConst multiplies k*G where G is the base point of the group +// and k is a big endian integer. The result is stored in Jacobian coordinates +// (x1, y1, z1). +// +// NOTE: The resulting point will be normalized. +func ScalarBaseMultNonConst(k *ModNScalar, result *JacobianPoint) { + bytePoints := s256BytePoints() + + // Point Q = ∞ (point at infinity). + var q JacobianPoint + + // curve.bytePoints has all 256 byte points for each 8-bit window. The + // strategy is to add up the byte points. This is best understood by + // expressing k in base-256 which it already sort of is. Each "digit" in + // the 8-bit window can be looked up using bytePoints and added together. + var pt JacobianPoint + for i, byteVal := range k.Bytes() { + p := bytePoints[i][byteVal] + pt.X.Set(&p[0]) + pt.Y.Set(&p[1]) + pt.Z.SetInt(1) + AddNonConst(&q, &pt, &q) + } + + result.Set(&q) +} + +// isOnCurve returns whether or not the affine point (x,y) is on the curve. +func isOnCurve(fx, fy *FieldVal) bool { + // Elliptic curve equation for secp256k1 is: y^2 = x^3 + 7 + y2 := new(FieldVal).SquareVal(fy).Normalize() + result := new(FieldVal).SquareVal(fx).Mul(fx).AddInt(7).Normalize() + return y2.Equals(result) +} + +// DecompressY attempts to calculate the Y coordinate for the given X coordinate +// such that the result pair is a point on the secp256k1 curve. It adjusts Y +// based on the desired oddness and returns whether or not it was successful +// since not all X coordinates are valid. +// +// The magnitude of the provided X coordinate field val must be a max of 8 for a +// correct result. The resulting Y field val will have a max magnitude of 2. +func DecompressY(x *FieldVal, odd bool, resultY *FieldVal) bool { + // The curve equation for secp256k1 is: y^2 = x^3 + 7. Thus + // y = +-sqrt(x^3 + 7). + // + // The x coordinate must be invalid if there is no square root for the + // calculated rhs because it means the X coordinate is not for a point on + // the curve. + x3PlusB := new(FieldVal).SquareVal(x).Mul(x).AddInt(7) + if hasSqrt := resultY.SquareRootVal(x3PlusB); !hasSqrt { + return false + } + if resultY.Normalize().IsOdd() != odd { + resultY.Negate(1) + } + return true +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/doc.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/doc.go new file mode 100644 index 0000000000..91a670e51b --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/doc.go @@ -0,0 +1,58 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Copyright (c) 2015-2019 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package secp256k1 implements optimized secp256k1 elliptic curve operations. + +This package provides an optimized pure Go implementation of elliptic curve +cryptography operations over the secp256k1 curve as well as data structures and +functions for working with public and private secp256k1 keys. See +https://www.secg.org/sec2-v2.pdf for details on the standard. + +In addition, sub packages are provided to produce, verify, parse, and serialize +ECDSA signatures and EC-Schnorr-DCRv0 (a custom Schnorr-based signature scheme +specific to Decred) signatures. See the README.md files in the relevant sub +packages for more details about those aspects. + +An overview of the features provided by this package are as follows: + + - Private key generation, serialization, and parsing + - Public key generation, serialization and parsing per ANSI X9.62-1998 + - Parses uncompressed, compressed, and hybrid public keys + - Serializes uncompressed and compressed public keys + - Specialized types for performing optimized and constant time field operations + - FieldVal type for working modulo the secp256k1 field prime + - ModNScalar type for working modulo the secp256k1 group order + - Elliptic curve operations in Jacobian projective coordinates + - Point addition + - Point doubling + - Scalar multiplication with an arbitrary point + - Scalar multiplication with the base point (group generator) + - Point decompression from a given x coordinate + - Nonce generation via RFC6979 with support for extra data and version + information that can be used to prevent nonce reuse between signing + algorithms + +It also provides an implementation of the Go standard library crypto/elliptic +Curve interface via the S256 function so that it may be used with other packages +in the standard library such as crypto/tls, crypto/x509, and crypto/ecdsa. +However, in the case of ECDSA, it is highly recommended to use the ecdsa sub +package of this package instead since it is optimized specifically for secp256k1 +and is significantly faster as a result. + +Although this package was primarily written for dcrd, it has intentionally been +designed so it can be used as a standalone package for any projects needing to +use optimized secp256k1 elliptic curve cryptography. + +Finally, a comprehensive suite of tests is provided to provide a high level of +quality assurance. + +Use of secp256k1 in Decred + +At the time of this writing, the primary public key cryptography in widespread +use on the Decred network used to secure coins is based on elliptic curves +defined by the secp256k1 domain parameters. +*/ +package secp256k1 diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdh.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdh.go new file mode 100644 index 0000000000..ebbdfc5411 --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdh.go @@ -0,0 +1,21 @@ +// Copyright (c) 2015 The btcsuite developers +// Copyright (c) 2015-2016 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +// GenerateSharedSecret generates a shared secret based on a private key and a +// public key using Diffie-Hellman key exchange (ECDH) (RFC 5903). +// RFC5903 Section 9 states we should only return x. +// +// It is recommended to securily hash the result before using as a cryptographic +// key. +func GenerateSharedSecret(privkey *PrivateKey, pubkey *PublicKey) []byte { + var point, result JacobianPoint + pubkey.AsJacobian(&point) + ScalarMultNonConst(&privkey.Key, &point, &result) + result.ToAffine() + xBytes := result.X.Bytes() + return xBytes[:] +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/README.md b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/README.md new file mode 100644 index 0000000000..cc3c0aad8c --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/README.md @@ -0,0 +1,52 @@ +ecdsa +===== + +[![Build Status](https://github.com/decred/dcrd/workflows/Build%20and%20Test/badge.svg)](https://github.com/decred/dcrd/actions) +[![ISC License](https://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa) + +Package ecdsa provides secp256k1-optimized ECDSA signing and verification. + +This package provides data structures and functions necessary to produce and +verify deterministic canonical signatures in accordance with RFC6979 and +BIP0062, optimized specifically for the secp256k1 curve using the Elliptic Curve +Digital Signature Algorithm (ECDSA), as defined in FIPS 186-3. See +https://www.secg.org/sec2-v2.pdf for details on the secp256k1 standard. + +It also provides functions to parse and serialize the ECDSA signatures with the +more strict Distinguished Encoding Rules (DER) of ISO/IEC 8825-1 and some +additional restrictions specific to secp256k1. + +In addition, it supports a custom "compact" signature format which allows +efficient recovery of the public key from a given valid signature and message +hash combination. + +A comprehensive suite of tests is provided to ensure proper functionality. + +## ECDSA use in Decred + +At the time of this writing, ECDSA signatures are heavily used for proving coin +ownership in Decred as the vast majority of transactions consist of what is +effectively transferring ownership of coins to a public key associated with a +private key only known to the recipient of the coins along with an encumbrance +that requires an ECDSA signature that proves the new owner possesses the private +key without actually revealing it. + +## Installation and Updating + +This package is part of the `github.com/decred/dcrd/dcrec/secp256k1/v4` module. +Use the standard go tooling for working with modules to incorporate it. + +## Examples + +* [Sign Message](https://pkg.go.dev/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa#example-package-SignMessage) + Demonstrates signing a message with a secp256k1 private key that is first + parsed from raw bytes and serializing the generated signature. + +* [Verify Signature](https://pkg.go.dev/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa#example-Signature.Verify) + Demonstrates verifying a secp256k1 signature against a public key that is + first parsed from raw bytes. The signature is also parsed from raw bytes. + +## License + +Package ecdsa is licensed under the [copyfree](http://copyfree.org) ISC License. diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/doc.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/doc.go new file mode 100644 index 0000000000..14f38ef300 --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/doc.go @@ -0,0 +1,42 @@ +// Copyright (c) 2020 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package ecdsa provides secp256k1-optimized ECDSA signing and verification. + +This package provides data structures and functions necessary to produce and +verify deterministic canonical signatures in accordance with RFC6979 and +BIP0062, optimized specifically for the secp256k1 curve using the Elliptic Curve +Digital Signature Algorithm (ECDSA), as defined in FIPS 186-3. See +https://www.secg.org/sec2-v2.pdf for details on the secp256k1 standard. + +It also provides functions to parse and serialize the ECDSA signatures with the +more strict Distinguished Encoding Rules (DER) of ISO/IEC 8825-1 and some +additional restrictions specific to secp256k1. + +In addition, it supports a custom "compact" signature format which allows +efficient recovery of the public key from a given valid signature and message +hash combination. + +A comprehensive suite of tests is provided to ensure proper functionality. + +ECDSA use in Decred + +At the time of this writing, ECDSA signatures are heavily used for proving coin +ownership in Decred as the vast majority of transactions consist of what is +effectively transferring ownership of coins to a public key associated with a +private key only known to the recipient of the coins along with an encumbrance +that requires an ECDSA signature that proves the new owner possesses the private +key without actually revealing it. + +Errors + +Errors returned by this package are of type ecdsa.Error and fully support the +standard library errors.Is and errors.As functions. This allows the caller to +programmatically determine the specific error by examining the ErrorKind field +of the type asserted ecdsa.Error while still providing rich error messages with +contextual information. See ErrorKind in the package documentation for a full +list. +*/ +package ecdsa diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/error.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/error.go new file mode 100644 index 0000000000..45f82525bd --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/error.go @@ -0,0 +1,116 @@ +// Copyright (c) 2020 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package ecdsa + +// ErrorKind identifies a kind of error. It has full support for +// errors.Is and errors.As, so the caller can directly check against +// an error kind when determining the reason for an error. +type ErrorKind string + +// These constants are used to identify a specific Error. +const ( + // ErrSigTooShort is returned when a signature that should be a DER + // signature is too short. + ErrSigTooShort = ErrorKind("ErrSigTooShort") + + // ErrSigTooLong is returned when a signature that should be a DER signature + // is too long. + ErrSigTooLong = ErrorKind("ErrSigTooLong") + + // ErrSigInvalidSeqID is returned when a signature that should be a DER + // signature does not have the expected ASN.1 sequence ID. + ErrSigInvalidSeqID = ErrorKind("ErrSigInvalidSeqID") + + // ErrSigInvalidDataLen is returned when a signature that should be a DER + // signature does not specify the correct number of remaining bytes for the + // R and S portions. + ErrSigInvalidDataLen = ErrorKind("ErrSigInvalidDataLen") + + // ErrSigMissingSTypeID is returned when a signature that should be a DER + // signature does not provide the ASN.1 type ID for S. + ErrSigMissingSTypeID = ErrorKind("ErrSigMissingSTypeID") + + // ErrSigMissingSLen is returned when a signature that should be a DER + // signature does not provide the length of S. + ErrSigMissingSLen = ErrorKind("ErrSigMissingSLen") + + // ErrSigInvalidSLen is returned when a signature that should be a DER + // signature does not specify the correct number of bytes for the S portion. + ErrSigInvalidSLen = ErrorKind("ErrSigInvalidSLen") + + // ErrSigInvalidRIntID is returned when a signature that should be a DER + // signature does not have the expected ASN.1 integer ID for R. + ErrSigInvalidRIntID = ErrorKind("ErrSigInvalidRIntID") + + // ErrSigZeroRLen is returned when a signature that should be a DER + // signature has an R length of zero. + ErrSigZeroRLen = ErrorKind("ErrSigZeroRLen") + + // ErrSigNegativeR is returned when a signature that should be a DER + // signature has a negative value for R. + ErrSigNegativeR = ErrorKind("ErrSigNegativeR") + + // ErrSigTooMuchRPadding is returned when a signature that should be a DER + // signature has too much padding for R. + ErrSigTooMuchRPadding = ErrorKind("ErrSigTooMuchRPadding") + + // ErrSigRIsZero is returned when a signature has R set to the value zero. + ErrSigRIsZero = ErrorKind("ErrSigRIsZero") + + // ErrSigRTooBig is returned when a signature has R with a value that is + // greater than or equal to the group order. + ErrSigRTooBig = ErrorKind("ErrSigRTooBig") + + // ErrSigInvalidSIntID is returned when a signature that should be a DER + // signature does not have the expected ASN.1 integer ID for S. + ErrSigInvalidSIntID = ErrorKind("ErrSigInvalidSIntID") + + // ErrSigZeroSLen is returned when a signature that should be a DER + // signature has an S length of zero. + ErrSigZeroSLen = ErrorKind("ErrSigZeroSLen") + + // ErrSigNegativeS is returned when a signature that should be a DER + // signature has a negative value for S. + ErrSigNegativeS = ErrorKind("ErrSigNegativeS") + + // ErrSigTooMuchSPadding is returned when a signature that should be a DER + // signature has too much padding for S. + ErrSigTooMuchSPadding = ErrorKind("ErrSigTooMuchSPadding") + + // ErrSigSIsZero is returned when a signature has S set to the value zero. + ErrSigSIsZero = ErrorKind("ErrSigSIsZero") + + // ErrSigSTooBig is returned when a signature has S with a value that is + // greater than or equal to the group order. + ErrSigSTooBig = ErrorKind("ErrSigSTooBig") +) + +// Error satisfies the error interface and prints human-readable errors. +func (e ErrorKind) Error() string { + return string(e) +} + +// Error identifies an error related to an ECDSA signature. It has full +// support for errors.Is and errors.As, so the caller can ascertain the +// specific reason for the error by checking the underlying error. +type Error struct { + Err error + Description string +} + +// Error satisfies the error interface and prints human-readable errors. +func (e Error) Error() string { + return e.Description +} + +// Unwrap returns the underlying wrapped error. +func (e Error) Unwrap() error { + return e.Err +} + +// signatureError creates an Error given a set of arguments. +func signatureError(kind ErrorKind, desc string) Error { + return Error{Err: kind, Description: desc} +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/signature.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/signature.go new file mode 100644 index 0000000000..50f1721a92 --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa/signature.go @@ -0,0 +1,925 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Copyright (c) 2015-2020 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package ecdsa + +import ( + "errors" + "fmt" + + "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// References: +// [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone) +// +// [ISO/IEC 8825-1]: Information technology — ASN.1 encoding rules: +// Specification of Basic Encoding Rules (BER), Canonical Encoding Rules +// (CER) and Distinguished Encoding Rules (DER) +// +// [SEC1]: Elliptic Curve Cryptography (May 31, 2009, Version 2.0) +// https://www.secg.org/sec1-v2.pdf + +var ( + // zero32 is an array of 32 bytes used for the purposes of zeroing and is + // defined here to avoid extra allocations. + zero32 = [32]byte{} + + // orderAsFieldVal is the order of the secp256k1 curve group stored as a + // field value. It is provided here to avoid the need to create it multiple + // times. + orderAsFieldVal = func() *secp256k1.FieldVal { + var f secp256k1.FieldVal + f.SetByteSlice(secp256k1.Params().N.Bytes()) + return &f + }() +) + +const ( + // asn1SequenceID is the ASN.1 identifier for a sequence and is used when + // parsing and serializing signatures encoded with the Distinguished + // Encoding Rules (DER) format per section 10 of [ISO/IEC 8825-1]. + asn1SequenceID = 0x30 + + // asn1IntegerID is the ASN.1 identifier for an integer and is used when + // parsing and serializing signatures encoded with the Distinguished + // Encoding Rules (DER) format per section 10 of [ISO/IEC 8825-1]. + asn1IntegerID = 0x02 +) + +// Signature is a type representing an ECDSA signature. +type Signature struct { + r secp256k1.ModNScalar + s secp256k1.ModNScalar +} + +// NewSignature instantiates a new signature given some r and s values. +func NewSignature(r, s *secp256k1.ModNScalar) *Signature { + return &Signature{*r, *s} +} + +// Serialize returns the ECDSA signature in the Distinguished Encoding Rules +// (DER) format per section 10 of [ISO/IEC 8825-1] and such that the S component +// of the signature is less than or equal to the half order of the group. +// +// Note that the serialized bytes returned do not include the appended hash type +// used in Decred signature scripts. +func (sig *Signature) Serialize() []byte { + // The format of a DER encoded signature is as follows: + // + // 0x30 0x02 0x02 + // - 0x30 is the ASN.1 identifier for a sequence. + // - Total length is 1 byte and specifies length of all remaining data. + // - 0x02 is the ASN.1 identifier that specifies an integer follows. + // - Length of R is 1 byte and specifies how many bytes R occupies. + // - R is the arbitrary length big-endian encoded number which + // represents the R value of the signature. DER encoding dictates + // that the value must be encoded using the minimum possible number + // of bytes. This implies the first byte can only be null if the + // highest bit of the next byte is set in order to prevent it from + // being interpreted as a negative number. + // - 0x02 is once again the ASN.1 integer identifier. + // - Length of S is 1 byte and specifies how many bytes S occupies. + // - S is the arbitrary length big-endian encoded number which + // represents the S value of the signature. The encoding rules are + // identical as those for R. + + // Ensure the S component of the signature is less than or equal to the half + // order of the group because both S and its negation are valid signatures + // modulo the order, so this forces a consistent choice to reduce signature + // malleability. + sigS := new(secp256k1.ModNScalar).Set(&sig.s) + if sigS.IsOverHalfOrder() { + sigS.Negate() + } + + // Serialize the R and S components of the signature into their fixed + // 32-byte big-endian encoding. Note that the extra leading zero byte is + // used to ensure it is canonical per DER and will be stripped if needed + // below. + var rBuf, sBuf [33]byte + sig.r.PutBytesUnchecked(rBuf[1:33]) + sigS.PutBytesUnchecked(sBuf[1:33]) + + // Ensure the encoded bytes for the R and S components are canonical per DER + // by trimming all leading zero bytes so long as the next byte does not have + // the high bit set and it's not the final byte. + canonR, canonS := rBuf[:], sBuf[:] + for len(canonR) > 1 && canonR[0] == 0x00 && canonR[1]&0x80 == 0 { + canonR = canonR[1:] + } + for len(canonS) > 1 && canonS[0] == 0x00 && canonS[1]&0x80 == 0 { + canonS = canonS[1:] + } + + // Total length of returned signature is 1 byte for each magic and length + // (6 total), plus lengths of R and S. + totalLen := 6 + len(canonR) + len(canonS) + b := make([]byte, 0, totalLen) + b = append(b, asn1SequenceID) + b = append(b, byte(totalLen-2)) + b = append(b, asn1IntegerID) + b = append(b, byte(len(canonR))) + b = append(b, canonR...) + b = append(b, asn1IntegerID) + b = append(b, byte(len(canonS))) + b = append(b, canonS...) + return b +} + +// zeroArray32 zeroes the provided 32-byte buffer. +func zeroArray32(b *[32]byte) { + copy(b[:], zero32[:]) +} + +// fieldToModNScalar converts a field value to scalar modulo the group order and +// returns the scalar along with either 1 if it was reduced (aka it overflowed) +// or 0 otherwise. +// +// Note that a bool is not used here because it is not possible in Go to convert +// from a bool to numeric value in constant time and many constant-time +// operations require a numeric value. +func fieldToModNScalar(v *secp256k1.FieldVal) (secp256k1.ModNScalar, uint32) { + var buf [32]byte + v.PutBytes(&buf) + var s secp256k1.ModNScalar + overflow := s.SetBytes(&buf) + zeroArray32(&buf) + return s, overflow +} + +// modNScalarToField converts a scalar modulo the group order to a field value. +func modNScalarToField(v *secp256k1.ModNScalar) secp256k1.FieldVal { + var buf [32]byte + v.PutBytes(&buf) + var fv secp256k1.FieldVal + fv.SetBytes(&buf) + return fv +} + +// Verify returns whether or not the signature is valid for the provided hash +// and secp256k1 public key. +func (sig *Signature) Verify(hash []byte, pubKey *secp256k1.PublicKey) bool { + // The algorithm for verifying an ECDSA signature is given as algorithm 4.30 + // in [GECC]. + // + // The following is a paraphrased version for reference: + // + // G = curve generator + // N = curve order + // Q = public key + // m = message + // R, S = signature + // + // 1. Fail if R and S are not in [1, N-1] + // 2. e = H(m) + // 3. w = S^-1 mod N + // 4. u1 = e * w mod N + // u2 = R * w mod N + // 5. X = u1G + u2Q + // 6. Fail if X is the point at infinity + // 7. x = X.x mod N (X.x is the x coordinate of X) + // 8. Verified if x == R + // + // However, since all group operations are done internally in Jacobian + // projective space, the algorithm is modified slightly here in order to + // avoid an expensive inversion back into affine coordinates at step 7. + // Credits to Greg Maxwell for originally suggesting this optimization. + // + // Ordinarily, step 7 involves converting the x coordinate to affine by + // calculating x = x / z^2 (mod P) and then calculating the remainder as + // x = x (mod N). Then step 8 compares it to R. + // + // Note that since R is the x coordinate mod N from a random point that was + // originally mod P, and the cofactor of the secp256k1 curve is 1, there are + // only two possible x coordinates that the original random point could have + // been to produce R: x, where x < N, and x+N, where x+N < P. + // + // This implies that the signature is valid if either: + // a) R == X.x / X.z^2 (mod P) + // => R * X.z^2 == X.x (mod P) + // --or-- + // b) R + N < P && R + N == X.x / X.z^2 (mod P) + // => R + N < P && (R + N) * X.z^2 == X.x (mod P) + // + // Therefore the following modified algorithm is used: + // + // 1. Fail if R and S are not in [1, N-1] + // 2. e = H(m) + // 3. w = S^-1 mod N + // 4. u1 = e * w mod N + // u2 = R * w mod N + // 5. X = u1G + u2Q + // 6. Fail if X is the point at infinity + // 7. z = (X.z)^2 mod P (X.z is the z coordinate of X) + // 8. Verified if R * z == X.x (mod P) + // 9. Fail if R + N >= P + // 10. Verified if (R + N) * z == X.x (mod P) + + // Step 1. + // + // Fail if R and S are not in [1, N-1]. + if sig.r.IsZero() || sig.s.IsZero() { + return false + } + + // Step 2. + // + // e = H(m) + var e secp256k1.ModNScalar + e.SetByteSlice(hash) + + // Step 3. + // + // w = S^-1 mod N + w := new(secp256k1.ModNScalar).InverseValNonConst(&sig.s) + + // Step 4. + // + // u1 = e * w mod N + // u2 = R * w mod N + u1 := new(secp256k1.ModNScalar).Mul2(&e, w) + u2 := new(secp256k1.ModNScalar).Mul2(&sig.r, w) + + // Step 5. + // + // X = u1G + u2Q + var X, Q, u1G, u2Q secp256k1.JacobianPoint + pubKey.AsJacobian(&Q) + secp256k1.ScalarBaseMultNonConst(u1, &u1G) + secp256k1.ScalarMultNonConst(u2, &Q, &u2Q) + secp256k1.AddNonConst(&u1G, &u2Q, &X) + + // Step 6. + // + // Fail if X is the point at infinity + if (X.X.IsZero() && X.Y.IsZero()) || X.Z.IsZero() { + return false + } + + // Step 7. + // + // z = (X.z)^2 mod P (X.z is the z coordinate of X) + z := new(secp256k1.FieldVal).SquareVal(&X.Z) + + // Step 8. + // + // Verified if R * z == X.x (mod P) + sigRModP := modNScalarToField(&sig.r) + result := new(secp256k1.FieldVal).Mul2(&sigRModP, z).Normalize() + if result.Equals(&X.X) { + return true + } + + // Step 9. + // + // Fail if R + N >= P + if sigRModP.IsGtOrEqPrimeMinusOrder() { + return false + } + + // Step 10. + // + // Verified if (R + N) * z == X.x (mod P) + sigRModP.Add(orderAsFieldVal) + result.Mul2(&sigRModP, z).Normalize() + return result.Equals(&X.X) +} + +// IsEqual compares this Signature instance to the one passed, returning true if +// both Signatures are equivalent. A signature is equivalent to another, if +// they both have the same scalar value for R and S. +func (sig *Signature) IsEqual(otherSig *Signature) bool { + return sig.r.Equals(&otherSig.r) && sig.s.Equals(&otherSig.s) +} + +// ParseDERSignature parses a signature in the Distinguished Encoding Rules +// (DER) format per section 10 of [ISO/IEC 8825-1] and enforces the following +// additional restrictions specific to secp256k1: +// +// - The R and S values must be in the valid range for secp256k1 scalars: +// - Negative values are rejected +// - Zero is rejected +// - Values greater than or equal to the secp256k1 group order are rejected +func ParseDERSignature(sig []byte) (*Signature, error) { + // The format of a DER encoded signature for secp256k1 is as follows: + // + // 0x30 0x02 0x02 + // - 0x30 is the ASN.1 identifier for a sequence + // - Total length is 1 byte and specifies length of all remaining data + // - 0x02 is the ASN.1 identifier that specifies an integer follows + // - Length of R is 1 byte and specifies how many bytes R occupies + // - R is the arbitrary length big-endian encoded number which + // represents the R value of the signature. DER encoding dictates + // that the value must be encoded using the minimum possible number + // of bytes. This implies the first byte can only be null if the + // highest bit of the next byte is set in order to prevent it from + // being interpreted as a negative number. + // - 0x02 is once again the ASN.1 integer identifier + // - Length of S is 1 byte and specifies how many bytes S occupies + // - S is the arbitrary length big-endian encoded number which + // represents the S value of the signature. The encoding rules are + // identical as those for R. + // + // NOTE: The DER specification supports specifying lengths that can occupy + // more than 1 byte, however, since this is specific to secp256k1 + // signatures, all lengths will be a single byte. + const ( + // minSigLen is the minimum length of a DER encoded signature and is + // when both R and S are 1 byte each. + // + // 0x30 + <1-byte> + 0x02 + 0x01 + + 0x2 + 0x01 + + minSigLen = 8 + + // maxSigLen is the maximum length of a DER encoded signature and is + // when both R and S are 33 bytes each. It is 33 bytes because a + // 256-bit integer requires 32 bytes and an additional leading null byte + // might be required if the high bit is set in the value. + // + // 0x30 + <1-byte> + 0x02 + 0x21 + <33 bytes> + 0x2 + 0x21 + <33 bytes> + maxSigLen = 72 + + // sequenceOffset is the byte offset within the signature of the + // expected ASN.1 sequence identifier. + sequenceOffset = 0 + + // dataLenOffset is the byte offset within the signature of the expected + // total length of all remaining data in the signature. + dataLenOffset = 1 + + // rTypeOffset is the byte offset within the signature of the ASN.1 + // identifier for R and is expected to indicate an ASN.1 integer. + rTypeOffset = 2 + + // rLenOffset is the byte offset within the signature of the length of + // R. + rLenOffset = 3 + + // rOffset is the byte offset within the signature of R. + rOffset = 4 + ) + + // The signature must adhere to the minimum and maximum allowed length. + sigLen := len(sig) + if sigLen < minSigLen { + str := fmt.Sprintf("malformed signature: too short: %d < %d", sigLen, + minSigLen) + return nil, signatureError(ErrSigTooShort, str) + } + if sigLen > maxSigLen { + str := fmt.Sprintf("malformed signature: too long: %d > %d", sigLen, + maxSigLen) + return nil, signatureError(ErrSigTooLong, str) + } + + // The signature must start with the ASN.1 sequence identifier. + if sig[sequenceOffset] != asn1SequenceID { + str := fmt.Sprintf("malformed signature: format has wrong type: %#x", + sig[sequenceOffset]) + return nil, signatureError(ErrSigInvalidSeqID, str) + } + + // The signature must indicate the correct amount of data for all elements + // related to R and S. + if int(sig[dataLenOffset]) != sigLen-2 { + str := fmt.Sprintf("malformed signature: bad length: %d != %d", + sig[dataLenOffset], sigLen-2) + return nil, signatureError(ErrSigInvalidDataLen, str) + } + + // Calculate the offsets of the elements related to S and ensure S is inside + // the signature. + // + // rLen specifies the length of the big-endian encoded number which + // represents the R value of the signature. + // + // sTypeOffset is the offset of the ASN.1 identifier for S and, like its R + // counterpart, is expected to indicate an ASN.1 integer. + // + // sLenOffset and sOffset are the byte offsets within the signature of the + // length of S and S itself, respectively. + rLen := int(sig[rLenOffset]) + sTypeOffset := rOffset + rLen + sLenOffset := sTypeOffset + 1 + if sTypeOffset >= sigLen { + str := "malformed signature: S type indicator missing" + return nil, signatureError(ErrSigMissingSTypeID, str) + } + if sLenOffset >= sigLen { + str := "malformed signature: S length missing" + return nil, signatureError(ErrSigMissingSLen, str) + } + + // The lengths of R and S must match the overall length of the signature. + // + // sLen specifies the length of the big-endian encoded number which + // represents the S value of the signature. + sOffset := sLenOffset + 1 + sLen := int(sig[sLenOffset]) + if sOffset+sLen != sigLen { + str := "malformed signature: invalid S length" + return nil, signatureError(ErrSigInvalidSLen, str) + } + + // R elements must be ASN.1 integers. + if sig[rTypeOffset] != asn1IntegerID { + str := fmt.Sprintf("malformed signature: R integer marker: %#x != %#x", + sig[rTypeOffset], asn1IntegerID) + return nil, signatureError(ErrSigInvalidRIntID, str) + } + + // Zero-length integers are not allowed for R. + if rLen == 0 { + str := "malformed signature: R length is zero" + return nil, signatureError(ErrSigZeroRLen, str) + } + + // R must not be negative. + if sig[rOffset]&0x80 != 0 { + str := "malformed signature: R is negative" + return nil, signatureError(ErrSigNegativeR, str) + } + + // Null bytes at the start of R are not allowed, unless R would otherwise be + // interpreted as a negative number. + if rLen > 1 && sig[rOffset] == 0x00 && sig[rOffset+1]&0x80 == 0 { + str := "malformed signature: R value has too much padding" + return nil, signatureError(ErrSigTooMuchRPadding, str) + } + + // S elements must be ASN.1 integers. + if sig[sTypeOffset] != asn1IntegerID { + str := fmt.Sprintf("malformed signature: S integer marker: %#x != %#x", + sig[sTypeOffset], asn1IntegerID) + return nil, signatureError(ErrSigInvalidSIntID, str) + } + + // Zero-length integers are not allowed for S. + if sLen == 0 { + str := "malformed signature: S length is zero" + return nil, signatureError(ErrSigZeroSLen, str) + } + + // S must not be negative. + if sig[sOffset]&0x80 != 0 { + str := "malformed signature: S is negative" + return nil, signatureError(ErrSigNegativeS, str) + } + + // Null bytes at the start of S are not allowed, unless S would otherwise be + // interpreted as a negative number. + if sLen > 1 && sig[sOffset] == 0x00 && sig[sOffset+1]&0x80 == 0 { + str := "malformed signature: S value has too much padding" + return nil, signatureError(ErrSigTooMuchSPadding, str) + } + + // The signature is validly encoded per DER at this point, however, enforce + // additional restrictions to ensure R and S are in the range [1, N-1] since + // valid ECDSA signatures are required to be in that range per spec. + // + // Also note that while the overflow checks are required to make use of the + // specialized mod N scalar type, rejecting zero here is not strictly + // required because it is also checked when verifying the signature, but + // there really isn't a good reason not to fail early here on signatures + // that do not conform to the ECDSA spec. + + // Strip leading zeroes from R. + rBytes := sig[rOffset : rOffset+rLen] + for len(rBytes) > 0 && rBytes[0] == 0x00 { + rBytes = rBytes[1:] + } + + // R must be in the range [1, N-1]. Notice the check for the maximum number + // of bytes is required because SetByteSlice truncates as noted in its + // comment so it could otherwise fail to detect the overflow. + var r secp256k1.ModNScalar + if len(rBytes) > 32 { + str := "invalid signature: R is larger than 256 bits" + return nil, signatureError(ErrSigRTooBig, str) + } + if overflow := r.SetByteSlice(rBytes); overflow { + str := "invalid signature: R >= group order" + return nil, signatureError(ErrSigRTooBig, str) + } + if r.IsZero() { + str := "invalid signature: R is 0" + return nil, signatureError(ErrSigRIsZero, str) + } + + // Strip leading zeroes from S. + sBytes := sig[sOffset : sOffset+sLen] + for len(sBytes) > 0 && sBytes[0] == 0x00 { + sBytes = sBytes[1:] + } + + // S must be in the range [1, N-1]. Notice the check for the maximum number + // of bytes is required because SetByteSlice truncates as noted in its + // comment so it could otherwise fail to detect the overflow. + var s secp256k1.ModNScalar + if len(sBytes) > 32 { + str := "invalid signature: S is larger than 256 bits" + return nil, signatureError(ErrSigSTooBig, str) + } + if overflow := s.SetByteSlice(sBytes); overflow { + str := "invalid signature: S >= group order" + return nil, signatureError(ErrSigSTooBig, str) + } + if s.IsZero() { + str := "invalid signature: S is 0" + return nil, signatureError(ErrSigSIsZero, str) + } + + // Create and return the signature. + return NewSignature(&r, &s), nil +} + +// signRFC6979 generates a deterministic ECDSA signature according to RFC 6979 +// and BIP 62 and returns it along with an additional public key recovery code +// for efficiently recovering the public key from the signature. +func signRFC6979(privKey *secp256k1.PrivateKey, hash []byte) (*Signature, byte) { + // The algorithm for producing an ECDSA signature is given as algorithm 4.29 + // in [GECC]. + // + // The following is a paraphrased version for reference: + // + // G = curve generator + // N = curve order + // d = private key + // m = message + // r, s = signature + // + // 1. Select random nonce k in [1, N-1] + // 2. Compute kG + // 3. r = kG.x mod N (kG.x is the x coordinate of the point kG) + // Repeat from step 1 if r = 0 + // 4. e = H(m) + // 5. s = k^-1(e + dr) mod N + // Repeat from step 1 if s = 0 + // 6. Return (r,s) + // + // This is slightly modified here to conform to RFC6979 and BIP 62 as + // follows: + // + // A. Instead of selecting a random nonce in step 1, use RFC6979 to generate + // a deterministic nonce in [1, N-1] parameterized by the private key, + // message being signed, and an iteration count for the repeat cases + // B. Negate s calculated in step 5 if it is > N/2 + // This is done because both s and its negation are valid signatures + // modulo the curve order N, so it forces a consistent choice to reduce + // signature malleability + + privKeyScalar := &privKey.Key + var privKeyBytes [32]byte + privKeyScalar.PutBytes(&privKeyBytes) + defer zeroArray32(&privKeyBytes) + for iteration := uint32(0); ; iteration++ { + // Step 1 with modification A. + // + // Generate a deterministic nonce in [1, N-1] parameterized by the + // private key, message being signed, and iteration count. + k := secp256k1.NonceRFC6979(privKeyBytes[:], hash, nil, nil, iteration) + + // Step 2. + // + // Compute kG + // + // Note that the point must be in affine coordinates. + var kG secp256k1.JacobianPoint + secp256k1.ScalarBaseMultNonConst(k, &kG) + kG.ToAffine() + + // Step 3. + // + // r = kG.x mod N + // Repeat from step 1 if r = 0 + r, overflow := fieldToModNScalar(&kG.X) + if r.IsZero() { + k.Zero() + continue + } + + // Since the secp256k1 curve has a cofactor of 1, when recovering a + // public key from an ECDSA signature over it, there are four possible + // candidates corresponding to the following cases: + // + // 1) The X coord of the random point is < N and its Y coord even + // 2) The X coord of the random point is < N and its Y coord is odd + // 3) The X coord of the random point is >= N and its Y coord is even + // 4) The X coord of the random point is >= N and its Y coord is odd + // + // Rather than forcing the recovery procedure to check all possible + // cases, this creates a recovery code that uniquely identifies which of + // the cases apply by making use of 2 bits. Bit 0 identifies the + // oddness case and Bit 1 identifies the overflow case (aka when the X + // coord >= N). + // + // It is also worth noting that making use of Hasse's theorem shows + // there are around log_2((p-n)/p) ~= -127.65 ~= 1 in 2^127 points where + // the X coordinate is >= N. It is not possible to calculate these + // points since that would require breaking the ECDLP, but, in practice + // this strongly implies with extremely high probability that there are + // only a few actual points for which this case is true. + pubKeyRecoveryCode := byte(overflow<<1) | byte(kG.Y.IsOddBit()) + + // Step 4. + // + // e = H(m) + // + // Note that this actually sets e = H(m) mod N which is correct since + // it is only used in step 5 which itself is mod N. + var e secp256k1.ModNScalar + e.SetByteSlice(hash) + + // Step 5 with modification B. + // + // s = k^-1(e + dr) mod N + // Repeat from step 1 if s = 0 + // s = -s if s > N/2 + kInv := new(secp256k1.ModNScalar).InverseValNonConst(k) + k.Zero() + s := new(secp256k1.ModNScalar).Mul2(privKeyScalar, &r).Add(&e).Mul(kInv) + if s.IsZero() { + continue + } + if s.IsOverHalfOrder() { + s.Negate() + + // Negating s corresponds to the random point that would have been + // generated by -k (mod N), which necessarily has the opposite + // oddness since N is prime, thus flip the pubkey recovery code + // oddness bit accordingly. + pubKeyRecoveryCode ^= 0x01 + } + + // Step 6. + // + // Return (r,s) + return NewSignature(&r, s), pubKeyRecoveryCode + } +} + +// Sign generates an ECDSA signature over the secp256k1 curve for the provided +// hash (which should be the result of hashing a larger message) using the given +// private key. The produced signature is deterministic (same message and same +// key yield the same signature) and canonical in accordance with RFC6979 and +// BIP0062. +func Sign(key *secp256k1.PrivateKey, hash []byte) *Signature { + signature, _ := signRFC6979(key, hash) + return signature +} + +const ( + // compactSigSize is the size of a compact signature. It consists of a + // compact signature recovery code byte followed by the R and S components + // serialized as 32-byte big-endian values. 1+32*2 = 65. + // for the R and S components. 1+32+32=65. + compactSigSize = 65 + + // compactSigMagicOffset is a value used when creating the compact signature + // recovery code inherited from Bitcoin and has no meaning, but has been + // retained for compatibility. For historical purposes, it was originally + // picked to avoid a binary representation that would allow compact + // signatures to be mistaken for other components. + compactSigMagicOffset = 27 + + // compactSigCompPubKey is a value used when creating the compact signature + // recovery code to indicate the original public key was compressed. + compactSigCompPubKey = 4 + + // pubKeyRecoveryCodeOddnessBit specifies the bit that indicates the oddess + // of the Y coordinate of the random point calculated when creating a + // signature. + pubKeyRecoveryCodeOddnessBit = 1 << 0 + + // pubKeyRecoveryCodeOverflowBit specifies the bit that indicates the X + // coordinate of the random point calculated when creating a signature was + // >= N, where N is the order of the group. + pubKeyRecoveryCodeOverflowBit = 1 << 1 +) + +// SignCompact produces a compact ECDSA signature over the secp256k1 curve for +// the provided hash (which should be the result of hashing a larger message) +// using the given private key. The isCompressedKey parameter specifies if the +// produced signature should reference a compressed public key or not. +// +// Compact signature format: +// <1-byte compact sig recovery code><32-byte R><32-byte S> +// +// The compact sig recovery code is the value 27 + public key recovery code + 4 +// if the compact signature was created with a compressed public key. +func SignCompact(key *secp256k1.PrivateKey, hash []byte, isCompressedKey bool) []byte { + // Create the signature and associated pubkey recovery code and calculate + // the compact signature recovery code. + sig, pubKeyRecoveryCode := signRFC6979(key, hash) + compactSigRecoveryCode := compactSigMagicOffset + pubKeyRecoveryCode + if isCompressedKey { + compactSigRecoveryCode += compactSigCompPubKey + } + + // Output <32-byte R><32-byte S>. + var b [compactSigSize]byte + b[0] = compactSigRecoveryCode + sig.r.PutBytesUnchecked(b[1:33]) + sig.s.PutBytesUnchecked(b[33:65]) + return b[:] +} + +// RecoverCompact attempts to recover the secp256k1 public key from the provided +// compact signature and message hash. It first verifies the signature, and, if +// the signature matches then the recovered public key will be returned as well +// as a boolean indicating whether or not the original key was compressed. +func RecoverCompact(signature, hash []byte) (*secp256k1.PublicKey, bool, error) { + // The following is very loosely based on the information and algorithm that + // describes recovering a public key from and ECDSA signature in section + // 4.1.6 of [SEC1]. + // + // Given the following parameters: + // + // G = curve generator + // N = group order + // P = field prime + // Q = public key + // m = message + // e = hash of the message + // r, s = signature + // X = random point used when creating signature whose x coordinate is r + // + // The equation to recover a public key candidate from an ECDSA signature + // is: + // Q = r^-1(sX - eG). + // + // This can be verified by plugging it in for Q in the sig verification + // equation: + // X = s^-1(eG + rQ) (mod N) + // => s^-1(eG + r(r^-1(sX - eG))) (mod N) + // => s^-1(eG + sX - eG) (mod N) + // => s^-1(sX) (mod N) + // => X (mod N) + // + // However, note that since r is the x coordinate mod N from a random point + // that was originally mod P, and the cofactor of the secp256k1 curve is 1, + // there are four possible points that the original random point could have + // been to produce r: (r,y), (r,-y), (r+N,y), and (r+N,-y). At least 2 of + // those points will successfully verify, and all 4 will successfully verify + // when the original x coordinate was in the range [N+1, P-1], but in any + // case, only one of them corresponds to the original private key used. + // + // The method described by section 4.1.6 of [SEC1] to determine which one is + // the correct one involves calculating each possibility as a candidate + // public key and comparing the candidate to the authentic public key. It + // also hints that is is possible to generate the signature in a such a + // way that only one of the candidate public keys is viable. + // + // A more efficient approach that is specific to the secp256k1 curve is used + // here instead which is to produce a "pubkey recovery code" when signing + // that uniquely identifies which of the 4 possibilities is correct for the + // original random point and using that to recover the pubkey directly as + // follows: + // + // 1. Fail if r and s are not in [1, N-1] + // 2. Convert r to integer mod P + // 3. If pubkey recovery code overflow bit is set: + // 3.1 Fail if r + N >= P + // 3.2 r = r + N (mod P) + // 4. y = +sqrt(r^3 + 7) (mod P) + // 4.1 Fail if y does not exist + // 4.2 y = -y if needed to match pubkey recovery code oddness bit + // 5. X = (r, y) + // 6. e = H(m) mod N + // 7. w = r^-1 mod N + // 8. u1 = -(e * w) mod N + // u2 = s * w mod N + // 9. Q = u1G + u2X + // 10. Fail if Q is the point at infinity + + // A compact signature consists of a recovery byte followed by the R and + // S components serialized as 32-byte big-endian values. + if len(signature) != compactSigSize { + return nil, false, errors.New("invalid compact signature size") + } + + // Parse and validate the compact signature recovery code. + const ( + minValidCode = compactSigMagicOffset + maxValidCode = compactSigMagicOffset + compactSigCompPubKey + 3 + ) + sigRecoveryCode := signature[0] + if sigRecoveryCode < minValidCode || sigRecoveryCode > maxValidCode { + return nil, false, errors.New("invalid compact signature recovery code") + } + sigRecoveryCode -= compactSigMagicOffset + wasCompressed := sigRecoveryCode&compactSigCompPubKey != 0 + pubKeyRecoveryCode := sigRecoveryCode & 3 + + // Step 1. + // + // Parse and validate the R and S signature components. + // + // Fail if r and s are not in [1, N-1]. + var r, s secp256k1.ModNScalar + if overflow := r.SetByteSlice(signature[1:33]); overflow { + return nil, false, errors.New("signature R is >= curve order") + } + if r.IsZero() { + return nil, false, errors.New("signature R is 0") + } + if overflow := s.SetByteSlice(signature[33:]); overflow { + return nil, false, errors.New("signature S is >= curve order") + } + if s.IsZero() { + return nil, false, errors.New("signature S is 0") + } + + // Step 2. + // + // Convert r to integer mod P. + fieldR := modNScalarToField(&r) + + // Step 3. + // + // If pubkey recovery code overflow bit is set: + if pubKeyRecoveryCode&pubKeyRecoveryCodeOverflowBit != 0 { + // Step 3.1. + // + // Fail if r + N >= P + // + // Either the signature or the recovery code must be invalid if the + // recovery code overflow bit is set and adding N to the R component + // would exceed the field prime since R originally came from the X + // coordinate of a random point on the curve. + if fieldR.IsGtOrEqPrimeMinusOrder() { + return nil, false, errors.New("signature R + N >= P") + } + + // Step 3.2. + // + // r = r + N (mod P) + fieldR.Add(orderAsFieldVal) + } + + // Step 4. + // + // y = +sqrt(r^3 + 7) (mod P) + // Fail if y does not exist. + // y = -y if needed to match pubkey recovery code oddness bit + // + // The signature must be invalid if the calculation fails because the X + // coord originally came from a random point on the curve which means there + // must be a Y coord that satisfies the equation for a valid signature. + oddY := pubKeyRecoveryCode&pubKeyRecoveryCodeOddnessBit != 0 + var y secp256k1.FieldVal + if valid := secp256k1.DecompressY(&fieldR, oddY, &y); !valid { + return nil, false, errors.New("signature is not for a valid curve point") + } + + // Step 5. + // + // X = (r, y) + var X secp256k1.JacobianPoint + X.X.Set(&fieldR) + X.Y.Set(&y) + X.Z.SetInt(1) + + // Step 6. + // + // e = H(m) mod N + var e secp256k1.ModNScalar + e.SetByteSlice(hash) + + // Step 7. + // + // w = r^-1 mod N + w := new(secp256k1.ModNScalar).InverseValNonConst(&r) + + // Step 8. + // + // u1 = -(e * w) mod N + // u2 = s * w mod N + u1 := new(secp256k1.ModNScalar).Mul2(&e, w).Negate() + u2 := new(secp256k1.ModNScalar).Mul2(&s, w) + + // Step 9. + // + // Q = u1G + u2X + var Q, u1G, u2X secp256k1.JacobianPoint + secp256k1.ScalarBaseMultNonConst(u1, &u1G) + secp256k1.ScalarMultNonConst(u2, &X, &u2X) + secp256k1.AddNonConst(&u1G, &u2X, &Q) + + // Step 10. + // + // Fail if Q is the point at infinity. + // + // Either the signature or the pubkey recovery code must be invalid if the + // recovered pubkey is the point at infinity. + if (Q.X.IsZero() && Q.Y.IsZero()) || Q.Z.IsZero() { + return nil, false, errors.New("recovered pubkey is the point at infinity") + } + + // Notice that the public key is in affine coordinates. + Q.ToAffine() + pubKey := secp256k1.NewPublicKey(&Q.X, &Q.Y) + return pubKey, wasCompressed, nil +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ellipticadaptor.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ellipticadaptor.go new file mode 100644 index 0000000000..a271ff6b36 --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/ellipticadaptor.go @@ -0,0 +1,255 @@ +// Copyright 2020-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +// References: +// [SECG]: Recommended Elliptic Curve Domain Parameters +// https://www.secg.org/sec2-v2.pdf +// +// [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone) + +import ( + "crypto/ecdsa" + "crypto/elliptic" + "math/big" +) + +// CurveParams contains the parameters for the secp256k1 curve. +type CurveParams struct { + // P is the prime used in the secp256k1 field. + P *big.Int + + // N is the order of the secp256k1 curve group generated by the base point. + N *big.Int + + // Gx and Gy are the x and y coordinate of the base point, respectively. + Gx, Gy *big.Int + + // BitSize is the size of the underlying secp256k1 field in bits. + BitSize int + + // H is the cofactor of the secp256k1 curve. + H int + + // ByteSize is simply the bit size / 8 and is provided for convenience + // since it is calculated repeatedly. + ByteSize int +} + +// Curve parameters taken from [SECG] section 2.4.1. +var curveParams = CurveParams{ + P: fromHex("fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"), + N: fromHex("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141"), + Gx: fromHex("79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798"), + Gy: fromHex("483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"), + BitSize: 256, + H: 1, + ByteSize: 256 / 8, +} + +// Params returns the secp256k1 curve parameters for convenience. +func Params() *CurveParams { + return &curveParams +} + +// KoblitzCurve provides an implementation for secp256k1 that fits the ECC Curve +// interface from crypto/elliptic. +type KoblitzCurve struct { + *elliptic.CurveParams +} + +// bigAffineToJacobian takes an affine point (x, y) as big integers and converts +// it to Jacobian point with Z=1. +func bigAffineToJacobian(x, y *big.Int, result *JacobianPoint) { + result.X.SetByteSlice(x.Bytes()) + result.Y.SetByteSlice(y.Bytes()) + result.Z.SetInt(1) +} + +// jacobianToBigAffine takes a Jacobian point (x, y, z) as field values and +// converts it to an affine point as big integers. +func jacobianToBigAffine(point *JacobianPoint) (*big.Int, *big.Int) { + point.ToAffine() + + // Convert the field values for the now affine point to big.Ints. + x3, y3 := new(big.Int), new(big.Int) + x3.SetBytes(point.X.Bytes()[:]) + y3.SetBytes(point.Y.Bytes()[:]) + return x3, y3 +} + +// Params returns the parameters for the curve. +// +// This is part of the elliptic.Curve interface implementation. +func (curve *KoblitzCurve) Params() *elliptic.CurveParams { + return curve.CurveParams +} + +// IsOnCurve returns whether or not the affine point (x,y) is on the curve. +// +// This is part of the elliptic.Curve interface implementation. This function +// differs from the crypto/elliptic algorithm since a = 0 not -3. +func (curve *KoblitzCurve) IsOnCurve(x, y *big.Int) bool { + // Convert big ints to a Jacobian point for faster arithmetic. + var point JacobianPoint + bigAffineToJacobian(x, y, &point) + return isOnCurve(&point.X, &point.Y) +} + +// Add returns the sum of (x1,y1) and (x2,y2). +// +// This is part of the elliptic.Curve interface implementation. +func (curve *KoblitzCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) { + // A point at infinity is the identity according to the group law for + // elliptic curve cryptography. Thus, ∞ + P = P and P + ∞ = P. + if x1.Sign() == 0 && y1.Sign() == 0 { + return x2, y2 + } + if x2.Sign() == 0 && y2.Sign() == 0 { + return x1, y1 + } + + // Convert the affine coordinates from big integers to Jacobian points, + // do the point addition in Jacobian projective space, and convert the + // Jacobian point back to affine big.Ints. + var p1, p2, result JacobianPoint + bigAffineToJacobian(x1, y1, &p1) + bigAffineToJacobian(x2, y2, &p2) + AddNonConst(&p1, &p2, &result) + return jacobianToBigAffine(&result) +} + +// Double returns 2*(x1,y1). +// +// This is part of the elliptic.Curve interface implementation. +func (curve *KoblitzCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) { + if y1.Sign() == 0 { + return new(big.Int), new(big.Int) + } + + // Convert the affine coordinates from big integers to Jacobian points, + // do the point doubling in Jacobian projective space, and convert the + // Jacobian point back to affine big.Ints. + var point, result JacobianPoint + bigAffineToJacobian(x1, y1, &point) + DoubleNonConst(&point, &result) + return jacobianToBigAffine(&result) +} + +// moduloReduce reduces k from more than 32 bytes to 32 bytes and under. This +// is done by doing a simple modulo curve.N. We can do this since G^N = 1 and +// thus any other valid point on the elliptic curve has the same order. +func moduloReduce(k []byte) []byte { + // Since the order of G is curve.N, we can use a much smaller number by + // doing modulo curve.N + if len(k) > curveParams.ByteSize { + tmpK := new(big.Int).SetBytes(k) + tmpK.Mod(tmpK, curveParams.N) + return tmpK.Bytes() + } + + return k +} + +// ScalarMult returns k*(Bx, By) where k is a big endian integer. +// +// This is part of the elliptic.Curve interface implementation. +func (curve *KoblitzCurve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int) { + // Convert the affine coordinates from big integers to Jacobian points, + // do the multiplication in Jacobian projective space, and convert the + // Jacobian point back to affine big.Ints. + var kModN ModNScalar + kModN.SetByteSlice(moduloReduce(k)) + var point, result JacobianPoint + bigAffineToJacobian(Bx, By, &point) + ScalarMultNonConst(&kModN, &point, &result) + return jacobianToBigAffine(&result) +} + +// ScalarBaseMult returns k*G where G is the base point of the group and k is a +// big endian integer. +// +// This is part of the elliptic.Curve interface implementation. +func (curve *KoblitzCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) { + // Perform the multiplication and convert the Jacobian point back to affine + // big.Ints. + var kModN ModNScalar + kModN.SetByteSlice(moduloReduce(k)) + var result JacobianPoint + ScalarBaseMultNonConst(&kModN, &result) + return jacobianToBigAffine(&result) +} + +// X returns the x coordinate of the public key. +func (p *PublicKey) X() *big.Int { + return new(big.Int).SetBytes(p.x.Bytes()[:]) +} + +// Y returns the y coordinate of the public key. +func (p *PublicKey) Y() *big.Int { + return new(big.Int).SetBytes(p.y.Bytes()[:]) +} + +// ToECDSA returns the public key as a *ecdsa.PublicKey. +func (p *PublicKey) ToECDSA() *ecdsa.PublicKey { + return &ecdsa.PublicKey{ + Curve: S256(), + X: p.X(), + Y: p.Y(), + } +} + +// ToECDSA returns the private key as a *ecdsa.PrivateKey. +func (p *PrivateKey) ToECDSA() *ecdsa.PrivateKey { + var privKeyBytes [PrivKeyBytesLen]byte + p.Key.PutBytes(&privKeyBytes) + var result JacobianPoint + ScalarBaseMultNonConst(&p.Key, &result) + x, y := jacobianToBigAffine(&result) + newPrivKey := &ecdsa.PrivateKey{ + PublicKey: ecdsa.PublicKey{ + Curve: S256(), + X: x, + Y: y, + }, + D: new(big.Int).SetBytes(privKeyBytes[:]), + } + zeroArray32(&privKeyBytes) + return newPrivKey +} + +// fromHex converts the passed hex string into a big integer pointer and will +// panic is there is an error. This is only provided for the hard-coded +// constants so errors in the source code can bet detected. It will only (and +// must only) be called for initialization purposes. +func fromHex(s string) *big.Int { + if s == "" { + return big.NewInt(0) + } + r, ok := new(big.Int).SetString(s, 16) + if !ok { + panic("invalid hex in source file: " + s) + } + return r +} + +// secp256k1 is a global instance of the KoblitzCurve implementation which in +// turn embeds and implements elliptic.CurveParams. +var secp256k1 = &KoblitzCurve{ + CurveParams: &elliptic.CurveParams{ + P: curveParams.P, + N: curveParams.N, + B: fromHex("0000000000000000000000000000000000000000000000000000000000000007"), + Gx: curveParams.Gx, + Gy: curveParams.Gy, + BitSize: curveParams.BitSize, + Name: "secp256k1", + }, +} + +// S256 returns a Curve which implements secp256k1. +func S256() *KoblitzCurve { + return secp256k1 +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/error.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/error.go new file mode 100644 index 0000000000..ac8c45127e --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/error.go @@ -0,0 +1,67 @@ +// Copyright (c) 2020 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +// ErrorKind identifies a kind of error. It has full support for errors.Is and +// errors.As, so the caller can directly check against an error kind when +// determining the reason for an error. +type ErrorKind string + +// These constants are used to identify a specific RuleError. +const ( + // ErrPubKeyInvalidLen indicates that the length of a serialized public + // key is not one of the allowed lengths. + ErrPubKeyInvalidLen = ErrorKind("ErrPubKeyInvalidLen") + + // ErrPubKeyInvalidFormat indicates an attempt was made to parse a public + // key that does not specify one of the supported formats. + ErrPubKeyInvalidFormat = ErrorKind("ErrPubKeyInvalidFormat") + + // ErrPubKeyXTooBig indicates that the x coordinate for a public key + // is greater than or equal to the prime of the field underlying the group. + ErrPubKeyXTooBig = ErrorKind("ErrPubKeyXTooBig") + + // ErrPubKeyYTooBig indicates that the y coordinate for a public key is + // greater than or equal to the prime of the field underlying the group. + ErrPubKeyYTooBig = ErrorKind("ErrPubKeyYTooBig") + + // ErrPubKeyNotOnCurve indicates that a public key is not a point on the + // secp256k1 curve. + ErrPubKeyNotOnCurve = ErrorKind("ErrPubKeyNotOnCurve") + + // ErrPubKeyMismatchedOddness indicates that a hybrid public key specified + // an oddness of the y coordinate that does not match the actual oddness of + // the provided y coordinate. + ErrPubKeyMismatchedOddness = ErrorKind("ErrPubKeyMismatchedOddness") +) + +// Error satisfies the error interface and prints human-readable errors. +func (e ErrorKind) Error() string { + return string(e) +} + +// Error identifies an error related to public key cryptography using a +// sec256k1 curve. It has full support for errors.Is and errors.As, so the +// caller can ascertain the specific reason for the error by checking +// the underlying error. +type Error struct { + Err error + Description string +} + +// Error satisfies the error interface and prints human-readable errors. +func (e Error) Error() string { + return e.Description +} + +// Unwrap returns the underlying wrapped error. +func (e Error) Unwrap() error { + return e.Err +} + +// makeError creates an Error given a set of arguments. +func makeError(kind ErrorKind, desc string) Error { + return Error{Err: kind, Description: desc} +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/field.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/field.go new file mode 100644 index 0000000000..43e27a91d2 --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/field.go @@ -0,0 +1,1680 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Copyright (c) 2013-2021 Dave Collins +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +// References: +// [HAC]: Handbook of Applied Cryptography Menezes, van Oorschot, Vanstone. +// http://cacr.uwaterloo.ca/hac/ + +// All elliptic curve operations for secp256k1 are done in a finite field +// characterized by a 256-bit prime. Given this precision is larger than the +// biggest available native type, obviously some form of bignum math is needed. +// This package implements specialized fixed-precision field arithmetic rather +// than relying on an arbitrary-precision arithmetic package such as math/big +// for dealing with the field math since the size is known. As a result, rather +// large performance gains are achieved by taking advantage of many +// optimizations not available to arbitrary-precision arithmetic and generic +// modular arithmetic algorithms. +// +// There are various ways to internally represent each finite field element. +// For example, the most obvious representation would be to use an array of 4 +// uint64s (64 bits * 4 = 256 bits). However, that representation suffers from +// a couple of issues. First, there is no native Go type large enough to handle +// the intermediate results while adding or multiplying two 64-bit numbers, and +// second there is no space left for overflows when performing the intermediate +// arithmetic between each array element which would lead to expensive carry +// propagation. +// +// Given the above, this implementation represents the field elements as +// 10 uint32s with each word (array entry) treated as base 2^26. This was +// chosen for the following reasons: +// 1) Most systems at the current time are 64-bit (or at least have 64-bit +// registers available for specialized purposes such as MMX) so the +// intermediate results can typically be done using a native register (and +// using uint64s to avoid the need for additional half-word arithmetic) +// 2) In order to allow addition of the internal words without having to +// propagate the carry, the max normalized value for each register must +// be less than the number of bits available in the register +// 3) Since we're dealing with 32-bit values, 64-bits of overflow is a +// reasonable choice for #2 +// 4) Given the need for 256-bits of precision and the properties stated in #1, +// #2, and #3, the representation which best accommodates this is 10 uint32s +// with base 2^26 (26 bits * 10 = 260 bits, so the final word only needs 22 +// bits) which leaves the desired 64 bits (32 * 10 = 320, 320 - 256 = 64) for +// overflow +// +// Since it is so important that the field arithmetic is extremely fast for high +// performance crypto, this type does not perform any validation where it +// ordinarily would. See the documentation for FieldVal for more details. + +import ( + "encoding/hex" +) + +// Constants used to make the code more readable. +const ( + twoBitsMask = 0x3 + fourBitsMask = 0xf + sixBitsMask = 0x3f + eightBitsMask = 0xff +) + +// Constants related to the field representation. +const ( + // fieldWords is the number of words used to internally represent the + // 256-bit value. + fieldWords = 10 + + // fieldBase is the exponent used to form the numeric base of each word. + // 2^(fieldBase*i) where i is the word position. + fieldBase = 26 + + // fieldBaseMask is the mask for the bits in each word needed to + // represent the numeric base of each word (except the most significant + // word). + fieldBaseMask = (1 << fieldBase) - 1 + + // fieldMSBBits is the number of bits in the most significant word used + // to represent the value. + fieldMSBBits = 256 - (fieldBase * (fieldWords - 1)) + + // fieldMSBMask is the mask for the bits in the most significant word + // needed to represent the value. + fieldMSBMask = (1 << fieldMSBBits) - 1 + + // These fields provide convenient access to each of the words of the + // secp256k1 prime in the internal field representation to improve code + // readability. + fieldPrimeWordZero = 0x03fffc2f + fieldPrimeWordOne = 0x03ffffbf + fieldPrimeWordTwo = 0x03ffffff + fieldPrimeWordThree = 0x03ffffff + fieldPrimeWordFour = 0x03ffffff + fieldPrimeWordFive = 0x03ffffff + fieldPrimeWordSix = 0x03ffffff + fieldPrimeWordSeven = 0x03ffffff + fieldPrimeWordEight = 0x03ffffff + fieldPrimeWordNine = 0x003fffff +) + +// FieldVal implements optimized fixed-precision arithmetic over the +// secp256k1 finite field. This means all arithmetic is performed modulo +// 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f. +// +// WARNING: Since it is so important for the field arithmetic to be extremely +// fast for high performance crypto, this type does not perform any validation +// of documented preconditions where it ordinarily would. As a result, it is +// IMPERATIVE for callers to understand some key concepts that are described +// below and ensure the methods are called with the necessary preconditions that +// each method is documented with. For example, some methods only give the +// correct result if the field value is normalized and others require the field +// values involved to have a maximum magnitude and THERE ARE NO EXPLICIT CHECKS +// TO ENSURE THOSE PRECONDITIONS ARE SATISFIED. This does, unfortunately, make +// the type more difficult to use correctly and while I typically prefer to +// ensure all state and input is valid for most code, this is a bit of an +// exception because those extra checks really add up in what ends up being +// critical hot paths. +// +// The first key concept when working with this type is normalization. In order +// to avoid the need to propagate a ton of carries, the internal representation +// provides additional overflow bits for each word of the overall 256-bit value. +// This means that there are multiple internal representations for the same +// value and, as a result, any methods that rely on comparison of the value, +// such as equality and oddness determination, require the caller to provide a +// normalized value. +// +// The second key concept when working with this type is magnitude. As +// previously mentioned, the internal representation provides additional +// overflow bits which means that the more math operations that are performed on +// the field value between normalizations, the more those overflow bits +// accumulate. The magnitude is effectively that maximum possible number of +// those overflow bits that could possibly be required as a result of a given +// operation. Since there are only a limited number of overflow bits available, +// this implies that the max possible magnitude MUST be tracked by the caller +// and the caller MUST normalize the field value if a given operation would +// cause the magnitude of the result to exceed the max allowed value. +// +// IMPORTANT: The max allowed magnitude of a field value is 64. +type FieldVal struct { + // Each 256-bit value is represented as 10 32-bit integers in base 2^26. + // This provides 6 bits of overflow in each word (10 bits in the most + // significant word) for a total of 64 bits of overflow (9*6 + 10 = 64). It + // only implements the arithmetic needed for elliptic curve operations. + // + // The following depicts the internal representation: + // ----------------------------------------------------------------- + // | n[9] | n[8] | ... | n[0] | + // | 32 bits available | 32 bits available | ... | 32 bits available | + // | 22 bits for value | 26 bits for value | ... | 26 bits for value | + // | 10 bits overflow | 6 bits overflow | ... | 6 bits overflow | + // | Mult: 2^(26*9) | Mult: 2^(26*8) | ... | Mult: 2^(26*0) | + // ----------------------------------------------------------------- + // + // For example, consider the number 2^49 + 1. It would be represented as: + // n[0] = 1 + // n[1] = 2^23 + // n[2..9] = 0 + // + // The full 256-bit value is then calculated by looping i from 9..0 and + // doing sum(n[i] * 2^(26i)) like so: + // n[9] * 2^(26*9) = 0 * 2^234 = 0 + // n[8] * 2^(26*8) = 0 * 2^208 = 0 + // ... + // n[1] * 2^(26*1) = 2^23 * 2^26 = 2^49 + // n[0] * 2^(26*0) = 1 * 2^0 = 1 + // Sum: 0 + 0 + ... + 2^49 + 1 = 2^49 + 1 + n [10]uint32 +} + +// String returns the field value as a normalized human-readable hex string. +// +// Preconditions: None +// Output Normalized: Field is not modified -- same as input value +// Output Max Magnitude: Field is not modified -- same as input value +func (f FieldVal) String() string { + // f is a copy, so it's safe to normalize it without mutating the original. + f.Normalize() + return hex.EncodeToString(f.Bytes()[:]) +} + +// Zero sets the field value to zero in constant time. A newly created field +// value is already set to zero. This function can be useful to clear an +// existing field value for reuse. +// +// Preconditions: None +// Output Normalized: Yes +// Output Max Magnitude: 1 +func (f *FieldVal) Zero() { + f.n[0] = 0 + f.n[1] = 0 + f.n[2] = 0 + f.n[3] = 0 + f.n[4] = 0 + f.n[5] = 0 + f.n[6] = 0 + f.n[7] = 0 + f.n[8] = 0 + f.n[9] = 0 +} + +// Set sets the field value equal to the passed value in constant time. The +// normalization and magnitude of the two fields will be identical. +// +// The field value is returned to support chaining. This enables syntax like: +// f := new(FieldVal).Set(f2).Add(1) so that f = f2 + 1 where f2 is not +// modified. +// +// Preconditions: None +// Output Normalized: Same as input value +// Output Max Magnitude: Same as input value +func (f *FieldVal) Set(val *FieldVal) *FieldVal { + *f = *val + return f +} + +// SetInt sets the field value to the passed integer in constant time. This is +// a convenience function since it is fairly common to perform some arithmetic +// with small native integers. +// +// The field value is returned to support chaining. This enables syntax such +// as f := new(FieldVal).SetInt(2).Mul(f2) so that f = 2 * f2. +// +// Preconditions: None +// Output Normalized: Yes +// Output Max Magnitude: 1 +func (f *FieldVal) SetInt(ui uint16) *FieldVal { + f.Zero() + f.n[0] = uint32(ui) + return f +} + +// SetBytes packs the passed 32-byte big-endian value into the internal field +// value representation in constant time. SetBytes interprets the provided +// array as a 256-bit big-endian unsigned integer, packs it into the internal +// field value representation, and returns either 1 if it is greater than or +// equal to the field prime (aka it overflowed) or 0 otherwise in constant time. +// +// Note that a bool is not used here because it is not possible in Go to convert +// from a bool to numeric value in constant time and many constant-time +// operations require a numeric value. +// +// Preconditions: None +// Output Normalized: Yes if no overflow, no otherwise +// Output Max Magnitude: 1 +func (f *FieldVal) SetBytes(b *[32]byte) uint32 { + // Pack the 256 total bits across the 10 uint32 words with a max of + // 26-bits per word. This could be done with a couple of for loops, + // but this unrolled version is significantly faster. Benchmarks show + // this is about 34 times faster than the variant which uses loops. + f.n[0] = uint32(b[31]) | uint32(b[30])<<8 | uint32(b[29])<<16 | + (uint32(b[28])&twoBitsMask)<<24 + f.n[1] = uint32(b[28])>>2 | uint32(b[27])<<6 | uint32(b[26])<<14 | + (uint32(b[25])&fourBitsMask)<<22 + f.n[2] = uint32(b[25])>>4 | uint32(b[24])<<4 | uint32(b[23])<<12 | + (uint32(b[22])&sixBitsMask)<<20 + f.n[3] = uint32(b[22])>>6 | uint32(b[21])<<2 | uint32(b[20])<<10 | + uint32(b[19])<<18 + f.n[4] = uint32(b[18]) | uint32(b[17])<<8 | uint32(b[16])<<16 | + (uint32(b[15])&twoBitsMask)<<24 + f.n[5] = uint32(b[15])>>2 | uint32(b[14])<<6 | uint32(b[13])<<14 | + (uint32(b[12])&fourBitsMask)<<22 + f.n[6] = uint32(b[12])>>4 | uint32(b[11])<<4 | uint32(b[10])<<12 | + (uint32(b[9])&sixBitsMask)<<20 + f.n[7] = uint32(b[9])>>6 | uint32(b[8])<<2 | uint32(b[7])<<10 | + uint32(b[6])<<18 + f.n[8] = uint32(b[5]) | uint32(b[4])<<8 | uint32(b[3])<<16 | + (uint32(b[2])&twoBitsMask)<<24 + f.n[9] = uint32(b[2])>>2 | uint32(b[1])<<6 | uint32(b[0])<<14 + + // The intuition here is that the field value is greater than the prime if + // one of the higher individual words is greater than corresponding word of + // the prime and all higher words in the field value are equal to their + // corresponding word of the prime. Since this type is modulo the prime, + // being equal is also an overflow back to 0. + // + // Note that because the input is 32 bytes and it was just packed into the + // field representation, the only words that can possibly be greater are + // zero and one, because ceil(log_2(2^256 - 1 - P)) = 33 bits max and the + // internal field representation encodes 26 bits with each word. + // + // Thus, there is no need to test if the upper words of the field value + // exceeds them, hence, only equality is checked for them. + highWordsEq := constantTimeEq(f.n[9], fieldPrimeWordNine) + highWordsEq &= constantTimeEq(f.n[8], fieldPrimeWordEight) + highWordsEq &= constantTimeEq(f.n[7], fieldPrimeWordSeven) + highWordsEq &= constantTimeEq(f.n[6], fieldPrimeWordSix) + highWordsEq &= constantTimeEq(f.n[5], fieldPrimeWordFive) + highWordsEq &= constantTimeEq(f.n[4], fieldPrimeWordFour) + highWordsEq &= constantTimeEq(f.n[3], fieldPrimeWordThree) + highWordsEq &= constantTimeEq(f.n[2], fieldPrimeWordTwo) + overflow := highWordsEq & constantTimeGreater(f.n[1], fieldPrimeWordOne) + highWordsEq &= constantTimeEq(f.n[1], fieldPrimeWordOne) + overflow |= highWordsEq & constantTimeGreaterOrEq(f.n[0], fieldPrimeWordZero) + + return overflow +} + +// SetByteSlice interprets the provided slice as a 256-bit big-endian unsigned +// integer (meaning it is truncated to the first 32 bytes), packs it into the +// internal field value representation, and returns whether or not the resulting +// truncated 256-bit integer is greater than or equal to the field prime (aka it +// overflowed) in constant time. +// +// Note that since passing a slice with more than 32 bytes is truncated, it is +// possible that the truncated value is less than the field prime and hence it +// will not be reported as having overflowed in that case. It is up to the +// caller to decide whether it needs to provide numbers of the appropriate size +// or it if is acceptable to use this function with the described truncation and +// overflow behavior. +// +// Preconditions: None +// Output Normalized: Yes if no overflow, no otherwise +// Output Max Magnitude: 1 +func (f *FieldVal) SetByteSlice(b []byte) bool { + var b32 [32]byte + b = b[:constantTimeMin(uint32(len(b)), 32)] + copy(b32[:], b32[:32-len(b)]) + copy(b32[32-len(b):], b) + result := f.SetBytes(&b32) + zeroArray32(&b32) + return result != 0 +} + +// Normalize normalizes the internal field words into the desired range and +// performs fast modular reduction over the secp256k1 prime by making use of the +// special form of the prime in constant time. +// +// Preconditions: None +// Output Normalized: Yes +// Output Max Magnitude: 1 +func (f *FieldVal) Normalize() *FieldVal { + // The field representation leaves 6 bits of overflow in each word so + // intermediate calculations can be performed without needing to + // propagate the carry to each higher word during the calculations. In + // order to normalize, we need to "compact" the full 256-bit value to + // the right while propagating any carries through to the high order + // word. + // + // Since this field is doing arithmetic modulo the secp256k1 prime, we + // also need to perform modular reduction over the prime. + // + // Per [HAC] section 14.3.4: Reduction method of moduli of special form, + // when the modulus is of the special form m = b^t - c, highly efficient + // reduction can be achieved. + // + // The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits + // this criteria. + // + // 4294968273 in field representation (base 2^26) is: + // n[0] = 977 + // n[1] = 64 + // That is to say (2^26 * 64) + 977 = 4294968273 + // + // The algorithm presented in the referenced section typically repeats + // until the quotient is zero. However, due to our field representation + // we already know to within one reduction how many times we would need + // to repeat as it's the uppermost bits of the high order word. Thus we + // can simply multiply the magnitude by the field representation of the + // prime and do a single iteration. After this step there might be an + // additional carry to bit 256 (bit 22 of the high order word). + t9 := f.n[9] + m := t9 >> fieldMSBBits + t9 = t9 & fieldMSBMask + t0 := f.n[0] + m*977 + t1 := (t0 >> fieldBase) + f.n[1] + (m << 6) + t0 = t0 & fieldBaseMask + t2 := (t1 >> fieldBase) + f.n[2] + t1 = t1 & fieldBaseMask + t3 := (t2 >> fieldBase) + f.n[3] + t2 = t2 & fieldBaseMask + t4 := (t3 >> fieldBase) + f.n[4] + t3 = t3 & fieldBaseMask + t5 := (t4 >> fieldBase) + f.n[5] + t4 = t4 & fieldBaseMask + t6 := (t5 >> fieldBase) + f.n[6] + t5 = t5 & fieldBaseMask + t7 := (t6 >> fieldBase) + f.n[7] + t6 = t6 & fieldBaseMask + t8 := (t7 >> fieldBase) + f.n[8] + t7 = t7 & fieldBaseMask + t9 = (t8 >> fieldBase) + t9 + t8 = t8 & fieldBaseMask + + // At this point, the magnitude is guaranteed to be one, however, the + // value could still be greater than the prime if there was either a + // carry through to bit 256 (bit 22 of the higher order word) or the + // value is greater than or equal to the field characteristic. The + // following determines if either or these conditions are true and does + // the final reduction in constant time. + // + // Also note that 'm' will be zero when neither of the aforementioned + // conditions are true and the value will not be changed when 'm' is zero. + m = constantTimeEq(t9, fieldMSBMask) + m &= constantTimeEq(t8&t7&t6&t5&t4&t3&t2, fieldBaseMask) + m &= constantTimeGreater(t1+64+((t0+977)>>fieldBase), fieldBaseMask) + m |= t9 >> fieldMSBBits + t0 = t0 + m*977 + t1 = (t0 >> fieldBase) + t1 + (m << 6) + t0 = t0 & fieldBaseMask + t2 = (t1 >> fieldBase) + t2 + t1 = t1 & fieldBaseMask + t3 = (t2 >> fieldBase) + t3 + t2 = t2 & fieldBaseMask + t4 = (t3 >> fieldBase) + t4 + t3 = t3 & fieldBaseMask + t5 = (t4 >> fieldBase) + t5 + t4 = t4 & fieldBaseMask + t6 = (t5 >> fieldBase) + t6 + t5 = t5 & fieldBaseMask + t7 = (t6 >> fieldBase) + t7 + t6 = t6 & fieldBaseMask + t8 = (t7 >> fieldBase) + t8 + t7 = t7 & fieldBaseMask + t9 = (t8 >> fieldBase) + t9 + t8 = t8 & fieldBaseMask + t9 = t9 & fieldMSBMask // Remove potential multiple of 2^256. + + // Finally, set the normalized and reduced words. + f.n[0] = t0 + f.n[1] = t1 + f.n[2] = t2 + f.n[3] = t3 + f.n[4] = t4 + f.n[5] = t5 + f.n[6] = t6 + f.n[7] = t7 + f.n[8] = t8 + f.n[9] = t9 + return f +} + +// PutBytesUnchecked unpacks the field value to a 32-byte big-endian value +// directly into the passed byte slice in constant time. The target slice must +// must have at least 32 bytes available or it will panic. +// +// There is a similar function, PutBytes, which unpacks the field value into a +// 32-byte array directly. This version is provided since it can be useful +// to write directly into part of a larger buffer without needing a separate +// allocation. +// +// Preconditions: +// - The field value MUST be normalized +// - The target slice MUST have at least 32 bytes available +func (f *FieldVal) PutBytesUnchecked(b []byte) { + // Unpack the 256 total bits from the 10 uint32 words with a max of + // 26-bits per word. This could be done with a couple of for loops, + // but this unrolled version is a bit faster. Benchmarks show this is + // about 10 times faster than the variant which uses loops. + b[31] = byte(f.n[0] & eightBitsMask) + b[30] = byte((f.n[0] >> 8) & eightBitsMask) + b[29] = byte((f.n[0] >> 16) & eightBitsMask) + b[28] = byte((f.n[0]>>24)&twoBitsMask | (f.n[1]&sixBitsMask)<<2) + b[27] = byte((f.n[1] >> 6) & eightBitsMask) + b[26] = byte((f.n[1] >> 14) & eightBitsMask) + b[25] = byte((f.n[1]>>22)&fourBitsMask | (f.n[2]&fourBitsMask)<<4) + b[24] = byte((f.n[2] >> 4) & eightBitsMask) + b[23] = byte((f.n[2] >> 12) & eightBitsMask) + b[22] = byte((f.n[2]>>20)&sixBitsMask | (f.n[3]&twoBitsMask)<<6) + b[21] = byte((f.n[3] >> 2) & eightBitsMask) + b[20] = byte((f.n[3] >> 10) & eightBitsMask) + b[19] = byte((f.n[3] >> 18) & eightBitsMask) + b[18] = byte(f.n[4] & eightBitsMask) + b[17] = byte((f.n[4] >> 8) & eightBitsMask) + b[16] = byte((f.n[4] >> 16) & eightBitsMask) + b[15] = byte((f.n[4]>>24)&twoBitsMask | (f.n[5]&sixBitsMask)<<2) + b[14] = byte((f.n[5] >> 6) & eightBitsMask) + b[13] = byte((f.n[5] >> 14) & eightBitsMask) + b[12] = byte((f.n[5]>>22)&fourBitsMask | (f.n[6]&fourBitsMask)<<4) + b[11] = byte((f.n[6] >> 4) & eightBitsMask) + b[10] = byte((f.n[6] >> 12) & eightBitsMask) + b[9] = byte((f.n[6]>>20)&sixBitsMask | (f.n[7]&twoBitsMask)<<6) + b[8] = byte((f.n[7] >> 2) & eightBitsMask) + b[7] = byte((f.n[7] >> 10) & eightBitsMask) + b[6] = byte((f.n[7] >> 18) & eightBitsMask) + b[5] = byte(f.n[8] & eightBitsMask) + b[4] = byte((f.n[8] >> 8) & eightBitsMask) + b[3] = byte((f.n[8] >> 16) & eightBitsMask) + b[2] = byte((f.n[8]>>24)&twoBitsMask | (f.n[9]&sixBitsMask)<<2) + b[1] = byte((f.n[9] >> 6) & eightBitsMask) + b[0] = byte((f.n[9] >> 14) & eightBitsMask) +} + +// PutBytes unpacks the field value to a 32-byte big-endian value using the +// passed byte array in constant time. +// +// There is a similar function, PutBytesUnchecked, which unpacks the field value +// into a slice that must have at least 32 bytes available. This version is +// provided since it can be useful to write directly into an array that is type +// checked. +// +// Alternatively, there is also Bytes, which unpacks the field value into a new +// array and returns that which can sometimes be more ergonomic in applications +// that aren't concerned about an additional copy. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) PutBytes(b *[32]byte) { + f.PutBytesUnchecked(b[:]) +} + +// Bytes unpacks the field value to a 32-byte big-endian value in constant time. +// +// See PutBytes and PutBytesUnchecked for variants that allow an array or slice +// to be passed which can be useful to cut down on the number of allocations by +// allowing the caller to reuse a buffer or write directly into part of a larger +// buffer. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) Bytes() *[32]byte { + b := new([32]byte) + f.PutBytesUnchecked(b[:]) + return b +} + +// IsZeroBit returns 1 when the field value is equal to zero or 0 otherwise in +// constant time. +// +// Note that a bool is not used here because it is not possible in Go to convert +// from a bool to numeric value in constant time and many constant-time +// operations require a numeric value. See IsZero for the version that returns +// a bool. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) IsZeroBit() uint32 { + // The value can only be zero if no bits are set in any of the words. + // This is a constant time implementation. + bits := f.n[0] | f.n[1] | f.n[2] | f.n[3] | f.n[4] | + f.n[5] | f.n[6] | f.n[7] | f.n[8] | f.n[9] + + return constantTimeEq(bits, 0) +} + +// IsZero returns whether or not the field value is equal to zero in constant +// time. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) IsZero() bool { + // The value can only be zero if no bits are set in any of the words. + // This is a constant time implementation. + bits := f.n[0] | f.n[1] | f.n[2] | f.n[3] | f.n[4] | + f.n[5] | f.n[6] | f.n[7] | f.n[8] | f.n[9] + + return bits == 0 +} + +// IsOneBit returns 1 when the field value is equal to one or 0 otherwise in +// constant time. +// +// Note that a bool is not used here because it is not possible in Go to convert +// from a bool to numeric value in constant time and many constant-time +// operations require a numeric value. See IsOne for the version that returns a +// bool. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) IsOneBit() uint32 { + // The value can only be one if the single lowest significant bit is set in + // the first word and no other bits are set in any of the other words. + // This is a constant time implementation. + bits := (f.n[0] ^ 1) | f.n[1] | f.n[2] | f.n[3] | f.n[4] | f.n[5] | + f.n[6] | f.n[7] | f.n[8] | f.n[9] + + return constantTimeEq(bits, 0) +} + +// IsOne returns whether or not the field value is equal to one in constant +// time. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) IsOne() bool { + // The value can only be one if the single lowest significant bit is set in + // the first word and no other bits are set in any of the other words. + // This is a constant time implementation. + bits := (f.n[0] ^ 1) | f.n[1] | f.n[2] | f.n[3] | f.n[4] | f.n[5] | + f.n[6] | f.n[7] | f.n[8] | f.n[9] + + return bits == 0 +} + +// IsOddBit returns 1 when the field value is an odd number or 0 otherwise in +// constant time. +// +// Note that a bool is not used here because it is not possible in Go to convert +// from a bool to numeric value in constant time and many constant-time +// operations require a numeric value. See IsOdd for the version that returns a +// bool. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) IsOddBit() uint32 { + // Only odd numbers have the bottom bit set. + return f.n[0] & 1 +} + +// IsOdd returns whether or not the field value is an odd number in constant +// time. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) IsOdd() bool { + // Only odd numbers have the bottom bit set. + return f.n[0]&1 == 1 +} + +// Equals returns whether or not the two field values are the same in constant +// time. +// +// Preconditions: +// - Both field values being compared MUST be normalized +func (f *FieldVal) Equals(val *FieldVal) bool { + // Xor only sets bits when they are different, so the two field values + // can only be the same if no bits are set after xoring each word. + // This is a constant time implementation. + bits := (f.n[0] ^ val.n[0]) | (f.n[1] ^ val.n[1]) | (f.n[2] ^ val.n[2]) | + (f.n[3] ^ val.n[3]) | (f.n[4] ^ val.n[4]) | (f.n[5] ^ val.n[5]) | + (f.n[6] ^ val.n[6]) | (f.n[7] ^ val.n[7]) | (f.n[8] ^ val.n[8]) | + (f.n[9] ^ val.n[9]) + + return bits == 0 +} + +// NegateVal negates the passed value and stores the result in f in constant +// time. The caller must provide the magnitude of the passed value for a +// correct result. +// +// The field value is returned to support chaining. This enables syntax like: +// f.NegateVal(f2).AddInt(1) so that f = -f2 + 1. +// +// Preconditions: +// - The max magnitude MUST be 63 +// Output Normalized: No +// Output Max Magnitude: Input magnitude + 1 +func (f *FieldVal) NegateVal(val *FieldVal, magnitude uint32) *FieldVal { + // Negation in the field is just the prime minus the value. However, + // in order to allow negation against a field value without having to + // normalize/reduce it first, multiply by the magnitude (that is how + // "far" away it is from the normalized value) to adjust. Also, since + // negating a value pushes it one more order of magnitude away from the + // normalized range, add 1 to compensate. + // + // For some intuition here, imagine you're performing mod 12 arithmetic + // (picture a clock) and you are negating the number 7. So you start at + // 12 (which is of course 0 under mod 12) and count backwards (left on + // the clock) 7 times to arrive at 5. Notice this is just 12-7 = 5. + // Now, assume you're starting with 19, which is a number that is + // already larger than the modulus and congruent to 7 (mod 12). When a + // value is already in the desired range, its magnitude is 1. Since 19 + // is an additional "step", its magnitude (mod 12) is 2. Since any + // multiple of the modulus is congruent to zero (mod m), the answer can + // be shortcut by simply multiplying the magnitude by the modulus and + // subtracting. Keeping with the example, this would be (2*12)-19 = 5. + f.n[0] = (magnitude+1)*fieldPrimeWordZero - val.n[0] + f.n[1] = (magnitude+1)*fieldPrimeWordOne - val.n[1] + f.n[2] = (magnitude+1)*fieldBaseMask - val.n[2] + f.n[3] = (magnitude+1)*fieldBaseMask - val.n[3] + f.n[4] = (magnitude+1)*fieldBaseMask - val.n[4] + f.n[5] = (magnitude+1)*fieldBaseMask - val.n[5] + f.n[6] = (magnitude+1)*fieldBaseMask - val.n[6] + f.n[7] = (magnitude+1)*fieldBaseMask - val.n[7] + f.n[8] = (magnitude+1)*fieldBaseMask - val.n[8] + f.n[9] = (magnitude+1)*fieldMSBMask - val.n[9] + + return f +} + +// Negate negates the field value in constant time. The existing field value is +// modified. The caller must provide the magnitude of the field value for a +// correct result. +// +// The field value is returned to support chaining. This enables syntax like: +// f.Negate().AddInt(1) so that f = -f + 1. +// +// Preconditions: +// - The max magnitude MUST be 63 +// Output Normalized: No +// Output Max Magnitude: Input magnitude + 1 +func (f *FieldVal) Negate(magnitude uint32) *FieldVal { + return f.NegateVal(f, magnitude) +} + +// AddInt adds the passed integer to the existing field value and stores the +// result in f in constant time. This is a convenience function since it is +// fairly common to perform some arithmetic with small native integers. +// +// The field value is returned to support chaining. This enables syntax like: +// f.AddInt(1).Add(f2) so that f = f + 1 + f2. +// +// Preconditions: +// - The field value MUST have a max magnitude of 63 +// Output Normalized: No +// Output Max Magnitude: Existing field magnitude + 1 +func (f *FieldVal) AddInt(ui uint16) *FieldVal { + // Since the field representation intentionally provides overflow bits, + // it's ok to use carryless addition as the carry bit is safely part of + // the word and will be normalized out. + f.n[0] += uint32(ui) + + return f +} + +// Add adds the passed value to the existing field value and stores the result +// in f in constant time. +// +// The field value is returned to support chaining. This enables syntax like: +// f.Add(f2).AddInt(1) so that f = f + f2 + 1. +// +// Preconditions: +// - The sum of the magnitudes of the two field values MUST be a max of 64 +// Output Normalized: No +// Output Max Magnitude: Sum of the magnitude of the two individual field values +func (f *FieldVal) Add(val *FieldVal) *FieldVal { + // Since the field representation intentionally provides overflow bits, + // it's ok to use carryless addition as the carry bit is safely part of + // each word and will be normalized out. This could obviously be done + // in a loop, but the unrolled version is faster. + f.n[0] += val.n[0] + f.n[1] += val.n[1] + f.n[2] += val.n[2] + f.n[3] += val.n[3] + f.n[4] += val.n[4] + f.n[5] += val.n[5] + f.n[6] += val.n[6] + f.n[7] += val.n[7] + f.n[8] += val.n[8] + f.n[9] += val.n[9] + + return f +} + +// Add2 adds the passed two field values together and stores the result in f in +// constant time. +// +// The field value is returned to support chaining. This enables syntax like: +// f3.Add2(f, f2).AddInt(1) so that f3 = f + f2 + 1. +// +// Preconditions: +// - The sum of the magnitudes of the two field values MUST be a max of 64 +// Output Normalized: No +// Output Max Magnitude: Sum of the magnitude of the two field values +func (f *FieldVal) Add2(val *FieldVal, val2 *FieldVal) *FieldVal { + // Since the field representation intentionally provides overflow bits, + // it's ok to use carryless addition as the carry bit is safely part of + // each word and will be normalized out. This could obviously be done + // in a loop, but the unrolled version is faster. + f.n[0] = val.n[0] + val2.n[0] + f.n[1] = val.n[1] + val2.n[1] + f.n[2] = val.n[2] + val2.n[2] + f.n[3] = val.n[3] + val2.n[3] + f.n[4] = val.n[4] + val2.n[4] + f.n[5] = val.n[5] + val2.n[5] + f.n[6] = val.n[6] + val2.n[6] + f.n[7] = val.n[7] + val2.n[7] + f.n[8] = val.n[8] + val2.n[8] + f.n[9] = val.n[9] + val2.n[9] + + return f +} + +// MulInt multiplies the field value by the passed int and stores the result in +// f in constant time. Note that this function can overflow if multiplying the +// value by any of the individual words exceeds a max uint32. Therefore it is +// important that the caller ensures no overflows will occur before using this +// function. +// +// The field value is returned to support chaining. This enables syntax like: +// f.MulInt(2).Add(f2) so that f = 2 * f + f2. +// +// Preconditions: +// - The field value magnitude multiplied by given val MUST be a max of 64 +// Output Normalized: No +// Output Max Magnitude: Existing field magnitude times the provided integer val +func (f *FieldVal) MulInt(val uint8) *FieldVal { + // Since each word of the field representation can hold up to + // 32 - fieldBase extra bits which will be normalized out, it's safe + // to multiply each word without using a larger type or carry + // propagation so long as the values won't overflow a uint32. This + // could obviously be done in a loop, but the unrolled version is + // faster. + ui := uint32(val) + f.n[0] *= ui + f.n[1] *= ui + f.n[2] *= ui + f.n[3] *= ui + f.n[4] *= ui + f.n[5] *= ui + f.n[6] *= ui + f.n[7] *= ui + f.n[8] *= ui + f.n[9] *= ui + + return f +} + +// Mul multiplies the passed value to the existing field value and stores the +// result in f in constant time. Note that this function can overflow if +// multiplying any of the individual words exceeds a max uint32. In practice, +// this means the magnitude of either value involved in the multiplication must +// be a max of 8. +// +// The field value is returned to support chaining. This enables syntax like: +// f.Mul(f2).AddInt(1) so that f = (f * f2) + 1. +// +// Preconditions: +// - Both field values MUST have a max magnitude of 8 +// Output Normalized: No +// Output Max Magnitude: 1 +func (f *FieldVal) Mul(val *FieldVal) *FieldVal { + return f.Mul2(f, val) +} + +// Mul2 multiplies the passed two field values together and stores the result +// result in f in constant time. Note that this function can overflow if +// multiplying any of the individual words exceeds a max uint32. In practice, +// this means the magnitude of either value involved in the multiplication must +// be a max of 8. +// +// The field value is returned to support chaining. This enables syntax like: +// f3.Mul2(f, f2).AddInt(1) so that f3 = (f * f2) + 1. +// +// Preconditions: +// - Both input field values MUST have a max magnitude of 8 +// Output Normalized: No +// Output Max Magnitude: 1 +func (f *FieldVal) Mul2(val *FieldVal, val2 *FieldVal) *FieldVal { + // This could be done with a couple of for loops and an array to store + // the intermediate terms, but this unrolled version is significantly + // faster. + + // Terms for 2^(fieldBase*0). + m := uint64(val.n[0]) * uint64(val2.n[0]) + t0 := m & fieldBaseMask + + // Terms for 2^(fieldBase*1). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[1]) + + uint64(val.n[1])*uint64(val2.n[0]) + t1 := m & fieldBaseMask + + // Terms for 2^(fieldBase*2). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[2]) + + uint64(val.n[1])*uint64(val2.n[1]) + + uint64(val.n[2])*uint64(val2.n[0]) + t2 := m & fieldBaseMask + + // Terms for 2^(fieldBase*3). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[3]) + + uint64(val.n[1])*uint64(val2.n[2]) + + uint64(val.n[2])*uint64(val2.n[1]) + + uint64(val.n[3])*uint64(val2.n[0]) + t3 := m & fieldBaseMask + + // Terms for 2^(fieldBase*4). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[4]) + + uint64(val.n[1])*uint64(val2.n[3]) + + uint64(val.n[2])*uint64(val2.n[2]) + + uint64(val.n[3])*uint64(val2.n[1]) + + uint64(val.n[4])*uint64(val2.n[0]) + t4 := m & fieldBaseMask + + // Terms for 2^(fieldBase*5). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[5]) + + uint64(val.n[1])*uint64(val2.n[4]) + + uint64(val.n[2])*uint64(val2.n[3]) + + uint64(val.n[3])*uint64(val2.n[2]) + + uint64(val.n[4])*uint64(val2.n[1]) + + uint64(val.n[5])*uint64(val2.n[0]) + t5 := m & fieldBaseMask + + // Terms for 2^(fieldBase*6). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[6]) + + uint64(val.n[1])*uint64(val2.n[5]) + + uint64(val.n[2])*uint64(val2.n[4]) + + uint64(val.n[3])*uint64(val2.n[3]) + + uint64(val.n[4])*uint64(val2.n[2]) + + uint64(val.n[5])*uint64(val2.n[1]) + + uint64(val.n[6])*uint64(val2.n[0]) + t6 := m & fieldBaseMask + + // Terms for 2^(fieldBase*7). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[7]) + + uint64(val.n[1])*uint64(val2.n[6]) + + uint64(val.n[2])*uint64(val2.n[5]) + + uint64(val.n[3])*uint64(val2.n[4]) + + uint64(val.n[4])*uint64(val2.n[3]) + + uint64(val.n[5])*uint64(val2.n[2]) + + uint64(val.n[6])*uint64(val2.n[1]) + + uint64(val.n[7])*uint64(val2.n[0]) + t7 := m & fieldBaseMask + + // Terms for 2^(fieldBase*8). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[8]) + + uint64(val.n[1])*uint64(val2.n[7]) + + uint64(val.n[2])*uint64(val2.n[6]) + + uint64(val.n[3])*uint64(val2.n[5]) + + uint64(val.n[4])*uint64(val2.n[4]) + + uint64(val.n[5])*uint64(val2.n[3]) + + uint64(val.n[6])*uint64(val2.n[2]) + + uint64(val.n[7])*uint64(val2.n[1]) + + uint64(val.n[8])*uint64(val2.n[0]) + t8 := m & fieldBaseMask + + // Terms for 2^(fieldBase*9). + m = (m >> fieldBase) + + uint64(val.n[0])*uint64(val2.n[9]) + + uint64(val.n[1])*uint64(val2.n[8]) + + uint64(val.n[2])*uint64(val2.n[7]) + + uint64(val.n[3])*uint64(val2.n[6]) + + uint64(val.n[4])*uint64(val2.n[5]) + + uint64(val.n[5])*uint64(val2.n[4]) + + uint64(val.n[6])*uint64(val2.n[3]) + + uint64(val.n[7])*uint64(val2.n[2]) + + uint64(val.n[8])*uint64(val2.n[1]) + + uint64(val.n[9])*uint64(val2.n[0]) + t9 := m & fieldBaseMask + + // Terms for 2^(fieldBase*10). + m = (m >> fieldBase) + + uint64(val.n[1])*uint64(val2.n[9]) + + uint64(val.n[2])*uint64(val2.n[8]) + + uint64(val.n[3])*uint64(val2.n[7]) + + uint64(val.n[4])*uint64(val2.n[6]) + + uint64(val.n[5])*uint64(val2.n[5]) + + uint64(val.n[6])*uint64(val2.n[4]) + + uint64(val.n[7])*uint64(val2.n[3]) + + uint64(val.n[8])*uint64(val2.n[2]) + + uint64(val.n[9])*uint64(val2.n[1]) + t10 := m & fieldBaseMask + + // Terms for 2^(fieldBase*11). + m = (m >> fieldBase) + + uint64(val.n[2])*uint64(val2.n[9]) + + uint64(val.n[3])*uint64(val2.n[8]) + + uint64(val.n[4])*uint64(val2.n[7]) + + uint64(val.n[5])*uint64(val2.n[6]) + + uint64(val.n[6])*uint64(val2.n[5]) + + uint64(val.n[7])*uint64(val2.n[4]) + + uint64(val.n[8])*uint64(val2.n[3]) + + uint64(val.n[9])*uint64(val2.n[2]) + t11 := m & fieldBaseMask + + // Terms for 2^(fieldBase*12). + m = (m >> fieldBase) + + uint64(val.n[3])*uint64(val2.n[9]) + + uint64(val.n[4])*uint64(val2.n[8]) + + uint64(val.n[5])*uint64(val2.n[7]) + + uint64(val.n[6])*uint64(val2.n[6]) + + uint64(val.n[7])*uint64(val2.n[5]) + + uint64(val.n[8])*uint64(val2.n[4]) + + uint64(val.n[9])*uint64(val2.n[3]) + t12 := m & fieldBaseMask + + // Terms for 2^(fieldBase*13). + m = (m >> fieldBase) + + uint64(val.n[4])*uint64(val2.n[9]) + + uint64(val.n[5])*uint64(val2.n[8]) + + uint64(val.n[6])*uint64(val2.n[7]) + + uint64(val.n[7])*uint64(val2.n[6]) + + uint64(val.n[8])*uint64(val2.n[5]) + + uint64(val.n[9])*uint64(val2.n[4]) + t13 := m & fieldBaseMask + + // Terms for 2^(fieldBase*14). + m = (m >> fieldBase) + + uint64(val.n[5])*uint64(val2.n[9]) + + uint64(val.n[6])*uint64(val2.n[8]) + + uint64(val.n[7])*uint64(val2.n[7]) + + uint64(val.n[8])*uint64(val2.n[6]) + + uint64(val.n[9])*uint64(val2.n[5]) + t14 := m & fieldBaseMask + + // Terms for 2^(fieldBase*15). + m = (m >> fieldBase) + + uint64(val.n[6])*uint64(val2.n[9]) + + uint64(val.n[7])*uint64(val2.n[8]) + + uint64(val.n[8])*uint64(val2.n[7]) + + uint64(val.n[9])*uint64(val2.n[6]) + t15 := m & fieldBaseMask + + // Terms for 2^(fieldBase*16). + m = (m >> fieldBase) + + uint64(val.n[7])*uint64(val2.n[9]) + + uint64(val.n[8])*uint64(val2.n[8]) + + uint64(val.n[9])*uint64(val2.n[7]) + t16 := m & fieldBaseMask + + // Terms for 2^(fieldBase*17). + m = (m >> fieldBase) + + uint64(val.n[8])*uint64(val2.n[9]) + + uint64(val.n[9])*uint64(val2.n[8]) + t17 := m & fieldBaseMask + + // Terms for 2^(fieldBase*18). + m = (m >> fieldBase) + uint64(val.n[9])*uint64(val2.n[9]) + t18 := m & fieldBaseMask + + // What's left is for 2^(fieldBase*19). + t19 := m >> fieldBase + + // At this point, all of the terms are grouped into their respective + // base. + // + // Per [HAC] section 14.3.4: Reduction method of moduli of special form, + // when the modulus is of the special form m = b^t - c, highly efficient + // reduction can be achieved per the provided algorithm. + // + // The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits + // this criteria. + // + // 4294968273 in field representation (base 2^26) is: + // n[0] = 977 + // n[1] = 64 + // That is to say (2^26 * 64) + 977 = 4294968273 + // + // Since each word is in base 26, the upper terms (t10 and up) start + // at 260 bits (versus the final desired range of 256 bits), so the + // field representation of 'c' from above needs to be adjusted for the + // extra 4 bits by multiplying it by 2^4 = 16. 4294968273 * 16 = + // 68719492368. Thus, the adjusted field representation of 'c' is: + // n[0] = 977 * 16 = 15632 + // n[1] = 64 * 16 = 1024 + // That is to say (2^26 * 1024) + 15632 = 68719492368 + // + // To reduce the final term, t19, the entire 'c' value is needed instead + // of only n[0] because there are no more terms left to handle n[1]. + // This means there might be some magnitude left in the upper bits that + // is handled below. + m = t0 + t10*15632 + t0 = m & fieldBaseMask + m = (m >> fieldBase) + t1 + t10*1024 + t11*15632 + t1 = m & fieldBaseMask + m = (m >> fieldBase) + t2 + t11*1024 + t12*15632 + t2 = m & fieldBaseMask + m = (m >> fieldBase) + t3 + t12*1024 + t13*15632 + t3 = m & fieldBaseMask + m = (m >> fieldBase) + t4 + t13*1024 + t14*15632 + t4 = m & fieldBaseMask + m = (m >> fieldBase) + t5 + t14*1024 + t15*15632 + t5 = m & fieldBaseMask + m = (m >> fieldBase) + t6 + t15*1024 + t16*15632 + t6 = m & fieldBaseMask + m = (m >> fieldBase) + t7 + t16*1024 + t17*15632 + t7 = m & fieldBaseMask + m = (m >> fieldBase) + t8 + t17*1024 + t18*15632 + t8 = m & fieldBaseMask + m = (m >> fieldBase) + t9 + t18*1024 + t19*68719492368 + t9 = m & fieldMSBMask + m = m >> fieldMSBBits + + // At this point, if the magnitude is greater than 0, the overall value + // is greater than the max possible 256-bit value. In particular, it is + // "how many times larger" than the max value it is. + // + // The algorithm presented in [HAC] section 14.3.4 repeats until the + // quotient is zero. However, due to the above, we already know at + // least how many times we would need to repeat as it's the value + // currently in m. Thus we can simply multiply the magnitude by the + // field representation of the prime and do a single iteration. Notice + // that nothing will be changed when the magnitude is zero, so we could + // skip this in that case, however always running regardless allows it + // to run in constant time. The final result will be in the range + // 0 <= result <= prime + (2^64 - c), so it is guaranteed to have a + // magnitude of 1, but it is denormalized. + d := t0 + m*977 + f.n[0] = uint32(d & fieldBaseMask) + d = (d >> fieldBase) + t1 + m*64 + f.n[1] = uint32(d & fieldBaseMask) + f.n[2] = uint32((d >> fieldBase) + t2) + f.n[3] = uint32(t3) + f.n[4] = uint32(t4) + f.n[5] = uint32(t5) + f.n[6] = uint32(t6) + f.n[7] = uint32(t7) + f.n[8] = uint32(t8) + f.n[9] = uint32(t9) + + return f +} + +// SquareRootVal either calculates the square root of the passed value when it +// exists or the square root of the negation of the value when it does not exist +// and stores the result in f in constant time. The return flag is true when +// the calculated square root is for the passed value itself and false when it +// is for its negation. +// +// Note that this function can overflow if multiplying any of the individual +// words exceeds a max uint32. In practice, this means the magnitude of the +// field must be a max of 8 to prevent overflow. The magnitude of the result +// will be 1. +// +// Preconditions: +// - The input field value MUST have a max magnitude of 8 +// Output Normalized: No +// Output Max Magnitude: 1 +func (f *FieldVal) SquareRootVal(val *FieldVal) bool { + // This uses the Tonelli-Shanks method for calculating the square root of + // the value when it exists. The key principles of the method follow. + // + // Fermat's little theorem states that for a nonzero number 'a' and prime + // 'p', a^(p-1) ≡ 1 (mod p). + // + // Further, Euler's criterion states that an integer 'a' has a square root + // (aka is a quadratic residue) modulo a prime if a^((p-1)/2) ≡ 1 (mod p) + // and, conversely, when it does NOT have a square root (aka 'a' is a + // non-residue) a^((p-1)/2) ≡ -1 (mod p). + // + // This can be seen by considering that Fermat's little theorem can be + // written as (a^((p-1)/2) - 1)(a^((p-1)/2) + 1) ≡ 0 (mod p). Therefore, + // one of the two factors must be 0. Then, when a ≡ x^2 (aka 'a' is a + // quadratic residue), (x^2)^((p-1)/2) ≡ x^(p-1) ≡ 1 (mod p) which implies + // the first factor must be zero. Finally, per Lagrange's theorem, the + // non-residues are the only remaining possible solutions and thus must make + // the second factor zero to satisfy Fermat's little theorem implying that + // a^((p-1)/2) ≡ -1 (mod p) for that case. + // + // The Tonelli-Shanks method uses these facts along with factoring out + // powers of two to solve a congruence that results in either the solution + // when the square root exists or the square root of the negation of the + // value when it does not. In the case of primes that are ≡ 3 (mod 4), the + // possible solutions are r = ±a^((p+1)/4) (mod p). Therefore, either r^2 ≡ + // a (mod p) is true in which case ±r are the two solutions, or r^2 ≡ -a + // (mod p) in which case 'a' is a non-residue and there are no solutions. + // + // The secp256k1 prime is ≡ 3 (mod 4), so this result applies. + // + // In other words, calculate a^((p+1)/4) and then square it and check it + // against the original value to determine if it is actually the square + // root. + // + // In order to efficiently compute a^((p+1)/4), (p+1)/4 needs to be split + // into a sequence of squares and multiplications that minimizes the number + // of multiplications needed (since they are more costly than squarings). + // + // The secp256k1 prime + 1 / 4 is 2^254 - 2^30 - 244. In binary, that is: + // + // 00111111 11111111 11111111 11111111 + // 11111111 11111111 11111111 11111111 + // 11111111 11111111 11111111 11111111 + // 11111111 11111111 11111111 11111111 + // 11111111 11111111 11111111 11111111 + // 11111111 11111111 11111111 11111111 + // 11111111 11111111 11111111 11111111 + // 10111111 11111111 11111111 00001100 + // + // Notice that can be broken up into three windows of consecutive 1s (in + // order of least to most signifcant) as: + // + // 6-bit window with two bits set (bits 4, 5, 6, 7 unset) + // 23-bit window with 22 bits set (bit 30 unset) + // 223-bit window with all 223 bits set + // + // Thus, the groups of 1 bits in each window forms the set: + // S = {2, 22, 223}. + // + // The strategy is to calculate a^(2^n - 1) for each grouping via an + // addition chain with a sliding window. + // + // The addition chain used is (credits to Peter Dettman): + // (0,0),(1,0),(2,2),(3,2),(4,1),(5,5),(6,6),(7,7),(8,8),(9,7),(10,2) + // => 2^1 2^[2] 2^3 2^6 2^9 2^11 2^[22] 2^44 2^88 2^176 2^220 2^[223] + // + // This has a cost of 254 field squarings and 13 field multiplications. + var a, a2, a3, a6, a9, a11, a22, a44, a88, a176, a220, a223 FieldVal + a.Set(val) + a2.SquareVal(&a).Mul(&a) // a2 = a^(2^2 - 1) + a3.SquareVal(&a2).Mul(&a) // a3 = a^(2^3 - 1) + a6.SquareVal(&a3).Square().Square() // a6 = a^(2^6 - 2^3) + a6.Mul(&a3) // a6 = a^(2^6 - 1) + a9.SquareVal(&a6).Square().Square() // a9 = a^(2^9 - 2^3) + a9.Mul(&a3) // a9 = a^(2^9 - 1) + a11.SquareVal(&a9).Square() // a11 = a^(2^11 - 2^2) + a11.Mul(&a2) // a11 = a^(2^11 - 1) + a22.SquareVal(&a11).Square().Square().Square().Square() // a22 = a^(2^16 - 2^5) + a22.Square().Square().Square().Square().Square() // a22 = a^(2^21 - 2^10) + a22.Square() // a22 = a^(2^22 - 2^11) + a22.Mul(&a11) // a22 = a^(2^22 - 1) + a44.SquareVal(&a22).Square().Square().Square().Square() // a44 = a^(2^27 - 2^5) + a44.Square().Square().Square().Square().Square() // a44 = a^(2^32 - 2^10) + a44.Square().Square().Square().Square().Square() // a44 = a^(2^37 - 2^15) + a44.Square().Square().Square().Square().Square() // a44 = a^(2^42 - 2^20) + a44.Square().Square() // a44 = a^(2^44 - 2^22) + a44.Mul(&a22) // a44 = a^(2^44 - 1) + a88.SquareVal(&a44).Square().Square().Square().Square() // a88 = a^(2^49 - 2^5) + a88.Square().Square().Square().Square().Square() // a88 = a^(2^54 - 2^10) + a88.Square().Square().Square().Square().Square() // a88 = a^(2^59 - 2^15) + a88.Square().Square().Square().Square().Square() // a88 = a^(2^64 - 2^20) + a88.Square().Square().Square().Square().Square() // a88 = a^(2^69 - 2^25) + a88.Square().Square().Square().Square().Square() // a88 = a^(2^74 - 2^30) + a88.Square().Square().Square().Square().Square() // a88 = a^(2^79 - 2^35) + a88.Square().Square().Square().Square().Square() // a88 = a^(2^84 - 2^40) + a88.Square().Square().Square().Square() // a88 = a^(2^88 - 2^44) + a88.Mul(&a44) // a88 = a^(2^88 - 1) + a176.SquareVal(&a88).Square().Square().Square().Square() // a176 = a^(2^93 - 2^5) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^98 - 2^10) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^103 - 2^15) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^108 - 2^20) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^113 - 2^25) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^118 - 2^30) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^123 - 2^35) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^128 - 2^40) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^133 - 2^45) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^138 - 2^50) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^143 - 2^55) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^148 - 2^60) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^153 - 2^65) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^158 - 2^70) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^163 - 2^75) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^168 - 2^80) + a176.Square().Square().Square().Square().Square() // a176 = a^(2^173 - 2^85) + a176.Square().Square().Square() // a176 = a^(2^176 - 2^88) + a176.Mul(&a88) // a176 = a^(2^176 - 1) + a220.SquareVal(&a176).Square().Square().Square().Square() // a220 = a^(2^181 - 2^5) + a220.Square().Square().Square().Square().Square() // a220 = a^(2^186 - 2^10) + a220.Square().Square().Square().Square().Square() // a220 = a^(2^191 - 2^15) + a220.Square().Square().Square().Square().Square() // a220 = a^(2^196 - 2^20) + a220.Square().Square().Square().Square().Square() // a220 = a^(2^201 - 2^25) + a220.Square().Square().Square().Square().Square() // a220 = a^(2^206 - 2^30) + a220.Square().Square().Square().Square().Square() // a220 = a^(2^211 - 2^35) + a220.Square().Square().Square().Square().Square() // a220 = a^(2^216 - 2^40) + a220.Square().Square().Square().Square() // a220 = a^(2^220 - 2^44) + a220.Mul(&a44) // a220 = a^(2^220 - 1) + a223.SquareVal(&a220).Square().Square() // a223 = a^(2^223 - 2^3) + a223.Mul(&a3) // a223 = a^(2^223 - 1) + + f.SquareVal(&a223).Square().Square().Square().Square() // f = a^(2^228 - 2^5) + f.Square().Square().Square().Square().Square() // f = a^(2^233 - 2^10) + f.Square().Square().Square().Square().Square() // f = a^(2^238 - 2^15) + f.Square().Square().Square().Square().Square() // f = a^(2^243 - 2^20) + f.Square().Square().Square() // f = a^(2^246 - 2^23) + f.Mul(&a22) // f = a^(2^246 - 2^22 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^251 - 2^27 - 2^5) + f.Square() // f = a^(2^252 - 2^28 - 2^6) + f.Mul(&a2) // f = a^(2^252 - 2^28 - 2^6 - 2^1 - 1) + f.Square().Square() // f = a^(2^254 - 2^30 - 2^8 - 2^3 - 2^2) + // // = a^(2^254 - 2^30 - 244) + // // = a^((p+1)/4) + + // Ensure the calculated result is actually the square root by squaring it + // and checking against the original value. + var sqr FieldVal + return sqr.SquareVal(f).Normalize().Equals(val.Normalize()) +} + +// Square squares the field value in constant time. The existing field value is +// modified. Note that this function can overflow if multiplying any of the +// individual words exceeds a max uint32. In practice, this means the magnitude +// of the field must be a max of 8 to prevent overflow. +// +// The field value is returned to support chaining. This enables syntax like: +// f.Square().Mul(f2) so that f = f^2 * f2. +// +// Preconditions: +// - The field value MUST have a max magnitude of 8 +// Output Normalized: No +// Output Max Magnitude: 1 +func (f *FieldVal) Square() *FieldVal { + return f.SquareVal(f) +} + +// SquareVal squares the passed value and stores the result in f in constant +// time. Note that this function can overflow if multiplying any of the +// individual words exceeds a max uint32. In practice, this means the magnitude +// of the field being squared must be a max of 8 to prevent overflow. +// +// The field value is returned to support chaining. This enables syntax like: +// f3.SquareVal(f).Mul(f) so that f3 = f^2 * f = f^3. +// +// Preconditions: +// - The input field value MUST have a max magnitude of 8 +// Output Normalized: No +// Output Max Magnitude: 1 +func (f *FieldVal) SquareVal(val *FieldVal) *FieldVal { + // This could be done with a couple of for loops and an array to store + // the intermediate terms, but this unrolled version is significantly + // faster. + + // Terms for 2^(fieldBase*0). + m := uint64(val.n[0]) * uint64(val.n[0]) + t0 := m & fieldBaseMask + + // Terms for 2^(fieldBase*1). + m = (m >> fieldBase) + 2*uint64(val.n[0])*uint64(val.n[1]) + t1 := m & fieldBaseMask + + // Terms for 2^(fieldBase*2). + m = (m >> fieldBase) + + 2*uint64(val.n[0])*uint64(val.n[2]) + + uint64(val.n[1])*uint64(val.n[1]) + t2 := m & fieldBaseMask + + // Terms for 2^(fieldBase*3). + m = (m >> fieldBase) + + 2*uint64(val.n[0])*uint64(val.n[3]) + + 2*uint64(val.n[1])*uint64(val.n[2]) + t3 := m & fieldBaseMask + + // Terms for 2^(fieldBase*4). + m = (m >> fieldBase) + + 2*uint64(val.n[0])*uint64(val.n[4]) + + 2*uint64(val.n[1])*uint64(val.n[3]) + + uint64(val.n[2])*uint64(val.n[2]) + t4 := m & fieldBaseMask + + // Terms for 2^(fieldBase*5). + m = (m >> fieldBase) + + 2*uint64(val.n[0])*uint64(val.n[5]) + + 2*uint64(val.n[1])*uint64(val.n[4]) + + 2*uint64(val.n[2])*uint64(val.n[3]) + t5 := m & fieldBaseMask + + // Terms for 2^(fieldBase*6). + m = (m >> fieldBase) + + 2*uint64(val.n[0])*uint64(val.n[6]) + + 2*uint64(val.n[1])*uint64(val.n[5]) + + 2*uint64(val.n[2])*uint64(val.n[4]) + + uint64(val.n[3])*uint64(val.n[3]) + t6 := m & fieldBaseMask + + // Terms for 2^(fieldBase*7). + m = (m >> fieldBase) + + 2*uint64(val.n[0])*uint64(val.n[7]) + + 2*uint64(val.n[1])*uint64(val.n[6]) + + 2*uint64(val.n[2])*uint64(val.n[5]) + + 2*uint64(val.n[3])*uint64(val.n[4]) + t7 := m & fieldBaseMask + + // Terms for 2^(fieldBase*8). + m = (m >> fieldBase) + + 2*uint64(val.n[0])*uint64(val.n[8]) + + 2*uint64(val.n[1])*uint64(val.n[7]) + + 2*uint64(val.n[2])*uint64(val.n[6]) + + 2*uint64(val.n[3])*uint64(val.n[5]) + + uint64(val.n[4])*uint64(val.n[4]) + t8 := m & fieldBaseMask + + // Terms for 2^(fieldBase*9). + m = (m >> fieldBase) + + 2*uint64(val.n[0])*uint64(val.n[9]) + + 2*uint64(val.n[1])*uint64(val.n[8]) + + 2*uint64(val.n[2])*uint64(val.n[7]) + + 2*uint64(val.n[3])*uint64(val.n[6]) + + 2*uint64(val.n[4])*uint64(val.n[5]) + t9 := m & fieldBaseMask + + // Terms for 2^(fieldBase*10). + m = (m >> fieldBase) + + 2*uint64(val.n[1])*uint64(val.n[9]) + + 2*uint64(val.n[2])*uint64(val.n[8]) + + 2*uint64(val.n[3])*uint64(val.n[7]) + + 2*uint64(val.n[4])*uint64(val.n[6]) + + uint64(val.n[5])*uint64(val.n[5]) + t10 := m & fieldBaseMask + + // Terms for 2^(fieldBase*11). + m = (m >> fieldBase) + + 2*uint64(val.n[2])*uint64(val.n[9]) + + 2*uint64(val.n[3])*uint64(val.n[8]) + + 2*uint64(val.n[4])*uint64(val.n[7]) + + 2*uint64(val.n[5])*uint64(val.n[6]) + t11 := m & fieldBaseMask + + // Terms for 2^(fieldBase*12). + m = (m >> fieldBase) + + 2*uint64(val.n[3])*uint64(val.n[9]) + + 2*uint64(val.n[4])*uint64(val.n[8]) + + 2*uint64(val.n[5])*uint64(val.n[7]) + + uint64(val.n[6])*uint64(val.n[6]) + t12 := m & fieldBaseMask + + // Terms for 2^(fieldBase*13). + m = (m >> fieldBase) + + 2*uint64(val.n[4])*uint64(val.n[9]) + + 2*uint64(val.n[5])*uint64(val.n[8]) + + 2*uint64(val.n[6])*uint64(val.n[7]) + t13 := m & fieldBaseMask + + // Terms for 2^(fieldBase*14). + m = (m >> fieldBase) + + 2*uint64(val.n[5])*uint64(val.n[9]) + + 2*uint64(val.n[6])*uint64(val.n[8]) + + uint64(val.n[7])*uint64(val.n[7]) + t14 := m & fieldBaseMask + + // Terms for 2^(fieldBase*15). + m = (m >> fieldBase) + + 2*uint64(val.n[6])*uint64(val.n[9]) + + 2*uint64(val.n[7])*uint64(val.n[8]) + t15 := m & fieldBaseMask + + // Terms for 2^(fieldBase*16). + m = (m >> fieldBase) + + 2*uint64(val.n[7])*uint64(val.n[9]) + + uint64(val.n[8])*uint64(val.n[8]) + t16 := m & fieldBaseMask + + // Terms for 2^(fieldBase*17). + m = (m >> fieldBase) + 2*uint64(val.n[8])*uint64(val.n[9]) + t17 := m & fieldBaseMask + + // Terms for 2^(fieldBase*18). + m = (m >> fieldBase) + uint64(val.n[9])*uint64(val.n[9]) + t18 := m & fieldBaseMask + + // What's left is for 2^(fieldBase*19). + t19 := m >> fieldBase + + // At this point, all of the terms are grouped into their respective + // base. + // + // Per [HAC] section 14.3.4: Reduction method of moduli of special form, + // when the modulus is of the special form m = b^t - c, highly efficient + // reduction can be achieved per the provided algorithm. + // + // The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits + // this criteria. + // + // 4294968273 in field representation (base 2^26) is: + // n[0] = 977 + // n[1] = 64 + // That is to say (2^26 * 64) + 977 = 4294968273 + // + // Since each word is in base 26, the upper terms (t10 and up) start + // at 260 bits (versus the final desired range of 256 bits), so the + // field representation of 'c' from above needs to be adjusted for the + // extra 4 bits by multiplying it by 2^4 = 16. 4294968273 * 16 = + // 68719492368. Thus, the adjusted field representation of 'c' is: + // n[0] = 977 * 16 = 15632 + // n[1] = 64 * 16 = 1024 + // That is to say (2^26 * 1024) + 15632 = 68719492368 + // + // To reduce the final term, t19, the entire 'c' value is needed instead + // of only n[0] because there are no more terms left to handle n[1]. + // This means there might be some magnitude left in the upper bits that + // is handled below. + m = t0 + t10*15632 + t0 = m & fieldBaseMask + m = (m >> fieldBase) + t1 + t10*1024 + t11*15632 + t1 = m & fieldBaseMask + m = (m >> fieldBase) + t2 + t11*1024 + t12*15632 + t2 = m & fieldBaseMask + m = (m >> fieldBase) + t3 + t12*1024 + t13*15632 + t3 = m & fieldBaseMask + m = (m >> fieldBase) + t4 + t13*1024 + t14*15632 + t4 = m & fieldBaseMask + m = (m >> fieldBase) + t5 + t14*1024 + t15*15632 + t5 = m & fieldBaseMask + m = (m >> fieldBase) + t6 + t15*1024 + t16*15632 + t6 = m & fieldBaseMask + m = (m >> fieldBase) + t7 + t16*1024 + t17*15632 + t7 = m & fieldBaseMask + m = (m >> fieldBase) + t8 + t17*1024 + t18*15632 + t8 = m & fieldBaseMask + m = (m >> fieldBase) + t9 + t18*1024 + t19*68719492368 + t9 = m & fieldMSBMask + m = m >> fieldMSBBits + + // At this point, if the magnitude is greater than 0, the overall value + // is greater than the max possible 256-bit value. In particular, it is + // "how many times larger" than the max value it is. + // + // The algorithm presented in [HAC] section 14.3.4 repeats until the + // quotient is zero. However, due to the above, we already know at + // least how many times we would need to repeat as it's the value + // currently in m. Thus we can simply multiply the magnitude by the + // field representation of the prime and do a single iteration. Notice + // that nothing will be changed when the magnitude is zero, so we could + // skip this in that case, however always running regardless allows it + // to run in constant time. The final result will be in the range + // 0 <= result <= prime + (2^64 - c), so it is guaranteed to have a + // magnitude of 1, but it is denormalized. + n := t0 + m*977 + f.n[0] = uint32(n & fieldBaseMask) + n = (n >> fieldBase) + t1 + m*64 + f.n[1] = uint32(n & fieldBaseMask) + f.n[2] = uint32((n >> fieldBase) + t2) + f.n[3] = uint32(t3) + f.n[4] = uint32(t4) + f.n[5] = uint32(t5) + f.n[6] = uint32(t6) + f.n[7] = uint32(t7) + f.n[8] = uint32(t8) + f.n[9] = uint32(t9) + + return f +} + +// Inverse finds the modular multiplicative inverse of the field value in +// constant time. The existing field value is modified. +// +// The field value is returned to support chaining. This enables syntax like: +// f.Inverse().Mul(f2) so that f = f^-1 * f2. +// +// Preconditions: +// - The field value MUST have a max magnitude of 8 +// Output Normalized: No +// Output Max Magnitude: 1 +func (f *FieldVal) Inverse() *FieldVal { + // Fermat's little theorem states that for a nonzero number a and prime + // prime p, a^(p-1) = 1 (mod p). Since the multiplicative inverse is + // a*b = 1 (mod p), it follows that b = a*a^(p-2) = a^(p-1) = 1 (mod p). + // Thus, a^(p-2) is the multiplicative inverse. + // + // In order to efficiently compute a^(p-2), p-2 needs to be split into + // a sequence of squares and multiplications that minimizes the number + // of multiplications needed (since they are more costly than + // squarings). Intermediate results are saved and reused as well. + // + // The secp256k1 prime - 2 is 2^256 - 4294968275. + // + // This has a cost of 258 field squarings and 33 field multiplications. + var a2, a3, a4, a10, a11, a21, a42, a45, a63, a1019, a1023 FieldVal + a2.SquareVal(f) + a3.Mul2(&a2, f) + a4.SquareVal(&a2) + a10.SquareVal(&a4).Mul(&a2) + a11.Mul2(&a10, f) + a21.Mul2(&a10, &a11) + a42.SquareVal(&a21) + a45.Mul2(&a42, &a3) + a63.Mul2(&a42, &a21) + a1019.SquareVal(&a63).Square().Square().Square().Mul(&a11) + a1023.Mul2(&a1019, &a4) + f.Set(&a63) // f = a^(2^6 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^11 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^16 - 1024) + f.Mul(&a1023) // f = a^(2^16 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^21 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^26 - 1024) + f.Mul(&a1023) // f = a^(2^26 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^31 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^36 - 1024) + f.Mul(&a1023) // f = a^(2^36 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^41 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^46 - 1024) + f.Mul(&a1023) // f = a^(2^46 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^51 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^56 - 1024) + f.Mul(&a1023) // f = a^(2^56 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^61 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^66 - 1024) + f.Mul(&a1023) // f = a^(2^66 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^71 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^76 - 1024) + f.Mul(&a1023) // f = a^(2^76 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^81 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^86 - 1024) + f.Mul(&a1023) // f = a^(2^86 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^91 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^96 - 1024) + f.Mul(&a1023) // f = a^(2^96 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^101 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^106 - 1024) + f.Mul(&a1023) // f = a^(2^106 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^111 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^116 - 1024) + f.Mul(&a1023) // f = a^(2^116 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^121 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^126 - 1024) + f.Mul(&a1023) // f = a^(2^126 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^131 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^136 - 1024) + f.Mul(&a1023) // f = a^(2^136 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^141 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^146 - 1024) + f.Mul(&a1023) // f = a^(2^146 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^151 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^156 - 1024) + f.Mul(&a1023) // f = a^(2^156 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^161 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^166 - 1024) + f.Mul(&a1023) // f = a^(2^166 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^171 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^176 - 1024) + f.Mul(&a1023) // f = a^(2^176 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^181 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^186 - 1024) + f.Mul(&a1023) // f = a^(2^186 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^191 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^196 - 1024) + f.Mul(&a1023) // f = a^(2^196 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^201 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^206 - 1024) + f.Mul(&a1023) // f = a^(2^206 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^211 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^216 - 1024) + f.Mul(&a1023) // f = a^(2^216 - 1) + f.Square().Square().Square().Square().Square() // f = a^(2^221 - 32) + f.Square().Square().Square().Square().Square() // f = a^(2^226 - 1024) + f.Mul(&a1019) // f = a^(2^226 - 5) + f.Square().Square().Square().Square().Square() // f = a^(2^231 - 160) + f.Square().Square().Square().Square().Square() // f = a^(2^236 - 5120) + f.Mul(&a1023) // f = a^(2^236 - 4097) + f.Square().Square().Square().Square().Square() // f = a^(2^241 - 131104) + f.Square().Square().Square().Square().Square() // f = a^(2^246 - 4195328) + f.Mul(&a1023) // f = a^(2^246 - 4194305) + f.Square().Square().Square().Square().Square() // f = a^(2^251 - 134217760) + f.Square().Square().Square().Square().Square() // f = a^(2^256 - 4294968320) + return f.Mul(&a45) // f = a^(2^256 - 4294968275) = a^(p-2) +} + +// IsGtOrEqPrimeMinusOrder returns whether or not the field value exceeds the +// group order divided by 2 in constant time. +// +// Preconditions: +// - The field value MUST be normalized +func (f *FieldVal) IsGtOrEqPrimeMinusOrder() bool { + // The secp256k1 prime is equivalent to 2^256 - 4294968273 and the group + // order is 2^256 - 432420386565659656852420866394968145599. Thus, + // the prime minus the group order is: + // 432420386565659656852420866390673177326 + // + // In hex that is: + // 0x00000000 00000000 00000000 00000001 45512319 50b75fc4 402da172 2fc9baee + // + // Converting that to field representation (base 2^26) is: + // + // n[0] = 0x03c9baee + // n[1] = 0x03685c8b + // n[2] = 0x01fc4402 + // n[3] = 0x006542dd + // n[4] = 0x01455123 + // + // This can be verified with the following test code: + // pMinusN := new(big.Int).Sub(curveParams.P, curveParams.N) + // var fv FieldVal + // fv.SetByteSlice(pMinusN.Bytes()) + // t.Logf("%x", fv.n) + // + // Outputs: [3c9baee 3685c8b 1fc4402 6542dd 1455123 0 0 0 0 0] + const ( + pMinusNWordZero = 0x03c9baee + pMinusNWordOne = 0x03685c8b + pMinusNWordTwo = 0x01fc4402 + pMinusNWordThree = 0x006542dd + pMinusNWordFour = 0x01455123 + pMinusNWordFive = 0x00000000 + pMinusNWordSix = 0x00000000 + pMinusNWordSeven = 0x00000000 + pMinusNWordEight = 0x00000000 + pMinusNWordNine = 0x00000000 + ) + + // The intuition here is that the value is greater than field prime minus + // the group order if one of the higher individual words is greater than the + // corresponding word and all higher words in the value are equal. + result := constantTimeGreater(f.n[9], pMinusNWordNine) + highWordsEqual := constantTimeEq(f.n[9], pMinusNWordNine) + result |= highWordsEqual & constantTimeGreater(f.n[8], pMinusNWordEight) + highWordsEqual &= constantTimeEq(f.n[8], pMinusNWordEight) + result |= highWordsEqual & constantTimeGreater(f.n[7], pMinusNWordSeven) + highWordsEqual &= constantTimeEq(f.n[7], pMinusNWordSeven) + result |= highWordsEqual & constantTimeGreater(f.n[6], pMinusNWordSix) + highWordsEqual &= constantTimeEq(f.n[6], pMinusNWordSix) + result |= highWordsEqual & constantTimeGreater(f.n[5], pMinusNWordFive) + highWordsEqual &= constantTimeEq(f.n[5], pMinusNWordFive) + result |= highWordsEqual & constantTimeGreater(f.n[4], pMinusNWordFour) + highWordsEqual &= constantTimeEq(f.n[4], pMinusNWordFour) + result |= highWordsEqual & constantTimeGreater(f.n[3], pMinusNWordThree) + highWordsEqual &= constantTimeEq(f.n[3], pMinusNWordThree) + result |= highWordsEqual & constantTimeGreater(f.n[2], pMinusNWordTwo) + highWordsEqual &= constantTimeEq(f.n[2], pMinusNWordTwo) + result |= highWordsEqual & constantTimeGreater(f.n[1], pMinusNWordOne) + highWordsEqual &= constantTimeEq(f.n[1], pMinusNWordOne) + result |= highWordsEqual & constantTimeGreaterOrEq(f.n[0], pMinusNWordZero) + + return result != 0 +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/genstatics.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/genstatics.go new file mode 100644 index 0000000000..fa613deb7b --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/genstatics.go @@ -0,0 +1,196 @@ +// Copyright (c) 2014-2015 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +// This file is ignored during the regular build due to the following build tag. +// This build tag is set during go generate. +//go:build gensecp256k1 +// +build gensecp256k1 + +package secp256k1 + +// References: +// [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone) + +import ( + "encoding/binary" + "math/big" +) + +// compressedBytePoints are dummy points used so the code which generates the +// real values can compile. +var compressedBytePoints = "" + +// SerializedBytePoints returns a serialized byte slice which contains all of +// the possible points per 8-bit window. This is used to when generating +// compressedbytepoints.go. +func SerializedBytePoints() []byte { + // Calculate G^(2^i) for i in 0..255. These are used to avoid recomputing + // them for each digit of the 8-bit windows. + doublingPoints := make([]JacobianPoint, curveParams.BitSize) + var q JacobianPoint + bigAffineToJacobian(curveParams.Gx, curveParams.Gy, &q) + for i := 0; i < curveParams.BitSize; i++ { + // Q = 2*Q. + doublingPoints[i] = q + DoubleNonConst(&q, &q) + } + + // Separate the bits into byte-sized windows. + curveByteSize := curveParams.BitSize / 8 + serialized := make([]byte, curveByteSize*256*2*10*4) + offset := 0 + for byteNum := 0; byteNum < curveByteSize; byteNum++ { + // Grab the 8 bits that make up this byte from doubling points. + startingBit := 8 * (curveByteSize - byteNum - 1) + windowPoints := doublingPoints[startingBit : startingBit+8] + + // Compute all points in this window, convert them to affine, and + // serialize them. + for i := 0; i < 256; i++ { + var point JacobianPoint + for bit := 0; bit < 8; bit++ { + if i>>uint(bit)&1 == 1 { + AddNonConst(&point, &windowPoints[bit], &point) + } + } + point.ToAffine() + + for i := 0; i < len(point.X.n); i++ { + binary.LittleEndian.PutUint32(serialized[offset:], point.X.n[i]) + offset += 4 + } + for i := 0; i < len(point.Y.n); i++ { + binary.LittleEndian.PutUint32(serialized[offset:], point.Y.n[i]) + offset += 4 + } + } + } + + return serialized +} + +// sqrt returns the square root of the provided big integer using Newton's +// method. It's only compiled and used during generation of pre-computed +// values, so speed is not a huge concern. +func sqrt(n *big.Int) *big.Int { + // Initial guess = 2^(log_2(n)/2) + guess := big.NewInt(2) + guess.Exp(guess, big.NewInt(int64(n.BitLen()/2)), nil) + + // Now refine using Newton's method. + big2 := big.NewInt(2) + prevGuess := big.NewInt(0) + for { + prevGuess.Set(guess) + guess.Add(guess, new(big.Int).Div(n, guess)) + guess.Div(guess, big2) + if guess.Cmp(prevGuess) == 0 { + break + } + } + return guess +} + +// EndomorphismVectors runs the first 3 steps of algorithm 3.74 from [GECC] to +// generate the linearly independent vectors needed to generate a balanced +// length-two representation of a multiplier such that k = k1 + k2λ (mod N) and +// returns them. Since the values will always be the same given the fact that N +// and λ are fixed, the final results can be accelerated by storing the +// precomputed values. +func EndomorphismVectors() (a1, b1, a2, b2 *big.Int) { + bigMinus1 := big.NewInt(-1) + + // This section uses an extended Euclidean algorithm to generate a + // sequence of equations: + // s[i] * N + t[i] * λ = r[i] + + nSqrt := sqrt(curveParams.N) + u, v := new(big.Int).Set(curveParams.N), new(big.Int).Set(endomorphismLambda) + x1, y1 := big.NewInt(1), big.NewInt(0) + x2, y2 := big.NewInt(0), big.NewInt(1) + q, r := new(big.Int), new(big.Int) + qu, qx1, qy1 := new(big.Int), new(big.Int), new(big.Int) + s, t := new(big.Int), new(big.Int) + ri, ti := new(big.Int), new(big.Int) + a1, b1, a2, b2 = new(big.Int), new(big.Int), new(big.Int), new(big.Int) + found, oneMore := false, false + for u.Sign() != 0 { + // q = v/u + q.Div(v, u) + + // r = v - q*u + qu.Mul(q, u) + r.Sub(v, qu) + + // s = x2 - q*x1 + qx1.Mul(q, x1) + s.Sub(x2, qx1) + + // t = y2 - q*y1 + qy1.Mul(q, y1) + t.Sub(y2, qy1) + + // v = u, u = r, x2 = x1, x1 = s, y2 = y1, y1 = t + v.Set(u) + u.Set(r) + x2.Set(x1) + x1.Set(s) + y2.Set(y1) + y1.Set(t) + + // As soon as the remainder is less than the sqrt of n, the + // values of a1 and b1 are known. + if !found && r.Cmp(nSqrt) < 0 { + // When this condition executes ri and ti represent the + // r[i] and t[i] values such that i is the greatest + // index for which r >= sqrt(n). Meanwhile, the current + // r and t values are r[i+1] and t[i+1], respectively. + + // a1 = r[i+1], b1 = -t[i+1] + a1.Set(r) + b1.Mul(t, bigMinus1) + found = true + oneMore = true + + // Skip to the next iteration so ri and ti are not + // modified. + continue + + } else if oneMore { + // When this condition executes ri and ti still + // represent the r[i] and t[i] values while the current + // r and t are r[i+2] and t[i+2], respectively. + + // sum1 = r[i]^2 + t[i]^2 + rSquared := new(big.Int).Mul(ri, ri) + tSquared := new(big.Int).Mul(ti, ti) + sum1 := new(big.Int).Add(rSquared, tSquared) + + // sum2 = r[i+2]^2 + t[i+2]^2 + r2Squared := new(big.Int).Mul(r, r) + t2Squared := new(big.Int).Mul(t, t) + sum2 := new(big.Int).Add(r2Squared, t2Squared) + + // if (r[i]^2 + t[i]^2) <= (r[i+2]^2 + t[i+2]^2) + if sum1.Cmp(sum2) <= 0 { + // a2 = r[i], b2 = -t[i] + a2.Set(ri) + b2.Mul(ti, bigMinus1) + } else { + // a2 = r[i+2], b2 = -t[i+2] + a2.Set(r) + b2.Mul(t, bigMinus1) + } + + // All done. + break + } + + ri.Set(r) + ti.Set(t) + } + + return a1, b1, a2, b2 +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/loadprecomputed.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/loadprecomputed.go new file mode 100644 index 0000000000..9f975b52ad --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/loadprecomputed.go @@ -0,0 +1,91 @@ +// Copyright 2015 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +import ( + "compress/zlib" + "encoding/base64" + "encoding/binary" + "io" + "strings" + "sync" +) + +//go:generate go run -tags gensecp256k1 genprecomps.go + +// bytePointTable describes a table used to house pre-computed values for +// accelerating scalar base multiplication. +type bytePointTable [32][256][2]FieldVal + +// s256BytePoints houses pre-computed values used to accelerate scalar base +// multiplication such that they are only loaded on first use. +var s256BytePoints = func() func() *bytePointTable { + // mustLoadBytePoints decompresses and deserializes the pre-computed byte + // points used to accelerate scalar base multiplication for the secp256k1 + // curve. + // + // This approach is used since it allows the compile to use significantly + // less ram and be performed much faster than it is with hard-coding the + // final in-memory data structure. At the same time, it is quite fast to + // generate the in-memory data structure on first use with this approach + // versus computing the table. + // + // It will panic on any errors because the data is hard coded and thus any + // errors means something is wrong in the source code. + var data *bytePointTable + mustLoadBytePoints := func() { + // There will be no byte points to load when generating them. + bp := compressedBytePoints + if len(bp) == 0 { + return + } + + // Decompress the pre-computed table used to accelerate scalar base + // multiplication. + decoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(bp)) + r, err := zlib.NewReader(decoder) + if err != nil { + panic(err) + } + serialized, err := io.ReadAll(r) + if err != nil { + panic(err) + } + + // Deserialize the precomputed byte points and set the memory table to + // them. + offset := 0 + var bytePoints bytePointTable + for byteNum := 0; byteNum < len(bytePoints); byteNum++ { + // All points in this window. + for i := 0; i < len(bytePoints[byteNum]); i++ { + px := &bytePoints[byteNum][i][0] + py := &bytePoints[byteNum][i][1] + for i := 0; i < len(px.n); i++ { + px.n[i] = binary.LittleEndian.Uint32(serialized[offset:]) + offset += 4 + } + for i := 0; i < len(py.n); i++ { + py.n[i] = binary.LittleEndian.Uint32(serialized[offset:]) + offset += 4 + } + } + } + data = &bytePoints + } + + // Return a closure that initializes the data on first access. This is done + // because the table takes a non-trivial amount of memory and initializing + // it unconditionally would cause anything that imports the package, either + // directly, or indirectly via transitive deps, to use that memory even if + // the caller never accesses any parts of the package that actually needs + // access to it. + var loadBytePointsOnce sync.Once + return func() *bytePointTable { + loadBytePointsOnce.Do(mustLoadBytePoints) + return data + } +}() diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/modnscalar.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/modnscalar.go new file mode 100644 index 0000000000..8125d9a99f --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/modnscalar.go @@ -0,0 +1,1088 @@ +// Copyright (c) 2020 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +import ( + "encoding/hex" + "math/big" +) + +// References: +// [SECG]: Recommended Elliptic Curve Domain Parameters +// https://www.secg.org/sec2-v2.pdf +// +// [HAC]: Handbook of Applied Cryptography Menezes, van Oorschot, Vanstone. +// http://cacr.uwaterloo.ca/hac/ + +// Many elliptic curve operations require working with scalars in a finite field +// characterized by the order of the group underlying the secp256k1 curve. +// Given this precision is larger than the biggest available native type, +// obviously some form of bignum math is needed. This code implements +// specialized fixed-precision field arithmetic rather than relying on an +// arbitrary-precision arithmetic package such as math/big for dealing with the +// math modulo the group order since the size is known. As a result, rather +// large performance gains are achieved by taking advantage of many +// optimizations not available to arbitrary-precision arithmetic and generic +// modular arithmetic algorithms. +// +// There are various ways to internally represent each element. For example, +// the most obvious representation would be to use an array of 4 uint64s (64 +// bits * 4 = 256 bits). However, that representation suffers from the fact +// that there is no native Go type large enough to handle the intermediate +// results while adding or multiplying two 64-bit numbers. +// +// Given the above, this implementation represents the field elements as 8 +// uint32s with each word (array entry) treated as base 2^32. This was chosen +// because most systems at the current time are 64-bit (or at least have 64-bit +// registers available for specialized purposes such as MMX) so the intermediate +// results can typically be done using a native register (and using uint64s to +// avoid the need for additional half-word arithmetic) + +const ( + // These fields provide convenient access to each of the words of the + // secp256k1 curve group order N to improve code readability. + // + // The group order of the curve per [SECG] is: + // 0xffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141 + orderWordZero uint32 = 0xd0364141 + orderWordOne uint32 = 0xbfd25e8c + orderWordTwo uint32 = 0xaf48a03b + orderWordThree uint32 = 0xbaaedce6 + orderWordFour uint32 = 0xfffffffe + orderWordFive uint32 = 0xffffffff + orderWordSix uint32 = 0xffffffff + orderWordSeven uint32 = 0xffffffff + + // These fields provide convenient access to each of the words of the two's + // complement of the secp256k1 curve group order N to improve code + // readability. + // + // The two's complement of the group order is: + // 0x00000000 00000000 00000000 00000001 45512319 50b75fc4 402da173 2fc9bebf + orderComplementWordZero uint32 = (^orderWordZero) + 1 + orderComplementWordOne uint32 = ^orderWordOne + orderComplementWordTwo uint32 = ^orderWordTwo + orderComplementWordThree uint32 = ^orderWordThree + //orderComplementWordFour uint32 = ^orderWordFour // unused + //orderComplementWordFive uint32 = ^orderWordFive // unused + //orderComplementWordSix uint32 = ^orderWordSix // unused + //orderComplementWordSeven uint32 = ^orderWordSeven // unused + + // These fields provide convenient access to each of the words of the + // secp256k1 curve group order N / 2 to improve code readability and avoid + // the need to recalculate them. + // + // The half order of the secp256k1 curve group is: + // 0x7fffffff ffffffff ffffffff ffffffff 5d576e73 57a4501d dfe92f46 681b20a0 + halfOrderWordZero uint32 = 0x681b20a0 + halfOrderWordOne uint32 = 0xdfe92f46 + halfOrderWordTwo uint32 = 0x57a4501d + halfOrderWordThree uint32 = 0x5d576e73 + halfOrderWordFour uint32 = 0xffffffff + halfOrderWordFive uint32 = 0xffffffff + halfOrderWordSix uint32 = 0xffffffff + halfOrderWordSeven uint32 = 0x7fffffff + + // uint32Mask is simply a mask with all bits set for a uint32 and is used to + // improve the readability of the code. + uint32Mask = 0xffffffff +) + +var ( + // zero32 is an array of 32 bytes used for the purposes of zeroing and is + // defined here to avoid extra allocations. + zero32 = [32]byte{} +) + +// ModNScalar implements optimized 256-bit constant-time fixed-precision +// arithmetic over the secp256k1 group order. This means all arithmetic is +// performed modulo: +// +// 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 +// +// It only implements the arithmetic needed for elliptic curve operations, +// however, the operations that are not implemented can typically be worked +// around if absolutely needed. For example, subtraction can be performed by +// adding the negation. +// +// Should it be absolutely necessary, conversion to the standard library +// math/big.Int can be accomplished by using the Bytes method, slicing the +// resulting fixed-size array, and feeding it to big.Int.SetBytes. However, +// that should typically be avoided when possible as conversion to big.Ints +// requires allocations, is not constant time, and is slower when working modulo +// the group order. +type ModNScalar struct { + // The scalar is represented as 8 32-bit integers in base 2^32. + // + // The following depicts the internal representation: + // --------------------------------------------------------- + // | n[7] | n[6] | ... | n[0] | + // | 32 bits | 32 bits | ... | 32 bits | + // | Mult: 2^(32*7) | Mult: 2^(32*6) | ... | Mult: 2^(32*0) | + // --------------------------------------------------------- + // + // For example, consider the number 2^87 + 2^42 + 1. It would be + // represented as: + // n[0] = 1 + // n[1] = 2^10 + // n[2] = 2^23 + // n[3..7] = 0 + // + // The full 256-bit value is then calculated by looping i from 7..0 and + // doing sum(n[i] * 2^(32i)) like so: + // n[7] * 2^(32*7) = 0 * 2^224 = 0 + // n[6] * 2^(32*6) = 0 * 2^192 = 0 + // ... + // n[2] * 2^(32*2) = 2^23 * 2^64 = 2^87 + // n[1] * 2^(32*1) = 2^10 * 2^32 = 2^42 + // n[0] * 2^(32*0) = 1 * 2^0 = 1 + // Sum: 0 + 0 + ... + 2^87 + 2^42 + 1 = 2^87 + 2^42 + 1 + n [8]uint32 +} + +// String returns the scalar as a human-readable hex string. +// +// This is NOT constant time. +func (s ModNScalar) String() string { + b := s.Bytes() + return hex.EncodeToString(b[:]) +} + +// Set sets the scalar equal to a copy of the passed one in constant time. +// +// The scalar is returned to support chaining. This enables syntax like: +// s := new(ModNScalar).Set(s2).Add(1) so that s = s2 + 1 where s2 is not +// modified. +func (s *ModNScalar) Set(val *ModNScalar) *ModNScalar { + *s = *val + return s +} + +// Zero sets the scalar to zero in constant time. A newly created scalar is +// already set to zero. This function can be useful to clear an existing scalar +// for reuse. +func (s *ModNScalar) Zero() { + s.n[0] = 0 + s.n[1] = 0 + s.n[2] = 0 + s.n[3] = 0 + s.n[4] = 0 + s.n[5] = 0 + s.n[6] = 0 + s.n[7] = 0 +} + +// IsZero returns whether or not the scalar is equal to zero in constant time. +func (s *ModNScalar) IsZero() bool { + // The scalar can only be zero if no bits are set in any of the words. + bits := s.n[0] | s.n[1] | s.n[2] | s.n[3] | s.n[4] | s.n[5] | s.n[6] | s.n[7] + return bits == 0 +} + +// SetInt sets the scalar to the passed integer in constant time. This is a +// convenience function since it is fairly common to perform some arithmetic +// with small native integers. +// +// The scalar is returned to support chaining. This enables syntax like: +// s := new(ModNScalar).SetInt(2).Mul(s2) so that s = 2 * s2. +func (s *ModNScalar) SetInt(ui uint32) *ModNScalar { + s.Zero() + s.n[0] = ui + return s +} + +// constantTimeEq returns 1 if a == b or 0 otherwise in constant time. +func constantTimeEq(a, b uint32) uint32 { + return uint32((uint64(a^b) - 1) >> 63) +} + +// constantTimeNotEq returns 1 if a != b or 0 otherwise in constant time. +func constantTimeNotEq(a, b uint32) uint32 { + return ^uint32((uint64(a^b)-1)>>63) & 1 +} + +// constantTimeLess returns 1 if a < b or 0 otherwise in constant time. +func constantTimeLess(a, b uint32) uint32 { + return uint32((uint64(a) - uint64(b)) >> 63) +} + +// constantTimeLessOrEq returns 1 if a <= b or 0 otherwise in constant time. +func constantTimeLessOrEq(a, b uint32) uint32 { + return uint32((uint64(a) - uint64(b) - 1) >> 63) +} + +// constantTimeGreater returns 1 if a > b or 0 otherwise in constant time. +func constantTimeGreater(a, b uint32) uint32 { + return constantTimeLess(b, a) +} + +// constantTimeGreaterOrEq returns 1 if a >= b or 0 otherwise in constant time. +func constantTimeGreaterOrEq(a, b uint32) uint32 { + return constantTimeLessOrEq(b, a) +} + +// constantTimeMin returns min(a,b) in constant time. +func constantTimeMin(a, b uint32) uint32 { + return b ^ ((a ^ b) & -constantTimeLess(a, b)) +} + +// overflows determines if the current scalar is greater than or equal to the +// group order in constant time and returns 1 if it is or 0 otherwise. +func (s *ModNScalar) overflows() uint32 { + // The intuition here is that the scalar is greater than the group order if + // one of the higher individual words is greater than corresponding word of + // the group order and all higher words in the scalar are equal to their + // corresponding word of the group order. Since this type is modulo the + // group order, being equal is also an overflow back to 0. + // + // Note that the words 5, 6, and 7 are all the max uint32 value, so there is + // no need to test if those individual words of the scalar exceeds them, + // hence, only equality is checked for them. + highWordsEqual := constantTimeEq(s.n[7], orderWordSeven) + highWordsEqual &= constantTimeEq(s.n[6], orderWordSix) + highWordsEqual &= constantTimeEq(s.n[5], orderWordFive) + overflow := highWordsEqual & constantTimeGreater(s.n[4], orderWordFour) + highWordsEqual &= constantTimeEq(s.n[4], orderWordFour) + overflow |= highWordsEqual & constantTimeGreater(s.n[3], orderWordThree) + highWordsEqual &= constantTimeEq(s.n[3], orderWordThree) + overflow |= highWordsEqual & constantTimeGreater(s.n[2], orderWordTwo) + highWordsEqual &= constantTimeEq(s.n[2], orderWordTwo) + overflow |= highWordsEqual & constantTimeGreater(s.n[1], orderWordOne) + highWordsEqual &= constantTimeEq(s.n[1], orderWordOne) + overflow |= highWordsEqual & constantTimeGreaterOrEq(s.n[0], orderWordZero) + + return overflow +} + +// reduce256 reduces the current scalar modulo the group order in accordance +// with the overflows parameter in constant time. The overflows parameter +// specifies whether or not the scalar is known to be greater than the group +// order and MUST either be 1 in the case it is or 0 in the case it is not for a +// correct result. +func (s *ModNScalar) reduce256(overflows uint32) { + // Notice that since s < 2^256 < 2N (where N is the group order), the max + // possible number of reductions required is one. Therefore, in the case a + // reduction is needed, it can be performed with a single subtraction of N. + // Also, recall that subtraction is equivalent to addition by the two's + // complement while ignoring the carry. + // + // When s >= N, the overflows parameter will be 1. Conversely, it will be 0 + // when s < N. Thus multiplying by the overflows parameter will either + // result in 0 or the multiplicand itself. + // + // Combining the above along with the fact that s + 0 = s, the following is + // a constant time implementation that works by either adding 0 or the two's + // complement of N as needed. + // + // The final result will be in the range 0 <= s < N as expected. + overflows64 := uint64(overflows) + c := uint64(s.n[0]) + overflows64*uint64(orderComplementWordZero) + s.n[0] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(s.n[1]) + overflows64*uint64(orderComplementWordOne) + s.n[1] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(s.n[2]) + overflows64*uint64(orderComplementWordTwo) + s.n[2] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(s.n[3]) + overflows64*uint64(orderComplementWordThree) + s.n[3] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(s.n[4]) + overflows64 // * 1 + s.n[4] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(s.n[5]) // + overflows64 * 0 + s.n[5] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(s.n[6]) // + overflows64 * 0 + s.n[6] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(s.n[7]) // + overflows64 * 0 + s.n[7] = uint32(c & uint32Mask) +} + +// SetBytes interprets the provided array as a 256-bit big-endian unsigned +// integer, reduces it modulo the group order, sets the scalar to the result, +// and returns either 1 if it was reduced (aka it overflowed) or 0 otherwise in +// constant time. +// +// Note that a bool is not used here because it is not possible in Go to convert +// from a bool to numeric value in constant time and many constant-time +// operations require a numeric value. +func (s *ModNScalar) SetBytes(b *[32]byte) uint32 { + // Pack the 256 total bits across the 8 uint32 words. This could be done + // with a for loop, but benchmarks show this unrolled version is about 2 + // times faster than the variant that uses a loop. + s.n[0] = uint32(b[31]) | uint32(b[30])<<8 | uint32(b[29])<<16 | uint32(b[28])<<24 + s.n[1] = uint32(b[27]) | uint32(b[26])<<8 | uint32(b[25])<<16 | uint32(b[24])<<24 + s.n[2] = uint32(b[23]) | uint32(b[22])<<8 | uint32(b[21])<<16 | uint32(b[20])<<24 + s.n[3] = uint32(b[19]) | uint32(b[18])<<8 | uint32(b[17])<<16 | uint32(b[16])<<24 + s.n[4] = uint32(b[15]) | uint32(b[14])<<8 | uint32(b[13])<<16 | uint32(b[12])<<24 + s.n[5] = uint32(b[11]) | uint32(b[10])<<8 | uint32(b[9])<<16 | uint32(b[8])<<24 + s.n[6] = uint32(b[7]) | uint32(b[6])<<8 | uint32(b[5])<<16 | uint32(b[4])<<24 + s.n[7] = uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24 + + // The value might be >= N, so reduce it as required and return whether or + // not it was reduced. + needsReduce := s.overflows() + s.reduce256(needsReduce) + return needsReduce +} + +// zeroArray32 zeroes the provided 32-byte buffer. +func zeroArray32(b *[32]byte) { + copy(b[:], zero32[:]) +} + +// SetByteSlice interprets the provided slice as a 256-bit big-endian unsigned +// integer (meaning it is truncated to the first 32 bytes), reduces it modulo +// the group order, sets the scalar to the result, and returns whether or not +// the resulting truncated 256-bit integer overflowed in constant time. +// +// Note that since passing a slice with more than 32 bytes is truncated, it is +// possible that the truncated value is less than the order of the curve and +// hence it will not be reported as having overflowed in that case. It is up to +// the caller to decide whether it needs to provide numbers of the appropriate +// size or it is acceptable to use this function with the described truncation +// and overflow behavior. +func (s *ModNScalar) SetByteSlice(b []byte) bool { + var b32 [32]byte + b = b[:constantTimeMin(uint32(len(b)), 32)] + copy(b32[:], b32[:32-len(b)]) + copy(b32[32-len(b):], b) + result := s.SetBytes(&b32) + zeroArray32(&b32) + return result != 0 +} + +// PutBytesUnchecked unpacks the scalar to a 32-byte big-endian value directly +// into the passed byte slice in constant time. The target slice must must have +// at least 32 bytes available or it will panic. +// +// There is a similar function, PutBytes, which unpacks the scalar into a +// 32-byte array directly. This version is provided since it can be useful to +// write directly into part of a larger buffer without needing a separate +// allocation. +// +// Preconditions: +// - The target slice MUST have at least 32 bytes available +func (s *ModNScalar) PutBytesUnchecked(b []byte) { + // Unpack the 256 total bits from the 8 uint32 words. This could be done + // with a for loop, but benchmarks show this unrolled version is about 2 + // times faster than the variant which uses a loop. + b[31] = byte(s.n[0]) + b[30] = byte(s.n[0] >> 8) + b[29] = byte(s.n[0] >> 16) + b[28] = byte(s.n[0] >> 24) + b[27] = byte(s.n[1]) + b[26] = byte(s.n[1] >> 8) + b[25] = byte(s.n[1] >> 16) + b[24] = byte(s.n[1] >> 24) + b[23] = byte(s.n[2]) + b[22] = byte(s.n[2] >> 8) + b[21] = byte(s.n[2] >> 16) + b[20] = byte(s.n[2] >> 24) + b[19] = byte(s.n[3]) + b[18] = byte(s.n[3] >> 8) + b[17] = byte(s.n[3] >> 16) + b[16] = byte(s.n[3] >> 24) + b[15] = byte(s.n[4]) + b[14] = byte(s.n[4] >> 8) + b[13] = byte(s.n[4] >> 16) + b[12] = byte(s.n[4] >> 24) + b[11] = byte(s.n[5]) + b[10] = byte(s.n[5] >> 8) + b[9] = byte(s.n[5] >> 16) + b[8] = byte(s.n[5] >> 24) + b[7] = byte(s.n[6]) + b[6] = byte(s.n[6] >> 8) + b[5] = byte(s.n[6] >> 16) + b[4] = byte(s.n[6] >> 24) + b[3] = byte(s.n[7]) + b[2] = byte(s.n[7] >> 8) + b[1] = byte(s.n[7] >> 16) + b[0] = byte(s.n[7] >> 24) +} + +// PutBytes unpacks the scalar to a 32-byte big-endian value using the passed +// byte array in constant time. +// +// There is a similar function, PutBytesUnchecked, which unpacks the scalar into +// a slice that must have at least 32 bytes available. This version is provided +// since it can be useful to write directly into an array that is type checked. +// +// Alternatively, there is also Bytes, which unpacks the scalar into a new array +// and returns that which can sometimes be more ergonomic in applications that +// aren't concerned about an additional copy. +func (s *ModNScalar) PutBytes(b *[32]byte) { + s.PutBytesUnchecked(b[:]) +} + +// Bytes unpacks the scalar to a 32-byte big-endian value in constant time. +// +// See PutBytes and PutBytesUnchecked for variants that allow an array or slice +// to be passed which can be useful to cut down on the number of allocations +// by allowing the caller to reuse a buffer or write directly into part of a +// larger buffer. +func (s *ModNScalar) Bytes() [32]byte { + var b [32]byte + s.PutBytesUnchecked(b[:]) + return b +} + +// IsOdd returns whether or not the scalar is an odd number in constant time. +func (s *ModNScalar) IsOdd() bool { + // Only odd numbers have the bottom bit set. + return s.n[0]&1 == 1 +} + +// Equals returns whether or not the two scalars are the same in constant time. +func (s *ModNScalar) Equals(val *ModNScalar) bool { + // Xor only sets bits when they are different, so the two scalars can only + // be the same if no bits are set after xoring each word. + bits := (s.n[0] ^ val.n[0]) | (s.n[1] ^ val.n[1]) | (s.n[2] ^ val.n[2]) | + (s.n[3] ^ val.n[3]) | (s.n[4] ^ val.n[4]) | (s.n[5] ^ val.n[5]) | + (s.n[6] ^ val.n[6]) | (s.n[7] ^ val.n[7]) + + return bits == 0 +} + +// Add2 adds the passed two scalars together modulo the group order in constant +// time and stores the result in s. +// +// The scalar is returned to support chaining. This enables syntax like: +// s3.Add2(s, s2).AddInt(1) so that s3 = s + s2 + 1. +func (s *ModNScalar) Add2(val1, val2 *ModNScalar) *ModNScalar { + c := uint64(val1.n[0]) + uint64(val2.n[0]) + s.n[0] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(val1.n[1]) + uint64(val2.n[1]) + s.n[1] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(val1.n[2]) + uint64(val2.n[2]) + s.n[2] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(val1.n[3]) + uint64(val2.n[3]) + s.n[3] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(val1.n[4]) + uint64(val2.n[4]) + s.n[4] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(val1.n[5]) + uint64(val2.n[5]) + s.n[5] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(val1.n[6]) + uint64(val2.n[6]) + s.n[6] = uint32(c & uint32Mask) + c = (c >> 32) + uint64(val1.n[7]) + uint64(val2.n[7]) + s.n[7] = uint32(c & uint32Mask) + + // The result is now 256 bits, but it might still be >= N, so use the + // existing normal reduce method for 256-bit values. + s.reduce256(uint32(c>>32) + s.overflows()) + return s +} + +// Add adds the passed scalar to the existing one modulo the group order in +// constant time and stores the result in s. +// +// The scalar is returned to support chaining. This enables syntax like: +// s.Add(s2).AddInt(1) so that s = s + s2 + 1. +func (s *ModNScalar) Add(val *ModNScalar) *ModNScalar { + return s.Add2(s, val) +} + +// accumulator96 provides a 96-bit accumulator for use in the intermediate +// calculations requiring more than 64-bits. +type accumulator96 struct { + n [3]uint32 +} + +// Add adds the passed unsigned 64-bit value to the accumulator. +func (a *accumulator96) Add(v uint64) { + low := uint32(v & uint32Mask) + hi := uint32(v >> 32) + a.n[0] += low + hi += constantTimeLess(a.n[0], low) // Carry if overflow in n[0]. + a.n[1] += hi + a.n[2] += constantTimeLess(a.n[1], hi) // Carry if overflow in n[1]. +} + +// Rsh32 right shifts the accumulator by 32 bits. +func (a *accumulator96) Rsh32() { + a.n[0] = a.n[1] + a.n[1] = a.n[2] + a.n[2] = 0 +} + +// reduce385 reduces the 385-bit intermediate result in the passed terms modulo +// the group order in constant time and stores the result in s. +func (s *ModNScalar) reduce385(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12 uint64) { + // At this point, the intermediate result in the passed terms has been + // reduced to fit within 385 bits, so reduce it again using the same method + // described in reduce512. As before, the intermediate result will end up + // being reduced by another 127 bits to 258 bits, thus 9 32-bit terms are + // needed for this iteration. The reduced terms are assigned back to t0 + // through t8. + // + // Note that several of the intermediate calculations require adding 64-bit + // products together which would overflow a uint64, so a 96-bit accumulator + // is used instead until the value is reduced enough to use native uint64s. + + // Terms for 2^(32*0). + var acc accumulator96 + acc.n[0] = uint32(t0) // == acc.Add(t0) because acc is guaranteed to be 0. + acc.Add(t8 * uint64(orderComplementWordZero)) + t0 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*1). + acc.Add(t1) + acc.Add(t8 * uint64(orderComplementWordOne)) + acc.Add(t9 * uint64(orderComplementWordZero)) + t1 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*2). + acc.Add(t2) + acc.Add(t8 * uint64(orderComplementWordTwo)) + acc.Add(t9 * uint64(orderComplementWordOne)) + acc.Add(t10 * uint64(orderComplementWordZero)) + t2 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*3). + acc.Add(t3) + acc.Add(t8 * uint64(orderComplementWordThree)) + acc.Add(t9 * uint64(orderComplementWordTwo)) + acc.Add(t10 * uint64(orderComplementWordOne)) + acc.Add(t11 * uint64(orderComplementWordZero)) + t3 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*4). + acc.Add(t4) + acc.Add(t8) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t9 * uint64(orderComplementWordThree)) + acc.Add(t10 * uint64(orderComplementWordTwo)) + acc.Add(t11 * uint64(orderComplementWordOne)) + acc.Add(t12 * uint64(orderComplementWordZero)) + t4 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*5). + acc.Add(t5) + // acc.Add(t8 * uint64(orderComplementWordFive)) // 0 + acc.Add(t9) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t10 * uint64(orderComplementWordThree)) + acc.Add(t11 * uint64(orderComplementWordTwo)) + acc.Add(t12 * uint64(orderComplementWordOne)) + t5 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*6). + acc.Add(t6) + // acc.Add(t8 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t9 * uint64(orderComplementWordFive)) // 0 + acc.Add(t10) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t11 * uint64(orderComplementWordThree)) + acc.Add(t12 * uint64(orderComplementWordTwo)) + t6 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*7). + acc.Add(t7) + // acc.Add(t8 * uint64(orderComplementWordSeven)) // 0 + // acc.Add(t9 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t10 * uint64(orderComplementWordFive)) // 0 + acc.Add(t11) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t12 * uint64(orderComplementWordThree)) + t7 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*8). + // acc.Add(t9 * uint64(orderComplementWordSeven)) // 0 + // acc.Add(t10 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t11 * uint64(orderComplementWordFive)) // 0 + acc.Add(t12) // * uint64(orderComplementWordFour) // * 1 + t8 = uint64(acc.n[0]) + // acc.Rsh32() // No need since not used after this. Guaranteed to be 0. + + // NOTE: All of the remaining multiplications for this iteration result in 0 + // as they all involve multiplying by combinations of the fifth, sixth, and + // seventh words of the two's complement of N, which are 0, so skip them. + + // At this point, the result is reduced to fit within 258 bits, so reduce it + // again using a slightly modified version of the same method. The maximum + // value in t8 is 2 at this point and therefore multiplying it by each word + // of the two's complement of N and adding it to a 32-bit term will result + // in a maximum requirement of 33 bits, so it is safe to use native uint64s + // here for the intermediate term carry propagation. + // + // Also, since the maximum value in t8 is 2, this ends up reducing by + // another 2 bits to 256 bits. + c := t0 + t8*uint64(orderComplementWordZero) + s.n[0] = uint32(c & uint32Mask) + c = (c >> 32) + t1 + t8*uint64(orderComplementWordOne) + s.n[1] = uint32(c & uint32Mask) + c = (c >> 32) + t2 + t8*uint64(orderComplementWordTwo) + s.n[2] = uint32(c & uint32Mask) + c = (c >> 32) + t3 + t8*uint64(orderComplementWordThree) + s.n[3] = uint32(c & uint32Mask) + c = (c >> 32) + t4 + t8 // * uint64(orderComplementWordFour) == * 1 + s.n[4] = uint32(c & uint32Mask) + c = (c >> 32) + t5 // + t8*uint64(orderComplementWordFive) == 0 + s.n[5] = uint32(c & uint32Mask) + c = (c >> 32) + t6 // + t8*uint64(orderComplementWordSix) == 0 + s.n[6] = uint32(c & uint32Mask) + c = (c >> 32) + t7 // + t8*uint64(orderComplementWordSeven) == 0 + s.n[7] = uint32(c & uint32Mask) + + // The result is now 256 bits, but it might still be >= N, so use the + // existing normal reduce method for 256-bit values. + s.reduce256(uint32(c>>32) + s.overflows()) +} + +// reduce512 reduces the 512-bit intermediate result in the passed terms modulo +// the group order down to 385 bits in constant time and stores the result in s. +func (s *ModNScalar) reduce512(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15 uint64) { + // At this point, the intermediate result in the passed terms is grouped + // into the respective bases. + // + // Per [HAC] section 14.3.4: Reduction method of moduli of special form, + // when the modulus is of the special form m = b^t - c, where log_2(c) < t, + // highly efficient reduction can be achieved per the provided algorithm. + // + // The secp256k1 group order fits this criteria since it is: + // 2^256 - 432420386565659656852420866394968145599 + // + // Technically the max possible value here is (N-1)^2 since the two scalars + // being multiplied are always mod N. Nevertheless, it is safer to consider + // it to be (2^256-1)^2 = 2^512 - 2^256 + 1 since it is the product of two + // 256-bit values. + // + // The algorithm is to reduce the result modulo the prime by subtracting + // multiples of the group order N. However, in order simplify carry + // propagation, this adds with the two's complement of N to achieve the same + // result. + // + // Since the two's complement of N has 127 leading zero bits, this will end + // up reducing the intermediate result from 512 bits to 385 bits, resulting + // in 13 32-bit terms. The reduced terms are assigned back to t0 through + // t12. + // + // Note that several of the intermediate calculations require adding 64-bit + // products together which would overflow a uint64, so a 96-bit accumulator + // is used instead. + + // Terms for 2^(32*0). + var acc accumulator96 + acc.n[0] = uint32(t0) // == acc.Add(t0) because acc is guaranteed to be 0. + acc.Add(t8 * uint64(orderComplementWordZero)) + t0 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*1). + acc.Add(t1) + acc.Add(t8 * uint64(orderComplementWordOne)) + acc.Add(t9 * uint64(orderComplementWordZero)) + t1 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*2). + acc.Add(t2) + acc.Add(t8 * uint64(orderComplementWordTwo)) + acc.Add(t9 * uint64(orderComplementWordOne)) + acc.Add(t10 * uint64(orderComplementWordZero)) + t2 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*3). + acc.Add(t3) + acc.Add(t8 * uint64(orderComplementWordThree)) + acc.Add(t9 * uint64(orderComplementWordTwo)) + acc.Add(t10 * uint64(orderComplementWordOne)) + acc.Add(t11 * uint64(orderComplementWordZero)) + t3 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*4). + acc.Add(t4) + acc.Add(t8) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t9 * uint64(orderComplementWordThree)) + acc.Add(t10 * uint64(orderComplementWordTwo)) + acc.Add(t11 * uint64(orderComplementWordOne)) + acc.Add(t12 * uint64(orderComplementWordZero)) + t4 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*5). + acc.Add(t5) + // acc.Add(t8 * uint64(orderComplementWordFive)) // 0 + acc.Add(t9) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t10 * uint64(orderComplementWordThree)) + acc.Add(t11 * uint64(orderComplementWordTwo)) + acc.Add(t12 * uint64(orderComplementWordOne)) + acc.Add(t13 * uint64(orderComplementWordZero)) + t5 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*6). + acc.Add(t6) + // acc.Add(t8 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t9 * uint64(orderComplementWordFive)) // 0 + acc.Add(t10) // * uint64(orderComplementWordFour)) // * 1 + acc.Add(t11 * uint64(orderComplementWordThree)) + acc.Add(t12 * uint64(orderComplementWordTwo)) + acc.Add(t13 * uint64(orderComplementWordOne)) + acc.Add(t14 * uint64(orderComplementWordZero)) + t6 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*7). + acc.Add(t7) + // acc.Add(t8 * uint64(orderComplementWordSeven)) // 0 + // acc.Add(t9 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t10 * uint64(orderComplementWordFive)) // 0 + acc.Add(t11) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t12 * uint64(orderComplementWordThree)) + acc.Add(t13 * uint64(orderComplementWordTwo)) + acc.Add(t14 * uint64(orderComplementWordOne)) + acc.Add(t15 * uint64(orderComplementWordZero)) + t7 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*8). + // acc.Add(t9 * uint64(orderComplementWordSeven)) // 0 + // acc.Add(t10 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t11 * uint64(orderComplementWordFive)) // 0 + acc.Add(t12) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t13 * uint64(orderComplementWordThree)) + acc.Add(t14 * uint64(orderComplementWordTwo)) + acc.Add(t15 * uint64(orderComplementWordOne)) + t8 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*9). + // acc.Add(t10 * uint64(orderComplementWordSeven)) // 0 + // acc.Add(t11 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t12 * uint64(orderComplementWordFive)) // 0 + acc.Add(t13) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t14 * uint64(orderComplementWordThree)) + acc.Add(t15 * uint64(orderComplementWordTwo)) + t9 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*10). + // acc.Add(t11 * uint64(orderComplementWordSeven)) // 0 + // acc.Add(t12 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t13 * uint64(orderComplementWordFive)) // 0 + acc.Add(t14) // * uint64(orderComplementWordFour) // * 1 + acc.Add(t15 * uint64(orderComplementWordThree)) + t10 = uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*11). + // acc.Add(t12 * uint64(orderComplementWordSeven)) // 0 + // acc.Add(t13 * uint64(orderComplementWordSix)) // 0 + // acc.Add(t14 * uint64(orderComplementWordFive)) // 0 + acc.Add(t15) // * uint64(orderComplementWordFour) // * 1 + t11 = uint64(acc.n[0]) + acc.Rsh32() + + // NOTE: All of the remaining multiplications for this iteration result in 0 + // as they all involve multiplying by combinations of the fifth, sixth, and + // seventh words of the two's complement of N, which are 0, so skip them. + + // Terms for 2^(32*12). + t12 = uint64(acc.n[0]) + // acc.Rsh32() // No need since not used after this. Guaranteed to be 0. + + // At this point, the result is reduced to fit within 385 bits, so reduce it + // again using the same method accordingly. + s.reduce385(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12) +} + +// Mul2 multiplies the passed two scalars together modulo the group order in +// constant time and stores the result in s. +// +// The scalar is returned to support chaining. This enables syntax like: +// s3.Mul2(s, s2).AddInt(1) so that s3 = (s * s2) + 1. +func (s *ModNScalar) Mul2(val, val2 *ModNScalar) *ModNScalar { + // This could be done with for loops and an array to store the intermediate + // terms, but this unrolled version is significantly faster. + + // The overall strategy employed here is: + // 1) Calculate the 512-bit product of the two scalars using the standard + // pencil-and-paper method. + // 2) Reduce the result modulo the prime by effectively subtracting + // multiples of the group order N (actually performed by adding multiples + // of the two's complement of N to avoid implementing subtraction). + // 3) Repeat step 2 noting that each iteration reduces the required number + // of bits by 127 because the two's complement of N has 127 leading zero + // bits. + // 4) Once reduced to 256 bits, call the existing reduce method to perform + // a final reduction as needed. + // + // Note that several of the intermediate calculations require adding 64-bit + // products together which would overflow a uint64, so a 96-bit accumulator + // is used instead. + + // Terms for 2^(32*0). + var acc accumulator96 + acc.Add(uint64(val.n[0]) * uint64(val2.n[0])) + t0 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*1). + acc.Add(uint64(val.n[0]) * uint64(val2.n[1])) + acc.Add(uint64(val.n[1]) * uint64(val2.n[0])) + t1 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*2). + acc.Add(uint64(val.n[0]) * uint64(val2.n[2])) + acc.Add(uint64(val.n[1]) * uint64(val2.n[1])) + acc.Add(uint64(val.n[2]) * uint64(val2.n[0])) + t2 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*3). + acc.Add(uint64(val.n[0]) * uint64(val2.n[3])) + acc.Add(uint64(val.n[1]) * uint64(val2.n[2])) + acc.Add(uint64(val.n[2]) * uint64(val2.n[1])) + acc.Add(uint64(val.n[3]) * uint64(val2.n[0])) + t3 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*4). + acc.Add(uint64(val.n[0]) * uint64(val2.n[4])) + acc.Add(uint64(val.n[1]) * uint64(val2.n[3])) + acc.Add(uint64(val.n[2]) * uint64(val2.n[2])) + acc.Add(uint64(val.n[3]) * uint64(val2.n[1])) + acc.Add(uint64(val.n[4]) * uint64(val2.n[0])) + t4 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*5). + acc.Add(uint64(val.n[0]) * uint64(val2.n[5])) + acc.Add(uint64(val.n[1]) * uint64(val2.n[4])) + acc.Add(uint64(val.n[2]) * uint64(val2.n[3])) + acc.Add(uint64(val.n[3]) * uint64(val2.n[2])) + acc.Add(uint64(val.n[4]) * uint64(val2.n[1])) + acc.Add(uint64(val.n[5]) * uint64(val2.n[0])) + t5 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*6). + acc.Add(uint64(val.n[0]) * uint64(val2.n[6])) + acc.Add(uint64(val.n[1]) * uint64(val2.n[5])) + acc.Add(uint64(val.n[2]) * uint64(val2.n[4])) + acc.Add(uint64(val.n[3]) * uint64(val2.n[3])) + acc.Add(uint64(val.n[4]) * uint64(val2.n[2])) + acc.Add(uint64(val.n[5]) * uint64(val2.n[1])) + acc.Add(uint64(val.n[6]) * uint64(val2.n[0])) + t6 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*7). + acc.Add(uint64(val.n[0]) * uint64(val2.n[7])) + acc.Add(uint64(val.n[1]) * uint64(val2.n[6])) + acc.Add(uint64(val.n[2]) * uint64(val2.n[5])) + acc.Add(uint64(val.n[3]) * uint64(val2.n[4])) + acc.Add(uint64(val.n[4]) * uint64(val2.n[3])) + acc.Add(uint64(val.n[5]) * uint64(val2.n[2])) + acc.Add(uint64(val.n[6]) * uint64(val2.n[1])) + acc.Add(uint64(val.n[7]) * uint64(val2.n[0])) + t7 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*8). + acc.Add(uint64(val.n[1]) * uint64(val2.n[7])) + acc.Add(uint64(val.n[2]) * uint64(val2.n[6])) + acc.Add(uint64(val.n[3]) * uint64(val2.n[5])) + acc.Add(uint64(val.n[4]) * uint64(val2.n[4])) + acc.Add(uint64(val.n[5]) * uint64(val2.n[3])) + acc.Add(uint64(val.n[6]) * uint64(val2.n[2])) + acc.Add(uint64(val.n[7]) * uint64(val2.n[1])) + t8 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*9). + acc.Add(uint64(val.n[2]) * uint64(val2.n[7])) + acc.Add(uint64(val.n[3]) * uint64(val2.n[6])) + acc.Add(uint64(val.n[4]) * uint64(val2.n[5])) + acc.Add(uint64(val.n[5]) * uint64(val2.n[4])) + acc.Add(uint64(val.n[6]) * uint64(val2.n[3])) + acc.Add(uint64(val.n[7]) * uint64(val2.n[2])) + t9 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*10). + acc.Add(uint64(val.n[3]) * uint64(val2.n[7])) + acc.Add(uint64(val.n[4]) * uint64(val2.n[6])) + acc.Add(uint64(val.n[5]) * uint64(val2.n[5])) + acc.Add(uint64(val.n[6]) * uint64(val2.n[4])) + acc.Add(uint64(val.n[7]) * uint64(val2.n[3])) + t10 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*11). + acc.Add(uint64(val.n[4]) * uint64(val2.n[7])) + acc.Add(uint64(val.n[5]) * uint64(val2.n[6])) + acc.Add(uint64(val.n[6]) * uint64(val2.n[5])) + acc.Add(uint64(val.n[7]) * uint64(val2.n[4])) + t11 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*12). + acc.Add(uint64(val.n[5]) * uint64(val2.n[7])) + acc.Add(uint64(val.n[6]) * uint64(val2.n[6])) + acc.Add(uint64(val.n[7]) * uint64(val2.n[5])) + t12 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*13). + acc.Add(uint64(val.n[6]) * uint64(val2.n[7])) + acc.Add(uint64(val.n[7]) * uint64(val2.n[6])) + t13 := uint64(acc.n[0]) + acc.Rsh32() + + // Terms for 2^(32*14). + acc.Add(uint64(val.n[7]) * uint64(val2.n[7])) + t14 := uint64(acc.n[0]) + acc.Rsh32() + + // What's left is for 2^(32*15). + t15 := uint64(acc.n[0]) + // acc.Rsh32() // No need since not used after this. Guaranteed to be 0. + + // At this point, all of the terms are grouped into their respective base + // and occupy up to 512 bits. Reduce the result accordingly. + s.reduce512(t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, + t15) + return s +} + +// Mul multiplies the passed scalar with the existing one modulo the group order +// in constant time and stores the result in s. +// +// The scalar is returned to support chaining. This enables syntax like: +// s.Mul(s2).AddInt(1) so that s = (s * s2) + 1. +func (s *ModNScalar) Mul(val *ModNScalar) *ModNScalar { + return s.Mul2(s, val) +} + +// SquareVal squares the passed scalar modulo the group order in constant time +// and stores the result in s. +// +// The scalar is returned to support chaining. This enables syntax like: +// s3.SquareVal(s).Mul(s) so that s3 = s^2 * s = s^3. +func (s *ModNScalar) SquareVal(val *ModNScalar) *ModNScalar { + // This could technically be optimized slightly to take advantage of the + // fact that many of the intermediate calculations in squaring are just + // doubling, however, benchmarking has shown that due to the need to use a + // 96-bit accumulator, any savings are essentially offset by that and + // consequently there is no real difference in performance over just + // multiplying the value by itself to justify the extra code for now. This + // can be revisited in the future if it becomes a bottleneck in practice. + + return s.Mul2(val, val) +} + +// Square squares the scalar modulo the group order in constant time. The +// existing scalar is modified. +// +// The scalar is returned to support chaining. This enables syntax like: +// s.Square().Mul(s2) so that s = s^2 * s2. +func (s *ModNScalar) Square() *ModNScalar { + return s.SquareVal(s) +} + +// NegateVal negates the passed scalar modulo the group order and stores the +// result in s in constant time. +// +// The scalar is returned to support chaining. This enables syntax like: +// s.NegateVal(s2).AddInt(1) so that s = -s2 + 1. +func (s *ModNScalar) NegateVal(val *ModNScalar) *ModNScalar { + // Since the scalar is already in the range 0 <= val < N, where N is the + // group order, negation modulo the group order is just the group order + // minus the value. This implies that the result will always be in the + // desired range with the sole exception of 0 because N - 0 = N itself. + // + // Therefore, in order to avoid the need to reduce the result for every + // other case in order to achieve constant time, this creates a mask that is + // all 0s in the case of the scalar being negated is 0 and all 1s otherwise + // and bitwise ands that mask with each word. + // + // Finally, to simplify the carry propagation, this adds the two's + // complement of the scalar to N in order to achieve the same result. + bits := val.n[0] | val.n[1] | val.n[2] | val.n[3] | val.n[4] | val.n[5] | + val.n[6] | val.n[7] + mask := uint64(uint32Mask * constantTimeNotEq(bits, 0)) + c := uint64(orderWordZero) + (uint64(^val.n[0]) + 1) + s.n[0] = uint32(c & mask) + c = (c >> 32) + uint64(orderWordOne) + uint64(^val.n[1]) + s.n[1] = uint32(c & mask) + c = (c >> 32) + uint64(orderWordTwo) + uint64(^val.n[2]) + s.n[2] = uint32(c & mask) + c = (c >> 32) + uint64(orderWordThree) + uint64(^val.n[3]) + s.n[3] = uint32(c & mask) + c = (c >> 32) + uint64(orderWordFour) + uint64(^val.n[4]) + s.n[4] = uint32(c & mask) + c = (c >> 32) + uint64(orderWordFive) + uint64(^val.n[5]) + s.n[5] = uint32(c & mask) + c = (c >> 32) + uint64(orderWordSix) + uint64(^val.n[6]) + s.n[6] = uint32(c & mask) + c = (c >> 32) + uint64(orderWordSeven) + uint64(^val.n[7]) + s.n[7] = uint32(c & mask) + return s +} + +// Negate negates the scalar modulo the group order in constant time. The +// existing scalar is modified. +// +// The scalar is returned to support chaining. This enables syntax like: +// s.Negate().AddInt(1) so that s = -s + 1. +func (s *ModNScalar) Negate() *ModNScalar { + return s.NegateVal(s) +} + +// InverseValNonConst finds the modular multiplicative inverse of the passed +// scalar and stores result in s in *non-constant* time. +// +// The scalar is returned to support chaining. This enables syntax like: +// s3.InverseVal(s1).Mul(s2) so that s3 = s1^-1 * s2. +func (s *ModNScalar) InverseValNonConst(val *ModNScalar) *ModNScalar { + // This is making use of big integers for now. Ideally it will be replaced + // with an implementation that does not depend on big integers. + valBytes := val.Bytes() + bigVal := new(big.Int).SetBytes(valBytes[:]) + bigVal.ModInverse(bigVal, curveParams.N) + s.SetByteSlice(bigVal.Bytes()) + return s +} + +// InverseNonConst finds the modular multiplicative inverse of the scalar in +// *non-constant* time. The existing scalar is modified. +// +// The scalar is returned to support chaining. This enables syntax like: +// s.Inverse().Mul(s2) so that s = s^-1 * s2. +func (s *ModNScalar) InverseNonConst() *ModNScalar { + return s.InverseValNonConst(s) +} + +// IsOverHalfOrder returns whether or not the scalar exceeds the group order +// divided by 2 in constant time. +func (s *ModNScalar) IsOverHalfOrder() bool { + // The intuition here is that the scalar is greater than half of the group + // order if one of the higher individual words is greater than the + // corresponding word of the half group order and all higher words in the + // scalar are equal to their corresponding word of the half group order. + // + // Note that the words 4, 5, and 6 are all the max uint32 value, so there is + // no need to test if those individual words of the scalar exceeds them, + // hence, only equality is checked for them. + result := constantTimeGreater(s.n[7], halfOrderWordSeven) + highWordsEqual := constantTimeEq(s.n[7], halfOrderWordSeven) + highWordsEqual &= constantTimeEq(s.n[6], halfOrderWordSix) + highWordsEqual &= constantTimeEq(s.n[5], halfOrderWordFive) + highWordsEqual &= constantTimeEq(s.n[4], halfOrderWordFour) + result |= highWordsEqual & constantTimeGreater(s.n[3], halfOrderWordThree) + highWordsEqual &= constantTimeEq(s.n[3], halfOrderWordThree) + result |= highWordsEqual & constantTimeGreater(s.n[2], halfOrderWordTwo) + highWordsEqual &= constantTimeEq(s.n[2], halfOrderWordTwo) + result |= highWordsEqual & constantTimeGreater(s.n[1], halfOrderWordOne) + highWordsEqual &= constantTimeEq(s.n[1], halfOrderWordOne) + result |= highWordsEqual & constantTimeGreater(s.n[0], halfOrderWordZero) + + return result != 0 +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/nonce.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/nonce.go new file mode 100644 index 0000000000..81b205d9c1 --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/nonce.go @@ -0,0 +1,263 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Copyright (c) 2015-2020 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +import ( + "bytes" + "crypto/sha256" + "hash" +) + +// References: +// [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone) +// +// [ISO/IEC 8825-1]: Information technology — ASN.1 encoding rules: +// Specification of Basic Encoding Rules (BER), Canonical Encoding Rules +// (CER) and Distinguished Encoding Rules (DER) +// +// [SEC1]: Elliptic Curve Cryptography (May 31, 2009, Version 2.0) +// https://www.secg.org/sec1-v2.pdf + +var ( + // singleZero is used during RFC6979 nonce generation. It is provided + // here to avoid the need to create it multiple times. + singleZero = []byte{0x00} + + // zeroInitializer is used during RFC6979 nonce generation. It is provided + // here to avoid the need to create it multiple times. + zeroInitializer = bytes.Repeat([]byte{0x00}, sha256.BlockSize) + + // singleOne is used during RFC6979 nonce generation. It is provided + // here to avoid the need to create it multiple times. + singleOne = []byte{0x01} + + // oneInitializer is used during RFC6979 nonce generation. It is provided + // here to avoid the need to create it multiple times. + oneInitializer = bytes.Repeat([]byte{0x01}, sha256.Size) +) + +// hmacsha256 implements a resettable version of HMAC-SHA256. +type hmacsha256 struct { + inner, outer hash.Hash + ipad, opad [sha256.BlockSize]byte +} + +// Write adds data to the running hash. +func (h *hmacsha256) Write(p []byte) { + h.inner.Write(p) +} + +// initKey initializes the HMAC-SHA256 instance to the provided key. +func (h *hmacsha256) initKey(key []byte) { + // Hash the key if it is too large. + if len(key) > sha256.BlockSize { + h.outer.Write(key) + key = h.outer.Sum(nil) + } + copy(h.ipad[:], key) + copy(h.opad[:], key) + for i := range h.ipad { + h.ipad[i] ^= 0x36 + } + for i := range h.opad { + h.opad[i] ^= 0x5c + } + h.inner.Write(h.ipad[:]) +} + +// ResetKey resets the HMAC-SHA256 to its initial state and then initializes it +// with the provided key. It is equivalent to creating a new instance with the +// provided key without allocating more memory. +func (h *hmacsha256) ResetKey(key []byte) { + h.inner.Reset() + h.outer.Reset() + copy(h.ipad[:], zeroInitializer) + copy(h.opad[:], zeroInitializer) + h.initKey(key) +} + +// Resets the HMAC-SHA256 to its initial state using the current key. +func (h *hmacsha256) Reset() { + h.inner.Reset() + h.inner.Write(h.ipad[:]) +} + +// Sum returns the hash of the written data. +func (h *hmacsha256) Sum() []byte { + h.outer.Reset() + h.outer.Write(h.opad[:]) + h.outer.Write(h.inner.Sum(nil)) + return h.outer.Sum(nil) +} + +// newHMACSHA256 returns a new HMAC-SHA256 hasher using the provided key. +func newHMACSHA256(key []byte) *hmacsha256 { + h := new(hmacsha256) + h.inner = sha256.New() + h.outer = sha256.New() + h.initKey(key) + return h +} + +// NonceRFC6979 generates a nonce deterministically according to RFC 6979 using +// HMAC-SHA256 for the hashing function. It takes a 32-byte hash as an input +// and returns a 32-byte nonce to be used for deterministic signing. The extra +// and version arguments are optional, but allow additional data to be added to +// the input of the HMAC. When provided, the extra data must be 32-bytes and +// version must be 16 bytes or they will be ignored. +// +// Finally, the extraIterations parameter provides a method to produce a stream +// of deterministic nonces to ensure the signing code is able to produce a nonce +// that results in a valid signature in the extremely unlikely event the +// original nonce produced results in an invalid signature (e.g. R == 0). +// Signing code should start with 0 and increment it if necessary. +func NonceRFC6979(privKey []byte, hash []byte, extra []byte, version []byte, extraIterations uint32) *ModNScalar { + // Input to HMAC is the 32-byte private key and the 32-byte hash. In + // addition, it may include the optional 32-byte extra data and 16-byte + // version. Create a fixed-size array to avoid extra allocs and slice it + // properly. + const ( + privKeyLen = 32 + hashLen = 32 + extraLen = 32 + versionLen = 16 + ) + var keyBuf [privKeyLen + hashLen + extraLen + versionLen]byte + + // Truncate rightmost bytes of private key and hash if they are too long and + // leave left padding of zeros when they're too short. + if len(privKey) > privKeyLen { + privKey = privKey[:privKeyLen] + } + if len(hash) > hashLen { + hash = hash[:hashLen] + } + offset := privKeyLen - len(privKey) // Zero left padding if needed. + offset += copy(keyBuf[offset:], privKey) + offset += hashLen - len(hash) // Zero left padding if needed. + offset += copy(keyBuf[offset:], hash) + if len(extra) == extraLen { + offset += copy(keyBuf[offset:], extra) + if len(version) == versionLen { + offset += copy(keyBuf[offset:], version) + } + } else if len(version) == versionLen { + // When the version was specified, but not the extra data, leave the + // extra data portion all zero. + offset += privKeyLen + offset += copy(keyBuf[offset:], version) + } + key := keyBuf[:offset] + + // Step B. + // + // V = 0x01 0x01 0x01 ... 0x01 such that the length of V, in bits, is + // equal to 8*ceil(hashLen/8). + // + // Note that since the hash length is a multiple of 8 for the chosen hash + // function in this optimized implementation, the result is just the hash + // length, so avoid the extra calculations. Also, since it isn't modified, + // start with a global value. + v := oneInitializer + + // Step C (Go zeroes all allocated memory). + // + // K = 0x00 0x00 0x00 ... 0x00 such that the length of K, in bits, is + // equal to 8*ceil(hashLen/8). + // + // As above, since the hash length is a multiple of 8 for the chosen hash + // function in this optimized implementation, the result is just the hash + // length, so avoid the extra calculations. + k := zeroInitializer[:hashLen] + + // Step D. + // + // K = HMAC_K(V || 0x00 || int2octets(x) || bits2octets(h1)) + // + // Note that key is the "int2octets(x) || bits2octets(h1)" portion along + // with potential additional data as described by section 3.6 of the RFC. + hasher := newHMACSHA256(k) + hasher.Write(oneInitializer) + hasher.Write(singleZero[:]) + hasher.Write(key) + k = hasher.Sum() + + // Step E. + // + // V = HMAC_K(V) + hasher.ResetKey(k) + hasher.Write(v) + v = hasher.Sum() + + // Step F. + // + // K = HMAC_K(V || 0x01 || int2octets(x) || bits2octets(h1)) + // + // Note that key is the "int2octets(x) || bits2octets(h1)" portion along + // with potential additional data as described by section 3.6 of the RFC. + hasher.Reset() + hasher.Write(v) + hasher.Write(singleOne[:]) + hasher.Write(key[:]) + k = hasher.Sum() + + // Step G. + // + // V = HMAC_K(V) + hasher.ResetKey(k) + hasher.Write(v) + v = hasher.Sum() + + // Step H. + // + // Repeat until the value is nonzero and less than the curve order. + var generated uint32 + for { + // Step H1 and H2. + // + // Set T to the empty sequence. The length of T (in bits) is denoted + // tlen; thus, at that point, tlen = 0. + // + // While tlen < qlen, do the following: + // V = HMAC_K(V) + // T = T || V + // + // Note that because the hash function output is the same length as the + // private key in this optimized implementation, there is no need to + // loop or create an intermediate T. + hasher.Reset() + hasher.Write(v) + v = hasher.Sum() + + // Step H3. + // + // k = bits2int(T) + // If k is within the range [1,q-1], return it. + // + // Otherwise, compute: + // K = HMAC_K(V || 0x00) + // V = HMAC_K(V) + var secret ModNScalar + overflow := secret.SetByteSlice(v) + if !overflow && !secret.IsZero() { + generated++ + if generated > extraIterations { + return &secret + } + } + + // K = HMAC_K(V || 0x00) + hasher.Reset() + hasher.Write(v) + hasher.Write(singleZero[:]) + k = hasher.Sum() + + // V = HMAC_K(V) + hasher.ResetKey(k) + hasher.Write(v) + v = hasher.Sum() + } +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/privkey.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/privkey.go new file mode 100644 index 0000000000..3590346c68 --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/privkey.go @@ -0,0 +1,77 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Copyright (c) 2015-2020 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +import ( + "crypto/ecdsa" + "crypto/rand" +) + +// PrivateKey provides facilities for working with secp256k1 private keys within +// this package and includes functionality such as serializing and parsing them +// as well as computing their associated public key. +type PrivateKey struct { + Key ModNScalar +} + +// NewPrivateKey instantiates a new private key from a scalar encoded as a +// big integer. +func NewPrivateKey(key *ModNScalar) *PrivateKey { + return &PrivateKey{Key: *key} +} + +// PrivKeyFromBytes returns a private based on the provided byte slice which is +// interpreted as an unsigned 256-bit big-endian integer in the range [0, N-1], +// where N is the order of the curve. +// +// Note that this means passing a slice with more than 32 bytes is truncated and +// that truncated value is reduced modulo N. It is up to the caller to either +// provide a value in the appropriate range or choose to accept the described +// behavior. +// +// Typically callers should simply make use of GeneratePrivateKey when creating +// private keys which properly handles generation of appropriate values. +func PrivKeyFromBytes(privKeyBytes []byte) *PrivateKey { + var privKey PrivateKey + privKey.Key.SetByteSlice(privKeyBytes) + return &privKey +} + +// GeneratePrivateKey returns a private key that is suitable for use with +// secp256k1. +func GeneratePrivateKey() (*PrivateKey, error) { + key, err := ecdsa.GenerateKey(S256(), rand.Reader) + if err != nil { + return nil, err + } + return PrivKeyFromBytes(key.D.Bytes()), nil +} + +// PubKey computes and returns the public key corresponding to this private key. +func (p *PrivateKey) PubKey() *PublicKey { + var result JacobianPoint + ScalarBaseMultNonConst(&p.Key, &result) + result.ToAffine() + return NewPublicKey(&result.X, &result.Y) +} + +// Zero manually clears the memory associated with the private key. This can be +// used to explicitly clear key material from memory for enhanced security +// against memory scraping. +func (p *PrivateKey) Zero() { + p.Key.Zero() +} + +// PrivKeyBytesLen defines the length in bytes of a serialized private key. +const PrivKeyBytesLen = 32 + +// Serialize returns the private key as a 256-bit big-endian binary-encoded +// number, padded to a length of 32 bytes. +func (p PrivateKey) Serialize() []byte { + var privKeyBytes [PrivKeyBytesLen]byte + p.Key.PutBytes(&privKeyBytes) + return privKeyBytes[:] +} diff --git a/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/pubkey.go b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/pubkey.go new file mode 100644 index 0000000000..67165833ff --- /dev/null +++ b/vendor/github.com/decred/dcrd/dcrec/secp256k1/v4/pubkey.go @@ -0,0 +1,232 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package secp256k1 + +// References: +// [SEC1] Elliptic Curve Cryptography +// https://www.secg.org/sec1-v2.pdf +// +// [SEC2] Recommended Elliptic Curve Domain Parameters +// https://www.secg.org/sec2-v2.pdf +// +// [ANSI X9.62-1998] Public Key Cryptography For The Financial Services +// Industry: The Elliptic Curve Digital Signature Algorithm (ECDSA) + +import ( + "fmt" +) + +const ( + // PubKeyBytesLenCompressed is the number of bytes of a serialized + // compressed public key. + PubKeyBytesLenCompressed = 33 + + // PubKeyBytesLenUncompressed is the number of bytes of a serialized + // uncompressed public key. + PubKeyBytesLenUncompressed = 65 + + // PubKeyFormatCompressedEven is the identifier prefix byte for a public key + // whose Y coordinate is even when serialized in the compressed format per + // section 2.3.4 of [SEC1](https://secg.org/sec1-v2.pdf#subsubsection.2.3.4). + PubKeyFormatCompressedEven byte = 0x02 + + // PubKeyFormatCompressedOdd is the identifier prefix byte for a public key + // whose Y coordinate is odd when serialized in the compressed format per + // section 2.3.4 of [SEC1](https://secg.org/sec1-v2.pdf#subsubsection.2.3.4). + PubKeyFormatCompressedOdd byte = 0x03 + + // PubKeyFormatUncompressed is the identifier prefix byte for a public key + // when serialized according in the uncompressed format per section 2.3.3 of + // [SEC1](https://secg.org/sec1-v2.pdf#subsubsection.2.3.3). + PubKeyFormatUncompressed byte = 0x04 + + // PubKeyFormatHybridEven is the identifier prefix byte for a public key + // whose Y coordinate is even when serialized according to the hybrid format + // per section 4.3.6 of [ANSI X9.62-1998]. + // + // NOTE: This format makes little sense in practice an therefore this + // package will not produce public keys serialized in this format. However, + // it will parse them since they exist in the wild. + PubKeyFormatHybridEven byte = 0x06 + + // PubKeyFormatHybridOdd is the identifier prefix byte for a public key + // whose Y coordingate is odd when serialized according to the hybrid format + // per section 4.3.6 of [ANSI X9.62-1998]. + // + // NOTE: This format makes little sense in practice an therefore this + // package will not produce public keys serialized in this format. However, + // it will parse them since they exist in the wild. + PubKeyFormatHybridOdd byte = 0x07 +) + +// PublicKey provides facilities for efficiently working with secp256k1 public +// keys within this package and includes functions to serialize in both +// uncompressed and compressed SEC (Standards for Efficient Cryptography) +// formats. +type PublicKey struct { + x FieldVal + y FieldVal +} + +// NewPublicKey instantiates a new public key with the given x and y +// coordinates. +// +// It should be noted that, unlike ParsePubKey, since this accepts arbitrary x +// and y coordinates, it allows creation of public keys that are not valid +// points on the secp256k1 curve. The IsOnCurve method of the returned instance +// can be used to determine validity. +func NewPublicKey(x, y *FieldVal) *PublicKey { + var pubKey PublicKey + pubKey.x.Set(x) + pubKey.y.Set(y) + return &pubKey +} + +// ParsePubKey parses a secp256k1 public key encoded according to the format +// specified by ANSI X9.62-1998, which means it is also compatible with the +// SEC (Standards for Efficient Cryptography) specification which is a subset of +// the former. In other words, it supports the uncompressed, compressed, and +// hybrid formats as follows: +// +// Compressed: +// <32-byte X coordinate> +// Uncompressed: +// <32-byte X coordinate><32-byte Y coordinate> +// Hybrid: +// <32-byte X coordinate><32-byte Y coordinate> +// +// NOTE: The hybrid format makes little sense in practice an therefore this +// package will not produce public keys serialized in this format. However, +// this function will properly parse them since they exist in the wild. +func ParsePubKey(serialized []byte) (key *PublicKey, err error) { + var x, y FieldVal + switch len(serialized) { + case PubKeyBytesLenUncompressed: + // Reject unsupported public key formats for the given length. + format := serialized[0] + switch format { + case PubKeyFormatUncompressed: + case PubKeyFormatHybridEven, PubKeyFormatHybridOdd: + default: + str := fmt.Sprintf("invalid public key: unsupported format: %x", + format) + return nil, makeError(ErrPubKeyInvalidFormat, str) + } + + // Parse the x and y coordinates while ensuring that they are in the + // allowed range. + if overflow := x.SetByteSlice(serialized[1:33]); overflow { + str := "invalid public key: x >= field prime" + return nil, makeError(ErrPubKeyXTooBig, str) + } + if overflow := y.SetByteSlice(serialized[33:]); overflow { + str := "invalid public key: y >= field prime" + return nil, makeError(ErrPubKeyYTooBig, str) + } + + // Ensure the oddness of the y coordinate matches the specified format + // for hybrid public keys. + if format == PubKeyFormatHybridEven || format == PubKeyFormatHybridOdd { + wantOddY := format == PubKeyFormatHybridOdd + if y.IsOdd() != wantOddY { + str := fmt.Sprintf("invalid public key: y oddness does not "+ + "match specified value of %v", wantOddY) + return nil, makeError(ErrPubKeyMismatchedOddness, str) + } + } + + // Reject public keys that are not on the secp256k1 curve. + if !isOnCurve(&x, &y) { + str := fmt.Sprintf("invalid public key: [%v,%v] not on secp256k1 "+ + "curve", x, y) + return nil, makeError(ErrPubKeyNotOnCurve, str) + } + + case PubKeyBytesLenCompressed: + // Reject unsupported public key formats for the given length. + format := serialized[0] + switch format { + case PubKeyFormatCompressedEven, PubKeyFormatCompressedOdd: + default: + str := fmt.Sprintf("invalid public key: unsupported format: %x", + format) + return nil, makeError(ErrPubKeyInvalidFormat, str) + } + + // Parse the x coordinate while ensuring that it is in the allowed + // range. + if overflow := x.SetByteSlice(serialized[1:33]); overflow { + str := "invalid public key: x >= field prime" + return nil, makeError(ErrPubKeyXTooBig, str) + } + + // Attempt to calculate the y coordinate for the given x coordinate such + // that the result pair is a point on the secp256k1 curve and the + // solution with desired oddness is chosen. + wantOddY := format == PubKeyFormatCompressedOdd + if !DecompressY(&x, wantOddY, &y) { + str := fmt.Sprintf("invalid public key: x coordinate %v is not on "+ + "the secp256k1 curve", x) + return nil, makeError(ErrPubKeyNotOnCurve, str) + } + y.Normalize() + + default: + str := fmt.Sprintf("malformed public key: invalid length: %d", + len(serialized)) + return nil, makeError(ErrPubKeyInvalidLen, str) + } + + return NewPublicKey(&x, &y), nil +} + +// SerializeUncompressed serializes a public key in the 65-byte uncompressed +// format. +func (p PublicKey) SerializeUncompressed() []byte { + // 0x04 || 32-byte x coordinate || 32-byte y coordinate + var b [PubKeyBytesLenUncompressed]byte + b[0] = PubKeyFormatUncompressed + p.x.PutBytesUnchecked(b[1:33]) + p.y.PutBytesUnchecked(b[33:65]) + return b[:] +} + +// SerializeCompressed serializes a public key in the 33-byte compressed format. +func (p PublicKey) SerializeCompressed() []byte { + // Choose the format byte depending on the oddness of the Y coordinate. + format := PubKeyFormatCompressedEven + if p.y.IsOdd() { + format = PubKeyFormatCompressedOdd + } + + // 0x02 or 0x03 || 32-byte x coordinate + var b [PubKeyBytesLenCompressed]byte + b[0] = format + p.x.PutBytesUnchecked(b[1:33]) + return b[:] +} + +// IsEqual compares this PublicKey instance to the one passed, returning true if +// both PublicKeys are equivalent. A PublicKey is equivalent to another, if they +// both have the same X and Y coordinate. +func (p *PublicKey) IsEqual(otherPubKey *PublicKey) bool { + return p.x.Equals(&otherPubKey.x) && p.y.Equals(&otherPubKey.y) +} + +// AsJacobian converts the public key into a Jacobian point with Z=1 and stores +// the result in the provided result param. This allows the public key to be +// treated a Jacobian point in the secp256k1 group in calculations. +func (p *PublicKey) AsJacobian(result *JacobianPoint) { + result.X.Set(&p.x) + result.Y.Set(&p.y) + result.Z.SetInt(1) +} + +// IsOnCurve returns whether or not the public key represents a point on the +// secp256k1 curve. +func (p *PublicKey) IsOnCurve() bool { + return isOnCurve(&p.x, &p.y) +} diff --git a/vendor/github.com/elastic/gosigar/go.mod b/vendor/github.com/elastic/gosigar/go.mod deleted file mode 100644 index 977b07db46..0000000000 --- a/vendor/github.com/elastic/gosigar/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/elastic/gosigar - -go 1.14 - -require ( - github.com/pkg/errors v0.9.1 - github.com/stretchr/testify v1.4.0 - golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0 -) diff --git a/vendor/github.com/elastic/gosigar/go.sum b/vendor/github.com/elastic/gosigar/go.sum deleted file mode 100644 index 3a816f7154..0000000000 --- a/vendor/github.com/elastic/gosigar/go.sum +++ /dev/null @@ -1,15 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0 h1:8H8QZJ30plJyIVj60H3lr8TZGIq2Fh3Cyrs/ZNg1foU= -golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/fatih/color/go.mod b/vendor/github.com/fatih/color/go.mod deleted file mode 100644 index c9b3cd59a2..0000000000 --- a/vendor/github.com/fatih/color/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/fatih/color - -go 1.13 - -require ( - github.com/mattn/go-colorable v0.1.9 - github.com/mattn/go-isatty v0.0.14 -) diff --git a/vendor/github.com/fatih/color/go.sum b/vendor/github.com/fatih/color/go.sum deleted file mode 100644 index cbbcfb6446..0000000000 --- a/vendor/github.com/fatih/color/go.sum +++ /dev/null @@ -1,9 +0,0 @@ -github.com/mattn/go-colorable v0.1.9 h1:sqDoxXbdeALODt0DAeJCVp38ps9ZogZEAXjus69YV3U= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/vendor/github.com/flynn/noise/go.mod b/vendor/github.com/flynn/noise/go.mod deleted file mode 100644 index b6a93ed739..0000000000 --- a/vendor/github.com/flynn/noise/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/flynn/noise - -go 1.16 - -require ( - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c -) diff --git a/vendor/github.com/flynn/noise/go.sum b/vendor/github.com/flynn/noise/go.sum deleted file mode 100644 index c21d9bcffa..0000000000 --- a/vendor/github.com/flynn/noise/go.sum +++ /dev/null @@ -1,15 +0,0 @@ -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/vendor/github.com/francoispqt/gojay/go.mod b/vendor/github.com/francoispqt/gojay/go.mod deleted file mode 100644 index 76814eb386..0000000000 --- a/vendor/github.com/francoispqt/gojay/go.mod +++ /dev/null @@ -1,24 +0,0 @@ -module github.com/francoispqt/gojay - -go 1.12 - -require ( - cloud.google.com/go v0.37.0 // indirect - github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23 - github.com/go-errors/errors v1.0.1 - github.com/golang/protobuf v1.3.1 // indirect - github.com/json-iterator/go v1.1.6 - github.com/lunixbochs/vtclean v1.0.0 // indirect - github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe - github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.1 // indirect - github.com/pkg/errors v0.8.1 // indirect - github.com/stretchr/testify v1.2.2 - github.com/viant/assertly v0.4.8 - github.com/viant/toolbox v0.24.0 - golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a // indirect - golang.org/x/net v0.0.0-20190313220215-9f648a60d977 - golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 // indirect - golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f // indirect - gopkg.in/yaml.v2 v2.2.2 // indirect -) diff --git a/vendor/github.com/francoispqt/gojay/go.sum b/vendor/github.com/francoispqt/gojay/go.sum deleted file mode 100644 index 06c27493af..0000000000 --- a/vendor/github.com/francoispqt/gojay/go.sum +++ /dev/null @@ -1,182 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0 h1:69FNAINiZfsEuwH3fKq8QrAAnHz+2m4XL4kVYi5BX0Q= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23 h1:D21IyuvjDCshj1/qq+pCNd3VZOAEI9jy6Bi131YlXgI= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/json-iterator/go v1.1.6 h1:MrUvLMLTMxbqFJ9kzlvat/rYZqZnW3u4wkLzWTaFwKs= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lunixbochs/vtclean v1.0.0 h1:xu2sLAri4lGiovBDQKxl5mrXyESr3gUr5m5SM5+LVb8= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe h1:W/GaMY0y69G4cFlmsC6B9sbuo2fP8OFP1ABjt4kPz+w= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/viant/assertly v0.4.8 h1:5x1GzBaRteIwTr5RAGFVG14uNeRFxVNbXPWrK2qAgpc= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0 h1:6TteTDQ68CjgcCe8wH3D3ZhUQQOJXMTbj/D9rkk2a1k= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a h1:YX8ljsm6wXlHZO+aRz9Exqr0evNhKRNe5K/gi+zKh4U= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977 h1:actzWV6iWn3GLqN8dZjzsB+CLt+gaV2+wsxroxiQI8I= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f h1:yCrMx/EeIue0+Qca57bWZS7VX6ymEoypmhWyPhz0NHM= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/fsnotify/fsnotify/CHANGELOG.md b/vendor/github.com/fsnotify/fsnotify/CHANGELOG.md index a438fe4b4a..cc01c08f56 100644 --- a/vendor/github.com/fsnotify/fsnotify/CHANGELOG.md +++ b/vendor/github.com/fsnotify/fsnotify/CHANGELOG.md @@ -7,9 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [1.5.4] - 2022-04-25 + +* Windows: add missing defer to `Watcher.WatchList` [#447](https://github.com/fsnotify/fsnotify/pull/447) +* go.mod: use latest x/sys [#444](https://github.com/fsnotify/fsnotify/pull/444) +* Fix compilation for OpenBSD [#443](https://github.com/fsnotify/fsnotify/pull/443) + +## [1.5.3] - 2022-04-22 + +* This version is retracted. An incorrect branch is published accidentally [#445](https://github.com/fsnotify/fsnotify/issues/445) + +## [1.5.2] - 2022-04-21 + +* Add a feature to return the directories and files that are being monitored [#374](https://github.com/fsnotify/fsnotify/pull/374) +* Fix potential crash on windows if `raw.FileNameLength` exceeds `syscall.MAX_PATH` [#361](https://github.com/fsnotify/fsnotify/pull/361) +* Allow build on unsupported GOOS [#424](https://github.com/fsnotify/fsnotify/pull/424) +* Don't set `poller.fd` twice in `newFdPoller` [#406](https://github.com/fsnotify/fsnotify/pull/406) +* fix go vet warnings: call to `(*T).Fatalf` from a non-test goroutine [#416](https://github.com/fsnotify/fsnotify/pull/416) + ## [1.5.1] - 2021-08-24 -* Revert Add AddRaw to not follow symlinks +* Revert Add AddRaw to not follow symlinks [#394](https://github.com/fsnotify/fsnotify/pull/394) ## [1.5.0] - 2021-08-20 diff --git a/vendor/github.com/fsnotify/fsnotify/CONTRIBUTING.md b/vendor/github.com/fsnotify/fsnotify/CONTRIBUTING.md index 828a60b24b..8a642563d7 100644 --- a/vendor/github.com/fsnotify/fsnotify/CONTRIBUTING.md +++ b/vendor/github.com/fsnotify/fsnotify/CONTRIBUTING.md @@ -48,18 +48,6 @@ fsnotify uses build tags to compile different code on Linux, BSD, macOS, and Win Before doing a pull request, please do your best to test your changes on multiple platforms, and list which platforms you were able/unable to test on. -To aid in cross-platform testing there is a Vagrantfile for Linux and BSD. - -* Install [Vagrant](http://www.vagrantup.com/) and [VirtualBox](https://www.virtualbox.org/) -* Setup [Vagrant Gopher](https://github.com/nathany/vagrant-gopher) in your `src` folder. -* Run `vagrant up` from the project folder. You can also setup just one box with `vagrant up linux` or `vagrant up bsd` (note: the BSD box doesn't support Windows hosts at this time, and NFS may prompt for your host OS password) -* Once setup, you can run the test suite on a given OS with a single command `vagrant ssh linux -c 'cd fsnotify/fsnotify; go test'`. -* When you're done, you will want to halt or destroy the Vagrant boxes. - -Notice: fsnotify file system events won't trigger in shared folders. The tests get around this limitation by using the /tmp directory. - -Right now there is no equivalent solution for Windows and macOS, but there are Windows VMs [freely available from Microsoft](http://www.modern.ie/en-us/virtualization-tools#downloads). - ### Maintainers Help maintaining fsnotify is welcome. To be a maintainer: @@ -67,11 +55,6 @@ Help maintaining fsnotify is welcome. To be a maintainer: * Submit a pull request and sign the CLA as above. * You must be able to run the test suite on Mac, Windows, Linux and BSD. -To keep master clean, the fsnotify project uses the "apply mail" workflow outlined in Nathaniel Talbott's post ["Merge pull request" Considered Harmful][am]. This requires installing [hub][]. - All code changes should be internal pull requests. Releases are tagged using [Semantic Versioning](http://semver.org/). - -[hub]: https://github.com/github/hub -[am]: http://blog.spreedly.com/2014/06/24/merge-pull-request-considered-harmful/#.VGa5yZPF_Zs diff --git a/vendor/github.com/fsnotify/fsnotify/README.md b/vendor/github.com/fsnotify/fsnotify/README.md index df57b1b282..0731c5ef8a 100644 --- a/vendor/github.com/fsnotify/fsnotify/README.md +++ b/vendor/github.com/fsnotify/fsnotify/README.md @@ -1,12 +1,8 @@ # File system notifications for Go -[![GoDoc](https://godoc.org/github.com/fsnotify/fsnotify?status.svg)](https://godoc.org/github.com/fsnotify/fsnotify) [![Go Report Card](https://goreportcard.com/badge/github.com/fsnotify/fsnotify)](https://goreportcard.com/report/github.com/fsnotify/fsnotify) +[![Go Reference](https://pkg.go.dev/badge/github.com/fsnotify/fsnotify.svg)](https://pkg.go.dev/github.com/fsnotify/fsnotify) [![Go Report Card](https://goreportcard.com/badge/github.com/fsnotify/fsnotify)](https://goreportcard.com/report/github.com/fsnotify/fsnotify) [![Maintainers Wanted](https://img.shields.io/badge/maintainers-wanted-red.svg)](https://github.com/fsnotify/fsnotify/issues/413) -fsnotify utilizes [golang.org/x/sys](https://godoc.org/golang.org/x/sys) rather than `syscall` from the standard library. Ensure you have the latest version installed by running: - -```console -go get -u golang.org/x/sys/... -``` +fsnotify utilizes [`golang.org/x/sys`](https://pkg.go.dev/golang.org/x/sys) rather than [`syscall`](https://pkg.go.dev/syscall) from the standard library. Cross platform: Windows, Linux, BSD and macOS. @@ -16,22 +12,20 @@ Cross platform: Windows, Linux, BSD and macOS. | kqueue | BSD, macOS, iOS\* | Supported | | ReadDirectoryChangesW | Windows | Supported | | FSEvents | macOS | [Planned](https://github.com/fsnotify/fsnotify/issues/11) | -| FEN | Solaris 11 | [In Progress](https://github.com/fsnotify/fsnotify/issues/12) | -| fanotify | Linux 2.6.37+ | [Planned](https://github.com/fsnotify/fsnotify/issues/114) | +| FEN | Solaris 11 | [In Progress](https://github.com/fsnotify/fsnotify/pull/371) | +| fanotify | Linux 2.6.37+ | [Maybe](https://github.com/fsnotify/fsnotify/issues/114) | | USN Journals | Windows | [Maybe](https://github.com/fsnotify/fsnotify/issues/53) | | Polling | *All* | [Maybe](https://github.com/fsnotify/fsnotify/issues/9) | \* Android and iOS are untested. -Please see [the documentation](https://godoc.org/github.com/fsnotify/fsnotify) and consult the [FAQ](#faq) for usage information. +Please see [the documentation](https://pkg.go.dev/github.com/fsnotify/fsnotify) and consult the [FAQ](#faq) for usage information. ## API stability -fsnotify is a fork of [howeyc/fsnotify](https://godoc.org/github.com/howeyc/fsnotify) with a new API as of v1.0. The API is based on [this design document](http://goo.gl/MrYxyA). - -All [releases](https://github.com/fsnotify/fsnotify/releases) are tagged based on [Semantic Versioning](http://semver.org/). Further API changes are [planned](https://github.com/fsnotify/fsnotify/milestones), and will be tagged with a new major revision number. +fsnotify is a fork of [howeyc/fsnotify](https://github.com/howeyc/fsnotify) with a new API as of v1.0. The API is based on [this design document](http://goo.gl/MrYxyA). -Go 1.6 supports dependencies located in the `vendor/` folder. Unless you are creating a library, it is recommended that you copy fsnotify into `vendor/github.com/fsnotify/fsnotify` within your project, and likewise for `golang.org/x/sys`. +All [releases](https://github.com/fsnotify/fsnotify/releases) are tagged based on [Semantic Versioning](http://semver.org/). ## Usage @@ -84,10 +78,6 @@ func main() { Please refer to [CONTRIBUTING][] before opening an issue or pull request. -## Example - -See [example_test.go](https://github.com/fsnotify/fsnotify/blob/master/example_test.go). - ## FAQ **When a file is moved to another directory is it still being watched?** diff --git a/vendor/github.com/fsnotify/fsnotify/fsnotify_unsupported.go b/vendor/github.com/fsnotify/fsnotify/fsnotify_unsupported.go new file mode 100644 index 0000000000..5968855983 --- /dev/null +++ b/vendor/github.com/fsnotify/fsnotify/fsnotify_unsupported.go @@ -0,0 +1,36 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !darwin && !dragonfly && !freebsd && !openbsd && !linux && !netbsd && !solaris && !windows +// +build !darwin,!dragonfly,!freebsd,!openbsd,!linux,!netbsd,!solaris,!windows + +package fsnotify + +import ( + "fmt" + "runtime" +) + +// Watcher watches a set of files, delivering events to a channel. +type Watcher struct{} + +// NewWatcher establishes a new watcher with the underlying OS and begins waiting for events. +func NewWatcher() (*Watcher, error) { + return nil, fmt.Errorf("fsnotify not supported on %s", runtime.GOOS) +} + +// Close removes all watches and closes the events channel. +func (w *Watcher) Close() error { + return nil +} + +// Add starts watching the named file or directory (non-recursively). +func (w *Watcher) Add(name string) error { + return nil +} + +// Remove stops watching the the named file or directory (non-recursively). +func (w *Watcher) Remove(name string) error { + return nil +} diff --git a/vendor/github.com/fsnotify/fsnotify/go.mod b/vendor/github.com/fsnotify/fsnotify/go.mod deleted file mode 100644 index 54089e48b7..0000000000 --- a/vendor/github.com/fsnotify/fsnotify/go.mod +++ /dev/null @@ -1,7 +0,0 @@ -module github.com/fsnotify/fsnotify - -go 1.13 - -require golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c - -retract v1.5.0 diff --git a/vendor/github.com/fsnotify/fsnotify/go.sum b/vendor/github.com/fsnotify/fsnotify/go.sum deleted file mode 100644 index 0f478630ca..0000000000 --- a/vendor/github.com/fsnotify/fsnotify/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/vendor/github.com/fsnotify/fsnotify/inotify.go b/vendor/github.com/fsnotify/fsnotify/inotify.go index eb87699b5b..a6d0e0ec8c 100644 --- a/vendor/github.com/fsnotify/fsnotify/inotify.go +++ b/vendor/github.com/fsnotify/fsnotify/inotify.go @@ -163,6 +163,19 @@ func (w *Watcher) Remove(name string) error { return nil } +// WatchList returns the directories and files that are being monitered. +func (w *Watcher) WatchList() []string { + w.mu.Lock() + defer w.mu.Unlock() + + entries := make([]string, 0, len(w.watches)) + for pathname := range w.watches { + entries = append(entries, pathname) + } + + return entries +} + type watch struct { wd uint32 // Watch descriptor (as returned by the inotify_add_watch() syscall) flags uint32 // inotify flags of this watch (see inotify(7) for the list of valid flags) diff --git a/vendor/github.com/fsnotify/fsnotify/inotify_poller.go b/vendor/github.com/fsnotify/fsnotify/inotify_poller.go index e9ff9439f7..b572a37c3f 100644 --- a/vendor/github.com/fsnotify/fsnotify/inotify_poller.go +++ b/vendor/github.com/fsnotify/fsnotify/inotify_poller.go @@ -38,7 +38,6 @@ func newFdPoller(fd int) (*fdPoller, error) { poller.close() } }() - poller.fd = fd // Create epoll fd poller.epfd, errno = unix.EpollCreate1(unix.EPOLL_CLOEXEC) diff --git a/vendor/github.com/fsnotify/fsnotify/kqueue.go b/vendor/github.com/fsnotify/fsnotify/kqueue.go index 368f5b790d..6fb8d8532e 100644 --- a/vendor/github.com/fsnotify/fsnotify/kqueue.go +++ b/vendor/github.com/fsnotify/fsnotify/kqueue.go @@ -148,6 +148,19 @@ func (w *Watcher) Remove(name string) error { return nil } +// WatchList returns the directories and files that are being monitered. +func (w *Watcher) WatchList() []string { + w.mu.Lock() + defer w.mu.Unlock() + + entries := make([]string, 0, len(w.watches)) + for pathname := range w.watches { + entries = append(entries, pathname) + } + + return entries +} + // Watch all events (except NOTE_EXTEND, NOTE_LINK, NOTE_REVOKE) const noteAllEvents = unix.NOTE_DELETE | unix.NOTE_WRITE | unix.NOTE_ATTRIB | unix.NOTE_RENAME diff --git a/vendor/github.com/fsnotify/fsnotify/windows.go b/vendor/github.com/fsnotify/fsnotify/windows.go index c02b75f7c3..02ce7deb0b 100644 --- a/vendor/github.com/fsnotify/fsnotify/windows.go +++ b/vendor/github.com/fsnotify/fsnotify/windows.go @@ -12,6 +12,7 @@ import ( "fmt" "os" "path/filepath" + "reflect" "runtime" "sync" "syscall" @@ -96,6 +97,21 @@ func (w *Watcher) Remove(name string) error { return <-in.reply } +// WatchList returns the directories and files that are being monitered. +func (w *Watcher) WatchList() []string { + w.mu.Lock() + defer w.mu.Unlock() + + entries := make([]string, 0, len(w.watches)) + for _, entry := range w.watches { + for _, watchEntry := range entry { + entries = append(entries, watchEntry.path) + } + } + + return entries +} + const ( // Options for AddWatch sysFSONESHOT = 0x80000000 @@ -452,8 +468,16 @@ func (w *Watcher) readEvents() { // Point "raw" to the event in the buffer raw := (*syscall.FileNotifyInformation)(unsafe.Pointer(&watch.buf[offset])) - buf := (*[syscall.MAX_PATH]uint16)(unsafe.Pointer(&raw.FileName)) - name := syscall.UTF16ToString(buf[:raw.FileNameLength/2]) + // TODO: Consider using unsafe.Slice that is available from go1.17 + // https://stackoverflow.com/questions/51187973/how-to-create-an-array-or-a-slice-from-an-array-unsafe-pointer-in-golang + // instead of using a fixed syscall.MAX_PATH buf, we create a buf that is the size of the path name + size := int(raw.FileNameLength / 2) + var buf []uint16 + sh := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) + sh.Data = uintptr(unsafe.Pointer(&raw.FileName)) + sh.Len = size + sh.Cap = size + name := syscall.UTF16ToString(buf) fullname := filepath.Join(watch.path, name) var mask uint64 diff --git a/vendor/github.com/go-task/slim-sprig/go.mod b/vendor/github.com/go-task/slim-sprig/go.mod deleted file mode 100644 index d90a221bec..0000000000 --- a/vendor/github.com/go-task/slim-sprig/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/go-task/slim-sprig - -go 1.13 - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/stretchr/testify v1.5.1 -) diff --git a/vendor/github.com/go-task/slim-sprig/go.sum b/vendor/github.com/go-task/slim-sprig/go.sum deleted file mode 100644 index 256ef84936..0000000000 --- a/vendor/github.com/go-task/slim-sprig/go.sum +++ /dev/null @@ -1,22 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0 h1:4G4v2dO3VZwixGIRoQ5Lfboy6nUhCyYzaqnIAPPhYs4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/godbus/dbus/v5/auth.go b/vendor/github.com/godbus/dbus/v5/auth.go index a59b4c0eb7..0f3b252c07 100644 --- a/vendor/github.com/godbus/dbus/v5/auth.go +++ b/vendor/github.com/godbus/dbus/v5/auth.go @@ -176,9 +176,10 @@ func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (error, boo return err, false } state = waitingForReject + } else { + conn.uuid = string(s[1]) + return nil, true } - conn.uuid = string(s[1]) - return nil, true case state == waitingForData: err = authWriteLine(conn.transport, []byte("ERROR")) if err != nil { @@ -191,9 +192,10 @@ func (conn *Conn) tryAuth(m Auth, state authState, in *bufio.Reader) (error, boo return err, false } state = waitingForReject + } else { + conn.uuid = string(s[1]) + return nil, true } - conn.uuid = string(s[1]) - return nil, true case state == waitingForOk && string(s[0]) == "DATA": err = authWriteLine(conn.transport, []byte("DATA")) if err != nil { diff --git a/vendor/github.com/godbus/dbus/v5/conn.go b/vendor/github.com/godbus/dbus/v5/conn.go index 76fc5cde3d..69978ea26a 100644 --- a/vendor/github.com/godbus/dbus/v5/conn.go +++ b/vendor/github.com/godbus/dbus/v5/conn.go @@ -169,7 +169,7 @@ func Connect(address string, opts ...ConnOption) (*Conn, error) { // SystemBusPrivate returns a new private connection to the system bus. // Note: this connection is not ready to use. One must perform Auth and Hello -// on the connection before it is useable. +// on the connection before it is usable. func SystemBusPrivate(opts ...ConnOption) (*Conn, error) { return Dial(getSystemBusPlatformAddress(), opts...) } @@ -284,10 +284,6 @@ func newConn(tr transport, opts ...ConnOption) (*Conn, error) { conn.ctx = context.Background() } conn.ctx, conn.cancelCtx = context.WithCancel(conn.ctx) - go func() { - <-conn.ctx.Done() - conn.Close() - }() conn.calls = newCallTracker() if conn.handler == nil { @@ -302,6 +298,11 @@ func newConn(tr transport, opts ...ConnOption) (*Conn, error) { conn.outHandler = &outputHandler{conn: conn} conn.names = newNameTracker() conn.busObj = conn.Object("org.freedesktop.DBus", "/org/freedesktop/DBus") + + go func() { + <-conn.ctx.Done() + conn.Close() + }() return conn, nil } @@ -550,6 +551,11 @@ func (conn *Conn) send(ctx context.Context, msg *Message, ch chan *Call) *Call { call.ctx = ctx call.ctxCanceler = canceler conn.calls.track(msg.serial, call) + if ctx.Err() != nil { + // short path: don't even send the message if context already cancelled + conn.calls.handleSendError(msg, ctx.Err()) + return call + } go func() { <-ctx.Done() conn.calls.handleSendError(msg, ctx.Err()) @@ -649,7 +655,9 @@ func (conn *Conn) RemoveMatchSignalContext(ctx context.Context, options ...Match // Signal registers the given channel to be passed all received signal messages. // -// Multiple of these channels can be registered at the same time. +// Multiple of these channels can be registered at the same time. The channel is +// closed if the Conn is closed; it should not be closed by the caller before +// RemoveSignal was called on it. // // These channels are "overwritten" by Eavesdrop; i.e., if there currently is a // channel for eavesdropped messages, this channel receives all signals, and @@ -765,7 +773,12 @@ func getKey(s, key string) string { for _, keyEqualsValue := range strings.Split(s, ",") { keyValue := strings.SplitN(keyEqualsValue, "=", 2) if len(keyValue) == 2 && keyValue[0] == key { - return keyValue[1] + val, err := UnescapeBusAddressValue(keyValue[1]) + if err != nil { + // No way to return an error. + return "" + } + return val } } return "" diff --git a/vendor/github.com/godbus/dbus/v5/conn_other.go b/vendor/github.com/godbus/dbus/v5/conn_other.go index 616dcf6644..90289ca85a 100644 --- a/vendor/github.com/godbus/dbus/v5/conn_other.go +++ b/vendor/github.com/godbus/dbus/v5/conn_other.go @@ -54,7 +54,7 @@ func tryDiscoverDbusSessionBusAddress() string { if runUserBusFile := path.Join(runtimeDirectory, "bus"); fileExists(runUserBusFile) { // if /run/user//bus exists, that file itself // *is* the unix socket, so return its path - return fmt.Sprintf("unix:path=%s", runUserBusFile) + return fmt.Sprintf("unix:path=%s", EscapeBusAddressValue(runUserBusFile)) } if runUserSessionDbusFile := path.Join(runtimeDirectory, "dbus-session"); fileExists(runUserSessionDbusFile) { // if /run/user//dbus-session exists, it's a @@ -85,9 +85,6 @@ func getRuntimeDirectory() (string, error) { } func fileExists(filename string) bool { - if _, err := os.Stat(filename); !os.IsNotExist(err) { - return true - } else { - return false - } + _, err := os.Stat(filename) + return !os.IsNotExist(err) } diff --git a/vendor/github.com/godbus/dbus/v5/dbus.go b/vendor/github.com/godbus/dbus/v5/dbus.go index ddf3b7afde..c188d10485 100644 --- a/vendor/github.com/godbus/dbus/v5/dbus.go +++ b/vendor/github.com/godbus/dbus/v5/dbus.go @@ -122,8 +122,11 @@ func isConvertibleTo(dest, src reflect.Type) bool { case dest.Kind() == reflect.Slice: return src.Kind() == reflect.Slice && isConvertibleTo(dest.Elem(), src.Elem()) + case dest.Kind() == reflect.Ptr: + dest = dest.Elem() + return isConvertibleTo(dest, src) case dest.Kind() == reflect.Struct: - return src == interfacesType + return src == interfacesType || dest.Kind() == src.Kind() default: return src.ConvertibleTo(dest) } @@ -274,13 +277,8 @@ func storeSliceIntoInterface(dest, src reflect.Value) error { func storeSliceIntoSlice(dest, src reflect.Value) error { if dest.IsNil() || dest.Len() < src.Len() { dest.Set(reflect.MakeSlice(dest.Type(), src.Len(), src.Cap())) - } - if dest.Len() != src.Len() { - return fmt.Errorf( - "dbus.Store: type mismatch: "+ - "slices are different lengths "+ - "need: %d have: %d", - src.Len(), dest.Len()) + } else if dest.Len() > src.Len() { + dest.Set(dest.Slice(0, src.Len())) } for i := 0; i < src.Len(); i++ { err := store(dest.Index(i), getVariantValue(src.Index(i))) diff --git a/vendor/github.com/godbus/dbus/v5/doc.go b/vendor/github.com/godbus/dbus/v5/doc.go index ade1df951c..8f25a00d61 100644 --- a/vendor/github.com/godbus/dbus/v5/doc.go +++ b/vendor/github.com/godbus/dbus/v5/doc.go @@ -10,8 +10,10 @@ value. Conversion Rules For outgoing messages, Go types are automatically converted to the -corresponding D-Bus types. The following types are directly encoded as their -respective D-Bus equivalents: +corresponding D-Bus types. See the official specification at +https://dbus.freedesktop.org/doc/dbus-specification.html#type-system for more +information on the D-Bus type system. The following types are directly encoded +as their respective D-Bus equivalents: Go type | D-Bus type ------------+----------- @@ -39,8 +41,8 @@ Maps encode as DICTs, provided that their key type can be used as a key for a DICT. Structs other than Variant and Signature encode as a STRUCT containing their -exported fields. Fields whose tags contain `dbus:"-"` and unexported fields will -be skipped. +exported fields in order. Fields whose tags contain `dbus:"-"` and unexported +fields will be skipped. Pointers encode as the value they're pointed to. diff --git a/vendor/github.com/godbus/dbus/v5/escape.go b/vendor/github.com/godbus/dbus/v5/escape.go new file mode 100644 index 0000000000..d1509d9458 --- /dev/null +++ b/vendor/github.com/godbus/dbus/v5/escape.go @@ -0,0 +1,84 @@ +package dbus + +import "net/url" + +// EscapeBusAddressValue implements a requirement to escape the values +// in D-Bus server addresses, as defined by the D-Bus specification at +// https://dbus.freedesktop.org/doc/dbus-specification.html#addresses. +func EscapeBusAddressValue(val string) string { + toEsc := strNeedsEscape(val) + if toEsc == 0 { + // Avoid unneeded allocation/copying. + return val + } + + // Avoid allocation for short paths. + var buf [64]byte + var out []byte + // Every to-be-escaped byte needs 2 extra bytes. + required := len(val) + 2*toEsc + if required <= len(buf) { + out = buf[:required] + } else { + out = make([]byte, required) + } + + j := 0 + for i := 0; i < len(val); i++ { + if ch := val[i]; needsEscape(ch) { + // Convert ch to %xx, where xx is hex value. + out[j] = '%' + out[j+1] = hexchar(ch >> 4) + out[j+2] = hexchar(ch & 0x0F) + j += 3 + } else { + out[j] = ch + j++ + } + } + + return string(out) +} + +// UnescapeBusAddressValue unescapes values in D-Bus server addresses, +// as defined by the D-Bus specification at +// https://dbus.freedesktop.org/doc/dbus-specification.html#addresses. +func UnescapeBusAddressValue(val string) (string, error) { + // Looks like url.PathUnescape does exactly what is required. + return url.PathUnescape(val) +} + +// hexchar returns an octal representation of a n, where n < 16. +// For invalid values of n, the function panics. +func hexchar(n byte) byte { + const hex = "0123456789abcdef" + + // For n >= len(hex), runtime will panic. + return hex[n] +} + +// needsEscape tells if a byte is NOT one of optionally-escaped bytes. +func needsEscape(c byte) bool { + if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' { + return false + } + switch c { + case '-', '_', '/', '\\', '.', '*': + return false + } + + return true +} + +// strNeedsEscape tells how many bytes in the string need escaping. +func strNeedsEscape(val string) int { + count := 0 + + for i := 0; i < len(val); i++ { + if needsEscape(val[i]) { + count++ + } + } + + return count +} diff --git a/vendor/github.com/godbus/dbus/v5/export.go b/vendor/github.com/godbus/dbus/v5/export.go index 522334715b..d3dd9f7cd6 100644 --- a/vendor/github.com/godbus/dbus/v5/export.go +++ b/vendor/github.com/godbus/dbus/v5/export.go @@ -3,6 +3,7 @@ package dbus import ( "errors" "fmt" + "os" "reflect" "strings" ) @@ -209,28 +210,23 @@ func (conn *Conn) handleCall(msg *Message) { } reply.Headers[FieldSignature] = MakeVariant(SignatureOf(reply.Body...)) - conn.sendMessageAndIfClosed(reply, nil) + if err := reply.IsValid(); err != nil { + fmt.Fprintf(os.Stderr, "dbus: dropping invalid reply to %s.%s on obj %s: %s\n", ifaceName, name, path, err) + } else { + conn.sendMessageAndIfClosed(reply, nil) + } } } // Emit emits the given signal on the message bus. The name parameter must be // formatted as "interface.member", e.g., "org.freedesktop.DBus.NameLost". func (conn *Conn) Emit(path ObjectPath, name string, values ...interface{}) error { - if !path.IsValid() { - return errors.New("dbus: invalid object path") - } i := strings.LastIndex(name, ".") if i == -1 { return errors.New("dbus: invalid method name") } iface := name[:i] member := name[i+1:] - if !isValidMember(member) { - return errors.New("dbus: invalid method name") - } - if !isValidInterface(iface) { - return errors.New("dbus: invalid interface name") - } msg := new(Message) msg.Type = TypeSignal msg.Headers = make(map[HeaderField]Variant) @@ -241,6 +237,9 @@ func (conn *Conn) Emit(path ObjectPath, name string, values ...interface{}) erro if len(values) > 0 { msg.Headers[FieldSignature] = MakeVariant(SignatureOf(values...)) } + if err := msg.IsValid(); err != nil { + return err + } var closed bool conn.sendMessageAndIfClosed(msg, func() { diff --git a/vendor/github.com/godbus/dbus/v5/go.mod b/vendor/github.com/godbus/dbus/v5/go.mod deleted file mode 100644 index 15b920203c..0000000000 --- a/vendor/github.com/godbus/dbus/v5/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/godbus/dbus/v5 - -go 1.12 diff --git a/vendor/github.com/godbus/dbus/v5/go.sum b/vendor/github.com/godbus/dbus/v5/go.sum deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/vendor/github.com/godbus/dbus/v5/homedir.go b/vendor/github.com/godbus/dbus/v5/homedir.go index 0b745f9313..c44d9b5fc2 100644 --- a/vendor/github.com/godbus/dbus/v5/homedir.go +++ b/vendor/github.com/godbus/dbus/v5/homedir.go @@ -2,27 +2,24 @@ package dbus import ( "os" - "sync" -) - -var ( - homeDir string - homeDirLock sync.Mutex + "os/user" ) +// Get returns the home directory of the current user, which is usually the +// value of HOME environment variable. In case it is not set or empty, os/user +// package is used. +// +// If linking statically with cgo enabled against glibc, make sure the +// osusergo build tag is used. +// +// If needing to do nss lookups, do not disable cgo or set osusergo. func getHomeDir() string { - homeDirLock.Lock() - defer homeDirLock.Unlock() - + homeDir := os.Getenv("HOME") if homeDir != "" { return homeDir } - - homeDir = os.Getenv("HOME") - if homeDir != "" { - return homeDir + if u, err := user.Current(); err == nil { + return u.HomeDir } - - homeDir = lookupHomeDir() - return homeDir + return "/" } diff --git a/vendor/github.com/godbus/dbus/v5/homedir_dynamic.go b/vendor/github.com/godbus/dbus/v5/homedir_dynamic.go deleted file mode 100644 index 2732081e73..0000000000 --- a/vendor/github.com/godbus/dbus/v5/homedir_dynamic.go +++ /dev/null @@ -1,15 +0,0 @@ -// +build !static_build - -package dbus - -import ( - "os/user" -) - -func lookupHomeDir() string { - u, err := user.Current() - if err != nil { - return "/" - } - return u.HomeDir -} diff --git a/vendor/github.com/godbus/dbus/v5/homedir_static.go b/vendor/github.com/godbus/dbus/v5/homedir_static.go deleted file mode 100644 index b9d9cb5525..0000000000 --- a/vendor/github.com/godbus/dbus/v5/homedir_static.go +++ /dev/null @@ -1,45 +0,0 @@ -// +build static_build - -package dbus - -import ( - "bufio" - "os" - "strconv" - "strings" -) - -func lookupHomeDir() string { - myUid := os.Getuid() - - f, err := os.Open("/etc/passwd") - if err != nil { - return "/" - } - defer f.Close() - - s := bufio.NewScanner(f) - - for s.Scan() { - if err := s.Err(); err != nil { - break - } - - line := strings.TrimSpace(s.Text()) - if line == "" { - continue - } - - parts := strings.Split(line, ":") - - if len(parts) >= 6 { - uid, err := strconv.Atoi(parts[2]) - if err == nil && uid == myUid { - return parts[5] - } - } - } - - // Default to / if we can't get a better value - return "/" -} diff --git a/vendor/github.com/godbus/dbus/v5/message.go b/vendor/github.com/godbus/dbus/v5/message.go index 16693eb301..bdf43fdd6e 100644 --- a/vendor/github.com/godbus/dbus/v5/message.go +++ b/vendor/github.com/godbus/dbus/v5/message.go @@ -208,7 +208,7 @@ func DecodeMessageWithFDs(rd io.Reader, fds []int) (msg *Message, err error) { // The possibly returned error can be an error of the underlying reader, an // InvalidMessageError or a FormatError. func DecodeMessage(rd io.Reader) (msg *Message, err error) { - return DecodeMessageWithFDs(rd, make([]int, 0)); + return DecodeMessageWithFDs(rd, make([]int, 0)) } type nullwriter struct{} @@ -227,8 +227,8 @@ func (msg *Message) CountFds() (int, error) { } func (msg *Message) EncodeToWithFDs(out io.Writer, order binary.ByteOrder) (fds []int, err error) { - if err := msg.IsValid(); err != nil { - return make([]int, 0), err + if err := msg.validateHeader(); err != nil { + return nil, err } var vs [7]interface{} switch order { @@ -237,7 +237,7 @@ func (msg *Message) EncodeToWithFDs(out io.Writer, order binary.ByteOrder) (fds case binary.BigEndian: vs[0] = byte('B') default: - return make([]int, 0), errors.New("dbus: invalid byte order") + return nil, errors.New("dbus: invalid byte order") } body := new(bytes.Buffer) fds = make([]int, 0) @@ -284,8 +284,13 @@ func (msg *Message) EncodeTo(out io.Writer, order binary.ByteOrder) (err error) } // IsValid checks whether msg is a valid message and returns an -// InvalidMessageError if it is not. +// InvalidMessageError or FormatError if it is not. func (msg *Message) IsValid() error { + var b bytes.Buffer + return msg.EncodeTo(&b, nativeEndian) +} + +func (msg *Message) validateHeader() error { if msg.Flags & ^(FlagNoAutoStart|FlagNoReplyExpected|FlagAllowInteractiveAuthorization) != 0 { return InvalidMessageError("invalid flags") } @@ -330,6 +335,7 @@ func (msg *Message) IsValid() error { return InvalidMessageError("missing signature") } } + return nil } diff --git a/vendor/github.com/godbus/dbus/v5/server_interfaces.go b/vendor/github.com/godbus/dbus/v5/server_interfaces.go index 79d97edf3e..e4e0389fdf 100644 --- a/vendor/github.com/godbus/dbus/v5/server_interfaces.go +++ b/vendor/github.com/godbus/dbus/v5/server_interfaces.go @@ -63,7 +63,7 @@ type Method interface { // any other decoding scheme. type ArgumentDecoder interface { // To decode the arguments of a method the sender and message are - // provided incase the semantics of the implementer provides access + // provided in case the semantics of the implementer provides access // to these as part of the method invocation. DecodeArguments(conn *Conn, sender string, msg *Message, args []interface{}) ([]interface{}, error) } diff --git a/vendor/github.com/godbus/dbus/v5/sig.go b/vendor/github.com/godbus/dbus/v5/sig.go index 41a0398129..6b9cadb5fb 100644 --- a/vendor/github.com/godbus/dbus/v5/sig.go +++ b/vendor/github.com/godbus/dbus/v5/sig.go @@ -102,7 +102,7 @@ func getSignature(t reflect.Type, depth *depthCounter) (sig string) { } } if len(s) == 0 { - panic("empty struct") + panic(InvalidTypeError{t}) } return "(" + s + ")" case reflect.Array, reflect.Slice: diff --git a/vendor/github.com/godbus/dbus/v5/transport_unix.go b/vendor/github.com/godbus/dbus/v5/transport_unix.go index 2212e7fa7f..0a8c712ebd 100644 --- a/vendor/github.com/godbus/dbus/v5/transport_unix.go +++ b/vendor/github.com/godbus/dbus/v5/transport_unix.go @@ -154,17 +154,15 @@ func (t *unixTransport) ReadMessage() (*Message, error) { // substitute the values in the message body (which are indices for the // array receiver via OOB) with the actual values for i, v := range msg.Body { - switch v.(type) { + switch index := v.(type) { case UnixFDIndex: - j := v.(UnixFDIndex) - if uint32(j) >= unixfds { + if uint32(index) >= unixfds { return nil, InvalidMessageError("invalid index for unix fd") } - msg.Body[i] = UnixFD(fds[j]) + msg.Body[i] = UnixFD(fds[index]) case []UnixFDIndex: - idxArray := v.([]UnixFDIndex) - fdArray := make([]UnixFD, len(idxArray)) - for k, j := range idxArray { + fdArray := make([]UnixFD, len(index)) + for k, j := range index { if uint32(j) >= unixfds { return nil, InvalidMessageError("invalid index for unix fd") } diff --git a/vendor/github.com/godbus/dbus/v5/transport_zos.go b/vendor/github.com/godbus/dbus/v5/transport_zos.go new file mode 100644 index 0000000000..1bba0d6bf7 --- /dev/null +++ b/vendor/github.com/godbus/dbus/v5/transport_zos.go @@ -0,0 +1,6 @@ +package dbus + +func (t *unixTransport) SendNullByte() error { + _, err := t.Write([]byte{0}) + return err +} diff --git a/vendor/github.com/godbus/dbus/v5/variant.go b/vendor/github.com/godbus/dbus/v5/variant.go index f1e81f3ede..ca3dbe16a4 100644 --- a/vendor/github.com/godbus/dbus/v5/variant.go +++ b/vendor/github.com/godbus/dbus/v5/variant.go @@ -49,7 +49,7 @@ func ParseVariant(s string, sig Signature) (Variant, error) { } // format returns a formatted version of v and whether this string can be parsed -// unambigously. +// unambiguously. func (v Variant) format() (string, bool) { switch v.sig.str[0] { case 'b', 'i': diff --git a/vendor/github.com/golang/snappy/go.mod b/vendor/github.com/golang/snappy/go.mod deleted file mode 100644 index f6406bb2c7..0000000000 --- a/vendor/github.com/golang/snappy/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/golang/snappy diff --git a/vendor/github.com/google/go-cmp/cmp/compare.go b/vendor/github.com/google/go-cmp/cmp/compare.go index 2a5446762c..fd2b3a42b2 100644 --- a/vendor/github.com/google/go-cmp/cmp/compare.go +++ b/vendor/github.com/google/go-cmp/cmp/compare.go @@ -40,6 +40,8 @@ import ( "github.com/google/go-cmp/cmp/internal/value" ) +// TODO(≥go1.18): Use any instead of interface{}. + // Equal reports whether x and y are equal by recursively applying the // following rules in the given order to x and y and all of their sub-values: // diff --git a/vendor/github.com/google/go-cmp/cmp/report_compare.go b/vendor/github.com/google/go-cmp/cmp/report_compare.go index 104bb30538..1ef65ac1db 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_compare.go +++ b/vendor/github.com/google/go-cmp/cmp/report_compare.go @@ -116,7 +116,10 @@ func (opts formatOptions) FormatDiff(v *valueNode, ptrs *pointerReferences) (out } // For leaf nodes, format the value based on the reflect.Values alone. - if v.MaxDepth == 0 { + // As a special case, treat equal []byte as a leaf nodes. + isBytes := v.Type.Kind() == reflect.Slice && v.Type.Elem() == reflect.TypeOf(byte(0)) + isEqualBytes := isBytes && v.NumDiff+v.NumIgnored+v.NumTransformed == 0 + if v.MaxDepth == 0 || isEqualBytes { switch opts.DiffMode { case diffUnknown, diffIdentical: // Format Equal. diff --git a/vendor/github.com/google/go-cmp/cmp/report_reflect.go b/vendor/github.com/google/go-cmp/cmp/report_reflect.go index 76c04fdbd6..287b893588 100644 --- a/vendor/github.com/google/go-cmp/cmp/report_reflect.go +++ b/vendor/github.com/google/go-cmp/cmp/report_reflect.go @@ -211,7 +211,7 @@ func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, if len(b) > 0 && utf8.Valid(b) && len(bytes.TrimFunc(b, isPrintSpace)) == 0 { out = opts.formatString("", string(b)) skipType = true - return opts.WithTypeMode(emitType).FormatType(t, out) + return opts.FormatType(t, out) } } @@ -282,7 +282,12 @@ func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, } defer ptrs.Pop() - skipType = true // Let the underlying value print the type instead + // Skip the name only if this is an unnamed pointer type. + // Otherwise taking the address of a value does not reproduce + // the named pointer type. + if v.Type().Name() == "" { + skipType = true // Let the underlying value print the type instead + } out = opts.FormatValue(v.Elem(), t.Kind(), ptrs) out = wrapTrunkReference(ptrRef, opts.PrintAddresses, out) out = &textWrap{Prefix: "&", Value: out} @@ -293,7 +298,6 @@ func (opts formatOptions) FormatValue(v reflect.Value, parentKind reflect.Kind, } // Interfaces accept different concrete types, // so configure the underlying value to explicitly print the type. - skipType = true // Print the concrete type instead return opts.WithTypeMode(emitType).FormatValue(v.Elem(), t.Kind(), ptrs) default: panic(fmt.Sprintf("%v kind not handled", v.Kind())) diff --git a/vendor/github.com/google/gofuzz/go.mod b/vendor/github.com/google/gofuzz/go.mod deleted file mode 100644 index 8ec4fe9e97..0000000000 --- a/vendor/github.com/google/gofuzz/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/google/gofuzz - -go 1.12 diff --git a/vendor/github.com/google/uuid/go.mod b/vendor/github.com/google/uuid/go.mod deleted file mode 100644 index fc84cd79d4..0000000000 --- a/vendor/github.com/google/uuid/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/google/uuid diff --git a/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json b/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json new file mode 100644 index 0000000000..0e643a05b5 --- /dev/null +++ b/vendor/github.com/googleapis/gax-go/v2/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + "v2": "2.4.0" +} diff --git a/vendor/github.com/googleapis/gax-go/v2/CHANGES.md b/vendor/github.com/googleapis/gax-go/v2/CHANGES.md new file mode 100644 index 0000000000..b42ace44c9 --- /dev/null +++ b/vendor/github.com/googleapis/gax-go/v2/CHANGES.md @@ -0,0 +1,18 @@ +# Changelog + +## [2.4.0](https://github.com/googleapis/gax-go/compare/v2.3.0...v2.4.0) (2022-05-09) + + +### Features + +* **v2:** add OnHTTPCodes CallOption ([#188](https://github.com/googleapis/gax-go/issues/188)) ([ba7c534](https://github.com/googleapis/gax-go/commit/ba7c5348363ab6c33e1cee3c03c0be68a46ca07c)) + + +### Bug Fixes + +* **v2/apierror:** use errors.As in FromError ([#189](https://github.com/googleapis/gax-go/issues/189)) ([f30f05b](https://github.com/googleapis/gax-go/commit/f30f05be583828f4c09cca4091333ea88ff8d79e)) + + +### Miscellaneous Chores + +* **v2:** bump release-please processing ([#192](https://github.com/googleapis/gax-go/issues/192)) ([56172f9](https://github.com/googleapis/gax-go/commit/56172f971d1141d7687edaac053ad3470af76719)) diff --git a/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go b/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go index e33316d882..7d0128a0cd 100644 --- a/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go +++ b/vendor/github.com/googleapis/gax-go/v2/apierror/apierror.go @@ -32,6 +32,7 @@ package apierror import ( + "errors" "fmt" "strings" @@ -215,7 +216,8 @@ func FromError(err error) (*APIError, bool) { ae := APIError{err: err} st, isStatus := status.FromError(err) - herr, isHTTPErr := err.(*googleapi.Error) + var herr *googleapi.Error + isHTTPErr := errors.As(err, &herr) switch { case isStatus: diff --git a/vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.pb.go b/vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.pb.go index 27b34c06e2..7dd9b83739 100644 --- a/vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.pb.go +++ b/vendor/github.com/googleapis/gax-go/v2/apierror/internal/proto/error.pb.go @@ -14,9 +14,9 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.27.1 +// protoc-gen-go v1.28.0 // protoc v3.15.8 -// source: error.proto +// source: apierror/internal/proto/error.proto package jsonerror @@ -55,7 +55,7 @@ type Error struct { func (x *Error) Reset() { *x = Error{} if protoimpl.UnsafeEnabled { - mi := &file_error_proto_msgTypes[0] + mi := &file_apierror_internal_proto_error_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -68,7 +68,7 @@ func (x *Error) String() string { func (*Error) ProtoMessage() {} func (x *Error) ProtoReflect() protoreflect.Message { - mi := &file_error_proto_msgTypes[0] + mi := &file_apierror_internal_proto_error_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -81,7 +81,7 @@ func (x *Error) ProtoReflect() protoreflect.Message { // Deprecated: Use Error.ProtoReflect.Descriptor instead. func (*Error) Descriptor() ([]byte, []int) { - return file_error_proto_rawDescGZIP(), []int{0} + return file_apierror_internal_proto_error_proto_rawDescGZIP(), []int{0} } func (x *Error) GetError() *Error_Status { @@ -112,7 +112,7 @@ type Error_Status struct { func (x *Error_Status) Reset() { *x = Error_Status{} if protoimpl.UnsafeEnabled { - mi := &file_error_proto_msgTypes[1] + mi := &file_apierror_internal_proto_error_proto_msgTypes[1] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -125,7 +125,7 @@ func (x *Error_Status) String() string { func (*Error_Status) ProtoMessage() {} func (x *Error_Status) ProtoReflect() protoreflect.Message { - mi := &file_error_proto_msgTypes[1] + mi := &file_apierror_internal_proto_error_proto_msgTypes[1] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -138,7 +138,7 @@ func (x *Error_Status) ProtoReflect() protoreflect.Message { // Deprecated: Use Error_Status.ProtoReflect.Descriptor instead. func (*Error_Status) Descriptor() ([]byte, []int) { - return file_error_proto_rawDescGZIP(), []int{0, 0} + return file_apierror_internal_proto_error_proto_rawDescGZIP(), []int{0, 0} } func (x *Error_Status) GetCode() int32 { @@ -169,53 +169,55 @@ func (x *Error_Status) GetDetails() []*anypb.Any { return nil } -var File_error_proto protoreflect.FileDescriptor +var File_apierror_internal_proto_error_proto protoreflect.FileDescriptor -var file_error_proto_rawDesc = []byte{ - 0x0a, 0x0b, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, - 0x15, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc5, 0x01, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, - 0x12, 0x29, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x90, 0x01, 0x0a, 0x06, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, - 0x63, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, - 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x43, - 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, 0x67, 0x61, 0x78, 0x2d, 0x67, 0x6f, 0x2f, 0x76, - 0x32, 0x2f, 0x61, 0x70, 0x69, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x3b, 0x6a, 0x73, 0x6f, 0x6e, 0x65, 0x72, - 0x72, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +var file_apierror_internal_proto_error_proto_rawDesc = []byte{ + 0x0a, 0x23, 0x61, 0x70, 0x69, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x1a, 0x19, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61, 0x6e, + 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x72, 0x70, 0x63, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xc5, + 0x01, 0x0a, 0x05, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x29, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x2e, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x65, 0x72, + 0x72, 0x6f, 0x72, 0x1a, 0x90, 0x01, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, + 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, + 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x10, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x07, 0x64, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x42, 0x43, 0x5a, 0x41, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, + 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x61, 0x70, 0x69, 0x73, 0x2f, + 0x67, 0x61, 0x78, 0x2d, 0x67, 0x6f, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x70, 0x69, 0x65, 0x72, 0x72, + 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x3b, 0x6a, 0x73, 0x6f, 0x6e, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x33, } var ( - file_error_proto_rawDescOnce sync.Once - file_error_proto_rawDescData = file_error_proto_rawDesc + file_apierror_internal_proto_error_proto_rawDescOnce sync.Once + file_apierror_internal_proto_error_proto_rawDescData = file_apierror_internal_proto_error_proto_rawDesc ) -func file_error_proto_rawDescGZIP() []byte { - file_error_proto_rawDescOnce.Do(func() { - file_error_proto_rawDescData = protoimpl.X.CompressGZIP(file_error_proto_rawDescData) +func file_apierror_internal_proto_error_proto_rawDescGZIP() []byte { + file_apierror_internal_proto_error_proto_rawDescOnce.Do(func() { + file_apierror_internal_proto_error_proto_rawDescData = protoimpl.X.CompressGZIP(file_apierror_internal_proto_error_proto_rawDescData) }) - return file_error_proto_rawDescData + return file_apierror_internal_proto_error_proto_rawDescData } -var file_error_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_error_proto_goTypes = []interface{}{ +var file_apierror_internal_proto_error_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_apierror_internal_proto_error_proto_goTypes = []interface{}{ (*Error)(nil), // 0: error.Error (*Error_Status)(nil), // 1: error.Error.Status (code.Code)(0), // 2: google.rpc.Code (*anypb.Any)(nil), // 3: google.protobuf.Any } -var file_error_proto_depIdxs = []int32{ +var file_apierror_internal_proto_error_proto_depIdxs = []int32{ 1, // 0: error.Error.error:type_name -> error.Error.Status 2, // 1: error.Error.Status.status:type_name -> google.rpc.Code 3, // 2: error.Error.Status.details:type_name -> google.protobuf.Any @@ -226,13 +228,13 @@ var file_error_proto_depIdxs = []int32{ 0, // [0:3] is the sub-list for field type_name } -func init() { file_error_proto_init() } -func file_error_proto_init() { - if File_error_proto != nil { +func init() { file_apierror_internal_proto_error_proto_init() } +func file_apierror_internal_proto_error_proto_init() { + if File_apierror_internal_proto_error_proto != nil { return } if !protoimpl.UnsafeEnabled { - file_error_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_apierror_internal_proto_error_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Error); i { case 0: return &v.state @@ -244,7 +246,7 @@ func file_error_proto_init() { return nil } } - file_error_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_apierror_internal_proto_error_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Error_Status); i { case 0: return &v.state @@ -261,18 +263,18 @@ func file_error_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_error_proto_rawDesc, + RawDescriptor: file_apierror_internal_proto_error_proto_rawDesc, NumEnums: 0, NumMessages: 2, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_error_proto_goTypes, - DependencyIndexes: file_error_proto_depIdxs, - MessageInfos: file_error_proto_msgTypes, + GoTypes: file_apierror_internal_proto_error_proto_goTypes, + DependencyIndexes: file_apierror_internal_proto_error_proto_depIdxs, + MessageInfos: file_apierror_internal_proto_error_proto_msgTypes, }.Build() - File_error_proto = out.File - file_error_proto_rawDesc = nil - file_error_proto_goTypes = nil - file_error_proto_depIdxs = nil + File_apierror_internal_proto_error_proto = out.File + file_apierror_internal_proto_error_proto_rawDesc = nil + file_apierror_internal_proto_error_proto_goTypes = nil + file_apierror_internal_proto_error_proto_depIdxs = nil } diff --git a/vendor/github.com/googleapis/gax-go/v2/call_option.go b/vendor/github.com/googleapis/gax-go/v2/call_option.go index 425a7668d1..e092005563 100644 --- a/vendor/github.com/googleapis/gax-go/v2/call_option.go +++ b/vendor/github.com/googleapis/gax-go/v2/call_option.go @@ -30,9 +30,11 @@ package gax import ( + "errors" "math/rand" "time" + "google.golang.org/api/googleapi" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -119,6 +121,41 @@ func (r *boRetryer) Retry(err error) (time.Duration, bool) { return 0, false } +// OnHTTPCodes returns a Retryer that retries if and only if +// the previous attempt returns a googleapi.Error whose status code is stored in +// cc. Pause times between retries are specified by bo. +// +// bo is only used for its parameters; each Retryer has its own copy. +func OnHTTPCodes(bo Backoff, cc ...int) Retryer { + codes := make(map[int]bool, len(cc)) + for _, c := range cc { + codes[c] = true + } + + return &httpRetryer{ + backoff: bo, + codes: codes, + } +} + +type httpRetryer struct { + backoff Backoff + codes map[int]bool +} + +func (r *httpRetryer) Retry(err error) (time.Duration, bool) { + var gerr *googleapi.Error + if !errors.As(err, &gerr) { + return 0, false + } + + if r.codes[gerr.Code] { + return r.backoff.Pause(), true + } + + return 0, false +} + // Backoff implements exponential backoff. The wait time between retries is a // random value between 0 and the "retry period" - the time between retries. The // retry period starts at Initial and increases by the factor of Multiplier @@ -173,6 +210,21 @@ func (o grpcOpt) Resolve(s *CallSettings) { s.GRPC = o } +type pathOpt struct { + p string +} + +func (p pathOpt) Resolve(s *CallSettings) { + s.Path = p.p +} + +// WithPath applies a Path override to the HTTP-based APICall. +// +// This is for internal use only. +func WithPath(p string) CallOption { + return &pathOpt{p: p} +} + // WithGRPCOptions allows passing gRPC call options during client creation. func WithGRPCOptions(opt ...grpc.CallOption) CallOption { return grpcOpt(append([]grpc.CallOption(nil), opt...)) @@ -186,4 +238,7 @@ type CallSettings struct { // CallOptions to be forwarded to GRPC. GRPC []grpc.CallOption + + // Path is an HTTP override for an APICall. + Path string } diff --git a/vendor/github.com/googleapis/gax-go/v2/gax.go b/vendor/github.com/googleapis/gax-go/v2/gax.go index 28ea5fe201..36cdfa33e3 100644 --- a/vendor/github.com/googleapis/gax-go/v2/gax.go +++ b/vendor/github.com/googleapis/gax-go/v2/gax.go @@ -35,5 +35,7 @@ // to simplify code generation and to provide more convenient and idiomatic API surfaces. package gax +import "github.com/googleapis/gax-go/v2/internal" + // Version specifies the gax-go version being used. -const Version = "2.2.0" +const Version = internal.Version diff --git a/vendor/github.com/googleapis/gax-go/v2/go.mod b/vendor/github.com/googleapis/gax-go/v2/go.mod deleted file mode 100644 index ec8d3083fa..0000000000 --- a/vendor/github.com/googleapis/gax-go/v2/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module github.com/googleapis/gax-go/v2 - -go 1.15 - -require ( - github.com/google/go-cmp v0.5.7 - google.golang.org/api v0.71.0 - google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 - google.golang.org/grpc v1.45.0 - google.golang.org/protobuf v1.27.1 - -) diff --git a/vendor/github.com/googleapis/gax-go/v2/go.sum b/vendor/github.com/googleapis/gax-go/v2/go.sum deleted file mode 100644 index 1fc28e17c5..0000000000 --- a/vendor/github.com/googleapis/gax-go/v2/go.sum +++ /dev/null @@ -1,588 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9 h1:nhht2DYV/Sn3qOayu8lM+cU1ii9sTLUeBQwQQfUHtrs= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0 h1:SgWof18M8V2NylsX7bL4fM28j+nFdRopHZbdipaaw20= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/vendor/github.com/googleapis/gax-go/v2/internal/version.go b/vendor/github.com/googleapis/gax-go/v2/internal/version.go new file mode 100644 index 0000000000..bf272a5045 --- /dev/null +++ b/vendor/github.com/googleapis/gax-go/v2/internal/version.go @@ -0,0 +1,33 @@ +// Copyright 2022, Google Inc. +// All rights reserved. +// +// 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 Google Inc. 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. + +package internal + +// Version is the current tagged release of the library. +const Version = "2.4.0" diff --git a/vendor/github.com/googleapis/gax-go/v2/release-please-config.json b/vendor/github.com/googleapis/gax-go/v2/release-please-config.json new file mode 100644 index 0000000000..61ee266a15 --- /dev/null +++ b/vendor/github.com/googleapis/gax-go/v2/release-please-config.json @@ -0,0 +1,10 @@ +{ + "release-type": "go-yoshi", + "separate-pull-requests": true, + "include-component-in-tag": false, + "packages": { + "v2": { + "component": "v2" + } + } +} diff --git a/vendor/github.com/gorilla/websocket/go.mod b/vendor/github.com/gorilla/websocket/go.mod deleted file mode 100644 index 1a7afd5028..0000000000 --- a/vendor/github.com/gorilla/websocket/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/gorilla/websocket - -go 1.12 diff --git a/vendor/github.com/gorilla/websocket/go.sum b/vendor/github.com/gorilla/websocket/go.sum deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/vendor/github.com/hashicorp/errwrap/go.mod b/vendor/github.com/hashicorp/errwrap/go.mod deleted file mode 100644 index c9b84022cf..0000000000 --- a/vendor/github.com/hashicorp/errwrap/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/hashicorp/errwrap diff --git a/vendor/github.com/hashicorp/go-cleanhttp/go.mod b/vendor/github.com/hashicorp/go-cleanhttp/go.mod deleted file mode 100644 index 005ccdef9c..0000000000 --- a/vendor/github.com/hashicorp/go-cleanhttp/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/hashicorp/go-cleanhttp - -go 1.13 diff --git a/vendor/github.com/hashicorp/go-hclog/go.mod b/vendor/github.com/hashicorp/go-hclog/go.mod deleted file mode 100644 index b6698c0836..0000000000 --- a/vendor/github.com/hashicorp/go-hclog/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module github.com/hashicorp/go-hclog - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/fatih/color v1.7.0 - github.com/mattn/go-colorable v0.1.4 - github.com/mattn/go-isatty v0.0.10 - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/stretchr/testify v1.2.2 -) - -go 1.13 diff --git a/vendor/github.com/hashicorp/go-hclog/go.sum b/vendor/github.com/hashicorp/go-hclog/go.sum deleted file mode 100644 index 3a656dfd9c..0000000000 --- a/vendor/github.com/hashicorp/go-hclog/go.sum +++ /dev/null @@ -1,18 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/hashicorp/go-immutable-radix/go.mod b/vendor/github.com/hashicorp/go-immutable-radix/go.mod deleted file mode 100644 index 27e7b7c955..0000000000 --- a/vendor/github.com/hashicorp/go-immutable-radix/go.mod +++ /dev/null @@ -1,6 +0,0 @@ -module github.com/hashicorp/go-immutable-radix - -require ( - github.com/hashicorp/go-uuid v1.0.0 - github.com/hashicorp/golang-lru v0.5.0 -) diff --git a/vendor/github.com/hashicorp/go-immutable-radix/go.sum b/vendor/github.com/hashicorp/go-immutable-radix/go.sum deleted file mode 100644 index 7de5dfc503..0000000000 --- a/vendor/github.com/hashicorp/go-immutable-radix/go.sum +++ /dev/null @@ -1,4 +0,0 @@ -github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= diff --git a/vendor/github.com/hashicorp/go-multierror/go.mod b/vendor/github.com/hashicorp/go-multierror/go.mod deleted file mode 100644 index 141cc4ccb2..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/hashicorp/go-multierror - -go 1.13 - -require github.com/hashicorp/errwrap v1.0.0 diff --git a/vendor/github.com/hashicorp/go-multierror/go.sum b/vendor/github.com/hashicorp/go-multierror/go.sum deleted file mode 100644 index e8238e9ec9..0000000000 --- a/vendor/github.com/hashicorp/go-multierror/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= diff --git a/vendor/github.com/hashicorp/go-plugin/README.md b/vendor/github.com/hashicorp/go-plugin/README.md index 46ee09fc0c..39391f24fe 100644 --- a/vendor/github.com/hashicorp/go-plugin/README.md +++ b/vendor/github.com/hashicorp/go-plugin/README.md @@ -3,8 +3,9 @@ `go-plugin` is a Go (golang) plugin system over RPC. It is the plugin system that has been in use by HashiCorp tooling for over 4 years. While initially created for [Packer](https://www.packer.io), it is additionally in use by -[Terraform](https://www.terraform.io), [Nomad](https://www.nomadproject.io), and -[Vault](https://www.vaultproject.io). +[Terraform](https://www.terraform.io), [Nomad](https://www.nomadproject.io), +[Vault](https://www.vaultproject.io), and +[Boundary](https://www.boundaryproject.io). While the plugin system is over RPC, it is currently only designed to work over a local [reliable] network. Plugins over a real network are not supported diff --git a/vendor/github.com/hashicorp/go-plugin/client.go b/vendor/github.com/hashicorp/go-plugin/client.go index 67dca88357..e0bee88a1d 100644 --- a/vendor/github.com/hashicorp/go-plugin/client.go +++ b/vendor/github.com/hashicorp/go-plugin/client.go @@ -574,6 +574,8 @@ func (c *Client) Start() (addr net.Addr, err error) { c.config.TLSConfig = &tls.Config{ Certificates: []tls.Certificate{cert}, + ClientAuth: tls.RequireAndVerifyClientCert, + MinVersion: tls.VersionTLS12, ServerName: "localhost", } } @@ -629,17 +631,19 @@ func (c *Client) Start() (addr net.Addr, err error) { // Wait for the command to end. err := cmd.Wait() - debugMsgArgs := []interface{}{ + msgArgs := []interface{}{ "path", path, "pid", pid, } if err != nil { - debugMsgArgs = append(debugMsgArgs, + msgArgs = append(msgArgs, []interface{}{"error", err.Error()}...) + c.logger.Error("plugin process exited", msgArgs...) + } else { + // Log and make sure to flush the logs right away + c.logger.Info("plugin process exited", msgArgs...) } - // Log and make sure to flush the logs write away - c.logger.Debug("plugin process exited", debugMsgArgs...) os.Stderr.Sync() // Set that we exited, which takes a lock @@ -774,7 +778,7 @@ func (c *Client) Start() (addr net.Addr, err error) { } // loadServerCert is used by AutoMTLS to read an x.509 cert returned by the -// server, and load it as the RootCA for the client TLSConfig. +// server, and load it as the RootCA and ClientCA for the client TLSConfig. func (c *Client) loadServerCert(cert string) error { certPool := x509.NewCertPool() @@ -791,6 +795,7 @@ func (c *Client) loadServerCert(cert string) error { certPool.AddCert(x509Cert) c.config.TLSConfig.RootCAs = certPool + c.config.TLSConfig.ClientCAs = certPool return nil } diff --git a/vendor/github.com/hashicorp/go-plugin/go.mod b/vendor/github.com/hashicorp/go-plugin/go.mod deleted file mode 100644 index 4e182e6258..0000000000 --- a/vendor/github.com/hashicorp/go-plugin/go.mod +++ /dev/null @@ -1,15 +0,0 @@ -module github.com/hashicorp/go-plugin - -go 1.13 - -require ( - github.com/golang/protobuf v1.3.4 - github.com/hashicorp/go-hclog v0.14.1 - github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb - github.com/jhump/protoreflect v1.6.0 - github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 - github.com/oklog/run v1.0.0 - github.com/stretchr/testify v1.3.0 // indirect - golang.org/x/net v0.0.0-20190311183353-d8887717615a - google.golang.org/grpc v1.27.1 -) diff --git a/vendor/github.com/hashicorp/go-plugin/go.sum b/vendor/github.com/hashicorp/go-plugin/go.sum deleted file mode 100644 index 56062044ee..0000000000 --- a/vendor/github.com/hashicorp/go-plugin/go.sum +++ /dev/null @@ -1,87 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/hashicorp/go-hclog v0.14.1 h1:nQcJDQwIAGnmoUWp8ubocEX40cCml/17YkF6csQLReU= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= -github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= -github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77 h1:7GoSOOW2jpsfkntVKaS2rAr1TJqfcxotyaUcuxoZSzg= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d h1:g9qWBGx4puODJTMVyoPrpoxPFgVGd+z1DZwjfRu4d0I= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191008105621-543471e840be h1:QAcqgptGM8IQBC9K/RC4o+O9YmqEm0diQn9QmZw/0mU= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/hashicorp/go-plugin/process_posix.go b/vendor/github.com/hashicorp/go-plugin/process_posix.go index 70ba546bf6..185957f8d1 100644 --- a/vendor/github.com/hashicorp/go-plugin/process_posix.go +++ b/vendor/github.com/hashicorp/go-plugin/process_posix.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package plugin diff --git a/vendor/github.com/hashicorp/go-plugin/rpc_server.go b/vendor/github.com/hashicorp/go-plugin/rpc_server.go index 5bb18dd5db..449ba6cc1e 100644 --- a/vendor/github.com/hashicorp/go-plugin/rpc_server.go +++ b/vendor/github.com/hashicorp/go-plugin/rpc_server.go @@ -45,7 +45,11 @@ func (s *RPCServer) Serve(lis net.Listener) { for { conn, err := lis.Accept() if err != nil { - log.Printf("[ERR] plugin: plugin server: %s", err) + severity := "ERR" + if errors.Is(err, net.ErrClosed) { + severity = "DEBUG" + } + log.Printf("[%s] plugin: plugin server: %s", severity, err) return } diff --git a/vendor/github.com/hashicorp/go-plugin/server.go b/vendor/github.com/hashicorp/go-plugin/server.go index 7a58cc3919..e134999103 100644 --- a/vendor/github.com/hashicorp/go-plugin/server.go +++ b/vendor/github.com/hashicorp/go-plugin/server.go @@ -304,13 +304,13 @@ func Serve(opts *ServeConfig) { certPEM, keyPEM, err := generateCert() if err != nil { - logger.Error("failed to generate client certificate", "error", err) + logger.Error("failed to generate server certificate", "error", err) panic(err) } cert, err := tls.X509KeyPair(certPEM, keyPEM) if err != nil { - logger.Error("failed to parse client certificate", "error", err) + logger.Error("failed to parse server certificate", "error", err) panic(err) } @@ -319,6 +319,8 @@ func Serve(opts *ServeConfig) { ClientAuth: tls.RequireAndVerifyClientCert, ClientCAs: clientCertPool, MinVersion: tls.VersionTLS12, + RootCAs: clientCertPool, + ServerName: "localhost", } // We send back the raw leaf cert data for the client rather than the diff --git a/vendor/github.com/hashicorp/go-retryablehttp/.travis.yml b/vendor/github.com/hashicorp/go-retryablehttp/.travis.yml deleted file mode 100644 index c4fb6d6c8b..0000000000 --- a/vendor/github.com/hashicorp/go-retryablehttp/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -sudo: false - -language: go - -go: - - 1.12.4 - -branches: - only: - - master - -script: make updatedeps test diff --git a/vendor/github.com/hashicorp/go-retryablehttp/README.md b/vendor/github.com/hashicorp/go-retryablehttp/README.md index 30357c7566..09f5eaf221 100644 --- a/vendor/github.com/hashicorp/go-retryablehttp/README.md +++ b/vendor/github.com/hashicorp/go-retryablehttp/README.md @@ -26,6 +26,7 @@ fails so that the full request can be attempted again. See the details. Version 0.6.0 and before are compatible with Go prior to 1.12. From 0.6.1 onward, Go 1.12+ is required. +From 0.6.7 onward, Go 1.13+ is required. Example Use =========== @@ -44,6 +45,25 @@ The returned response object is an `*http.Response`, the same thing you would usually get from `net/http`. Had the request failed one or more times, the above call would block and retry with exponential backoff. +## Retrying cases that fail after a seeming success + +It's possible for a request to succeed in the sense that the expected response headers are received, but then to encounter network-level errors while reading the response body. In go-retryablehttp's most basic usage, this error would not be retryable, due to the out-of-band handling of the response body. In some cases it may be desirable to handle the response body as part of the retryable operation. + +A toy example (which will retry the full request and succeed on the second attempt) is shown below: + +```go +c := retryablehttp.NewClient() +r := retryablehttp.NewRequest("GET", "://foo", nil) +handlerShouldRetry := true +r.SetResponseHandler(func(*http.Response) error { + if !handlerShouldRetry { + return nil + } + handlerShouldRetry = false + return errors.New("retryable error") +}) +``` + ## Getting a stdlib `*http.Client` with retries It's possible to convert a `*retryablehttp.Client` directly to a `*http.Client`. diff --git a/vendor/github.com/hashicorp/go-retryablehttp/client.go b/vendor/github.com/hashicorp/go-retryablehttp/client.go index f1ccd3df35..57116e9607 100644 --- a/vendor/github.com/hashicorp/go-retryablehttp/client.go +++ b/vendor/github.com/hashicorp/go-retryablehttp/client.go @@ -35,11 +35,12 @@ import ( "net/url" "os" "regexp" + "strconv" "strings" "sync" "time" - "github.com/hashicorp/go-cleanhttp" + cleanhttp "github.com/hashicorp/go-cleanhttp" ) var ( @@ -68,11 +69,21 @@ var ( // scheme specified in the URL is invalid. This error isn't typed // specifically so we resort to matching on the error string. schemeErrorRe = regexp.MustCompile(`unsupported protocol scheme`) + + // A regular expression to match the error returned by net/http when the + // TLS certificate is not trusted. This error isn't typed + // specifically so we resort to matching on the error string. + notTrustedErrorRe = regexp.MustCompile(`certificate is not trusted`) ) // ReaderFunc is the type of function that can be given natively to NewRequest type ReaderFunc func() (io.Reader, error) +// ResponseHandlerFunc is a type of function that takes in a Response, and does something with it. +// It only runs if the initial part of the request was successful. +// If an error is returned, the client's retry policy will be used to determine whether to retry the whole request. +type ResponseHandlerFunc func(*http.Response) error + // LenReader is an interface implemented by many in-memory io.Reader's. Used // for automatically sending the right Content-Length header when possible. type LenReader interface { @@ -85,6 +96,8 @@ type Request struct { // used to rewind the request data in between retries. body ReaderFunc + responseHandler ResponseHandlerFunc + // Embed an HTTP request directly. This makes a *Request act exactly // like an *http.Request so that all meta methods are supported. *http.Request @@ -93,8 +106,16 @@ type Request struct { // WithContext returns wrapped Request with a shallow copy of underlying *http.Request // with its context changed to ctx. The provided ctx must be non-nil. func (r *Request) WithContext(ctx context.Context) *Request { - r.Request = r.Request.WithContext(ctx) - return r + return &Request{ + body: r.body, + responseHandler: r.responseHandler, + Request: r.Request.WithContext(ctx), + } +} + +// SetResponseHandler allows setting the response handler. +func (r *Request) SetResponseHandler(fn ResponseHandlerFunc) { + r.responseHandler = fn } // BodyBytes allows accessing the request body. It is an analogue to @@ -251,23 +272,31 @@ func FromRequest(r *http.Request) (*Request, error) { return nil, err } // Could assert contentLength == r.ContentLength - return &Request{bodyReader, r}, nil + return &Request{body: bodyReader, Request: r}, nil } // NewRequest creates a new wrapped request. func NewRequest(method, url string, rawBody interface{}) (*Request, error) { + return NewRequestWithContext(context.Background(), method, url, rawBody) +} + +// NewRequestWithContext creates a new wrapped request with the provided context. +// +// The context controls the entire lifetime of a request and its response: +// obtaining a connection, sending the request, and reading the response headers and body. +func NewRequestWithContext(ctx context.Context, method, url string, rawBody interface{}) (*Request, error) { bodyReader, contentLength, err := getBodyReaderAndContentLength(rawBody) if err != nil { return nil, err } - httpReq, err := http.NewRequest(method, url, nil) + httpReq, err := http.NewRequestWithContext(ctx, method, url, nil) if err != nil { return nil, err } httpReq.ContentLength = contentLength - return &Request{bodyReader, httpReq}, nil + return &Request{body: bodyReader, Request: httpReq}, nil } // Logger interface allows to use other loggers than @@ -276,12 +305,16 @@ type Logger interface { Printf(string, ...interface{}) } -// LeveledLogger interface implements the basic methods that a logger library needs +// LeveledLogger is an interface that can be implemented by any logger or a +// logger wrapper to provide leveled logging. The methods accept a message +// string and a variadic number of key-value pairs. For log.Printf style +// formatting where message string contains a format specifier, use Logger +// interface. type LeveledLogger interface { - Error(string, ...interface{}) - Info(string, ...interface{}) - Debug(string, ...interface{}) - Warn(string, ...interface{}) + Error(msg string, keysAndValues ...interface{}) + Info(msg string, keysAndValues ...interface{}) + Debug(msg string, keysAndValues ...interface{}) + Warn(msg string, keysAndValues ...interface{}) } // hookLogger adapts an LeveledLogger to Logger for use by the existing hook functions @@ -357,6 +390,7 @@ type Client struct { ErrorHandler ErrorHandler loggerInit sync.Once + clientInit sync.Once } // NewClient creates a new Client with default settings. @@ -398,21 +432,42 @@ func DefaultRetryPolicy(ctx context.Context, resp *http.Response, err error) (bo return false, ctx.Err() } + // don't propagate other errors + shouldRetry, _ := baseRetryPolicy(resp, err) + return shouldRetry, nil +} + +// ErrorPropagatedRetryPolicy is the same as DefaultRetryPolicy, except it +// propagates errors back instead of returning nil. This allows you to inspect +// why it decided to retry or not. +func ErrorPropagatedRetryPolicy(ctx context.Context, resp *http.Response, err error) (bool, error) { + // do not retry on context.Canceled or context.DeadlineExceeded + if ctx.Err() != nil { + return false, ctx.Err() + } + + return baseRetryPolicy(resp, err) +} + +func baseRetryPolicy(resp *http.Response, err error) (bool, error) { if err != nil { if v, ok := err.(*url.Error); ok { // Don't retry if the error was due to too many redirects. if redirectsErrorRe.MatchString(v.Error()) { - return false, nil + return false, v } // Don't retry if the error was due to an invalid protocol scheme. if schemeErrorRe.MatchString(v.Error()) { - return false, nil + return false, v } // Don't retry if the error was due to TLS cert verification failure. + if notTrustedErrorRe.MatchString(v.Error()) { + return false, v + } if _, ok := v.Err.(x509.UnknownAuthorityError); ok { - return false, nil + return false, v } } @@ -420,12 +475,19 @@ func DefaultRetryPolicy(ctx context.Context, resp *http.Response, err error) (bo return true, nil } + // 429 Too Many Requests is recoverable. Sometimes the server puts + // a Retry-After response header to indicate when the server is + // available to start processing request from client. + if resp.StatusCode == http.StatusTooManyRequests { + return true, nil + } + // Check the response code. We retry on 500-range responses to allow // the server time to recover, as 500's are typically not permanent // errors and may relate to outages on the server side. This will catch // invalid response codes as well, like 0 and 999. - if resp.StatusCode == 0 || (resp.StatusCode >= 500 && resp.StatusCode != 501) { - return true, nil + if resp.StatusCode == 0 || (resp.StatusCode >= 500 && resp.StatusCode != http.StatusNotImplemented) { + return true, fmt.Errorf("unexpected HTTP status %s", resp.Status) } return false, nil @@ -434,7 +496,21 @@ func DefaultRetryPolicy(ctx context.Context, resp *http.Response, err error) (bo // DefaultBackoff provides a default callback for Client.Backoff which // will perform exponential backoff based on the attempt number and limited // by the provided minimum and maximum durations. +// +// It also tries to parse Retry-After response header when a http.StatusTooManyRequests +// (HTTP Code 429) is found in the resp parameter. Hence it will return the number of +// seconds the server states it may be ready to process more requests from this client. func DefaultBackoff(min, max time.Duration, attemptNum int, resp *http.Response) time.Duration { + if resp != nil { + if resp.StatusCode == http.StatusTooManyRequests || resp.StatusCode == http.StatusServiceUnavailable { + if s, ok := resp.Header["Retry-After"]; ok { + if sleep, err := strconv.ParseInt(s[0], 10, 64); err == nil { + return time.Second * time.Duration(sleep) + } + } + } + } + mult := math.Pow(2, float64(attemptNum)) * float64(min) sleep := time.Duration(mult) if float64(sleep) != mult || sleep > max { @@ -490,26 +566,31 @@ func PassthroughErrorHandler(resp *http.Response, err error, _ int) (*http.Respo // Do wraps calling an HTTP method with retries. func (c *Client) Do(req *Request) (*http.Response, error) { - if c.HTTPClient == nil { - c.HTTPClient = cleanhttp.DefaultPooledClient() - } + c.clientInit.Do(func() { + if c.HTTPClient == nil { + c.HTTPClient = cleanhttp.DefaultPooledClient() + } + }) logger := c.logger() if logger != nil { switch v := logger.(type) { - case Logger: - v.Printf("[DEBUG] %s %s", req.Method, req.URL) case LeveledLogger: v.Debug("performing request", "method", req.Method, "url", req.URL) + case Logger: + v.Printf("[DEBUG] %s %s", req.Method, req.URL) } } var resp *http.Response - var err error + var attempt int + var shouldRetry bool + var doErr, respErr, checkErr error for i := 0; ; i++ { - var code int // HTTP response code + doErr, respErr = nil, nil + attempt++ // Always rewind the request body when non-nil. if req.body != nil { @@ -527,30 +608,35 @@ func (c *Client) Do(req *Request) (*http.Response, error) { if c.RequestLogHook != nil { switch v := logger.(type) { - case Logger: - c.RequestLogHook(v, req.Request, i) case LeveledLogger: c.RequestLogHook(hookLogger{v}, req.Request, i) + case Logger: + c.RequestLogHook(v, req.Request, i) default: c.RequestLogHook(nil, req.Request, i) } } // Attempt the request - resp, err = c.HTTPClient.Do(req.Request) - if resp != nil { - code = resp.StatusCode - } + resp, doErr = c.HTTPClient.Do(req.Request) // Check if we should continue with retries. - checkOK, checkErr := c.CheckRetry(req.Context(), resp, err) + shouldRetry, checkErr = c.CheckRetry(req.Context(), resp, doErr) + if !shouldRetry && doErr == nil && req.responseHandler != nil { + respErr = req.responseHandler(resp) + shouldRetry, checkErr = c.CheckRetry(req.Context(), resp, respErr) + } + err := doErr + if respErr != nil { + err = respErr + } if err != nil { switch v := logger.(type) { - case Logger: - v.Printf("[ERR] %s %s request failed: %v", req.Method, req.URL, err) case LeveledLogger: v.Error("request failed", "error", err, "method", req.Method, "url", req.URL) + case Logger: + v.Printf("[ERR] %s %s request failed: %v", req.Method, req.URL, err) } } else { // Call this here to maintain the behavior of logging all requests, @@ -558,23 +644,18 @@ func (c *Client) Do(req *Request) (*http.Response, error) { if c.ResponseLogHook != nil { // Call the response logger function if provided. switch v := logger.(type) { - case Logger: - c.ResponseLogHook(v, resp) case LeveledLogger: c.ResponseLogHook(hookLogger{v}, resp) + case Logger: + c.ResponseLogHook(v, resp) default: c.ResponseLogHook(nil, resp) } } } - // Now decide if we should continue. - if !checkOK { - if checkErr != nil { - err = checkErr - } - c.HTTPClient.CloseIdleConnections() - return resp, err + if !shouldRetry { + break } // We do this before drainBody because there's no need for the I/O if @@ -585,44 +666,73 @@ func (c *Client) Do(req *Request) (*http.Response, error) { } // We're going to retry, consume any response to reuse the connection. - if err == nil && resp != nil { + if doErr == nil { c.drainBody(resp.Body) } wait := c.Backoff(c.RetryWaitMin, c.RetryWaitMax, i, resp) - desc := fmt.Sprintf("%s %s", req.Method, req.URL) - if code > 0 { - desc = fmt.Sprintf("%s (status: %d)", desc, code) - } if logger != nil { + desc := fmt.Sprintf("%s %s", req.Method, req.URL) + if resp != nil { + desc = fmt.Sprintf("%s (status: %d)", desc, resp.StatusCode) + } switch v := logger.(type) { - case Logger: - v.Printf("[DEBUG] %s: retrying in %s (%d left)", desc, wait, remain) case LeveledLogger: v.Debug("retrying request", "request", desc, "timeout", wait, "remaining", remain) + case Logger: + v.Printf("[DEBUG] %s: retrying in %s (%d left)", desc, wait, remain) } } + timer := time.NewTimer(wait) select { case <-req.Context().Done(): + timer.Stop() c.HTTPClient.CloseIdleConnections() return nil, req.Context().Err() - case <-time.After(wait): + case <-timer.C: } + + // Make shallow copy of http Request so that we can modify its body + // without racing against the closeBody call in persistConn.writeLoop. + httpreq := *req.Request + req.Request = &httpreq + } + + // this is the closest we have to success criteria + if doErr == nil && respErr == nil && checkErr == nil && !shouldRetry { + return resp, nil + } + + defer c.HTTPClient.CloseIdleConnections() + + var err error + if checkErr != nil { + err = checkErr + } else if respErr != nil { + err = respErr + } else { + err = doErr } if c.ErrorHandler != nil { - c.HTTPClient.CloseIdleConnections() - return c.ErrorHandler(resp, err, c.RetryMax+1) + return c.ErrorHandler(resp, err, attempt) } // By default, we close the response body and return an error without // returning the response if resp != nil { - resp.Body.Close() + c.drainBody(resp.Body) } - c.HTTPClient.CloseIdleConnections() - return nil, fmt.Errorf("%s %s giving up after %d attempts", - req.Method, req.URL, c.RetryMax+1) + + // this means CheckRetry thought the request was a failure, but didn't + // communicate why + if err == nil { + return nil, fmt.Errorf("%s %s giving up after %d attempt(s)", + req.Method, req.URL, attempt) + } + + return nil, fmt.Errorf("%s %s giving up after %d attempt(s): %w", + req.Method, req.URL, attempt, err) } // Try to read the response body so we can reuse this connection. @@ -632,10 +742,10 @@ func (c *Client) drainBody(body io.ReadCloser) { if err != nil { if c.logger() != nil { switch v := c.logger().(type) { - case Logger: - v.Printf("[ERR] error reading response body: %v", err) case LeveledLogger: v.Error("error reading response body", "error", err) + case Logger: + v.Printf("[ERR] error reading response body: %v", err) } } } diff --git a/vendor/github.com/hashicorp/go-retryablehttp/go.mod b/vendor/github.com/hashicorp/go-retryablehttp/go.mod deleted file mode 100644 index 7cc02b76fa..0000000000 --- a/vendor/github.com/hashicorp/go-retryablehttp/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/hashicorp/go-retryablehttp - -require ( - github.com/hashicorp/go-cleanhttp v0.5.1 - github.com/hashicorp/go-hclog v0.9.2 -) - -go 1.13 diff --git a/vendor/github.com/hashicorp/go-retryablehttp/go.sum b/vendor/github.com/hashicorp/go-retryablehttp/go.sum deleted file mode 100644 index 71afe56822..0000000000 --- a/vendor/github.com/hashicorp/go-retryablehttp/go.sum +++ /dev/null @@ -1,10 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= diff --git a/vendor/github.com/hashicorp/go-retryablehttp/roundtripper.go b/vendor/github.com/hashicorp/go-retryablehttp/roundtripper.go index b841b4cfe5..8f3ee35842 100644 --- a/vendor/github.com/hashicorp/go-retryablehttp/roundtripper.go +++ b/vendor/github.com/hashicorp/go-retryablehttp/roundtripper.go @@ -1,7 +1,9 @@ package retryablehttp import ( + "errors" "net/http" + "net/url" "sync" ) @@ -39,5 +41,12 @@ func (rt *RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { } // Execute the request. - return rt.Client.Do(retryableReq) + resp, err := rt.Client.Do(retryableReq) + // If we got an error returned by standard library's `Do` method, unwrap it + // otherwise we will wind up erroneously re-nesting the error. + if _, ok := err.(*url.Error); ok { + return resp, errors.Unwrap(err) + } + + return resp, err } diff --git a/vendor/github.com/hashicorp/go-rootcerts/go.mod b/vendor/github.com/hashicorp/go-rootcerts/go.mod deleted file mode 100644 index e2dd024702..0000000000 --- a/vendor/github.com/hashicorp/go-rootcerts/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/hashicorp/go-rootcerts - -go 1.12 - -require github.com/mitchellh/go-homedir v1.1.0 diff --git a/vendor/github.com/hashicorp/go-rootcerts/go.sum b/vendor/github.com/hashicorp/go-rootcerts/go.sum deleted file mode 100644 index ae38d147b4..0000000000 --- a/vendor/github.com/hashicorp/go-rootcerts/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.mod b/vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.mod deleted file mode 100644 index 208a25d784..0000000000 --- a/vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/hashicorp/go-secure-stdlib/mlock - -go 1.16 - -require golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.sum b/vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.sum deleted file mode 100644 index 0f478630ca..0000000000 --- a/vendor/github.com/hashicorp/go-secure-stdlib/mlock/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/mlock/mlock_unavail.go b/vendor/github.com/hashicorp/go-secure-stdlib/mlock/mlock_unavail.go index 8084963f72..941eb2d7bd 100644 --- a/vendor/github.com/hashicorp/go-secure-stdlib/mlock/mlock_unavail.go +++ b/vendor/github.com/hashicorp/go-secure-stdlib/mlock/mlock_unavail.go @@ -1,4 +1,4 @@ -// +build android darwin nacl netbsd plan9 windows +// +build darwin nacl netbsd plan9 windows package mlock diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/go.mod b/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/go.mod deleted file mode 100644 index b58f28c02e..0000000000 --- a/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/hashicorp/go-secure-stdlib/parseutil - -go 1.16 - -require ( - github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 - github.com/hashicorp/go-sockaddr v1.0.2 - github.com/mitchellh/mapstructure v1.4.1 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/go.sum b/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/go.sum deleted file mode 100644 index 7b4e868c4a..0000000000 --- a/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/go.sum +++ /dev/null @@ -1,31 +0,0 @@ -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 h1:nd0HIW15E6FG1MsnArYaHfuw9C2zgzM8LxkG5Ty/788= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= -github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.4.1 h1:CpVNEelQCZBooIPDn+AR3NpivK/TIKU8bDxdASFVQag= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/parseutil.go b/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/parseutil.go index 745836add7..b3a932eb12 100644 --- a/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/parseutil.go +++ b/vendor/github.com/hashicorp/go-secure-stdlib/parseutil/parseutil.go @@ -4,6 +4,7 @@ import ( "encoding/json" "errors" "fmt" + "math" "regexp" "strconv" "strings" @@ -92,6 +93,9 @@ func ParseCapacityString(in interface{}) (uint64, error) { return cap, nil } +// Parse a duration from an arbitrary value (a string or numeric value) into +// a time.Duration; when units are missing (such as when a numeric type is +// provided), the duration is assumed to be in seconds. func ParseDurationSecond(in interface{}) (time.Duration, error) { var dur time.Duration jsonIn, ok := in.(json.Number) @@ -105,20 +109,22 @@ func ParseDurationSecond(in interface{}) (time.Duration, error) { if inp == "" { return dur, nil } - var err error - // Look for a suffix otherwise its a plain second value - if strings.HasSuffix(inp, "s") || strings.HasSuffix(inp, "m") || strings.HasSuffix(inp, "h") || strings.HasSuffix(inp, "ms") { - dur, err = time.ParseDuration(inp) - if err != nil { - return dur, err - } - } else { - // Plain integer - secs, err := strconv.ParseInt(inp, 10, 64) + + if v, err := strconv.ParseInt(inp, 10, 64); err == nil { + return time.Duration(v) * time.Second, nil + } + + if strings.HasSuffix(inp, "d") { + v, err := strconv.ParseInt(inp[:len(inp)-1], 10, 64) if err != nil { return dur, err } - dur = time.Duration(secs) * time.Second + return time.Duration(v) * 24 * time.Hour, nil + } + + var err error + if dur, err = time.ParseDuration(inp); err != nil { + return dur, err } case int: dur = time.Duration(inp) * time.Second @@ -145,6 +151,9 @@ func ParseDurationSecond(in interface{}) (time.Duration, error) { return dur, nil } +// Parse an absolute timestamp from the provided arbitrary value (string or +// numeric value). When an untyped numeric value is provided, it is assumed +// to be seconds from the Unix Epoch. func ParseAbsoluteTime(in interface{}) (time.Time, error) { var t time.Time switch inp := in.(type) { @@ -193,6 +202,13 @@ func ParseAbsoluteTime(in interface{}) (time.Time, error) { return t, nil } +// ParseInt takes an arbitrary value (either a string or numeric type) and +// parses it as an int64 value. This value is assumed to be larger than the +// provided type, but cannot safely be cast. +// +// When the end value is bounded (such as an int value), it is recommended +// to instead call SafeParseInt or SafeParseIntRange to safely cast to a +// more restrictive type. func ParseInt(in interface{}) (int64, error) { var ret int64 jsonIn, ok := in.(json.Number) @@ -230,6 +246,104 @@ func ParseInt(in interface{}) (int64, error) { return ret, nil } +// ParseDirectIntSlice behaves similarly to ParseInt, but accepts typed +// slices, returning a slice of int64s. +// +// If the starting value may not be in slice form (e.g.. a bare numeric value +// could be provided), it is suggested to call ParseIntSlice instead. +func ParseDirectIntSlice(in interface{}) ([]int64, error) { + var ret []int64 + + switch in.(type) { + case []int: + for _, v := range in.([]int) { + ret = append(ret, int64(v)) + } + case []int32: + for _, v := range in.([]int32) { + ret = append(ret, int64(v)) + } + case []int64: + // For consistency to ensure callers can always modify ret without + // impacting in. + for _, v := range in.([]int64) { + ret = append(ret, v) + } + case []uint: + for _, v := range in.([]uint) { + ret = append(ret, int64(v)) + } + case []uint32: + for _, v := range in.([]uint32) { + ret = append(ret, int64(v)) + } + case []uint64: + for _, v := range in.([]uint64) { + ret = append(ret, int64(v)) + } + case []json.Number: + for _, v := range in.([]json.Number) { + element, err := ParseInt(v) + if err != nil { + return nil, err + } + ret = append(ret, element) + } + case []string: + for _, v := range in.([]string) { + element, err := ParseInt(v) + if err != nil { + return nil, err + } + ret = append(ret, element) + } + default: + return nil, errors.New("could not parse value from input") + } + + return ret, nil +} + +// ParseIntSlice is a helper function for handling upgrades of optional +// slices; that is, if the API accepts a type similar to , +// nicely handle the common cases of providing only an int-ish, providing +// an actual slice of int-ishes, or providing a comma-separated list of +// numbers. +// +// When []int64 is not the desired final type (or the values should be +// range-bound), it is suggested to call SafeParseIntSlice or +// SafeParseIntSliceRange instead. +func ParseIntSlice(in interface{}) ([]int64, error) { + if ret, err := ParseInt(in); err == nil { + return []int64{ret}, nil + } + + if ret, err := ParseDirectIntSlice(in); err == nil { + return ret, nil + } + + if strings, err := ParseCommaStringSlice(in); err == nil { + var ret []int64 + for _, v := range strings { + if v == "" { + // Ignore empty fields + continue + } + + element, err := ParseInt(v) + if err != nil { + return nil, err + } + ret = append(ret, element) + } + + return ret, nil + } + + return nil, errors.New("could not parse value from input") +} + +// Parses the provided arbitrary value as a boolean-like value. func ParseBool(in interface{}) (bool, error) { var result bool if err := mapstructure.WeakDecode(in, &result); err != nil { @@ -238,6 +352,7 @@ func ParseBool(in interface{}) (bool, error) { return result, nil } +// Parses the provided arbitrary value as a string. func ParseString(in interface{}) (string, error) { var result string if err := mapstructure.WeakDecode(in, &result); err != nil { @@ -246,7 +361,13 @@ func ParseString(in interface{}) (string, error) { return result, nil } +// Parses the provided string-like value as a comma-separated list of values. func ParseCommaStringSlice(in interface{}) ([]string, error) { + jsonIn, ok := in.(json.Number) + if ok { + in = jsonIn.String() + } + rawString, ok := in.(string) if ok && rawString == "" { return []string{}, nil @@ -267,6 +388,7 @@ func ParseCommaStringSlice(in interface{}) ([]string, error) { return strutil.TrimStrings(result), nil } +// Parses the specified value as one or more addresses, separated by commas. func ParseAddrs(addrs interface{}) ([]*sockaddr.SockAddrMarshaler, error) { out := make([]*sockaddr.SockAddrMarshaler, 0) stringAddrs := make([]string, 0) @@ -306,3 +428,75 @@ func ParseAddrs(addrs interface{}) ([]*sockaddr.SockAddrMarshaler, error) { return out, nil } + +// Parses the provided arbitrary value (see ParseInt), ensuring it is within +// the specified range (inclusive of bounds). If this range corresponds to a +// smaller type, the returned value can then be safely cast without risking +// overflow. +func SafeParseIntRange(in interface{}, min int64, max int64) (int64, error) { + raw, err := ParseInt(in) + if err != nil { + return 0, err + } + + if raw < min || raw > max { + return 0, fmt.Errorf("error parsing int value; out of range [%v to %v]: %v", min, max, raw) + } + + return raw, nil +} + +// Parses the specified arbitrary value (see ParseInt), ensuring that the +// resulting value is within the range for an int value. If no error occurred, +// the caller knows no overflow occurred. +func SafeParseInt(in interface{}) (int, error) { + raw, err := SafeParseIntRange(in, math.MinInt, math.MaxInt) + return int(raw), err +} + +// Parses the provided arbitrary value (see ParseIntSlice) into a slice of +// int64 values, ensuring each is within the specified range (inclusive of +// bounds). If this range corresponds to a smaller type, the returned value +// can then be safely cast without risking overflow. +// +// If elements is positive, it is used to ensure the resulting slice is +// bounded above by that many number of elements (inclusive). +func SafeParseIntSliceRange(in interface{}, minValue int64, maxValue int64, elements int) ([]int64, error) { + raw, err := ParseIntSlice(in) + if err != nil { + return nil, err + } + + if elements > 0 && len(raw) > elements { + return nil, fmt.Errorf("error parsing value from input: got %v but expected at most %v elements", len(raw), elements) + } + + for index, value := range raw { + if value < minValue || value > maxValue { + return nil, fmt.Errorf("error parsing value from input: element %v was outside of range [%v to %v]: %v", index, minValue, maxValue, value) + } + } + + return raw, nil +} + +// Parses the provided arbitrary value (see ParseIntSlice) into a slice of +// int values, ensuring the each resulting value in the slice is within the +// range for an int value. If no error occurred, the caller knows no overflow +// occurred. +// +// If elements is positive, it is used to ensure the resulting slice is +// bounded above by that many number of elements (inclusive). +func SafeParseIntSlice(in interface{}, elements int) ([]int, error) { + raw, err := SafeParseIntSliceRange(in, math.MinInt, math.MaxInt, elements) + if err != nil || raw == nil { + return nil, err + } + + var result = make([]int, len(raw)) + for _, element := range raw { + result = append(result, int(element)) + } + + return result, nil +} diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/strutil/go.mod b/vendor/github.com/hashicorp/go-secure-stdlib/strutil/go.mod deleted file mode 100644 index 18285479c2..0000000000 --- a/vendor/github.com/hashicorp/go-secure-stdlib/strutil/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/hashicorp/go-secure-stdlib/strutil - -go 1.16 - -require ( - github.com/ryanuber/go-glob v1.0.0 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/strutil/go.sum b/vendor/github.com/hashicorp/go-secure-stdlib/strutil/go.sum deleted file mode 100644 index 3e8032d647..0000000000 --- a/vendor/github.com/hashicorp/go-secure-stdlib/strutil/go.sum +++ /dev/null @@ -1,13 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/hashicorp/go-secure-stdlib/strutil/strutil.go b/vendor/github.com/hashicorp/go-secure-stdlib/strutil/strutil.go index 55d3cdda7b..102462dc60 100644 --- a/vendor/github.com/hashicorp/go-secure-stdlib/strutil/strutil.go +++ b/vendor/github.com/hashicorp/go-secure-stdlib/strutil/strutil.go @@ -230,16 +230,16 @@ func TrimStrings(items []string) []string { // strings. This also may convert the items in the slice to lower case and // returns a sorted slice. func RemoveDuplicates(items []string, lowercase bool) []string { - itemsMap := map[string]bool{} + itemsMap := make(map[string]struct{}, len(items)) for _, item := range items { item = strings.TrimSpace(item) - if lowercase { - item = strings.ToLower(item) - } if item == "" { continue } - itemsMap[item] = true + if lowercase { + item = strings.ToLower(item) + } + itemsMap[item] = struct{}{} } items = make([]string, 0, len(itemsMap)) for item := range itemsMap { @@ -254,18 +254,21 @@ func RemoveDuplicates(items []string, lowercase bool) []string { // In all cases, strings are compared after trimming whitespace // If caseInsensitive, strings will be compared after ToLower() func RemoveDuplicatesStable(items []string, caseInsensitive bool) []string { - itemsMap := make(map[string]bool, len(items)) + itemsMap := make(map[string]struct{}, len(items)) deduplicated := make([]string, 0, len(items)) for _, item := range items { key := strings.TrimSpace(item) + if _, ok := itemsMap[key]; ok || key == "" { + continue + } if caseInsensitive { key = strings.ToLower(key) } - if key == "" || itemsMap[key] { + if _, ok := itemsMap[key]; ok { continue } - itemsMap[key] = true + itemsMap[key] = struct{}{} deduplicated = append(deduplicated, item) } return deduplicated @@ -299,17 +302,18 @@ func EquivalentSlices(a, b []string) bool { } // First we'll build maps to ensure unique values - mapA := map[string]bool{} - mapB := map[string]bool{} + mapA := make(map[string]struct{}, len(a)) + mapB := make(map[string]struct{}, len(b)) for _, keyA := range a { - mapA[keyA] = true + mapA[keyA] = struct{}{} } for _, keyB := range b { - mapB[keyB] = true + mapB[keyB] = struct{}{} } // Now we'll build our checking slices - var sortedA, sortedB []string + sortedA := make([]string, 0, len(mapA)) + sortedB := make([]string, 0, len(mapB)) for keyA := range mapA { sortedA = append(sortedA, keyA) } @@ -434,23 +438,21 @@ func Difference(a, b []string, lowercase bool) []string { a = RemoveDuplicates(a, lowercase) b = RemoveDuplicates(b, lowercase) - itemsMap := map[string]bool{} + itemsMap := map[string]struct{}{} for _, aVal := range a { - itemsMap[aVal] = true + itemsMap[aVal] = struct{}{} } // Perform difference calculation for _, bVal := range b { if _, ok := itemsMap[bVal]; ok { - itemsMap[bVal] = false + delete(itemsMap, bVal) } } items := []string{} - for item, exists := range itemsMap { - if exists { - items = append(items, item) - } + for item := range itemsMap { + items = append(items, item) } sort.Strings(items) return items diff --git a/vendor/github.com/hashicorp/go-sockaddr/go.mod b/vendor/github.com/hashicorp/go-sockaddr/go.mod deleted file mode 100644 index 21f8d8e8e7..0000000000 --- a/vendor/github.com/hashicorp/go-sockaddr/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/hashicorp/go-sockaddr - -require ( - github.com/hashicorp/errwrap v1.0.0 - github.com/mitchellh/cli v1.0.0 - github.com/mitchellh/go-wordwrap v1.0.0 - github.com/ryanuber/columnize v2.1.0+incompatible -) diff --git a/vendor/github.com/hashicorp/go-sockaddr/go.sum b/vendor/github.com/hashicorp/go-sockaddr/go.sum deleted file mode 100644 index 1b2bdd4828..0000000000 --- a/vendor/github.com/hashicorp/go-sockaddr/go.sum +++ /dev/null @@ -1,24 +0,0 @@ -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/ryanuber/columnize v2.1.0+incompatible h1:j1Wcmh8OrK4Q7GXY+V7SVSY8nUWQxHW5TkBe7YUl+2s= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc h1:MeuS1UDyZyFH++6vVy44PuufTeFF0d0nfI6XB87YGSk= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= diff --git a/vendor/github.com/hashicorp/go-uuid/LICENSE b/vendor/github.com/hashicorp/go-uuid/LICENSE index e87a115e46..a320b309c4 100644 --- a/vendor/github.com/hashicorp/go-uuid/LICENSE +++ b/vendor/github.com/hashicorp/go-uuid/LICENSE @@ -1,3 +1,5 @@ +Copyright © 2015-2022 HashiCorp, Inc. + Mozilla Public License, version 2.0 1. Definitions diff --git a/vendor/github.com/hashicorp/go-uuid/go.mod b/vendor/github.com/hashicorp/go-uuid/go.mod deleted file mode 100644 index dd57f9d21a..0000000000 --- a/vendor/github.com/hashicorp/go-uuid/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/hashicorp/go-uuid diff --git a/vendor/github.com/hashicorp/go-version/.travis.yml b/vendor/github.com/hashicorp/go-version/.travis.yml deleted file mode 100644 index 01c5dc219a..0000000000 --- a/vendor/github.com/hashicorp/go-version/.travis.yml +++ /dev/null @@ -1,13 +0,0 @@ -language: go - -go: - - 1.2 - - 1.3 - - 1.4 - - 1.9 - - "1.10" - - 1.11 - - 1.12 - -script: - - go test diff --git a/vendor/github.com/hashicorp/go-version/CHANGELOG.md b/vendor/github.com/hashicorp/go-version/CHANGELOG.md new file mode 100644 index 0000000000..094550020e --- /dev/null +++ b/vendor/github.com/hashicorp/go-version/CHANGELOG.md @@ -0,0 +1,32 @@ +# 1.4.0 (January 5, 2022) + +FEATURES: + + - Introduce `MustConstraints()` ([#87](https://github.com/hashicorp/go-version/pull/87)) + - `Constraints`: Introduce `Equals()` and `sort.Interface` methods ([#88](https://github.com/hashicorp/go-version/pull/88)) + +# 1.3.0 (March 31, 2021) + +Please note that CHANGELOG.md does not exist in the source code prior to this release. + +FEATURES: + - Add `Core` function to return a version without prerelease or metadata ([#85](https://github.com/hashicorp/go-version/pull/85)) + +# 1.2.1 (June 17, 2020) + +BUG FIXES: + - Prevent `Version.Equal` method from panicking on `nil` encounter ([#73](https://github.com/hashicorp/go-version/pull/73)) + +# 1.2.0 (April 23, 2019) + +FEATURES: + - Add `GreaterThanOrEqual` and `LessThanOrEqual` helper methods ([#53](https://github.com/hashicorp/go-version/pull/53)) + +# 1.1.0 (Jan 07, 2019) + +FEATURES: + - Add `NewSemver` constructor ([#45](https://github.com/hashicorp/go-version/pull/45)) + +# 1.0.0 (August 24, 2018) + +Initial release. diff --git a/vendor/github.com/hashicorp/go-version/README.md b/vendor/github.com/hashicorp/go-version/README.md index 6f3a15ce77..4d25050903 100644 --- a/vendor/github.com/hashicorp/go-version/README.md +++ b/vendor/github.com/hashicorp/go-version/README.md @@ -1,5 +1,6 @@ # Versioning Library for Go -[![Build Status](https://travis-ci.org/hashicorp/go-version.svg?branch=master)](https://travis-ci.org/hashicorp/go-version) +[![Build Status](https://circleci.com/gh/hashicorp/go-version/tree/main.svg?style=svg)](https://circleci.com/gh/hashicorp/go-version/tree/main) +[![GoDoc](https://godoc.org/github.com/hashicorp/go-version?status.svg)](https://godoc.org/github.com/hashicorp/go-version) go-version is a library for parsing versions and version constraints, and verifying versions against a set of constraints. go-version diff --git a/vendor/github.com/hashicorp/go-version/constraint.go b/vendor/github.com/hashicorp/go-version/constraint.go index d055759611..1d88090281 100644 --- a/vendor/github.com/hashicorp/go-version/constraint.go +++ b/vendor/github.com/hashicorp/go-version/constraint.go @@ -4,6 +4,7 @@ import ( "fmt" "reflect" "regexp" + "sort" "strings" ) @@ -11,30 +12,40 @@ import ( // ">= 1.0". type Constraint struct { f constraintFunc + op operator check *Version original string } +func (c *Constraint) Equals(con *Constraint) bool { + return c.op == con.op && c.check.Equal(con.check) +} + // Constraints is a slice of constraints. We make a custom type so that // we can add methods to it. type Constraints []*Constraint type constraintFunc func(v, c *Version) bool -var constraintOperators map[string]constraintFunc +var constraintOperators map[string]constraintOperation + +type constraintOperation struct { + op operator + f constraintFunc +} var constraintRegexp *regexp.Regexp func init() { - constraintOperators = map[string]constraintFunc{ - "": constraintEqual, - "=": constraintEqual, - "!=": constraintNotEqual, - ">": constraintGreaterThan, - "<": constraintLessThan, - ">=": constraintGreaterThanEqual, - "<=": constraintLessThanEqual, - "~>": constraintPessimistic, + constraintOperators = map[string]constraintOperation{ + "": {op: equal, f: constraintEqual}, + "=": {op: equal, f: constraintEqual}, + "!=": {op: notEqual, f: constraintNotEqual}, + ">": {op: greaterThan, f: constraintGreaterThan}, + "<": {op: lessThan, f: constraintLessThan}, + ">=": {op: greaterThanEqual, f: constraintGreaterThanEqual}, + "<=": {op: lessThanEqual, f: constraintLessThanEqual}, + "~>": {op: pessimistic, f: constraintPessimistic}, } ops := make([]string, 0, len(constraintOperators)) @@ -66,6 +77,16 @@ func NewConstraint(v string) (Constraints, error) { return Constraints(result), nil } +// MustConstraints is a helper that wraps a call to a function +// returning (Constraints, error) and panics if error is non-nil. +func MustConstraints(c Constraints, err error) Constraints { + if err != nil { + panic(err) + } + + return c +} + // Check tests if a version satisfies all the constraints. func (cs Constraints) Check(v *Version) bool { for _, c := range cs { @@ -77,6 +98,56 @@ func (cs Constraints) Check(v *Version) bool { return true } +// Equals compares Constraints with other Constraints +// for equality. This may not represent logical equivalence +// of compared constraints. +// e.g. even though '>0.1,>0.2' is logically equivalent +// to '>0.2' it is *NOT* treated as equal. +// +// Missing operator is treated as equal to '=', whitespaces +// are ignored and constraints are sorted before comaparison. +func (cs Constraints) Equals(c Constraints) bool { + if len(cs) != len(c) { + return false + } + + // make copies to retain order of the original slices + left := make(Constraints, len(cs)) + copy(left, cs) + sort.Stable(left) + right := make(Constraints, len(c)) + copy(right, c) + sort.Stable(right) + + // compare sorted slices + for i, con := range left { + if !con.Equals(right[i]) { + return false + } + } + + return true +} + +func (cs Constraints) Len() int { + return len(cs) +} + +func (cs Constraints) Less(i, j int) bool { + if cs[i].op < cs[j].op { + return true + } + if cs[i].op > cs[j].op { + return false + } + + return cs[i].check.LessThan(cs[j].check) +} + +func (cs Constraints) Swap(i, j int) { + cs[i], cs[j] = cs[j], cs[i] +} + // Returns the string format of the constraints func (cs Constraints) String() string { csStr := make([]string, len(cs)) @@ -107,8 +178,11 @@ func parseSingle(v string) (*Constraint, error) { return nil, err } + cop := constraintOperators[matches[1]] + return &Constraint{ - f: constraintOperators[matches[1]], + f: cop.f, + op: cop.op, check: check, original: v, }, nil @@ -138,6 +212,18 @@ func prereleaseCheck(v, c *Version) bool { // Constraint functions //------------------------------------------------------------------- +type operator rune + +const ( + equal operator = '=' + notEqual operator = '≠' + greaterThan operator = '>' + lessThan operator = '<' + greaterThanEqual operator = '≥' + lessThanEqual operator = '≤' + pessimistic operator = '~' +) + func constraintEqual(v, c *Version) bool { return v.Equal(c) } diff --git a/vendor/github.com/hashicorp/go-version/go.mod b/vendor/github.com/hashicorp/go-version/go.mod deleted file mode 100644 index f5285555fa..0000000000 --- a/vendor/github.com/hashicorp/go-version/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/hashicorp/go-version diff --git a/vendor/github.com/hashicorp/go-version/version.go b/vendor/github.com/hashicorp/go-version/version.go index 1032c5606c..e87df69906 100644 --- a/vendor/github.com/hashicorp/go-version/version.go +++ b/vendor/github.com/hashicorp/go-version/version.go @@ -64,7 +64,6 @@ func newVersion(v string, pattern *regexp.Regexp) (*Version, error) { } segmentsStr := strings.Split(matches[1], ".") segments := make([]int64, len(segmentsStr)) - si := 0 for i, str := range segmentsStr { val, err := strconv.ParseInt(str, 10, 64) if err != nil { @@ -72,8 +71,7 @@ func newVersion(v string, pattern *regexp.Regexp) (*Version, error) { "Error parsing version: %s", err) } - segments[i] = int64(val) - si++ + segments[i] = val } // Even though we could support more than three segments, if we @@ -92,7 +90,7 @@ func newVersion(v string, pattern *regexp.Regexp) (*Version, error) { metadata: matches[10], pre: pre, segments: segments, - si: si, + si: len(segmentsStr), original: v, }, nil } @@ -278,8 +276,20 @@ func comparePrereleases(v string, other string) int { return 0 } +// Core returns a new version constructed from only the MAJOR.MINOR.PATCH +// segments of the version, without prerelease or metadata. +func (v *Version) Core() *Version { + segments := v.Segments64() + segmentsOnly := fmt.Sprintf("%d.%d.%d", segments[0], segments[1], segments[2]) + return Must(NewVersion(segmentsOnly)) +} + // Equal tests if two versions are equal. func (v *Version) Equal(o *Version) bool { + if v == nil || o == nil { + return v == o + } + return v.Compare(o) == 0 } @@ -288,7 +298,7 @@ func (v *Version) GreaterThan(o *Version) bool { return v.Compare(o) > 0 } -// GreaterThanOrEqualTo tests if this version is greater than or equal to another version. +// GreaterThanOrEqual tests if this version is greater than or equal to another version. func (v *Version) GreaterThanOrEqual(o *Version) bool { return v.Compare(o) >= 0 } @@ -298,7 +308,7 @@ func (v *Version) LessThan(o *Version) bool { return v.Compare(o) < 0 } -// LessThanOrEqualTo tests if this version is less than or equal to another version. +// LessThanOrEqual tests if this version is less than or equal to another version. func (v *Version) LessThanOrEqual(o *Version) bool { return v.Compare(o) <= 0 } @@ -378,3 +388,20 @@ func (v *Version) String() string { func (v *Version) Original() string { return v.original } + +// UnmarshalText implements encoding.TextUnmarshaler interface. +func (v *Version) UnmarshalText(b []byte) error { + temp, err := NewVersion(string(b)) + if err != nil { + return err + } + + *v = *temp + + return nil +} + +// MarshalText implements encoding.TextMarshaler interface. +func (v *Version) MarshalText() ([]byte, error) { + return []byte(v.String()), nil +} diff --git a/vendor/github.com/hashicorp/golang-lru/go.mod b/vendor/github.com/hashicorp/golang-lru/go.mod deleted file mode 100644 index 8ad8826b36..0000000000 --- a/vendor/github.com/hashicorp/golang-lru/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/hashicorp/golang-lru - -go 1.12 diff --git a/vendor/github.com/hashicorp/hcl/go.mod b/vendor/github.com/hashicorp/hcl/go.mod deleted file mode 100644 index 4debbbe358..0000000000 --- a/vendor/github.com/hashicorp/hcl/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/hashicorp/hcl - -require github.com/davecgh/go-spew v1.1.1 diff --git a/vendor/github.com/hashicorp/hcl/go.sum b/vendor/github.com/hashicorp/hcl/go.sum deleted file mode 100644 index b5e2922e89..0000000000 --- a/vendor/github.com/hashicorp/hcl/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/vendor/github.com/hashicorp/vault/api/auth.go b/vendor/github.com/hashicorp/vault/api/auth.go index 10af56bb99..fa92de4b3f 100644 --- a/vendor/github.com/hashicorp/vault/api/auth.go +++ b/vendor/github.com/hashicorp/vault/api/auth.go @@ -31,16 +31,82 @@ func (a *Auth) Login(ctx context.Context, authMethod AuthMethod) (*Secret, error if authMethod == nil { return nil, fmt.Errorf("no auth method provided for login") } + return a.login(ctx, authMethod) +} + +// MFALogin is a wrapper that helps satisfy Vault's MFA implementation. +// If optional credentials are provided a single-phase login will be attempted +// and the resulting Secret will contain a ClientToken if the authentication is successful. +// The client's token will also be set accordingly. +// +// If no credentials are provided a two-phase MFA login will be assumed and the resulting +// Secret will have a MFARequirement containing the MFARequestID to be used in a follow-up +// call to `sys/mfa/validate` or by passing it to the method (*Auth).MFAValidate. +func (a *Auth) MFALogin(ctx context.Context, authMethod AuthMethod, creds ...string) (*Secret, error) { + if len(creds) > 0 { + a.c.SetMFACreds(creds) + return a.login(ctx, authMethod) + } + + return a.twoPhaseMFALogin(ctx, authMethod) +} + +// MFAValidate validates an MFA request using the appropriate payload and a secret containing +// Auth.MFARequirement, like the one returned by MFALogin when credentials are not provided. +// Upon successful validation the client token will be set accordingly. +// +// The Secret returned is the authentication secret, which if desired can be +// passed as input to the NewLifetimeWatcher method in order to start +// automatically renewing the token. +func (a *Auth) MFAValidate(ctx context.Context, mfaSecret *Secret, payload map[string]interface{}) (*Secret, error) { + if mfaSecret == nil || mfaSecret.Auth == nil || mfaSecret.Auth.MFARequirement == nil { + return nil, fmt.Errorf("secret does not contain MFARequirements") + } + + s, err := a.c.Sys().MFAValidateWithContext(ctx, mfaSecret.Auth.MFARequirement.GetMFARequestID(), payload) + if err != nil { + return nil, err + } + + return a.checkAndSetToken(s) +} - authSecret, err := authMethod.Login(ctx, a.c) +// login performs the (*AuthMethod).Login() with the configured client and checks that a ClientToken is returned +func (a *Auth) login(ctx context.Context, authMethod AuthMethod) (*Secret, error) { + s, err := authMethod.Login(ctx, a.c) if err != nil { return nil, fmt.Errorf("unable to log in to auth method: %w", err) } - if authSecret == nil || authSecret.Auth == nil || authSecret.Auth.ClientToken == "" { - return nil, fmt.Errorf("login response from auth method did not return client token") + + return a.checkAndSetToken(s) +} + +// twoPhaseMFALogin performs the (*AuthMethod).Login() with the configured client +// and checks that an MFARequirement is returned +func (a *Auth) twoPhaseMFALogin(ctx context.Context, authMethod AuthMethod) (*Secret, error) { + s, err := authMethod.Login(ctx, a.c) + if err != nil { + return nil, fmt.Errorf("unable to log in: %w", err) + } + if s == nil || s.Auth == nil || s.Auth.MFARequirement == nil { + if s != nil { + s.Warnings = append(s.Warnings, "expected secret to contain MFARequirements") + } + return s, fmt.Errorf("assumed two-phase MFA login, returned secret is missing MFARequirements") + } + + return s, nil +} + +func (a *Auth) checkAndSetToken(s *Secret) (*Secret, error) { + if s == nil || s.Auth == nil || s.Auth.ClientToken == "" { + if s != nil { + s.Warnings = append(s.Warnings, "expected secret to contain ClientToken") + } + return s, fmt.Errorf("response did not return ClientToken, client token not set") } - a.c.SetToken(authSecret.Auth.ClientToken) + a.c.SetToken(s.Auth.ClientToken) - return authSecret, nil + return s, nil } diff --git a/vendor/github.com/hashicorp/vault/api/auth_token.go b/vendor/github.com/hashicorp/vault/api/auth_token.go index 86595175bc..52be1e7852 100644 --- a/vendor/github.com/hashicorp/vault/api/auth_token.go +++ b/vendor/github.com/hashicorp/vault/api/auth_token.go @@ -2,6 +2,7 @@ package api import ( "context" + "net/http" ) // TokenAuth is used to perform token backend operations on Vault @@ -15,14 +16,19 @@ func (a *Auth) Token() *TokenAuth { } func (c *TokenAuth) Create(opts *TokenCreateRequest) (*Secret, error) { - r := c.c.NewRequest("POST", "/v1/auth/token/create") + return c.CreateWithContext(context.Background(), opts) +} + +func (c *TokenAuth) CreateWithContext(ctx context.Context, opts *TokenCreateRequest) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/auth/token/create") if err := r.SetJSONBody(opts); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -32,14 +38,19 @@ func (c *TokenAuth) Create(opts *TokenCreateRequest) (*Secret, error) { } func (c *TokenAuth) CreateOrphan(opts *TokenCreateRequest) (*Secret, error) { - r := c.c.NewRequest("POST", "/v1/auth/token/create-orphan") + return c.CreateOrphanWithContext(context.Background(), opts) +} + +func (c *TokenAuth) CreateOrphanWithContext(ctx context.Context, opts *TokenCreateRequest) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/auth/token/create-orphan") if err := r.SetJSONBody(opts); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -49,14 +60,19 @@ func (c *TokenAuth) CreateOrphan(opts *TokenCreateRequest) (*Secret, error) { } func (c *TokenAuth) CreateWithRole(opts *TokenCreateRequest, roleName string) (*Secret, error) { - r := c.c.NewRequest("POST", "/v1/auth/token/create/"+roleName) + return c.CreateWithRoleWithContext(context.Background(), opts, roleName) +} + +func (c *TokenAuth) CreateWithRoleWithContext(ctx context.Context, opts *TokenCreateRequest, roleName string) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/auth/token/create/"+roleName) if err := r.SetJSONBody(opts); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -66,16 +82,21 @@ func (c *TokenAuth) CreateWithRole(opts *TokenCreateRequest, roleName string) (* } func (c *TokenAuth) Lookup(token string) (*Secret, error) { - r := c.c.NewRequest("POST", "/v1/auth/token/lookup") + return c.LookupWithContext(context.Background(), token) +} + +func (c *TokenAuth) LookupWithContext(ctx context.Context, token string) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/auth/token/lookup") if err := r.SetJSONBody(map[string]interface{}{ "token": token, }); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -85,16 +106,21 @@ func (c *TokenAuth) Lookup(token string) (*Secret, error) { } func (c *TokenAuth) LookupAccessor(accessor string) (*Secret, error) { - r := c.c.NewRequest("POST", "/v1/auth/token/lookup-accessor") + return c.LookupAccessorWithContext(context.Background(), accessor) +} + +func (c *TokenAuth) LookupAccessorWithContext(ctx context.Context, accessor string) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/auth/token/lookup-accessor") if err := r.SetJSONBody(map[string]interface{}{ "accessor": accessor, }); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -104,11 +130,16 @@ func (c *TokenAuth) LookupAccessor(accessor string) (*Secret, error) { } func (c *TokenAuth) LookupSelf() (*Secret, error) { - r := c.c.NewRequest("GET", "/v1/auth/token/lookup-self") + return c.LookupSelfWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *TokenAuth) LookupSelfWithContext(ctx context.Context) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/auth/token/lookup-self") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -118,7 +149,14 @@ func (c *TokenAuth) LookupSelf() (*Secret, error) { } func (c *TokenAuth) RenewAccessor(accessor string, increment int) (*Secret, error) { - r := c.c.NewRequest("POST", "/v1/auth/token/renew-accessor") + return c.RenewAccessorWithContext(context.Background(), accessor, increment) +} + +func (c *TokenAuth) RenewAccessorWithContext(ctx context.Context, accessor string, increment int) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/auth/token/renew-accessor") if err := r.SetJSONBody(map[string]interface{}{ "accessor": accessor, "increment": increment, @@ -126,9 +164,7 @@ func (c *TokenAuth) RenewAccessor(accessor string, increment int) (*Secret, erro return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -138,7 +174,14 @@ func (c *TokenAuth) RenewAccessor(accessor string, increment int) (*Secret, erro } func (c *TokenAuth) Renew(token string, increment int) (*Secret, error) { - r := c.c.NewRequest("PUT", "/v1/auth/token/renew") + return c.RenewWithContext(context.Background(), token, increment) +} + +func (c *TokenAuth) RenewWithContext(ctx context.Context, token string, increment int) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/auth/token/renew") if err := r.SetJSONBody(map[string]interface{}{ "token": token, "increment": increment, @@ -146,9 +189,7 @@ func (c *TokenAuth) Renew(token string, increment int) (*Secret, error) { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -158,16 +199,21 @@ func (c *TokenAuth) Renew(token string, increment int) (*Secret, error) { } func (c *TokenAuth) RenewSelf(increment int) (*Secret, error) { - r := c.c.NewRequest("PUT", "/v1/auth/token/renew-self") + return c.RenewSelfWithContext(context.Background(), increment) +} + +func (c *TokenAuth) RenewSelfWithContext(ctx context.Context, increment int) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/auth/token/renew-self") body := map[string]interface{}{"increment": increment} if err := r.SetJSONBody(body); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -176,10 +222,18 @@ func (c *TokenAuth) RenewSelf(increment int) (*Secret, error) { return ParseSecret(resp.Body) } -// RenewTokenAsSelf behaves like renew-self, but authenticates using a provided -// token instead of the token attached to the client. +// RenewTokenAsSelf wraps RenewTokenAsSelfWithContext using context.Background. func (c *TokenAuth) RenewTokenAsSelf(token string, increment int) (*Secret, error) { - r := c.c.NewRequest("PUT", "/v1/auth/token/renew-self") + return c.RenewTokenAsSelfWithContext(context.Background(), token, increment) +} + +// RenewTokenAsSelfWithContext behaves like renew-self, but authenticates using a provided +// token instead of the token attached to the client. +func (c *TokenAuth) RenewTokenAsSelfWithContext(ctx context.Context, token string, increment int) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/auth/token/renew-self") r.ClientToken = token body := map[string]interface{}{"increment": increment} @@ -187,9 +241,7 @@ func (c *TokenAuth) RenewTokenAsSelf(token string, increment int) (*Secret, erro return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -198,19 +250,25 @@ func (c *TokenAuth) RenewTokenAsSelf(token string, increment int) (*Secret, erro return ParseSecret(resp.Body) } -// RevokeAccessor revokes a token associated with the given accessor -// along with all the child tokens. +// RevokeAccessor wraps RevokeAccessorWithContext using context.Background. func (c *TokenAuth) RevokeAccessor(accessor string) error { - r := c.c.NewRequest("POST", "/v1/auth/token/revoke-accessor") + return c.RevokeAccessorWithContext(context.Background(), accessor) +} + +// RevokeAccessorWithContext revokes a token associated with the given accessor +// along with all the child tokens. +func (c *TokenAuth) RevokeAccessorWithContext(ctx context.Context, accessor string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/auth/token/revoke-accessor") if err := r.SetJSONBody(map[string]interface{}{ "accessor": accessor, }); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } @@ -219,19 +277,25 @@ func (c *TokenAuth) RevokeAccessor(accessor string) error { return nil } -// RevokeOrphan revokes a token without revoking the tree underneath it (so -// child tokens are orphaned rather than revoked) +// RevokeOrphan wraps RevokeOrphanWithContext using context.Background. func (c *TokenAuth) RevokeOrphan(token string) error { - r := c.c.NewRequest("PUT", "/v1/auth/token/revoke-orphan") + return c.RevokeOrphanWithContext(context.Background(), token) +} + +// RevokeOrphanWithContext revokes a token without revoking the tree underneath it (so +// child tokens are orphaned rather than revoked) +func (c *TokenAuth) RevokeOrphanWithContext(ctx context.Context, token string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/auth/token/revoke-orphan") if err := r.SetJSONBody(map[string]interface{}{ "token": token, }); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } @@ -240,15 +304,21 @@ func (c *TokenAuth) RevokeOrphan(token string) error { return nil } -// RevokeSelf revokes the token making the call. The `token` parameter is kept -// for backwards compatibility but is ignored; only the client's set token has -// an effect. +// RevokeSelf wraps RevokeSelfWithContext using context.Background. func (c *TokenAuth) RevokeSelf(token string) error { - r := c.c.NewRequest("PUT", "/v1/auth/token/revoke-self") + return c.RevokeSelfWithContext(context.Background(), token) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +// RevokeSelfWithContext revokes the token making the call. The `token` parameter is kept +// for backwards compatibility but is ignored; only the client's set token has +// an effect. +func (c *TokenAuth) RevokeSelfWithContext(ctx context.Context, token string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodPut, "/v1/auth/token/revoke-self") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } @@ -257,20 +327,26 @@ func (c *TokenAuth) RevokeSelf(token string) error { return nil } -// RevokeTree is the "normal" revoke operation that revokes the given token and +// RevokeTree wraps RevokeTreeWithContext using context.Background. +func (c *TokenAuth) RevokeTree(token string) error { + return c.RevokeTreeWithContext(context.Background(), token) +} + +// RevokeTreeWithContext is the "normal" revoke operation that revokes the given token and // the entire tree underneath -- all of its child tokens, their child tokens, // etc. -func (c *TokenAuth) RevokeTree(token string) error { - r := c.c.NewRequest("PUT", "/v1/auth/token/revoke") +func (c *TokenAuth) RevokeTreeWithContext(ctx context.Context, token string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/auth/token/revoke") if err := r.SetJSONBody(map[string]interface{}{ "token": token, }); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } diff --git a/vendor/github.com/hashicorp/vault/api/client.go b/vendor/github.com/hashicorp/vault/api/client.go index b6c497d0b5..b5f7e9bb82 100644 --- a/vendor/github.com/hashicorp/vault/api/client.go +++ b/vendor/github.com/hashicorp/vault/api/client.go @@ -36,6 +36,7 @@ const ( EnvVaultAddress = "VAULT_ADDR" EnvVaultAgentAddr = "VAULT_AGENT_ADDR" EnvVaultCACert = "VAULT_CACERT" + EnvVaultCACertBytes = "VAULT_CACERT_BYTES" EnvVaultCAPath = "VAULT_CAPATH" EnvVaultClientCert = "VAULT_CLIENT_CERT" EnvVaultClientKey = "VAULT_CLIENT_KEY" @@ -50,7 +51,18 @@ const ( EnvVaultMFA = "VAULT_MFA" EnvRateLimit = "VAULT_RATE_LIMIT" EnvHTTPProxy = "VAULT_HTTP_PROXY" + EnvVaultProxyAddr = "VAULT_PROXY_ADDR" HeaderIndex = "X-Vault-Index" + HeaderForward = "X-Vault-Forward" + HeaderInconsistent = "X-Vault-Inconsistent" + TLSErrorString = "This error usually means that the server is running with TLS disabled\n" + + "but the client is configured to use TLS. Please either enable TLS\n" + + "on the server or run the client with -address set to an address\n" + + "that uses the http protocol:\n\n" + + " vault -address http://
\n\n" + + "You can also set the VAULT_ADDR environment variable:\n\n\n" + + " VAULT_ADDR=http://
vault \n\n" + + "where
is replaced by the actual address to the server." ) // Deprecated values @@ -132,6 +144,20 @@ type Config struct { // with the same client. Cloning a client will not clone this value. OutputCurlString bool + // OutputPolicy causes the actual request to return an error of type + // *OutputPolicyError. Type asserting the error message will display + // an example of the required policy HCL needed for the operation. + // + // Note: It is not thread-safe to set this and make concurrent requests + // with the same client. Cloning a client will not clone this value. + OutputPolicy bool + + // curlCACert, curlCAPath, curlClientCert and curlClientKey are used to keep + // track of the name of the TLS certs and keys when OutputCurlString is set. + // Cloning a client will also not clone those values. + curlCACert, curlCAPath string + curlClientCert, curlClientKey string + // SRVLookup enables the client to lookup the host through DNS SRV lookup SRVLookup bool @@ -139,6 +165,9 @@ type Config struct { // its clone. CloneHeaders bool + // CloneToken from parent. + CloneToken bool + // ReadYourWrites ensures isolated read-after-write semantics by // providing discovered cluster replication states in each request. // The shared state is automatically propagated to all Client clones. @@ -153,9 +182,14 @@ type Config struct { // used to communicate with Vault. type TLSConfig struct { // CACert is the path to a PEM-encoded CA cert file to use to verify the - // Vault server SSL certificate. + // Vault server SSL certificate. It takes precedence over CACertBytes + // and CAPath. CACert string + // CACertBytes is a PEM-encoded certificate or bundle. It takes precedence + // over CAPath. + CACertBytes []byte + // CAPath is the path to a directory of PEM-encoded CA cert files to verify // the Vault server SSL certificate. CAPath string @@ -180,7 +214,7 @@ type TLSConfig struct { // The default Address is https://127.0.0.1:8200, but this can be overridden by // setting the `VAULT_ADDR` environment variable. // -// If an error is encountered, this will return nil. +// If an error is encountered, the Error field on the returned *Config will be populated with the specific error. func DefaultConfig() *Config { config := &Config{ Address: "https://127.0.0.1:8200", @@ -222,9 +256,9 @@ func DefaultConfig() *Config { return config } -// ConfigureTLS takes a set of TLS configurations and applies those to the -// HTTP client. -func (c *Config) ConfigureTLS(t *TLSConfig) error { +// configureTLS is a lock free version of ConfigureTLS that can be used in +// ReadEnvironment where the lock is already hold +func (c *Config) configureTLS(t *TLSConfig) error { if c.HttpClient == nil { c.HttpClient = DefaultConfig().HttpClient } @@ -241,14 +275,19 @@ func (c *Config) ConfigureTLS(t *TLSConfig) error { return err } foundClientCert = true + c.curlClientCert = t.ClientCert + c.curlClientKey = t.ClientKey case t.ClientCert != "" || t.ClientKey != "": return fmt.Errorf("both client cert and client key must be provided") } - if t.CACert != "" || t.CAPath != "" { + if t.CACert != "" || len(t.CACertBytes) != 0 || t.CAPath != "" { + c.curlCACert = t.CACert + c.curlCAPath = t.CAPath rootConfig := &rootcerts.Config{ - CAFile: t.CACert, - CAPath: t.CAPath, + CAFile: t.CACert, + CACertificate: t.CACertBytes, + CAPath: t.CAPath, } if err := rootcerts.ConfigureTLS(clientTLSConfig, rootConfig); err != nil { return err @@ -275,12 +314,22 @@ func (c *Config) ConfigureTLS(t *TLSConfig) error { return nil } +// ConfigureTLS takes a set of TLS configurations and applies those to the +// HTTP client. +func (c *Config) ConfigureTLS(t *TLSConfig) error { + c.modifyLock.Lock() + defer c.modifyLock.Unlock() + + return c.configureTLS(t) +} + // ReadEnvironment reads configuration information from the environment. If // there is an error, no configuration value is updated. func (c *Config) ReadEnvironment() error { var envAddress string var envAgentAddress string var envCACert string + var envCACertBytes []byte var envCAPath string var envClientCert string var envClientKey string @@ -290,7 +339,7 @@ func (c *Config) ReadEnvironment() error { var envMaxRetries *uint64 var envSRVLookup bool var limit *rate.Limiter - var envHTTPProxy string + var envVaultProxy string // Parse the environment variables if v := os.Getenv(EnvVaultAddress); v != "" { @@ -311,6 +360,9 @@ func (c *Config) ReadEnvironment() error { if v := os.Getenv(EnvVaultCACert); v != "" { envCACert = v } + if v := os.Getenv(EnvVaultCACertBytes); v != "" { + envCACertBytes = []byte(v) + } if v := os.Getenv(EnvVaultCAPath); v != "" { envCAPath = v } @@ -360,12 +412,18 @@ func (c *Config) ReadEnvironment() error { } if v := os.Getenv(EnvHTTPProxy); v != "" { - envHTTPProxy = v + envVaultProxy = v + } + + // VAULT_PROXY_ADDR supersedes VAULT_HTTP_PROXY + if v := os.Getenv(EnvVaultProxyAddr); v != "" { + envVaultProxy = v } // Configure the HTTP clients TLS configuration. t := &TLSConfig{ CACert: envCACert, + CACertBytes: envCACertBytes, CAPath: envCAPath, ClientCert: envClientCert, ClientKey: envClientKey, @@ -379,7 +437,7 @@ func (c *Config) ReadEnvironment() error { c.SRVLookup = envSRVLookup c.Limiter = limit - if err := c.ConfigureTLS(t); err != nil { + if err := c.configureTLS(t); err != nil { return err } @@ -399,14 +457,14 @@ func (c *Config) ReadEnvironment() error { c.Timeout = envClientTimeout } - if envHTTPProxy != "" { - url, err := url.Parse(envHTTPProxy) + if envVaultProxy != "" { + u, err := url.Parse(envVaultProxy) if err != nil { return err } transport := c.HttpClient.Transport.(*http.Transport) - transport.Proxy = http.ProxyURL(url) + transport.Proxy = http.ProxyURL(u) } return nil @@ -544,9 +602,9 @@ func (c *Client) CloneConfig() *Config { newConfig.CheckRetry = c.config.CheckRetry newConfig.Logger = c.config.Logger newConfig.Limiter = c.config.Limiter - newConfig.OutputCurlString = c.config.OutputCurlString newConfig.SRVLookup = c.config.SRVLookup newConfig.CloneHeaders = c.config.CloneHeaders + newConfig.CloneToken = c.config.CloneToken newConfig.ReadYourWrites = c.config.ReadYourWrites // we specifically want a _copy_ of the client here, not a pointer to the original one @@ -556,7 +614,7 @@ func (c *Client) CloneConfig() *Config { return newConfig } -// Sets the address of Vault in the client. The format of address should be +// SetAddress sets the address of Vault in the client. The format of address should be // "://:". Setting this on a client will override the // value of VAULT_ADDR environment variable. func (c *Client) SetAddress(addr string) error { @@ -583,6 +641,16 @@ func (c *Client) Address() string { return c.addr.String() } +func (c *Client) SetCheckRedirect(f func(*http.Request, []*http.Request) error) { + c.modifyLock.Lock() + defer c.modifyLock.Unlock() + + c.config.modifyLock.Lock() + defer c.config.modifyLock.Unlock() + + c.config.HttpClient.CheckRedirect = f +} + // SetLimiter will set the rate limiter for this client. // This method is thread-safe. // rateLimit and burst are specified according to https://godoc.org/golang.org/x/time/rate#NewLimiter @@ -735,6 +803,24 @@ func (c *Client) SetOutputCurlString(curl bool) { c.config.OutputCurlString = curl } +func (c *Client) OutputPolicy() bool { + c.modifyLock.RLock() + defer c.modifyLock.RUnlock() + c.config.modifyLock.RLock() + defer c.config.modifyLock.RUnlock() + + return c.config.OutputPolicy +} + +func (c *Client) SetOutputPolicy(isSet bool) { + c.modifyLock.RLock() + defer c.modifyLock.RUnlock() + c.config.modifyLock.Lock() + defer c.config.modifyLock.Unlock() + + c.config.OutputPolicy = isSet +} + // CurrentWrappingLookupFunc sets a lookup function that returns desired wrap TTLs // for a given operation and path. func (c *Client) CurrentWrappingLookupFunc() WrappingLookupFunc { @@ -775,6 +861,41 @@ func (c *Client) setNamespace(namespace string) { c.headers.Set(consts.NamespaceHeaderName, namespace) } +// ClearNamespace removes the namespace header if set. +func (c *Client) ClearNamespace() { + c.modifyLock.Lock() + defer c.modifyLock.Unlock() + if c.headers != nil { + c.headers.Del(consts.NamespaceHeaderName) + } +} + +// Namespace returns the namespace currently set in this client. It will +// return an empty string if there is no namespace set. +func (c *Client) Namespace() string { + c.modifyLock.Lock() + defer c.modifyLock.Unlock() + if c.headers == nil { + return "" + } + return c.headers.Get(consts.NamespaceHeaderName) +} + +// WithNamespace makes a shallow copy of Client, modifies it to use +// the given namespace, and returns it. Passing an empty string will +// temporarily unset the namespace. +func (c *Client) WithNamespace(namespace string) *Client { + c2 := *c + c2.modifyLock = sync.RWMutex{} + c2.headers = c.Headers() + if namespace == "" { + c2.ClearNamespace() + } else { + c2.SetNamespace(namespace) + } + return &c2 +} + // Token returns the access token being used by this client. It will // return the empty string if there is no token set. func (c *Client) Token() string { @@ -873,6 +994,26 @@ func (c *Client) CloneHeaders() bool { return c.config.CloneHeaders } +// SetCloneToken from parent +func (c *Client) SetCloneToken(cloneToken bool) { + c.modifyLock.Lock() + defer c.modifyLock.Unlock() + c.config.modifyLock.Lock() + defer c.config.modifyLock.Unlock() + + c.config.CloneToken = cloneToken +} + +// CloneToken gets the configured CloneToken value. +func (c *Client) CloneToken() bool { + c.modifyLock.RLock() + defer c.modifyLock.RUnlock() + c.config.modifyLock.RLock() + defer c.config.modifyLock.RUnlock() + + return c.config.CloneToken +} + // SetReadYourWrites to prevent reading stale cluster replication state. func (c *Client) SetReadYourWrites(preventStaleReads bool) { c.modifyLock.Lock() @@ -904,12 +1045,25 @@ func (c *Client) ReadYourWrites() bool { // Clone creates a new client with the same configuration. Note that the same // underlying http.Client is used; modifying the client from more than one // goroutine at once may not be safe, so modify the client as needed and then -// clone. +// clone. The headers are cloned based on the CloneHeaders property of the +// source config // // Also, only the client's config is currently copied; this means items not in // the api.Config struct, such as policy override and wrapping function // behavior, must currently then be set as desired on the new client. func (c *Client) Clone() (*Client, error) { + return c.clone(c.config.CloneHeaders) +} + +// CloneWithHeaders creates a new client similar to Clone, with the difference +// being that the headers are always cloned +func (c *Client) CloneWithHeaders() (*Client, error) { + return c.clone(true) +} + +// clone creates a new client, with the headers being cloned based on the +// passed in cloneheaders boolean +func (c *Client) clone(cloneHeaders bool) (*Client, error) { c.modifyLock.RLock() defer c.modifyLock.RUnlock() @@ -918,31 +1072,35 @@ func (c *Client) Clone() (*Client, error) { defer config.modifyLock.RUnlock() newConfig := &Config{ - Address: config.Address, - HttpClient: config.HttpClient, - MinRetryWait: config.MinRetryWait, - MaxRetryWait: config.MaxRetryWait, - MaxRetries: config.MaxRetries, - Timeout: config.Timeout, - Backoff: config.Backoff, - CheckRetry: config.CheckRetry, - Logger: config.Logger, - Limiter: config.Limiter, - OutputCurlString: config.OutputCurlString, - AgentAddress: config.AgentAddress, - SRVLookup: config.SRVLookup, - CloneHeaders: config.CloneHeaders, - ReadYourWrites: config.ReadYourWrites, + Address: config.Address, + HttpClient: config.HttpClient, + MinRetryWait: config.MinRetryWait, + MaxRetryWait: config.MaxRetryWait, + MaxRetries: config.MaxRetries, + Timeout: config.Timeout, + Backoff: config.Backoff, + CheckRetry: config.CheckRetry, + Logger: config.Logger, + Limiter: config.Limiter, + AgentAddress: config.AgentAddress, + SRVLookup: config.SRVLookup, + CloneHeaders: config.CloneHeaders, + CloneToken: config.CloneToken, + ReadYourWrites: config.ReadYourWrites, } client, err := NewClient(newConfig) if err != nil { return nil, err } - if config.CloneHeaders { + if cloneHeaders { client.SetHeaders(c.Headers().Clone()) } + if config.CloneToken { + client.SetToken(c.token) + } + client.replicationStateStore = c.replicationStateStore return client, nil @@ -1020,6 +1178,9 @@ func (c *Client) NewRequest(method, requestPath string) *Request { // RawRequest performs the raw request given. This request may be against // a Vault server not configured with this client. This is an advanced operation // that generally won't need to be called externally. +// +// Deprecated: This method should not be used directly. Use higher level +// methods instead. func (c *Client) RawRequest(r *Request) (*Response, error) { return c.RawRequestWithContext(context.Background(), r) } @@ -1027,7 +1188,19 @@ func (c *Client) RawRequest(r *Request) (*Response, error) { // RawRequestWithContext performs the raw request given. This request may be against // a Vault server not configured with this client. This is an advanced operation // that generally won't need to be called externally. +// +// Deprecated: This method should not be used directly. Use higher level +// methods instead. func (c *Client) RawRequestWithContext(ctx context.Context, r *Request) (*Response, error) { + // Note: we purposefully do not call cancel manually. The reason is + // when canceled, the request.Body will EOF when reading due to the way + // it streams data in. Cancel will still be run when the timeout is + // hit, so this doesn't really harm anything. + ctx, _ = c.withConfiguredTimeout(ctx) + return c.rawRequestWithContext(ctx, r) +} + +func (c *Client) rawRequestWithContext(ctx context.Context, r *Request) (*Response, error) { c.modifyLock.RLock() token := c.token @@ -1039,13 +1212,23 @@ func (c *Client) RawRequestWithContext(ctx context.Context, r *Request) (*Respon checkRetry := c.config.CheckRetry backoff := c.config.Backoff httpClient := c.config.HttpClient - timeout := c.config.Timeout + ns := c.headers.Get(consts.NamespaceHeaderName) outputCurlString := c.config.OutputCurlString + outputPolicy := c.config.OutputPolicy logger := c.config.Logger c.config.modifyLock.RUnlock() c.modifyLock.RUnlock() + // ensure that the most current namespace setting is used at the time of the call + // e.g. calls using (*Client).WithNamespace + switch ns { + case "": + r.Headers.Del(consts.NamespaceHeaderName) + default: + r.Headers.Set(consts.NamespaceHeaderName, ns) + } + for _, cb := range c.requestCallbacks { cb(r) } @@ -1058,12 +1241,9 @@ func (c *Client) RawRequestWithContext(ctx context.Context, r *Request) (*Respon limiter.Wait(ctx) } - // Sanity check the token before potentially erroring from the API - idx := strings.IndexFunc(token, func(c rune) bool { - return !unicode.IsPrint(c) - }) - if idx != -1 { - return nil, fmt.Errorf("configured Vault token contains non-printable characters and cannot be used") + // check the token before potentially erroring from the API + if err := validateToken(token); err != nil { + return nil, err } redirectCount := 0 @@ -1080,17 +1260,22 @@ START: LastOutputStringError = &OutputStringError{ Request: req, TLSSkipVerify: c.config.HttpClient.Transport.(*http.Transport).TLSClientConfig.InsecureSkipVerify, + ClientCert: c.config.curlClientCert, + ClientKey: c.config.curlClientKey, + ClientCACert: c.config.curlCACert, + ClientCAPath: c.config.curlCAPath, } return nil, LastOutputStringError } - if timeout != 0 { - // Note: we purposefully do not call cancel manually. The reason is - // when canceled, the request.Body will EOF when reading due to the way - // it streams data in. Cancel will still be run when the timeout is - // hit, so this doesn't really harm anything. - ctx, _ = context.WithTimeout(ctx, timeout) + if outputPolicy { + LastOutputPolicyError = &OutputPolicyError{ + method: req.Method, + path: strings.TrimPrefix(req.URL.Path, "/v1"), + } + return nil, LastOutputPolicyError } + req.Request = req.Request.WithContext(ctx) if backoff == nil { @@ -1119,17 +1304,7 @@ START: } if err != nil { if strings.Contains(err.Error(), "tls: oversized") { - err = errwrap.Wrapf( - "{{err}}\n\n"+ - "This error usually means that the server is running with TLS disabled\n"+ - "but the client is configured to use TLS. Please either enable TLS\n"+ - "on the server or run the client with -address set to an address\n"+ - "that uses the http protocol:\n\n"+ - " vault -address http://
\n\n"+ - "You can also set the VAULT_ADDR environment variable:\n\n\n"+ - " VAULT_ADDR=http://
vault \n\n"+ - "where
is replaced by the actual address to the server.", - err) + err = errwrap.Wrapf("{{err}}\n\n"+TLSErrorString, err) } return result, err } @@ -1176,6 +1351,131 @@ START: return result, nil } +// httpRequestWithContext avoids the use of the go-retryable library found in RawRequestWithContext and is +// useful when making calls where a net/http client is desirable. A single redirect (status code 301, 302, +// or 307) will be followed but all retry and timeout logic is the responsibility of the caller as is +// closing the Response body. +func (c *Client) httpRequestWithContext(ctx context.Context, r *Request) (*Response, error) { + req, err := http.NewRequestWithContext(ctx, r.Method, r.URL.RequestURI(), r.Body) + if err != nil { + return nil, err + } + + c.modifyLock.RLock() + token := c.token + + c.config.modifyLock.RLock() + limiter := c.config.Limiter + httpClient := c.config.HttpClient + outputCurlString := c.config.OutputCurlString + outputPolicy := c.config.OutputPolicy + + // add headers + if c.headers != nil { + for header, vals := range c.headers { + for _, val := range vals { + req.Header.Add(header, val) + } + } + // explicitly set the namespace header to current client + if ns := c.headers.Get(consts.NamespaceHeaderName); ns != "" { + r.Headers.Set(consts.NamespaceHeaderName, ns) + } + } + + c.config.modifyLock.RUnlock() + c.modifyLock.RUnlock() + + // OutputCurlString and OutputPolicy logic rely on the request type to be retryable.Request + if outputCurlString { + return nil, fmt.Errorf("output-curl-string is not implemented for this request") + } + if outputPolicy { + return nil, fmt.Errorf("output-policy is not implemented for this request") + } + + req.URL.User = r.URL.User + req.URL.Scheme = r.URL.Scheme + req.URL.Host = r.URL.Host + req.Host = r.URL.Host + + if len(r.ClientToken) != 0 { + req.Header.Set(consts.AuthHeaderName, r.ClientToken) + } + + if len(r.WrapTTL) != 0 { + req.Header.Set("X-Vault-Wrap-TTL", r.WrapTTL) + } + + if len(r.MFAHeaderVals) != 0 { + for _, mfaHeaderVal := range r.MFAHeaderVals { + req.Header.Add("X-Vault-MFA", mfaHeaderVal) + } + } + + if r.PolicyOverride { + req.Header.Set("X-Vault-Policy-Override", "true") + } + + if limiter != nil { + limiter.Wait(ctx) + } + + // check the token before potentially erroring from the API + if err := validateToken(token); err != nil { + return nil, err + } + + var result *Response + + resp, err := httpClient.Do(req) + + if resp != nil { + result = &Response{Response: resp} + } + + if err != nil { + if strings.Contains(err.Error(), "tls: oversized") { + err = errwrap.Wrapf("{{err}}\n\n"+TLSErrorString, err) + } + return result, err + } + + // Check for a redirect, only allowing for a single redirect + if resp.StatusCode == 301 || resp.StatusCode == 302 || resp.StatusCode == 307 { + // Parse the updated location + respLoc, err := resp.Location() + if err != nil { + return result, fmt.Errorf("redirect failed: %s", err) + } + + // Ensure a protocol downgrade doesn't happen + if req.URL.Scheme == "https" && respLoc.Scheme != "https" { + return result, fmt.Errorf("redirect would cause protocol downgrade") + } + + // Update the request + req.URL = respLoc + + // Reset the request body if any + if err := r.ResetJSONBody(); err != nil { + return result, fmt.Errorf("redirect failed: %s", err) + } + + // Retry the request + resp, err = httpClient.Do(req) + if err != nil { + return result, fmt.Errorf("redirect failed: %s", err) + } + } + + if err := result.Error(); err != nil { + return nil, err + } + + return result, nil +} + type ( RequestCallback func(*Request) ResponseCallback func(*Response) @@ -1205,6 +1505,17 @@ func (c *Client) WithResponseCallbacks(callbacks ...ResponseCallback) *Client { return &c2 } +// withConfiguredTimeout wraps the context with a timeout from the client configuration. +func (c *Client) withConfiguredTimeout(ctx context.Context) (context.Context, context.CancelFunc) { + timeout := c.ClientTimeout() + + if timeout > 0 { + return context.WithTimeout(ctx, timeout) + } + + return ctx, func() {} +} + // RecordState returns a response callback that will record the state returned // by Vault in a response header. func RecordState(state *string) ResponseCallback { @@ -1330,7 +1641,7 @@ func ParseReplicationState(raw string, hmacKey []byte) (*logical.WALState, error // conjunction with RequireState. func ForwardInconsistent() RequestCallback { return func(req *Request) { - req.Headers.Set("X-Vault-Inconsistent", "forward-active-node") + req.Headers.Set(HeaderInconsistent, "forward-active-node") } } @@ -1339,7 +1650,7 @@ func ForwardInconsistent() RequestCallback { // This feature must be enabled in Vault's configuration. func ForwardAlways() RequestCallback { return func(req *Request) { - req.Headers.Set("X-Vault-Forward", "active-node") + req.Headers.Set(HeaderForward, "active-node") } } @@ -1393,3 +1704,14 @@ func (w *replicationStateStore) states() []string { copy(c, w.store) return c } + +// validateToken will check for non-printable characters to prevent a call that will fail at the api +func validateToken(t string) error { + idx := strings.IndexFunc(t, func(c rune) bool { + return !unicode.IsPrint(c) + }) + if idx != -1 { + return fmt.Errorf("configured Vault token contains non-printable characters and cannot be used") + } + return nil +} diff --git a/vendor/github.com/hashicorp/vault/api/go.mod b/vendor/github.com/hashicorp/vault/api/go.mod deleted file mode 100644 index 49ba032d0c..0000000000 --- a/vendor/github.com/hashicorp/vault/api/go.mod +++ /dev/null @@ -1,24 +0,0 @@ -module github.com/hashicorp/vault/api - -go 1.13 - -replace github.com/hashicorp/vault/sdk => ../sdk - -require ( - github.com/cenkalti/backoff/v3 v3.0.0 - github.com/frankban/quicktest v1.13.0 // indirect - github.com/go-test/deep v1.0.2 - github.com/hashicorp/errwrap v1.1.0 - github.com/hashicorp/go-cleanhttp v0.5.2 - github.com/hashicorp/go-hclog v0.16.2 - github.com/hashicorp/go-multierror v1.1.1 - github.com/hashicorp/go-retryablehttp v0.6.6 - github.com/hashicorp/go-rootcerts v1.0.2 - github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 - github.com/hashicorp/hcl v1.0.0 - github.com/hashicorp/vault/sdk v0.3.0 - github.com/mitchellh/mapstructure v1.4.2 - golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 - golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 - gopkg.in/square/go-jose.v2 v2.5.1 -) diff --git a/vendor/github.com/hashicorp/vault/api/go.sum b/vendor/github.com/hashicorp/vault/api/go.sum deleted file mode 100644 index 61498240dd..0000000000 --- a/vendor/github.com/hashicorp/vault/api/go.sum +++ /dev/null @@ -1,328 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/armon/go-metrics v0.3.9 h1:O2sNqxBdvq8Eq5xmzljcYzAORli6RWCvEym4cJf9m18= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/cenkalti/backoff/v3 v3.0.0 h1:ske+9nBpD9qZsTBoF41nW5L+AIuFBKMeze18XQ3eG1c= -github.com/cenkalti/backoff/v3 v3.0.0/go.mod h1:cIeZDE3IrqwwJl6VUwCN6trj1oXrTS4rc0ij+ULvLYs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch/v5 v5.5.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= -github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= -github.com/frankban/quicktest v1.10.0/go.mod h1:ui7WezCLWMWxVWr1GETZY3smRy0G4KWq9vcPtJmFl7Y= -github.com/frankban/quicktest v1.13.0 h1:yNZif1OkDfNoDfb9zZa9aXIpejNR4F23Wely0c+Qdqk= -github.com/frankban/quicktest v1.13.0/go.mod h1:qLE0fzW0VuyUAJgPU19zByoIr0HtCHN/r/VLSOOIySU= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-asn1-ber/asn1-ber v1.3.1/go.mod h1:hEBeB/ic+5LoWskz+yKT7vGhhPYkProFKoKdwZRWMe0= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-ldap/ldap/v3 v3.1.10/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-test/deep v1.0.2 h1:onZX1rnHT3Wv6cqNgYyFOOlgVKJrksuCMCRvJStbMYw= -github.com/go-test/deep v1.0.2/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v0.14.1/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2 h1:K4ev2ib4LdQETX5cSZBG0DVLk1jwGqSPXBjdah3veNs= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-kms-wrapping/entropy v0.1.0/go.mod h1:d1g9WGtAunDNpek8jUIEJnBlbgKS1N2Q61QkHiZyR1g= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.4.3 h1:DXmvivbWD5qdiBts9TpBC7BYL1Aia5sxbRgQB+v6UZM= -github.com/hashicorp/go-plugin v1.4.3/go.mod h1:5fGEH17QVwTTcR0zV7yhDPLLmFX9YSZ38b18Udy6vYQ= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-retryablehttp v0.6.6 h1:HJunrbHTDDbBb/ay4kxa1n+dLmttUlnP3V9oNE4hmsM= -github.com/hashicorp/go-retryablehttp v0.6.6/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-secure-stdlib/base62 v0.1.1/go.mod h1:EdWO6czbmthiwZ3/PUsDV+UD1D5IRU4ActiaWGwt0Yw= -github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 h1:cCRo8gK7oq6A2L6LICkUZ+/a5rLiRXFMf1Qd4xSwxTc= -github.com/hashicorp/go-secure-stdlib/mlock v0.1.1/go.mod h1:zq93CJChV6L9QTfGKtfBxKqD7BqqXx5O04A/ns2p5+I= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 h1:78ki3QBevHwYrVxnyVeaEz+7WtifHhauYF23es/0KlI= -github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1/go.mod h1:QmrqtbKuxxSWTN3ETMPuB+VtEiBJ/A9XhoYGv8E1uD8= -github.com/hashicorp/go-secure-stdlib/password v0.1.1/go.mod h1:9hH302QllNwu1o2TGYtSk8I8kTAN0ca1EHpwhm5Mmzo= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 h1:nd0HIW15E6FG1MsnArYaHfuw9C2zgzM8LxkG5Ty/788= -github.com/hashicorp/go-secure-stdlib/strutil v0.1.1/go.mod h1:gKOamz3EwoIoJq7mlMIRBpVTAUn8qPCrEclOKKWhD3U= -github.com/hashicorp/go-secure-stdlib/tlsutil v0.1.1/go.mod h1:l8slYwnJA26yBz+ErHpp2IRCLr0vuOMGBORIz4rRiAs= -github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc= -github.com/hashicorp/go-sockaddr v1.0.2/go.mod h1:rB4wwRAUzs07qva3c5SdrY/NEtAUjGlgmH/UkBUC97A= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2IGE= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0 h1:3vNe/fWF5CBgRIguda1meWhsZHy3m8gCJ5wx+dIzX/E= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb h1:b5rjCoWHc7eqmAS4/qyk21ZsHyb6Mxv/jykxvNTkU4M= -github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb/go.mod h1:+NfK9FKeTrX5uv1uIXGdwYDTeHna2qgaIlx54MXqjAM= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE= -github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/keybase/go-crypto v0.0.0-20190403132359-d65b6b94177f/go.mod h1:ghbZscTyKdM07+Fw3KSi0hcJm+AlEUWj8QLlPtijN/M= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0 h1:Laisrj+bAB6b/yJwB5Bt3ITZhGJdqmxquMKeZ+mmkFQ= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v0.0.0-20171004221916-a61a99592b77/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2 h1:6h7AQ0yhTcIsmFmnAwQls75jp2Gzs4iB8W7pjMO+rqo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pierrec/lz4 v2.5.2+incompatible h1:WCjObylUIOlKy/+7Abdn34TLIkXiA4UWUMhxq9m9ZXI= -github.com/pierrec/lz4 v2.5.2+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= -github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 h1:/UOmuWzQfxxo9UtlXMwuQU8CMgg1eZXqTRwkSQJWKOI= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180530234432-1e491301e022/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1 h1:NusfzzA6yGQ+ua51ck7E3omNUX/JuqbFSaRGqU8CcLI= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.41.0 h1:f+PlOh7QV4iIJkPrx5NQ7qaNGFQ3OTse67yaDHfju4E= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= -gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/hashicorp/vault/api/help.go b/vendor/github.com/hashicorp/vault/api/help.go index 321bd597c1..0988ebcd1f 100644 --- a/vendor/github.com/hashicorp/vault/api/help.go +++ b/vendor/github.com/hashicorp/vault/api/help.go @@ -3,16 +3,23 @@ package api import ( "context" "fmt" + "net/http" ) -// Help reads the help information for the given path. +// Help wraps HelpWithContext using context.Background. func (c *Client) Help(path string) (*Help, error) { - r := c.NewRequest("GET", fmt.Sprintf("/v1/%s", path)) - r.Params.Add("help", "1") + return c.HelpWithContext(context.Background(), path) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +// HelpWithContext reads the help information for the given path. +func (c *Client) HelpWithContext(ctx context.Context, path string) (*Help, error) { + ctx, cancelFunc := c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.RawRequestWithContext(ctx, r) + + r := c.NewRequest(http.MethodGet, fmt.Sprintf("/v1/%s", path)) + r.Params.Add("help", "1") + + resp, err := c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go b/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go index b1d81332f1..f06263526f 100644 --- a/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go +++ b/vendor/github.com/hashicorp/vault/api/lifetime_watcher.go @@ -113,7 +113,9 @@ type LifetimeWatcherInput struct { // The new TTL, in seconds, that should be set on the lease. The TTL set // here may or may not be honored by the vault server, based on Vault - // configuration or any associated max TTL values. + // configuration or any associated max TTL values. If specified, the + // minimum of this value and the remaining lease duration will be used + // for grace period calculations. Increment int // RenewBehavior controls what happens when a renewal errors or the @@ -225,7 +227,7 @@ func (r *LifetimeWatcher) Start() { r.doneCh <- r.doRenew() } -// Renew is for comnpatibility with the legacy api.Renewer. Calling Renew +// Renew is for compatibility with the legacy api.Renewer. Calling Renew // simply chains to Start. func (r *LifetimeWatcher) Renew() { r.Start() @@ -257,7 +259,7 @@ func (r *LifetimeWatcher) doRenewWithOptions(tokenMode bool, nonRenewable bool, initialTime := time.Now() priorDuration := time.Duration(initLeaseDuration) * time.Second - r.calculateGrace(priorDuration) + r.calculateGrace(priorDuration, time.Duration(r.increment)*time.Second) var errorBackoff backoff.BackOff for { @@ -345,7 +347,7 @@ func (r *LifetimeWatcher) doRenewWithOptions(tokenMode bool, nonRenewable bool, // extending. Once it stops extending, we've hit the max and need to // rely on the grace duration. if remainingLeaseDuration > priorDuration { - r.calculateGrace(remainingLeaseDuration) + r.calculateGrace(remainingLeaseDuration, time.Duration(r.increment)*time.Second) } priorDuration = remainingLeaseDuration @@ -373,16 +375,21 @@ func (r *LifetimeWatcher) doRenewWithOptions(tokenMode bool, nonRenewable bool, } } -// calculateGrace calculates the grace period based on a reasonable set of -// assumptions given the total lease time; it also adds some jitter to not have -// clients be in sync. -func (r *LifetimeWatcher) calculateGrace(leaseDuration time.Duration) { - if leaseDuration <= 0 { +// calculateGrace calculates the grace period based on the minimum of the +// remaining lease duration and the token increment value; it also adds some +// jitter to not have clients be in sync. +func (r *LifetimeWatcher) calculateGrace(leaseDuration, increment time.Duration) { + minDuration := leaseDuration + if minDuration > increment && increment > 0 { + minDuration = increment + } + + if minDuration <= 0 { r.grace = 0 return } - leaseNanos := float64(leaseDuration.Nanoseconds()) + leaseNanos := float64(minDuration.Nanoseconds()) jitterMax := 0.1 * leaseNanos // For a given lease duration, we want to allow 80-90% of that to elapse, diff --git a/vendor/github.com/hashicorp/vault/api/logical.go b/vendor/github.com/hashicorp/vault/api/logical.go index 68f3e91005..747b9bc12c 100644 --- a/vendor/github.com/hashicorp/vault/api/logical.go +++ b/vendor/github.com/hashicorp/vault/api/logical.go @@ -31,7 +31,7 @@ var ( return os.Getenv(EnvVaultWrapTTL) } - if (operation == "PUT" || operation == "POST") && path == "sys/wrapping/wrap" { + if (operation == http.MethodPut || operation == http.MethodPost) && path == "sys/wrapping/wrap" { return DefaultWrappingTTL } @@ -50,11 +50,22 @@ func (c *Client) Logical() *Logical { } func (c *Logical) Read(path string) (*Secret, error) { - return c.ReadWithData(path, nil) + return c.ReadWithDataWithContext(context.Background(), path, nil) +} + +func (c *Logical) ReadWithContext(ctx context.Context, path string) (*Secret, error) { + return c.ReadWithDataWithContext(ctx, path, nil) } func (c *Logical) ReadWithData(path string, data map[string][]string) (*Secret, error) { - r := c.c.NewRequest("GET", "/v1/"+path) + return c.ReadWithDataWithContext(context.Background(), path, data) +} + +func (c *Logical) ReadWithDataWithContext(ctx context.Context, path string, data map[string][]string) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodGet, "/v1/"+path) var values url.Values for k, v := range data { @@ -70,9 +81,7 @@ func (c *Logical) ReadWithData(path string, data map[string][]string) (*Secret, r.Params = values } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if resp != nil { defer resp.Body.Close() } @@ -98,15 +107,20 @@ func (c *Logical) ReadWithData(path string, data map[string][]string) (*Secret, } func (c *Logical) List(path string) (*Secret, error) { + return c.ListWithContext(context.Background(), path) +} + +func (c *Logical) ListWithContext(ctx context.Context, path string) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + r := c.c.NewRequest("LIST", "/v1/"+path) // Set this for broader compatibility, but we use LIST above to be able to // handle the wrapping lookup function - r.Method = "GET" + r.Method = http.MethodGet r.Params.Set("list", "true") - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if resp != nil { defer resp.Body.Close() } @@ -132,10 +146,11 @@ func (c *Logical) List(path string) (*Secret, error) { } func (c *Logical) Write(path string, data map[string]interface{}) (*Secret, error) { - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() + return c.WriteWithContext(context.Background(), path, data) +} - r := c.c.NewRequest("PUT", "/v1/"+path) +func (c *Logical) WriteWithContext(ctx context.Context, path string, data map[string]interface{}) (*Secret, error) { + r := c.c.NewRequest(http.MethodPut, "/v1/"+path) if err := r.SetJSONBody(data); err != nil { return nil, err } @@ -144,10 +159,8 @@ func (c *Logical) Write(path string, data map[string]interface{}) (*Secret, erro } func (c *Logical) JSONMergePatch(ctx context.Context, path string, data map[string]interface{}) (*Secret, error) { - r := c.c.NewRequest("PATCH", "/v1/"+path) - r.Headers = http.Header{ - "Content-Type": []string{"application/merge-patch+json"}, - } + r := c.c.NewRequest(http.MethodPatch, "/v1/"+path) + r.Headers.Set("Content-Type", "application/merge-patch+json") if err := r.SetJSONBody(data); err != nil { return nil, err } @@ -156,14 +169,21 @@ func (c *Logical) JSONMergePatch(ctx context.Context, path string, data map[stri } func (c *Logical) WriteBytes(path string, data []byte) (*Secret, error) { - r := c.c.NewRequest("PUT", "/v1/"+path) + return c.WriteBytesWithContext(context.Background(), path, data) +} + +func (c *Logical) WriteBytesWithContext(ctx context.Context, path string, data []byte) (*Secret, error) { + r := c.c.NewRequest(http.MethodPut, "/v1/"+path) r.BodyBytes = data - return c.write(context.Background(), path, r) + return c.write(ctx, path, r) } func (c *Logical) write(ctx context.Context, path string, request *Request) (*Secret, error) { - resp, err := c.c.RawRequestWithContext(ctx, request) + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + resp, err := c.c.rawRequestWithContext(ctx, request) if resp != nil { defer resp.Body.Close() } @@ -188,11 +208,22 @@ func (c *Logical) write(ctx context.Context, path string, request *Request) (*Se } func (c *Logical) Delete(path string) (*Secret, error) { - return c.DeleteWithData(path, nil) + return c.DeleteWithContext(context.Background(), path) +} + +func (c *Logical) DeleteWithContext(ctx context.Context, path string) (*Secret, error) { + return c.DeleteWithDataWithContext(ctx, path, nil) } func (c *Logical) DeleteWithData(path string, data map[string][]string) (*Secret, error) { - r := c.c.NewRequest("DELETE", "/v1/"+path) + return c.DeleteWithDataWithContext(context.Background(), path, data) +} + +func (c *Logical) DeleteWithDataWithContext(ctx context.Context, path string, data map[string][]string) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodDelete, "/v1/"+path) var values url.Values for k, v := range data { @@ -208,9 +239,7 @@ func (c *Logical) DeleteWithData(path string, data map[string][]string) (*Secret r.Params = values } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if resp != nil { defer resp.Body.Close() } @@ -235,6 +264,13 @@ func (c *Logical) DeleteWithData(path string, data map[string][]string) (*Secret } func (c *Logical) Unwrap(wrappingToken string) (*Secret, error) { + return c.UnwrapWithContext(context.Background(), wrappingToken) +} + +func (c *Logical) UnwrapWithContext(ctx context.Context, wrappingToken string) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + var data map[string]interface{} wt := strings.TrimSpace(wrappingToken) if wrappingToken != "" { @@ -247,14 +283,12 @@ func (c *Logical) Unwrap(wrappingToken string) (*Secret, error) { } } - r := c.c.NewRequest("PUT", "/v1/sys/wrapping/unwrap") + r := c.c.NewRequest(http.MethodPut, "/v1/sys/wrapping/unwrap") if err := r.SetJSONBody(data); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if resp != nil { defer resp.Body.Close() } @@ -289,7 +323,7 @@ func (c *Logical) Unwrap(wrappingToken string) (*Secret, error) { c.c.SetToken(wrappingToken) } - secret, err = c.Read(wrappedResponseLocation) + secret, err = c.ReadWithContext(ctx, wrappedResponseLocation) if err != nil { return nil, errwrap.Wrapf(fmt.Sprintf("error reading %q: {{err}}", wrappedResponseLocation), err) } diff --git a/vendor/github.com/hashicorp/vault/api/output_policy.go b/vendor/github.com/hashicorp/vault/api/output_policy.go new file mode 100644 index 0000000000..85d1617e5e --- /dev/null +++ b/vendor/github.com/hashicorp/vault/api/output_policy.go @@ -0,0 +1,82 @@ +package api + +import ( + "fmt" + "net/http" + "net/url" + "strings" +) + +const ( + ErrOutputPolicyRequest = "output a policy, please" +) + +var LastOutputPolicyError *OutputPolicyError + +type OutputPolicyError struct { + method string + path string + finalHCLString string +} + +func (d *OutputPolicyError) Error() string { + if d.finalHCLString == "" { + p, err := d.buildSamplePolicy() + if err != nil { + return err.Error() + } + d.finalHCLString = p + } + + return ErrOutputPolicyRequest +} + +func (d *OutputPolicyError) HCLString() (string, error) { + if d.finalHCLString == "" { + p, err := d.buildSamplePolicy() + if err != nil { + return "", err + } + d.finalHCLString = p + } + return d.finalHCLString, nil +} + +// Builds a sample policy document from the request +func (d *OutputPolicyError) buildSamplePolicy() (string, error) { + var capabilities []string + switch d.method { + case http.MethodGet, "": + capabilities = append(capabilities, "read") + case http.MethodPost, http.MethodPut: + capabilities = append(capabilities, "create") + capabilities = append(capabilities, "update") + case http.MethodPatch: + capabilities = append(capabilities, "patch") + case http.MethodDelete: + capabilities = append(capabilities, "delete") + case "LIST": + capabilities = append(capabilities, "list") + } + + // sanitize, then trim the Vault address and v1 from the front of the path + path, err := url.PathUnescape(d.path) + if err != nil { + return "", fmt.Errorf("failed to unescape request URL characters: %v", err) + } + + // determine whether to add sudo capability + if IsSudoPath(path) { + capabilities = append(capabilities, "sudo") + } + + // the OpenAPI response has a / in front of each path, + // but policies need the path without that leading slash + path = strings.TrimLeft(path, "/") + + capStr := strings.Join(capabilities, `", "`) + return fmt.Sprintf( + `path "%s" { + capabilities = ["%s"] +}`, path, capStr), nil +} diff --git a/vendor/github.com/hashicorp/vault/api/output_string.go b/vendor/github.com/hashicorp/vault/api/output_string.go index 8b654ad820..b8c396ebc0 100644 --- a/vendor/github.com/hashicorp/vault/api/output_string.go +++ b/vendor/github.com/hashicorp/vault/api/output_string.go @@ -2,6 +2,7 @@ package api import ( "fmt" + "net/http" "strings" retryablehttp "github.com/hashicorp/go-retryablehttp" @@ -15,43 +16,71 @@ var LastOutputStringError *OutputStringError type OutputStringError struct { *retryablehttp.Request - TLSSkipVerify bool - parsingError error - parsedCurlString string + TLSSkipVerify bool + ClientCACert, ClientCAPath string + ClientCert, ClientKey string + finalCurlString string } func (d *OutputStringError) Error() string { - if d.parsedCurlString == "" { - d.parseRequest() - if d.parsingError != nil { - return d.parsingError.Error() + if d.finalCurlString == "" { + cs, err := d.buildCurlString() + if err != nil { + return err.Error() } + d.finalCurlString = cs } return ErrOutputStringRequest } -func (d *OutputStringError) parseRequest() { +func (d *OutputStringError) CurlString() (string, error) { + if d.finalCurlString == "" { + cs, err := d.buildCurlString() + if err != nil { + return "", err + } + d.finalCurlString = cs + } + return d.finalCurlString, nil +} + +func (d *OutputStringError) buildCurlString() (string, error) { body, err := d.Request.BodyBytes() if err != nil { - d.parsingError = err - return + return "", err } // Build cURL string - d.parsedCurlString = "curl " + finalCurlString := "curl " if d.TLSSkipVerify { - d.parsedCurlString += "--insecure " + finalCurlString += "--insecure " + } + if d.Request.Method != http.MethodGet { + finalCurlString = fmt.Sprintf("%s-X %s ", finalCurlString, d.Request.Method) + } + if d.ClientCACert != "" { + clientCACert := strings.Replace(d.ClientCACert, "'", "'\"'\"'", -1) + finalCurlString = fmt.Sprintf("%s--cacert '%s' ", finalCurlString, clientCACert) } - if d.Request.Method != "GET" { - d.parsedCurlString = fmt.Sprintf("%s-X %s ", d.parsedCurlString, d.Request.Method) + if d.ClientCAPath != "" { + clientCAPath := strings.Replace(d.ClientCAPath, "'", "'\"'\"'", -1) + finalCurlString = fmt.Sprintf("%s--capath '%s' ", finalCurlString, clientCAPath) + } + if d.ClientCert != "" { + clientCert := strings.Replace(d.ClientCert, "'", "'\"'\"'", -1) + finalCurlString = fmt.Sprintf("%s--cert '%s' ", finalCurlString, clientCert) + } + if d.ClientKey != "" { + clientKey := strings.Replace(d.ClientKey, "'", "'\"'\"'", -1) + finalCurlString = fmt.Sprintf("%s--key '%s' ", finalCurlString, clientKey) } for k, v := range d.Request.Header { for _, h := range v { if strings.ToLower(k) == "x-vault-token" { h = `$(vault print token)` } - d.parsedCurlString = fmt.Sprintf("%s-H \"%s: %s\" ", d.parsedCurlString, k, h) + finalCurlString = fmt.Sprintf("%s-H \"%s: %s\" ", finalCurlString, k, h) } } @@ -59,15 +88,8 @@ func (d *OutputStringError) parseRequest() { // We need to escape single quotes since that's what we're using to // quote the body escapedBody := strings.Replace(string(body), "'", "'\"'\"'", -1) - d.parsedCurlString = fmt.Sprintf("%s-d '%s' ", d.parsedCurlString, escapedBody) + finalCurlString = fmt.Sprintf("%s-d '%s' ", finalCurlString, escapedBody) } - d.parsedCurlString = fmt.Sprintf("%s%s", d.parsedCurlString, d.Request.URL.String()) -} - -func (d *OutputStringError) CurlString() string { - if d.parsedCurlString == "" { - d.parseRequest() - } - return d.parsedCurlString + return fmt.Sprintf("%s%s", finalCurlString, d.Request.URL.String()), nil } diff --git a/vendor/github.com/hashicorp/vault/api/plugin_helpers.go b/vendor/github.com/hashicorp/vault/api/plugin_helpers.go index c2978b388f..e8ceb9c2fd 100644 --- a/vendor/github.com/hashicorp/vault/api/plugin_helpers.go +++ b/vendor/github.com/hashicorp/vault/api/plugin_helpers.go @@ -1,6 +1,7 @@ package api import ( + "context" "crypto/tls" "crypto/x509" "encoding/base64" @@ -8,6 +9,7 @@ import ( "flag" "net/url" "os" + "regexp" squarejwt "gopkg.in/square/go-jose.v2/jwt" @@ -22,6 +24,49 @@ var ( // PluginUnwrapTokenEnv is the ENV name used to pass unwrap tokens to the // plugin. PluginUnwrapTokenEnv = "VAULT_UNWRAP_TOKEN" + + // sudoPaths is a map containing the paths that require a token's policy + // to have the "sudo" capability. The keys are the paths as strings, in + // the same format as they are returned by the OpenAPI spec. The values + // are the regular expressions that can be used to test whether a given + // path matches that path or not (useful specifically for the paths that + // contain templated fields.) + sudoPaths = map[string]*regexp.Regexp{ + "/auth/token/accessors/": regexp.MustCompile(`^/auth/token/accessors/$`), + "/pki/root": regexp.MustCompile(`^/pki/root$`), + "/pki/root/sign-self-issued": regexp.MustCompile(`^/pki/root/sign-self-issued$`), + "/sys/audit": regexp.MustCompile(`^/sys/audit$`), + "/sys/audit/{path}": regexp.MustCompile(`^/sys/audit/.+$`), + "/sys/auth/{path}": regexp.MustCompile(`^/sys/auth/.+$`), + "/sys/auth/{path}/tune": regexp.MustCompile(`^/sys/auth/.+/tune$`), + "/sys/config/auditing/request-headers": regexp.MustCompile(`^/sys/config/auditing/request-headers$`), + "/sys/config/auditing/request-headers/{header}": regexp.MustCompile(`^/sys/config/auditing/request-headers/.+$`), + "/sys/config/cors": regexp.MustCompile(`^/sys/config/cors$`), + "/sys/config/ui/headers/": regexp.MustCompile(`^/sys/config/ui/headers/$`), + "/sys/config/ui/headers/{header}": regexp.MustCompile(`^/sys/config/ui/headers/.+$`), + "/sys/leases": regexp.MustCompile(`^/sys/leases$`), + "/sys/leases/lookup/": regexp.MustCompile(`^/sys/leases/lookup/$`), + "/sys/leases/lookup/{prefix}": regexp.MustCompile(`^/sys/leases/lookup/.+$`), + "/sys/leases/revoke-force/{prefix}": regexp.MustCompile(`^/sys/leases/revoke-force/.+$`), + "/sys/leases/revoke-prefix/{prefix}": regexp.MustCompile(`^/sys/leases/revoke-prefix/.+$`), + "/sys/plugins/catalog/{name}": regexp.MustCompile(`^/sys/plugins/catalog/[^/]+$`), + "/sys/plugins/catalog/{type}": regexp.MustCompile(`^/sys/plugins/catalog/[\w-]+$`), + "/sys/plugins/catalog/{type}/{name}": regexp.MustCompile(`^/sys/plugins/catalog/[\w-]+/[^/]+$`), + "/sys/raw": regexp.MustCompile(`^/sys/raw$`), + "/sys/raw/{path}": regexp.MustCompile(`^/sys/raw/.+$`), + "/sys/remount": regexp.MustCompile(`^/sys/remount$`), + "/sys/revoke-force/{prefix}": regexp.MustCompile(`^/sys/revoke-force/.+$`), + "/sys/revoke-prefix/{prefix}": regexp.MustCompile(`^/sys/revoke-prefix/.+$`), + "/sys/rotate": regexp.MustCompile(`^/sys/rotate$`), + + // enterprise-only paths + "/sys/replication/dr/primary/secondary-token": regexp.MustCompile(`^/sys/replication/dr/primary/secondary-token$`), + "/sys/replication/performance/primary/secondary-token": regexp.MustCompile(`^/sys/replication/performance/primary/secondary-token$`), + "/sys/replication/primary/secondary-token": regexp.MustCompile(`^/sys/replication/primary/secondary-token$`), + "/sys/replication/reindex": regexp.MustCompile(`^/sys/replication/reindex$`), + "/sys/storage/raft/snapshot-auto/config/": regexp.MustCompile(`^/sys/storage/raft/snapshot-auto/config/$`), + "/sys/storage/raft/snapshot-auto/config/{name}": regexp.MustCompile(`^/sys/storage/raft/snapshot-auto/config/[^/]+$`), + } ) // PluginAPIClientMeta is a helper that plugins can use to configure TLS connections @@ -67,9 +112,14 @@ func (f *PluginAPIClientMeta) GetTLSConfig() *TLSConfig { return nil } -// VaultPluginTLSProvider is run inside a plugin and retrieves the response -// wrapped TLS certificate from vault. It returns a configured TLS Config. +// VaultPluginTLSProvider wraps VaultPluginTLSProviderContext using context.Background. func VaultPluginTLSProvider(apiTLSConfig *TLSConfig) func() (*tls.Config, error) { + return VaultPluginTLSProviderContext(context.Background(), apiTLSConfig) +} + +// VaultPluginTLSProviderContext is run inside a plugin and retrieves the response +// wrapped TLS certificate from vault. It returns a configured TLS Config. +func VaultPluginTLSProviderContext(ctx context.Context, apiTLSConfig *TLSConfig) func() (*tls.Config, error) { if os.Getenv(PluginMetadataModeEnv) == "true" { return nil } @@ -121,7 +171,7 @@ func VaultPluginTLSProvider(apiTLSConfig *TLSConfig) func() (*tls.Config, error) // Reset token value to make sure nothing has been set by default client.ClearToken() - secret, err := client.Logical().Unwrap(unwrapToken) + secret, err := client.Logical().UnwrapWithContext(ctx, unwrapToken) if err != nil { return nil, errwrap.Wrapf("error during token unwrap request: {{err}}", err) } @@ -182,8 +232,32 @@ func VaultPluginTLSProvider(apiTLSConfig *TLSConfig) func() (*tls.Config, error) Certificates: []tls.Certificate{cert}, ServerName: serverCert.Subject.CommonName, } - tlsConfig.BuildNameToCertificate() return tlsConfig, nil } } + +func SudoPaths() map[string]*regexp.Regexp { + return sudoPaths +} + +// Determine whether the given path requires the sudo capability +func IsSudoPath(path string) bool { + // Return early if the path is any of the non-templated sudo paths. + if _, ok := sudoPaths[path]; ok { + return true + } + + // Some sudo paths have templated fields in them. + // (e.g. /sys/revoke-prefix/{prefix}) + // The values in the sudoPaths map are actually regular expressions, + // so we can check if our path matches against them. + for _, sudoPathRegexp := range sudoPaths { + match := sudoPathRegexp.MatchString(path) + if match { + return true + } + } + + return false +} diff --git a/vendor/github.com/hashicorp/vault/api/secret.go b/vendor/github.com/hashicorp/vault/api/secret.go index 64865d0ba1..77e3ee9a9e 100644 --- a/vendor/github.com/hashicorp/vault/api/secret.go +++ b/vendor/github.com/hashicorp/vault/api/secret.go @@ -9,6 +9,7 @@ import ( "github.com/hashicorp/errwrap" "github.com/hashicorp/go-secure-stdlib/parseutil" "github.com/hashicorp/vault/sdk/helper/jsonutil" + "github.com/hashicorp/vault/sdk/logical" ) // Secret is the structure returned for every secret within Vault. @@ -93,12 +94,7 @@ func (s *Secret) TokenRemainingUses() (int, error) { return -1, nil } - uses, err := parseutil.ParseInt(s.Data["num_uses"]) - if err != nil { - return 0, err - } - - return int(uses), nil + return parseutil.SafeParseInt(s.Data["num_uses"]) } // TokenPolicies returns the standardized list of policies for the given secret. @@ -297,6 +293,8 @@ type SecretAuth struct { LeaseDuration int `json:"lease_duration"` Renewable bool `json:"renewable"` + + MFARequirement *logical.MFARequirement `json:"mfa_requirement"` } // ParseSecret is used to parse a secret value from JSON from an io.Reader. diff --git a/vendor/github.com/hashicorp/vault/api/ssh.go b/vendor/github.com/hashicorp/vault/api/ssh.go index 837eac4ff7..b832e27482 100644 --- a/vendor/github.com/hashicorp/vault/api/ssh.go +++ b/vendor/github.com/hashicorp/vault/api/ssh.go @@ -3,6 +3,7 @@ package api import ( "context" "fmt" + "net/http" ) // SSH is used to return a client to invoke operations on SSH backend. @@ -24,16 +25,22 @@ func (c *Client) SSHWithMountPoint(mountPoint string) *SSH { } } -// Credential invokes the SSH backend API to create a credential to establish an SSH session. +// Credential wraps CredentialWithContext using context.Background. func (c *SSH) Credential(role string, data map[string]interface{}) (*Secret, error) { - r := c.c.NewRequest("PUT", fmt.Sprintf("/v1/%s/creds/%s", c.MountPoint, role)) + return c.CredentialWithContext(context.Background(), role, data) +} + +// CredentialWithContext invokes the SSH backend API to create a credential to establish an SSH session. +func (c *SSH) CredentialWithContext(ctx context.Context, role string, data map[string]interface{}) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, fmt.Sprintf("/v1/%s/creds/%s", c.MountPoint, role)) if err := r.SetJSONBody(data); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -42,17 +49,23 @@ func (c *SSH) Credential(role string, data map[string]interface{}) (*Secret, err return ParseSecret(resp.Body) } -// SignKey signs the given public key and returns a signed public key to pass -// along with the SSH request. +// SignKey wraps SignKeyWithContext using context.Background. func (c *SSH) SignKey(role string, data map[string]interface{}) (*Secret, error) { - r := c.c.NewRequest("PUT", fmt.Sprintf("/v1/%s/sign/%s", c.MountPoint, role)) + return c.SignKeyWithContext(context.Background(), role, data) +} + +// SignKeyWithContext signs the given public key and returns a signed public key to pass +// along with the SSH request. +func (c *SSH) SignKeyWithContext(ctx context.Context, role string, data map[string]interface{}) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, fmt.Sprintf("/v1/%s/sign/%s", c.MountPoint, role)) if err := r.SetJSONBody(data); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/ssh_agent.go b/vendor/github.com/hashicorp/vault/api/ssh_agent.go index fda70bcddd..505519b04e 100644 --- a/vendor/github.com/hashicorp/vault/api/ssh_agent.go +++ b/vendor/github.com/hashicorp/vault/api/ssh_agent.go @@ -6,6 +6,7 @@ import ( "crypto/x509" "fmt" "io/ioutil" + "net/http" "os" "github.com/hashicorp/errwrap" @@ -206,18 +207,24 @@ func (c *Client) SSHHelperWithMountPoint(mountPoint string) *SSHHelper { // an echo response message is returned. This feature is used by ssh-helper to verify if // its configured correctly. func (c *SSHHelper) Verify(otp string) (*SSHVerifyResponse, error) { + return c.VerifyWithContext(context.Background(), otp) +} + +// VerifyWithContext the same as Verify but with a custom context. +func (c *SSHHelper) VerifyWithContext(ctx context.Context, otp string) (*SSHVerifyResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + data := map[string]interface{}{ "otp": otp, } verifyPath := fmt.Sprintf("/v1/%s/verify", c.MountPoint) - r := c.c.NewRequest("PUT", verifyPath) + r := c.c.NewRequest(http.MethodPut, verifyPath) if err := r.SetJSONBody(data); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_audit.go b/vendor/github.com/hashicorp/vault/api/sys_audit.go index d0c6408366..7020256f41 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_audit.go +++ b/vendor/github.com/hashicorp/vault/api/sys_audit.go @@ -4,23 +4,29 @@ import ( "context" "errors" "fmt" + "net/http" "github.com/mitchellh/mapstructure" ) func (c *Sys) AuditHash(path string, input string) (string, error) { + return c.AuditHashWithContext(context.Background(), path, input) +} + +func (c *Sys) AuditHashWithContext(ctx context.Context, path string, input string) (string, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]interface{}{ "input": input, } - r := c.c.NewRequest("PUT", fmt.Sprintf("/v1/sys/audit-hash/%s", path)) + r := c.c.NewRequest(http.MethodPut, fmt.Sprintf("/v1/sys/audit-hash/%s", path)) if err := r.SetJSONBody(body); err != nil { return "", err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return "", err } @@ -47,11 +53,16 @@ func (c *Sys) AuditHash(path string, input string) (string, error) { } func (c *Sys) ListAudit() (map[string]*Audit, error) { - r := c.c.NewRequest("GET", "/v1/sys/audit") + return c.ListAuditWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) ListAuditWithContext(ctx context.Context) (map[string]*Audit, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/audit") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -85,14 +96,19 @@ func (c *Sys) EnableAudit( } func (c *Sys) EnableAuditWithOptions(path string, options *EnableAuditOptions) error { - r := c.c.NewRequest("PUT", fmt.Sprintf("/v1/sys/audit/%s", path)) + return c.EnableAuditWithOptionsWithContext(context.Background(), path, options) +} + +func (c *Sys) EnableAuditWithOptionsWithContext(ctx context.Context, path string, options *EnableAuditOptions) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, fmt.Sprintf("/v1/sys/audit/%s", path)) if err := r.SetJSONBody(options); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } @@ -102,11 +118,16 @@ func (c *Sys) EnableAuditWithOptions(path string, options *EnableAuditOptions) e } func (c *Sys) DisableAudit(path string) error { - r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/audit/%s", path)) + return c.DisableAuditWithContext(context.Background(), path) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) DisableAuditWithContext(ctx context.Context, path string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, fmt.Sprintf("/v1/sys/audit/%s", path)) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() diff --git a/vendor/github.com/hashicorp/vault/api/sys_auth.go b/vendor/github.com/hashicorp/vault/api/sys_auth.go index 46abae4eff..238bd5e468 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_auth.go +++ b/vendor/github.com/hashicorp/vault/api/sys_auth.go @@ -4,16 +4,22 @@ import ( "context" "errors" "fmt" + "net/http" "github.com/mitchellh/mapstructure" ) func (c *Sys) ListAuth() (map[string]*AuthMount, error) { - r := c.c.NewRequest("GET", "/v1/sys/auth") + return c.ListAuthWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) ListAuthWithContext(ctx context.Context) (map[string]*AuthMount, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/auth") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -45,14 +51,19 @@ func (c *Sys) EnableAuth(path, authType, desc string) error { } func (c *Sys) EnableAuthWithOptions(path string, options *EnableAuthOptions) error { - r := c.c.NewRequest("POST", fmt.Sprintf("/v1/sys/auth/%s", path)) + return c.EnableAuthWithOptionsWithContext(context.Background(), path, options) +} + +func (c *Sys) EnableAuthWithOptionsWithContext(ctx context.Context, path string, options *EnableAuthOptions) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, fmt.Sprintf("/v1/sys/auth/%s", path)) if err := r.SetJSONBody(options); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } @@ -62,11 +73,16 @@ func (c *Sys) EnableAuthWithOptions(path string, options *EnableAuthOptions) err } func (c *Sys) DisableAuth(path string) error { - r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/auth/%s", path)) + return c.DisableAuthWithContext(context.Background(), path) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) DisableAuthWithContext(ctx context.Context, path string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, fmt.Sprintf("/v1/sys/auth/%s", path)) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } diff --git a/vendor/github.com/hashicorp/vault/api/sys_capabilities.go b/vendor/github.com/hashicorp/vault/api/sys_capabilities.go index 64b3951dd1..af306a07f3 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_capabilities.go +++ b/vendor/github.com/hashicorp/vault/api/sys_capabilities.go @@ -4,15 +4,30 @@ import ( "context" "errors" "fmt" + "net/http" "github.com/mitchellh/mapstructure" ) func (c *Sys) CapabilitiesSelf(path string) ([]string, error) { - return c.Capabilities(c.c.Token(), path) + return c.CapabilitiesSelfWithContext(context.Background(), path) +} + +func (c *Sys) CapabilitiesSelfWithContext(ctx context.Context, path string) ([]string, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + return c.CapabilitiesWithContext(ctx, c.c.Token(), path) } func (c *Sys) Capabilities(token, path string) ([]string, error) { + return c.CapabilitiesWithContext(context.Background(), token, path) +} + +func (c *Sys) CapabilitiesWithContext(ctx context.Context, token, path string) ([]string, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]string{ "token": token, "path": path, @@ -23,14 +38,12 @@ func (c *Sys) Capabilities(token, path string) ([]string, error) { reqPath = fmt.Sprintf("%s-self", reqPath) } - r := c.c.NewRequest("POST", reqPath) + r := c.c.NewRequest(http.MethodPost, reqPath) if err := r.SetJSONBody(body); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_config_cors.go b/vendor/github.com/hashicorp/vault/api/sys_config_cors.go index ef136dcbb6..1e2cda4f48 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_config_cors.go +++ b/vendor/github.com/hashicorp/vault/api/sys_config_cors.go @@ -3,16 +3,22 @@ package api import ( "context" "errors" + "net/http" "github.com/mitchellh/mapstructure" ) func (c *Sys) CORSStatus() (*CORSResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/config/cors") + return c.CORSStatusWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) CORSStatusWithContext(ctx context.Context) (*CORSResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/config/cors") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -36,14 +42,19 @@ func (c *Sys) CORSStatus() (*CORSResponse, error) { } func (c *Sys) ConfigureCORS(req *CORSRequest) error { - r := c.c.NewRequest("PUT", "/v1/sys/config/cors") + return c.ConfigureCORSWithContext(context.Background(), req) +} + +func (c *Sys) ConfigureCORSWithContext(ctx context.Context, req *CORSRequest) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/config/cors") if err := r.SetJSONBody(req); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -51,11 +62,16 @@ func (c *Sys) ConfigureCORS(req *CORSRequest) error { } func (c *Sys) DisableCORS() error { - r := c.c.NewRequest("DELETE", "/v1/sys/config/cors") + return c.DisableCORSWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) DisableCORSWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, "/v1/sys/config/cors") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } diff --git a/vendor/github.com/hashicorp/vault/api/sys_generate_root.go b/vendor/github.com/hashicorp/vault/api/sys_generate_root.go index 870dacb09e..096cadb793 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_generate_root.go +++ b/vendor/github.com/hashicorp/vault/api/sys_generate_root.go @@ -1,25 +1,41 @@ package api -import "context" +import ( + "context" + "net/http" +) func (c *Sys) GenerateRootStatus() (*GenerateRootStatusResponse, error) { - return c.generateRootStatusCommon("/v1/sys/generate-root/attempt") + return c.GenerateRootStatusWithContext(context.Background()) } func (c *Sys) GenerateDROperationTokenStatus() (*GenerateRootStatusResponse, error) { - return c.generateRootStatusCommon("/v1/sys/replication/dr/secondary/generate-operation-token/attempt") + return c.GenerateDROperationTokenStatusWithContext(context.Background()) } func (c *Sys) GenerateRecoveryOperationTokenStatus() (*GenerateRootStatusResponse, error) { - return c.generateRootStatusCommon("/v1/sys/generate-recovery-token/attempt") + return c.GenerateRecoveryOperationTokenStatusWithContext(context.Background()) } -func (c *Sys) generateRootStatusCommon(path string) (*GenerateRootStatusResponse, error) { - r := c.c.NewRequest("GET", path) +func (c *Sys) GenerateRootStatusWithContext(ctx context.Context) (*GenerateRootStatusResponse, error) { + return c.generateRootStatusCommonWithContext(ctx, "/v1/sys/generate-root/attempt") +} + +func (c *Sys) GenerateDROperationTokenStatusWithContext(ctx context.Context) (*GenerateRootStatusResponse, error) { + return c.generateRootStatusCommonWithContext(ctx, "/v1/sys/replication/dr/secondary/generate-operation-token/attempt") +} + +func (c *Sys) GenerateRecoveryOperationTokenStatusWithContext(ctx context.Context) (*GenerateRootStatusResponse, error) { + return c.generateRootStatusCommonWithContext(ctx, "/v1/sys/generate-recovery-token/attempt") +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) generateRootStatusCommonWithContext(ctx context.Context, path string) (*GenerateRootStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, path) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -31,31 +47,44 @@ func (c *Sys) generateRootStatusCommon(path string) (*GenerateRootStatusResponse } func (c *Sys) GenerateRootInit(otp, pgpKey string) (*GenerateRootStatusResponse, error) { - return c.generateRootInitCommon("/v1/sys/generate-root/attempt", otp, pgpKey) + return c.GenerateRootInitWithContext(context.Background(), otp, pgpKey) } func (c *Sys) GenerateDROperationTokenInit(otp, pgpKey string) (*GenerateRootStatusResponse, error) { - return c.generateRootInitCommon("/v1/sys/replication/dr/secondary/generate-operation-token/attempt", otp, pgpKey) + return c.GenerateDROperationTokenInitWithContext(context.Background(), otp, pgpKey) } func (c *Sys) GenerateRecoveryOperationTokenInit(otp, pgpKey string) (*GenerateRootStatusResponse, error) { - return c.generateRootInitCommon("/v1/sys/generate-recovery-token/attempt", otp, pgpKey) + return c.GenerateRecoveryOperationTokenInitWithContext(context.Background(), otp, pgpKey) +} + +func (c *Sys) GenerateRootInitWithContext(ctx context.Context, otp, pgpKey string) (*GenerateRootStatusResponse, error) { + return c.generateRootInitCommonWithContext(ctx, "/v1/sys/generate-root/attempt", otp, pgpKey) +} + +func (c *Sys) GenerateDROperationTokenInitWithContext(ctx context.Context, otp, pgpKey string) (*GenerateRootStatusResponse, error) { + return c.generateRootInitCommonWithContext(ctx, "/v1/sys/replication/dr/secondary/generate-operation-token/attempt", otp, pgpKey) +} + +func (c *Sys) GenerateRecoveryOperationTokenInitWithContext(ctx context.Context, otp, pgpKey string) (*GenerateRootStatusResponse, error) { + return c.generateRootInitCommonWithContext(ctx, "/v1/sys/generate-recovery-token/attempt", otp, pgpKey) } -func (c *Sys) generateRootInitCommon(path, otp, pgpKey string) (*GenerateRootStatusResponse, error) { +func (c *Sys) generateRootInitCommonWithContext(ctx context.Context, path, otp, pgpKey string) (*GenerateRootStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]interface{}{ "otp": otp, "pgp_key": pgpKey, } - r := c.c.NewRequest("PUT", path) + r := c.c.NewRequest(http.MethodPut, path) if err := r.SetJSONBody(body); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -67,23 +96,36 @@ func (c *Sys) generateRootInitCommon(path, otp, pgpKey string) (*GenerateRootSta } func (c *Sys) GenerateRootCancel() error { - return c.generateRootCancelCommon("/v1/sys/generate-root/attempt") + return c.GenerateRootCancelWithContext(context.Background()) } func (c *Sys) GenerateDROperationTokenCancel() error { - return c.generateRootCancelCommon("/v1/sys/replication/dr/secondary/generate-operation-token/attempt") + return c.GenerateDROperationTokenCancelWithContext(context.Background()) } func (c *Sys) GenerateRecoveryOperationTokenCancel() error { - return c.generateRootCancelCommon("/v1/sys/generate-recovery-token/attempt") + return c.GenerateRecoveryOperationTokenCancelWithContext(context.Background()) } -func (c *Sys) generateRootCancelCommon(path string) error { - r := c.c.NewRequest("DELETE", path) +func (c *Sys) GenerateRootCancelWithContext(ctx context.Context) error { + return c.generateRootCancelCommonWithContext(ctx, "/v1/sys/generate-root/attempt") +} + +func (c *Sys) GenerateDROperationTokenCancelWithContext(ctx context.Context) error { + return c.generateRootCancelCommonWithContext(ctx, "/v1/sys/replication/dr/secondary/generate-operation-token/attempt") +} + +func (c *Sys) GenerateRecoveryOperationTokenCancelWithContext(ctx context.Context) error { + return c.generateRootCancelCommonWithContext(ctx, "/v1/sys/generate-recovery-token/attempt") +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) generateRootCancelCommonWithContext(ctx context.Context, path string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, path) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -91,31 +133,44 @@ func (c *Sys) generateRootCancelCommon(path string) error { } func (c *Sys) GenerateRootUpdate(shard, nonce string) (*GenerateRootStatusResponse, error) { - return c.generateRootUpdateCommon("/v1/sys/generate-root/update", shard, nonce) + return c.GenerateRootUpdateWithContext(context.Background(), shard, nonce) } func (c *Sys) GenerateDROperationTokenUpdate(shard, nonce string) (*GenerateRootStatusResponse, error) { - return c.generateRootUpdateCommon("/v1/sys/replication/dr/secondary/generate-operation-token/update", shard, nonce) + return c.GenerateDROperationTokenUpdateWithContext(context.Background(), shard, nonce) } func (c *Sys) GenerateRecoveryOperationTokenUpdate(shard, nonce string) (*GenerateRootStatusResponse, error) { - return c.generateRootUpdateCommon("/v1/sys/generate-recovery-token/update", shard, nonce) + return c.GenerateRecoveryOperationTokenUpdateWithContext(context.Background(), shard, nonce) +} + +func (c *Sys) GenerateRootUpdateWithContext(ctx context.Context, shard, nonce string) (*GenerateRootStatusResponse, error) { + return c.generateRootUpdateCommonWithContext(ctx, "/v1/sys/generate-root/update", shard, nonce) +} + +func (c *Sys) GenerateDROperationTokenUpdateWithContext(ctx context.Context, shard, nonce string) (*GenerateRootStatusResponse, error) { + return c.generateRootUpdateCommonWithContext(ctx, "/v1/sys/replication/dr/secondary/generate-operation-token/update", shard, nonce) +} + +func (c *Sys) GenerateRecoveryOperationTokenUpdateWithContext(ctx context.Context, shard, nonce string) (*GenerateRootStatusResponse, error) { + return c.generateRootUpdateCommonWithContext(ctx, "/v1/sys/generate-recovery-token/update", shard, nonce) } -func (c *Sys) generateRootUpdateCommon(path, shard, nonce string) (*GenerateRootStatusResponse, error) { +func (c *Sys) generateRootUpdateCommonWithContext(ctx context.Context, path, shard, nonce string) (*GenerateRootStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]interface{}{ "key": shard, "nonce": nonce, } - r := c.c.NewRequest("PUT", path) + r := c.c.NewRequest(http.MethodPut, path) if err := r.SetJSONBody(body); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_hastatus.go b/vendor/github.com/hashicorp/vault/api/sys_hastatus.go index 408da05091..d89d59651a 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_hastatus.go +++ b/vendor/github.com/hashicorp/vault/api/sys_hastatus.go @@ -2,15 +2,21 @@ package api import ( "context" + "net/http" "time" ) func (c *Sys) HAStatus() (*HAStatusResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/ha-status") + return c.HAStatusWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) HAStatusWithContext(ctx context.Context) (*HAStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/ha-status") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -31,4 +37,7 @@ type HANode struct { ClusterAddress string `json:"cluster_address"` ActiveNode bool `json:"active_node"` LastEcho *time.Time `json:"last_echo"` + Version string `json:"version"` + UpgradeVersion string `json:"upgrade_version,omitempty"` + RedundancyZone string `json:"redundancy_zone,omitempty"` } diff --git a/vendor/github.com/hashicorp/vault/api/sys_health.go b/vendor/github.com/hashicorp/vault/api/sys_health.go index d5d7796008..953c1c21ea 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_health.go +++ b/vendor/github.com/hashicorp/vault/api/sys_health.go @@ -1,9 +1,19 @@ package api -import "context" +import ( + "context" + "net/http" +) func (c *Sys) Health() (*HealthResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/health") + return c.HealthWithContext(context.Background()) +} + +func (c *Sys) HealthWithContext(ctx context.Context) (*HealthResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/health") // If the code is 400 or above it will automatically turn into an error, // but the sys/health API defaults to returning 5xx when not sealed or // inited, so we force this code to be something else so we parse correctly @@ -13,9 +23,7 @@ func (c *Sys) Health() (*HealthResponse, error) { r.Params.Add("drsecondarycode", "299") r.Params.Add("performancestandbycode", "299") - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_init.go b/vendor/github.com/hashicorp/vault/api/sys_init.go index 0e499c6e3c..05dea86f6a 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_init.go +++ b/vendor/github.com/hashicorp/vault/api/sys_init.go @@ -1,13 +1,21 @@ package api -import "context" +import ( + "context" + "net/http" +) func (c *Sys) InitStatus() (bool, error) { - r := c.c.NewRequest("GET", "/v1/sys/init") + return c.InitStatusWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) InitStatusWithContext(ctx context.Context) (bool, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/init") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return false, err } @@ -19,14 +27,19 @@ func (c *Sys) InitStatus() (bool, error) { } func (c *Sys) Init(opts *InitRequest) (*InitResponse, error) { - r := c.c.NewRequest("PUT", "/v1/sys/init") + return c.InitWithContext(context.Background(), opts) +} + +func (c *Sys) InitWithContext(ctx context.Context, opts *InitRequest) (*InitResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/init") if err := r.SetJSONBody(opts); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_leader.go b/vendor/github.com/hashicorp/vault/api/sys_leader.go index 1c6be8d880..a74e206ebe 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_leader.go +++ b/vendor/github.com/hashicorp/vault/api/sys_leader.go @@ -2,15 +2,21 @@ package api import ( "context" + "net/http" "time" ) func (c *Sys) Leader() (*LeaderResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/leader") + return c.LeaderWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) LeaderWithContext(ctx context.Context) (*LeaderResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/leader") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_leases.go b/vendor/github.com/hashicorp/vault/api/sys_leases.go index e018015ded..c02402f531 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_leases.go +++ b/vendor/github.com/hashicorp/vault/api/sys_leases.go @@ -3,10 +3,18 @@ package api import ( "context" "errors" + "net/http" ) func (c *Sys) Renew(id string, increment int) (*Secret, error) { - r := c.c.NewRequest("PUT", "/v1/sys/leases/renew") + return c.RenewWithContext(context.Background(), id, increment) +} + +func (c *Sys) RenewWithContext(ctx context.Context, id string, increment int) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/renew") body := map[string]interface{}{ "increment": increment, @@ -16,9 +24,7 @@ func (c *Sys) Renew(id string, increment int) (*Secret, error) { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -28,7 +34,14 @@ func (c *Sys) Renew(id string, increment int) (*Secret, error) { } func (c *Sys) Lookup(id string) (*Secret, error) { - r := c.c.NewRequest("PUT", "/v1/sys/leases/lookup") + return c.LookupWithContext(context.Background(), id) +} + +func (c *Sys) LookupWithContext(ctx context.Context, id string) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/lookup") body := map[string]interface{}{ "lease_id": id, @@ -37,9 +50,7 @@ func (c *Sys) Lookup(id string) (*Secret, error) { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -49,7 +60,14 @@ func (c *Sys) Lookup(id string) (*Secret, error) { } func (c *Sys) Revoke(id string) error { - r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke") + return c.RevokeWithContext(context.Background(), id) +} + +func (c *Sys) RevokeWithContext(ctx context.Context, id string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/revoke") body := map[string]interface{}{ "lease_id": id, } @@ -57,9 +75,7 @@ func (c *Sys) Revoke(id string) error { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -67,11 +83,16 @@ func (c *Sys) Revoke(id string) error { } func (c *Sys) RevokePrefix(id string) error { - r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke-prefix/"+id) + return c.RevokePrefixWithContext(context.Background(), id) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RevokePrefixWithContext(ctx context.Context, id string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/revoke-prefix/"+id) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -79,11 +100,16 @@ func (c *Sys) RevokePrefix(id string) error { } func (c *Sys) RevokeForce(id string) error { - r := c.c.NewRequest("PUT", "/v1/sys/leases/revoke-force/"+id) + return c.RevokeForceWithContext(context.Background(), id) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RevokeForceWithContext(ctx context.Context, id string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/leases/revoke-force/"+id) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -91,6 +117,13 @@ func (c *Sys) RevokeForce(id string) error { } func (c *Sys) RevokeWithOptions(opts *RevokeOptions) error { + return c.RevokeWithOptionsWithContext(context.Background(), opts) +} + +func (c *Sys) RevokeWithOptionsWithContext(ctx context.Context, opts *RevokeOptions) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + if opts == nil { return errors.New("nil options provided") } @@ -105,7 +138,7 @@ func (c *Sys) RevokeWithOptions(opts *RevokeOptions) error { } path += opts.LeaseID - r := c.c.NewRequest("PUT", path) + r := c.c.NewRequest(http.MethodPut, path) if !opts.Force { body := map[string]interface{}{ "sync": opts.Sync, @@ -115,9 +148,7 @@ func (c *Sys) RevokeWithOptions(opts *RevokeOptions) error { } } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } diff --git a/vendor/github.com/hashicorp/vault/api/sys_mfa.go b/vendor/github.com/hashicorp/vault/api/sys_mfa.go new file mode 100644 index 0000000000..a1ba1bd80f --- /dev/null +++ b/vendor/github.com/hashicorp/vault/api/sys_mfa.go @@ -0,0 +1,45 @@ +package api + +import ( + "context" + "fmt" + "net/http" +) + +func (c *Sys) MFAValidate(requestID string, payload map[string]interface{}) (*Secret, error) { + return c.MFAValidateWithContext(context.Background(), requestID, payload) +} + +func (c *Sys) MFAValidateWithContext(ctx context.Context, requestID string, payload map[string]interface{}) (*Secret, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + body := map[string]interface{}{ + "mfa_request_id": requestID, + "mfa_payload": payload, + } + + r := c.c.NewRequest(http.MethodPost, fmt.Sprintf("/v1/sys/mfa/validate")) + if err := r.SetJSONBody(body); err != nil { + return nil, fmt.Errorf("failed to set request body: %w", err) + } + + resp, err := c.c.rawRequestWithContext(ctx, r) + if resp != nil { + defer resp.Body.Close() + } + if err != nil { + return nil, err + } + + secret, err := ParseSecret(resp.Body) + if err != nil { + return nil, fmt.Errorf("failed to parse secret from response: %w", err) + } + + if secret == nil { + return nil, fmt.Errorf("data from server response is empty") + } + + return secret, nil +} diff --git a/vendor/github.com/hashicorp/vault/api/sys_monitor.go b/vendor/github.com/hashicorp/vault/api/sys_monitor.go index ec27f22855..6813799f01 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_monitor.go +++ b/vendor/github.com/hashicorp/vault/api/sys_monitor.go @@ -4,12 +4,15 @@ import ( "bufio" "context" "fmt" + "net/http" + + "github.com/hashicorp/vault/sdk/helper/logging" ) // Monitor returns a channel that outputs strings containing the log messages // coming from the server. -func (c *Sys) Monitor(ctx context.Context, logLevel string) (chan string, error) { - r := c.c.NewRequest("GET", "/v1/sys/monitor") +func (c *Sys) Monitor(ctx context.Context, logLevel string, logFormat string) (chan string, error) { + r := c.c.NewRequest(http.MethodGet, "/v1/sys/monitor") if logLevel == "" { r.Params.Add("log_level", "info") @@ -17,6 +20,12 @@ func (c *Sys) Monitor(ctx context.Context, logLevel string) (chan string, error) r.Params.Add("log_level", logLevel) } + if logFormat == "" || logFormat == logging.UnspecifiedFormat.String() { + r.Params.Add("log_format", "standard") + } else { + r.Params.Add("log_format", logFormat) + } + resp, err := c.c.RawRequestWithContext(ctx, r) if err != nil { return nil, err diff --git a/vendor/github.com/hashicorp/vault/api/sys_mounts.go b/vendor/github.com/hashicorp/vault/api/sys_mounts.go index 1d68a1063f..52f51139f7 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_mounts.go +++ b/vendor/github.com/hashicorp/vault/api/sys_mounts.go @@ -4,16 +4,23 @@ import ( "context" "errors" "fmt" + "net/http" + "time" "github.com/mitchellh/mapstructure" ) func (c *Sys) ListMounts() (map[string]*MountOutput, error) { - r := c.c.NewRequest("GET", "/v1/sys/mounts") + return c.ListMountsWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) ListMountsWithContext(ctx context.Context) (map[string]*MountOutput, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/mounts") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -37,14 +44,19 @@ func (c *Sys) ListMounts() (map[string]*MountOutput, error) { } func (c *Sys) Mount(path string, mountInfo *MountInput) error { - r := c.c.NewRequest("POST", fmt.Sprintf("/v1/sys/mounts/%s", path)) + return c.MountWithContext(context.Background(), path, mountInfo) +} + +func (c *Sys) MountWithContext(ctx context.Context, path string, mountInfo *MountInput) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, fmt.Sprintf("/v1/sys/mounts/%s", path)) if err := r.SetJSONBody(mountInfo); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } @@ -54,46 +66,140 @@ func (c *Sys) Mount(path string, mountInfo *MountInput) error { } func (c *Sys) Unmount(path string) error { - r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/mounts/%s", path)) + return c.UnmountWithContext(context.Background(), path) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) UnmountWithContext(ctx context.Context, path string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, fmt.Sprintf("/v1/sys/mounts/%s", path)) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } return err } +// Remount wraps RemountWithContext using context.Background. func (c *Sys) Remount(from, to string) error { + return c.RemountWithContext(context.Background(), from, to) +} + +// RemountWithContext kicks off a remount operation, polls the status endpoint using +// the migration ID till either success or failure state is observed +func (c *Sys) RemountWithContext(ctx context.Context, from, to string) error { + remountResp, err := c.StartRemountWithContext(ctx, from, to) + if err != nil { + return err + } + + for { + remountStatusResp, err := c.RemountStatusWithContext(ctx, remountResp.MigrationID) + if err != nil { + return err + } + if remountStatusResp.MigrationInfo.MigrationStatus == "success" { + return nil + } + if remountStatusResp.MigrationInfo.MigrationStatus == "failure" { + return fmt.Errorf("Failure! Error encountered moving mount %s to %s, with migration ID %s", from, to, remountResp.MigrationID) + } + time.Sleep(1 * time.Second) + } +} + +// StartRemount wraps StartRemountWithContext using context.Background. +func (c *Sys) StartRemount(from, to string) (*MountMigrationOutput, error) { + return c.StartRemountWithContext(context.Background(), from, to) +} + +// StartRemountWithContext kicks off a mount migration and returns a response with the migration ID +func (c *Sys) StartRemountWithContext(ctx context.Context, from, to string) (*MountMigrationOutput, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]interface{}{ "from": from, "to": to, } - r := c.c.NewRequest("POST", "/v1/sys/remount") + r := c.c.NewRequest(http.MethodPost, "/v1/sys/remount") if err := r.SetJSONBody(body); err != nil { - return err + return nil, err + } + + resp, err := c.c.rawRequestWithContext(ctx, r) + if err != nil { + return nil, err + } + defer resp.Body.Close() + secret, err := ParseSecret(resp.Body) + if err != nil { + return nil, err + } + if secret == nil || secret.Data == nil { + return nil, errors.New("data from server response is empty") + } + + var result MountMigrationOutput + err = mapstructure.Decode(secret.Data, &result) + if err != nil { + return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) + return &result, err +} + +// RemountStatus wraps RemountStatusWithContext using context.Background. +func (c *Sys) RemountStatus(migrationID string) (*MountMigrationStatusOutput, error) { + return c.RemountStatusWithContext(context.Background(), migrationID) +} + +// RemountStatusWithContext checks the status of a mount migration operation with the provided ID +func (c *Sys) RemountStatusWithContext(ctx context.Context, migrationID string) (*MountMigrationStatusOutput, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) - if err == nil { - defer resp.Body.Close() + + r := c.c.NewRequest(http.MethodGet, fmt.Sprintf("/v1/sys/remount/status/%s", migrationID)) + + resp, err := c.c.rawRequestWithContext(ctx, r) + if err != nil { + return nil, err } - return err + defer resp.Body.Close() + secret, err := ParseSecret(resp.Body) + if err != nil { + return nil, err + } + if secret == nil || secret.Data == nil { + return nil, errors.New("data from server response is empty") + } + + var result MountMigrationStatusOutput + err = mapstructure.Decode(secret.Data, &result) + if err != nil { + return nil, err + } + + return &result, err } func (c *Sys) TuneMount(path string, config MountConfigInput) error { - r := c.c.NewRequest("POST", fmt.Sprintf("/v1/sys/mounts/%s/tune", path)) + return c.TuneMountWithContext(context.Background(), path, config) +} + +func (c *Sys) TuneMountWithContext(ctx context.Context, path string, config MountConfigInput) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, fmt.Sprintf("/v1/sys/mounts/%s/tune", path)) if err := r.SetJSONBody(config); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -101,11 +207,16 @@ func (c *Sys) TuneMount(path string, config MountConfigInput) error { } func (c *Sys) MountConfig(path string) (*MountConfigOutput, error) { - r := c.c.NewRequest("GET", fmt.Sprintf("/v1/sys/mounts/%s/tune", path)) + return c.MountConfigWithContext(context.Background(), path) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) MountConfigWithContext(ctx context.Context, path string) (*MountConfigOutput, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, fmt.Sprintf("/v1/sys/mounts/%s/tune", path)) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -187,3 +298,18 @@ type MountConfigOutput struct { // Deprecated: This field will always be blank for newer server responses. PluginName string `json:"plugin_name,omitempty" mapstructure:"plugin_name"` } + +type MountMigrationOutput struct { + MigrationID string `mapstructure:"migration_id"` +} + +type MountMigrationStatusOutput struct { + MigrationID string `mapstructure:"migration_id"` + MigrationInfo *MountMigrationStatusInfo `mapstructure:"migration_info"` +} + +type MountMigrationStatusInfo struct { + SourceMount string `mapstructure:"source_mount"` + TargetMount string `mapstructure:"target_mount"` + MigrationStatus string `mapstructure:"status"` +} diff --git a/vendor/github.com/hashicorp/vault/api/sys_plugins.go b/vendor/github.com/hashicorp/vault/api/sys_plugins.go index c17072d958..004ee222bf 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_plugins.go +++ b/vendor/github.com/hashicorp/vault/api/sys_plugins.go @@ -29,14 +29,22 @@ type ListPluginsResponse struct { Names []string `json:"names"` } -// ListPlugins lists all plugins in the catalog and returns their names as a -// list of strings. +// ListPlugins wraps ListPluginsWithContext using context.Background. func (c *Sys) ListPlugins(i *ListPluginsInput) (*ListPluginsResponse, error) { + return c.ListPluginsWithContext(context.Background(), i) +} + +// ListPluginsWithContext lists all plugins in the catalog and returns their names as a +// list of strings. +func (c *Sys) ListPluginsWithContext(ctx context.Context, i *ListPluginsInput) (*ListPluginsResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + path := "" method := "" if i.Type == consts.PluginTypeUnknown { path = "/v1/sys/plugins/catalog" - method = "GET" + method = http.MethodGet } else { path = fmt.Sprintf("/v1/sys/plugins/catalog/%s", i.Type) method = "LIST" @@ -46,13 +54,11 @@ func (c *Sys) ListPlugins(i *ListPluginsInput) (*ListPluginsResponse, error) { if method == "LIST" { // Set this for broader compatibility, but we use LIST above to be able // to handle the wrapping lookup function - req.Method = "GET" + req.Method = http.MethodGet req.Params.Set("list", "true") } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, req) + resp, err := c.c.rawRequestWithContext(ctx, req) if err != nil && resp == nil { return nil, err } @@ -66,7 +72,7 @@ func (c *Sys) ListPlugins(i *ListPluginsInput) (*ListPluginsResponse, error) { // switch it to a LIST. if resp.StatusCode == 405 { req.Params.Set("list", "true") - resp, err := c.c.RawRequestWithContext(ctx, req) + resp, err := c.c.rawRequestWithContext(ctx, req) if err != nil { return nil, err } @@ -94,23 +100,24 @@ func (c *Sys) ListPlugins(i *ListPluginsInput) (*ListPluginsResponse, error) { PluginsByType: make(map[consts.PluginType][]string), } if i.Type == consts.PluginTypeUnknown { - for pluginTypeStr, pluginsRaw := range secret.Data { - pluginType, err := consts.ParsePluginType(pluginTypeStr) - if err != nil { - return nil, err + for _, pluginType := range consts.PluginTypes { + pluginsRaw, ok := secret.Data[pluginType.String()] + if !ok { + continue } pluginsIfc, ok := pluginsRaw.([]interface{}) if !ok { - return nil, fmt.Errorf("unable to parse plugins for %q type", pluginTypeStr) + return nil, fmt.Errorf("unable to parse plugins for %q type", pluginType.String()) } - plugins := make([]string, len(pluginsIfc)) - for i, nameIfc := range pluginsIfc { + plugins := make([]string, 0, len(pluginsIfc)) + for _, nameIfc := range pluginsIfc { name, ok := nameIfc.(string) if !ok { + continue } - plugins[i] = name + plugins = append(plugins, name) } result.PluginsByType[pluginType] = plugins } @@ -142,14 +149,20 @@ type GetPluginResponse struct { SHA256 string `json:"sha256"` } -// GetPlugin retrieves information about the plugin. +// GetPlugin wraps GetPluginWithContext using context.Background. func (c *Sys) GetPlugin(i *GetPluginInput) (*GetPluginResponse, error) { + return c.GetPluginWithContext(context.Background(), i) +} + +// GetPluginWithContext retrieves information about the plugin. +func (c *Sys) GetPluginWithContext(ctx context.Context, i *GetPluginInput) (*GetPluginResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + path := catalogPathByType(i.Type, i.Name) req := c.c.NewRequest(http.MethodGet, path) - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, req) + resp, err := c.c.rawRequestWithContext(ctx, req) if err != nil { return nil, err } @@ -183,8 +196,16 @@ type RegisterPluginInput struct { SHA256 string `json:"sha256,omitempty"` } -// RegisterPlugin registers the plugin with the given information. +// RegisterPlugin wraps RegisterPluginWithContext using context.Background. func (c *Sys) RegisterPlugin(i *RegisterPluginInput) error { + return c.RegisterPluginWithContext(context.Background(), i) +} + +// RegisterPluginWithContext registers the plugin with the given information. +func (c *Sys) RegisterPluginWithContext(ctx context.Context, i *RegisterPluginInput) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + path := catalogPathByType(i.Type, i.Name) req := c.c.NewRequest(http.MethodPut, path) @@ -192,9 +213,7 @@ func (c *Sys) RegisterPlugin(i *RegisterPluginInput) error { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, req) + resp, err := c.c.rawRequestWithContext(ctx, req) if err == nil { defer resp.Body.Close() } @@ -210,15 +229,21 @@ type DeregisterPluginInput struct { Type consts.PluginType `json:"type"` } -// DeregisterPlugin removes the plugin with the given name from the plugin -// catalog. +// DeregisterPlugin wraps DeregisterPluginWithContext using context.Background. func (c *Sys) DeregisterPlugin(i *DeregisterPluginInput) error { + return c.DeregisterPluginWithContext(context.Background(), i) +} + +// DeregisterPluginWithContext removes the plugin with the given name from the plugin +// catalog. +func (c *Sys) DeregisterPluginWithContext(ctx context.Context, i *DeregisterPluginInput) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + path := catalogPathByType(i.Type, i.Name) req := c.c.NewRequest(http.MethodDelete, path) - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, req) + resp, err := c.c.rawRequestWithContext(ctx, req) if err == nil { defer resp.Body.Close() } @@ -237,9 +262,17 @@ type ReloadPluginInput struct { Scope string `json:"scope"` } -// ReloadPlugin reloads mounted plugin backends, possibly returning -// reloadId for a cluster scoped reload +// ReloadPlugin wraps ReloadPluginWithContext using context.Background. func (c *Sys) ReloadPlugin(i *ReloadPluginInput) (string, error) { + return c.ReloadPluginWithContext(context.Background(), i) +} + +// ReloadPluginWithContext reloads mounted plugin backends, possibly returning +// reloadId for a cluster scoped reload +func (c *Sys) ReloadPluginWithContext(ctx context.Context, i *ReloadPluginInput) (string, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + path := "/v1/sys/plugins/reload/backend" req := c.c.NewRequest(http.MethodPut, path) @@ -247,10 +280,7 @@ func (c *Sys) ReloadPlugin(i *ReloadPluginInput) (string, error) { return "", err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - - resp, err := c.c.RawRequestWithContext(ctx, req) + resp, err := c.c.rawRequestWithContext(ctx, req) if err != nil { return "", err } @@ -287,16 +317,21 @@ type ReloadPluginStatusInput struct { ReloadID string `json:"reload_id"` } -// ReloadPluginStatus retrieves the status of a reload operation +// ReloadPluginStatus wraps ReloadPluginStatusWithContext using context.Background. func (c *Sys) ReloadPluginStatus(reloadStatusInput *ReloadPluginStatusInput) (*ReloadStatusResponse, error) { + return c.ReloadPluginStatusWithContext(context.Background(), reloadStatusInput) +} + +// ReloadPluginStatusWithContext retrieves the status of a reload operation +func (c *Sys) ReloadPluginStatusWithContext(ctx context.Context, reloadStatusInput *ReloadPluginStatusInput) (*ReloadStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + path := "/v1/sys/plugins/reload/backend/status" req := c.c.NewRequest(http.MethodGet, path) req.Params.Add("reload_id", reloadStatusInput.ReloadID) - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - - resp, err := c.c.RawRequestWithContext(ctx, req) + resp, err := c.c.rawRequestWithContext(ctx, req) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_policy.go b/vendor/github.com/hashicorp/vault/api/sys_policy.go index c0c239f960..4a4f91b08c 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_policy.go +++ b/vendor/github.com/hashicorp/vault/api/sys_policy.go @@ -4,20 +4,26 @@ import ( "context" "errors" "fmt" + "net/http" "github.com/mitchellh/mapstructure" ) func (c *Sys) ListPolicies() ([]string, error) { + return c.ListPoliciesWithContext(context.Background()) +} + +func (c *Sys) ListPoliciesWithContext(ctx context.Context) ([]string, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + r := c.c.NewRequest("LIST", "/v1/sys/policies/acl") // Set this for broader compatibility, but we use LIST above to be able to // handle the wrapping lookup function - r.Method = "GET" + r.Method = http.MethodGet r.Params.Set("list", "true") - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -41,11 +47,16 @@ func (c *Sys) ListPolicies() ([]string, error) { } func (c *Sys) GetPolicy(name string) (string, error) { - r := c.c.NewRequest("GET", fmt.Sprintf("/v1/sys/policies/acl/%s", name)) + return c.GetPolicyWithContext(context.Background(), name) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) GetPolicyWithContext(ctx context.Context, name string) (string, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, fmt.Sprintf("/v1/sys/policies/acl/%s", name)) + + resp, err := c.c.rawRequestWithContext(ctx, r) if resp != nil { defer resp.Body.Close() if resp.StatusCode == 404 { @@ -72,18 +83,23 @@ func (c *Sys) GetPolicy(name string) (string, error) { } func (c *Sys) PutPolicy(name, rules string) error { + return c.PutPolicyWithContext(context.Background(), name, rules) +} + +func (c *Sys) PutPolicyWithContext(ctx context.Context, name, rules string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]string{ "policy": rules, } - r := c.c.NewRequest("PUT", fmt.Sprintf("/v1/sys/policies/acl/%s", name)) + r := c.c.NewRequest(http.MethodPut, fmt.Sprintf("/v1/sys/policies/acl/%s", name)) if err := r.SetJSONBody(body); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } @@ -93,11 +109,16 @@ func (c *Sys) PutPolicy(name, rules string) error { } func (c *Sys) DeletePolicy(name string) error { - r := c.c.NewRequest("DELETE", fmt.Sprintf("/v1/sys/policies/acl/%s", name)) + return c.DeletePolicyWithContext(context.Background(), name) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) DeletePolicyWithContext(ctx context.Context, name string) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, fmt.Sprintf("/v1/sys/policies/acl/%s", name)) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } diff --git a/vendor/github.com/hashicorp/vault/api/sys_raft.go b/vendor/github.com/hashicorp/vault/api/sys_raft.go index cbf3a20200..7806a1418d 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_raft.go +++ b/vendor/github.com/hashicorp/vault/api/sys_raft.go @@ -6,7 +6,6 @@ import ( "context" "encoding/json" "errors" - "fmt" "io" "io/ioutil" "net/http" @@ -14,7 +13,6 @@ import ( "time" "github.com/hashicorp/go-secure-stdlib/parseutil" - "github.com/hashicorp/vault/sdk/helper/consts" "github.com/mitchellh/mapstructure" ) @@ -46,6 +44,7 @@ type AutopilotConfig struct { MaxTrailingLogs uint64 `json:"max_trailing_logs" mapstructure:"max_trailing_logs"` MinQuorum uint `json:"min_quorum" mapstructure:"min_quorum"` ServerStabilizationTime time.Duration `json:"server_stabilization_time" mapstructure:"-"` + DisableUpgradeMigration bool `json:"disable_upgrade_migration" mapstructure:"disable_upgrade_migration"` } // MarshalJSON makes the autopilot config fields JSON compatible @@ -57,6 +56,7 @@ func (ac *AutopilotConfig) MarshalJSON() ([]byte, error) { "max_trailing_logs": ac.MaxTrailingLogs, "min_quorum": ac.MinQuorum, "server_stabilization_time": ac.ServerStabilizationTime.String(), + "disable_upgrade_migration": ac.DisableUpgradeMigration, }) } @@ -86,42 +86,79 @@ func (ac *AutopilotConfig) UnmarshalJSON(b []byte) error { // AutopilotState represents the response of the raft autopilot state API type AutopilotState struct { - Healthy bool `mapstructure:"healthy"` - FailureTolerance int `mapstructure:"failure_tolerance"` - Servers map[string]*AutopilotServer `mapstructure:"servers"` - Leader string `mapstructure:"leader"` - Voters []string `mapstructure:"voters"` - NonVoters []string `mapstructure:"non_voters"` + Healthy bool `mapstructure:"healthy"` + FailureTolerance int `mapstructure:"failure_tolerance"` + Servers map[string]*AutopilotServer `mapstructure:"servers"` + Leader string `mapstructure:"leader"` + Voters []string `mapstructure:"voters"` + NonVoters []string `mapstructure:"non_voters"` + RedundancyZones map[string]AutopilotZone `mapstructure:"redundancy_zones,omitempty"` + Upgrade *AutopilotUpgrade `mapstructure:"upgrade_info,omitempty"` + OptimisticFailureTolerance int `mapstructure:"optimistic_failure_tolerance,omitempty"` } // AutopilotServer represents the server blocks in the response of the raft // autopilot state API. type AutopilotServer struct { - ID string `mapstructure:"id"` - Name string `mapstructure:"name"` - Address string `mapstructure:"address"` - NodeStatus string `mapstructure:"node_status"` - LastContact string `mapstructure:"last_contact"` - LastTerm uint64 `mapstructure:"last_term"` - LastIndex uint64 `mapstructure:"last_index"` - Healthy bool `mapstructure:"healthy"` - StableSince string `mapstructure:"stable_since"` - Status string `mapstructure:"status"` - Meta map[string]string `mapstructure:"meta"` + ID string `mapstructure:"id"` + Name string `mapstructure:"name"` + Address string `mapstructure:"address"` + NodeStatus string `mapstructure:"node_status"` + LastContact string `mapstructure:"last_contact"` + LastTerm uint64 `mapstructure:"last_term"` + LastIndex uint64 `mapstructure:"last_index"` + Healthy bool `mapstructure:"healthy"` + StableSince string `mapstructure:"stable_since"` + Status string `mapstructure:"status"` + Version string `mapstructure:"version"` + UpgradeVersion string `mapstructure:"upgrade_version,omitempty"` + RedundancyZone string `mapstructure:"redundancy_zone,omitempty"` + NodeType string `mapstructure:"node_type,omitempty"` } -// RaftJoin adds the node from which this call is invoked from to the raft -// cluster represented by the leader address in the parameter. +type AutopilotZone struct { + Servers []string `mapstructure:"servers,omitempty"` + Voters []string `mapstructure:"voters,omitempty"` + FailureTolerance int `mapstructure:"failure_tolerance,omitempty"` +} + +type AutopilotUpgrade struct { + Status string `mapstructure:"status"` + TargetVersion string `mapstructure:"target_version,omitempty"` + TargetVersionVoters []string `mapstructure:"target_version_voters,omitempty"` + TargetVersionNonVoters []string `mapstructure:"target_version_non_voters,omitempty"` + TargetVersionReadReplicas []string `mapstructure:"target_version_read_replicas,omitempty"` + OtherVersionVoters []string `mapstructure:"other_version_voters,omitempty"` + OtherVersionNonVoters []string `mapstructure:"other_version_non_voters,omitempty"` + OtherVersionReadReplicas []string `mapstructure:"other_version_read_replicas,omitempty"` + RedundancyZones map[string]AutopilotZoneUpgradeVersions `mapstructure:"redundancy_zones,omitempty"` +} + +type AutopilotZoneUpgradeVersions struct { + TargetVersionVoters []string `mapstructure:"target_version_voters,omitempty"` + TargetVersionNonVoters []string `mapstructure:"target_version_non_voters,omitempty"` + OtherVersionVoters []string `mapstructure:"other_version_voters,omitempty"` + OtherVersionNonVoters []string `mapstructure:"other_version_non_voters,omitempty"` +} + +// RaftJoin wraps RaftJoinWithContext using context.Background. func (c *Sys) RaftJoin(opts *RaftJoinRequest) (*RaftJoinResponse, error) { - r := c.c.NewRequest("POST", "/v1/sys/storage/raft/join") + return c.RaftJoinWithContext(context.Background(), opts) +} + +// RaftJoinWithContext adds the node from which this call is invoked from to the raft +// cluster represented by the leader address in the parameter. +func (c *Sys) RaftJoinWithContext(ctx context.Context, opts *RaftJoinRequest) (*RaftJoinResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/sys/storage/raft/join") if err := r.SetJSONBody(opts); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -132,87 +169,22 @@ func (c *Sys) RaftJoin(opts *RaftJoinRequest) (*RaftJoinResponse, error) { return &result, err } -// RaftSnapshot invokes the API that takes the snapshot of the raft cluster and -// writes it to the supplied io.Writer. +// RaftSnapshot wraps RaftSnapshotWithContext using context.Background. func (c *Sys) RaftSnapshot(snapWriter io.Writer) error { - r := c.c.NewRequest("GET", "/v1/sys/storage/raft/snapshot") - r.URL.RawQuery = r.Params.Encode() - - req, err := http.NewRequest(http.MethodGet, r.URL.RequestURI(), nil) - if err != nil { - return err - } - - req.URL.User = r.URL.User - req.URL.Scheme = r.URL.Scheme - req.URL.Host = r.URL.Host - req.Host = r.URL.Host - - if r.Headers != nil { - for header, vals := range r.Headers { - for _, val := range vals { - req.Header.Add(header, val) - } - } - } - - if len(r.ClientToken) != 0 { - req.Header.Set(consts.AuthHeaderName, r.ClientToken) - } - - if len(r.WrapTTL) != 0 { - req.Header.Set("X-Vault-Wrap-TTL", r.WrapTTL) - } - - if len(r.MFAHeaderVals) != 0 { - for _, mfaHeaderVal := range r.MFAHeaderVals { - req.Header.Add("X-Vault-MFA", mfaHeaderVal) - } - } + return c.RaftSnapshotWithContext(context.Background(), snapWriter) +} - if r.PolicyOverride { - req.Header.Set("X-Vault-Policy-Override", "true") - } +// RaftSnapshotWithContext invokes the API that takes the snapshot of the raft cluster and +// writes it to the supplied io.Writer. +func (c *Sys) RaftSnapshotWithContext(ctx context.Context, snapWriter io.Writer) error { + r := c.c.NewRequest(http.MethodGet, "/v1/sys/storage/raft/snapshot") + r.URL.RawQuery = r.Params.Encode() - // Avoiding the use of RawRequestWithContext which reads the response body - // to determine if the body contains error message. - var result *Response - resp, err := c.c.config.HttpClient.Do(req) + resp, err := c.c.httpRequestWithContext(ctx, r) if err != nil { return err } - - if resp == nil { - return nil - } - - // Check for a redirect, only allowing for a single redirect - if resp.StatusCode == 301 || resp.StatusCode == 302 || resp.StatusCode == 307 { - // Parse the updated location - respLoc, err := resp.Location() - if err != nil { - return err - } - - // Ensure a protocol downgrade doesn't happen - if req.URL.Scheme == "https" && respLoc.Scheme != "https" { - return fmt.Errorf("redirect would cause protocol downgrade") - } - - // Update the request - req.URL = respLoc - - // Retry the request - resp, err = c.c.config.HttpClient.Do(req) - if err != nil { - return err - } - } - - result = &Response{Response: resp} - if err := result.Error(); err != nil { - return err - } + defer resp.Body.Close() // Make sure that the last file in the archive, SHA256SUMS.sealed, is present // and non-empty. This is to catch cases where the snapshot failed midstream, @@ -271,20 +243,23 @@ func (c *Sys) RaftSnapshot(snapWriter io.Writer) error { return nil } -// RaftSnapshotRestore reads the snapshot from the io.Reader and installs that -// snapshot, returning the cluster to the state defined by it. +// RaftSnapshotRestore wraps RaftSnapshotRestoreWithContext using context.Background. func (c *Sys) RaftSnapshotRestore(snapReader io.Reader, force bool) error { + return c.RaftSnapshotRestoreWithContext(context.Background(), snapReader, force) +} + +// RaftSnapshotRestoreWithContext reads the snapshot from the io.Reader and installs that +// snapshot, returning the cluster to the state defined by it. +func (c *Sys) RaftSnapshotRestoreWithContext(ctx context.Context, snapReader io.Reader, force bool) error { path := "/v1/sys/storage/raft/snapshot" if force { path = "/v1/sys/storage/raft/snapshot-force" } - r := c.c.NewRequest("POST", path) + r := c.c.NewRequest(http.MethodPost, path) r.Body = snapReader - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.httpRequestWithContext(ctx, r) if err != nil { return err } @@ -293,13 +268,19 @@ func (c *Sys) RaftSnapshotRestore(snapReader io.Reader, force bool) error { return nil } -// RaftAutopilotState returns the state of the raft cluster as seen by autopilot. +// RaftAutopilotState wraps RaftAutopilotStateWithContext using context.Background. func (c *Sys) RaftAutopilotState() (*AutopilotState, error) { - r := c.c.NewRequest("GET", "/v1/sys/storage/raft/autopilot/state") + return c.RaftAutopilotStateWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +// RaftAutopilotStateWithContext returns the state of the raft cluster as seen by autopilot. +func (c *Sys) RaftAutopilotStateWithContext(ctx context.Context) (*AutopilotState, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/storage/raft/autopilot/state") + + resp, err := c.c.rawRequestWithContext(ctx, r) if resp != nil { defer resp.Body.Close() if resp.StatusCode == 404 { @@ -327,13 +308,19 @@ func (c *Sys) RaftAutopilotState() (*AutopilotState, error) { return &result, err } -// RaftAutopilotConfiguration fetches the autopilot config. +// RaftAutopilotConfiguration wraps RaftAutopilotConfigurationWithContext using context.Background. func (c *Sys) RaftAutopilotConfiguration() (*AutopilotConfig, error) { - r := c.c.NewRequest("GET", "/v1/sys/storage/raft/autopilot/configuration") + return c.RaftAutopilotConfigurationWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +// RaftAutopilotConfigurationWithContext fetches the autopilot config. +func (c *Sys) RaftAutopilotConfigurationWithContext(ctx context.Context) (*AutopilotConfig, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/storage/raft/autopilot/configuration") + + resp, err := c.c.rawRequestWithContext(ctx, r) if resp != nil { defer resp.Body.Close() if resp.StatusCode == 404 { @@ -369,17 +356,23 @@ func (c *Sys) RaftAutopilotConfiguration() (*AutopilotConfig, error) { return &result, err } -// PutRaftAutopilotConfiguration allows modifying the raft autopilot configuration +// PutRaftAutopilotConfiguration wraps PutRaftAutopilotConfigurationWithContext using context.Background. func (c *Sys) PutRaftAutopilotConfiguration(opts *AutopilotConfig) error { - r := c.c.NewRequest("POST", "/v1/sys/storage/raft/autopilot/configuration") + return c.PutRaftAutopilotConfigurationWithContext(context.Background(), opts) +} + +// PutRaftAutopilotConfigurationWithContext allows modifying the raft autopilot configuration +func (c *Sys) PutRaftAutopilotConfigurationWithContext(ctx context.Context, opts *AutopilotConfig) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPost, "/v1/sys/storage/raft/autopilot/configuration") if err := r.SetJSONBody(opts); err != nil { return err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_rekey.go b/vendor/github.com/hashicorp/vault/api/sys_rekey.go index 153e486c6d..2ac8a4743b 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_rekey.go +++ b/vendor/github.com/hashicorp/vault/api/sys_rekey.go @@ -3,16 +3,22 @@ package api import ( "context" "errors" + "net/http" "github.com/mitchellh/mapstructure" ) func (c *Sys) RekeyStatus() (*RekeyStatusResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/rekey/init") + return c.RekeyStatusWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyStatusWithContext(ctx context.Context) (*RekeyStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/rekey/init") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -24,11 +30,16 @@ func (c *Sys) RekeyStatus() (*RekeyStatusResponse, error) { } func (c *Sys) RekeyRecoveryKeyStatus() (*RekeyStatusResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/rekey-recovery-key/init") + return c.RekeyRecoveryKeyStatusWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyRecoveryKeyStatusWithContext(ctx context.Context) (*RekeyStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/rekey-recovery-key/init") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -40,11 +51,16 @@ func (c *Sys) RekeyRecoveryKeyStatus() (*RekeyStatusResponse, error) { } func (c *Sys) RekeyVerificationStatus() (*RekeyVerificationStatusResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/rekey/verify") + return c.RekeyVerificationStatusWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyVerificationStatusWithContext(ctx context.Context) (*RekeyVerificationStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/rekey/verify") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -56,11 +72,16 @@ func (c *Sys) RekeyVerificationStatus() (*RekeyVerificationStatusResponse, error } func (c *Sys) RekeyRecoveryKeyVerificationStatus() (*RekeyVerificationStatusResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/rekey-recovery-key/verify") + return c.RekeyRecoveryKeyVerificationStatusWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyRecoveryKeyVerificationStatusWithContext(ctx context.Context) (*RekeyVerificationStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/rekey-recovery-key/verify") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -72,14 +93,19 @@ func (c *Sys) RekeyRecoveryKeyVerificationStatus() (*RekeyVerificationStatusResp } func (c *Sys) RekeyInit(config *RekeyInitRequest) (*RekeyStatusResponse, error) { - r := c.c.NewRequest("PUT", "/v1/sys/rekey/init") + return c.RekeyInitWithContext(context.Background(), config) +} + +func (c *Sys) RekeyInitWithContext(ctx context.Context, config *RekeyInitRequest) (*RekeyStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/rekey/init") if err := r.SetJSONBody(config); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -91,14 +117,19 @@ func (c *Sys) RekeyInit(config *RekeyInitRequest) (*RekeyStatusResponse, error) } func (c *Sys) RekeyRecoveryKeyInit(config *RekeyInitRequest) (*RekeyStatusResponse, error) { - r := c.c.NewRequest("PUT", "/v1/sys/rekey-recovery-key/init") + return c.RekeyRecoveryKeyInitWithContext(context.Background(), config) +} + +func (c *Sys) RekeyRecoveryKeyInitWithContext(ctx context.Context, config *RekeyInitRequest) (*RekeyStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/rekey-recovery-key/init") if err := r.SetJSONBody(config); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -110,11 +141,16 @@ func (c *Sys) RekeyRecoveryKeyInit(config *RekeyInitRequest) (*RekeyStatusRespon } func (c *Sys) RekeyCancel() error { - r := c.c.NewRequest("DELETE", "/v1/sys/rekey/init") + return c.RekeyCancelWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyCancelWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, "/v1/sys/rekey/init") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -122,11 +158,16 @@ func (c *Sys) RekeyCancel() error { } func (c *Sys) RekeyRecoveryKeyCancel() error { - r := c.c.NewRequest("DELETE", "/v1/sys/rekey-recovery-key/init") + return c.RekeyRecoveryKeyCancelWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyRecoveryKeyCancelWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, "/v1/sys/rekey-recovery-key/init") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -134,11 +175,16 @@ func (c *Sys) RekeyRecoveryKeyCancel() error { } func (c *Sys) RekeyVerificationCancel() error { - r := c.c.NewRequest("DELETE", "/v1/sys/rekey/verify") + return c.RekeyVerificationCancelWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyVerificationCancelWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, "/v1/sys/rekey/verify") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -146,11 +192,16 @@ func (c *Sys) RekeyVerificationCancel() error { } func (c *Sys) RekeyRecoveryKeyVerificationCancel() error { - r := c.c.NewRequest("DELETE", "/v1/sys/rekey-recovery-key/verify") + return c.RekeyRecoveryKeyVerificationCancelWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyRecoveryKeyVerificationCancelWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, "/v1/sys/rekey-recovery-key/verify") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -158,19 +209,24 @@ func (c *Sys) RekeyRecoveryKeyVerificationCancel() error { } func (c *Sys) RekeyUpdate(shard, nonce string) (*RekeyUpdateResponse, error) { + return c.RekeyUpdateWithContext(context.Background(), shard, nonce) +} + +func (c *Sys) RekeyUpdateWithContext(ctx context.Context, shard, nonce string) (*RekeyUpdateResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]interface{}{ "key": shard, "nonce": nonce, } - r := c.c.NewRequest("PUT", "/v1/sys/rekey/update") + r := c.c.NewRequest(http.MethodPut, "/v1/sys/rekey/update") if err := r.SetJSONBody(body); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -182,19 +238,24 @@ func (c *Sys) RekeyUpdate(shard, nonce string) (*RekeyUpdateResponse, error) { } func (c *Sys) RekeyRecoveryKeyUpdate(shard, nonce string) (*RekeyUpdateResponse, error) { + return c.RekeyRecoveryKeyUpdateWithContext(context.Background(), shard, nonce) +} + +func (c *Sys) RekeyRecoveryKeyUpdateWithContext(ctx context.Context, shard, nonce string) (*RekeyUpdateResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]interface{}{ "key": shard, "nonce": nonce, } - r := c.c.NewRequest("PUT", "/v1/sys/rekey-recovery-key/update") + r := c.c.NewRequest(http.MethodPut, "/v1/sys/rekey-recovery-key/update") if err := r.SetJSONBody(body); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -206,11 +267,16 @@ func (c *Sys) RekeyRecoveryKeyUpdate(shard, nonce string) (*RekeyUpdateResponse, } func (c *Sys) RekeyRetrieveBackup() (*RekeyRetrieveResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/rekey/backup") + return c.RekeyRetrieveBackupWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyRetrieveBackupWithContext(ctx context.Context) (*RekeyRetrieveResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/rekey/backup") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -234,11 +300,16 @@ func (c *Sys) RekeyRetrieveBackup() (*RekeyRetrieveResponse, error) { } func (c *Sys) RekeyRetrieveRecoveryBackup() (*RekeyRetrieveResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/rekey/recovery-key-backup") + return c.RekeyRetrieveRecoveryBackupWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyRetrieveRecoveryBackupWithContext(ctx context.Context) (*RekeyRetrieveResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/rekey/recovery-key-backup") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -262,11 +333,16 @@ func (c *Sys) RekeyRetrieveRecoveryBackup() (*RekeyRetrieveResponse, error) { } func (c *Sys) RekeyDeleteBackup() error { - r := c.c.NewRequest("DELETE", "/v1/sys/rekey/backup") + return c.RekeyDeleteBackupWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyDeleteBackupWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, "/v1/sys/rekey/backup") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -275,11 +351,16 @@ func (c *Sys) RekeyDeleteBackup() error { } func (c *Sys) RekeyDeleteRecoveryBackup() error { - r := c.c.NewRequest("DELETE", "/v1/sys/rekey/recovery-key-backup") + return c.RekeyDeleteRecoveryBackupWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RekeyDeleteRecoveryBackupWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodDelete, "/v1/sys/rekey/recovery-key-backup") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -288,19 +369,24 @@ func (c *Sys) RekeyDeleteRecoveryBackup() error { } func (c *Sys) RekeyVerificationUpdate(shard, nonce string) (*RekeyVerificationUpdateResponse, error) { + return c.RekeyVerificationUpdateWithContext(context.Background(), shard, nonce) +} + +func (c *Sys) RekeyVerificationUpdateWithContext(ctx context.Context, shard, nonce string) (*RekeyVerificationUpdateResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]interface{}{ "key": shard, "nonce": nonce, } - r := c.c.NewRequest("PUT", "/v1/sys/rekey/verify") + r := c.c.NewRequest(http.MethodPut, "/v1/sys/rekey/verify") if err := r.SetJSONBody(body); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -312,19 +398,24 @@ func (c *Sys) RekeyVerificationUpdate(shard, nonce string) (*RekeyVerificationUp } func (c *Sys) RekeyRecoveryKeyVerificationUpdate(shard, nonce string) (*RekeyVerificationUpdateResponse, error) { + return c.RekeyRecoveryKeyVerificationUpdateWithContext(context.Background(), shard, nonce) +} + +func (c *Sys) RekeyRecoveryKeyVerificationUpdateWithContext(ctx context.Context, shard, nonce string) (*RekeyVerificationUpdateResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) + defer cancelFunc() + body := map[string]interface{}{ "key": shard, "nonce": nonce, } - r := c.c.NewRequest("PUT", "/v1/sys/rekey-recovery-key/verify") + r := c.c.NewRequest(http.MethodPut, "/v1/sys/rekey-recovery-key/verify") if err := r.SetJSONBody(body); err != nil { return nil, err } - ctx, cancelFunc := context.WithCancel(context.Background()) - defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_rotate.go b/vendor/github.com/hashicorp/vault/api/sys_rotate.go index e081587b11..fa86886c35 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_rotate.go +++ b/vendor/github.com/hashicorp/vault/api/sys_rotate.go @@ -4,15 +4,21 @@ import ( "context" "encoding/json" "errors" + "net/http" "time" ) func (c *Sys) Rotate() error { - r := c.c.NewRequest("POST", "/v1/sys/rotate") + return c.RotateWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) RotateWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodPost, "/v1/sys/rotate") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err == nil { defer resp.Body.Close() } @@ -20,11 +26,16 @@ func (c *Sys) Rotate() error { } func (c *Sys) KeyStatus() (*KeyStatus, error) { - r := c.c.NewRequest("GET", "/v1/sys/key-status") + return c.KeyStatusWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) KeyStatusWithContext(ctx context.Context) (*KeyStatus, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodGet, "/v1/sys/key-status") + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } diff --git a/vendor/github.com/hashicorp/vault/api/sys_seal.go b/vendor/github.com/hashicorp/vault/api/sys_seal.go index 20d41a28f3..189d61469a 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_seal.go +++ b/vendor/github.com/hashicorp/vault/api/sys_seal.go @@ -1,59 +1,87 @@ package api -import "context" +import ( + "context" + "net/http" +) func (c *Sys) SealStatus() (*SealStatusResponse, error) { - r := c.c.NewRequest("GET", "/v1/sys/seal-status") - return sealStatusRequest(c, r) + return c.SealStatusWithContext(context.Background()) +} + +func (c *Sys) SealStatusWithContext(ctx context.Context) (*SealStatusResponse, error) { + r := c.c.NewRequest(http.MethodGet, "/v1/sys/seal-status") + return sealStatusRequestWithContext(ctx, c, r) } func (c *Sys) Seal() error { - r := c.c.NewRequest("PUT", "/v1/sys/seal") + return c.SealWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) SealWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) - if err == nil { - defer resp.Body.Close() + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/seal") + + resp, err := c.c.rawRequestWithContext(ctx, r) + if err != nil { + return err } - return err + defer resp.Body.Close() + + return nil } func (c *Sys) ResetUnsealProcess() (*SealStatusResponse, error) { + return c.ResetUnsealProcessWithContext(context.Background()) +} + +func (c *Sys) ResetUnsealProcessWithContext(ctx context.Context) (*SealStatusResponse, error) { body := map[string]interface{}{"reset": true} - r := c.c.NewRequest("PUT", "/v1/sys/unseal") + r := c.c.NewRequest(http.MethodPut, "/v1/sys/unseal") if err := r.SetJSONBody(body); err != nil { return nil, err } - return sealStatusRequest(c, r) + return sealStatusRequestWithContext(ctx, c, r) } func (c *Sys) Unseal(shard string) (*SealStatusResponse, error) { + return c.UnsealWithContext(context.Background(), shard) +} + +func (c *Sys) UnsealWithContext(ctx context.Context, shard string) (*SealStatusResponse, error) { body := map[string]interface{}{"key": shard} - r := c.c.NewRequest("PUT", "/v1/sys/unseal") + r := c.c.NewRequest(http.MethodPut, "/v1/sys/unseal") if err := r.SetJSONBody(body); err != nil { return nil, err } - return sealStatusRequest(c, r) + return sealStatusRequestWithContext(ctx, c, r) } func (c *Sys) UnsealWithOptions(opts *UnsealOpts) (*SealStatusResponse, error) { - r := c.c.NewRequest("PUT", "/v1/sys/unseal") + return c.UnsealWithOptionsWithContext(context.Background(), opts) +} + +func (c *Sys) UnsealWithOptionsWithContext(ctx context.Context, opts *UnsealOpts) (*SealStatusResponse, error) { + r := c.c.NewRequest(http.MethodPut, "/v1/sys/unseal") + if err := r.SetJSONBody(opts); err != nil { return nil, err } - return sealStatusRequest(c, r) + return sealStatusRequestWithContext(ctx, c, r) } -func sealStatusRequest(c *Sys, r *Request) (*SealStatusResponse, error) { - ctx, cancelFunc := context.WithCancel(context.Background()) +func sealStatusRequestWithContext(ctx context.Context, c *Sys, r *Request) (*SealStatusResponse, error) { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + resp, err := c.c.rawRequestWithContext(ctx, r) if err != nil { return nil, err } @@ -73,6 +101,7 @@ type SealStatusResponse struct { Progress int `json:"progress"` Nonce string `json:"nonce"` Version string `json:"version"` + BuildDate string `json:"build_date"` Migration bool `json:"migration"` ClusterName string `json:"cluster_name,omitempty"` ClusterID string `json:"cluster_id,omitempty"` diff --git a/vendor/github.com/hashicorp/vault/api/sys_stepdown.go b/vendor/github.com/hashicorp/vault/api/sys_stepdown.go index 55dc6fbcb7..833f31a6f7 100644 --- a/vendor/github.com/hashicorp/vault/api/sys_stepdown.go +++ b/vendor/github.com/hashicorp/vault/api/sys_stepdown.go @@ -1,13 +1,21 @@ package api -import "context" +import ( + "context" + "net/http" +) func (c *Sys) StepDown() error { - r := c.c.NewRequest("PUT", "/v1/sys/step-down") + return c.StepDownWithContext(context.Background()) +} - ctx, cancelFunc := context.WithCancel(context.Background()) +func (c *Sys) StepDownWithContext(ctx context.Context) error { + ctx, cancelFunc := c.c.withConfiguredTimeout(ctx) defer cancelFunc() - resp, err := c.c.RawRequestWithContext(ctx, r) + + r := c.c.NewRequest(http.MethodPut, "/v1/sys/step-down") + + resp, err := c.c.rawRequestWithContext(ctx, r) if resp != nil && resp.Body != nil { resp.Body.Close() } diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/certutil/helpers.go b/vendor/github.com/hashicorp/vault/sdk/helper/certutil/helpers.go index e8edcfd291..27d056854c 100644 --- a/vendor/github.com/hashicorp/vault/sdk/helper/certutil/helpers.go +++ b/vendor/github.com/hashicorp/vault/sdk/helper/certutil/helpers.go @@ -33,6 +33,22 @@ import ( cbasn1 "golang.org/x/crypto/cryptobyte/asn1" ) +const rsaMinimumSecureKeySize = 2048 + +// Mapping of key types to default key lengths +var defaultAlgorithmKeyBits = map[string]int{ + "rsa": 2048, + "ec": 256, +} + +// Mapping of NIST P-Curve's key length to expected signature bits. +var expectedNISTPCurveHashBits = map[int]int{ + 224: 256, + 256: 256, + 384: 384, + 521: 512, +} + // GetHexFormatted returns the byte buffer formatted in hex with // the specified separator between bytes. func GetHexFormatted(buf []byte, sep string) string { @@ -61,21 +77,42 @@ func ParseHexFormatted(in, sep string) []byte { return ret.Bytes() } -// GetSubjKeyID returns the subject key ID, e.g. the SHA1 sum -// of the marshaled public key +// GetSubjKeyID returns the subject key ID. The computed ID is the SHA-1 hash of +// the marshaled public key according to +// https://tools.ietf.org/html/rfc5280#section-4.2.1.2 (1) func GetSubjKeyID(privateKey crypto.Signer) ([]byte, error) { if privateKey == nil { return nil, errutil.InternalError{Err: "passed-in private key is nil"} } + return getSubjectKeyID(privateKey.Public()) +} - marshaledKey, err := x509.MarshalPKIXPublicKey(privateKey.Public()) - if err != nil { - return nil, errutil.InternalError{Err: fmt.Sprintf("error marshalling public key: %s", err)} - } - - subjKeyID := sha1.Sum(marshaledKey) +func getSubjectKeyID(pub interface{}) ([]byte, error) { + var publicKeyBytes []byte + switch pub := pub.(type) { + case *rsa.PublicKey: + type pkcs1PublicKey struct { + N *big.Int + E int + } - return subjKeyID[:], nil + var err error + publicKeyBytes, err = asn1.Marshal(pkcs1PublicKey{ + N: pub.N, + E: pub.E, + }) + if err != nil { + return nil, errutil.InternalError{Err: fmt.Sprintf("error marshalling public key: %s", err)} + } + case *ecdsa.PublicKey: + publicKeyBytes = elliptic.Marshal(pub.Curve, pub.X, pub.Y) + case ed25519.PublicKey: + publicKeyBytes = pub + default: + return nil, errutil.InternalError{Err: fmt.Sprintf("unsupported public key type: %T", pub)} + } + skid := sha1.Sum(publicKeyBytes) + return skid[:], nil } // ParsePKIMap takes a map (for instance, the Secret.Data @@ -113,6 +150,46 @@ func ParsePKIJSON(input []byte) (*ParsedCertBundle, error) { return nil, errutil.UserError{Err: "unable to parse out of either secret data or a secret object"} } +func ParseDERKey(privateKeyBytes []byte) (signer crypto.Signer, format BlockType, err error) { + if signer, err = x509.ParseECPrivateKey(privateKeyBytes); err == nil { + format = ECBlock + return + } + + if signer, err = x509.ParsePKCS1PrivateKey(privateKeyBytes); err == nil { + format = PKCS1Block + return + } + + var rawKey interface{} + if rawKey, err = x509.ParsePKCS8PrivateKey(privateKeyBytes); err == nil { + switch rawSigner := rawKey.(type) { + case *rsa.PrivateKey: + signer = rawSigner + case *ecdsa.PrivateKey: + signer = rawSigner + case ed25519.PrivateKey: + signer = rawSigner + default: + return nil, UnknownBlock, errutil.InternalError{Err: "unknown type for parsed PKCS8 Private Key"} + } + + format = PKCS8Block + return + } + + return nil, UnknownBlock, err +} + +func ParsePEMKey(keyPem string) (crypto.Signer, BlockType, error) { + pemBlock, _ := pem.Decode([]byte(keyPem)) + if pemBlock == nil { + return nil, UnknownBlock, errutil.UserError{Err: "no data found in PEM block"} + } + + return ParseDERKey(pemBlock.Bytes) +} + // ParsePEMBundle takes a string of concatenated PEM-format certificate // and private key values and decodes/parses them, checking validity along // the way. The first certificate must be the subject certificate and issuing @@ -133,43 +210,19 @@ func ParsePEMBundle(pemBundle string) (*ParsedCertBundle, error) { return nil, errutil.UserError{Err: "no data found in PEM block"} } - if signer, err := x509.ParseECPrivateKey(pemBlock.Bytes); err == nil { + if signer, format, err := ParseDERKey(pemBlock.Bytes); err == nil { if parsedBundle.PrivateKeyType != UnknownPrivateKey { return nil, errutil.UserError{Err: "more than one private key given; provide only one private key in the bundle"} } - parsedBundle.PrivateKeyFormat = ECBlock - parsedBundle.PrivateKeyType = ECPrivateKey - parsedBundle.PrivateKeyBytes = pemBlock.Bytes - parsedBundle.PrivateKey = signer - } else if signer, err := x509.ParsePKCS1PrivateKey(pemBlock.Bytes); err == nil { - if parsedBundle.PrivateKeyType != UnknownPrivateKey { - return nil, errutil.UserError{Err: "more than one private key given; provide only one private key in the bundle"} + parsedBundle.PrivateKeyFormat = format + parsedBundle.PrivateKeyType = GetPrivateKeyTypeFromSigner(signer) + if parsedBundle.PrivateKeyType == UnknownPrivateKey { + return nil, errutil.UserError{Err: "Unknown type of private key included in the bundle: %v"} } - parsedBundle.PrivateKeyType = RSAPrivateKey - parsedBundle.PrivateKeyFormat = PKCS1Block + parsedBundle.PrivateKeyBytes = pemBlock.Bytes parsedBundle.PrivateKey = signer - } else if signer, err := x509.ParsePKCS8PrivateKey(pemBlock.Bytes); err == nil { - parsedBundle.PrivateKeyFormat = PKCS8Block - - if parsedBundle.PrivateKeyType != UnknownPrivateKey { - return nil, errutil.UserError{Err: "More than one private key given; provide only one private key in the bundle"} - } - switch signer := signer.(type) { - case *rsa.PrivateKey: - parsedBundle.PrivateKey = signer - parsedBundle.PrivateKeyType = RSAPrivateKey - parsedBundle.PrivateKeyBytes = pemBlock.Bytes - case *ecdsa.PrivateKey: - parsedBundle.PrivateKey = signer - parsedBundle.PrivateKeyType = ECPrivateKey - parsedBundle.PrivateKeyBytes = pemBlock.Bytes - case ed25519.PrivateKey: - parsedBundle.PrivateKey = signer - parsedBundle.PrivateKeyType = Ed25519PrivateKey - parsedBundle.PrivateKeyBytes = pemBlock.Bytes - } } else if certificates, err := x509.ParseCertificates(pemBlock.Bytes); err == nil { certPath = append(certPath, &CertBlock{ Certificate: certificates[0], @@ -299,7 +352,21 @@ func generateSerialNumber(randReader io.Reader) (*big.Int, error) { return serial, nil } -// ComparePublicKeys compares two public keys and returns true if they match +// ComparePublicKeysAndType compares two public keys and returns true if they match, +// false if their types or contents differ, and an error on unsupported key types. +func ComparePublicKeysAndType(key1Iface, key2Iface crypto.PublicKey) (bool, error) { + equal, err := ComparePublicKeys(key1Iface, key2Iface) + if err != nil { + if strings.Contains(err.Error(), "key types do not match:") { + return false, nil + } + } + + return equal, err +} + +// ComparePublicKeys compares two public keys and returns true if they match, +// returns an error if public key types are mismatched, or they are an unsupported key type. func ComparePublicKeys(key1Iface, key2Iface crypto.PublicKey) (bool, error) { switch key1Iface.(type) { case *rsa.PublicKey: @@ -354,6 +421,9 @@ func ComparePublicKeys(key1Iface, key2Iface crypto.PublicKey) (bool, error) { func ParsePublicKeyPEM(data []byte) (interface{}, error) { block, data := pem.Decode(data) if block != nil { + if len(bytes.TrimSpace(data)) > 0 { + return nil, errutil.UserError{Err: "unexpected trailing data after parsed PEM block"} + } var rawKey interface{} var err error if rawKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil { @@ -364,17 +434,15 @@ func ParsePublicKeyPEM(data []byte) (interface{}, error) { } } - if rsaPublicKey, ok := rawKey.(*rsa.PublicKey); ok { - return rsaPublicKey, nil - } - if ecPublicKey, ok := rawKey.(*ecdsa.PublicKey); ok { - return ecPublicKey, nil - } - if edPublicKey, ok := rawKey.(ed25519.PublicKey); ok { - return edPublicKey, nil + switch key := rawKey.(type) { + case *rsa.PublicKey: + return key, nil + case *ecdsa.PublicKey: + return key, nil + case ed25519.PublicKey: + return key, nil } } - return nil, errors.New("data does not contain any valid public keys") } @@ -525,20 +593,117 @@ func StringToOid(in string) (asn1.ObjectIdentifier, error) { return asn1.ObjectIdentifier(ret), nil } -func ValidateSignatureLength(keyBits int) error { - switch keyBits { +// Returns default key bits for the specified key type, or the present value +// if keyBits is non-zero. +func DefaultOrValueKeyBits(keyType string, keyBits int) (int, error) { + if keyBits == 0 { + newValue, present := defaultAlgorithmKeyBits[keyType] + if present { + keyBits = newValue + } /* else { + // We cannot return an error here as ed25519 (and potentially ed448 + // in the future) aren't in defaultAlgorithmKeyBits -- the value of + // the keyBits parameter is ignored under that algorithm. + } */ + } + + return keyBits, nil +} + +// Returns default signature hash bit length for the specified key type and +// bits, or the present value if hashBits is non-zero. Returns an error under +// certain internal circumstances. +func DefaultOrValueHashBits(keyType string, keyBits int, hashBits int) (int, error) { + if keyType == "ec" { + // Enforcement of curve moved to selectSignatureAlgorithmForECDSA. See + // note there about why. + } else if keyType == "rsa" && hashBits == 0 { + // To match previous behavior (and ignoring NIST's recommendations for + // hash size to align with RSA key sizes), default to SHA-2-256. + hashBits = 256 + } else if keyType == "ed25519" || keyType == "ed448" || keyType == "any" { + // No-op; ed25519 and ed448 internally specify their own hash and + // we do not need to select one. Double hashing isn't supported in + // certificate signing. Additionally, the any key type can't know + // what hash algorithm to use yet, so default to zero. + return 0, nil + } + + return hashBits, nil +} + +// Validates that the combination of keyType, keyBits, and hashBits are +// valid together; replaces individual calls to ValidateSignatureLength and +// ValidateKeyTypeLength. Also updates the value of keyBits and hashBits on +// return. +func ValidateDefaultOrValueKeyTypeSignatureLength(keyType string, keyBits int, hashBits int) (int, int, error) { + var err error + + if keyBits, err = DefaultOrValueKeyBits(keyType, keyBits); err != nil { + return keyBits, hashBits, err + } + + if err = ValidateKeyTypeLength(keyType, keyBits); err != nil { + return keyBits, hashBits, err + } + + if hashBits, err = DefaultOrValueHashBits(keyType, keyBits, hashBits); err != nil { + return keyBits, hashBits, err + } + + // Note that this check must come after we've selected a value for + // hashBits above, in the event it was left as the default, but we + // were allowed to update it. + if err = ValidateSignatureLength(keyType, hashBits); err != nil { + return keyBits, hashBits, err + } + + return keyBits, hashBits, nil +} + +// Validates that the length of the hash (in bits) used in the signature +// calculation is a known, approved value. +func ValidateSignatureLength(keyType string, hashBits int) error { + if keyType == "any" || keyType == "ec" || keyType == "ed25519" || keyType == "ed448" { + // ed25519 and ed448 include built-in hashing and is not externally + // configurable. There are three modes for each of these schemes: + // + // 1. Built-in hash (default, used in TLS, x509). + // 2. Double hash (notably used in some block-chain implementations, + // but largely regarded as a specialized use case with security + // concerns). + // 3. No hash (bring your own hash function, less commonly used). + // + // In all cases, we won't have a hash algorithm to validate here, so + // return nil. + // + // Additionally, when KeyType is any, we can't yet validate the + // signature algorithm size, so it takes the default zero value. + // + // When KeyType is ec, we also can't validate this value as we're + // forcefully ignoring the users' choice and specifying a value based + // on issuer type. + return nil + } + + switch hashBits { case 256: case 384: case 512: default: - return fmt.Errorf("unsupported signature algorithm: %d", keyBits) + return fmt.Errorf("unsupported hash signature algorithm: %d", hashBits) } + return nil } func ValidateKeyTypeLength(keyType string, keyBits int) error { switch keyType { case "rsa": + if keyBits < rsaMinimumSecureKeySize { + return fmt.Errorf("RSA keys < %d bits are unsafe and not supported: got %d", rsaMinimumSecureKeySize, keyBits) + } + switch keyBits { case 2048: case 3072: @@ -548,12 +713,8 @@ func ValidateKeyTypeLength(keyType string, keyBits int) error { return fmt.Errorf("unsupported bit length for RSA key: %d", keyBits) } case "ec": - switch keyBits { - case 224: - case 256: - case 384: - case 521: - default: + _, present := expectedNISTPCurveHashBits[keyBits] + if !present { return fmt.Errorf("unsupported bit length for EC key: %d", keyBits) } case "any", "ed25519": @@ -567,16 +728,23 @@ func ValidateKeyTypeLength(keyType string, keyBits int) error { // CreateCertificate uses CreationBundle and the default rand.Reader to // generate a cert/keypair. func CreateCertificate(data *CreationBundle) (*ParsedCertBundle, error) { - return createCertificate(data, rand.Reader) + return createCertificate(data, rand.Reader, generatePrivateKey) } // CreateCertificateWithRandomSource uses CreationBundle and a custom // io.Reader for randomness to generate a cert/keypair. func CreateCertificateWithRandomSource(data *CreationBundle, randReader io.Reader) (*ParsedCertBundle, error) { - return createCertificate(data, randReader) + return createCertificate(data, randReader, generatePrivateKey) } -func createCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertBundle, error) { +// KeyGenerator Allow us to override how/what generates the private key +type KeyGenerator func(keyType string, keyBits int, container ParsedPrivateKeyContainer, entropyReader io.Reader) error + +func CreateCertificateWithKeyGenerator(data *CreationBundle, randReader io.Reader, keyGenerator KeyGenerator) (*ParsedCertBundle, error) { + return createCertificate(data, randReader, keyGenerator) +} + +func createCertificate(data *CreationBundle, randReader io.Reader, privateKeyGenerator KeyGenerator) (*ParsedCertBundle, error) { var err error result := &ParsedCertBundle{} @@ -585,7 +753,7 @@ func createCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertB return nil, err } - if err := generatePrivateKey(data.Params.KeyType, + if err := privateKeyGenerator(data.Params.KeyType, data.Params.KeyBits, result, randReader); err != nil { return nil, err @@ -655,14 +823,7 @@ func createCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertB case Ed25519PrivateKey: certTemplate.SignatureAlgorithm = x509.PureEd25519 case ECPrivateKey: - switch data.Params.SignatureBits { - case 256: - certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256 - case 384: - certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA384 - case 512: - certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA512 - } + certTemplate.SignatureAlgorithm = selectSignatureAlgorithmForECDSA(data.SigningBundle.PrivateKey.Public(), data.Params.SignatureBits) } caCert := data.SigningBundle.Certificate @@ -691,14 +852,7 @@ func createCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertB case "ed25519": certTemplate.SignatureAlgorithm = x509.PureEd25519 case "ec": - switch data.Params.SignatureBits { - case 256: - certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA256 - case 384: - certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA384 - case 512: - certTemplate.SignatureAlgorithm = x509.ECDSAWithSHA512 - } + certTemplate.SignatureAlgorithm = selectSignatureAlgorithmForECDSA(result.PrivateKey.Public(), data.Params.SignatureBits) } certTemplate.AuthorityKeyId = subjKeyID @@ -717,42 +871,93 @@ func createCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertB } if data.SigningBundle != nil { - if len(data.SigningBundle.Certificate.AuthorityKeyId) > 0 && - !bytes.Equal(data.SigningBundle.Certificate.AuthorityKeyId, data.SigningBundle.Certificate.SubjectKeyId) { - - result.CAChain = []*CertBlock{ - { + if (len(data.SigningBundle.Certificate.AuthorityKeyId) > 0 && + !bytes.Equal(data.SigningBundle.Certificate.AuthorityKeyId, data.SigningBundle.Certificate.SubjectKeyId)) || + data.Params.ForceAppendCaChain { + var chain []*CertBlock + + signingChain := data.SigningBundle.CAChain + // Some bundles already include the root included in the chain, so don't include it twice. + if len(signingChain) == 0 || !bytes.Equal(signingChain[0].Bytes, data.SigningBundle.CertificateBytes) { + chain = append(chain, &CertBlock{ Certificate: data.SigningBundle.Certificate, Bytes: data.SigningBundle.CertificateBytes, - }, + }) } - result.CAChain = append(result.CAChain, data.SigningBundle.CAChain...) + + if len(signingChain) > 0 { + chain = append(chain, signingChain...) + } + + result.CAChain = chain } } return result, nil } +func selectSignatureAlgorithmForECDSA(pub crypto.PublicKey, signatureBits int) x509.SignatureAlgorithm { + // Previously we preferred the user-specified signature bits for ECDSA + // keys. However, this could result in using a longer hash function than + // the underlying NIST P-curve will encode (e.g., a SHA-512 hash with a + // P-256 key). This isn't ideal: the hash is implicitly truncated + // (effectively turning it into SHA-512/256) and we then need to rely + // on the prefix security of the hash. Since both NIST and Mozilla guidance + // suggest instead using the correct hash function, we should prefer that + // over the operator-specified signatureBits. + // + // Lastly, note that pub above needs to be the _signer's_ public key; + // the issue with DefaultOrValueHashBits is that it is called at role + // configuration time, which might _precede_ issuer generation. Thus + // it only has access to the desired key type and not the actual issuer. + // The reference from that function is reproduced below: + // + // > To comply with BSI recommendations Section 4.2 and Mozilla root + // > store policy section 5.1.2, enforce that NIST P-curves use a hash + // > length corresponding to curve length. Note that ed25519 does not + // > implement the "ec" key type. + key, ok := pub.(*ecdsa.PublicKey) + if !ok { + return x509.ECDSAWithSHA256 + } + switch key.Curve { + case elliptic.P224(), elliptic.P256(): + return x509.ECDSAWithSHA256 + case elliptic.P384(): + return x509.ECDSAWithSHA384 + case elliptic.P521(): + return x509.ECDSAWithSHA512 + default: + return x509.ECDSAWithSHA256 + } +} + var oidExtensionBasicConstraints = []int{2, 5, 29, 19} // CreateCSR creates a CSR with the default rand.Reader to // generate a cert/keypair. This is currently only meant // for use when generating an intermediate certificate. func CreateCSR(data *CreationBundle, addBasicConstraints bool) (*ParsedCSRBundle, error) { - return createCSR(data, addBasicConstraints, rand.Reader) + return createCSR(data, addBasicConstraints, rand.Reader, generatePrivateKey) } // CreateCSRWithRandomSource creates a CSR with a custom io.Reader // for randomness to generate a cert/keypair. func CreateCSRWithRandomSource(data *CreationBundle, addBasicConstraints bool, randReader io.Reader) (*ParsedCSRBundle, error) { - return createCSR(data, addBasicConstraints, randReader) + return createCSR(data, addBasicConstraints, randReader, generatePrivateKey) +} + +// CreateCSRWithKeyGenerator creates a CSR with a custom io.Reader +// for randomness to generate a cert/keypair with the provided private key generator. +func CreateCSRWithKeyGenerator(data *CreationBundle, addBasicConstraints bool, randReader io.Reader, keyGenerator KeyGenerator) (*ParsedCSRBundle, error) { + return createCSR(data, addBasicConstraints, randReader, keyGenerator) } -func createCSR(data *CreationBundle, addBasicConstraints bool, randReader io.Reader) (*ParsedCSRBundle, error) { +func createCSR(data *CreationBundle, addBasicConstraints bool, randReader io.Reader, keyGenerator KeyGenerator) (*ParsedCSRBundle, error) { var err error result := &ParsedCSRBundle{} - if err := generatePrivateKey(data.Params.KeyType, + if err := keyGenerator(data.Params.KeyType, data.Params.KeyBits, result, randReader); err != nil { return nil, err @@ -849,11 +1054,10 @@ func signCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertBun return nil, err } - marshaledKey, err := x509.MarshalPKIXPublicKey(data.CSR.PublicKey) + subjKeyID, err := getSubjectKeyID(data.CSR.PublicKey) if err != nil { - return nil, errutil.InternalError{Err: fmt.Sprintf("error marshalling public key: %s", err)} + return nil, err } - subjKeyID := sha1.Sum(marshaledKey) caCert := data.SigningBundle.Certificate @@ -963,7 +1167,7 @@ func signCertificate(data *CreationBundle, randReader io.Reader) (*ParsedCertBun return nil, errutil.InternalError{Err: fmt.Sprintf("unable to parse created certificate: %s", err)} } - result.CAChain = data.SigningBundle.GetCAChain() + result.CAChain = data.SigningBundle.GetFullChain() return result, nil } @@ -1033,3 +1237,20 @@ func GetPublicKeySize(key crypto.PublicKey) int { return -1 } + +// CreateKeyBundle create a KeyBundle struct object which includes a generated key +// of keyType with keyBits leveraging the randomness from randReader. +func CreateKeyBundle(keyType string, keyBits int, randReader io.Reader) (KeyBundle, error) { + return CreateKeyBundleWithKeyGenerator(keyType, keyBits, randReader, generatePrivateKey) +} + +// CreateKeyBundleWithKeyGenerator create a KeyBundle struct object which includes +// a generated key of keyType with keyBits leveraging the randomness from randReader and +// delegates the actual key generation to keyGenerator +func CreateKeyBundleWithKeyGenerator(keyType string, keyBits int, randReader io.Reader, keyGenerator KeyGenerator) (KeyBundle, error) { + result := KeyBundle{} + if err := keyGenerator(keyType, keyBits, &result, randReader); err != nil { + return result, err + } + return result, nil +} diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/certutil/types.go b/vendor/github.com/hashicorp/vault/sdk/helper/certutil/types.go index a557b5d73d..76587826ef 100644 --- a/vendor/github.com/hashicorp/vault/sdk/helper/certutil/types.go +++ b/vendor/github.com/hashicorp/vault/sdk/helper/certutil/types.go @@ -58,6 +58,7 @@ const ( RSAPrivateKey PrivateKeyType = "rsa" ECPrivateKey PrivateKeyType = "ec" Ed25519PrivateKey PrivateKeyType = "ed25519" + ManagedPrivateKey PrivateKeyType = "ManagedPrivateKey" ) // TLSUsage controls whether the intended usage of a *tls.Config @@ -77,9 +78,10 @@ type BlockType string // Well-known formats const ( - PKCS1Block BlockType = "RSA PRIVATE KEY" - PKCS8Block BlockType = "PRIVATE KEY" - ECBlock BlockType = "EC PRIVATE KEY" + UnknownBlock BlockType = "" + PKCS1Block BlockType = "RSA PRIVATE KEY" + PKCS8Block BlockType = "PRIVATE KEY" + ECBlock BlockType = "EC PRIVATE KEY" ) // ParsedPrivateKeyContainer allows common key setting for certs and CSRs @@ -136,6 +138,25 @@ type ParsedCSRBundle struct { CSR *x509.CertificateRequest } +type KeyBundle struct { + PrivateKeyType PrivateKeyType + PrivateKeyBytes []byte + PrivateKey crypto.Signer +} + +func GetPrivateKeyTypeFromSigner(signer crypto.Signer) PrivateKeyType { + switch signer.(type) { + case *rsa.PrivateKey: + return RSAPrivateKey + case *ecdsa.PrivateKey: + return ECPrivateKey + case ed25519.PrivateKey: + return Ed25519PrivateKey + default: + return UnknownPrivateKey + } +} + // ToPEMBundle converts a string-based certificate bundle // to a PEM-based string certificate bundle in trust path // order, leaf certificate first @@ -158,46 +179,21 @@ func (c *CertBundle) ToPEMBundle() string { // ToParsedCertBundle converts a string-based certificate bundle // to a byte-based raw certificate bundle func (c *CertBundle) ToParsedCertBundle() (*ParsedCertBundle, error) { - result := &ParsedCertBundle{} - var err error - var pemBlock *pem.Block - - if len(c.PrivateKey) > 0 { - pemBlock, _ = pem.Decode([]byte(c.PrivateKey)) - if pemBlock == nil { - return nil, errutil.UserError{Err: "Error decoding private key from cert bundle"} - } + return c.ToParsedCertBundleWithExtractor(extractAndSetPrivateKey) +} - result.PrivateKeyBytes = pemBlock.Bytes - result.PrivateKeyFormat = BlockType(strings.TrimSpace(pemBlock.Type)) +// PrivateKeyExtractor extract out a private key from the passed in +// CertBundle and set the appropriate bits within the ParsedCertBundle. +type PrivateKeyExtractor func(c *CertBundle, parsedBundle *ParsedCertBundle) error - switch result.PrivateKeyFormat { - case ECBlock: - result.PrivateKeyType, c.PrivateKeyType = ECPrivateKey, ECPrivateKey - case PKCS1Block: - c.PrivateKeyType, result.PrivateKeyType = RSAPrivateKey, RSAPrivateKey - case PKCS8Block: - t, err := getPKCS8Type(pemBlock.Bytes) - if err != nil { - return nil, errutil.UserError{Err: fmt.Sprintf("Error getting key type from pkcs#8: %v", err)} - } - result.PrivateKeyType = t - switch t { - case ECPrivateKey: - c.PrivateKeyType = ECPrivateKey - case RSAPrivateKey: - c.PrivateKeyType = RSAPrivateKey - case Ed25519PrivateKey: - c.PrivateKeyType = Ed25519PrivateKey - } - default: - return nil, errutil.UserError{Err: fmt.Sprintf("Unsupported key block type: %s", pemBlock.Type)} - } +func (c *CertBundle) ToParsedCertBundleWithExtractor(privateKeyExtractor PrivateKeyExtractor) (*ParsedCertBundle, error) { + var err error + var pemBlock *pem.Block + result := &ParsedCertBundle{} - result.PrivateKey, err = result.getSigner() - if err != nil { - return nil, errutil.UserError{Err: fmt.Sprintf("Error getting signer: %s", err)} - } + err = privateKeyExtractor(c, result) + if err != nil { + return nil, err } if len(c.Certificate) > 0 { @@ -258,6 +254,52 @@ func (c *CertBundle) ToParsedCertBundle() (*ParsedCertBundle, error) { return result, nil } +func extractAndSetPrivateKey(c *CertBundle, parsedBundle *ParsedCertBundle) error { + if len(c.PrivateKey) == 0 { + return nil + } + + pemBlock, _ := pem.Decode([]byte(c.PrivateKey)) + if pemBlock == nil { + return errutil.UserError{Err: "Error decoding private key from cert bundle"} + } + + parsedBundle.PrivateKeyBytes = pemBlock.Bytes + parsedBundle.PrivateKeyFormat = BlockType(strings.TrimSpace(pemBlock.Type)) + + switch parsedBundle.PrivateKeyFormat { + case ECBlock: + parsedBundle.PrivateKeyType, c.PrivateKeyType = ECPrivateKey, ECPrivateKey + case PKCS1Block: + c.PrivateKeyType, parsedBundle.PrivateKeyType = RSAPrivateKey, RSAPrivateKey + case PKCS8Block: + t, err := getPKCS8Type(pemBlock.Bytes) + if err != nil { + return errutil.UserError{Err: fmt.Sprintf("Error getting key type from pkcs#8: %v", err)} + } + parsedBundle.PrivateKeyType = t + switch t { + case ECPrivateKey: + c.PrivateKeyType = ECPrivateKey + case RSAPrivateKey: + c.PrivateKeyType = RSAPrivateKey + case Ed25519PrivateKey: + c.PrivateKeyType = Ed25519PrivateKey + case ManagedPrivateKey: + c.PrivateKeyType = ManagedPrivateKey + } + default: + return errutil.UserError{Err: fmt.Sprintf("Unsupported key block type: %s", pemBlock.Type)} + } + + var err error + parsedBundle.PrivateKey, err = parsedBundle.getSigner() + if err != nil { + return errutil.UserError{Err: fmt.Sprintf("Error getting signer: %s", err)} + } + return nil +} + // ToCertBundle converts a byte-based raw DER certificate bundle // to a PEM-based string certificate bundle func (p *ParsedCertBundle) ToCertBundle() (*CertBundle, error) { @@ -505,6 +547,9 @@ func (p *ParsedCSRBundle) ToCSRBundle() (*CSRBundle, error) { case Ed25519PrivateKey: result.PrivateKeyType = "ed25519" block.Type = "PRIVATE KEY" + case ManagedPrivateKey: + result.PrivateKeyType = ManagedPrivateKey + block.Type = "PRIVATE KEY" default: return nil, errutil.InternalError{Err: "Could not determine private key type when creating block"} } @@ -613,7 +658,6 @@ func (p *ParsedCertBundle) GetTLSConfig(usage TLSUsage) (*tls.Config, error) { if tlsCert.Certificate != nil && len(tlsCert.Certificate) > 0 { tlsConfig.Certificates = []tls.Certificate{tlsCert} - tlsConfig.BuildNameToCertificate() } return tlsConfig, nil @@ -637,9 +681,32 @@ type URLEntries struct { OCSPServers []string `json:"ocsp_servers" structs:"ocsp_servers" mapstructure:"ocsp_servers"` } +type NotAfterBehavior int + +const ( + ErrNotAfterBehavior NotAfterBehavior = iota + TruncateNotAfterBehavior + PermitNotAfterBehavior +) + +var notAfterBehaviorNames = map[NotAfterBehavior]string{ + ErrNotAfterBehavior: "err", + TruncateNotAfterBehavior: "truncate", + PermitNotAfterBehavior: "permit", +} + +func (n NotAfterBehavior) String() string { + if name, ok := notAfterBehaviorNames[n]; ok && len(name) > 0 { + return name + } + + return "unknown" +} + type CAInfoBundle struct { ParsedCertBundle - URLs *URLEntries + URLs *URLEntries + LeafNotAfterBehavior NotAfterBehavior } func (b *CAInfoBundle) GetCAChain() []*CertBlock { @@ -651,13 +718,26 @@ func (b *CAInfoBundle) GetCAChain() []*CertBlock { (len(b.Certificate.AuthorityKeyId) == 0 && !bytes.Equal(b.Certificate.RawIssuer, b.Certificate.RawSubject)) { + chain = b.GetFullChain() + } + + return chain +} + +func (b *CAInfoBundle) GetFullChain() []*CertBlock { + var chain []*CertBlock + + // Some bundles already include the root included in the chain, + // so don't include it twice. + if len(b.CAChain) == 0 || !bytes.Equal(b.CAChain[0].Bytes, b.CertificateBytes) { chain = append(chain, &CertBlock{ Certificate: b.Certificate, Bytes: b.CertificateBytes, }) - if b.CAChain != nil && len(b.CAChain) > 0 { - chain = append(chain, b.CAChain...) - } + } + + if len(b.CAChain) > 0 { + chain = append(chain, b.CAChain...) } return chain @@ -699,6 +779,7 @@ type CreationParameters struct { PolicyIdentifiers []string BasicConstraintsValidForNonCA bool SignatureBits int + ForceAppendCaChain bool // Only used when signing a CA cert UseCSRValues bool @@ -786,3 +867,30 @@ func AddKeyUsages(data *CreationBundle, certTemplate *x509.Certificate) { certTemplate.ExtKeyUsage = append(certTemplate.ExtKeyUsage, x509.ExtKeyUsageMicrosoftKernelCodeSigning) } } + +// SetParsedPrivateKey sets the private key parameters on the bundle +func (p *KeyBundle) SetParsedPrivateKey(privateKey crypto.Signer, privateKeyType PrivateKeyType, privateKeyBytes []byte) { + p.PrivateKey = privateKey + p.PrivateKeyType = privateKeyType + p.PrivateKeyBytes = privateKeyBytes +} + +func (p *KeyBundle) ToPrivateKeyPemString() (string, error) { + block := pem.Block{} + + if p.PrivateKeyBytes != nil && len(p.PrivateKeyBytes) > 0 { + block.Bytes = p.PrivateKeyBytes + switch p.PrivateKeyType { + case RSAPrivateKey: + block.Type = "RSA PRIVATE KEY" + case ECPrivateKey: + block.Type = "EC PRIVATE KEY" + default: + block.Type = "PRIVATE KEY" + } + privateKeyPemString := strings.TrimSpace(string(pem.EncodeToMemory(&block))) + return privateKeyPemString, nil + } + + return "", errutil.InternalError{Err: "No Private Key Bytes to Wrap"} +} diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/compressutil/compress.go b/vendor/github.com/hashicorp/vault/sdk/helper/compressutil/compress.go index 356d4548fa..924f82a2a1 100644 --- a/vendor/github.com/hashicorp/vault/sdk/helper/compressutil/compress.go +++ b/vendor/github.com/hashicorp/vault/sdk/helper/compressutil/compress.go @@ -141,10 +141,21 @@ func Compress(data []byte, config *CompressionConfig) ([]byte, error) { // If the first byte isn't a canary byte, then the utility returns a boolean // value indicating that the input was not compressed. func Decompress(data []byte) ([]byte, bool, error) { + bytes, _, notCompressed, err := DecompressWithCanary(data) + return bytes, notCompressed, err +} + +// DecompressWithCanary checks if the first byte in the input matches the canary byte. +// If the first byte is a canary byte, then the input past the canary byte +// will be decompressed using the method specified in the given configuration. The type of compression used is also +// returned. If the first byte isn't a canary byte, then the utility returns a boolean +// value indicating that the input was not compressed. +func DecompressWithCanary(data []byte) ([]byte, string, bool, error) { var err error var reader io.ReadCloser + var compressionType string if data == nil || len(data) == 0 { - return nil, false, fmt.Errorf("'data' being decompressed is empty") + return nil, "", false, fmt.Errorf("'data' being decompressed is empty") } canary := data[0] @@ -155,43 +166,47 @@ func Decompress(data []byte) ([]byte, bool, error) { // byte and try to decompress the data that is after the canary. case CompressionCanaryGzip: if len(data) < 2 { - return nil, false, fmt.Errorf("invalid 'data' after the canary") + return nil, "", false, fmt.Errorf("invalid 'data' after the canary") } reader, err = gzip.NewReader(bytes.NewReader(cData)) + compressionType = CompressionTypeGzip case CompressionCanaryLZW: if len(data) < 2 { - return nil, false, fmt.Errorf("invalid 'data' after the canary") + return nil, "", false, fmt.Errorf("invalid 'data' after the canary") } reader = lzw.NewReader(bytes.NewReader(cData), lzw.LSB, 8) + compressionType = CompressionTypeLZW case CompressionCanarySnappy: if len(data) < 2 { - return nil, false, fmt.Errorf("invalid 'data' after the canary") + return nil, "", false, fmt.Errorf("invalid 'data' after the canary") } reader = &CompressUtilReadCloser{ Reader: snappy.NewReader(bytes.NewReader(cData)), } + compressionType = CompressionTypeSnappy case CompressionCanaryLZ4: if len(data) < 2 { - return nil, false, fmt.Errorf("invalid 'data' after the canary") + return nil, "", false, fmt.Errorf("invalid 'data' after the canary") } reader = &CompressUtilReadCloser{ Reader: lz4.NewReader(bytes.NewReader(cData)), } + compressionType = CompressionTypeLZ4 default: // If the first byte doesn't match the canary byte, it means // that the content was not compressed at all. Indicate the // caller that the input was not compressed. - return nil, true, nil + return nil, "", true, nil } if err != nil { - return nil, false, errwrap.Wrapf("failed to create a compression reader: {{err}}", err) + return nil, "", false, errwrap.Wrapf("failed to create a compression reader: {{err}}", err) } if reader == nil { - return nil, false, fmt.Errorf("failed to create a compression reader") + return nil, "", false, fmt.Errorf("failed to create a compression reader") } // Close the io.ReadCloser @@ -200,8 +215,8 @@ func Decompress(data []byte) ([]byte, bool, error) { // Read all the compressed data into a buffer var buf bytes.Buffer if _, err = io.Copy(&buf, reader); err != nil { - return nil, false, err + return nil, "", false, err } - return buf.Bytes(), false, nil + return buf.Bytes(), compressionType, false, nil } diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/consts/agent.go b/vendor/github.com/hashicorp/vault/sdk/helper/consts/agent.go index b62962e37e..55be844e14 100644 --- a/vendor/github.com/hashicorp/vault/sdk/helper/consts/agent.go +++ b/vendor/github.com/hashicorp/vault/sdk/helper/consts/agent.go @@ -3,3 +3,10 @@ package consts // AgentPathCacheClear is the path that the agent will use as its cache-clear // endpoint. const AgentPathCacheClear = "/agent/v1/cache-clear" + +// AgentPathMetrics is the path the the agent will use to expose its internal +// metrics. +const AgentPathMetrics = "/agent/v1/metrics" + +// AgentPathQuit is the path that the agent will use to trigger stopping it. +const AgentPathQuit = "/agent/v1/quit" diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/consts/consts.go b/vendor/github.com/hashicorp/vault/sdk/helper/consts/consts.go index b10f57a229..c431e2e594 100644 --- a/vendor/github.com/hashicorp/vault/sdk/helper/consts/consts.go +++ b/vendor/github.com/hashicorp/vault/sdk/helper/consts/consts.go @@ -32,4 +32,6 @@ const ( // ReplicationResolverALPN is the negotiated protocol used for // resolving replicaiton addresses ReplicationResolverALPN = "replication_resolver_v1" + + VaultEnableFilePermissionsCheckEnv = "VAULT_ENABLE_FILE_PERMISSIONS_CHECK" ) diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/consts/token_consts.go b/vendor/github.com/hashicorp/vault/sdk/helper/consts/token_consts.go new file mode 100644 index 0000000000..2b4e0278bf --- /dev/null +++ b/vendor/github.com/hashicorp/vault/sdk/helper/consts/token_consts.go @@ -0,0 +1,10 @@ +package consts + +const ( + ServiceTokenPrefix = "hvs." + BatchTokenPrefix = "hvb." + RecoveryTokenPrefix = "hvr." + LegacyServiceTokenPrefix = "s." + LegacyBatchTokenPrefix = "b." + LegacyRecoveryTokenPrefix = "r." +) diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.go b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.go new file mode 100644 index 0000000000..cbf50335d0 --- /dev/null +++ b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.go @@ -0,0 +1,47 @@ +package pluginutil + +import ( + context "context" + "fmt" + + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +type PluginMultiplexingServerImpl struct { + UnimplementedPluginMultiplexingServer + + Supported bool +} + +func (pm PluginMultiplexingServerImpl) MultiplexingSupport(ctx context.Context, req *MultiplexingSupportRequest) (*MultiplexingSupportResponse, error) { + return &MultiplexingSupportResponse{ + Supported: pm.Supported, + }, nil +} + +func MultiplexingSupported(ctx context.Context, cc grpc.ClientConnInterface) (bool, error) { + if cc == nil { + return false, fmt.Errorf("client connection is nil") + } + + req := new(MultiplexingSupportRequest) + resp, err := NewPluginMultiplexingClient(cc).MultiplexingSupport(ctx, req) + if err != nil { + + // If the server does not implement the multiplexing server then we can + // assume it is not multiplexed + if status.Code(err) == codes.Unimplemented { + return false, nil + } + + return false, err + } + if resp == nil { + // Somehow got a nil response, assume not multiplexed + return false, nil + } + + return resp.Supported, nil +} diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.pb.go b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.pb.go new file mode 100644 index 0000000000..d0ff51e57b --- /dev/null +++ b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.pb.go @@ -0,0 +1,213 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.27.1 +// protoc v3.19.4 +// source: sdk/helper/pluginutil/multiplexing.proto + +package pluginutil + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type MultiplexingSupportRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *MultiplexingSupportRequest) Reset() { + *x = MultiplexingSupportRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_sdk_helper_pluginutil_multiplexing_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MultiplexingSupportRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MultiplexingSupportRequest) ProtoMessage() {} + +func (x *MultiplexingSupportRequest) ProtoReflect() protoreflect.Message { + mi := &file_sdk_helper_pluginutil_multiplexing_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MultiplexingSupportRequest.ProtoReflect.Descriptor instead. +func (*MultiplexingSupportRequest) Descriptor() ([]byte, []int) { + return file_sdk_helper_pluginutil_multiplexing_proto_rawDescGZIP(), []int{0} +} + +type MultiplexingSupportResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Supported bool `protobuf:"varint,1,opt,name=supported,proto3" json:"supported,omitempty"` +} + +func (x *MultiplexingSupportResponse) Reset() { + *x = MultiplexingSupportResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_sdk_helper_pluginutil_multiplexing_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MultiplexingSupportResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MultiplexingSupportResponse) ProtoMessage() {} + +func (x *MultiplexingSupportResponse) ProtoReflect() protoreflect.Message { + mi := &file_sdk_helper_pluginutil_multiplexing_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MultiplexingSupportResponse.ProtoReflect.Descriptor instead. +func (*MultiplexingSupportResponse) Descriptor() ([]byte, []int) { + return file_sdk_helper_pluginutil_multiplexing_proto_rawDescGZIP(), []int{1} +} + +func (x *MultiplexingSupportResponse) GetSupported() bool { + if x != nil { + return x.Supported + } + return false +} + +var File_sdk_helper_pluginutil_multiplexing_proto protoreflect.FileDescriptor + +var file_sdk_helper_pluginutil_multiplexing_proto_rawDesc = []byte{ + 0x0a, 0x28, 0x73, 0x64, 0x6b, 0x2f, 0x68, 0x65, 0x6c, 0x70, 0x65, 0x72, 0x2f, 0x70, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x75, 0x74, 0x69, 0x6c, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, + 0x78, 0x69, 0x6e, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x17, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, + 0x69, 0x6e, 0x67, 0x22, 0x1c, 0x0a, 0x1a, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, + 0x69, 0x6e, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x22, 0x3b, 0x0a, 0x1b, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, + 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x09, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x32, 0x97, + 0x01, 0x0a, 0x12, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, + 0x65, 0x78, 0x69, 0x6e, 0x67, 0x12, 0x80, 0x01, 0x0a, 0x13, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, + 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x33, 0x2e, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x75, 0x74, 0x69, 0x6c, 0x2e, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, + 0x78, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x75, 0x74, 0x69, 0x6c, 0x2e, + 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x2e, 0x4d, 0x75, 0x6c, + 0x74, 0x69, 0x70, 0x6c, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x32, 0x5a, 0x30, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, + 0x2f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x68, 0x65, 0x6c, 0x70, 0x65, + 0x72, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x75, 0x74, 0x69, 0x6c, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_sdk_helper_pluginutil_multiplexing_proto_rawDescOnce sync.Once + file_sdk_helper_pluginutil_multiplexing_proto_rawDescData = file_sdk_helper_pluginutil_multiplexing_proto_rawDesc +) + +func file_sdk_helper_pluginutil_multiplexing_proto_rawDescGZIP() []byte { + file_sdk_helper_pluginutil_multiplexing_proto_rawDescOnce.Do(func() { + file_sdk_helper_pluginutil_multiplexing_proto_rawDescData = protoimpl.X.CompressGZIP(file_sdk_helper_pluginutil_multiplexing_proto_rawDescData) + }) + return file_sdk_helper_pluginutil_multiplexing_proto_rawDescData +} + +var file_sdk_helper_pluginutil_multiplexing_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_sdk_helper_pluginutil_multiplexing_proto_goTypes = []interface{}{ + (*MultiplexingSupportRequest)(nil), // 0: pluginutil.multiplexing.MultiplexingSupportRequest + (*MultiplexingSupportResponse)(nil), // 1: pluginutil.multiplexing.MultiplexingSupportResponse +} +var file_sdk_helper_pluginutil_multiplexing_proto_depIdxs = []int32{ + 0, // 0: pluginutil.multiplexing.PluginMultiplexing.MultiplexingSupport:input_type -> pluginutil.multiplexing.MultiplexingSupportRequest + 1, // 1: pluginutil.multiplexing.PluginMultiplexing.MultiplexingSupport:output_type -> pluginutil.multiplexing.MultiplexingSupportResponse + 1, // [1:2] is the sub-list for method output_type + 0, // [0:1] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_sdk_helper_pluginutil_multiplexing_proto_init() } +func file_sdk_helper_pluginutil_multiplexing_proto_init() { + if File_sdk_helper_pluginutil_multiplexing_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_sdk_helper_pluginutil_multiplexing_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MultiplexingSupportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sdk_helper_pluginutil_multiplexing_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MultiplexingSupportResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_sdk_helper_pluginutil_multiplexing_proto_rawDesc, + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_sdk_helper_pluginutil_multiplexing_proto_goTypes, + DependencyIndexes: file_sdk_helper_pluginutil_multiplexing_proto_depIdxs, + MessageInfos: file_sdk_helper_pluginutil_multiplexing_proto_msgTypes, + }.Build() + File_sdk_helper_pluginutil_multiplexing_proto = out.File + file_sdk_helper_pluginutil_multiplexing_proto_rawDesc = nil + file_sdk_helper_pluginutil_multiplexing_proto_goTypes = nil + file_sdk_helper_pluginutil_multiplexing_proto_depIdxs = nil +} diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.proto b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.proto new file mode 100644 index 0000000000..aa2438b070 --- /dev/null +++ b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing.proto @@ -0,0 +1,13 @@ +syntax = "proto3"; +package pluginutil.multiplexing; + +option go_package = "github.com/hashicorp/vault/sdk/helper/pluginutil"; + +message MultiplexingSupportRequest {} +message MultiplexingSupportResponse { + bool supported = 1; +} + +service PluginMultiplexing { + rpc MultiplexingSupport(MultiplexingSupportRequest) returns (MultiplexingSupportResponse); +} diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing_grpc.pb.go b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing_grpc.pb.go new file mode 100644 index 0000000000..aa8d0e47ba --- /dev/null +++ b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/multiplexing_grpc.pb.go @@ -0,0 +1,101 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. + +package pluginutil + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// PluginMultiplexingClient is the client API for PluginMultiplexing service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. +type PluginMultiplexingClient interface { + MultiplexingSupport(ctx context.Context, in *MultiplexingSupportRequest, opts ...grpc.CallOption) (*MultiplexingSupportResponse, error) +} + +type pluginMultiplexingClient struct { + cc grpc.ClientConnInterface +} + +func NewPluginMultiplexingClient(cc grpc.ClientConnInterface) PluginMultiplexingClient { + return &pluginMultiplexingClient{cc} +} + +func (c *pluginMultiplexingClient) MultiplexingSupport(ctx context.Context, in *MultiplexingSupportRequest, opts ...grpc.CallOption) (*MultiplexingSupportResponse, error) { + out := new(MultiplexingSupportResponse) + err := c.cc.Invoke(ctx, "/pluginutil.multiplexing.PluginMultiplexing/MultiplexingSupport", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// PluginMultiplexingServer is the server API for PluginMultiplexing service. +// All implementations must embed UnimplementedPluginMultiplexingServer +// for forward compatibility +type PluginMultiplexingServer interface { + MultiplexingSupport(context.Context, *MultiplexingSupportRequest) (*MultiplexingSupportResponse, error) + mustEmbedUnimplementedPluginMultiplexingServer() +} + +// UnimplementedPluginMultiplexingServer must be embedded to have forward compatible implementations. +type UnimplementedPluginMultiplexingServer struct { +} + +func (UnimplementedPluginMultiplexingServer) MultiplexingSupport(context.Context, *MultiplexingSupportRequest) (*MultiplexingSupportResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method MultiplexingSupport not implemented") +} +func (UnimplementedPluginMultiplexingServer) mustEmbedUnimplementedPluginMultiplexingServer() {} + +// UnsafePluginMultiplexingServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to PluginMultiplexingServer will +// result in compilation errors. +type UnsafePluginMultiplexingServer interface { + mustEmbedUnimplementedPluginMultiplexingServer() +} + +func RegisterPluginMultiplexingServer(s grpc.ServiceRegistrar, srv PluginMultiplexingServer) { + s.RegisterService(&PluginMultiplexing_ServiceDesc, srv) +} + +func _PluginMultiplexing_MultiplexingSupport_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(MultiplexingSupportRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(PluginMultiplexingServer).MultiplexingSupport(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/pluginutil.multiplexing.PluginMultiplexing/MultiplexingSupport", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(PluginMultiplexingServer).MultiplexingSupport(ctx, req.(*MultiplexingSupportRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// PluginMultiplexing_ServiceDesc is the grpc.ServiceDesc for PluginMultiplexing service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var PluginMultiplexing_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "pluginutil.multiplexing.PluginMultiplexing", + HandlerType: (*PluginMultiplexingServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "MultiplexingSupport", + Handler: _PluginMultiplexing_MultiplexingSupport_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "sdk/helper/pluginutil/multiplexing.proto", +} diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/run_config.go b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/run_config.go index f801287d7d..cb804f60d8 100644 --- a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/run_config.go +++ b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/run_config.go @@ -9,9 +9,21 @@ import ( log "github.com/hashicorp/go-hclog" "github.com/hashicorp/go-plugin" + "github.com/hashicorp/vault/sdk/helper/consts" "github.com/hashicorp/vault/sdk/version" ) +type PluginClientConfig struct { + Name string + PluginType consts.PluginType + PluginSets map[int]plugin.PluginSet + HandshakeConfig plugin.HandshakeConfig + Logger log.Logger + IsMetadataMode bool + AutoMTLS bool + MLock bool +} + type runConfig struct { // Provided by PluginRunner command string @@ -21,12 +33,9 @@ type runConfig struct { // Initialized with what's in PluginRunner.Env, but can be added to env []string - wrapper RunnerUtil - pluginSets map[int]plugin.PluginSet - hs plugin.HandshakeConfig - logger log.Logger - isMetadataMode bool - autoMTLS bool + wrapper RunnerUtil + + PluginClientConfig } func (rc runConfig) makeConfig(ctx context.Context) (*plugin.ClientConfig, error) { @@ -34,19 +43,19 @@ func (rc runConfig) makeConfig(ctx context.Context) (*plugin.ClientConfig, error cmd.Env = append(cmd.Env, rc.env...) // Add the mlock setting to the ENV of the plugin - if rc.wrapper != nil && rc.wrapper.MlockEnabled() { + if rc.MLock || (rc.wrapper != nil && rc.wrapper.MlockEnabled()) { cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", PluginMlockEnabled, "true")) } cmd.Env = append(cmd.Env, fmt.Sprintf("%s=%s", PluginVaultVersionEnv, version.GetVersion().Version)) - if rc.isMetadataMode { - rc.logger = rc.logger.With("metadata", "true") + if rc.IsMetadataMode { + rc.Logger = rc.Logger.With("metadata", "true") } - metadataEnv := fmt.Sprintf("%s=%t", PluginMetadataModeEnv, rc.isMetadataMode) + metadataEnv := fmt.Sprintf("%s=%t", PluginMetadataModeEnv, rc.IsMetadataMode) cmd.Env = append(cmd.Env, metadataEnv) var clientTLSConfig *tls.Config - if !rc.autoMTLS && !rc.isMetadataMode { + if !rc.AutoMTLS && !rc.IsMetadataMode { // Get a CA TLS Certificate certBytes, key, err := generateCert() if err != nil { @@ -76,17 +85,17 @@ func (rc runConfig) makeConfig(ctx context.Context) (*plugin.ClientConfig, error } clientConfig := &plugin.ClientConfig{ - HandshakeConfig: rc.hs, - VersionedPlugins: rc.pluginSets, + HandshakeConfig: rc.HandshakeConfig, + VersionedPlugins: rc.PluginSets, Cmd: cmd, SecureConfig: secureConfig, TLSConfig: clientTLSConfig, - Logger: rc.logger, + Logger: rc.Logger, AllowedProtocols: []plugin.Protocol{ plugin.ProtocolNetRPC, plugin.ProtocolGRPC, }, - AutoMTLS: rc.autoMTLS, + AutoMTLS: rc.AutoMTLS, } return clientConfig, nil } @@ -117,31 +126,37 @@ func Runner(wrapper RunnerUtil) RunOpt { func PluginSets(pluginSets map[int]plugin.PluginSet) RunOpt { return func(rc *runConfig) { - rc.pluginSets = pluginSets + rc.PluginSets = pluginSets } } func HandshakeConfig(hs plugin.HandshakeConfig) RunOpt { return func(rc *runConfig) { - rc.hs = hs + rc.HandshakeConfig = hs } } func Logger(logger log.Logger) RunOpt { return func(rc *runConfig) { - rc.logger = logger + rc.Logger = logger } } func MetadataMode(isMetadataMode bool) RunOpt { return func(rc *runConfig) { - rc.isMetadataMode = isMetadataMode + rc.IsMetadataMode = isMetadataMode } } func AutoMTLS(autoMTLS bool) RunOpt { return func(rc *runConfig) { - rc.autoMTLS = autoMTLS + rc.AutoMTLS = autoMTLS + } +} + +func MLock(mlock bool) RunOpt { + return func(rc *runConfig) { + rc.MLock = mlock } } diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/runner.go b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/runner.go index ecd60eeb34..f2822efc10 100644 --- a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/runner.go +++ b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/runner.go @@ -8,6 +8,7 @@ import ( plugin "github.com/hashicorp/go-plugin" "github.com/hashicorp/vault/sdk/helper/consts" "github.com/hashicorp/vault/sdk/helper/wrapping" + "google.golang.org/grpc" ) // Looker defines the plugin Lookup function that looks into the plugin catalog @@ -21,6 +22,7 @@ type Looker interface { // configuration and wrapping data in a response wrapped token. // logical.SystemView implementations satisfy this interface. type RunnerUtil interface { + NewPluginClient(ctx context.Context, config PluginClientConfig) (PluginClient, error) ResponseWrapData(ctx context.Context, data map[string]interface{}, ttl time.Duration, jwt bool) (*wrapping.ResponseWrapInfo, error) MlockEnabled() bool } @@ -31,6 +33,13 @@ type LookRunnerUtil interface { RunnerUtil } +type PluginClient interface { + Conn() grpc.ClientConnInterface + plugin.ClientProtocol +} + +const MultiplexingCtxKey string = "multiplex_id" + // PluginRunner defines the metadata needed to run a plugin securely with // go-plugin. type PluginRunner struct { diff --git a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/tls.go b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/tls.go index f78f04014c..c5fff6d701 100644 --- a/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/tls.go +++ b/vendor/github.com/hashicorp/vault/sdk/helper/pluginutil/tls.go @@ -83,8 +83,6 @@ func createClientTLSConfig(certBytes []byte, key *ecdsa.PrivateKey) (*tls.Config MinVersion: tls.VersionTLS12, } - tlsConfig.BuildNameToCertificate() - return tlsConfig, nil } diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/auth.go b/vendor/github.com/hashicorp/vault/sdk/logical/auth.go index 2bfb6e0015..62707e8195 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/auth.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/auth.go @@ -8,7 +8,8 @@ import ( ) // Auth is the resulting authentication information that is part of -// Response for credential backends. +// Response for credential backends. It's also attached to Request objects and +// defines the authentication used for the request. This value is audit logged. type Auth struct { LeaseOptions @@ -100,8 +101,29 @@ type Auth struct { // Orphan is set if the token does not have a parent Orphan bool `json:"orphan"` + + // PolicyResults is the set of policies that grant the token access to the + // requesting path. + PolicyResults *PolicyResults `json:"policy_results"` + + // MFARequirement + MFARequirement *MFARequirement `json:"mfa_requirement"` + + // EntityCreated is set to true if an entity is created as part of a login request + EntityCreated bool `json:"entity_created"` } func (a *Auth) GoString() string { return fmt.Sprintf("*%#v", *a) } + +type PolicyResults struct { + Allowed bool `json:"allowed"` + GrantingPolicies []PolicyInfo `json:"granting_policies"` +} + +type PolicyInfo struct { + Name string `json:"name"` + NamespaceId string `json:"namespace_id"` + Type string `json:"type"` +} diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/connection.go b/vendor/github.com/hashicorp/vault/sdk/logical/connection.go index a504b10c39..5be8630770 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/connection.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/connection.go @@ -10,6 +10,9 @@ type Connection struct { // RemoteAddr is the network address that sent the request. RemoteAddr string `json:"remote_addr"` + // RemotePort is the network port that sent the request. + RemotePort int `json:"remote_port"` + // ConnState is the TLS connection state if applicable. ConnState *tls.ConnectionState `sentinel:""` } diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/identity.pb.go b/vendor/github.com/hashicorp/vault/sdk/logical/identity.pb.go index b221ccc3b3..4b1a36b398 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/identity.pb.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/identity.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.19.4 // source: sdk/logical/identity.proto package logical @@ -310,6 +310,171 @@ func (x *Group) GetNamespaceID() string { return "" } +type MFAMethodID struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + ID string `protobuf:"bytes,2,opt,name=id,proto3" json:"id,omitempty"` + UsesPasscode bool `protobuf:"varint,3,opt,name=uses_passcode,json=usesPasscode,proto3" json:"uses_passcode,omitempty"` +} + +func (x *MFAMethodID) Reset() { + *x = MFAMethodID{} + if protoimpl.UnsafeEnabled { + mi := &file_sdk_logical_identity_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MFAMethodID) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MFAMethodID) ProtoMessage() {} + +func (x *MFAMethodID) ProtoReflect() protoreflect.Message { + mi := &file_sdk_logical_identity_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MFAMethodID.ProtoReflect.Descriptor instead. +func (*MFAMethodID) Descriptor() ([]byte, []int) { + return file_sdk_logical_identity_proto_rawDescGZIP(), []int{3} +} + +func (x *MFAMethodID) GetType() string { + if x != nil { + return x.Type + } + return "" +} + +func (x *MFAMethodID) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *MFAMethodID) GetUsesPasscode() bool { + if x != nil { + return x.UsesPasscode + } + return false +} + +type MFAConstraintAny struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Any []*MFAMethodID `protobuf:"bytes,1,rep,name=any,proto3" json:"any,omitempty"` +} + +func (x *MFAConstraintAny) Reset() { + *x = MFAConstraintAny{} + if protoimpl.UnsafeEnabled { + mi := &file_sdk_logical_identity_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MFAConstraintAny) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MFAConstraintAny) ProtoMessage() {} + +func (x *MFAConstraintAny) ProtoReflect() protoreflect.Message { + mi := &file_sdk_logical_identity_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MFAConstraintAny.ProtoReflect.Descriptor instead. +func (*MFAConstraintAny) Descriptor() ([]byte, []int) { + return file_sdk_logical_identity_proto_rawDescGZIP(), []int{4} +} + +func (x *MFAConstraintAny) GetAny() []*MFAMethodID { + if x != nil { + return x.Any + } + return nil +} + +type MFARequirement struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + MFARequestID string `protobuf:"bytes,1,opt,name=mfa_request_id,json=mfaRequestId,proto3" json:"mfa_request_id,omitempty"` + MFAConstraints map[string]*MFAConstraintAny `protobuf:"bytes,2,rep,name=mfa_constraints,json=mfaConstraints,proto3" json:"mfa_constraints,omitempty" protobuf_key:"bytes,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` +} + +func (x *MFARequirement) Reset() { + *x = MFARequirement{} + if protoimpl.UnsafeEnabled { + mi := &file_sdk_logical_identity_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *MFARequirement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MFARequirement) ProtoMessage() {} + +func (x *MFARequirement) ProtoReflect() protoreflect.Message { + mi := &file_sdk_logical_identity_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MFARequirement.ProtoReflect.Descriptor instead. +func (*MFARequirement) Descriptor() ([]byte, []int) { + return file_sdk_logical_identity_proto_rawDescGZIP(), []int{5} +} + +func (x *MFARequirement) GetMFARequestID() string { + if x != nil { + return x.MFARequestID + } + return "" +} + +func (x *MFARequirement) GetMFAConstraints() map[string]*MFAConstraintAny { + if x != nil { + return x.MFAConstraints + } + return nil +} + var File_sdk_logical_identity_proto protoreflect.FileDescriptor var file_sdk_logical_identity_proto_rawDesc = []byte{ @@ -372,10 +537,34 @@ var file_sdk_logical_identity_proto_rawDesc = []byte{ 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, - 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x2f, - 0x73, 0x64, 0x6b, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x01, 0x22, 0x56, 0x0a, 0x0b, 0x4d, 0x46, 0x41, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49, 0x44, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x02, 0x69, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x73, 0x5f, 0x70, 0x61, 0x73, + 0x73, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x75, 0x73, 0x65, + 0x73, 0x50, 0x61, 0x73, 0x73, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x3a, 0x0a, 0x10, 0x4d, 0x46, 0x41, + 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x79, 0x12, 0x26, 0x0a, + 0x03, 0x61, 0x6e, 0x79, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x6f, 0x67, + 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x4d, 0x46, 0x41, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x49, 0x44, + 0x52, 0x03, 0x61, 0x6e, 0x79, 0x22, 0xea, 0x01, 0x0a, 0x0e, 0x4d, 0x46, 0x41, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x24, 0x0a, 0x0e, 0x6d, 0x66, 0x61, 0x5f, + 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6d, 0x66, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x64, 0x12, 0x54, + 0x0a, 0x0f, 0x6d, 0x66, 0x61, 0x5f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, + 0x6c, 0x2e, 0x4d, 0x46, 0x41, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x2e, 0x4d, 0x66, 0x61, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x6d, 0x66, 0x61, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, + 0x69, 0x6e, 0x74, 0x73, 0x1a, 0x5c, 0x0a, 0x13, 0x4d, 0x66, 0x61, 0x43, 0x6f, 0x6e, 0x73, 0x74, + 0x72, 0x61, 0x69, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2f, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6c, + 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x2e, 0x4d, 0x46, 0x41, 0x43, 0x6f, 0x6e, 0x73, 0x74, 0x72, + 0x61, 0x69, 0x6e, 0x74, 0x41, 0x6e, 0x79, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x42, 0x28, 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x68, 0x61, 0x73, 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x76, 0x61, 0x75, 0x6c, 0x74, + 0x2f, 0x73, 0x64, 0x6b, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -390,27 +579,34 @@ func file_sdk_logical_identity_proto_rawDescGZIP() []byte { return file_sdk_logical_identity_proto_rawDescData } -var file_sdk_logical_identity_proto_msgTypes = make([]protoimpl.MessageInfo, 7) +var file_sdk_logical_identity_proto_msgTypes = make([]protoimpl.MessageInfo, 11) var file_sdk_logical_identity_proto_goTypes = []interface{}{ - (*Entity)(nil), // 0: logical.Entity - (*Alias)(nil), // 1: logical.Alias - (*Group)(nil), // 2: logical.Group - nil, // 3: logical.Entity.MetadataEntry - nil, // 4: logical.Alias.MetadataEntry - nil, // 5: logical.Alias.CustomMetadataEntry - nil, // 6: logical.Group.MetadataEntry + (*Entity)(nil), // 0: logical.Entity + (*Alias)(nil), // 1: logical.Alias + (*Group)(nil), // 2: logical.Group + (*MFAMethodID)(nil), // 3: logical.MFAMethodID + (*MFAConstraintAny)(nil), // 4: logical.MFAConstraintAny + (*MFARequirement)(nil), // 5: logical.MFARequirement + nil, // 6: logical.Entity.MetadataEntry + nil, // 7: logical.Alias.MetadataEntry + nil, // 8: logical.Alias.CustomMetadataEntry + nil, // 9: logical.Group.MetadataEntry + nil, // 10: logical.MFARequirement.MFAConstraintsEntry } var file_sdk_logical_identity_proto_depIDxs = []int32{ - 1, // 0: logical.Entity.aliases:type_name -> logical.Alias - 3, // 1: logical.Entity.metadata:type_name -> logical.Entity.MetadataEntry - 4, // 2: logical.Alias.metadata:type_name -> logical.Alias.MetadataEntry - 5, // 3: logical.Alias.custom_metadata:type_name -> logical.Alias.CustomMetadataEntry - 6, // 4: logical.Group.metadata:type_name -> logical.Group.MetadataEntry - 5, // [5:5] is the sub-list for method output_type - 5, // [5:5] is the sub-list for method input_type - 5, // [5:5] is the sub-list for extension type_name - 5, // [5:5] is the sub-list for extension extendee - 0, // [0:5] is the sub-list for field type_name + 1, // 0: logical.Entity.aliases:type_name -> logical.Alias + 6, // 1: logical.Entity.metadata:type_name -> logical.Entity.MetadataEntry + 7, // 2: logical.Alias.metadata:type_name -> logical.Alias.MetadataEntry + 8, // 3: logical.Alias.custom_metadata:type_name -> logical.Alias.CustomMetadataEntry + 9, // 4: logical.Group.metadata:type_name -> logical.Group.MetadataEntry + 3, // 5: logical.MFAConstraintAny.any:type_name -> logical.MFAMethodID + 10, // 6: logical.MFARequirement.mfa_constraints:type_name -> logical.MFARequirement.MFAConstraintsEntry + 4, // 7: logical.MFARequirement.MFAConstraintsEntry.value:type_name -> logical.MFAConstraintAny + 8, // [8:8] is the sub-list for method output_type + 8, // [8:8] is the sub-list for method input_type + 8, // [8:8] is the sub-list for extension type_name + 8, // [8:8] is the sub-list for extension extendee + 0, // [0:8] is the sub-list for field type_name } func init() { file_sdk_logical_identity_proto_init() } @@ -455,6 +651,42 @@ func file_sdk_logical_identity_proto_init() { return nil } } + file_sdk_logical_identity_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MFAMethodID); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sdk_logical_identity_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MFAConstraintAny); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_sdk_logical_identity_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*MFARequirement); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -462,7 +694,7 @@ func file_sdk_logical_identity_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_sdk_logical_identity_proto_rawDesc, NumEnums: 0, - NumMessages: 7, + NumMessages: 11, NumExtensions: 0, NumServices: 0, }, diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/identity.proto b/vendor/github.com/hashicorp/vault/sdk/logical/identity.proto index 11c7678231..ea2e373b18 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/identity.proto +++ b/vendor/github.com/hashicorp/vault/sdk/logical/identity.proto @@ -73,4 +73,19 @@ message Group { // NamespaceID is the identifier of the namespace to which this group // belongs to. string namespace_id = 4; -} +} + +message MFAMethodID { + string type = 1; + string id = 2; + bool uses_passcode = 3; +} + +message MFAConstraintAny { + repeated MFAMethodID any = 1; +} + +message MFARequirement { + string mfa_request_id = 1; + map mfa_constraints = 2; +} diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/logical.go b/vendor/github.com/hashicorp/vault/sdk/logical/logical.go index cec2d19c0e..fb9619ae20 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/logical.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/logical.go @@ -38,7 +38,6 @@ func (b BackendType) String() string { // allows for a "procfs" like interaction, as internal state can be exposed by // acting like a logical backend and being mounted. type Backend interface { - // Initialize is used to initialize a plugin after it has been mounted. Initialize(context.Context, *InitializationRequest) error @@ -113,18 +112,19 @@ type Factory func(context.Context, *BackendConfig) (Backend, error) // Paths is the structure of special paths that is used for SpecialPaths. type Paths struct { - // Root are the paths that require a root token to access + // Root are the API paths that require a root token to access Root []string - // Unauthenticated are the paths that can be accessed without any auth. + // Unauthenticated are the API paths that can be accessed without any auth. // These can't be regular expressions, it is either exact match, a prefix // match and/or a wildcard match. For prefix match, append '*' as a suffix. // For a wildcard match, use '+' in the segment to match any identifier // (e.g. 'foo/+/bar'). Note that '+' can't be adjacent to a non-slash. Unauthenticated []string - // LocalStorage are paths (prefixes) that are local to this instance; this - // indicates that these paths should not be replicated + // LocalStorage are storage paths (prefixes) that are local to this cluster; + // this indicates that these paths should not be replicated across performance clusters + // (DR replication is unaffected). LocalStorage []string // SealWrapStorage are storage paths that, when using a capable seal, diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/managed_key.go b/vendor/github.com/hashicorp/vault/sdk/logical/managed_key.go new file mode 100644 index 0000000000..750459542c --- /dev/null +++ b/vendor/github.com/hashicorp/vault/sdk/logical/managed_key.go @@ -0,0 +1,84 @@ +package logical + +import ( + "context" + "crypto" + "io" +) + +type KeyUsage int + +const ( + KeyUsageEncrypt KeyUsage = 1 + iota + KeyUsageDecrypt + KeyUsageSign + KeyUsageVerify + KeyUsageWrap + KeyUsageUnwrap +) + +type ManagedKey interface { + // Name is a human-readable identifier for a managed key that may change/renamed. Use Uuid if a + // long term consistent identifier is needed. + Name() string + // UUID is a unique identifier for a managed key that is guaranteed to remain + // consistent even if a key is migrated or renamed. + UUID() string + // Present returns true if the key is established in the KMS. This may return false if for example + // an HSM library is not configured on all cluster nodes. + Present(ctx context.Context) (bool, error) + + // AllowsAll returns true if all the requested usages are supported by the managed key. + AllowsAll(usages []KeyUsage) bool +} + +type ( + ManagedKeyConsumer func(context.Context, ManagedKey) error + ManagedSigningKeyConsumer func(context.Context, ManagedSigningKey) error +) + +type ManagedKeySystemView interface { + // WithManagedKeyByName retrieves an instantiated managed key for consumption by the given function. The + // provided key can only be used within the scope of that function call + WithManagedKeyByName(ctx context.Context, keyName, backendUUID string, f ManagedKeyConsumer) error + // WithManagedKeyByUUID retrieves an instantiated managed key for consumption by the given function. The + // provided key can only be used within the scope of that function call + WithManagedKeyByUUID(ctx context.Context, keyUuid, backendUUID string, f ManagedKeyConsumer) error + + // WithManagedSigningKeyByName retrieves an instantiated managed signing key for consumption by the given function, + // with the same semantics as WithManagedKeyByName + WithManagedSigningKeyByName(ctx context.Context, keyName, backendUUID string, f ManagedSigningKeyConsumer) error + // WithManagedSigningKeyByUUID retrieves an instantiated managed signing key for consumption by the given function, + // with the same semantics as WithManagedKeyByUUID + WithManagedSigningKeyByUUID(ctx context.Context, keyUuid, backendUUID string, f ManagedSigningKeyConsumer) error +} + +type ManagedAsymmetricKey interface { + ManagedKey + GetPublicKey(ctx context.Context) (crypto.PublicKey, error) +} + +type ManagedKeyLifecycle interface { + // GenerateKey generates a key in the KMS if it didn't yet exist, returning the id. + // If it already existed, returns the existing id. KMSKey's key material is ignored if present. + GenerateKey(ctx context.Context) (string, error) +} + +type ManagedSigningKey interface { + ManagedAsymmetricKey + + // Sign returns a digital signature of the provided value. The SignerOpts param must provide the hash function + // that generated the value (if any). + // The optional randomSource specifies the source of random values and may be ignored by the implementation + // (such as on HSMs with their own internal RNG) + Sign(ctx context.Context, value []byte, randomSource io.Reader, opts crypto.SignerOpts) ([]byte, error) + + // Verify verifies the provided signature against the value. The SignerOpts param must provide the hash function + // that generated the value (if any). + // If true is returned the signature is correct, false otherwise. + Verify(ctx context.Context, signature, value []byte, opts crypto.SignerOpts) (bool, error) + + // GetSigner returns an implementation of crypto.Signer backed by the managed key. This should be called + // as needed so as to use per request contexts. + GetSigner(context.Context) (crypto.Signer, error) +} diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/plugin.pb.go b/vendor/github.com/hashicorp/vault/sdk/logical/plugin.pb.go index 46de77666d..1fb53f9a79 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/plugin.pb.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/plugin.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.1 -// protoc v3.17.3 +// protoc v3.19.4 // source: sdk/logical/plugin.proto package logical @@ -27,6 +27,10 @@ type PluginEnvironment struct { // VaultVersion is the version of the Vault server VaultVersion string `protobuf:"bytes,1,opt,name=vault_version,json=vaultVersion,proto3" json:"vault_version,omitempty"` + // VaultVersionPrerelease is the prerelease information of the Vault server + VaultVersionPrerelease string `protobuf:"bytes,2,opt,name=vault_version_prerelease,json=vaultVersionPrerelease,proto3" json:"vault_version_prerelease,omitempty"` + // VaultVersionMetadata is the version metadata of the Vault server + VaultVersionMetadata string `protobuf:"bytes,3,opt,name=vault_version_metadata,json=vaultVersionMetadata,proto3" json:"vault_version_metadata,omitempty"` } func (x *PluginEnvironment) Reset() { @@ -68,18 +72,39 @@ func (x *PluginEnvironment) GetVaultVersion() string { return "" } +func (x *PluginEnvironment) GetVaultVersionPrerelease() string { + if x != nil { + return x.VaultVersionPrerelease + } + return "" +} + +func (x *PluginEnvironment) GetVaultVersionMetadata() string { + if x != nil { + return x.VaultVersionMetadata + } + return "" +} + var File_sdk_logical_plugin_proto protoreflect.FileDescriptor var file_sdk_logical_plugin_proto_rawDesc = []byte{ 0x0a, 0x18, 0x73, 0x64, 0x6b, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6c, 0x6f, 0x67, 0x69, - 0x63, 0x61, 0x6c, 0x22, 0x38, 0x0a, 0x11, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x45, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x75, 0x6c, - 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x42, 0x28, 0x5a, - 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, 0x68, - 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x73, 0x64, 0x6b, 0x2f, - 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x63, 0x61, 0x6c, 0x22, 0xa8, 0x01, 0x0a, 0x11, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x45, 0x6e, + 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x76, 0x61, 0x75, + 0x6c, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x38, + 0x0a, 0x18, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x72, 0x65, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x16, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x72, + 0x65, 0x72, 0x65, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x16, 0x76, 0x61, 0x75, 0x6c, + 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x56, + 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x28, + 0x5a, 0x26, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x73, + 0x68, 0x69, 0x63, 0x6f, 0x72, 0x70, 0x2f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x2f, 0x73, 0x64, 0x6b, + 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x63, 0x61, 0x6c, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/plugin.proto b/vendor/github.com/hashicorp/vault/sdk/logical/plugin.proto index 5992c21395..f2df6c75d9 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/plugin.proto +++ b/vendor/github.com/hashicorp/vault/sdk/logical/plugin.proto @@ -7,4 +7,10 @@ package logical; message PluginEnvironment { // VaultVersion is the version of the Vault server string vault_version = 1; + + // VaultVersionPrerelease is the prerelease information of the Vault server + string vault_version_prerelease = 2; + + // VaultVersionMetadata is the version metadata of the Vault server + string vault_version_metadata = 3; } diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/request.go b/vendor/github.com/hashicorp/vault/sdk/logical/request.go index 829c155fd0..1c400a4cb7 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/request.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/request.go @@ -220,6 +220,10 @@ type Request struct { // this will be the sha256(sorted policies + namespace) associated with the // client token. ClientID string `json:"client_id" structs:"client_id" mapstructure:"client_id" sentinel:""` + + // InboundSSCToken is the token that arrives on an inbound request, supplied + // by the vault user. + InboundSSCToken string } // Clone returns a deep copy of the request by using copystructure @@ -377,3 +381,14 @@ type InitializationRequest struct { // Storage can be used to durably store and retrieve state. Storage Storage } + +type CustomHeader struct { + Name string + Value string +} + +type CtxKeyInFlightRequestID struct{} + +func (c CtxKeyInFlightRequestID) String() string { + return "in-flight-request-ID" +} diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/response.go b/vendor/github.com/hashicorp/vault/sdk/logical/response.go index a675112539..e8276c789a 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/response.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/response.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "net/http" + "strconv" "sync/atomic" "github.com/hashicorp/vault/sdk/helper/wrapping" @@ -209,13 +210,103 @@ func NewHTTPResponseWriter(w http.ResponseWriter) *HTTPResponseWriter { } // Write will write the bytes to the underlying io.Writer. -func (rw *HTTPResponseWriter) Write(bytes []byte) (int, error) { - atomic.StoreUint32(rw.written, 1) - - return rw.ResponseWriter.Write(bytes) +func (w *HTTPResponseWriter) Write(bytes []byte) (int, error) { + atomic.StoreUint32(w.written, 1) + return w.ResponseWriter.Write(bytes) } // Written tells us if the writer has been written to yet. -func (rw *HTTPResponseWriter) Written() bool { - return atomic.LoadUint32(rw.written) == 1 +func (w *HTTPResponseWriter) Written() bool { + return atomic.LoadUint32(w.written) == 1 +} + +type WrappingResponseWriter interface { + http.ResponseWriter + Wrapped() http.ResponseWriter +} + +type StatusHeaderResponseWriter struct { + wrapped http.ResponseWriter + wroteHeader bool + StatusCode int + headers map[string][]*CustomHeader +} + +func NewStatusHeaderResponseWriter(w http.ResponseWriter, h map[string][]*CustomHeader) *StatusHeaderResponseWriter { + return &StatusHeaderResponseWriter{ + wrapped: w, + wroteHeader: false, + StatusCode: 200, + headers: h, + } +} + +func (w *StatusHeaderResponseWriter) Wrapped() http.ResponseWriter { + return w.wrapped +} + +func (w *StatusHeaderResponseWriter) Header() http.Header { + return w.wrapped.Header() +} + +func (w *StatusHeaderResponseWriter) Write(buf []byte) (int, error) { + // It is allowed to only call ResponseWriter.Write and skip + // ResponseWriter.WriteHeader. An example of such a situation is + // "handleUIStub". The Write function will internally set the status code + // 200 for the response for which that call might invoke other + // implementations of the WriteHeader function. So, we still need to set + // the custom headers. In cases where both WriteHeader and Write of + // statusHeaderResponseWriter struct are called the internal call to the + // WriterHeader invoked from inside Write method won't change the headers. + if !w.wroteHeader { + w.setCustomResponseHeaders(w.StatusCode) + } + + return w.wrapped.Write(buf) } + +func (w *StatusHeaderResponseWriter) WriteHeader(statusCode int) { + w.setCustomResponseHeaders(statusCode) + w.wrapped.WriteHeader(statusCode) + w.StatusCode = statusCode + // in cases where Write is called after WriteHeader, let's prevent setting + // ResponseWriter headers twice + w.wroteHeader = true +} + +func (w *StatusHeaderResponseWriter) setCustomResponseHeaders(status int) { + sch := w.headers + if sch == nil { + return + } + + // Checking the validity of the status code + if status >= 600 || status < 100 { + return + } + + // setter function to set the headers + setter := func(hvl []*CustomHeader) { + for _, hv := range hvl { + w.Header().Set(hv.Name, hv.Value) + } + } + + // Setting the default headers first + setter(sch["default"]) + + // setting the Xyy pattern first + d := fmt.Sprintf("%vxx", status/100) + if val, ok := sch[d]; ok { + setter(val) + } + + // Setting the specific headers + if val, ok := sch[strconv.Itoa(status)]; ok { + setter(val) + } + + return +} + +var _ WrappingResponseWriter = &StatusHeaderResponseWriter{} diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/response_util.go b/vendor/github.com/hashicorp/vault/sdk/logical/response_util.go index 353ef569a4..7454189f1d 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/response_util.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/response_util.go @@ -17,7 +17,7 @@ import ( func RespondErrorCommon(req *Request, resp *Response, err error) (int, error) { if err == nil && (resp == nil || !resp.IsError()) { switch { - case req.Operation == ReadOperation, req.Operation == PatchOperation: + case req.Operation == ReadOperation: if resp == nil { return http.StatusNotFound, nil } @@ -120,6 +120,8 @@ func RespondErrorCommon(req *Request, resp *Response, err error) (int, error) { statusCode = http.StatusPreconditionFailed case errwrap.Contains(err, ErrPathFunctionalityRemoved.Error()): statusCode = http.StatusNotFound + case errwrap.Contains(err, ErrRelativePath.Error()): + statusCode = http.StatusBadRequest } } diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/system_view.go b/vendor/github.com/hashicorp/vault/sdk/logical/system_view.go index 8ea6766b99..83b4a951e8 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/system_view.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/system_view.go @@ -56,6 +56,10 @@ type SystemView interface { // name. Returns a PluginRunner or an error if a plugin can not be found. LookupPlugin(context.Context, string, consts.PluginType) (*pluginutil.PluginRunner, error) + // NewPluginClient returns a client for managing the lifecycle of plugin + // processes + NewPluginClient(ctx context.Context, config pluginutil.PluginClientConfig) (pluginutil.PluginClient, error) + // MlockEnabled returns the configuration setting for enabling mlock on // plugins. MlockEnabled() bool @@ -152,6 +156,10 @@ func (d StaticSystemView) ReplicationState() consts.ReplicationState { return d.ReplicationStateVal } +func (d StaticSystemView) NewPluginClient(ctx context.Context, config pluginutil.PluginClientConfig) (pluginutil.PluginClient, error) { + return nil, errors.New("NewPluginClient is not implemented in StaticSystemView") +} + func (d StaticSystemView) ResponseWrapData(_ context.Context, data map[string]interface{}, ttl time.Duration, jwt bool) (*wrapping.ResponseWrapInfo, error) { return nil, errors.New("ResponseWrapData is not implemented in StaticSystemView") } diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/token.go b/vendor/github.com/hashicorp/vault/sdk/logical/token.go index 0586d768ea..ebebd4ad9c 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/token.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/token.go @@ -1,7 +1,11 @@ package logical import ( + "crypto/sha256" + "encoding/base64" "fmt" + "sort" + "strings" "time" sockaddr "github.com/hashicorp/go-sockaddr" @@ -20,13 +24,24 @@ const ( // TokenTypeBatch is a batch token TokenTypeBatch - // TokenTypeDefaultService, configured on a mount, means that if + // TokenTypeDefaultService configured on a mount, means that if // TokenTypeDefault is sent back by the mount, create Service tokens TokenTypeDefaultService - // TokenTypeDefaultBatch, configured on a mount, means that if + // TokenTypeDefaultBatch configured on a mount, means that if // TokenTypeDefault is sent back by the mount, create Batch tokens TokenTypeDefaultBatch + + // ClientIDTWEDelimiter Delimiter between the string fields used to generate a client + // ID for tokens without entities. This is the 0 character, which + // is a non-printable string. Please see unicode.IsPrint for details. + ClientIDTWEDelimiter = rune('\x00') + + // SortedPoliciesTWEDelimiter Delimiter between each policy in the sorted policies used to + // generate a client ID for tokens without entities. This is the 127 + // character, which is a non-printable string. Please see unicode.IsPrint + // for details. + SortedPoliciesTWEDelimiter = rune('\x7F') ) func (t *TokenType) UnmarshalJSON(b []byte) error { @@ -78,6 +93,10 @@ type TokenEntry struct { // ID of this entry, generally a random UUID ID string `json:"id" mapstructure:"id" structs:"id" sentinel:""` + // ExternalID is the ID of a newly created service + // token that will be returned to a user + ExternalID string `json:"-"` + // Accessor for this token, a random UUID Accessor string `json:"accessor" mapstructure:"accessor" structs:"accessor" sentinel:""` @@ -154,6 +173,46 @@ type TokenEntry struct { CubbyholeID string `json:"cubbyhole_id" mapstructure:"cubbyhole_id" structs:"cubbyhole_id" sentinel:""` } +// CreateClientID returns the client ID, and a boolean which is false if the clientID +// has an entity, and true otherwise +func (te *TokenEntry) CreateClientID() (string, bool) { + var clientIDInputBuilder strings.Builder + + // if entry has an associated entity ID, return it + if te.EntityID != "" { + return te.EntityID, false + } + + // The entry is associated with a TWE (token without entity). In this case + // we must create a client ID by calculating the following formula: + // clientID = SHA256(sorted policies + namespace) + + // Step 1: Copy entry policies to a new struct + sortedPolicies := make([]string, len(te.Policies)) + copy(sortedPolicies, te.Policies) + + // Step 2: Sort and join copied policies + sort.Strings(sortedPolicies) + for _, pol := range sortedPolicies { + clientIDInputBuilder.WriteRune(SortedPoliciesTWEDelimiter) + clientIDInputBuilder.WriteString(pol) + } + + // Step 3: Add namespace ID + clientIDInputBuilder.WriteRune(ClientIDTWEDelimiter) + clientIDInputBuilder.WriteString(te.NamespaceID) + + if clientIDInputBuilder.Len() == 0 { + return "", true + } + // Step 4: Remove the first character in the string, as it's an unnecessary delimiter + clientIDInput := clientIDInputBuilder.String()[1:] + + // Step 5: Hash the sum + hashed := sha256.Sum256([]byte(clientIDInput)) + return base64.StdEncoding.EncodeToString(hashed[:]), true +} + func (te *TokenEntry) SentinelGet(key string) (interface{}, error) { if te == nil { return nil, nil diff --git a/vendor/github.com/hashicorp/vault/sdk/logical/translate_response.go b/vendor/github.com/hashicorp/vault/sdk/logical/translate_response.go index 6f0ff342f9..de5ea8fdbe 100644 --- a/vendor/github.com/hashicorp/vault/sdk/logical/translate_response.go +++ b/vendor/github.com/hashicorp/vault/sdk/logical/translate_response.go @@ -39,6 +39,8 @@ func LogicalResponseToHTTPResponse(input *Response) *HTTPResponse { EntityID: input.Auth.EntityID, TokenType: input.Auth.TokenType.String(), Orphan: input.Auth.Orphan, + MFARequirement: input.Auth.MFARequirement, + NumUses: input.Auth.NumUses, } } @@ -108,6 +110,8 @@ type HTTPAuth struct { EntityID string `json:"entity_id"` TokenType string `json:"token_type"` Orphan bool `json:"orphan"` + MFARequirement *MFARequirement `json:"mfa_requirement"` + NumUses int `json:"num_uses"` } type HTTPWrapInfo struct { @@ -134,8 +138,8 @@ func (h HTTPSysInjector) MarshalJSON() ([]byte, error) { } // Marshaling a response will always be a JSON object, meaning it will // always start with '{', so we hijack this to prepend necessary values - // Make a guess at the capacity, and write the object opener - buf := bytes.NewBuffer(make([]byte, 0, len(j)*2)) + + var buf bytes.Buffer buf.WriteRune('{') for k, v := range h.Response.Data { // Marshal each key/value individually diff --git a/vendor/github.com/hashicorp/vault/sdk/physical/cache.go b/vendor/github.com/hashicorp/vault/sdk/physical/cache.go index 52768776a6..ffac33189b 100644 --- a/vendor/github.com/hashicorp/vault/sdk/physical/cache.go +++ b/vendor/github.com/hashicorp/vault/sdk/physical/cache.go @@ -184,7 +184,7 @@ func (c *Cache) Get(ctx context.Context, key string) (*Entry, error) { return nil, err } - // Cache the result + // Cache the result, even if nil c.lru.Add(key, ent) return ent, nil diff --git a/vendor/github.com/hashicorp/vault/sdk/physical/physical.go b/vendor/github.com/hashicorp/vault/sdk/physical/physical.go index 8cc4e9ab17..808abd50fc 100644 --- a/vendor/github.com/hashicorp/vault/sdk/physical/physical.go +++ b/vendor/github.com/hashicorp/vault/sdk/physical/physical.go @@ -21,6 +21,7 @@ const ( const ( ErrValueTooLarge = "put failed due to value being too large" + ErrKeyTooLarge = "put failed due to key being too large" ) // Backend is the interface required for a physical diff --git a/vendor/github.com/hashicorp/vault/sdk/version/cgo.go b/vendor/github.com/hashicorp/vault/sdk/version/cgo.go index 2ed493a1fb..5bc93e5bfc 100644 --- a/vendor/github.com/hashicorp/vault/sdk/version/cgo.go +++ b/vendor/github.com/hashicorp/vault/sdk/version/cgo.go @@ -1,4 +1,4 @@ -// +build cgo +//go:build cgo package version diff --git a/vendor/github.com/hashicorp/vault/sdk/version/version.go b/vendor/github.com/hashicorp/vault/sdk/version/version.go index e0db36e8f0..78b8eb829c 100644 --- a/vendor/github.com/hashicorp/vault/sdk/version/version.go +++ b/vendor/github.com/hashicorp/vault/sdk/version/version.go @@ -7,10 +7,11 @@ import ( // VersionInfo type VersionInfo struct { - Revision string - Version string - VersionPrerelease string - VersionMetadata string + Revision string `json:"revision,omitempty"` + Version string `json:"version,omitempty"` + VersionPrerelease string `json:"version_prerelease,omitempty"` + VersionMetadata string `json:"version_metadata,omitempty"` + BuildDate string `json:"build_date,omitempty"` } func GetVersion() *VersionInfo { @@ -29,6 +30,7 @@ func GetVersion() *VersionInfo { Version: ver, VersionPrerelease: rel, VersionMetadata: md, + BuildDate: BuildDate, } } @@ -37,7 +39,7 @@ func (c *VersionInfo) VersionNumber() string { return "(version unknown)" } - version := fmt.Sprintf("%s", c.Version) + version := c.Version if c.VersionPrerelease != "" { version = fmt.Sprintf("%s-%s", version, c.VersionPrerelease) @@ -70,5 +72,9 @@ func (c *VersionInfo) FullVersionNumber(rev bool) string { fmt.Fprintf(&versionString, " (%s)", c.Revision) } + if c.BuildDate != "" { + fmt.Fprintf(&versionString, ", built %s", c.BuildDate) + } + return versionString.String() } diff --git a/vendor/github.com/hashicorp/vault/sdk/version/version_base.go b/vendor/github.com/hashicorp/vault/sdk/version/version_base.go index 272099247c..2a21d313df 100644 --- a/vendor/github.com/hashicorp/vault/sdk/version/version_base.go +++ b/vendor/github.com/hashicorp/vault/sdk/version/version_base.go @@ -5,10 +5,13 @@ var ( GitCommit string GitDescribe string + // The compilation date. This will be filled in by the compiler. + BuildDate string + // Whether cgo is enabled or not; set at build time CgoEnabled bool - Version = "1.9.0" - VersionPrerelease = "dev" + Version = "1.11.0" + VersionPrerelease = "dev1" VersionMetadata = "" ) diff --git a/vendor/github.com/hashicorp/yamux/addr.go b/vendor/github.com/hashicorp/yamux/addr.go index be6ebca9c7..f6a00199cd 100644 --- a/vendor/github.com/hashicorp/yamux/addr.go +++ b/vendor/github.com/hashicorp/yamux/addr.go @@ -54,7 +54,7 @@ func (s *Stream) LocalAddr() net.Addr { return s.session.LocalAddr() } -// LocalAddr returns the remote address +// RemoteAddr returns the remote address func (s *Stream) RemoteAddr() net.Addr { return s.session.RemoteAddr() } diff --git a/vendor/github.com/hashicorp/yamux/const.go b/vendor/github.com/hashicorp/yamux/const.go index 4f52938287..2fdbf844a8 100644 --- a/vendor/github.com/hashicorp/yamux/const.go +++ b/vendor/github.com/hashicorp/yamux/const.go @@ -5,6 +5,25 @@ import ( "fmt" ) +// NetError implements net.Error +type NetError struct { + err error + timeout bool + temporary bool +} + +func (e *NetError) Error() string { + return e.err.Error() +} + +func (e *NetError) Timeout() bool { + return e.timeout +} + +func (e *NetError) Temporary() bool { + return e.temporary +} + var ( // ErrInvalidVersion means we received a frame with an // invalid version @@ -30,7 +49,13 @@ var ( ErrRecvWindowExceeded = fmt.Errorf("recv window exceeded") // ErrTimeout is used when we reach an IO deadline - ErrTimeout = fmt.Errorf("i/o deadline reached") + ErrTimeout = &NetError{ + err: fmt.Errorf("i/o deadline reached"), + + // Error should meet net.Error interface for timeouts for compatability + // with standard library expectations, such as http servers. + timeout: true, + } // ErrStreamClosed is returned when using a closed stream ErrStreamClosed = fmt.Errorf("stream closed") diff --git a/vendor/github.com/hashicorp/yamux/mux.go b/vendor/github.com/hashicorp/yamux/mux.go index 7abc7c744c..0c3e67b022 100644 --- a/vendor/github.com/hashicorp/yamux/mux.go +++ b/vendor/github.com/hashicorp/yamux/mux.go @@ -3,6 +3,7 @@ package yamux import ( "fmt" "io" + "log" "os" "time" ) @@ -30,8 +31,27 @@ type Config struct { // window size that we allow for a stream. MaxStreamWindowSize uint32 - // LogOutput is used to control the log destination + // StreamOpenTimeout is the maximum amount of time that a stream will + // be allowed to remain in pending state while waiting for an ack from the peer. + // Once the timeout is reached the session will be gracefully closed. + // A zero value disables the StreamOpenTimeout allowing unbounded + // blocking on OpenStream calls. + StreamOpenTimeout time.Duration + + // StreamCloseTimeout is the maximum time that a stream will allowed to + // be in a half-closed state when `Close` is called before forcibly + // closing the connection. Forcibly closed connections will empty the + // receive buffer, drop any future packets received for that stream, + // and send a RST to the remote side. + StreamCloseTimeout time.Duration + + // LogOutput is used to control the log destination. Either Logger or + // LogOutput can be set, not both. LogOutput io.Writer + + // Logger is used to pass in the logger to be used. Either Logger or + // LogOutput can be set, not both. + Logger *log.Logger } // DefaultConfig is used to return a default configuration @@ -42,6 +62,8 @@ func DefaultConfig() *Config { KeepAliveInterval: 30 * time.Second, ConnectionWriteTimeout: 10 * time.Second, MaxStreamWindowSize: initialStreamWindow, + StreamCloseTimeout: 5 * time.Minute, + StreamOpenTimeout: 75 * time.Second, LogOutput: os.Stderr, } } @@ -57,6 +79,11 @@ func VerifyConfig(config *Config) error { if config.MaxStreamWindowSize < initialStreamWindow { return fmt.Errorf("MaxStreamWindowSize must be larger than %d", initialStreamWindow) } + if config.LogOutput != nil && config.Logger != nil { + return fmt.Errorf("both Logger and LogOutput may not be set, select one") + } else if config.LogOutput == nil && config.Logger == nil { + return fmt.Errorf("one of Logger or LogOutput must be set, select one") + } return nil } diff --git a/vendor/github.com/hashicorp/yamux/session.go b/vendor/github.com/hashicorp/yamux/session.go index 32ba02e023..046a3d3014 100644 --- a/vendor/github.com/hashicorp/yamux/session.go +++ b/vendor/github.com/hashicorp/yamux/session.go @@ -80,15 +80,20 @@ type Session struct { // or to directly send a header type sendReady struct { Hdr []byte - Body io.Reader + Body []byte Err chan error } // newSession is used to construct a new session func newSession(config *Config, conn io.ReadWriteCloser, client bool) *Session { + logger := config.Logger + if logger == nil { + logger = log.New(config.LogOutput, "", log.LstdFlags) + } + s := &Session{ config: config, - logger: log.New(config.LogOutput, "", log.LstdFlags), + logger: logger, conn: conn, bufRead: bufio.NewReader(conn), pings: make(map[uint32]chan struct{}), @@ -179,6 +184,10 @@ GET_ID: s.inflight[id] = struct{}{} s.streamLock.Unlock() + if s.config.StreamOpenTimeout > 0 { + go s.setOpenTimeout(stream) + } + // Send the window update to create if err := stream.sendWindowUpdate(); err != nil { select { @@ -191,6 +200,27 @@ GET_ID: return stream, nil } +// setOpenTimeout implements a timeout for streams that are opened but not established. +// If the StreamOpenTimeout is exceeded we assume the peer is unable to ACK, +// and close the session. +// The number of running timers is bounded by the capacity of the synCh. +func (s *Session) setOpenTimeout(stream *Stream) { + timer := time.NewTimer(s.config.StreamOpenTimeout) + defer timer.Stop() + + select { + case <-stream.establishCh: + return + case <-s.shutdownCh: + return + case <-timer.C: + // Timeout reached while waiting for ACK. + // Close the session to force connection re-establishment. + s.logger.Printf("[ERR] yamux: aborted stream open (destination=%s): %v", s.RemoteAddr().String(), ErrTimeout.err) + s.Close() + } +} + // Accept is used to block until the next available stream // is ready to be accepted. func (s *Session) Accept() (net.Conn, error) { @@ -322,7 +352,7 @@ func (s *Session) keepalive() { } // waitForSendErr waits to send a header, checking for a potential shutdown -func (s *Session) waitForSend(hdr header, body io.Reader) error { +func (s *Session) waitForSend(hdr header, body []byte) error { errCh := make(chan error, 1) return s.waitForSendErr(hdr, body, errCh) } @@ -330,7 +360,7 @@ func (s *Session) waitForSend(hdr header, body io.Reader) error { // waitForSendErr waits to send a header with optional data, checking for a // potential shutdown. Since there's the expectation that sends can happen // in a timely manner, we enforce the connection write timeout here. -func (s *Session) waitForSendErr(hdr header, body io.Reader, errCh chan error) error { +func (s *Session) waitForSendErr(hdr header, body []byte, errCh chan error) error { t := timerPool.Get() timer := t.(*time.Timer) timer.Reset(s.config.ConnectionWriteTimeout) @@ -410,7 +440,7 @@ func (s *Session) send() { // Send data from a body if given if ready.Body != nil { - _, err := io.Copy(s.conn, ready.Body) + _, err := s.conn.Write(ready.Body) if err != nil { s.logger.Printf("[ERR] yamux: Failed to write body: %v", err) asyncSendErr(ready.Err, err) diff --git a/vendor/github.com/hashicorp/yamux/stream.go b/vendor/github.com/hashicorp/yamux/stream.go index aa23919739..f444bdc3c0 100644 --- a/vendor/github.com/hashicorp/yamux/stream.go +++ b/vendor/github.com/hashicorp/yamux/stream.go @@ -49,6 +49,13 @@ type Stream struct { readDeadline atomic.Value // time.Time writeDeadline atomic.Value // time.Time + + // establishCh is notified if the stream is established or being closed. + establishCh chan struct{} + + // closeTimer is set with stateLock held to honor the StreamCloseTimeout + // setting on Session. + closeTimer *time.Timer } // newStream is used to construct a new stream within @@ -66,6 +73,7 @@ func newStream(session *Session, id uint32, state streamState) *Stream { sendWindow: initialStreamWindow, recvNotifyCh: make(chan struct{}, 1), sendNotifyCh: make(chan struct{}, 1), + establishCh: make(chan struct{}, 1), } s.readDeadline.Store(time.Time{}) s.writeDeadline.Store(time.Time{}) @@ -161,7 +169,7 @@ func (s *Stream) Write(b []byte) (n int, err error) { func (s *Stream) write(b []byte) (n int, err error) { var flags uint16 var max uint32 - var body io.Reader + var body []byte START: s.stateLock.Lock() switch s.state { @@ -187,7 +195,7 @@ START: // Send up to our send window max = min(window, uint32(len(b))) - body = bytes.NewReader(b[:max]) + body = b[:max] // Send the header s.sendHdr.encode(typeData, flags, s.id, max) @@ -312,6 +320,27 @@ func (s *Stream) Close() error { s.stateLock.Unlock() return nil SEND_CLOSE: + // This shouldn't happen (the more realistic scenario to cancel the + // timer is via processFlags) but just in case this ever happens, we + // cancel the timer to prevent dangling timers. + if s.closeTimer != nil { + s.closeTimer.Stop() + s.closeTimer = nil + } + + // If we have a StreamCloseTimeout set we start the timeout timer. + // We do this only if we're not already closing the stream since that + // means this was a graceful close. + // + // This prevents memory leaks if one side (this side) closes and the + // remote side poorly behaves and never responds with a FIN to complete + // the close. After the specified timeout, we clean our resources up no + // matter what. + if !closeStream && s.session.config.StreamCloseTimeout > 0 { + s.closeTimer = time.AfterFunc( + s.session.config.StreamCloseTimeout, s.closeTimeout) + } + s.stateLock.Unlock() s.sendClose() s.notifyWaiting() @@ -321,6 +350,22 @@ SEND_CLOSE: return nil } +// closeTimeout is called after StreamCloseTimeout during a close to +// close this stream. +func (s *Stream) closeTimeout() { + // Close our side forcibly + s.forceClose() + + // Free the stream from the session map + s.session.closeStream(s.id) + + // Send a RST so the remote side closes too. + s.sendLock.Lock() + defer s.sendLock.Unlock() + s.sendHdr.encode(typeWindowUpdate, flagRST, s.id, 0) + s.session.sendNoWait(s.sendHdr) +} + // forceClose is used for when the session is exiting func (s *Stream) forceClose() { s.stateLock.Lock() @@ -332,20 +377,27 @@ func (s *Stream) forceClose() { // processFlags is used to update the state of the stream // based on set flags, if any. Lock must be held func (s *Stream) processFlags(flags uint16) error { + s.stateLock.Lock() + defer s.stateLock.Unlock() + // Close the stream without holding the state lock closeStream := false defer func() { if closeStream { + if s.closeTimer != nil { + // Stop our close timeout timer since we gracefully closed + s.closeTimer.Stop() + } + s.session.closeStream(s.id) } }() - s.stateLock.Lock() - defer s.stateLock.Unlock() if flags&flagACK == flagACK { if s.state == streamSYNSent { s.state = streamEstablished } + asyncNotify(s.establishCh) s.session.establishStream(s.id) } if flags&flagFIN == flagFIN { @@ -378,6 +430,7 @@ func (s *Stream) processFlags(flags uint16) error { func (s *Stream) notifyWaiting() { asyncNotify(s.recvNotifyCh) asyncNotify(s.sendNotifyCh) + asyncNotify(s.establishCh) } // incrSendWindow updates the size of our send window @@ -446,15 +499,17 @@ func (s *Stream) SetDeadline(t time.Time) error { return nil } -// SetReadDeadline sets the deadline for future Read calls. +// SetReadDeadline sets the deadline for blocked and future Read calls. func (s *Stream) SetReadDeadline(t time.Time) error { s.readDeadline.Store(t) + asyncNotify(s.recvNotifyCh) return nil } -// SetWriteDeadline sets the deadline for future Write calls +// SetWriteDeadline sets the deadline for blocked and future Write calls func (s *Stream) SetWriteDeadline(t time.Time) error { s.writeDeadline.Store(t) + asyncNotify(s.sendNotifyCh) return nil } diff --git a/vendor/github.com/huin/goupnp/.gitignore b/vendor/github.com/huin/goupnp/.gitignore index 7a6e0ebe39..26031b608f 100644 --- a/vendor/github.com/huin/goupnp/.gitignore +++ b/vendor/github.com/huin/goupnp/.gitignore @@ -1,2 +1,3 @@ *.zip -*.sublime-workspace \ No newline at end of file +*.sublime-workspace +*.download \ No newline at end of file diff --git a/vendor/github.com/huin/goupnp/Makefile b/vendor/github.com/huin/goupnp/Makefile new file mode 100644 index 0000000000..3ddd8695c0 --- /dev/null +++ b/vendor/github.com/huin/goupnp/Makefile @@ -0,0 +1,2 @@ +gen: + (cd cmd/goupnpdcpgen/; go install); go generate ./... \ No newline at end of file diff --git a/vendor/github.com/huin/goupnp/dcps/internetgateway1/internetgateway1.go b/vendor/github.com/huin/goupnp/dcps/internetgateway1/internetgateway1.go index 0ac9d54586..942bb09218 100644 --- a/vendor/github.com/huin/goupnp/dcps/internetgateway1/internetgateway1.go +++ b/vendor/github.com/huin/goupnp/dcps/internetgateway1/internetgateway1.go @@ -1,6 +1,7 @@ // Client for UPnP Device Control Protocol Internet Gateway Device v1. // -// This DCP is documented in detail at: http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v1-Device.pdf +// This DCP is documented in detail at: +// - http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v1-Device.pdf // // Typically, use one of the New* functions to create clients for services. package internetgateway1 @@ -101,17 +102,17 @@ func newLANHostConfigManagement1ClientsFromGenericClients(genericClients []goupn return clients } -func (client *LANHostConfigManagement1) SetDHCPServerConfigurableCtx( +func (client *LANHostConfigManagement1) DeleteDNSServerCtx( ctx context.Context, - NewDHCPServerConfigurable bool, + NewDNSServers string, ) (err error) { // Request structure. request := &struct { - NewDHCPServerConfigurable string + NewDNSServers string }{} // BEGIN Marshal arguments into request. - if request.NewDHCPServerConfigurable, err = soap.MarshalBoolean(NewDHCPServerConfigurable); err != nil { + if request.NewDNSServers, err = soap.MarshalString(NewDNSServers); err != nil { return } // END Marshal arguments into request. @@ -120,7 +121,7 @@ func (client *LANHostConfigManagement1) SetDHCPServerConfigurableCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDHCPServerConfigurable", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteDNSServer", request, response); err != nil { return } @@ -130,59 +131,62 @@ func (client *LANHostConfigManagement1) SetDHCPServerConfigurableCtx( return } -// SetDHCPServerConfigurable is the legacy version of SetDHCPServerConfigurableCtx, but uses +// DeleteDNSServer is the legacy version of DeleteDNSServerCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetDHCPServerConfigurable(NewDHCPServerConfigurable bool) (err error) { - return client.SetDHCPServerConfigurableCtx(context.Background(), - NewDHCPServerConfigurable, +func (client *LANHostConfigManagement1) DeleteDNSServer(NewDNSServers string) (err error) { + return client.DeleteDNSServerCtx(context.Background(), + NewDNSServers, ) } -func (client *LANHostConfigManagement1) GetDHCPServerConfigurableCtx( +func (client *LANHostConfigManagement1) DeleteIPRouterCtx( ctx context.Context, -) (NewDHCPServerConfigurable bool, err error) { + NewIPRouters string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewIPRouters string + }{} // BEGIN Marshal arguments into request. + if request.NewIPRouters, err = soap.MarshalString(NewIPRouters); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewDHCPServerConfigurable string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDHCPServerConfigurable", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteIPRouter", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDHCPServerConfigurable, err = soap.UnmarshalBoolean(response.NewDHCPServerConfigurable); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetDHCPServerConfigurable is the legacy version of GetDHCPServerConfigurableCtx, but uses +// DeleteIPRouter is the legacy version of DeleteIPRouterCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetDHCPServerConfigurable() (NewDHCPServerConfigurable bool, err error) { - return client.GetDHCPServerConfigurableCtx(context.Background()) +func (client *LANHostConfigManagement1) DeleteIPRouter(NewIPRouters string) (err error) { + return client.DeleteIPRouterCtx(context.Background(), + NewIPRouters, + ) } -func (client *LANHostConfigManagement1) SetDHCPRelayCtx( +func (client *LANHostConfigManagement1) DeleteReservedAddressCtx( ctx context.Context, - NewDHCPRelay bool, + NewReservedAddresses string, ) (err error) { // Request structure. request := &struct { - NewDHCPRelay string + NewReservedAddresses string }{} // BEGIN Marshal arguments into request. - if request.NewDHCPRelay, err = soap.MarshalBoolean(NewDHCPRelay); err != nil { + if request.NewReservedAddresses, err = soap.MarshalString(NewReservedAddresses); err != nil { return } // END Marshal arguments into request. @@ -191,7 +195,7 @@ func (client *LANHostConfigManagement1) SetDHCPRelayCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDHCPRelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteReservedAddress", request, response); err != nil { return } @@ -201,17 +205,17 @@ func (client *LANHostConfigManagement1) SetDHCPRelayCtx( return } -// SetDHCPRelay is the legacy version of SetDHCPRelayCtx, but uses +// DeleteReservedAddress is the legacy version of DeleteReservedAddressCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetDHCPRelay(NewDHCPRelay bool) (err error) { - return client.SetDHCPRelayCtx(context.Background(), - NewDHCPRelay, +func (client *LANHostConfigManagement1) DeleteReservedAddress(NewReservedAddresses string) (err error) { + return client.DeleteReservedAddressCtx(context.Background(), + NewReservedAddresses, ) } -func (client *LANHostConfigManagement1) GetDHCPRelayCtx( +func (client *LANHostConfigManagement1) GetAddressRangeCtx( ctx context.Context, -) (NewDHCPRelay bool, err error) { +) (NewMinAddress string, NewMaxAddress string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -220,69 +224,70 @@ func (client *LANHostConfigManagement1) GetDHCPRelayCtx( // Response structure. response := &struct { - NewDHCPRelay string + NewMinAddress string + NewMaxAddress string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDHCPRelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetAddressRange", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDHCPRelay, err = soap.UnmarshalBoolean(response.NewDHCPRelay); err != nil { + if NewMinAddress, err = soap.UnmarshalString(response.NewMinAddress); err != nil { + return + } + if NewMaxAddress, err = soap.UnmarshalString(response.NewMaxAddress); err != nil { return } // END Unmarshal arguments from response. return } -// GetDHCPRelay is the legacy version of GetDHCPRelayCtx, but uses +// GetAddressRange is the legacy version of GetAddressRangeCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetDHCPRelay() (NewDHCPRelay bool, err error) { - return client.GetDHCPRelayCtx(context.Background()) +func (client *LANHostConfigManagement1) GetAddressRange() (NewMinAddress string, NewMaxAddress string, err error) { + return client.GetAddressRangeCtx(context.Background()) } -func (client *LANHostConfigManagement1) SetSubnetMaskCtx( +func (client *LANHostConfigManagement1) GetDHCPRelayCtx( ctx context.Context, - NewSubnetMask string, -) (err error) { +) (NewDHCPRelay bool, err error) { // Request structure. - request := &struct { - NewSubnetMask string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewSubnetMask, err = soap.MarshalString(NewSubnetMask); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDHCPRelay string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetSubnetMask", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDHCPRelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDHCPRelay, err = soap.UnmarshalBoolean(response.NewDHCPRelay); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetSubnetMask is the legacy version of SetSubnetMaskCtx, but uses +// GetDHCPRelay is the legacy version of GetDHCPRelayCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetSubnetMask(NewSubnetMask string) (err error) { - return client.SetSubnetMaskCtx(context.Background(), - NewSubnetMask, - ) +func (client *LANHostConfigManagement1) GetDHCPRelay() (NewDHCPRelay bool, err error) { + return client.GetDHCPRelayCtx(context.Background()) } -func (client *LANHostConfigManagement1) GetSubnetMaskCtx( +func (client *LANHostConfigManagement1) GetDHCPServerConfigurableCtx( ctx context.Context, -) (NewSubnetMask string, err error) { +) (NewDHCPServerConfigurable bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -291,101 +296,95 @@ func (client *LANHostConfigManagement1) GetSubnetMaskCtx( // Response structure. response := &struct { - NewSubnetMask string + NewDHCPServerConfigurable string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetSubnetMask", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDHCPServerConfigurable", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewSubnetMask, err = soap.UnmarshalString(response.NewSubnetMask); err != nil { + if NewDHCPServerConfigurable, err = soap.UnmarshalBoolean(response.NewDHCPServerConfigurable); err != nil { return } // END Unmarshal arguments from response. return } -// GetSubnetMask is the legacy version of GetSubnetMaskCtx, but uses +// GetDHCPServerConfigurable is the legacy version of GetDHCPServerConfigurableCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetSubnetMask() (NewSubnetMask string, err error) { - return client.GetSubnetMaskCtx(context.Background()) +func (client *LANHostConfigManagement1) GetDHCPServerConfigurable() (NewDHCPServerConfigurable bool, err error) { + return client.GetDHCPServerConfigurableCtx(context.Background()) } -func (client *LANHostConfigManagement1) SetIPRouterCtx( +func (client *LANHostConfigManagement1) GetDNSServersCtx( ctx context.Context, - NewIPRouters string, -) (err error) { +) (NewDNSServers string, err error) { // Request structure. - request := &struct { - NewIPRouters string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewIPRouters, err = soap.MarshalString(NewIPRouters); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDNSServers string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetIPRouter", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDNSServers", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDNSServers, err = soap.UnmarshalString(response.NewDNSServers); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetIPRouter is the legacy version of SetIPRouterCtx, but uses +// GetDNSServers is the legacy version of GetDNSServersCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetIPRouter(NewIPRouters string) (err error) { - return client.SetIPRouterCtx(context.Background(), - NewIPRouters, - ) +func (client *LANHostConfigManagement1) GetDNSServers() (NewDNSServers string, err error) { + return client.GetDNSServersCtx(context.Background()) } -func (client *LANHostConfigManagement1) DeleteIPRouterCtx( +func (client *LANHostConfigManagement1) GetDomainNameCtx( ctx context.Context, - NewIPRouters string, -) (err error) { +) (NewDomainName string, err error) { // Request structure. - request := &struct { - NewIPRouters string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewIPRouters, err = soap.MarshalString(NewIPRouters); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDomainName string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteIPRouter", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDomainName", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDomainName, err = soap.UnmarshalString(response.NewDomainName); err != nil { + return + } // END Unmarshal arguments from response. return } -// DeleteIPRouter is the legacy version of DeleteIPRouterCtx, but uses +// GetDomainName is the legacy version of GetDomainNameCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) DeleteIPRouter(NewIPRouters string) (err error) { - return client.DeleteIPRouterCtx(context.Background(), - NewIPRouters, - ) +func (client *LANHostConfigManagement1) GetDomainName() (NewDomainName string, err error) { + return client.GetDomainNameCtx(context.Background()) } func (client *LANHostConfigManagement1) GetIPRoutersListCtx( @@ -422,46 +421,43 @@ func (client *LANHostConfigManagement1) GetIPRoutersList() (NewIPRouters string, return client.GetIPRoutersListCtx(context.Background()) } -func (client *LANHostConfigManagement1) SetDomainNameCtx( +func (client *LANHostConfigManagement1) GetReservedAddressesCtx( ctx context.Context, - NewDomainName string, -) (err error) { +) (NewReservedAddresses string, err error) { // Request structure. - request := &struct { - NewDomainName string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewDomainName, err = soap.MarshalString(NewDomainName); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewReservedAddresses string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDomainName", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetReservedAddresses", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewReservedAddresses, err = soap.UnmarshalString(response.NewReservedAddresses); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetDomainName is the legacy version of SetDomainNameCtx, but uses +// GetReservedAddresses is the legacy version of GetReservedAddressesCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetDomainName(NewDomainName string) (err error) { - return client.SetDomainNameCtx(context.Background(), - NewDomainName, - ) +func (client *LANHostConfigManagement1) GetReservedAddresses() (NewReservedAddresses string, err error) { + return client.GetReservedAddressesCtx(context.Background()) } -func (client *LANHostConfigManagement1) GetDomainNameCtx( +func (client *LANHostConfigManagement1) GetSubnetMaskCtx( ctx context.Context, -) (NewDomainName string, err error) { +) (NewSubnetMask string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -470,27 +466,27 @@ func (client *LANHostConfigManagement1) GetDomainNameCtx( // Response structure. response := &struct { - NewDomainName string + NewSubnetMask string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDomainName", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetSubnetMask", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDomainName, err = soap.UnmarshalString(response.NewDomainName); err != nil { + if NewSubnetMask, err = soap.UnmarshalString(response.NewSubnetMask); err != nil { return } // END Unmarshal arguments from response. return } -// GetDomainName is the legacy version of GetDomainNameCtx, but uses +// GetSubnetMask is the legacy version of GetSubnetMaskCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetDomainName() (NewDomainName string, err error) { - return client.GetDomainNameCtx(context.Background()) +func (client *LANHostConfigManagement1) GetSubnetMask() (NewSubnetMask string, err error) { + return client.GetSubnetMaskCtx(context.Background()) } func (client *LANHostConfigManagement1) SetAddressRangeCtx( @@ -536,55 +532,54 @@ func (client *LANHostConfigManagement1) SetAddressRange(NewMinAddress string, Ne ) } -func (client *LANHostConfigManagement1) GetAddressRangeCtx( +func (client *LANHostConfigManagement1) SetDHCPRelayCtx( ctx context.Context, -) (NewMinAddress string, NewMaxAddress string, err error) { + NewDHCPRelay bool, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewDHCPRelay string + }{} // BEGIN Marshal arguments into request. + if request.NewDHCPRelay, err = soap.MarshalBoolean(NewDHCPRelay); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewMinAddress string - NewMaxAddress string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetAddressRange", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDHCPRelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewMinAddress, err = soap.UnmarshalString(response.NewMinAddress); err != nil { - return - } - if NewMaxAddress, err = soap.UnmarshalString(response.NewMaxAddress); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetAddressRange is the legacy version of GetAddressRangeCtx, but uses +// SetDHCPRelay is the legacy version of SetDHCPRelayCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetAddressRange() (NewMinAddress string, NewMaxAddress string, err error) { - return client.GetAddressRangeCtx(context.Background()) +func (client *LANHostConfigManagement1) SetDHCPRelay(NewDHCPRelay bool) (err error) { + return client.SetDHCPRelayCtx(context.Background(), + NewDHCPRelay, + ) } -func (client *LANHostConfigManagement1) SetReservedAddressCtx( +func (client *LANHostConfigManagement1) SetDHCPServerConfigurableCtx( ctx context.Context, - NewReservedAddresses string, + NewDHCPServerConfigurable bool, ) (err error) { // Request structure. request := &struct { - NewReservedAddresses string + NewDHCPServerConfigurable string }{} // BEGIN Marshal arguments into request. - if request.NewReservedAddresses, err = soap.MarshalString(NewReservedAddresses); err != nil { + if request.NewDHCPServerConfigurable, err = soap.MarshalBoolean(NewDHCPServerConfigurable); err != nil { return } // END Marshal arguments into request. @@ -593,7 +588,7 @@ func (client *LANHostConfigManagement1) SetReservedAddressCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetReservedAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDHCPServerConfigurable", request, response); err != nil { return } @@ -603,25 +598,25 @@ func (client *LANHostConfigManagement1) SetReservedAddressCtx( return } -// SetReservedAddress is the legacy version of SetReservedAddressCtx, but uses +// SetDHCPServerConfigurable is the legacy version of SetDHCPServerConfigurableCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetReservedAddress(NewReservedAddresses string) (err error) { - return client.SetReservedAddressCtx(context.Background(), - NewReservedAddresses, +func (client *LANHostConfigManagement1) SetDHCPServerConfigurable(NewDHCPServerConfigurable bool) (err error) { + return client.SetDHCPServerConfigurableCtx(context.Background(), + NewDHCPServerConfigurable, ) } -func (client *LANHostConfigManagement1) DeleteReservedAddressCtx( +func (client *LANHostConfigManagement1) SetDNSServerCtx( ctx context.Context, - NewReservedAddresses string, + NewDNSServers string, ) (err error) { // Request structure. request := &struct { - NewReservedAddresses string + NewDNSServers string }{} // BEGIN Marshal arguments into request. - if request.NewReservedAddresses, err = soap.MarshalString(NewReservedAddresses); err != nil { + if request.NewDNSServers, err = soap.MarshalString(NewDNSServers); err != nil { return } // END Marshal arguments into request. @@ -630,7 +625,7 @@ func (client *LANHostConfigManagement1) DeleteReservedAddressCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteReservedAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDNSServer", request, response); err != nil { return } @@ -640,59 +635,62 @@ func (client *LANHostConfigManagement1) DeleteReservedAddressCtx( return } -// DeleteReservedAddress is the legacy version of DeleteReservedAddressCtx, but uses +// SetDNSServer is the legacy version of SetDNSServerCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) DeleteReservedAddress(NewReservedAddresses string) (err error) { - return client.DeleteReservedAddressCtx(context.Background(), - NewReservedAddresses, +func (client *LANHostConfigManagement1) SetDNSServer(NewDNSServers string) (err error) { + return client.SetDNSServerCtx(context.Background(), + NewDNSServers, ) } -func (client *LANHostConfigManagement1) GetReservedAddressesCtx( +func (client *LANHostConfigManagement1) SetDomainNameCtx( ctx context.Context, -) (NewReservedAddresses string, err error) { + NewDomainName string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewDomainName string + }{} // BEGIN Marshal arguments into request. + if request.NewDomainName, err = soap.MarshalString(NewDomainName); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewReservedAddresses string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetReservedAddresses", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDomainName", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewReservedAddresses, err = soap.UnmarshalString(response.NewReservedAddresses); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetReservedAddresses is the legacy version of GetReservedAddressesCtx, but uses +// SetDomainName is the legacy version of SetDomainNameCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetReservedAddresses() (NewReservedAddresses string, err error) { - return client.GetReservedAddressesCtx(context.Background()) +func (client *LANHostConfigManagement1) SetDomainName(NewDomainName string) (err error) { + return client.SetDomainNameCtx(context.Background(), + NewDomainName, + ) } -func (client *LANHostConfigManagement1) SetDNSServerCtx( +func (client *LANHostConfigManagement1) SetIPRouterCtx( ctx context.Context, - NewDNSServers string, + NewIPRouters string, ) (err error) { // Request structure. request := &struct { - NewDNSServers string + NewIPRouters string }{} // BEGIN Marshal arguments into request. - if request.NewDNSServers, err = soap.MarshalString(NewDNSServers); err != nil { + if request.NewIPRouters, err = soap.MarshalString(NewIPRouters); err != nil { return } // END Marshal arguments into request. @@ -701,7 +699,7 @@ func (client *LANHostConfigManagement1) SetDNSServerCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDNSServer", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetIPRouter", request, response); err != nil { return } @@ -711,25 +709,25 @@ func (client *LANHostConfigManagement1) SetDNSServerCtx( return } -// SetDNSServer is the legacy version of SetDNSServerCtx, but uses +// SetIPRouter is the legacy version of SetIPRouterCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetDNSServer(NewDNSServers string) (err error) { - return client.SetDNSServerCtx(context.Background(), - NewDNSServers, +func (client *LANHostConfigManagement1) SetIPRouter(NewIPRouters string) (err error) { + return client.SetIPRouterCtx(context.Background(), + NewIPRouters, ) } -func (client *LANHostConfigManagement1) DeleteDNSServerCtx( +func (client *LANHostConfigManagement1) SetReservedAddressCtx( ctx context.Context, - NewDNSServers string, + NewReservedAddresses string, ) (err error) { // Request structure. request := &struct { - NewDNSServers string + NewReservedAddresses string }{} // BEGIN Marshal arguments into request. - if request.NewDNSServers, err = soap.MarshalString(NewDNSServers); err != nil { + if request.NewReservedAddresses, err = soap.MarshalString(NewReservedAddresses); err != nil { return } // END Marshal arguments into request. @@ -738,7 +736,7 @@ func (client *LANHostConfigManagement1) DeleteDNSServerCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteDNSServer", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetReservedAddress", request, response); err != nil { return } @@ -748,46 +746,49 @@ func (client *LANHostConfigManagement1) DeleteDNSServerCtx( return } -// DeleteDNSServer is the legacy version of DeleteDNSServerCtx, but uses +// SetReservedAddress is the legacy version of SetReservedAddressCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) DeleteDNSServer(NewDNSServers string) (err error) { - return client.DeleteDNSServerCtx(context.Background(), - NewDNSServers, +func (client *LANHostConfigManagement1) SetReservedAddress(NewReservedAddresses string) (err error) { + return client.SetReservedAddressCtx(context.Background(), + NewReservedAddresses, ) } -func (client *LANHostConfigManagement1) GetDNSServersCtx( +func (client *LANHostConfigManagement1) SetSubnetMaskCtx( ctx context.Context, -) (NewDNSServers string, err error) { + NewSubnetMask string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewSubnetMask string + }{} // BEGIN Marshal arguments into request. + if request.NewSubnetMask, err = soap.MarshalString(NewSubnetMask); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewDNSServers string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDNSServers", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetSubnetMask", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDNSServers, err = soap.UnmarshalString(response.NewDNSServers); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetDNSServers is the legacy version of GetDNSServersCtx, but uses +// SetSubnetMask is the legacy version of SetSubnetMaskCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetDNSServers() (NewDNSServers string, err error) { - return client.GetDNSServersCtx(context.Background()) +func (client *LANHostConfigManagement1) SetSubnetMask(NewSubnetMask string) (err error) { + return client.SetSubnetMaskCtx(context.Background(), + NewSubnetMask, + ) } // Layer3Forwarding1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:Layer3Forwarding:1". See @@ -850,75 +851,75 @@ func newLayer3Forwarding1ClientsFromGenericClients(genericClients []goupnp.Servi return clients } -func (client *Layer3Forwarding1) SetDefaultConnectionServiceCtx( +func (client *Layer3Forwarding1) GetDefaultConnectionServiceCtx( ctx context.Context, - NewDefaultConnectionService string, -) (err error) { +) (NewDefaultConnectionService string, err error) { // Request structure. - request := &struct { - NewDefaultConnectionService string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewDefaultConnectionService, err = soap.MarshalString(NewDefaultConnectionService); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDefaultConnectionService string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_Layer3Forwarding_1, "SetDefaultConnectionService", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_Layer3Forwarding_1, "GetDefaultConnectionService", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDefaultConnectionService, err = soap.UnmarshalString(response.NewDefaultConnectionService); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetDefaultConnectionService is the legacy version of SetDefaultConnectionServiceCtx, but uses +// GetDefaultConnectionService is the legacy version of GetDefaultConnectionServiceCtx, but uses // context.Background() as the context. -func (client *Layer3Forwarding1) SetDefaultConnectionService(NewDefaultConnectionService string) (err error) { - return client.SetDefaultConnectionServiceCtx(context.Background(), - NewDefaultConnectionService, - ) +func (client *Layer3Forwarding1) GetDefaultConnectionService() (NewDefaultConnectionService string, err error) { + return client.GetDefaultConnectionServiceCtx(context.Background()) } -func (client *Layer3Forwarding1) GetDefaultConnectionServiceCtx( +func (client *Layer3Forwarding1) SetDefaultConnectionServiceCtx( ctx context.Context, -) (NewDefaultConnectionService string, err error) { + NewDefaultConnectionService string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewDefaultConnectionService string + }{} // BEGIN Marshal arguments into request. + if request.NewDefaultConnectionService, err = soap.MarshalString(NewDefaultConnectionService); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewDefaultConnectionService string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_Layer3Forwarding_1, "GetDefaultConnectionService", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_Layer3Forwarding_1, "SetDefaultConnectionService", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDefaultConnectionService, err = soap.UnmarshalString(response.NewDefaultConnectionService); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetDefaultConnectionService is the legacy version of GetDefaultConnectionServiceCtx, but uses +// SetDefaultConnectionService is the legacy version of SetDefaultConnectionServiceCtx, but uses // context.Background() as the context. -func (client *Layer3Forwarding1) GetDefaultConnectionService() (NewDefaultConnectionService string, err error) { - return client.GetDefaultConnectionServiceCtx(context.Background()) +func (client *Layer3Forwarding1) SetDefaultConnectionService(NewDefaultConnectionService string) (err error) { + return client.SetDefaultConnectionServiceCtx(context.Background(), + NewDefaultConnectionService, + ) } // WANCableLinkConfig1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANCableLinkConfig:1". See @@ -981,6 +982,40 @@ func newWANCableLinkConfig1ClientsFromGenericClients(genericClients []goupnp.Ser return clients } +func (client *WANCableLinkConfig1) GetBPIEncryptionEnabledCtx( + ctx context.Context, +) (NewBPIEncryptionEnabled bool, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewBPIEncryptionEnabled string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetBPIEncryptionEnabled", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if NewBPIEncryptionEnabled, err = soap.UnmarshalBoolean(response.NewBPIEncryptionEnabled); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// GetBPIEncryptionEnabled is the legacy version of GetBPIEncryptionEnabledCtx, but uses +// context.Background() as the context. +func (client *WANCableLinkConfig1) GetBPIEncryptionEnabled() (NewBPIEncryptionEnabled bool, err error) { + return client.GetBPIEncryptionEnabledCtx(context.Background()) +} + // // Return values: // @@ -1025,9 +1060,9 @@ func (client *WANCableLinkConfig1) GetCableLinkConfigInfo() (NewCableLinkConfigS return client.GetCableLinkConfigInfoCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetDownstreamFrequencyCtx( +func (client *WANCableLinkConfig1) GetConfigFileCtx( ctx context.Context, -) (NewDownstreamFrequency uint32, err error) { +) (NewConfigFile string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1036,36 +1071,32 @@ func (client *WANCableLinkConfig1) GetDownstreamFrequencyCtx( // Response structure. response := &struct { - NewDownstreamFrequency string + NewConfigFile string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetDownstreamFrequency", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetConfigFile", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDownstreamFrequency, err = soap.UnmarshalUi4(response.NewDownstreamFrequency); err != nil { + if NewConfigFile, err = soap.UnmarshalString(response.NewConfigFile); err != nil { return } // END Unmarshal arguments from response. return } -// GetDownstreamFrequency is the legacy version of GetDownstreamFrequencyCtx, but uses +// GetConfigFile is the legacy version of GetConfigFileCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetDownstreamFrequency() (NewDownstreamFrequency uint32, err error) { - return client.GetDownstreamFrequencyCtx(context.Background()) +func (client *WANCableLinkConfig1) GetConfigFile() (NewConfigFile string, err error) { + return client.GetConfigFileCtx(context.Background()) } -// -// Return values: -// -// * NewDownstreamModulation: allowed values: 64QAM, 256QAM -func (client *WANCableLinkConfig1) GetDownstreamModulationCtx( +func (client *WANCableLinkConfig1) GetDownstreamFrequencyCtx( ctx context.Context, -) (NewDownstreamModulation string, err error) { +) (NewDownstreamFrequency uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1074,32 +1105,36 @@ func (client *WANCableLinkConfig1) GetDownstreamModulationCtx( // Response structure. response := &struct { - NewDownstreamModulation string + NewDownstreamFrequency string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetDownstreamModulation", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetDownstreamFrequency", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDownstreamModulation, err = soap.UnmarshalString(response.NewDownstreamModulation); err != nil { + if NewDownstreamFrequency, err = soap.UnmarshalUi4(response.NewDownstreamFrequency); err != nil { return } // END Unmarshal arguments from response. return } -// GetDownstreamModulation is the legacy version of GetDownstreamModulationCtx, but uses +// GetDownstreamFrequency is the legacy version of GetDownstreamFrequencyCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetDownstreamModulation() (NewDownstreamModulation string, err error) { - return client.GetDownstreamModulationCtx(context.Background()) +func (client *WANCableLinkConfig1) GetDownstreamFrequency() (NewDownstreamFrequency uint32, err error) { + return client.GetDownstreamFrequencyCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetUpstreamFrequencyCtx( +// +// Return values: +// +// * NewDownstreamModulation: allowed values: 64QAM, 256QAM +func (client *WANCableLinkConfig1) GetDownstreamModulationCtx( ctx context.Context, -) (NewUpstreamFrequency uint32, err error) { +) (NewDownstreamModulation string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1108,36 +1143,32 @@ func (client *WANCableLinkConfig1) GetUpstreamFrequencyCtx( // Response structure. response := &struct { - NewUpstreamFrequency string + NewDownstreamModulation string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamFrequency", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetDownstreamModulation", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewUpstreamFrequency, err = soap.UnmarshalUi4(response.NewUpstreamFrequency); err != nil { + if NewDownstreamModulation, err = soap.UnmarshalString(response.NewDownstreamModulation); err != nil { return } // END Unmarshal arguments from response. return } -// GetUpstreamFrequency is the legacy version of GetUpstreamFrequencyCtx, but uses +// GetDownstreamModulation is the legacy version of GetDownstreamModulationCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetUpstreamFrequency() (NewUpstreamFrequency uint32, err error) { - return client.GetUpstreamFrequencyCtx(context.Background()) +func (client *WANCableLinkConfig1) GetDownstreamModulation() (NewDownstreamModulation string, err error) { + return client.GetDownstreamModulationCtx(context.Background()) } -// -// Return values: -// -// * NewUpstreamModulation: allowed values: QPSK, 16QAM -func (client *WANCableLinkConfig1) GetUpstreamModulationCtx( +func (client *WANCableLinkConfig1) GetTFTPServerCtx( ctx context.Context, -) (NewUpstreamModulation string, err error) { +) (NewTFTPServer string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1146,27 +1177,27 @@ func (client *WANCableLinkConfig1) GetUpstreamModulationCtx( // Response structure. response := &struct { - NewUpstreamModulation string + NewTFTPServer string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamModulation", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetTFTPServer", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewUpstreamModulation, err = soap.UnmarshalString(response.NewUpstreamModulation); err != nil { + if NewTFTPServer, err = soap.UnmarshalString(response.NewTFTPServer); err != nil { return } // END Unmarshal arguments from response. return } -// GetUpstreamModulation is the legacy version of GetUpstreamModulationCtx, but uses +// GetTFTPServer is the legacy version of GetTFTPServerCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetUpstreamModulation() (NewUpstreamModulation string, err error) { - return client.GetUpstreamModulationCtx(context.Background()) +func (client *WANCableLinkConfig1) GetTFTPServer() (NewTFTPServer string, err error) { + return client.GetTFTPServerCtx(context.Background()) } func (client *WANCableLinkConfig1) GetUpstreamChannelIDCtx( @@ -1203,43 +1234,9 @@ func (client *WANCableLinkConfig1) GetUpstreamChannelID() (NewUpstreamChannelID return client.GetUpstreamChannelIDCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetUpstreamPowerLevelCtx( - ctx context.Context, -) (NewUpstreamPowerLevel uint32, err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - - // END Marshal arguments into request. - - // Response structure. - response := &struct { - NewUpstreamPowerLevel string - }{} - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamPowerLevel", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - if NewUpstreamPowerLevel, err = soap.UnmarshalUi4(response.NewUpstreamPowerLevel); err != nil { - return - } - // END Unmarshal arguments from response. - return -} - -// GetUpstreamPowerLevel is the legacy version of GetUpstreamPowerLevelCtx, but uses -// context.Background() as the context. -func (client *WANCableLinkConfig1) GetUpstreamPowerLevel() (NewUpstreamPowerLevel uint32, err error) { - return client.GetUpstreamPowerLevelCtx(context.Background()) -} - -func (client *WANCableLinkConfig1) GetBPIEncryptionEnabledCtx( +func (client *WANCableLinkConfig1) GetUpstreamFrequencyCtx( ctx context.Context, -) (NewBPIEncryptionEnabled bool, err error) { +) (NewUpstreamFrequency uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1248,32 +1245,36 @@ func (client *WANCableLinkConfig1) GetBPIEncryptionEnabledCtx( // Response structure. response := &struct { - NewBPIEncryptionEnabled string + NewUpstreamFrequency string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetBPIEncryptionEnabled", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamFrequency", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewBPIEncryptionEnabled, err = soap.UnmarshalBoolean(response.NewBPIEncryptionEnabled); err != nil { + if NewUpstreamFrequency, err = soap.UnmarshalUi4(response.NewUpstreamFrequency); err != nil { return } // END Unmarshal arguments from response. return } -// GetBPIEncryptionEnabled is the legacy version of GetBPIEncryptionEnabledCtx, but uses +// GetUpstreamFrequency is the legacy version of GetUpstreamFrequencyCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetBPIEncryptionEnabled() (NewBPIEncryptionEnabled bool, err error) { - return client.GetBPIEncryptionEnabledCtx(context.Background()) +func (client *WANCableLinkConfig1) GetUpstreamFrequency() (NewUpstreamFrequency uint32, err error) { + return client.GetUpstreamFrequencyCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetConfigFileCtx( +// +// Return values: +// +// * NewUpstreamModulation: allowed values: QPSK, 16QAM +func (client *WANCableLinkConfig1) GetUpstreamModulationCtx( ctx context.Context, -) (NewConfigFile string, err error) { +) (NewUpstreamModulation string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1282,32 +1283,32 @@ func (client *WANCableLinkConfig1) GetConfigFileCtx( // Response structure. response := &struct { - NewConfigFile string + NewUpstreamModulation string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetConfigFile", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamModulation", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConfigFile, err = soap.UnmarshalString(response.NewConfigFile); err != nil { + if NewUpstreamModulation, err = soap.UnmarshalString(response.NewUpstreamModulation); err != nil { return } // END Unmarshal arguments from response. return } -// GetConfigFile is the legacy version of GetConfigFileCtx, but uses +// GetUpstreamModulation is the legacy version of GetUpstreamModulationCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetConfigFile() (NewConfigFile string, err error) { - return client.GetConfigFileCtx(context.Background()) +func (client *WANCableLinkConfig1) GetUpstreamModulation() (NewUpstreamModulation string, err error) { + return client.GetUpstreamModulationCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetTFTPServerCtx( +func (client *WANCableLinkConfig1) GetUpstreamPowerLevelCtx( ctx context.Context, -) (NewTFTPServer string, err error) { +) (NewUpstreamPowerLevel uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1316,27 +1317,27 @@ func (client *WANCableLinkConfig1) GetTFTPServerCtx( // Response structure. response := &struct { - NewTFTPServer string + NewUpstreamPowerLevel string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetTFTPServer", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamPowerLevel", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewTFTPServer, err = soap.UnmarshalString(response.NewTFTPServer); err != nil { + if NewUpstreamPowerLevel, err = soap.UnmarshalUi4(response.NewUpstreamPowerLevel); err != nil { return } // END Unmarshal arguments from response. return } -// GetTFTPServer is the legacy version of GetTFTPServerCtx, but uses +// GetUpstreamPowerLevel is the legacy version of GetUpstreamPowerLevelCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetTFTPServer() (NewTFTPServer string, err error) { - return client.GetTFTPServerCtx(context.Background()) +func (client *WANCableLinkConfig1) GetUpstreamPowerLevel() (NewUpstreamPowerLevel uint32, err error) { + return client.GetUpstreamPowerLevelCtx(context.Background()) } // WANCommonInterfaceConfig1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1". See @@ -1399,75 +1400,50 @@ func newWANCommonInterfaceConfig1ClientsFromGenericClients(genericClients []goup return clients } -func (client *WANCommonInterfaceConfig1) SetEnabledForInternetCtx( +func (client *WANCommonInterfaceConfig1) GetActiveConnectionCtx( ctx context.Context, - NewEnabledForInternet bool, -) (err error) { + NewActiveConnectionIndex uint16, +) (NewActiveConnDeviceContainer string, NewActiveConnectionServiceID string, err error) { // Request structure. request := &struct { - NewEnabledForInternet string + NewActiveConnectionIndex string }{} // BEGIN Marshal arguments into request. - if request.NewEnabledForInternet, err = soap.MarshalBoolean(NewEnabledForInternet); err != nil { - return - } - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "SetEnabledForInternet", request, response); err != nil { + if request.NewActiveConnectionIndex, err = soap.MarshalUi2(NewActiveConnectionIndex); err != nil { return } - - // BEGIN Unmarshal arguments from response. - - // END Unmarshal arguments from response. - return -} - -// SetEnabledForInternet is the legacy version of SetEnabledForInternetCtx, but uses -// context.Background() as the context. -func (client *WANCommonInterfaceConfig1) SetEnabledForInternet(NewEnabledForInternet bool) (err error) { - return client.SetEnabledForInternetCtx(context.Background(), - NewEnabledForInternet, - ) -} - -func (client *WANCommonInterfaceConfig1) GetEnabledForInternetCtx( - ctx context.Context, -) (NewEnabledForInternet bool, err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - // END Marshal arguments into request. // Response structure. response := &struct { - NewEnabledForInternet string + NewActiveConnDeviceContainer string + NewActiveConnectionServiceID string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetEnabledForInternet", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetActiveConnection", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewEnabledForInternet, err = soap.UnmarshalBoolean(response.NewEnabledForInternet); err != nil { + if NewActiveConnDeviceContainer, err = soap.UnmarshalString(response.NewActiveConnDeviceContainer); err != nil { + return + } + if NewActiveConnectionServiceID, err = soap.UnmarshalString(response.NewActiveConnectionServiceID); err != nil { return } // END Unmarshal arguments from response. return } -// GetEnabledForInternet is the legacy version of GetEnabledForInternetCtx, but uses +// GetActiveConnection is the legacy version of GetActiveConnectionCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetEnabledForInternet() (NewEnabledForInternet bool, err error) { - return client.GetEnabledForInternetCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetActiveConnection(NewActiveConnectionIndex uint16) (NewActiveConnDeviceContainer string, NewActiveConnectionServiceID string, err error) { + return client.GetActiveConnectionCtx(context.Background(), + NewActiveConnectionIndex, + ) } // @@ -1522,9 +1498,9 @@ func (client *WANCommonInterfaceConfig1) GetCommonLinkProperties() (NewWANAccess return client.GetCommonLinkPropertiesCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetWANAccessProviderCtx( +func (client *WANCommonInterfaceConfig1) GetEnabledForInternetCtx( ctx context.Context, -) (NewWANAccessProvider string, err error) { +) (NewEnabledForInternet bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1533,27 +1509,27 @@ func (client *WANCommonInterfaceConfig1) GetWANAccessProviderCtx( // Response structure. response := &struct { - NewWANAccessProvider string + NewEnabledForInternet string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetWANAccessProvider", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetEnabledForInternet", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewWANAccessProvider, err = soap.UnmarshalString(response.NewWANAccessProvider); err != nil { + if NewEnabledForInternet, err = soap.UnmarshalBoolean(response.NewEnabledForInternet); err != nil { return } // END Unmarshal arguments from response. return } -// GetWANAccessProvider is the legacy version of GetWANAccessProviderCtx, but uses +// GetEnabledForInternet is the legacy version of GetEnabledForInternetCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetWANAccessProvider() (NewWANAccessProvider string, err error) { - return client.GetWANAccessProviderCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetEnabledForInternet() (NewEnabledForInternet bool, err error) { + return client.GetEnabledForInternetCtx(context.Background()) } // @@ -1594,9 +1570,9 @@ func (client *WANCommonInterfaceConfig1) GetMaximumActiveConnections() (NewMaxim return client.GetMaximumActiveConnectionsCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetTotalBytesSentCtx( +func (client *WANCommonInterfaceConfig1) GetTotalBytesReceivedCtx( ctx context.Context, -) (NewTotalBytesSent uint64, err error) { +) (NewTotalBytesReceived uint64, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1605,32 +1581,32 @@ func (client *WANCommonInterfaceConfig1) GetTotalBytesSentCtx( // Response structure. response := &struct { - NewTotalBytesSent string + NewTotalBytesReceived string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalBytesSent", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalBytesReceived", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewTotalBytesSent, err = soap.UnmarshalUi8(response.NewTotalBytesSent); err != nil { + if NewTotalBytesReceived, err = soap.UnmarshalUi8(response.NewTotalBytesReceived); err != nil { return } // END Unmarshal arguments from response. return } -// GetTotalBytesSent is the legacy version of GetTotalBytesSentCtx, but uses +// GetTotalBytesReceived is the legacy version of GetTotalBytesReceivedCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetTotalBytesSent() (NewTotalBytesSent uint64, err error) { - return client.GetTotalBytesSentCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetTotalBytesReceived() (NewTotalBytesReceived uint64, err error) { + return client.GetTotalBytesReceivedCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetTotalBytesReceivedCtx( +func (client *WANCommonInterfaceConfig1) GetTotalBytesSentCtx( ctx context.Context, -) (NewTotalBytesReceived uint64, err error) { +) (NewTotalBytesSent uint64, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1639,32 +1615,32 @@ func (client *WANCommonInterfaceConfig1) GetTotalBytesReceivedCtx( // Response structure. response := &struct { - NewTotalBytesReceived string + NewTotalBytesSent string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalBytesReceived", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalBytesSent", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewTotalBytesReceived, err = soap.UnmarshalUi8(response.NewTotalBytesReceived); err != nil { + if NewTotalBytesSent, err = soap.UnmarshalUi8(response.NewTotalBytesSent); err != nil { return } // END Unmarshal arguments from response. return } -// GetTotalBytesReceived is the legacy version of GetTotalBytesReceivedCtx, but uses +// GetTotalBytesSent is the legacy version of GetTotalBytesSentCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetTotalBytesReceived() (NewTotalBytesReceived uint64, err error) { - return client.GetTotalBytesReceivedCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetTotalBytesSent() (NewTotalBytesSent uint64, err error) { + return client.GetTotalBytesSentCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetTotalPacketsSentCtx( +func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceivedCtx( ctx context.Context, -) (NewTotalPacketsSent uint32, err error) { +) (NewTotalPacketsReceived uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1673,32 +1649,32 @@ func (client *WANCommonInterfaceConfig1) GetTotalPacketsSentCtx( // Response structure. response := &struct { - NewTotalPacketsSent string + NewTotalPacketsReceived string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalPacketsSent", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalPacketsReceived", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewTotalPacketsSent, err = soap.UnmarshalUi4(response.NewTotalPacketsSent); err != nil { + if NewTotalPacketsReceived, err = soap.UnmarshalUi4(response.NewTotalPacketsReceived); err != nil { return } // END Unmarshal arguments from response. return } -// GetTotalPacketsSent is the legacy version of GetTotalPacketsSentCtx, but uses +// GetTotalPacketsReceived is the legacy version of GetTotalPacketsReceivedCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetTotalPacketsSent() (NewTotalPacketsSent uint32, err error) { - return client.GetTotalPacketsSentCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceived() (NewTotalPacketsReceived uint32, err error) { + return client.GetTotalPacketsReceivedCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceivedCtx( +func (client *WANCommonInterfaceConfig1) GetTotalPacketsSentCtx( ctx context.Context, -) (NewTotalPacketsReceived uint32, err error) { +) (NewTotalPacketsSent uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1707,72 +1683,97 @@ func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceivedCtx( // Response structure. response := &struct { - NewTotalPacketsReceived string + NewTotalPacketsSent string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalPacketsReceived", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalPacketsSent", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewTotalPacketsReceived, err = soap.UnmarshalUi4(response.NewTotalPacketsReceived); err != nil { + if NewTotalPacketsSent, err = soap.UnmarshalUi4(response.NewTotalPacketsSent); err != nil { return } // END Unmarshal arguments from response. return } -// GetTotalPacketsReceived is the legacy version of GetTotalPacketsReceivedCtx, but uses +// GetTotalPacketsSent is the legacy version of GetTotalPacketsSentCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceived() (NewTotalPacketsReceived uint32, err error) { - return client.GetTotalPacketsReceivedCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetTotalPacketsSent() (NewTotalPacketsSent uint32, err error) { + return client.GetTotalPacketsSentCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetActiveConnectionCtx( +func (client *WANCommonInterfaceConfig1) GetWANAccessProviderCtx( ctx context.Context, - NewActiveConnectionIndex uint16, -) (NewActiveConnDeviceContainer string, NewActiveConnectionServiceID string, err error) { +) (NewWANAccessProvider string, err error) { // Request structure. - request := &struct { - NewActiveConnectionIndex string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewActiveConnectionIndex, err = soap.MarshalUi2(NewActiveConnectionIndex); err != nil { - return - } // END Marshal arguments into request. // Response structure. response := &struct { - NewActiveConnDeviceContainer string - NewActiveConnectionServiceID string + NewWANAccessProvider string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetActiveConnection", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetWANAccessProvider", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewActiveConnDeviceContainer, err = soap.UnmarshalString(response.NewActiveConnDeviceContainer); err != nil { + if NewWANAccessProvider, err = soap.UnmarshalString(response.NewWANAccessProvider); err != nil { return } - if NewActiveConnectionServiceID, err = soap.UnmarshalString(response.NewActiveConnectionServiceID); err != nil { + // END Unmarshal arguments from response. + return +} + +// GetWANAccessProvider is the legacy version of GetWANAccessProviderCtx, but uses +// context.Background() as the context. +func (client *WANCommonInterfaceConfig1) GetWANAccessProvider() (NewWANAccessProvider string, err error) { + return client.GetWANAccessProviderCtx(context.Background()) +} + +func (client *WANCommonInterfaceConfig1) SetEnabledForInternetCtx( + ctx context.Context, + NewEnabledForInternet bool, +) (err error) { + // Request structure. + request := &struct { + NewEnabledForInternet string + }{} + // BEGIN Marshal arguments into request. + + if request.NewEnabledForInternet, err = soap.MarshalBoolean(NewEnabledForInternet); err != nil { + return + } + // END Marshal arguments into request. + + // Response structure. + response := interface{}(nil) + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "SetEnabledForInternet", request, response); err != nil { return } + + // BEGIN Unmarshal arguments from response. + // END Unmarshal arguments from response. return } -// GetActiveConnection is the legacy version of GetActiveConnectionCtx, but uses +// SetEnabledForInternet is the legacy version of SetEnabledForInternetCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetActiveConnection(NewActiveConnectionIndex uint16) (NewActiveConnDeviceContainer string, NewActiveConnectionServiceID string, err error) { - return client.GetActiveConnectionCtx(context.Background(), - NewActiveConnectionIndex, +func (client *WANCommonInterfaceConfig1) SetEnabledForInternet(NewEnabledForInternet bool) (err error) { + return client.SetEnabledForInternetCtx(context.Background(), + NewEnabledForInternet, ) } @@ -1836,50 +1837,43 @@ func newWANDSLLinkConfig1ClientsFromGenericClients(genericClients []goupnp.Servi return clients } -func (client *WANDSLLinkConfig1) SetDSLLinkTypeCtx( +func (client *WANDSLLinkConfig1) GetATMEncapsulationCtx( ctx context.Context, - NewLinkType string, -) (err error) { +) (NewATMEncapsulation string, err error) { // Request structure. - request := &struct { - NewLinkType string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewLinkType, err = soap.MarshalString(NewLinkType); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewATMEncapsulation string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetDSLLinkType", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetATMEncapsulation", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewATMEncapsulation, err = soap.UnmarshalString(response.NewATMEncapsulation); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetDSLLinkType is the legacy version of SetDSLLinkTypeCtx, but uses +// GetATMEncapsulation is the legacy version of GetATMEncapsulationCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) SetDSLLinkType(NewLinkType string) (err error) { - return client.SetDSLLinkTypeCtx(context.Background(), - NewLinkType, - ) +func (client *WANDSLLinkConfig1) GetATMEncapsulation() (NewATMEncapsulation string, err error) { + return client.GetATMEncapsulationCtx(context.Background()) } -// -// Return values: -// -// * NewLinkStatus: allowed values: Up, Down -func (client *WANDSLLinkConfig1) GetDSLLinkInfoCtx( +func (client *WANDSLLinkConfig1) GetAutoConfigCtx( ctx context.Context, -) (NewLinkType string, NewLinkStatus string, err error) { +) (NewAutoConfig bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1888,36 +1882,36 @@ func (client *WANDSLLinkConfig1) GetDSLLinkInfoCtx( // Response structure. response := &struct { - NewLinkType string - NewLinkStatus string + NewAutoConfig string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetDSLLinkInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetAutoConfig", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewLinkType, err = soap.UnmarshalString(response.NewLinkType); err != nil { - return - } - if NewLinkStatus, err = soap.UnmarshalString(response.NewLinkStatus); err != nil { + if NewAutoConfig, err = soap.UnmarshalBoolean(response.NewAutoConfig); err != nil { return } // END Unmarshal arguments from response. return } -// GetDSLLinkInfo is the legacy version of GetDSLLinkInfoCtx, but uses +// GetAutoConfig is the legacy version of GetAutoConfigCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetDSLLinkInfo() (NewLinkType string, NewLinkStatus string, err error) { - return client.GetDSLLinkInfoCtx(context.Background()) +func (client *WANDSLLinkConfig1) GetAutoConfig() (NewAutoConfig bool, err error) { + return client.GetAutoConfigCtx(context.Background()) } -func (client *WANDSLLinkConfig1) GetAutoConfigCtx( +// +// Return values: +// +// * NewLinkStatus: allowed values: Up, Down +func (client *WANDSLLinkConfig1) GetDSLLinkInfoCtx( ctx context.Context, -) (NewAutoConfig bool, err error) { +) (NewLinkType string, NewLinkStatus string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1926,32 +1920,36 @@ func (client *WANDSLLinkConfig1) GetAutoConfigCtx( // Response structure. response := &struct { - NewAutoConfig string + NewLinkType string + NewLinkStatus string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetAutoConfig", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetDSLLinkInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewAutoConfig, err = soap.UnmarshalBoolean(response.NewAutoConfig); err != nil { + if NewLinkType, err = soap.UnmarshalString(response.NewLinkType); err != nil { + return + } + if NewLinkStatus, err = soap.UnmarshalString(response.NewLinkStatus); err != nil { return } // END Unmarshal arguments from response. return } -// GetAutoConfig is the legacy version of GetAutoConfigCtx, but uses +// GetDSLLinkInfo is the legacy version of GetDSLLinkInfoCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetAutoConfig() (NewAutoConfig bool, err error) { - return client.GetAutoConfigCtx(context.Background()) +func (client *WANDSLLinkConfig1) GetDSLLinkInfo() (NewLinkType string, NewLinkStatus string, err error) { + return client.GetDSLLinkInfoCtx(context.Background()) } -func (client *WANDSLLinkConfig1) GetModulationTypeCtx( +func (client *WANDSLLinkConfig1) GetDestinationAddressCtx( ctx context.Context, -) (NewModulationType string, err error) { +) (NewDestinationAddress string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1960,69 +1958,66 @@ func (client *WANDSLLinkConfig1) GetModulationTypeCtx( // Response structure. response := &struct { - NewModulationType string + NewDestinationAddress string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetModulationType", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetDestinationAddress", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewModulationType, err = soap.UnmarshalString(response.NewModulationType); err != nil { + if NewDestinationAddress, err = soap.UnmarshalString(response.NewDestinationAddress); err != nil { return } // END Unmarshal arguments from response. return } -// GetModulationType is the legacy version of GetModulationTypeCtx, but uses +// GetDestinationAddress is the legacy version of GetDestinationAddressCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetModulationType() (NewModulationType string, err error) { - return client.GetModulationTypeCtx(context.Background()) +func (client *WANDSLLinkConfig1) GetDestinationAddress() (NewDestinationAddress string, err error) { + return client.GetDestinationAddressCtx(context.Background()) } -func (client *WANDSLLinkConfig1) SetDestinationAddressCtx( +func (client *WANDSLLinkConfig1) GetFCSPreservedCtx( ctx context.Context, - NewDestinationAddress string, -) (err error) { +) (NewFCSPreserved bool, err error) { // Request structure. - request := &struct { - NewDestinationAddress string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewDestinationAddress, err = soap.MarshalString(NewDestinationAddress); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewFCSPreserved string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetDestinationAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetFCSPreserved", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewFCSPreserved, err = soap.UnmarshalBoolean(response.NewFCSPreserved); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetDestinationAddress is the legacy version of SetDestinationAddressCtx, but uses +// GetFCSPreserved is the legacy version of GetFCSPreservedCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) SetDestinationAddress(NewDestinationAddress string) (err error) { - return client.SetDestinationAddressCtx(context.Background(), - NewDestinationAddress, - ) +func (client *WANDSLLinkConfig1) GetFCSPreserved() (NewFCSPreserved bool, err error) { + return client.GetFCSPreservedCtx(context.Background()) } -func (client *WANDSLLinkConfig1) GetDestinationAddressCtx( +func (client *WANDSLLinkConfig1) GetModulationTypeCtx( ctx context.Context, -) (NewDestinationAddress string, err error) { +) (NewModulationType string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2031,27 +2026,27 @@ func (client *WANDSLLinkConfig1) GetDestinationAddressCtx( // Response structure. response := &struct { - NewDestinationAddress string + NewModulationType string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetDestinationAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetModulationType", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDestinationAddress, err = soap.UnmarshalString(response.NewDestinationAddress); err != nil { + if NewModulationType, err = soap.UnmarshalString(response.NewModulationType); err != nil { return } // END Unmarshal arguments from response. return } -// GetDestinationAddress is the legacy version of GetDestinationAddressCtx, but uses +// GetModulationType is the legacy version of GetModulationTypeCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetDestinationAddress() (NewDestinationAddress string, err error) { - return client.GetDestinationAddressCtx(context.Background()) +func (client *WANDSLLinkConfig1) GetModulationType() (NewModulationType string, err error) { + return client.GetModulationTypeCtx(context.Background()) } func (client *WANDSLLinkConfig1) SetATMEncapsulationCtx( @@ -2091,51 +2086,54 @@ func (client *WANDSLLinkConfig1) SetATMEncapsulation(NewATMEncapsulation string) ) } -func (client *WANDSLLinkConfig1) GetATMEncapsulationCtx( +func (client *WANDSLLinkConfig1) SetDSLLinkTypeCtx( ctx context.Context, -) (NewATMEncapsulation string, err error) { + NewLinkType string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewLinkType string + }{} // BEGIN Marshal arguments into request. + if request.NewLinkType, err = soap.MarshalString(NewLinkType); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewATMEncapsulation string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetATMEncapsulation", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetDSLLinkType", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewATMEncapsulation, err = soap.UnmarshalString(response.NewATMEncapsulation); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetATMEncapsulation is the legacy version of GetATMEncapsulationCtx, but uses +// SetDSLLinkType is the legacy version of SetDSLLinkTypeCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetATMEncapsulation() (NewATMEncapsulation string, err error) { - return client.GetATMEncapsulationCtx(context.Background()) +func (client *WANDSLLinkConfig1) SetDSLLinkType(NewLinkType string) (err error) { + return client.SetDSLLinkTypeCtx(context.Background(), + NewLinkType, + ) } -func (client *WANDSLLinkConfig1) SetFCSPreservedCtx( +func (client *WANDSLLinkConfig1) SetDestinationAddressCtx( ctx context.Context, - NewFCSPreserved bool, + NewDestinationAddress string, ) (err error) { // Request structure. request := &struct { - NewFCSPreserved string + NewDestinationAddress string }{} // BEGIN Marshal arguments into request. - if request.NewFCSPreserved, err = soap.MarshalBoolean(NewFCSPreserved); err != nil { + if request.NewDestinationAddress, err = soap.MarshalString(NewDestinationAddress); err != nil { return } // END Marshal arguments into request. @@ -2144,7 +2142,7 @@ func (client *WANDSLLinkConfig1) SetFCSPreservedCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetFCSPreserved", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetDestinationAddress", request, response); err != nil { return } @@ -2154,46 +2152,49 @@ func (client *WANDSLLinkConfig1) SetFCSPreservedCtx( return } -// SetFCSPreserved is the legacy version of SetFCSPreservedCtx, but uses +// SetDestinationAddress is the legacy version of SetDestinationAddressCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) SetFCSPreserved(NewFCSPreserved bool) (err error) { - return client.SetFCSPreservedCtx(context.Background(), - NewFCSPreserved, +func (client *WANDSLLinkConfig1) SetDestinationAddress(NewDestinationAddress string) (err error) { + return client.SetDestinationAddressCtx(context.Background(), + NewDestinationAddress, ) } -func (client *WANDSLLinkConfig1) GetFCSPreservedCtx( +func (client *WANDSLLinkConfig1) SetFCSPreservedCtx( ctx context.Context, -) (NewFCSPreserved bool, err error) { + NewFCSPreserved bool, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewFCSPreserved string + }{} // BEGIN Marshal arguments into request. + if request.NewFCSPreserved, err = soap.MarshalBoolean(NewFCSPreserved); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewFCSPreserved string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetFCSPreserved", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetFCSPreserved", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewFCSPreserved, err = soap.UnmarshalBoolean(response.NewFCSPreserved); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetFCSPreserved is the legacy version of GetFCSPreservedCtx, but uses +// SetFCSPreserved is the legacy version of SetFCSPreservedCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetFCSPreserved() (NewFCSPreserved bool, err error) { - return client.GetFCSPreservedCtx(context.Background()) +func (client *WANDSLLinkConfig1) SetFCSPreserved(NewFCSPreserved bool) (err error) { + return client.SetFCSPreservedCtx(context.Background(), + NewFCSPreserved, + ) } // WANEthernetLinkConfig1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANEthernetLinkConfig:1". See @@ -2354,17 +2355,57 @@ func newWANIPConnection1ClientsFromGenericClients(genericClients []goupnp.Servic return clients } -func (client *WANIPConnection1) SetConnectionTypeCtx( +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection1) AddPortMappingCtx( ctx context.Context, - NewConnectionType string, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, + NewInternalPort uint16, + NewInternalClient string, + NewEnabled bool, + NewPortMappingDescription string, + NewLeaseDuration uint32, ) (err error) { // Request structure. request := &struct { - NewConnectionType string + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // BEGIN Marshal arguments into request. - if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { + return + } + if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { + return + } + if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { + return + } + if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { + return + } + if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { return } // END Marshal arguments into request. @@ -2373,7 +2414,7 @@ func (client *WANIPConnection1) SetConnectionTypeCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetConnectionType", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "AddPortMapping", request, response); err != nil { return } @@ -2383,57 +2424,76 @@ func (client *WANIPConnection1) SetConnectionTypeCtx( return } -// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses +// AddPortMapping is the legacy version of AddPortMappingCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) SetConnectionType(NewConnectionType string) (err error) { - return client.SetConnectionTypeCtx(context.Background(), - NewConnectionType, +func (client *WANIPConnection1) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { + return client.AddPortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + NewInternalPort, + NewInternalClient, + NewEnabled, + NewPortMappingDescription, + NewLeaseDuration, ) } // -// Return values: +// Arguments: // -// * NewPossibleConnectionTypes: allowed values: Unconfigured, IP_Routed, IP_Bridged -func (client *WANIPConnection1) GetConnectionTypeInfoCtx( +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection1) DeletePortMappingCtx( ctx context.Context, -) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + }{} // BEGIN Marshal arguments into request. + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewConnectionType string - NewPossibleConnectionTypes string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetConnectionTypeInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "DeletePortMapping", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { - return - } - if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses +// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { - return client.GetConnectionTypeInfoCtx(context.Background()) +func (client *WANIPConnection1) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { + return client.DeletePortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + ) } -func (client *WANIPConnection1) RequestConnectionCtx( +func (client *WANIPConnection1) ForceTerminationCtx( ctx context.Context, ) (err error) { // Request structure. @@ -2446,7 +2506,7 @@ func (client *WANIPConnection1) RequestConnectionCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "RequestConnection", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "ForceTermination", request, response); err != nil { return } @@ -2456,15 +2516,15 @@ func (client *WANIPConnection1) RequestConnectionCtx( return } -// RequestConnection is the legacy version of RequestConnectionCtx, but uses +// ForceTermination is the legacy version of ForceTerminationCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) RequestConnection() (err error) { - return client.RequestConnectionCtx(context.Background()) +func (client *WANIPConnection1) ForceTermination() (err error) { + return client.ForceTerminationCtx(context.Background()) } -func (client *WANIPConnection1) RequestTerminationCtx( +func (client *WANIPConnection1) GetAutoDisconnectTimeCtx( ctx context.Context, -) (err error) { +) (NewAutoDisconnectTime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2472,28 +2532,37 @@ func (client *WANIPConnection1) RequestTerminationCtx( // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewAutoDisconnectTime string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "RequestTermination", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetAutoDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + return + } // END Unmarshal arguments from response. return } -// RequestTermination is the legacy version of RequestTerminationCtx, but uses +// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) RequestTermination() (err error) { - return client.RequestTerminationCtx(context.Background()) +func (client *WANIPConnection1) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { + return client.GetAutoDisconnectTimeCtx(context.Background()) } -func (client *WANIPConnection1) ForceTerminationCtx( +// +// Return values: +// +// * NewPossibleConnectionTypes: allowed values: Unconfigured, IP_Routed, IP_Bridged +func (client *WANIPConnection1) GetConnectionTypeInfoCtx( ctx context.Context, -) (err error) { +) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2501,145 +2570,179 @@ func (client *WANIPConnection1) ForceTerminationCtx( // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewConnectionType string + NewPossibleConnectionTypes string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "ForceTermination", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetConnectionTypeInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { + return + } + if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { + return + } // END Unmarshal arguments from response. return } -// ForceTermination is the legacy version of ForceTerminationCtx, but uses +// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) ForceTermination() (err error) { - return client.ForceTerminationCtx(context.Background()) +func (client *WANIPConnection1) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + return client.GetConnectionTypeInfoCtx(context.Background()) } -func (client *WANIPConnection1) SetAutoDisconnectTimeCtx( +func (client *WANIPConnection1) GetExternalIPAddressCtx( ctx context.Context, - NewAutoDisconnectTime uint32, -) (err error) { +) (NewExternalIPAddress string, err error) { // Request structure. - request := &struct { - NewAutoDisconnectTime string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewExternalIPAddress string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetExternalIPAddress", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses +// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { - return client.SetAutoDisconnectTimeCtx(context.Background(), - NewAutoDisconnectTime, - ) +func (client *WANIPConnection1) GetExternalIPAddress() (NewExternalIPAddress string, err error) { + return client.GetExternalIPAddressCtx(context.Background()) } -func (client *WANIPConnection1) SetIdleDisconnectTimeCtx( +// +// Return values: +// +// * NewProtocol: allowed values: TCP, UDP +func (client *WANIPConnection1) GetGenericPortMappingEntryCtx( ctx context.Context, - NewIdleDisconnectTime uint32, -) (err error) { + NewPortMappingIndex uint16, +) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { // Request structure. request := &struct { - NewIdleDisconnectTime string + NewPortMappingIndex string }{} // BEGIN Marshal arguments into request. - if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { + if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { return } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) - + response := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string + }{} + // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetGenericPortMappingEntry", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { + return + } + if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { + return + } + if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { + return + } + if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { + return + } + if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { + return + } + if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { + return + } + if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + return + } + if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses +// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { - return client.SetIdleDisconnectTimeCtx(context.Background(), - NewIdleDisconnectTime, +func (client *WANIPConnection1) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + return client.GetGenericPortMappingEntryCtx(context.Background(), + NewPortMappingIndex, ) } -func (client *WANIPConnection1) SetWarnDisconnectDelayCtx( +func (client *WANIPConnection1) GetIdleDisconnectTimeCtx( ctx context.Context, - NewWarnDisconnectDelay uint32, -) (err error) { +) (NewIdleDisconnectTime uint32, err error) { // Request structure. - request := &struct { - NewWarnDisconnectDelay string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewIdleDisconnectTime string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetWarnDisconnectDelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetIdleDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses +// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { - return client.SetWarnDisconnectDelayCtx(context.Background(), - NewWarnDisconnectDelay, - ) +func (client *WANIPConnection1) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { + return client.GetIdleDisconnectTimeCtx(context.Background()) } -// -// Return values: -// -// * NewConnectionStatus: allowed values: Unconfigured, Connected, Disconnected -// -// * NewLastConnectionError: allowed values: ERROR_NONE -func (client *WANIPConnection1) GetStatusInfoCtx( +func (client *WANIPConnection1) GetNATRSIPStatusCtx( ctx context.Context, -) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { +) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2648,74 +2751,117 @@ func (client *WANIPConnection1) GetStatusInfoCtx( // Response structure. response := &struct { - NewConnectionStatus string - NewLastConnectionError string - NewUptime string + NewRSIPAvailable string + NewNATEnabled string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetStatusInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetNATRSIPStatus", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { - return - } - if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { + if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { return } - if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { + if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { return } // END Unmarshal arguments from response. return } -// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses +// GetNATRSIPStatus is the legacy version of GetNATRSIPStatusCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { - return client.GetStatusInfoCtx(context.Background()) +func (client *WANIPConnection1) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNATEnabled bool, err error) { + return client.GetNATRSIPStatusCtx(context.Background()) } -func (client *WANIPConnection1) GetAutoDisconnectTimeCtx( +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection1) GetSpecificPortMappingEntryCtx( ctx context.Context, -) (NewAutoDisconnectTime uint32, err error) { + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, +) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + }{} // BEGIN Marshal arguments into request. + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := &struct { - NewAutoDisconnectTime string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetSpecificPortMappingEntry", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { + return + } + if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { + return + } + if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { + return + } + if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + return + } + if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { return } // END Unmarshal arguments from response. return } -// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses +// GetSpecificPortMappingEntry is the legacy version of GetSpecificPortMappingEntryCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { - return client.GetAutoDisconnectTimeCtx(context.Background()) +func (client *WANIPConnection1) GetSpecificPortMappingEntry(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + return client.GetSpecificPortMappingEntryCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + ) } -func (client *WANIPConnection1) GetIdleDisconnectTimeCtx( +// +// Return values: +// +// * NewConnectionStatus: allowed values: Unconfigured, Connected, Disconnected +// +// * NewLastConnectionError: allowed values: ERROR_NONE +func (client *WANIPConnection1) GetStatusInfoCtx( ctx context.Context, -) (NewIdleDisconnectTime uint32, err error) { +) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2724,27 +2870,35 @@ func (client *WANIPConnection1) GetIdleDisconnectTimeCtx( // Response structure. response := &struct { - NewIdleDisconnectTime string + NewConnectionStatus string + NewLastConnectionError string + NewUptime string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetStatusInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { + if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { + return + } + if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { + return + } + if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { return } // END Unmarshal arguments from response. return } -// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses +// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { - return client.GetIdleDisconnectTimeCtx(context.Background()) +func (client *WANIPConnection1) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { + return client.GetStatusInfoCtx(context.Background()) } func (client *WANIPConnection1) GetWarnDisconnectDelayCtx( @@ -2781,9 +2935,9 @@ func (client *WANIPConnection1) GetWarnDisconnectDelay() (NewWarnDisconnectDelay return client.GetWarnDisconnectDelayCtx(context.Background()) } -func (client *WANIPConnection1) GetNATRSIPStatusCtx( +func (client *WANIPConnection1) RequestConnectionCtx( ctx context.Context, -) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { +) (err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2791,234 +2945,102 @@ func (client *WANIPConnection1) GetNATRSIPStatusCtx( // END Marshal arguments into request. // Response structure. - response := &struct { - NewRSIPAvailable string - NewNATEnabled string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetNATRSIPStatus", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "RequestConnection", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { - return - } - if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetNATRSIPStatus is the legacy version of GetNATRSIPStatusCtx, but uses +// RequestConnection is the legacy version of RequestConnectionCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNATEnabled bool, err error) { - return client.GetNATRSIPStatusCtx(context.Background()) +func (client *WANIPConnection1) RequestConnection() (err error) { + return client.RequestConnectionCtx(context.Background()) } -// -// Return values: -// -// * NewProtocol: allowed values: TCP, UDP -func (client *WANIPConnection1) GetGenericPortMappingEntryCtx( +func (client *WANIPConnection1) RequestTerminationCtx( ctx context.Context, - NewPortMappingIndex uint16, -) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { +) (err error) { // Request structure. - request := &struct { - NewPortMappingIndex string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetGenericPortMappingEntry", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "RequestTermination", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { - return - } - if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { - return - } - if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { - return - } - if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { - return - } - if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { - return - } - if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { - return - } - if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { - return - } - if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses +// RequestTermination is the legacy version of RequestTerminationCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - return client.GetGenericPortMappingEntryCtx(context.Background(), - NewPortMappingIndex, - ) +func (client *WANIPConnection1) RequestTermination() (err error) { + return client.RequestTerminationCtx(context.Background()) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection1) GetSpecificPortMappingEntryCtx( +func (client *WANIPConnection1) SetAutoDisconnectTimeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, -) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + NewAutoDisconnectTime uint32, +) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string + NewAutoDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { return } // END Marshal arguments into request. // Response structure. - response := &struct { - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetSpecificPortMappingEntry", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetAutoDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { - return - } - if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { - return - } - if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { - return - } - if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { - return - } - if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetSpecificPortMappingEntry is the legacy version of GetSpecificPortMappingEntryCtx, but uses +// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetSpecificPortMappingEntry(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - return client.GetSpecificPortMappingEntryCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, +func (client *WANIPConnection1) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { + return client.SetAutoDisconnectTimeCtx(context.Background(), + NewAutoDisconnectTime, ) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection1) AddPortMappingCtx( +func (client *WANIPConnection1) SetConnectionTypeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, - NewInternalPort uint16, - NewInternalClient string, - NewEnabled bool, - NewPortMappingDescription string, - NewLeaseDuration uint32, + NewConnectionType string, ) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string + NewConnectionType string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } - if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { - return - } - if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { - return - } - if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { - return - } - if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { - return - } - if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { + if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { return } // END Marshal arguments into request. @@ -3027,7 +3049,7 @@ func (client *WANIPConnection1) AddPortMappingCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "AddPortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetConnectionType", request, response); err != nil { return } @@ -3037,47 +3059,25 @@ func (client *WANIPConnection1) AddPortMappingCtx( return } -// AddPortMapping is the legacy version of AddPortMappingCtx, but uses +// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { - return client.AddPortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, - NewInternalPort, - NewInternalClient, - NewEnabled, - NewPortMappingDescription, - NewLeaseDuration, +func (client *WANIPConnection1) SetConnectionType(NewConnectionType string) (err error) { + return client.SetConnectionTypeCtx(context.Background(), + NewConnectionType, ) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection1) DeletePortMappingCtx( +func (client *WANIPConnection1) SetIdleDisconnectTimeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, + NewIdleDisconnectTime uint32, ) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string + NewIdleDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { return } // END Marshal arguments into request. @@ -3086,7 +3086,7 @@ func (client *WANIPConnection1) DeletePortMappingCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "DeletePortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetIdleDisconnectTime", request, response); err != nil { return } @@ -3096,48 +3096,49 @@ func (client *WANIPConnection1) DeletePortMappingCtx( return } -// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses +// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { - return client.DeletePortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, +func (client *WANIPConnection1) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { + return client.SetIdleDisconnectTimeCtx(context.Background(), + NewIdleDisconnectTime, ) } -func (client *WANIPConnection1) GetExternalIPAddressCtx( +func (client *WANIPConnection1) SetWarnDisconnectDelayCtx( ctx context.Context, -) (NewExternalIPAddress string, err error) { + NewWarnDisconnectDelay uint32, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewWarnDisconnectDelay string + }{} // BEGIN Marshal arguments into request. + if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewExternalIPAddress string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetExternalIPAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetWarnDisconnectDelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses +// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetExternalIPAddress() (NewExternalIPAddress string, err error) { - return client.GetExternalIPAddressCtx(context.Background()) +func (client *WANIPConnection1) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { + return client.SetWarnDisconnectDelayCtx(context.Background(), + NewWarnDisconnectDelay, + ) } // WANPOTSLinkConfig1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANPOTSLinkConfig:1". See @@ -3200,110 +3201,81 @@ func newWANPOTSLinkConfig1ClientsFromGenericClients(genericClients []goupnp.Serv return clients } -// -// Arguments: -// -// * NewLinkType: allowed values: PPP_Dialup - -func (client *WANPOTSLinkConfig1) SetISPInfoCtx( +func (client *WANPOTSLinkConfig1) GetCallRetryInfoCtx( ctx context.Context, - NewISPPhoneNumber string, - NewISPInfo string, - NewLinkType string, -) (err error) { +) (NewNumberOfRetries uint32, NewDelayBetweenRetries uint32, err error) { // Request structure. - request := &struct { - NewISPPhoneNumber string - NewISPInfo string - NewLinkType string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewISPPhoneNumber, err = soap.MarshalString(NewISPPhoneNumber); err != nil { - return - } - if request.NewISPInfo, err = soap.MarshalString(NewISPInfo); err != nil { - return - } - if request.NewLinkType, err = soap.MarshalString(NewLinkType); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewNumberOfRetries string + NewDelayBetweenRetries string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "SetISPInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetCallRetryInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewNumberOfRetries, err = soap.UnmarshalUi4(response.NewNumberOfRetries); err != nil { + return + } + if NewDelayBetweenRetries, err = soap.UnmarshalUi4(response.NewDelayBetweenRetries); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetISPInfo is the legacy version of SetISPInfoCtx, but uses +// GetCallRetryInfo is the legacy version of GetCallRetryInfoCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) SetISPInfo(NewISPPhoneNumber string, NewISPInfo string, NewLinkType string) (err error) { - return client.SetISPInfoCtx(context.Background(), - NewISPPhoneNumber, - NewISPInfo, - NewLinkType, - ) +func (client *WANPOTSLinkConfig1) GetCallRetryInfo() (NewNumberOfRetries uint32, NewDelayBetweenRetries uint32, err error) { + return client.GetCallRetryInfoCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) SetCallRetryInfoCtx( +func (client *WANPOTSLinkConfig1) GetDataCompressionCtx( ctx context.Context, - NewNumberOfRetries uint32, - NewDelayBetweenRetries uint32, -) (err error) { +) (NewDataCompression string, err error) { // Request structure. - request := &struct { - NewNumberOfRetries string - NewDelayBetweenRetries string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewNumberOfRetries, err = soap.MarshalUi4(NewNumberOfRetries); err != nil { - return - } - if request.NewDelayBetweenRetries, err = soap.MarshalUi4(NewDelayBetweenRetries); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDataCompression string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "SetCallRetryInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataCompression", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDataCompression, err = soap.UnmarshalString(response.NewDataCompression); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetCallRetryInfo is the legacy version of SetCallRetryInfoCtx, but uses +// GetDataCompression is the legacy version of GetDataCompressionCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) SetCallRetryInfo(NewNumberOfRetries uint32, NewDelayBetweenRetries uint32) (err error) { - return client.SetCallRetryInfoCtx(context.Background(), - NewNumberOfRetries, - NewDelayBetweenRetries, - ) +func (client *WANPOTSLinkConfig1) GetDataCompression() (NewDataCompression string, err error) { + return client.GetDataCompressionCtx(context.Background()) } -// -// Return values: -// -// * NewLinkType: allowed values: PPP_Dialup -func (client *WANPOTSLinkConfig1) GetISPInfoCtx( +func (client *WANPOTSLinkConfig1) GetDataModulationSupportedCtx( ctx context.Context, -) (NewISPPhoneNumber string, NewISPInfo string, NewLinkType string, err error) { +) (NewDataModulationSupported string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3312,40 +3284,32 @@ func (client *WANPOTSLinkConfig1) GetISPInfoCtx( // Response structure. response := &struct { - NewISPPhoneNumber string - NewISPInfo string - NewLinkType string + NewDataModulationSupported string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetISPInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataModulationSupported", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewISPPhoneNumber, err = soap.UnmarshalString(response.NewISPPhoneNumber); err != nil { - return - } - if NewISPInfo, err = soap.UnmarshalString(response.NewISPInfo); err != nil { - return - } - if NewLinkType, err = soap.UnmarshalString(response.NewLinkType); err != nil { + if NewDataModulationSupported, err = soap.UnmarshalString(response.NewDataModulationSupported); err != nil { return } // END Unmarshal arguments from response. return } -// GetISPInfo is the legacy version of GetISPInfoCtx, but uses +// GetDataModulationSupported is the legacy version of GetDataModulationSupportedCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetISPInfo() (NewISPPhoneNumber string, NewISPInfo string, NewLinkType string, err error) { - return client.GetISPInfoCtx(context.Background()) +func (client *WANPOTSLinkConfig1) GetDataModulationSupported() (NewDataModulationSupported string, err error) { + return client.GetDataModulationSupportedCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) GetCallRetryInfoCtx( +func (client *WANPOTSLinkConfig1) GetDataProtocolCtx( ctx context.Context, -) (NewNumberOfRetries uint32, NewDelayBetweenRetries uint32, err error) { +) (NewDataProtocol string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3354,31 +3318,27 @@ func (client *WANPOTSLinkConfig1) GetCallRetryInfoCtx( // Response structure. response := &struct { - NewNumberOfRetries string - NewDelayBetweenRetries string + NewDataProtocol string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetCallRetryInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataProtocol", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewNumberOfRetries, err = soap.UnmarshalUi4(response.NewNumberOfRetries); err != nil { - return - } - if NewDelayBetweenRetries, err = soap.UnmarshalUi4(response.NewDelayBetweenRetries); err != nil { + if NewDataProtocol, err = soap.UnmarshalString(response.NewDataProtocol); err != nil { return } // END Unmarshal arguments from response. return } -// GetCallRetryInfo is the legacy version of GetCallRetryInfoCtx, but uses +// GetDataProtocol is the legacy version of GetDataProtocolCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetCallRetryInfo() (NewNumberOfRetries uint32, NewDelayBetweenRetries uint32, err error) { - return client.GetCallRetryInfoCtx(context.Background()) +func (client *WANPOTSLinkConfig1) GetDataProtocol() (NewDataProtocol string, err error) { + return client.GetDataProtocolCtx(context.Background()) } func (client *WANPOTSLinkConfig1) GetFclassCtx( @@ -3415,9 +3375,13 @@ func (client *WANPOTSLinkConfig1) GetFclass() (NewFclass string, err error) { return client.GetFclassCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) GetDataModulationSupportedCtx( +// +// Return values: +// +// * NewLinkType: allowed values: PPP_Dialup +func (client *WANPOTSLinkConfig1) GetISPInfoCtx( ctx context.Context, -) (NewDataModulationSupported string, err error) { +) (NewISPPhoneNumber string, NewISPInfo string, NewLinkType string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3426,32 +3390,40 @@ func (client *WANPOTSLinkConfig1) GetDataModulationSupportedCtx( // Response structure. response := &struct { - NewDataModulationSupported string + NewISPPhoneNumber string + NewISPInfo string + NewLinkType string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataModulationSupported", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetISPInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDataModulationSupported, err = soap.UnmarshalString(response.NewDataModulationSupported); err != nil { + if NewISPPhoneNumber, err = soap.UnmarshalString(response.NewISPPhoneNumber); err != nil { + return + } + if NewISPInfo, err = soap.UnmarshalString(response.NewISPInfo); err != nil { + return + } + if NewLinkType, err = soap.UnmarshalString(response.NewLinkType); err != nil { return } // END Unmarshal arguments from response. return } -// GetDataModulationSupported is the legacy version of GetDataModulationSupportedCtx, but uses +// GetISPInfo is the legacy version of GetISPInfoCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetDataModulationSupported() (NewDataModulationSupported string, err error) { - return client.GetDataModulationSupportedCtx(context.Background()) +func (client *WANPOTSLinkConfig1) GetISPInfo() (NewISPPhoneNumber string, NewISPInfo string, NewLinkType string, err error) { + return client.GetISPInfoCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) GetDataProtocolCtx( +func (client *WANPOTSLinkConfig1) GetPlusVTRCommandSupportedCtx( ctx context.Context, -) (NewDataProtocol string, err error) { +) (NewPlusVTRCommandSupported bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3460,95 +3432,124 @@ func (client *WANPOTSLinkConfig1) GetDataProtocolCtx( // Response structure. response := &struct { - NewDataProtocol string + NewPlusVTRCommandSupported string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataProtocol", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetPlusVTRCommandSupported", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDataProtocol, err = soap.UnmarshalString(response.NewDataProtocol); err != nil { + if NewPlusVTRCommandSupported, err = soap.UnmarshalBoolean(response.NewPlusVTRCommandSupported); err != nil { return } // END Unmarshal arguments from response. return } -// GetDataProtocol is the legacy version of GetDataProtocolCtx, but uses +// GetPlusVTRCommandSupported is the legacy version of GetPlusVTRCommandSupportedCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetDataProtocol() (NewDataProtocol string, err error) { - return client.GetDataProtocolCtx(context.Background()) +func (client *WANPOTSLinkConfig1) GetPlusVTRCommandSupported() (NewPlusVTRCommandSupported bool, err error) { + return client.GetPlusVTRCommandSupportedCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) GetDataCompressionCtx( +func (client *WANPOTSLinkConfig1) SetCallRetryInfoCtx( ctx context.Context, -) (NewDataCompression string, err error) { + NewNumberOfRetries uint32, + NewDelayBetweenRetries uint32, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewNumberOfRetries string + NewDelayBetweenRetries string + }{} // BEGIN Marshal arguments into request. + if request.NewNumberOfRetries, err = soap.MarshalUi4(NewNumberOfRetries); err != nil { + return + } + if request.NewDelayBetweenRetries, err = soap.MarshalUi4(NewDelayBetweenRetries); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewDataCompression string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataCompression", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "SetCallRetryInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDataCompression, err = soap.UnmarshalString(response.NewDataCompression); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetDataCompression is the legacy version of GetDataCompressionCtx, but uses +// SetCallRetryInfo is the legacy version of SetCallRetryInfoCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetDataCompression() (NewDataCompression string, err error) { - return client.GetDataCompressionCtx(context.Background()) +func (client *WANPOTSLinkConfig1) SetCallRetryInfo(NewNumberOfRetries uint32, NewDelayBetweenRetries uint32) (err error) { + return client.SetCallRetryInfoCtx(context.Background(), + NewNumberOfRetries, + NewDelayBetweenRetries, + ) } -func (client *WANPOTSLinkConfig1) GetPlusVTRCommandSupportedCtx( +// +// Arguments: +// +// * NewLinkType: allowed values: PPP_Dialup + +func (client *WANPOTSLinkConfig1) SetISPInfoCtx( ctx context.Context, -) (NewPlusVTRCommandSupported bool, err error) { + NewISPPhoneNumber string, + NewISPInfo string, + NewLinkType string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewISPPhoneNumber string + NewISPInfo string + NewLinkType string + }{} // BEGIN Marshal arguments into request. + if request.NewISPPhoneNumber, err = soap.MarshalString(NewISPPhoneNumber); err != nil { + return + } + if request.NewISPInfo, err = soap.MarshalString(NewISPInfo); err != nil { + return + } + if request.NewLinkType, err = soap.MarshalString(NewLinkType); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewPlusVTRCommandSupported string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetPlusVTRCommandSupported", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "SetISPInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPlusVTRCommandSupported, err = soap.UnmarshalBoolean(response.NewPlusVTRCommandSupported); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetPlusVTRCommandSupported is the legacy version of GetPlusVTRCommandSupportedCtx, but uses +// SetISPInfo is the legacy version of SetISPInfoCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetPlusVTRCommandSupported() (NewPlusVTRCommandSupported bool, err error) { - return client.GetPlusVTRCommandSupportedCtx(context.Background()) +func (client *WANPOTSLinkConfig1) SetISPInfo(NewISPPhoneNumber string, NewISPInfo string, NewLinkType string) (err error) { + return client.SetISPInfoCtx(context.Background(), + NewISPPhoneNumber, + NewISPInfo, + NewLinkType, + ) } // WANPPPConnection1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANPPPConnection:1". See @@ -3611,83 +3612,88 @@ func newWANPPPConnection1ClientsFromGenericClients(genericClients []goupnp.Servi return clients } -func (client *WANPPPConnection1) SetConnectionTypeCtx( +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANPPPConnection1) AddPortMappingCtx( ctx context.Context, - NewConnectionType string, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, + NewInternalPort uint16, + NewInternalClient string, + NewEnabled bool, + NewPortMappingDescription string, + NewLeaseDuration uint32, ) (err error) { // Request structure. request := &struct { - NewConnectionType string + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // BEGIN Marshal arguments into request. - if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { return } - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetConnectionType", request, response); err != nil { + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { + return + } + if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { + return + } + if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { + return + } + if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { + return + } + if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { return } - - // BEGIN Unmarshal arguments from response. - - // END Unmarshal arguments from response. - return -} - -// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses -// context.Background() as the context. -func (client *WANPPPConnection1) SetConnectionType(NewConnectionType string) (err error) { - return client.SetConnectionTypeCtx(context.Background(), - NewConnectionType, - ) -} - -// -// Return values: -// -// * NewPossibleConnectionTypes: allowed values: Unconfigured, IP_Routed, DHCP_Spoofed, PPPoE_Bridged, PPTP_Relay, L2TP_Relay, PPPoE_Relay -func (client *WANPPPConnection1) GetConnectionTypeInfoCtx( - ctx context.Context, -) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - // END Marshal arguments into request. // Response structure. - response := &struct { - NewConnectionType string - NewPossibleConnectionTypes string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetConnectionTypeInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "AddPortMapping", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { - return - } - if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses +// AddPortMapping is the legacy version of AddPortMappingCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { - return client.GetConnectionTypeInfoCtx(context.Background()) +func (client *WANPPPConnection1) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { + return client.AddPortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + NewInternalPort, + NewInternalClient, + NewEnabled, + NewPortMappingDescription, + NewLeaseDuration, + ) } func (client *WANPPPConnection1) ConfigureConnectionCtx( @@ -3733,49 +3739,41 @@ func (client *WANPPPConnection1) ConfigureConnection(NewUserName string, NewPass ) } -func (client *WANPPPConnection1) RequestConnectionCtx( +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANPPPConnection1) DeletePortMappingCtx( ctx context.Context, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, ) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + }{} // BEGIN Marshal arguments into request. - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "RequestConnection", request, response); err != nil { + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { return } - - // BEGIN Unmarshal arguments from response. - - // END Unmarshal arguments from response. - return -} - -// RequestConnection is the legacy version of RequestConnectionCtx, but uses -// context.Background() as the context. -func (client *WANPPPConnection1) RequestConnection() (err error) { - return client.RequestConnectionCtx(context.Background()) -} - -func (client *WANPPPConnection1) RequestTerminationCtx( - ctx context.Context, -) (err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "RequestTermination", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "DeletePortMapping", request, response); err != nil { return } @@ -3785,10 +3783,14 @@ func (client *WANPPPConnection1) RequestTerminationCtx( return } -// RequestTermination is the legacy version of RequestTerminationCtx, but uses +// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) RequestTermination() (err error) { - return client.RequestTerminationCtx(context.Background()) +func (client *WANPPPConnection1) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { + return client.DeletePortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + ) } func (client *WANPPPConnection1) ForceTerminationCtx( @@ -3820,163 +3822,222 @@ func (client *WANPPPConnection1) ForceTermination() (err error) { return client.ForceTerminationCtx(context.Background()) } -func (client *WANPPPConnection1) SetAutoDisconnectTimeCtx( +func (client *WANPPPConnection1) GetAutoDisconnectTimeCtx( ctx context.Context, - NewAutoDisconnectTime uint32, -) (err error) { +) (NewAutoDisconnectTime uint32, err error) { // Request structure. - request := &struct { - NewAutoDisconnectTime string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewAutoDisconnectTime string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetAutoDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses +// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { - return client.SetAutoDisconnectTimeCtx(context.Background(), - NewAutoDisconnectTime, - ) +func (client *WANPPPConnection1) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { + return client.GetAutoDisconnectTimeCtx(context.Background()) } -func (client *WANPPPConnection1) SetIdleDisconnectTimeCtx( +// +// Return values: +// +// * NewPossibleConnectionTypes: allowed values: Unconfigured, IP_Routed, DHCP_Spoofed, PPPoE_Bridged, PPTP_Relay, L2TP_Relay, PPPoE_Relay +func (client *WANPPPConnection1) GetConnectionTypeInfoCtx( ctx context.Context, - NewIdleDisconnectTime uint32, -) (err error) { +) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { // Request structure. - request := &struct { - NewIdleDisconnectTime string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewConnectionType string + NewPossibleConnectionTypes string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetConnectionTypeInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { + return + } + if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses +// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { - return client.SetIdleDisconnectTimeCtx(context.Background(), - NewIdleDisconnectTime, - ) +func (client *WANPPPConnection1) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + return client.GetConnectionTypeInfoCtx(context.Background()) } -func (client *WANPPPConnection1) SetWarnDisconnectDelayCtx( +func (client *WANPPPConnection1) GetExternalIPAddressCtx( ctx context.Context, - NewWarnDisconnectDelay uint32, -) (err error) { +) (NewExternalIPAddress string, err error) { // Request structure. - request := &struct { - NewWarnDisconnectDelay string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewExternalIPAddress string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetWarnDisconnectDelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetExternalIPAddress", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses +// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { - return client.SetWarnDisconnectDelayCtx(context.Background(), - NewWarnDisconnectDelay, - ) +func (client *WANPPPConnection1) GetExternalIPAddress() (NewExternalIPAddress string, err error) { + return client.GetExternalIPAddressCtx(context.Background()) } // // Return values: // -// * NewConnectionStatus: allowed values: Unconfigured, Connected, Disconnected -// -// * NewLastConnectionError: allowed values: ERROR_NONE -func (client *WANPPPConnection1) GetStatusInfoCtx( +// * NewProtocol: allowed values: TCP, UDP +func (client *WANPPPConnection1) GetGenericPortMappingEntryCtx( ctx context.Context, -) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { + NewPortMappingIndex uint16, +) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewPortMappingIndex string + }{} // BEGIN Marshal arguments into request. + if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := &struct { - NewConnectionStatus string - NewLastConnectionError string - NewUptime string + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetStatusInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetGenericPortMappingEntry", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { + if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { return } - if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { + if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { return } - if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { + if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { return } - // END Unmarshal arguments from response. + if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { + return + } + if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { + return + } + if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { + return + } + if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + return + } + if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { + return + } + // END Unmarshal arguments from response. return } -// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses +// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { - return client.GetStatusInfoCtx(context.Background()) +func (client *WANPPPConnection1) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + return client.GetGenericPortMappingEntryCtx(context.Background(), + NewPortMappingIndex, + ) +} + +func (client *WANPPPConnection1) GetIdleDisconnectTimeCtx( + ctx context.Context, +) (NewIdleDisconnectTime uint32, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewIdleDisconnectTime string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetIdleDisconnectTime", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses +// context.Background() as the context. +func (client *WANPPPConnection1) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { + return client.GetIdleDisconnectTimeCtx(context.Background()) } func (client *WANPPPConnection1) GetLinkLayerMaxBitRatesCtx( @@ -4017,9 +4078,9 @@ func (client *WANPPPConnection1) GetLinkLayerMaxBitRates() (NewUpstreamMaxBitRat return client.GetLinkLayerMaxBitRatesCtx(context.Background()) } -func (client *WANPPPConnection1) GetPPPEncryptionProtocolCtx( +func (client *WANPPPConnection1) GetNATRSIPStatusCtx( ctx context.Context, -) (NewPPPEncryptionProtocol string, err error) { +) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4028,32 +4089,36 @@ func (client *WANPPPConnection1) GetPPPEncryptionProtocolCtx( // Response structure. response := &struct { - NewPPPEncryptionProtocol string + NewRSIPAvailable string + NewNATEnabled string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPEncryptionProtocol", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetNATRSIPStatus", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPPPEncryptionProtocol, err = soap.UnmarshalString(response.NewPPPEncryptionProtocol); err != nil { + if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { + return + } + if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { return } // END Unmarshal arguments from response. return } -// GetPPPEncryptionProtocol is the legacy version of GetPPPEncryptionProtocolCtx, but uses +// GetNATRSIPStatus is the legacy version of GetNATRSIPStatusCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetPPPEncryptionProtocol() (NewPPPEncryptionProtocol string, err error) { - return client.GetPPPEncryptionProtocolCtx(context.Background()) +func (client *WANPPPConnection1) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNATEnabled bool, err error) { + return client.GetNATRSIPStatusCtx(context.Background()) } -func (client *WANPPPConnection1) GetPPPCompressionProtocolCtx( +func (client *WANPPPConnection1) GetPPPAuthenticationProtocolCtx( ctx context.Context, -) (NewPPPCompressionProtocol string, err error) { +) (NewPPPAuthenticationProtocol string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4062,32 +4127,32 @@ func (client *WANPPPConnection1) GetPPPCompressionProtocolCtx( // Response structure. response := &struct { - NewPPPCompressionProtocol string + NewPPPAuthenticationProtocol string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPCompressionProtocol", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPAuthenticationProtocol", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPPPCompressionProtocol, err = soap.UnmarshalString(response.NewPPPCompressionProtocol); err != nil { + if NewPPPAuthenticationProtocol, err = soap.UnmarshalString(response.NewPPPAuthenticationProtocol); err != nil { return } // END Unmarshal arguments from response. return } -// GetPPPCompressionProtocol is the legacy version of GetPPPCompressionProtocolCtx, but uses +// GetPPPAuthenticationProtocol is the legacy version of GetPPPAuthenticationProtocolCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetPPPCompressionProtocol() (NewPPPCompressionProtocol string, err error) { - return client.GetPPPCompressionProtocolCtx(context.Background()) +func (client *WANPPPConnection1) GetPPPAuthenticationProtocol() (NewPPPAuthenticationProtocol string, err error) { + return client.GetPPPAuthenticationProtocolCtx(context.Background()) } -func (client *WANPPPConnection1) GetPPPAuthenticationProtocolCtx( +func (client *WANPPPConnection1) GetPPPCompressionProtocolCtx( ctx context.Context, -) (NewPPPAuthenticationProtocol string, err error) { +) (NewPPPCompressionProtocol string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4096,32 +4161,32 @@ func (client *WANPPPConnection1) GetPPPAuthenticationProtocolCtx( // Response structure. response := &struct { - NewPPPAuthenticationProtocol string + NewPPPCompressionProtocol string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPAuthenticationProtocol", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPCompressionProtocol", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPPPAuthenticationProtocol, err = soap.UnmarshalString(response.NewPPPAuthenticationProtocol); err != nil { + if NewPPPCompressionProtocol, err = soap.UnmarshalString(response.NewPPPCompressionProtocol); err != nil { return } // END Unmarshal arguments from response. return } -// GetPPPAuthenticationProtocol is the legacy version of GetPPPAuthenticationProtocolCtx, but uses +// GetPPPCompressionProtocol is the legacy version of GetPPPCompressionProtocolCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetPPPAuthenticationProtocol() (NewPPPAuthenticationProtocol string, err error) { - return client.GetPPPAuthenticationProtocolCtx(context.Background()) +func (client *WANPPPConnection1) GetPPPCompressionProtocol() (NewPPPCompressionProtocol string, err error) { + return client.GetPPPCompressionProtocolCtx(context.Background()) } -func (client *WANPPPConnection1) GetUserNameCtx( +func (client *WANPPPConnection1) GetPPPEncryptionProtocolCtx( ctx context.Context, -) (NewUserName string, err error) { +) (NewPPPEncryptionProtocol string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4130,27 +4195,27 @@ func (client *WANPPPConnection1) GetUserNameCtx( // Response structure. response := &struct { - NewUserName string + NewPPPEncryptionProtocol string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetUserName", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPEncryptionProtocol", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewUserName, err = soap.UnmarshalString(response.NewUserName); err != nil { + if NewPPPEncryptionProtocol, err = soap.UnmarshalString(response.NewPPPEncryptionProtocol); err != nil { return } // END Unmarshal arguments from response. return } -// GetUserName is the legacy version of GetUserNameCtx, but uses +// GetPPPEncryptionProtocol is the legacy version of GetPPPEncryptionProtocolCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetUserName() (NewUserName string, err error) { - return client.GetUserNameCtx(context.Background()) +func (client *WANPPPConnection1) GetPPPEncryptionProtocol() (NewPPPEncryptionProtocol string, err error) { + return client.GetPPPEncryptionProtocolCtx(context.Background()) } func (client *WANPPPConnection1) GetPasswordCtx( @@ -4187,43 +4252,90 @@ func (client *WANPPPConnection1) GetPassword() (NewPassword string, err error) { return client.GetPasswordCtx(context.Background()) } -func (client *WANPPPConnection1) GetAutoDisconnectTimeCtx( +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANPPPConnection1) GetSpecificPortMappingEntryCtx( ctx context.Context, -) (NewAutoDisconnectTime uint32, err error) { + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, +) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + }{} // BEGIN Marshal arguments into request. + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := &struct { - NewAutoDisconnectTime string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetSpecificPortMappingEntry", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { + return + } + if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { + return + } + if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { + return + } + if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + return + } + if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { return } // END Unmarshal arguments from response. return } -// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses +// GetSpecificPortMappingEntry is the legacy version of GetSpecificPortMappingEntryCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { - return client.GetAutoDisconnectTimeCtx(context.Background()) +func (client *WANPPPConnection1) GetSpecificPortMappingEntry(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + return client.GetSpecificPortMappingEntryCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + ) } -func (client *WANPPPConnection1) GetIdleDisconnectTimeCtx( +// +// Return values: +// +// * NewConnectionStatus: allowed values: Unconfigured, Connected, Disconnected +// +// * NewLastConnectionError: allowed values: ERROR_NONE +func (client *WANPPPConnection1) GetStatusInfoCtx( ctx context.Context, -) (NewIdleDisconnectTime uint32, err error) { +) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4232,32 +4344,40 @@ func (client *WANPPPConnection1) GetIdleDisconnectTimeCtx( // Response structure. response := &struct { - NewIdleDisconnectTime string + NewConnectionStatus string + NewLastConnectionError string + NewUptime string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetStatusInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { + if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { + return + } + if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { + return + } + if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { return } // END Unmarshal arguments from response. return } -// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses +// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { - return client.GetIdleDisconnectTimeCtx(context.Background()) +func (client *WANPPPConnection1) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { + return client.GetStatusInfoCtx(context.Background()) } -func (client *WANPPPConnection1) GetWarnDisconnectDelayCtx( +func (client *WANPPPConnection1) GetUserNameCtx( ctx context.Context, -) (NewWarnDisconnectDelay uint32, err error) { +) (NewUserName string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4266,32 +4386,32 @@ func (client *WANPPPConnection1) GetWarnDisconnectDelayCtx( // Response structure. response := &struct { - NewWarnDisconnectDelay string + NewUserName string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetWarnDisconnectDelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetUserName", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewWarnDisconnectDelay, err = soap.UnmarshalUi4(response.NewWarnDisconnectDelay); err != nil { + if NewUserName, err = soap.UnmarshalString(response.NewUserName); err != nil { return } // END Unmarshal arguments from response. return } -// GetWarnDisconnectDelay is the legacy version of GetWarnDisconnectDelayCtx, but uses +// GetUserName is the legacy version of GetUserNameCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetWarnDisconnectDelay() (NewWarnDisconnectDelay uint32, err error) { - return client.GetWarnDisconnectDelayCtx(context.Background()) +func (client *WANPPPConnection1) GetUserName() (NewUserName string, err error) { + return client.GetUserNameCtx(context.Background()) } -func (client *WANPPPConnection1) GetNATRSIPStatusCtx( +func (client *WANPPPConnection1) GetWarnDisconnectDelayCtx( ctx context.Context, -) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { +) (NewWarnDisconnectDelay uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4300,233 +4420,135 @@ func (client *WANPPPConnection1) GetNATRSIPStatusCtx( // Response structure. response := &struct { - NewRSIPAvailable string - NewNATEnabled string + NewWarnDisconnectDelay string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetNATRSIPStatus", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetWarnDisconnectDelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { - return - } - if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { + if NewWarnDisconnectDelay, err = soap.UnmarshalUi4(response.NewWarnDisconnectDelay); err != nil { return } // END Unmarshal arguments from response. return } -// GetNATRSIPStatus is the legacy version of GetNATRSIPStatusCtx, but uses +// GetWarnDisconnectDelay is the legacy version of GetWarnDisconnectDelayCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNATEnabled bool, err error) { - return client.GetNATRSIPStatusCtx(context.Background()) +func (client *WANPPPConnection1) GetWarnDisconnectDelay() (NewWarnDisconnectDelay uint32, err error) { + return client.GetWarnDisconnectDelayCtx(context.Background()) } -// -// Return values: -// -// * NewProtocol: allowed values: TCP, UDP -func (client *WANPPPConnection1) GetGenericPortMappingEntryCtx( +func (client *WANPPPConnection1) RequestConnectionCtx( ctx context.Context, - NewPortMappingIndex uint16, -) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { +) (err error) { // Request structure. - request := &struct { - NewPortMappingIndex string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetGenericPortMappingEntry", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "RequestConnection", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { - return - } - if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { - return - } - if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { - return - } - if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { - return - } - if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { - return - } - if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { - return - } - if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { - return - } - if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { + // END Unmarshal arguments from response. + return +} + +// RequestConnection is the legacy version of RequestConnectionCtx, but uses +// context.Background() as the context. +func (client *WANPPPConnection1) RequestConnection() (err error) { + return client.RequestConnectionCtx(context.Background()) +} + +func (client *WANPPPConnection1) RequestTerminationCtx( + ctx context.Context, +) (err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := interface{}(nil) + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "RequestTermination", request, response); err != nil { return } + + // BEGIN Unmarshal arguments from response. + // END Unmarshal arguments from response. return } -// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses +// RequestTermination is the legacy version of RequestTerminationCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - return client.GetGenericPortMappingEntryCtx(context.Background(), - NewPortMappingIndex, - ) +func (client *WANPPPConnection1) RequestTermination() (err error) { + return client.RequestTerminationCtx(context.Background()) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANPPPConnection1) GetSpecificPortMappingEntryCtx( +func (client *WANPPPConnection1) SetAutoDisconnectTimeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, -) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + NewAutoDisconnectTime uint32, +) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string + NewAutoDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { return } // END Marshal arguments into request. // Response structure. - response := &struct { - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetSpecificPortMappingEntry", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetAutoDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { - return - } - if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { - return - } - if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { - return - } - if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { - return - } - if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetSpecificPortMappingEntry is the legacy version of GetSpecificPortMappingEntryCtx, but uses +// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetSpecificPortMappingEntry(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - return client.GetSpecificPortMappingEntryCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, +func (client *WANPPPConnection1) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { + return client.SetAutoDisconnectTimeCtx(context.Background(), + NewAutoDisconnectTime, ) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANPPPConnection1) AddPortMappingCtx( +func (client *WANPPPConnection1) SetConnectionTypeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, - NewInternalPort uint16, - NewInternalClient string, - NewEnabled bool, - NewPortMappingDescription string, - NewLeaseDuration uint32, + NewConnectionType string, ) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string + NewConnectionType string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } - if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { - return - } - if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { - return - } - if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { - return - } - if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { - return - } - if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { + if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { return } // END Marshal arguments into request. @@ -4535,7 +4557,7 @@ func (client *WANPPPConnection1) AddPortMappingCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "AddPortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetConnectionType", request, response); err != nil { return } @@ -4545,47 +4567,25 @@ func (client *WANPPPConnection1) AddPortMappingCtx( return } -// AddPortMapping is the legacy version of AddPortMappingCtx, but uses +// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { - return client.AddPortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, - NewInternalPort, - NewInternalClient, - NewEnabled, - NewPortMappingDescription, - NewLeaseDuration, +func (client *WANPPPConnection1) SetConnectionType(NewConnectionType string) (err error) { + return client.SetConnectionTypeCtx(context.Background(), + NewConnectionType, ) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANPPPConnection1) DeletePortMappingCtx( +func (client *WANPPPConnection1) SetIdleDisconnectTimeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, + NewIdleDisconnectTime uint32, ) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string + NewIdleDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { return } // END Marshal arguments into request. @@ -4594,7 +4594,7 @@ func (client *WANPPPConnection1) DeletePortMappingCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "DeletePortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetIdleDisconnectTime", request, response); err != nil { return } @@ -4604,46 +4604,47 @@ func (client *WANPPPConnection1) DeletePortMappingCtx( return } -// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses +// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { - return client.DeletePortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, +func (client *WANPPPConnection1) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { + return client.SetIdleDisconnectTimeCtx(context.Background(), + NewIdleDisconnectTime, ) } -func (client *WANPPPConnection1) GetExternalIPAddressCtx( +func (client *WANPPPConnection1) SetWarnDisconnectDelayCtx( ctx context.Context, -) (NewExternalIPAddress string, err error) { + NewWarnDisconnectDelay uint32, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewWarnDisconnectDelay string + }{} // BEGIN Marshal arguments into request. + if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewExternalIPAddress string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetExternalIPAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetWarnDisconnectDelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses +// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetExternalIPAddress() (NewExternalIPAddress string, err error) { - return client.GetExternalIPAddressCtx(context.Background()) +func (client *WANPPPConnection1) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { + return client.SetWarnDisconnectDelayCtx(context.Background(), + NewWarnDisconnectDelay, + ) } diff --git a/vendor/github.com/huin/goupnp/dcps/internetgateway2/internetgateway2.go b/vendor/github.com/huin/goupnp/dcps/internetgateway2/internetgateway2.go index 0e7a18fa7f..e79d7824f4 100644 --- a/vendor/github.com/huin/goupnp/dcps/internetgateway2/internetgateway2.go +++ b/vendor/github.com/huin/goupnp/dcps/internetgateway2/internetgateway2.go @@ -1,6 +1,7 @@ // Client for UPnP Device Control Protocol Internet Gateway Device v2. // -// This DCP is documented in detail at: http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v2-Device.pdf +// This DCP is documented in detail at: +// - http://upnp.org/specs/gw/UPnP-gw-InternetGatewayDevice-v2-Device.pdf // // Typically, use one of the New* functions to create clients for services. package internetgateway2 @@ -106,57 +107,94 @@ func newDeviceProtection1ClientsFromGenericClients(genericClients []goupnp.Servi return clients } -func (client *DeviceProtection1) SendSetupMessageCtx( +func (client *DeviceProtection1) AddIdentityListCtx( ctx context.Context, - ProtocolType string, - InMessage []byte, -) (OutMessage []byte, err error) { + IdentityList string, +) (IdentityListResult string, err error) { // Request structure. request := &struct { - ProtocolType string - InMessage string + IdentityList string }{} // BEGIN Marshal arguments into request. - if request.ProtocolType, err = soap.MarshalString(ProtocolType); err != nil { - return - } - if request.InMessage, err = soap.MarshalBinBase64(InMessage); err != nil { + if request.IdentityList, err = soap.MarshalString(IdentityList); err != nil { return } // END Marshal arguments into request. // Response structure. response := &struct { - OutMessage string + IdentityListResult string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "SendSetupMessage", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "AddIdentityList", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if OutMessage, err = soap.UnmarshalBinBase64(response.OutMessage); err != nil { + if IdentityListResult, err = soap.UnmarshalString(response.IdentityListResult); err != nil { return } // END Unmarshal arguments from response. return } -// SendSetupMessage is the legacy version of SendSetupMessageCtx, but uses +// AddIdentityList is the legacy version of AddIdentityListCtx, but uses // context.Background() as the context. -func (client *DeviceProtection1) SendSetupMessage(ProtocolType string, InMessage []byte) (OutMessage []byte, err error) { - return client.SendSetupMessageCtx(context.Background(), - ProtocolType, - InMessage, +func (client *DeviceProtection1) AddIdentityList(IdentityList string) (IdentityListResult string, err error) { + return client.AddIdentityListCtx(context.Background(), + IdentityList, ) } -func (client *DeviceProtection1) GetSupportedProtocolsCtx( +func (client *DeviceProtection1) AddRolesForIdentityCtx( ctx context.Context, -) (ProtocolList string, err error) { + Identity string, + RoleList string, +) (err error) { + // Request structure. + request := &struct { + Identity string + RoleList string + }{} + // BEGIN Marshal arguments into request. + + if request.Identity, err = soap.MarshalString(Identity); err != nil { + return + } + if request.RoleList, err = soap.MarshalString(RoleList); err != nil { + return + } + // END Marshal arguments into request. + + // Response structure. + response := interface{}(nil) + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "AddRolesForIdentity", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + // END Unmarshal arguments from response. + return +} + +// AddRolesForIdentity is the legacy version of AddRolesForIdentityCtx, but uses +// context.Background() as the context. +func (client *DeviceProtection1) AddRolesForIdentity(Identity string, RoleList string) (err error) { + return client.AddRolesForIdentityCtx(context.Background(), + Identity, + RoleList, + ) +} + +func (client *DeviceProtection1) GetACLDataCtx( + ctx context.Context, +) (ACL string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -165,27 +203,27 @@ func (client *DeviceProtection1) GetSupportedProtocolsCtx( // Response structure. response := &struct { - ProtocolList string + ACL string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "GetSupportedProtocols", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "GetACLData", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if ProtocolList, err = soap.UnmarshalString(response.ProtocolList); err != nil { + if ACL, err = soap.UnmarshalString(response.ACL); err != nil { return } // END Unmarshal arguments from response. return } -// GetSupportedProtocols is the legacy version of GetSupportedProtocolsCtx, but uses +// GetACLData is the legacy version of GetACLDataCtx, but uses // context.Background() as the context. -func (client *DeviceProtection1) GetSupportedProtocols() (ProtocolList string, err error) { - return client.GetSupportedProtocolsCtx(context.Background()) +func (client *DeviceProtection1) GetACLData() (ACL string, err error) { + return client.GetACLDataCtx(context.Background()) } func (client *DeviceProtection1) GetAssignedRolesCtx( @@ -280,6 +318,40 @@ func (client *DeviceProtection1) GetRolesForAction(DeviceUDN string, ServiceId s ) } +func (client *DeviceProtection1) GetSupportedProtocolsCtx( + ctx context.Context, +) (ProtocolList string, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := &struct { + ProtocolList string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "GetSupportedProtocols", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if ProtocolList, err = soap.UnmarshalString(response.ProtocolList); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// GetSupportedProtocols is the legacy version of GetSupportedProtocolsCtx, but uses +// context.Background() as the context. +func (client *DeviceProtection1) GetSupportedProtocols() (ProtocolList string, err error) { + return client.GetSupportedProtocolsCtx(context.Background()) +} + func (client *DeviceProtection1) GetUserLoginChallengeCtx( ctx context.Context, ProtocolType string, @@ -332,27 +404,17 @@ func (client *DeviceProtection1) GetUserLoginChallenge(ProtocolType string, Name ) } -func (client *DeviceProtection1) UserLoginCtx( +func (client *DeviceProtection1) RemoveIdentityCtx( ctx context.Context, - ProtocolType string, - Challenge []byte, - Authenticator []byte, + Identity string, ) (err error) { // Request structure. request := &struct { - ProtocolType string - Challenge string - Authenticator string + Identity string }{} // BEGIN Marshal arguments into request. - if request.ProtocolType, err = soap.MarshalString(ProtocolType); err != nil { - return - } - if request.Challenge, err = soap.MarshalBinBase64(Challenge); err != nil { - return - } - if request.Authenticator, err = soap.MarshalBinBase64(Authenticator); err != nil { + if request.Identity, err = soap.MarshalString(Identity); err != nil { return } // END Marshal arguments into request. @@ -361,7 +423,7 @@ func (client *DeviceProtection1) UserLoginCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "UserLogin", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "RemoveIdentity", request, response); err != nil { return } @@ -371,30 +433,39 @@ func (client *DeviceProtection1) UserLoginCtx( return } -// UserLogin is the legacy version of UserLoginCtx, but uses +// RemoveIdentity is the legacy version of RemoveIdentityCtx, but uses // context.Background() as the context. -func (client *DeviceProtection1) UserLogin(ProtocolType string, Challenge []byte, Authenticator []byte) (err error) { - return client.UserLoginCtx(context.Background(), - ProtocolType, - Challenge, - Authenticator, +func (client *DeviceProtection1) RemoveIdentity(Identity string) (err error) { + return client.RemoveIdentityCtx(context.Background(), + Identity, ) } -func (client *DeviceProtection1) UserLogoutCtx( +func (client *DeviceProtection1) RemoveRolesForIdentityCtx( ctx context.Context, + Identity string, + RoleList string, ) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + Identity string + RoleList string + }{} // BEGIN Marshal arguments into request. + if request.Identity, err = soap.MarshalString(Identity); err != nil { + return + } + if request.RoleList, err = soap.MarshalString(RoleList); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "UserLogout", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "RemoveRolesForIdentity", request, response); err != nil { return } @@ -404,151 +475,139 @@ func (client *DeviceProtection1) UserLogoutCtx( return } -// UserLogout is the legacy version of UserLogoutCtx, but uses +// RemoveRolesForIdentity is the legacy version of RemoveRolesForIdentityCtx, but uses // context.Background() as the context. -func (client *DeviceProtection1) UserLogout() (err error) { - return client.UserLogoutCtx(context.Background()) +func (client *DeviceProtection1) RemoveRolesForIdentity(Identity string, RoleList string) (err error) { + return client.RemoveRolesForIdentityCtx(context.Background(), + Identity, + RoleList, + ) } -func (client *DeviceProtection1) GetACLDataCtx( +func (client *DeviceProtection1) SendSetupMessageCtx( ctx context.Context, -) (ACL string, err error) { + ProtocolType string, + InMessage []byte, +) (OutMessage []byte, err error) { // Request structure. - request := interface{}(nil) + request := &struct { + ProtocolType string + InMessage string + }{} // BEGIN Marshal arguments into request. + if request.ProtocolType, err = soap.MarshalString(ProtocolType); err != nil { + return + } + if request.InMessage, err = soap.MarshalBinBase64(InMessage); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := &struct { - ACL string + OutMessage string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "GetACLData", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "SendSetupMessage", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if ACL, err = soap.UnmarshalString(response.ACL); err != nil { + if OutMessage, err = soap.UnmarshalBinBase64(response.OutMessage); err != nil { return } // END Unmarshal arguments from response. return } -// GetACLData is the legacy version of GetACLDataCtx, but uses +// SendSetupMessage is the legacy version of SendSetupMessageCtx, but uses // context.Background() as the context. -func (client *DeviceProtection1) GetACLData() (ACL string, err error) { - return client.GetACLDataCtx(context.Background()) +func (client *DeviceProtection1) SendSetupMessage(ProtocolType string, InMessage []byte) (OutMessage []byte, err error) { + return client.SendSetupMessageCtx(context.Background(), + ProtocolType, + InMessage, + ) } -func (client *DeviceProtection1) AddIdentityListCtx( +func (client *DeviceProtection1) SetUserLoginPasswordCtx( ctx context.Context, - IdentityList string, -) (IdentityListResult string, err error) { + ProtocolType string, + Name string, + Stored []byte, + Salt []byte, +) (err error) { // Request structure. request := &struct { - IdentityList string + ProtocolType string + Name string + Stored string + Salt string }{} // BEGIN Marshal arguments into request. - if request.IdentityList, err = soap.MarshalString(IdentityList); err != nil { + if request.ProtocolType, err = soap.MarshalString(ProtocolType); err != nil { + return + } + if request.Name, err = soap.MarshalString(Name); err != nil { + return + } + if request.Stored, err = soap.MarshalBinBase64(Stored); err != nil { + return + } + if request.Salt, err = soap.MarshalBinBase64(Salt); err != nil { return } // END Marshal arguments into request. // Response structure. - response := &struct { - IdentityListResult string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "AddIdentityList", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "SetUserLoginPassword", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if IdentityListResult, err = soap.UnmarshalString(response.IdentityListResult); err != nil { - return - } // END Unmarshal arguments from response. return } -// AddIdentityList is the legacy version of AddIdentityListCtx, but uses +// SetUserLoginPassword is the legacy version of SetUserLoginPasswordCtx, but uses // context.Background() as the context. -func (client *DeviceProtection1) AddIdentityList(IdentityList string) (IdentityListResult string, err error) { - return client.AddIdentityListCtx(context.Background(), - IdentityList, +func (client *DeviceProtection1) SetUserLoginPassword(ProtocolType string, Name string, Stored []byte, Salt []byte) (err error) { + return client.SetUserLoginPasswordCtx(context.Background(), + ProtocolType, + Name, + Stored, + Salt, ) } -func (client *DeviceProtection1) RemoveIdentityCtx( - ctx context.Context, - Identity string, -) (err error) { - // Request structure. - request := &struct { - Identity string - }{} - // BEGIN Marshal arguments into request. - - if request.Identity, err = soap.MarshalString(Identity); err != nil { - return - } - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "RemoveIdentity", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - // END Unmarshal arguments from response. - return -} - -// RemoveIdentity is the legacy version of RemoveIdentityCtx, but uses -// context.Background() as the context. -func (client *DeviceProtection1) RemoveIdentity(Identity string) (err error) { - return client.RemoveIdentityCtx(context.Background(), - Identity, - ) -} - -func (client *DeviceProtection1) SetUserLoginPasswordCtx( +func (client *DeviceProtection1) UserLoginCtx( ctx context.Context, ProtocolType string, - Name string, - Stored []byte, - Salt []byte, + Challenge []byte, + Authenticator []byte, ) (err error) { // Request structure. request := &struct { - ProtocolType string - Name string - Stored string - Salt string + ProtocolType string + Challenge string + Authenticator string }{} // BEGIN Marshal arguments into request. if request.ProtocolType, err = soap.MarshalString(ProtocolType); err != nil { return } - if request.Name, err = soap.MarshalString(Name); err != nil { - return - } - if request.Stored, err = soap.MarshalBinBase64(Stored); err != nil { + if request.Challenge, err = soap.MarshalBinBase64(Challenge); err != nil { return } - if request.Salt, err = soap.MarshalBinBase64(Salt); err != nil { + if request.Authenticator, err = soap.MarshalBinBase64(Authenticator); err != nil { return } // END Marshal arguments into request. @@ -557,7 +616,7 @@ func (client *DeviceProtection1) SetUserLoginPasswordCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "SetUserLoginPassword", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "UserLogin", request, response); err != nil { return } @@ -567,85 +626,30 @@ func (client *DeviceProtection1) SetUserLoginPasswordCtx( return } -// SetUserLoginPassword is the legacy version of SetUserLoginPasswordCtx, but uses +// UserLogin is the legacy version of UserLoginCtx, but uses // context.Background() as the context. -func (client *DeviceProtection1) SetUserLoginPassword(ProtocolType string, Name string, Stored []byte, Salt []byte) (err error) { - return client.SetUserLoginPasswordCtx(context.Background(), +func (client *DeviceProtection1) UserLogin(ProtocolType string, Challenge []byte, Authenticator []byte) (err error) { + return client.UserLoginCtx(context.Background(), ProtocolType, - Name, - Stored, - Salt, - ) -} - -func (client *DeviceProtection1) AddRolesForIdentityCtx( - ctx context.Context, - Identity string, - RoleList string, -) (err error) { - // Request structure. - request := &struct { - Identity string - RoleList string - }{} - // BEGIN Marshal arguments into request. - - if request.Identity, err = soap.MarshalString(Identity); err != nil { - return - } - if request.RoleList, err = soap.MarshalString(RoleList); err != nil { - return - } - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "AddRolesForIdentity", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - // END Unmarshal arguments from response. - return -} - -// AddRolesForIdentity is the legacy version of AddRolesForIdentityCtx, but uses -// context.Background() as the context. -func (client *DeviceProtection1) AddRolesForIdentity(Identity string, RoleList string) (err error) { - return client.AddRolesForIdentityCtx(context.Background(), - Identity, - RoleList, + Challenge, + Authenticator, ) } -func (client *DeviceProtection1) RemoveRolesForIdentityCtx( +func (client *DeviceProtection1) UserLogoutCtx( ctx context.Context, - Identity string, - RoleList string, ) (err error) { // Request structure. - request := &struct { - Identity string - RoleList string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.Identity, err = soap.MarshalString(Identity); err != nil { - return - } - if request.RoleList, err = soap.MarshalString(RoleList); err != nil { - return - } // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "RemoveRolesForIdentity", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_DeviceProtection_1, "UserLogout", request, response); err != nil { return } @@ -655,13 +659,10 @@ func (client *DeviceProtection1) RemoveRolesForIdentityCtx( return } -// RemoveRolesForIdentity is the legacy version of RemoveRolesForIdentityCtx, but uses +// UserLogout is the legacy version of UserLogoutCtx, but uses // context.Background() as the context. -func (client *DeviceProtection1) RemoveRolesForIdentity(Identity string, RoleList string) (err error) { - return client.RemoveRolesForIdentityCtx(context.Background(), - Identity, - RoleList, - ) +func (client *DeviceProtection1) UserLogout() (err error) { + return client.UserLogoutCtx(context.Background()) } // LANHostConfigManagement1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:LANHostConfigManagement:1". See @@ -724,17 +725,17 @@ func newLANHostConfigManagement1ClientsFromGenericClients(genericClients []goupn return clients } -func (client *LANHostConfigManagement1) SetDHCPServerConfigurableCtx( +func (client *LANHostConfigManagement1) DeleteDNSServerCtx( ctx context.Context, - NewDHCPServerConfigurable bool, + NewDNSServers string, ) (err error) { // Request structure. request := &struct { - NewDHCPServerConfigurable string + NewDNSServers string }{} // BEGIN Marshal arguments into request. - if request.NewDHCPServerConfigurable, err = soap.MarshalBoolean(NewDHCPServerConfigurable); err != nil { + if request.NewDNSServers, err = soap.MarshalString(NewDNSServers); err != nil { return } // END Marshal arguments into request. @@ -743,7 +744,7 @@ func (client *LANHostConfigManagement1) SetDHCPServerConfigurableCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDHCPServerConfigurable", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteDNSServer", request, response); err != nil { return } @@ -753,59 +754,62 @@ func (client *LANHostConfigManagement1) SetDHCPServerConfigurableCtx( return } -// SetDHCPServerConfigurable is the legacy version of SetDHCPServerConfigurableCtx, but uses +// DeleteDNSServer is the legacy version of DeleteDNSServerCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetDHCPServerConfigurable(NewDHCPServerConfigurable bool) (err error) { - return client.SetDHCPServerConfigurableCtx(context.Background(), - NewDHCPServerConfigurable, +func (client *LANHostConfigManagement1) DeleteDNSServer(NewDNSServers string) (err error) { + return client.DeleteDNSServerCtx(context.Background(), + NewDNSServers, ) } -func (client *LANHostConfigManagement1) GetDHCPServerConfigurableCtx( +func (client *LANHostConfigManagement1) DeleteIPRouterCtx( ctx context.Context, -) (NewDHCPServerConfigurable bool, err error) { + NewIPRouters string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewIPRouters string + }{} // BEGIN Marshal arguments into request. + if request.NewIPRouters, err = soap.MarshalString(NewIPRouters); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewDHCPServerConfigurable string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDHCPServerConfigurable", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteIPRouter", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDHCPServerConfigurable, err = soap.UnmarshalBoolean(response.NewDHCPServerConfigurable); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetDHCPServerConfigurable is the legacy version of GetDHCPServerConfigurableCtx, but uses +// DeleteIPRouter is the legacy version of DeleteIPRouterCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetDHCPServerConfigurable() (NewDHCPServerConfigurable bool, err error) { - return client.GetDHCPServerConfigurableCtx(context.Background()) +func (client *LANHostConfigManagement1) DeleteIPRouter(NewIPRouters string) (err error) { + return client.DeleteIPRouterCtx(context.Background(), + NewIPRouters, + ) } -func (client *LANHostConfigManagement1) SetDHCPRelayCtx( +func (client *LANHostConfigManagement1) DeleteReservedAddressCtx( ctx context.Context, - NewDHCPRelay bool, + NewReservedAddresses string, ) (err error) { // Request structure. request := &struct { - NewDHCPRelay string + NewReservedAddresses string }{} // BEGIN Marshal arguments into request. - if request.NewDHCPRelay, err = soap.MarshalBoolean(NewDHCPRelay); err != nil { + if request.NewReservedAddresses, err = soap.MarshalString(NewReservedAddresses); err != nil { return } // END Marshal arguments into request. @@ -814,7 +818,7 @@ func (client *LANHostConfigManagement1) SetDHCPRelayCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDHCPRelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteReservedAddress", request, response); err != nil { return } @@ -824,17 +828,17 @@ func (client *LANHostConfigManagement1) SetDHCPRelayCtx( return } -// SetDHCPRelay is the legacy version of SetDHCPRelayCtx, but uses +// DeleteReservedAddress is the legacy version of DeleteReservedAddressCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetDHCPRelay(NewDHCPRelay bool) (err error) { - return client.SetDHCPRelayCtx(context.Background(), - NewDHCPRelay, +func (client *LANHostConfigManagement1) DeleteReservedAddress(NewReservedAddresses string) (err error) { + return client.DeleteReservedAddressCtx(context.Background(), + NewReservedAddresses, ) } -func (client *LANHostConfigManagement1) GetDHCPRelayCtx( +func (client *LANHostConfigManagement1) GetAddressRangeCtx( ctx context.Context, -) (NewDHCPRelay bool, err error) { +) (NewMinAddress string, NewMaxAddress string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -843,69 +847,70 @@ func (client *LANHostConfigManagement1) GetDHCPRelayCtx( // Response structure. response := &struct { - NewDHCPRelay string + NewMinAddress string + NewMaxAddress string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDHCPRelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetAddressRange", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDHCPRelay, err = soap.UnmarshalBoolean(response.NewDHCPRelay); err != nil { + if NewMinAddress, err = soap.UnmarshalString(response.NewMinAddress); err != nil { + return + } + if NewMaxAddress, err = soap.UnmarshalString(response.NewMaxAddress); err != nil { return } // END Unmarshal arguments from response. return } -// GetDHCPRelay is the legacy version of GetDHCPRelayCtx, but uses +// GetAddressRange is the legacy version of GetAddressRangeCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetDHCPRelay() (NewDHCPRelay bool, err error) { - return client.GetDHCPRelayCtx(context.Background()) +func (client *LANHostConfigManagement1) GetAddressRange() (NewMinAddress string, NewMaxAddress string, err error) { + return client.GetAddressRangeCtx(context.Background()) } -func (client *LANHostConfigManagement1) SetSubnetMaskCtx( +func (client *LANHostConfigManagement1) GetDHCPRelayCtx( ctx context.Context, - NewSubnetMask string, -) (err error) { +) (NewDHCPRelay bool, err error) { // Request structure. - request := &struct { - NewSubnetMask string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewSubnetMask, err = soap.MarshalString(NewSubnetMask); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDHCPRelay string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetSubnetMask", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDHCPRelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDHCPRelay, err = soap.UnmarshalBoolean(response.NewDHCPRelay); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetSubnetMask is the legacy version of SetSubnetMaskCtx, but uses +// GetDHCPRelay is the legacy version of GetDHCPRelayCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetSubnetMask(NewSubnetMask string) (err error) { - return client.SetSubnetMaskCtx(context.Background(), - NewSubnetMask, - ) +func (client *LANHostConfigManagement1) GetDHCPRelay() (NewDHCPRelay bool, err error) { + return client.GetDHCPRelayCtx(context.Background()) } -func (client *LANHostConfigManagement1) GetSubnetMaskCtx( +func (client *LANHostConfigManagement1) GetDHCPServerConfigurableCtx( ctx context.Context, -) (NewSubnetMask string, err error) { +) (NewDHCPServerConfigurable bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -914,101 +919,95 @@ func (client *LANHostConfigManagement1) GetSubnetMaskCtx( // Response structure. response := &struct { - NewSubnetMask string + NewDHCPServerConfigurable string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetSubnetMask", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDHCPServerConfigurable", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewSubnetMask, err = soap.UnmarshalString(response.NewSubnetMask); err != nil { + if NewDHCPServerConfigurable, err = soap.UnmarshalBoolean(response.NewDHCPServerConfigurable); err != nil { return } // END Unmarshal arguments from response. return } -// GetSubnetMask is the legacy version of GetSubnetMaskCtx, but uses +// GetDHCPServerConfigurable is the legacy version of GetDHCPServerConfigurableCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetSubnetMask() (NewSubnetMask string, err error) { - return client.GetSubnetMaskCtx(context.Background()) +func (client *LANHostConfigManagement1) GetDHCPServerConfigurable() (NewDHCPServerConfigurable bool, err error) { + return client.GetDHCPServerConfigurableCtx(context.Background()) } -func (client *LANHostConfigManagement1) SetIPRouterCtx( +func (client *LANHostConfigManagement1) GetDNSServersCtx( ctx context.Context, - NewIPRouters string, -) (err error) { +) (NewDNSServers string, err error) { // Request structure. - request := &struct { - NewIPRouters string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewIPRouters, err = soap.MarshalString(NewIPRouters); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDNSServers string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetIPRouter", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDNSServers", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDNSServers, err = soap.UnmarshalString(response.NewDNSServers); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetIPRouter is the legacy version of SetIPRouterCtx, but uses +// GetDNSServers is the legacy version of GetDNSServersCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetIPRouter(NewIPRouters string) (err error) { - return client.SetIPRouterCtx(context.Background(), - NewIPRouters, - ) +func (client *LANHostConfigManagement1) GetDNSServers() (NewDNSServers string, err error) { + return client.GetDNSServersCtx(context.Background()) } -func (client *LANHostConfigManagement1) DeleteIPRouterCtx( +func (client *LANHostConfigManagement1) GetDomainNameCtx( ctx context.Context, - NewIPRouters string, -) (err error) { +) (NewDomainName string, err error) { // Request structure. - request := &struct { - NewIPRouters string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewIPRouters, err = soap.MarshalString(NewIPRouters); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDomainName string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteIPRouter", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDomainName", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDomainName, err = soap.UnmarshalString(response.NewDomainName); err != nil { + return + } // END Unmarshal arguments from response. return } -// DeleteIPRouter is the legacy version of DeleteIPRouterCtx, but uses +// GetDomainName is the legacy version of GetDomainNameCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) DeleteIPRouter(NewIPRouters string) (err error) { - return client.DeleteIPRouterCtx(context.Background(), - NewIPRouters, - ) +func (client *LANHostConfigManagement1) GetDomainName() (NewDomainName string, err error) { + return client.GetDomainNameCtx(context.Background()) } func (client *LANHostConfigManagement1) GetIPRoutersListCtx( @@ -1045,46 +1044,43 @@ func (client *LANHostConfigManagement1) GetIPRoutersList() (NewIPRouters string, return client.GetIPRoutersListCtx(context.Background()) } -func (client *LANHostConfigManagement1) SetDomainNameCtx( +func (client *LANHostConfigManagement1) GetReservedAddressesCtx( ctx context.Context, - NewDomainName string, -) (err error) { +) (NewReservedAddresses string, err error) { // Request structure. - request := &struct { - NewDomainName string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewDomainName, err = soap.MarshalString(NewDomainName); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewReservedAddresses string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDomainName", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetReservedAddresses", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewReservedAddresses, err = soap.UnmarshalString(response.NewReservedAddresses); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetDomainName is the legacy version of SetDomainNameCtx, but uses +// GetReservedAddresses is the legacy version of GetReservedAddressesCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetDomainName(NewDomainName string) (err error) { - return client.SetDomainNameCtx(context.Background(), - NewDomainName, - ) +func (client *LANHostConfigManagement1) GetReservedAddresses() (NewReservedAddresses string, err error) { + return client.GetReservedAddressesCtx(context.Background()) } -func (client *LANHostConfigManagement1) GetDomainNameCtx( +func (client *LANHostConfigManagement1) GetSubnetMaskCtx( ctx context.Context, -) (NewDomainName string, err error) { +) (NewSubnetMask string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1093,27 +1089,27 @@ func (client *LANHostConfigManagement1) GetDomainNameCtx( // Response structure. response := &struct { - NewDomainName string + NewSubnetMask string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDomainName", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetSubnetMask", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDomainName, err = soap.UnmarshalString(response.NewDomainName); err != nil { + if NewSubnetMask, err = soap.UnmarshalString(response.NewSubnetMask); err != nil { return } // END Unmarshal arguments from response. return } -// GetDomainName is the legacy version of GetDomainNameCtx, but uses +// GetSubnetMask is the legacy version of GetSubnetMaskCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetDomainName() (NewDomainName string, err error) { - return client.GetDomainNameCtx(context.Background()) +func (client *LANHostConfigManagement1) GetSubnetMask() (NewSubnetMask string, err error) { + return client.GetSubnetMaskCtx(context.Background()) } func (client *LANHostConfigManagement1) SetAddressRangeCtx( @@ -1159,55 +1155,54 @@ func (client *LANHostConfigManagement1) SetAddressRange(NewMinAddress string, Ne ) } -func (client *LANHostConfigManagement1) GetAddressRangeCtx( +func (client *LANHostConfigManagement1) SetDHCPRelayCtx( ctx context.Context, -) (NewMinAddress string, NewMaxAddress string, err error) { + NewDHCPRelay bool, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewDHCPRelay string + }{} // BEGIN Marshal arguments into request. + if request.NewDHCPRelay, err = soap.MarshalBoolean(NewDHCPRelay); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewMinAddress string - NewMaxAddress string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetAddressRange", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDHCPRelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewMinAddress, err = soap.UnmarshalString(response.NewMinAddress); err != nil { - return - } - if NewMaxAddress, err = soap.UnmarshalString(response.NewMaxAddress); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetAddressRange is the legacy version of GetAddressRangeCtx, but uses +// SetDHCPRelay is the legacy version of SetDHCPRelayCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetAddressRange() (NewMinAddress string, NewMaxAddress string, err error) { - return client.GetAddressRangeCtx(context.Background()) +func (client *LANHostConfigManagement1) SetDHCPRelay(NewDHCPRelay bool) (err error) { + return client.SetDHCPRelayCtx(context.Background(), + NewDHCPRelay, + ) } -func (client *LANHostConfigManagement1) SetReservedAddressCtx( +func (client *LANHostConfigManagement1) SetDHCPServerConfigurableCtx( ctx context.Context, - NewReservedAddresses string, + NewDHCPServerConfigurable bool, ) (err error) { // Request structure. request := &struct { - NewReservedAddresses string + NewDHCPServerConfigurable string }{} // BEGIN Marshal arguments into request. - if request.NewReservedAddresses, err = soap.MarshalString(NewReservedAddresses); err != nil { + if request.NewDHCPServerConfigurable, err = soap.MarshalBoolean(NewDHCPServerConfigurable); err != nil { return } // END Marshal arguments into request. @@ -1216,7 +1211,7 @@ func (client *LANHostConfigManagement1) SetReservedAddressCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetReservedAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDHCPServerConfigurable", request, response); err != nil { return } @@ -1226,25 +1221,25 @@ func (client *LANHostConfigManagement1) SetReservedAddressCtx( return } -// SetReservedAddress is the legacy version of SetReservedAddressCtx, but uses +// SetDHCPServerConfigurable is the legacy version of SetDHCPServerConfigurableCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetReservedAddress(NewReservedAddresses string) (err error) { - return client.SetReservedAddressCtx(context.Background(), - NewReservedAddresses, +func (client *LANHostConfigManagement1) SetDHCPServerConfigurable(NewDHCPServerConfigurable bool) (err error) { + return client.SetDHCPServerConfigurableCtx(context.Background(), + NewDHCPServerConfigurable, ) } -func (client *LANHostConfigManagement1) DeleteReservedAddressCtx( +func (client *LANHostConfigManagement1) SetDNSServerCtx( ctx context.Context, - NewReservedAddresses string, + NewDNSServers string, ) (err error) { // Request structure. request := &struct { - NewReservedAddresses string + NewDNSServers string }{} // BEGIN Marshal arguments into request. - if request.NewReservedAddresses, err = soap.MarshalString(NewReservedAddresses); err != nil { + if request.NewDNSServers, err = soap.MarshalString(NewDNSServers); err != nil { return } // END Marshal arguments into request. @@ -1253,7 +1248,7 @@ func (client *LANHostConfigManagement1) DeleteReservedAddressCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteReservedAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDNSServer", request, response); err != nil { return } @@ -1263,59 +1258,62 @@ func (client *LANHostConfigManagement1) DeleteReservedAddressCtx( return } -// DeleteReservedAddress is the legacy version of DeleteReservedAddressCtx, but uses +// SetDNSServer is the legacy version of SetDNSServerCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) DeleteReservedAddress(NewReservedAddresses string) (err error) { - return client.DeleteReservedAddressCtx(context.Background(), - NewReservedAddresses, +func (client *LANHostConfigManagement1) SetDNSServer(NewDNSServers string) (err error) { + return client.SetDNSServerCtx(context.Background(), + NewDNSServers, ) } -func (client *LANHostConfigManagement1) GetReservedAddressesCtx( +func (client *LANHostConfigManagement1) SetDomainNameCtx( ctx context.Context, -) (NewReservedAddresses string, err error) { + NewDomainName string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewDomainName string + }{} // BEGIN Marshal arguments into request. + if request.NewDomainName, err = soap.MarshalString(NewDomainName); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewReservedAddresses string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetReservedAddresses", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDomainName", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewReservedAddresses, err = soap.UnmarshalString(response.NewReservedAddresses); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetReservedAddresses is the legacy version of GetReservedAddressesCtx, but uses +// SetDomainName is the legacy version of SetDomainNameCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetReservedAddresses() (NewReservedAddresses string, err error) { - return client.GetReservedAddressesCtx(context.Background()) +func (client *LANHostConfigManagement1) SetDomainName(NewDomainName string) (err error) { + return client.SetDomainNameCtx(context.Background(), + NewDomainName, + ) } -func (client *LANHostConfigManagement1) SetDNSServerCtx( +func (client *LANHostConfigManagement1) SetIPRouterCtx( ctx context.Context, - NewDNSServers string, + NewIPRouters string, ) (err error) { // Request structure. request := &struct { - NewDNSServers string + NewIPRouters string }{} // BEGIN Marshal arguments into request. - if request.NewDNSServers, err = soap.MarshalString(NewDNSServers); err != nil { + if request.NewIPRouters, err = soap.MarshalString(NewIPRouters); err != nil { return } // END Marshal arguments into request. @@ -1324,7 +1322,7 @@ func (client *LANHostConfigManagement1) SetDNSServerCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetDNSServer", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetIPRouter", request, response); err != nil { return } @@ -1334,25 +1332,25 @@ func (client *LANHostConfigManagement1) SetDNSServerCtx( return } -// SetDNSServer is the legacy version of SetDNSServerCtx, but uses +// SetIPRouter is the legacy version of SetIPRouterCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) SetDNSServer(NewDNSServers string) (err error) { - return client.SetDNSServerCtx(context.Background(), - NewDNSServers, +func (client *LANHostConfigManagement1) SetIPRouter(NewIPRouters string) (err error) { + return client.SetIPRouterCtx(context.Background(), + NewIPRouters, ) } -func (client *LANHostConfigManagement1) DeleteDNSServerCtx( +func (client *LANHostConfigManagement1) SetReservedAddressCtx( ctx context.Context, - NewDNSServers string, + NewReservedAddresses string, ) (err error) { // Request structure. request := &struct { - NewDNSServers string + NewReservedAddresses string }{} // BEGIN Marshal arguments into request. - if request.NewDNSServers, err = soap.MarshalString(NewDNSServers); err != nil { + if request.NewReservedAddresses, err = soap.MarshalString(NewReservedAddresses); err != nil { return } // END Marshal arguments into request. @@ -1361,7 +1359,7 @@ func (client *LANHostConfigManagement1) DeleteDNSServerCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "DeleteDNSServer", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetReservedAddress", request, response); err != nil { return } @@ -1371,46 +1369,49 @@ func (client *LANHostConfigManagement1) DeleteDNSServerCtx( return } -// DeleteDNSServer is the legacy version of DeleteDNSServerCtx, but uses +// SetReservedAddress is the legacy version of SetReservedAddressCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) DeleteDNSServer(NewDNSServers string) (err error) { - return client.DeleteDNSServerCtx(context.Background(), - NewDNSServers, +func (client *LANHostConfigManagement1) SetReservedAddress(NewReservedAddresses string) (err error) { + return client.SetReservedAddressCtx(context.Background(), + NewReservedAddresses, ) } -func (client *LANHostConfigManagement1) GetDNSServersCtx( +func (client *LANHostConfigManagement1) SetSubnetMaskCtx( ctx context.Context, -) (NewDNSServers string, err error) { + NewSubnetMask string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewSubnetMask string + }{} // BEGIN Marshal arguments into request. + if request.NewSubnetMask, err = soap.MarshalString(NewSubnetMask); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewDNSServers string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "GetDNSServers", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_LANHostConfigManagement_1, "SetSubnetMask", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDNSServers, err = soap.UnmarshalString(response.NewDNSServers); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetDNSServers is the legacy version of GetDNSServersCtx, but uses +// SetSubnetMask is the legacy version of SetSubnetMaskCtx, but uses // context.Background() as the context. -func (client *LANHostConfigManagement1) GetDNSServers() (NewDNSServers string, err error) { - return client.GetDNSServersCtx(context.Background()) +func (client *LANHostConfigManagement1) SetSubnetMask(NewSubnetMask string) (err error) { + return client.SetSubnetMaskCtx(context.Background(), + NewSubnetMask, + ) } // Layer3Forwarding1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:Layer3Forwarding:1". See @@ -1473,75 +1474,75 @@ func newLayer3Forwarding1ClientsFromGenericClients(genericClients []goupnp.Servi return clients } -func (client *Layer3Forwarding1) SetDefaultConnectionServiceCtx( +func (client *Layer3Forwarding1) GetDefaultConnectionServiceCtx( ctx context.Context, - NewDefaultConnectionService string, -) (err error) { +) (NewDefaultConnectionService string, err error) { // Request structure. - request := &struct { - NewDefaultConnectionService string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewDefaultConnectionService, err = soap.MarshalString(NewDefaultConnectionService); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDefaultConnectionService string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_Layer3Forwarding_1, "SetDefaultConnectionService", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_Layer3Forwarding_1, "GetDefaultConnectionService", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDefaultConnectionService, err = soap.UnmarshalString(response.NewDefaultConnectionService); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetDefaultConnectionService is the legacy version of SetDefaultConnectionServiceCtx, but uses +// GetDefaultConnectionService is the legacy version of GetDefaultConnectionServiceCtx, but uses // context.Background() as the context. -func (client *Layer3Forwarding1) SetDefaultConnectionService(NewDefaultConnectionService string) (err error) { - return client.SetDefaultConnectionServiceCtx(context.Background(), - NewDefaultConnectionService, - ) +func (client *Layer3Forwarding1) GetDefaultConnectionService() (NewDefaultConnectionService string, err error) { + return client.GetDefaultConnectionServiceCtx(context.Background()) } -func (client *Layer3Forwarding1) GetDefaultConnectionServiceCtx( +func (client *Layer3Forwarding1) SetDefaultConnectionServiceCtx( ctx context.Context, -) (NewDefaultConnectionService string, err error) { + NewDefaultConnectionService string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewDefaultConnectionService string + }{} // BEGIN Marshal arguments into request. + if request.NewDefaultConnectionService, err = soap.MarshalString(NewDefaultConnectionService); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewDefaultConnectionService string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_Layer3Forwarding_1, "GetDefaultConnectionService", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_Layer3Forwarding_1, "SetDefaultConnectionService", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDefaultConnectionService, err = soap.UnmarshalString(response.NewDefaultConnectionService); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetDefaultConnectionService is the legacy version of GetDefaultConnectionServiceCtx, but uses +// SetDefaultConnectionService is the legacy version of SetDefaultConnectionServiceCtx, but uses // context.Background() as the context. -func (client *Layer3Forwarding1) GetDefaultConnectionService() (NewDefaultConnectionService string, err error) { - return client.GetDefaultConnectionServiceCtx(context.Background()) +func (client *Layer3Forwarding1) SetDefaultConnectionService(NewDefaultConnectionService string) (err error) { + return client.SetDefaultConnectionServiceCtx(context.Background(), + NewDefaultConnectionService, + ) } // WANCableLinkConfig1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANCableLinkConfig:1". See @@ -1604,6 +1605,40 @@ func newWANCableLinkConfig1ClientsFromGenericClients(genericClients []goupnp.Ser return clients } +func (client *WANCableLinkConfig1) GetBPIEncryptionEnabledCtx( + ctx context.Context, +) (NewBPIEncryptionEnabled bool, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewBPIEncryptionEnabled string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetBPIEncryptionEnabled", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if NewBPIEncryptionEnabled, err = soap.UnmarshalBoolean(response.NewBPIEncryptionEnabled); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// GetBPIEncryptionEnabled is the legacy version of GetBPIEncryptionEnabledCtx, but uses +// context.Background() as the context. +func (client *WANCableLinkConfig1) GetBPIEncryptionEnabled() (NewBPIEncryptionEnabled bool, err error) { + return client.GetBPIEncryptionEnabledCtx(context.Background()) +} + // // Return values: // @@ -1648,9 +1683,9 @@ func (client *WANCableLinkConfig1) GetCableLinkConfigInfo() (NewCableLinkConfigS return client.GetCableLinkConfigInfoCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetDownstreamFrequencyCtx( +func (client *WANCableLinkConfig1) GetConfigFileCtx( ctx context.Context, -) (NewDownstreamFrequency uint32, err error) { +) (NewConfigFile string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1659,36 +1694,32 @@ func (client *WANCableLinkConfig1) GetDownstreamFrequencyCtx( // Response structure. response := &struct { - NewDownstreamFrequency string + NewConfigFile string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetDownstreamFrequency", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetConfigFile", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDownstreamFrequency, err = soap.UnmarshalUi4(response.NewDownstreamFrequency); err != nil { + if NewConfigFile, err = soap.UnmarshalString(response.NewConfigFile); err != nil { return } // END Unmarshal arguments from response. return } -// GetDownstreamFrequency is the legacy version of GetDownstreamFrequencyCtx, but uses +// GetConfigFile is the legacy version of GetConfigFileCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetDownstreamFrequency() (NewDownstreamFrequency uint32, err error) { - return client.GetDownstreamFrequencyCtx(context.Background()) +func (client *WANCableLinkConfig1) GetConfigFile() (NewConfigFile string, err error) { + return client.GetConfigFileCtx(context.Background()) } -// -// Return values: -// -// * NewDownstreamModulation: allowed values: 64QAM, 256QAM -func (client *WANCableLinkConfig1) GetDownstreamModulationCtx( +func (client *WANCableLinkConfig1) GetDownstreamFrequencyCtx( ctx context.Context, -) (NewDownstreamModulation string, err error) { +) (NewDownstreamFrequency uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1697,32 +1728,36 @@ func (client *WANCableLinkConfig1) GetDownstreamModulationCtx( // Response structure. response := &struct { - NewDownstreamModulation string + NewDownstreamFrequency string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetDownstreamModulation", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetDownstreamFrequency", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDownstreamModulation, err = soap.UnmarshalString(response.NewDownstreamModulation); err != nil { + if NewDownstreamFrequency, err = soap.UnmarshalUi4(response.NewDownstreamFrequency); err != nil { return } // END Unmarshal arguments from response. return } -// GetDownstreamModulation is the legacy version of GetDownstreamModulationCtx, but uses +// GetDownstreamFrequency is the legacy version of GetDownstreamFrequencyCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetDownstreamModulation() (NewDownstreamModulation string, err error) { - return client.GetDownstreamModulationCtx(context.Background()) +func (client *WANCableLinkConfig1) GetDownstreamFrequency() (NewDownstreamFrequency uint32, err error) { + return client.GetDownstreamFrequencyCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetUpstreamFrequencyCtx( +// +// Return values: +// +// * NewDownstreamModulation: allowed values: 64QAM, 256QAM +func (client *WANCableLinkConfig1) GetDownstreamModulationCtx( ctx context.Context, -) (NewUpstreamFrequency uint32, err error) { +) (NewDownstreamModulation string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1731,36 +1766,32 @@ func (client *WANCableLinkConfig1) GetUpstreamFrequencyCtx( // Response structure. response := &struct { - NewUpstreamFrequency string + NewDownstreamModulation string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamFrequency", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetDownstreamModulation", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewUpstreamFrequency, err = soap.UnmarshalUi4(response.NewUpstreamFrequency); err != nil { + if NewDownstreamModulation, err = soap.UnmarshalString(response.NewDownstreamModulation); err != nil { return } // END Unmarshal arguments from response. return } -// GetUpstreamFrequency is the legacy version of GetUpstreamFrequencyCtx, but uses +// GetDownstreamModulation is the legacy version of GetDownstreamModulationCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetUpstreamFrequency() (NewUpstreamFrequency uint32, err error) { - return client.GetUpstreamFrequencyCtx(context.Background()) +func (client *WANCableLinkConfig1) GetDownstreamModulation() (NewDownstreamModulation string, err error) { + return client.GetDownstreamModulationCtx(context.Background()) } -// -// Return values: -// -// * NewUpstreamModulation: allowed values: QPSK, 16QAM -func (client *WANCableLinkConfig1) GetUpstreamModulationCtx( +func (client *WANCableLinkConfig1) GetTFTPServerCtx( ctx context.Context, -) (NewUpstreamModulation string, err error) { +) (NewTFTPServer string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1769,27 +1800,27 @@ func (client *WANCableLinkConfig1) GetUpstreamModulationCtx( // Response structure. response := &struct { - NewUpstreamModulation string + NewTFTPServer string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamModulation", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetTFTPServer", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewUpstreamModulation, err = soap.UnmarshalString(response.NewUpstreamModulation); err != nil { + if NewTFTPServer, err = soap.UnmarshalString(response.NewTFTPServer); err != nil { return } // END Unmarshal arguments from response. return } -// GetUpstreamModulation is the legacy version of GetUpstreamModulationCtx, but uses +// GetTFTPServer is the legacy version of GetTFTPServerCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetUpstreamModulation() (NewUpstreamModulation string, err error) { - return client.GetUpstreamModulationCtx(context.Background()) +func (client *WANCableLinkConfig1) GetTFTPServer() (NewTFTPServer string, err error) { + return client.GetTFTPServerCtx(context.Background()) } func (client *WANCableLinkConfig1) GetUpstreamChannelIDCtx( @@ -1826,9 +1857,9 @@ func (client *WANCableLinkConfig1) GetUpstreamChannelID() (NewUpstreamChannelID return client.GetUpstreamChannelIDCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetUpstreamPowerLevelCtx( +func (client *WANCableLinkConfig1) GetUpstreamFrequencyCtx( ctx context.Context, -) (NewUpstreamPowerLevel uint32, err error) { +) (NewUpstreamFrequency uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1837,32 +1868,36 @@ func (client *WANCableLinkConfig1) GetUpstreamPowerLevelCtx( // Response structure. response := &struct { - NewUpstreamPowerLevel string + NewUpstreamFrequency string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamPowerLevel", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamFrequency", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewUpstreamPowerLevel, err = soap.UnmarshalUi4(response.NewUpstreamPowerLevel); err != nil { + if NewUpstreamFrequency, err = soap.UnmarshalUi4(response.NewUpstreamFrequency); err != nil { return } // END Unmarshal arguments from response. return } -// GetUpstreamPowerLevel is the legacy version of GetUpstreamPowerLevelCtx, but uses +// GetUpstreamFrequency is the legacy version of GetUpstreamFrequencyCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetUpstreamPowerLevel() (NewUpstreamPowerLevel uint32, err error) { - return client.GetUpstreamPowerLevelCtx(context.Background()) +func (client *WANCableLinkConfig1) GetUpstreamFrequency() (NewUpstreamFrequency uint32, err error) { + return client.GetUpstreamFrequencyCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetBPIEncryptionEnabledCtx( +// +// Return values: +// +// * NewUpstreamModulation: allowed values: QPSK, 16QAM +func (client *WANCableLinkConfig1) GetUpstreamModulationCtx( ctx context.Context, -) (NewBPIEncryptionEnabled bool, err error) { +) (NewUpstreamModulation string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1871,32 +1906,32 @@ func (client *WANCableLinkConfig1) GetBPIEncryptionEnabledCtx( // Response structure. response := &struct { - NewBPIEncryptionEnabled string + NewUpstreamModulation string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetBPIEncryptionEnabled", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamModulation", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewBPIEncryptionEnabled, err = soap.UnmarshalBoolean(response.NewBPIEncryptionEnabled); err != nil { + if NewUpstreamModulation, err = soap.UnmarshalString(response.NewUpstreamModulation); err != nil { return } // END Unmarshal arguments from response. return } -// GetBPIEncryptionEnabled is the legacy version of GetBPIEncryptionEnabledCtx, but uses +// GetUpstreamModulation is the legacy version of GetUpstreamModulationCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetBPIEncryptionEnabled() (NewBPIEncryptionEnabled bool, err error) { - return client.GetBPIEncryptionEnabledCtx(context.Background()) +func (client *WANCableLinkConfig1) GetUpstreamModulation() (NewUpstreamModulation string, err error) { + return client.GetUpstreamModulationCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetConfigFileCtx( +func (client *WANCableLinkConfig1) GetUpstreamPowerLevelCtx( ctx context.Context, -) (NewConfigFile string, err error) { +) (NewUpstreamPowerLevel uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -1905,69 +1940,35 @@ func (client *WANCableLinkConfig1) GetConfigFileCtx( // Response structure. response := &struct { - NewConfigFile string + NewUpstreamPowerLevel string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetConfigFile", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetUpstreamPowerLevel", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConfigFile, err = soap.UnmarshalString(response.NewConfigFile); err != nil { + if NewUpstreamPowerLevel, err = soap.UnmarshalUi4(response.NewUpstreamPowerLevel); err != nil { return } // END Unmarshal arguments from response. return } -// GetConfigFile is the legacy version of GetConfigFileCtx, but uses +// GetUpstreamPowerLevel is the legacy version of GetUpstreamPowerLevelCtx, but uses // context.Background() as the context. -func (client *WANCableLinkConfig1) GetConfigFile() (NewConfigFile string, err error) { - return client.GetConfigFileCtx(context.Background()) +func (client *WANCableLinkConfig1) GetUpstreamPowerLevel() (NewUpstreamPowerLevel uint32, err error) { + return client.GetUpstreamPowerLevelCtx(context.Background()) } -func (client *WANCableLinkConfig1) GetTFTPServerCtx( - ctx context.Context, -) (NewTFTPServer string, err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - - // END Marshal arguments into request. - - // Response structure. - response := &struct { - NewTFTPServer string - }{} - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCableLinkConfig_1, "GetTFTPServer", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - if NewTFTPServer, err = soap.UnmarshalString(response.NewTFTPServer); err != nil { - return - } - // END Unmarshal arguments from response. - return -} - -// GetTFTPServer is the legacy version of GetTFTPServerCtx, but uses -// context.Background() as the context. -func (client *WANCableLinkConfig1) GetTFTPServer() (NewTFTPServer string, err error) { - return client.GetTFTPServerCtx(context.Background()) -} - -// WANCommonInterfaceConfig1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1". See -// goupnp.ServiceClient, which contains RootDevice and Service attributes which -// are provided for informational value. -type WANCommonInterfaceConfig1 struct { - goupnp.ServiceClient -} +// WANCommonInterfaceConfig1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANCommonInterfaceConfig:1". See +// goupnp.ServiceClient, which contains RootDevice and Service attributes which +// are provided for informational value. +type WANCommonInterfaceConfig1 struct { + goupnp.ServiceClient +} // NewWANCommonInterfaceConfig1Clients discovers instances of the service on the network, // and returns clients to any that are found. errors will contain an error for @@ -2022,75 +2023,50 @@ func newWANCommonInterfaceConfig1ClientsFromGenericClients(genericClients []goup return clients } -func (client *WANCommonInterfaceConfig1) SetEnabledForInternetCtx( +func (client *WANCommonInterfaceConfig1) GetActiveConnectionCtx( ctx context.Context, - NewEnabledForInternet bool, -) (err error) { + NewActiveConnectionIndex uint16, +) (NewActiveConnDeviceContainer string, NewActiveConnectionServiceID string, err error) { // Request structure. request := &struct { - NewEnabledForInternet string + NewActiveConnectionIndex string }{} // BEGIN Marshal arguments into request. - if request.NewEnabledForInternet, err = soap.MarshalBoolean(NewEnabledForInternet); err != nil { - return - } - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "SetEnabledForInternet", request, response); err != nil { + if request.NewActiveConnectionIndex, err = soap.MarshalUi2(NewActiveConnectionIndex); err != nil { return } - - // BEGIN Unmarshal arguments from response. - - // END Unmarshal arguments from response. - return -} - -// SetEnabledForInternet is the legacy version of SetEnabledForInternetCtx, but uses -// context.Background() as the context. -func (client *WANCommonInterfaceConfig1) SetEnabledForInternet(NewEnabledForInternet bool) (err error) { - return client.SetEnabledForInternetCtx(context.Background(), - NewEnabledForInternet, - ) -} - -func (client *WANCommonInterfaceConfig1) GetEnabledForInternetCtx( - ctx context.Context, -) (NewEnabledForInternet bool, err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - // END Marshal arguments into request. // Response structure. response := &struct { - NewEnabledForInternet string + NewActiveConnDeviceContainer string + NewActiveConnectionServiceID string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetEnabledForInternet", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetActiveConnection", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewEnabledForInternet, err = soap.UnmarshalBoolean(response.NewEnabledForInternet); err != nil { + if NewActiveConnDeviceContainer, err = soap.UnmarshalString(response.NewActiveConnDeviceContainer); err != nil { + return + } + if NewActiveConnectionServiceID, err = soap.UnmarshalString(response.NewActiveConnectionServiceID); err != nil { return } // END Unmarshal arguments from response. return } -// GetEnabledForInternet is the legacy version of GetEnabledForInternetCtx, but uses +// GetActiveConnection is the legacy version of GetActiveConnectionCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetEnabledForInternet() (NewEnabledForInternet bool, err error) { - return client.GetEnabledForInternetCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetActiveConnection(NewActiveConnectionIndex uint16) (NewActiveConnDeviceContainer string, NewActiveConnectionServiceID string, err error) { + return client.GetActiveConnectionCtx(context.Background(), + NewActiveConnectionIndex, + ) } // @@ -2145,9 +2121,9 @@ func (client *WANCommonInterfaceConfig1) GetCommonLinkProperties() (NewWANAccess return client.GetCommonLinkPropertiesCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetWANAccessProviderCtx( +func (client *WANCommonInterfaceConfig1) GetEnabledForInternetCtx( ctx context.Context, -) (NewWANAccessProvider string, err error) { +) (NewEnabledForInternet bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2156,27 +2132,27 @@ func (client *WANCommonInterfaceConfig1) GetWANAccessProviderCtx( // Response structure. response := &struct { - NewWANAccessProvider string + NewEnabledForInternet string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetWANAccessProvider", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetEnabledForInternet", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewWANAccessProvider, err = soap.UnmarshalString(response.NewWANAccessProvider); err != nil { + if NewEnabledForInternet, err = soap.UnmarshalBoolean(response.NewEnabledForInternet); err != nil { return } // END Unmarshal arguments from response. return } -// GetWANAccessProvider is the legacy version of GetWANAccessProviderCtx, but uses +// GetEnabledForInternet is the legacy version of GetEnabledForInternetCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetWANAccessProvider() (NewWANAccessProvider string, err error) { - return client.GetWANAccessProviderCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetEnabledForInternet() (NewEnabledForInternet bool, err error) { + return client.GetEnabledForInternetCtx(context.Background()) } // @@ -2217,6 +2193,40 @@ func (client *WANCommonInterfaceConfig1) GetMaximumActiveConnections() (NewMaxim return client.GetMaximumActiveConnectionsCtx(context.Background()) } +func (client *WANCommonInterfaceConfig1) GetTotalBytesReceivedCtx( + ctx context.Context, +) (NewTotalBytesReceived uint64, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewTotalBytesReceived string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalBytesReceived", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if NewTotalBytesReceived, err = soap.UnmarshalUi8(response.NewTotalBytesReceived); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// GetTotalBytesReceived is the legacy version of GetTotalBytesReceivedCtx, but uses +// context.Background() as the context. +func (client *WANCommonInterfaceConfig1) GetTotalBytesReceived() (NewTotalBytesReceived uint64, err error) { + return client.GetTotalBytesReceivedCtx(context.Background()) +} + func (client *WANCommonInterfaceConfig1) GetTotalBytesSentCtx( ctx context.Context, ) (NewTotalBytesSent uint64, err error) { @@ -2251,9 +2261,9 @@ func (client *WANCommonInterfaceConfig1) GetTotalBytesSent() (NewTotalBytesSent return client.GetTotalBytesSentCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetTotalBytesReceivedCtx( +func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceivedCtx( ctx context.Context, -) (NewTotalBytesReceived uint64, err error) { +) (NewTotalPacketsReceived uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2262,27 +2272,27 @@ func (client *WANCommonInterfaceConfig1) GetTotalBytesReceivedCtx( // Response structure. response := &struct { - NewTotalBytesReceived string + NewTotalPacketsReceived string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalBytesReceived", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalPacketsReceived", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewTotalBytesReceived, err = soap.UnmarshalUi8(response.NewTotalBytesReceived); err != nil { + if NewTotalPacketsReceived, err = soap.UnmarshalUi4(response.NewTotalPacketsReceived); err != nil { return } // END Unmarshal arguments from response. return } -// GetTotalBytesReceived is the legacy version of GetTotalBytesReceivedCtx, but uses +// GetTotalPacketsReceived is the legacy version of GetTotalPacketsReceivedCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetTotalBytesReceived() (NewTotalBytesReceived uint64, err error) { - return client.GetTotalBytesReceivedCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceived() (NewTotalPacketsReceived uint32, err error) { + return client.GetTotalPacketsReceivedCtx(context.Background()) } func (client *WANCommonInterfaceConfig1) GetTotalPacketsSentCtx( @@ -2319,9 +2329,9 @@ func (client *WANCommonInterfaceConfig1) GetTotalPacketsSent() (NewTotalPacketsS return client.GetTotalPacketsSentCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceivedCtx( +func (client *WANCommonInterfaceConfig1) GetWANAccessProviderCtx( ctx context.Context, -) (NewTotalPacketsReceived uint32, err error) { +) (NewWANAccessProvider string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2330,72 +2340,63 @@ func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceivedCtx( // Response structure. response := &struct { - NewTotalPacketsReceived string + NewWANAccessProvider string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetTotalPacketsReceived", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetWANAccessProvider", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewTotalPacketsReceived, err = soap.UnmarshalUi4(response.NewTotalPacketsReceived); err != nil { + if NewWANAccessProvider, err = soap.UnmarshalString(response.NewWANAccessProvider); err != nil { return } // END Unmarshal arguments from response. return } -// GetTotalPacketsReceived is the legacy version of GetTotalPacketsReceivedCtx, but uses +// GetWANAccessProvider is the legacy version of GetWANAccessProviderCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetTotalPacketsReceived() (NewTotalPacketsReceived uint32, err error) { - return client.GetTotalPacketsReceivedCtx(context.Background()) +func (client *WANCommonInterfaceConfig1) GetWANAccessProvider() (NewWANAccessProvider string, err error) { + return client.GetWANAccessProviderCtx(context.Background()) } -func (client *WANCommonInterfaceConfig1) GetActiveConnectionCtx( +func (client *WANCommonInterfaceConfig1) SetEnabledForInternetCtx( ctx context.Context, - NewActiveConnectionIndex uint16, -) (NewActiveConnDeviceContainer string, NewActiveConnectionServiceID string, err error) { + NewEnabledForInternet bool, +) (err error) { // Request structure. request := &struct { - NewActiveConnectionIndex string + NewEnabledForInternet string }{} // BEGIN Marshal arguments into request. - if request.NewActiveConnectionIndex, err = soap.MarshalUi2(NewActiveConnectionIndex); err != nil { + if request.NewEnabledForInternet, err = soap.MarshalBoolean(NewEnabledForInternet); err != nil { return } // END Marshal arguments into request. // Response structure. - response := &struct { - NewActiveConnDeviceContainer string - NewActiveConnectionServiceID string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "GetActiveConnection", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANCommonInterfaceConfig_1, "SetEnabledForInternet", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewActiveConnDeviceContainer, err = soap.UnmarshalString(response.NewActiveConnDeviceContainer); err != nil { - return - } - if NewActiveConnectionServiceID, err = soap.UnmarshalString(response.NewActiveConnectionServiceID); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetActiveConnection is the legacy version of GetActiveConnectionCtx, but uses +// SetEnabledForInternet is the legacy version of SetEnabledForInternetCtx, but uses // context.Background() as the context. -func (client *WANCommonInterfaceConfig1) GetActiveConnection(NewActiveConnectionIndex uint16) (NewActiveConnDeviceContainer string, NewActiveConnectionServiceID string, err error) { - return client.GetActiveConnectionCtx(context.Background(), - NewActiveConnectionIndex, +func (client *WANCommonInterfaceConfig1) SetEnabledForInternet(NewEnabledForInternet bool) (err error) { + return client.SetEnabledForInternetCtx(context.Background(), + NewEnabledForInternet, ) } @@ -2459,50 +2460,43 @@ func newWANDSLLinkConfig1ClientsFromGenericClients(genericClients []goupnp.Servi return clients } -func (client *WANDSLLinkConfig1) SetDSLLinkTypeCtx( +func (client *WANDSLLinkConfig1) GetATMEncapsulationCtx( ctx context.Context, - NewLinkType string, -) (err error) { +) (NewATMEncapsulation string, err error) { // Request structure. - request := &struct { - NewLinkType string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewLinkType, err = soap.MarshalString(NewLinkType); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewATMEncapsulation string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetDSLLinkType", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetATMEncapsulation", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewATMEncapsulation, err = soap.UnmarshalString(response.NewATMEncapsulation); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetDSLLinkType is the legacy version of SetDSLLinkTypeCtx, but uses +// GetATMEncapsulation is the legacy version of GetATMEncapsulationCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) SetDSLLinkType(NewLinkType string) (err error) { - return client.SetDSLLinkTypeCtx(context.Background(), - NewLinkType, - ) +func (client *WANDSLLinkConfig1) GetATMEncapsulation() (NewATMEncapsulation string, err error) { + return client.GetATMEncapsulationCtx(context.Background()) } -// -// Return values: -// -// * NewLinkStatus: allowed values: Up, Down -func (client *WANDSLLinkConfig1) GetDSLLinkInfoCtx( +func (client *WANDSLLinkConfig1) GetAutoConfigCtx( ctx context.Context, -) (NewLinkType string, NewLinkStatus string, err error) { +) (NewAutoConfig bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2511,36 +2505,36 @@ func (client *WANDSLLinkConfig1) GetDSLLinkInfoCtx( // Response structure. response := &struct { - NewLinkType string - NewLinkStatus string + NewAutoConfig string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetDSLLinkInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetAutoConfig", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewLinkType, err = soap.UnmarshalString(response.NewLinkType); err != nil { - return - } - if NewLinkStatus, err = soap.UnmarshalString(response.NewLinkStatus); err != nil { + if NewAutoConfig, err = soap.UnmarshalBoolean(response.NewAutoConfig); err != nil { return } // END Unmarshal arguments from response. return } -// GetDSLLinkInfo is the legacy version of GetDSLLinkInfoCtx, but uses +// GetAutoConfig is the legacy version of GetAutoConfigCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetDSLLinkInfo() (NewLinkType string, NewLinkStatus string, err error) { - return client.GetDSLLinkInfoCtx(context.Background()) +func (client *WANDSLLinkConfig1) GetAutoConfig() (NewAutoConfig bool, err error) { + return client.GetAutoConfigCtx(context.Background()) } -func (client *WANDSLLinkConfig1) GetAutoConfigCtx( +// +// Return values: +// +// * NewLinkStatus: allowed values: Up, Down +func (client *WANDSLLinkConfig1) GetDSLLinkInfoCtx( ctx context.Context, -) (NewAutoConfig bool, err error) { +) (NewLinkType string, NewLinkStatus string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2549,32 +2543,36 @@ func (client *WANDSLLinkConfig1) GetAutoConfigCtx( // Response structure. response := &struct { - NewAutoConfig string + NewLinkType string + NewLinkStatus string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetAutoConfig", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetDSLLinkInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewAutoConfig, err = soap.UnmarshalBoolean(response.NewAutoConfig); err != nil { + if NewLinkType, err = soap.UnmarshalString(response.NewLinkType); err != nil { + return + } + if NewLinkStatus, err = soap.UnmarshalString(response.NewLinkStatus); err != nil { return } // END Unmarshal arguments from response. return } -// GetAutoConfig is the legacy version of GetAutoConfigCtx, but uses +// GetDSLLinkInfo is the legacy version of GetDSLLinkInfoCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetAutoConfig() (NewAutoConfig bool, err error) { - return client.GetAutoConfigCtx(context.Background()) +func (client *WANDSLLinkConfig1) GetDSLLinkInfo() (NewLinkType string, NewLinkStatus string, err error) { + return client.GetDSLLinkInfoCtx(context.Background()) } -func (client *WANDSLLinkConfig1) GetModulationTypeCtx( +func (client *WANDSLLinkConfig1) GetDestinationAddressCtx( ctx context.Context, -) (NewModulationType string, err error) { +) (NewDestinationAddress string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2583,69 +2581,66 @@ func (client *WANDSLLinkConfig1) GetModulationTypeCtx( // Response structure. response := &struct { - NewModulationType string + NewDestinationAddress string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetModulationType", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetDestinationAddress", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewModulationType, err = soap.UnmarshalString(response.NewModulationType); err != nil { + if NewDestinationAddress, err = soap.UnmarshalString(response.NewDestinationAddress); err != nil { return } // END Unmarshal arguments from response. return } -// GetModulationType is the legacy version of GetModulationTypeCtx, but uses +// GetDestinationAddress is the legacy version of GetDestinationAddressCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetModulationType() (NewModulationType string, err error) { - return client.GetModulationTypeCtx(context.Background()) +func (client *WANDSLLinkConfig1) GetDestinationAddress() (NewDestinationAddress string, err error) { + return client.GetDestinationAddressCtx(context.Background()) } -func (client *WANDSLLinkConfig1) SetDestinationAddressCtx( +func (client *WANDSLLinkConfig1) GetFCSPreservedCtx( ctx context.Context, - NewDestinationAddress string, -) (err error) { +) (NewFCSPreserved bool, err error) { // Request structure. - request := &struct { - NewDestinationAddress string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewDestinationAddress, err = soap.MarshalString(NewDestinationAddress); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewFCSPreserved string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetDestinationAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetFCSPreserved", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewFCSPreserved, err = soap.UnmarshalBoolean(response.NewFCSPreserved); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetDestinationAddress is the legacy version of SetDestinationAddressCtx, but uses +// GetFCSPreserved is the legacy version of GetFCSPreservedCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) SetDestinationAddress(NewDestinationAddress string) (err error) { - return client.SetDestinationAddressCtx(context.Background(), - NewDestinationAddress, - ) +func (client *WANDSLLinkConfig1) GetFCSPreserved() (NewFCSPreserved bool, err error) { + return client.GetFCSPreservedCtx(context.Background()) } -func (client *WANDSLLinkConfig1) GetDestinationAddressCtx( +func (client *WANDSLLinkConfig1) GetModulationTypeCtx( ctx context.Context, -) (NewDestinationAddress string, err error) { +) (NewModulationType string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -2654,27 +2649,27 @@ func (client *WANDSLLinkConfig1) GetDestinationAddressCtx( // Response structure. response := &struct { - NewDestinationAddress string + NewModulationType string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetDestinationAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetModulationType", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDestinationAddress, err = soap.UnmarshalString(response.NewDestinationAddress); err != nil { + if NewModulationType, err = soap.UnmarshalString(response.NewModulationType); err != nil { return } // END Unmarshal arguments from response. return } -// GetDestinationAddress is the legacy version of GetDestinationAddressCtx, but uses +// GetModulationType is the legacy version of GetModulationTypeCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetDestinationAddress() (NewDestinationAddress string, err error) { - return client.GetDestinationAddressCtx(context.Background()) +func (client *WANDSLLinkConfig1) GetModulationType() (NewModulationType string, err error) { + return client.GetModulationTypeCtx(context.Background()) } func (client *WANDSLLinkConfig1) SetATMEncapsulationCtx( @@ -2714,51 +2709,54 @@ func (client *WANDSLLinkConfig1) SetATMEncapsulation(NewATMEncapsulation string) ) } -func (client *WANDSLLinkConfig1) GetATMEncapsulationCtx( +func (client *WANDSLLinkConfig1) SetDSLLinkTypeCtx( ctx context.Context, -) (NewATMEncapsulation string, err error) { + NewLinkType string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewLinkType string + }{} // BEGIN Marshal arguments into request. + if request.NewLinkType, err = soap.MarshalString(NewLinkType); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewATMEncapsulation string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetATMEncapsulation", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetDSLLinkType", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewATMEncapsulation, err = soap.UnmarshalString(response.NewATMEncapsulation); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetATMEncapsulation is the legacy version of GetATMEncapsulationCtx, but uses +// SetDSLLinkType is the legacy version of SetDSLLinkTypeCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetATMEncapsulation() (NewATMEncapsulation string, err error) { - return client.GetATMEncapsulationCtx(context.Background()) +func (client *WANDSLLinkConfig1) SetDSLLinkType(NewLinkType string) (err error) { + return client.SetDSLLinkTypeCtx(context.Background(), + NewLinkType, + ) } -func (client *WANDSLLinkConfig1) SetFCSPreservedCtx( +func (client *WANDSLLinkConfig1) SetDestinationAddressCtx( ctx context.Context, - NewFCSPreserved bool, + NewDestinationAddress string, ) (err error) { // Request structure. request := &struct { - NewFCSPreserved string + NewDestinationAddress string }{} // BEGIN Marshal arguments into request. - if request.NewFCSPreserved, err = soap.MarshalBoolean(NewFCSPreserved); err != nil { + if request.NewDestinationAddress, err = soap.MarshalString(NewDestinationAddress); err != nil { return } // END Marshal arguments into request. @@ -2767,7 +2765,7 @@ func (client *WANDSLLinkConfig1) SetFCSPreservedCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetFCSPreserved", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetDestinationAddress", request, response); err != nil { return } @@ -2777,46 +2775,49 @@ func (client *WANDSLLinkConfig1) SetFCSPreservedCtx( return } -// SetFCSPreserved is the legacy version of SetFCSPreservedCtx, but uses +// SetDestinationAddress is the legacy version of SetDestinationAddressCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) SetFCSPreserved(NewFCSPreserved bool) (err error) { - return client.SetFCSPreservedCtx(context.Background(), - NewFCSPreserved, +func (client *WANDSLLinkConfig1) SetDestinationAddress(NewDestinationAddress string) (err error) { + return client.SetDestinationAddressCtx(context.Background(), + NewDestinationAddress, ) } -func (client *WANDSLLinkConfig1) GetFCSPreservedCtx( +func (client *WANDSLLinkConfig1) SetFCSPreservedCtx( ctx context.Context, -) (NewFCSPreserved bool, err error) { + NewFCSPreserved bool, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewFCSPreserved string + }{} // BEGIN Marshal arguments into request. + if request.NewFCSPreserved, err = soap.MarshalBoolean(NewFCSPreserved); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewFCSPreserved string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "GetFCSPreserved", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANDSLLinkConfig_1, "SetFCSPreserved", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewFCSPreserved, err = soap.UnmarshalBoolean(response.NewFCSPreserved); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetFCSPreserved is the legacy version of GetFCSPreservedCtx, but uses +// SetFCSPreserved is the legacy version of SetFCSPreservedCtx, but uses // context.Background() as the context. -func (client *WANDSLLinkConfig1) GetFCSPreserved() (NewFCSPreserved bool, err error) { - return client.GetFCSPreservedCtx(context.Background()) +func (client *WANDSLLinkConfig1) SetFCSPreserved(NewFCSPreserved bool) (err error) { + return client.SetFCSPreservedCtx(context.Background(), + NewFCSPreserved, + ) } // WANEthernetLinkConfig1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANEthernetLinkConfig:1". See @@ -2977,17 +2978,57 @@ func newWANIPConnection1ClientsFromGenericClients(genericClients []goupnp.Servic return clients } -func (client *WANIPConnection1) SetConnectionTypeCtx( +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection1) AddPortMappingCtx( ctx context.Context, - NewConnectionType string, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, + NewInternalPort uint16, + NewInternalClient string, + NewEnabled bool, + NewPortMappingDescription string, + NewLeaseDuration uint32, ) (err error) { // Request structure. request := &struct { - NewConnectionType string + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // BEGIN Marshal arguments into request. - if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { + return + } + if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { + return + } + if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { + return + } + if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { + return + } + if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { return } // END Marshal arguments into request. @@ -2996,7 +3037,7 @@ func (client *WANIPConnection1) SetConnectionTypeCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetConnectionType", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "AddPortMapping", request, response); err != nil { return } @@ -3006,57 +3047,76 @@ func (client *WANIPConnection1) SetConnectionTypeCtx( return } -// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses +// AddPortMapping is the legacy version of AddPortMappingCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) SetConnectionType(NewConnectionType string) (err error) { - return client.SetConnectionTypeCtx(context.Background(), - NewConnectionType, +func (client *WANIPConnection1) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { + return client.AddPortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + NewInternalPort, + NewInternalClient, + NewEnabled, + NewPortMappingDescription, + NewLeaseDuration, ) } // -// Return values: +// Arguments: // -// * NewPossibleConnectionTypes: allowed values: Unconfigured, IP_Routed, IP_Bridged -func (client *WANIPConnection1) GetConnectionTypeInfoCtx( +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection1) DeletePortMappingCtx( ctx context.Context, -) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + }{} // BEGIN Marshal arguments into request. + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewConnectionType string - NewPossibleConnectionTypes string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetConnectionTypeInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "DeletePortMapping", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { - return - } - if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses +// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { - return client.GetConnectionTypeInfoCtx(context.Background()) +func (client *WANIPConnection1) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { + return client.DeletePortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + ) } -func (client *WANIPConnection1) RequestConnectionCtx( +func (client *WANIPConnection1) ForceTerminationCtx( ctx context.Context, ) (err error) { // Request structure. @@ -3069,7 +3129,7 @@ func (client *WANIPConnection1) RequestConnectionCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "RequestConnection", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "ForceTermination", request, response); err != nil { return } @@ -3079,15 +3139,15 @@ func (client *WANIPConnection1) RequestConnectionCtx( return } -// RequestConnection is the legacy version of RequestConnectionCtx, but uses +// ForceTermination is the legacy version of ForceTerminationCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) RequestConnection() (err error) { - return client.RequestConnectionCtx(context.Background()) +func (client *WANIPConnection1) ForceTermination() (err error) { + return client.ForceTerminationCtx(context.Background()) } -func (client *WANIPConnection1) RequestTerminationCtx( +func (client *WANIPConnection1) GetAutoDisconnectTimeCtx( ctx context.Context, -) (err error) { +) (NewAutoDisconnectTime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3095,28 +3155,37 @@ func (client *WANIPConnection1) RequestTerminationCtx( // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewAutoDisconnectTime string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "RequestTermination", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetAutoDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + return + } // END Unmarshal arguments from response. return } -// RequestTermination is the legacy version of RequestTerminationCtx, but uses +// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) RequestTermination() (err error) { - return client.RequestTerminationCtx(context.Background()) +func (client *WANIPConnection1) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { + return client.GetAutoDisconnectTimeCtx(context.Background()) } -func (client *WANIPConnection1) ForceTerminationCtx( +// +// Return values: +// +// * NewPossibleConnectionTypes: allowed values: Unconfigured, IP_Routed, IP_Bridged +func (client *WANIPConnection1) GetConnectionTypeInfoCtx( ctx context.Context, -) (err error) { +) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3124,187 +3193,145 @@ func (client *WANIPConnection1) ForceTerminationCtx( // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewConnectionType string + NewPossibleConnectionTypes string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "ForceTermination", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetConnectionTypeInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - // END Unmarshal arguments from response. - return -} - -// ForceTermination is the legacy version of ForceTerminationCtx, but uses -// context.Background() as the context. -func (client *WANIPConnection1) ForceTermination() (err error) { - return client.ForceTerminationCtx(context.Background()) -} - -func (client *WANIPConnection1) SetAutoDisconnectTimeCtx( - ctx context.Context, - NewAutoDisconnectTime uint32, -) (err error) { - // Request structure. - request := &struct { - NewAutoDisconnectTime string - }{} - // BEGIN Marshal arguments into request. - - if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { + if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { return } - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetAutoDisconnectTime", request, response); err != nil { + if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { return } - - // BEGIN Unmarshal arguments from response. - // END Unmarshal arguments from response. return } -// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses +// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { - return client.SetAutoDisconnectTimeCtx(context.Background(), - NewAutoDisconnectTime, - ) +func (client *WANIPConnection1) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + return client.GetConnectionTypeInfoCtx(context.Background()) } -func (client *WANIPConnection1) SetIdleDisconnectTimeCtx( +func (client *WANIPConnection1) GetExternalIPAddressCtx( ctx context.Context, - NewIdleDisconnectTime uint32, -) (err error) { +) (NewExternalIPAddress string, err error) { // Request structure. - request := &struct { - NewIdleDisconnectTime string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewExternalIPAddress string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetExternalIPAddress", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - // END Unmarshal arguments from response. - return -} - -// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses -// context.Background() as the context. -func (client *WANIPConnection1) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { - return client.SetIdleDisconnectTimeCtx(context.Background(), - NewIdleDisconnectTime, - ) -} - -func (client *WANIPConnection1) SetWarnDisconnectDelayCtx( - ctx context.Context, - NewWarnDisconnectDelay uint32, -) (err error) { - // Request structure. - request := &struct { - NewWarnDisconnectDelay string - }{} - // BEGIN Marshal arguments into request. - - if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { - return - } - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetWarnDisconnectDelay", request, response); err != nil { + if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { return } - - // BEGIN Unmarshal arguments from response. - // END Unmarshal arguments from response. return } -// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses +// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { - return client.SetWarnDisconnectDelayCtx(context.Background(), - NewWarnDisconnectDelay, - ) +func (client *WANIPConnection1) GetExternalIPAddress() (NewExternalIPAddress string, err error) { + return client.GetExternalIPAddressCtx(context.Background()) } // // Return values: // -// * NewConnectionStatus: allowed values: Unconfigured, Connected, Disconnected -// -// * NewLastConnectionError: allowed values: ERROR_NONE -func (client *WANIPConnection1) GetStatusInfoCtx( +// * NewProtocol: allowed values: TCP, UDP +func (client *WANIPConnection1) GetGenericPortMappingEntryCtx( ctx context.Context, -) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { + NewPortMappingIndex uint16, +) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewPortMappingIndex string + }{} // BEGIN Marshal arguments into request. + if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := &struct { - NewConnectionStatus string - NewLastConnectionError string - NewUptime string + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetStatusInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetGenericPortMappingEntry", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { + if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { return } - if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { + if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { return } - if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { + if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { + return + } + if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { + return + } + if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { + return + } + if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { + return + } + if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + return + } + if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { return } // END Unmarshal arguments from response. return } -// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses +// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { - return client.GetStatusInfoCtx(context.Background()) +func (client *WANIPConnection1) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + return client.GetGenericPortMappingEntryCtx(context.Background(), + NewPortMappingIndex, + ) } -func (client *WANIPConnection1) GetAutoDisconnectTimeCtx( +func (client *WANIPConnection1) GetIdleDisconnectTimeCtx( ctx context.Context, -) (NewAutoDisconnectTime uint32, err error) { +) (NewIdleDisconnectTime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3313,32 +3340,32 @@ func (client *WANIPConnection1) GetAutoDisconnectTimeCtx( // Response structure. response := &struct { - NewAutoDisconnectTime string + NewIdleDisconnectTime string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetIdleDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { return } // END Unmarshal arguments from response. return } -// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses +// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { - return client.GetAutoDisconnectTimeCtx(context.Background()) +func (client *WANIPConnection1) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { + return client.GetIdleDisconnectTimeCtx(context.Background()) } -func (client *WANIPConnection1) GetIdleDisconnectTimeCtx( +func (client *WANIPConnection1) GetNATRSIPStatusCtx( ctx context.Context, -) (NewIdleDisconnectTime uint32, err error) { +) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3347,86 +3374,18 @@ func (client *WANIPConnection1) GetIdleDisconnectTimeCtx( // Response structure. response := &struct { - NewIdleDisconnectTime string + NewRSIPAvailable string + NewNATEnabled string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetNATRSIPStatus", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { - return - } - // END Unmarshal arguments from response. - return -} - -// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses -// context.Background() as the context. -func (client *WANIPConnection1) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { - return client.GetIdleDisconnectTimeCtx(context.Background()) -} - -func (client *WANIPConnection1) GetWarnDisconnectDelayCtx( - ctx context.Context, -) (NewWarnDisconnectDelay uint32, err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - - // END Marshal arguments into request. - - // Response structure. - response := &struct { - NewWarnDisconnectDelay string - }{} - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetWarnDisconnectDelay", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - if NewWarnDisconnectDelay, err = soap.UnmarshalUi4(response.NewWarnDisconnectDelay); err != nil { - return - } - // END Unmarshal arguments from response. - return -} - -// GetWarnDisconnectDelay is the legacy version of GetWarnDisconnectDelayCtx, but uses -// context.Background() as the context. -func (client *WANIPConnection1) GetWarnDisconnectDelay() (NewWarnDisconnectDelay uint32, err error) { - return client.GetWarnDisconnectDelayCtx(context.Background()) -} - -func (client *WANIPConnection1) GetNATRSIPStatusCtx( - ctx context.Context, -) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - - // END Marshal arguments into request. - - // Response structure. - response := &struct { - NewRSIPAvailable string - NewNATEnabled string - }{} - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetNATRSIPStatus", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { + if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { return } if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { @@ -3442,80 +3401,6 @@ func (client *WANIPConnection1) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNA return client.GetNATRSIPStatusCtx(context.Background()) } -// -// Return values: -// -// * NewProtocol: allowed values: TCP, UDP -func (client *WANIPConnection1) GetGenericPortMappingEntryCtx( - ctx context.Context, - NewPortMappingIndex uint16, -) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - // Request structure. - request := &struct { - NewPortMappingIndex string - }{} - // BEGIN Marshal arguments into request. - - if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { - return - } - // END Marshal arguments into request. - - // Response structure. - response := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetGenericPortMappingEntry", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { - return - } - if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { - return - } - if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { - return - } - if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { - return - } - if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { - return - } - if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { - return - } - if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { - return - } - if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { - return - } - // END Unmarshal arguments from response. - return -} - -// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses -// context.Background() as the context. -func (client *WANIPConnection1) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - return client.GetGenericPortMappingEntryCtx(context.Background(), - NewPortMappingIndex, - ) -} - // // Arguments: // @@ -3592,124 +3477,101 @@ func (client *WANIPConnection1) GetSpecificPortMappingEntry(NewRemoteHost string } // -// Arguments: +// Return values: // -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection1) AddPortMappingCtx( +// * NewConnectionStatus: allowed values: Unconfigured, Connected, Disconnected +// +// * NewLastConnectionError: allowed values: ERROR_NONE +func (client *WANIPConnection1) GetStatusInfoCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, - NewInternalPort uint16, - NewInternalClient string, - NewEnabled bool, - NewPortMappingDescription string, - NewLeaseDuration uint32, -) (err error) { +) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { // Request structure. - request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } - if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { - return - } - if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewConnectionStatus string + NewLastConnectionError string + NewUptime string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetStatusInfo", request, response); err != nil { return } - if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { + + // BEGIN Unmarshal arguments from response. + + if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { return } - if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { + if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { return } - if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { + if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { return } + // END Unmarshal arguments from response. + return +} + +// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses +// context.Background() as the context. +func (client *WANIPConnection1) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { + return client.GetStatusInfoCtx(context.Background()) +} + +func (client *WANIPConnection1) GetWarnDisconnectDelayCtx( + ctx context.Context, +) (NewWarnDisconnectDelay uint32, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewWarnDisconnectDelay string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "AddPortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetWarnDisconnectDelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewWarnDisconnectDelay, err = soap.UnmarshalUi4(response.NewWarnDisconnectDelay); err != nil { + return + } // END Unmarshal arguments from response. return } -// AddPortMapping is the legacy version of AddPortMappingCtx, but uses +// GetWarnDisconnectDelay is the legacy version of GetWarnDisconnectDelayCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { - return client.AddPortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, - NewInternalPort, - NewInternalClient, - NewEnabled, - NewPortMappingDescription, - NewLeaseDuration, - ) +func (client *WANIPConnection1) GetWarnDisconnectDelay() (NewWarnDisconnectDelay uint32, err error) { + return client.GetWarnDisconnectDelayCtx(context.Background()) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection1) DeletePortMappingCtx( +func (client *WANIPConnection1) RequestConnectionCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, ) (err error) { // Request structure. - request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "DeletePortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "RequestConnection", request, response); err != nil { return } @@ -3719,19 +3581,15 @@ func (client *WANIPConnection1) DeletePortMappingCtx( return } -// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses +// RequestConnection is the legacy version of RequestConnectionCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { - return client.DeletePortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, - ) +func (client *WANIPConnection1) RequestConnection() (err error) { + return client.RequestConnectionCtx(context.Background()) } -func (client *WANIPConnection1) GetExternalIPAddressCtx( +func (client *WANIPConnection1) RequestTerminationCtx( ctx context.Context, -) (NewExternalIPAddress string, err error) { +) (err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -3739,101 +3597,36 @@ func (client *WANIPConnection1) GetExternalIPAddressCtx( // END Marshal arguments into request. // Response structure. - response := &struct { - NewExternalIPAddress string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "GetExternalIPAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "RequestTermination", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses +// RequestTermination is the legacy version of RequestTerminationCtx, but uses // context.Background() as the context. -func (client *WANIPConnection1) GetExternalIPAddress() (NewExternalIPAddress string, err error) { - return client.GetExternalIPAddressCtx(context.Background()) -} - -// WANIPConnection2 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANIPConnection:2". See -// goupnp.ServiceClient, which contains RootDevice and Service attributes which -// are provided for informational value. -type WANIPConnection2 struct { - goupnp.ServiceClient -} - -// NewWANIPConnection2Clients discovers instances of the service on the network, -// and returns clients to any that are found. errors will contain an error for -// any devices that replied but which could not be queried, and err will be set -// if the discovery process failed outright. -// -// This is a typical entry calling point into this package. -func NewWANIPConnection2Clients() (clients []*WANIPConnection2, errors []error, err error) { - var genericClients []goupnp.ServiceClient - if genericClients, errors, err = goupnp.NewServiceClients(URN_WANIPConnection_2); err != nil { - return - } - clients = newWANIPConnection2ClientsFromGenericClients(genericClients) - return -} - -// NewWANIPConnection2ClientsByURL discovers instances of the service at the given -// URL, and returns clients to any that are found. An error is returned if -// there was an error probing the service. -// -// This is a typical entry calling point into this package when reusing an -// previously discovered service URL. -func NewWANIPConnection2ClientsByURL(loc *url.URL) ([]*WANIPConnection2, error) { - genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_WANIPConnection_2) - if err != nil { - return nil, err - } - return newWANIPConnection2ClientsFromGenericClients(genericClients), nil -} - -// NewWANIPConnection2ClientsFromRootDevice discovers instances of the service in -// a given root device, and returns clients to any that are found. An error is -// returned if there was not at least one instance of the service within the -// device. The location parameter is simply assigned to the Location attribute -// of the wrapped ServiceClient(s). -// -// This is a typical entry calling point into this package when reusing an -// previously discovered root device. -func NewWANIPConnection2ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*WANIPConnection2, error) { - genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_WANIPConnection_2) - if err != nil { - return nil, err - } - return newWANIPConnection2ClientsFromGenericClients(genericClients), nil -} - -func newWANIPConnection2ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*WANIPConnection2 { - clients := make([]*WANIPConnection2, len(genericClients)) - for i := range genericClients { - clients[i] = &WANIPConnection2{genericClients[i]} - } - return clients +func (client *WANIPConnection1) RequestTermination() (err error) { + return client.RequestTerminationCtx(context.Background()) } -func (client *WANIPConnection2) SetConnectionTypeCtx( +func (client *WANIPConnection1) SetAutoDisconnectTimeCtx( ctx context.Context, - NewConnectionType string, + NewAutoDisconnectTime uint32, ) (err error) { // Request structure. request := &struct { - NewConnectionType string + NewAutoDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { + if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { return } // END Marshal arguments into request. @@ -3842,7 +3635,7 @@ func (client *WANIPConnection2) SetConnectionTypeCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "SetConnectionType", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetAutoDisconnectTime", request, response); err != nil { return } @@ -3852,66 +3645,34 @@ func (client *WANIPConnection2) SetConnectionTypeCtx( return } -// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses +// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) SetConnectionType(NewConnectionType string) (err error) { - return client.SetConnectionTypeCtx(context.Background(), - NewConnectionType, +func (client *WANIPConnection1) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { + return client.SetAutoDisconnectTimeCtx(context.Background(), + NewAutoDisconnectTime, ) } -func (client *WANIPConnection2) GetConnectionTypeInfoCtx( +func (client *WANIPConnection1) SetConnectionTypeCtx( ctx context.Context, -) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + NewConnectionType string, +) (err error) { // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - - // END Marshal arguments into request. - - // Response structure. - response := &struct { - NewConnectionType string - NewPossibleConnectionTypes string + request := &struct { + NewConnectionType string }{} + // BEGIN Marshal arguments into request. - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetConnectionTypeInfo", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { - return - } - if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { + if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { return } - // END Unmarshal arguments from response. - return -} - -// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses -// context.Background() as the context. -func (client *WANIPConnection2) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { - return client.GetConnectionTypeInfoCtx(context.Background()) -} - -func (client *WANIPConnection2) RequestConnectionCtx( - ctx context.Context, -) (err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "RequestConnection", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetConnectionType", request, response); err != nil { return } @@ -3921,55 +3682,34 @@ func (client *WANIPConnection2) RequestConnectionCtx( return } -// RequestConnection is the legacy version of RequestConnectionCtx, but uses +// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) RequestConnection() (err error) { - return client.RequestConnectionCtx(context.Background()) +func (client *WANIPConnection1) SetConnectionType(NewConnectionType string) (err error) { + return client.SetConnectionTypeCtx(context.Background(), + NewConnectionType, + ) } -func (client *WANIPConnection2) RequestTerminationCtx( +func (client *WANIPConnection1) SetIdleDisconnectTimeCtx( ctx context.Context, + NewIdleDisconnectTime uint32, ) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewIdleDisconnectTime string + }{} // BEGIN Marshal arguments into request. - // END Marshal arguments into request. - - // Response structure. - response := interface{}(nil) - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "RequestTermination", request, response); err != nil { + if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { return } - - // BEGIN Unmarshal arguments from response. - - // END Unmarshal arguments from response. - return -} - -// RequestTermination is the legacy version of RequestTerminationCtx, but uses -// context.Background() as the context. -func (client *WANIPConnection2) RequestTermination() (err error) { - return client.RequestTerminationCtx(context.Background()) -} - -func (client *WANIPConnection2) ForceTerminationCtx( - ctx context.Context, -) (err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "ForceTermination", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetIdleDisconnectTime", request, response); err != nil { return } @@ -3979,23 +3719,25 @@ func (client *WANIPConnection2) ForceTerminationCtx( return } -// ForceTermination is the legacy version of ForceTerminationCtx, but uses +// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) ForceTermination() (err error) { - return client.ForceTerminationCtx(context.Background()) +func (client *WANIPConnection1) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { + return client.SetIdleDisconnectTimeCtx(context.Background(), + NewIdleDisconnectTime, + ) } -func (client *WANIPConnection2) SetAutoDisconnectTimeCtx( +func (client *WANIPConnection1) SetWarnDisconnectDelayCtx( ctx context.Context, - NewAutoDisconnectTime uint32, + NewWarnDisconnectDelay uint32, ) (err error) { // Request structure. request := &struct { - NewAutoDisconnectTime string + NewWarnDisconnectDelay string }{} // BEGIN Marshal arguments into request. - if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { + if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { return } // END Marshal arguments into request. @@ -4004,7 +3746,7 @@ func (client *WANIPConnection2) SetAutoDisconnectTimeCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "SetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_1, "SetWarnDisconnectDelay", request, response); err != nil { return } @@ -4014,34 +3756,341 @@ func (client *WANIPConnection2) SetAutoDisconnectTimeCtx( return } -// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses +// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { - return client.SetAutoDisconnectTimeCtx(context.Background(), - NewAutoDisconnectTime, +func (client *WANIPConnection1) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { + return client.SetWarnDisconnectDelayCtx(context.Background(), + NewWarnDisconnectDelay, ) } -func (client *WANIPConnection2) SetIdleDisconnectTimeCtx( - ctx context.Context, - NewIdleDisconnectTime uint32, -) (err error) { - // Request structure. - request := &struct { - NewIdleDisconnectTime string - }{} - // BEGIN Marshal arguments into request. - - if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { - return - } +// WANIPConnection2 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANIPConnection:2". See +// goupnp.ServiceClient, which contains RootDevice and Service attributes which +// are provided for informational value. +type WANIPConnection2 struct { + goupnp.ServiceClient +} + +// NewWANIPConnection2Clients discovers instances of the service on the network, +// and returns clients to any that are found. errors will contain an error for +// any devices that replied but which could not be queried, and err will be set +// if the discovery process failed outright. +// +// This is a typical entry calling point into this package. +func NewWANIPConnection2Clients() (clients []*WANIPConnection2, errors []error, err error) { + var genericClients []goupnp.ServiceClient + if genericClients, errors, err = goupnp.NewServiceClients(URN_WANIPConnection_2); err != nil { + return + } + clients = newWANIPConnection2ClientsFromGenericClients(genericClients) + return +} + +// NewWANIPConnection2ClientsByURL discovers instances of the service at the given +// URL, and returns clients to any that are found. An error is returned if +// there was an error probing the service. +// +// This is a typical entry calling point into this package when reusing an +// previously discovered service URL. +func NewWANIPConnection2ClientsByURL(loc *url.URL) ([]*WANIPConnection2, error) { + genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_WANIPConnection_2) + if err != nil { + return nil, err + } + return newWANIPConnection2ClientsFromGenericClients(genericClients), nil +} + +// NewWANIPConnection2ClientsFromRootDevice discovers instances of the service in +// a given root device, and returns clients to any that are found. An error is +// returned if there was not at least one instance of the service within the +// device. The location parameter is simply assigned to the Location attribute +// of the wrapped ServiceClient(s). +// +// This is a typical entry calling point into this package when reusing an +// previously discovered root device. +func NewWANIPConnection2ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*WANIPConnection2, error) { + genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_WANIPConnection_2) + if err != nil { + return nil, err + } + return newWANIPConnection2ClientsFromGenericClients(genericClients), nil +} + +func newWANIPConnection2ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*WANIPConnection2 { + clients := make([]*WANIPConnection2, len(genericClients)) + for i := range genericClients { + clients[i] = &WANIPConnection2{genericClients[i]} + } + return clients +} + +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection2) AddAnyPortMappingCtx( + ctx context.Context, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, + NewInternalPort uint16, + NewInternalClient string, + NewEnabled bool, + NewPortMappingDescription string, + NewLeaseDuration uint32, +) (NewReservedPort uint16, err error) { + // Request structure. + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string + }{} + // BEGIN Marshal arguments into request. + + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { + return + } + if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { + return + } + if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { + return + } + if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { + return + } + if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { + return + } + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewReservedPort string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "AddAnyPortMapping", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if NewReservedPort, err = soap.UnmarshalUi2(response.NewReservedPort); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// AddAnyPortMapping is the legacy version of AddAnyPortMappingCtx, but uses +// context.Background() as the context. +func (client *WANIPConnection2) AddAnyPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (NewReservedPort uint16, err error) { + return client.AddAnyPortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + NewInternalPort, + NewInternalClient, + NewEnabled, + NewPortMappingDescription, + NewLeaseDuration, + ) +} + +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection2) AddPortMappingCtx( + ctx context.Context, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, + NewInternalPort uint16, + NewInternalClient string, + NewEnabled bool, + NewPortMappingDescription string, + NewLeaseDuration uint32, +) (err error) { + // Request structure. + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string + }{} + // BEGIN Marshal arguments into request. + + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { + return + } + if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { + return + } + if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { + return + } + if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { + return + } + if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { + return + } + // END Marshal arguments into request. + + // Response structure. + response := interface{}(nil) + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "AddPortMapping", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + // END Unmarshal arguments from response. + return +} + +// AddPortMapping is the legacy version of AddPortMappingCtx, but uses +// context.Background() as the context. +func (client *WANIPConnection2) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { + return client.AddPortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + NewInternalPort, + NewInternalClient, + NewEnabled, + NewPortMappingDescription, + NewLeaseDuration, + ) +} + +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection2) DeletePortMappingCtx( + ctx context.Context, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, +) (err error) { + // Request structure. + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + }{} + // BEGIN Marshal arguments into request. + + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + // END Marshal arguments into request. + + // Response structure. + response := interface{}(nil) + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "DeletePortMapping", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + // END Unmarshal arguments from response. + return +} + +// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses +// context.Background() as the context. +func (client *WANIPConnection2) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { + return client.DeletePortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + ) +} + +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANIPConnection2) DeletePortMappingRangeCtx( + ctx context.Context, + NewStartPort uint16, + NewEndPort uint16, + NewProtocol string, + NewManage bool, +) (err error) { + // Request structure. + request := &struct { + NewStartPort string + NewEndPort string + NewProtocol string + NewManage string + }{} + // BEGIN Marshal arguments into request. + + if request.NewStartPort, err = soap.MarshalUi2(NewStartPort); err != nil { + return + } + if request.NewEndPort, err = soap.MarshalUi2(NewEndPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + if request.NewManage, err = soap.MarshalBoolean(NewManage); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "SetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "DeletePortMappingRange", request, response); err != nil { return } @@ -4051,34 +4100,31 @@ func (client *WANIPConnection2) SetIdleDisconnectTimeCtx( return } -// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses +// DeletePortMappingRange is the legacy version of DeletePortMappingRangeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { - return client.SetIdleDisconnectTimeCtx(context.Background(), - NewIdleDisconnectTime, +func (client *WANIPConnection2) DeletePortMappingRange(NewStartPort uint16, NewEndPort uint16, NewProtocol string, NewManage bool) (err error) { + return client.DeletePortMappingRangeCtx(context.Background(), + NewStartPort, + NewEndPort, + NewProtocol, + NewManage, ) } -func (client *WANIPConnection2) SetWarnDisconnectDelayCtx( +func (client *WANIPConnection2) ForceTerminationCtx( ctx context.Context, - NewWarnDisconnectDelay uint32, ) (err error) { // Request structure. - request := &struct { - NewWarnDisconnectDelay string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { - return - } // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "SetWarnDisconnectDelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "ForceTermination", request, response); err != nil { return } @@ -4088,23 +4134,15 @@ func (client *WANIPConnection2) SetWarnDisconnectDelayCtx( return } -// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses +// ForceTermination is the legacy version of ForceTerminationCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { - return client.SetWarnDisconnectDelayCtx(context.Background(), - NewWarnDisconnectDelay, - ) +func (client *WANIPConnection2) ForceTermination() (err error) { + return client.ForceTerminationCtx(context.Background()) } -// -// Return values: -// -// * NewConnectionStatus: allowed values: Unconfigured, Connecting, Connected, PendingDisconnect, Disconnecting, Disconnected -// -// * NewLastConnectionError: allowed values: ERROR_NONE, ERROR_COMMAND_ABORTED, ERROR_NOT_ENABLED_FOR_INTERNET, ERROR_USER_DISCONNECT, ERROR_ISP_DISCONNECT, ERROR_IDLE_DISCONNECT, ERROR_FORCED_DISCONNECT, ERROR_NO_CARRIER, ERROR_IP_CONFIGURATION, ERROR_UNKNOWN -func (client *WANIPConnection2) GetStatusInfoCtx( +func (client *WANIPConnection2) GetAutoDisconnectTimeCtx( ctx context.Context, -) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { +) (NewAutoDisconnectTime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4113,40 +4151,32 @@ func (client *WANIPConnection2) GetStatusInfoCtx( // Response structure. response := &struct { - NewConnectionStatus string - NewLastConnectionError string - NewUptime string + NewAutoDisconnectTime string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetStatusInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetAutoDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { - return - } - if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { - return - } - if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { + if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { return } // END Unmarshal arguments from response. return } -// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses +// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { - return client.GetStatusInfoCtx(context.Background()) +func (client *WANIPConnection2) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { + return client.GetAutoDisconnectTimeCtx(context.Background()) } -func (client *WANIPConnection2) GetAutoDisconnectTimeCtx( +func (client *WANIPConnection2) GetConnectionTypeInfoCtx( ctx context.Context, -) (NewAutoDisconnectTime uint32, err error) { +) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4155,32 +4185,36 @@ func (client *WANIPConnection2) GetAutoDisconnectTimeCtx( // Response structure. response := &struct { - NewAutoDisconnectTime string + NewConnectionType string + NewPossibleConnectionTypes string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetConnectionTypeInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { + return + } + if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { return } // END Unmarshal arguments from response. return } -// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses +// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { - return client.GetAutoDisconnectTimeCtx(context.Background()) +func (client *WANIPConnection2) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + return client.GetConnectionTypeInfoCtx(context.Background()) } -func (client *WANIPConnection2) GetIdleDisconnectTimeCtx( +func (client *WANIPConnection2) GetExternalIPAddressCtx( ctx context.Context, -) (NewIdleDisconnectTime uint32, err error) { +) (NewExternalIPAddress string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4189,66 +4223,106 @@ func (client *WANIPConnection2) GetIdleDisconnectTimeCtx( // Response structure. response := &struct { - NewIdleDisconnectTime string + NewExternalIPAddress string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetExternalIPAddress", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { + if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { return } // END Unmarshal arguments from response. return } -// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses +// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { - return client.GetIdleDisconnectTimeCtx(context.Background()) +func (client *WANIPConnection2) GetExternalIPAddress() (NewExternalIPAddress string, err error) { + return client.GetExternalIPAddressCtx(context.Background()) } -func (client *WANIPConnection2) GetWarnDisconnectDelayCtx( +// +// Return values: +// +// * NewProtocol: allowed values: TCP, UDP +func (client *WANIPConnection2) GetGenericPortMappingEntryCtx( ctx context.Context, -) (NewWarnDisconnectDelay uint32, err error) { + NewPortMappingIndex uint16, +) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewPortMappingIndex string + }{} // BEGIN Marshal arguments into request. + if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := &struct { - NewWarnDisconnectDelay string + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetWarnDisconnectDelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetGenericPortMappingEntry", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewWarnDisconnectDelay, err = soap.UnmarshalUi4(response.NewWarnDisconnectDelay); err != nil { + if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { + return + } + if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { + return + } + if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { + return + } + if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { + return + } + if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { + return + } + if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { + return + } + if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + return + } + if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { return } // END Unmarshal arguments from response. return } -// GetWarnDisconnectDelay is the legacy version of GetWarnDisconnectDelayCtx, but uses +// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) GetWarnDisconnectDelay() (NewWarnDisconnectDelay uint32, err error) { - return client.GetWarnDisconnectDelayCtx(context.Background()) +func (client *WANIPConnection2) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + return client.GetGenericPortMappingEntryCtx(context.Background(), + NewPortMappingIndex, + ) } -func (client *WANIPConnection2) GetNATRSIPStatusCtx( +func (client *WANIPConnection2) GetIdleDisconnectTimeCtx( ctx context.Context, -) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { +) (NewIdleDisconnectTime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -4257,105 +4331,136 @@ func (client *WANIPConnection2) GetNATRSIPStatusCtx( // Response structure. response := &struct { - NewRSIPAvailable string - NewNATEnabled string + NewIdleDisconnectTime string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetNATRSIPStatus", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetIdleDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { - return - } - if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { + if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { return } // END Unmarshal arguments from response. return } -// GetNATRSIPStatus is the legacy version of GetNATRSIPStatusCtx, but uses +// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNATEnabled bool, err error) { - return client.GetNATRSIPStatusCtx(context.Background()) +func (client *WANIPConnection2) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { + return client.GetIdleDisconnectTimeCtx(context.Background()) } // -// Return values: +// Arguments: // // * NewProtocol: allowed values: TCP, UDP -func (client *WANIPConnection2) GetGenericPortMappingEntryCtx( + +func (client *WANIPConnection2) GetListOfPortMappingsCtx( ctx context.Context, - NewPortMappingIndex uint16, -) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + NewStartPort uint16, + NewEndPort uint16, + NewProtocol string, + NewManage bool, + NewNumberOfPorts uint16, +) (NewPortListing string, err error) { // Request structure. request := &struct { - NewPortMappingIndex string + NewStartPort string + NewEndPort string + NewProtocol string + NewManage string + NewNumberOfPorts string }{} // BEGIN Marshal arguments into request. - if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { + if request.NewStartPort, err = soap.MarshalUi2(NewStartPort); err != nil { + return + } + if request.NewEndPort, err = soap.MarshalUi2(NewEndPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + if request.NewManage, err = soap.MarshalBoolean(NewManage); err != nil { + return + } + if request.NewNumberOfPorts, err = soap.MarshalUi2(NewNumberOfPorts); err != nil { return } // END Marshal arguments into request. // Response structure. response := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string + NewPortListing string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetListOfPortMappings", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if NewPortListing, err = soap.UnmarshalString(response.NewPortListing); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// GetListOfPortMappings is the legacy version of GetListOfPortMappingsCtx, but uses +// context.Background() as the context. +func (client *WANIPConnection2) GetListOfPortMappings(NewStartPort uint16, NewEndPort uint16, NewProtocol string, NewManage bool, NewNumberOfPorts uint16) (NewPortListing string, err error) { + return client.GetListOfPortMappingsCtx(context.Background(), + NewStartPort, + NewEndPort, + NewProtocol, + NewManage, + NewNumberOfPorts, + ) +} + +func (client *WANIPConnection2) GetNATRSIPStatusCtx( + ctx context.Context, +) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewRSIPAvailable string + NewNATEnabled string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetGenericPortMappingEntry", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetNATRSIPStatus", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { - return - } - if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { - return - } - if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { - return - } - if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { - return - } - if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { - return - } - if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { - return - } - if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { return } - if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { + if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { return } // END Unmarshal arguments from response. return } -// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses +// GetNATRSIPStatus is the legacy version of GetNATRSIPStatusCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - return client.GetGenericPortMappingEntryCtx(context.Background(), - NewPortMappingIndex, - ) +func (client *WANIPConnection2) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNATEnabled bool, err error) { + return client.GetNATRSIPStatusCtx(context.Background()) } // @@ -4434,65 +4539,101 @@ func (client *WANIPConnection2) GetSpecificPortMappingEntry(NewRemoteHost string } // -// Arguments: +// Return values: // -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection2) AddPortMappingCtx( +// * NewConnectionStatus: allowed values: Unconfigured, Connecting, Connected, PendingDisconnect, Disconnecting, Disconnected +// +// * NewLastConnectionError: allowed values: ERROR_NONE, ERROR_COMMAND_ABORTED, ERROR_NOT_ENABLED_FOR_INTERNET, ERROR_USER_DISCONNECT, ERROR_ISP_DISCONNECT, ERROR_IDLE_DISCONNECT, ERROR_FORCED_DISCONNECT, ERROR_NO_CARRIER, ERROR_IP_CONFIGURATION, ERROR_UNKNOWN +func (client *WANIPConnection2) GetStatusInfoCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, - NewInternalPort uint16, - NewInternalClient string, - NewEnabled bool, - NewPortMappingDescription string, - NewLeaseDuration uint32, -) (err error) { +) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { // Request structure. - request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewConnectionStatus string + NewLastConnectionError string + NewUptime string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetStatusInfo", request, response); err != nil { return } - if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { + + // BEGIN Unmarshal arguments from response. + + if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { return } - if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { + if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { return } - if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { + if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { return } - if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { + // END Unmarshal arguments from response. + return +} + +// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses +// context.Background() as the context. +func (client *WANIPConnection2) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { + return client.GetStatusInfoCtx(context.Background()) +} + +func (client *WANIPConnection2) GetWarnDisconnectDelayCtx( + ctx context.Context, +) (NewWarnDisconnectDelay uint32, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := &struct { + NewWarnDisconnectDelay string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetWarnDisconnectDelay", request, response); err != nil { return } - if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { + + // BEGIN Unmarshal arguments from response. + + if NewWarnDisconnectDelay, err = soap.UnmarshalUi4(response.NewWarnDisconnectDelay); err != nil { return } + // END Unmarshal arguments from response. + return +} + +// GetWarnDisconnectDelay is the legacy version of GetWarnDisconnectDelayCtx, but uses +// context.Background() as the context. +func (client *WANIPConnection2) GetWarnDisconnectDelay() (NewWarnDisconnectDelay uint32, err error) { + return client.GetWarnDisconnectDelayCtx(context.Background()) +} + +func (client *WANIPConnection2) RequestConnectionCtx( + ctx context.Context, +) (err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "AddPortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "RequestConnection", request, response); err != nil { return } @@ -4502,56 +4643,26 @@ func (client *WANIPConnection2) AddPortMappingCtx( return } -// AddPortMapping is the legacy version of AddPortMappingCtx, but uses +// RequestConnection is the legacy version of RequestConnectionCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { - return client.AddPortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, - NewInternalPort, - NewInternalClient, - NewEnabled, - NewPortMappingDescription, - NewLeaseDuration, - ) +func (client *WANIPConnection2) RequestConnection() (err error) { + return client.RequestConnectionCtx(context.Background()) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection2) DeletePortMappingCtx( +func (client *WANIPConnection2) RequestTerminationCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, ) (err error) { // Request structure. - request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } // END Marshal arguments into request. // Response structure. response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "DeletePortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "RequestTermination", request, response); err != nil { return } @@ -4561,47 +4672,23 @@ func (client *WANIPConnection2) DeletePortMappingCtx( return } -// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses +// RequestTermination is the legacy version of RequestTerminationCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { - return client.DeletePortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, - ) +func (client *WANIPConnection2) RequestTermination() (err error) { + return client.RequestTerminationCtx(context.Background()) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection2) DeletePortMappingRangeCtx( +func (client *WANIPConnection2) SetAutoDisconnectTimeCtx( ctx context.Context, - NewStartPort uint16, - NewEndPort uint16, - NewProtocol string, - NewManage bool, + NewAutoDisconnectTime uint32, ) (err error) { // Request structure. request := &struct { - NewStartPort string - NewEndPort string - NewProtocol string - NewManage string + NewAutoDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewStartPort, err = soap.MarshalUi2(NewStartPort); err != nil { - return - } - if request.NewEndPort, err = soap.MarshalUi2(NewEndPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } - if request.NewManage, err = soap.MarshalBoolean(NewManage); err != nil { + if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { return } // END Marshal arguments into request. @@ -4610,7 +4697,7 @@ func (client *WANIPConnection2) DeletePortMappingRangeCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "DeletePortMappingRange", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "SetAutoDisconnectTime", request, response); err != nil { return } @@ -4620,208 +4707,122 @@ func (client *WANIPConnection2) DeletePortMappingRangeCtx( return } -// DeletePortMappingRange is the legacy version of DeletePortMappingRangeCtx, but uses +// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) DeletePortMappingRange(NewStartPort uint16, NewEndPort uint16, NewProtocol string, NewManage bool) (err error) { - return client.DeletePortMappingRangeCtx(context.Background(), - NewStartPort, - NewEndPort, - NewProtocol, - NewManage, +func (client *WANIPConnection2) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { + return client.SetAutoDisconnectTimeCtx(context.Background(), + NewAutoDisconnectTime, ) } -func (client *WANIPConnection2) GetExternalIPAddressCtx( +func (client *WANIPConnection2) SetConnectionTypeCtx( ctx context.Context, -) (NewExternalIPAddress string, err error) { + NewConnectionType string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewConnectionType string + }{} // BEGIN Marshal arguments into request. + if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewExternalIPAddress string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetExternalIPAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "SetConnectionType", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses +// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) GetExternalIPAddress() (NewExternalIPAddress string, err error) { - return client.GetExternalIPAddressCtx(context.Background()) +func (client *WANIPConnection2) SetConnectionType(NewConnectionType string) (err error) { + return client.SetConnectionTypeCtx(context.Background(), + NewConnectionType, + ) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection2) GetListOfPortMappingsCtx( +func (client *WANIPConnection2) SetIdleDisconnectTimeCtx( ctx context.Context, - NewStartPort uint16, - NewEndPort uint16, - NewProtocol string, - NewManage bool, - NewNumberOfPorts uint16, -) (NewPortListing string, err error) { + NewIdleDisconnectTime uint32, +) (err error) { // Request structure. request := &struct { - NewStartPort string - NewEndPort string - NewProtocol string - NewManage string - NewNumberOfPorts string + NewIdleDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewStartPort, err = soap.MarshalUi2(NewStartPort); err != nil { - return - } - if request.NewEndPort, err = soap.MarshalUi2(NewEndPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } - if request.NewManage, err = soap.MarshalBoolean(NewManage); err != nil { - return - } - if request.NewNumberOfPorts, err = soap.MarshalUi2(NewNumberOfPorts); err != nil { + if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { return } // END Marshal arguments into request. // Response structure. - response := &struct { - NewPortListing string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "GetListOfPortMappings", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "SetIdleDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPortListing, err = soap.UnmarshalString(response.NewPortListing); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetListOfPortMappings is the legacy version of GetListOfPortMappingsCtx, but uses +// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) GetListOfPortMappings(NewStartPort uint16, NewEndPort uint16, NewProtocol string, NewManage bool, NewNumberOfPorts uint16) (NewPortListing string, err error) { - return client.GetListOfPortMappingsCtx(context.Background(), - NewStartPort, - NewEndPort, - NewProtocol, - NewManage, - NewNumberOfPorts, +func (client *WANIPConnection2) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { + return client.SetIdleDisconnectTimeCtx(context.Background(), + NewIdleDisconnectTime, ) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANIPConnection2) AddAnyPortMappingCtx( +func (client *WANIPConnection2) SetWarnDisconnectDelayCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, - NewInternalPort uint16, - NewInternalClient string, - NewEnabled bool, - NewPortMappingDescription string, - NewLeaseDuration uint32, -) (NewReservedPort uint16, err error) { + NewWarnDisconnectDelay uint32, +) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string + NewWarnDisconnectDelay string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } - if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { - return - } - if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { - return - } - if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { - return - } - if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { - return - } - if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { + if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { return } // END Marshal arguments into request. // Response structure. - response := &struct { - NewReservedPort string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "AddAnyPortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPConnection_2, "SetWarnDisconnectDelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewReservedPort, err = soap.UnmarshalUi2(response.NewReservedPort); err != nil { - return - } // END Unmarshal arguments from response. return } -// AddAnyPortMapping is the legacy version of AddAnyPortMappingCtx, but uses +// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses // context.Background() as the context. -func (client *WANIPConnection2) AddAnyPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (NewReservedPort uint16, err error) { - return client.AddAnyPortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, - NewInternalPort, - NewInternalClient, - NewEnabled, - NewPortMappingDescription, - NewLeaseDuration, +func (client *WANIPConnection2) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { + return client.SetWarnDisconnectDelayCtx(context.Background(), + NewWarnDisconnectDelay, ) } @@ -4854,139 +4855,35 @@ func NewWANIPv6FirewallControl1Clients() (clients []*WANIPv6FirewallControl1, er // This is a typical entry calling point into this package when reusing an // previously discovered service URL. func NewWANIPv6FirewallControl1ClientsByURL(loc *url.URL) ([]*WANIPv6FirewallControl1, error) { - genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_WANIPv6FirewallControl_1) - if err != nil { - return nil, err - } - return newWANIPv6FirewallControl1ClientsFromGenericClients(genericClients), nil -} - -// NewWANIPv6FirewallControl1ClientsFromRootDevice discovers instances of the service in -// a given root device, and returns clients to any that are found. An error is -// returned if there was not at least one instance of the service within the -// device. The location parameter is simply assigned to the Location attribute -// of the wrapped ServiceClient(s). -// -// This is a typical entry calling point into this package when reusing an -// previously discovered root device. -func NewWANIPv6FirewallControl1ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*WANIPv6FirewallControl1, error) { - genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_WANIPv6FirewallControl_1) - if err != nil { - return nil, err - } - return newWANIPv6FirewallControl1ClientsFromGenericClients(genericClients), nil -} - -func newWANIPv6FirewallControl1ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*WANIPv6FirewallControl1 { - clients := make([]*WANIPv6FirewallControl1, len(genericClients)) - for i := range genericClients { - clients[i] = &WANIPv6FirewallControl1{genericClients[i]} - } - return clients -} - -func (client *WANIPv6FirewallControl1) GetFirewallStatusCtx( - ctx context.Context, -) (FirewallEnabled bool, InboundPinholeAllowed bool, err error) { - // Request structure. - request := interface{}(nil) - // BEGIN Marshal arguments into request. - - // END Marshal arguments into request. - - // Response structure. - response := &struct { - FirewallEnabled string - InboundPinholeAllowed string - }{} - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPv6FirewallControl_1, "GetFirewallStatus", request, response); err != nil { - return - } - - // BEGIN Unmarshal arguments from response. - - if FirewallEnabled, err = soap.UnmarshalBoolean(response.FirewallEnabled); err != nil { - return - } - if InboundPinholeAllowed, err = soap.UnmarshalBoolean(response.InboundPinholeAllowed); err != nil { - return - } - // END Unmarshal arguments from response. - return -} - -// GetFirewallStatus is the legacy version of GetFirewallStatusCtx, but uses -// context.Background() as the context. -func (client *WANIPv6FirewallControl1) GetFirewallStatus() (FirewallEnabled bool, InboundPinholeAllowed bool, err error) { - return client.GetFirewallStatusCtx(context.Background()) -} - -func (client *WANIPv6FirewallControl1) GetOutboundPinholeTimeoutCtx( - ctx context.Context, - RemoteHost string, - RemotePort uint16, - InternalClient string, - InternalPort uint16, - Protocol uint16, -) (OutboundPinholeTimeout uint32, err error) { - // Request structure. - request := &struct { - RemoteHost string - RemotePort string - InternalClient string - InternalPort string - Protocol string - }{} - // BEGIN Marshal arguments into request. - - if request.RemoteHost, err = soap.MarshalString(RemoteHost); err != nil { - return - } - if request.RemotePort, err = soap.MarshalUi2(RemotePort); err != nil { - return - } - if request.InternalClient, err = soap.MarshalString(InternalClient); err != nil { - return - } - if request.InternalPort, err = soap.MarshalUi2(InternalPort); err != nil { - return - } - if request.Protocol, err = soap.MarshalUi2(Protocol); err != nil { - return - } - // END Marshal arguments into request. - - // Response structure. - response := &struct { - OutboundPinholeTimeout string - }{} - - // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPv6FirewallControl_1, "GetOutboundPinholeTimeout", request, response); err != nil { - return + genericClients, err := goupnp.NewServiceClientsByURL(loc, URN_WANIPv6FirewallControl_1) + if err != nil { + return nil, err } + return newWANIPv6FirewallControl1ClientsFromGenericClients(genericClients), nil +} - // BEGIN Unmarshal arguments from response. - - if OutboundPinholeTimeout, err = soap.UnmarshalUi4(response.OutboundPinholeTimeout); err != nil { - return +// NewWANIPv6FirewallControl1ClientsFromRootDevice discovers instances of the service in +// a given root device, and returns clients to any that are found. An error is +// returned if there was not at least one instance of the service within the +// device. The location parameter is simply assigned to the Location attribute +// of the wrapped ServiceClient(s). +// +// This is a typical entry calling point into this package when reusing an +// previously discovered root device. +func NewWANIPv6FirewallControl1ClientsFromRootDevice(rootDevice *goupnp.RootDevice, loc *url.URL) ([]*WANIPv6FirewallControl1, error) { + genericClients, err := goupnp.NewServiceClientsFromRootDevice(rootDevice, loc, URN_WANIPv6FirewallControl_1) + if err != nil { + return nil, err } - // END Unmarshal arguments from response. - return + return newWANIPv6FirewallControl1ClientsFromGenericClients(genericClients), nil } -// GetOutboundPinholeTimeout is the legacy version of GetOutboundPinholeTimeoutCtx, but uses -// context.Background() as the context. -func (client *WANIPv6FirewallControl1) GetOutboundPinholeTimeout(RemoteHost string, RemotePort uint16, InternalClient string, InternalPort uint16, Protocol uint16) (OutboundPinholeTimeout uint32, err error) { - return client.GetOutboundPinholeTimeoutCtx(context.Background(), - RemoteHost, - RemotePort, - InternalClient, - InternalPort, - Protocol, - ) +func newWANIPv6FirewallControl1ClientsFromGenericClients(genericClients []goupnp.ServiceClient) []*WANIPv6FirewallControl1 { + clients := make([]*WANIPv6FirewallControl1, len(genericClients)) + for i := range genericClients { + clients[i] = &WANIPv6FirewallControl1{genericClients[i]} + } + return clients } // @@ -5066,51 +4963,45 @@ func (client *WANIPv6FirewallControl1) AddPinhole(RemoteHost string, RemotePort ) } -// -// Arguments: -// -// * NewLeaseTime: allowed value range: minimum=1, maximum=86400 - -func (client *WANIPv6FirewallControl1) UpdatePinholeCtx( +func (client *WANIPv6FirewallControl1) CheckPinholeWorkingCtx( ctx context.Context, UniqueID uint16, - NewLeaseTime uint32, -) (err error) { +) (IsWorking bool, err error) { // Request structure. request := &struct { - UniqueID string - NewLeaseTime string + UniqueID string }{} // BEGIN Marshal arguments into request. if request.UniqueID, err = soap.MarshalUi2(UniqueID); err != nil { return } - if request.NewLeaseTime, err = soap.MarshalUi4(NewLeaseTime); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + IsWorking string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPv6FirewallControl_1, "UpdatePinhole", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPv6FirewallControl_1, "CheckPinholeWorking", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if IsWorking, err = soap.UnmarshalBoolean(response.IsWorking); err != nil { + return + } // END Unmarshal arguments from response. return } -// UpdatePinhole is the legacy version of UpdatePinholeCtx, but uses +// CheckPinholeWorking is the legacy version of CheckPinholeWorkingCtx, but uses // context.Background() as the context. -func (client *WANIPv6FirewallControl1) UpdatePinhole(UniqueID uint16, NewLeaseTime uint32) (err error) { - return client.UpdatePinholeCtx(context.Background(), +func (client *WANIPv6FirewallControl1) CheckPinholeWorking(UniqueID uint16) (IsWorking bool, err error) { + return client.CheckPinholeWorkingCtx(context.Background(), UniqueID, - NewLeaseTime, ) } @@ -5151,6 +5042,110 @@ func (client *WANIPv6FirewallControl1) DeletePinhole(UniqueID uint16) (err error ) } +func (client *WANIPv6FirewallControl1) GetFirewallStatusCtx( + ctx context.Context, +) (FirewallEnabled bool, InboundPinholeAllowed bool, err error) { + // Request structure. + request := interface{}(nil) + // BEGIN Marshal arguments into request. + + // END Marshal arguments into request. + + // Response structure. + response := &struct { + FirewallEnabled string + InboundPinholeAllowed string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPv6FirewallControl_1, "GetFirewallStatus", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if FirewallEnabled, err = soap.UnmarshalBoolean(response.FirewallEnabled); err != nil { + return + } + if InboundPinholeAllowed, err = soap.UnmarshalBoolean(response.InboundPinholeAllowed); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// GetFirewallStatus is the legacy version of GetFirewallStatusCtx, but uses +// context.Background() as the context. +func (client *WANIPv6FirewallControl1) GetFirewallStatus() (FirewallEnabled bool, InboundPinholeAllowed bool, err error) { + return client.GetFirewallStatusCtx(context.Background()) +} + +func (client *WANIPv6FirewallControl1) GetOutboundPinholeTimeoutCtx( + ctx context.Context, + RemoteHost string, + RemotePort uint16, + InternalClient string, + InternalPort uint16, + Protocol uint16, +) (OutboundPinholeTimeout uint32, err error) { + // Request structure. + request := &struct { + RemoteHost string + RemotePort string + InternalClient string + InternalPort string + Protocol string + }{} + // BEGIN Marshal arguments into request. + + if request.RemoteHost, err = soap.MarshalString(RemoteHost); err != nil { + return + } + if request.RemotePort, err = soap.MarshalUi2(RemotePort); err != nil { + return + } + if request.InternalClient, err = soap.MarshalString(InternalClient); err != nil { + return + } + if request.InternalPort, err = soap.MarshalUi2(InternalPort); err != nil { + return + } + if request.Protocol, err = soap.MarshalUi2(Protocol); err != nil { + return + } + // END Marshal arguments into request. + + // Response structure. + response := &struct { + OutboundPinholeTimeout string + }{} + + // Perform the SOAP call. + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPv6FirewallControl_1, "GetOutboundPinholeTimeout", request, response); err != nil { + return + } + + // BEGIN Unmarshal arguments from response. + + if OutboundPinholeTimeout, err = soap.UnmarshalUi4(response.OutboundPinholeTimeout); err != nil { + return + } + // END Unmarshal arguments from response. + return +} + +// GetOutboundPinholeTimeout is the legacy version of GetOutboundPinholeTimeoutCtx, but uses +// context.Background() as the context. +func (client *WANIPv6FirewallControl1) GetOutboundPinholeTimeout(RemoteHost string, RemotePort uint16, InternalClient string, InternalPort uint16, Protocol uint16) (OutboundPinholeTimeout uint32, err error) { + return client.GetOutboundPinholeTimeoutCtx(context.Background(), + RemoteHost, + RemotePort, + InternalClient, + InternalPort, + Protocol, + ) +} + func (client *WANIPv6FirewallControl1) GetPinholePacketsCtx( ctx context.Context, UniqueID uint16, @@ -5193,45 +5188,51 @@ func (client *WANIPv6FirewallControl1) GetPinholePackets(UniqueID uint16) (Pinho ) } -func (client *WANIPv6FirewallControl1) CheckPinholeWorkingCtx( +// +// Arguments: +// +// * NewLeaseTime: allowed value range: minimum=1, maximum=86400 + +func (client *WANIPv6FirewallControl1) UpdatePinholeCtx( ctx context.Context, UniqueID uint16, -) (IsWorking bool, err error) { + NewLeaseTime uint32, +) (err error) { // Request structure. request := &struct { - UniqueID string + UniqueID string + NewLeaseTime string }{} // BEGIN Marshal arguments into request. if request.UniqueID, err = soap.MarshalUi2(UniqueID); err != nil { return } + if request.NewLeaseTime, err = soap.MarshalUi4(NewLeaseTime); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - IsWorking string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPv6FirewallControl_1, "CheckPinholeWorking", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANIPv6FirewallControl_1, "UpdatePinhole", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if IsWorking, err = soap.UnmarshalBoolean(response.IsWorking); err != nil { - return - } // END Unmarshal arguments from response. return } -// CheckPinholeWorking is the legacy version of CheckPinholeWorkingCtx, but uses +// UpdatePinhole is the legacy version of UpdatePinholeCtx, but uses // context.Background() as the context. -func (client *WANIPv6FirewallControl1) CheckPinholeWorking(UniqueID uint16) (IsWorking bool, err error) { - return client.CheckPinholeWorkingCtx(context.Background(), +func (client *WANIPv6FirewallControl1) UpdatePinhole(UniqueID uint16, NewLeaseTime uint32) (err error) { + return client.UpdatePinholeCtx(context.Background(), UniqueID, + NewLeaseTime, ) } @@ -5295,110 +5296,81 @@ func newWANPOTSLinkConfig1ClientsFromGenericClients(genericClients []goupnp.Serv return clients } -// -// Arguments: -// -// * NewLinkType: allowed values: PPP_Dialup - -func (client *WANPOTSLinkConfig1) SetISPInfoCtx( +func (client *WANPOTSLinkConfig1) GetCallRetryInfoCtx( ctx context.Context, - NewISPPhoneNumber string, - NewISPInfo string, - NewLinkType string, -) (err error) { +) (NewNumberOfRetries uint32, NewDelayBetweenRetries uint32, err error) { // Request structure. - request := &struct { - NewISPPhoneNumber string - NewISPInfo string - NewLinkType string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewISPPhoneNumber, err = soap.MarshalString(NewISPPhoneNumber); err != nil { - return - } - if request.NewISPInfo, err = soap.MarshalString(NewISPInfo); err != nil { - return - } - if request.NewLinkType, err = soap.MarshalString(NewLinkType); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewNumberOfRetries string + NewDelayBetweenRetries string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "SetISPInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetCallRetryInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewNumberOfRetries, err = soap.UnmarshalUi4(response.NewNumberOfRetries); err != nil { + return + } + if NewDelayBetweenRetries, err = soap.UnmarshalUi4(response.NewDelayBetweenRetries); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetISPInfo is the legacy version of SetISPInfoCtx, but uses +// GetCallRetryInfo is the legacy version of GetCallRetryInfoCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) SetISPInfo(NewISPPhoneNumber string, NewISPInfo string, NewLinkType string) (err error) { - return client.SetISPInfoCtx(context.Background(), - NewISPPhoneNumber, - NewISPInfo, - NewLinkType, - ) +func (client *WANPOTSLinkConfig1) GetCallRetryInfo() (NewNumberOfRetries uint32, NewDelayBetweenRetries uint32, err error) { + return client.GetCallRetryInfoCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) SetCallRetryInfoCtx( +func (client *WANPOTSLinkConfig1) GetDataCompressionCtx( ctx context.Context, - NewNumberOfRetries uint32, - NewDelayBetweenRetries uint32, -) (err error) { +) (NewDataCompression string, err error) { // Request structure. - request := &struct { - NewNumberOfRetries string - NewDelayBetweenRetries string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewNumberOfRetries, err = soap.MarshalUi4(NewNumberOfRetries); err != nil { - return - } - if request.NewDelayBetweenRetries, err = soap.MarshalUi4(NewDelayBetweenRetries); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewDataCompression string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "SetCallRetryInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataCompression", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewDataCompression, err = soap.UnmarshalString(response.NewDataCompression); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetCallRetryInfo is the legacy version of SetCallRetryInfoCtx, but uses +// GetDataCompression is the legacy version of GetDataCompressionCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) SetCallRetryInfo(NewNumberOfRetries uint32, NewDelayBetweenRetries uint32) (err error) { - return client.SetCallRetryInfoCtx(context.Background(), - NewNumberOfRetries, - NewDelayBetweenRetries, - ) +func (client *WANPOTSLinkConfig1) GetDataCompression() (NewDataCompression string, err error) { + return client.GetDataCompressionCtx(context.Background()) } -// -// Return values: -// -// * NewLinkType: allowed values: PPP_Dialup -func (client *WANPOTSLinkConfig1) GetISPInfoCtx( +func (client *WANPOTSLinkConfig1) GetDataModulationSupportedCtx( ctx context.Context, -) (NewISPPhoneNumber string, NewISPInfo string, NewLinkType string, err error) { +) (NewDataModulationSupported string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -5407,40 +5379,32 @@ func (client *WANPOTSLinkConfig1) GetISPInfoCtx( // Response structure. response := &struct { - NewISPPhoneNumber string - NewISPInfo string - NewLinkType string + NewDataModulationSupported string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetISPInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataModulationSupported", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewISPPhoneNumber, err = soap.UnmarshalString(response.NewISPPhoneNumber); err != nil { - return - } - if NewISPInfo, err = soap.UnmarshalString(response.NewISPInfo); err != nil { - return - } - if NewLinkType, err = soap.UnmarshalString(response.NewLinkType); err != nil { + if NewDataModulationSupported, err = soap.UnmarshalString(response.NewDataModulationSupported); err != nil { return } // END Unmarshal arguments from response. return } -// GetISPInfo is the legacy version of GetISPInfoCtx, but uses +// GetDataModulationSupported is the legacy version of GetDataModulationSupportedCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetISPInfo() (NewISPPhoneNumber string, NewISPInfo string, NewLinkType string, err error) { - return client.GetISPInfoCtx(context.Background()) +func (client *WANPOTSLinkConfig1) GetDataModulationSupported() (NewDataModulationSupported string, err error) { + return client.GetDataModulationSupportedCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) GetCallRetryInfoCtx( +func (client *WANPOTSLinkConfig1) GetDataProtocolCtx( ctx context.Context, -) (NewNumberOfRetries uint32, NewDelayBetweenRetries uint32, err error) { +) (NewDataProtocol string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -5449,31 +5413,27 @@ func (client *WANPOTSLinkConfig1) GetCallRetryInfoCtx( // Response structure. response := &struct { - NewNumberOfRetries string - NewDelayBetweenRetries string + NewDataProtocol string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetCallRetryInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataProtocol", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewNumberOfRetries, err = soap.UnmarshalUi4(response.NewNumberOfRetries); err != nil { - return - } - if NewDelayBetweenRetries, err = soap.UnmarshalUi4(response.NewDelayBetweenRetries); err != nil { + if NewDataProtocol, err = soap.UnmarshalString(response.NewDataProtocol); err != nil { return } // END Unmarshal arguments from response. return } -// GetCallRetryInfo is the legacy version of GetCallRetryInfoCtx, but uses +// GetDataProtocol is the legacy version of GetDataProtocolCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetCallRetryInfo() (NewNumberOfRetries uint32, NewDelayBetweenRetries uint32, err error) { - return client.GetCallRetryInfoCtx(context.Background()) +func (client *WANPOTSLinkConfig1) GetDataProtocol() (NewDataProtocol string, err error) { + return client.GetDataProtocolCtx(context.Background()) } func (client *WANPOTSLinkConfig1) GetFclassCtx( @@ -5510,9 +5470,13 @@ func (client *WANPOTSLinkConfig1) GetFclass() (NewFclass string, err error) { return client.GetFclassCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) GetDataModulationSupportedCtx( +// +// Return values: +// +// * NewLinkType: allowed values: PPP_Dialup +func (client *WANPOTSLinkConfig1) GetISPInfoCtx( ctx context.Context, -) (NewDataModulationSupported string, err error) { +) (NewISPPhoneNumber string, NewISPInfo string, NewLinkType string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -5521,32 +5485,40 @@ func (client *WANPOTSLinkConfig1) GetDataModulationSupportedCtx( // Response structure. response := &struct { - NewDataModulationSupported string + NewISPPhoneNumber string + NewISPInfo string + NewLinkType string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataModulationSupported", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetISPInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDataModulationSupported, err = soap.UnmarshalString(response.NewDataModulationSupported); err != nil { + if NewISPPhoneNumber, err = soap.UnmarshalString(response.NewISPPhoneNumber); err != nil { + return + } + if NewISPInfo, err = soap.UnmarshalString(response.NewISPInfo); err != nil { + return + } + if NewLinkType, err = soap.UnmarshalString(response.NewLinkType); err != nil { return } // END Unmarshal arguments from response. return } -// GetDataModulationSupported is the legacy version of GetDataModulationSupportedCtx, but uses +// GetISPInfo is the legacy version of GetISPInfoCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetDataModulationSupported() (NewDataModulationSupported string, err error) { - return client.GetDataModulationSupportedCtx(context.Background()) +func (client *WANPOTSLinkConfig1) GetISPInfo() (NewISPPhoneNumber string, NewISPInfo string, NewLinkType string, err error) { + return client.GetISPInfoCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) GetDataProtocolCtx( +func (client *WANPOTSLinkConfig1) GetPlusVTRCommandSupportedCtx( ctx context.Context, -) (NewDataProtocol string, err error) { +) (NewPlusVTRCommandSupported bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -5555,95 +5527,124 @@ func (client *WANPOTSLinkConfig1) GetDataProtocolCtx( // Response structure. response := &struct { - NewDataProtocol string + NewPlusVTRCommandSupported string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataProtocol", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetPlusVTRCommandSupported", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDataProtocol, err = soap.UnmarshalString(response.NewDataProtocol); err != nil { + if NewPlusVTRCommandSupported, err = soap.UnmarshalBoolean(response.NewPlusVTRCommandSupported); err != nil { return } // END Unmarshal arguments from response. return } -// GetDataProtocol is the legacy version of GetDataProtocolCtx, but uses +// GetPlusVTRCommandSupported is the legacy version of GetPlusVTRCommandSupportedCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetDataProtocol() (NewDataProtocol string, err error) { - return client.GetDataProtocolCtx(context.Background()) +func (client *WANPOTSLinkConfig1) GetPlusVTRCommandSupported() (NewPlusVTRCommandSupported bool, err error) { + return client.GetPlusVTRCommandSupportedCtx(context.Background()) } -func (client *WANPOTSLinkConfig1) GetDataCompressionCtx( +func (client *WANPOTSLinkConfig1) SetCallRetryInfoCtx( ctx context.Context, -) (NewDataCompression string, err error) { + NewNumberOfRetries uint32, + NewDelayBetweenRetries uint32, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewNumberOfRetries string + NewDelayBetweenRetries string + }{} // BEGIN Marshal arguments into request. + if request.NewNumberOfRetries, err = soap.MarshalUi4(NewNumberOfRetries); err != nil { + return + } + if request.NewDelayBetweenRetries, err = soap.MarshalUi4(NewDelayBetweenRetries); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewDataCompression string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetDataCompression", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "SetCallRetryInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewDataCompression, err = soap.UnmarshalString(response.NewDataCompression); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetDataCompression is the legacy version of GetDataCompressionCtx, but uses +// SetCallRetryInfo is the legacy version of SetCallRetryInfoCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetDataCompression() (NewDataCompression string, err error) { - return client.GetDataCompressionCtx(context.Background()) +func (client *WANPOTSLinkConfig1) SetCallRetryInfo(NewNumberOfRetries uint32, NewDelayBetweenRetries uint32) (err error) { + return client.SetCallRetryInfoCtx(context.Background(), + NewNumberOfRetries, + NewDelayBetweenRetries, + ) } -func (client *WANPOTSLinkConfig1) GetPlusVTRCommandSupportedCtx( +// +// Arguments: +// +// * NewLinkType: allowed values: PPP_Dialup + +func (client *WANPOTSLinkConfig1) SetISPInfoCtx( ctx context.Context, -) (NewPlusVTRCommandSupported bool, err error) { + NewISPPhoneNumber string, + NewISPInfo string, + NewLinkType string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewISPPhoneNumber string + NewISPInfo string + NewLinkType string + }{} // BEGIN Marshal arguments into request. + if request.NewISPPhoneNumber, err = soap.MarshalString(NewISPPhoneNumber); err != nil { + return + } + if request.NewISPInfo, err = soap.MarshalString(NewISPInfo); err != nil { + return + } + if request.NewLinkType, err = soap.MarshalString(NewLinkType); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewPlusVTRCommandSupported string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "GetPlusVTRCommandSupported", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPOTSLinkConfig_1, "SetISPInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPlusVTRCommandSupported, err = soap.UnmarshalBoolean(response.NewPlusVTRCommandSupported); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetPlusVTRCommandSupported is the legacy version of GetPlusVTRCommandSupportedCtx, but uses +// SetISPInfo is the legacy version of SetISPInfoCtx, but uses // context.Background() as the context. -func (client *WANPOTSLinkConfig1) GetPlusVTRCommandSupported() (NewPlusVTRCommandSupported bool, err error) { - return client.GetPlusVTRCommandSupportedCtx(context.Background()) +func (client *WANPOTSLinkConfig1) SetISPInfo(NewISPPhoneNumber string, NewISPInfo string, NewLinkType string) (err error) { + return client.SetISPInfoCtx(context.Background(), + NewISPPhoneNumber, + NewISPInfo, + NewLinkType, + ) } // WANPPPConnection1 is a client for UPnP SOAP service with URN "urn:schemas-upnp-org:service:WANPPPConnection:1". See @@ -5703,20 +5704,60 @@ func newWANPPPConnection1ClientsFromGenericClients(genericClients []goupnp.Servi for i := range genericClients { clients[i] = &WANPPPConnection1{genericClients[i]} } - return clients -} - -func (client *WANPPPConnection1) SetConnectionTypeCtx( - ctx context.Context, - NewConnectionType string, -) (err error) { - // Request structure. - request := &struct { - NewConnectionType string - }{} - // BEGIN Marshal arguments into request. - - if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { + return clients +} + +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANPPPConnection1) AddPortMappingCtx( + ctx context.Context, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, + NewInternalPort uint16, + NewInternalClient string, + NewEnabled bool, + NewPortMappingDescription string, + NewLeaseDuration uint32, +) (err error) { + // Request structure. + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string + }{} + // BEGIN Marshal arguments into request. + + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } + if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { + return + } + if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { + return + } + if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { + return + } + if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { + return + } + if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { return } // END Marshal arguments into request. @@ -5725,7 +5766,7 @@ func (client *WANPPPConnection1) SetConnectionTypeCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetConnectionType", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "AddPortMapping", request, response); err != nil { return } @@ -5735,72 +5776,90 @@ func (client *WANPPPConnection1) SetConnectionTypeCtx( return } -// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses +// AddPortMapping is the legacy version of AddPortMappingCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) SetConnectionType(NewConnectionType string) (err error) { - return client.SetConnectionTypeCtx(context.Background(), - NewConnectionType, +func (client *WANPPPConnection1) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { + return client.AddPortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + NewInternalPort, + NewInternalClient, + NewEnabled, + NewPortMappingDescription, + NewLeaseDuration, ) } -// -// Return values: -// -// * NewPossibleConnectionTypes: allowed values: Unconfigured, IP_Routed, DHCP_Spoofed, PPPoE_Bridged, PPTP_Relay, L2TP_Relay, PPPoE_Relay -func (client *WANPPPConnection1) GetConnectionTypeInfoCtx( +func (client *WANPPPConnection1) ConfigureConnectionCtx( ctx context.Context, -) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + NewUserName string, + NewPassword string, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewUserName string + NewPassword string + }{} // BEGIN Marshal arguments into request. + if request.NewUserName, err = soap.MarshalString(NewUserName); err != nil { + return + } + if request.NewPassword, err = soap.MarshalString(NewPassword); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewConnectionType string - NewPossibleConnectionTypes string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetConnectionTypeInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "ConfigureConnection", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { - return - } - if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses +// ConfigureConnection is the legacy version of ConfigureConnectionCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { - return client.GetConnectionTypeInfoCtx(context.Background()) +func (client *WANPPPConnection1) ConfigureConnection(NewUserName string, NewPassword string) (err error) { + return client.ConfigureConnectionCtx(context.Background(), + NewUserName, + NewPassword, + ) } -func (client *WANPPPConnection1) ConfigureConnectionCtx( +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANPPPConnection1) DeletePortMappingCtx( ctx context.Context, - NewUserName string, - NewPassword string, + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, ) (err error) { // Request structure. request := &struct { - NewUserName string - NewPassword string + NewRemoteHost string + NewExternalPort string + NewProtocol string }{} // BEGIN Marshal arguments into request. - if request.NewUserName, err = soap.MarshalString(NewUserName); err != nil { + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { return } - if request.NewPassword, err = soap.MarshalString(NewPassword); err != nil { + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { return } // END Marshal arguments into request. @@ -5809,7 +5868,7 @@ func (client *WANPPPConnection1) ConfigureConnectionCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "ConfigureConnection", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "DeletePortMapping", request, response); err != nil { return } @@ -5819,16 +5878,17 @@ func (client *WANPPPConnection1) ConfigureConnectionCtx( return } -// ConfigureConnection is the legacy version of ConfigureConnectionCtx, but uses +// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) ConfigureConnection(NewUserName string, NewPassword string) (err error) { - return client.ConfigureConnectionCtx(context.Background(), - NewUserName, - NewPassword, +func (client *WANPPPConnection1) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { + return client.DeletePortMappingCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, ) } -func (client *WANPPPConnection1) RequestConnectionCtx( +func (client *WANPPPConnection1) ForceTerminationCtx( ctx context.Context, ) (err error) { // Request structure. @@ -5841,7 +5901,7 @@ func (client *WANPPPConnection1) RequestConnectionCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "RequestConnection", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "ForceTermination", request, response); err != nil { return } @@ -5851,15 +5911,15 @@ func (client *WANPPPConnection1) RequestConnectionCtx( return } -// RequestConnection is the legacy version of RequestConnectionCtx, but uses +// ForceTermination is the legacy version of ForceTerminationCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) RequestConnection() (err error) { - return client.RequestConnectionCtx(context.Background()) +func (client *WANPPPConnection1) ForceTermination() (err error) { + return client.ForceTerminationCtx(context.Background()) } -func (client *WANPPPConnection1) RequestTerminationCtx( +func (client *WANPPPConnection1) GetAutoDisconnectTimeCtx( ctx context.Context, -) (err error) { +) (NewAutoDisconnectTime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -5867,28 +5927,37 @@ func (client *WANPPPConnection1) RequestTerminationCtx( // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewAutoDisconnectTime string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "RequestTermination", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetAutoDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + return + } // END Unmarshal arguments from response. return } -// RequestTermination is the legacy version of RequestTerminationCtx, but uses +// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) RequestTermination() (err error) { - return client.RequestTerminationCtx(context.Background()) +func (client *WANPPPConnection1) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { + return client.GetAutoDisconnectTimeCtx(context.Background()) } -func (client *WANPPPConnection1) ForceTerminationCtx( +// +// Return values: +// +// * NewPossibleConnectionTypes: allowed values: Unconfigured, IP_Routed, DHCP_Spoofed, PPPoE_Bridged, PPTP_Relay, L2TP_Relay, PPPoE_Relay +func (client *WANPPPConnection1) GetConnectionTypeInfoCtx( ctx context.Context, -) (err error) { +) (NewConnectionType string, NewPossibleConnectionTypes string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -5896,145 +5965,179 @@ func (client *WANPPPConnection1) ForceTerminationCtx( // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewConnectionType string + NewPossibleConnectionTypes string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "ForceTermination", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetConnectionTypeInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewConnectionType, err = soap.UnmarshalString(response.NewConnectionType); err != nil { + return + } + if NewPossibleConnectionTypes, err = soap.UnmarshalString(response.NewPossibleConnectionTypes); err != nil { + return + } // END Unmarshal arguments from response. return } -// ForceTermination is the legacy version of ForceTerminationCtx, but uses +// GetConnectionTypeInfo is the legacy version of GetConnectionTypeInfoCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) ForceTermination() (err error) { - return client.ForceTerminationCtx(context.Background()) +func (client *WANPPPConnection1) GetConnectionTypeInfo() (NewConnectionType string, NewPossibleConnectionTypes string, err error) { + return client.GetConnectionTypeInfoCtx(context.Background()) } -func (client *WANPPPConnection1) SetAutoDisconnectTimeCtx( +func (client *WANPPPConnection1) GetExternalIPAddressCtx( ctx context.Context, - NewAutoDisconnectTime uint32, -) (err error) { +) (NewExternalIPAddress string, err error) { // Request structure. - request := &struct { - NewAutoDisconnectTime string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewExternalIPAddress string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetExternalIPAddress", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses +// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { - return client.SetAutoDisconnectTimeCtx(context.Background(), - NewAutoDisconnectTime, - ) +func (client *WANPPPConnection1) GetExternalIPAddress() (NewExternalIPAddress string, err error) { + return client.GetExternalIPAddressCtx(context.Background()) } -func (client *WANPPPConnection1) SetIdleDisconnectTimeCtx( +// +// Return values: +// +// * NewProtocol: allowed values: TCP, UDP +func (client *WANPPPConnection1) GetGenericPortMappingEntryCtx( ctx context.Context, - NewIdleDisconnectTime uint32, -) (err error) { + NewPortMappingIndex uint16, +) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { // Request structure. request := &struct { - NewIdleDisconnectTime string + NewPortMappingIndex string }{} // BEGIN Marshal arguments into request. - if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { + if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { return } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetGenericPortMappingEntry", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { + return + } + if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { + return + } + if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { + return + } + if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { + return + } + if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { + return + } + if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { + return + } + if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + return + } + if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses +// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { - return client.SetIdleDisconnectTimeCtx(context.Background(), - NewIdleDisconnectTime, +func (client *WANPPPConnection1) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + return client.GetGenericPortMappingEntryCtx(context.Background(), + NewPortMappingIndex, ) } -func (client *WANPPPConnection1) SetWarnDisconnectDelayCtx( +func (client *WANPPPConnection1) GetIdleDisconnectTimeCtx( ctx context.Context, - NewWarnDisconnectDelay uint32, -) (err error) { +) (NewIdleDisconnectTime uint32, err error) { // Request structure. - request := &struct { - NewWarnDisconnectDelay string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := interface{}(nil) + response := &struct { + NewIdleDisconnectTime string + }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetWarnDisconnectDelay", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetIdleDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. + if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { + return + } // END Unmarshal arguments from response. return } -// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses +// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { - return client.SetWarnDisconnectDelayCtx(context.Background(), - NewWarnDisconnectDelay, - ) +func (client *WANPPPConnection1) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { + return client.GetIdleDisconnectTimeCtx(context.Background()) } -// -// Return values: -// -// * NewConnectionStatus: allowed values: Unconfigured, Connected, Disconnected -// -// * NewLastConnectionError: allowed values: ERROR_NONE -func (client *WANPPPConnection1) GetStatusInfoCtx( +func (client *WANPPPConnection1) GetLinkLayerMaxBitRatesCtx( ctx context.Context, -) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { +) (NewUpstreamMaxBitRate uint32, NewDownstreamMaxBitRate uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -6043,40 +6146,36 @@ func (client *WANPPPConnection1) GetStatusInfoCtx( // Response structure. response := &struct { - NewConnectionStatus string - NewLastConnectionError string - NewUptime string + NewUpstreamMaxBitRate string + NewDownstreamMaxBitRate string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetStatusInfo", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetLinkLayerMaxBitRates", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { - return - } - if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { + if NewUpstreamMaxBitRate, err = soap.UnmarshalUi4(response.NewUpstreamMaxBitRate); err != nil { return } - if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { + if NewDownstreamMaxBitRate, err = soap.UnmarshalUi4(response.NewDownstreamMaxBitRate); err != nil { return } // END Unmarshal arguments from response. return } -// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses +// GetLinkLayerMaxBitRates is the legacy version of GetLinkLayerMaxBitRatesCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { - return client.GetStatusInfoCtx(context.Background()) +func (client *WANPPPConnection1) GetLinkLayerMaxBitRates() (NewUpstreamMaxBitRate uint32, NewDownstreamMaxBitRate uint32, err error) { + return client.GetLinkLayerMaxBitRatesCtx(context.Background()) } -func (client *WANPPPConnection1) GetLinkLayerMaxBitRatesCtx( +func (client *WANPPPConnection1) GetNATRSIPStatusCtx( ctx context.Context, -) (NewUpstreamMaxBitRate uint32, NewDownstreamMaxBitRate uint32, err error) { +) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -6085,36 +6184,36 @@ func (client *WANPPPConnection1) GetLinkLayerMaxBitRatesCtx( // Response structure. response := &struct { - NewUpstreamMaxBitRate string - NewDownstreamMaxBitRate string + NewRSIPAvailable string + NewNATEnabled string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetLinkLayerMaxBitRates", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetNATRSIPStatus", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewUpstreamMaxBitRate, err = soap.UnmarshalUi4(response.NewUpstreamMaxBitRate); err != nil { + if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { return } - if NewDownstreamMaxBitRate, err = soap.UnmarshalUi4(response.NewDownstreamMaxBitRate); err != nil { + if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { return } // END Unmarshal arguments from response. return } -// GetLinkLayerMaxBitRates is the legacy version of GetLinkLayerMaxBitRatesCtx, but uses +// GetNATRSIPStatus is the legacy version of GetNATRSIPStatusCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetLinkLayerMaxBitRates() (NewUpstreamMaxBitRate uint32, NewDownstreamMaxBitRate uint32, err error) { - return client.GetLinkLayerMaxBitRatesCtx(context.Background()) +func (client *WANPPPConnection1) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNATEnabled bool, err error) { + return client.GetNATRSIPStatusCtx(context.Background()) } -func (client *WANPPPConnection1) GetPPPEncryptionProtocolCtx( +func (client *WANPPPConnection1) GetPPPAuthenticationProtocolCtx( ctx context.Context, -) (NewPPPEncryptionProtocol string, err error) { +) (NewPPPAuthenticationProtocol string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -6123,27 +6222,27 @@ func (client *WANPPPConnection1) GetPPPEncryptionProtocolCtx( // Response structure. response := &struct { - NewPPPEncryptionProtocol string + NewPPPAuthenticationProtocol string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPEncryptionProtocol", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPAuthenticationProtocol", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPPPEncryptionProtocol, err = soap.UnmarshalString(response.NewPPPEncryptionProtocol); err != nil { + if NewPPPAuthenticationProtocol, err = soap.UnmarshalString(response.NewPPPAuthenticationProtocol); err != nil { return } // END Unmarshal arguments from response. return } -// GetPPPEncryptionProtocol is the legacy version of GetPPPEncryptionProtocolCtx, but uses +// GetPPPAuthenticationProtocol is the legacy version of GetPPPAuthenticationProtocolCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetPPPEncryptionProtocol() (NewPPPEncryptionProtocol string, err error) { - return client.GetPPPEncryptionProtocolCtx(context.Background()) +func (client *WANPPPConnection1) GetPPPAuthenticationProtocol() (NewPPPAuthenticationProtocol string, err error) { + return client.GetPPPAuthenticationProtocolCtx(context.Background()) } func (client *WANPPPConnection1) GetPPPCompressionProtocolCtx( @@ -6180,9 +6279,9 @@ func (client *WANPPPConnection1) GetPPPCompressionProtocol() (NewPPPCompressionP return client.GetPPPCompressionProtocolCtx(context.Background()) } -func (client *WANPPPConnection1) GetPPPAuthenticationProtocolCtx( +func (client *WANPPPConnection1) GetPPPEncryptionProtocolCtx( ctx context.Context, -) (NewPPPAuthenticationProtocol string, err error) { +) (NewPPPEncryptionProtocol string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -6191,32 +6290,32 @@ func (client *WANPPPConnection1) GetPPPAuthenticationProtocolCtx( // Response structure. response := &struct { - NewPPPAuthenticationProtocol string + NewPPPEncryptionProtocol string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPAuthenticationProtocol", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPPPEncryptionProtocol", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPPPAuthenticationProtocol, err = soap.UnmarshalString(response.NewPPPAuthenticationProtocol); err != nil { + if NewPPPEncryptionProtocol, err = soap.UnmarshalString(response.NewPPPEncryptionProtocol); err != nil { return } // END Unmarshal arguments from response. return } -// GetPPPAuthenticationProtocol is the legacy version of GetPPPAuthenticationProtocolCtx, but uses +// GetPPPEncryptionProtocol is the legacy version of GetPPPEncryptionProtocolCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetPPPAuthenticationProtocol() (NewPPPAuthenticationProtocol string, err error) { - return client.GetPPPAuthenticationProtocolCtx(context.Background()) +func (client *WANPPPConnection1) GetPPPEncryptionProtocol() (NewPPPEncryptionProtocol string, err error) { + return client.GetPPPEncryptionProtocolCtx(context.Background()) } -func (client *WANPPPConnection1) GetUserNameCtx( +func (client *WANPPPConnection1) GetPasswordCtx( ctx context.Context, -) (NewUserName string, err error) { +) (NewPassword string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -6225,66 +6324,113 @@ func (client *WANPPPConnection1) GetUserNameCtx( // Response structure. response := &struct { - NewUserName string + NewPassword string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetUserName", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPassword", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewUserName, err = soap.UnmarshalString(response.NewUserName); err != nil { + if NewPassword, err = soap.UnmarshalString(response.NewPassword); err != nil { return } // END Unmarshal arguments from response. return } -// GetUserName is the legacy version of GetUserNameCtx, but uses +// GetPassword is the legacy version of GetPasswordCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetUserName() (NewUserName string, err error) { - return client.GetUserNameCtx(context.Background()) +func (client *WANPPPConnection1) GetPassword() (NewPassword string, err error) { + return client.GetPasswordCtx(context.Background()) } -func (client *WANPPPConnection1) GetPasswordCtx( +// +// Arguments: +// +// * NewProtocol: allowed values: TCP, UDP + +func (client *WANPPPConnection1) GetSpecificPortMappingEntryCtx( ctx context.Context, -) (NewPassword string, err error) { + NewRemoteHost string, + NewExternalPort uint16, + NewProtocol string, +) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewRemoteHost string + NewExternalPort string + NewProtocol string + }{} // BEGIN Marshal arguments into request. + if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { + return + } + if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { + return + } + if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + return + } // END Marshal arguments into request. // Response structure. response := &struct { - NewPassword string + NewInternalPort string + NewInternalClient string + NewEnabled string + NewPortMappingDescription string + NewLeaseDuration string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetPassword", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetSpecificPortMappingEntry", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewPassword, err = soap.UnmarshalString(response.NewPassword); err != nil { + if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { + return + } + if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { + return + } + if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { + return + } + if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { + return + } + if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { return } // END Unmarshal arguments from response. return } -// GetPassword is the legacy version of GetPasswordCtx, but uses +// GetSpecificPortMappingEntry is the legacy version of GetSpecificPortMappingEntryCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetPassword() (NewPassword string, err error) { - return client.GetPasswordCtx(context.Background()) +func (client *WANPPPConnection1) GetSpecificPortMappingEntry(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + return client.GetSpecificPortMappingEntryCtx(context.Background(), + NewRemoteHost, + NewExternalPort, + NewProtocol, + ) } -func (client *WANPPPConnection1) GetAutoDisconnectTimeCtx( +// +// Return values: +// +// * NewConnectionStatus: allowed values: Unconfigured, Connected, Disconnected +// +// * NewLastConnectionError: allowed values: ERROR_NONE +func (client *WANPPPConnection1) GetStatusInfoCtx( ctx context.Context, -) (NewAutoDisconnectTime uint32, err error) { +) (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -6293,32 +6439,40 @@ func (client *WANPPPConnection1) GetAutoDisconnectTimeCtx( // Response structure. response := &struct { - NewAutoDisconnectTime string + NewConnectionStatus string + NewLastConnectionError string + NewUptime string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetAutoDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetStatusInfo", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewAutoDisconnectTime, err = soap.UnmarshalUi4(response.NewAutoDisconnectTime); err != nil { + if NewConnectionStatus, err = soap.UnmarshalString(response.NewConnectionStatus); err != nil { + return + } + if NewLastConnectionError, err = soap.UnmarshalString(response.NewLastConnectionError); err != nil { + return + } + if NewUptime, err = soap.UnmarshalUi4(response.NewUptime); err != nil { return } // END Unmarshal arguments from response. return } -// GetAutoDisconnectTime is the legacy version of GetAutoDisconnectTimeCtx, but uses +// GetStatusInfo is the legacy version of GetStatusInfoCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetAutoDisconnectTime() (NewAutoDisconnectTime uint32, err error) { - return client.GetAutoDisconnectTimeCtx(context.Background()) +func (client *WANPPPConnection1) GetStatusInfo() (NewConnectionStatus string, NewLastConnectionError string, NewUptime uint32, err error) { + return client.GetStatusInfoCtx(context.Background()) } -func (client *WANPPPConnection1) GetIdleDisconnectTimeCtx( +func (client *WANPPPConnection1) GetUserNameCtx( ctx context.Context, -) (NewIdleDisconnectTime uint32, err error) { +) (NewUserName string, err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -6327,27 +6481,27 @@ func (client *WANPPPConnection1) GetIdleDisconnectTimeCtx( // Response structure. response := &struct { - NewIdleDisconnectTime string + NewUserName string }{} // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetIdleDisconnectTime", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetUserName", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewIdleDisconnectTime, err = soap.UnmarshalUi4(response.NewIdleDisconnectTime); err != nil { + if NewUserName, err = soap.UnmarshalString(response.NewUserName); err != nil { return } // END Unmarshal arguments from response. return } -// GetIdleDisconnectTime is the legacy version of GetIdleDisconnectTimeCtx, but uses +// GetUserName is the legacy version of GetUserNameCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetIdleDisconnectTime() (NewIdleDisconnectTime uint32, err error) { - return client.GetIdleDisconnectTimeCtx(context.Background()) +func (client *WANPPPConnection1) GetUserName() (NewUserName string, err error) { + return client.GetUserNameCtx(context.Background()) } func (client *WANPPPConnection1) GetWarnDisconnectDelayCtx( @@ -6384,9 +6538,9 @@ func (client *WANPPPConnection1) GetWarnDisconnectDelay() (NewWarnDisconnectDela return client.GetWarnDisconnectDelayCtx(context.Background()) } -func (client *WANPPPConnection1) GetNATRSIPStatusCtx( +func (client *WANPPPConnection1) RequestConnectionCtx( ctx context.Context, -) (NewRSIPAvailable bool, NewNATEnabled bool, err error) { +) (err error) { // Request structure. request := interface{}(nil) // BEGIN Marshal arguments into request. @@ -6394,234 +6548,102 @@ func (client *WANPPPConnection1) GetNATRSIPStatusCtx( // END Marshal arguments into request. // Response structure. - response := &struct { - NewRSIPAvailable string - NewNATEnabled string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetNATRSIPStatus", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "RequestConnection", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewRSIPAvailable, err = soap.UnmarshalBoolean(response.NewRSIPAvailable); err != nil { - return - } - if NewNATEnabled, err = soap.UnmarshalBoolean(response.NewNATEnabled); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetNATRSIPStatus is the legacy version of GetNATRSIPStatusCtx, but uses +// RequestConnection is the legacy version of RequestConnectionCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetNATRSIPStatus() (NewRSIPAvailable bool, NewNATEnabled bool, err error) { - return client.GetNATRSIPStatusCtx(context.Background()) +func (client *WANPPPConnection1) RequestConnection() (err error) { + return client.RequestConnectionCtx(context.Background()) } -// -// Return values: -// -// * NewProtocol: allowed values: TCP, UDP -func (client *WANPPPConnection1) GetGenericPortMappingEntryCtx( +func (client *WANPPPConnection1) RequestTerminationCtx( ctx context.Context, - NewPortMappingIndex uint16, -) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { +) (err error) { // Request structure. - request := &struct { - NewPortMappingIndex string - }{} + request := interface{}(nil) // BEGIN Marshal arguments into request. - if request.NewPortMappingIndex, err = soap.MarshalUi2(NewPortMappingIndex); err != nil { - return - } // END Marshal arguments into request. // Response structure. - response := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetGenericPortMappingEntry", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "RequestTermination", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewRemoteHost, err = soap.UnmarshalString(response.NewRemoteHost); err != nil { - return - } - if NewExternalPort, err = soap.UnmarshalUi2(response.NewExternalPort); err != nil { - return - } - if NewProtocol, err = soap.UnmarshalString(response.NewProtocol); err != nil { - return - } - if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { - return - } - if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { - return - } - if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { - return - } - if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { - return - } - if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetGenericPortMappingEntry is the legacy version of GetGenericPortMappingEntryCtx, but uses +// RequestTermination is the legacy version of RequestTerminationCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetGenericPortMappingEntry(NewPortMappingIndex uint16) (NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - return client.GetGenericPortMappingEntryCtx(context.Background(), - NewPortMappingIndex, - ) +func (client *WANPPPConnection1) RequestTermination() (err error) { + return client.RequestTerminationCtx(context.Background()) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANPPPConnection1) GetSpecificPortMappingEntryCtx( +func (client *WANPPPConnection1) SetAutoDisconnectTimeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, -) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { + NewAutoDisconnectTime uint32, +) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string + NewAutoDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + if request.NewAutoDisconnectTime, err = soap.MarshalUi4(NewAutoDisconnectTime); err != nil { return } // END Marshal arguments into request. // Response structure. - response := &struct { - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetSpecificPortMappingEntry", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetAutoDisconnectTime", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewInternalPort, err = soap.UnmarshalUi2(response.NewInternalPort); err != nil { - return - } - if NewInternalClient, err = soap.UnmarshalString(response.NewInternalClient); err != nil { - return - } - if NewEnabled, err = soap.UnmarshalBoolean(response.NewEnabled); err != nil { - return - } - if NewPortMappingDescription, err = soap.UnmarshalString(response.NewPortMappingDescription); err != nil { - return - } - if NewLeaseDuration, err = soap.UnmarshalUi4(response.NewLeaseDuration); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetSpecificPortMappingEntry is the legacy version of GetSpecificPortMappingEntryCtx, but uses +// SetAutoDisconnectTime is the legacy version of SetAutoDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetSpecificPortMappingEntry(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32, err error) { - return client.GetSpecificPortMappingEntryCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, +func (client *WANPPPConnection1) SetAutoDisconnectTime(NewAutoDisconnectTime uint32) (err error) { + return client.SetAutoDisconnectTimeCtx(context.Background(), + NewAutoDisconnectTime, ) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANPPPConnection1) AddPortMappingCtx( +func (client *WANPPPConnection1) SetConnectionTypeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, - NewInternalPort uint16, - NewInternalClient string, - NewEnabled bool, - NewPortMappingDescription string, - NewLeaseDuration uint32, + NewConnectionType string, ) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string - NewInternalPort string - NewInternalClient string - NewEnabled string - NewPortMappingDescription string - NewLeaseDuration string + NewConnectionType string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { - return - } - if request.NewInternalPort, err = soap.MarshalUi2(NewInternalPort); err != nil { - return - } - if request.NewInternalClient, err = soap.MarshalString(NewInternalClient); err != nil { - return - } - if request.NewEnabled, err = soap.MarshalBoolean(NewEnabled); err != nil { - return - } - if request.NewPortMappingDescription, err = soap.MarshalString(NewPortMappingDescription); err != nil { - return - } - if request.NewLeaseDuration, err = soap.MarshalUi4(NewLeaseDuration); err != nil { + if request.NewConnectionType, err = soap.MarshalString(NewConnectionType); err != nil { return } // END Marshal arguments into request. @@ -6630,7 +6652,7 @@ func (client *WANPPPConnection1) AddPortMappingCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "AddPortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetConnectionType", request, response); err != nil { return } @@ -6640,47 +6662,25 @@ func (client *WANPPPConnection1) AddPortMappingCtx( return } -// AddPortMapping is the legacy version of AddPortMappingCtx, but uses +// SetConnectionType is the legacy version of SetConnectionTypeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) AddPortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string, NewInternalPort uint16, NewInternalClient string, NewEnabled bool, NewPortMappingDescription string, NewLeaseDuration uint32) (err error) { - return client.AddPortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, - NewInternalPort, - NewInternalClient, - NewEnabled, - NewPortMappingDescription, - NewLeaseDuration, +func (client *WANPPPConnection1) SetConnectionType(NewConnectionType string) (err error) { + return client.SetConnectionTypeCtx(context.Background(), + NewConnectionType, ) } -// -// Arguments: -// -// * NewProtocol: allowed values: TCP, UDP - -func (client *WANPPPConnection1) DeletePortMappingCtx( +func (client *WANPPPConnection1) SetIdleDisconnectTimeCtx( ctx context.Context, - NewRemoteHost string, - NewExternalPort uint16, - NewProtocol string, + NewIdleDisconnectTime uint32, ) (err error) { // Request structure. request := &struct { - NewRemoteHost string - NewExternalPort string - NewProtocol string + NewIdleDisconnectTime string }{} // BEGIN Marshal arguments into request. - if request.NewRemoteHost, err = soap.MarshalString(NewRemoteHost); err != nil { - return - } - if request.NewExternalPort, err = soap.MarshalUi2(NewExternalPort); err != nil { - return - } - if request.NewProtocol, err = soap.MarshalString(NewProtocol); err != nil { + if request.NewIdleDisconnectTime, err = soap.MarshalUi4(NewIdleDisconnectTime); err != nil { return } // END Marshal arguments into request. @@ -6689,7 +6689,7 @@ func (client *WANPPPConnection1) DeletePortMappingCtx( response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "DeletePortMapping", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetIdleDisconnectTime", request, response); err != nil { return } @@ -6699,46 +6699,47 @@ func (client *WANPPPConnection1) DeletePortMappingCtx( return } -// DeletePortMapping is the legacy version of DeletePortMappingCtx, but uses +// SetIdleDisconnectTime is the legacy version of SetIdleDisconnectTimeCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) DeletePortMapping(NewRemoteHost string, NewExternalPort uint16, NewProtocol string) (err error) { - return client.DeletePortMappingCtx(context.Background(), - NewRemoteHost, - NewExternalPort, - NewProtocol, +func (client *WANPPPConnection1) SetIdleDisconnectTime(NewIdleDisconnectTime uint32) (err error) { + return client.SetIdleDisconnectTimeCtx(context.Background(), + NewIdleDisconnectTime, ) } -func (client *WANPPPConnection1) GetExternalIPAddressCtx( +func (client *WANPPPConnection1) SetWarnDisconnectDelayCtx( ctx context.Context, -) (NewExternalIPAddress string, err error) { + NewWarnDisconnectDelay uint32, +) (err error) { // Request structure. - request := interface{}(nil) + request := &struct { + NewWarnDisconnectDelay string + }{} // BEGIN Marshal arguments into request. + if request.NewWarnDisconnectDelay, err = soap.MarshalUi4(NewWarnDisconnectDelay); err != nil { + return + } // END Marshal arguments into request. // Response structure. - response := &struct { - NewExternalIPAddress string - }{} + response := interface{}(nil) // Perform the SOAP call. - if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "GetExternalIPAddress", request, response); err != nil { + if err = client.SOAPClient.PerformActionCtx(ctx, URN_WANPPPConnection_1, "SetWarnDisconnectDelay", request, response); err != nil { return } // BEGIN Unmarshal arguments from response. - if NewExternalIPAddress, err = soap.UnmarshalString(response.NewExternalIPAddress); err != nil { - return - } // END Unmarshal arguments from response. return } -// GetExternalIPAddress is the legacy version of GetExternalIPAddressCtx, but uses +// SetWarnDisconnectDelay is the legacy version of SetWarnDisconnectDelayCtx, but uses // context.Background() as the context. -func (client *WANPPPConnection1) GetExternalIPAddress() (NewExternalIPAddress string, err error) { - return client.GetExternalIPAddressCtx(context.Background()) +func (client *WANPPPConnection1) SetWarnDisconnectDelay(NewWarnDisconnectDelay uint32) (err error) { + return client.SetWarnDisconnectDelayCtx(context.Background(), + NewWarnDisconnectDelay, + ) } diff --git a/vendor/github.com/huin/goupnp/device.go b/vendor/github.com/huin/goupnp/device.go index 567ab4cfef..334e787ca7 100644 --- a/vendor/github.com/huin/goupnp/device.go +++ b/vendor/github.com/huin/goupnp/device.go @@ -7,6 +7,7 @@ import ( "errors" "fmt" "net/url" + "strings" "github.com/huin/goupnp/scpd" "github.com/huin/goupnp/soap" @@ -178,7 +179,12 @@ type URLField struct { } func (uf *URLField) SetURLBase(urlBase *url.URL) { - refUrl, err := url.Parse(uf.Str) + str := uf.Str + if !strings.Contains(str, "://") && !strings.HasPrefix(str, "/") { + str = "/" + str + } + + refUrl, err := url.Parse(str) if err != nil { uf.URL = url.URL{} uf.Ok = false diff --git a/vendor/github.com/huin/goupnp/go.mod b/vendor/github.com/huin/goupnp/go.mod deleted file mode 100644 index b529a5bc66..0000000000 --- a/vendor/github.com/huin/goupnp/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/huin/goupnp - -go 1.14 - -require ( - github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150 - golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a -) diff --git a/vendor/github.com/huin/goupnp/go.sum b/vendor/github.com/huin/goupnp/go.sum deleted file mode 100644 index 0a418e5b9f..0000000000 --- a/vendor/github.com/huin/goupnp/go.sum +++ /dev/null @@ -1,4 +0,0 @@ -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150 h1:vlNjIqmUZ9CMAWsbURYl3a6wZbw7q5RHVvlXTNS/Bs8= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= diff --git a/vendor/github.com/huin/goupnp/goupnp.go b/vendor/github.com/huin/goupnp/goupnp.go index 36081aa207..51963de3b6 100644 --- a/vendor/github.com/huin/goupnp/goupnp.go +++ b/vendor/github.com/huin/goupnp/goupnp.go @@ -18,10 +18,12 @@ import ( "encoding/xml" "fmt" "io" + "net" "net/http" "net/url" "time" + "github.com/huin/goupnp/httpu" "github.com/huin/goupnp/ssdp" ) @@ -63,6 +65,9 @@ type MaybeRootDevice struct { // the discovery of a device, regardless of if there was an error probing it. Location *url.URL + // The address from which the device was discovered (if known - otherwise nil). + LocalAddr net.IP + // Any error encountered probing a discovered device. Err error } @@ -99,6 +104,9 @@ func DiscoverDevices(searchTarget string) ([]MaybeRootDevice, error) { } else { maybe.Root = root } + if i := response.Header.Get(httpu.LocalAddressHeader); len(i) > 0 { + maybe.LocalAddr = net.ParseIP(i) + } } return results, nil diff --git a/vendor/github.com/huin/goupnp/httpu/httpu.go b/vendor/github.com/huin/goupnp/httpu/httpu.go index 3367c863e9..808d600ab0 100644 --- a/vendor/github.com/huin/goupnp/httpu/httpu.go +++ b/vendor/github.com/huin/goupnp/httpu/httpu.go @@ -143,9 +143,16 @@ func (httpu *HTTPUClient) Do( continue } + // Set the related local address used to discover the device. + if a, ok := httpu.conn.LocalAddr().(*net.UDPAddr); ok { + response.Header.Add(LocalAddressHeader, a.IP.String()) + } + responses = append(responses, response) } // Timeout reached - return discovered responses. return responses, nil } + +const LocalAddressHeader = "goupnp-local-address" diff --git a/vendor/github.com/huin/goupnp/scpd/scpd.go b/vendor/github.com/huin/goupnp/scpd/scpd.go index c9d2e69e81..59573cc19d 100644 --- a/vendor/github.com/huin/goupnp/scpd/scpd.go +++ b/vendor/github.com/huin/goupnp/scpd/scpd.go @@ -2,6 +2,7 @@ package scpd import ( "encoding/xml" + "sort" "strings" ) @@ -37,6 +38,14 @@ func (scpd *SCPD) Clean() { } } +func (scpd *SCPD) OrderedActions() []Action { + actions := append([]Action{}, scpd.Actions...) + sort.SliceStable(actions, func(i, j int) bool { + return actions[i].Name < actions[j].Name + }) + return actions +} + func (scpd *SCPD) GetStateVariable(variable string) *StateVariable { for i := range scpd.StateVariables { v := &scpd.StateVariables[i] diff --git a/vendor/github.com/huin/goupnp/service_client.go b/vendor/github.com/huin/goupnp/service_client.go index 9111c93cb5..79a375d5c2 100644 --- a/vendor/github.com/huin/goupnp/service_client.go +++ b/vendor/github.com/huin/goupnp/service_client.go @@ -2,6 +2,7 @@ package goupnp import ( "fmt" + "net" "net/url" "github.com/huin/goupnp/soap" @@ -17,6 +18,7 @@ type ServiceClient struct { RootDevice *RootDevice Location *url.URL Service *Service + localAddr net.IP } // NewServiceClients discovers services, and returns clients for them. err will @@ -36,7 +38,7 @@ func NewServiceClients(searchTarget string) (clients []ServiceClient, errors []e continue } - deviceClients, err := NewServiceClientsFromRootDevice(maybeRootDevice.Root, maybeRootDevice.Location, searchTarget) + deviceClients, err := newServiceClientsFromRootDevice(maybeRootDevice.Root, maybeRootDevice.Location, searchTarget, maybeRootDevice.LocalAddr) if err != nil { errors = append(errors, err) continue @@ -61,6 +63,15 @@ func NewServiceClientsByURL(loc *url.URL, searchTarget string) ([]ServiceClient, // a given root device. The loc parameter is simply assigned to the // Location attribute of the returned ServiceClient(s). func NewServiceClientsFromRootDevice(rootDevice *RootDevice, loc *url.URL, searchTarget string) ([]ServiceClient, error) { + return newServiceClientsFromRootDevice(rootDevice, loc, searchTarget, nil) +} + +func newServiceClientsFromRootDevice( + rootDevice *RootDevice, + loc *url.URL, + searchTarget string, + lAddr net.IP, +) ([]ServiceClient, error) { device := &rootDevice.Device srvs := device.FindService(searchTarget) if len(srvs) == 0 { @@ -75,6 +86,7 @@ func NewServiceClientsFromRootDevice(rootDevice *RootDevice, loc *url.URL, searc RootDevice: rootDevice, Location: loc, Service: srv, + localAddr: lAddr, }) } return clients, nil @@ -86,3 +98,8 @@ func NewServiceClientsFromRootDevice(rootDevice *RootDevice, loc *url.URL, searc func (client *ServiceClient) GetServiceClient() *ServiceClient { return client } + +// LocalAddr returns the address from which the device was discovered (if known - otherwise empty). +func (client *ServiceClient) LocalAddr() net.IP { + return client.localAddr +} diff --git a/vendor/github.com/huin/goupnp/soap/soap.go b/vendor/github.com/huin/goupnp/soap/soap.go index 68deaf6702..0d7a7582f4 100644 --- a/vendor/github.com/huin/goupnp/soap/soap.go +++ b/vendor/github.com/huin/goupnp/soap/soap.go @@ -202,5 +202,6 @@ type SOAPFaultError struct { } func (err *SOAPFaultError) Error() string { - return fmt.Sprintf("SOAP fault: %s", err.FaultString) + return fmt.Sprintf("SOAP fault. Code: %s | Explanation: %s | Detail: %s", + err.FaultCode, err.FaultString, string(err.Detail.Raw)) } diff --git a/vendor/github.com/ipfs/go-cid/README.md b/vendor/github.com/ipfs/go-cid/README.md index 4f54343a97..89da041286 100644 --- a/vendor/github.com/ipfs/go-cid/README.md +++ b/vendor/github.com/ipfs/go-cid/README.md @@ -59,10 +59,17 @@ fmt.Println("Got CID: ", c) #### Creating a CID from scratch ```go + +import ( + cid "github.com/ipfs/go-cid" + mc "github.com/multiformats/go-multicodec" + mh "github.com/multiformats/go-multihash" +) + // Create a cid manually by specifying the 'prefix' parameters pref := cid.Prefix{ Version: 1, - Codec: cid.Raw, + Codec: mc.Raw, MhType: mh.SHA2_256, MhLength: -1, // default length } diff --git a/vendor/github.com/ipfs/go-cid/cid.go b/vendor/github.com/ipfs/go-cid/cid.go index dc807500b1..bc5704aa26 100644 --- a/vendor/github.com/ipfs/go-cid/cid.go +++ b/vendor/github.com/ipfs/go-cid/cid.go @@ -22,6 +22,7 @@ package cid import ( "bytes" "encoding" + "encoding/binary" "encoding/json" "errors" "fmt" @@ -46,19 +47,21 @@ var ( ErrInvalidEncoding = errors.New("invalid base encoding") ) -// These are multicodec-packed content types. The should match -// the codes described in the authoritative document: -// https://github.com/multiformats/multicodec/blob/master/table.csv +// Consts below are DEPRECATED and left only for legacy reasons: +// +// Modern code should use consts from go-multicodec instead: +// const ( - Raw = 0x55 - - DagProtobuf = 0x70 - DagCBOR = 0x71 - Libp2pKey = 0x72 - - GitRaw = 0x78 - - DagJOSE = 0x85 + // common ones + Raw = 0x55 + DagProtobuf = 0x70 // https://ipld.io/docs/codecs/known/dag-pb/ + DagCBOR = 0x71 // https://ipld.io/docs/codecs/known/dag-cbor/ + DagJSON = 0x0129 // https://ipld.io/docs/codecs/known/dag-json/ + Libp2pKey = 0x72 // https://github.com/libp2p/specs/blob/master/peer-ids/peer-ids.md#peer-ids + + // other + GitRaw = 0x78 + DagJOSE = 0x85 // https://ipld.io/specs/codecs/dag-jose/spec/ EthBlock = 0x90 EthBlockList = 0x91 EthTxTrie = 0x92 @@ -80,64 +83,6 @@ const ( FilCommitmentSealed = 0xf102 ) -// Codecs maps the name of a codec to its type -var Codecs = map[string]uint64{ - "v0": DagProtobuf, - "raw": Raw, - "protobuf": DagProtobuf, - "cbor": DagCBOR, - "libp2p-key": Libp2pKey, - "git-raw": GitRaw, - "eth-block": EthBlock, - "eth-block-list": EthBlockList, - "eth-tx-trie": EthTxTrie, - "eth-tx": EthTx, - "eth-tx-receipt-trie": EthTxReceiptTrie, - "eth-tx-receipt": EthTxReceipt, - "eth-state-trie": EthStateTrie, - "eth-account-snapshot": EthAccountSnapshot, - "eth-storage-trie": EthStorageTrie, - "bitcoin-block": BitcoinBlock, - "bitcoin-tx": BitcoinTx, - "zcash-block": ZcashBlock, - "zcash-tx": ZcashTx, - "decred-block": DecredBlock, - "decred-tx": DecredTx, - "dash-block": DashBlock, - "dash-tx": DashTx, - "fil-commitment-unsealed": FilCommitmentUnsealed, - "fil-commitment-sealed": FilCommitmentSealed, - "dag-jose": DagJOSE, -} - -// CodecToStr maps the numeric codec to its name -var CodecToStr = map[uint64]string{ - Raw: "raw", - DagProtobuf: "protobuf", - DagCBOR: "cbor", - GitRaw: "git-raw", - EthBlock: "eth-block", - EthBlockList: "eth-block-list", - EthTxTrie: "eth-tx-trie", - EthTx: "eth-tx", - EthTxReceiptTrie: "eth-tx-receipt-trie", - EthTxReceipt: "eth-tx-receipt", - EthStateTrie: "eth-state-trie", - EthAccountSnapshot: "eth-account-snapshot", - EthStorageTrie: "eth-storage-trie", - BitcoinBlock: "bitcoin-block", - BitcoinTx: "bitcoin-tx", - ZcashBlock: "zcash-block", - ZcashTx: "zcash-tx", - DecredBlock: "decred-block", - DecredTx: "decred-tx", - DashBlock: "dash-block", - DashTx: "dash-tx", - FilCommitmentUnsealed: "fil-commitment-unsealed", - FilCommitmentSealed: "fil-commitment-sealed", - DagJOSE: "dag-jose", -} - // tryNewCidV0 tries to convert a multihash into a CIDv0 CID and returns an // error on failure. func tryNewCidV0(mhash mh.Multihash) (Cid, error) { @@ -173,16 +118,24 @@ func NewCidV0(mhash mh.Multihash) Cid { // Panics if the multihash is invalid. func NewCidV1(codecType uint64, mhash mh.Multihash) Cid { hashlen := len(mhash) - // two 8 bytes (max) numbers plus hash - buf := make([]byte, 1+varint.UvarintSize(codecType)+hashlen) - n := varint.PutUvarint(buf, 1) - n += varint.PutUvarint(buf[n:], codecType) - cn := copy(buf[n:], mhash) + + // Two 8 bytes (max) numbers plus hash. + // We use strings.Builder to only allocate once. + var b strings.Builder + b.Grow(1 + varint.UvarintSize(codecType) + hashlen) + + b.WriteByte(1) + + var buf [binary.MaxVarintLen64]byte + n := varint.PutUvarint(buf[:], codecType) + b.Write(buf[:n]) + + cn, _ := b.Write(mhash) if cn != hashlen { panic("copy hash length is inconsistent") } - return Cid{string(buf[:n+hashlen])} + return Cid{b.String()} } var ( diff --git a/vendor/github.com/ipfs/go-cid/cid_fuzz.go b/vendor/github.com/ipfs/go-cid/cid_fuzz.go index 0bdd7e677b..0b0408c078 100644 --- a/vendor/github.com/ipfs/go-cid/cid_fuzz.go +++ b/vendor/github.com/ipfs/go-cid/cid_fuzz.go @@ -1,3 +1,4 @@ +//go:build gofuzz // +build gofuzz package cid diff --git a/vendor/github.com/ipfs/go-cid/go.mod b/vendor/github.com/ipfs/go-cid/go.mod deleted file mode 100644 index e307ff97a8..0000000000 --- a/vendor/github.com/ipfs/go-cid/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/ipfs/go-cid - -require ( - github.com/multiformats/go-multibase v0.0.3 - github.com/multiformats/go-multihash v0.0.15 - github.com/multiformats/go-varint v0.0.6 - golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf // indirect -) - -go 1.15 diff --git a/vendor/github.com/ipfs/go-cid/go.sum b/vendor/github.com/ipfs/go-cid/go.sum deleted file mode 100644 index b589aef632..0000000000 --- a/vendor/github.com/ipfs/go-cid/go.sum +++ /dev/null @@ -1,35 +0,0 @@ -github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 h1:46ULzRKLh1CwgRq2dC5SlBzEqqNCi8rreOZnNrbqcIY= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/vendor/github.com/ipfs/go-cid/version.json b/vendor/github.com/ipfs/go-cid/version.json new file mode 100644 index 0000000000..1437d5b735 --- /dev/null +++ b/vendor/github.com/ipfs/go-cid/version.json @@ -0,0 +1,3 @@ +{ + "version": "v0.2.0" +} diff --git a/vendor/github.com/ipfs/go-ipfs-util/go.mod b/vendor/github.com/ipfs/go-ipfs-util/go.mod deleted file mode 100644 index 1a9d7f0493..0000000000 --- a/vendor/github.com/ipfs/go-ipfs-util/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/ipfs/go-ipfs-util - -go 1.14 - -require ( - github.com/mr-tron/base58 v1.1.3 - github.com/multiformats/go-multihash v0.0.13 -) diff --git a/vendor/github.com/ipfs/go-ipfs-util/go.sum b/vendor/github.com/ipfs/go-ipfs-util/go.sum deleted file mode 100644 index b36340cd48..0000000000 --- a/vendor/github.com/ipfs/go-ipfs-util/go.sum +++ /dev/null @@ -1,20 +0,0 @@ -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771 h1:MHkK1uRtFbVqvAgvWxafZe54+5uBxLluGylDiKgdhwo= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-multihash v0.0.13 h1:06x+mk/zj1FoMsgNejLpy6QTvJqlSt/BhLEy87zidlc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5 h1:XVZwSo04Cs3j/jS0uAEPpT3JY6DzMcVLLoWOSnCxOjg= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/vendor/github.com/ipfs/go-log/go.mod b/vendor/github.com/ipfs/go-log/go.mod deleted file mode 100644 index ae54aeccf3..0000000000 --- a/vendor/github.com/ipfs/go-log/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/ipfs/go-log - -require ( - github.com/gogo/protobuf v1.3.2 - github.com/ipfs/go-log/v2 v2.1.3 - github.com/opentracing/opentracing-go v1.2.0 - go.uber.org/zap v1.16.0 -) - -go 1.12 diff --git a/vendor/github.com/ipfs/go-log/go.sum b/vendor/github.com/ipfs/go-log/go.sum deleted file mode 100644 index 471fd4c12a..0000000000 --- a/vendor/github.com/ipfs/go-log/go.sum +++ /dev/null @@ -1,84 +0,0 @@ -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/ipfs/go-log/v2 v2.1.3 h1:1iS3IU7aXRlbgUpN8yTTpJ53NXYjAe37vcI5+5nYrzk= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a h1:CB3a9Nez8M13wwlr/E2YtwoU+qYHKfC+JrDa45RXXoQ= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/vendor/github.com/ipfs/go-log/v2/go.mod b/vendor/github.com/ipfs/go-log/v2/go.mod deleted file mode 100644 index 86a99c03c1..0000000000 --- a/vendor/github.com/ipfs/go-log/v2/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/ipfs/go-log/v2 - -require ( - github.com/mattn/go-isatty v0.0.14 - go.uber.org/multierr v1.6.0 - go.uber.org/zap v1.19.1 -) - -go 1.16 diff --git a/vendor/github.com/ipfs/go-log/v2/go.sum b/vendor/github.com/ipfs/go-log/v2/go.sum deleted file mode 100644 index 35d9b32d2b..0000000000 --- a/vendor/github.com/ipfs/go-log/v2/go.sum +++ /dev/null @@ -1,61 +0,0 @@ -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/ipfs/go-log/v2/log.go b/vendor/github.com/ipfs/go-log/v2/log.go index 6b0c444c63..81a7fcbe84 100644 --- a/vendor/github.com/ipfs/go-log/v2/log.go +++ b/vendor/github.com/ipfs/go-log/v2/log.go @@ -82,3 +82,13 @@ func WithStacktrace(l *ZapEventLogger, level LogLevel) *ZapEventLogger { copyLogger.skipLogger = *copyLogger.SugaredLogger.Desugar().WithOptions(zap.AddCallerSkip(1)).Sugar() return ©Logger } + +// WithSkip returns a new logger that skips the specified number of stack frames when reporting the +// line/file. +func WithSkip(l *ZapEventLogger, skip int) *ZapEventLogger { + copyLogger := *l + copyLogger.SugaredLogger = *copyLogger.SugaredLogger.Desugar(). + WithOptions(zap.AddCallerSkip(skip)).Sugar() + copyLogger.skipLogger = *copyLogger.SugaredLogger.Desugar().WithOptions(zap.AddCallerSkip(1)).Sugar() + return ©Logger +} diff --git a/vendor/github.com/jbenet/go-temp-err-catcher/go.mod b/vendor/github.com/jbenet/go-temp-err-catcher/go.mod deleted file mode 100644 index d09c9d7e53..0000000000 --- a/vendor/github.com/jbenet/go-temp-err-catcher/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/jbenet/go-temp-err-catcher - -go 1.13 diff --git a/vendor/github.com/jmespath/go-jmespath/go.mod b/vendor/github.com/jmespath/go-jmespath/go.mod deleted file mode 100644 index 4d448e88b0..0000000000 --- a/vendor/github.com/jmespath/go-jmespath/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/jmespath/go-jmespath - -go 1.14 - -require github.com/jmespath/go-jmespath/internal/testify v1.5.1 diff --git a/vendor/github.com/jmespath/go-jmespath/go.sum b/vendor/github.com/jmespath/go-jmespath/go.sum deleted file mode 100644 index d2db411e58..0000000000 --- a/vendor/github.com/jmespath/go-jmespath/go.sum +++ /dev/null @@ -1,11 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/klauspost/compress/.gitignore b/vendor/github.com/klauspost/compress/.gitignore index b35f8449bf..d31b378152 100644 --- a/vendor/github.com/klauspost/compress/.gitignore +++ b/vendor/github.com/klauspost/compress/.gitignore @@ -23,3 +23,10 @@ _testmain.go *.test *.prof /s2/cmd/_s2sx/sfx-exe + +# Linux perf files +perf.data +perf.data.old + +# gdb history +.gdb_history diff --git a/vendor/github.com/klauspost/compress/README.md b/vendor/github.com/klauspost/compress/README.md index e8ff994f8b..615c34e139 100644 --- a/vendor/github.com/klauspost/compress/README.md +++ b/vendor/github.com/klauspost/compress/README.md @@ -17,6 +17,65 @@ This package provides various compression algorithms. # changelog +* May 11, 2022 (v1.15.4) + * huff0: decompress directly into output by @WojciechMula in [#577](https://github.com/klauspost/compress/pull/577) + * inflate: Keep dict on stack [#581](https://github.com/klauspost/compress/pull/581) + * zstd: Faster decoding memcopy in asm [#583](https://github.com/klauspost/compress/pull/583) + * zstd: Fix ignored crc [#580](https://github.com/klauspost/compress/pull/580) + +* May 5, 2022 (v1.15.3) + * zstd: Allow to ignore checksum checking by @WojciechMula [#572](https://github.com/klauspost/compress/pull/572) + * s2: Fix incorrect seek for io.SeekEnd in [#575](https://github.com/klauspost/compress/pull/575) + +* Apr 26, 2022 (v1.15.2) + * zstd: Add x86-64 assembly for decompression on streams and blocks. Contributed by [@WojciechMula](https://github.com/WojciechMula). Typically 2x faster. [#528](https://github.com/klauspost/compress/pull/528) [#531](https://github.com/klauspost/compress/pull/531) [#545](https://github.com/klauspost/compress/pull/545) [#537](https://github.com/klauspost/compress/pull/537) + * zstd: Add options to ZipDecompressor and fixes [#539](https://github.com/klauspost/compress/pull/539) + * s2: Use sorted search for index [#555](https://github.com/klauspost/compress/pull/555) + * Minimum version is Go 1.16, added CI test on 1.18. + +* Mar 11, 2022 (v1.15.1) + * huff0: Add x86 assembly of Decode4X by @WojciechMula in [#512](https://github.com/klauspost/compress/pull/512) + * zstd: Reuse zip decoders in [#514](https://github.com/klauspost/compress/pull/514) + * zstd: Detect extra block data and report as corrupted in [#520](https://github.com/klauspost/compress/pull/520) + * zstd: Handle zero sized frame content size stricter in [#521](https://github.com/klauspost/compress/pull/521) + * zstd: Add stricter block size checks in [#523](https://github.com/klauspost/compress/pull/523) + +* Mar 3, 2022 (v1.15.0) + * zstd: Refactor decoder by @klauspost in [#498](https://github.com/klauspost/compress/pull/498) + * zstd: Add stream encoding without goroutines by @klauspost in [#505](https://github.com/klauspost/compress/pull/505) + * huff0: Prevent single blocks exceeding 16 bits by @klauspost in[#507](https://github.com/klauspost/compress/pull/507) + * flate: Inline literal emission by @klauspost in [#509](https://github.com/klauspost/compress/pull/509) + * gzhttp: Add zstd to transport by @klauspost in [#400](https://github.com/klauspost/compress/pull/400) + * gzhttp: Make content-type optional by @klauspost in [#510](https://github.com/klauspost/compress/pull/510) + +
+ See Details +Both compression and decompression now supports "synchronous" stream operations. This means that whenever "concurrency" is set to 1, they will operate without spawning goroutines. + +Stream decompression is now faster on asynchronous, since the goroutine allocation much more effectively splits the workload. On typical streams this will typically use 2 cores fully for decompression. When a stream has finished decoding no goroutines will be left over, so decoders can now safely be pooled and still be garbage collected. + +While the release has been extensively tested, it is recommended to testing when upgrading. +
+ +* Feb 22, 2022 (v1.14.4) + * flate: Fix rare huffman only (-2) corruption. [#503](https://github.com/klauspost/compress/pull/503) + * zip: Update deprecated CreateHeaderRaw to correctly call CreateRaw by @saracen in [#502](https://github.com/klauspost/compress/pull/502) + * zip: don't read data descriptor early by @saracen in [#501](https://github.com/klauspost/compress/pull/501) #501 + * huff0: Use static decompression buffer up to 30% faster by @klauspost in [#499](https://github.com/klauspost/compress/pull/499) [#500](https://github.com/klauspost/compress/pull/500) + +* Feb 17, 2022 (v1.14.3) + * flate: Improve fastest levels compression speed ~10% more throughput. [#482](https://github.com/klauspost/compress/pull/482) [#489](https://github.com/klauspost/compress/pull/489) [#490](https://github.com/klauspost/compress/pull/490) [#491](https://github.com/klauspost/compress/pull/491) [#494](https://github.com/klauspost/compress/pull/494) [#478](https://github.com/klauspost/compress/pull/478) + * flate: Faster decompression speed, ~5-10%. [#483](https://github.com/klauspost/compress/pull/483) + * s2: Faster compression with Go v1.18 and amd64 microarch level 3+. [#484](https://github.com/klauspost/compress/pull/484) [#486](https://github.com/klauspost/compress/pull/486) + +* Jan 25, 2022 (v1.14.2) + * zstd: improve header decoder by @dsnet [#476](https://github.com/klauspost/compress/pull/476) + * zstd: Add bigger default blocks [#469](https://github.com/klauspost/compress/pull/469) + * zstd: Remove unused decompression buffer [#470](https://github.com/klauspost/compress/pull/470) + * zstd: Fix logically dead code by @ningmingxiao [#472](https://github.com/klauspost/compress/pull/472) + * flate: Improve level 7-9 [#471](https://github.com/klauspost/compress/pull/471) [#473](https://github.com/klauspost/compress/pull/473) + * zstd: Add noasm tag for xxhash [#475](https://github.com/klauspost/compress/pull/475) + * Jan 11, 2022 (v1.14.1) * s2: Add stream index in [#462](https://github.com/klauspost/compress/pull/462) * flate: Speed and efficiency improvements in [#439](https://github.com/klauspost/compress/pull/439) [#461](https://github.com/klauspost/compress/pull/461) [#455](https://github.com/klauspost/compress/pull/455) [#452](https://github.com/klauspost/compress/pull/452) [#458](https://github.com/klauspost/compress/pull/458) @@ -53,6 +112,9 @@ This package provides various compression algorithms. * zstd: Detect short invalid signatures [#382](https://github.com/klauspost/compress/pull/382) * zstd: Spawn decoder goroutine only if needed. [#380](https://github.com/klauspost/compress/pull/380) +
+ See changes to v1.12.x + * May 25, 2021 (v1.12.3) * deflate: Better/faster Huffman encoding [#374](https://github.com/klauspost/compress/pull/374) * deflate: Allocate less for history. [#375](https://github.com/klauspost/compress/pull/375) @@ -74,9 +136,10 @@ This package provides various compression algorithms. * s2c/s2d/s2sx: Always truncate when writing files [#352](https://github.com/klauspost/compress/pull/352) * zstd: Reduce memory usage further when using [WithLowerEncoderMem](https://pkg.go.dev/github.com/klauspost/compress/zstd#WithLowerEncoderMem) [#346](https://github.com/klauspost/compress/pull/346) * s2: Fix potential problem with amd64 assembly and profilers [#349](https://github.com/klauspost/compress/pull/349) +
- See changes prior to v1.12.1 + See changes to v1.11.x * Mar 26, 2021 (v1.11.13) * zstd: Big speedup on small dictionary encodes [#344](https://github.com/klauspost/compress/pull/344) [#345](https://github.com/klauspost/compress/pull/345) @@ -135,7 +198,7 @@ This package provides various compression algorithms.
- See changes prior to v1.11.0 + See changes to v1.10.x * July 8, 2020 (v1.10.11) * zstd: Fix extra block when compressing with ReadFrom. [#278](https://github.com/klauspost/compress/pull/278) @@ -297,11 +360,6 @@ This package provides various compression algorithms. # deflate usage -* [High Throughput Benchmark](http://blog.klauspost.com/go-gzipdeflate-benchmarks/). -* [Small Payload/Webserver Benchmarks](http://blog.klauspost.com/gzip-performance-for-go-webservers/). -* [Linear Time Compression](http://blog.klauspost.com/constant-time-gzipzip-compression/). -* [Re-balancing Deflate Compression Levels](https://blog.klauspost.com/rebalancing-deflate-compression-levels/) - The packages are drop-in replacements for standard libraries. Simply replace the import path to use them: | old import | new import | Documentation @@ -323,6 +381,8 @@ Memory usage is typically 1MB for a Writer. stdlib is in the same range. If you expect to have a lot of concurrently allocated Writers consider using the stateless compress described below. +For compression performance, see: [this spreadsheet](https://docs.google.com/spreadsheets/d/1nuNE2nPfuINCZJRMt6wFWhKpToF95I47XjSsc-1rbPQ/edit?usp=sharing). + # Stateless compression This package offers stateless compression as a special option for gzip/deflate. diff --git a/vendor/github.com/klauspost/compress/flate/deflate.go b/vendor/github.com/klauspost/compress/flate/deflate.go index bffa2f3323..f8435998e5 100644 --- a/vendor/github.com/klauspost/compress/flate/deflate.go +++ b/vendor/github.com/klauspost/compress/flate/deflate.go @@ -84,24 +84,23 @@ type advancedState struct { length int offset int maxInsertIndex int + chainHead int + hashOffset int - // Input hash chains - // hashHead[hashValue] contains the largest inputIndex with the specified hash value - // If hashHead[hashValue] is within the current window, then - // hashPrev[hashHead[hashValue] & windowMask] contains the previous index - // with the same hash value. - chainHead int - hashHead [hashSize]uint32 - hashPrev [windowSize]uint32 - hashOffset int + ii uint16 // position of last match, intended to overflow to reset. // input window: unprocessed data is window[index:windowEnd] index int estBitsPerByte int hashMatch [maxMatchLength + minMatchLength]uint32 - hash uint32 - ii uint16 // position of last match, intended to overflow to reset. + // Input hash chains + // hashHead[hashValue] contains the largest inputIndex with the specified hash value + // If hashHead[hashValue] is within the current window, then + // hashPrev[hashHead[hashValue] & windowMask] contains the previous index + // with the same hash value. + hashHead [hashSize]uint32 + hashPrev [windowSize]uint32 } type compressor struct { @@ -259,7 +258,6 @@ func (d *compressor) fillWindow(b []byte) { // Set the head of the hash chain to us. s.hashHead[newH] = uint32(di + s.hashOffset) } - s.hash = newH } // Update window information. d.windowEnd += n @@ -403,7 +401,6 @@ func (d *compressor) initDeflate() { s.hashOffset = 1 s.length = minMatchLength - 1 s.offset = 0 - s.hash = 0 s.chainHead = -1 } @@ -432,9 +429,6 @@ func (d *compressor) deflateLazy() { } s.maxInsertIndex = d.windowEnd - (minMatchLength - 1) - if s.index < s.maxInsertIndex { - s.hash = hash4(d.window[s.index:]) - } for { if sanity && s.index > d.windowEnd { @@ -466,11 +460,11 @@ func (d *compressor) deflateLazy() { } if s.index < s.maxInsertIndex { // Update the hash - s.hash = hash4(d.window[s.index:]) - ch := s.hashHead[s.hash&hashMask] + hash := hash4(d.window[s.index:]) + ch := s.hashHead[hash] s.chainHead = int(ch) s.hashPrev[s.index&windowMask] = ch - s.hashHead[s.hash&hashMask] = uint32(s.index + s.hashOffset) + s.hashHead[hash] = uint32(s.index + s.hashOffset) } prevLength := s.length prevOffset := s.offset @@ -503,7 +497,7 @@ func (d *compressor) deflateLazy() { end += prevIndex idx := prevIndex + prevLength - (4 - checkOff) h := hash4(d.window[idx:]) - ch2 := int(s.hashHead[h&hashMask]) - s.hashOffset - prevLength + (4 - checkOff) + ch2 := int(s.hashHead[h]) - s.hashOffset - prevLength + (4 - checkOff) if ch2 > minIndex { length := matchLen(d.window[prevIndex:end], d.window[ch2:]) // It seems like a pure length metric is best. @@ -547,7 +541,6 @@ func (d *compressor) deflateLazy() { // Set the head of the hash chain to us. s.hashHead[newH] = uint32(di + s.hashOffset) } - s.hash = newH } s.index = newIndex @@ -793,7 +786,6 @@ func (d *compressor) reset(w io.Writer) { d.tokens.Reset() s.length = minMatchLength - 1 s.offset = 0 - s.hash = 0 s.ii = 0 s.maxInsertIndex = 0 } diff --git a/vendor/github.com/klauspost/compress/flate/fast_encoder.go b/vendor/github.com/klauspost/compress/flate/fast_encoder.go index 0b2e54972c..f781aaa625 100644 --- a/vendor/github.com/klauspost/compress/flate/fast_encoder.go +++ b/vendor/github.com/klauspost/compress/flate/fast_encoder.go @@ -117,7 +117,7 @@ func (e *fastGen) addBlock(src []byte) int32 { // hash4 returns the hash of u to fit in a hash table with h bits. // Preferably h should be a constant and should always be <32. func hash4u(u uint32, h uint8) uint32 { - return (u * prime4bytes) >> ((32 - h) & reg8SizeMask32) + return (u * prime4bytes) >> (32 - h) } type tableEntryPrev struct { @@ -179,7 +179,7 @@ func (e *fastGen) matchlen(s, t int32, src []byte) int32 { // matchlenLong will return the match length between offsets and t in src. // It is assumed that s > t, that t >=0 and s < len(src). func (e *fastGen) matchlenLong(s, t int32, src []byte) int32 { - if debugDecode { + if debugDeflate { if t >= s { panic(fmt.Sprint("t >=s:", t, s)) } diff --git a/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go b/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go index fd49efd75b..25f6d1108f 100644 --- a/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go +++ b/vendor/github.com/klauspost/compress/flate/huffman_bit_writer.go @@ -8,6 +8,7 @@ import ( "encoding/binary" "fmt" "io" + "math" ) const ( @@ -24,6 +25,10 @@ const ( codegenCodeCount = 19 badCode = 255 + // maxPredefinedTokens is the maximum number of tokens + // where we check if fixed size is smaller. + maxPredefinedTokens = 250 + // bufferFlushSize indicates the buffer size // after which bytes are flushed to the writer. // Should preferably be a multiple of 6, since @@ -36,8 +41,11 @@ const ( bufferSize = bufferFlushSize + 8 ) +// Minimum length code that emits bits. +const lengthExtraBitsMinCode = 8 + // The number of extra bits needed by length code X - LENGTH_CODES_START. -var lengthExtraBits = [32]int8{ +var lengthExtraBits = [32]uint8{ /* 257 */ 0, 0, 0, /* 260 */ 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, /* 270 */ 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, @@ -51,6 +59,9 @@ var lengthBase = [32]uint8{ 64, 80, 96, 112, 128, 160, 192, 224, 255, } +// Minimum offset code that emits bits. +const offsetExtraBitsMinCode = 4 + // offset code word extra bits. var offsetExtraBits = [32]int8{ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, @@ -78,10 +89,10 @@ func init() { for i := range offsetCombined[:] { // Don't use extended window values... - if offsetBase[i] > 0x006000 { + if offsetExtraBits[i] == 0 || offsetBase[i] > 0x006000 { continue } - offsetCombined[i] = uint32(offsetExtraBits[i])<<16 | (offsetBase[i]) + offsetCombined[i] = uint32(offsetExtraBits[i]) | (offsetBase[i] << 8) } } @@ -97,7 +108,7 @@ type huffmanBitWriter struct { // Data waiting to be written is bytes[0:nbytes] // and then the low nbits of bits. bits uint64 - nbits uint16 + nbits uint8 nbytes uint8 lastHuffMan bool literalEncoding *huffmanEncoder @@ -215,7 +226,7 @@ func (w *huffmanBitWriter) write(b []byte) { _, w.err = w.writer.Write(b) } -func (w *huffmanBitWriter) writeBits(b int32, nb uint16) { +func (w *huffmanBitWriter) writeBits(b int32, nb uint8) { w.bits |= uint64(b) << (w.nbits & 63) w.nbits += nb if w.nbits >= 48 { @@ -571,7 +582,10 @@ func (w *huffmanBitWriter) writeBlock(tokens *tokens, eof bool, input []byte) { // Fixed Huffman baseline. var literalEncoding = fixedLiteralEncoding var offsetEncoding = fixedOffsetEncoding - var size = w.fixedSize(extraBits) + var size = math.MaxInt32 + if tokens.n < maxPredefinedTokens { + size = w.fixedSize(extraBits) + } // Dynamic Huffman? var numCodegens int @@ -672,19 +686,21 @@ func (w *huffmanBitWriter) writeBlockDynamic(tokens *tokens, eof bool, input []b size = reuseSize } - if preSize := w.fixedSize(extraBits) + 7; usePrefs && preSize < size { - // Check if we get a reasonable size decrease. - if storable && ssize <= size { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) + if tokens.n < maxPredefinedTokens { + if preSize := w.fixedSize(extraBits) + 7; usePrefs && preSize < size { + // Check if we get a reasonable size decrease. + if storable && ssize <= size { + w.writeStoredHeader(len(input), eof) + w.writeBytes(input) + return + } + w.writeFixedHeader(eof) + if !sync { + tokens.AddEOB() + } + w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes) return } - w.writeFixedHeader(eof) - if !sync { - tokens.AddEOB() - } - w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes) - return } // Check if we get a reasonable size decrease. if storable && ssize <= size { @@ -717,19 +733,21 @@ func (w *huffmanBitWriter) writeBlockDynamic(tokens *tokens, eof bool, input []b size, numCodegens = w.dynamicSize(w.literalEncoding, w.offsetEncoding, extraBits) // Store predefined, if we don't get a reasonable improvement. - if preSize := w.fixedSize(extraBits); usePrefs && preSize <= size { - // Store bytes, if we don't get an improvement. - if storable && ssize <= preSize { - w.writeStoredHeader(len(input), eof) - w.writeBytes(input) + if tokens.n < maxPredefinedTokens { + if preSize := w.fixedSize(extraBits); usePrefs && preSize <= size { + // Store bytes, if we don't get an improvement. + if storable && ssize <= preSize { + w.writeStoredHeader(len(input), eof) + w.writeBytes(input) + return + } + w.writeFixedHeader(eof) + if !sync { + tokens.AddEOB() + } + w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes) return } - w.writeFixedHeader(eof) - if !sync { - tokens.AddEOB() - } - w.writeTokens(tokens.Slice(), fixedLiteralEncoding.codes, fixedOffsetEncoding.codes) - return } if storable && ssize <= size { @@ -833,9 +851,9 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) bits, nbits, nbytes := w.bits, w.nbits, w.nbytes for _, t := range tokens { - if t < matchType { + if t < 256 { //w.writeCode(lits[t.literal()]) - c := lits[t.literal()] + c := lits[t] bits |= uint64(c.code) << (nbits & 63) nbits += c.len if nbits >= 48 { @@ -858,12 +876,12 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) // Write the length length := t.length() - lengthCode := lengthCode(length) + lengthCode := lengthCode(length) & 31 if false { - w.writeCode(lengths[lengthCode&31]) + w.writeCode(lengths[lengthCode]) } else { // inlined - c := lengths[lengthCode&31] + c := lengths[lengthCode] bits |= uint64(c.code) << (nbits & 63) nbits += c.len if nbits >= 48 { @@ -883,10 +901,10 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) } } - extraLengthBits := uint16(lengthExtraBits[lengthCode&31]) - if extraLengthBits > 0 { + if lengthCode >= lengthExtraBitsMinCode { + extraLengthBits := lengthExtraBits[lengthCode] //w.writeBits(extraLength, extraLengthBits) - extraLength := int32(length - lengthBase[lengthCode&31]) + extraLength := int32(length - lengthBase[lengthCode]) bits |= uint64(extraLength) << (nbits & 63) nbits += extraLengthBits if nbits >= 48 { @@ -907,10 +925,9 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) } // Write the offset offset := t.offset() - offsetCode := offset >> 16 - offset &= matchOffsetOnlyMask + offsetCode := (offset >> 16) & 31 if false { - w.writeCode(offs[offsetCode&31]) + w.writeCode(offs[offsetCode]) } else { // inlined c := offs[offsetCode] @@ -932,11 +949,12 @@ func (w *huffmanBitWriter) writeTokens(tokens []token, leCodes, oeCodes []hcode) } } } - offsetComb := offsetCombined[offsetCode] - if offsetComb > 1<<16 { + + if offsetCode >= offsetExtraBitsMinCode { + offsetComb := offsetCombined[offsetCode] //w.writeBits(extraOffset, extraOffsetBits) - bits |= uint64(offset-(offsetComb&0xffff)) << (nbits & 63) - nbits += uint16(offsetComb >> 16) + bits |= uint64((offset-(offsetComb>>8))&matchOffsetOnlyMask) << (nbits & 63) + nbits += uint8(offsetComb) if nbits >= 48 { binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits @@ -1002,6 +1020,29 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { // https://stackoverflow.com/a/25454430 const guessHeaderSizeBits = 70 * 8 histogram(input, w.literalFreq[:numLiterals], fill) + ssize, storable := w.storedSize(input) + if storable && len(input) > 1024 { + // Quick check for incompressible content. + abs := float64(0) + avg := float64(len(input)) / 256 + max := float64(len(input) * 2) + for _, v := range w.literalFreq[:256] { + diff := float64(v) - avg + abs += diff * diff + if abs > max { + break + } + } + if abs < max { + if debugDeflate { + fmt.Println("stored", abs, "<", max) + } + // No chance we can compress this... + w.writeStoredHeader(len(input), eof) + w.writeBytes(input) + return + } + } w.literalFreq[endBlockMarker] = 1 w.tmpLitEncoding.generate(w.literalFreq[:numLiterals], 15) if fill { @@ -1019,8 +1060,10 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { estBits += estBits >> w.logNewTablePenalty // Store bytes, if we don't get a reasonable improvement. - ssize, storable := w.storedSize(input) if storable && ssize <= estBits { + if debugDeflate { + fmt.Println("stored,", ssize, "<=", estBits) + } w.writeStoredHeader(len(input), eof) w.writeBytes(input) return @@ -1031,7 +1074,7 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { if estBits < reuseSize { if debugDeflate { - //fmt.Println("not reusing, reuse:", reuseSize/8, "> new:", estBits/8, "- header est:", w.lastHeader/8) + fmt.Println("NOT reusing, reuse:", reuseSize/8, "> new:", estBits/8, "header est:", w.lastHeader/8, "bytes") } // We owe an EOB w.writeCode(w.literalEncoding.codes[endBlockMarker]) @@ -1065,6 +1108,9 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { // Go 1.16 LOVES having these on stack. At least 1.5x the speed. bits, nbits, nbytes := w.bits, w.nbits, w.nbytes + if debugDeflate { + count -= int(nbytes)*8 + int(nbits) + } // Unroll, write 3 codes/loop. // Fastest number of unrolls. for len(input) > 3 { @@ -1074,13 +1120,16 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) bits >>= (n * 8) & 63 nbits -= n * 8 - nbytes += uint8(n) + nbytes += n } if nbytes >= bufferFlushSize { if w.err != nil { nbytes = 0 return } + if debugDeflate { + count += int(nbytes) * 8 + } _, w.err = w.writer.Write(w.bytes[:nbytes]) nbytes = 0 } @@ -1096,13 +1145,6 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { // Remaining... for _, t := range input { - // Bitwriting inlined, ~30% speedup - c := encoding[t] - bits |= uint64(c.code) << (nbits & 63) - nbits += c.len - if debugDeflate { - count += int(c.len) - } if nbits >= 48 { binary.LittleEndian.PutUint64(w.bytes[nbytes:], bits) //*(*uint64)(unsafe.Pointer(&w.bytes[nbytes])) = bits @@ -1114,17 +1156,33 @@ func (w *huffmanBitWriter) writeBlockHuff(eof bool, input []byte, sync bool) { nbytes = 0 return } + if debugDeflate { + count += int(nbytes) * 8 + } _, w.err = w.writer.Write(w.bytes[:nbytes]) nbytes = 0 } } + // Bitwriting inlined, ~30% speedup + c := encoding[t] + bits |= uint64(c.code) << (nbits & 63) + nbits += c.len + if debugDeflate { + count += int(c.len) + } } // Restore... w.bits, w.nbits, w.nbytes = bits, nbits, nbytes if debugDeflate { - fmt.Println("wrote", count/8, "bytes") + nb := count + int(nbytes)*8 + int(nbits) + fmt.Println("wrote", nb, "bits,", nb/8, "bytes.") + } + // Flush if needed to have space. + if w.nbits >= 48 { + w.writeOutBits() } + if eof || sync { w.writeCode(w.literalEncoding.codes[endBlockMarker]) w.lastHeader = 0 diff --git a/vendor/github.com/klauspost/compress/flate/huffman_code.go b/vendor/github.com/klauspost/compress/flate/huffman_code.go index f35e00261d..9ab497c275 100644 --- a/vendor/github.com/klauspost/compress/flate/huffman_code.go +++ b/vendor/github.com/klauspost/compress/flate/huffman_code.go @@ -17,7 +17,8 @@ const ( // hcode is a huffman code with a bit code and bit length. type hcode struct { - code, len uint16 + code uint16 + len uint8 } type huffmanEncoder struct { @@ -56,7 +57,7 @@ type levelInfo struct { } // set sets the code and length of an hcode. -func (h *hcode) set(code uint16, length uint16) { +func (h *hcode) set(code uint16, length uint8) { h.len = length h.code = code } @@ -80,7 +81,7 @@ func generateFixedLiteralEncoding() *huffmanEncoder { var ch uint16 for ch = 0; ch < literalCount; ch++ { var bits uint16 - var size uint16 + var size uint8 switch { case ch < 144: // size 8, 000110000 .. 10111111 @@ -99,7 +100,7 @@ func generateFixedLiteralEncoding() *huffmanEncoder { bits = ch + 192 - 280 size = 8 } - codes[ch] = hcode{code: reverseBits(bits, byte(size)), len: size} + codes[ch] = hcode{code: reverseBits(bits, size), len: size} } return h } @@ -187,14 +188,19 @@ func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 { // of the level j ancestor. var leafCounts [maxBitsLimit][maxBitsLimit]int32 + // Descending to only have 1 bounds check. + l2f := int32(list[2].freq) + l1f := int32(list[1].freq) + l0f := int32(list[0].freq) + int32(list[1].freq) + for level := int32(1); level <= maxBits; level++ { // For every level, the first two items are the first two characters. // We initialize the levels as if we had already figured this out. levels[level] = levelInfo{ level: level, - lastFreq: int32(list[1].freq), - nextCharFreq: int32(list[2].freq), - nextPairFreq: int32(list[0].freq) + int32(list[1].freq), + lastFreq: l1f, + nextCharFreq: l2f, + nextPairFreq: l0f, } leafCounts[level][level] = 2 if level == 1 { @@ -205,8 +211,8 @@ func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 { // We need a total of 2*n - 2 items at top level and have already generated 2. levels[maxBits].needed = 2*n - 4 - level := maxBits - for { + level := uint32(maxBits) + for level < 16 { l := &levels[level] if l.nextPairFreq == math.MaxInt32 && l.nextCharFreq == math.MaxInt32 { // We've run out of both leafs and pairs. @@ -238,7 +244,13 @@ func (h *huffmanEncoder) bitCounts(list []literalNode, maxBits int32) []int32 { // more values in the level below l.lastFreq = l.nextPairFreq // Take leaf counts from the lower level, except counts[level] remains the same. - copy(leafCounts[level][:level], leafCounts[level-1][:level]) + if true { + save := leafCounts[level][level] + leafCounts[level] = leafCounts[level-1] + leafCounts[level][level] = save + } else { + copy(leafCounts[level][:level], leafCounts[level-1][:level]) + } levels[l.level-1].needed = 2 } @@ -296,7 +308,7 @@ func (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalN sortByLiteral(chunk) for _, node := range chunk { - h.codes[node.literal] = hcode{code: reverseBits(code, uint8(n)), len: uint16(n)} + h.codes[node.literal] = hcode{code: reverseBits(code, uint8(n)), len: uint8(n)} code++ } list = list[0 : len(list)-int(bits)] @@ -309,6 +321,7 @@ func (h *huffmanEncoder) assignEncodingAndSize(bitCount []int32, list []literalN // maxBits The maximum number of bits to use for any literal. func (h *huffmanEncoder) generate(freq []uint16, maxBits int32) { list := h.freqcache[:len(freq)+1] + codes := h.codes[:len(freq)] // Number of non-zero literals count := 0 // Set list to be the set of all non-zero literals and their frequencies @@ -317,11 +330,10 @@ func (h *huffmanEncoder) generate(freq []uint16, maxBits int32) { list[count] = literalNode{uint16(i), f} count++ } else { - list[count] = literalNode{} - h.codes[i].len = 0 + codes[i].len = 0 } } - list[len(freq)] = literalNode{} + list[count] = literalNode{} list = list[:count] if count <= 2 { diff --git a/vendor/github.com/klauspost/compress/flate/inflate.go b/vendor/github.com/klauspost/compress/flate/inflate.go index d5f62f6a2c..414c0bea9f 100644 --- a/vendor/github.com/klauspost/compress/flate/inflate.go +++ b/vendor/github.com/klauspost/compress/flate/inflate.go @@ -36,6 +36,13 @@ type lengthExtra struct { var decCodeToLen = [32]lengthExtra{{length: 0x0, extra: 0x0}, {length: 0x1, extra: 0x0}, {length: 0x2, extra: 0x0}, {length: 0x3, extra: 0x0}, {length: 0x4, extra: 0x0}, {length: 0x5, extra: 0x0}, {length: 0x6, extra: 0x0}, {length: 0x7, extra: 0x0}, {length: 0x8, extra: 0x1}, {length: 0xa, extra: 0x1}, {length: 0xc, extra: 0x1}, {length: 0xe, extra: 0x1}, {length: 0x10, extra: 0x2}, {length: 0x14, extra: 0x2}, {length: 0x18, extra: 0x2}, {length: 0x1c, extra: 0x2}, {length: 0x20, extra: 0x3}, {length: 0x28, extra: 0x3}, {length: 0x30, extra: 0x3}, {length: 0x38, extra: 0x3}, {length: 0x40, extra: 0x4}, {length: 0x50, extra: 0x4}, {length: 0x60, extra: 0x4}, {length: 0x70, extra: 0x4}, {length: 0x80, extra: 0x5}, {length: 0xa0, extra: 0x5}, {length: 0xc0, extra: 0x5}, {length: 0xe0, extra: 0x5}, {length: 0xff, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}, {length: 0x0, extra: 0x0}} +var bitMask32 = [32]uint32{ + 0, 1, 3, 7, 0xF, 0x1F, 0x3F, 0x7F, 0xFF, + 0x1FF, 0x3FF, 0x7FF, 0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, + 0x1ffff, 0x3ffff, 0x7FFFF, 0xfFFFF, 0x1fFFFF, 0x3fFFFF, 0x7fFFFF, 0xffFFFF, + 0x1ffFFFF, 0x3ffFFFF, 0x7ffFFFF, 0xfffFFFF, 0x1fffFFFF, 0x3fffFFFF, 0x7fffFFFF, +} // up to 32 bits + // Initialize the fixedHuffmanDecoder only once upon first use. var fixedOnce sync.Once var fixedHuffmanDecoder huffmanDecoder @@ -559,221 +566,6 @@ func (f *decompressor) readHuffman() error { return nil } -// Decode a single Huffman block from f. -// hl and hd are the Huffman states for the lit/length values -// and the distance values, respectively. If hd == nil, using the -// fixed distance encoding associated with fixed Huffman blocks. -func (f *decompressor) huffmanBlockGeneric() { - const ( - stateInit = iota // Zero value must be stateInit - stateDict - ) - - switch f.stepState { - case stateInit: - goto readLiteral - case stateDict: - goto copyHistory - } - -readLiteral: - // Read literal and/or (length, distance) according to RFC section 3.2.3. - { - var v int - { - // Inlined v, err := f.huffSym(f.hl) - // Since a huffmanDecoder can be empty or be composed of a degenerate tree - // with single element, huffSym must error on these two edge cases. In both - // cases, the chunks slice will be 0 for the invalid sequence, leading it - // satisfy the n == 0 check below. - n := uint(f.hl.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b - for { - for nb < n { - c, err := f.r.ReadByte() - if err != nil { - f.b = b - f.nb = nb - f.err = noEOF(err) - return - } - f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 - } - chunk := f.hl.chunks[b&(huffmanNumChunks-1)] - n = uint(chunk & huffmanCountMask) - if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hl.linkMask] - n = uint(chunk & huffmanCountMask) - } - if n <= nb { - if n == 0 { - f.b = b - f.nb = nb - if debugDecode { - fmt.Println("huffsym: n==0") - } - f.err = CorruptInputError(f.roffset) - return - } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n - v = int(chunk >> huffmanValueShift) - break - } - } - } - - var n uint // number of bits extra - var length int - var err error - switch { - case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() - f.step = (*decompressor).huffmanBlockGeneric - f.stepState = stateInit - return - } - goto readLiteral - case v == 256: - f.finishBlock() - return - // otherwise, reference to older data - case v < 265: - length = v - (257 - 3) - n = 0 - case v < 269: - length = v*2 - (265*2 - 11) - n = 1 - case v < 273: - length = v*4 - (269*4 - 19) - n = 2 - case v < 277: - length = v*8 - (273*8 - 35) - n = 3 - case v < 281: - length = v*16 - (277*16 - 67) - n = 4 - case v < 285: - length = v*32 - (281*32 - 131) - n = 5 - case v < maxNumLit: - length = 258 - n = 0 - default: - if debugDecode { - fmt.Println(v, ">= maxNumLit") - } - f.err = CorruptInputError(f.roffset) - return - } - if n > 0 { - for f.nb < n { - if err = f.moreBits(); err != nil { - if debugDecode { - fmt.Println("morebits n>0:", err) - } - f.err = err - return - } - } - length += int(f.b & uint32(1<<(n®SizeMaskUint32)-1)) - f.b >>= n & regSizeMaskUint32 - f.nb -= n - } - - var dist uint32 - if f.hd == nil { - for f.nb < 5 { - if err = f.moreBits(); err != nil { - if debugDecode { - fmt.Println("morebits f.nb<5:", err) - } - f.err = err - return - } - } - dist = uint32(bits.Reverse8(uint8(f.b & 0x1F << 3))) - f.b >>= 5 - f.nb -= 5 - } else { - sym, err := f.huffSym(f.hd) - if err != nil { - if debugDecode { - fmt.Println("huffsym:", err) - } - f.err = err - return - } - dist = uint32(sym) - } - - switch { - case dist < 4: - dist++ - case dist < maxNumDist: - nb := uint(dist-2) >> 1 - // have 1 bit in bottom of dist, need nb more. - extra := (dist & 1) << (nb & regSizeMaskUint32) - for f.nb < nb { - if err = f.moreBits(); err != nil { - if debugDecode { - fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - f.nb -= nb - dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra - default: - if debugDecode { - fmt.Println("dist too big:", dist, maxNumDist) - } - f.err = CorruptInputError(f.roffset) - return - } - - // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { - if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) - } - f.err = CorruptInputError(f.roffset) - return - } - - f.copyLen, f.copyDist = length, int(dist) - goto copyHistory - } - -copyHistory: - // Perform a backwards copy according to RFC section 3.2.3. - { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) - if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) - } - f.copyLen -= cnt - - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() - f.step = (*decompressor).huffmanBlockGeneric // We need to continue this work - f.stepState = stateDict - return - } - goto readLiteral - } -} - // Copy a single uncompressed data block from input to output. func (f *decompressor) dataBlock() { // Uncompressed. diff --git a/vendor/github.com/klauspost/compress/flate/inflate_gen.go b/vendor/github.com/klauspost/compress/flate/inflate_gen.go index cc6db27925..61342b6b88 100644 --- a/vendor/github.com/klauspost/compress/flate/inflate_gen.go +++ b/vendor/github.com/klauspost/compress/flate/inflate_gen.go @@ -21,6 +21,11 @@ func (f *decompressor) huffmanBytesBuffer() { ) fr := f.r.(*bytes.Buffer) + // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, + // but is smart enough to keep local variables in registers, so use nb and b, + // inline call to moreBits and reassign b,nb back to f on return. + fnb, fb, dict := f.nb, f.b, &f.dict + switch f.stepState { case stateInit: goto readLiteral @@ -39,41 +44,35 @@ readLiteral: // cases, the chunks slice will be 0 for the invalid sequence, leading it // satisfy the n == 0 check below. n := uint(f.hl.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b for { - for nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb f.err = noEOF(err) return } f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - chunk := f.hl.chunks[b&(huffmanNumChunks-1)] + chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] n = uint(chunk & huffmanCountMask) if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hl.linkMask] + chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] n = uint(chunk & huffmanCountMask) } - if n <= nb { + if n <= fnb { if n == 0 { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("huffsym: n==0") } f.err = CorruptInputError(f.roffset) return } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n v = int(chunk >> huffmanValueShift) break } @@ -83,15 +82,17 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBytesBuffer f.stepState = stateInit + f.b, f.nb = fb, fnb return } goto readLiteral case v == 256: + f.b, f.nb = fb, fnb f.finishBlock() return // otherwise, reference to older data @@ -101,9 +102,10 @@ readLiteral: val := decCodeToLen[(v - 257)] length = int(val.length) + 3 n := uint(val.extra) - for f.nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits n>0:", err) } @@ -111,25 +113,27 @@ readLiteral: return } f.roffset++ - f.b |= uint32(c) << f.nb - f.nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - length += int(f.b & uint32(1<<(n®SizeMaskUint32)-1)) - f.b >>= n & regSizeMaskUint32 - f.nb -= n + length += int(fb & bitMask32[n]) + fb >>= n & regSizeMaskUint32 + fnb -= n default: if debugDecode { fmt.Println(v, ">= maxNumLit") } f.err = CorruptInputError(f.roffset) + f.b, f.nb = fb, fnb return } var dist uint32 if f.hd == nil { - for f.nb < 5 { + for fnb < 5 { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits f.nb<5:", err) } @@ -137,12 +141,12 @@ readLiteral: return } f.roffset++ - f.b |= uint32(c) << f.nb - f.nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - dist = uint32(bits.Reverse8(uint8(f.b & 0x1F << 3))) - f.b >>= 5 - f.nb -= 5 + dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) + fb >>= 5 + fnb -= 5 } else { // Since a huffmanDecoder can be empty or be composed of a degenerate tree // with single element, huffSym must error on these two edge cases. In both @@ -152,38 +156,35 @@ readLiteral: // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b for { - for nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb f.err = noEOF(err) return } f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - chunk := f.hd.chunks[b&(huffmanNumChunks-1)] + chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] n = uint(chunk & huffmanCountMask) if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hd.linkMask] + chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] n = uint(chunk & huffmanCountMask) } - if n <= nb { + if n <= fnb { if n == 0 { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("huffsym: n==0") } f.err = CorruptInputError(f.roffset) return } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n dist = uint32(chunk >> huffmanValueShift) break } @@ -197,9 +198,10 @@ readLiteral: nb := uint(dist-2) >> 1 // have 1 bit in bottom of dist, need nb more. extra := (dist & 1) << (nb & regSizeMaskUint32) - for f.nb < nb { + for fnb < nb { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - f.nb -= nb + extra |= fb & bitMask32[nb] + fb >>= nb & regSizeMaskUint32 + fnb -= nb dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra + // slower: dist = bitMask32[nb+1] + 2 + extra default: + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("dist too big:", dist, maxNumDist) } @@ -223,9 +227,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { + f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -238,20 +243,22 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBytesBuffer // We need to continue this work f.stepState = stateDict + f.b, f.nb = fb, fnb return } goto readLiteral } + // Not reached } // Decode a single Huffman block from f. @@ -265,6 +272,11 @@ func (f *decompressor) huffmanBytesReader() { ) fr := f.r.(*bytes.Reader) + // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, + // but is smart enough to keep local variables in registers, so use nb and b, + // inline call to moreBits and reassign b,nb back to f on return. + fnb, fb, dict := f.nb, f.b, &f.dict + switch f.stepState { case stateInit: goto readLiteral @@ -283,41 +295,35 @@ readLiteral: // cases, the chunks slice will be 0 for the invalid sequence, leading it // satisfy the n == 0 check below. n := uint(f.hl.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b for { - for nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb f.err = noEOF(err) return } f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - chunk := f.hl.chunks[b&(huffmanNumChunks-1)] + chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] n = uint(chunk & huffmanCountMask) if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hl.linkMask] + chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] n = uint(chunk & huffmanCountMask) } - if n <= nb { + if n <= fnb { if n == 0 { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("huffsym: n==0") } f.err = CorruptInputError(f.roffset) return } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n v = int(chunk >> huffmanValueShift) break } @@ -327,15 +333,17 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBytesReader f.stepState = stateInit + f.b, f.nb = fb, fnb return } goto readLiteral case v == 256: + f.b, f.nb = fb, fnb f.finishBlock() return // otherwise, reference to older data @@ -345,9 +353,10 @@ readLiteral: val := decCodeToLen[(v - 257)] length = int(val.length) + 3 n := uint(val.extra) - for f.nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits n>0:", err) } @@ -355,25 +364,27 @@ readLiteral: return } f.roffset++ - f.b |= uint32(c) << f.nb - f.nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - length += int(f.b & uint32(1<<(n®SizeMaskUint32)-1)) - f.b >>= n & regSizeMaskUint32 - f.nb -= n + length += int(fb & bitMask32[n]) + fb >>= n & regSizeMaskUint32 + fnb -= n default: if debugDecode { fmt.Println(v, ">= maxNumLit") } f.err = CorruptInputError(f.roffset) + f.b, f.nb = fb, fnb return } var dist uint32 if f.hd == nil { - for f.nb < 5 { + for fnb < 5 { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits f.nb<5:", err) } @@ -381,12 +392,12 @@ readLiteral: return } f.roffset++ - f.b |= uint32(c) << f.nb - f.nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - dist = uint32(bits.Reverse8(uint8(f.b & 0x1F << 3))) - f.b >>= 5 - f.nb -= 5 + dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) + fb >>= 5 + fnb -= 5 } else { // Since a huffmanDecoder can be empty or be composed of a degenerate tree // with single element, huffSym must error on these two edge cases. In both @@ -396,38 +407,35 @@ readLiteral: // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b for { - for nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb f.err = noEOF(err) return } f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - chunk := f.hd.chunks[b&(huffmanNumChunks-1)] + chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] n = uint(chunk & huffmanCountMask) if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hd.linkMask] + chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] n = uint(chunk & huffmanCountMask) } - if n <= nb { + if n <= fnb { if n == 0 { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("huffsym: n==0") } f.err = CorruptInputError(f.roffset) return } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n dist = uint32(chunk >> huffmanValueShift) break } @@ -441,9 +449,10 @@ readLiteral: nb := uint(dist-2) >> 1 // have 1 bit in bottom of dist, need nb more. extra := (dist & 1) << (nb & regSizeMaskUint32) - for f.nb < nb { + for fnb < nb { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - f.nb -= nb + extra |= fb & bitMask32[nb] + fb >>= nb & regSizeMaskUint32 + fnb -= nb dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra + // slower: dist = bitMask32[nb+1] + 2 + extra default: + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("dist too big:", dist, maxNumDist) } @@ -467,9 +478,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { + f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -482,20 +494,22 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBytesReader // We need to continue this work f.stepState = stateDict + f.b, f.nb = fb, fnb return } goto readLiteral } + // Not reached } // Decode a single Huffman block from f. @@ -509,6 +523,11 @@ func (f *decompressor) huffmanBufioReader() { ) fr := f.r.(*bufio.Reader) + // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, + // but is smart enough to keep local variables in registers, so use nb and b, + // inline call to moreBits and reassign b,nb back to f on return. + fnb, fb, dict := f.nb, f.b, &f.dict + switch f.stepState { case stateInit: goto readLiteral @@ -527,41 +546,35 @@ readLiteral: // cases, the chunks slice will be 0 for the invalid sequence, leading it // satisfy the n == 0 check below. n := uint(f.hl.maxRead) - // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, - // but is smart enough to keep local variables in registers, so use nb and b, - // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b for { - for nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb f.err = noEOF(err) return } f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - chunk := f.hl.chunks[b&(huffmanNumChunks-1)] + chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] n = uint(chunk & huffmanCountMask) if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hl.linkMask] + chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] n = uint(chunk & huffmanCountMask) } - if n <= nb { + if n <= fnb { if n == 0 { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("huffsym: n==0") } f.err = CorruptInputError(f.roffset) return } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n v = int(chunk >> huffmanValueShift) break } @@ -571,15 +584,17 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBufioReader f.stepState = stateInit + f.b, f.nb = fb, fnb return } goto readLiteral case v == 256: + f.b, f.nb = fb, fnb f.finishBlock() return // otherwise, reference to older data @@ -589,9 +604,10 @@ readLiteral: val := decCodeToLen[(v - 257)] length = int(val.length) + 3 n := uint(val.extra) - for f.nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits n>0:", err) } @@ -599,25 +615,27 @@ readLiteral: return } f.roffset++ - f.b |= uint32(c) << f.nb - f.nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - length += int(f.b & uint32(1<<(n®SizeMaskUint32)-1)) - f.b >>= n & regSizeMaskUint32 - f.nb -= n + length += int(fb & bitMask32[n]) + fb >>= n & regSizeMaskUint32 + fnb -= n default: if debugDecode { fmt.Println(v, ">= maxNumLit") } f.err = CorruptInputError(f.roffset) + f.b, f.nb = fb, fnb return } var dist uint32 if f.hd == nil { - for f.nb < 5 { + for fnb < 5 { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits f.nb<5:", err) } @@ -625,12 +643,12 @@ readLiteral: return } f.roffset++ - f.b |= uint32(c) << f.nb - f.nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - dist = uint32(bits.Reverse8(uint8(f.b & 0x1F << 3))) - f.b >>= 5 - f.nb -= 5 + dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) + fb >>= 5 + fnb -= 5 } else { // Since a huffmanDecoder can be empty or be composed of a degenerate tree // with single element, huffSym must error on these two edge cases. In both @@ -640,38 +658,35 @@ readLiteral: // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b for { - for nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb f.err = noEOF(err) return } f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - chunk := f.hd.chunks[b&(huffmanNumChunks-1)] + chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] n = uint(chunk & huffmanCountMask) if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hd.linkMask] + chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] n = uint(chunk & huffmanCountMask) } - if n <= nb { + if n <= fnb { if n == 0 { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("huffsym: n==0") } f.err = CorruptInputError(f.roffset) return } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n dist = uint32(chunk >> huffmanValueShift) break } @@ -685,9 +700,10 @@ readLiteral: nb := uint(dist-2) >> 1 // have 1 bit in bottom of dist, need nb more. extra := (dist & 1) << (nb & regSizeMaskUint32) - for f.nb < nb { + for fnb < nb { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - f.nb -= nb + extra |= fb & bitMask32[nb] + fb >>= nb & regSizeMaskUint32 + fnb -= nb dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra + // slower: dist = bitMask32[nb+1] + 2 + extra default: + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("dist too big:", dist, maxNumDist) } @@ -711,9 +729,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { + f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -726,20 +745,22 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() f.step = (*decompressor).huffmanBufioReader // We need to continue this work f.stepState = stateDict + f.b, f.nb = fb, fnb return } goto readLiteral } + // Not reached } // Decode a single Huffman block from f. @@ -753,6 +774,11 @@ func (f *decompressor) huffmanStringsReader() { ) fr := f.r.(*strings.Reader) + // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, + // but is smart enough to keep local variables in registers, so use nb and b, + // inline call to moreBits and reassign b,nb back to f on return. + fnb, fb, dict := f.nb, f.b, &f.dict + switch f.stepState { case stateInit: goto readLiteral @@ -771,41 +797,286 @@ readLiteral: // cases, the chunks slice will be 0 for the invalid sequence, leading it // satisfy the n == 0 check below. n := uint(f.hl.maxRead) + for { + for fnb < n { + c, err := fr.ReadByte() + if err != nil { + f.b, f.nb = fb, fnb + f.err = noEOF(err) + return + } + f.roffset++ + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 + } + chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] + n = uint(chunk & huffmanCountMask) + if n > huffmanChunkBits { + chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] + n = uint(chunk & huffmanCountMask) + } + if n <= fnb { + if n == 0 { + f.b, f.nb = fb, fnb + if debugDecode { + fmt.Println("huffsym: n==0") + } + f.err = CorruptInputError(f.roffset) + return + } + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n + v = int(chunk >> huffmanValueShift) + break + } + } + } + + var length int + switch { + case v < 256: + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() + f.step = (*decompressor).huffmanStringsReader + f.stepState = stateInit + f.b, f.nb = fb, fnb + return + } + goto readLiteral + case v == 256: + f.b, f.nb = fb, fnb + f.finishBlock() + return + // otherwise, reference to older data + case v < 265: + length = v - (257 - 3) + case v < maxNumLit: + val := decCodeToLen[(v - 257)] + length = int(val.length) + 3 + n := uint(val.extra) + for fnb < n { + c, err := fr.ReadByte() + if err != nil { + f.b, f.nb = fb, fnb + if debugDecode { + fmt.Println("morebits n>0:", err) + } + f.err = err + return + } + f.roffset++ + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 + } + length += int(fb & bitMask32[n]) + fb >>= n & regSizeMaskUint32 + fnb -= n + default: + if debugDecode { + fmt.Println(v, ">= maxNumLit") + } + f.err = CorruptInputError(f.roffset) + f.b, f.nb = fb, fnb + return + } + + var dist uint32 + if f.hd == nil { + for fnb < 5 { + c, err := fr.ReadByte() + if err != nil { + f.b, f.nb = fb, fnb + if debugDecode { + fmt.Println("morebits f.nb<5:", err) + } + f.err = err + return + } + f.roffset++ + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 + } + dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) + fb >>= 5 + fnb -= 5 + } else { + // Since a huffmanDecoder can be empty or be composed of a degenerate tree + // with single element, huffSym must error on these two edge cases. In both + // cases, the chunks slice will be 0 for the invalid sequence, leading it + // satisfy the n == 0 check below. + n := uint(f.hd.maxRead) // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b for { - for nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb f.err = noEOF(err) return } f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - chunk := f.hl.chunks[b&(huffmanNumChunks-1)] + chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] n = uint(chunk & huffmanCountMask) if n > huffmanChunkBits { - chunk = f.hl.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hl.linkMask] + chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] n = uint(chunk & huffmanCountMask) } - if n <= nb { + if n <= fnb { if n == 0 { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("huffsym: n==0") } f.err = CorruptInputError(f.roffset) return } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n + dist = uint32(chunk >> huffmanValueShift) + break + } + } + } + + switch { + case dist < 4: + dist++ + case dist < maxNumDist: + nb := uint(dist-2) >> 1 + // have 1 bit in bottom of dist, need nb more. + extra := (dist & 1) << (nb & regSizeMaskUint32) + for fnb < nb { + c, err := fr.ReadByte() + if err != nil { + f.b, f.nb = fb, fnb + if debugDecode { + fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 + fnb -= nb + dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra + // slower: dist = bitMask32[nb+1] + 2 + extra + default: + f.b, f.nb = fb, fnb + if debugDecode { + fmt.Println("dist too big:", dist, maxNumDist) + } + f.err = CorruptInputError(f.roffset) + return + } + + // No check on length; encoding can be prescient. + if dist > uint32(dict.histSize()) { + f.b, f.nb = fb, fnb + if debugDecode { + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) + } + f.err = CorruptInputError(f.roffset) + return + } + + f.copyLen, f.copyDist = length, int(dist) + goto copyHistory + } + +copyHistory: + // Perform a backwards copy according to RFC section 3.2.3. + { + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) + if cnt == 0 { + cnt = dict.writeCopy(f.copyDist, f.copyLen) + } + f.copyLen -= cnt + + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() + f.step = (*decompressor).huffmanStringsReader // We need to continue this work + f.stepState = stateDict + f.b, f.nb = fb, fnb + return + } + goto readLiteral + } + // Not reached +} + +// Decode a single Huffman block from f. +// hl and hd are the Huffman states for the lit/length values +// and the distance values, respectively. If hd == nil, using the +// fixed distance encoding associated with fixed Huffman blocks. +func (f *decompressor) huffmanGenericReader() { + const ( + stateInit = iota // Zero value must be stateInit + stateDict + ) + fr := f.r.(Reader) + + // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, + // but is smart enough to keep local variables in registers, so use nb and b, + // inline call to moreBits and reassign b,nb back to f on return. + fnb, fb, dict := f.nb, f.b, &f.dict + + switch f.stepState { + case stateInit: + goto readLiteral + case stateDict: + goto copyHistory + } + +readLiteral: + // Read literal and/or (length, distance) according to RFC section 3.2.3. + { + var v int + { + // Inlined v, err := f.huffSym(f.hl) + // Since a huffmanDecoder can be empty or be composed of a degenerate tree + // with single element, huffSym must error on these two edge cases. In both + // cases, the chunks slice will be 0 for the invalid sequence, leading it + // satisfy the n == 0 check below. + n := uint(f.hl.maxRead) + for { + for fnb < n { + c, err := fr.ReadByte() + if err != nil { + f.b, f.nb = fb, fnb + f.err = noEOF(err) + return + } + f.roffset++ + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 + } + chunk := f.hl.chunks[fb&(huffmanNumChunks-1)] + n = uint(chunk & huffmanCountMask) + if n > huffmanChunkBits { + chunk = f.hl.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hl.linkMask] + n = uint(chunk & huffmanCountMask) + } + if n <= fnb { + if n == 0 { + f.b, f.nb = fb, fnb + if debugDecode { + fmt.Println("huffsym: n==0") + } + f.err = CorruptInputError(f.roffset) + return + } + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n v = int(chunk >> huffmanValueShift) break } @@ -815,15 +1086,17 @@ readLiteral: var length int switch { case v < 256: - f.dict.writeByte(byte(v)) - if f.dict.availWrite() == 0 { - f.toRead = f.dict.readFlush() - f.step = (*decompressor).huffmanStringsReader + dict.writeByte(byte(v)) + if dict.availWrite() == 0 { + f.toRead = dict.readFlush() + f.step = (*decompressor).huffmanGenericReader f.stepState = stateInit + f.b, f.nb = fb, fnb return } goto readLiteral case v == 256: + f.b, f.nb = fb, fnb f.finishBlock() return // otherwise, reference to older data @@ -833,9 +1106,10 @@ readLiteral: val := decCodeToLen[(v - 257)] length = int(val.length) + 3 n := uint(val.extra) - for f.nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits n>0:", err) } @@ -843,25 +1117,27 @@ readLiteral: return } f.roffset++ - f.b |= uint32(c) << f.nb - f.nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - length += int(f.b & uint32(1<<(n®SizeMaskUint32)-1)) - f.b >>= n & regSizeMaskUint32 - f.nb -= n + length += int(fb & bitMask32[n]) + fb >>= n & regSizeMaskUint32 + fnb -= n default: if debugDecode { fmt.Println(v, ">= maxNumLit") } f.err = CorruptInputError(f.roffset) + f.b, f.nb = fb, fnb return } var dist uint32 if f.hd == nil { - for f.nb < 5 { + for fnb < 5 { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits f.nb<5:", err) } @@ -869,12 +1145,12 @@ readLiteral: return } f.roffset++ - f.b |= uint32(c) << f.nb - f.nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - dist = uint32(bits.Reverse8(uint8(f.b & 0x1F << 3))) - f.b >>= 5 - f.nb -= 5 + dist = uint32(bits.Reverse8(uint8(fb & 0x1F << 3))) + fb >>= 5 + fnb -= 5 } else { // Since a huffmanDecoder can be empty or be composed of a degenerate tree // with single element, huffSym must error on these two edge cases. In both @@ -884,38 +1160,35 @@ readLiteral: // Optimization. Compiler isn't smart enough to keep f.b,f.nb in registers, // but is smart enough to keep local variables in registers, so use nb and b, // inline call to moreBits and reassign b,nb back to f on return. - nb, b := f.nb, f.b for { - for nb < n { + for fnb < n { c, err := fr.ReadByte() if err != nil { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb f.err = noEOF(err) return } f.roffset++ - b |= uint32(c) << (nb & regSizeMaskUint32) - nb += 8 + fb |= uint32(c) << (fnb & regSizeMaskUint32) + fnb += 8 } - chunk := f.hd.chunks[b&(huffmanNumChunks-1)] + chunk := f.hd.chunks[fb&(huffmanNumChunks-1)] n = uint(chunk & huffmanCountMask) if n > huffmanChunkBits { - chunk = f.hd.links[chunk>>huffmanValueShift][(b>>huffmanChunkBits)&f.hd.linkMask] + chunk = f.hd.links[chunk>>huffmanValueShift][(fb>>huffmanChunkBits)&f.hd.linkMask] n = uint(chunk & huffmanCountMask) } - if n <= nb { + if n <= fnb { if n == 0 { - f.b = b - f.nb = nb + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("huffsym: n==0") } f.err = CorruptInputError(f.roffset) return } - f.b = b >> (n & regSizeMaskUint32) - f.nb = nb - n + fb = fb >> (n & regSizeMaskUint32) + fnb = fnb - n dist = uint32(chunk >> huffmanValueShift) break } @@ -929,9 +1202,10 @@ readLiteral: nb := uint(dist-2) >> 1 // have 1 bit in bottom of dist, need nb more. extra := (dist & 1) << (nb & regSizeMaskUint32) - for f.nb < nb { + for fnb < nb { c, err := fr.ReadByte() if err != nil { + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("morebits f.nb>= nb & regSizeMaskUint32 - f.nb -= nb + extra |= fb & bitMask32[nb] + fb >>= nb & regSizeMaskUint32 + fnb -= nb dist = 1<<((nb+1)®SizeMaskUint32) + 1 + extra + // slower: dist = bitMask32[nb+1] + 2 + extra default: + f.b, f.nb = fb, fnb if debugDecode { fmt.Println("dist too big:", dist, maxNumDist) } @@ -955,9 +1231,10 @@ readLiteral: } // No check on length; encoding can be prescient. - if dist > uint32(f.dict.histSize()) { + if dist > uint32(dict.histSize()) { + f.b, f.nb = fb, fnb if debugDecode { - fmt.Println("dist > f.dict.histSize():", dist, f.dict.histSize()) + fmt.Println("dist > dict.histSize():", dist, dict.histSize()) } f.err = CorruptInputError(f.roffset) return @@ -970,20 +1247,22 @@ readLiteral: copyHistory: // Perform a backwards copy according to RFC section 3.2.3. { - cnt := f.dict.tryWriteCopy(f.copyDist, f.copyLen) + cnt := dict.tryWriteCopy(f.copyDist, f.copyLen) if cnt == 0 { - cnt = f.dict.writeCopy(f.copyDist, f.copyLen) + cnt = dict.writeCopy(f.copyDist, f.copyLen) } f.copyLen -= cnt - if f.dict.availWrite() == 0 || f.copyLen > 0 { - f.toRead = f.dict.readFlush() - f.step = (*decompressor).huffmanStringsReader // We need to continue this work + if dict.availWrite() == 0 || f.copyLen > 0 { + f.toRead = dict.readFlush() + f.step = (*decompressor).huffmanGenericReader // We need to continue this work f.stepState = stateDict + f.b, f.nb = fb, fnb return } goto readLiteral } + // Not reached } func (f *decompressor) huffmanBlockDecoder() func() { @@ -996,7 +1275,9 @@ func (f *decompressor) huffmanBlockDecoder() func() { return f.huffmanBufioReader case *strings.Reader: return f.huffmanStringsReader + case Reader: + return f.huffmanGenericReader default: - return f.huffmanBlockGeneric + return f.huffmanGenericReader } } diff --git a/vendor/github.com/klauspost/compress/flate/level1.go b/vendor/github.com/klauspost/compress/flate/level1.go index 1e5eea3968..0f14f8d63b 100644 --- a/vendor/github.com/klauspost/compress/flate/level1.go +++ b/vendor/github.com/klauspost/compress/flate/level1.go @@ -1,6 +1,10 @@ package flate -import "fmt" +import ( + "encoding/binary" + "fmt" + "math/bits" +) // fastGen maintains the table for matches, // and the previous byte block for level 2. @@ -116,7 +120,32 @@ func (e *fastEncL1) Encode(dst *tokens, src []byte) { // Extend the 4-byte match as long as possible. t := candidate.offset - e.cur - l := e.matchlenLong(s+4, t+4, src) + 4 + var l = int32(4) + if false { + l = e.matchlenLong(s+4, t+4, src) + 4 + } else { + // inlined: + a := src[s+4:] + b := src[t+4:] + for len(a) >= 8 { + if diff := binary.LittleEndian.Uint64(a) ^ binary.LittleEndian.Uint64(b); diff != 0 { + l += int32(bits.TrailingZeros64(diff) >> 3) + break + } + l += 8 + a = a[8:] + b = b[8:] + } + if len(a) < 8 { + b = b[:len(a)] + for i := range a { + if a[i] != b[i] { + break + } + l++ + } + } + } // Extend backwards for t > 0 && s > nextEmit && src[t-1] == src[s-1] { @@ -125,11 +154,43 @@ func (e *fastEncL1) Encode(dst *tokens, src []byte) { l++ } if nextEmit < s { - emitLiteral(dst, src[nextEmit:s]) + if false { + emitLiteral(dst, src[nextEmit:s]) + } else { + for _, v := range src[nextEmit:s] { + dst.tokens[dst.n] = token(v) + dst.litHist[v]++ + dst.n++ + } + } } // Save the match found - dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) + if false { + dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) + } else { + // Inlined... + xoffset := uint32(s - t - baseMatchOffset) + xlength := l + oc := offsetCode(xoffset) + xoffset |= oc << 16 + for xlength > 0 { + xl := xlength + if xl > 258 { + if xl > 258+baseMatchLength { + xl = 258 + } else { + xl = 258 - baseMatchLength + } + } + xlength -= xl + xl -= baseMatchLength + dst.extraHist[lengthCodes1[uint8(xl)]]++ + dst.offHist[oc]++ + dst.tokens[dst.n] = token(matchType | uint32(xl)<= s { diff --git a/vendor/github.com/klauspost/compress/flate/level2.go b/vendor/github.com/klauspost/compress/flate/level2.go index 234c4389ab..8603fbd55a 100644 --- a/vendor/github.com/klauspost/compress/flate/level2.go +++ b/vendor/github.com/klauspost/compress/flate/level2.go @@ -134,7 +134,15 @@ func (e *fastEncL2) Encode(dst *tokens, src []byte) { l++ } if nextEmit < s { - emitLiteral(dst, src[nextEmit:s]) + if false { + emitLiteral(dst, src[nextEmit:s]) + } else { + for _, v := range src[nextEmit:s] { + dst.tokens[dst.n] = token(v) + dst.litHist[v]++ + dst.n++ + } + } } dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) diff --git a/vendor/github.com/klauspost/compress/flate/level3.go b/vendor/github.com/klauspost/compress/flate/level3.go index c22b4244a5..039639f898 100644 --- a/vendor/github.com/klauspost/compress/flate/level3.go +++ b/vendor/github.com/klauspost/compress/flate/level3.go @@ -5,7 +5,7 @@ import "fmt" // fastEncL3 type fastEncL3 struct { fastGen - table [tableSize]tableEntryPrev + table [1 << 16]tableEntryPrev } // Encode uses a similar algorithm to level 2, will check up to two candidates. @@ -13,6 +13,8 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) { const ( inputMargin = 8 - 1 minNonLiteralBlockSize = 1 + 1 + inputMargin + tableBits = 16 + tableSize = 1 << tableBits ) if debugDeflate && e.cur < 0 { @@ -73,7 +75,7 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) { nextS := s var candidate tableEntry for { - nextHash := hash(cv) + nextHash := hash4u(cv, tableBits) s = nextS nextS = s + 1 + (s-nextEmit)>>skipLog if nextS > sLimit { @@ -141,7 +143,15 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) { l++ } if nextEmit < s { - emitLiteral(dst, src[nextEmit:s]) + if false { + emitLiteral(dst, src[nextEmit:s]) + } else { + for _, v := range src[nextEmit:s] { + dst.tokens[dst.n] = token(v) + dst.litHist[v]++ + dst.n++ + } + } } dst.AddMatchLong(l, uint32(s-t-baseMatchOffset)) @@ -156,7 +166,7 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) { // Index first pair after match end. if int(t+4) < len(src) && t > 0 { cv := load3232(src, t) - nextHash := hash(cv) + nextHash := hash4u(cv, tableBits) e.table[nextHash] = tableEntryPrev{ Prev: e.table[nextHash].Cur, Cur: tableEntry{offset: e.cur + t}, @@ -165,30 +175,31 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) { goto emitRemainder } - // We could immediately start working at s now, but to improve - // compression we first update the hash table at s-3 to s. - x := load6432(src, s-3) - prevHash := hash(uint32(x)) - e.table[prevHash] = tableEntryPrev{ - Prev: e.table[prevHash].Cur, - Cur: tableEntry{offset: e.cur + s - 3}, + // Store every 5th hash in-between. + for i := s - l + 2; i < s-5; i += 5 { + nextHash := hash4u(load3232(src, i), tableBits) + e.table[nextHash] = tableEntryPrev{ + Prev: e.table[nextHash].Cur, + Cur: tableEntry{offset: e.cur + i}} } - x >>= 8 - prevHash = hash(uint32(x)) + // We could immediately start working at s now, but to improve + // compression we first update the hash table at s-2 to s. + x := load6432(src, s-2) + prevHash := hash4u(uint32(x), tableBits) e.table[prevHash] = tableEntryPrev{ Prev: e.table[prevHash].Cur, Cur: tableEntry{offset: e.cur + s - 2}, } x >>= 8 - prevHash = hash(uint32(x)) + prevHash = hash4u(uint32(x), tableBits) e.table[prevHash] = tableEntryPrev{ Prev: e.table[prevHash].Cur, Cur: tableEntry{offset: e.cur + s - 1}, } x >>= 8 - currHash := hash(uint32(x)) + currHash := hash4u(uint32(x), tableBits) candidates := e.table[currHash] cv = uint32(x) e.table[currHash] = tableEntryPrev{ @@ -200,15 +211,15 @@ func (e *fastEncL3) Encode(dst *tokens, src []byte) { candidate = candidates.Cur minOffset := e.cur + s - (maxMatchOffset - 4) - if candidate.offset > minOffset && cv != load3232(src, candidate.offset-e.cur) { - // We only check if value mismatches. - // Offset will always be invalid in other cases. + if candidate.offset > minOffset { + if cv == load3232(src, candidate.offset-e.cur) { + // Found a match... + continue + } candidate = candidates.Prev if candidate.offset > minOffset && cv == load3232(src, candidate.offset-e.cur) { - offset := s - (candidate.offset - e.cur) - if offset <= maxMatchOffset { - continue - } + // Match at prev... + continue } } cv = uint32(x >> 8) diff --git a/vendor/github.com/klauspost/compress/flate/level4.go b/vendor/github.com/klauspost/compress/flate/level4.go index e62f0c02b1..1cbffa1aef 100644 --- a/vendor/github.com/klauspost/compress/flate/level4.go +++ b/vendor/github.com/klauspost/compress/flate/level4.go @@ -135,7 +135,15 @@ func (e *fastEncL4) Encode(dst *tokens, src []byte) { l++ } if nextEmit < s { - emitLiteral(dst, src[nextEmit:s]) + if false { + emitLiteral(dst, src[nextEmit:s]) + } else { + for _, v := range src[nextEmit:s] { + dst.tokens[dst.n] = token(v) + dst.litHist[v]++ + dst.n++ + } + } } if debugDeflate { if t >= s { diff --git a/vendor/github.com/klauspost/compress/flate/level5.go b/vendor/github.com/klauspost/compress/flate/level5.go index 293a3a320b..4b97576bd3 100644 --- a/vendor/github.com/klauspost/compress/flate/level5.go +++ b/vendor/github.com/klauspost/compress/flate/level5.go @@ -210,7 +210,15 @@ func (e *fastEncL5) Encode(dst *tokens, src []byte) { l++ } if nextEmit < s { - emitLiteral(dst, src[nextEmit:s]) + if false { + emitLiteral(dst, src[nextEmit:s]) + } else { + for _, v := range src[nextEmit:s] { + dst.tokens[dst.n] = token(v) + dst.litHist[v]++ + dst.n++ + } + } } if debugDeflate { if t >= s { diff --git a/vendor/github.com/klauspost/compress/flate/level6.go b/vendor/github.com/klauspost/compress/flate/level6.go index a709977ec4..62888edf3c 100644 --- a/vendor/github.com/klauspost/compress/flate/level6.go +++ b/vendor/github.com/klauspost/compress/flate/level6.go @@ -243,7 +243,15 @@ func (e *fastEncL6) Encode(dst *tokens, src []byte) { l++ } if nextEmit < s { - emitLiteral(dst, src[nextEmit:s]) + if false { + emitLiteral(dst, src[nextEmit:s]) + } else { + for _, v := range src[nextEmit:s] { + dst.tokens[dst.n] = token(v) + dst.litHist[v]++ + dst.n++ + } + } } if false { if t >= s { diff --git a/vendor/github.com/klauspost/compress/flate/stateless.go b/vendor/github.com/klauspost/compress/flate/stateless.go index 53e8991246..544162a431 100644 --- a/vendor/github.com/klauspost/compress/flate/stateless.go +++ b/vendor/github.com/klauspost/compress/flate/stateless.go @@ -249,7 +249,15 @@ func statelessEnc(dst *tokens, src []byte, startAt int16) { l++ } if nextEmit < s { - emitLiteral(dst, src[nextEmit:s]) + if false { + emitLiteral(dst, src[nextEmit:s]) + } else { + for _, v := range src[nextEmit:s] { + dst.tokens[dst.n] = token(v) + dst.litHist[v]++ + dst.n++ + } + } } // Save the match found diff --git a/vendor/github.com/klauspost/compress/flate/token.go b/vendor/github.com/klauspost/compress/flate/token.go index 3a9618ee19..d818790c13 100644 --- a/vendor/github.com/klauspost/compress/flate/token.go +++ b/vendor/github.com/klauspost/compress/flate/token.go @@ -13,11 +13,10 @@ import ( ) const ( - // From top - // 2 bits: type 0 = literal 1=EOF 2=Match 3=Unused - // 8 bits: xlength = length - MIN_MATCH_LENGTH - // 5 bits offsetcode - // 16 bits xoffset = offset - MIN_OFFSET_SIZE, or literal + // bits 0-16 xoffset = offset - MIN_OFFSET_SIZE, or literal - 16 bits + // bits 16-22 offsetcode - 5 bits + // bits 22-30 xlength = length - MIN_MATCH_LENGTH - 8 bits + // bits 30-32 type 0 = literal 1=EOF 2=Match 3=Unused - 2 bits lengthShift = 22 offsetMask = 1< 258 { // We need to have at least baseMatchLength left over for next loop. - xl = 258 - baseMatchLength + if xl > 258+baseMatchLength { + xl = 258 + } else { + xl = 258 - baseMatchLength + } } xlength -= xl xl -= baseMatchLength t.extraHist[lengthCodes1[uint8(xl)]]++ - t.offHist[oc]++ + t.offHist[oc&31]++ t.tokens[t.n] = token(matchType | uint32(xl)<> lengthShift) } -// The code is never more than 8 bits, but is returned as uint32 for convenience. -func lengthCode(len uint8) uint32 { return uint32(lengthCodes[len]) } +// Convert length to code. +func lengthCode(len uint8) uint8 { return lengthCodes[len] } // Returns the offset code corresponding to a specific offset func offsetCode(off uint32) uint32 { diff --git a/vendor/github.com/klauspost/compress/go.mod b/vendor/github.com/klauspost/compress/go.mod deleted file mode 100644 index 5aa64a436a..0000000000 --- a/vendor/github.com/klauspost/compress/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/klauspost/compress - -go 1.15 diff --git a/vendor/github.com/klauspost/compress/go.sum b/vendor/github.com/klauspost/compress/go.sum deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/vendor/github.com/klauspost/compress/huff0/bitreader.go b/vendor/github.com/klauspost/compress/huff0/bitreader.go index a4979e8868..504a7be9da 100644 --- a/vendor/github.com/klauspost/compress/huff0/bitreader.go +++ b/vendor/github.com/klauspost/compress/huff0/bitreader.go @@ -8,115 +8,10 @@ package huff0 import ( "encoding/binary" "errors" + "fmt" "io" ) -// bitReader reads a bitstream in reverse. -// The last set bit indicates the start of the stream and is used -// for aligning the input. -type bitReader struct { - in []byte - off uint // next byte to read is at in[off - 1] - value uint64 - bitsRead uint8 -} - -// init initializes and resets the bit reader. -func (b *bitReader) init(in []byte) error { - if len(in) < 1 { - return errors.New("corrupt stream: too short") - } - b.in = in - b.off = uint(len(in)) - // The highest bit of the last byte indicates where to start - v := in[len(in)-1] - if v == 0 { - return errors.New("corrupt stream, did not find end of stream") - } - b.bitsRead = 64 - b.value = 0 - if len(in) >= 8 { - b.fillFastStart() - } else { - b.fill() - b.fill() - } - b.bitsRead += 8 - uint8(highBit32(uint32(v))) - return nil -} - -// peekBitsFast requires that at least one bit is requested every time. -// There are no checks if the buffer is filled. -func (b *bitReader) peekBitsFast(n uint8) uint16 { - const regMask = 64 - 1 - v := uint16((b.value << (b.bitsRead & regMask)) >> ((regMask + 1 - n) & regMask)) - return v -} - -// fillFast() will make sure at least 32 bits are available. -// There must be at least 4 bytes available. -func (b *bitReader) fillFast() { - if b.bitsRead < 32 { - return - } - - // 2 bounds checks. - v := b.in[b.off-4 : b.off] - v = v[:4] - low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - b.value = (b.value << 32) | uint64(low) - b.bitsRead -= 32 - b.off -= 4 -} - -func (b *bitReader) advance(n uint8) { - b.bitsRead += n -} - -// fillFastStart() assumes the bitreader is empty and there is at least 8 bytes to read. -func (b *bitReader) fillFastStart() { - // Do single re-slice to avoid bounds checks. - b.value = binary.LittleEndian.Uint64(b.in[b.off-8:]) - b.bitsRead = 0 - b.off -= 8 -} - -// fill() will make sure at least 32 bits are available. -func (b *bitReader) fill() { - if b.bitsRead < 32 { - return - } - if b.off > 4 { - v := b.in[b.off-4:] - v = v[:4] - low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - b.value = (b.value << 32) | uint64(low) - b.bitsRead -= 32 - b.off -= 4 - return - } - for b.off > 0 { - b.value = (b.value << 8) | uint64(b.in[b.off-1]) - b.bitsRead -= 8 - b.off-- - } -} - -// finished returns true if all bits have been read from the bit stream. -func (b *bitReader) finished() bool { - return b.off == 0 && b.bitsRead >= 64 -} - -// close the bitstream and returns an error if out-of-buffer reads occurred. -func (b *bitReader) close() error { - // Release reference. - b.in = nil - if b.bitsRead > 64 { - return io.ErrUnexpectedEOF - } - return nil -} - // bitReader reads a bitstream in reverse. // The last set bit indicates the start of the stream and is used // for aligning the input. @@ -213,10 +108,17 @@ func (b *bitReaderBytes) finished() bool { return b.off == 0 && b.bitsRead >= 64 } +func (b *bitReaderBytes) remaining() uint { + return b.off*8 + uint(64-b.bitsRead) +} + // close the bitstream and returns an error if out-of-buffer reads occurred. func (b *bitReaderBytes) close() error { // Release reference. b.in = nil + if b.remaining() > 0 { + return fmt.Errorf("corrupt input: %d bits remain on stream", b.remaining()) + } if b.bitsRead > 64 { return io.ErrUnexpectedEOF } @@ -313,15 +215,17 @@ func (b *bitReaderShifted) fill() { } } -// finished returns true if all bits have been read from the bit stream. -func (b *bitReaderShifted) finished() bool { - return b.off == 0 && b.bitsRead >= 64 +func (b *bitReaderShifted) remaining() uint { + return b.off*8 + uint(64-b.bitsRead) } // close the bitstream and returns an error if out-of-buffer reads occurred. func (b *bitReaderShifted) close() error { // Release reference. b.in = nil + if b.remaining() > 0 { + return fmt.Errorf("corrupt input: %d bits remain on stream", b.remaining()) + } if b.bitsRead > 64 { return io.ErrUnexpectedEOF } diff --git a/vendor/github.com/klauspost/compress/huff0/bitwriter.go b/vendor/github.com/klauspost/compress/huff0/bitwriter.go index 6bce4e87d4..ec71f7a349 100644 --- a/vendor/github.com/klauspost/compress/huff0/bitwriter.go +++ b/vendor/github.com/klauspost/compress/huff0/bitwriter.go @@ -5,8 +5,6 @@ package huff0 -import "fmt" - // bitWriter will write bits. // First bit will be LSB of the first byte of output. type bitWriter struct { @@ -23,14 +21,6 @@ var bitMask16 = [32]uint16{ 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF} /* up to 16 bits */ -// addBits16NC will add up to 16 bits. -// It will not check if there is space for them, -// so the caller must ensure that it has flushed recently. -func (b *bitWriter) addBits16NC(value uint16, bits uint8) { - b.bitContainer |= uint64(value&bitMask16[bits&31]) << (b.nBits & 63) - b.nBits += bits -} - // addBits16Clean will add up to 16 bits. value may not contain more set bits than indicated. // It will not check if there is space for them, so the caller must ensure that it has flushed recently. func (b *bitWriter) addBits16Clean(value uint16, bits uint8) { @@ -70,104 +60,6 @@ func (b *bitWriter) encTwoSymbols(ct cTable, av, bv byte) { b.nBits += encA.nBits + encB.nBits } -// addBits16ZeroNC will add up to 16 bits. -// It will not check if there is space for them, -// so the caller must ensure that it has flushed recently. -// This is fastest if bits can be zero. -func (b *bitWriter) addBits16ZeroNC(value uint16, bits uint8) { - if bits == 0 { - return - } - value <<= (16 - bits) & 15 - value >>= (16 - bits) & 15 - b.bitContainer |= uint64(value) << (b.nBits & 63) - b.nBits += bits -} - -// flush will flush all pending full bytes. -// There will be at least 56 bits available for writing when this has been called. -// Using flush32 is faster, but leaves less space for writing. -func (b *bitWriter) flush() { - v := b.nBits >> 3 - switch v { - case 0: - return - case 1: - b.out = append(b.out, - byte(b.bitContainer), - ) - b.bitContainer >>= 1 << 3 - case 2: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - ) - b.bitContainer >>= 2 << 3 - case 3: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - ) - b.bitContainer >>= 3 << 3 - case 4: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - ) - b.bitContainer >>= 4 << 3 - case 5: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - byte(b.bitContainer>>32), - ) - b.bitContainer >>= 5 << 3 - case 6: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - byte(b.bitContainer>>32), - byte(b.bitContainer>>40), - ) - b.bitContainer >>= 6 << 3 - case 7: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - byte(b.bitContainer>>32), - byte(b.bitContainer>>40), - byte(b.bitContainer>>48), - ) - b.bitContainer >>= 7 << 3 - case 8: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - byte(b.bitContainer>>32), - byte(b.bitContainer>>40), - byte(b.bitContainer>>48), - byte(b.bitContainer>>56), - ) - b.bitContainer = 0 - b.nBits = 0 - return - default: - panic(fmt.Errorf("bits (%d) > 64", b.nBits)) - } - b.nBits &= 7 -} - // flush32 will flush out, so there are at least 32 bits available for writing. func (b *bitWriter) flush32() { if b.nBits < 32 { @@ -201,10 +93,3 @@ func (b *bitWriter) close() error { b.flushAlign() return nil } - -// reset and continue writing by appending to out. -func (b *bitWriter) reset(out []byte) { - b.bitContainer = 0 - b.nBits = 0 - b.out = out -} diff --git a/vendor/github.com/klauspost/compress/huff0/bytereader.go b/vendor/github.com/klauspost/compress/huff0/bytereader.go index 50bcdf6ea9..4dcab8d232 100644 --- a/vendor/github.com/klauspost/compress/huff0/bytereader.go +++ b/vendor/github.com/klauspost/compress/huff0/bytereader.go @@ -20,11 +20,6 @@ func (b *byteReader) init(in []byte) { b.off = 0 } -// advance the stream b n bytes. -func (b *byteReader) advance(n uint) { - b.off += int(n) -} - // Int32 returns a little endian int32 starting at current offset. func (b byteReader) Int32() int32 { v3 := int32(b.b[b.off+3]) @@ -43,11 +38,6 @@ func (b byteReader) Uint32() uint32 { return (v3 << 24) | (v2 << 16) | (v1 << 8) | v0 } -// unread returns the unread portion of the input. -func (b byteReader) unread() []byte { - return b.b[b.off:] -} - // remain will return the number of bytes remaining. func (b byteReader) remain() int { return len(b.b) - b.off diff --git a/vendor/github.com/klauspost/compress/huff0/compress.go b/vendor/github.com/klauspost/compress/huff0/compress.go index 8323dc0538..4d14542fac 100644 --- a/vendor/github.com/klauspost/compress/huff0/compress.go +++ b/vendor/github.com/klauspost/compress/huff0/compress.go @@ -2,6 +2,7 @@ package huff0 import ( "fmt" + "math" "runtime" "sync" ) @@ -289,6 +290,10 @@ func (s *Scratch) compress4X(src []byte) ([]byte, error) { if err != nil { return nil, err } + if len(s.Out)-idx > math.MaxUint16 { + // We cannot store the size in the jump table + return nil, ErrIncompressible + } // Write compressed length as little endian before block. if i < 3 { // Last length is not written. @@ -332,6 +337,10 @@ func (s *Scratch) compress4Xp(src []byte) ([]byte, error) { return nil, errs[i] } o := s.tmpOut[i] + if len(o) > math.MaxUint16 { + // We cannot store the size in the jump table + return nil, ErrIncompressible + } // Write compressed length as little endian before block. if i < 3 { // Last length is not written. @@ -395,6 +404,7 @@ func (s *Scratch) canUseTable(c cTable) bool { return true } +//lint:ignore U1000 used for debugging func (s *Scratch) validateTable(c cTable) bool { if len(c) < int(s.symbolLen) { return false diff --git a/vendor/github.com/klauspost/compress/huff0/decompress.go b/vendor/github.com/klauspost/compress/huff0/decompress.go index 2a06bd1a7e..c0c48bd707 100644 --- a/vendor/github.com/klauspost/compress/huff0/decompress.go +++ b/vendor/github.com/klauspost/compress/huff0/decompress.go @@ -4,13 +4,13 @@ import ( "errors" "fmt" "io" + "sync" "github.com/klauspost/compress/fse" ) type dTable struct { single []dEntrySingle - double []dEntryDouble } // single-symbols decoding @@ -18,13 +18,6 @@ type dEntrySingle struct { entry uint16 } -// double-symbols decoding -type dEntryDouble struct { - seq [4]byte - nBits uint8 - len uint8 -} - // Uses special code for all tables that are < 8 bits. const use8BitTables = true @@ -34,7 +27,7 @@ const use8BitTables = true // If no Scratch is provided a new one is allocated. // The returned Scratch can be used for encoding or decoding input using this table. func ReadTable(in []byte, s *Scratch) (s2 *Scratch, remain []byte, err error) { - s, err = s.prepare(in) + s, err = s.prepare(nil) if err != nil { return s, nil, err } @@ -216,6 +209,7 @@ func (s *Scratch) Decoder() *Decoder { return &Decoder{ dt: s.dt, actualTableLog: s.actualTableLog, + bufs: &s.decPool, } } @@ -223,103 +217,15 @@ func (s *Scratch) Decoder() *Decoder { type Decoder struct { dt dTable actualTableLog uint8 + bufs *sync.Pool } -// Decompress1X will decompress a 1X encoded stream. -// The cap of the output buffer will be the maximum decompressed size. -// The length of the supplied input must match the end of a block exactly. -func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) { - if len(d.dt.single) == 0 { - return nil, errors.New("no table loaded") - } - if use8BitTables && d.actualTableLog <= 8 { - return d.decompress1X8Bit(dst, src) - } - var br bitReaderShifted - err := br.init(src) - if err != nil { - return dst, err +func (d *Decoder) buffer() *[4][256]byte { + buf, ok := d.bufs.Get().(*[4][256]byte) + if ok { + return buf } - maxDecodedSize := cap(dst) - dst = dst[:0] - - // Avoid bounds check by always having full sized table. - const tlSize = 1 << tableLogMax - const tlMask = tlSize - 1 - dt := d.dt.single[:tlSize] - - // Use temp table to avoid bound checks/append penalty. - var buf [256]byte - var off uint8 - - for br.off >= 8 { - br.fillFast() - v := dt[br.peekBitsFast(d.actualTableLog)&tlMask] - br.advance(uint8(v.entry)) - buf[off+0] = uint8(v.entry >> 8) - - v = dt[br.peekBitsFast(d.actualTableLog)&tlMask] - br.advance(uint8(v.entry)) - buf[off+1] = uint8(v.entry >> 8) - - // Refill - br.fillFast() - - v = dt[br.peekBitsFast(d.actualTableLog)&tlMask] - br.advance(uint8(v.entry)) - buf[off+2] = uint8(v.entry >> 8) - - v = dt[br.peekBitsFast(d.actualTableLog)&tlMask] - br.advance(uint8(v.entry)) - buf[off+3] = uint8(v.entry >> 8) - - off += 4 - if off == 0 { - if len(dst)+256 > maxDecodedSize { - br.close() - return nil, ErrMaxDecodedSizeExceeded - } - dst = append(dst, buf[:]...) - } - } - - if len(dst)+int(off) > maxDecodedSize { - br.close() - return nil, ErrMaxDecodedSizeExceeded - } - dst = append(dst, buf[:off]...) - - // br < 8, so uint8 is fine - bitsLeft := uint8(br.off)*8 + 64 - br.bitsRead - for bitsLeft > 0 { - br.fill() - if false && br.bitsRead >= 32 { - if br.off >= 4 { - v := br.in[br.off-4:] - v = v[:4] - low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - br.value = (br.value << 32) | uint64(low) - br.bitsRead -= 32 - br.off -= 4 - } else { - for br.off > 0 { - br.value = (br.value << 8) | uint64(br.in[br.off-1]) - br.bitsRead -= 8 - br.off-- - } - } - } - if len(dst) >= maxDecodedSize { - br.close() - return nil, ErrMaxDecodedSizeExceeded - } - v := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask] - nBits := uint8(v.entry) - br.advance(nBits) - bitsLeft -= nBits - dst = append(dst, uint8(v.entry>>8)) - } - return dst, br.close() + return &[4][256]byte{} } // decompress1X8Bit will decompress a 1X encoded stream with tablelog <= 8. @@ -341,7 +247,8 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { dt := d.dt.single[:256] // Use temp table to avoid bound checks/append penalty. - var buf [256]byte + bufs := d.buffer() + buf := &bufs[0] var off uint8 switch d.actualTableLog { @@ -369,6 +276,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { if off == 0 { if len(dst)+256 > maxDecodedSize { br.close() + d.bufs.Put(bufs) return nil, ErrMaxDecodedSizeExceeded } dst = append(dst, buf[:]...) @@ -398,6 +306,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { if off == 0 { if len(dst)+256 > maxDecodedSize { br.close() + d.bufs.Put(bufs) return nil, ErrMaxDecodedSizeExceeded } dst = append(dst, buf[:]...) @@ -426,6 +335,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { off += 4 if off == 0 { if len(dst)+256 > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -455,6 +365,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { off += 4 if off == 0 { if len(dst)+256 > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -484,6 +395,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { off += 4 if off == 0 { if len(dst)+256 > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -513,6 +425,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { off += 4 if off == 0 { if len(dst)+256 > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -542,6 +455,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { off += 4 if off == 0 { if len(dst)+256 > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -571,6 +485,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { off += 4 if off == 0 { if len(dst)+256 > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -578,10 +493,12 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { } } default: + d.bufs.Put(bufs) return nil, fmt.Errorf("invalid tablelog: %d", d.actualTableLog) } if len(dst)+int(off) > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -601,6 +518,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { } if len(dst) >= maxDecodedSize { br.close() + d.bufs.Put(bufs) return nil, ErrMaxDecodedSizeExceeded } v := dt[br.peekByteFast()>>shift] @@ -609,6 +527,7 @@ func (d *Decoder) decompress1X8Bit(dst, src []byte) ([]byte, error) { bitsLeft -= int8(nBits) dst = append(dst, uint8(v.entry>>8)) } + d.bufs.Put(bufs) return dst, br.close() } @@ -628,7 +547,8 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) { dt := d.dt.single[:256] // Use temp table to avoid bound checks/append penalty. - var buf [256]byte + bufs := d.buffer() + buf := &bufs[0] var off uint8 const shift = 56 @@ -655,6 +575,7 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) { off += 4 if off == 0 { if len(dst)+256 > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -663,6 +584,7 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) { } if len(dst)+int(off) > maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -679,6 +601,7 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) { } } if len(dst) >= maxDecodedSize { + d.bufs.Put(bufs) br.close() return nil, ErrMaxDecodedSizeExceeded } @@ -688,195 +611,10 @@ func (d *Decoder) decompress1X8BitExactly(dst, src []byte) ([]byte, error) { bitsLeft -= int8(nBits) dst = append(dst, uint8(v.entry>>8)) } + d.bufs.Put(bufs) return dst, br.close() } -// Decompress4X will decompress a 4X encoded stream. -// The length of the supplied input must match the end of a block exactly. -// The *capacity* of the dst slice must match the destination size of -// the uncompressed data exactly. -func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { - if len(d.dt.single) == 0 { - return nil, errors.New("no table loaded") - } - if len(src) < 6+(4*1) { - return nil, errors.New("input too small") - } - if use8BitTables && d.actualTableLog <= 8 { - return d.decompress4X8bit(dst, src) - } - - var br [4]bitReaderShifted - start := 6 - for i := 0; i < 3; i++ { - length := int(src[i*2]) | (int(src[i*2+1]) << 8) - if start+length >= len(src) { - return nil, errors.New("truncated input (or invalid offset)") - } - err := br[i].init(src[start : start+length]) - if err != nil { - return nil, err - } - start += length - } - err := br[3].init(src[start:]) - if err != nil { - return nil, err - } - - // destination, offset to match first output - dstSize := cap(dst) - dst = dst[:dstSize] - out := dst - dstEvery := (dstSize + 3) / 4 - - const tlSize = 1 << tableLogMax - const tlMask = tlSize - 1 - single := d.dt.single[:tlSize] - - // Use temp table to avoid bound checks/append penalty. - var buf [256]byte - var off uint8 - var decoded int - - // Decode 2 values from each decoder/loop. - const bufoff = 256 / 4 - for { - if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 { - break - } - - { - const stream = 0 - const stream2 = 1 - br[stream].fillFast() - br[stream2].fillFast() - - val := br[stream].peekBitsFast(d.actualTableLog) - val2 := br[stream2].peekBitsFast(d.actualTableLog) - v := single[val&tlMask] - v2 := single[val2&tlMask] - br[stream].advance(uint8(v.entry)) - br[stream2].advance(uint8(v2.entry)) - buf[off+bufoff*stream] = uint8(v.entry >> 8) - buf[off+bufoff*stream2] = uint8(v2.entry >> 8) - - val = br[stream].peekBitsFast(d.actualTableLog) - val2 = br[stream2].peekBitsFast(d.actualTableLog) - v = single[val&tlMask] - v2 = single[val2&tlMask] - br[stream].advance(uint8(v.entry)) - br[stream2].advance(uint8(v2.entry)) - buf[off+bufoff*stream+1] = uint8(v.entry >> 8) - buf[off+bufoff*stream2+1] = uint8(v2.entry >> 8) - } - - { - const stream = 2 - const stream2 = 3 - br[stream].fillFast() - br[stream2].fillFast() - - val := br[stream].peekBitsFast(d.actualTableLog) - val2 := br[stream2].peekBitsFast(d.actualTableLog) - v := single[val&tlMask] - v2 := single[val2&tlMask] - br[stream].advance(uint8(v.entry)) - br[stream2].advance(uint8(v2.entry)) - buf[off+bufoff*stream] = uint8(v.entry >> 8) - buf[off+bufoff*stream2] = uint8(v2.entry >> 8) - - val = br[stream].peekBitsFast(d.actualTableLog) - val2 = br[stream2].peekBitsFast(d.actualTableLog) - v = single[val&tlMask] - v2 = single[val2&tlMask] - br[stream].advance(uint8(v.entry)) - br[stream2].advance(uint8(v2.entry)) - buf[off+bufoff*stream+1] = uint8(v.entry >> 8) - buf[off+bufoff*stream2+1] = uint8(v2.entry >> 8) - } - - off += 2 - - if off == bufoff { - if bufoff > dstEvery { - return nil, errors.New("corruption detected: stream overrun 1") - } - copy(out, buf[:bufoff]) - copy(out[dstEvery:], buf[bufoff:bufoff*2]) - copy(out[dstEvery*2:], buf[bufoff*2:bufoff*3]) - copy(out[dstEvery*3:], buf[bufoff*3:bufoff*4]) - off = 0 - out = out[bufoff:] - decoded += 256 - // There must at least be 3 buffers left. - if len(out) < dstEvery*3 { - return nil, errors.New("corruption detected: stream overrun 2") - } - } - } - if off > 0 { - ioff := int(off) - if len(out) < dstEvery*3+ioff { - return nil, errors.New("corruption detected: stream overrun 3") - } - copy(out, buf[:off]) - copy(out[dstEvery:dstEvery+ioff], buf[bufoff:bufoff*2]) - copy(out[dstEvery*2:dstEvery*2+ioff], buf[bufoff*2:bufoff*3]) - copy(out[dstEvery*3:dstEvery*3+ioff], buf[bufoff*3:bufoff*4]) - decoded += int(off) * 4 - out = out[off:] - } - - // Decode remaining. - for i := range br { - offset := dstEvery * i - br := &br[i] - bitsLeft := br.off*8 + uint(64-br.bitsRead) - for bitsLeft > 0 { - br.fill() - if false && br.bitsRead >= 32 { - if br.off >= 4 { - v := br.in[br.off-4:] - v = v[:4] - low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) - br.value = (br.value << 32) | uint64(low) - br.bitsRead -= 32 - br.off -= 4 - } else { - for br.off > 0 { - br.value = (br.value << 8) | uint64(br.in[br.off-1]) - br.bitsRead -= 8 - br.off-- - } - } - } - // end inline... - if offset >= len(out) { - return nil, errors.New("corruption detected: stream overrun 4") - } - - // Read value and increment offset. - val := br.peekBitsFast(d.actualTableLog) - v := single[val&tlMask].entry - nBits := uint8(v) - br.advance(nBits) - bitsLeft -= uint(nBits) - out[offset] = uint8(v >> 8) - offset++ - } - decoded += offset - dstEvery*i - err = br.close() - if err != nil { - return nil, err - } - } - if dstSize != decoded { - return nil, errors.New("corruption detected: short output block") - } - return dst, nil -} - // Decompress4X will decompress a 4X encoded stream. // The length of the supplied input must match the end of a block exactly. // The *capacity* of the dst slice must match the destination size of @@ -916,12 +654,12 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { single := d.dt.single[:tlSize] // Use temp table to avoid bound checks/append penalty. - var buf [256]byte + buf := d.buffer() var off uint8 var decoded int // Decode 4 values from each decoder/loop. - const bufoff = 256 / 4 + const bufoff = 256 for { if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 { break @@ -942,8 +680,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { br1.value <<= v & 63 br2.bitsRead += uint8(v2) br2.value <<= v2 & 63 - buf[off+bufoff*stream] = uint8(v >> 8) - buf[off+bufoff*stream2] = uint8(v2 >> 8) + buf[stream][off] = uint8(v >> 8) + buf[stream2][off] = uint8(v2 >> 8) v = single[uint8(br1.value>>shift)].entry v2 = single[uint8(br2.value>>shift)].entry @@ -951,8 +689,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { br1.value <<= v & 63 br2.bitsRead += uint8(v2) br2.value <<= v2 & 63 - buf[off+bufoff*stream+1] = uint8(v >> 8) - buf[off+bufoff*stream2+1] = uint8(v2 >> 8) + buf[stream][off+1] = uint8(v >> 8) + buf[stream2][off+1] = uint8(v2 >> 8) v = single[uint8(br1.value>>shift)].entry v2 = single[uint8(br2.value>>shift)].entry @@ -960,8 +698,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { br1.value <<= v & 63 br2.bitsRead += uint8(v2) br2.value <<= v2 & 63 - buf[off+bufoff*stream+2] = uint8(v >> 8) - buf[off+bufoff*stream2+2] = uint8(v2 >> 8) + buf[stream][off+2] = uint8(v >> 8) + buf[stream2][off+2] = uint8(v2 >> 8) v = single[uint8(br1.value>>shift)].entry v2 = single[uint8(br2.value>>shift)].entry @@ -969,8 +707,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { br1.value <<= v & 63 br2.bitsRead += uint8(v2) br2.value <<= v2 & 63 - buf[off+bufoff*stream2+3] = uint8(v2 >> 8) - buf[off+bufoff*stream+3] = uint8(v >> 8) + buf[stream][off+3] = uint8(v >> 8) + buf[stream2][off+3] = uint8(v2 >> 8) } { @@ -987,8 +725,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { br1.value <<= v & 63 br2.bitsRead += uint8(v2) br2.value <<= v2 & 63 - buf[off+bufoff*stream] = uint8(v >> 8) - buf[off+bufoff*stream2] = uint8(v2 >> 8) + buf[stream][off] = uint8(v >> 8) + buf[stream2][off] = uint8(v2 >> 8) v = single[uint8(br1.value>>shift)].entry v2 = single[uint8(br2.value>>shift)].entry @@ -996,8 +734,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { br1.value <<= v & 63 br2.bitsRead += uint8(v2) br2.value <<= v2 & 63 - buf[off+bufoff*stream+1] = uint8(v >> 8) - buf[off+bufoff*stream2+1] = uint8(v2 >> 8) + buf[stream][off+1] = uint8(v >> 8) + buf[stream2][off+1] = uint8(v2 >> 8) v = single[uint8(br1.value>>shift)].entry v2 = single[uint8(br2.value>>shift)].entry @@ -1005,8 +743,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { br1.value <<= v & 63 br2.bitsRead += uint8(v2) br2.value <<= v2 & 63 - buf[off+bufoff*stream+2] = uint8(v >> 8) - buf[off+bufoff*stream2+2] = uint8(v2 >> 8) + buf[stream][off+2] = uint8(v >> 8) + buf[stream2][off+2] = uint8(v2 >> 8) v = single[uint8(br1.value>>shift)].entry v2 = single[uint8(br2.value>>shift)].entry @@ -1014,25 +752,26 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { br1.value <<= v & 63 br2.bitsRead += uint8(v2) br2.value <<= v2 & 63 - buf[off+bufoff*stream2+3] = uint8(v2 >> 8) - buf[off+bufoff*stream+3] = uint8(v >> 8) + buf[stream][off+3] = uint8(v >> 8) + buf[stream2][off+3] = uint8(v2 >> 8) } off += 4 - if off == bufoff { + if off == 0 { if bufoff > dstEvery { + d.bufs.Put(buf) return nil, errors.New("corruption detected: stream overrun 1") } - copy(out, buf[:bufoff]) - copy(out[dstEvery:], buf[bufoff:bufoff*2]) - copy(out[dstEvery*2:], buf[bufoff*2:bufoff*3]) - copy(out[dstEvery*3:], buf[bufoff*3:bufoff*4]) - off = 0 + copy(out, buf[0][:]) + copy(out[dstEvery:], buf[1][:]) + copy(out[dstEvery*2:], buf[2][:]) + copy(out[dstEvery*3:], buf[3][:]) out = out[bufoff:] - decoded += 256 + decoded += bufoff * 4 // There must at least be 3 buffers left. if len(out) < dstEvery*3 { + d.bufs.Put(buf) return nil, errors.New("corruption detected: stream overrun 2") } } @@ -1040,23 +779,31 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { if off > 0 { ioff := int(off) if len(out) < dstEvery*3+ioff { + d.bufs.Put(buf) return nil, errors.New("corruption detected: stream overrun 3") } - copy(out, buf[:off]) - copy(out[dstEvery:dstEvery+ioff], buf[bufoff:bufoff*2]) - copy(out[dstEvery*2:dstEvery*2+ioff], buf[bufoff*2:bufoff*3]) - copy(out[dstEvery*3:dstEvery*3+ioff], buf[bufoff*3:bufoff*4]) + copy(out, buf[0][:off]) + copy(out[dstEvery:], buf[1][:off]) + copy(out[dstEvery*2:], buf[2][:off]) + copy(out[dstEvery*3:], buf[3][:off]) decoded += int(off) * 4 out = out[off:] } // Decode remaining. + // Decode remaining. + remainBytes := dstEvery - (decoded / 4) for i := range br { offset := dstEvery * i + endsAt := offset + remainBytes + if endsAt > len(out) { + endsAt = len(out) + } br := &br[i] - bitsLeft := int(br.off*8) + int(64-br.bitsRead) + bitsLeft := br.remaining() for bitsLeft > 0 { if br.finished() { + d.bufs.Put(buf) return nil, io.ErrUnexpectedEOF } if br.bitsRead >= 56 { @@ -1076,7 +823,8 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { } } // end inline... - if offset >= len(out) { + if offset >= endsAt { + d.bufs.Put(buf) return nil, errors.New("corruption detected: stream overrun 4") } @@ -1084,16 +832,22 @@ func (d *Decoder) decompress4X8bit(dst, src []byte) ([]byte, error) { v := single[uint8(br.value>>shift)].entry nBits := uint8(v) br.advance(nBits) - bitsLeft -= int(nBits) + bitsLeft -= uint(nBits) out[offset] = uint8(v >> 8) offset++ } + if offset != endsAt { + d.bufs.Put(buf) + return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt) + } decoded += offset - dstEvery*i err = br.close() if err != nil { + d.bufs.Put(buf) return nil, err } } + d.bufs.Put(buf) if dstSize != decoded { return nil, errors.New("corruption detected: short output block") } @@ -1131,16 +885,15 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) { const shift = 56 const tlSize = 1 << 8 - const tlMask = tlSize - 1 single := d.dt.single[:tlSize] // Use temp table to avoid bound checks/append penalty. - var buf [256]byte + buf := d.buffer() var off uint8 var decoded int // Decode 4 values from each decoder/loop. - const bufoff = 256 / 4 + const bufoff = 256 for { if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 { break @@ -1150,104 +903,109 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) { // Interleave 2 decodes. const stream = 0 const stream2 = 1 - br[stream].fillFast() - br[stream2].fillFast() - - v := single[uint8(br[stream].value>>shift)].entry - v2 := single[uint8(br[stream2].value>>shift)].entry - br[stream].bitsRead += uint8(v) - br[stream].value <<= v & 63 - br[stream2].bitsRead += uint8(v2) - br[stream2].value <<= v2 & 63 - buf[off+bufoff*stream] = uint8(v >> 8) - buf[off+bufoff*stream2] = uint8(v2 >> 8) - - v = single[uint8(br[stream].value>>shift)].entry - v2 = single[uint8(br[stream2].value>>shift)].entry - br[stream].bitsRead += uint8(v) - br[stream].value <<= v & 63 - br[stream2].bitsRead += uint8(v2) - br[stream2].value <<= v2 & 63 - buf[off+bufoff*stream+1] = uint8(v >> 8) - buf[off+bufoff*stream2+1] = uint8(v2 >> 8) - - v = single[uint8(br[stream].value>>shift)].entry - v2 = single[uint8(br[stream2].value>>shift)].entry - br[stream].bitsRead += uint8(v) - br[stream].value <<= v & 63 - br[stream2].bitsRead += uint8(v2) - br[stream2].value <<= v2 & 63 - buf[off+bufoff*stream+2] = uint8(v >> 8) - buf[off+bufoff*stream2+2] = uint8(v2 >> 8) - - v = single[uint8(br[stream].value>>shift)].entry - v2 = single[uint8(br[stream2].value>>shift)].entry - br[stream].bitsRead += uint8(v) - br[stream].value <<= v & 63 - br[stream2].bitsRead += uint8(v2) - br[stream2].value <<= v2 & 63 - buf[off+bufoff*stream+3] = uint8(v >> 8) - buf[off+bufoff*stream2+3] = uint8(v2 >> 8) + br1 := &br[stream] + br2 := &br[stream2] + br1.fillFast() + br2.fillFast() + + v := single[uint8(br1.value>>shift)].entry + v2 := single[uint8(br2.value>>shift)].entry + br1.bitsRead += uint8(v) + br1.value <<= v & 63 + br2.bitsRead += uint8(v2) + br2.value <<= v2 & 63 + buf[stream][off] = uint8(v >> 8) + buf[stream2][off] = uint8(v2 >> 8) + + v = single[uint8(br1.value>>shift)].entry + v2 = single[uint8(br2.value>>shift)].entry + br1.bitsRead += uint8(v) + br1.value <<= v & 63 + br2.bitsRead += uint8(v2) + br2.value <<= v2 & 63 + buf[stream][off+1] = uint8(v >> 8) + buf[stream2][off+1] = uint8(v2 >> 8) + + v = single[uint8(br1.value>>shift)].entry + v2 = single[uint8(br2.value>>shift)].entry + br1.bitsRead += uint8(v) + br1.value <<= v & 63 + br2.bitsRead += uint8(v2) + br2.value <<= v2 & 63 + buf[stream][off+2] = uint8(v >> 8) + buf[stream2][off+2] = uint8(v2 >> 8) + + v = single[uint8(br1.value>>shift)].entry + v2 = single[uint8(br2.value>>shift)].entry + br1.bitsRead += uint8(v) + br1.value <<= v & 63 + br2.bitsRead += uint8(v2) + br2.value <<= v2 & 63 + buf[stream][off+3] = uint8(v >> 8) + buf[stream2][off+3] = uint8(v2 >> 8) } { const stream = 2 const stream2 = 3 - br[stream].fillFast() - br[stream2].fillFast() - - v := single[uint8(br[stream].value>>shift)].entry - v2 := single[uint8(br[stream2].value>>shift)].entry - br[stream].bitsRead += uint8(v) - br[stream].value <<= v & 63 - br[stream2].bitsRead += uint8(v2) - br[stream2].value <<= v2 & 63 - buf[off+bufoff*stream] = uint8(v >> 8) - buf[off+bufoff*stream2] = uint8(v2 >> 8) - - v = single[uint8(br[stream].value>>shift)].entry - v2 = single[uint8(br[stream2].value>>shift)].entry - br[stream].bitsRead += uint8(v) - br[stream].value <<= v & 63 - br[stream2].bitsRead += uint8(v2) - br[stream2].value <<= v2 & 63 - buf[off+bufoff*stream+1] = uint8(v >> 8) - buf[off+bufoff*stream2+1] = uint8(v2 >> 8) - - v = single[uint8(br[stream].value>>shift)].entry - v2 = single[uint8(br[stream2].value>>shift)].entry - br[stream].bitsRead += uint8(v) - br[stream].value <<= v & 63 - br[stream2].bitsRead += uint8(v2) - br[stream2].value <<= v2 & 63 - buf[off+bufoff*stream+2] = uint8(v >> 8) - buf[off+bufoff*stream2+2] = uint8(v2 >> 8) - - v = single[uint8(br[stream].value>>shift)].entry - v2 = single[uint8(br[stream2].value>>shift)].entry - br[stream].bitsRead += uint8(v) - br[stream].value <<= v & 63 - br[stream2].bitsRead += uint8(v2) - br[stream2].value <<= v2 & 63 - buf[off+bufoff*stream+3] = uint8(v >> 8) - buf[off+bufoff*stream2+3] = uint8(v2 >> 8) + br1 := &br[stream] + br2 := &br[stream2] + br1.fillFast() + br2.fillFast() + + v := single[uint8(br1.value>>shift)].entry + v2 := single[uint8(br2.value>>shift)].entry + br1.bitsRead += uint8(v) + br1.value <<= v & 63 + br2.bitsRead += uint8(v2) + br2.value <<= v2 & 63 + buf[stream][off] = uint8(v >> 8) + buf[stream2][off] = uint8(v2 >> 8) + + v = single[uint8(br1.value>>shift)].entry + v2 = single[uint8(br2.value>>shift)].entry + br1.bitsRead += uint8(v) + br1.value <<= v & 63 + br2.bitsRead += uint8(v2) + br2.value <<= v2 & 63 + buf[stream][off+1] = uint8(v >> 8) + buf[stream2][off+1] = uint8(v2 >> 8) + + v = single[uint8(br1.value>>shift)].entry + v2 = single[uint8(br2.value>>shift)].entry + br1.bitsRead += uint8(v) + br1.value <<= v & 63 + br2.bitsRead += uint8(v2) + br2.value <<= v2 & 63 + buf[stream][off+2] = uint8(v >> 8) + buf[stream2][off+2] = uint8(v2 >> 8) + + v = single[uint8(br1.value>>shift)].entry + v2 = single[uint8(br2.value>>shift)].entry + br1.bitsRead += uint8(v) + br1.value <<= v & 63 + br2.bitsRead += uint8(v2) + br2.value <<= v2 & 63 + buf[stream][off+3] = uint8(v >> 8) + buf[stream2][off+3] = uint8(v2 >> 8) } off += 4 - if off == bufoff { + if off == 0 { if bufoff > dstEvery { + d.bufs.Put(buf) return nil, errors.New("corruption detected: stream overrun 1") } - copy(out, buf[:bufoff]) - copy(out[dstEvery:], buf[bufoff:bufoff*2]) - copy(out[dstEvery*2:], buf[bufoff*2:bufoff*3]) - copy(out[dstEvery*3:], buf[bufoff*3:bufoff*4]) - off = 0 + copy(out, buf[0][:]) + copy(out[dstEvery:], buf[1][:]) + copy(out[dstEvery*2:], buf[2][:]) + copy(out[dstEvery*3:], buf[3][:]) out = out[bufoff:] - decoded += 256 + decoded += bufoff * 4 // There must at least be 3 buffers left. if len(out) < dstEvery*3 { + d.bufs.Put(buf) return nil, errors.New("corruption detected: stream overrun 2") } } @@ -1257,21 +1015,27 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) { if len(out) < dstEvery*3+ioff { return nil, errors.New("corruption detected: stream overrun 3") } - copy(out, buf[:off]) - copy(out[dstEvery:dstEvery+ioff], buf[bufoff:bufoff*2]) - copy(out[dstEvery*2:dstEvery*2+ioff], buf[bufoff*2:bufoff*3]) - copy(out[dstEvery*3:dstEvery*3+ioff], buf[bufoff*3:bufoff*4]) + copy(out, buf[0][:off]) + copy(out[dstEvery:], buf[1][:off]) + copy(out[dstEvery*2:], buf[2][:off]) + copy(out[dstEvery*3:], buf[3][:off]) decoded += int(off) * 4 out = out[off:] } // Decode remaining. + remainBytes := dstEvery - (decoded / 4) for i := range br { offset := dstEvery * i + endsAt := offset + remainBytes + if endsAt > len(out) { + endsAt = len(out) + } br := &br[i] - bitsLeft := int(br.off*8) + int(64-br.bitsRead) + bitsLeft := br.remaining() for bitsLeft > 0 { if br.finished() { + d.bufs.Put(buf) return nil, io.ErrUnexpectedEOF } if br.bitsRead >= 56 { @@ -1291,7 +1055,8 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) { } } // end inline... - if offset >= len(out) { + if offset >= endsAt { + d.bufs.Put(buf) return nil, errors.New("corruption detected: stream overrun 4") } @@ -1299,16 +1064,23 @@ func (d *Decoder) decompress4X8bitExactly(dst, src []byte) ([]byte, error) { v := single[br.peekByteFast()].entry nBits := uint8(v) br.advance(nBits) - bitsLeft -= int(nBits) + bitsLeft -= uint(nBits) out[offset] = uint8(v >> 8) offset++ } + if offset != endsAt { + d.bufs.Put(buf) + return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt) + } + decoded += offset - dstEvery*i err = br.close() if err != nil { + d.bufs.Put(buf) return nil, err } } + d.bufs.Put(buf) if dstSize != decoded { return nil, errors.New("corruption detected: short output block") } diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go new file mode 100644 index 0000000000..671e630a84 --- /dev/null +++ b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.go @@ -0,0 +1,228 @@ +//go:build amd64 && !appengine && !noasm && gc +// +build amd64,!appengine,!noasm,gc + +// This file contains the specialisation of Decoder.Decompress4X +// and Decoder.Decompress1X that use an asm implementation of thir main loops. +package huff0 + +import ( + "errors" + "fmt" + + "github.com/klauspost/compress/internal/cpuinfo" +) + +// decompress4x_main_loop_x86 is an x86 assembler implementation +// of Decompress4X when tablelog > 8. +//go:noescape +func decompress4x_main_loop_amd64(ctx *decompress4xContext) + +// decompress4x_8b_loop_x86 is an x86 assembler implementation +// of Decompress4X when tablelog <= 8 which decodes 4 entries +// per loop. +//go:noescape +func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext) + +// fallback8BitSize is the size where using Go version is faster. +const fallback8BitSize = 800 + +type decompress4xContext struct { + pbr0 *bitReaderShifted + pbr1 *bitReaderShifted + pbr2 *bitReaderShifted + pbr3 *bitReaderShifted + peekBits uint8 + out *byte + dstEvery int + tbl *dEntrySingle + decoded int + limit *byte +} + +// Decompress4X will decompress a 4X encoded stream. +// The length of the supplied input must match the end of a block exactly. +// The *capacity* of the dst slice must match the destination size of +// the uncompressed data exactly. +func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { + if len(d.dt.single) == 0 { + return nil, errors.New("no table loaded") + } + if len(src) < 6+(4*1) { + return nil, errors.New("input too small") + } + + use8BitTables := d.actualTableLog <= 8 + if cap(dst) < fallback8BitSize && use8BitTables { + return d.decompress4X8bit(dst, src) + } + + var br [4]bitReaderShifted + // Decode "jump table" + start := 6 + for i := 0; i < 3; i++ { + length := int(src[i*2]) | (int(src[i*2+1]) << 8) + if start+length >= len(src) { + return nil, errors.New("truncated input (or invalid offset)") + } + err := br[i].init(src[start : start+length]) + if err != nil { + return nil, err + } + start += length + } + err := br[3].init(src[start:]) + if err != nil { + return nil, err + } + + // destination, offset to match first output + dstSize := cap(dst) + dst = dst[:dstSize] + out := dst + dstEvery := (dstSize + 3) / 4 + + const tlSize = 1 << tableLogMax + const tlMask = tlSize - 1 + single := d.dt.single[:tlSize] + + var decoded int + + if len(out) > 4*4 && !(br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4) { + ctx := decompress4xContext{ + pbr0: &br[0], + pbr1: &br[1], + pbr2: &br[2], + pbr3: &br[3], + peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast() + out: &out[0], + dstEvery: dstEvery, + tbl: &single[0], + limit: &out[dstEvery-4], // Always stop decoding when first buffer gets here to avoid writing OOB on last. + } + if use8BitTables { + decompress4x_8b_main_loop_amd64(&ctx) + } else { + decompress4x_main_loop_amd64(&ctx) + } + + decoded = ctx.decoded + out = out[decoded/4:] + } + + // Decode remaining. + remainBytes := dstEvery - (decoded / 4) + for i := range br { + offset := dstEvery * i + endsAt := offset + remainBytes + if endsAt > len(out) { + endsAt = len(out) + } + br := &br[i] + bitsLeft := br.remaining() + for bitsLeft > 0 { + br.fill() + if offset >= endsAt { + return nil, errors.New("corruption detected: stream overrun 4") + } + + // Read value and increment offset. + val := br.peekBitsFast(d.actualTableLog) + v := single[val&tlMask].entry + nBits := uint8(v) + br.advance(nBits) + bitsLeft -= uint(nBits) + out[offset] = uint8(v >> 8) + offset++ + } + if offset != endsAt { + return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt) + } + decoded += offset - dstEvery*i + err = br.close() + if err != nil { + return nil, err + } + } + if dstSize != decoded { + return nil, errors.New("corruption detected: short output block") + } + return dst, nil +} + +// decompress4x_main_loop_x86 is an x86 assembler implementation +// of Decompress1X when tablelog > 8. +//go:noescape +func decompress1x_main_loop_amd64(ctx *decompress1xContext) + +// decompress4x_main_loop_x86 is an x86 with BMI2 assembler implementation +// of Decompress1X when tablelog > 8. +//go:noescape +func decompress1x_main_loop_bmi2(ctx *decompress1xContext) + +type decompress1xContext struct { + pbr *bitReaderShifted + peekBits uint8 + out *byte + outCap int + tbl *dEntrySingle + decoded int +} + +// Error reported by asm implementations +const error_max_decoded_size_exeeded = -1 + +// Decompress1X will decompress a 1X encoded stream. +// The cap of the output buffer will be the maximum decompressed size. +// The length of the supplied input must match the end of a block exactly. +func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) { + if len(d.dt.single) == 0 { + return nil, errors.New("no table loaded") + } + var br bitReaderShifted + err := br.init(src) + if err != nil { + return dst, err + } + maxDecodedSize := cap(dst) + dst = dst[:maxDecodedSize] + + const tlSize = 1 << tableLogMax + const tlMask = tlSize - 1 + + if maxDecodedSize >= 4 { + ctx := decompress1xContext{ + pbr: &br, + out: &dst[0], + outCap: maxDecodedSize, + peekBits: uint8((64 - d.actualTableLog) & 63), // see: bitReaderShifted.peekBitsFast() + tbl: &d.dt.single[0], + } + + if cpuinfo.HasBMI2() { + decompress1x_main_loop_bmi2(&ctx) + } else { + decompress1x_main_loop_amd64(&ctx) + } + if ctx.decoded == error_max_decoded_size_exeeded { + return nil, ErrMaxDecodedSizeExceeded + } + + dst = dst[:ctx.decoded] + } + + // br < 8, so uint8 is fine + bitsLeft := uint8(br.off)*8 + 64 - br.bitsRead + for bitsLeft > 0 { + br.fill() + if len(dst) >= maxDecodedSize { + br.close() + return nil, ErrMaxDecodedSizeExceeded + } + v := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask] + nBits := uint8(v.entry) + br.advance(nBits) + bitsLeft -= nBits + dst = append(dst, uint8(v.entry>>8)) + } + return dst, br.close() +} diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s new file mode 100644 index 0000000000..6c65c6e2b2 --- /dev/null +++ b/vendor/github.com/klauspost/compress/huff0/decompress_amd64.s @@ -0,0 +1,865 @@ +// Code generated by command: go run gen.go -out ../decompress_amd64.s -pkg=huff0. DO NOT EDIT. + +//go:build amd64 && !appengine && !noasm && gc +// +build amd64,!appengine,!noasm,gc + +// func decompress4x_main_loop_amd64(ctx *decompress4xContext) +TEXT ·decompress4x_main_loop_amd64(SB), $8-8 + XORQ DX, DX + + // Preload values + MOVQ ctx+0(FP), AX + MOVBQZX 32(AX), SI + MOVQ 40(AX), DI + MOVQ DI, BX + MOVQ 72(AX), CX + MOVQ CX, (SP) + MOVQ 48(AX), R8 + MOVQ 56(AX), R9 + MOVQ (AX), R10 + MOVQ 8(AX), R11 + MOVQ 16(AX), R12 + MOVQ 24(AX), R13 + + // Main loop +main_loop: + MOVQ BX, DI + CMPQ DI, (SP) + SETGE DL + + // br0.fillFast32() + MOVQ 32(R10), R14 + MOVBQZX 40(R10), R15 + CMPQ R15, $0x20 + JBE skip_fill0 + MOVQ 24(R10), AX + SUBQ $0x20, R15 + SUBQ $0x04, AX + MOVQ (R10), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (AX)(BP*1), BP + MOVQ R15, CX + SHLQ CL, BP + MOVQ AX, 24(R10) + ORQ BP, R14 + + // exhausted = exhausted || (br0.off < 4) + CMPQ AX, $0x04 + SETLT AL + ORB AL, DL + +skip_fill0: + // val0 := br0.peekTopBits(peekBits) + MOVQ R14, BP + MOVQ SI, CX + SHRQ CL, BP + + // v0 := table[val0&mask] + MOVW (R9)(BP*2), CX + + // br0.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R14 + ADDB CL, R15 + + // val1 := br0.peekTopBits(peekBits) + MOVQ SI, CX + MOVQ R14, BP + SHRQ CL, BP + + // v1 := table[val1&mask] + MOVW (R9)(BP*2), CX + + // br0.advance(uint8(v1.entry)) + MOVB CH, AH + SHLQ CL, R14 + ADDB CL, R15 + + // these two writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVW AX, (DI) + + // update the bitrader reader structure + MOVQ R14, 32(R10) + MOVB R15, 40(R10) + ADDQ R8, DI + + // br1.fillFast32() + MOVQ 32(R11), R14 + MOVBQZX 40(R11), R15 + CMPQ R15, $0x20 + JBE skip_fill1 + MOVQ 24(R11), AX + SUBQ $0x20, R15 + SUBQ $0x04, AX + MOVQ (R11), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (AX)(BP*1), BP + MOVQ R15, CX + SHLQ CL, BP + MOVQ AX, 24(R11) + ORQ BP, R14 + + // exhausted = exhausted || (br1.off < 4) + CMPQ AX, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1: + // val0 := br1.peekTopBits(peekBits) + MOVQ R14, BP + MOVQ SI, CX + SHRQ CL, BP + + // v0 := table[val0&mask] + MOVW (R9)(BP*2), CX + + // br1.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R14 + ADDB CL, R15 + + // val1 := br1.peekTopBits(peekBits) + MOVQ SI, CX + MOVQ R14, BP + SHRQ CL, BP + + // v1 := table[val1&mask] + MOVW (R9)(BP*2), CX + + // br1.advance(uint8(v1.entry)) + MOVB CH, AH + SHLQ CL, R14 + ADDB CL, R15 + + // these two writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVW AX, (DI) + + // update the bitrader reader structure + MOVQ R14, 32(R11) + MOVB R15, 40(R11) + ADDQ R8, DI + + // br2.fillFast32() + MOVQ 32(R12), R14 + MOVBQZX 40(R12), R15 + CMPQ R15, $0x20 + JBE skip_fill2 + MOVQ 24(R12), AX + SUBQ $0x20, R15 + SUBQ $0x04, AX + MOVQ (R12), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (AX)(BP*1), BP + MOVQ R15, CX + SHLQ CL, BP + MOVQ AX, 24(R12) + ORQ BP, R14 + + // exhausted = exhausted || (br2.off < 4) + CMPQ AX, $0x04 + SETLT AL + ORB AL, DL + +skip_fill2: + // val0 := br2.peekTopBits(peekBits) + MOVQ R14, BP + MOVQ SI, CX + SHRQ CL, BP + + // v0 := table[val0&mask] + MOVW (R9)(BP*2), CX + + // br2.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R14 + ADDB CL, R15 + + // val1 := br2.peekTopBits(peekBits) + MOVQ SI, CX + MOVQ R14, BP + SHRQ CL, BP + + // v1 := table[val1&mask] + MOVW (R9)(BP*2), CX + + // br2.advance(uint8(v1.entry)) + MOVB CH, AH + SHLQ CL, R14 + ADDB CL, R15 + + // these two writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVW AX, (DI) + + // update the bitrader reader structure + MOVQ R14, 32(R12) + MOVB R15, 40(R12) + ADDQ R8, DI + + // br3.fillFast32() + MOVQ 32(R13), R14 + MOVBQZX 40(R13), R15 + CMPQ R15, $0x20 + JBE skip_fill3 + MOVQ 24(R13), AX + SUBQ $0x20, R15 + SUBQ $0x04, AX + MOVQ (R13), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (AX)(BP*1), BP + MOVQ R15, CX + SHLQ CL, BP + MOVQ AX, 24(R13) + ORQ BP, R14 + + // exhausted = exhausted || (br3.off < 4) + CMPQ AX, $0x04 + SETLT AL + ORB AL, DL + +skip_fill3: + // val0 := br3.peekTopBits(peekBits) + MOVQ R14, BP + MOVQ SI, CX + SHRQ CL, BP + + // v0 := table[val0&mask] + MOVW (R9)(BP*2), CX + + // br3.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R14 + ADDB CL, R15 + + // val1 := br3.peekTopBits(peekBits) + MOVQ SI, CX + MOVQ R14, BP + SHRQ CL, BP + + // v1 := table[val1&mask] + MOVW (R9)(BP*2), CX + + // br3.advance(uint8(v1.entry)) + MOVB CH, AH + SHLQ CL, R14 + ADDB CL, R15 + + // these two writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + MOVW AX, (DI) + + // update the bitrader reader structure + MOVQ R14, 32(R13) + MOVB R15, 40(R13) + ADDQ $0x02, BX + TESTB DL, DL + JZ main_loop + MOVQ ctx+0(FP), AX + MOVQ 40(AX), CX + MOVQ BX, DX + SUBQ CX, DX + SHLQ $0x02, DX + MOVQ DX, 64(AX) + RET + +// func decompress4x_8b_main_loop_amd64(ctx *decompress4xContext) +TEXT ·decompress4x_8b_main_loop_amd64(SB), $16-8 + XORQ DX, DX + + // Preload values + MOVQ ctx+0(FP), CX + MOVBQZX 32(CX), BX + MOVQ 40(CX), SI + MOVQ SI, (SP) + MOVQ 72(CX), DX + MOVQ DX, 8(SP) + MOVQ 48(CX), DI + MOVQ 56(CX), R8 + MOVQ (CX), R9 + MOVQ 8(CX), R10 + MOVQ 16(CX), R11 + MOVQ 24(CX), R12 + + // Main loop +main_loop: + MOVQ (SP), SI + CMPQ SI, 8(SP) + SETGE DL + + // br1000.fillFast32() + MOVQ 32(R9), R13 + MOVBQZX 40(R9), R14 + CMPQ R14, $0x20 + JBE skip_fill1000 + MOVQ 24(R9), R15 + SUBQ $0x20, R14 + SUBQ $0x04, R15 + MOVQ (R9), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (R15)(BP*1), BP + MOVQ R14, CX + SHLQ CL, BP + MOVQ R15, 24(R9) + ORQ BP, R13 + + // exhausted = exhausted || (br1000.off < 4) + CMPQ R15, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1000: + // val0 := br0.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v0 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br0.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + + // val1 := br0.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v1 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br0.advance(uint8(v1.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // val2 := br0.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v2 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br0.advance(uint8(v2.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + + // val3 := br0.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v3 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br0.advance(uint8(v3.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVL AX, (SI) + + // update the bitreader reader structure + MOVQ R13, 32(R9) + MOVB R14, 40(R9) + ADDQ DI, SI + + // br1001.fillFast32() + MOVQ 32(R10), R13 + MOVBQZX 40(R10), R14 + CMPQ R14, $0x20 + JBE skip_fill1001 + MOVQ 24(R10), R15 + SUBQ $0x20, R14 + SUBQ $0x04, R15 + MOVQ (R10), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (R15)(BP*1), BP + MOVQ R14, CX + SHLQ CL, BP + MOVQ R15, 24(R10) + ORQ BP, R13 + + // exhausted = exhausted || (br1001.off < 4) + CMPQ R15, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1001: + // val0 := br1.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v0 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br1.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + + // val1 := br1.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v1 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br1.advance(uint8(v1.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // val2 := br1.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v2 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br1.advance(uint8(v2.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + + // val3 := br1.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v3 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br1.advance(uint8(v3.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVL AX, (SI) + + // update the bitreader reader structure + MOVQ R13, 32(R10) + MOVB R14, 40(R10) + ADDQ DI, SI + + // br1002.fillFast32() + MOVQ 32(R11), R13 + MOVBQZX 40(R11), R14 + CMPQ R14, $0x20 + JBE skip_fill1002 + MOVQ 24(R11), R15 + SUBQ $0x20, R14 + SUBQ $0x04, R15 + MOVQ (R11), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (R15)(BP*1), BP + MOVQ R14, CX + SHLQ CL, BP + MOVQ R15, 24(R11) + ORQ BP, R13 + + // exhausted = exhausted || (br1002.off < 4) + CMPQ R15, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1002: + // val0 := br2.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v0 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br2.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + + // val1 := br2.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v1 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br2.advance(uint8(v1.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // val2 := br2.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v2 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br2.advance(uint8(v2.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + + // val3 := br2.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v3 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br2.advance(uint8(v3.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVL AX, (SI) + + // update the bitreader reader structure + MOVQ R13, 32(R11) + MOVB R14, 40(R11) + ADDQ DI, SI + + // br1003.fillFast32() + MOVQ 32(R12), R13 + MOVBQZX 40(R12), R14 + CMPQ R14, $0x20 + JBE skip_fill1003 + MOVQ 24(R12), R15 + SUBQ $0x20, R14 + SUBQ $0x04, R15 + MOVQ (R12), BP + + // b.value |= uint64(low) << (b.bitsRead & 63) + MOVL (R15)(BP*1), BP + MOVQ R14, CX + SHLQ CL, BP + MOVQ R15, 24(R12) + ORQ BP, R13 + + // exhausted = exhausted || (br1003.off < 4) + CMPQ R15, $0x04 + SETLT AL + ORB AL, DL + +skip_fill1003: + // val0 := br3.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v0 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br3.advance(uint8(v0.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + + // val1 := br3.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v1 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br3.advance(uint8(v1.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // val2 := br3.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v2 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br3.advance(uint8(v2.entry) + MOVB CH, AH + SHLQ CL, R13 + ADDB CL, R14 + + // val3 := br3.peekTopBits(peekBits) + MOVQ R13, R15 + MOVQ BX, CX + SHRQ CL, R15 + + // v3 := table[val0&mask] + MOVW (R8)(R15*2), CX + + // br3.advance(uint8(v3.entry) + MOVB CH, AL + SHLQ CL, R13 + ADDB CL, R14 + BSWAPL AX + + // these four writes get coalesced + // out[id * dstEvery + 0] = uint8(v0.entry >> 8) + // out[id * dstEvery + 1] = uint8(v1.entry >> 8) + // out[id * dstEvery + 3] = uint8(v2.entry >> 8) + // out[id * dstEvery + 4] = uint8(v3.entry >> 8) + MOVL AX, (SI) + + // update the bitreader reader structure + MOVQ R13, 32(R12) + MOVB R14, 40(R12) + ADDQ $0x04, (SP) + TESTB DL, DL + JZ main_loop + MOVQ ctx+0(FP), AX + MOVQ 40(AX), CX + MOVQ (SP), DX + SUBQ CX, DX + SHLQ $0x02, DX + MOVQ DX, 64(AX) + RET + +// func decompress1x_main_loop_amd64(ctx *decompress1xContext) +TEXT ·decompress1x_main_loop_amd64(SB), $0-8 + MOVQ ctx+0(FP), CX + MOVQ 16(CX), DX + MOVQ 24(CX), BX + CMPQ BX, $0x04 + JB error_max_decoded_size_exeeded + LEAQ (DX)(BX*1), BX + MOVQ (CX), SI + MOVQ (SI), R8 + MOVQ 24(SI), R9 + MOVQ 32(SI), R10 + MOVBQZX 40(SI), R11 + MOVQ 32(CX), SI + MOVBQZX 8(CX), DI + JMP loop_condition + +main_loop: + // Check if we have room for 4 bytes in the output buffer + LEAQ 4(DX), CX + CMPQ CX, BX + JGE error_max_decoded_size_exeeded + + // Decode 4 values + CMPQ R11, $0x20 + JL bitReader_fillFast_1_end + SUBQ $0x20, R11 + SUBQ $0x04, R9 + MOVL (R8)(R9*1), R12 + MOVQ R11, CX + SHLQ CL, R12 + ORQ R12, R10 + +bitReader_fillFast_1_end: + MOVQ DI, CX + MOVQ R10, R12 + SHRQ CL, R12 + MOVW (SI)(R12*2), CX + MOVB CH, AL + MOVBQZX CL, CX + ADDQ CX, R11 + SHLQ CL, R10 + MOVQ DI, CX + MOVQ R10, R12 + SHRQ CL, R12 + MOVW (SI)(R12*2), CX + MOVB CH, AH + MOVBQZX CL, CX + ADDQ CX, R11 + SHLQ CL, R10 + BSWAPL AX + CMPQ R11, $0x20 + JL bitReader_fillFast_2_end + SUBQ $0x20, R11 + SUBQ $0x04, R9 + MOVL (R8)(R9*1), R12 + MOVQ R11, CX + SHLQ CL, R12 + ORQ R12, R10 + +bitReader_fillFast_2_end: + MOVQ DI, CX + MOVQ R10, R12 + SHRQ CL, R12 + MOVW (SI)(R12*2), CX + MOVB CH, AH + MOVBQZX CL, CX + ADDQ CX, R11 + SHLQ CL, R10 + MOVQ DI, CX + MOVQ R10, R12 + SHRQ CL, R12 + MOVW (SI)(R12*2), CX + MOVB CH, AL + MOVBQZX CL, CX + ADDQ CX, R11 + SHLQ CL, R10 + BSWAPL AX + + // Store the decoded values + MOVL AX, (DX) + ADDQ $0x04, DX + +loop_condition: + CMPQ R9, $0x08 + JGE main_loop + + // Update ctx structure + MOVQ ctx+0(FP), AX + MOVQ DX, CX + MOVQ 16(AX), DX + SUBQ DX, CX + MOVQ CX, 40(AX) + MOVQ (AX), AX + MOVQ R9, 24(AX) + MOVQ R10, 32(AX) + MOVB R11, 40(AX) + RET + + // Report error +error_max_decoded_size_exeeded: + MOVQ ctx+0(FP), AX + MOVQ $-1, CX + MOVQ CX, 40(AX) + RET + +// func decompress1x_main_loop_bmi2(ctx *decompress1xContext) +// Requires: BMI2 +TEXT ·decompress1x_main_loop_bmi2(SB), $0-8 + MOVQ ctx+0(FP), CX + MOVQ 16(CX), DX + MOVQ 24(CX), BX + CMPQ BX, $0x04 + JB error_max_decoded_size_exeeded + LEAQ (DX)(BX*1), BX + MOVQ (CX), SI + MOVQ (SI), R8 + MOVQ 24(SI), R9 + MOVQ 32(SI), R10 + MOVBQZX 40(SI), R11 + MOVQ 32(CX), SI + MOVBQZX 8(CX), DI + JMP loop_condition + +main_loop: + // Check if we have room for 4 bytes in the output buffer + LEAQ 4(DX), CX + CMPQ CX, BX + JGE error_max_decoded_size_exeeded + + // Decode 4 values + CMPQ R11, $0x20 + JL bitReader_fillFast_1_end + SUBQ $0x20, R11 + SUBQ $0x04, R9 + MOVL (R8)(R9*1), CX + SHLXQ R11, CX, CX + ORQ CX, R10 + +bitReader_fillFast_1_end: + SHRXQ DI, R10, CX + MOVW (SI)(CX*2), CX + MOVB CH, AL + MOVBQZX CL, CX + ADDQ CX, R11 + SHLXQ CX, R10, R10 + SHRXQ DI, R10, CX + MOVW (SI)(CX*2), CX + MOVB CH, AH + MOVBQZX CL, CX + ADDQ CX, R11 + SHLXQ CX, R10, R10 + BSWAPL AX + CMPQ R11, $0x20 + JL bitReader_fillFast_2_end + SUBQ $0x20, R11 + SUBQ $0x04, R9 + MOVL (R8)(R9*1), CX + SHLXQ R11, CX, CX + ORQ CX, R10 + +bitReader_fillFast_2_end: + SHRXQ DI, R10, CX + MOVW (SI)(CX*2), CX + MOVB CH, AH + MOVBQZX CL, CX + ADDQ CX, R11 + SHLXQ CX, R10, R10 + SHRXQ DI, R10, CX + MOVW (SI)(CX*2), CX + MOVB CH, AL + MOVBQZX CL, CX + ADDQ CX, R11 + SHLXQ CX, R10, R10 + BSWAPL AX + + // Store the decoded values + MOVL AX, (DX) + ADDQ $0x04, DX + +loop_condition: + CMPQ R9, $0x08 + JGE main_loop + + // Update ctx structure + MOVQ ctx+0(FP), AX + MOVQ DX, CX + MOVQ 16(AX), DX + SUBQ DX, CX + MOVQ CX, 40(AX) + MOVQ (AX), AX + MOVQ R9, 24(AX) + MOVQ R10, 32(AX) + MOVB R11, 40(AX) + RET + + // Report error +error_max_decoded_size_exeeded: + MOVQ ctx+0(FP), AX + MOVQ $-1, CX + MOVQ CX, 40(AX) + RET diff --git a/vendor/github.com/klauspost/compress/huff0/decompress_generic.go b/vendor/github.com/klauspost/compress/huff0/decompress_generic.go new file mode 100644 index 0000000000..4f6f37cb2c --- /dev/null +++ b/vendor/github.com/klauspost/compress/huff0/decompress_generic.go @@ -0,0 +1,295 @@ +//go:build !amd64 || appengine || !gc || noasm +// +build !amd64 appengine !gc noasm + +// This file contains a generic implementation of Decoder.Decompress4X. +package huff0 + +import ( + "errors" + "fmt" +) + +// Decompress4X will decompress a 4X encoded stream. +// The length of the supplied input must match the end of a block exactly. +// The *capacity* of the dst slice must match the destination size of +// the uncompressed data exactly. +func (d *Decoder) Decompress4X(dst, src []byte) ([]byte, error) { + if len(d.dt.single) == 0 { + return nil, errors.New("no table loaded") + } + if len(src) < 6+(4*1) { + return nil, errors.New("input too small") + } + if use8BitTables && d.actualTableLog <= 8 { + return d.decompress4X8bit(dst, src) + } + + var br [4]bitReaderShifted + // Decode "jump table" + start := 6 + for i := 0; i < 3; i++ { + length := int(src[i*2]) | (int(src[i*2+1]) << 8) + if start+length >= len(src) { + return nil, errors.New("truncated input (or invalid offset)") + } + err := br[i].init(src[start : start+length]) + if err != nil { + return nil, err + } + start += length + } + err := br[3].init(src[start:]) + if err != nil { + return nil, err + } + + // destination, offset to match first output + dstSize := cap(dst) + dst = dst[:dstSize] + out := dst + dstEvery := (dstSize + 3) / 4 + + const tlSize = 1 << tableLogMax + const tlMask = tlSize - 1 + single := d.dt.single[:tlSize] + + // Use temp table to avoid bound checks/append penalty. + buf := d.buffer() + var off uint8 + var decoded int + + // Decode 2 values from each decoder/loop. + const bufoff = 256 + for { + if br[0].off < 4 || br[1].off < 4 || br[2].off < 4 || br[3].off < 4 { + break + } + + { + const stream = 0 + const stream2 = 1 + br[stream].fillFast() + br[stream2].fillFast() + + val := br[stream].peekBitsFast(d.actualTableLog) + val2 := br[stream2].peekBitsFast(d.actualTableLog) + v := single[val&tlMask] + v2 := single[val2&tlMask] + br[stream].advance(uint8(v.entry)) + br[stream2].advance(uint8(v2.entry)) + buf[stream][off] = uint8(v.entry >> 8) + buf[stream2][off] = uint8(v2.entry >> 8) + + val = br[stream].peekBitsFast(d.actualTableLog) + val2 = br[stream2].peekBitsFast(d.actualTableLog) + v = single[val&tlMask] + v2 = single[val2&tlMask] + br[stream].advance(uint8(v.entry)) + br[stream2].advance(uint8(v2.entry)) + buf[stream][off+1] = uint8(v.entry >> 8) + buf[stream2][off+1] = uint8(v2.entry >> 8) + } + + { + const stream = 2 + const stream2 = 3 + br[stream].fillFast() + br[stream2].fillFast() + + val := br[stream].peekBitsFast(d.actualTableLog) + val2 := br[stream2].peekBitsFast(d.actualTableLog) + v := single[val&tlMask] + v2 := single[val2&tlMask] + br[stream].advance(uint8(v.entry)) + br[stream2].advance(uint8(v2.entry)) + buf[stream][off] = uint8(v.entry >> 8) + buf[stream2][off] = uint8(v2.entry >> 8) + + val = br[stream].peekBitsFast(d.actualTableLog) + val2 = br[stream2].peekBitsFast(d.actualTableLog) + v = single[val&tlMask] + v2 = single[val2&tlMask] + br[stream].advance(uint8(v.entry)) + br[stream2].advance(uint8(v2.entry)) + buf[stream][off+1] = uint8(v.entry >> 8) + buf[stream2][off+1] = uint8(v2.entry >> 8) + } + + off += 2 + + if off == 0 { + if bufoff > dstEvery { + d.bufs.Put(buf) + return nil, errors.New("corruption detected: stream overrun 1") + } + copy(out, buf[0][:]) + copy(out[dstEvery:], buf[1][:]) + copy(out[dstEvery*2:], buf[2][:]) + copy(out[dstEvery*3:], buf[3][:]) + out = out[bufoff:] + decoded += bufoff * 4 + // There must at least be 3 buffers left. + if len(out) < dstEvery*3 { + d.bufs.Put(buf) + return nil, errors.New("corruption detected: stream overrun 2") + } + } + } + if off > 0 { + ioff := int(off) + if len(out) < dstEvery*3+ioff { + d.bufs.Put(buf) + return nil, errors.New("corruption detected: stream overrun 3") + } + copy(out, buf[0][:off]) + copy(out[dstEvery:], buf[1][:off]) + copy(out[dstEvery*2:], buf[2][:off]) + copy(out[dstEvery*3:], buf[3][:off]) + decoded += int(off) * 4 + out = out[off:] + } + + // Decode remaining. + remainBytes := dstEvery - (decoded / 4) + for i := range br { + offset := dstEvery * i + endsAt := offset + remainBytes + if endsAt > len(out) { + endsAt = len(out) + } + br := &br[i] + bitsLeft := br.remaining() + for bitsLeft > 0 { + br.fill() + if offset >= endsAt { + d.bufs.Put(buf) + return nil, errors.New("corruption detected: stream overrun 4") + } + + // Read value and increment offset. + val := br.peekBitsFast(d.actualTableLog) + v := single[val&tlMask].entry + nBits := uint8(v) + br.advance(nBits) + bitsLeft -= uint(nBits) + out[offset] = uint8(v >> 8) + offset++ + } + if offset != endsAt { + d.bufs.Put(buf) + return nil, fmt.Errorf("corruption detected: short output block %d, end %d != %d", i, offset, endsAt) + } + decoded += offset - dstEvery*i + err = br.close() + if err != nil { + return nil, err + } + } + d.bufs.Put(buf) + if dstSize != decoded { + return nil, errors.New("corruption detected: short output block") + } + return dst, nil +} + +// Decompress1X will decompress a 1X encoded stream. +// The cap of the output buffer will be the maximum decompressed size. +// The length of the supplied input must match the end of a block exactly. +func (d *Decoder) Decompress1X(dst, src []byte) ([]byte, error) { + if len(d.dt.single) == 0 { + return nil, errors.New("no table loaded") + } + if use8BitTables && d.actualTableLog <= 8 { + return d.decompress1X8Bit(dst, src) + } + var br bitReaderShifted + err := br.init(src) + if err != nil { + return dst, err + } + maxDecodedSize := cap(dst) + dst = dst[:0] + + // Avoid bounds check by always having full sized table. + const tlSize = 1 << tableLogMax + const tlMask = tlSize - 1 + dt := d.dt.single[:tlSize] + + // Use temp table to avoid bound checks/append penalty. + bufs := d.buffer() + buf := &bufs[0] + var off uint8 + + for br.off >= 8 { + br.fillFast() + v := dt[br.peekBitsFast(d.actualTableLog)&tlMask] + br.advance(uint8(v.entry)) + buf[off+0] = uint8(v.entry >> 8) + + v = dt[br.peekBitsFast(d.actualTableLog)&tlMask] + br.advance(uint8(v.entry)) + buf[off+1] = uint8(v.entry >> 8) + + // Refill + br.fillFast() + + v = dt[br.peekBitsFast(d.actualTableLog)&tlMask] + br.advance(uint8(v.entry)) + buf[off+2] = uint8(v.entry >> 8) + + v = dt[br.peekBitsFast(d.actualTableLog)&tlMask] + br.advance(uint8(v.entry)) + buf[off+3] = uint8(v.entry >> 8) + + off += 4 + if off == 0 { + if len(dst)+256 > maxDecodedSize { + br.close() + d.bufs.Put(bufs) + return nil, ErrMaxDecodedSizeExceeded + } + dst = append(dst, buf[:]...) + } + } + + if len(dst)+int(off) > maxDecodedSize { + d.bufs.Put(bufs) + br.close() + return nil, ErrMaxDecodedSizeExceeded + } + dst = append(dst, buf[:off]...) + + // br < 8, so uint8 is fine + bitsLeft := uint8(br.off)*8 + 64 - br.bitsRead + for bitsLeft > 0 { + br.fill() + if false && br.bitsRead >= 32 { + if br.off >= 4 { + v := br.in[br.off-4:] + v = v[:4] + low := (uint32(v[0])) | (uint32(v[1]) << 8) | (uint32(v[2]) << 16) | (uint32(v[3]) << 24) + br.value = (br.value << 32) | uint64(low) + br.bitsRead -= 32 + br.off -= 4 + } else { + for br.off > 0 { + br.value = (br.value << 8) | uint64(br.in[br.off-1]) + br.bitsRead -= 8 + br.off-- + } + } + } + if len(dst) >= maxDecodedSize { + d.bufs.Put(bufs) + br.close() + return nil, ErrMaxDecodedSizeExceeded + } + v := d.dt.single[br.peekBitsFast(d.actualTableLog)&tlMask] + nBits := uint8(v.entry) + br.advance(nBits) + bitsLeft -= nBits + dst = append(dst, uint8(v.entry>>8)) + } + d.bufs.Put(bufs) + return dst, br.close() +} diff --git a/vendor/github.com/klauspost/compress/huff0/huff0.go b/vendor/github.com/klauspost/compress/huff0/huff0.go index 3ee00ecb47..e8ad17ad08 100644 --- a/vendor/github.com/klauspost/compress/huff0/huff0.go +++ b/vendor/github.com/klauspost/compress/huff0/huff0.go @@ -8,6 +8,7 @@ import ( "fmt" "math" "math/bits" + "sync" "github.com/klauspost/compress/fse" ) @@ -116,6 +117,7 @@ type Scratch struct { nodes []nodeElt tmpOut [4][]byte fse *fse.Scratch + decPool sync.Pool // *[4][256]byte buffers. huffWeight [maxSymbolValue + 1]byte } diff --git a/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo.go b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo.go new file mode 100644 index 0000000000..3954c51219 --- /dev/null +++ b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo.go @@ -0,0 +1,34 @@ +// Package cpuinfo gives runtime info about the current CPU. +// +// This is a very limited module meant for use internally +// in this project. For more versatile solution check +// https://github.com/klauspost/cpuid. +package cpuinfo + +// HasBMI1 checks whether an x86 CPU supports the BMI1 extension. +func HasBMI1() bool { + return hasBMI1 +} + +// HasBMI2 checks whether an x86 CPU supports the BMI2 extension. +func HasBMI2() bool { + return hasBMI2 +} + +// DisableBMI2 will disable BMI2, for testing purposes. +// Call returned function to restore previous state. +func DisableBMI2() func() { + old := hasBMI2 + hasBMI2 = false + return func() { + hasBMI2 = old + } +} + +// HasBMI checks whether an x86 CPU supports both BMI1 and BMI2 extensions. +func HasBMI() bool { + return HasBMI1() && HasBMI2() +} + +var hasBMI1 bool +var hasBMI2 bool diff --git a/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go new file mode 100644 index 0000000000..e802579c4f --- /dev/null +++ b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.go @@ -0,0 +1,11 @@ +//go:build amd64 && !appengine && !noasm && gc +// +build amd64,!appengine,!noasm,gc + +package cpuinfo + +// go:noescape +func x86extensions() (bmi1, bmi2 bool) + +func init() { + hasBMI1, hasBMI2 = x86extensions() +} diff --git a/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s new file mode 100644 index 0000000000..4465fbe9e9 --- /dev/null +++ b/vendor/github.com/klauspost/compress/internal/cpuinfo/cpuinfo_amd64.s @@ -0,0 +1,36 @@ +// +build !appengine +// +build gc +// +build !noasm + +#include "textflag.h" +#include "funcdata.h" +#include "go_asm.h" + +TEXT ·x86extensions(SB), NOSPLIT, $0 + // 1. determine max EAX value + XORQ AX, AX + CPUID + + CMPQ AX, $7 + JB unsupported + + // 2. EAX = 7, ECX = 0 --- see Table 3-8 "Information Returned by CPUID Instruction" + MOVQ $7, AX + MOVQ $0, CX + CPUID + + BTQ $3, BX // bit 3 = BMI1 + SETCS AL + + BTQ $8, BX // bit 8 = BMI2 + SETCS AH + + MOVB AL, bmi1+0(FP) + MOVB AH, bmi2+1(FP) + RET + +unsupported: + XORQ AX, AX + MOVB AL, bmi1+0(FP) + MOVB AL, bmi2+1(FP) + RET diff --git a/vendor/github.com/klauspost/compress/zstd/README.md b/vendor/github.com/klauspost/compress/zstd/README.md index c8f0f16fc1..beb7fa8720 100644 --- a/vendor/github.com/klauspost/compress/zstd/README.md +++ b/vendor/github.com/klauspost/compress/zstd/README.md @@ -78,6 +78,9 @@ of a stream. This is independent of the `WithEncoderConcurrency(n)`, but that is in the future. So if you want to limit concurrency for future updates, specify the concurrency you would like. +If you would like stream encoding to be done without spawning async goroutines, use `WithEncoderConcurrency(1)` +which will compress input as each block is completed, blocking on writes until each has completed. + You can specify your desired compression level using `WithEncoderLevel()` option. Currently only pre-defined compression settings can be specified. @@ -104,7 +107,8 @@ and seems to ignore concatenated streams, even though [it is part of the spec](h For compressing small blocks, the returned encoder has a function called `EncodeAll(src, dst []byte) []byte`. `EncodeAll` will encode all input in src and append it to dst. -This function can be called concurrently, but each call will only run on a single goroutine. +This function can be called concurrently. +Each call will only run on a same goroutine as the caller. Encoded blocks can be concatenated and the result will be the combined input stream. Data compressed with EncodeAll can be decoded with the Decoder, using either a stream or `DecodeAll`. @@ -149,10 +153,10 @@ http://sun.aei.polsl.pl/~sdeor/corpus/silesia.zip This package: file out level insize outsize millis mb/s -silesia.tar zskp 1 211947520 73101992 643 313.87 -silesia.tar zskp 2 211947520 67504318 969 208.38 -silesia.tar zskp 3 211947520 64595893 2007 100.68 -silesia.tar zskp 4 211947520 60995370 8825 22.90 +silesia.tar zskp 1 211947520 73821326 634 318.47 +silesia.tar zskp 2 211947520 67655404 1508 133.96 +silesia.tar zskp 3 211947520 64746933 3000 67.37 +silesia.tar zskp 4 211947520 60073508 16926 11.94 cgo zstd: silesia.tar zstd 1 211947520 73605392 543 371.56 @@ -161,94 +165,94 @@ silesia.tar zstd 6 211947520 62916450 1913 105.66 silesia.tar zstd 9 211947520 60212393 5063 39.92 gzip, stdlib/this package: -silesia.tar gzstd 1 211947520 80007735 1654 122.21 -silesia.tar gzkp 1 211947520 80136201 1152 175.45 +silesia.tar gzstd 1 211947520 80007735 1498 134.87 +silesia.tar gzkp 1 211947520 80088272 1009 200.31 GOB stream of binary data. Highly compressible. https://files.klauspost.com/compress/gob-stream.7z file out level insize outsize millis mb/s -gob-stream zskp 1 1911399616 235022249 3088 590.30 -gob-stream zskp 2 1911399616 205669791 3786 481.34 -gob-stream zskp 3 1911399616 175034659 9636 189.17 -gob-stream zskp 4 1911399616 165609838 50369 36.19 +gob-stream zskp 1 1911399616 233948096 3230 564.34 +gob-stream zskp 2 1911399616 203997694 4997 364.73 +gob-stream zskp 3 1911399616 173526523 13435 135.68 +gob-stream zskp 4 1911399616 162195235 47559 38.33 gob-stream zstd 1 1911399616 249810424 2637 691.26 gob-stream zstd 3 1911399616 208192146 3490 522.31 gob-stream zstd 6 1911399616 193632038 6687 272.56 gob-stream zstd 9 1911399616 177620386 16175 112.70 -gob-stream gzstd 1 1911399616 357382641 10251 177.82 -gob-stream gzkp 1 1911399616 359753026 5438 335.20 +gob-stream gzstd 1 1911399616 357382013 9046 201.49 +gob-stream gzkp 1 1911399616 359136669 4885 373.08 The test data for the Large Text Compression Benchmark is the first 10^9 bytes of the English Wikipedia dump on Mar. 3, 2006. http://mattmahoney.net/dc/textdata.html file out level insize outsize millis mb/s -enwik9 zskp 1 1000000000 343848582 3609 264.18 -enwik9 zskp 2 1000000000 317276632 5746 165.97 -enwik9 zskp 3 1000000000 292243069 12162 78.41 -enwik9 zskp 4 1000000000 262183768 82837 11.51 +enwik9 zskp 1 1000000000 343833605 3687 258.64 +enwik9 zskp 2 1000000000 317001237 7672 124.29 +enwik9 zskp 3 1000000000 291915823 15923 59.89 +enwik9 zskp 4 1000000000 261710291 77697 12.27 enwik9 zstd 1 1000000000 358072021 3110 306.65 enwik9 zstd 3 1000000000 313734672 4784 199.35 enwik9 zstd 6 1000000000 295138875 10290 92.68 enwik9 zstd 9 1000000000 278348700 28549 33.40 -enwik9 gzstd 1 1000000000 382578136 9604 99.30 -enwik9 gzkp 1 1000000000 383825945 6544 145.73 +enwik9 gzstd 1 1000000000 382578136 8608 110.78 +enwik9 gzkp 1 1000000000 382781160 5628 169.45 Highly compressible JSON file. https://files.klauspost.com/compress/github-june-2days-2019.json.zst file out level insize outsize millis mb/s -github-june-2days-2019.json zskp 1 6273951764 699045015 10620 563.40 -github-june-2days-2019.json zskp 2 6273951764 617881763 11687 511.96 -github-june-2days-2019.json zskp 3 6273951764 524340691 34043 175.75 -github-june-2days-2019.json zskp 4 6273951764 470320075 170190 35.16 +github-june-2days-2019.json zskp 1 6273951764 697439532 9789 611.17 +github-june-2days-2019.json zskp 2 6273951764 610876538 18553 322.49 +github-june-2days-2019.json zskp 3 6273951764 517662858 44186 135.41 +github-june-2days-2019.json zskp 4 6273951764 464617114 165373 36.18 github-june-2days-2019.json zstd 1 6273951764 766284037 8450 708.00 github-june-2days-2019.json zstd 3 6273951764 661889476 10927 547.57 github-june-2days-2019.json zstd 6 6273951764 642756859 22996 260.18 github-june-2days-2019.json zstd 9 6273951764 601974523 52413 114.16 -github-june-2days-2019.json gzstd 1 6273951764 1164400847 29948 199.79 -github-june-2days-2019.json gzkp 1 6273951764 1125417694 21788 274.61 +github-june-2days-2019.json gzstd 1 6273951764 1164397768 26793 223.32 +github-june-2days-2019.json gzkp 1 6273951764 1120631856 17693 338.16 VM Image, Linux mint with a few installed applications: https://files.klauspost.com/compress/rawstudio-mint14.7z file out level insize outsize millis mb/s -rawstudio-mint14.tar zskp 1 8558382592 3667489370 20210 403.84 -rawstudio-mint14.tar zskp 2 8558382592 3364592300 31873 256.07 -rawstudio-mint14.tar zskp 3 8558382592 3158085214 77675 105.08 -rawstudio-mint14.tar zskp 4 8558382592 2965110639 857750 9.52 +rawstudio-mint14.tar zskp 1 8558382592 3718400221 18206 448.29 +rawstudio-mint14.tar zskp 2 8558382592 3326118337 37074 220.15 +rawstudio-mint14.tar zskp 3 8558382592 3163842361 87306 93.49 +rawstudio-mint14.tar zskp 4 8558382592 2970480650 783862 10.41 rawstudio-mint14.tar zstd 1 8558382592 3609250104 17136 476.27 rawstudio-mint14.tar zstd 3 8558382592 3341679997 29262 278.92 rawstudio-mint14.tar zstd 6 8558382592 3235846406 77904 104.77 rawstudio-mint14.tar zstd 9 8558382592 3160778861 140946 57.91 -rawstudio-mint14.tar gzstd 1 8558382592 3926257486 57722 141.40 -rawstudio-mint14.tar gzkp 1 8558382592 3962605659 45113 180.92 +rawstudio-mint14.tar gzstd 1 8558382592 3926234992 51345 158.96 +rawstudio-mint14.tar gzkp 1 8558382592 3960117298 36722 222.26 CSV data: https://files.klauspost.com/compress/nyc-taxi-data-10M.csv.zst file out level insize outsize millis mb/s -nyc-taxi-data-10M.csv zskp 1 3325605752 641339945 8925 355.35 -nyc-taxi-data-10M.csv zskp 2 3325605752 591748091 11268 281.44 -nyc-taxi-data-10M.csv zskp 3 3325605752 530289687 25239 125.66 -nyc-taxi-data-10M.csv zskp 4 3325605752 476268884 135958 23.33 +nyc-taxi-data-10M.csv zskp 1 3325605752 641319332 9462 335.17 +nyc-taxi-data-10M.csv zskp 2 3325605752 588976126 17570 180.50 +nyc-taxi-data-10M.csv zskp 3 3325605752 529329260 32432 97.79 +nyc-taxi-data-10M.csv zskp 4 3325605752 474949772 138025 22.98 nyc-taxi-data-10M.csv zstd 1 3325605752 687399637 8233 385.18 nyc-taxi-data-10M.csv zstd 3 3325605752 598514411 10065 315.07 nyc-taxi-data-10M.csv zstd 6 3325605752 570522953 20038 158.27 nyc-taxi-data-10M.csv zstd 9 3325605752 517554797 64565 49.12 -nyc-taxi-data-10M.csv gzstd 1 3325605752 928656485 23876 132.83 -nyc-taxi-data-10M.csv gzkp 1 3325605752 922257165 16780 189.00 +nyc-taxi-data-10M.csv gzstd 1 3325605752 928654908 21270 149.11 +nyc-taxi-data-10M.csv gzkp 1 3325605752 922273214 13929 227.68 ``` ## Decompressor @@ -283,8 +287,13 @@ func Decompress(in io.Reader, out io.Writer) error { } ``` -It is important to use the "Close" function when you no longer need the Reader to stop running goroutines. -See "Allocation-less operation" below. +It is important to use the "Close" function when you no longer need the Reader to stop running goroutines, +when running with default settings. +Goroutines will exit once an error has been returned, including `io.EOF` at the end of a stream. + +Streams are decoded concurrently in 4 asynchronous stages to give the best possible throughput. +However, if you prefer synchronous decompression, use `WithDecoderConcurrency(1)` which will decompress data +as it is being requested only. For decoding buffers, it could look something like this: @@ -293,7 +302,7 @@ import "github.com/klauspost/compress/zstd" // Create a reader that caches decompressors. // For this operation type we supply a nil Reader. -var decoder, _ = zstd.NewReader(nil) +var decoder, _ = zstd.NewReader(nil, WithDecoderConcurrency(0)) // Decompress a buffer. We don't supply a destination buffer, // so it will be allocated by the decoder. @@ -303,9 +312,12 @@ func Decompress(src []byte) ([]byte, error) { ``` Both of these cases should provide the functionality needed. -The decoder can be used for *concurrent* decompression of multiple buffers. +The decoder can be used for *concurrent* decompression of multiple buffers. +By default 4 decompressors will be created. + It will only allow a certain number of concurrent operations to run. -To tweak that yourself use the `WithDecoderConcurrency(n)` option when creating the decoder. +To tweak that yourself use the `WithDecoderConcurrency(n)` option when creating the decoder. +It is possible to use `WithDecoderConcurrency(0)` to create GOMAXPROCS decoders. ### Dictionaries @@ -357,62 +369,48 @@ In this case no unneeded allocations should be made. The buffer decoder does everything on the same goroutine and does nothing concurrently. It can however decode several buffers concurrently. Use `WithDecoderConcurrency(n)` to limit that. -The stream decoder operates on +The stream decoder will create goroutines that: -* One goroutine reads input and splits the input to several block decoders. -* A number of decoders will decode blocks. -* A goroutine coordinates these blocks and sends history from one to the next. +1) Reads input and splits the input into blocks. +2) Decompression of literals. +3) Decompression of sequences. +4) Reconstruction of output stream. So effectively this also means the decoder will "read ahead" and prepare data to always be available for output. +The concurrency level will, for streams, determine how many blocks ahead the compression will start. + Since "blocks" are quite dependent on the output of the previous block stream decoding will only have limited concurrency. -In practice this means that concurrency is often limited to utilizing about 2 cores effectively. - - +In practice this means that concurrency is often limited to utilizing about 3 cores effectively. + ### Benchmarks -These are some examples of performance compared to [datadog cgo library](https://github.com/DataDog/zstd). - The first two are streaming decodes and the last are smaller inputs. - + +Running on AMD Ryzen 9 3950X 16-Core Processor. AMD64 assembly used. + ``` -BenchmarkDecoderSilesia-8 3 385000067 ns/op 550.51 MB/s 5498 B/op 8 allocs/op -BenchmarkDecoderSilesiaCgo-8 6 197666567 ns/op 1072.25 MB/s 270672 B/op 8 allocs/op - -BenchmarkDecoderEnwik9-8 1 2027001600 ns/op 493.34 MB/s 10496 B/op 18 allocs/op -BenchmarkDecoderEnwik9Cgo-8 2 979499200 ns/op 1020.93 MB/s 270672 B/op 8 allocs/op - -Concurrent performance: - -BenchmarkDecoder_DecodeAllParallel/kppkn.gtb.zst-16 28915 42469 ns/op 4340.07 MB/s 114 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/geo.protodata.zst-16 116505 9965 ns/op 11900.16 MB/s 16 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/plrabn12.txt.zst-16 8952 134272 ns/op 3588.70 MB/s 915 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/lcet10.txt.zst-16 11820 102538 ns/op 4161.90 MB/s 594 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/asyoulik.txt.zst-16 34782 34184 ns/op 3661.88 MB/s 60 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/alice29.txt.zst-16 27712 43447 ns/op 3500.58 MB/s 99 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/html_x_4.zst-16 62826 18750 ns/op 21845.10 MB/s 104 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/paper-100k.pdf.zst-16 631545 1794 ns/op 57078.74 MB/s 2 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/fireworks.jpeg.zst-16 1690140 712 ns/op 172938.13 MB/s 1 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/urls.10K.zst-16 10432 113593 ns/op 6180.73 MB/s 1143 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/html.zst-16 113206 10671 ns/op 9596.27 MB/s 15 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallel/comp-data.bin.zst-16 1530615 779 ns/op 5229.49 MB/s 0 B/op 0 allocs/op - -BenchmarkDecoder_DecodeAllParallelCgo/kppkn.gtb.zst-16 65217 16192 ns/op 11383.34 MB/s 46 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/geo.protodata.zst-16 292671 4039 ns/op 29363.19 MB/s 6 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/plrabn12.txt.zst-16 26314 46021 ns/op 10470.43 MB/s 293 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/lcet10.txt.zst-16 33897 34900 ns/op 12227.96 MB/s 205 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/asyoulik.txt.zst-16 104348 11433 ns/op 10949.01 MB/s 20 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/alice29.txt.zst-16 75949 15510 ns/op 9805.60 MB/s 32 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/html_x_4.zst-16 173910 6756 ns/op 60624.29 MB/s 37 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/paper-100k.pdf.zst-16 923076 1339 ns/op 76474.87 MB/s 1 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/fireworks.jpeg.zst-16 922920 1351 ns/op 91102.57 MB/s 2 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/urls.10K.zst-16 27649 43618 ns/op 16096.19 MB/s 407 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/html.zst-16 279073 4160 ns/op 24614.18 MB/s 6 B/op 0 allocs/op -BenchmarkDecoder_DecodeAllParallelCgo/comp-data.bin.zst-16 749938 1579 ns/op 2581.71 MB/s 0 B/op 0 allocs/op +BenchmarkDecoderSilesia-32 5 206878840 ns/op 1024.50 MB/s 49808 B/op 43 allocs/op +BenchmarkDecoderEnwik9-32 1 1271809000 ns/op 786.28 MB/s 72048 B/op 52 allocs/op + +Concurrent blocks, performance: + +BenchmarkDecoder_DecodeAllParallel/kppkn.gtb.zst-32 67356 17857 ns/op 10321.96 MB/s 22.48 pct 102 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/geo.protodata.zst-32 266656 4421 ns/op 26823.21 MB/s 11.89 pct 19 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/plrabn12.txt.zst-32 20992 56842 ns/op 8477.17 MB/s 39.90 pct 754 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/lcet10.txt.zst-32 27456 43932 ns/op 9714.01 MB/s 33.27 pct 524 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/asyoulik.txt.zst-32 78432 15047 ns/op 8319.15 MB/s 40.34 pct 66 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/alice29.txt.zst-32 65800 18436 ns/op 8249.63 MB/s 37.75 pct 88 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/html_x_4.zst-32 102993 11523 ns/op 35546.09 MB/s 3.637 pct 143 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/paper-100k.pdf.zst-32 1000000 1070 ns/op 95720.98 MB/s 80.53 pct 3 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/fireworks.jpeg.zst-32 749802 1752 ns/op 70272.35 MB/s 100.0 pct 5 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/urls.10K.zst-32 22640 52934 ns/op 13263.37 MB/s 26.25 pct 1014 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/html.zst-32 226412 5232 ns/op 19572.27 MB/s 14.49 pct 20 B/op 0 allocs/op +BenchmarkDecoder_DecodeAllParallel/comp-data.bin.zst-32 923041 1276 ns/op 3194.71 MB/s 31.26 pct 0 B/op 0 allocs/op ``` -This reflects the performance around May 2020, but this may be out of date. +This reflects the performance around May 2022, but this may be out of date. ## Zstd inside ZIP files diff --git a/vendor/github.com/klauspost/compress/zstd/bitreader.go b/vendor/github.com/klauspost/compress/zstd/bitreader.go index 753d17df63..97299d499c 100644 --- a/vendor/github.com/klauspost/compress/zstd/bitreader.go +++ b/vendor/github.com/klauspost/compress/zstd/bitreader.go @@ -7,6 +7,7 @@ package zstd import ( "encoding/binary" "errors" + "fmt" "io" "math/bits" ) @@ -62,13 +63,6 @@ func (b *bitReader) get32BitsFast(n uint8) uint32 { return v } -func (b *bitReader) get16BitsFast(n uint8) uint16 { - const regMask = 64 - 1 - v := uint16((b.value << (b.bitsRead & regMask)) >> ((regMask + 1 - n) & regMask)) - b.bitsRead += n - return v -} - // fillFast() will make sure at least 32 bits are available. // There must be at least 4 bytes available. func (b *bitReader) fillFast() { @@ -132,6 +126,9 @@ func (b *bitReader) remain() uint { func (b *bitReader) close() error { // Release reference. b.in = nil + if !b.finished() { + return fmt.Errorf("%d extra bits on block, should be 0", b.remain()) + } if b.bitsRead > 64 { return io.ErrUnexpectedEOF } diff --git a/vendor/github.com/klauspost/compress/zstd/bitwriter.go b/vendor/github.com/klauspost/compress/zstd/bitwriter.go index b366182850..78b3c61be3 100644 --- a/vendor/github.com/klauspost/compress/zstd/bitwriter.go +++ b/vendor/github.com/klauspost/compress/zstd/bitwriter.go @@ -5,8 +5,6 @@ package zstd -import "fmt" - // bitWriter will write bits. // First bit will be LSB of the first byte of output. type bitWriter struct { @@ -73,80 +71,6 @@ func (b *bitWriter) addBits16Clean(value uint16, bits uint8) { b.nBits += bits } -// flush will flush all pending full bytes. -// There will be at least 56 bits available for writing when this has been called. -// Using flush32 is faster, but leaves less space for writing. -func (b *bitWriter) flush() { - v := b.nBits >> 3 - switch v { - case 0: - case 1: - b.out = append(b.out, - byte(b.bitContainer), - ) - case 2: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - ) - case 3: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - ) - case 4: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - ) - case 5: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - byte(b.bitContainer>>32), - ) - case 6: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - byte(b.bitContainer>>32), - byte(b.bitContainer>>40), - ) - case 7: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - byte(b.bitContainer>>32), - byte(b.bitContainer>>40), - byte(b.bitContainer>>48), - ) - case 8: - b.out = append(b.out, - byte(b.bitContainer), - byte(b.bitContainer>>8), - byte(b.bitContainer>>16), - byte(b.bitContainer>>24), - byte(b.bitContainer>>32), - byte(b.bitContainer>>40), - byte(b.bitContainer>>48), - byte(b.bitContainer>>56), - ) - default: - panic(fmt.Errorf("bits (%d) > 64", b.nBits)) - } - b.bitContainer >>= v << 3 - b.nBits &= 7 -} - // flush32 will flush out, so there are at least 32 bits available for writing. func (b *bitWriter) flush32() { if b.nBits < 32 { diff --git a/vendor/github.com/klauspost/compress/zstd/blockdec.go b/vendor/github.com/klauspost/compress/zstd/blockdec.go index dc587b2c94..7eed729be2 100644 --- a/vendor/github.com/klauspost/compress/zstd/blockdec.go +++ b/vendor/github.com/klauspost/compress/zstd/blockdec.go @@ -5,9 +5,14 @@ package zstd import ( + "bytes" + "encoding/binary" "errors" "fmt" "io" + "io/ioutil" + "os" + "path/filepath" "sync" "github.com/klauspost/compress/huff0" @@ -38,14 +43,14 @@ const ( // maxCompressedBlockSize is the biggest allowed compressed block size (128KB) maxCompressedBlockSize = 128 << 10 + compressedBlockOverAlloc = 16 + maxCompressedBlockSizeAlloc = 128<<10 + compressedBlockOverAlloc + // Maximum possible block size (all Raw+Uncompressed). maxBlockSize = (1 << 21) - 1 - // https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#literals_section_header - maxCompressedLiteralSize = 1 << 18 - maxRLELiteralSize = 1 << 20 - maxMatchLen = 131074 - maxSequences = 0x7f00 + 0xffff + maxMatchLen = 131074 + maxSequences = 0x7f00 + 0xffff // We support slightly less than the reference decoder to be able to // use ints on 32 bit archs. @@ -76,19 +81,27 @@ type blockDec struct { // Window size of the block. WindowSize uint64 - history chan *history - input chan struct{} - result chan decodeOutput - err error - decWG sync.WaitGroup + err error + + // Check against this crc + checkCRC []byte // Frame to use for singlethreaded decoding. // Should not be used by the decoder itself since parent may be another frame. localFrame *frameDec + sequence []seqVals + + async struct { + newHist *history + literals []byte + seqData []byte + seqSize int // Size of uncompressed sequences + fcs uint64 + } + // Block is RLE, this is the size. RLESize uint32 - tmp [4]byte Type blockType @@ -108,13 +121,8 @@ func (b *blockDec) String() string { func newBlockDec(lowMem bool) *blockDec { b := blockDec{ - lowMem: lowMem, - result: make(chan decodeOutput, 1), - input: make(chan struct{}, 1), - history: make(chan *history, 1), + lowMem: lowMem, } - b.decWG.Add(1) - go b.startDecoder() return &b } @@ -132,11 +140,17 @@ func (b *blockDec) reset(br byteBuffer, windowSize uint64) error { b.Type = blockType((bh >> 1) & 3) // find size. cSize := int(bh >> 3) - maxSize := maxBlockSize + maxSize := maxCompressedBlockSizeAlloc switch b.Type { case blockTypeReserved: return ErrReservedBlockType case blockTypeRLE: + if cSize > maxCompressedBlockSize || cSize > int(b.WindowSize) { + if debugDecoder { + printf("rle block too big: csize:%d block: %+v\n", uint64(cSize), b) + } + return ErrWindowSizeExceeded + } b.RLESize = uint32(cSize) if b.lowMem { maxSize = cSize @@ -147,9 +161,9 @@ func (b *blockDec) reset(br byteBuffer, windowSize uint64) error { println("Data size on stream:", cSize) } b.RLESize = 0 - maxSize = maxCompressedBlockSize + maxSize = maxCompressedBlockSizeAlloc if windowSize < maxCompressedBlockSize && b.lowMem { - maxSize = int(windowSize) + maxSize = int(windowSize) + compressedBlockOverAlloc } if cSize > maxCompressedBlockSize || uint64(cSize) > b.WindowSize { if debugDecoder { @@ -157,7 +171,19 @@ func (b *blockDec) reset(br byteBuffer, windowSize uint64) error { } return ErrCompressedSizeTooBig } + // Empty compressed blocks must at least be 2 bytes + // for Literals_Block_Type and one for Sequences_Section_Header. + if cSize < 2 { + return ErrBlockTooSmall + } case blockTypeRaw: + if cSize > maxCompressedBlockSize || cSize > int(b.WindowSize) { + if debugDecoder { + printf("rle block too big: csize:%d block: %+v\n", uint64(cSize), b) + } + return ErrWindowSizeExceeded + } + b.RLESize = 0 // We do not need a destination for raw blocks. maxSize = -1 @@ -168,9 +194,9 @@ func (b *blockDec) reset(br byteBuffer, windowSize uint64) error { // Read block data. if cap(b.dataStorage) < cSize { if b.lowMem || cSize > maxCompressedBlockSize { - b.dataStorage = make([]byte, 0, cSize) + b.dataStorage = make([]byte, 0, cSize+compressedBlockOverAlloc) } else { - b.dataStorage = make([]byte, 0, maxCompressedBlockSize) + b.dataStorage = make([]byte, 0, maxCompressedBlockSizeAlloc) } } if cap(b.dst) <= maxSize { @@ -192,85 +218,14 @@ func (b *blockDec) sendErr(err error) { b.Last = true b.Type = blockTypeReserved b.err = err - b.input <- struct{}{} } // Close will release resources. // Closed blockDec cannot be reset. func (b *blockDec) Close() { - close(b.input) - close(b.history) - close(b.result) - b.decWG.Wait() -} - -// decodeAsync will prepare decoding the block when it receives input. -// This will separate output and history. -func (b *blockDec) startDecoder() { - defer b.decWG.Done() - for range b.input { - //println("blockDec: Got block input") - switch b.Type { - case blockTypeRLE: - if cap(b.dst) < int(b.RLESize) { - if b.lowMem { - b.dst = make([]byte, b.RLESize) - } else { - b.dst = make([]byte, maxBlockSize) - } - } - o := decodeOutput{ - d: b, - b: b.dst[:b.RLESize], - err: nil, - } - v := b.data[0] - for i := range o.b { - o.b[i] = v - } - hist := <-b.history - hist.append(o.b) - b.result <- o - case blockTypeRaw: - o := decodeOutput{ - d: b, - b: b.data, - err: nil, - } - hist := <-b.history - hist.append(o.b) - b.result <- o - case blockTypeCompressed: - b.dst = b.dst[:0] - err := b.decodeCompressed(nil) - o := decodeOutput{ - d: b, - b: b.dst, - err: err, - } - if debugDecoder { - println("Decompressed to", len(b.dst), "bytes, error:", err) - } - b.result <- o - case blockTypeReserved: - // Used for returning errors. - <-b.history - b.result <- decodeOutput{ - d: b, - b: nil, - err: b.err, - } - default: - panic("Invalid block type") - } - if debugDecoder { - println("blockDec: Finished block") - } - } } -// decodeAsync will prepare decoding the block when it receives the history. -// If history is provided, it will not fetch it from the channel. +// decodeBuf func (b *blockDec) decodeBuf(hist *history) error { switch b.Type { case blockTypeRLE: @@ -293,14 +248,23 @@ func (b *blockDec) decodeBuf(hist *history) error { return nil case blockTypeCompressed: saved := b.dst - b.dst = hist.b - hist.b = nil + // Append directly to history + if hist.ignoreBuffer == 0 { + b.dst = hist.b + hist.b = nil + } else { + b.dst = b.dst[:0] + } err := b.decodeCompressed(hist) if debugDecoder { println("Decompressed to total", len(b.dst), "bytes, hash:", xxhash.Sum64(b.dst), "error:", err) } - hist.b = b.dst - b.dst = saved + if hist.ignoreBuffer == 0 { + hist.b = b.dst + b.dst = saved + } else { + hist.appendKeep(b.dst) + } return err case blockTypeReserved: // Used for returning errors. @@ -310,30 +274,18 @@ func (b *blockDec) decodeBuf(hist *history) error { } } -// decodeCompressed will start decompressing a block. -// If no history is supplied the decoder will decodeAsync as much as possible -// before fetching from blockDec.history -func (b *blockDec) decodeCompressed(hist *history) error { - in := b.data - delayedHistory := hist == nil - - if delayedHistory { - // We must always grab history. - defer func() { - if hist == nil { - <-b.history - } - }() - } +func (b *blockDec) decodeLiterals(in []byte, hist *history) (remain []byte, err error) { // There must be at least one byte for Literals_Block_Type and one for Sequences_Section_Header if len(in) < 2 { - return ErrBlockTooSmall + return in, ErrBlockTooSmall } + litType := literalsBlockType(in[0] & 3) var litRegenSize int var litCompSize int sizeFormat := (in[0] >> 2) & 3 var fourStreams bool + var literals []byte switch litType { case literalsBlockRaw, literalsBlockRLE: switch sizeFormat { @@ -349,7 +301,7 @@ func (b *blockDec) decodeCompressed(hist *history) error { // Regenerated_Size uses 20 bits (0-1048575). Literals_Section_Header uses 3 bytes. if len(in) < 3 { println("too small: litType:", litType, " sizeFormat", sizeFormat, len(in)) - return ErrBlockTooSmall + return in, ErrBlockTooSmall } litRegenSize = int(in[0]>>4) + (int(in[1]) << 4) + (int(in[2]) << 12) in = in[3:] @@ -360,7 +312,7 @@ func (b *blockDec) decodeCompressed(hist *history) error { // Both Regenerated_Size and Compressed_Size use 10 bits (0-1023). if len(in) < 3 { println("too small: litType:", litType, " sizeFormat", sizeFormat, len(in)) - return ErrBlockTooSmall + return in, ErrBlockTooSmall } n := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12) litRegenSize = int(n & 1023) @@ -371,7 +323,7 @@ func (b *blockDec) decodeCompressed(hist *history) error { fourStreams = true if len(in) < 4 { println("too small: litType:", litType, " sizeFormat", sizeFormat, len(in)) - return ErrBlockTooSmall + return in, ErrBlockTooSmall } n := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12) + (uint64(in[3]) << 20) litRegenSize = int(n & 16383) @@ -381,7 +333,7 @@ func (b *blockDec) decodeCompressed(hist *history) error { fourStreams = true if len(in) < 5 { println("too small: litType:", litType, " sizeFormat", sizeFormat, len(in)) - return ErrBlockTooSmall + return in, ErrBlockTooSmall } n := uint64(in[0]>>4) + (uint64(in[1]) << 4) + (uint64(in[2]) << 12) + (uint64(in[3]) << 20) + (uint64(in[4]) << 28) litRegenSize = int(n & 262143) @@ -392,13 +344,15 @@ func (b *blockDec) decodeCompressed(hist *history) error { if debugDecoder { println("literals type:", litType, "litRegenSize:", litRegenSize, "litCompSize:", litCompSize, "sizeFormat:", sizeFormat, "4X:", fourStreams) } - var literals []byte - var huff *huff0.Scratch + if litRegenSize > int(b.WindowSize) || litRegenSize > maxCompressedBlockSize { + return in, ErrWindowSizeExceeded + } + switch litType { case literalsBlockRaw: if len(in) < litRegenSize { println("too small: litType:", litType, " sizeFormat", sizeFormat, "remain:", len(in), "want:", litRegenSize) - return ErrBlockTooSmall + return in, ErrBlockTooSmall } literals = in[:litRegenSize] in = in[litRegenSize:] @@ -406,19 +360,13 @@ func (b *blockDec) decodeCompressed(hist *history) error { case literalsBlockRLE: if len(in) < 1 { println("too small: litType:", litType, " sizeFormat", sizeFormat, "remain:", len(in), "want:", 1) - return ErrBlockTooSmall + return in, ErrBlockTooSmall } if cap(b.literalBuf) < litRegenSize { if b.lowMem { - b.literalBuf = make([]byte, litRegenSize) + b.literalBuf = make([]byte, litRegenSize, litRegenSize+compressedBlockOverAlloc) } else { - if litRegenSize > maxCompressedLiteralSize { - // Exceptional - b.literalBuf = make([]byte, litRegenSize) - } else { - b.literalBuf = make([]byte, litRegenSize, maxCompressedLiteralSize) - - } + b.literalBuf = make([]byte, litRegenSize, maxCompressedBlockSize+compressedBlockOverAlloc) } } literals = b.literalBuf[:litRegenSize] @@ -433,7 +381,7 @@ func (b *blockDec) decodeCompressed(hist *history) error { case literalsBlockTreeless: if len(in) < litCompSize { println("too small: litType:", litType, " sizeFormat", sizeFormat, "remain:", len(in), "want:", litCompSize) - return ErrBlockTooSmall + return in, ErrBlockTooSmall } // Store compressed literals, so we defer decoding until we get history. literals = in[:litCompSize] @@ -441,31 +389,65 @@ func (b *blockDec) decodeCompressed(hist *history) error { if debugDecoder { printf("Found %d compressed literals\n", litCompSize) } + huff := hist.huffTree + if huff == nil { + return in, errors.New("literal block was treeless, but no history was defined") + } + // Ensure we have space to store it. + if cap(b.literalBuf) < litRegenSize { + if b.lowMem { + b.literalBuf = make([]byte, 0, litRegenSize+compressedBlockOverAlloc) + } else { + b.literalBuf = make([]byte, 0, maxCompressedBlockSize+compressedBlockOverAlloc) + } + } + var err error + // Use our out buffer. + huff.MaxDecodedSize = litRegenSize + if fourStreams { + literals, err = huff.Decoder().Decompress4X(b.literalBuf[:0:litRegenSize], literals) + } else { + literals, err = huff.Decoder().Decompress1X(b.literalBuf[:0:litRegenSize], literals) + } + // Make sure we don't leak our literals buffer + if err != nil { + println("decompressing literals:", err) + return in, err + } + if len(literals) != litRegenSize { + return in, fmt.Errorf("literal output size mismatch want %d, got %d", litRegenSize, len(literals)) + } + case literalsBlockCompressed: if len(in) < litCompSize { println("too small: litType:", litType, " sizeFormat", sizeFormat, "remain:", len(in), "want:", litCompSize) - return ErrBlockTooSmall + return in, ErrBlockTooSmall } literals = in[:litCompSize] in = in[litCompSize:] - huff = huffDecoderPool.Get().(*huff0.Scratch) - var err error // Ensure we have space to store it. if cap(b.literalBuf) < litRegenSize { if b.lowMem { - b.literalBuf = make([]byte, 0, litRegenSize) + b.literalBuf = make([]byte, 0, litRegenSize+compressedBlockOverAlloc) } else { - b.literalBuf = make([]byte, 0, maxCompressedLiteralSize) + b.literalBuf = make([]byte, 0, maxCompressedBlockSize+compressedBlockOverAlloc) } } - if huff == nil { - huff = &huff0.Scratch{} + huff := hist.huffTree + if huff == nil || (hist.dict != nil && huff == hist.dict.litEnc) { + huff = huffDecoderPool.Get().(*huff0.Scratch) + if huff == nil { + huff = &huff0.Scratch{} + } } + var err error huff, literals, err = huff0.ReadTable(literals, huff) if err != nil { println("reading huffman table:", err) - return err + return in, err } + hist.huffTree = huff + huff.MaxDecodedSize = litRegenSize // Use our out buffer. if fourStreams { literals, err = huff.Decoder().Decompress4X(b.literalBuf[:0:litRegenSize], literals) @@ -474,27 +456,63 @@ func (b *blockDec) decodeCompressed(hist *history) error { } if err != nil { println("decoding compressed literals:", err) - return err + return in, err } // Make sure we don't leak our literals buffer if len(literals) != litRegenSize { - return fmt.Errorf("literal output size mismatch want %d, got %d", litRegenSize, len(literals)) + return in, fmt.Errorf("literal output size mismatch want %d, got %d", litRegenSize, len(literals)) } + // Re-cap to get extra size. + literals = b.literalBuf[:len(literals)] if debugDecoder { printf("Decompressed %d literals into %d bytes\n", litCompSize, litRegenSize) } } + hist.decoders.literals = literals + return in, nil +} + +// decodeCompressed will start decompressing a block. +func (b *blockDec) decodeCompressed(hist *history) error { + in := b.data + in, err := b.decodeLiterals(in, hist) + if err != nil { + return err + } + err = b.prepareSequences(in, hist) + if err != nil { + return err + } + if hist.decoders.nSeqs == 0 { + b.dst = append(b.dst, hist.decoders.literals...) + return nil + } + before := len(hist.decoders.out) + err = hist.decoders.decodeSync(hist.b[hist.ignoreBuffer:]) + if err != nil { + return err + } + if hist.decoders.maxSyncLen > 0 { + hist.decoders.maxSyncLen += uint64(before) + hist.decoders.maxSyncLen -= uint64(len(hist.decoders.out)) + } + b.dst = hist.decoders.out + hist.recentOffsets = hist.decoders.prevOffset + return nil +} +func (b *blockDec) prepareSequences(in []byte, hist *history) (err error) { + if debugDecoder { + printf("prepareSequences: %d byte(s) input\n", len(in)) + } // Decode Sequences // https://github.com/facebook/zstd/blob/dev/doc/zstd_compression_format.md#sequences-section if len(in) < 1 { return ErrBlockTooSmall } + var nSeqs int seqHeader := in[0] - nSeqs := 0 switch { - case seqHeader == 0: - in = in[1:] case seqHeader < 128: nSeqs = int(seqHeader) in = in[1:] @@ -511,8 +529,16 @@ func (b *blockDec) decodeCompressed(hist *history) error { nSeqs = 0x7f00 + int(in[1]) + (int(in[2]) << 8) in = in[3:] } + if nSeqs == 0 && len(in) != 0 { + // When no sequences, there should not be any more data... + if debugDecoder { + printf("prepareSequences: 0 sequences, but %d byte(s) left on stream\n", len(in)) + } + return ErrUnexpectedBlockSize + } - var seqs = &sequenceDecs{} + var seqs = &hist.decoders + seqs.nSeqs = nSeqs if nSeqs > 0 { if len(in) < 1 { return ErrBlockTooSmall @@ -541,6 +567,9 @@ func (b *blockDec) decodeCompressed(hist *history) error { } switch mode { case compModePredefined: + if seq.fse != nil && !seq.fse.preDefined { + fseDecoderPool.Put(seq.fse) + } seq.fse = &fsePredef[i] case compModeRLE: if br.remain() < 1 { @@ -548,34 +577,36 @@ func (b *blockDec) decodeCompressed(hist *history) error { } v := br.Uint8() br.advance(1) - dec := fseDecoderPool.Get().(*fseDecoder) + if seq.fse == nil || seq.fse.preDefined { + seq.fse = fseDecoderPool.Get().(*fseDecoder) + } symb, err := decSymbolValue(v, symbolTableX[i]) if err != nil { printf("RLE Transform table (%v) error: %v", tableIndex(i), err) return err } - dec.setRLE(symb) - seq.fse = dec + seq.fse.setRLE(symb) if debugDecoder { printf("RLE set to %+v, code: %v", symb, v) } case compModeFSE: println("Reading table for", tableIndex(i)) - dec := fseDecoderPool.Get().(*fseDecoder) - err := dec.readNCount(&br, uint16(maxTableSymbol[i])) + if seq.fse == nil || seq.fse.preDefined { + seq.fse = fseDecoderPool.Get().(*fseDecoder) + } + err := seq.fse.readNCount(&br, uint16(maxTableSymbol[i])) if err != nil { println("Read table error:", err) return err } - err = dec.transform(symbolTableX[i]) + err = seq.fse.transform(symbolTableX[i]) if err != nil { println("Transform table error:", err) return err } if debugDecoder { - println("Read table ok", "symbolLen:", dec.symbolLen) + println("Read table ok", "symbolLen:", seq.fse.symbolLen) } - seq.fse = dec case compModeRepeat: seq.repeat = true } @@ -585,140 +616,106 @@ func (b *blockDec) decodeCompressed(hist *history) error { } in = br.unread() } - - // Wait for history. - // All time spent after this is critical since it is strictly sequential. - if hist == nil { - hist = <-b.history - if hist.error { - return ErrDecoderClosed - } - } - - // Decode treeless literal block. - if litType == literalsBlockTreeless { - // TODO: We could send the history early WITHOUT the stream history. - // This would allow decoding treeless literals before the byte history is available. - // Silencia stats: Treeless 4393, with: 32775, total: 37168, 11% treeless. - // So not much obvious gain here. - - if hist.huffTree == nil { - return errors.New("literal block was treeless, but no history was defined") - } - // Ensure we have space to store it. - if cap(b.literalBuf) < litRegenSize { - if b.lowMem { - b.literalBuf = make([]byte, 0, litRegenSize) - } else { - b.literalBuf = make([]byte, 0, maxCompressedLiteralSize) - } - } - var err error - // Use our out buffer. - huff = hist.huffTree - if fourStreams { - literals, err = huff.Decoder().Decompress4X(b.literalBuf[:0:litRegenSize], literals) - } else { - literals, err = huff.Decoder().Decompress1X(b.literalBuf[:0:litRegenSize], literals) - } - // Make sure we don't leak our literals buffer - if err != nil { - println("decompressing literals:", err) - return err - } - if len(literals) != litRegenSize { - return fmt.Errorf("literal output size mismatch want %d, got %d", litRegenSize, len(literals)) - } - } else { - if hist.huffTree != nil && huff != nil { - if hist.dict == nil || hist.dict.litEnc != hist.huffTree { - huffDecoderPool.Put(hist.huffTree) - } - hist.huffTree = nil - } - } - if huff != nil { - hist.huffTree = huff - } if debugDecoder { - println("Final literals:", len(literals), "hash:", xxhash.Sum64(literals), "and", nSeqs, "sequences.") + println("Literals:", len(seqs.literals), "hash:", xxhash.Sum64(seqs.literals), "and", seqs.nSeqs, "sequences.") } if nSeqs == 0 { - // Decompressed content is defined entirely as Literals Section content. - b.dst = append(b.dst, literals...) - if delayedHistory { - hist.append(literals) + if len(b.sequence) > 0 { + b.sequence = b.sequence[:0] } return nil } + br := seqs.br + if br == nil { + br = &bitReader{} + } + if err := br.init(in); err != nil { + return err + } - seqs, err := seqs.mergeHistory(&hist.decoders) - if err != nil { + if err := seqs.initialize(br, hist, b.dst); err != nil { + println("initializing sequences:", err) return err } - if debugDecoder { - println("History merged ok") + // Extract blocks... + if false && hist.dict == nil { + fatalErr := func(err error) { + if err != nil { + panic(err) + } + } + fn := fmt.Sprintf("n-%d-lits-%d-prev-%d-%d-%d-win-%d.blk", hist.decoders.nSeqs, len(hist.decoders.literals), hist.recentOffsets[0], hist.recentOffsets[1], hist.recentOffsets[2], hist.windowSize) + var buf bytes.Buffer + fatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.litLengths.fse)) + fatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.matchLengths.fse)) + fatalErr(binary.Write(&buf, binary.LittleEndian, hist.decoders.offsets.fse)) + buf.Write(in) + ioutil.WriteFile(filepath.Join("testdata", "seqs", fn), buf.Bytes(), os.ModePerm) } - br := &bitReader{} - if err := br.init(in); err != nil { - return err + + return nil +} + +func (b *blockDec) decodeSequences(hist *history) error { + if cap(b.sequence) < hist.decoders.nSeqs { + if b.lowMem { + b.sequence = make([]seqVals, 0, hist.decoders.nSeqs) + } else { + b.sequence = make([]seqVals, 0, 0x7F00+0xffff) + } } + b.sequence = b.sequence[:hist.decoders.nSeqs] + if hist.decoders.nSeqs == 0 { + hist.decoders.seqSize = len(hist.decoders.literals) + return nil + } + hist.decoders.windowSize = hist.windowSize + hist.decoders.prevOffset = hist.recentOffsets - // TODO: Investigate if sending history without decoders are faster. - // This would allow the sequences to be decoded async and only have to construct stream history. - // If only recent offsets were not transferred, this would be an obvious win. - // Also, if first 3 sequences don't reference recent offsets, all sequences can be decoded. + err := hist.decoders.decode(b.sequence) + hist.recentOffsets = hist.decoders.prevOffset + return err +} +func (b *blockDec) executeSequences(hist *history) error { hbytes := hist.b if len(hbytes) > hist.windowSize { hbytes = hbytes[len(hbytes)-hist.windowSize:] - // We do not need history any more. + // We do not need history anymore. if hist.dict != nil { hist.dict.content = nil } } - - if err := seqs.initialize(br, hist, literals, b.dst); err != nil { - println("initializing sequences:", err) - return err - } - - err = seqs.decode(nSeqs, br, hbytes) + hist.decoders.windowSize = hist.windowSize + hist.decoders.out = b.dst[:0] + err := hist.decoders.execute(b.sequence, hbytes) if err != nil { return err } - if !br.finished() { - return fmt.Errorf("%d extra bits on block, should be 0", br.remain()) - } + return b.updateHistory(hist) +} - err = br.close() - if err != nil { - printf("Closing sequences: %v, %+v\n", err, *br) - } +func (b *blockDec) updateHistory(hist *history) error { if len(b.data) > maxCompressedBlockSize { return fmt.Errorf("compressed block size too large (%d)", len(b.data)) } // Set output and release references. - b.dst = seqs.out - seqs.out, seqs.literals, seqs.hist = nil, nil, nil + b.dst = hist.decoders.out + hist.recentOffsets = hist.decoders.prevOffset - if !delayedHistory { - // If we don't have delayed history, no need to update. - hist.recentOffsets = seqs.prevOffset - return nil - } if b.Last { // if last block we don't care about history. println("Last block, no history returned") hist.b = hist.b[:0] return nil + } else { + hist.append(b.dst) + if debugDecoder { + println("Finished block with ", len(b.sequence), "sequences. Added", len(b.dst), "to history, now length", len(hist.b)) + } } - hist.append(b.dst) - hist.recentOffsets = seqs.prevOffset - if debugDecoder { - println("Finished block with literals:", len(literals), "and", nSeqs, "sequences.") - } + hist.decoders.out, hist.decoders.literals = nil, nil return nil } diff --git a/vendor/github.com/klauspost/compress/zstd/bytebuf.go b/vendor/github.com/klauspost/compress/zstd/bytebuf.go index aab71c6cf8..4493baa756 100644 --- a/vendor/github.com/klauspost/compress/zstd/bytebuf.go +++ b/vendor/github.com/klauspost/compress/zstd/bytebuf.go @@ -52,10 +52,6 @@ func (b *byteBuf) readBig(n int, dst []byte) ([]byte, error) { return r, nil } -func (b *byteBuf) remain() []byte { - return *b -} - func (b *byteBuf) readByte() (byte, error) { bb := *b if len(bb) < 1 { @@ -113,6 +109,9 @@ func (r *readerWrapper) readBig(n int, dst []byte) ([]byte, error) { func (r *readerWrapper) readByte() (byte, error) { n2, err := r.r.Read(r.tmp[:1]) if err != nil { + if err == io.EOF { + err = io.ErrUnexpectedEOF + } return 0, err } if n2 != 1 { diff --git a/vendor/github.com/klauspost/compress/zstd/bytereader.go b/vendor/github.com/klauspost/compress/zstd/bytereader.go index 2c4fca17fa..0e59a242d8 100644 --- a/vendor/github.com/klauspost/compress/zstd/bytereader.go +++ b/vendor/github.com/klauspost/compress/zstd/bytereader.go @@ -13,12 +13,6 @@ type byteReader struct { off int } -// init will initialize the reader and set the input. -func (b *byteReader) init(in []byte) { - b.b = in - b.off = 0 -} - // advance the stream b n bytes. func (b *byteReader) advance(n uint) { b.off += int(n) diff --git a/vendor/github.com/klauspost/compress/zstd/decoder.go b/vendor/github.com/klauspost/compress/zstd/decoder.go index f430f58b57..286c8f9d71 100644 --- a/vendor/github.com/klauspost/compress/zstd/decoder.go +++ b/vendor/github.com/klauspost/compress/zstd/decoder.go @@ -5,9 +5,13 @@ package zstd import ( - "errors" + "bytes" + "context" + "encoding/binary" "io" "sync" + + "github.com/klauspost/compress/zstd/internal/xxhash" ) // Decoder provides decoding of zstandard streams. @@ -22,12 +26,19 @@ type Decoder struct { // Unreferenced decoders, ready for use. decoders chan *blockDec - // Streams ready to be decoded. - stream chan decodeStream - // Current read position used for Reader functionality. current decoderState + // sync stream decoding + syncStream struct { + decodedFrame uint64 + br readerWrapper + enabled bool + inFrame bool + } + + frame *frameDec + // Custom dictionaries. // Always uses copies. dicts map[uint32]dict @@ -46,7 +57,10 @@ type decoderState struct { output chan decodeOutput // cancel remaining output. - cancel chan struct{} + cancel context.CancelFunc + + // crc of current frame + crc *xxhash.Digest flushed bool } @@ -81,7 +95,7 @@ func NewReader(r io.Reader, opts ...DOption) (*Decoder, error) { return nil, err } } - d.current.output = make(chan decodeOutput, d.o.concurrent) + d.current.crc = xxhash.New() d.current.flushed = true if r == nil { @@ -130,7 +144,7 @@ func (d *Decoder) Read(p []byte) (int, error) { break } if !d.nextBlock(n == 0) { - return n, nil + return n, d.current.err } } } @@ -162,6 +176,7 @@ func (d *Decoder) Reset(r io.Reader) error { d.drainOutput() + d.syncStream.br.r = nil if r == nil { d.current.err = ErrDecoderNilInput if len(d.current.b) > 0 { @@ -195,33 +210,39 @@ func (d *Decoder) Reset(r io.Reader) error { } return nil } - - if d.stream == nil { - d.stream = make(chan decodeStream, 1) - d.streamWg.Add(1) - go d.startStreamDecoder(d.stream) - } - // Remove current block. + d.stashDecoder() d.current.decodeOutput = decodeOutput{} d.current.err = nil - d.current.cancel = make(chan struct{}) d.current.flushed = false d.current.d = nil - d.stream <- decodeStream{ - r: r, - output: d.current.output, - cancel: d.current.cancel, + // Ensure no-one else is still running... + d.streamWg.Wait() + if d.frame == nil { + d.frame = newFrameDec(d.o) + } + + if d.o.concurrent == 1 { + return d.startSyncDecoder(r) } + + d.current.output = make(chan decodeOutput, d.o.concurrent) + ctx, cancel := context.WithCancel(context.Background()) + d.current.cancel = cancel + d.streamWg.Add(1) + go d.startStreamDecoder(ctx, r, d.current.output) + return nil } // drainOutput will drain the output until errEndOfStream is sent. func (d *Decoder) drainOutput() { if d.current.cancel != nil { - println("cancelling current") - close(d.current.cancel) + if debugDecoder { + println("cancelling current") + } + d.current.cancel() d.current.cancel = nil } if d.current.d != nil { @@ -243,12 +264,9 @@ func (d *Decoder) drainOutput() { } d.decoders <- v.d } - if v.err == errEndOfStream { - println("current flushed") - d.current.flushed = true - return - } } + d.current.output = nil + d.current.flushed = true } // WriteTo writes data to w until there's no more data to write or when an error occurs. @@ -287,7 +305,7 @@ func (d *Decoder) WriteTo(w io.Writer) (int64, error) { // DecodeAll can be used concurrently. // The Decoder concurrency limits will be respected. func (d *Decoder) DecodeAll(input, dst []byte) ([]byte, error) { - if d.current.err == ErrDecoderClosed { + if d.decoders == nil { return dst, ErrDecoderClosed } @@ -300,6 +318,9 @@ func (d *Decoder) DecodeAll(input, dst []byte) ([]byte, error) { } frame.rawInput = nil frame.bBuf = nil + if frame.history.decoders.br != nil { + frame.history.decoders.br.in = nil + } d.decoders <- block }() frame.bBuf = input @@ -307,33 +328,39 @@ func (d *Decoder) DecodeAll(input, dst []byte) ([]byte, error) { for { frame.history.reset() err := frame.reset(&frame.bBuf) - if err == io.EOF { - if debugDecoder { - println("frame reset return EOF") + if err != nil { + if err == io.EOF { + if debugDecoder { + println("frame reset return EOF") + } + return dst, nil } - return dst, nil + return dst, err } if frame.DictionaryID != nil { dict, ok := d.dicts[*frame.DictionaryID] if !ok { return nil, ErrUnknownDictionary } + if debugDecoder { + println("setting dict", frame.DictionaryID) + } frame.history.setDict(&dict) } - if err != nil { - return dst, err - } - if frame.FrameContentSize > d.o.maxDecodedSize-uint64(len(dst)) { - return dst, ErrDecoderSizeExceeded + if frame.WindowSize > d.o.maxWindowSize { + return dst, ErrWindowSizeExceeded } - if frame.FrameContentSize > 0 && frame.FrameContentSize < 1<<30 { - // Never preallocate moe than 1 GB up front. + if frame.FrameContentSize != fcsUnknown { + if frame.FrameContentSize > d.o.maxDecodedSize-uint64(len(dst)) { + return dst, ErrDecoderSizeExceeded + } if cap(dst)-len(dst) < int(frame.FrameContentSize) { - dst2 := make([]byte, len(dst), len(dst)+int(frame.FrameContentSize)) + dst2 := make([]byte, len(dst), len(dst)+int(frame.FrameContentSize)+compressedBlockOverAlloc) copy(dst2, dst) dst = dst2 } } + if cap(dst) == 0 { // Allocate len(input) * 2 by default if nothing is provided // and we didn't get frame content size. @@ -368,33 +395,176 @@ func (d *Decoder) DecodeAll(input, dst []byte) ([]byte, error) { // If non-blocking mode is used the returned boolean will be false // if no data was available without blocking. func (d *Decoder) nextBlock(blocking bool) (ok bool) { - if d.current.d != nil { - if debugDecoder { - printf("re-adding current decoder %p", d.current.d) - } - d.decoders <- d.current.d - d.current.d = nil - } if d.current.err != nil { // Keep error state. - return blocking + return false + } + d.current.b = d.current.b[:0] + + // SYNC: + if d.syncStream.enabled { + if !blocking { + return false + } + ok = d.nextBlockSync() + if !ok { + d.stashDecoder() + } + return ok } + //ASYNC: + d.stashDecoder() if blocking { - d.current.decodeOutput = <-d.current.output + d.current.decodeOutput, ok = <-d.current.output } else { select { - case d.current.decodeOutput = <-d.current.output: + case d.current.decodeOutput, ok = <-d.current.output: default: return false } } + if !ok { + // This should not happen, so signal error state... + d.current.err = io.ErrUnexpectedEOF + return false + } + next := d.current.decodeOutput + if next.d != nil && next.d.async.newHist != nil { + d.current.crc.Reset() + } if debugDecoder { - println("got", len(d.current.b), "bytes, error:", d.current.err) + var tmp [4]byte + binary.LittleEndian.PutUint32(tmp[:], uint32(xxhash.Sum64(next.b))) + println("got", len(d.current.b), "bytes, error:", d.current.err, "data crc:", tmp) + } + + if !d.o.ignoreChecksum && len(next.b) > 0 { + n, err := d.current.crc.Write(next.b) + if err == nil { + if n != len(next.b) { + d.current.err = io.ErrShortWrite + } + } + } + if next.err == nil && next.d != nil && len(next.d.checkCRC) != 0 { + got := d.current.crc.Sum64() + var tmp [4]byte + binary.LittleEndian.PutUint32(tmp[:], uint32(got)) + if !d.o.ignoreChecksum && !bytes.Equal(tmp[:], next.d.checkCRC) { + if debugDecoder { + println("CRC Check Failed:", tmp[:], " (got) !=", next.d.checkCRC, "(on stream)") + } + d.current.err = ErrCRCMismatch + } else { + if debugDecoder { + println("CRC ok", tmp[:]) + } + } } + return true } +func (d *Decoder) nextBlockSync() (ok bool) { + if d.current.d == nil { + d.current.d = <-d.decoders + } + for len(d.current.b) == 0 { + if !d.syncStream.inFrame { + d.frame.history.reset() + d.current.err = d.frame.reset(&d.syncStream.br) + if d.current.err != nil { + return false + } + if d.frame.DictionaryID != nil { + dict, ok := d.dicts[*d.frame.DictionaryID] + if !ok { + d.current.err = ErrUnknownDictionary + return false + } else { + d.frame.history.setDict(&dict) + } + } + if d.frame.WindowSize > d.o.maxDecodedSize || d.frame.WindowSize > d.o.maxWindowSize { + d.current.err = ErrDecoderSizeExceeded + return false + } + + d.syncStream.decodedFrame = 0 + d.syncStream.inFrame = true + } + d.current.err = d.frame.next(d.current.d) + if d.current.err != nil { + return false + } + d.frame.history.ensureBlock() + if debugDecoder { + println("History trimmed:", len(d.frame.history.b), "decoded already:", d.syncStream.decodedFrame) + } + histBefore := len(d.frame.history.b) + d.current.err = d.current.d.decodeBuf(&d.frame.history) + + if d.current.err != nil { + println("error after:", d.current.err) + return false + } + d.current.b = d.frame.history.b[histBefore:] + if debugDecoder { + println("history after:", len(d.frame.history.b)) + } + + // Check frame size (before CRC) + d.syncStream.decodedFrame += uint64(len(d.current.b)) + if d.syncStream.decodedFrame > d.frame.FrameContentSize { + if debugDecoder { + printf("DecodedFrame (%d) > FrameContentSize (%d)\n", d.syncStream.decodedFrame, d.frame.FrameContentSize) + } + d.current.err = ErrFrameSizeExceeded + return false + } + + // Check FCS + if d.current.d.Last && d.frame.FrameContentSize != fcsUnknown && d.syncStream.decodedFrame != d.frame.FrameContentSize { + if debugDecoder { + printf("DecodedFrame (%d) != FrameContentSize (%d)\n", d.syncStream.decodedFrame, d.frame.FrameContentSize) + } + d.current.err = ErrFrameSizeMismatch + return false + } + + // Update/Check CRC + if d.frame.HasCheckSum { + if !d.o.ignoreChecksum { + d.frame.crc.Write(d.current.b) + } + if d.current.d.Last { + if !d.o.ignoreChecksum { + d.current.err = d.frame.checkCRC() + } else { + d.current.err = d.frame.consumeCRC() + } + if d.current.err != nil { + println("CRC error:", d.current.err) + return false + } + } + } + d.syncStream.inFrame = !d.current.d.Last + } + return true +} + +func (d *Decoder) stashDecoder() { + if d.current.d != nil { + if debugDecoder { + printf("re-adding current decoder %p", d.current.d) + } + d.decoders <- d.current.d + d.current.d = nil + } +} + // Close will release all resources. // It is NOT possible to reuse the decoder after this. func (d *Decoder) Close() { @@ -402,10 +572,10 @@ func (d *Decoder) Close() { return } d.drainOutput() - if d.stream != nil { - close(d.stream) + if d.current.cancel != nil { + d.current.cancel() d.streamWg.Wait() - d.stream = nil + d.current.cancel = nil } if d.decoders != nil { close(d.decoders) @@ -456,100 +626,296 @@ type decodeOutput struct { err error } -type decodeStream struct { - r io.Reader - - // Blocks ready to be written to output. - output chan decodeOutput - - // cancel reading from the input - cancel chan struct{} +func (d *Decoder) startSyncDecoder(r io.Reader) error { + d.frame.history.reset() + d.syncStream.br = readerWrapper{r: r} + d.syncStream.inFrame = false + d.syncStream.enabled = true + d.syncStream.decodedFrame = 0 + return nil } -// errEndOfStream indicates that everything from the stream was read. -var errEndOfStream = errors.New("end-of-stream") - // Create Decoder: -// Spawn n block decoders. These accept tasks to decode a block. -// Create goroutine that handles stream processing, this will send history to decoders as they are available. -// Decoders update the history as they decode. -// When a block is returned: -// a) history is sent to the next decoder, -// b) content written to CRC. -// c) return data to WRITER. -// d) wait for next block to return data. -// Once WRITTEN, the decoders reused by the writer frame decoder for re-use. -func (d *Decoder) startStreamDecoder(inStream chan decodeStream) { +// ASYNC: +// Spawn 3 go routines. +// 0: Read frames and decode block literals. +// 1: Decode sequences. +// 2: Execute sequences, send to output. +func (d *Decoder) startStreamDecoder(ctx context.Context, r io.Reader, output chan decodeOutput) { defer d.streamWg.Done() - frame := newFrameDec(d.o) - for stream := range inStream { - if debugDecoder { - println("got new stream") + br := readerWrapper{r: r} + + var seqDecode = make(chan *blockDec, d.o.concurrent) + var seqExecute = make(chan *blockDec, d.o.concurrent) + + // Async 1: Decode sequences... + go func() { + var hist history + var hasErr bool + + for block := range seqDecode { + if hasErr { + if block != nil { + seqExecute <- block + } + continue + } + if block.async.newHist != nil { + if debugDecoder { + println("Async 1: new history, recent:", block.async.newHist.recentOffsets) + } + hist.decoders = block.async.newHist.decoders + hist.recentOffsets = block.async.newHist.recentOffsets + hist.windowSize = block.async.newHist.windowSize + if block.async.newHist.dict != nil { + hist.setDict(block.async.newHist.dict) + } + } + if block.err != nil || block.Type != blockTypeCompressed { + hasErr = block.err != nil + seqExecute <- block + continue + } + + hist.decoders.literals = block.async.literals + block.err = block.prepareSequences(block.async.seqData, &hist) + if debugDecoder && block.err != nil { + println("prepareSequences returned:", block.err) + } + hasErr = block.err != nil + if block.err == nil { + block.err = block.decodeSequences(&hist) + if debugDecoder && block.err != nil { + println("decodeSequences returned:", block.err) + } + hasErr = block.err != nil + // block.async.sequence = hist.decoders.seq[:hist.decoders.nSeqs] + block.async.seqSize = hist.decoders.seqSize + } + seqExecute <- block } - br := readerWrapper{r: stream.r} - decodeStream: - for { - frame.history.reset() - err := frame.reset(&br) - if debugDecoder && err != nil { - println("Frame decoder returned", err) + close(seqExecute) + }() + + var wg sync.WaitGroup + wg.Add(1) + + // Async 3: Execute sequences... + frameHistCache := d.frame.history.b + go func() { + var hist history + var decodedFrame uint64 + var fcs uint64 + var hasErr bool + for block := range seqExecute { + out := decodeOutput{err: block.err, d: block} + if block.err != nil || hasErr { + hasErr = true + output <- out + continue } - if err == nil && frame.DictionaryID != nil { - dict, ok := d.dicts[*frame.DictionaryID] - if !ok { - err = ErrUnknownDictionary - } else { - frame.history.setDict(&dict) + if block.async.newHist != nil { + if debugDecoder { + println("Async 2: new history") + } + hist.windowSize = block.async.newHist.windowSize + hist.allocFrameBuffer = block.async.newHist.allocFrameBuffer + if block.async.newHist.dict != nil { + hist.setDict(block.async.newHist.dict) } + + if cap(hist.b) < hist.allocFrameBuffer { + if cap(frameHistCache) >= hist.allocFrameBuffer { + hist.b = frameHistCache + } else { + hist.b = make([]byte, 0, hist.allocFrameBuffer) + println("Alloc history sized", hist.allocFrameBuffer) + } + } + hist.b = hist.b[:0] + fcs = block.async.fcs + decodedFrame = 0 } - if err != nil { - stream.output <- decodeOutput{ - err: err, + do := decodeOutput{err: block.err, d: block} + switch block.Type { + case blockTypeRLE: + if debugDecoder { + println("add rle block length:", block.RLESize) } - break + + if cap(block.dst) < int(block.RLESize) { + if block.lowMem { + block.dst = make([]byte, block.RLESize) + } else { + block.dst = make([]byte, maxBlockSize) + } + } + block.dst = block.dst[:block.RLESize] + v := block.data[0] + for i := range block.dst { + block.dst[i] = v + } + hist.append(block.dst) + do.b = block.dst + case blockTypeRaw: + if debugDecoder { + println("add raw block length:", len(block.data)) + } + hist.append(block.data) + do.b = block.data + case blockTypeCompressed: + if debugDecoder { + println("execute with history length:", len(hist.b), "window:", hist.windowSize) + } + hist.decoders.seqSize = block.async.seqSize + hist.decoders.literals = block.async.literals + do.err = block.executeSequences(&hist) + hasErr = do.err != nil + if debugDecoder && hasErr { + println("executeSequences returned:", do.err) + } + do.b = block.dst } - if debugDecoder { - println("starting frame decoder") - } - - // This goroutine will forward history between frames. - frame.frameDone.Add(1) - frame.initAsync() - - go frame.startDecoder(stream.output) - decodeFrame: - // Go through all blocks of the frame. - for { - dec := <-d.decoders - select { - case <-stream.cancel: - if !frame.sendErr(dec, io.EOF) { - // To not let the decoder dangle, send it back. - stream.output <- decodeOutput{d: dec} + if !hasErr { + decodedFrame += uint64(len(do.b)) + if decodedFrame > fcs { + println("fcs exceeded", block.Last, fcs, decodedFrame) + do.err = ErrFrameSizeExceeded + hasErr = true + } else if block.Last && fcs != fcsUnknown && decodedFrame != fcs { + do.err = ErrFrameSizeMismatch + hasErr = true + } else { + if debugDecoder { + println("fcs ok", block.Last, fcs, decodedFrame) } - break decodeStream - default: } - err := frame.next(dec) - switch err { - case io.EOF: - // End of current frame, no error - println("EOF on next block") - break decodeFrame - case nil: - continue - default: - println("block decoder returned", err) - break decodeStream + } + output <- do + } + close(output) + frameHistCache = hist.b + wg.Done() + if debugDecoder { + println("decoder goroutines finished") + } + }() + +decodeStream: + for { + var hist history + var hasErr bool + + decodeBlock := func(block *blockDec) { + if hasErr { + if block != nil { + seqDecode <- block } + return + } + if block.err != nil || block.Type != blockTypeCompressed { + hasErr = block.err != nil + seqDecode <- block + return + } + + remain, err := block.decodeLiterals(block.data, &hist) + block.err = err + hasErr = block.err != nil + if err == nil { + block.async.literals = hist.decoders.literals + block.async.seqData = remain + } else if debugDecoder { + println("decodeLiterals error:", err) + } + seqDecode <- block + } + frame := d.frame + if debugDecoder { + println("New frame...") + } + var historySent bool + frame.history.reset() + err := frame.reset(&br) + if debugDecoder && err != nil { + println("Frame decoder returned", err) + } + if err == nil && frame.DictionaryID != nil { + dict, ok := d.dicts[*frame.DictionaryID] + if !ok { + err = ErrUnknownDictionary + } else { + frame.history.setDict(&dict) + } + } + if err == nil && d.frame.WindowSize > d.o.maxWindowSize { + err = ErrDecoderSizeExceeded + } + if err != nil { + select { + case <-ctx.Done(): + case dec := <-d.decoders: + dec.sendErr(err) + decodeBlock(dec) + } + break decodeStream + } + + // Go through all blocks of the frame. + for { + var dec *blockDec + select { + case <-ctx.Done(): + break decodeStream + case dec = <-d.decoders: + // Once we have a decoder, we MUST return it. + } + err := frame.next(dec) + if !historySent { + h := frame.history + if debugDecoder { + println("Alloc History:", h.allocFrameBuffer) + } + hist.reset() + if h.dict != nil { + hist.setDict(h.dict) + } + dec.async.newHist = &h + dec.async.fcs = frame.FrameContentSize + historySent = true + } else { + dec.async.newHist = nil + } + if debugDecoder && err != nil { + println("next block returned error:", err) + } + dec.err = err + dec.checkCRC = nil + if dec.Last && frame.HasCheckSum && err == nil { + crc, err := frame.rawInput.readSmall(4) + if err != nil { + println("CRC missing?", err) + dec.err = err + } + var tmp [4]byte + copy(tmp[:], crc) + dec.checkCRC = tmp[:] + if debugDecoder { + println("found crc to check:", dec.checkCRC) + } + } + err = dec.err + last := dec.Last + decodeBlock(dec) + if err != nil { + break decodeStream + } + if last { + break } - // All blocks have started decoding, check if there are more frames. - println("waiting for done") - frame.frameDone.Wait() - println("done waiting...") } - frame.frameDone.Wait() - println("Sending EOS") - stream.output <- decodeOutput{err: errEndOfStream} } + close(seqDecode) + wg.Wait() + d.frame.history.b = frameHistCache } diff --git a/vendor/github.com/klauspost/compress/zstd/decoder_options.go b/vendor/github.com/klauspost/compress/zstd/decoder_options.go index 95cc9b8b81..c70e6fa0f7 100644 --- a/vendor/github.com/klauspost/compress/zstd/decoder_options.go +++ b/vendor/github.com/klauspost/compress/zstd/decoder_options.go @@ -19,6 +19,7 @@ type decoderOptions struct { maxDecodedSize uint64 maxWindowSize uint64 dicts []dict + ignoreChecksum bool } func (o *decoderOptions) setDefault() { @@ -28,7 +29,10 @@ func (o *decoderOptions) setDefault() { concurrent: runtime.GOMAXPROCS(0), maxWindowSize: MaxWindowSize, } - o.maxDecodedSize = 1 << 63 + if o.concurrent > 4 { + o.concurrent = 4 + } + o.maxDecodedSize = 64 << 30 } // WithDecoderLowmem will set whether to use a lower amount of memory, @@ -37,16 +41,25 @@ func WithDecoderLowmem(b bool) DOption { return func(o *decoderOptions) error { o.lowMem = b; return nil } } -// WithDecoderConcurrency will set the concurrency, -// meaning the maximum number of decoders to run concurrently. -// The value supplied must be at least 1. -// By default this will be set to GOMAXPROCS. +// WithDecoderConcurrency sets the number of created decoders. +// When decoding block with DecodeAll, this will limit the number +// of possible concurrently running decodes. +// When decoding streams, this will limit the number of +// inflight blocks. +// When decoding streams and setting maximum to 1, +// no async decoding will be done. +// When a value of 0 is provided GOMAXPROCS will be used. +// By default this will be set to 4 or GOMAXPROCS, whatever is lower. func WithDecoderConcurrency(n int) DOption { return func(o *decoderOptions) error { - if n <= 0 { + if n < 0 { return errors.New("concurrency must be at least 1") } - o.concurrent = n + if n == 0 { + o.concurrent = runtime.GOMAXPROCS(0) + } else { + o.concurrent = n + } return nil } } @@ -54,7 +67,7 @@ func WithDecoderConcurrency(n int) DOption { // WithDecoderMaxMemory allows to set a maximum decoded size for in-memory // non-streaming operations or maximum window size for streaming operations. // This can be used to control memory usage of potentially hostile content. -// Maximum and default is 1 << 63 bytes. +// Maximum is 1 << 63 bytes. Default is 64GiB. func WithDecoderMaxMemory(n uint64) DOption { return func(o *decoderOptions) error { if n == 0 { @@ -100,3 +113,11 @@ func WithDecoderMaxWindow(size uint64) DOption { return nil } } + +// IgnoreChecksum allows to forcibly ignore checksum checking. +func IgnoreChecksum(b bool) DOption { + return func(o *decoderOptions) error { + o.ignoreChecksum = b + return nil + } +} diff --git a/vendor/github.com/klauspost/compress/zstd/enc_fast.go b/vendor/github.com/klauspost/compress/zstd/enc_fast.go index 5f08a28302..f51ab529a0 100644 --- a/vendor/github.com/klauspost/compress/zstd/enc_fast.go +++ b/vendor/github.com/klauspost/compress/zstd/enc_fast.go @@ -85,7 +85,7 @@ func (e *fastEncoder) Encode(blk *blockEnc, src []byte) { // TEMPLATE const hashLog = tableBits // seems global, but would be nice to tweak. - const kSearchStrength = 7 + const kSearchStrength = 6 // nextEmit is where in src the next emitLiteral should start from. nextEmit := s @@ -334,7 +334,7 @@ func (e *fastEncoder) EncodeNoHist(blk *blockEnc, src []byte) { // TEMPLATE const hashLog = tableBits // seems global, but would be nice to tweak. - const kSearchStrength = 8 + const kSearchStrength = 6 // nextEmit is where in src the next emitLiteral should start from. nextEmit := s diff --git a/vendor/github.com/klauspost/compress/zstd/encoder.go b/vendor/github.com/klauspost/compress/zstd/encoder.go index e6e315969b..dcc987a7cb 100644 --- a/vendor/github.com/klauspost/compress/zstd/encoder.go +++ b/vendor/github.com/klauspost/compress/zstd/encoder.go @@ -98,23 +98,25 @@ func (e *Encoder) Reset(w io.Writer) { if cap(s.filling) == 0 { s.filling = make([]byte, 0, e.o.blockSize) } - if cap(s.current) == 0 { - s.current = make([]byte, 0, e.o.blockSize) - } - if cap(s.previous) == 0 { - s.previous = make([]byte, 0, e.o.blockSize) + if e.o.concurrent > 1 { + if cap(s.current) == 0 { + s.current = make([]byte, 0, e.o.blockSize) + } + if cap(s.previous) == 0 { + s.previous = make([]byte, 0, e.o.blockSize) + } + s.current = s.current[:0] + s.previous = s.previous[:0] + if s.writing == nil { + s.writing = &blockEnc{lowMem: e.o.lowMem} + s.writing.init() + } + s.writing.initNewEncode() } if s.encoder == nil { s.encoder = e.o.encoder() } - if s.writing == nil { - s.writing = &blockEnc{lowMem: e.o.lowMem} - s.writing.init() - } - s.writing.initNewEncode() s.filling = s.filling[:0] - s.current = s.current[:0] - s.previous = s.previous[:0] s.encoder.Reset(e.o.dict, false) s.headerWritten = false s.eofWritten = false @@ -258,6 +260,46 @@ func (e *Encoder) nextBlock(final bool) error { return s.err } + // SYNC: + if e.o.concurrent == 1 { + src := s.filling + s.nInput += int64(len(s.filling)) + if debugEncoder { + println("Adding sync block,", len(src), "bytes, final:", final) + } + enc := s.encoder + blk := enc.Block() + blk.reset(nil) + enc.Encode(blk, src) + blk.last = final + if final { + s.eofWritten = true + } + + err := errIncompressible + // If we got the exact same number of literals as input, + // assume the literals cannot be compressed. + if len(src) != len(blk.literals) || len(src) != e.o.blockSize { + err = blk.encode(src, e.o.noEntropy, !e.o.allLitEntropy) + } + switch err { + case errIncompressible: + if debugEncoder { + println("Storing incompressible block as raw") + } + blk.encodeRaw(src) + // In fast mode, we do not transfer offsets, so we don't have to deal with changing the. + case nil: + default: + s.err = err + return err + } + _, s.err = s.w.Write(blk.output) + s.nWritten += int64(len(blk.output)) + s.filling = s.filling[:0] + return s.err + } + // Move blocks forward. s.filling, s.current, s.previous = s.previous[:0], s.filling, s.current s.nInput += int64(len(s.current)) diff --git a/vendor/github.com/klauspost/compress/zstd/encoder_options.go b/vendor/github.com/klauspost/compress/zstd/encoder_options.go index 5f2e1d020e..44d8dbd199 100644 --- a/vendor/github.com/klauspost/compress/zstd/encoder_options.go +++ b/vendor/github.com/klauspost/compress/zstd/encoder_options.go @@ -76,6 +76,7 @@ func WithEncoderCRC(b bool) EOption { // WithEncoderConcurrency will set the concurrency, // meaning the maximum number of encoders to run concurrently. // The value supplied must be at least 1. +// For streams, setting a value of 1 will disable async compression. // By default this will be set to GOMAXPROCS. func WithEncoderConcurrency(n int) EOption { return func(o *encoderOptions) error { diff --git a/vendor/github.com/klauspost/compress/zstd/framedec.go b/vendor/github.com/klauspost/compress/zstd/framedec.go index 989c79f8c3..fa0a633f38 100644 --- a/vendor/github.com/klauspost/compress/zstd/framedec.go +++ b/vendor/github.com/klauspost/compress/zstd/framedec.go @@ -8,23 +8,17 @@ import ( "bytes" "encoding/hex" "errors" - "hash" "io" - "sync" "github.com/klauspost/compress/zstd/internal/xxhash" ) type frameDec struct { - o decoderOptions - crc hash.Hash64 - offset int64 + o decoderOptions + crc *xxhash.Digest WindowSize uint64 - // In order queue of blocks being decoded. - decoding chan *blockDec - // Frame history passed between blocks history history @@ -34,15 +28,10 @@ type frameDec struct { bBuf byteBuf FrameContentSize uint64 - frameDone sync.WaitGroup DictionaryID *uint32 HasCheckSum bool SingleSegment bool - - // asyncRunning indicates whether the async routine processes input on 'decoding'. - asyncRunningMu sync.Mutex - asyncRunning bool } const ( @@ -208,7 +197,7 @@ func (d *frameDec) reset(br byteBuffer) error { default: fcsSize = 1 << v } - d.FrameContentSize = 0 + d.FrameContentSize = fcsUnknown if fcsSize > 0 { b, err := br.readSmall(fcsSize) if err != nil { @@ -229,9 +218,10 @@ func (d *frameDec) reset(br byteBuffer) error { d.FrameContentSize = uint64(d1) | (uint64(d2) << 32) } if debugDecoder { - println("field size bits:", v, "fcsSize:", fcsSize, "FrameContentSize:", d.FrameContentSize, hex.EncodeToString(b[:fcsSize]), "singleseg:", d.SingleSegment, "window:", d.WindowSize) + println("Read FCS:", d.FrameContentSize) } } + // Move this to shared. d.HasCheckSum = fhd&(1<<2) != 0 if d.HasCheckSum { @@ -263,11 +253,18 @@ func (d *frameDec) reset(br byteBuffer) error { return ErrWindowSizeTooSmall } d.history.windowSize = int(d.WindowSize) - if d.o.lowMem && d.history.windowSize < maxBlockSize { - d.history.maxSize = d.history.windowSize * 2 + if !d.o.lowMem || d.history.windowSize < maxBlockSize { + // Alloc 2x window size if not low-mem, or very small window size. + d.history.allocFrameBuffer = d.history.windowSize * 2 } else { - d.history.maxSize = d.history.windowSize + maxBlockSize + // Alloc with one additional block + d.history.allocFrameBuffer = d.history.windowSize + maxBlockSize } + + if debugDecoder { + println("Frame: Dict:", d.DictionaryID, "FrameContentSize:", d.FrameContentSize, "singleseg:", d.SingleSegment, "window:", d.WindowSize, "crc:", d.HasCheckSum) + } + // history contains input - maybe we do something d.rawInput = br return nil @@ -276,62 +273,24 @@ func (d *frameDec) reset(br byteBuffer) error { // next will start decoding the next block from stream. func (d *frameDec) next(block *blockDec) error { if debugDecoder { - printf("decoding new block %p:%p", block, block.data) + println("decoding new block") } err := block.reset(d.rawInput, d.WindowSize) if err != nil { println("block error:", err) // Signal the frame decoder we have a problem. - d.sendErr(block, err) + block.sendErr(err) return err } - block.input <- struct{}{} - if debugDecoder { - println("next block:", block) - } - d.asyncRunningMu.Lock() - defer d.asyncRunningMu.Unlock() - if !d.asyncRunning { - return nil - } - if block.Last { - // We indicate the frame is done by sending io.EOF - d.decoding <- block - return io.EOF - } - d.decoding <- block return nil } -// sendEOF will queue an error block on the frame. -// This will cause the frame decoder to return when it encounters the block. -// Returns true if the decoder was added. -func (d *frameDec) sendErr(block *blockDec, err error) bool { - d.asyncRunningMu.Lock() - defer d.asyncRunningMu.Unlock() - if !d.asyncRunning { - return false - } - - println("sending error", err.Error()) - block.sendErr(err) - d.decoding <- block - return true -} - // checkCRC will check the checksum if the frame has one. // Will return ErrCRCMismatch if crc check failed, otherwise nil. func (d *frameDec) checkCRC() error { if !d.HasCheckSum { return nil } - var tmp [4]byte - got := d.crc.Sum64() - // Flip to match file order. - tmp[0] = byte(got >> 0) - tmp[1] = byte(got >> 8) - tmp[2] = byte(got >> 16) - tmp[3] = byte(got >> 24) // We can overwrite upper tmp now want, err := d.rawInput.readSmall(4) @@ -340,6 +299,18 @@ func (d *frameDec) checkCRC() error { return err } + if d.o.ignoreChecksum { + return nil + } + + var tmp [4]byte + got := d.crc.Sum64() + // Flip to match file order. + tmp[0] = byte(got >> 0) + tmp[1] = byte(got >> 8) + tmp[2] = byte(got >> 16) + tmp[3] = byte(got >> 24) + if !bytes.Equal(tmp[:], want) { if debugDecoder { println("CRC Check Failed:", tmp[:], "!=", want) @@ -352,123 +323,17 @@ func (d *frameDec) checkCRC() error { return nil } -func (d *frameDec) initAsync() { - if !d.o.lowMem && !d.SingleSegment { - // set max extra size history to 2MB. - d.history.maxSize = d.history.windowSize + maxBlockSize - } - // re-alloc if more than one extra block size. - if d.o.lowMem && cap(d.history.b) > d.history.maxSize+maxBlockSize { - d.history.b = make([]byte, 0, d.history.maxSize) - } - if cap(d.history.b) < d.history.maxSize { - d.history.b = make([]byte, 0, d.history.maxSize) - } - if cap(d.decoding) < d.o.concurrent { - d.decoding = make(chan *blockDec, d.o.concurrent) - } - if debugDecoder { - h := d.history - printf("history init. len: %d, cap: %d", len(h.b), cap(h.b)) - } - d.asyncRunningMu.Lock() - d.asyncRunning = true - d.asyncRunningMu.Unlock() -} - -// startDecoder will start decoding blocks and write them to the writer. -// The decoder will stop as soon as an error occurs or at end of frame. -// When the frame has finished decoding the *bufio.Reader -// containing the remaining input will be sent on frameDec.frameDone. -func (d *frameDec) startDecoder(output chan decodeOutput) { - written := int64(0) - - defer func() { - d.asyncRunningMu.Lock() - d.asyncRunning = false - d.asyncRunningMu.Unlock() - - // Drain the currently decoding. - d.history.error = true - flushdone: - for { - select { - case b := <-d.decoding: - b.history <- &d.history - output <- <-b.result - default: - break flushdone - } - } - println("frame decoder done, signalling done") - d.frameDone.Done() - }() - // Get decoder for first block. - block := <-d.decoding - block.history <- &d.history - for { - var next *blockDec - // Get result - r := <-block.result - if r.err != nil { - println("Result contained error", r.err) - output <- r - return - } - if debugDecoder { - println("got result, from ", d.offset, "to", d.offset+int64(len(r.b))) - d.offset += int64(len(r.b)) - } - if !block.Last { - // Send history to next block - select { - case next = <-d.decoding: - if debugDecoder { - println("Sending ", len(d.history.b), "bytes as history") - } - next.history <- &d.history - default: - // Wait until we have sent the block, so - // other decoders can potentially get the decoder. - next = nil - } - } - - // Add checksum, async to decoding. - if d.HasCheckSum { - n, err := d.crc.Write(r.b) - if err != nil { - r.err = err - if n != len(r.b) { - r.err = io.ErrShortWrite - } - output <- r - return - } - } - written += int64(len(r.b)) - if d.SingleSegment && uint64(written) > d.FrameContentSize { - println("runDecoder: single segment and", uint64(written), ">", d.FrameContentSize) - r.err = ErrFrameSizeExceeded - output <- r - return - } - if block.Last { - r.err = d.checkCRC() - output <- r - return - } - output <- r - if next == nil { - // There was no decoder available, we wait for one now that we have sent to the writer. - if debugDecoder { - println("Sending ", len(d.history.b), " bytes as history") - } - next = <-d.decoding - next.history <- &d.history +// consumeCRC reads the checksum data if the frame has one. +func (d *frameDec) consumeCRC() error { + if d.HasCheckSum { + _, err := d.rawInput.readSmall(4) + if err != nil { + println("CRC missing?", err) + return err } - block = next } + + return nil } // runDecoder will create a sync decoder that will decode a block of data. @@ -477,8 +342,22 @@ func (d *frameDec) runDecoder(dst []byte, dec *blockDec) ([]byte, error) { // We use the history for output to avoid copying it. d.history.b = dst + d.history.ignoreBuffer = len(dst) // Store input length, so we only check new data. crcStart := len(dst) + d.history.decoders.maxSyncLen = 0 + if d.FrameContentSize != fcsUnknown { + d.history.decoders.maxSyncLen = d.FrameContentSize + uint64(len(dst)) + if d.history.decoders.maxSyncLen > d.o.maxDecodedSize { + return dst, ErrDecoderSizeExceeded + } + if uint64(cap(dst)) < d.history.decoders.maxSyncLen { + // Alloc for output + dst2 := make([]byte, len(dst), d.history.decoders.maxSyncLen+compressedBlockOverAlloc) + copy(dst2, dst) + dst = dst2 + } + } var err error for { err = dec.reset(d.rawInput, d.WindowSize) @@ -489,29 +368,41 @@ func (d *frameDec) runDecoder(dst []byte, dec *blockDec) ([]byte, error) { println("next block:", dec) } err = dec.decodeBuf(&d.history) - if err != nil || dec.Last { + if err != nil { break } if uint64(len(d.history.b)) > d.o.maxDecodedSize { err = ErrDecoderSizeExceeded break } - if d.SingleSegment && uint64(len(d.history.b)) > d.o.maxDecodedSize { - println("runDecoder: single segment and", uint64(len(d.history.b)), ">", d.o.maxDecodedSize) + if uint64(len(d.history.b)-crcStart) > d.FrameContentSize { + println("runDecoder: FrameContentSize exceeded", uint64(len(d.history.b)-crcStart), ">", d.FrameContentSize) err = ErrFrameSizeExceeded break } + if dec.Last { + break + } + if debugDecoder { + println("runDecoder: FrameContentSize", uint64(len(d.history.b)-crcStart), "<=", d.FrameContentSize) + } } dst = d.history.b if err == nil { - if d.HasCheckSum { - var n int - n, err = d.crc.Write(dst[crcStart:]) - if err == nil { - if n != len(dst)-crcStart { - err = io.ErrShortWrite - } else { - err = d.checkCRC() + if d.FrameContentSize != fcsUnknown && uint64(len(d.history.b)-crcStart) != d.FrameContentSize { + err = ErrFrameSizeMismatch + } else if d.HasCheckSum { + if d.o.ignoreChecksum { + err = d.consumeCRC() + } else { + var n int + n, err = d.crc.Write(dst[crcStart:]) + if err == nil { + if n != len(dst)-crcStart { + err = io.ErrShortWrite + } else { + err = d.checkCRC() + } } } } diff --git a/vendor/github.com/klauspost/compress/zstd/fse_decoder.go b/vendor/github.com/klauspost/compress/zstd/fse_decoder.go index bb3d4fd6c3..23333b9692 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_decoder.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_decoder.go @@ -5,8 +5,10 @@ package zstd import ( + "encoding/binary" "errors" "fmt" + "io" ) const ( @@ -182,6 +184,29 @@ func (s *fseDecoder) readNCount(b *byteReader, maxSymbol uint16) error { return s.buildDtable() } +func (s *fseDecoder) mustReadFrom(r io.Reader) { + fatalErr := func(err error) { + if err != nil { + panic(err) + } + } + // dt [maxTablesize]decSymbol // Decompression table. + // symbolLen uint16 // Length of active part of the symbol table. + // actualTableLog uint8 // Selected tablelog. + // maxBits uint8 // Maximum number of additional bits + // // used for table creation to avoid allocations. + // stateTable [256]uint16 + // norm [maxSymbolValue + 1]int16 + // preDefined bool + fatalErr(binary.Read(r, binary.LittleEndian, &s.dt)) + fatalErr(binary.Read(r, binary.LittleEndian, &s.symbolLen)) + fatalErr(binary.Read(r, binary.LittleEndian, &s.actualTableLog)) + fatalErr(binary.Read(r, binary.LittleEndian, &s.maxBits)) + fatalErr(binary.Read(r, binary.LittleEndian, &s.stateTable)) + fatalErr(binary.Read(r, binary.LittleEndian, &s.norm)) + fatalErr(binary.Read(r, binary.LittleEndian, &s.preDefined)) +} + // decSymbol contains information about a state entry, // Including the state offset base, the output symbol and // the number of bits to read for the low part of the destination state. @@ -204,18 +229,10 @@ func (d decSymbol) newState() uint16 { return uint16(d >> 16) } -func (d decSymbol) baseline() uint32 { - return uint32(d >> 32) -} - func (d decSymbol) baselineInt() int { return int(d >> 32) } -func (d *decSymbol) set(nbits, addBits uint8, newState uint16, baseline uint32) { - *d = decSymbol(nbits) | (decSymbol(addBits) << 8) | (decSymbol(newState) << 16) | (decSymbol(baseline) << 32) -} - func (d *decSymbol) setNBits(nBits uint8) { const mask = 0xffffffffffffff00 *d = (*d & mask) | decSymbol(nBits) @@ -231,11 +248,6 @@ func (d *decSymbol) setNewState(state uint16) { *d = (*d & mask) | decSymbol(state)<<16 } -func (d *decSymbol) setBaseline(baseline uint32) { - const mask = 0xffffffff - *d = (*d & mask) | decSymbol(baseline)<<32 -} - func (d *decSymbol) setExt(addBits uint8, baseline uint32) { const mask = 0xffff00ff *d = (*d & mask) | (decSymbol(addBits) << 8) | (decSymbol(baseline) << 32) @@ -352,34 +364,7 @@ func (s *fseState) init(br *bitReader, tableLog uint8, dt []decSymbol) { s.state = dt[br.getBits(tableLog)] } -// next returns the current symbol and sets the next state. -// At least tablelog bits must be available in the bit reader. -func (s *fseState) next(br *bitReader) { - lowBits := uint16(br.getBits(s.state.nbBits())) - s.state = s.dt[s.state.newState()+lowBits] -} - -// finished returns true if all bits have been read from the bitstream -// and the next state would require reading bits from the input. -func (s *fseState) finished(br *bitReader) bool { - return br.finished() && s.state.nbBits() > 0 -} - -// final returns the current state symbol without decoding the next. -func (s *fseState) final() (int, uint8) { - return s.state.baselineInt(), s.state.addBits() -} - // final returns the current state symbol without decoding the next. func (s decSymbol) final() (int, uint8) { return s.baselineInt(), s.addBits() } - -// nextFast returns the next symbol and sets the next state. -// This can only be used if no symbols are 0 bits. -// At least tablelog bits must be available in the bit reader. -func (s *fseState) nextFast(br *bitReader) (uint32, uint8) { - lowBits := br.get16BitsFast(s.state.nbBits()) - s.state = s.dt[s.state.newState()+lowBits] - return s.state.baseline(), s.state.addBits() -} diff --git a/vendor/github.com/klauspost/compress/zstd/fse_encoder.go b/vendor/github.com/klauspost/compress/zstd/fse_encoder.go index 5442061b18..ab26326a8f 100644 --- a/vendor/github.com/klauspost/compress/zstd/fse_encoder.go +++ b/vendor/github.com/klauspost/compress/zstd/fse_encoder.go @@ -76,21 +76,6 @@ func (s *fseEncoder) HistogramFinished(maxSymbol uint8, maxCount int) { s.clearCount = maxCount != 0 } -// prepare will prepare and allocate scratch tables used for both compression and decompression. -func (s *fseEncoder) prepare() (*fseEncoder, error) { - if s == nil { - s = &fseEncoder{} - } - s.useRLE = false - if s.clearCount && s.maxCount == 0 { - for i := range s.count { - s.count[i] = 0 - } - s.clearCount = false - } - return s, nil -} - // allocCtable will allocate tables needed for compression. // If existing tables a re big enough, they are simply re-used. func (s *fseEncoder) allocCtable() { @@ -709,14 +694,6 @@ func (c *cState) init(bw *bitWriter, ct *cTable, first symbolTransform) { c.state = c.stateTable[lu] } -// encode the output symbol provided and write it to the bitstream. -func (c *cState) encode(symbolTT symbolTransform) { - nbBitsOut := (uint32(c.state) + symbolTT.deltaNbBits) >> 16 - dstState := int32(c.state>>(nbBitsOut&15)) + int32(symbolTT.deltaFindState) - c.bw.addBits16NC(c.state, uint8(nbBitsOut)) - c.state = c.stateTable[dstState] -} - // flush will write the tablelog to the output and flush the remaining full bytes. func (c *cState) flush(tableLog uint8) { c.bw.flush32() diff --git a/vendor/github.com/klauspost/compress/zstd/hash.go b/vendor/github.com/klauspost/compress/zstd/hash.go index cf33f29a1b..5d73c21ebd 100644 --- a/vendor/github.com/klauspost/compress/zstd/hash.go +++ b/vendor/github.com/klauspost/compress/zstd/hash.go @@ -33,9 +33,3 @@ func hashLen(u uint64, length, mls uint8) uint32 { return (uint32(u) * prime4bytes) >> (32 - length) } } - -// hash3 returns the hash of the lower 3 bytes of u to fit in a hash table with h bits. -// Preferably h should be a constant and should always be <32. -func hash3(u uint32, h uint8) uint32 { - return ((u << (32 - 24)) * prime3bytes) >> ((32 - h) & 31) -} diff --git a/vendor/github.com/klauspost/compress/zstd/history.go b/vendor/github.com/klauspost/compress/zstd/history.go index f783e32d25..28b40153cc 100644 --- a/vendor/github.com/klauspost/compress/zstd/history.go +++ b/vendor/github.com/klauspost/compress/zstd/history.go @@ -10,20 +10,31 @@ import ( // history contains the information transferred between blocks. type history struct { - b []byte - huffTree *huff0.Scratch - recentOffsets [3]int + // Literal decompression + huffTree *huff0.Scratch + + // Sequence decompression decoders sequenceDecs - windowSize int - maxSize int - error bool - dict *dict + recentOffsets [3]int + + // History buffer... + b []byte + + // ignoreBuffer is meant to ignore a number of bytes + // when checking for matches in history + ignoreBuffer int + + windowSize int + allocFrameBuffer int // needed? + error bool + dict *dict } // reset will reset the history to initial state of a frame. // The history must already have been initialized to the desired size. func (h *history) reset() { h.b = h.b[:0] + h.ignoreBuffer = 0 h.error = false h.recentOffsets = [3]int{1, 4, 8} if f := h.decoders.litLengths.fse; f != nil && !f.preDefined { @@ -35,7 +46,7 @@ func (h *history) reset() { if f := h.decoders.matchLengths.fse; f != nil && !f.preDefined { fseDecoderPool.Put(f) } - h.decoders = sequenceDecs{} + h.decoders = sequenceDecs{br: h.decoders.br} if h.huffTree != nil { if h.dict == nil || h.dict.litEnc != h.huffTree { huffDecoderPool.Put(h.huffTree) @@ -54,6 +65,7 @@ func (h *history) setDict(dict *dict) { h.decoders.litLengths = dict.llDec h.decoders.offsets = dict.ofDec h.decoders.matchLengths = dict.mlDec + h.decoders.dict = dict.content h.recentOffsets = dict.offsets h.huffTree = dict.litEnc } @@ -83,6 +95,24 @@ func (h *history) append(b []byte) { copy(h.b[h.windowSize-len(b):], b) } +// ensureBlock will ensure there is space for at least one block... +func (h *history) ensureBlock() { + if cap(h.b) < h.allocFrameBuffer { + h.b = make([]byte, 0, h.allocFrameBuffer) + return + } + + avail := cap(h.b) - len(h.b) + if avail >= h.windowSize || avail > maxCompressedBlockSize { + return + } + // Move data down so we only have window size left. + // We know we have less than window size in b at this point. + discard := len(h.b) - h.windowSize + copy(h.b, h.b[discard:]) + h.b = h.b[:h.windowSize] +} + // append bytes to history without ever discarding anything. func (h *history) appendKeep(b []byte) { h.b = append(h.b, b...) diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec.go b/vendor/github.com/klauspost/compress/zstd/seqdec.go index bc731e4cb6..df04472030 100644 --- a/vendor/github.com/klauspost/compress/zstd/seqdec.go +++ b/vendor/github.com/klauspost/compress/zstd/seqdec.go @@ -20,6 +20,10 @@ type seq struct { llCode, mlCode, ofCode uint8 } +type seqVals struct { + ll, ml, mo int +} + func (s seq) String() string { if s.offset <= 3 { if s.offset == 0 { @@ -61,16 +65,19 @@ type sequenceDecs struct { offsets sequenceDec matchLengths sequenceDec prevOffset [3]int - hist []byte dict []byte literals []byte out []byte + nSeqs int + br *bitReader + seqSize int windowSize int maxBits uint8 + maxSyncLen uint64 } // initialize all 3 decoders from the stream input. -func (s *sequenceDecs) initialize(br *bitReader, hist *history, literals, out []byte) error { +func (s *sequenceDecs) initialize(br *bitReader, hist *history, out []byte) error { if err := s.litLengths.init(br); err != nil { return errors.New("litLengths:" + err.Error()) } @@ -80,8 +87,7 @@ func (s *sequenceDecs) initialize(br *bitReader, hist *history, literals, out [] if err := s.matchLengths.init(br); err != nil { return errors.New("matchLengths:" + err.Error()) } - s.literals = literals - s.hist = hist.b + s.br = br s.prevOffset = hist.recentOffsets s.maxBits = s.litLengths.fse.maxBits + s.offsets.fse.maxBits + s.matchLengths.fse.maxBits s.windowSize = hist.windowSize @@ -93,12 +99,127 @@ func (s *sequenceDecs) initialize(br *bitReader, hist *history, literals, out [] return nil } +// execute will execute the decoded sequence with the provided history. +// The sequence must be evaluated before being sent. +func (s *sequenceDecs) execute(seqs []seqVals, hist []byte) error { + if len(s.dict) == 0 { + return s.executeSimple(seqs, hist) + } + + // Ensure we have enough output size... + if len(s.out)+s.seqSize > cap(s.out) { + addBytes := s.seqSize + len(s.out) + s.out = append(s.out, make([]byte, addBytes)...) + s.out = s.out[:len(s.out)-addBytes] + } + + if debugDecoder { + printf("Execute %d seqs with hist %d, dict %d, literals: %d into %d bytes\n", len(seqs), len(hist), len(s.dict), len(s.literals), s.seqSize) + } + + var t = len(s.out) + out := s.out[:t+s.seqSize] + + for _, seq := range seqs { + // Add literals + copy(out[t:], s.literals[:seq.ll]) + t += seq.ll + s.literals = s.literals[seq.ll:] + + // Copy from dictionary... + if seq.mo > t+len(hist) || seq.mo > s.windowSize { + if len(s.dict) == 0 { + return fmt.Errorf("match offset (%d) bigger than current history (%d)", seq.mo, t+len(hist)) + } + + // we may be in dictionary. + dictO := len(s.dict) - (seq.mo - (t + len(hist))) + if dictO < 0 || dictO >= len(s.dict) { + return fmt.Errorf("match offset (%d) bigger than current history+dict (%d)", seq.mo, t+len(hist)+len(s.dict)) + } + end := dictO + seq.ml + if end > len(s.dict) { + n := len(s.dict) - dictO + copy(out[t:], s.dict[dictO:]) + t += n + seq.ml -= n + } else { + copy(out[t:], s.dict[dictO:end]) + t += end - dictO + continue + } + } + + // Copy from history. + if v := seq.mo - t; v > 0 { + // v is the start position in history from end. + start := len(hist) - v + if seq.ml > v { + // Some goes into current block. + // Copy remainder of history + copy(out[t:], hist[start:]) + t += v + seq.ml -= v + } else { + copy(out[t:], hist[start:start+seq.ml]) + t += seq.ml + continue + } + } + // We must be in current buffer now + if seq.ml > 0 { + start := t - seq.mo + if seq.ml <= t-start { + // No overlap + copy(out[t:], out[start:start+seq.ml]) + t += seq.ml + continue + } else { + // Overlapping copy + // Extend destination slice and copy one byte at the time. + src := out[start : start+seq.ml] + dst := out[t:] + dst = dst[:len(src)] + t += len(src) + // Destination is the space we just added. + for i := range src { + dst[i] = src[i] + } + } + } + } + + // Add final literals + copy(out[t:], s.literals) + if debugDecoder { + t += len(s.literals) + if t != len(out) { + panic(fmt.Errorf("length mismatch, want %d, got %d, ss: %d", len(out), t, s.seqSize)) + } + } + s.out = out + + return nil +} + // decode sequences from the stream with the provided history. -func (s *sequenceDecs) decode(seqs int, br *bitReader, hist []byte) error { +func (s *sequenceDecs) decodeSync(hist []byte) error { + supported, err := s.decodeSyncSimple(hist) + if supported { + return err + } + + br := s.br + seqs := s.nSeqs startSize := len(s.out) // Grab full sizes tables, to avoid bounds checks. llTable, mlTable, ofTable := s.litLengths.fse.dt[:maxTablesize], s.matchLengths.fse.dt[:maxTablesize], s.offsets.fse.dt[:maxTablesize] llState, mlState, ofState := s.litLengths.state.state, s.matchLengths.state.state, s.offsets.state.state + out := s.out + maxBlockSize := maxCompressedBlockSize + if s.windowSize < maxBlockSize { + maxBlockSize = s.windowSize + } for i := seqs - 1; i >= 0; i-- { if br.overread() { @@ -151,7 +272,7 @@ func (s *sequenceDecs) decode(seqs int, br *bitReader, hist []byte) error { if temp == 0 { // 0 is not valid; input is corrupted; force offset to 1 - println("temp was 0") + println("WARNING: temp was 0") temp = 1 } @@ -176,51 +297,49 @@ func (s *sequenceDecs) decode(seqs int, br *bitReader, hist []byte) error { if ll > len(s.literals) { return fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", ll, len(s.literals)) } - size := ll + ml + len(s.out) + size := ll + ml + len(out) if size-startSize > maxBlockSize { - return fmt.Errorf("output (%d) bigger than max block size", size) + return fmt.Errorf("output (%d) bigger than max block size (%d)", size-startSize, maxBlockSize) } - if size > cap(s.out) { + if size > cap(out) { // Not enough size, which can happen under high volume block streaming conditions // but could be if destination slice is too small for sync operations. // over-allocating here can create a large amount of GC pressure so we try to keep // it as contained as possible - used := len(s.out) - startSize + used := len(out) - startSize addBytes := 256 + ll + ml + used>>2 // Clamp to max block size. if used+addBytes > maxBlockSize { addBytes = maxBlockSize - used } - s.out = append(s.out, make([]byte, addBytes)...) - s.out = s.out[:len(s.out)-addBytes] + out = append(out, make([]byte, addBytes)...) + out = out[:len(out)-addBytes] } if ml > maxMatchLen { return fmt.Errorf("match len (%d) bigger than max allowed length", ml) } // Add literals - s.out = append(s.out, s.literals[:ll]...) + out = append(out, s.literals[:ll]...) s.literals = s.literals[ll:] - out := s.out if mo == 0 && ml > 0 { return fmt.Errorf("zero matchoff and matchlen (%d) > 0", ml) } - if mo > len(s.out)+len(hist) || mo > s.windowSize { + if mo > len(out)+len(hist) || mo > s.windowSize { if len(s.dict) == 0 { - return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(s.out)+len(hist)) + return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(out)+len(hist)-startSize) } // we may be in dictionary. - dictO := len(s.dict) - (mo - (len(s.out) + len(hist))) + dictO := len(s.dict) - (mo - (len(out) + len(hist))) if dictO < 0 || dictO >= len(s.dict) { - return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(s.out)+len(hist)) + return fmt.Errorf("match offset (%d) bigger than current history (%d)", mo, len(out)+len(hist)-startSize) } end := dictO + ml if end > len(s.dict) { out = append(out, s.dict[dictO:]...) - mo -= len(s.dict) - dictO ml -= len(s.dict) - dictO } else { out = append(out, s.dict[dictO:end]...) @@ -231,26 +350,25 @@ func (s *sequenceDecs) decode(seqs int, br *bitReader, hist []byte) error { // Copy from history. // TODO: Blocks without history could be made to ignore this completely. - if v := mo - len(s.out); v > 0 { + if v := mo - len(out); v > 0 { // v is the start position in history from end. - start := len(s.hist) - v + start := len(hist) - v if ml > v { // Some goes into current block. // Copy remainder of history - out = append(out, s.hist[start:]...) - mo -= v + out = append(out, hist[start:]...) ml -= v } else { - out = append(out, s.hist[start:start+ml]...) + out = append(out, hist[start:start+ml]...) ml = 0 } } // We must be in current buffer now if ml > 0 { - start := len(s.out) - mo - if ml <= len(s.out)-start { + start := len(out) - mo + if ml <= len(out)-start { // No overlap - out = append(out, s.out[start:start+ml]...) + out = append(out, out[start:start+ml]...) } else { // Overlapping copy // Extend destination slice and copy one byte at the time. @@ -264,7 +382,6 @@ func (s *sequenceDecs) decode(seqs int, br *bitReader, hist []byte) error { } } } - s.out = out if i == 0 { // This is the last sequence, so we shouldn't update state. break @@ -279,6 +396,7 @@ func (s *sequenceDecs) decode(seqs int, br *bitReader, hist []byte) error { ofState = ofTable[ofState.newState()&maxTableMask] } else { bits := br.get32BitsFast(nBits) + lowBits := uint16(bits >> ((ofState.nbBits() + mlState.nbBits()) & 31)) llState = llTable[(llState.newState()+lowBits)&maxTableMask] @@ -291,19 +409,14 @@ func (s *sequenceDecs) decode(seqs int, br *bitReader, hist []byte) error { } } - // Add final literals - s.out = append(s.out, s.literals...) - return nil -} + // Check if space for literals + if size := len(s.literals) + len(s.out) - startSize; size > maxBlockSize { + return fmt.Errorf("output (%d) bigger than max block size (%d)", size, maxBlockSize) + } -// update states, at least 27 bits must be available. -func (s *sequenceDecs) update(br *bitReader) { - // Max 8 bits - s.litLengths.state.next(br) - // Max 9 bits - s.matchLengths.state.next(br) - // Max 8 bits - s.offsets.state.next(br) + // Add final literals + s.out = append(out, s.literals...) + return br.close() } var bitMask [16]uint16 @@ -314,87 +427,6 @@ func init() { } } -// update states, at least 27 bits must be available. -func (s *sequenceDecs) updateAlt(br *bitReader) { - // Update all 3 states at once. Approx 20% faster. - a, b, c := s.litLengths.state.state, s.matchLengths.state.state, s.offsets.state.state - - nBits := a.nbBits() + b.nbBits() + c.nbBits() - if nBits == 0 { - s.litLengths.state.state = s.litLengths.state.dt[a.newState()] - s.matchLengths.state.state = s.matchLengths.state.dt[b.newState()] - s.offsets.state.state = s.offsets.state.dt[c.newState()] - return - } - bits := br.get32BitsFast(nBits) - lowBits := uint16(bits >> ((c.nbBits() + b.nbBits()) & 31)) - s.litLengths.state.state = s.litLengths.state.dt[a.newState()+lowBits] - - lowBits = uint16(bits >> (c.nbBits() & 31)) - lowBits &= bitMask[b.nbBits()&15] - s.matchLengths.state.state = s.matchLengths.state.dt[b.newState()+lowBits] - - lowBits = uint16(bits) & bitMask[c.nbBits()&15] - s.offsets.state.state = s.offsets.state.dt[c.newState()+lowBits] -} - -// nextFast will return new states when there are at least 4 unused bytes left on the stream when done. -func (s *sequenceDecs) nextFast(br *bitReader, llState, mlState, ofState decSymbol) (ll, mo, ml int) { - // Final will not read from stream. - ll, llB := llState.final() - ml, mlB := mlState.final() - mo, moB := ofState.final() - - // extra bits are stored in reverse order. - br.fillFast() - mo += br.getBits(moB) - if s.maxBits > 32 { - br.fillFast() - } - ml += br.getBits(mlB) - ll += br.getBits(llB) - - if moB > 1 { - s.prevOffset[2] = s.prevOffset[1] - s.prevOffset[1] = s.prevOffset[0] - s.prevOffset[0] = mo - return - } - // mo = s.adjustOffset(mo, ll, moB) - // Inlined for rather big speedup - if ll == 0 { - // There is an exception though, when current sequence's literals_length = 0. - // In this case, repeated offsets are shifted by one, so an offset_value of 1 means Repeated_Offset2, - // an offset_value of 2 means Repeated_Offset3, and an offset_value of 3 means Repeated_Offset1 - 1_byte. - mo++ - } - - if mo == 0 { - mo = s.prevOffset[0] - return - } - var temp int - if mo == 3 { - temp = s.prevOffset[0] - 1 - } else { - temp = s.prevOffset[mo] - } - - if temp == 0 { - // 0 is not valid; input is corrupted; force offset to 1 - println("temp was 0") - temp = 1 - } - - if mo != 1 { - s.prevOffset[2] = s.prevOffset[1] - } - s.prevOffset[1] = s.prevOffset[0] - s.prevOffset[0] = temp - mo = temp - return -} - func (s *sequenceDecs) next(br *bitReader, llState, mlState, ofState decSymbol) (ll, mo, ml int) { // Final will not read from stream. ll, llB := llState.final() @@ -457,36 +489,3 @@ func (s *sequenceDecs) adjustOffset(offset, litLen int, offsetB uint8) int { s.prevOffset[0] = temp return temp } - -// mergeHistory will merge history. -func (s *sequenceDecs) mergeHistory(hist *sequenceDecs) (*sequenceDecs, error) { - for i := uint(0); i < 3; i++ { - var sNew, sHist *sequenceDec - switch i { - default: - // same as "case 0": - sNew = &s.litLengths - sHist = &hist.litLengths - case 1: - sNew = &s.offsets - sHist = &hist.offsets - case 2: - sNew = &s.matchLengths - sHist = &hist.matchLengths - } - if sNew.repeat { - if sHist.fse == nil { - return nil, fmt.Errorf("sequence stream %d, repeat requested, but no history", i) - } - continue - } - if sNew.fse == nil { - return nil, fmt.Errorf("sequence stream %d, no fse found", i) - } - if sHist.fse != nil && !sHist.fse.preDefined { - fseDecoderPool.Put(sHist.fse) - } - sHist.fse = sNew.fse - } - return hist, nil -} diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go new file mode 100644 index 0000000000..847b322ae3 --- /dev/null +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.go @@ -0,0 +1,362 @@ +//go:build amd64 && !appengine && !noasm && gc +// +build amd64,!appengine,!noasm,gc + +package zstd + +import ( + "fmt" + + "github.com/klauspost/compress/internal/cpuinfo" +) + +type decodeSyncAsmContext struct { + llTable []decSymbol + mlTable []decSymbol + ofTable []decSymbol + llState uint64 + mlState uint64 + ofState uint64 + iteration int + litRemain int + out []byte + outPosition int + literals []byte + litPosition int + history []byte + windowSize int + ll int // set on error (not for all errors, please refer to _generate/gen.go) + ml int // set on error (not for all errors, please refer to _generate/gen.go) + mo int // set on error (not for all errors, please refer to _generate/gen.go) +} + +// sequenceDecs_decodeSync_amd64 implements the main loop of sequenceDecs.decodeSync in x86 asm. +// +// Please refer to seqdec_generic.go for the reference implementation. +//go:noescape +func sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int + +// sequenceDecs_decodeSync_bmi2 implements the main loop of sequenceDecs.decodeSync in x86 asm with BMI2 extensions. +//go:noescape +func sequenceDecs_decodeSync_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int + +// sequenceDecs_decodeSync_safe_amd64 does the same as above, but does not write more than output buffer. +//go:noescape +func sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int + +// sequenceDecs_decodeSync_safe_bmi2 does the same as above, but does not write more than output buffer. +//go:noescape +func sequenceDecs_decodeSync_safe_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int + +// decode sequences from the stream with the provided history but without a dictionary. +func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { + if len(s.dict) > 0 { + return false, nil + } + if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSize { + return false, nil + } + useSafe := false + if s.maxSyncLen == 0 && cap(s.out)-len(s.out) < maxCompressedBlockSizeAlloc { + useSafe = true + } + if s.maxSyncLen > 0 && cap(s.out)-len(s.out)-compressedBlockOverAlloc < int(s.maxSyncLen) { + useSafe = true + } + if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc { + useSafe = true + } + + br := s.br + + maxBlockSize := maxCompressedBlockSize + if s.windowSize < maxBlockSize { + maxBlockSize = s.windowSize + } + + ctx := decodeSyncAsmContext{ + llTable: s.litLengths.fse.dt[:maxTablesize], + mlTable: s.matchLengths.fse.dt[:maxTablesize], + ofTable: s.offsets.fse.dt[:maxTablesize], + llState: uint64(s.litLengths.state.state), + mlState: uint64(s.matchLengths.state.state), + ofState: uint64(s.offsets.state.state), + iteration: s.nSeqs - 1, + litRemain: len(s.literals), + out: s.out, + outPosition: len(s.out), + literals: s.literals, + windowSize: s.windowSize, + history: hist, + } + + s.seqSize = 0 + startSize := len(s.out) + + var errCode int + if cpuinfo.HasBMI2() { + if useSafe { + errCode = sequenceDecs_decodeSync_safe_bmi2(s, br, &ctx) + } else { + errCode = sequenceDecs_decodeSync_bmi2(s, br, &ctx) + } + } else { + if useSafe { + errCode = sequenceDecs_decodeSync_safe_amd64(s, br, &ctx) + } else { + errCode = sequenceDecs_decodeSync_amd64(s, br, &ctx) + } + } + switch errCode { + case noError: + break + + case errorMatchLenOfsMismatch: + return true, fmt.Errorf("zero matchoff and matchlen (%d) > 0", ctx.ml) + + case errorMatchLenTooBig: + return true, fmt.Errorf("match len (%d) bigger than max allowed length", ctx.ml) + + case errorMatchOffTooBig: + return true, fmt.Errorf("match offset (%d) bigger than current history (%d)", + ctx.mo, ctx.outPosition+len(hist)-startSize) + + case errorNotEnoughLiterals: + return true, fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", + ctx.ll, ctx.litRemain+ctx.ll) + + case errorNotEnoughSpace: + size := ctx.outPosition + ctx.ll + ctx.ml + if debugDecoder { + println("msl:", s.maxSyncLen, "cap", cap(s.out), "bef:", startSize, "sz:", size-startSize, "mbs:", maxBlockSize, "outsz:", cap(s.out)-startSize) + } + return true, fmt.Errorf("output (%d) bigger than max block size (%d)", size-startSize, maxBlockSize) + + default: + return true, fmt.Errorf("sequenceDecs_decode returned erronous code %d", errCode) + } + + s.seqSize += ctx.litRemain + if s.seqSize > maxBlockSize { + return true, fmt.Errorf("output (%d) bigger than max block size (%d)", s.seqSize, maxBlockSize) + } + err := br.close() + if err != nil { + printf("Closing sequences: %v, %+v\n", err, *br) + return true, err + } + + s.literals = s.literals[ctx.litPosition:] + t := ctx.outPosition + s.out = s.out[:t] + + // Add final literals + s.out = append(s.out, s.literals...) + if debugDecoder { + t += len(s.literals) + if t != len(s.out) { + panic(fmt.Errorf("length mismatch, want %d, got %d", len(s.out), t)) + } + } + + return true, nil +} + +// -------------------------------------------------------------------------------- + +type decodeAsmContext struct { + llTable []decSymbol + mlTable []decSymbol + ofTable []decSymbol + llState uint64 + mlState uint64 + ofState uint64 + iteration int + seqs []seqVals + litRemain int +} + +const noError = 0 + +// error reported when mo == 0 && ml > 0 +const errorMatchLenOfsMismatch = 1 + +// error reported when ml > maxMatchLen +const errorMatchLenTooBig = 2 + +// error reported when mo > available history or mo > s.windowSize +const errorMatchOffTooBig = 3 + +// error reported when the sum of literal lengths exeeceds the literal buffer size +const errorNotEnoughLiterals = 4 + +// error reported when capacity of `out` is too small +const errorNotEnoughSpace = 5 + +// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm. +// +// Please refer to seqdec_generic.go for the reference implementation. +//go:noescape +func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int + +// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm. +// +// Please refer to seqdec_generic.go for the reference implementation. +//go:noescape +func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int + +// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm with BMI2 extensions. +//go:noescape +func sequenceDecs_decode_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int + +// sequenceDecs_decode implements the main loop of sequenceDecs in x86 asm with BMI2 extensions. +//go:noescape +func sequenceDecs_decode_56_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int + +// decode sequences from the stream without the provided history. +func (s *sequenceDecs) decode(seqs []seqVals) error { + br := s.br + + maxBlockSize := maxCompressedBlockSize + if s.windowSize < maxBlockSize { + maxBlockSize = s.windowSize + } + + ctx := decodeAsmContext{ + llTable: s.litLengths.fse.dt[:maxTablesize], + mlTable: s.matchLengths.fse.dt[:maxTablesize], + ofTable: s.offsets.fse.dt[:maxTablesize], + llState: uint64(s.litLengths.state.state), + mlState: uint64(s.matchLengths.state.state), + ofState: uint64(s.offsets.state.state), + seqs: seqs, + iteration: len(seqs) - 1, + litRemain: len(s.literals), + } + + s.seqSize = 0 + lte56bits := s.maxBits+s.offsets.fse.actualTableLog+s.matchLengths.fse.actualTableLog+s.litLengths.fse.actualTableLog <= 56 + var errCode int + if cpuinfo.HasBMI2() { + if lte56bits { + errCode = sequenceDecs_decode_56_bmi2(s, br, &ctx) + } else { + errCode = sequenceDecs_decode_bmi2(s, br, &ctx) + } + } else { + if lte56bits { + errCode = sequenceDecs_decode_56_amd64(s, br, &ctx) + } else { + errCode = sequenceDecs_decode_amd64(s, br, &ctx) + } + } + if errCode != 0 { + i := len(seqs) - ctx.iteration - 1 + switch errCode { + case errorMatchLenOfsMismatch: + ml := ctx.seqs[i].ml + return fmt.Errorf("zero matchoff and matchlen (%d) > 0", ml) + + case errorMatchLenTooBig: + ml := ctx.seqs[i].ml + return fmt.Errorf("match len (%d) bigger than max allowed length", ml) + + case errorNotEnoughLiterals: + ll := ctx.seqs[i].ll + return fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", ll, ctx.litRemain+ll) + } + + return fmt.Errorf("sequenceDecs_decode_amd64 returned erronous code %d", errCode) + } + + if ctx.litRemain < 0 { + return fmt.Errorf("literal count is too big: total available %d, total requested %d", + len(s.literals), len(s.literals)-ctx.litRemain) + } + + s.seqSize += ctx.litRemain + if s.seqSize > maxBlockSize { + return fmt.Errorf("output (%d) bigger than max block size (%d)", s.seqSize, maxBlockSize) + } + err := br.close() + if err != nil { + printf("Closing sequences: %v, %+v\n", err, *br) + } + return err +} + +// -------------------------------------------------------------------------------- + +type executeAsmContext struct { + seqs []seqVals + seqIndex int + out []byte + history []byte + literals []byte + outPosition int + litPosition int + windowSize int +} + +// sequenceDecs_executeSimple_amd64 implements the main loop of sequenceDecs.executeSimple in x86 asm. +// +// Returns false if a match offset is too big. +// +// Please refer to seqdec_generic.go for the reference implementation. +//go:noescape +func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool + +// Same as above, but with safe memcopies +//go:noescape +func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool + +// executeSimple handles cases when dictionary is not used. +func (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error { + // Ensure we have enough output size... + if len(s.out)+s.seqSize+compressedBlockOverAlloc > cap(s.out) { + addBytes := s.seqSize + len(s.out) + compressedBlockOverAlloc + s.out = append(s.out, make([]byte, addBytes)...) + s.out = s.out[:len(s.out)-addBytes] + } + + if debugDecoder { + printf("Execute %d seqs with literals: %d into %d bytes\n", len(seqs), len(s.literals), s.seqSize) + } + + var t = len(s.out) + out := s.out[:t+s.seqSize] + + ctx := executeAsmContext{ + seqs: seqs, + seqIndex: 0, + out: out, + history: hist, + outPosition: t, + litPosition: 0, + literals: s.literals, + windowSize: s.windowSize, + } + var ok bool + if cap(s.literals) < len(s.literals)+compressedBlockOverAlloc { + ok = sequenceDecs_executeSimple_safe_amd64(&ctx) + } else { + ok = sequenceDecs_executeSimple_amd64(&ctx) + } + if !ok { + return fmt.Errorf("match offset (%d) bigger than current history (%d)", + seqs[ctx.seqIndex].mo, ctx.outPosition+len(hist)) + } + s.literals = s.literals[ctx.litPosition:] + t = ctx.outPosition + + // Add final literals + copy(out[t:], s.literals) + if debugDecoder { + t += len(s.literals) + if t != len(out) { + panic(fmt.Errorf("length mismatch, want %d, got %d, ss: %d", len(out), t, s.seqSize)) + } + } + s.out = out + + return nil +} diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s new file mode 100644 index 0000000000..212c6cac30 --- /dev/null +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_amd64.s @@ -0,0 +1,3689 @@ +// Code generated by command: go run gen.go -out ../seqdec_amd64.s -pkg=zstd. DO NOT EDIT. + +//go:build !appengine && !noasm && gc && !noasm +// +build !appengine,!noasm,gc,!noasm + +// func sequenceDecs_decode_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +// Requires: CMOV +TEXT ·sequenceDecs_decode_amd64(SB), $8-32 + MOVQ br+8(FP), AX + MOVQ 32(AX), DX + MOVBQZX 40(AX), BX + MOVQ 24(AX), SI + MOVQ (AX), AX + ADDQ SI, AX + MOVQ AX, (SP) + MOVQ ctx+16(FP), AX + MOVQ 72(AX), DI + MOVQ 80(AX), R8 + MOVQ 88(AX), R9 + MOVQ 104(AX), R10 + MOVQ s+0(FP), AX + MOVQ 144(AX), R11 + MOVQ 152(AX), R12 + MOVQ 160(AX), R13 + +sequenceDecs_decode_amd64_main_loop: + MOVQ (SP), R14 + + // Fill bitreader to have enough for the offset and match length. + CMPQ SI, $0x08 + JL sequenceDecs_decode_amd64_fill_byte_by_byte + MOVQ BX, AX + SHRQ $0x03, AX + SUBQ AX, R14 + MOVQ (R14), DX + SUBQ AX, SI + ANDQ $0x07, BX + JMP sequenceDecs_decode_amd64_fill_end + +sequenceDecs_decode_amd64_fill_byte_by_byte: + CMPQ SI, $0x00 + JLE sequenceDecs_decode_amd64_fill_end + CMPQ BX, $0x07 + JLE sequenceDecs_decode_amd64_fill_end + SHLQ $0x08, DX + SUBQ $0x01, R14 + SUBQ $0x01, SI + SUBQ $0x08, BX + MOVBQZX (R14), AX + ORQ AX, DX + JMP sequenceDecs_decode_amd64_fill_byte_by_byte + +sequenceDecs_decode_amd64_fill_end: + // Update offset + MOVQ R9, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R15 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R15 + ADDQ R15, AX + MOVQ AX, 16(R10) + + // Update match length + MOVQ R8, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R15 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R15 + ADDQ R15, AX + MOVQ AX, 8(R10) + + // Fill bitreader to have enough for the remaining + CMPQ SI, $0x08 + JL sequenceDecs_decode_amd64_fill_2_byte_by_byte + MOVQ BX, AX + SHRQ $0x03, AX + SUBQ AX, R14 + MOVQ (R14), DX + SUBQ AX, SI + ANDQ $0x07, BX + JMP sequenceDecs_decode_amd64_fill_2_end + +sequenceDecs_decode_amd64_fill_2_byte_by_byte: + CMPQ SI, $0x00 + JLE sequenceDecs_decode_amd64_fill_2_end + CMPQ BX, $0x07 + JLE sequenceDecs_decode_amd64_fill_2_end + SHLQ $0x08, DX + SUBQ $0x01, R14 + SUBQ $0x01, SI + SUBQ $0x08, BX + MOVBQZX (R14), AX + ORQ AX, DX + JMP sequenceDecs_decode_amd64_fill_2_byte_by_byte + +sequenceDecs_decode_amd64_fill_2_end: + // Update literal length + MOVQ DI, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R15 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R15 + ADDQ R15, AX + MOVQ AX, (R10) + + // Fill bitreader for state updates + MOVQ R14, (SP) + MOVQ R9, AX + SHRQ $0x08, AX + MOVBQZX AL, AX + MOVQ ctx+16(FP), CX + CMPQ 96(CX), $0x00 + JZ sequenceDecs_decode_amd64_skip_update + + // Update Literal Length State + MOVBQZX DI, R14 + SHRQ $0x10, DI + MOVWQZX DI, DI + CMPQ R14, $0x00 + JZ sequenceDecs_decode_amd64_llState_updateState_skip_zero + MOVQ BX, CX + ADDQ R14, BX + MOVQ DX, R15 + SHLQ CL, R15 + MOVQ R14, CX + NEGQ CX + SHRQ CL, R15 + ADDQ R15, DI + +sequenceDecs_decode_amd64_llState_updateState_skip_zero: + // Load ctx.llTable + MOVQ ctx+16(FP), CX + MOVQ (CX), CX + MOVQ (CX)(DI*8), DI + + // Update Match Length State + MOVBQZX R8, R14 + SHRQ $0x10, R8 + MOVWQZX R8, R8 + CMPQ R14, $0x00 + JZ sequenceDecs_decode_amd64_mlState_updateState_skip_zero + MOVQ BX, CX + ADDQ R14, BX + MOVQ DX, R15 + SHLQ CL, R15 + MOVQ R14, CX + NEGQ CX + SHRQ CL, R15 + ADDQ R15, R8 + +sequenceDecs_decode_amd64_mlState_updateState_skip_zero: + // Load ctx.mlTable + MOVQ ctx+16(FP), CX + MOVQ 24(CX), CX + MOVQ (CX)(R8*8), R8 + + // Update Offset State + MOVBQZX R9, R14 + SHRQ $0x10, R9 + MOVWQZX R9, R9 + CMPQ R14, $0x00 + JZ sequenceDecs_decode_amd64_ofState_updateState_skip_zero + MOVQ BX, CX + ADDQ R14, BX + MOVQ DX, R15 + SHLQ CL, R15 + MOVQ R14, CX + NEGQ CX + SHRQ CL, R15 + ADDQ R15, R9 + +sequenceDecs_decode_amd64_ofState_updateState_skip_zero: + // Load ctx.ofTable + MOVQ ctx+16(FP), CX + MOVQ 48(CX), CX + MOVQ (CX)(R9*8), R9 + +sequenceDecs_decode_amd64_skip_update: + // Adjust offset + MOVQ 16(R10), CX + CMPQ AX, $0x01 + JBE sequenceDecs_decode_amd64_adjust_offsetB_1_or_0 + MOVQ R12, R13 + MOVQ R11, R12 + MOVQ CX, R11 + JMP sequenceDecs_decode_amd64_adjust_end + +sequenceDecs_decode_amd64_adjust_offsetB_1_or_0: + CMPQ (R10), $0x00000000 + JNE sequenceDecs_decode_amd64_adjust_offset_maybezero + INCQ CX + JMP sequenceDecs_decode_amd64_adjust_offset_nonzero + +sequenceDecs_decode_amd64_adjust_offset_maybezero: + TESTQ CX, CX + JNZ sequenceDecs_decode_amd64_adjust_offset_nonzero + MOVQ R11, CX + JMP sequenceDecs_decode_amd64_adjust_end + +sequenceDecs_decode_amd64_adjust_offset_nonzero: + CMPQ CX, $0x01 + JB sequenceDecs_decode_amd64_adjust_zero + JEQ sequenceDecs_decode_amd64_adjust_one + CMPQ CX, $0x02 + JA sequenceDecs_decode_amd64_adjust_three + JMP sequenceDecs_decode_amd64_adjust_two + +sequenceDecs_decode_amd64_adjust_zero: + MOVQ R11, AX + JMP sequenceDecs_decode_amd64_adjust_test_temp_valid + +sequenceDecs_decode_amd64_adjust_one: + MOVQ R12, AX + JMP sequenceDecs_decode_amd64_adjust_test_temp_valid + +sequenceDecs_decode_amd64_adjust_two: + MOVQ R13, AX + JMP sequenceDecs_decode_amd64_adjust_test_temp_valid + +sequenceDecs_decode_amd64_adjust_three: + LEAQ -1(R11), AX + +sequenceDecs_decode_amd64_adjust_test_temp_valid: + TESTQ AX, AX + JNZ sequenceDecs_decode_amd64_adjust_temp_valid + MOVQ $0x00000001, AX + +sequenceDecs_decode_amd64_adjust_temp_valid: + CMPQ CX, $0x01 + CMOVQNE R12, R13 + MOVQ R11, R12 + MOVQ AX, R11 + MOVQ AX, CX + +sequenceDecs_decode_amd64_adjust_end: + MOVQ CX, 16(R10) + + // Check values + MOVQ 8(R10), AX + MOVQ (R10), R14 + LEAQ (AX)(R14*1), R15 + MOVQ s+0(FP), BP + ADDQ R15, 256(BP) + MOVQ ctx+16(FP), R15 + SUBQ R14, 128(R15) + JS error_not_enough_literals + CMPQ AX, $0x00020002 + JA sequenceDecs_decode_amd64_error_match_len_too_big + TESTQ CX, CX + JNZ sequenceDecs_decode_amd64_match_len_ofs_ok + TESTQ AX, AX + JNZ sequenceDecs_decode_amd64_error_match_len_ofs_mismatch + +sequenceDecs_decode_amd64_match_len_ofs_ok: + ADDQ $0x18, R10 + MOVQ ctx+16(FP), AX + DECQ 96(AX) + JNS sequenceDecs_decode_amd64_main_loop + MOVQ s+0(FP), AX + MOVQ R11, 144(AX) + MOVQ R12, 152(AX) + MOVQ R13, 160(AX) + MOVQ br+8(FP), AX + MOVQ DX, 32(AX) + MOVB BL, 40(AX) + MOVQ SI, 24(AX) + + // Return success + MOVQ $0x00000000, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decode_amd64_error_match_len_ofs_mismatch: + MOVQ $0x00000001, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decode_amd64_error_match_len_too_big: + MOVQ $0x00000002, ret+24(FP) + RET + + // Return with match offset too long error + MOVQ $0x00000003, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVQ $0x00000004, ret+24(FP) + RET + + // Return with not enough output space error + MOVQ $0x00000005, ret+24(FP) + RET + +// func sequenceDecs_decode_56_amd64(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +// Requires: CMOV +TEXT ·sequenceDecs_decode_56_amd64(SB), $8-32 + MOVQ br+8(FP), AX + MOVQ 32(AX), DX + MOVBQZX 40(AX), BX + MOVQ 24(AX), SI + MOVQ (AX), AX + ADDQ SI, AX + MOVQ AX, (SP) + MOVQ ctx+16(FP), AX + MOVQ 72(AX), DI + MOVQ 80(AX), R8 + MOVQ 88(AX), R9 + MOVQ 104(AX), R10 + MOVQ s+0(FP), AX + MOVQ 144(AX), R11 + MOVQ 152(AX), R12 + MOVQ 160(AX), R13 + +sequenceDecs_decode_56_amd64_main_loop: + MOVQ (SP), R14 + + // Fill bitreader to have enough for the offset and match length. + CMPQ SI, $0x08 + JL sequenceDecs_decode_56_amd64_fill_byte_by_byte + MOVQ BX, AX + SHRQ $0x03, AX + SUBQ AX, R14 + MOVQ (R14), DX + SUBQ AX, SI + ANDQ $0x07, BX + JMP sequenceDecs_decode_56_amd64_fill_end + +sequenceDecs_decode_56_amd64_fill_byte_by_byte: + CMPQ SI, $0x00 + JLE sequenceDecs_decode_56_amd64_fill_end + CMPQ BX, $0x07 + JLE sequenceDecs_decode_56_amd64_fill_end + SHLQ $0x08, DX + SUBQ $0x01, R14 + SUBQ $0x01, SI + SUBQ $0x08, BX + MOVBQZX (R14), AX + ORQ AX, DX + JMP sequenceDecs_decode_56_amd64_fill_byte_by_byte + +sequenceDecs_decode_56_amd64_fill_end: + // Update offset + MOVQ R9, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R15 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R15 + ADDQ R15, AX + MOVQ AX, 16(R10) + + // Update match length + MOVQ R8, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R15 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R15 + ADDQ R15, AX + MOVQ AX, 8(R10) + + // Update literal length + MOVQ DI, AX + MOVQ BX, CX + MOVQ DX, R15 + SHLQ CL, R15 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R15 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R15 + ADDQ R15, AX + MOVQ AX, (R10) + + // Fill bitreader for state updates + MOVQ R14, (SP) + MOVQ R9, AX + SHRQ $0x08, AX + MOVBQZX AL, AX + MOVQ ctx+16(FP), CX + CMPQ 96(CX), $0x00 + JZ sequenceDecs_decode_56_amd64_skip_update + + // Update Literal Length State + MOVBQZX DI, R14 + SHRQ $0x10, DI + MOVWQZX DI, DI + CMPQ R14, $0x00 + JZ sequenceDecs_decode_56_amd64_llState_updateState_skip_zero + MOVQ BX, CX + ADDQ R14, BX + MOVQ DX, R15 + SHLQ CL, R15 + MOVQ R14, CX + NEGQ CX + SHRQ CL, R15 + ADDQ R15, DI + +sequenceDecs_decode_56_amd64_llState_updateState_skip_zero: + // Load ctx.llTable + MOVQ ctx+16(FP), CX + MOVQ (CX), CX + MOVQ (CX)(DI*8), DI + + // Update Match Length State + MOVBQZX R8, R14 + SHRQ $0x10, R8 + MOVWQZX R8, R8 + CMPQ R14, $0x00 + JZ sequenceDecs_decode_56_amd64_mlState_updateState_skip_zero + MOVQ BX, CX + ADDQ R14, BX + MOVQ DX, R15 + SHLQ CL, R15 + MOVQ R14, CX + NEGQ CX + SHRQ CL, R15 + ADDQ R15, R8 + +sequenceDecs_decode_56_amd64_mlState_updateState_skip_zero: + // Load ctx.mlTable + MOVQ ctx+16(FP), CX + MOVQ 24(CX), CX + MOVQ (CX)(R8*8), R8 + + // Update Offset State + MOVBQZX R9, R14 + SHRQ $0x10, R9 + MOVWQZX R9, R9 + CMPQ R14, $0x00 + JZ sequenceDecs_decode_56_amd64_ofState_updateState_skip_zero + MOVQ BX, CX + ADDQ R14, BX + MOVQ DX, R15 + SHLQ CL, R15 + MOVQ R14, CX + NEGQ CX + SHRQ CL, R15 + ADDQ R15, R9 + +sequenceDecs_decode_56_amd64_ofState_updateState_skip_zero: + // Load ctx.ofTable + MOVQ ctx+16(FP), CX + MOVQ 48(CX), CX + MOVQ (CX)(R9*8), R9 + +sequenceDecs_decode_56_amd64_skip_update: + // Adjust offset + MOVQ 16(R10), CX + CMPQ AX, $0x01 + JBE sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0 + MOVQ R12, R13 + MOVQ R11, R12 + MOVQ CX, R11 + JMP sequenceDecs_decode_56_amd64_adjust_end + +sequenceDecs_decode_56_amd64_adjust_offsetB_1_or_0: + CMPQ (R10), $0x00000000 + JNE sequenceDecs_decode_56_amd64_adjust_offset_maybezero + INCQ CX + JMP sequenceDecs_decode_56_amd64_adjust_offset_nonzero + +sequenceDecs_decode_56_amd64_adjust_offset_maybezero: + TESTQ CX, CX + JNZ sequenceDecs_decode_56_amd64_adjust_offset_nonzero + MOVQ R11, CX + JMP sequenceDecs_decode_56_amd64_adjust_end + +sequenceDecs_decode_56_amd64_adjust_offset_nonzero: + CMPQ CX, $0x01 + JB sequenceDecs_decode_56_amd64_adjust_zero + JEQ sequenceDecs_decode_56_amd64_adjust_one + CMPQ CX, $0x02 + JA sequenceDecs_decode_56_amd64_adjust_three + JMP sequenceDecs_decode_56_amd64_adjust_two + +sequenceDecs_decode_56_amd64_adjust_zero: + MOVQ R11, AX + JMP sequenceDecs_decode_56_amd64_adjust_test_temp_valid + +sequenceDecs_decode_56_amd64_adjust_one: + MOVQ R12, AX + JMP sequenceDecs_decode_56_amd64_adjust_test_temp_valid + +sequenceDecs_decode_56_amd64_adjust_two: + MOVQ R13, AX + JMP sequenceDecs_decode_56_amd64_adjust_test_temp_valid + +sequenceDecs_decode_56_amd64_adjust_three: + LEAQ -1(R11), AX + +sequenceDecs_decode_56_amd64_adjust_test_temp_valid: + TESTQ AX, AX + JNZ sequenceDecs_decode_56_amd64_adjust_temp_valid + MOVQ $0x00000001, AX + +sequenceDecs_decode_56_amd64_adjust_temp_valid: + CMPQ CX, $0x01 + CMOVQNE R12, R13 + MOVQ R11, R12 + MOVQ AX, R11 + MOVQ AX, CX + +sequenceDecs_decode_56_amd64_adjust_end: + MOVQ CX, 16(R10) + + // Check values + MOVQ 8(R10), AX + MOVQ (R10), R14 + LEAQ (AX)(R14*1), R15 + MOVQ s+0(FP), BP + ADDQ R15, 256(BP) + MOVQ ctx+16(FP), R15 + SUBQ R14, 128(R15) + JS error_not_enough_literals + CMPQ AX, $0x00020002 + JA sequenceDecs_decode_56_amd64_error_match_len_too_big + TESTQ CX, CX + JNZ sequenceDecs_decode_56_amd64_match_len_ofs_ok + TESTQ AX, AX + JNZ sequenceDecs_decode_56_amd64_error_match_len_ofs_mismatch + +sequenceDecs_decode_56_amd64_match_len_ofs_ok: + ADDQ $0x18, R10 + MOVQ ctx+16(FP), AX + DECQ 96(AX) + JNS sequenceDecs_decode_56_amd64_main_loop + MOVQ s+0(FP), AX + MOVQ R11, 144(AX) + MOVQ R12, 152(AX) + MOVQ R13, 160(AX) + MOVQ br+8(FP), AX + MOVQ DX, 32(AX) + MOVB BL, 40(AX) + MOVQ SI, 24(AX) + + // Return success + MOVQ $0x00000000, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decode_56_amd64_error_match_len_ofs_mismatch: + MOVQ $0x00000001, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decode_56_amd64_error_match_len_too_big: + MOVQ $0x00000002, ret+24(FP) + RET + + // Return with match offset too long error + MOVQ $0x00000003, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVQ $0x00000004, ret+24(FP) + RET + + // Return with not enough output space error + MOVQ $0x00000005, ret+24(FP) + RET + +// func sequenceDecs_decode_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +// Requires: BMI, BMI2, CMOV +TEXT ·sequenceDecs_decode_bmi2(SB), $8-32 + MOVQ br+8(FP), CX + MOVQ 32(CX), AX + MOVBQZX 40(CX), DX + MOVQ 24(CX), BX + MOVQ (CX), CX + ADDQ BX, CX + MOVQ CX, (SP) + MOVQ ctx+16(FP), CX + MOVQ 72(CX), SI + MOVQ 80(CX), DI + MOVQ 88(CX), R8 + MOVQ 104(CX), R9 + MOVQ s+0(FP), CX + MOVQ 144(CX), R10 + MOVQ 152(CX), R11 + MOVQ 160(CX), R12 + +sequenceDecs_decode_bmi2_main_loop: + MOVQ (SP), R13 + + // Fill bitreader to have enough for the offset and match length. + CMPQ BX, $0x08 + JL sequenceDecs_decode_bmi2_fill_byte_by_byte + MOVQ DX, CX + SHRQ $0x03, CX + SUBQ CX, R13 + MOVQ (R13), AX + SUBQ CX, BX + ANDQ $0x07, DX + JMP sequenceDecs_decode_bmi2_fill_end + +sequenceDecs_decode_bmi2_fill_byte_by_byte: + CMPQ BX, $0x00 + JLE sequenceDecs_decode_bmi2_fill_end + CMPQ DX, $0x07 + JLE sequenceDecs_decode_bmi2_fill_end + SHLQ $0x08, AX + SUBQ $0x01, R13 + SUBQ $0x01, BX + SUBQ $0x08, DX + MOVBQZX (R13), CX + ORQ CX, AX + JMP sequenceDecs_decode_bmi2_fill_byte_by_byte + +sequenceDecs_decode_bmi2_fill_end: + // Update offset + MOVQ $0x00000808, CX + BEXTRQ CX, R8, R14 + MOVQ AX, R15 + LEAQ (DX)(R14*1), CX + ROLQ CL, R15 + BZHIQ R14, R15, R15 + MOVQ CX, DX + MOVQ R8, CX + SHRQ $0x20, CX + ADDQ R15, CX + MOVQ CX, 16(R9) + + // Update match length + MOVQ $0x00000808, CX + BEXTRQ CX, DI, R14 + MOVQ AX, R15 + LEAQ (DX)(R14*1), CX + ROLQ CL, R15 + BZHIQ R14, R15, R15 + MOVQ CX, DX + MOVQ DI, CX + SHRQ $0x20, CX + ADDQ R15, CX + MOVQ CX, 8(R9) + + // Fill bitreader to have enough for the remaining + CMPQ BX, $0x08 + JL sequenceDecs_decode_bmi2_fill_2_byte_by_byte + MOVQ DX, CX + SHRQ $0x03, CX + SUBQ CX, R13 + MOVQ (R13), AX + SUBQ CX, BX + ANDQ $0x07, DX + JMP sequenceDecs_decode_bmi2_fill_2_end + +sequenceDecs_decode_bmi2_fill_2_byte_by_byte: + CMPQ BX, $0x00 + JLE sequenceDecs_decode_bmi2_fill_2_end + CMPQ DX, $0x07 + JLE sequenceDecs_decode_bmi2_fill_2_end + SHLQ $0x08, AX + SUBQ $0x01, R13 + SUBQ $0x01, BX + SUBQ $0x08, DX + MOVBQZX (R13), CX + ORQ CX, AX + JMP sequenceDecs_decode_bmi2_fill_2_byte_by_byte + +sequenceDecs_decode_bmi2_fill_2_end: + // Update literal length + MOVQ $0x00000808, CX + BEXTRQ CX, SI, R14 + MOVQ AX, R15 + LEAQ (DX)(R14*1), CX + ROLQ CL, R15 + BZHIQ R14, R15, R15 + MOVQ CX, DX + MOVQ SI, CX + SHRQ $0x20, CX + ADDQ R15, CX + MOVQ CX, (R9) + + // Fill bitreader for state updates + MOVQ R13, (SP) + MOVQ $0x00000808, CX + BEXTRQ CX, R8, R13 + MOVQ ctx+16(FP), CX + CMPQ 96(CX), $0x00 + JZ sequenceDecs_decode_bmi2_skip_update + LEAQ (SI)(DI*1), R14 + ADDQ R8, R14 + MOVBQZX R14, R14 + LEAQ (DX)(R14*1), CX + MOVQ AX, R15 + MOVQ CX, DX + ROLQ CL, R15 + BZHIQ R14, R15, R15 + + // Update Offset State + BZHIQ R8, R15, CX + SHRXQ R8, R15, R15 + MOVQ $0x00001010, R14 + BEXTRQ R14, R8, R8 + ADDQ CX, R8 + + // Load ctx.ofTable + MOVQ ctx+16(FP), CX + MOVQ 48(CX), CX + MOVQ (CX)(R8*8), R8 + + // Update Match Length State + BZHIQ DI, R15, CX + SHRXQ DI, R15, R15 + MOVQ $0x00001010, R14 + BEXTRQ R14, DI, DI + ADDQ CX, DI + + // Load ctx.mlTable + MOVQ ctx+16(FP), CX + MOVQ 24(CX), CX + MOVQ (CX)(DI*8), DI + + // Update Literal Length State + BZHIQ SI, R15, CX + MOVQ $0x00001010, R14 + BEXTRQ R14, SI, SI + ADDQ CX, SI + + // Load ctx.llTable + MOVQ ctx+16(FP), CX + MOVQ (CX), CX + MOVQ (CX)(SI*8), SI + +sequenceDecs_decode_bmi2_skip_update: + // Adjust offset + MOVQ 16(R9), CX + CMPQ R13, $0x01 + JBE sequenceDecs_decode_bmi2_adjust_offsetB_1_or_0 + MOVQ R11, R12 + MOVQ R10, R11 + MOVQ CX, R10 + JMP sequenceDecs_decode_bmi2_adjust_end + +sequenceDecs_decode_bmi2_adjust_offsetB_1_or_0: + CMPQ (R9), $0x00000000 + JNE sequenceDecs_decode_bmi2_adjust_offset_maybezero + INCQ CX + JMP sequenceDecs_decode_bmi2_adjust_offset_nonzero + +sequenceDecs_decode_bmi2_adjust_offset_maybezero: + TESTQ CX, CX + JNZ sequenceDecs_decode_bmi2_adjust_offset_nonzero + MOVQ R10, CX + JMP sequenceDecs_decode_bmi2_adjust_end + +sequenceDecs_decode_bmi2_adjust_offset_nonzero: + CMPQ CX, $0x01 + JB sequenceDecs_decode_bmi2_adjust_zero + JEQ sequenceDecs_decode_bmi2_adjust_one + CMPQ CX, $0x02 + JA sequenceDecs_decode_bmi2_adjust_three + JMP sequenceDecs_decode_bmi2_adjust_two + +sequenceDecs_decode_bmi2_adjust_zero: + MOVQ R10, R13 + JMP sequenceDecs_decode_bmi2_adjust_test_temp_valid + +sequenceDecs_decode_bmi2_adjust_one: + MOVQ R11, R13 + JMP sequenceDecs_decode_bmi2_adjust_test_temp_valid + +sequenceDecs_decode_bmi2_adjust_two: + MOVQ R12, R13 + JMP sequenceDecs_decode_bmi2_adjust_test_temp_valid + +sequenceDecs_decode_bmi2_adjust_three: + LEAQ -1(R10), R13 + +sequenceDecs_decode_bmi2_adjust_test_temp_valid: + TESTQ R13, R13 + JNZ sequenceDecs_decode_bmi2_adjust_temp_valid + MOVQ $0x00000001, R13 + +sequenceDecs_decode_bmi2_adjust_temp_valid: + CMPQ CX, $0x01 + CMOVQNE R11, R12 + MOVQ R10, R11 + MOVQ R13, R10 + MOVQ R13, CX + +sequenceDecs_decode_bmi2_adjust_end: + MOVQ CX, 16(R9) + + // Check values + MOVQ 8(R9), R13 + MOVQ (R9), R14 + LEAQ (R13)(R14*1), R15 + MOVQ s+0(FP), BP + ADDQ R15, 256(BP) + MOVQ ctx+16(FP), R15 + SUBQ R14, 128(R15) + JS error_not_enough_literals + CMPQ R13, $0x00020002 + JA sequenceDecs_decode_bmi2_error_match_len_too_big + TESTQ CX, CX + JNZ sequenceDecs_decode_bmi2_match_len_ofs_ok + TESTQ R13, R13 + JNZ sequenceDecs_decode_bmi2_error_match_len_ofs_mismatch + +sequenceDecs_decode_bmi2_match_len_ofs_ok: + ADDQ $0x18, R9 + MOVQ ctx+16(FP), CX + DECQ 96(CX) + JNS sequenceDecs_decode_bmi2_main_loop + MOVQ s+0(FP), CX + MOVQ R10, 144(CX) + MOVQ R11, 152(CX) + MOVQ R12, 160(CX) + MOVQ br+8(FP), CX + MOVQ AX, 32(CX) + MOVB DL, 40(CX) + MOVQ BX, 24(CX) + + // Return success + MOVQ $0x00000000, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decode_bmi2_error_match_len_ofs_mismatch: + MOVQ $0x00000001, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decode_bmi2_error_match_len_too_big: + MOVQ $0x00000002, ret+24(FP) + RET + + // Return with match offset too long error + MOVQ $0x00000003, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVQ $0x00000004, ret+24(FP) + RET + + // Return with not enough output space error + MOVQ $0x00000005, ret+24(FP) + RET + +// func sequenceDecs_decode_56_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeAsmContext) int +// Requires: BMI, BMI2, CMOV +TEXT ·sequenceDecs_decode_56_bmi2(SB), $8-32 + MOVQ br+8(FP), CX + MOVQ 32(CX), AX + MOVBQZX 40(CX), DX + MOVQ 24(CX), BX + MOVQ (CX), CX + ADDQ BX, CX + MOVQ CX, (SP) + MOVQ ctx+16(FP), CX + MOVQ 72(CX), SI + MOVQ 80(CX), DI + MOVQ 88(CX), R8 + MOVQ 104(CX), R9 + MOVQ s+0(FP), CX + MOVQ 144(CX), R10 + MOVQ 152(CX), R11 + MOVQ 160(CX), R12 + +sequenceDecs_decode_56_bmi2_main_loop: + MOVQ (SP), R13 + + // Fill bitreader to have enough for the offset and match length. + CMPQ BX, $0x08 + JL sequenceDecs_decode_56_bmi2_fill_byte_by_byte + MOVQ DX, CX + SHRQ $0x03, CX + SUBQ CX, R13 + MOVQ (R13), AX + SUBQ CX, BX + ANDQ $0x07, DX + JMP sequenceDecs_decode_56_bmi2_fill_end + +sequenceDecs_decode_56_bmi2_fill_byte_by_byte: + CMPQ BX, $0x00 + JLE sequenceDecs_decode_56_bmi2_fill_end + CMPQ DX, $0x07 + JLE sequenceDecs_decode_56_bmi2_fill_end + SHLQ $0x08, AX + SUBQ $0x01, R13 + SUBQ $0x01, BX + SUBQ $0x08, DX + MOVBQZX (R13), CX + ORQ CX, AX + JMP sequenceDecs_decode_56_bmi2_fill_byte_by_byte + +sequenceDecs_decode_56_bmi2_fill_end: + // Update offset + MOVQ $0x00000808, CX + BEXTRQ CX, R8, R14 + MOVQ AX, R15 + LEAQ (DX)(R14*1), CX + ROLQ CL, R15 + BZHIQ R14, R15, R15 + MOVQ CX, DX + MOVQ R8, CX + SHRQ $0x20, CX + ADDQ R15, CX + MOVQ CX, 16(R9) + + // Update match length + MOVQ $0x00000808, CX + BEXTRQ CX, DI, R14 + MOVQ AX, R15 + LEAQ (DX)(R14*1), CX + ROLQ CL, R15 + BZHIQ R14, R15, R15 + MOVQ CX, DX + MOVQ DI, CX + SHRQ $0x20, CX + ADDQ R15, CX + MOVQ CX, 8(R9) + + // Update literal length + MOVQ $0x00000808, CX + BEXTRQ CX, SI, R14 + MOVQ AX, R15 + LEAQ (DX)(R14*1), CX + ROLQ CL, R15 + BZHIQ R14, R15, R15 + MOVQ CX, DX + MOVQ SI, CX + SHRQ $0x20, CX + ADDQ R15, CX + MOVQ CX, (R9) + + // Fill bitreader for state updates + MOVQ R13, (SP) + MOVQ $0x00000808, CX + BEXTRQ CX, R8, R13 + MOVQ ctx+16(FP), CX + CMPQ 96(CX), $0x00 + JZ sequenceDecs_decode_56_bmi2_skip_update + LEAQ (SI)(DI*1), R14 + ADDQ R8, R14 + MOVBQZX R14, R14 + LEAQ (DX)(R14*1), CX + MOVQ AX, R15 + MOVQ CX, DX + ROLQ CL, R15 + BZHIQ R14, R15, R15 + + // Update Offset State + BZHIQ R8, R15, CX + SHRXQ R8, R15, R15 + MOVQ $0x00001010, R14 + BEXTRQ R14, R8, R8 + ADDQ CX, R8 + + // Load ctx.ofTable + MOVQ ctx+16(FP), CX + MOVQ 48(CX), CX + MOVQ (CX)(R8*8), R8 + + // Update Match Length State + BZHIQ DI, R15, CX + SHRXQ DI, R15, R15 + MOVQ $0x00001010, R14 + BEXTRQ R14, DI, DI + ADDQ CX, DI + + // Load ctx.mlTable + MOVQ ctx+16(FP), CX + MOVQ 24(CX), CX + MOVQ (CX)(DI*8), DI + + // Update Literal Length State + BZHIQ SI, R15, CX + MOVQ $0x00001010, R14 + BEXTRQ R14, SI, SI + ADDQ CX, SI + + // Load ctx.llTable + MOVQ ctx+16(FP), CX + MOVQ (CX), CX + MOVQ (CX)(SI*8), SI + +sequenceDecs_decode_56_bmi2_skip_update: + // Adjust offset + MOVQ 16(R9), CX + CMPQ R13, $0x01 + JBE sequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0 + MOVQ R11, R12 + MOVQ R10, R11 + MOVQ CX, R10 + JMP sequenceDecs_decode_56_bmi2_adjust_end + +sequenceDecs_decode_56_bmi2_adjust_offsetB_1_or_0: + CMPQ (R9), $0x00000000 + JNE sequenceDecs_decode_56_bmi2_adjust_offset_maybezero + INCQ CX + JMP sequenceDecs_decode_56_bmi2_adjust_offset_nonzero + +sequenceDecs_decode_56_bmi2_adjust_offset_maybezero: + TESTQ CX, CX + JNZ sequenceDecs_decode_56_bmi2_adjust_offset_nonzero + MOVQ R10, CX + JMP sequenceDecs_decode_56_bmi2_adjust_end + +sequenceDecs_decode_56_bmi2_adjust_offset_nonzero: + CMPQ CX, $0x01 + JB sequenceDecs_decode_56_bmi2_adjust_zero + JEQ sequenceDecs_decode_56_bmi2_adjust_one + CMPQ CX, $0x02 + JA sequenceDecs_decode_56_bmi2_adjust_three + JMP sequenceDecs_decode_56_bmi2_adjust_two + +sequenceDecs_decode_56_bmi2_adjust_zero: + MOVQ R10, R13 + JMP sequenceDecs_decode_56_bmi2_adjust_test_temp_valid + +sequenceDecs_decode_56_bmi2_adjust_one: + MOVQ R11, R13 + JMP sequenceDecs_decode_56_bmi2_adjust_test_temp_valid + +sequenceDecs_decode_56_bmi2_adjust_two: + MOVQ R12, R13 + JMP sequenceDecs_decode_56_bmi2_adjust_test_temp_valid + +sequenceDecs_decode_56_bmi2_adjust_three: + LEAQ -1(R10), R13 + +sequenceDecs_decode_56_bmi2_adjust_test_temp_valid: + TESTQ R13, R13 + JNZ sequenceDecs_decode_56_bmi2_adjust_temp_valid + MOVQ $0x00000001, R13 + +sequenceDecs_decode_56_bmi2_adjust_temp_valid: + CMPQ CX, $0x01 + CMOVQNE R11, R12 + MOVQ R10, R11 + MOVQ R13, R10 + MOVQ R13, CX + +sequenceDecs_decode_56_bmi2_adjust_end: + MOVQ CX, 16(R9) + + // Check values + MOVQ 8(R9), R13 + MOVQ (R9), R14 + LEAQ (R13)(R14*1), R15 + MOVQ s+0(FP), BP + ADDQ R15, 256(BP) + MOVQ ctx+16(FP), R15 + SUBQ R14, 128(R15) + JS error_not_enough_literals + CMPQ R13, $0x00020002 + JA sequenceDecs_decode_56_bmi2_error_match_len_too_big + TESTQ CX, CX + JNZ sequenceDecs_decode_56_bmi2_match_len_ofs_ok + TESTQ R13, R13 + JNZ sequenceDecs_decode_56_bmi2_error_match_len_ofs_mismatch + +sequenceDecs_decode_56_bmi2_match_len_ofs_ok: + ADDQ $0x18, R9 + MOVQ ctx+16(FP), CX + DECQ 96(CX) + JNS sequenceDecs_decode_56_bmi2_main_loop + MOVQ s+0(FP), CX + MOVQ R10, 144(CX) + MOVQ R11, 152(CX) + MOVQ R12, 160(CX) + MOVQ br+8(FP), CX + MOVQ AX, 32(CX) + MOVB DL, 40(CX) + MOVQ BX, 24(CX) + + // Return success + MOVQ $0x00000000, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decode_56_bmi2_error_match_len_ofs_mismatch: + MOVQ $0x00000001, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decode_56_bmi2_error_match_len_too_big: + MOVQ $0x00000002, ret+24(FP) + RET + + // Return with match offset too long error + MOVQ $0x00000003, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVQ $0x00000004, ret+24(FP) + RET + + // Return with not enough output space error + MOVQ $0x00000005, ret+24(FP) + RET + +// func sequenceDecs_executeSimple_amd64(ctx *executeAsmContext) bool +// Requires: SSE +TEXT ·sequenceDecs_executeSimple_amd64(SB), $8-9 + MOVQ ctx+0(FP), R10 + MOVQ 8(R10), CX + TESTQ CX, CX + JZ empty_seqs + MOVQ (R10), AX + MOVQ 24(R10), DX + MOVQ 32(R10), BX + MOVQ 80(R10), SI + MOVQ 104(R10), DI + MOVQ 120(R10), R8 + MOVQ 56(R10), R9 + MOVQ 64(R10), R10 + ADDQ R10, R9 + + // seqsBase += 24 * seqIndex + LEAQ (DX)(DX*2), R11 + SHLQ $0x03, R11 + ADDQ R11, AX + + // outBase += outPosition + ADDQ DI, BX + +main_loop: + MOVQ (AX), R11 + MOVQ 16(AX), R12 + MOVQ 8(AX), R13 + + // Copy literals + TESTQ R11, R11 + JZ check_offset + XORQ R14, R14 + +copy_1: + MOVUPS (SI)(R14*1), X0 + MOVUPS X0, (BX)(R14*1) + ADDQ $0x10, R14 + CMPQ R14, R11 + JB copy_1 + ADDQ R11, SI + ADDQ R11, BX + ADDQ R11, DI + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + LEAQ (DI)(R10*1), R11 + CMPQ R12, R11 + JG error_match_off_too_big + CMPQ R12, R8 + JG error_match_off_too_big + + // Copy match from history + MOVQ R12, R11 + SUBQ DI, R11 + JLS copy_match + MOVQ R9, R14 + SUBQ R11, R14 + CMPQ R13, R11 + JGE copy_all_from_history + XORQ R11, R11 + TESTQ $0x00000001, R13 + JZ copy_4_word + MOVB (R14)(R11*1), R12 + MOVB R12, (BX)(R11*1) + ADDQ $0x01, R11 + +copy_4_word: + TESTQ $0x00000002, R13 + JZ copy_4_dword + MOVW (R14)(R11*1), R12 + MOVW R12, (BX)(R11*1) + ADDQ $0x02, R11 + +copy_4_dword: + TESTQ $0x00000004, R13 + JZ copy_4_qword + MOVL (R14)(R11*1), R12 + MOVL R12, (BX)(R11*1) + ADDQ $0x04, R11 + +copy_4_qword: + TESTQ $0x00000008, R13 + JZ copy_4_test + MOVQ (R14)(R11*1), R12 + MOVQ R12, (BX)(R11*1) + ADDQ $0x08, R11 + JMP copy_4_test + +copy_4: + MOVUPS (R14)(R11*1), X0 + MOVUPS X0, (BX)(R11*1) + ADDQ $0x10, R11 + +copy_4_test: + CMPQ R11, R13 + JB copy_4 + ADDQ R13, DI + ADDQ R13, BX + ADDQ $0x18, AX + INCQ DX + CMPQ DX, CX + JB main_loop + JMP loop_finished + +copy_all_from_history: + XORQ R15, R15 + TESTQ $0x00000001, R11 + JZ copy_5_word + MOVB (R14)(R15*1), BP + MOVB BP, (BX)(R15*1) + ADDQ $0x01, R15 + +copy_5_word: + TESTQ $0x00000002, R11 + JZ copy_5_dword + MOVW (R14)(R15*1), BP + MOVW BP, (BX)(R15*1) + ADDQ $0x02, R15 + +copy_5_dword: + TESTQ $0x00000004, R11 + JZ copy_5_qword + MOVL (R14)(R15*1), BP + MOVL BP, (BX)(R15*1) + ADDQ $0x04, R15 + +copy_5_qword: + TESTQ $0x00000008, R11 + JZ copy_5_test + MOVQ (R14)(R15*1), BP + MOVQ BP, (BX)(R15*1) + ADDQ $0x08, R15 + JMP copy_5_test + +copy_5: + MOVUPS (R14)(R15*1), X0 + MOVUPS X0, (BX)(R15*1) + ADDQ $0x10, R15 + +copy_5_test: + CMPQ R15, R11 + JB copy_5 + ADDQ R11, BX + ADDQ R11, DI + SUBQ R11, R13 + + // Copy match from the current buffer +copy_match: + TESTQ R13, R13 + JZ handle_loop + MOVQ BX, R11 + SUBQ R12, R11 + + // ml <= mo + CMPQ R13, R12 + JA copy_overlapping_match + + // Copy non-overlapping match + ADDQ R13, DI + MOVQ BX, R12 + ADDQ R13, BX + +copy_2: + MOVUPS (R11), X0 + MOVUPS X0, (R12) + ADDQ $0x10, R11 + ADDQ $0x10, R12 + SUBQ $0x10, R13 + JHI copy_2 + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADDQ R13, DI + +copy_slow_3: + MOVB (R11), R12 + MOVB R12, (BX) + INCQ R11 + INCQ BX + DECQ R13 + JNZ copy_slow_3 + +handle_loop: + ADDQ $0x18, AX + INCQ DX + CMPQ DX, CX + JB main_loop + +loop_finished: + // Return value + MOVB $0x01, ret+8(FP) + + // Update the context + MOVQ ctx+0(FP), AX + MOVQ DX, 24(AX) + MOVQ DI, 104(AX) + MOVQ 80(AX), CX + SUBQ CX, SI + MOVQ SI, 112(AX) + RET + +error_match_off_too_big: + // Return value + MOVB $0x00, ret+8(FP) + + // Update the context + MOVQ ctx+0(FP), AX + MOVQ DX, 24(AX) + MOVQ DI, 104(AX) + MOVQ 80(AX), CX + SUBQ CX, SI + MOVQ SI, 112(AX) + RET + +empty_seqs: + // Return value + MOVB $0x01, ret+8(FP) + RET + +// func sequenceDecs_executeSimple_safe_amd64(ctx *executeAsmContext) bool +// Requires: SSE +TEXT ·sequenceDecs_executeSimple_safe_amd64(SB), $8-9 + MOVQ ctx+0(FP), R10 + MOVQ 8(R10), CX + TESTQ CX, CX + JZ empty_seqs + MOVQ (R10), AX + MOVQ 24(R10), DX + MOVQ 32(R10), BX + MOVQ 80(R10), SI + MOVQ 104(R10), DI + MOVQ 120(R10), R8 + MOVQ 56(R10), R9 + MOVQ 64(R10), R10 + ADDQ R10, R9 + + // seqsBase += 24 * seqIndex + LEAQ (DX)(DX*2), R11 + SHLQ $0x03, R11 + ADDQ R11, AX + + // outBase += outPosition + ADDQ DI, BX + +main_loop: + MOVQ (AX), R11 + MOVQ 16(AX), R12 + MOVQ 8(AX), R13 + + // Copy literals + TESTQ R11, R11 + JZ check_offset + XORQ R14, R14 + TESTQ $0x00000001, R11 + JZ copy_1_word + MOVB (SI)(R14*1), R15 + MOVB R15, (BX)(R14*1) + ADDQ $0x01, R14 + +copy_1_word: + TESTQ $0x00000002, R11 + JZ copy_1_dword + MOVW (SI)(R14*1), R15 + MOVW R15, (BX)(R14*1) + ADDQ $0x02, R14 + +copy_1_dword: + TESTQ $0x00000004, R11 + JZ copy_1_qword + MOVL (SI)(R14*1), R15 + MOVL R15, (BX)(R14*1) + ADDQ $0x04, R14 + +copy_1_qword: + TESTQ $0x00000008, R11 + JZ copy_1_test + MOVQ (SI)(R14*1), R15 + MOVQ R15, (BX)(R14*1) + ADDQ $0x08, R14 + JMP copy_1_test + +copy_1: + MOVUPS (SI)(R14*1), X0 + MOVUPS X0, (BX)(R14*1) + ADDQ $0x10, R14 + +copy_1_test: + CMPQ R14, R11 + JB copy_1 + ADDQ R11, SI + ADDQ R11, BX + ADDQ R11, DI + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + LEAQ (DI)(R10*1), R11 + CMPQ R12, R11 + JG error_match_off_too_big + CMPQ R12, R8 + JG error_match_off_too_big + + // Copy match from history + MOVQ R12, R11 + SUBQ DI, R11 + JLS copy_match + MOVQ R9, R14 + SUBQ R11, R14 + CMPQ R13, R11 + JGE copy_all_from_history + XORQ R11, R11 + TESTQ $0x00000001, R13 + JZ copy_4_word + MOVB (R14)(R11*1), R12 + MOVB R12, (BX)(R11*1) + ADDQ $0x01, R11 + +copy_4_word: + TESTQ $0x00000002, R13 + JZ copy_4_dword + MOVW (R14)(R11*1), R12 + MOVW R12, (BX)(R11*1) + ADDQ $0x02, R11 + +copy_4_dword: + TESTQ $0x00000004, R13 + JZ copy_4_qword + MOVL (R14)(R11*1), R12 + MOVL R12, (BX)(R11*1) + ADDQ $0x04, R11 + +copy_4_qword: + TESTQ $0x00000008, R13 + JZ copy_4_test + MOVQ (R14)(R11*1), R12 + MOVQ R12, (BX)(R11*1) + ADDQ $0x08, R11 + JMP copy_4_test + +copy_4: + MOVUPS (R14)(R11*1), X0 + MOVUPS X0, (BX)(R11*1) + ADDQ $0x10, R11 + +copy_4_test: + CMPQ R11, R13 + JB copy_4 + ADDQ R13, DI + ADDQ R13, BX + ADDQ $0x18, AX + INCQ DX + CMPQ DX, CX + JB main_loop + JMP loop_finished + +copy_all_from_history: + XORQ R15, R15 + TESTQ $0x00000001, R11 + JZ copy_5_word + MOVB (R14)(R15*1), BP + MOVB BP, (BX)(R15*1) + ADDQ $0x01, R15 + +copy_5_word: + TESTQ $0x00000002, R11 + JZ copy_5_dword + MOVW (R14)(R15*1), BP + MOVW BP, (BX)(R15*1) + ADDQ $0x02, R15 + +copy_5_dword: + TESTQ $0x00000004, R11 + JZ copy_5_qword + MOVL (R14)(R15*1), BP + MOVL BP, (BX)(R15*1) + ADDQ $0x04, R15 + +copy_5_qword: + TESTQ $0x00000008, R11 + JZ copy_5_test + MOVQ (R14)(R15*1), BP + MOVQ BP, (BX)(R15*1) + ADDQ $0x08, R15 + JMP copy_5_test + +copy_5: + MOVUPS (R14)(R15*1), X0 + MOVUPS X0, (BX)(R15*1) + ADDQ $0x10, R15 + +copy_5_test: + CMPQ R15, R11 + JB copy_5 + ADDQ R11, BX + ADDQ R11, DI + SUBQ R11, R13 + + // Copy match from the current buffer +copy_match: + TESTQ R13, R13 + JZ handle_loop + MOVQ BX, R11 + SUBQ R12, R11 + + // ml <= mo + CMPQ R13, R12 + JA copy_overlapping_match + + // Copy non-overlapping match + ADDQ R13, DI + XORQ R12, R12 + TESTQ $0x00000001, R13 + JZ copy_2_word + MOVB (R11)(R12*1), R14 + MOVB R14, (BX)(R12*1) + ADDQ $0x01, R12 + +copy_2_word: + TESTQ $0x00000002, R13 + JZ copy_2_dword + MOVW (R11)(R12*1), R14 + MOVW R14, (BX)(R12*1) + ADDQ $0x02, R12 + +copy_2_dword: + TESTQ $0x00000004, R13 + JZ copy_2_qword + MOVL (R11)(R12*1), R14 + MOVL R14, (BX)(R12*1) + ADDQ $0x04, R12 + +copy_2_qword: + TESTQ $0x00000008, R13 + JZ copy_2_test + MOVQ (R11)(R12*1), R14 + MOVQ R14, (BX)(R12*1) + ADDQ $0x08, R12 + JMP copy_2_test + +copy_2: + MOVUPS (R11)(R12*1), X0 + MOVUPS X0, (BX)(R12*1) + ADDQ $0x10, R12 + +copy_2_test: + CMPQ R12, R13 + JB copy_2 + ADDQ R13, BX + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADDQ R13, DI + +copy_slow_3: + MOVB (R11), R12 + MOVB R12, (BX) + INCQ R11 + INCQ BX + DECQ R13 + JNZ copy_slow_3 + +handle_loop: + ADDQ $0x18, AX + INCQ DX + CMPQ DX, CX + JB main_loop + +loop_finished: + // Return value + MOVB $0x01, ret+8(FP) + + // Update the context + MOVQ ctx+0(FP), AX + MOVQ DX, 24(AX) + MOVQ DI, 104(AX) + MOVQ 80(AX), CX + SUBQ CX, SI + MOVQ SI, 112(AX) + RET + +error_match_off_too_big: + // Return value + MOVB $0x00, ret+8(FP) + + // Update the context + MOVQ ctx+0(FP), AX + MOVQ DX, 24(AX) + MOVQ DI, 104(AX) + MOVQ 80(AX), CX + SUBQ CX, SI + MOVQ SI, 112(AX) + RET + +empty_seqs: + // Return value + MOVB $0x01, ret+8(FP) + RET + +// func sequenceDecs_decodeSync_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +// Requires: CMOV, SSE +TEXT ·sequenceDecs_decodeSync_amd64(SB), $64-32 + MOVQ br+8(FP), AX + MOVQ 32(AX), DX + MOVBQZX 40(AX), BX + MOVQ 24(AX), SI + MOVQ (AX), AX + ADDQ SI, AX + MOVQ AX, (SP) + MOVQ ctx+16(FP), AX + MOVQ 72(AX), DI + MOVQ 80(AX), R8 + MOVQ 88(AX), R9 + MOVQ 112(AX), R10 + MOVQ 128(AX), CX + MOVQ CX, 32(SP) + MOVQ 144(AX), R11 + MOVQ 136(AX), R12 + MOVQ 200(AX), CX + MOVQ CX, 56(SP) + MOVQ 176(AX), CX + MOVQ CX, 48(SP) + MOVQ 184(AX), AX + MOVQ AX, 40(SP) + MOVQ 40(SP), AX + ADDQ AX, 48(SP) + + // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + ADDQ R10, 32(SP) + + // outBase += outPosition + ADDQ R12, R10 + +sequenceDecs_decodeSync_amd64_main_loop: + MOVQ (SP), R13 + + // Fill bitreader to have enough for the offset and match length. + CMPQ SI, $0x08 + JL sequenceDecs_decodeSync_amd64_fill_byte_by_byte + MOVQ BX, AX + SHRQ $0x03, AX + SUBQ AX, R13 + MOVQ (R13), DX + SUBQ AX, SI + ANDQ $0x07, BX + JMP sequenceDecs_decodeSync_amd64_fill_end + +sequenceDecs_decodeSync_amd64_fill_byte_by_byte: + CMPQ SI, $0x00 + JLE sequenceDecs_decodeSync_amd64_fill_end + CMPQ BX, $0x07 + JLE sequenceDecs_decodeSync_amd64_fill_end + SHLQ $0x08, DX + SUBQ $0x01, R13 + SUBQ $0x01, SI + SUBQ $0x08, BX + MOVBQZX (R13), AX + ORQ AX, DX + JMP sequenceDecs_decodeSync_amd64_fill_byte_by_byte + +sequenceDecs_decodeSync_amd64_fill_end: + // Update offset + MOVQ R9, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R14 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R14 + ADDQ R14, AX + MOVQ AX, 8(SP) + + // Update match length + MOVQ R8, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R14 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R14 + ADDQ R14, AX + MOVQ AX, 16(SP) + + // Fill bitreader to have enough for the remaining + CMPQ SI, $0x08 + JL sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte + MOVQ BX, AX + SHRQ $0x03, AX + SUBQ AX, R13 + MOVQ (R13), DX + SUBQ AX, SI + ANDQ $0x07, BX + JMP sequenceDecs_decodeSync_amd64_fill_2_end + +sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte: + CMPQ SI, $0x00 + JLE sequenceDecs_decodeSync_amd64_fill_2_end + CMPQ BX, $0x07 + JLE sequenceDecs_decodeSync_amd64_fill_2_end + SHLQ $0x08, DX + SUBQ $0x01, R13 + SUBQ $0x01, SI + SUBQ $0x08, BX + MOVBQZX (R13), AX + ORQ AX, DX + JMP sequenceDecs_decodeSync_amd64_fill_2_byte_by_byte + +sequenceDecs_decodeSync_amd64_fill_2_end: + // Update literal length + MOVQ DI, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R14 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R14 + ADDQ R14, AX + MOVQ AX, 24(SP) + + // Fill bitreader for state updates + MOVQ R13, (SP) + MOVQ R9, AX + SHRQ $0x08, AX + MOVBQZX AL, AX + MOVQ ctx+16(FP), CX + CMPQ 96(CX), $0x00 + JZ sequenceDecs_decodeSync_amd64_skip_update + + // Update Literal Length State + MOVBQZX DI, R13 + SHRQ $0x10, DI + MOVWQZX DI, DI + CMPQ R13, $0x00 + JZ sequenceDecs_decodeSync_amd64_llState_updateState_skip_zero + MOVQ BX, CX + ADDQ R13, BX + MOVQ DX, R14 + SHLQ CL, R14 + MOVQ R13, CX + NEGQ CX + SHRQ CL, R14 + ADDQ R14, DI + +sequenceDecs_decodeSync_amd64_llState_updateState_skip_zero: + // Load ctx.llTable + MOVQ ctx+16(FP), CX + MOVQ (CX), CX + MOVQ (CX)(DI*8), DI + + // Update Match Length State + MOVBQZX R8, R13 + SHRQ $0x10, R8 + MOVWQZX R8, R8 + CMPQ R13, $0x00 + JZ sequenceDecs_decodeSync_amd64_mlState_updateState_skip_zero + MOVQ BX, CX + ADDQ R13, BX + MOVQ DX, R14 + SHLQ CL, R14 + MOVQ R13, CX + NEGQ CX + SHRQ CL, R14 + ADDQ R14, R8 + +sequenceDecs_decodeSync_amd64_mlState_updateState_skip_zero: + // Load ctx.mlTable + MOVQ ctx+16(FP), CX + MOVQ 24(CX), CX + MOVQ (CX)(R8*8), R8 + + // Update Offset State + MOVBQZX R9, R13 + SHRQ $0x10, R9 + MOVWQZX R9, R9 + CMPQ R13, $0x00 + JZ sequenceDecs_decodeSync_amd64_ofState_updateState_skip_zero + MOVQ BX, CX + ADDQ R13, BX + MOVQ DX, R14 + SHLQ CL, R14 + MOVQ R13, CX + NEGQ CX + SHRQ CL, R14 + ADDQ R14, R9 + +sequenceDecs_decodeSync_amd64_ofState_updateState_skip_zero: + // Load ctx.ofTable + MOVQ ctx+16(FP), CX + MOVQ 48(CX), CX + MOVQ (CX)(R9*8), R9 + +sequenceDecs_decodeSync_amd64_skip_update: + // Adjust offset + MOVQ s+0(FP), CX + MOVQ 8(SP), R13 + CMPQ AX, $0x01 + JBE sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0 + MOVUPS 144(CX), X0 + MOVQ R13, 144(CX) + MOVUPS X0, 152(CX) + JMP sequenceDecs_decodeSync_amd64_adjust_end + +sequenceDecs_decodeSync_amd64_adjust_offsetB_1_or_0: + CMPQ 24(SP), $0x00000000 + JNE sequenceDecs_decodeSync_amd64_adjust_offset_maybezero + INCQ R13 + JMP sequenceDecs_decodeSync_amd64_adjust_offset_nonzero + +sequenceDecs_decodeSync_amd64_adjust_offset_maybezero: + TESTQ R13, R13 + JNZ sequenceDecs_decodeSync_amd64_adjust_offset_nonzero + MOVQ 144(CX), R13 + JMP sequenceDecs_decodeSync_amd64_adjust_end + +sequenceDecs_decodeSync_amd64_adjust_offset_nonzero: + MOVQ R13, AX + XORQ R14, R14 + MOVQ $-1, R15 + CMPQ R13, $0x03 + CMOVQEQ R14, AX + CMOVQEQ R15, R14 + LEAQ 144(CX), R15 + ADDQ (R15)(AX*8), R14 + JNZ sequenceDecs_decodeSync_amd64_adjust_temp_valid + MOVQ $0x00000001, R14 + +sequenceDecs_decodeSync_amd64_adjust_temp_valid: + CMPQ R13, $0x01 + JZ sequenceDecs_decodeSync_amd64_adjust_skip + MOVQ 152(CX), AX + MOVQ AX, 160(CX) + +sequenceDecs_decodeSync_amd64_adjust_skip: + MOVQ 144(CX), AX + MOVQ AX, 152(CX) + MOVQ R14, 144(CX) + MOVQ R14, R13 + +sequenceDecs_decodeSync_amd64_adjust_end: + MOVQ R13, 8(SP) + + // Check values + MOVQ 16(SP), AX + MOVQ 24(SP), CX + LEAQ (AX)(CX*1), R14 + MOVQ s+0(FP), R15 + ADDQ R14, 256(R15) + MOVQ ctx+16(FP), R14 + SUBQ CX, 104(R14) + JS error_not_enough_literals + CMPQ AX, $0x00020002 + JA sequenceDecs_decodeSync_amd64_error_match_len_too_big + TESTQ R13, R13 + JNZ sequenceDecs_decodeSync_amd64_match_len_ofs_ok + TESTQ AX, AX + JNZ sequenceDecs_decodeSync_amd64_error_match_len_ofs_mismatch + +sequenceDecs_decodeSync_amd64_match_len_ofs_ok: + MOVQ 24(SP), AX + MOVQ 8(SP), CX + MOVQ 16(SP), R13 + + // Check if we have enough space in s.out + LEAQ (AX)(R13*1), R14 + ADDQ R10, R14 + CMPQ R14, 32(SP) + JA error_not_enough_space + + // Copy literals + TESTQ AX, AX + JZ check_offset + XORQ R14, R14 + +copy_1: + MOVUPS (R11)(R14*1), X0 + MOVUPS X0, (R10)(R14*1) + ADDQ $0x10, R14 + CMPQ R14, AX + JB copy_1 + ADDQ AX, R11 + ADDQ AX, R10 + ADDQ AX, R12 + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + MOVQ R12, AX + ADDQ 40(SP), AX + CMPQ CX, AX + JG error_match_off_too_big + CMPQ CX, 56(SP) + JG error_match_off_too_big + + // Copy match from history + MOVQ CX, AX + SUBQ R12, AX + JLS copy_match + MOVQ 48(SP), R14 + SUBQ AX, R14 + CMPQ R13, AX + JGE copy_all_from_history + XORQ AX, AX + TESTQ $0x00000001, R13 + JZ copy_4_word + MOVB (R14)(AX*1), CL + MOVB CL, (R10)(AX*1) + ADDQ $0x01, AX + +copy_4_word: + TESTQ $0x00000002, R13 + JZ copy_4_dword + MOVW (R14)(AX*1), CX + MOVW CX, (R10)(AX*1) + ADDQ $0x02, AX + +copy_4_dword: + TESTQ $0x00000004, R13 + JZ copy_4_qword + MOVL (R14)(AX*1), CX + MOVL CX, (R10)(AX*1) + ADDQ $0x04, AX + +copy_4_qword: + TESTQ $0x00000008, R13 + JZ copy_4_test + MOVQ (R14)(AX*1), CX + MOVQ CX, (R10)(AX*1) + ADDQ $0x08, AX + JMP copy_4_test + +copy_4: + MOVUPS (R14)(AX*1), X0 + MOVUPS X0, (R10)(AX*1) + ADDQ $0x10, AX + +copy_4_test: + CMPQ AX, R13 + JB copy_4 + ADDQ R13, R12 + ADDQ R13, R10 + JMP handle_loop + JMP loop_finished + +copy_all_from_history: + XORQ R15, R15 + TESTQ $0x00000001, AX + JZ copy_5_word + MOVB (R14)(R15*1), BP + MOVB BP, (R10)(R15*1) + ADDQ $0x01, R15 + +copy_5_word: + TESTQ $0x00000002, AX + JZ copy_5_dword + MOVW (R14)(R15*1), BP + MOVW BP, (R10)(R15*1) + ADDQ $0x02, R15 + +copy_5_dword: + TESTQ $0x00000004, AX + JZ copy_5_qword + MOVL (R14)(R15*1), BP + MOVL BP, (R10)(R15*1) + ADDQ $0x04, R15 + +copy_5_qword: + TESTQ $0x00000008, AX + JZ copy_5_test + MOVQ (R14)(R15*1), BP + MOVQ BP, (R10)(R15*1) + ADDQ $0x08, R15 + JMP copy_5_test + +copy_5: + MOVUPS (R14)(R15*1), X0 + MOVUPS X0, (R10)(R15*1) + ADDQ $0x10, R15 + +copy_5_test: + CMPQ R15, AX + JB copy_5 + ADDQ AX, R10 + ADDQ AX, R12 + SUBQ AX, R13 + + // Copy match from the current buffer +copy_match: + TESTQ R13, R13 + JZ handle_loop + MOVQ R10, AX + SUBQ CX, AX + + // ml <= mo + CMPQ R13, CX + JA copy_overlapping_match + + // Copy non-overlapping match + ADDQ R13, R12 + MOVQ R10, CX + ADDQ R13, R10 + +copy_2: + MOVUPS (AX), X0 + MOVUPS X0, (CX) + ADDQ $0x10, AX + ADDQ $0x10, CX + SUBQ $0x10, R13 + JHI copy_2 + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADDQ R13, R12 + +copy_slow_3: + MOVB (AX), CL + MOVB CL, (R10) + INCQ AX + INCQ R10 + DECQ R13 + JNZ copy_slow_3 + +handle_loop: + MOVQ ctx+16(FP), AX + DECQ 96(AX) + JNS sequenceDecs_decodeSync_amd64_main_loop + +loop_finished: + MOVQ br+8(FP), AX + MOVQ DX, 32(AX) + MOVB BL, 40(AX) + MOVQ SI, 24(AX) + + // Update the context + MOVQ ctx+16(FP), AX + MOVQ R12, 136(AX) + MOVQ 144(AX), CX + SUBQ CX, R11 + MOVQ R11, 168(AX) + + // Return success + MOVQ $0x00000000, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decodeSync_amd64_error_match_len_ofs_mismatch: + MOVQ 16(SP), AX + MOVQ ctx+16(FP), CX + MOVQ AX, 216(CX) + MOVQ $0x00000001, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decodeSync_amd64_error_match_len_too_big: + MOVQ ctx+16(FP), AX + MOVQ 16(SP), CX + MOVQ CX, 216(AX) + MOVQ $0x00000002, ret+24(FP) + RET + + // Return with match offset too long error +error_match_off_too_big: + MOVQ ctx+16(FP), AX + MOVQ 8(SP), CX + MOVQ CX, 224(AX) + MOVQ R12, 136(AX) + MOVQ $0x00000003, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVQ ctx+16(FP), AX + MOVQ 24(SP), CX + MOVQ CX, 208(AX) + MOVQ $0x00000004, ret+24(FP) + RET + + // Return with not enough output space error +error_not_enough_space: + MOVQ ctx+16(FP), AX + MOVQ 24(SP), CX + MOVQ CX, 208(AX) + MOVQ 16(SP), CX + MOVQ CX, 216(AX) + MOVQ R12, 136(AX) + MOVQ $0x00000005, ret+24(FP) + RET + +// func sequenceDecs_decodeSync_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +// Requires: BMI, BMI2, CMOV, SSE +TEXT ·sequenceDecs_decodeSync_bmi2(SB), $64-32 + MOVQ br+8(FP), CX + MOVQ 32(CX), AX + MOVBQZX 40(CX), DX + MOVQ 24(CX), BX + MOVQ (CX), CX + ADDQ BX, CX + MOVQ CX, (SP) + MOVQ ctx+16(FP), CX + MOVQ 72(CX), SI + MOVQ 80(CX), DI + MOVQ 88(CX), R8 + MOVQ 112(CX), R9 + MOVQ 128(CX), R10 + MOVQ R10, 32(SP) + MOVQ 144(CX), R10 + MOVQ 136(CX), R11 + MOVQ 200(CX), R12 + MOVQ R12, 56(SP) + MOVQ 176(CX), R12 + MOVQ R12, 48(SP) + MOVQ 184(CX), CX + MOVQ CX, 40(SP) + MOVQ 40(SP), CX + ADDQ CX, 48(SP) + + // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + ADDQ R9, 32(SP) + + // outBase += outPosition + ADDQ R11, R9 + +sequenceDecs_decodeSync_bmi2_main_loop: + MOVQ (SP), R12 + + // Fill bitreader to have enough for the offset and match length. + CMPQ BX, $0x08 + JL sequenceDecs_decodeSync_bmi2_fill_byte_by_byte + MOVQ DX, CX + SHRQ $0x03, CX + SUBQ CX, R12 + MOVQ (R12), AX + SUBQ CX, BX + ANDQ $0x07, DX + JMP sequenceDecs_decodeSync_bmi2_fill_end + +sequenceDecs_decodeSync_bmi2_fill_byte_by_byte: + CMPQ BX, $0x00 + JLE sequenceDecs_decodeSync_bmi2_fill_end + CMPQ DX, $0x07 + JLE sequenceDecs_decodeSync_bmi2_fill_end + SHLQ $0x08, AX + SUBQ $0x01, R12 + SUBQ $0x01, BX + SUBQ $0x08, DX + MOVBQZX (R12), CX + ORQ CX, AX + JMP sequenceDecs_decodeSync_bmi2_fill_byte_by_byte + +sequenceDecs_decodeSync_bmi2_fill_end: + // Update offset + MOVQ $0x00000808, CX + BEXTRQ CX, R8, R13 + MOVQ AX, R14 + LEAQ (DX)(R13*1), CX + ROLQ CL, R14 + BZHIQ R13, R14, R14 + MOVQ CX, DX + MOVQ R8, CX + SHRQ $0x20, CX + ADDQ R14, CX + MOVQ CX, 8(SP) + + // Update match length + MOVQ $0x00000808, CX + BEXTRQ CX, DI, R13 + MOVQ AX, R14 + LEAQ (DX)(R13*1), CX + ROLQ CL, R14 + BZHIQ R13, R14, R14 + MOVQ CX, DX + MOVQ DI, CX + SHRQ $0x20, CX + ADDQ R14, CX + MOVQ CX, 16(SP) + + // Fill bitreader to have enough for the remaining + CMPQ BX, $0x08 + JL sequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte + MOVQ DX, CX + SHRQ $0x03, CX + SUBQ CX, R12 + MOVQ (R12), AX + SUBQ CX, BX + ANDQ $0x07, DX + JMP sequenceDecs_decodeSync_bmi2_fill_2_end + +sequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte: + CMPQ BX, $0x00 + JLE sequenceDecs_decodeSync_bmi2_fill_2_end + CMPQ DX, $0x07 + JLE sequenceDecs_decodeSync_bmi2_fill_2_end + SHLQ $0x08, AX + SUBQ $0x01, R12 + SUBQ $0x01, BX + SUBQ $0x08, DX + MOVBQZX (R12), CX + ORQ CX, AX + JMP sequenceDecs_decodeSync_bmi2_fill_2_byte_by_byte + +sequenceDecs_decodeSync_bmi2_fill_2_end: + // Update literal length + MOVQ $0x00000808, CX + BEXTRQ CX, SI, R13 + MOVQ AX, R14 + LEAQ (DX)(R13*1), CX + ROLQ CL, R14 + BZHIQ R13, R14, R14 + MOVQ CX, DX + MOVQ SI, CX + SHRQ $0x20, CX + ADDQ R14, CX + MOVQ CX, 24(SP) + + // Fill bitreader for state updates + MOVQ R12, (SP) + MOVQ $0x00000808, CX + BEXTRQ CX, R8, R12 + MOVQ ctx+16(FP), CX + CMPQ 96(CX), $0x00 + JZ sequenceDecs_decodeSync_bmi2_skip_update + LEAQ (SI)(DI*1), R13 + ADDQ R8, R13 + MOVBQZX R13, R13 + LEAQ (DX)(R13*1), CX + MOVQ AX, R14 + MOVQ CX, DX + ROLQ CL, R14 + BZHIQ R13, R14, R14 + + // Update Offset State + BZHIQ R8, R14, CX + SHRXQ R8, R14, R14 + MOVQ $0x00001010, R13 + BEXTRQ R13, R8, R8 + ADDQ CX, R8 + + // Load ctx.ofTable + MOVQ ctx+16(FP), CX + MOVQ 48(CX), CX + MOVQ (CX)(R8*8), R8 + + // Update Match Length State + BZHIQ DI, R14, CX + SHRXQ DI, R14, R14 + MOVQ $0x00001010, R13 + BEXTRQ R13, DI, DI + ADDQ CX, DI + + // Load ctx.mlTable + MOVQ ctx+16(FP), CX + MOVQ 24(CX), CX + MOVQ (CX)(DI*8), DI + + // Update Literal Length State + BZHIQ SI, R14, CX + MOVQ $0x00001010, R13 + BEXTRQ R13, SI, SI + ADDQ CX, SI + + // Load ctx.llTable + MOVQ ctx+16(FP), CX + MOVQ (CX), CX + MOVQ (CX)(SI*8), SI + +sequenceDecs_decodeSync_bmi2_skip_update: + // Adjust offset + MOVQ s+0(FP), CX + MOVQ 8(SP), R13 + CMPQ R12, $0x01 + JBE sequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0 + MOVUPS 144(CX), X0 + MOVQ R13, 144(CX) + MOVUPS X0, 152(CX) + JMP sequenceDecs_decodeSync_bmi2_adjust_end + +sequenceDecs_decodeSync_bmi2_adjust_offsetB_1_or_0: + CMPQ 24(SP), $0x00000000 + JNE sequenceDecs_decodeSync_bmi2_adjust_offset_maybezero + INCQ R13 + JMP sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero + +sequenceDecs_decodeSync_bmi2_adjust_offset_maybezero: + TESTQ R13, R13 + JNZ sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero + MOVQ 144(CX), R13 + JMP sequenceDecs_decodeSync_bmi2_adjust_end + +sequenceDecs_decodeSync_bmi2_adjust_offset_nonzero: + MOVQ R13, R12 + XORQ R14, R14 + MOVQ $-1, R15 + CMPQ R13, $0x03 + CMOVQEQ R14, R12 + CMOVQEQ R15, R14 + LEAQ 144(CX), R15 + ADDQ (R15)(R12*8), R14 + JNZ sequenceDecs_decodeSync_bmi2_adjust_temp_valid + MOVQ $0x00000001, R14 + +sequenceDecs_decodeSync_bmi2_adjust_temp_valid: + CMPQ R13, $0x01 + JZ sequenceDecs_decodeSync_bmi2_adjust_skip + MOVQ 152(CX), R12 + MOVQ R12, 160(CX) + +sequenceDecs_decodeSync_bmi2_adjust_skip: + MOVQ 144(CX), R12 + MOVQ R12, 152(CX) + MOVQ R14, 144(CX) + MOVQ R14, R13 + +sequenceDecs_decodeSync_bmi2_adjust_end: + MOVQ R13, 8(SP) + + // Check values + MOVQ 16(SP), CX + MOVQ 24(SP), R12 + LEAQ (CX)(R12*1), R14 + MOVQ s+0(FP), R15 + ADDQ R14, 256(R15) + MOVQ ctx+16(FP), R14 + SUBQ R12, 104(R14) + JS error_not_enough_literals + CMPQ CX, $0x00020002 + JA sequenceDecs_decodeSync_bmi2_error_match_len_too_big + TESTQ R13, R13 + JNZ sequenceDecs_decodeSync_bmi2_match_len_ofs_ok + TESTQ CX, CX + JNZ sequenceDecs_decodeSync_bmi2_error_match_len_ofs_mismatch + +sequenceDecs_decodeSync_bmi2_match_len_ofs_ok: + MOVQ 24(SP), CX + MOVQ 8(SP), R12 + MOVQ 16(SP), R13 + + // Check if we have enough space in s.out + LEAQ (CX)(R13*1), R14 + ADDQ R9, R14 + CMPQ R14, 32(SP) + JA error_not_enough_space + + // Copy literals + TESTQ CX, CX + JZ check_offset + XORQ R14, R14 + +copy_1: + MOVUPS (R10)(R14*1), X0 + MOVUPS X0, (R9)(R14*1) + ADDQ $0x10, R14 + CMPQ R14, CX + JB copy_1 + ADDQ CX, R10 + ADDQ CX, R9 + ADDQ CX, R11 + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + MOVQ R11, CX + ADDQ 40(SP), CX + CMPQ R12, CX + JG error_match_off_too_big + CMPQ R12, 56(SP) + JG error_match_off_too_big + + // Copy match from history + MOVQ R12, CX + SUBQ R11, CX + JLS copy_match + MOVQ 48(SP), R14 + SUBQ CX, R14 + CMPQ R13, CX + JGE copy_all_from_history + XORQ CX, CX + TESTQ $0x00000001, R13 + JZ copy_4_word + MOVB (R14)(CX*1), R12 + MOVB R12, (R9)(CX*1) + ADDQ $0x01, CX + +copy_4_word: + TESTQ $0x00000002, R13 + JZ copy_4_dword + MOVW (R14)(CX*1), R12 + MOVW R12, (R9)(CX*1) + ADDQ $0x02, CX + +copy_4_dword: + TESTQ $0x00000004, R13 + JZ copy_4_qword + MOVL (R14)(CX*1), R12 + MOVL R12, (R9)(CX*1) + ADDQ $0x04, CX + +copy_4_qword: + TESTQ $0x00000008, R13 + JZ copy_4_test + MOVQ (R14)(CX*1), R12 + MOVQ R12, (R9)(CX*1) + ADDQ $0x08, CX + JMP copy_4_test + +copy_4: + MOVUPS (R14)(CX*1), X0 + MOVUPS X0, (R9)(CX*1) + ADDQ $0x10, CX + +copy_4_test: + CMPQ CX, R13 + JB copy_4 + ADDQ R13, R11 + ADDQ R13, R9 + JMP handle_loop + JMP loop_finished + +copy_all_from_history: + XORQ R15, R15 + TESTQ $0x00000001, CX + JZ copy_5_word + MOVB (R14)(R15*1), BP + MOVB BP, (R9)(R15*1) + ADDQ $0x01, R15 + +copy_5_word: + TESTQ $0x00000002, CX + JZ copy_5_dword + MOVW (R14)(R15*1), BP + MOVW BP, (R9)(R15*1) + ADDQ $0x02, R15 + +copy_5_dword: + TESTQ $0x00000004, CX + JZ copy_5_qword + MOVL (R14)(R15*1), BP + MOVL BP, (R9)(R15*1) + ADDQ $0x04, R15 + +copy_5_qword: + TESTQ $0x00000008, CX + JZ copy_5_test + MOVQ (R14)(R15*1), BP + MOVQ BP, (R9)(R15*1) + ADDQ $0x08, R15 + JMP copy_5_test + +copy_5: + MOVUPS (R14)(R15*1), X0 + MOVUPS X0, (R9)(R15*1) + ADDQ $0x10, R15 + +copy_5_test: + CMPQ R15, CX + JB copy_5 + ADDQ CX, R9 + ADDQ CX, R11 + SUBQ CX, R13 + + // Copy match from the current buffer +copy_match: + TESTQ R13, R13 + JZ handle_loop + MOVQ R9, CX + SUBQ R12, CX + + // ml <= mo + CMPQ R13, R12 + JA copy_overlapping_match + + // Copy non-overlapping match + ADDQ R13, R11 + MOVQ R9, R12 + ADDQ R13, R9 + +copy_2: + MOVUPS (CX), X0 + MOVUPS X0, (R12) + ADDQ $0x10, CX + ADDQ $0x10, R12 + SUBQ $0x10, R13 + JHI copy_2 + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADDQ R13, R11 + +copy_slow_3: + MOVB (CX), R12 + MOVB R12, (R9) + INCQ CX + INCQ R9 + DECQ R13 + JNZ copy_slow_3 + +handle_loop: + MOVQ ctx+16(FP), CX + DECQ 96(CX) + JNS sequenceDecs_decodeSync_bmi2_main_loop + +loop_finished: + MOVQ br+8(FP), CX + MOVQ AX, 32(CX) + MOVB DL, 40(CX) + MOVQ BX, 24(CX) + + // Update the context + MOVQ ctx+16(FP), AX + MOVQ R11, 136(AX) + MOVQ 144(AX), CX + SUBQ CX, R10 + MOVQ R10, 168(AX) + + // Return success + MOVQ $0x00000000, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decodeSync_bmi2_error_match_len_ofs_mismatch: + MOVQ 16(SP), AX + MOVQ ctx+16(FP), CX + MOVQ AX, 216(CX) + MOVQ $0x00000001, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decodeSync_bmi2_error_match_len_too_big: + MOVQ ctx+16(FP), AX + MOVQ 16(SP), CX + MOVQ CX, 216(AX) + MOVQ $0x00000002, ret+24(FP) + RET + + // Return with match offset too long error +error_match_off_too_big: + MOVQ ctx+16(FP), AX + MOVQ 8(SP), CX + MOVQ CX, 224(AX) + MOVQ R11, 136(AX) + MOVQ $0x00000003, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVQ ctx+16(FP), AX + MOVQ 24(SP), CX + MOVQ CX, 208(AX) + MOVQ $0x00000004, ret+24(FP) + RET + + // Return with not enough output space error +error_not_enough_space: + MOVQ ctx+16(FP), AX + MOVQ 24(SP), CX + MOVQ CX, 208(AX) + MOVQ 16(SP), CX + MOVQ CX, 216(AX) + MOVQ R11, 136(AX) + MOVQ $0x00000005, ret+24(FP) + RET + +// func sequenceDecs_decodeSync_safe_amd64(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +// Requires: CMOV, SSE +TEXT ·sequenceDecs_decodeSync_safe_amd64(SB), $64-32 + MOVQ br+8(FP), AX + MOVQ 32(AX), DX + MOVBQZX 40(AX), BX + MOVQ 24(AX), SI + MOVQ (AX), AX + ADDQ SI, AX + MOVQ AX, (SP) + MOVQ ctx+16(FP), AX + MOVQ 72(AX), DI + MOVQ 80(AX), R8 + MOVQ 88(AX), R9 + MOVQ 112(AX), R10 + MOVQ 128(AX), CX + MOVQ CX, 32(SP) + MOVQ 144(AX), R11 + MOVQ 136(AX), R12 + MOVQ 200(AX), CX + MOVQ CX, 56(SP) + MOVQ 176(AX), CX + MOVQ CX, 48(SP) + MOVQ 184(AX), AX + MOVQ AX, 40(SP) + MOVQ 40(SP), AX + ADDQ AX, 48(SP) + + // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + ADDQ R10, 32(SP) + + // outBase += outPosition + ADDQ R12, R10 + +sequenceDecs_decodeSync_safe_amd64_main_loop: + MOVQ (SP), R13 + + // Fill bitreader to have enough for the offset and match length. + CMPQ SI, $0x08 + JL sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte + MOVQ BX, AX + SHRQ $0x03, AX + SUBQ AX, R13 + MOVQ (R13), DX + SUBQ AX, SI + ANDQ $0x07, BX + JMP sequenceDecs_decodeSync_safe_amd64_fill_end + +sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte: + CMPQ SI, $0x00 + JLE sequenceDecs_decodeSync_safe_amd64_fill_end + CMPQ BX, $0x07 + JLE sequenceDecs_decodeSync_safe_amd64_fill_end + SHLQ $0x08, DX + SUBQ $0x01, R13 + SUBQ $0x01, SI + SUBQ $0x08, BX + MOVBQZX (R13), AX + ORQ AX, DX + JMP sequenceDecs_decodeSync_safe_amd64_fill_byte_by_byte + +sequenceDecs_decodeSync_safe_amd64_fill_end: + // Update offset + MOVQ R9, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R14 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R14 + ADDQ R14, AX + MOVQ AX, 8(SP) + + // Update match length + MOVQ R8, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R14 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R14 + ADDQ R14, AX + MOVQ AX, 16(SP) + + // Fill bitreader to have enough for the remaining + CMPQ SI, $0x08 + JL sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte + MOVQ BX, AX + SHRQ $0x03, AX + SUBQ AX, R13 + MOVQ (R13), DX + SUBQ AX, SI + ANDQ $0x07, BX + JMP sequenceDecs_decodeSync_safe_amd64_fill_2_end + +sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte: + CMPQ SI, $0x00 + JLE sequenceDecs_decodeSync_safe_amd64_fill_2_end + CMPQ BX, $0x07 + JLE sequenceDecs_decodeSync_safe_amd64_fill_2_end + SHLQ $0x08, DX + SUBQ $0x01, R13 + SUBQ $0x01, SI + SUBQ $0x08, BX + MOVBQZX (R13), AX + ORQ AX, DX + JMP sequenceDecs_decodeSync_safe_amd64_fill_2_byte_by_byte + +sequenceDecs_decodeSync_safe_amd64_fill_2_end: + // Update literal length + MOVQ DI, AX + MOVQ BX, CX + MOVQ DX, R14 + SHLQ CL, R14 + MOVB AH, CL + ADDQ CX, BX + NEGL CX + SHRQ CL, R14 + SHRQ $0x20, AX + TESTQ CX, CX + CMOVQEQ CX, R14 + ADDQ R14, AX + MOVQ AX, 24(SP) + + // Fill bitreader for state updates + MOVQ R13, (SP) + MOVQ R9, AX + SHRQ $0x08, AX + MOVBQZX AL, AX + MOVQ ctx+16(FP), CX + CMPQ 96(CX), $0x00 + JZ sequenceDecs_decodeSync_safe_amd64_skip_update + + // Update Literal Length State + MOVBQZX DI, R13 + SHRQ $0x10, DI + MOVWQZX DI, DI + CMPQ R13, $0x00 + JZ sequenceDecs_decodeSync_safe_amd64_llState_updateState_skip_zero + MOVQ BX, CX + ADDQ R13, BX + MOVQ DX, R14 + SHLQ CL, R14 + MOVQ R13, CX + NEGQ CX + SHRQ CL, R14 + ADDQ R14, DI + +sequenceDecs_decodeSync_safe_amd64_llState_updateState_skip_zero: + // Load ctx.llTable + MOVQ ctx+16(FP), CX + MOVQ (CX), CX + MOVQ (CX)(DI*8), DI + + // Update Match Length State + MOVBQZX R8, R13 + SHRQ $0x10, R8 + MOVWQZX R8, R8 + CMPQ R13, $0x00 + JZ sequenceDecs_decodeSync_safe_amd64_mlState_updateState_skip_zero + MOVQ BX, CX + ADDQ R13, BX + MOVQ DX, R14 + SHLQ CL, R14 + MOVQ R13, CX + NEGQ CX + SHRQ CL, R14 + ADDQ R14, R8 + +sequenceDecs_decodeSync_safe_amd64_mlState_updateState_skip_zero: + // Load ctx.mlTable + MOVQ ctx+16(FP), CX + MOVQ 24(CX), CX + MOVQ (CX)(R8*8), R8 + + // Update Offset State + MOVBQZX R9, R13 + SHRQ $0x10, R9 + MOVWQZX R9, R9 + CMPQ R13, $0x00 + JZ sequenceDecs_decodeSync_safe_amd64_ofState_updateState_skip_zero + MOVQ BX, CX + ADDQ R13, BX + MOVQ DX, R14 + SHLQ CL, R14 + MOVQ R13, CX + NEGQ CX + SHRQ CL, R14 + ADDQ R14, R9 + +sequenceDecs_decodeSync_safe_amd64_ofState_updateState_skip_zero: + // Load ctx.ofTable + MOVQ ctx+16(FP), CX + MOVQ 48(CX), CX + MOVQ (CX)(R9*8), R9 + +sequenceDecs_decodeSync_safe_amd64_skip_update: + // Adjust offset + MOVQ s+0(FP), CX + MOVQ 8(SP), R13 + CMPQ AX, $0x01 + JBE sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0 + MOVUPS 144(CX), X0 + MOVQ R13, 144(CX) + MOVUPS X0, 152(CX) + JMP sequenceDecs_decodeSync_safe_amd64_adjust_end + +sequenceDecs_decodeSync_safe_amd64_adjust_offsetB_1_or_0: + CMPQ 24(SP), $0x00000000 + JNE sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero + INCQ R13 + JMP sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero + +sequenceDecs_decodeSync_safe_amd64_adjust_offset_maybezero: + TESTQ R13, R13 + JNZ sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero + MOVQ 144(CX), R13 + JMP sequenceDecs_decodeSync_safe_amd64_adjust_end + +sequenceDecs_decodeSync_safe_amd64_adjust_offset_nonzero: + MOVQ R13, AX + XORQ R14, R14 + MOVQ $-1, R15 + CMPQ R13, $0x03 + CMOVQEQ R14, AX + CMOVQEQ R15, R14 + LEAQ 144(CX), R15 + ADDQ (R15)(AX*8), R14 + JNZ sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid + MOVQ $0x00000001, R14 + +sequenceDecs_decodeSync_safe_amd64_adjust_temp_valid: + CMPQ R13, $0x01 + JZ sequenceDecs_decodeSync_safe_amd64_adjust_skip + MOVQ 152(CX), AX + MOVQ AX, 160(CX) + +sequenceDecs_decodeSync_safe_amd64_adjust_skip: + MOVQ 144(CX), AX + MOVQ AX, 152(CX) + MOVQ R14, 144(CX) + MOVQ R14, R13 + +sequenceDecs_decodeSync_safe_amd64_adjust_end: + MOVQ R13, 8(SP) + + // Check values + MOVQ 16(SP), AX + MOVQ 24(SP), CX + LEAQ (AX)(CX*1), R14 + MOVQ s+0(FP), R15 + ADDQ R14, 256(R15) + MOVQ ctx+16(FP), R14 + SUBQ CX, 104(R14) + JS error_not_enough_literals + CMPQ AX, $0x00020002 + JA sequenceDecs_decodeSync_safe_amd64_error_match_len_too_big + TESTQ R13, R13 + JNZ sequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok + TESTQ AX, AX + JNZ sequenceDecs_decodeSync_safe_amd64_error_match_len_ofs_mismatch + +sequenceDecs_decodeSync_safe_amd64_match_len_ofs_ok: + MOVQ 24(SP), AX + MOVQ 8(SP), CX + MOVQ 16(SP), R13 + + // Check if we have enough space in s.out + LEAQ (AX)(R13*1), R14 + ADDQ R10, R14 + CMPQ R14, 32(SP) + JA error_not_enough_space + + // Copy literals + TESTQ AX, AX + JZ check_offset + XORQ R14, R14 + TESTQ $0x00000001, AX + JZ copy_1_word + MOVB (R11)(R14*1), R15 + MOVB R15, (R10)(R14*1) + ADDQ $0x01, R14 + +copy_1_word: + TESTQ $0x00000002, AX + JZ copy_1_dword + MOVW (R11)(R14*1), R15 + MOVW R15, (R10)(R14*1) + ADDQ $0x02, R14 + +copy_1_dword: + TESTQ $0x00000004, AX + JZ copy_1_qword + MOVL (R11)(R14*1), R15 + MOVL R15, (R10)(R14*1) + ADDQ $0x04, R14 + +copy_1_qword: + TESTQ $0x00000008, AX + JZ copy_1_test + MOVQ (R11)(R14*1), R15 + MOVQ R15, (R10)(R14*1) + ADDQ $0x08, R14 + JMP copy_1_test + +copy_1: + MOVUPS (R11)(R14*1), X0 + MOVUPS X0, (R10)(R14*1) + ADDQ $0x10, R14 + +copy_1_test: + CMPQ R14, AX + JB copy_1 + ADDQ AX, R11 + ADDQ AX, R10 + ADDQ AX, R12 + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + MOVQ R12, AX + ADDQ 40(SP), AX + CMPQ CX, AX + JG error_match_off_too_big + CMPQ CX, 56(SP) + JG error_match_off_too_big + + // Copy match from history + MOVQ CX, AX + SUBQ R12, AX + JLS copy_match + MOVQ 48(SP), R14 + SUBQ AX, R14 + CMPQ R13, AX + JGE copy_all_from_history + XORQ AX, AX + TESTQ $0x00000001, R13 + JZ copy_4_word + MOVB (R14)(AX*1), CL + MOVB CL, (R10)(AX*1) + ADDQ $0x01, AX + +copy_4_word: + TESTQ $0x00000002, R13 + JZ copy_4_dword + MOVW (R14)(AX*1), CX + MOVW CX, (R10)(AX*1) + ADDQ $0x02, AX + +copy_4_dword: + TESTQ $0x00000004, R13 + JZ copy_4_qword + MOVL (R14)(AX*1), CX + MOVL CX, (R10)(AX*1) + ADDQ $0x04, AX + +copy_4_qword: + TESTQ $0x00000008, R13 + JZ copy_4_test + MOVQ (R14)(AX*1), CX + MOVQ CX, (R10)(AX*1) + ADDQ $0x08, AX + JMP copy_4_test + +copy_4: + MOVUPS (R14)(AX*1), X0 + MOVUPS X0, (R10)(AX*1) + ADDQ $0x10, AX + +copy_4_test: + CMPQ AX, R13 + JB copy_4 + ADDQ R13, R12 + ADDQ R13, R10 + JMP handle_loop + JMP loop_finished + +copy_all_from_history: + XORQ R15, R15 + TESTQ $0x00000001, AX + JZ copy_5_word + MOVB (R14)(R15*1), BP + MOVB BP, (R10)(R15*1) + ADDQ $0x01, R15 + +copy_5_word: + TESTQ $0x00000002, AX + JZ copy_5_dword + MOVW (R14)(R15*1), BP + MOVW BP, (R10)(R15*1) + ADDQ $0x02, R15 + +copy_5_dword: + TESTQ $0x00000004, AX + JZ copy_5_qword + MOVL (R14)(R15*1), BP + MOVL BP, (R10)(R15*1) + ADDQ $0x04, R15 + +copy_5_qword: + TESTQ $0x00000008, AX + JZ copy_5_test + MOVQ (R14)(R15*1), BP + MOVQ BP, (R10)(R15*1) + ADDQ $0x08, R15 + JMP copy_5_test + +copy_5: + MOVUPS (R14)(R15*1), X0 + MOVUPS X0, (R10)(R15*1) + ADDQ $0x10, R15 + +copy_5_test: + CMPQ R15, AX + JB copy_5 + ADDQ AX, R10 + ADDQ AX, R12 + SUBQ AX, R13 + + // Copy match from the current buffer +copy_match: + TESTQ R13, R13 + JZ handle_loop + MOVQ R10, AX + SUBQ CX, AX + + // ml <= mo + CMPQ R13, CX + JA copy_overlapping_match + + // Copy non-overlapping match + ADDQ R13, R12 + XORQ CX, CX + TESTQ $0x00000001, R13 + JZ copy_2_word + MOVB (AX)(CX*1), R14 + MOVB R14, (R10)(CX*1) + ADDQ $0x01, CX + +copy_2_word: + TESTQ $0x00000002, R13 + JZ copy_2_dword + MOVW (AX)(CX*1), R14 + MOVW R14, (R10)(CX*1) + ADDQ $0x02, CX + +copy_2_dword: + TESTQ $0x00000004, R13 + JZ copy_2_qword + MOVL (AX)(CX*1), R14 + MOVL R14, (R10)(CX*1) + ADDQ $0x04, CX + +copy_2_qword: + TESTQ $0x00000008, R13 + JZ copy_2_test + MOVQ (AX)(CX*1), R14 + MOVQ R14, (R10)(CX*1) + ADDQ $0x08, CX + JMP copy_2_test + +copy_2: + MOVUPS (AX)(CX*1), X0 + MOVUPS X0, (R10)(CX*1) + ADDQ $0x10, CX + +copy_2_test: + CMPQ CX, R13 + JB copy_2 + ADDQ R13, R10 + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADDQ R13, R12 + +copy_slow_3: + MOVB (AX), CL + MOVB CL, (R10) + INCQ AX + INCQ R10 + DECQ R13 + JNZ copy_slow_3 + +handle_loop: + MOVQ ctx+16(FP), AX + DECQ 96(AX) + JNS sequenceDecs_decodeSync_safe_amd64_main_loop + +loop_finished: + MOVQ br+8(FP), AX + MOVQ DX, 32(AX) + MOVB BL, 40(AX) + MOVQ SI, 24(AX) + + // Update the context + MOVQ ctx+16(FP), AX + MOVQ R12, 136(AX) + MOVQ 144(AX), CX + SUBQ CX, R11 + MOVQ R11, 168(AX) + + // Return success + MOVQ $0x00000000, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decodeSync_safe_amd64_error_match_len_ofs_mismatch: + MOVQ 16(SP), AX + MOVQ ctx+16(FP), CX + MOVQ AX, 216(CX) + MOVQ $0x00000001, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decodeSync_safe_amd64_error_match_len_too_big: + MOVQ ctx+16(FP), AX + MOVQ 16(SP), CX + MOVQ CX, 216(AX) + MOVQ $0x00000002, ret+24(FP) + RET + + // Return with match offset too long error +error_match_off_too_big: + MOVQ ctx+16(FP), AX + MOVQ 8(SP), CX + MOVQ CX, 224(AX) + MOVQ R12, 136(AX) + MOVQ $0x00000003, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVQ ctx+16(FP), AX + MOVQ 24(SP), CX + MOVQ CX, 208(AX) + MOVQ $0x00000004, ret+24(FP) + RET + + // Return with not enough output space error +error_not_enough_space: + MOVQ ctx+16(FP), AX + MOVQ 24(SP), CX + MOVQ CX, 208(AX) + MOVQ 16(SP), CX + MOVQ CX, 216(AX) + MOVQ R12, 136(AX) + MOVQ $0x00000005, ret+24(FP) + RET + +// func sequenceDecs_decodeSync_safe_bmi2(s *sequenceDecs, br *bitReader, ctx *decodeSyncAsmContext) int +// Requires: BMI, BMI2, CMOV, SSE +TEXT ·sequenceDecs_decodeSync_safe_bmi2(SB), $64-32 + MOVQ br+8(FP), CX + MOVQ 32(CX), AX + MOVBQZX 40(CX), DX + MOVQ 24(CX), BX + MOVQ (CX), CX + ADDQ BX, CX + MOVQ CX, (SP) + MOVQ ctx+16(FP), CX + MOVQ 72(CX), SI + MOVQ 80(CX), DI + MOVQ 88(CX), R8 + MOVQ 112(CX), R9 + MOVQ 128(CX), R10 + MOVQ R10, 32(SP) + MOVQ 144(CX), R10 + MOVQ 136(CX), R11 + MOVQ 200(CX), R12 + MOVQ R12, 56(SP) + MOVQ 176(CX), R12 + MOVQ R12, 48(SP) + MOVQ 184(CX), CX + MOVQ CX, 40(SP) + MOVQ 40(SP), CX + ADDQ CX, 48(SP) + + // Calculate poiter to s.out[cap(s.out)] (a past-end pointer) + ADDQ R9, 32(SP) + + // outBase += outPosition + ADDQ R11, R9 + +sequenceDecs_decodeSync_safe_bmi2_main_loop: + MOVQ (SP), R12 + + // Fill bitreader to have enough for the offset and match length. + CMPQ BX, $0x08 + JL sequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte + MOVQ DX, CX + SHRQ $0x03, CX + SUBQ CX, R12 + MOVQ (R12), AX + SUBQ CX, BX + ANDQ $0x07, DX + JMP sequenceDecs_decodeSync_safe_bmi2_fill_end + +sequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte: + CMPQ BX, $0x00 + JLE sequenceDecs_decodeSync_safe_bmi2_fill_end + CMPQ DX, $0x07 + JLE sequenceDecs_decodeSync_safe_bmi2_fill_end + SHLQ $0x08, AX + SUBQ $0x01, R12 + SUBQ $0x01, BX + SUBQ $0x08, DX + MOVBQZX (R12), CX + ORQ CX, AX + JMP sequenceDecs_decodeSync_safe_bmi2_fill_byte_by_byte + +sequenceDecs_decodeSync_safe_bmi2_fill_end: + // Update offset + MOVQ $0x00000808, CX + BEXTRQ CX, R8, R13 + MOVQ AX, R14 + LEAQ (DX)(R13*1), CX + ROLQ CL, R14 + BZHIQ R13, R14, R14 + MOVQ CX, DX + MOVQ R8, CX + SHRQ $0x20, CX + ADDQ R14, CX + MOVQ CX, 8(SP) + + // Update match length + MOVQ $0x00000808, CX + BEXTRQ CX, DI, R13 + MOVQ AX, R14 + LEAQ (DX)(R13*1), CX + ROLQ CL, R14 + BZHIQ R13, R14, R14 + MOVQ CX, DX + MOVQ DI, CX + SHRQ $0x20, CX + ADDQ R14, CX + MOVQ CX, 16(SP) + + // Fill bitreader to have enough for the remaining + CMPQ BX, $0x08 + JL sequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte + MOVQ DX, CX + SHRQ $0x03, CX + SUBQ CX, R12 + MOVQ (R12), AX + SUBQ CX, BX + ANDQ $0x07, DX + JMP sequenceDecs_decodeSync_safe_bmi2_fill_2_end + +sequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte: + CMPQ BX, $0x00 + JLE sequenceDecs_decodeSync_safe_bmi2_fill_2_end + CMPQ DX, $0x07 + JLE sequenceDecs_decodeSync_safe_bmi2_fill_2_end + SHLQ $0x08, AX + SUBQ $0x01, R12 + SUBQ $0x01, BX + SUBQ $0x08, DX + MOVBQZX (R12), CX + ORQ CX, AX + JMP sequenceDecs_decodeSync_safe_bmi2_fill_2_byte_by_byte + +sequenceDecs_decodeSync_safe_bmi2_fill_2_end: + // Update literal length + MOVQ $0x00000808, CX + BEXTRQ CX, SI, R13 + MOVQ AX, R14 + LEAQ (DX)(R13*1), CX + ROLQ CL, R14 + BZHIQ R13, R14, R14 + MOVQ CX, DX + MOVQ SI, CX + SHRQ $0x20, CX + ADDQ R14, CX + MOVQ CX, 24(SP) + + // Fill bitreader for state updates + MOVQ R12, (SP) + MOVQ $0x00000808, CX + BEXTRQ CX, R8, R12 + MOVQ ctx+16(FP), CX + CMPQ 96(CX), $0x00 + JZ sequenceDecs_decodeSync_safe_bmi2_skip_update + LEAQ (SI)(DI*1), R13 + ADDQ R8, R13 + MOVBQZX R13, R13 + LEAQ (DX)(R13*1), CX + MOVQ AX, R14 + MOVQ CX, DX + ROLQ CL, R14 + BZHIQ R13, R14, R14 + + // Update Offset State + BZHIQ R8, R14, CX + SHRXQ R8, R14, R14 + MOVQ $0x00001010, R13 + BEXTRQ R13, R8, R8 + ADDQ CX, R8 + + // Load ctx.ofTable + MOVQ ctx+16(FP), CX + MOVQ 48(CX), CX + MOVQ (CX)(R8*8), R8 + + // Update Match Length State + BZHIQ DI, R14, CX + SHRXQ DI, R14, R14 + MOVQ $0x00001010, R13 + BEXTRQ R13, DI, DI + ADDQ CX, DI + + // Load ctx.mlTable + MOVQ ctx+16(FP), CX + MOVQ 24(CX), CX + MOVQ (CX)(DI*8), DI + + // Update Literal Length State + BZHIQ SI, R14, CX + MOVQ $0x00001010, R13 + BEXTRQ R13, SI, SI + ADDQ CX, SI + + // Load ctx.llTable + MOVQ ctx+16(FP), CX + MOVQ (CX), CX + MOVQ (CX)(SI*8), SI + +sequenceDecs_decodeSync_safe_bmi2_skip_update: + // Adjust offset + MOVQ s+0(FP), CX + MOVQ 8(SP), R13 + CMPQ R12, $0x01 + JBE sequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0 + MOVUPS 144(CX), X0 + MOVQ R13, 144(CX) + MOVUPS X0, 152(CX) + JMP sequenceDecs_decodeSync_safe_bmi2_adjust_end + +sequenceDecs_decodeSync_safe_bmi2_adjust_offsetB_1_or_0: + CMPQ 24(SP), $0x00000000 + JNE sequenceDecs_decodeSync_safe_bmi2_adjust_offset_maybezero + INCQ R13 + JMP sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero + +sequenceDecs_decodeSync_safe_bmi2_adjust_offset_maybezero: + TESTQ R13, R13 + JNZ sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero + MOVQ 144(CX), R13 + JMP sequenceDecs_decodeSync_safe_bmi2_adjust_end + +sequenceDecs_decodeSync_safe_bmi2_adjust_offset_nonzero: + MOVQ R13, R12 + XORQ R14, R14 + MOVQ $-1, R15 + CMPQ R13, $0x03 + CMOVQEQ R14, R12 + CMOVQEQ R15, R14 + LEAQ 144(CX), R15 + ADDQ (R15)(R12*8), R14 + JNZ sequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid + MOVQ $0x00000001, R14 + +sequenceDecs_decodeSync_safe_bmi2_adjust_temp_valid: + CMPQ R13, $0x01 + JZ sequenceDecs_decodeSync_safe_bmi2_adjust_skip + MOVQ 152(CX), R12 + MOVQ R12, 160(CX) + +sequenceDecs_decodeSync_safe_bmi2_adjust_skip: + MOVQ 144(CX), R12 + MOVQ R12, 152(CX) + MOVQ R14, 144(CX) + MOVQ R14, R13 + +sequenceDecs_decodeSync_safe_bmi2_adjust_end: + MOVQ R13, 8(SP) + + // Check values + MOVQ 16(SP), CX + MOVQ 24(SP), R12 + LEAQ (CX)(R12*1), R14 + MOVQ s+0(FP), R15 + ADDQ R14, 256(R15) + MOVQ ctx+16(FP), R14 + SUBQ R12, 104(R14) + JS error_not_enough_literals + CMPQ CX, $0x00020002 + JA sequenceDecs_decodeSync_safe_bmi2_error_match_len_too_big + TESTQ R13, R13 + JNZ sequenceDecs_decodeSync_safe_bmi2_match_len_ofs_ok + TESTQ CX, CX + JNZ sequenceDecs_decodeSync_safe_bmi2_error_match_len_ofs_mismatch + +sequenceDecs_decodeSync_safe_bmi2_match_len_ofs_ok: + MOVQ 24(SP), CX + MOVQ 8(SP), R12 + MOVQ 16(SP), R13 + + // Check if we have enough space in s.out + LEAQ (CX)(R13*1), R14 + ADDQ R9, R14 + CMPQ R14, 32(SP) + JA error_not_enough_space + + // Copy literals + TESTQ CX, CX + JZ check_offset + XORQ R14, R14 + TESTQ $0x00000001, CX + JZ copy_1_word + MOVB (R10)(R14*1), R15 + MOVB R15, (R9)(R14*1) + ADDQ $0x01, R14 + +copy_1_word: + TESTQ $0x00000002, CX + JZ copy_1_dword + MOVW (R10)(R14*1), R15 + MOVW R15, (R9)(R14*1) + ADDQ $0x02, R14 + +copy_1_dword: + TESTQ $0x00000004, CX + JZ copy_1_qword + MOVL (R10)(R14*1), R15 + MOVL R15, (R9)(R14*1) + ADDQ $0x04, R14 + +copy_1_qword: + TESTQ $0x00000008, CX + JZ copy_1_test + MOVQ (R10)(R14*1), R15 + MOVQ R15, (R9)(R14*1) + ADDQ $0x08, R14 + JMP copy_1_test + +copy_1: + MOVUPS (R10)(R14*1), X0 + MOVUPS X0, (R9)(R14*1) + ADDQ $0x10, R14 + +copy_1_test: + CMPQ R14, CX + JB copy_1 + ADDQ CX, R10 + ADDQ CX, R9 + ADDQ CX, R11 + + // Malformed input if seq.mo > t+len(hist) || seq.mo > s.windowSize) +check_offset: + MOVQ R11, CX + ADDQ 40(SP), CX + CMPQ R12, CX + JG error_match_off_too_big + CMPQ R12, 56(SP) + JG error_match_off_too_big + + // Copy match from history + MOVQ R12, CX + SUBQ R11, CX + JLS copy_match + MOVQ 48(SP), R14 + SUBQ CX, R14 + CMPQ R13, CX + JGE copy_all_from_history + XORQ CX, CX + TESTQ $0x00000001, R13 + JZ copy_4_word + MOVB (R14)(CX*1), R12 + MOVB R12, (R9)(CX*1) + ADDQ $0x01, CX + +copy_4_word: + TESTQ $0x00000002, R13 + JZ copy_4_dword + MOVW (R14)(CX*1), R12 + MOVW R12, (R9)(CX*1) + ADDQ $0x02, CX + +copy_4_dword: + TESTQ $0x00000004, R13 + JZ copy_4_qword + MOVL (R14)(CX*1), R12 + MOVL R12, (R9)(CX*1) + ADDQ $0x04, CX + +copy_4_qword: + TESTQ $0x00000008, R13 + JZ copy_4_test + MOVQ (R14)(CX*1), R12 + MOVQ R12, (R9)(CX*1) + ADDQ $0x08, CX + JMP copy_4_test + +copy_4: + MOVUPS (R14)(CX*1), X0 + MOVUPS X0, (R9)(CX*1) + ADDQ $0x10, CX + +copy_4_test: + CMPQ CX, R13 + JB copy_4 + ADDQ R13, R11 + ADDQ R13, R9 + JMP handle_loop + JMP loop_finished + +copy_all_from_history: + XORQ R15, R15 + TESTQ $0x00000001, CX + JZ copy_5_word + MOVB (R14)(R15*1), BP + MOVB BP, (R9)(R15*1) + ADDQ $0x01, R15 + +copy_5_word: + TESTQ $0x00000002, CX + JZ copy_5_dword + MOVW (R14)(R15*1), BP + MOVW BP, (R9)(R15*1) + ADDQ $0x02, R15 + +copy_5_dword: + TESTQ $0x00000004, CX + JZ copy_5_qword + MOVL (R14)(R15*1), BP + MOVL BP, (R9)(R15*1) + ADDQ $0x04, R15 + +copy_5_qword: + TESTQ $0x00000008, CX + JZ copy_5_test + MOVQ (R14)(R15*1), BP + MOVQ BP, (R9)(R15*1) + ADDQ $0x08, R15 + JMP copy_5_test + +copy_5: + MOVUPS (R14)(R15*1), X0 + MOVUPS X0, (R9)(R15*1) + ADDQ $0x10, R15 + +copy_5_test: + CMPQ R15, CX + JB copy_5 + ADDQ CX, R9 + ADDQ CX, R11 + SUBQ CX, R13 + + // Copy match from the current buffer +copy_match: + TESTQ R13, R13 + JZ handle_loop + MOVQ R9, CX + SUBQ R12, CX + + // ml <= mo + CMPQ R13, R12 + JA copy_overlapping_match + + // Copy non-overlapping match + ADDQ R13, R11 + XORQ R12, R12 + TESTQ $0x00000001, R13 + JZ copy_2_word + MOVB (CX)(R12*1), R14 + MOVB R14, (R9)(R12*1) + ADDQ $0x01, R12 + +copy_2_word: + TESTQ $0x00000002, R13 + JZ copy_2_dword + MOVW (CX)(R12*1), R14 + MOVW R14, (R9)(R12*1) + ADDQ $0x02, R12 + +copy_2_dword: + TESTQ $0x00000004, R13 + JZ copy_2_qword + MOVL (CX)(R12*1), R14 + MOVL R14, (R9)(R12*1) + ADDQ $0x04, R12 + +copy_2_qword: + TESTQ $0x00000008, R13 + JZ copy_2_test + MOVQ (CX)(R12*1), R14 + MOVQ R14, (R9)(R12*1) + ADDQ $0x08, R12 + JMP copy_2_test + +copy_2: + MOVUPS (CX)(R12*1), X0 + MOVUPS X0, (R9)(R12*1) + ADDQ $0x10, R12 + +copy_2_test: + CMPQ R12, R13 + JB copy_2 + ADDQ R13, R9 + JMP handle_loop + + // Copy overlapping match +copy_overlapping_match: + ADDQ R13, R11 + +copy_slow_3: + MOVB (CX), R12 + MOVB R12, (R9) + INCQ CX + INCQ R9 + DECQ R13 + JNZ copy_slow_3 + +handle_loop: + MOVQ ctx+16(FP), CX + DECQ 96(CX) + JNS sequenceDecs_decodeSync_safe_bmi2_main_loop + +loop_finished: + MOVQ br+8(FP), CX + MOVQ AX, 32(CX) + MOVB DL, 40(CX) + MOVQ BX, 24(CX) + + // Update the context + MOVQ ctx+16(FP), AX + MOVQ R11, 136(AX) + MOVQ 144(AX), CX + SUBQ CX, R10 + MOVQ R10, 168(AX) + + // Return success + MOVQ $0x00000000, ret+24(FP) + RET + + // Return with match length error +sequenceDecs_decodeSync_safe_bmi2_error_match_len_ofs_mismatch: + MOVQ 16(SP), AX + MOVQ ctx+16(FP), CX + MOVQ AX, 216(CX) + MOVQ $0x00000001, ret+24(FP) + RET + + // Return with match too long error +sequenceDecs_decodeSync_safe_bmi2_error_match_len_too_big: + MOVQ ctx+16(FP), AX + MOVQ 16(SP), CX + MOVQ CX, 216(AX) + MOVQ $0x00000002, ret+24(FP) + RET + + // Return with match offset too long error +error_match_off_too_big: + MOVQ ctx+16(FP), AX + MOVQ 8(SP), CX + MOVQ CX, 224(AX) + MOVQ R11, 136(AX) + MOVQ $0x00000003, ret+24(FP) + RET + + // Return with not enough literals error +error_not_enough_literals: + MOVQ ctx+16(FP), AX + MOVQ 24(SP), CX + MOVQ CX, 208(AX) + MOVQ $0x00000004, ret+24(FP) + RET + + // Return with not enough output space error +error_not_enough_space: + MOVQ ctx+16(FP), AX + MOVQ 24(SP), CX + MOVQ CX, 208(AX) + MOVQ 16(SP), CX + MOVQ CX, 216(AX) + MOVQ R11, 136(AX) + MOVQ $0x00000005, ret+24(FP) + RET diff --git a/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go b/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go new file mode 100644 index 0000000000..c3452bc3a9 --- /dev/null +++ b/vendor/github.com/klauspost/compress/zstd/seqdec_generic.go @@ -0,0 +1,237 @@ +//go:build !amd64 || appengine || !gc || noasm +// +build !amd64 appengine !gc noasm + +package zstd + +import ( + "fmt" + "io" +) + +// decode sequences from the stream with the provided history but without dictionary. +func (s *sequenceDecs) decodeSyncSimple(hist []byte) (bool, error) { + return false, nil +} + +// decode sequences from the stream without the provided history. +func (s *sequenceDecs) decode(seqs []seqVals) error { + br := s.br + + // Grab full sizes tables, to avoid bounds checks. + llTable, mlTable, ofTable := s.litLengths.fse.dt[:maxTablesize], s.matchLengths.fse.dt[:maxTablesize], s.offsets.fse.dt[:maxTablesize] + llState, mlState, ofState := s.litLengths.state.state, s.matchLengths.state.state, s.offsets.state.state + s.seqSize = 0 + litRemain := len(s.literals) + + maxBlockSize := maxCompressedBlockSize + if s.windowSize < maxBlockSize { + maxBlockSize = s.windowSize + } + for i := range seqs { + var ll, mo, ml int + if br.off > 4+((maxOffsetBits+16+16)>>3) { + // inlined function: + // ll, mo, ml = s.nextFast(br, llState, mlState, ofState) + + // Final will not read from stream. + var llB, mlB, moB uint8 + ll, llB = llState.final() + ml, mlB = mlState.final() + mo, moB = ofState.final() + + // extra bits are stored in reverse order. + br.fillFast() + mo += br.getBits(moB) + if s.maxBits > 32 { + br.fillFast() + } + ml += br.getBits(mlB) + ll += br.getBits(llB) + + if moB > 1 { + s.prevOffset[2] = s.prevOffset[1] + s.prevOffset[1] = s.prevOffset[0] + s.prevOffset[0] = mo + } else { + // mo = s.adjustOffset(mo, ll, moB) + // Inlined for rather big speedup + if ll == 0 { + // There is an exception though, when current sequence's literals_length = 0. + // In this case, repeated offsets are shifted by one, so an offset_value of 1 means Repeated_Offset2, + // an offset_value of 2 means Repeated_Offset3, and an offset_value of 3 means Repeated_Offset1 - 1_byte. + mo++ + } + + if mo == 0 { + mo = s.prevOffset[0] + } else { + var temp int + if mo == 3 { + temp = s.prevOffset[0] - 1 + } else { + temp = s.prevOffset[mo] + } + + if temp == 0 { + // 0 is not valid; input is corrupted; force offset to 1 + println("WARNING: temp was 0") + temp = 1 + } + + if mo != 1 { + s.prevOffset[2] = s.prevOffset[1] + } + s.prevOffset[1] = s.prevOffset[0] + s.prevOffset[0] = temp + mo = temp + } + } + br.fillFast() + } else { + if br.overread() { + if debugDecoder { + printf("reading sequence %d, exceeded available data\n", i) + } + return io.ErrUnexpectedEOF + } + ll, mo, ml = s.next(br, llState, mlState, ofState) + br.fill() + } + + if debugSequences { + println("Seq", i, "Litlen:", ll, "mo:", mo, "(abs) ml:", ml) + } + // Evaluate. + // We might be doing this async, so do it early. + if mo == 0 && ml > 0 { + return fmt.Errorf("zero matchoff and matchlen (%d) > 0", ml) + } + if ml > maxMatchLen { + return fmt.Errorf("match len (%d) bigger than max allowed length", ml) + } + s.seqSize += ll + ml + if s.seqSize > maxBlockSize { + return fmt.Errorf("output (%d) bigger than max block size (%d)", s.seqSize, maxBlockSize) + } + litRemain -= ll + if litRemain < 0 { + return fmt.Errorf("unexpected literal count, want %d bytes, but only %d is available", ll, litRemain+ll) + } + seqs[i] = seqVals{ + ll: ll, + ml: ml, + mo: mo, + } + if i == len(seqs)-1 { + // This is the last sequence, so we shouldn't update state. + break + } + + // Manually inlined, ~ 5-20% faster + // Update all 3 states at once. Approx 20% faster. + nBits := llState.nbBits() + mlState.nbBits() + ofState.nbBits() + if nBits == 0 { + llState = llTable[llState.newState()&maxTableMask] + mlState = mlTable[mlState.newState()&maxTableMask] + ofState = ofTable[ofState.newState()&maxTableMask] + } else { + bits := br.get32BitsFast(nBits) + lowBits := uint16(bits >> ((ofState.nbBits() + mlState.nbBits()) & 31)) + llState = llTable[(llState.newState()+lowBits)&maxTableMask] + + lowBits = uint16(bits >> (ofState.nbBits() & 31)) + lowBits &= bitMask[mlState.nbBits()&15] + mlState = mlTable[(mlState.newState()+lowBits)&maxTableMask] + + lowBits = uint16(bits) & bitMask[ofState.nbBits()&15] + ofState = ofTable[(ofState.newState()+lowBits)&maxTableMask] + } + } + s.seqSize += litRemain + if s.seqSize > maxBlockSize { + return fmt.Errorf("output (%d) bigger than max block size (%d)", s.seqSize, maxBlockSize) + } + err := br.close() + if err != nil { + printf("Closing sequences: %v, %+v\n", err, *br) + } + return err +} + +// executeSimple handles cases when a dictionary is not used. +func (s *sequenceDecs) executeSimple(seqs []seqVals, hist []byte) error { + // Ensure we have enough output size... + if len(s.out)+s.seqSize > cap(s.out) { + addBytes := s.seqSize + len(s.out) + s.out = append(s.out, make([]byte, addBytes)...) + s.out = s.out[:len(s.out)-addBytes] + } + + if debugDecoder { + printf("Execute %d seqs with literals: %d into %d bytes\n", len(seqs), len(s.literals), s.seqSize) + } + + var t = len(s.out) + out := s.out[:t+s.seqSize] + + for _, seq := range seqs { + // Add literals + copy(out[t:], s.literals[:seq.ll]) + t += seq.ll + s.literals = s.literals[seq.ll:] + + // Malformed input + if seq.mo > t+len(hist) || seq.mo > s.windowSize { + return fmt.Errorf("match offset (%d) bigger than current history (%d)", seq.mo, t+len(hist)) + } + + // Copy from history. + if v := seq.mo - t; v > 0 { + // v is the start position in history from end. + start := len(hist) - v + if seq.ml > v { + // Some goes into the current block. + // Copy remainder of history + copy(out[t:], hist[start:]) + t += v + seq.ml -= v + } else { + copy(out[t:], hist[start:start+seq.ml]) + t += seq.ml + continue + } + } + + // We must be in the current buffer now + if seq.ml > 0 { + start := t - seq.mo + if seq.ml <= t-start { + // No overlap + copy(out[t:], out[start:start+seq.ml]) + t += seq.ml + } else { + // Overlapping copy + // Extend destination slice and copy one byte at the time. + src := out[start : start+seq.ml] + dst := out[t:] + dst = dst[:len(src)] + t += len(src) + // Destination is the space we just added. + for i := range src { + dst[i] = src[i] + } + } + } + } + // Add final literals + copy(out[t:], s.literals) + if debugDecoder { + t += len(s.literals) + if t != len(out) { + panic(fmt.Errorf("length mismatch, want %d, got %d, ss: %d", len(out), t, s.seqSize)) + } + } + s.out = out + + return nil +} diff --git a/vendor/github.com/klauspost/compress/zstd/zip.go b/vendor/github.com/klauspost/compress/zstd/zip.go index 967f29b312..b53f606a18 100644 --- a/vendor/github.com/klauspost/compress/zstd/zip.go +++ b/vendor/github.com/klauspost/compress/zstd/zip.go @@ -20,34 +20,49 @@ const ZipMethodPKWare = 20 var zipReaderPool sync.Pool -// newZipReader cannot be used since we would leak goroutines... -func newZipReader(r io.Reader) io.ReadCloser { - dec, ok := zipReaderPool.Get().(*Decoder) - if ok { - dec.Reset(r) - } else { - d, err := NewReader(r, WithDecoderConcurrency(1), WithDecoderLowmem(true)) - if err != nil { - panic(err) +// newZipReader creates a pooled zip decompressor. +func newZipReader(opts ...DOption) func(r io.Reader) io.ReadCloser { + pool := &zipReaderPool + if len(opts) > 0 { + opts = append([]DOption{WithDecoderLowmem(true), WithDecoderMaxWindow(128 << 20)}, opts...) + // Force concurrency 1 + opts = append(opts, WithDecoderConcurrency(1)) + // Create our own pool + pool = &sync.Pool{} + } + return func(r io.Reader) io.ReadCloser { + dec, ok := pool.Get().(*Decoder) + if ok { + dec.Reset(r) + } else { + d, err := NewReader(r, opts...) + if err != nil { + panic(err) + } + dec = d } - dec = d + return &pooledZipReader{dec: dec, pool: pool} } - return &pooledZipReader{dec: dec} } type pooledZipReader struct { - mu sync.Mutex // guards Close and Read - dec *Decoder + mu sync.Mutex // guards Close and Read + pool *sync.Pool + dec *Decoder } func (r *pooledZipReader) Read(p []byte) (n int, err error) { r.mu.Lock() defer r.mu.Unlock() if r.dec == nil { - return 0, errors.New("Read after Close") + return 0, errors.New("read after close or EOF") } dec, err := r.dec.Read(p) - + if err == io.EOF { + r.dec.Reset(nil) + r.pool.Put(r.dec) + r.dec = nil + } return dec, err } @@ -57,7 +72,7 @@ func (r *pooledZipReader) Close() error { var err error if r.dec != nil { err = r.dec.Reset(nil) - zipReaderPool.Put(r.dec) + r.pool.Put(r.dec) r.dec = nil } return err @@ -111,12 +126,9 @@ func ZipCompressor(opts ...EOption) func(w io.Writer) (io.WriteCloser, error) { // ZipDecompressor returns a decompressor that can be registered with zip libraries. // See ZipCompressor for example. -func ZipDecompressor() func(r io.Reader) io.ReadCloser { - return func(r io.Reader) io.ReadCloser { - d, err := NewReader(r, WithDecoderConcurrency(1), WithDecoderLowmem(true)) - if err != nil { - panic(err) - } - return d.IOReadCloser() - } +// Options can be specified. WithDecoderConcurrency(1) is forced, +// and by default a 128MB maximum decompression window is specified. +// The window size can be overridden if required. +func ZipDecompressor(opts ...DOption) func(r io.Reader) io.ReadCloser { + return newZipReader(opts...) } diff --git a/vendor/github.com/klauspost/compress/zstd/zstd.go b/vendor/github.com/klauspost/compress/zstd/zstd.go index ef1d49a009..3eb3f1c826 100644 --- a/vendor/github.com/klauspost/compress/zstd/zstd.go +++ b/vendor/github.com/klauspost/compress/zstd/zstd.go @@ -39,6 +39,9 @@ const zstdMinMatch = 3 // Reset the buffer offset when reaching this. const bufferReset = math.MaxInt32 - MaxWindowSize +// fcsUnknown is used for unknown frame content size. +const fcsUnknown = math.MaxUint64 + var ( // ErrReservedBlockType is returned when a reserved block type is found. // Typically this indicates wrong or corrupted input. @@ -52,6 +55,10 @@ var ( // Typically returned on invalid input. ErrBlockTooSmall = errors.New("block too small") + // ErrUnexpectedBlockSize is returned when a block has unexpected size. + // Typically returned on invalid input. + ErrUnexpectedBlockSize = errors.New("unexpected block size") + // ErrMagicMismatch is returned when a "magic" number isn't what is expected. // Typically this indicates wrong or corrupted input. ErrMagicMismatch = errors.New("invalid input: magic number mismatch") @@ -75,6 +82,10 @@ var ( // This is only returned if SingleSegment is specified on the frame. ErrFrameSizeExceeded = errors.New("frame size exceeded") + // ErrFrameSizeMismatch is returned if the stated frame size does not match the expected size. + // This is only returned if SingleSegment is specified on the frame. + ErrFrameSizeMismatch = errors.New("frame size does not match size on stream") + // ErrCRCMismatch is returned if CRC mismatches. ErrCRCMismatch = errors.New("CRC check failed") @@ -99,17 +110,6 @@ func printf(format string, a ...interface{}) { } } -// matchLenFast does matching, but will not match the last up to 7 bytes. -func matchLenFast(a, b []byte) int { - endI := len(a) & (math.MaxInt32 - 7) - for i := 0; i < endI; i += 8 { - if diff := load64(a, i) ^ load64(b, i); diff != 0 { - return i + bits.TrailingZeros64(diff)>>3 - } - } - return endI -} - // matchLen returns the maximum length. // a must be the shortest of the two. // The function also returns whether all bytes matched. diff --git a/vendor/github.com/klauspost/cpuid/v2/README.md b/vendor/github.com/klauspost/cpuid/v2/README.md index 465f4b77cb..bc2f98f00f 100644 --- a/vendor/github.com/klauspost/cpuid/v2/README.md +++ b/vendor/github.com/klauspost/cpuid/v2/README.md @@ -39,10 +39,10 @@ func main() { fmt.Println("ThreadsPerCore:", CPU.ThreadsPerCore) fmt.Println("LogicalCores:", CPU.LogicalCores) fmt.Println("Family", CPU.Family, "Model:", CPU.Model, "Vendor ID:", CPU.VendorID) - fmt.Println("Features:", fmt.Sprintf(strings.Join(CPU.FeatureSet(), ","))) + fmt.Println("Features:", strings.Join(CPU.FeatureSet(), ",")) fmt.Println("Cacheline bytes:", CPU.CacheLine) fmt.Println("L1 Data Cache:", CPU.Cache.L1D, "bytes") - fmt.Println("L1 Instruction Cache:", CPU.Cache.L1D, "bytes") + fmt.Println("L1 Instruction Cache:", CPU.Cache.L1I, "bytes") fmt.Println("L2 Cache:", CPU.Cache.L2, "bytes") fmt.Println("L3 Cache:", CPU.Cache.L3, "bytes") fmt.Println("Frequency", CPU.Hz, "hz") diff --git a/vendor/github.com/klauspost/cpuid/v2/cpuid.go b/vendor/github.com/klauspost/cpuid/v2/cpuid.go index 1d88736b68..3d543ce916 100644 --- a/vendor/github.com/klauspost/cpuid/v2/cpuid.go +++ b/vendor/github.com/klauspost/cpuid/v2/cpuid.go @@ -95,10 +95,13 @@ const ( AVXSLOW // Indicates the CPU performs 2 128 bit operations instead of one. BMI1 // Bit Manipulation Instruction Set 1 BMI2 // Bit Manipulation Instruction Set 2 + CETIBT // Intel CET Indirect Branch Tracking + CETSS // Intel CET Shadow Stack CLDEMOTE // Cache Line Demote CLMUL // Carry-less Multiplication CLZERO // CLZERO instruction supported CMOV // i686 CMOV + CMPXCHG8 // CMPXCHG8 instruction CPBOOST // Core Performance Boost CX16 // CMPXCHG16B Instruction ENQCMD // Enqueue Command @@ -106,6 +109,8 @@ const ( F16C // Half-precision floating-point conversion FMA3 // Intel FMA 3. Does not imply AVX. FMA4 // Bulldozer FMA4 functions + FXSR // FXSAVE, FXRESTOR instructions, CR4 bit 9 + FXSROPT // FXSAVE/FXRSTOR optimizations GFNI // Galois Field New Instructions HLE // Hardware Lock Elision HTT // Hyperthreading (enabled) @@ -123,16 +128,19 @@ const ( IBSRIPINVALIDCHK // Instruction Based Sampling Feature (AMD) INT_WBINVD // WBINVD/WBNOINVD are interruptible. INVLPGB // NVLPGB and TLBSYNC instruction supported + LAHF // LAHF/SAHF in long mode LZCNT // LZCNT instruction MCAOVERFLOW // MCA overflow recovery support. MCOMMIT // MCOMMIT instruction supported MMX // standard MMX MMXEXT // SSE integer functions or AMD MMX ext + MOVBE // MOVBE instruction (big-endian) MOVDIR64B // Move 64 Bytes as Direct Store MOVDIRI // Move Doubleword as Direct Store MPX // Intel MPX (Memory Protection Extensions) MSRIRC // Instruction Retired Counter MSR available NX // NX (No-Execute) bit + OSXSAVE // XSAVE enabled by OS POPCNT // POPCNT instruction RDPRU // RDPRU instruction supported RDRAND // RDRAND instruction is available @@ -140,6 +148,7 @@ const ( RDTSCP // RDTSCP Instruction RTM // Restricted Transactional Memory RTM_ALWAYS_ABORT // Indicates that the loaded microcode is forcing RTM abort. + SCE // SYSENTER and SYSEXIT instructions SERIALIZE // Serialize Instruction Execution SGX // Software Guard Extensions SGXLC // Software Guard Extensions Launch Control @@ -160,7 +169,9 @@ const ( VPCLMULQDQ // Carry-Less Multiplication Quadword WAITPKG // TPAUSE, UMONITOR, UMWAIT WBNOINVD // Write Back and Do Not Invalidate Cache + X87 // FPU XOP // Bulldozer XOP functions + XSAVE // XSAVE, XRESTOR, XSETBV, XGETBV // ARM features: AESARM // AES instructions @@ -311,6 +322,31 @@ func (c CPUInfo) Has(id FeatureID) bool { return c.featureSet.inSet(id) } +// https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels +var level1Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SCE, SSE, SSE2) +var level2Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SCE, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3) +var level3Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SCE, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3, AVX, AVX2, BMI1, BMI2, F16C, FMA3, LZCNT, MOVBE, OSXSAVE) +var level4Features = flagSetWith(CMOV, CMPXCHG8, X87, FXSR, MMX, SCE, SSE, SSE2, CX16, LAHF, POPCNT, SSE3, SSE4, SSE42, SSSE3, AVX, AVX2, BMI1, BMI2, F16C, FMA3, LZCNT, MOVBE, OSXSAVE, AVX512F, AVX512BW, AVX512CD, AVX512DQ, AVX512VL) + +// X64Level returns the microarchitecture level detected on the CPU. +// If features are lacking or non x64 mode, 0 is returned. +// See https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels +func (c CPUInfo) X64Level() int { + if c.featureSet.hasSet(level4Features) { + return 4 + } + if c.featureSet.hasSet(level3Features) { + return 3 + } + if c.featureSet.hasSet(level2Features) { + return 2 + } + if c.featureSet.hasSet(level1Features) { + return 1 + } + return 0 +} + // Disable will disable one or several features. func (c *CPUInfo) Disable(ids ...FeatureID) bool { for _, id := range ids { @@ -335,9 +371,7 @@ func (c CPUInfo) IsVendor(v Vendor) bool { func (c CPUInfo) FeatureSet() []string { s := make([]string, 0) - for _, f := range c.featureSet.Strings() { - s = append(s, f) - } + s = append(s, c.featureSet.Strings()...) return s } @@ -499,6 +533,24 @@ func (s *flagSet) or(other flagSet) { } } +// hasSet returns whether all features are present. +func (s flagSet) hasSet(other flagSet) bool { + for i, v := range other[:] { + if s[i]&v != v { + return false + } + } + return true +} + +func flagSetWith(feat ...FeatureID) flagSet { + var res flagSet + for _, f := range feat { + res.set(f) + } + return res +} + // ParseFeature will parse the string and return the ID of the matching feature. // Will return UNKNOWN if not found. func ParseFeature(s string) FeatureID { @@ -708,6 +760,7 @@ func (c *CPUInfo) cacheSize() { if maxFunctionID() < 4 { return } + c.Cache.L1I, c.Cache.L1D, c.Cache.L2, c.Cache.L3 = 0, 0, 0, 0 for i := uint32(0); ; i++ { eax, ebx, ecx, _ := cpuidex(4, i) cacheType := eax & 15 @@ -800,8 +853,6 @@ func (c *CPUInfo) cacheSize() { } } } - - return } type SGXEPCSection struct { @@ -865,9 +916,14 @@ func support() flagSet { family, model := familyModel() _, _, c, d := cpuid(1) + fs.setIf((d&(1<<0)) != 0, X87) + fs.setIf((d&(1<<8)) != 0, CMPXCHG8) + fs.setIf((d&(1<<11)) != 0, SCE) fs.setIf((d&(1<<15)) != 0, CMOV) + fs.setIf((d&(1<<22)) != 0, MMXEXT) fs.setIf((d&(1<<23)) != 0, MMX) - fs.setIf((d&(1<<25)) != 0, MMXEXT) + fs.setIf((d&(1<<24)) != 0, FXSR) + fs.setIf((d&(1<<25)) != 0, FXSROPT) fs.setIf((d&(1<<25)) != 0, SSE) fs.setIf((d&(1<<26)) != 0, SSE2) fs.setIf((c&1) != 0, SSE3) @@ -877,6 +933,7 @@ func support() flagSet { fs.setIf((c&0x00100000) != 0, SSE42) fs.setIf((c&(1<<25)) != 0, AESNI) fs.setIf((c&(1<<1)) != 0, CLMUL) + fs.setIf(c&(1<<22) != 0, MOVBE) fs.setIf(c&(1<<23) != 0, POPCNT) fs.setIf(c&(1<<30) != 0, RDRAND) @@ -892,6 +949,8 @@ func support() flagSet { if vend == AMD && (d&(1<<28)) != 0 && mfi >= 4 { fs.setIf(threadsPerCore() > 1, HTT) } + fs.setIf(c&1<<26 != 0, XSAVE) + fs.setIf(c&1<<27 != 0, OSXSAVE) // Check XGETBV/XSAVE (26), OXSAVE (27) and AVX (28) bits const avxCheck = 1<<26 | 1<<27 | 1<<28 if c&avxCheck == avxCheck { @@ -936,6 +995,7 @@ func support() flagSet { fs.setIf(ebx&(1<<29) != 0, SHA) // CPUID.(EAX=7, ECX=0).ECX fs.setIf(ecx&(1<<5) != 0, WAITPKG) + fs.setIf(ecx&(1<<7) != 0, CETSS) fs.setIf(ecx&(1<<25) != 0, CLDEMOTE) fs.setIf(ecx&(1<<27) != 0, MOVDIRI) fs.setIf(ecx&(1<<28) != 0, MOVDIR64B) @@ -945,6 +1005,7 @@ func support() flagSet { fs.setIf(edx&(1<<11) != 0, RTM_ALWAYS_ABORT) fs.setIf(edx&(1<<14) != 0, SERIALIZE) fs.setIf(edx&(1<<16) != 0, TSXLDTRK) + fs.setIf(edx&(1<<20) != 0, CETIBT) fs.setIf(edx&(1<<26) != 0, IBPB) fs.setIf(edx&(1<<27) != 0, STIBP) @@ -996,6 +1057,7 @@ func support() flagSet { fs.set(LZCNT) fs.set(POPCNT) } + fs.setIf((c&(1<<0)) != 0, LAHF) fs.setIf((c&(1<<10)) != 0, IBS) fs.setIf((d&(1<<31)) != 0, AMD3DNOW) fs.setIf((d&(1<<30)) != 0, AMD3DNOWEXT) diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go index 9bf9f77f37..9a53504a04 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_arm64.go @@ -1,6 +1,7 @@ // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. -//+build arm64,!gccgo,!noasm,!appengine +//go:build arm64 && !gccgo && !noasm && !appengine +// +build arm64,!gccgo,!noasm,!appengine package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go index e9c8606ab9..9636c2bc17 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_ref.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_ref.go @@ -1,6 +1,7 @@ // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. -//+build !amd64,!386,!arm64 gccgo noasm appengine +//go:build (!amd64 && !386 && !arm64) || gccgo || noasm || appengine +// +build !amd64,!386,!arm64 gccgo noasm appengine package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go index 367c35c88c..35678d8a3e 100644 --- a/vendor/github.com/klauspost/cpuid/v2/detect_x86.go +++ b/vendor/github.com/klauspost/cpuid/v2/detect_x86.go @@ -1,6 +1,7 @@ // Copyright (c) 2015 Klaus Post, released under MIT License. See LICENSE file. -//+build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine +//go:build (386 && !gccgo && !noasm && !appengine) || (amd64 && !gccgo && !noasm && !appengine) +// +build 386,!gccgo,!noasm,!appengine amd64,!gccgo,!noasm,!appengine package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go index b1fe42e467..02fe232aa1 100644 --- a/vendor/github.com/klauspost/cpuid/v2/featureid_string.go +++ b/vendor/github.com/klauspost/cpuid/v2/featureid_string.go @@ -36,103 +36,114 @@ func _() { _ = x[AVXSLOW-26] _ = x[BMI1-27] _ = x[BMI2-28] - _ = x[CLDEMOTE-29] - _ = x[CLMUL-30] - _ = x[CLZERO-31] - _ = x[CMOV-32] - _ = x[CPBOOST-33] - _ = x[CX16-34] - _ = x[ENQCMD-35] - _ = x[ERMS-36] - _ = x[F16C-37] - _ = x[FMA3-38] - _ = x[FMA4-39] - _ = x[GFNI-40] - _ = x[HLE-41] - _ = x[HTT-42] - _ = x[HWA-43] - _ = x[HYPERVISOR-44] - _ = x[IBPB-45] - _ = x[IBS-46] - _ = x[IBSBRNTRGT-47] - _ = x[IBSFETCHSAM-48] - _ = x[IBSFFV-49] - _ = x[IBSOPCNT-50] - _ = x[IBSOPCNTEXT-51] - _ = x[IBSOPSAM-52] - _ = x[IBSRDWROPCNT-53] - _ = x[IBSRIPINVALIDCHK-54] - _ = x[INT_WBINVD-55] - _ = x[INVLPGB-56] - _ = x[LZCNT-57] - _ = x[MCAOVERFLOW-58] - _ = x[MCOMMIT-59] - _ = x[MMX-60] - _ = x[MMXEXT-61] - _ = x[MOVDIR64B-62] - _ = x[MOVDIRI-63] - _ = x[MPX-64] - _ = x[MSRIRC-65] - _ = x[NX-66] - _ = x[POPCNT-67] - _ = x[RDPRU-68] - _ = x[RDRAND-69] - _ = x[RDSEED-70] - _ = x[RDTSCP-71] - _ = x[RTM-72] - _ = x[RTM_ALWAYS_ABORT-73] - _ = x[SERIALIZE-74] - _ = x[SGX-75] - _ = x[SGXLC-76] - _ = x[SHA-77] - _ = x[SSE-78] - _ = x[SSE2-79] - _ = x[SSE3-80] - _ = x[SSE4-81] - _ = x[SSE42-82] - _ = x[SSE4A-83] - _ = x[SSSE3-84] - _ = x[STIBP-85] - _ = x[SUCCOR-86] - _ = x[TBM-87] - _ = x[TSXLDTRK-88] - _ = x[VAES-89] - _ = x[VMX-90] - _ = x[VPCLMULQDQ-91] - _ = x[WAITPKG-92] - _ = x[WBNOINVD-93] - _ = x[XOP-94] - _ = x[AESARM-95] - _ = x[ARMCPUID-96] - _ = x[ASIMD-97] - _ = x[ASIMDDP-98] - _ = x[ASIMDHP-99] - _ = x[ASIMDRDM-100] - _ = x[ATOMICS-101] - _ = x[CRC32-102] - _ = x[DCPOP-103] - _ = x[EVTSTRM-104] - _ = x[FCMA-105] - _ = x[FP-106] - _ = x[FPHP-107] - _ = x[GPA-108] - _ = x[JSCVT-109] - _ = x[LRCPC-110] - _ = x[PMULL-111] - _ = x[SHA1-112] - _ = x[SHA2-113] - _ = x[SHA3-114] - _ = x[SHA512-115] - _ = x[SM3-116] - _ = x[SM4-117] - _ = x[SVE-118] - _ = x[lastID-119] + _ = x[CETIBT-29] + _ = x[CETSS-30] + _ = x[CLDEMOTE-31] + _ = x[CLMUL-32] + _ = x[CLZERO-33] + _ = x[CMOV-34] + _ = x[CMPXCHG8-35] + _ = x[CPBOOST-36] + _ = x[CX16-37] + _ = x[ENQCMD-38] + _ = x[ERMS-39] + _ = x[F16C-40] + _ = x[FMA3-41] + _ = x[FMA4-42] + _ = x[FXSR-43] + _ = x[FXSROPT-44] + _ = x[GFNI-45] + _ = x[HLE-46] + _ = x[HTT-47] + _ = x[HWA-48] + _ = x[HYPERVISOR-49] + _ = x[IBPB-50] + _ = x[IBS-51] + _ = x[IBSBRNTRGT-52] + _ = x[IBSFETCHSAM-53] + _ = x[IBSFFV-54] + _ = x[IBSOPCNT-55] + _ = x[IBSOPCNTEXT-56] + _ = x[IBSOPSAM-57] + _ = x[IBSRDWROPCNT-58] + _ = x[IBSRIPINVALIDCHK-59] + _ = x[INT_WBINVD-60] + _ = x[INVLPGB-61] + _ = x[LAHF-62] + _ = x[LZCNT-63] + _ = x[MCAOVERFLOW-64] + _ = x[MCOMMIT-65] + _ = x[MMX-66] + _ = x[MMXEXT-67] + _ = x[MOVBE-68] + _ = x[MOVDIR64B-69] + _ = x[MOVDIRI-70] + _ = x[MPX-71] + _ = x[MSRIRC-72] + _ = x[NX-73] + _ = x[OSXSAVE-74] + _ = x[POPCNT-75] + _ = x[RDPRU-76] + _ = x[RDRAND-77] + _ = x[RDSEED-78] + _ = x[RDTSCP-79] + _ = x[RTM-80] + _ = x[RTM_ALWAYS_ABORT-81] + _ = x[SCE-82] + _ = x[SERIALIZE-83] + _ = x[SGX-84] + _ = x[SGXLC-85] + _ = x[SHA-86] + _ = x[SSE-87] + _ = x[SSE2-88] + _ = x[SSE3-89] + _ = x[SSE4-90] + _ = x[SSE42-91] + _ = x[SSE4A-92] + _ = x[SSSE3-93] + _ = x[STIBP-94] + _ = x[SUCCOR-95] + _ = x[TBM-96] + _ = x[TSXLDTRK-97] + _ = x[VAES-98] + _ = x[VMX-99] + _ = x[VPCLMULQDQ-100] + _ = x[WAITPKG-101] + _ = x[WBNOINVD-102] + _ = x[X87-103] + _ = x[XOP-104] + _ = x[XSAVE-105] + _ = x[AESARM-106] + _ = x[ARMCPUID-107] + _ = x[ASIMD-108] + _ = x[ASIMDDP-109] + _ = x[ASIMDHP-110] + _ = x[ASIMDRDM-111] + _ = x[ATOMICS-112] + _ = x[CRC32-113] + _ = x[DCPOP-114] + _ = x[EVTSTRM-115] + _ = x[FCMA-116] + _ = x[FP-117] + _ = x[FPHP-118] + _ = x[GPA-119] + _ = x[JSCVT-120] + _ = x[LRCPC-121] + _ = x[PMULL-122] + _ = x[SHA1-123] + _ = x[SHA2-124] + _ = x[SHA3-125] + _ = x[SHA512-126] + _ = x[SM3-127] + _ = x[SM4-128] + _ = x[SVE-129] + _ = x[lastID-130] _ = x[firstID-0] } -const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CLDEMOTECLMULCLZEROCMOVCPBOOSTCX16ENQCMDERMSF16CFMA3FMA4GFNIHLEHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKINT_WBINVDINVLPGBLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVDIR64BMOVDIRIMPXMSRIRCNXPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSUCCORTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDXOPAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" +const _FeatureID_name = "firstIDADXAESNIAMD3DNOWAMD3DNOWEXTAMXBF16AMXINT8AMXTILEAVXAVX2AVX512BF16AVX512BITALGAVX512BWAVX512CDAVX512DQAVX512ERAVX512FAVX512FP16AVX512IFMAAVX512PFAVX512VBMIAVX512VBMI2AVX512VLAVX512VNNIAVX512VP2INTERSECTAVX512VPOPCNTDQAVXSLOWBMI1BMI2CETIBTCETSSCLDEMOTECLMULCLZEROCMOVCMPXCHG8CPBOOSTCX16ENQCMDERMSF16CFMA3FMA4FXSRFXSROPTGFNIHLEHTTHWAHYPERVISORIBPBIBSIBSBRNTRGTIBSFETCHSAMIBSFFVIBSOPCNTIBSOPCNTEXTIBSOPSAMIBSRDWROPCNTIBSRIPINVALIDCHKINT_WBINVDINVLPGBLAHFLZCNTMCAOVERFLOWMCOMMITMMXMMXEXTMOVBEMOVDIR64BMOVDIRIMPXMSRIRCNXOSXSAVEPOPCNTRDPRURDRANDRDSEEDRDTSCPRTMRTM_ALWAYS_ABORTSCESERIALIZESGXSGXLCSHASSESSE2SSE3SSE4SSE42SSE4ASSSE3STIBPSUCCORTBMTSXLDTRKVAESVMXVPCLMULQDQWAITPKGWBNOINVDX87XOPXSAVEAESARMARMCPUIDASIMDASIMDDPASIMDHPASIMDRDMATOMICSCRC32DCPOPEVTSTRMFCMAFPFPHPGPAJSCVTLRCPCPMULLSHA1SHA2SHA3SHA512SM3SM4SVElastID" -var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 234, 238, 246, 251, 257, 261, 268, 272, 278, 282, 286, 290, 294, 298, 301, 304, 307, 317, 321, 324, 334, 345, 351, 359, 370, 378, 390, 406, 416, 423, 428, 439, 446, 449, 455, 464, 471, 474, 480, 482, 488, 493, 499, 505, 511, 514, 530, 539, 542, 547, 550, 553, 557, 561, 565, 570, 575, 580, 585, 591, 594, 602, 606, 609, 619, 626, 634, 637, 643, 651, 656, 663, 670, 678, 685, 690, 695, 702, 706, 708, 712, 715, 720, 725, 730, 734, 738, 742, 748, 751, 754, 757, 763} +var _FeatureID_index = [...]uint16{0, 7, 10, 15, 23, 34, 41, 48, 55, 58, 62, 72, 84, 92, 100, 108, 116, 123, 133, 143, 151, 161, 172, 180, 190, 208, 223, 230, 234, 238, 244, 249, 257, 262, 268, 272, 280, 287, 291, 297, 301, 305, 309, 313, 317, 324, 328, 331, 334, 337, 347, 351, 354, 364, 375, 381, 389, 400, 408, 420, 436, 446, 453, 457, 462, 473, 480, 483, 489, 494, 503, 510, 513, 519, 521, 528, 534, 539, 545, 551, 557, 560, 576, 579, 588, 591, 596, 599, 602, 606, 610, 614, 619, 624, 629, 634, 640, 643, 651, 655, 658, 668, 675, 683, 686, 689, 694, 700, 708, 713, 720, 727, 735, 742, 747, 752, 759, 763, 765, 769, 772, 777, 782, 787, 791, 795, 799, 805, 808, 811, 814, 820} func (i FeatureID) String() string { if i < 0 || i >= FeatureID(len(_FeatureID_index)-1) { diff --git a/vendor/github.com/klauspost/cpuid/v2/go.mod b/vendor/github.com/klauspost/cpuid/v2/go.mod deleted file mode 100644 index 2afac8eb28..0000000000 --- a/vendor/github.com/klauspost/cpuid/v2/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/klauspost/cpuid/v2 - -go 1.13 diff --git a/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go index 1a951e6ca0..8733ba3436 100644 --- a/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/os_other_arm64.go @@ -1,8 +1,7 @@ // Copyright (c) 2020 Klaus Post, released under MIT License. See LICENSE file. -// +build arm64 -// +build !linux -// +build !darwin +//go:build arm64 && !linux && !darwin +// +build arm64,!linux,!darwin package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go index 4d0b8b465b..f8f201b5f7 100644 --- a/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/os_safe_linux_arm64.go @@ -1,6 +1,7 @@ // Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. -//+build nounsafe +//go:build nounsafe +// +build nounsafe package cpuid diff --git a/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go b/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go index 329800286e..92af622eb8 100644 --- a/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go +++ b/vendor/github.com/klauspost/cpuid/v2/os_unsafe_linux_arm64.go @@ -1,6 +1,7 @@ // Copyright (c) 2021 Klaus Post, released under MIT License. See LICENSE file. -//+build !nounsafe +//go:build !nounsafe +// +build !nounsafe package cpuid diff --git a/vendor/github.com/koron/go-ssdp/go.mod b/vendor/github.com/koron/go-ssdp/go.mod deleted file mode 100644 index 157033f58f..0000000000 --- a/vendor/github.com/koron/go-ssdp/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/koron/go-ssdp - -go 1.13 - -require golang.org/x/net v0.0.0-20200904194848-62affa334b73 diff --git a/vendor/github.com/koron/go-ssdp/go.sum b/vendor/github.com/koron/go-ssdp/go.sum deleted file mode 100644 index 91add1e114..0000000000 --- a/vendor/github.com/koron/go-ssdp/go.sum +++ /dev/null @@ -1,11 +0,0 @@ -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/vendor/github.com/libp2p/go-buffer-pool/go.mod b/vendor/github.com/libp2p/go-buffer-pool/go.mod deleted file mode 100644 index 02b140dddb..0000000000 --- a/vendor/github.com/libp2p/go-buffer-pool/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/libp2p/go-buffer-pool - -go 1.12 diff --git a/vendor/github.com/libp2p/go-cidranger/go.mod b/vendor/github.com/libp2p/go-cidranger/go.mod deleted file mode 100644 index 675626691b..0000000000 --- a/vendor/github.com/libp2p/go-cidranger/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/libp2p/go-cidranger - -go 1.14 - -require ( - github.com/ipfs/go-detect-race v0.0.1 - github.com/stretchr/testify v1.4.0 -) diff --git a/vendor/github.com/libp2p/go-cidranger/go.sum b/vendor/github.com/libp2p/go-cidranger/go.sum deleted file mode 100644 index 266bbff3f8..0000000000 --- a/vendor/github.com/libp2p/go-cidranger/go.sum +++ /dev/null @@ -1,13 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/libp2p/go-conn-security-multistream/README.md b/vendor/github.com/libp2p/go-conn-security-multistream/README.md deleted file mode 100644 index 87df182ab4..0000000000 --- a/vendor/github.com/libp2p/go-conn-security-multistream/README.md +++ /dev/null @@ -1,54 +0,0 @@ -# go-conn-security-multistream - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![GoDoc](https://godoc.org/github.com/libp2p/go-conn-security-multistream?status.svg)](https://godoc.org/github.com/libp2p/go-conn-security-multistream) - -> Connection security multistream multiplexer - -This package provides a multistream multiplexed [security transport](https://github.com/libp2p/go-conn-security). It: - -1. Selects a security transport using multistream-select. -2. Secures the stream using the selected transport. - -Known libp2p security transports include: - -* [go-libp2p-secio](https://github.com/libp2p/go-libp2p-secio) -* [go-libp2p-tls](https://github.com/libp2p/go-libp2p-tls) - -## Install - -`go-conn-security-multistream` is a standard Go module which can be installed with: - -```sh -go get github.com/libp2p/go-conn-security-multistream -``` - -This repo is [gomod](https://github.com/golang/go/wiki/Modules)-compatible, and users of -go 1.11 and later with modules enabled will automatically pull the latest tagged release -by referencing this package. Upgrades to future releases can be managed using `go get`, -or by editing your `go.mod` file as [described by the gomod documentation](https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies). - -## Usage - -For more information about how `go-conn-security-multistream` is used in the libp2p context, you can see the [go-libp2p-conn](https://github.com/libp2p/go-libp2p-conn) module. - -## Contribute - -Feel free to join in. All welcome. Open an [issue](https://github.com/libp2p/go-conn-security-multistream/issues)! - -This repository falls under the libp2p [Code of Conduct](https://github.com/libp2p/community/blob/master/code-of-conduct.md). - -### Want to hack on libp2p? - -[![](https://cdn.rawgit.com/libp2p/community/master/img/contribute.gif)](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) - -## License - -MIT - ---- - -The last gx published version of this module was: 0.1.26: QmZWmFkMm28sWeDr5Xh1LexdKBGYGp946MNCfgtLqfX73z diff --git a/vendor/github.com/libp2p/go-conn-security-multistream/go.mod b/vendor/github.com/libp2p/go-conn-security-multistream/go.mod deleted file mode 100644 index 36f0b10d26..0000000000 --- a/vendor/github.com/libp2p/go-conn-security-multistream/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/libp2p/go-conn-security-multistream - -go 1.16 - -require ( - github.com/libp2p/go-libp2p-core v0.10.0 - github.com/libp2p/go-libp2p-testing v0.5.0 - github.com/multiformats/go-multistream v0.2.1 -) diff --git a/vendor/github.com/libp2p/go-conn-security-multistream/go.sum b/vendor/github.com/libp2p/go-conn-security-multistream/go.sum deleted file mode 100644 index be2d667075..0000000000 --- a/vendor/github.com/libp2p/go-conn-security-multistream/go.sum +++ /dev/null @@ -1,151 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.10.0 h1:jFy7v5Muq58GTeYkPhGzIH8Qq4BFfziqc0ixPd/pP9k= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-testing v0.5.0 h1:bTjC29TTQ/ODq0ld3+0KLq3irdA5cAH3OMbRi0/QsvE= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1 h1:1bxa+W7j9wZKTZREySx1vPMs2TqrYWjVZ7zE6/XLG1I= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multistream v0.2.1 h1:R5exp4cKvGlePuxg/bn4cnV53K4DxCe+uldxs7QzfrE= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c h1:IGkKhmfzcztjm6gYkykvu/NiS8kaqbCWAEWWAyf8J5U= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/libp2p/go-eventbus/go.mod b/vendor/github.com/libp2p/go-eventbus/go.mod deleted file mode 100644 index 8097ac2b12..0000000000 --- a/vendor/github.com/libp2p/go-eventbus/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/libp2p/go-eventbus - -go 1.12 - -require ( - github.com/libp2p/go-libp2p-core v0.5.7 - github.com/libp2p/go-libp2p-testing v0.1.1 - github.com/stretchr/testify v1.4.0 -) diff --git a/vendor/github.com/libp2p/go-eventbus/go.sum b/vendor/github.com/libp2p/go-eventbus/go.sum deleted file mode 100644 index 689e3fd61a..0000000000 --- a/vendor/github.com/libp2p/go-eventbus/go.sum +++ /dev/null @@ -1,177 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5 h1:o0Ix8e/ql7Zb5UVUJEUfjsWCIY8t48++9lR8qi6oiJU= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.5.7 h1:QK3xRwFxqd0Xd9bSZL+8yZ8ncZZbl6Zngd/+Y+A6sgQ= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-testing v0.1.1 h1:U03z3HnGI7Ni8Xx6ONVZvUFOAzWYmolWf5W5jAOPNmU= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-openssl v0.0.5 h1:pQkejVhF0xp08D4CQUcw8t+BFJeXowja6RVcb5p++EA= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.2.2 h1:XZLDTszBIJe6m0zF6ITBrEcZR73OPUhCBBS9rYAuUzI= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multibase v0.0.1 h1:PN9/v21eLywrFWdFNsFKaU04kLJzuYzmrJR+ubhT9qA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.13 h1:06x+mk/zj1FoMsgNejLpy6QTvJqlSt/BhLEy87zidlc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5 h1:XVZwSo04Cs3j/jS0uAEPpT3JY6DzMcVLLoWOSnCxOjg= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443 h1:IcSOAf4PyMp3U3XbIEj1/xJ2BjNN2jWv7JoyOsMxXUU= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/libp2p/go-flow-metrics/go.mod b/vendor/github.com/libp2p/go-flow-metrics/go.mod deleted file mode 100644 index e9b50d49ca..0000000000 --- a/vendor/github.com/libp2p/go-flow-metrics/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/libp2p/go-flow-metrics - -go 1.12 diff --git a/vendor/github.com/libp2p/go-libp2p-asn-util/asn.go b/vendor/github.com/libp2p/go-libp2p-asn-util/asn.go index 421dd08aec..fe67238c60 100644 --- a/vendor/github.com/libp2p/go-libp2p-asn-util/asn.go +++ b/vendor/github.com/libp2p/go-libp2p-asn-util/asn.go @@ -52,14 +52,14 @@ func (a *asnStore) AsnForIPv6(ip net.IP) (string, error) { func newAsnStore() (*asnStore, error) { cr := cidranger.NewPCTrieRanger() - for k, v := range ipv6CidrToAsnMap { - _, nn, err := net.ParseCIDR(k) + for _, v := range ipv6CidrToAsnPairList { + _, nn, err := net.ParseCIDR(v.cidr) if err != nil { - return nil, fmt.Errorf("failed to parse CIDR %s: %w", k, err) + return nil, fmt.Errorf("failed to parse CIDR %s: %w", v.cidr, err) } - if err := cr.Insert(&networkWithAsn{*nn, v}); err != nil { - return nil, fmt.Errorf("failed to insert CIDR %s in Trie store: %w", k, err) + if err := cr.Insert(&networkWithAsn{*nn, v.asn}); err != nil { + return nil, fmt.Errorf("failed to insert CIDR %s in Trie store: %w", v.cidr, err) } } diff --git a/vendor/github.com/libp2p/go-libp2p-asn-util/go.mod b/vendor/github.com/libp2p/go-libp2p-asn-util/go.mod deleted file mode 100644 index 7596ad635e..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-asn-util/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/libp2p/go-libp2p-asn-util - -go 1.16 - -require ( - github.com/ipfs/go-ipfs-util v0.0.2 - github.com/libp2p/go-cidranger v1.1.0 - github.com/stretchr/testify v1.4.0 -) diff --git a/vendor/github.com/libp2p/go-libp2p-asn-util/go.sum b/vendor/github.com/libp2p/go-libp2p-asn-util/go.sum deleted file mode 100644 index f168f5b245..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-asn-util/go.sum +++ /dev/null @@ -1,37 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= -github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771 h1:MHkK1uRtFbVqvAgvWxafZe54+5uBxLluGylDiKgdhwo= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-multihash v0.0.13 h1:06x+mk/zj1FoMsgNejLpy6QTvJqlSt/BhLEy87zidlc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5 h1:XVZwSo04Cs3j/jS0uAEPpT3JY6DzMcVLLoWOSnCxOjg= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/libp2p/go-libp2p-asn-util/ipv6_asn_map.gen.go b/vendor/github.com/libp2p/go-libp2p-asn-util/ipv6_asn_map.gen.go index 2503cc1c25..936595f22a 100644 --- a/vendor/github.com/libp2p/go-libp2p-asn-util/ipv6_asn_map.gen.go +++ b/vendor/github.com/libp2p/go-libp2p-asn-util/ipv6_asn_map.gen.go @@ -1,72092 +1,79014 @@ package asnutil // Code generated by generate/main.go DO NOT EDIT -var ipv6CidrToAsnMap = map[string]string{ - "2a02:23f8::/32": "24590", - "2001:579:b0de::/39": "22773", - "2001:df0:92::/48": "55479", - "2600:1002:f110::/31": "22394", - "2604:6140::/32": "21818", - "2607:6b80:65::/48": "55081", - "2804:314:3001::/33": "61568", - "2804:59e8::/36": "268733", - "2001:1248:5a78::/45": "11172", - "2402:be80::/32": "131749", - "2803:8d20::/32": "28007", - "2a07:140::/29": "44702", - "2001:44b8:404e::/48": "7545", - "2804:12cc::/32": "263499", - "2a02:26f7:a3::/48": "20940", - "2408:8957:4300::/40": "17816", - "2a03:3100::/32": "29072", - "2402:2a80:4300::/32": "46489", - "2408:8957:4800::/40": "17622", - "2409:8020:3801::/32": "56046", - "2600:9000:11c9::/48": "16509", - "2804:c1c::/32": "52679", - "2402:800:fc10::/42": "7552", - "240e:90d:f000::/37": "137688", - "2804:6100::/32": "269205", - "2a02:26f0:b701::/36": "20940", - "2001:559:8064::/48": "7725", - "2001:fd0:3301::/37": "10029", - "2400:9380:86c0::/44": "136167", - "240e:3b5:7800::/39": "4134", - "2804:112c::/32": "263663", - "2a03:ec0::/47": "199669", - "2a0a:5180::/29": "203231", - "2a02:26f7:d9c1::/46": "20940", - "2001:4b78::/29": "12637", - "2403:8600:c00::/44": "45820", - "240a:a2ae::/32": "143336", - "2600:140a:6000::/48": "812", - "2607:fe60::/32": "11280", - "2803:1100::/32": "60022", - "2804:3f4c::/32": "266651", - "2a06:a880::/48": "39347", - "2408:8256:3d95::/48": "17816", - "2600:1413:c000::/48": "24319", - "2607:1880:ffff::/48": "13499", - "2a00:4800:1d0::/42": "13124", - "2a00:6200::/29": "21502", - "2a02:2578:1910::/38": "51375", - "2a04:4e40:c000::/47": "54113", - "2404:bf40:a141::/48": "7545", - "2602:fdd5::/36": "30685", - "2605:a7c0:110::/48": "14618", - "2a02:26f7:30::/48": "36183", - "2a0e:3f40::/29": "43282", - "2409:8904:8440::/39": "24547", - "240a:a7a4::/32": "144606", - "2600:100e:be1e::/39": "6167", - "2a02:1c8:100::/40": "24955", - "2a04:92c7:36::/41": "62240", - "2408:8957:ec00::/39": "17622", - "2600:400::/35": "15147", - "2605:a401:8385::/41": "33363", - "2804:630c::/32": "269335", - "2806:2f0:96e1::/43": "17072", - "2401:d800:2aa0::/41": "7552", - "2602:fca3:10::/48": "2165", - "2605:a401:8585::/44": "33363", - "2a06:1ec0::/32": "49832", - "2001:559:833a::/48": "33657", - "2001:67c:2f1c::/48": "41847", - "2606:6800:1000::/40": "394634", - "2a00:1588::/33": "25372", - "2001:559:52b::/48": "7922", - "2001:579:1924::/44": "22773", - "2001:44b8:6068::/48": "7545", - "2409:8061:100::/36": "9808", - "2804:14c:dc85::/41": "28573", - "2806:20d:1908::/43": "32098", - "2001:559:755::/48": "33651", - "2404:e4c0:1008::/48": "54201", - "240a:ae53::/32": "146317", - "2602:fda5::/36": "7871", - "2804:6fe0::/32": "270690", - "2a0c:b642:2fff::/48": "34641", - "240a:aca5::/32": "145887", - "2a0c:7500::/29": "205046", - "2400:9380:9240::/47": "4809", - "240a:ab65::/32": "145567", - "2801:1d:4800::/48": "13489", - "2401:1d40:3f02::/48": "58466", - "2602:fcce:145::/36": "399200", - "2804:65e0::/32": "269520", - "2a07:3147::/32": "48408", - "2a0e:3040::/32": "49696", - "2001:559:864c::/48": "33491", - "2a06:e040:7602::/47": "198507", - "2a06:eb40::/29": "205115", - "2001:559:43d::/48": "7922", - "2405:da00:400::/32": "38235", - "2606:1a00::/32": "18973", - "2804:2050:5a9f::/34": "264485", - "2804:4cb8::/32": "267387", - "2804:6a60::/32": "270332", - "2a04:f580:9290::/48": "4809", - "2001:559:c218::/47": "33667", - "2001:788::/32": "6893", - "240a:a541::/32": "143995", - "2803:a640::/32": "27896", - "2806:2f0:2443::/48": "17072", - "2a03:8ea0::/32": "21321", - "2a06:4880::/32": "211298", - "2401:3bc0:f::/37": "137409", - "2409:8924:bb00::/37": "56046", - "2a02:de80::/29": "8595", - "2a04:2dc0::/48": "39216", - "2a0b:a5c0::/29": "205807", - "2001:67c:2d7c::/48": "12859", - "2001:1248:55b3::/41": "11172", - "2001:1380:2000::/36": "19180", - "2606:a600:fff0::/44": "23005", - "2804:21d8::/32": "264577", - "2804:4c94::/32": "267379", - "2a0d:70c0::/29": "47995", - "2001:559:8591::/46": "7016", - "2606:2800:433::/45": "15133", - "2620:13b::/48": "7034", - "2804:4e9c::/32": "268272", - "2a0a:cec0::/29": "47926", - "2a0d:c0c0:4e1::/48": "59439", - "2401:0:c000::/40": "58470", - "2402:800:bf90::/42": "7552", - "240a:a2ed::/32": "143399", - "240e:44d:8080::/27": "4134", - "2605:a404:4b::/45": "33363", - "2610:160::/43": "27325", - "2a04:180::/29": "174", - "2402:800:9ad3::/42": "7552", - "2a01:a560::/32": "21195", - "2001:559:4f0::/47": "7015", - "2a02:5c0::/32": "21232", - "2a05:b680:9::/48": "57136", - "2a0a:69c0::/29": "25375", - "2a0c:a9c7:8::/46": "41740", - "2a0e:cb00::/29": "60377", - "240e:438:6240::/37": "4134", - "240e:473:5600::/41": "140485", - "2804:5ee8::/33": "269064", - "240a:aa21::/32": "145243", - "2a00:1210::/32": "34700", - "2a00:7380::/37": "51906", - "2a0d:e4c5::/30": "208861", - "2401:ff80:130f::/43": "133954", - "2404:8d00:1820::/37": "24378", - "240e:3b5::/35": "134773", - "2600:1402:1a::/45": "35994", - "2804:3a98::/32": "266098", - "2a02:e982:1e::/48": "62571", - "2a04:5c85:4000::/36": "207161", - "2a0e:46c3:700::/48": "207343", - "2408:84f3:2e50::/44": "17816", - "240a:a8fb::/32": "144949", - "2602:fd92:632::/48": "142031", - "2620:10e:d080::/41": "21538", - "2a0c:6f40::/29": "205801", - "240a:a9e4::/32": "145182", - "2803:c1a0::/32": "267693", - "2a02:26f7:f545::/46": "20940", - "2c0f:ef60::/32": "328346", - "2804:2198:280::/32": "52807", - "2001:559:860f::/43": "33667", - "2001:4938::/32": "33554", - "2403:8040::/32": "138184", - "2605:3380:413d::/41": "12025", - "2804:154::/32": "262733", - "2804:378::/32": "28283", - "2804:18c0:10::/32": "61951", - "2a02:26f0:8601::/39": "20940", - "2a02:26f7:b609::/42": "20940", - "2a02:26f7:d84e::/47": "20940", - "2001:67c:510:1165::49:2/48": "15486", - "2001:67c:1534::/48": "208281", - "240a:aa19::/32": "145235", - "2620:11c:5000::/44": "13331", - "2a0f:ae80::/32": "48131", - "240a:aba6::/32": "145632", - "2620:11a:a036::/44": "36040", - "2001:559:8394::/47": "7922", - "2001:df5:b00::/48": "136334", - "2600:1409:8001::/36": "20940", - "2800:200:e2c1::/36": "12252", - "2a02:26f7:bdc9::/46": "20940", - "2404:bf40:a301::/37": "139084", - "2a06:d9c0::/29": "60059", - "2a0e:1d80:9::/48": "9009", - "2a0e:8f02:f001::/48": "213126", - "2a0f:5707:aa50::/44": "206215", - "2600:1016:9050::/39": "6167", - "2a02:26f7:bd4c::/48": "36183", - "2a10:cac0::/29": "43872", - "2001:559:204::/48": "33491", - "2404:2940:4000::/32": "132257", - "2405:8f00:edca::/48": "15133", - "2407:9880::/32": "23856", - "240a:a672::/32": "144300", - "2804:3174:8000::/36": "265016", - "2a00:4f00::/32": "15377", - "2001:67c:4e0::/48": "48550", - "2409:8c20:5600::/42": "56046", - "240a:abc0::/32": "145658", - "2804:3c8c::/32": "266219", - "2804:81dc::/32": "272481", - "2a00:f78::/32": "48451", - "2a0f:b500::/29": "206313", - "2402:db40::/47": "131486", - "240a:a935::/32": "145007", - "2a01:7a00:adac::/33": "51701", - "2401:d800:1c0::/42": "7552", - "240a:ad98::/32": "146130", - "240a:adc2::/32": "146172", - "240e:352:6400::/31": "4134", - "2620:0:5000::/48": "23431", - "2804:1878::/39": "61935", - "2a09:8740::/29": "35426", - "2001:559:3ba::/48": "33657", - "2803:600:cacf::/34": "18809", - "2806:2f0:6001::/42": "17072", - "2a02:e180:8::/48": "15135", - "2400:9380:8bc0::/44": "136167", - "240a:a1f5::/32": "143151", - "240e:96::/28": "4134", - "2001:559:c3ad::/48": "7725", - "2401:d800:5060::/40": "7552", - "2402:5ec0:1200::/36": "23724", - "240a:a4eb::/32": "143909", - "240e:438:9e40::/34": "4134", - "2a02:228::/29": "25400", - "2a0a:4e83:e3f1::/48": "206074", - "2804:2148::/32": "264545", - "2a00:9f00::/44": "29314", - "2001:559:197::/48": "33651", - "2401:4900:880::/44": "45609", - "2409:8c60:ea01::/30": "9808", - "2a02:2698::/42": "12768", - "2a0c:4d80::/29": "208327", - "2a0f:fe80::/29": "60262", - "2a0e:dc0:5::/44": "63473", - "2001:559:c3b1::/48": "7922", - "2001:67c:1bf0::/48": "33885", - "2603:90fb:20::/41": "19115", - "2804:1e88::/32": "264434", - "2a01:47c0::/32": "5588", - "2a03:5e80::/32": "3233", - "2a0c:7e43:a525::/48": "20473", - "2001:559:83ec::/48": "7922", - "2600:6c38:d7::/44": "20115", - "2403:7f40:e001::/48": "57401", - "2409:8062:1100::/36": "9808", - "240a:a0cf::/32": "142857", - "2804:8e8::/32": "262399", - "2001:559:c11a::/48": "33652", - "2405:af80::/32": "135559", - "2801:1b:f000::/48": "267703", - "2a00:cb20:3b00::/32": "60266", - "2a02:26f7:f6fd::/46": "20940", - "2a09:d140::/29": "60781", - "2001:e48:48::/39": "9583", - "2406:4ac0::/32": "55891", - "240a:a6de::/32": "144408", - "2804:3d54::/32": "266268", - "2001:df4:4700::/48": "137107", - "2405:4000:800:8::/48": "38082", - "2602:ffc5:da0::/44": "7489", - "240a:af67::/32": "146593", - "240d:c010:1b::/48": "132203", - "240e:438:1a40::/37": "4134", - "240e:438:a220::/43": "140647", - "2a05:96c0::/29": "47886", - "2a00:f826:a::/48": "204254", - "2001:e48:22:5::/51": "9583", - "2605:db00::/32": "25222", - "2607:fc48:410::/48": "40009", - "2803:7820::/46": "267708", - "2804:18d8::/32": "61583", - "2804:31c0::/32": "262438", - "2804:6990::/32": "270278", - "2a01:d0:8000::/33": "29390", - "2a01:c50f:31c0::/38": "12479", - "2a02:2498::/46": "13213", - "2a02:4060::/29": "202008", - "2607:ff60:7000::/32": "3900", - "2620:13f:f000::/44": "397687", - "2804:100::/32": "28364", - "2001:1578:400::/40": "35003", - "2001:448a:5030::/41": "7713", - "2a02:26f7:eec8::/48": "36183", - "2408:8001:3080::/39": "17816", - "2804:5e0::/32": "262414", - "2400:8b00:800::/42": "45727", - "2409:8a50:f00::/35": "56047", - "2a0e:b105:558::/46": "20473", - "240a:ae34::/32": "146286", - "2a03:c980:beef::/48": "210079", - "2804:6318::/32": "269338", - "2804:5038::/35": "53003", - "2c0f:f918:107::/37": "37002", - "2408:8000:1000::/36": "4808", - "240e:3b7:c000::/37": "140315", - "2803:2210::/36": "271896", - "2a02:4e8::/32": "20738", - "2a04:4e40:2a10::/41": "54113", - "2c0f:f030:4000::/34": "328137", - "2620:120:9000::/44": "26227", - "2a02:26f0:9001::/39": "20940", - "2600:3402:900::/35": "4181", - "2620:83:2000::/48": "13699", - "2a01:4660::/32": "34360", - "2a02:26f0:701::/36": "20940", - "2001:559:855f::/48": "20214", - "2001:67c:5d4::/48": "8422", - "2409:8d14:20::/38": "56044", - "2a0d:3841:1020::/48": "57629", - "2001:559:220::/48": "21508", - "2402:5580::/32": "133817", - "2408:8456:9610::/42": "134543", - "240e:fd:b000::/36": "4134", - "240e:3ba:6400::/35": "140312", - "2804:4f50::/32": "268319", - "2a09:ff40::/32": "209146", - "2001:559:c228::/48": "33491", - "2407:3100:8114::/33": "10118", - "2620:74:91::/48": "11840", - "2a0c:b641:16a::/48": "16509", - "2001:559:83b8::/48": "33652", - "2401:d800:7bd0::/37": "7552", - "240a:a6ee::/32": "144424", - "2800:190:f3::/39": "11664", - "2a00:bfe0::/32": "41088", - "2a04:4e40:6e00::/48": "54113", - "2606:e000::/32": "26531", - "2a03:28a0::/46": "201650", - "2a03:6780::/48": "2119", - "2001:559:5d4::/48": "7015", - "2001:559:c3ef::/48": "7922", - "2803:5fe0::/32": "271785", - "2a09:3a00:3a00::/40": "59795", - "2a0b:9040::/29": "9009", - "2401:4900:4f52::/48": "45609", - "2600:8807:a0c2::/39": "22773", - "2604:4c40::/32": "395555", - "2806:230:1026::/48": "265594", - "2a09:9441::/32": "49981", - "2001:559:82ce::/48": "7922", - "2401:a400:c500::/34": "7477", - "2402:800:3e80::/42": "7552", - "2402:e280:3da7::/43": "134674", - "240e:67d:8c00::/33": "4134", - "2602:fea5::/36": "35859", - "2a01:a880::/29": "29600", - "2401:d800:b520::/40": "7552", - "2405:16c0::/32": "134781", - "2408:8956:8700::/40": "17816", - "2607:f7a8:1c1b::/32": "16657", - "2806:230:302c::/48": "265594", - "2a00:1678:dea1::/48": "49453", - "2a01:3a8::/32": "20507", - "2001:fd8:f0c0::/42": "132199", - "2001:4878:b228::/48": "12222", - "2402:8100:210e::/47": "55644", - "2620:10a:f000::/43": "21869", - "2804:2890::/32": "52731", - "2806:230:4019::/48": "11888", - "2001:67c:12c8::/48": "43028", - "2401:3c0:113::/48": "45528", - "2600:140f:3a01::/39": "20940", - "2806:230:402e::/48": "265594", - "2402:800:f290::/42": "7552", - "2407:c080::/36": "55990", - "2a04:53c0:80::/48": "47784", - "2a10:1c40::/48": "206222", - "2a0f:c00::/29": "48627", - "240a:a218::/32": "143186", - "240a:aa17::/32": "145233", - "2600:140f:1a01::/39": "20940", - "2804:1638:fac4::/44": "263276", - "2a06:5a80::/29": "12488", - "2001:1998:380::/37": "7843", - "2409:8924:5f00::/34": "56046", - "2607:f740:45::/48": "63911", - "2a04:f581:110a::/47": "23764", - "2404:63c0:40::/44": "131645", - "2600:140f:3e00::/48": "9498", - "2605:d780::/32": "30162", - "2804:2994::/32": "264023", - "2806:20d:5037::/41": "32098", - "2a0f:ec0::/29": "52031", - "2600:6c38:24::/47": "20115", - "2620:5f:c000::/48": "39971", - "2804:2314:2::/32": "262811", - "2804:25d4::/32": "264306", - "240a:ab9d::/32": "145623", - "2a04:4e40:2405::/40": "54113", - "2001:579:2024::/37": "22773", - "240e:473:3520::/41": "140486", - "2606:2800:133::/45": "15133", - "2607:700:1700::/32": "22343", - "2620:103:c006::/44": "14203", - "2c0f:fcb0::/34": "36916", - "2401:8800:11::/40": "17439", - "2403:5800:3::/48": "136943", - "2605:a401:80d2::/45": "33363", - "2a0e:fd45:2a0e::/40": "213253", - "2001:468:a00::/39": "11537", - "2001:44b8:2059::/48": "4739", - "2001:49e0::/32": "4581", - "2407:5c40::/32": "142139", - "2408:8459:f300::/37": "17622", - "240a:a0b3::/32": "142829", - "2605:2180:901::/43": "12422", - "2607:f281::/32": "46218", - "2804:154c:c000::/34": "263382", - "2001:559:781::/48": "33287", - "2001:67c:19f4::/48": "198877", - "240a:a78a::/32": "144580", - "2620:44:a000::/48": "33302", - "2803:e40:a00b::/33": "27797", - "2803:15c0:8000::/34": "269822", - "2803:15e0::/32": "270037", - "2a02:188:5109::/37": "31027", - "2a02:26f7:d341::/46": "20940", - "2a0e:c887::/44": "208759", - "2605:9d80:9033::/48": "4809", - "2801:80:3e00::/48": "271213", - "2804:5e34::/32": "269018", - "2a09:bac0:201::/45": "13335", - "2001:6d0:ffd5::/46": "42385", - "2001:dce:8400::/48": "45285", - "2401:7940::/32": "134971", - "2804:1b68::/32": "61726", - "2602:807:9000::/44": "11043", - "2602:fcff:17::/48": "57164", - "2a0a:e5c0:12::/48": "207996", - "2a0c:1580::/29": "204860", - "2a0f:31c0::/29": "60262", - "2c0e::/37": "24863", - "2001:559:84d8::/48": "7922", - "240e:983:1e07::/48": "58543", - "2602:800:c400::/38": "398577", - "2607:9800:c117::/41": "15085", - "2a0f:c480::/29": "56655", - "2001:559:c36b::/48": "7922", - "2001:4540::/31": "9924", - "2803:160::/32": "267932", - "2804:5e88::/32": "269039", - "2a02:2010:2410::/45": "20978", - "2a07:6880::/32": "202872", - "2a0e:8f02:f007::/48": "211828", - "240a:af2a::/32": "146532", - "2600:1407:e801::/35": "20940", - "2607:fa20::/32": "26259", - "2804:808c::/32": "271758", - "2a10:cc40:da8::/48": "20473", - "2001:44b8:37::/48": "4739", - "2401:d800:ab0::/41": "7552", - "2600:40f0:1130::/32": "701", - "2804:7cc:1000::/48": "28669", - "2a07:9200::/29": "62206", - "240a:ab3f::/32": "145529", - "240e:d2::/33": "140330", - "240e:982:5000::/40": "140527", - "2600:5c01:2c0c::/48": "11351", - "2804:8128::/32": "272436", - "2a0b:2300::/32": "30962", - "2a02:2288::/29": "41765", - "2a0e:b107:e80::/44": "39282", - "2c0e:7f80:300::/29": "36974", - "2a09:65c0::/32": "48045", - "240e:3bf:4c00::/35": "136200", - "2607:fc38::/32": "33693", - "2620:10e:1000::/47": "33397", - "2804:6dfc::/32": "270568", - "2a02:26f7:e284::/48": "36183", - "2a06:2900:125::/48": "39063", - "2803:3480::/32": "52419", - "2a03:68c0:2b00::/32": "61327", - "2a03:48c0::/32": "199608", - "2001:4490::/43": "9829", - "2402:800:99a9::/43": "7552", - "2403:bac0::/32": "133815", - "2604:6840:1400::/40": "12989", - "2804:282c::/32": "263945", - "2001:559:8419::/48": "33657", - "2401:ff80:1513::/40": "133954", - "240a:ac7c::/32": "145846", - "2a03:6980::/32": "15830", - "2604:d600:154f::/43": "32098", - "2401:4900:900::/41": "45609", - "240d:c010:41::/46": "139341", - "2a0c:b5c0::/29": "59909", - "2c0f:2d00::/32": "328916", - "2001:4408:4508::/45": "55824", - "2001:4998:ef9a::/41": "10310", - "2400:9380:8dc0::/44": "136167", - "2408:8620::/31": "4837", - "2620:100:f00a::/48": "40068", - "2800:160:14d3::/45": "14259", - "2804:4b54::/32": "267298", - "2001:418:4001:2::/64": "20940", - "2001:460:94::/39": "3561", - "2402:800:b7d0::/36": "7552", - "2409:8d39::/25": "9808", - "2a03:3500::/32": "13054", - "2001:559:743::/45": "7922", - "2400:c180:20::/47": "132513", - "2607:2f80::/32": "2734", - "2804:5a30:3000::/36": "268754", - "2a0a:a980::/29": "31742", - "2a0b:39c0:1000::/43": "12372", - "2001:559:8508::/46": "33287", - "240e:3b9:9200::/36": "140317", - "240e:473:5450::/39": "4134", - "2600:1488:a081::/41": "20940", - "2804:33e8::/32": "265424", - "2405:1c0:7f10::/48": "58810", - "2605:7200::/32": "21804", - "2620:162::/36": "14381", - "2a03:2887:ff27::/44": "63293", - "2a00:1328::/32": "31078", - "2001:559:834d::/48": "33651", - "2001:559:8796::/47": "20214", - "2606:4700:ff01::/48": "394536", - "2803:9800:9543::/36": "11664", - "2a03:9340::/32": "25589", - "2a0a:f000::/32": "207210", - "2a0c:b640:a::/43": "34872", - "2804:3dec::/32": "266563", - "2a02:26f7:cc4d::/42": "20940", - "2001:af0:ffcc::/42": "5588", - "2001:df1:1400::/48": "133296", - "2402:e40::/32": "23943", - "2600:1406:3a01::/37": "20940", - "2607:f948::/32": "6597", - "2803:26c0::/32": "267788", - "2804:6f28::/32": "270642", - "2a02:5ac0::/33": "48424", - "2a0a:54c1:9::/43": "62240", - "2001:579:b04c::/40": "22773", - "2001:9a0::/32": "15879", - "240e:473:50::/39": "4134", - "2600:141b:a::/45": "35994", - "2620:1ec:a::/45": "8068", - "2a02:16c8::/34": "6871", - "2a07:a905:fff0::/30": "46261", - "2a0e:1040:1::/45": "208655", - "2001:67c:22bc::/48": "34086", - "2401:d800:d8d0::/42": "7552", - "2600:140b:5001::/38": "20940", - "2600:3001:12::/42": "13649", - "2a02:21d0::/32": "49677", - "2a03:e400::/32": "45005", - "2a04:cb40::/29": "41552", - "2001:67c:82c::/48": "210881", - "240a:a335::/32": "143471", - "2804:1350::/32": "263528", - "2a0e:6200::/29": "3214", - "2a10:9040::/29": "212795", - "2401:ff80:1a83::/45": "133954", - "240a:a128::/32": "142946", - "2600:1417:4001::/37": "20940", - "240e:438:5c40::/38": "4134", - "2606:f780::/32": "394829", - "2804:4428::/32": "267606", - "2a03:db80:4421::/46": "680", - "2a05:7240::/29": "35784", - "2001:550:4002::/39": "174", - "2408:8256:e66::/39": "17622", - "2409:8c20::/36": "56046", - "240a:a17b::/32": "143029", - "2804:5200::/32": "268489", - "2801:140:fffa::/45": "262249", - "2a03:5a00:9::/48": "59738", - "2a03:85c0:141::/31": "20561", - "240a:a005::/32": "142655", - "2804:4224::/32": "267480", - "2a02:c502::/29": "199246", - "2a0a:e840::/29": "25540", - "2a0c:5500::/45": "205081", - "2a0d:5600:38::/41": "9009", - "2001:1978:802::/48": "13895", - "2402:3bc0::/32": "137225", - "2408:8459:5a10::/42": "17623", - "240a:ad19::/32": "146003", - "2600:9000:1e0c::/48": "16509", - "2804:365c::/32": "266343", - "2a07:d840::/29": "210107", - "2001:559:351::/48": "7922", - "2408:8957:df00::/40": "17816", - "240a:aa24::/32": "145246", - "2001:559:3a5::/48": "7922", - "2408:8956:5c00::/40": "17622", - "2602:feda:c10::/44": "212359", - "2606:a600:7000::/32": "23005", - "2804:3694::/32": "266357", - "2a02:4540:5000::/43": "197207", - "2a05:3580:ec00::/39": "35807", - "2001:67c:2310::/48": "34564", - "2400:adcc:1000::/39": "9541", - "2402:800:3c1d::/41": "7552", - "2404:d540::/47": "2501", - "2408:8756:d100::/28": "17816", - "2803:e40:8b::/32": "27797", - "2804:cf8:c000::/46": "52580", - "2409:8d44::/28": "24445", - "2606:2800:747::/48": "15133", - "2804:3074::/32": "264952", - "2804:7d68::/32": "271559", - "2a02:26f7:e488::/48": "36183", - "2a03:34c0::/32": "9009", - "2a0f:9400:771f::/48": "211767", - "2402:800:5101::/44": "7552", - "2604:d600::/44": "32098", - "2804:7104::/32": "270762", - "2806:261:1300::/41": "13999", - "2a0b:9e00::/29": "35370", - "2001:67c:16d0::/47": "44574", - "2001:df3:3580::/48": "140027", - "240a:a16b::/32": "143013", - "240a:ad57::/32": "146065", - "2804:1c04:8000::/33": "61633", - "2404:af80::/48": "38026", - "240a:a71b::/32": "144469", - "2800:160:1eea::/45": "14259", - "2804:3920:4000::/40": "266013", - "2804:7114:168::/32": "270765", - "2001:648:22b1::/41": "5408", - "2402:800:3ad3::/44": "7552", - "2a0b:cd40::/29": "42336", - "2001:bf7:180::/37": "44194", - "2600:1006:b140::/42": "6167", - "2606:ca00:408::/32": "14537", - "2804:14c:5900::/41": "28573", - "2a01:c50f:eec0::/35": "12479", - "2a0e:3780:c0ca::/48": "61361", - "2001:e60:d3a0::/45": "4766", - "2001:16a2:7d00::/38": "39386", - "2407:7800::/32": "55803", - "2804:1254::/32": "263470", - "2a02:26f7:c544::/48": "36183", - "2a02:6580::/32": "43074", - "2402:800:5655::/42": "7552", - "2607:fc48:c48::/48": "40009", - "2a02:280::/32": "12883", - "2a02:26f7:c580::/48": "36183", - "2a07:4080::/29": "47132", - "2001:559:85::/46": "7922", - "2407:5200:402::/33": "55915", - "2607:f518:172::/44": "46887", - "2804:7ac4::/32": "271391", - "2a02:27d0::/39": "49463", - "2a0a:7980::/32": "41114", - "2a0e:5e84::/32": "44176", - "2001:480:560::/48": "22", - "2001:559:1cc::/48": "7725", - "2804:2c14::/32": "265194", - "2a02:2e0:3ff::/37": "12306", - "2a02:26f7:d340::/48": "36183", - "2a02:7842::/31": "47816", - "2a0a:4540::/48": "203420", - "2401:ccc0::/32": "137236", - "2602:fce1:221::/46": "395886", - "2a01:821::/29": "3209", - "2001:559:c0f9::/48": "7016", - "2600:1011:9110::/34": "6167", - "2801:19:4800::/48": "27951", - "2a01:540:d000::/34": "12389", - "2a02:26f7:e80d::/42": "20940", - "240a:aab1::/32": "145387", - "2804:6178::/32": "269236", - "2a0c:6180::/29": "47648", - "2001:67c:1920::/48": "21195", - "2401:d800:b4f0::/39": "7552", - "2405:1c0:6a21::/46": "135062", - "240a:a42d::/32": "143719", - "2a02:26f7:c4c1::/46": "20940", - "2001:500:40::/45": "207266", - "240a:ae3a::/32": "146292", - "2804:480:1000::/40": "23002", - "2804:707c::/32": "270729", - "240a:a92c::/32": "144998", - "240e:473:a600::/41": "140485", - "2803:3a00:1800::/37": "23243", - "240e:3b5:7600::/39": "140313", - "2a01:298:fe::/32": "30880", - "2607:f8b0:4017::/32": "15169", - "2800:160:1e51::/45": "14259", - "2a02:26f7:e789::/42": "20940", - "2a02:b98::/32": "12897", - "2001:559:1b9::/46": "33652", - "2001:b60::/32": "20836", - "2403:1cc0:1128::/48": "45352", - "2607:fcd0:fa80:3e02::/49": "8100", - "2804:14d:ec00::/40": "28573", - "2804:280::/32": "53219", - "2a01:b000:9::/32": "35266", - "2a02:2e02:3180::/36": "12479", - "2408:8456:e40::/39": "17816", - "2600:1406:a400::/48": "35994", - "2804:cc0::/32": "52550", - "2400:adca::/39": "9541", - "2600:370f:3620::/45": "32261", - "2804:204:247::/43": "28186", - "2806:230:5011::/48": "11888", - "2001:67c:cc::/48": "196870", - "2804:14d:5ca6::/43": "28573", - "240a:acd6::/32": "145936", - "240e:fd:e040::/37": "4134", - "2804:854::/44": "28368", - "2a0a:e200:1911::/38": "33438", - "2405:8a00:2079::/40": "55824", - "2a09:4c2:2d::/48": "58057", - "2001:559:80cc::/48": "7725", - "2a0d:49c0::/29": "43260", - "2405:9800:d002::/48": "45430", - "2804:145c:8810::/40": "263327", - "2a05:3d80::/31": "59414", - "2a0c:1c80::/29": "203119", - "2001:918:dedf::/34": "3303", - "2001:1430::/32": "29243", - "2602:807:50f8::/47": "55136", - "2a06:1307::/32": "49392", - "2a0a:eac2::/48": "60330", - "2001:df3::/48": "132688", - "2800:3a0:7::/39": "23201", - "2a00:1488::/32": "1887", - "2a00:86c0:1035::/41": "2906", - "2a0d:6940::/29": "47447", - "2a0f:4f00::/29": "62412", - "2001:559:84dc::/47": "7015", - "2620:149:234::/41": "714", - "2a01:8840:c2::/45": "12041", - "2a02:26f7:ed49::/42": "20940", - "2c0f:1200::/32": "328820", - "2001:df1:b80::/48": "4764", - "2800:bf0:a803::/35": "27947", - "2a00:4bc0::/37": "31004", - "2a05:9b80::/29": "50083", - "2620:1d5:650::/40": "14773", - "2804:220::/32": "262791", - "2604:4fc0::/32": "20150", - "2604:6040:50::/48": "53698", - "2606:65c0:20::/48": "399804", - "2607:9e80:1381::/32": "397068", - "2804:7230::/32": "270838", - "2a02:248::/32": "8648", - "2806:2f0:31e1::/46": "17072", - "2402:800:32ee::/39": "7552", - "2402:800:b740::/42": "7552", - "240e:980:8800::/40": "38283", - "2600:6:ffc0::/45": "10507", - "2607:f740:e045::/44": "63911", - "2804:1b3:1000::/36": "18881", - "2804:7c0::/32": "262316", - "2a02:26f7:ed08::/48": "36183", - "2401:b400:16::/44": "58811", - "2402:dfc0:50::/44": "4808", - "2602:fdf2::/36": "32639", - "2804:160c:5000::/34": "263264", - "2401:4900:1c26::/44": "24560", - "2402:800:57e0::/44": "7552", - "2405:d440:101::/32": "58813", - "240a:a18d::/32": "143047", - "240e:109:8020::/48": "4134", - "2a0c:9a40:1024::/48": "34927", - "2a00:1e1a::/29": "8896", - "2a00:c580::/32": "47114", - "2a02:26f7:f685::/46": "20940", - "2408:8456:c240::/39": "17816", - "2804:7c0c::/32": "271472", - "2a01:8480::/34": "15704", - "2001:510:203::/45": "376", - "2001:c38:90a5::/44": "135566", - "2001:1978:2300::/37": "13768", - "2a02:26f0:116::/48": "3292", - "2a0d:77c7:f1e5::/37": "7489", - "240a:a2ff::/32": "143417", - "240a:ae90::/32": "146378", - "2402:800:7270::/40": "7552", - "240a:a975::/32": "145071", - "2a0b:20c0:200::/34": "205766", - "2a0c:ad40::/29": "51184", - "2804:14d:ba87::/42": "28573", - "2a03:f80:359::/48": "56630", - "2a03:1ac0:2e00::/48": "34533", - "2a01:6e00:11::/32": "43142", - "2001:678:bc8::/48": "57078", - "2001:67c:18c4::/48": "15576", - "2001:13d2:813::/45": "7303", - "240e:108:1002::/48": "23724", - "2600:1016:f010::/41": "6167", - "2a07:7d40::/29": "202876", - "240a:a2c0::/32": "143354", - "2800:160:1032::/41": "14259", - "2804:5c9c::/32": "268919", - "2a02:26f7:c940::/48": "36183", - "2402:800:7e00::/42": "7552", - "2402:800:f200::/42": "7552", - "240a:a1d6::/32": "143120", - "2600:9000:1e16::/48": "16509", - "2607:4100:8000::/33": "19171", - "2a10:dfc0::/29": "62206", - "2400:cb00:a710::/48": "13335", - "2620:a7:8000::/48": "54111", - "2800:160:1d3d::/46": "14259", - "2804:1d80::/36": "264374", - "2806:2f0:6281::/43": "17072", - "2a02:71a0::/32": "60003", - "2001:858::/32": "8437", - "2406:3000:3:26::/60": "4657", - "2a02:4460::/32": "202032", - "2a02:6900:8208::/48": "4184", - "2a0c:4680::/29": "47945", - "2001:559:a::/48": "33652", - "2408:8406:2400::/39": "4808", - "2408:8459:bc50::/38": "17816", - "2a02:26f7:bd40::/48": "36183", - "2a02:26f7:c355::/48": "36183", - "2402:800:5801::/44": "7552", - "2406:e00:104::/47": "55740", - "2408:8957:5300::/40": "17816", - "2001:559:85ee::/48": "7016", - "2400:adda::/35": "9541", - "2401:2500::/32": "7684", - "2404:4e00:1003::/48": "32787", - "240e:473:3550::/40": "4134", - "2604:fbc0::/36": "13830", - "2402:800:b5f0::/38": "7552", - "2404:3d00:4108::/47": "21433", - "2602:fff9::/40": "54839", - "2606:b400:880c::/48": "7160", - "2001:559:c061::/48": "33287", - "2405:84c0:ff26::/44": "59598", - "2409:803c:900::/37": "9808", - "2607:6400:1101::/32": "30688", - "2001:480:502::/41": "668", - "240a:a3d0::/32": "143626", - "2a04:2e80:6::/48": "59861", - "2001:559:430::/48": "33489", - "2400:8240::/32": "38719", - "2602:ff23:1::/36": "63252", - "2804:7d7c::/39": "271564", - "2a03:d900::/32": "49079", - "2c0f:fa18::/32": "36884", - "2001:4830:100::/40": "27552", - "2604:d600:1650::/46": "32098", - "2a06:9040::/29": "13101", - "2402:9e80:55::/48": "141376", - "240e:108:1196::/42": "4134", - "2a0a:1301::/29": "207028", - "2a10:c947::/32": "206447", - "2406:840:feed::/48": "209306", - "2408:8456:6c40::/39": "17816", - "2600:140b:8001::/37": "20940", - "2620:d4::/48": "6377", - "2a01:4020::/46": "25369", - "2a01:51c0::/31": "29422", - "2001:67c:2d8::/48": "13042", - "2804:2050:6a8c::/35": "264485", - "2a01:8840:85::/48": "207266", - "2a02:2278:211::/45": "28907", - "2402:8100:39cd::/46": "55644", - "2620:124:5000::/40": "18534", - "2a0b:c480::/32": "206374", - "2a10:7a80::/29": "213317", - "2001:1930:d00::/38": "11985", - "2620:1d0:5d::/48": "397218", - "2803:10::/32": "271793", - "2804:51ac::/32": "268469", - "2402:9e80:200::/48": "142561", - "2800:300:85e0::/36": "27986", - "2001:978:1e02::/47": "174", - "240e:900::/42": "137692", - "2600:1413:3000::/48": "24319", - "2801:1f2::/44": "271820", - "2001:559:86d2::/47": "397601", - "2804:23e0::/32": "264189", - "2a01:ce9c::/32": "51964", - "240a:a8f4::/32": "144942", - "2603:c022:8000::/35": "31898", - "2001:470:be::/48": "12266", - "240e:fd:c000::/37": "140310", - "2605:8240::/32": "398113", - "2402:2480::/45": "134177", - "2804:803c::/32": "271738", - "240a:a9b4::/32": "145134", - "2803:c010:3e4::/47": "271799", - "2804:37a8::/35": "266428", - "2001:559:842a::/48": "7016", - "2001:1248:8439::/41": "11172", - "2600:1006:9050::/39": "22394", - "2600:1406:3e::/48": "35994", - "2803:1e80::/32": "28111", - "2c0f:e9c0::/32": "327750", - "2001:559:8403::/48": "7922", - "2001:1388:8461::/44": "6147", - "240a:aac2::/32": "145404", - "2804:d74::/32": "28577", - "2804:1168:1819::/37": "52904", - "2a04:bc40:1dc5::/48": "59947", - "2a09:140::/29": "26636", - "2001:1248:96c5::/43": "11172", - "2407:7f00::/48": "132898", - "2409:8087:7d00::/38": "9808", - "2a02:6604:3::/48": "44933", - "2001:67c:2004::/48": "25173", - "2400:9380:9030::/47": "4809", - "2402:800:bad0::/42": "7552", - "2403:c000:1401::/48": "38228", - "2602:fd32:1::/48": "30496", - "2607:fb08:8001::/33": "32703", - "2800:160:1279::/45": "14259", - "2001:678:334::/48": "48031", - "2403:300:406::/38": "714", - "2403:300:a0c::/48": "6185", - "2804:4158:8001::/33": "267427", - "2001:b68::/32": "2108", - "2402:800:9901::/44": "7552", - "2a02:b90::/32": "16082", - "2a04:4e40:dc00::/48": "54113", - "2001:559:c196::/48": "7922", - "240a:a82b::/32": "144741", - "2620:0:2e64::/48": "29997", - "2804:550c:e000::/35": "268686", - "240a:ac6b::/32": "145829", - "2600:1415:5801::/32": "20940", - "2a00:d200::/29": "56329", - "2a02:5840::/32": "49476", - "2001:559:c22b::/48": "33661", - "2001:44b8:44::/35": "4739", - "2403:f680:a::/45": "58898", - "2409:8904:8140::/38": "24547", - "240e:44d:2180::/41": "4134", - "2803:ab60::/32": "269805", - "2804:5978::/32": "268704", - "2001:fd8:2a0::/48": "132199", - "2001:4878:4001::/48": "35994", - "2804:6290::/32": "269304", - "2a02:2010:2310::/45": "20978", - "2001:4878:8228::/48": "12222", - "2408:80fa:75c0::/32": "17816", - "2804:7dec::/32": "271591", - "2806:21a:1::/39": "262913", - "2a0e:b107:ea7::/48": "212085", - "2001:559:c3a7::/44": "7725", - "2804:749c::/32": "270992", - "2a00:79e1:f02::/45": "395973", - "2a0e:46c4:2800::/47": "213045", - "2001:67c:20d0::/47": "5421", - "2404:2ec0::/44": "131675", - "2a07:45c4::/40": "202521", - "2001:16a2:4028::/46": "39386", - "2404:a800:3002::/48": "137670", - "240e:964:ec00::/31": "4134", - "2a00:8000::/32": "200707", - "2001:df6:9000::/48": "59256", - "2408:8459:c230::/41": "17622", - "2a00:b180::/32": "15557", - "2001:43f8:960::/48": "37691", - "2402:800:5dc5::/43": "7552", - "2607:b400:a03::/32": "40220", - "2a03:db80:4411::/46": "680", - "2a05:1080:10::/48": "61004", - "2402:800:97d3::/44": "7552", - "2001:df3:500::/48": "132381", - "2408:8459:3c10::/44": "17623", - "2610:f0:6b5::/36": "22925", - "2804:4774::/32": "267055", - "2a0f:b100:100::/40": "210118", - "2804:9d4:7000::/32": "262996", - "2a0f:607:1025::/48": "60614", - "2a10:e000:1::/48": "210909", - "2001:559:1e2::/48": "33656", - "2400:8100::/32": "45671", - "2401:d800:40::/42": "7552", - "2a06:7100::/29": "48520", - "2a0f:ae40::/32": "207489", - "2001:df6:aa80::/48": "136421", - "2400:cb00:31::/48": "13335", - "2607:f180:7200::/40": "4213", - "2800:484:7a00::/32": "10620", - "2a01:b140::/29": "24940", - "2602:fca7:4::/48": "399318", - "240a:a627::/32": "144225", - "2600:380:f980::/37": "7018", - "2400:cb00:83::/44": "13335", - "2408:840c:7700::/40": "17621", - "2a0c:e9c0::/29": "197036", - "2a10:9c0::/29": "61272", - "2001:df7:4700::/48": "135957", - "2001:4de0:6102::/48": "33438", - "2405:ba00:8808::/48": "7160", - "2607:6000:500::/40": "12189", - "2800:160:16ea::/39": "14259", - "2a02:2208:2::/29": "6697", - "2a10:df80::/29": "60274", - "2a02:26f7:bc05::/48": "36183", - "2001:1248:566a::/43": "11172", - "2804:14d:7200::/40": "28573", - "2804:2a04::/32": "264051", - "2a0b:cf00::/32": "208683", - "2001:559:c1de::/48": "33287", - "2404:2d80::/32": "134226", - "2408:840d::/42": "17621", - "2806:265:4300::/37": "28481", - "2a01:608::/32": "5577", - "240e:44d:3980::/41": "4134", - "2804:b:c00d::/48": "14840", - "2606:6680:245::/48": "40676", - "2001:67c:454::/48": "62083", - "2403:a280:8000::/36": "36351", - "2403:e800:51b::/36": "4637", - "2620:0:2900::/47": "13916", - "2806:2f0:83c0::/37": "17072", - "2a04:e4c0:51::/46": "36692", - "2402:2dc0::/32": "135607", - "2409:804d:100::/36": "9808", - "240a:ac28::/32": "145762", - "2a0e:be80::/29": "60262", - "2001:df0:8::/48": "18149", - "2804:297c:cf81::/34": "262907", - "2a01:9b60::/32": "30742", - "2001:dc7:5df8::/45": "24151", - "2001:13b0::/32": "3549", - "2804:6d04::/32": "270507", - "2001:559:4cc::/48": "7015", - "2405:d540::/32": "140223", - "2600:100f:f110::/27": "22394", - "2801:1a2::/48": "269845", - "2804:1c4c:1714::/32": "61648", - "2a01:8840:1e::/42": "12041", - "2400:e500:36::/44": "138322", - "2408:883a:700::/40": "140716", - "2600:1010:b170::/36": "22394", - "2600:1407:f001::/36": "20940", - "2603:c0e2::/35": "54253", - "2804:6918:2000::/33": "270248", - "2a02:26f7:d901::/46": "20940", - "2408:8656:2ef0::/48": "17623", - "240a:a738::/32": "144498", - "240e:108:94::/46": "4134", - "240e:44d:3a80::/41": "4134", - "2600:1004:9100::/44": "6167", - "2801:80:19f0::/48": "265392", - "2a00:61c0::/29": "44143", - "2a04:1cc2::/32": "48635", - "2001:1248:70f7::/44": "11172", - "2600:1406:8801::/38": "20940", - "2604:e840:11::/32": "396965", - "2804:765c::/32": "271106", - "2a01:1c8::/32": "15699", - "2a02:e70::/39": "33965", - "2a03:ee40::/32": "3170", - "240a:a4af::/32": "143849", - "240a:a817::/32": "144721", - "2800:bf0:3400::/48": "52257", - "2803:ca80:2::/32": "263249", - "2a02:2e02:8d0::/42": "12479", - "2404:9200::/32": "2516", - "2602:ffc6:100::/37": "21777", - "2806:230:2042::/48": "265594", - "2a02:450:8000::/48": "34372", - "2001:559:866e::/48": "7922", - "2800:3b0:2000::/36": "263173", - "2a06:6280::/29": "209390", - "2a0b:2c0::/32": "205831", - "2001:438:fffd:11f::/58": "6461", - "2402:7400::/34": "38883", - "2405:6e00:2240::/40": "133612", - "2804:ccc::/32": "262827", - "2804:5eb8::/32": "262866", - "2a07:aa00:7::/48": "3356", - "240a:af5d::/32": "146583", - "2600:6c38:b1c::/46": "20115", - "2620:13c:b000::/44": "18531", - "2a00:fc0::/32": "3212", - "2001:978:8802::/39": "174", - "2001:1900:2366::/47": "202818", - "240a:a7a6::/32": "144608", - "240a:a9a2::/32": "145116", - "2600:6c38:ac0::/39": "20115", - "2a0d:8cc0::/29": "43350", - "2400:5200:c00::/40": "55410", - "2400:fc00:30::/36": "45773", - "2804:2164:d009::/45": "264552", - "2a05:4741:6::/48": "51699", - "2800:160:1775::/44": "14259", - "2804:4f0::/32": "22129", - "2a0e:b105:614::/46": "20473", - "2402:8100:25df::/42": "55644", - "2804:1288::/36": "263482", - "2804:3d68::/32": "266529", - "2a03:74c0::/32": "203304", - "2a0d:3842:1160::/48": "57629", - "2402:800:f780::/42": "7552", - "2001:550:c0c::/38": "174", - "2400:9380:8cc0::/44": "136167", - "2604:5c80::/32": "21981", - "2a0c:e000::/31": "31054", - "2a0e:1e00::/29": "15884", - "2001:559:33a::/48": "33287", - "2001:559:720::/48": "21508", - "2001:df0:45d::/48": "132556", - "2001:49f0:d0c1::/44": "174", - "2408:8956:c200::/40": "17622", - "2803:5c80:5598::/48": "64114", - "2804:7df4::/32": "271593", - "2001:df2:d900::/48": "18403", - "2a02:26f7:bb85::/48": "36183", - "2a02:6680:1166::/48": "16116", - "2c0f:eb00:1200::/40": "327941", - "2605:9100::/32": "20295", - "2804:b0::/32": "22431", - "2a06:f740::/29": "203398", - "2a02:26f7:cc84::/48": "36183", - "2001:559:262::/48": "33651", - "2001:559:8732::/48": "7015", - "2001:559:c062::/45": "7922", - "2001:1340::/32": "10569", - "2403:5a00:fff1::/44": "23783", - "240a:a7c8::/32": "144642", - "2804:1ba8::/32": "262738", - "2a06:a780::/29": "28022", - "2a09:2885::/48": "202316", - "2400:3200::/32": "37963", - "2406:840:e500::/47": "211571", - "240a:a7aa::/32": "144612", - "2602:ffaa::/36": "32621", - "2804:6fc:21::/32": "28158", - "2a00:1f08::/32": "28676", - "2a0e:f500:1::/46": "60781", - "2801:80:580::/47": "52740", - "2806:1018:cd00::/34": "8151", - "2a02:ed0::/34": "47956", - "2a03:5880::/39": "12757", - "2001:4978:1002::/45": "13331", - "240a:a0bd::/32": "142839", - "2600:1419:bc01::/33": "20940", - "2620:90:a000::/48": "398989", - "2804:163c::/38": "263277", - "2804:7e50::/32": "271616", - "2a02:26f7:e009::/42": "20940", - "2001:500:a0::/45": "12041", - "2001:be7::/32": "21233", - "2001:1a11:b2::/44": "42298", - "2804:170:9000::/33": "28131", - "2a06:2d40::/47": "20473", - "2a0b:1b82::/31": "206521", - "2001:559:407::/48": "22258", - "2804:1760::/32": "263142", - "2804:58f4::/32": "268160", - "2a00:5ae0:100::/48": "198638", - "2a0e:8f00:f103::/45": "49933", - "2a03:9d40:6000::/36": "41095", - "2405:800:2000::/33": "7545", - "2600:1901:c130::/34": "15169", - "2602:feda:d83::/48": "209645", - "2607:fb90:d700::/36": "21928", - "2801:10:6800::/48": "271821", - "2803:9800:a896::/41": "11664", - "2804:3230::/32": "265061", - "2408:8360::/29": "4837", - "240a:a9c2::/32": "145148", - "2603:c012:e000::/36": "31898", - "2a01:9700:103c::/46": "8376", - "2404:6740::/48": "138608", - "2409:8924:4d00::/38": "56046", - "2801:80:1a70::/48": "268716", - "2804:3584::/32": "266291", - "2a02:cb43:8008::/48": "20546", - "240e:108:43::/48": "63835", - "2600:1010:fe10::/39": "22394", - "2804:17d4::/32": "262778", - "2a02:582:4c00::/35": "6799", - "2a0c:d040::/32": "30781", - "2600:1017:b830::/40": "6167", - "2804:204c::/32": "264484", - "2a00:6901:1005::/48": "20926", - "2001:4490:4400::/40": "9829", - "2600:1413:2000::/48": "24319", - "2a07:a8c0::/33": "34939", - "2405:f080:1e0a::/47": "136907", - "2804:73e8::/32": "270945", - "2a04:76c7:200::/48": "13213", - "2001:67c:2fdc::/48": "42063", - "2400:cb00:a600::/47": "13335", - "2600:100d:b000::/42": "6167", - "2607:f738:d00::/38": "17184", - "2a02:a38::/32": "2119", - "2a0a:bcc0::/29": "41001", - "2408:8410::/29": "4837", - "2a05:ed80::/29": "200278", - "2001:44b8:2042::/48": "4739", - "2401:ff80:188d::/46": "133954", - "2804:235c::/44": "52747", - "2804:5418::/32": "268628", - "2804:6adc::/32": "270362", - "2401:ff80:170d::/46": "133954", - "240e:790::/26": "4134", - "2600:1406:9000::/48": "35994", - "2620:ec:c000::/48": "394683", - "2001:559:44b::/45": "7015", - "2001:579:6028::/43": "22773", - "2408:8459:f150::/38": "17816", - "2804:77c4:8000::/36": "271198", - "2a01:5b40:d::/36": "12996", - "2800:440::/47": "27738", - "2804:1ef8:2400::/32": "264457", - "2a02:26f7:e381::/46": "20940", - "2401:1700::/44": "55666", - "2800:160:1f72::/45": "14259", - "2a06:1b00:98::/47": "8302", - "2001:4878:c219::/48": "12222", - "2407:8a80::/32": "134437", - "2803:8960::/32": "269736", - "2600:1417:7801::/32": "20940", - "2001:67c:1370::/48": "29203", - "2001:49f0:d0e6::/48": "30058", - "2404:2380::/32": "135025", - "2405:7f00:8b00::/35": "133414", - "240a:a205::/32": "143167", - "240a:ae4d::/32": "146311", - "240e:e1:9900::/38": "4811", - "2a00:8640::/30": "203993", - "2a05:ad00::/29": "51395", - "2001:df1:9000::/48": "58820", - "2804:145c:ca10::/37": "263327", - "2804:6638::/32": "269542", - "2a0b:b86:3b::/48": "51992", - "2408:8956:2500::/40": "17816", - "2409:8c34:800::/37": "9808", - "240e:974:e700::/40": "4134", - "2804:1da0::/32": "264382", - "2804:1808::/32": "52993", - "2001:678:100::/48": "47697", - "2001:df0:213::/48": "17477", - "2803:f340:2000::/32": "14754", - "2a05:d050:a040::/44": "16509", - "240a:a859::/32": "144787", - "2a0d:2c80::/29": "204647", - "2001:1998:8e0::/38": "7843", - "240a:aba4::/32": "145630", - "240e:473:3450::/39": "4134", - "2607:9800:c109::/43": "15085", - "2804:14d:1200::/40": "28573", - "2a00:9d40::/32": "196927", - "2a02:26f7:c7c4::/48": "36183", - "2001:4878:3::/48": "12222", - "2406:aa40::/32": "141383", - "2a02:26f7:db40::/48": "36183", - "2401:1700:11::/44": "55666", - "2408:4009:500::/48": "45102", - "2409:8728:4600::/32": "56041", - "2a00:13fa::/32": "42087", - "2a02:26f7:df41::/46": "20940", - "2a07:59c1:30c9::/43": "140731", - "2001:559:c12f::/48": "33656", - "2001:44b8:2048::/48": "7545", - "2607:fca8:534::/35": "17139", - "2804:bdc::/32": "52866", - "2a10:adc0::/29": "59474", - "2408:8956:6500::/40": "17816", - "2a02:26f0:5801::/39": "20940", - "2401:d800:99b0::/41": "7552", - "2402:800:5ad3::/44": "7552", - "240e:3bd:2800::/38": "4134", - "2806:2f0:8121::/41": "17072", - "2a0d:200:1c::/48": "44000", - "2408:8456:5a40::/39": "17816", - "240a:a031::/32": "142699", - "2a00:cc40:1::/46": "8932", - "2a02:288::/32": "16300", - "2a02:26f7:e511::/46": "20940", - "2a11:3c00::/29": "43624", - "2803:6200::/32": "262237", - "2001:67c:195c::/48": "29117", - "2001:4b26:0:100::/31": "34288", - "2402:6640:fcf::/32": "134995", - "2402:8100:20ee::/43": "55644", - "2408:8459:e030::/41": "17622", - "2620:32:4000::/48": "395956", - "2800:160:1c3a::/41": "14259", - "2804:1ccc::/32": "61676", - "2804:4360::/32": "267566", - "2a04:6e80:1::/46": "174", - "2a04:ff00:101::/48": "207616", - "2001:67c:20a0::/47": "50472", - "2001:44b8:2053::/48": "4739", - "240a:ad35::/32": "146031", - "2600:1406:7c00::/48": "35994", - "2607:c00::/32": "3801", - "240a:a878::/32": "144818", - "2602:ff1b::/36": "49981", - "2800:160:2735::/36": "14259", - "2a0f:a302:1000::/40": "212503", - "2001:400:14:3::/38": "293", - "2402:800:be70::/39": "7552", - "240a:a1a1::/32": "143067", - "2603:c012:a000::/36": "31898", - "2610:20:8020::/44": "40623", - "2804:36a8::/32": "266362", - "2a0e:b280::/29": "208794", - "2403:9800:30::/39": "4648", - "2620:139:5002::/48": "32244", - "2804:6b2c::/32": "270383", - "2a01:600::/32": "25148", - "2001:559:7ab::/48": "33659", - "240e:438:a40::/37": "4134", - "2604:ff00:10::/48": "36271", - "2001:4408:1101::/33": "4758", - "2404:e801:2021::/32": "55430", - "240a:a487::/32": "143809", - "240a:a4d8::/32": "143890", - "2620:d1:8000::/48": "36726", - "2001:16a0::/33": "39386", - "2001:44b8:1060::/45": "7545", - "2409:804c:5d00::/31": "9808", - "2600:1417:a801::/35": "20940", - "2803:3b80:55::/42": "263702", - "2a0e:97c5:410::/46": "20473", - "2806:2f0:6241::/42": "17072", - "2a01:8740:2::/45": "57344", - "2a03:db80:4815::/37": "680", - "2400:d840:1::/48": "13813", - "2804:4c20::/32": "267351", - "2804:5868::/32": "268127", - "2a03:f80:381::/48": "9009", - "2001:fd8:a4::/46": "132199", - "2806:103e:5::/46": "8151", - "2a0e:b107:df3::/45": "141237", - "2401:7500:fff7::/48": "133296", - "2a02:5740:4::/48": "58065", - "2a0e:4ac0::/29": "207902", - "2405:203:89b::/45": "55836", - "2407:ca40:30::/48": "142502", - "240e:108:1102::/44": "4134", - "2600:1488:a501::/42": "20940", - "2a03:6080::/45": "16285", - "2402:4e00:8031::/33": "45090", - "2800:160:12a6::/44": "14259", - "2804:1134::/32": "263665", - "2a00:1148:5::/48": "21051", - "2a01:c50e:cf00::/35": "12479", - "2a02:1022::/32": "13128", - "2400:5200:401::/48": "55410", - "2401:4900:5440::/42": "45609", - "2403:2f00::/32": "24466", - "2600:141b:a000::/48": "35994", - "2a10:2980::/29": "209591", - "2001:780::/33": "12337", - "240e:62:e000::/36": "140310", - "240e:980:8b00::/40": "137695", - "2a01:5040:41::/35": "43996", - "2a01:be00::/32": "197248", - "2001:16a3::/29": "39386", - "2400:dd01:3005::/46": "7497", - "240a:acfa::/32": "145972", - "2001:3a0:f008::/36": "7521", - "2001:67c:10d8::/48": "211501", - "2001:df6:3180::/48": "141988", - "2400:cd00:1038::/41": "38794", - "2001:67c:2980::/48": "196948", - "2406:3c0::/32": "132315", - "2408:840c:1300::/40": "17621", - "2804:68ac::/32": "269708", - "2a02:6600:f001::/29": "5377", - "2a06:3100::/29": "51588", - "2a04:5b80:300::/48": "202265", - "2001:14c0::/32": "8520", - "2402:800:3471::/44": "7552", - "2402:800:7d70::/40": "7552", - "240a:a9b1::/32": "145131", - "2a02:26f7:b6c9::/46": "20940", - "2a02:c1c0::/29": "31655", - "2a03:f80:972::/48": "61102", - "2001:df1:5680::/48": "139378", - "2001:4408:4300::/45": "55824", - "240e:6:d140::/37": "4134", - "2620:104:e000:ad::/64": "13536", - "2620:192::/46": "396367", - "2a01:8840:de::/42": "12041", - "2401:4900:5190::/44": "45609", - "2804:14c:41d2::/42": "28573", - "2804:14d:b200::/40": "28573", - "2a02:26f7:fa00::/48": "36183", - "2a09:b280:ff81::/48": "133846", - "2402:3a80:1c88::/43": "38266", - "2600:9000:10e8::/43": "16509", - "2604:d0c0:ecc1::/46": "396871", - "2803:ac10::/32": "271876", - "2804:1ee8::/32": "264453", - "2405:84c0:ff10::/47": "9886", - "2402:3a80:1c00::/42": "38266", - "240e:7:5000::/37": "134420", - "2a00:1ca8:89::/48": "204963", - "2a09:8180::/30": "3320", - "2800:484:5e00::/39": "14080", - "2803:8240::/47": "52511", - "2a00:f440:b::/48": "48347", - "2001:559:75e::/48": "33657", - "2001:df5:9480::/48": "136360", - "2404:af80:10::/47": "38026", - "240a:a426::/32": "143712", - "240a:aa2c::/32": "145254", - "2620:136:d000::/48": "54710", - "2806:21a::/48": "32098", - "2a06:5700::/29": "203020", - "2001:559:272::/47": "33287", - "2001:559:84a0::/46": "33660", - "2001:678:e7c::/48": "49677", - "240a:a56f::/32": "144041", - "240e:3bb:5600::/34": "4134", - "2800:440:9000::/42": "27738", - "2803:9400::/32": "27839", - "2a0a:eb40::/29": "47796", - "2c0f:f598::/47": "327813", - "2001:67c:1b6c::/48": "8767", - "2001:4878:4136::/48": "12222", - "2602:feb4:220::/44": "25961", - "2a00:e26::/32": "25048", - "2a05:f340::/29": "41827", - "2804:5158::/32": "268446", - "2a02:26f7:f6ea::/45": "20940", - "2c0f:f488::/32": "37363", - "240a:adc4::/32": "146174", - "2620:12c:9030::/47": "395359", - "2804:7ad0::/32": "271393", - "2a03:7203:ccd1::/35": "42322", - "2a01:9700:1710::/47": "8376", - "240a:a4ee::/32": "143912", - "2607:f020::/40": "40289", - "2804:1cf8::/32": "61686", - "2001:1248:8470::/45": "11172", - "2001:4388::/32": "8452", - "2408:8456:9210::/42": "134543", - "2804:19ac::/32": "61811", - "2a01:4a60::/32": "6768", - "2a02:2548::/32": "48822", - "2a0d:187::/32": "43203", - "2804:4580:503::/38": "266931", - "2804:5e08::/39": "269007", - "2408:84f3:dc40::/38": "17816", - "2607:6b80:63::/45": "46562", - "2804:e28:c0::/42": "52547", - "2c0f:f158::/32": "328220", - "2001:470:e8::/47": "6939", - "2001:67c:18e8::/48": "49855", - "2801:18:1800::/48": "262186", - "2801:1a2:6::/48": "269845", - "2a01:c50f:cb40::/35": "12479", - "2001:559:39c::/48": "7922", - "2402:e380:30c::/48": "138351", - "2407:0:0:3d::/64": "36040", - "2407:a600:a000::/36": "18004", - "2800:160:185b::/45": "14259", - "2a02:26f7:e948::/48": "36183", - "2001:1248:596d::/40": "11172", - "2408:8024:8000::/30": "17621", - "2804:425c::/32": "267495", - "2a02:26f7:ed85::/46": "20940", - "2606:3c00::/32": "36273", - "2803:b300::/32": "52455", - "2001:678:f::/43": "25192", - "240e:44d:2c80::/41": "4134", - "2620:106:f000::/47": "22964", - "2a03:f8c0::/32": "201973", - "2a04:5a40::/29": "60311", - "2a0e:7180::/29": "200023", - "2804:6564::/32": "269487", - "2001:579:7f07::/32": "22773", - "2401:ff80:1a05::/44": "133954", - "2607:8b00:2::/47": "36454", - "2803:7200:800c::/47": "27696", - "2a0c:d947::/32": "209877", - "2804:5bd8::/32": "268872", - "2804:7c18::/32": "271475", - "2c0f::/32": "328001", - "2401:1780::/32": "18046", - "2600:370f:3528::/47": "32261", - "2605:6840:101::/38": "398041", - "2a02:5400:828::/48": "33353", - "2a0e:3c80::/29": "208909", - "2604:2600::/32": "46209", - "2804:44c::/32": "262761", - "2804:3900::/33": "266517", - "2a00:6901:1002::/47": "20926", - "2001:559:831c::/48": "7922", - "2403:6a40::/48": "135967", - "2600:6c38:60::/46": "20115", - "2604:2e8b:b800::/33": "30036", - "2604:d680::/48": "29757", - "2605:3c00:99::/48": "47", - "2804:2b00::/32": "265130", - "2a03:5e40::/32": "47110", - "2a0f:3104::/32": "56694", - "2408:8656:2ef9::/45": "17816", - "2408:8a06:100::/47": "9929", - "2605:380:53::/44": "42473", - "2001:4190::/32": "5588", - "2a01:4580::/29": "8426", - "2406:cbc0::/48": "135901", - "2600:6c3a:421::/43": "20115", - "2607:f740:e604::/47": "63911", - "2804:b18:c050::/34": "52941", - "2a00:1ec8:64::/40": "2854", - "2a01:c50e:a400::/36": "12479", - "2402:800:31ee::/43": "7552", - "2404:ec:520::/32": "703", - "2408:8456:f000::/42": "17622", - "240a:a8d2::/32": "144908", - "2804:3540::/32": "266277", - "2806:2f0:9002::/42": "17072", - "240a:a79d::/32": "144599", - "240e:473:5550::/40": "4134", - "2600:1f01:4870::/47": "16509", - "2602:feda:ab2::/48": "141011", - "2a07:22c1:ffe0::/45": "57164", - "2a0a:d580::/32": "60602", - "2620:8b:4000::/48": "36407", - "2804:f18::/32": "263566", - "2a02:d38::/29": "50785", - "2a02:26f7:f90c::/48": "36183", - "2001:fd8:33b0::/44": "4775", - "2001:4408:4d00::/44": "55824", - "2408:8409:7800::/40": "4808", - "240a:a868::/32": "144802", - "2801:80:9e0::/48": "263417", - "2804:6740::/33": "269616", - "2804:70f0::/32": "270757", - "2001:559:7e1::/48": "7725", - "2001:559:c36e::/48": "7015", - "240a:ab23::/32": "145501", - "2a06:6541:1241::/48": "8220", - "2408:8456:e00::/42": "17622", - "2607:9b80:400::/43": "46558", - "2a00:1cc8::/30": "15605", - "2a00:8a60::/29": "47610", - "2a03:5120::/40": "6830", - "2c0f:f4f8::/32": "328471", - "2001:559:167::/48": "33652", - "2401:d800:27d0::/36": "7552", - "2403:ba00:202f::/48": "132651", - "2409:8904:5b70::/40": "24547", - "240a:a472::/32": "143788", - "2a00:ec20::/32": "16236", - "2001:559:80fc::/47": "33657", - "2804:28c::/32": "262822", - "2a07:aa40::/29": "59469", - "2a0b:74c0::/48": "49017", - "2001:468:c81::/42": "40220", - "2001:678:850::/48": "20853", - "2001:67c:300::/48": "39387", - "2404:f4c0:5000::/39": "139248", - "2803:b2c0:2301::/48": "264851", - "2a01:6780:1::/48": "15743", - "240e:980:8300::/40": "4811", - "2600:100d:ff10::/40": "22394", - "2a02:26f7:78::/48": "36183", - "2a11:c500::/29": "42375", - "2001:559:c2e1::/46": "33657", - "2602:fd82::/36": "394728", - "2804:540c::/32": "268625", - "2a01:b6c0::/29": "60213", - "2a03:63e0::/29": "197099", - "2001:dc7:ffc2::/48": "24406", - "2406:6e00:f048::/48": "10310", - "2620:dd::/48": "19764", - "2620:11a:e00e::/48": "22300", - "240e:3b3:8200::/35": "140316", - "2606:ae00:a000::/47": "7287", - "2804:37f0:7100::/32": "266445", - "2401:d800:75c0::/42": "7552", - "2408:84f3:9640::/36": "17816", - "2408:8656:30fc::/46": "17623", - "2602:fed2:7701::/48": "53356", - "2804:2164:d00d::/34": "264552", - "2a00:8120::/32": "41480", - "2a01:74c0:20::/32": "15540", - "2001:559:8716::/48": "7922", - "2403:2c00:c002::/36": "4058", - "2404:4a00:7000::/64": "55423", - "2600:4c00:80::/41": "63410", - "2a0c:2f07:29::/48": "206924", - "2001:67c:1850::/48": "16086", - "2402:7500:faff::/48": "24158", - "2600:1806:420::/48": "16552", - "2804:42a8::/32": "267517", - "2806:230:4015::/48": "11888", - "2a04:ea40::/29": "3331", - "2001:559:3b2::/47": "33660", - "2600:1fa0:e0c0::/44": "16509", - "2801:be::/32": "263610", - "2a0f:2a04::/32": "42692", - "2a10:4a40:4ddc::/48": "31463", - "2409:8904:e270::/40": "24547", - "240a:a2ec::/32": "143398", - "2620:123:d001::/48": "3356", - "2800:4b0:4900::/32": "12252", - "2804:2484:8001::/39": "28258", - "2a0a:1780::/29": "206784", - "2a0b:4340:70::/48": "205618", - "2406:3003:1016::/42": "55430", - "2803:b380::/32": "52444", - "2a02:cb80:1020::/48": "43766", - "2a03:c100::/32": "49808", - "2001:13c7:7005::/44": "30133", - "2408:8459:6a30::/41": "17622", - "240e:10:1000::/32": "4134", - "2602:fcb8::/36": "36289", - "2a00:11c0:76::/48": "42473", - "240a:ab4a::/32": "145540", - "2620:1bc::/35": "7726", - "2804:138::/32": "11432", - "2409:8904:4f60::/35": "24547", - "2600:6c38:70c::/46": "20115", - "2600:9000:1180::/48": "16509", - "2803:c0::/32": "264756", - "2a02:26f7:dbc8::/48": "36183", - "2c0f:e8f8::/32": "328699", - "2001:678:f34::/48": "64396", - "2001:14b0:54::/32": "12374", - "2401:d800:26c0::/39": "7552", - "2605:ed00:4c64::/43": "11427", - "2801:84:2::/32": "263300", - "2001:559:83af::/48": "7922", - "2403:5a40:40::/48": "134562", - "240a:a053::/32": "142733", - "2a04:1580::/29": "200155", - "2a02:26f7:e0c0::/48": "36183", - "2001:648:2012::/40": "5408", - "2403:6c40::/32": "131478", - "2408:8957:4400::/40": "17622", - "2409:8704:3f00::/33": "24547", - "2620:10d:1000::/44": "5719", - "2804:269c:fe01::/46": "47065", - "2804:7c54::/32": "271489", - "2402:800:3a63::/43": "7552", - "2409:8038:900::/35": "9808", - "240e:438:ae20::/43": "140647", - "2804:64a0::/32": "269439", - "2a02:2698:7c00::/38": "52207", - "2a0c:9a40:2100::/38": "34927", - "2409:8087:3021::/40": "9808", - "2606:2800:4209::/48": "14210", - "2620:73:2000::/48": "33491", - "2401:a400:400::/33": "7477", - "2407:3000::/45": "17707", - "2800:160:1acc::/46": "14259", - "2804:12fc::/32": "263508", - "2806:250:17::/44": "28509", - "2001:43f8:20::/48": "36944", - "2602:fd64::/40": "394894", - "2804:1918::/39": "52862", - "2a07:3500:1460::/48": "34108", - "2001:559:83bc::/48": "33287", - "2001:678:378::/48": "57294", - "2401:d800:29b0::/41": "7552", - "240e:3c0::/21": "4134", - "240e:473:fc20::/41": "140486", - "2804:294:4100::/32": "28604", - "2a00:4802:1010::/36": "13124", - "2401:d800:b460::/40": "7552", - "2402:a7c1::/32": "133752", - "2804:4b0c::/32": "267280", - "2a0e:6c00::/29": "63023", - "2620:131:1066::/40": "26450", - "2804:3354::/32": "265389", - "2804:67ac:13::/32": "269643", - "2a07:5c0::/29": "211252", - "2a0a:b40::/29": "208861", - "2a0c:b642:1a02::/48": "13830", - "2001:550:2802::/45": "174", - "2406:2000:ff70::/40": "10310", - "2409:8d61::/30": "9808", - "240a:a60b::/32": "144197", - "2607:4280::/32": "36730", - "2a02:26f7:d78d::/42": "20940", - "2a02:26f7:da10::/48": "36183", - "2a03:b2c5::/32": "213291", - "2001:559:370::/48": "7015", - "2001:559:c11b::/48": "33651", - "2402:800:7150::/42": "7552", - "240e:473:7320::/41": "140486", - "2610:68:8000::/33": "5774", - "2804:3160::/46": "265010", - "2a00:1b00::/48": "47862", - "2001:1248:a4de::/42": "11172", - "2400:8400::/32": "18085", - "240e:44d:2800::/41": "140345", - "2602:feb4:70::/44": "25961", - "2803:f0e0::/32": "269864", - "2804:3c80::/32": "266216", - "2001:559:7aa::/48": "33657", - "2001:1248:9658::/47": "11172", - "2409:4056:3000::/26": "55836", - "240a:a8ed::/32": "144935", - "2a00:4300::/32": "44611", - "2a01:8c8::/32": "3329", - "2a02:2658:3000::/32": "20860", - "2001:df0:c8::/48": "139612", - "2001:559:756::/47": "7922", - "2405:a900:ffee::/48": "55992", - "240a:a0e2::/32": "142876", - "2602:fe09::/36": "397072", - "2604:d8c0::/32": "46280", - "2a00:da8::/32": "34086", - "2a02:2668:6700::/35": "16345", - "2001:df1:f180::/48": "139771", - "2a00:7420:8000::/33": "208693", - "2001:550:405::/44": "174", - "2001:559:c1d1::/48": "395676", - "2001:1248:98dc::/46": "11172", - "2001:18c8::/39": "8015", - "2620:3d:c000::/48": "22512", - "2804:14d:1031::/40": "28573", - "2a0b:b583::/48": "208175", - "2400:cb00:2049::/48": "13335", - "240a:ae6f::/32": "146345", - "2620:119:50d2::/48": "13443", - "2a00:1358:c101::/35": "6866", - "2a0d:3ec0::/32": "49981", - "2401:d800:de0::/38": "7552", - "2800:5d0:214::/36": "52302", - "2a01:690::/29": "16326", - "2a0c:5000::/30": "60502", - "240a:a80c::/32": "144710", - "240e:981:1000::/40": "137698", - "2a03:d000:9004::/46": "29648", - "2c0f:f918:530::/38": "37002", - "2001:678:ff8::/48": "207812", - "2401:d800:100::/42": "7552", - "2409:4014:3000::/26": "55836", - "240e:965:ca00::/39": "133776", - "2603:c0f9:4000::/36": "20054", - "2606:2800:420c::/48": "14210", - "2001:16a2:4032::/39": "39386", - "2804:5d9c::/32": "268982", - "240e:1::/37": "17897", - "2605:6300::/32": "27026", - "2605:a401:8501::/40": "33363", - "2605:ef80:6::/43": "36492", - "2804:471c::/32": "267032", - "2a02:45c0:16::/47": "3209", - "2001:1938:2105::/48": "33438", - "2a00:1b50::/47": "8343", - "2a01:488:bb0e::/33": "20773", - "2804:68f8::/32": "270240", - "2806:2f0:3421::/46": "17072", - "2001:480:121::/41": "668", - "2001:13e0::/32": "262178", - "240a:a537::/32": "143985", - "2804:14d:1400::/40": "28573", - "2a00:a8e0:101::/48": "8767", - "2001:67c:2fb4::/48": "200826", - "2403:e100:1001::/32": "58601", - "2a00:17f0::/32": "33808", - "2a02:d80::/32": "12778", - "2a02:e340::/29": "50304", - "2001:fd8:e1::/46": "4775", - "2604:b180::/44": "11192", - "2a06:f900:4000::/36": "56630", - "2408:84f3:4640::/36": "17816", - "2a07:5cc2::/29": "3399", - "2001:579:804::/42": "22773", - "2408:841a::/29": "4837", - "2605:640f:18fc::/48": "53667", - "2804:1e70:8000::/33": "264429", - "2804:75e0::/32": "271075", - "2a01:aea0:dd2::/48": "42473", - "2a03:cf80::/32": "31484", - "2408:8226::/32": "4837", - "2804:6a48::/32": "270324", - "2a0e:b107:88f::/48": "212793", - "240a:a54d::/32": "144007", - "2606:7980::/32": "54182", - "2a02:26f7:e440::/48": "36183", - "2a09:3cc0::/29": "204326", - "2a0f:1e40::/32": "58055", - "2001:559:86ab::/45": "7922", - "2408:8256:32a0::/39": "17816", - "2803:c40::/32": "33182", - "2a09:bac0:134::/44": "13335", - "2a0b:b87:ffa4::/48": "212332", - "2a02:26f0:2101::/40": "20940", - "2a0e:cf40::/29": "8823", - "2a0f:55c7:ffff::/48": "48749", - "2400:c700:a001::/35": "55644", - "2401:ff80:1201::/46": "133954", - "2401:ff80:1691::/46": "133954", - "2a02:2870:8000::/33": "60781", - "2a0a:e5c3::/32": "207996", - "2001:320:4002:1001::/50": "1237", - "2402:1200:156::/32": "24523", - "2620:0:f00::/47": "6431", - "2a02:e30:f00c::/48": "51636", - "240a:aa32::/32": "145260", - "2804:789c::/32": "271254", - "2a02:26e8::/32": "51155", - "2a03:4bc0:3133::/48": "13214", - "240e:978::/40": "137702", - "2604:4300:f1d::/46": "33387", - "2804:4b70::/32": "267306", - "2a0b:b87:ffbd::/48": "398355", - "240a:add4::/32": "146190", - "2620:10a:80ec::/48": "394354", - "2001:4d0:6318::/48": "10343", - "2606:18c0:1::/48": "42831", - "2a02:e58::/46": "209523", - "2a05:25c0::/36": "51254", - "2404:7e80:1000::/36": "132717", - "240a:a034::/32": "142702", - "2a02:26f7:e341::/46": "20940", - "2001:559:8611::/46": "7922", - "2600:1a0e:7be::/48": "10307", - "240a:a553::/32": "144013", - "2804:5b28::/32": "268822", - "2600:2700::/28": "81", - "2804:1e20:19::/48": "264409", - "2804:2324::/32": "262883", - "2a01:800::/31": "12430", - "2600:2000:1000::/46": "33517", - "2605:b81::/32": "395378", - "2605:a401:80be::/41": "33363", - "2620:1f:8006::/48": "10908", - "2a04:4e40:fe10::/44": "54113", - "2001:df0:2ea::/48": "38605", - "2600:1402:3801::/37": "20940", - "2001:67c:2b14::/48": "29107", - "2804:5468::/32": "268648", - "2a04:4e40:6020::/44": "54113", - "2a0e:8f02:f017::/48": "212112", - "2001:559:c280::/47": "7015", - "2405:b40:38::/41": "55674", - "240a:a1af::/32": "143081", - "2604:f040::/32": "395927", - "2804:5e30::/32": "269017", - "2a01:7d20:7d20::/47": "203645", - "2a0a:1e40::/32": "51300", - "2001:579:8d9::/42": "22773", - "2402:1c00:d000::/34": "23838", - "2407:3a40::/32": "58411", - "2600:1003:b1d0::/44": "6167", - "2600:140f:401::/39": "20940", - "2a02:1200::/27": "3303", - "240a:aecf::/32": "146441", - "240e:95:8001::/48": "58542", - "2610:20:1036::/40": "10616", - "2804:fac:8000::/33": "263598", - "2804:7648::/32": "271101", - "2a00:7a60::/32": "200000", - "2a01:8480:2005::/32": "15704", - "2a03:f80:44::/48": "39326", - "2a0b:4f40::/48": "197473", - "2a0e:b107:1030::/48": "213045", - "240e:b6::/36": "58563", - "2804:111c:2::/45": "52818", - "2804:65dc::/32": "269519", - "2a0c:6cc0::/29": "203082", - "240e:423::/32": "140061", - "2801:80:8f0::/48": "61903", - "2a02:430::/32": "12941", - "2405:5740:1::/45": "138277", - "2604:880:64::/47": "29802", - "2804:10a0:e0::/38": "28173", - "2a04:4e40:4c40::/44": "54113", - "2401:4900:3af0::/48": "45609", - "2403:1cc0:1301::/48": "45352", - "2409:8928::/31": "56041", - "240a:a721::/32": "144475", - "2600:6c30::/32": "20115", - "2620:10c:2000::/48": "40931", - "2a03:47c0:2281::/37": "21277", - "2001:b08:e::/48": "9111", - "2001:4868:225::/40": "23148", - "2001:4878:48::/48": "12222", - "2407:7c0:9422::/48": "9422", - "2a04:4e40:7410::/44": "54113", - "2001:dce:5201::/40": "23869", - "2401:d800:df00::/42": "7552", - "2405:1c0:6417::/42": "55303", - "240a:ac87::/32": "145857", - "240e:37b:ac00::/29": "4134", - "2804:2e3c::/32": "265334", - "2804:3ed4::/47": "266623", - "2a01:45c0::/32": "58208", - "2001:500:61::/48": "33080", - "2401:a140:2::/48": "59048", - "2610:b0:c100::/42": "701", - "2804:4678::/32": "266991", - "2a00:11c0:3e::/48": "42473", - "2a02:4780:dead::/48": "204915", - "2a00:5020::/48": "60781", - "2001:559:c37d::/48": "33651", - "2001:67c:170c::/48": "60829", - "2001:df7:5100::/48": "4826", - "2001:1a11:118::/48": "8781", - "240a:a27d::/32": "143287", - "2604:4300:c006::/44": "33387", - "2804:504c:6000::/32": "268380", - "2a04:f800::/29": "201776", - "2605:cb80::/32": "17210", - "2804:64b8:4000::/34": "269444", - "2405:400::/32": "24439", - "2803:3a00:800::/35": "262206", - "2804:18:4808::/42": "26599", - "2804:22c::/46": "22689", - "2806:230:6005::/48": "11888", - "2806:3d0::/32": "265601", - "2001:559:826d::/48": "33287", - "240e:804:3a0::/30": "4134", - "2604:6040:40::/48": "53698", - "2800:200:bd10::/42": "12252", - "2a07:a343:e0f0::/44": "9009", - "2a09:87c0::/48": "59497", - "2001:559:8604::/48": "33287", - "2001:df0:fe::/48": "56098", - "2401:bc40:a300::/40": "136899", - "2406:a00::/32": "4694", - "2405:4802:3190::/42": "18403", - "240a:a979::/32": "145075", - "2a00:5881:4000::/40": "51083", - "2a02:26f7:82::/48": "36183", - "2a03:5700::/32": "5524", - "2a0a:ed40::/29": "8881", - "2804:6118::/32": "269212", - "2a06:e044:10::/48": "198507", - "2001:4370::/32": "36915", - "2404:bf40:f080::/48": "2764", - "240e:473:a320::/41": "140486", - "2602:ff84::/48": "13213", - "2620:b3:4000::/48": "62611", - "2804:45b8::/32": "266945", - "2a01:40e0:3::/32": "8315", - "2a0e:a1c0::/29": "206576", - "2001:550:1205::/46": "174", - "2001:559:724::/48": "33657", - "2001:b400:d208::/45": "17421", - "240a:a7f2::/32": "144684", - "2602:fe6a:f::/48": "60781", - "2607:8700:102::/48": "25820", - "2607:fdf0:5eef::/43": "8008", - "2001:978:3400::/48": "9009", - "2a00:4c00:3::/45": "15632", - "2a02:26f7:e049::/46": "20940", - "2001:559:8274::/48": "33660", - "2400:fc00:8130::/41": "45773", - "2406:f680::/47": "132298", - "2605:b100:1600::/40": "577", - "2620:11f:b003::/45": "394514", - "2800:1e0::/47": "7195", - "2804:d64::/32": "52617", - "2401:d800:d650::/42": "7552", - "2408:8762::/29": "4837", - "2a02:26f7:ca45::/46": "20940", - "2a04:c147::/32": "60786", - "2407:c8c0::/32": "134026", - "240a:a2cc::/32": "143366", - "2a02:26f7:ef84::/48": "36183", - "2a03:4d40::/31": "199610", - "2402:ab00::/40": "24206", - "2804:5454::/32": "268643", - "2a01:5a8:2::/45": "8866", - "2001:559:80d5::/48": "33652", - "2800:bf0:40::/43": "27947", - "2a00:dd00:7::/32": "212573", - "2a05:b680::/48": "33823", - "240e:3b0:d000::/36": "134772", - "2804:998::/47": "28589", - "2a04:3e00:1000::/48": "50311", - "2a0b:d700::/29": "39676", - "2a0f:9400:802b::/48": "53356", - "2a0f:cdc0::/31": "34535", - "2001:559:538::/48": "33659", - "2001:648:2422::/40": "5408", - "2620:0:a12::/47": "71", - "2804:65a8::/32": "269506", - "2a03:4d41:310::/37": "199610", - "2a05:d050:2080::/44": "16509", - "2a06:e881:112::/48": "205897", - "2600:100a:9000::/44": "6167", - "2620:74:1c::/48": "397237", - "2a06:9500:11::/29": "204028", - "2001:428:4803::/48": "19603", - "240e:940:8f00::/33": "4134", - "2607:f7a8:1636::/48": "46887", - "2401:d800:b390::/42": "7552", - "2620:17b:5::/48": "209", - "2803:a100::/32": "262213", - "2804:53f8::/32": "268619", - "2a02:26f7:bc89::/42": "20940", - "2001:56a:10::/31": "852", - "2402:800:b860::/40": "7552", - "2408:8459:8230::/41": "17622", - "240e:5f:6002::/48": "134772", - "240e:438:420::/43": "140647", - "2804:542c:8000::/35": "268633", - "2a0e:a840::/48": "208440", - "2a0e:b107:5d0::/38": "20473", - "2001:df2:8200::/47": "135551", - "2001:1388:49c2::/35": "6147", - "2607:f330:2002::/47": "25996", - "2804:6c0:300::/43": "262418", - "2804:3cec::/32": "266242", - "2a00:ad44:3084::/48": "199875", - "2a0a:e200:1910::/48": "199156", - "2804:6c4::/36": "262893", - "2001:468:1202::/48": "20130", - "2405:d980::/32": "23703", - "2804:35c8::/32": "266306", - "2804:3bb0::/32": "266165", - "2a00:d5c0::/29": "196890", - "2001:559:101::/48": "33491", - "2001:df0:f400::/47": "133657", - "2409:8d01::/32": "9808", - "2600:803:619::/42": "701", - "2603:c002:9a00::/42": "31898", - "2a00:c980::/29": "52148", - "2001:1218::/33": "278", - "2401:ff80:1985::/44": "133954", - "2403:4c0::/33": "17639", - "240e:37d:2600::/32": "4134", - "2600:100f:b1d0::/44": "6167", - "2607:fee0:4100::/32": "3599", - "2800:484:d00::/40": "14080", - "2a0f:85c1:30::/47": "206628", - "2605:2fc0:1000::/39": "31984", - "2001:559:c0dd::/46": "7922", - "2604:d801::/32": "36372", - "2605:3600:1a::/48": "20034", - "2a02:26f7:df89::/46": "20940", - "2001:1248:880c::/43": "11172", - "2401:f000:2:200::/56": "23838", - "2402:e280:213f::/41": "134674", - "2408:84f3:d840::/37": "17816", - "240a:aa98::/32": "145362", - "2620:121:a000::/44": "6082", - "2a00:1ca8:56::/48": "211623", - "2a05:3580:de00::/39": "35807", - "2001:559:5dc::/48": "7922", - "2400:b080::/47": "134618", - "2804:c90:4200::/32": "28198", - "2a02:26f7:ef48::/48": "36183", - "2a0a:54c1:12::/45": "62240", - "2a10:cc44:201::/48": "211522", - "2403:d500::/32": "132029", - "2803:7ca0::/32": "262213", - "2a02:26f7:e708::/48": "36183", - "2001:1878:810::/38": "226", - "2403:8300:8282::/48": "24442", - "2405:6600:704::/44": "45845", - "2600:100d:b100::/42": "6167", - "2804:3b8:1fb::/45": "52965", - "2001:559:c07e::/47": "7922", - "2a03:7fc0::/32": "35717", - "2a05:3580:e000::/38": "35807", - "2001:559:8489::/48": "33287", - "2001:559:8589::/46": "7922", - "2408:8474::/28": "4837", - "2600:140f:5c01::/38": "20940", - "2804:4264::/32": "267497", - "2804:7a40::/32": "271358", - "2406:da70:e000::/40": "16509", - "2804:14c:4e5::/44": "28573", - "2001:67c:1734::/48": "60805", - "2401:4900:3760::/44": "45609", - "2800:68:16::/48": "27947", - "2001:559:193::/48": "33659", - "240a:a534::/32": "143982", - "2605:4300:1213::/40": "22616", - "2803:e880:bff1::/33": "52468", - "2804:358c::/32": "266293", - "2a02:2e02:8530::/41": "12479", - "2a07:7180::/29": "42148", - "2620:134:6000::/46": "30031", - "2001:7fb:fe14::/48": "12654", - "2401:d800:7100::/42": "7552", - "2402:800:f5a0::/41": "7552", - "2409:8750:f00::/35": "56047", - "240a:a0b9::/32": "142835", - "240e:378:ac00::/31": "4134", - "2607:fb91:1500::/33": "21928", - "2a00:1358:df01::/34": "6866", - "2a01:8840:59::/48": "207266", - "2a02:cd8::/32": "42760", - "240e:965:c400::/39": "133775", - "2606:1a40:2000::/44": "398962", - "2a01:be80::/32": "51401", - "2a0a:90c0:1011::/41": "205080", - "2403:300:a0a::/48": "6185", - "2602:ffb7:594::/48": "62874", - "2a02:2398::/47": "9166", - "2001:559:7d7::/48": "33654", - "2406:f680:7101::/32": "132298", - "2a02:3f0::/32": "9189", - "2a02:21b0::/30": "57370", - "2001:67c:10b4::/48": "34891", - "2804:3b0:8306::/44": "53062", - "2a03:2880:f25f::/42": "32934", - "2a0a:7bc7::/32": "44066", - "2001:559:8496::/48": "33667", - "2001:6a0::/34": "8664", - "2001:df4:ce80::/48": "141166", - "240a:a870::/32": "144810", - "2602:ff80::/36": "16545", - "2800:b40:10::/48": "262220", - "2a01:8340:200::/32": "59410", - "2a0c:3c00::/29": "204596", - "240a:a003::/32": "142653", - "240a:a9be::/32": "145144", - "2604:880:3a7::/48": "13820", - "2800:810:107::/28": "27747", - "2a02:2e02:8fb0::/41": "12479", - "2401:8800::/46": "17439", - "240a:ab06::/32": "145472", - "2803:500::/32": "262168", - "2a02:26f7:d6cc::/48": "36183", - "2a10:cc47:100::/40": "39282", - "2402:800:9a1d::/42": "7552", - "2402:8100:20da::/45": "55644", - "2620:1b2::/36": "26673", - "2a0e:c780::/29": "60781", - "240a:ae41::/32": "146299", - "2001:c20:488b::/45": "9255", - "2c0f:f530:20::/44": "61138", - "2001:559:542::/48": "22909", - "2804:32b0::/34": "265093", - "2408:80ea:7780::/43": "17623", - "2a02:26f7:c485::/46": "20940", - "2a0a:2306:e000::/46": "20853", - "2a0c:bf80::/48": "61295", - "240a:a65e::/32": "144280", - "2604:7640::/32": "393796", - "2a01:8020::/32": "199800", - "2001:559:8510::/48": "33657", - "2001:df7:400::/48": "134753", - "2408:8256:3061::/40": "17623", - "240a:a148::/32": "142978", - "2605:c2c0::/32": "398490", - "2a10:b641::/36": "211607", - "2a0f:9405::/32": "40676", - "2001:4c08::/34": "3356", - "240e:438:3e40::/33": "4134", - "240e:473:8550::/40": "4134", - "2600:1415:2801::/37": "20940", - "2605:3040::/32": "12183", - "2a07:4c0::/29": "42306", - "2001:57a:8028::/41": "22773", - "2a0c:29c1::/32": "56465", - "2001:559:8579::/48": "33491", - "2409:8c1e:c340::/31": "9808", - "2a00:e90::/32": "8400", - "2a02:26f7:bd09::/46": "20940", - "2a02:6900:8824::/48": "43898", - "2a02:c840::/29": "8607", - "2a0e:b107:de0::/48": "212580", - "2001:550:a13::/39": "174", - "2605:ea00:1::/48": "26388", - "2402:ef05:1::/28": "7633", - "240a:a7fd::/32": "144695", - "2804:a48::/32": "263084", - "2400:9380:9280::/46": "4809", - "2600:9000:223c::/41": "16509", - "2602:fda8::/36": "397925", - "2804:2f40:f005::/44": "264880", - "2804:4c14:cb01::/35": "267348", - "2001:559:74c::/48": "7922", - "2402:d400:fa30::/37": "17762", - "2404:1fc0:1105::/32": "133217", - "2408:8956:2400::/40": "17622", - "240e:473:2550::/40": "4134", - "2600::/47": "1239", - "2001:559:59f::/48": "33659", - "2001:67c:204c::/48": "34816", - "240a:a31f::/32": "143449", - "240a:afbc::/32": "146678", - "2602:fff9:fff::/48": "54839", - "2804:1874::/32": "61934", - "2806:10c0:ffff::/48": "8151", - "2800:300:9020::/33": "27986", - "2001:c80::/40": "4673", - "2404:a00::/32": "18121", - "2406:840:f895::/46": "212034", - "240a:aff2::/32": "146732", - "2603:803d::/32": "20001", - "2607:f148:6002::/36": "11734", - "2800:160:1caf::/43": "14259", - "2a01:8840:f6::/48": "12041", - "2001:559:83ae::/48": "7015", - "2401:5ac0::/32": "131923", - "240a:a428::/32": "143714", - "2607:f778:c100::/38": "32035", - "2804:5fdc:2000::/32": "269128", - "2001:579:8d4::/44": "22773", - "2407:c080:1800::/37": "58519", - "2408:8957:1700::/40": "17816", - "2804:14a4::/32": "263341", - "2408:8256:196::/38": "17622", - "2408:8459:9030::/41": "17622", - "240e:3b2:dc00::/34": "4134", - "2603:f3e0::/29": "262287", - "2a0a:b706:9992::/47": "204363", - "2a0b:f4c1:2::/48": "60729", - "2a0d:2640::/29": "60501", - "2001:559:84d0::/48": "7725", - "2404:0:87ff:100::/36": "131591", - "2408:8756:d000::/40": "134543", - "2803:33a0::/32": "52471", - "2a03:7380:6400::/42": "13188", - "2a04:b904::/48": "211321", - "2a07:3502:1130::/48": "33915", - "2001:df5:de00::/48": "133680", - "2604:6940:100::/32": "11006", - "2a02:2f0c:8002:3::4/61": "8708", - "2402:f300::/32": "132125", - "2405:3240::/36": "132434", - "2409:8087:400::/40": "24547", - "2806:2f0:6081::/42": "17072", - "2a00:df0::/32": "28717", - "2a01:8840:be::/41": "12041", - "2001:500:a8::/48": "21556", - "2405:55c0::/42": "63991", - "2407:4cc0::/32": "134905", - "240a:a28b::/32": "143301", - "2600:1016:9010::/41": "6167", - "2804:2d2c:fa00::/39": "52971", - "2804:32b0:f302::/36": "265093", - "240a:ada1::/32": "146139", - "2c0f:ef08::/32": "20459", - "2600:3500::/32": "396998", - "2620:119:4043::/48": "7726", - "2803:980:800::/38": "263248", - "2a0d:4d40::/44": "50630", - "2001:559:813f::/48": "20214", - "2408:8256:2d8b::/48": "17623", - "240a:a07e::/32": "142776", - "240a:a36a::/32": "143524", - "2605:a140::/30": "40021", - "2800:440:1a00::/42": "27738", - "2a0a:dc80::/29": "206597", - "2402:800:f3b0::/41": "7552", - "2606:f180:7::/48": "3356", - "2600:140b:a01::/39": "20940", - "2804:1168::/35": "52904", - "2804:8138::/32": "272440", - "2a03:f880::/32": "211700", - "2001:4c0:2::/33": "855", - "2001:678:718::/48": "786", - "2804:6d80::/32": "270537", - "2a01:8840:f9::/48": "207266", - "2001:1248:9a0d::/42": "11172", - "240e:60c:fc00::/27": "4134", - "2610:130:1900::/37": "6122", - "2a02:26f7:c9c1::/46": "20940", - "2a0b:8540::/29": "205572", - "2001:678:2d8::/48": "39285", - "2600:9000:1128::/46": "16509", - "2400:7800::/32": "4713", - "2407:880::/32": "4594", - "240a:a20d::/32": "143175", - "2606:2ec0::/32": "399356", - "2a00:1450::/33": "15169", - "2001:559:c33f::/48": "33660", - "2001:df0:270::/48": "9836", - "2403:4d00::/32": "55785", - "2a10:80c0::/35": "211331", - "2a10:d2c0::/32": "198288", - "2001:559:40a::/48": "21508", - "2607:b580:15::/46": "19754", - "2804:4448::/32": "267622", - "2a05:b0c0::/48": "198412", - "2804:72b8::/32": "270871", - "240e:6b1::/35": "134774", - "2605:b540::/32": "15353", - "2605:c700::/32": "819", - "2c0f:f8e0::/32": "37100", - "2001:559:196::/48": "7016", - "240a:aa12::/32": "145228", - "240a:af21::/32": "146523", - "240e:44d:180::/41": "4134", - "2605:e780::/32": "11142", - "2a0a:56c4::/48": "42649", - "2a01:b740:a00::/48": "6185", - "2602:801:c000::/47": "2639", - "2604:f80::/46": "22458", - "2605:ed80::/32": "20303", - "2607:f9a8::/32": "2685", - "2800:310::/47": "18678", - "2804:1cac::/32": "61668", - "2804:26e8::/32": "262573", - "2a03:380::/32": "13250", - "2a03:4b22::/32": "39835", - "2a0d:5600:1::/44": "9009", - "2a10:8a40:1254::/32": "39405", - "2600:1406:fc01::/31": "20940", - "2608:c143:1::/48": "27066", - "2001:410:8003::/48": "549", - "2404:d0:b::/32": "6648", - "2a02:26f7:cfc4::/48": "36183", - "2a0f:cc80::/29": "208861", - "2001:13b0:d002::/48": "23031", - "2001:1608::/32": "31400", - "240a:a46b::/32": "143781", - "2600:6c34:309::/46": "33588", - "2804:4b18::/32": "267283", - "2408:8656:3900::/38": "17816", - "2804:3008::/32": "264927", - "2a02:e640::/29": "199571", - "2405:8a00:8000::/48": "55847", - "2408:8459:3a30::/44": "17623", - "2600:1002:b0e0::/43": "22394", - "2804:106c::/32": "263635", - "2a04:e00:2::/48": "3257", - "2a07:59c6:eed9::/42": "56382", - "2a0d:7740::/29": "208861", - "2607:fbe8::/32": "7055", - "2800:310:407::/36": "18678", - "2a00:4f40::/32": "29104", - "2a02:1770::/33": "8865", - "2a02:ee80:4176::/47": "2856", - "2001:559:1b7::/48": "7922", - "2806:105e:f::/43": "8151", - "2a10:cc46:100::/44": "58057", - "240e:965:8c00::/35": "4134", - "2606:a500::/32": "10653", - "2607:3580::/32": "33452", - "2804:5a2c::/32": "268753", - "2001:1248:57cd::/46": "11172", - "2001:14f8::/32": "12502", - "2409:8907:7920::/38": "24547", - "2800:160:1abf::/41": "14259", - "2804:1b64::/32": "61725", - "2804:2d48::/32": "265271", - "2a03:b780::/32": "29134", - "2600:1419:601::/36": "20940", - "2a02:ad0::/29": "61157", - "2001:df1:3380::/48": "139600", - "2405:d440::/39": "58813", - "240a:a280::/32": "143290", - "2806:2f0:1061::/46": "17072", - "2402:800:ba70::/40": "7552", - "2a03:6947:1800::/40": "28952", - "2806:2f0:2120::/48": "17072", - "2001:559:86b6::/48": "33660", - "2001:559:c38c::/48": "7016", - "2001:af8::/32": "5385", - "2400:3dc0:701::/32": "134371", - "2600:1408:f801::/31": "20940", - "2602:fd40:ca1::/48": "14618", - "2804:746c::/32": "270980", - "2a02:26f0:2901::/38": "20940", - "2a02:26f7:dac8::/48": "36183", - "2001:559:c16b::/48": "33491", - "2401:d800:d6b0::/41": "7552", - "2402:b400:4090::/41": "45960", - "2a02:26f7:b994::/48": "36183", - "2a03:7203:d100::/34": "42322", - "2001:559:8b::/45": "33667", - "2001:67c:18c::/48": "47682", - "2001:67c:444::/48": "6730", - "2001:4220:800d::/33": "24835", - "2400:10c0:c000::/34": "136007", - "2a05:7640:2100::/41": "174", - "2a0b:2d83::/32": "49542", - "2001:df7:4100::/48": "137621", - "240a:ab63::/32": "145565", - "2a00:1fb0::/29": "34660", - "2a10:2f01:380::/42": "39526", - "2001:4490:4874::/46": "9829", - "2a06:afc0:2::/48": "41011", - "2400:a980:6000::/40": "133512", - "240e:1f:1000::/33": "4134", - "240e:473:e50::/39": "4134", - "2a01:8e20::/32": "12843", - "2a02:26f7:ded0::/48": "36183", - "2403:fdc0:e000::/36": "138460", - "2a00:5580::/29": "5564", - "2001:559:704::/48": "7922", - "2001:1248:5b75::/44": "11172", - "2405:4802:14d0::/34": "18403", - "2804:14d:ba84::/46": "28573", - "2a02:888:400:401::/32": "47794", - "2a03:2460::/32": "59908", - "2a0b:efc0:401::/32": "60893", - "2001:559:108::/48": "33660", - "2a02:26f0:ab::/45": "20940", - "2a02:26f7:c245::/46": "20940", - "2a02:6c00:f00b::/36": "44971", - "2a09:de40::/32": "209198", - "2607:fdc8:400::/48": "30036", - "2001:559:155::/48": "33652", - "2001:559:8069::/48": "7015", - "2408:8957:da00::/40": "17622", - "2607:da00:801::/48": "26793", - "2a00:1620::/32": "137", - "2001:5b0:24f4::/36": "6621", - "2405:d300:400::/48": "38809", - "2806:230:2047::/48": "11888", - "2a02:26f7:b84d::/46": "20940", - "2a07:3506:4c::/48": "29311", - "2001:559:81bf::/48": "21508", - "2401:c300::/32": "55353", - "2600:1405:2801::/35": "20940", - "2620:101:200b::/45": "16417", - "2804:2038::/32": "264478", - "2806:230:2007::/48": "11888", - "2a0e:b107:147a::/48": "142164", - "2804:4bfc::/32": "267341", - "2a00:1d50:4::/32": "47605", - "2a0b:b500:f801::/31": "60764", - "2001:67c:e0::/48": "197000", - "2401:ff80:1701::/45": "133954", - "2600:6c38:b5a::/47": "20115", - "2620:111:103d::/48": "18469", - "2803:cb40::/32": "16906", - "2001:559:8281::/48": "33665", - "2001:559:863e::/48": "7922", - "2408:8256:378c::/43": "17623", - "2605:dd00::/32": "231", - "2a00:9060::/32": "8778", - "2a02:ff0:1400::/40": "12735", - "2001:67c:210::/48": "51066", - "2401:ff80:1105::/44": "133954", - "2a06:41c0:6::/44": "51559", - "2409:801f:3000::/46": "9808", - "2803:5440:face::/48": "264738", - "2804:4510::/32": "267670", - "2a01:5560::/32": "44128", - "2a03:2887:ff25::/48": "63293", - "2a09:4ec0::/48": "47447", - "240e:3b3:2c00::/35": "134774", - "2804:fb0::/32": "262841", - "2804:119c::/32": "263427", - "2804:120c::/32": "263453", - "2804:2c58:1110::/38": "265211", - "2a0c:e2c0::/29": "62275", - "2a0e:97c5:484::/46": "20473", - "2001:1938:4008::/48": "26769", - "2600:1402:c01::/38": "20940", - "2803:1720::/32": "266815", - "2a0e:b101:301::/48": "49459", - "2001:1ba0::/32": "5578", - "2a01:8840:a2::/45": "12041", - "2a0f:23c7::/32": "35425", - "2600:1017:b4b0::/41": "6167", - "2001:559:8106::/48": "20214", - "2400:c600:3320::/41": "24389", - "2401:7c00::/36": "18400", - "2408:8957:4d00::/40": "17816", - "240e:3bc:1800::/34": "4134", - "2001:67c:1380::/48": "61078", - "2620:10a:9027::/48": "11133", - "2a01:63c0::/32": "31319", - "2a02:26f7:c3c1::/46": "20940", - "2a02:c744::/30": "199644", - "2a0e:47c6::/32": "212362", - "2a04:e800:5019::/48": "57976", - "2408:8459:6250::/37": "17816", - "240a:aa3d::/32": "145271", - "240e:44d:4700::/41": "140345", - "240e:473:8a50::/39": "4134", - "2804:6ea0::/33": "270609", - "2a02:3a8::/32": "15965", - "2a04:e00:14::/44": "54103", - "2001:559:4de::/48": "7922", - "2001:559:721::/48": "33657", - "2620:3e::/48": "394271", - "2803:bc40:8102::/45": "52468", - "2804:2504::/32": "52708", - "2804:24b4::/32": "264239", - "2001:d10::/32": "4787", - "2001:16b8:c00::/35": "8881", - "240a:a5c3::/32": "144125", - "240e:44d:8000::/41": "140345", - "2602:fed2:710c::/48": "202479", - "2602:fff6:d::/48": "30475", - "2606:bc00:8001::/36": "19419", - "2a01:667:500::/32": "48951", - "2a02:ff0:2800::/40": "12735", - "2a02:26f7:f501::/46": "20940", - "240e:37e:1a00::/34": "140330", - "2602:fd36::/36": "398547", - "240e:44d:3600::/41": "140345", - "2a02:26f7:c605::/46": "20940", - "2a09:57c0::/29": "63023", - "2a03:1280::/32": "197227", - "240a:a6f5::/32": "144431", - "240e:3b0:ac00::/35": "4134", - "2607:fb90:2100::/36": "21928", - "2804:40a4::/34": "265972", - "2a02:26f7:b808::/48": "36183", - "2a02:26f7:e840::/48": "36183", - "2a02:26f7:fb45::/46": "20940", - "2a0e:ffc0::/29": "47489", - "2001:4d0:6119::/38": "297", - "2804:3278::/32": "265080", - "240e:44d:1980::/41": "4134", - "2a03:eb80::/32": "56704", - "2001:dc7:5d0d::/41": "24151", - "2600:9000:2007::/44": "16509", - "2a0d:dbc0::/29": "212660", - "2001:559:c224::/48": "7016", - "2409:8028:30c1::/42": "56041", - "2804:1408:7100::/32": "28635", - "2804:42e0::/32": "267533", - "2a02:26f0:e601::/36": "20940", - "2a02:26f7:bf09::/42": "20940", - "2a04:4e40:1a20::/43": "54113", - "2404:bf40:85c1::/38": "139084", - "2405:9e40::/32": "139468", - "2604:6800::/32": "36436", - "2803:d000:fffe::/48": "393398", - "2804:4db4::/32": "268214", - "2a0b:4e80::/32": "206491", - "2408:8956:d240::/40": "17622", - "240a:a818::/32": "144722", - "2607:f110:e130::/41": "21889", - "2a10:78c0::/29": "212559", - "2408:8956:d2c0::/37": "17816", - "240a:a384::/32": "143550", - "2800:3e0::/32": "1239", - "2804:eec:1200::/48": "25933", - "2a02:26f7:6c::/48": "36183", - "2a0c:ab07:c000::/34": "208861", - "2001:559:8576::/48": "13367", - "2001:b28:f240::/36": "42065", - "240e:3b6:ec00::/35": "140314", - "2620:12f:6000::/44": "393668", - "2a02:26f7:fb01::/46": "20940", - "2001:4200:5000::/48": "37501", - "2401:160c::/32": "133090", - "2402:9d80::/47": "131429", - "2001:278::/32": "4725", - "2a02:5420:1::/48": "9053", - "2a0c:7840::/29": "50415", - "2001:559:c0e1::/48": "7015", - "2404:e00:65::/46": "15695", - "2405:73c0::/48": "41095", - "2804:301c::/32": "264930", - "2804:154c:501f::/42": "263382", - "2804:4928::/32": "28161", - "2a00:e20:143::/48": "16509", - "2a0e:72c0::/47": "208479", - "2001:57a:ef02::/35": "22773", - "2804:7efc:400::/39": "271659", - "2409:8004:802::/40": "24547", - "240e:438:9220::/43": "140647", - "2600:6c38:74::/46": "20115", - "2600:9000:1025::/48": "16509", - "2602:fed9::/36": "209", - "2605:3380:4163::/44": "12025", - "2a06:1301:4800::/48": "55286", - "2001:559:84c3::/48": "7922", - "2408:8459:f800::/40": "17816", - "240a:a8fc::/32": "144950", - "2a02:26f7:42::/48": "36183", - "2a0d:2900:a::/45": "50069", - "2a0f:9700::/29": "208386", - "2402:f700:4000::/32": "23907", - "2403:f500::/34": "10103", - "240e:2c:c000::/31": "4134", - "2001:67c:5fc::/48": "8447", - "2001:da8:258::/32": "23910", - "2806:2f0:81c1::/43": "17072", - "240a:a6ef::/32": "144425", - "240c:0:1::/29": "45275", - "2804:2cd4:b0::/41": "265246", - "2804:5390::/32": "268592", - "2a0f:a307::/32": "44326", - "2604:4940::/32": "62516", - "2a02:26f7:b642::/47": "20940", - "2001:579:c1d0::/38": "22773", - "2401:ff80:1903::/45": "133954", - "2402:6800:6::/48": "26506", - "2804:7b84::/32": "271436", - "2a07:7840::/29": "207390", - "2600:e000:400::/40": "22995", - "2605:1080::/49": "23367", - "2804:9ec::/37": "263002", - "2403:300:a16::/48": "6185", - "2409:8021:3803::/29": "9808", - "2a0a:5cc0::/29": "60921", - "2001:559:15d::/48": "33491", - "240a:aa0f::/32": "145225", - "2607:ff28::/46": "62904", - "2804:1be0::/32": "61754", - "2804:2cdc::/32": "263069", - "2806:230:6028::/48": "265594", - "2a02:f8c0::/29": "60713", - "2001:559:c036::/47": "20214", - "2405:dc0:8008::/62": "22604", - "2600:1802:8::/43": "16552", - "2804:5ea0::/32": "269046", - "2a02:26f0:1501::/40": "20940", - "2a02:26f7:e081::/46": "20940", - "2a02:26f7:ee04::/48": "36183", - "2001:468:2806::4/48": "396961", - "2001:559:c13d::/48": "7016", - "2001:648:2c00::/48": "6867", - "2001:c38:90a0::/46": "135566", - "240a:a4f2::/32": "143916", - "240a:a68f::/32": "144329", - "2803:4500::/32": "27660", - "2402:bfc0::/44": "136361", - "2408:8456:7400::/42": "17622", - "2408:84f3:f610::/44": "17623", - "2600:6c38:89e::/42": "20115", - "2620:171:6b::/45": "42", - "2803:4580:9100::/38": "52468", - "2803:5300::/32": "264637", - "2804:590c::/32": "268166", - "2a07:a100::/29": "202701", - "2600:380:7b80::/37": "20057", - "2604:bd40::/32": "395236", - "2001:559:5bc::/48": "7016", - "2402:800:58ee::/39": "7552", - "2804:14d:4200::/40": "28573", - "2804:4094::/32": "265968", - "2401:ff80:120b::/45": "133954", - "2408:8956:2840::/40": "17622", - "2a0c:9a40:8280::/48": "207414", - "2402:9e80:2a::/48": "140224", - "2a00:c640::/32": "198612", - "2a0c:b641:200::/45": "209710", - "2c0f:fe58::/32": "33567", - "2402:800:79a0::/41": "7552", - "240a:a7bc::/32": "144630", - "240e:3bd:3e00::/33": "140308", - "2409:8052::/47": "56047", - "2607:fd80::/32": "14103", - "2a02:26f7:e8c4::/48": "36183", - "2a02:2e02:1ba0::/43": "12479", - "2001:2000:1100::/34": "1299", - "2a00:f320::/48": "24586", - "2a0c:a9c7:147::/48": "41740", - "2001:500:46::/44": "207266", - "2001:978:4a01::/37": "174", - "2409:8b3c::/32": "24444", - "2803:7da0:1::/46": "64114", - "2a0c:b642:900::/47": "204625", - "2402:800:398d::/43": "7552", - "240a:a343::/32": "143485", - "2600:6c38:b5c::/42": "20115", - "2a0b:7040::/29": "208819", - "2001:440:1880::/48": "1880", - "2404:24c0::/32": "138520", - "240a:a4d6::/32": "143888", - "2600:380:2100::/37": "20057", - "2605:7380:c000::/34": "25697", - "2a01:288::/33": "8717", - "2a0f:2ac0::/29": "60262", - "2406:4f40:8::/48": "40676", - "2409:802f:2b06::/48": "56041", - "240a:a65a::/32": "144276", - "2806:230:4012::/48": "265594", - "2605:1980:206::/37": "13951", - "2a02:2ad0:520::/38": "702", - "2405:1c0:6243::/43": "55303", - "2408:8957:de00::/40": "17622", - "2804:72f0::/32": "270885", - "2a01:6500::/46": "42925", - "2804:48d4::/32": "267147", - "2409:8702::/32": "38019", - "2600:1f16::/36": "16509", - "2605:7bc0::/32": "395439", - "2606:18c0:3::/48": "61317", - "2a09:a040::/29": "25486", - "2a0a:100::/29": "40970", - "2a01:5e00::/32": "34688", - "2a0d:3842:1290::/48": "57629", - "2001:559:842d::/48": "13367", - "2402:8100:207f::/40": "45271", - "2607:ff78::/32": "20161", - "2804:28e4:403::/32": "28260", - "2804:4688::/32": "266995", - "2a00:6280::/32": "12978", - "2a09:1c40::/32": "209553", - "2001:1248:7000::/46": "11172", - "2404:f4c0:f9c3::/48": "142281", - "2800:160:174c::/43": "14259", - "2803:f840::/45": "269980", - "2605:9dc0::/32": "54665", - "2a02:26f7:d8c4::/48": "36183", - "2a00:1a18::/29": "20755", - "2a02:ee80:4012::/45": "3573", - "2001:510:303::/45": "376", - "240e:3ba:1200::/39": "4134", - "240e:473:3f20::/41": "140486", - "2804:24cc:8003::/33": "264242", - "2a01:6d80::/36": "13307", - "2001:56b:a00c::/33": "852", - "2001:de8:16::/48": "55943", - "240a:a39e::/32": "143576", - "2a0e:ee80::/29": "60262", - "2a11:2800:3::/48": "61317", - "2001:67c:7a8::/48": "57720", - "2001:ec0:5300::/40": "131293", - "2600:140b:14::/48": "24319", - "2804:6e54::/32": "270589", - "2a02:1710:2::/48": "42775", - "2408:8459:ca50::/39": "17816", - "2804:538::/32": "53111", - "2a00:1828::/32": "34240", - "2a09:4bc7:d020::/44": "140096", - "2409:804d:1900::/34": "9808", - "2605:9480:1000::/39": "31775", - "2804:4e64:c000::/34": "268258", - "2a03:65c0::/32": "61331", - "2a03:ab80::/32": "197876", - "2001:559:838c::/48": "7922", - "2001:559:8790::/46": "7922", - "2a01:298:d34d::/48": "33886", - "2a0a:1c80::/29": "44407", - "2406:6140::/32": "137102", - "2606:7100:1cac::/34": "21581", - "2600:1014:9110::/36": "22394", - "2a02:26f7:bbc6::/47": "20940", - "2607:f038:e::/33": "21527", - "2607:f250:c020::/47": "7046", - "2610:20:90e2::/48": "3477", - "2a07:3500:19a8::/48": "38915", - "2001:4d50:fa00::/37": "34309", - "2800:160:10d4::/44": "14259", - "2804:49c:3403::/48": "7162", - "2804:f6c:2021::/41": "263585", - "2a02:26f7:f680::/48": "36183", - "2a0e:97c0:510::/44": "61978", - "2001:4830:2446::/48": "395326", - "2800:160:2b48::/42": "14259", - "2804:1b04:6::/44": "53048", - "2a02:26f7:e140::/48": "36183", - "2001:67c:654::/48": "34244", - "2605:b640:1530::/44": "53736", - "2a00:ec0::/32": "20634", - "2a02:26f7:c601::/46": "20940", - "2a02:2e02:8600::/42": "12479", - "2a0b:4340:3211::/42": "48024", - "2a02:26f7:37::/48": "20940", - "2a02:2e02:17d0::/42": "12479", - "2a10:7fc0::/29": "202505", - "2001:dc7:5e00::/32": "24151", - "2406:daa0:4060::/44": "16509", - "2804:c00:3600::/32": "52655", - "2806:2f0:1063::/48": "22884", - "2a02:730:1::/48": "42964", - "2001:418:8007::/37": "2914", - "240a:afce::/32": "146696", - "2804:3920:4400::/40": "266013", - "2401:5840:600::/32": "132113", - "2404:5740::/48": "395266", - "2405:9800:5a::/45": "131445", - "2407:d6c0:8::/48": "136785", - "2a07:5900:102::/29": "203014", - "240e:3b2:8200::/35": "140316", - "2600:1008:d000::/43": "6167", - "2a02:ee80:40c2::/43": "3573", - "2a03:5a80::/32": "21367", - "2a03:f080:1800::/48": "47515", - "2a06:78c0::/48": "210079", - "2a03:7360:1::/48": "197943", - "2001:628::/37": "1853", - "2001:678:e68::/48": "212567", - "2409:8020:41::/43": "56046", - "240a:a957::/32": "145041", - "2600:1415:4c01::/35": "20940", - "2620:13f:3018::/48": "27538", - "2804:2a6c::/32": "264072", - "2001:559:8430::/46": "33287", - "2001:57a:e020::/40": "22773", - "240a:a680::/32": "144314", - "2606:5cc0:1100::/38": "36263", - "2804:2408:8400::/33": "52705", - "2a09:9cc0::/48": "44364", - "2a0c:7040::/32": "203488", - "2001:67c:2f88::/48": "204082", - "2804:6eb8::/32": "270615", - "2a03:3180:4000::/36": "44453", - "2a0f:5707:ab20::/48": "3280", - "2c0f:fe38:2340::/32": "33771", - "2804:4854::/32": "267114", - "2804:547c::/32": "268653", - "2804:7b20::/32": "271412", - "2a0a:ad40::/32": "211428", - "2001:559:1a4::/48": "33652", - "2401:d800:9b60::/40": "7552", - "2405:7f00:82a0::/37": "133414", - "2600:140b:2c01::/35": "20940", - "2804:2144:309::/36": "52795", - "2a0c:5440:80::/44": "209650", - "2a0e:b107:14c0::/47": "211042", - "2402:800:3371::/44": "7552", - "2402:6c40::/32": "38084", - "240a:ac69::/32": "145827", - "2605:ad80::/40": "62887", - "2001:559:7a4::/48": "7015", - "2401:a240::/32": "17958", - "240a:a826::/32": "144736", - "2605:8480::/32": "11472", - "2804:697c::/32": "270273", - "240a:afb0::/32": "146666", - "2804:10cc::/32": "263650", - "2804:269c:8::/46": "47065", - "2804:804c::/32": "271742", - "2001:559:258::/48": "7922", - "2001:559:484::/48": "33659", - "2001:678:b1c::/48": "20676", - "240e:438:6440::/38": "4134", - "240e:67d:e600::/30": "4134", - "2803:9800:9501::/45": "11664", - "2804:25e0::/32": "264308", - "2a02:1065:1000::/36": "13045", - "2a02:26f7:a::/48": "36183", - "2a00:7b80::/32": "62370", - "2a0f:5701:3505::/48": "206499", - "2408:8459:8e50::/35": "17816", - "2408:8956:aa00::/40": "17622", - "2a03:80c0::/47": "210079", - "2001:6d0:ffc8::/48": "21416", - "2409:8d63::/28": "9808", - "2604:1380:3020::/33": "54825", - "2804:794::/32": "262303", - "2804:1258::/32": "263471", - "2804:35e8::/32": "266314", - "2001:4408:5f00::/34": "4758", - "240a:a45f::/32": "143769", - "2804:1e84::/32": "264433", - "2a00:1750::/32": "3257", - "2408:8456:6440::/39": "17816", - "240a:a574::/32": "144046", - "2804:4870:1c3::/33": "267121", - "2804:4fd8::/33": "268353", - "2a01:518::/32": "25151", - "2a01:c50e:f200::/36": "12479", - "2600:1404:6001::/37": "20940", - "2600:1480:4000::/40": "33905", - "2804:5adc::/32": "268801", - "2a04:c9c0::/29": "202113", - "2a10:8700::/32": "207925", - "2001:559:2b9::/46": "7015", - "2001:559:c100::/48": "33659", - "2a05:d03a:2000::/40": "16509", - "2405:9800:c702::/36": "45430", - "240a:ac64::/32": "145822", - "2605:9500::/45": "14244", - "2605:b640:1101::/48": "53736", - "2a0a:340:e300::/40": "56807", - "2001:559:5f7::/48": "33652", - "2001:559:c249::/46": "33651", - "2401:4900:5cc0::/44": "45069", - "2606:bc00:bf00::/33": "19419", - "2804:54f0::/32": "268679", - "2a0e:3500::/29": "56456", - "2001:559:362::/48": "7725", - "2001:579:524c::/40": "22773", - "2001:4878:a027::/48": "12222", - "2600:140f:ac00::/48": "55836", - "2a05:eb80::/29": "39479", - "2a0a:54c1:2::/45": "62240", - "2001:500:ed30::/48": "7342", - "2400:dcc0:ab04::/37": "38631", - "2405:1c0:6543::/43": "55303", - "2600:1419:201::/37": "20940", - "2a02:22e0::/32": "38987", - "2a02:26f7:e0cc::/48": "36183", - "2401:d800:610::/42": "7552", - "2602:fcd8:10::/46": "399141", - "2800:160:10c4::/46": "14259", - "2804:3a54::/32": "266083", - "2400:d400:1::/46": "45671", - "2408:8956:3400::/40": "17622", - "2620:1:a000::/48": "19770", - "2405:4bc0::/32": "137677", - "240a:a919::/32": "144979", - "2a00:99a0::/33": "28855", - "2001:67c:178c::/48": "34907", - "240e:3ba:ac00::/35": "4134", - "240e:980:9000::/40": "134420", - "2a02:26f7:c2c4::/48": "36183", - "2a02:26f7:ea48::/48": "36183", - "2404:bf40:e403::/38": "139084", - "2a02:26f7:d156::/44": "20940", - "2a07:3500:10c0::/48": "208973", - "2001:1900:2264::/48": "27564", - "2804:8f4:3000::/40": "52875", - "2804:15b4::/32": "263405", - "2a03:8d20:1182::/48": "200849", - "2a06:8000::/29": "50673", - "2001:500:91::/46": "15135", - "2001:559:41b::/45": "7725", - "2001:559:8729::/46": "33652", - "2403:9800:c200::/34": "4648", - "2806:310:31::/46": "16960", - "2a01:8f80:100::/40": "62168", - "2a02:26f7:f600::/48": "36183", - "2402:5840:6::/32": "137403", - "240a:a5c5::/32": "144127", - "240e:924::/36": "132147", - "2606:2800:4044::/48": "14210", - "2a07:6a86::/32": "203568", - "2a0e:97c5:508::/46": "20473", - "2401:d800:bd40::/38": "7552", - "2600:1406:7001::/38": "20940", - "2606:9580:fffa::/48": "394256", - "2a00:55a0:f000::/40": "9009", - "2a05:8880::/46": "34304", - "2804:79c0::/32": "271325", - "2a02:d900::/29": "43809", - "2a06:4e40::/29": "200567", - "2a09:cc80::/29": "35712", - "2a0b:27c0::/31": "34215", - "2402:3a80:20::/47": "38266", - "2600:100a:b130::/40": "22394", - "2c0f:f3f0::/32": "328024", - "2001:7fb:fe00::/47": "12654", - "2405:6600:c01::/41": "45845", - "240a:a088::/32": "142786", - "240e:3b1:c000::/37": "140315", - "2604:ea80::/32": "33438", - "2a01:5b0:2f::/48": "8561", - "2001:470:f9::/45": "6939", - "2001:4478:cc1f::/34": "4802", - "2804:2f50::/32": "264883", - "2a05:7f80::/29": "201213", - "2602:807:d000::/44": "397736", - "2804:cf4::/32": "52579", - "2804:e94:6c0::/44": "262468", - "2804:1080::/32": "28287", - "2c0f:ec88::/32": "328328", - "2409:8915:6000::/39": "56044", - "2606:c480::/32": "22361", - "2607:480::/32": "396443", - "2803:b4c0:9::/32": "264668", - "2a02:ff0:18f2::/44": "12735", - "2001:559:8264::/48": "33651", - "2001:6d0:ffb7::/48": "47445", - "240a:a2d7::/32": "143377", - "2804:7c8:9000::/33": "262323", - "2804:6158::/32": "269229", - "2804:7d70::/32": "271561", - "2001:559:17e::/48": "33651", - "2803:60a0::/32": "266809", - "2001:559:16b::/48": "7015", - "2408:8459:4430::/41": "17622", - "240a:a51e::/32": "143960", - "2804:438c::/32": "262911", - "2a0d:4d80::/29": "1764", - "2a05:3e00::/29": "29484", - "2001:559:8339::/48": "33661", - "2001:6d0:4009::/48": "57503", - "2409:8050:3900::/32": "9808", - "2620:97:e000::/48": "399663", - "2620:11c:f000::/48": "393667", - "2804:54d4::/32": "268672", - "2a00:5881:9000::/40": "198978", - "2a0b:5340::/48": "13030", - "2401:ff80:140f::/43": "133954", - "2804:631c::/32": "269339", - "2a09:ae80::/29": "204537", - "2a0f:3cc0::/29": "207936", - "240e:44d:1080::/41": "4134", - "2804:14c:9b84::/44": "28573", - "2804:297c:aaab::/33": "262907", - "2403:bc00:7fff::/32": "45668", - "2408:8456:4440::/38": "17816", - "2a04:4e42:6000::/32": "54113", - "2001:559:146::/48": "33491", - "2001:4998:68::/48": "5779", - "2401:4900:55a0::/41": "45609", - "2408:8459:a210::/42": "17623", - "240a:a8d8::/32": "144914", - "2604:6600:a4::/39": "40676", - "2a02:26f7:d6cd::/42": "20940", - "2620:114:b000::/48": "18440", - "2c0f:fb60::/32": "12455", - "2001:6d0:6d0b::/48": "45029", - "240e:3b1:1200::/39": "4134", - "2604:3b40::/32": "399494", - "2804:187c:a7::/44": "28258", - "2a07:b8c1:12::/30": "14043", - "2a09:2ac0::/29": "41563", - "2c0f:eae0::/32": "37521", - "2001:8b0:5000::/32": "20712", - "240a:a0ae::/32": "142824", - "2804:6308::/32": "269334", - "2a0a:e5c1:400::/40": "209898", - "2804:682c::/32": "269673", - "2001:678:be0::/48": "207632", - "2001:1248:9abf::/41": "11172", - "2401:d800:5a60::/40": "7552", - "2403:1840::/32": "137845", - "2403:7b40:1::/44": "132931", - "2a02:6b8:23::/40": "208722", - "240e:3bf:9c00::/34": "140310", - "2806:20d:5014::/47": "32098", - "2409:8a34:aa00::/33": "9808", - "2607:4880:a000::/33": "53508", - "2607:f368:1003::/48": "46846", - "2a02:f680:1::/48": "212913", - "2a02:26f7:d305::/46": "20940", - "2409:804b:2a00::/39": "24445", - "240e:37f:ac00::/24": "4134", - "2600:141c:b001::/33": "20940", - "2620:13d:a000::/48": "19712", - "2800:160:133d::/41": "14259", - "2804:2320:11::/32": "264144", - "2804:487c::/38": "267124", - "2a06:6f40::/29": "204109", - "2001:559:8467::/48": "7015", - "2001:1600::/32": "29222", - "2409:8750:d00::/38": "56047", - "240a:ade4::/32": "146206", - "2605:52c0:5::/48": "54574", - "2a01:488:bb05::/48": "20773", - "2a02:26f7:fc05::/46": "20940", - "2001:559:5e0::/48": "33287", - "2001:559:c3a4::/47": "33651", - "240a:a1d8::/32": "143122", - "2804:1834::/32": "61923", - "2a02:26f7:f2c4::/48": "36183", - "2401:8500::/32": "55350", - "2403:d300::/34": "15932", - "240e:978:4000::/40": "137702", - "2607:fcd0:fa80:2104::/62": "8100", - "2620:11a:c081::/48": "394192", - "2620:131:4000::/40": "394015", - "2a02:e80::/32": "39823", - "2001:559:84d9::/46": "7015", - "2001:678:210::/48": "204506", - "2402:8100:30d0::/44": "45271", - "2404:3d00:40ca::/43": "3573", - "2804:12ac::/32": "263491", - "2a0e:b107:dc6::/48": "211486", - "2a0e:fd45:b31::/41": "44103", - "2001:1250::/44": "22894", - "2a02:26f7:bc85::/46": "20940", - "2a10:46c0::/32": "208367", - "2402:d000:8115::/44": "9329", - "2406:2ac0::/32": "140736", - "2a02:26f0:83::/48": "20940", - "2a07:a240::/29": "6786", - "2001:559:7b3::/48": "7922", - "2001:49f0:d100::/47": "30058", - "240e:108:11d3::/48": "134756", - "2804:9f8::/32": "262773", - "2001:4888:8030::/44": "22394", - "240a:a5b5::/32": "144111", - "2804:26a0::/32": "263845", - "2a01:8840:2d::/48": "207266", - "2001:2000::/48": "3301", - "240a:a129::/32": "142947", - "2a05:e380:3::/29": "15739", - "2001:440:1800::/48": "1880", - "2001:44b8:4046::/48": "7545", - "2804:828c::/32": "263060", - "2001:5f8:7d03::/48": "30325", - "2600:1402:b::/45": "20940", - "2620:138:3020::/48": "11251", - "2a02:26f7:e80c::/48": "36183", - "2a0f:607:1024::/48": "212359", - "2402:8400:100::/38": "17820", - "2409:8924:7b00::/37": "56046", - "2602:809:3008::/47": "34553", - "2607:1280:1340::/40": "394972", - "2620:1ff::/36": "10497", - "2804:6fc8:2000::/37": "270684", - "2a0c:4380:14e::/48": "51945", - "2403:e800:e80c::/35": "4637", - "240a:ae1c::/32": "146262", - "2804:62c:2011::/32": "262569", - "2a02:b20::/32": "29321", - "2a03:c300::/32": "20514", - "2603:4:1006::/47": "44273", - "2620:125:9003::/48": "10780", - "2620:1ec:28::/47": "8068", - "2804:203c::/32": "264479", - "2a02:e740::/29": "61157", - "2001:559:1ef::/48": "33668", - "2001:4420::/32": "4782", - "2a09:a080::/48": "44364", - "2a03:ad60::/32": "203908", - "2001:67c:258::/48": "29067", - "2001:44b8:2047::/48": "4739", - "2405:9800:d004::/46": "45430", - "2a02:530::/43": "21191", - "240a:a0f3::/32": "142893", - "240a:a351::/32": "143499", - "2607:fcd0:fa80:8501::/52": "8100", - "2610:1a0:7000::/32": "40193", - "2804:e30:411::/45": "11338", - "240a:ad33::/32": "146029", - "2804:7538::/32": "271032", - "240a:a016::/32": "142672", - "2604:bb00::/32": "46692", - "2a06:3580::/29": "62183", - "2402:9900::/48": "27435", - "2806:230:403a::/48": "265594", - "2a0e:e2c2::/29": "42282", - "2a10:9200::/47": "48282", - "2001:559:8412::/48": "7015", - "2804:6854::/32": "269685", - "2a03:c280::/32": "198330", - "2a04:e4c0:12::/48": "36692", - "2001:559:803c::/48": "33491", - "2a04:3b40::/29": "60664", - "2a01:270:eaeb::/37": "29657", - "2001:b08:19::/48": "197467", - "2001:44c8:2001::/35": "45430", - "2405:c400:175::/46": "38880", - "2408:8957:800::/40": "17622", - "2606:6880::/32": "63470", - "2607:f750:2400::/38": "23473", - "2804:ef4::/46": "28642", - "2a02:26f7:e208::/48": "36183", - "2a0b:4340:9e::/48": "205610", - "2a0e:fd40:200::/48": "60557", - "2001:df4:4280::/48": "140920", - "2402:7d80:7778::/32": "63582", - "2405:9800:9811::/48": "45458", - "2603:6000::/32": "10796", - "2607:fb58:f000::/46": "36086", - "2a0e:8f02:2120::/47": "211635", - "2405:1c0:6217::/42": "55303", - "2409:8d1a::/32": "132525", - "240a:aa35::/32": "145263", - "2607:7c00::/32": "21898", - "2804:49d4::/32": "52631", - "2806:1030::/32": "8151", - "2a02:2e02:8680::/41": "12479", - "2403:780:e400::/35": "64098", - "2409:8915:3800::/39": "56044", - "2620:98:e006::/48": "399728", - "2804:6868::/32": "269690", - "2001:579:f130::/45": "22773", - "2001:678:30::/48": "48283", - "2a07:a40:c::/48": "205112", - "2a0e:b540:ff04::/29": "30823", - "2a0f:e040:1::/48": "60781", - "2408:8656:3aff::/48": "17623", - "2409:8000:5100::/40": "56048", - "240a:ab73::/32": "145581", - "2804:2f30:4800::/34": "53096", - "2a02:cb80:2910::/48": "43766", - "2401:d800:24f0::/39": "7552", - "2409:8028:100::/37": "9808", - "2804:4ef8::/32": "268295", - "2a0e:46c4:101::/48": "137490", - "2401:4900:4d20::/44": "45609", - "2409:8907:7c20::/39": "24547", - "240a:a459::/32": "143763", - "240e:438:e40::/35": "4134", - "240e:473:2250::/39": "4134", - "2804:5bf4::/32": "268879", - "2a02:2330:b3::/29": "12578", - "2408:8256:376c::/43": "17623", - "2620:1b:e000::/48": "394805", - "2806:230:6020::/48": "265594", - "2a03:24e0::/48": "15623", - "2a05:3580:2500::/36": "35807", - "2a0b:9100::/32": "201098", - "2405:c5c0::/32": "139976", - "240a:a417::/32": "143697", - "2604:4100::/36": "29713", - "2804:2cd4::/42": "265246", - "2804:7dfc::/32": "271595", - "2a00:f1c0::/32": "21267", - "2001:559:8656::/48": "33659", - "240a:a5dd::/32": "144151", - "2803:ba80::/32": "262932", - "240a:a620::/32": "144218", - "2804:14d:5684::/41": "28573", - "2001:678:190::/48": "62241", - "2409:8904:5340::/42": "24547", - "2a06:1980::/48": "58321", - "2001:df2:3880::/48": "139836", - "2405:4000::/36": "38082", - "240a:a4a1::/32": "143835", - "2600:100c:9010::/38": "22394", - "2804:5fb4::/32": "269118", - "2a00:c2e0:101::/32": "30919", - "2a0d:6840::/29": "210232", - "2408:8256:2d9b::/48": "17816", - "2408:8456:3e40::/33": "17816", - "2408:8456:ae40::/35": "17816", - "2804:1020::/32": "262544", - "2a01:b760::/32": "204281", - "2a09:e240:2::/48": "57706", - "2001:3c8:2705::/48": "132482", - "240a:a89f::/32": "144857", - "2600:370f:72a5::/46": "32261", - "2804:1560::/32": "52711", - "2403:1140::/32": "135719", - "2404:3d00:40c8::/47": "21433", - "2a04:3880::/30": "60721", - "2a07:f980:2::/47": "26338", - "2804:14d:ac92::/47": "28573", - "240a:a8ee::/32": "144936", - "240e:b:f804::/37": "139018", - "2600:1415:2401::/36": "20940", - "2600:9000:11c5::/46": "16509", - "2607:fcd0:fa80:4301::/53": "8100", - "2620:100:900c::/47": "26211", - "2801:80:460::/48": "52915", - "2804:bf8::/33": "52653", - "2804:3e1c::/32": "266574", - "2804:7180::/32": "270793", - "2806:10a0::/32": "8151", - "2620:e8::/48": "14183", - "2804:69f0::/32": "270301", - "2804:7480::/32": "270985", - "2a02:25b0::/32": "51731", - "2a09:7:2003::/48": "35536", - "2001:67c:1901::/46": "6848", - "2804:1c30::/32": "28285", - "2a02:26f7:f581::/46": "20940", - "2620:e7::/48": "398451", - "2a00:fd40:6::/48": "20473", - "2001:67c:1212::/48": "42728", - "2001:67c:2818::/48": "20647", - "2404:bf40:a041::/39": "139084", - "2408:80f1:180::/43": "17621", - "2600:6c7f:10::/48": "20115", - "2404:7f40:ffff::/48": "138645", - "2803:4c80::/32": "263181", - "2402:ab40:1001::/32": "137541", - "2405:17c0::/44": "139331", - "240a:a8ac::/32": "144870", - "240a:aed0::/32": "146442", - "2600:370f:3745::/44": "32261", - "2620:57:a000::/48": "40706", - "2800:5d0:213::/48": "17048", - "2a03:85c0::/39": "20561", - "2a06:7500::/29": "24786", - "2c0f:eb00:400::/40": "37061", - "2401:d800:fe80::/42": "7552", - "2803:e400::/32": "52373", - "2a0a:9b40::/29": "43139", - "2a0f:ee00::/47": "60781", - "2001:559:c2d5::/48": "33652", - "2604:f440:7::/48": "397423", - "2400:cb00:a490::/45": "13335", - "2620:74:4::/48": "11840", - "2001:67c:25a8::/48": "8218", - "240e:438:1020::/43": "140647", - "240e:44d:2e80::/41": "4134", - "2001:df5:2800::/48": "24558", - "2408:8456:1f40::/40": "17816", - "2804:74cc::/32": "271004", - "2c0f:f348:b::/35": "24757", - "2620:131:1046::/44": "26450", - "2804:5d04::/32": "268946", - "2a03:2480:8028::/46": "200107", - "2a05:a940::/29": "20546", - "2001:388:6031::/41": "7575", - "2001:43f8:700::/44": "2018", - "2404:bf40:f200::/48": "7545", - "2409:8c54:b000::/44": "141425", - "2a03:8ac0:249::/48": "47523", - "2001:67c:314::/48": "39628", - "2405:9800:c90c::/46": "45458", - "240a:a4f4::/32": "143918", - "2604:1280:9::/46": "11696", - "2604:e540::/32": "30165", - "2804:4d6c::/32": "268195", - "2a01:358:5f12::/32": "9121", - "2a0e:97c5:4c4::/46": "20473", - "240a:adc7::/32": "146177", - "240a:ae08::/32": "146242", - "2806:230:4007::/48": "11888", - "2a03:b00::/32": "8723", - "2a03:6640::/32": "199562", - "2607:f3a0:a009::/48": "399810", - "2803:e100::/32": "27971", - "2a03:1fc0::/48": "35220", - "2a05:7440:a5ac::/48": "200165", - "2800:160:264c::/39": "14259", - "2001:559:8320::/48": "33661", - "2001:559:865a::/47": "33657", - "2600:8807:982::/38": "22773", - "2804:79a4::/32": "271318", - "2001:559:840c::/48": "7015", - "240e:980:8d00::/40": "137693", - "2600:1007:b1e0::/33": "22394", - "2a0d:c5c0::/32": "210051", - "2001:9e0::/29": "12414", - "240a:a349::/32": "143491", - "240a:aa64::/32": "145310", - "2600:6c38:150::/42": "20115", - "2a01:367:abce::/33": "30823", - "2a0b:d1c0::/32": "9188", - "2408:8459:3e10::/42": "17623", - "240e:a67:2600::/23": "4134", - "2620:34:a000::/48": "62947", - "2800:bf0:1c0::/44": "52257", - "2405:84c0:fade::/48": "138990", - "2406:3400:9d::/41": "10143", - "2001:4878:4219::/48": "12222", - "2602:ff87::/36": "36243", - "2a0d:82c7:1001::/32": "47787", - "2a0f:9441:41::/48": "209808", - "2001:559:80cd::/48": "22258", - "240a:ad54::/32": "146062", - "2600:1417:71::/46": "20940", - "2a0e:97c0:410::/48": "211275", - "2606:cd00::/47": "40845", - "2803:c010:2a::/48": "271799", - "2804:30c::/39": "28343", - "2a04:3200::/47": "30742", - "2a0b:6040::/32": "41821", - "2407:500:4000::/39": "58940", - "2408:8956:6d00::/40": "17816", - "2600:1402:6001::/36": "20940", - "2620:98:2000::/48": "398894", - "2001:df5:e280::/48": "141640", - "2401:3c0:201::/44": "45528", - "2409:8028:3900::/29": "9808", - "2604:8b00::/32": "19554", - "2804:40a4:2200::/32": "265972", - "2a02:cb80:2920::/48": "43766", - "2c0f:faf0::/32": "11259", - "2401:ff80:1383::/45": "133954", - "2600:1403:a402::/36": "20940", - "2602:802:b00c::/43": "397795", - "2605:5640:3000::/36": "25635", - "2804:1c84:7::/37": "61659", - "2a02:ee80:40d4::/46": "21433", - "2a0d:2406:d00::/44": "202418", - "2407:4d40::/45": "142050", - "2a05:680::/29": "201597", - "2001:df7:480a::/48": "131893", - "2001:1248:9cb5::/44": "11172", - "240e:944:4000::/32": "4134", - "2600:8807:4782::/36": "22773", - "2602:fce1:241::/48": "395886", - "2a0a:a1c0::/29": "205998", - "2c0f:f028::/32": "37317", - "2001:4490:4c82::/47": "9829", - "2a0f:300::/32": "397881", - "2a0f:ffc0::/29": "207767", - "2402:800:59e0::/44": "7552", - "2620:139:a000::/44": "31807", - "2a03:1f80::/32": "57188", - "2001:253:10a::/45": "38272", - "240a:a26c::/32": "143270", - "240e:1:7200::/32": "4134", - "2a0f:36c0::/29": "60262", - "2401:d800:7ea0::/41": "7552", - "2600:1802:13::/45": "16552", - "2603:c0f0:2110::/40": "6142", - "2001:1248:5586::/44": "11172", - "2408:8957:1240::/40": "17622", - "2604:a580::/40": "1610", - "2a00:1cb8:2000::/35": "12713", - "2402:800:5ec0::/43": "7552", - "2607:f6f0:5004::/40": "27224", - "2001:559:8349::/48": "7922", - "2401:ff80:1489::/46": "133954", - "2408:8459:b250::/37": "17816", - "2409:8d14:900::/35": "56044", - "2600:6000:fcd2::/42": "12271", - "2605:1700::/32": "40029", - "2a0e:b107:192::/48": "200334", - "2a04:16c0::/39": "48921", - "2001:500:121::/48": "396566", - "240a:61:1000::/36": "9605", - "240a:a126::/32": "142944", - "240a:af15::/32": "146511", - "2803:da60::/32": "267890", - "2806:2f0:9341::/42": "17072", - "2a00:6901:a003::/48": "20926", - "2001:df0:4e00::/48": "134823", - "2804:2630::/32": "264331", - "2804:5614::/32": "267513", - "2a00:9b00::/32": "29282", - "2a01:270:e003::/36": "29657", - "2001:559:3d1::/48": "7922", - "2001:559:82fc::/48": "7922", - "2001:678:968::/48": "206253", - "2001:67c:2c70::/48": "9201", - "2001:be8::/32": "13189", - "2408:8957:d400::/40": "17622", - "2600:5c00:3fca::/32": "20001", - "2a0f:dac0::/47": "60781", - "2606:3080::/32": "16423", - "2607:a000::/32": "22799", - "2800:bf0:8142::/48": "27947", - "2a02:cc4:2100::/41": "8211", - "2a02:2310::/32": "39817", - "2a06:12c0::/29": "33832", - "2001:559:c3f6::/48": "33657", - "240a:a5d2::/32": "144140", - "2804:517c::/32": "268455", - "2a01:a000::/32": "47474", - "2407:c280:da02::/48": "138510", - "2409:8051:3002::/40": "56047", - "2a02:26f7:d2::/48": "36183", - "2400:1a00:b051::/39": "17501", - "240a:aeb7::/32": "146417", - "2a04:4280:20::/48": "43260", - "2a0c:93c0:8000::/48": "212465", - "2a0e:97c1:a8c::/47": "20473", - "2001:559:232::/48": "20214", - "2620:12:4000::/48": "22945", - "2804:4bac::/32": "267323", - "2001:559:c26d::/46": "7922", - "240e:44d:2400::/41": "140345", - "2804:1db8::/32": "264389", - "2a07:9b40:1aa5::/48": "39702", - "2409:8e54::/28": "9808", - "2604:9d40:100::/44": "393290", - "2804:b58::/32": "52767", - "2c0f:ebd0::/34": "328608", - "2404:f4c0:fff0::/48": "140219", - "2a04:b540::/36": "61424", - "2001:1270:3001::/36": "22908", - "2620:107:9024::/48": "22787", - "2620:171:f6::/48": "715", - "2801:14a:c0::/44": "19429", - "2a00:10a0:6::/48": "199234", - "2a00:79e1:800::/45": "36384", - "2a0a:4300::/29": "56655", - "2001:559:471::/48": "7725", - "2001:559:8200::/48": "33659", - "240a:ac8a::/32": "145860", - "2607:f6f0:3000::/48": "19930", - "2620:ad:8000::/40": "52127", - "2806:267:300::/37": "13999", - "2806:2f0:7081::/42": "17072", - "2001:dc7:ffc7::/43": "24151", - "2408:8956:4800::/40": "17622", - "2803:4a10::/32": "271916", - "2a03:c500::/32": "51704", - "2a0b:b600:2000::/38": "57758", - "2a0d:6d80::/29": "204591", - "240a:ae13::/32": "146253", - "2604:d600:15ad::/43": "32098", - "2606:4700:2::/43": "13335", - "2620:1e:2000::/48": "396288", - "2804:6850::/32": "269684", - "2804:7388::/32": "270921", - "2a02:2e02:1210::/42": "12479", - "2400:ac00::/32": "45846", - "2607:fcd0::/39": "8100", - "2804:5194::/32": "268463", - "2001:678:15:8000::/46": "42385", - "2806:230:401b::/48": "11888", - "2a00:74c0:104::/32": "6659", - "2a02:1788::/32": "35838", - "2a0d:c7c1::/32": "43959", - "2a09:8880::/45": "56690", - "2001:df7:6700::/48": "138516", - "240a:a494::/32": "143822", - "2804:184c:104::/32": "61928", - "2804:7f8c:20::/32": "271695", - "2a02:c6c1:1::/48": "10929", - "2403:0:111::/45": "4755", - "2408:8756:4c00::/40": "136959", - "240a:a99b::/32": "145109", - "240e:908:8000::/39": "137698", - "2804:3ae4::/32": "266116", - "2a09:19c0:8000::/48": "56335", - "2c0f:f300::/48": "37153", - "2001:559:83d8::/48": "33661", - "2001:4878:8259::/48": "12222", - "2402:800:9655::/42": "7552", - "2606:4700:8040::/44": "13335", - "2a0f:52c0::/48": "58001", - "2804:14d:4400::/40": "28573", - "2804:1b0:e000::/31": "18881", - "2a0f:3c40::/29": "3175", - "2001:559:8378::/48": "33652", - "2402:800:9aa9::/43": "7552", - "2a0f:600:700::/48": "51044", - "2407:55c0::/32": "17538", - "240e:438:3020::/43": "140647", - "2620:82:6000::/48": "11048", - "2a00:dbc0::/32": "48885", - "2001:df2:7900::/48": "6939", - "2600:1004:f110::/31": "22394", - "2a00:1d32::/32": "9121", - "2a02:a000::/26": "5432", - "2001:559:72c::/47": "33659", - "2001:13c7:601f::/48": "64104", - "2806:310:1c::/46": "16960", - "2a0e:6400::/32": "209094", - "2605:a401:893f::/41": "33363", - "2001:67c:4bc::/48": "204896", - "2001:df7:8400::/48": "134819", - "2401:d800:9bc0::/42": "7552", - "240e:980:4200::/40": "58466", - "2600:6c2e:d0e::/38": "20115", - "2602:fdae::/36": "14106", - "2602:ff6e::/43": "63202", - "2620:135:2000::/40": "19704", - "2620:1d7:2::/48": "7545", - "2800:200:b4b0::/41": "12252", - "2803:1040::/35": "263751", - "2001:420:ffff::/48": "54140", - "2600:6c38:f::/43": "20115", - "2605:12c0::/32": "394743", - "2620:171:800::/44": "42", - "2804:59d8::/32": "268729", - "2806:2f0:2023::/48": "17072", - "2a0a:54c1:2a::/43": "62240", - "240a:adf2::/32": "146220", - "240a:af63::/32": "146589", - "240e:108:8c::/48": "4134", - "2600:1488:41c2::/34": "20940", - "2001:559:807d::/46": "33657", - "2804:248:4008::/32": "28598", - "2804:7cf0::/32": "271528", - "2806:230:3027::/48": "11888", - "2a03:2a81::/30": "47232", - "2a0b:7500::/29": "206859", - "2a0e:97c0:4d0::/48": "211024", - "2402:800:94ee::/43": "7552", - "2a09:bac0:11::/46": "13335", - "2a0b:4341:a0e::/48": "57695", - "2001:450:2015::/48": "3356", - "2a02:26f7:f3c1::/46": "20940", - "2a06:e7c0::/32": "202236", - "2a10:8000::/28": "8551", - "2408:8456:400::/42": "17622", - "2409:8924:2d00::/38": "56046", - "240a:a1ee::/32": "143144", - "2600:1415:d001::/37": "20940", - "2602:fd23:8::/48": "399760", - "2804:7e64::/32": "271621", - "2001:67c:2764::/48": "12552", - "2402:c800:fff8::/48": "37900", - "2405:6e00:440::/44": "133612", - "240e:473:8400::/41": "140485", - "2600:8807:1f62::/40": "22773", - "2a0d:f8c0::/42": "209122", - "240a:a578::/32": "144050", - "2606:c700:6000::/32": "53850", - "2804:494::/32": "52987", - "2a00:8dc0::/32": "57811", - "2001:fd8:a1::/46": "4775", - "2409:8000:1800::/40": "56048", - "2600:140f:2600::/48": "9829", - "2a02:128:10::/48": "48709", - "2a02:26f7:eccd::/42": "20940", - "2a06:9780::/29": "13199", - "2001:678:b40::/48": "208003", - "240e:ff:c004::/48": "134772", - "2605:7c80::/32": "393417", - "2001:dd8:17::/44": "30133", - "2400:cb00:a2c0::/48": "13335", - "2803:f840:6::/32": "269980", - "2a06:4fc0::/29": "3214", - "2001:550:3403::/45": "174", - "2001:559:441::/48": "7922", - "240a:adf9::/32": "146227", - "2600:d01:4000::/29": "20161", - "2620:106:7008::/48": "11795", - "2804:dfc::/32": "263042", - "2a07:a905:ffec::/46": "46261", - "2001:df4:6b00::/48": "136493", - "2409:8e50::/30": "56047", - "2a02:26f7:f6c8::/48": "36183", - "2001:4878:2141::/48": "12222", - "240a:a20b::/32": "143173", - "240a:a858::/32": "144786", - "2604:6600:e900::/40": "201106", - "2607:5d00:5::/46": "53587", - "2801:116::/48": "271827", - "2804:41d8::/32": "267460", - "2a0b:9780::/29": "41847", - "240a:ad2c::/32": "146022", - "2602:fd16:ced::/32": "62611", - "2a02:e183::/36": "33517", - "2a02:e7c0::/29": "50599", - "2001:559:42d::/48": "7015", - "2001:fd8:220b::/35": "4775", - "240a:a92a::/32": "144996", - "2001:559:c090::/48": "20214", - "2409:8948:8e00::/40": "24445", - "2806:2f0:3041::/46": "17072", - "2001:4d78:1900::/40": "15830", - "2602:fdfe::/36": "17177", - "2602:ff4d::/36": "20412", - "2800:550::/46": "7004", - "2804:3f84::/32": "265898", - "2001:559:85bb::/45": "7016", - "2001:67c:27dc::/48": "8426", - "2408:8244::/35": "140726", - "2607:a500:df01::/43": "12025", - "2804:1270:a1::/32": "262851", - "2a01:b740:a01::/48": "714", - "2404:b8c0::/32": "138968", - "240e:4b:4000::/37": "137687", - "2600:140f:5601::/39": "20940", - "2604:a940:1::/48": "54538", - "2607:f358:4::/46": "18779", - "2a02:23b0::/32": "44141", - "2a05:a400::/29": "8492", - "2001:df0:410::/48": "132228", - "240a:a25a::/32": "143252", - "2800:bf0:80e3::/45": "52257", - "2804:c14:4000::/34": "52671", - "2806:36a::/32": "265613", - "2409:8924:6f00::/35": "56046", - "2600:6000:f928::/41": "12271", - "2604:d600:1506::/43": "32098", - "2610:85:3000::/30": "6079", - "2a02:26f7:be80::/48": "36183", - "2a02:26f7:e5c4::/48": "36183", - "2a0f:5707:aaf0::/44": "56876", - "2001:978:2401:1::/36": "174", - "240a:a2b3::/32": "143341", - "240e:328::/32": "17638", - "2600:1007:a110::/36": "22394", - "2600:6c3a:44::/46": "20115", - "2603:c024:4000::/35": "31898", - "2607:fdf0:5e4f::/43": "8008", - "2804:50a0::/32": "268400", - "2a0f:3640::/29": "60262", - "2a10:4f40:1::/48": "28693", - "2402:800:322b::/41": "7552", - "240a:a039::/32": "142707", - "2620:13c:e000::/48": "19382", - "2a0d:4900::/48": "205996", - "2c0f:f050::/32": "327804", - "2001:559:80a8::/48": "7922", - "2804:14c:f42a::/45": "28573", - "2804:3f10:6101::/38": "262566", - "240e:473:9550::/40": "4134", - "2600:6c38:1df::/38": "20115", - "2602:fdcb::/36": "397646", - "2804:1924::/32": "61774", - "2a01:8840:ea::/45": "12041", - "2a02:2e02:8b80::/37": "12479", - "240a:a872::/32": "144812", - "2620:149:923::/40": "714", - "2a01:5b0:3::/48": "8391", - "2a0e:aa06:470::/44": "208618", - "240a:aa8a::/32": "145348", - "2604:8780::/32": "54972", - "2620:11b:4018::/48": "19210", - "2a00:9900::/29": "31252", - "2a02:b50:4000::/43": "30282", - "2001:fd8:2080::/39": "4775", - "2606:5000:3400::/33": "209", - "2a02:fa8:4400::/44": "25751", - "2607:fb20:10::/48": "14230", - "2a00:8740::/47": "49037", - "2001:e60:1000::/33": "4766", - "240a:a48e::/32": "143816", - "2804:d90::/32": "52639", - "2a10:bd80::/29": "212054", - "2001:1548::/38": "8280", - "2409:8053:3100::/37": "9808", - "2c0f:ef00::/32": "327900", - "2a04:4e42:401::/38": "54113", - "2001:559:c240::/48": "7922", - "2402:800:3bee::/43": "7552", - "240a:a1df::/32": "143129", - "2620:fd:8000::/48": "7922", - "2806:2f0:4042::/47": "17072", - "2a02:348:64::/43": "35470", - "2a02:26f0:6300::/48": "34164", - "2406:5ec0::/32": "141014", - "240a:a9c4::/32": "145150", - "2a02:5740:21::/48": "41564", - "2001:559:c06c::/48": "33287", - "2a0e:4980::/32": "15879", - "2001:559:837b::/48": "33652", - "2402:800:b440::/39": "7552", - "240a:a742::/32": "144508", - "2604:5400:8800::/35": "11776", - "240a:af62::/32": "146588", - "2804:7f7:2000::/33": "18881", - "240a:aab6::/32": "145392", - "240a:af4a::/32": "146564", - "2804:4b58::/32": "267299", - "2a00:8140::/35": "60351", - "2001:559:84a4::/48": "7016", - "2804:e94:41::/46": "262468", - "2a0f:5707:ac01::/46": "139589", - "2804:81c4::/32": "272475", - "2001:df2:5380::/48": "48024", - "2402:800:9b01::/44": "7552", - "2407:8440::/32": "135981", - "240a:adb1::/32": "146155", - "240e:947::/36": "139887", - "2620:130:800a::/47": "3356", - "2804:5ccc::/32": "268931", - "2001:559:4aa::/48": "13367", - "2001:559:817a::/47": "33668", - "2604:f500::/47": "16698", - "2804:48e4::/32": "267151", - "2a02:26f7:d644::/48": "36183", - "2600:140f:7401::/38": "20940", - "2804:10a4:4000::/35": "263642", - "2a05:3f00::/29": "201454", - "2a00:7a40::/32": "51945", - "2001:678:894::/48": "209894", - "2602:feda:da0::/44": "142055", - "2602:ff62:20e::/36": "61317", - "2604:6600:2::/45": "40676", - "2607:b580:12::/48": "19754", - "2804:e18::/32": "52544", - "2804:44d8::/32": "267657", - "2a10:7bc0:0:1::/64": "60905", - "2408:8256:2e61::/40": "17623", - "240a:acb6::/32": "145904", - "2804:5b0::/32": "266181", - "2a04:4040::/29": "60610", - "2a0d:a80::/29": "200851", - "2001:559:8406::/48": "7922", - "2404:1ec0::/32": "138511", - "2409:8d7f::/24": "9808", - "240a:a64f::/32": "144265", - "2600:6c38:6c::/43": "20115", - "2606:1000::/32": "20448", - "2804:673c:600::/40": "269615", - "2001:3c8:1702::/34": "4621", - "2001:559:c203::/48": "33667", - "2001:67c:788::/48": "16509", - "2001:67c:2b28::/48": "39489", - "2600:370f:3082::/47": "32261", - "2606:18c0:c::/47": "61317", - "2001:480:254::/39": "668", - "2001:44b8:4048::/48": "7545", - "2408:8856:8200::/28": "17816", - "2408:8956:4200::/40": "17622", - "2600:1011:9010::/39": "6167", - "2804:5958::/32": "268184", - "2a0c:f000::/48": "206976", - "2402:8100:2380::/37": "45271", - "2408:8459:6210::/42": "17623", - "2607:9e80:1201::/40": "397068", - "2620:171:aa::/48": "42", - "2a02:ee80:4272::/32": "3573", - "2a10:7b00::/29": "398559", - "2408:8444:100::/31": "140726", - "240a:acca::/32": "145924", - "2607:8f80::/32": "395470", - "2804:28c4::/32": "263979", - "2a00:7580:10::/48": "8659", - "2a0d:5940::/29": "58212", - "240a:aaca::/32": "145412", - "2606:2800:505b::/48": "14153", - "2806:230:2059::/36": "11888", - "2001:420::/33": "109", - "2804:2014::/32": "264463", - "2a09:da00::/32": "35913", - "2001:df2:b600::/48": "132645", - "2001:1248:5781::/46": "11172", - "2400:cb00:190::/44": "13335", - "2402:800:b620::/41": "7552", - "2a04:3bc0::/29": "34119", - "2a04:c580::/29": "12315", - "2a05:5800::/29": "200924", - "2a02:b48:8900::/30": "39572", - "2402:800:3ee0::/44": "7552", - "2604:6d00:2500::/48": "36223", - "2605:1b80::/32": "26153", - "2a0c:a980::/29": "210198", - "2001:559:c321::/48": "7922", - "2804:5364:2000::/33": "268581", - "2a03:d180:fffe::/48": "13172", - "2400:cb00:a7d0::/46": "13335", - "2403:4c0:8000::/33": "17639", - "2409:8c1f:75c0::/32": "9808", - "2409:8c2f::/34": "56041", - "2804:60::/42": "53066", - "2001:e20::/32": "17435", - "240a:aa01::/32": "145211", - "240a:a7a5::/32": "144607", - "2a01:788:aaac::/48": "34343", - "2a04:4e40:8600::/48": "54113", - "2001:559:30d::/48": "33657", - "2408:8409:1800::/40": "4808", - "2408:8459:2240::/40": "17623", - "2a02:750:11::/45": "42708", - "2a0b:2900:1f00::/40": "48582", - "2a0e:1c80:a::/48": "1299", - "2c0f:f1f0::/32": "328242", - "2001:978:9901::/37": "174", - "2401:bbc0::/32": "133527", - "2408:8459:8450::/38": "17816", - "2a07:c881::/32": "47557", - "240a:ace0::/32": "145946", - "2600:1007:a000::/44": "6167", - "2600:1403:6400::/48": "35994", - "2c0e:220c::/30": "37457", - "2001:559:5cd::/48": "33657", - "2001:678:84::/48": "51955", - "2401:d800:ba0::/41": "7552", - "2402:800:960f::/43": "7552", - "2403:400:600::/36": "23820", - "2404:ab00::/32": "132347", - "2600:380:3200::/33": "20057", - "2804:514:8001::/33": "262490", - "2001:559:72f::/48": "7016", - "2401:a400:5000::/34": "7477", - "2404:3e00:a500::/33": "38758", - "2408:8256:396e::/43": "17623", - "2605:5880::/48": "26167", - "2620:106:7000::/48": "11795", - "2800:160:1f08::/46": "14259", - "2001:559:c29d::/48": "33651", - "2402:800:92c5::/42": "7552", - "2409:8904:a740::/36": "24547", - "240a:a172::/32": "143020", - "2a0e:46c4:2c10::/44": "142289", - "2408:84f3:b040::/38": "17816", - "2804:22a8::/32": "264114", - "2804:482c::/32": "267102", - "2804:6994::/32": "270279", - "2a01:827::/32": "30722", - "2804:3920:4200::/40": "266013", - "2403:71c0:1000::/48": "43959", - "2605:a280:4000::/36": "15008", - "2804:7cd4::/32": "271521", - "2a00:b4a0::/32": "60388", - "2a0e:cc80::/29": "208766", - "2001:559:56e::/48": "7015", - "240e:979:4e00::/40": "134770", - "2600:1fa0:20c0::/44": "8987", - "2606:4880::/32": "26156", - "2a01:9dc0::/32": "11019", - "2a0d:ed80:300::/40": "6830", - "2001:470:69::/43": "6939", - "2001:559:87c7::/48": "7016", - "2404:f4c0:ff06::/48": "139247", - "2408:8256:377f::/48": "17816", - "2a02:26f7:e380::/48": "36183", - "2a02:2e02:39f0::/38": "12479", - "2a04:c940::/29": "25081", - "2804:7804::/32": "271215", - "2001:559:84ba::/48": "7015", - "2001:918:ff75::/48": "3303", - "2409:8a1a::/29": "132525", - "240e:982:3400::/36": "4134", - "2600:805:461::/36": "701", - "2804:6ac::/32": "262601", - "2804:6b58::/32": "270394", - "2001:559:822d::/48": "33652", - "2001:678:56c::/48": "41887", - "2400:9380:9270::/46": "4809", - "2400:ddc0:1001::/34": "4785", - "2409:802f:2b05::/48": "9808", - "2409:8904:8f90::/35": "24547", - "240a:a34d::/32": "143495", - "2001:559:81e6::/48": "7016", - "2001:4218::/32": "16637", - "240e:1:800::/33": "4134", - "2605:3a00::/47": "22768", - "2a01:cde0:c010::/48": "16028", - "2001:14f7:50::/32": "12355", - "2804:103c::/32": "52813", - "2a05:ff80::/29": "8758", - "2a0a:7a00::/29": "61317", - "2001:4e0:1020::/41": "2381", - "2001:67c:430::/48": "51523", - "2001:4b88::/32": "20640", - "240a:a36d::/32": "143527", - "2606:d380::/32": "7829", - "2804:8174::/32": "272455", - "2001:ce0::/47": "3662", - "2402:800:38c5::/43": "7552", - "2402:800:3d2b::/41": "7552", - "2800:160:1afb::/39": "14259", - "2600:1419:d401::/36": "20940", - "2001:559:8302::/48": "33651", - "240a:acae::/32": "145896", - "2620:74:2d::/48": "26415", - "2a01:81e0::/46": "199783", - "2a01:8840:6e::/43": "12041", - "2804:756c::/32": "271045", - "2a02:26f7:d255::/46": "20940", - "2a0c:53c0::/29": "204081", - "2600:1415:1401::/36": "20940", - "2600:1415:d800::/48": "9443", - "2600:6c7f:9022::/48": "20115", - "2604:3d80:200::/40": "11030", - "2804:1778::/32": "263146", - "2804:802c:203::/32": "271734", - "2a00:cc0:3::/44": "13237", - "2402:d000:1075::/33": "9329", - "2405:84c0:fcf5::/48": "211686", - "2408:840d:dd00::/42": "17621", - "2a00:e880::/32": "15557", - "2401:d800:9580::/42": "7552", - "2408:8256:318c::/48": "17816", - "2409:8038:2100::/36": "9808", - "2600:6c38:45e::/39": "20115", - "2801:126::/44": "262589", - "2a02:ee80:4254::/44": "3573", - "2402:800:2100::/35": "7552", - "2402:3d00::/32": "9597", - "2605:e900::/32": "122", - "2a02:6900:8814::/48": "7160", - "2a02:ee80:411e::/42": "3573", - "2001:559:165::/48": "33287", - "2001:559:82e5::/48": "7016", - "2001:1bb0::/32": "8342", - "2001:44b8:105f::/48": "4739", - "2804:49c:4210::/48": "7162", - "2804:1b04:17::/44": "53048", - "2001:67c:28d4::/48": "59467", - "2408:840c:3800::/40": "17621", - "2a02:26f7:2::/48": "36183", - "2a06:8640::/29": "55081", - "2401:ff80:180b::/45": "133954", - "2406:9840:10::/32": "134053", - "2600:140b:9400::/48": "31109", - "2605:3640::/32": "13476", - "2605:a404:962::/40": "33363", - "2800:160:17b4::/44": "14259", - "2a04:4e40:1e00::/48": "54113", - "2402:800:63b1::/41": "7552", - "2600:6c42::/32": "20115", - "2800:381:cccd::/34": "10834", - "2804:14d:68b3::/41": "28573", - "2a00:c0a0::/32": "200154", - "2001:559:84bc::/48": "33657", - "2408:8957:d800::/40": "17622", - "2607:f9a0::/32": "36149", - "2a02:2d8::/47": "9002", - "2001:559:376::/48": "33651", - "2001:559:c2e4::/48": "33287", - "2001:df3:7e00::/48": "135555", - "240a:a0e0::/32": "142874", - "240e:44d:6d00::/41": "140345", - "2600:1403:11::/48": "21342", - "2a03:1aa0::/33": "201730", - "2001:1838:9002::/40": "23352", - "2400:3c00:2::/32": "38258", - "2405:1c0:6283::/39": "55303", - "2804:788::/32": "262300", - "2001:550:5c00:100::/45": "174", - "2405:7f00:92a0::/39": "133414", - "2804:2df4::/32": "265314", - "2a05:fb00::/29": "1257", - "2a0c:1380::/29": "209984", - "2804:518::/32": "262491", - "2a0c:b641:7c0::/44": "206639", - "2a10:b940::/29": "5524", - "2001:6d0:4005::/48": "57503", - "2406:e780::/36": "63679", - "2408:8956:c100::/40": "17816", - "2409:8a50:700::/36": "56047", - "2620:107:90f1::/48": "22787", - "2806:2f0:2423::/48": "17072", - "2600:1406:2201::/37": "20940", - "2804:19c4::/32": "61817", - "2401:8e00:3800::/32": "9260", - "2401:d800:56e0::/39": "7552", - "2409:8062:3900::/28": "9808", - "2a05:b040::/29": "8453", - "2602:fcce:801::/39": "399200", - "2800:5f0:2037::/44": "22724", - "2804:f64::/32": "263583", - "2804:1ac4::/48": "61884", - "2a05:4140:420::/44": "213388", - "2409:8904:4e60::/39": "24547", - "240a:a293::/32": "143309", - "2806:230:100f::/48": "11888", - "2001:67c:15b8::/48": "48345", - "2401:fd80:ff00::/45": "139853", - "2607:f7a8:826::/48": "395749", - "2804:8134::/32": "272439", - "2a00:4900::/32": "12390", - "2a0c:dd41::/32": "197595", - "2001:df7:f300::/48": "138653", - "2401:d800:fdc0::/42": "7552", - "2408:8956:1800::/39": "17622", - "2803:1060::/32": "267809", - "2804:1cd4::/35": "61678", - "2a01:9b80::/32": "12301", - "2a02:26f7:b84c::/48": "36183", - "2a0f:9bc0::/30": "19969", - "2001:1b70:86ae::/48": "158", - "2600:1016:f050::/39": "6167", - "2604:f900::/32": "21779", - "2803:ecc0:3d00::/32": "264814", - "2a02:26f7:c600::/48": "36183", - "2a02:cb80:406a::/45": "43766", - "2a04:4e80:2::/47": "211400", - "2001:8b0::/57": "20712", - "2402:800:5ba9::/41": "7552", - "240a:a31a::/32": "143444", - "2606:65c0:30::/48": "399804", - "2800:1e0:b02::/37": "7195", - "2804:2164::/33": "264552", - "2804:816c::/32": "272453", - "2001:559:5cf::/48": "7015", - "2403:6000:903::/32": "24085", - "2405:2040:234::/34": "48024", - "2a06:f500::/29": "34549", - "2001:dc7::/48": "24406", - "2408:8459:c030::/41": "17622", - "2804:43cc::/35": "267590", - "2804:7654::/32": "271104", - "2a0b:58c0::/29": "42375", - "2a0c:b641:7f7::/44": "213310", - "2804:14d:4c95::/42": "28573", - "2a05:dfc7:8::/48": "200897", - "2402:c800::/40": "38639", - "2620:ba:c000::/48": "6971", - "2804:20b8:300::/35": "264510", - "2001:559:588::/48": "33657", - "2001:dc8::/47": "23902", - "2001:44b8:4042::/47": "4739", - "2607:fd48:d04:2::/34": "13536", - "2a03:4000::/31": "197540", - "240a:ae28::/32": "146274", - "240e:61:2000::/35": "136199", - "2806:230:1013::/48": "11888", - "2a02:26f7:c9c5::/46": "20940", - "2a05:4140:430::/44": "213388", - "2a06:6400::/29": "15576", - "2001:67c:29b8::/48": "48430", - "2404:7180:a000::/48": "23848", - "2a00:f10:ff02::/45": "48635", - "240e:473:6c50::/39": "4134", - "2409:8915:1c00::/39": "56044", - "240c::/48": "45275", - "2804:5d8::/32": "262546", - "2804:5f04::/32": "269071", - "2001:559:c125::/46": "33659", - "2406:e000::/38": "23655", - "2804:359c:6000::/32": "266296", - "2804:77a4::/32": "271190", - "2806:250:d::/46": "28509", - "2a06:5e40:1::/48": "204101", - "2a10:4646:16::/48": "212022", - "2001:67c:1044::/48": "50609", - "2600:100f:a010::/40": "22394", - "2402:93c0::/48": "59073", - "240e:3bc:7600::/39": "140313", - "2602:feb4:250::/44": "25961", - "2804:0:6c01::/32": "2716", - "2804:58b0::/32": "268144", - "2001:1578:200::/40": "12817", - "2408:8456:9410::/42": "134543", - "2801:80:3200::/48": "61572", - "2a02:26f0:b201::/37": "20940", - "2803:5c40::/32": "263796", - "2804:3ec::/32": "61570", - "2a0b:2542::/48": "137256", - "2001:559:841a::/48": "7922", - "2620:52:10::/48": "399140", - "2800:600:212::/37": "52323", - "2001:559:83f4::/48": "7922", - "2600:140f:1e01::/34": "20940", - "2804:61bc::/32": "269253", - "2a0f:280::/29": "57353", - "2001:c20:489b::/45": "3758", - "2406:fb00:1000::/48": "15224", - "2804:29cc::/32": "264035", - "2a0e:8f02:f005::/48": "212983", - "2402:a700::/32": "7575", - "2408:8459:4250::/37": "17816", - "240a:a8dc::/32": "144918", - "2a02:26f7:dfcc::/47": "36183", - "2a02:26f7:f485::/46": "20940", - "2a10:4040::/29": "213300", - "2c0f:f6d8:4004::/47": "3573", - "2001:4457:ff1::/32": "9299", - "2408:805d:1000::/26": "17816", - "240a:aed6::/32": "146448", - "2605:a404:4f::/43": "33363", - "2a01:9700:1100::/43": "8376", - "2a07:f840::/29": "201116", - "240e:978:1100::/37": "4134", - "2600:1417:63::/48": "24319", - "2001:559:8166::/48": "33657", - "2401:3cc0:201::/37": "137409", - "2409:8924:1700::/36": "56046", - "2401:cd81::/48": "63920", - "2401:d800:9980::/42": "7552", - "2408:8956:9200::/40": "17622", - "2800:190::/48": "11664", - "2a02:26f7:6::/48": "36183", - "2600:c0e:3011::/32": "13789", - "2a0a:df00::/29": "201894", - "2804:680:600::/36": "262589", - "2a0f:3000::/29": "12586", - "2001:468:700::/48": "20080", - "2804:1b0:1a84::/37": "18881", - "2001:678:7f8::/48": "200273", - "2620:13a:d000::/36": "395605", - "2001:678:f08::/48": "202325", - "240a:aafb::/32": "145461", - "2a00:16f8:f::/48": "6461", - "2a01:8dc0:109::/48": "29479", - "2a02:e08::/32": "41601", - "2a02:26f7:ca0d::/42": "20940", - "2401:4900:c00::/43": "45609", - "2600:1480:3100::/36": "20940", - "2600:1a0e:1::/37": "46650", - "2804:56cc::/32": "268024", - "2804:6d3c::/32": "270519", - "2a00:11c0:9020::/48": "42473", - "2a03:db80:5460::/48": "200943", - "2a0a:e5c0:14::/48": "207996", - "2001:559:c21c::/48": "13367", - "2001:678:29c::/48": "51143", - "2001:1260:300::/32": "13591", - "2400:7400:e037::/35": "38044", - "2401:ff80:1991::/46": "133954", - "2803:3b80:75::/35": "263702", - "2001:678:e3c::/48": "208169", - "2001:4b20:1000::/64": "65505", - "2600:5c01:319d::/41": "10796", - "2a01:b960:2309::/48": "209485", - "2a07:cf40::/32": "209578", - "2a09:9940::/48": "50007", - "240a:a8bc::/32": "144886", - "240e:438:e20::/43": "140647", - "2600:1010:9010::/39": "22394", - "2602:fd5d:100::/40": "62731", - "2804:51c:7400::/36": "262495", - "2001:503:4872::/48": "7342", - "2001:559:8514::/48": "33491", - "2001:1248:9932::/44": "11172", - "2001:44b8:8::/45": "4739", - "2400:6280:140::/48": "132280", - "2401:d800:f5c0::/38": "7552", - "2001:67c:2700::/48": "43382", - "2001:19d0:700::/32": "2044", - "2a05:7980::/29": "201246", - "2a0c:ce80::/32": "197113", - "240e:438:6e40::/35": "4134", - "2620:130:7004::/47": "27518", - "2a02:20b2::/32": "16278", - "2a0c:a640:20::/48": "42298", - "2a0f:5701:3519::/45": "206499", - "2001:67c:229c::/48": "212002", - "2001:4479::/37": "7545", - "2a00:5740::/32": "56582", - "2a02:26f7:b840::/48": "36183", - "2804:1918:184::/38": "52862", - "2001:4258::/32": "37084", - "240a:a25d::/32": "143255", - "240a:a6bd::/32": "144375", - "240a:a891::/32": "144843", - "240e:982:e300::/40": "134763", - "2605:a404:814::/42": "33363", - "2610:f0:30d7::/32": "22925", - "2a00:1e6b::/29": "42861", - "2a02:17e0::/32": "29164", - "2a04:6000::/29": "50477", - "240a:a700::/32": "144442", - "2607:f3d8::/32": "21513", - "2001:550:220c::/46": "174", - "2001:4878:c257::/48": "12222", - "2606:e600:ffff::/48": "11608", - "2800:160:1b3f::/41": "14259", - "2804:eb0::/32": "262968", - "2a02:26f7:f085::/46": "20940", - "2a02:2af8:405::/44": "702", - "2401:3140::/48": "55482", - "2605:b340::/32": "16713", - "2607:fcd0:fa80:7e01::/55": "8100", - "2001:559:859f::/42": "33659", - "2001:12f0:b0a::/43": "1916", - "2402:800:361d::/42": "7552", - "2604:2d80:6d00::/38": "30036", - "2604:6600:fe7d::/40": "40676", - "2806:2f0:3561::/46": "17072", - "2001:559:c091::/48": "33667", - "2402:800:3401::/44": "7552", - "2409:8904:6670::/40": "24547", - "2a02:610:7502::/32": "2588", - "2804:8:4002::/31": "14840", - "2001:253:121::/48": "142087", - "2001:559:c220::/48": "33667", - "2001:1800::/32": "10381", - "2402:800:5555::/42": "7552", - "2402:800:999b::/42": "7552", - "2409:8729::/27": "9808", - "2602:feb4:e0::/44": "25961", - "2a09:bac0:94::/48": "13335", - "2402:ef03:3::/45": "7633", - "2406:4d00::/48": "4808", - "2602:ff8f:fff::/48": "53274", - "2a02:26f7:d488::/48": "36183", - "2001:df4:d880::/48": "135967", - "2402:5100::/45": "9902", - "2409:8c50::/37": "56047", - "2001:4cf0::/29": "680", - "2408:84f3:f840::/44": "17623", - "240e:3:9000::/33": "4134", - "2604:d600:55f::/42": "32098", - "2605:8600::/32": "26827", - "2607:f110:37::/41": "21889", - "2401:ff80:1b01::/45": "133954", - "2600:140b:9801::/38": "20940", - "2800:160:1310::/45": "14259", - "2806:370:54c0::/43": "28403", - "2a02:e8::/32": "43128", - "2403:8ec0::/32": "134098", - "2604:d600:161c::/42": "32098", - "2607:fdf0:5eb5::/44": "8008", - "2a02:26f7:f5c9::/46": "20940", - "240a:aa83::/32": "145341", - "2600:1407:6800::/48": "35994", - "2800:160:10da::/42": "14259", - "2804:57ac::/32": "268079", - "2a01:7f8::/29": "15925", - "2001:559:47f::/48": "33489", - "2001:559:c334::/48": "33660", - "2408:872b::/38": "4837", - "2600:400:8500::/36": "15147", - "2804:669c::/32": "269571", - "2805:f10:f12::/45": "262182", - "2a00:9b40::/48": "44684", - "2400:89c0:2100::/48": "37936", - "2401:4900:5a30::/41": "45609", - "2401:d800:7cf0::/39": "7552", - "240a:a9f1::/32": "145195", - "2806:2f0:3580::/33": "17072", - "2001:559:87a0::/48": "7922", - "2401:8800:a04::/40": "17439", - "2800:200:b9f0::/37": "12252", - "2804:5aa0::/32": "268785", - "2a02:2b00::/32": "702", - "2603:c0ea::/35": "1218", - "2607:d300::/32": "8059", - "2a03:aa00:1001::/48": "204169", - "2001:678:a80::/48": "56796", - "2401:7200:2102::/48": "55328", - "2403:b100:cd00::/34": "9989", - "2408:84f3:2c40::/44": "17623", - "240a:ae8e::/32": "146376", - "2600:1401:4001::/34": "20940", - "2804:59dc::/32": "268730", - "2a10:2f00:109::/48": "207650", - "2a0c:e040::/39": "200629", - "2001:400:6610::/48": "3380", - "2400:c700:3002::/33": "55644", - "240e:d6:6800::/37": "133775", - "2600:40f1:1::/39": "701", - "2801:80:240::/48": "262511", - "2a04:4e40:1640::/44": "54113", - "2a07:3c80:200::/40": "209322", - "2402:9d80:a20::/41": "131429", - "2404:2280:10d::/48": "24429", - "2600:1008:b1d0::/42": "6167", - "2a02:4560::/46": "60157", - "2a02:45c0:14::/48": "3209", - "2a0f:fc0::/29": "60262", - "2604:d600:156a::/45": "32098", - "2806:2f0:1124::/41": "22884", - "2a03:2880:f15d::/46": "32934", - "2403:6040::/32": "17665", - "2607:f450::/32": "19170", - "2804:5a18::/32": "268748", - "2a01:8840:f7::/48": "207266", - "2001:1248:a566::/43": "11172", - "240a:a971::/32": "145067", - "2600:370f:73a5::/46": "32261", - "2804:5f9c::/32": "269112", - "2a01:9700:1384::/46": "8376", - "2a04:7d82::/32": "44974", - "2408:8459:ee10::/42": "17623", - "2408:870c:3000::/44": "138421", - "240e:980:2100::/40": "4811", - "2600:6c39:409::/39": "20115", - "2804:5a58::/32": "268767", - "2a00:5240::/32": "16331", - "2a01:b740:a20::/48": "6185", - "2a10:e540::/29": "211434", - "2402:7d80:241::/48": "63583", - "2600:1008:b140::/42": "6167", - "2804:50a8::/32": "268402", - "2a03:3a05::/30": "51420", - "240a:a61a::/32": "144212", - "240e:438:8a40::/37": "4134", - "2a04:3f83:4a::/29": "9120", - "2001:16c0:23::/32": "31732", - "2001:4d30::/32": "5555", - "2403:ad80:94::/48": "135309", - "2408:8956:bc00::/40": "17622", - "240a:a3a3::/32": "143581", - "240e:438:4c20::/43": "140647", - "2804:5758::/32": "268060", - "2a04:eb00::/29": "21412", - "2a0d:4300:2::/29": "204920", - "2a04:6680::/48": "198325", - "2a0c:5247:7000::/36": "59504", - "2a0e:68c0:2::/48": "209121", - "2001:559:818a::/48": "7015", - "2401:d800:76a0::/41": "7552", - "2600:9000:222b::/45": "16509", - "2602:ffd1::/45": "29802", - "2803:84c0::/32": "262191", - "2a00:4c40:3000::/32": "197965", - "2a01:540:7000::/32": "12389", - "2001:559:8336::/48": "33657", - "2001:4ba0::/31": "24961", - "2001:4de0:ac10::/46": "20446", - "2804:6af4::/32": "270368", - "2a02:188:5402::/29": "31027", - "2a02:4f00::/32": "44212", - "2a03:d602::/31": "42487", - "2001:500:a7::/48": "55195", - "2001:13b4:4002::/45": "3356", - "2409:8904:6040::/42": "24547", - "2600:9000:2029::/45": "16509", - "2804:7abc:4000::/32": "271389", - "2a03:4f00::/32": "5524", - "2a0b:b87:ffd1::/48": "29802", - "2001:dce:d454::/48": "38064", - "2605:9880:344::/47": "23470", - "2a0c:3000::/32": "34953", - "2a0e:aa07:f09b::/48": "208884", - "2400:cb00:172::/44": "13335", - "2001:49f0:d0dc::/42": "174", - "2401:4900:4dd0::/38": "45609", - "2402:7500:5ff::/38": "24158", - "2407:9e00::/48": "23888", - "2600:1408:7000::/48": "35994", - "2a02:26f7:efc4::/48": "36183", - "2605:8940::/32": "393398", - "2a0d:99c0::/29": "40970", - "2405:f3c0::/44": "140500", - "2408:8459:1a10::/42": "17623", - "2001:579:824::/40": "22773", - "240a:a413::/32": "143693", - "240e:c:7800::/31": "4134", - "2604:9d00::/32": "36489", - "2a09:6380::/32": "51269", - "2a0c:efc0:4::/36": "206356", - "2001:ee0:9740::/36": "45899", - "2406:1400:c100::/48": "24342", - "2607:f1e0:5200::/32": "19092", - "2804:14c:8300::/40": "28573", - "2001:559:8495::/48": "22909", - "2001:f10::/32": "17709", - "2600:1407:9001::/37": "20940", - "2804:204:306::/44": "28186", - "2400:380:9::/48": "4766", - "2401:1801:821::/32": "58683", - "2402:9900:c11::/48": "27435", - "2408:80ea:7580::/43": "17623", - "2604:5cc0::/35": "13351", - "2001:559:382::/47": "7725", - "2001:67c:1434::/48": "29560", - "2001:7f8:6b::/48": "58307", - "2607:fba8::/32": "7029", - "2803:de40::/32": "27879", - "2a0b:1740::/29": "42202", - "2a0e:b105:404::/46": "20473", - "2401:4900:4530::/46": "45609", - "2404:c8:3::/32": "10217", - "2404:a500:7::/48": "45854", - "2605:79c0::/32": "26801", - "2804:4a28::/32": "53194", - "2804:5d4c::/32": "268963", - "2409:805f:100::/36": "9808", - "2804:3700::/32": "262312", - "2a02:2170::/32": "41480", - "2a02:db80::/29": "48720", - "2a0f:f580::/29": "60262", - "240a:a052::/32": "142732", - "240a:ae94::/32": "146382", - "2001:559:25d::/48": "7922", - "2001:18e8:500::/38": "19782", - "2a02:26f7:eb04::/48": "36183", - "2c0f:e938::/32": "328714", - "2804:7534::/32": "271031", - "2a02:2e02:8c50::/40": "12479", - "2a03:90c0:9994::/44": "199524", - "2402:fbc0::/44": "134014", - "2804:14d:4c91::/45": "28573", - "2a04:6600::/29": "33856", - "2a04:f580:9280::/48": "4809", - "2a09:f9c0::/29": "61048", - "2602:805::/44": "53809", - "2602:ff96:1fe::/48": "40676", - "2803:1860::/32": "267823", - "2a0c:b641:2c0::/44": "212510", - "2a0f:3680::/32": "211476", - "2604:ee00:7::/48": "18865", - "2a0c:1a00::/32": "205389", - "2a06:7bc0::/29": "34373", - "2001:559:c36c::/48": "33651", - "2001:67c:6fc::/48": "29551", - "2001:67c:7fc::/48": "201460", - "2001:df3:2680::/48": "134351", - "2403:8600:e080::/43": "45820", - "2607:6480:8000::/35": "54112", - "2a06:7243:1e::/47": "202365", - "2001:559:48c::/48": "22909", - "2402:800:9efe::/39": "7552", - "2620:109::/43": "10753", - "2804:1c8::/32": "53184", - "2a02:582:7400::/29": "6799", - "2a0c:4187:8002::/33": "29854", - "2409:8e10::/30": "9808", - "240a:a66d::/32": "144295", - "2804:14d:8099::/41": "28573", - "2c0e:40:501::/23": "24863", - "2001:a60::/29": "8767", - "2001:4c08:2027::/32": "3356", - "2001:4cc0::/32": "8426", - "2605:7900:10::/47": "19133", - "2800:6a0::/32": "27932", - "2a06:6f00::/29": "197164", - "2a0c:a480::/29": "47777", - "2001:a90::/32": "21119", - "2401:d800:2ca0::/41": "7552", - "240a:a877::/32": "144817", - "2620:135:7001::/48": "7029", - "2804:4000::/32": "265927", - "2a04:b040::/46": "43350", - "2800:160:1656::/47": "14259", - "2804:3828::/32": "266460", - "2804:608c::/32": "269174", - "2a0f:74c0::/29": "207572", - "2600:1418:2001::/33": "20940", - "2604:4a80::/32": "54665", - "2804:2c30::/32": "265201", - "2409:4061:3000::/30": "55836", - "240a:a173::/32": "143021", - "2607:fb90:8e00::/35": "21928", - "2a04:c1::/30": "47123", - "2001:559:8108::/48": "33491", - "2620:9f:c000::/48": "6109", - "2804:1288:f99a::/37": "263482", - "2804:802c:130::/38": "271734", - "2806:230:2022::/48": "265594", - "2602:fca7:1::/46": "399318", - "2801:80:280::/48": "28631", - "2804:e30:409::/43": "11338", - "2803:1840::/32": "265688", - "2804:505c::/32": "268384", - "2a00:10d8::/31": "42005", - "2a05:7640:2090::/44": "174", - "240a:a54e::/32": "144008", - "2606:6c00:4000::/48": "32787", - "2804:7a94::/34": "271380", - "2a00:8a40::/32": "28978", - "2a07:1980:a::/45": "48851", - "2001:678:b0::/46": "6736", - "2602:fcc3::/48": "399135", - "2620:11c:3000::/40": "31764", - "2a00:ff0:fffe::/48": "25409", - "2a02:26f7:c045::/46": "20940", - "2a03:1a20::/48": "207467", - "2a10:92c0::/29": "211786", - "2001:550:8901:2::/37": "174", - "2408:8456:9c40::/38": "17816", - "2804:7db0::/32": "271576", - "2a01:c50f:91c0::/36": "12479", - "2001:678:38::/48": "48283", - "2401:4900:4538::/45": "45609", - "2409:8080:2a30::/41": "9808", - "2607:f1d8:d2::/32": "7795", - "2a06:bdc0:1a40::/29": "62240", - "2400:cb00:348::/47": "132892", - "2409:8d6b::/27": "9808", - "2401:d800:fca0::/41": "7552", - "240e:473:9800::/41": "140485", - "2a02:26f7:cb40::/48": "36183", - "2a02:26f7:dac5::/46": "20940", - "2a05:bec0::/42": "197071", - "2a06:a006:c5::/48": "40676", - "2001:1248:8809::/46": "11172", - "2400:cb00:a4c0::/47": "13335", - "240e:86:8000::/36": "17799", - "2803:be20::/32": "52444", - "2a0d:5085:1::/30": "62240", - "2605:1080:14::/47": "23367", - "2607:fdf8:400::/32": "13649", - "2a00:c020:4000::/36": "199551", - "2a10:e080::/32": "20473", - "2001:559:853e::/48": "7922", - "2001:678:384::/48": "207207", - "2406:c40::/32": "140602", - "2801:0:310::/48": "262238", - "2001:df6:4f00::/48": "136167", - "240a:ab29::/32": "145507", - "2804:71c4::/32": "270810", - "2a02:6900:881c::/48": "43894", - "2a05:9281::/32": "61385", - "2001:470:13e::/48": "14979", - "240e:e:d800::/31": "4134", - "2604:d600:15ee::/43": "32098", - "2800:160:1c58::/42": "14259", - "2001:4888:1a::/47": "22394", - "240e:979:3e00::/40": "134770", - "2610:b0:40ee::/47": "21433", - "2620:aa:c000::/48": "15304", - "2400:8b00:f00::/42": "45727", - "2401:d800:fbf0::/37": "7552", - "2404:b300:23::/48": "59318", - "2804:7060::/32": "270723", - "2a02:2e02:570::/40": "12479", - "2a03:5680::/32": "15495", - "2001:67c:2524::/48": "20626", - "2001:918:f00::/40": "8300", - "2620:f7:4000::/48": "2828", - "2001:15f0::/32": "213211", - "2001:44b8:204f::/48": "4739", - "2401:4900:5000::/44": "64610", - "240a:a785::/32": "144575", - "2001:4f8:c::/43": "1280", - "2407:1e00::/35": "45158", - "2408:8606::/28": "4808", - "2a02:26f7:e388::/48": "36183", - "2a02:ac80:b001::/33": "25145", - "2001:559:825f::/48": "33657", - "2a01:5ae0::/32": "12703", - "2a02:ee80:40c0::/47": "21433", - "2403:2140::/32": "9751", - "2403:2500:8000::/48": "36236", - "2406:2000:98::/48": "38032", - "240a:ad2e::/32": "146024", - "2620:132:e000::/48": "41690", - "2804:67f4::/32": "269661", - "2001:678:f74::/48": "213027", - "2401:d800:72e0::/39": "7552", - "2404:7c00::/47": "45650", - "2408:8245::/35": "140726", - "2a0b:b87:ffea::/48": "201331", - "2600:80c:200::/36": "11486", - "2602:fdb0::/36": "21853", - "2a01:6320::/32": "197580", - "2a02:e220::/30": "61094", - "2401:d800:7420::/41": "7552", - "2408:8256:3175::/48": "17623", - "240a:a681::/32": "144315", - "2804:5238::/32": "268503", - "2a02:ac80:4001::/35": "25145", - "2001:978:6000:1::/37": "174", - "2401:7500:fff4::/47": "133296", - "2406:840:f900::/48": "139833", - "2605:6f40::/32": "207976", - "2001:67c:750::/48": "206170", - "2402:3580:8011::/48": "134118", - "2406:6cc0:a200::/48": "4622", - "2a01:c50e:1900::/37": "12479", - "2001:559:85e7::/48": "33659", - "2001:e60:d8b0::/45": "4766", - "2604:9b00:4800::/38": "14230", - "2806:2f0:94c0::/39": "17072", - "2a06:8280::/43": "51786", - "2001:1248:5f3f::/41": "11172", - "2603:b0a3::/28": "11796", - "2a05:52a0::/30": "201401", - "2a05:aec0::/29": "201026", - "240e:966:ec00::/31": "4134", - "2001:468:d00::/48": "4600", - "2001:559:5b7::/48": "33657", - "2404:7900::/32": "131160", - "2a02:2788::/36": "12392", - "2001:559:81b9::/48": "7015", - "2001:67c:2950::/48": "3303", - "2402:9900:111::/48": "27435", - "2607:fdf0:5e5a::/47": "8008", - "2800:160:16dd::/46": "14259", - "2a00:11c0:d::/42": "42473", - "2a04:4e40:c800::/48": "54113", - "2001:504:35::/48": "14432", - "2600:6000:fd53::/48": "11351", - "2804:57fc::/32": "268099", - "2a00:1c30::/32": "12659", - "2a01:7d20:a00::/40": "203645", - "2407:1300::/32": "132850", - "2804:bb4::/32": "52812", - "2804:51d0::/32": "268479", - "2a03:f280::/29": "42306", - "2001:4478:ff01::/48": "4739", - "2401:ff80:1585::/44": "133954", - "2600:1015:b130::/41": "6167", - "2a02:26f7:f448::/48": "36183", - "2a02:2e02:15c0::/38": "12479", - "2a04:b647::/32": "28979", - "2001:559:14e::/48": "7016", - "2001:16e0::/29": "12611", - "2a04:8900::/29": "38938", - "2001:67c:15b0::/48": "3257", - "2001:4d70::/32": "201210", - "2401:4300:1::/45": "45184", - "2600:1406:5801::/34": "20940", - "2a01:c50f:3180::/42": "5511", - "2001:559:47d::/48": "33491", - "2404:8500::/32": "55470", - "2800:310:3::/43": "18678", - "2a01:b960:2307::/48": "210266", - "2620:74:a9::/45": "7342", - "2001:3c8:1601::/48": "38589", - "2001:559:c138::/48": "33651", - "2401:ff80:1c11::/46": "133954", - "2404:b300:400::/48": "131207", - "2408:8957:ef40::/40": "17816", - "2600:9000:200f::/42": "16509", - "2607:f4b8::/32": "22438", - "2a09:b0c0::/32": "9063", - "2001:4178::/29": "15456", - "240a:a6ab::/32": "144357", - "2604:f640::/32": "19584", - "2a01:1101:6::/28": "5617", - "2001:1a11:10a::/48": "8781", - "2401:c5c0:4::/41": "55492", - "2407:be40::/32": "135717", - "2408:8459:850::/38": "17816", - "2409:8914:6800::/39": "56044", - "240a:a9db::/32": "145173", - "2001:559:c26b::/48": "33659", - "2402:800:7120::/41": "7552", - "240a:ad99::/32": "146131", - "2800:160:168d::/42": "14259", - "2804:219c::/32": "264564", - "2a02:26f7:d5c5::/46": "20940", - "2804:14d:5cf0::/44": "28573", - "2804:7604::/34": "271084", - "2a00:47c0:611::/48": "27435", - "2001:468:301::/41": "11537", - "2001:1388:8a45::/48": "6147", - "2404:c300::/32": "4859", - "240a:ad85::/32": "146111", - "2620:10a:9033::/48": "11133", - "2804:52f4::/36": "268552", - "2804:6fcc::/32": "270685", - "2001:67c:291c::/48": "211935", - "2607:fda8:8005::/46": "6128", - "2a02:26f7:d8c8::/48": "36183", - "2001:67c:2ad8::/48": "198611", - "2001:44b8:30c3::/48": "4739", - "2400:4ec0::/32": "64300", - "240a:a190::/32": "143050", - "2804:2974::/32": "264016", - "2a05:4b80::/29": "59395", - "2c0f:ec40::/35": "327936", - "2400:7700::/32": "56214", - "2401:d800:f9e0::/38": "7552", - "2406:ce00::/29": "9370", - "2a07:8c40::/47": "202810", - "2001:559:c1bd::/48": "7725", - "2a02:f78::/32": "42927", - "2001:559:710::/48": "33657", - "2605:4b00::/32": "33203", - "2607:f220:300::/44": "22828", - "2804:6750::/32": "52648", - "2804:76cc::/35": "271135", - "2a00:5760::/32": "61012", - "2a00:5e80::/32": "15557", - "2a01:c50e:d300::/36": "12479", - "2a04:5200:69::/33": "50113", - "2001:559:517::/48": "7016", - "2001:df7:cc00::/48": "135905", - "2620:114:5073::/40": "1638", - "2402:5c80::/32": "132296", - "2409:8b03::/32": "9808", - "2001:559:fc::/47": "7922", - "2001:559:77b::/48": "20214", - "2804:7c7c::/36": "271499", - "2a02:638::/32": "34803", - "240a:a22d::/32": "143207", - "2803:9ba0::/32": "263750", - "2a03:8900::/32": "1197", - "2a06:6940::/29": "20559", - "2a0c:9a40:c000::/47": "209022", - "2a10:30c0::/30": "208256", - "2a02:6160::/32": "47272", - "2001:579:40ff::/39": "22773", - "2001:a38::/32": "20633", - "2408:8456:b010::/42": "134543", - "2607:fad0:1000::/34": "32244", - "2607:fc48:c18::/48": "40009", - "2804:4afc:c000::/35": "267276", - "2a00:b160::/32": "47586", - "2a03:7a00::/32": "42908", - "2400:fc00:4030::/41": "45773", - "2604:8880::/32": "8304", - "2606:5580::/47": "63242", - "2610:b0:40d8::/47": "21433", - "2001:5a0:5202::/32": "6453", - "2001:6b0:5::/32": "1653", - "2001:4b22::/64": "65505", - "2400:1240::/32": "64098", - "2409:8087:6100::/38": "9808", - "2800:bf0:8085::/44": "27947", - "2a01:6780:7::/48": "8426", - "2408:8406:3c00::/39": "4808", - "240a:a087::/32": "142785", - "2620:102:b001::/48": "7195", - "240a:a799::/32": "144595", - "240a:aad1::/32": "145419", - "2801:18c:10::/32": "28637", - "2a02:ac80:b1::/41": "25145", - "2605:1800::/32": "16863", - "2806:211:40::/48": "28539", - "2a01:6200::/32": "16095", - "2001:6d9::/29": "8323", - "2401:d800:3000::/33": "7552", - "2600:1405:b001::/33": "20940", - "2800:bf0:8090::/45": "52257", - "2001:418:1401:9::/64": "20940", - "2604:e8c0:1::/45": "62805", - "2a00:ef60::/32": "12826", - "2001:67c:22fc::/48": "56848", - "2605:3380:1000::/36": "62947", - "2804:704c::/32": "270718", - "2a02:2e02:f60::/40": "12479", - "2a03:17e0::/32": "15623", - "2a07:5480::/29": "203034", - "2a0e:a680::/48": "8767", - "2001:dc8:3000::/48": "23962", - "2801:80:510::/48": "52652", - "2804:5770::/32": "268065", - "2804:80a4::/32": "271764", - "2a06:f901::/36": "56630", - "2a0c:3800:400::/48": "202410", - "2401:d800:b360::/40": "7552", - "2409:8b34:aa00::/33": "9808", - "240a:ade6::/32": "146208", - "2620:146:d::/48": "16500", - "2001:559:d3::/48": "7015", - "2620:11d:60c0::/46": "30548", - "2806:230:6012::/48": "265594", - "2001:559:c345::/48": "7922", - "240a:aa44::/32": "145278", - "2401:32c0::/32": "136176", - "2408:80c5::/33": "4837", - "2408:8957:4b00::/40": "17816", - "240a:a9c3::/32": "145149", - "2605:a404:32f::/41": "33363", - "2804:47a4:500::/32": "267067", - "2804:4c14:eb01::/35": "267348", - "2404:a800:3001::/48": "9498", - "240e:438:6c40::/38": "4134", - "2801:15:a800::/48": "19429", - "2a01:8a60:200::/32": "60191", - "2001:502:8cc::/48": "397197", - "2408:8256:3491::/46": "17816", - "2800:190:4005::/32": "11664", - "2600:100a:b1e0::/33": "22394", - "2607:b680::/32": "174", - "2001:67c:28d0::/48": "212415", - "2401:d800:f860::/40": "7552", - "2804:3d84::/32": "266536", - "2804:6e48::/32": "270586", - "240e:720::/32": "140061", - "2001:67c:201c::/48": "200577", - "2404:8680:1000::/36": "135161", - "240a:a593::/32": "144077", - "2620:171:d0::/48": "715", - "2a02:cb43:4007::/48": "20546", - "2001:559:c0ec::/48": "7016", - "2001:41d0:fc00::/38": "35540", - "2001:4479:f000::/39": "7545", - "240e:63:8000::/34": "140316", - "2a00:1520::/32": "51815", - "2001:678:560::/48": "49225", - "2401:d800:7b10::/42": "7552", - "2a09:e240:1::/48": "35133", - "2a0d:1a43::/32": "208590", - "2001:579:8c4::/43": "22773", - "2001:678:c70::/48": "47937", - "2001:1291:20fa::/32": "16735", - "2001:4de8::/32": "29208", - "2620:57:4004::/44": "62831", - "2804:2a3c::/32": "264066", - "2a02:26f7:e6c5::/46": "20940", - "2a0e:b105:680::/46": "20473", - "2600:1007:f006::/47": "22394", - "2600:1415:1801::/37": "20940", - "2603:c002:9210::/39": "31898", - "2604:d600:92a::/37": "32098", - "2620:115:6::/41": "18888", - "2a02:2188:2000::/36": "60848", - "2a02:26f7:fac4::/48": "36183", - "2804:25b4::/32": "264297", - "2a09:2900::/48": "212710", - "2403:6d00:2000::/32": "56094", - "240a:a24e::/32": "143240", - "2a01:4520::/32": "25459", - "2a02:26f7:ef01::/46": "20940", - "2001:559:c0b7::/48": "33287", - "2405:7000:500::/34": "9354", - "240a:a937::/32": "145009", - "2804:67b8::/32": "269646", - "2a02:26f7:f6cc::/48": "36183", - "240a:ae6b::/32": "146341", - "2001:468::/40": "11537", - "2001:559:806d::/48": "33287", - "240e:968:3000::/30": "4134", - "2806:286:9000::/34": "265524", - "2a05:3343:d::/42": "36351", - "240e:473:a920::/41": "140486", - "2600:141b:d::/43": "20940", - "2602:feda:d70::/44": "138435", - "2605:9740::/32": "398052", - "2001:559:8517::/48": "33491", - "2402:4200:1100::/48": "24284", - "2404:bf40:a142::/40": "139084", - "2405:1c0:7911::/45": "135062", - "2605:6080::/32": "62833", - "2806:2f0:3284::/42": "17072", - "2402:800:55e0::/44": "7552", - "2804:6ab8::/32": "270355", - "2a0d:7440:22::/48": "64474", - "2001:468:c80::/48": "1312", - "2001:720::/32": "766", - "2402:7d80:6667::/35": "63582", - "2403:1300:3000::/32": "56286", - "240e:44d:6680::/41": "4134", - "240e:b18::/26": "4134", - "2804:40:6000::/36": "28657", - "2001:4998:14::/48": "14777", - "2607:6980:e000::/44": "36351", - "2a05:3343:4::/46": "134433", - "2606:8e80:800::/37": "32133", - "2620:0:2810::/48": "14607", - "2a0c:b642:4000::/36": "39421", - "2408:8456:1f00::/42": "17622", - "2600:1413:4001::/34": "20940", - "2607:f670:111::/32": "10587", - "2a02:26f7:c5c1::/46": "20940", - "2a0e:a600::/29": "209050", - "2001:978:7402::/38": "174", - "2401:d800:7ab0::/41": "7552", - "2408:8256:2c61::/40": "17623", - "2600:6c38:84b::/43": "20115", - "2607:4d00:4000::/35": "33260", - "2806:230:1019::/48": "11888", - "2a0c:9a40:1019::/45": "202479", - "240e:18:10::/47": "4811", - "2804:14c:f431::/40": "28573", - "2804:3138:c000::/35": "265000", - "2804:63e4::/32": "269390", - "240a:a57a::/32": "144052", - "2603:c0e0:2910::/40": "54253", - "2804:d7c:200::/35": "52634", - "2a00:12f8:410::/32": "9198", - "2400:adc0:4311::/48": "9541", - "240a:a069::/32": "142755", - "240a:a441::/32": "143739", - "2603:c012:8000::/36": "31898", - "2800:e03:c000::/28": "27665", - "2a02:4d40::/32": "25394", - "2a02:60a0::/32": "8793", - "2a0f:6580:104::/48": "200334", - "2600:1405:5001::/37": "20940", - "2803:c610::/32": "271941", - "2a02:26f7:1::/48": "20940", - "2408:8256:2f97::/44": "17623", - "240a:71:8000::/35": "2497", - "2600:1003:b030::/40": "22394", - "2804:5a0c::/32": "268742", - "2a00:1808::/32": "196843", - "2001:678:d18::/48": "213343", - "2600:370f:7024::/46": "32261", - "2620:2b:e000::/48": "22697", - "2a01:358::/35": "9121", - "2c0f:fcb8::/32": "37323", - "2001:559:20a::/48": "33660", - "2001:67c:25b0::/48": "29105", - "2001:16d8:ed00::/38": "16150", - "2a06:8040::/29": "41332", - "2001:559:8397::/48": "7015", - "2001:ce0:2800::/40": "7651", - "2402:2500::/45": "13445", - "2408:8957:8c00::/40": "17622", - "2604:5500:e800::/38": "19165", - "2607:f248::/32": "12009", - "2806:2f0:61e1::/43": "17072", - "2600:1408:2001::/36": "20940", - "2800:160:1353::/45": "14259", - "2a02:2e02:1ee0::/39": "12479", - "2001:fd8:18c0::/37": "4775", - "2400:ed00:1::/48": "7595", - "240e:c2:1800::/37": "63835", - "2603:c0e8:1000::/38": "1218", - "2620:10b:7000::/46": "11483", - "2800:bf0:2c6::/35": "27947", - "2804:43f0::/32": "267600", - "2a0a:fa40::/29": "210107", - "2001:678:394::/48": "8995", - "2001:678:e60::/48": "212596", - "240a:a182::/32": "143036", - "240a:a821::/32": "144731", - "2804:1a04:8000::/33": "61832", - "2804:2cac:1112::/32": "265234", - "2a02:26f0:9701::/36": "20940", - "2001:6f8:1903::/48": "3257", - "2403:9140:2::/45": "18101", - "240a:a997::/32": "145105", - "2a0d:40::/29": "39204", - "2401:8e00:801::/34": "9260", - "2404:1a0:2009::/43": "24334", - "2804:5554::/32": "262405", - "2a02:ac87:ac88::/33": "25145", - "2a0c:8f40::/29": "199216", - "240a:a3ab::/32": "143589", - "2604:f940:7::/32": "397134", - "2803:6700:220::/48": "263210", - "2001:559:37e::/48": "33651", - "2001:df1:6001::/48": "4755", - "2400:9bc0::/46": "55313", - "2404:ec:340::/37": "703", - "2c0f:fe38:8::/34": "33771", - "2001:559:26::/48": "33491", - "240a:a966::/32": "145056", - "2605:4a00:310::/44": "14361", - "2804:69d0::/32": "270293", - "2a00:1b40::/32": "47777", - "2a02:26f7:cfc5::/46": "20940", - "2001:559:98::/48": "33652", - "240a:a405::/32": "143679", - "2804:1440::/32": "263321", - "2a00:7940::/32": "20847", - "2a0c:9a40:1091::/46": "34927", - "2402:800:53c5::/43": "7552", - "2a03:49c0::/32": "58081", - "2607:f3f8:8001::/33": "19019", - "2806:230:3026::/48": "265594", - "2001:2092::/32": "3308", - "2404:4600:6::/48": "38099", - "2602:fd7d:200::/36": "16925", - "2804:c28::/32": "262983", - "2606:c280::/32": "394968", - "2c0f:ef28::/32": "328333", - "2001:559:473::/48": "33659", - "2406:9a00::/32": "17649", - "2a03:a960::/47": "61317", - "240a:a93e::/32": "145016", - "2803:8240:db::/32": "52511", - "2a02:26f7:f4c0::/48": "36183", - "240e:640:cf00::/34": "4134", - "240e:982:e100::/40": "134764", - "2606:2680:b000::/48": "7138", - "2001:448a:10b0::/41": "7713", - "2a02:e980:30::/40": "19551", - "2001:67c:2dd8::/48": "43351", - "2001:4300::/32": "31065", - "2409:8915:5c00::/39": "56044", - "240e:940:ce00::/40": "136197", - "240e:965:ea00::/39": "133776", - "2800:160:226e::/47": "14259", - "2001:559:c3f3::/48": "33287", - "2405:1c0:6a81::/48": "135062", - "240a:aa8e::/32": "145352", - "2804:694:4500::/36": "262596", - "2001:550:2801::/48": "63199", - "2001:559:8001::/48": "26868", - "240a:aefb::/32": "146485", - "2804:c90:601::/33": "28198", - "2804:3b38::/32": "266136", - "2a02:26f7:f6d9::/46": "20940", - "2a0c:9a40:8089::/48": "202297", - "2001:559:c293::/48": "7015", - "2a04:ee00::/29": "56724", - "2a10:5c0::/29": "201299", - "2600:1010:ff10::/40": "22394", - "2804:14c:f2::/37": "28573", - "2a02:26f7:e209::/42": "20940", - "2a04:ac00:4::/48": "201848", - "2a09:6980::/29": "56598", - "2a09:8280:50::/42": "40509", - "2a0e:1200::/29": "209112", - "2400:3dc0:401::/39": "134371", - "240a:a5b3::/32": "144109", - "2620:12d:400e::/47": "53988", - "2a02:9b0:a::/43": "35819", - "2001:4878:204::/48": "12222", - "2804:61e8::/32": "269264", - "2804:6254::/32": "269290", - "2a02:26f7:be88::/48": "36183", - "2001:44b8:30a0::/46": "7545", - "2804:6938::/32": "270256", - "2a0f:8340::/29": "29608", - "2a09:2500::/48": "206576", - "2001:559:277::/48": "7016", - "2001:648:2cf0::/38": "5408", - "2402:cf80:1001::/46": "395403", - "2605:5f80::/32": "62900", - "2605:f700:80::/44": "18978", - "2804:12e8::/32": "53082", - "2806:230:5012::/48": "265594", - "2001:559:8669::/48": "33491", - "2402:800:94a9::/43": "7552", - "2404:59c0::/34": "58507", - "2606:ae00:8000::/38": "7287", - "2800:160:1c02::/45": "14259", - "2602:809:8000::/44": "397919", - "2604:d600:103f::/41": "32098", - "2605:f700:40::/46": "18978", - "2620:109:a000::/45": "15294", - "2001:13f0::/32": "28118", - "240a:a5fc::/32": "144182", - "2803:c010:10::/46": "271799", - "2a02:26f7:c746::/47": "20940", - "2a06:c5c0:700::/48": "44709", - "2001:550:9101::/38": "174", - "2402:23c0::/32": "137210", - "2408:8456:4e40::/39": "17816", - "2600:6:ff89::/42": "1239", - "2a03:7580::/34": "28785", - "2606:5e00:f000::/36": "14576", - "2a03:6e60:1::/48": "47720", - "2001:678:80c::/48": "29560", - "2407:c3c0::/32": "142454", - "2408:8957:28c0::/38": "17816", - "240e:5f:6004::/44": "4134", - "2a03:d6c0::/32": "199370", - "2001:559:5b2::/48": "33287", - "2001:559:8391::/48": "33667", - "2405:84c0:ff13::/48": "9886", - "2800:310:2::/48": "262589", - "2804:218:7003::/32": "27715", - "2806:310:2e::/43": "16960", - "2a02:98:d51::/48": "8468", - "2a05:d050:4080::/44": "16509", - "2001:1248:8461::/44": "11172", - "2001:44b8:2045::/48": "4739", - "2001:5014:400:4::/64": "6461", - "2a02:26f7:cf0a::/42": "20940", - "2001:460:90::/46": "7991", - "2001:559:c3c1::/48": "33659", - "2001:b10:6000::/35": "16283", - "240a:a11b::/32": "142933", - "240a:a274::/32": "143278", - "2a02:26f7:ec88::/48": "36183", - "2001:468:100::/40": "11317", - "2408:8957:1b40::/40": "17816", - "2804:6ef4::/32": "270629", - "2001:df0:7::/48": "8075", - "2801:1fc:1a::/48": "27951", - "2804:7f14::/32": "271665", - "2a03:3e80::/32": "50372", - "2a0e:a380::/29": "207902", - "2a09:8680::/29": "38946", - "2402:68c0:a000::/36": "137432", - "2405:1c0:6335::/41": "55303", - "2604:dc00:7409::/41": "19752", - "2605:9cc0:302::/48": "14618", - "2804:cc8::/32": "52554", - "2a02:26f7:e7c0::/48": "36183", - "2a02:26f7:edc8::/48": "36183", - "2001:67c:7b0::/48": "57287", - "2804:301:1000::/36": "53237", - "2a02:2218::/29": "41157", - "2a05:7180::/29": "35684", - "2a0e:fb46::/32": "51837", - "240a:a9a8::/32": "145122", - "2804:7b08::/32": "271407", - "2a04:a802:102::/32": "3549", - "2a01:250:f000::/36": "34511", - "2001:67c:2f80::/48": "42251", - "240a:a922::/32": "144988", - "240a:aa73::/32": "145325", - "240a:af14::/32": "146510", - "2600:1403:9c01::/34": "20940", - "2604:f540::/32": "36435", - "2605:5080:5011::/42": "3367", - "2402:2c80::/32": "134090", - "240a:a1aa::/32": "143076", - "240a:a81d::/32": "144727", - "2602:fc7a::/36": "399612", - "2607:fda8:1015::/46": "6128", - "2a03:c980:e5::/48": "210079", - "2001:1838:1009::/46": "23352", - "2405:1700::/32": "132395", - "240e:fe::/35": "140317", - "2600:c0a::/32": "12180", - "2800:40:32::/47": "16814", - "2804:4368:500::/32": "267568", - "2a07:600::/29": "13030", - "2001:6d0:6d0::/48": "43832", - "2001:df0:cd80::/48": "139279", - "2800:4f0:50::/40": "28006", - "2a0a:de00::/32": "8758", - "2001:1450::/32": "5602", - "2405:a480::/32": "63981", - "2408:861a::/31": "4837", - "2804:7f08::/44": "271662", - "2001:559:250::/46": "33652", - "2607:fdf0:5e5c::/42": "8008", - "2001:559:fa::/47": "33660", - "2607:1380::/47": "6576", - "2804:3e50::/39": "266587", - "2a05:dac0::/46": "44166", - "2001:4c70::/32": "28678", - "2400:e3c0::/32": "45267", - "2404:8d00:1020::/37": "24378", - "2804:2204::/32": "264586", - "2804:3e04::/35": "266568", - "2a02:26f7:fac1::/46": "20940", - "2001:559:5b3::/48": "13367", - "2001:1248:84e4::/44": "11172", - "240e:44d:3780::/41": "4134", - "2602:feda:f4::/48": "38023", - "2602:ffe4:c4b::/48": "21859", - "2806:230:2002::/48": "265594", - "2001:798::/32": "20965", - "2402:9c00::/32": "9676", - "2402:ab40::/35": "137541", - "2a00:8a80::/29": "29119", - "2a02:26f7:c585::/46": "20940", - "2a0d:1080:1::/48": "47215", - "2600:380:f880::/39": "20057", - "2a01:7440::/32": "12739", - "2a02:298::/32": "6908", - "2001:d98:e000:8::/35": "18106", - "2803:7be0::/32": "270093", - "2a0f:b4c7::/32": "47596", - "2a0f:f240::/32": "13282", - "2001:3c8:1202::/48": "4762", - "2001:550:102::/48": "16409", - "2405:1c0:6681::/46": "135062", - "240e:108:89::/48": "4134", - "2605:9780:1800::/40": "36180", - "2a00:6060:ee38::/35": "60983", - "2001:559:300::/48": "33659", - "2406:7340::/32": "132566", - "2606:2400:1002::/48": "16896", - "2804:4644::/32": "266979", - "2a01:6a8::/32": "34554", - "2607:f7a8:163d::/48": "46887", - "2620:a8::/48": "237", - "2600:1408:2c00::/48": "35994", - "2804:1c1c:3001::/33": "61638", - "2804:75f0::/32": "271079", - "2a02:ad40::/29": "21207", - "2001:559:7a::/48": "33657", - "2408:8956:6a00::/40": "17622", - "240a:a2c5::/32": "143359", - "2804:6054::/32": "269160", - "2001:559:c0c7::/48": "33287", - "2001:579:5a64::/40": "22773", - "2804:266c::/32": "12989", - "2a01:a820::/32": "61042", - "2a03:db80:3411::/36": "680", - "240a:adfd::/32": "146231", - "2604:1380:4400::/44": "54825", - "2a01:8840:62::/45": "12041", - "2604:bc0:5::/46": "46562", - "2607:f928:2::/48": "16905", - "2406:140::/32": "398704", - "2620:119:5011::/48": "13443", - "2804:2b88::/32": "265158", - "2a0c:bc00::/29": "205344", - "2403:c00:1000::/40": "17488", - "2804:2050:5a6f::/43": "264485", - "2a05:bec0:41::/29": "197071", - "2a0a:54c1:53::/45": "62240", - "2401:3c0:20d::/46": "45528", - "240a:a21e::/32": "143192", - "2a05:7f00:190::/47": "1921", - "2001:559:810b::/48": "7015", - "2001:568:800::/40": "7861", - "2406:c940::/32": "58972", - "240a:abda::/32": "145684", - "2620:11f:5000::/40": "393869", - "2a0b:2900:7f::/48": "48582", - "2c0f:f230::/32": "328193", - "2402:800:542b::/41": "7552", - "2804:14d:68b1::/46": "28573", - "2a02:26f0:37::/44": "20940", - "2a02:26f7:b880::/48": "36183", - "2001:6c8::/29": "3292", - "2400:8901::/29": "63949", - "2600:140f:9000::/48": "9498", - "2604:fd80::/32": "62688", - "2001:559:1f3::/48": "33652", - "2001:67c:7e4::/48": "57243", - "2620:74:2f::/41": "7342", - "2804:2314::/47": "262811", - "2a04:c444::/32": "2047", - "2401:f200::/32": "9988", - "2602:feda:ae6::/47": "140913", - "2803:84a0::/32": "266820", - "2a02:2010:2120::/45": "20978", - "2a04:7840::/32": "56523", - "2001:410:101::/48": "6509", - "2604:86c0::/32": "63023", - "2804:3698::/32": "266358", - "2a02:26f7:7f::/48": "20940", - "2a0b:f300:4c7::/31": "62240", - "2a0e:97c5:5f4::/46": "20473", - "2a0f:6b40::/29": "60251", - "2605:8d80::/37": "812", - "2607:f6f0:a003::/48": "394749", - "2620:10c:7009::/45": "2906", - "2800:68:dc1::/35": "61468", - "2804:5ac4::/34": "268795", - "2a02:3000::/26": "6805", - "2409:8904:2b40::/37": "24547", - "2604:8700::/36": "19578", - "2a05:3580::/42": "35807", - "2401:af80:9015::/48": "45679", - "2404:8000:10bb::/39": "17451", - "2600:140a:1::/35": "20940", - "2a05:45c7:f000::/36": "28910", - "2600:380:f108::/46": "20057", - "2001:559:83cd::/48": "33651", - "2600:3000:1314::/37": "13649", - "2803:78a0::/32": "266815", - "2001:559:246::/48": "33657", - "2409:8087:5000::/43": "56047", - "2600:803:638::/48": "32982", - "2602:fe10:ff5::/44": "394119", - "2607:f7a8:81c::/48": "46887", - "2a03:77e0:4401::/48": "48305", - "2600:1901:c0d0::/39": "15169", - "2604:ca00:219::/42": "36492", - "2800:160:1855::/46": "14259", - "2806:2f0:3321::/41": "17072", - "2a04:4e40:f610::/44": "54113", - "2001:559:2af::/43": "7016", - "2804:402c::/32": "265942", - "2001:559:198::/48": "33652", - "2001:559:c1e1::/48": "7922", - "2604:5e40::/32": "16409", - "2804:14c:5be1::/43": "28573", - "2a02:26f7:dc41::/46": "20940", - "2001:3b0::/32": "17529", - "2001:559:8222::/48": "33652", - "2408:80f1::/44": "138421", - "2408:8256:c68::/39": "17622", - "240a:a649::/32": "144259", - "2603:8080::/26": "11427", - "2604:4180::/32": "15191", - "240a:a9f7::/32": "145201", - "240e:109:8028::/48": "133775", - "2605:2080:8000::/34": "394844", - "2a02:26f7:e944::/48": "36183", - "2600:141b:2800::/48": "35994", - "2001:b08::/46": "3267", - "2402:3a80:1738::/48": "38266", - "2607:f500::/35": "6181", - "2804:3fd8:7001::/32": "265919", - "2a03:f80:420::/48": "174", - "2a05:d050:c040::/44": "16509", - "2a07:ab42::/48": "44358", - "2001:13d0:1300::/31": "7303", - "2403:9900::/24": "17676", - "2607:ff60:5002::/48": "397110", - "2804:758::/32": "262635", - "2804:7004::/32": "61602", - "2001:559:3f6::/47": "7922", - "2620:13f:7007::/48": "55706", - "2a02:26f7:b684::/48": "36183", - "2a03:fa00::/32": "28760", - "2a0b:de00:32::/40": "6805", - "2620:13f:9000::/44": "14782", - "2001:559:848b::/48": "7922", - "2400:3b00:50::/48": "18229", - "2401:b840::/32": "136956", - "240a:a56c::/32": "144038", - "240e:966:ca00::/39": "133776", - "2600:1417:2d::/46": "20940", - "2607:f040::/32": "14007", - "2804:4098::/32": "265969", - "2a10:2307:ffff::/48": "16509", - "2001:4878:225::/48": "12222", - "2001:4bf0::/48": "34623", - "2801:1da::/44": "270018", - "2a00:6380::/32": "51469", - "2a02:26f7:ec01::/46": "20940", - "2a06:44c0::/29": "200434", - "2a0f:e380::/29": "60262", - "2001:559:10b::/48": "7016", - "240e:449::/32": "140553", - "2a02:26f7:e2c5::/46": "20940", - "2c0f:5e00::/32": "328843", - "2405:85c0::/32": "132622", - "2804:330:5000::/39": "53240", - "2400:ca02:f08a::/41": "23688", - "2804:1638::/32": "263276", - "2804:20c4::/32": "264513", - "2804:6660::/32": "269554", - "2600:1480:6000::/40": "33905", - "2602:feda:184::/48": "38308", - "2602:ffe4::/46": "21859", - "2603:c000:1700::/36": "31898", - "2620:ea:8000::/48": "2386", - "2a00:4802:4e30::/35": "13124", - "2a02:2e02:9660::/43": "12479", - "2001:579:f084::/42": "22773", - "2402:e280:211b::/45": "134674", - "2804:7e7c::/32": "271627", - "2a01:8840:25::/48": "207266", - "2a07:59c6:ec10::/45": "206313", - "2a11:e380::/32": "49778", - "2001:550:2602::/45": "174", - "2001:559:c1b8::/48": "33657", - "2403:6e40:140::/44": "9830", - "2604:200:13::/32": "33132", - "2a00:10b0::/29": "49586", - "2a00:b402::/31": "12857", - "2001:559:8230::/48": "13367", - "2408:843c:1600::/34": "140716", - "2804:e94:300::/42": "262468", - "2804:1034::/32": "263624", - "2c0f:f810::/32": "36907", - "2001:559:845f::/48": "7922", - "2a02:660::/32": "9125", - "2a02:d8a0::/32": "43709", - "240e:473:4d50::/40": "4134", - "2602:feda:c40::/48": "212580", - "2607:cd80::/33": "6528", - "2806:370:8060::/40": "28403", - "2a03:3b80::/32": "3308", - "2402:7280:cfa2::/48": "46014", - "2604:f400:6::/48": "19982", - "2800:160:25d5::/38": "14259", - "2804:72fc:8000::/33": "270888", - "2a00:1288:ef67::/48": "14778", - "2a0b:6dc0::/29": "5482", - "2800:bf0:8160::/45": "52257", - "2001:f00::/32": "3836", - "2407:ba40::/32": "398465", - "2804:6d74::/32": "270534", - "2a0a:b780::/29": "51815", - "2401:f000:8::/48": "23838", - "240a:ae61::/32": "146331", - "240e:18:50::/48": "4811", - "2602:fe65:10::/41": "396872", - "2804:25a4::/32": "52821", - "2a04:7d84::/32": "41110", - "2a0b:cbc0::/32": "57199", - "240a:a95c::/32": "145046", - "2804:774:8400::/33": "52858", - "2804:813c::/32": "272441", - "2001:559:3c2::/48": "33491", - "2401:d800:d900::/42": "7552", - "2404:e00:852::/48": "15695", - "240a:afa8::/32": "146658", - "2804:5d5c::/32": "268967", - "2804:6cf8::/32": "270504", - "2a02:f740::/29": "39834", - "2401:d800:f730::/40": "7552", - "2409:806c:2900::/35": "9808", - "240a:a8de::/32": "144920", - "2a0d:9c40::/29": "210150", - "2001:550:5c08::/34": "174", - "2001:559:870a::/48": "33659", - "2602:ff98:140::/38": "63447", - "2a0a:5900::/29": "30852", - "2404:a800:2002::/36": "9498", - "2408:8456:800::/42": "17622", - "2806:102e:1e::/48": "8151", - "2a0a:d6c0:226::/48": "212014", - "2001:6d0:6d01::/45": "42385", - "2001:8c8::/32": "6700", - "2404:138:4012::/31": "38022", - "2409:8027:2904::/46": "9808", - "2804:6f3c::/32": "270647", - "2a09:6280:3::/48": "203493", - "2001:4078::/29": "16086", - "2404:b9c0::/40": "137409", - "2804:1880::/32": "61936", - "2a04:b580::/29": "30742", - "2a0c:9a40:1005::/48": "34927", - "2001:559:472::/48": "7016", - "2001:559:5d0::/48": "7725", - "2401:b0c0:f000::/48": "136941", - "2409:8924:4f00::/35": "56046", - "2a00:fc8::/32": "34863", - "2a07:ca40::/29": "207242", - "2401:d800:9640::/40": "7552", - "2804:1404::/32": "263309", - "2804:3610::/32": "266324", - "2600:370f:34ea::/39": "32261", - "2604:880:4c::/48": "29802", - "2606:6680:5::/48": "53340", - "2801:12:c800::/48": "10753", - "2a06:fbc0::/29": "48918", - "2001:590:1006::/48": "20940", - "2a02:26f7:fa44::/48": "36183", - "2a04:2b00:14cc::/48": "212222", - "2001:559:c1d9::/45": "7922", - "2403:300:a09::/48": "714", - "2806:230:4016::/48": "265594", - "2a02:168:2197::/31": "13030", - "2001:4d0::/39": "297", - "2001:559:73f::/48": "33491", - "2403:1940:60::/48": "137935", - "2409:8904::/34": "24547", - "240e:3b7:1800::/34": "4134", - "2604:3400:ca01::/48": "29169", - "2801:80:12c0::/48": "263890", - "2804:14d:4491::/41": "28573", - "2804:62dc::/32": "269323", - "2402:800:9d63::/43": "7552", - "2602:fff6:4::/48": "20473", - "2603:c021:c000::/35": "31898", - "2604:d600:ca5::/44": "32098", - "2804:7d7c:120::/43": "271564", - "2a00:1b11:115::/46": "29152", - "2602:feda:d80::/48": "142048", - "2620:15e:7001::/48": "30383", - "2a0e:b107:ae2::/44": "207632", - "2402:800:5b55::/42": "7552", - "2600:1401:2001::/33": "20940", - "2804:1d7c::/32": "264373", - "2a0d:7140::/29": "208861", - "2001:4410:3100::/32": "132040", - "2409:8d02::/32": "38019", - "2605:2980::/32": "11404", - "2606:9c00::/32": "23314", - "2a03:5e20::/32": "15576", - "2a09:51c0::/29": "202053", - "2a10:8a40:fd01::/38": "39405", - "2402:800:590f::/43": "7552", - "240a:adbd::/32": "146167", - "2401:4900:4bdc::/46": "45609", - "2402:e380:300::/48": "132316", - "2407:7a80:28::/43": "132384", - "2a02:26f7:c358::/48": "36183", - "2001:559:8091::/48": "7922", - "2401:ff80:1a93::/39": "133954", - "2600:6c38:892::/44": "20115", - "2602:fc85:ff2::/44": "398875", - "2a0d:fec0:98::/47": "47481", - "2406:840:e509::/46": "211571", - "240a:a76d::/32": "144551", - "2800:484:8a00::/40": "14080", - "2a02:26f7:f989::/42": "20940", - "2a04:6bc0::/36": "48635", - "2001:559:835f::/48": "33287", - "2001:579:c0c4::/43": "22773", - "2a00:12f0::/32": "27970", - "2a02:578:2c00::/35": "9031", - "2a0e:3e80::/29": "204504", - "2c0f:f138::/32": "37577", - "2001:418:1450::/48": "3938", - "2001:4408:5251::/37": "4758", - "2600:1406:d401::/38": "20940", - "2a04:4e40:3a10::/41": "54113", - "2a0c:a500::/41": "209385", - "2804:24e8::/32": "53171", - "2804:5580::/32": "267938", - "2402:800:5763::/43": "7552", - "2404:4a00:8a00:1::/33": "45629", - "2604:d600:105b::/42": "32098", - "2804:240::/34": "262798", - "2806:1018::/32": "8151", - "2a02:26f0:5f01::/34": "20940", - "2804:884::/47": "262375", - "2400:cb00:102::/45": "13335", - "2408:84f3:f660::/40": "17623", - "240a:a853::/32": "144781", - "2600:1408:9c01::/48": "20940", - "2600:1488:a461::/40": "20940", - "2620:5f:8000::/48": "33281", - "2804:28::/32": "28162", - "2a00:cc0:d::/32": "13237", - "2a02:2090:e400::/48": "48287", - "2a0c:9a40:1057::/48": "34927", - "2a02:26f7:f205::/46": "20940", - "2a0c:6580:2::/48": "35365", - "2408:8957:5800::/40": "17622", - "2804:6134::/32": "269220", - "2001:cb0:20c::/47": "4637", - "2001:df2:d780::/48": "132010", - "2001:13b0:d003::/31": "3549", - "2400:6700:ff01::/40": "16509", - "2620:17e::/42": "26072", - "2804:c48:8000::/36": "52687", - "2605:6000:800::/31": "11427", - "2a04:4e40:2c00::/48": "54113", - "2a07:7780::/29": "49191", - "2400:a980:2900::/37": "133111", - "2804:17f8::/32": "262628", - "2804:6068::/32": "269165", - "2a05:f780:1000::/36": "57667", - "2001:1248:5668::/47": "11172", - "2a0f:9240::/35": "49434", - "2a10:4645::/32": "208029", - "2405:a700:1b::/45": "9583", - "2406:840:fc0f::/48": "140938", - "2600:6c50::/30": "20115", - "2804:3084::/32": "264956", - "2804:7ec0::/32": "271645", - "2404:aa00::/32": "10031", - "2800:bf0:80c0::/47": "52257", - "2804:3868:1800::/32": "266475", - "2402:2a80::/33": "46489", - "2409:8008:d7::/48": "24547", - "2602:801:f000::/46": "32590", - "2001:df4:9500::/48": "135938", - "2404:3900:1992::/48": "38320", - "2600:1488:6302::/41": "20940", - "2605:f440::/41": "54874", - "2a07:1980::/46": "25773", - "2a09:4c0:c01::/39": "58057", - "2c0f:f7c0:3001::/32": "30986", - "2001:678:b4c::/48": "50643", - "2001:67c:1b60::/48": "13040", - "2400:cb00:a730::/47": "13335", - "2607:fb90:b100::/38": "21928", - "2804:2cbc::/32": "265240", - "2a0c:9a40:2400::/39": "34927", - "2400:cb00:a4f0::/46": "13335", - "2404:c0:32a0::/39": "23693", - "2408:870c:100::/35": "17621", - "2803:f2c0::/32": "52468", - "2804:5878::/32": "268131", - "2a01:4d60:4::/32": "30870", - "2a02:2498:e005::/35": "13213", - "2001:559:8176::/48": "7725", - "2405:b40::/47": "55674", - "2600:1407:800::/48": "18717", - "2804:34e0::/32": "265486", - "2a0b:6440::/29": "41779", - "2a10:ccc2:37::/36": "35619", - "240a:a230::/32": "143210", - "2804:5934::/32": "268175", - "2409:8087:5c0d::/40": "9808", - "2620:130:1002::/48": "62649", - "2803:f1a0::/32": "267705", - "2001:559:8441::/48": "33668", - "2001:559:c213::/48": "7922", - "2603:b079::/24": "11796", - "2a02:26f7:fb00::/48": "36183", - "2001:648:2300::/46": "8248", - "2401:d800:98f0::/39": "7552", - "240e:473:6950::/40": "4134", - "2800:160:1cb2::/44": "14259", - "2804:25c0::/32": "264300", - "2409:8008:1900::/34": "24547", - "2604:bc0:3::/48": "18779", - "2804:78a8::/32": "271257", - "2a00:86c0:22::/39": "2906", - "2a0e:e640::/29": "202844", - "2a0f:5707:b000::/41": "212895", - "2001:559:2d8::/47": "7922", - "2402:ef1a:1::/32": "7633", - "2409:8a50::/38": "56047", - "2600:1407:2801::/37": "20940", - "2a01:bf20::/32": "39608", - "2a06:6440::/29": "200000", - "2001:da0::/32": "4718", - "2407:2e00::/32": "24436", - "2804:310:3::/32": "262688", - "2804:269c:fe44::/47": "47065", - "2804:7fa8::/32": "271701", - "2804:8190:100::/40": "272462", - "2a00:c20::/32": "29611", - "2402:3a80:c050::/46": "38266", - "2408:8456:6800::/42": "17622", - "2620:11a:c014::/48": "54113", - "2804:ef4:6420::/32": "28642", - "2a03:2440::/32": "199660", - "2402:800:5b2b::/43": "7552", - "2409:4053:3000::/29": "55836", - "2604:1380:4200::/44": "54825", - "2620:115:c007::/44": "2635", - "2401:8e80::/32": "18187", - "2603:c0f0:2910::/40": "6142", - "2605:a3c0::/32": "395731", - "2804:72c4::/32": "270874", - "2804:76b4::/32": "271129", - "2a02:570::/32": "15935", - "2a04:5ec7:1::/32": "60239", - "2401:47c0:2000::/32": "41095", - "2409:806b:3100::/36": "9808", - "2409:8924:7f00::/32": "56046", - "240a:a320::/32": "143450", - "2620:ed::/48": "3660", - "2620:149:241::/45": "714", - "2804:db4::/32": "28257", - "2a02:730:2::/35": "29278", - "2a02:5320:f00::/40": "12189", - "2620:137:d::/46": "396253", - "2001:67c:2b18::/48": "39405", - "2001:1248:5500::/46": "11172", - "240a:a2b5::/32": "143343", - "240a:a4b6::/32": "143856", - "240a:abca::/32": "145668", - "2604:1300:f800::/37": "3833", - "2620:128:2010::/48": "397457", - "2a00:11c0:66::/44": "42473", - "2001:67c:2544::/48": "44574", - "2607:6800::/32": "27258", - "2a05:f507:42::/48": "13443", - "240a:a2dd::/32": "143383", - "2600:1417:6c::/48": "20940", - "2a00:4bc0:2110::/45": "16509", - "2a02:78::/32": "44514", - "2a0b:4340:3000::/38": "48024", - "2804:43fc:ffc0::/42": "267614", - "2806:2f0:41e4::/38": "17072", - "2001:559:8341::/48": "7015", - "2001:559:c1e6::/48": "33652", - "2404:1f00:ffb2::/45": "55947", - "2406:7300::/46": "17559", - "2409:8904:52b0::/39": "24547", - "2001:67c:1770::/48": "3301", - "240a:a936::/32": "145008", - "2600:6c38:1c7::/44": "20115", - "2804:33d4:2::/44": "265419", - "2804:770c::/32": "271151", - "2a0a:31c0::/29": "62098", - "2605:8000:25::/40": "4261", - "2a10:4646:11::/48": "212106", - "2401:e880::/32": "45873", - "2600:6c38:b25::/46": "20115", - "2602:807:4000::/44": "174", - "2803:e600:3::/45": "18809", - "2a03:2680::/32": "39444", - "2a09:bac0:118::/47": "13335", - "240a:a4ca::/32": "143876", - "240a:abb6::/32": "145648", - "2605:9d80:9071::/48": "4809", - "2605:acc0::/32": "23543", - "2a00:da8:fffc::/46": "34086", - "2a00:7100::/32": "8311", - "2a09:9440::/32": "47596", - "240a:a8bf::/32": "144889", - "2a09:be40:4501::/48": "209109", - "240a:aca1::/32": "145883", - "2001:559:806e::/43": "7922", - "2402:800:57b7::/41": "7552", - "2403:eb40::/35": "138418", - "2409:8715:9800::/30": "56044", - "2a02:26f7:e041::/46": "20940", - "2001:559:2ea::/48": "33659", - "2001:678:b50::/48": "62009", - "2402:e380:305::/48": "135103", - "2407:79c0::/32": "212744", - "2a03:a820::/32": "39235", - "2a02:26f7:f905::/46": "20940", - "2001:df5:b480::/56": "137455", - "2408:8956:4c00::/40": "17622", - "240a:aef6::/32": "146480", - "2600:1004:a120::/36": "22394", - "2600:6c2e:36::/40": "20115", - "2607:d500:a00::/40": "54527", - "2804:4a4::/32": "262456", - "2a07:57c0::/32": "50113", - "2a11:6c0:100::/32": "211083", - "2001:49f0:a00b::/43": "174", - "2402:800:9ba9::/43": "7552", - "240a:af5c::/32": "146582", - "2804:4784::/32": "267059", - "2804:5da8::/32": "268985", - "2804:644c::/32": "269419", - "2804:7050::/32": "270719", - "2a03:f080:1001::/37": "42685", - "2a07:9b83::/32": "50113", - "2a0c:9080::/29": "57353", - "2407:8b00::/35": "64073", - "2620:11f:9006::/48": "14746", - "2620:1d6:ff4::/44": "2571", - "2a00:dd80:fb81::/48": "199438", - "2a02:188::/35": "31027", - "2a03:ac60::/32": "199758", - "2409:8730:f000::/31": "9808", - "2804:df0::/47": "262775", - "2a01:aea0:dd3::/45": "40980", - "2001:678:570::/48": "205107", - "2001:44c8:130::/47": "131445", - "2400:9380:81c0::/44": "136167", - "2401:1d40:3f00::/48": "58466", - "2409:8750:b00::/37": "56047", - "2804:314::/44": "61568", - "2a01:56c0::/32": "198864", - "2a06:bc00::/29": "203732", - "2001:678:bb4::/48": "43962", - "2605:3540::/32": "46502", - "2804:eec:4003::/32": "28226", - "2408:8459:7210::/42": "17623", - "2409:8e00::/32": "56048", - "2600:8807:d060::/36": "22773", - "2a07:3501:1050::/48": "39686", - "2a10:d000:15::/44": "35506", - "2001:559:7e9::/48": "33657", - "2801:1e:7000::/48": "266773", - "2804:7434::/32": "270965", - "2001:559:ac::/48": "33489", - "2600:c02:1021::/32": "12182", - "2a05:3340:140::/42": "134433", - "2001:470:de::/48": "8046", - "2001:559:121::/48": "33659", - "2804:14c:3b00::/40": "28573", - "2a02:26f7:c241::/46": "20940", - "2a05:7e40::/29": "203854", - "2402:d000:100d::/41": "9329", - "2607:f740:90::/48": "36236", - "2620:b1:8000::/48": "7018", - "2a00:e68::/29": "15743", - "2001:df0:cf80::/48": "9830", - "2001:43f8:330::/48": "37364", - "2408:8256:3d96::/44": "17623", - "2605:3380:411f::/42": "12025", - "2605:5080::/33": "3367", - "2607:ffc8:1::3/63": "17356", - "2803:780::/32": "8053", - "2408:8957:8100::/40": "17816", - "240a:4092:c000::/35": "58834", - "2602:fcce::/40": "399200", - "2604:2c40:1000::/36": "63252", - "2a04:5c87::/32": "201365", - "2a04:6640::/29": "3257", - "2c0f:f1f8::/32": "32708", - "2604:1580::/32": "54455", - "2620:1ec:8f0::/48": "8068", - "2001:67c:1b50::/48": "211879", - "2408:8459:ef10::/42": "17623", - "2604:a680:5::/48": "55079", - "2620:64:4000::/48": "54480", - "2804:60:40::/32": "53066", - "2804:27fc::/32": "263933", - "2001:6e8::/29": "16086", - "2001:18c8:300::/40": "19149", - "240e:698:4600::/40": "134756", - "2605:b100::/40": "577", - "2a07:a343:cd10::/44": "9009", - "2a0f:c500::/29": "201299", - "2605:a401:8ca2::/41": "33363", - "2804:c68::/32": "52702", - "2804:dd0:400::/32": "28639", - "2a02:828::/48": "44285", - "240a:af36::/32": "146544", - "2607:f038::/44": "21527", - "2620:91:c000::/47": "54900", - "2402:800:511d::/42": "7552", - "240a:a752::/32": "144524", - "2403:5f40:2::/44": "9268", - "2600:1409:c001::/36": "20940", - "2600:370f:3721::/41": "32261", - "2600:6c38:507::/44": "20115", - "2804:1e78::/32": "28658", - "2a02:578:7400::/38": "9031", - "2600:6c7f:9070::/48": "20115", - "2a05:5300::/29": "200562", - "2001:57a:8048::/40": "22773", - "2408:8256:1796::/41": "17622", - "2600:1410:1001::/34": "20940", - "2603:f070::/29": "396356", - "2804:7a30::/32": "271353", - "2403:2e40:10::/48": "137959", - "2620:104:e000:ae::/40": "1351", - "2a02:26f7:db10::/48": "36183", - "2a0c:9180::/48": "13127", - "2605:f500:502::/38": "1828", - "2607:3200:11::/46": "11240", - "2804:269c:fe47::/48": "47065", - "2804:35d8::/32": "266310", - "2600:1009:b000::/42": "6167", - "2804:4be8::/32": "267336", - "2408:84e1:140::/32": "4808", - "2001:400:6441:52::/58": "293", - "2001:559:8556::/47": "7015", - "2001:678:104::/48": "20609", - "2402:4000:b290::/41": "18001", - "2402:c480:7001::/32": "63916", - "2402:f800::/32": "7602", - "2404:7a40:16::/36": "132556", - "2408:8956:8c00::/40": "17622", - "2600:1417:8001::/35": "20940", - "2602:fed2:7708::/48": "208188", - "2804:2ed4::/34": "265369", - "2a00:c660::/32": "60341", - "2402:8100:2220::/43": "55644", - "2a01:40::/33": "5459", - "2a02:2b98::/32": "39642", - "2401:4900:4820::/41": "45609", - "2408:8459:5c10::/42": "17623", - "2a00:4720::/32": "42442", - "2a02:26f7:e0c1::/46": "20940", - "2a0f:ec00:99::/48": "60781", - "2804:2f6c:dc00::/34": "264890", - "2804:33f4::/32": "265427", - "2405:f080:2e00::/47": "136907", - "2408:8456:9a10::/42": "134543", - "2408:8456:a210::/42": "134543", - "240e:44d:1500::/41": "140345", - "2606:a000:3000::/36": "11955", - "2804:2a74::/32": "52948", - "2a0b:4342:2000::/36": "57578", - "240a:ab82::/32": "145596", - "2604:ca00:f013::/45": "36492", - "2a02:26f7:17::/48": "20940", - "2a0b:4d07:301::/48": "44239", - "2a04:4e40:cc00::/48": "54113", - "2001:67c:2bd0::/48": "204847", - "240e:44d:5200::/41": "140345", - "2604:8e80:3400::/32": "32505", - "2800:190:2::/45": "11664", - "2a04:f580:9260::/48": "4809", - "2001:559:314::/48": "33491", - "240a:a9c9::/32": "145155", - "240e:3be:dc00::/34": "4134", - "2804:69f8::/32": "270303", - "2a03:9600::/32": "31562", - "2001:df2:d80::/48": "136284", - "2402:f800:d000::/36": "7602", - "2600:370f:350a::/42": "32261", - "2600:370f:3541::/45": "32261", - "2620:137:4000::/40": "22601", - "2804:7d78::/32": "271563", - "2a04:5202::/29": "50113", - "2001:4b28::/32": "6775", - "2803:9800:a505::/46": "11664", - "2001:df7:af00::/48": "138142", - "2401:c080:1000::/36": "20473", - "2406:3003:3050::/32": "4657", - "2606:62c0:3130::/48": "399686", - "2607:f868::/34": "20141", - "2604:c00::/32": "32875", - "2607:fda8:1006::/44": "54004", - "2001:559:c134::/48": "33668", - "2001:df2:a00::/48": "38760", - "2400:e780:1000::/38": "131198", - "240e:59:8000::/30": "4134", - "2607:f460::/32": "22742", - "2803:6580::/32": "265839", - "2001:4878:c228::/48": "12222", - "2402:800:f0b0::/41": "7552", - "2409:8053:2800::/47": "56047", - "240a:aed1::/32": "146443", - "2600:1000:b0c0::/42": "6167", - "2a02:26f7:d9c9::/42": "20940", - "2001:df2:7f80::/48": "133803", - "2803:5c80:5051::/46": "64114", - "2607:f6f0:3002::/40": "19930", - "2a01:1c0::/32": "29513", - "2604:d600:64b::/45": "32098", - "2606:6240:174::/48": "398447", - "2403:44c0:3::/48": "135814", - "2405:1c0:6003::/39": "55303", - "2406:e900::/48": "132649", - "2800:160:10cc::/46": "14259", - "2804:1b10::/32": "61706", - "2a02:2648::/29": "42514", - "2a0e:aa06::/43": "4842", - "2001:559:85c3::/48": "13367", - "2001:c08::/32": "9264", - "2001:1a11:b9::/48": "8781", - "2001:4408:8609::/33": "4758", - "2402:800:591d::/42": "7552", - "2804:24ac:8000::/33": "264237", - "2804:7250::/32": "270846", - "2001:1248:5621::/45": "11172", - "2406:eb00:132::/48": "132653", - "2620:137:5090::/42": "10851", - "2804:22c:4::/32": "22689", - "2804:372c::/32": "266394", - "2a0d:4340::/29": "3214", - "2a0e:fd45:40f2::/48": "41108", - "2a0f:5707:ab27::/48": "43927", - "2001:418:2::/38": "2914", - "2001:1aa8::/32": "24642", - "2001:41c7::/32": "31459", - "2404:7c0::/32": "138109", - "2408:8459:c410::/42": "17623", - "2803:6e80::/32": "27923", - "2804:5d2c:2::/32": "268955", - "2001:559:228::/43": "33491", - "2001:559:83b9::/48": "33657", - "2001:448a:60d0::/42": "7713", - "2408:8456:8400::/42": "17622", - "2408:8459:cc50::/39": "17816", - "2604:d600:653::/44": "32098", - "2a02:26f0:8a01::/39": "20940", - "2407:f700:4000::/35": "132215", - "2408:8459:cc30::/41": "17622", - "2408:8878::/31": "4837", - "2600:140b:1201::/39": "20940", - "2600:6c38:e10::/42": "20115", - "2405:ec00:1002::/39": "23955", - "240a:aff7::/32": "146737", - "2a00:b840:2::/29": "31472", - "2a09:6800::/29": "50308", - "2001:559:556::/48": "33659", - "2a06:9000::/32": "25386", - "2400:dd02:1013::/31": "7497", - "2409:805c:1100::/36": "9808", - "2602:ff1e::/36": "395688", - "2800:bf0:16f::/43": "52257", - "2804:7ef0::/32": "271656", - "2001:678:ea4::/48": "39704", - "2800:160:12dd::/42": "14259", - "2a02:26f7:ca85::/46": "20940", - "2a0f:8447::/32": "212521", - "2001:559:83d2::/48": "7725", - "2001:678:640::/48": "204302", - "2001:16a2:4020::/45": "25019", - "2001:559:1fb::/48": "33652", - "2600:1806:119::/48": "16552", - "2602:fc64:df1::/48": "50131", - "2804:154c:101::/33": "263382", - "2804:7ea4::/32": "271637", - "2001:559:203::/48": "7015", - "2001:67c:684::/48": "12502", - "2402:800:5301::/44": "7552", - "2402:57c0::/32": "134913", - "240a:a914::/32": "144974", - "2607:e880:1010::/48": "12220", - "240a:ac52::/32": "145804", - "2600:100a:a010::/40": "22394", - "2620:11e:30c7::/48": "393828", - "2804:3994:2::/32": "266037", - "2804:7f5c::/32": "271683", - "2a03:2b80::/29": "33883", - "2a0b:8700::/47": "61317", - "2001:559:c0d0::/47": "20214", - "2804:2e74:fd00::/38": "265347", - "2a00:cce0::/32": "43870", - "2a01:b740:a08::/48": "6185", - "2a0b:1306::/46": "198018", - "2804:748c::/32": "270988", - "2401:d800:a80::/42": "7552", - "2405:4cc0::/32": "139671", - "240a:acbb::/32": "145909", - "240a:afeb::/32": "146725", - "240e:980:9700::/40": "4134", - "2600:1415:b001::/36": "20940", - "2804:f60::/32": "263582", - "2a02:cb80:2120::/48": "43766", - "2a0c:3e00::/29": "49601", - "2a0f:3040::/29": "60262", - "2402:8100:207d::/46": "45271", - "240a:a8e8::/32": "144930", - "2a02:5180::/32": "43247", - "2a04:a7c0::/32": "198785", - "2402:5300:610::/39": "45903", - "240a:a7a1::/32": "144603", - "240a:a834::/32": "144750", - "2804:69b8::/32": "270287", - "2a00:1400::/32": "44764", - "2a00:a680::/32": "61174", - "2a02:26f7:ee48::/48": "36183", - "240a:a976::/32": "145072", - "2a02:26f7:f684::/48": "36183", - "240e:980:8a00::/40": "134238", - "2a02:26f7:c491::/42": "20940", - "2a03:3260::/32": "6829", - "2001:18c8:200::/40": "10464", - "2606:41c0:4::/47": "11448", - "2804:4ef4:4000::/32": "268294", - "2a00:f600::/32": "34946", - "2a02:26f7:ea40::/48": "36183", - "240a:a7d4::/32": "144654", - "2604:fb80:f00a::/47": "15128", - "2803:9f20::/32": "266780", - "2a02:26f7:d20c::/48": "36183", - "2001:470:23::/44": "6939", - "2600:1806:411::/48": "16552", - "2804:3824::/32": "266459", - "2406:2000:a4::/48": "10230", - "2409:8914:1100::/38": "56044", - "2603:b0e0:caff::/34": "11796", - "2804:2814::/32": "263939", - "2600:1016:b130::/40": "6167", - "2804:24d8:c010::/41": "264244", - "2001:df5:5d80::/48": "9930", - "2620:52:2::/48": "22753", - "2a0a:4e00::/29": "57755", - "2001:df4:c00::/48": "133985", - "2804:1408:8001::/35": "28635", - "2a09:1480:200::/29": "35704", - "2a0a:d140::/29": "205919", - "2804:14c:de43::/40": "28573", - "2804:1a04:c::/33": "61832", - "2804:5a3c::/32": "268757", - "2400:aa00:9102::/38": "9873", - "240e:ff:c003::/48": "134774", - "2600:14e0:4::/48": "33905", - "2806:230:4008::/48": "265594", - "2409:8008:900::/35": "24547", - "2409:804e:900::/35": "9808", - "2600:3501:5000::/34": "396998", - "2602:fe69:a00::/40": "36369", - "2604:bf00:210::/48": "397384", - "2804:22b0::/32": "264116", - "2a02:26f7:c244::/48": "36183", - "2001:559:8235::/48": "7015", - "2400:dd00::/31": "7497", - "2620:1:2000::/48": "396152", - "2804:14c:8787::/44": "28573", - "2804:7f7:c000::/34": "18881", - "2804:757c::/32": "261050", - "2a00:79e1:f0e::/48": "395973", - "2001:4430:f::/48": "3786", - "2402:5080::/32": "133959", - "2405:9800:8::/48": "45430", - "2804:14c:d400::/40": "28573", - "2a01:110f:5000::/40": "29535", - "2001:678:148::/48": "16302", - "2001:678:978::/48": "209347", - "2406:840:e840::/44": "209294", - "2406:b2c0::/32": "40676", - "240e:355:6400::/30": "4134", - "2620:3a:4000::/44": "36711", - "2804:954::/42": "263073", - "2a0c:9a40:808e::/48": "60404", - "2001:559:32b::/45": "7922", - "240a:a34f::/32": "143497", - "2800:110:1025::/34": "4270", - "2404:fa80::/32": "132111", - "2600:1fa0:4040::/42": "16509", - "2804:2618::/32": "262362", - "2a01:9700:1470::/45": "8376", - "2a02:26f7:f944::/48": "36183", - "2a0d:3842:1110::/48": "57629", - "2001:559:787::/48": "22909", - "2001:dcc:403::/48": "23599", - "2001:fb0:1075::/48": "55498", - "2603:c024::/35": "31898", - "2801:1fc:32::/48": "27951", - "2a02:26f7:41::/48": "20940", - "2a10:2c80::/32": "58010", - "2602:fed2:7115::/46": "53356", - "2a0f:2100:171::/48": "60781", - "2a02:26f7:c35d::/48": "36183", - "2001:df4:e980::/48": "141086", - "2001:49d0::/40": "2495", - "2402:79c0:1149::/48": "26415", - "240e:3b6:9200::/36": "140317", - "2600:1003:f850::/29": "22394", - "2800:160:116c::/46": "14259", - "2a00:7da0::/32": "15815", - "2400:ac40:c40::/42": "136255", - "2404:3dc0:1::/48": "138552", - "2620:62:c000::/48": "11820", - "2620:102:3000::/44": "3136", - "2a0e:8f02:f004::/48": "213031", - "2a0f:1840::/29": "60262", - "2409:804c:3900::/33": "9808", - "2803:6602:8000::/29": "28075", - "2804:41d0:3600::/33": "267458", - "2806:230:5008::/48": "265594", - "2a0a:f040::/29": "61961", - "2c0f:1500:7000::/32": "328888", - "2001:559:3e7::/48": "7015", - "240a:afc9::/32": "146691", - "240e:44d:6580::/41": "4134", - "2602:80a:2000::/48": "398351", - "2804:6da0::/32": "270545", - "240a:aa94::/32": "145358", - "2a0a:fd00::/32": "206917", - "2403:4f00::/36": "24466", - "2405:6e00:600::/43": "133612", - "2a0e:f0c0::/29": "200713", - "2001:1b70:86c0::/48": "8147", - "2402:2b40:a000::/36": "55967", - "2620:96:8000::/48": "3719", - "2c0e:40:402::/39": "24863", - "2001:468:2808::4/48": "396961", - "2001:559:7ec::/48": "33491", - "2408:8656:3300::/37": "17816", - "2a02:2e0:41d::/46": "12306", - "2a02:530:29::/32": "21191", - "2a02:26f7:c0c9::/42": "20940", - "2a0f:2880:500::/32": "208164", - "2404:b0:1009::/36": "4750", - "2604:4580:202::/47": "26375", - "2607:fc48:810::/48": "40009", - "2a01:6420::/29": "62193", - "2a02:27b0::/33": "9146", - "2a03:3740::/32": "43350", - "2001:67c:1740::/48": "34019", - "2404:3d00::/38": "3573", - "240a:a570::/32": "144042", - "2600:1012:b130::/44": "22394", - "2607:f390:1440::/44": "2055", - "2a01:170:2000::/32": "8820", - "2a02:26f7:f081::/46": "20940", - "2a07:cb81::/32": "15404", - "2400:8500:9d07::/48": "7506", - "240a:aa27::/32": "145249", - "2604:b080::/32": "54665", - "2a02:25a8::/32": "12824", - "2804:70b0::/32": "270742", - "2a01:348:fac::/32": "39326", - "2001:559:807c::/48": "7015", - "2604:c840::/32": "397181", - "2001:550:5403::/39": "174", - "240a:a9d7::/32": "145169", - "2604:4500::/43": "29802", - "2804:3b28::/33": "266132", - "2800:23::/32": "11271", - "2a06:1b00:108::/32": "8302", - "2602:ffc5:10a::/48": "19969", - "2620:8f:8000::/48": "396012", - "2804:4148::/32": "267425", - "2a01:4a0:2000::/46": "51191", - "2a0f:8ac1:b9a1::/48": "205749", - "2a0f:9880::/29": "208861", - "2401:c500:fd01::/48": "13658", - "240a:a94f::/32": "145033", - "2a09:8400::/29": "44016", - "2a00:1988::/32": "5392", - "2a0c:e304::/30": "198985", - "2001:1248:842f::/43": "11172", - "2803:56e0::/32": "269965", - "2a02:26f7:f68d::/42": "20940", - "2400:fc00:8160::/40": "45773", - "2407:8bc0::/32": "137990", - "240a:a555::/32": "144015", - "2804:3c04::/32": "266185", - "2a02:e70:157::/40": "33965", - "2001:559:8365::/48": "33660", - "2001:67c:2e28::/48": "3320", - "2604:240:1::/48": "33724", - "2a0f:340::/29": "16509", - "2001:559:c285::/48": "33660", - "2001:559:c328::/48": "7922", - "2001:559:c3f7::/48": "33655", - "2001:67c:1260::/48": "50398", - "2620:13a:6001::/48": "33491", - "2a00:1fb8::/32": "29462", - "2600:1417:30::/46": "24319", - "2605:8c80::/32": "6391", - "2620:112:f002::/47": "6336", - "2a00:f10:141::/48": "29290", - "2a02:cb43:2001::/48": "20546", - "2a10:2840::/29": "213381", - "2409:8904:8890::/39": "24547", - "2a04:4e40:b400::/47": "54113", - "2a06:4b02::/29": "51191", - "2a0c:f000:2000::/48": "205265", - "2804:21a4::/35": "53190", - "2a00:79e1:f11::/48": "395973", - "2a07:b380::/29": "202604", - "2001:1a60::/32": "2594", - "240e:87c:270::/39": "137692", - "2600:80d:18::/27": "701", - "2801:80:1920::/48": "264971", - "2804:c54::/32": "262650", - "2a00:1d50::/46": "47605", - "2a02:26f0:a501::/38": "20940", - "2a0b:8480::/29": "25341", - "2409:8904:4660::/39": "24547", - "2804:694:4d00::/38": "262596", - "2a0b:4d07:259::/48": "44239", - "2401:ff80:1a11::/46": "133954", - "2405:1c0:6653::/42": "55303", - "240a:a097::/32": "142801", - "2605:9e00::/32": "15082", - "2a02:cb80:4200::/45": "43766", - "2a03:9140::/32": "41023", - "2804:3fd8::/33": "265919", - "2804:5a70::/32": "268773", - "2a02:26f0:3c::/48": "20940", - "2001:789::/32": "29222", - "240a:a34c::/32": "143494", - "2a0d:6fc0::/29": "12400", - "2a02:e980:15c::/48": "19551", - "2001:559:85f7::/48": "7016", - "2408:8459:cb10::/42": "17623", - "240a:ab8c::/32": "145606", - "240a:afe1::/32": "146715", - "2800:160:1dd9::/46": "14259", - "2804:2f1c:a300::/33": "264872", - "2a00:89c0::/32": "197981", - "2a04:4e40::/48": "54113", - "2001:579:1c34::/40": "22773", - "2401:d800:7ae0::/39": "7552", - "2406:4e40:601::/36": "140966", - "240e:6c0::/23": "4134", - "2602:fc8e::/40": "399522", - "2804:e0c::/48": "28176", - "2001:67c:644::/48": "58343", - "2408:880c::/27": "17621", - "2409:8915:7800::/39": "56044", - "2a02:e30:f050::/48": "61056", - "2606:2800:7001::/46": "15133", - "2a02:7a00:7::/32": "39904", - "2407:a2c0::/32": "63791", - "2a0d:c600::/29": "35826", - "2a0f:b100::/46": "202945", - "2a0b:ca80::/32": "57723", - "2001:470:e3::/48": "11282", - "2001:480:50::/48": "6043", - "2001:12f8:c::/47": "14650", - "240a:a531::/32": "143979", - "2a01:8840:a5::/48": "207266", - "2a02:26f7:f880::/48": "36183", - "2a03:b0c0::/123": "14061", - "2a0e:41c0::/29": "208566", - "240a:ad15::/32": "145999", - "2620:66:a000::/48": "30323", - "240a:aebf::/32": "146425", - "2607:f058::/34": "22302", - "2804:3118::/32": "264992", - "2001:559:8359::/46": "33659", - "2a02:26f7:19::/48": "20940", - "2402:9e80:2402::/48": "133752", - "2408:8246:1200::/32": "4837", - "2604:b480:fffd::/48": "36268", - "2804:1680::/35": "263289", - "2a02:26f0:138::/45": "20940", - "2a0e:cd01:2100::/36": "23031", - "2403:400::/38": "23820", - "240a:a1ea::/32": "143140", - "2602:ff83::/36": "29948", - "2605:9300:1::/48": "13768", - "2620:108:d000::/44": "8987", - "2803:7c10::/32": "271884", - "2803:a900:9000::/48": "52420", - "2604:d600:627::/44": "32098", - "2a01:56c1:10::/44": "198864", - "2a06:1e00:30::/48": "60695", - "2a0b:e440::/29": "211774", - "2001:1388:2f06::/44": "6147", - "2402:800:7780::/36": "7552", - "2408:8459:5650::/36": "17816", - "2602:fdc2::/48": "397720", - "2620:171:dc::/46": "42", - "2a00:1b50:11::/32": "8343", - "2a02:26f7:dd45::/46": "20940", - "2a07:b2c0::/32": "56911", - "2001:df6:5a00::/48": "64302", - "240e:9:6000::/36": "134419", - "2804:38fc::/32": "266516", - "2804:3c38::/32": "266197", - "2a00:14a8::/32": "35548", - "2a00:a7c0::/32": "57866", - "2a04:9a03:1010::/44": "48037", - "2401:d800:a50::/42": "7552", - "2a06:3e40::/29": "42102", - "2402:800:971d::/42": "7552", - "2402:6640:1a::/42": "134995", - "2409:8020:3035::/41": "56046", - "240e:6:d020::/48": "140527", - "2605:a401:8d3a::/40": "33363", - "2607:f740:e614::/47": "63911", - "2a02:d107:f001::/48": "200088", - "2a0a:90c0:1059::/40": "205080", - "2409:8704:c500::/35": "24547", - "240a:a283::/32": "143293", - "2a02:26f0:9801::/39": "20940", - "2a0a:7c80::/32": "206672", - "2a02:2e02:1d00::/41": "12479", - "2a03:de40::/32": "21057", - "2a0d:f47::/32": "39080", - "2a0e:fd45:7::/36": "44103", - "2001:468:1800::/40": "10466", - "2001:559:85be::/47": "20214", - "2402:800:92a9::/43": "7552", - "2600:1009:f110::/30": "22394", - "2001:559:8598::/47": "7922", - "2403:300:a08::/48": "6185", - "240a:afb1::/32": "146667", - "2600:1419:4001::/36": "20940", - "2a00:4bc0:700::/34": "31004", - "2a02:26f7:f6d8::/48": "36183", - "2a0b:e900::/29": "13285", - "2001:579:888::/43": "22773", - "2001:4868:300::/37": "701", - "2804:41b0::/32": "267450", - "2a02:26f7:cb89::/42": "20940", - "2001:550:7702:1::/47": "174", - "2600:140f:e801::/38": "20940", - "2602:ff96:3::/48": "31863", - "2a03:3200::/32": "8752", - "2a0b:6b81:205::/48": "203729", - "2001:468:600::/40": "10578", - "2001:67c:22d4::/48": "3320", - "2001:ee0:db00::/37": "45899", - "2401:c680:2100::/32": "133854", - "2a01:4e0::/29": "24651", - "2a01:71a0::/32": "208988", - "2001:fd8:f240::/42": "132199", - "2400:f0c0::/36": "136477", - "240e:473:2c50::/39": "4134", - "2001:1248:5f00::/43": "11172", - "2620:f4:c000::/48": "13543", - "2803:c0c0::/32": "264759", - "2804:764::/32": "10733", - "2804:6410::/32": "269402", - "2a0c:2fc0::/29": "50598", - "2607:f738:400::/39": "17184", - "2620:113:1000::/46": "15224", - "2620:12b::/48": "13993", - "2804:3870::/32": "266477", - "2401:d800:d680::/42": "7552", - "240e:44d:2880::/41": "4134", - "2607:fcd0:fa80:2800::/53": "8100", - "2607:fd78:904::/32": "26677", - "2804:7944::/32": "271295", - "2408:8957:d00::/40": "17816", - "2800:937::/32": "264731", - "2801:13:4800::/48": "269825", - "2a01:6b20::/34": "198296", - "2404:bf40:8642::/47": "7545", - "2620:109:5000::/46": "46435", - "2620:128:f021::/48": "18872", - "2804:2980::/32": "53172", - "2a03:6400:20::/44": "11054", - "2409:8004::/45": "24547", - "2a10:3240::/30": "208256", - "2405:9800:c926::/44": "45430", - "2406:6940:60::/32": "141047", - "2604:2d80:c030::/34": "30036", - "2804:7858:7040::/32": "271236", - "2001:579:b984::/41": "22773", - "2604:6600::/47": "40676", - "2607:fb90:c13f::/41": "21928", - "2804:9b4::/32": "262872", - "2a05:d050:e0c0::/44": "16509", - "2001:678:4b8::/48": "41985", - "2001:c18::/32": "10204", - "240a:ab7c::/32": "145590", - "2001:710::/32": "8419", - "2620:0:167a::/48": "6984", - "2a01:5380::/32": "10474", - "2001:559:126::/48": "33659", - "2600:140b:5c00::/48": "31109", - "2001:388:c::/48": "23859", - "240a:a496::/32": "143824", - "2607:f740:e627::/44": "63911", - "2804:2d50::/32": "265274", - "2a02:26f7:c589::/46": "20940", - "2400:9380:9100::/47": "4809", - "240a:a314::/32": "143438", - "2605:f080:500::/40": "23535", - "2620:7a:6000::/48": "398208", - "2a01:b8c0::/32": "198869", - "2c0f:1500::/32": "328888", - "2001:67c:4c8::/48": "50034", - "2620:10a:8001::/46": "27299", - "2001:678:274::/48": "8220", - "2001:67c:2bb8::/48": "35731", - "2001:df7:f400::/47": "17436", - "2001:1218:6027::/32": "278", - "2806:230:2057::/48": "11888", - "2a05:b680:10::/48": "44682", - "240a:aca6::/32": "145888", - "2a0e:b105:120::/44": "211659", - "2604:a00:17::/39": "19318", - "2a04:bd80::/29": "52004", - "2a07:2400::/29": "48402", - "2a0e:97c5:554::/46": "20473", - "2a0f:9400:700a::/45": "211144", - "2001:1388:a000::/33": "6147", - "2400:6280:10c::/48": "138911", - "2801:0:3c0::/48": "61463", - "2409:8904:5270::/40": "24547", - "240e:980:9a00::/40": "58466", - "2804:14d:2400::/40": "28573", - "2804:6284::/32": "53090", - "2001:559:823c::/48": "13367", - "2001:1938:4009::/40": "12989", - "2605:a404:85a::/40": "33363", - "2803:2a60::/32": "267881", - "2804:20ec::/32": "264521", - "2a04:4e40:5e10::/44": "54113", - "2a06:c005::/32": "45027", - "2001:df6:4080::/48": "141999", - "2400:9800:6026::/47": "139994", - "2804:5ebc::/32": "269053", - "2806:20d:5043::/45": "32098", - "2a02:b80::/29": "30740", - "2400:3dc0:201::/39": "134371", - "2402:53c0:2000::/36": "137144", - "2610:20:5110::/42": "5744", - "2800:200:e890::/35": "12252", - "2801:0:80::/48": "262148", - "2a05:b0c1::/48": "198412", - "2001:67c:1bcc::/48": "41009", - "2806:2f0:2184::/41": "22884", - "2a00:8f00:205::/48": "16349", - "2400:9380:9250::/46": "4809", - "2604:a180::/35": "11139", - "2a06:e881:7100::/46": "207748", - "2001:418:1401:24::/64": "2639", - "2401:d800:7730::/41": "7552", - "2405:23c0::/32": "134325", - "240a:abed::/32": "145703", - "2600:1001:a010::/40": "22394", - "2607:f098:6100::/32": "33363", - "2607:f6f0:9000::/48": "32323", - "2804:4d60::/32": "263096", - "2a07:a8c1::/33": "34939", - "2400:cb00:253::/48": "13335", - "2a02:26f7:c441::/46": "20940", - "2a0a:6340::/32": "42624", - "240e:183:8103::/29": "4134", - "2605:dec0::/32": "17303", - "2620:125:9007::/44": "10780", - "2801:18:9001::/48": "14080", - "2804:30a0::/32": "264965", - "2a02:2368::/32": "50270", - "2a07:6fc6::/32": "204254", - "2404:ea80::/38": "135373", - "2001:559:857d::/48": "33651", - "2607:f368:1000::/46": "32982", - "2804:76c8::/35": "271134", - "2a00:1560:1112::/32": "29684", - "2a02:26f7:da41::/46": "20940", - "2a04:4540::/29": "15943", - "2404:7000::/32": "17557", - "2804:10e0::/38": "263653", - "2804:24c0::/32": "262290", - "2a01:ac00::/32": "9066", - "2a04:4e40:ac30::/41": "54113", - "2a0a:3540::/29": "208861", - "2001:4878:62::/47": "12222", - "2400:cb00:a590::/48": "13335", - "2407:d200::/32": "38532", - "240e:679:8c00::/33": "4134", - "2001:559:c3c7::/48": "7922", - "2001:579:243b::/41": "22773", - "240a:a125::/32": "142943", - "2606:ea00::/32": "32666", - "2a06:1b40::/29": "203762", - "2001:67c:191c::/48": "35445", - "240e:3b8:4c00::/35": "136200", - "2606:38c0::/32": "399307", - "2804:3b20:203::/32": "266131", - "2a02:6a0:4ffe::/47": "4410", - "2a03:2880:f15f::/42": "32934", - "2402:e380:316::/48": "140733", - "240a:a8c1::/32": "144891", - "2607:a280::/32": "394117", - "2607:ff00:100::/40": "20454", - "2a02:d40:7::/44": "197071", - "2a0f:5701:3507::/44": "206499", - "2001:678:110::/48": "57436", - "2620:4e:e000::/48": "36321", - "2a0e:d3c0::/48": "205869", - "2a10:d000:1d::/29": "35506", - "2405:9800:c906::/47": "45458", - "2604:4480::/32": "22552", - "2604:d180::/32": "46573", - "2a0e:fd45:40f4::/48": "49367", - "2a0d:c140::/29": "211332", - "240a:a08a::/32": "142788", - "2a0a:7d80:3::/48": "35594", - "2408:870c:3010::/36": "17621", - "2606:2800:4203::/48": "14210", - "2804:508:ff20::/40": "52999", - "2a03:2c80::/32": "31084", - "2001:67c:25b4::/48": "49217", - "2001:4b20:1000:2514::/64": "65505", - "2607:f5f0::/32": "5739", - "2800:160:2270::/40": "14259", - "2a04:4fe0::/30": "200187", - "2408:8956:a900::/40": "17816", - "2607:7c80:58::/48": "11661", - "2801:10e::/48": "271844", - "2a04:5b82:9::/45": "202265", - "2406:daa0:2080::/44": "16509", - "240a:acf3::/32": "145965", - "2a03:2420::/32": "201682", - "2a04:5d40::/29": "59767", - "2001:559:8277::/48": "7016", - "2600:1008:6010::/32": "22394", - "2602:ffc8:c000::/34": "20278", - "2a07:c40::/29": "2119", - "2a0e:b102:110::/44": "58057", - "2409:801e:2900::/37": "24400", - "2800:160:1c06::/44": "14259", - "2a01:288:4004::/48": "42794", - "2001:67c:1640::/44": "43516", - "2001:df3:d000::/48": "133044", - "2604:c740::/32": "10392", - "2a02:e981:3d::/41": "19551", - "240e:109:8024::/48": "134768", - "2600:140f:c800::/48": "24319", - "2606:f280:8000::/33": "46261", - "2804:6cec::/32": "270501", - "2403:fbc0:4000::/48": "23959", - "2408:840c:d400::/40": "17621", - "240e:473:850::/39": "4134", - "2606:2800:e::/47": "15133", - "2606:ae00:cc41::/35": "7287", - "2800:160:1a84::/46": "14259", - "2804:a0::/32": "262318", - "2a01:1b1::/32": "39292", - "2a02:160::/32": "62183", - "2001:44b8:404a::/48": "7545", - "2600:1409:3801::/37": "20940", - "2804:2144:307::/44": "52795", - "2a00:f90::/32": "34781", - "2a02:2518::/43": "28917", - "2a0b:f4c0:1a4::/48": "205100", - "2a0e:b107:23a::/45": "209419", - "2001:44b8:30cd::/48": "4739", - "2a02:26f7:d980::/48": "36183", - "2a0f:607:140f::/48": "211132", - "2001:1248:9ae6::/39": "11172", - "2804:5534:b000::/37": "268696", - "2a00:6340:4001::/32": "58299", - "2a05:7100::/29": "42673", - "2001:559:818c::/48": "22909", - "2605:f000::/32": "22442", - "2804:5148::/32": "268443", - "2001:3c8:2708::/36": "4621", - "2001:550:2401::/46": "174", - "2407:9440:72::/32": "141626", - "2600:1406:201::/39": "20940", - "2600:370f:6040::/42": "32261", - "2a04:9a02:1000::/36": "42894", - "2001:14e8::/47": "6736", - "2403:780:10::/32": "64098", - "2600:1401:1::/46": "21342", - "2803:5440:ffff::/48": "264738", - "2a01:f8::/32": "39912", - "2a05:2a40::/48": "201411", - "2c0f:f918::/45": "37002", - "2001:428:6402:220::/64": "2639", - "2405:1c0:6753::/42": "55303", - "2a07:1c80::/29": "43065", - "2801:80:a70::/48": "263257", - "2001:1938:2106::/40": "12989", - "2403:5180:1::/48": "138038", - "2408:8957:c700::/40": "17816", - "240c:4086::/28": "38365", - "240e:980:4300::/40": "63835", - "2602:fcd5:8::/47": "397373", - "2620:9b:e000::/48": "399992", - "2804:6bf8::/32": "270437", - "2806:103e:1::/46": "8151", - "2a05:2d01::/32": "64404", - "2a0b:6b86:200::/40": "60271", - "2001:550:3502::/38": "174", - "240a:a645::/32": "144255", - "2806:230:3024::/48": "265594", - "2404:bd00::/44": "58678", - "2406:c00::/32": "45224", - "2804:2fc8::/32": "262611", - "2a02:6680:1::/46": "16116", - "240a:a1dc::/32": "143126", - "2600:1401:6002::/32": "20940", - "2605:5c0:10::/44": "26517", - "2804:6710::/32": "269601", - "2001:559:152::/48": "33652", - "2001:df6:ac00::/48": "58404", - "2a07:6bc0::/29": "197451", - "2a0c:69c0::/32": "202312", - "2001:559:8717::/48": "33659", - "2400:cb00:130::/48": "13335", - "2605:7100::/32": "11238", - "2606:f900:2000::/33": "812", - "2804:5e90::/32": "269041", - "2a01:8840:89::/48": "207266", - "2a04:5b81:2050::/44": "202265", - "2402:800:9b0f::/43": "7552", - "2409:8053:1000::/47": "56047", - "2a02:26f7:dc81::/46": "20940", - "2a10:cc40:918::/46": "20473", - "2001:678:598::/48": "31010", - "240a:a064::/32": "142750", - "2804:34d8::/32": "265484", - "2804:41b8::/32": "267452", - "2a09:bac0:285::/48": "13335", - "2a0c:2f07:9459::/48": "206924", - "2401:d800:bb20::/41": "7552", - "2406:2000:ef66::/48": "10310", - "240a:ac37::/32": "145777", - "2607:9000:a000::/33": "11878", - "2800:300:8940::/40": "27651", - "2a10:c580::/29": "212041", - "2001:67c:c4::/48": "210138", - "2001:df5:6a00::/48": "133742", - "2408:8456:f040::/40": "17816", - "2600:1404:1001::/37": "20940", - "2803:b8c0::/32": "264790", - "2a02:2e02:2590::/38": "12479", - "240a:abdf::/32": "145689", - "2a02:2e02:8d90::/38": "12479", - "2a09:1500:13::/48": "208175", - "2a10:ac80::/31": "29405", - "2001:67c:1b78::/48": "61411", - "2001:4802::/32": "27357", - "2401:d800:7480::/41": "7552", - "2804:7adc::/33": "262674", - "2a00:126f::/32": "57472", - "2a02:26f7:e801::/46": "20940", - "2a06:cd40:cafe::/47": "43927", - "2001:579:7114::/41": "22773", - "2604:bc40:6110::/48": "14618", - "2804:4ebc::/32": "268279", - "2a02:26f7:ed84::/48": "36183", - "2a02:ee80:412d::/43": "3573", - "2a07:9540::/29": "206141", - "2408:8256:2d6d::/43": "17623", - "2a01:198::/32": "34225", - "2a02:26f7:b9a5::/43": "20940", - "2a0d:9340::/37": "35761", - "2a0e:b107:470::/44": "138006", - "2a02:26f7:d385::/46": "20940", - "2001:67c:15d0::/48": "52201", - "240a:a071::/32": "142763", - "240a:a386::/32": "143552", - "240a:a69a::/32": "144340", - "2804:14d:fc40::/44": "28573", - "2a00:1c88:101::/48": "208685", - "2a02:26f7:c200::/48": "36183", - "2401:d800:d570::/40": "7552", - "2607:f128:1::/37": "32748", - "2804:1998::/32": "61805", - "2a05:ccc0::/29": "209288", - "2402:8400:900::/40": "17820", - "2403:8600:8000::/44": "45820", - "2408:4000::/28": "37963", - "2606:2800:4a24::/46": "15133", - "2610:20:8c20::/44": "3477", - "2620:67:a000::/48": "6491", - "2804:214:8558::/38": "26615", - "2a05:dfc7:30::/48": "36351", - "2600:1409:12::/48": "20940", - "2800:160:145c::/42": "14259", - "2804:11c::/32": "28357", - "2a06:4580::/29": "197890", - "2806:2f0:3564::/43": "17072", - "2001:559:332::/47": "7922", - "2001:ee0:c640::/39": "45899", - "2401:f9c0:1111::/48": "132383", - "240e:473:8150::/40": "4134", - "2804:2078::/32": "264492", - "2804:39d4::/32": "266053", - "2804:824c::/35": "272511", - "2a0b:e40:1::/46": "205809", - "2402:ef03:b::/45": "7633", - "2801:96:fff7::/48": "28586", - "2803:c200:c200::/48": "22411", - "2a10:2f00:13f::/48": "212996", - "2406:f400:120::/44": "134451", - "2605:4840:3::/48": "63473", - "2607:f380:829::/41": "2152", - "2804:154c:4407::/44": "263382", - "2a00:dd0:bbbc::/33": "47869", - "2001:550:bb02::/33": "174", - "2001:559:8663::/45": "7922", - "2400:1f00:b0::/48": "45769", - "2600:1419:d801::/34": "20940", - "2804:1e90:a180::/33": "264436", - "2001:448a:4070::/35": "7713", - "2404:130::/32": "24226", - "2602:fd75:1::/46": "46793", - "2c0f:f148::/32": "37542", - "2001:4b27:ffff::49/48": "34288", - "2408:80fa:62c0::/42": "17622", - "2409:8904:53b0::/37": "24547", - "240a:a53c::/32": "143990", - "2a02:2a8::/32": "29655", - "2a02:ebc0::/29": "52126", - "2001:1248:98fb::/45": "11172", - "240a:af00::/32": "146490", - "2602:fccd::/36": "397898", - "2607:f6f0:1001::/48": "394749", - "2a02:26f7:f6dc::/48": "36183", - "2001:49f0:a017::/44": "174", - "2403:9800:c049::/45": "133124", - "2407:9d00::/32": "45179", - "2409:8074:2100::/35": "9808", - "2a02:ee80:4161::/45": "3573", - "2a00:e200::/40": "41313", - "2604:880:207::/43": "29802", - "2a03:25e0:200::/40": "16376", - "2a11:5080::/29": "60935", - "2001:67c:1944::/48": "61430", - "2001:ee0:9e40::/39": "45899", - "2001:1248:97ed::/46": "11172", - "2001:43f8:b61::/48": "328010", - "2804:49c:3106::/48": "15201", - "2804:6e00::/32": "270569", - "2a09:3345::/30": "209509", - "2804:14d:6882::/47": "28573", - "2a02:28:5::/48": "28884", - "2409:8a53:f00::/35": "56047", - "2a10:ac40:2::/48": "397349", - "2606:ae00:beb1::/41": "7287", - "2a02:2088:1000::/36": "57564", - "2001:67c:26b4::/48": "57672", - "2403:fa00::/32": "9474", - "2a00:c6e0::/32": "12552", - "2400:3b00:20::/48": "18229", - "2600:100a:a000::/44": "6167", - "2a03:9120::/32": "43232", - "2a0d:4280::/29": "204630", - "2409:804f:3100::/36": "9808", - "240a:a461::/32": "143771", - "2605:a401:805e::/42": "33363", - "2a0e:b107:1182::/47": "210925", - "2001:559:c0b8::/46": "20214", - "2800:160:1ff2::/45": "14259", - "2a01:190:15e9::/48": "28848", - "2a05:fb40::/32": "208861", - "2001:67c:1988::/48": "198333", - "2001:4cb8:40b::/48": "49685", - "2405:1500::/42": "58717", - "240a:a7b7::/32": "144625", - "2600:140f:1801::/39": "20940", - "2a02:6800::/32": "43205", - "2a03:3ac0::/32": "57077", - "2001:13c7:7010::/48": "52224", - "2402:800:5b63::/43": "7552", - "2405:6940::/48": "139178", - "2408:8459:e630::/41": "17622", - "240a:adce::/32": "146184", - "2600:1015:9010::/39": "6167", - "2409:802f::/34": "56041", - "240e:3b4:1400::/38": "134773", - "2600:6c54::/30": "20115", - "2a02:26f7:f304::/48": "36183", - "2001:559:841d::/48": "33657", - "2404:b300::/48": "59318", - "240a:aacc::/32": "145414", - "2804:aac::/33": "52905", - "2804:f78:cecf::/34": "263587", - "2001:67c:1030::/48": "3257", - "2402:800:56ee::/39": "7552", - "2409:8a28::/33": "56041", - "2803:8920:7000::/32": "266673", - "2a02:7f40::/32": "20860", - "2001:df3:6500::/48": "55379", - "2a03:a860:51::/48": "397192", - "2c0f:eba0::/32": "328596", - "2001:67c:2bc0::/48": "3301", - "2607:fb90:c150::/48": "16509", - "2806:230:403b::/48": "11888", - "2401:d800:b030::/41": "7552", - "2401:d800:f920::/41": "7552", - "2409:8904:30a0::/38": "24547", - "2a00:1d36:c00::/40": "47331", - "2a0f:3240::/29": "60262", - "2001:4878:8007::/44": "12222", - "2804:23e4::/42": "264191", - "2a00:1138:7400::/32": "43782", - "2a02:26f0:4901::/40": "20940", - "2001:559:21f::/48": "33491", - "2001:559:2a8::/48": "7015", - "2001:559:8351::/48": "13367", - "2402:800:31c5::/43": "7552", - "2405:f600:80::/42": "45117", - "2803:a9a0::/32": "267709", - "2804:5214::/32": "268493", - "2001:67c:730::/48": "60754", - "2604:980:7004::/47": "21859", - "2804:2898::/32": "28305", - "2804:47a4::/37": "267067", - "2001:550:300:1::/48": "174", - "240a:af2c::/32": "146534", - "2803:9800:9995::/46": "11664", - "2a03:d780::/32": "49770", - "2a10:d200::/29": "212323", - "2001:4b20:100:668::/48": "34288", - "240a:a5fe::/32": "144184", - "240a:aa5d::/32": "145303", - "240a:ac9d::/32": "145879", - "2607:fd48:3000:100::/32": "13536", - "2a00:97c0::/32": "13243", - "2a09:be40:ba02::/48": "137909", - "2c0f:ef30::/32": "328334", - "240a:acc3::/32": "145917", - "2a0b:6940::/29": "49573", - "2001:43a8::/32": "22351", - "2401:3400:9000::/33": "45352", - "2408:8956:a100::/40": "17816", - "2408:8956:fe00::/39": "17816", - "240a:a3f7::/32": "143665", - "2804:3ab4:7100::/32": "266104", - "2604:6600:fd01::/40": "40676", - "240a:ac38::/32": "145778", - "2604:6d00:1000::/48": "36223", - "2a0f:607:1052::/48": "212425", - "2001:559:c28e::/48": "7922", - "2402:800:97b7::/41": "7552", - "2409:8078:2100::/36": "9808", - "2408:84f3:a640::/36": "17816", - "240e:108:2d::/48": "136197", - "2600:8807:c722::/40": "22773", - "2001:3c8:4007::/48": "137241", - "2602:fed2:711c::/48": "53356", - "2001:1b70:83::/48": "32094", - "2409:8d7d::/30": "9808", - "240a:ab0c::/32": "145478", - "2c0f:f478::/32": "327892", - "2401:d800:900::/42": "7552", - "2409:803d:2900::/38": "24444", - "240a:a202::/32": "143164", - "2600:9000:f110::/48": "16509", - "2a01:7d0::/32": "8612", - "2a02:26f7:db89::/46": "20940", - "2001:559:82b6::/48": "7922", - "2607:6700::/32": "40464", - "2a02:2000:facf::/29": "35297", - "2a02:26f7:dc89::/46": "20940", - "2a09:1b80::/29": "203959", - "2001:67c:1798::/48": "51744", - "2a0b:33c0:6::/48": "57395", - "2402:e380:e000::/35": "201106", - "2001:559:8722::/47": "33657", - "2001:568::/37": "852", - "2a01:bb20::/35": "61969", - "2001:67c:1134::/48": "205915", - "2405:100::/39": "9905", - "2405:2500:25::/46": "136565", - "240a:a4ad::/32": "143847", - "2620:101:d000::/45": "53582", - "2a02:26f7:dc08::/48": "36183", - "2a10:bb00::/29": "47864", - "2001:67c:2844::/48": "51458", - "2400:4d40:2::/38": "134204", - "2405:ce00::/32": "7575", - "2a00:1d58:7400::/36": "47524", - "2a03:4b40::/33": "50710", - "2001:9e8::/34": "8881", - "2402:e580::/44": "40138", - "2a00:74a0::/32": "20904", - "2001:579:40fc::/46": "22773", - "2001:df0:9d80::/48": "139221", - "2001:fd8:31b0::/44": "4775", - "2401:d800:7990::/42": "7552", - "2604:4500:100::/40": "29802", - "2604:d600:698::/45": "32098", - "2401:d800:58e0::/39": "7552", - "2606:62c0:3230::/48": "399686", - "2001:418:1401:3::/64": "2639", - "2402:7840::/32": "206264", - "2a03:f80:971::/48": "9009", - "2a09:7:2001::/48": "43992", - "2001:550:b001::/37": "174", - "2001:4490:7800::/46": "9829", - "2407:6640::/40": "142275", - "2407:ed00:1f00::/32": "9587", - "240a:a556::/32": "144016", - "240a:ac39::/32": "145779", - "2a0e:97c0:f00::/40": "20473", - "2001:559:c065::/48": "33652", - "2602:fffa::/36": "29889", - "2a02:4840:200::/47": "60567", - "2001:3c8:2706::/48": "4621", - "2001:559:1d3::/48": "33287", - "2001:4d78:1300::/40": "15830", - "2400:adc2:600::/39": "9541", - "2405:6400::/35": "23678", - "2600:1403:8c01::/35": "20940", - "2a01:190:15ee::/48": "28839", - "2a0e:b107:db1::/48": "212987", - "2600:1417:6f::/48": "20940", - "2607:f358:25::/48": "398826", - "2804:4d3c:a38::/41": "267420", - "2401:d800:7db0::/41": "7552", - "2600:1417:38::/48": "24319", - "2a02:2230:6300::/37": "25467", - "2a02:26f7:dc4c::/48": "36183", - "2804:3d4:1a::/42": "262401", - "2a02:4722::/29": "201333", - "2c0f:f140:a000::/33": "327700", - "2804:7f2c::/32": "271671", - "2a00:1e6a:7a::/32": "49373", - "2a02:5a60::/32": "12685", - "2001:df5:1700::/48": "18196", - "2405:7f00:81a0::/38": "133414", - "2a00:1850:2e1::/45": "29357", - "2a07:a6c0::/29": "3267", - "2a0b:2900:2100::/41": "48582", - "2001:470:a5::/43": "6939", - "2001:67c:26ec::/48": "6908", - "2600:141b:6001::/36": "20940", - "2604:ae80:1000::/36": "11904", - "2804:14c:4700::/40": "28573", - "2a01:6b80::/32": "8887", - "2a02:26f7:e2c4::/48": "36183", - "2001:559:c0fa::/48": "21508", - "240e:44::/33": "140061", - "2a02:5a0::/29": "9063", - "2a09:6a80::/48": "50007", - "2001:b012::/26": "3462", - "2408:8256:396b::/48": "17816", - "240a:a244::/32": "143230", - "2604:ca00:f00a::/45": "36492", - "2610:120:aab::/32": "33606", - "2406:c800:e001::/35": "38016", - "2800:8a0:a000::/36": "5722", - "2804:9e0::/32": "262999", - "2806:2eb::/32": "265524", - "2a02:2ab0:410::/42": "702", - "2a09:9340::/29": "209824", - "2a0c:55c0:1::/48": "43009", - "2a0c:9a40:8180::/48": "212983", - "2600:370f:2083::/42": "32261", - "2606:2800:6037::/48": "14153", - "2804:50e4::/32": "268417", - "2804:5d60::/32": "268968", - "2a03:a660::/32": "203441", - "2a0e:68c0::/48": "34907", - "2401:d800:b8b0::/41": "7552", - "2001:559:7e2::/48": "33657", - "2a00:d80::/29": "35518", - "2001:fd8:f1c0::/42": "132199", - "2400:6280:113::/45": "132280", - "240e:3bd:1400::/38": "134773", - "2800:d300::/33": "11830", - "2a0b:e680::/29": "49601", - "2001:310:9001::/33": "4694", - "2604:ca00:1000::/48": "36492", - "2605:6ac0:1000::/36": "13789", - "2408:84ee:c000::/27": "4837", - "2408:8956:3d00::/40": "17816", - "2800:bf0:251::/42": "27947", - "2803:db00:a81::/32": "262234", - "2a03:9fc0:1::/46": "200820", - "2001:559:c329::/48": "33659", - "240a:abf0::/32": "145706", - "2800:484:bb00::/40": "10620", - "2804:1b4c::/32": "61720", - "2804:4dcc::/33": "52856", - "2401:d800:5390::/42": "7552", - "240e:44d:7e00::/41": "140345", - "2603:c024:c000::/35": "31898", - "2607:da00::/39": "15164", - "2806:2f0:9161::/48": "17072", - "2600:140f:a401::/38": "20940", - "2a05:1000::/47": "201675", - "2001:559:807f::/48": "7016", - "2409:8907:7b20::/37": "24547", - "2604:4580::/38": "26375", - "2a04:f580:80a0::/48": "4134", - "2001:1688::/29": "3212", - "2402:800:61b8::/38": "7552", - "2600:3400::/30": "4181", - "2607:fad8:c8::/32": "22652", - "2804:1eec::/32": "264455", - "2804:73b4:4000::/32": "270932", - "2a09:6640::/29": "13135", - "2001:a98:8000::/48": "9095", - "240e:e2:2000::/31": "4134", - "2a06:c0c0:2::/29": "41018", - "2409:807e:1900::/34": "9808", - "2600:1002:9110::/36": "22394", - "2804:3614::/32": "266325", - "2a02:2e02:1700::/40": "12479", - "2400:1480::/48": "132425", - "2405:9800:9806::/43": "45430", - "2605:59c0:8000::/33": "36492", - "2804:4c5c:f7c0::/36": "267366", - "2a05:fe80::/29": "39702", - "2a0e:bb80::/30": "58317", - "2402:5300:2110::/38": "45903", - "2409:8a50:500::/38": "56047", - "2606:2800:4226::/44": "15133", - "2804:2e34::/32": "265331", - "2a04:880:afff::/29": "43623", - "2a07:ad40::/29": "206772", - "2407:8100:3::/48": "58436", - "2804:3300::/32": "61587", - "2804:6948::/32": "270260", - "2001:559:7ed::/46": "7016", - "2001:df6:4b00::/48": "135226", - "2605:6c80:2::/48": "14935", - "2a03:9ba0:201::/46": "209082", - "2a0a:67c0::/29": "212796", - "2400:8b00:2000::/42": "45727", - "2600:1002:9000::/44": "6167", - "2600:1413:9001::/34": "20940", - "2620:101:900c::/47": "40934", - "2804:145c:f001::/36": "263327", - "2804:2514::/36": "264259", - "2404:34c0::/46": "138536", - "2a01:c50f:98c0::/37": "12479", - "2c0f:fdf8::/32": "37028", - "2a0f:c081:b11e::/48": "48108", - "2400:a980:5900::/37": "133111", - "2404:8000:79::/40": "17451", - "240a:aa88::/32": "145346", - "2600:1014:a100::/44": "6167", - "2607:a480::/32": "395512", - "2a00:1ba0:2::/48": "6720", - "2a03:4c0::/32": "15405", - "2401:f000:9::/43": "38477", - "2600:1010:b130::/41": "22394", - "2600:1408:d400::/48": "36183", - "2a00:a9a0::/32": "198721", - "2406:840:7::/48": "139317", - "2408:84f3:f890::/37": "17816", - "2602:fd23:1::/48": "62788", - "2a05:d050:a080::/44": "16509", - "2001:fd8:b180::/44": "132199", - "2401:ee00:12a::/43": "23951", - "240e:49:9400::/30": "4134", - "2803:2a01:8400::/48": "27895", - "2a09::/48": "6233", - "2001:1b10::/32": "29259", - "2402:5680::/36": "133798", - "2404:bf40:e006::/40": "139084", - "240a:ab46::/32": "145536", - "2a00:d700::/32": "56438", - "2a02:26f7:b1::/45": "20940", - "2a02:26f7:e3c8::/48": "36183", - "2001:df0:4b00::/48": "9723", - "2602:ff96:17::/48": "35913", - "2607:f110:e060::/39": "21889", - "2401:d800:22c0::/42": "7552", - "2001:559:84ab::/48": "22258", - "2001:678:b8c::/48": "57498", - "2001:dd8:14::/47": "30133", - "2001:ee0:eb00::/40": "45899", - "2001:fd8:ff00::/40": "132199", - "2001:44b8:406b::/48": "4739", - "2401:bcc0::/48": "133311", - "2404:39c0::/32": "138539", - "2804:11bc:8000::/38": "263435", - "2804:4bc:4001::/35": "262462", - "2001:559:110::/48": "33657", - "2001:559:c16f::/48": "33657", - "2001:678:d::/48": "49488", - "2001:c90::/32": "9595", - "2408:8459:ca30::/41": "17622", - "240e:473:ab20::/41": "140486", - "2620:52:6::/47": "21785", - "2a03:1160::/40": "201727", - "2a04:3f83:45::/44": "9120", - "2001:559:4d5::/48": "33657", - "2600:140f:c401::/38": "20940", - "2a07:4300:1609::/48": "209622", - "2a10:3244::/30": "398481", - "2001:67c:2200::/48": "50620", - "2402:800:9b71::/40": "7552", - "240a:ad7f::/32": "146105", - "2600:1405:7801::/32": "20940", - "2a07:de40:1000::/38": "29298", - "2001:67c:1b24::/48": "30931", - "240a:a657::/32": "144273", - "240a:a66e::/32": "144296", - "2001:1310:3121::/48": "26610", - "2001:4888:8020::/46": "22394", - "2402:800:547f::/40": "7552", - "2604:d600:1065::/43": "32098", - "2804:d3c:8110::/33": "52613", - "2001:520:1001::/48": "8103", - "2400:ca02:f122::/43": "23688", - "2400:cb00:346::/47": "13335", - "2409:8e80:9000::/34": "56040", - "240a:a4f6::/32": "143920", - "2620:1d4:501e::/47": "19726", - "2804:c6c:8103::/45": "52704", - "2804:1e2c::/40": "264412", - "2804:31f0::/32": "265046", - "2001:57a:e0e0::/36": "22773", - "2604:d600:132f::/43": "32098", - "2a01:abc0::/32": "12709", - "2a02:fa0::/32": "35191", - "2a03:9e41::/32": "32611", - "2a0c:ff00:2::/29": "204975", - "2001:559:56f::/48": "7016", - "2405:e000:1421::/32": "37963", - "2600:140b:4c00::/48": "31109", - "2605:f440:caff::/34": "54874", - "2607:fcd0:fa80:5d01::/54": "8100", - "2a02:26f7:e8c5::/46": "20940", - "2804:7f00::/32": "271660", - "2620:1ec:8f8::/45": "8068", - "2804:1ca8::/32": "61667", - "2804:2820::/32": "263942", - "2001:df3:fd80::/48": "140442", - "2804:4e1c::/32": "268240", - "2804:5330::/32": "174", - "2a02:ee80:41b6::/41": "3573", - "2400:3840::/33": "23860", - "2804:30dc::/32": "264977", - "2a02:2698:6c00::/38": "51570", - "2a02:26f7:b845::/46": "20940", - "2001:67c:187c::/48": "41496", - "2400:adc7:1800::/39": "9541", - "2403:9800:c031::/44": "4648", - "2804:310c::/32": "264989", - "2a00:d2a0::/29": "15600", - "2a00:fc00::/32": "3255", - "2a0e:97c1:f14::/47": "20473", - "2001:559:827f::/48": "33652", - "2a0b:1b00::/29": "49544", - "2001:c20:486c::/46": "9255", - "2409:8027:2907::/38": "9808", - "2409:8924:4500::/38": "56046", - "240e:3bb:f100::/36": "4134", - "2606:5080::/32": "63343", - "2a02:26f7:ec54::/48": "36183", - "2001:678:b94::/48": "34601", - "2620:0:8a0::/48": "3495", - "2a00:1851:3e21::/39": "29357", - "2404:e680:1102::/42": "18409", - "2603:c002:8150::/38": "31898", - "2806:2f0:2401::/46": "22884", - "2a06:1c5:e6::/36": "207455", - "2a0a:3140:600::/46": "15532", - "2001:550:30f::/37": "174", - "2402:800:569b::/41": "7552", - "2409:8c85:aa02::/48": "38019", - "240a:a619::/32": "144211", - "2804:2984::/32": "53184", - "2a00:86c0:2096::/32": "2906", - "240a:a3c9::/32": "143619", - "2620:0:7f00::/48": "395262", - "2804:4ae0::/39": "267269", - "2a06:cdc0:2006::/44": "49941", - "2a09:4b44:1::/30": "61317", - "2a05:f507:72::/48": "13443", - "2001:1260:113::/44": "13591", - "2001:4490:d000::/46": "9829", - "2408:8256:1196::/37": "17622", - "240e:30d:4a00::/35": "137688", - "2600:100a:9010::/40": "22394", - "2801:80:1a90::/48": "265490", - "2a04:4e42:7a::/45": "54113", - "2a0e:8f02:f00d::/48": "212360", - "2a10:1180::/31": "212181", - "2001:559:8505::/48": "7015", - "2001:678:e8::/48": "41088", - "2401:ff80:1811::/46": "133954", - "2405:600:3::/35": "55805", - "2804:317c::/32": "265018", - "2804:49e8::/32": "267208", - "2806:20d:5807::/39": "32098", - "2602:ffe4:c3e::/41": "21859", - "2606:b400:8004::/48": "792", - "2607:f9e0::/36": "17113", - "2804:f58::/32": "263581", - "2001:678:91c::/48": "206671", - "2001:df1:f080::/48": "139776", - "240a:a4bf::/32": "143865", - "2607:fc18::/36": "13706", - "2001:67c:1090::/48": "199178", - "240e:44d:2b00::/41": "140345", - "2605:dd40:8224::/47": "398549", - "2800:160:132e::/43": "14259", - "2a01:9c00::/32": "44567", - "2a01:ce9e:1000::/31": "51964", - "2602:fcf6:105::/48": "210930", - "2a06:c400::/44": "51559", - "2400:cb00:302::/48": "395747", - "2401:d800:f6a0::/41": "7552", - "2401:ff80:1203::/45": "133954", - "2404:f4c0:ff0f::/48": "139247", - "2406:7400:48::/46": "131269", - "240a:a6e7::/32": "144417", - "2a09:dec0::/29": "43424", - "2600:380:6900::/35": "20057", - "2001:678:90c::/48": "20473", - "240a:a23f::/32": "143225", - "2600:1406:31::/48": "20940", - "2a02:26f0::/48": "20940", - "2a02:4180::/32": "42334", - "2402:5ac0::/36": "137409", - "2a04:2b00:119::/48": "206925", - "2a07:e01::/32": "210083", - "2a02:1400::/26": "2119", - "2001:559:c3e1::/48": "33660", - "2402:800:9971::/44": "7552", - "2408:8256:398e::/43": "17623", - "240a:a6a2::/32": "144348", - "240e:5a:4540::/40": "140297", - "2602:ff44::/36": "393524", - "2a02:1e0::/29": "39102", - "2a07:f400::/29": "207584", - "2402:8100:259e::/42": "55644", - "240a:a7fa::/32": "144692", - "2607:fcf0:104::/32": "13445", - "2a02:26f7:ef04::/48": "36183", - "2a05:f740::/29": "206119", - "2401:ff80:1993::/38": "133954", - "2404:2f40::/32": "133938", - "240e:3:8002::/36": "134761", - "2804:56e0:40::/32": "268029", - "2a03:1840::/46": "51248", - "2a0d:77c7:748a::/36": "7489", - "2804:44dc::/32": "267658", - "2001:559:7d8::/46": "7922", - "2001:559:8358::/48": "21508", - "2400:adc7:1000::/39": "9541", - "2402:800:fca0::/39": "7552", - "240a:a6c4::/32": "144382", - "240a:ab18::/32": "145490", - "2605:ef80:16::/42": "36492", - "2404:cc00:2223::/32": "24441", - "2a02:21e8::/32": "197036", - "2001:1218:6017::/44": "278", - "2402:4f00:9000::/33": "58453", - "2408:8456:8840::/39": "17816", - "2600:1406:a::/48": "35994", - "2600:6c38:7d::/40": "20115", - "2800:24::/32": "14187", - "2a00:c30::/32": "5391", - "2001:559:55a::/48": "33651", - "2001:559:80d6::/48": "33287", - "2001:44b8:6069::/48": "4739", - "2600:1009:d020::/34": "22394", - "2607:700:900::/35": "22343", - "2610:20::/37": "33343", - "2a00:dd8::/48": "31012", - "2001:559:33c::/48": "7016", - "2408:8256:398d::/48": "17816", - "2409:8914:6a00::/39": "56044", - "240e:37f:aa00::/39": "140330", - "2602:ffe4:c32::/48": "21859", - "2a06:bc40::/29": "203939", - "2a0a:d840::/29": "42383", - "2001:12a0:5000::/32": "28292", - "2001:4878:4220::/48": "12222", - "2402:6800:0:3014::/64": "7473", - "2607:f020:2000::/40": "40289", - "2407:d0c0::/32": "133434", - "2409:4012:3000::/29": "55836", - "2607:fb58:9000::/33": "36086", - "2001:df5:fd00::/48": "138034", - "2600:100d:9000::/44": "6167", - "2a00:1ee0::/32": "41357", - "2a02:6c60::/32": "49223", - "2001:44b8:3082::/48": "7545", - "240e:3bb:dc00::/34": "4134", - "2607:f6f0:7002::/40": "27330", - "2620:65:8000::/46": "20306", - "2804:741c::/32": "270959", - "2806:2f0:5141::/42": "17072", - "2a02:26f7:c789::/42": "20940", - "2800:160:152e::/43": "14259", - "2404:4a00:7500::/64": "55423", - "2600:1002:a000::/44": "6167", - "2600:100a:b030::/40": "22394", - "2a00:1298:8017::/33": "5578", - "2001:ee0:324b::/37": "45899", - "2407:d300::/32": "17819", - "240e:183:8101::/46": "140647", - "2a02:26f7:f749::/42": "20940", - "2402:b800::/32": "7718", - "2600:6c38:8d2::/42": "20115", - "2a01:7a80::/29": "197301", - "2001:fd8:1e4::/46": "132199", - "2604:e580:ffff::/48": "2900", - "2a0b:6b81:3::/45": "42615", - "2a0c:4481:1::/46": "204720", - "2a0d:7c80::/32": "204425", - "2401:4900:4c10::/44": "45609", - "2804:568::/37": "262514", - "2a02:950::/30": "31229", - "2404:b740::/48": "18403", - "240a:ae80::/32": "146362", - "2600:1417:d801::/37": "20940", - "2806:230:302a::/48": "265594", - "2a11:a500::/32": "60505", - "2600:1012:b140::/42": "6167", - "2001:67c:173c::/48": "60481", - "2402:800:f9f0::/38": "7552", - "2402:c0c0::/32": "135071", - "2408:84f3:9a10::/42": "134543", - "2402:800:36e0::/44": "7552", - "240a:a888::/32": "144834", - "2803:2540:10::/40": "264668", - "2804:2d20::/32": "265263", - "2a05:f6c0::/29": "203953", - "2a00:1990::/32": "34442", - "2001:559:84df::/48": "33659", - "2001:1900:23ce::/35": "3356", - "2409:40f1::/30": "55836", - "240a:a13a::/32": "142964", - "2800:160:1d4d::/43": "14259", - "2804:51ec::/32": "268485", - "2804:7fa0::/35": "271699", - "2a02:46e0::/39": "60049", - "2405:6ac0::/32": "139736", - "2605:a404:cf4::/32": "33363", - "2803:af80:1100::/32": "263732", - "2804:5944::/32": "268180", - "2a00:1c10:cd0::/44": "50300", - "2001:550:8d02::/38": "174", - "2804:3404::/32": "52539", - "2806:101e:6::/44": "8151", - "2a02:26f7:c904::/48": "36183", - "2a03:6540::/32": "61316", - "2a01:c50f:b000::/40": "12479", - "2a02:26f7:b9c9::/42": "20940", - "2a07:b5c0::/29": "41046", - "2409:806c:3900::/27": "9808", - "240e:979:7e00::/40": "134770", - "2606:21c0::/32": "36698", - "2804:30fc::/46": "263009", - "2a0c:5244::/30": "208861", - "2800:110:301::/35": "4270", - "2a00:4802:3d00::/38": "13124", - "2a02:26f7:be04::/48": "36183", - "2a02:26f7:f7c8::/48": "36183", - "2001:559:346::/44": "33491", - "2001:559:766::/47": "33491", - "2409:8053:3002::/40": "56047", - "240e:1f:8002::/36": "4813", - "2600:140f:6800::/48": "9498", - "240e:473:3e50::/39": "4134", - "2001:559:2c2::/48": "7922", - "2001:d30::/46": "4717", - "2804:2b54::/32": "265147", - "2001:12f0:300::/48": "2716", - "2602:fd0d::/36": "47085", - "2a02:680:8000::/36": "20539", - "2a06:5240:1ff0::/44": "50629", - "2001:678:b48::/48": "208008", - "2401:1740::/39": "136600", - "2604:5cc0:100e::/36": "13351", - "2604:d600:1818::/39": "32098", - "2804:14d:5c21::/41": "28573", - "2a0c:da85::/32": "208861", - "2605:9600::/32": "62", - "2804:6790:8000::/34": "269636", - "2a00:54a0::/32": "50941", - "2a00:e300::/32": "43711", - "240e:438:8840::/38": "4134", - "2a02:26f7:de8d::/46": "20940", - "2a0a:4440::/32": "207242", - "2409:8904:e2b0::/31": "24547", - "2801:80:17a1::/43": "61580", - "2001:559:7d5::/48": "7015", - "2404:8d02:1045::/36": "10089", - "2804:8194::/32": "272463", - "2a02:970:1209::/41": "44002", - "2401:d100:d::/32": "18705", - "2405:2d00::/32": "58877", - "2606:ed00:2::/32": "47869", - "2a0e:cb80::/29": "44486", - "2a10:45c0::/32": "212808", - "2402:800:f380::/42": "7552", - "2404:1b00::/32": "55912", - "240a:a475::/32": "143791", - "2a02:26f0:d600::/48": "34164", - "2408:8256:3776::/44": "17623", - "240a:a9d4::/32": "145166", - "2803:9800:901c::/42": "11664", - "2a04:3280::/29": "21176", - "2a10:2f00:169::/48": "211665", - "2404:ef80::/48": "135944", - "2407:9000::/32": "24130", - "2408:8456:9000::/42": "17622", - "240e:3b8:7600::/39": "140313", - "2620:13a:c003::/43": "53356", - "2804:1b3:6000::/36": "18881", - "2804:4038::/32": "265945", - "2400:9800:11::/46": "24203", - "2408:8456:8240::/39": "17816", - "240a:a662::/32": "144284", - "2605:4a00:111::/44": "14361", - "2406:6e00:f03b::/41": "17457", - "2001:678:b30::/48": "41634", - "2001:4878:8010::/48": "12222", - "2600:1480:3000::/40": "33905", - "2a02:16e0::/32": "12703", - "2001:528::/32": "46742", - "2402:800:6239::/41": "7552", - "2409:807c:4100::/32": "9808", - "2600:140f:1600::/48": "9498", - "2a05:fdc2:a000::/29": "42313", - "2804:1b3:4000::/39": "18881", - "2a02:128:6::/48": "50765", - "2001:559:35c::/48": "33491", - "2408:8256:3b80::/44": "17623", - "2a06:cb00::/29": "203615", - "2a0d:1600::/32": "57354", - "240e:3b2:3e00::/33": "140308", - "2803:7260:21::/32": "52238", - "2804:6fc:c100::/36": "28158", - "2806:2f0:7201::/42": "17072", - "2a02:26f7:db8c::/48": "36183", - "2a0e:fd45:d30::/44": "207803", - "240a:a9c5::/32": "145151", - "2404:160:a440::/33": "10030", - "240a:a631::/32": "144235", - "2600:40ff:fffc::/46": "701", - "2a0b:9ec0::/32": "44330", - "2001:4878:a259::/48": "12222", - "2408:8456:ca40::/40": "17816", - "2409:8924:b00::/37": "56046", - "2602:ffa7::/36": "46378", - "2620:1d6:ffe::/47": "2571", - "2a0f:8740::/29": "34596", - "2401:d800:7ba0::/41": "7552", - "2402:b500::/48": "38203", - "2600:100f:d040::/34": "22394", - "2610:20:8808::/37": "3477", - "2806:230:3029::/48": "11888", - "2a02:2d8:1:780b::/32": "9002", - "2a02:2861::/32": "25255", - "2404:b300:11::/46": "131207", - "2800:160:1b28::/43": "14259", - "2804:25bc:21::/32": "264299", - "2804:26b0::/32": "263849", - "2620:0:360::/48": "14182", - "2800:160:1e9b::/42": "14259", - "2804:f84::/32": "263589", - "2a02:23c0::/32": "45011", - "2001:df2:e900::/48": "137035", - "2803:7410::/32": "271857", - "2401:ff80:1293::/39": "133954", - "2402:8d03:ffee::/48": "135008", - "2804:8178::/32": "272456", - "2a0e:8f02:1025::/41": "204446", - "2001:4878:220::/48": "12222", - "240e:44d:1680::/41": "4134", - "2804:dec::/32": "52527", - "2a0c:1a40:1::/48": "48362", - "2a0c:a9c7:177::/48": "42385", - "2a07:39c0::/29": "60111", - "2001:559:5ea::/48": "33651", - "2001:559:779::/48": "22909", - "2001:678:78c::/48": "12360", - "2401:4900:a80::/39": "45609", - "2620:138:3018::/45": "22604", - "2804:490:8600::/40": "265705", - "2a01:9700:126c::/46": "8376", - "2a0f:d500::/29": "201978", - "2409:805c:30b1::/41": "9808", - "240e:44d:2200::/41": "140345", - "2600:1005:9110::/34": "22394", - "2001:df6:c00::/48": "55451", - "240e:1d:4000::/36": "136190", - "2a03:16a0::/32": "15397", - "2a0a:340::/40": "48043", - "2001:67c:26d0::/48": "198476", - "2620:118:a004::/47": "26342", - "2a00:8740:10::/47": "49037", - "2001:2d8::/32": "9644", - "2001:13d2:811::/46": "7303", - "2001:4457:ff0::/48": "20940", - "2620:133:c000::/44": "22992", - "2a01:308::/32": "42009", - "2a02:26f7:bf08::/48": "36183", - "2a02:26f7:ed41::/46": "20940", - "2a02:7a00::/47": "39904", - "2408:84f3:f690::/36": "17816", - "240a:a505::/32": "143935", - "240e:44d:1d00::/41": "140345", - "240e:473:6800::/41": "140485", - "2604:d600:1554::/46": "32098", - "2a00:9460::/31": "47631", - "2a02:310::/32": "34106", - "2001:559:c298::/48": "33287", - "2403:2800::/47": "38566", - "2a05:f280::/29": "30884", - "2a0e:7d40:44::/44": "209833", - "2001:559:8564::/48": "33652", - "2001:67c:1950::/48": "29037", - "240a:a9ee::/32": "145192", - "240a:ae74::/32": "146350", - "2001:678:6e0::/46": "202329", - "2620:11a:c000::/43": "54113", - "2a01:4dc0:11::/42": "206618", - "2a02:26f7:9e::/48": "36183", - "2401:3b00::/32": "9363", - "2604:3d80:400::/40": "11030", - "2607:6980:3a70::/44": "32931", - "2a02:c200:2::/32": "51167", - "2804:21e4::/32": "264580", - "2a00:1120::/32": "34574", - "2a01:cd01:8080::/48": "28708", - "2804:45d8::/32": "266953", - "2806:230:4023::/48": "11888", - "2607:fb10:7012::/42": "2906", - "2001:559:541::/48": "33651", - "2400:8f80:ac::/48": "45638", - "2404:5580::/48": "213059", - "2405:6e00:2680::/44": "18291", - "240e:698:2100::/40": "4811", - "2600:1014:9000::/44": "6167", - "2605:1640:12:21::/32": "19681", - "2a03:5a00:a::/48": "198778", - "240e:3bd:7800::/39": "4134", - "2605:9d80:9023::/48": "4809", - "2610:a1:3034::/48": "12008", - "2a02:598:3334::/33": "43037", - "2a0b:40::/29": "205930", - "2401:fa00::/42": "45566", - "2402:d000:811d::/42": "9329", - "2604:6940::/40": "11006", - "2620:171:d1::/46": "42", - "2a00:d480::/32": "16246", - "2001:559:8795::/48": "33489", - "2001:1620:2015::/48": "35663", - "2409:8c50:ffff::/48": "9808", - "2a00:f41::/30": "43447", - "2001:4de0:4008::/48": "26769", - "2402:800:3de0::/44": "7552", - "2405:6e00:a00::/35": "133612", - "2602:feda:e30::/48": "147028", - "2604:d600:ca1::/45": "32098", - "2804:5c08::/32": "52548", - "2401:5400::/34": "4434", - "2405:6600:70a::/36": "45845", - "2a0c:e6c0::/29": "39259", - "240a:acd1::/32": "145931", - "2001:559:d7::/44": "7922", - "2001:559:8080::/45": "7922", - "2001:678:302::/48": "35684", - "2401:d800:bf50::/42": "7552", - "2406:3a40::/32": "131677", - "2409:8053:2002::/40": "56047", - "240a:a6b0::/32": "144362", - "2603:c020::/35": "31898", - "2604:880:5e::/48": "29802", - "2804:180::/32": "26615", - "2001:19f0:8000::/38": "20473", - "2001:44b8:4057::/48": "4739", - "240a:a972::/32": "145068", - "2600:1fa0:40c0::/44": "16509", - "2605:7840:2000::/36": "32482", - "2602:ff99::/46": "14333", - "2800:68:36::/48": "61468", - "2a00:1478::/32": "43190", - "2a04:ac00::/48": "56534", - "2a0d:7080::/29": "200322", - "2001:c20:c84c::/46": "9255", - "2407:d080::/32": "133120", - "2603:1061:7::/30": "8075", - "2a01:7e20::/31": "199805", - "2a0b:3cc0::/29": "48147", - "2a02:6900:8804::/48": "43898", - "2001:500:99::/46": "30133", - "2001:550:90a::/48": "32489", - "2001:4bd8:53::/29": "15725", - "2405:8740::/32": "46019", - "2804:1d48::/32": "264358", - "2804:2b64::/32": "265151", - "2806:230:2021::/48": "11888", - "2a02:e240::/29": "20676", - "2a06:afc0:1::/48": "58286", - "2001:1248:84dc::/46": "11172", - "2401:ff80:1b0f::/43": "133954", - "2600:9000:1148::/48": "16509", - "2a0c:1340::/29": "43260", - "2001:67c:12c0::/47": "202033", - "2403:9d40::/32": "137263", - "2409:802f:2a05::/48": "9808", - "240a:a557::/32": "144017", - "2620:135:7002::/48": "3356", - "2a0c:eb00::/32": "204983", - "2a0f:5707:ab2a::/48": "53356", - "2406:3800::/32": "24245", - "2620:fc:c000::/48": "64241", - "2a02:26f7:f54d::/42": "20940", - "2403:4c0:7800::/37": "56207", - "2408:8957:a500::/40": "17816", - "2804:f78::/32": "263587", - "2804:894::/32": "262379", - "2804:3b98::/32": "266159", - "2a02:ee80::/34": "3573", - "2a0f:9400:8011::/48": "207445", - "2409:4042:5000::/31": "55836", - "240a:a2c9::/32": "143363", - "2804:172c::/32": "263129", - "2a02:8300::/28": "16019", - "2a02:26f7:80::/48": "36183", - "2a02:26f7:bcc5::/46": "20940", - "2a07:a740::/29": "57795", - "2a0e:b704::/47": "210960", - "2401:d800:5e0::/38": "7552", - "2401:ff80:1813::/40": "133954", - "2603:90b9::/32": "10838", - "2c0f:f918:25c0::/32": "37002", - "2001:dce:5100::/48": "38064", - "2400:7e80::/32": "59258", - "2406:3000:43::/44": "4657", - "2607:f868:8008::/34": "20141", - "2001:678:318::/48": "51597", - "2001:1a11:84::/48": "42298", - "240a:a4b7::/32": "143857", - "2607:f7c0:8100::/34": "36444", - "2804:1698::/32": "263295", - "2804:6768::/32": "269626", - "2a03:4340::/32": "47279", - "2a0e:c80:743::/48": "40676", - "2001:67c:130c::/48": "41281", - "2400:9380:97c0::/44": "136167", - "2408:8957:bf00::/40": "17816", - "2800:300:8a00::/37": "27986", - "2806:2f0:9700::/36": "17072", - "2a02:26f7:aa::/48": "36183", - "2001:df2:a300::/48": "6336", - "2001:df5:3180::/48": "135905", - "2405:e100::/43": "132116", - "2804:884:2::/32": "262375", - "2a06:c3c0::/48": "52048", - "2a0f:60c0::/29": "6673", - "240a:a6d0::/32": "144394", - "240a:af20::/32": "146522", - "2a0a:aec0::/29": "6830", - "2400:bf40::/32": "135003", - "2800:26f::/32": "19429", - "2804:14d:5cbd::/41": "28573", - "2a04:f580:8010::/47": "4134", - "2a0c:c080::/29": "57866", - "240a:a883::/32": "144829", - "2001:67c:2b10::/48": "60275", - "2001:448a:1050::/42": "7713", - "240a:adc9::/32": "146179", - "2605:6500::/48": "26512", - "2801:154:10::/42": "266669", - "2804:5374::/32": "268585", - "2402:800:540f::/43": "7552", - "2404:8d00:1410::/36": "24378", - "2a03:ffc0::/32": "199354", - "2a05:1080:40::/48": "61004", - "2001:7fc::/48": "211321", - "240e:5a:7000::/29": "4134", - "240e:473:3650::/39": "4134", - "2600:380:ea00::/37": "7018", - "2606:62c0:3530::/48": "399686", - "2610:18:8802::/33": "2828", - "2a02:2498:8100::/33": "13213", - "2402:800:5363::/43": "7552", - "2409:8008:d9::/36": "24547", - "240e:438:3c20::/43": "140647", - "2801:80:1c80::/48": "266161", - "2001:67c:2d9c::/48": "29436", - "2800:160:1dd2::/45": "14259", - "2001:67c:434::/48": "8422", - "2606:5200::/32": "32477", - "2a02:26f7:d585::/46": "20940", - "2a03:3f00::/47": "21245", - "2a07:cb40::/29": "28999", - "2a09:cd45::/30": "202448", - "240a:aad5::/32": "145423", - "2602:ff23::/48": "398019", - "2620:12d:400b::/45": "395853", - "2804:1410::/32": "262360", - "2804:3270::/32": "265078", - "2806:230:601c::/48": "265594", - "2a02:26f0:1e01::/34": "20940", - "2001:fd8:61::/46": "4775", - "2600:140b:3400::/48": "31109", - "2804:2874::/32": "263962", - "2804:6c10::/32": "270443", - "2a00:1018::/37": "25394", - "2600:6c38:b47::/44": "20115", - "2603:c002:1a00::/42": "31898", - "2a01:8840:e1::/48": "207266", - "2a01:a8c0::/29": "44712", - "2804:1a80::/32": "262333", - "2a0f:c940::/29": "210107", - "2001:dc0::/35": "4777", - "2605:2a00::/32": "16532", - "2a00:8dc0:fffe::/47": "201029", - "2406:c500:ff4::/48": "58534", - "2408:8207:a840::/28": "4808", - "240a:a2f7::/32": "143409", - "240e:438:820::/43": "140647", - "2804:145c:8050::/40": "263327", - "2c0f:eca0::/32": "37415", - "2a04:a802::/39": "3549", - "2a06:ffc0::/29": "203376", - "2a07:6c80::/29": "27176", - "2620:100:6051::/40": "19679", - "2001:67c:1688::/48": "42632", - "2406:840:fd00::/48": "134993", - "2407:d140::/36": "8849", - "240a:a10a::/32": "142916", - "240a:a9d8::/32": "145170", - "2607:f220:402::/48": "30387", - "2620:f0:c00a::/48": "14148", - "2804:d8c:a09::/32": "52638", - "2a04:1200::/29": "33951", - "2001:559:702::/47": "7016", - "240a:a926::/32": "144992", - "2409:8915:4e00::/39": "56044", - "2606:2800:400b::/48": "14153", - "2620:0:ed0::/48": "22787", - "2804:2e94::/32": "52780", - "2804:591c::/42": "28370", - "2a05:9cc3::/29": "2116", - "2001:559:c313::/48": "33652", - "2603:c0f0:1210::/39": "6142", - "2800:440:106::/48": "27738", - "2a01:540::/33": "12389", - "2a03:1360::/32": "31736", - "240e:244:200::/40": "136195", - "2800:320:840c::/48": "27882", - "2a07:f00::/29": "203412", - "2001:559:8727::/44": "7922", - "2001:df0:273::/48": "58477", - "2001:df5::/48": "58869", - "2402:800:5a01::/44": "7552", - "2a0e:b107:12c0::/44": "141445", - "2402:800:528d::/43": "7552", - "2600:1406:a401::/36": "20940", - "2804:2298::/32": "264110", - "2a04:8240::/29": "6694", - "2001:559:8292::/48": "33657", - "2403:b300:ff01::/40": "16509", - "2001:67c:2d70::/48": "57118", - "2402:800:58e0::/44": "7552", - "2804:2a0::/38": "28272", - "2804:4c14:fb01::/37": "267348", - "2a03:c600::/32": "3262", - "2a05:d050:c0c0::/44": "16509", - "2406:840:fd07::/48": "134993", - "2409:805c:2c00::/35": "9808", - "2606:5580:c000::/38": "63242", - "2620:2e:40ce::/47": "394506", - "2001:67c:19c4::/48": "62159", - "240a:aeb5::/32": "146415", - "2804:2af0::/45": "265126", - "2806:230::/36": "11888", - "2001:559:8477::/48": "33659", - "240a:ad6f::/32": "146089", - "2602:fed3:1::/45": "19969", - "2a00:1d36:cc0::/38": "9121", - "2a02:26f0:c1::/46": "20940", - "2001:3c8:5505::/48": "137850", - "2001:44b8:406c::/48": "7545", - "2404:1f00:ffa8::/43": "55947", - "240a:a844::/32": "144766", - "2620:8b:c000::/48": "14382", - "2a0c:5e00::/32": "205053", - "2401:d800:b850::/40": "7552", - "2406:da1e::/36": "16509", - "2602:fed2:710a::/48": "53356", - "2604:2940::/32": "395719", - "2806:230:2035::/48": "11888", - "2405:9800:c903::/45": "45430", - "240a:af30::/32": "146538", - "2a02:26f7:dfc1::/46": "20940", - "2a11:6c0:caff::/29": "211083", - "2001:4528:9100::/37": "18101", - "2800:860:9::/48": "262197", - "2a05:e800:1::/48": "50881", - "2a0e:a180::/29": "208591", - "240a:a519::/32": "143955", - "2804:4244::/32": "267489", - "2a02:26f0:201::/39": "20940", - "2a02:26f7:eac5::/46": "20940", - "2a10:4580::/29": "398559", - "2408:8956:eb00::/40": "17816", - "2a03:5840:100::/48": "213073", - "2a0d:1c0::/29": "49095", - "2800:a40:a000::/35": "22080", - "2804:22e0::/32": "264128", - "2804:4a78:a200::/33": "267242", - "2a0a:9202::/29": "61317", - "2a0a:ce80::/29": "40970", - "2408:8000:a019::/33": "4837", - "240a:aceb::/32": "145957", - "240a:afbb::/32": "146677", - "2a02:1698::/32": "51127", - "2c0f:ef78:9::/48": "63293", - "2001:200::/37": "2500", - "240a:a513::/32": "143949", - "2600:1419:19::/48": "4230", - "2a06:a100::/29": "48685", - "2a0e:fd45:1000::/48": "207852", - "2001:559:2e7::/48": "33668", - "2405:f5c0::/48": "135932", - "2a05:7380::/29": "201283", - "2a06:5b80::/32": "207083", - "2c0f:eaa8::/32": "37540", - "2001:67c:3a8::/48": "51839", - "2a0d:f840::/29": "47489", - "240a:aacd::/32": "145415", - "2605:cf80::/32": "63297", - "2804:2428::/32": "264205", - "2a0f:6a40::/29": "29329", - "2800:160:1ddc::/42": "14259", - "2a00:c820::/32": "60330", - "2a02:26f7:e304::/48": "36183", - "2c0f:f528::/46": "327782", - "240a:aea1::/32": "146395", - "2800:70::/32": "27789", - "2a05:7640:21c0::/38": "174", - "2001:559:c1a9::/48": "7725", - "2605:2b40:4000::/34": "394851", - "2a01:6e00:a::/43": "43142", - "2a02:26f7:ca41::/46": "20940", - "2c0e:2200:8000::/33": "37457", - "2a10:2f00:10a::/48": "207632", - "2001:470:50::/48": "36791", - "2001:c20:4872::/47": "3758", - "2603:1062:2::/27": "8075", - "2804:2c84::/32": "265224", - "2a03:8a0::/32": "200691", - "2a03:ae60::/45": "202847", - "2a0e:b107:12d3::/48": "211358", - "2001:df1:bf00::/48": "136773", - "2001:df4:9800::/48": "38775", - "2801:144::/42": "264835", - "2803:6700:201::/46": "263210", - "2a00:e040:c0c::/48": "60436", - "2a04:15c0::/29": "34134", - "2a0d:3585::/32": "200303", - "2001:600::/32": "702", - "2001:67c:2bf4::/48": "39036", - "2001:1248:997a::/40": "11172", - "2401:d800:9f70::/40": "7552", - "2402:800:5471::/44": "7552", - "240e:473:aa50::/39": "4134", - "2a06:34c0::/29": "211873", - "2001:559:734::/48": "7016", - "2401:ff80:1509::/46": "133954", - "2607:fc48:bc4b::/48": "40009", - "2a0b:b600:110::/44": "43350", - "2c0f:fc98::/32": "37282", - "2405:5440::/48": "135905", - "240a:a07f::/32": "142777", - "240a:a73b::/32": "144501", - "2800:110:11::/38": "4270", - "2804:38cc::/32": "266502", - "2c0f:f6d0:8b::/42": "327687", - "2409:8771::/29": "9808", - "240a:a065::/32": "142751", - "2600:2c01::/36": "16695", - "2804:6188::/32": "269240", - "2a00:6180::/32": "29062", - "2a02:26f7:bec4::/48": "36183", - "2a09:c140:3::/48": "210079", - "2001:579:a17d::/40": "22773", - "2401:d180:2120::/48": "133865", - "2402:c000::/47": "9230", - "2600:140f:a801::/38": "20940", - "2804:640:112::/34": "262713", - "2001:df1:fe00::/48": "141107", - "2405:9800:b500::/38": "133481", - "240a:a15b::/32": "142997", - "2607:6480:6000::/35": "30377", - "2620:115:81::/46": "18888", - "2804:204:222::/47": "28186", - "2804:67e0::/32": "269656", - "2001:1388:5544::/46": "6147", - "2600:802:100::/48": "12234", - "2403:8700::/32": "132232", - "2a04:5b81:1fff::/48": "202265", - "2404:fd00:c::/32": "58552", - "240a:aac1::/32": "145403", - "2800:400:4000::/48": "27668", - "2a10:4646:a0::/48": "210864", - "2001:6d0:ffd4::/48": "43832", - "2001:16f8:4000::/48": "199522", - "2001:4408:4510::/36": "4758", - "2402:800:3355::/42": "7552", - "2803:3b80:2::/44": "263702", - "2a01:230::/45": "29182", - "240a:aa77::/32": "145329", - "2001:559:2c9::/48": "7015", - "2001:2030:c006::/28": "1299", - "240e:698:4400::/40": "134768", - "2804:23c0:2500::/32": "26218", - "2001:1af0:9021::/29": "13046", - "2402:800:3a7f::/40": "7552", - "240e:109:8043::/48": "63835", - "2a02:26f7:d3c1::/46": "20940", - "2001:df2:9980::/48": "139889", - "2607:f740:e03a::/48": "63911", - "2620:13d:c000::/48": "399086", - "2804:204:270::/39": "28186", - "2404:138:4004::/48": "9431", - "2607:7e80:f000::/36": "395354", - "2402:800:5d0f::/43": "7552", - "2409:408a:1000::/29": "55836", - "240a:a761::/32": "144539", - "2600:1403:6c01::/32": "20940", - "2801:18a::/44": "19429", - "2a02:26f7:cf88::/48": "36183", - "2001:559:c205::/48": "33491", - "2800:8e0:2::/32": "14259", - "2a10:e580:2000::/48": "399114", - "2001:49f0:a01a::/47": "174", - "2804:30b8::/40": "28154", - "2a02:26f7:bc81::/46": "20940", - "2a02:6b00::/36": "28757", - "2a07:8142::/36": "209677", - "2600:1410:3001::/33": "20940", - "2605:4d80::/32": "27626", - "2605:f500:202::/39": "1828", - "2803:7180:4000::/36": "21575", - "2a02:26f7:d6c2::/47": "20940", - "2a02:26f7:dcc8::/48": "36183", - "2402:3a80:1710::/46": "38266", - "240a:a26f::/32": "143273", - "2600:1008:b130::/44": "22394", - "2a02:ff0:2fc::/47": "12735", - "2804:7330::/32": "270901", - "2405:2200::/32": "55853", - "2409:8a14:7000::/32": "56044", - "240a:a3eb::/32": "143653", - "2602:ffc8:3e8::/34": "20278", - "2620:83:8001::/48": "63331", - "2804:c94::/32": "262720", - "2804:1b44::/32": "61717", - "2804:7704::/32": "271149", - "2a01:a280:103::/30": "35000", - "2a03:db80:3825::/33": "680", - "2a05:7880::/32": "209242", - "2c0f:fc89:8023::/43": "36992", - "2001:504:b::/48": "101", - "2607:f8f0:200::/48": "271", - "2001:559:3d2::/48": "33657", - "2404:e801:1008::/46": "55430", - "2604:ca00:106::/43": "36492", - "2804:4670::/32": "266989", - "2a01:77c0:1180::/47": "34848", - "2a02:888:0:605::/40": "47794", - "2001:500:200::/47": "394353", - "2001:67c:20d8::/48": "5603", - "2405:b000:411::/39": "6262", - "2409:803c:3100::/37": "9808", - "2620:105:3000::/44": "20109", - "2a02:2c8::/32": "44381", - "2a02:26f7:f9c1::/46": "20940", - "2001:678:900::/48": "39602", - "2001:c20:486a::/48": "9255", - "2001:c20:c838::/48": "3758", - "2400:c540:5::/42": "59238", - "240a:a91e::/32": "144984", - "2a00:1780:dc00::/40": "210213", - "2a02:26f7:b848::/48": "36183", - "2001:559:82e1::/48": "33651", - "2001:df6:1800::/48": "131755", - "2604:d600:1d0c::/38": "32098", - "2001:df5:3680::/48": "141381", - "240e:473:d50::/40": "4134", - "2620:13a:c011::/46": "53356", - "2801:80:1a50::/48": "265450", - "2001:550:4f02::/35": "174", - "2403:300:a04::/46": "6185", - "2408:8957:5e00::/40": "17622", - "2804:32e8::/32": "265104", - "2804:673c:2000::/40": "264598", - "240e:264:3000::/28": "4134", - "2620:11c:c000::/48": "54830", - "2a0c:15c0::/29": "59965", - "240a:a116::/32": "142928", - "2804:14d:5c9c::/42": "28573", - "2804:554::/32": "53143", - "2a00:8a03:8000::/43": "28723", - "2a0b:440:880::/32": "39921", - "2a0e:1d80:2::/45": "9009", - "2001:1248:9922::/43": "11172", - "2804:4324::/32": "267551", - "2a07:a905:ffe0::/46": "202297", - "2a0a:11c0::/29": "43129", - "240e:3ba:7a00::/32": "140313", - "2604:b180:40::/44": "23278", - "2610::/32": "11084", - "2804:7bf8:a000::/33": "271466", - "2a01:6ec0::/32": "198904", - "2a00:1dc8::/32": "34352", - "2a07:42c0::/29": "34670", - "2a0f:29c0::/30": "208256", - "240a:a33f::/32": "143481", - "2804:1e3c::/32": "264416", - "2a03:4bc0:3150::/47": "209454", - "2001:559:868c::/48": "22909", - "2001:678:630::/48": "197574", - "2001:129c::/33": "22356", - "2400:6c00::/32": "45838", - "240a:a214::/32": "143182", - "2607:f750:fe01::/46": "23473", - "2a02:2a70::/43": "702", - "2001:520:101c::/42": "8103", - "2603:c0fa::/35": "20054", - "2804:45fc:c002::/34": "266959", - "2a02:5500::/32": "40993", - "2604:4840::/32": "17252", - "2804:5444::/32": "268638", - "2a02:2430:40::/42": "59491", - "2a0e:b107:450::/45": "57883", - "2607:4880:e000::/36": "53508", - "2608:129:b::/48": "27064", - "2803:f00:680::/42": "262182", - "2804:4c14:bb01::/33": "267348", - "2a0d:d742::/45": "210036", - "2001:2e0:8000::/33": "9293", - "2409:8904:8340::/37": "24547", - "240a:a5da::/32": "144148", - "2803:8080::/32": "12180", - "2a0b:3240::/32": "24971", - "2402:800:fb70::/40": "7552", - "2407:a8c0::/32": "135772", - "2804:220c::/32": "264588", - "2a0e:aa06:11::/40": "4842", - "2001:579:9194::/38": "22773", - "2400:b000:300::/48": "45600", - "2602:fd98::/47": "14770", - "2800:bf0:a001::/36": "27947", - "2804:22c0::/34": "264120", - "2001:559:c15e::/48": "33657", - "2804:f8c:5000::/32": "263591", - "2804:7f20::/32": "271668", - "2a0c:9a40:82c0::/48": "211622", - "2a10:2680::/29": "212813", - "2804:3d58::/32": "266525", - "2a01:8840:a9::/48": "207266", - "2a01:9700:13e0::/44": "8376", - "2a05:3280:43a::/29": "50999", - "2a09:bac0:336::/47": "13335", - "2402:e7c0:840::/38": "59078", - "2405:9800:b012::/48": "45430", - "2600:1406:c801::/37": "20940", - "2606:3580::/32": "46450", - "2803:a10::/32": "265822", - "2804:ba8::/32": "52804", - "2a0e:97c0:520::/44": "57351", - "2001:559:c2c9::/46": "7922", - "2402:a0c0::/47": "137922", - "2408:8256:3194::/48": "17816", - "2a06:5bc0::/32": "56911", - "2a0e:2540::/29": "207902", - "2602:ff62:205::/46": "61317", - "2606:2800:4a7c::/46": "15133", - "2800:160:17fa::/45": "14259", - "2804:14d:a200::/40": "28573", - "2806:2f0:2101::/46": "22884", - "2806:2f0:3264::/40": "17072", - "2a06:8e40::/29": "15083", - "2405:3440::/44": "138311", - "2602:800:900f::/48": "16876", - "2602:ffc8:105::/38": "20278", - "2804:3e8::/47": "28663", - "2804:1e00::/32": "52566", - "2001:4c8:100e::/43": "15290", - "2001:4f8::/44": "1280", - "2404:2340:5000::/36": "134926", - "240a:adf7::/32": "146225", - "2804:5c38::/32": "268895", - "2a01:8840:fa::/48": "12041", - "2804:2f30::/33": "53096", - "2a02:26f7:c501::/46": "20940", - "2402:5300:2040::/39": "45903", - "2604:3400:aaac::/48": "209453", - "2610:28:5030::/48": "13371", - "2806:10b0::/32": "8151", - "2a02:26f7:d284::/48": "36183", - "2001:559:719::/48": "395680", - "2401:4900:4450::/42": "45609", - "2402:6800::/50": "22822", - "2804:2928::/32": "52951", - "2401:6bff:8000::/40": "9466", - "2404:e80::/32": "134697", - "2600:6c38:b0c::/47": "20115", - "2803:c640::/32": "263834", - "2409:8904:3f60::/33": "24547", - "2a01:9700:13c0::/46": "8376", - "2600:6c0c::/31": "20115", - "2804:6a20::/32": "270311", - "2a04:1bc3::/32": "60982", - "2a09:1cc0::/29": "208574", - "2a10:1fc0:1::/48": "59711", - "2001:559:858d::/46": "22909", - "2402:e380:314::/48": "140244", - "2409:8080:2a20::/44": "9808", - "2606:6680:13::/48": "64249", - "2620:1ec:900::/48": "8068", - "2804:698c::/32": "270277", - "2a01:540:b000::/33": "12389", - "2c0f:f9a0:1000::/48": "37098", - "2001:559:811e::/48": "33657", - "240a:a722::/32": "144476", - "2605:ab80::/32": "46792", - "2a00:1a28:1107::/41": "42708", - "2a00:4d80::/32": "25394", - "2a05:18c0::/29": "3257", - "2a0d:b400::/29": "60695", - "2001:559:c244::/48": "33652", - "240a:a7be::/32": "144632", - "240e:690::/29": "4134", - "2600:180b:2002::/33": "16552", - "2607:4f80::/32": "7029", - "2a0a:d340::/29": "56616", - "2001:559:c01e::/48": "7922", - "2a01:8000:1ffb::/48": "60672", - "2a0e:8f02:20fa::/45": "212008", - "2001:43f8:10::/48": "36948", - "2804:14c:3d88::/41": "28573", - "2001:559:c331::/48": "33657", - "2408:84f3:3e10::/42": "134543", - "2600:1406:801::/38": "20940", - "2804:7b8c::/32": "271438", - "2c0f:fc89:12f::/33": "36992", - "2001:559:523::/48": "7016", - "2804:5988::/32": "268708", - "2a02:26f7:f009::/42": "20940", - "2001:503:f261::/48": "26134", - "2001:550:2a02::/39": "174", - "2001:559:5a8::/48": "33287", - "240a:a302::/32": "143420", - "240a:a4b4::/32": "143854", - "240e:438:5220::/43": "140647", - "2607:cc80:2000::/32": "25664", - "2801:80:660::/48": "52520", - "2a05:4200::/47": "21534", - "2a0a:17c0::/29": "206894", - "2001:67c:278::/48": "51278", - "2803:7200:8008::/47": "27696", - "2a00:c560::/29": "62416", - "2a05:78c0::/32": "51975", - "240a:a776::/32": "144560", - "240e:e:b000::/37": "58541", - "2a00:4802:1f00::/34": "13124", - "2a01:86e0::/32": "62136", - "2a02:2b38::/32": "12703", - "2a02:9010:74::/48": "13195", - "2c0f:f7a8:805f::/48": "4134", - "2001:559:5a9::/48": "33491", - "2620:171:23::/48": "42", - "240a:abb3::/32": "145645", - "2605:6400:9004::/33": "53667", - "2605:fbc0::/32": "394303", - "2a02:26f7:e04c::/48": "36183", - "2a0c:681::/29": "200000", - "2001:df0:1580::/48": "138906", - "2620:11e:3083::/48": "7060", - "2605:b800:787::/48": "27435", - "2a06:4c00::/32": "20473", - "2800:bf0:240::/44": "52257", - "2401:8a40:3c::/46": "45326", - "2800:bf0:2807::/40": "27947", - "2801:14:2800::/48": "269966", - "2001:1980:6100::/38": "29838", - "2804:5d78:a000::/35": "268974", - "2a0b:b86:fe02::/47": "205749", - "2001:559:247::/48": "7016", - "2408:896e::/31": "4837", - "240a:a779::/32": "144563", - "2a01:190:39::/48": "199015", - "2a02:26f7:f3cc::/48": "36183", - "2a02:26f7:f5c8::/48": "36183", - "2a0e:1e80::/29": "9119", - "2001:559:433::/45": "7922", - "2604:8900::/48": "40285", - "2605:a000:40f::/38": "10796", - "2620:118:b001::/48": "32110", - "2406:69c0:1000::/34": "17439", - "240e:473:a550::/40": "4134", - "2603:fbd8::/29": "262287", - "2a00:9d20:102::/48": "395954", - "2a0a:1b80::/29": "34773", - "2001:44b8:3081::/48": "4739", - "2402:800:329b::/41": "7552", - "240a:ad14::/32": "145998", - "2804:6b4c::/32": "270391", - "2a01:ad00:7::/39": "51865", - "2a02:24d8::/32": "21473", - "2a02:26f7:d784::/48": "36183", - "2804:30e4::/32": "262772", - "2408:8456:1c00::/42": "17622", - "240a:a7f6::/32": "144688", - "2602:fd47::/36": "398461", - "2605:5c0:c100::/45": "28885", - "2607:fb91::/39": "21928", - "2806:2f0:9541::/42": "17072", - "2a06:1287:3300::/44": "206499", - "2001:559:268::/48": "33651", - "2804:3904::/32": "266518", - "2a06:7e80:4::/48": "12695", - "2a0a:dd40::/32": "206147", - "2a0f:d200::/32": "43069", - "2001:559:c095::/48": "7015", - "2403:3400::/32": "7604", - "2408:8459:5810::/42": "17623", - "2606:7500::/32": "54154", - "2607:3380:1000::/40": "395152", - "2800:160:1b71::/40": "14259", - "2804:5c1c::/32": "268888", - "2a09:adc0:2::/29": "64466", - "2a11:c800::/29": "42375", - "2401:fdc0::/44": "137074", - "2600:1f00:6000::/40": "16509", - "2001:559:428::/48": "7922", - "2800:160:2ce6::/33": "14259", - "2804:3644::/32": "266338", - "2804:794c::/32": "271297", - "2a0e:b107:3f4::/47": "57883", - "2408:8256::/41": "17622", - "2605:5fc1::/30": "1239", - "2606:ae00:bd41::/38": "7287", - "2001:df0:4b::/48": "45881", - "2610:88:3::/38": "14037", - "2800:a10::/34": "11014", - "2402:4600::/40": "45186", - "2804:4814::/32": "267096", - "2804:4cdc::/32": "267397", - "2404:1b0::/32": "18059", - "2804:14c:b500::/40": "28573", - "2804:53c0::/32": "268604", - "2804:7fe0:4000::/34": "271715", - "2a01:c50f:a880::/37": "12479", - "2001:559:104::/48": "33651", - "2600:1408:8c01::/35": "20940", - "2605:a401:8b8e::/42": "33363", - "2400:c700:1086::/39": "55644", - "2408:8459:7030::/41": "17622", - "240a:a89b::/32": "144853", - "240a:a9dd::/32": "145175", - "2610:130::/40": "6122", - "2a02:c6c1:4::/47": "9009", - "2001:18c8:767::/40": "18982", - "240a:a027::/32": "142689", - "2804:47e4::/32": "267083", - "2a02:26f7:d808::/47": "36183", - "2a0a:f280:203::/48": "211157", - "2c0f:ee00::/47": "37721", - "2607:f738:800::/41": "17184", - "2800:bf0:60::/43": "52257", - "2a0e:aa06:100::/48": "138631", - "2001:1248:70b2::/41": "11172", - "2404:6140::/33": "138143", - "2620:120:f000::/40": "394169", - "2a00:1d34::/33": "9121", - "2400:7fc0:2a0::/44": "55960", - "2407:38c0:61::/48": "59204", - "2606:e580::/32": "14237", - "2803:d060::/32": "267813", - "2804:14d:5e81::/41": "28573", - "2620:98:4002::/48": "393949", - "2a10:ac00::/32": "31242", - "240e:473:aa00::/41": "140485", - "2620:138:800e::/47": "62766", - "2a03:4460::/32": "201466", - "2a0c:e640:6660::/47": "17830", - "2a0e:1bc4::/35": "208621", - "2001:559:731::/48": "33661", - "2804:4ff4::/32": "268360", - "2804:518c::/32": "268459", - "2a00:1028::/29": "5610", - "2a0d:fec0:121::/46": "47481", - "2001:67c:23f4::/48": "197982", - "2001:740::/32": "5400", - "2600:1801:14::/30": "16552", - "2610:b0:403a::/47": "3573", - "2806:250:300::/46": "28512", - "2a01:5041:200c::/48": "202196", - "2001:480:2311::/32": "668", - "2400:cb00:504::/47": "13335", - "2408:8456:b610::/42": "134543", - "2804:1f0e::/35": "262366", - "2001:559:8210::/48": "33491", - "2406:cd40::/32": "132202", - "2605:a8c0:10f::/48": "11827", - "2a0b:2180:2::/32": "206502", - "2a0c:fd00::/29": "43541", - "2801:1d:c800::/48": "18747", - "2a03:ca0::/32": "59984", - "2a03:8a80::/32": "12930", - "2a07:6240::/29": "34290", - "2c0f:fe28:1::/48": "36951", - "2001:500:75::/48": "33075", - "240a:a5c4::/32": "144126", - "2a00:1f78::/32": "8893", - "2400:c540:3::/45": "59238", - "2405:9800:c640::/47": "45458", - "2a04:5740::/29": "43857", - "2800:430::/34": "23487", - "2803:9800:9083::/43": "11664", - "2a02:26f7:e785::/46": "20940", - "2408:8456:2140::/40": "17816", - "2600:1003:b000::/42": "6167", - "2600:8807:bc2::/35": "22773", - "2607:f668::/32": "22351", - "2803:f00:3::/45": "262182", - "2804:14c:75ab::/41": "28573", - "2804:45a4::/32": "266940", - "240a:aa91::/32": "145355", - "2607:ff08::/32": "13722", - "2a09:3c00:2::/29": "6939", - "2001:559:49f::/48": "7922", - "2607:f250:d018::/48": "7046", - "2800:c70:402::/32": "23201", - "2804:660::/32": "262581", - "2804:4acc::/32": "267264", - "2806:1016:4::/48": "8151", - "2001:678:a8c::/48": "208727", - "2001:1998:4000::/32": "7843", - "2600:1407:13::/48": "20940", - "2a02:26f7:e509::/46": "20940", - "2a0f:4040::/29": "41332", - "2401:be00:6::/32": "55641", - "2408:8956:c500::/40": "17816", - "2001:438::/42": "6461", - "240e:848:80::/43": "140553", - "2607:fb10:5041::/46": "2906", - "2801:80:1d0::/48": "8075", - "2a01:7d80:c000::/40": "62214", - "2a06:a005:1f0::/48": "204003", - "2001:470:8b::/45": "6939", - "2804:1f06::/32": "52887", - "2804:6ee8:2000::/36": "270626", - "2a04:8300::/29": "34410", - "2001:4878:c048::/48": "12222", - "2a01:cb20:d000::/34": "3215", - "2408:8956:c300::/40": "17816", - "2600:370f:750e::/43": "32261", - "2804:1734::/32": "52869", - "2001:678:2a0::/48": "35292", - "2408:8459:5240::/40": "17623", - "2a02:720:300::/32": "34427", - "2a06:6200::/29": "21500", - "240a:acfb::/32": "145973", - "2607:f4a0:5010::/48": "396926", - "2001:44b8:40d8::/35": "4739", - "2804:204:23f::/41": "28186", - "2804:7bf8:110::/32": "271466", - "2620:109:c001::/46": "14413", - "2804:6fc0::/32": "270682", - "2a02:c50:db9::/32": "51531", - "2401:d800:410::/42": "7552", - "2600:140b:8c00::/48": "31109", - "2001:500:8d::/48": "26710", - "2001:559:804f::/48": "20214", - "2001:559:814a::/48": "33652", - "2406:2d40::/35": "36492", - "2409:4000::/31": "55836", - "2804:e0c:200::/48": "28176", - "2a0e:8f02:2140::/48": "211414", - "2001:559:8105::/48": "7016", - "2605:3380:4dfe::/47": "395174", - "2804:11d4::/32": "263442", - "2804:7094:5000::/32": "270735", - "2a0a:c700::/29": "28788", - "240a:ab76::/32": "145584", - "2803:f500::/32": "60022", - "2a05:e5c0::/29": "200977", - "2001:678:158::/48": "202886", - "2402:3b80::/32": "134128", - "2600:1017:b8e0::/33": "6167", - "2a01:7520::/32": "62167", - "2a02:8389:6000::/30": "8412", - "2a05:b9c0::/29": "201057", - "240e:964:cac0::/42": "133775", - "2804:2558:3::/48": "264275", - "2001:559:c2f5::/46": "7922", - "2402:4e00::/47": "45090", - "2a04:c500::/29": "202146", - "2a0d:f40::/32": "39080", - "2001:ba8::/32": "8943", - "2402:800:55c5::/43": "7552", - "2607:ffb0:2004::/35": "6327", - "2804:14c:b183::/41": "28573", - "2a0b:8f80:300::/48": "200746", - "2408:8956:d00::/40": "17816", - "2804:8074::/32": "271751", - "2a03:4e0::/32": "59897", - "2a0e:2980::/48": "34568", - "2a00:cdc0:11::/48": "200032", - "2a04:f840::/40": "9150", - "2001:67c:13f8::/48": "39057", - "2401:d800:b600::/42": "7552", - "2a05:1940::/29": "203243", - "2a0b:10c0::/48": "48749", - "2402:6940:500::/35": "7645", - "2600:1402:f001::/31": "20940", - "2800:160:1905::/44": "14259", - "2806:230:102e::/48": "265594", - "2a02:fc0::/29": "42428", - "2a00:1ef8::/32": "29690", - "2001:4060:4052::/48": "197439", - "2402:4d40::/32": "24479", - "2403:da40:200::/32": "138385", - "240a:a6ad::/32": "144359", - "2605:7780::/32": "26744", - "2803:980:200::/37": "263248", - "2a00:1288:110::/47": "34010", - "2001:44b8:1a::/47": "4739", - "2600:1006:b030::/44": "22394", - "2600:1419:2c01::/35": "20940", - "2001:550:1906::/38": "174", - "2001:16a2:6e00::/35": "25019", - "240a:a756::/32": "144528", - "2a02:2620::/32": "29124", - "2c0f:eb00::/38": "61266", - "2001:559:8703::/48": "33651", - "2402:9b00:81::/46": "45796", - "2405:4cc1:d00::/40": "9471", - "2602:ffe4:c29::/46": "55836", - "2606:5000:1800::/38": "3908", - "2804:250c:c400::/34": "264255", - "2a04:9640::/30": "59939", - "2a0e:b107:93a::/48": "204446", - "2001:67c:2118::/48": "44033", - "2001:b000:100::/37": "3462", - "2409:803c:2100::/37": "9808", - "240e:67e:8800::/38": "140330", - "2607:f3a0:a000::/48": "399808", - "2804:a78::/32": "262478", - "2a09:d640::/29": "198345", - "2001:1938:0:2002::/64": "12989", - "2a00:86c0:1053::/42": "2906", - "2a02:26f7:db41::/46": "20940", - "2001:388:10e1::/34": "7575", - "2001:559:847f::/40": "7922", - "2605:3d00::/32": "46353", - "2607:fc30::/40": "19740", - "2620:122:1000::/45": "29954", - "2803:5ce0::/37": "54235", - "2804:2fdc:4000::/36": "264917", - "2001:fd8:f080::/42": "132199", - "2407:0:0:3e::/32": "4761", - "2409:8904:6340::/42": "24547", - "2600:1f01:48d0::/46": "16509", - "2a01:60e0::/32": "199935", - "2a04:4e40:2000::/48": "54113", - "2a0e:97c0:260::/44": "58057", - "2001:b08:13::/48": "51352", - "2804:14c:7987::/44": "28573", - "2804:33e4:200::/40": "265423", - "2a00:1b38::/32": "8559", - "2a03:840::/32": "199405", - "2001:67c:45c::/48": "15542", - "2001:1a11:e6::/47": "8781", - "2804:3f48::/32": "266650", - "2400:cb00:250::/47": "13335", - "2401:d800:b970::/40": "7552", - "240a:a516::/32": "143952", - "2a0e:e500:1::/48": "5400", - "2001:dcd:22::/48": "16509", - "240a:a982::/32": "145084", - "2001:fd8:b240::/42": "132199", - "2001:4878:8220::/48": "12222", - "2403:9800:c061::/43": "4648", - "240e:966:c400::/39": "133775", - "2a02:26f7:ed09::/42": "20940", - "2401:3c00:c8::/45": "38322", - "240a:a24a::/32": "143236", - "2605:7940:1000::/44": "30456", - "2a0d:9dc0::/29": "40970", - "2001:559:352::/47": "33651", - "240e:44d:4380::/41": "4134", - "240e:473:1350::/40": "4134", - "2800:160:1bba::/47": "14259", - "2a0b:4d07:e01::/48": "44239", - "2401:4740::/32": "9714", - "240e:628::/32": "17638", - "2602:fed2:7314::/48": "53356", - "2a03:2880:f244::/47": "32934", - "2401:4900:5d63::/48": "45609", - "2408:8456:4840::/38": "17816", - "240a:a630::/32": "144234", - "2600:140f:2801::/39": "20940", - "2606:b780::/32": "14589", - "2a03:1d60::/32": "60294", - "2409:8904:3da0::/38": "24547", - "2603:4:1704::/48": "44273", - "2a0a:7bc0::/32": "44066", - "2001:678:904::/48": "47453", - "2402:800:33c5::/43": "7552", - "2406:8dc0:2005::/48": "211622", - "2a02:24d8:ffff::/48": "15945", - "2a0e:c885::/44": "208759", - "2403:a640:200::/39": "63786", - "2408:840c:1c00::/40": "17621", - "2610:160:11::/48": "30312", - "2401:803e:4001::/42": "9919", - "2600:1fa0:e080::/44": "16509", - "2605:7240::/32": "10352", - "2a0b:4d07:159::/48": "44239", - "2401:4900:3ee0::/44": "45609", - "240a:a28d::/32": "143303", - "240a:ac91::/32": "145867", - "2600:1008:b040::/42": "6167", - "2804:2a4:c000::/34": "262828", - "2001:1838:c100::/34": "23352", - "2a04:f480:8000::/34": "25373", - "2a0b:4340:a0::/48": "205532", - "2405:ec00:9012::/47": "23955", - "2406:daa0:c060::/44": "16509", - "2408:8956:edc0::/38": "17622", - "240a:ac33::/32": "145773", - "2604:5880:2::/45": "10980", - "2800:bf0:2802::/45": "52257", - "2c0f:ea68::/32": "37697", - "2001:4de0:2002::/48": "33438", - "2408:8459:50c0::/38": "17816", - "2600:141b:2801::/37": "20940", - "2607:f650::/32": "32869", - "2804:14d:5a00::/40": "28573", - "2804:7a28:1000::/40": "271351", - "2a02:bf8::/35": "1239", - "2401:c3c0::/32": "136972", - "240a:ab22::/32": "145500", - "2620:0:1aa0::/48": "20464", - "2804:6d8::/46": "262609", - "2a06:4800:2000::/36": "209974", - "2a0f:5f40::/29": "200019", - "2001:4490:d040::/46": "9829", - "2403:5400:1811::/32": "38450", - "240a:a303::/32": "143421", - "2600:1417:3::/45": "20940", - "2400:cd00::/35": "38794", - "240e:473:250::/39": "4134", - "2804:4f7c::/32": "52320", - "2a04:440::/32": "12324", - "2a07:e00:a::/45": "210083", - "2a10:8c00::/32": "20473", - "2402:800:f9c0::/42": "7552", - "2606:1a40:2015::/46": "398962", - "2804:ec4::/32": "262973", - "2a02:26f7:c584::/48": "36183", - "2a02:2e02:3d60::/32": "12479", - "2a02:ee80:41a1::/44": "3573", - "2a10:bbc0::/32": "25234", - "2001:438:fffd:112::/60": "6461", - "240a:acc7::/32": "145921", - "2a00:1248:501f::/32": "3216", - "2a07:cc00::/29": "207988", - "2001:559:53b::/48": "7015", - "2408:8374::/28": "4837", - "2409:8087:560::/36": "24547", - "2804:1800::/32": "28645", - "2a02:26f0:9b01::/37": "20940", - "2a02:26f7:a1::/48": "20940", - "2a06:dd40::/47": "203416", - "2001:579:704c::/40": "22773", - "2001:67c:2ee0::/48": "51214", - "2409:8028:90::/41": "56041", - "2409:8a44::/28": "24445", - "240a:abcc::/32": "145670", - "2a00:cb0::/34": "29624", - "2a03:c980:db::/48": "210079", - "2a09:f900::/48": "29182", - "2a04:7c00::/29": "200023", - "2001:400:241b::/33": "293", - "240e:980:8f00::/40": "137687", - "2600:9000:1136::/44": "16509", - "2606:5c0::/32": "36165", - "2607:1c80::/32": "18615", - "2620:103:e008::/47": "16711", - "2a02:26f7:29::/48": "20940", - "2804:399c::/32": "266039", - "2001:559:236::/48": "7922", - "2001:559:723::/48": "7015", - "2401:ff80:130d::/46": "133954", - "2402:3a80:172b::/45": "38266", - "2600:1409:b001::/36": "20940", - "2600:6c39:d::/38": "20115", - "2803:4040::/32": "10834", - "2a0b:2780::/29": "43260", - "2001:559:777::/48": "33657", - "2400:cb00:131::/48": "395747", - "240e:3bc:7a00::/32": "140313", - "2610:b0:40b1::/44": "3573", - "2a02:cb81:1100::/45": "43766", - "2a04:ac01::/30": "56534", - "2001:1a11:bd::/41": "42298", - "2607:f358:22::/45": "18779", - "2804:6fd4::/32": "270687", - "2a04:92c7:fa11::/37": "62240", - "2607:b400:100::/36": "40220", - "2a02:26f7:bcd1::/42": "20940", - "2001:4408:5201::/46": "4758", - "2408:8459:1830::/41": "17622", - "2a00:9880::/32": "12963", - "2a0f:2c80:1::/48": "25369", - "2402:800:9455::/42": "7552", - "240a:a1db::/32": "143125", - "2804:2e8:a::/32": "262847", - "2001:678:284::/48": "206885", - "2001:dcd:6::/47": "397237", - "240a:a8cb::/32": "144901", - "2404:bf40:a585::/42": "139084", - "2800:bf0:8080::/45": "52257", - "2804:70a8::/37": "270740", - "2001:67c:18a4::/48": "56881", - "2400:cb00:70::/44": "13335", - "2401:1100::/32": "133380", - "2403:2800:3::/32": "38566", - "2a0a:8ec0::/29": "48918", - "2001:480:a0::/47": "5132", - "2001:df5:1280::/48": "141110", - "2804:80c8::/32": "262626", - "2a0b:7c00::/32": "8437", - "2001:d08:2800::/32": "9534", - "2804:5350::/45": "268576", - "2a00:1908:e48::/32": "43586", - "2001:3c8:100f::/48": "133919", - "2400:adc7::/39": "9541", - "240e:95d:2800::/37": "139316", - "2804:43f4:70::/40": "267601", - "2a02:26f7:ef89::/42": "20940", - "2001:550:2a00:2::/47": "174", - "2407:b700::/32": "58708", - "2600:140f:5800::/48": "9498", - "2605:cf40::/32": "15242", - "2620:11f:d000::/44": "393941", - "2806:1020::/32": "8151", - "2a00:1288:114::/40": "10310", - "2a09:4c0:aee1::/33": "58057", - "2a10:9903:301::/48": "60790", - "2408:8957:dac0::/39": "17816", - "2a06:8781::/40": "47447", - "2001:559:759::/48": "7015", - "2001:559:84c9::/46": "33287", - "2001:df2:3680::/48": "131124", - "2401:ff80:168f::/43": "133954", - "240a:a5b7::/32": "144113", - "2a01:cd01:2f2a::/47": "28708", - "2001:4408:8310::/37": "4758", - "240a:a166::/32": "143008", - "2620:1ec:910::/47": "8068", - "2a01:5b0:9::/48": "50611", - "240e:f7::/36": "58461", - "2804:18:6820::/41": "26599", - "2804:39e8:3e90::/32": "266058", - "2a0d:8d06:1001::/48": "60557", - "2a0e:8f02:f000::/48": "213127", - "2a10:fcc0::/29": "62336", - "2001:678:450::/48": "1257", - "2001:16a2:c0f0::/46": "39891", - "2001:4998:6c::/46": "36647", - "2806:2f0:9601::/42": "17072", - "2a00:15b8:400::/40": "31122", - "2a0a:2c00::/29": "48506", - "2a0d:c7c7::/32": "205610", - "240a:a0b8::/32": "142834", - "2605:400:500::/40": "19780", - "2605:c00:100::/40": "46920", - "240e:982:d600::/40": "134756", - "2804:14d:2a79::/45": "28573", - "2804:17d8::/32": "61919", - "2804:7a80::/32": "271375", - "2a02:2010:2520::/45": "20978", - "2001:4878:261::/48": "12222", - "240e:3b1:2800::/38": "4134", - "2620:132:f164::/40": "394977", - "2409:805b:2907::/38": "56040", - "240a:a4f5::/32": "143919", - "240a:a95f::/32": "145049", - "2605:5f00::/32": "15257", - "2804:8230::/32": "272504", - "2a00:11e8::/32": "50399", - "2001:559:c10e::/48": "33659", - "2401:a480:2::/48": "133750", - "240a:a263::/32": "143261", - "240e:698:2b00::/33": "4134", - "2804:22f8::/32": "264135", - "2001:550:2b02::/37": "174", - "2402:800:7a30::/39": "7552", - "2409:8c44:800::/48": "9808", - "240a:a1b2::/32": "143084", - "2001:df4:5c80::/48": "135752", - "2406:840:e800::/48": "134488", - "2600:1009:b0d0::/42": "6167", - "2602:fed2:731e::/48": "53356", - "2a00:4960::/32": "42525", - "2a02:618:8::/32": "20485", - "2c0f:feb0::/31": "37100", - "2001:678:d3c::/48": "206628", - "2a04:41c0::/29": "199952", - "2804:24c4::/36": "264241", - "2001:4430:5210::/39": "17853", - "2800:484:cb00::/40": "10620", - "2a02:360::/32": "42804", - "2a0f:5707:ab29::/48": "398646", - "2401:7400::/38": "4773", - "2600:1000:a120::/36": "22394", - "2803:5440:4050::/47": "264738", - "2804:31cc::/32": "265038", - "2001:df3:3080::/48": "137123", - "2a00:db8::/32": "3058", - "2001:678:fa8::/48": "211564", - "2001:1968::/32": "7029", - "2402:9d80:266::/47": "131429", - "2408:843f:1600::/34": "140716", - "2408:84f3:e210::/42": "134543", - "2600:140b:8401::/36": "20940", - "2804:2c54::/32": "265210", - "2402:6880:2000::/48": "63989", - "240e:44d:2f00::/41": "140345", - "2a00:ddc0::/32": "47836", - "2a02:2ae8:150::/32": "702", - "2001:388:7001::/40": "7575", - "2602:fed2:7f00::/47": "203027", - "2001:56b:400c::/35": "852", - "2409:8031:2a00::/29": "9808", - "2804:7000::/32": "270700", - "2a02:ed00::/31": "50304", - "2600:8808:3a00::/37": "22773", - "2a01:5241:200::/29": "58243", - "2400:cb00:a612::/48": "13335", - "2001:c20:c847::/48": "9255", - "2600:1406:2e01::/39": "20940", - "2a06:4740::/29": "207627", - "2a0e:8f02:f01b::/48": "213326", - "2001:913:3000::/36": "204708", - "2402:ab00:caff::/34": "24206", - "2804:81a4::/32": "272467", - "2001:559:8093::/45": "7922", - "2401:d800:75f0::/38": "7552", - "2a02:26f7:c008::/48": "36183", - "2405:9200:4100::/41": "131596", - "2604:2980::/32": "62943", - "2607:1000::/32": "30263", - "2610:a1:1015::/46": "397228", - "2a03:5e00::/32": "203975", - "2001:559:8268::/48": "13367", - "2001:57a:a801::/38": "22773", - "2401:7000:d902::/34": "45177", - "2406:ec40::/32": "134469", - "2806:2f0:8044::/42": "17072", - "2c0f:f118:2::/32": "328201", - "2001:4de0:2004::/39": "33438", - "2607:f1c0::/40": "8560", - "2804:b34::/32": "52751", - "2804:1810::/34": "263262", - "2a02:988::/32": "30925", - "2a10:ae80::/29": "212131", - "2c0f:f000:a00::/37": "36891", - "240e:473:7d20::/41": "140486", - "2804:a00:12::/36": "262838", - "2a0b:f600::/48": "56647", - "2404:6300:1001::/32": "131310", - "240a:a457::/32": "143761", - "2a02:26f7:8d::/48": "20940", - "2a07:14c7::/32": "208861", - "2801:1c8:8a::/48": "27951", - "2001:559:36a::/48": "7922", - "2001:559:c1bc::/48": "33659", - "2401:d800:7a80::/42": "7552", - "2406:7400:40::/46": "24309", - "2409:8004:3111::/45": "24547", - "2600:180a::/35": "16552", - "2620:13e:500a::/48": "206885", - "2803:ae80::/32": "263197", - "2804:4de8::/32": "268227", - "2a01:53c0:ffd2::/48": "36408", - "2001:559:c269::/48": "13367", - "2001:559:c3f2::/48": "33657", - "2401:4900:5600::/42": "45609", - "2607:2c00:9000::/33": "14265", - "2607:6880::/32": "11554", - "2607:fd48:180:5::/45": "13536", - "2405:f900::/32": "132509", - "2001:559:c2bf::/41": "33660", - "2a02:26f0:9901::/40": "20940", - "2a07:db01:40::/42": "204527", - "2001:678:98c::/48": "31371", - "2607:f3f0::/46": "16724", - "2804:1494::/32": "263338", - "2a00:1288:1a8::/46": "34010", - "2a0c:1dc0::/32": "209310", - "2a0c:b1c0::/32": "202090", - "2001:559:4df::/42": "7725", - "2600:9000:1156::/44": "16509", - "2804:f8c:9000::/33": "263591", - "2804:7b44::/32": "271421", - "2001:4888:a670::/33": "6167", - "2600:1002:d020::/44": "22394", - "2620:121:6000::/44": "40267", - "2804:2bf0::/32": "262740", - "2804:521c:2::/48": "268495", - "2804:5764::/32": "53241", - "2a02:26f7:b7c9::/42": "20940", - "2402:800:3d55::/42": "7552", - "240a:a27b::/32": "143285", - "2800:4b0:8401::/36": "12252", - "2a03:2880:f122::/43": "32934", - "2001:4868:4300::/32": "701", - "240e:473:4200::/41": "140485", - "2600:1003:d400::/43": "6167", - "2001:559:8311::/48": "7922", - "2602:fe92::/36": "13752", - "2404:a140:2::/44": "138915", - "2408:8256:319d::/46": "17623", - "2804:1728::/32": "263128", - "2806:3cf::/32": "270126", - "2a02:2408::/32": "197064", - "2607:a800:408::/48": "15695", - "2001:559:70b::/48": "33287", - "2001:559:817f::/48": "33489", - "2401:d800:2660::/40": "7552", - "2404:8000:e2::/35": "17451", - "240a:a160::/32": "143002", - "240a:abff::/32": "145721", - "2602:fed2:730a::/45": "53356", - "2001:290::/32": "9318", - "2001:67c:680::/48": "202577", - "2804:1810:d000::/34": "263262", - "2a00:c68::/32": "43513", - "2001:559:8145::/46": "7922", - "2408:8459:6050::/38": "17816", - "2a02:26f7:de84::/48": "36183", - "2001:dce:4::/48": "23869", - "2408:80f1:1c0::/42": "138421", - "2620:10d:900f::/48": "25993", - "2804:14d:bad2::/44": "28573", - "2806:230:400f::/48": "11888", - "2400:6280:11a::/48": "132280", - "2604:880:6::/48": "29802", - "2804:18:7a00::/37": "10429", - "2804:768:2000::/32": "52977", - "2804:20c8::/32": "264514", - "2001:559:1f2::/48": "7922", - "2001:559:8328::/48": "7015", - "2804:14d:5495::/41": "28573", - "2a01:7c8::/33": "20857", - "2a04:c442:8000::/38": "2534", - "2a09:bac0:78::/47": "13335", - "2600:1408:8001::/37": "20940", - "2604:ca00:300::/37": "36492", - "2a00:1288:84::/48": "203219", - "2a0d:9880::/29": "41435", - "2620:114:b0ca::/48": "18440", - "2a02:2af8:410::/32": "702", - "2001:67c:2d6c::/48": "16302", - "2402:d400::/45": "17762", - "2403:fbc0:3000::/48": "23959", - "2603:c002:9a30::/39": "31898", - "2800:160:184c::/43": "14259", - "2001:559:127::/48": "7725", - "2408:8957:b100::/40": "17816", - "240a:a17a::/32": "143028", - "240a:acbd::/32": "145911", - "2804:532c:8900::/33": "268568", - "2a00:8a02:90::/44": "8983", - "2a0d:140::/35": "209014", - "240a:a1e9::/32": "143139", - "240a:a419::/32": "143699", - "240a:ac54::/32": "145806", - "2800:160:1d44::/46": "14259", - "2401:2e00::/32": "37963", - "2402:e200::/32": "17961", - "240a:a3fc::/32": "143670", - "2605:8d80:700::/36": "812", - "2607:280::/32": "32365", - "2804:3f58:7000::/32": "265886", - "2600:141c:1001::/36": "20940", - "2a04:3a60:8000::/30": "56467", - "2001:67c:4a4::/48": "3301", - "2001:67c:11f0::/48": "212378", - "2001:df3:a980::/48": "135900", - "2404:0:1100::/36": "17709", - "2a01:4c8:f402::/29": "12576", - "2001:559:1d9::/48": "20214", - "2001:648:24a0::/48": "12402", - "240e:63:b000::/33": "140315", - "2a01:c50f:d140::/37": "12479", - "2a0f:5707:ab91::/48": "208884", - "2402:800:37d3::/44": "7552", - "2804:2ed4:4000::/32": "265369", - "2a05:dfc7:44::/46": "208753", - "2a02:26f0:4d01::/40": "20940", - "2a07:8000::/29": "199575", - "2001:559:4fb::/45": "7922", - "2402:800:9a63::/43": "7552", - "2001:559:178::/48": "33489", - "2001:569:c::/30": "852", - "2804:1644:ff00::/40": "262903", - "2804:50d0::/32": "268412", - "2001:559:c2c3::/48": "7015", - "2001:df1:9180::/48": "139689", - "2403:3800:1230::/40": "4007", - "2600:9000:1182::/45": "16509", - "2804:4e04::/32": "268234", - "2804:5cb4::/32": "268925", - "2602:806:f000::/47": "27217", - "2800:160:1d81::/46": "14259", - "2a09:b280:ffbb::/45": "210025", - "2001:67c:11c::/48": "196883", - "2605:6440:8002::/35": "396356", - "2a00:8900::/32": "41625", - "2001:559:82f1::/48": "7016", - "2001:448a:3030::/41": "7713", - "2405:1c0:6a72::/40": "55303", - "2602:fd10:c00::/48": "19529", - "2607:f220:600::/44": "26810", - "2a03:ed00::/32": "35205", - "2001:559:8484::/47": "33660", - "2600:1407:20::/47": "20940", - "2a0c:47c0::/29": "18779", - "2620:130:3022::/47": "62861", - "2804:14d:5283::/41": "28573", - "2804:4c8:21::/32": "262465", - "2a02:26f7:d448::/48": "36183", - "2a02:26f7:ec55::/42": "20940", - "2404:4a00:6500:1::/48": "45629", - "2404:bf40:8140::/48": "2764", - "240e:44d:4980::/41": "4134", - "240e:44d:7200::/41": "140345", - "2804:2fec::/32": "52991", - "240e:108:11d7::/48": "4134", - "2a00:63c0::/29": "44133", - "2a0c:5247:d000::/36": "208861", - "2001:1a11:10d::/43": "42298", - "2001:44b8:30a4::/48": "7545", - "2a03:7240::/40": "56973", - "2001:df7:aa00::/48": "133800", - "2405:2540::/32": "136332", - "240e:41::/37": "17897", - "2602:fed2:7316::/44": "53356", - "2800:5a0::/32": "27792", - "2804:62c:2006::/43": "262569", - "2408:8256:2f7c::/46": "17623", - "2600:2600::/31": "33362", - "2a03:a800::/32": "34762", - "2a0c:dd80:2000::/48": "52000", - "2001:898::/29": "15879", - "240a:a0a0::/32": "142810", - "2800:160:1936::/47": "14259", - "2804:3c70::/32": "266211", - "2806:230:202d::/48": "11888", - "2a07:9944:10::/48": "58305", - "2a0a:d6c0:efff::/48": "61423", - "2001:559:8704::/47": "7922", - "2403:2200::/48": "45148", - "2600:380:8400::/36": "20057", - "2804:7a7c:1000::/36": "271374", - "2a01:58a0:200::/32": "51018", - "2001:fd8:2050::/42": "4775", - "2a03:8a40::/32": "48173", - "2001:1248:55aa::/45": "11172", - "2401:d800:7810::/41": "7552", - "2404:5c40:5::/48": "136003", - "2409:803c:2c00::/38": "9808", - "240e:438:5a20::/43": "140647", - "2607:6200::/32": "21817", - "2806:261:2300::/37": "13999", - "2804:1a04:7::/44": "61832", - "2a06:bcc0:6::/44": "205272", - "2001:67c:7c2::/48": "57031", - "2001:67c:24a0::/48": "198143", - "2001:978:5302::/37": "174", - "2804:36bc::/32": "266368", - "2a02:1338::/32": "43561", - "2001:470:4a::/48": "6379", - "2607:fdb0::/55": "3361", - "2a0e:b107:710::/48": "206843", - "2a0f:afc0::/29": "50782", - "2801:80:25a0::/48": "268001", - "2a00:bc40::/32": "198731", - "2409:803c::/40": "24444", - "2800:160:1f00::/45": "14259", - "2a0a:7d80:9::/48": "35594", - "2606:ae00:b801::/38": "7287", - "2606:ae80:1430::/44": "19834", - "2a00:f28:3000::/29": "15802", - "2a0e:46c3:200::/47": "208717", - "2001:559:ad::/48": "33659", - "2001:67c:1254::/48": "31216", - "240e:3ba:8200::/35": "140316", - "2602:ff18:221::/48": "21973", - "2607:ffd0::/45": "13767", - "2a01:570::/47": "33941", - "2a02:26f7:bc09::/42": "20940", - "2a11:14c0::/29": "210760", - "2001:7fe::/32": "29216", - "2a0a:4380::/29": "60924", - "2a02:ac80:401::/39": "25145", - "2403:b200:a99c::/48": "38506", - "2409:8014:80a::/35": "56044", - "2607:fc40::/32": "13433", - "2a0e:b107:24::/48": "39753", - "2001:418:143a:200::/47": "2914", - "240e:473:d20::/41": "140486", - "2001:678:558::/48": "50472", - "2408:8459:1930::/41": "17622", - "2605:a401:83ec::/43": "33363", - "2804:6fc:1b::/42": "28158", - "2a05:540::/30": "45027", - "2a02:2250::/32": "196714", - "2402:4000:bbf9::/33": "18001", - "2404:5e40:3::/32": "137703", - "2605:b740:40::/42": "2773", - "2800:1e0:c02::/39": "7195", - "2804:124::/32": "28247", - "2804:356c::/32": "266285", - "2a00:a640::/46": "13445", - "2a02:5c20::/29": "60111", - "2a0b:fd87:ffff::/48": "49419", - "2001:559:c3ea::/48": "33657", - "2001:559:835c::/48": "33657", - "2001:559:c19c::/46": "33491", - "2606:c900::/32": "22834", - "2620:13e:e000::/48": "29802", - "2a03:8c80::/29": "31319", - "2a0e:b107:1130::/46": "212121", - "2001:678:ef8::/48": "202592", - "2600:6c7f:90c0::/48": "20115", - "2a02:26f7:d381::/46": "20940", - "2a0d:77c7:de24::/34": "7489", - "2800:b20:2000::/30": "14754", - "2a03:3180:10::/36": "44453", - "2401:7400:c803::/37": "4773", - "2408:8256:379c::/46": "17623", - "2409:8904:55b0::/38": "24547", - "240a:a45e::/32": "143768", - "2804:2b7c::/32": "265155", - "2001:559:44::/48": "7922", - "2001:1a10:ce::/39": "8781", - "2400:cb00:a260::/47": "13335", - "2403:9800:b013::/45": "4648", - "240a:a8ad::/32": "144871", - "2602:ff5d::/36": "27382", - "2a04:4a00::/29": "47440", - "2402:800:59ee::/38": "7552", - "2408:8957:e100::/40": "17816", - "2800:5f0:a001::/33": "22724", - "2405:1c0:7915::/41": "55303", - "2407:ed00::/35": "9587", - "2804:292c::/32": "264008", - "2804:5fe4::/32": "269130", - "2806:230:2030::/48": "265594", - "2806:230:4041::/46": "11888", - "2600:1404:1401::/36": "20940", - "2a01:aea0:df6::/32": "42473", - "2a02:26f7:b701::/46": "20940", - "2a02:26f7:ba84::/47": "36183", - "2405:1c0:6411::/45": "135062", - "2408:84f3:a840::/38": "17816", - "2600:9000:115e::/48": "16509", - "2a02:2f80::/29": "200064", - "2801:80:e0::/48": "53215", - "2a02:26f7:9b::/48": "20940", - "2001:918:ff45::/43": "3303", - "240a:a3fa::/32": "143668", - "2606:ae00:ac00::/40": "7287", - "2607:fcc8:6000::/32": "10796", - "2001:67c:1b94::/48": "44768", - "2406:f400:40::/44": "38001", - "2408:8256:356e::/48": "17623", - "2408:8656:3cff::/48": "17623", - "240a:ad2d::/32": "146023", - "2800:bf0:80::/44": "52257", - "2001:df1:801::/48": "133752", - "2409:8904:4560::/38": "24547", - "240e:473:2050::/39": "4134", - "2804:848::/32": "262737", - "2804:384c::/32": "266468", - "2a02:ed8::/32": "44898", - "2401:d800:99e0::/38": "7552", - "2620:90:8000::/48": "23371", - "2a02:26f7:c9c9::/46": "20940", - "2a0f:de40::/48": "60781", - "2001:67c:620::/48": "197639", - "2407:680:8000::/33": "7656", - "2409:8000:5d00::/31": "9808", - "2804:6fc:b100::/36": "28158", - "2806:262:501::/48": "13999", - "2a09:be40:1700::/40": "208029", - "2001:559:c0c8::/48": "7922", - "2605:7b00::/32": "22110", - "2620:7b:2000::/48": "398222", - "2a02:26f7:54::/48": "36183", - "2001:67c:1954::/48": "44574", - "240e:473:2b20::/41": "140486", - "2803:6600::/30": "28075", - "2001:6d0:4001::/46": "52016", - "2405:f080:2800::/48": "136907", - "2620:46:4000::/48": "395431", - "2a01:298:d34e::/34": "30880", - "2a10:b9c0::/32": "211623", - "2c0f:fc88:2f::/43": "36992", - "2001:c00:4619::/32": "4618", - "240e:473:2200::/41": "140485", - "2804:5bc4::/32": "268868", - "2a02:26f7:b908::/48": "36183", - "2a03:f80:36::/48": "5483", - "2a07:2918:6000::/36": "60115", - "240a:a4d3::/32": "143885", - "240a:a786::/32": "144576", - "2602:804:d000::/44": "27587", - "2607:f160::/48": "6167", - "2806:2f0::/43": "17072", - "2a02:26f0:fc::/47": "20940", - "240e:473:2750::/40": "4134", - "2001:678:268::/48": "206939", - "2404:fa00::/34": "45780", - "240a:af0b::/32": "146501", - "2607:f368::/36": "32982", - "2620:123:2040::/47": "30103", - "2a0b:e41:1::/46": "205809", - "2001:1248:842d::/46": "11172", - "2402:c100:c001::/34": "23673", - "240a:a73c::/32": "144502", - "240a:aaeb::/32": "145445", - "2a10:3300::/29": "207459", - "2a02:26f7:cd00::/48": "36183", - "2a04:c600::/29": "49544", - "2600:1017:b130::/40": "6167", - "2a01:270:e000::/46": "29657", - "2c0f:fba0::/45": "37333", - "2607:fb50:2100::/32": "46253", - "2804:1644:f760::/36": "262903", - "2a0f:5707:aa23::/44": "207622", - "2400:8000:7::/44": "4800", - "2804:5240::/32": "268505", - "2a02:22a8::/32": "8369", - "2a02:26f7:f34b::/42": "20940", - "2001:4600::/24": "2119", - "2001:4de0:2203::/39": "33438", - "2600:1407:8800::/48": "35994", - "2804:396c::/32": "262846", - "2806:230:4025::/48": "11888", - "2a02:350::/29": "16246", - "2804:3d0c::/32": "266250", - "2a02:ac40::/29": "25459", - "2001:428:3807::/48": "18703", - "2001:559:7ef::/48": "22258", - "2600:8807:43e0::/37": "22773", - "2a01:4a0:2003::/29": "201011", - "2408:8957:400::/40": "17622", - "240a:a3cd::/32": "143623", - "2602:fcf6:a::/48": "48413", - "2605:dd40:8cb0::/44": "398549", - "2a02:850:ffff::/48": "1921", - "2001:67c:2bf0::/48": "200106", - "2001:4478:2300::/33": "4802", - "2804:88:8002::/35": "28135", - "2804:42bc::/32": "267522", - "2a02:26f7:e4c0::/48": "36183", - "2602:233::/32": "7782", - "2803:2880::/32": "262159", - "2a00:1f78:f008::/36": "8893", - "2a02:26f0:801::/38": "20940", - "2a02:26f7:67::/48": "20940", - "2a07:59c6:caca::/48": "205413", - "240a:a1f1::/32": "143147", - "2402:3300:5000::/48": "56300", - "240a:add9::/32": "146195", - "2401:3c00:a4::/44": "38322", - "2402:6880:3000::/48": "63989", - "240a:a99c::/32": "145110", - "2605:a900:9::/46": "46887", - "2804:14c:d885::/41": "28573", - "2001:480:422::/39": "668", - "240e:473:1f20::/41": "140486", - "2a03:ec40::/29": "60800", - "2a07:6fc0::/48": "205948", - "2001:559:58f::/48": "33287", - "2001:559:8220::/47": "7922", - "2001:c30::/32": "4721", - "2001:4430:4f08::/35": "17853", - "2001:4998:128::/45": "10310", - "2406:840:eab4::/48": "142642", - "2a04:b40::/29": "36057", - "2a0e:b105:6f8::/46": "20473", - "2001:559:156::/48": "7015", - "2001:67c:1bd4::/48": "25373", - "2401:1d80:2::/48": "133530", - "2001:7f0:101::/48": "51906", - "2402:800:5463::/43": "7552", - "2402:800:59c5::/43": "7552", - "240a:aa8c::/32": "145350", - "2602:fc5d:252::/48": "399866", - "2606:2800:4aa4::/46": "15133", - "2620:0:1a50::/48": "32360", - "2a00:1728:a::/48": "60230", - "2a04:4e40:fa00::/48": "54113", - "2a0e:e744::/30": "208283", - "2001:468:2650::/48": "22742", - "2001:4998:10::/46": "10310", - "2408:8256:2f9f::/35": "17816", - "2a02:26f7:d4c1::/46": "20940", - "2a0a:2280::/29": "44851", - "2a0e:1cc0::/48": "208612", - "2001:559:730::/48": "7015", - "2001:1248:708c::/46": "11172", - "2600:1404:9c01::/38": "20940", - "2602:fcd8::/48": "14618", - "2605:8d40::/32": "46292", - "2a02:26f7:dc00::/48": "36183", - "2a07:3505:80::/44": "31477", - "2409:8c85:aa19::/42": "9808", - "240a:ac77::/32": "145841", - "2606:6800:2000::/40": "394901", - "2804:74b4::/32": "270998", - "2001:fe8::/46": "24435", - "2409:8915:5000::/39": "56044", - "2607:fe90:8000::/47": "22169", - "2620:171:29::/48": "715", - "2a07:85c0::/48": "174", - "2001:12f0:b3a::/45": "1916", - "240e:108:1170::/48": "134238", - "2001:500:85::/48": "53459", - "240a:a370::/32": "143530", - "2602:feda:3d0::/44": "213361", - "2804:14d:7400::/40": "28573", - "2804:1b94:700::/32": "52974", - "2a00:dd80:3a::/45": "36236", - "2a02:2ac0::/32": "702", - "2001:559:81c0::/48": "7015", - "2a03:efc0:500::/40": "197640", - "2a0b:d9c0:164::/46": "49544", - "2c0f:f118::/47": "328201", - "2400:9380:9060::/47": "4809", - "2a02:26f7:c101::/46": "20940", - "2a10:2c0::/29": "60636", - "2600:6c38:8c3::/44": "20115", - "2607:8500::/32": "14987", - "2800:160:1630::/46": "14259", - "2804:2c98::/32": "265229", - "2a01:c50e:6600::/32": "12479", - "2604:c0c0:2000::/35": "14525", - "2a00:6340::/33": "58299", - "2a06:e881:1708::/48": "49745", - "2a0f:4f40::/48": "48749", - "2001:559:5e5::/48": "7922", - "2402:9e80:43::/48": "138631", - "2409:8c14::/40": "56044", - "240a:acf9::/32": "145971", - "2a00:1c98::/32": "34762", - "2a01:5420::/32": "199947", - "2001:df3:e500::/48": "135934", - "2408:8956:1600::/40": "17622", - "2409:8914:4200::/39": "56044", - "240e:44d:6400::/41": "140345", - "2804:2620::/32": "264323", - "2a02:26f7:f904::/48": "36183", - "240a:abf2::/32": "145708", - "240e:3b8:2800::/38": "4134", - "2606:2800:8::/47": "15133", - "240e:108:11e2::/48": "4816", - "2a0b:740::/29": "200599", - "2a01:5ec0:b000::/36": "44244", - "2001:559:7e0::/48": "7922", - "240a:a4c4::/32": "143870", - "240d:c010:20::/43": "132203", - "2620:fc::/48": "40119", - "2804:2400::/32": "264195", - "2804:3fdc::/32": "265920", - "2804:5af0::/32": "268808", - "2a03:7a0::/29": "43940", - "2001:559:c::/48": "7015", - "2001:559:169::/48": "7016", - "2401:ff80:1301::/46": "133954", - "2606:9000::/32": "18618", - "2804:4ff0::/32": "268359", - "2001:ee0:ed00::/40": "45899", - "2800:68:bacb::/33": "61468", - "2a01:9300::/32": "5602", - "2a09:e200::/48": "49121", - "2001:1248:5595::/42": "11172", - "2001:13b0:c001::/35": "3549", - "2401:95c0::/32": "9678", - "2408:8957:e400::/40": "17622", - "240a:a896::/32": "144848", - "240a:ae78::/32": "146354", - "2604:880:41::/48": "29802", - "2001:1248:55da::/42": "11172", - "2804:df4:8000::/35": "52531", - "2804:446c:8001::/33": "28369", - "2a02:26f7:d258::/48": "36183", - "2a06:8100::/29": "34549", - "2a02:26f7:3f::/48": "20940", - "2001:559:860e::/48": "33668", - "240a:a590::/32": "144074", - "2603:c013:6000::/36": "31898", - "2607:f9d0:f000::/40": "11979", - "2620:11a:a032::/48": "43515", - "2804:14d::/47": "28573", - "2a00:80a::/25": "1257", - "2001:559:843c::/48": "7725", - "2407:3a80::/32": "133045", - "2602:ffc5:158::/48": "40676", - "2620:171:3::/48": "715", - "2803:8d43::/32": "52262", - "2804:2724:150::/32": "263879", - "2001:559:82c2::/48": "7016", - "2403:300:a30::/48": "6185", - "2001:559:dd::/46": "7922", - "240a:aa92::/32": "145356", - "240e:44d:6200::/41": "140345", - "2603:f448::/29": "396356", - "2620:ef:c000::/48": "64233", - "2804:1ca4:8001::/41": "263010", - "2804:7a28::/40": "271351", - "2001:559:84f2::/48": "33657", - "2001:57a:c222::/34": "22773", - "2804:6844::/32": "269681", - "2a02:568:fe01::/48": "8763", - "2a03:fb80::/32": "206920", - "2a0d:5480::/29": "49024", - "2402:8bc0::/32": "59012", - "240a:a74c::/32": "144518", - "2401:d800:5fb0::/41": "7552", - "240a:aed2::/32": "146444", - "2a0b:53c0::/32": "205673", - "2405:9800:c919::/46": "45458", - "2406:e940::/35": "9449", - "240a:af06::/32": "146496", - "2800:160:1a4a::/43": "14259", - "2a02:26f7:d844::/48": "36183", - "2a03:57c0::/32": "48159", - "2600:370f:7421::/46": "32261", - "2620:137::/46": "396253", - "2804:d70:180::/32": "52626", - "2a02:26f7:86::/48": "36183", - "2401:b180:4101::/34": "37963", - "2a00:50c0::/48": "31415", - "2a02:c180:1fff::/48": "701", - "2a0e:b107:bf0::/47": "140938", - "2a01:8840:c6::/44": "12041", - "2001:559:82db::/48": "13367", - "2804:1ab0:8100::/33": "61876", - "2a02:2698:5000::/38": "43478", - "2001:559:83a4::/48": "7922", - "2403:a200::/32": "17428", - "2404:bf40:e402::/48": "2764", - "240a:a105::/32": "142911", - "2602:feda:b8c::/47": "200334", - "2803:58e0::/32": "269878", - "2001:ee0:9940::/38": "45899", - "2a02:27f8::/32": "42755", - "2a0e:8a84::/32": "13559", - "2001:1248:9a4c::/42": "11172", - "240e:58::/32": "4812", - "2602:ff62::/40": "61317", - "2a0b:11c0:4074::/47": "198682", - "2001:ee0:c240::/39": "45899", - "2400:cb00:36::/48": "132892", - "2402:3a80:1cd0::/42": "38266", - "240a:aed9::/32": "146451", - "2600:140a:2001::/33": "20940", - "2804:7d48::/32": "271551", - "2a07:a440::/30": "42927", - "2409:40c1::/30": "55836", - "2600:1480:5000::/40": "33905", - "2804:14c:f427::/44": "28573", - "2a0f:9340:32::/47": "1299", - "2a10:9540::/29": "211784", - "2804:1684::/39": "53169", - "2c0f:e8e0::/32": "327926", - "2001:559:33b::/48": "33657", - "2001:1540:dd06::/34": "47886", - "2400:1f00:b700::/48": "45769", - "2401:d800:5880::/42": "7552", - "2401:d800:f7e0::/36": "7552", - "2607:f778:b100::/33": "32035", - "2804:2894::/32": "263969", - "240e:d9:a500::/38": "38283", - "240e:473:7950::/40": "4134", - "2a02:26f7:be0d::/42": "20940", - "2a03:e880::/32": "20686", - "2001:678:1c8::/48": "47543", - "2001:67c:2fbc::/48": "212467", - "240e:f:c800::/37": "4835", - "2620:13e:7000::/47": "62621", - "2806:20d:3226::/44": "32098", - "2a02:26f0:b501::/38": "20940", - "2a02:f240::/29": "18779", - "2001:559:492::/47": "7922", - "2400:a980:1400::/40": "133515", - "2400:c700:9::/43": "55644", - "240a:af5a::/32": "146580", - "2804:1bbc::/32": "61746", - "2001:559:8507::/48": "33651", - "240e:473:7e50::/39": "4134", - "2801:1c8:200::/40": "19429", - "2a00:6140::/32": "200062", - "2a0f:5701:3502::/45": "205593", - "2001:559:378::/48": "33287", - "2001:dce:8000::/48": "45285", - "2001:43d8::/32": "15022", - "2402:800:41ef::/43": "7552", - "240e:b2:f000::/29": "4134", - "240e:378:2600::/32": "4134", - "2803:d100:a000::/33": "52362", - "2405:f600:61::/48": "45117", - "2804:3d18::/32": "266253", - "2a0d:8800::/29": "205624", - "2001:1248:9aaa::/45": "11172", - "2804:194c::/32": "61785", - "2a01:7b40::/32": "47347", - "2a09:9444::/32": "395092", - "2001:559:7eb::/48": "7015", - "2001:1230::/39": "13579", - "2404:bf40:f081::/39": "139084", - "240e:3b6:7600::/39": "140313", - "2804:5208::/32": "28594", - "2a03:7dc0::/32": "39256", - "2a10:ee40::/29": "47787", - "2607:ffb0:300e::/33": "6327", - "2804:5848::/32": "268119", - "240e:44d:7180::/41": "4134", - "2a0e:1101:2::/44": "51255", - "240e:60c:f800::/38": "137688", - "2604:98c0::/32": "23379", - "2605:3380:416a::/43": "12025", - "2a01:20e::/32": "41051", - "2a01:b780::/32": "43612", - "2001:559:761::/48": "7016", - "240a:a3d5::/32": "143631", - "2804:4a4c::/32": "267231", - "2a07:9780::/29": "202705", - "2001:559:139::/48": "33659", - "2a01:8ca0::/32": "24589", - "2a02:250:4::/33": "39570", - "2001:550:907::/48": "32489", - "2001:559:c3b3::/48": "7016", - "2001:67c:2410::/48": "34755", - "240a:a81f::/32": "144729", - "240a:af31::/32": "146539", - "2a00:17e0::/32": "49983", - "2607:1280:1280::/43": "394972", - "2001:470:59::/48": "6939", - "2001:67c:3e8::/47": "39358", - "240a:40a2:c000::/35": "58834", - "240a:aa46::/32": "145280", - "240a:acd0::/32": "145930", - "2605:9780:1000::/40": "36180", - "2606:4a00::/35": "33154", - "2804:4460::/32": "267629", - "2a02:26f7:ec40::/48": "36183", - "2404:160:8080::/34": "10030", - "2620:171:5::/46": "715", - "2a00:aea0:600::/40": "12678", - "2a09:6381::/30": "62000", - "2408:8459:a450::/38": "17816", - "240a:a696::/32": "144336", - "2604:4200::/32": "36374", - "2620:106:6000::/45": "3562", - "2620:119:1000::/48": "33004", - "2800:4b0:4100::/38": "12252", - "2a05:d050:80e0::/44": "16509", - "2a0c:b642:1a01::/48": "60404", - "2a0c:c9c2:ab::/29": "202414", - "2a02:e10::/32": "43646", - "2a03:b80::/32": "198859", - "2a06:1780::/32": "60781", - "2001:bf2::/29": "12732", - "2a02:17b8::/32": "34040", - "2a04:7140:21::/48": "35584", - "2a0f:34c0::/29": "60262", - "2001:1248:9aa6::/44": "11172", - "2a02:2ab8:330::/32": "702", - "2603:c002:150::/38": "31898", - "2804:3aa4::/40": "266101", - "2c0f:f6d8:4012::/47": "3573", - "2402:e300:4::/32": "131706", - "2403:1cc0:1201::/48": "45352", - "2600:1480:800::/48": "21342", - "2607:6b80:6::/48": "55081", - "2620:116:f000::/46": "14157", - "2a03:720:9::/43": "57073", - "2001:559:65::/48": "33657", - "2600:1406:48::/39": "20940", - "2620:171:c00::/45": "42", - "2803:a900:100::/47": "52420", - "2804:26d8::/32": "53160", - "240e:3b6:1800::/34": "4134", - "2600:3000:5100::/40": "13845", - "2607:fbe0::/32": "40824", - "2a02:fa8:c410::/44": "399104", - "2001:43f8:bc0::/48": "37399", - "2409:8907:7320::/37": "24547", - "2600:1419:f001::/37": "20940", - "2a02:26f7:87::/48": "20940", - "2001:67c:3b4::/48": "52092", - "2600:370f:3445::/44": "32261", - "2804:6d4::/32": "53045", - "2a02:26f7:bfc1::/46": "20940", - "2806:34d:48::/48": "15695", - "2400:cb00:140::/44": "13335", - "240a:a075::/32": "142767", - "240a:a2a0::/32": "143322", - "2602:fe78::/36": "33360", - "2606:2800:4003::/48": "15133", - "2804:290::/32": "28669", - "2804:15d4::/33": "263413", - "2a01:568::/33": "43950", - "2001:67c:7f8::/48": "21221", - "2600:1404:c001::/37": "20940", - "2604:7fc0::/32": "17017", - "2607:e880:1030::/48": "12220", - "2620:107:3001::/48": "16509", - "2620:128:e080::/48": "22317", - "2800:160:11dd::/42": "14259", - "2001:559:8629::/48": "7016", - "240e:473:8250::/39": "4134", - "2605:f500:8111::/33": "1828", - "2605:fec0::/32": "398852", - "2a00:14b0::/32": "13135", - "2a0a:b382::/32": "19318", - "2604:980:d000::/34": "21859", - "2a01:c50f:ca40::/39": "12479", - "2401:1d40:4000::/32": "59019", - "2804:8cc:f::/48": "272413", - "2804:1be4::/32": "61755", - "2a01:40e0::/47": "8315", - "2409:8914:6600::/39": "56044", - "240a:a038::/32": "142706", - "240e:870::/44": "140485", - "2001:500:a::/48": "13901", - "240a:aec2::/32": "146428", - "2607:7c80:54::/48": "7247", - "2001:559:8752::/48": "7922", - "2001:dd8:1::/48": "38283", - "2001:13c7:6014::/48": "52500", - "2806:2f0:8081::/43": "17072", - "2a06:1287:2600::/44": "62217", - "2c0f:f378::/32": "36941", - "2001:fd0:2201::/39": "10029", - "2602:febe::/38": "30405", - "2c0f:fe78:6000::/32": "37239", - "2409:8904:8e90::/39": "24547", - "2001:520:100e::/43": "8103", - "2001:559:840f::/48": "22909", - "2001:df5:5d00::/48": "4770", - "2001:fd8:32f0::/44": "4775", - "2001:1a12::/29": "8781", - "240a:a6dd::/32": "144407", - "2607:fa48::/39": "5769", - "2001:559:77e::/48": "20214", - "2401:ff80:170b::/45": "133954", - "2405:be00::/32": "18148", - "240e:109:8023::/48": "4134", - "2602:fe0b::/36": "23415", - "2803:af80::/35": "263732", - "2a06:e881:5608::/48": "208340", - "2409:8038:2900::/35": "9808", - "240a:a5ed::/32": "144167", - "2804:4df8::/32": "268231", - "2a02:6900:8204::/48": "206209", - "2001:559:843f::/48": "33491", - "2406:b400:f10::/48": "18209", - "2600:1419:1000::/48": "4230", - "2001:470:60::/48": "50763", - "2001:559:84cb::/45": "33657", - "2409:8d80:7000::/32": "9808", - "240e:108:92::/48": "4134", - "240e:938:a10::/32": "4134", - "2a01:79c0::/32": "58326", - "2a10:64c0::/29": "204007", - "2a03:4bc0:1000::/47": "43893", - "240a:a6c5::/32": "144383", - "2620:132::/44": "63027", - "2001:fd8:b370::/33": "4775", - "2408:8406:5400::/39": "4808", - "2803:4610::/32": "271939", - "2804:7204::/32": "270827", - "240a:ac97::/32": "145873", - "2605:cdc0::/48": "398088", - "2804:14c:ca00::/40": "28573", - "2a10:cc44:10a::/45": "38281", - "2406:b400:57::/44": "18209", - "2801:1b8::/45": "28000", - "2a02:2698:6000::/38": "57378", - "2001:678:75c::/48": "199819", - "2001:1248:70cb::/43": "11172", - "2a02:20d0::/29": "34660", - "2001:678:82c::/48": "59776", - "2402:e380:301::/48": "133072", - "2409:8907:8520::/38": "24547", - "2607:8a00::/32": "7212", - "2a01:bb60::/32": "202120", - "2a09:7d80::/29": "16245", - "2001:559:340::/45": "33651", - "2408:8956:b200::/40": "17622", - "2a02:587:50fb::/34": "6799", - "2a02:26f7:e518::/48": "36183", - "2a07:4ac0:2400::/40": "205881", - "2405:4400::/32": "18001", - "2407:bc00::/32": "37963", - "2600:1419:6::/44": "20940", - "2620:126:2000::/40": "18694", - "2804:2264:3000::/32": "264096", - "2804:38d0::/32": "266503", - "240a:a73e::/32": "144504", - "2804:6e9c::/32": "270608", - "2a07:14c0::/47": "59504", - "2800:4d0::/34": "7004", - "2801:80:22a0::/48": "262654", - "2804:204:321::/37": "28186", - "2800:1e0:2000::/40": "7195", - "2804:e94:4d0::/39": "262468", - "2a0b:3380::/29": "28686", - "2a0b:89c0::/31": "3214", - "2a0d:77c7:d795::/36": "7489", - "2001:559:37b::/48": "7922", - "2001:559:848f::/43": "33657", - "2620:f0:4000::/45": "394699", - "2001:1a11:10b::/48": "42298", - "2402:800:fdc0::/42": "7552", - "2408:8a27:4000::/35": "4837", - "2a00:ad87:1302::/48": "15465", - "2a03:6505::/34": "6731", - "2a0d:86c0::/29": "210181", - "240a:a512::/32": "143948", - "240e:473:5950::/40": "4134", - "2605:f440:9f92::/34": "54874", - "2806:2f0:4381::/42": "17072", - "2806:10be:2::/45": "8151", - "2001:3a0::/32": "7521", - "2a02:26f7:e685::/46": "20940", - "2a02:26f7:f005::/46": "20940", - "2001:559:80db::/48": "33287", - "2804:14d:ae00::/40": "28573", - "2804:6a08::/32": "270307", - "2a00:c020::/36": "197588", - "2a02:26f0:9a00::/48": "34164", - "2a11:2800:4::/48": "210907", - "2001:bb8::/32": "3221", - "2a01:7e0::/42": "44066", - "2001:57a:3202::/36": "22773", - "2001:13c7:600a::/48": "52376", - "240e:108:1181::/48": "133775", - "2800:2a0:5101::/34": "27947", - "2804:ffc::/32": "263612", - "2a0b:f5c0::/29": "205377", - "2001:4b58::/32": "6802", - "2402:800:92ee::/39": "7552", - "2804:720::/32": "262621", - "2804:270c::/32": "262732", - "2804:2e84::/44": "265350", - "2a02:26f0:1801::/39": "20940", - "2a03:8180:1000::/37": "36351", - "2001:559:849b::/48": "7016", - "2600:1406:6001::/38": "20940", - "2604:3d09:f400::/29": "6327", - "2c0f:eb48::/32": "328576", - "2001:dc8:2003::/48": "131123", - "2600:370f:7540::/44": "32261", - "2803:fb00::/32": "262248", - "2804:d0::/32": "28145", - "2a02:26f7:bfc9::/42": "20940", - "2a0c:6c40:a4ef::/48": "20705", - "2c0f:fb08:ff00::/40": "12091", - "2a01:790::/32": "42926", - "2001:df0:467::/48": "131893", - "2801:80:16b0::/48": "265325", - "2804:6a10::/32": "270310", - "2a02:5fc0::/48": "13287", - "2401:4900:47f0::/44": "45609", - "2602:fcd8:1c::/46": "399141", - "2806:230:2015::/48": "11888", - "2401:d800:2cd0::/42": "7552", - "2620:110:d000::/44": "26", - "2804:5550:7692::/32": "263067", - "2a0d:2584:f000::/36": "142566", - "2409:8904:aa40::/39": "24547", - "240e:e9:5000::/37": "138950", - "2620:0:9c0::/48": "7941", - "2001:44b8:4055::/48": "4739", - "240a:a465::/32": "143775", - "240a:ab31::/32": "145515", - "2620:119:c000::/44": "46322", - "2a00:d120::/43": "29990", - "2a03:53c0::/32": "197495", - "2a0b:6b86:b00::/47": "206699", - "2001:559:319::/48": "33657", - "2404:1a40:200::/32": "9744", - "2605:8dc0::/32": "55081", - "2804:2b08::/32": "61578", - "2a00:d70::/32": "29097", - "2c0f:fc89:8038::/40": "36992", - "2001:4490:d930::/46": "9829", - "2804:42e4::/32": "267535", - "2806:34f::/32": "265604", - "2a02:f08::/35": "42184", - "2a0d:4600::/29": "204319", - "2603:f3f8::/21": "396356", - "2605:ed00:4c3::/48": "11351", - "2610:88:223::/32": "14037", - "2a06:f7c0::/29": "202505", - "2804:4748::/32": "267043", - "2001:67c:1530::/48": "61283", - "2401:d800:2350::/42": "7552", - "2409:8914:c000::/39": "56044", - "2600:140f:1601::/39": "20940", - "2606:ae80::/44": "41041", - "2407:a800:3e12::/48": "4713", - "2401:3bc0:901::/35": "137409", - "2403:300:701::/43": "714", - "2602:fdab::/36": "397968", - "2806:370:4040::/40": "28403", - "2a00:8a02:8010::/44": "200656", - "2a0e:b107:5a9::/48": "203943", - "2001:559:19c::/48": "33652", - "2400:8906::/31": "63949", - "2402:800:7b80::/42": "7552", - "2402:e280:400::/40": "134674", - "2804:2b1c::/32": "265135", - "2001:470:c6::/48": "396097", - "2001:559:c1fc::/48": "7922", - "2804:38dc::/32": "266506", - "2804:72c8::/32": "270875", - "2a01:90:400::/48": "29668", - "2001:559:8452::/47": "33287", - "2001:559:c376::/48": "33660", - "2001:df0:c0::/48": "55741", - "2405:1c0:6561::/45": "135062", - "240a:aaff::/32": "145465", - "2a03:7f20::/48": "8473", - "2a05:4740::/32": "59741", - "2001:41c8::/31": "35425", - "2404:3d00:4126::/47": "21433", - "2606:b400:8000::/47": "792", - "2803:7420::/32": "265826", - "2a05:d000:2000::/40": "16509", - "2402:800:9347::/43": "7552", - "2409:8a54::/28": "56040", - "2800:490::/36": "27951", - "2804:4b94::/32": "267316", - "2a0f:1000::/29": "200567", - "2c0f:f030:8000::/33": "328137", - "2804:6a1c::/32": "270313", - "2a02:c382::/32": "9108", - "240e:651:4000::/26": "4134", - "2600:1900:4130::/41": "15169", - "2607:f298:b::/48": "26347", - "2a02:26f7:d889::/42": "20940", - "2a0d:3580::/32": "200303", - "2404:4a00:5542::/62": "55423", - "2405:1c0:6635::/41": "55303", - "2408:8957:a700::/40": "17816", - "2620:82:4000::/48": "22098", - "2804:4ad0::/32": "267265", - "240a:a435::/32": "143727", - "2602:ffc5:60::/64": "8100", - "2a02:1320::/32": "34409", - "2a04:c8c0::/29": "28941", - "2401:3600::/32": "131934", - "2607:f5a0:802::/32": "17048", - "2a0b:de02:48::/48": "6805", - "2001:1248:a4d6::/44": "11172", - "2804:56dc::/32": "268028", - "2403:8600:c090::/42": "45820", - "2806:2f0:2404::/43": "22884", - "2a02:5740:9::/48": "58065", - "2a02:f980::/32": "213270", - "2a07:4e00::/29": "203058", - "2a09:1d80::/29": "62563", - "2001:67c:49c::/48": "2799", - "2001:44c8:41fe::/38": "131445", - "2402:800:5201::/44": "7552", - "240a:a594::/32": "144078", - "2001:559:1a8::/48": "7922", - "2405:8a00:21a6::/43": "55824", - "2803:e0e0::/47": "269852", - "2804:4744::/32": "267042", - "2001:4490:d180::/46": "9829", - "2404:ae40::/32": "138932", - "240e:41:c800::/30": "4134", - "2605:ba80::/32": "40473", - "2804:3504::/32": "265495", - "2a00:4802:2a10::/35": "13124", - "240a:a85f::/32": "144793", - "2804:12c8::/32": "263498", - "2001:559:86e8::/47": "33652", - "240a:a0a6::/32": "142816", - "2804:6c20::/32": "270447", - "2a04:bb80::/29": "62040", - "2a05:5440::/29": "58331", - "2a0e:b107:23f::/48": "209419", - "2001:44c8:b000::/33": "45430", - "240a:a7c7::/32": "144641", - "2a01:ce85::/35": "51964", - "2a02:2892:32::/48": "51185", - "2401:4900:4cc0::/44": "45609", - "2a03:2780::/32": "57238", - "2402:800:94b7::/41": "7552", - "240e:3b9:7a00::/32": "140313", - "2804:67a4:3::/32": "269641", - "2001:43f8:11b0::/48": "328030", - "2405:4340::/48": "135987", - "2408:8456:6a00::/42": "17622", - "240a:af82::/32": "146620", - "2804:f90::/32": "263592", - "2a0c:d0c0::/29": "48390", - "2001:df4:6680::/48": "131971", - "2408:821a::/31": "4837", - "2602:ff3a::/36": "62512", - "2a01:4a00::/32": "44395", - "2001:7f9:4::/48": "42409", - "240a:a372::/32": "143532", - "240a:a733::/32": "144493", - "2806:2f0:1041::/46": "22884", - "2a02:26f0:67::/44": "21342", - "2001:559:c10a::/48": "21508", - "240a:a0b4::/32": "142830", - "2607:f220:411::/48": "70", - "2a00:dc00::/32": "47288", - "2620:10a:30f1::/44": "10349", - "2620:124:b000::/47": "32521", - "2801:192::/40": "262589", - "2a02:26f7:5d::/48": "20940", - "2606:2800:501b::/48": "14153", - "2a01:6980::/32": "43291", - "2001:579:1044::/40": "22773", - "2400:cb00:19::/48": "13335", - "2404:e6:910::/32": "703", - "2406:e000:c11::/44": "23655", - "240a:aa4d::/32": "145287", - "240e:44d::/41": "140345", - "2804:6224::/32": "269278", - "2a02:2e02:2ea0::/39": "12479", - "2a0b:4080::/48": "16509", - "2a0d:f107::/32": "208449", - "2a0f:3800::/29": "198211", - "2001:77c::/32": "5479", - "2402:b801:400::/35": "18371", - "240e:67f:1000::/37": "140330", - "2602:ffc5:30::/46": "7489", - "2620:0:2250::/48": "20130", - "2804:339c::/32": "265407", - "2a00:bd80::/32": "51395", - "2a0b:6800:3::/29": "16150", - "2403:e200:405::/36": "45543", - "240a:aa5f::/32": "145305", - "2604:d600:c14::/46": "32098", - "2800:4f0:10::/46": "28006", - "2806:219:509::/48": "28509", - "2a02:26f7:f8c1::/46": "20940", - "2001:470:122::/43": "6939", - "2001:4408:8508::/45": "55824", - "2600:803:271::/37": "701", - "2a0f:543::/29": "207976", - "2604:3680::/32": "10279", - "2607:fb78::/32": "23309", - "2001:1980:6300::/36": "29838", - "240e:ff:d000::/36": "58543", - "240e:978:1900::/40": "137697", - "2600:1404:ec01::/35": "20940", - "2804:1588::/32": "263393", - "2a02:a48:f000::/36": "49025", - "2a0d:f9c2::/32": "39912", - "2001:620::/29": "559", - "2001:43f8:10a0::/48": "328268", - "2406:f00:3::/48": "55824", - "2803:b4c0::/44": "264668", - "2a02:e600::/30": "204260", - "2001:913:1000::/36": "204059", - "2409:8c34:d00::/38": "9808", - "240a:af76::/32": "146608", - "2001:559:1fa::/48": "7922", - "2602:fc69::/36": "399642", - "2804:14d:d600::/40": "28573", - "2a02:26f7:d049::/42": "20940", - "2001:559:1c9::/48": "33652", - "2401:4900:2500::/45": "45609", - "2a0b:35c0::/29": "200005", - "2a0f:b400::/44": "60781", - "2001:43f8:1030::/48": "3067", - "2001:4888:a60e::/41": "22394", - "2405:9800:b820::/41": "133481", - "240a:a301::/32": "143419", - "2602:feb4:100::/44": "25961", - "2a09:bec0::/32": "21195", - "2a0f:1201::/29": "60781", - "2001:559:4c3::/48": "33491", - "2001:678:3f4::/48": "211509", - "2001:df7:6c00::/48": "134633", - "2620:90:c000::/48": "701", - "2620:13b:d001::/46": "3549", - "2a02:214d:f000::/36": "1241", - "2001:559:12e::/43": "7922", - "2001:559:8355::/48": "33287", - "2404:4f01::/32": "23686", - "240a:a3d8::/32": "143634", - "2600:6c38:18c::/43": "20115", - "2806:264:3300::/37": "13999", - "2a02:26f7:d3c4::/48": "36183", - "2404:ffc0:2::/43": "62707", - "2607:f128:800::/32": "32748", - "2a00:c6c0::/48": "47172", - "2a02:26f7:e2c8::/48": "36183", - "2a05:e1c0::/29": "50673", - "2001:678:518::/48": "205423", - "2a0c:9a40:1030::/47": "34927", - "2001:559:369::/48": "33287", - "2001:43f8:a40::/48": "31960", - "240a:a09d::/32": "142807", - "2607:fb90:3300::/37": "21928", - "2610:8::/32": "3999", - "2800:160:175a::/42": "14259", - "2806:3aa::/32": "265627", - "240e:3b2:9200::/36": "140317", - "2804:2fc::/32": "53238", - "2a00:72e0::/32": "201635", - "2a0f:6fc2::/32": "51837", - "2001:559:7a2::/48": "33659", - "2001:559:82cc::/48": "33287", - "2403:1940:20::/48": "137935", - "240a:a9eb::/32": "145189", - "2801:8c::/32": "262857", - "2803:9800:a4c3::/39": "11664", - "2a00:7145:c1::/46": "51430", - "2001:4490:3e00::/42": "9829", - "2406:6e00::/39": "17457", - "2a02:6300:31::/32": "50128", - "2a05:b4c0::/47": "201093", - "2001:559:466::/48": "33659", - "2001:df0:310::/48": "17547", - "2001:fe8:8130::/47": "24435", - "2400:2000:b::/45": "20940", - "2403:da00::/32": "3382", - "2600:1017:b400::/42": "22394", - "2001:67c:a8::/48": "197269", - "2803:7600::/32": "265751", - "2804:4b34::/32": "267290", - "2804:6f1c::/32": "270639", - "240e:982:1000::/39": "137695", - "2408:8956:5f00::/40": "17816", - "240e:f7:4000::/36": "58461", - "2806:2f0:41e1::/46": "17072", - "2a0b:b600:3c04::/48": "43350", - "2001:df6:a480::/48": "141815", - "2408:873d:3000::/32": "4837", - "2600:c09::/32": "12178", - "2804:1828::/32": "61921", - "2a00:6440::/32": "12406", - "2a02:ee80:4155::/48": "3573", - "2001:559:7ca::/48": "7922", - "2001:13b0:800d::/46": "267790", - "240e:3b5:f100::/36": "4134", - "2804:18:5030::/34": "26599", - "2a06:3980::/29": "34694", - "2a09:f0c0::/29": "209169", - "2001:559:85d7::/48": "33662", - "2403:5800:a000::/33": "4764", - "240a:a0ce::/32": "142856", - "2800:970::/32": "27787", - "2a00:4020::/32": "24800", - "2a02:26f7:fb80::/48": "36183", - "2a07:5540::/29": "35346", - "2602:feda:dff::/48": "147071", - "2804:36e4::/32": "266379", - "2a02:ee80:402b::/43": "3573", - "2a09:4b40::/29": "61317", - "2408:84f3::/34": "17816", - "2600:1002:f100::/44": "6167", - "2a02:2f0f:385::/32": "8708", - "2001:559:86a2::/45": "7922", - "2804:c80::/32": "52719", - "2804:e94:4::/44": "262468", - "2600:1006:b0d0::/42": "6167", - "2a0b:4340:22::/48": "205651", - "2a02:4540:c0::/45": "197207", - "2a0b:2080::/32": "36924", - "2001:678:310::/48": "6830", - "2406:2000:efa6::/48": "56173", - "2407:ef00::/36": "12422", - "240a:a7bb::/32": "144629", - "2801:80:810::/48": "263662", - "2a0c:280::/30": "34966", - "2a0c:a880::/29": "204754", - "2001:559:8618::/48": "33651", - "2408:840d:ab00::/42": "17621", - "240e:fb:d000::/34": "4134", - "2607:f8f0:e00::/40": "271", - "2400:cb00:376::/44": "13335", - "2403:9800:c021::/43": "4648", - "2c0f:eee8::/48": "327952", - "2001:559:81f7::/48": "33651", - "2001:90f::/32": "204873", - "2600:1488:6001::/40": "20940", - "2800:bf0:30::/44": "52257", - "2804:70d8::/32": "270743", - "2001:559:786::/48": "33491", - "2a09:2940::/32": "209898", - "2001:559:bc::/48": "33652", - "2001:559:854c::/47": "33652", - "2409:805c:30c1::/42": "9808", - "240a:a61e::/32": "144216", - "240e:108:10e0::/47": "137687", - "240e:44d:5000::/41": "140345", - "2600:250e:f000::/36": "1246", - "2407:500:1000::/48": "58940", - "2408:80ea:75a0::/41": "17816", - "2408:84f3:f810::/44": "17623", - "2404:f4c0:f90a::/48": "139833", - "2408:877c::/32": "137539", - "2800:6f0:9800::/40": "20207", - "2a01:8180:2000::/36": "20594", - "2a02:2160:8000::/36": "44679", - "2001:fd8:1a4::/46": "132199", - "2401:d800:f890::/41": "7552", - "2620:0:50e0::/48": "31859", - "2620:111:1008::/48": "18469", - "2620:149:a11::/48": "714", - "2a02:26f7:b6c0::/48": "36183", - "2606:5600::/32": "33494", - "2001:df4:1e80::/48": "136632", - "2001:fd0:201::/39": "10029", - "2620:74:28::/48": "397195", - "2402:e280:210d::/46": "134674", - "2409:8028:8f5::/44": "56041", - "2804:60d4::/32": "269194", - "2a01:5f60::/32": "199321", - "2a0b:f4c1::/48": "60729", - "2c0f:fe38:2120::/38": "33771", - "2001:550:7707::/48": "174", - "2620:119:5071::/46": "13443", - "2a01:53a0:1::/48": "199953", - "2001:df1:3b80::/48": "139609", - "2402:3a80:1400::/42": "38266", - "2409:8904:c9a0::/38": "24547", - "240a:af99::/32": "146643", - "2610:20:90a0::/44": "3477", - "2402:800:57ee::/36": "7552", - "2600:1404:29::/36": "20940", - "2602:fcec::/36": "16390", - "2a00:1cf8::/35": "44944", - "2a0e:e704:50::/44": "47837", - "2a11:af00::/29": "208861", - "2001:df6:6380::/48": "141866", - "2403:e100::/35": "58601", - "2408:8776::/28": "4837", - "2409:8904:4d60::/38": "24547", - "2801:17a:6::/44": "270105", - "2804:25f0::/32": "264311", - "2804:4dc8::/32": "268219", - "2a02:6680:2133::/44": "16116", - "2c0f:ff40::/26": "10474", - "2001:67c:14c8::/47": "29478", - "2001:c79::/32": "2764", - "2400:ca02:f01f::/40": "23688", - "240a:a3ee::/32": "143656", - "2a02:26f7:c109::/42": "20940", - "2a03:db80:4c84::/48": "5501", - "240a:60:f000::/44": "9605", - "2001:253:110::/48": "142076", - "2001:559:45e::/48": "7922", - "2408:8459:1a50::/39": "17816", - "2a0b:6240::/29": "197637", - "2402:800:3a2b::/41": "7552", - "2402:5300:710::/36": "45903", - "2604:1d40:200::/48": "30612", - "2800:160:1807::/43": "14259", - "2a02:26f0:e401::/39": "20940", - "2a0d:7a00::/29": "205145", - "2402:f180:1::/48": "9293", - "240a:a69c::/32": "144342", - "2a0e:a880::/36": "51561", - "2a0f:8f80::/29": "43414", - "240e:108:8d::/48": "137693", - "240e:950::/36": "137693", - "2603:c001:2010::/37": "31898", - "2804:285c::/32": "263958", - "2804:6ea0:8030::/34": "270609", - "2804:7de4::/32": "271589", - "2a0e:240::/29": "209993", - "2001:4888:8062::/47": "6167", - "2405:7f00:3250::/48": "9716", - "2804:187c:8130::/33": "262673", - "2a02:26f7:e784::/48": "36183", - "2a02:26f7:ea08::/48": "36183", - "2a09:e681::/32": "201702", - "2400:7400:e020::/48": "38044", - "2401:d800:bef0::/39": "7552", - "240a:ad71::/32": "146091", - "2804:2d08::/32": "265258", - "2a02:26f7:b749::/42": "20940", - "2001:67c:16b8::/48": "25166", - "2a00:c5e0::/32": "198399", - "2a02:26f7:e945::/46": "20940", - "2a02:c6c2::/31": "58061", - "2804:4e50::/32": "268253", - "2001:ee0:e300::/37": "45899", - "2604:f400:11::/48": "32654", - "2a02:26f7:e281::/46": "20940", - "2602:808:7000::/44": "14618", - "2605:a401:86cd::/43": "33363", - "2001:1248:a4f4::/39": "11172", - "2405:5500::/32": "54187", - "2600:9000:11d4::/47": "16509", - "2804:351c:1112::/32": "266269", - "2a02:26f7:e8c8::/48": "36183", - "2a02:27e8::/32": "51708", - "2a0d:c040::/29": "210081", - "2001:678:b90::/48": "35407", - "2001:67c:1810::/48": "62392", - "2001:694::/48": "207969", - "2402:8100:3031::/45": "55644", - "2605:5c0:40::/44": "26517", - "2610:1e0::/35": "3714", - "2a02:2638:5::/48": "44788", - "2001:1938:2::/44": "12989", - "2001:448a:6110::/35": "7713", - "2402:800:41e7::/44": "7552", - "2804:1b3:6f42::/32": "18881", - "2804:ad4:d100::/34": "52925", - "2001:df0:411::/48": "17439", - "2001:b031:ae00::/30": "3462", - "2404:c0:31a0::/38": "23693", - "2406:e780:eb0::/48": "63678", - "2605:7fc0::/32": "395846", - "2620:121:d000::/44": "19108", - "2620:149:5b6::/41": "714", - "2001:67c:2808::/48": "197678", - "2001:fd8:2a8::/39": "4775", - "2a00:1308::/32": "16138", - "2001:d50::/32": "7665", - "2406:2000:a9::/41": "10310", - "2408:8956:5000::/40": "17622", - "2a0d:6780::/29": "200899", - "2001:dce:5301::/34": "23869", - "2408:84f3:a410::/42": "134543", - "2604:d600:620::/47": "32098", - "2a02:26f7:ed00::/48": "36183", - "2a04:d480:2400::/35": "25291", - "2001:559:c0d8::/48": "33662", - "2804:10bc::/37": "263646", - "2a0c:3500:3::/48": "42989", - "2a0d:9f40::/29": "204326", - "2409:8904:a340::/37": "24547", - "240a:a3b3::/32": "143597", - "2607:fb08::/45": "32703", - "2620:114:3002::/48": "54391", - "2806:1018:cbff:100::/48": "8151", - "2a02:b18::/32": "35339", - "2a04:4e40:a400::/48": "54113", - "2402:800:9a47::/43": "7552", - "240e:438:1420::/43": "140647", - "2804:14c:4785::/41": "28573", - "2a03:3f40:8a::/32": "50673", - "2a03:e140:35::/48": "56674", - "2a0d:4940::/29": "197706", - "2001:559:c22f::/48": "7922", - "2001:1940::/32": "21947", - "2604:4d40:eff::/48": "213073", - "2001:559:2f::/48": "33491", - "2001:818::/29": "12353", - "2400:adc1::/30": "9541", - "2606:2800:357::/44": "15133", - "2607:f380:a69::/32": "2152", - "2803:7da0:a::/48": "64114", - "2a07:a300::/30": "46723", - "2001:559:c047::/44": "7922", - "2605:a401:884a::/40": "33363", - "2804:3b2c:9000::/33": "266133", - "240a:a4b5::/32": "143855", - "240e:698:2400::/40": "134768", - "2605:9d80:a011::/48": "36678", - "2610:130:1d00::/34": "6122", - "2804:1450::/32": "262861", - "2804:7588::/32": "271053", - "2a02:ce80::/46": "200183", - "240e:438:1820::/43": "140647", - "2604:4d40:70ae::/48": "399196", - "2606:6c00:ffff::/48": "32787", - "2620:114:3000::/48": "54391", - "2800:160:1770::/45": "14259", - "2a02:1370::/32": "39324", - "2620:cc::/48": "40816", - "2001:559:c161::/46": "7922", - "2409:8d06::/28": "9808", - "2804:6d30::/32": "262831", - "2a0b:b87:ffe1::/48": "204994", - "2001:4168::/32": "31424", - "2001:b400:d410::/36": "3462", - "240a:a326::/32": "143456", - "2606:3a80:800::/48": "36007", - "2803:bc40::/32": "52468", - "2a01:94c0::/32": "31370", - "2a03:38a0::/32": "60781", - "2408:8256:318a::/48": "17816", - "240a:a1a7::/32": "143073", - "2602:805:6000::/48": "36127", - "2602:fcd7::/36": "6939", - "2a0d:a280::/29": "206487", - "2001:4d18::/48": "39543", - "2001:480:aa::/48": "5132", - "2001:559:3e3::/45": "33662", - "2001:559:470::/48": "7922", - "2406:e001:a000::/33": "23655", - "240a:a7f9::/32": "144691", - "2a07:e00:bb::/45": "210083", - "2001:418:c06::/48": "262", - "2403:ac80:89::/32": "4785", - "2001:420:4488::/32": "109", - "2001:14c8::/32": "16128", - "2401:df40:2::/48": "38001", - "2804:2d1c::/32": "265262", - "2a00:1288::/41": "10310", - "2a02:e982:53::/48": "19551", - "2800:5b0::/32": "27975", - "2806:230:203c::/48": "265594", - "2a00:1728:d::/48": "198228", - "2a06:1287:330e::/47": "206499", - "2a0b:7dc0::/32": "205494", - "2409:8027:2b07::/32": "9808", - "2606:b400:8824::/46": "14506", - "2a00:4802:270::/40": "13124", - "2001:480:1671::/34": "668", - "2001:df2:7b80::/48": "138530", - "240a:ad97::/32": "146129", - "2804:10c8:caff::/34": "263649", - "2409:8070:2c00::/35": "9808", - "2803:8800::/32": "28022", - "2a02:a58::/32": "8953", - "2a02:26f7:e1c8::/48": "36183", - "2c0f:f448::/39": "327880", - "2001:67c:2f64::/48": "34393", - "2401:d800:3d0::/37": "7552", - "2602:ffdf:400::/36": "63060", - "2a06:f980::/29": "174", - "2001:559:243::/48": "21508", - "2001:559:356::/47": "7015", - "2001:df0:96::/48": "45770", - "240a:a50c::/32": "143942", - "240e:981:8100::/36": "4134", - "2600:380:9400::/39": "20057", - "2a09:4c2:2f::/48": "58133", - "2a0c:5247:3000::/36": "59504", - "2408:870c:10::/44": "17621", - "2408:8956:2a40::/40": "17622", - "2409:8053:1802::/40": "56047", - "240a:acd4::/32": "145934", - "2602:fdb8:1f0::/44": "394151", - "2a01:8840:ba::/45": "12041", - "2a0d:2587::/32": "211398", - "2001:16d8:60::/45": "16150", - "2604:ef00::/32": "18988", - "2a01:52c0::/32": "15644", - "2a0b:aa00::/29": "20811", - "2402:fa00:6000::/32": "55359", - "2405:4803:40a::/36": "18403", - "2602:feb4:190::/44": "25961", - "2a0c:1680::/29": "15874", - "2001:550:a01::/48": "18640", - "2409:8753:d00::/38": "56047", - "2804:ef4:5402::/38": "28642", - "2a0a:c840::/31": "205394", - "2001:3c8:9008::/48": "4621", - "240a:a1e3::/32": "143133", - "240a:aa70::/32": "145322", - "2c0f:f8c0::/32": "37529", - "2001:67c:1288::/48": "29560", - "2001:44b8:6060::/45": "7545", - "2409:8704:7d00::/32": "24547", - "240a:a754::/32": "144526", - "2806:2f0:2484::/43": "22884", - "2a0c:2c00::/29": "205266", - "2a0e:ce40::/29": "209411", - "2604:f400:4800::/37": "29930", - "2a00:8a01::/44": "10455", - "2a05:5cc0::/29": "57877", - "2a0b:b87:ffee::/48": "213361", - "2a01:9c80::/29": "35805", - "2001:67c:2eb4::/48": "207372", - "2401:fa00:42::/43": "24424", - "2402:28c0::/46": "136620", - "2403:a000::/32": "9658", - "2405:1c0:6835::/41": "55303", - "240a:a931::/32": "145003", - "2620:8:8200::/48": "54282", - "2a0b:6800:1::/46": "42695", - "240a:a54f::/32": "144009", - "2600:6c39:9::/45": "20115", - "2a01:4b40:3000::/36": "21299", - "2405:1c0:7f11::/46": "135062", - "2803:c800::/33": "23243", - "2804:45b0::/32": "266943", - "2804:4bc8::/32": "267329", - "2001:c20:c824::/46": "9255", - "2001:44b8:3083::/48": "4739", - "2403:e200:1e::/37": "45543", - "2600:1417:6::/47": "20940", - "2602:fea2:1::/46": "40680", - "2001:559:3f0::/48": "7922", - "2804:14d:8471::/40": "28573", - "2a0f:4ac0::/35": "207921", - "2804:1040::/33": "263626", - "2a04:2b00:100::/48": "42044", - "2a07:c100::/29": "202398", - "2a0d:2406:200::/39": "64425", - "2401:8d00:2::/48": "24149", - "2c0f:f440::/32": "5713", - "2001:550:2210::/48": "397601", - "2001:fb1:fe1::/34": "17552", - "240e:109:8042::/48": "58466", - "2600:1406:2601::/36": "20940", - "2603:90f5:e::/48": "20115", - "2801:11:4000::/48": "10753", - "2804:5864::/32": "268126", - "2600:6c38:31c::/42": "20115", - "2604:b840::/32": "397732", - "2a07:5740::/31": "44901", - "2a0f:9400:802a::/48": "20473", - "2001:df5:4c00::/48": "132711", - "2402:800:57c5::/43": "7552", - "2406:e640::/48": "140766", - "2c0f:f0f8::/32": "36924", - "2001:913:5000::/36": "209090", - "240a:a84d::/32": "144775", - "2620:0:c12::/45": "22317", - "2804:5534::/37": "268696", - "2806:370:5600::/40": "28403", - "2a00:fc00:e001::/46": "3255", - "2409:805e:1900::/34": "9808", - "240a:af85::/32": "146623", - "2a06:1e00:60::/48": "60695", - "2a02:16d8:103::/48": "15133", - "2001:df0:301::/48": "18402", - "2402:a300:8000::/45": "55427", - "2404:7ac0:660::/44": "4842", - "240a:aafc::/32": "145462", - "2600:1480:9801::/37": "20940", - "2600:1f14::/35": "16509", - "2806:2f0:5081::/42": "17072", - "2a02:2110::/32": "57910", - "2a02:26f7:e7c9::/46": "20940", - "2001:df4:fc00::/48": "136557", - "2403:fa40:1::/48": "38001", - "2409:8915:2a00::/40": "56044", - "2409:8c28:a3c1::/33": "56041", - "240a:a474::/32": "143790", - "2800:5f0:2034::/46": "22724", - "2a0e:e704:60::/44": "212469", - "240a:afae::/32": "146664", - "240e:473:3d50::/40": "4134", - "2a05:f507:d::/42": "13443", - "2001:67c:2468::/48": "48894", - "2001:13c7:7014::/48": "28504", - "2001:4bb8::/29": "8447", - "2404:8c80::/32": "55933", - "2404:b180::/32": "135310", - "2600:140f:b001::/37": "20940", - "2602:80b:5000::/47": "18792", - "2a0b:6e80::/29": "30745", - "2001:500:7d::/48": "42", - "2001:678:704::/48": "3246", - "240e:3b5:2200::/37": "136198", - "2806:230:6013::/48": "11888", - "2a01:8840:4a::/45": "12041", - "2a09:1200::/29": "39182", - "2a0c:a80::/29": "200000", - "2a02:20f8::/32": "34510", - "240e:44d:3480::/41": "4134", - "2a02:ee80:4083::/42": "3573", - "2a0c:1480::/29": "16353", - "2001:559:848c::/48": "7015", - "2001:67c:19a4::/48": "51815", - "2806:230:5002::/48": "265594", - "2a05:8900:28::/48": "199159", - "2a0a:4e83:ae40::/48": "206074", - "2a05:2180::/29": "20661", - "2001:678:a5c::/48": "209075", - "2001:67c:2b78::/48": "59516", - "2001:df0:2a7::/48": "55697", - "2403:0:117::/44": "4755", - "2408:8956:a500::/40": "17816", - "2804:673c:1000::/40": "264598", - "2806:2f0:2181::/46": "22884", - "2a0c:7ac0::/29": "203215", - "240a:abeb::/32": "145701", - "2800:3b0:10ff::/48": "6429", - "2804:d7c::/39": "52634", - "2001:559:8149::/48": "7922", - "2404:1c00::/32": "55454", - "240a:af22::/32": "146524", - "240a:ac71::/32": "145835", - "2602:102:1016::/48": "20115", - "2604:5400:8000::/37": "11776", - "2803:6900:1514::/48": "52423", - "2804:2bc::/32": "262832", - "2804:7d64::/32": "271558", - "2a11:4e00::/36": "213042", - "2001:418:1420:300::/44": "2914", - "2001:1b70:b3::/48": "6461", - "2001:4878:8321::/45": "12222", - "2800:160:1623::/44": "14259", - "2804:3d90::/32": "266539", - "2804:4284::/38": "267505", - "2a0c:9a40:8083::/48": "49367", - "2001:559:c118::/48": "33657", - "2407:2bc0::/32": "136380", - "2409:8060:100::/36": "9808", - "2600:1417:41::/48": "24319", - "2a00:8860:500::/40": "207134", - "2a01:758::/48": "15785", - "2001:978:2204::/39": "174", - "2001:fd0:e::/40": "10029", - "2001:4830:c211::/39": "27552", - "240e:978:4100::/36": "4134", - "2605:3380:4171::/40": "12025", - "2804:350c::/32": "265497", - "2001:8a0::/32": "3243", - "2402:bd80::/32": "47787", - "2a05:37c0::/29": "48091", - "2a05:c200::/29": "201050", - "2a10:7080::/48": "41955", - "2800:160:1676::/44": "14259", - "2804:74e8::/32": "271011", - "2001:4408:7c01::/40": "4758", - "2a04:4e40:e000::/48": "54113", - "2a0c:2f40::/30": "59829", - "2001:460:104::/32": "3561", - "2405:6400:5000::/32": "23678", - "2804:1e38:f000::/36": "264415", - "2a05:2500::/32": "31586", - "2401:c680:2::/44": "133854", - "2001:df2:4100::/48": "132304", - "240a:ad87::/32": "146113", - "2600:6c38:202::/42": "20115", - "2804:14d:5c5f::/40": "28573", - "2a03:b000::/40": "42695", - "2001:559:15c::/48": "7922", - "2001:559:c242::/48": "33651", - "2806:2f0:21e1::/43": "22884", - "2402:800:51ee::/38": "7552", - "2405:ff00::/32": "132519", - "240a:a58e::/32": "144072", - "2606:6680:4::/48": "40676", - "2804:257c::/32": "52716", - "2001:19f8:211::/48": "26402", - "2403:5700::/47": "2497", - "2602:feda:b60::/46": "146950", - "2804:c2c::/32": "28191", - "2001:df6:ca00::/48": "136026", - "2600:e00f:4000::/45": "22995", - "2602:fd92:633::/48": "142634", - "2804:14d:8e00::/40": "28573", - "2804:2844:8000::/33": "263951", - "2a02:2108::/32": "43284", - "2a03:7ae0::/32": "200846", - "2001:468:2809::/126": "11537", - "2001:559:8709::/48": "33668", - "2408:862a:9200::/34": "139007", - "2804:407c::/32": "265962", - "2a01:358:401a::/47": "9121", - "2a01:8600::/32": "8636", - "2408:8459:4630::/41": "17622", - "240e:438:8a20::/43": "140647", - "2a00:1288:89::/39": "10310", - "2c0f:fb88::/32": "37143", - "2001:559:2fa::/48": "7015", - "2001:b400:f208::/45": "17421", - "2a06:45c0::/32": "200425", - "2403:cc00:3000::/36": "20860", - "2405:1c0:6611::/45": "135062", - "2604:f980:4300::/44": "19957", - "2a00:b8e0::/48": "29119", - "2a02:26f7:d984::/48": "36183", - "2001:678:938::/48": "29608", - "240a:a015::/32": "142671", - "2602:ffba::/36": "40761", - "2402:af00::/32": "38719", - "2404:ae00:12::/47": "45474", - "2804:6164:8000::/34": "262424", - "2a02:26f7:cb88::/48": "36183", - "2604:4340::/32": "32647", - "2a02:26f0:8a00::/48": "34164", - "2001:559:83cb::/48": "33657", - "2402:800:352b::/41": "7552", - "240a:a49f::/32": "143833", - "2a0f:df00:dead::/48": "41281", - "2001:c20:4860::/45": "3758", - "2602:fdc2:55::/48": "397720", - "2804:13d0:9a40::/33": "263297", - "2804:6268::/32": "269295", - "2a03:2880:f06b::/45": "32934", - "2001:4490:3fe4::/44": "9829", - "2408:80ea:62c0::/42": "17622", - "2804:5c::/32": "28201", - "2a0e:aa07:f093::/45": "208884", - "2804:1b2:d000::/39": "18881", - "2001:559:c00e::/47": "33651", - "240a:a109::/32": "142915", - "240a:a518::/32": "143954", - "240a:ab0e::/32": "145480", - "2804:28a8::/32": "263973", - "2a00:6f00::/32": "31273", - "2a0d:82c7:6::/35": "47787", - "2001:1248:845d::/42": "11172", - "2408:8656:1800::/34": "17816", - "2a03:a100::/32": "56635", - "2401:ff80:1c05::/44": "133954", - "2603:c002:1310::/37": "31898", - "2801:80:2510::/48": "268507", - "2a00:eec0::/32": "3292", - "2408:8256:1666::/39": "17622", - "2804:ce8::/32": "52574", - "2408:840c:2b00::/40": "17621", - "2408:8459:8a30::/41": "17622", - "2801:1f0:4050::/44": "3573", - "2001:418:2401:2::/60": "2914", - "240a:a151::/32": "142987", - "2001:559:4c6::/44": "7922", - "2401:8640::/32": "23884", - "2408:8957:3e00::/40": "17622", - "2409:8a50:300::/37": "56047", - "2600:6c10::/29": "20115", - "2607:f830::/32": "1998", - "2a07:2280::/29": "48909", - "2603:c002:1010::/38": "31898", - "2620:117:80::/48": "10564", - "2800:ba0:16::/48": "263812", - "2804:145c:81d0::/36": "263327", - "2a00:d08::/32": "48218", - "2a0e:8f02:2100::/46": "211870", - "2a0e:b107:30::/48": "209650", - "2001:559:4ab::/48": "33287", - "2409:8051:2c00::/38": "9808", - "2001:57a::/39": "22773", - "2001:dd8:1f::/48": "56088", - "2a02:26f7:89::/48": "20940", - "2001:559:86bf::/41": "7725", - "2001:559:877c::/48": "33287", - "2404:e801:200f::/43": "55430", - "2404:f4c0:ff04::/48": "139247", - "2600:1408:ac01::/38": "20940", - "2804:fc0::/32": "263601", - "2804:4d04::/32": "267407", - "2a02:26f7:ae::/48": "36183", - "2a0c:c181::/32": "46844", - "2001:df5:e780::/48": "141642", - "2403:cc0::/32": "131314", - "2409:8050:800::/47": "56047", - "2620:a7::/48": "17172", - "2a0f:5880::/29": "204860", - "2600:140b:7c00::/48": "31109", - "2a10:1cc0::/48": "57330", - "2c0f:f748:10d::/32": "37662", - "2604:8c0::/32": "209", - "2001:678:b60::/48": "12496", - "2001:1248:57f2::/44": "11172", - "2405:4803:dd98::/34": "18403", - "240a:aba2::/32": "145628", - "2800:160:2034::/41": "14259", - "2804:48e0::/32": "267150", - "2a03:88c0::/32": "9150", - "2001:1af0:9020::/48": "43009", - "2409:8a51:500::/38": "56047", - "240a:afb9::/32": "146675", - "240e:6bb:2000::/36": "140316", - "2804:10e8:1003::/33": "263655", - "2a0e:97c0:1a1::/48": "211868", - "2a0c:b540::/32": "62188", - "2402:800:32c5::/43": "7552", - "240e:5a:4a80::/34": "4134", - "240e:3b0:1200::/39": "4134", - "2803:5200:1000::/36": "28319", - "2a00:1080::/32": "43646", - "2a06:c300::/29": "197660", - "2a09:4740::/48": "44364", - "2402:8100:2012::/41": "45271", - "2605:ed40::/32": "31998", - "2001:559:80af::/48": "33491", - "2a00:4b80::/48": "43833", - "2a01:cb00::/26": "3215", - "2a02:fec0::/29": "58173", - "2a0a:7700::/29": "206984", - "2001:559:c301::/48": "33491", - "240a:aacf::/32": "145417", - "2804:e30:418::/38": "11338", - "2804:79d8::/32": "271331", - "2001:f20:3000::/46": "9875", - "2800:bf0:82d1::/42": "27947", - "2600:1417:3000:300::/48": "24203", - "2602:240::/28": "46375", - "2800:bf0:8000::/44": "52257", - "2804:2554::/32": "264274", - "2a00:8a02:10::/44": "200656", - "2001:559:71c::/48": "20214", - "2001:678:4c0::/48": "41948", - "2806:1070:ceff::/62": "8151", - "2a03:2480:8010::/44": "200107", - "2a0d:5642:104::/48": "35487", - "2804:e30:1c00::/38": "11338", - "2a0b:2281::/29": "43685", - "2402:ce80:3::/48": "133005", - "240a:a067::/32": "142753", - "2604:d600:1603::/43": "32098", - "2a04:8d40::/29": "50304", - "2a10:7b40::/29": "9186", - "2804:190::/38": "53165", - "2001:67c:754::/48": "204254", - "2001:1a11:85::/46": "8781", - "2401:d800:190::/42": "7552", - "2408:8456:3400::/41": "17623", - "240c:6:4::/28": "45275", - "2600:380:7d80::/32": "20057", - "2803:7200:8012::/45": "27696", - "2804:22f0::/32": "264133", - "2a02:26f7:c545::/46": "20940", - "2a04:92c7:16::/48": "49981", - "2a04:d900::/29": "8470", - "2c0f:f980:7000::/32": "33763", - "2804:7bf4::/32": "271465", - "2a04:e8c0::/29": "44486", - "2620:1f:4000::/48": "14086", - "2804:74d4::/32": "271006", - "2a01:5a8::/47": "8866", - "2402:800:3afe::/39": "7552", - "2402:800:5de0::/44": "7552", - "2804:37f0:c100::/35": "266445", - "2a02:26f7:e680::/48": "36183", - "2a09:7d40:9::/32": "209382", - "2a0b:4d07:901::/48": "44239", - "2402:b8c0::/32": "55966", - "2404:200::/32": "7672", - "240e:473:5c00::/41": "140485", - "2600:1009:b0f0::/44": "22394", - "2605:b380::/32": "13333", - "2a0a:4f80::/32": "206281", - "2001:df2:e200::/48": "133661", - "2403:c00:900::/45": "17488", - "2602:feb2:80::/36": "62492", - "2605:b9c0::/34": "30705", - "2800:4b0:880d::/46": "12252", - "2803:e600:bc00::/33": "18809", - "2a02:f38:3::/48": "8422", - "2a0b:59c0::/31": "204945", - "2001:4490:d8c0::/46": "9829", - "2400:dcc0:a304::/37": "38631", - "240a:a1e6::/32": "143136", - "240a:a8b5::/32": "144879", - "2a0b:6b86:f00::/48": "211387", - "2a0c:c8c0::/47": "202315", - "2a02:26f0:b401::/39": "20940", - "2401:d800:930::/41": "7552", - "2401:d800:5510::/42": "7552", - "2408:8456:c840::/40": "17816", - "240a:a59a::/32": "144084", - "2620:107::/40": "11318", - "2800:a0::/29": "6057", - "2803:6900:1500::/47": "52423", - "2a03:a860:53::/48": "397192", - "2a04:e800:5020::/48": "57976", - "2804:29f4::/37": "264047", - "2001:90c::/30": "12618", - "2001:1838:6005::/32": "23352", - "2408:8456:6240::/39": "17816", - "240e:438:1040::/38": "4134", - "2600:1480:c100::/36": "20940", - "2607:fa70:2490::/32": "19855", - "2804:14d:8e8e::/41": "28573", - "2804:5db8::/32": "268988", - "2001:a17::/32": "204679", - "2600:9000:20b5::/41": "16509", - "2804:2214:8008::/46": "28177", - "2804:8330::/32": "272182", - "2a00:9480::/32": "34578", - "2409:8053:900::/37": "9808", - "240a:ab99::/32": "145619", - "2a0a:1240:1100::/32": "12440", - "2602:fef4:200::/48": "54721", - "2001:520:105a::/48": "8103", - "2001:678:428::/48": "24642", - "2400:5280:fc00::/38": "63199", - "2403:300:a0b::/48": "714", - "240a:acb1::/32": "145899", - "240e:44d:1280::/41": "4134", - "2600:1003:b840::/42": "6167", - "2610:a1:30fc::/48": "397228", - "2801:80:13a0::/48": "264080", - "2804:7ab4::/39": "271387", - "2001:1388:5988::/37": "6147", - "2620:10a:80d4::/48": "27299", - "2800:160:116f::/43": "14259", - "2804:26cc::/32": "263858", - "2804:6fc8:8000::/37": "270684", - "240a:a44b::/32": "143749", - "2803:ff20::/32": "262186", - "2a02:26f0:7901::/38": "20940", - "2a03:ad40:140::/48": "199349", - "2a0d:c740:3c::/48": "197226", - "2a0d:cc80::/29": "59493", - "2001:559:8107::/48": "7725", - "2402:1300::/36": "38716", - "2a01:3e0:402::/48": "34164", - "2a02:4bc0::/32": "20618", - "240a:a9f5::/32": "145199", - "2804:3304::/32": "265111", - "2a00:50e0::/48": "41858", - "2a0a:3d00::/48": "1836", - "2402:800:589b::/41": "7552", - "2406:840:edd0::/48": "38173", - "2a02:b50::/34": "15570", - "2a02:26f0:4601::/39": "20940", - "2a02:26f7:b984::/47": "36183", - "2001:df6:3380::/48": "141884", - "2600:1003:f450::/36": "22394", - "2a00:c2c0:ffff::/48": "46844", - "2a03:1e80:ff6::/47": "8767", - "2a0e:97c5:6a0::/46": "20473", - "2001:678:acc::/48": "60404", - "2001:bf7:fc10::/38": "44194", - "2001:2004::/28": "1299", - "2804:52f4:a50::/42": "268552", - "2a02:2278:fffd::/46": "59613", - "2a0a:2340::/30": "46723", - "2400:cb00:a940::/47": "13335", - "2400:dd02:100b::/43": "7497", - "240a:a3ea::/32": "143652", - "240e:3b8:2200::/37": "136198", - "2a00:c40::/32": "34315", - "2a02:ea0::/29": "16218", - "240a:ad6c::/32": "146086", - "240e:438:6840::/38": "4134", - "2620:49:8080::/48": "7046", - "2620:13b:d003::/44": "46691", - "240e:679:8800::/38": "140330", - "2602:808:a003::/45": "16509", - "2605:a401:8089::/46": "33363", - "2a02:1c8::/47": "24955", - "2001:559:803b::/48": "26419", - "2001:13c7:7004::/48": "263779", - "240a:60:f010::/44": "9605", - "2406:7400:70::/45": "24309", - "240e:473:5400::/41": "140485", - "2606:fc00::/32": "12097", - "2804:20c0::/32": "264512", - "2a02:26f7:df00::/48": "36183", - "2a09:be40:b200::/40": "34641", - "2a0b:b87:ffe2::/48": "205036", - "2804:328::/32": "262868", - "2001:559:86c9::/48": "20214", - "2001:678:e24::/48": "212717", - "2001:4b98:dc7::/32": "29169", - "2408:8956:2ac0::/39": "17816", - "2409:8051:2002::/40": "56047", - "240a:a753::/32": "144525", - "2600:8807:ac00::/35": "22773", - "2a11:580::/29": "62206", - "2401:d800:f4d0::/42": "7552", - "2402:8200::/32": "9790", - "2404:c140:154::/47": "138997", - "2605:9380::/32": "32614", - "2800:160:1f1f::/42": "14259", - "2a10:f5c0::/29": "211357", - "2001:559:8366::/47": "7015", - "2001:1248:9a7f::/40": "11172", - "2a03:5640:f561::/36": "2906", - "2a09:5940::/29": "209304", - "2a0e:b107:1480::/48": "57401", - "2a0e:ac00::/32": "48447", - "2001:668:118::/45": "3257", - "2402:800:9671::/40": "7552", - "240a:a67c::/32": "144310", - "240a:aa1f::/32": "145241", - "2607:ff60:4::/43": "3900", - "2804:3bcc::/35": "266171", - "2001:559:163::/48": "33652", - "2001:559:8280::/48": "7016", - "2001:559:c215::/46": "7922", - "2402:3a80:1ee3::/43": "38266", - "240a:a124::/32": "142942", - "2607:f110:e810::/38": "21889", - "2a02:26f7:a7::/48": "20940", - "2a00:4980::/42": "33848", - "2a02:26f7:db0c::/48": "36183", - "2a04:4e40:b000::/48": "54113", - "2a0a:6640::/29": "42658", - "2001:559:c0ce::/48": "33287", - "2400:1701::/32": "4765", - "2407:a3c0::/32": "136742", - "2803:7820:8000::/45": "267708", - "2806:1070:402::/32": "8151", - "2a04:4e40:3810::/41": "54113", - "2800:810::/39": "27747", - "2804:55b4::/32": "267951", - "2a00:13c8:4::/32": "25291", - "2a0d:1100::/29": "200000", - "240a:a5fd::/32": "144183", - "240a:aa28::/32": "145250", - "2a02:24d0::/32": "43545", - "2a06:eac0::/29": "48854", - "2001:480:631::/35": "668", - "2001:559:445::/48": "7016", - "2001:650:cc03::/29": "28748", - "240a:ae0f::/32": "146249", - "2604:10c0:ffff::/48": "40034", - "2610:a1:2016::/48": "19905", - "2804:17b4::/32": "263166", - "2a07:1e00::/32": "197686", - "2610:190:df00::/40": "62", - "2a00:dd8:2::/32": "31012", - "2a02:26f0:301::/37": "20940", - "2a0e:97c5:41c::/46": "20473", - "2001:b400:d408::/45": "17421", - "2a06:941::/48": "202958", - "2a0b:b9c0::/32": "45040", - "2408:8256:327d::/46": "17623", - "2409:8002:2900::/31": "9808", - "240a:a95e::/32": "145048", - "2806:10b8::/32": "8151", - "2a02:26f7:ec10::/48": "36183", - "2402:a000::/32": "24211", - "240a:a734::/32": "144494", - "240a:a9fa::/32": "145204", - "2800:5f0:3001::/42": "22724", - "2a04:2f00::/29": "60256", - "2a07:22c1:c002::/48": "207649", - "2001:559:1e5::/48": "33491", - "2804:14c:7d91::/41": "28573", - "2804:5a5c:6000::/35": "268768", - "2001:559:72::/48": "7725", - "2001:44b8:30ce::/48": "7545", - "2405:fd80:f0::/38": "135391", - "240a:a24c::/32": "143238", - "2a02:c6c1:2::/48": "58061", - "2a0e:97c5:614::/46": "20473", - "2001:67c:828::/48": "210833", - "240a:a2bf::/32": "143353", - "2803:f00::/47": "262182", - "2804:65ec:800::/32": "269523", - "2c0f:f708::/32": "327693", - "2001:559:8733::/45": "7922", - "240a:abfd::/32": "145719", - "240e:44d:7800::/41": "140345", - "2804:454c::/32": "266917", - "2804:4870::/39": "267121", - "2a00:5641::/32": "13030", - "2a0b:f380::/48": "49544", - "2402:800:360f::/43": "7552", - "2402:800:5cc5::/43": "7552", - "2409:8087:6c60::/35": "9808", - "2606:e400::/34": "26271", - "2001:67c:140::/48": "48344", - "240a:af9d::/32": "146647", - "240e:964:9400::/39": "133776", - "2a02:f540::/30": "15692", - "2a04:2200::/31": "60955", - "2a10:a500::/32": "205920", - "2404:f4c0:f944::/48": "142551", - "2405:6e00:f850::/48": "133612", - "240a:ae2f::/32": "146281", - "240e:982:b000::/40": "58461", - "2a02:128:7::/48": "50245", - "2a10:4080::/29": "398559", - "2001:67c:20b0::/48": "49342", - "2408:80c2::/33": "4837", - "2804:25c4::/32": "264301", - "2804:6a4c::/32": "270325", - "2400:8b00:b80::/42": "45727", - "2408:840d:f00::/42": "17621", - "2804:1434::/32": "262492", - "2a00:4802:3810::/37": "13124", - "2404:e4c0:5105::/48": "54201", - "2604:6980:1b0::/47": "26787", - "2a04:6400::/35": "62240", - "2001:b08:a::/48": "29147", - "2408:8459:aa50::/37": "17816", - "2804:18fc::/32": "61767", - "2407:4240::/46": "136678", - "2804:6174::/32": "269235", - "2806:230:6007::/48": "11888", - "2a07:fc0::/29": "203322", - "2a0a:3400::/29": "20473", - "2a0b:b8c0::/31": "60405", - "2a0c:88c0::/46": "202344", - "240a:af7e::/32": "146616", - "2a10:2f00:124::/48": "205635", - "2001:480:421::/48": "518", - "2400:4500::/32": "24167", - "2803:7760:400::/32": "269829", - "2803:77c0::/32": "52290", - "2001:559:5f4::/48": "7922", - "2600:3000:1512::/36": "13649", - "2a00:a900:6aff::/35": "60819", - "2a01:40e0:2::/48": "34012", - "2a0d:1dc0::/29": "197706", - "2001:67c:12f4::/48": "205969", - "2001:1a11:10::/47": "42298", - "2401:d800:a000::/35": "7552", - "240e:473:b050::/39": "4134", - "2801:1bc::/44": "27951", - "240a:ae83::/32": "146365", - "2600:1002:b130::/40": "22394", - "2603:7000::/28": "12271", - "2620:11a:a01d::/46": "43515", - "2804:14c:75a8::/46": "28573", - "2804:5300::/32": "268556", - "2409:8904:5f40::/42": "24547", - "2804:1168:2000::/32": "52904", - "2606:2800:4a5c::/46": "15133", - "2620:6:2004::/44": "395460", - "2804:2a9c::/32": "264084", - "2a01:c50e:e200::/37": "12479", - "2a04:92c1:7::/30": "62240", - "2001:559:815a::/48": "7015", - "2001:67c:98::/48": "15600", - "2600:100d:bf0e::/33": "22394", - "2605:6580::/32": "1832", - "2620:10d:2000::/41": "103", - "2801:12:e800::/48": "271885", - "2806:2f0:20c4::/43": "22884", - "2a00:e08::/32": "16175", - "2001:67c:2b58::/48": "41980", - "2405:1200::/29": "9824", - "2408:8459:6410::/42": "17623", - "240a:a56e::/32": "144040", - "2600:6c38:855::/44": "20115", - "2607:f518:2009::/46": "46887", - "2804:778::/32": "262411", - "2401:d800:d620::/41": "7552", - "240e:44d:3500::/41": "140345", - "2604:6880::/32": "7040", - "2804:30b8:caef::/43": "28154", - "2a02:2ab8:130::/38": "702", - "2a07:5940::/32": "43915", - "2001:559:45d::/48": "7725", - "2403:5200::/32": "18049", - "240a:aaa3::/32": "145373", - "2408:8456:6e00::/42": "17622", - "240e:924:4000::/36": "132153", - "2804:14d:dac2::/42": "28573", - "2a00:86c0:1063::/34": "2906", - "2a02:26f7:db::/48": "20940", - "2a0e:8f02:f010::/48": "212331", - "2a02:7aa0:1619::/48": "52173", - "2001:559:132::/48": "7922", - "2001:559:590::/48": "7016", - "2001:6a8:8a01::/35": "2611", - "2001:df3:2c80::/48": "132670", - "2605:340:cd02::/48": "396986", - "2804:5118::/32": "268430", - "2a01:5c0::/32": "42652", - "2001:4268:201::/40": "15964", - "2406:3001:23:2::/30": "4657", - "2406:e000:38a::/43": "23655", - "2804:51a4::/33": "268467", - "2400:9380:94c0::/44": "136167", - "2607:f4a8:200e::/32": "803", - "2800:160:232f::/40": "14259", - "2804:e30:5800::/37": "11338", - "2a01:4bc0:901::/32": "12422", - "240a:a923::/32": "144989", - "2600:1016:a010::/39": "6167", - "2804:82b4::/32": "272535", - "2a02:26f7:bd00::/48": "36183", - "2a07:e342::/32": "49981", - "2402:800:38e0::/44": "7552", - "2402:2000:9001::/33": "24350", - "240a:ad29::/32": "146019", - "2607:d00::/32": "14325", - "2a02:22c8::/48": "42418", - "2001:1a11:65::/44": "42298", - "2400:6280:4::/44": "132280", - "240a:a021::/32": "142683", - "2804:ea0::/33": "52968", - "2804:3f50::/32": "266652", - "2a02:26f7:cfc8::/48": "36183", - "2a02:fc00::/29": "61207", - "2401:7500:200::/40": "133296", - "2401:e300::/32": "23786", - "240e:3b7:d000::/36": "134772", - "2604:cc00:1a::/48": "53292", - "2607:f180::/34": "35908", - "2804:2478::/32": "264224", - "2401:d800:db10::/42": "7552", - "2405:9800:9801::/48": "45430", - "2406:1600:301::/32": "23871", - "2620:10a:8054::/48": "55195", - "2a05:e740:144::/46": "29108", - "2001:559:c282::/48": "33652", - "2001:df0:ee::/48": "55951", - "2404:f4c0:fc20::/48": "208753", - "240e:67e:e600::/31": "4134", - "2800:381:bbbc::/33": "10834", - "2804:2b10:9::/46": "52916", - "2a04:1120::/30": "3257", - "2001:559:279::/48": "33651", - "2605:9d80:a000::/48": "36678", - "2001:559:c1a8::/48": "33662", - "2a0f:ca00:8002::/48": "209907", - "2001:559:56a::/47": "7015", - "2403:e000::/32": "9555", - "240e:2::/31": "4134", - "2001:559:55d::/48": "7015", - "2001:579:c1c::/35": "22773", - "2400:6300::/48": "17825", - "2001:67c:2594::/48": "57496", - "240a:ac1d::/32": "145751", - "2a02:328::/29": "25279", - "2a04:8000::/29": "200000", - "2a09:580::/29": "209715", - "2804:800:ff01::/40": "16509", - "2a00:1288:efc5::/35": "10310", - "2a07:ae80::/29": "48635", - "2001:559:803e::/48": "7725", - "2403:4e00::/38": "45528", - "2001:df3:a300::/48": "137267", - "2400:9700:111::/42": "24550", - "2606:2800:4150::/48": "15133", - "2804:37f0:4900::/34": "266445", - "2a02:26f7:d349::/42": "20940", - "2001:dce:2::/48": "133745", - "2804:204:206::/44": "28186", - "2804:5af8::/32": "268810", - "2a04:4e40:7c00::/48": "54113", - "2a0e:ba40::/29": "207547", - "2401:be00:1::/45": "55641", - "2402:9900:e11::/48": "27435", - "2402:e000:1::/46": "24499", - "2402:e280:3db4::/33": "134674", - "2408:8459:3630::/44": "17623", - "240a:ad82::/32": "146108", - "2620:13d:c004::/48": "395360", - "2a0e:b107:16::/48": "208191", - "2001:1248:8901::/40": "11172", - "2402:800:f050::/42": "7552", - "2406:2000:100::/40": "10310", - "2408:805d:f9::/36": "17623", - "2804:564c::/32": "267989", - "2a01:a500:1229::/34": "42831", - "2a0b:5480::/29": "50599", - "2620:1d0:5e::/47": "397228", - "2803:2e40:10b::/32": "27796", - "2a00:4140::/32": "34766", - "2a02:26f7:e301::/46": "20940", - "2001:4408:6710::/36": "4758", - "2402:800:bb00::/42": "7552", - "240a:a286::/32": "143296", - "2600:1404:1801::/33": "20940", - "2607:4200::/32": "19214", - "2a00:dd80:3e::/47": "36236", - "2a0f:d000::/29": "35048", - "2409:8c15:2800::/40": "9808", - "240a:a655::/32": "144271", - "240a:a74a::/32": "144516", - "2804:3eec::/32": "266629", - "2a0b:33c0:117::/44": "57395", - "2a0b:7140:2::/48": "212228", - "2a10:2f01:290::/44": "212996", - "2404:c400::/37": "9328", - "2408:840c:3400::/40": "17621", - "2803:9800:b88d::/41": "11664", - "2a00:1f28::/32": "43733", - "2405:22c0::/32": "139470", - "2607:f250:d010::/48": "7046", - "2620:11c:8900::/37": "19", - "2803:b9c0:9000::/36": "265705", - "2804:3f4::/32": "262407", - "2a0b:c340::/29": "205477", - "2a0f:9280::/29": "41407", - "2001:678:f5c::/48": "57483", - "2607:f108::/38": "29838", - "2804:41c0::/32": "267454", - "2806:289::/32": "28418", - "2405:9640::/48": "136557", - "2406:840:eab0::/48": "142642", - "2a00:1908:e000::/48": "199491", - "2001:1248:8000::/43": "11172", - "2402:800:38ee::/39": "7552", - "2800:160:2031::/46": "14259", - "2804:81c::/32": "262346", - "2a02:7ae0::/32": "201659", - "2600:1406:33::/45": "20940", - "2a02:26f7:c8c5::/46": "20940", - "2a02:26f7:cec8::/47": "36183", - "2600:1001:a100::/44": "6167", - "2600:1406:44::/47": "20940", - "2600:370f:7369::/40": "32261", - "2603:b0e0:efad::/35": "11796", - "2604:5500::/42": "19165", - "2800:160:12eb::/39": "14259", - "2804:2fc4::/44": "264911", - "2c0f:ee40:3000::/36": "36666", - "2001:df0:c200::/48": "131182", - "2400:ca04:f024::/43": "23688", - "240a:a763::/32": "144541", - "2607:f690::/32": "7029", - "2800:160:1faf::/41": "14259", - "2804:30d8::/32": "264976", - "2a02:26f7:f3c4::/48": "36183", - "240e:108:8f::/48": "137687", - "2001:438:7d::/48": "14427", - "2408:8756:ce0::/39": "136958", - "2620:34:c000::/48": "32031", - "2804:14d:4ce5::/44": "28573", - "2804:2674:e::/47": "264344", - "2001:dc7:dd05::/40": "24151", - "2604:1100:d200::/39": "11911", - "2a00:edc0:1007::/48": "395403", - "2a02:f840:2::/31": "199483", - "2605:af00::/32": "21782", - "2804:c48:d001::/40": "52687", - "2406:e400::/47": "7642", - "240a:a383::/32": "143549", - "2600:3003::/29": "13649", - "2a03:8c00::/32": "39458", - "2001:678:edc::/48": "3246", - "2001:67c:2e04::/48": "21473", - "2406:2400:c0::/48": "45287", - "2620:cd:c000::/48": "32932", - "2803:b780:a::/43": "27742", - "2a01:4e8::/32": "44314", - "2a02:26f0:1::/48": "34164", - "2a0f:3440::/29": "60262", - "2403:140::/32": "134113", - "2602:fd11::/36": "40895", - "2607:f790:fff7::/44": "12129", - "2001:4888:1c::/32": "6167", - "2402:800:f320::/41": "7552", - "2001:67c:1978::/48": "24956", - "2a00:1d08::/32": "13003", - "2a04:5201:2::/48": "200740", - "2a0f:2cc0::/29": "60262", - "2001:67c:6a4::/48": "50370", - "2400:9380:9040::/47": "4809", - "2401:ff80:1989::/46": "133954", - "2406:3400::/43": "10143", - "240e:3bd:7a00::/32": "140313", - "2804:14c:b300::/40": "28573", - "2a00:5400:1235::/32": "35753", - "2401:d800:580::/42": "7552", - "2406:5d40::/47": "141009", - "2001:1248:5638::/45": "11172", - "2001:1960::/46": "5650", - "2401:d800:640::/42": "7552", - "2804:9d4:5104::/47": "262996", - "2404:4a00:6000::/64": "55423", - "2605:4c40::/41": "30081", - "2001:df5:e000::/48": "132885", - "2605:2480::/32": "53454", - "2a06:4a80::/32": "57685", - "2a02:b48:8113::/38": "39572", - "2a0c:32c0::/48": "61183", - "2401:5400:2001::/44": "4434", - "2604:880:222::/43": "29802", - "2806:230:2058::/48": "265594", - "2001:559:3ca::/48": "33657", - "2001:559:84d3::/48": "7016", - "2001:678:7d4::/48": "13045", - "2402:e280:106::/48": "134674", - "2409:8069:2b06::/47": "9808", - "240a:a099::/32": "142803", - "2804:4140::/33": "267423", - "2c0e:7f80:202:3::/40": "36974", - "2a02:26f0:cb00::/48": "9121", - "2a02:26f7:31::/48": "20940", - "2a07:8980::/39": "198651", - "2606:8e80::/48": "394497", - "2a01:8840:c5::/48": "207266", - "2001:a98:101::/33": "8517", - "2402:a300:800b::/36": "55427", - "2804:b14::/32": "52937", - "2a02:26f7:bf48::/48": "36183", - "2a04:5e80::/29": "60243", - "240a:acef::/32": "145961", - "2600:1413:8000::/48": "24319", - "2620:11b:4000::/48": "19210", - "2a00:ac20::/32": "199581", - "2400:cb00:a8f0::/47": "13335", - "2620:56:a000::/48": "46924", - "2a02:26f0:c200::/48": "34164", - "240a:a6f0::/32": "144426", - "2600:1408:7001::/37": "20940", - "2804:6d9c::/32": "270544", - "2a02:26f7:c5c0::/48": "36183", - "2a02:26f7:c901::/46": "20940", - "2a03:ec00:b900::/40": "24921", - "2a0e:97c0:11de::/42": "20473", - "2001:559:c223::/48": "7922", - "2001:559:c22c::/48": "13367", - "240a:a0bc::/32": "142838", - "240e:438:9040::/38": "4134", - "2800:160:1489::/45": "14259", - "2803:5440:aca::/48": "264738", - "2001:67c:184::/48": "25111", - "2400:4b40::/32": "133425", - "2400:8e80::/32": "58451", - "2402:1c80:4000::/32": "133957", - "2405:9800:b010::/47": "133481", - "2804:404c:67::/35": "265950", - "2a02:67e0::/34": "203148", - "2403:1480:9000::/36": "49544", - "2804:7914::/32": "271283", - "2a06:e881:480f::/48": "134666", - "2a10:cb40::/31": "198328", - "2001:c20:48a0::/48": "9255", - "2409:8020:10a1::/43": "56046", - "240a:a0a9::/32": "142819", - "2607:2f00::/43": "12025", - "2a07:1780::/29": "57696", - "2001:559:80a0::/48": "7016", - "2803:9200::/32": "16592", - "2803:d1a0::/32": "267700", - "2a04:2b40::/29": "56515", - "2c0f:ee78:8006::/33": "61317", - "2001:df5:fa80::/47": "141564", - "2001:16a2:4000::/44": "39386", - "2804:117c::/32": "53061", - "2001:559:c1d0::/48": "33287", - "2001:df5:a300::/48": "137925", - "240a:aa6b::/32": "145317", - "240e:97c:1000::/34": "4134", - "2600:1400:e::/43": "20940", - "2605:2800:c300::/48": "11481", - "2404:8d00::/36": "10089", - "2a02:4d0::/32": "8816", - "2001:67c:2ed8::/48": "6766", - "2001:978:4701::/36": "174", - "2401:4900:3100::/41": "45609", - "240a:a42f::/32": "143721", - "240e:108:29::/48": "4134", - "2602:ffc8:6::/39": "20278", - "2804:6d40::/32": "270520", - "2001:200:e000::/39": "7660", - "2404:95c0::/32": "62900", - "2604:4f00::/36": "47002", - "2607:4480:1::/46": "40470", - "2001:4478:1313::/40": "4802", - "2401:9100::/32": "45918", - "2408:8459:c610::/42": "17623", - "2600:1006:f050::/39": "22394", - "2600:1801:7::/43": "16552", - "2801:80:1ca0::/48": "266212", - "2a06:ba00::/48": "34775", - "2409:8944::/28": "24445", - "2620:100:5000::/45": "19557", - "2800:484:5100::/36": "10620", - "2803:6340::/32": "28007", - "2a03:1e84:abf::/48": "1136", - "2a04:4e40:f200::/48": "54113", - "2001:67c:404::/48": "13008", - "2001:67c:1880::/48": "49949", - "2409:805c:4100::/36": "9808", - "2600:370f:7320::/41": "32261", - "2606:bc00::/33": "19419", - "2607:a800:305::/48": "15695", - "2a0a:c9c0::/32": "205818", - "2a01:9f40::/29": "199101", - "2a02:26f7:b7c1::/46": "20940", - "2001:579:cf08::/35": "22773", - "2401:7500:fffa::/45": "133296", - "2405:4cc1::/36": "55891", - "240a:afa6::/32": "146656", - "2600:140b:e::/43": "20940", - "2804:dcc::/32": "28638", - "2a02:26f7:e510::/48": "36183", - "2001:4498::/32": "24218", - "2402:800:5a9b::/42": "7552", - "2604:880:39f::/42": "29802", - "2001:579:e1a4::/43": "22773", - "2001:67c:748::/48": "202188", - "240a:ad69::/32": "146083", - "2a05:fdc0::/35": "42313", - "2a0f:6940::/32": "207881", - "2406:2000:a8::/48": "18293", - "2600:1001:d060::/40": "22394", - "2a02:26f0:4001::/38": "20940", - "2404:ca00::/32": "24295", - "2405:1c0:6553::/42": "55303", - "2405:1c0:6853::/42": "55303", - "240a:ade0::/32": "146202", - "2604:1300::/34": "3833", - "2606:1400::/32": "10732", - "2804:4db0::/34": "268213", - "2001:559:c257::/48": "33662", - "240a:af38::/32": "146546", - "2600:1401:6001::/48": "20940", - "2604:8b80::/48": "55106", - "2804:5130:4000::/32": "268436", - "2a04:5340:2::/48": "201492", - "2a07:1b40::/31": "48804", - "2001:559:c2cb::/48": "33657", - "2402:800:52e0::/44": "7552", - "2a0a:e5c1:500::/38": "207996", - "2a0e:1c40:1::/48": "208635", - "240a:a5a2::/32": "144092", - "2804:486c::/32": "267120", - "2804:5268:200::/32": "268516", - "2a04:2f81:4::/47": "16509", - "2a07:23c0:8::/47": "13213", - "2001:503:f189::/48": "7342", - "2001:1b60::/44": "31103", - "2405:1e40:2::/32": "58475", - "2406:da16::/36": "16509", - "2408:8956:d640::/40": "17622", - "2001:559:834f::/48": "33659", - "2a05:d050:40a0::/44": "16509", - "2a0a:ec02:401::/48": "42692", - "2a02:ac80:71::/40": "25145", - "2001:1440:204::/32": "8469", - "2001:4968::/32": "30513", - "2405:c9c0:5::/42": "138823", - "2409:8051:2100::/37": "9808", - "2607:8b00:1::/48": "31463", - "2803:7200:7::/34": "27696", - "2a00:fb00::/29": "24951", - "2a07:b8c3:5::/32": "14043", - "2a0b:33c0:50::/47": "57395", - "2001:559:87d6::/48": "33652", - "240a:a12e::/32": "142952", - "240a:afe2::/32": "146716", - "2a05:9400::/29": "204957", - "2404:ccc0::/32": "139021", - "2600:1014:d170::/34": "22394", - "2a01:8b40:2000::/32": "203165", - "2a0a:af00::/29": "206955", - "2c0f:f7b0::/32": "327819", - "2a09:bac0:128::/48": "13335", - "2408:8956:b100::/40": "17816", - "2600:1419:1::/45": "20940", - "2603:90bb::/32": "11426", - "2604:c800:ffff::/48": "6939", - "2800:160:182a::/45": "14259", - "2804:5dcc::/32": "268993", - "2a02:26f7:fc04::/48": "36183", - "2a05:7f00:188::/47": "1921", - "2001:df7:5600::/48": "18087", - "2405:dc00:fe::/47": "4804", - "240a:ace8::/32": "145954", - "2606:a380::/32": "13746", - "2620:0:2280::/48": "26827", - "2620:111:e008::/45": "27367", - "2804:14d:ba57::/40": "28573", - "2001:559:c124::/48": "7016", - "2600:141b:3000::/48": "35994", - "2604:f980:5100::/40": "19957", - "2806:230:300f::/48": "11888", - "2405:7740::/32": "23827", - "2600:6c4e::/32": "20115", - "2a00:e6a0:4::/32": "12303", - "2a06:6d00::/29": "22663", - "2001:9b0::/29": "8473", - "2409:8004:900::/35": "24547", - "2600:1009:9110::/36": "22394", - "2001:1248:5a2d::/46": "11172", - "2604:2e80:c04::/38": "30036", - "2a00:1678:da7a::/48": "49453", - "2a03:2887:ff43::/45": "63293", - "2a04:1b00:c::/47": "61005", - "2001:7f0:3004::/33": "13237", - "2407:1580:1100::/38": "33438", - "240a:a1e4::/32": "143134", - "2a02:340::/32": "48918", - "2a05:7640:20d0::/44": "174", - "2001:559:803a::/48": "33491", - "240a:a6fe::/32": "144440", - "240e:6:d810::/31": "4134", - "2607:fc98::/32": "29854", - "2001:dc5:a::/48": "23600", - "2001:4878:8102::/48": "12222", - "2408:80f1:240::/44": "138421", - "2804:2000:1000::/34": "264459", - "2804:7a8c::/32": "271378", - "2a04:ac06::/32": "56534", - "2a02:7b07:fff::/48": "48328", - "2001:559:112::/48": "7016", - "2001:559:26c::/48": "33660", - "2001:67c:16e4::/48": "197521", - "2404:bf40:a002::/42": "139084", - "2804:854:a::/47": "61832", - "2804:1870::/32": "61932", - "2a02:26f0:a800::/48": "34164", - "2a03:4800::/39": "21286", - "2a0c:b180::/29": "16019", - "2001:df1:be00::/48": "24541", - "2804:2d4c::/32": "265272", - "2804:391c:d::/46": "262287", - "2a02:26f0:100::/45": "20940", - "240a:ae44::/32": "146302", - "240e:3b7:3e00::/33": "140308", - "2a01:6e40::/32": "21274", - "2a02:26f7:c081::/46": "20940", - "2a0f:33c0::/29": "60262", - "2001:1248:701f::/42": "11172", - "2400:1c00:f0::/44": "45143", - "2804:9c8::/32": "262992", - "2804:1754:c004::/34": "263137", - "2806:2f0:2080::/48": "17072", - "2a0d:1a45:27::/32": "57782", - "2a0e:5540::/48": "208258", - "240a:a558::/32": "144018", - "2600:140b:1000::/48": "17511", - "2a02:26f7:45::/48": "20940", - "2a0e:6540:a48::/48": "208364", - "2001:559:809e::/48": "33668", - "2001:559:84db::/48": "7922", - "2405:ec00:111::/35": "23955", - "2607:f740:e002::/44": "63911", - "2a05:3580:2300::/37": "35807", - "240e:473:3b20::/41": "140486", - "2804:188:aaab::/35": "262750", - "2408:8456:de10::/42": "134543", - "2600:380:c180::/37": "20057", - "2607:fb90:9b00::/34": "21928", - "2a01:a240::/32": "49984", - "2401:d800:2bc0::/42": "7552", - "2804:3014::/32": "264929", - "2001:550:a0a::/43": "174", - "240a:ab67::/32": "145569", - "2600:1001:f010::/40": "22394", - "2605:b100:900::/41": "577", - "2804:1db0::/32": "264386", - "2a00:e10:2c00::/32": "61157", - "2a04:cc00::/29": "30781", - "2001:559:c01f::/48": "7725", - "2605:d600::/32": "13823", - "2a02:2090:ec00::/48": "48287", - "2620:176::/32": "32577", - "2001:559:86f2::/48": "33651", - "2a01:8840:3e::/41": "12041", - "2600:380:2600::/36": "20057", - "2a01:7f0::/32": "34685", - "2a0e:97c0:130::/44": "211972", - "2400:1f00:20::/48": "45769", - "2401:7ec0::/32": "59127", - "2607:f3a0:a008::/48": "399812", - "2a00:1960::/32": "47608", - "2001:559:371::/48": "33652", - "2405:84c0:fd15::/48": "51089", - "240e:67b:8c00::/33": "4134", - "2600:380:6880::/41": "7018", - "2602:fc62:ff::/48": "399760", - "2804:40:c000::/36": "28657", - "2001:559:74e::/47": "7922", - "240a:a344::/32": "143486", - "2600:1405:3801::/33": "20940", - "2804:6e30::/32": "270581", - "2a01:b740:a0c::/46": "714", - "2a0f:7180::/29": "43995", - "2a0f:af40::/29": "207793", - "2804:2fbc::/32": "264909", - "2001:df5:4480::/48": "133296", - "2401:d800:f450::/40": "7552", - "2600:1012:b090::/41": "22394", - "2607:f6f0:1002::/40": "12085", - "2620:12a:8000::/44": "54113", - "2a00:cb8:31::/48": "15695", - "2600:8807:aaf4::/39": "22773", - "2a0b:2040::/29": "559", - "2a0f:ad00::/31": "208202", - "2600:6c7f:f000::/48": "20115", - "2a02:26f7:ce05::/46": "20940", - "2a0c:ed40::/29": "3214", - "2403:eb00::/32": "132267", - "2607:fb58::/47": "36086", - "2620:74:57::/42": "7342", - "2406:c500:ffcd::/48": "7545", - "2600:1fa0:1040::/44": "16509", - "2a00:8420::/32": "9304", - "2a0f:f100::/29": "60776", - "2001:df4:3900::/48": "134249", - "2605:96c0::/32": "396841", - "2804:78b8::/32": "271261", - "2001:a10::/39": "8308", - "240a:acde::/32": "145944", - "2604:a180:c000::/34": "11139", - "2804:145c:cd10::/38": "263327", - "2804:5bb8::/40": "268865", - "2a06:e881:2000::/44": "206313", - "2a07:dc40::/32": "34629", - "2001:678:cec::/48": "60557", - "2001:df3:a280::/48": "16509", - "2401:4900:44c0::/42": "45609", - "2605:1980:2::/39": "13951", - "2a09:c500::/29": "209842", - "2403:1940::/47": "137935", - "2804:3e90::/32": "266606", - "2a02:b08::/29": "25486", - "2001:df3:3800::/48": "133345", - "2a01:580::/31": "9136", - "2a02:ff0:33f1::/44": "12735", - "2001:559:7c1::/48": "7016", - "2001:44b8:18::/47": "7545", - "240e:44d:600::/41": "140345", - "2605:c780::/32": "30674", - "2a02:2e02:8710::/36": "12479", - "2a0e:fd45:bee::/48": "139921", - "2409:8335::/21": "9808", - "2604:d600:111e::/42": "32098", - "2606:9100:4000::/35": "1421", - "2607:f5c0:8061::/33": "10326", - "2001:678:4c::/48": "42", - "2001:67c:2b6c::/48": "3301", - "240a:400b::/33": "58834", - "240e:e0::/31": "4812", - "2001:67c:2ae0::/48": "3292", - "2407:d6c0:1::/46": "136785", - "240e:44d:6780::/41": "4134", - "2602:ffa6:500::/40": "62731", - "2a0c:8d80::/29": "212991", - "2a0e:aa40::/46": "208408", - "2001:df4:4480::/48": "140918", - "2406:3c00::/32": "9650", - "240a:ac2c::/32": "145766", - "2600:6c38:114::/44": "20115", - "2804:4c14:9a01::/39": "267348", - "2c0f:ffd0::/32": "36968", - "2001:ee0:b100::/33": "45899", - "2604:8380:2400::/36": "29802", - "2620:103:e0c9::/48": "13893", - "2800:160:204e::/42": "14259", - "2800:bf0:1cd::/38": "27947", - "2804:14c:f42e::/43": "28573", - "2001:1a11:d8::/46": "42298", - "2600:1417:13::/45": "20940", - "2804:2a80:22::/32": "53094", - "2001:550:c00:105::/45": "174", - "2408:84f3:3410::/44": "17623", - "240a:a2e4::/32": "143390", - "240e:45:8000::/28": "4134", - "2a09:6300::/32": "29551", - "2001:fe8:4100::/47": "24435", - "2a03:d400:124::/32": "198913", - "2a03:da40::/31": "58222", - "2001:67c:1f4::/48": "39500", - "240a:a085::/32": "142783", - "2600:6000:fd84::/43": "12271", - "2604:a00:13::/45": "19318", - "2600:6c38:e2a::/43": "20115", - "2804:78cc::/32": "271266", - "2a06:e80:1000::/36": "200699", - "2a00:16c8:10d::/32": "50173", - "2001:559:c391::/48": "21508", - "240e:44d:6080::/41": "4134", - "240e:982:8100::/40": "133775", - "2602:fe6d::/36": "64249", - "2803:b2c0:2201::/48": "264851", - "2804:2a40::/32": "264067", - "2804:6d2c::/32": "270517", - "2a01:7f60:30::/32": "9115", - "2a0e:6d80::/29": "47489", - "2402:800:34d3::/44": "7552", - "240a:a007::/32": "142657", - "2801:80:2400::/48": "268302", - "2a06:40c0::/29": "201933", - "2001:67c:1560::/46": "41231", - "2402:800:9cc5::/43": "7552", - "2804:3ae0::/32": "266115", - "2a04:4e40:4610::/44": "54113", - "2401:3480::/36": "23724", - "2602:fef4::/48": "54721", - "2804:2438::/35": "264209", - "2804:5cbc:fa00::/42": "52795", - "2a01:c50e:bf00::/33": "12479", - "2402:1400::/32": "9993", - "2409:815d::/22": "9808", - "2620:0:871::/45": "715", - "2804:1388::/30": "53037", - "2a03:2fc0::/32": "61394", - "2801:80:ea0::/48": "264095", - "2605:dd40:8208::/48": "398549", - "2804:52f4:a70::/40": "268552", - "2a05:d050:10c0::/44": "16509", - "2a0d:3080::/29": "205068", - "2001:678:270::/48": "206128", - "240e:6b8:2000::/35": "4134", - "2a0a:56c4:8101::/48": "42649", - "2403:6ec0::/32": "131247", - "240e:6bd::/36": "140317", - "2604:a00:2::/43": "19318", - "2806:283::/35": "265515", - "2a02:9a8::/32": "6734", - "2a05:f700::/46": "50457", - "2602:806:b000::/40": "63279", - "2a0c:5600::/29": "208106", - "2001:67c:2270::/48": "196674", - "240a:a6c8::/32": "144386", - "240e:94a::/29": "4134", - "2804:680:1000::/32": "262589", - "2804:222c::/38": "264596", - "2a01:c50f:ad80::/38": "12479", - "2806:230:601e::/48": "265594", - "2001:67c:600::/48": "20491", - "2400:b200::/33": "37963", - "2400:e500:3b::/32": "38742", - "2604:6600:ea00::/35": "40676", - "2804:4c0:fc02::/38": "3549", - "2804:d70::/40": "52626", - "2804:4418::/34": "267602", - "2a0e:b107:570::/44": "207315", - "2408:8756:4d00::/32": "17816", - "2804:7404::/32": "270953", - "2a10:1900::/29": "208669", - "2404:2ac0::/32": "139699", - "240a:aad6::/32": "145424", - "2804:27ac::/32": "52833", - "2a01:238:500::/29": "6724", - "2a0a:d040::/29": "59682", - "240a:a5ac::/32": "144102", - "240a:ae32::/32": "146284", - "240e:438:3a20::/43": "140647", - "240e:473:4320::/41": "140486", - "2804:3b0:8309::/45": "53062", - "2804:4ec:2::/35": "28668", - "2a03:71c0::/32": "29208", - "2404:f801:8021::/44": "3598", - "2804:f8c:3000::/33": "263591", - "2a04:f340::/29": "8758", - "2001:559:c074::/44": "7922", - "2409:8915:7a00::/39": "56044", - "2a02:26f0:8401::/39": "20940", - "2a02:8040::/32": "25490", - "2001:678:de8::/48": "212834", - "2400:da00:401::/45": "38365", - "2800:160:1894::/44": "14259", - "2001:559:4d8::/48": "33655", - "2001:559:c038::/47": "7922", - "2402:e380:308::/48": "137256", - "2804:47d8::/32": "267080", - "2a02:26f0:80::/48": "43639", - "2a02:26f7:f5cc::/48": "36183", - "2001:ee0:c440::/39": "45899", - "2600:141c:1801::/34": "20940", - "2800:cd0::/32": "6568", - "2001:559:55c::/48": "20214", - "2a02:d0::/32": "44096", - "2a04:4e40:c00::/47": "54113", - "2a06:82c4::/48": "39602", - "2c0f:fe08:105::/41": "36914", - "2001:559:585::/46": "7922", - "240e:108:11a3::/44": "4134", - "2001:559:284::/48": "33657", - "2a02:2e02:8a10::/42": "12479", - "2a0c:da81::/30": "208861", - "2001:67c:22b8::/48": "49770", - "2400:cb00:360::/48": "13335", - "2602:fc41::/40": "20278", - "2607:2e00::/32": "19229", - "2804:204:301::/46": "28186", - "2a02:26f7:e645::/46": "20940", - "2001:559:85b2::/48": "33659", - "2804:2e74:8::/32": "265347", - "2a02:cb43:4000::/45": "20546", - "2001:df4:9480::/48": "140748", - "2402:800:55ee::/38": "7552", - "240a:ab85::/32": "145599", - "240a:ac9b::/32": "145877", - "2607:b400:a02::/48": "1312", - "2801:1ec::/42": "19429", - "2804:14d:c683::/41": "28573", - "2a03:af80::/29": "16342", - "2a04:4e40:9a00::/48": "54113", - "2a06:3084::/30": "57075", - "2a0c:f540::/29": "39238", - "2409:8b02::/32": "38019", - "2001:559:8319::/48": "33652", - "2402:4000:b1d0::/38": "18001", - "2404:bf40:c300::/48": "7545", - "2607:fcd0:fa80:6800::/53": "8100", - "2400:3e80::/32": "2514", - "240a:a874::/32": "144814", - "2605:2280::/32": "62886", - "2804:1614:3000::/32": "263266", - "2a02:26f7:c788::/48": "36183", - "2a01:4a0:f::/43": "201011", - "2001:438:6e::/47": "397942", - "2402:800:9ed3::/44": "7552", - "2402:ef03:2001::/40": "7633", - "240a:a852::/32": "144780", - "2600:6c33:719::/32": "20115", - "2803:f860::/32": "262186", - "2804:14c:3d83::/45": "28573", - "2a02:26f0:aa01::/39": "20940", - "2a0e:6540:a0::/48": "208364", - "2001:1248:8200::/39": "11172", - "2001:4878:a215::/46": "12222", - "2620:0:b80::/48": "701", - "2a02:2f00::/28": "8708", - "2001:559:81b8::/48": "33287", - "2605:5c0:c144::/48": "28885", - "2800:490:4900::/37": "27951", - "2001:1248:965a::/42": "11172", - "2001:1250:a000::/44": "22894", - "240e:473:8c00::/41": "140485", - "2a0b:f940::/35": "205373", - "2001:4998:f00f::/36": "10310", - "2407:5280:208::/39": "133557", - "240e:3b4::/35": "134773", - "2a00:4180:1000::/36": "56665", - "2404:bb41::/32": "139240", - "2604:980:7000::/46": "21859", - "2607:8200:e000::/36": "6295", - "2a0d:b201:3060::/43": "206026", - "2404:b5c0::/32": "134911", - "2408:8956:dd00::/40": "17816", - "2804:6de8::/32": "270563", - "2a00:1d58:8003::/43": "47524", - "2a00:fc00:e012::/35": "3255", - "2001:559:209::/48": "7016", - "240e:44d:2980::/41": "4134", - "2620:c0:c000::/44": "393501", - "2a0b:f4c0:1b4::/48": "205100", - "2001:559:452::/47": "33659", - "2604:8540:fc02::/47": "33353", - "2a00:85a0::/32": "12703", - "2a07:79c0::/29": "44920", - "240e:5a:46c0::/39": "140299", - "240e:473:2a00::/41": "140485", - "2600:6c38:e6::/44": "20115", - "2610:1c0:8::/31": "11403", - "2a02:5080::/39": "51825", - "2a06:1600:1::/48": "202927", - "2406:8dc0:2500::/40": "51044", - "2408:820c:9040::/36": "17621", - "2804:4424::/32": "267605", - "2a0c:b641:7f::/48": "210956", - "2a02:26f7:b90d::/42": "20940", - "2001:559:40b::/43": "33659", - "2402:9d80:100::/47": "131429", - "2404:4e00:2000::/48": "32787", - "2407:3e00:e000::/48": "24075", - "240a:aa9b::/32": "145365", - "2804:424c:100::/32": "271340", - "2a02:9b0::/44": "35819", - "2600:1013:f010::/36": "6167", - "2a05:2a44:601::/46": "201411", - "2a05:e100::/48": "6830", - "2408:8456:7e00::/42": "17622", - "2606:5000:1c00::/34": "209", - "2607:3380::/40": "395152", - "2804:1c04:fe00::/39": "61633", - "2804:5ba4::/32": "268860", - "2a07:8d80::/29": "61110", - "2001:550:501::/48": "14877", - "2a01:5a8:8::/48": "211526", - "2a0b:f4c2::/48": "208294", - "2602:ff1c:1::/48": "36351", - "2a0f:5701:350a::/43": "206499", - "2602:fd50:1::/48": "207609", - "2803:5e00:120::/32": "267765", - "2c0f:f498::/32": "37575", - "2401:4900:5810::/45": "45609", - "240a:adff::/32": "146233", - "2a02:26f7:bb09::/42": "20940", - "2001:978:3c0c::/33": "174", - "2001:4dc8:f00:1::96:a/32": "16316", - "2605:e340::/40": "8036", - "2a0e:1d80:8::/48": "396073", - "2a0e:46c3:800::/40": "213392", - "2a0e:97c0:180::/44": "200303", - "2001:67c:2704::/48": "47914", - "2620:149:1030::/41": "714", - "2804:4e8c::/32": "268268", - "2a02:26f7:c885::/46": "20940", - "2001:16d8:65::/36": "16150", - "2400:4fc0:10::/48": "134146", - "2408:8456:e010::/42": "134543", - "2605:91c0::/32": "397723", - "2a00:ccc1:100::/40": "44486", - "2600:40f0:f::/40": "701", - "2604:b180:170::/44": "36339", - "2620:12f:c004::/48": "21581", - "2a0c:5bc0::/29": "786", - "2a0f:7d07:fc16::/38": "60781", - "2a02:26f7:e48c::/48": "36183", - "2a0b:20c0::/39": "205766", - "2a0e:8f02:2142::/45": "211414", - "2401:8a40:44::/46": "45326", - "240a:aca3::/32": "145885", - "2602:fd4e::/36": "13465", - "2605:2800:8301::/33": "6922", - "2801:80:f80::/44": "264261", - "2a00:6c80::/32": "44974", - "2a02:df80::/29": "31655", - "2001:559:1ad::/48": "7725", - "2001:559:511::/48": "7016", - "240e:41:c000::/37": "17799", - "240e:84::/30": "4134", - "2a00:d220::/32": "206894", - "2a0f:9400:8023::/48": "213092", - "2a02:26f7:bcc4::/48": "36183", - "2400:6280:16::/47": "132280", - "240a:a901::/32": "144955", - "240e:62:d000::/36": "140308", - "2600:6c34:18a::/48": "33588", - "2605:eac0::/32": "398698", - "2800:160:19eb::/43": "14259", - "2a02:b48:8010::/39": "39572", - "2a03:8840::/32": "8838", - "2a0d:e580::/29": "31531", - "2001:ee0:d440::/39": "45899", - "2401:ff80:1507::/44": "133954", - "2409:8b10::/30": "9808", - "240e:90d:d800::/34": "4134", - "2403:8940:200::/48": "135817", - "240a:ab5b::/32": "145557", - "2a02:26f7:b9c8::/48": "36183", - "2a03:3800::/32": "31229", - "2001:67c:67c::/48": "15404", - "2406:f3c0::/48": "135905", - "2804:53e8::/32": "268615", - "2408:8459:5040::/40": "17623", - "2806:2f0:10a1::/41": "17072", - "2a03:1ac0:5f4f::/48": "42682", - "2a03:30c0::/32": "61408", - "2a0c:b641:680::/44": "207466", - "2803:d100:e770::/44": "52362", - "2001:559:4b2::/48": "33651", - "2001:559:c3ee::/48": "33287", - "2403:8940:401::/40": "135817", - "2600:1415:9001::/34": "20940", - "2605:5c0:c105::/44": "28885", - "2606:c40::/32": "32913", - "2803:5ce0:800::/39": "54235", - "2a02:26f7:f140::/48": "36183", - "2409:8754::/28": "56040", - "2607:f740:50::/47": "36236", - "2604:dc00::/35": "19752", - "2620:171:8::/48": "42", - "2a00:1428::/29": "41228", - "2a02:26f7:e2::/48": "36183", - "2a02:26f7:56::/48": "36183", - "240a:a8cd::/32": "144903", - "240e:473:6120::/41": "140486", - "2a02:26f0:504::/38": "20940", - "2001:503:c27::/48": "26415", - "2001:4830:3101::/40": "22147", - "2002::/16": "6939", - "240e:4c:7000::/37": "136197", - "240e:108:11d6::/48": "134756", - "2a06:5d00::/29": "47372", - "2a10:2ec7:5000::/36": "208861", - "2400:5200:1800::/40": "55410", - "2607:f740:e00d::/46": "63911", - "2600:1013:b030::/40": "6167", - "2804:4f2c::/33": "268309", - "2a02:26f7:c001::/46": "20940", - "2001:fd8:68::/40": "4775", - "2408:8956:ac00::/40": "17622", - "2a03:1e82:90ff::/48": "2856", - "2a07:f380::/29": "198800", - "2a10:2f00:15c::/48": "212292", - "2001:559:2f1::/48": "33659", - "2001:559:8561::/48": "7015", - "2001:67c:248::/48": "39912", - "2804:269c:fe12::/47": "47065", - "2a0b:7ec0::/32": "206728", - "2a0d:c900::/29": "31543", - "2001:678:dcc::/48": "49271", - "2402:800:56e0::/44": "7552", - "2803:2ee0::/32": "269983", - "2600:806:300::/48": "12234", - "2604:880:38f::/43": "29802", - "2620:a7:4000::/48": "19473", - "2a02:26f7:c644::/47": "36183", - "2a07:b180::/29": "50963", - "2a0d:8540::/29": "49558", - "2001:1810:3000::/33": "30447", - "2400:480:9::/48": "4766", - "240e:471::/32": "140486", - "2604:9e02::/32": "53365", - "2804:3df8:6001::/46": "266566", - "2804:53f0:f000::/36": "268617", - "2a03:8d20:8000::/48": "200849", - "2001:559:811b::/45": "7922", - "2404:f780:8::/48": "136557", - "2a02:26f7:f6c5::/46": "20940", - "2a04:4e40:6630::/41": "54113", - "2a0c:b642:300::/42": "206499", - "2001:559:819a::/48": "33489", - "2803:9840::/32": "263765", - "240d:c010:56::/48": "139341", - "2804:6e64::/32": "270594", - "2a06:f787:1::/48": "6905", - "2001:678:958::/48": "197069", - "2001:67c:14c::/48": "33988", - "240e:fd:f000::/37": "140314", - "2804:2ccc::/35": "265244", - "2a02:26f7:d704::/48": "36183", - "2a04:2e07::/32": "60751", - "2a0f:3140::/29": "60262", - "2001:67c:2018::/48": "204296", - "2402:c00::/32": "9268", - "240e:473:3850::/39": "4134", - "2600:1488:6481::/32": "20940", - "2804:179c:3091::/32": "263159", - "2a0c:9a40:8084::/48": "13830", - "2403:31c0::/32": "137376", - "2404:bf40:c200::/48": "7545", - "2602:806:a002::/45": "398565", - "2804:4b4::/32": "262460", - "2a0c:6400::/32": "207045", - "2a0c:c9c0::/30": "202414", - "2001:550:1:b::/61": "174", - "2001:559:50a::/48": "33287", - "2803:b9e0::/32": "270024", - "2806:1090::/32": "8151", - "2a03:11a0:1::/48": "201684", - "2001:559:43c::/48": "7015", - "2404:2c00::/32": "45170", - "240e:16::/32": "4134", - "2001:559:c374::/48": "7922", - "2001:44b8:30d7::/48": "4739", - "2600:141b:3800::/48": "35994", - "2605:e000:40b::/48": "10838", - "2804:4104::/32": "265998", - "2804:4318::/32": "267548", - "2001:559:1b6::/48": "33287", - "2001:559:c199::/48": "7015", - "2001:678:4bc::/48": "42214", - "240e:6b8:4000::/41": "140313", - "2804:a24::/32": "263025", - "2804:2bbc::/33": "265172", - "2620:107:9031::/48": "22787", - "2804:5624::/32": "267979", - "2a06:cc0::/29": "30929", - "2804:334:401::/32": "53242", - "2804:760::/35": "262638", - "2804:782c::/32": "271225", - "2a09:80::/31": "59615", - "2a0e:1c80:1::/48": "42675", - "2404:2280:106::/47": "24429", - "2408:8456:9e40::/34": "17816", - "240a:a58d::/32": "144071", - "240a:a7db::/32": "144661", - "2600:140f:a01::/39": "20940", - "2804:806c::/32": "271749", - "2a0a:b6c0::/32": "57728", - "2a0f:d600:154::/32": "208236", - "2001:559:448::/48": "7725", - "2401:d800:9aa0::/41": "7552", - "2605:a000:c0f::/35": "10796", - "2800:300:6240::/37": "27651", - "2804:11b0::/47": "263432", - "240a:a332::/32": "143468", - "2800:240::/32": "12956", - "2a02:e981:27::/43": "19551", - "2401:df80::/32": "133652", - "2406:840:f380::/44": "133555", - "2404:bf40:e003::/45": "7545", - "2801:17:d000::/48": "265696", - "2804:5484::/32": "268655", - "2a01:8840:d5::/48": "207266", - "2a02:16c0::/29": "56402", - "2c0f:f4a8::/34": "37254", - "2a02:878:1::/46": "42632", - "2001:559:c278::/48": "7015", - "2001:fd8:268::/40": "4775", - "2402:800:929b::/42": "7552", - "2402:800:9401::/44": "7552", - "2600:5c01:2d39::/48": "20115", - "2804:3cb0::/32": "266229", - "2804:69a8::/32": "270283", - "240e:3b2:2200::/37": "136198", - "2804:6cd8::/38": "270496", - "2001:559:83ca::/48": "33659", - "2001:1318::/35": "3597", - "2606:6680:1001::/48": "40676", - "2a01:4f40::/32": "29222", - "2a01:c50f:c40::/35": "12479", - "2001:678:18::/48": "42385", - "2402:8400::/45": "17820", - "2603:b0ae::/32": "53849", - "2a00:13c0::/38": "29076", - "2a00:8b40::/29": "60426", - "240e:965:cc00::/34": "4134", - "2001:c20:4874::/47": "9255", - "2001:4210:9816::/33": "25818", - "240a:a216::/32": "143184", - "240e:5a:4000::/40": "140290", - "2620:cb::/48": "3549", - "2a00:d88::/32": "15498", - "2a00:4bc0:2118::/32": "31004", - "2001:df4:f780::/48": "139648", - "2400:cb00:aae0::/47": "13335", - "240a:a09a::/32": "142804", - "2804:30f8:809::/46": "264984", - "2a10:1800:1::/46": "207463", - "2001:df6:2400::/48": "38880", - "2001:4de0:2001::/48": "26769", - "2606:3380::/48": "53334", - "2804:7adc:8000::/33": "262674", - "2a02:26f7:f6f0::/48": "36183", - "2001:559:390::/48": "7922", - "2001:559:81e9::/48": "7016", - "2001:16d8:b00c::/36": "16150", - "2404:7180:aa00::/48": "23848", - "2409:8061:3900::/30": "9808", - "2a0c:3140:ffff::/48": "48989", - "2a0e:fd45:40fe::/48": "13830", - "2001:67c:104c::/48": "59524", - "2620:17a:a::/48": "29705", - "2806:2f0:32e1::/39": "17072", - "2a01:358:5811::/37": "9121", - "2001:978:7b01:2::/32": "174", - "2401:ff80:1a89::/45": "133954", - "2409:8751:100::/38": "56047", - "2804:78ec::/32": "271274", - "2a0e:bc40::/29": "204860", - "2001:67c:1ba0::/48": "8445", - "2600:1407:4401::/38": "20940", - "2602:fed2:31::/48": "53356", - "2a02:26f0:5d::/42": "20940", - "2a02:26f7:f6f8::/48": "36183", - "2400:a040:ffff::/48": "137995", - "2a00:d1e0::/32": "12843", - "2a01:7a0::/30": "29066", - "2a02:158::/37": "44946", - "2a02:ee80:4058::/47": "21433", - "2a0f:2a00::/48": "60236", - "2a01:9700:14ac::/43": "8376", - "2404:f4c0:f980::/47": "211876", - "240a:a00b::/32": "142661", - "240a:a036::/32": "142704", - "2607:f928:6::/43": "22645", - "2801:80:39b0::/48": "270952", - "2804:3f70::/32": "265892", - "2806:230:1020::/48": "265594", - "2a02:26f7:e7c4::/48": "36183", - "2001:5e0::/43": "16713", - "2408:840c:3600::/40": "17621", - "2a06:440::/29": "57842", - "2001:b08:1a::/45": "3267", - "2405:9800:d201::/34": "45430", - "2804:2690::/32": "263838", - "2a01:b6a0::/32": "197216", - "2001:550:1208::/39": "174", - "2409:8914:3e00::/39": "56044", - "2a03:32c0:b::/32": "48503", - "2402:5cc0:1::/46": "27381", - "2404:fa00:d000::/36": "45780", - "2800:2b0::/32": "14232", - "2a00:4802:3500::/36": "13124", - "2a07:cd00::/48": "43260", - "2a0f:3784:103::/40": "213204", - "2001:418:2401:1::/64": "20940", - "2400:8380::/32": "132724", - "240a:ab2d::/32": "145511", - "240e:473:2450::/39": "4134", - "2a02:26f7:e50c::/48": "36183", - "2a04:4e40:6400::/48": "54113", - "2001:67c:26c::/48": "211731", - "2804:620::/32": "16735", - "2001:559:83cc::/48": "7016", - "2606:7e00:6::/48": "7215", - "2409:8050:2100::/37": "9808", - "2605:f440:696a::/32": "54874", - "2620:11d:9002:700::/48": "33186", - "2a03:b280::/36": "29134", - "2001:678:754::/48": "202171", - "240e:438:4440::/38": "4134", - "2001:7f8:1f::/48": "1835", - "2406:9dc0:30::/44": "213262", - "2408:8459:1b30::/41": "17622", - "2408:8956:c000::/40": "17622", - "2a02:2690::/32": "39783", - "2001:559:5e6::/48": "22909", - "2001:559:751::/46": "33659", - "2408:820c:a940::/35": "17621", - "2600:370f:3084::/43": "32261", - "2620:11b:e080::/44": "3549", - "2804:39c8::/32": "266050", - "2402:3800:dc04::/34": "7503", - "2605:68c0:1::/48": "397943", - "2620:100:4010::/48": "25923", - "2620:149:1201::/39": "714", - "2804:4f0:c000::/34": "22129", - "2a0d:540::/29": "203180", - "2804:14f8::/34": "263362", - "2a01:70:ffff::/48": "25098", - "2a02:26f7:c30d::/42": "20940", - "2a02:26f7:fa04::/48": "36183", - "2a02:7b03::/36": "48328", - "2a0c:3240::/29": "51134", - "2400:aa00::/40": "9873", - "2404:a500::/48": "45854", - "2409:804b:2909::/48": "9808", - "2803:9800:a8c7::/39": "11664", - "2a0d:2e40::/29": "208861", - "2001:fd8:b2f0::/44": "4775", - "2602:ff7c::/36": "55039", - "2606:2800:60f5::/48": "15133", - "2804:705c:8000::/33": "270722", - "2a00:eb40::/32": "28889", - "2804:2c44::/32": "265207", - "2001:559:582::/48": "33287", - "2602:feda:3c5::/48": "205947", - "2607:d500:304::/40": "13768", - "2a00:be80::/32": "15557", - "2a05:7200::/29": "44045", - "2a0d:c400::/32": "31400", - "2400:adc0:4300::/48": "9541", - "2804:1e40::/32": "264417", - "2804:4ab4::/32": "267258", - "2c0f:f000:1000::/40": "36891", - "2a0a:6340:dc01::/48": "34888", - "2001:559:82b9::/48": "33659", - "2001:67c:440::/48": "57944", - "2a02:26f0:2b01::/37": "20940", - "2a02:2e02:2370::/37": "12479", - "2a02:ee80:4023::/45": "3573", - "2a03:3d80::/32": "13113", - "2a07:b8c1:6::/43": "14043", - "2401:ea80::/32": "133930", - "2600:1402:3001::/36": "20940", - "2804:7be8:c000::/34": "271462", - "2a01:240::/32": "30781", - "2a0a:c740:2::/48": "204170", - "2a0f:5680::/47": "60906", - "2001:559:79c::/48": "7016", - "240a:aa30::/32": "145258", - "2604:ca00:224::/46": "36492", - "2804:3ea0:8100::/33": "266610", - "2a09:c0c0::/29": "209235", - "2001:559:8433::/48": "22909", - "2001:678:e98::/48": "212495", - "2606:4d80::/32": "5650", - "2800:160:14f1::/46": "14259", - "2804:6340::/32": "269349", - "2a02:26f7:f188::/48": "36183", - "2a03:4980::/32": "24904", - "2408:8459:7610::/42": "17623", - "2600:140b:1401::/38": "20940", - "2803:2600::/32": "28114", - "2a00:e520::/32": "35551", - "2a0d:3840::/48": "57629", - "2001:559:80de::/47": "7922", - "2408:8456:7e40::/39": "17816", - "2600:140e:3::/31": "20940", - "2606:f900:4407::/34": "812", - "2a02:7380::/32": "8680", - "2a0c:c00:400::/41": "208402", - "2a0e:3a87:ff00::/40": "208741", - "2001:559:269::/48": "13367", - "2001:bf0:e000::/31": "12732", - "2600:1f70:2000::/40": "8987", - "2603:9000::/28": "33363", - "2a02:22a0::/32": "28685", - "2a0a:7840::/29": "25433", - "2a01:b960:230d::/48": "208136", - "2001:388:30c5::/43": "7575", - "240a:ad4b::/32": "146053", - "2602:fed2:3e8::/48": "139693", - "2607:fbd0::/32": "19872", - "2803:2180:15::/46": "27941", - "2804:1364::/32": "263532", - "2804:53b0::/46": "268600", - "2a0b:e140::/29": "205241", - "2a0e:b105:458::/46": "20473", - "2401:4900:3a60::/40": "45609", - "2407:c280:3000::/45": "24322", - "240a:a701::/32": "144443", - "2604:d600:151f::/42": "32098", - "2804:3364::/32": "265393", - "2001:559:87e6::/48": "33491", - "2001:67c:2444::/48": "43018", - "2403:e040::/33": "138399", - "2408:8459:ac50::/38": "17816", - "2408:8956:2140::/40": "17816", - "2600:1002:b1e0::/33": "22394", - "2605:35c0::/36": "6597", - "2404:1100::/32": "134078", - "240e:85c:50::/26": "4134", - "2a02:ad80::/29": "15633", - "2a0f:8780::/29": "208108", - "240a:a0d0::/32": "142858", - "2600:140f:3601::/36": "20940", - "2a0d:3c42::/32": "25369", - "2001:468:2808::/126": "11537", - "2001:550:4701:201::/36": "174", - "2606:9a00::/32": "31845", - "2607:fc48:1000::/48": "40009", - "2a02:26f7:c100::/48": "36183", - "2620:74:81::/48": "30060", - "2a02:2290::/48": "206610", - "2001:1248:70dc::/42": "11172", - "2403:c380::/32": "59189", - "2408:8456:7240::/39": "17816", - "2607:2a00:3::/32": "29909", - "2803:6900:574::/48": "52423", - "2804:6f84::/32": "270665", - "2a01:a360::/32": "200030", - "2a0b:b82::/44": "7489", - "2406:e000:378::/47": "23655", - "2001:678:c64::/48": "207341", - "2408:8459:2640::/40": "17623", - "240a:a06e::/32": "142760", - "240a:a28e::/32": "143304", - "2600:1408:21::/46": "20940", - "2a0c:f40::/32": "41451", - "2001:1250:3000::/44": "22894", - "2801:140:bfa::/48": "262249", - "2a0e:f080:1::/48": "12363", - "2402:800:587f::/40": "7552", - "2804:178::/32": "28591", - "2804:7838::/32": "271228", - "2a0e:1c80:9::/48": "41281", - "2c0f:f7c0::/34": "30986", - "2a02:26f7:ec49::/46": "20940", - "2001:67c:2f5c::/48": "21100", - "2605:3800::/32": "21554", - "2a02:26f7:d485::/46": "20940", - "2a04:85c0::/29": "51890", - "2a0d:f00::/29": "16186", - "2a11:2780::/29": "21040", - "2001:19f0:9000::/37": "20473", - "2804:14d:a400::/40": "28573", - "2a02:4b0::/38": "43751", - "2a02:26f7:e149::/46": "20940", - "2a03:fb40::/29": "202796", - "2001:44b8:20::/46": "4739", - "2806:105e:5::/44": "8151", - "2a02:26f7:be85::/46": "20940", - "2001:df5:7180::/48": "140758", - "2a00:fa0::/32": "13237", - "2a04:4e40:ccf0::/48": "54113", - "2a0f:fe40::/48": "207642", - "2001:57a:2203::/35": "22773", - "2001:1248:59c7::/43": "11172", - "2404:3900:1::/48": "38320", - "2a03:5cc0::/32": "48685", - "2001:1c00::/23": "33915", - "2409:8907:7f20::/32": "24547", - "2804:4388::/32": "267576", - "2a02:29ea:14::/48": "49604", - "2a01:5e40::/32": "34555", - "2a0f:8445::/32": "51659", - "2001:559:8370::/48": "7922", - "2001:4458::/32": "4818", - "240e:3b8:8200::/35": "140316", - "240e:804:a0::/39": "4134", - "2806:2f0:3101::/46": "17072", - "2a05:e181::/32": "200941", - "2001:ee0:302::/45": "45899", - "2605:5300::/39": "21557", - "2620:0:250::/48": "7046", - "2620:0:1654::/48": "6984", - "2804:20f8::/35": "264524", - "2806:2f0:2463::/48": "17072", - "2a03:5a00:38::/48": "62247", - "2001:67c:5c::/48": "35627", - "2001:dda::/48": "18149", - "2408:840d:d000::/42": "17621", - "2001:550:9b00:100::/46": "174", - "2a0f:5381:1313::/42": "208135", - "2600:804:441::/31": "701", - "2605:3b80:1::/48": "9009", - "2800:c30:ae00::/33": "52361", - "2a02:17d0::/32": "12668", - "2001:4c28:4000::/36": "39832", - "2407:9440:2::/41": "141626", - "2408:8956:3b00::/40": "17816", - "2604:200:7::/43": "33132", - "2804:694:4100::/37": "262596", - "2804:1320:2000::/32": "263517", - "2a02:3b0::/32": "31736", - "2a0a:e5c0:19::/48": "207996", - "2404:f4c0:f4c0::/44": "142549", - "2400:9bc0:4::/32": "55313", - "2620:13c:8000::/44": "27360", - "2a01:280:348::/47": "3166", - "2409:8051:2::/40": "56047", - "2a07:b300::/29": "213101", - "2408:840d:c500::/42": "17621", - "2602:108:12::/48": "20115", - "2602:fe69:200::/39": "36369", - "2a04:4e40:3000::/48": "54113", - "2409:8d14:2900::/31": "56044", - "240a:17:fcc::/48": "9605", - "240a:a0a8::/32": "142818", - "2801:80:2240::/48": "267592", - "2a0e:2c47:3::/32": "50581", - "2001:559:427::/48": "33491", - "2804:e80::/33": "262676", - "2606:2500::/32": "7194", - "2a03:be00::/32": "50522", - "2001:559:c2da::/48": "33652", - "240a:a4a4::/32": "143838", - "240a:a710::/32": "144458", - "2604:f400:5::/48": "19406", - "2620:12c:9001::/46": "395359", - "2a00:b260::/32": "51417", - "2001:b20::/29": "24611", - "2400:1700:212::/40": "4628", - "240a:a766::/32": "144544", - "2600:6c38:501::/45": "20115", - "2a0d:2a00:c0::/48": "205157", - "2402:800:5b01::/44": "7552", - "240a:ab0a::/32": "145476", - "2620:1ec:912::/38": "8075", - "2804:1348::/32": "263526", - "2a06:11c0::/46": "31169", - "2001:480:34::/48": "252", - "2409:894c::/30": "9808", - "240a:acb8::/32": "145906", - "2600:1404:e800::/48": "35994", - "2001:1978:803::/48": "54002", - "2400:cb00:356::/44": "13335", - "2406:840:e666::/48": "211843", - "2804:1ed4::/32": "52775", - "2804:3bd8::/32": "266175", - "2a03:3f40:89::/48": "208685", - "2001:67c:24c::/48": "49420", - "2402:1c00:5000::/32": "23838", - "2606:e100::/32": "47100", - "2607:f138::/32": "19151", - "2620:3c:8080::/48": "54763", - "2804:56a4::/32": "28276", - "2a00:40c0::/31": "12762", - "2406:840:f200::/44": "141694", - "2602:feda:b8e::/48": "211935", - "2804:7428::/32": "270962", - "2a00:fd8::/32": "22351", - "2001:df3:800::/46": "22787", - "2401:4900:1c30::/46": "24560", - "2800:160:17fd::/36": "14259", - "2a02:2698:800::/38": "57044", - "2a02:26f7:d308::/48": "36183", - "2001:559:8262::/47": "33657", - "240e:3be:c800::/37": "4134", - "2803:cb00::/32": "26619", - "2402:5300:4510::/38": "45903", - "240a:a603::/32": "144189", - "2800:40:1f::/42": "16814", - "2804:14d:badd::/46": "28573", - "2a0e:fd45:b70::/47": "212744", - "240a:aeea::/32": "146468", - "2a09:d2c1:4::/48": "207518", - "2c0f:fe38::/47": "33771", - "2408:8956:f00::/40": "17816", - "2803:c600::/32": "27901", - "2a03:a860:61::/48": "397192", - "2a0b:b580:ffff::/31": "43304", - "2001:4090::/31": "12312", - "2406:3ac0::/40": "135391", - "2800:160:1104::/46": "14259", - "2001:67c:7e0::/48": "41399", - "2406:840:f440::/47": "137835", - "2804:55fc::/32": "267969", - "2001:fd8:b280::/42": "132199", - "240a:a8d5::/32": "144911", - "2804:584::/32": "53072", - "2a00:c280::/39": "50463", - "2001:559:776::/48": "33659", - "2401:ff80:150b::/43": "133954", - "2409:8057:306c::/48": "141425", - "2a02:26f7:d909::/42": "20940", - "2a05:1083:ff06::/48": "211876", - "2001:67c:2048::/48": "31317", - "2408:8957:f00::/40": "17816", - "2409:806c:100::/35": "9808", - "2604:2d80:e280::/36": "30036", - "2a0f:6fc4::/32": "57487", - "2408:820c:b630::/30": "17621", - "240e:44d:6500::/41": "140345", - "2620:149:46::/44": "714", - "2800:484:700::/36": "14080", - "2804:5d38::/32": "268957", - "2a01:9840::/32": "31115", - "2001:4830:3100::/48": "25623", - "240a:a294::/32": "143310", - "2a00:4802:a90::/42": "13124", - "2001:df0:8580::/48": "139197", - "2400:cb00:40::/47": "13335", - "2406:4c40::/48": "135953", - "2804:da4::/32": "27720", - "2a02:728::/32": "25542", - "2620:136:f001::/48": "11153", - "2a03:2887:ff13::/48": "35819", - "2a09:cc0::/48": "44364", - "2a03:2480:8023::/48": "200107", - "2001:559:738::/48": "33491", - "2001:67c:17f0::/48": "702", - "2401:4900:3050::/44": "45609", - "2409:8904:60b0::/38": "24547", - "2604:d600:15df::/42": "32098", - "2803:d700::/32": "61461", - "2a01:8840:b2::/45": "12041", - "2001:454f::/27": "9924", - "2400:cc00:4000::/34": "17477", - "2a00:e000::/48": "56975", - "2a0d:8340::/32": "205125", - "2600:1006:b1f0::/33": "22394", - "2804:4fe0::/32": "268355", - "2a02:26f7:f380::/48": "36183", - "2a02:6a80:530f::/32": "3245", - "2a02:c6c0::/32": "12722", - "2a0c:dc40::/29": "31370", - "2a0d:3c40:d498::/48": "49542", - "2409:8704:3100::/36": "24547", - "2804:695c::/32": "270265", - "2a0e:b103:c00::/40": "20473", - "2a02:26f0:ce01::/40": "20940", - "2c0f:f4c0:1402::/32": "37611", - "2001:579:c17d::/40": "22773", - "2620:49:2::/45": "16686", - "2620:171:59::/45": "715", - "2801:bc:2000::/32": "28601", - "2a03:c680::/29": "28919", - "2001:ee0:7b40::/37": "45899", - "2800:68:39::/48": "27947", - "2804:56f8::/33": "268035", - "2806:2f0:34a1::/46": "17072", - "2a0c:ab03::/32": "208861", - "2408:8957:8000::/40": "17622", - "240a:ae93::/32": "146381", - "240e:44d:7380::/41": "4134", - "2604:3d00:4c00::/32": "6327", - "2605:4a00:131::/44": "14361", - "2800:160:2311::/42": "14259", - "2001:559:8043::/45": "7015", - "2001:4de0:1000::/48": "33438", - "2804:6eb0::/32": "270613", - "2a0f:9400:802d::/48": "53356", - "2400:6280:11b::/48": "135381", - "2607:a500:d::/32": "12025", - "2800:3a0:192::/48": "28008", - "2a00:66c0::/32": "200460", - "2a01:1d0::/32": "50670", - "2001:13c7:6008::/48": "52324", - "2408:84f3:e000::/44": "17622", - "2804:8270::/32": "61608", - "2a06:fc40::/29": "204793", - "2402:680::/32": "24213", - "2804:7bac::/32": "271447", - "2a0e:a6c1::/30": "41047", - "240a:a567::/32": "144033", - "2001:678:480::/48": "3320", - "2a05:6200:73::/48": "201630", - "2405:6e00:2490::/41": "18291", - "2605:a404:3f::/41": "33363", - "2804:14d:5000::/40": "28573", - "2804:2474::/32": "264223", - "2804:3c48::/32": "266201", - "2605:5580::/32": "40805", - "2620:10a:4005::/46": "17394", - "2600:1404:7401::/32": "20940", - "2605:8840::/32": "397867", - "2804:33b0::/32": "52662", - "2a00:5600::/32": "31727", - "2a02:26f7:db09::/46": "20940", - "2a10:bc80::/29": "212081", - "2409:8e0c::/30": "56042", - "240e:44d:5a80::/41": "4134", - "2804:6660:d200::/39": "262815", - "2a03:66e0::/32": "200538", - "2a07:ca04::/32": "49981", - "2400:dcc0:a204::/39": "38631", - "2800:bf0:8122::/41": "27947", - "2804:14d:7e3c::/40": "28573", - "2a0b:e600::/29": "203964", - "2001:4e0:1009::/43": "2381", - "240a:a46c::/32": "143782", - "240d:c010:72::/48": "139341", - "2804:4df4::/32": "268230", - "2a02:26f7:cf01::/46": "20940", - "2a03:4b00::/32": "49888", - "2a0a:e5c0:8::/48": "207996", - "2803:7260::/43": "52238", - "2001:4408:5227::/41": "4758", - "2405:b900:40::/44": "55701", - "2408:8957:a300::/40": "17816", - "240a:a16f::/32": "143017", - "240e:44d:5f00::/41": "140345", - "240e:91e::/32": "134761", - "2605:a404:6f::/43": "33363", - "2a00:1288:efc1::/48": "14778", - "2408:8456:a010::/42": "134543", - "240e:108:27::/48": "133774", - "240e:3b6:2200::/37": "136198", - "2800:160:1f75::/44": "14259", - "2804:10a0:224::/32": "28173", - "2a00:4802:1d00::/38": "13124", - "2a04:d40::/29": "60965", - "2a02:26f0:7b01::/37": "20940", - "2001:550:8200:1::/37": "174", - "2001:559:c09b::/45": "7922", - "2001:678:17c::/48": "201163", - "2408:8456:7600::/42": "17622", - "2607:fb50:a00::/35": "46253", - "2806:2f0:3381::/42": "17072", - "2a01:71c0::/31": "198066", - "2a0b:56c0::/29": "41960", - "2001:d10:a01f::/33": "4787", - "2606:2800:4064::/48": "14153", - "2a0a:2400::/32": "206157", - "240a:afa3::/32": "146653", - "2a01:4200:255::/30": "21453", - "2406:2400:ccef::/48": "45287", - "2408:8779:c000::/45": "140707", - "2409:8924:b700::/36": "56046", - "2409:8a15:3c00::/32": "56044", - "2001:678:df4::/48": "212899", - "2406:9dc0:1013::/44": "18250", - "240a:a98f::/32": "145097", - "2600:1000:9e10::/40": "22394", - "2800:490:c000::/36": "27951", - "2a0e:fd45:2b02::/44": "211562", - "2a0f:3e00::/32": "208861", - "2408:8459:b450::/38": "17816", - "240e:679:e400::/39": "140330", - "2804:2d8::/32": "52532", - "2804:43a8::/36": "267582", - "2a0c:cac0::/29": "202373", - "2401:d800:750::/42": "7552", - "2600:6c34:24c::/48": "33588", - "2605:d100::/32": "19844", - "2800:200:e281::/43": "12252", - "2803:760:171::/35": "269816", - "2804:7994::/32": "271314", - "2a01:5042:efd::/48": "202196", - "2401:4900:46a0::/44": "45609", - "240a:ae4e::/32": "146312", - "2804:76ac::/32": "271127", - "2a04:1b00::/47": "61005", - "2a0c:ff00::/47": "204975", - "2001:1900:221e::/48": "14627", - "2408:8456:1940::/40": "17816", - "2001:559:8188::/48": "33659", - "2001:1838:9100::/34": "23352", - "2401:ff80:1013::/40": "133954", - "240a:ac40::/32": "145786", - "2a0b:cd00::/29": "206372", - "2408:8756:2d00::/35": "17816", - "240e:13:1000::/33": "4134", - "2a01:440:510::/29": "29551", - "2404:8e00::/32": "55391", - "240e:44d:6b80::/41": "4134", - "2600:1409:b801::/37": "20940", - "2001:67c:190::/48": "198568", - "2001:44b8:404f::/48": "4739", - "240a:a180::/32": "143034", - "2607:fc78::/32": "21724", - "2001:559:8000::/48": "33651", - "2001:559:8315::/48": "7015", - "2001:918:fff3::/44": "3303", - "240a:a873::/32": "144813", - "2605:dd40:8200::/48": "398549", - "2607:a800:213::/45": "15695", - "2607:f160:10::/48": "6167", - "2a02:a90::/32": "3303", - "2001:418:1c01:1::/64": "20940", - "2408:8256:2f6c::/48": "17623", - "2602:807:6004::/48": "53978", - "2620:11b:e0bd::/48": "3356", - "2620:12f:c009::/45": "395831", - "2a00:1e88:8::/48": "39229", - "2a01:1b0:c000::/44": "51923", - "2a02:26f7:3d::/48": "20940", - "2a07:6fc7::/32": "34549", - "2a0b:d00:1::/46": "206886", - "2001:559:c381::/48": "7922", - "2804:3158::/32": "265008", - "2804:7b58::/32": "4", - "2806:2f0:42c4::/42": "17072", - "2a0a:4a40:2271::/29": "206754", - "2001:559:86f8::/47": "33659", - "2402:800:370f::/43": "7552", - "2406:e001:1000::/33": "23655", - "240a:afb8::/32": "146674", - "240e:966:9400::/38": "133776", - "2600:380:f200::/36": "7018", - "2a00:dd80:41::/48": "36236", - "2402:800:538d::/43": "7552", - "2404:c6c0::/48": "135905", - "240e:473:f50::/40": "4134", - "2604:d600:1408::/39": "32098", - "2a00:88a0::/32": "25540", - "2400:cc00:3000::/36": "140637", - "2600:1409:13::/48": "35994", - "2a03:2880:f26c::/40": "32934", - "2a06:9f45:1200::/40": "211480", - "2001:678:a18::/48": "43350", - "2620:128:1008::/48": "53620", - "2a04:bc40:3dc0::/44": "44750", - "2a05:36c0:2::/48": "48809", - "2a06:4100::/32": "206376", - "2405:6480::/32": "135425", - "2408:8956:200::/40": "17622", - "2602:fff0::/36": "18889", - "2606:2e00:8004::/46": "36351", - "2804:3b8::/47": "52965", - "2a05:62c0::/29": "48360", - "2607:fb10:5022::/44": "55095", - "2804:e94:63::/43": "262468", - "2a02:6da0::/32": "47638", - "2001:559:84c8::/48": "22909", - "2401:d800:d0d0::/39": "7552", - "240e:980:2e00::/40": "4134", - "2600:4405::/30": "6130", - "2604:9b00:1800::/38": "14230", - "2a05:5a00::/29": "212613", - "2001:559:839d::/42": "33652", - "2407:57c0::/48": "140799", - "2a00:1880::/32": "15897", - "2a06:e881:140e::/47": "202540", - "2800:160:21e4::/38": "14259", - "2806:2f0:34a4::/41": "17072", - "2806:2f0:9581::/43": "17072", - "2a04:2500::/48": "60940", - "2401:de00::/32": "7497", - "2402:e280:1104::/47": "134674", - "2408:8456:e410::/42": "134543", - "240a:a30f::/32": "143433", - "2800:160:1f2a::/43": "14259", - "2800:bf0:8100::/45": "52257", - "2a0b:dbc0::/29": "207003", - "2001:559:80ae::/48": "7016", - "2001:1398:121::/48": "52304", - "240e:3bf::/35": "134773", - "2800:200:2001::/45": "12252", - "2804:14c:bbd3::/42": "28573", - "2806:2f0:9122::/41": "17072", - "240e:44d:1000::/41": "140345", - "2a06:6541:4101::/48": "8220", - "2402:4480::/38": "174", - "2405:8a00:8020::/47": "55824", - "2600:1003:b0b0::/41": "22394", - "2607:fe10:3100::/32": "11796", - "2a02:26f7:f900::/48": "36183", - "2001:4998:180::/44": "7280", - "2409:8904:4160::/38": "24547", - "2c0f:eaf8::/32": "328581", - "2401:c7c0:2::/48": "23864", - "240a:ae16::/32": "146256", - "2600:5800:1601::/48": "33363", - "2801:16:5000::/44": "266906", - "2804:7200::/32": "270826", - "2c0f:f700::/32": "327726", - "2001:559:35d::/48": "33659", - "2001:f20:4001::/48": "9875", - "2405:3740:8009::/33": "38526", - "240a:ab58::/32": "145554", - "240e:44d:2d80::/41": "4134", - "2a09:d881::/48": "209680", - "2001:4c80::/32": "2857", - "2401:d800:7310::/42": "7552", - "2408:84f3:4440::/38": "17816", - "2804:71e4::/32": "270818", - "2a04:e240::/29": "35617", - "2400:a980:1f00::/40": "133515", - "2408:8456:3c50::/38": "17816", - "2001:4998:effd::/48": "7233", - "2409:804c:31::/36": "9808", - "2a02:26f0:16::/44": "20940", - "2a0c:a9c7:225::/48": "44597", - "2401:3240:634::/48": "63490", - "2408:8459:cf50::/35": "17816", - "240a:ad3a::/32": "146036", - "2607:f858::/44": "4136", - "2a02:26f7:c400::/48": "36183", - "2001:559:82::/48": "33651", - "2001:67c:2ab4::/48": "3301", - "2001:678:180::/48": "20546", - "2403:4e00:30c::/47": "45528", - "240e:3b8:6400::/35": "140312", - "2600:1f01:4874::/47": "16509", - "2a07:9942:39d8::/47": "43350", - "2001:550:2600:200::/47": "174", - "2603:c010:a000::/36": "31898", - "2803:c240:2000::/32": "41095", - "2a02:f98::/32": "33984", - "2a0d:2144::/38": "39083", - "2407:aa80::/32": "135407", - "240e:108:1195::/48": "63838", - "2600:1006:a000::/43": "6167", - "2804:8a8::/32": "262385", - "2804:4c7c::/32": "267373", - "2404:ce80::/32": "135356", - "2620:116:8087::/48": "27281", - "2804:3868:800::/37": "266475", - "2a02:1b8::/31": "47692", - "2404:e801:2015::/44": "55430", - "240e:473:1550::/40": "4134", - "2607:fda8:8009::/48": "6128", - "2a02:648::/32": "8804", - "2a02:dcc::/30": "31621", - "2a0b:1306:3::/48": "29018", - "2001:500:2e::/47": "3557", - "2600:1400:9001::/34": "20940", - "2600:5c00:3aff::/37": "20001", - "2a02:26f7:7c::/48": "36183", - "2001:559:8544::/48": "33662", - "2001:1248:87b0::/36": "11172", - "2401:d800:b940::/42": "7552", - "2401:d800:d010::/42": "7552", - "2405:9800:c601::/42": "45430", - "2001:559:81a5::/48": "33652", - "2001:df5:3800::/48": "56285", - "2606:b400:8018::/48": "792", - "2804:6f4::/32": "262539", - "2804:4ca8::/36": "267383", - "2a02:c10::/32": "12990", - "2a0d:240::/29": "8881", - "2001:559:c315::/48": "33651", - "2001:67c:1500::/48": "3246", - "2001:c20:4886::/48": "3758", - "2803:abc0::/48": "265632", - "2804:1b94::/37": "52974", - "2a06:7fc0::/29": "203459", - "2a06:ab00::/32": "60781", - "2c0f:fdd8::/32": "37266", - "2404:98c0:40::/32": "135259", - "2620:0:b30::/48": "32982", - "2804:104c::/40": "263629", - "2a00:9320:fffd::/46": "48559", - "2a03:ae40::/34": "61233", - "2a0d:b980::/29": "56708", - "2401:d800:f140::/42": "7552", - "2620:113:8045::/40": "3680", - "2803:d100:e040::/38": "52362", - "2401:c5c0:101::/38": "55492", - "2408:8256:38a0::/39": "17816", - "2409:8052:3100::/37": "9808", - "240e:95d:3000::/26": "4134", - "2600:2005::/28": "33517", - "2602:fd93::/36": "398230", - "2606:2800:424e::/48": "14153", - "2804::/37": "2716", - "2a02:26f7:c94c::/47": "36183", - "2001:559:8217::/48": "33651", - "240a:abac::/32": "145638", - "240e:4:e000::/40": "132147", - "2604:d600:685::/44": "32098", - "2607:f330:9400::/40": "25996", - "2001:678:828::/48": "24639", - "2804:18b4::/32": "61948", - "2a05:b304::/30": "60781", - "2001:678:720::/48": "25443", - "2001:dc0:e000::/35": "4608", - "240a:a05a::/32": "142740", - "2603:c0f0:2800::/43": "6142", - "2804:fdc::/32": "263608", - "2001:559:83aa::/48": "33652", - "2001:559:84c1::/48": "33489", - "2602:fd1b::/36": "398871", - "2804:2f20::/32": "264873", - "2a0e:1e40::/29": "64484", - "2001:2060::/30": "1759", - "240a:a05c::/32": "142742", - "240e:978:8100::/31": "4134", - "2600:100d:fe00::/44": "6167", - "2a01:a840::/32": "16186", - "2600:140b:4c01::/35": "20940", - "2804:7fb8::/32": "271705", - "2405:9d80::/47": "45538", - "2409:8028:2000::/40": "56041", - "240a:a57b::/32": "144053", - "2806:345::/32": "265596", - "2a0d:d8c0::/48": "395092", - "2a0e:b107:ea2::/48": "134478", - "2001:e68:20db:10::/63": "54994", - "2604:11c0:600::/40": "395822", - "2804:51a8::/32": "268468", - "2a00:6901:c002::/47": "20926", - "2a00:74c0:103::/48": "3257", - "240a:a425::/32": "143711", - "2001:559:8130::/47": "7016", - "2a00:d101:4000::/36": "15704", - "2408:8456:c940::/40": "17816", - "240a:a910::/32": "144970", - "2405:8a00:8030::/46": "55824", - "2408:8956:c600::/40": "17622", - "2602:fd76::/36": "393986", - "2604:5500:3000::/38": "19165", - "2806:370:2210::/41": "28403", - "2001:4878:c010::/48": "12222", - "2401:d800:f590::/42": "7552", - "2a02:770::/32": "5578", - "2a02:6c20:8::/36": "207167", - "2001:559:501::/48": "7725", - "2605:3380:ff00::/46": "12025", - "2a00:d300::/32": "31742", - "2a02:26f7:d501::/46": "20940", - "2600:1010:f110::/36": "22394", - "2605:a404:7db::/42": "33363", - "2a01:c50f:e140::/37": "12479", - "2001:44b8:30c4::/48": "7545", - "2001:4950::/32": "20205", - "2804:4f90::/38": "268335", - "2a01:7d20:e00::/40": "203645", - "2001:67c:2214::/48": "3301", - "240e:979:7f00::/32": "4134", - "2a02:26f7:dc40::/48": "36183", - "2a0d:c440::/29": "39305", - "2403:e200:403::/45": "45543", - "2800:160:1053::/45": "14259", - "2804:68c::/32": "262594", - "2a02:5740:11::/48": "41564", - "2a0a:6040:ac96::/48": "211954", - "2a0e:8f02:213f::/48": "211722", - "2001:648:2010::/48": "8643", - "2a01:90:200::/40": "29668", - "2804:5dec::/32": "269001", - "2404:9ec0:6::/48": "138946", - "2409:4025:1000::/25": "55836", - "240e:44d:1180::/41": "4134", - "2600:1406:47::/48": "35994", - "2804:1d1c::/32": "53196", - "2804:2344::/32": "264152", - "2804:39f4::/32": "266061", - "2a07:7280::/29": "202591", - "2600:1014:b000::/42": "6167", - "2607:f078::/32": "18750", - "2a00:1288:88::/48": "203070", - "2a0f:9400:7381::/48": "208193", - "2001:559:c2a5::/48": "21508", - "2001:678:ca8::/48": "12897", - "2001:4b20:100:f000::/63": "65505", - "2409:8904:5370::/40": "24547", - "2605:4300:1200::/43": "22616", - "2409:8002:900::/37": "9808", - "2604:af80:900::/37": "18859", - "2804:14c:bf00::/40": "28573", - "2605:a40e:6::/44": "33363", - "2a04:2ec0::/29": "60849", - "2001:559:c360::/48": "7016", - "2409:8914:a200::/39": "56044", - "2804:4dc4::/32": "268218", - "2a02:5b20::/32": "47720", - "2c0f:f1a8::/32": "328237", - "2801:80:7b0::/48": "263613", - "2804:4e74::/32": "268262", - "2001:df0:6880::/48": "138731", - "240a:a7f1::/32": "144683", - "2600:1488:6101::/41": "20940", - "2605:34c0::/32": "397449", - "2803:2800::/33": "52368", - "2806:250:1::/45": "28509", - "2a00:93c0::/32": "198853", - "2001:559:c3af::/48": "7016", - "2600:1406:9c01::/34": "20940", - "2804:14c:de93::/41": "28573", - "2804:49c0::/32": "267201", - "2a02:2ad0::/39": "702", - "2001:559:82e6::/48": "33662", - "2404:e200:5::/46": "18353", - "2409:8a3c:1400::/33": "24444", - "2001:1a38::/32": "34081", - "2607:f8f8:1f10::/32": "23033", - "2804:14d:5c00::/42": "28573", - "2806:2f0:7301::/42": "17072", - "2a03:5342::/44": "8983", - "2408:8957:b200::/40": "17622", - "2600:1418:4001::/32": "20940", - "2600:6c38:108::/47": "20115", - "2806:230:301a::/48": "265594", - "2a0d:4a40::/29": "197706", - "2001:648:2011::/48": "15690", - "2605:a404:70b::/42": "33363", - "2a02:ff0:2000::/40": "12735", - "2806:2f0:40c1::/42": "17072", - "2a02:26f0:9401::/39": "20940", - "2402:8100:20d5::/46": "55644", - "2800:200:f0d0::/39": "12252", - "2804:10b4:200::/32": "263645", - "2c0f:f3c8::/43": "328112", - "2400:c400::/32": "45570", - "2401:3c0:105::/48": "45528", - "2401:d800:d540::/42": "7552", - "2804:3c78:f000::/48": "266214", - "2a01:130::/32": "8495", - "2a02:9a0::/32": "48514", - "2600:1488:a381::/37": "20940", - "2607:7e80::/35": "395354", - "2620:11d:500f::/48": "393732", - "2a02:26f7:f008::/48": "36183", - "2001:388:a099::/33": "7575", - "2001:559:210::/47": "7922", - "2001:4878:4242::/48": "12222", - "2806:2f0:5101::/42": "17072", - "2a04:1b00:10::/47": "61005", - "2400:ff00::/32": "132045", - "2801:17e::/44": "262589", - "2804:46c4::/32": "267010", - "2a07:9b00::/29": "202640", - "2a0f:c40::/29": "60262", - "2001:67c:548::/48": "56513", - "2804:2044::/32": "52774", - "2a0f:5701:fe01::/48": "56382", - "240a:a768::/32": "144546", - "2804:1dd8::/32": "264398", - "2a00:85c0:3::/45": "203315", - "2400:5280:f803::/48": "23724", - "240e:44d:3a00::/41": "140345", - "2620:103:200f::/48": "30539", - "2800:800:520::/44": "26611", - "2803:2180:1f::/48": "27941", - "2804:4830::/32": "267103", - "2a00:79e1:f000::/38": "36384", - "2a02:16d0::/32": "49855", - "2a0e:b105:724::/43": "20473", - "2001:559:3cf::/48": "33654", - "2001:1a11:9b::/42": "42298", - "2404:c880::/36": "135220", - "2804:5ce0::/32": "268936", - "2a02:26f7:dd81::/46": "20940", - "2001:1820:1b::/32": "12956", - "240a:a8a5::/32": "144863", - "2620:160:e700::/44": "10837", - "2803:e600:ffab::/41": "18809", - "2a00:f38::/32": "12297", - "2a0e:46c4:2910::/48": "138435", - "2c0f:fd98:8110::/48": "28698", - "2001:1248:84d1::/46": "11172", - "2405:d300:20::/48": "38809", - "2a01:110:9008::/48": "35106", - "2001:1a68:2::/48": "198430", - "2a09:a4c7:c000::/35": "208861", - "240a:a1b8::/32": "143090", - "2804:3a30::/32": "266076", - "2804:7fb0::/37": "271703", - "2c0f:ec60::/32": "37282", - "2001:1868::/32": "11404", - "2404:4600:fce::/48": "45991", - "2607:fb10:2035::/33": "2906", - "2800:800:7f0::/45": "26611", - "2804:6d44::/32": "270521", - "2a0e:3304::/32": "43312", - "2c0f:ea20::/32": "328526", - "2001:67c:21a4::/48": "5420", - "2001:fd8:264::/46": "132199", - "240a:a2e2::/32": "143388", - "2a01:b840::/32": "21321", - "2603:c020:8000::/35": "31898", - "2804:36a4::/32": "266361", - "2406:300::/32": "3462", - "240a:a9fe::/32": "145208", - "2804:3030::/32": "264935", - "2804:7824::/32": "271223", - "2a02:1608::/32": "12531", - "2a0e:fd45:40fb::/48": "136620", - "2001:4888:8027::/44": "6167", - "2804:25b4:ff01::/40": "264297", - "2806:105e:14::/44": "8151", - "2a02:548::/32": "35087", - "2a02:26f7:ccc5::/46": "20940", - "2a03:6b00:b::/32": "48832", - "2402:3a80:1b08::/42": "38266", - "2620:135:5000::/45": "26457", - "2a04:340::/29": "200828", - "2a0d:c0c0:3e1::/48": "59439", - "2001:b200::/37": "9505", - "240a:a06d::/32": "142759", - "2605:c4c0::/32": "398338", - "2606:2800:4ae8::/47": "15133", - "2a02:df40::/48": "61347", - "2a07:2900::/32": "33845", - "2001:470:a4::/48": "395681", - "240a:a00a::/32": "142660", - "2804:14d:fe00::/47": "28573", - "2a03:5960::/32": "201324", - "2a03:2887:ff0f::/43": "35819", - "240a:a05b::/32": "142741", - "2600:1402:2001::/35": "20940", - "2a02:7e00::/29": "57630", - "2a0d:5a00::/29": "3175", - "2403:6000:37::/39": "24085", - "2a02:2b18::/32": "35816", - "2401:4900:5850::/44": "45609", - "2402:800:34ee::/43": "7552", - "2620:10a:b080::/47": "15297", - "2804:7ecc::/32": "271648", - "2a01:430:11::/48": "51134", - "2a01:448::/41": "42585", - "2a06:2980::/29": "42695", - "240a:adea::/32": "146212", - "2a09:50c0::/48": "34775", - "2001:df1:1c80::/48": "139367", - "2804:35fc::/32": "266319", - "2a00:f28:2000::/36": "57187", - "2a00:1c18::/38": "31463", - "2604:af80:2448::/32": "18859", - "2800:160:17ab::/43": "14259", - "2803:4ce0::/32": "269905", - "2a02:26f7:cf48::/48": "36183", - "2001:559:8150::/48": "20214", - "2001:67c:276c::/48": "50622", - "2a02:2278:ffff::/48": "21343", - "2001:df0:f500::/48": "142379", - "2406:3000:3:2c::/45": "4657", - "240a:afda::/32": "146708", - "2600:1009:b070::/40": "22394", - "2001:559:c372::/48": "7725", - "2604:6b80::/32": "47020", - "2a02:2a00::/32": "12310", - "2001:559:550::/48": "7922", - "2402:5680:2000::/36": "133798", - "2408:870c::/44": "138421", - "2409:8004:3031::/41": "24547", - "2607:fc58:3000:44::/64": "13536", - "2804:1e20:9950::/48": "264409", - "2804:3274::/32": "265079", - "2a04:7440::/30": "196714", - "2a0c:480::/32": "50673", - "240a:a758::/32": "144530", - "2801:80:1e51::/48": "14026", - "2a06:cb80::/32": "60804", - "2400:b300::/47": "38470", - "2606:2800:4201::/48": "14153", - "2a02:ee80:4011::/48": "3573", - "2001:678:448::/48": "57760", - "2405:8a00:20c4::/42": "55824", - "2407:39c0::/32": "133653", - "2600:1806:120::/47": "16552", - "2606:b800::/32": "25983", - "2804:c50::/32": "262891", - "2a02:51c0::/32": "42277", - "2001:67c:2964::/48": "57330", - "2406:8540::/46": "141202", - "2610:b0:40da::/45": "3573", - "2404:8600:4800::/32": "17918", - "2405:8180:b00::/37": "135478", - "2604:9100:1001::/48": "14313", - "2804:2728:8202::/33": "263880", - "2a01:9700:1600::/42": "8376", - "2a02:ac80::/43": "25145", - "2a06:e881:550d::/46": "209864", - "2a0e:47c7:1000::/48": "208259", - "2001:559:567::/48": "33657", - "2404:bf40:8781::/36": "139084", - "2600:140b:a801::/37": "20940", - "2620:c6::/48": "63056", - "2804:348c::/32": "265464", - "2a02:508::/32": "8473", - "2a06:98c0:1000::/48": "203898", - "2001:559:c3e4::/48": "7016", - "2001:67c:2c0::/48": "49014", - "2001:67c:2c68::/48": "62396", - "240e:3b1:1800::/34": "4134", - "240e:67c:e600::/31": "4134", - "2600:141b:f001::/29": "20940", - "2803:e880:fff1::/44": "52468", - "2803:fe60::/32": "262186", - "2804:3e60:500::/32": "266592", - "2001:559:85f2::/48": "33652", - "2001:44b8:2043::/45": "7545", - "2606:f700::/32": "54359", - "2620:149:a0b::/48": "714", - "2803:f80::/32": "263726", - "2001:468:ef01::/48": "396955", - "240a:a520::/32": "143962", - "240e:67d:c600::/34": "4134", - "2605:1980:105::/46": "13951", - "2800:bf0:2000::/48": "52257", - "2803:800::/45": "25607", - "2408:8956:7300::/40": "17816", - "2600:1013:b0e0::/33": "6167", - "2600:140b:5401::/36": "20940", - "2001:43f8:d60::/48": "328162", - "2407:f800:800::/40": "38182", - "2a02:26f7:c1c0::/48": "36183", - "2a07:cbc0::/39": "201299", - "2001:df6:2580::/48": "135738", - "2001:fd8:e8::/39": "4775", - "2404:ba00:4::/48": "17665", - "240a:af6f::/32": "146601", - "2a04:4e40:5e30::/41": "54113", - "2804:1e38:2018::/33": "264415", - "240a:ac0f::/32": "145737", - "2605:3380:4000::/39": "12025", - "2607:6100:1000::/45": "54380", - "2607:a800:202::/48": "15695", - "2620:139:6002::/48": "22600", - "2804:b8c::/32": "52794", - "2804:1888::/32": "61938", - "2604:4d40:7cb9::/48": "399196", - "2620:119:35::/48": "36692", - "2804:1ba4::/32": "61741", - "2804:2720::/32": "263878", - "2800:160:201b::/42": "14259", - "2a03:7740::/32": "39232", - "2001:559:8483::/48": "22258", - "240a:ae73::/32": "146349", - "2a00:4800:3f0::/37": "13124", - "2a03:4bc0:2000::/48": "30893", - "2407:74c0::/32": "138864", - "2a03:5ae0::/32": "49944", - "2801:80:2350::/48": "267300", - "2a01:b000::/44": "35266", - "2a09:9c40::/29": "209148", - "2001:df0:318::/47": "136601", - "2804:4924::/44": "267167", - "2804:4f90:300::/32": "268335", - "2a07:22c1:ffe6::/44": "57164", - "2a0e:b107:fb3::/48": "211704", - "2001:559:8465::/48": "33654", - "2401:d800:fe20::/41": "7552", - "2804:14c:7d00::/40": "28573", - "2804:6018::/32": "269145", - "2a07:91c0::/29": "47304", - "2a0f:5140::/29": "209372", - "2001:559:72e::/48": "7015", - "2001:559:821d::/48": "20214", - "2402:c180::/32": "134503", - "2405:ec00:1101::/32": "23955", - "240a:a209::/32": "143171", - "2605:f540::/32": "398712", - "2804:7efc::/38": "271659", - "2001:559:7f9::/48": "33491", - "2001:678:474::/48": "205866", - "2600:1f01:4820::/47": "16509", - "2a00:b400::/31": "12857", - "2001:67c:368::/48": "12509", - "2001:df0:b6::/48": "63510", - "2402:800:357f::/40": "7552", - "2408:8642::/32": "4837", - "2402:dfc0::/44": "4808", - "240a:a93d::/32": "145015", - "240e:1f:7000::/36": "134763", - "2803:2b00:1101::/46": "52468", - "2804:116c::/32": "263675", - "2400:adc7:3000::/39": "9541", - "2402:28c0:ffae::/48": "137910", - "2a01:6480:2::/44": "29049", - "2001:559:2f3::/48": "33657", - "2402:f840::/47": "137883", - "240a:a249::/32": "143235", - "2605:c640:10a::/32": "62538", - "2620:53:2000::/48": "6521", - "2804:2ae4:4000::/36": "13878", - "2401:ff80:158f::/43": "133954", - "2607:fcc8:afc1::/33": "10796", - "2a02:2070:ffff::/48": "31560", - "2a03:3620::/32": "48522", - "240a:a6e0::/32": "144410", - "240a:aa04::/32": "145214", - "2600:140f:e00::/48": "9498", - "2600:1801:12::/47": "16552", - "2605:6c80:7::/48": "40676", - "2804:370c::/32": "266386", - "2001:c20:487f::/40": "3758", - "2a01:5bc0::/32": "48298", - "240a:adb0::/32": "146154", - "240e:473:5850::/39": "4134", - "2a02:26f7:f701::/46": "20940", - "2408:8409:3000::/40": "4808", - "2001:559:367::/48": "33657", - "2001:67c:29fc::/48": "30923", - "2a01:448:72::/48": "20559", - "2a01:c50e:c00::/35": "12479", - "2405:aac0:221::/46": "139949", - "2409:8d0c::/30": "56042", - "240e:44d:880::/41": "4134", - "2a02:26f7:d4c8::/47": "36183", - "2a02:2e02:95b0::/38": "12479", - "2403:20c0:2::/47": "137945", - "2600:100d:b1f0::/36": "22394", - "2605:1600::/32": "17143", - "2001:559:c39f::/48": "33651", - "2001:f98::/32": "17683", - "2408:8459:1f10::/42": "17623", - "2602:801:f00d::/46": "32590", - "2803:5440:cace::/48": "264738", - "2a04:5300::/29": "13135", - "2402:8400:600::/39": "17820", - "240a:a861::/32": "144795", - "2600:1417:3801::/33": "20940", - "2a00:18f8::/32": "31416", - "2a01:9580:8000::/34": "49544", - "2a0a:7240::/32": "206082", - "2a0d:b000::/29": "12637", - "2402:800:76c0::/42": "7552", - "2403:2c00:c::/32": "4058", - "240a:ad62::/32": "146076", - "2604:880:26::/47": "29802", - "2a01:8840:15::/48": "207266", - "2001:fb0:109f::/59": "7470", - "2408:8256:3888::/48": "17816", - "240a:a2b9::/32": "143347", - "240a:ab36::/32": "145520", - "2804:1784::/39": "263152", - "2804:2f10::/32": "264869", - "2806:103e:9::/48": "8151", - "2a02:4c00::/39": "12676", - "2605:900::/32": "12110", - "2a00:ad87:c00::/48": "42525", - "2a0b:2d80::/32": "212521", - "2001:67c:1240::/48": "198812", - "2400:cb00:326::/48": "13335", - "2804:648::/32": "53038", - "2401:4900:5c70::/44": "45609", - "240e:473:3b50::/40": "4134", - "240e:97d:3000::/36": "4134", - "2600:1419:1b::/48": "4230", - "2a02:1308::/29": "196922", - "2a02:1318::/32": "25054", - "2409:8a52:1100::/31": "56047", - "240a:a36c::/32": "143526", - "240a:aee8::/32": "146466", - "2600:1017:a810::/35": "6167", - "2804:40a8::/32": "28173", - "2402:800:9363::/43": "7552", - "2a02:26f7:fbc9::/42": "20940", - "2402:800:99b7::/41": "7552", - "2610:130:3401::/48": "398119", - "2620:79:c000::/48": "62903", - "2a03:1980:d400::/40": "48260", - "2a07:a107::/32": "202701", - "2001:1938:0:5000::/52": "34305", - "2408:8256:3d7f::/48": "17816", - "2409:8c28:7ce1::/39": "56041", - "2a02:188:1005::/33": "31027", - "2400:4d40:f001::/36": "134204", - "2404:2400:110::/40": "56132", - "2a02:2af8:130::/38": "702", - "2a0b:6b83:2000::/48": "208249", - "2a0f:cfc0::/32": "207729", - "2a10:df40::/29": "211458", - "2403:1000:3100::/40": "38819", - "240a:ab13::/32": "145485", - "2800:486::/32": "14080", - "2001:1248:5741::/44": "11172", - "2406:da70:a000::/40": "16509", - "2409:8904:5160::/38": "24547", - "2804:151:3::/41": "10954", - "2806:2f0:2084::/43": "22884", - "2001:550:7705::/46": "174", - "2001:559:867a::/48": "33651", - "2408:84f3:e410::/42": "134543", - "2409:8087:2900::/35": "9808", - "240e:44d:7880::/41": "4134", - "2600:100e:a010::/39": "6167", - "2804:3bd0::/32": "266172", - "2a00:1f78:ffff::/48": "8893", - "2a0f:5707:af05::/48": "211358", - "2a10:afc0:e010::/44": "212794", - "2c0f:f6d0:b::/43": "327687", - "2001:14b8::/29": "16086", - "2409:8739::/30": "9808", - "240a:ab5c::/32": "145558", - "2605:8900:5000::/36": "3800", - "2801:1c6::/44": "19429", - "2a02:26f7:f5c0::/48": "36183", - "2a0c:9a40:80a6::/48": "51861", - "2409:8924:1500::/38": "56046", - "240a:a6b5::/32": "144367", - "2600:1404:ac00::/48": "35994", - "2804:14c:4a3::/45": "28573", - "2a00:1788::/40": "31167", - "2a03:94a0::/32": "203752", - "2001:768::/32": "8356", - "2001:1388:8411::/41": "6147", - "2401:ff80:1101::/46": "133954", - "2406:3000:4f:200::/35": "4657", - "240e:438:1220::/43": "140647", - "2600:140b:3c01::/33": "20940", - "2804:34f4::/32": "265491", - "2607:2a00::/47": "29909", - "2a03:f80:852::/48": "9009", - "2a0e:5700::/32": "58291", - "2001:fd8:21d8::/42": "4775", - "2001:4878:27::/48": "12222", - "2408:8957:4900::/40": "17816", - "2804:1a64::/32": "14457", - "2a03:5800::/32": "31214", - "2a0e:97c0:120::/44": "211977", - "2001:470:b3::/44": "6939", - "2408:8456:6040::/39": "17816", - "240a:a72b::/32": "144485", - "2600:400:3e10::/32": "15147", - "2a05:8900:36::/48": "199159", - "2a0e:97c5:6c0::/45": "20473", - "2a0e:fd45:dce::/47": "212085", - "2001:678:e00::/48": "44471", - "2001:fd8:3440::/42": "132199", - "2001:b28:7b0d::/32": "42065", - "2001:1388:8a80::/46": "264684", - "2600:1417:2a::/47": "24319", - "2600:6c38:126::/44": "20115", - "2a0e:3a80::/32": "47454", - "2404:bf40:e005::/48": "2764", - "2600:370f:20a3::/41": "32261", - "2607:f298:6050::/44": "26347", - "2804:4d48::/33": "53115", - "2a03:79a0::/32": "47989", - "2a0b:a180::/29": "41038", - "2c0f:ef48::/32": "328339", - "2600:1a0e:2001::/37": "46650", - "2610:b0:4032::/45": "3573", - "2a0f:9400:770f::/48": "211266", - "2001:df2:c980::/48": "140421", - "240e:12:9800::/33": "4134", - "2402:d600::/32": "17948", - "240a:a8c8::/32": "144898", - "240e:980:9b00::/31": "4134", - "2804:14d:2a77::/44": "28573", - "2a0e:fd45:6::/48": "213285", - "2001:678:c20::/48": "200303", - "2001:13c7:6007::/48": "52294", - "2405:1c0:6253::/42": "55303", - "240e:5f:6010::/26": "4134", - "2a02:2aa0::/39": "702", - "2a09:4dc0::/32": "196822", - "2a0e:ac40::/29": "202966", - "2401:d800:720::/41": "7552", - "2401:d800:b40::/42": "7552", - "240e:473:7720::/41": "140486", - "2a01:6400::/32": "21430", - "2a02:2ad0:639::/45": "702", - "2a0e:6540:d32::/48": "208364", - "2804:7ce8::/32": "271526", - "240a:aa4b::/32": "145285", - "240a:ac80::/32": "145850", - "240e:473:4750::/40": "4134", - "2602:fdeb::/36": "40818", - "2606:23c0::/32": "399228", - "2804:1c1c:4001::/36": "61638", - "2804:4130::/32": "266009", - "2a02:2800::/29": "15388", - "2a0b:86c0::/30": "202120", - "2001:df0:69::/48": "41625", - "2400:ea00:3560::/47": "23884", - "2401:5940::/32": "135253", - "240a:afe4::/32": "146718", - "2605:b100:400::/40": "577", - "2a00:9120:1::/46": "60680", - "2a0d:3440::/29": "49223", - "2a0f:5701:3506::/48": "205593", - "2001:559:4f9::/48": "33287", - "2402:9d80:a04::/46": "131429", - "2407:b000::/33": "17819", - "2800:4f0:b::/48": "28006", - "2a02:2488::/32": "29413", - "2a03:5d80::/32": "44858", - "2a06:5600:28f8::/48": "50297", - "2604:880:3ad::/41": "29802", - "2804:5e08:280::/39": "269007", - "2806:2a0:1c::/40": "28548", - "2001:420:c0f0::/34": "109", - "2409:8900::/31": "56048", - "2604:b300:ad03::/48": "394896", - "2a0c:44c0:1::/46": "198611", - "2405:1c0:6165::/43": "55303", - "2a00:1730::/32": "25549", - "240e:44d:6a80::/41": "4134", - "2804:6b48::/32": "270390", - "2a02:6900:8808::/47": "43894", - "2600:1003:d420::/34": "22394", - "2801:80:1280::/48": "263859", - "2801:80:2a00::/44": "271107", - "2a05:d03a:e000::/40": "16509", - "2a07:3500:1c30::/48": "207894", - "2001:470:32::/48": "19969", - "2804:44b8::/32": "267649", - "2804:4f04::/32": "268298", - "2a03:8180:1800::/39": "36351", - "2001:559:8112::/48": "20214", - "2408:8456:1e00::/42": "17622", - "2409:8924:9f00::/34": "56046", - "2620:1f:8004::/48": "10908", - "2804:2ca4:4100::/32": "265232", - "2a00:ea0::/29": "202204", - "2a09:bac0:108::/48": "395747", - "240a:a8f6::/32": "144944", - "2602:ffe4:c11::/44": "21859", - "2605:5fc0::/32": "397881", - "2605:e700:3000::/32": "6913", - "2a05:dfc7:5353::/48": "204136", - "2a07:4b00::/29": "48813", - "2a10:cbc7:1::/32": "49778", - "2401:9f00::/32": "9925", - "2408:8459:3240::/37": "17816", - "240e:3be:1400::/38": "134773", - "2a04:4e40:5010::/41": "54113", - "2408:84f3:3460::/40": "17623", - "2804:405c::/32": "265954", - "2403:1940:acc1::/46": "137935", - "2803:d100:e5c0::/42": "52362", - "2a02:26f7:7b::/48": "20940", - "2a0a:6040:407e::/48": "209870", - "2001:559:80fa::/48": "33489", - "2001:4878:a062::/48": "12222", - "2001:49f0:a000::/44": "174", - "2600:1406:fc00::/48": "35994", - "2620:129:4000::/40": "62909", - "2804:16d0::/32": "52697", - "2a06:7a07::/43": "49072", - "2001:468:503::/44": "14041", - "2804:14c:a985::/44": "28573", - "2001:12f0:f79::/40": "1916", - "2801:80:3d0::/48": "263076", - "2403:6640:8000::/33": "136516", - "2406:3540:2::/48": "17415", - "2407:1e40:201::/39": "141732", - "2600:1408:1d::/42": "20940", - "2620:112:c000::/40": "29899", - "2a01:300:6a::/43": "9009", - "2001:67c:2748::/48": "51810", - "240a:aba8::/32": "145634", - "2605:a404:be9::/37": "33363", - "2606:9100:9000::/36": "1421", - "2a00:1de0::/32": "38915", - "2a04:4e42:80::/38": "54113", - "2405:4440::/32": "137578", - "2406:c3c0::/32": "134823", - "2600:803:639::/35": "701", - "2a00:bdc0:f000::/36": "47542", - "2a04:6f00::/32": "3214", - "2001:678:254::/48": "47251", - "2401:3480:3000::/36": "58466", - "2404:8000:8c::/43": "17451", - "2407:42c0::/32": "135188", - "240a:a8ea::/32": "144932", - "2602:ff68::/36": "63436", - "2a00:5820::/32": "41853", - "2401:78c0:2::/32": "56150", - "2402:800:b8f0::/39": "7552", - "2403:ad80:10::/48": "36351", - "2405:7600::/47": "23956", - "2001:559:c20a::/48": "33491", - "2800:440:146::/48": "27738", - "2803:ec60::/32": "267850", - "2804:77c:501::/32": "53222", - "2804:2da8::/32": "265295", - "2804:375c::/32": "266406", - "2804:3818::/32": "266456", - "2001:ce0:4::/48": "4616", - "240a:a4c1::/32": "143867", - "2605:34c0:f000::/36": "397449", - "2804:30b0::/32": "264969", - "2804:54e8::/32": "268677", - "2a0b:11c0:92::/48": "198682", - "2605:5b00::/32": "15317", - "2620:0:10::/48": "18694", - "2804:4aa8::/32": "267255", - "2a02:2890:ffff::/31": "51185", - "2001:16b8:1900::/37": "8881", - "2001:4b22:12::/64": "65505", - "2a0f:6580:106::/48": "60707", - "2602:feb4:d0::/44": "25961", - "2605:6440:100a::/36": "396356", - "2804:7724::/32": "271158", - "2a0d:20c0::/29": "200689", - "2a0f:8380::/29": "13045", - "2001:1a11:7e::/40": "8781", - "2408:8459:5850::/38": "17816", - "240e:965:8800::/38": "133775", - "2605:9d80:8031::/48": "4134", - "2804:4a18::/32": "267218", - "2001:559:2ab::/48": "7922", - "2001:128c:2004::/33": "25933", - "2400:8c80::/32": "132158", - "2407:ca40:40::/48": "142502", - "2001:67c:6c::/48": "1850", - "2001:67c:1320::/48": "61183", - "240a:3:b90::/44": "9605", - "2600:6:ff06::/44": "10507", - "2a01:4a40::/32": "44814", - "2400:8b00:700::/42": "45727", - "2604:d600:161a::/47": "32098", - "2a02:2ba8::/32": "14717", - "2603:8000::/28": "20001", - "2620:79:3::/45": "30013", - "2804:6090::/32": "269177", - "2a02:26f7:b7c5::/46": "20940", - "2a0c:b641:220::/48": "210890", - "2c0f:2e00::/32": "328578", - "2001:559:c139::/46": "33652", - "2408:8256:3380::/43": "17623", - "2001:ee0:7ec0::/32": "45899", - "2404:8600::/33": "17918", - "240a:a27e::/32": "143288", - "240a:adc8::/32": "146178", - "2620:100:9008::/47": "13916", - "2a0f:af00::/32": "20626", - "2620:1ec:90a::/47": "8075", - "2604:d600:554::/44": "32098", - "2804:7fe4::/32": "271716", - "2001:44b8:503a::/34": "4739", - "240a:a08b::/32": "142789", - "240e:3b1:8200::/35": "140316", - "2600:370f:3680::/42": "32261", - "2800:640::/32": "262149", - "2a05:b680:1::/48": "34450", - "2001:978:801:1::/40": "174", - "2600:100f:b1e0::/33": "22394", - "2603:c0f9::/36": "20054", - "2a05:e780::/29": "52115", - "2a06:1ec7::/32": "49832", - "240a:a674::/32": "144302", - "240a:ac4f::/32": "145801", - "2a02:26f7:c844::/48": "36183", - "2a0c:9a40:1070::/44": "34927", - "2a10:4140::/29": "206478", - "2402:800:b010::/42": "7552", - "2600:6c38:c0b::/45": "20115", - "2603:c0f1:2000::/36": "6142", - "2804:1c50::/32": "61649", - "2806:230:4033::/48": "11888", - "2001:678:5d4::/48": "3320", - "2001:67c:1064::/48": "51088", - "2607:fef8:ffe0::/46": "13750", - "2806:230:3028::/48": "265594", - "2a00:4800:230::/39": "13124", - "2a03:7380:1f40::/40": "13188", - "2804:67c8::/32": "269650", - "2001:67c:664::/48": "42528", - "2001:67c:21d0::/48": "35096", - "2001:1248:a4ca::/47": "11172", - "2407:2a00::/32": "55832", - "240a:a352::/32": "143500", - "240e:1:a800::/33": "4134", - "2804:1b1c:f000::/36": "61709", - "2a04:5bc0:1::/46": "28695", - "2001:559:861e::/48": "7922", - "2401:4f00::/32": "38328", - "2606:2800:6002::/45": "15133", - "2a00:aac0::/29": "25375", - "2a05:87c0::/29": "198440", - "2001:559:307::/48": "33489", - "2403:b900::/32": "4382", - "2607:fcd0:fa80:9405::/42": "8100", - "2620:12b:d000::/46": "35873", - "2402:800:5ac5::/43": "7552", - "2605:1580::/32": "32732", - "2804:14c:65e5::/43": "28573", - "2804:1788::/32": "263153", - "2a04:9540::/29": "51265", - "240a:a17f::/32": "143033", - "240e:473:ae00::/41": "140485", - "2620:138:301e::/48": "23344", - "2804:35d0::/32": "266308", - "2800:860:b0b::/48": "20299", - "2804:315c::/32": "265009", - "2a0b:4d80::/29": "206492", - "2001:4478:5800::/39": "4739", - "2800:be0::/38": "267848", - "2804:5204::/32": "268490", - "2a0e:800:ff03::/45": "209083", - "2a0e:b107:18::/48": "210814", - "2401:d800:d4e0::/39": "7552", - "2605:1080:0:ffee::/47": "23367", - "2606:4700:42c8::/45": "13335", - "2620:11f:7000::/46": "13737", - "2801:1fc:1c::/48": "27951", - "2a0c:f780::/29": "210321", - "2604:4ec0::/35": "396480", - "2a02:26f7:da80::/48": "36183", - "2a07:1c40:1030::/46": "209089", - "2001:438:7e::/32": "6461", - "2401:d800:d960::/40": "7552", - "2406:e300:2::/32": "45250", - "240a:a998::/32": "145106", - "2804:14c:479::/40": "28573", - "2804:14d:1a00::/40": "28573", - "2804:cd0::/32": "52557", - "2a00:67c0::/32": "57660", - "2a0f:5707:aa80::/44": "56382", - "2001:559:8169::/48": "7015", - "2401:4900:3a00::/42": "45609", - "2405:4000:aab::/32": "38082", - "240a:aede::/32": "146456", - "2806:230:4014::/48": "265594", - "2a02:26f7:edc1::/46": "20940", - "2001:67c:214c::/48": "24909", - "2001:1938:b00c::/33": "12989", - "2400:a980:3000::/40": "133513", - "240a:a2a7::/32": "143329", - "2001:67c:1a8::/48": "1200", - "2602:803:9000::/46": "17138", - "2800:bf0:2440::/48": "52257", - "2600:1004:d140::/34": "22394", - "2600:140f:9800::/48": "9498", - "2804:31a8::/32": "265029", - "2804:67b0::/32": "269644", - "2406:5a00::/32": "55850", - "2620:74:78::/48": "30060", - "2a02:8801::/32": "5089", - "2600:8807:9400::/36": "22773", - "2603:4:1700::/48": "44273", - "2a0a:ec02:a01::/48": "42692", - "2001:4948::/32": "7782", - "2402:800:9855::/42": "7552", - "2407:62c0::/32": "38854", - "240e:3bd:c800::/37": "4134", - "2a00:7e40:9ac1::/48": "1301", - "2607:f250:d020::/48": "7046", - "2620:107:90d0::/48": "22787", - "2a00:eaa0::/32": "59842", - "2a02:2778::/32": "35665", - "2a04:95c0::/29": "29611", - "2a05:2607::/32": "57948", - "2001:44c8:45b0::/44": "45430", - "2804:cf8:c::/46": "52580", - "2a02:26f7:b98a::/48": "36183", - "2001:418:1401:10::/60": "2914", - "2403:8600:80e0::/43": "45820", - "2605:bb00:1004::/34": "4213", - "2803:bc40:810d::/34": "52468", - "2a10:ad40::/29": "211656", - "2400:cb00:90::/48": "13335", - "2405:6e00:450::/42": "18291", - "2605:c540:c000::/48": "398378", - "2804:3bd4::/32": "266173", - "2804:6474::/33": "269429", - "2a10:b200::/32": "56347", - "240e:a5:5000::/32": "4134", - "2600:6c38:c2f::/39": "20115", - "2605:9180::/32": "53597", - "2605:f440:5600::/41": "50555", - "2806:106e:22::/45": "8151", - "2405:6800::/35": "18207", - "2409:8000:1000::/40": "56048", - "2606:f900:6100::/46": "16583", - "2a02:a68::/32": "39574", - "2a06:3b80:21::/46": "206614", - "2a06:6541:1000::/48": "34893", - "2a09:3d05::/30": "208861", - "2403:df40::/43": "14630", - "2804:7dc::/32": "262329", - "2001:df0:d680::/46": "139287", - "2001:559:85e3::/48": "22909", - "2001:1ae8::/31": "13036", - "2606:1980:102::/48": "54994", - "2408:8957:9200::/40": "17622", - "2600:1003:b0e0::/43": "22394", - "2605:c800::/32": "393924", - "2804:357c::/32": "266289", - "2804:3718::/32": "266389", - "2a02:cbf0::/29": "61157", - "2001:559:85cb::/48": "7015", - "2001:df6:e100::/48": "138359", - "2001:16a2:b20c::/43": "25019", - "2408:8956:9e00::/40": "17622", - "240e:108:11d9::/45": "4134", - "240e:438:2420::/43": "140647", - "2a01:9700:132c::/46": "8376", - "2001:410:102::/48": "53904", - "2001:678:abc::/48": "29186", - "2001:1218:600e::/43": "278", - "2403:fd40:1001::/46": "132372", - "2001:678:680::/48": "25223", - "2402:800:73c0::/42": "7552", - "2607:f7c8:701::/32": "36221", - "2a01:788:4::/48": "34305", - "2a02:7040::/32": "199236", - "2804:1bf0:facf::/37": "61758", - "2a02:2aa8:310::/42": "702", - "2001:16b8::/36": "8881", - "2a03:d5c0:a000::/40": "199391", - "2001:559:2e5::/46": "33651", - "2001:559:8555::/48": "33654", - "2404:f100::/37": "17483", - "2804:ed8::/32": "28343", - "2a02:26f7:e085::/46": "20940", - "2001:559:c143::/48": "7015", - "2001:13c7:600d::/48": "52359", - "2607:ff28:e000::/35": "62904", - "2610:a1:300c::/48": "12008", - "2401:d800:5240::/42": "7552", - "2001:559:8126::/48": "33651", - "2001:67c:2d0::/48": "21155", - "2404:4f00:3045::/32": "17819", - "240e:6:d021::/39": "4134", - "2804:ae0::/34": "28352", - "2001:418:1401:7d::/64": "20940", - "2001:67c:17a4::/48": "59891", - "2602:ff16:1::/44": "29802", - "2001:559:871c::/48": "7015", - "2402:800:7f50::/42": "7552", - "240e:67e:c400::/39": "140330", - "2606:2800:4a18::/46": "15133", - "2804:2a44::/32": "264064", - "2a02:6721::/32": "44631", - "2408:815f:e000::/35": "4837", - "2604:d600:129a::/39": "32098", - "2605:a401:87b4::/41": "33363", - "2607:6000:d00::/40": "12189", - "2800:4f0:500::/41": "28006", - "2804:7b78::/32": "271434", - "2a02:2c40::/32": "2611", - "2406:2e00::/32": "17648", - "2804:6fc8:8800::/35": "270684", - "2a01:7d80:2400::/40": "62214", - "2a02:ac80:a1::/43": "25145", - "2a09:2941::/32": "207996", - "2a02:26f7:bb41::/45": "20940", - "2001:67c:244::/48": "39822", - "2001:e30:1c1e::/48": "2697", - "2001:1248:9601::/43": "11172", - "2408:8459:5830::/41": "17622", - "240a:a340::/32": "143482", - "2a04:f180::/29": "42695", - "240a:a3c0::/32": "143610", - "2600:33e0::/27": "398197", - "2607:4100::/34": "19171", - "2a0f:5680:4::/32": "60906", - "2800:440:1400::/42": "27738", - "2405:fa80::/32": "132894", - "2804:2d5c::/32": "265277", - "2a02:798::/32": "31688", - "2a02:26f7:bd84::/48": "36183", - "2a07:b440::/29": "43366", - "240a:ac32::/32": "145772", - "2a06:1d00::/29": "30875", - "2804:3ab0::/32": "266103", - "2001:559:3b7::/48": "13367", - "2001:559:83d4::/48": "7015", - "2001:dcc:401::/48": "23599", - "2604:8500::/32": "25769", - "2607:fcd0:fa80:901::/51": "8100", - "2804:774:400::/32": "52858", - "2804:1468:9000::/33": "263328", - "2a01:367:cff4::/35": "30823", - "2001:678:58c::/48": "204926", - "2001:67c:2b38::/48": "16101", - "2409:804e:3900::/31": "9808", - "2600:1406:9c00::/48": "35994", - "2800:bf0:103::/48": "27947", - "2a00:ae20::/32": "60501", - "2001:700::/32": "224", - "2405:9600::/32": "20940", - "2c0f:f0c0::/31": "37035", - "2001:428:3808::/33": "209", - "2402:800:3e20::/43": "7552", - "2800:a90::/32": "262195", - "2804:1ca4:8041::/40": "263010", - "2a00:1ff8::/32": "47138", - "2a06:6180::/29": "34941", - "2001:559:1d8::/48": "33287", - "2400:cb00:a460::/48": "13335", - "2a04:fb00:1::/48": "39315", - "2404:4e00:3::/45": "32787", - "2407:e400::/32": "18390", - "240a:a669::/32": "144291", - "240e:250:400::/35": "4134", - "240e:67c:c600::/34": "4134", - "2603:d000::/24": "30600", - "2610:60::/32": "29748", - "2001:67c:598::/48": "206897", - "2001:44c8:3200::/36": "45430", - "2806:1040:fc::/48": "20940", - "2a02:26f7:cb::/45": "20940", - "240b:4003:fd95::/46": "45102", - "240e:473:1400::/41": "140485", - "2a02:26f7:ac::/48": "36183", - "2001:df6:4900::/48": "139195", - "2409:8c54::/32": "56040", - "240a:a4cf::/32": "143881", - "2804:3180:301::/32": "265019", - "2a02:2aa8:330::/32": "702", - "2a0d:8580::/32": "204572", - "2a00:1a98::/32": "21107", - "2001:559:c2d4::/48": "7922", - "2001:4048::/39": "33922", - "2400:a600::/32": "55803", - "2406:3001:22:a::/47": "4657", - "2620:2f::/48": "32638", - "2804:75c::/32": "262637", - "2804:45e4:7d10::/32": "262567", - "2400:c540::/46": "59238", - "2804:2050:5a7f::/40": "264485", - "2804:3b1c::/32": "266130", - "2a02:598:4445::/32": "43037", - "2401:d800:22f0::/39": "7552", - "2404:3a80::/32": "135063", - "2404:4a00:6500::/64": "55423", - "2409:8904:33a0::/37": "24547", - "2600:c07::/48": "29791", - "2602:231::/32": "5056", - "2804:7e20::/32": "271604", - "2a02:1388:5000::/29": "29247", - "2a09:a7c4::/30": "13030", - "2405:7f00:c220::/36": "133414", - "2405:9800:c::/43": "45430", - "240e:473:8850::/39": "4134", - "240e:964:cb00::/40": "133776", - "2600:6000:f003::/48": "11351", - "2a0b:3c40:11::/46": "208258", - "2600:1413:1000::/48": "24319", - "2600:141b:7801::/32": "20940", - "2001:678:e8c::/48": "212518", - "2400:cb00:397::/44": "13335", - "2a02:fe8::/31": "39686", - "2a06:e0c0::/30": "28769", - "2001:b88::/33": "33915", - "2620:2a:c000::/48": "13977", - "2804:38a8::/32": "266492", - "2801:1fc:28::/48": "27951", - "2a02:320::/29": "8351", - "2a09:6d40::/32": "60349", - "2a0b:25c0::/29": "58243", - "2405:ba00:8701::/48": "2764", - "2408:8000:c040::/31": "4837", - "240a:ae1d::/32": "146263", - "2a00:d28::/32": "31662", - "2a02:26f7:c891::/46": "20940", - "2402:800:b100::/42": "7552", - "2409:8752:1100::/31": "56047", - "2804:2598::/32": "264290", - "240e:1f:cf00::/40": "134774", - "2801:11e:2::/47": "3816", - "2a03:4ca0::/32": "208154", - "2600:3006:1400::/31": "13649", - "2a02:26f7:d1c0::/48": "36183", - "2a0d:5087:1a2c::/48": "34202", - "2001:67c:2894::/48": "3292", - "2408:8459:2110::/42": "17623", - "240a:abe3::/32": "145693", - "2604:4b4f::/32": "396420", - "2806:2f0:43a1::/41": "17072", - "2a01:7420::/32": "200924", - "2a03:e700::/32": "8922", - "2001:678:4::/47": "42909", - "2607:ffe0::/32": "33541", - "2a09:4d40::/32": "44812", - "2800:160:14e1::/46": "14259", - "2a02:26f0:a301::/37": "20940", - "2a05:7140::/29": "25455", - "2c0f:f0b8::/32": "37123", - "2001:df6:9500::/48": "137671", - "2408:8957:3200::/40": "17622", - "2a03:efc0:1300::/40": "33438", - "2001:df3:5d00::/48": "137204", - "2402:800:9ea0::/43": "7552", - "2a0d:ee80::/32": "42061", - "2a0e:97c5:700::/46": "20473", - "2606:3c0::/32": "399016", - "2804:c6c::/32": "52704", - "2804:5d24::/32": "268953", - "2806:230:5017::/36": "11888", - "2806:2f0:8141::/42": "17072", - "2a02:2e02:3a90::/39": "12479", - "2408:8456:4410::/42": "134543", - "240e:b7:8000::/28": "4134", - "240e:982:3000::/39": "137693", - "2600:9000:11bd::/48": "16509", - "2a02:26f7:e1c1::/46": "20940", - "2a05:1082:5::/48": "136918", - "2001:16d8:afff::/35": "16150", - "240a:a07d::/32": "142775", - "2804:4a90::/32": "267249", - "2a03:6f01:1::/48": "9123", - "240e:473:7550::/40": "4134", - "240e:981:e000::/39": "137687", - "2800:370:150::/42": "28006", - "2803:2320::/32": "266721", - "2a00:9260::/32": "60690", - "2001:df0:a300::/48": "17990", - "2401:8800:e00::/40": "17439", - "2a00:6060::/33": "60983", - "2a0c:dc80::/32": "208033", - "2804:145c:c002::/42": "263327", - "2001:400:b15::/44": "293", - "2001:418:1401:1::/64": "3949", - "2001:559:2f4::/46": "33287", - "2402:9900:211::/48": "27435", - "240a:ad30::/32": "146026", - "2602:fe25::/44": "33174", - "2605:ed00::/37": "11427", - "2804:61c8::/32": "269256", - "2a04:f580:9030::/48": "4809", - "2a00:4e80::/32": "12754", - "2a04:9301::/29": "1764", - "2a02:4a40:108::/48": "50994", - "2401:c900:1800::/40": "36351", - "240a:a7ac::/32": "144614", - "2600:d402::/28": "1403", - "2604:d600:155a::/45": "32098", - "2804:37a4::/36": "262543", - "2a02:16a::/31": "13030", - "2a02:26f7:d4c0::/48": "36183", - "2a09:be40:be00::/44": "211942", - "2803:6000::/32": "52228", - "2803:e600:cac4::/44": "18809", - "2804:24cc::/47": "264242", - "2a02:2010:20a0::/45": "20978", - "2001:678:d44::/48": "213279", - "2407:7200:2::/33": "10098", - "2a00:11c0::/44": "42473", - "2a03:3580::/32": "42082", - "2001:559:c116::/48": "7015", - "2607:f740:e635::/44": "63911", - "2a01:2a8::/29": "1836", - "2001:1bc0::/31": "29686", - "2404:f4c0:feff::/48": "139249", - "2408:8957:b400::/40": "17622", - "2804:2138::/32": "264543", - "2a10:6900::/29": "398559", - "2602:ff79::/32": "30257", - "2804:6e28::/32": "270579", - "2a02:26f7:dd08::/48": "36183", - "2602:ff42::/36": "7018", - "2804:6830::/32": "269674", - "2a01:bf40::/32": "15691", - "2001:559:216::/48": "7016", - "2408:8459:2150::/38": "17816", - "2804:14d:4ced::/46": "28573", - "2804:5eb0:2000::/32": "269050", - "2a02:26f0:da01::/39": "20940", - "2001:418:1466::/48": "396370", - "240b:4000::/30": "45102", - "240e:473:6b50::/40": "4134", - "2001:678:670::/48": "197880", - "2001:44b8:3b::/48": "4739", - "2605:6e00::/32": "40298", - "2605:a401:8bbc::/41": "33363", - "2a03:5840:10a::/48": "213073", - "2001:678:be4::/48": "207647", - "2001:67c:638::/48": "60059", - "2001:1bb8::/32": "31122", - "2407:d1c0::/32": "24162", - "240e:3b3:1800::/34": "4134", - "2804:45e4:8100::/33": "262567", - "2804:5a00::/32": "268739", - "2001:e40::/29": "9370", - "2605:a840::/32": "7775", - "2800:160:199e::/41": "14259", - "2001:3c8:cb02::/35": "4621", - "2607:ffd0:900::/32": "13767", - "2a02:b60:2000::/35": "41032", - "2001:67c:277c::/48": "208818", - "2400:6280:130::/46": "132280", - "2801:80:ec0::/48": "264102", - "2804:1608::/32": "263423", - "2804:43cc:1011::/32": "267590", - "2a00:1138::/33": "43782", - "2a02:26f7:e3c1::/46": "20940", - "2a02:2a58:110::/38": "702", - "2401:d800:20b0::/41": "7552", - "240a:a07a::/32": "142772", - "240e:108:2a::/48": "63835", - "2803:5ba0::/32": "267766", - "2a06:1c40::/29": "204035", - "2001:1388::/46": "6147", - "2606:4dc0::/32": "399077", - "2806:1070:ceff:3::/39": "8151", - "2607:1880:ec16::/48": "13499", - "2607:f368:2000::/40": "46846", - "2804:23e4:2a::/38": "264191", - "2a00:86c0::/42": "2906", - "2a02:26f7:f8d5::/46": "20940", - "240e:44d:6800::/41": "140345", - "2a00:14e8::/29": "25358", - "240a:a955::/32": "145039", - "2607:a500:5::/44": "12025", - "2a09:5500::/29": "49010", - "2a00:1e88::/45": "12389", - "2a04:4e40:9200::/48": "54113", - "2409:8050:1000::/47": "56047", - "2803:2a80:800::/48": "262928", - "2001:559:812f::/48": "7015", - "2001:668:117::/48": "25973", - "2620:11b:4006::/47": "47870", - "2a00:b701::/29": "51659", - "2400:1a00:b011::/42": "17501", - "240a:a988::/32": "145090", - "2604:f980:4380::/43": "19957", - "2a00:cf40::/32": "28902", - "2403:8500:1200::/40": "45804", - "2604:50::/45": "393950", - "2a05:2100::/30": "198977", - "2a0d:82c3::/29": "47787", - "240a:a28a::/32": "143300", - "240e:a8:e400::/27": "4134", - "240e:473:3000::/41": "140485", - "2a07:2580::/29": "203223", - "2a04:efc0::/29": "201847", - "2a0a:3140:1600::/46": "15532", - "2a0b:880::/45": "49624", - "2001:678:b6c::/48": "207880", - "240a:a50f::/32": "143945", - "240a:af9f::/32": "146649", - "240e:6b2::/35": "134772", - "2803:9360::/32": "263222", - "2a01:9dc0:bef0::/33": "11019", - "2a0f:5c40::/44": "48981", - "2403:4e00:311::/45": "45528", - "2404:8d02:5000::/29": "10089", - "2408:840d:5b00::/42": "17621", - "2620:149:1110::/41": "714", - "2a0a:3e80::/29": "206606", - "2c0f:f250::/32": "37678", - "2a0e:b107:140::/45": "57883", - "2400:adc0:4020::/48": "9541", - "2408:8431::/32": "4837", - "240e:438:3040::/38": "4134", - "240e:964:e400::/39": "133775", - "2804:82d8::/32": "272160", - "2a00:1728:28::/47": "34224", - "2a0a:340:be00::/40": "48043", - "2610:b0:403c::/41": "3573", - "2804:4310::/32": "267546", - "2a02:25e8::/29": "52157", - "2a02:26f7:dfce::/42": "20940", - "2a01:9a80::/31": "39120", - "2001:7f8:18::/48": "2128", - "2001:bf7:fc00::/44": "208942", - "2001:df4:5a80::/48": "59185", - "2400:9380:a003::/48": "23764", - "2600:1901:bde0::/33": "15169", - "2804:27ec::/32": "263929", - "2804:5ee4::/32": "269063", - "2a02:5960::/32": "201986", - "240a:a5ec::/32": "144166", - "2001:559:134::/48": "33491", - "2001:559:c03d::/48": "33491", - "2600:1419:3001::/36": "20940", - "2620:1ec:14::/44": "8075", - "2804:2778:8000::/36": "263903", - "2a00:1140:201::/32": "44806", - "2001:559:8694::/48": "33651", - "2001:559:8698::/48": "33659", - "2801:80:2210::/48": "267525", - "2c0f:f178:8002::/33": "32437", - "2001:559:84fe::/47": "33659", - "2400:cb00:a6b0::/46": "13335", - "2a02:9010:75::/23": "3352", - "2001:43f8:c1::/48": "37578", - "2620:36:e000::/48": "23473", - "2804:63ac::/32": "269376", - "2a0f:2840::/29": "398559", - "2605:a040::/32": "14077", - "2804:5778::/32": "268067", - "2a09:4c0:5e1::/36": "58057", - "240e:3bc:6400::/35": "140312", - "2a0d:3840:110::/47": "57629", - "2001:df0:272::/48": "132111", - "2407:7000:f301::/36": "9500", - "2408:8957:2400::/40": "17622", - "240a:a532::/32": "143980", - "2605:380:38::/48": "42473", - "2620:106:a000::/44": "25739", - "2a05:fb43::/32": "208861", - "2001:579:6218::/45": "22773", - "2001:df0:2b4::/48": "2526", - "2a00:1748::/32": "44225", - "2a01:7f60::/42": "9115", - "2a06:3e80::/32": "62217", - "2a0e:ed00::/29": "208839", - "2a0f:e80::/29": "42926", - "2001:579:904b::/40": "22773", - "2001:1978:1b00::/37": "13768", - "240a:a264::/32": "143262", - "2801:0:220::/44": "262156", - "2a0a:90c0:1000::/47": "205080", - "2a0a:e5c0:1b::/48": "207996", - "2a0f:95c0:4000::/34": "208662", - "2001:418:1401:72::/60": "2914", - "2001:67c:1174::/48": "12552", - "2602:ff65::/40": "33083", - "2804:60d0::/32": "269193", - "2a03:db80:4425::/36": "680", - "2a02:26f0:72::/47": "20940", - "2001:550:2806::/39": "174", - "2a0c:b641:771::/48": "207299", - "2407:e500::/46": "17929", - "2408:8957:5f00::/40": "17816", - "240e:473:1b20::/41": "140486", - "2600:1406:1401::/39": "20940", - "2a00:fa60:1260::/37": "53550", - "2620:119:e021::/43": "30337", - "2620:135:604f::/43": "22697", - "2402:800:921d::/41": "7552", - "2620:12e:5000::/40": "47101", - "2401:d800:fb30::/41": "7552", - "240a:a0cc::/32": "142854", - "240a:a5bb::/32": "144117", - "2602:ff96:1f::/48": "40676", - "2a06:e881:7302::/40": "213151", - "2001:468:702::/36": "11537", - "2409:8924:5b00::/37": "56046", - "2800:bf0:81c2::/48": "27947", - "2804:e8c:a000::/33": "52561", - "2806:10a8:cbff:100::/34": "8151", - "2a0f:dc0::/29": "60262", - "2400:5100::/32": "10012", - "2408:8256:3b9f::/37": "17816", - "2409:8904:5770::/40": "24547", - "2620:149:a19::/48": "714", - "2a0a:a800::/29": "207198", - "2001:550:1703::/48": "397384", - "2001:559:8614::/47": "33651", - "2001:1248:551b::/42": "11172", - "240e:3b8::/35": "134773", - "240e:438:4020::/43": "140647", - "2a02:26f7:f440::/48": "36183", - "2a0c:a4c0::/29": "202451", - "2401:d800:5f50::/42": "7552", - "2620:119:4044::/42": "7726", - "2804:21f0::/32": "263554", - "2a02:26f7:b849::/46": "20940", - "2001:df6:6100::/48": "134934", - "2a04:84c0::/32": "200083", - "2001:4f8:b::/48": "16509", - "2001:559:2eb::/48": "33651", - "2001:678:c30::/48": "39591", - "2600:6c38:c0f::/42": "20115", - "2604:dfc0::/32": "14727", - "2607:f380:a60::/45": "2152", - "2404:bf40:a441::/48": "7545", - "2a01:88c0::/32": "198807", - "2001:4c0:6001::/46": "855", - "2408:8957:19c0::/38": "17622", - "2604:3e40::/32": "19117", - "2604:63c0::/32": "19465", - "2607:de00::/42": "23498", - "2804:217c::/32": "264557", - "2804:4008::/32": "265929", - "2a02:ee80:4025::/44": "3573", - "2a09:8580::/29": "43341", - "2a09:d440::/29": "52031", - "2001:12f8:8::/47": "10906", - "240e:87c:c0::/38": "137692", - "2600:380:7680::/39": "20057", - "2604:9e00::/32": "27257", - "2a02:26f7:c646::/47": "20940", - "2a02:26f7:d888::/48": "36183", - "2a07:c9c0::/29": "59659", - "2a0e:97c0:2e6::/47": "211544", - "2001:559:c08f::/48": "33656", - "2401:4900:40d1::/44": "45609", - "2600:140b:3001::/38": "20940", - "2804:fe0:2100::/48": "263049", - "2a03:9e44::/30": "31399", - "2a05:a780::/29": "49353", - "2401:300::/32": "4658", - "2405:203:986::/47": "55836", - "240e:106:8000::/34": "4134", - "2a01:9760::/46": "62087", - "2a06:5040:100::/46": "42960", - "2a0f:3103::/32": "29182", - "2001:559:83b2::/48": "33659", - "2804:1edc::/32": "264450", - "2a01:ce8c::/36": "51964", - "2001:418:1456:1a00::/42": "2914", - "2a0c:c380::/32": "207242", - "2405:7000:400::/40": "59108", - "240a:a1e5::/32": "143135", - "2620:149:100d::/46": "714", - "2804:b5c::/32": "52768", - "2c0f:ed90:100::/40": "328482", - "2409:8c20:9c72::/47": "56046", - "240e:3ba:1800::/34": "4134", - "240e:473:7c00::/41": "140485", - "2804:4bb0::/32": "267324", - "2a00:1ff0::/32": "43717", - "2a02:ff0:12f1::/44": "12735", - "2a03:2887:ff1b::/45": "63293", - "240a:a485::/32": "143807", - "2607:fae0:f00c::/47": "203993", - "2803:5c80:6507::/48": "64114", - "2804:388::/30": "22085", - "2607:fdb8:4::/48": "7181", - "2804:3eac::/32": "266614", - "2a00:d8c0::/48": "31138", - "2a03:2320::/32": "201648", - "2a03:7900::/37": "197731", - "2c0f:f918:105::/46": "37002", - "240e:473:a120::/41": "140486", - "2a02:79e0::/32": "60032", - "2a05:c1c0::/29": "31662", - "2a02:26f7:d6::/48": "36183", - "2001:678:528::/48": "25126", - "2402:3a80:1500::/38": "38266", - "240e:c:7000::/37": "136197", - "2604:5400:c000::/35": "11776", - "2804:238::/44": "23106", - "2804:7ed0::/32": "271649", - "2a02:fe0::/32": "41164", - "2404:2480::/33": "135391", - "2001:4878:2228::/48": "12222", - "2409:8020:31::/41": "56046", - "2602:ffc5:34::/48": "25926", - "2a0d:2583::/32": "142438", - "2001:559:8125::/48": "33489", - "2001:878::/30": "1835", - "240e:67b:1800::/32": "4134", - "2804:73c4::/32": "270936", - "2a02:d0c2:2::/48": "212414", - "2001:559:592::/48": "33491", - "2001:4210:980d::/43": "25818", - "2409:802f:2907::/44": "9808", - "2607:ff00:700::/40": "19181", - "2804:14d:4ca7::/43": "28573", - "2804:1684:180::/32": "53169", - "2804:4164:a000::/33": "267430", - "2001:67c:708::/48": "50629", - "240e:473:2520::/41": "140486", - "2600:1402:d801::/34": "20940", - "2804:14c:4a6::/41": "28573", - "2602:fd3f:f00::/48": "6939", - "2605:d800::/32": "11067", - "2804:694:3900::/33": "262596", - "2a00:9fe0::/29": "15600", - "2a0e:3840:242::/48": "40676", - "2a0e:b107:21::/48": "137490", - "2405:da80::/32": "24225", - "240a:a8ce::/32": "144904", - "2604:3cc0::/35": "396298", - "2620:4d:4000::/48": "62597", - "2a0e:b107:700::/48": "140098", - "2806:2f0:1144::/42": "22884", - "2001:388:5070::/48": "7573", - "2001:4b20:100:58a::/59": "34288", - "2409:891a::/29": "132525", - "2409:8c20:5022::/45": "56046", - "240a:a35e::/32": "143512", - "240a:a367::/32": "143521", - "2600:1004:d040::/40": "22394", - "2804:6848::/32": "269682", - "2a02:26f7:e749::/42": "20940", - "2a02:40c0:1000::/48": "50673", - "2a0c:5980::/29": "209372", - "2804:6de0::/32": "270561", - "2001:df0:2d00::/48": "133695", - "2405:1c0:6751::/46": "135062", - "2a02:6f40::/32": "199235", - "2a01:6480:b::/45": "29049", - "2a09:7080::/29": "134743", - "2404:138:130::/46": "45131", - "240a:a262::/32": "143260", - "2600:140b:5801::/38": "20940", - "2a09:f880::/32": "52052", - "2001:b032:ae00::/33": "3462", - "2620:171:25::/48": "42", - "2a10:340::/30": "207995", - "2001:559:838e::/48": "13367", - "2001:18b8:a::/42": "29789", - "2a02:20d8::/29": "31638", - "2001:db0::/35": "17766", - "2001:4530::/46": "9433", - "2401:7500:ff5::/48": "133296", - "2607:2080::/32": "11678", - "2a0b:f240::/29": "202509", - "2a0c:3fc0::/29": "206268", - "2a10:7180::/29": "25459", - "2600:5c00:3aae::/41": "20001", - "2602:feb4:b0::/44": "25961", - "2605:b9c0:4000::/34": "398804", - "2a0e:eec7::/32": "51837", - "2001:44b8:2051::/48": "4739", - "240e:378:aa00::/39": "140330", - "2600:1407:3c01::/33": "20940", - "2600:8807:6ca2::/39": "22773", - "2800:160:1a88::/47": "14259", - "2a00:a080::/32": "15557", - "2a03:2880:f061::/44": "32934", - "2001:67c:2f4c::/48": "59729", - "2600:804:440::/48": "396941", - "2620:116:c000::/46": "62708", - "2803:5010::/32": "271803", - "2a05:7dc2:1000::/36": "51324", - "2a10:3e80::/30": "46573", - "2001:468:364::/48": "10490", - "2001:4878:8153::/48": "12222", - "2620:0:930::/48": "1734", - "2803:800:5::/32": "25607", - "2a0e:e7c0::/29": "204348", - "2402:8100:21e0::/38": "45271", - "240a:a1e7::/32": "143137", - "2605:15c0::/32": "19528", - "2607:5380::/32": "53610", - "2a02:c40:3::/32": "13000", - "2a02:e300::/29": "60330", - "240a:a50d::/32": "143943", - "2605:a404:3c6::/42": "33363", - "2a01:5480::/32": "34497", - "2408:8956:2e00::/40": "17622", - "2804:418c::/32": "267440", - "2a02:26f7:e080::/48": "36183", - "2a0f:b300:b300::/48": "208200", - "2001:67c:58::/48": "24629", - "2001:fd8:3180::/42": "132199", - "2402:800:5263::/43": "7552", - "2800:160:1b6a::/43": "14259", - "2a03:5760:3::/32": "201900", - "2a0a:56c4:8201::/48": "42649", - "2a0a:86c0:101::/29": "206163", - "2a07:8f00::/29": "208828", - "2001:559:c347::/48": "33651", - "2001:678:568::/48": "58116", - "2401:4900:45b0::/41": "45609", - "2600:370f:5221::/45": "32261", - "2620:123:7000::/44": "46757", - "2804:6010::/32": "269143", - "2a05:7c00::/29": "201236", - "2a0c:b641:180::/44": "211367", - "2409:8904:cf40::/42": "24547", - "240a:a741::/32": "144507", - "2804:6a7c::/32": "270339", - "2a09:1d40::/48": "209132", - "2001:559:8227::/44": "7922", - "2001:67c:1898::/48": "31337", - "2001:fb0:109f:12::/64": "36040", - "2600:1419:e800::/48": "61580", - "2607:fc28:7000::/32": "22911", - "2804:f6c:2051::/32": "263585", - "2a04:200::/29": "48101", - "2001:67c:2068::/48": "34261", - "2401:ff80:148d::/46": "133954", - "240a:a70c::/32": "144454", - "2001:67c:2198::/48": "8605", - "2402:f600::/32": "9627", - "2600:100d:b040::/42": "6167", - "2610:e0:a050::/36": "2572", - "240e:44d:4680::/41": "4134", - "2600:6c38:165::/44": "20115", - "2a09:f780:1::/48": "41864", - "2402:800:5771::/44": "7552", - "2409:8061:1900::/34": "9808", - "2604:7780::/32": "54489", - "2607:9480:f000::/44": "14338", - "2803:e40::/40": "27797", - "2a00:8200::/32": "3292", - "2a06:5580::/39": "21145", - "2a02:2e02:9570::/40": "12479", - "2a02:f9c0::/29": "61231", - "2a03:6880::/32": "39835", - "2001:559:1f4::/48": "33659", - "2001:559:828b::/48": "33657", - "2001:57a:508::/38": "22773", - "2408:840d:8400::/42": "17621", - "240a:abb8::/32": "145650", - "2600:1000:d020::/34": "22394", - "2605:2c40:100::/48": "7979", - "2001:13d1:c04::/34": "7303", - "2a02:26f7:c806::/47": "20940", - "2a02:26f7:f948::/48": "36183", - "2a01:488:bb0d::/48": "398107", - "2401:d800:fb60::/40": "7552", - "240a:ae64::/32": "146334", - "240e:438:4420::/43": "140647", - "2605:6400:30::/48": "53667", - "2606:d680::/32": "4508", - "2804:200::/32": "28187", - "2804:7014:8100::/33": "270704", - "2001:559:554::/48": "20214", - "2001:67c:220::/48": "43911", - "2401:d800:d250::/42": "7552", - "240a:ae62::/32": "146332", - "2001:559:8404::/48": "20214", - "2001:559:85c2::/48": "33491", - "240a:aefd::/32": "146487", - "2a0f:c180::/29": "12996", - "2403:8600:c09::/45": "45820", - "2804:14d:5083::/41": "28573", - "2804:2c00::/32": "265187", - "2a10:1240::/29": "15589", - "2001:67c:267c::/48": "60713", - "2402:800:3b55::/42": "7552", - "240a:a879::/32": "144819", - "2804:14d:6892::/42": "28573", - "2a02:26f7:e681::/46": "20940", - "2a02:26f7:f045::/46": "20940", - "2804:20a0::/32": "264502", - "2804:76f8::/32": "271146", - "2001:559:c3a6::/48": "7922", - "2402:ef34::/32": "7633", - "2606:c700::/33": "53850", - "2620:1a:4000::/48": "2572", - "2804:14c:dc00::/40": "28573", - "2804:2eec::/32": "264861", - "2804:57e4::/32": "268093", - "2a02:27b8:1::/48": "49278", - "2409:8051:802::/40": "56047", - "2a02:26f7:ba45::/46": "20940", - "2c0f:eeb8::/32": "328303", - "2605:7040::/48": "46176", - "2606:6000:4000::/36": "10838", - "2620:1e2::/36": "36502", - "2a02:7720::/32": "2119", - "2001:559:84c4::/47": "33659", - "2620:137:a001::/48": "394707", - "2a07:9f00::/29": "56444", - "2001:4878:a031::/48": "12222", - "2408:8456:5040::/39": "17816", - "2604:2d40::/32": "53764", - "2001:559:186::/47": "33651", - "2001:1818::/32": "7850", - "2603:d090::/25": "30600", - "2604:d600:c46::/44": "32098", - "2605:a900:200d::/42": "46887", - "2803:53e0:1003::/45": "52468", - "2001:559:81fb::/48": "7015", - "2407:5200:301::/37": "55915", - "2804:77c::/37": "53222", - "2a02:ed04:4710::/30": "50304", - "2001:4288:302::/32": "6713", - "2804:3f8::/32": "262589", - "2a00:1430::/32": "24958", - "2a00:5646::/32": "13030", - "2408:8459:e410::/42": "17623", - "2a02:26f7:b991::/46": "20940", - "2a02:26f7:f7c9::/42": "20940", - "2604:4d40:7b1b::/48": "399196", - "2001:559:81c3::/48": "33491", - "2402:ef01::/46": "9430", - "2409:8a5c:4e00::/26": "9808", - "240a:ade2::/32": "146204", - "240e:44d:7a00::/41": "140345", - "240e:966:ea00::/39": "133776", - "2600:1406:3c::/47": "20940", - "2a01:390::/32": "29405", - "2001:579:f034::/44": "22773", - "2402:8100:20df::/42": "55644", - "2405:9800:9d00::/34": "45430", - "2409:874c::/32": "9808", - "2a02:26f7:bc40::/48": "36183", - "2001:df6:ed00::/48": "134078", - "2409:8010:1900::/34": "9808", - "2602:fc64:ea1::/48": "42167", - "2606:2800:4254::/46": "15133", - "2a07:f600:4045::/48": "9098", - "2a09:4c2:4a::/48": "212904", - "2402:800:9a55::/42": "7552", - "2610:a1:1001::/48": "397228", - "2a0b:e300::/32": "44808", - "2001:67c:2d44::/48": "201170", - "2001:4998:ef62::/48": "14778", - "240a:af6c::/32": "146598", - "2602:ff05::/36": "55009", - "2620:149:14c::/46": "714", - "2001:67c:68::/48": "24971", - "2404:bf40:e801::/37": "139084", - "2804:2514:1000::/32": "264259", - "2a05:3e80::/29": "201211", - "2a05:a882:10::/48": "51964", - "2a09:bac0:102::/47": "13335", - "2a0e:6c40::/29": "60262", - "2402:da80:100::/48": "64022", - "2407:1580:1400::/36": "33438", - "2001:7c0:2320::/29": "553", - "2404:ea80:d21::/32": "135373", - "2a02:26f7:c8c1::/46": "20940", - "2a0f:7400::/30": "213275", - "2402:800:9b8d::/43": "7552", - "2404:cdc0::/32": "138842", - "2a00:1e28::/32": "12859", - "2a01:c50f:9f40::/34": "12479", - "2a06:e881:6700::/45": "208751", - "2a0f:9400:772f::/48": "53356", - "240a:a165::/32": "143007", - "2a02:26f7:db08::/48": "36183", - "2a02:f5c0::/32": "207388", - "2a10:bec0::/29": "13247", - "240a:ae8a::/32": "146372", - "2600:1419:6001::/38": "20940", - "2602:fed2:7118::/48": "53356", - "2804:5f24::/32": "269079", - "2a04:600::/29": "61161", - "2a0b:4340:95::/48": "205610", - "2001:253:117::/48": "142083", - "2001:df0:2e8::/48": "45896", - "2001:4878:c062::/47": "12222", - "2605:1140:1800::/37": "394142", - "2804:14c:578c::/41": "28573", - "2a01:8840:31::/48": "207266", - "2a06:e881:5600::/48": "203478", - "2001:fd8:a0::/48": "132199", - "2405:6600:601::/39": "45845", - "2409:8975::/28": "9808", - "240a:a815::/32": "144719", - "2806:230:201e::/48": "265594", - "2001:559:1b4::/48": "33652", - "2407:8c00:20::/48": "55441", - "240e:470::/32": "4134", - "2600:1009:b100::/42": "6167", - "2800:160:1d02::/44": "14259", - "2001:559:c071::/48": "21508", - "240e:e:b800::/37": "136195", - "240e:473:7650::/39": "4134", - "2a02:8080::/29": "6830", - "2a0a:6f40:2::/47": "202806", - "2001:67c:1bfc::/48": "3264", - "2001:44b8:29::/48": "4739", - "240a:a4fa::/32": "143924", - "2804:4a0::/33": "52989", - "2a00:11c0:dd::/48": "42473", - "2a09:bac0:218::/48": "13335", - "2401:d800:9fd0::/42": "7552", - "240a:a3da::/32": "143636", - "240e:946:3007::/32": "58540", - "2620:160:e320::/44": "4196", - "2a02:cb80:2a10::/48": "43766", - "2a03:d000:1110::/46": "31163", - "2a06:8d40::/29": "21315", - "2001:df4:9300::/48": "134305", - "2806:2f0:2083::/48": "17072", - "2a02:26f7:f341::/46": "20940", - "2a0f:2900::/29": "208245", - "2603:c002:1410::/39": "31898", - "2607:7b80::/32": "32798", - "2607:cd80:5000::/34": "6528", - "2001:678:1c::/48": "35052", - "2001:1248:5731::/41": "11172", - "2600:1417:1800:100::/54": "16625", - "2803:5ce0:600::/40": "54235", - "2001:559:c363::/48": "33659", - "2408:8456:ec00::/42": "17622", - "2602:fda1::/38": "397031", - "2800:68:23::/45": "61468", - "2600:1417:6a::/47": "9498", - "2400:3dc0::/42": "134371", - "2607:f548::/32": "22878", - "2a02:7e80::/32": "20655", - "2a03:8f80::/31": "34714", - "2402:1c00:c07::/33": "23838", - "2405:c700::/32": "17939", - "2600:1409:1801::/34": "20940", - "2804:18:6810::/44": "10429", - "2a0e:b107:ef0::/44": "212129", - "2001:df3:ad00::/48": "137275", - "240a:a9cc::/32": "145158", - "2620:1d0:5c::/48": "397228", - "2a03:220:f000::/48": "209406", - "2a09:bd00:ffcc::/48": "62135", - "2001:559:86ea::/48": "33651", - "2001:67c:194::/48": "39138", - "2603:c022:4000::/35": "31898", - "2804:1638:facf::/37": "263276", - "2a00:de00::/32": "56566", - "2a02:26f7:cf8c::/48": "36183", - "2001:44b8:404c::/48": "7545", - "2620:149:a18::/48": "6185", - "2801:114:8::/45": "23059", - "2409:8914:8800::/35": "56044", - "2804:38d4::/32": "266504", - "2804:3da4::/35": "266544", - "2a02:23d0::/32": "5435", - "2a05:fbe0::/31": "200474", - "2402:800:3263::/43": "7552", - "2406:3000:11::/51": "4657", - "240a:a3f5::/32": "143663", - "2804:4044:1160::/32": "265948", - "2404:3d00:4117::/48": "3573", - "2602:fff9:f00::/40": "54839", - "2a03:db80:4415::/44": "680", - "2a04:3e00::/47": "56910", - "2404:cc00:999a::/33": "24441", - "2620:20::/48": "33751", - "2804:2624::/36": "264324", - "2a01:65e0::/32": "62244", - "2408:84f3:9c40::/38": "17816", - "2602:fed2:7128::/47": "53356", - "2a0e:400::/25": "210278", - "2401:d800:d3a0::/41": "7552", - "240a:a718::/32": "144466", - "2a00:7a20::/32": "39194", - "2a02:26f7:eb84::/48": "36183", - "2a07:6040::/29": "37468", - "2001:67c:2d50::/48": "201173", - "2400:9380:9080::/47": "4809", - "2620:93:4000::/48": "36359", - "2a0b:b880::/29": "206610", - "2001:559:809c::/48": "7922", - "2001:df2:6000::/48": "58392", - "2001:df7:5600:9000::/49": "18087", - "2800:1d0::/32": "14187", - "2804:88c::/32": "52872", - "2804:1bcc::/32": "61751", - "2804:2880::/32": "263965", - "2a02:970:1385::/37": "44002", - "2409:8731:1000::/29": "9808", - "240e:980:8400::/40": "63835", - "2607:fdf0:5e58::/47": "8008", - "2a02:d540::/29": "199659", - "2409:8924:3500::/38": "56046", - "2607:f8f0:680::/48": "271", - "2801:80:1e48::/48": "14026", - "2804:7948::/32": "271296", - "2001:559:3f1::/48": "33657", - "2001:559:8216::/48": "33652", - "2402:800:3dc5::/43": "7552", - "240a:ab4f::/32": "145545", - "2800:bf0:8300::/47": "52257", - "2804:2ac::/32": "28300", - "2804:16cc::/32": "61917", - "2a02:26f7:c150::/48": "36183", - "2a03:8800:2::/32": "49687", - "2001:559:1d0::/48": "7015", - "2001:67c:1264::/48": "51883", - "2405:3140:3a::/48": "59068", - "2603:c010:4000::/36": "31898", - "2604:880:4f::/43": "29802", - "2a06:4a00::/29": "203020", - "2402:800:9afe::/39": "7552", - "240a:aab7::/32": "145393", - "2806:310:1::/45": "16960", - "240a:ac13::/32": "145741", - "2a02:2b08::/32": "5552", - "2a04:2b00:13ff::/48": "201303", - "2a0b:14c0:4::/48": "61273", - "2001:559:780::/48": "33652", - "2408:8456:5c40::/39": "17816", - "2606:1380::/32": "22079", - "2607:8200:4000::/36": "33561", - "2620:78:8000::/48": "53280", - "2a02:568:fe02::/48": "31529", - "2a02:26f7:ec8c::/48": "36183", - "2401:d800:7b70::/40": "7552", - "2408:8459:c010::/42": "17623", - "2a01:8840:1bd::/48": "13810", - "2001:559:c008::/46": "33651", - "2606:4f00::/48": "19324", - "2001:44c8:4690::/41": "45430", - "2403:3a00::/32": "9371", - "2620:119:5008::/48": "13443", - "2a0e:97c5:4d8::/46": "20473", - "240e:982:7300::/36": "4134", - "2804:1898::/32": "61942", - "2a06:b5c0::/30": "46723", - "2001:1248:9900::/42": "11172", - "2400:cb00:38::/47": "13335", - "2405:84c0:faaa::/48": "138990", - "2408:8456:ae10::/42": "134543", - "2a0b:bdc0::/29": "42000", - "2001:559:c39d::/48": "33657", - "2001:67c:2dd0::/48": "200881", - "2001:43f8:1440::/48": "328578", - "2408:8256:3d89::/48": "17816", - "2a0f:5707:b0c0::/46": "212895", - "2404:d500:2::/47": "132370", - "2408:8459:3020::/44": "17816", - "2600:1015:f010::/39": "6167", - "2602:fd0a::/36": "63027", - "2001:559:381::/48": "33652", - "240a:a145::/32": "142975", - "2605:3f80::/32": "393238", - "2804:3688::/32": "266354", - "2804:6af0::/32": "270367", - "2a03:2c40::/32": "199653", - "2c0f:ea08::/32": "37159", - "2408:84f3:b210::/42": "134543", - "2408:886e::/31": "4837", - "2408:8957:b800::/40": "17622", - "2600:6c38:b57::/44": "20115", - "2605:1e80::/32": "14380", - "2a02:26f7:d244::/48": "36183", - "2a0c:5540::/32": "204020", - "2001:df3:ce00::/48": "132148", - "2001:4830:c210::/48": "64249", - "2408:8000:a018::/48": "140716", - "2602:fd5b::/36": "398280", - "2604:d600:1573::/44": "32098", - "2620:f:a::/48": "3629", - "2a06:e8c0::/29": "8285", - "2001:559:5f2::/48": "7922", - "2001:df1:2900::/48": "136301", - "2001:df6:1580::/48": "141745", - "2a02:26f7:d7c0::/48": "36183", - "2a0d:d6c7:4::/32": "200350", - "2a0e:46c4:2c30::/46": "142597", - "2804:9fc::/32": "263008", - "2001:468:2641::/44": "11537", - "2409:806c:3100::/36": "9808", - "2409:8e14::/34": "56044", - "240e:6bb:1000::/36": "4134", - "2605:2800:100::/47": "3354", - "2607:fdf0::/33": "8008", - "2803:2a00:2000::/35": "27895", - "2a02:26f7:23::/48": "20940", - "2a05:5840::/32": "28761", - "2a0a:f80::/29": "51546", - "2401:d800:9e20::/39": "7552", - "2409:8914:b600::/39": "56044", - "2a00:5b00::/29": "33986", - "2804:e78::/32": "262957", - "2804:3b34:3b35::/33": "266135", - "2a0b:81c0::/29": "206893", - "2a0b:d540::/32": "205439", - "2a0f:85c0::/48": "207841", - "2001:559:a0::/48": "7016", - "2401:aa40::/32": "62900", - "240a:60:f01e::/48": "9605", - "2600:1fa0:40e0::/44": "16509", - "2801:1:8004::/48": "18916", - "2804:2304::/32": "264137", - "2a01:c50e:5a00::/37": "12479", - "2409:8914:ac00::/38": "56044", - "240a:adde::/32": "146200", - "2604:d600:1c04::/44": "32098", - "2620:20:a000::/48": "16539", - "2a0e:abc0::/29": "197706", - "2403:cb00:cb01::/46": "58621", - "2800:670::/32": "52280", - "2803:ab00:90::/48": "23520", - "2804:2228::/32": "264595", - "2001:44b8:4051::/48": "4739", - "240a:aeb0::/32": "146410", - "2605:4300:f001::/48": "22616", - "2801:80:1c70::/48": "266122", - "2804:2728::/46": "263880", - "2001:6d0:ffd8::/48": "8985", - "2001:df4:d080::/47": "133145", - "2001:19f0::/38": "20473", - "2409:8435::/23": "9808", - "2600:1406:5000::/48": "35994", - "2606:5b80::/34": "22612", - "2a0b:2f80::/29": "62412", - "2001:579:2483::/38": "22773", - "2001:dc8:8000::/48": "24089", - "2404:0:4000::/36": "9311", - "2405:f080:2000::/37": "136907", - "2a09:e540::/29": "209184", - "2001:13c7:7001::/48": "28000", - "2402:800:3c71::/40": "7552", - "2405:b40:21::/43": "55674", - "2607:fd00:4::/48": "32922", - "2001:559:c208::/48": "33491", - "2001:bf7:540::/48": "3624", - "2408:8456:c40::/39": "17816", - "2603:f100::/29": "262287", - "2607:fcd0:fa80:3400::/55": "8100", - "2801:122::/40": "3816", - "2a00:8a04:8000::/44": "34414", - "240a:ad77::/32": "146097", - "2804:54c8::/32": "61595", - "2804:7960::/32": "271302", - "240e:44d:2f80::/41": "4134", - "2602:fe54:5001::/32": "16584", - "2607:f250:d008::/48": "7046", - "2620:14:2000::/48": "395899", - "2a03:f85:8::/48": "60729", - "2001:ac0:30fe::/32": "8903", - "2001:ee0:d900::/38": "45899", - "2405:8a00::/40": "55824", - "2404:cc00::/45": "24441", - "240e:d6:1000::/36": "140330", - "2600:1017:9110::/38": "6167", - "2603:f300::/29": "262287", - "2620:2b:a000::/48": "394118", - "2a02:2698:2c00::/38": "41727", - "2001:559:84e9::/46": "7016", - "2001:44b8:30b1::/48": "4739", - "2604:fc00::/32": "10508", - "2800:440:8104::/48": "27738", - "2a00:f280::/32": "206288", - "2a02:26f7:f444::/48": "36183", - "2804:910::/32": "53075", - "2804:1cd4:1d00::/32": "61678", - "2001:df3:b980::/48": "17538", - "2407:8b00:2284::/35": "64073", - "2600:6000:fd0f::/42": "12271", - "2607:700:1500::/38": "22343", - "2804:3554::/32": "262273", - "2a0e:97c0:364::/48": "211484", - "2001:4b20:100:599::/54": "34288", - "2406:600:2212::/32": "4694", - "240a:a499::/32": "143827", - "2607:6000:700::/40": "12189", - "2800:600:401::/32": "52323", - "2804:12b0::/32": "263492", - "2804:3d4c::/32": "266266", - "2c0f:e848::/32": "328633", - "2001:268:837::/44": "2516", - "2600:1417:4800::/48": "8781", - "2620:89:8000::/48": "22990", - "2804:37dc::/32": "266440", - "2804:40ac::/32": "265974", - "2804:5e70:9000::/34": "269033", - "2001:678:ad0::/48": "205597", - "240a:a90c::/32": "144966", - "2804:2778:5000::/36": "263903", - "2a00:70c0::/48": "31477", - "2a02:26f7:5c::/48": "36183", - "2a02:26f7:c4c0::/48": "36183", - "2c0f:fbc0::/32": "37670", - "2001:678:890::/48": "33958", - "240a:adb9::/32": "146163", - "2804:1524::/32": "263373", - "2804:1c94::/32": "61663", - "2a02:2e02:1f60::/40": "12479", - "2a03:2880:f140::/46": "32934", - "2001:48b0::/32": "2497", - "2402:4280::/32": "135895", - "2405:800:4::/44": "7545", - "240a:a147::/32": "142977", - "240a:a8be::/32": "144888", - "2804:40dc::/32": "265986", - "2a00:b340:30::/48": "196745", - "2402:5840::/45": "137403", - "2804:1618::/32": "263267", - "2804:1bd8:4600::/36": "28224", - "2804:5f54::/32": "269092", - "2a02:26f7:cdc8::/48": "36183", - "2405:dc0:8008:4::/46": "22604", - "2620:115:2000::/46": "12259", - "2a02:6c8:8000::/33": "202425", - "2001:559:80f0::/48": "7922", - "2001:678:e::/48": "31529", - "2001:948:40::/43": "39590", - "2804:42cc::/32": "267528", - "2a01:b220::/32": "202164", - "2a09:7:2002::/48": "57969", - "2a02:848::/32": "33868", - "2a02:2010:2110::/45": "20978", - "2402:6940:307::/37": "7645", - "2402:ef23::/32": "7633", - "2405:58c0:5c00::/40": "133101", - "240a:a788::/32": "144578", - "2600:8807:9e00::/34": "22773", - "2a06:1301:4005::/48": "59731", - "2401:d800:2a70::/40": "7552", - "2600:370f:70a9::/41": "32261", - "2a00:79e0:500::/47": "395973", - "2a03:3cc0::/29": "50596", - "240a:a918::/32": "144978", - "2604:d600:1589::/43": "32098", - "2a04:4e40:6600::/48": "54113", - "2a0d:9a40::/29": "47832", - "2001:67c:2988::/47": "58151", - "2001:559:84c2::/48": "33659", - "2001:67c:27d8::/48": "198494", - "2610:20:8e00::/44": "3477", - "2803:3240:1::/48": "36351", - "2a01:8840:fb::/48": "207266", - "2001:559:3df::/42": "33652", - "2405:4740:61::/48": "4857", - "2620:171:db::/48": "715", - "2803:2a80:1255::/48": "262928", - "2804:1554::/32": "263384", - "2804:6240::/32": "269286", - "2a0c:7e46:8a7::/48": "20473", - "2001:500:60::/48": "30132", - "2001:ee0:b040::/40": "45899", - "2404:5e40::/46": "137703", - "2405:8d40:aa0::/48": "139831", - "2001:480:331::/48": "2621", - "2600:370f:7408::/42": "32261", - "2604:af80:2048::/37": "18859", - "2804:55d8::/32": "267960", - "2a01:8740:1::/48": "203380", - "2a0e:d604::/48": "62410", - "2804:1d4c::/32": "264359", - "2804:3590::/32": "266294", - "2804:6684::/32": "269565", - "2001:559:2d4::/46": "7015", - "2001:1490:2::/40": "8895", - "2607:ff10:fdc2::/38": "10439", - "2a04:e100::/31": "31034", - "2001:67c:2ff0::/48": "50180", - "2001:df6:2980::/48": "141777", - "240a:ade8::/32": "146210", - "240a:af13::/32": "146509", - "2001:1388:8a40::/45": "264684", - "2800:484:3000::/40": "14080", - "2806:264:4300::/37": "13999", - "2a07:3500:19f8::/48": "38915", - "2001:253:130::/48": "142096", - "2804:117c:800f::/33": "53061", - "2a01:310::/32": "8312", - "2a04:2b00:14bb::/48": "204055", - "2804:4058::/32": "265953", - "2001:418:1401:5::/62": "2914", - "2001:559:8386::/48": "33491", - "2408:8957:7000::/40": "17622", - "2804:f8::/32": "53147", - "2804:2f90::/32": "264899", - "2804:5520:2000::/32": "268691", - "2a05:1e80::/29": "202796", - "2001:c20:48a1::/48": "3758", - "2600:1017:b8a0::/44": "22394", - "2605:9400::/32": "12042", - "2a01:4da0::/48": "34895", - "2a02:2455:8000::/30": "20880", - "2001:dc7:5de2::/43": "24151", - "2406:840:20::/48": "139317", - "240a:ac2d::/32": "145767", - "2804:10c4::/32": "263648", - "2a00:1580::/46": "39010", - "2a03:1440::/32": "9063", - "2001:678:3c8::/48": "34516", - "2402:800:9955::/42": "7552", - "2604:d800::/35": "20355", - "2605:a880::/48": "46261", - "2620:151::/36": "16793", - "2804:6530::/32": "269474", - "2a00:801:4b::/48": "41819", - "2a06:b140::/29": "58264", - "2001:418:143a:100::/56": "20940", - "2001:1980:200::/37": "29838", - "2406:9c80::/48": "45544", - "2408:8456:c900::/42": "17622", - "2804:3798::/44": "266423", - "2a02:28f8::/48": "31323", - "2a02:6980::/32": "12935", - "2001:550:6c05::/38": "174", - "2001:67c:2b24::/48": "3246", - "2001:df0:220::/48": "55684", - "2401:d800:5a90::/42": "7552", - "2a00:60c0::/32": "34461", - "2800:440:8006::/48": "27738", - "2a02:26f0:8c01::/39": "20940", - "2a10:27c4::/30": "49778", - "2001:550:2503::/38": "174", - "2402:15c0:6::/48": "10222", - "2402:ef03:d::/40": "7633", - "2800:370:3::/48": "28006", - "2a0e:46c4:2d0a::/45": "208753", - "2001:4878:c254::/48": "34164", - "2405:f540::/48": "135905", - "2409:8000:900::/37": "9808", - "2607:f3a0:a00b::/33": "23342", - "2800:270::/32": "26610", - "2804:2614::/32": "52659", - "2001:559:8607::/44": "7922", - "240a:aad7::/32": "145425", - "2804:3ae8::/32": "266117", - "2a02:cac0::/29": "29442", - "2a0b:b480::/29": "43288", - "2a0b:d380::/29": "206339", - "2001:559:878d::/46": "33652", - "2400:cb00:a170::/45": "13335", - "240e:945::/36": "136195", - "2803:21e0::/32": "262186", - "2804:145c:c040::/38": "263327", - "2a02:530:1a::/42": "21191", - "2a07:c3c0::/29": "50033", - "2602:fcff:14::/47": "57164", - "2607:fc70::/32": "15247", - "2001:df0:a6::/48": "55536", - "240e:108:8a::/48": "134238", - "2a06:3000:1000::/36": "209220", - "2001:559:51f::/48": "33652", - "2001:1248:8445::/44": "11172", - "240e:982:5100::/36": "4134", - "2604:b180:50::/44": "23279", - "2607:fcd0:fa80:7001::/54": "8100", - "2620:115:7000::/47": "55091", - "2a04:4e40:6a00::/48": "54113", - "2405:54c0::/48": "56150", - "240a:ad7e::/32": "146104", - "240e:980:4b00::/40": "133774", - "2604:b400::/32": "11979", - "2607:ff28:5003::/36": "62904", - "2404:f900:31::/41": "58482", - "2620:10a:80ef::/48": "55195", - "2606:fd00::/32": "11013", - "2001:559:c211::/48": "7922", - "2a01:5b0::/47": "8391", - "2a02:26f7:d880::/48": "36183", - "2a0f:5707:ab80::/44": "56382", - "2001:df2:7580::/48": "139903", - "2400:ac40:a60::/40": "136255", - "2402:800:319b::/41": "7552", - "2405:1c0:6a61::/46": "135062", - "240a:a5eb::/32": "144165", - "2600:5c01:34b9::/32": "10796", - "2a02:6b8:6::/48": "13238", - "2a02:1368::/32": "51873", - "2a02:2950::/32": "15566", - "2a04:f580:9020::/48": "4809", - "2a09:1840::/32": "209568", - "2804:6594::/32": "269501", - "2a03:9000::/32": "49371", - "2a0e:fd45:2b17::/44": "52112", - "2a0b:5e00::/29": "50309", - "2409:8020:d1::/35": "56046", - "2803:6900:1503::/48": "52423", - "2804:1758::/32": "263139", - "2001:559:85cc::/46": "7922", - "2001:67c:2efc::/48": "31152", - "2001:8d8:100::/32": "8560", - "240a:ad1d::/32": "146007", - "240e:44d:6180::/41": "4134", - "2604:3d00:d500::/36": "6327", - "2604:9100:1000::/48": "25864", - "2804:2ae0::/32": "53057", - "2804:7d90::/47": "271569", - "2c0f:fac8::/32": "37395", - "2001:559:3a6::/48": "7015", - "2408:840d:3400::/42": "17621", - "2801:12:7000::/48": "266737", - "2a10:57c0::/29": "8767", - "2c0f:f330::/32": "327950", - "2a09:5302::/32": "205090", - "2400:adcc:800::/39": "9541", - "2401:d800:5430::/40": "7552", - "240e:44d:5c00::/41": "140345", - "2604:b900:7000::/32": "11042", - "2607:fb90:b300::/37": "21928", - "2803:6900:520::/48": "52423", - "2a04:4e40:b410::/41": "54113", - "2001:559:38d::/48": "33651", - "2001:fd0:2100::/38": "10029", - "2405:9800:bc81::/38": "45430", - "2804:145c:ce10::/39": "263327", - "2804:3264::/32": "265075", - "2001:fb0:109f:8007::/64": "36040", - "2804:474::/32": "52980", - "2001:44b8:4069::/48": "4739", - "2403:be80::/32": "58405", - "2a02:26f7:d0c0::/48": "36183", - "2a0d:9e00::/29": "204988", - "2001:df6:580::/48": "131984", - "2001:4490:4e00::/46": "9829", - "240e:3b0:7600::/39": "140313", - "240e:3b3:3e00::/33": "140308", - "2804:4ad4::/32": "267266", - "2a02:1c8:700::/40": "41704", - "2a02:26f7:59::/48": "20940", - "2001:67c:208::/48": "30962", - "2402:800:931d::/41": "7552", - "240a:ad91::/32": "146123", - "2600:100a:a110::/36": "22394", - "2a03:b000:200::/40": "42695", - "2001:253:108::/48": "142074", - "2001:559:c310::/48": "22909", - "2606:2800:347::/44": "15133", - "2620:149:a07::/44": "714", - "2804:2050:7a8c::/32": "264485", - "2a07:b200::/31": "57722", - "2001:1b70:4293::/45": "8147", - "2400:4e80:79fd::/46": "131584", - "2600:1419:3c01::/33": "20940", - "2604:2000::/32": "12271", - "2804:1d4c:8040::/33": "264359", - "2001:559:78a::/48": "7922", - "2804:4c38::/32": "267357", - "2a00:139d::/30": "34878", - "2001:253:109::/48": "142075", - "2600:1411:6000::/64": "4788", - "2804:820::/32": "262352", - "2a01:6060::/32": "199990", - "2402:800:390f::/43": "7552", - "2405:e800::/32": "17675", - "2a0b:7340::/29": "202895", - "2001:559:8779::/46": "7922", - "2001:1b88:2::/32": "39477", - "2620:137:e000::/44": "53758", - "2804:3874:a::/48": "266478", - "2a02:888:dd::/48": "48695", - "2a04:c480::/29": "34241", - "2a0e:b107:1310::/44": "131668", - "240e:438:8e20::/43": "140647", - "2607:f7a0:1::/46": "46562", - "2804:df8::/32": "52532", - "2804:3b18::/32": "266129", - "2a02:2818:7::/48": "197481", - "2a0c:6ac0::/32": "213050", - "2a05:4540::/29": "35041", - "2800:160:146a::/43": "14259", - "240a:a9ed::/32": "145191", - "2408:840c:2700::/40": "17621", - "2001:67c:72c::/48": "61337", - "240e:438:a840::/38": "4134", - "2a0c:f587:fffe::/47": "200334", - "2001:1b40:3334::/32": "20860", - "2409:8053:100::/37": "9808", - "2a02:e040::/29": "43995", - "2a0f:4240::/29": "52000", - "2001:559:337::/48": "7015", - "2001:67c:1398::/48": "199355", - "2600:5800::/35": "11426", - "2603:c0e2:4000::/35": "54253", - "2605:3380:4107::/43": "12025", - "2a04:6d00::/29": "211892", - "2a0d:c80::/29": "21032", - "2a02:26f7:99::/48": "20940", - "2001:67c:25a0::/48": "41954", - "2001:df5:dd80::/48": "135192", - "2401:a480::/48": "1221", - "2401:d800:b710::/42": "7552", - "240a:a7ed::/32": "144679", - "2804:7a50::/32": "271364", - "2a00:4802:3f00::/33": "13124", - "2a02:6620:2::/48": "47478", - "2a03:2200::/32": "50998", - "2a05:d016::/36": "16509", - "2a0a:54c1:15::/42": "62240", - "2001:df3:809::/45": "22787", - "2402:800:981d::/41": "7552", - "240e:473:fc50::/38": "4134", - "2a00:1030::/32": "24956", - "2a02:26f7:fb49::/42": "20940", - "2a03:5a00:16::/48": "42574", - "2600:370f:5280::/47": "32261", - "2804:3708::/32": "266385", - "2a01:4f0::/33": "28717", - "2a02:fb0::/32": "5503", - "2a07:bbc0::/48": "207085", - "2a0d:3c43::/32": "51659", - "240e:438:2e20::/43": "140647", - "2a02:c804::/32": "24843", - "2a0b:7940::/29": "207541", - "2001:559:82cb::/48": "33659", - "2001:67c:24f4::/48": "196653", - "2606:6680:29::/48": "12129", - "2620:124:6000::/42": "40816", - "2a0e:b103:800::/40": "20473", - "2001:650::/32": "28748", - "2408:8456:cd00::/42": "17622", - "2409:8a3e::/25": "9808", - "2a03:1b20:1::/44": "39351", - "2a09:9ac0::/48": "209562", - "2c0f:f0a8::/32": "328145", - "2001:4878:2055::/48": "35994", - "2c0f:f500::/32": "327935", - "2620:120:8000::/44": "393990", - "2001:418:143a::/56": "2914", - "2001:67c:224::/48": "51164", - "2406:4e40:401::/39": "140966", - "2408:84f3:ba10::/42": "134543", - "240a:ac6c::/32": "145830", - "2603:c012:2000::/36": "31898", - "2605:bc80::/32": "3701", - "2620:16e:87::/48": "3147", - "2a01:378::/32": "39180", - "2a03:f80:61::/48": "9009", - "2001:67c:2794::/48": "57967", - "2405:203:988::/43": "55836", - "2804:5244::/32": "268506", - "2a02:26f7:e7c8::/48": "36183", - "2a0e:66c0::/29": "44486", - "2a02:26f0:5601::/39": "20940", - "2001:559:3c3::/48": "33651", - "2408:8956:9900::/40": "17816", - "2409:8c62:ff01::/40": "9808", - "240a:a2b0::/32": "143338", - "240e:3b2:9c00::/34": "140310", - "2602:fdc2:100::/44": "397720", - "2603:c001::/38": "31898", - "2a0c:4445::/48": "199438", - "2001:559:321::/48": "33652", - "2804:3b0::/33": "53062", - "2804:17ac::/32": "263164", - "2a00:e140::/32": "198161", - "2a02:330:8::/47": "209456", - "2c0f:f918:8::/39": "37002", - "2a06:e881:5901::/48": "209569", - "2a09:bac0:56::/48": "13335", - "2401:ff80:1011::/46": "133954", - "2402:800:9463::/43": "7552", - "2602:feda:190::/44": "142025", - "2804:108c::/32": "28146", - "2a00:86c0:208a::/45": "2906", - "2001:648:2000::/48": "3323", - "2402:800:b5c0::/42": "7552", - "2600:1000:a100::/43": "6167", - "2600:1408:c800::/48": "35994", - "2620:11d:6000::/42": "30548", - "2804:4b2c::/32": "267288", - "2806:230:203a::/48": "265594", - "2001:559:c3e2::/48": "7922", - "2803:6606:d500::/36": "28075", - "2804:7ae0::/32": "271397", - "2a02:26f7:efc8::/48": "36183", - "2001:253:122::/48": "142088", - "2400:cb00:100::/48": "13335", - "2404:4a40::/32": "138571", - "2a05:980::/29": "201702", - "2a0b:a080:1::/48": "202165", - "2001:559:8170::/48": "33659", - "2001:678:264::/48": "16509", - "2620:13d:2060::/46": "209", - "2804:59e4::/32": "268732", - "2804:80ac::/32": "271766", - "2a02:d48:bc::/32": "34913", - "2a0e:97c0:1c0::/44": "211350", - "2605:8100::/32": "7311", - "2804:29ec::/32": "264045", - "2a06:4280::/29": "60032", - "2a0f:103::/32": "1239", - "2401:b780:5001::/48": "45410", - "2409:8904:5db0::/38": "24547", - "2804:4380::/32": "267574", - "2a02:d107:f006::/47": "200088", - "2a03:83a0:1::/48": "201528", - "2a0a:d940::/48": "58322", - "2001:559:8423::/48": "7015", - "2001:1248:84bf::/41": "11172", - "2001:1620::/34": "13030", - "240a:a9d1::/32": "145163", - "2602:fd3f::/46": "6939", - "2604:8240::/32": "7979", - "2a0a:9741::/32": "61964", - "2001:559:c253::/48": "7725", - "2001:930::/32": "15924", - "2600:1406:4601::/39": "20940", - "2a04:4e40:c400::/47": "54113", - "2408:8206:19d0::/32": "4808", - "2804:38b8::/32": "266497", - "2a02:e186:3001::/31": "33517", - "2a03:c000::/29": "2116", - "2a0f:b9c1:100::/46": "207574", - "2602:fcff::/48": "40916", - "2800:b40::/47": "262220", - "2804:4f48::/32": "268317", - "2804:69b0::/42": "270285", - "2620:1:c000::/48": "22773", - "2804:4498:9000::/33": "267641", - "2001:468:f000::/48": "11164", - "2001:67c:2978::/48": "211671", - "2001:1a10:2::/40": "8781", - "240a:ab35::/32": "145519", - "2a03:e140:3a::/48": "16262", - "2a06:c3c0:3::/48": "395092", - "2a0b:4d07:4::/48": "44239", - "2001:418:1401:30::/57": "2914", - "2001:559:5d5::/48": "33659", - "2001:559:c302::/47": "7015", - "2001:559:c3ca::/48": "33489", - "2001:4878:8261::/48": "12222", - "2a04:4e40:6230::/41": "54113", - "2001:559:8211::/48": "33651", - "2001:df2:4080::/47": "55318", - "2600:100f:9110::/36": "22394", - "2600:3402:1100::/37": "4181", - "2604:2e8e:3000::/37": "30036", - "2800:484:f00::/35": "14080", - "2a02:26f7:b999::/46": "20940", - "2001:1938:1::/48": "11588", - "2400:b480::/32": "131589", - "2600:1409:7001::/36": "20940", - "2a0b:14c0:1::/48": "205184", - "2801:112::/40": "14080", - "2804:14d:b000::/40": "28573", - "2a09:4380::/32": "41114", - "240a:a816::/32": "144720", - "2804:520:2::/32": "262496", - "2804:3430::/32": "265441", - "2a0c:b641:76a::/48": "207292", - "2001:5b0:6900::/40": "6621", - "2401:d800:53f0::/37": "7552", - "2405:6d00::/39": "17887", - "240a:a188::/32": "143042", - "2600:1402:c801::/35": "20940", - "2602:ffc5:cc8::/48": "7489", - "2804:3f9c::/32": "265902", - "2001:378::/32": "9318", - "2001:678:303::/48": "207996", - "2408:8956:5900::/40": "17816", - "2804:187c:8003::/39": "262673", - "2403:a640::/39": "63776", - "240a:a309::/32": "143427", - "2600:1408:6401::/36": "20940", - "2001:559:8248::/48": "7015", - "2406:ee80::/32": "55699", - "2804:3a4::/32": "262900", - "2604:a440:ffff::/48": "22549", - "2607:f110:e170::/40": "21889", - "2001:c20:c848::/46": "3758", - "240a:a3a7::/32": "143585", - "2600:6000:f5d6::/36": "12271", - "2620:1d5:200::/37": "14773", - "2a04:7800::/29": "200697", - "2a0b:41c0::/29": "30781", - "2001:67c:2b7c::/48": "198657", - "2401:d800:9fa0::/41": "7552", - "2406:840:fd05::/48": "134993", - "2803:9800:9997::/38": "11664", - "2804:5064::/32": "268386", - "2804:7770::/32": "271178", - "2a02:26f7:f208::/48": "36183", - "2001:559:7a7::/48": "21508", - "2001:df1:c500::/48": "136311", - "2408:8459:ea50::/37": "17816", - "2804:3810:100::/38": "266453", - "2001:550:200:9::/44": "174", - "2401:d800:21a0::/38": "7552", - "2405:a300:1000::/48": "45432", - "240e:3b2::/35": "134773", - "240e:3be:4c00::/35": "136200", - "2804:397c:108::/32": "52592", - "2001:67c:1213::/48": "47445", - "2001:fd8:b0b0::/41": "4775", - "2803:dac0:201::/32": "265634", - "2a00:4200::/32": "41349", - "2a03:b000:b00::/37": "42695", - "2001:6f0:4006::/29": "1257", - "240a:a8e4::/32": "144926", - "240e:6b6:1000::/34": "4134", - "2606:2800:51f::/42": "15133", - "2804:3018:caff::/34": "263020", - "2a00:1a90:8000::/48": "33854", - "2001:559:13c::/48": "7922", - "2001:559:849f::/48": "33657", - "240a:a745::/32": "144511", - "2605:4d00::/32": "14613", - "2a00:1020:e::/32": "24739", - "2a0b:8e00::/47": "1921", - "2001:559:3f9::/48": "33652", - "2602:fd50:100::/40": "62513", - "2804:20b0:100::/32": "264508", - "2404:f4c0:f940::/48": "142551", - "2408:8256:376b::/48": "17816", - "2800:b70:12::/48": "64595", - "2804:4c70::/32": "267370", - "2a01:190:1501::/43": "1764", - "2a03:e140:3::/48": "48409", - "2a05:d580::/32": "199753", - "2001:df5:3d00::/48": "136312", - "2606:6100::/32": "33262", - "2400:cb00:a802::/45": "13335", - "2804:14d:5e00::/40": "28573", - "2804:488c::/32": "267128", - "2804:8090::/32": "271759", - "2a02:2348::/32": "3301", - "2a0a:9880::/29": "44974", - "2401:fc00::/32": "55803", - "2409:8914:6c00::/39": "56044", - "240a:a64e::/32": "144264", - "240e:438:6420::/43": "140647", - "2804:469c::/32": "267000", - "2a02:17d8::/32": "41489", - "2a02:26f7:f105::/46": "20940", - "2409:8904:8c90::/39": "24547", - "2803:ecc0::/37": "264814", - "2a01:498:8200::/37": "42018", - "240a:a093::/32": "142797", - "2803:4480:4000::/34": "263189", - "2804:2e7c::/32": "265348", - "2804:4024:3001::/32": "265937", - "2400:6900::/32": "56304", - "2400:dcc0::/32": "38631", - "2804:a94::/32": "262572", - "2001:559:c0fc::/48": "7922", - "2001:678:4c8::/48": "41731", - "2804:6ba4::/33": "270414", - "2a09:8880:8::/36": "56690", - "240a:acb4::/32": "145902", - "2804:47f4::/32": "267088", - "2a03:c480::/32": "198095", - "2a0f:601::/30": "51044", - "2400:bb40:2000::/45": "141039", - "2600:1010:e010::/35": "22394", - "2804:214:8011::/45": "26615", - "2407:d380::/32": "135673", - "240a:ab7f::/32": "145593", - "2602:ffb0:ffe::/48": "64245", - "2605:a401:89fa::/38": "33363", - "2a00:47c0:200::/48": "44568", - "2a04:640::/29": "61160", - "2001:648:2811::/38": "5408", - "2001:4b20:100:570::/60": "65505", - "2408:84f3:3e40::/33": "17816", - "240e:37b:2600::/32": "4134", - "2600:140f:cc00::/48": "9498", - "2620:103:90d2::/47": "15084", - "2a00:c80::/32": "48564", - "2406:4e40:301::/37": "140966", - "2a02:26f0:3e::/41": "20940", - "2a02:40e0::/32": "48364", - "2a0a:d180:1000::/29": "206652", - "2408:802c::/32": "4837", - "240a:a026::/32": "142688", - "2804:1040:7778::/32": "263626", - "2a02:2260::/32": "49435", - "2a02:ac80:e001::/35": "25145", - "2a0f:5100:a01::/48": "20473", - "2001:ac8:98::/32": "9009", - "2801:80:70::/48": "28193", - "2a01:820::/32": "30722", - "2a0a:5a00::/29": "28954", - "2a0b:1c0::/29": "51088", - "2001:559:71b::/48": "33491", - "2001:4830:c101::/41": "27552", - "2403:ba00:2030::/32": "24521", - "240a:a6b7::/32": "144369", - "2605:5fc5::/30": "1239", - "2804:31b4::/32": "265032", - "2a03:7c40::/32": "48173", - "2001:559:835d::/46": "7922", - "2001:648:20f1::/38": "5408", - "2001:a10:185::/48": "207105", - "2401:ff80:1607::/44": "133954", - "240e:3b2:c800::/37": "4134", - "2804:6c84::/32": "270473", - "2001:559:82d5::/48": "7922", - "2001:1248:5783::/44": "11172", - "2402:800:332b::/41": "7552", - "2600:3005::/30": "13649", - "2801:80:1910::/48": "264958", - "2a03:2480:6a::/45": "41983", - "2001:559:86d0::/48": "22909", - "240e:108:22::/48": "58466", - "2600:1017:b4a0::/44": "22394", - "2804:1010:3000::/33": "263617", - "2a05:7280::/32": "202173", - "2a0b:4340:82::/47": "134176", - "2a0c:5b00::/29": "204970", - "2001:1838::/35": "23352", - "2600:40ff:fffa::/47": "701", - "2607:f360:100:200::/32": "32592", - "2610:b0:4028::/45": "3573", - "2800:370:10::/48": "28006", - "2a03:2480:71::/44": "41983", - "2a11:b100:b100::/48": "57167", - "2a00:1981::/32": "39603", - "2001:559:82ef::/43": "33651", - "2001:559:c389::/48": "7922", - "2001:1840:c020::/44": "196", - "2400:fa80:1::/48": "133480", - "2402:800:5371::/44": "7552", - "2408:820c:6840::/32": "17621", - "2600:6c38:a1d::/42": "20115", - "2a01:630::/32": "39839", - "2605:a404:2d9::/45": "33363", - "2800:481::/30": "14080", - "2806:2f0:32a1::/41": "17072", - "2a05:7c0::/32": "34156", - "2001:559:5e3::/45": "7015", - "2001:1a68:a::/48": "20555", - "2001:4d88::/32": "31333", - "2600:1405:2::/44": "20940", - "2804:27e0::/32": "262817", - "2804:30f4::/32": "264983", - "2001:559:c273::/48": "33287", - "2a0c:3cc0::/32": "203936", - "2001:559:870f::/48": "20214", - "2401:ff80:138d::/46": "133954", - "2605:1100::/32": "29953", - "2409:8060:3900::/31": "9808", - "2a03:f80:32::/48": "42160", - "2a0c:800::/29": "207439", - "240a:a56d::/32": "144039", - "2001:559:2cc::/48": "7015", - "2406:e1c0::/45": "141459", - "240a:a650::/32": "144266", - "2600:1a0e:5000::/32": "46650", - "2804:5e4::/32": "262548", - "2607:fdf0:5e05::/46": "8008", - "2a06:140::/29": "47704", - "2001:1248:9c83::/43": "11172", - "2600:1407:a801::/37": "20940", - "2801:0:1d0::/45": "52378", - "2804:2d4:400::/38": "28244", - "2a05:500::/48": "174", - "2408:8957:1fc0::/34": "17622", - "2a01:c50f:b100::/38": "12479", - "2a04:3e00:2::/36": "56910", - "2804:db0::/40": "52862", - "2a02:1c8:a::/48": "60095", - "2001:648:25e0::/48": "203348", - "2001:12f0:540::/38": "1916", - "2401:3cc0:601::/39": "137409", - "2605:a401:808c::/42": "33363", - "2804:496c::/32": "267183", - "2806:370:7150::/40": "28403", - "2408:8456:8a40::/39": "17816", - "240a:a4b3::/32": "143853", - "240a:a7d2::/32": "144652", - "2600:1000::/44": "6167", - "2610:30:2001::/33": "30313", - "2804:104c:a800::/40": "263629", - "2804:5dd8::/32": "268996", - "2a0b:6e00::/32": "203687", - "2001:67c:107c::/48": "8473", - "2001:968::/29": "24875", - "2001:df0:266::/48": "55901", - "2602:feda:d55::/44": "141712", - "2001:559:27::/44": "7922", - "2806:230:2043::/48": "11888", - "2a02:2790::/32": "51796", - "2804:4ab8::/32": "7155", - "2001:559:80da::/48": "33659", - "2401:4900:6130::/41": "45609", - "2403:c00:e00::/45": "17488", - "2406:2000:f4::/44": "10310", - "240a:abb4::/32": "145646", - "2600:1009:b1f0::/33": "22394", - "2607:f8f0:800::/48": "271", - "2a02:26f7:bf8d::/42": "20940", - "2a0b:c180::/32": "16019", - "2408:84f3:2e20::/43": "17816", - "2604:a00::/47": "19318", - "2001:559:5b8::/46": "7922", - "2001:559:5d8::/48": "33660", - "2001:4b20:10::/126": "65505", - "2400:b600::/32": "24362", - "240e:438:1440::/38": "4134", - "240e:108:84::/48": "63835", - "2803:4580:c000::/35": "52468", - "2a03:d540::/32": "50904", - "2a07:3fc0::/29": "203468", - "2001:1830::/32": "16559", - "2804:6b04::/32": "270372", - "2a02:26f7:d7c9::/42": "20940", - "2a04:1b00:80::/47": "60679", - "2a0e:8f02:20f0::/45": "212008", - "2605:b100:200::/40": "577", - "2804:13dc:ffff::/48": "262428", - "2804:1af4::/32": "61700", - "2a0a:2200::/29": "35132", - "2a0e:b107:15a2::/48": "142597", - "2001:559:831d::/48": "7015", - "2001:559:834c::/48": "33657", - "2001:678:9d4::/48": "56796", - "2001:67c:1868::/48": "57683", - "2402:800:b070::/40": "7552", - "2605:a000:c0e::/48": "11955", - "2a01:110:9009::/33": "6584", - "2001:502:2eda::/48": "397237", - "2001:559:266::/47": "7725", - "2001:67c:2100::/48": "41011", - "2001:fd8:1a8::/41": "4775", - "2607:ed80::/32": "395785", - "2a00:9f00:11::/32": "29314", - "2801:10:800::/48": "18747", - "2001:559:310::/48": "7922", - "2001:559:85ed::/48": "33662", - "2001:ee0:8040::/40": "45899", - "2400:cb00:419::/48": "13335", - "2408:8956:8d00::/40": "17816", - "240e:3b2:6400::/35": "140312", - "2600:1407:3801::/37": "20940", - "2804:431:e000::/35": "27699", - "2806:230:2032::/48": "265594", - "2a02:26f7:c2c9::/42": "20940", - "2804:84:881b::/33": "14282", - "2001:559:c007::/48": "7015", - "2001:67c:16c4::/48": "199612", - "2408:8256:99a::/38": "17622", - "240a:ad37::/32": "146033", - "2605:3380:4156::/42": "12025", - "2620:12c::/44": "19966", - "2803:5ce0:700::/40": "27887", - "2a00:9d20:31::/48": "60781", - "2a03:1c0::/32": "202207", - "2001:67c:16c8::/48": "206479", - "2408:8956:900::/40": "17816", - "2a04:f080::/29": "34636", - "2620:107:f0ff::/48": "36564", - "2a02:26f7:d605::/46": "20940", - "2605:a7c0:150::/48": "14618", - "2800:bf0:b401::/33": "27947", - "2804:5608::/32": "267972", - "2a01:9700:1338::/41": "8376", - "2a02:26f7:fb04::/48": "36183", - "2001:67c:2848::/48": "213100", - "2001:67c:2924::/48": "211960", - "240e:e9:6800::/37": "134770", - "2408:8459:de50::/34": "17816", - "2605:4500::/32": "46636", - "2806:230:2037::/48": "11888", - "2409:8d54::/28": "9808", - "2a01:400::/32": "44212", - "2a05:4741:25::/48": "212520", - "2a05:fb44::/32": "59504", - "2a0c:da04:18::/48": "49094", - "2a0d:5600:57::/44": "9009", - "2a10:b4c0::/29": "59852", - "2600:1404:5401::/36": "20940", - "2620:c1:8000::/48": "22931", - "2a04:e702:980::/29": "48849", - "2406:840:e014::/44": "213069", - "240a:aadb::/32": "145429", - "2605:e000:c0b::/48": "10838", - "2a02:26f0:75::/46": "20940", - "240a:acdd::/32": "145943", - "240e:67a:8800::/38": "140330", - "2607:f220:203::/48": "26153", - "2a0b:6b81:208::/48": "203729", - "2a0f:9b80::/32": "61174", - "2001:678:2e4::/48": "31079", - "240e:49:5000::/36": "137693", - "2804:3aac::/32": "262940", - "2001:559:5f::/42": "7922", - "2001:67c:23b0::/48": "210223", - "2400:dd01:1010::/42": "7497", - "2600:140b:4801::/38": "20940", - "2605:a404:487::/42": "33363", - "2620:16e:287::/48": "3147", - "2800:160:2421::/41": "14259", - "2408:8001:f000::/36": "4837", - "240a:ac7f::/32": "145849", - "2804:1624::/35": "263270", - "2804:6a78::/32": "270338", - "2804:5654::/32": "267991", - "2001:559:31b::/48": "33659", - "2001:559:860a::/48": "33659", - "2409:8028::/40": "56041", - "240e:980:9800::/40": "137698", - "2600:1408:6001::/37": "20940", - "2804:17b8::/32": "262434", - "2a01:8840:1ba::/45": "12041", - "2401:4900:47d0::/44": "45609", - "2607:e280::/33": "64252", - "2800:3a0::/47": "23201", - "2803:9140::/32": "264609", - "2a0e:97c5:668::/46": "20473", - "2001:559:10::/48": "7922", - "2400:89c0:2200::/48": "37936", - "2409:8924:9d00::/38": "56046", - "240a:ae3c::/32": "146294", - "2a05:8940::/30": "8468", - "2001:480:1610::/48": "518", - "2602:fcb5::/36": "51999", - "2602:fed5::/46": "27398", - "2610:20:8068::/38": "6629", - "2804:1768:9300::/34": "263144", - "2a00:1f70::/32": "12722", - "2a01:53c0:ffcb::/45": "54994", - "2404:3d00:4128::/46": "3573", - "2800:160:1780::/43": "14259", - "2803:6604:a001::/37": "28075", - "2a02:960::/32": "34168", - "2a04:2b00:13cc::/48": "60890", - "2600:6c34:4e::/48": "33588", - "2a02:f640::/29": "58291", - "2a0e:1c80:3::/48": "174", - "2620:1f7:81d::/35": "18703", - "2806:10a6:18::/32": "8151", - "2a02:9010:6d::/43": "3352", - "2a0b:e880::/29": "205614", - "2402:9500:b01::/37": "55720", - "2620:106:3004::/40": "36671", - "2800:300:9000::/43": "27651", - "2804:54a0:1c00::/39": "27688", - "2a0c:9a40:8140::/48": "210985", - "2600:6000:faad::/39": "12271", - "2408:840c:9e00::/40": "17621", - "240a:a730::/32": "144490", - "2620:0:6c0::/48": "16807", - "2a09:4c2:30::/48": "58057", - "2a0a:5f40::/32": "207242", - "2001:67c:2550::/48": "39870", - "2405:58c0:3a::/47": "140840", - "2806:2f0:4081::/42": "17072", - "2a02:26f7:bf85::/46": "20940", - "2a04:2e00::/29": "60751", - "2001:253:138::/48": "142104", - "2001:67c:1870::/48": "15830", - "2804:683c::/32": "269678", - "2a0a:c40:ffff::/48": "206304", - "2001:67c:188c::/48": "196858", - "2408:8459:1450::/38": "17816", - "240a:ac75::/32": "145839", - "2600:1480:1801::/37": "20940", - "2a0c:e040:1235::/39": "200629", - "2405:9800:c902::/48": "45458", - "240a:a04e::/32": "142728", - "240a:a136::/32": "142960", - "2804:4da4::/32": "268210", - "2804:54:1c00::/33": "28220", - "2804:766c::/32": "271111", - "2400:cb00:150::/44": "13335", - "240e:473:6250::/39": "4134", - "2804:2ed4:3ee0::/39": "265369", - "2a07:3480::/29": "47759", - "2a10:cdc0:f000::/36": "213100", - "2001:500:67::/44": "30133", - "2001:559:8184::/48": "7016", - "2a02:5320:300::/40": "12189", - "2001:559:7d6::/48": "33491", - "2001:4be8::/32": "31595", - "2606:2e00:8027::/44": "13213", - "2804:138b:c168::/34": "53037", - "2804:6498::/32": "269437", - "2a0a:e100::/29": "206927", - "2a0c:e640:26::/36": "211876", - "2001:43f8:11c0::/48": "328380", - "2401:fcc0::/32": "55699", - "2402:e380:30b::/48": "138219", - "2804:14c:65c5::/46": "28573", - "2a00:1228:2::/45": "31148", - "2a05:19c0::/47": "59800", - "2a05:e840::/29": "34622", - "2a02:26f7:e780::/48": "36183", - "2001:559:83fb::/48": "33667", - "2408:8256:466::/39": "17622", - "2804:7c00::/32": "271469", - "2804:822c::/32": "272503", - "2a00:d10::/32": "20559", - "2a00:b404:f000::/36": "205867", - "2a02:5b0::/32": "35467", - "2001:559:80a5::/48": "7922", - "2001:559:849d::/46": "7015", - "2001:44b8:205e::/42": "7545", - "2402:800:580f::/43": "7552", - "2408:8856:100::/38": "17622", - "240e:3b1:7a00::/32": "140313", - "2003::/19": "3320", - "2404:6980:43::/48": "135150", - "2605:a404:ca6::/41": "33363", - "2804:14d:9000::/40": "28573", - "2804:6ec::/32": "262613", - "2404:3d00:40f8::/39": "3573", - "240e:473:b200::/41": "140485", - "240e:678:1a00::/34": "140330", - "2620:b3::/48": "2914", - "2a02:6380::/32": "56349", - "2a09:1680::/48": "209811", - "2804:3460::/32": "265453", - "2001:550:3704::/36": "174", - "2001:559:5b6::/48": "33659", - "2001:678:728::/48": "202288", - "2001:1248:9c38::/41": "11172", - "2408:8956:1f40::/40": "17816", - "2409:8052:2100::/37": "9808", - "2804:12f8::/35": "263507", - "2a01:c50f:fa00::/37": "12479", - "2400:9380:8140::/48": "4134", - "2406:840:c0a8::/48": "139317", - "2600:1404:ac01::/38": "20940", - "2606:a600::/46": "23005", - "2a02:26f7:c504::/48": "36183", - "2a05:4140:412::/48": "213388", - "2a0e:fd45:40f5::/48": "43927", - "2602:fc5d:573::/48": "399866", - "2800:530::/32": "52233", - "2a02:26f7:cc81::/46": "20940", - "2a03:f180::/32": "42571", - "2a0e:97c5:7ac::/46": "20473", - "2a10:6e40::/32": "212635", - "2402:9900:311::/48": "27435", - "240e:473:150::/40": "4134", - "2620:4d:4021::/46": "395403", - "2a00:6520::/32": "48739", - "2001:550:2302::/47": "174", - "2001:fd8:b230::/44": "4775", - "2409:8020:1091::/42": "56046", - "2603:c021:4000::/35": "31898", - "2605:dd40:8f80::/44": "16509", - "2804:4c0c:70::/32": "267345", - "2001:df6:8c80::/48": "136744", - "2401:d800:b5a0::/41": "7552", - "2a02:27ac::/32": "50979", - "2a04:d500::/32": "48618", - "2a05:8dc0::/29": "15377", - "2001:559:8601::/48": "33659", - "2001:67c:2610::/48": "197964", - "240e:e1:d100::/48": "4811", - "240e:44d:7080::/41": "4134", - "2806:230:3003::/48": "11888", - "2a0e:bf01:101::/32": "202539", - "2001:559:8444::/48": "33657", - "240a:ab75::/32": "145583", - "2804:6440::/32": "269416", - "2a01:a1c0::/32": "21412", - "2a06:7b40::/29": "198024", - "2a0e:8f02:20ec::/46": "213033", - "2620:0:2830::/48": "16876", - "2620:0:2ee0::/48": "20144", - "2001:559:4e7::/48": "33651", - "2001:559:82ab::/48": "33657", - "2001:559:c0f0::/47": "7922", - "2401:d800:f500::/42": "7552", - "2402:73c0::/32": "131929", - "2408:8459:4ec0::/35": "17816", - "2607:f3a0:a006::/48": "399814", - "2a00:c380::/32": "50629", - "2001:559:87c1::/45": "7922", - "240a:a5e0::/32": "144154", - "2804:1a00::/32": "61831", - "2400:3dc0:501::/38": "134371", - "2402:e280:3d00::/41": "134674", - "2620:1bc:1027::/44": "7726", - "2801:80:1ad1::/48": "52529", - "2804:1d04:b000::/33": "61689", - "2a01:5042:2001::/48": "202196", - "2402:6540::/32": "137431", - "2404:fa00:5000::/36": "45780", - "240a:a569::/32": "144035", - "2602:ffb6::/36": "174", - "2606:a000:1700::/40": "11955", - "2801:1:8805::/46": "64102", - "2804:4cfc::/32": "267405", - "2a01:7ae0::/32": "49182", - "2406:840:e777::/48": "136591", - "2406:3a00:10::/48": "136557", - "2800:160:1d90::/47": "14259", - "2804:1028::/32": "263622", - "2a04:54c0::/29": "202230", - "2604:fb80::/37": "15128", - "2a0e:b00::/29": "63023", - "2607:f7a0:8::/47": "46562", - "2801:80:3e20::/44": "271246", - "2804:16d8:800::/38": "262729", - "2001:4490:d780::/46": "9829", - "2804:383c:5::/38": "52601", - "2001:4410:1100::/34": "132040", - "2408:843c:2600::/30": "4837", - "240a:a15c::/32": "142998", - "240a:af61::/32": "146587", - "2606:9200:9000::/33": "6428", - "2001:67c:1274::/48": "208868", - "2402:800:9471::/40": "7552", - "2408:8000:9ffd::/48": "140979", - "240e:3b7:7600::/39": "140313", - "2605:dd40:8210::/48": "398549", - "2a01:4700::/48": "41151", - "2a02:2308:21::/32": "29028", - "2402:7300::/32": "58451", - "2402:9e80:8::/48": "29802", - "2408:84f3:2e60::/40": "17623", - "240a:ac11::/32": "145739", - "240e:108:10f3::/44": "4134", - "2803:9a40:4001::/32": "263824", - "2001:1ad8::/32": "12552", - "2806:1016:6::/43": "8151", - "2a07:4540:a::/48": "203116", - "2001:1b90::/32": "6908", - "2403:71c0:3000::/48": "43959", - "2605:a7c0:111::/44": "16509", - "2a04:4e40:8800::/48": "54113", - "2a0c:9a40:808a::/48": "48646", - "2001:c20:48a5::/48": "3758", - "2400:adc0:100::/48": "9541", - "2400:f800::/32": "24246", - "2620:12c:f00a::/45": "19833", - "2a05:9a00::/45": "59441", - "2a11:a380::/29": "8511", - "240a:a7e7::/32": "144673", - "2605:bc0:2008::/48": "54201", - "240e:109:8048::/48": "134769", - "2600:1403:4001::/37": "20940", - "2600:1404:b000::/48": "35994", - "2620:25:a000::/48": "394470", - "2804:55cc::/32": "267957", - "2a00:7c82::/32": "49981", - "2408:8459:7c30::/41": "17622", - "240a:a9fb::/32": "145205", - "2a01:4640:c800::/40": "9042", - "240a:a1a8::/32": "143074", - "2a0f:5707:ffa0::/45": "131668", - "2c0e:0:402::/39": "24863", - "2800:160:2167::/44": "14259", - "2001:559:8352::/48": "33660", - "2001:4878::/48": "12222", - "2404:f4c0:fe10::/44": "139249", - "2405:da00:20::/38": "38235", - "240a:a82f::/32": "144745", - "2620:116:801a::/45": "27281", - "2620:136:bb::/48": "12025", - "2804:e94:f4::/44": "262468", - "2a05:19c0:2::/47": "59802", - "2a0e:b700::/31": "35085", - "2001:559:249::/48": "33667", - "2001:559:481::/48": "33287", - "2408:84f3:4840::/38": "17816", - "240a:ac1e::/32": "145752", - "2a00:fa40:3000::/33": "45012", - "2a04:d180::/29": "42831", - "2408:8957:ea00::/40": "17622", - "2804:6f8::/32": "52848", - "2a00:1288:efc4::/48": "14778", - "2a01:110:8068::/48": "3598", - "240a:aaa0::/32": "145370", - "240a:acc5::/32": "145919", - "2600:1406:a01::/37": "20940", - "2600:6c5a::/32": "20115", - "2a02:26f7:c188::/48": "36183", - "2407:5f80::/32": "135155", - "2409:8914:1900::/34": "56044", - "240a:a252::/32": "143244", - "2804:79cc:3000::/32": "271328", - "2a00:c2e0::/39": "30919", - "2a11:5f80::/29": "18779", - "2401:d800:bd10::/42": "7552", - "2600:1014:a110::/36": "22394", - "2604:6840:1200::/39": "33438", - "2a03:ada0::/32": "44404", - "2a02:d107:e002::/35": "197155", - "2001:559:85ad::/46": "7015", - "2001:67c:678::/48": "201816", - "2001:4248:7b::/32": "30999", - "2400:1700:201::/44": "4628", - "240a:a693::/32": "144333", - "2620:0:2a03::/48": "25046", - "2a02:26f7:cb11::/42": "20940", - "2001:df5:b880::/48": "63528", - "2400:201::/48": "4766", - "2402:5b00::/44": "18002", - "2804:6904:c000::/34": "270243", - "2a0d:b700::/48": "210984", - "2804:14d:ce84::/41": "28573", - "2001:67c:25c4::/48": "31080", - "2402:79c0:f0f9::/48": "11840", - "2403:8300:e00::/47": "204527", - "2600:1003:f010::/40": "22394", - "2603:90fc:20::/44": "19115", - "2803:e580::/32": "61467", - "2804:14d:8400::/41": "28573", - "2a03:4900:5::/46": "197695", - "2401:d800:53c0::/42": "7552", - "2804:79bc::/32": "271324", - "2a00:1f78:fffe::/48": "39227", - "2a02:26f7:e::/48": "36183", - "2a07:b8c1::/45": "14043", - "2c0f:f2e0::/32": "328066", - "240a:a778::/32": "144562", - "2604:9b00:c00::/38": "14230", - "2607:f110:6::/44": "21889", - "2801:14:a000::/48": "61455", - "2a01:660::/29": "48951", - "2a06:6dc0::/29": "49788", - "2408:8956:7400::/40": "17622", - "240a:ad8c::/32": "146118", - "2a03:4260::/29": "201476", - "2001:559:8696::/47": "7922", - "2600:1000:ff10::/31": "22394", - "2a02:2e02:8f70::/40": "12479", - "2804:1098::/32": "52766", - "2804:561c::/32": "267977", - "2a03:5dc0:6::/48": "13032", - "2804:eb8::/32": "262970", - "2a0a:86c0:a::/39": "206163", - "2001:559:c2f3::/48": "33652", - "2403:a3c0::/32": "131600", - "240a:a431::/32": "143723", - "240d:c010::/47": "132203", - "240e:67d:e400::/39": "140330", - "2804:1f2c::/32": "265478", - "2804:5788::/32": "268070", - "2a01:710::/32": "34968", - "2a0d:e8c0:2::/29": "35829", - "2a0e:b107:1f0::/48": "139249", - "2001:1868:a10c::/33": "11404", - "240a:a21a::/32": "143188", - "240a:ae56::/32": "146320", - "2607:fa98::/35": "22439", - "2a00:eab::/32": "9211", - "2604:880:275::/39": "29802", - "2404:4a00:5542:3004::/48": "55423", - "2600:141b:4801::/35": "20940", - "2620:107:9000::/43": "22787", - "2a00:6b40::/32": "197603", - "2a01:348:317::/48": "49846", - "2602:feda:b8a::/48": "140889", - "2a00:b2a0::/32": "202137", - "2a03:67e0::/32": "201201", - "240a:a2ab::/32": "143333", - "240e:3be:ec00::/35": "140314", - "2603:c012::/36": "31898", - "2a0b:db00::/29": "13285", - "2a05:b2c4::/31": "5524", - "2001:1248:7083::/44": "11172", - "2600:1007:d0c0::/44": "6167", - "2602:ffb0:5::/48": "20473", - "2603:c024:8000::/35": "31898", - "2801:1de::/46": "271901", - "2a02:26f0:7e00::/48": "34164", - "2a02:7520::/32": "207234", - "2a0c:b440::/29": "48438", - "2a0e:8f06::/32": "58299", - "2001:df1:b401::/48": "132458", - "240a:a0ee::/32": "142888", - "2600:1003:9840::/44": "6167", - "2c0f:5400::/48": "205897", - "2001:df5:9380::/48": "132010", - "2401:b00:12::/36": "17564", - "2408:84f3:9e10::/42": "134543", - "240e:cf:a000::/27": "4134", - "240e:3b9:ac00::/35": "4134", - "2602:fdc7::/36": "397636", - "2a02:2a90:8110::/33": "702", - "2400:cb00:133::/48": "395747", - "2404:8d02:1044::/48": "9587", - "240a:aaf1::/32": "145451", - "240a:ad58::/32": "146066", - "2604:5500:1000::/42": "19165", - "2a05:d01c::/36": "16509", - "2a0a:90c0:1051::/45": "205080", - "2001:42c8::/32": "6453", - "2a00:4cc0::/32": "57664", - "240a:a2cd::/32": "143367", - "240e:4b:c800::/29": "4134", - "2804:211c:fe40::/39": "264536", - "2001:1260:200::/42": "28536", - "2600:6c38:13::/44": "20115", - "2a02:2c60::/32": "9063", - "2001:bf7:1322::/44": "206813", - "240e:44d:7f80::/41": "4134", - "2a00:1908:e965::/48": "50475", - "2a10:e300:26::/48": "44854", - "2001:559:8763::/48": "33667", - "2403:9800:c071::/40": "4648", - "240a:ad46::/32": "146048", - "2a02:a30:f096::/36": "8926", - "2001:510:109::/42": "376", - "2400:dcc0:a504::/38": "38631", - "2401:4900:22a0::/41": "45609", - "2a0c:f840::/29": "28716", - "2001:559:c238::/47": "7922", - "2804:6314::/32": "269337", - "2a04:7040:1471::/48": "212012", - "2c0f:1100::/32": "328255", - "2a0d:5600:30::/47": "63473", - "2001:559:81d4::/48": "33668", - "240e:1c6:c000::/34": "4812", - "240e:3b0:dc00::/34": "4134", - "2600:8807:3b20::/33": "22773", - "2607:3f00:2a::/48": "46261", - "2607:f740:e000::/47": "36236", - "2620:103:e028::/47": "13893", - "2404:e400:20::/32": "45345", - "2600:1403:16::/34": "20940", - "2800:5f0:101::/36": "22724", - "2804:f8c:8810::/40": "263591", - "2a02:2698:8400::/38": "39028", - "2a02:e980:26::/44": "19551", - "2408:8459:d0c0::/39": "17816", - "2600:140f:fc01::/27": "20940", - "2605:3380:4300::/48": "12025", - "2a09:d380::/30": "35709", - "2001:559:463::/48": "20214", - "2001:559:49e::/48": "33287", - "2001:44b8:2054::/44": "7545", - "240e:44d:5700::/41": "140345", - "2602:fea0::/36": "18531", - "2a06:6880::/29": "209620", - "2401:c900:1000::/38": "36351", - "2402:d000:8121::/45": "9329", - "240a:afd3::/32": "146701", - "2602:ffb1:1::/48": "54133", - "2a02:e980:142::/43": "19551", - "2409:8a06::/28": "9808", - "2a0d:d7c0::/29": "210044", - "2a02:5620::/32": "202675", - "2a03:f80:ed15::/46": "57169", - "2001:44b8:605c::/48": "7545", - "2405:a700:14::/47": "9583", - "2603:4:1300::/48": "44273", - "2801:1ea::/44": "27951", - "2a00:bf00::/32": "5387", - "2a02:26f7:d180::/48": "36183", - "2a09:d2c1:6::/48": "209117", - "2001:408:c001::/34": "14793", - "2602:ff66::/36": "394146", - "2605:7840:e120::/41": "12130", - "2803:ec40::/32": "263792", - "2a00:18d0::/32": "47887", - "2001:3c8:e10e::/48": "137546", - "2400:7400:e02e::/48": "38044", - "2405:9800:b013::/44": "133481", - "2602:fea4::/36": "399584", - "2607:f318::/32": "7774", - "2620:118:c080::/42": "237", - "2804:33dc:fe0::/44": "64500", - "2a02:8d0::/32": "49413", - "2a05:fa00::/29": "30884", - "240a:a0eb::/32": "142885", - "2600:2101::/29": "11404", - "2600:370f:7385::/44": "32261", - "2605:7c0:1003::/48": "19382", - "2804:14c:6593::/42": "28573", - "2804:da8::/32": "262605", - "2a01:7d40::/32": "8620", - "2401:4900:1f24::/43": "24560", - "240a:a0d8::/32": "142866", - "240a:aff6::/32": "146736", - "2804:14d:8e87::/44": "28573", - "2a0f:bf00::/42": "208196", - "2401:f980::/32": "63862", - "2800:800:970::/48": "26611", - "2a00:1a20::/29": "21283", - "2a00:1bb0::/32": "28768", - "2a0f:5707:af01::/45": "211358", - "2804:122c::/32": "263461", - "2804:3238::/32": "265063", - "2600:100c:e210::/35": "22394", - "2600:1417:8::/43": "20940", - "2602:fed2:7117::/48": "57257", - "2610:a1:3050::/48": "12008", - "2a0b:ae00::/35": "207044", - "2402:2700::/40": "132061", - "2403:71c0:2000::/48": "23959", - "240a:a965::/32": "145055", - "240a:adac::/32": "146150", - "2001:67c:1034::/48": "48854", - "240a:a25f::/32": "143257", - "240a:aad9::/32": "145427", - "2a02:26f7:cdc4::/48": "36183", - "2001:ee0:2f02::/45": "45899", - "2001:1b50::/29": "1836", - "2402:800:7060::/40": "7552", - "2408:8256:358d::/48": "17816", - "2a02:26f7:d945::/46": "20940", - "2a02:26f7:f189::/46": "20940", - "2a0b:3c80::/29": "16097", - "2001:550:5400:100::/46": "174", - "2001:fd0:301::/37": "10029", - "2409:8000:5800::/40": "56048", - "2400:ac40:e70::/32": "136255", - "2803:3040::/32": "27660", - "2a02:2698:9800::/38": "31363", - "2001:67c:225c::/48": "56736", - "2401:a6c0:1::/46": "136049", - "2404:a340::/32": "135273", - "240e:473:350::/40": "4134", - "2606:2800:4a48::/46": "15133", - "2804:a18::/32": "263022", - "2804:3f7c::/32": "265896", - "2001:559:85c7::/44": "33651", - "2001:678:24c::/48": "59474", - "2402:800:539b::/41": "7552", - "2600:1017:a110::/38": "6167", - "2800:370:36::/48": "28006", - "2804:7c7c:e00::/32": "271499", - "240a:a365::/32": "143519", - "240a:afaa::/32": "146660", - "2804:3e68::/32": "266594", - "2a00:e48:8000::/33": "39787", - "2408:8256:2d60::/44": "17623", - "2803:e600:5::/32": "18809", - "2406:840:400::/48": "139317", - "2408:8957:2e00::/40": "17622", - "2602:feda:ace::/48": "140974", - "2400:9c00::/32": "38880", - "2401:1d40:3000::/48": "136958", - "2804:2ef0::/32": "264862", - "2806:20d:322c::/47": "32098", - "2806:230:3023::/48": "11888", - "2a0b:a840::/32": "206894", - "2401:d800:9df0::/38": "7552", - "2804:14d:baa3::/45": "28573", - "2a02:1390:5000::/40": "21351", - "2a04:a380::/29": "62160", - "2a05:1083:b00::/40": "211139", - "2a09:1400::/30": "42423", - "2a10:fb80::/29": "211969", - "240a:a072::/32": "142764", - "2602:ffca::/36": "32875", - "2610:80::/34": "6079", - "2620:10d:c090::/44": "54115", - "2404:cc00:8889::/35": "24441", - "2604:3cc0:1030::/32": "396298", - "2610:18:8801::/48": "17035", - "2a07:3500:1b90::/48": "33915", - "2001:559:8438::/48": "7922", - "2001:c38:9083::/43": "9931", - "2001:df1:8900::/48": "136733", - "2401:4900:5c20::/41": "45609", - "240e:980:9900::/40": "4816", - "2804:37e8::/32": "28258", - "2409:8069:2c00::/30": "9808", - "2a02:ad8:1200::/37": "12389", - "2a0d:97c0::/29": "208861", - "2001:df5:5100::/48": "34768", - "2409:8020:3063::/43": "56046", - "2620:fc:4000::/48": "26206", - "2a02:20b0::/31": "8315", - "2a02:26f7:e988::/48": "36183", - "240a:a4e1::/32": "143899", - "2620:74:16::/48": "16838", - "2804:4858::/32": "267115", - "2a05:b680:8::/48": "62445", - "2401:4900:40f0::/44": "45609", - "2401:9800::/32": "23930", - "2600:1012:a020::/40": "22394", - "2804:14d:5681::/46": "28573", - "2a00:5a00::/32": "197529", - "2001:559:159::/48": "7015", - "2408:80ea:7680::/43": "17623", - "240e:473:6c00::/41": "140485", - "2605:9f00:300::/32": "36473", - "2001:3c8::/35": "4621", - "2403:3600::/32": "9336", - "2607:f010::/32": "52", - "2806:2f0:20c3::/48": "17072", - "2a01:758:fff9::/45": "3326", - "2001:4ba2::/32": "39519", - "2606:3900::/32": "13329", - "2800:340::/32": "5692", - "2804:2144:a800::/33": "52795", - "2a05:50a0::/30": "49052", - "2404:b1:2000::/33": "9891", - "240e:6b8::/35": "140308", - "2607:fcf8:b0b0::/48": "812", - "2803:15c0::/34": "269822", - "2804:32bc::/32": "265096", - "2a02:2208::/47": "6697", - "2001:559:81dc::/47": "7922", - "2804:2cc8::/32": "265243", - "2804:2d2c:fc00::/38": "52971", - "2a02:b78::/32": "6894", - "2602:feb4:140::/42": "25961", - "2804:8058::/32": "271745", - "2a0d:4f00::/43": "48492", - "2400:c800:109::/38": "4515", - "2404:ddc0:6000::/36": "138398", - "2620:100:4000::/46": "25923", - "2804:329c::/32": "265088", - "2001:559:c2f9::/48": "33659", - "2405:9800:c92d::/48": "138915", - "2803:c580::/32": "55259", - "2a01:5b0:25::/48": "48519", - "2404:8c40::/48": "136374", - "2405:7f00:8900::/38": "133414", - "240a:aea8::/32": "146402", - "240e:67f:c400::/39": "140330", - "2610:a1:1019::/48": "397228", - "2804:40e8::/32": "265990", - "2001:4cc8::/31": "31246", - "2408:8957:5a00::/40": "17622", - "240a:ae5c::/32": "146326", - "2a01:53c0:ffed::/43": "54994", - "2a02:26f7:c249::/42": "20940", - "2a0f:5fc0:dead::/48": "39673", - "2001:579:50f8::/39": "22773", - "2607:f518:2403::/32": "46887", - "2a02:7b40::/32": "62282", - "2a07:9240::/29": "34907", - "2804:14d:c200::/40": "28573", - "2600:140f:d::/46": "9498", - "2405:d000::/33": "18024", - "2605:a900:4808::/35": "46887", - "2620:12:2001::/48": "54976", - "2001:559:737::/48": "33657", - "2402:800:6381::/42": "7552", - "2403:2880::/32": "131905", - "2804:238:f::/32": "23106", - "2a03:db80:4404::/48": "5501", - "2001:559:5ef::/48": "7015", - "2001:678:a84::/48": "208713", - "240a:a5ad::/32": "144103", - "2a06:f787:2::/48": "2686", - "2a07:9d80::/29": "202716", - "2a0e:8f02:f020::/48": "211581", - "2001:559:c1a7::/48": "7015", - "240a:ae36::/32": "146288", - "2804:78::/32": "262684", - "2403:300:a07::/48": "714", - "2602:fed2:fd0::/44": "49134", - "2803:70e0::/32": "263235", - "2804:7304::/32": "270890", - "2a02:2ad0:11b::/45": "702", - "2a04:3a00::/29": "60703", - "2001:470:cf::/43": "6939", - "2001:c20:4879::/46": "3758", - "2a02:26f7:bcc9::/46": "20940", - "2401:33c0::/32": "131578", - "2803:16a0:2::/48": "262206", - "2a06:eec0::/29": "56722", - "2c0f:fdf0::/32": "37150", - "2001:3c8:1701::/48": "23687", - "2400:7fc0:4000::/40": "55960", - "2606:1a40:2010::/48": "398962", - "2a02:5b40::/31": "59943", - "2001:559:83d6::/48": "33287", - "2001:1248:70f3::/45": "11172", - "2400:9700::/45": "24550", - "240e:108:1180::/48": "133774", - "2605:a401:8bc7::/42": "33363", - "2a0e:97c0:1000::/40": "20473", - "2a10:9c00::/29": "30823", - "2804:248::/45": "28598", - "2804:2d78::/32": "265285", - "2a00:8740:500::/40": "207490", - "2001:559:8297::/48": "33657", - "2001:559:c323::/48": "7016", - "2406:2b00::/32": "4049", - "2409:8080:3817::/42": "9808", - "240a:aa66::/32": "145312", - "2620:1f8:f0ef::/48": "40443", - "2803:6900:1400::/48": "52423", - "2a05:d050:80a0::/44": "16509", - "2a05:e2c0::/29": "30766", - "2a06:2240::/29": "31726", - "2001:df7:bb00::/48": "138051", - "2402:8100::/44": "55644", - "2600:3007:1400::/32": "13649", - "2001:678:5c0::/48": "206883", - "2001:1b98::/32": "51184", - "240e:438:2440::/38": "4134", - "2602:fd50:f60::/44": "212276", - "2a01:ace0::/32": "210123", - "2a0e:fd45:dc0::/44": "212085", - "2a0f:d0c0::/29": "43424", - "2402:800:3a1d::/42": "7552", - "2402:5a00::/32": "18077", - "2610:1e0:1801::/37": "3714", - "2a02:c88::/32": "8487", - "2a02:26f7:cc00::/48": "36183", - "2405:e280:2180::/48": "55769", - "240a:af1b::/32": "146517", - "2600:1402:6801::/35": "20940", - "2a0f:7a40::/31": "207858", - "2409:8028:2b00::/40": "56041", - "2600:1000:9000::/44": "6167", - "2804:6368::/32": "269359", - "2a02:26f7:bf01::/46": "20940", - "2001:559:8652::/48": "7015", - "2408:8a07:6000::/37": "9929", - "240a:adc3::/32": "146173", - "240e:3ba:7800::/39": "4134", - "240a:a596::/32": "144080", - "2610:1f0::/32": "4181", - "2a06:1b80::/29": "199462", - "2409:8087:1800::/39": "134810", - "240e:67f:8c00::/33": "4134", - "2804:14d:5200::/40": "28573", - "2804:5060::/32": "268385", - "2a03:7680::/32": "20905", - "2a0d:eb00::/32": "204880", - "2001:559:874f::/48": "33657", - "2001:678:e0::/48": "3303", - "2001:978:8900:1::/37": "174", - "240e:473:fb00::/41": "140485", - "2620:137:a::/48": "396253", - "2a06:b500:204f::/48": "203759", - "2a0f:90c0::/29": "59597", - "240e:3b2:ac00::/35": "4134", - "2600:3c00::/29": "63949", - "2804:214:8018::/38": "26615", - "2804:510::/32": "28163", - "2804:712c::/32": "270772", - "2a07:59c3:45::/46": "203027", - "2408:8957:f400::/40": "17622", - "240a:a2d5::/32": "143375", - "2604:640:105::/46": "393562", - "2605:a401:8b13::/41": "33363", - "2001:559:ea::/45": "20214", - "2806:230:6022::/48": "265594", - "2a00:1560:e::/43": "29684", - "2a10:2f00:111::/48": "207550", - "2001:67c:358::/48": "50262", - "2001:4408:6f00::/35": "4758", - "2604:3200::/32": "21623", - "2605:7840::/36": "12130", - "2620:119:5000::/46": "13443", - "240a:a8d6::/32": "144912", - "2605:500::/32": "823", - "2a00:d940::/32": "43542", - "2409:876c:5700::/27": "9808", - "240a:acd2::/32": "145932", - "2620:1d0:5b::/48": "397218", - "2a02:cb80:4070::/40": "43766", - "2a02:ee80:41ec::/47": "21433", - "2405:9800:b006::/44": "45430", - "240a:ac81::/32": "145851", - "2610:1d8::/32": "5078", - "2804:23bc::/32": "264180", - "2804:43fc::/32": "267614", - "2408:8459:3840::/38": "17816", - "240a:a6cc::/32": "144390", - "2804:13dc:fff0::/44": "262428", - "2001:559:5cb::/48": "33651", - "2605:4400:8::/32": "40715", - "2804:15c::/32": "11835", - "2a0e:bac0::/29": "60262", - "2a02:26f7:b608::/48": "36183", - "2a0b:9f00::/29": "47973", - "2001:67c:2554::/48": "39840", - "240a:aa74::/32": "145326", - "2804:577c::/32": "268068", - "2a00:4802:390::/42": "13124", - "2a02:26f7:e844::/48": "36183", - "2600:6c2e:711::/36": "20115", - "2602:fed2:7123::/48": "206607", - "2001:400:6611::/32": "293", - "2804:4868::/32": "267119", - "2804:5c20::/32": "268890", - "2a05:6440::/29": "49544", - "2400:cb00:20::/46": "13335", - "2404:82c0::/42": "135377", - "2607:fcd0:fa80:2401::/54": "8100", - "2620:138:5000::/44": "13925", - "2a03:7380:2000::/37": "13188", - "2a03:7900:600::/32": "197731", - "2a0e:b107:1170::/48": "142055", - "2001:500:1::/48": "1508", - "2405:4200:205::/32": "24482", - "240a:a5b6::/32": "144112", - "240a:adb2::/32": "146156", - "2804:4e30::/32": "268245", - "2001:559:84ec::/48": "33287", - "2a02:2e02:9060::/40": "12479", - "2a0e:b107:c96::/48": "140938", - "2001:550:4100:2::/47": "174", - "2403:6200:7603::/32": "45758", - "2408:8456:5e40::/39": "17816", - "2600:80c:1100::/40": "11486", - "2804:7aec::/32": "271400", - "2a02:26f7:df45::/46": "20940", - "240a:a490::/32": "143818", - "2001:559:c0cc::/47": "33659", - "2001:559:c0db::/45": "33657", - "2001:559:c270::/48": "33651", - "2001:1388:80b0::/38": "6147", - "2001:44b8:4036::/44": "4739", - "2409:8714:7000::/32": "56044", - "2409:8e61::/27": "9808", - "240e:5a:43c0::/37": "140295", - "2a0d:ed80:101::/48": "3303", - "2409:870c::/30": "56042", - "240a:a96e::/32": "145064", - "2606:2800:420a::/47": "15133", - "2804:26c8::/32": "263856", - "2a0e:46c4:22ac::/47": "136918", - "2400:d400:ffff::/48": "45671", - "2600:140f:400::/48": "55836", - "2406:f00:1::/48": "132524", - "2600:1010:6010::/32": "22394", - "2620:52:4::/47": "22360", - "2a0a:2380::/48": "39845", - "2001:559:847b::/48": "7922", - "2408:822a::/32": "4837", - "2408:8456:c800::/42": "17622", - "2409:8904:5670::/40": "24547", - "2806:28f::/32": "28419", - "2a00:f60::/32": "48635", - "2a10:7100::/29": "398559", - "240e:473:5250::/39": "4134", - "2600:9000:f140::/48": "16509", - "2a0b:4fc1::/32": "205688", - "2001:67c:1f0::/48": "31172", - "2001:19e8:f1::/44": "2576", - "240a:ae91::/32": "146379", - "2607:fcd0:1336::/47": "29761", - "2804:40a0:f400::/36": "265971", - "2001:df0:2c8::/48": "56178", - "2404:4a00:8500::/64": "55423", - "2a01:4060::/32": "9063", - "2001:678:c4::/48": "9066", - "2405:800:bfff::/48": "4817", - "2602:ffdf:f00::/40": "25851", - "2400:dc00:4002::/48": "131111", - "2a04:d4c0::/29": "202052", - "2600:1017:b8b0::/41": "6167", - "2a0d:ac80::/29": "204475", - "2001:559:172::/48": "33662", - "2401:d800:91a0::/41": "7552", - "2404:d340::/33": "138132", - "240a:a076::/32": "142768", - "2804:5334::/32": "268569", - "2a0d:2a00:1::/46": "205157", - "2604:3f00::/32": "21547", - "2803:c800:c000::/34": "23243", - "2a02:26f7:c40d::/42": "20940", - "2402:7481::/32": "134809", - "2408:8459:c250::/37": "17816", - "2a01:a7e0::/36": "200711", - "2400:8b00:500::/43": "45727", - "2403:f880:6300::/40": "33438", - "2620:109:6000::/44": "36667", - "2804:3f88::/32": "265899", - "2a02:26f7:cfc9::/46": "20940", - "2001:678:cb0::/48": "207274", - "2001:978:4200:100::/46": "174", - "2401:d800:d930::/41": "7552", - "2408:8459:ba10::/42": "17623", - "2600:370f:3505::/44": "32261", - "2804:2290::/32": "264108", - "2806:230:204a::/48": "265594", - "2a03:90a0::/32": "49251", - "240a:a5ca::/32": "144132", - "2604:d600:120a::/43": "32098", - "2606:f280:4000::/34": "46261", - "2806:2f0:1142::/47": "22884", - "2a02:2e02:3160::/43": "12479", - "2a04:4e40:ac00::/47": "54113", - "2001:4018::/32": "9150", - "2001:12d0::/36": "28571", - "2405:84c0:ff20::/45": "59598", - "2408:4009::/37": "37963", - "2600:100f:a110::/36": "22394", - "2602:feda:c60::/44": "399015", - "2804:954:72::/40": "263073", - "2001:470:f0::/48": "21589", - "2409:8060:3100::/36": "9808", - "2804:27c4:7001::/32": "263921", - "2001:559:8653::/48": "7922", - "2001:579:d264::/40": "22773", - "2401:8800:c00::/45": "17439", - "2402:800:3d7f::/40": "7552", - "2804:41ac::/32": "267449", - "2804:545c:9400::/33": "268645", - "2001:559:f::/48": "33287", - "2401:8c00::/32": "38858", - "2407:6e00:5::/48": "17987", - "2605:a401:8758::/45": "33363", - "2800:160:14c0::/43": "14259", - "2804:2238:600::/36": "264598", - "2806:2f0:70a1::/41": "17072", - "2001:559:85da::/48": "13367", - "2401:d800:54b0::/41": "7552", - "2407:8100:6::/48": "58436", - "2607:f6f0:1000::/48": "12085", - "2804:6b00::/32": "270371", - "2806:2f0:1180::/38": "17072", - "2a02:ba0::/48": "12491", - "2001:559:85d3::/45": "7922", - "2402:5680:4000::/36": "133798", - "240e:3b3::/35": "134773", - "2803:ef20::/48": "266774", - "2a05:7640:f40::/42": "174", - "2a0a:54c1:5::/44": "62240", - "2a0e:b107:3f8::/45": "57883", - "2001:559:80b7::/48": "33287", - "2600:1012:b000::/42": "6167", - "2804:93c:31::/40": "52878", - "2a02:f18::/32": "15879", - "2001:559:c23e::/48": "33491", - "2800:bf0:800a::/43": "27947", - "2804:b38::/32": "52758", - "2400:ba41:1::/48": "21859", - "2409:8038:1900::/34": "9808", - "2801:80:330::/48": "53046", - "2a03:6920::/32": "60592", - "2a0e:b107:a20::/44": "213215", - "2001:468:ce0::/44": "1312", - "2404:e040:c000::/34": "63780", - "2600:1480:6801::/37": "20940", - "2408:840c:9500::/40": "17621", - "2604:4300:f21::/45": "33387", - "2803:5b00::/32": "263698", - "2803:5e00:b5::/39": "267765", - "2804:8218::/32": "272498", - "2a05:6900::/29": "47551", - "2606:1980::/46": "54994", - "2800:d300:5000::/30": "11830", - "2804:4890::/33": "267129", - "2a02:ee80:4121::/46": "3573", - "2a04:2f80::/32": "61157", - "2a04:4e40:6610::/44": "54113", - "2001:a98:31::/40": "8517", - "2400:a980::/40": "133111", - "2404:bf00:8800::/40": "9303", - "2605:6c80:8::/48": "397373", - "2a00:1ca8:46::/43": "50673", - "2402:9d80:a61::/43": "131429", - "2406:2000:99::/46": "10310", - "2408:8456:c040::/39": "17816", - "2409:8c20:5800::/38": "56046", - "2800:160:1d0e::/43": "14259", - "2a03:63c0::/32": "199578", - "2001:559:123::/48": "33667", - "2001:4b20:10:4101::/44": "34288", - "2403:ecc0::/32": "58750", - "2408:8459:c630::/41": "17622", - "2605:7940:face::/48": "30456", - "2001:550:1d00:300::/47": "174", - "2001:678:ce8::/48": "60557", - "2403:6940:f::/48": "134371", - "240a:a12d::/32": "142951", - "2606:2800:4ac8::/46": "15133", - "2406:da00:a000::/40": "16509", - "2a05:dac0:4::/29": "44166", - "2406:6dc0::/32": "141155", - "240e:67c:e400::/39": "140330", - "2604:85c0:6::/47": "16524", - "2804:424c::/40": "267491", - "2a00:d3a0::/29": "15600", - "2400:8000::/45": "4800", - "2605:7000::/32": "44444", - "2620:12d:e0a0::/44": "394027", - "2a09:ba00:4::/48": "61323", - "2408:8256:3b6a::/48": "17623", - "2600:370f:3663::/48": "32261", - "2600:6c7f:9010::/48": "20115", - "2804:1544::/32": "28252", - "2804:6ec8::/32": "270618", - "2a05:a880:10::/48": "51964", - "2405:ca40::/32": "134918", - "2606:c380::/32": "11440", - "2a00:4802:5010::/39": "13124", - "2a07:a342:7000::/36": "56655", - "2400:c540:1cd::/32": "59238", - "2404:8000:16::/42": "17451", - "240a:a12b::/32": "142949", - "2620:7c:a000::/48": "32982", - "2620:121:5071::/48": "16509", - "2620:17c::/36": "30641", - "2a0f:c580::/30": "208861", - "2408:80ca::/32": "17816", - "240e:982:8500::/36": "4134", - "2a02:2b80::/47": "45012", - "2607:8400::/32": "3582", - "2804:4158::/32": "267427", - "2806:2f4:800::/40": "265540", - "2409:8904:5970::/40": "24547", - "2610:b0:4072::/40": "3573", - "2806:230:6029::/48": "11888", - "2a03:8940::/32": "49784", - "2a04:4e40:d600::/48": "54113", - "2407:98c0::/32": "139924", - "2600:809:629::/41": "701", - "2a11:e000::/29": "42375", - "2a04:4e40:1800::/48": "54113", - "2001:1a11:87::/43": "42298", - "2402:800:6901::/35": "7552", - "2408:8256:2c83::/48": "17816", - "2409:8c85:2020::/47": "9808", - "240e:473:120::/41": "140486", - "2804:14c:5b88::/43": "28573", - "2a00:d000::/29": "34790", - "2a09:bac0:80::/47": "13335", - "2c0f:3200::/47": "37558", - "2001:559:31f::/48": "33491", - "2400:1a00:b021::/41": "17501", - "2607:e600::/32": "32719", - "2608:8105:1::/48": "1733", - "2a00:e440::/32": "56876", - "2a02:26f7:be41::/46": "20940", - "2001:559:2c6::/48": "33662", - "2001:5e8::/32": "5050", - "2001:678:6c::/48": "199670", - "240a:ad95::/32": "146127", - "2600:6c7f:91e0::/44": "19115", - "2a02:26f7:da00::/48": "36183", - "2620:10f:a000::/47": "54496", - "2400:0:810::/41": "4766", - "2402:3a80:c034::/47": "38266", - "2408:840d:1c00::/42": "17621", - "2605:9700::/32": "46785", - "2803:34c0::/32": "264806", - "2804:145c:8f90::/41": "263327", - "2600:c0f::/32": "10910", - "2620:54:2000::/48": "396997", - "2804:5d20::/32": "268952", - "2804:654c:200::/40": "269481", - "240a:a802::/32": "144700", - "2804:3a68::/32": "266087", - "2a0d:4b80::/29": "16245", - "2a0e:3780:1::/48": "41652", - "2001:579:5a44::/43": "22773", - "2804:58d0::/32": "268151", - "2806:230:1014::/48": "265594", - "2a02:26f7:efc5::/46": "20940", - "2a06:dbc0::/29": "5578", - "2001:559:c1d4::/48": "33659", - "2408:8459:ef50::/35": "17816", - "2600:1008:b1f0::/33": "22394", - "2620:55:8000::/48": "53804", - "240a:ae77::/32": "146353", - "240e:108:1090::/48": "58542", - "2600:1408:5001::/37": "20940", - "2620:105:f000::/40": "4201", - "2001:57a:200::/37": "33438", - "240e:966:1800::/37": "133774", - "2001:67c:1b38::/48": "203688", - "2001:1248:8755::/42": "11172", - "2600:140f:3600::/48": "9498", - "2600:141c:2001::/35": "20940", - "2600:6c38:a9b::/45": "20115", - "2607:fcd0:fa80:590a::/54": "8100", - "240a:ac78::/32": "145842", - "2801:17:a800::/48": "19429", - "2a09:4980::/32": "39360", - "2001:559:861f::/48": "33651", - "2400:cb00:408::/47": "13335", - "2404:f000::/32": "18001", - "2600:380:7980::/38": "20057", - "2600:2c01:1000::/36": "27582", - "2603:f3a0::/29": "396356", - "2804:b30:8000::/33": "52748", - "2620:11a:b000::/44": "12276", - "2a0b:6880::/32": "206466", - "2800:160:2022::/43": "14259", - "2a00:1158:4::/32": "8972", - "2001:4a0::/32": "8134", - "2620:83::/48": "5787", - "2620:171:24::/48": "715", - "2a00:4c20::/32": "6769", - "2001:550:7704::/48": "394346", - "2001:559:844a::/48": "33491", - "2600:1415:6::/44": "20940", - "2001:428:4003::/48": "26062", - "2400:8b00:1600::/42": "45727", - "240a:a3ec::/32": "143654", - "2a02:1800::/24": "6848", - "240a:ad60::/32": "146074", - "2604:680::/32": "40281", - "2804:145c:8f50::/40": "263327", - "2804:635c::/32": "269356", - "2a0c:8640::/30": "3257", - "2409:8c15:9800::/30": "56044", - "240a:a51f::/32": "143961", - "2a01:430::/43": "24971", - "2a01:9700:10c0::/44": "8376", - "2a0c:b641:5b0::/48": "213015", - "2c0f:f578:30::/32": "24691", - "2001:fd8:160::/48": "132199", - "2406:2000:1a8::/46": "10310", - "2600:141c:7::/48": "8151", - "2a02:26f7:d400::/48": "36183", - "2a03:6505:2000:7::/32": "6731", - "2400:580:9::/48": "4766", - "2404:f100:e000::/38": "17483", - "2403:c000:1001::/37": "4741", - "2a06:52c0:1::/46": "201483", - "2406:7900:7226::/48": "132300", - "2600:140f:1c01::/38": "20940", - "2a0a:1c00::/29": "207187", - "2001:559:c06a::/48": "33657", - "2a01:8840:65::/48": "207266", - "2a09:ea80::/29": "213314", - "2a01:58a0::/39": "51018", - "2001:67c:27c4::/48": "213032", - "2404:bf40:e703::/40": "139084", - "2606:6680:21::/45": "40676", - "2804:ec8::/32": "262532", - "2804:7b5c::/48": "271427", - "2001:559:2cf::/48": "20214", - "2607:f6f0:c000::/40": "29884", - "2a06:8080::/29": "31349", - "2a07:6cc0:60::/48": "61098", - "2a0b:cdc0::/31": "35790", - "2401:7400:e002::/36": "4773", - "240a:a353::/32": "143501", - "2620:0:5080::/48": "26462", - "2a02:26f7:d64d::/46": "20940", - "2001:559:81a9::/48": "33651", - "2001:49f0:d0d9::/46": "2914", - "2402:8100:cb0::/35": "55644", - "2804:1f18::/32": "52890", - "2804:7a34::/32": "271355", - "2a04:ff00:500::/48": "23470", - "2a02:47a0:a::/48": "49673", - "2001:559:c0c1::/48": "33652", - "2001:1b70:82cb::/48": "158", - "2404:5c40::/48": "136003", - "2620:a8:c000::/48": "32425", - "2804:4870:7400::/32": "267121", - "2804:5a10::/32": "268746", - "2a02:26f7:f588::/48": "36183", - "2a02:4f40::/32": "51464", - "2c0f:f058::/32": "32860", - "2804:3538::/32": "266275", - "2804:3cc4::/32": "266233", - "2a00:2000::/22": "5400", - "2a06:e881:2604::/48": "49745", - "2001:559:28f::/48": "33659", - "2001:7fd::/32": "25152", - "2406:7400:10::/46": "24309", - "2409:8904:56b0::/39": "24547", - "2a03:2880:f26a::/47": "32934", - "2a0b:680::/29": "43853", - "2001:559:718::/48": "33657", - "2001:18b8:43::/39": "29789", - "2600:802:1109::/31": "701", - "2620:10a:c000::/44": "15301", - "2600:380:f1e4::/43": "20057", - "2801:132::/44": "19429", - "2a02:4c8:b0::/32": "9070", - "2001:678:f38::/48": "211362", - "2405:bfc0::/32": "140042", - "2604:9d40::/48": "393290", - "2a06:e881:5800::/45": "204003", - "2001:67c:5e8::/48": "28681", - "2404:3d00:40d8::/42": "3573", - "2a04:f400:3001::/48": "15404", - "2a0c:4380:38f6::/48": "51945", - "2402:9d80:300::/40": "131429", - "2804:5f44::/32": "269088", - "2404:99c0::/32": "132196", - "2409:8020:1021::/43": "56046", - "2602:fc42:1::/48": "398017", - "2801:80:25b0::/48": "268014", - "2804:12d8::/32": "263500", - "2a00:1140:3::/38": "44806", - "2a04:5ec7::/48": "62154", - "2001:678:2c4::/48": "12731", - "2408:8459:3640::/36": "17816", - "240e:e9:6000::/37": "134756", - "2800:68:37::/48": "27947", - "2804:a4::/32": "53089", - "2a02:2010:2090::/45": "20978", - "2a02:2ab0:510::/38": "702", - "2402:7400:3000::/33": "38883", - "2605:3380:4d01::/48": "395174", - "2804:3fa4::/32": "265904", - "2a01:51c2::/29": "29422", - "2a02:908::/32": "3209", - "2402:800:39e0::/44": "7552", - "2402:5680:a000::/36": "133798", - "2600:9000:1113::/42": "16509", - "2610:28:f021::/36": "81", - "2803:5c80:6001::/48": "64114", - "2a00:1850:2ea::/48": "29357", - "2a06:300::/29": "51093", - "2a0b:c3c0::/29": "12329", - "2600:141c:5000::/48": "8151", - "2803:4300::/32": "263759", - "2001:dc4::/32": "23774", - "2604:9d40:1f9::/48": "7018", - "2605:9480:1300::/40": "31775", - "2602:ff96:14::/48": "8100", - "2c0f:ed28::/32": "328453", - "2001:c38:9125::/48": "9931", - "2409:8087:4500::/36": "9808", - "2a00:8c60:1::/48": "60706", - "2a03:2b40::/32": "16143", - "2a04:9b40::/32": "21305", - "2a0d:6180::/29": "200899", - "2a10:8b40::/32": "42369", - "2408:8456:9440::/38": "17816", - "2600:380:a080::/39": "20057", - "2605:7940:1::/46": "30456", - "2804:a64::/32": "52893", - "2804:3774:2300::/37": "266416", - "2a0f:9400:7370::/44": "213092", - "2600:140f:b000::/48": "9498", - "2604:8f40::/32": "23423", - "2a09:5240::/48": "34775", - "2001:559:88::/48": "7015", - "2001:4998:18::/48": "36088", - "2402:e380:127::/44": "139073", - "2803:7680:a000::/33": "22541", - "2a0f:3dc0::/29": "207902", - "2603:b0e0:feee::/39": "11796", - "2605:3940::/32": "397566", - "2a03:4400::/32": "28999", - "2001:67c:28dc::/48": "28674", - "2001:1248:a4b8::/45": "11172", - "240a:aa6e::/32": "145320", - "2603:c0f8:2910::/38": "20054", - "2804:4e74:c100::/34": "268262", - "2806:230:2039::/48": "11888", - "2a03:58a0::/32": "201330", - "2001:559:80ac::/48": "33668", - "2001:1248:99a7::/44": "11172", - "2409:8050:2002::/40": "56047", - "2804:56c0::/32": "268021", - "2a00:d880::/45": "198203", - "2a0f:e080::/48": "202971", - "2407:5280::/38": "133557", - "2409:8a04:6a00::/32": "24547", - "2804:7e90:fc00::/38": "271632", - "2806:230:2014::/48": "265594", - "2a09:e0c0::/29": "64421", - "2606:2800:7a0c::/48": "15133", - "2800:68:12::/47": "61468", - "2a07:3b80:4::/29": "47869", - "2001:bf7:1360::/32": "44194", - "2402:800:559b::/41": "7552", - "2402:1180::/32": "134076", - "2402:f200::/32": "18196", - "2403:780:ff00::/40": "64098", - "2406:6940::/41": "141047", - "2804:5518::/32": "268689", - "2001:559:5dd::/48": "33659", - "2001:fd8:f0f0::/39": "4775", - "2405:6e00:2440::/42": "133612", - "2800:830::/31": "19114", - "2804:29b8:1400::/33": "28126", - "2a00:ad87:4601::/48": "22216", - "2a02:26f7:e8::/48": "36183", - "2a02:26f7:d150::/48": "36183", - "2a07:2d40::/48": "25435", - "240a:a3d3::/32": "143629", - "2600:140b:4001::/38": "20940", - "2804:6c14::/32": "270444", - "2a01:8840:7d::/48": "207266", - "2a02:26f7:dfc9::/46": "20940", - "2a02:2e02:9230::/40": "12479", - "2804:7984::/32": "271310", - "2401:d800:990::/42": "7552", - "2408:8459:3820::/44": "17816", - "2a0f:7300::/32": "50113", - "2001:559:8078::/47": "7015", - "240a:a470::/32": "143786", - "2806:10ae:5::/44": "8151", - "2a09:bac0:19::/48": "13335", - "2001:df5:8480::/48": "136897", - "2408:896c::/32": "4837", - "2620:19:2000::/48": "803", - "2804:1e10::/32": "53122", - "2a10:4646:15::/48": "212066", - "2001:67c:18b0::/48": "35684", - "2408:8956:a800::/40": "17622", - "2800:600::/39": "52323", - "2409:8c28:5f91::/34": "56041", - "2606:2800:4a30::/46": "15133", - "2604:d600:536::/41": "32098", - "2606:5180::/32": "7992", - "2607:f3f0:3::/32": "16724", - "2607:fc48:438::/48": "40009", - "2a02:26f7:ee09::/42": "20940", - "2001:678:ce4::/48": "60557", - "2800:550:2a::/48": "20940", - "2804:14d8:c000::/34": "263354", - "2a02:6680:1100::/44": "16116", - "2a0d:41c0::/32": "204179", - "2c0f:fbf4:8001::/28": "32653", - "2a0e:1d80::/47": "203523", - "2402:800:96c5::/42": "7552", - "2408:80f1:80::/39": "17621", - "2409:8904:5d70::/40": "24547", - "240a:a604::/32": "144190", - "240e:947:6000::/32": "4134", - "2800:490:4e00::/39": "27951", - "2a02:26f7:db44::/48": "36183", - "2001:559:c1ec::/48": "33651", - "2408:8459:ce30::/41": "17622", - "240a:aeaf::/32": "146409", - "2604:d600:104d::/43": "32098", - "2620:b0:4000::/48": "209", - "2a02:26f7:c301::/46": "20940", - "2001:559:c1f5::/48": "20214", - "2001:678:128::/48": "205236", - "2001:678:8f0::/48": "209619", - "2406:b640:4100::/48": "139138", - "2600:370f:20e1::/46": "32261", - "2001:67c:27f8::/48": "51040", - "2001:1aa0::/29": "12301", - "2403:9800:c050::/42": "4648", - "2804:33f0:2a4::/32": "265426", - "2401:d800:5620::/41": "7552", - "240e:721::/29": "4134", - "2804:298:2013::/32": "53087", - "2001:559:82a2::/48": "7922", - "2001:16a2:6100::/40": "39386", - "240e:3bd:9200::/36": "140317", - "2600:141b:6000::/48": "3257", - "2a0e:9300:42c0::/48": "62184", - "2408:8459:1810::/42": "17623", - "2602:80b:a000::/47": "399791", - "2602:fd2f:10::/44": "33229", - "2620:10c:f004::/48": "33459", - "2803:2200::/32": "263174", - "2804:5048::/32": "268379", - "2a0a:8887:1::/48": "59922", - "2001:559:34b::/48": "7922", - "2400:d280:a::/32": "45648", - "2606:4540::/32": "399571", - "2a0f:ff40::/29": "207641", - "2400:cb00:a2e0::/47": "13335", - "2401:d800:71f0::/38": "7552", - "240e:3b4:2c00::/35": "134774", - "240e:3bb:2800::/38": "4134", - "2a0d:6d00::/29": "49223", - "2001:67c:2488::/48": "48258", - "2a00:1678:3cc0::/48": "49453", - "2a01:9e00:ac54::/29": "41495", - "2a02:26f7:fa45::/46": "20940", - "2001:559:c288::/48": "33660", - "2001:678:a9c::/48": "39702", - "2001:b000:590::/47": "131660", - "2405:9800:c881::/39": "45430", - "240e:108:1185::/43": "4134", - "240e:3ba:c800::/37": "4134", - "2a02:2e02:6b0::/41": "12479", - "2401:4900:1b10::/42": "45609", - "240e:3b7:8200::/35": "140316", - "2620:0:860::/46": "14907", - "2800:200:f181::/41": "12252", - "2a0a:a2c0:2::/29": "205992", - "2a11:dc00::/29": "42375", - "2a04:e00:10::/46": "54103", - "2001:559:866b::/48": "33287", - "2600:1408:e800::/48": "35994", - "2607:fcd0:fa80:4506::/54": "8100", - "2a02:ec0::/38": "41653", - "2001:67c:2070::/48": "200000", - "2409:803c:1100::/37": "9808", - "2001:1a20::/32": "8607", - "2402:800:9755::/42": "7552", - "2408:840c:c700::/40": "17621", - "2804:4390::/32": "28194", - "2a05:33c0::/48": "201522", - "2001:43f8:92::/48": "37708", - "2402:8100:3058::/42": "55644", - "2804:2e74::/45": "265347", - "2806:230:1300::/45": "265594", - "2c0f:f7a8:8150::/48": "4134", - "2600:1480:e801::/37": "20940", - "2a03:84a0::/44": "29990", - "2001:67c:1088::/47": "8426", - "2001:4490:4eb4::/44": "9829", - "2400:cb00:260::/47": "13335", - "2604:e880::/32": "40156", - "2804:21f8:180::/32": "262272", - "2a01:8840:82::/45": "12041", - "2a0b:3900::/31": "58310", - "2001:1810::/42": "14116", - "2408:840d:7500::/42": "17621", - "240a:af8f::/32": "146633", - "2401:8000::/38": "9919", - "2405:3000::/32": "3661", - "240a:a406::/32": "143680", - "2620:13:4000::/48": "16652", - "2803:ad20::/32": "266703", - "2a02:26f7:c408::/48": "36183", - "2a04:92c7:f::/43": "62240", - "2a00:1aa8::/29": "42189", - "2001:550:c00:103::/61": "174", - "2404:c2c0:8000::/36": "135629", - "240a:a83f::/32": "144761", - "2801:13e:6::/40": "19429", - "2804:160::/32": "28195", - "2804:37d0:4::/33": "266437", - "2806:230:2018::/48": "265594", - "2a06:cc80::/29": "203659", - "2a0f:e586::/32": "207656", - "2001:a08::/32": "39326", - "2401:803e:4025::/31": "9919", - "240a:aa9a::/32": "145364", - "2606:d280::/32": "394625", - "2620:12a:600a::/45": "32578", - "2001:1878:500::/40": "127", - "2401:ff80:1709::/46": "133954", - "2600:1408:c::/43": "20940", - "2620:132:6000::/48": "21701", - "2806:1040:fd::/32": "8151", - "2401:d800:9720::/41": "7552", - "2402:800:7820::/41": "7552", - "240a:a99a::/32": "145108", - "2610:e8:8000::/33": "6223", - "2804:3e8c::/32": "266605", - "2001:418:8404:2::/35": "2914", - "2001:559:8272::/48": "33651", - "2001:db0:3800::/33": "17766", - "2603:90f2::/32": "7843", - "2a0a:9302::/32": "35196", - "2a0f:56c0::/48": "48749", - "2c0f:f6f8::/32": "37589", - "2001:590:3804::/37": "3257", - "2804:870:fffb::/45": "52871", - "2a01:8840:41::/48": "207266", - "2402:3a80:500::/41": "38266", - "2406:840:e140::/48": "142164", - "240a:a77f::/32": "144569", - "2610:20:8804::/46": "2648", - "2405:db00::/32": "9268", - "240a:a55e::/32": "144024", - "2607:fd28:a000::/48": "23148", - "2610:20:8800::/46": "3477", - "2804:7e24::/32": "271605", - "2a02:cb43:9000::/47": "20546", - "2a04:a1c0:17::/48": "43059", - "2404:a800:1611::/34": "9498", - "240a:a48d::/32": "143815", - "240e:e1:d101::/30": "4812", - "2604:d600:1c0b::/43": "32098", - "2803:e880:8108::/45": "52468", - "2a02:17f8::/32": "44700", - "2a02:26f7:d084::/48": "36183", - "2a06:6080::/40": "204180", - "2409:8c28:30b1::/39": "56041", - "2620:10a:80ad::/48": "55195", - "2804:1b2:4000::/41": "18881", - "2804:7dd0::/32": "271584", - "2a06:79c0:2::/29": "15622", - "2400:7b80::/30": "133193", - "2605:2400:300::/37": "19528", - "2804:638c::/32": "269368", - "2620:74:a0::/48": "30060", - "2a09:dc00::/30": "8553", - "2001:1250:e600::/44": "22894", - "2620:63:2000::/48": "18966", - "2804:5928::/32": "268172", - "2a02:26f0:5d01::/38": "20940", - "2a05:7600:2::/48": "203438", - "2001:559:8541::/48": "22909", - "2400:be00::/48": "4847", - "240a:a86b::/32": "144805", - "2600:1480:b800::/48": "21342", - "2a01:6da0::/32": "3249", - "2a0e:b107:1340::/44": "212359", - "2402:800:bf60::/40": "7552", - "2607:fc10::/32": "46609", - "2a0f:7600::/32": "43847", - "2001:559:80d8::/47": "7922", - "2001:678:5dc::/48": "204675", - "2001:df0:be::/48": "7467", - "2409:8924:9b00::/37": "56046", - "2a02:5320:900::/40": "12189", - "2001:559:8458::/48": "33659", - "2402:e280:2000::/39": "134674", - "2408:8459:22c0::/37": "17816", - "2a04:7680::/29": "9007", - "2001:67c:213c::/48": "43681", - "2408:8459:6850::/38": "17816", - "240e:473:5d20::/41": "140486", - "2606:8980::/32": "394368", - "2606:9b00::/32": "35894", - "2607:fb90:bd00::/33": "21928", - "2620:119:500e::/47": "13443", - "2001:4488:7008::/32": "7713", - "2400:c600:1331::/48": "24389", - "2600:9000:11ba::/47": "16509", - "2804:5ce8:9100::/33": "268938", - "2a01:8280::/34": "44735", - "2a01:c50f:1600::/36": "12479", - "2a02:e980:15e::/42": "19551", - "2a03:7400::/29": "39642", - "2001:559:829c::/46": "7015", - "2001:67c:290c::/48": "212113", - "2001:67c:2bdc::/48": "205700", - "2a00:4520::/44": "42961", - "2a00:ed40::/32": "51043", - "2a02:26f7:d550::/48": "36183", - "2a03:4900:fffb::/45": "197695", - "2604:cc00:801::/48": "53292", - "2606:7080::/32": "13727", - "2804:1964::/32": "61792", - "2a02:2e02:1230::/41": "12479", - "2a0a:6bc0::/29": "60059", - "2408:8456:4210::/42": "134543", - "2800:110:2800::/48": "27875", - "2a03:7c80::/32": "25176", - "2403:bd80::/32": "59105", - "2404:0:8240::/37": "131591", - "240e:67a:e600::/31": "4134", - "2602:fed2::/48": "53356", - "2620:117:c000::/48": "21837", - "2a02:2698:a100::/40": "9049", - "2409:8009::/30": "9808", - "2803:5440:4053::/45": "264738", - "2401:803e:2001::/42": "9919", - "2402:4200:f000::/48": "24284", - "2600:100c:9210::/33": "22394", - "2a03:b500:2080::/35": "41135", - "2a03:db80:2c15::/35": "680", - "2a02:53c0::/32": "210306", - "2400:e480::/44": "131588", - "2405:3d40::/32": "139523", - "240e:473:1450::/39": "4134", - "2620:12c:9020::/48": "395359", - "2804:7a8:200::/32": "262309", - "2804:49f4::/32": "6453", - "2806:2f0:60a1::/41": "17072", - "240a:a334::/32": "143470", - "240e:874:300::/41": "140638", - "2600:370f:738e::/42": "32261", - "2607:f6f0:e000::/40": "398814", - "2001:559:c0a2::/48": "33659", - "2001:dc7:de00::/34": "24151", - "2001:fb0:109f:15::/48": "7470", - "2400:6300:1f::/48": "38746", - "2a10:7680::/32": "209056", - "2001:559:857e::/47": "33657", - "2001:559:8650::/48": "33491", - "240e:44d:2e00::/41": "140345", - "2804:4860::/32": "267117", - "2a01:7ee0::/48": "1257", - "2001:559:c1::/48": "33667", - "2400:e340::/46": "136450", - "2408:8a00:e000::/31": "9929", - "240a:a7ea::/32": "144676", - "2804:291c::/35": "263998", - "2804:734c::/32": "270906", - "2401:7540::/32": "132590", - "2801:140:121::/45": "262249", - "2a0b:79c0::/29": "8426", - "2404:1c40:b0::/41": "24432", - "2804:57bc::/33": "268083", - "2a02:7c8::/32": "24864", - "240e:f9:8000::/34": "134773", - "2607:fb10:7192::/41": "2906", - "2804:5284:e000::/35": "268523", - "2a02:590::/29": "21263", - "2a02:26f7:f8cd::/46": "20940", - "2a03:c8c0::/29": "50476", - "2a04:4e42:fd8::/42": "54113", - "2001:67c:2308::/48": "39538", - "2403:300:a13::/48": "714", - "240a:ad2b::/32": "146021", - "2a02:26f7:f445::/46": "20940", - "2803:6c20::/32": "265830", - "2804:43a0::/34": "267580", - "2001:559:10c::/48": "7015", - "2001:559:233::/48": "33666", - "2001:559:c136::/48": "20214", - "2001:df3:2a80::/48": "17920", - "2400:ca02:f0e3::/39": "23688", - "2401:d800:7b0::/41": "7552", - "2401:2a80:4::/32": "58793", - "240a:a5f5::/32": "144175", - "240e:108:87::/48": "4134", - "2600:1409:4001::/36": "20940", - "2804:2d98::/32": "61579", - "2a02:26f7:db0d::/46": "20940", - "240a:aff8::/32": "146738", - "2604:8200:1400::/38": "23089", - "2804:39b0::/32": "266044", - "2a0a:89c0::/29": "206010", - "2a0d:3340:c000::/35": "36492", - "2001:579:407f::/40": "22773", - "2806:370:5460::/40": "28403", - "2c0f:1a00::/32": "37603", - "2402:2f80::/48": "36351", - "240a:a168::/32": "143010", - "2600:9000:a120::/41": "16509", - "2404:f4c0:f94c::/48": "142551", - "2620:75:6000::/48": "397800", - "2a02:6000:ffff::/48": "35130", - "2a0c:b641:194::/44": "57853", - "2600:100a:a100::/44": "6167", - "2620:149:65::/43": "714", - "2001:df1:6003::/48": "9318", - "2620:100:3002::/48": "23286", - "2a00:13f8:fffc::/48": "13055", - "2a04:e702:97f::/48": "9044", - "2001:7d8::/32": "12329", - "2403:7e00::/32": "7546", - "240a:ade9::/32": "146211", - "2604:5940::/32": "395839", - "2804:5534:2002::/37": "268696", - "2a0e:b107:af0::/44": "50798", - "2402:8100:2100::/44": "45271", - "2001:559:73::/48": "33287", - "2402:800:9163::/43": "7552", - "240a:a828::/32": "144738", - "240e:964:9800::/33": "4134", - "2a09:e240::/48": "57706", - "2a0a:cc80::/47": "206667", - "2a0e:b105:718::/46": "20473", - "2401:d800:7130::/41": "7552", - "2404:3d00:400::/40": "21433", - "2600:370f:7345::/42": "32261", - "2604:d600:15a8::/45": "32098", - "2a02:26f7:c48c::/48": "36183", - "2401:0:6f00::/40": "58470", - "2600:6:ff00::/45": "10507", - "2804:1040:888b::/34": "263626", - "2a04:f310::/31": "12344", - "2a0b:2ac0::/29": "41366", - "2001:df4:a300::/48": "135817", - "2400:5800:5::/32": "38712", - "2600:100d:9100::/44": "6167", - "2804:1620::/32": "263269", - "2a02:26f7:e600::/48": "36183", - "2404:9ac0::/32": "37981", - "2800:a30::/37": "262187", - "2a01:41a0::/32": "62282", - "2001:6d0:6d08::/48": "205022", - "2402:f000::/32": "45576", - "240a:a141::/32": "142971", - "240a:a30d::/32": "143431", - "2804:4eb8::/32": "268277", - "2a02:2780::/32": "35434", - "2a07:7400::/29": "203964", - "2001:559:8635::/48": "33651", - "2001:df0:23e::/48": "9752", - "2804:3b34:6002::/35": "266135", - "2a0d:8d80::/32": "31424", - "2400:9800:d::/43": "24203", - "240e:1f:e000::/26": "4134", - "2602:ffc5:164::/48": "212032", - "2620:a::/48": "36008", - "2806:2f0:4124::/41": "17072", - "2c0f:ead0::/32": "328568", - "2401:8800:400::/40": "17439", - "2401:d800:bd0::/37": "7552", - "2a05:e740:160::/46": "29108", - "2001:559:80d0::/48": "22909", - "2001:df0:456::/48": "55904", - "2001:1a10:200::/36": "8781", - "2400:4e80:7a00::/32": "131584", - "2405:203:886::/47": "55836", - "240e:fe:a000::/35": "136198", - "2a05:da00::/29": "200984", - "2804:235c:c::/36": "52747", - "2804:649c:8000::/40": "61598", - "2a02:26c8::/32": "13156", - "2a02:26f7:7d::/48": "20940", - "2402:6640:24::/36": "134995", - "240a:a47b::/32": "143797", - "2001:559:839b::/48": "7016", - "240a:a740::/32": "144506", - "240e:3bd:d000::/36": "134772", - "2604:5d00::/32": "11915", - "2607:b080::/38": "29838", - "2001:67c:26f4::/48": "57821", - "2001:1530::/32": "2586", - "2402:3680::/32": "135543", - "2600:1417:34::/46": "20940", - "2602:fde8::/36": "398020", - "2a06:7580::/29": "203460", - "2a02:26f7:cd08::/48": "36183", - "2001:559:2cd::/48": "7922", - "2001:559:49a::/47": "21508", - "2001:559:8682::/48": "33657", - "2401:8800:600::/40": "17439", - "2405:6e00:2200::/43": "133612", - "2600:141c:8::/35": "20940", - "2804:e94:122::/43": "262468", - "2402:cb40::/32": "135132", - "2602:ff25::/39": "394346", - "2a04:ac00:9::/46": "203004", - "2606:ae00:b000::/38": "7287", - "2804:16d8:56f1::/34": "262729", - "2a02:26f0:8e01::/39": "20940", - "2a02:26f7:da88::/48": "36183", - "2a03:a6c0::/32": "201502", - "2a06:8401:3::/29": "198463", - "2a0b:4340:c6::/48": "44421", - "2607:ad00::/32": "30325", - "2804:41f4:2000::/38": "267468", - "2806:260:1000::/44": "13999", - "2a02:26f0:34::/47": "20940", - "2a06:dc40::/29": "29182", - "2408:8262::/29": "4837", - "240a:a0f8::/32": "142898", - "2001:67c:2f48::/48": "51273", - "2606:9780::/32": "394141", - "2a02:26f7:f608::/48": "36183", - "240a:a28f::/32": "143305", - "240e:f:c000::/37": "4134", - "2605:a401:88fd::/39": "33363", - "2607:b80:4::/32": "30247", - "2a10:8680::/29": "197071", - "2001:559:8559::/46": "7015", - "240a:a4fc::/32": "143926", - "2a00:b6c0::/29": "35170", - "2001:4488:f862::/39": "7713", - "2409:802f:2909::/38": "56041", - "2a02:26f0:2::/45": "20940", - "2001:438:fffd:19::/64": "17025", - "2600:9000:103e::/48": "16509", - "2401:ff80:1601::/45": "133954", - "2402:28c0:3::/45": "136620", - "2a02:26f7:d981::/46": "20940", - "2804:14d:1a88::/41": "28573", - "2806:230:3006::/48": "265594", - "2001:559:7bc::/48": "7016", - "240e:980:8700::/40": "4134", - "2a05:83c0::/29": "201248", - "2402:e280:1000::/47": "134674", - "2803:7e60::/32": "262186", - "2804:64e4::/32": "269456", - "2a01:aa80::/48": "3301", - "2403:7c00::/32": "10001", - "240e:105:ee00::/39": "58563", - "2a09:a4c7:6000::/32": "208861", - "2a0b:c600::/29": "51344", - "2402:800:351d::/42": "7552", - "240e:473:8950::/40": "4134", - "2804:3dc:a10::/32": "52967", - "2a04:9a40::/29": "51373", - "2a10:c941:11:11::/30": "35277", - "2001:1248:574b::/42": "11172", - "2405:9800:7::/48": "45458", - "2a10:7a40:a::/48": "39910", - "2402:c780::/32": "134232", - "2604:3d80:804::/48": "394302", - "2409:8020:1031::/41": "56046", - "2804:5bfc::/32": "268881", - "2a02:26f7:c809::/42": "20940", - "2001:559:1de::/47": "33651", - "2408:8459:2010::/42": "17623", - "2a0e:7400::/29": "39305", - "2c0f:f850:dc04::/47": "327979", - "2407:7a80::/43": "132384", - "240a:a08f::/32": "142793", - "2806:2f0:95a0::/41": "17072", - "2a01:c50e:df00::/34": "12479", - "240e:108:11c2::/43": "4134", - "240e:979:f00::/40": "138950", - "2603:c001:2410::/38": "31898", - "2604:5500:c00::/42": "19165", - "2604:d600:1622::/45": "32098", - "2804:3c::/32": "28576", - "2a00:d680::/32": "31708", - "2401:d800:f320::/41": "7552", - "2405:1c0::/33": "55303", - "240a:a022::/32": "142684", - "2801:1fc:26::/48": "27951", - "240a:ab80::/32": "145594", - "2804:5474:7::/32": "268651", - "2a10:88c0::/29": "49808", - "2001:3c8:1307::/44": "4621", - "2408:8456:cc40::/40": "17816", - "2602:803:4072::/47": "398223", - "2001:559:85f8::/48": "33662", - "2001:67c:1680::/48": "212037", - "2620:115:83::/41": "18888", - "2a0a:ec02:ff00::/48": "42692", - "2a00:cba0::/32": "21476", - "2001:678:8f8::/48": "206884", - "2404:ef00::/32": "4622", - "2407:a600:4000::/36": "18004", - "2408:8956:4300::/40": "17816", - "240a:a747::/32": "144513", - "2607:9800:c141::/35": "15085", - "2620:66:6000::/48": "54345", - "2001:1b70:82a3::/48": "158", - "2401:3c00:180::/42": "38322", - "2409:8030:1010::/40": "9808", - "2409:803c:2800::/38": "24444", - "2604:a840::/46": "6233", - "2a02:d5c0::/29": "49565", - "2605:f100::/32": "14265", - "2804:1d20:2600::/32": "264349", - "2804:52e0::/32": "268547", - "2804:75a4:100::/32": "271060", - "2a06:9cc7:ff11::/46": "8666", - "2001:503:eea3::/48": "397197", - "240a:a7e5::/32": "144671", - "2620:ff:4000::/48": "394566", - "2804:59fc:2000::/35": "268738", - "2a02:26f7:e7d0::/48": "36183", - "2001:67c:1be8::/48": "57692", - "2001:b08:9::/48": "3267", - "2804:1ddc::/32": "263258", - "2a02:1620::/32": "1290", - "2a06:e881:1200::/44": "202928", - "2001:4b98:aaac::/39": "29169", - "2800:a30:ed31::/35": "262187", - "2803:a2e0::/32": "269921", - "2a02:2e0:421::/29": "12306", - "2001:438:fffd:6c::/64": "7181", - "2001:506:30::/48": "13830", - "240a:aab5::/32": "145391", - "240a:ad89::/32": "146115", - "2607:f740:e621::/48": "63911", - "2a02:4a20::/32": "30742", - "2408:8459:4210::/42": "17623", - "2603:c021::/35": "31898", - "2804:68bc::/32": "269712", - "2a02:aec0:1::/46": "57363", - "2001:559:8492::/48": "33667", - "2001:978:904::/44": "174", - "2402:2000:7001::/32": "24350", - "2408:8256:2f6d::/48": "17816", - "2605:9b80::/32": "14828", - "2606:f900:a801::/37": "812", - "2a02:26f7:eac1::/46": "20940", - "2404:4600:fcf::/32": "10158", - "2a00:7fc0::/33": "25291", - "2402:800:5c01::/43": "7552", - "2406:840:5860::/47": "139317", - "2605:8000:23a::/32": "4261", - "2804:14d:5cd5::/42": "28573", - "2a03:402::/32": "29141", - "240a:ad68::/32": "146082", - "2a10:31c4::/30": "398481", - "2001:678:c28::/48": "13195", - "2404:d900::/32": "58656", - "240e:981:9100::/34": "4134", - "2800:490:e800::/39": "27951", - "2804:3d70::/32": "266531", - "2600:140f:4201::/37": "20940", - "2604:d600:2a01::/32": "32098", - "2800:68::/44": "61468", - "2a03:9e43::/32": "141760", - "2a0d:c2c0::/29": "44592", - "2001:510:c011::/34": "376", - "2600:6c38:20::/46": "20115", - "2607:9b80::/40": "46558", - "2a05:5dc0::/29": "201193", - "2001:678:f30::/48": "211398", - "2401:b00:f000::/36": "17564", - "240a:a323::/32": "143453", - "2606:55c0::/32": "399969", - "2a02:26f7:74::/48": "36183", - "2a04:ac00:8::/48": "57010", - "2a0f:4c40::/29": "207923", - "2403:9a00::/32": "7505", - "2607:5500::/31": "54290", - "2804:2750::/32": "263893", - "2a00:1b18::/32": "47527", - "2401:d800:b300::/42": "7552", - "2404:bf40:a5c2::/35": "139084", - "240c:408d:3000::/22": "38365", - "2604:d600:1b02::/45": "32098", - "2804:ac4::/32": "52920", - "2806:32d:b000::/33": "28431", - "2a0a:44c0::/29": "50083", - "240a:a2a5::/32": "143327", - "2a0e:57c0:800::/38": "12731", - "2c0f:f7a8:8210::/47": "4134", - "2001:4878:c007::/44": "12222", - "2402:3580:9011::/48": "134118", - "2406:daa0:e0c0::/44": "16509", - "2a00:de40::/32": "29119", - "2401:d800:9750::/42": "7552", - "2620:171:1c::/47": "715", - "2a03:40:8000::/33": "13003", - "2c0f:ef20::/32": "37611", - "2001:1248:5a4d::/43": "11172", - "2402:400::/32": "7610", - "2804:140c::/32": "263310", - "2001:559:87a2::/45": "7922", - "2804:2580:4000::/35": "264284", - "2804:46d8::/32": "267015", - "2a01:b460::/32": "6830", - "2a0b:b500::/47": "60764", - "2001:559:813d::/46": "33491", - "2408:8656:2cfa::/45": "17623", - "2a09:ed80::/29": "203959", - "2405:9800:d200::/48": "134240", - "240a:aae5::/32": "145439", - "240a:ad53::/32": "146061", - "2605:de40:1005::/34": "397553", - "2001:678:71c::/48": "57265", - "2001:4998:ef6c::/48": "36646", - "240e:438:5620::/43": "140647", - "2001:559:c383::/48": "33652", - "2001:4490:4e34::/44": "9829", - "2401:c5c0:51::/42": "55492", - "2402:800:9aee::/43": "7552", - "2a00:dcc0::/32": "34971", - "2a02:3d0:622::/32": "22822", - "2a02:26f7:c8cc::/48": "36183", - "2001:1248:8401::/44": "11172", - "2401:9d00:1132::/32": "9835", - "2408:8456:7c40::/39": "17816", - "2a01:b180::/47": "57037", - "2a03:ddc0::/32": "199350", - "2001:468:913::/48": "1747", - "2001:9d0::/32": "8387", - "240a:aa72::/32": "145324", - "2607:b400::/40": "1312", - "2620:40:a000::/48": "54495", - "2a02:a10::/32": "60703", - "2a02:1710:4::/48": "44843", - "2001:559:21::/48": "7015", - "2001:559:c1a6::/48": "33662", - "2001:4188::/48": "12880", - "2607:bc80::/32": "31953", - "2804:14d:ba00::/41": "28573", - "2a03:2887:ff0d::/48": "35819", - "240a:a9ea::/32": "145188", - "2800:160:105c::/42": "14259", - "2a02:27c8::/32": "48645", - "2001:470:120::/48": "63343", - "2001:b28:a452::/38": "42065", - "2409:8904:39a0::/38": "24547", - "240e:c0:1800::/37": "63835", - "2600:370f:3628::/47": "32261", - "2604:f400:6000::/37": "40579", - "2001:67c:2dac::/48": "42886", - "2403:1000:4100::/40": "38819", - "2607:fd28:a010::/48": "10913", - "2620:1ec:21::/45": "8068", - "2001:418:1439::/48": "1225", - "2604:bb80::/38": "14602", - "2610:10::/32": "6366", - "2a00:a780::/32": "44229", - "2405:8a00:203a::/41": "55824", - "2607:fc48:440::/48": "40009", - "2804:4080::/32": "265963", - "2001:559:46b::/48": "20214", - "2402:8100:39ed::/46": "55644", - "2402:fb00::/34": "3300", - "2620:128:2000::/44": "395287", - "2a03:db80:4814::/48": "60824", - "2a0b:3901:2::/29": "58310", - "2600:1007:f100::/44": "6167", - "2a02:26f7:dc49::/46": "20940", - "2804:1b0:1000::/36": "18881", - "2a04:a142::/32": "20473", - "2401:7200:2128::/48": "55328", - "240e:3b4:f100::/36": "4134", - "2001:44b8:30f1::/46": "4739", - "240a:af0e::/32": "146504", - "2600:b400::/28": "18254", - "2804:588::/32": "53014", - "2a0a:56c4:8001::/48": "42649", - "2001:1248:9c00::/44": "11172", - "2001:b200:2300::/35": "9505", - "2406:4e40:101::/38": "140966", - "2402:cf80:100::/44": "62597", - "2a01:c50e:9c00::/34": "12479", - "2a02:26f0:8000::/48": "8551", - "2a09:2040::/29": "61157", - "2001:470:fe::/48": "36315", - "2001:559:39b::/48": "33660", - "240a:a164::/32": "143006", - "2600:40ff:ff10::/47": "1321", - "2a03:8600::/35": "3399", - "2a04:4e40:a600::/48": "54113", - "2001:559:3fc::/47": "33652", - "2804:25b0::/32": "264295", - "2804:2bc8::/32": "265175", - "240a:a32b::/32": "143461", - "2803:3520::/32": "266692", - "2804:2e4:aabb::/33": "53234", - "2401:3c00:100::/42": "38322", - "2001:559:162::/48": "7016", - "2001:16a2::/43": "25019", - "2001:4408:1090::/39": "4758", - "2804:2818:b::/32": "263940", - "2a03:a300:800::/35": "35104", - "2a03:bf01::/32": "43529", - "2a0a:340:1000::/40": "48043", - "2001:de8:b::/48": "9825", - "2001:ee0:d140::/38": "45899", - "2408:8957:8a00::/40": "17622", - "2a02:26f7:c680::/48": "36183", - "2a0e:97c0:232::/47": "211704", - "2001:500:a9::/48": "394018", - "240a:ac4c::/32": "145798", - "2620:6f:2000::/48": "397529", - "2804:1a68::/32": "262420", - "2607:f0d0:4::/46": "36351", - "2804:4c4::/32": "28271", - "240a:a1c1::/32": "143099", - "240e:1c:2000::/36": "4134", - "2a00:e860:180::/46": "200129", - "2a02:26f7:d589::/46": "20940", - "2404:f780::/46": "136557", - "2a02:26f7:c391::/42": "20940", - "2401:ff80:1a01::/46": "133954", - "2800:160:2583::/41": "14259", - "2804:62bc:c0cb::/34": "269315", - "2a0a:8600::/29": "61317", - "2a10:7d40::/29": "6939", - "2404:f4c0:1000::/40": "24487", - "2409:801f:3008::/48": "24400", - "2606:6c00:a000::/48": "32787", - "2801:160::/40": "52456", - "2a02:26f7:cbc1::/46": "20940", - "2a02:cf80:3::/45": "35435", - "2a03:69c0::/48": "60601", - "2804:32d8::/32": "28212", - "2804:6544::/32": "269479", - "2a03:a9a0::/32": "22208", - "2a0a:85c0::/29": "35189", - "2001:559:14c::/48": "7016", - "2402:8700::/41": "58979", - "2408:8957:e00::/40": "17622", - "2600:1406:f001::/37": "20940", - "2804:9c::/32": "262695", - "2806:2f0:31c1::/42": "17072", - "2a00:7fc0:8000::/48": "49130", - "2a0f:a300::/32": "44326", - "2804:5e98::/32": "269043", - "2001:253:11a::/45": "38272", - "240e:40:9::/46": "4134", - "2600:b00::/28": "36728", - "2602:103:1000::/36": "20115", - "2605:3380:4138::/45": "12025", - "2620:122::/46": "394186", - "2804:14c:5fe9::/43": "28573", - "2c0f:ef78:d::/46": "63293", - "2001:1248:84d4::/47": "11172", - "240a:a368::/32": "143522", - "2620:149:ae1::/45": "714", - "2a03:94c0::/40": "39326", - "2a0d:e4c4:1000::/32": "208861", - "2001:559:1be::/48": "33667", - "2804:1bf0:2::/32": "61758", - "2804:4a54::/32": "267233", - "2804:5da0::/32": "268983", - "2a02:e840::/35": "15974", - "2a06:fd00::/32": "5488", - "2001:559:c314::/48": "7016", - "2001:4cb0::/32": "29009", - "240a:a9d5::/32": "145167", - "2a02:100e:6b80::/48": "212587", - "2a02:26f7:b9::/46": "20940", - "2a0b:7087:fff0::/44": "50867", - "2001:67c:f0::/48": "50381", - "2a00:bdc0:e007::/44": "28709", - "2a05:a140::/29": "41174", - "2607:f6f0:8000::/48": "32550", - "2a11:780::/29": "208861", - "2a0a:df80:25::/48": "42346", - "2001:559:1ca::/48": "7922", - "2409:8904:4860::/39": "24547", - "240a:aee7::/32": "146465", - "2600:140b:6801::/35": "20940", - "2804:5cf8::/32": "268943", - "2806:2f0:7022::/47": "17072", - "2a03:db80::/34": "680", - "2001:559:497::/48": "7016", - "2404:e100:3002::/47": "55685", - "2800:d302:18::/42": "11830", - "2001:559:7f8::/48": "33657", - "2408:8957:a100::/40": "17816", - "2607:6480::/35": "395336", - "2a0f:9ec0::/29": "211626", - "2001:678:8d4::/48": "1205", - "2a02:26f7:b804::/48": "36183", - "2804:45c8:2::/32": "266949", - "2a05:7400:c000::/34": "60980", - "2001:559:3ad::/48": "20214", - "2001:1388:a::/43": "6147", - "2603:c0f0:2820::/39": "6142", - "2a00:55a0:ea00::/40": "9009", - "2a03:240::/32": "25009", - "2001:43f8:90::/48": "37708", - "2408:8456:600::/42": "17622", - "2607:fcd0:fa80:601::/52": "8100", - "2800:ba0:20::/48": "263812", - "2a02:9b0:28::/33": "35819", - "2a03:cbc0::/29": "61200", - "2a0c:b381::/38": "204731", - "2a0d:c580::/29": "204490", - "2804:2d3c::/32": "265268", - "2001:4860:4805::/48": "43515", - "2401:5a00:ffff::/48": "10032", - "2804:2e48::/32": "265336", - "2a10:e580:4000::/48": "399114", - "2600:140f:1a00::/48": "9498", - "2804:6878::/32": "269694", - "2a09:7:2009::/48": "208982", - "2a0b:2a41::/29": "29014", - "2001:4478:1400::/39": "4802", - "2001:4888:8057::/42": "6167", - "2400:bb00:101::/46": "56274", - "2a07:e080::/29": "202347", - "2402:800:f7b0::/41": "7552", - "2409:8018:4000::/32": "9808", - "240a:ad34::/32": "146030", - "2602:809:9000::/46": "399201", - "2a02:26f7:1c::/48": "36183", - "2a07:8145::/36": "4755", - "2a0c:680::/32": "29182", - "2804:53b0:4011::/32": "268600", - "2a02:26f7:b800::/48": "36183", - "2001:410:a01d::/40": "8111", - "2408:8256:2d97::/44": "17623", - "2409:8904:5740::/42": "24547", - "240a:a679::/32": "144307", - "2607:fee0:a100::/33": "3599", - "2620:12b:4081::/41": "395568", - "2a0f:57c0::/32": "199536", - "2404:f4c0:f3ff::/48": "139299", - "2406:b640::/40": "139138", - "2804:59d8:a200::/35": "268729", - "2804:6e80::/32": "270601", - "2a09:5080:2::/47": "42652", - "2a0d:2d41::/32": "209419", - "240e:980:4d00::/40": "137687", - "2604:8540:fcc0::/48": "33353", - "2a0b:5540::/45": "213002", - "2600:6c38:f0e::/43": "20115", - "2800:cc0::/32": "262210", - "2a0a:22c0::/29": "60167", - "240a:a801::/32": "144699", - "2600:1014:b0f0::/44": "22394", - "2803:600::/32": "18809", - "2804:30fc:4::/32": "263009", - "2001:559:8132::/48": "33491", - "2602:fc59::/40": "19625", - "2803:200::/32": "52284", - "2804:6ff8::/32": "270698", - "2a0a:9340::/48": "60016", - "2409:8924:100::/38": "56046", - "2605:a7c0:120::/48": "14618", - "240a:ae2a::/32": "146276", - "2603:c0ea:4000::/35": "1218", - "2803:2a80:f0::/47": "262928", - "2a01:c50f:fcc0::/39": "12479", - "2a00:1d58:f001::/46": "47524", - "2001:49f0:d0d0::/45": "174", - "2405:9800:c920::/48": "45458", - "2406:3001:20:7::/60": "4657", - "2600:1409:8::/46": "20940", - "2804:62d8::/32": "269322", - "2804:8184::/32": "272459", - "2a00:1288:81::/46": "10310", - "2a0e:4780::/29": "61048", - "2804:1598::/32": "263397", - "2a02:c280::/29": "198725", - "2a03:2880:f20b::/43": "32934", - "2a03:7380:5c00::/42": "13188", - "2001:559:83c8::/48": "33659", - "2001:67c:2fd8::/48": "205496", - "2001:df5:3e00::/48": "38755", - "240e:109:8026::/48": "4134", - "2600:140f:2400::/48": "9498", - "2a02:26f7:ca01::/46": "20940", - "2a02:29ea:1e::/48": "49604", - "2001:df4:7000::/48": "45561", - "2803:fd80:1000::/32": "18747", - "2a0e:7340::/29": "41498", - "2c0f:fb98::/32": "37480", - "2001:67c:2a40::/48": "20712", - "2408:8956:e500::/40": "17816", - "2804:3d6c::/32": "266530", - "2804:3dd0::/32": "266555", - "2804:6a2c::/32": "270317", - "2a02:26f7:d040::/48": "36183", - "2a0d:2582:100::/44": "211367", - "2401:d980:1100::/40": "10138", - "2408:8256:339a::/45": "17623", - "2001:7f8:27::/48": "29535", - "2804:87c::/32": "28202", - "2a02:26f7:d551::/42": "20940", - "2001:468:2610::/48": "396955", - "2001:44b8:309f::/48": "4739", - "240e:37b:aa00::/39": "140330", - "2600:6c32::/31": "20115", - "2a03:2880:f16a::/47": "32934", - "2001:67c:2674::/48": "57684", - "2a02:888:8100:701::/29": "47794", - "2001:559:854e::/48": "33491", - "2001:448a:6030::/41": "7713", - "2806:370:7240::/40": "28403", - "2001:fb0:1078::/48": "55844", - "2804:179c:2016::/35": "263159", - "2a00:d1a0::/47": "61317", - "2a04:dcc0::/29": "201983", - "2600:1004:a100::/43": "6167", - "2607:fff8::/32": "47027", - "2800:160:603::/35": "14259", - "2806:230:5000::/48": "265594", - "2a01:9700:10dc::/46": "8376", - "2402:a00::/32": "45916", - "2607:f680::/32": "26228", - "2a02:568:fe03::/39": "8763", - "2a10:2f00:12a::/48": "9886", - "240a:a39d::/32": "143575", - "2a01:4c01::/32": "58291", - "2a02:23e0::/32": "35393", - "2001:ee0:380::/42": "45899", - "2803:da20::/40": "27951", - "2a02:2ad0:502::/48": "1270", - "2a0a:c800::/30": "39798", - "2600:6c3a:61::/43": "20115", - "2a0b:6b86:b13::/45": "206699", - "2a0f:efc0::/32": "49544", - "2a02:270::/32": "2116", - "2a06:8dc3::/48": "57878", - "2001:c20:4868::/48": "9255", - "2400:cb00:a2d0::/47": "13335", - "2804:984:2e00::/32": "263097", - "2001:67c:2ee8::/48": "49787", - "2001:ee0:3c0::/44": "135905", - "2804:2d34::/32": "265266", - "2a01:7160::/32": "49223", - "2a0c:e740::/33": "51778", - "2a10:4640::/47": "212815", - "2001:418:1401:400::/43": "2914", - "2001:559:81e3::/48": "33652", - "2600:1480:580a::/48": "20940", - "2804:14c:8100::/40": "28573", - "2a01:480::/32": "24961", - "2a02:2718::/29": "30873", - "2a0d:e400::/32": "60363", - "2600:9000:1106::/44": "16509", - "2607:fdc8:10::/48": "30036", - "2804:1968::/32": "61793", - "2001:13b1:3::/32": "3549", - "2402:6880:1000::/48": "63989", - "2605:9780:1400::/40": "36180", - "2804:fb4:2ffb::/32": "263599", - "2a05:9340::/30": "60117", - "2406:da1a::/36": "16509", - "2408:820c:9c30::/34": "17621", - "2804:214:8700::/33": "26615", - "2001:559:51d::/46": "7922", - "240a:a3a6::/32": "143584", - "2610:d0::/32": "3943", - "2800:bf0:280::/44": "52257", - "2a10:2f01:30a::/47": "212568", - "2001:67c:168::/48": "12350", - "2607:d800::/32": "32514", - "2804:726c::/32": "270851", - "2a06:d900::/29": "208861", - "2a0f:fa80::/29": "60262", - "2001:67c:1318::/48": "206594", - "240a:a29b::/32": "143317", - "2620:11:50::/47": "3486", - "2804:244::/32": "262801", - "2804:4d08::/32": "267408", - "2a02:2ad0:120::/43": "702", - "2a0c:9700::/29": "57376", - "2a10:2f01:245::/46": "213316", - "2001:559:8683::/48": "33660", - "2602:feda:b90::/46": "212995", - "2607:fcc8:5000::/36": "11955", - "2803:2a00::/38": "27895", - "2a02:410::/32": "12347", - "2a04:6ac0::/29": "8100", - "2a0f:3cc6::/32": "60735", - "2a0d:10c0::/29": "31566", - "2001:559:80ee::/48": "33659", - "2001:67c:12c::/48": "43692", - "2001:4528::/38": "18101", - "2408:84f3:3040::/44": "17623", - "2409:8062:100::/36": "9808", - "2a02:e0c0:2c00::/38": "9100", - "2a04:c240::/29": "62009", - "2402:800:568d::/43": "7552", - "2605:5fcd::/30": "1239", - "2607:f7a8:606::/48": "397488", - "2804:7070::/32": "270727", - "2a02:cbe0::/31": "197029", - "2a09:7:2008::/48": "3258", - "2001:9c8::/29": "29518", - "2001:ddd::/48": "18369", - "2409:8907:8220::/39": "24547", - "240e:978:6000::/40": "137702", - "2620:100:6012::/42": "19679", - "2800:4b0:8011::/40": "12252", - "2a02:2318::/32": "15766", - "2a10:b600::/32": "212241", - "2001:559:9f::/48": "7922", - "2a0b:11c0:1010::/48": "198682", - "2a0d:77c7:a4e::/34": "7489", - "2406:3003:2000::/42": "55430", - "2605:4c40:abd::/32": "30081", - "2804:3ef8::/32": "266632", - "2001:df1:1080::/48": "136977", - "2001:df5:1680::/48": "45671", - "2404:4a00:8a00::/64": "55423", - "2406:1400:8386::/47": "24342", - "2001:67c:15d8::/48": "43668", - "2001:5000::/36": "1273", - "2408:8957:d8c0::/39": "17816", - "2600:100f:b0d0::/44": "6167", - "2806:2f0:8061::/40": "17072", - "2a0b:b87:ffb7::/48": "59417", - "2406:da70:4000::/40": "16509", - "2001:67c:240::/48": "42473", - "2400:a040::/44": "136237", - "2a07:6fc0:20::/29": "34549", - "2a02:2e02:1bc0::/42": "12479", - "2a0c:b641:250::/44": "210821", - "2001:828::/32": "21155", - "2001:df3:1e00::/48": "55824", - "2001:4de0:ac18::/47": "20446", - "240a:ab9f::/32": "145625", - "2804:27d4::/32": "263924", - "2a02:ac80:301::/37": "25145", - "2a06:c380::/29": "60721", - "2a01:c50f:2c80::/35": "12479", - "2001:559:2e9::/48": "7725", - "2001:c60::/32": "17828", - "2001:1248:704b::/43": "11172", - "240a:a6be::/32": "144376", - "240e:1f:1::/48": "58543", - "2605:9e80::/32": "6099", - "2800:300::/33": "27986", - "2001:559:c2b7::/48": "13367", - "2402:800:9b55::/42": "7552", - "2408:870c:90::/41": "17621", - "2001:559:c014::/48": "33651", - "2001:678:430::/47": "205956", - "2001:4430:5128::/38": "17853", - "240a:ac0c::/32": "145734", - "2804:4cb4:9000::/33": "267386", - "2a01:a420::/29": "201978", - "2a06:3f40::/29": "21466", - "2804:e2c::/32": "262938", - "2806:2f0:3161::/46": "17072", - "2a03:b980::/38": "56730", - "2605:dd40:8202::/48": "398549", - "2804:18e4::/32": "61761", - "2804:21a0::/32": "264565", - "2a06:a900::/29": "213358", - "2a11:e487:1::/48": "212580", - "2600:6c2e:fd4::/32": "20115", - "2603:c0f8:1210::/37": "20054", - "2803:a0a0::/40": "266790", - "2804:2b5c::/32": "265150", - "2804:2e50::/32": "265338", - "2804:3288::/33": "52827", - "2406:8100::/35": "24182", - "2a0f:7ec0:100::/48": "12303", - "240a:a641::/32": "144251", - "240a:aced::/32": "145959", - "2001:49f0:d105::/44": "174", - "2804:693c::/32": "270257", - "2a00:5840::/32": "5631", - "2001:678:e0c::/48": "212783", - "240a:aad8::/32": "145426", - "2a01:cb20:5000::/32": "3215", - "2001:668:121::/46": "54040", - "240a:aae1::/32": "145435", - "240e:44d:1200::/41": "140345", - "2604:3e00::/32": "2552", - "2806:1070::/37": "8151", - "2001:12a0::/45": "28292", - "2408:8256:3789::/48": "17816", - "240a:a0af::/32": "142825", - "2001:fd0:1201::/39": "10029", - "2001:4878:356::/48": "12222", - "240a:a338::/32": "143474", - "2a07:c500::/29": "48501", - "2a0b:1900::/44": "57878", - "240a:a18a::/32": "143044", - "2600:1003:b1b0::/41": "22394", - "2606:6000::/34": "20001", - "2a00:b8c0::/32": "198549", - "2a0f:9400:7382::/48": "53356", - "2001:44c8:3100::/40": "45781", - "240e:a28::/25": "4134", - "2804:51c:a121::/33": "262495", - "2401:8a40:1::/45": "45326", - "240a:ac18::/32": "145746", - "2610:20:3000::/44": "3635", - "2804:190:300::/32": "53165", - "2a01:b340::/32": "15751", - "2a03:2880:f146::/43": "32934", - "2a0d:5642:117::/48": "35487", - "2001:67c:2af4::/48": "8562", - "2607:fad0:40::/44": "53824", - "2620:118:8000::/48": "40885", - "2804:108c:c500::/35": "28146", - "2804:74f8::/32": "271015", - "2a02:cc9::/32": "203065", - "2a02:26f7:f284::/48": "36183", - "2a04:2000::/29": "198184", - "2402:800:59d3::/44": "7552", - "2403:4e00:303::/44": "45528", - "240e:3b9:3e00::/33": "140308", - "2602:fcce:bae::/37": "399200", - "2620:26:4002::/48": "14244", - "2a00:8860:100::/40": "60558", - "2a01:6280::/32": "30900", - "2001:468:2651::/40": "11537", - "2001:4c8:1104::/43": "15290", - "2600:1402:1000::/48": "35994", - "2606:5e80::/32": "22379", - "2804:2748::/32": "263891", - "2a03:ec00:ba00::/33": "12847", - "2405:9d80:5::/32": "45538", - "2800:6c0::/32": "27823", - "2803:9800:9037::/44": "11664", - "2a00:1c40::/32": "39179", - "2a05:6300::/29": "201341", - "2001:559:877e::/48": "7015", - "2001:678:cc8::/48": "41427", - "2804:41d0:c020::/34": "267458", - "2806:28e::/32": "265530", - "2a00:1188:10::/48": "47543", - "2804:178c::/32": "263154", - "2001:218:8400::/33": "2914", - "2001:470:68::/48": "12266", - "2001:df3:bc80::/48": "135067", - "2404:b300:101::/48": "131207", - "240a:a550::/32": "144010", - "2604:900::/32": "14477", - "2620:101:200d::/46": "30215", - "2a0e:6b40:20::/48": "8495", - "2a0e:b107:5c0::/48": "213366", - "240a:adef::/32": "146217", - "2620:101:2011::/46": "30238", - "2803:5440:4049::/48": "264738", - "2803:f7e0:3000::/48": "271773", - "2804:673c:c000::/38": "269615", - "2a02:26f7:ee44::/48": "36183", - "2a0c:4780::/29": "204814", - "2001:559:494::/48": "7016", - "2401:ff80:1c81::/45": "133954", - "2620:4b::/48": "393523", - "2803:29a0::/32": "267710", - "2a04:6b40::/29": "8681", - "2001:559:77f::/48": "7015", - "2001:44b8:4063::/48": "4739", - "2402:600:1001::/32": "38515", - "2407:8000::/43": "9381", - "2803:6700:340::/48": "263210", - "2a02:26f7:e581::/46": "20940", - "2001:67c:17fc::/48": "212024", - "2406:f00:4::/48": "23770", - "2408:80f1:160::/43": "138421", - "240e:982:4000::/39": "134768", - "2620:a2:c000::/48": "46875", - "2620:10d:d004::/47": "15101", - "2801:104:20::/44": "27828", - "2001:559:1c6::/48": "7922", - "2001:67c:17e0::/48": "207688", - "240a:a4db::/32": "143893", - "2a00:1778::/32": "42252", - "2001:559:c158::/48": "22258", - "2001:579:b9cc::/33": "22773", - "2400:6280:135::/48": "132280", - "2400:adc0:4200::/46": "9541", - "2604:5800::/32": "19969", - "2a0c:bdc0::/29": "51333", - "2001:4878:153::/48": "12222", - "2408:8459:c10::/41": "17622", - "2804:2350::/32": "264155", - "2a00:d780::/32": "15557", - "2a02:a11::/29": "31251", - "240a:a548::/32": "144002", - "240a:aaee::/32": "145448", - "2600:1009:d000::/43": "6167", - "2804:18f4::/32": "61765", - "2a05:b00::/29": "196645", - "240a:a9cd::/32": "145159", - "240e:924:1000::/34": "4134", - "2605:2580::/32": "5683", - "2804:269c:fe07::/48": "47065", - "2400:a980:6100::/36": "133111", - "240a:a1d3::/32": "143117", - "2a11:2100::/29": "42375", - "2001:468:1f0f::/48": "11537", - "2001:d68:7::/44": "38759", - "2400:5e00::/32": "44444", - "2401:7000:b000::/33": "45177", - "2408:8456:d010::/42": "134543", - "240a:a265::/32": "143263", - "240e:473:1750::/40": "4134", - "2404:f4c0:5151::/36": "139248", - "2607:f598:f002::/36": "32329", - "2a0b:6903::/48": "206873", - "240a:a90b::/32": "144965", - "2804:c44::/32": "52917", - "2804:1040:6667::/35": "263626", - "2a02:26f7:6a::/48": "36183", - "2a0b:3080::/43": "206516", - "2001:4878:a321::/45": "12222", - "2402:3a80:1ad8::/42": "38266", - "2602:feda:c20::/48": "207343", - "2803:c00::/32": "262230", - "2a02:26f7:d384::/48": "36183", - "2a0d:3d80::/29": "204635", - "2001:559:4ef::/48": "20214", - "2001:1248:5770::/44": "11172", - "2804:104c:400::/40": "263629", - "2804:3488::/32": "262766", - "2804:4978::/32": "267186", - "2a02:26f7:ee81::/46": "20940", - "2001:468:1500::/40": "81", - "2001:67c:23d4::/48": "57201", - "2401:1d40:3100::/47": "58466", - "2803:eee0::/32": "269987", - "2804:14c:6f83::/41": "28573", - "2804:1bc:efd5::/35": "10310", - "2804:3380::/32": "265400", - "2400:181::/61": "4766", - "2409:8c20:c17::/35": "56046", - "2804:393c::/32": "266020", - "2404:bf40:83c3::/37": "139084", - "240a:a592::/32": "144076", - "2001:559:70f::/48": "33491", - "2607:f358:16::/42": "18779", - "2801:80:3950::/48": "270681", - "2404:bf40:c301::/40": "139084", - "2a03:9880::/32": "24817", - "2001:559:c1af::/48": "33489", - "2600:1480:9800::/48": "21342", - "2604:2340::/32": "32281", - "2620:1e:e000::/48": "46701", - "2803:c080::/32": "27927", - "2001:44b8:3d::/46": "4739", - "2406:e400:deae::/41": "7642", - "2604:2800::/33": "26793", - "2a0e:97c0:d6c::/48": "20473", - "2602:806:a000::/48": "398565", - "2607:fe20::/32": "30404", - "2001:67c:1bb8::/48": "3306", - "2408:80ea:6800::/41": "17816", - "2801:a4:f800::/37": "262742", - "2a02:26f7:cf81::/46": "20940", - "2a05:d03a:4000::/40": "16509", - "2001:1a11:ed::/46": "8781", - "2403:c000:1402::/32": "4741", - "2409:8914:600::/39": "56044", - "2a06:9682::/29": "31293", - "2804:7b00::/32": "271405", - "2a00:f060::/32": "19399", - "2a02:d247:1000::/32": "44087", - "240a:aa47::/32": "145281", - "2a09:77c4::/30": "1239", - "2001:890::/32": "8447", - "2402:800:3eee::/43": "7552", - "240a:ac86::/32": "145856", - "2620:132:f000::/40": "394977", - "2a00:1728:2a::/45": "34224", - "2a02:26f7:ce80::/48": "36183", - "2a02:26f7:decd::/46": "20940", - "2409:4003:3000::/27": "55836", - "240e:f7:5000::/36": "4134", - "2604:56c0::/32": "53507", - "2804:7a60:103::/40": "271367", - "2001:4c8::/35": "15290", - "2001:ee0:9040::/39": "45899", - "240a:abae::/32": "145640", - "2600:1415:15::/48": "24319", - "2803:6700:240::/48": "263210", - "2001:559:5e7::/48": "7922", - "2001:67c:4a0::/48": "43623", - "2409:8c85:aa05::/44": "9808", - "2001:418:141f:100::/54": "20940", - "2400:1c00:70::/40": "45143", - "240e:104:8000::/33": "4134", - "2603:c011:4000::/36": "31898", - "2804:760:2000::/32": "262638", - "2a09:bac0:232::/48": "13335", - "2001:6d0:ffb9::/48": "43832", - "2405:ae00::/32": "10219", - "240a:a76c::/32": "144550", - "240a:a7d0::/32": "144650", - "2804:45e8::/32": "52814", - "2001:df6:6480::/48": "142037", - "240e:67d:1800::/32": "4134", - "2600:1406:1e01::/34": "20940", - "2607:f8f8:800::/35": "23033", - "2800:160:1386::/43": "14259", - "2a02:26f7:ef00::/48": "36183", - "2001:938:4027::/32": "8437", - "2600:100f:a000::/44": "6167", - "2607:ac80:200::/32": "17", - "2607:c280::/32": "397168", - "2401:0:201::/48": "23966", - "2404:9540::/48": "24242", - "240a:aa16::/32": "145232", - "2620:103:c00d::/48": "14203", - "2806:230:200e::/48": "265594", - "2a03:52a0:173::/32": "12557", - "2001:559:c231::/48": "33652", - "2001:1248:5779::/40": "11172", - "2800:860:3::/45": "262197", - "2804:70fc::/32": "270760", - "2a0d:7100:a::/48": "34672", - "2605:b0c0::/32": "11282", - "2607:8280:2::/32": "27027", - "2607:fa40:3::/32": "25899", - "2804:78bc::/32": "271262", - "2620:14::/48": "6481", - "2804:10b4:2::/39": "263645", - "2605:a404:9d5::/38": "33363", - "2804:bd0::/40": "10670", - "2804:6918:4300::/36": "270248", - "2a09:7:2006::/48": "205758", - "2a10:7f40::/29": "202505", - "2001:67c:23b8::/48": "5524", - "2001:13b0:9002::/33": "3549", - "2409:8c20:5200::/42": "56046", - "2600:805:809::/38": "701", - "2602:fe31::/36": "32281", - "2406:840:110::/47": "139317", - "2408:8459:9a30::/41": "17622", - "2409:8924:5300::/37": "56046", - "2a0e:aa07:f081::/48": "211323", - "2409:890c::/30": "56042", - "2600:6c38:712::/45": "20115", - "2607:f220:41e::/48": "70", - "2a00:c4e0::/32": "200133", - "2001:559:7a8::/47": "7922", - "2001:559:815d::/48": "33491", - "240e:473:f20::/41": "140486", - "2600:1408:2c01::/35": "20940", - "2001:67c:1864::/48": "1853", - "2001:df0:2400::/48": "7713", - "2804:ec0::/32": "262972", - "2804:1dc4::/32": "264392", - "240a:af88::/32": "146626", - "2604:e840:a::/43": "396965", - "2620:5c:a000::/48": "397138", - "2804:14d:baa8::/41": "28573", - "2804:6164::/33": "262424", - "2a02:26f7:bd85::/46": "20940", - "2402:9d80:200::/41": "131429", - "2804:6780::/32": "269632", - "2a02:700::/32": "35826", - "2a03:6080:8::/30": "16285", - "2403:c00:700::/46": "17488", - "240e:44d:7e80::/41": "4134", - "2620:103:2008::/46": "30539", - "2803:2a80:8f0::/47": "262928", - "2a0d:5087:1a2d::/32": "62240", - "2001:df0:2ee::/48": "55384", - "2001:5b0:4100::/35": "6621", - "2401:4900:5b80::/42": "45609", - "2405:ba00:8000::/48": "23885", - "2a01:6e60::/32": "199883", - "2402:800:367f::/40": "7552", - "2402:800:f5d0::/42": "7552", - "2a02:ee80:41f8::/38": "3573", - "2a03:e600:100::/48": "208323", - "2a11:7d80::/29": "61192", - "2a07:c884::/32": "207249", - "2001:559:37::/48": "7046", - "2001:559:24e::/48": "33659", - "2001:559:54a::/48": "7922", - "2001:41d8::/32": "5610", - "2408:840c:600::/40": "17621", - "2600:6c7f:9050::/48": "20115", - "2606:6000:5000::/32": "20001", - "2a0b:e7c0::/29": "205400", - "2a0d:cec0::/29": "201395", - "2401:d800:fb00::/42": "7552", - "2600:1419:1a01::/37": "20940", - "240a:a95a::/32": "145044", - "2605:5fc9::/29": "397881", - "2408:8459:7430::/41": "17622", - "2602:fce1:200::/48": "395886", - "2804:5360::/32": "268580", - "2001:3e0:3001::/32": "10013", - "2607:f8f0:614::/48": "393249", - "2c0f:f428::/32": "30844", - "2001:67c:2264::/48": "197118", - "2402:9d80:a41::/43": "131429", - "2409:806a:3900::/33": "9808", - "2a02:26f0:3601::/39": "20940", - "2001:df3:7580::/48": "140570", - "240a:a35f::/32": "143513", - "2a02:26f7:c2c5::/46": "20940", - "2800:c80::/32": "61510", - "2806:319::/32": "265530", - "2001:df1:7e00::/48": "135300", - "2620:123:f000::/48": "20127", - "2620:134:a000::/47": "40907", - "2804:1168:1e00::/39": "52904", - "2804:3e04:2000::/32": "266568", - "2806:230:3015::/48": "11888", - "240a:a4bd::/32": "143863", - "2604:2f40:8001::/33": "29749", - "2607:f190::/34": "11320", - "2a03:5a00:1::/48": "47196", - "2a06:e881:260c::/48": "206740", - "2a05:b7c0::/48": "61400", - "2001:559:569::/48": "33659", - "2001:4de0:aaa0::/44": "34343", - "240e:473:6150::/40": "4134", - "2605:a401:89cc::/42": "33363", - "2620:125:9005::/48": "10780", - "2804:14c:7589::/42": "28573", - "2a02:26f7:c900::/48": "36183", - "2001:559:8469::/48": "33659", - "2400:9380:92b0::/45": "4809", - "2604:3dc0::/32": "394449", - "2a02:26f0:c500::/48": "34164", - "2401:d800:7de0::/38": "7552", - "2408:8459:9e50::/34": "17816", - "2607:f030::/32": "6536", - "2a02:26f7:ec0d::/46": "20940", - "2a03:6f00:8::/48": "200088", - "2001:1938:2400::/36": "12989", - "2404:c400:dc05::/48": "58735", - "2605:1080:13:39::/64": "23367", - "2605:3c80:e7a::/40": "2773", - "2800:2a0:3801::/33": "27947", - "2a02:ff0:1200::/40": "12735", - "2001:559:377::/48": "33657", - "2607:fc88::/35": "30475", - "2620:111:b000::/48": "22517", - "2a02:2e02:14c0::/42": "12479", - "2405:1c0:7151::/48": "135062", - "2409:8924:6500::/38": "56046", - "2a00:f0e0:41::/42": "198499", - "2a02:13f0:8200::/48": "64398", - "2a0e:3bc0:fa00::/42": "204982", - "2001:678:388::/48": "206373", - "2a03:13c0::/32": "199624", - "2001:559:c200::/47": "33662", - "2001:1260:3::/48": "28536", - "2401:d800:f1a0::/41": "7552", - "240a:a4f1::/32": "143915", - "2804:e24:fffb::/45": "262417", - "2001:16a2:6a00::/37": "39386", - "2408:8256:317d::/46": "17623", - "2a02:2698:5400::/44": "41843", - "2408:8744::/28": "4837", - "2600:140f:fc00::/48": "9498", - "2600:6c7f:9330::/41": "40294", - "2607:fcd0:fa80:211c::/54": "8100", - "2a02:26f7:e3c0::/48": "36183", - "2001:df0:427::/48": "24514", - "2408:8459:4030::/41": "17622", - "2409:8c20:8ab2::/35": "56046", - "2406:1e00::/32": "56030", - "2409:874c:ce00::/30": "9808", - "2600:1000:9110::/36": "22394", - "2a03:9700::/32": "20847", - "2607:f740:e640::/46": "63911", - "2a03:9420::/32": "9008", - "2a0b:6b86:404::/48": "207080", - "2a10:c941:10:4::/60": "35277", - "2001:550:2605::/48": "396509", - "2001:df1:2100::/48": "59155", - "2001:4546:1004::/28": "9924", - "2803:3f60::/32": "264744", - "2a0f:b580::/29": "51050", - "2001:559:218::/48": "33651", - "240a:a5d4::/32": "144142", - "2804:14d:5c96::/44": "28573", - "2806:2f0:9561::/40": "17072", - "2a10:2f00:12::/47": "56755", - "2001:1a11:69::/48": "8781", - "2600:6c00::/48": "396426", - "2602:fed5:802::/37": "27398", - "2a0a:e805:100::/40": "64476", - "2600:6c38:8f2::/38": "20115", - "2604:d600:60b::/43": "32098", - "2a00:ae40::/32": "50923", - "2a02:2ab8:8210::/33": "702", - "2001:559:c058::/48": "33651", - "2001:678:42c::/48": "205955", - "2602:fd92:630::/48": "38281", - "2607:f160:30::/47": "22394", - "2a03:2ca0:256::/34": "59865", - "2a03:93e0:2000::/32": "203228", - "2001:428:b26::/48": "10753", - "2806:20d:1101::/44": "32098", - "2a0c:7580::/29": "8823", - "2001:ee0:cb40::/37": "45899", - "2001:43f8:240::/47": "37304", - "2a0c:10c0::/40": "196755", - "2c0f:e878::/32": "60171", - "2408:8459:3010::/44": "17623", - "2001:559:4a2::/48": "33491", - "2803:d220::/32": "266880", - "2a02:26f7:c490::/48": "36183", - "2a0e:b107:1574::/48": "141011", - "240a:aa26::/32": "145248", - "2607:f8f0:610::/48": "393249", - "2804:954:32::/41": "263073", - "2804:3a34::/32": "262616", - "2a00:8760::/32": "60750", - "2a00:ba60::/31": "35625", - "2a04:1b00:6::/47": "61007", - "2001:559:7e5::/46": "33657", - "240a:a001::/32": "142651", - "2602:feb4:90::/44": "25961", - "2605:c40::/32": "62668", - "2001:559:c346::/48": "33662", - "2407:f800:301::/37": "38182", - "240a:a466::/32": "143776", - "2a02:26f7:ce49::/42": "20940", - "2001:559:39e::/48": "33491", - "2402:800:3963::/43": "7552", - "2404:3200::/46": "17509", - "2600:1408:23::/45": "20940", - "2a06:d440::/29": "57329", - "2001:559:316::/48": "7922", - "2409:8052:2::/40": "56047", - "240a:ac29::/32": "145763", - "240a:ae8f::/32": "146377", - "2620:171:1a::/47": "42", - "2001:678:2a4::/48": "206777", - "2001:f80::/32": "23775", - "2606:2800:4a80::/46": "15133", - "2607:cd80:7000::/32": "6528", - "2800:440:8064::/48": "27738", - "2a02:ec80::/32": "14907", - "2806:230:4011::/48": "11888", - "2a02:26f7:bd0d::/42": "20940", - "2a10:1646::/31": "206330", - "2001:559:3d8::/48": "7015", - "2001:559:8099::/48": "7922", - "2402:800:5a71::/44": "7552", - "2620:0:960::/48": "7046", - "2806:206::/32": "28398", - "2a02:2e02:27c0::/36": "12479", - "2804:5134::/32": "268437", - "2a02:cc4:2f00::/41": "8211", - "2a03:a860:10::/45": "34587", - "2a0e:b105:608::/45": "20473", - "2a00:84c0::/32": "197078", - "2a00:b404::/32": "205867", - "2402:e380:306::/48": "135646", - "2804:23d4::/32": "264186", - "2a09:9d40::/48": "44364", - "2a09:be40:ba00::/47": "208915", - "240e:ff:9000::/36": "134763", - "2607:fcd0:fa80:7301::/53": "8100", - "2a05:2580::/29": "15377", - "2a02:ad8:4a00::/35": "12389", - "2a0f:e980::/29": "206194", - "2001:559:4b6::/48": "21508", - "2001:7f0:3000::/46": "60380", - "2001:4d60::/32": "1126", - "2800:9a5::/30": "14522", - "2a03:2c00::/32": "41268", - "2a0a:b706:999f::/48": "204363", - "2404:ec00::/32": "18081", - "2600:1f00:1000::/40": "16509", - "2804:14c:7f49::/40": "28573", - "2a04:4e40:b810::/41": "54113", - "2001:559:c1c0::/46": "7922", - "2600:40f1:101::/48": "46639", - "2806:230:4005::/48": "11888", - "2806:2f0:90a2::/41": "17072", - "2001:559:c39e::/48": "7015", - "2001:df0:2e1::/48": "58381", - "2406:c7c0::/32": "138800", - "2a0a:9200::/32": "61317", - "2402:800:989b::/42": "7552", - "2806:2f0:96c1::/42": "17072", - "2a02:e5c::/32": "44530", - "2001:6f8:822::/48": "4589", - "2001:1b70:88ae::/48": "158", - "2401:5e80::/32": "132895", - "2600:140b:1601::/39": "20940", - "2001:67c:210c::/48": "29683", - "2001:1248:9976::/44": "11172", - "2804:20f0::/32": "264522", - "2806:250:400::/40": "28545", - "2a02:26f7:48::/48": "36183", - "2001:678:d4c::/48": "3320", - "2408:8956:5300::/40": "17816", - "2c0f:ecb0::/32": "328423", - "2001:df4:3500::/48": "17439", - "2402:4e00:50::/39": "45090", - "2404:e680:1121::/41": "18409", - "240a:a913::/32": "144973", - "2600:1014:9100::/44": "6167", - "2804:c00:a300::/36": "52655", - "2804:2d2c::/32": "52971", - "2804:5294::/32": "268527", - "2a0e:fd45:da5::/48": "60557", - "2402:9900:400::/47": "132084", - "2408:8646:1200::/32": "4837", - "2804:204:30e::/43": "28186", - "2a02:2e0:3fd::/46": "12306", - "2a04:4e40:c820::/44": "54113", - "2001:4130::/43": "24725", - "240a:ae45::/32": "146303", - "2607:fef8:ffe5::/43": "13750", - "2804:5f98::/32": "269111", - "2a00:ec40::/29": "34127", - "2600:1419:8c01::/35": "20940", - "2620:1d5:620::/41": "14773", - "2a03:6940::/29": "61266", - "2408:8956::/40": "17622", - "2607:f820:4000::/32": "11051", - "2804:4f94::/32": "268336", - "2620:132:f3a1::/37": "394977", - "2a02:26f7:f4c1::/46": "20940", - "2a02:6680:1134::/44": "16116", - "2a0b:3c40:24::/48": "204402", - "2001:67c:40c::/48": "62116", - "2402:800:36ee::/39": "7552", - "240a:a9e3::/32": "145181", - "240a:af4d::/32": "146567", - "2806:230:2028::/48": "265594", - "2c0f:f5f8::/32": "37717", - "2604:3b80:2833::/32": "31857", - "2c0f:f278::/32": "328036", - "2001:c20:48b5::/48": "9255", - "2804:32f0::/32": "265106", - "2404:3440::/34": "138534", - "2806:2f0:10a0::/48": "22884", - "2a0f:10c0::/29": "43809", - "2a02:26f7:e941::/46": "20940", - "2a06:1e85:2::/48": "57782", - "2400:9d80:2::/32": "58714", - "2405:3800::/32": "38466", - "2607:f6f0:8001::/48": "394749", - "2a02:1c8:9::/48": "57128", - "2a01:367::/32": "30823", - "2a06:e800::/32": "47950", - "2001:559:579::/48": "7725", - "2001:678:cb8::/48": "3209", - "240a:aeee::/32": "146472", - "2a02:720::/38": "34427", - "2a02:26f7:d159::/48": "36183", - "2a04:b240::/29": "8680", - "2001:df7:e200::/48": "135239", - "240a:4082:c000::/35": "58834", - "2403:1e40::/32": "137967", - "2409:8904:5840::/42": "24547", - "2604:9a00::/32": "30633", - "2606:b00::/32": "15305", - "2a02:26f7:e880::/48": "36183", - "2a03:96e0::/33": "15659", - "2001:44c8:4140::/40": "131445", - "2a02:26f7:f584::/48": "36183", - "2408:8956:b000::/40": "17622", - "2605:8900:1000::/36": "3800", - "2a02:26f0:89::/46": "20940", - "2606:2c0:2::/48": "14618", - "2001:c20:48a4::/48": "9255", - "2001:df5:4500::/48": "137876", - "2001:1248:a4d4::/47": "11172", - "2600:1417:f000::/48": "24319", - "2620:0:dd0::/48": "46357", - "2a07:4ec0::/29": "5606", - "2a0e:6b40:10::/48": "42034", - "2001:678:84c::/48": "57007", - "240a:aa99::/32": "145363", - "2a02:26f7:d100::/48": "36183", - "2001:1248:59e8::/38": "11172", - "2406:9a80:311::/48": "206704", - "240a:a8d0::/32": "144906", - "2001:418:1401:300::/56": "20940", - "2600:9000:108e::/43": "16509", - "2803:ca0::/32": "266831", - "2804:35e0:2000::/36": "266312", - "2001:57a:aa02::/35": "22773", - "2400:dbc0::/32": "133255", - "2600:140f:e800::/48": "12222", - "2a11:280::/29": "52164", - "2001:44c8:4640::/42": "131445", - "240a:ab42::/32": "145532", - "2a01:ce95::/32": "51964", - "2a02:26f7:ce45::/46": "20940", - "2600:1406:14::/44": "20940", - "2804:1090::/32": "263640", - "2804:2640::/32": "264335", - "2a00:d3c0::/32": "204165", - "2a03:ba80::/32": "50446", - "2402:800:97a9::/43": "7552", - "2606:1980:12::/47": "54994", - "2607:f6a0::/32": "11563", - "2804:1810:f000::/38": "263262", - "2a00:9520::/48": "56641", - "2a00:ab40:3001::/33": "41798", - "2a02:a00:4000::/32": "15987", - "2a07:f980::/47": "202310", - "2001:579:4139::/41": "22773", - "2001:4220:8000::/44": "24835", - "2001:43f8:70::/45": "36982", - "240a:a06b::/32": "142757", - "240e:438:20::/43": "140647", - "2804:6d48::/32": "270522", - "2001:df4:f900::/48": "137351", - "2401:8a40:54::/44": "45326", - "240a:a1bd::/32": "143095", - "240e:353:5c00::/34": "134419", - "2604:61c0:5001::/32": "29831", - "2a02:26f7:c880::/48": "36183", - "2401:b780:6a::/33": "45410", - "2605:8680:12::/47": "25780", - "2a02:26f7:ecc9::/46": "20940", - "2001:559:857b::/48": "33662", - "2407:3780::/32": "132960", - "2a01:5fc0::/32": "35539", - "2a06:d000::/48": "47725", - "2a09:bac0:184::/47": "13335", - "2001:559:c16d::/46": "33660", - "2001:559:c2f7::/44": "7015", - "2404:7180:c011::/46": "23848", - "2804:333c::/32": "265383", - "2804:7440::/32": "270969", - "2001:559:8283::/48": "7015", - "2408:8406:a800::/39": "4808", - "2408:8957:bb00::/40": "17816", - "2409:8c30::/41": "9808", - "2804:1214::/32": "263455", - "2a01:c50f:b280::/39": "12479", - "2620:123:f008::/48": "20127", - "2804:8028::/32": "271733", - "2806:1016:1::/48": "8151", - "2a02:ee80:4217::/44": "3573", - "2404:2d00::/32": "55900", - "2801:80:3990::/48": "270807", - "2a03:1a20:10::/48": "207467", - "2a03:2a60:dc::/48": "59871", - "2001:559:28e::/48": "33652", - "2001:67c:1724::/48": "25151", - "2001:ee0:1081::/34": "45899", - "2800:160:19de::/42": "14259", - "240a:ab3d::/32": "145527", - "2600:1417:79::/46": "20940", - "2800:d302:a::/43": "11830", - "2804:35c4::/32": "266305", - "2a03:a3a0::/32": "25780", - "2a03:c040:5::/46": "199484", - "2001:559:71f::/48": "7922", - "2001:1248:a53f::/41": "11172", - "2620:15e:7101::/48": "30383", - "2806:230:4018::/48": "265594", - "2a02:e0:3003::/45": "34984", - "2a02:dd80::/29": "12552", - "2a0b:3540:a::/29": "204413", - "2001:678:df0::/48": "29014", - "2800:160:1d3f::/41": "14259", - "2801:8a::/32": "53187", - "2804:1bd8::/33": "28224", - "2804:4a1c::/36": "267219", - "2a01:b740:1112::/38": "714", - "2a06:5f00::/29": "204147", - "2404:4a00:3:1::/48": "45629", - "2806:230:1103::/38": "11888", - "2001:559:810e::/48": "33657", - "2001:559:8768::/47": "7015", - "2001:df3:900::/48": "135905", - "2804:6734::/32": "269612", - "2001:668::/39": "3257", - "2620:f1:c000::/48": "22773", - "2804:ecc::/32": "52722", - "2804:5c40::/32": "268897", - "240e:473:a720::/41": "140486", - "2604:d600:15b7::/44": "32098", - "2409:8904:2940::/38": "24547", - "240a:aa85::/32": "145343", - "240e:37a:2600::/32": "4134", - "2600:6c38:149::/45": "20115", - "2606:4280::/36": "16696", - "2804:4eb4::/32": "61593", - "2804:745c::/32": "270976", - "2a0e:f41::/32": "208567", - "2607:ab00::/32": "600", - "2001:559:8152::/48": "33657", - "2001:c20:487b::/48": "9255", - "2001:448a:70b0::/32": "7713", - "2400:cb00:a462::/45": "13335", - "240e:3b0:c800::/37": "4134", - "2606:2800:e000::/48": "14210", - "2606:3b80::/32": "394109", - "2a00:cb60::/48": "49312", - "2a02:ee80:4048::/46": "3573", - "2a07:22c0:c100::/40": "64473", - "2001:559:25a::/48": "33657", - "2001:c20:48a6::/48": "9255", - "2001:559:82e0::/48": "33662", - "2600:6c3a:808::/42": "20115", - "2a03:af20::/32": "197949", - "2a0d:2146:8060::/48": "209114", - "2401:4900:4990::/42": "45609", - "2403:67c0::/32": "135772", - "2001:559:c0a5::/46": "33659", - "2001:640::/32": "2895", - "2001:67c:21b8::/48": "29682", - "2600:1408:9c02::/34": "20940", - "2804:5bdc:8004::/33": "268873", - "2a04:dc0::/48": "199386", - "2a01:111:2004::/42": "8075", - "2404:1b8::/32": "9794", - "2404:9600::/32": "7600", - "2408:8459:ae30::/41": "17622", - "240a:a744::/32": "144510", - "240a:a860::/32": "144794", - "2804:e0c:80::/48": "28176", - "2a00:ef20::/29": "199752", - "2a0a:1880::/29": "39647", - "2001:678:3b0::/48": "206186", - "2a06:b500:2110::/44": "203759", - "240a:a481::/32": "143803", - "2a0f:4700::/29": "15894", - "240a:a36f::/32": "143529", - "2600:1014:a020::/40": "22394", - "2a03:220::/32": "61400", - "2a0a:7d80:8::/48": "25106", - "2c0f:3000::/32": "327903", - "2001:550:906::/48": "54412", - "2402:800:5d1d::/42": "7552", - "2404:11c0::/32": "138482", - "2a05:f506::/48": "14413", - "2a0f:b300:2222::/48": "42072", - "2a0f:cc87:5000::/32": "208861", - "2001:559:84d5::/46": "7015", - "2403:4940::/32": "135217", - "2408:8459:9c50::/38": "17816", - "2804:536c::/32": "268583", - "2001:559:c287::/48": "33652", - "2400:cb00:a480::/45": "13335", - "2409:804f:1100::/36": "9808", - "240e:d:c000::/30": "4134", - "2804:1ebc::/32": "264446", - "2001:678:fb0::/48": "211041", - "240a:a783::/32": "144573", - "2a0c:b641:460::/44": "208063", - "2a00:1728:33::/32": "34224", - "2a01:bc40::/32": "197453", - "2001:503:d414::/48": "397197", - "2600:1404:c800::/48": "35994", - "2801:1a2:4::/48": "269845", - "2806:230:2048::/48": "265594", - "2a02:7a00:3::/45": "39904", - "2a0b:1300::/34": "198018", - "2401:d800:9f40::/42": "7552", - "2405:4cc1:c00::/40": "132468", - "2800:160:2ba1::/37": "14259", - "2804:40a0:acc2::/47": "265971", - "2806:1030:cefe::/48": "20940", - "2a02:26f0:a101::/40": "20940", - "240e:45::/33": "17638", - "2605:f700:c0::/44": "18978", - "2001:df2:3c00::/45": "63950", - "2600:140f:4200::/48": "9498", - "2001:559:7e::/47": "33491", - "2404:a300::/48": "23884", - "2804:1768::/32": "263144", - "2a0e:97c0:def::/48": "20473", - "2409:8087:1b00::/37": "9808", - "240a:a1b7::/32": "143089", - "2a00:ec00::/32": "16066", - "2a01:168::/29": "41670", - "2a02:c680::/31": "196983", - "2401:3900::/32": "7718", - "2a02:26f7:d304::/48": "36183", - "2a10:7f00::/29": "398559", - "2001:1af0:9000::/48": "44325", - "2401:c5c0:2::/47": "55492", - "2620:102:4020::/43": "4130", - "2804:14d:148a::/45": "28573", - "2806:230:401e::/48": "265594", - "2a00:1b50:2::/43": "8343", - "2a0b:6b86:3fc::/48": "202562", - "2606:2800:2aa::/45": "14153", - "2a02:26f7:f641::/46": "20940", - "2a02:2e02:ec0::/39": "12479", - "2a03:6947:700::/36": "61266", - "2402:800:34e0::/44": "7552", - "2404:8ec0::/32": "135780", - "240a:a7e9::/32": "144675", - "2600:1408:6000::/48": "35994", - "2804:28f0::/32": "263988", - "2a0d:4c40::/29": "61317", - "2800:160:190d::/42": "14259", - "2804:2134::/32": "264542", - "2406:cb40::/48": "395092", - "2800:160:11d3::/44": "14259", - "2804:16b0:4000::/36": "61910", - "2a0f:f200::/29": "208257", - "2001:67c:1488::/48": "3246", - "2409:8b29::/27": "9808", - "2603:90c8::/30": "11955", - "2620:133:d000::/40": "395746", - "2804:4304::/32": "267543", - "2806:2f0:84::/38": "17072", - "2001:1838:6004::/48": "13331", - "2402:5ec0:2000::/32": "23724", - "2402:fbc0:10::/32": "134014", - "2a04:4e40:de00::/48": "54113", - "2409:8087:280d::/40": "56041", - "2600:2000:2000::/42": "33517", - "2620:131:d000::/40": "13921", - "2804:25a8::/32": "264293", - "2a06:1d80::/29": "30786", - "2001:4d50::/32": "34309", - "2408:842e::/32": "4837", - "2804:2cf8::/32": "265254", - "2001:559:3ab::/48": "7922", - "2402:800:572b::/43": "7552", - "2600:3c0f:12::/45": "63949", - "2a05:8e40::/29": "198710", - "2405:b740::/32": "136342", - "2600:5c00:3fc9::/48": "20115", - "2a04:f480::/34": "25373", - "2a05:b0c6:200d::/48": "208753", - "2401:4900:5020::/41": "45609", - "2409:8008:d5::/46": "9808", - "2409:8914:200::/39": "56044", - "240a:a5d0::/32": "144138", - "2804:684c::/32": "269683", - "2a02:ac8::/32": "34594", - "2a02:26f0:cd01::/40": "20940", - "2804:70c0:6::/48": "270746", - "2001:44b8:14::/46": "4739", - "2402:800:93a9::/43": "7552", - "2406:a800::/32": "45437", - "2407:3880::/32": "133012", - "240a:a6eb::/32": "144421", - "240a:ac05::/32": "145727", - "2804:2058::/32": "264487", - "2a04:5d00:81::/29": "60241", - "2a04:c442:9000::/33": "10725", - "2401:4900:5c90::/44": "45609", - "2620:13d:4000::/44": "63326", - "2804:759c::/32": "271058", - "2c0f:ee50::/32": "328259", - "2a01:7700::/32": "15372", - "2401:1d40:1::/40": "59019", - "2404:2200:28::/32": "18200", - "240a:abc5::/32": "145663", - "2602:808:4000::/48": "398960", - "2607:f470::/32": "55", - "2804:6364:8000::/33": "269358", - "2806:2f0:95c1::/42": "17072", - "2a03:6100:6100::/48": "38937", - "2a07:a341::/32": "20473", - "2a0a:2842:aa00::/46": "42962", - "2400:cb00:220::/46": "13335", - "2402:ab00:b0::/41": "24206", - "2408:84f3:b240::/37": "17816", - "2408:8956:dac0::/39": "17816", - "2a0b:b84::/31": "7489", - "2409:8e30::/29": "9808", - "240e:44d:3f00::/41": "140345", - "2600:100e::/32": "6167", - "2804:4b14::/32": "267282", - "2804:7794::/32": "271187", - "2a02:26f7:b6cd::/42": "20940", - "2a02:26f7:bd0c::/48": "36183", - "2c0f:1d00::/32": "60171", - "2401:d800:b4c0::/42": "7552", - "2402:9d80:3ec::/37": "131429", - "2600:1404:a400::/48": "35994", - "2607:f740:20::/46": "36236", - "240a:a7b2::/32": "144620", - "2600:1001:b130::/40": "22394", - "2604:4500:903::/40": "29802", - "2620:6a::/48": "3152", - "2804:5bac::/48": "268862", - "2a0e:2e00::/29": "9119", - "2409:8e75::/28": "9808", - "240e:473:8350::/40": "4134", - "2605:9880:400::/42": "23470", - "2a02:26f7:c3cd::/46": "20940", - "2408:8956:3700::/40": "17816", - "2803:b780::/48": "27742", - "2a02:748:a000::/33": "29802", - "2c0f:ec40:2000::/33": "327936", - "2400:c3c0::/32": "136407", - "2606:b400:8030::/48": "20037", - "2607:ffb0:300c::/47": "6327", - "2001:678:918::/48": "57166", - "240a:a23b::/32": "143221", - "2800:930::/29": "27717", - "2803:d700:d000::/36": "61461", - "2001:67c:11a8::/48": "50695", - "2001:1388:2f10::/35": "6147", - "2602:ff93:1000::/36": "26968", - "2606:25c0::/32": "399331", - "2a07:3146::/32": "47688", - "2a0c:9ac0::/29": "18779", - "2001:559:c2ce::/48": "33651", - "2402:2100::/32": "19855", - "2a0e:37c0::/32": "29014", - "2001:df2:3a80::/48": "138270", - "2402:800:7cb0::/41": "7552", - "2001:748::/32": "5430", - "2602:feda:bb0::/44": "140938", - "2804:20d8::/32": "264516", - "2a06:c3c7::/32": "47596", - "2001:4b3a::/32": "25220", - "2606:2a00::/32": "53292", - "2a02:cb80:2720::/48": "43766", - "2001:df4:2c80::/48": "140896", - "2404:138:48::/39": "38022", - "240e:473:8d20::/41": "140486", - "2001:559:8389::/48": "33651", - "2602:10d:9000::/30": "20115", - "2a03:4c40::/32": "197964", - "2c0f:f918:101::/45": "37002", - "2800:440:8143::/48": "27738", - "2a00:1728:b::/45": "34224", - "2001:559:42b::/48": "21508", - "2408:8459:6c50::/38": "17816", - "2a01:568:6000::/32": "43950", - "2a02:4ba::/32": "200271", - "2a03:c980:dead::/48": "210079", - "2a05:bd40:cd13::/48": "29264", - "2a0b:9400:1000::/48": "209505", - "2408:8459:2c30::/44": "17623", - "240a:a028::/32": "142690", - "240a:a892::/32": "144844", - "240a:ab98::/32": "145618", - "2600:1403:9401::/36": "20940", - "2a00:cc20::/33": "20495", - "2001:648:2c30::/48": "8522", - "2001:678:230::/48": "1102", - "2801:b6:300::/36": "263083", - "2001:559:85a8::/48": "7725", - "2600:809:425::/38": "701", - "2803:1000::/32": "263783", - "2400:dcc0:a604::/39": "38631", - "2a0f:4ac4::/41": "207671", - "2001:67c:12bc::/48": "199249", - "2402:800:35c5::/43": "7552", - "2402:6c80::/32": "23780", - "2602:104:f::/48": "33588", - "2604:4d40:3a00::/40": "213073", - "2804:41f8:f304::/37": "267469", - "2806:230:6034::/48": "265594", - "2620:123:9001::/48": "33695", - "2001:67c:2f2c::/48": "44894", - "2406:2000:ef68::/48": "24506", - "240a:a363::/32": "143517", - "2603:c011:8000::/36": "31898", - "2a00:e78::/33": "34602", - "2a03:2887:ff3b::/48": "63293", - "2a03:e140:1b::/48": "56674", - "2001:4878:c000::/48": "12222", - "2400:a440:1::/45": "18019", - "2401:2900:3e00::/39": "23679", - "2804:61d0::/32": "269258", - "2a00:41e0::/32": "57809", - "2a00:7ec0::/47": "8528", - "2001:dc7:ffc3::/45": "24151", - "240a:a5b2::/32": "144108", - "2a0b:4d00:1::/44": "44239", - "2a0c:b642:a01::/45": "208753", - "2a0e:b240::/48": "15562", - "2804:1644:fb00::/37": "262903", - "2a05:48c0::/29": "207227", - "2a0f:3d80::/29": "60781", - "240a:a8e9::/32": "144931", - "2600:9000:20c8::/43": "16509", - "2804:3fbc::/32": "265911", - "2a06:7880::/29": "12437", - "2c0f:edf8::/32": "328512", - "2801:80:1bb0::/48": "266495", - "2a01:9700:10b4::/46": "8376", - "2001:fd8:1ec0::/42": "4775", - "2401:ff80:1c93::/32": "133954", - "2408:84e2:2c0::/37": "17621", - "2604:700::/32": "10384", - "2a0d:bc00::/29": "51426", - "2001:678:d78::/48": "50869", - "2408:84f3:a440::/38": "17816", - "2600:140b:c01::/38": "20940", - "2620:13f:700c::/46": "59116", - "2a00:edc0:6259::/48": "62597", - "2a09:9740::/48": "50007", - "2a10:4cc0::/40": "12843", - "2404:c140::/39": "138997", - "2408:8459:8a10::/42": "17623", - "240e:f7:8000::/35": "58461", - "2603:90d8::/30": "10838", - "2607:fcd0:106:2f06::/44": "8100", - "2408:8001:4000::/32": "4837", - "2804:769c::/32": "271123", - "2a0f:bf00:c0::/42": "208196", - "2001:67c:2b5c::/48": "43451", - "2001:1860::/32": "101", - "2402:a300:c006::/36": "55427", - "240a:ad40::/32": "146042", - "2804:7a78::/32": "271373", - "2a00:8100::/32": "9125", - "2c0f:ec68::/32": "37675", - "2001:500:133::/48": "396549", - "2001:1278:10::/32": "18734", - "2804:1efc:7000::/36": "264458", - "2a03:3f40:2::/48": "58061", - "2001:1960:3::/43": "5650", - "2408:8656:30f0::/48": "17623", - "240a:a760::/32": "144538", - "2600:6c7f:9052::/48": "20115", - "2804:640:90::/39": "262713", - "2001:4978:10ae::/48": "13331", - "2600:4c01:ffff::/48": "13760", - "2804:7394:8000::/33": "270924", - "2a00:8740:110::/47": "49037", - "2a09:bac0:216::/48": "13335", - "2001:559:8321::/48": "7015", - "2001:678:4a4::/48": "44574", - "2607:3e80::/32": "16463", - "2803:9800:9505::/46": "11664", - "2804:9d4:5102::/47": "262996", - "2804:6aa0::/32": "270349", - "2a07:e8c0::/32": "212926", - "2001:470:bf::/41": "6939", - "2001:4de0:4204::/40": "12989", - "2803:6900:559::/48": "52423", - "2a05:5c00::/29": "51630", - "2001:df0:68::/48": "45689", - "2406:b400:54::/47": "18209", - "240a:a13c::/32": "142966", - "2605:9f00::/38": "36473", - "2a02:26f7:fb05::/46": "20940", - "2001:8e0::/29": "8758", - "2406:3003:2050::/44": "4657", - "2620:a3:e030::/48": "39952", - "2a0b:e43:1::/48": "205809", - "2001:559:502::/47": "7016", - "2600:1406:1600::/48": "16625", - "2a01:aea0:df3::/45": "40980", - "2a03:5c00::/32": "29177", - "2403:f680::/46": "58898", - "2406:840:f100::/47": "39753", - "2409:804b:290a::/40": "24445", - "240a:a605::/32": "144191", - "2604:880:3a8::/45": "29802", - "2409:8914:8000::/39": "56044", - "2804:21fc::/32": "264584", - "2804:2254::/32": "264603", - "2001:67c:29f4::/48": "58302", - "2001:4220::/48": "36935", - "2001:3c8:2809::/38": "4621", - "2001:550:6207::/37": "174", - "2001:559:12::/44": "7922", - "2406:b400:6::/44": "18209", - "2409:8948:8b00::/40": "24445", - "2804:3c20::/40": "266192", - "2804:443c::/32": "267611", - "2001:1388:8a60::/46": "264684", - "2408:840c:c500::/40": "17621", - "2803:d900::/32": "262252", - "2a02:26f7:d7c1::/46": "20940", - "2a0a:6680:197a::/34": "203500", - "2001:500:3e5::/48": "26134", - "2001:dce:7401::/38": "23869", - "2a04:4e40:e400::/48": "54113", - "2a04:cec0:1400::/29": "5410", - "2001:559:85d2::/48": "33287", - "2001:559:c14e::/48": "33652", - "2001:559:c180::/48": "33659", - "2401:4200::/32": "24195", - "2604:af80:1448::/36": "18859", - "2804:7024:8400::/33": "270708", - "2402:e740::/32": "9405", - "240a:a2da::/32": "143380", - "2001:df2:9280::/48": "136375", - "2402:800:369b::/41": "7552", - "240e:44d:5d80::/41": "4134", - "2605:9d80:9013::/48": "4809", - "2804:1768:b020::/33": "263144", - "2a02:26f7:d240::/48": "36183", - "2001:67c:262c::/48": "1103", - "2001:1938:4202::/47": "11588", - "240a:a8b2::/32": "144876", - "2604:6600:1c7::/38": "40676", - "2606:9500::/39": "19893", - "2a07:59c1:2010::/44": "208753", - "2804:7b68:f0::/44": "271430", - "2a0d:2902:caf0::/45": "204185", - "2a02:26f0:bb::/45": "34164", - "2001:b08:26::/48": "198685", - "2402:800:b560::/40": "7552", - "2404:4a00:2095::/35": "45629", - "2600:6c38:ea::/39": "20115", - "2602:feda:3e0::/44": "207632", - "2804:47c0::/32": "263665", - "2a02:ff0:e00::/40": "12735", - "2a10:8e00::/32": "20473", - "2001:67c:252c::/48": "39879", - "2603:c001:250::/37": "31898", - "2a0a:8c41::/29": "204957", - "2401:ff80:1305::/44": "133954", - "2602:fefa::/32": "64267", - "2a0c:f100::/29": "212880", - "2001:559:8690::/48": "7922", - "240a:afc0::/32": "146682", - "2800:800:7f7::/48": "26611", - "2803:9600::/32": "52391", - "2804:2d90::/34": "52682", - "2a00:1678:1337::/48": "49453", - "2001:67c:34c::/48": "28714", - "2001:1998:600::/44": "16787", - "2400:9380:9200::/46": "4809", - "240e:44d:200::/41": "140345", - "2607:fca8:1531::/33": "17139", - "2a03:7380:4000::/40": "13188", - "2a09:d5c0::/32": "39150", - "240a:abdd::/32": "145687", - "2607:f110:41::/46": "21889", - "2a02:26f7:71::/48": "20940", - "240e:44d:4f00::/41": "140345", - "2a0f:bc00::/29": "61317", - "2001:559:854b::/48": "22909", - "2409:8018::/34": "134810", - "2803:bc40:a006::/33": "52468", - "2804:30c0::/32": "264972", - "2a0a:4540:1000::/48": "16509", - "2402:e380:31c::/48": "141749", - "2001:559:82c5::/44": "7015", - "2600:6c38:448::/45": "20115", - "2607:fdf0:5ede::/42": "8008", - "2801:1c8:300::/48": "14080", - "2a02:2e02:6d0::/36": "12479", - "2a06:f4c0::/29": "29596", - "2a0f:d800::/48": "23738", - "2400:7400:e01a::/47": "38044", - "2408:8256:3b8a::/48": "17623", - "2804:6b44::/32": "270389", - "2804:8050::/32": "271743", - "2a05:ee80::/29": "202523", - "2001:559:81cb::/48": "7015", - "2001:2093::/20": "1299", - "2605:400:1::/46": "16406", - "2a00:9220::/32": "49867", - "2001:67c:2e14::/48": "200986", - "240a:a690::/32": "144330", - "240a:a792::/32": "144588", - "2600:380:4600::/39": "20057", - "2600:1406:4401::/38": "20940", - "2806:20d:501c::/42": "32098", - "2a04:f580:9040::/48": "4809", - "2a0d:3842:1140::/48": "57629", - "2401:7b40:5000::/48": "38071", - "2620:16d::/34": "7862", - "2a0e:fd45:d80::/44": "212948", - "2401:d800:2020::/41": "7552", - "2409:807e:100::/36": "9808", - "2605:a7c0::/43": "53766", - "2804:2d80::/32": "262378", - "2408:8956:4100::/40": "17816", - "2409:8924:d00::/38": "56046", - "2600:1417:61::/48": "24319", - "2a00:1238::/46": "35236", - "2001:67c:2b40::/48": "198235", - "2405:1c0:6353::/42": "55303", - "2620:124:b003::/40": "32521", - "2a0e:97c0:250::/47": "211685", - "2001:550:1:305::/39": "174", - "2001:1838:1100::/34": "23352", - "2804:255c::/32": "264276", - "2a02:2270:3000::/32": "43939", - "2800:160:2042::/45": "14259", - "2a0c:b641:60::/48": "210234", - "2a0e:d602::/32": "50113", - "2a0e:eec4::/32": "398343", - "2001:559:26f::/48": "33652", - "2001:559:8590::/48": "7725", - "2604:dac0::/32": "36504", - "2605:38c0::/32": "393601", - "2804:1afc::/32": "61702", - "2a01:688::/32": "20694", - "2001:67c:2778::/48": "57926", - "2402:e280:21a4::/37": "134674", - "2620:10a:f020::/40": "21869", - "2a03:3000::/32": "42772", - "2001:67c:78::/48": "20847", - "240a:a688::/32": "144322", - "2620:98:e000::/48": "399728", - "2804:4840::/32": "267107", - "2804:66d4::/32": "269585", - "2804:6e3c::/32": "28572", - "2a02:ea8::/32": "41848", - "2a10:2200:2::/48": "59588", - "2001:559:84a8::/48": "33491", - "2804:75a4:fa::/48": "265130", - "2a06:c0::/29": "47467", - "2401:ff80:1391::/46": "133954", - "2803:ab00:92::/48": "23520", - "2a10:2f01:360::/44": "56894", - "2001:559:e8::/48": "22909", - "2001:559:7be::/48": "33657", - "240e:946:2::/34": "58540", - "2607:f3a0:a002::/48": "399817", - "2001:f90::/32": "4609", - "2607:fcd0:fa80:210f::/59": "8100", - "2620:121:1000::/48": "394010", - "2801:1ee::/48": "19429", - "2a03:e480::/32": "15640", - "2001:67c:24b0::/48": "50905", - "2407:3c80::/47": "55705", - "2409:8020:1071::/40": "56046", - "240e:6b4::/36": "136198", - "2001:559:848d::/48": "7016", - "2001:ac0::/34": "8903", - "2402:800:614a::/45": "7552", - "2403:97c0::/48": "7489", - "240e:473:7600::/41": "140485", - "2607:f8c0:205::/46": "25885", - "2607:fdb8:5::/42": "30496", - "2604:1380:4500::/42": "54825", - "2607:ffa8::/32": "21858", - "2620:7d:c000::/48": "4190", - "2a0d:fec0:177::/48": "47481", - "2400:9380:90a0::/47": "4809", - "2401:4900:51c0::/42": "45609", - "2402:6640:6::/43": "134995", - "2800:bf0:8d::/43": "27947", - "2a0e:15c0::/38": "60781", - "2a01:4040::/32": "25176", - "2001:4878:a356::/48": "12222", - "2a07:22c1:c100::/40": "213021", - "2001:559:c1aa::/47": "7015", - "2400:30c0:1::/48": "8100", - "2605:21c0::/32": "20055", - "2a05:1084:7400::/40": "138990", - "2a03:efc0:700::/40": "33438", - "2001:418:4001:3::/64": "2914", - "2001:559:8666::/47": "33657", - "2405:8a00:601d::/42": "55824", - "2605:3400::/32": "15267", - "2804:51bc::/32": "268473", - "2a00:8dc0:ff05::/40": "57811", - "2a00:9300::/32": "12843", - "2a06:6bc0::/29": "12905", - "2806:370:9700::/36": "28403", - "2001:fd0:db::/38": "10029", - "2407:d40:20::/32": "139009", - "240e:3b4:4c00::/35": "136200", - "2604:400::/32": "26225", - "2604:5b00::/32": "19024", - "2803:6604:6401::/39": "28075", - "2804:3648::/32": "266339", - "2407:4b40::/48": "141796", - "2400:fc00:8d20::/41": "45773", - "2620:112:d000::/44": "11297", - "2804:37f0:d100::/34": "266445", - "2a01:440::/37": "29551", - "2a01:8f8::/32": "21334", - "240a:ab1e::/32": "145496", - "240e:107:c100::/40": "134774", - "2804:1aa4::/32": "61873", - "2804:27d0::/32": "53162", - "2a0d:6640::/29": "40970", - "2a0e:cd01:2f00::/29": "23031", - "2001:500:9c::/46": "20144", - "2001:fb0:109f:14::/64": "36040", - "2804:11c4::/32": "263437", - "2001:4de8:fa52::/37": "29208", - "2409:8074:100::/35": "9808", - "2804:c58::/32": "52694", - "2a01:4960::/32": "16267", - "2001:4b20:ca1f:1::/31": "34288", - "2606:f000::/32": "13917", - "2001:559:878c::/48": "7922", - "240a:a822::/32": "144732", - "2606:e800:200::/39": "25843", - "240a:a362::/32": "143516", - "240a:a43a::/32": "143732", - "2600:1007:d020::/43": "6167", - "2620:171:51::/48": "715", - "2a02:200::/32": "24889", - "2a03:3a40:2::/35": "199629", - "2a07:a380::/29": "15426", - "2001:559:c18e::/48": "7922", - "2001:678:a90::/48": "20473", - "2400:6540::/48": "135905", - "2600:8807:a1c0::/36": "22773", - "2804:1a70::/32": "61859", - "2a02:26f7:d680::/48": "36183", - "2604:d600:123f::/41": "32098", - "2c0f:f020:8100::/40": "327907", - "2406:1600:201::/39": "23871", - "2600:1419:1001::/37": "20940", - "2800:160:11e1::/43": "14259", - "2a03:2880:f05f::/42": "32934", - "2a03:4d25::/32": "59397", - "2a0c:efc0:fff::/29": "206356", - "2001:1284::/32": "14868", - "2a02:26f7:c104::/48": "36183", - "2a03:8040::/32": "60551", - "2a02:2f0c:d000:15::/58": "8708", - "2408:8956:cbc0::/37": "17622", - "240a:ac90::/32": "145866", - "2620:113:f000::/45": "393517", - "2620:1ec:908::/47": "8068", - "2804:1b48::/32": "61718", - "2804:2d64::/32": "265279", - "2a02:26f7:b909::/46": "20940", - "2a10:1040::/32": "59589", - "2402:800:feb0::/39": "7552", - "2409:8c30:50::/39": "9808", - "240a:aaad::/32": "145383", - "2001:559:5de::/48": "7922", - "2408:840c:2900::/40": "17621", - "2408:8956:5b00::/40": "17816", - "2a00:dd80:20::/48": "36236", - "2a02:26f0:11c::/46": "20940", - "2a11:1b80::/29": "42375", - "2a02:af80::/29": "39440", - "2001:559:c0a0::/48": "33651", - "2001:579:e3c0::/36": "22773", - "2001:4998:ef6d::/43": "14778", - "2401:1800::/32": "45187", - "2406:7400:50::/44": "24309", - "2408:8256:1800::/34": "17816", - "2a01:9500:81::/32": "197696", - "2804:47a0::/35": "267066", - "2001:550:6603::/40": "174", - "2001:67c:1100::/48": "197498", - "2401:fb00::/32": "17754", - "2404:bf40:81c0::/48": "7545", - "240a:a9bf::/32": "145145", - "240e:97a:2d02::/40": "23650", - "2602:ffe2:4::/48": "53334", - "2406:6cc0:a100::/48": "4622", - "2602:fed2:7109::/48": "54133", - "2001:418:144e::/47": "15562", - "2409:803c:1800::/40": "24444", - "240a:ae72::/32": "146348", - "2607:ff40::/32": "7871", - "2a02:26f7:c184::/48": "36183", - "240a:a2fa::/32": "143412", - "2600:1011:f010::/39": "6167", - "2600:1014:d100::/41": "6167", - "2803:700::/32": "27976", - "2001:559:c245::/46": "20214", - "2402:b801::/38": "18371", - "2a01:bbc0::/32": "199673", - "2403:300:a0e::/48": "6185", - "240a:a050::/32": "142730", - "240a:a876::/32": "144816", - "2600:6c38:a99::/46": "20115", - "2001:fb0:1072::/45": "7470", - "2001:18b8:d46::/32": "29789", - "2409:8907:8420::/39": "24547", - "2a02:1c8:90::/44": "24955", - "2400:6280:10f::/48": "132280", - "2400:8b00:2280::/42": "45727", - "2605:e3c0::/43": "398479", - "2804:c48:ff05::/44": "52687", - "2a04:5380::/29": "202292", - "2a0b:bb41::/32": "12570", - "2001:df0:d1::/48": "55857", - "2001:df5:3100::/48": "137854", - "2404:6900::/34": "17819", - "2408:80e3:8000::/33": "4837", - "2402:ee80::/48": "132647", - "2409:804d:1100::/36": "9808", - "2804:67fc::/32": "269663", - "2620:122:8001::/48": "393490", - "2a02:6c20:819::/48": "24641", - "240a:aa96::/32": "145360", - "2804:14c:da87::/41": "28573", - "2a02:7160::/32": "43885", - "2001:559:c01b::/48": "33659", - "240a:a156::/32": "142992", - "240e:438:a20::/43": "140647", - "2a03:560:148::/47": "201832", - "2001:559:7f5::/46": "7922", - "2800:160:1f97::/42": "14259", - "2801:80:3720::/48": "269400", - "2804:43a0:5000::/32": "267580", - "2a0e:aa07:f050::/48": "139249", - "2a0e:b105:5d4::/46": "20473", - "2600:6c38:f16::/47": "20115", - "2605:8440::/32": "7018", - "2806:2f0:2183::/48": "17072", - "2a0a:cdc0::/32": "43771", - "2001:410:a01c::/48": "40007", - "240e:979:3f00::/33": "4134", - "2602:ffa6:700::/36": "62731", - "2a07:e03::/46": "210083", - "2a0f:cb00::/48": "213274", - "2001:67c:2358::/48": "39287", - "2409:8028:8f0::/48": "9808", - "2606:840::/32": "3356", - "2804:59a8::/35": "268717", - "2001:559:85af::/48": "20214", - "2401:b780:5002::/47": "65435", - "2605:ad40::/32": "20432", - "2804:6888::/32": "269699", - "2804:788c::/32": "271250", - "2c0f:f2b8::/32": "328471", - "2001:559:81bd::/46": "7922", - "2405:2300:ff00::/46": "13443", - "2405:8a00:a00e::/43": "55824", - "2409:8924:3100::/38": "56046", - "240a:aed8::/32": "146450", - "240e:698:4b00::/40": "133774", - "2804:1644:340::/32": "262903", - "2803:7da0:c::/48": "64114", - "2804:2950::/32": "53113", - "2a02:2e02:c80::/42": "12479", - "2001:df5:5c00::/48": "9649", - "240e:3b1:5600::/34": "136199", - "2804:2760::/32": "263897", - "2a01:ac::/32": "39122", - "2a02:26f7:d204::/48": "36183", - "2a03:5840:101::/44": "35661", - "2607:f440::/31": "7859", - "2a03:adc0::/48": "42807", - "2c0f:f5c0:231::/37": "29465", - "2600:1403:6c00::/48": "35994", - "2600:140f:9801::/38": "20940", - "2607:f018::/32": "36375", - "2607:fc48:c20::/48": "40009", - "2a00:1169::/39": "21499", - "2a02:26f7:e4::/48": "36183", - "240a:a560::/32": "144026", - "2804:17c8::/32": "263251", - "2806:230:3016::/48": "265594", - "2a09:9446::/32": "49981", - "2a0b:f940:4af3::/32": "205373", - "2402:8100:21a0::/43": "55644", - "2c0f:ee28::/32": "37172", - "2407:e80::/47": "58689", - "2804:3dd4::/32": "266556", - "2804:6a64::/32": "270333", - "2a02:26f0:99::/46": "20940", - "2a06:db80::/29": "24631", - "2a0f:64c0::/29": "31463", - "2a10:2f01:242::/48": "213316", - "2804:694c:c000::/34": "270261", - "2001:678:cbc::/48": "43021", - "2001:708:11::/32": "1741", - "2001:df3:9a00::/48": "135769", - "2400:c700:9001::/34": "55644", - "2620:ff:8000::/48": "22773", - "2804:4248::/32": "267490", - "2804:656c::/32": "269489", - "2001:4408:5d00::/38": "4758", - "2405:1c0:6773::/40": "55303", - "2407:c080:fc0::/35": "55990", - "240a:61:1e00::/48": "9605", - "2001:559:2d3::/48": "33659", - "2001:44b8:204a::/45": "7545", - "2620:12d:1000::/47": "26889", - "2c0f:f718::/32": "37678", - "2a01:138::/32": "15598", - "2001:559:467::/48": "33657", - "2001:678:c8::/48": "33999", - "2408:8459:1b10::/42": "17623", - "2409:8904:4260::/39": "24547", - "2804:1148::/32": "263668", - "2804:198c::/32": "61802", - "2804:53d4::/32": "268609", - "240a:a0d6::/32": "142864", - "2001:559:aa::/47": "7922", - "2001:559:824c::/47": "33651", - "2001:67c:2204:607::2ffa:1/48": "24708", - "2001:ee0:d040::/39": "45899", - "2001:1248:5bac::/43": "11172", - "2001:4878:2048::/48": "12222", - "2402:d000:8135::/44": "9329", - "2803:b220:b003::/33": "265844", - "2804:3478::/32": "262450", - "2a02:ef0::/32": "39242", - "2a03:8960::/32": "200914", - "2a0c:fe80::/29": "200490", - "2001:678:da8::/48": "213068", - "2403:6380:20::/46": "212237", - "240a:ad3f::/32": "146041", - "2a0e:9cc0::/35": "208905", - "2401:b400::/45": "58448", - "2402:800:97ee::/43": "7552", - "240a:aa45::/32": "145279", - "2620:1ec::/46": "8075", - "2a02:26f7:f6f9::/46": "20940", - "2a03:d5c0:1c00::/42": "199391", - "2804:7354::/32": "270908", - "2804:783c::/32": "271229", - "2806:2f0:3481::/46": "17072", - "2a02:2e02:2460::/40": "12479", - "2a05:9f44:2a05::/48": "42831", - "2402:8100:20e7::/44": "45271", - "240a:aae7::/32": "145441", - "2604:d600:69e::/36": "32098", - "2a01:7d20:500::/40": "203645", - "2a02:2458::/32": "6908", - "2a0c:d000::/29": "20612", - "2001:1248:5a7f::/40": "11172", - "2a06:1e86:babe::/48": "210089", - "2001:1388:76c2::/36": "6147", - "2607:f140:a000::/48": "393282", - "2620:11a:4081::/48": "26197", - "2801:1f0:4060::/32": "3573", - "2803:5160::/32": "269730", - "2001:468:2620::/48": "237", - "2001:67c:2d88::/48": "3320", - "2800:b40:201::/46": "262220", - "2800:bf0:2302::/40": "27947", - "2001:559:b2::/48": "22258", - "2400:fc00:8cf2::/39": "45773", - "2606:ec0:1000::/36": "4906", - "2a02:26f7:c449::/42": "20940", - "2001:550:f01::/35": "174", - "2a02:26f7:cf04::/48": "36183", - "2a02:ac80:e1::/43": "25145", - "2409:8069:2906::/47": "9808", - "240e:5e:f000::/36": "4813", - "2803:6a60:4::/32": "262186", - "2804:6a80::/32": "270340", - "2804:70bc::/32": "270745", - "2404:5f40::/48": "38447", - "2804:204:901::/32": "28186", - "2804:ef4:8004::/33": "28642", - "2a06:8146:49a1::/48": "199364", - "2001:67c:4c4::/48": "48171", - "240a:a34a::/32": "143492", - "240a:accb::/32": "145925", - "2803:5a80::/32": "262931", - "2a00:1d18::/32": "43939", - "2a0e:40c0:2::/48": "21100", - "2001:67c:21d8::/48": "41701", - "240e:3b7:9c00::/34": "140310", - "2408:8957:4f00::/40": "17816", - "2a03:2880:f200::/47": "32934", - "2404:4a00:4::/64": "55423", - "2605:3bc0::/32": "7850", - "2a05:6200::/41": "201630", - "2a0b:85c0::/32": "32338", - "2403:3240::/32": "136975", - "240a:ab1f::/32": "145497", - "2804:9d0::/32": "262995", - "2a02:26f7:5b::/48": "20940", - "2a03:f85:2::/48": "60781", - "2a0e:ec0::/29": "211147", - "2405:9d80:2::/45": "45538", - "2801:80:600::/48": "52622", - "2a02:26f7:c684::/48": "36183", - "2a02:4f60::/32": "60198", - "2a03:3180::/44": "44453", - "2a01:a2e0::/32": "3303", - "2a02:c50:db8::/48": "196610", - "2a02:26f7:d184::/48": "36183", - "2a06:bcc0:11::/48": "203724", - "2001:ab7::/34": "15594", - "240e:3b0:8200::/35": "140316", - "2a01:4aa0::/32": "24951", - "2001:43f8:1800::/40": "37724", - "2402:b180:1::/48": "36351", - "2408:840d:b800::/42": "17621", - "2600:1406:1b::/48": "21342", - "2600:6c7f:90b0::/48": "20115", - "2804:1d60::/32": "264365", - "2001:df7:1000::/48": "59216", - "240a:af49::/32": "146563", - "2a02:d8c0::/29": "2119", - "2001:678:1bc::/48": "48149", - "2001:559:7d2::/48": "33657", - "2402:800:5501::/44": "7552", - "240a:ad02::/32": "145980", - "2600:1006:b000::/42": "6167", - "2604:2680::/48": "2386", - "2804:77f4::/32": "271210", - "2001:559:116::/48": "20214", - "2001:678:220::/48": "52022", - "2401:d800:d0a0::/41": "7552", - "2404:f800::/32": "8075", - "240a:a3b0::/32": "143594", - "2806:230:2055::/48": "11888", - "2001:559:c395::/48": "33667", - "2400:4e80::/35": "131584", - "2403:2c40::/32": "58668", - "2408:84f3:be40::/33": "17816", - "2803:ab00:91::/48": "52471", - "2a09:7:200b::/48": "6233", - "2001:e60:d400::/42": "4766", - "2401:5e40:1100::/36": "63770", - "2402:b600::/32": "7532", - "2600:140f:3c00::/48": "9498", - "2a00:59c0::/46": "49232", - "2001:44b8:4068::/48": "7545", - "2600:1007:b0d0::/44": "6167", - "2600:9000:21a9::/41": "16509", - "2620:115:6001::/48": "32336", - "2803:e600:cacf::/34": "18809", - "2804:1bd8:8100::/36": "28224", - "2806:239::/32": "18592", - "2001:67c:2d8c::/48": "33965", - "2804:38e0::/32": "266507", - "2a02:2640::/32": "2119", - "2806:250:22::/47": "28509", - "2001:4408:7d00::/38": "4758", - "2400:fc00:85b0::/38": "45773", - "240a:a5e9::/32": "144163", - "2607:f6f0:206::/48": "27566", - "2607:f928:4::/48": "13359", - "2620:48:c000::/46": "26549", - "2804:3424::/32": "265438", - "2408:8256:3a81::/43": "17623", - "240a:ae26::/32": "146272", - "2607:6b80:1::/46": "46562", - "2804:2250:543a::/34": "262756", - "2001:559:85a7::/48": "7922", - "2001:4546:1003::/48": "20940", - "2406:c500:fff3::/48": "45671", - "2804:487c:201::/46": "267124", - "2a09:26c0::/32": "41114", - "2404:8000:ba72::/33": "17451", - "2804:8088::/32": "271757", - "2804:8234::/32": "272505", - "2a02:26f0:42::/43": "20940", - "2405:da40::/32": "140220", - "240a:a7b8::/32": "144626", - "2a05:2140::/29": "201603", - "2001:df7:8d00::/48": "138318", - "2400:cb00:aa20::/47": "13335", - "2409:802f:2904::/48": "56041", - "2607:f110:e410::/42": "21889", - "2804:4e00::/32": "268233", - "2001:559:8675::/44": "7922", - "2001:67c:22c8::/48": "3246", - "2001:4878:b136::/48": "12222", - "2001:559:d0::/48": "33651", - "2600:1415:400::/48": "24319", - "2620:11d:9002:200::/56": "14805", - "2a02:26f0:3101::/38": "20940", - "2001:67c:4e4::/48": "204896", - "240e:473:1920::/41": "140486", - "2600:100e:9f20::/34": "6167", - "2402:3a80:800::/44": "38266", - "2607:fb60::/32": "1742", - "2800:b70:2::/44": "262191", - "2804:59b0::/32": "268719", - "2400:7400:57::/42": "38044", - "2401:ff80:138b::/45": "133954", - "2402:6800:7::/37": "22822", - "2404:b1:b000::/33": "9891", - "2606:2800:233::/45": "15133", - "2a07:3502:10e0::/48": "1136", - "2001:579:60a8::/38": "22773", - "2402:e380:400::/40": "141376", - "240e:3bd:6400::/35": "140312", - "2605:f700:43::/44": "18978", - "2606:2800:4025::/44": "15133", - "2607:f6f0:2000::/48": "54588", - "2a0b:c306::/32": "9119", - "2001:67c:2ce8::/48": "199508", - "2402:800:582b::/41": "7552", - "240a:ac55::/32": "145807", - "2605:3380:ffff::/48": "12025", - "2605:f440:beef::/48": "212105", - "2a00:5d20::/32": "28717", - "2a01:7ea0::/32": "13012", - "2402:76c0::/32": "137449", - "2604:b300:ad0a::/48": "394896", - "2804:34::/35": "28306", - "2a00:14c0::/32": "35382", - "2409:8c28:2909::/35": "56041", - "2600:6c7f:9180::/42": "19115", - "2620:130:2000::/47": "18701", - "2a00:d1a0:2::/32": "61317", - "2a01:5ec0::/34": "44244", - "2a10:2f00:15d::/48": "39282", - "240a:adf5::/32": "146223", - "2804:be4:c::/32": "52840", - "2a02:26f7:c4::/48": "36183", - "2a0f:b100:3::/44": "202945", - "2405:d300:800::/40": "17477", - "2606:df00:3::/48": "20150", - "2607:fdc8:800::/48": "30036", - "2804:14d:7681::/41": "28573", - "2a01:c9c0:8000::/48": "2280", - "2a05:1084:a000::/33": "59598", - "2a09:bac0:97::/44": "13335", - "2404:6dc0::/32": "135876", - "240a:a64b::/32": "144261", - "2803:81c0::/32": "263238", - "2804:3b20::/38": "266131", - "2a02:9c8::/29": "5619", - "2001:57b:1243::/36": "22773", - "2001:1248:881b::/42": "11172", - "2403:0:119::/45": "4755", - "240b:4003:fee3::/48": "45102", - "240a:a12a::/32": "142948", - "2600:1017:b800::/42": "22394", - "2803:5700::/32": "28024", - "2a02:166a::/32": "20473", - "2a0a:9440::/29": "57111", - "2a02:7900::/39": "16154", - "2402:800:911d::/41": "7552", - "2408:8459:ae10::/42": "17623", - "2605:1680::/32": "18596", - "2803:9da0::/32": "267741", - "2804:176c::/32": "263098", - "2a02:fa8:1c10::/44": "41041", - "2a02:26f7:ea45::/46": "20940", - "2a04:da00::/29": "60140", - "2a0b:de00:30::/47": "207486", - "2c0f:fc89:4001::/32": "36992", - "2401:4900:3a2a::/45": "45609", - "240e:44d:1880::/41": "4134", - "2600:1400:5::/48": "23454", - "2620:131:1005::/42": "26450", - "2a00:4802:1810::/38": "13124", - "2a04:1b00:8::/47": "61005", - "2a0f:9980:598::/48": "40676", - "2604:ff40::/32": "30211", - "2607:3f00::/42": "46261", - "2804:4c14:da01::/39": "267348", - "240e:350:5c00::/34": "134419", - "2600:5000:5832::/30": "7029", - "2606:6fc0::/32": "399897", - "2a02:26f7:d254::/48": "36183", - "2606:ae00:c500::/36": "7287", - "2610:80:3000::/29": "6079", - "2a02:d140::/29": "49788", - "2001:559:3e1::/48": "7015", - "2605:b100:f000::/36": "36522", - "2607:fe88:1000::/33": "852", - "2804:1af8::/32": "61701", - "2804:1f1c::/32": "265235", - "2804:5fec::/32": "269134", - "2001:49d0:140::/42": "20177", - "2409:8904:e070::/40": "24547", - "2800:484:7200::/37": "14080", - "2620:189::/36": "16957", - "2806:230:602c::/48": "265594", - "2a04:1a40::/48": "50362", - "2a04:4e40:7400::/48": "54113", - "2001:559:4b::/48": "33652", - "2001:678:c60::/48": "39527", - "2001:bf7:7a0::/36": "44194", - "2602:fca7:100::/48": "399318", - "2607:f750:9000::/39": "23473", - "2800:430:6000::/40": "23487", - "2a0c:ffc0::/48": "57342", - "2a0c:9a40:808d::/48": "201106", - "2001:559:81e0::/46": "7015", - "2001:559:83c2::/48": "33659", - "2001:559:c1c4::/47": "7015", - "2401:4a00::/32": "17444", - "2407:2a80::/32": "133524", - "240a:a279::/32": "143283", - "2806:283:4000::/36": "265515", - "2a0e:b107:790::/44": "208680", - "2a0f:fec0::/29": "198668", - "2a05:2e00::/32": "49460", - "2408:8000:2000::/33": "4837", - "240a:a524::/32": "143966", - "2607:f5d8:21::/32": "11096", - "2804:1f34::/32": "262679", - "2804:2b44::/43": "265144", - "2804:7a18::/32": "271347", - "2a03:9e20::/32": "203672", - "2a0e:b107:bd0::/48": "140936", - "2001:559:10a::/48": "7725", - "2400:a980:7500::/36": "133111", - "2803:9a00::/32": "262239", - "2803:b2c0::/47": "264851", - "2803:ed40::/32": "264676", - "2a01:28:eeef::/35": "39392", - "2607:f588::/32": "3257", - "2620:11:40::/45": "3486", - "2a02:26f7:bccc::/48": "36183", - "2405:1c0:6a53::/42": "55303", - "240a:a402::/32": "143676", - "2804:4960::/32": "267181", - "2a00:86c0:1022::/43": "2906", - "2405:8a00:c013::/42": "55824", - "2604:880:200::/45": "29802", - "2804:3b70::/32": "266149", - "2a0f:1f80::/29": "60781", - "2001:559:544::/48": "33657", - "2001:44b0::/32": "17940", - "2405:1c0:6173::/40": "55303", - "2607:1e00:1001::/46": "22489", - "2803:4160::/32": "269726", - "2a00:d103::/34": "15704", - "2001:418:141f:300::/42": "2914", - "2001:559:480::/48": "33657", - "2401:d800:b120::/41": "7552", - "2600:c0c::/32": "11854", - "2a04:a000::/29": "59630", - "2a0e:77c0:2099::/48": "213281", - "2401:1040::/38": "138482", - "240a:a391::/32": "143563", - "240a:ac95::/32": "145871", - "2600:1003:9440::/44": "6167", - "2604:c5c0:100::/38": "29727", - "2001:67c:28f4::/48": "198827", - "2409:8914:1700::/36": "56044", - "240a:acd5::/32": "145935", - "2804:6e38::/32": "270583", - "2a02:f48:2000::/40": "50613", - "2607:8480::/34": "22639", - "2a02:6ea0:babe::/48": "60068", - "2a05:dfc7:6::/48": "62240", - "2001:559:82a5::/48": "33657", - "2402:b801:3900::/37": "18371", - "2403:4800:1200::/32": "9443", - "240a:a012::/32": "142668", - "2a02:7920::/48": "201868", - "2001:559:794::/48": "33657", - "2001:559:c255::/48": "7922", - "2408:8456:e640::/36": "17816", - "2806:2f0:31a1::/41": "17072", - "2a0c:2280::/29": "3292", - "240e:3bb:2200::/37": "136198", - "2606:45c0:1572::/32": "26073", - "2804:2000::/38": "264459", - "2804:2fe4::/32": "264919", - "2001:559:c3f8::/48": "7725", - "2001:579:5044::/40": "22773", - "240e:e9:b000::/37": "137697", - "2604:d7c0::/32": "11114", - "2804:2458::/32": "264216", - "2a07:b7c0::/29": "35280", - "2001:1248:55a8::/47": "11172", - "2001:4830:c170::/48": "22147", - "2401:4800:2::/48": "38457", - "2406:840:e110::/48": "141712", - "240e:964:eac0::/42": "133775", - "2607:f740:14::/46": "36236", - "2a00:139b::/32": "204680", - "2a0c:8540:a::/47": "42198", - "2001:67c:3f8::/48": "199071", - "2001:dc7:1001::/45": "24151", - "240a:a4d9::/32": "143891", - "2620:11a:a029::/46": "36040", - "2804:204:224::/44": "28186", - "2401:b500::/32": "9268", - "2402:9d80:26d::/40": "131429", - "2a02:840::/32": "41828", - "2001:559:1e6::/48": "7015", - "2001:df4:1d80::/48": "140878", - "2a03:ca00::/32": "25592", - "2001:559:200::/48": "33659", - "240e:3b7:1200::/39": "4134", - "2c0f:f590::/54": "36974", - "2001:c20:48c4::/48": "9255", - "2001:cb0:220a::/35": "4637", - "2600:140f:4601::/36": "20940", - "2806:2f0:2021::/46": "22884", - "2405:8500::/32": "55898", - "2804:346c::/32": "265457", - "2a10:b9c0:ffff::/48": "213346", - "240a:a392::/32": "143564", - "2a02:1670::/32": "16024", - "2001:559:c193::/48": "33489", - "2409:8a29::/27": "9808", - "2a10:ce40::/48": "140224", - "2001:67c:2ea8::/48": "49752", - "2001:4888:801c::/47": "22394", - "2402:6940:1402::/32": "7645", - "2402:e280:2105::/46": "134674", - "2801:1c:3000::/48": "16906", - "2001:4de0:5010::/48": "12989", - "2602:80c::/48": "14618", - "2a11:d80::/29": "208861", - "2607:f518:2000::/44": "46887", - "2804:6828::/32": "269672", - "2001:fd8:34c0::/42": "132199", - "2001:43f8:770::/46": "37501", - "2804:4cec::/32": "267401", - "2a0d:ee00::/32": "42487", - "2001:44b8:26::/48": "7545", - "2400:8500:cbbd::/48": "7506", - "2406:2400:f1f0::/48": "45287", - "2400:cb00:370::/48": "13335", - "2402:800:978d::/43": "7552", - "2408:8459:810::/41": "17622", - "2a02:d00::/32": "49101", - "2a06:dd00::/29": "56694", - "2001:1938:4200::/47": "12989", - "240a:a397::/32": "143569", - "240e:3bd:5600::/34": "4134", - "2a02:2698:400::/38": "50512", - "240a:a207::/32": "143169", - "2804:828::/32": "262354", - "2a07:14c0:2::/34": "208861", - "2a0f:1e80:62::/32": "30633", - "2a0f:dc40::/29": "205185", - "2403:9400:1::/46": "10006", - "240a:ad81::/32": "146107", - "240e:63:f000::/36": "140313", - "2605:a40e:10::/37": "33363", - "2607:f108:302::/36": "29838", - "2801:10c::/44": "18747", - "2a0b:4d07:701::/46": "44239", - "2001:678:c2c::/48": "212746", - "2600:1003:f440::/44": "6167", - "2620:1e:a000::/48": "196962", - "2804:78b0::/32": "271259", - "2401:d800:f90::/42": "7552", - "2604:9b80::/32": "30144", - "2a0e:8f02:2130::/48": "211722", - "2403:fbc0::/48": "23959", - "2405:1c0:6135::/41": "55303", - "2406:840:4000::/48": "139317", - "2409:8720::/32": "56046", - "2600:6c20::/29": "20115", - "2607:f3e0::/32": "11647", - "2804:5db0::/32": "268986", - "2001:f60::/27": "2519", - "2a02:26f7:ea49::/42": "20940", - "2a03:3080:53::/48": "16244", - "2409:8904:cea0::/39": "24547", - "2620:171:bc::/41": "715", - "2a0b:4340:b0::/48": "205058", - "2a0f:5381::/35": "208135", - "2001:67c:60c::/48": "201907", - "2001:67c:1bf4::/48": "58010", - "2402:800:337f::/40": "7552", - "2402:1e80:0:3000::/48": "4672", - "240a:a296::/32": "143312", - "2a02:2988::/32": "24916", - "2401:7400:4020::/36": "4773", - "2402:800:9563::/43": "7552", - "240e:3bc:9c00::/34": "140310", - "2804:15a4::/32": "263400", - "2804:242c::/32": "264206", - "2804:51a4:6100::/32": "268467", - "2402:800:bd50::/42": "7552", - "2405:9800:b900::/38": "133481", - "240a:accd::/32": "145927", - "2600:1017:f110::/38": "6167", - "240a:aa03::/32": "145213", - "2604:d600:cab::/35": "32098", - "2801:17:e800::/48": "27951", - "2a02:27b8:2002::/45": "49278", - "2408:8956:5500::/40": "17816", - "240a:a76f::/32": "144553", - "2604:d600:15ce::/43": "32098", - "240e:6b0:1000::/32": "4134", - "2604:2e8e:c000::/35": "30036", - "2605:7480::/32": "30028", - "2a02:26f7:edc4::/48": "36183", - "2a02:2e02:16b0::/41": "12479", - "2001:67c:24dc::/48": "197944", - "2401:1640::/32": "18254", - "2402:800:99e0::/44": "7552", - "2607:bf80::/32": "32100", - "2607:fae0:f200::/44": "63311", - "2605:5e40::/48": "397810", - "2804:50c8::/32": "268410", - "2a0a:3280::/29": "49748", - "240e:1e::/36": "134773", - "240e:982:c200::/35": "4134", - "2001:559:4f2::/48": "7922", - "2602:fd51::/36": "13895", - "2602:ffe4:402::/36": "21859", - "2a03:77e0:3301::/48": "48305", - "2408:8459:ac10::/42": "17623", - "2804:5b7c::/32": "268848", - "2804:7a0c::/32": "271344", - "2a04:45c0::/29": "60717", - "2001:df5:8400::/48": "134515", - "2402:b400:4428::/38": "45960", - "2408:8456:3000::/41": "17623", - "2607:fe28:5020::/43": "53347", - "2a0e:1c04:1::/30": "61317", - "2001:df2:e380::/48": "140224", - "240e:438:5240::/37": "4134", - "2620:0:e00::/47": "38", - "2804:1cbc::/32": "61672", - "2a01:b740:1001::/39": "714", - "2001:559:2d2::/48": "7016", - "2604:d600:51d::/42": "32098", - "2605:3f40::/32": "15054", - "2001:559:d1::/48": "33659", - "2401:ff80:120f::/43": "133954", - "2605:d580::/32": "46690", - "2a02:26f7:b602::/47": "20940", - "2404:1580::/32": "134854", - "2408:8459:5610::/42": "17623", - "2408:8459:9c10::/42": "17623", - "2620:91:4000::/48": "393599", - "2800:160:1d76::/44": "14259", - "2a02:e0c0:1c00::/34": "9100", - "2409:8a51:100::/38": "56047", - "240a:af04::/32": "146494", - "2602:fe19:6401::/32": "26073", - "2a06:cbc0::/29": "12693", - "2a09:9b40::/48": "209562", - "2a0a:9204:31::/30": "61317", - "2001:559:c279::/48": "33657", - "2402:8000::/32": "24541", - "240e:3b1:f100::/36": "4134", - "2600:1000:b130::/44": "22394", - "2600:100b:b0e0::/39": "6167", - "2605:c00:400::/36": "46920", - "2800:484:2f00::/40": "10620", - "2a0f:5707:af0b::/48": "211358", - "2001:559:c3de::/48": "21508", - "2604:d600:1071::/46": "32098", - "2a02:26f7:b6c4::/48": "36183", - "2a02:26f7:e545::/46": "20940", - "240a:a88d::/32": "144839", - "2607:f330:6aab::/37": "15130", - "2a04:5880::/29": "34759", - "2a0c:4380:100::/48": "36236", - "240a:a8a3::/32": "144861", - "2600:1015:b030::/41": "6167", - "240e:438:2040::/38": "4134", - "2607:f5d8::/46": "11096", - "2001:49f0:d034::/48": "174", - "240a:ab3e::/32": "145528", - "2a00:c700:c000::/34": "47609", - "2a01:4262:1ab::/48": "205235", - "2a06:98c0:1400::/47": "202623", - "2001:559:8384::/48": "33491", - "2001:579:c184::/41": "22773", - "2402:9d80:105::/48": "131429", - "240a:a158::/32": "142994", - "2600:1017:b1e0::/38": "6167", - "2607:f400::/32": "7029", - "2a01:8a60::/39": "60191", - "2001:559:8411::/48": "7016", - "2407:7a80:13::/48": "132384", - "240e:46c::/30": "4812", - "240e:640:ef00::/27": "4134", - "2a0c:e600::/29": "197036", - "2001:559:c31f::/48": "33651", - "2405:2500:65::/48": "136565", - "2409:8915:6200::/35": "56044", - "2607:f9c0::/32": "22070", - "2a00:1ee8::/32": "29256", - "240a:a1ac::/32": "143078", - "240a:a589::/32": "144067", - "2606:5b80:2157::/32": "22612", - "2a03:e040:10::/48": "34879", - "2001:1248:8459::/45": "11172", - "2804:14d:90b4::/41": "28573", - "2a01:4ac0:1::/48": "57497", - "2a0d:2e00:2000::/48": "33932", - "240e:5a:6c00::/38": "137702", - "2a02:3030:400::/23": "6805", - "2001:559:255::/48": "7725", - "2602:ffc5:200::/48": "20473", - "2605:b900::/47": "36218", - "2a00:7e80::/32": "197197", - "2a01:8140::/32": "42331", - "2408:8956:b300::/40": "17816", - "2607:f4e0::/38": "4150", - "2402:79c0:1127::/48": "26415", - "2405:dc00:8000::/33": "4804", - "2620:12e:9000::/44": "395423", - "2804:44e8:201::/39": "267660", - "2a0b:dc0::/47": "58049", - "2404:1c80::/32": "4847", - "2a05:1082:1::/48": "136918", - "2a07:3500:1100::/48": "34108", - "2409:8a04:3100::/33": "24547", - "2620:cb:6::/47": "3549", - "2806:230:1027::/48": "11888", - "2a05:de00::/29": "30835", - "2400:a980:cc::/48": "134169", - "2406:3003:3028::/45": "4657", - "2600:1017:9410::/38": "6167", - "2804:8154::/32": "272447", - "2a01:28::/32": "39392", - "2a04:f580:8000::/48": "4134", - "2a0e:fd45:693a::/32": "44103", - "2001:559:c169::/48": "7725", - "2001:1980:2500::/33": "29838", - "240e:5e:4001::/46": "4134", - "2804:624c::/32": "53106", - "2804:6f68::/32": "270658", - "2604:3940::/32": "31841", - "2a01:9660::/32": "199743", - "2a0a:6d00::/29": "206988", - "2001:256:100::/48": "24367", - "2001:1388:5e02::/44": "6147", - "2600:140f:7001::/38": "20940", - "2620:11c:a000::/47": "26021", - "2a09:b280:beef::/48": "208886", - "2409:8948:9000::/40": "24445", - "240a:a5d5::/32": "144143", - "2408:8957:a200::/40": "17622", - "2600:9000:110b::/43": "16509", - "2a02:2698:9c00::/38": "34150", - "2001:df3:810::/44": "22787", - "2401:8ac0:120::/48": "4671", - "240a:a862::/32": "144796", - "2a0a:ea80::/29": "206589", - "240a:ae46::/32": "146304", - "2804:5508::/32": "268685", - "2a02:26f7:d940::/48": "36183", - "2a09:d680::/31": "20473", - "2402:800:342b::/41": "7552", - "2404:ba00::/47": "17665", - "2408:8957:9c00::/40": "17622", - "2a02:6940::/32": "39642", - "2600:1417:3000::/54": "24203", - "2804:2838:21a::/32": "263948", - "2a01:300::/43": "9009", - "2a05:2701:f30::/44": "62371", - "2a0c:b641:f0::/46": "210985", - "2a0e:b106:20::/44": "203038", - "2001:678:ef4::/48": "202592", - "2402:e280:3d7c::/40": "134674", - "2409:8c35::/28": "9808", - "240e:3bf:9200::/36": "140317", - "2600:1403:a::/48": "21342", - "2604:1d40:202::/47": "30612", - "2a02:26f7:c3d4::/48": "36183", - "2001:400:a000:8::/61": "293", - "2602:feda:b8f::/48": "205923", - "2804:2738::/32": "263885", - "2a06:af00::/29": "15694", - "2a02:25a8:deae::/29": "12824", - "240a:a829::/32": "144739", - "2600:1406:5001::/37": "20940", - "2606:2800:5062::/45": "15133", - "2607:ffd8:801::/48": "17048", - "2803:7d00::/48": "52327", - "2804:4fe4::/32": "53086", - "2a01:6900::/32": "16091", - "2001:559:80::/48": "7015", - "2001:df4:1f80::/48": "18131", - "2a00:1288:112::/47": "34010", - "2a02:26f7:d685::/46": "20940", - "2001:678:f14::/48": "8767", - "2404:c800::/32": "4760", - "240a:a595::/32": "144079", - "2a0d:580::/32": "206767", - "2c0f:7400::/32": "328720", - "2407:7100::/32": "131149", - "2409:8a53:700::/36": "56047", - "240a:a211::/32": "143179", - "2604:d200::/32": "33470", - "2a02:388::/32": "39040", - "2a06:fd80::/47": "206206", - "2a09:e1c1:d000::/36": "211581", - "2a05:ef40::/29": "200428", - "2a0b:aa80::/29": "42669", - "2001:559:c1a5::/48": "21508", - "2404:fc40::/32": "133971", - "2409:8070:2100::/36": "9808", - "2a00:c940::/32": "12581", - "2402:e380:322::/48": "64041", - "2803:4a80::/32": "27865", - "2a02:26f7:e08c::/48": "36183", - "2402:800:3a71::/44": "7552", - "2804:5ea8::/32": "269048", - "2804:7a9c::/32": "53141", - "2804:7f10::/32": "271664", - "2a00:adc0::/35": "41655", - "2a0f:9400:770c::/48": "53356", - "2804:53c8::/32": "268606", - "2001:559:478::/48": "20214", - "2001:df0:6800::/48": "23620", - "2001:1a11:63::/45": "8781", - "2401:d800:2860::/40": "7552", - "2406:c500:ffd0::/48": "20473", - "2408:8957:1f40::/40": "17816", - "2408:8957:8f00::/40": "17816", - "2a0b:b87:ffb4::/48": "211248", - "2001:b08:27::/32": "3267", - "2001:df2:c680::/48": "139980", - "2001:b400:f420::/22": "3462", - "2408:8256:34a0::/39": "17816", - "2a02:26f7:c3ca::/47": "20940", - "2a0a:15c0::/29": "206273", - "2001:400:2410::/48": "3152", - "2a02:26f7:d14a::/45": "20940", - "2408:8459:3230::/44": "17623", - "2408:8957:2500::/40": "17816", - "2605:6640::/32": "397797", - "2c0f:f988::/32": "37353", - "2001:c20:5400::/34": "3758", - "2001:4479:900::/35": "7545", - "2408:8034::/32": "4837", - "2a02:26f7:8a::/48": "36183", - "2a0d:2580::/47": "213262", - "240a:a59d::/32": "144087", - "240a:ac01::/32": "145723", - "240a:acfe::/32": "145976", - "2600:100d:be00::/44": "6167", - "2804:1140::/32": "263666", - "2804:145c:8b80::/37": "263327", - "2a0c:5247:9000::/36": "59504", - "2404:c840::/48": "135970", - "240a:a5cd::/32": "144135", - "2603:f248::/29": "396356", - "2800:160:144e::/43": "14259", - "2a00:9c80::/32": "35613", - "2a02:24c0::/32": "197307", - "2a02:26f0:117::/48": "21342", - "2001:67c:2160::/48": "2486", - "2400:4840:10::/48": "395363", - "2402:800:b410::/42": "7552", - "2404:ec80::/32": "10076", - "2406:6e00:ef98::/35": "17457", - "2a0d:140:2000::/29": "209014", - "2001:df4:b880::/48": "17823", - "2a0a:b387::/32": "35048", - "2a0e:b940::/29": "208395", - "2001:67c:18d8::/48": "199973", - "2404:1f00:9000::/33": "55947", - "2405:9800:c913::/45": "45430", - "2607:5100::/28": "36734", - "2001:559:c356::/47": "33287", - "2401:3cc0:401::/38": "137409", - "2a01:398::/32": "24867", - "2a0f:e404:100::/46": "58057", - "2603:90f5:9::/45": "20115", - "240a:a43f::/32": "143737", - "240a:a8b0::/32": "144874", - "240e:13:7000::/37": "139201", - "2804:14d:2a82::/47": "28573", - "2804:1784:8900::/33": "263152", - "2001:388:5071::/34": "7575", - "2001:1ab0::/32": "29134", - "2400:a4c0::/48": "7575", - "2402:800:3163::/43": "7552", - "240a:ad61::/32": "146075", - "2604:4b00::/32": "26123", - "2800:2a0::/38": "27947", - "2a0e:2740::/29": "208093", - "2402:e600::/32": "17927", - "2404:8d02:29c7::/37": "9587", - "240a:a04c::/32": "142726", - "2804:6524::/32": "269471", - "2a0f:9a80::/29": "51290", - "2001:550:1b0b::/37": "174", - "2a06:5ac0::/29": "204202", - "2001:df5:6400::/48": "55380", - "2600:6c34:5c::/48": "33588", - "2606:6800:2800::/40": "394898", - "2a05:8440::/29": "31708", - "2a0a:2584::/31": "206568", - "240a:a950::/32": "145034", - "2001:559:871d::/48": "33657", - "2403:bcc0::/48": "48011", - "240a:a086::/32": "142784", - "240a:a371::/32": "143531", - "240a:a538::/32": "143986", - "2604:1580:fe03::/39": "54455", - "2804:a58::/32": "262274", - "2800:68:f::/43": "61468", - "2804:3b84::/32": "266154", - "2a02:d40:3::/48": "197071", - "2a02:2e02:82b0::/39": "12479", - "2a02:26f7:bf88::/48": "36183", - "2a0e:f7c0::/29": "57048", - "2800:160:1b32::/45": "14259", - "2804:a::/31": "14840", - "2a02:26f7:cb44::/48": "36183", - "2804:728c::/32": "270860", - "2a00:18c8::/29": "33915", - "2a02:26f7:f340::/48": "36183", - "2400:9380:8040::/48": "4134", - "2402:3a80:1100::/38": "38266", - "2607:fcf8::/32": "26788", - "2a0b:7d80::/29": "59889", - "2c0f:f7b8::/32": "327824", - "2001:44b8:4066::/48": "7545", - "240a:afac::/32": "146662", - "240e:44d:3e80::/41": "4134", - "2806:230:2026::/48": "265594", - "2a06:8500::/29": "35684", - "2001:1838:5003::/40": "23352", - "2a07:7b00::/29": "60960", - "2001:559:82bd::/48": "33668", - "2408:8459:1910::/42": "17623", - "2801:0:60::/48": "52274", - "2a03:b2c0::/29": "40676", - "2a02:26f7:c445::/46": "20940", - "2001:559:55e::/48": "33657", - "2001:559:8289::/48": "20214", - "2001:67c:247c::/48": "49754", - "2001:1248:841c::/42": "11172", - "2404:c900:1::/48": "58682", - "240e:9:7000::/30": "4134", - "2603:c020:c000::/35": "31898", - "2a02:26f7:cf80::/48": "36183", - "2a02:26f7:f988::/48": "36183", - "2001:480:20::/48": "48", - "2001:559:74d::/48": "7015", - "2404:3d00:4144::/47": "21433", - "2408:8459:6a50::/37": "17816", - "2620:111:1001::/48": "18469", - "2a00:7740::/32": "33915", - "2001:67c:5bc::/48": "197915", - "2001:4b60::/40": "28857", - "2403:5f40:ca05::/48": "16509", - "240a:ae8c::/32": "146374", - "2600:6c7f:9130::/44": "20115", - "2605:a401:875e::/40": "33363", - "2a02:26f7:f8d8::/48": "36183", - "2a02:26f7:f6c9::/46": "20940", - "2001:418:149d::/48": "93", - "2001:4200:310::/36": "2018", - "2405:9800:c90f::/48": "45430", - "240a:adf6::/32": "146224", - "2607:fcd0:fa80:4::/62": "8100", - "2803:d040::/32": "61497", - "2a00:7160::/32": "8449", - "2a0f:12c0::/29": "60262", - "2402:b940:200::/39": "138538", - "240e:978:500::/40": "131325", - "2607:ffb0:5005::/34": "6327", - "2a01:40:4949::/48": "204979", - "2a02:26f7:d285::/46": "20940", - "2a05:4c00::/29": "24750", - "2001:668:123::/40": "3257", - "2409:8d15:1800::/39": "56044", - "240e:3be:1200::/39": "4134", - "2a0c:b641:110::/44": "212007", - "2001:559:8012::/48": "33662", - "2401:ff80:1591::/46": "133954", - "240a:a47c::/32": "143798", - "2806:230:2056::/48": "265594", - "2a00:6620:2000::/48": "197746", - "2a03:7080::/32": "25387", - "2403:c00:f00::/45": "17488", - "2409:8c14:2000::/36": "56044", - "2607:f0d0:2000::/39": "36351", - "2800:2a0:2401::/35": "27947", - "2804:7f04::/32": "271661", - "2a03:2880:f21a::/45": "32934", - "2001:1488::/32": "25192", - "2406:f00:2::/48": "58758", - "2406:4e40:501::/38": "140966", - "240a:a87b::/32": "144821", - "2804:5cc4::/32": "268929", - "2804:7008::/32": "270702", - "2a00:fc00:e004::/44": "3255", - "240a:aada::/32": "145428", - "2804:431:c000::/35": "27699", - "2a03:5380::/32": "34612", - "2a0e:8f80::/48": "52051", - "2001:559:c0aa::/48": "33651", - "2001:12f0:b3f::/48": "1916", - "2803:580::/32": "61449", - "2a03:b640::/32": "9038", - "2a04:f380::/32": "59985", - "2620:5e:6000::/48": "701", - "2801:124::/44": "270030", - "2001:67c:2418::/48": "9023", - "2400:a140:ffff::/48": "131964", - "2408:8459:9450::/38": "17816", - "2620:149:1540::/36": "714", - "2804:7578::/32": "271049", - "2a02:2698:b000::/36": "47911", - "2001:ac8::/45": "9009", - "2a03:7480::/44": "60781", - "2a09:5fc0::/29": "35360", - "2001:579:b9c4::/44": "22773", - "240a:a980::/32": "145082", - "240e:473:9150::/40": "4134", - "2600:6c3b:21::/43": "20115", - "2408:84f3:ea10::/42": "134543", - "240e:3b8:3e00::/33": "140308", - "2a09:4c0:e01::/39": "58057", - "2001:559:84ee::/48": "33287", - "2600:6c38:718::/47": "20115", - "2406:4440:f000::/48": "38173", - "240a:aed3::/32": "146445", - "2600:1408:8000::/48": "35994", - "2405:ba00:8810::/48": "63295", - "2409:8004:2900::/35": "24547", - "2a02:2698:5800::/38": "42683", - "2a04:17c0::/29": "43404", - "2a09:d80::/29": "208861", - "2a0a:4640:a::/43": "206177", - "2001:67c:1348::/48": "2485", - "2001:49f0:a071::/36": "174", - "2401:b780:5004::/44": "45410", - "2600:140f:3201::/37": "20940", - "2606:ce80:6::/48": "64259", - "2001:559:8668::/48": "7725", - "2001:13d2:6807::/32": "7303", - "240a:a377::/32": "143537", - "240a:ac89::/32": "145859", - "2803:2540::/44": "264668", - "2803:cf00::/32": "264642", - "2a0e:fd45:40f6::/48": "202297", - "2600:1f70:c000::/40": "16509", - "2606:700::/32": "54054", - "2806:230:2003::/48": "11888", - "2a03:8600:1008::/32": "3399", - "2c0f:f430::/32": "29614", - "2001:559:c08c::/48": "33287", - "2402:6800:761::/46": "22822", - "2404:4f80:36::/38": "58715", - "2804:2a84::/32": "264076", - "2409:8914:9e00::/39": "56044", - "2605:a401:8120::/46": "33363", - "2800:bf0:80e7::/48": "27947", - "2804:14d:5cc3::/43": "28573", - "2a01:7860::/32": "12859", - "2001:4878:2259::/48": "12222", - "2409:8c1e:75c0::/32": "9808", - "240a:af10::/32": "146506", - "2803:df20::/32": "266781", - "2a02:5080:200::/35": "51825", - "2401:d800:7960::/40": "7552", - "2407:6240:1000::/36": "137095", - "240e:438:6040::/38": "4134", - "2606:cd00:11::/32": "40845", - "2804:14d:ecf3::/39": "28573", - "2a04:3600::/29": "57487", - "2001:67c:458::/48": "51786", - "2001:44c8:43e0::/37": "131445", - "2400:1a00:8001::/46": "17501", - "2400:cb00:aa23::/45": "13335", - "240e:cf:9000::/36": "139201", - "240e:982:4200::/36": "4134", - "2a02:ad8:1600::/33": "12389", - "2a0a:3140:2610::/44": "15532", - "2001:1378::/32": "52250", - "2406:daa0:c0c0::/44": "16509", - "2804:431:a000::/35": "27699", - "2a0e:1bc5::/35": "208621", - "2001:559:705::/46": "33659", - "2401:4900:3e80::/42": "45609", - "240e:473:1850::/39": "4134", - "2603:4:1500::/48": "44273", - "2800:160:1e13::/42": "14259", - "2804:22e8::/32": "264130", - "2001:df6:e580::/48": "24565", - "2806:267:1300::/37": "13999", - "2404:f900::/43": "58482", - "2a00:f660::/32": "42442", - "2a02:26f7:bc41::/46": "20940", - "2a02:2818:5::/48": "196705", - "2804:2404::/32": "264197", - "2001:559:1cb::/48": "20214", - "2604:1f80::/32": "54412", - "2804:4724::/32": "267034", - "2001:678:68c::/48": "13259", - "2804:e0c:140::/47": "28176", - "2804:7b80::/32": "262610", - "2400:9380:8301::/48": "4134", - "2401:f2c0::/32": "63760", - "2404:1a0:1003::/34": "24334", - "240a:ae51::/32": "146315", - "2a02:26f7:b905::/46": "20940", - "2a03:4360::/32": "61307", - "2a0c:f480::/29": "328543", - "2407:4000::/45": "38005", - "240e:3bf:dc00::/34": "4134", - "2001:559:8138::/47": "7725", - "2001:559:86fa::/48": "7016", - "2405:2700::/32": "24270", - "2408:8956:e400::/40": "17622", - "2602:ffb9::/36": "16621", - "2a03:2887:ff23::/48": "63293", - "2a0a:ec02:902::/48": "42692", - "2001:df6:ab00::/48": "138215", - "2605:fe80::/32": "7203", - "2a04:4e40:2610::/44": "54113", - "2c0f:f4c0:13d2::/37": "37611", - "2a05:cfc0::/29": "48635", - "2001:df0:314::/46": "140592", - "2402:800:381d::/42": "7552", - "2408:8956:8b00::/40": "17816", - "240a:a4f0::/32": "143914", - "2602:fed2:711f::/48": "141376", - "2804:61b0::/32": "269250", - "2a01:4420::/32": "30936", - "2a0f:9400:770b::/48": "20473", - "2001:4888:8069::/34": "6167", - "2804:4410::/32": "267619", - "2406:b200::/32": "9326", - "2406:bd00:decd::/48": "55651", - "2803:6900:524::/48": "52423", - "2a0b:4ec0::/29": "205692", - "2c0f:ed70::/32": "327822", - "2001:49d0:100::/42": "18460", - "2800:370:19::/48": "28006", - "2a00:1900:c000::/34": "8881", - "2a02:2010:2000::/43": "20978", - "2a06:13c0::/29": "206141", - "2001:dcd:2::/45": "397237", - "2001:1248:846b::/45": "11172", - "2600:1806:419::/48": "16552", - "2001:559:839c::/48": "33661", - "2600:bc00::/32": "54600", - "2804:1594::/32": "263396", - "2a02:ac80:31::/41": "25145", - "2a04:4e40:8a00::/48": "54113", - "2a0e:97c0:490::/44": "211044", - "240a:60:f00e::/48": "9605", - "240a:ab27::/32": "145505", - "2804:75c8::/32": "271069", - "2804:7bb0::/32": "271448", - "2a02:26f7:cb04::/48": "36183", - "2a02:26f7:d849::/46": "20940", - "2a04:d340::/29": "60717", - "2001:df2:d800::/48": "131895", - "240e:473:8050::/39": "4134", - "2a02:8060::/31": "6752", - "2001:4d0:6319::/32": "297", - "2001:49a0::/32": "10310", - "2401:d800:fa40::/42": "7552", - "2406:3000:8:4040::/46": "4657", - "2602:fe19:6400::/48": "62623", - "2800:160:1a3f::/41": "14259", - "2804:1f08::/32": "263293", - "2a02:2ab0:109::/38": "702", - "2001:559:81e4::/48": "33651", - "2001:ee0:2f20::/35": "45899", - "240a:a110::/32": "142922", - "2600:1417:1b::/45": "20940", - "2804:6fc::/43": "28158", - "2a00:1a80::/32": "33920", - "2a02:26f7:e648::/48": "36183", - "2a0e:46c4:6000::/37": "137490", - "240e:8f:e000::/35": "134761", - "2804:551c::/32": "268690", - "2001:559:105::/48": "33652", - "240e:980:2400::/40": "134768", - "2605:ba00::/32": "14638", - "2a02:6ea0:cd77::/48": "60068", - "240e:438:9e20::/43": "140647", - "2600:1419:6c01::/35": "20940", - "2620:11a:a02d::/46": "36040", - "2001:df3:5b80::/48": "140389", - "2406:e340::/32": "137274", - "240e:438:1640::/36": "4134", - "2a02:26f7:eb89::/42": "20940", - "2402:ee80:58::/47": "132647", - "2602:fe2e:fff::/48": "49752", - "2804:20b4:8000::/33": "264509", - "2a02:26f7:ca::/48": "36183", - "2001:579:d098::/41": "22773", - "2001:13c8::/32": "11960", - "2001:4130:108::/42": "24725", - "2803:9760::/32": "265684", - "2001:628:2001::/29": "1853", - "2400:eb40:1::/48": "14821", - "2600:140b:1c00::/48": "31109", - "2804:821c::/32": "272499", - "2a01:88::/32": "15806", - "2a09:6c40::/29": "209408", - "2001:559:c0af::/48": "33491", - "2402:800:6148::/47": "7552", - "240a:a5a6::/32": "144096", - "2a0b:fbc0::/32": "209985", - "240a:a2ad::/32": "143335", - "2803:a740:3001::/32": "27810", - "2804:dd0:301::/40": "28639", - "2804:701c::/32": "270706", - "2409:8904:69b0::/35": "24547", - "2a04:2dc0:1e::/48": "39216", - "2403:4800::/35": "9443", - "2406:e300::/47": "45250", - "2a10:641::/32": "6697", - "2001:559:419::/48": "7015", - "2409:8904:d590::/34": "24547", - "2620:190::/32": "3379", - "2804:8208::/32": "272494", - "2a09:fd40::/48": "16376", - "2405:9200:5f00::/44": "131596", - "2600:1008:f010::/40": "22394", - "2403:9800:112::/32": "4648", - "2404:138:46::/47": "38299", - "2804:13ac::/32": "263545", - "2a03:7be0::/32": "201787", - "2001:bf0::/41": "12732", - "2001:43f8:5::/48": "328325", - "2001:4878:c204::/48": "12222", - "2600:381:400::/29": "7018", - "2600:1f01:4830::/47": "16509", - "2a0b:c900::/29": "206836", - "240a:a2a9::/32": "143331", - "2604:92c0::/32": "19568", - "2606:dc00::/32": "7270", - "2a09:eb40::/32": "205718", - "2409:8e15:a000::/30": "56044", - "2607:fd48:204::/39": "13536", - "2620:12e:1000::/47": "396075", - "2804:132c::/32": "263519", - "2a01:1b8:5::/48": "206804", - "2c0f:ee88::/32": "328285", - "2001:253:134::/48": "142100", - "2a00:1c80::/29": "44647", - "2a02:26f7:72::/48": "36183", - "2001:559:392::/47": "7922", - "2407:e80:4::/32": "58689", - "240e:60c:d800::/38": "137688", - "2a02:d48::/40": "34913", - "2001:468:1600::/39": "11537", - "2001:579:717c::/40": "22773", - "2408:8957:1800::/39": "17622", - "2409:8904:8040::/39": "24547", - "2600:1f11::/36": "16509", - "2804:7674::/32": "271113", - "2804:7a44::/32": "271359", - "2408:8956:f1c0::/42": "17622", - "2409:8d15:800::/39": "56044", - "2001:559:446::/48": "7015", - "2001:67c:1578::/48": "43757", - "2001:fe8:8100::/47": "24435", - "2600:1407:a001::/36": "20940", - "2600:370f:3641::/45": "32261", - "2600:9000:20ac::/43": "16509", - "2604:a880:cad::/48": "14061", - "2804:7f58::/32": "271682", - "2001:67c:20c8::/48": "42836", - "240e:473:ffff::/48": "140485", - "2804:18:1868::/45": "26599", - "2a09:bac0:109::/48": "13335", - "2600:6c38:723::/45": "20115", - "2804:134::/32": "28323", - "2804:32e0::/32": "265102", - "2a06:1e00:40::/48": "60695", - "2408:8459:9230::/41": "17622", - "2607:fcd0:fa80:4f01::/51": "8100", - "2803:c240::/35": "41095", - "2a01:8760::/32": "199758", - "2a06:1287:40::/48": "12406", - "2001:550:1404::/38": "174", - "2a02:26f7:bc88::/48": "36183", - "2001:1580::/32": "9158", - "2001:1a68:2d::/46": "15694", - "2402:800:3a01::/44": "7552", - "2403:2c80:89::/32": "9312", - "2600:6c34:13::/48": "33588", - "2408:8256:359c::/48": "17816", - "2408:8256:399d::/46": "17623", - "2a0b:4000::/29": "64488", - "2001:16d8::/41": "16150", - "2409:8904:8990::/38": "24547", - "2607:fa48:110::/40": "5769", - "2a00:a360::/32": "60435", - "2a02:cc8::/32": "60781", - "2001:559:31c::/48": "7015", - "2a09:b600:5::/48": "61323", - "2a0e:97c0:390::/44": "211437", - "2408:8459:c430::/41": "17622", - "2803:3b80:b::/45": "263702", - "2a00:1368::/32": "28933", - "2a00:d420::/29": "15600", - "2a0d:2480::/29": "328543", - "240a:a69b::/32": "144341", - "240a:ad5e::/32": "146072", - "2604:880:52::/48": "396881", - "2a0b:fe40::/29": "2116", - "2401:8800:a00::/46": "17439", - "2401:c7c0:21a::/48": "134148", - "240e:354:5c00::/34": "134419", - "2804:4458::/32": "267627", - "2804:6700::/32": "269597", - "2a05:e800:7::/48": "50881", - "2401:24c0::/32": "37897", - "2607:fdf0:5e31::/45": "8008", - "2a05:8945::/30": "8468", - "2001:559:536::/48": "33660", - "2001:559:70d::/48": "33657", - "2402:ef03:5::/44": "7633", - "2405:1500:91::/42": "58717", - "2405:8a00:ab::/34": "55824", - "2600:1008:f100::/44": "6167", - "2803:6ce0:b000::/33": "269909", - "2a07:4300:1610::/48": "209622", - "2a09:be80::/32": "44901", - "240a:a3b7::/32": "143601", - "2620:0:2e80::/48": "33631", - "2804:7fac::/32": "271702", - "2a02:970:1244::/47": "44002", - "2a0e:aa07:f097::/44": "208884", - "2001:dc7:1::/36": "24151", - "2405:c9c0::/45": "138823", - "2409:8051::/47": "56047", - "240a:a9a3::/32": "145117", - "2604:4780::/32": "6994", - "2620:96:a000::/48": "399628", - "2001:559:842b::/48": "7015", - "2404:5680::/32": "136915", - "2408:8456:ac40::/38": "17816", - "2001:4480::/32": "17554", - "2407:e700::/43": "132680", - "240a:a70e::/32": "144456", - "2606:b400:8024::/48": "1216", - "2a02:26f7:c0c0::/48": "36183", - "2a02:26f7:f70d::/42": "20940", - "2a02:2e02:a0d0::/39": "12479", - "2001:559:8072::/47": "22909", - "2001:4268::/39": "15964", - "2404:5c0::/32": "138466", - "2a02:2e02:9c10::/41": "12479", - "2804:65a0::/32": "269504", - "2001:490:2000::/35": "14803", - "2001:559:3eb::/48": "33657", - "2001:67c:30::/48": "210961", - "2001:4878:10::/48": "12222", - "240a:a2be::/32": "143352", - "240a:af58::/32": "146578", - "2602:fe6a:100::/40": "397131", - "2a0e:b107:11d0::/45": "58015", - "2a10:4180::/29": "398559", - "2001:fd8:128::/41": "4775", - "2a02:26a0::/29": "15547", - "2a04:9a00:1046::/44": "212157", - "240a:a929::/32": "144995", - "2804:3d28::/32": "7063", - "2a02:26f0:1a00::/48": "34164", - "2a0e:b107:980::/48": "213263", - "2001:559:8532::/48": "7725", - "2001:df1:8700::/48": "136735", - "2402:ee40:29::/41": "17754", - "2406:8800:9021::/46": "17465", - "2408:8456:8c00::/42": "17622", - "2804:a14:a000::/33": "262342", - "2a00:e040:c08::/48": "60436", - "2001:57a:c204::/42": "22773", - "2405:e000::/35": "37963", - "2804:1b3:6f00::/41": "10429", - "2804:1814::/32": "263263", - "2804:27c4::/33": "263921", - "2a05:d050:6080::/44": "16509", - "2a0d:a780::/29": "208994", - "2001:550:1900:2::/45": "174", - "240e:3b5:ac00::/35": "4134", - "2607:fac8::/36": "11404", - "2a00:6901:b002::/47": "20926", - "2a06:7a06::/48": "44541", - "2a09:5640:1::/48": "9186", - "2604:7a40::/32": "394710", - "2001:559:84b4::/48": "33491", - "2001:67c:2c4c::/48": "1257", - "2001:c20:48c6::/48": "9255", - "2001:4998:ef63::/48": "10310", - "2400:cb00:a1d0::/45": "13335", - "240a:a2f8::/32": "143410", - "2602:ffc5:169::/48": "211169", - "2803:f7e0:2000::/43": "271773", - "2001:df2:7c80::/48": "138530", - "2605:a404:173::/45": "33363", - "2804:5a4c::/32": "268763", - "2806:2f0:2100::/48": "17072", - "2a00:5860::/32": "197308", - "2001:559:8721::/48": "7922", - "2001:fd8:391::/41": "4775", - "2402:4b80::/32": "24367", - "2620:171:f2::/47": "715", - "2a0e:97c5:678::/46": "20473", - "2001:559:8459::/48": "7015", - "2400:9380:91c0::/44": "136167", - "2406:2000:efbd::/35": "10310", - "2409:802f:2b07::/48": "9808", - "240a:a091::/32": "142795", - "2600:6000:fcd1::/48": "11351", - "2a02:26f7:fa85::/46": "20940", - "2001:67c:18c8::/47": "30857", - "2401:d800:96f0::/39": "7552", - "2605:a404:177::/44": "33363", - "2a02:26f7:e9c9::/42": "20940", - "2607:f4e8:111::/37": "22822", - "2801:1d:8800::/48": "14080", - "2804:2f1c:8300::/34": "264872", - "2a03:2880:f01a::/45": "32934", - "2a0e:1700::/31": "204135", - "2606:ae00:1000::/48": "7287", - "2607:fcd0:fa80:4803::/55": "8100", - "2a02:26f7:f780::/48": "36183", - "2620:119:5041::/46": "13443", - "2804:2e00::/32": "265317", - "2a03:2887:ff02::/44": "9498", - "2c0f:f8e8::/32": "37282", - "2a02:f181:1000::/48": "174", - "2001:1388:8a0c::/47": "264684", - "2403:1cc0:1000::/47": "45352", - "240e:473:4600::/41": "140485", - "2606:1980:104::/48": "54994", - "2800:160:19ce::/43": "14259", - "2804:6350::/32": "269353", - "2a00:b060::/32": "197690", - "2400:7400:e022::/48": "38044", - "2409:8087:3100::/36": "9808", - "2600:c11::/32": "11853", - "2620:118:5000::/44": "4901", - "2803:10a0::/32": "266793", - "2001:16f8:15::/48": "30870", - "2a02:26f7:ca80::/48": "36183", - "2a04:4e40:5420::/44": "54113", - "2001:559:c1d2::/48": "33287", - "2001:c20:c84f::/43": "3758", - "2401:d800:bbe0::/37": "7552", - "2409:871e::/31": "24400", - "2a00:d3e0::/29": "15600", - "2a02:26f7:c88c::/48": "36183", - "2a03:5da0::/32": "201293", - "2001:67c:1933::/48": "12337", - "2001:67c:2f18::/48": "56344", - "2401:5000::/32": "24218", - "2402:d700::/32": "37906", - "2403:e800::/37": "4637", - "2400:7400:e02b::/48": "23736", - "2602:feda:afd::/48": "138210", - "2a00:ea80::/32": "34749", - "2a0d:1380::/29": "59959", - "2001:559:826a::/48": "13367", - "2607:f160:12::/48": "22394", - "2a02:970:1186::/43": "44002", - "2a02:2430:8::/42": "39869", - "2a0b:2280::/32": "32931", - "2001:559:c19b::/48": "7015", - "2001:8d8::/40": "8560", - "2804:7ec8::/32": "271647", - "2c0f:ea60::/32": "37215", - "2408:8957:fd00::/40": "17622", - "2600:100b:f110::/36": "6167", - "2620:4f:2000::/48": "40773", - "2620:13f:701c::/48": "59116", - "2804:4d0c::/32": "267409", - "2a0f:9400:770e::/48": "211248", - "2001:470:c3::/48": "395466", - "2001:13d2:5804::/34": "7303", - "2600:1406:1801::/39": "20940", - "2001:b10::/35": "8256", - "240e:44d:5880::/41": "4134", - "2604:f440:6::/48": "397373", - "2605:e000:70c::/36": "20001", - "2a02:f181:3000::/48": "47420", - "2a10:7f80::/29": "60193", - "2804:49c:c0f1::/48": "7162", - "2a04:2ac0::/29": "61081", - "2a0d:5600:11::/44": "9009", - "2a10:da80::/29": "211987", - "2406:840:e180::/44": "134478", - "240a:a774::/32": "144558", - "2a07:3404::/32": "396931", - "2a0e:b107:d71::/46": "212705", - "2a0f:88c0::/32": "397651", - "2a04:2dc0:19::/48": "39216", - "2001:559:86d6::/44": "7922", - "2402:1580::/38": "17682", - "2407:5200:204::/47": "55915", - "2602:fd92:400::/40": "132335", - "2804:67d4::/32": "269653", - "2a00:7700:8a03::/33": "31200", - "2a02:2e02:1c00::/43": "12479", - "2001:559:859c::/48": "33659", - "240a:a1c6::/32": "143104", - "2600:1488:6381::/37": "20940", - "240b:4003:3e8::/48": "45102", - "2803:c000::/32": "264628", - "2c0f:f7f8::/48": "3356", - "2001:678:20::/48": "1921", - "2001:19e8:a::/48": "2576", - "2a10:4640:ffff::/48": "212815", - "2001:67c:11d8::/48": "200144", - "2405:1c0:7951::/46": "135062", - "2405:8e40::/32": "139838", - "240a:a517::/32": "143953", - "240e:980:4a00::/40": "4811", - "2a01:5b0:2c::/47": "8561", - "2408:8656::/36": "17622", - "2001:468:cc0::/48": "3140", - "2001:67c:2ffc:2e00::/56": "15440", - "2408:8742::/32": "4837", - "2409:8014:1010::/34": "56044", - "2607:6b80:7::/48": "46562", - "2a02:2e02:1980::/38": "12479", - "2c0f:e820::/32": "328575", - "2a00:1310::/32": "25181", - "2a03:6c80::/32": "15830", - "2607:1400::/48": "13354", - "2804:14d:7e34::/44": "28573", - "2804:82c::/32": "262355", - "2804:7880:5100::/34": "271247", - "2001:1878:b10::/32": "226", - "2600:7f00::/28": "6465", - "2804:5e04::/32": "269006", - "2804:81d0::/32": "272478", - "2a0a:e200:1100::/40": "33438", - "2001:480:61::/40": "668", - "2001:559:842f::/48": "7922", - "2001:750::/29": "15589", - "2401:d800:55a0::/38": "7552", - "2405:3e00::/32": "3908", - "2604:e8c0:7::/48": "6233", - "2a03:af60::/32": "25513", - "2001:4878:b259::/48": "12222", - "2405:1207::/32": "9824", - "240a:a357::/32": "143505", - "240a:aab8::/32": "145394", - "2a0b:1300:81dc::/48": "209915", - "240a:add0::/32": "146186", - "2620:171:50::/48": "42", - "2a00:d2c0::/45": "12975", - "2a01:cde0:100::/48": "16028", - "2a02:2ad8:4110::/32": "702", - "2a03:1ae0:1::/48": "59944", - "2a0c:700::/36": "204515", - "2409:8905:7d20::/30": "24547", - "2620:186:4::/46": "396016", - "2a05:4200:2::/47": "35180", - "2001:d70::/30": "7671", - "2409:8c28:6c08::/39": "56041", - "240a:a559::/32": "144019", - "2620:52:8::/45": "22753", - "2804:aa8::/39": "52903", - "2a02:26f7:f240::/48": "36183", - "240e:438:a420::/43": "140647", - "2600:140f:c000::/48": "24309", - "2604:7ac0::/36": "12213", - "2607:fcd0:fa80:8b00::/53": "8100", - "2620:c8:4000::/48": "36210", - "2400:9380:9dc0::/44": "136167", - "2a05:7640:fb0::/44": "174", - "240a:ae4c::/32": "146310", - "2806:2f0:40a1::/41": "17072", - "2001:44b8:4059::/48": "4739", - "2405:7bc0::/48": "45538", - "2a01:c50f:fd80::/38": "12479", - "2a02:ac80:501::/38": "25145", - "2a03:9320::/32": "5505", - "2001:559:8421::/48": "33659", - "2001:559:c1bb::/48": "33287", - "2602:ff64::/36": "3900", - "2603:f590::/29": "396356", - "2001:559:c05e::/48": "7016", - "240e:3b9:2200::/37": "136198", - "2a02:26f7:f289::/42": "20940", - "2a0e:fcc0::/29": "201963", - "2801:80:2260::/48": "267630", - "2001:b28:a70d:1::/33": "42065", - "2402:800:bdb0::/41": "7552", - "2406:f680:2::/33": "132298", - "2602:fce9::/36": "62943", - "2604:2e80:1403::/36": "30036", - "2605:aec0::/32": "35932", - "2620:61::/48": "46720", - "2804:27c8::/32": "263922", - "2a02:26f7:e4c4::/48": "36183", - "2a02:2ab0:105::/44": "702", - "2a04:9a00:1200::/48": "1136", - "2001:200:700::/36": "2500", - "2001:400:6000:a::/37": "293", - "2401:3480:2000::/36": "59077", - "240a:acd9::/32": "145939", - "2600:1417:7b::/37": "20940", - "2600:6000:f0cc::/37": "12271", - "2803:b800::/32": "262202", - "2a06:e3c0::/29": "62159", - "2a07:6940::/29": "51685", - "2401:d800:9ad0::/42": "7552", - "2605:73c0:2000::/32": "10583", - "2a02:26f7:b700::/48": "36183", - "2a03:9e40::/32": "31399", - "2a0f:b480::/29": "213152", - "2001:56b:8000::/44": "852", - "2401:4900:4b30::/44": "45609", - "240a:ae81::/32": "146363", - "240e:1:f800::/37": "17799", - "2804:450c::/32": "267669", - "2a02:26f7:ce48::/48": "36183", - "2001:470:9a::/48": "17197", - "240a:a6f7::/32": "144433", - "2620:74:2b::/48": "397194", - "2a01:c50f:1140::/40": "12479", - "2001:49f0:d0b0::/44": "174", - "2409:4060:3000::/31": "55836", - "2606:2800:7021::/46": "15133", - "2a02:938::/29": "8608", - "2a05:d012::/36": "16509", - "2a06:c180::/29": "44549", - "2001:4c8:1086::/43": "15290", - "2001:678:c00::/48": "49554", - "2402:800:f990::/42": "7552", - "2600:1fa0:2040::/44": "8987", - "2803:f00:4c9::/48": "262182", - "2408:8957:e000::/40": "17622", - "2409:8050:100::/37": "9808", - "240e:967:1000::/37": "133775", - "2607:f0b0::/45": "13319", - "2806:2f0:9162::/40": "17072", - "2a05:bec0:40::/48": "44486", - "2604:4500:b00::/37": "29802", - "2604:b180:440::/44": "18444", - "2600:1480:a100::/36": "20940", - "2a0e:b107:5c8::/48": "1239", - "2001:4408:201::/35": "4758", - "2403:f2c0::/32": "64043", - "240a:a5a5::/32": "144095", - "2604:a5c0::/32": "54509", - "2804:65b4::/32": "269509", - "2a04:9140:3043::/45": "201958", - "2405:f080:e06::/44": "136907", - "240a:a231::/32": "143211", - "2604:2e00::/32": "11650", - "2804:104c:e800::/40": "263629", - "2a09:4c2:32::/47": "58057", - "240a:a658::/32": "144274", - "240e:108:1182::/48": "133776", - "2804:104c:8800::/40": "263629", - "2a01:c50f:f6c0::/39": "12479", - "2001:559:862a::/47": "7922", - "2001:43f8:3e0::/47": "37599", - "2406:3002:20::/48": "9874", - "2602:801:8001::/46": "208188", - "2804:5338::/32": "268570", - "2a04:980::/29": "15659", - "2a06:4180:1::/48": "43595", - "240a:aec7::/32": "146433", - "2620:0:610::/48": "4185", - "2a0c:d80::/29": "200000", - "2001:258::/32": "2510", - "2001:4248:11::/41": "30999", - "2408:8459:210::/41": "17622", - "2606:9400::/32": "3737", - "2a02:24e0::/32": "50957", - "2a0c:9a40:8040::/43": "213392", - "2001:df0:2ed::/48": "17932", - "2401:d800:5ac0::/42": "7552", - "2804:7f0::/30": "18881", - "2a00:cb80::/32": "35393", - "2a02:26f7:e701::/46": "20940", - "2a0a:1a80::/29": "203828", - "2001:2c0::/32": "2514", - "2001:559:c275::/48": "7922", - "2001:df3:1680::/48": "133296", - "2804:64::/32": "27693", - "2409:4071:1000::/30": "55836", - "240a:a43e::/32": "143736", - "2600:140f:5c00::/48": "9498", - "2800:320:8408::/47": "27882", - "2803:f3a0::/32": "267758", - "2a01:8840:9e::/42": "12041", - "2a0d:f80::/29": "58273", - "2401:d800:220::/41": "7552", - "240a:a784::/32": "144574", - "2600:806:301::/28": "701", - "2804:1564::/32": "52570", - "2804:35f0::/33": "266316", - "2a07:10c0::/48": "203234", - "2a0c:b641:20a::/48": "209710", - "2402:800:7ce0::/39": "7552", - "2406:a040:ff01::/48": "55688", - "2409:8c85:aa14::/48": "56044", - "2804:b6c::/32": "52777", - "2a01:8740:5::/48": "212588", - "2a0a:1580::/29": "34993", - "2404:e5:130::/38": "703", - "2001:559:8616::/48": "7015", - "2801:80:1e85::/48": "14026", - "2c0f:f3c8:11::/42": "328112", - "2408:8957:f600::/40": "17622", - "2804:5e48::/33": "269023", - "2001:559:c059::/48": "7922", - "2404:5200::/32": "4686", - "240a:a53f::/32": "143993", - "2600:140f:800::/48": "9498", - "2a02:26f7:bf4c::/48": "36183", - "2a0f:c240::/29": "21488", - "2001:67c:2148::/48": "59570", - "2408:8256:3197::/44": "17623", - "240a:a187::/32": "143041", - "2a0c:6c40:c840::/47": "20705", - "2402:800:f080::/42": "7552", - "2404:bf40:8644::/40": "139084", - "2408:840c:9100::/40": "17621", - "2804:7584::/32": "271052", - "2400:ca02:f138::/29": "23688", - "2600:c00::/32": "14744", - "2804:e4c:7000::/36": "269104", - "2a01:9700:1025::/44": "8376", - "2a0a:8a40::/32": "56859", - "2602:ff0e::/36": "32109", - "2804:4f8:a100::/38": "28263", - "2804:954:407::/38": "263073", - "2804:7310::/32": "270893", - "2001:480:a2::/44": "668", - "2001:559:c112::/48": "33657", - "2001:67c:2fc8::/48": "213156", - "2001:1a11:6a::/45": "42298", - "2409:8914:4000::/39": "56044", - "2806:230:200b::/48": "11888", - "2a03:9780::/32": "47767", - "2001:1938:2000::/48": "33438", - "2602:fe37::/36": "54987", - "2606:a600:5000::/34": "23005", - "2610:a1:1073::/48": "397228", - "2a02:2658::/34": "20860", - "2a02:26f7:ee89::/46": "20940", - "2a0e:b105:440::/46": "20473", - "2404:63c0:20::/44": "131645", - "2405:f180::/32": "136557", - "2408:80fa:9000::/36": "136959", - "2620:132:f321::/40": "394977", - "2620:135:4001::/44": "393891", - "2620:171:13::/48": "42", - "2804:ad8:828a::/33": "262494", - "2408:8256:397c::/48": "17816", - "2620:105:b0bc::/41": "2055", - "2408:8409:5400::/40": "4808", - "2620:109:a006::/44": "15294", - "2402:e280:100::/47": "134674", - "240a:a76a::/32": "144548", - "2610:128::/35": "11686", - "2801:162::/48": "13489", - "2804:74e4::/32": "271010", - "2a02:20a0::/32": "50217", - "2a0a:9700::/32": "206954", - "2001:559:8405::/48": "7725", - "2001:559:c265::/48": "33662", - "2001:559:c2bd::/46": "7015", - "2402:2f80:8::/48": "38001", - "240a:ae86::/32": "146368", - "2a06:7343:1f2c::/48": "199364", - "2a07:3440::/29": "201873", - "240a:aca0::/32": "145882", - "2600:1417:1d::/48": "24319", - "2610:20:6f96::/47": "49", - "2801:80:4b0::/48": "52798", - "2804:4e0c:6000::/32": "268236", - "2a02:26f7:e189::/42": "20940", - "2001:1820::/43": "12956", - "2607:fd90::/32": "14717", - "2804:3534::/32": "266274", - "240a:aa7f::/32": "145337", - "2620:7e:c080::/48": "33187", - "2a0e:b107:1100::/44": "211485", - "2001:dd8:10::/47": "56266", - "2600:380:e880::/41": "20057", - "2804:245c::/32": "264217", - "2a02:26f0:a201::/39": "20940", - "2400:cb00:a1b0::/48": "13335", - "2a00:14f8::/32": "21056", - "2a03:5780:197::/44": "25122", - "2001:559:82f8::/48": "33667", - "2620:154:a08::/48": "16733", - "2804:124c::/37": "263468", - "2804:1308::/32": "263511", - "2a02:26f7:f7c4::/48": "36183", - "2804:8:6::/33": "14840", - "2804:131c::/32": "263516", - "2804:2d44::/32": "265270", - "2806:230:4037::/48": "11888", - "240e:108:1280::/31": "4134", - "240e:44d:6880::/41": "4134", - "2803:a440::/32": "263776", - "2804:5528::/32": "268693", - "2806:263:8300::/37": "13999", - "2a06:1287:3309::/45": "206499", - "2a09:3b40::/29": "57773", - "2001:dce:9401::/40": "23869", - "2001:1250:e400::/44": "22894", - "2402:8100:39f0::/38": "45271", - "2600:1406:3000::/48": "35994", - "2a01:8840:36::/44": "12041", - "2a02:7940::/32": "9063", - "2001:559:81f0::/48": "33651", - "2405:1c0:6431::/45": "135062", - "2406:3000:3:2a::/63": "4657", - "2408:8456:200::/42": "17622", - "2a07:3b80::/48": "47869", - "240e:11:8800::/37": "137695", - "2600:6000:fa6a::/40": "12271", - "2607:fcd0:fa80:1301::/53": "8100", - "2001:8b0:2::/35": "20712", - "240a:a104::/32": "142910", - "2604:f400:1000::/37": "19453", - "2804:2e8:80c0::/33": "262847", - "2804:4900::/34": "267158", - "2a0d:77c7:e908::/35": "7489", - "2a0d:9ec0::/48": "395092", - "2001:418:3ff::/36": "2914", - "2404:7240:2009::/33": "59074", - "2606:6800:1c00::/40": "394902", - "2804:3fd4:3000::/33": "265918", - "2804:5f64::/32": "269096", - "2a00:5c20::/32": "199298", - "2a00:adc0:1a00::/40": "13030", - "2800:160:1be3::/43": "14259", - "2001:559:476::/48": "33652", - "2400:a040:b::/32": "136237", - "2405:1c0:6565::/43": "55303", - "240a:a62b::/32": "144229", - "2a02:26f7:e485::/46": "20940", - "2a04:2400::/27": "12302", - "2a0b:2c0:deae::/29": "205831", - "240a:a4cd::/32": "143879", - "2600:1406:7801::/38": "20940", - "2620:126:7001::/48": "53800", - "2804:14d:7e2d::/43": "28573", - "2a02:26f0:6e01::/35": "20940", - "2a0a:e240::/31": "205893", - "2804:8228::/32": "272502", - "2001:200:e103::/35": "7660", - "2001:559:c05b::/48": "33657", - "2001:4998:44::/46": "36646", - "2400:8b00:2180::/42": "45727", - "240e:357:6400::/26": "4134", - "2605:a404:37::/44": "33363", - "2804:14d:1885::/44": "28573", - "2405:58c0:38::/47": "133101", - "240a:a502::/32": "143932", - "2c0f:ef68:4::/32": "37662", - "2400:cb00:340::/45": "13335", - "2402:800:bc60::/39": "7552", - "2405:7000:2d00::/32": "9354", - "240a:a319::/32": "143443", - "2610:a1:3018::/48": "12008", - "2803:5c80:6593::/48": "64114", - "2804:1be8::/32": "61756", - "2600:6:ff80::/44": "10507", - "2800:ba0:8::/48": "263812", - "2600:100f:9100::/44": "6167", - "2804:78e8::/32": "271273", - "2a05:1700::/48": "56577", - "2001:400:210:105::/47": "293", - "2604:2f40::/38": "29749", - "2607:f480:24::/48": "27435", - "2620:f0:c006::/47": "14148", - "2804:5024::/32": "262826", - "2a04:79c0::/29": "59507", - "2001:470:8a::/48": "16871", - "2401:d800:b3f0::/37": "7552", - "240a:a963::/32": "145053", - "240e:44d:5900::/41": "140345", - "2804:3d34::/32": "266260", - "2a02:26f7:cb08::/48": "36183", - "2a02:d107:f002::/45": "197155", - "2001:7f8:26::/64": "6461", - "2001:12f0:301::/42": "1916", - "2401:4900:30b0::/41": "45609", - "2804:6a44::/32": "270323", - "2a02:2998::/32": "13009", - "2a10:cc40:100::/43": "211659", - "2c0f:ecd0::/32": "328433", - "2001:468:2810:1::/48": "396961", - "2001:559:263::/48": "33657", - "2408:8456:b240::/37": "17816", - "240e:5e:2100::/48": "134774", - "2804:5370::/32": "268584", - "2a0e:bb00::/29": "680", - "2600:140f:f001::/38": "20940", - "2804:8d0::/32": "28269", - "2804:99c::/32": "262519", - "2a02:26f7:cc04::/48": "36183", - "2a02:c390::/29": "31304", - "2001:44b8:205a::/48": "7545", - "240a:ab03::/32": "145469", - "2804:6c30::/32": "270451", - "2804:7694::/32": "271121", - "2001:559:8718::/48": "33652", - "2600:d00::/31": "20161", - "2600:140f:dc01::/34": "20940", - "2604:8800::/32": "23028", - "2a02:e400::/29": "199318", - "2a00:bec7:f800::/40": "12946", - "2001:1878::/37": "226", - "2001:44c8:128::/47": "131445", - "2401:d800:d510::/42": "7552", - "2405:4700::/32": "132426", - "2604:30c0::/32": "395880", - "2804:4fdc::/32": "268354", - "2a00:6d40::/30": "31034", - "2402:800:b530::/41": "7552", - "2403:5c80::/48": "56019", - "2600:140f:600::/48": "55836", - "2605:f340::/32": "399007", - "2804:37e8:fd00::/38": "262671", - "2001:559:4a::/48": "7922", - "2602:fe59:10::/48": "46432", - "2804:3db0::/32": "266547", - "2404:4a00:8000:1::/37": "45629", - "240a:a94a::/32": "145028", - "2804:151:63::/30": "10954", - "2a02:23e8::/32": "51514", - "2001:ac8:63::/44": "9009", - "2402:800:9c55::/42": "7552", - "2402:3e40::/32": "137259", - "2406:2000:ef67::/48": "10229", - "2804:24a8::/32": "264236", - "2001:559:c308::/48": "33287", - "2001:48f8::/32": "11232", - "2604:980:e002::/48": "21859", - "2804:1f4c:8900::/33": "269175", - "2804:90c:f800::/38": "262617", - "2001:480:35::/48": "668", - "2001:67c:1c00::/40": "48144", - "2401:3c0:107::/44": "45528", - "2407:a200::/32": "56123", - "2409:8030::/36": "9808", - "2606:2e00:8024::/46": "36351", - "2800:160:28b5::/41": "14259", - "2806:2f0:33c1::/42": "17072", - "2001:470:9b::/48": "6939", - "2602:fe6b:1013::/36": "398646", - "2804:3838::/46": "53170", - "2001:b000:59d::/27": "3462", - "2405:1c0:6317::/42": "55303", - "2408:8956:7f00::/40": "17816", - "2a00:12e0::/32": "6798", - "2a02:26f7:2b::/48": "20940", - "2a05:e880::/29": "50304", - "2a0e:b107:260::/44": "208627", - "2804:54a0::/35": "27688", - "2001:559:c1e4::/48": "22909", - "2001:678:a7c::/48": "200924", - "2001:dc7:5dcd::/42": "24151", - "2400:8480:1100::/48": "133385", - "2401:da80::/32": "63927", - "2605:5c0:c010::/44": "26517", - "2804:9f0::/32": "263003", - "2806:2fb::/32": "265547", - "2a09:4c2:2c::/48": "205977", - "2a0d:5600:10::/48": "50347", - "240a:a046::/32": "142720", - "2620:10a:8023::/48": "27299", - "2a02:120:3::/29": "29396", - "2a0c:b641:1b0::/44": "211317", - "2a0f:5707:ab2f::/48": "61138", - "2404:8280::/32": "38719", - "2a02:ee80:4204::/44": "3573", - "2a0d:b4c0::/29": "210101", - "2a0f:5707:ffa5::/46": "131668", - "2602:fe3a:2::/48": "20119", - "2801:80:3e70::/47": "271541", - "2001:44b8:2a::/43": "7545", - "2408:84f3:3640::/44": "17623", - "2408:8957:7f00::/40": "17816", - "2804:70ac::/32": "270741", - "2a02:26f7:d841::/46": "20940", - "2404:138:4002::/48": "681", - "2404:6980:44::/48": "134408", - "2804:130c::/39": "263512", - "2804:41cc::/32": "267457", - "240e:438:b360::/25": "4134", - "2600:1488:6083::/41": "20940", - "2620:54:a000::/48": "396024", - "2620:135:a000::/40": "394889", - "2803:5b80::/32": "263699", - "2804:32c0::/32": "265097", - "2a03:a860:a03::/45": "58431", - "2001:559:c3df::/48": "7922", - "2404:580::/32": "56268", - "2803:efa0::/32": "267792", - "2804:3acc::/32": "266110", - "2a01:6e0::/32": "12976", - "2a02:26f7:f785::/46": "20940", - "2001:559:c35e::/48": "33659", - "240a:ae33::/32": "146285", - "2803:8c40::/32": "263789", - "2804:e68::/32": "262953", - "2804:13d0:9940::/40": "263297", - "2a02:26f0:9e01::/39": "20940", - "240a:a08c::/32": "142790", - "2804:1298::/32": "263486", - "2a0b:f6c0::/48": "203339", - "2a11:dc0::/29": "211199", - "2c0f:4600::/32": "328839", - "2605:1880::/32": "19257", - "2a0c:6900::/32": "44477", - "2001:9a8::/32": "15703", - "2402:8100:3940::/40": "45271", - "2600:1009:f100::/44": "6167", - "2620:100:a001::/46": "19750", - "2801:18c::/44": "19429", - "2a02:26f7:f980::/48": "36183", - "2001:df2:ee01::/48": "45192", - "2001:1998:890::/44": "8052", - "2001:4878:2153::/48": "12222", - "2405:1c0:7184::/43": "55303", - "2600:1012::/32": "22394", - "2610:f0:389::/37": "22925", - "2804:46c0::/32": "267009", - "2400:c0::/27": "4766", - "2400:8b00:d80::/42": "45727", - "2602:feb4:50::/44": "25961", - "2804:7a28:3000::/40": "271351", - "2400:8b00:600::/42": "45727", - "2408:8459:fe20::/39": "17816", - "2605:7c0:f100::/47": "19382", - "2607:f8f0:c00::/40": "16462", - "2a02:26f7:9::/48": "20940", - "2604:ffc0::/47": "36232", - "2804:197c::/32": "61797", - "2001:16a2:7200::/39": "39386", - "2a02:a28::/32": "210958", - "2a03:120::/32": "201718", - "2408:80f1:220::/44": "138421", - "2409:8915:2b00::/37": "56044", - "2602:801:1008::/47": "11281", - "2607:fdc8:2::/44": "30036", - "2a03:7500::/29": "20810", - "2a03:93e0::/35": "203228", - "2001:559:84::/48": "7016", - "2400:6a80::/32": "55821", - "2804:6864:ff00::/40": "269689", - "2a0c:b641:7af::/48": "207268", - "2405:ec00:facf::/37": "23955", - "2408:8256:2e86::/48": "17816", - "2804:13dc:ff30::/40": "262428", - "2a02:4e80::/32": "204645", - "2a0a:af40::/32": "208075", - "2a10:6100::/29": "398559", - "2001:559:795::/48": "33287", - "2402:1100::/32": "132035", - "2402:f280::/32": "4851", - "240a:a6ac::/32": "144358", - "240a:acaf::/32": "145897", - "2620:107:9029::/48": "7018", - "2620:118:8032::/48": "40885", - "2804:6808::/32": "269666", - "2001:ee0:8940::/38": "45899", - "2404:4a00:8500:1::/36": "45629", - "2408:8956:7840::/40": "17622", - "2600:1016:f110::/31": "6167", - "2604:b180:10::/44": "32779", - "2607:f8f0:400::/40": "271", - "2620:171:2d::/46": "715", - "2a0d:8e40::/29": "40970", - "2001:1248:9a2e::/43": "11172", - "2409:8087:3001::/44": "9808", - "2607:f1e8::/32": "31939", - "2001:559:8651::/48": "33489", - "2001:559:8757::/44": "7015", - "2001:df6:7f80::/48": "134021", - "2409:8028:1900::/37": "9808", - "2a02:26f7:c30c::/48": "36183", - "2a02:26f7:f0c1::/46": "20940", - "2401:d100::/44": "18705", - "2803:2360::/32": "269782", - "2806:288:4010::/48": "28469", - "2a01:5100::/32": "50032", - "2001:1388:3686::/36": "6147", - "2804:4518::/32": "267672", - "2a01:2e0::/28": "8374", - "2a03:3460::/32": "39791", - "2a02:26f7:dc85::/46": "20940", - "2a02:2888::/32": "8265", - "2a06:98c0:3600::/45": "132892", - "2408:8256:316b::/48": "17623", - "2620:105:4003::/48": "26001", - "2a03:2880:f072::/40": "32934", - "2405:1c0:6741::/46": "135062", - "240a:a4d5::/32": "143887", - "2804:204:23c::/46": "28186", - "2806:230:500f::/48": "11888", - "2a00:a6a0:1::/48": "60587", - "2001:559:50::/47": "7922", - "2405:7f00:9900::/38": "133414", - "2605:a401:8a3e::/39": "33363", - "2804:1e94::/32": "264437", - "2a02:2750::/32": "8245", - "2a0a:c540::/29": "205940", - "2001:678:18c::/48": "202928", - "2001:4d48::/29": "8468", - "2400:cb00:415::/46": "13335", - "2604:b180:20::/44": "32776", - "2a0f:d80::/32": "43364", - "2001:579:c214::/41": "22773", - "240a:a5c8::/32": "144130", - "2604:c240::/32": "22952", - "2607:f598::/32": "32329", - "2001:5e0:1e::/47": "16713", - "2604:d600:1531::/46": "32098", - "2a00:1c38::/47": "29014", - "2001:400:b21::/44": "293", - "2406:3c80:5::/48": "17747", - "2800:160:131d::/42": "14259", - "2804:1850::/32": "61929", - "2a0c:9a44::/48": "34927", - "2400:ea00::/48": "23884", - "240a:a14b::/32": "142981", - "2600:802:f05::/35": "701", - "2803:6fa0:fe::/48": "267790", - "2804:880::/32": "28270", - "2804:1cc0::/32": "61673", - "2600:1488:6161::/40": "20940", - "2804:48d0::/32": "267146", - "2804:532c:13c::/32": "268568", - "2a00:11c0:3b::/48": "42473", - "2a01:37:4000::/35": "8875", - "2600:5c01:1ffe::/48": "11351", - "2a02:26f7:db81::/46": "20940", - "2a0d:b880::/29": "39392", - "2403:6f80::/32": "134795", - "2408:8456:a00::/42": "17622", - "2602:fed2:712e::/48": "206607", - "240a:a1ba::/32": "143092", - "240a:a3c4::/32": "143614", - "2600:6c38:25e::/39": "20115", - "2606:3380:eee0::/48": "53334", - "2804:4048::/32": "265949", - "2804:6120::/32": "269214", - "2001:410:a011::/44": "8111", - "2408:8210::/29": "4837", - "240e:3b3:c000::/37": "140315", - "2800:5f0:6::/39": "22724", - "2a0a:54c1:31::/41": "62240", - "2a10:2f00:13a::/48": "213069", - "2401:2700:a::/48": "9286", - "2402:800:7580::/42": "7552", - "240a:aa75::/32": "145327", - "2607:f6f0:4000::/48": "29884", - "2620:107:9098::/46": "22787", - "2a05:8280::/32": "202448", - "2a06:6540:2002::/48": "3356", - "2409:8028:8f1::/46": "56041", - "240a:a3f2::/32": "143660", - "240a:aba0::/32": "145626", - "2a00:1851:bf04::/40": "29357", - "2a01:8fa::/32": "12302", - "2804:6ba8::/32": "270415", - "2400:9380:9009::/46": "4809", - "2804:2ab8::/32": "53180", - "2403:300:a52::/35": "714", - "2406:8800:903b::/41": "17465", - "2804:3bc8::/32": "266170", - "2001:559:c083::/48": "33657", - "2001:1248:563d::/46": "11172", - "240e:108:1132::/47": "138991", - "2600:1402:401::/36": "20940", - "2600:6c38:aaa::/43": "20115", - "2a02:26f0:6101::/40": "20940", - "240a:a3bf::/32": "143609", - "2001:559:8740::/48": "33657", - "2001:2001:4000::/36": "3301", - "2a02:2e02:9680::/43": "12479", - "2a07:3502:1090::/48": "38915", - "2a0f:35c0::/29": "60262", - "2001:559:848e::/48": "7922", - "2401:4900:32e0::/39": "45609", - "2804:d34::/32": "52611", - "2804:5174::/32": "268453", - "2a00:1708::/32": "49544", - "2a06:c004::/32": "206766", - "2a0c:b641:5b2::/45": "213015", - "2001:fd8:b1c0::/42": "132199", - "2403:cfc0:1009::/46": "135134", - "240a:a7b5::/32": "144623", - "2804:e94:60::/46": "262468", - "2804:5e48:ff20::/46": "269023", - "2405:ba00:8010::/48": "38538", - "2603:c0e8:2000::/39": "1218", - "2804:2090::/32": "264498", - "2a01:5b40::/45": "12996", - "2402:5d40::/32": "137079", - "2409:8904:cf70::/40": "24547", - "240a:abd9::/32": "145683", - "2a02:f040:a::/48": "59605", - "2001:678:a74::/48": "197838", - "2804:3cdc::/32": "266239", - "2a04:5c80::/32": "201365", - "2409:8c85:aa75::/25": "9808", - "2001:559:7c4::/48": "7015", - "2404:d540:2::/32": "2501", - "2600:140b:2801::/38": "20940", - "2804:225c::/36": "264093", - "2804:4b90::/32": "267315", - "2600:100e:9010::/39": "6167", - "2600:1480:3::/37": "20940", - "2806:230:403f::/48": "11888", - "2a0e:97c5:7dc::/46": "20473", - "2001:502:1ca1::/48": "396574", - "2001:559:543::/48": "21508", - "2406:ab40::/28": "63784", - "2600:140f:2200::/48": "9829", - "2a02:eb8::/29": "51132", - "2400:dd0a:1006::/31": "7497", - "2403:1cc0:2000::/48": "45352", - "240e:44d:2000::/41": "140345", - "2804:5920::/32": "268170", - "2a02:26f7:bbc8::/48": "36183", - "2a06:7c00::/29": "50307", - "2001:67c:674::/48": "3246", - "2408:8957:e300::/40": "17816", - "2600:1000:bf0e::/33": "22394", - "2604:cc00:c::/47": "53292", - "2001:559:c057::/48": "7922", - "2606:1980:100::/48": "54994", - "2607:f3a0::/43": "23342", - "2a0f:9400:770a::/48": "211481", - "2001:13d0::/35": "7303", - "2408:840d:d00::/42": "17621", - "2804:f1c::/32": "262463", - "2804:2b48::/32": "262619", - "2a01:6800::/32": "41809", - "2a0e:b107:1460::/44": "211481", - "2001:16a2:16::/42": "39386", - "240a:a614::/32": "144206", - "2604:9980::/48": "17216", - "2620:13c:5000::/48": "14856", - "2a0e:5b80::/29": "42487", - "240a:ae76::/32": "146352", - "2620:192:3::/36": "6461", - "2a10:3a80::/29": "47285", - "2001:559:c300::/48": "33659", - "2401:7840::/32": "136795", - "2403:f680:77::/48": "58898", - "2603:c0e1::/36": "54253", - "2804:3748::/32": "266401", - "2a06:5b00::/29": "41937", - "2a0f:1140::/32": "34959", - "240a:a79e::/32": "144600", - "240a:aab4::/32": "145390", - "2600:1400:6::/44": "20940", - "2600:9000:2258::/47": "16509", - "2800:440:34::/47": "27738", - "2a02:4a8::/32": "25234", - "2001:559:c2c4::/48": "7922", - "2001:fd8:f270::/36": "4775", - "240a:ae22::/32": "146268", - "2604:84c0::/32": "7979", - "2804:1b0:1a82::/47": "10429", - "2806:101e:3::/45": "8151", - "2a02:26f7:c6c8::/48": "36183", - "2001:559:8307::/44": "7922", - "2001:1388:14c4::/36": "6147", - "2001:1aeb::/29": "13036", - "240a:a0ff::/32": "142905", - "2001:559:c20d::/48": "33651", - "2001:57a:f303::/31": "22773", - "2001:df6:a380::/48": "141966", - "2600:1007:b100::/42": "6167", - "2804:145c:c510::/38": "263327", - "2a04:5b80:53::/48": "202265", - "2001:559:58c::/48": "33660", - "2402:8100:399f::/48": "55644", - "2600:1415:2001::/37": "20940", - "2804:608::/32": "262561", - "2804:6170::/38": "269234", - "2001:559:3c7::/48": "33287", - "2409:8080:2a70::/40": "9808", - "2409:8c28:2809::/39": "56041", - "2803:d100:8000::/35": "52362", - "2804:14c:5d83::/41": "28573", - "240a:a5f4::/32": "144174", - "2a0a:1f42::/32": "64236", - "2001:559:45f::/48": "7015", - "2605:c500::/32": "19515", - "2606:ab00:c::/48": "53876", - "2400:3dc0:101::/38": "134371", - "2607:f6f0:9001::/48": "394749", - "2620:1ec:8::/47": "8075", - "2a02:26f7:e7c1::/46": "20940", - "2602:fcb4::/36": "399419", - "2606:2e00:8007::/48": "32780", - "2801:80:a50::/48": "28148", - "2a00:60a0::/32": "42339", - "2a02:26f7:dc::/48": "36183", - "2a07:1840::/32": "48430", - "2001:1248:98e1::/48": "11172", - "2806:2f0:1080::/48": "22884", - "2409:806a:2c00::/35": "9808", - "240e:44d:6c80::/41": "4134", - "2804:d98::/32": "52642", - "2a02:f59::/32": "49409", - "2a09:be40:3662::/48": "41108", - "2801:1aa::/44": "19429", - "2804:499c::/32": "267193", - "2a02:2e02:9180::/38": "12479", - "2602:802::/40": "397843", - "2804:1878:196::/32": "61935", - "2607:f738:700::/41": "17184", - "2804:36e8::/32": "52924", - "2a06:45c1::/32": "200416", - "2a0f:4a00::/29": "29066", - "2804:7d84::/32": "271566", - "2a00:4800:330::/41": "13124", - "2a0e:b107:1d6::/48": "139328", - "2c0f:ea30::/32": "5713", - "2a02:26f7:ded1::/42": "20940", - "2600:6000:feb3::/48": "11351", - "2800:160:1169::/46": "14259", - "2a02:348:c9::/35": "35470", - "240a:a743::/32": "144509", - "2600:5400:e001::/39": "19108", - "2402:800:9bfe::/37": "7552", - "240e:3ba:c000::/37": "140315", - "2600:380:a880::/38": "7018", - "2804:3ff4::/32": "265924", - "2402:a0c0:3::/45": "137922", - "2403:8c0::/32": "137406", - "2408:8456:3050::/39": "17816", - "2409:804e:2100::/35": "9808", - "2408:8256:339f::/37": "17816", - "2806:2f0:9081::/42": "17072", - "2a06:e881:1700::/48": "206813", - "2a00:4800:4b0::/30": "13124", - "2001:550:7601:1::/39": "174", - "2001:16a2:3616::/39": "39386", - "2402:ff00::/32": "45637", - "2408:8957:1400::/40": "17622", - "2604:e00::/32": "13370", - "2804:307c::/32": "264954", - "2804:4bb4:2000::/32": "267325", - "2a01:699::/32": "25084", - "2c0f:f888:500::/40": "37119", - "2001:678:538::/48": "197942", - "2407:34c0::/48": "140788", - "2801:94::/32": "52958", - "2a02:1c0::/29": "29084", - "2a05:4ac0::/32": "201453", - "2408:8957:1100::/38": "17816", - "2804:348:8000::/33": "28133", - "2804:6820::/32": "269670", - "2a04:5201:8018::/48": "200740", - "2a0f:3ac0::/29": "47362", - "2001:678:758::/48": "202144", - "2401:9440::/32": "56264", - "240a:14:e90::/44": "9605", - "2a05:edc0::/29": "58314", - "2408:8459:7630::/41": "17622", - "2600:1004:b1d0::/42": "6167", - "2606:b400:881c::/48": "7160", - "2806:230:6019::/48": "11888", - "2001:df7:480c::/48": "131893", - "2804:42e8::/32": "267536", - "2804:7e90::/37": "271632", - "2a02:26f7:e5c8::/48": "36183", - "2a02:6b80::/32": "197973", - "2409:8c71::/29": "9808", - "2804:14c:bd00::/40": "28573", - "2804:ad4::/32": "52925", - "2a02:26f7:ea85::/46": "20940", - "2409:8c14:e00::/35": "9808", - "2a02:348:1002::/32": "35470", - "2001:388:cf86::/34": "7575", - "2001:3c8:a703::/33": "4621", - "2401:ff80:1303::/45": "133954", - "2600:6c00:2::/47": "33588", - "2804:1290::/32": "263484", - "2a00:6fa0:3200::/33": "49206", - "2001:559:80f9::/48": "33660", - "2001:678:6ac::/48": "48063", - "2001:4478:1312::/48": "4739", - "2409:805c:3061::/43": "9808", - "240a:a6c9::/32": "144387", - "240a:aef9::/32": "146483", - "2606:2800:504c::/48": "15133", - "2804:14d:1000::/42": "28573", - "2a02:45c0:6::/48": "8881", - "2001:1248:a4bf::/41": "11172", - "2a0b:3c40:fca6::/48": "208258", - "2001:559:873a::/47": "7922", - "2408:8956:3000::/40": "17622", - "2409:8914:4400::/39": "56044", - "2600:1005:9010::/39": "22394", - "2600:140f:200::/48": "9498", - "2605:9180:e000::/35": "53597", - "2001:559:115::/48": "7922", - "2001:dc7:9e00::/33": "24151", - "2402:cf80:100a::/47": "136468", - "2a07:b780::/29": "50601", - "240e:3b1:6400::/35": "140312", - "240e:3bf:c000::/37": "140315", - "2607:d500:602::/48": "54527", - "2800:200:2009::/32": "12252", - "2a02:26f7:bdc4::/48": "36183", - "2408:8256:3b60::/44": "17623", - "240a:a668::/32": "144290", - "240e:44d:380::/41": "4134", - "2800:bf0:8289::/42": "27947", - "2001:730::/29": "6830", - "2409:8904:d270::/40": "24547", - "2600:100f:9010::/40": "22394", - "2804:477c::/32": "267057", - "2001:67c:10e0::/48": "201612", - "2001:ce0:2900::/48": "7650", - "240a:ad51::/32": "146059", - "2804:48cc::/32": "267145", - "2804:7b50::/32": "271424", - "2806:266:501::/48": "27672", - "2a02:26f7:d0c9::/42": "20940", - "2a02:c880::/48": "24642", - "2a11:d100::/29": "202505", - "2001:1250:e100::/44": "22894", - "2402:800:3871::/44": "7552", - "2405:9800:9814::/38": "45430", - "2600:1012:b1c0::/44": "22394", - "2a07:9280::/29": "202759", - "2001:678:bbc::/48": "207671", - "2001:df0:bc::/48": "45731", - "2001:1248:c233::/48": "11172", - "2600:1008:b0d0::/42": "6167", - "2607:f4d0:a00::/32": "17054", - "2a02:ad8:5600::/36": "12389", - "2804:7700::/32": "271148", - "2001:1900:23af::/41": "3356", - "2409:8c30:1310::/29": "9808", - "2605:2180::/36": "12422", - "2620:0:840::/48": "13998", - "2800:bf0:80c6::/48": "52257", - "2801:a6::/32": "52853", - "2804:102c::/32": "263623", - "2406:8800:9011::/46": "17465", - "240e:438:4840::/38": "4134", - "2a0a:4e83:f24::/48": "206074", - "240a:adcc::/32": "146182", - "2804:40:4000::/36": "28657", - "2804:5884::/32": "268134", - "2a02:26f7:dbcd::/42": "20940", - "2a09:7c41::/32": "52000", - "2001:3c8:9007::/48": "9464", - "240e:473:2350::/40": "4134", - "2a01:a800::/29": "16086", - "2a0f:91c0::/47": "207843", - "2408:8957:c800::/39": "17622", - "2a02:26e0::/32": "35401", - "2407:f800:201::/39": "38182", - "2409:807e:2100::/36": "9808", - "2607:fcc0::/33": "36483", - "2a0b:8f80:200::/48": "200746", - "2001:559:3de::/48": "7922", - "2404:e000::/32": "17673", - "2408:8256:3b9b::/48": "17816", - "2620:128:e00c::/48": "22317", - "2804:3324::/32": "265377", - "2a02:26f7:da85::/46": "20940", - "2a02:2e02:8b60::/43": "12479", - "2801:11c:e1::/48": "14080", - "2a00:4d60::/32": "12969", - "2607:6100:100b::/48": "398951", - "2001:559:56c::/48": "22909", - "2001:678:fb4::/48": "50873", - "2001:13d2:816::/34": "7303", - "2001:1978:801::/48": "21775", - "2401:d800:bac0::/42": "7552", - "2406:840:e114::/48": "141712", - "2408:8956:1500::/40": "17816", - "2804:5bb8:c4::/32": "268865", - "2a00:8860:d00::/40": "208136", - "2a02:2068:a000::/29": "15830", - "2a03:32c0:a::/48": "29555", - "2a0e:b107:1420::/43": "211481", - "2405:e680::/32": "131292", - "240a:af9b::/32": "146645", - "2600:370f:40a0::/46": "32261", - "2a02:26f7:cb10::/48": "36183", - "2a0a:3380::/29": "16353", - "2a0e:b103:d91::/48": "20473", - "2804:43c4::/32": "53095", - "2a02:26f7:27::/48": "20940", - "2a04:71c0::/32": "200086", - "2001:559:94::/48": "7015", - "2409:8020:b1::/41": "56046", - "2607:fcd0:fa80:4800::/62": "8100", - "2620:107:a000::/40": "20", - "2404:bf40:a583::/45": "7545", - "2405:7040:6001::/48": "17621", - "240a:a077::/32": "142769", - "2606:3800::/32": "3912", - "2a09:0:10::/48": "34854", - "2a0c:9a40:8081::/48": "41108", - "2001:678:ba4::/48": "207824", - "240a:a820::/32": "144730", - "240a:ae54::/32": "146318", - "2604:d600:67b::/40": "32098", - "2804:6b5c::/32": "270395", - "2001:67c:504::/48": "61337", - "2001:df0:6980::/48": "135973", - "2804:e94:32::/41": "262468", - "2804:5d28::/32": "268954", - "2a02:16d8::/39": "5518", - "2001:4c0:8003::/33": "855", - "2001:559:b0::/47": "33491", - "2001:dce:7800::/48": "38064", - "2605:5c0:c085::/44": "28885", - "240a:a2d4::/32": "143374", - "2607:f600::/32": "12", - "2801:80:d0::/48": "28301", - "2804:1408:6001::/35": "28635", - "2a04:c740::/29": "202131", - "2803:3b80:11::/46": "263702", - "2a02:26f0:cc01::/40": "20940", - "2a02:f080::/30": "15800", - "2402:800:5755::/42": "7552", - "2620:4d:e000::/48": "13367", - "2620:149:af1::/37": "714", - "2409:8c2f:3800::/48": "9808", - "2803:a740::/45": "27810", - "2a11:e700::/29": "60935", - "2606:2e00:8020::/48": "36351", - "2804:59a8:2000::/32": "268717", - "2806:2f0:9061::/40": "17072", - "2a0c:b641:6c6::/47": "213236", - "2a0e:c580::/29": "208762", - "2402:9900:911::/48": "27435", - "2804:24d8:c058::/34": "264244", - "2804:7828::/32": "271224", - "2a0b:4d07:a01::/48": "44239", - "2001:500:66::/48": "33082", - "240e:5a:4240::/40": "140293", - "2602:fed2:7700::/48": "38179", - "2804:3f0c:ed00::/40": "266636", - "2a00:9d20:1::/48": "60626", - "2a02:26f0:8801::/39": "20940", - "2001:559:25f::/48": "22258", - "2403:f680:88::/48": "58898", - "2409:8e14:9000::/31": "56044", - "2804:a14::/34": "262342", - "2804:1830::/32": "61922", - "2a01:8840:e9::/48": "207266", - "2400:1a00:b112::/40": "17501", - "2408:8957:6800::/40": "17622", - "240e:1:a000::/37": "137688", - "2607:f7a8:42b::/45": "46887", - "2409:8a51:900::/38": "56047", - "2620:10a:8053::/48": "394354", - "2804:82c4::/32": "272539", - "2408:8344:1200::/32": "4837", - "2804:73f0::/32": "270947", - "2a0e:b107:50::/44": "212267", - "2605:5d00::/32": "27288", - "2620:da::/48": "23177", - "2a01:758:8308::/33": "3326", - "2a03:c040::/48": "199484", - "2a06:eb00::/46": "203462", - "240e:a65:2600::/30": "4134", - "2804:3764::/32": "266409", - "2806:250:1c::/46": "28509", - "2806:2f0:72e1::/39": "17072", - "2a02:2190::/29": "44134", - "240a:af92::/32": "146636", - "2804:57c:c00::/32": "262517", - "2001:67c:2044::/48": "51290", - "2001:67c:2e5c::/48": "39299", - "240e:473:3750::/40": "4134", - "2804:45ec::/32": "266955", - "2a0c:1940::/43": "60354", - "2606:fd80::/32": "2552", - "2804:ac::/32": "18547", - "2a04:dc1::/48": "199386", - "2001:559:c012::/48": "33657", - "2408:84f3:9a40::/37": "17816", - "2600:6000::/32": "12271", - "2607:f110:e520::/36": "21889", - "2804:5d10:c000::/34": "268948", - "2400:8300::/32": "10002", - "2404:c0::/35": "23693", - "2600:1406:2c00::/48": "35994", - "2606:7100::/35": "21581", - "2600:6c38:44e::/43": "20115", - "2001:559:456::/48": "33489", - "2001:559:83e7::/48": "33659", - "2405:1c0:6117::/42": "55303", - "2a0c:780::/29": "200000", - "2a0c:e040:132::/35": "200629", - "2a10:27c1::/32": "57043", - "240e:473:5e00::/41": "140485", - "2607:b600:4::/46": "10397", - "2001:1248:a400::/47": "11172", - "2409:8069:2908::/38": "9808", - "2607:fc50:2002::/33": "36236", - "2a00:19a0::/32": "34222", - "2a0b:fd80::/48": "49419", - "2a02:50e0::/32": "198203", - "2c0f:fa88::/32": "328191", - "2001:1250:e200::/44": "22894", - "240a:a86c::/32": "144806", - "2a07:8085::/32": "62296", - "2a07:9e40::/29": "1902", - "2a0d:8900::/29": "40970", - "2001:df0:6480::/48": "63752", - "2406:daa0:20c0::/44": "16509", - "2605:1640:12:10::/58": "19681", - "2804:d80::/32": "52635", - "2a03:9c40:800::/48": "34655", - "2404:2400::/39": "56132", - "2804:7c64::/32": "271493", - "2a02:348:7a::/40": "35470", - "2001:67c:2a10::/48": "200924", - "2408:8459:e450::/38": "17816", - "240e:97c::/36": "58466", - "2804:3d4:40::/32": "262401", - "2a05:3740::/29": "8774", - "2001:44b8:308d::/46": "4739", - "2403:40c0:4::/48": "45215", - "2804:14c:d491::/41": "28573", - "2408:8956:2f00::/40": "17816", - "2a0e:bc00::/29": "206316", - "2001:4878:a225::/48": "12222", - "2402:800:9963::/43": "7552", - "2620:111:1036::/48": "18469", - "2803:95e0::/32": "270036", - "2804:39e8::/34": "266058", - "2a02:26f7:f245::/46": "20940", - "2a04:4e40:8210::/44": "54113", - "2402:8100:21d8::/45": "55644", - "2409:8715:3c00::/32": "56044", - "2620:a3:400a::/48": "22773", - "2408:8001:3010::/44": "17622", - "240a:2:dcc::/48": "9605", - "2800:160:18e0::/44": "14259", - "2806:3d5::/32": "270133", - "2a00:1d34:8180::/33": "9121", - "2a02:ee00::/29": "61297", - "2001:559:84b1::/48": "13367", - "240a:a849::/32": "144771", - "2804:a8c::/32": "262299", - "2804:4760::/32": "267050", - "2a01:8200::/32": "31216", - "2400:9380:9ec0::/44": "136167", - "2405:1c0:6783::/36": "55303", - "2408:8459:7e50::/32": "17816", - "2606:5580:8000::/38": "63242", - "2804:6c50::/32": "270459", - "2a0e:b105:500::/46": "20473", - "240a:a2b8::/32": "143346", - "2607:f748::/32": "32613", - "2803:5840:e004::/35": "262145", - "2a02:26f7:b98b::/48": "20940", - "2607:f6f0:2002::/40": "54588", - "2406:1400:c109::/48": "24342", - "2800:160:13cd::/42": "14259", - "2804:374::/32": "262844", - "2a0c:a7c0::/46": "202468", - "2001:43f8:1100::/48": "328283", - "2001:49f0:d103::/48": "3216", - "2401:d800:b9a0::/41": "7552", - "2402:7d80:8888::/48": "63583", - "2620:138:7000::/44": "14747", - "2a02:758::/32": "29056", - "240a:a990::/32": "145098", - "2a02:250:3::/48": "25234", - "2a02:2698:8009::/38": "41682", - "2a02:26f7:bac0::/48": "36183", - "2a02:26f7:c804::/47": "36183", - "240e:67c:1800::/32": "4134", - "2a0c:d2c2::/32": "57335", - "2401:d800:da20::/41": "7552", - "2405:1c0:6581::/46": "135062", - "2a03:f300::/29": "47834", - "2001:44c8::/39": "45430", - "2409:806b:2100::/36": "9808", - "2607:f498::/32": "10835", - "2804:76c8:111a::/42": "271134", - "2a0f:9400:735f::/48": "14570", - "2001:559:a3::/48": "13367", - "2001:559:778::/48": "33652", - "2620:10a:80ba::/48": "25192", - "2a02:5aa0::/32": "57795", - "2001:1b60:a::/29": "31103", - "2401:d800:5da0::/41": "7552", - "2804:5c70::/32": "268909", - "2400:cb00:241::/46": "13335", - "2600:380:be00::/33": "20057", - "2600:100a:b000::/42": "6167", - "2804:1aa8::/32": "61874", - "2a04:9ac1::/32": "35616", - "2001:559:8463::/48": "33287", - "2402:800:362b::/41": "7552", - "2605:a401:89ed::/43": "33363", - "2605:a404:b2::/44": "33363", - "2606:7b00::/34": "10538", - "2620:171:65::/48": "715", - "2806:20d:1607::/43": "32098", - "2a04:c442:8300::/36": "2534", - "2a06:1280:c0df::/36": "61138", - "2c0f:fa78::/32": "37387", - "2001:559:c33a::/48": "33287", - "2405:1c0:6123::/43": "55303", - "2600:6c38:1b::/45": "20115", - "2604:5540:4010::/48": "13750", - "2001:678:3e0::/48": "42718", - "2402:800:598d::/43": "7552", - "2804:6c18:8000::/33": "270445", - "2a00:d360::/29": "15600", - "2a06:da80:1::/48": "43151", - "2a09:1340::/29": "56430", - "2a0e:97c0:381::/46": "211305", - "2001:559:80ad::/48": "7922", - "2001:559:c3e0::/48": "7015", - "2404:59c0:4000::/32": "58507", - "2408:84f3:dc10::/42": "134543", - "2a05:b8c0::/29": "203815", - "2a0e:8480::/29": "42156", - "2001:4d40:8407::/29": "13237", - "2404:a800:1452::/38": "9498", - "240a:a41f::/32": "143705", - "2602:805:a000::/44": "11672", - "2804:3c8::/32": "262908", - "2620:171:47::/48": "715", - "2a0d:3840:100::/48": "57629", - "2402:1680:a::/48": "7590", - "240a:a1a9::/32": "143075", - "2604:1300:4000::/34": "3833", - "2804:4bd8::/40": "267332", - "2001:559:8786::/47": "7922", - "2401:4900:18f0::/39": "45609", - "240a:a0e6::/32": "142880", - "240a:a197::/32": "143057", - "2804:80b0::/32": "271767", - "2a02:26f7:d141::/45": "20940", - "2001:4cd0::/29": "8551", - "2804:804::/32": "262338", - "2a02:f880::/29": "61244", - "2a03:dc40:ffef::/48": "199926", - "2603:6010::/28": "10796", - "2604:4d40:3c00::/39": "213073", - "2400:1c00:1a::/45": "45143", - "2403:adc0::/32": "138093", - "2600:140f:ec00::/48": "9498", - "2804:7c88::/32": "271502", - "2a02:2ae8::/39": "702", - "2803:4e80::/32": "263232", - "2001:400:2411::/44": "293", - "2001:559:c400::/29": "7922", - "2001:fd8:3470::/44": "4775", - "2001:12f0:440::/39": "1916", - "240a:a7a9::/32": "144611", - "240a:ae55::/32": "146319", - "2801:1f0::/34": "3573", - "2a0a:4784::/32": "43317", - "2001:678:f2c::/48": "211499", - "2001:7f9:c::/48": "15606", - "240a:a3c8::/32": "143618", - "2600:1416:e001::/31": "20940", - "2620:149:a15::/48": "714", - "2800:160:1397::/42": "14259", - "2a02:26f7:c60a::/42": "20940", - "2a01:6e80::/32": "47223", - "2a05:d050:a0c0::/44": "16509", - "2a10:9f40::/29": "211721", - "2a0f:bf80::/29": "41918", - "2001:559:e::/48": "7922", - "2001:559:8745::/48": "33651", - "2001:4878:b225::/48": "12222", - "240a:a54a::/32": "144004", - "2a0b:a340::/32": "205934", - "2a0d:6600::/29": "39650", - "2a0e:b107:1411::/48": "208753", - "2001:c20::/43": "3758", - "2401:ff80:1805::/44": "133954", - "240a:a9c8::/32": "145154", - "2605:9240::/32": "22792", - "2a0b:6cc0::/31": "202984", - "2001:67c:370::/48": "56554", - "2405:b640::/47": "24305", - "2a00:a960::/32": "200161", - "2402:ef30::/30": "7633", - "240e:379:2600::/32": "4134", - "2602:feda:af2::/48": "138038", - "2a02:1380::/32": "50572", - "2c0f:f000:100::/40": "36891", - "2804:4cf8::/32": "267404", - "2001:559:2::/48": "7016", - "2001:559:35b::/48": "33651", - "240a:af79::/32": "146611", - "2804:321c::/32": "265056", - "2001:1248:59c1::/46": "11172", - "2402:800:530f::/43": "7552", - "240e:964:3800::/32": "4134", - "2600:9000:11cb::/45": "16509", - "2603:c013:8000::/36": "31898", - "2804:1b04:d::/48": "53048", - "2a06:e881:260f::/48": "206740", - "2001:480:1611::/41": "668", - "240e:473:9f20::/41": "140486", - "2620:4:a000::/48": "16539", - "2803:4440::/32": "28009", - "2a02:26f7:da05::/46": "20940", - "2a06:4e80::/29": "49375", - "2403:8100:1000::/46": "24023", - "2607:fc28:9000::/33": "22911", - "2620:100:6000::/43": "19679", - "2800:482:400b::/32": "14080", - "2803:cd80::/33": "264811", - "2a00:cdc0:12::/32": "12586", - "2a01:8840:a6::/44": "12041", - "2a09:2942::/31": "209898", - "2a0d:3841:1010::/48": "57629", - "2400:fc00:4550::/36": "45773", - "240e:946:3001::/45": "58540", - "2604:4000:8000::/48": "12915", - "2804:17b0::/32": "263165", - "2a05:c680::/29": "39259", - "2001:780:5307::/32": "12337", - "2800:440:8043::/45": "27738", - "2a00:1f40::/29": "42864", - "2600:e008::/40": "22995", - "2620:12e:3009::/45": "25670", - "2804:2050:3abd::/33": "264485", - "2804:7ed4::/32": "271650", - "2a02:ee80:420f::/43": "3573", - "2a0a:d6c0::/48": "61423", - "2409:8924:ad00::/38": "56046", - "240a:a328::/32": "143458", - "240a:a6fa::/32": "144436", - "2804:2d00:c000::/34": "265256", - "2a0d:4140::/32": "31463", - "2409:8914:9a00::/40": "56044", - "240a:a946::/32": "145024", - "2600:140b:2400::/48": "31109", - "2001:559:4ae::/43": "7922", - "2001:559:518::/48": "33655", - "2408:8956:9300::/40": "17816", - "2602:fca0::/36": "399504", - "2a02:a48::/32": "48960", - "2a02:ec40::/32": "39150", - "240e:3bb:ac00::/35": "4134", - "2a00:4802:5110::/29": "13124", - "2400:4480:4000::/34": "17426", - "2a0d:5f80::/29": "200899", - "2400:cb00:248::/47": "13335", - "2402:4000:1290::/41": "18001", - "2a0a:1400::/30": "46723", - "2405:ec00:9024::/41": "23955", - "2408:8256:3980::/44": "17623", - "240e:67e:8c00::/33": "4134", - "2603:c001:650::/35": "31898", - "2a05:e0c0::/29": "201011", - "2a10:d100::/32": "28919", - "2001:4878:b027::/48": "12222", - "2401:d800:f2f0::/39": "7552", - "240a:aa06::/32": "145216", - "240e:3b7:ec00::/35": "140314", - "2a0e:db40::/29": "49792", - "2a00:1a68::/33": "38955", - "2001:559:876c::/48": "7016", - "2620:10e:d000::/41": "21538", - "2806:2f0:5002::/42": "17072", - "2a06:e040:5902::/34": "198507", - "2408:8459:a610::/42": "17623", - "2604:2380::/32": "33029", - "2a02:2e02:8cf0::/39": "12479", - "2a0e:b107:c90::/45": "140938", - "2a07:3402::/32": "62874", - "2402:fa80::/32": "24516", - "240e:473:8f20::/41": "140486", - "2a09:6900::/29": "41498", - "2607:de00:300::/32": "23498", - "2408:8956:e300::/40": "17816", - "240e:108:48::/48": "134769", - "2606:4d00::/32": "53893", - "2a02:26f7:d504::/48": "36183", - "2a05:70c0::/35": "203455", - "2602:fde5:2b::/36": "393424", - "2800:160:1121::/44": "14259", - "2a0b:9380:11::/42": "206002", - "2001:df6:2e80::/48": "139504", - "2401:4900:1c38::/47": "24560", - "2a00:7d00::/32": "41165", - "2a0f:5701:3100::/40": "205593", - "2a10:ff00::/31": "212242", - "2001:67c:1888::/48": "203426", - "240e:44d:1380::/41": "4134", - "2a02:26f0:121::/46": "20940", - "2a0c:4a01:c10::/41": "134981", - "2407:600::/32": "9268", - "2600:1002:f000::/44": "6167", - "2604:bb80:300::/32": "14602", - "240e:44d:4c00::/41": "140345", - "2001:559:276::/48": "33651", - "2001:ee0:c840::/39": "45899", - "2001:2063::/24": "1299", - "2403:400:900::/31": "23820", - "2406:da18::/36": "16509", - "240a:ab32::/32": "145516", - "240e:37a:ac00::/31": "4134", - "2800:b90::/32": "263246", - "2804:54a0:1a00::/39": "27688", - "2a05:28c0::/29": "203020", - "2a0b:1ec0::/32": "205769", - "2a07:1980:11::/48": "48851", - "2001:559:c1ed::/46": "33287", - "2001:1248:707f::/40": "11172", - "2402:800:3b7f::/40": "7552", - "2600:6c3a:43a::/36": "20115", - "2620:1fd:20::/44": "11971", - "2804:3cf8::/32": "266245", - "2a02:26f7:cb0c::/48": "36183", - "2001:6d0:4006::/48": "50776", - "2407:f700:6000::/32": "132215", - "2801:80:200::/48": "52997", - "2a02:790::/32": "24679", - "2c0f:fce0::/32": "37027", - "2001:559:506::/44": "7922", - "2400:cb00:14::/46": "13335", - "240a:a46e::/32": "143784", - "2a00:bba0::/32": "207375", - "2a03:7700::/32": "34439", - "2a02:26f7:b809::/42": "20940", - "2a02:4fc0:4200::/32": "199081", - "2a0f:5c47:3e8::/48": "206499", - "2402:1f00:8300::/33": "16276", - "2404:d400::/32": "38193", - "2803:3440::/32": "263784", - "2803:d100:e680::/44": "52362", - "2a02:26f0:6301::/37": "20940", - "2a05:e740:116::/48": "29108", - "2001:559:701::/48": "33491", - "2607:fae0:8000::/36": "8038", - "2a03:ad40:430::/48": "54995", - "2001:559:8245::/48": "33657", - "2801:14:e800::/48": "271877", - "2804:52f0::/32": "268551", - "2804:791c::/32": "271285", - "2804:11e4::/32": "52945", - "2001:57a:a202::/36": "22773", - "2001:f20:f000::/46": "38154", - "2402:800:f870::/39": "7552", - "2409:8057:380a::/28": "56040", - "240a:ab34::/32": "145518", - "240a:ada7::/32": "146145", - "240e:49:9000::/38": "134419", - "2804:336c::/32": "265395", - "2001:500:f0::/48": "53535", - "2409:8020:3032::/45": "56046", - "240e:3b1:2c00::/35": "134774", - "2607:2480:b::/48": "46887", - "2a00:1950::/32": "39647", - "2a02:2430:80::/32": "39869", - "2001:559:c11e::/48": "13367", - "2001:bf0:6a::/32": "12732", - "2406:a6c0::/48": "18403", - "2804:5464::/32": "268647", - "2a0d:e480::/29": "51207", - "2607:fb08:5::/32": "32703", - "2620:103:e001::/46": "13893", - "2001:559:8533::/48": "7922", - "2402:ee40:100::/44": "134033", - "240a:ad09::/32": "145987", - "240e:698:2200::/40": "58466", - "2607:fb90:1f00::/34": "21928", - "2a01:5b0:7::/48": "8391", - "2a0a:2000::/29": "201057", - "2001:3c8:c301::/48": "55545", - "2001:67c:66c::/48": "15576", - "2602:808:a001::/48": "16509", - "2001:559:80b8::/47": "33659", - "2001:4bf0:1::/48": "29527", - "2620:ac:c000::/48": "21630", - "2620:11e:30c6::/48": "30706", - "2a02:26f0:6d01::/38": "20940", - "2a03:567::/32": "31400", - "2001:4860:4806::/41": "15169", - "2405:b000:a00::/37": "6262", - "2804:16b0:2000::/36": "61910", - "2a00:1098::/32": "44684", - "240e:967:c400::/39": "133775", - "2a07:f241::/30": "398481", - "2607:c980::/32": "11232", - "2806:10c8:ffff::/48": "8151", - "2a09:bd00::/48": "42385", - "2607:8380::/32": "11961", - "2607:f8b8::/32": "3043", - "2a00:7900::/32": "21000", - "2a05:4140:325::/48": "211772", - "2a05:e140::/29": "6735", - "2600:c809::/29": "3356", - "2607:fb90:df00::/34": "21928", - "2800:160:1114::/47": "14259", - "2804:694:3100::/36": "262596", - "2804:2af8::/32": "265128", - "2001:550:8e03::/35": "174", - "2801:10a::/44": "19429", - "2804:90c:6000::/37": "262617", - "2806:105e:12::/48": "8151", - "2a0e:8f02:2010::/48": "213021", - "2001:559:2f0::/48": "7922", - "2401:4900:1f20::/47": "24560", - "2404:7e40::/47": "138649", - "2806:2f0:2104::/43": "22884", - "2a04:9a01:1000::/36": "34663", - "2a07:1980:e::/47": "48851", - "2a0b:6900:7::/48": "206873", - "2600:2601:101::/28": "33362", - "2620:a0:4000::/46": "55064", - "2804:a20::/32": "263024", - "2a00:b740:5::/48": "13253", - "2402:f800:f000::/36": "7602", - "240a:a02e::/32": "142696", - "2a02:26f7:ef0d::/42": "20940", - "2402:800:3be0::/44": "7552", - "2406:84c0::/32": "138225", - "240a:af16::/32": "146512", - "2a00:7d80:1::/48": "44889", - "2a0a:1180::/31": "206746", - "2600:370f:60a0::/41": "32261", - "2603:c0ed::/36": "54253", - "2620:da:4000::/48": "393945", - "2803:d100:1000::/36": "52362", - "2a02:26f7:ba08::/48": "36183", - "2408:8957:4a00::/40": "17622", - "2804:5474:5::/46": "268651", - "2a01:c50f:a140::/37": "12479", - "2400:fc00:8c60::/40": "45773", - "2804:3774:2500::/33": "266416", - "2a02:e00:ffe9::/48": "62240", - "240a:ace3::/32": "145949", - "2803:7dc0::/32": "265725", - "2a0e:46c0::/31": "57183", - "2a0f:c087:f51c::/48": "212521", - "2607:f098:3100::/38": "33363", - "2a0b:33c0:112::/45": "57395", - "240a:a358::/32": "143506", - "2602:ff7a:f01::/40": "394144", - "2603:c002:1a30::/39": "31898", - "2a00:edc0:1010::/48": "62597", - "2a02:220::/32": "31122", - "2a04:7100::/29": "62391", - "2a0d:9340:626::/29": "35761", - "2404:3440:3000::/32": "138534", - "2a0c:9a40:107b::/40": "34927", - "2001:468:914::/40": "3754", - "240a:a025::/32": "142687", - "2a0c:b641:790::/47": "207300", - "2620:37:c000::/48": "5050", - "2a07:22c1:32::/48": "212342", - "2a0d:3842:1040::/48": "57629", - "2a0d:e4c4:b000::/33": "208861", - "2a0e:b107:d30::/44": "211940", - "2001:400:a000:7::/64": "46846", - "2400:144::/48": "4766", - "240a:a171::/32": "143019", - "2600:c01::/32": "14743", - "2804:18:7030::/44": "10429", - "2804:1b08:4000::/32": "61704", - "2a02:26f7:f5c4::/48": "36183", - "2001:48b8::/32": "19517", - "2a01:c50f:1bc0::/34": "12479", - "2a02:26f7:d44c::/48": "36183", - "2001:4c8:1111::/33": "15290", - "2400:dd06:1006::/28": "7497", - "2402:9d80:10c::/48": "131429", - "2405:d000:7000::/36": "17660", - "240a:ab53::/32": "145549", - "2602:fde1:187::/48": "397546", - "2001:559:c082::/48": "33667", - "2001:67c:19b0::/46": "16086", - "2801:80:3920::/48": "270591", - "2804:3654::/32": "266342", - "2001:559:c311::/48": "33660", - "2408:8459:4a10::/42": "17623", - "2a02:26f0:e400::/48": "34164", - "2001:678:39c::/48": "29684", - "240a:a04a::/32": "142724", - "2803:9800:9447::/40": "11664", - "2804:14c:d800::/40": "28573", - "2804:4134::/32": "266010", - "2a02:26f7:bd04::/48": "36183", - "2a02:26f7:f4c5::/46": "20940", - "2405:d180:1::/46": "9506", - "2804:100c::/32": "263616", - "2a0e:3940:f000::/36": "60767", - "2401:ff80:1c91::/46": "133954", - "240a:a707::/32": "144449", - "2600:6c38:41a::/47": "20115", - "2804:6e6c::/32": "270596", - "2a05:f00::/29": "41163", - "2001:559:84e1::/48": "33657", - "2001:448a:50f0::/39": "7713", - "2600:1011:b130::/41": "6167", - "2602:fd73::/36": "13503", - "2804:301:4000::/35": "53237", - "2600:40ff:fcf9::/48": "7046", - "2a09:4c0:ae01::/40": "58057", - "2a0f:607:1060::/47": "43126", - "2001:468:e00::/40": "2153", - "2001:df5:2380::/48": "138754", - "2408:84f3:9210::/42": "134543", - "2408:8956:3a00::/40": "17622", - "2600:1411:6000:1::/32": "20940", - "2803:f100::/32": "52255", - "2a0a:3f40::/32": "50673", - "2001:1938:7009::/32": "12989", - "2407:8f80:88::/48": "135636", - "2409:8062:3002::/48": "139080", - "2602:809:c000::/44": "54364", - "2804:4254::/32": "267493", - "2804:66d0::/32": "269584", - "2a06:46c0::/29": "203020", - "2a0b:51c0::/29": "205679", - "2400:7400:11::/42": "38044", - "2405:b000:200::/37": "6262", - "2409:8027:801::/34": "9808", - "240a:a36b::/32": "143525", - "240a:a7c0::/32": "144634", - "2604:7e00:32::/41": "17378", - "2804:e30:be00::/39": "11338", - "2001:559:1d7::/48": "7922", - "2001:67c:11d4::/48": "47702", - "2a0c:2600::/29": "205010", - "2001:4490:d7a0::/46": "9829", - "2409:8053:2802::/38": "56047", - "2600:140f:c00::/48": "55836", - "2a06:d641::/32": "49981", - "2a0b:6640::/32": "213158", - "2a0b:4340:30::/44": "41979", - "2402:800:3dd3::/44": "7552", - "2409:805c:5100::/36": "9808", - "240a:a258::/32": "143250", - "240a:afbe::/32": "146680", - "2602:feda:d63::/45": "212034", - "2607:ff60:5003::/34": "3900", - "2806:2f0:3141::/46": "17072", - "2001:3c8:5506::/32": "4621", - "2001:4490:3f00::/42": "9829", - "2400:7400:10::/48": "23736", - "2402:800:397f::/40": "7552", - "2602:fe59:20::/48": "46432", - "2a04:40::/29": "39878", - "2404:ce00::/32": "38634", - "2604:b480::/32": "46841", - "2a01:490::/32": "8251", - "2c0f:ef18:2::/32": "328266", - "2001:559:153::/45": "7922", - "2402:ef3e::/48": "7633", - "240e:982:6200::/36": "4134", - "2806:107e:1c::/42": "8151", - "2a01:9ec0::/32": "201785", - "2001:df1:b080::/48": "131373", - "2400:dcc0:a004::/39": "38631", - "2620:102:2000::/44": "3659", - "2801:80:1be0::/48": "266521", - "2409:806c:1100::/34": "9808", - "240e:3b7:dc00::/34": "4134", - "2605:d680::/32": "63313", - "2804:391c:1c::/32": "262287", - "2a03:7320::/48": "62222", - "2001:4cb8::/37": "28878", - "2408:80ea:6400::/41": "17816", - "2804:211c::/32": "264536", - "2804:6fd0::/32": "270686", - "2409:8087:4c17::/38": "9808", - "2804:3bc4::/32": "266169", - "2a00:5200::/32": "20985", - "2600:100a:f000::/44": "6167", - "2402:ef14::/32": "24397", - "2a00:1bb8::/32": "12810", - "2620:1ec:12::/47": "8068", - "2800:bf0:24d::/43": "52257", - "2a03:5440::/29": "42541", - "2a0e:b107:6e3::/48": "213215", - "2404:f4c0:f502::/48": "134666", - "2600:140f:4600::/48": "9498", - "2605:a404:b02::/43": "33363", - "2801:11:2000::/48": "61486", - "2a0c:5247:a000::/36": "208861", - "240a:ad52::/32": "146060", - "2a02:26f7:fc09::/38": "20940", - "2001:5b8::/32": "13645", - "240e:4a:4400::/31": "4134", - "2600:1407:1e::/47": "35994", - "2602:feda:3f0::/44": "63279", - "2804:16d8:1000::/38": "262729", - "2001:df1:780::/48": "136644", - "2a00:d18::/32": "12714", - "2a01:b380::/32": "196735", - "2a0e:aa07:f091::/48": "208884", - "2a05:8a00::/48": "201178", - "2406:c500:ffd3::/48": "4739", - "240a:aea2::/32": "146396", - "240e:3b6:ac00::/35": "4134", - "240e:473:4950::/40": "4134", - "2602:ff32:3::/48": "55247", - "2804:5cfc::/32": "268944", - "2806:2f0:91c2::/42": "17072", - "240a:a15d::/32": "142999", - "2804:14d:ca00::/40": "28573", - "2804:6c8::/32": "262606", - "2804:928::/32": "53102", - "2806:2f0:40e4::/39": "17072", - "2a0b:8100::/44": "51559", - "2402:800:519b::/41": "7552", - "240a:a8d3::/32": "144909", - "2804:4f1c::/32": "268304", - "2806:230:602a::/48": "265594", - "2001:978:2a00::/48": "62455", - "2001:ce0:2200::/40": "4528", - "2402:800:9a2b::/41": "7552", - "2600:6c7f:9080::/48": "20115", - "2a0c:2340::/29": "44399", - "2610:a1:1022::/48": "397213", - "2001:400:a000:12::/33": "293", - "2001:559:189::/46": "33659", - "2001:678:55c::/48": "12552", - "2401:880::/32": "45630", - "2408:8256:d98::/38": "17622", - "2409:8d14:700::/36": "56044", - "240a:aefe::/32": "146488", - "2620:16e:89::/48": "3147", - "2a10:9d00::/29": "49188", - "2001:df2:8100::/48": "137050", - "2600:1419:c::/48": "35204", - "2a02:26f7:e5c9::/42": "20940", - "2a04:6440::/29": "35368", - "2a0d:1a40:7553::/48": "213185", - "2a11::/48": "6233", - "2408:8456:cb00::/42": "17622", - "240a:a006::/32": "142656", - "2804:68c0::/32": "269713", - "2a01:c50f:3340::/40": "12479", - "2a0a:4640:21::/29": "206177", - "2a0e:b107:1390::/44": "211231", - "2001:253:136::/48": "142102", - "2401:d800:bfb0::/41": "7552", - "2401:d800:d9c0::/42": "7552", - "240e:c::/33": "4134", - "2804:59a0:1000::/36": "268714", - "2a02:26f7:c281::/46": "20940", - "2001:559:8291::/48": "7922", - "240e:108:98::/48": "137698", - "2600:370f:374a::/40": "32261", - "2605:4e40::/32": "40033", - "2804:612c::/40": "269218", - "2001:550:6701::/36": "174", - "2600:1407:3401::/38": "20940", - "2a02:940::/32": "21013", - "2408:8456:1c40::/40": "17816", - "2605:9780:f::/43": "36180", - "2a02:26f7:c681::/46": "20940", - "2606:b080::/32": "55140", - "2405:7f00:9b00::/37": "133414", - "2800:960::/32": "27768", - "2a04:9444::/30": "25584", - "2400:1200::/32": "9503", - "240e:147::/24": "4134", - "2605:7900:1::/45": "19133", - "2001:1248:55ae::/43": "11172", - "2409:8753:700::/36": "56047", - "240e:f8::/32": "134773", - "2600:370f:73ae::/41": "32261", - "2a0e:b107:14c2::/44": "211042", - "240e:980:9400::/40": "4134", - "2a00:1508::/32": "49835", - "2a00:17c0::/32": "12993", - "2001:559:39d::/48": "21508", - "2001:df3:b500::/48": "135946", - "2001:4878:c158::/48": "12222", - "2408:8459:3e50::/33": "17816", - "240a:a506::/32": "143936", - "2600:180c:6002::/32": "16552", - "2a00:13d0::/32": "48961", - "2a07:4f81:1::/48": "14870", - "2001:470:83::/48": "26110", - "2001:1248:844e::/43": "11172", - "2804:69dc:8000::/33": "270296", - "2a06:11c0:3::/45": "208086", - "2001:678:d10::/48": "31027", - "2001:67c:2bb0::/48": "28674", - "2409:8904:4a60::/39": "24547", - "240a:aec0::/32": "146426", - "2600:9000:1133::/45": "16509", - "2804:70f8::/32": "270759", - "2a06:2600::/32": "20473", - "2001:559:8354::/48": "22909", - "2001:4998:48::/43": "10310", - "2620:13a:c000::/46": "53356", - "2804:14b8::/32": "263346", - "2a07:5200::/48": "213208", - "2604:8540:fcf2::/48": "33353", - "2801:80:a10::/48": "263287", - "2804:14c:f285::/44": "28573", - "2a01:6500:a04c::/43": "42925", - "240a:a6bf::/32": "144377", - "2600:1415:f800::/48": "24319", - "2804:4060::/32": "265955", - "2a03:7a40::/32": "48173", - "2a0a:200::/29": "786", - "2406:c8c0::/32": "138333", - "2620:13b:d000::/48": "46691", - "2408:8459:2e40::/35": "17816", - "2408:8459:6650::/36": "17816", - "2600:8c00::/28": "17310", - "2620:101:2009::/46": "30238", - "2a09:5a00::/29": "204760", - "2a0b:1940::/47": "42411", - "2001:559:8310::/48": "7016", - "2001:1398:1::/45": "27678", - "2600:1417:5000::/48": "23693", - "2804:38:1000::/39": "19089", - "2804:5f48::/32": "269089", - "2806:2f0:9022::/41": "17072", - "2a05:eb40::/29": "200915", - "2001:500:135::/48": "396574", - "2001:44b8:603e::/41": "4739", - "2405:9ac0::/32": "131920", - "2a00:9400::/32": "52063", - "2405:b40:2::/42": "55674", - "2406:bb00::/29": "10010", - "2607:ff70::/32": "62", - "2804:69b0:40::/40": "270285", - "2001:559:cb::/48": "7015", - "2606:9a80::/32": "21769", - "2804:16c4::/32": "61915", - "2a03:f003:4::/38": "25472", - "2a06:c840::/29": "198024", - "2a09:d7c0::/29": "28771", - "2a0d:77c7::/36": "7489", - "2408:865c::/31": "4837", - "240a:c000::/20": "137726", - "2804:55c4::/32": "267955", - "2001:5b0:1f00::/40": "6621", - "2001:4d80::/33": "5606", - "2402:800:9b9b::/42": "7552", - "2804:14c:65d8::/42": "28573", - "2804:14c:9900::/40": "28573", - "2a0c:5c81::/29": "55081", - "2001:200:f00::/32": "2500", - "2001:2a8::/32": "7670", - "2001:559:cc::/48": "33657", - "2600:1406:3401::/38": "20940", - "2605:60c0::/40": "395846", - "2620:129:9001::/63": "13767", - "2804:2050:1abd::/34": "264485", - "2001:5b0:ffff::/48": "6621", - "2001:df5:3580::/48": "136697", - "2401:ff80:1311::/46": "133954", - "2405:100:101::/32": "9905", - "2a01:c50f:af00::/40": "12479", - "2401:f000::/47": "38477", - "2405:1c0:6351::/46": "135062", - "2606:11c0::/32": "398263", - "2801:80:2410::/48": "268306", - "2a03:d000::/39": "31213", - "2a05:bf00::/29": "43260", - "2001:559:821a::/48": "20214", - "2407:1400:8a::/32": "23752", - "240e:67a:1000::/37": "140330", - "2605:c840::/32": "397303", - "2804:1230:2040::/40": "263462", - "2a01:8840:26::/44": "12041", - "2a02:26f7:c7::/44": "20940", - "2a02:26f7:b709::/42": "20940", - "2408:8459:cb50::/37": "17816", - "2804:628c:4000::/42": "269303", - "2a00:19d8::/32": "42004", - "2a0f:e40::/29": "60262", - "2a03:ca40::/32": "197727", - "2001:410:a000::/47": "8111", - "2001:df3:6b00::/48": "137217", - "2401:c680:10::/35": "133854", - "2402:a740::/32": "134868", - "2402:ab00:e0::/44": "24206", - "2804:1ca4::/32": "263010", - "2a02:ee80:4199::/45": "3573", - "2a0b:cc0::/32": "51131", - "2c0f:7800::/32": "60171", - "2404:4e00:101::/46": "32787", - "2409:8a53:500::/38": "56047", - "2600:5800:f78a::/48": "11955", - "2602:ff06:725::/48": "6939", - "2606:18c0:2::/48": "399448", - "2a06:4540::/29": "200428", - "2001:18c8:500::/40": "26326", - "2409:8087:7f00::/32": "9808", - "2803:8220::/32": "27843", - "2a01:9080::/32": "39658", - "2a0f:a900::/29": "15391", - "2c0f:eb60::/32": "37723", - "2404:b300:1::/46": "131207", - "2620:11a:a02b::/45": "43515", - "2803:e210::/32": "271907", - "2a00:1b58::/32": "50621", - "2a00:1ca8::/42": "50673", - "2a07:c700::/29": "50178", - "2a0a:d180::/36": "206652", - "2001:760::/32": "137", - "2408:8956:2d00::/40": "17816", - "2a04:a2c0::/32": "9044", - "2001:468:300::/48": "2637", - "2405:9800:c92e::/41": "45430", - "2407:3e00:a000::/48": "9911", - "240a:a3d6::/32": "143632", - "2607:f368:3224::/48": "46846", - "2800:160:220f::/42": "14259", - "2804:50c0::/32": "268408", - "2001:67c:2954::/48": "51973", - "2408:8956:5200::/40": "17622", - "2607:f4a8::/34": "803", - "2620:3b:4000::/48": "62681", - "2a06:e881:2509::/48": "205634", - "2a04:4e40:fe00::/48": "54113", - "2001:470:139::/45": "6939", - "2001:4858::/32": "32097", - "2407:6dc0::/32": "140944", - "2804:4da0::/32": "268209", - "2a0a:4a00::/29": "48662", - "2a0f:a440::/29": "212598", - "2408:8256:316a::/48": "17816", - "2606:1c00::/32": "11714", - "2a02:26f0:fe::/47": "20940", - "2a07:8147:ffff::/48": "211846", - "2001:559:c2db::/45": "7015", - "2001:2000:4000::/40": "3301", - "2404:1a3:1003::/32": "24334", - "2600:1417:1a::/48": "24319", - "2600:9000:1188::/46": "16509", - "2804:15bc::/32": "28184", - "2a00:1ca8:d3::/45": "58061", - "2001:559:184::/48": "7922", - "2001:559:4c4::/47": "7015", - "2001:559:82ed::/48": "7922", - "2001:b90::/32": "15919", - "2a0b:ecc0::/29": "205390", - "2604:f9c0::/32": "397064", - "2a04:e4c0:55::/48": "36692", - "2404:bf40:a580::/48": "2764", - "2600:370f:34c5::/42": "32261", - "2804:898::/32": "262380", - "2a00:5320::/32": "24953", - "2001:67c:2f0::/48": "51395", - "2406:8600:f83f::/41": "10310", - "240a:a2ac::/32": "143334", - "2600:9000:1197::/48": "16509", - "2804:2450::/36": "264214", - "2402:800:5b7f::/40": "7552", - "2408:840d:2700::/42": "17621", - "2a04:c440:2a00::/40": "47340", - "240a:ab0f::/32": "145481", - "2a02:26f7:d0::/48": "36183", - "2a02:26f7:b640::/47": "36183", - "2407:e300::/31": "55536", - "2a0e:2380::/32": "208929", - "2a0e:3840:801::/48": "40676", - "2001:67c:2890::/48": "43862", - "2405:e000:1004::/37": "37963", - "2409:8924:a500::/38": "56046", - "2806:230:1012::/48": "265594", - "2a03:8180:1c00::/39": "36351", - "2001:1248:56ff::/39": "11172", - "2001:18c0::/32": "11290", - "2402:2f80:5::/46": "134451", - "240a:a2c8::/32": "143362", - "2400:cb00:a540::/46": "13335", - "2408:8256:3379::/48": "17816", - "2620:10a::/44": "43", - "2a0d:e841::/32": "35913", - "2001:559:7cd::/48": "33657", - "2001:559:c237::/48": "20214", - "2405:9200:5100::/41": "131596", - "240e:37d:aa00::/39": "140330", - "2a02:2030::/32": "198252", - "2a03:a480::/32": "59469", - "2a07:8504::/32": "1104", - "2402:800:3101::/44": "7552", - "240e:10:a000::/37": "63838", - "2a02:2090:6800::/48": "43489", - "2a02:26f7:df04::/48": "36183", - "2a07:f0c0::/29": "200768", - "2a0e:8f02:f026::/48": "211480", - "2c0f:f7a8:9041::/48": "4809", - "2a04:f580:9012::/47": "4809", - "2001:67c:2c28::/48": "57118", - "2400:dd09:1006::/30": "7497", - "2407:fe80:200::/32": "134749", - "240a:a107::/32": "142913", - "2a03:ec00:b400::/36": "12847", - "240a:a3ac::/32": "143590", - "2607:f8c8::/32": "23308", - "2a0e:b500::/29": "208974", - "2a03:bbc0::/32": "61212", - "2001:df3:9c00::/48": "55536", - "2402:800:9701::/44": "7552", - "240e:108:1091::/42": "4134", - "2600:1406:7400::/48": "35994", - "2620:1f8:f011::/46": "40443", - "2804:14c:bbb0::/41": "28573", - "2a02:2455::/33": "35244", - "2001:559:c312::/48": "22909", - "2001:4890::/32": "3257", - "2804:74fc::/32": "271016", - "2600:8807:a840::/38": "22773", - "2c0f:5000::/32": "328745", - "2001:1248:9c1e::/42": "11172", - "2001:1248:a454::/42": "11172", - "2401:75c0::/32": "136793", - "2c0f:f020:8b00::/40": "327907", - "2001:678:638::/48": "204307", - "2405:a540::/35": "38156", - "2804:14d:5cff::/48": "28573", - "2804:3060::/32": "264947", - "2a00:4802:2b0::/41": "13124", - "2a03:f80:70::/48": "56630", - "2a04:6d80::/30": "199993", - "2602:fd48::/36": "29924", - "2607:fb10:17::/42": "2906", - "2801:15:2800::/48": "270033", - "2408:8456:2c00::/41": "17623", - "240e:44d:1b80::/41": "4134", - "2402:800:7a00::/42": "7552", - "2804:5380::/32": "268588", - "2a00:8da0::/32": "6696", - "2a06:4800:1000::/36": "209283", - "2001:1248:57fc::/47": "11172", - "2405:cb40::/32": "139983", - "2804:232c::/32": "264146", - "2a03:db80:4811::/46": "680", - "2c0f:f7a8:8050::/48": "4134", - "240e:983:1e01::/48": "134764", - "2606:f200::/32": "36097", - "2806:101e:1::/48": "8151", - "2001:67c:48::/48": "51210", - "2001:67c:7bc::/48": "8949", - "2804:2108::/32": "264528", - "2a02:20c8::/35": "50304", - "2a02:26f0:8901::/40": "20940", - "2a02:26f7:df85::/46": "20940", - "2a04:88c0::/48": "60781", - "2800:bf0:82c1::/44": "27947", - "2001:67c:28c4::/48": "1257", - "2001:16d8:900::/32": "16150", - "240a:a063::/32": "142749", - "240a:a49a::/32": "143828", - "2600:6c38:97::/44": "20115", - "2604:d600:d::/43": "32098", - "2606:f900:9002::/37": "812", - "2607:f7f0::/32": "30259", - "2804:5120:8000::/33": "268432", - "2001:67c:5ec::/48": "34172", - "2404:0:5000::/46": "24154", - "2408:8256:397d::/46": "17623", - "240e:3b7:9200::/36": "140317", - "2806:261:410::/40": "13999", - "2a01:8b60::/32": "8201", - "2001:559:2d0::/48": "7922", - "2409:8a79::/30": "9808", - "2620:11a:a012::/44": "43515", - "2804:1ec::/32": "53127", - "2804:cd8::/32": "52559", - "2804:1458::/32": "263326", - "2a02:4bb::/29": "39605", - "2606:9580:ff03::/48": "394256", - "2a03:89c0::/32": "24978", - "2001:4490:48e0::/46": "9829", - "2403:cfc0:1004::/48": "9678", - "2a02:26f7:d5c4::/48": "36183", - "2a06:940::/48": "207333", - "2a06:aa40:cadc::/29": "51944", - "2001:579:124::/43": "22773", - "2402:5300:510::/38": "45903", - "240a:a5bf::/32": "144121", - "2804:14c:ce84::/41": "28573", - "2a02:fe80:2010::/48": "30148", - "2602:807:a000::/44": "398668", - "2607:f738:a00::/39": "17184", - "2804:4788::/32": "267060", - "2804:6098::/32": "269179", - "2001:678:778::/48": "210814", - "2402:3000::/32": "23637", - "2602:fed2:7110::/48": "139677", - "2804:3dc0:e000::/35": "266551", - "2001:4408:5221::/45": "4758", - "2402:800:7030::/41": "7552", - "2408:8956:7e00::/40": "17622", - "2605:a40a:c002::/36": "33363", - "2001:559:13d::/48": "22909", - "2001:df4:a700::/48": "134021", - "2404:7940::/32": "58593", - "240a:a7a2::/32": "144604", - "2604:6600:fe9c::/39": "40676", - "2804:14ac::/32": "263343", - "2001:501:b1f9::/48": "396566", - "2001:1248:5bea::/43": "11172", - "2a01:8320::/32": "39636", - "2a09:2700::/48": "208187", - "2a0b::/29": "41453", - "2801:c4:50::/48": "28519", - "2001:559:ae::/48": "33657", - "2001:559:841b::/48": "33657", - "2401:d800:160::/40": "7552", - "2405:203:99d::/29": "55836", - "2405:f280:2::/43": "131464", - "240a:aea3::/32": "146397", - "2605:6600::/32": "21766", - "2804:45cc::/32": "266950", - "2a01:b740:a21::/48": "714", - "2a0f:f4c1:2::/48": "36040", - "2620:1ec:a92::/48": "8068", - "2804:5648::/32": "267988", - "2001:559:4e1::/48": "20214", - "2804:55dc::/33": "267961", - "2001:4898:8021::/33": "3598", - "2402:ef21:8000::/35": "7633", - "240a:a98c::/32": "145094", - "2401:5ec0::/48": "135918", - "2600:1480:1100::/37": "20940", - "2600:370f:72af::/43": "32261", - "2804:7348::/32": "262690", - "2a00:cb8:144::/48": "15695", - "2a07:3500:13b8::/48": "212151", - "2a0b:6980::/29": "43414", - "2408:8459:c910::/42": "17623", - "240e:ff:c007::/48": "136198", - "2804:f4c::/32": "263578", - "2806:20d:504b::/43": "32098", - "2a0e:ef40::/48": "20473", - "2001:67c:25f4::/48": "45045", - "240a:a563::/32": "144029", - "240e:3bf:d000::/36": "134772", - "2a03:6c0::/32": "198520", - "240a:a290::/32": "143306", - "2001:559:86a7::/48": "33667", - "2402:800:fc70::/40": "7552", - "2403:5500::/32": "17537", - "240a:aa25::/32": "145247", - "2600:1419:7001::/38": "20940", - "2a05:8b80::/29": "201206", - "2a0b:f4c2:2::/48": "208294", - "2001:400:201:75::/43": "293", - "2400:cb00:43::/44": "13335", - "2a00:1d20::/30": "49544", - "2a0f:e401:111::/48": "204307", - "2401:4900:2340::/43": "45609", - "2402:e280:200::/48": "134674", - "2a02:568::/32": "8763", - "2a02:b70::/32": "48972", - "2a0d:9cc0::/29": "57782", - "2001:559:c35d::/48": "7016", - "2610:e0:9000::/34": "2572", - "2001:678:ef0::/48": "202592", - "2804:3088::/32": "264959", - "2804:527c::/32": "268521", - "2a02:26f7:ef4d::/46": "20940", - "2a07:3c80::/40": "209322", - "2604:d600:1643::/44": "32098", - "2804:2004::/32": "264460", - "2001:678:a20::/48": "15380", - "2408:8956:6800::/40": "17622", - "240e:3b4:7a00::/32": "140313", - "2a02:6b8:7::/48": "208722", - "2401:4900:519c::/46": "45609", - "2604:50:8::/47": "393950", - "2a00:dee0::/48": "200172", - "2a02:26f7:dd::/42": "20940", - "2801:80:1c30::/48": "266077", - "2600:9000:1098::/42": "16509", - "2a0f:5701:fe02::/43": "206499", - "240a:ac45::/32": "145791", - "240e:967:ec00::/28": "4134", - "2804:1634::/32": "263275", - "2806:2f0:50e1::/39": "17072", - "2a00:86c0:2061::/43": "2906", - "2a02:ee80:4192::/45": "3573", - "2001:df4:be80::/48": "141176", - "2620:145:800::/38": "12257", - "2803:b220::/32": "265844", - "2804:1038::/32": "263625", - "2001:503:f3da::/48": "7342", - "2001:67c:1160::/48": "202539", - "240a:a9e9::/32": "145187", - "2600:6800::/24": "7155", - "2804:1b08::/37": "61704", - "2804:1f4c::/36": "269175", - "2a02:250:ffff::/48": "39570", - "2001:559:8487::/48": "33287", - "2001:590:2005:300::/35": "3257", - "2001:67c:814::/48": "210937", - "2409:8914:b000::/39": "56044", - "240a:a974::/32": "145070", - "2600:1308::/32": "20021", - "2a02:2530::/32": "43088", - "2001:559:84bb::/48": "33491", - "2001:dce:7001::/38": "23869", - "2404:160:a040::/37": "10030", - "2602:feda:105::/48": "396303", - "2603:603d::/32": "10796", - "2a00:8c60:a::/47": "60706", - "2402:800:9db7::/41": "7552", - "2403:8600:2080::/43": "45820", - "2408:8459:4050::/38": "17816", - "2a02:26f0:e001::/38": "20940", - "2001:559:87ca::/43": "7922", - "2407:500:100::/48": "58940", - "2409:8a51:f00::/35": "56047", - "240a:a52a::/32": "143972", - "240e:5::/35": "17638", - "240a:aa51::/32": "145291", - "2606:4f00:4::/48": "19324", - "2607:f480:f001::/48": "27435", - "2804:675c::/32": "269623", - "2a07:60c0::/29": "24679", - "2c0f:f758::/32": "37204", - "2a06:5f80::/32": "57780", - "2401:9d00::/47": "9835", - "2406:3400:700::/36": "10143", - "2406:7400:4::/48": "24309", - "2406:9dc0:100::/44": "18250", - "2804:680c::/32": "269667", - "2a00:1ca8:9d::/41": "50673", - "2a03:db80:4c81::/46": "680", - "2c0f:ee78:8001::/46": "61317", - "2001:4878:4037::/44": "12222", - "2405:a740::/32": "58820", - "2604:5500:4000::/38": "19165", - "2605:1280::/32": "14288", - "2606:2800:5088::/48": "15133", - "2a02:26f7:f180::/48": "36183", - "2001:57a:80c0::/38": "22773", - "240a:a846::/32": "144768", - "2804:3710::/32": "266387", - "2a06:c003::/32": "45027", - "2a10:65c0::/29": "9063", - "2408:8256:3b75::/48": "17816", - "2603:c026::/35": "31898", - "2604:bfc0::/32": "54646", - "2804:1c4c:593::/35": "61648", - "2a02:df0::/32": "25233", - "2a02:26f7:7::/48": "20940", - "2a06:8187:fb00::/40": "64475", - "2001:550:6a01::/37": "174", - "2001:df2:1400::/48": "133923", - "2606:5000:4e00::/32": "3908", - "2804:127c::/32": "263479", - "2804:3744::/32": "266400", - "2a02:fae0::/38": "58193", - "2001:559:7af::/43": "7922", - "240a:a020::/32": "142682", - "2a02:26f7:ee49::/42": "20940", - "2a03:db80:4420::/48": "5501", - "2c0f:fbf0:20::/29": "32653", - "2a0e:e43::/29": "328317", - "2001:579:114::/42": "22773", - "2001:2000:1::/36": "1299", - "240a:a05f::/32": "142745", - "240a:abf6::/32": "145712", - "2606:f900:a201::/37": "812", - "2a0a:5dc0::/29": "51395", - "2a0b:5ec0::/29": "42926", - "2a0e:6a80::/29": "44486", - "2001:49f0:d001::/44": "174", - "2408:8459:50::/38": "17816", - "2001:559:760::/48": "33659", - "2801:15c:2::/48": "10753", - "2a07:4000::/29": "205639", - "2001:12f0:b40::/42": "1916", - "2406:2f00::/32": "132542", - "240e:473:2c00::/41": "140485", - "2a0e:fd45:4100::/34": "44103", - "2001:df5:6f80::/48": "141424", - "2001:1248:57a6::/43": "11172", - "2602:feb4:2a0::/36": "25961", - "2a02:26f7:dc8c::/48": "36183", - "2a09:d4c0::/29": "209070", - "2600:380:8f00::/40": "7018", - "2a01:b740:a1c::/48": "6185", - "2a03:4b40:5281::/37": "50710", - "2001:678:45c::/48": "213237", - "2405:b900:30::/44": "55701", - "2406:c80::/32": "132092", - "2620:116:800b::/48": "14618", - "2a02:6a80:5301::/44": "3245", - "2001:500:f1::/48": "198260", - "2800:8a0:4000::/32": "5722", - "2806:230:4035::/48": "11888", - "2a07:c400::/29": "34407", - "2607:fb90::/36": "21928", - "2804:20fc:2000::/32": "264525", - "2a0c:7e45:d430::/48": "20473", - "2a0d:ef01::/48": "212500", - "2403:200::/32": "45461", - "2a02:2478::/32": "51862", - "2c0f:f608:4000::/36": "21351", - "2001:df5:7a00::/48": "134663", - "2801:80:1320::/48": "263953", - "2804:7f7::/35": "10429", - "2001:67c:2d38::/48": "207576", - "2001:4998:19::/46": "10310", - "2804:200c::/32": "262815", - "2804:4d3c::/36": "267420", - "2804:6754::/32": "269620", - "2001:678:2::/48": "31529", - "2600:1f00:5000::/40": "16509", - "2a00:6060:8000::/48": "199881", - "2a04:4e40:7840::/43": "54113", - "2001:428:4004::/48": "32571", - "2408:8956:1000::/40": "17622", - "2409:8924:8700::/36": "56046", - "2605:a980::/48": "1996", - "2a01:328::/32": "31117", - "2a06:8c80::/29": "49223", - "240a:a276::/32": "143280", - "2620:74:1b::/48": "397213", - "2a02:26f7:ec4d::/46": "20940", - "2402:800:311d::/42": "7552", - "2406:3000:2:10a::/47": "4657", - "2604:c8c0::/36": "396045", - "2a00:eb0:100::/48": "61201", - "2001:43f8:1140::/47": "10310", - "2001:4878:242::/48": "12222", - "2401:4900:3da0::/44": "45609", - "2408:8957:6900::/40": "17816", - "2600:380:5380::/34": "20057", - "2600:141b:3801::/33": "20940", - "2804:fec::/32": "262493", - "2001:4d68::/32": "25441", - "2a0e:b107:2a0::/44": "31798", - "2400:a980:2400::/40": "133518", - "2603:4:1200::/48": "44273", - "2804:b08::/32": "28331", - "2a02:7a00:2::/48": "199604", - "2602:fdf4::/36": "62600", - "2604:6e00:2800::/37": "13977", - "2607:f480:211::/48": "27435", - "2400:3d80::/32": "56304", - "2407:6a00::/32": "18055", - "2804:6d14::/32": "270511", - "2a02:26f7:cb0d::/46": "20940", - "2a03:3780::/48": "203474", - "2a04:92c3::/29": "62240", - "2804:6da8::/32": "270547", - "2001:918:fff2::/48": "208813", - "2607:3a80:25::/48": "398480", - "2607:fcf0:6::/39": "13445", - "2620:f:8000::/48": "27500", - "2804:1bc:f047::/36": "10310", - "2804:214:2::/44": "26615", - "2804:a54:13::/45": "262664", - "2a01:280:3::/45": "12381", - "2606:2580::/32": "393994", - "2606:2800:533::/45": "15133", - "2804:6bd4::/32": "270428", - "2a00:1aa0::/32": "209480", - "2001:559:8382::/48": "7015", - "2001:4310::/32": "30983", - "240a:a9b5::/32": "145135", - "2604:d600:1306::/44": "32098", - "2620:10d:9000::/48": "25993", - "2a00:8b60::/32": "8440", - "2a09:bac0:160::/48": "13335", - "2600:1000:9010::/40": "22394", - "2606:4e00::/32": "396362", - "2620:22:a000::/48": "27580", - "2400:c540:c277::/39": "59238", - "2408:8406::/39": "4808", - "240a:ace7::/32": "145953", - "2602:fec2::/32": "16713", - "2804:6394::/32": "269370", - "2a0e:e40::/32": "208638", - "2001:559:c104::/48": "7725", - "2404:f4c0:fb00::/48": "139796", - "2606:680::/42": "46429", - "2607:d600::/32": "13576", - "2806:2f0:20a3::/48": "17072", - "2a02:26f7:b9a4::/48": "36183", - "2a06:3000:2000::/29": "28715", - "2001:c20:c841::/48": "3758", - "2405:3340::/48": "137856", - "2620:117:7000::/47": "26955", - "2a00:dac0::/32": "197765", - "2403:b840::/32": "138336", - "2803:8040::/32": "263749", - "2804:5a34::/39": "268755", - "2804:6c8c::/32": "270476", - "2001:df3:f980::/48": "132040", - "240a:a6f3::/32": "144429", - "240e:fc:f000::/31": "4134", - "240e:378:1a00::/34": "140330", - "2602:805:7000::/44": "40069", - "2a02:26f0:d401::/39": "20940", - "2a0c:ef00::/32": "212881", - "2a02:26f7:cd4d::/42": "20940", - "2402:800:7410::/42": "7552", - "2408:8459:ed30::/41": "17622", - "240a:a113::/32": "142925", - "2600:370f:34c0::/45": "32261", - "2602:801:3000::/47": "6556", - "2605:a40c:a::/42": "33363", - "2804:3bf8::/32": "266183", - "2001:559:61::/48": "7015", - "2804:5938::/32": "268176", - "2604:4cc0:11::/48": "20150", - "2804:df0:e00::/35": "262775", - "2a0e:b107:3f6::/47": "57883", - "2c0f:fd28::/32": "29091", - "2a0d:da07::/32": "53755", - "2001:4408::/45": "4758", - "240a:a364::/32": "143518", - "2803:6900:581::/48": "52423", - "2804:79cc::/34": "271328", - "2804:7c4c::/32": "271487", - "2806:230:2041::/48": "11888", - "2a02:16f8::/32": "24931", - "2600:80d:11::/46": "6984", - "2001:df1:2a00::/48": "134553", - "2402:800:9a01::/44": "7552", - "240e:44d:2600::/41": "140345", - "2a01:7b0::/32": "34752", - "2a0d:2100::/29": "204947", - "2600:6:ff40::/46": "10507", - "2607:a400:6::/47": "21859", - "2800:bf0:81e0::/44": "52257", - "2602:fe25:b::/36": "33174", - "2001:43f8:1d0::/48": "37288", - "240a:a8a6::/32": "144864", - "2600:1406:ac00::/48": "35994", - "2605:7c0:1006::/44": "19382", - "2605:dd40::/35": "398549", - "2a06:e881:5700::/40": "209619", - "2400:9380:8001::/48": "4134", - "2402:800:7520::/41": "7552", - "2605:d9c0::/32": "32361", - "2a09:da80::/29": "15830", - "2a0c:a300::/29": "44486", - "2001:678:27c::/48": "203369", - "2401:4900:3990::/44": "45609", - "240a:aed4::/32": "146446", - "240e:86:9000::/28": "4134", - "2606:c800::/32": "36012", - "2a09:4b00::/32": "35280", - "2a0b:5dc0::/29": "198288", - "2001:559:3e5::/48": "7922", - "2803:d100:9280::/37": "52362", - "2804:17c4:1014::/32": "263250", - "2804:6904:4000::/34": "270243", - "2806:230:2004::/48": "265594", - "2a03:9c00:a::/48": "43443", - "2a0b:e84::/30": "206537", - "2001:559:8529::/48": "33651", - "2402:800:31e0::/44": "7552", - "2404:3d00:413e::/41": "21433", - "240a:a50a::/32": "143940", - "240a:a6da::/32": "144404", - "2a07:e00::/48": "210083", - "2a0c:5a00::/29": "50304", - "2a0a:e5c0:c::/47": "209898", - "2402:ef03:1::/46": "7633", - "240e:983:1301::/36": "4134", - "2600:100b:f010::/39": "6167", - "2a03:4b80::/32": "21246", - "2c0f:fef8:11::/32": "15399", - "2001:559:c010::/47": "33287", - "2403:ec00:35::/48": "17806", - "2604:f880::/32": "62695", - "2803:5c80:6034::/48": "64114", - "2804:314:4015::/44": "61568", - "2804:20fc:30::/35": "264525", - "2a04:6540::/32": "200168", - "240a:a482::/32": "143804", - "2600:1419:fc01::/30": "20940", - "2803:3610::/32": "271951", - "2804:4010::/32": "265931", - "2001:67c:10dc::/48": "199215", - "2401:d800:fd30::/41": "7552", - "2409:8010:2100::/36": "9808", - "2610:e0:d000::/34": "2572", - "2a0b:7f00::/29": "44489", - "2001:559:57f::/48": "33660", - "2001:559:80aa::/48": "7922", - "2407:9800::/30": "10139", - "240a:a960::/32": "145050", - "2800:160:1c82::/44": "14259", - "2801:11:8800::/48": "19429", - "2a09:2340::/29": "43260", - "2a00:f826:8::/48": "200462", - "2a03:6580::/32": "19855", - "2a02:26f0:ee01::/35": "20940", - "2001:4878:4259::/48": "12222", - "2404:e801:101f::/42": "55430", - "2405:1c0:7961::/48": "135062", - "2406:e000:36a::/43": "23655", - "2408:8456:e810::/42": "134543", - "240a:ae29::/32": "146275", - "2804:4c14:aa01::/39": "267348", - "2a02:26f7:d541::/46": "20940", - "2804:2050:facf::/37": "264485", - "2804:5fc4::/32": "269122", - "2804:6274::/32": "269298", - "2806:230:200a::/48": "265594", - "2a02:26f7:f0c8::/48": "36183", - "2405:4cc1:e00::/40": "38794", - "2407:b000:4011::/48": "45682", - "2408:8957:4600::/40": "17622", - "2409:8924:c700::/30": "56046", - "2605:7280:7::/32": "54600", - "2804:604::/32": "262560", - "2a00:79e0:102::/37": "45566", - "2a02:68a0::/32": "201906", - "2a00:f440:a::/48": "29588", - "2a01:9700:1084::/46": "8376", - "2a02:26f7:e2c1::/46": "20940", - "2a0c:4144:100::/48": "25091", - "2a11:6800:1::/48": "204957", - "240a:a20e::/32": "143176", - "2804:6f0::/36": "53047", - "2001:559:324::/48": "33491", - "2800:160:11b5::/41": "14259", - "2a03:8c60::/46": "51920", - "2a0d:f600::/29": "202277", - "2804:1e20:10::/46": "264409", - "2806:260:4::/48": "13999", - "2a00:1378::/32": "8513", - "2a02:26f7:d6c0::/47": "36183", - "2001:559:c2c2::/48": "13367", - "2401:d800:79c0::/42": "7552", - "240a:a8fa::/32": "144948", - "2804:90c:7000::/48": "262617", - "2a0d:ac00:dc01::/48": "205202", - "2001:400:8823::/48": "291", - "240e:fb::/33": "4134", - "240e:3bb:7600::/39": "140313", - "240e:473:450::/39": "4134", - "2600:1f70:8000::/40": "14618", - "2a03:5540::/32": "61343", - "2001:559:280::/48": "21508", - "2607:da00:190::/36": "15164", - "2620:11c:d000::/47": "63161", - "2803:3b80:3000::/36": "263702", - "2c0f:f308::/32": "37223", - "2001:918:ff3f::/41": "3303", - "2804:2e8:3::/45": "262847", - "2804:719c::/32": "270800", - "2a02:26f0:d601::/40": "20940", - "2406:f400:b0::/44": "38001", - "2605:c900::/32": "26223", - "2607:fb10:7100::/43": "2906", - "2620:11c:f00d::/48": "393667", - "2804:4d90::/32": "268205", - "2001:67c:2464::/48": "39022", - "2607:fa40:2::/48": "6649", - "2804:14d:ba49::/43": "28573", - "2a00:1800::/32": "57728", - "2001:1260:10::/39": "13591", - "240a:a55b::/32": "144021", - "2600:1401:3::/45": "20940", - "2804:46e4::/32": "267018", - "2804:5110::/39": "268428", - "240a:a38a::/32": "143556", - "240e:3bd:8200::/35": "140316", - "2620:0:2a0c::/48": "40344", - "2620:62:4000::/46": "30045", - "2a07:3500:1778::/48": "34373", - "2a0f:85c1:40::/47": "212149", - "2408:8459:b830::/41": "17622", - "240a:a838::/32": "144754", - "2604:3400:ac01::/48": "209453", - "2001:978::/46": "174", - "2001:4958::/32": "577", - "2405:4f00::/32": "132432", - "2804:4c14:8b01::/35": "267348", - "2804:7b88::/32": "271437", - "2400:8800:4082::/39": "3491", - "2402:800:557f::/40": "7552", - "2403:8940:5::/44": "135817", - "2406:f400:100::/44": "38001", - "240a:ab61::/32": "145563", - "2606:2800:647::/48": "15133", - "2620:171:f00::/45": "42", - "2001:67c:614::/48": "50157", - "2801:80:2250::/47": "267626", - "2a05:1580:10::/46": "59874", - "2001:2e8::/32": "10013", - "2001:559:8474::/47": "7922", - "2001:67c:2088::/48": "20902", - "2001:c20:48a7::/44": "3758", - "2001:fd8:b2b0::/44": "4775", - "2a0a:51c0::/32": "31400", - "240a:a8e3::/32": "144925", - "2603:c010:2000::/36": "31898", - "2804:44c:e001::/35": "262761", - "2a05:3f40::/29": "60781", - "2001:559:84d4::/48": "33659", - "2001:df6:bd00::/48": "138069", - "240e:3b8:c800::/37": "4134", - "2600:1415:b801::/33": "20940", - "2606:6200:1c00::/48": "54351", - "2c0f:1000::/32": "328767", - "2a0e:97c5:468::/46": "20473", - "2001:559:c2aa::/48": "33651", - "2001:57a:1204::/47": "22773", - "240a:a222::/32": "143196", - "240e:473:3a00::/41": "140485", - "2804:46f0::/42": "267021", - "2a01:ab40::/29": "62275", - "2a02:29e0:108::/47": "49367", - "2001:4b99:1::/48": "203476", - "240a:40aa:c000::/35": "58834", - "2806:103e:10::/48": "8151", - "2408:8957:8300::/40": "17816", - "240a:a3cb::/32": "143621", - "2606:2d40::/32": "1239", - "2804:e94:1b8::/41": "262468", - "2402:3a80:f00::/35": "38266", - "2600:c0e::/34": "13789", - "2a01:a7c0::/32": "199606", - "2a02:26f7:d544::/48": "36183", - "2401:ff80:1483::/45": "133954", - "2405:1c0:6451::/46": "135062", - "240a:aebb::/32": "146421", - "2a02:da8::/32": "39906", - "2a0a:d6c0:134::/47": "208650", - "240a:afb5::/32": "146671", - "2600:1417:66::/47": "24319", - "2600:1fa0:c020::/44": "16509", - "2a00:8841::/32": "12365", - "2a06:6a00::/29": "20493", - "2001:559:83d0::/48": "33652", - "2620:4a::/48": "25739", - "2804:2480::/34": "264227", - "2001:67c:33c::/48": "5464", - "2401:ce80::/36": "14340", - "2602:fe0e::/36": "394378", - "2603:c0e8:2910::/40": "1218", - "2804:6030::/32": "269151", - "2408:8256:3c81::/43": "17623", - "240a:a15f::/32": "143001", - "2607:fe98::/32": "10947", - "2804:6260::/32": "269293", - "2a0e:1c80:f::/48": "3399", - "2a0f:2780::/29": "47362", - "2001:43c8::/32": "20928", - "2001:4de0:3005::/39": "33438", - "2a02:26f7:b748::/48": "36183", - "240a:a89d::/32": "144855", - "2607:fc88:100f::/32": "30475", - "2804:3fd8:8001::/33": "265919", - "2a06:e6c0::/29": "203143", - "2605:9d80:8011::/48": "4134", - "2a00:1d80::/32": "6789", - "2a02:6f00::/36": "197692", - "2001:559:7a0::/48": "33661", - "2001:678:74::/48": "55195", - "2001:1248:8409::/43": "11172", - "2402:5300:4110::/38": "45903", - "240e:c:6000::/37": "141771", - "2a01:758:1::/32": "3326", - "2a02:26f7:c35e::/42": "20940", - "2a0f:1ac0::/29": "60262", - "2405:7f00:b1a0::/33": "133414", - "2407:0:0:4::/64": "65066", - "2409:8750:900::/38": "56047", - "2606:e280::/32": "46687", - "2804:206c::/32": "264490", - "2a06:6a40::/29": "203924", - "2a0e:aa06:460::/44": "209215", - "240a:a5b0::/32": "144106", - "240a:a9a0::/32": "145114", - "2800:160:1e11::/46": "14259", - "2408:8956:4d00::/40": "17816", - "2409:800b:2904::/47": "9808", - "240a:a88c::/32": "144838", - "2605:32c0::/37": "5670", - "2620:12f:2080::/41": "32726", - "2803:4480:7000::/36": "263189", - "2001:67c:704::/48": "25522", - "2400:6280:12d::/48": "132280", - "240a:ac49::/32": "145795", - "2606:f100:9000::/33": "3300", - "2607:f0d0:6:1::/35": "36351", - "2a02:2b10::/32": "24992", - "2620:149:fa::/45": "714", - "2800:160:157a::/40": "14259", - "2804:104c:2000::/40": "263629", - "2804:7940::/32": "271294", - "2a02:ea80::/32": "52195", - "2a05:4200:4::/47": "21534", - "2a0b:4581::/48": "16509", - "2408:8459:8430::/41": "17622", - "2606:2800:4a8c::/48": "15133", - "2620:9a:e000::/48": "399879", - "2804:7f74::/32": "271689", - "2a00:65c0:2::/32": "25156", - "2409:8e15:8000::/35": "56044", - "2a02:e90::/32": "15389", - "2404:b0:2002::/32": "4750", - "2406:840:f990::/44": "208618", - "2620:0:b60::/48": "17204", - "2804:3090::/32": "264961", - "2804:7650::/32": "271103", - "2a04:6d40::/47": "197888", - "2001:b08:f::/43": "3267", - "2402:800:5d55::/42": "7552", - "2600:1408:c401::/38": "20940", - "2c0f:e818::/32": "328475", - "2001:559:c3f1::/48": "33659", - "2001:978:2202:1::/47": "174", - "2001:df5:b380::/48": "139559", - "2605:6ac0:4000::/36": "32751", - "2607:2a00:2::/48": "3584", - "2a0d:40c0:8100::/33": "203448", - "2001:df4:6180::/48": "132515", - "240a:ad41::/32": "146043", - "2600:6c2e:125::/37": "20115", - "2804:4358::/32": "267564", - "2001:559:81ed::/48": "33668", - "2001:dc7:dd02::/45": "24151", - "240e:e1:c300::/35": "4812", - "2a0d:77c7:88e3::/33": "7489", - "2602:feb4:10::/42": "25961", - "2801:80:2360::/47": "267310", - "2803:6320::/32": "264825", - "2a02:16e8::/32": "31376", - "2001:559:207::/48": "33652", - "2401:c500:fd02::/48": "54994", - "2600:140f:d000::/48": "9498", - "2001:559:83b0::/48": "33659", - "2001:c20:48a3::/48": "3758", - "2404:3d00:414c::/47": "21433", - "2602:fed5:5::/36": "27398", - "2610:a1:1071::/48": "397228", - "2800:160:1531::/41": "14259", - "2804:6580::/32": "269495", - "2a01:9500::/40": "197696", - "2402:800:57a9::/43": "7552", - "2409:8924:c100::/38": "56046", - "2409:8c85:aa0c::/48": "56042", - "2409:8c85:aa4d::/43": "9808", - "2606:5000:a00::/39": "209", - "2620:11b:e0bf::/41": "3356", - "2800:160:228c::/39": "14259", - "2a02:458::/32": "25182", - "2402:6f40::/48": "45079", - "240e:108:1171::/46": "139201", - "2603:c0f1::/36": "6142", - "2607:fc48:c40::/48": "40009", - "2804:74a4::/32": "270994", - "2806:2f0:4024::/41": "17072", - "2a0c:b641:16b::/45": "211139", - "240a:a4ae::/32": "143848", - "2605:c000::/32": "7393", - "2a02:2e02:c40::/43": "12479", - "2a05:26c0::/40": "201536", - "2a10:8640::/32": "198525", - "2001:57a:102::/47": "26008", - "2402:600::/35": "38515", - "240e:f9:c000::/30": "134774", - "2605:1bc0::/32": "16400", - "2606:4a00:1100::/40": "18572", - "2a00:1288:efc2::/47": "10310", - "2a03:1e80:f801::/48": "8767", - "2001:67c:13f4::/48": "3246", - "2a02:2e02:1af0::/39": "12479", - "240a:af65::/32": "146591", - "2806:230:4001::/48": "11888", - "2a01:47c2::/32": "12301", - "2806:230:300b::/48": "11888", - "2a02:21a8::/47": "61323", - "2a02:26f0:1701::/40": "20940", - "2a02:dc00:202::/48": "15493", - "2001:559:855d::/46": "7015", - "2406:d500:6::/48": "136557", - "2409:4051:3000::/33": "55836", - "2602:fe21::/36": "394304", - "2804:4508::/32": "267668", - "2a00:f120::/32": "200026", - "2001:fd0:2401::/35": "10029", - "2402:800:b890::/42": "7552", - "240a:a2eb::/32": "143397", - "2804:472c::/32": "269236", - "2a02:26f7:c3d1::/46": "20940", - "2a03:ae60:8::/32": "202847", - "2407:7700::/32": "132354", - "2a02:1758::/29": "39781", - "2a02:26f7:da44::/48": "36183", - "2a04:f580:9010::/48": "4809", - "2001:559:c0ff::/48": "33660", - "2406:daa0:c020::/44": "16509", - "2a00:1b78::/32": "39087", - "2a02:502::/32": "5538", - "2001:559:8113::/45": "7922", - "2604:87c0::/32": "32267", - "2620:1ec:8f1::/45": "8075", - "2804:868::/34": "28649", - "2a00:1d58::/34": "47524", - "2804:7c58::/32": "271490", - "2a00:e400::/29": "35258", - "2001:559:c225::/48": "33491", - "2605:f440:bef0::/33": "54874", - "2804:564::/32": "20044", - "2a00:12e8::/32": "29014", - "2a02:26f7:e348::/48": "36183", - "2001:67c:2ee4::/48": "28773", - "2408:8957:6c00::/40": "17622", - "2804:64b0:4000::/36": "269442", - "2a02:26f7:f90d::/42": "20940", - "2a06:98c1:55::/46": "13335", - "2a0a:5940::/48": "207080", - "2001:559:86ae::/48": "7922", - "2001:c20:4887::/48": "9255", - "2a01:c50f:1200::/37": "12479", - "2a03:db80:5465::/32": "680", - "2a0d:2904::/44": "205651", - "2001:df3:bc00::/48": "59113", - "2001:1248:5a2b::/45": "11172", - "2402:800:391d::/42": "7552", - "2604:c0c0::/35": "14525", - "2606:2800:4a9c::/46": "15133", - "2607:5600::/32": "31863", - "2001:dd8:25::/48": "45494", - "2406:b700::/32": "58504", - "2602:fcef::/41": "398984", - "2602:ffc5:103::/48": "7489", - "2800:c30:ad00::/40": "265705", - "2001:559:83a6::/48": "33660", - "2401:d800:be90::/42": "7552", - "2408:8456:ef00::/42": "17622", - "2409:8061:1100::/36": "9808", - "2602:ff93:5000::/36": "26968", - "2a06:c080::/29": "60111", - "2803:9100::/32": "52409", - "2804:2144:3::/39": "52795", - "2804:4fec::/32": "268358", - "2a06:d00::/29": "200689", - "2804:52dc::/32": "268546", - "2a00:4180:1::/46": "56665", - "2a01:b740:a26::/48": "6185", - "2001:1248:5900::/43": "11172", - "2602:ffc5:35::/41": "7489", - "2804:14d:6800::/40": "28573", - "2a06:1287:30::/44": "203909", - "2408:8459:cf30::/41": "17622", - "2a05:1c40::/29": "203208", - "2001:559:c1fa::/48": "7015", - "2001:678:ddc::/48": "212989", - "240a:a195::/32": "143055", - "2602:ff7a:fef::/32": "394144", - "2a02:26f7:f805::/46": "20940", - "2a03:5640:f227::/37": "2906", - "2001:67c:137c::/48": "49638", - "2402:e280:2167::/44": "134674", - "2409:8e28::/29": "56041", - "2606:2800:4ad4::/46": "15133", - "2620:4e:4000::/48": "18472", - "2a0f:e6c0:a::/48": "60781", - "2a10:9902:730::/46": "211972", - "2001:559:1c8::/48": "7725", - "2001:579:1c08::/42": "22773", - "2405:68c0:21::/48": "139179", - "2408:84f3:ea40::/35": "17816", - "240a:a4df::/32": "143897", - "2600:40fc:1004::/44": "701", - "2600:1001:b1d0::/44": "6167", - "2801:80:2540::/48": "268558", - "2001:400:6411::/41": "293", - "2001:4c50::/32": "35244", - "2600:6c7f:9030::/48": "20115", - "2607:fdb8:2::/47": "30496", - "2c0f:f780::/32": "327805", - "2001:1248:5abe::/41": "11172", - "2a02:26f7:b948::/48": "36183", - "2a02:26f7:e240::/48": "36183", - "2a09:5080::/48": "42652", - "2a0a:a140::/48": "206446", - "2001:559:27c::/47": "33652", - "2401:d800:de10::/42": "7552", - "2801:80:37c0::/48": "269560", - "2804:3dc8::/32": "266553", - "2804:82bc::/32": "272537", - "2a03:d9c0:c0de::/48": "3214", - "2806:2f0:50c1::/42": "17072", - "2a00:9801:e002::/35": "51178", - "2001:df0:95::/48": "7667", - "2402:3780:2::/47": "132789", - "2408:8459:7250::/37": "17816", - "2a02:26f7:bc::/48": "36183", - "2a04:9f80::/29": "5432", - "2408:8456:7a40::/39": "17816", - "2403:2c00::/45": "4058", - "2403:cfc0:1000::/46": "135134", - "2607:a680::/45": "395092", - "2620:1e0:ffff::/48": "14145", - "2001:480:630::/48": "84", - "2001:559:80a4::/48": "33659", - "2600:6c38:e3b::/45": "20115", - "2a00:dd80:10::/48": "36236", - "2001:559:5b1::/48": "22909", - "2001:579:d124::/41": "22773", - "2001:43f8:1430::/48": "37520", - "2804:16f8::/32": "263111", - "2a06:d500::/29": "51184", - "2a0e:bb40::/48": "51013", - "2c0e:2208::/30": "37457", - "240e:108:86::/48": "136195", - "2804:2270::/32": "264100", - "2a02:26f7:cb81::/46": "20940", - "2a0d:2683::/36": "207268", - "2a00:1e70::/32": "50858", - "2a0a:adc0::/47": "50705", - "2001:fd8:3002::/47": "132199", - "2407:3e00:c000::/48": "24075", - "2409:8078:100::/35": "9808", - "2409:8924:3300::/37": "56046", - "2620:0:f02::/41": "6431", - "2804:55bc::/32": "267953", - "2804:72b0::/32": "270869", - "2001:500:15::/48": "715", - "2406:2a40::/32": "140734", - "240a:aeda::/32": "146452", - "2620:12b:d005::/46": "35873", - "2620:171:5d::/48": "42", - "2a00:1e68:113::/31": "42861", - "2a0c:9a40:1008::/47": "34927", - "2620:113:8000::/41": "3680", - "2a01:7d00::/32": "15450", - "2001:1490:101::/46": "8895", - "2401:3bc0:100c::/32": "137409", - "2409:8c28:a2c1::/39": "56041", - "240a:af74::/32": "146606", - "2607:3180:2::/32": "14877", - "2a02:26f7:bb48::/48": "36183", - "2a05:a000:3::/29": "44322", - "2001:4878:4321::/45": "12222", - "2804:14d:a000::/40": "28573", - "2804:5a30:8000::/36": "268754", - "2a0e:c80:403::/48": "40676", - "2a0b:bb40::/32": "28725", - "2001:559:c226::/48": "7922", - "2001:67c:21f8::/48": "34964", - "2001:44b8:30d8::/46": "7545", - "2400:a980:a100::/29": "133111", - "2602:fe19::/43": "26073", - "2620:c:4000::/48": "14834", - "2a02:50c0::/40": "29355", - "2402:c800:fff7::/48": "38639", - "2409:8054::/31": "56040", - "2606:1a40:2012::/47": "42473", - "2804:8080::/32": "271754", - "2a02:26f7:f3c5::/46": "20940", - "2607:cc80::/35": "25664", - "2620:0:1605::/48": "6984", - "2605:72c0:a000::/36": "396865", - "2800:4d0:2490::/44": "52489", - "2804:4594::/32": "266936", - "2a0b:20c0:3000::/32": "205766", - "2001:559:59e::/48": "7725", - "2001:559:8693::/48": "7015", - "2800:160:10b2::/41": "14259", - "2a07:e380::/29": "203561", - "2001:1930:7c08::/48": "11985", - "2800:484:6100::/37": "14080", - "2800:680:11::/48": "263719", - "2a0e:8780::/29": "60262", - "2600:6c38:e3::/45": "20115", - "2801:140:49::/48": "262249", - "2a01:5040:2021::/36": "43996", - "2a02:2528::/34": "25091", - "2001:559:514::/48": "20214", - "2801:0:180::/48": "19429", - "2a0a:da40::/29": "8553", - "2001:b28:f23d::/48": "59930", - "240e:980:4100::/40": "4811", - "2800:200:bd50::/33": "12252", - "2a03:f80:47::/44": "9009", - "2a0c:3080::/48": "204809", - "2a0f:efc1::/32": "42160", - "2001:559:80bf::/48": "33652", - "240a:aacb::/32": "145413", - "2605:a900:4806::/47": "46887", - "2801:80:23d0::/48": "268203", - "2001:1248:a61e::/41": "11172", - "2408:840c:1a00::/40": "17621", - "2605:82c0::/32": "6954", - "2a0c:9e40:1::/46": "60781", - "2402:1500::/33": "4819", - "2404:f4c0:facf::/48": "142284", - "2a00:e900::/29": "41175", - "2401:ff80:110f::/43": "133954", - "2a0f:8444::/32": "16262", - "2c0f:fc89:e1::/39": "36992", - "2602:fd6f:aaa::/45": "18526", - "2605:9880::/38": "23470", - "2607:e400:2908::/32": "7459", - "2a03:7380:1e80::/42": "13188", - "2001:559:82a6::/47": "7922", - "2401:b0c0:1000::/43": "136941", - "2800:400::/46": "27668", - "2800:be0:3e8::/37": "267848", - "2804:2f5c::/32": "264886", - "2a02:26f7:f104::/48": "36183", - "2a0f:b9c1:104::/44": "207574", - "2402:7ac0::/32": "137316", - "2409:801e::/34": "24400", - "2606:4f00:2::/48": "19324", - "2804:22fc::/32": "52612", - "2408:8256:2f60::/44": "17623", - "2804:1648::/32": "263278", - "2a00:1a60::/32": "15826", - "2a05:f507:45::/48": "13443", - "2001:550:b701::/36": "174", - "2001:559:12b::/48": "33654", - "2602:ff12::/36": "62529", - "2800:bf0:80e8::/45": "52257", - "2804:1e48:9004::/33": "4809", - "2a0b:b7c0::/29": "57717", - "2a0e:b107:6e9::/48": "60998", - "2402:800:53e0::/44": "7552", - "2a0a:1000::/29": "31507", - "2a0f:1e00::/29": "60781", - "2001:67c:24e8::/47": "47749", - "2001:2010::/30": "3308", - "2001:4410:2004::/43": "132040", - "2406:da11::/36": "16509", - "2a02:ac80:f1::/39": "25145", - "2a0a:73c0::/29": "207006", - "2803:cae0::/48": "270046", - "2804:809c::/32": "271762", - "2a03:522::/32": "201419", - "2001:468:c08::/45": "10886", - "2001:502:8c25::/48": "7342", - "2804:1478::/32": "263332", - "2a0a:9e00:a::/47": "61317", - "2001:559:847e::/48": "33657", - "2001:678:920::/48": "209487", - "2001:67c:2f84::/48": "44496", - "2001:6a8:be01::/33": "2611", - "2600:1014:b070::/40": "22394", - "2606:2800:400c::/48": "15133", - "2803:5c80:5034::/48": "64114", - "2604:d600:108c::/39": "32098", - "2804:5284::/46": "268523", - "2a02:fa8:8800::/40": "41041", - "2001:48c8:8::/43": "29791", - "2804:27b0::/32": "263917", - "2a01:e09::/32": "29447", - "2a0c:9b40::/29": "202499", - "2001:550:3c01::/39": "174", - "2800:160:111a::/42": "14259", - "2804:14c:5ba5::/41": "28573", - "2a05:7a80::/29": "204269", - "2a0f:7680::/29": "42316", - "2001:4488:fd62::/38": "7713", - "2a02:26f7:c604::/48": "36183", - "2a0a:90c0:104d::/43": "205080", - "2c0f:eb90::/32": "327892", - "2001:128c::/37": "25933", - "2401:d800:f170::/40": "7552", - "2600:1480:7800::/48": "21342", - "2803:1a80::/32": "28317", - "2a04:ff00:501::/40": "206607", - "2a09:97c0::/48": "34775", - "2001:fd8:3330::/44": "4775", - "2600:140f:e001::/38": "20940", - "2607:f928:13::/45": "22645", - "2804:650::/32": "262558", - "2001:559:859b::/48": "7015", - "2408:8456:de40::/34": "17816", - "2603:c0ee::/35": "54253", - "2605:f500::/39": "1828", - "2800:440:8040::/47": "27738", - "2804:28e4::/43": "28260", - "2407:500::/45": "58940", - "240a:a9d3::/32": "145165", - "2604:11c0:400::/40": "395822", - "2801:80:1340::/48": "264029", - "2a02:26f7:b989::/48": "20940", - "2a09:bd00:ffbc::/48": "42385", - "2605:9780:40::/48": "393544", - "2a02:1720::/32": "197219", - "2a0d:fd40:57::/29": "14630", - "2406:840:44::/47": "139317", - "240e:13:7800::/29": "4134", - "2605:6400:4000::/32": "53667", - "2610:20:8060::/45": "3477", - "2800:68:1aa6::/32": "61468", - "2a02:26f7:e200::/48": "36183", - "2a03:2881:10::/33": "32934", - "2408:8256:3271::/48": "17623", - "2803:a040::/39": "263750", - "2a0c:b641:780::/44": "207301", - "2806:2f0:1021::/46": "22884", - "2403:b9c0::/48": "131636", - "2607:f038:4016::/34": "21527", - "2400:7400:4b::/43": "38044", - "2401:1d40:2f00::/48": "4811", - "2602:fcbc::/48": "14618", - "2804:2018::/32": "264464", - "2804:6ab0::/32": "270353", - "2a03:8fa0::/36": "35258", - "2a09:3dc0::/29": "209439", - "2a0a:b680::/29": "51815", - "2400:e800:1000::/36": "17564", - "2401:4900:33a0::/41": "45609", - "2407:9440:42::/43": "141626", - "240a:ad2f::/32": "146025", - "2803:5260::/32": "267870", - "2a00:1410::/32": "39264", - "2a02:b28::/29": "42605", - "2a0d:8d07::/32": "44103", - "2001:559:c12b::/48": "7922", - "2400:300:9::/48": "4766", - "2606:7380::/32": "11763", - "2803:7000:9000::/33": "52362", - "2409:8914:f00::/35": "56044", - "2604:5500:5000::/38": "19165", - "2606:2800:422c::/48": "15133", - "2803:7140::/32": "264639", - "2a0b:6b84::/35": "200639", - "2a0d:9a80:100::/38": "49959", - "2001:388:30::/48": "137188", - "2001:44b8:4034::/47": "7545", - "2402:7b40::/32": "132894", - "2401:4900:2ec0::/39": "45609", - "240a:afa0::/32": "146650", - "2804:6558::/32": "269484", - "2a03:bdc0::/32": "30781", - "2a0f:9200::/31": "45009", - "2409:8000:800::/40": "56048", - "240a:a711::/32": "144459", - "2604:f740::/32": "397041", - "2600:6000:feb4::/39": "12271", - "2620:12:6000::/48": "174", - "2a02:2ad8:120::/33": "702", - "2c0f:fa58::/32": "37356", - "2001:678:7c::/48": "51955", - "2600:1408:8::/46": "20940", - "2001:1248:709c::/42": "11172", - "2001:67c:2318::/48": "57057", - "240a:a562::/32": "144028", - "2804:6138::/32": "269221", - "2a00:86c0:2008::/47": "40027", - "2a06:8200::/32": "208355", - "2a0b:4d07:201::/46": "44239", - "2a01:320::/29": "31252", - "2001:559:317::/48": "33489", - "2001:559:8142::/48": "33491", - "2001:559:8223::/48": "33287", - "2001:559:c38e::/48": "7922", - "2001:4998:efeb::/48": "36646", - "2600:400:1810::/34": "15147", - "2804:2a5c::/32": "264071", - "2c0f:ef98::/32": "328359", - "2001:559:c01c::/48": "33657", - "2001:4160::/32": "8586", - "2408:8459:c850::/39": "17816", - "2620:13f:5000::/48": "397592", - "2a0b:4340:93::/48": "205610", - "2a10:a00::/32": "209208", - "240a:3:bcc::/48": "9605", - "2800:160:1bc9::/43": "14259", - "2402:800:562b::/41": "7552", - "2402:800:7720::/41": "7552", - "2409:8000:5b00::/40": "9808", - "2804:54d0::/32": "268671", - "2a0b:1040::/29": "50582", - "2001:67c:2db8::/48": "39798", - "2405:200:b00::/31": "55836", - "2600:1417:c001::/36": "20940", - "2804:fe0:24a0::/44": "263049", - "2a02:26f7:c895::/42": "20940", - "2001:b28:f23f::/48": "62014", - "2408:8459:6030::/41": "17622", - "2600:6c29::/30": "20115", - "2a0e:b105:5f8::/38": "20473", - "2001:67c:15e0::/48": "50360", - "2605:9000::/32": "10929", - "2804:5320::/32": "268565", - "2a02:c500::/31": "199246", - "2001:1998:6f0::/44": "16787", - "2600:1007:f110::/36": "22394", - "2804:908::/36": "263047", - "2a05:6c0::/36": "203043", - "2402:8100:20c3::/45": "45271", - "240a:a189::/32": "143043", - "2600:1002:d050::/34": "22394", - "2607:6d00::/32": "1798", - "2a00:4802:ab0::/41": "13124", - "2a0e:b107:9f0::/44": "208958", - "2406:840:e11a::/48": "141712", - "2600:1004:d000::/42": "6167", - "2602:210::/32": "11290", - "2602:febc::/36": "398491", - "2804:b0c:f003::/36": "52935", - "2a00:1718::/32": "25176", - "2a02:26f7:f489::/42": "20940", - "2001:bf0:41::/42": "12732", - "2a0e:6080::/48": "212745", - "2001:1698::/32": "34683", - "2801:f0:16::/48": "263134", - "2a03:aa80::/32": "48479", - "240a:a639::/32": "144243", - "2606:b400:8804::/48": "7160", - "2620:10f:b000::/48": "4185", - "2804:6a04::/41": "270306", - "2804:4790::/32": "267062", - "2a03:c2c0::/32": "61205", - "2a05:1c00::/29": "6718", - "2a0d:f302::/32": "40994", - "2408:8956:7d00::/40": "17816", - "2605:a5c0::/32": "54161", - "2804:49c:4203::/48": "7162", - "2a05:b2c0::/31": "12859", - "2401:5800::/32": "24481", - "2803:f960::/32": "269749", - "2804:41b4:5000::/32": "267451", - "2a03:a420::/32": "51007", - "2a0c:b641:1d0::/48": "211227", - "2001:559:772::/48": "7016", - "2801:80:37f0::/48": "269607", - "2804:10c0::/32": "263647", - "2a0e:46c4:2c3e::/47": "142597", - "2600:6c7f:9002::/48": "20115", - "2605:4680::/32": "54665", - "2620:57:4000::/46": "62831", - "2a00:1ed8::/29": "41073", - "2401:d800:2f40::/42": "7552", - "2408:8956:e800::/40": "17622", - "240e:980:2c01::/40": "4134", - "2600:140f:ac01::/38": "20940", - "2604:5e80::/43": "8", - "2a00:be00::/32": "29226", - "2a03:c940::/32": "52142", - "2804:3298::/32": "265087", - "2804:4bf0::/32": "61590", - "2804:75c0::/32": "271067", - "2001:428:4407::/48": "706", - "2001:978:5300:1::/47": "174", - "2001:1838:5002::/48": "13331", - "2402:800:347f::/40": "7552", - "2405:9800:d007::/48": "133848", - "240e:27f::/48": "134773", - "2a03:29c0:c000::/34": "61189", - "2001:df2:f980::/48": "17439", - "2001:e68:20db:12::/32": "4788", - "2804:3b48::/32": "52591", - "2a0e:c680::/32": "208654", - "2400:6280:11e::/48": "132280", - "2401:d800:d340::/42": "7552", - "2408:8459:2e10::/44": "17623", - "2605:4c0::/32": "6939", - "2620:1e:8000::/48": "26135", - "2804:451c::/32": "267673", - "2a0d:82c0::/31": "47787", - "2001:559:8148::/48": "20214", - "2a02:27a9::/32": "21100", - "2a0c:a340::/29": "50673", - "2403:4540::/32": "137991", - "2406:5e00::/47": "38456", - "2408:8956:6400::/40": "17622", - "2a0b:ddc0::/29": "59970", - "2001:16a2:4700::/36": "39386", - "2a04:a240::/29": "61351", - "2a0d:2902:caf9::/45": "204185", - "2404:7e80:3000::/48": "132717", - "2801:0:190::/48": "264630", - "2a07:fe00::/29": "3214", - "2408:8206:a840::/31": "4808", - "240a:a9b2::/32": "145132", - "2610:1c1:2::/32": "11403", - "2a02:26f7:da0c::/48": "36183", - "2001:418:149e::/36": "2914", - "2001:13c7:6009::/48": "52332", - "2001:559:870b::/48": "7922", - "2801:80:3540::/48": "268850", - "2804:1324::/32": "263518", - "2a0b:4342:1a32::/44": "57695", - "2001:559:82b1::/48": "33668", - "2401:ff80:140b::/45": "133954", - "2800:110:10::/48": "42", - "2806:20d:5025::/44": "32098", - "2a00:b2c0:fade::/48": "2611", - "2a01:280:338::/48": "42303", - "2a0a:f640::/32": "213155", - "2405:203:888::/43": "55836", - "2405:a100:10::/41": "131283", - "2600:1404:27::/44": "20940", - "2604:99c0::/32": "397790", - "2001:559:1c7::/48": "33287", - "2409:8002:1800::/40": "38019", - "2600:6c38:245::/43": "20115", - "2803:f0c0::/32": "264773", - "2a01:8840:29::/48": "207266", - "2a02:26f7:4f::/48": "20940", - "2001:559:84b6::/48": "33656", - "2408:8459:4010::/42": "17623", - "240a:a6bb::/32": "144373", - "2804:6c38::/32": "270453", - "2a00:4b00:22d::/48": "136772", - "2408:8459:cc10::/42": "17623", - "240e:967:e400::/39": "133775", - "2800:160:1336::/44": "14259", - "2a02:6a00::/32": "25276", - "240a:a484::/32": "143806", - "2607:fcd0:fa80:2118::/62": "8100", - "2620:123:9002::/45": "394976", - "2803:4600:2000::/32": "14754", - "2a0e:b107:fe0::/44": "138435", - "2402:e400::/32": "4851", - "2804:5be0::/32": "268874", - "2001:4878:2151::/48": "12222", - "2408:80fa:4000::/34": "17816", - "2409:8904:a640::/39": "24547", - "2600:1417:2001::/36": "20940", - "2806:230:1006::/48": "265594", - "2a0e:c640::/29": "208386", - "2001:67c:58c::/48": "212801", - "2001:1248:98b4::/48": "11172", - "2001:4070:8000::/33": "12831", - "2800:160:117f::/40": "14259", - "2804:5a14::/32": "268747", - "2a00:54e0::/32": "199324", - "2001:ac0:c801::/34": "8903", - "2a02:2808:2601::/48": "35165", - "2001:559:4c2::/48": "7015", - "2405:7f80::/32": "137510", - "2600:380:2900::/35": "20057", - "2620:64::/48": "36811", - "2a0d:4300::/47": "204920", - "2600:140f:2401::/39": "20940", - "2804:10a0::/40": "28173", - "2806:2f0:2043::/48": "17072", - "2a02:26f7:1d::/48": "20940", - "2001:1b70:a1::/48": "158", - "2001:43f8:1000::/48": "328739", - "240a:ab1a::/32": "145492", - "2a02:26f7:dc8d::/42": "20940", - "2a03:e580::/32": "49282", - "2a10:fc80::/29": "47447", - "2401:d800:7870::/40": "7552", - "2600:1409:4801::/35": "20940", - "2a04:9a00:104e::/47": "212157", - "2001:67c:1050::/48": "58130", - "2408:8756:3af3::/33": "17816", - "2604:cfc0::/32": "40209", - "2406:3540:ffec::/46": "18041", - "240a:aad4::/32": "145422", - "240e:1f:8001::/48": "58543", - "240e:40:14::/48": "139767", - "2602:fd7d::/47": "16925", - "2a03:d280::/32": "197133", - "2a07:8500::/32": "1104", - "2408:8459:1b50::/37": "17816", - "240a:a5c9::/32": "144131", - "2602:fed2:770c::/46": "53356", - "2607:3200::/43": "11240", - "2a10:2a80:1ab::/48": "207727", - "2a10:5f00::/29": "398559", - "2a02:b8:234::/32": "25273", - "2a04:9a00:1114::/48": "198730", - "2a0f:93c0::/29": "62240", - "2405:1a00::/32": "24492", - "2408:8957:f140::/40": "17816", - "2602:200::/32": "7992", - "2804:736c::/32": "270914", - "2a02:2e02:1270::/40": "12479", - "2607:f038:400d::/43": "21527", - "2a00:6400::/32": "197558", - "2a02:26f7:d540::/48": "36183", - "2001:559:179::/46": "7922", - "2602:fd7d:20::/39": "16925", - "2605:1980:401::/48": "13767", - "2804:7b4::/32": "262314", - "2001:480:501::/48": "37", - "2001:4de0:2106::/47": "26769", - "240a:afa2::/32": "146652", - "2600:1900:4040::/44": "396982", - "2806:2f0:71a1::/41": "17072", - "240e:980:9600::/40": "58542", - "2804:433c::/32": "267557", - "2a0f:9980:195::/48": "40676", - "2a0e:d340::/48": "48345", - "2409:8c44:1b00::/48": "9808", - "2803:9800:a039::/40": "11664", - "2a02:26f7:e984::/48": "36183", - "2a02:d500::/29": "48596", - "2a05:3343::/46": "36351", - "2a07:3740::/29": "47132", - "2a0d:5080::/31": "62240", - "2806:230:2031::/48": "11888", - "2a02:bc8::/42": "8641", - "2402:e280:2159::/46": "134674", - "240e:3ba:dc00::/34": "4134", - "240e:698:4500::/40": "58461", - "2620:0:2e50::/44": "15088", - "2001:559:8379::/48": "33287", - "240e:3b0:f100::/36": "4134", - "2a02:26f7:c6c6::/47": "20940", - "2401:1c00:5100::/34": "38809", - "2a00:ece1:2::/48": "43474", - "2a02:26f7:de00::/48": "36183", - "2a02:26f7:f9c4::/48": "36183", - "2a02:ed04:4410::/39": "50304", - "2001:559:8168::/48": "33662", - "240a:a149::/32": "142979", - "240a:ad4f::/32": "146057", - "240e:40:d::/43": "4134", - "2605:a404:210::/45": "33363", - "2804:df4:9001::/33": "52531", - "2a01:41c0::/32": "199092", - "2400:6280:147::/48": "132280", - "2607:da00:802::/32": "15164", - "2a02:45c0:7::/43": "59675", - "2001:448a:3070::/33": "7713", - "240a:af3c::/32": "146550", - "2803:c180::/32": "52341", - "2a07:1b80::/40": "42473", - "2620:58:4c00::/48": "6122", - "2804:7ae8::/45": "271399", - "2a02:26f7:f8c4::/48": "36183", - "2a07:8180::/29": "202680", - "240a:a9b3::/32": "145133", - "2600:1006:f150::/31": "22394", - "2001:253:114::/48": "142080", - "240a:af56::/32": "146576", - "2600:9000:2167::/40": "16509", - "2a09:dd40::/32": "205718", - "2a0d:7980:100::/40": "48635", - "2001:468:c00::/45": "10886", - "2001:559:34f::/43": "33651", - "2001:978:2801::/39": "174", - "2406:e540::/48": "140766", - "2606:2800:4acc::/48": "15133", - "2620:11a:e000::/46": "22300", - "2804:11e8::/32": "52752", - "2001:470:5b::/45": "6939", - "2804:33c0::/32": "265415", - "2806:2f0:3144::/42": "17072", - "2001:559:c385::/48": "33657", - "2800:320:8403::/45": "27882", - "2408:840c:1e00::/40": "17621", - "240a:a257::/32": "143249", - "2c0f:fcc8::/32": "37154", - "2402:800:588d::/43": "7552", - "240a:a5fb::/32": "144181", - "2620:10a:4003::/48": "17394", - "2801:114::/45": "23059", - "2804:3c08::/32": "266186", - "2804:43f8::/32": "267613", - "240a:a5d1::/32": "144139", - "2806:2f0:3201::/42": "17072", - "2a00:e080::/32": "15557", - "2a06:1440::/29": "30892", - "2a0b:f8c0::/29": "44297", - "2604:d600:1105::/44": "32098", - "2606:f900:7608::/32": "812", - "2806:268:380:b::/37": "13999", - "2c0f:fe08::/39": "36914", - "240a:a469::/32": "143779", - "2604:b800::/32": "30029", - "240a:a477::/32": "143793", - "2606:2800:4a20::/46": "15133", - "2804:25f4::/32": "52800", - "2405:1480:1000::/48": "4811", - "2409:8907:6d20::/38": "24547", - "240e:878:400::/30": "4134", - "2607:fb90:db00::/37": "21928", - "2a02:9b8::/31": "5610", - "2001:678:3dc::/48": "39508", - "2402:93c0:20::/48": "59073", - "240a:a219::/32": "143187", - "240e:982:d800::/40": "134769", - "2620:13e:500f::/48": "206885", - "2800:940:943::/32": "27953", - "2803:2540:e::/47": "264668", - "2a02:aec0:5::/44": "57363", - "2a0f:4640::/29": "200750", - "2604:2a00::/32": "23138", - "2604:9100:1002::/32": "29944", - "2806:230:1003::/48": "11888", - "2a04:7340:7341::/29": "62172", - "2a0c:b641:26b::/45": "59598", - "2a02:40::/32": "9009", - "2402:800:39ee::/38": "7552", - "2407:c180::/32": "135664", - "2602:fea3::/36": "399611", - "2606:4700:7000::/48": "13335", - "2804:840::/32": "262680", - "2804:67ac::/45": "269643", - "2806:230:401d::/48": "11888", - "2a04:4b40::/29": "60476", - "2a06:1783::/32": "202134", - "2001:559:836d::/48": "33652", - "2404:f4c0:f3bb::/48": "139299", - "2407:6400::/32": "9484", - "2603:c002:8350::/36": "31898", - "2804:7970::/32": "271305", - "2a03:2480::/41": "41983", - "2a0d:3c0::/29": "201211", - "2a03:2260:4000::/30": "201701", - "2001:67c:2cd4::/48": "29229", - "2408:8456:9040::/38": "17816", - "2408:870c:d0::/42": "138421", - "2409:804f:3900::/32": "9808", - "2409:8051:100::/37": "9808", - "240a:a329::/32": "143459", - "2607:f110:e430::/41": "21889", - "2a07:bd80::/29": "43350", - "2a0a:de40::/32": "205890", - "2c0f:fc00:b011::/48": "20940", - "2804:6880::/32": "266059", - "2a03:8a00::/36": "13768", - "2a0a:fc80::/32": "12409", - "2001:67c:1420::/48": "207101", - "2606:2800:4ac4::/46": "15133", - "2a09:fb86::/32": "35913", - "2001:12f0:640::/39": "1916", - "240a:a4e0::/32": "143898", - "2a00:81a0::/29": "60804", - "2a0e:b105:768::/46": "20473", - "2402:d1c0::/32": "137816", - "240e:44d:3680::/41": "4134", - "2804:1d74::/32": "264369", - "2804:5e48:ff50::/48": "269023", - "2806:2f0:2143::/48": "17072", - "2a04:5b84:1::/48": "202265", - "2a0e:b107:8e0::/44": "213372", - "2001:559:86d1::/48": "33659", - "2001:67c:1390::/48": "49251", - "240a:abd8::/32": "145682", - "240e:f7:a000::/35": "136188", - "2607:fcd0:fa80:7901::/54": "8100", - "2804:30f8:80b::/38": "264984", - "2a00:1728:24::/48": "198228", - "2001:559:8655::/48": "7725", - "2001:67c:254::/48": "51224", - "2600:100e:a110::/35": "6167", - "2a00:75e0::/32": "206897", - "2a04:1640::/29": "60610", - "2001:559:843e::/48": "7922", - "2401:b8c0::/32": "64074", - "2409:8008::/40": "24547", - "240a:a443::/32": "143741", - "2001:418:1401:1d::/58": "2914", - "2405:5540::/32": "133676", - "2600:3001:28::/35": "13649", - "2606:2600::/32": "27425", - "2607:f5a8:8000::/33": "27589", - "2001:559:c08d::/48": "13367", - "2001:67c:23a8::/48": "50101", - "2402:800:93c5::/42": "7552", - "240e:44d:7600::/41": "140345", - "2804:55b8::/32": "267952", - "2a05:8f80::/31": "201722", - "2a06:9500:8::/43": "204028", - "2001:559:564::/48": "33491", - "2001:4830:c600::/48": "22147", - "2406:b400:16::/47": "55577", - "2a02:26f7:c489::/46": "20940", - "2a02:26f7:f981::/46": "20940", - "2001:16a0:6001::/31": "39386", - "240a:af70::/32": "146602", - "2620:0:900::/48": "4185", - "2804:f2c::/35": "53191", - "2a0f:9400:8010::/48": "207393", - "2001:67c:2884::/48": "35003", - "2001:7fb:fd04::/48": "15562", - "240a:ac57::/32": "145809", - "2620:65:a000::/48": "13536", - "2a01:6a0::/32": "13284", - "2a04:ac40::/29": "60140", - "2401:d800:9950::/42": "7552", - "2402:800:399b::/41": "7552", - "240a:a71c::/32": "144470", - "2602:fd0f::/36": "18515", - "2608:106::/48": "27046", - "2a06:3fc0::/29": "42344", - "2409:8c4c:e02::/31": "9808", - "240e:982:b200::/39": "58461", - "2600:1417:d800::/48": "35819", - "2806:2f0:3044::/43": "17072", - "2a0c:6d00:85::/48": "3218", - "2804:7150::/32": "270781", - "2a0b:f300:4::/37": "62240", - "2607:f4d8::/32": "26785", - "2620:171:52::/45": "42", - "2804:4ca0::/47": "267381", - "2a01:53c0:ff13::/45": "54994", - "2a04:4e40:a00::/47": "54113", - "2a0b:2f40::/32": "52176", - "2001:678:b::/48": "51955", - "2001:678:3cc::/48": "206155", - "2001:978:2a01::/46": "56638", - "2001:978:8e00::/48": "197205", - "2408:8256:2ca0::/39": "17816", - "2a0b:4340:3231::/39": "48024", - "2607:fb10:70d2::/44": "2906", - "2620:56:4000::/48": "31990", - "2a01:c50e:e610::/36": "12479", - "2a04:dbe0::/30": "201894", - "2a0f:9400:800b::/48": "212793", - "2c0e:4020:a000::/36": "36994", - "2408:84f3:bc40::/38": "17816", - "240a:a331::/32": "143467", - "2600:1417:d001::/37": "20940", - "2804:2848::/32": "263952", - "2a02:26f7:ee85::/46": "20940", - "2a02:7aa0:161a::/33": "43513", - "2a0b:f840::/31": "205376", - "2001:3c8:2a08::/33": "4621", - "2001:470:113::/48": "15096", - "2400:b380::/32": "38843", - "2402:8100:211f::/48": "55644", - "2804:6250::/32": "262964", - "2a02:26f7:cf84::/48": "36183", - "2a06:e881:2606::/48": "49745", - "2409:8904:6640::/42": "24547", - "2804:1468::/32": "263328", - "2402:33c0:a005::/33": "24413", - "240e:438:3c40::/38": "4134", - "2a02:26f7:dd05::/46": "20940", - "2400:a980:d2::/42": "133111", - "2408:8459:5440::/40": "17623", - "2800:160:110e::/43": "14259", - "2804:710::/47": "17222", - "2a11:6e01::/32": "57695", - "2a0b:dc00::/29": "37002", - "2400:5200:1400::/40": "55410", - "2401:ff80:1009::/46": "133954", - "2602:fe38::/36": "17177", - "2607:fc30:300::/32": "19740", - "2a00:1288:f043::/48": "23880", - "2a01:5460::/32": "57795", - "2a05:7740::/29": "57532", - "2001:678:184::/48": "34953", - "2600:1403:5c01::/34": "20940", - "2800:160:14e9::/43": "14259", - "2804:b8::/32": "53144", - "2804:2530::/32": "264265", - "2804:79fc::/32": "271340", - "2a02:c440::/29": "8399", - "2001:4450::/42": "9299", - "2407:5a40::/32": "134798", - "2602:fd58:1::/48": "32505", - "2602:ffb7:f00::/40": "62874", - "2804:431c::/38": "267549", - "2a02:26f0:c701::/36": "20940", - "2806:106e:a::/45": "8151", - "2a0a:b900::/29": "31317", - "2406:8800:901b::/42": "17465", - "240a:a9e0::/32": "145178", - "2604:9e03::/32": "393710", - "2804:22c:f402::/38": "22689", - "2a00:fcc0::/32": "9135", - "2a02:26f0:c100::/48": "34164", - "2a0c:9a40:811b::/45": "204438", - "2001:4de0:4300::/40": "33438", - "2400:6500::/32": "16509", - "2a02:26f7:ccc4::/48": "36183", - "2a07:14c0:4000::/36": "208861", - "2804:2fdc:1000::/36": "264917", - "2a0e:97c0:420::/44": "211267", - "2801:80:3800::/48": "269610", - "2804:14c:5bc9::/42": "28573", - "2804:1384::/32": "263537", - "2804:36f4:9000::/33": "266382", - "2804:7c48::/32": "271486", - "2804:7ea0::/32": "271636", - "2001:1310:7211::/48": "11340", - "2602:fd92:300::/45": "211876", - "2a0d:98c0::/29": "40970", - "240a:ae70::/32": "146346", - "2a02:2188:1000::/36": "48469", - "2a02:26f7:cfcd::/42": "20940", - "2001:49e8::/32": "6939", - "2402:d40::/32": "63850", - "240a:a991::/32": "145099", - "2804:21b4:8070::/33": "264568", - "2a00:1188:9::/45": "8455", - "2408:875c:10::/32": "4837", - "240a:aefc::/32": "146486", - "2804:196c:b0c0::/33": "61794", - "2a02:ba8::/32": "15894", - "2001:559:8250::/48": "33652", - "2406:aa00::/35": "55354", - "2a02:26f7:c948::/47": "36183", - "2a04:6c0::/29": "9067", - "2a0e:b105:4d4::/46": "20473", - "2001:678:ae4::/48": "208398", - "240a:a602::/32": "144188", - "2a04:3100::/29": "196976", - "2a10:6d00::/29": "398559", - "2600:100d:b130::/44": "22394", - "2600:1409:8801::/37": "20940", - "2602:fef4:100::/48": "54721", - "2606:5000:3200::/39": "3908", - "2620:37:e000::/48": "53535", - "2408:840c:8600::/40": "17621", - "240a:a841::/32": "144763", - "240e:1a:150::/44": "134770", - "240e:e9:7800::/37": "4134", - "2801:0:2f0::/48": "28107", - "240e:473:4000::/41": "140485", - "2804:3b58::/32": "266143", - "2804:4dd4::/32": "268222", - "2806:269:4300::/41": "13999", - "2001:fd8:e4::/46": "132199", - "2409:8050:802::/40": "56047", - "240a:a27f::/32": "143289", - "240a:a2c4::/32": "143358", - "2607:fcd0:fa80:5601::/55": "8100", - "2a03:2880:f100::/47": "32934", - "2a0c:9200::/40": "200924", - "2402:800:36c5::/43": "7552", - "2409:8000:2000::/40": "56048", - "2600:1408:6c01::/38": "20940", - "2607:f710:85::/48": "19624", - "2a01:6dc0::/32": "204467", - "2001:1a11:22::/45": "8781", - "2404:5c80:2::/32": "59261", - "240a:acc4::/32": "145918", - "2803:1680:3000::/36": "21351", - "2a0a:7540::/46": "206066", - "2408:8459:1c50::/39": "17816", - "2804:d8c::/36": "52638", - "2a02:26f7:b786::/47": "20940", - "2a03:8f84::/32": "52023", - "2804:3378::/32": "265398", - "2a0b:8380::/29": "60580", - "2a0b:8fc1::/35": "49825", - "240e:473:4720::/41": "140486", - "2a02:2e02:8910::/42": "12479", - "2607:fe58::/32": "46449", - "2804:815c::/32": "272449", - "2a03:52e0::/29": "206182", - "2610:a0:25::/32": "7786", - "2a0b:3540:6::/47": "208176", - "2001:559:86e2::/48": "33659", - "240a:a897::/32": "144849", - "2604:d600:1533::/41": "32098", - "2406:8600:efae::/48": "24236", - "2600:6c44::/32": "20115", - "2607:f220:200::/46": "19050", - "2801:bc::/35": "28601", - "2804:1390::/32": "263538", - "2804:5e2c:f000::/36": "269016", - "2001:559:141::/48": "33287", - "2001:579:d204::/42": "22773", - "2001:e48:22:1033::/64": "137130", - "2001:559:2b2::/47": "33652", - "2620:e9:4000::/48": "394662", - "2a02:2578:130d::/36": "51375", - "2a02:26f7:d4d1::/42": "20940", - "2a0a:4780::/30": "208861", - "2c0f:5400:1::/48": "328799", - "2001:4410:2100::/35": "132040", - "2401:4900:3820::/44": "45609", - "2607:fc48:428::/48": "40009", - "2804:858::/32": "262365", - "2804:2e44:f700::/36": "265335", - "2804:5678::/32": "268002", - "2a00:1e40::/32": "48689", - "2a02:26f7:c689::/48": "20940", - "2a05:6e00::/29": "30781", - "2401:3ac0::/32": "133189", - "2a00:1288:ef98::/48": "34010", - "240a:adfa::/32": "146228", - "240e:640:8e00::/40": "136197", - "2600:140f:b::/48": "9498", - "2001:67c:78c::/48": "56531", - "2a01:581:9::/29": "9136", - "2a03:6280::/29": "203936", - "2a02:26f7:de81::/46": "20940", - "2001:559:372::/48": "13367", - "2001:559:7c9::/48": "20214", - "2001:1a88::/29": "15600", - "240e:44d:2700::/41": "140345", - "2600:4800::/41": "54004", - "2803:2480::/32": "263185", - "2a02:26f0:8b::/45": "20940", - "2a0e:8a80::/32": "209916", - "2401:ab00::/32": "17809", - "2402:c800:fff3::/45": "37900", - "2403:9140:5::/46": "135732", - "2408:8406:3000::/39": "4808", - "240a:ab7e::/32": "145592", - "2a02:3c0::/29": "44065", - "2a10:ccc0::/48": "56755", - "2001:44b8:6044::/44": "7545", - "2407:e80:2::/47": "58689", - "2409:8904:9390::/37": "24547", - "240a:a2e3::/32": "143389", - "2804:93c:10c1::/32": "52878", - "2a01:4a0::/45": "201011", - "2001:43f8:6e0::/48": "37354", - "2804:14c:8789::/45": "28573", - "2a05:3b00::/32": "29854", - "2603:c002:b30::/37": "31898", - "2804:3988::/32": "52571", - "2a00:bdc0:e002::/45": "28709", - "2c0f:4a00::/32": "328818", - "2604:1cc0::/32": "21559", - "240a:a5f7::/32": "144177", - "2a02:26f7:d2c1::/46": "20940", - "2a02:26f7:d650::/48": "36183", - "2a0f:9400:7312::/45": "41732", - "2001:dca:1000::/33": "9735", - "2001:48d0:c000::/34": "7377", - "2408:8459:1950::/38": "17816", - "240e:3b0:9200::/36": "140317", - "2a05:b0c2::/35": "210842", - "2604:f980:2d00::/40": "19957", - "2806:260:100a::/43": "13999", - "2001:559:237::/48": "33661", - "2620:114:5000::/41": "1638", - "2a04:5200:5978::/32": "50113", - "2407:c000:c025::/34": "9270", - "240a:a969::/32": "145059", - "2803:9800:b447::/40": "11664", - "2600:370f:51a8::/43": "32261", - "2600:5c00:13::/48": "11351", - "2804:c0::/32": "53100", - "2804:4680::/32": "266993", - "2401:d800:de40::/42": "7552", - "2404:b280::/32": "17670", - "240a:a035::/32": "142703", - "240e:44d:2100::/41": "140345", - "2804:17cc::/32": "263252", - "2a0f:1200::/45": "60781", - "2001:67c:2c40::/48": "59891", - "240a:a49e::/32": "143832", - "2a02:26f0:4900::/48": "34164", - "2a0d:5ec0::/29": "208861", - "2001:4200:300::/44": "36982", - "2405:7f00:3203::/45": "133414", - "2a01:9260::/32": "28753", - "2001:468:200::/40": "11537", - "240a:a708::/32": "144450", - "2803:7260:11::/42": "52238", - "2a00:cb8:33::/45": "15695", - "2a02:b60:4000::/32": "44217", - "2401:b200:5d::/40": "24186", - "240e:44d:4180::/41": "4134", - "2409:8a6c:5700::/27": "9808", - "2620:eb:8000::/48": "35873", - "2804:1838::/32": "61925", - "2804:382c::/32": "266462", - "2a02:5f80::/32": "39811", - "2a02:5f83:d1cd::/34": "39811", - "2a07:a80::/29": "34766", - "2001:4878:b048::/48": "12222", - "2404:e80:a000::/33": "134697", - "2606:5480:2000::/36": "395309", - "2620:160:e372::/48": "2011", - "2804:506c::/32": "268388", - "2001:468:501::/48": "104", - "2001:559:c2e8::/48": "7015", - "2600:9000:10d6::/42": "16509", - "2803:7d00:b020::/48": "52327", - "2a03:9b60::/32": "57184", - "2806:20d:1200::/37": "32098", - "2806:2f0:3301::/42": "17072", - "2a0b:f300::/46": "62240", - "2001:559:50b::/45": "7015", - "2620:74:a8::/48": "26134", - "2803:2a80:821::/48": "262928", - "2a00:4fa0::/29": "206293", - "2001:dd8:1c::/46": "30133", - "240e:473:1120::/41": "140486", - "2600:6c3b:405::/42": "20115", - "2620:74:90::/48": "30060", - "2620:1df::/36": "395678", - "2800:bf0:8272::/44": "27947", - "2806:230:6014::/48": "265594", - "2a01:6f8::/32": "15580", - "2a07:4247:3000::/36": "211956", - "2a0f:4a80::/48": "50673", - "2001:559:8322::/48": "33651", - "2001:67c:2e8::/48": "3333", - "2001:67c:13a8::/48": "8613", - "2408:84f3:e810::/42": "134543", - "240a:a03e::/32": "142712", - "2a02:130::/32": "42841", - "2a02:ff0:600::/40": "12735", - "2001:253:115::/48": "142081", - "2001:67c:24e4::/48": "57381", - "2402:d400:d::/32": "17762", - "2404:5d80:6800::/40": "33438", - "240a:a977::/32": "145073", - "2a02:26f7:b0::/48": "36183", - "2001:559:8648::/47": "33491", - "2402:800:bc30::/41": "7552", - "240a:abe2::/32": "145692", - "2603:c002:9700::/36": "31898", - "2620:4d:4003::/44": "62597", - "2a00:1610::/29": "34183", - "2a01:ce90:9000::/34": "51964", - "2001:559:c3e3::/48": "7015", - "2001:448a:7090::/42": "7713", - "240e:1f:9000::/34": "58543", - "2620:f4:4000::/40": "16430", - "2a01:b3c0::/32": "59647", - "2407:d600::/32": "7690", - "240e:473:6b20::/41": "140486", - "2804:65e8::/32": "269522", - "2a00:4920::/32": "202169", - "2a05:d014::/36": "16509", - "2a07:6780::/29": "209320", - "2407:b001::/32": "24121", - "2804:8cc:10::/39": "262394", - "2a0f:3340::/29": "60262", - "240e:44d:7780::/41": "4134", - "2a07:22c1:33::/48": "211604", - "2a09:a4c3::/29": "208861", - "2a0e:b105:418::/45": "20473", - "2a01:ad00:129::/32": "51865", - "2600:8807:c782::/41": "22773", - "2a01:8840:a::/48": "207266", - "2a02:78a0::/29": "59970", - "2001:1a11:dc::/42": "42298", - "2408:8256:b98::/37": "17622", - "2409:8008:d8::/48": "9808", - "240a:a63f::/32": "144249", - "2a00:7380:600::/32": "51906", - "2a0f:607:1059::/48": "57401", - "2804:670::/32": "262665", - "2a11:8600::/29": "51009", - "2001:678:d40::/48": "198430", - "2607:f350::/32": "27630", - "2620:149:1b01::/32": "714", - "2a0f:5701:3509::/48": "205593", - "2804:446c:c001::/34": "28369", - "2a01:b800::/32": "41937", - "2a06:6780::/29": "56568", - "2001:678:c38::/48": "207411", - "2001:fd8:3020::/47": "4775", - "2408:8469::/27": "4837", - "240a:aaae::/32": "145384", - "2620:117:5000::/40": "14298", - "2800:68:3c::/48": "27947", - "2a06:e881:108::/48": "206633", - "2407:3e80::/32": "38768", - "2607:fcd0:100:6e1c::/48": "8100", - "2a00:c60::/32": "8851", - "2a02:26f7:bdc0::/48": "36183", - "2a0f:6c40::/29": "34615", - "2402:cf80:1000::/48": "62597", - "240a:affc::/32": "146742", - "2603:90fb:10::/44": "20115", - "2620:9c:a000::/48": "16509", - "2a00:1728:31::/46": "34224", - "2001:559:c259::/48": "7016", - "2001:ad0:5100::/32": "3327", - "2409:8000:100::/37": "9808", - "2606:42c0::/32": "399078", - "2803:a900:104::/48": "52420", - "2001:458::/32": "8002", - "2001:4878:a141::/48": "12222", - "2604:ee00::/48": "18865", - "2606:2800:c::/48": "15133", - "2a02:c900::/29": "62319", - "2001:559:5fe::/48": "33287", - "2408:8001:3180::/36": "17816", - "2806:2f0:4044::/42": "17072", - "2605:a401:80b8::/47": "33363", - "2a00:cb20::/35": "60266", - "2c0f:f850:dc02::/47": "327979", - "2401:2200:50::/48": "55420", - "2409:8b18::/31": "134810", - "2602:fd92:a00::/40": "39618", - "2606:cc0:10::/47": "40676", - "2800:bf0:8095::/44": "27947", - "2a01:8be0::/29": "61956", - "2a0d:5600:60::/48": "9009", - "2a02:ef80::/48": "16509", - "2001:67c:448::/48": "1257", - "2408:8456:6640::/39": "17816", - "2a02:26f7:bfc8::/48": "36183", - "2402:800:9ca9::/41": "7552", - "2404:e801:1015::/44": "55430", - "2409:8a52:f00::/35": "56047", - "240e:87c:390::/41": "137692", - "2604:6d00:2200::/48": "36223", - "2a03:8260::/32": "201000", - "2a0e:b105:470::/46": "20473", - "2402:c500::/32": "56284", - "240e:44d:5480::/41": "4134", - "2602:fda7::/36": "397894", - "2804:7054::/32": "270720", - "2a00:4b00:100::/42": "41935", - "2408:8459:3410::/44": "17623", - "2620:129:1009::/48": "36821", - "2800:160:2046::/47": "14259", - "2804:22a0::/32": "264112", - "2001:678:2cc::/48": "16509", - "240a:ae42::/32": "146300", - "2001:678:134::/48": "206725", - "2001:13c7:7012::/48": "52224", - "2804:14d:90b0::/46": "28573", - "2a0a:b440::/29": "212755", - "2001:df3:1280::/48": "140014", - "2001:4428::/32": "18119", - "2604:a280::/32": "35911", - "2a0a:c980::/29": "48596", - "2a0e:97c0:40e::/48": "59936", - "2001:5a0:3f07::/33": "6453", - "2409:800b:2906::/38": "9808", - "2409:8c20:1833::/48": "9808", - "240a:a6b1::/32": "144363", - "2605:cdc0:ffff::/48": "398088", - "2804:1ac::/38": "53175", - "2a02:26f0:9f::/48": "34164", - "240e:473:9600::/41": "140485", - "2a00:1780::/32": "8194", - "2a02:110::/32": "44776", - "2a05:2cc0::/29": "44439", - "2a02:26f7:d7c5::/46": "20940", - "2401:f480::/32": "58703", - "2604:ca00:216::/48": "36492", - "2606:2800:4280::/48": "15133", - "2606:fe80:10::/44": "13354", - "2607:fb10:5014::/46": "55095", - "2804:3e44::/34": "266584", - "2a00:1a28::/40": "42708", - "2001:2f8::/35": "2907", - "2408:8956:8400::/40": "17622", - "2409:8028:3006::/40": "56041", - "2620:108:a000::/44": "393601", - "2a00:f9c0::/32": "31727", - "2a01:97a0::/32": "34702", - "2a09:bd00:1fe::/47": "42385", - "2001:4978::/44": "19255", - "240e:3b3:9200::/36": "140317", - "2607:fd08::/32": "36610", - "240e:438:5820::/43": "140647", - "2605:13c0::/32": "397103", - "2607:5580::/32": "18747", - "2a04:1d80::/29": "60989", - "2408:8456:2200::/42": "17622", - "2404:a800::/45": "9498", - "2409:8030:3900::/31": "9808", - "240e:951:2c00::/28": "4134", - "2a02:e580::/29": "199339", - "2409:8028:1100::/37": "9808", - "240e:108:4b::/48": "133774", - "240e:438:4220::/43": "140647", - "2620:119:30::/48": "36692", - "2800:160:1ad6::/44": "14259", - "2804:40:a000::/36": "28657", - "2804:5db4::/32": "268987", - "2a0e:fb40::/32": "206766", - "2001:67c:188::/48": "8330", - "2408:84f3:3450::/44": "17816", - "2607:f740:27::/48": "36236", - "2804:50a4::/33": "268401", - "2806:288:4050::/48": "28469", - "2001:67c:21dc::/48": "42963", - "2804:3f94::/32": "262452", - "2a02:f680::/48": "35196", - "2a0a:2f80::/32": "174", - "2a0e:1c40:2000::/48": "208635", - "2403:2800:2::/48": "27435", - "2409:8904:9090::/39": "24547", - "2804:1810:4000::/32": "263262", - "2a02:2e02:30e0::/39": "12479", - "2a0f:48c0::/29": "60781", - "2a0f:9400:800e::/48": "140098", - "2a0f:ea40::/32": "41108", - "2001:559:7bd::/48": "7922", - "2a06:d581:2000::/36": "207308", - "2804:3280::/32": "265082", - "2804:75a4:fb::/48": "271060", - "2a0f:abc0::/29": "56485", - "2001:2022::/27": "1299", - "2604:23c0::/32": "36792", - "2605:3a40::/48": "6233", - "2a07:40::/29": "16186", - "240a:ab26::/32": "145504", - "2605:3380:414d::/43": "12025", - "2001:d98::/32": "18106", - "2606:ce80:6100::/37": "33438", - "2804:164c:fad::/32": "263280", - "2001:559:8424::/48": "7922", - "2408:8456:8600::/42": "17622", - "240a:a491::/32": "143819", - "240e:95d::/37": "136193", - "2804:1128:c001::/40": "263661", - "2804:6a54::/32": "270329", - "2a02:7b07::/48": "48328", - "2001:400:6440:105::/47": "293", - "2001:559:100::/48": "7922", - "2606:4700:2001::/48": "395747", - "2804:314:4011::/46": "61568", - "2001:67c:2370::/48": "24681", - "2600:1419:1c01::/34": "20940", - "2806:20d:5a09::/45": "32098", - "2a02:1658::/32": "12290", - "2a02:26f7:dbc5::/46": "20940", - "2a02:ee80:4224::/46": "3573", - "2408:8000:9000::/36": "17621", - "2409:8004:801::/48": "9808", - "2a00:fe80::/32": "8585", - "2a06:1e00:2d::/48": "212968", - "2a06:e881:690f::/48": "208434", - "2a07:ee00::/32": "206711", - "2409:897f::/24": "9808", - "2001:468:701::/48": "3681", - "2404:de80::/39": "137443", - "2a03:2880:f002::/44": "32934", - "2c0f:f920::/32": "37550", - "2001:559:4d::/46": "33651", - "2401:fd80:101::/44": "43519", - "2402:800:910f::/43": "7552", - "240a:a62c::/32": "144230", - "2606:9880::/32": "394380", - "2804:1d9c::/32": "264381", - "2a02:26f0:a0::/47": "20940", - "2a01:a280:5::/48": "50306", - "2a06:e881:2100::/47": "206479", - "2604:180:f1::/45": "3842", - "2607:fb10:70e2::/44": "2906", - "2620:c9::/48": "701", - "2803:b780:22::/32": "27742", - "2804:79f8::/32": "271339", - "2001:559:c051::/45": "7922", - "2403:43c0::/32": "137990", - "2405:ef00:18::/32": "58779", - "2406:20c0::/32": "140423", - "2804:2778::/34": "263903", - "2804:8084::/32": "271756", - "2001:559:5ab::/48": "33662", - "2403:7000::/33": "45179", - "240a:a5e1::/32": "144155", - "2804:e94:4c0::/44": "262468", - "2a02:26f7:c14c::/48": "36183", - "2a0b:4341:509::/48": "57695", - "2001:559:16a::/48": "33657", - "2001:559:c307::/48": "33657", - "2001:df5:2880::/48": "141370", - "2409:8a04:5400::/34": "24547", - "240a:abb9::/32": "145651", - "2803:7200:801d::/33": "27696", - "2a02:26f7:e5c1::/46": "20940", - "2405:201:d800::/34": "55836", - "2408:84f3:f620::/43": "17816", - "2409:8a14:8a00::/31": "56044", - "2801:1fe::/40": "19429", - "2803:1300::/32": "52263", - "2804:1844::/32": "53065", - "240a:af42::/32": "146556", - "2804:5270::/32": "268518", - "2a04:a840::/29": "20559", - "2a0c:b641:571::/46": "24239", - "2409:8963::/28": "9808", - "240e:3b2:7800::/39": "4134", - "240e:3b9:5600::/34": "4134", - "2600:1fa0:c040::/44": "16509", - "2a0a:e2c6::/32": "202015", - "2800:bf0:2408::/43": "27947", - "2001:559:85c0::/48": "7922", - "2001:1900:3013::/32": "3356", - "2001:4150::/32": "5539", - "2620:11:a::/47": "10934", - "2801:80:3741::/48": "269406", - "2a09:6280:2::/48": "51628", - "240e:438:1e40::/34": "4134", - "2600:300::/25": "7018", - "2607:b80::/46": "30247", - "2a0c:2f07:4663::/48": "206924", - "2001:913::/36": "60197", - "2001:df0:a3::/48": "45305", - "2402:c800:caff::/34": "38639", - "2804:7f3c::/32": "271675", - "2a0b:b602::/32": "57758", - "2600:1008:a000::/43": "6167", - "2600:6c38:61f::/42": "20115", - "2605:e2c0::/40": "49434", - "2607:ff18:8000::/35": "40630", - "2001:200:a00::/37": "2500", - "2001:559:c3bb::/41": "33287", - "2001:4878:a153::/48": "12222", - "2401:d800:5030::/41": "7552", - "2620:0:880::/48": "29763", - "2a01:c506::/28": "12479", - "2a06:f903::/36": "56630", - "2607:f368:3225::/32": "32982", - "2a02:26f7:fb89::/42": "20940", - "2a02:ee80:41b5::/48": "3573", - "2a0a:6680:a000::/36": "206398", - "2a0e:b107:220::/44": "208717", - "240e:473:b250::/39": "4134", - "2600:100e:b070::/40": "6167", - "2607:fcd0:cd80::/35": "8100", - "2804:4964::/32": "267182", - "2a01:bb20:2000::/36": "206834", - "2001:4870:a24b::/45": "3549", - "2405:8a00:20e4::/43": "55824", - "2607:f938::/32": "40028", - "2a0e:8a00::/29": "208256", - "2001:67c:758::/48": "204254", - "2001:67c:194c::/48": "62434", - "2001:67c:2208::/48": "21079", - "240e:44d:6900::/41": "140345", - "2620:125:b000::/47": "15092", - "2a04:9040::/29": "58138", - "2001:470:f1::/45": "6939", - "240a:a715::/32": "144463", - "2001:559:8426::/48": "7015", - "2600:380:b000::/38": "20057", - "2600:140f:5801::/38": "20940", - "2a00:7580:16::/48": "3257", - "2a02:e182::/36": "33517", - "2a04:18c0::/29": "60941", - "2a0e:b107:12d1::/48": "211358", - "2001:559:c24f::/48": "33659", - "2600:6c38:161::/45": "20115", - "2a07:e140::/29": "50582", - "2001:40c0::/48": "21217", - "2401:d800:2080::/42": "7552", - "2804:6e44:1102::/38": "270585", - "2a05:4500::/29": "207605", - "2404:e8c0::/32": "139090", - "240e:473:a50::/39": "4134", - "2a09:7980::/29": "39106", - "2406:e001:c800::/34": "23655", - "2602:fff6:5::/48": "46562", - "2804:3c1c::/32": "266191", - "2a03:70e0::/32": "58243", - "2001:fd0:2301::/37": "10029", - "2001:40b8::/32": "13039", - "240a:ae92::/32": "146380", - "240e:473:5a00::/41": "140485", - "2804:1f4e::/32": "33353", - "2804:23b4::/32": "264178", - "2a03:12a0::/29": "3301", - "2a07:9340::/32": "56911", - "2001:ee0:e500::/40": "45899", - "2620:74:f::/48": "29403", - "2001:559:8409::/48": "7922", - "240e:5a:4900::/40": "140302", - "2a09:d340::/29": "39175", - "2001:559:c396::/48": "33651", - "2001:4490:d980::/46": "9829", - "2401:4900:1bb0::/48": "45609", - "2408:8956:b00::/40": "17816", - "240e:438:3240::/37": "4134", - "2600:6c38:82d::/43": "20115", - "2a01:300:10:6::/41": "9009", - "2001:dc7:cd01::/43": "24151", - "2402:800:3d01::/44": "7552", - "2a09:a540::/29": "57353", - "2a0e:8f02:2122::/44": "211635", - "2c0f:ef58::/32": "36924", - "2001:559:8417::/44": "7016", - "2001:559:c1b1::/48": "33652", - "2402:af40::/32": "23779", - "2a07:2f00:1337::/48": "12502", - "2406:5f40::/48": "135905", - "2604:abc0::/32": "64236", - "2804:523c::/32": "268504", - "2001:1248:c201::/48": "11172", - "240a:a46a::/32": "143780", - "2804:2a7c::/32": "264075", - "2a04:13c1::/32": "61049", - "2a10:d505::/32": "22773", - "2001:678:a14::/48": "13101", - "2406:daa0:e080::/44": "16509", - "2801:80:35a0::/48": "269045", - "2a02:5740:24::/48": "58065", - "2a02:26f7:ba81::/46": "20940", - "2409:8c06::/28": "9808", - "240a:a514::/32": "143950", - "240a:a7ce::/32": "144648", - "2602:fe9d::/36": "13760", - "2803:6fa0:6::/48": "267790", - "2a01:ce88:9000::/31": "51964", - "2a02:26f7:d9::/48": "20940", - "2602:ff62:82::/39": "61317", - "2a00:c280:101::/29": "50463", - "2001:559:82f7::/48": "33668", - "2001:fd8:e0::/48": "132199", - "2401:d800:dbd0::/37": "7552", - "240a:ab72::/32": "145580", - "2804:40::/34": "28657", - "2804:7ffc::/32": "271722", - "2a0f:4d80::/29": "201847", - "2001:480:2310::/48": "5132", - "2600:141c:e001::/35": "20940", - "2607:9880::/32": "812", - "2a00:1b00:1000::/48": "47862", - "2a02:26f7:c280::/48": "36183", - "2a02:26f7:de41::/46": "20940", - "2404:4a00:5542:3a2::/50": "55423", - "2404:7800::/32": "17893", - "2602:fe27:b1::/48": "6473", - "2804:6280:5::/32": "269301", - "2a02:26f7:f185::/46": "20940", - "2a0e:46c3:300::/40": "51745", - "2607:f160:b::/45": "6167", - "2408:8957:2a40::/40": "17622", - "240a:a3d9::/32": "143635", - "2606:4700:303d::/46": "13335", - "2607:9e00:2002::/35": "30536", - "2607:ffb0:5003::/45": "6327", - "2801:80:3560::/44": "28614", - "2400:6500:ff01::/40": "16509", - "2401:d800:280::/39": "7552", - "2408:8459:ed50::/38": "17816", - "2607:fc68:101::/32": "2711", - "2803:6900:506a::/48": "52423", - "2407:38c0:82::/48": "59204", - "2800:160:119a::/42": "14259", - "2a03:a780::/32": "198031", - "2a04:78c0::/30": "24764", - "2c0f:f738:2005::/38": "61317", - "2406:daa0:80c0::/44": "16509", - "2610:a1:306c::/48": "12008", - "2803:2b00::/35": "52468", - "2a0f:b400:b::/29": "60781", - "2408:8459:6230::/41": "17622", - "240a:abee::/32": "145704", - "2a02:26f7:c845::/46": "20940", - "2a0b:180::/29": "43872", - "2405:1c0:61dc::/38": "55303", - "240a:ac5f::/32": "145817", - "2804:104c:c800::/40": "263629", - "2804:37f0::/33": "266445", - "2804:5354::/32": "268577", - "2001:67c:17cc::/48": "3301", - "2402:800:94fe::/39": "7552", - "2402:800:f230::/41": "7552", - "2409:8030:900::/35": "9808", - "2600:1488:a481::/39": "20940", - "2604:ca00:f000::/48": "36492", - "2a10:2080::/29": "207551", - "2404:3d00:4141::/48": "21433", - "2408:870c:20::/44": "138421", - "240a:ac19::/32": "145747", - "2804:1c4::/32": "262744", - "2804:286c::/32": "262799", - "2a02:26f7:e841::/46": "20940", - "2600:9c00::/32": "7979", - "2a02:120:2::/48": "41887", - "240e:3b4:7600::/39": "140313", - "2602:fea6::/36": "40676", - "2804:4a2c::/32": "267222", - "2a01:c50f:c200::/39": "12479", - "2a02:26f0:7501::/40": "20940", - "2001:67c:2670::/48": "43451", - "240e:980:4800::/40": "134769", - "2605:a404:a1::/44": "33363", - "2804:7fa0:104a::/43": "271699", - "2001:661:2000::/35": "2199", - "2600:1419:6000::/48": "52376", - "2804:1270::/40": "262851", - "2804:78b4::/32": "271260", - "2a11:e980::/29": "24940", - "2001:1808::/32": "46650", - "2804:2cb4::/32": "265238", - "2a02:26f7:dc0d::/42": "20940", - "240e:1c:1000::/36": "58461", - "2607:fdf0:5e7a::/45": "8008", - "2a00:1b68::/32": "43226", - "2a06:d000:10::/48": "47725", - "2001:df0:ed00::/48": "139398", - "2806:2f0:3164::/40": "17072", - "2a02:6c20:4::/48": "207167", - "2001:4878:a242::/48": "12222", - "2401:4900:4468::/40": "45609", - "2408:8406:1800::/39": "4808", - "240a:a871::/32": "144811", - "2604:2280:4000::/38": "53340", - "2804:4198::/32": "267443", - "2a04:880::/45": "43623", - "2001:fd8:3022::/44": "132199", - "2400:6880::/34": "9652", - "240a:acc8::/32": "145922", - "2804:3850:8000::/39": "266469", - "2a01:3a0::/29": "3308", - "2a0e:46c4:4820::/35": "38230", - "2001:559:74b::/48": "33657", - "2001:df3:5980::/48": "140547", - "2406:840:e080::/44": "141776", - "2408:840c:c300::/40": "17621", - "2804:a80:1200::/32": "262293", - "2a03:db80:4414::/48": "5501", - "2a0c:2dc0::/29": "49028", - "2a10:2a80:42::/48": "207727", - "2c0f:ea88::/32": "327931", - "2c0f:f798::/32": "327817", - "2001:3c8:1013::/38": "4621", - "2409:8971::/29": "9808", - "2a02:fae0:300::/29": "58193", - "2402:3a80:1a70::/40": "38266", - "2a01:8d20::/32": "57795", - "2408:8957:5000::/40": "17622", - "2803:ea80:2000::/36": "28048", - "2001:559:824b::/48": "21508", - "240e:3b2:4c00::/35": "136200", - "240e:473:9f50::/40": "4134", - "2605:7840:e150::/35": "12130", - "2804:7cc:100::/48": "28669", - "2a0a:7e40::/46": "206056", - "2001:df7:4808::/48": "131893", - "2001:1478:1100::/48": "27385", - "2409:8e1b::/26": "9808", - "2600:40f1::/48": "46639", - "2801:15:8001::/44": "263683", - "2804:6ec0::/32": "28293", - "2a01:b740:a02::/48": "6185", - "240a:abab::/32": "145637", - "240e:108:1010::/48": "137698", - "2a0f:cf00::/29": "30813", - "2001:559:82b8::/48": "7922", - "2804:6690:2000::/32": "269568", - "2804:67d8::/32": "269654", - "2a02:fc8::/47": "42572", - "2001:559:86e1::/48": "7922", - "240a:ad05::/32": "145983", - "240e:964:2b00::/40": "133775", - "2804:37c4:8200::/39": "266435", - "2a02:26f7:d788::/48": "36183", - "2001:67c:1223::/48": "201263", - "2001:c38:9009::/45": "9931", - "2402:800:54e0::/44": "7552", - "240a:a30e::/32": "143432", - "240a:a547::/32": "144001", - "2606:a680::/32": "393706", - "2800:800:960::/48": "26611", - "2a02:6f00:ec0::/48": "59518", - "2001:1938:7001::/44": "33438", - "2606:3c80::/32": "33582", - "2620:160:e720::/44": "4196", - "2a0e:b101:302::/32": "60474", - "240e:473:7800::/41": "140485", - "2804:14c:65a8::/41": "28573", - "2804:14d:6884::/43": "28573", - "2804:3d9c::/32": "266542", - "2806:2f0:72c1::/42": "17072", - "2a0a:90c0:20::/44": "11868", - "2a0e:97c5:4e4::/44": "20473", - "2001:df0:dd80::/48": "135839", - "2400:9d80::/47": "58714", - "2804:88:2::/35": "28135", - "2804:5298::/32": "268528", - "2a01:8840:71::/48": "207266", - "2a04:edc0::/29": "200437", - "2a09:6140::/29": "50107", - "2001:480:23::/48": "5058", - "2001:67c:299c::/48": "56813", - "2620:11d:2000::/40": "63154", - "2804:5d08::/32": "263101", - "2804:6bb8::/32": "270419", - "2a00:cb20:2200::/35": "60266", - "2a02:ff0:3df1::/46": "12735", - "2400:180:9::/48": "4766", - "2401:b780:68::/47": "65435", - "2401:d800:ff10::/40": "7552", - "240e:473:7d50::/40": "4134", - "2602:fd50:20::/48": "206628", - "2800:160:1a7e::/40": "14259", - "2a01:5ec0:d000::/34": "44244", - "2a03:8800::/48": "49687", - "2402:8400:6::/48": "17820", - "2803:760:1900::/33": "269816", - "2a00:1468::/48": "35810", - "2a00:15a0::/32": "201577", - "2001:c38:90a3::/45": "9835", - "2409:8062:1900::/34": "9808", - "2a07:ce40::/29": "201463", - "2a0d:3b80::/29": "39384", - "2408:8456:2400::/42": "17622", - "2a02:26f7:c740::/48": "36183", - "2401:d800:f670::/40": "7552", - "2407:ef00:930::/48": "2687", - "2604:ca00:7::/48": "36492", - "2804:2ea0:c620::/41": "265356", - "2a02:c640::/32": "30836", - "2400:adc0:4100::/47": "9541", - "2407:3380:6000::/32": "64063", - "2604:3d00:fc00::/28": "6327", - "2800:bf0:3401::/38": "27947", - "2a0d:f301::/48": "40994", - "2001:559:850e::/48": "7015", - "2001:1388:8a0b::/48": "6147", - "2408:8459:5a50::/37": "17816", - "2620:1ec:1d::/48": "8068", - "2001:559:736::/48": "22909", - "2409:8050:3000::/47": "56047", - "2600:803:22c::/48": "7046", - "2a02:2010:2200::/45": "20978", - "2a02:26f7:b8c5::/46": "20940", - "2a0c:c640::/29": "50489", - "2a10:d780:4::/32": "211997", - "2401:d800:b3c0::/42": "7552", - "240a:aa48::/32": "145282", - "2606:ae80:1c40::/44": "25751", - "2a02:26f0:7d01::/40": "20940", - "2a06:4600::/29": "200423", - "2001:559:488::/46": "33657", - "2001:559:81b1::/48": "7015", - "2a0c:e642:30::/44": "211323", - "2001:12d8:81::/32": "1251", - "2001:1248:5a2f::/43": "11172", - "2409:8c44:b01::/35": "24445", - "240a:a079::/32": "142771", - "2800:440:1600::/42": "27738", - "2804:5188::/32": "268458", - "2a03:f80:354::/48": "50613", - "2001:550:1:200::/55": "174", - "2001:16a2:8038::/34": "39386", - "2001:43f8:13a0::/48": "37187", - "2401:d800:9d00::/42": "7552", - "2600:100a:b0e0::/43": "22394", - "2a03:d606::/31": "42487", - "2406:46c0::/32": "140933", - "2804:3434::/32": "265442", - "2001:fb0:1000::/46": "9287", - "2402:e280:2130::/45": "134674", - "240e:3b8:d000::/36": "134772", - "2600:8807:1f82::/42": "22773", - "240a:a1c9::/32": "143107", - "2800:bf0:71::/44": "27947", - "2a00:7180:8008::/46": "207808", - "2a04:5180::/29": "34855", - "2a0b:a40::/29": "57684", - "2001:648:3500::/29": "5408", - "2401:8b00::/32": "55385", - "2607:fb90:d300::/37": "21928", - "2800:484:2700::/40": "10620", - "2a02:26f7:d744::/48": "36183", - "2602:80a:7000::/48": "399798", - "2001:559:31a::/48": "33660", - "2001:df0:40e::/48": "58551", - "2402:e280:2120::/45": "134674", - "2408:8956:3e00::/40": "17622", - "240a:a0f9::/32": "142899", - "240a:ab97::/32": "145617", - "2600:1406:32::/48": "21342", - "2806:2f0:2081::/46": "22884", - "2a00:b3a0::/36": "62023", - "2a06:e044::/44": "203382", - "2a0a:68c0::/40": "134835", - "2a0f:1940::/29": "60262", - "2001:559:82a1::/48": "33651", - "2001:cb0:209::/46": "4637", - "2a02:26f7:c840::/48": "36183", - "2a02:cb80:2740::/48": "43766", - "2a0d:1b80::/32": "204664", - "2404:b800::/32": "4739", - "2604:1500::/32": "35843", - "2607:fdc8:c::/47": "30036", - "2610:a1:3008::/48": "12008", - "2801:80:36b0::/48": "269191", - "2a10:c680::/29": "42357", - "2001:4de0:6200::/39": "33438", - "240e:c9:4000::/35": "134765", - "2607:6400::/35": "30688", - "2620:104:e000::/56": "1351", - "2804:c48::/36": "52687", - "2a0c:8480::/30": "5400", - "2a11:2640::/31": "3170", - "2001:559:4cd::/48": "7922", - "2401:ff80:1485::/44": "133954", - "2a02:4780::/47": "47583", - "2001:43f8:1::/48": "327844", - "2604:71c0::/32": "10423", - "2001:678:760::/48": "50472", - "2620:136:4000::/44": "19694", - "2408:84f3:4040::/38": "17816", - "240a:a4de::/32": "143896", - "2804:2f40:f000::/45": "264880", - "2401:d800:f8f0::/39": "7552", - "2409:8d14:2100::/38": "56044", - "2600:1404:cc01::/38": "20940", - "2604:6440::/32": "33549", - "2604:a100:100::/48": "6939", - "2620:74:22::/45": "7342", - "2a00:16b0::/32": "33837", - "2001:470:34::/41": "6939", - "2001:520:5031::/48": "8103", - "240a:a3dc::/32": "143638", - "2a0b:2d40:c10b::/34": "209135", - "2001:978:7303::/37": "174", - "2001:1248:a6da::/39": "11172", - "2001:1250:e500::/44": "22894", - "2407:d340::/32": "146989", - "2604:aec0::/32": "11900", - "2a06:c07::/32": "59414", - "2620:c7:c000::/48": "394128", - "2804:214:8440::/43": "26615", - "2804:826c::/40": "272520", - "2a0e:8d80::/29": "207999", - "2a0e:97c7:120::/44": "207328", - "2600:1009:b170::/40": "22394", - "2606:6800:3000::/40": "394896", - "2800:160:1c53::/45": "14259", - "2806:370:8260::/40": "28403", - "2a02:26f7:ea41::/46": "20940", - "2001:559:822e::/48": "7922", - "2001:4048:108::/48": "47341", - "2405:6e00:2420::/43": "133612", - "240a:a775::/32": "144559", - "2a01:8640:1::/48": "61046", - "2c0f:ec78::/32": "328088", - "2402:7b00:3::/48": "55843", - "2402:a800:c000::/34": "9601", - "2404:8000:b0::/46": "17451", - "240a:a114::/32": "142926", - "2605:9fc0::/32": "396238", - "2804:d84::/36": "28171", - "240a:a9aa::/32": "145124", - "2801:80:19c0::/48": "265101", - "2a03:9c40:600::/48": "34655", - "2a04:9a00:1002::/47": "202553", - "2a03:f80:33::/48": "9009", - "2a04:88c0:2::/30": "60781", - "2401:d800:9a10::/42": "7552", - "2403:8300:813f::/48": "2516", - "2408:8459:5a30::/41": "17622", - "2001:1250:1000::/44": "22894", - "2402:ef21::/34": "7633", - "2408:80ea:7a90::/32": "17816", - "2a02:2500::/32": "5390", - "2401:ff80:1713::/40": "133954", - "2804:4e60::/32": "268257", - "2a01:76c0::/29": "21263", - "2a02:26f7:d985::/46": "20940", - "2a0f:b300:2001::/46": "42072", - "2a02:ff0:2::/48": "12735", - "2a07:dd00::/32": "39485", - "2001:1388:1b8a::/45": "6147", - "2607:f750:b000::/40": "23473", - "2804:6330::/32": "269344", - "2a02:870::/32": "42863", - "2001:67c:2fc0::/48": "207424", - "2406:2400:1000::/48": "45287", - "2600:5400::/32": "19108", - "2602:fc5a::/36": "398491", - "2a00:1370:f200::/48": "57681", - "2a02:26f7:bd05::/46": "20940", - "2404:e800::/46": "55430", - "2408:8956:4f00::/40": "17816", - "2620:110:5000::/44": "6623", - "2602:feda:2ab::/45": "204185", - "2604:980:1::/48": "40676", - "2800:bf0:2420::/45": "52257", - "2001:418:1451::/45": "2914", - "240a:ad16::/32": "146000", - "240a:af5f::/32": "146585", - "240e:3b5:ec00::/35": "140314", - "2804:3ed4:2::/32": "266623", - "2804:5cec::/32": "268939", - "2401:d800:54e0::/39": "7552", - "2a10:50c0::/48": "212772", - "2403:7000:4100::/32": "45179", - "2406:4f40:c::/43": "40676", - "2408:8956:e200::/40": "17622", - "240a:a621::/32": "144219", - "2804:34d0::/32": "265482", - "2a00:5720::/32": "61015", - "2a0e:6c80::/29": "208599", - "2c0f:f418::/32": "37714", - "2403:4000::/43": "24122", - "2408:84f3:2c60::/40": "17623", - "2600:1002:b1c0::/43": "6167", - "2602:fed2:770b::/48": "34924", - "2a09:adc0::/47": "64466", - "2a0d:e6c0::/32": "41114", - "2a0e:46c4:1000::/40": "139653", - "2600:1414:1::/31": "20940", - "2605:a401:80dd::/42": "33363", - "2a04:2b00:200::/48": "42044", - "2001:1248:98e5::/43": "11172", - "2001:1a08::/32": "15830", - "2400:adc0:20::/47": "9541", - "2602:fedc:10::/42": "393857", - "2607:fc48:1800::/48": "40009", - "2a0e:b107:510::/48": "209101", - "2a0e:c980::/32": "34393", - "2406:daa0:8020::/44": "16509", - "240e:92c::/30": "4134", - "2606:ae00:8800::/35": "7287", - "2804:3e70::/35": "266596", - "2a01:53c0:ffba::/47": "54994", - "2a01:9cc0:80::/32": "198047", - "2a02:bd8::/32": "8535", - "240a:a39c::/32": "143574", - "2620:11f:700b::/45": "13737", - "2a0a:3640::/29": "29504", - "2001:559:8491::/48": "7015", - "2001:678:d74::/48": "197058", - "2604:9e40::/46": "29457", - "2a0a:f940::/32": "48642", - "2001:43f8:280::/48": "23889", - "2401:4900:1800::/40": "45609", - "240a:a791::/32": "144587", - "2a01:a1e0:1::/48": "39293", - "2a02:26f7:e541::/46": "20940", - "2a06:6800::/29": "20565", - "2400:cb00:a980::/46": "13335", - "2402:b400:41b0::/41": "45960", - "2a02:26f7:e904::/48": "36183", - "2a0c:da04:14::/47": "202365", - "2600:9000:2132::/41": "16509", - "2602:fd5d::/40": "398578", - "2620:149:1324::/37": "714", - "2a02:26f7:b689::/42": "20940", - "2a0f:9bc4::/30": "398481", - "2001:12c4::/32": "28262", - "2408:8459:2030::/41": "17622", - "2600:1017:f810::/37": "6167", - "2600:140b:9c01::/34": "20940", - "2603:c0f8:2110::/38": "20054", - "2804:145c:8110::/40": "263327", - "2001:1388:8a0e::/42": "6147", - "240a:a033::/32": "142701", - "2607:f2c8::/32": "23473", - "2620:10a:b000::/47": "15297", - "2806:230:4032::/48": "265594", - "2001:559:4c1::/48": "7922", - "2001:4490:f020::/46": "9829", - "2403:9500::/32": "9657", - "2a01:240:ab01::/48": "49030", - "2001:a48:9000::/33": "8970", - "2600:14a0:81::/41": "20940", - "2620:0:57f::/48": "62955", - "2804:1cc::/32": "28130", - "2804:204:25b::/42": "28186", - "2001:559:c2ac::/48": "33659", - "2001:67c:61c::/48": "200943", - "2401:e280:1000::/36": "133114", - "2404:2e80::/42": "135043", - "2605:a401:83f6::/37": "33363", - "2a00:68c0::/32": "30781", - "2406:e001:5800::/34": "23655", - "2804:62e4:facf::/37": "269326", - "2405:70c0::/32": "55736", - "240a:a054::/32": "142734", - "2804:1230:2100::/32": "263462", - "2a00:1640::/32": "12389", - "2804:3968::/42": "266029", - "2001:67c:281c::/48": "198692", - "2402:800:fab0::/41": "7552", - "2405:9000::/44": "7474", - "2409:8904:caa0::/39": "24547", - "240a:a10f::/32": "142921", - "240a:a44c::/32": "143750", - "2804:7bc::/32": "52861", - "2a04:55c0::/29": "207630", - "2409:804f:900::/35": "9808", - "240a:a65b::/32": "144277", - "2a0d:ac00:6::/47": "205202", - "2001:67c:293c::/48": "211742", - "2403:3440::/32": "4787", - "2604:ca00:f00e::/47": "36492", - "2a04:4b80::/29": "39397", - "2a04:ec80::/29": "39441", - "2408:8957:3a00::/40": "17622", - "2409:8752:d00::/38": "56047", - "2607:ffc8::/62": "17356", - "2800:160:1e3c::/41": "14259", - "2620:0:2ea1::/48": "26777", - "2804:81c8::/32": "272476", - "2a00:db00::/32": "47868", - "2a02:26f7:fac0::/48": "36183", - "2a04:5d00::/41": "60241", - "2408:8957:100::/40": "17816", - "2001:559:8156::/48": "7922", - "2001:67c:1445::/46": "42385", - "2001:67c:2d0c::/48": "201222", - "2001:948::/42": "2603", - "2001:44b8:30ee::/48": "4739", - "2804:664c:3e90::/32": "269547", - "2001:559:83ba::/48": "33651", - "2001:18e8:3::/44": "87", - "2401:dd00::/32": "38229", - "2604:f980:2100::/44": "19957", - "2803:6604:c001::/37": "28075", - "2a03:a300:4000::/44": "35104", - "2a06:e881:580a::/48": "204003", - "2001:678:a38::/48": "209220", - "2806:5:201::/32": "6503", - "2a00:f740::/39": "28875", - "2a02:e982:31::/48": "62571", - "2001:218:2300::/35": "2914", - "2001:559:8201::/48": "21508", - "2001:1a11:b0::/47": "8781", - "240e:698:4800::/40": "134769", - "2607:f480:411::/48": "27435", - "2a00:1458::/32": "50083", - "2001:559:80e4::/48": "7016", - "2404:bf40:a001::/48": "7545", - "2409:8924:b900::/38": "56046", - "2606:8e80:2800::/37": "32133", - "2804:3268:9003::/33": "265076", - "2804:7fb0:800::/32": "271703", - "2001:df5:5880::/48": "141131", - "240a:a415::/32": "143695", - "240a:abd2::/32": "145676", - "2804:1184::/32": "61895", - "2a02:6c8::/33": "56611", - "2001:44b8:4056::/48": "7545", - "240a:ab78::/32": "145586", - "2602:808:2000::/47": "398946", - "2c0f:f0a0::/32": "328638", - "2001:4479:e000::/38": "7545", - "240e:640:8f00::/33": "4134", - "2804:7164::/32": "270786", - "2a02:5740::/47": "41564", - "2602:fcad:1::/46": "54316", - "2607:4000:600::/32": "73", - "2804:7b5c:1::/44": "265022", - "2a04:1c42:100::/32": "201035", - "2408:8456:4a40::/39": "17816", - "240a:a6bc::/32": "144374", - "2602:fd10:800::/44": "398795", - "2a02:2e02:1580::/42": "12479", - "2001:559:c3c2::/48": "7016", - "2607:fcd0:fa80:7f01::/48": "8100", - "2a0b:4341:b02::/48": "57695", - "2405:6580::/29": "4685", - "240a:a7b4::/32": "144622", - "2806:262:300::/37": "13999", - "2a02:26f7:e50d::/46": "20940", - "2a0c:d4c0::/29": "8823", - "2001:1248:706a::/45": "11172", - "2409:8053:3900::/32": "9808", - "2607:9b80:800::/43": "46558", - "2401:ff80:130b::/45": "133954", - "2606:4e80::/32": "5650", - "2001:559:c164::/48": "20214", - "2602:804:2000::/44": "10946", - "2a02:26f0:1d::/48": "34164", - "2a0e:97c0:4df::/48": "211024", - "2806:217::/38": "28394", - "2a02:26f0:9c::/47": "34164", - "2a03:7b80::/32": "198024", - "240a:a0b5::/32": "142831", - "2620:98:e004::/48": "399728", - "2a0d:80c0::/29": "15848", - "2600:140b:5c01::/34": "20940", - "2604:26c0:500::/40": "36815", - "2606:2040::/32": "49791", - "2a02:26f7:cf::/48": "20940", - "2408:840c:5b00::/40": "17621", - "2801:15:6800::/48": "13489", - "2001:13d2:5802::/47": "7303", - "2001:44b8:405a::/48": "7545", - "2403:2700::/47": "38500", - "2610:e0:a002::/48": "46832", - "2620:0:e20::/46": "1999", - "2804:1330::/32": "263520", - "2408:8000:9fff::/48": "138421", - "2806:20d:1605::/46": "32098", - "2a00:6640::/32": "15699", - "2a06:3b80:25::/46": "206614", - "2001:678:604::/48": "49824", - "2402:e380:307::/48": "137219", - "2408:8459:f900::/38": "17623", - "2620:13f:701a::/47": "55706", - "2804:35f4::/32": "266317", - "2804:502c::/32": "268373", - "2a01:8840:45::/48": "207266", - "2001:559:801d::/48": "7015", - "240a:a81a::/32": "144724", - "240a:ae7f::/32": "146361", - "2602:feda:2f0::/48": "133492", - "2620:11:70::/47": "3486", - "2620:11d:9002:300::/53": "33186", - "2001:559:8776::/44": "7015", - "2001:4358::/32": "36866", - "2600:380:7c80::/39": "20057", - "2620:10a:a000::/47": "16920", - "2a06:2602::/32": "51088", - "2001:df5:bb00::/48": "131375", - "2001:1248:99ed::/46": "11172", - "2602:ff6d::/36": "20291", - "2620:10a:9003::/48": "11133", - "2804:6ed8::/32": "270622", - "2806:230:402b::/48": "11888", - "2a07:2540::/29": "60991", - "2402:800:5171::/44": "7552", - "240a:a4ce::/32": "143880", - "2607:fcd0:aac0::/35": "8100", - "2a00:f740:401::/32": "28875", - "2a01:63a0::/32": "199907", - "2a02:26f7:e444::/48": "36183", - "2a02:26f7:f100::/48": "36183", - "2001:559:537::/48": "7016", - "2602:fea7:200::/40": "397270", - "2a04:4e40:1200::/48": "54113", - "2a04:c040::/29": "212694", - "2401:f940::/32": "132839", - "2620:160:eb00::/44": "10837", - "2801:80:50::/48": "11802", - "2806:2f0:24::/41": "17072", - "2a02:26f0:a4::/48": "20940", - "2a02:2e02:2060::/38": "12479", - "2a02:2e02:8ff0::/35": "12479", - "2402:5ec0:1000::/39": "4808", - "2801:80:4d0::/48": "52834", - "2a0c:ab05::/32": "208861", - "2001:559:8182::/47": "33659", - "2404:2400:201::/32": "56132", - "2600:c02:b020::/48": "22211", - "2800:160:1cbc::/41": "14259", - "2800:440:2000::/42": "27738", - "2803:5c80:5593::/48": "64114", - "2a00:a362::/32": "60435", - "2a0d:8a80::/32": "33353", - "2001:559:c388::/48": "33657", - "2408:8957:7100::/40": "17816", - "240a:ad0e::/32": "145992", - "2600:1407:9000::/48": "35994", - "2620:132:f102::/41": "394977", - "2800:bf0:20::/46": "52257", - "2407:bb00:5000::/44": "45625", - "240e:62:a000::/35": "140310", - "2a00:f680::/32": "50171", - "2a09:407::/35": "208861", - "2a03:b4c0::/32": "61169", - "2001:67c:10a8::/47": "48387", - "2001:ff0::/32": "9824", - "2001:2000:4100::/35": "1299", - "240e:3bc:4c00::/35": "136200", - "2804:2308::/33": "264138", - "2804:56d8::/32": "268027", - "2a02:26f7:fac5::/46": "20940", - "2001:4d8f::/32": "41637", - "240a:aa76::/32": "145328", - "2001:559:261::/48": "33668", - "2401:7000:7003::/32": "45177", - "2a02:730:4001::/32": "29278", - "2401:4900:4680::/44": "45609", - "240e:18::/44": "4812", - "2604:880:217::/42": "29802", - "2607:fcd0:fa80:7::/53": "8100", - "2a02:26f0:cd::/43": "20940", - "2001:559:8628::/48": "33659", - "2804:84::/32": "14282", - "2804:41f8::/32": "267469", - "2a01:8400::/32": "20676", - "2401:d800:bf80::/42": "7552", - "2402:a800::/32": "9601", - "2409:8002:2800::/40": "38019", - "2600:3501:9000::/30": "396998", - "2620:0:630::/48": "4185", - "2a00:1c08::/32": "44335", - "2a02:26f7:c00d::/42": "20940", - "2001:678:b58::/48": "29560", - "2402:7500:568::/40": "24158", - "240a:a75e::/32": "144536", - "2604:2500::/32": "19323", - "2804:2988::/32": "264020", - "2400:cb00:225::/44": "13335", - "2604:d600:1526::/44": "32098", - "2804:4cc4::/32": "267390", - "2a00:9bc0::/32": "57844", - "2806:230:1400::/36": "11888", - "2a0e:46c4:2ef0::/48": "142597", - "2a0b:9b80::/29": "43332", - "2001:559:8153::/48": "33287", - "2001:559:849a::/48": "33651", - "2001:559:854f::/48": "7725", - "2001:559:c025::/46": "7922", - "240a:a212::/32": "143180", - "2a03:a4e0:100::/40": "2119", - "2a06:b100::/29": "198024", - "2001:559:4f7::/48": "7922", - "2402:8100:2440::/47": "45271", - "2409:8a04::/34": "24547", - "2804:1c00::/48": "28274", - "2409:8030:1100::/36": "9808", - "2a01:b740:1341::/37": "714", - "2407:4c00::/32": "38719", - "2604:8bc0::/32": "14932", - "2620:18:6000::/48": "396142", - "2401:1980::/32": "135092", - "2600:370f:3525::/46": "32261", - "2804:6edc:200::/32": "270623", - "2a0d:2580:ff00::/48": "20473", - "2a0f:9980:936::/48": "40676", - "2001:67c:2974::/48": "39128", - "2402:800:5d8d::/43": "7552", - "2409:8c85:aa6d::/43": "9808", - "2602:ffa6:300::/46": "62731", - "2605:ef80:36::/44": "36492", - "2a02:26f7:f200::/48": "36183", - "2402:800:3ec0::/43": "7552", - "2409:8904:65b0::/38": "24547", - "240e:640:e00::/40": "136197", - "2605:5240::/34": "397494", - "2a00:1830::/32": "24845", - "2a02:26f7:ee01::/46": "20940", - "2001:67c:2aa8::/48": "3330", - "2001:dc6::/32": "4622", - "2001:fe0::/32": "4775", - "2404:4400::/28": "9790", - "240e:438:2840::/38": "4134", - "2600:6000:fd54::/40": "12271", - "2804:14d:9800::/40": "28573", - "2a07:a905:ffe5::/44": "46261", - "2001:460:a::/41": "3561", - "2408:8459:c810::/42": "17623", - "240a:a0be::/32": "142840", - "240a:a903::/32": "144957", - "2803:980:600::/39": "263248", - "2803:8340::/32": "52330", - "2804:4fa0::/32": "268339", - "2a07:3400::/32": "62874", - "240a:aa80::/32": "145338", - "240a:ac4b::/32": "145797", - "2604:d600:15c7::/44": "32098", - "2803:bf40::/32": "264764", - "2804:2480:4000::/32": "264227", - "2a04:4880::/29": "56450", - "2a06:4b00::/31": "51191", - "2a0d:f100::/32": "208449", - "2a02:970:1018::/47": "44002", - "2001:4878:41e0::/44": "35994", - "2001:4888:8045::/46": "22394", - "240e:351:5c00::/34": "134419", - "240e:967:e200::/39": "133774", - "2600:1419:4c00::/48": "4230", - "2605:9ac0:fffe::/48": "3356", - "2804:145c:c210::/39": "263327", - "2a03:2880:f267::/44": "32934", - "2001:43f8:dd0::/48": "328212", - "2409:8904:36a0::/39": "24547", - "2804:3034:108::/40": "264936", - "240e:92a::/31": "58542", - "2604:880:11::/48": "54540", - "2607:6b80:5::/48": "46562", - "2800:160:783f::/32": "14259", - "2a02:2e02:3b70::/40": "12479", - "2401:d800:76d0::/42": "7552", - "240a:a132::/32": "142956", - "2600:1480:d001::/37": "20940", - "2a0c:3dc0::/29": "61323", - "2001:253:12a::/45": "38272", - "2001:67c:10ec::/48": "559", - "2804:5cd4::/33": "268933", - "2404:bf40:c000::/47": "2764", - "2409:8904:6970::/40": "24547", - "2607:fc28::/33": "22911", - "2804:610:f000::/36": "262565", - "2a03:e140:34::/48": "43465", - "2a0f:3cc7::/32": "59813", - "2001:559:833b::/48": "33659", - "2001:559:c2e5::/48": "33491", - "2400:4d40:e001::/35": "134204", - "2607:6f00::/32": "394111", - "2804:3bfc:300::/37": "52607", - "2403:8600:80a0::/41": "45820", - "2406:8800:9033::/45": "17465", - "2804:2a4::/32": "262828", - "2605:a401:833f::/41": "33363", - "2605:ce80:702::/32": "393713", - "2a02:26f7:b605::/46": "20940", - "2a02:26f7:ec45::/46": "20940", - "2a0d:3dc0::/29": "210312", - "2c0f:5500::/32": "328895", - "2a05:9cc7::/32": "2116", - "2001:579:534c::/40": "22773", - "2001:4478:1911::/40": "4802", - "2001:4490:4ea4::/46": "9829", - "2408:8957:d100::/40": "17816", - "2600:370f:70c4::/43": "32261", - "2606:ae00:1003::/48": "7287", - "2801:96:fff9::/45": "28586", - "2001:df1:b200::/48": "135343", - "2001:16a2:d700::/34": "25019", - "2408:8459:e230::/41": "17622", - "2409:8c20:aa52::/35": "56046", - "2804:3288:b1b2::/33": "52827", - "2001:67c:238::/48": "49974", - "240a:ab71::/32": "145579", - "2600:1009:a120::/36": "22394", - "2804:14c:41b2::/41": "28573", - "2a02:2e02:2630::/41": "12479", - "2400:6e80::/32": "132882", - "240a:a8ab::/32": "144869", - "2600:370f:344a::/43": "32261", - "2604:6600:200a::/43": "40676", - "2a05:1500:400::/40": "205631", - "2402:e380:11f::/48": "139073", - "240e:473:9950::/40": "4134", - "240e:84c::/44": "140345", - "2620:107:300f::/48": "16509", - "2a04:4940::/29": "60278", - "2001:4868:700::/36": "23148", - "2404:3d00:4146::/44": "3573", - "2408:8459:52c0::/37": "17816", - "240e:473:9650::/39": "4134", - "2602:ff96:8::/48": "26548", - "2a0b:1302::/33": "133142", - "2001:978:a02::/35": "174", - "2405:7900::/32": "24398", - "2408:840c:5d00::/40": "17621", - "240a:a43b::/32": "143733", - "2801:80:ce0::/48": "264372", - "2a00:8c40:238::/48": "42037", - "2001:43f8:bf0::/48": "2635", - "2001:448a:2090::/42": "7713", - "2600:140f:c001::/38": "20940", - "2602:fd0c::/46": "394006", - "2800:160:1b8e::/43": "14259", - "2001:559:4da::/48": "33491", - "2607:f8c0:203::/48": "25885", - "2a00:9567::/32": "48403", - "2a0a:3cc0::/29": "62035", - "2001:579:d1ec::/38": "22773", - "2001:44b8:30a5::/48": "4739", - "2402:2c00::/32": "17645", - "2607:fcd0:1338::/32": "8100", - "2803:7760::/38": "269829", - "2a03:6b00::/47": "48832", - "2a06:f300::/29": "203421", - "2600:6c38:11::/46": "20115", - "2c0f:f658::/32": "37027", - "240e:103:8b30::/33": "4134", - "2600:cc03::/29": "32298", - "2409:8c28:3401::/40": "56041", - "2804:2f88::/32": "264897", - "2804:7f0c::/34": "271663", - "2a00:e340::/32": "25160", - "2001:559:1b3::/48": "20214", - "2804:7c10::/32": "271473", - "2a02:26f7:b9a0::/48": "36183", - "2001:550:1:d::/55": "174", - "2001:559:82f2::/48": "33659", - "2001:1490::/47": "8895", - "2a02:2070:fffe::/48": "197498", - "2a0a:2b00::/43": "52129", - "2001:502:ad09::/48": "397237", - "2409:8052:2802::/38": "56047", - "240e:ff::/32": "4134", - "2600:100f:9000::/44": "6167", - "2606:b400:8830::/46": "7160", - "2620:1f7:2800::/37": "2686", - "2804:6584::/32": "269496", - "2001:559:c352::/48": "33667", - "240e:44d:3d80::/41": "4134", - "240e:928::/37": "58542", - "2604:2f40:243::/32": "29749", - "2001:418:1401:2::/64": "2914", - "2620:171:f7::/44": "42", - "2804:7ba8::/32": "271446", - "2a00:edc0:100::/44": "62597", - "2a04:1d40::/29": "6775", - "2a04:4e40:7430::/41": "54113", - "240e:698:2300::/40": "58519", - "2804:4c34::/32": "61592", - "2a10:2600::/29": "3214", - "2600:1488:a0c1::/39": "20940", - "2604:d600:154c::/46": "32098", - "2605:a404:b1a::/42": "33363", - "2620:11c:a002::/47": "26414", - "2804:6e90::/32": "270605", - "2a02:26f7:cb49::/42": "20940", - "2a03:c980:5fb5::/48": "210079", - "2409:8c00:7840::/48": "56048", - "2a02:6120::/32": "51333", - "2a0a:e200:1300::/37": "33438", - "2001:598:1301::/32": "21548", - "2804:2d0c::/40": "262408", - "2a09:5cc0::/29": "199163", - "2a0b:b1c0::/32": "28717", - "2a0b:b900::/29": "62183", - "2001:559:30::/48": "33287", - "240e:473:4850::/39": "4134", - "2804:6060:c000::/34": "269163", - "2a02:26f7:cf00::/48": "36183", - "2c0f:fc00::/27": "3741", - "2001:559:c267::/44": "7922", - "240a:a22f::/32": "143209", - "2605:6000::/37": "11427", - "2800:420::/30": "5639", - "2401:ff40:e010::/41": "137080", - "2a00:c500::/32": "48661", - "2a11:940::/29": "25145", - "2600:370f:7445::/40": "32261", - "2605:4a80::/32": "11232", - "2620:f6:8000::/48": "35922", - "2804:7698::/32": "271122", - "240a:a601::/32": "144187", - "2400:1000:8026::/33": "10021", - "240a:a60a::/32": "144196", - "2804:680::/43": "262589", - "2a02:26f7:f048::/48": "36183", - "2a10:4340::/29": "59441", - "2a10:ab00::/29": "47285", - "2001:678:e04::/48": "212810", - "2401:2900:3f01::/40": "23679", - "240e::/32": "4134", - "2602:fcff:1::/48": "40676", - "240a:a6ba::/32": "144372", - "240a:a899::/32": "144851", - "2a00:c98::/32": "28753", - "240e:473:a400::/41": "140485", - "2409:8915:3200::/39": "56044", - "2604:6600:2002::/44": "40676", - "2804:80e4::/32": "272419", - "2a0b:7cc0:1::/48": "41652", - "2001:559:2e0::/48": "7922", - "2602:ffa3::/36": "22921", - "2c0f:fb10::/48": "21003", - "2600:9000:f150::/48": "16509", - "2806:2f0:3060::/40": "17072", - "2a0f:2940::/29": "398559", - "2804:7c0:a000::/33": "262316", - "2804:4ea8::/32": "268275", - "2a0c:3880::/29": "44543", - "2001:4e0::/35": "2381", - "2001:678:70::/48": "57801", - "2607:f758:1400::/33": "13649", - "2804:43c8::/32": "267589", - "2804:3918::/32": "266524", - "2a04:d9c0::/32": "20495", - "2a0e:4844::/32": "33823", - "2a0f:b300:1000::/46": "208200", - "2001:559:8348::/48": "33287", - "2001:67c:864::/48": "210887", - "240a:a07c::/32": "142774", - "2600:9000:20d5::/39": "16509", - "2a02:26f7:d4ca::/47": "20940", - "2a0d:fec0:77::/48": "47481", - "2a0f:9400::/45": "139686", - "2a0e:7280::/29": "31477", - "2406:daa0:a0c0::/44": "16509", - "240a:afe6::/32": "146720", - "240e:983:b00::/48": "134420", - "2600:d07:4000::/28": "20161", - "2607:f758:5400::/32": "13649", - "2a04:e802:1d::/32": "57976", - "2001:df0:dc::/48": "38590", - "2600:380:9600::/39": "7018", - "2a01:4f8::/31": "24940", - "2a02:ed04:3410::/33": "50304", - "2a06:3202::/29": "204989", - "2001:559:500::/48": "7015", - "2001:559:5aa::/48": "7922", - "2001:678:864::/48": "210029", - "2804:145c:9000::/33": "263327", - "2a00:65a0::/32": "15930", - "2a01:9680::/32": "57024", - "2a10:7700::/29": "398559", - "2001:559:84b9::/48": "33287", - "2409:8948:9100::/40": "24445", - "2804:3178::/32": "265017", - "2a02:158:fffe::/48": "44946", - "2a02:2e02:1d70::/40": "12479", - "2c0f:fa10::/32": "30844", - "2001:559:8515::/48": "33287", - "2001:7fb:fe03::/45": "12654", - "2804:19a0:2000::/48": "61808", - "2a0d:f9c3::/32": "24953", - "2001:1bc7::/48": "29686", - "2408:8456:8800::/42": "17622", - "240a:a7f5::/32": "144687", - "240a:a91b::/32": "144981", - "2c0f:f078:100::/37": "327939", - "2001:67c:17c4::/48": "3301", - "2402:d000:8129::/45": "9329", - "2804:5c78:5000::/32": "53245", - "2a01:4ba0::/46": "199987", - "240a:a1f7::/32": "143153", - "2804:49b0::/32": "267197", - "2a02:26f7:bf4d::/42": "20940", - "2001:448a:2050::/42": "7713", - "2402:800:35d3::/44": "7552", - "2603:c002:9510::/40": "31898", - "2a02:2168::/29": "42610", - "2001:559:48e::/47": "33657", - "2401:b780:5010::/47": "65435", - "240a:a23a::/32": "143220", - "240a:a41d::/32": "143703", - "240a:af2e::/32": "146536", - "2600:370f:20c3::/42": "32261", - "2a04:4e40:6040::/44": "54113", - "2001:df5:9a80::/48": "134458", - "2403:da40::/39": "138385", - "240a:a074::/32": "142766", - "2603:7::/32": "398789", - "2610:58::/46": "111", - "2604:9cc0::/45": "201106", - "2804:772c::/32": "271160", - "2a02:c2c0::/29": "12513", - "2001:67c:1118::/48": "2119", - "2001:df0:8a80::/48": "139250", - "2406:8e00::/32": "18139", - "2602:fed2:770a::/48": "53356", - "2604:2680:8::/48": "2386", - "2605:1980:107::/38": "13951", - "2801:80:1e11::/48": "14026", - "2801:80:3710::/47": "269346", - "2a01:7d80:a000::/35": "8990", - "2a02:28b7::/32": "51790", - "2405:4800:101::/32": "18403", - "2a0e:b105:6a0::/44": "20473", - "2408:8256:268::/39": "17622", - "2408:8456:c600::/42": "17622", - "2600:1017:a400::/44": "22394", - "2620:0:50f0::/48": "3428", - "2800:a010::/32": "19192", - "2a0b:4340:99::/48": "205610", - "2a0d:12c0::/48": "205804", - "2001:559:7b::/45": "7922", - "2001:67c:3c0::/48": "197495", - "2001:67c:22dc::/48": "31019", - "2a02:26f7:b941::/46": "20940", - "2404:4f00:3044::/48": "394749", - "2405:3a00::/32": "45475", - "2602:feda:d60::/47": "212034", - "2605:9d00::/32": "53767", - "2804:2af0:5::/32": "265126", - "2c0f:e9e0::/32": "22572", - "2402:90c0::/32": "55720", - "240a:a539::/32": "143987", - "240a:ac56::/32": "145808", - "2600:6c38:a96::/44": "20115", - "2804:14d:5600::/40": "28573", - "2001:df0:d::/48": "24088", - "2001:df5:e680::/48": "141492", - "2400:2c1:3000::/48": "4766", - "240a:a0c7::/32": "142849", - "2806:2f0:2103::/48": "17072", - "2405:7600:4000::/35": "23956", - "2605:a900::/45": "46887", - "2405:7f00:9320::/37": "133414", - "240a:a5f3::/32": "144173", - "2604:8600:3000::/33": "14453", - "2804:0:667::/35": "2716", - "2804:7350::/32": "270907", - "2a01:300:10:5::/64": "6461", - "2a06:2800::/29": "25579", - "2001:c20:7000::/44": "3758", - "2401:d800:4a0::/41": "7552", - "2405:1c0:6851::/46": "135062", - "2606:1540:12::/32": "398704", - "2804:37b4::/32": "266430", - "2a00:8080::/32": "43366", - "2403:7f00:2c00::/38": "56300", - "2603:4:1600::/48": "44273", - "2803:fae0::/32": "269956", - "2001:559:85fe::/48": "7015", - "2806:250:24::/46": "28512", - "2001:df0:3780::/47": "131365", - "2404:188::/29": "6619", - "240a:a6c6::/32": "144384", - "2801:1fc:2e::/48": "27951", - "2804:2bb8::/32": "265171", - "2a02:26f7:cac9::/42": "20940", - "2a05:1083:fd00::/42": "209870", - "2001:15e0::/32": "8897", - "2804:40b4::/32": "265976", - "2401:7200::/47": "55328", - "240a:a777::/32": "144561", - "2804:4dbc::/32": "268216", - "2806:230:3012::/48": "265594", - "2a03:1600::/32": "34093", - "2a07:a905:ffef::/48": "204543", - "2401:d800:df30::/41": "7552", - "2403:4000:1a::/32": "24122", - "2408:8459:a010::/42": "17623", - "2c0f:f220::/32": "36924", - "2406:f400:80::/44": "38001", - "240a:ac3c::/32": "145782", - "2001:559:8089::/48": "13367", - "2405:7f00:8000::/39": "133414", - "2804:7e4:8100::/33": "52865", - "2604:5cc0:1fff::/32": "13351", - "2804:4398::/32": "267578", - "2a01:9000::/29": "43424", - "2001:49f0:d0d7::/44": "174", - "2402:4480:304::/48": "138433", - "2406:b400:50::/46": "18209", - "2408:8456:8e40::/39": "17816", - "240a:aec1::/32": "146427", - "2606:1b40:800::/40": "19740", - "2607:fb10:2011::/46": "55095", - "2a05:dfc7:24::/47": "203909", - "2a07:d880::/32": "3214", - "2c0f:7200::/32": "37219", - "2408:8459:1d30::/41": "17622", - "2408:8956:8000::/40": "17622", - "240a:a486::/32": "143808", - "240a:a4e8::/32": "143906", - "2804:6c1c::/32": "270446", - "2a06:7340:1782::/48": "199364", - "2400:9380:8020::/47": "4134", - "2409:8a3c:5100::/32": "24444", - "2804:5410::/32": "268626", - "2a00:12c0::/29": "47215", - "2a01:728::/39": "16347", - "2a0e:aa07:f000::/48": "139742", - "2001:1938:20::/35": "12989", - "2001:4479:c000::/36": "7545", - "2604:d600:c79::/46": "32098", - "2001:559:db::/48": "33657", - "2604:8280::/32": "27618", - "2a0e::/26": "31549", - "2001:550:b801::/38": "174", - "2001:678:1d4::/48": "64449", - "240a:a5e5::/32": "144159", - "2620:1ec:41::/44": "8068", - "2a00:13c8::/46": "25291", - "2001:480:21::/46": "668", - "2001:44c8:41c0::/42": "45430", - "2603:90bd::/32": "11955", - "2a01:8840:8e::/43": "12041", - "2a04:ffc0:1::/48": "59949", - "2c0f:f508::/32": "327754", - "2605:a404:2df::/39": "33363", - "2001:67c:17c0::/48": "204896", - "2401:d800:d310::/42": "7552", - "2602:fe0d::/36": "30168", - "2001:67c:27e4::/48": "198644", - "2804:cb0::/32": "52742", - "2a06:7240:6::/48": "57878", - "2a07:3500:19e0::/48": "38915", - "2001:67c:528::/48": "50222", - "2a00:9560::/29": "58003", - "2001:253:112::/48": "142078", - "2001:44a8::/32": "23836", - "2804:5be8::/32": "268876", - "2a02:26f7:f244::/48": "36183", - "2a07:5c80::/29": "207758", - "2001:df0:2b7::/48": "9555", - "2404:4100::/48": "38185", - "240e:473:9a00::/41": "140485", - "2600:1409:c801::/35": "20940", - "2a02:26f7:f6f1::/46": "20940", - "2a0f:e5c0::/48": "60781", - "2001:4878:c037::/44": "12222", - "2401:f000:2:300::/45": "38477", - "2a00:1ec0:2::/48": "5425", - "2a02:26f7:a6::/48": "36183", - "2a03:fdc0::/32": "8818", - "2408:8459:cd50::/38": "17816", - "2409:8027:2a04::/46": "9808", - "2605:a401:8354::/42": "33363", - "2620:106:3000::/46": "36671", - "2a04:c900:3000::/36": "48096", - "2a0b:d780::/29": "16019", - "2001:559:8710::/48": "33491", - "2409:8c2f:3801::/43": "56041", - "240a:afef::/32": "146729", - "2606:2800:4046::/48": "14210", - "2804:2c08::/32": "265189", - "2a02:348:9d::/42": "35470", - "2a02:e0c0:1000::/38": "9100", - "2403:780::/44": "64098", - "2610:1c0::/45": "11403", - "2a02:4540::/41": "197207", - "2001:559:80fe::/47": "7015", - "2001:559:878f::/48": "7015", - "2408:8957:bd00::/40": "17816", - "2804:5b4c::/32": "268833", - "2a03:3180:f::/48": "47692", - "2001:550:1803::/39": "174", - "2400:b640::/48": "64067", - "240e:473:3d20::/41": "140486", - "2600:370f:73a8::/46": "32261", - "2a02:6c20:807::/48": "201922", - "2a0f:2dc0::/29": "60262", - "2001:678:f68::/48": "211169", - "2403:6380:14::/46": "212237", - "2408:8456:f140::/28": "17816", - "2604:d980::/32": "54235", - "2804:13d0:99c0::/38": "263297", - "2a01:7660::/45": "12843", - "2a03:db80:4c80::/48": "5501", - "2001:559:82d6::/48": "33287", - "240e:438:a440::/38": "4134", - "240e:6bb::/36": "140316", - "2803:ad80:aa1::/48": "42388", - "2406:1400::/48": "24342", - "2620:149:245::/37": "714", - "2804:14c:4300::/40": "28573", - "2804:390c::/32": "266520", - "2a03:4900::/46": "197695", - "2405:8a00:21b2::/45": "55824", - "2406:da70:2000::/40": "16509", - "2600:9000:10cd::/43": "16509", - "2803:de20::/32": "265879", - "2804:14d:2c84::/41": "28573", - "2001:2000:9100::/31": "1299", - "2401:3b40::/32": "132365", - "2405:1c0:6573::/40": "55303", - "2804:4414::/32": "267620", - "2806:230:6024::/48": "265594", - "2806:266:480::/41": "13999", - "2a02:a80::/29": "52126", - "2605:c240::/32": "207976", - "2607:f8f8:1f05::/44": "201106", - "2a02:26f7:f60c::/48": "36183", - "2620:124:6060::/40": "40816", - "2001:388:1031::/45": "7575", - "2001:67c:734::/48": "198656", - "2001:4488:fe62::/30": "7713", - "2607:ff38:4::/32": "22937", - "2a10:2f00:15e::/48": "212227", - "2001:550:2400::/48": "18531", - "2400:8000:5::/46": "4800", - "240e:1a:10::/44": "137702", - "2a03:ae40:ff00::/40": "56511", - "2409:875c::/33": "9808", - "240a:a885::/32": "144831", - "240a:aeff::/32": "146489", - "2804:1680:1040::/32": "263289", - "2001:13c7:6000::/48": "3549", - "2400:dd0d:1003::/34": "7497", - "240a:a0f0::/32": "142890", - "2602:feda:bd0::/48": "140946", - "2620:11a:a024::/47": "36040", - "2a01:a640::/32": "15966", - "2001:4478:1600::/36": "4802", - "240e:3b3:5600::/34": "136199", - "240e:438:7220::/43": "140647", - "2600:1403:ac02::/35": "20940", - "2606:f900:9f01::/34": "812", - "2402:e280:1100::/48": "134674", - "2406:da14::/36": "16509", - "2408:8459:ce50::/39": "17816", - "240a:aa22::/32": "145244", - "2a01:bb22::/31": "14618", - "2400:8b00:e00::/42": "45727", - "2402:800:f810::/42": "7552", - "2602:ffc5:180::/46": "29802", - "2a02:17f9::/32": "35548", - "2001:559:725::/48": "7015", - "2400:cb00:350::/45": "13335", - "2607:e480::/46": "395748", - "2607:fcd0:fa80:5a01::/53": "8100", - "2620:43:4000::/48": "209", - "2800:300:8500::/40": "27651", - "2a01:9700:1280::/46": "8376", - "2a06:8340::/29": "202177", - "2001:550:1402::/47": "397601", - "2408:840d:a900::/42": "17621", - "2409:8c28:6d08::/35": "56041", - "240a:a712::/32": "144460", - "2620:0:d30::/48": "22920", - "2804:14c:bd87::/41": "28573", - "2804:3f10:4203::/34": "262566", - "2001:df7:ed00::/48": "138806", - "2402:1200:9::/43": "24523", - "2402:7d80:6666::/48": "63583", - "2402:e7c0:80::/37": "59078", - "2408:8256:3399::/48": "17816", - "2600:1012:b0d0::/42": "6167", - "2800:160:18a4::/41": "14259", - "2800:490:4000::/36": "27951", - "2a06:1b00:9a::/39": "8302", - "2001:16f8:4001::/32": "25525", - "2604:e500::/32": "6461", - "2a06:2540::/29": "44994", - "2a0e:b107:3f0::/46": "57883", - "2001:678:660::/48": "203829", - "2408:8256:36a0::/39": "17816", - "240e:5e:1000::/42": "134773", - "2605:f440:5654::/40": "50555", - "2a04:f8c0::/29": "201698", - "2408:8459:2c20::/44": "17816", - "2620:5e:c000::/48": "393304", - "2620:11c:1001::/48": "46764", - "2001:fb0:101c::/48": "55476", - "2404:2000:3100::/32": "23905", - "2620:4e::/48": "11872", - "2804:532c::/39": "268568", - "2806:230:4006::/48": "265594", - "2a0f:9400:7200::/40": "206938", - "2600:141b:b001::/36": "20940", - "2620:10f:400f::/48": "10390", - "2406:f0c0:106::/48": "138654", - "2605:48c0::/32": "397504", - "2a05:d018::/36": "16509", - "2001:559:86fe::/47": "33654", - "2001:579:b1c4::/36": "22773", - "2600:6c38:716::/47": "20115", - "2607:f110:32::/45": "21889", - "2804:5e7c::/32": "269036", - "2a02:26f7:e0cd::/42": "20940", - "2a04:4e40:7810::/42": "54113", - "2001:67c:27d4::/48": "42177", - "2001:dce:5::/48": "133532", - "2001:df0:245::/48": "132020", - "2804:4ec:1300::/37": "28668", - "2a00:5800::/32": "198500", - "2a03:c80::/32": "8829", - "2a04:a9c0::/29": "35574", - "2402:800:fbd0::/37": "7552", - "2803:58a0::/32": "266811", - "2a0b:2900:216d::/38": "48582", - "2001:aa8::/32": "20621", - "240a:a8d7::/32": "144913", - "240e:3b6:8200::/35": "140316", - "2803:9800:9031::/45": "11664", - "2001:559:c12d::/48": "13367", - "2804:354:a::/48": "262874", - "2a05:dcc0::/29": "15600", - "2804:13d8::/32": "262669", - "2a02:26f7:cd4c::/48": "36183", - "2a02:26f7:f3c8::/48": "36183", - "2001:559:8135::/48": "7922", - "2001:559:8434::/48": "7015", - "2406:3100::/32": "9411", - "240a:a4a0::/32": "143834", - "240a:ac20::/32": "145754", - "2a02:ec00::/29": "25540", - "240a:ab08::/32": "145474", - "2600:6c38:8b9::/41": "20115", - "2806:310:2b::/45": "16960", - "2402:800:35ee::/38": "7552", - "2001:fd8:161::/46": "4775", - "2600:6c38:194::/44": "20115", - "2604:280::/32": "6653", - "2606:34c0:1::/48": "398810", - "2801:80:39d0::/48": "271047", - "2a01:9fa0::/32": "29316", - "2607:f7a8:602::/48": "46887", - "2a0d:5540::/46": "210269", - "2604:a880::/45": "14061", - "2a04:7e80::/29": "50794", - "2a05:10c0::/29": "207594", - "2001:df4:2d00::/48": "135905", - "2801:80:1400::/48": "11097", - "2804:70c0:32::/48": "270746", - "2a01:5400::/32": "12775", - "2a03:8640::/32": "8491", - "2a06:7244::/32": "57878", - "2a0e:6902:2000::/36": "57695", - "2001:559:1bb::/48": "7922", - "2001:67c:2dec::/48": "41617", - "2001:16a2:c000::/40": "39891", - "2001:49d0:8800::/33": "2495", - "2406:3000:7::/44": "4657", - "240a:a19b::/32": "143061", - "2600:6c38:f14::/47": "20115", - "2001:559:242::/48": "7016", - "2405:2000::/32": "6453", - "2408:8956:2600::/40": "17622", - "2804:4c74::/32": "267371", - "2804:653c::/32": "269477", - "2a02:26f7:cdc1::/46": "20940", - "2a06:6540:1241::/48": "8220", - "2603:903e::/32": "33363", - "2804:2e44::/32": "265335", - "2a0f:c640::/48": "34798", - "2001:418:9807::/48": "27435", - "2605:a900:d::/35": "46887", - "2a0d:1f00::/29": "39122", - "2a0f:5707:af07::/44": "211358", - "2803:c200::/47": "22411", - "2804:3108::/32": "264988", - "2a02:26f7:b589::/42": "20940", - "2a02:26f7:f741::/46": "20940", - "2a03:20::/32": "200561", - "2a04:1c0::/29": "57795", - "2a09:bac0:26::/44": "13335", - "2606:ae00:6480::/36": "7287", - "2801:80:1260::/44": "263857", - "2804:170::/32": "28131", - "2a0d:7680::/48": "206576", - "2001:559:67::/48": "7015", - "240a:a726::/32": "144480", - "2806:20d:1614::/44": "32098", - "2a00:8d40::/33": "29584", - "2a11:3800::/29": "43624", - "2001:57a:500::/46": "22773", - "2001:67c:390::/48": "51857", - "2600:1400:1000::/48": "6128", - "2620:135:604a::/45": "22697", - "2a0b:4340:41::/48": "41780", - "2804:22c:e124::/35": "22689", - "2a00:8007:ff00::/40": "197898", - "2a05:b740::/29": "210026", - "2a01:8840:9a::/45": "12041", - "2001:67c:798::/48": "15404", - "2401:d800:f110::/42": "7552", - "2600:6c38:339::/41": "20115", - "2607:f2c0::/32": "5645", - "2610:b0:401c::/47": "21433", - "2804:3ab4:f800::/37": "266104", - "2806:230:202e::/48": "265594", - "2a03:62a0:3501::/48": "1759", - "2a04:ff00:b00b::/48": "200299", - "2a0b:1cc0::/29": "42149", - "2001:b28:a70d::/64": "42765", - "2408:8957:3100::/40": "17816", - "2620:45:2000::/48": "577", - "2a05:d480::/29": "57795", - "2001:4878:102::/47": "12222", - "2600:1005:b170::/33": "22394", - "2804:214:4103::/32": "26615", - "2804:23c8::/32": "264182", - "2804:7934::/32": "271291", - "2001:1248:84ef::/43": "11172", - "2605:3c80:fa::/48": "20115", - "2001:df0:2c5::/48": "58629", - "2620:1ec:35::/41": "8075", - "2804:7f30:7c00::/32": "271672", - "2a0a:9b80::/32": "200665", - "2400:c800:620::/33": "4515", - "2402:800:71e0::/38": "7552", - "2406:1500:1::/48": "132579", - "2406:fb40::/32": "139841", - "2804:36f0::/34": "266381", - "2a0d:bc2::/29": "29384", - "240e:473:9350::/40": "4134", - "2804:8188::/32": "272460", - "2806:370:5390::/44": "28403", - "2409:8b50::/30": "9808", - "240e:978:6100::/36": "4134", - "2804:62b8::/32": "269314", - "2a02:26f7:be84::/48": "36183", - "2a0e:b107:b50::/44": "213064", - "2606:6800::/40": "394597", - "2804:4930::/32": "267169", - "2a02:2891:4::/48": "51185", - "2401:cf80:6110::/40": "55303", - "2804:354:a1b1::/45": "262874", - "2a01:8840:16::/44": "12041", - "2606:400::/32": "14051", - "2607:500::/32": "17049", - "2804:6a14:200::/32": "61601", - "2a01:9200::/32": "200507", - "2a0f:bf00:140::/29": "208196", - "2602:ffc5:168::/48": "13830", - "2804:487c:20a::/43": "267124", - "2a00:4a00:8000::/33": "39356", - "240a:a045::/32": "142719", - "240a:a4aa::/32": "143844", - "2607:fae0:245::/48": "15562", - "2803:9800:9039::/40": "11664", - "2a00:5980::/32": "197869", - "2a02:26f7:d1cd::/42": "20940", - "2001:1bf8::/29": "47814", - "2408:8456:2240::/39": "17816", - "2001:43f8:2a0::/48": "32279", - "2603:c013:4000::/36": "31898", - "2604:7c40::/38": "31867", - "2606:ee00:5::/48": "15102", - "2803:f7a0::/32": "267783", - "2804:64f8::/32": "269460", - "2a02:928::/32": "34108", - "2a02:2908::/29": "50010", - "2001:480:253::/48": "228", - "2803:6900:543::/48": "52423", - "2804:174c::/32": "263135", - "2a02:28:7::/48": "60490", - "2a03:85c0:140::/48": "24989", - "2a07:8c80::/29": "202789", - "2a0a:6680:1000::/36": "203500", - "2001:7fa:5::/48": "23911", - "2408:840c:1100::/40": "17621", - "2001:559:822f::/48": "33287", - "2803:a240::/32": "263805", - "2a00:4802:2610::/36": "13124", - "2a03:6800::/32": "47902", - "2402:800:9747::/43": "7552", - "2409:8904:2740::/36": "24547", - "240a:a610::/32": "144202", - "2804:14d:8e89::/45": "28573", - "2001:df2:b680::/48": "140070", - "2001:df6:7b80::/48": "142059", - "2600:140f:dc00::/48": "55836", - "2804:43f4:30::/41": "267601", - "240a:a498::/32": "143826", - "240e:44d:2080::/41": "4134", - "2801:80:d90::/48": "264471", - "2a02:ad8:24::/38": "12389", - "2607:6004:a100::/40": "397378", - "240a:a3ff::/32": "143673", - "2600:140b:8801::/38": "20940", - "2602:ff01::/48": "396101", - "2804:7878::/32": "271244", - "2001:678:5c::/48": "198147", - "2001:44b8:30c1::/48": "4739", - "2402:800:5bc5::/43": "7552", - "2804:fa8::/32": "53050", - "2c0f:ef78:11::/48": "63293", - "2605:a401:8c0a::/43": "33363", - "2607:f050::/32": "7784", - "2801:16c::/44": "18747", - "2801:16e:6::/42": "19429", - "2a0c:a680::/29": "21331", - "2a0f:9400:802c::/48": "213234", - "2001:678:a50::/48": "24971", - "2408:8459:3610::/44": "17623", - "2804:1a0:2::/32": "28189", - "2804:2654::/32": "264327", - "2605:2800::/40": "6922", - "2801:c4:1e::/48": "265553", - "2806:230:1011::/48": "11888", - "2a02:26f0:4a01::/40": "20940", - "2a0a:b300::/29": "206951", - "2a0d:e940::/36": "35507", - "2001:559:871a::/48": "21508", - "2001:df2:b780::/48": "140068", - "2804:1a80:8100::/33": "262333", - "2a02:26f7:ee8d::/42": "20940", - "2001:678:c08::/48": "207491", - "240e:b6:1000::/31": "4134", - "2600:1fa0:8010::/39": "16509", - "2607:f028:8::/48": "2173", - "2804:1340::/32": "263524", - "2804:3194::/33": "265024", - "2a05:df01:2::/29": "47891", - "2a09:bac0:31::/48": "13335", - "2a0d:1a45:babf::/33": "57782", - "2a0e:fd45:b01::/42": "44103", - "2001:7f8:5f::/48": "2593", - "2403:4100::/32": "24210", - "2603:fa30::/29": "262287", - "2606:2800:7100::/48": "15133", - "2804:2b3c::/32": "265142", - "2a02:778::/32": "48284", - "2001:559:8151::/48": "7016", - "2606:4700:55::/46": "13335", - "2804:668c::/32": "269567", - "2804:7c04::/32": "271470", - "2a02:2278:216::/32": "28907", - "2a07:4a40::/29": "57795", - "2001:41b8::/32": "8365", - "2a02:26f7:e7cc::/48": "36183", - "2405:84c0:faab::/41": "9886", - "2408:8957:e600::/40": "17622", - "240a:a019::/32": "142675", - "2a02:26f7:c388::/46": "36183", - "2402:3c00::/32": "9814", - "2600:6c38:351::/37": "20115", - "2a02:29a8::/37": "60142", - "2a03:b0c0::11/46": "14061", - "2a02:f68::/29": "15542", - "2a07:1c44:7100::/40": "34854", - "2a09:24c0::/32": "209323", - "2001:1248:9aae::/43": "11172", - "2409:8006::/31": "9808", - "240a:a15a::/32": "142996", - "2600:1004:a000::/42": "6167", - "2800:160:10cf::/43": "14259", - "2801:15a:10::/44": "52330", - "2804:2d0::/32": "53230", - "2a00:1c78:2::/29": "25408", - "2001:550:103::/45": "174", - "2001:559:142::/48": "20214", - "2402:800:5a63::/43": "7552", - "2405:8c0::/47": "139301", - "2408:8956:dc00::/40": "17622", - "240e:44d:4580::/41": "4134", - "2605:a404:b0::/47": "33363", - "2806:2f0:1283::/48": "22884", - "2001:559:254::/48": "7922", - "2001:559:52a::/48": "33491", - "2001:df0:201::/48": "1221", - "2001:4830:200::/40": "25623", - "2408:8256:3d6c::/43": "17623", - "240e:44d:3b80::/41": "4134", - "2804:5ff4::/32": "269136", - "2a02:888:0:302::/53": "47794", - "2a02:26f7:d005::/46": "20940", - "2a0e:9640::/29": "44592", - "2001:559:8454::/48": "33651", - "2600:1000:b1d0::/42": "6167", - "2801:0:210::/48": "19429", - "2a01:8840:95::/48": "207266", - "2a02:70:2::/39": "3326", - "2a07:84c0::/29": "43770", - "240e:a66:1a00::/34": "140330", - "2001:559:8085::/48": "33287", - "2001:678:b34::/48": "208051", - "2401:3c0:10d::/48": "45528", - "2403:8300:80bf::/48": "55423", - "2a02:26f7:f5c5::/46": "20940", - "2a05:df00::/31": "47891", - "2a0a:7880:101::/48": "206677", - "2a0c:3d40::/32": "204315", - "2001:678:59c::/48": "44973", - "2a05:6200:74::/48": "60068", - "2a0c:b641:5f0::/44": "212832", - "2a0c:b641:7a1::/46": "207268", - "2a04:c440:2b00::/33": "2047", - "2001:67c:256c::/48": "48091", - "2404:87c0::/32": "138652", - "2409:8c5c::/26": "9808", - "2804:10bc:500::/32": "263646", - "2804:75a0::/32": "271059", - "2a00:7280::/32": "56745", - "2a01:b740:a10::/48": "6185", - "2405:1c0:6465::/43": "55303", - "240a:a7ee::/32": "144680", - "2804:2250::/33": "262756", - "2c0f:ea00::/32": "327733", - "2001:678:b18::/48": "15507", - "2001:4d38::/32": "12850", - "2409:8924:2100::/38": "56046", - "240a:a68a::/32": "144324", - "2604:2100::/32": "3634", - "2806:2ed::/32": "28398", - "2a0d:3842:1180::/48": "57629", - "240e:982:d500::/40": "134769", - "2801:80:720::/48": "263559", - "240a:ae03::/32": "146237", - "2a0a:2cc0::/29": "206355", - "2001:67c:28a0::/48": "202592", - "2a00:1bd0::/32": "39704", - "2404:f801:802d::/33": "3598", - "2a0e:1d40::/29": "212655", - "2001:468:2630::/48": "396955", - "2409:8904:d170::/40": "24547", - "240e:3bb:9200::/36": "140317", - "2602:feb4:1d0::/44": "25961", - "2804:56e8::/32": "268031", - "2a00:86c0:200a::/42": "2906", - "2405:8080::/33": "23664", - "2801:80:a80::/44": "11242", - "2804:68a0::/32": "269705", - "2a02:26f7:f08c::/48": "36183", - "2a04:4e40:f010::/41": "54113", - "2a06:c7c0::/29": "198024", - "2401:da40::/32": "134548", - "2804:7dcc::/32": "271583", - "2a02:c50::/36": "51531", - "2a09:7:1::/48": "23959", - "2607:f688::/32": "26935", - "2804:1dac::/32": "264385", - "2400:cb00:362::/44": "13335", - "2408:8956:4000::/40": "17622", - "2600:141c:3001::/33": "20940", - "2602:feb4:120::/44": "25961", - "2a02:26f7:f709::/46": "20940", - "2001:18d8::/32": "14", - "2406:7400:b7::/44": "24309", - "2a06:ac00::/29": "41405", - "2a0a:9240::/32": "201543", - "2620:122:8002::/48": "399730", - "2801:80:35c0::/47": "269086", - "2804:71b0::/32": "270805", - "2804:7300::/32": "270889", - "2a00:de61:100::/38": "16509", - "2a01:cd00:8020::/48": "28708", - "2001:678:108::/48": "196682", - "2408:8456:3a50::/39": "17816", - "2801:84::/47": "263300", - "2804:710c::/32": "270763", - "2a0d:60c0::/32": "59504", - "2a0e:4840::/32": "33823", - "2a0e:b107:da0::/44": "142438", - "240a:abcd::/32": "145671", - "2804:fb4::/34": "263599", - "2402:800:b650::/39": "7552", - "2607:4000:400::/40": "73", - "2607:4e80::/32": "15165", - "2804:689c::/32": "269704", - "2001:df5:580::/48": "138243", - "2800:bf0:826c::/43": "52257", - "2804:3eb0::/32": "266615", - "2a01:8fc0::/32": "8913", - "2a02:26f7:bccd::/46": "20940", - "2a03:90c0:999f::/48": "199524", - "2001:559:58::/48": "7922", - "2001:44b8:4044::/48": "7545", - "2600:140b:d801::/37": "20940", - "2a05:b2c2::/31": "12414", - "2001:559:c163::/48": "7015", - "2001:ce0:2300::/37": "3662", - "2402:800:70f0::/39": "7552", - "2605:3380:4705::/40": "12025", - "2a02:26f7:c209::/42": "20940", - "2001:678:cf8::/48": "38974", - "2403:d340::/32": "136462", - "2404:f340:4000::/34": "139190", - "2806:2f0:1320::/34": "17072", - "2a00:19c0::/32": "15922", - "2a0e:97c0:15ba::/48": "20473", - "2001:980::/29": "3265", - "2409:8c30:1210::/39": "9808", - "2a04:a470:10::/48": "2116", - "240e:d6:2000::/33": "4134", - "2a02:26f7:57::/48": "20940", - "2a04:2f81:2::/47": "61157", - "2a10:a80::/32": "202717", - "2804:30c4::/35": "264973", - "2001:559:8392::/48": "33651", - "2403:cd80::/32": "135025", - "2409:8907:6e20::/35": "24547", - "2409:8b1e::/31": "24400", - "240a:a057::/32": "142737", - "240e:44d:2480::/41": "4134", - "240e:473:600::/41": "140485", - "2a01:ba80::/32": "49063", - "2a02:26f7:91::/48": "20940", - "2a0e:97c0:1200::/40": "20473", - "2404:2680::/32": "9618", - "2a01:190:1500::/48": "206159", - "2803:5200:3000::/32": "64116", - "2804:28e4:e002::/42": "28260", - "2a00:5100::/32": "35046", - "2a0c:ec80::/32": "204659", - "2001:67c:5f4::/48": "51815", - "240e:44d:5c80::/41": "4134", - "2a00:5d80::/32": "20860", - "2c0f:f670::/32": "37532", - "2001:978:9e00:1::/34": "174", - "2804:1568:c100::/34": "263387", - "2a06:9a80::/29": "60241", - "2001:df4:3480::/48": "140905", - "240e:3b7:2c00::/35": "134774", - "2606:2e00:8014::/44": "36351", - "2800:160:1d84::/44": "14259", - "2001:550:100:6::/47": "174", - "240a:a10b::/32": "142917", - "2610:188::/32": "14511", - "2001:559:4d7::/48": "33657", - "2a0c:180::/29": "39419", - "2a02:26f7:d580::/48": "36183", - "2001:ee0:9840::/39": "45899", - "2401:d800:fee0::/39": "7552", - "240a:a41b::/32": "143701", - "240d:c000:1000::/34": "132203", - "2602:feb4:260::/44": "25961", - "2607:fda8:4::/48": "54004", - "2a01:a580::/29": "30972", - "2402:800:95c5::/42": "7552", - "2a02:26f7:c608::/47": "36183", - "2a02:26f7:cb09::/46": "20940", - "2c0f:f1c8::/32": "37037", - "240e:964:2000::/37": "4134", - "2a03:a500::/32": "60087", - "2402:800:5001::/39": "7552", - "2406:7700::/32": "132694", - "2607:fb58:2::/34": "36086", - "2a00:7540::/29": "25145", - "2a02:888::/54": "47794", - "2804:2cc4::/32": "265242", - "2a04:cc40::/29": "59770", - "2a02:2668:3a00::/33": "16345", - "2401:7500:ff1::/48": "133296", - "2408:840c:8200::/40": "17621", - "2803:760:7800::/32": "269816", - "2a02:26f7:d000::/48": "36183", - "2001:559:830f::/48": "7922", - "2001:559:8638::/48": "33491", - "2400:f8c0:2::/48": "135517", - "2600:1409:8000::/48": "35994", - "2401:f9c0:2600::/40": "133398", - "2404:78c0::/47": "135126", - "240e:355:5c00::/34": "134419", - "2804:2ea8::/32": "262642", - "2a00:7180:8000::/46": "208157", - "2a04:9600::/29": "199766", - "240a:a4b9::/32": "143859", - "2604:8600::/34": "14453", - "2607:f2b1:4001::/48": "30614", - "2001:678:50::/48": "57382", - "240e:978:1a00::/37": "4134", - "2600:370f:5284::/43": "32261", - "2607:f3a0:4000::/32": "23342", - "2a02:fc8:2::/48": "8218", - "2a04:f7c0::/30": "201766", - "2a0e:8f02:f036::/48": "210915", - "240a:a43d::/32": "143735", - "2607:7c80:53::/48": "398987", - "2a02:26f7:f184::/48": "36183", - "2403:e040:8000::/33": "16509", - "240e:3b7:6400::/35": "140312", - "2803:f520::/32": "266695", - "2a02:26f7:dc88::/48": "36183", - "2001:4878:2062::/47": "12222", - "2402:5ac0:b00::/32": "137409", - "2604:d600:151b::/45": "32098", - "2a02:2698:4400::/38": "42116", - "2400:9380:9020::/47": "4809", - "2405:7000:2c00::/40": "18281", - "2408:84f3:b640::/36": "17816", - "2409:8915:8c00::/39": "56044", - "2001:df3:a880::/48": "4826", - "2401:d800:52a0::/41": "7552", - "2600:1f01:4890::/47": "16509", - "2605:6480::/32": "92", - "2a06:b00::/29": "3342", - "2a0e:6340::/29": "58154", - "2001:559:89::/48": "20214", - "2408:8256:2d6a::/48": "17816", - "2a01:66a0::/32": "202208", - "2401:af80:9016::/33": "59103", - "240e:fb:8000::/35": "134772", - "2604:3545::/30": "399587", - "2001:579:5a94::/44": "22773", - "2001:43f8:1390::/48": "328478", - "2602:ffc5:141::/48": "203027", - "2a02:4540:5040::/46": "197207", - "2a03:5a00:12::/48": "207079", - "2a09:7184::/30": "39614", - "2a02:26f7:ec50::/48": "36183", - "2001:559:219::/48": "33657", - "2401:ff80:1981::/46": "133954", - "2409:8008:d0::/47": "9808", - "2409:805e:1100::/36": "9808", - "2602:803:2000::/40": "11894", - "2804:3244::/43": "265066", - "2a00:5080::/32": "31400", - "2a0f:4400::/29": "48305", - "2402:a300:4006::/36": "55427", - "2803:f7e0:1000::/43": "271773", - "2804:1f4a::/32": "271354", - "2804:2060::/32": "264489", - "2a04:f580:9210::/48": "4809", - "2001:67c:1484::/48": "28917", - "2001:448a:4010::/42": "7713", - "2402:9d80:103::/48": "131429", - "2404:c740::/47": "131655", - "2a00:1850:2a1::/48": "29357", - "2a03:8b60::/45": "29256", - "2a03:c340::/32": "57324", - "2a00:74c0::/39": "6659", - "2001:678:498::/48": "44574", - "2403:9800:12::/42": "4648", - "2604:9e80::/32": "30396", - "2804:3944::/32": "266022", - "2804:5ba8::/34": "268861", - "2804:626c::/32": "269296", - "2804:764c::/32": "271102", - "2a02:2698:2800::/38": "41668", - "2001:67c:1010::/47": "8674", - "2401:4900:5818::/42": "45609", - "2804:724c::/32": "270845", - "2a01:4f0:4017::/48": "31027", - "2404:3d00:4138::/45": "3573", - "2a02:26f7:58::/48": "36183", - "2600:1411:2001::/33": "20940", - "2a01:5b0:a::/43": "8391", - "2a02:26f7:f94d::/42": "20940", - "2a0a:2640::/29": "200428", - "2600:c02::/35": "12182", - "2804:204:219::/45": "28186", - "2804:104c:2400::/40": "263629", - "2a0f:9400:8024::/47": "53356", - "2001:559:1e4::/48": "33651", - "2001:559:8702::/48": "7015", - "240a:a0c4::/32": "142846", - "2605:e2c0:100::/40": "59761", - "2610:a8::/32": "600", - "2401:ff80:1c03::/45": "133954", - "2403:fdc0:7000::/32": "7175", - "2804:1d58::/32": "264362", - "2804:1e64::/32": "264426", - "2a03:9d40:1000::/38": "41095", - "2a0a:e200:1510::/48": "199156", - "240e:438:5a40::/37": "4134", - "2600:400:8f00::/33": "15147", - "2803:a000::/32": "27745", - "2a01:b740:16::/36": "714", - "2a0e:b107:86c::/48": "211840", - "2409:8904:a440::/39": "24547", - "2606:2480::/32": "36511", - "2804:5050::/32": "268381", - "2a00:1288:ef99::/41": "10310", - "2a09:27c0::/29": "209531", - "2408:840c:7900::/40": "17621", - "2a02:26f7:f748::/48": "36183", - "2a03:4600::/32": "44334", - "2405:2a00::/32": "55388", - "240a:a9ae::/32": "145128", - "240a:a9c1::/32": "145147", - "240e:6b9:2000::/36": "140312", - "2a01:9700:13fc::/37": "8376", - "2001:778::/32": "2847", - "2402:800:9155::/42": "7552", - "2402:e380:31a::/48": "141376", - "2408:8459:9250::/37": "17816", - "2a00:44a0::/32": "44020", - "2a02:28:e::/29": "8359", - "2a0b:d0c0::/29": "51178", - "2402:b780::/41": "64047", - "2804:5f14::/32": "269075", - "2001:559:c1b4::/48": "33668", - "2405:7f00:9620::/36": "133414", - "240a:a664::/32": "144286", - "2607:fb90:5700::/34": "21928", - "2800:200:e261::/40": "12252", - "2804:531c:228::/43": "268564", - "2a0c:1880::/29": "211594", - "240a:af7a::/32": "146612", - "2620:130:3011::/46": "62861", - "2a01:b740:a19::/48": "714", - "2a02:6700::/32": "51695", - "2403:6b80:ffff::/48": "2635", - "2405:5700::/32": "17882", - "240c:4082::/29": "38365", - "2620:171:a0::/44": "715", - "2804:14c:4e1::/45": "28573", - "2806:2f0:81e0::/38": "17072", - "2a0c:3340::/29": "39602", - "2001:6d0:ffc4::/48": "21416", - "2604:8c00::/32": "4474", - "2606:1540::/43": "398704", - "2804:63b0::/32": "269377", - "2a04:ad80::/47": "44684", - "2001:df2:4280::/48": "139826", - "2409:807b::/29": "9808", - "2803:e40:84::/44": "27797", - "2a05:bc0::/32": "8495", - "2001:1a68:22::/44": "15694", - "240a:a2c1::/32": "143355", - "2a00:1e50::/33": "34006", - "2402:4000::/35": "18001", - "2408:8957:b500::/40": "17816", - "240e:108:1011::/41": "4134", - "2607:fb10:70c0::/43": "2906", - "2804:7924::/32": "271287", - "2401:c680:f::/48": "134371", - "2408:8459:450::/38": "17816", - "2605:29c0::/32": "397312", - "2a02:df8::/29": "20799", - "2a02:26f7:ceca::/42": "20940", - "2406:daa0:6060::/44": "16509", - "2600:1404:d401::/38": "20940", - "2804:2198::/38": "52807", - "2a02:26f7:f801::/46": "20940", - "2001:ce0:8::/48": "7651", - "2402:3300:cac2::/48": "56300", - "2408:84e1::/39": "4808", - "240a:a3bb::/32": "143605", - "2001:559:308::/47": "33491", - "2001:67c:1400::/46": "29670", - "2604:d600:15be::/41": "32098", - "2a0a:4dc0:1::/48": "206168", - "2403:5000:166::/43": "9304", - "240e:3ba:7600::/39": "140313", - "240e:3be:9c00::/34": "140310", - "240e:a53:5c00::/34": "134419", - "2001:678:6::/48": "44358", - "2408:84f3:3210::/44": "17623", - "240e:838:10::/42": "4134", - "2a02:26f7:bac6::/47": "20940", - "2a02:26f7:eb40::/48": "36183", - "2405:7140::/47": "132335", - "2408:8459:650::/36": "17816", - "2402:800:b8c0::/42": "7552", - "2408:8459:aa10::/42": "17623", - "2408:8756:ca0::/41": "136958", - "2804:14c:75a6::/47": "28573", - "2804:404c::/43": "265950", - "2a02:26f7:e5::/48": "20940", - "2405:8180:f00::/35": "135478", - "2600:1408:b401::/36": "20940", - "2a02:26f7:f4c4::/48": "36183", - "2620:134:6006::/47": "33538", - "2804:395c::/32": "266026", - "240a:a93b::/32": "145013", - "2600:2c01:5000::/36": "11383", - "2001:579:8a0::/43": "22773", - "2001:1560::/32": "34171", - "2404:5780:3::/48": "9558", - "2602:ffc5:500::/40": "26548", - "2803:9800:ba04::/33": "11664", - "2a0a:2784::/32": "206774", - "2406:8800:9025::/44": "17465", - "2600:8807:89a6::/41": "22773", - "2804:60fc::/32": "269204", - "2001:559:866d::/48": "13367", - "2001:4868:10c::/48": "62795", - "2804:88:8000::/47": "28135", - "2a03:2880:f16c::/40": "32934", - "2001:1248:5ae8::/43": "11172", - "2409:8924:af00::/35": "56046", - "240a:abd5::/32": "145679", - "2804:2468::/32": "264221", - "240a:aa6f::/32": "145321", - "2600:c05::/34": "11855", - "2605:b100:700::/41": "577", - "2001:559:5a5::/48": "33659", - "2600:1417:16::/48": "7473", - "2602:ff75::/36": "8100", - "2803:d100:e740::/43": "52362", - "2a0a:1ac0::/29": "206897", - "2001:4830:c000::/40": "27552", - "2605:a404:f0::/44": "33363", - "2a02:26f0:be::/47": "20940", - "2a02:26f7:ba05::/46": "20940", - "2a0e:9846::/32": "52000", - "2001:df0:ac00::/44": "133729", - "2001:fd8:21e4::/38": "4775", - "2001:489a:2000::/33": "8070", - "2401:d800:7b40::/42": "7552", - "2406:e000:31a::/42": "23655", - "2607:ae80:192::/48": "26558", - "2804:5248:9000::/33": "268508", - "2a02::/32": "12684", - "2401:d800:7670::/40": "7552", - "2806:20d:1d1f::/42": "32098", - "2001:df2:d100::/48": "136707", - "2804:2fc4:b::/32": "264911", - "2804:4184::/32": "267438", - "2a10:6d40::/29": "30633", - "2c0f:fe98::/32": "30844", - "2001:468:1a00::/45": "4557", - "2001:4998:ef6b::/48": "36647", - "2409:8924:4100::/38": "56046", - "2600:6c38:f0a::/45": "20115", - "2605:a404:29a::/45": "33363", - "2607:fda8:8003::/45": "54004", - "2620:bd:c000::/48": "393638", - "2001:ee0:c140::/38": "45899", - "2402:800:3571::/44": "7552", - "2405:1c0:6865::/43": "55303", - "2a02:26f7:e000::/48": "36183", - "2402:5680:6000::/36": "133798", - "2403:4240::/32": "138029", - "2001:67c:11b0::/48": "24711", - "2001:ac8:6a::/40": "9009", - "2804:18a4::/32": "61945", - "2804:64c4::/32": "269447", - "2405:b40:32::/45": "55674", - "2620:12f:2000::/42": "32726", - "2001:4b08::/32": "29452", - "2401:d800:810::/42": "7552", - "2407:9940::/48": "18403", - "2804:b:c008::/48": "14840", - "2a02:330:5::/46": "31261", - "2a06:6000::/29": "20802", - "2400:b340::/32": "139901", - "2a10:2f00:129::/48": "213346", - "2402:800:327f::/40": "7552", - "2408:84f3:3220::/43": "17816", - "240a:a703::/32": "144445", - "2600:380:2000::/40": "20057", - "2607:da80::/32": "13760", - "2800:160:1553::/42": "14259", - "2800:160:1a96::/44": "14259", - "2001:e60:d3b0::/45": "4766", - "2001:1248:9c9f::/42": "11172", - "2404:f4c0:ea00::/40": "140731", - "240a:ae12::/32": "146252", - "2001:df0:a180::/48": "135977", - "2400:a980:1500::/36": "133111", - "2409:8c20:5224::/37": "56046", - "240a:a06f::/32": "142761", - "2001:ee0:ef00::/40": "45899", - "2604:3d09:9000::/33": "6327", - "2606:6200::/35": "21570", - "2620:ba:8000::/48": "2386", - "2804:39a8::/32": "266042", - "2a0b:b87:fff0::/44": "7489", - "2001:559:4a0::/48": "33657", - "2401:d040::/32": "136988", - "2600:370f:726b::/40": "32261", - "2803:bc40:8106::/44": "52468", - "2804:74dc::/32": "271008", - "2a02:2e02:8560::/40": "12479", - "2a07:b00::/29": "29468", - "2001:559:87::/48": "33657", - "240a:a772::/32": "144556", - "2620:10a:90cc::/48": "11133", - "2a0f:3400::/29": "203698", - "2a03:b8c0:1a::/45": "396253", - "2001:559:8448::/48": "22909", - "2407:1e40::/45": "141732", - "2409:8a20::/32": "56046", - "240a:ab9e::/32": "145624", - "2604:cbc0::/32": "398143", - "2604:d600:1156::/44": "32098", - "2a02:ee80:41ca::/47": "21433", - "2406:daa0:2020::/44": "16509", - "2602:ffc5::/42": "7489", - "2001:490:4a00::/46": "1248", - "2402:1f00::/32": "16276", - "2602:ffe2:53::/45": "53334", - "2a00:1678:2470::/48": "49453", - "240a:ac3e::/32": "145784", - "240a:aedc::/32": "146454", - "2806:230:400b::/48": "11888", - "2001:bf7:1330::/41": "44194", - "2401:d800:5940::/42": "7552", - "2600:140f:3e01::/33": "20940", - "2606:7d80:9000::/33": "2707", - "2a00:fea0::/32": "60592", - "2a07:ad00::/30": "200544", - "2001:559:c066::/48": "7922", - "2001:df3:8e80::/48": "140599", - "2403:1940:100::/48": "137935", - "240a:ab81::/32": "145595", - "2a03:3f40::/47": "50673", - "2001:559:83a5::/48": "33652", - "2602:ff84:e::/48": "36351", - "2a02:45c0:2::/45": "59675", - "2a04:8040::/29": "44527", - "2a06:6541:2001::/48": "46887", - "240a:ab84::/32": "145598", - "2606:b400:8300::/47": "1215", - "2804:4c14:fa01::/39": "267348", - "2001:559:d4::/47": "33652", - "2001:c20:48b7::/44": "9255", - "2401:4900:43a0::/44": "45609", - "2a04:8380::/29": "39397", - "2a07:9b40:d00f::/48": "39702", - "2a0d:b00:3501::/46": "205862", - "2a10:4d80::/29": "203447", - "2001:559:8086::/48": "33657", - "2607:f740::/47": "36236", - "2804:5e48:f000::/40": "269023", - "2a00:12d0::/29": "13101", - "2a02:ee80:4078::/45": "3573", - "2a0f:b80::/29": "34549", - "2001:510:20b::/45": "376", - "2001:67c:2710::/48": "57823", - "2001:924::/30": "8220", - "2001:738:4::/48": "12303", - "2604:6400:4650::/32": "29974", - "2a10:1340::/29": "206775", - "2402:6800:731::/44": "22822", - "2606:2800:5042::/48": "15133", - "2a02:26f7:cd85::/46": "20940", - "2a00:6901:b005::/48": "20926", - "2a02:26f7:f781::/46": "20940", - "2a06:e040::/33": "198507", - "2001:550:40e::/39": "174", - "2001:559:c2e3::/48": "7922", - "2804:7e80::/32": "271628", - "2a0b:b87:ffb6::/48": "207649", - "240a:ab1c::/32": "145494", - "240e:108:8e::/48": "4134", - "2606:2d00::/36": "32478", - "240e:438:840::/38": "4134", - "2804:3df8:4::/33": "266566", - "2a10:1b80::/32": "8896", - "2001:550:2608::/36": "174", - "2001:559:838f::/48": "7922", - "2600:370f:37e5::/36": "32261", - "2a01:1f8::/32": "34568", - "2001:559:c130::/48": "33659", - "2408:8956:f240::/40": "17622", - "2607:fdf0:5ef2::/45": "8008", - "2a00:17a0::/32": "34867", - "2a02:26f7:d9c0::/48": "36183", - "240a:ad27::/32": "146017", - "2804:3e40:f400::/36": "266583", - "2404:2400:101::/44": "56132", - "2405:5e00::/32": "3257", - "2409:8904:5a40::/42": "24547", - "2a10:5900::/29": "208256", - "2a07:a40::/44": "48821", - "2001:df2:fc00::/48": "59111", - "2001:43f8:13f0::/48": "328541", - "2400:5000::/32": "38826", - "2402:1200::/47": "24523", - "240a:ace6::/32": "145952", - "2600:1007:b0e0::/43": "22394", - "2a01:c50e:aa00::/35": "12479", - "2001:559:c0f2::/48": "7015", - "2001:67c:1b4::/48": "50188", - "2800:160:1c71::/45": "14259", - "2404:f4c0:f900::/47": "139833", - "2409:8d80:b000::/25": "9808", - "2803:2300::/32": "17069", - "2804:290c::/32": "263994", - "2804:5e28::/32": "269015", - "2001:559:c2ea::/47": "33659", - "2001:4d78:fe20::/46": "15830", - "2408:8456:ce00::/42": "17622", - "2a0c:16c1::/32": "42532", - "2a0c:9a40::/48": "202479", - "2c0f:ed48::/32": "328467", - "2001:678:650::/48": "49472", - "2400:c807::/32": "9263", - "240a:a47e::/32": "143800", - "2a0f:6580::/44": "48292", - "2c0f:fd10::/32": "37013", - "2001:ee0:ec00::/40": "45899", - "2602:fe4f::/36": "396917", - "2800:6f0::/37": "20207", - "2a05:3580:c400::/35": "35807", - "2a09:98c0::/48": "50007", - "2408:840c:5000::/40": "17621", - "2602:fe8c:0:10::/60": "2711", - "2804:6a9c::/32": "270347", - "2a01:9760:3::/32": "62087", - "2001:559:5be::/48": "7922", - "2401:a700::/32": "17726", - "2407:f800:401::/39": "38182", - "2804:269c:fe04::/47": "47065", - "2a02:26f7:ec89::/46": "20940", - "2a0e:b880::/31": "208789", - "2a0f:8c40::/29": "42375", - "2001:253:139::/48": "142105", - "2001:559:166::/48": "7922", - "2604:a240::/32": "53449", - "2406:e00:100::/47": "55740", - "2402:ef0b:6000::/36": "24515", - "2607:4000:300::/40": "14221", - "2620:107:90e1::/48": "22787", - "2800:160:1f95::/46": "14259", - "2804:51c8::/32": "268477", - "2a02:26f7:d850::/48": "36183", - "2001:c10:ff02::/48": "397942", - "2400:4000::/22": "4713", - "240a:a0e7::/32": "142881", - "2600:380:ec80::/41": "20057", - "2804:7020::/32": "270707", - "2a02:26f7:d60c::/48": "36183", - "2404:7600:101::/32": "23853", - "2804:3184::/32": "265021", - "2a04:e080::/29": "201949", - "2a0d:7b40::/29": "60016", - "2404:e200:101::/45": "18353", - "240a:aab3::/32": "145389", - "2804:9a4::/32": "23074", - "2a04:f580:9090::/48": "4809", - "2001:559:2ce::/48": "33659", - "2001:ac0:c800::/48": "12541", - "2a0e:e140::/48": "58255", - "2a0e:e2c1::/32": "42156", - "2001:559:8049::/46": "7922", - "2001:578::/36": "22773", - "2604:880:59::/46": "29802", - "2606:ae00:61c0::/38": "7287", - "2620:11a:a031::/48": "36040", - "2804:49c:31::/48": "7162", - "2a06:b500:2010::/44": "203759", - "2402:9040::/32": "137498", - "2406:2400:f01d::/48": "45287", - "2806:20d:521a::/37": "32098", - "2001:1248:9818::/42": "11172", - "2408:8956:500::/40": "17816", - "240a:ab6a::/32": "145572", - "2602:fe12:11::/48": "62707", - "2001:67c:174::/48": "48345", - "2804:5404::/32": "268623", - "2a03:5f80:8::/46": "50952", - "2401:d800:7340::/42": "7552", - "2404:bf40:86c1::/48": "7545", - "240a:a5c2::/32": "144124", - "2606:e480:400::/33": "55083", - "2607:9e80::/35": "397068", - "2a02:148::/29": "1680", - "2a02:26f7:c8d0::/48": "36183", - "2804:2fa4::/32": "52771", - "2c0f:e970::/32": "327750", - "2804:7118::/32": "270766", - "2001:df4:e180::/48": "140751", - "2400:adcc::/39": "9541", - "2405:9cc0::/32": "139967", - "240a:a7d8::/32": "144658", - "2602:ffdf::/38": "63060", - "2607:f380:808::/42": "2152", - "2804:14c:4186::/42": "28573", - "2806:230:3011::/48": "11888", - "2a03:5a00:2e::/48": "51011", - "2001:559:8761::/46": "7922", - "2403:1740::/32": "136763", - "2a03:c980:b916::/48": "210079", - "2a00:a040:400::/32": "12849", - "2001:428:c0c::/48": "19604", - "2403:300:a21::/45": "714", - "2403:2c00:7:2::4/44": "4058", - "240e:108:46::/48": "134756", - "2804:2390::/32": "264170", - "2804:5a34:180::/38": "268755", - "2a00:7ec0:2::/32": "8528", - "2001:df4:5100::/48": "18229", - "2001:44b8:30b0::/48": "7545", - "240a:a235::/32": "143215", - "2001:559:8236::/48": "7922", - "2408:8001:3160::/44": "136958", - "2a02:26f7:d780::/48": "36183", - "2001:559:90::/48": "7725", - "2001:579:1c84::/39": "22773", - "2404:f4c0:fc80::/44": "139888", - "2604:4000:6800::/37": "32636", - "2a01:3b8:6000::/32": "33885", - "2a02:26f7:d045::/46": "20940", - "2001:1208::/32": "3905", - "2400:fc00:8110::/42": "45773", - "2401:8700:ff01::/45": "54994", - "2a02:fe1:d100::/29": "41164", - "2a03:3600::/32": "49285", - "2401:1d40:2100::/48": "4811", - "240a:a527::/32": "143969", - "2a03:2b20::/48": "202077", - "2a0f:4440:abcd::/48": "50937", - "2001:559:85dd::/48": "7725", - "2a03:f080:1801::/32": "42685", - "2a0a:2f40::/32": "5385", - "240a:af4b::/32": "146565", - "2600:1017:a010::/39": "6167", - "2607:fd00:7::/48": "32922", - "2a00:1910::/29": "29551", - "2a01:aac0::/32": "43391", - "2a01:c50e:5d00::/34": "12479", - "2a0e:97c0:1ba::/45": "211840", - "2001:559:11d::/46": "7725", - "2407:5200:49::/38": "55915", - "2408:8957:c300::/40": "17816", - "240a:ac2e::/32": "145768", - "2607:fda8:8000::/48": "54004", - "2801:12:b000::/48": "265884", - "2a02:26f7:d0c8::/48": "36183", - "2001:559:c1ff::/48": "7922", - "2406:a1c0:100::/37": "131921", - "240e:108:1173::/44": "4134", - "240e:982:9000::/38": "63835", - "2600:1700::/28": "7018", - "2a02:dc00:1::/46": "15493", - "2a0b:1880::/47": "203217", - "2402:ef0b:2000::/36": "24515", - "240a:a4e2::/32": "143900", - "2602:fcf6:b::/40": "51999", - "2606:d600::/32": "18590", - "2620:171:5e::/42": "715", - "2804:14d:c000::/40": "28573", - "2a01:73e0::/36": "47872", - "2a0e:ac80::/29": "35600", - "2001:559:bf::/48": "7922", - "2001:559:83df::/48": "22909", - "2404:e00:365::/48": "15695", - "2606:a600:8::/48": "33297", - "2610:a1:1011::/46": "397228", - "2a03:5640:f100::/42": "14618", - "2a0e:97c0:361::/48": "211484", - "2804:3550::/32": "266280", - "2a02:26f7:b744::/46": "36183", - "2001:df2:7700::/48": "45240", - "2a02:26f7:edc0::/48": "36183", - "2001:16a2:3a::/45": "25019", - "2408:8459:f030::/41": "17622", - "2804:4e18::/32": "268239", - "2a00:4800:1b0::/41": "13124", - "240a:ab43::/32": "145533", - "2604:b000:3000::/32": "14638", - "2a00:fa8::/32": "5605", - "2a07:6fc0:1::/44": "34549", - "2a0d:5600:63::/48": "9009", - "2001:559:73c::/48": "21508", - "2001:67c:1a4::/48": "15879", - "240a:a3f1::/32": "143659", - "2600:6c38:707::/44": "20115", - "2604:5400:4400::/35": "11776", - "2a02:26f7:f281::/46": "20940", - "2a09:3b00::/29": "208861", - "2001:418:8404:1::/64": "20940", - "2001:559:83f1::/48": "7725", - "2602:fe45::/36": "35900", - "2a0c:af00:be52::/48": "205321", - "2a0f:6fc6::/32": "16262", - "2001:3c8:cb01::/48": "136624", - "2001:550:210b::/38": "174", - "2001:dc7:1000::/48": "24406", - "2406:4b00::/44": "132602", - "2001:559:c0e7::/48": "33287", - "2600:6c3a:72::/45": "20115", - "2a02:26f7:b5c9::/42": "20940", - "2a0e:fd45:40f3::/48": "201106", - "2402:800:98c5::/42": "7552", - "240a:a55a::/32": "144020", - "2600:1407:8001::/37": "20940", - "2a00:6920::/48": "42020", - "2a02:26f7:bd44::/48": "36183", - "2001:559:4d6::/48": "22909", - "2001:559:829b::/48": "33651", - "2001:978:2304::/48": "174", - "2600:1013:a010::/35": "6167", - "2a01:c50f:9dc0::/38": "12479", - "2001:c20:4896::/44": "3758", - "2804:39c:1000::/33": "28329", - "2a00:c720::/32": "60323", - "2a01:4207::/48": "48149", - "2a0b:bbc0::/39": "205388", - "2001:df2:c300::/48": "131924", - "2400:5d80::/32": "58507", - "2804:14e0::/32": "263356", - "2a04:5ec0::/29": "60239", - "240e:67a:e400::/39": "140330", - "2607:f330:6000::/36": "15130", - "2804:5b68::/32": "268841", - "2806:20d:1620::/44": "32098", - "2a01:8640:a::/48": "59711", - "2a04:1740::/29": "42331", - "2001:4b60:101::/32": "28857", - "2a01:5040:a100::/48": "43996", - "2a03:9560::/29": "2590", - "2001:559:c3a9::/48": "7015", - "2600:6000:ffb1::/48": "11351", - "2001:1388:7aa1::/39": "6147", - "2804:ff4::/32": "53218", - "2804:7dd8::/32": "271586", - "2806:230:600d::/48": "11888", - "2001:1520:100::/47": "34011", - "2600:80d:a::/43": "701", - "2804:4850::/39": "267113", - "2a05:1a00::/34": "43754", - "2a06:1287:3::/48": "135103", - "2406:840:e145::/48": "142164", - "2600:1004:b0f0::/44": "22394", - "2600:1406:4801::/37": "20940", - "2801:80:2600::/40": "263261", - "2804:574c::/34": "268057", - "2a02:26f7:d688::/48": "36183", - "2001:1a10::/47": "8781", - "2806:2f0:51a0::/41": "17072", - "2406:4a00:1100::/48": "56038", - "2408:8936::/32": "4837", - "2001:559:c1a4::/48": "33287", - "2403:d600::/32": "4826", - "2405:8a00:2111::/40": "55824", - "240a:a32c::/32": "143462", - "240a:ac00::/32": "145722", - "2a0c:8dc0::/29": "25145", - "2001:3c8:c305::/48": "37932", - "2804:eec:1201::/39": "28226", - "2806:107e::/43": "8151", - "2a02:26f7:e204::/48": "36183", - "2a02:26f7:eb01::/46": "20940", - "2a10:c700::/32": "212324", - "2804:4d74::/32": "268197", - "2a10:fa80:92::/48": "57050", - "2600:9000:1e05::/48": "16509", - "2605:a401:8ce3::/39": "33363", - "2606:2800:4140::/48": "15133", - "2806:310:25::/44": "16960", - "2a02:26f7:f6ee::/47": "20940", - "2a0c:2bc0::/29": "212302", - "2804:2570::/32": "264281", - "2a01:4b40:4000::/37": "35566", - "2a02:26f0:601::/40": "20940", - "2a09:9a00::/29": "212417", - "2402:800:91ee::/43": "7552", - "2404:bf40:8584::/42": "139084", - "2409:8904:e240::/42": "24547", - "2a03:4e40::/29": "25447", - "2a05:1a10:2002::/26": "43754", - "2a10:bc0::/29": "62240", - "240e:473:a250::/39": "4134", - "2605:5080:5021::/43": "3367", - "2806:230:201d::/48": "11888", - "2a03:9c60::/32": "43420", - "2a0e:fd45:40f9::/48": "44103", - "2001:67c:24a4::/48": "204711", - "2001:df6:2200::/48": "135908", - "2408:84f3:4240::/37": "17816", - "2600:1011:f110::/36": "6167", - "2603:c010:6000::/36": "31898", - "2a05:cf40::/29": "199163", - "2a0a:54c3::/29": "62240", - "2406:4500::/32": "38342", - "2409:8753:100::/38": "56047", - "240e:3bc:8200::/35": "140316", - "2a00:5a60::/48": "199274", - "2a0c:e840::/29": "202701", - "2408:8957:9000::/40": "17622", - "240e:928:401::/35": "58542", - "2602:fed2:7113::/48": "53356", - "2605:a800:2::/48": "603", - "2804:6dc::/32": "7048", - "2001:678:420::/48": "44233", - "2a00:1140::/46": "44806", - "2a04:2880::/48": "12684", - "2408:840c:7500::/40": "17621", - "2409:8904:e040::/42": "24547", - "2a0d:b80::/32": "199971", - "2a0e:97c0:138d::/46": "20473", - "2001:559:815c::/48": "33287", - "2401:d800:5dd0::/42": "7552", - "2408:8459:a50::/37": "17816", - "2605:a404:1f9::/38": "33363", - "2806:230:300a::/48": "265594", - "2a02:af8::/32": "29550", - "2a02:26f7:c204::/48": "36183", - "2406:ca00:1::/46": "4858", - "240e:978:7000::/40": "137702", - "2602:fe1e::/36": "22751", - "2a00:1ad0::/32": "41589", - "2600:140f:f400::/48": "9498", - "2804:1824::/32": "262301", - "2a0b:3b00::/29": "50628", - "2a0d:2406::/39": "62068", - "2001:559:8032::/48": "7015", - "2607:ff68:9::/32": "46475", - "2a06:7a03::/48": "3170", - "2a07:85c3::/48": "174", - "2a0c:d2c4::/32": "57335", - "2001:678:7b8::/48": "197600", - "2620:122:f001::/46": "14870", - "2804:14c:bb91::/42": "28573", - "2a02:26f7:25::/48": "20940", - "240a:a07b::/32": "142773", - "2a02:76c0:1::/48": "61170", - "2a0e:1a00::/29": "206894", - "2a0f:9400:7721::/48": "20473", - "2001:253:120::/48": "142086", - "240e:473:1f50::/40": "4134", - "2605:6400:300::/48": "53667", - "2605:a7c0:130::/48": "14618", - "2607:ae80::/46": "26558", - "2620:0:1a70::/48": "23294", - "2800:5f0:203f::/35": "22724", - "2a00:6480:8748::/48": "29018", - "2a07:d940::/29": "42375", - "2a0c:8880::/29": "39421", - "2402:800:5855::/42": "7552", - "2405:84c0:ff25::/48": "9516", - "2800:160:11a2::/47": "14259", - "2804:54b4::/32": "262821", - "2a02:26f7:ce44::/48": "36183", - "2406:a900:144::/48": "136409", - "2605:3380:4143::/45": "12025", - "2605:b100:800::/40": "577", - "2a02:13e0:1::/48": "7018", - "2605:6400:1::/46": "53667", - "2a02:2698:a001::/48": "12768", - "240a:a70b::/32": "144453", - "240e:3bf:7600::/39": "140313", - "2604:d600:b000::/33": "32098", - "2607:fcd0:fa80:1b01::/53": "8100", - "2804:8cc:b::/48": "272413", - "2804:145c:c630::/36": "263327", - "2402:1c00:c05::/46": "23838", - "2408:8256:3195::/48": "17623", - "2607:f530::/32": "10996", - "2a07:2f40::/29": "212659", - "2a00:1050::/32": "12470", - "2a00:fde0::/32": "199736", - "2a0e:a780::/36": "16509", - "2001:cf8::/45": "9619", - "2402:e380:313::/48": "139677", - "2a01:ce8c:8000::/36": "51964", - "2a02:3d0::/37": "22822", - "2a04:2e80:15::/48": "44272", - "2001:67c:2cc0::/48": "5588", - "2620:13f:701e::/48": "59116", - "2806:2f0:1044::/42": "22884", - "2a00:1cd0:1::/46": "43408", - "2a02:26f7:e4c1::/46": "20940", - "2001:559:c16c::/48": "33489", - "240a:a9d0::/32": "145162", - "2a00:b320::/48": "9009", - "2a00:b4c0::/32": "47764", - "2a02:26f7:b8::/48": "36183", - "2001:559:8137::/48": "33660", - "2401:ff80:120d::/46": "133954", - "240a:a366::/32": "143520", - "2c0f:f930::/32": "39287", - "2803:fc40::/32": "264651", - "2001:470:158::/48": "398922", - "2001:67c:26fc::/48": "50344", - "2001:7a8:820::/32": "13193", - "2001:dce:e001::/35": "23869", - "2401:d800:7530::/41": "7552", - "2408:8957:2700::/36": "17816", - "2803:8700:10::/48": "25577", - "2001:67c:294::/48": "47167", - "2603:4:1204::/48": "44273", - "2604:4f40::/32": "396472", - "2804:133c::/32": "263523", - "2804:1854::/32": "53176", - "2a02:26f7:db11::/42": "20940", - "2c0f:f000:600::/40": "36891", - "240e:108:1134::/44": "4134", - "2620:74:10::/48": "11840", - "2a01:1b0:c010::/34": "31477", - "2a03:8500::/32": "44291", - "2a09:a280::/29": "210051", - "2a0a:a540::/28": "8422", - "2001:559:338::/48": "33652", - "2001:559:87d5::/48": "7922", - "2001:18c8:800::/40": "54111", - "2600:100b:9010::/39": "6167", - "2a02:26f7:d1c9::/46": "20940", - "2a03:4b40:5701::/34": "50710", - "2001:448a:10d0::/42": "7713", - "2405:5240::/32": "398704", - "2407:c800::/32": "9365", - "2600:a000::/30": "394092", - "2600:6c38:71a::/42": "20115", - "2605:a00::/32": "26744", - "2804:4f8::/36": "28263", - "2001:1248:7081::/46": "11172", - "2620:128:7000::/48": "32030", - "2804:13b0:bc00::/38": "263546", - "240a:af90::/32": "146634", - "2606:1b80::/32": "40864", - "2a01:8840:d1::/48": "207266", - "2a02:998::/32": "9197", - "2401:7400:6801::/32": "4773", - "240a:a992::/32": "145100", - "2602:fff6:f::/48": "29802", - "2a01:b740:1201::/39": "714", - "240e:473:5320::/41": "140486", - "2001:559:85df::/48": "33491", - "2001:67c:768::/48": "210103", - "2a00:17e8::/29": "50226", - "2a04:240::/29": "3222", - "2001:678:a98::/48": "208702", - "2405:1c0:6471::/46": "135062", - "2602:ffdf:300::/40": "25851", - "2a02:26f0:f401::/36": "20940", - "2a0d:1a41:cafe::/48": "202314", - "2a0d:a6c0::/29": "39724", - "2001:44b8:4058::/48": "7545", - "2404:b780::/32": "63967", - "2605:9d80:9042::/48": "4809", - "2620:117:0:e::/64": "10564", - "2800:bf0:8302::/35": "27947", - "2a04:f400:3000::/48": "36351", - "2a0e:6902:4000::/40": "57695", - "2a0c:8fc1:6400::/40": "34081", - "2001:ee0:f200::/36": "45899", - "2001:1248:96b6::/44": "11172", - "2001:44b8:30ed::/48": "7545", - "240a:aa09::/32": "145219", - "240e:966:e400::/39": "133775", - "2803:4dc0::/32": "265721", - "2a02:26f7:f2cc::/48": "36183", - "2408:8459:ea30::/41": "17622", - "240e:473:6650::/39": "4134", - "2a01:cd01:4f2a::/47": "28708", - "2a0c:5a80::/29": "57269", - "240e:979:8500::/40": "131325", - "2600:1408:3c01::/38": "20940", - "2806:20d:5904::/44": "32098", - "2a02:568:fe00::/48": "31529", - "2a02:2b20::/32": "29422", - "2001:559:8637::/48": "7015", - "2402:800:5739::/41": "7552", - "2409:805c:3091::/42": "9808", - "2a02:ff0:14f3::/44": "12735", - "2a0b:6000::/29": "60721", - "2001:559:8077::/48": "20214", - "2001:16a2:c100::/40": "39891", - "2001:16d8:ef00::/35": "16150", - "2a01:5042:2eff::/48": "202196", - "2a03:90c0:210::/40": "199524", - "2402:800:7d10::/42": "7552", - "2a02:26f7:bd48::/48": "36183", - "2001:559:846f::/48": "33651", - "2401:ff80:1211::/46": "133954", - "2600:370f:74ca::/42": "32261", - "2a01:30::/31": "8875", - "2a02:26f7:c484::/48": "36183", - "2402:800:37ee::/43": "7552", - "2404:e6:110::/40": "703", - "240e:438:4e20::/43": "140647", - "2605:a401:8419::/42": "33363", - "2804:4e84::/32": "268266", - "2a04:4cc0::/29": "47215", - "2801:80:1700::/40": "61580", - "2804:7228::/32": "270836", - "2806:230:102b::/48": "11888", - "2a02:26f7:ccc9::/46": "20940", - "240a:a5bc::/32": "144118", - "240e:5:4000::/34": "17638", - "2a07:9480::/29": "9083", - "2a07:f280::/29": "206163", - "2a0e:20c0::/29": "208015", - "2a02:26f7:39::/48": "20940", - "2a09:b680::/29": "208861", - "2001:678:19::/48": "44358", - "2605:6c80:6::/48": "397423", - "2605:9480::/37": "31775", - "2a00:79e1:abc::/46": "36384", - "2401:38c0::/32": "58915", - "2405:9800:b811::/44": "45430", - "2a02:26f7:c4c8::/48": "36183", - "2001:4430:c000::/42": "17853", - "2406:840:e770::/47": "136591", - "2408:8956:7b00::/40": "17816", - "2801:80:7c0::/46": "263621", - "2804:187c::/40": "262673", - "2a0b:1306:400::/48": "198018", - "2a02:26f7:b747::/48": "20940", - "2402:800:56d3::/44": "7552", - "2409:8028:3000::/46": "56041", - "2800:440:9a00::/42": "27738", - "2804:117c:800d::/46": "262182", - "2804:77ec::/32": "271208", - "2a00:4780::/32": "35600", - "2a02:1c8:40::/44": "60095", - "2a02:26f7:c848::/48": "36183", - "2a02:ee80:4171::/45": "3573", - "2a03:47c0:2481::/32": "21277", - "2001:67c:12e8::/47": "24603", - "2600:1407:5801::/34": "20940", - "2a00:6700:1::/48": "202784", - "2a02:26f7:be05::/46": "20940", - "2001:4:112::/48": "112", - "2001:559:85e0::/48": "33660", - "2001:559:c0e8::/48": "33662", - "2001:1248:55cb::/43": "11172", - "2607:7e80:6000::/35": "395354", - "2804:398c::/32": "266035", - "2602:ff59::/36": "53282", - "2a05:5b00::/29": "196881", - "2001:559:111::/48": "33287", - "2401:c5c0:61::/39": "55492", - "2804:215c::/32": "264550", - "2a0a:a3c0:b0::/44": "3320", - "2408:8409:9c00::/40": "4808", - "2409:8008:1100::/36": "24547", - "2606:5000:2200::/39": "3908", - "2804:10dc::/32": "263652", - "2a05:6c80::/29": "43366", - "2a0d:740::/29": "57878", - "2001:559:75::/48": "7015", - "2001:559:846a::/48": "33657", - "240a:af4c::/32": "146566", - "2605:c9c0::/32": "398371", - "2803:1f60::/32": "269838", - "2a01:aa20::/32": "3178", - "2a06:e881:5101::/46": "210090", - "2606:6800:c00::/40": "32940", - "2806:2f0:24a0::/48": "17072", - "2a00:1630:5201::/29": "49544", - "2a01:b5e0::/32": "43359", - "2804:784::/32": "262653", - "2001:470:58::/48": "393350", - "2401:d800:d80::/42": "7552", - "2402:b400:4408::/42": "45960", - "2404:ae00::/48": "45474", - "2404:e801:2008::/46": "55430", - "2409:8904:7d40::/38": "24547", - "2606:e780::/32": "394868", - "2a01:c50e:1600::/36": "12479", - "2001:67c:130::/48": "30857", - "2402:1a80::/32": "134069", - "2602:ff96:11::/48": "8100", - "2804:2b40::/32": "265143", - "2a00:f740:400::/48": "57118", - "2620:123:2000::/48": "30103", - "2806:2f0:5241::/34": "17072", - "2a02:2090:9800::/48": "47595", - "2605:c880::/32": "63290", - "2804:1dd4::/32": "264397", - "2804:40f8::/32": "265995", - "2a03:f680::/32": "1547", - "2a05:f840::/29": "57795", - "2001:7b0::/32": "8881", - "2001:b400:f408::/45": "17421", - "2402:6940::/38": "7645", - "2408:8456:3600::/41": "17623", - "2620:107:9080::/48": "22787", - "2804:c48:c000::/35": "52687", - "2a06:bfc0::/29": "200918", - "2408:8956:4a00::/40": "17622", - "2804:49b8::/32": "267199", - "2a02:ed03::/32": "61292", - "2001:1248:98c0::/44": "11172", - "2408:8256:3260::/44": "17623", - "240a:acc0::/32": "145914", - "2806:286:6000::/32": "265524", - "2001:559:8605::/48": "7015", - "2605:88c0::/36": "398202", - "2a0b:b87:ff10::/48": "210902", - "2a03:56a0::/32": "50971", - "2001:4de0:7001::/46": "33438", - "2402:c800:ff7c::/40": "38639", - "2408:8000:9ffe::/48": "17621", - "2804:29b8:5067::/39": "28126", - "2a02:26f7:d848::/48": "36183", - "2a02:26f7:e404::/48": "36183", - "2a02:d600::/29": "35739", - "2402:7a00::/32": "23639", - "2a04:4e40:f420::/44": "54113", - "2001:559:8346::/48": "33287", - "240a:afc3::/32": "146685", - "2605:93c0::/32": "19413", - "2804:5bf8::/32": "268880", - "2001:502:d399::/48": "397237", - "2400:c700:88::/39": "55644", - "2408:8459:e850::/38": "17816", - "2606:12c0::/32": "55017", - "2a06:c8c0::/30": "203623", - "2a07:14c0:3000::/36": "59504", - "2a0a:4680::/29": "206737", - "240a:a50b::/32": "143941", - "240a:a63e::/32": "144248", - "2804:10:15::/32": "28299", - "2804:ad0::/32": "262681", - "2804:2ea0::/32": "265356", - "2806:230:204d::/48": "11888", - "2a02:26f7:d404::/48": "36183", - "2001:67c:205c::/48": "51147", - "2402:3a80:1bf0::/45": "38266", - "2620:0:2820::/48": "91", - "2a01:280:300::/48": "3301", - "2001:67c:228::/48": "42175", - "2001:df6:6e80::/48": "142049", - "2607:ce00::/32": "53488", - "2804:3784:2800::/32": "53121", - "2a01:9700:1500::/42": "8376", - "2402:2200:2b00::/33": "24090", - "240a:a8af::/32": "144873", - "240e:473:4f50::/40": "4134", - "2804:62ac::/32": "269311", - "2406:1200::/32": "24192", - "2a02:698::/32": "34784", - "2402:800:8400::/35": "7552", - "240a:aba9::/32": "145635", - "2600:805:148::/48": "12234", - "2a01:ce9c:9000::/31": "51964", - "2001:418:1401:26::/60": "2914", - "240a:a010::/32": "142666", - "240a:a0fd::/32": "142903", - "2620:fe:2040::/48": "174", - "2804:1bd8:4a00::/37": "28224", - "2804:5f00::/43": "269070", - "2a01:5340::/29": "62298", - "2001:470:56::/48": "7175", - "2001:67c:6c4::/48": "38914", - "2600:380:f1c0::/43": "20057", - "2804:3bc::/47": "28624", - "240a:a380::/32": "143546", - "2a02:26f7:b685::/46": "20940", - "2408:8957:c200::/40": "17622", - "2600:1014::/32": "22394", - "2620:11b:e030::/41": "3356", - "2001:348::/32": "7679", - "240a:ab07::/32": "145473", - "2604:6780::/32": "13694", - "2a0e:84c0::/32": "24929", - "2001:559:36::/48": "7922", - "2407:ae80::/32": "45062", - "2409:8c7b::/29": "9808", - "2806:288:4097::/48": "28469", - "2001:559:c292::/48": "33287", - "2a09:9f40::/32": "207976", - "2a0f:18c0::/29": "60262", - "2605:5c0:c040::/45": "28885", - "2804:a80::/39": "262293", - "240a:af37::/32": "146545", - "2804:6258::/32": "269291", - "2a00:f826:11::/48": "62874", - "2a02:26f7:9a::/48": "36183", - "2a0b:2900:3100::/38": "48582", - "2a0d:77c7:33c6::/33": "7489", - "2602:801:300a::/45": "6556", - "2606:c00:35::/48": "10126", - "2803:9be0:ff::/48": "174", - "2804:14c:6300::/42": "28573", - "2001:559:746::/48": "33657", - "2001:1a11:81::/46": "42298", - "2409:8904:5240::/42": "24547", - "240a:a170::/32": "143018", - "2801:80:80::/48": "53150", - "2a0b:f940:3af3::/33": "205373", - "2001:44b8:6030::/46": "7545", - "2406:45c0::/32": "64300", - "2409:8028:2800::/39": "56041", - "2409:805c:2100::/36": "9808", - "2a04:4640::/29": "16347", - "2a07:2a80::/29": "3301", - "2401:7500:fff2::/47": "33480", - "2404:bf40:83c1::/46": "7545", - "2a02:26f7:f404::/48": "36183", - "2001:3c8:a701::/48": "9562", - "240e:473:3c00::/41": "140485", - "2600:380:200::/36": "20057", - "2804:761c::/32": "271090", - "2a0b:5cc0::/32": "49432", - "2001:559:c00c::/47": "7922", - "2001:559:c371::/48": "33659", - "2001:fd8:b340::/42": "132199", - "2407:c840::/48": "140823", - "2408:8459:ef30::/41": "17622", - "240e:3b4:1200::/39": "4134", - "2a02:28e8::/32": "34347", - "240e:108:45::/48": "58461", - "2600:1480:5100::/36": "20940", - "2a0f:5707:b0c4::/46": "212895", - "2406:1140::/32": "140616", - "2600:c04::/35": "10912", - "2a00:cb8:971::/48": "15695", - "2a0b:2d40::/32": "209135", - "2001:628:453::/48": "1120", - "2400:89c0:1091::/48": "23724", - "2804:5ce8:4100::/32": "268938", - "2a00:d4a0::/29": "15600", - "2a03:7180::/32": "8499", - "2a0a:e9c0::/29": "56986", - "2404:54c0::/32": "17831", - "240a:a483::/32": "143805", - "2600:1415:3801::/37": "20940", - "2804:1b08:700::/34": "61704", - "2a00:1c10:100::/40": "50300", - "2a01:ce89:b000::/33": "51964", - "2a02:26f7:dec5::/46": "20940", - "2400:f6c0:6::/32": "136530", - "2606:f900:9407::/36": "812", - "2804:14d:5800::/40": "28573", - "2a02:26f7:f6fc::/48": "36183", - "2a05:fa80::/31": "202139", - "2406:2580::/32": "397086", - "2408:84f3:2c50::/44": "17816", - "2a05:4680::/29": "57902", - "2001:428:2502::/35": "209", - "2001:678:28::/48": "42", - "2605:a404:53::/42": "33363", - "2607:fd48:ff03:2069::/40": "13536", - "2a00:1fa8::/32": "8818", - "2402:800:9da9::/43": "7552", - "2403:9600::/32": "131157", - "2800:160:1f92::/45": "14259", - "2a02:2540::/32": "8258", - "2a06:dc80::/29": "202898", - "2001:559:8425::/48": "33287", - "240a:a4f8::/32": "143922", - "240a:ad06::/32": "145984", - "2a02:26f0:3600::/48": "34164", - "2a02:5520::/32": "35600", - "2001:67c:274::/48": "42307", - "2401:d800:52d0::/42": "7552", - "240a:aa9c::/32": "145366", - "2804:2c88:8100::/33": "265225", - "2a02:6f00:ec1::/32": "197692", - "2a07:a905:ffeb::/48": "204543", - "2001:559:831a::/48": "7922", - "240a:a468::/32": "143778", - "2605:83c0::/32": "33556", - "2620:12d:e019::/48": "3356", - "2a04:29c7::/32": "42821", - "2a0d:3340::/32": "36492", - "2001:559:83e2::/48": "33660", - "2001:678:f78::/48": "213027", - "2407:6ac0::/32": "141968", - "2604:f80:5::/32": "22458", - "2606:6300::/32": "46618", - "2804:3f80::/32": "265897", - "2804:41e8::/32": "267464", - "2a02:408:7722::/48": "44112", - "2001:559:800d::/48": "7725", - "2600:141b:d001::/36": "20940", - "2607:fcd0:106:2101::/52": "8100", - "240a:a42b::/32": "143717", - "2605:a401:80d9::/45": "33363", - "2a03:d000:1300::/46": "31163", - "2001:fd8::/41": "4775", - "2a06:4ac0::/32": "20609", - "2404:0:5006::/36": "17709", - "2406:b400:f9::/48": "18209", - "240a:aa41::/32": "145275", - "2600:1480:9000::/48": "21342", - "2800:370::/48": "28006", - "2a01:4fc0::/34": "5517", - "2a04:88c5::/30": "28753", - "2001:67c:8c::/48": "39686", - "2409:8924:6100::/38": "56046", - "2804:3998::/32": "266038", - "2a0b:c4c0::/29": "9144", - "2401:ff80:1281::/44": "133954", - "2803:5960::/32": "269743", - "2a02:26f7:b6c1::/46": "20940", - "2001:559:871f::/48": "7922", - "2001:df0:9e80::/48": "45926", - "2607:f380:864::/48": "23483", - "2806:2f0:71e1::/38": "17072", - "2a00:e80::/32": "20917", - "2402:800:3ed3::/44": "7552", - "2409:8027:2b04::/46": "9808", - "240a:a4ef::/32": "143913", - "240e:438:ac40::/38": "4134", - "240e:44d:780::/41": "4134", - "2605:f500:308::/37": "1828", - "2a02:2f0::/29": "42965", - "2401:b400:8::/47": "58536", - "240a:a6e5::/32": "144415", - "240a:a75a::/32": "144532", - "2602:ffc5:145::/48": "203027", - "2a09:11c0:1000::/36": "56381", - "2001:559:817d::/46": "7922", - "2401:7400:cc01::/34": "4773", - "2602:fc31::/48": "20473", - "2620:101:80fb::/48": "395606", - "2a02:26f7:bc08::/48": "36183", - "2001:503:5ae2::/48": "7342", - "2400:fc00:8020::/43": "45773", - "2404:e6:810::/39": "703", - "2405:6e00:640::/40": "133612", - "240a:af86::/32": "146624", - "2610:20:2020::/38": "7764", - "2804:33dc:ff0::/32": "265421", - "2a04:d3c0::/29": "61155", - "2a09:20c0::/31": "25115", - "2a09:4d41::/32": "50673", - "2a00:1188::/44": "8455", - "2402:800:359b::/41": "7552", - "2403:1940:70::/48": "137935", - "2406:f400::/44": "38001", - "2409:8080:2a60::/44": "9808", - "2602:10e:1a::/47": "20115", - "2602:803:4075::/48": "398223", - "2804:15e4::/45": "53001", - "2a00:5a20:3a11::/32": "199289", - "240e:473:5f20::/41": "140486", - "2602:ff2a::/32": "19323", - "2c0f:fce8::/33": "37153", - "2804:1d6c::/32": "262521", - "2a0a:1540::/29": "43532", - "2a10:5d80:1::/48": "62033", - "2c0f:f4c8::/32": "327872", - "2408:8409:2400::/40": "4808", - "240a:a112::/32": "142924", - "2605:d000::/32": "15108", - "2620:138:3000::/46": "11251", - "2803:a0::/32": "266784", - "2a02:5800::/32": "29388", - "2001:12b4::/32": "262983", - "2600:1402:15::/48": "35994", - "2606:e980::/32": "393945", - "2a04:4ec0::/31": "202503", - "240e:958:2100::/30": "4134", - "2604:5500:f000::/38": "19165", - "2620:31:2009::/48": "53722", - "2a00:1be0::/32": "21034", - "2a06:1281:5::/48": "203943", - "2001:fd8:64::/46": "132199", - "2409:8051:3802::/40": "56047", - "240e:108:11b1::/48": "136190", - "2804:3784::/34": "53121", - "2600:1012:b1d0::/42": "6167", - "2607:4980::/32": "395261", - "2801:80:1af0::/48": "266373", - "2a02:587:50db::/42": "6799", - "2a03:4020::/32": "201506", - "2a04:93c0::/29": "24861", - "2001:67c:5ac::/48": "44204", - "240a:a64d::/32": "144263", - "2600:14c0::/45": "21342", - "2605:73c0::/35": "10583", - "2607:f4e8:5::/48": "55429", - "2804:49c:4205::/48": "7162", - "2804:2454::/32": "264215", - "2a06:f080::/32": "203299", - "2a0c:1140::/29": "48611", - "2001:1280:2000::/36": "16685", - "2409:803c:1900::/37": "9808", - "2600:1016:9110::/34": "6167", - "2804:145c:de10::/34": "263327", - "2a02:26f7:e008::/48": "36183", - "2001:568:900::/37": "852", - "2804:14c:7585::/44": "28573", - "2804:29fc::/32": "264049", - "2804:692c::/32": "270253", - "2a05:1220::/29": "201625", - "2001:559:20d::/48": "33287", - "2001:559:8190::/48": "7015", - "2a02:2450::/29": "20880", - "2404:f4c0:f942::/48": "142551", - "240e:44d:1b00::/41": "140345", - "2a0a:5b80::/29": "49367", - "2620:13d:e000::/48": "397127", - "2406:e000:301::/43": "23655", - "2408:8256:798::/36": "17622", - "240a:a08d::/32": "142791", - "240a:a647::/32": "144257", - "2600:140b:6400::/48": "31109", - "2606:c00:32::/48": "10126", - "2610:1a0:70::/38": "40193", - "2404:bb40::/32": "138978", - "2600:1417:e001::/36": "20940", - "2607:7c80:55::/48": "7034", - "2607:fc48:1010::/48": "40009", - "2c0f:3600:200::/39": "328855", - "2804:58d8::/32": "268153", - "2a02:26f7:b98c::/48": "36183", - "2402:fc80::/32": "134695", - "2604:e3c0::/32": "19523", - "2804:2328::/32": "264145", - "2a00:1f58::/29": "44385", - "2a0a:8c40::/32": "50979", - "2001:67c:13c::/48": "16075", - "240a:a96d::/32": "145063", - "2620:149:5b1::/45": "714", - "2804:4068::/32": "265957", - "2804:6c98::/32": "270479", - "2a10:c800::/47": "56322", - "2a11:7500::/29": "42375", - "2804:c00::/34": "52655", - "2a03:efc0:ba5e::/48": "33438", - "2001:559:c086::/48": "33657", - "2604:e140::/32": "30174", - "2804:23c0::/37": "26218", - "2a03:28e0::/32": "48093", - "2a0d:60c6::/32": "59504", - "240a:a3db::/32": "143637", - "2a02:5400:808::/48": "33353", - "2a07:a343:7870::/44": "9009", - "2001:559:8343::/48": "33652", - "2600:4000::/25": "701", - "2800:4b0:8081::/41": "12252", - "2804:5e48:ff02::/47": "269023", - "2806:230:402f::/48": "11888", - "2806:2f0:43e1::/43": "17072", - "2404:640::/32": "131262", - "2602:fed2:fc3::/44": "53356", - "2a11:3b80::/29": "62212", - "2620:129:9001:2::/57": "13767", - "2804:6894::/32": "269702", - "2001:df0:248::/48": "23883", - "2001:1248:7071::/46": "11172", - "2607:2900::/32": "25914", - "2804:5d48::/32": "268962", - "2804:6334:8000::/33": "269345", - "2408:8645:1200::/32": "4837", - "240a:ae9b::/32": "146389", - "240e:1a::/44": "23650", - "2a03:43a0::/32": "44500", - "2a04:b80:1::/48": "42160", - "2001:559:c04e::/47": "7922", - "2401:2680::/32": "23776", - "2804:3c60::/32": "266207", - "2001:7f8:10::/48": "24796", - "2a02:26f7:d5::/48": "20940", - "2400:9380:92a0::/47": "4809", - "2600:141b:5001::/36": "20940", - "2804:5160::/32": "268448", - "2001:4130:140::/48": "29067", - "2800:160:2c37::/44": "14259", - "2804:4fd4:c000::/34": "268352", - "2a07:59c1:30c8::/48": "208753", - "2407:2140::/32": "141532", - "2602:fca7:6::/47": "399318", - "2804:9d4:3001::/33": "262996", - "2a06:c3c0:1::/48": "47596", - "2a0f:30c0::/29": "60262", - "2a0f:1240::/29": "60262", - "2001:4998:ef64::/47": "14778", - "2408:8956:ae00::/40": "17622", - "2804:44fc::/32": "267665", - "2804:60e4::/32": "269198", - "2a02:2e02:8930::/41": "12479", - "2a02:ae00::/32": "16125", - "2a03:8820::/32": "200932", - "2402:800:b3a0::/41": "7552", - "2408:8812::/28": "4837", - "2409:801e:3008::/48": "24400", - "2a00:cac0::/32": "39555", - "2600:2500::/31": "26801", - "2804:2f30:6d00::/32": "53096", - "2a02:26f7:e980::/48": "36183", - "2a02:cb43:1001::/46": "20546", - "2a03:dc80::/32": "42697", - "2001:c38:500a::/48": "20940", - "2001:1a48::/32": "25512", - "2401:2a80::/47": "58793", - "240e:3be:2c00::/35": "134774", - "2600:1488:6191::/38": "20940", - "2600:e00f:4005::/44": "22995", - "2804:0:1c01::/33": "2716", - "2604:26c0::/38": "36815", - "2804:1198::/32": "263426", - "2001:559:c3f5::/48": "33660", - "240e:3b4:9200::/36": "140317", - "2401:cf80:61dd::/42": "55303", - "2620:12c:b005::/48": "43251", - "2a02:26f7:ab::/48": "20940", - "2a04:4e40:5000::/47": "54113", - "2001:4888:803e::/41": "6167", - "240e:51:5800::/37": "137695", - "2620:130:1000::/48": "62649", - "2804:118c::/32": "53182", - "2a00:d101::/34": "15704", - "2a02:6720::/32": "201890", - "2a05:1500:300::/40": "202861", - "2001:648:2c11::/42": "5408", - "240a:aaa7::/32": "145377", - "2600:1304::/32": "20021", - "2602:fe3f::/36": "13760", - "2607:4b00::/32": "4307", - "2a07:3d00::/29": "49088", - "2001:67c:2178::/48": "29298", - "2001:18e8:400::/40": "1767", - "2405:f080:1e0e::/43": "136907", - "2600:c800::/29": "3356", - "2804:2c6c::/32": "265217", - "2001:67c:240c::/48": "12552", - "2400:1c00:64::/48": "45143", - "240a:a5e3::/32": "144157", - "2602:803:4077::/48": "398223", - "2604:d600:1f::/42": "32098", - "2803:6700::/47": "263210", - "2804:4020::/32": "265936", - "2408:8752::/32": "4837", - "2604:d600:1061::/45": "32098", - "2a01:aea0:dd6::/42": "42473", - "2a01:ce80::/34": "51964", - "2a02:26f7:d8c5::/46": "20940", - "2a02:26f7:de90::/48": "36183", - "2a0b:fec0::/29": "205360", - "2001:559:82c1::/48": "33657", - "2001:678:c6c::/48": "49752", - "2001:de1::/42": "7667", - "2600:1402:c00::/48": "35994", - "2604:500::/32": "22464", - "2604:e180::/45": "55002", - "2800:160:17c6::/43": "14259", - "2407:2200::/32": "38719", - "2a00:afe0::/32": "60491", - "2001:67c:1bc::/48": "1921", - "2406:da00:1000::/40": "16509", - "2409:8087:5100::/37": "9808", - "240e:100:30::/41": "137689", - "2604:2540::/32": "393299", - "2620:dc:c000::/48": "27009", - "2804:7e0c::/32": "271599", - "2405:9800:c91f::/48": "38899", - "240a:a3b1::/32": "143595", - "2600:6c7f:90a0::/48": "20115", - "2607:f5c0:8041::/42": "10326", - "2001:6d0:ffd1::/46": "21416", - "2001:df0:2780::/48": "138973", - "2405:4cc1:f00::/32": "55891", - "2a01:5d40::/32": "24945", - "2a03:5344:40::/44": "34414", - "2a0b:7f80::/29": "13126", - "2605:1900::/47": "12208", - "2804:7064::/32": "270724", - "2a00:4a00::/34": "39356", - "2a07:440::/31": "49532", - "2402:5300:810::/35": "45903", - "2001:43f8:750::/44": "37520", - "2409:8014:a::/36": "56044", - "240a:a7e3::/32": "144669", - "2620:0:2b30::/44": "50", - "2a00:6060:b001::/33": "60983", - "2a02:26f0:1301::/37": "20940", - "2a06:1a80::/29": "207481", - "2001:559:876a::/47": "7922", - "2a04:6c40::/29": "5432", - "2602:fd1c::/36": "7029", - "2607:fa08::/32": "23404", - "2620:13b:30e1::/48": "13607", - "2804:1010:8000::/33": "263617", - "2a01:498:8600::/33": "42018", - "2a02:7aa0:5000::/48": "52173", - "2a02:e980:185::/44": "19551", - "2a0b:ef00::/29": "205697", - "240a:a444::/32": "143742", - "2602:feb4:1b0::/44": "25961", - "2804:3900:8000::/33": "266517", - "2001:4ba7::/48": "34936", - "2401:b180:4100::/48": "45102", - "2406:f00:9::/48": "58758", - "2409:8907:7020::/39": "24547", - "2600:1fa0:1080::/44": "16509", - "2408:8956:bf00::/40": "17816", - "2605:5fc7::/32": "397881", - "2800:440:84::/48": "27738", - "2a03:2880:f151::/45": "32934", - "2406:2000:f01f::/36": "10310", - "2607:fcd0:fac0::/37": "8100", - "2c0f:f5c0:3::/38": "29465", - "2001:df7:480::/48": "138754", - "2409:8080:2ad0::/44": "9808", - "2a01:8f20::/32": "51863", - "2001:559:21c::/47": "22258", - "2001:7f8:31::/48": "24957", - "2001:4d10::/32": "16030", - "240a:a521::/32": "143963", - "2804:1110:ab02::/33": "262901", - "2001:67c:23b4::/48": "21297", - "2001:ce0:6::/48": "4605", - "2401:ec00::/32": "24349", - "2607:fda8:1012::/47": "6128", - "2001:559:81c2::/48": "33651", - "2401:d800:8d0::/42": "7552", - "2603:c0f0:1020::/38": "6142", - "2605:90c0::/32": "15221", - "2001:978:900::/48": "47132", - "2001:1248:989c::/42": "11172", - "2604:7300::/32": "393227", - "2803:71e0::/32": "270007", - "2804:3b10::/32": "266127", - "2001:559:7fa::/47": "7922", - "2001:fd8:400::/38": "132199", - "2406:840:100::/47": "139317", - "2a03:fe40::/32": "60793", - "2001:918::/39": "3303", - "2001:1878:800::/44": "85", - "2a00:d4e0::/29": "15600", - "2402:9f00::/32": "58740", - "2803:f800:50::/45": "13335", - "2804:3d4:2e::/43": "262401", - "2804:26a4::/32": "263846", - "2a00:1e88:9::/32": "12389", - "2a0a:d4c0::/29": "207460", - "2607:fc48:430::/48": "40009", - "2803:180::/32": "28036", - "2804:340::/32": "28165", - "2604:f400:1::/48": "26878", - "2a02:26f7:c688::/48": "36183", - "2001:67c:1298::/48": "212977", - "2409:805c:3031::/41": "9808", - "2602:804:9000::/44": "11661", - "2001:559:c384::/48": "7922", - "2001:4490:d664::/46": "9829", - "2406:5c0::/32": "140395", - "2607:ffd8:213::/48": "17048", - "2801:1f0:4028::/47": "21433", - "2804:1084::/32": "52847", - "2a00:1fd0:ecc0::/46": "29033", - "2001:559:59d::/48": "33287", - "2404:1a40::/39": "9744", - "2404:4340::/32": "133275", - "2a00:1d58:4400::/36": "47524", - "2a02:ee80:40b4::/44": "3573", - "2408:8957:be00::/40": "17622", - "2801:0:260::/48": "52427", - "2806:2f0:9480::/42": "17072", - "2a0a:a2c0::/47": "205992", - "2a0e:aa07:e01f::/48": "211162", - "2c0f:f350::/32": "328471", - "240e:940:ee00::/40": "136197", - "2800:160:126f::/43": "14259", - "2600:1406:d801::/37": "20940", - "2804:60cc::/32": "269192", - "2408:8956:2700::/36": "17816", - "2409:8c04:1111::/45": "24547", - "2a02:2010:2420::/45": "20978", - "2a04:8f40:2::/48": "205505", - "2001:4b98:dc4::/46": "203476", - "2402:800:7c20::/41": "7552", - "2a01:4c80::/32": "21446", - "2a02:e980:16b::/45": "19551", - "2804:d20:e000::/35": "262700", - "2804:3800:1000::/34": "266449", - "2806:230:4034::/48": "265594", - "2a0b:2340::/29": "205763", - "2a0c:7e43:43be::/48": "20473", - "2605:80c0::/32": "10700", - "2602:802:4000::/48": "14038", - "2606:6800:2400::/40": "394903", - "2620:10a:80ae::/48": "394354", - "2804:62b4::/35": "269313", - "2406:7400:b0::/47": "24309", - "2804:25fc::/32": "264316", - "2804:27bc::/32": "263919", - "2804:7930::/32": "271290", - "2a02:26f0:36::/48": "34164", - "2a02:26f7:2d::/48": "20940", - "2a0f:6bc0::/29": "60404", - "2400:a980:68fe::/47": "133111", - "2401:4900:c80::/44": "45609", - "2406:840:f400::/44": "142111", - "2605:9d80:9092::/48": "4809", - "2607:4800::/32": "25637", - "2a02:670::/32": "47217", - "2a0e:bfc0::/29": "211619", - "2405:9800:9::/46": "45458", - "2804:33d4::/47": "265419", - "2a00:dfc0::/29": "198551", - "2a07:e300::/29": "43341", - "2806:230:602e::/48": "265594", - "2a0a:7a06::/31": "61317", - "2a0b:a200::/29": "208681", - "2001:559:81b3::/45": "7922", - "2001:43d8:c009::/34": "15022", - "2405:58c0:4400::/40": "133101", - "2409:8c85:1::/40": "9808", - "2620:63:e000::/48": "13731", - "2a0d:4b40::/29": "61317", - "2001:57a:f213::/39": "22773", - "2001:738::/46": "1955", - "2405:9200:1100::/41": "131596", - "2604:6600:6::/44": "40676", - "2001:678:8fc::/48": "209520", - "2402:4e00:5::/46": "45090", - "2404:1c0::/32": "138454", - "2804:e94:6d8::/42": "262468", - "2804:6f8c::/32": "270668", - "2a05:6c00::/29": "62126", - "2401:d800:5360::/40": "7552", - "2408:84f3:ac40::/38": "17816", - "2803:7fc0::/32": "265788", - "2804:dd4::/33": "53024", - "2804:66f8::/32": "269595", - "2a02:2930::/32": "49767", - "2a02:c6c7::/32": "58061", - "2a04:4e40:6800::/48": "54113", - "2804:7608::/32": "271085", - "2806:2f0:3541::/46": "17072", - "2a02:26f7:edc5::/46": "20940", - "2001:559:c207::/48": "33651", - "2620:149:5fc::/36": "714", - "2804:7e18::/32": "271602", - "2806:2f0:2483::/48": "17072", - "2001:c38:9127::/38": "9931", - "2001:559:8187::/48": "7725", - "2001:57a:f202::/47": "22773", - "2402:eac0::/32": "137852", - "2405:1c0:6381::/46": "135062", - "2600:1407:4800::/48": "35994", - "2a0e:b105:4c0::/44": "20473", - "2405:f080:1602::/48": "136907", - "2605:a401:85cf::/38": "33363", - "2a02:26f7:f144::/48": "36183", - "2001:4998:efec::/43": "10310", - "2400:cb00:a7b0::/45": "13335", - "2a03:97a0::/40": "197380", - "240a:a32f::/32": "143465", - "2a01:6300::/32": "42303", - "2a0c:9880::/29": "50763", - "240e:44d:7680::/41": "4134", - "2607:f148:100::/47": "11734", - "2a02:1610::/32": "50986", - "2001:559:c10c::/48": "7922", - "2400:cb00:165::/44": "13335", - "2607:f088::/32": "1706", - "2a02:ee80:415e::/42": "3573", - "2a09:bac0:43::/44": "13335", - "2001:df0:2ba::/48": "132277", - "2400:e500::/48": "138322", - "2607:fc58:2000:4000::/56": "13536", - "2a05:1083:fd50::/40": "209870", - "2406:3003:1030::/41": "55430", - "2a02:26f7:eb09::/42": "20940", - "2001:678:8::/48": "210004", - "2001:49f0:d0a0::/46": "174", - "2804:14d:c600::/40": "28573", - "2804:2b28::/32": "265138", - "2a02:26f7:f58c::/48": "36183", - "240a:a1fc::/32": "143158", - "2a01:5b80::/32": "13226", - "2c0f:f2a0:7::/32": "327849", - "2001:418:1420:200::/56": "20940", - "2001:4490:dd18::/46": "9829", - "2400:7400:e012::/44": "38044", - "2402:540::/47": "132996", - "2402:800:75e0::/38": "7552", - "2804:3768::/32": "266410", - "2a02:26f7:e245::/46": "20940", - "2001:559:87e7::/33": "7922", - "2001:44b8:105d::/48": "4739", - "2604:6280::/32": "53755", - "2607:fc58:1:44::/64": "13536", - "2a00:8a02:8000::/44": "8983", - "2a04:1040::/29": "59767", - "2a07:7300::/29": "202877", - "2a0d:2584::/32": "141776", - "2405:b8c0::/36": "131677", - "2409:803c:3800::/40": "24444", - "2801:80:38b0::/48": "270348", - "2a00:1148:6::/29": "47764", - "2a02:26f7:c9c4::/48": "36183", - "2a03:7480:10::/44": "15699", - "2a04:2e80:4::/48": "207587", - "2001:1900:221f::/41": "3356", - "2001:559:c0eb::/48": "33659", - "240a:a4e5::/32": "143903", - "2602:fe26::/36": "53740", - "2a07:3500:11a0::/48": "1136", - "2a0a:8740::/29": "205851", - "2404:2400:200::/48": "38280", - "2409:8c04:110e::/43": "24547", - "2605:4c40:119::/38": "30081", - "2804:8018:1000::/37": "271729", - "2a01:8840:4d::/48": "207266", - "2001:fd8:221::/46": "4775", - "2606:ed00::/47": "47869", - "2a02:2e02:1500::/43": "12479", - "2a0f:b300:1111::/48": "208200", - "2804:6238::/32": "269283", - "2a00:8860:300::/48": "50389", - "2a0d:d040::/29": "197036", - "2a0e:6580::/29": "57112", - "2a01:71e0::/32": "199811", - "2001:559:33e::/48": "7922", - "2001:559:4e6::/48": "7016", - "240a:a199::/32": "143059", - "2800:3c0:1130::/34": "19863", - "2804:1a14:3000::/36": "265962", - "2804:3b54::/32": "266142", - "2a00:a7e0::/48": "200741", - "2a02:26f7:e340::/48": "36183", - "2600:6c38:b33::/44": "20115", - "2604:d600:1119::/45": "32098", - "2600:140b:6401::/38": "20940", - "2602:fed2:7102::/48": "53356", - "2602:ffcd::/36": "55254", - "2001:559:83dc::/48": "33652", - "2001:559:c123::/48": "7725", - "2402:9900:b11::/48": "27435", - "2804:2fd0::/32": "264913", - "2408:8957:6600::/40": "17622", - "2a02:26f7:77::/48": "20940", - "2a02:26f7:d684::/48": "36183", - "2001:559:c137::/48": "7015", - "2001:67c:2e64::/48": "15542", - "2409:804c:2a::/43": "9808", - "240a:a735::/32": "144495", - "240a:a8c3::/32": "144893", - "240a:afe3::/32": "146717", - "240e:473:1a00::/41": "140485", - "2402:7400:8000::/33": "38883", - "2408:8256:357c::/48": "17816", - "2804:24b0:8000::/33": "264238", - "2804:2e1c:e700::/35": "265324", - "2a02:26f7:d281::/46": "20940", - "2a0b:f100::/29": "43451", - "2001:67c:286c::/48": "58148", - "2606:a600:9000::/33": "23005", - "2607:f140::/32": "25", - "240e:44d:2680::/41": "4134", - "2a02:ab00::/29": "6830", - "2a03:4900:a0::/47": "197695", - "2403::/44": "4755", - "2408:8459:9e30::/41": "17622", - "2804:3774::/34": "266416", - "2a01:82a0::/32": "61952", - "2001:db0:1800::/34": "17766", - "240a:a586::/32": "144064", - "2804:61ec::/32": "269265", - "2a07:1c44:9600::/40": "138211", - "2a07:33c0::/29": "50272", - "2001:559:8573::/48": "33659", - "2001:67c:2600::/48": "15655", - "2402:800:9e01::/42": "7552", - "2a01:111::/34": "8075", - "2a0b:4740::/29": "49101", - "2001:978:2302::/47": "174", - "2001:978:7602::/36": "174", - "2001:4408:7700::/36": "4758", - "2602:ffc8:3e5::/46": "20278", - "2801:13:e800::/48": "271925", - "2804:1b0:1a80::/47": "18881", - "2a00:c7c0::/32": "205617", - "2001:310::/34": "4694", - "2606:6680:2::/48": "40676", - "2a00:c600::/29": "41960", - "2a02:26f7:bd49::/46": "20940", - "2a0b:22c0::/29": "59939", - "2001:559:70::/47": "13367", - "2001:678:a64::/48": "198423", - "240e:250:300::/40": "141157", - "2a00:1cf8:8000::/33": "44944", - "2a02:26f0:8301::/37": "20940", - "2a02:26f7:d58c::/48": "36183", - "2a0d:2600::/29": "39736", - "2001:16a2:4200::/37": "25019", - "240a:a6df::/32": "144409", - "2607:fdc8::/48": "30036", - "2a01:9700:1250::/44": "8376", - "2a05:d01e::/36": "16509", - "2001:1920::/32": "25689", - "2408:8956:8f00::/40": "17816", - "2600:9000:10c1::/44": "16509", - "2804:13f0::/32": "263303", - "2804:632c::/32": "269343", - "2a00:eb0::/40": "39912", - "2001:67c:1fc::/48": "43462", - "2401:7140::/32": "136781", - "2620:4f:e000::/48": "22652", - "2a00:1fa2:80c0::/48": "42087", - "2a07:dbc0::/32": "42422", - "2a0d:cc0::/29": "60501", - "2c0f:f1c0::/32": "328178", - "2a0f:11c0::/29": "45671", - "2409:8a21::/29": "9808", - "240a:a355::/32": "143503", - "2602:802:4003::/48": "14038", - "2800:8f0::/32": "22860", - "2803:5440:252::/48": "264738", - "2a02:ac80:2001::/35": "25145", - "2a0c:3580::/29": "30823", - "2a0c:4dc0::/48": "47893", - "2402:b280::/32": "133934", - "2402:d000:5100::/34": "9329", - "240a:aa7e::/32": "145336", - "2600:1003:b100::/42": "6167", - "2a01:5940::/34": "31034", - "2001:978:3000:1::/38": "174", - "2401:1380::/32": "58411", - "240e:40:8::/48": "58519", - "2804:7840::/32": "271230", - "2001:559:c12c::/48": "7015", - "240a:a185::/32": "143039", - "2800:160:1c76::/40": "14259", - "2804:5c7c::/35": "268911", - "2a02:26f7:bcc1::/46": "20940", - "2a02:2e02:30b0::/41": "12479", - "2a11:2307::/41": "209209", - "2001:559:1eb::/45": "33489", - "2001:559:8048::/48": "7016", - "2001:559:c045::/46": "7015", - "240a:a97d::/32": "145079", - "2604:d600:503::/44": "32098", - "2620:13a:7000::/44": "5078", - "2a03:60::/29": "60022", - "2a02:26f7:bf05::/46": "20940", - "2a0c:2240::/48": "197988", - "2001:4878:b220::/48": "12222", - "2600:1416:2000::/48": "25019", - "2600:6c7f:9350::/44": "11351", - "2001:678:5ec::/48": "39617", - "2408:8957:c9c0::/38": "17622", - "240a:a683::/32": "144317", - "240e:982:d700::/40": "4134", - "2602:feda:3b0::/44": "134575", - "2a00:4802:4b00::/37": "13124", - "2a02:ee80:403a::/41": "3573", - "2a0e:b107:15b0::/48": "211169", - "2001:559:5a6::/47": "7922", - "2001:559:8750::/47": "20214", - "2403:e240::/32": "4767", - "2405:fb80::/32": "132006", - "2409:8002:800::/40": "38019", - "2804:16d8:1d00::/46": "262729", - "2806:230:401f::/48": "11888", - "2c0f:fc89:7f::/40": "36992", - "2400:adda:2000::/31": "9541", - "240a:a098::/32": "142802", - "2804:68b4::/34": "269710", - "2804:767c::/32": "271115", - "2001:559:33d::/48": "33668", - "2804:6388::/32": "269367", - "2001:559:8550::/47": "7922", - "240a:a644::/32": "144254", - "2a01:200::/32": "25164", - "2a03:ce80::/32": "47562", - "2c0f:e958::/32": "15399", - "2001:ee0:de00::/40": "45899", - "2607:f098:3300::/33": "33363", - "2800:bf0:80c9::/43": "27947", - "2803:8a60::/32": "264732", - "2001:67c:ec::/48": "44097", - "2001:1938:4204::/40": "12989", - "2600:6c38:64::/44": "20115", - "2604:d600:63b::/41": "32098", - "2620:13a:1000::/40": "40457", - "2404:f340:8000::/33": "15169", - "2001:559:c3a3::/48": "33491", - "2401:d800:f980::/42": "7552", - "2806:230:2046::/48": "265594", - "2a02:4720::/31": "201333", - "2405:3580:1919::/48": "62240", - "240e:56c::/30": "4812", - "2600:1418:8001::/33": "20940", - "2610:a1:1007::/48": "397218", - "2a0c:b240::/32": "202441", - "2001:559:c1b6::/47": "7922", - "240a:aa5c::/32": "145302", - "240e:438:4c40::/38": "4134", - "2607:b600:10::/48": "10397", - "2620:149:150::/38": "714", - "2803:7f20::/32": "61317", - "2804:e0c:c0::/48": "28176", - "2001:559:106::/48": "33651", - "2405:a3c0::/32": "139908", - "2a00:1c48::/31": "12695", - "2a0d:2146:8580::/45": "39526", - "2001:67c:6b0::/48": "34756", - "2408:840c:200::/40": "17621", - "240a:a994::/32": "145102", - "2a01:96e0::/32": "35179", - "2a02:26f7:efc0::/48": "36183", - "2001:57a:8011::/42": "22773", - "2a00:51c0::/32": "51758", - "2a02:cb44::/32": "20546", - "2a10:600::/32": "209208", - "2001:4de0:49::/48": "50525", - "2403:ca00::/32": "37933", - "2408:8957:4100::/40": "17816", - "240e:3bb:2c00::/35": "134774", - "2a00:f6e0::/32": "49034", - "2a02:26f7:ddc0::/48": "36183", - "2403:cfc0:100b::/48": "139264", - "2407:6e00:253::/45": "38332", - "2600:6c38:a24::/43": "20115", - "2620:171:28::/48": "42", - "2001:678:7f0::/48": "6730", - "240a:a98b::/32": "145093", - "240a:aaa8::/32": "145378", - "240e:18:51::/31": "4812", - "2804:6f9c::/32": "270672", - "240e:848:a0::/30": "4134", - "2806:200::/32": "7438", - "240a:ac0d::/32": "145735", - "2607:f998::/32": "11767", - "2610:a1:305c::/48": "12008", - "2620:a9:8000::/45": "16991", - "2800:2a0:7101::/32": "27947", - "2a00:16d0::/32": "12714", - "2409:877d::/30": "9808", - "240e:428::/27": "4134", - "240e:44d:1e00::/41": "140345", - "2804:3c18::/32": "266190", - "2a0f:ff00:1337::/44": "213281", - "2804:1094:9000::/34": "263641", - "2404:b000:1000::/32": "4826", - "2408:840c:6800::/40": "17621", - "240a:a4bb::/32": "143861", - "2600:100d:a120::/36": "22394", - "2610:20:6f15::/48": "49", - "2610:b0:4118::/47": "21433", - "2800:484:cd00::/38": "10620", - "2806:310:22::/45": "16960", - "2a01:7640:400::/48": "60708", - "2001:678:f7c::/48": "213027", - "240a:aabd::/32": "145399", - "2a0b:a2c0::/29": "205584", - "2406:30c0::/48": "38732", - "2a0a:4ac0::/29": "40970", - "2407:5200:33::/41": "55915", - "2600:1015::/32": "6167", - "2607:e880:1020::/48": "12220", - "2800:160:f4d0::/36": "14259", - "2804:2ca0::/32": "265231", - "2a01:8640:9::/48": "42708", - "2001:57a:503::/48": "33438", - "2001:67c:2e60::/48": "12348", - "2602:fea7:100::/40": "46844", - "2a0a:2c0:2::/48": "48648", - "2001:1248:70a7::/44": "11172", - "2402:800:37c5::/43": "7552", - "2408:8806::/42": "4808", - "2804:6374::/32": "269362", - "2001:559:825a::/48": "7725", - "2401:b000::/32": "17971", - "2406:840:eb91::/44": "140731", - "2804:1c88::/32": "61660", - "2a01:c8::/38": "20756", - "2a02:50::/48": "15464", - "2001:428:6402:5::/64": "2639", - "2001:559:c1e2::/47": "33651", - "2408:843c::/35": "4837", - "2a02:26f0:8f01::/40": "20940", - "2a03:fa80::/32": "15471", - "2a06:25c0::/32": "20473", - "240a:a80d::/32": "144711", - "2604:2d80:7680::/36": "30036", - "2604:85c0:a::/32": "16524", - "2806:230:203e::/48": "265594", - "2a01:b100::/32": "43127", - "2a02:26f7:d748::/48": "36183", - "2a04:b700:185a::/48": "201405", - "2001:500:96::/48": "15135", - "2001:559:826b::/48": "22909", - "2001:67c:1598::/48": "24642", - "2001:1248:a016::/48": "11172", - "2401:d800:93b0::/41": "7552", - "2409:8914:b400::/39": "56044", - "2803:efc0::/48": "3549", - "2001:1400:ffef::/48": "2119", - "2804:81b0::/32": "272470", - "2a03:ad05::/30": "8208", - "2409:8924:9100::/38": "56046", - "2804:3e2c::/32": "266578", - "2a01:a280:100::/48": "58191", - "2a02:26f7:cc08::/48": "36183", - "2001:43f8:120::/48": "37177", - "2804:2448::/32": "264212", - "2806:2f0:34c1::/42": "17072", - "2a01:618:404::/46": "137502", - "2a0e:b105:428::/46": "20473", - "2402:8100:3a4f::/32": "55644", - "2409:8c28:34b1::/39": "56041", - "2804:1c74::/32": "52712", - "2001:559:815f::/48": "7015", - "2400:1f00:b2::/44": "45769", - "2400:a7c0::/32": "133168", - "2409:8c44:1b01::/28": "24445", - "2600:c05:3010::/48": "398019", - "2804:6a94:8000::/33": "270345", - "2620:101:4034::/46": "16880", - "2001:468:502::/48": "12145", - "2001:559:c326::/48": "7922", - "2001:12a0:a001::/36": "28292", - "2402:f800:ff01::/40": "7602", - "2409:8924:8100::/38": "56046", - "240a:a9dc::/32": "145174", - "2607:6b80:67::/48": "46562", - "2001:678:98::/48": "51833", - "2605:ec0::/48": "26272", - "2607:f930::/32": "675", - "2a02:7d8::/36": "3302", - "2602:803:7000::/44": "11478", - "2804:5ce8::/33": "268938", - "2804:5d2c::/47": "268955", - "2605:c5c0::/32": "395853", - "2607:f4d0::/36": "17054", - "2804:14d:448b::/43": "28573", - "2a02:26f7:ba48::/48": "36183", - "2a02:26f7:ba88::/48": "36183", - "2a04:e580::/29": "197395", - "2c0f:fc70::/32": "37305", - "2001:4268:1120::/32": "15964", - "2401:ff80:148f::/43": "133954", - "240a:a008::/32": "142658", - "240a:aae2::/32": "145436", - "240e:55::/34": "140330", - "240e:438:8220::/43": "140647", - "2600:140f:8::/47": "20940", - "240a:a381::/32": "143547", - "2600:1404:6::/42": "20940", - "2605:6c80:c::/48": "40244", - "2a02:2e02:2570::/40": "12479", - "2001:418:1401:e::/63": "20940", - "2001:43f8:400::/40": "37062", - "2001:4818:1000::/36": "36031", - "2402:6640::/45": "134995", - "240e:a8:e200::/39": "140647", - "2602:ffd5::/36": "26832", - "2607:f7a8:607::/36": "16657", - "2a0e:97c0:d64::/48": "20473", - "2a11:ad80:9b::/48": "210829", - "2001:559:76d::/48": "7725", - "2408:8957:cf40::/40": "17816", - "2806:21a:1400::/40": "262913", - "2a01:7040::/32": "58123", - "2a10:2f00:138::/48": "213105", - "2405:6e00:1e00::/39": "133612", - "2a02:cfc0::/29": "60032", - "2a0b:5100::/29": "15765", - "2806:230:2051::/48": "11888", - "2404:bc0:4110::/44": "137735", - "2a01:8840:e::/48": "12287", - "2a0c:8900::/29": "200462", - "2001:559:c317::/48": "33652", - "2402:800:328d::/43": "7552", - "2407:1600::/32": "1299", - "240b:4005::/32": "45102", - "2804:1060::/32": "263632", - "2804:1908::/32": "61770", - "2001:1248:883c::/46": "11172", - "2402:ef12::/32": "24397", - "2a01:440:50b::/45": "29551", - "2001:559:3f8::/48": "33287", - "2001:67c:13c8::/48": "42936", - "2001:ee0:c540::/38": "45899", - "2400:50c0::/32": "136039", - "2401:d800:7f00::/40": "7552", - "240e:a64:1a00::/34": "140330", - "2602:fd6f:aba::/45": "18526", - "2001:1248:987f::/40": "11172", - "2001:67c:2e7c::/48": "199165", - "2409:8028:30b3::/41": "56041", - "2602:fd71::/36": "396325", - "2a02:26f7:d2c5::/46": "20940", - "2a02:26f7:dcc9::/42": "20940", - "2a03:f140::/32": "206617", - "2a0c:e480::/29": "15623", - "2402:800:9a0f::/43": "7552", - "2602:fd2e::/36": "174", - "2602:feda:db0::/44": "131789", - "2001:19e8:8041::/48": "3923", - "2001:1a11:102::/44": "42298", - "2400:9100::/48": "45552", - "2a00:1238:4::/32": "35236", - "2a04:4e40:3e10::/44": "54113", - "2a06:6500::/29": "204165", - "2001:559:3dc::/48": "33657", - "2001:678:be8::/48": "207563", - "240a:aab9::/32": "145395", - "2a02:26f7:da89::/42": "20940", - "2a09:bac0:123::/45": "13335", - "2001:67c:2328::/48": "31473", - "2402:800:3e60::/43": "7552", - "2406:7400:60::/46": "24309", - "2408:8256:3174::/48": "17816", - "2804:45e4::/33": "262567", - "2001:df1:5200::/48": "55824", - "2606:7c00::/32": "46103", - "2804:1f3c:4000::/35": "269679", - "2a0a:edc0::/32": "209379", - "240a:a024::/32": "142686", - "2804:c48:ff09::/40": "52687", - "2804:8268::/32": "272518", - "2806:230:5006::/48": "265594", - "2001:559:86ee::/48": "33659", - "240a:acec::/32": "145958", - "2800:3a0:2::/45": "23201", - "2804:954:801::/35": "263073", - "2a0d:5084:1::/31": "62240", - "2001:480:37::/41": "668", - "2402:800:3cc5::/43": "7552", - "2800:300:6500::/40": "27651", - "2804:1e0c::/32": "264141", - "2001:559:c377::/48": "20214", - "2001:1260:5::/48": "28544", - "2801:80:1c20::/48": "266068", - "2804:a54:e::/43": "262664", - "2804:5af4::/32": "268809", - "2409:8751:d00::/38": "56047", - "2600:d0a:4000::/31": "20161", - "2a03:b580::/32": "51978", - "2a10:84c0::/29": "44103", - "2001:330::/32": "6619", - "2804:1bc:114::/48": "28122", - "2a02:26f7:cccc::/48": "36183", - "2001:470::/43": "6939", - "2001:559:1ff::/48": "33491", - "2001:678:c98::/48": "48025", - "2800:bf0:81e9::/38": "27947", - "2a00:5881:8100::/40": "60630", - "2a10:4ec0::/29": "57353", - "2001:12e0:b000::/33": "10429", - "2409:8d15:2800::/39": "56044", - "2604:d600:1580::/44": "32098", - "2804:cec::/32": "52575", - "2804:77c0::/32": "271197", - "2a03:2940::/32": "51440", - "2001:550:2211::/39": "174", - "2403:1940:200::/48": "137935", - "2001:67c:28f0::/48": "57090", - "2001:44b8:603c::/47": "7545", - "240a:a3fe::/32": "143672", - "240a:a98e::/32": "145096", - "2001:559:4d4::/48": "20214", - "2001:df6:8f00::/48": "135817", - "2604:4d40:7473::/48": "399196", - "2607:fdf0:5e03::/45": "8008", - "2a02:26f7:ecc5::/46": "20940", - "2a0d:3680::/32": "205673", - "2401:d800:b690::/39": "7552", - "2c0f:f098::/32": "36938", - "2405:ac80::/32": "135524", - "2406:1cc0::/32": "137681", - "2408:8459:ec50::/39": "17816", - "2600:1017:9800::/44": "22394", - "2804:14d:be84::/41": "28573", - "2804:5d40::/32": "268960", - "2a0f:f480::/29": "60262", - "2406:d500:12::/48": "136557", - "2409:8c85:aa0d::/43": "9808", - "2804:5d54::/32": "268965", - "2607:f380::/36": "2152", - "2a0d:b201:8000::/44": "206026", - "2001:559:879e::/48": "33659", - "2401:d800:d790::/42": "7552", - "240a:a42a::/32": "143716", - "2804:7efc:600::/32": "271659", - "2a02:d08::/32": "34762", - "2001:253:140::/48": "142106", - "240a:a14f::/32": "142985", - "240e:ff:c000::/48": "134773", - "2605:e740:500::/40": "398710", - "2806:288:4090::/48": "28469", - "2a00:11c0:47::/44": "47147", - "2a0c:8fc1:8000::/40": "142275", - "2401:ebc0:3000::/32": "137041", - "2409:806b:2900::/35": "9808", - "240a:a8ba::/32": "144884", - "240a:aa36::/32": "145264", - "2620:8b:a000::/48": "399196", - "2a0a:1dc0::/30": "42994", - "2402:800:3ae0::/44": "7552", - "2402:8100:39a0::/44": "45271", - "2403:8940:fffd::/46": "135817", - "2409:8e1a::/32": "132525", - "2602:fe6f:2::/47": "11374", - "2607:3200:13::/32": "11240", - "2001:44b8:1052::/47": "7545", - "2400:9800:6011::/45": "139994", - "240e:473:ff00::/48": "140485", - "2c0f:f5c0::/46": "29465", - "2001:418:4001:5::/45": "2914", - "240a:aef2::/32": "146476", - "2605:4300:ee00::/40": "62907", - "2804:1bc:115::/32": "10310", - "2a0a:68c0:ff00::/40": "212951", - "2a0e:b103:a00::/39": "20473", - "2a0f:4ac0:1236::/32": "207921", - "2804:1b0:1a00::/41": "10429", - "2804:13b0:7c00::/38": "263546", - "2600:140f:6000::/48": "55836", - "2001:559:1c5::/48": "33660", - "240a:a52d::/32": "143975", - "2403:b300::/32": "16509", - "2607:f348::/34": "13354", - "2a09:400:2000::/35": "208861", - "2406:c500:ffd2::/48": "4764", - "2400:1c00:1d0::/42": "45143", - "2804:14d:3c00::/40": "28573", - "2a02:26f0:c101::/40": "20940", - "2a03:b000:600::/36": "42695", - "2a09:400:9000::/29": "208861", - "2405:a400::/32": "38793", - "2406:840:e112::/48": "141712", - "2c0f:f850::/39": "327979", - "2402:800:550f::/43": "7552", - "2408:8957:2300::/40": "17816", - "2620:171:40::/46": "42", - "2804:14d:2a00::/42": "28573", - "2a00:ce8::/32": "20914", - "2a00:6500::/29": "20723", - "2a01:73c0:124::/32": "21450", - "2804:45c8::/47": "266949", - "2a00:f46:1000::/31": "43447", - "2001:678:e84::/48": "57418", - "2408:8957:cb40::/40": "17816", - "2a06:2380::/29": "29423", - "2001:678:118::/48": "57436", - "240a:acba::/32": "145908", - "2803:a040:200::/37": "263750", - "2a06:d581:1000::/36": "13283", - "2803:99e0:10::/44": "270020", - "2409:805e:900::/35": "9808", - "2600:140f:f::/39": "20940", - "2600:1480:2100::/37": "20940", - "2604:e080::/32": "32458", - "2607:fdc8:1400::/48": "30036", - "2801::/48": "52224", - "2801:14:d000::/44": "264843", - "2a01:280:340::/48": "201317", - "2001:480:10::/48": "22", - "2404:140::/32": "37992", - "2407:8780:2::/47": "135628", - "240a:a793::/32": "144589", - "240e:a64:2600::/31": "4134", - "2804:4cb0::/32": "267385", - "2a00:1298:8016::/48": "206055", - "2001:fd8:740::/35": "4775", - "2001:1388:2c::/37": "6147", - "2803:35e0::/32": "270040", - "2a03:42e0::/48": "59753", - "2a0f:607:1004::/48": "209557", - "240a:aedb::/32": "146453", - "2600:1407:d801::/34": "20940", - "2804:54b0::/32": "268665", - "2c0f:fbe0::/28": "36874", - "2001:4998:20::/48": "14776", - "2401:4900:4700::/42": "45609", - "2408:8256:2d7c::/46": "17623", - "240a:a3aa::/32": "143588", - "2c0f:eb00:1300::/28": "61266", - "2001:6f8:824::/35": "4589", - "240a:a030::/32": "142698", - "2800:160:112d::/43": "14259", - "2a06:94c0::/29": "51918", - "2a10:5dc0::/32": "212033", - "2602:10d:8000::/36": "33588", - "2604:7e00:31::/48": "399612", - "2a05:ff00::/31": "202592", - "2620:10a:9059::/48": "2685", - "2804:57e0::/32": "268092", - "2a0e:b107:ee0::/44": "207550", - "2806:20d:5045::/44": "32098", - "2a0a:1f40::/32": "61272", - "2a0b:ec00::/29": "34373", - "2a0e:97c0:1::/48": "58057", - "2001:891::/29": "8447", - "2408:8417::/28": "4837", - "240e:fd:f820::/37": "4134", - "2602:ff8f::/40": "53274", - "2800:160:10c7::/44": "14259", - "2804:610::/36": "262565", - "2a02:26f7:95::/48": "20940", - "2001:df2:d00::/48": "134026", - "2a04:4e40:210::/41": "54113", - "2a0a:b386::/32": "206766", - "2408:8459:7a50::/37": "17816", - "2804:14c:bb8d::/46": "28573", - "2804:2fdc:8000::/36": "264917", - "2806:230:1034::/48": "265594", - "2806:2f0:90c2::/42": "17072", - "2a0f:6f80::/29": "47196", - "2406:fd00:800::/40": "24459", - "2001:1a11:55::/42": "42298", - "2406:2000:1b0::/41": "10310", - "240e:473:3600::/41": "140485", - "2a03:1180::/32": "198002", - "2a09:9900::/32": "57704", - "2409:4043:3000::/27": "55836", - "2620:ad:8081::/41": "52127", - "2001:67c:1324::/48": "43384", - "2803:b3a0::/32": "262186", - "2001:57a:8001::/43": "22773", - "240a:ad7a::/32": "146100", - "2a02:690::/29": "41960", - "2402:800:613a::/41": "7552", - "2402:8100:2041::/42": "45271", - "2408:8624::/30": "4837", - "2600:140f:601::/39": "20940", - "2a00:65c0::/47": "25156", - "2401:af40::/48": "41690", - "2409:8a04:6100::/36": "24547", - "2600:1003:f840::/44": "6167", - "2a02:688::/32": "5394", - "2a02:50c0:a000::/29": "29355", - "2001:438:66::/44": "6461", - "2001:fd8:b300::/42": "132199", - "2407:7c0:14::/40": "138128", - "2604:b180:150::/44": "26925", - "2620:171:ab::/43": "715", - "2804:5680::/32": "268004", - "2401:ff00:a000::/36": "64073", - "240e:351:6400::/30": "4134", - "2a02:26f7:de89::/46": "20940", - "2a07:a880:4701::/48": "3399", - "240a:adb7::/32": "146161", - "240e:473:6720::/41": "140486", - "240a:a8c6::/32": "144896", - "2620:ae:c000::/48": "18686", - "2804:29e4::/32": "264042", - "2804:30f8::/36": "264984", - "2a0c:4200::/29": "48112", - "2001:579:d244::/42": "22773", - "2401:ff80:1403::/45": "133954", - "2c0f:ff80::/32": "327698", - "2001:44b8:3084::/48": "7545", - "2602:feda:c50::/48": "212425", - "2803:4700::/31": "28073", - "2806:230:601a::/48": "265594", - "2a04:f240::/29": "201825", - "2c0f:ee78::/32": "61317", - "2001:1a40::/44": "5416", - "2400:8b00:b00::/42": "45727", - "2404:6740:ffff::/48": "138608", - "2802::/48": "18747", - "2a06:1900::/32": "200635", - "2a0a:ff80::/32": "206566", - "2a0b:6340::/32": "29423", - "2407:a6c0::/32": "63790", - "2605:6c80:11::/48": "397373", - "2804:4618::/34": "266968", - "2a02:348:4::/43": "35470", - "2a02:367:4044::/48": "42804", - "2a06:800::/40": "207257", - "2001:559:256::/48": "33662", - "2401:ff80:1205::/44": "133954", - "240a:ae66::/32": "146336", - "2610:a1:3030::/48": "12008", - "2804:7f8c::/43": "271695", - "2a03:1f60::/32": "8787", - "2001:67c:1443::/48": "31649", - "2405:7f00:9e40::/40": "133414", - "2409:805b:2b05::/32": "56040", - "2a02:26f7:c4c9::/42": "20940", - "2a0b:d000::/29": "34665", - "2a0e:1c80:7::/48": "50304", - "2001:7f8:1d::/48": "29432", - "240e:44d:3e00::/41": "140345", - "2804:5714::/32": "268042", - "2806:230:4000::/48": "265594", - "2a02:5860::/32": "3561", - "2a06:fb80::/29": "21013", - "2405:f740::/32": "59253", - "240a:ab04::/32": "145470", - "2600:9000:5300::/45": "16509", - "2604:4e00::/33": "25764", - "2a04:2fc0::/32": "8496", - "2001:559:c096::/48": "33659", - "2001:67c:484::/48": "35044", - "240e:5f:6003::/48": "136200", - "2001:559:852f::/48": "33662", - "2001:df3:fc00::/48": "134548", - "2403:3d00::/32": "133720", - "240e:4:e100::/35": "4134", - "2620:107:7006::/48": "3962", - "2801:1f0:402a::/41": "3573", - "2803:6680::/32": "267789", - "2804:498::/32": "52988", - "2806:2f0:3361::/40": "17072", - "2a00:10a0:7::/44": "35745", - "2001:559:7fd::/48": "7725", - "2401:ff80:1c85::/44": "133954", - "2402:a300:c000::/45": "55427", - "2600:100d:9e10::/40": "22394", - "2804:3bf0::/33": "266181", - "2a05:a1c7::/32": "201155", - "2a09:d9c0::/32": "207568", - "2001:559:326::/48": "13367", - "240e:41:4800::/32": "4134", - "240e:3be:8200::/35": "140316", - "240e:679:1800::/32": "4134", - "2800:800:540::/43": "26611", - "2a02:26f7:e2c0::/48": "36183", - "2a03:8600:1007::/48": "35543", - "2a0e:b107:1660::/43": "211350", - "2001:4878:2347::/48": "12222", - "2401:50c0::/32": "136732", - "2804:13dc:ffb0::/41": "262428", - "2a00:1ca0::/32": "21413", - "2a02:26f7:f645::/46": "20940", - "2a03:b000:a00::/40": "25369", - "2a09:7:2000::/48": "39220", - "2001:ff8::/40": "7582", - "240a:afcf::/32": "146697", - "2804:2678::/32": "264342", - "2a01:3f1:3000::/38": "56908", - "2a05:bd40:d17::/48": "29264", - "2406:7400:c0::/45": "24309", - "240a:acc6::/32": "145920", - "2804:e14::/32": "52543", - "2806:230:3004::/48": "265594", - "2001:1248:563f::/41": "11172", - "2001:4b20:1000:2515::/32": "34288", - "2402:e280:3d9a::/42": "134674", - "2408:8459:8c50::/38": "17816", - "2409:8907:8120::/38": "24547", - "2804:3094::/32": "264962", - "2804:5984:8402::/36": "268707", - "2a0b:2640::/29": "208684", - "2001:559:43f::/41": "33287", - "2001:fd8:1e8::/38": "4775", - "2405:6e00:420::/43": "18291", - "2604:fa00::/32": "32278", - "2a00:8a03::/43": "28723", - "2a01:aa00::/32": "34144", - "2607:2280::/32": "14487", - "240a:a54c::/32": "144006", - "2610:a1:3040::/48": "12008", - "2001:42a0::/32": "6083", - "2a02:26f7:ee80::/48": "36183", - "2001:559:c2fd::/46": "33287", - "2001:678:3::/48": "42", - "2400:cb00:230::/44": "13335", - "2401:ff80:178d::/46": "133954", - "2408:8957:9f00::/40": "17816", - "240e:1f:b000::/33": "4134", - "2a0a:1a00::/29": "58130", - "2001:559:83f0::/48": "7922", - "2606:ef80:6::/48": "3595", - "2a02:6300::/42": "50128", - "2a0c:dd80:1000::/48": "208626", - "2001:550:a90a::/37": "174", - "2001:678:fb8::/48": "211042", - "2001:1b75::/36": "28852", - "240a:ab45::/32": "145535", - "2a03:da00::/35": "24991", - "2a07:9944:30::/48": "58305", - "2607:fb10:9016::/33": "2906", - "2804:214:4016::/39": "26615", - "2401:d800:25d0::/42": "7552", - "240a:a01c::/32": "142678", - "2804:51dc::/32": "268481", - "2a0c:9a47::/44": "209533", - "2001:4c0:6003::/32": "855", - "2001:559:3e6::/48": "20214", - "2001:559:c37e::/47": "7922", - "2a0d:7700::/29": "47926", - "2604:db00::/32": "32233", - "240a:a1d9::/32": "143123", - "2620:158:c1::/48": "13996", - "2804:15cc::/32": "263411", - "2a01:42e0::/35": "29046", - "2a03:4b21::/32": "201396", - "2806:106e:5::/48": "8151", - "2401:d800:7760::/40": "7552", - "2401:d800:9440::/42": "7552", - "2403:f040::/32": "4618", - "240e:438:a020::/43": "140647", - "2605:de40:a000::/33": "397553", - "2606:a300:5::/32": "35847", - "2804:164c:cc::/42": "263280", - "240a:af27::/32": "146529", - "2800:bf0:24::/44": "27947", - "2804:3428::/32": "265439", - "2804:4354::/32": "267563", - "2c0f:edd8::/32": "328114", - "2402:9500:d01::/32": "55720", - "2610:1c8::/43": "23393", - "2804:56b4:1000::/34": "268019", - "2001:df4:bd00::/48": "137338", - "2600:1800:9::/43": "16552", - "2a00:4520:9::/32": "42961", - "2403:e800:e803:1800::/44": "4637", - "2409:8053:1800::/47": "56047", - "2600:6c38:1ab::/41": "20115", - "2a01:8f00::/32": "197063", - "2a04:4e40:1600::/47": "54113", - "2a0b:bcc5::/38": "34669", - "2001:559:870c::/48": "33287", - "2001:4830:c160::/44": "27552", - "2605:8a40::/32": "13855", - "2620:101:c000::/40": "3359", - "2620:11c:c001::/48": "13768", - "2800:bf0:8020::/44": "52257", - "2804:8::/45": "14840", - "2001:410:e000::/40": "7860", - "2001:559:41a::/48": "33660", - "2001:559:841c::/48": "21508", - "2401:fd80:1ff::/48": "137502", - "2804:14d:800::/40": "28573", - "2804:5568::/32": "267933", - "2001:1a68:4::/46": "15694", - "2605:a401:8dd2::/42": "33363", - "2804:19b4::/46": "61813", - "2001:67c:4f0::/48": "3303", - "2408:8956:b500::/40": "17816", - "2409:805e:3900::/31": "9808", - "2606:2800:4a54::/46": "15133", - "2a02:26f7:f004::/48": "36183", - "2408:8256:3087::/43": "17623", - "2409:8060:900::/35": "9808", - "240a:aef1::/32": "146475", - "2602:fde6::/36": "10796", - "2804:17c4::/35": "263250", - "2001:559:c35a::/48": "33651", - "2403:a200:a1ff::/48": "17621", - "240a:a837::/32": "144753", - "2602:fed3:b::/48": "21769", - "2a02:2230:6500::/32": "25467", - "2001:559:4bc::/47": "33287", - "2001:44b8:6065::/48": "4739", - "2403:d4c0::/32": "136714", - "2408:84f3:4a40::/32": "17816", - "2604:9980:230::/48": "17216", - "2a00:55a0:9::/48": "19969", - "2405:201:5000::/32": "55836", - "2600:180a:4002::/31": "16552", - "2606:f403::/32": "11776", - "2804:2488::/43": "264228", - "2a02:578:5c00::/38": "9031", - "240a:aa42::/32": "145276", - "2800:ba0:2::/48": "263812", - "2804:191c::/32": "52641", - "2804:3df4::/32": "266565", - "2804:59ec::/32": "268734", - "2a0d:aa80::/29": "60380", - "2a02:26f7:61::/48": "20940", - "2408:8459:ff70::/30": "17816", - "2600:1801:4::/46": "16552", - "2606:31c0::/32": "54817", - "2607:3180::/47": "14877", - "2804:4dcc:6000::/32": "52856", - "2806:2f0:4201::/46": "17072", - "2a01:270:f000::/36": "41075", - "2a04:ac00:1::/48": "201848", - "2a0f:ec00:1f::/48": "60781", - "2a02:2808:5501::/48": "47531", - "2001:559:3d5::/48": "33651", - "2001:43f8:160::/48": "37170", - "2402:800:5eb1::/44": "7552", - "2406:2800::/32": "18282", - "2407:a00::/32": "9268", - "2407:24c0:1::/46": "136835", - "240a:a9c0::/32": "145146", - "2001:b48::/29": "16117", - "240a:a8ec::/32": "144934", - "240a:abe4::/32": "145694", - "2a02:26f7:c8c4::/48": "36183", - "2a0c:9a40:1038::/48": "34927", - "2a0e:aa07:f0b0::/48": "141694", - "2400:8500:5700::/48": "58651", - "2602:ff96:2::/48": "8100", - "2803:d700:bd00::/33": "61461", - "2804:5520:1000::/36": "262699", - "2804:67e8::/32": "269658", - "2600:8807:1f42::/42": "22773", - "2804:2df8::/32": "265315", - "2001:678:76c::/48": "8315", - "2001:1448::/32": "16245", - "2403:f680:66::/48": "58898", - "2408:840c:5400::/40": "17621", - "2408:887e::/32": "4837", - "2408:8957:900::/40": "17816", - "2607:f6f0:b000::/40": "64275", - "2a02:26f7:b889::/42": "20940", - "2a11:200::/29": "208861", - "2804:14d:badf::/42": "28573", - "2a01:a7e0:1000::/36": "29422", - "2a02:1310:353::/48": "21130", - "2001:559:c055::/46": "7015", - "2001:dcc:1000::/48": "23600", - "2602:fd66:b15::/41": "14756", - "240e:109:8044::/48": "134768", - "2607:fb10:2014::/48": "55095", - "2804:28e4:20::/37": "28260", - "2804:5120::/33": "268432", - "2a00:ed0::/32": "8426", - "2001:559:5c2::/45": "7922", - "2400:f0c0:fcf::/32": "136477", - "2409:8714::/33": "56044", - "2a00:139c::/32": "58069", - "2001:67c:608::/48": "200020", - "2402:3a80:c02c::/48": "38266", - "2408:8256:319c::/48": "17816", - "2a0f:9247::/44": "207267", - "2c0f:f6e0::/32": "37618", - "2001:559:8643::/48": "33651", - "2402:800:5939::/41": "7552", - "240e:940:f00::/32": "4134", - "2804:76f0::/32": "271144", - "2a02:f680:2::/29": "35196", - "2a02:26f7:b981::/46": "20940", - "2402:800:5c8d::/42": "7552", - "2405:aac0:55::/46": "139949", - "240a:a447::/32": "143745", - "2605:dd40:9000::/33": "398549", - "2610:a1:1028::/48": "19905", - "2804:1ca0:ff01::/46": "61666", - "2804:31e4::/32": "265043", - "2a02:e480::/29": "47441", - "240a:abe7::/32": "145697", - "2001:678:494::/48": "42135", - "240a:aec8::/32": "146434", - "2a00:cc0:fffd::/46": "13237", - "2a09:4d42::/29": "44812", - "2001:4998:38::/46": "26085", - "2408:84f3:3090::/38": "17816", - "2605:19c0::/32": "30697", - "2001:559:ee::/43": "7922", - "2402:800:531d::/42": "7552", - "240a:0:100::/38": "9605", - "2a0c:4c00::/29": "205260", - "2400:c500:100::/38": "17434", - "240e:6b8:4060::/36": "140313", - "2a02:2ad0:640::/36": "702", - "2a0a:b500::/29": "57878", - "2803:7f60::/32": "52468", - "2a00:aa00::/32": "15663", - "2606:2800:4213::/48": "14153", - "2a0e:d640::/29": "208372", - "2600:6c38:414::/44": "20115", - "2607:4580::/32": "395173", - "2806:266:380::/41": "13999", - "2a00:1ac0::/32": "35260", - "2a0a:d500::/29": "206928", - "2a04:a147::/32": "198507", - "2001:998::/40": "719", - "2400:fb00::/32": "55670", - "2408:84f3:f650::/44": "17816", - "2804:3174::/36": "265016", - "2a00:fc80::/48": "60781", - "2a02:6a0:cffe::/47": "8729", - "2a02:26f7:fa41::/46": "20940", - "2a0e:97c0:4f0::/48": "211013", - "2407:5d00::/32": "55720", - "2602:fed2:7101::/48": "209864", - "2607:f3a0:1014::/36": "23342", - "2804:5fcc::/32": "269124", - "2a02:26f7:ec05::/46": "20940", - "2a0e:b107:f2a::/48": "212268", - "2001:559:2d1::/48": "33491", - "240a:a2a2::/32": "143324", - "240a:aeae::/32": "146408", - "2605:e8c0::/32": "393444", - "2a02:26f7:e608::/48": "36183", - "2a05:4140:600::/40": "213388", - "240e:982:200::/36": "4134", - "2606:6140::/34": "31764", - "2803:9800:a501::/45": "11664", - "2a04:1bc0::/32": "60982", - "2402:e380:120::/45": "139073", - "2607:fdf0:5e8c::/43": "8008", - "2804:4bc::/33": "262462", - "2a03:d000:3000::/36": "31208", - "2403:5f40:1::/48": "58869", - "2404:1940::/32": "136030", - "2603:80bd::/32": "11427", - "2620:106:6009::/45": "3562", - "2804:1128:8080::/33": "263661", - "2804:2904::/32": "262588", - "2806:20d:5056::/44": "32098", - "2001:1470::/29": "2107", - "2401:1c00:2100::/35": "38809", - "2a00:1900::/32": "3209", - "240a:a790::/32": "144586", - "2620:11c:e00f::/48": "7415", - "2800:160:1af8::/46": "14259", - "2804:1e18::/32": "264407", - "2001:1458::/31": "513", - "2402:c480:5001::/34": "63916", - "2406:340::/32": "140576", - "2804:7b4c::/33": "271423", - "2a02:ff0:3f00::/40": "12735", - "2a02:ed04:4610::/39": "50304", - "2001:253:126::/48": "142092", - "2001:559:335::/48": "33657", - "2610:a1:1010::/48": "397218", - "2a05:3240::/29": "59780", - "2001:16a2:ee00::/39": "39386", - "2607:fcd0:fa80:8400::/55": "8100", - "2804:7910::/32": "271282", - "2a02:e30:f008::/48": "51426", - "2a07:3403::/32": "46516", - "2a0d:d900:9::/48": "57164", - "2400:8b00:d00::/42": "45727", - "2407:e500:c::/46": "38551", - "2602:febb:200::/36": "394989", - "2620:52:1::/48": "31976", - "2804:7e18:8200::/36": "271602", - "2404:d180:1a::/48": "133372", - "240a:a03d::/32": "142711", - "2a01:cc00::/32": "47377", - "2a0c:4e40::/29": "1764", - "2a0e:b101::/38": "60474", - "2001:7fa:b::/48": "18398", - "2607:fdf0:5e1e::/42": "8008", - "2804:40e0::/33": "265987", - "2a01:a8::/32": "39122", - "2a0c:d100::/29": "202283", - "2a0e:f600::/42": "60781", - "2001:468:f001::/40": "11537", - "2408:8956:5600::/40": "17622", - "240a:a31b::/32": "143445", - "2607:f6f0:20d::/48": "32323", - "2804:7ef8::/32": "271658", - "2001:44b8:30c9::/46": "7545", - "2a04:4280:200::/48": "43260", - "2604:a00:102::/35": "19318", - "2803:d3a0::/32": "267752", - "2804:2164:c100::/35": "264552", - "2a04:7640::/48": "6730", - "240e:3b5:d000::/36": "134772", - "240e:44d:7300::/41": "140345", - "2606:dc0::/32": "398816", - "2001:559:82e3::/48": "7922", - "2401:d800:5210::/42": "7552", - "2804:6f34::/32": "28234", - "2a02:ee80:407d::/46": "3573", - "2001:559:838d::/48": "7015", - "2607:f160:2e::/48": "22394", - "2800:160:206d::/43": "14259", - "2a06:2080::/29": "197825", - "2001:559:867f::/48": "33652", - "2402:800:9bb7::/41": "7552", - "240a:a74e::/32": "144520", - "240a:ad73::/32": "146093", - "2804:7854::/32": "271235", - "2a01:4280:2::/32": "31391", - "2a01:667:100::/37": "48951", - "2001:df3:8880::/48": "132335", - "2001:4db8::/32": "35706", - "2400:9340::/32": "136189", - "2402:800:91b7::/41": "7552", - "2403:41c0::/32": "63969", - "2804:7248::/32": "270844", - "2806:2f0:9281::/42": "17072", - "2a02:26f7:26::/48": "36183", - "2a03:e280::/32": "60781", - "2600:370f:7423::/41": "32261", - "2a0e:aa00:120::/44": "41378", - "2404:f4c0:f102::/48": "139216", - "240a:a46f::/32": "143785", - "2602:fed2:ff4::/48": "53356", - "2a02:cb43:8006::/48": "20546", - "2a03:2e0::/32": "197451", - "2a07:6480::/29": "202812", - "2001:438:fffd:6d::/55": "6461", - "2600:5002:1807::/28": "7029", - "2607:fdf0:5e77::/44": "8008", - "2804:1ca4:8081::/33": "263010", - "2a0b:67c0::/29": "28920", - "2001:4818:5000::/36": "30715", - "2400:adc3:800::/39": "9541", - "2404:d500:4::/47": "132370", - "2804:137c::/32": "26609", - "2001:4220:1::/46": "24835", - "2606:7d00:d001::/34": "23248", - "2800:160:14fe::/39": "14259", - "2a01:8840:22::/45": "12041", - "2400:3c00::/47": "38258", - "240d:c010:1a::/48": "139341", - "2600:c08::/34": "10913", - "2620:4d:400f::/43": "62597", - "2001:559:82fd::/46": "33660", - "240a:ac92::/32": "145868", - "2600:1406:7c01::/38": "20940", - "2800:110::/44": "4270", - "2804:2b8::/32": "28130", - "2001:1b70:86::/48": "158", - "2a09:5180::/29": "42487", - "2001:559:c23b::/45": "7922", - "2600:6c38:e0c::/47": "20115", - "2803:5480::/32": "28038", - "2a02:1ba::/29": "47692", - "2001:559:79d::/46": "21508", - "2001:16a2:c1f0::/38": "39386", - "2402:9d80:269::/48": "131429", - "2600:6c38:199::/42": "20115", - "2607:c180::/36": "13851", - "2a02:26f7:ef85::/46": "20940", - "2a0b:b300::/29": "206841", - "2c0f:f4a8:4000::/32": "37254", - "2408:84f4::/28": "4837", - "2604:c0c0:4000::/35": "14525", - "2620:1b4:ffff::/48": "16401", - "2800:484:6600::/35": "10620", - "2803:5c80:5507::/48": "64114", - "2804:1b0:8000::/36": "18881", - "2a02:60::/29": "35492", - "2001:1248:5625::/46": "11172", - "2604:20c0:2000::/36": "40641", - "2804:6aac::/32": "270352", - "2804:743c::/32": "270968", - "2a0a:e780::/29": "62455", - "2a0b:6700::/32": "197277", - "2001:1250:b000::/44": "22894", - "2401:ff80:1493::/39": "133954", - "2607:fb90:c13e::/48": "22140", - "2804:14c:4181::/45": "28573", - "2a02:26f0:81::/46": "20940", - "2a04:d8c0::/29": "202020", - "2a0a:3500::/32": "21485", - "2001:1248:5a5b::/42": "11172", - "2804:4340::/32": "267558", - "2a02:5820::/32": "201939", - "2a00:1908::/36": "43586", - "2804:b64::/32": "52770", - "2408:8459:e250::/37": "17816", - "2800:160:1fc2::/45": "14259", - "2806:370:4210::/40": "28403", - "2804:56e0:8400::/33": "268029", - "2001:67c:2394::/48": "25504", - "2408:8256:3996::/48": "17816", - "2600:9000:1028::/48": "16509", - "2600:9000:1160::/44": "16509", - "2804:34e4::/32": "264985", - "2804:38f0::/32": "266513", - "2804:4fa8::/32": "268341", - "2a0c:4100::/29": "204823", - "240e:108:11e4::/38": "4134", - "2804:30a8::/32": "264967", - "2402:8100:2580::/43": "45271", - "2804:448:104::/40": "262427", - "2001:648:2e01::/48": "8581", - "2620:74:27::/48": "396570", - "2804:824::/32": "262353", - "2804:6bf0::/32": "270435", - "2a00:1670::/32": "8902", - "2a0c:7e40:7bb1::/48": "20473", - "2001:bf7:170::/44": "206813", - "2401:d800:d20::/41": "7552", - "2600:1010:b070::/39": "22394", - "2a02:26f7:d64c::/48": "36183", - "2602:800:1005::/48": "397677", - "2804:4004::/32": "265928", - "2a09:ca00::/48": "34534", - "2a02:26f7:cfc1::/46": "20940", - "2a0c:4300::/41": "43722", - "2001:559:8323::/45": "7015", - "2001:67c:13c0::/48": "559", - "2402:800:9be0::/44": "7552", - "240a:a9b9::/32": "145139", - "2620:1b:6000::/47": "30150", - "2a04:4e40:1610::/42": "54113", - "2001:49c8::/32": "22284", - "2406:d500:14::/48": "136557", - "2620:101:9000::/48": "40934", - "2a02:26f7:f940::/48": "36183", - "2401:d800:7e40::/42": "7552", - "2409:8763::/28": "9808", - "2600:1419:7401::/36": "20940", - "2600:1419:8000::/48": "4230", - "2604:880:212::/45": "29802", - "2605:6400:20::/48": "53667", - "2606:2b80::/32": "53338", - "2001:4878:2225::/48": "12222", - "2605:6c00:1000::/34": "2734", - "2a09:be40:3000::/46": "208483", - "2001:559:1ed::/48": "33651", - "2406:f0c0:111::/48": "138654", - "2806:230:2050::/48": "265594", - "2a0b:f800::/32": "39251", - "2001:559:3b1::/48": "33659", - "2001:559:8194::/48": "22909", - "2001:918:ff65::/43": "3303", - "2409:8753:300::/37": "56047", - "2607:1280:1210::/42": "394972", - "2804:3674::/32": "37468", - "2c0f:f6d0::/44": "327687", - "2001:268:83c::/41": "2516", - "2001:4288:102::/38": "6713", - "2600:1001:b0e0::/43": "22394", - "2001:254:8000::/33": "24490", - "2406:2000:1a4::/46": "24506", - "2602::/24": "209", - "2620:68::/48": "29906", - "2402:4f00::/33": "58453", - "2620:0:22f0::/48": "6406", - "2620:11b:e0a6::/43": "3356", - "2600:100a:b0d0::/44": "6167", - "2804:1b40::/32": "28255", - "2a01:8800::/29": "15693", - "2401:c340::/46": "56136", - "2408:8456:8640::/39": "17816", - "240a:a79c::/32": "144598", - "2a07:dc00:1330::/44": "14627", - "2a04:f780:1000::/36": "134512", - "2400:ffc0::/47": "17439", - "240a:a71d::/32": "144471", - "2600:1415:c00::/48": "24319", - "2600:1f1f::/36": "16509", - "2606:ae00:bd31::/41": "7287", - "2804:4ae4:1244::/32": "267270", - "2a00:18e0::/48": "196763", - "2408:8207:8510::/34": "4808", - "240e:473:7350::/40": "4134", - "2604:4300:f27::/43": "33387", - "2804:8e4::/32": "52874", - "2a03:5a00:10::/48": "57489", - "2a0f:4440:aaaa::/48": "50937", - "240a:af23::/32": "146525", - "2803:b2a0::/32": "3549", - "2804:3d80::/32": "266535", - "2404:2480:6501::/32": "135391", - "2804:5828::/32": "268110", - "2804:7644::/32": "271100", - "2a02:2698:a004::/46": "49874", - "2a07:6000::/29": "59586", - "2001:559:83e1::/48": "33287", - "2001:5e0:21::/46": "16713", - "2001:67c:197c::/48": "199852", - "2001:df1:1580::/48": "137130", - "2001:df4:5980::/48": "140954", - "2001:1248:5bb6::/41": "11172", - "2404:f300:12::/32": "58463", - "2c0f:f4c0::/35": "37611", - "2001:559:c272::/48": "7922", - "2001:df0:7c80::/48": "6461", - "240a:aa8b::/32": "145349", - "2604:1380:4550::/42": "54825", - "2001:678:2f0::/48": "20847", - "2001:df0:bd::/48": "45292", - "2409:8704:500::/34": "24547", - "2604:880:6e::/48": "394727", - "2804:3730::/32": "266395", - "2001:500:3682::/48": "397237", - "2001:648:2e80::/48": "8253", - "2804:7324::/32": "270898", - "2a04:1447::/45": "51964", - "2c0f:e8f8:2000::/40": "36868", - "2804:4cb4::/32": "267386", - "2a06:7243::/46": "62425", - "2a0c:4444::/48": "199438", - "2001:67c:6b8::/48": "31477", - "2401:8f40:1::/48": "136950", - "2804:680:11::/44": "262589", - "2a00:8b20::/32": "48407", - "2804:2dd4::/32": "265306", - "2001:559:1d4::/47": "7922", - "2001:678:e74::/48": "196994", - "2408:84f3:a010::/42": "134543", - "240a:ae8d::/32": "146375", - "240e:d6:6000::/37": "133774", - "2600:1f01:48b0::/47": "16509", - "2800:bf0:2a0::/44": "52257", - "2a02:10:32::/40": "24785", - "2001:559:2f2::/48": "7922", - "2001:559:7bf::/48": "33651", - "2403:9800:b050::/45": "4771", - "2a01:a920::/32": "201866", - "2a02:26f7:70::/48": "36183", - "2c0f:f9f8::/32": "37424", - "240e:438:a620::/43": "140647", - "2600:6c38:41c::/41": "20115", - "2800:160:159a::/45": "14259", - "2804:524c::/32": "268509", - "2a00:ad87:4600::/48": "9890", - "2001:d80::/32": "2687", - "2400:9940:2001::/32": "136224", - "240a:ab28::/32": "145506", - "2605:7e80::/32": "62969", - "2a02:26f7:d289::/46": "20940", - "2001:559:192::/48": "20214", - "2401:3cc0:841::/39": "137409", - "2408:8957:cbc0::/37": "17622", - "2605:a401:8002::/44": "33363", - "2801:80:ae0::/48": "61779", - "2a00:1582:3::/29": "39010", - "2a00:5180:1::/46": "44491", - "2a02:2b30::/32": "21390", - "2a0a:ba40::/29": "205958", - "2a0f:5000::/29": "205500", - "2001:67c:2660::/48": "205016", - "2001:df7:6680::/48": "146961", - "2408:8459:8410::/42": "17623", - "2804:908:a00::/32": "263047", - "2a00:7147:e10::/48": "51430", - "2a07:2f00::/48": "203132", - "2a0f:9340::/48": "1299", - "2001:559:529::/48": "7922", - "2001:df5:9580::/48": "132010", - "2404:cc00:6::/34": "24441", - "2001:559:7cb::/48": "33667", - "2001:df5:3b00::/48": "17439", - "2001:1388:7c2::/36": "6147", - "2001:1b70:4280::/48": "8147", - "2800:4f0:24::/41": "28006", - "2a0d:8d06:1003::/32": "60557", - "2001:678:870::/48": "199815", - "2001:678:b98::/48": "207822", - "2001:4048:106::/47": "33922", - "2404:bf40:c201::/40": "139084", - "240a:a2cb::/32": "143365", - "2a0e:b580::/29": "59808", - "2001:559:2de::/48": "33660", - "2001:559:83c9::/48": "7922", - "2001:df3:2900::/48": "24060", - "2804:3128::/32": "264997", - "2804:4618:3400::/32": "266968", - "2804:601c::/32": "269146", - "2a02:f200::/29": "33940", - "2001:418:1467::/40": "2914", - "2408:894e::/32": "4837", - "240e:3b5:1200::/39": "4134", - "2a0e:b102:120::/45": "212895", - "2a02:26f7:b644::/48": "36183", - "2a03:b8c0:20::/46": "396253", - "2001:df1:3280::/47": "139601", - "240e:44d:5e00::/41": "140345", - "2610:48::/32": "557", - "2a02:26f7:e449::/42": "20940", - "2400:adc0:c010::/47": "9541", - "2401:4900:4940::/44": "45609", - "2605:a401:8148::/42": "33363", - "2a02:d880::/32": "41960", - "2401:ff80:1385::/44": "133954", - "2804:51e0::/32": "268482", - "2001:559:8513::/48": "7016", - "2803:5440:100::/47": "264738", - "2804:4274::/32": "267501", - "2a02:e000::/29": "12670", - "2a05:c5c0::/47": "3164", - "2001:559:c0a3::/48": "7725", - "2406:16c0::/32": "132934", - "2600:100f:f000::/44": "6167", - "2a03:18e0::/32": "39567", - "2a0c:bec0::/29": "34984", - "2001:468:2600::/48": "396955", - "2001:559:750::/48": "7015", - "2403:7300::/32": "55891", - "240a:a97e::/32": "145080", - "2602:feda:de0::/47": "142641", - "2a0f:607:1005::/46": "60614", - "2401:5840::/37": "132113", - "2409:8904:a540::/38": "24547", - "240a:a376::/32": "143536", - "2804:2f48::/33": "53052", - "2804:5f10:9000::/33": "269074", - "2a02:26f7:ee05::/46": "20940", - "2a07:fec0::/29": "213138", - "2001:4c8:101e::/47": "15290", - "2001:550:5b00:3::/37": "174", - "2001:c38:9010::/47": "9931", - "2405:8340::/32": "132923", - "2620:149:a1b::/48": "714", - "240a:aded::/32": "146215", - "240a:af17::/32": "146513", - "2a04:5540::/29": "42557", - "240a:a8a1::/32": "144859", - "240e:3bd:7600::/39": "140313", - "2605:9780:1e00::/39": "393544", - "2a02:22f0::/32": "52088", - "2a02:2e00:f000::/36": "12479", - "2a0e:b107:3ef::/48": "212034", - "2409:806a:3100::/36": "9808", - "240e:a6:2000::/31": "4134", - "2603:c0e9::/36": "1218", - "2604:6300::/32": "19024", - "2a0b:1905::/30": "57878", - "2400:8500:1000::/36": "7506", - "240a:a463::/32": "143773", - "2a05:1cc0::/29": "201601", - "2a05:4480::/29": "20853", - "2a05:d880::/30": "43066", - "2001:470:22::/48": "217", - "2409:806c:2100::/36": "9808", - "240e:37f:1a00::/34": "140330", - "2801:80:16f0::/48": "264895", - "2a02:26f7:ce01::/46": "20940", - "2a03:5341::/44": "10455", - "2402:c840::/32": "37892", - "2804:0:1801::/37": "2716", - "2001:550:2208::/46": "174", - "2001:559:8271::/48": "7725", - "2405:3300::/32": "131143", - "2a00:4b00:22e::/40": "41935", - "2a00:7800::/32": "51929", - "2804:508::/32": "52999", - "2804:3160:8000::/33": "265010", - "2804:54dc::/32": "268674", - "2a05:6280:dead::/48": "201349", - "2001:1248:5f4b::/42": "11172", - "2409:8914:a800::/39": "56044", - "2804:44e8:301::/32": "267660", - "2a01:c50e:700::/36": "12479", - "2a02:ee80:419f::/42": "3573", - "2a0b:31c0:564::/29": "205726", - "2a0f:9400:8005::/48": "44992", - "2001:559:7f4::/48": "33662", - "2405:9800:b640::/36": "45430", - "2605:8000:de01::/42": "4261", - "2a03:2380:5::/48": "212522", - "2a0f:dfc0::/32": "60781", - "2001:df6:5e00::/47": "134909", - "2600:9000:21a4::/46": "16509", - "2a02:26f1::/29": "20940", - "2a0f:4200::/29": "207614", - "2402:800:5dee::/38": "7552", - "240e:473:8650::/39": "4134", - "2800:160:1bab::/43": "14259", - "2001:559:85e2::/48": "33659", - "2001:df0:13::/48": "38244", - "2620:10d::/44": "33503", - "2804:2b78:8000::/33": "52468", - "2804:6008::/32": "269141", - "2a0b:b87:ffd8::/48": "212701", - "240a:aff4::/32": "146734", - "2600:14c0:a::/47": "21342", - "2602:fff6:6::/48": "8100", - "2a01:368::/29": "20845", - "2a02:858:200::/29": "3329", - "2a03:db80:4424::/48": "5501", - "2a0b:7a00:2::/47": "60689", - "2405:203:89d::/39": "55836", - "240e:fd:9000::/36": "4134", - "2804:69e0::/32": "270297", - "2a00:1588:f800::/37": "43139", - "2001:678:780::/48": "201626", - "2401:af00::/32": "45345", - "240e:438:b040::/38": "4134", - "2605:db40::/32": "398326", - "2a07:a540::/29": "394545", - "2405:7f00:c1a0::/38": "133414", - "2806:230:6033::/48": "11888", - "2a05:1083:fcb0::/41": "209870", - "2a0e:cd01:1b00::/34": "23031", - "2001:978:4001::/38": "174", - "2001:1980:900::/34": "29838", - "2402:5300:4f00::/35": "45903", - "2404:3d00:4118::/42": "3573", - "2804:47a8::/32": "267069", - "2001:470:51::/45": "6939", - "2001:559:264::/47": "7922", - "2001:559:8497::/48": "7015", - "2001:df5:8280::/48": "138622", - "2001:ee0:4522::/40": "45899", - "2604:6600:9a::/42": "40676", - "2604:b900:6000::/36": "40900", - "2a02:b50:4012::/48": "29791", - "2408:8459:8810::/42": "17623", - "240e:473:7400::/41": "140485", - "2804:51b0::/32": "268470", - "2001:19c0::/32": "36666", - "2409:8c20:5000::/42": "56046", - "2600:1409:5001::/36": "20940", - "2001:b033::/23": "3462", - "2402:800:9a7f::/40": "7552", - "240a:af26::/32": "146528", - "2605:a40e:526::/32": "33363", - "2001:559:722::/48": "7922", - "2001:df0:8000::/48": "58762", - "2001:4de0:4200::/47": "12989", - "2604:2c00:ff80::/41": "11071", - "2001:559:7fc::/48": "7015", - "240a:af59::/32": "146579", - "2804:35a8::/32": "266299", - "2a02:26f7:d6c9::/46": "20940", - "2a0e:b107:5ac::/46": "203943", - "2408:840c:2d00::/40": "17621", - "240a:a25e::/32": "143256", - "240e:44d:2c00::/41": "140345", - "240e:979:9500::/40": "131325", - "2804:870:c::/32": "52871", - "2a02:26f7:b708::/48": "36183", - "2a04:4d40::/29": "16019", - "2a10:cc40:960::/45": "20473", - "240e:473:2d20::/41": "140486", - "2620:f4:8000::/48": "54652", - "2804:6fa4::/32": "270674", - "2a09:6f00::/29": "208861", - "2a0b:bd00::/29": "208861", - "2800:4f0:21::/48": "28006", - "2803:6c0::/32": "265639", - "2404:fbc0::/48": "63734", - "2600:1404:e801::/37": "20940", - "2605:f480::/31": "7979", - "2804:1a88::/32": "61864", - "2a01:d0:1d::/48": "50392", - "2a05:4140:326::/40": "212271", - "2a07:3b00::/29": "198024", - "2401:4900:4ac0::/44": "45609", - "2801:1a0::/42": "52467", - "2804:7884::/32": "271248", - "2a09:eac0::/32": "205718", - "2001:500:70::/48": "30133", - "2001:4860::/33": "15169", - "2401:4900:1a50::/44": "45609", - "2408:8957:b600::/40": "17622", - "2804:bd8:ec00::/35": "52838", - "2804:6664::/32": "269555", - "2a07:8f40::/29": "57831", - "2a0a:25c0::/29": "42977", - "2607:d400:3::/32": "22364", - "2620:ef:8000::/48": "35977", - "2804:14c:fc88::/46": "28573", - "2a02:2668::/34": "16345", - "2a02:f800::/29": "20485", - "2a00:e8c0::/32": "34797", - "2001:550:2200:100::/54": "174", - "2001:4908::/32": "7029", - "2401:52c0::/32": "134968", - "2403:c900::/32": "58600", - "240e:e3:8000::/33": "4812", - "2800:160:159e::/42": "14259", - "2804:4e90::/32": "268269", - "2a02:e981:1::/42": "19551", - "2804:eec:2000::/48": "25933", - "2a01:b740:a25::/48": "714", - "2a09:3740::/29": "208944", - "2001:1528::/32": "15685", - "240a:ae7b::/32": "146357", - "240e:3bc:d000::/36": "134772", - "2600:1415:13::/45": "20940", - "2a01:7d20:100::/47": "203645", - "2a01:6ea0::/32": "199880", - "2001:559:42a::/48": "33657", - "2001:559:8167::/48": "33667", - "2001:1248:9885::/46": "11172", - "2401:d800:b430::/41": "7552", - "240a:a60d::/32": "144199", - "2620:149:14a::/47": "714", - "2800:5d0:802::/32": "52302", - "2a02:26f7:f601::/46": "20940", - "2a02:27b8:4000::/48": "49278", - "2a04:4e40:b010::/41": "54113", - "2a0a:a0c0::/29": "50973", - "2001:ce1::/32": "137207", - "2408:8a22:9a00::/34": "139007", - "2a04:e640::/29": "34241", - "2001:df3:4400::/48": "133969", - "2401:d180::/45": "133865", - "2404:5540::/32": "134715", - "2407:3100::/32": "10118", - "240a:ab70::/32": "145578", - "240e:438:4240::/37": "4134", - "240e:438:8e40::/35": "4134", - "2406:3002:21::/43": "4657", - "2600:6c38:104::/47": "20115", - "2602:ffbd::/36": "14440", - "2803:d460::/32": "3549", - "2806:2f0:95e1::/38": "17072", - "2a03:a960:2::/42": "61317", - "2408:840c:af00::/40": "17621", - "2408:8459:10::/41": "17622", - "2600:1009:b130::/44": "22394", - "2600:370f:72a8::/47": "32261", - "2604:6840:1500::/36": "33438", - "2406:2000:efb4::/44": "10310", - "2620:149:bc::/41": "714", - "2401:d800:fe50::/42": "7552", - "2403:8c00::/32": "24371", - "2408:820c:80::/35": "17621", - "240a:a1f4::/32": "143150", - "240e:473:6750::/40": "4134", - "2a02:20c8:1241::/48": "44511", - "2a0e:b105:4b4::/46": "20473", - "2001:559:c202::/48": "33661", - "2001:67c:1bac::/48": "59876", - "2001:4da8:c020::/34": "28824", - "2604:640::/48": "393562", - "2605:a401:858e::/43": "33363", - "2a04:4e40:810::/41": "54113", - "2a09:d940::/29": "209202", - "2001:559:8279::/48": "7015", - "2001:67c:148::/48": "12991", - "2404:7a40::/43": "132556", - "2603:6080::/28": "11426", - "2a02:26f7:d2c8::/48": "36183", - "2a09:bd80::/29": "208861", - "2a0e:8400::/29": "63023", - "240a:a2f5::/32": "143407", - "2001:559:8538::/48": "7922", - "2605:900:f100::/36": "12110", - "2a02:26f7:da81::/46": "20940", - "2a07:a1c0::/29": "206423", - "2001:559:8062::/47": "7922", - "2001:4128::/32": "28788", - "2a02:26f7:f840::/48": "36183", - "2001:67c:2714::/48": "51655", - "240a:a7de::/32": "144664", - "240e:980:2900::/40": "4134", - "2a0d:3842:1250::/48": "57629", - "2c0f:fbf0::/48": "37394", - "2001:df5:c680::/48": "141529", - "2604:7280::/32": "31877", - "2620:98:400a::/48": "393949", - "2a01:8f9::/32": "3209", - "2a02:26f7:c748::/48": "36183", - "2a0a:6680:bee1::/48": "203500", - "2001:559:409::/48": "7922", - "2607:6003:2309::/48": "46385", - "2620:3c:c040::/48": "395063", - "2a0f:e200::/47": "60781", - "2a10:e800:2::/48": "50010", - "2001:67c:1428::/48": "49684", - "2602:fe23::/36": "7018", - "2604:af80:1c48::/34": "18859", - "2800:bf0:2a9::/43": "27947", - "2803:9800:a01e::/42": "11664", - "2001:559:828f::/48": "7922", - "240a:ac53::/32": "145805", - "2600:1408:9801::/37": "20940", - "2a02:4540:c000::/41": "197207", - "2804:6cc4::/32": "270490", - "2a02:ff0:2fe::/47": "12735", - "2403:a200:a101::/40": "17428", - "2408:870c:4010::/30": "17621", - "2408:8956:5100::/40": "17816", - "240a:a9e2::/32": "145180", - "2602:808:c000::/48": "19661", - "2602:fe05::/32": "54936", - "2603:c0f0::/39": "6142", - "2405:84c0:9000::/44": "139618", - "240e:980:2b00::/40": "58563", - "2606:ae00:8300::/40": "7287", - "2a02:6b8:5::/48": "208722", - "2604:6100::/32": "39970", - "2804:14d:2a84::/41": "28573", - "2804:55a0::/32": "267946", - "2001:4c8:8000::/33": "6461", - "240a:ad0c::/32": "145990", - "2a00:800:234::/37": "1257", - "2a02:26f7:ec::/48": "36183", - "240e:964:eb00::/40": "133776", - "2603:90fb::/44": "19115", - "2607:f098:2100::/35": "33363", - "2607:fcd0:fa80:6c01::/51": "8100", - "2804:387c::/32": "266481", - "2a03:2480:70::/48": "200107", - "2001:40a0::/32": "8607", - "2602:807:5000::/46": "55136", - "2606:5e40:2::/48": "58879", - "2607:f2b1:70::/47": "12257", - "2803:6900:561::/48": "52423", - "2804:76e8::/32": "271142", - "2a0e:b107:b1f::/48": "212580", - "2001:ac8:d::/42": "9009", - "2001:44b8:30ef::/43": "7545", - "240a:aae3::/32": "145437", - "2605:a404:8b::/42": "33363", - "2801:140:eeee::/48": "264798", - "2804:7038::/32": "270713", - "2a0c:9bc0::/29": "25415", - "2001:df0:1d80::/48": "135726", - "240e:848:50::/42": "4134", - "2001:550:4a01:1::/46": "174", - "2409:8c62:e10::/44": "139080", - "2604:f400:4::/48": "21879", - "2400:cb00:a734::/48": "13335", - "2408:8459:9650::/36": "17816", - "2600:1419:a001::/37": "20940", - "2a00:1390::/32": "34139", - "2001:559:339::/48": "33659", - "2001:559:804d::/48": "33662", - "240a:a23d::/32": "143223", - "240e:270::/28": "4134", - "240e:473:9720::/41": "140486", - "2800:160:1fcc::/43": "14259", - "2a04:444::/32": "12346", - "2a10:9d40::/29": "211727", - "2001:418:1456:a00::/56": "20940", - "2001:559:85e9::/48": "33662", - "2620:11a:a00a::/48": "36040", - "2803:4e00::/32": "20002", - "2a00:5f80::/32": "57353", - "2a0b:440::/36": "39921", - "2a10:3780::/29": "206238", - "2001:67c:2278::/48": "44574", - "2403:1940:30::/48": "137935", - "2405:8a00:a053::/45": "55824", - "2a02:7760::/32": "48166", - "2a0e:5540:100::/48": "208258", - "240e:f9::/33": "4134", - "2600:1408:8401::/36": "20940", - "2806:102e:10::/46": "8151", - "2a02:be8::/32": "42612", - "2a04:27c0::/29": "197706", - "2a0a:acc2::/45": "6233", - "2001:678:c84::/48": "48655", - "2001:fb0:1010::/44": "7470", - "2401:d800:2c10::/42": "7552", - "2405:1c0:7152::/40": "55303", - "240a:a72f::/32": "144489", - "2620:59:a000::/48": "7018", - "2402:800:7d40::/42": "7552", - "2405:1c0:6341::/46": "135062", - "2409:8924:8d00::/38": "56046", - "2a07:980::/29": "203349", - "2001:678:85c::/48": "59801", - "2803:4410::/32": "271849", - "2804:3a18::/32": "266070", - "2a00:1688::/32": "34056", - "2a0f:5381:1338::/32": "208135", - "2a0f:5701:3515::/48": "205593", - "2001:559:867d::/48": "33652", - "2001:678:a0::/48": "43558", - "240a:ab6b::/32": "145573", - "240a:ad48::/32": "146050", - "2606:6e00::/32": "7296", - "2620:c8::/48": "53708", - "2a0e:fd45:b50::/47": "207722", - "240a:a322::/32": "143452", - "2605:a404:53c::/41": "33363", - "2607:ffb0:7001::/32": "6327", - "2409:8e80:7000::/32": "9808", - "2620:19:e000::/44": "19432", - "2804:4240::/32": "267488", - "2a03:d000:4000::/36": "25159", - "2a0d:c980::/29": "204487", - "2406:b400:60::/48": "18209", - "240a:afd8::/32": "146706", - "2804:218:d4::/33": "27715", - "240a:a6a4::/32": "144350", - "240e:27f:1::/32": "4134", - "2602:fcfc:1::/48": "398868", - "2804:2a88::/48": "264077", - "2a04:b880::/48": "43578", - "2001:559:c31e::/48": "33287", - "2001:1248:70d8::/46": "11172", - "2001:1a11:120::/32": "8781", - "2600:1480:2000::/40": "33905", - "2001:1548:207::/29": "8280", - "240e:56:c800::/31": "4134", - "2604:e440::/32": "19523", - "2620:e1:c000::/48": "56647", - "240a:a920::/32": "144986", - "2604:d600:c3b::/45": "32098", - "2001:559:c1b5::/48": "33657", - "2001:18b8:116::/36": "29789", - "2405:a000:14::/44": "7693", - "2603:c010::/36": "31898", - "2a01:4f00::/34": "35047", - "2001:1900:2265::/40": "3356", - "2400:6280::/47": "132876", - "2409:804c:1900::/34": "9808", - "240e:1f:2::/36": "134774", - "2600:1415:3000::/48": "2914", - "2607:f110:13::/45": "21889", - "2001:1398:276::/48": "52305", - "2401:fd80:400::/46": "43519", - "2404:bf40:8142::/42": "139084", - "2a02:26f7:cd49::/46": "20940", - "2a0f:7ac0::/29": "60154", - "2804:6bb0::/32": "270417", - "2001:559:785::/48": "33659", - "2a02:26f7:f044::/48": "36183", - "2a02:ee80:404c::/43": "3573", - "2a09:e140::/29": "9119", - "2001:67c:2d90::/48": "41046", - "2001:559:408::/48": "33491", - "2001:44b8:3087::/48": "4739", - "2804:289c::/32": "263970", - "2a00:1d58:a200::/39": "47524", - "2a01:8840:ed::/48": "207266", - "2a0a:a5c0:c::/46": "22787", - "240e:3b0:6400::/35": "140312", - "2620:31:8000::/48": "11540", - "2804:214:8408::/43": "26615", - "2a02:5940::/32": "42160", - "240e:978:7100::/36": "4134", - "2602:fd41::/36": "53859", - "2804:4d3c:948::/38": "267420", - "2a05:c100::/29": "57809", - "2401:ff80:100f::/43": "133954", - "2801:c4:12::/48": "28477", - "2806:2f0:7221::/41": "17072", - "2a02:26f7:f94c::/48": "36183", - "2a04:1f00::/30": "8416", - "2a07:68c0:2::/30": "32338", - "2001:559:82d2::/48": "7725", - "2001:559:c1ef::/48": "33660", - "2a0c:8240::/47": "20853", - "2401:d800:5970::/40": "7552", - "2806:230:6018::/48": "265594", - "2a0e:fd45:da0::/47": "60557", - "2001:df2:c480::/48": "140001", - "240a:ad18::/32": "146002", - "2804:4f58::/33": "268321", - "2a00:fbc0::/32": "29512", - "2a0a:36c0::/29": "208457", - "2001:4d0:241c::/33": "297", - "2604:6e00:2000::/37": "13977", - "2806:2a0:500::/40": "28548", - "2404:7180:a021::/46": "23848", - "2620:6b:4000::/48": "62675", - "2001:3c8:d109::/48": "138547", - "2001:559:365::/48": "7922", - "2607:fdf0:5ec4::/44": "8008", - "2804:6288::/32": "269302", - "2001:559:29a::/45": "7922", - "2408:8956:8900::/40": "17816", - "2408:8956:cd40::/40": "17816", - "2a00:1560:6::/44": "29684", - "2001:4998:69::/46": "10310", - "2600:6c60::/32": "20115", - "2606:3380:212::/47": "53334", - "2804:7024::/32": "270708", - "2a10:8080::/29": "62270", - "2001:678:3fc::/48": "197422", - "2602:804:b000::/47": "397824", - "2800:160:1212::/44": "14259", - "240e:3b0:3e00::/33": "140308", - "2620:74:8::/48": "30060", - "2001:559:c291::/48": "33659", - "2001:67c:2564::/48": "1133", - "2001:df3:a700::/48": "58785", - "240e:3b9:4c00::/35": "136200", - "2001:49f0:d102::/48": "3257", - "2804:2c0:7f01::/32": "262834", - "2804:470::/32": "53108", - "2804:2010::/32": "264462", - "2804:4530::/32": "262873", - "2a0f:3b04::/32": "3356", - "2404:b980::/35": "62240", - "240a:af72::/32": "146604", - "2603:b011::/28": "11796", - "2804:a00::/47": "262838", - "2a00:1058::/32": "39905", - "2001:559:2c1::/48": "33287", - "2400:1a00:f000::/36": "17501", - "240e:108:99::/48": "4816", - "2604:d600:54f::/43": "32098", - "2a06:1301:4050::/48": "24940", - "240e:3b5:dc00::/34": "4134", - "2600:380:e900::/41": "7018", - "2610:b0:2030::/41": "3573", - "2a03:9d40:2600::/36": "41095", - "2a0f:28c0::/29": "398559", - "2400:8b00:530::/44": "45727", - "2405:f080:1600::/48": "136907", - "240e:473:1520::/41": "140486", - "2606:1a40:f013::/36": "398962", - "2620:132:7040::/40": "19537", - "2804:4af0::/32": "267273", - "2a0b:380::/29": "60111", - "240a:a298::/32": "143314", - "240e:948::/31": "137695", - "2a01:348:318::/36": "39326", - "2a0e:b107:148::/45": "57883", - "2607:8880::/32": "31798", - "2804:1e38:2001::/43": "264415", - "2405:6000::/32": "4770", - "2803:e160::/32": "269731", - "2a02:26f7:fac9::/46": "20940", - "2a06:1c4::/32": "60571", - "2a09:400::/35": "208861", - "2001:4f8:9::/48": "30132", - "2408:8459:c650::/36": "17816", - "2a02:6c20:81a::/32": "207167", - "2600:1012:b080::/44": "6167", - "2804:3f30::/32": "266645", - "2a02:26f7:e584::/48": "36183", - "2001:44b8:2035::/44": "7545", - "240a:ac06::/32": "145728", - "240a:ac3b::/32": "145781", - "2801:80:3870::/48": "270308", - "2a02:26f7:c14d::/46": "20940", - "2600:6c34:302::/48": "33588", - "2804:233c::/32": "264150", - "2a0e:b105:6e0::/45": "20473", - "2001:df2:6a80::/48": "55664", - "2001:44c8:4630::/44": "45430", - "2407:8f80:12ac::/48": "135636", - "2806:2f0:2481::/46": "22884", - "2a04:ecc0::/29": "207992", - "2a0c:b642:321::/40": "206499", - "2408:8409:c00::/40": "4808", - "2606:2700::/32": "54044", - "2800:370:84::/48": "28006", - "2a03:8800:1::/48": "200826", - "2a0b:b87:ffe9::/48": "202307", - "2a0e:8940::/29": "209528", - "2001:559:82b2::/48": "7725", - "2001:559:c20e::/48": "7922", - "2001:1b70:6202::/48": "158", - "240e:353:6400::/29": "4134", - "2a02:10::/42": "24785", - "2a03:db80:5464::/48": "200943", - "2a0b:3080:8020::/33": "206516", - "2001:67c:2fc4::/48": "197936", - "2404:e7::/38": "703", - "2a02:2e02::/39": "12479", - "240a:aa0e::/32": "145224", - "2600:140f:9c01::/38": "20940", - "2a02:26f7:69::/48": "20940", - "2803:59e0::/32": "270021", - "2001:559:4f3::/45": "7015", - "2409:8924:ab00::/37": "56046", - "240a:a7e8::/32": "144674", - "2600:8806:c000::/31": "22773", - "2605:2680::/32": "393301", - "2606:4280:8000::/36": "16696", - "2620:74:15::/48": "29403", - "2804:45d0::/32": "266951", - "2a01:8cc0::/32": "59456", - "2001:559:c08e::/48": "7016", - "2406:daa0:1040::/44": "16509", - "2600:6c38:e40::/39": "20115", - "2620:12c:f001::/45": "19833", - "2804:1cd0::/32": "61677", - "2804:3e60:150::/37": "266592", - "2a02:26f7:ba41::/46": "20940", - "2001:fd8:1e0::/48": "132199", - "2804:3b8:1fe::/32": "52965", - "2a02:26f7:be09::/46": "20940", - "2a03:2880:f240::/46": "32934", - "2a0b:1d40::/32": "205676", - "2001:4200:7001::/36": "2018", - "2806:288::/35": "28469", - "2a02:7b02::/36": "48328", - "2001:218:3005::/32": "2914", - "2001:559:8333::/48": "33287", - "2604:d600:1333::/37": "32098", - "2804:13b4::/32": "262288", - "2804:4bd4::/32": "267331", - "2a03:9960::/32": "208719", - "2800:160:1ab7::/44": "14259", - "2a0b:21c0:1000::/34": "21859", - "240a:a587::/32": "144065", - "2801:19:e000::/48": "61499", - "2804:4f58:8100::/33": "268321", - "2a01:5b0:2::/48": "48519", - "2a04:de40:80::/41": "201971", - "2a0d:1a40:7900::/47": "207960", - "240e:874:200::/41": "140638", - "2804:23ac::/32": "264177", - "2804:7fd8::/32": "271713", - "2a01:90a0::/32": "62105", - "2a02:46e0:facf::/37": "60049", - "2c0f:ed80::/32": "328480", - "2401:ff80:188f::/43": "133954", - "240e:878:1c0::/42": "4134", - "2804:ea0:4002::/32": "52968", - "2001:67c:21cc::/48": "25354", - "240a:a117::/32": "142929", - "2606:ca00::/37": "14537", - "2620:114:2000::/40": "5707", - "2804:4030::/32": "265943", - "2a00:13c0:202::/32": "29076", - "2a02:8070::/31": "3209", - "2001:e68::/46": "4788", - "2600:1016:b030::/41": "6167", - "2600:1407:1b::/48": "35994", - "2804:60c8::/32": "269190", - "2a02:158:ffff::/48": "8481", - "2a02:26f7:df08::/48": "36183", - "2a02:2e02:2490::/41": "12479", - "2001:559:379::/48": "33652", - "2001:4de0:2108::/38": "33438", - "2404:f780:4::/47": "136557", - "2408:8459:dc30::/41": "17622", - "2a02:26f0:d801::/39": "20940", - "2804:3e70:1235::/32": "266596", - "2402:800:9355::/42": "7552", - "2402:f500::/32": "63961", - "2600:1419:a01::/37": "20940", - "2a00:adc0:1b00::/32": "41655", - "2a02:ca8::/32": "44981", - "2a03:90c0:320::/43": "199524", - "2a0b:7140::/48": "39378", - "2403:e200:805::/32": "45543", - "2a0b:86c3::/29": "202120", - "2001:4d78:2200::/37": "15830", - "240a:a123::/32": "142941", - "2804:7acc::/32": "13357", - "2600:2c00:7000::/32": "7349", - "2408:8406:6c00::/39": "4808", - "2806:2f0:8001::/46": "17072", - "2a02:b48::/33": "39572", - "2a0f:6fc5:a4ae::/48": "43694", - "2409:8904:5fb0::/34": "24547", - "2804:1c4c::/39": "61648", - "2001:df3:b380::/48": "38238", - "2405:1c0:6361::/45": "135062", - "2409:8c21::/29": "9808", - "2801:1e6::/44": "27951", - "2a00:7ee0:8::/46": "16347", - "2a02:26f7:bfc0::/48": "36183", - "2600:1406:f800::/48": "35994", - "2604:e780::/32": "15154", - "2607:f490::/32": "7029", - "2804:7338::/32": "262842", - "2a00:11c0:aa1::/48": "42388", - "2408:8957:2600::/40": "17622", - "2804:2674:2::/44": "264344", - "2a00:7180:8004::/46": "207806", - "2a02:6f80::/29": "8851", - "2a03:5640:f200::/42": "16509", - "2001:4408:c001::/46": "4758", - "2404:4e00:c000::/48": "32787", - "2001:678:154::/48": "203017", - "2402:6800:760::/48": "55429", - "2404:3800::/47": "45459", - "2804:4330::/32": "267554", - "2806:230:6008::/48": "265594", - "2001:4898::/32": "3598", - "2603:c002:9b10::/37": "31898", - "2a03:a300:3000::/48": "35104", - "2a00:15a8::/32": "29140", - "2a04:4e40:8400::/48": "54113", - "2a0e:b105:514::/46": "20473", - "2001:4b20:100:598::/64": "65505", - "2803:a0a0:903::/48": "269799", - "2806:230:4029::/48": "11888", - "2405:9800:c600::/48": "45458", - "2804:7d28::/32": "271543", - "2a00:46e0::/32": "50265", - "2600:1014:b040::/42": "6167", - "2804:5930:9000::/33": "268174", - "2a04:8400::/32": "207176", - "2409:8c85:aa11::/46": "9808", - "2607:1900::/32": "14140", - "2400:cb00:a580::/47": "13335", - "2408:8140:2000::/48": "4808", - "2604:9540::/32": "33125", - "2001:12f8:a::/47": "11284", - "240a:a44a::/32": "143748", - "240a:afee::/32": "146728", - "2a02:26f7:e3cc::/48": "36183", - "2a05:a840::/29": "29424", - "2001:4878:2027::/48": "12222", - "2400:adc0:4010::/47": "9541", - "2404:8d02:2041::/36": "9587", - "240a:a851::/32": "144779", - "2001:559:846d::/46": "33287", - "2400:8500:3fff::/48": "55907", - "240e:974:ea00::/30": "4134", - "2a0e:8840::/29": "48627", - "2001:559:c3d9::/48": "7922", - "2620:141:4fe::/48": "6075", - "2a00:fa40:5000::/32": "45031", - "2a02:26f7:be08::/48": "36183", - "2a02:cb46::/31": "20546", - "2401:d800:feb0::/41": "7552", - "240a:abd6::/32": "145680", - "2a00:1788:100::/48": "211858", - "2c0f:fe40::/32": "30844", - "2408:8459:e010::/42": "17623", - "2804:1a54:2040::/32": "61854", - "2a09:e080::/29": "29686", - "2001:559:7b1::/48": "33651", - "240a:a01f::/32": "142681", - "240e:13::/37": "4134", - "240e:44d:3300::/41": "140345", - "2604:d600:1246::/43": "32098", - "2804:1b1:9000::/33": "18881", - "2804:1b74::/32": "61729", - "2001:678:998::/48": "200288", - "2001:1a68:16::/44": "15694", - "2400:c600:3410::/41": "24389", - "2404:bc00::/32": "18037", - "2607:7c80::/41": "64260", - "2a0c:c647:fd05::/38": "50489", - "2001:4978:f::/48": "26943", - "2404:ba80::/32": "38517", - "240e:6:d800::/44": "139721", - "2600:1405:5c01::/34": "20940", - "2a0f:9400:8019::/48": "213262", - "2001:559:8658::/48": "7015", - "2001:1248:982a::/48": "11172", - "2400:3b00:f::/48": "18229", - "2401:d800:d480::/42": "7552", - "2a03:4d41:900::/40": "199610", - "2001:559:82da::/48": "33662", - "240a:a863::/32": "144797", - "2600:140f:c801::/38": "20940", - "2804:26c::/32": "262813", - "2804:70e4::/32": "270754", - "2a0a:4500::/29": "199163", - "2001:500:4e::/47": "207266", - "2405:be40::/48": "131378", - "2602:feb4:280::/44": "25961", - "2605:bb00:4000::/34": "18672", - "2001:559:8353::/48": "33659", - "240e:974:e00::/48": "38283", - "2803:2a00:1000::/37": "27895", - "2806:250:b::/48": "28545", - "2001:400:a000:e::/59": "293", - "2001:c38:9126::/48": "38228", - "2404:4600:a::/36": "10158", - "2409:8c1e:a930::/33": "9808", - "2401:1d40:2001::/40": "59019", - "2408:8459:f130::/41": "17622", - "2a01:b8::/32": "8978", - "2a07:ba80::/29": "40970", - "2001:4d00::/32": "8226", - "2409:250::/28": "55392", - "240a:a14d::/32": "142983", - "2610:a1:2000::/44": "19905", - "2a01:c50f:dec0::/34": "12479", - "2a03:2c60::/32": "49627", - "240a:a62a::/32": "144228", - "240a:ac34::/32": "145774", - "2606:4700:ff02::/48": "395747", - "240a:a159::/32": "142995", - "240a:abfc::/32": "145718", - "2a02:53a0::/32": "35280", - "2407:5200:206::/39": "55915", - "2604:af80:848::/40": "18859", - "2806:230:302e::/48": "265594", - "2a09:3d00::/29": "208861", - "2001:559:6f::/48": "33659", - "2403:8100:1003::/40": "24023", - "2405:1c0:6673::/40": "55303", - "2a03:7460::/32": "24971", - "2a04:1a80::/29": "207606", - "2001:559:77a::/48": "7725", - "2604:cc00:601::/48": "53292", - "2a06:a080::/32": "207220", - "2a0b:d7c0::/29": "47237", - "2c0f:f348:1401::/38": "24757", - "2a02:26f7:d6c4::/48": "36183", - "2001:388:10ad::/41": "7575", - "2001:c20:c835::/48": "9255", - "240e:967:cc00::/34": "4134", - "2801:80:1bf0::/48": "52608", - "2804:164c:fb::/36": "263280", - "2804:31fc::/32": "53022", - "2804:5700::/32": "268037", - "2a10:2f01:2d0::/47": "212793", - "2001:918:ff5d::/48": "15398", - "2605:a401:8595::/41": "33363", - "2a02:2290:2::/48": "206610", - "2a03:c980:5fb7::/48": "210079", - "2001:4b98:abcc::/33": "29169", - "2803:c9e0::/32": "270012", - "2803:6ce0:1d00::/33": "269909", - "2a05:9bc0::/44": "51559", - "2a0a:cd00:2::/48": "61111", - "240e:45e::/26": "4134", - "2804:591c:30::/32": "28370", - "2a04:4c0::/29": "58321", - "2001:559:25::/48": "7922", - "2404:f4c0:fa01::/48": "142280", - "2804:23b0:8001::/34": "262645", - "2804:82a0::/32": "272530", - "2a00:c00:f063::/48": "15769", - "2600:6c2e:e0f::/40": "20115", - "2a0c:cd00::/32": "41913", - "2001:559:805f::/48": "7016", - "2001:4b30::/29": "9036", - "2404:f4c0:f601::/48": "139328", - "240a:a6ec::/32": "144422", - "2804:40d0::/32": "265983", - "2a0d:26c0::/32": "209041", - "2001:559:c3cb::/45": "7015", - "2404:ffc0:18::/32": "62707", - "2804:3a48::/32": "266081", - "2401:8800:4::/43": "17439", - "240a:aa67::/32": "145313", - "2408:8956:8e00::/40": "17622", - "2a04:a180::/32": "199799", - "2604:d600:64d::/43": "32098", - "2804:2594::/32": "264289", - "2a06:e881:6200::/48": "60404", - "2001:678:e40::/48": "205593", - "2001:df0:9200::/48": "133384", - "2402:8100:3929::/43": "55644", - "2600:6c04::/40": "20115", - "2620:52:11::/40": "22753", - "2a02:10:100::/48": "5418", - "2a03:afc0:1::/45": "52000", - "2a0f:3786::/40": "64475", - "2001:559:85a9::/46": "33662", - "2001:678:eb8::/48": "212349", - "2604:d600:1073::/40": "32098", - "2804:14c:6500::/42": "28573", - "2401:ff80:1905::/44": "133954", - "2408:8957:8900::/40": "17816", - "2804:33a8::/32": "265410", - "2402:800:9c1d::/42": "7552", - "2800:ba0::/48": "263812", - "2804:5e48:ff40::/46": "269023", - "2a00:1188:d::/46": "8455", - "2a02:ee80:41cc::/43": "3573", - "2001:559:7b5::/46": "33659", - "2001:590:1007::/34": "3257", - "2400:9c80::/48": "58396", - "2402:800:3b63::/43": "7552", - "2602:fd2a::/40": "17326", - "2603:c0e8:1210::/39": "1218", - "2a10:f840::/29": "211626", - "2001:559:86cb::/48": "13367", - "2001:67c:2448::/48": "43065", - "2404:4a00:7a00::/64": "55423", - "2600:6c38:238::/41": "20115", - "2606:6c00:120::/44": "35994", - "2607:f178:10::/48": "30217", - "2a02:26f7:ed01::/46": "20940", - "2600:1406:8000::/48": "35994", - "2605:3380:4403::/48": "12025", - "2607:fcd0:fa80:1401::/52": "8100", - "2804:e0c:300::/48": "28176", - "2a05:d050:2040::/44": "16509", - "2401:d800:2d00::/42": "7552", - "240a:afbd::/32": "146679", - "2a02:26f7:c889::/46": "20940", - "2a02:26f7:d250::/48": "36183", - "240a:a84a::/32": "144772", - "240a:ad11::/32": "145995", - "2803:9800:b039::/37": "11664", - "2001:550:5700:100::/36": "174", - "2001:559:c324::/48": "33652", - "2001:678:78::/48": "42", - "2407:1c00::/32": "26496", - "2806:2f0:4400::/35": "17072", - "2a0d:ac00:1006::/47": "205202", - "2a0e:b107:11d8::/45": "58015", - "2408:8256:3795::/48": "17816", - "2602:802:b000::/44": "397795", - "2804:cb0:d306::/47": "52742", - "2804:3170::/32": "265015", - "2806:105e:c::/48": "8151", - "2a02:26f7:c481::/46": "20940", - "2a02:26f7:f804::/48": "36183", - "2001:559:8662::/48": "33659", - "2804:67ec::/32": "269659", - "2a06:87c0::/29": "12655", - "2a0a:aa80::/32": "57198", - "2620:9:a003::/48": "395515", - "2a0e:b107:1d9::/48": "139328", - "2408:840d:9e00::/42": "17621", - "240a:a0d3::/32": "142861", - "2620:74:76::/48": "30060", - "2804:14d:188b::/41": "28573", - "2400:adc2:300::/37": "9541", - "2408:8456:2000::/42": "17622", - "2602:800:9007::/48": "26710", - "2a03:2c0:e::/48": "31029", - "240a:aa7d::/32": "145335", - "2605:a401:82d2::/44": "33363", - "2806:3c7::/32": "265530", - "2a02:e980:18d::/43": "19551", - "2a0b:3c40:1::/48": "208258", - "2001:559:c33e::/48": "7725", - "2001:559:558::/48": "33287", - "2600:6c38:26::/44": "20115", - "2a09:ab80::/29": "60733", - "2001:4888:a601::/44": "22394", - "2804:4a20::/32": "267220", - "2804:66f4::/32": "269594", - "2001:559:8371::/45": "33287", - "2408:84e2::/39": "17621", - "2806:230:602f::/48": "11888", - "2402:800:372b::/41": "7552", - "240e:698:4c00::/26": "4134", - "2606:2400:1003::/32": "36295", - "2a02:26f7:cec4::/48": "36183", - "2600:1404:c801::/37": "20940", - "2804:1260::/32": "263473", - "2804:2e0c:2001::/32": "263019", - "2804:5898::/32": "268138", - "2804:6fe8::/32": "270692", - "2a04:e380::/29": "31275", - "2c0e:2700::/28": "37457", - "2001:559:81bc::/48": "33491", - "2408:8957:ed40::/40": "17816", - "2605:37c0::/39": "396469", - "2a01:807::/32": "12430", - "2001:559:83b6::/48": "7922", - "2408:8459:1d50::/38": "17816", - "240a:a797::/32": "144593", - "240a:a9e5::/32": "145183", - "2602:feda:df0::/47": "147071", - "2804:448:1d8::/32": "262427", - "2804:4580::/37": "266931", - "2620:123:2007::/44": "30103", - "2a02:ac80:1001::/34": "25145", - "2603:4:1604::/48": "44273", - "2a02:26f7:ce84::/48": "36183", - "2001:67c:12d8::/48": "1101", - "240a:a9cf::/32": "145161", - "2803:a360::/32": "269783", - "2a00:12d8::/29": "12586", - "2a02:26f0:6b01::/37": "20940", - "2001:67c:744::/48": "59632", - "2409:8087::/39": "56048", - "2600:2000:3010::/46": "15135", - "2600:6c7f:ffff::/48": "20115", - "2606:4300:1::/48": "3595", - "2607:f5a0:8::/38": "17048", - "2a00:77e0::/32": "60868", - "2a02:2ad0:250::/37": "702", - "240e:e1:8e00::/35": "4811", - "2605:3000::/32": "12033", - "2a00:4902::/32": "12390", - "2c0f:eab8::/32": "328564", - "2001:918:ffb7::/48": "8300", - "2400:cb00:a2b0::/47": "13335", - "2605:aa80::/32": "27176", - "2804:487c:211::/44": "267124", - "2a04:5d80::/29": "61310", - "2401:d800:b10::/42": "7552", - "2407:3000:6e::/32": "17707", - "240e:838::/44": "140647", - "2804:5690::/32": "268009", - "2001:559:c194::/48": "33287", - "2001:43e0::/32": "37074", - "2404:4800::/46": "9892", - "2408:80fa:a000::/33": "17816", - "240a:ab7a::/32": "145588", - "2804:14d:4cef::/43": "28573", - "2001:678:90::/48": "57801", - "240e:3b9::/35": "134773", - "2a06:4180::/48": "48293", - "2a07:af00::/29": "202625", - "2405:d000:8000::/33": "18024", - "2620:171:2a::/45": "42", - "2406:8600:ef69::/48": "23879", - "2408:8459:be10::/42": "17623", - "2804:3bfc:100::/40": "52607", - "2a00:b340:32::/48": "196745", - "2406:da00:ff00::/48": "14618", - "240e:473:5b20::/41": "140486", - "2600:1405:801::/35": "20940", - "2604:dc00:100a::/33": "19752", - "2804:56b8::/32": "52633", - "2a02:26f7:bc44::/48": "36183", - "2001:ce0:2::/48": "4528", - "2a03:5080::/32": "43341", - "2401:d800:f380::/37": "7552", - "2405:e5c0::/32": "58971", - "240a:adcb::/32": "146181", - "2620:171:da::/48": "42", - "2a01:4a0:1f::/42": "201011", - "2a02:2ab8:121::/44": "702", - "2a09:bac0:40::/48": "13335", - "2001:4998:70::/39": "10310", - "2408:8456:7040::/39": "17816", - "240a:ad04::/32": "145982", - "2a0d:b280::/29": "41720", - "2001:559:7b9::/46": "7922", - "240a:a606::/32": "144192", - "2400:6280:104::/48": "132280", - "2804:23e8::/32": "262855", - "2a01:7b8::/32": "34920", - "2a02:5c80::/32": "5602", - "2a07:b40::/29": "202629", - "2001:559:844d::/46": "7922", - "240e:fe:c000::/35": "4134", - "2620:11f:4000::/40": "16478", - "2804:431:8000::/35": "27699", - "2a0e:38c0::/32": "207747", - "2001:678:ec4::/48": "212378", - "2001:1248:88b2::/39": "11172", - "240e:473:4150::/40": "4134", - "2620:0:28b0::/48": "2936", - "2800:d302:13::/45": "11830", - "2a02:26f7:eac0::/48": "36183", - "2a0c:cbc0::/29": "209620", - "2001:559:741::/48": "7016", - "2001:67c:105c::/48": "58226", - "2408:8957:9a00::/40": "17622", - "2804:52b8:c381::/34": "268537", - "2a0f:9240:2001::/32": "49434", - "2001:43f8:80::/48": "37513", - "2804:3984::/32": "262902", - "2a00:7f20::/32": "60791", - "2a01:768::/32": "25563", - "2a03:5500::/31": "8315", - "2a05:e740:249::/48": "29108", - "2001:3c8:130b::/37": "4621", - "2408:84f3:b610::/42": "134543", - "2600:6c38:b0e::/43": "20115", - "2408:8720::/30": "4837", - "2a0e:1c80:4::/48": "47869", - "2001:67c:27f0::/48": "198650", - "240a:a167::/32": "143009", - "2806:21b:2::/32": "19332", - "2a02:26f7:c141::/46": "20940", - "2c0f:f2e8::/48": "37182", - "2001:67c:26f8::/48": "41709", - "2001:4200:7801::/32": "2018", - "2409:8904:7f40::/32": "24547", - "240e:44d:7100::/41": "140345", - "2605:f080::/40": "29869", - "2610:100:2510::/33": "8047", - "2a06:e881:6400::/44": "209364", - "2804:5f4::/32": "262983", - "2001:67c:648::/48": "56510", - "2001:4878:a136::/48": "12222", - "2804:3124::/32": "264996", - "2a0e:b107:340::/44": "209710", - "2001:e38::/32": "17934", - "2001:559:c379::/46": "33657", - "240a:ad39::/32": "146035", - "2620:74:1e::/47": "16838", - "2a02:26f7:bf::/48": "20940", - "2001:4930:4000::/32": "19530", - "2408:8957:300::/40": "17816", - "2409:8904:4060::/39": "24547", - "2804:738c::/32": "270922", - "2a03:1120::/32": "19419", - "2001:559:475::/48": "33659", - "2001:559:505::/48": "33659", - "2001:bf8::/32": "378", - "2406:17c0::/32": "207083", - "2408:8957:1000::/40": "17622", - "2a01:590::/32": "8492", - "2a0a:f200::/29": "208861", - "2610:e0::/34": "2572", - "2001:57a:504::/48": "22773", - "2001:4298:89::/32": "30990", - "2405:6600::/37": "45845", - "2407:2800::/32": "38227", - "240a:aa2f::/32": "145257", - "240a:abf5::/32": "145711", - "2600:6c3a:e01::/31": "20115", - "2803:6604:6600::/36": "28075", - "240a:a985::/32": "145087", - "2800:160:12d9::/45": "14259", - "2804:b54::/32": "52765", - "2a00:7600::/32": "21412", - "2a02:600::/29": "31263", - "2001:df0:c2::/48": "9749", - "2804:9f4::/32": "262530", - "2a01:540:9000::/34": "12389", - "2a06:d647::/32": "35048", - "2a0d:d740::/48": "210036", - "2402:800:3663::/43": "7552", - "240e:933::/32": "134420", - "2604:4a00:200::/39": "393885", - "2606:4700:3131::/48": "395747", - "2800:840::/32": "19422", - "2804:318c:2020::/32": "265023", - "2806:342:f600::/36": "265591", - "2405:9800:100::/44": "131445", - "2604:d600:1214::/47": "32098", - "2620:11a:a01c::/48": "36040", - "2803:b5a0::/33": "267788", - "2a00:dd00:3::/45": "56484", - "2a02:2f0c:8002::4/62": "8708", - "2a0e:9680::/29": "57112", - "240e:d:8800::/35": "58563", - "2801:80:38d0::/46": "270420", - "2806:2f0:8181::/42": "17072", - "2a0c:fac0::/48": "200076", - "2001:559:8364::/48": "7015", - "2001:b000:594::/48": "131660", - "2406:3001:20:d::/46": "4657", - "2620:fe::/48": "19281", - "2600:1409:9801::/37": "20940", - "2604:55c0::/48": "4138", - "2604:6400:8100::/33": "29974", - "2620:7:6000::/47": "62744", - "2a02:2a60::/32": "702", - "2a0f:9884::/30": "208861", - "2001:67c:2f74::/48": "198992", - "2402:800:3863::/43": "7552", - "2001:559:c06b::/48": "7016", - "2001:67c:13cc::/48": "199330", - "2402:800:56c5::/43": "7552", - "2a06:340::/29": "34942", - "2a06:e600::/29": "43826", - "2c0f:fbb8::/32": "37454", - "2606:2800:4a94::/46": "15133", - "2804:3210::/35": "262779", - "2405:f600::/44": "45117", - "2409:8914:a600::/39": "56044", - "2a00:1b48::/32": "197695", - "2a00:1d58:f801::/46": "47524", - "2401:401::/32": "132873", - "2602:ffb0:ffd::/48": "32780", - "2a0f:9400:7310::/47": "41732", - "240a:aabf::/32": "145401", - "240e:978:3000::/40": "137702", - "2605:a404:c7::/42": "33363", - "2620:139:6008::/48": "22600", - "2801:1b:8801::/48": "18678", - "2804:5658::/32": "267992", - "2a0e:1cc1::/47": "207960", - "2600:6c7f:93c0::/42": "19115", - "2804:2c74::/32": "265220", - "2804:5f58::/32": "269093", - "2804:7570::/32": "271046", - "2400:181:0:8::/48": "4766", - "2408:8256:399c::/48": "17816", - "240a:a9f0::/32": "145194", - "2800:160:2007::/44": "14259", - "2001:559:c20c::/48": "13367", - "2408:8459:6450::/38": "17816", - "2607:f340::/32": "46231", - "2610:1e0:1f01::/32": "3714", - "2a00:6800::/32": "42730", - "2001:559:57b::/45": "7015", - "2001:67c:7ac::/48": "13030", - "2409:40f2:2000::/32": "55836", - "2602:fe1a::/36": "55016", - "2804:cb0:d308::/34": "52742", - "2804:528c::/32": "268525", - "2400:f000::/32": "17888", - "2804:163c:201::/39": "263277", - "2a03:5420::/32": "16353", - "2a06:a400::/30": "203596", - "2a0f:9400:771d::/48": "53356", - "2001:67c:1720::/48": "60918", - "2804:954:88::/38": "263073", - "2804:5fac::/32": "269116", - "2a02:26f7:ca49::/42": "20940", - "2a09:0:1::/44": "3214", - "2a0c:7bc0::/29": "51092", - "2409:8914:6e00::/39": "56044", - "2a0b:e480::/29": "206331", - "2a0a:ce04::/47": "9009", - "2001:67c:10d4::/48": "58057", - "2405:f280::/47": "131464", - "2409:801f:3009::/45": "9808", - "2606:3c40::/32": "399493", - "2606:7f00:400::/40": "32307", - "2620:10a:8055::/46": "394354", - "2800:160:1729::/45": "14259", - "2403:df00::/46": "9292", - "2a03:f80:65::/48": "9009", - "2a05:7900::/29": "48348", - "2001:67c:2054::/48": "34953", - "2620:141:47e::/48": "6075", - "2804:ea8::/32": "262966", - "2804:6ff4::/32": "270697", - "2a03:220:f001::/36": "61400", - "2a07:3503:1033::/48": "208492", - "2403:6a40:1::/48": "135905", - "2804:6ee0::/32": "270624", - "2a09:dc0::/32": "47485", - "2401:ff80:100b::/45": "133954", - "2804:6cdc::/32": "270497", - "2a0b:7fc0::/29": "43668", - "2a0b:db80::/29": "48004", - "2001:310:3004::/32": "4694", - "2001:dc7:2dff::/48": "24406", - "2001:df3:4a80::/48": "135902", - "240a:af8b::/32": "146629", - "2001:4e0:1051::/32": "2381", - "2a02:26f7:98::/48": "36183", - "2001:500:20a::/45": "394353", - "2600:1406:43::/48": "35994", - "2a10:2f00:120::/48": "205977", - "2001:948:80::/32": "2603", - "240a:a228::/32": "143202", - "240e:67f:1800::/32": "4134", - "2001:cb0:2204::/46": "4637", - "2405:58c0:3c00::/40": "133101", - "2600:100e:b150::/40": "6167", - "2605:f440:6969::/48": "211562", - "2a01:c50f:b540::/38": "12479", - "2a02:26f7:c2::/48": "36183", - "2001:4c8:1069::/40": "15290", - "240a:a947::/32": "145025", - "240e:3b3:1200::/39": "4134", - "2605:64c0:2::/32": "63294", - "2620:106:e006::/47": "40428", - "2806:2f0:84c1::/43": "17072", - "2a01:9ce0::/32": "28682", - "2a02:7540::/32": "47359", - "2a04:bc40:1dc1::/45": "35277", - "2a0e:6380::/29": "207902", - "240a:a248::/32": "143234", - "2800:98:1100::/43": "14754", - "2804:71a8::/32": "270803", - "2a06:1c5::/44": "207455", - "2a02:26f7:b7c4::/48": "36183", - "2001:559:8031::/48": "33491", - "2001:c20:c811::/48": "9255", - "2001:df0:8500::/48": "59128", - "2400:3680::/32": "45582", - "2402:800:552b::/41": "7552", - "2804:7d38::/32": "271547", - "2a01:410:3::/32": "30844", - "2a04:1b00:2::/47": "61007", - "2001:44b8:2050::/48": "7545", - "2804:1e38:1001::/34": "264415", - "2804:4d50::/32": "268189", - "2001:559:d9::/48": "13367", - "2602:feb4:1a0::/44": "25961", - "2001:df0:ee80::/48": "139298", - "2001:4490:48d8::/46": "9829", - "2401:2540::/32": "55899", - "2600:c04:1023::/48": "12180", - "2a00:1288:ef68::/47": "10310", - "2001:559:171::/48": "33657", - "2402:800:9bee::/43": "7552", - "240e:37a:aa00::/39": "140330", - "2804:124c:800::/32": "263468", - "2409:8050:2800::/47": "56047", - "2606:2080::/32": "11672", - "2804:2f4c::/32": "264882", - "2001:559:c0a8::/48": "33651", - "2001:44b8:4053::/48": "4739", - "2405:1c0:7191::/45": "135062", - "2804:6038::/32": "269153", - "2a02:b48:8205::/36": "39572", - "2a0b:a880::/29": "42316", - "2001:14d0::/29": "15516", - "2408:840c:d200::/40": "17621", - "2001:559:8045::/48": "33657", - "2001:13b2::/29": "3356", - "240e:108:83::/48": "4811", - "240e:30c:5600::/31": "4134", - "240e:3bf:3e00::/33": "140308", - "2402:1880::/30": "20546", - "2408:8456:1840::/40": "17816", - "2610:b0:40fe::/39": "21433", - "2a01:cd20::/32": "47377", - "2a02:2e02:89c0::/43": "12479", - "2001:559:80e5::/48": "7725", - "2001:67c:248c::/48": "47638", - "2620:13b:3010::/47": "13607", - "2804:7cc4::/32": "271517", - "2806:230:2013::/48": "11888", - "2001:559:830c::/48": "33657", - "2001:559:c1fe::/48": "33667", - "2606:4700:4000::/43": "13335", - "2606:9e80::/32": "32212", - "2803:4a60::/32": "52468", - "2a02:cb45:101::/48": "20546", - "2a07:a905:ffe4::/48": "204543", - "2a0b:adc0::/29": "205243", - "2001:538::/32": "7381", - "2408:8456:ea40::/39": "17816", - "240a:adf3::/32": "146221", - "240e:3bb:8200::/35": "140316", - "2604:25c0::/32": "33392", - "2a0e:e080::/32": "42487", - "2001:559:c0d6::/48": "7016", - "2409:8b04::/31": "24547", - "2600:1012:a100::/43": "6167", - "2a02:cdc6:3075::/39": "59715", - "2a03:e300::/32": "197890", - "2001:559:17f::/48": "7922", - "2803:9e20::/32": "265877", - "2a0c:f47::/32": "49436", - "240a:a455::/32": "143759", - "2600:4407:c034::/47": "55164", - "2a00:1358:1001::/32": "6866", - "2a02:1390:b000::/40": "21351", - "2001:559:c30d::/48": "33652", - "2402:3a80:c056::/48": "38266", - "240a:acf8::/32": "145970", - "2620:11b:e000::/43": "3356", - "2800:300:64e0::/43": "27986", - "2a0b:89c1:89c3::/33": "3214", - "2a0e:aa01:aa10::/44": "210311", - "2001:559:8482::/48": "7015", - "2001:1248:983d::/46": "11172", - "2600:2000:4130::/44": "33517", - "2a0f:bd00::/29": "202591", - "2401:1740:1000::/48": "136600", - "2607:f070::/32": "13855", - "2804:269c:fe50::/48": "47065", - "2a01:8840:1be::/41": "12041", - "2001:559:81c9::/48": "33662", - "240e:67a:8c00::/33": "4134", - "2a01:95a0::/32": "199711", - "2a02:4545:e0::/46": "197207", - "2001:559:73a::/48": "33491", - "2402:3fc0::/32": "134090", - "2405:1c0:6883::/38": "55303", - "240a:a4c0::/32": "143866", - "2800:200:bd30::/41": "12252", - "2804:15f0:8000::/33": "263419", - "2a06:cd40:1::/46": "43927", - "2001:df3:8600::/48": "131418", - "2408:8459:7230::/41": "17622", - "2804:32b0:3040::/33": "265093", - "2804:3e24::/32": "266576", - "2a02:26f7:bc80::/48": "36183", - "2a03:1b80::/44": "18705", - "2001:500:856e::/48": "396574", - "2001:559:8715::/48": "33659", - "2404:4a00:3::/64": "55423", - "2409:8020:3072::/47": "56046", - "2409:8904:5c40::/42": "24547", - "2804:2b78::/33": "28124", - "2001:559:593::/48": "33659", - "2001:579:417f::/35": "22773", - "2401:d800:b0c0::/42": "7552", - "2409:8069:2b08::/40": "9808", - "2803:4180::/32": "263238", - "2804:76a4::/32": "271125", - "2a01:110:e051::/35": "6584", - "2001:7f8:ec::/48": "208425", - "2801:1a:a800::/48": "19429", - "2a02:1d8::/32": "20953", - "2a10:fa81:1::/48": "48878", - "2001:44b8:3085::/48": "4739", - "2408:8256:3d60::/44": "17623", - "240a:a3e5::/32": "143647", - "2a09:4c0:57e1::/32": "58057", - "2404:6780::/32": "59188", - "2409:8027:2a07::/39": "9808", - "240e:874:80::/39": "4134", - "2804:4144::/32": "267424", - "2001:16a2:d000::/37": "39386", - "2a0f:cc87:9000::/33": "208861", - "2408:8956:6000::/40": "17622", - "2606:2800:4a1c::/46": "15133", - "2a00:1a10::/29": "41230", - "2a02:7900:ff02::/40": "16154", - "2405:25c0:a100::/40": "131951", - "2407:ac00::/32": "45470", - "2605:bb00:1002::/47": "4213", - "240a:a10d::/32": "142919", - "240a:a341::/32": "143483", - "240a:a84e::/32": "144776", - "2804:79b0::/32": "271321", - "2a00:4bc0:2101::/44": "16509", - "2a02:cb43:8002::/48": "20546", - "2a02:ee80:424a::/45": "3573", - "2001:4878:c136::/48": "12222", - "2401:4900:4d00::/44": "45609", - "2405:8a00:a049::/43": "55824", - "2408:840c:4e00::/40": "17621", - "2804:1040:b100::/33": "263626", - "2001:559:8207::/48": "7922", - "2001:678:eb0::/48": "212351", - "2001:1b76::/32": "158", - "2408:8256:2f9b::/48": "17816", - "240a:a999::/32": "145107", - "2a03:ff40:4ed2::/32": "61102", - "2a04:2f81::/47": "16509", - "2001:1998:3101::/36": "3456", - "2405:f600:40::/43": "45117", - "2408:823c::/31": "4837", - "240a:a4fe::/32": "143928", - "2a02:24f8::/32": "34385", - "2001:ee0:4600::/34": "45899", - "2405:6e00:f802::/47": "133612", - "240e:14:7800::/37": "133776", - "2a00:4802:2f0::/39": "13124", - "2a11:4e00:1000::/36": "208565", - "2001:d30:4::/32": "4717", - "240a:a3b8::/32": "143602", - "240a:aaea::/32": "145444", - "2a10:2f01:330::/44": "44024", - "2001:67c:328::/48": "196727", - "2001:67c:2204::/53": "24708", - "2402:800:95ee::/38": "7552", - "2600:1404:d800::/48": "35994", - "2600:3404:500::/28": "4181", - "2604:4300:f39::/32": "33387", - "2a04:4343::/29": "61349", - "2001:559:483::/48": "7016", - "2403:e900::/32": "45133", - "2405:9800:c980::/48": "45458", - "2407:1e40:501::/38": "141732", - "2600:1001:b100::/42": "6167", - "2803:f6e0::/32": "269976", - "2a00:16a0::/32": "15830", - "2400:cb00:a9a0::/46": "13335", - "2401:5400:2010::/33": "4434", - "240e:473:b150::/40": "4134", - "2600:1406:2600::/48": "35994", - "2605:5480::/32": "26253", - "2a00:1728:20::/48": "31490", - "2a00:1ec8:9a::/32": "2854", - "2804:2e1c::/32": "265324", - "2404:7ac0:671::/48": "209417", - "2405:7f00:3205::/41": "133414", - "240a:a767::/32": "144545", - "2600:141b:3001::/37": "20940", - "2602:fed2:7709::/48": "23470", - "2800:5d0:801::/48": "17048", - "2803:7200:800a::/47": "27696", - "2a0e:1106::/40": "62142", - "2400:4d40:302::/44": "134204", - "2620:100:5007::/48": "29889", - "2620:101:2005::/46": "16417", - "2a01:8840:8d::/48": "207266", - "2a02:bc8:38::/29": "8641", - "2001:ee0:c940::/38": "45899", - "240a:a4cc::/32": "143878", - "2a0d:700::/29": "39104", - "2a0e:97c0:1b2::/48": "211840", - "2001:559:80d3::/48": "33287", - "2409:8924:5d00::/38": "56046", - "2a04:4e40:9e00::/48": "54113", - "2001:1248:9731::/45": "11172", - "2401:3bc0:7::/44": "137409", - "2402:800:fa80::/42": "7552", - "240a:af81::/32": "146619", - "2800:ba0:18::/48": "263812", - "2804:2930::/32": "264002", - "2804:75fc::/32": "271082", - "2a0c:fc00::/31": "205250", - "2403:b400::/32": "10212", - "2800:160:1b11::/46": "14259", - "2a02:4260::/29": "60163", - "2803:e880:810e::/35": "52468", - "2804:1754::/32": "263137", - "2607:f8f0:630::/48": "4476", - "2804:44ec::/32": "267661", - "2a0c:3400::/29": "205268", - "2001:559:5ca::/48": "33491", - "2600:1004:f010::/40": "22394", - "2408:8956:a400::/40": "17622", - "2a00:f0e0:71::/32": "198499", - "2001:1248:5696::/41": "11172", - "240a:a221::/32": "143195", - "2620:46:8000::/48": "17234", - "2804:4b60::/32": "267302", - "2804:5578::/32": "262328", - "2407:4800:c000::/34": "139759", - "2604:bf00:211::/32": "17185", - "2806:20d:1d38::/34": "32098", - "2a00:13e8::/32": "196799", - "2001:6a8:9201::/34": "2611", - "2400:8200::/32": "45061", - "2a02:26f7:d651::/42": "20940", - "2800:160:1bdc::/42": "14259", - "2804:60bc::/33": "269187", - "2a0e:8f02:2118::/45": "213326", - "2a0e:aa06:400::/44": "209306", - "2001:559:83ab::/45": "7922", - "2001:67c:2650::/48": "3246", - "2402:800:98a9::/43": "7552", - "2602:fdad::/40": "397438", - "2001:410:2000::/47": "10965", - "2001:df7:f600::/48": "135214", - "2001:fd8:3004::/47": "4775", - "2001:1248:700a::/43": "11172", - "2404:98c0::/43": "135259", - "2600:1406:7401::/36": "20940", - "2a0e:b107:468::/45": "57883", - "2001:df1:d200::/48": "135372", - "2401:d800:dff0::/44": "7552", - "240e:5a:49c0::/38": "140303", - "2604:9b00:2801::/48": "14230", - "2804:2214::/44": "28177", - "2806:108e:1c::/46": "8151", - "2606:8e80:1800::/34": "32133", - "2a02:2e0:41f::/42": "12306", - "2a02:2708::/32": "21378", - "2001:1248:8477::/44": "11172", - "2001:4490:4e80::/46": "9829", - "2001:44b8:4000::/48": "7545", - "2804:a8::/32": "4230", - "2001:18b8:42::/48": "11019", - "240e:44d:1780::/41": "4134", - "2804:3e8:103::/32": "28663", - "2a09:e40::/32": "50673", - "2a0f:21c0::/29": "60262", - "2401:ff40:5010::/41": "137080", - "2620:149:224::/44": "714", - "2803:5ee0::/32": "269986", - "2804:4248:8001::/35": "267490", - "2604:4080::/32": "54858", - "2804:44cc::/32": "267654", - "240a:a7ec::/32": "144678", - "240e:ff:f000::/36": "4816", - "2604:d600:c4f::/42": "32098", - "2605:b4c0:1234::/48": "25780", - "2a01:c50f:a7c0::/36": "12479", - "2a04:13c5::/32": "61049", - "2401:4900:5110::/44": "45609", - "240e:438:5c20::/43": "140647", - "2a02:2010:22d0::/45": "20978", - "2405:9800:b128::/47": "133481", - "2408:84ee::/32": "140726", - "2409:8050:2802::/38": "56047", - "2804:7d98::/32": "271571", - "2402:8100:c::/43": "55644", - "2408:8459:3210::/44": "17623", - "2409:8e5d::/26": "9808", - "2600:141b:a001::/37": "20940", - "2a00:14e0::/32": "41412", - "2a02:26f7:c2c1::/46": "20940", - "2a0b:8700:2::/29": "61317", - "2001:559:24d::/48": "33654", - "2001:559:82c3::/48": "7015", - "240e:250::/38": "137693", - "2620:1ec:8fd::/46": "8075", - "2400:e2::/31": "4766", - "240a:a2bc::/32": "143350", - "240a:ae1f::/32": "146265", - "2a00:ad40:20::/44": "197872", - "2a02:26f7:f7c1::/46": "20940", - "2001:559:845e::/48": "7016", - "2605:de40:3005::/32": "397553", - "2a00:1e88:c000::/34": "12389", - "2a05:2a00::/29": "59816", - "2a0c:7e41:5357::/48": "20473", - "2001:559:82cd::/48": "7725", - "2001:1248:5a29::/46": "11172", - "2001:4878:4055::/48": "35994", - "2610:20:6000::/37": "49", - "2800:5f0:83e::/41": "22724", - "2a04:e4c0:20::/45": "36692", - "2400:fc00:4320::/37": "45773", - "2600:1406:e000::/48": "35994", - "2604:d600:66f::/43": "32098", - "2804:14c:c682::/47": "28573", - "2804:3f54::/32": "53185", - "2806:2f0:60c2::/42": "17072", - "2001:c20:48c3::/48": "3758", - "2a03:2c20::/42": "50287", - "2400:cb00:134::/44": "13335", - "2403:2700:4001::/48": "38500", - "2403:5400:1810::/48": "7470", - "2408:8456:8e00::/42": "17622", - "240a:a1c0::/32": "143098", - "2801:80:1414::/48": "11097", - "2a00:4b00:20e::/42": "41935", - "2404:bf40:8141::/48": "7545", - "2a04:de40:c1::/39": "201971", - "240a:a26b::/32": "143269", - "2406:8ec0::/32": "45701", - "2620:11f:e000::/40": "12243", - "2804:2118::/32": "264533", - "2a0b:dac0::/29": "205424", - "2001:df2:c280::/48": "139989", - "2401:0:8001::/48": "23966", - "2608:100:8::/48": "27064", - "2804:4fb0::/32": "268343", - "2804:7328::/32": "270899", - "2a02:2ad0:243::/45": "702", - "2a07:ca80::/29": "34762", - "2001:4138::/31": "15533", - "2a00:e6c0::/32": "198385", - "2620:123:20c0::/47": "30103", - "2a0e:8f02:213d::/48": "211722", - "240e:420::/31": "140061", - "2800:bf0:80a0::/47": "52257", - "2c0f:efa0::/48": "36902", - "2405:7f00:9d00::/38": "133414", - "2804:8008::/32": "271725", - "2a01:48c0::/32": "34960", - "2a02:26f7:ebc0::/48": "36183", - "2403:6c00::/32": "17514", - "240e:44d:3100::/41": "140345", - "2804:1558::/32": "263385", - "2a02:2af8:220::/37": "702", - "2a03:9300::/32": "29649", - "2001:df0:f8::/48": "9555", - "2401:d800:de70::/40": "7552", - "2800:150:7::/32": "22047", - "2a02:29e0:1::/46": "49367", - "2a0d:b200:100a::/48": "206026", - "240a:a2af::/32": "143337", - "2600:1408:1a::/47": "20940", - "2607:f500:1800::/32": "6181", - "2804:1448::/32": "263324", - "2804:20dc:b000::/33": "264517", - "2a06:80::/29": "206312", - "2a0a:d480::/29": "206549", - "2409:8a0c::/30": "56042", - "240a:ad3e::/32": "146040", - "2a01:6f80::/32": "56867", - "2402:800:7550::/42": "7552", - "2600:d0b:c000::/29": "20161", - "2a00:8040::/32": "50792", - "2a01:620::/32": "12389", - "2a02:26a8:f000::/36": "49675", - "2a0b:b87:ffef::/48": "20473", - "2608:c183:1::/48": "27066", - "2804:7494::/32": "270990", - "2001:559:c22a::/48": "33651", - "2a00:e60::/32": "62023", - "2a01:190:15f0::/29": "1764", - "2a0e:aa06:490::/44": "24239", - "2001:559:82d8::/47": "7922", - "2409:803c:800::/40": "24444", - "240e:109:8049::/46": "4134", - "2804:71d4::/32": "270814", - "2804:73c8::/32": "270937", - "2806:2f0:1300::/43": "22884", - "2a01:8840:11::/48": "13657", - "2001:dd8:1b::/48": "24049", - "240a:a62f::/32": "144233", - "240a:ae5d::/32": "146327", - "240a:afa4::/32": "146654", - "2600:6c38:a44::/40": "20115", - "2602:fe54::/43": "16584", - "2804:2c04::/32": "265188", - "2a10:ccc2::/43": "35619", - "2001:67c:270::/48": "202592", - "2408:8456:2040::/40": "17816", - "2409:804c::/42": "9808", - "2604:ff00:1b01::/48": "36271", - "2804:5bc0::/32": "268867", - "2a03:f003:400::/29": "25472", - "2a0b:4200:1001::/48": "3303", - "240a:aa23::/32": "145245", - "2001:559:c3ac::/48": "33659", - "2001:67c:2a7c::/48": "15598", - "2402:800:5a8d::/43": "7552", - "2402:7780::/47": "132933", - "2403:300:985::/38": "714", - "2403:5a00::/32": "23783", - "240a:a8d9::/32": "144915", - "2804:14c:8798::/42": "28573", - "2a04:8340::/29": "43260", - "2a0b:ab00::/29": "208861", - "2402:800:b370::/40": "7552", - "2600:805:149::/37": "701", - "2804:49c:3104::/48": "15201", - "2a09:3e40::/29": "41327", - "2001:678:700::/48": "50464", - "2001:df6:9a00::/48": "45537", - "2408:8456:2640::/36": "17816", - "240a:a893::/32": "144845", - "2602:808:6000::/40": "1798", - "2606:2800:4270::/46": "15133", - "2001:559:865d::/42": "33651", - "240e:44d:7480::/41": "4134", - "2a02:26f7:cfc0::/48": "36183", - "240a:a771::/32": "144555", - "2620:a9:4000::/48": "3356", - "2a00:fb20:8000::/33": "199319", - "2401:cf80:61ee::/43": "55303", - "2408:8456:5600::/42": "17622", - "2800:300:8240::/37": "27651", - "2804:5d10::/34": "268948", - "2a06:e380:9000::/33": "203507", - "2408:8660::/32": "4837", - "2a0d:2581:1000::/36": "209261", - "2001:18c8:900::/32": "8015", - "2605:f500:115::/38": "1828", - "2607:1d00::/32": "63003", - "2001:569::/44": "852", - "2001:b011:ae00::/33": "3462", - "2a00:ca8::/32": "30764", - "2a00:8740:100::/48": "49037", - "2604:5200:1001::/48": "701", - "2001:559:8134::/48": "33659", - "2001:4828::/32": "16942", - "2403:fdc0::/37": "7175", - "2408:84f3:9840::/38": "17816", - "2408:8956:7000::/40": "17622", - "240a:a0e4::/32": "142878", - "240e:473:6350::/40": "4134", - "2801:16:4800::/48": "269791", - "2804:801c::/32": "271730", - "2a0f:6580:100::/48": "213252", - "240a:a76e::/32": "144552", - "240a:ab5e::/32": "145560", - "240a:af7d::/32": "146615", - "2001:579:a00c::/41": "22773", - "2401:d800:2e50::/42": "7552", - "2402:800:581d::/42": "7552", - "2604:7100::/32": "32391", - "2800:bf0:82c0::/48": "52257", - "2a02:5440::/32": "198477", - "2a05:d80::/29": "51257", - "2a02:26f0:110::/48": "34164", - "2405:7f00:9ec0::/34": "133414", - "240a:a4a3::/32": "143837", - "2602:ffb0:12::/48": "53999", - "2605:8040::/32": "398008", - "2803:fe00::/32": "27650", - "2804:1c84:4::/46": "61659", - "2a00:5ba0::/29": "680", - "2a0a:9fc0::/29": "31673", - "2001:253:104::/48": "142070", - "2001:579:e1bc::/38": "22773", - "2620:121:3000::/40": "54666", - "2803:5c80:5054::/44": "64114", - "2a02:26f7:c48d::/46": "20940", - "2a0e:4280::/29": "59717", - "2a10:3140::/30": "208256", - "2001:559:7b2::/48": "33491", - "2001:559:c119::/48": "20214", - "2400:0:720::/43": "4766", - "2804:3e4c::/32": "266586", - "2c0f:f6d0:1a::/42": "327687", - "2001:1a68:21::/48": "57723", - "2409:8d71::/29": "9808", - "240e:d9:d800::/48": "38283", - "2605:8d80:900::/35": "812", - "2a02:26f7:fa08::/48": "36183", - "2a10:2f00:15f::/48": "212194", - "2a11:2307:4b::/37": "209209", - "2001:67c:29a8::/48": "42168", - "2409:804d:3100::/36": "9808", - "240e:3bf:7800::/39": "4134", - "2804:3ec8:4::/32": "266620", - "2804:487c:203::/44": "267124", - "2804:7cf8:120::/32": "271530", - "2a00:7147:e1::/44": "51430", - "2a02:2498:f001::/36": "13213", - "2a02:26f7:cbc4::/48": "36183", - "240a:a97c::/32": "145078", - "2605:7c0::/48": "19382", - "2a04:4e40:4c00::/48": "54113", - "240e:5e:4006::/48": "134774", - "2602:ff7a:fee::/48": "208830", - "2806:2f0:1081::/43": "17072", - "2a0a:9800::/29": "199163", - "2001:559:c06d::/48": "7922", - "2001:4408:6100::/38": "4758", - "2408:8646::/35": "140726", - "240a:a1cc::/32": "143110", - "240a:ab24::/32": "145502", - "2600:9000:1170::/46": "16509", - "240e:58:d000::/31": "4812", - "2804:78e4::/32": "271272", - "2402:800:7e30::/39": "7552", - "2600:1403:b::/43": "20940", - "2602:80a:2001::/46": "14618", - "2001:4088::/32": "9153", - "2403:cb00:a000::/36": "58621", - "2406:da70:8000::/40": "16509", - "240a:a2d6::/32": "143376", - "240a:a79a::/32": "144596", - "2804:fe0:2800::/45": "263049", - "2600:1000:b140::/42": "6167", - "2a01:558::/32": "15516", - "2a03:9220::/32": "15742", - "2001:559:79::/48": "7725", - "2400:adc0:4210::/47": "9541", - "2604:d600:1291::/44": "32098", - "2a02:26f7:f38d::/42": "20940", - "2a04:2dc0:1d::/48": "212460", - "2001:559:136::/48": "33657", - "2001:678:f94::/48": "211088", - "240e:1c:5000::/36": "134771", - "2804:2dec::/32": "265312", - "2804:5100:2100::/32": "268424", - "2804:6acc::/32": "270359", - "2a04:4e40:8200::/48": "54113", - "2408:8956:e100::/40": "17816", - "2605:a600::/31": "16591", - "2a03:f80:386::/48": "48894", - "2403:2500:300::/48": "36236", - "240e:ff:c005::/48": "136200", - "2602:fdd2::/36": "21659", - "2a02:2e02:9530::/41": "12479", - "2408:8957:1d40::/40": "17816", - "2600:100a:f010::/40": "22394", - "2804:51c:8000::/34": "262495", - "2804:b48::/32": "262732", - "2a05:d050:e080::/44": "16509", - "2402:800:9271::/40": "7552", - "2a05:1084:9000::/36": "9886", - "2a09:d880::/48": "209680", - "2001:559:732::/48": "7016", - "2400:9380:8ec0::/44": "136167", - "2402:8100:2510::/41": "45271", - "2404:e100:4009::/48": "133840", - "2001:559:c2fa::/47": "33287", - "2001:67c:15d4::/48": "47397", - "2402:b400::/33": "45960", - "2408:870c:1070::/34": "17621", - "2409:8c7d::/30": "9808", - "2804:294:8100::/33": "28604", - "2a02:26f7:dec0::/48": "36183", - "2602:ffa6:303::/40": "62731", - "2804:15b8::/32": "52666", - "2a03:2902::/32": "31400", - "2001:559:295::/48": "33651", - "2001:678:adc::/48": "3320", - "2409:804f:2100::/35": "9808", - "2602:fe54:12::/42": "16584", - "2607:f220:41f::/48": "393689", - "2803:da10::/32": "271931", - "2804:690::/32": "262595", - "2408:8459:4810::/42": "17623", - "2803:4580:8100::/40": "52468", - "2001:67c:12b4::/48": "200564", - "2610:a1:fff::/48": "12008", - "2a0c:9a40:1035::/48": "34927", - "2405:9000:b::/41": "7474", - "2602:fd86::/36": "33412", - "2804:5384::/32": "268589", - "2001:67c:1d0::/48": "42061", - "2605:a401:81f8::/38": "33363", - "2605:a404:8b7::/39": "33363", - "2605:a900:100a::/34": "46887", - "2804:5bdc::/46": "268873", - "2a02:788::/47": "12843", - "2a06:cd40:100::/48": "43927", - "2a0e:e42::/32": "208638", - "240a:a1ec::/32": "143142", - "2a03:7520::/32": "13030", - "2406:3003:2028::/45": "4657", - "2804:3820::/32": "266458", - "2806:370:71c0::/42": "28403", - "2a02:2e02:8f30::/41": "12479", - "2001:978:a700::/48": "33811", - "2001:4de0::/47": "34343", - "2a00:1bc8::/32": "50554", - "2a03:ef43:c000::/48": "57218", - "2a06:4200::/29": "200485", - "2804:2b10:1::/46": "52916", - "2803:e0e0:100::/47": "269852", - "2a02:26f7:ca05::/46": "20940", - "2a0b:b600:3802::/47": "57758", - "2a0c:94c0::/29": "21032", - "2c0f:ff10::/32": "37677", - "2400:cb00:a040::/45": "13335", - "2600:1003:9100::/44": "6167", - "2607:fdf0:5e3c::/47": "8008", - "2804:14bc::/32": "263347", - "2a03:10e0::/48": "62571", - "2a09:bac0:87::/44": "13335", - "2401:2200::/48": "55420", - "2404:700::/32": "45429", - "2408:8957:8500::/40": "17816", - "2602:fed2:3ec::/46": "53356", - "2804:5a9c::/32": "268784", - "2804:7ea8::/32": "271638", - "2a0b:b600:3000::/48": "15703", - "2402:800:930f::/43": "7552", - "2402:8e00::/46": "38529", - "2402:d000:812d::/43": "9329", - "2408:84f3:3660::/40": "17623", - "2607:5e00::/32": "40191", - "2801:8e:a000::/36": "11993", - "2001:559:c2d1::/48": "7015", - "2001:4878:2164::/48": "12222", - "2401:d800:cc0::/42": "7552", - "240a:a3cf::/32": "143625", - "2a02:26f0:f400::/48": "34164", - "2a0c:2640::/32": "201750", - "2406:8800:9035::/44": "17465", - "2600:1417:5::/48": "8966", - "2804:679c::/32": "269639", - "2407:a500::/39": "18356", - "2408:8956:3900::/40": "17816", - "2620:149:fe::/47": "714", - "2804:14d:72a7::/43": "28573", - "2402:3a80:10::/47": "38266", - "2806:104e:3::/45": "8151", - "2a02:2010:2510::/45": "20978", - "2a0b:8fc0::/32": "62432", - "2604:6840:f800::/37": "33438", - "2804:7fa4::/32": "271700", - "2a02:26f7:d1c4::/48": "36183", - "2a02:6600::/32": "5377", - "2a03:f200::/32": "30962", - "2403:300:a0f::/43": "714", - "240e:473:6320::/41": "140486", - "2a06:1e00::/48": "60695", - "2001:978:9400:1::/36": "174", - "2001:1998:650::/40": "7843", - "2607:7c80:59::/32": "64260", - "2804:25e4::/37": "61573", - "2a00:4800:3d0::/42": "13124", - "2001:559:c28a::/48": "33660", - "2402:a900::/32": "9877", - "240a:a0fa::/32": "142900", - "2a02:2298::/36": "15544", - "2c0f:efd0::/36": "328336", - "2001:418:8006::/48": "3927", - "2001:559:c2a7::/48": "21508", - "2409:8c15:2900::/37": "56044", - "2a02:26f7:f040::/48": "36183", - "2a04:f580:9200::/46": "4809", - "2a0e:2980:1::/48": "33984", - "2001:550:8801::/39": "174", - "240e:3be:7800::/39": "4134", - "240e:970::/29": "4134", - "2620:0:2b10::/48": "20381", - "2804:3778::/32": "266417", - "2001:253:124::/48": "142090", - "2001:19e8:d::/46": "2576", - "2400:32::/48": "4766", - "2607:f208:df00::/48": "398101", - "2804:a1c::/32": "262727", - "2a00:7e40:80e::/48": "1301", - "2a0b:ffc0::/40": "207013", - "2404:8d02:4000::/36": "9587", - "2806:2f0:5121::/41": "17072", - "2a06:3b80:110::/48": "200478", - "2001:1980:500::/36": "29838", - "2404:3d00:40a3::/45": "3573", - "2600:1404:dc01::/34": "20940", - "2a04:4e40:1430::/41": "54113", - "2a05:2a80:2::/29": "200567", - "2a07:7a80::/29": "206616", - "2401:2200:1000::/37": "55420", - "2a02:f28::/32": "20647", - "2a02:26f0:8d01::/40": "20940", - "240a:a70d::/32": "144455", - "2605:a7c0:141::/44": "16509", - "2a01:8b40::/35": "203165", - "2001:559:4bf::/41": "7016", - "2001:4408:4d09::/35": "4758", - "2401:ff80:1909::/46": "133954", - "2a02:b60::/35": "44217", - "2a0f:607:1056::/48": "212057", - "2804:2e08::/32": "265319", - "2001:559:82be::/48": "33287", - "2600:9000:1175::/44": "16509", - "2620:43:a000::/48": "395030", - "2620:127:7001::/48": "63016", - "2a0a:56c4:8601::/48": "42649", - "2a0c:5247:f000::/36": "208861", - "2001:559:c05f::/42": "7922", - "240a:a623::/32": "144221", - "2602:fed3:8::/48": "19969", - "2607:f170::/43": "6364", - "2a05:8800::/29": "57513", - "2a0f:9240:2000::/48": "212270", - "2a11:2c00::/29": "211054", - "2400:3240::/32": "63996", - "2605:ec80::/32": "11114", - "2804:1ee4::/32": "264452", - "2407:9001:200::/45": "2764", - "2605:a000:1f00::/32": "10796", - "2800:320:402::/48": "27882", - "2a03:db40::/32": "61178", - "2a05:a884:10::/48": "51964", - "2a10:3100::/29": "35598", - "2a0e:97c0:300::/44": "25198", - "2a09:cd40::/30": "202448", - "2001:559:c271::/48": "13367", - "2404:c800:8203::/48": "20940", - "2600:1008:9110::/36": "22394", - "2804:184::/32": "262749", - "2a0a:e5c0:1::/46": "207996", - "2c0f:fe38:2::/45": "33771", - "2406:840:800::/41": "139317", - "2600:1403:3c01::/33": "20940", - "2800:bf0:8043::/43": "27947", - "2a02:2370:8000::/48": "32787", - "2a03:6306::/32": "12837", - "2001:67c:2de0::/48": "212737", - "2400:8b00:a80::/42": "45727", - "2804:ebc::/32": "61588", - "2804:2e18::/32": "265323", - "2a01:879::/24": "3209", - "2a02:2698:7000::/38": "50543", - "2400:cb00:a320::/45": "13335", - "2404:e601::/48": "132805", - "2a02:26f7:e641::/46": "20940", - "2401:b180:8000::/33": "37963", - "2a05:b780::/29": "57809", - "2a00:6060:8001::/34": "60983", - "2001:559:c394::/48": "33651", - "2400:cb00:50::/45": "13335", - "2402:7800:3003::/32": "4826", - "240a:a347::/32": "143489", - "2804:1d14::/32": "61694", - "2804:3e70:d008::/34": "266596", - "2804:4e44::/32": "268250", - "2404:1f00::/33": "55947", - "2a01:9fc0::/32": "3238", - "2a06:5000::/29": "203020", - "2a0f:9400:7004::/47": "211144", - "2001:df3:9a80::/48": "140612", - "2804:2a60:ff00::/40": "263089", - "2804:49a4::/32": "267194", - "2a01:5860::/32": "199939", - "2405:e280:2080::/48": "55769", - "2607:fcd0:fa80:2c01::/55": "8100", - "2803:bc60::/32": "264773", - "2804:258:fc::/32": "28132", - "2804:f8c:d000::/34": "263591", - "2001:559:86b5::/48": "7016", - "2001:dcd:5::/48": "397233", - "2401:d800:5270::/40": "7552", - "2405:201:e800::/35": "55836", - "2607:fdb0:0:104::/32": "3361", - "2a09:b540::/29": "20799", - "2a0a:10c0::/29": "206270", - "2804:2784:d000::/34": "263906", - "2001:559:86d4::/48": "7015", - "2401:ee00:701::/36": "23951", - "240a:abc7::/32": "145665", - "240e:3bf:2800::/38": "4134", - "2607:fdf0:5e55::/46": "8008", - "2620:116:5000::/40": "6059", - "2620:123:5000::/40": "16519", - "2a04:16c0:201::/29": "48921", - "2400:6280:128::/46": "132280", - "2600:1407:2401::/36": "20940", - "2a02:e982:34::/48": "19551", - "2a06:b040::/29": "203779", - "2a11:a607::/48": "205028", - "2607:f480:111::/48": "27435", - "2803:e520::/32": "266687", - "2a02:26f7:f844::/48": "36183", - "2605:a1c0::/32": "11738", - "2001:678:a8::/48": "48132", - "2001:1828::/32": "10297", - "2400:c2c0::/32": "63959", - "2401:3240:1::/45": "63490", - "240e:85c:40::/44": "131285", - "2600:100b:b130::/40": "6167", - "2602:804:8000::/40": "54506", - "2801:1a:9000::/48": "262247", - "2806:230:403d::/48": "11888", - "2a02:27d8::/32": "20741", - "2403:1940:50::/48": "137935", - "2602:feda:b8b::/48": "208563", - "2a01:530::/32": "43219", - "2001:67c:2c92::/47": "60092", - "2806:2f0:11::/48": "22884", - "2001:978:2300:400::/47": "174", - "2001:16f8:666::/48": "30870", - "240a:a66b::/32": "144293", - "240a:ae59::/32": "146323", - "2610:b8::/32": "19021", - "2607:f038:aaad::/33": "21527", - "2001:559:7c0::/48": "7922", - "2409:8061:3100::/36": "9808", - "2a02:6060::/32": "60717", - "2a0c:5247:e000::/36": "59504", - "2405:ad80::/32": "135449", - "2600:1005:b130::/41": "22394", - "2a02:17e8:801::/37": "13002", - "2a02:26f7:df40::/48": "36183", - "2a02:f560::/40": "44267", - "2a04:4e40:2200::/48": "54113", - "2001:559:8316::/48": "33652", - "2400:4d40:255::/46": "134204", - "240e:473:9850::/39": "4134", - "2600:80c:100::/40": "701", - "2602:fcb6::/36": "399392", - "2804:93c::/42": "52878", - "2804:16d8:4000::/35": "262729", - "2001:7f8:e4::/48": "43431", - "2405:1c0:6373::/40": "55303", - "2a01:6940::/32": "29605", - "2a03:660::/32": "60117", - "2a06:c006::/31": "206766", - "2001:470:2a::/48": "54816", - "2001:559:80ef::/48": "33287", - "2001:559:8692::/48": "7922", - "2001:12f0:d00::/42": "1916", - "2605:a7c0:131::/44": "16509", - "2607:d500:303::/48": "63213", - "2607:fb90:f800::/39": "21928", - "2620:6e:a000::/46": "397444", - "2a00:1700::/32": "15672", - "2a00:1d58:f015::/48": "47524", - "2a0f:2880::/32": "208164", - "2c0f:ff20::/32": "37286", - "2001:388:3030::/48": "137188", - "2404:f780:100::/48": "136557", - "2a02:26f7:73::/48": "20940", - "2c0f:f5c0:441::/46": "29465", - "2405:1f00::/32": "38077", - "2602:fed2:7300::/48": "139693", - "2620:11f:7006::/44": "13737", - "2620:1e0:100::/48": "10801", - "2a03:d600::/31": "12727", - "2001:44b8:4050::/48": "7545", - "2401:7600::/32": "45932", - "2600:6c38:221::/46": "20115", - "2602:fcca::/36": "399428", - "2606:4f00:a::/48": "19324", - "2800:160:1474::/44": "14259", - "2804:2238:f100::/36": "264598", - "2001:500:202::/48": "4", - "240a:abf9::/32": "145715", - "2620:132:b000::/40": "21951", - "2a03:2480:68::/47": "200107", - "2001:67c:2b8::/48": "51413", - "2620:107:6000::/51": "6462", - "2804:58a4::/32": "268141", - "2400:4d40:309::/32": "134204", - "2404:8000:1101::/32": "17451", - "240a:ab33::/32": "145517", - "2a06:1c5:a9a::/41": "207455", - "240a:a5b8::/32": "144114", - "2803:6e0::/32": "269950", - "2a00:d00::/31": "41887", - "2a02:1390:1000::/34": "21351", - "2a02:26f7:ef49::/46": "20940", - "2a05:4f40::/30": "29485", - "2001:550:a02::/45": "174", - "2001:c20:c828::/43": "3758", - "2a00:c9c0::/32": "58002", - "2a02:128:4::/48": "209863", - "2001:559:815b::/48": "20214", - "2001:4878:4007::/44": "12222", - "2407:1140::/32": "136336", - "240e:67e:e400::/39": "140330", - "2a0c:b340::/47": "206262", - "2001:468:f100::/36": "11537", - "2400:8b00:200::/42": "45727", - "2409:8904:5a70::/40": "24547", - "2603:c0e0:2800::/39": "54253", - "2a00:1a28:1157::/48": "63473", - "2a01:6a00::/29": "13122", - "2a04:e4c0:30::/47": "36692", - "2403:2040::/32": "17775", - "2404:9400::/45": "133159", - "2408:8459:ec10::/42": "17623", - "2804:a54:18::/41": "262664", - "2804:34e8::/32": "265487", - "240a:a078::/32": "142770", - "2610:b0:4008::/43": "3573", - "2a01:6020:f000::/36": "199070", - "2001:559:2e1::/46": "33659", - "2406:180:8000::/40": "63956", - "2409:8c1f:68f0::/35": "9808", - "2604:4d40:8000::/36": "13830", - "2607:ffa0:2::/32": "19355", - "2a00:7700::/32": "31200", - "240a:abec::/32": "145702", - "2600:1407:c00::/48": "35994", - "2804:e1c:2::/32": "52545", - "2001:559:c186::/48": "33491", - "2402:3a80:1860::/40": "38266", - "2620:6e:6000::/48": "11078", - "2804:3dac:200::/32": "266546", - "2a04:3740:3::/29": "35625", - "2001:559:3c0::/48": "33652", - "2407:1200::/32": "7524", - "240e:1a:130::/41": "23650", - "2600:1408:b001::/37": "20940", - "2a02:26f7:cf45::/46": "20940", - "2a0e:b107:9d7::/48": "213262", - "2a0d:8f40::/29": "208906", - "2a0e:eec1::/32": "49542", - "2001:550:6700::/48": "14877", - "2001:579:d164::/40": "22773", - "240a:a581::/32": "144059", - "2804:2e0::/32": "28233", - "2804:3c28::/36": "263011", - "2a05:c0c0::/29": "49920", - "2001:559:8363::/48": "33657", - "2001:559:83e9::/46": "7015", - "2001:bc8::/35": "12876", - "2001:44b8:2030::/46": "7545", - "2803:9a40::/33": "263824", - "2a02:26f7:df05::/46": "20940", - "2a02:2891:ff::/48": "51185", - "2402:d000:8101::/45": "9329", - "240a:af8d::/32": "146631", - "2804:6210::/36": "269273", - "2a04:9140:3001::/48": "196670", - "2a0d:d9c0::/30": "208948", - "2001:559:c29b::/48": "33652", - "2001:1248:98b8::/45": "11172", - "2001:4878:2321::/45": "12222", - "2401:b80::/34": "133334", - "2409:8c85:aa18::/48": "134810", - "2800:160:1e5d::/42": "14259", - "2001:559:82a0::/48": "7922", - "2001:fd8:1800::/40": "4775", - "2401:200::/32": "17666", - "2800:484:c100::/40": "10620", - "2804:1dbc::/34": "264390", - "2a01:6f0:ffff::/48": "63473", - "2001:559:76b::/48": "21508", - "2001:678:794::/48": "201281", - "2408:8459:cf10::/42": "17623", - "2a02:752:3::/29": "42708", - "2a02:26f7:b841::/46": "20940", - "2001:1248:a01a::/42": "11172", - "2401:1d40:3102::/36": "59019", - "2409:8f04::/32": "24547", - "2602:808:1000::/40": "398898", - "2803:2a80:20::/47": "262928", - "2804:2610::/32": "264321", - "2a00:4c40::/34": "197965", - "2a02:2608::/32": "44306", - "240a:a0d2::/32": "142860", - "2600:1405:e001::/35": "20940", - "2804:55d4::/32": "267959", - "2803:2540:a2::/32": "264668", - "2a02:26f7:f400::/48": "36183", - "2a05:d050:1040::/44": "16509", - "2a0b:15c0::/29": "42207", - "2001:480:332::/37": "668", - "2001:4930::/34": "6263", - "2402:800:9763::/43": "7552", - "2409:807e:3900::/24": "9808", - "2409:8904:5bb0::/37": "24547", - "2804:2af4::/32": "265127", - "2a0b:94c0::/48": "205558", - "2a0f:d980::/32": "1152", - "2600:100c::/32": "22394", - "2600:5c00:386c::/48": "11351", - "2620:118:e000::/44": "27418", - "2804:18:7200::/37": "10429", - "2804:664c::/34": "269547", - "2a00:afc0::/32": "48339", - "2a02:26f7:bbc0::/48": "36183", - "2607:7880::/32": "395401", - "2804:41c::/36": "262416", - "2a02:5480::/32": "197013", - "2001:559:4b3::/45": "7922", - "2001:df6:c080::/48": "141822", - "2804:7a4c::/32": "271363", - "2a02:26f7:f0c0::/48": "36183", - "2a03:dc40:ffff::/48": "196904", - "2001:49f0:a06a::/47": "174", - "2402:800:55d3::/44": "7552", - "2402:840:d000::/46": "63646", - "2403:ee00::/32": "9244", - "2407:8100:1::/48": "58436", - "2a0d:f407:100::/45": "205148", - "2001:43f8:b70::/48": "327074", - "2602:fda6:302::/48": "398051", - "2804:14d:5c55::/44": "28573", - "2a01:8840:d2::/45": "12041", - "2a02:26f7:d7c8::/48": "36183", - "2001:67c:810::/48": "210941", - "2404:4e00:8000::/48": "32787", - "240e:a65:1a00::/34": "140330", - "2620:149:22a::/47": "714", - "2607:fcf8:bbbc::/33": "26788", - "2803:9300::/32": "265760", - "2804:954:41::/42": "263073", - "2001:dce:9400::/48": "45285", - "2001:4130:50f1::/48": "29067", - "2a03:4240::/32": "12731", - "2a06:ac80::/48": "205427", - "2001:67c:21c0::/48": "39265", - "2401:c400:1000::/48": "45785", - "2401:ff80:1705::/44": "133954", - "2602:fcd3:102::/47": "212934", - "2605:1ec0::/32": "394501", - "2a06:2b80::/29": "61317", - "2a06:2c40::/29": "28952", - "2001:400:6410::/48": "43", - "2001:559:c170::/48": "13367", - "240a:aea0::/32": "146394", - "2604:d600:15e3::/44": "32098", - "2a00:15c8::/29": "42337", - "2a0b:ae00:1c00::/29": "207044", - "2408:8957:e700::/40": "17816", - "2620:108:9001::/48": "12159", - "2800:320:9800::/48": "27882", - "2804:230::/32": "53211", - "2a02:59e0::/48": "60118", - "2a05:6080::/29": "44920", - "2001:67c:2ac0::/48": "29663", - "2001:df2:6780::/48": "134340", - "2001:43f8:13b0::/48": "328501", - "240a:a044::/32": "142718", - "240a:afd4::/32": "146702", - "2a01:c50f:3a00::/32": "12479", - "2402:800:9dee::/43": "7552", - "2a00:c40:8096::/33": "34315", - "2001:df7:1500::/48": "135955", - "2400:a980:1100::/38": "133111", - "2001:ee0::/38": "45899", - "2a00:4b00:12e::/43": "41935", - "2a02:26f0:4d00::/48": "34164", - "2a0b:c640::/29": "205473", - "2001:df0:2fc::/48": "58404", - "2607:f978:5::/48": "32475", - "2620:c0::/48": "6492", - "2a00:b700:f::/48": "51659", - "2a02:26f7:f8c5::/46": "20940", - "2a03:d60:1::/48": "42503", - "240a:a804::/32": "144702", - "240e:473:2600::/41": "140485", - "2804:8214::/32": "272497", - "2001:df0:f800::/48": "58397", - "2408:8460::/29": "4837", - "2406:b400:1::/48": "18209", - "2804:4f74::/32": "268328", - "2a00:d98::/32": "30833", - "2a0b:7d40:1::/46": "205583", - "2001:559:2aa::/48": "33651", - "2a02:26f7:d804::/48": "36183", - "2001:559:524::/48": "7015", - "2602:feb4:270::/44": "25961", - "2a03:bf00:200::/40": "43529", - "2a0b:9440::/29": "34766", - "2001:4c98::/32": "35062", - "2403:2900::/32": "132005", - "2600:1415:19::/38": "20940", - "2604:d600:c19::/42": "32098", - "2001:6d0:ffc7::/48": "8985", - "240a:add5::/32": "146191", - "2804:14c:dc81::/45": "28573", - "2a03:5640:f041::/40": "2906", - "2001:678:5d8::/48": "3399", - "2408:873c::/31": "4837", - "240a:ac22::/32": "145756", - "240a:acf5::/32": "145967", - "2600:1480:801::/37": "20940", - "2604:6040:80::/48": "53698", - "2806:2f0:4181::/46": "17072", - "2806:2f0:9301::/41": "17072", - "2001:3c8:e10f::/35": "4621", - "240a:a33b::/32": "143477", - "240a:a925::/32": "144991", - "2600:1012:b040::/42": "6167", - "2604:ca00:1c8::/43": "36492", - "2800:a30:220b::/32": "262187", - "2804:78ac::/32": "271258", - "2a07:5201::/47": "213208", - "240a:a7eb::/32": "144677", - "240a:aa3c::/32": "145270", - "2604:4580:204::/32": "26375", - "2620:144::/36": "53692", - "2800:370:4000::/40": "28006", - "2a00:17f8::/40": "47622", - "2a02:26f7:f809::/42": "20940", - "2a02:2010:2620::/45": "20978", - "2001:559:83eb::/48": "33657", - "2402:800:31fe::/38": "7552", - "2409:8d00::/32": "56048", - "240e:44d:1f00::/41": "140345", - "2602:fd21::/37": "398488", - "2604:2d80:fc00::/48": "30036", - "2804:5514::/32": "268688", - "2a02:2ad0:24d::/46": "702", - "2001:67c:29bc::/48": "207439", - "2001:df0:d7::/44": "8075", - "2401:ff80:180d::/46": "133954", - "2a02:26f7:e585::/46": "20940", - "2804:8060::/32": "61606", - "2a06:82c1::/48": "201106", - "2a07:1f40::/29": "28725", - "2404:bf40:e100::/48": "2764", - "240a:aef4::/32": "146478", - "2600:1003:a100::/44": "6167", - "2600:1407:6801::/35": "20940", - "2804:104c:e000::/40": "263629", - "2001:fd8:2208::/46": "4775", - "2409:40f3::/22": "55836", - "240a:a3a9::/32": "143587", - "2620:129:6020::/48": "395363", - "2402:800:9871::/40": "7552", - "2405:9800:c909::/48": "55476", - "2406:4e40::/45": "140966", - "2409:8924:3700::/36": "56046", - "240a:adcd::/32": "146183", - "2602:ffb0:1c::/48": "64245", - "2605:f440:9f91::/48": "211562", - "2800:68:14::/48": "61468", - "2804:27b8::/32": "263918", - "2a00:dca0::/29": "60175", - "2a0f:4b40::/32": "12722", - "2001:559:368::/48": "7922", - "2a00:1e1c:4000::/30": "8896", - "2a0e:46c4:2920::/48": "138435", - "2a0e:7900::/29": "207902", - "2001:1938:0:2005::/49": "12989", - "2001:4878:2219::/48": "12222", - "2602:fed2:7305::/48": "53356", - "2606:6800:3400::/40": "394895", - "2a01:cd00:8040::/48": "28708", - "2a02:ee80:41aa::/43": "3573", - "2804:63a8::/36": "269375", - "2a0a:53c0::/48": "42780", - "2a0d:f400::/32": "47950", - "2600:1419:b001::/37": "20940", - "2001:3c8:1203::/39": "4621", - "2401:d800:9dc0::/42": "7552", - "2800:190:408::/33": "11664", - "2a02:26f7:f6f4::/48": "36183", - "2001:559:742::/48": "7015", - "2001:559:8368::/47": "33651", - "2001:df0:b100::/48": "136475", - "2405:e40::/46": "24511", - "2605:a900:3006::/44": "46887", - "2607:fee8::/32": "7078", - "2800:160:18ed::/39": "14259", - "2a04:7f40::/29": "197212", - "2001:579:9042::/44": "22773", - "2405:9000:90::/48": "17719", - "240a:a48f::/32": "143817", - "240e:e9:5800::/37": "4134", - "2a02:2070::/32": "48467", - "2a02:26f7:ea01::/46": "20940", - "2a09:1500:11::/48": "208175", - "2400:1000::/32": "10021", - "2800:d302:2::/44": "11830", - "2803:a040:500::/32": "263750", - "2a0a:1087::/32": "393954", - "2a0e:aa01:2000::/32": "206499", - "2401:d800:5be0::/37": "7552", - "240e:6b6:5000::/31": "4134", - "2600:1408:1c::/48": "21342", - "2605:72c0:1::/46": "32354", - "2804:a9c::/32": "52898", - "2a03:fbc0::/29": "61317", - "2a0c:b641:190::/46": "57853", - "2403:fdc0:f000::/36": "7175", - "240a:a9bb::/32": "145141", - "2605:4800:3::/48": "20209", - "2804:1ac:400::/33": "53175", - "2a03:97c0:1::/48": "58076", - "2409:8979::/30": "9808", - "2600:1014:b1a0::/41": "6167", - "2620:5e:e000::/48": "396088", - "2a02:26f0:7e01::/39": "20940", - "2a03:8b60:10::/45": "29256", - "2001:559:7d3::/48": "7922", - "2403:5800:8000::/35": "4764", - "2407:dc00:4::/39": "9714", - "240a:a1ad::/32": "143079", - "2604:b180:80::/44": "32775", - "2804:1d90::/32": "264378", - "2a01:358:401c::/46": "9121", - "2001:4878:2102::/48": "12222", - "240a:a1c8::/32": "143106", - "240a:a206::/32": "143168", - "2804:8140::/35": "272442", - "2a00:cd80::/33": "24848", - "2a03:9c80:8000::/34": "208277", - "2a02:26f7:f149::/42": "20940", - "2404:8d00:1000::/43": "24378", - "2607:880::/32": "43288", - "2607:fb28:11::/32": "9", - "2804:49c:4208::/48": "7162", - "2804:139c::/32": "52908", - "2804:5310::/32": "268561", - "2a02:26f7:ee84::/48": "36183", - "2402:800:51d3::/44": "7552", - "2804:b44::/32": "262448", - "2a02:26f7:ddc4::/48": "36183", - "2a04:2b87::/32": "47602", - "2a06:e881:6600::/48": "208872", - "2a0e:b107:f69::/45": "207466", - "2402:800:bd80::/42": "7552", - "2409:8020:1041::/43": "56046", - "2a02:26f7:cc01::/46": "20940", - "2804:3bb4::/32": "266166", - "2a06:e881:170f::/48": "206813", - "2a07:8140::/36": "49690", - "2001:418:1401:99::/54": "2914", - "240e:438:8820::/43": "140647", - "2a05:e40:2400::/29": "59909", - "2001:550:a500:1::/36": "174", - "2a0d:1a40:7800::/43": "208563", - "2402:800:70c0::/42": "7552", - "2804:6df4::/32": "270566", - "2408:870c:2020::/41": "138421", - "2a0b:ccc0::/29": "41306", - "2001:42a8::/32": "36937", - "2a00:89e0::/32": "198024", - "2a00:efa0::/32": "6776", - "2408:8962::/29": "4837", - "240a:afc2::/32": "146684", - "2620:10f:6000::/40": "102", - "2803:3400::/32": "14754", - "2804:7de8::/32": "271590", - "2a09:bac0:227::/48": "13335", - "2404:5800:101::/32": "9911", - "240e:108:88::/48": "38283", - "2a00:1728:18::/48": "34368", - "2a00:fa60:1520::/32": "53550", - "2a02:26f7:c8c8::/48": "36183", - "2a10:31c0::/30": "208256", - "2c0f:ed40::/32": "328461", - "2405:9800:c880::/48": "45458", - "2408:8345::/35": "140726", - "2803:7210::/32": "271915", - "2804:4604::/32": "266962", - "2001:559:46e::/48": "7725", - "2403:89c0:1::/46": "137661", - "2a06:9f82::/32": "49367", - "2a0b:6b86:a00::/40": "200365", - "2a0b:b5c0::/29": "54543", - "2600:140b:1e01::/34": "20940", - "2a02:26f7:d6c5::/46": "20940", - "2a06:4180:2::/29": "48293", - "2001:559:24::/48": "7016", - "2001:678:5f4::/48": "204626", - "2605:b100:b80::/37": "577", - "2a04:4e40:c840::/44": "54113", - "2a09:8387:ffff::/48": "51972", - "2001:3c8:4008::/35": "4621", - "2001:559:8f::/48": "33659", - "2001:559:93::/48": "33651", - "2001:67c:2128::/48": "48004", - "240e:698:4900::/38": "4134", - "2a0d:9a81::/40": "49959", - "2409:8914:ba00::/37": "56044", - "2a02:2698:6800::/38": "34533", - "2001:559:c33c::/48": "7015", - "2404:e4:119::/31": "703", - "240e:473:5920::/41": "140486", - "2600:1419:cc01::/35": "20940", - "2803:6604:c600::/34": "28075", - "2001:fb0:109f:13::/64": "7470", - "2603:c000:1a00::/37": "31898", - "2a02:970:1367::/40": "44002", - "2001:559:803d::/48": "7922", - "2401:d800:5300::/42": "7552", - "2406:2000:e4::/46": "56173", - "2804:1ef0::/32": "52650", - "2804:3444::/32": "265446", - "2804:7da4::/32": "61605", - "2a02:26f7:bb86::/47": "20940", - "2603:b051::/26": "11796", - "2603:c0e0:1210::/39": "54253", - "2806:1008::/32": "8151", - "2c0f:efe8::/32": "327795", - "2600:6c38:726::/44": "20115", - "2606:2800:5052::/45": "15133", - "2804:8024::/32": "271732", - "2804:27f0::/43": "263930", - "2001:559:19d::/48": "7922", - "240a:a805::/32": "144703", - "2600:80a:423::/41": "701", - "2605:a401:832d::/43": "33363", - "2800:110:1020::/48": "61496", - "2801:18:8800::/48": "267892", - "2804:4e0::/32": "262475", - "2804:4580:800::/35": "266931", - "2806:2f0:41c0::/42": "17072", - "2a04:5c85:f000::/47": "200584", - "240a:ae99::/32": "146387", - "2a0c:4187:8001::/48": "47596", - "2001:468:1f12::/34": "11537", - "2001:67c:1dc::/48": "50888", - "2401:7500:300::/40": "33480", - "240a:a660::/32": "144282", - "2620:138:3009::/45": "22604", - "2001:8f8::/32": "8966", - "2803:c560:fffb::/48": "207688", - "2804:175c:8420::/33": "263140", - "2408:840d:6800::/42": "17621", - "2801:130::/36": "3816", - "2406:8dc0:2203::/48": "209557", - "2602:803:5000::/48": "30330", - "2605:5240:2500::/32": "397494", - "2804:14c:4e9::/43": "28573", - "2804:1b2c:1003::/38": "61713", - "2a02:26f0:8e00::/48": "34164", - "2408:8256:2e87::/43": "17623", - "2804:3d0::/32": "262400", - "2800:160:1880::/45": "14259", - "2a02:26f7:b990::/48": "36183", - "2a06:d340::/29": "25109", - "2a0e:d601:7220::/48": "202436", - "2001:559:87e0::/45": "7922", - "2620:1ec:bdf::/48": "8068", - "2804:208c::/32": "264497", - "2804:3374::/32": "265397", - "2001:559:3b0::/48": "7015", - "2a06:1301:4151::/48": "208861", - "2a06:26c0::/29": "31662", - "2001:559:534::/47": "7922", - "2001:dcd:11::/46": "38796", - "2409:8b31::/29": "9808", - "2606:2800:50a0::/43": "15133", - "2001:43f8:b30::/48": "327917", - "2402:8100:3100::/36": "55644", - "2605:66c0::/32": "398481", - "2800:4b0:4300::/37": "12252", - "2a02:2891:15::/48": "51185", - "2a02:ee80:4260::/46": "3573", - "2001:df1:df00::/48": "136805", - "2620:137:7000::/40": "396322", - "2a03:5620::/32": "51090", - "2001:7fb:fd02::/47": "12654", - "240a:a297::/32": "143313", - "240a:a724::/32": "144478", - "2804:1bd8:4901::/40": "28224", - "2804:60f4::/32": "269202", - "2a04:62c2:1::/45": "47477", - "2a10:6b40::/29": "212640", - "2408:8956:19c0::/38": "17622", - "240a:a87f::/32": "144825", - "2001:67c:1009::/48": "44522", - "2401:4900:5360::/43": "45609", - "2406:af40::/32": "9237", - "2409:8000:2c00::/35": "9808", - "2001:559:797::/48": "7922", - "2001:559:8229::/48": "13367", - "2605:ec40::/32": "398777", - "2a00:7d40::/32": "42429", - "2a02:c47:4::/48": "48446", - "2a05:ec0::/29": "56828", - "2a05:f480:1000::/34": "20473", - "2001:67c:1830::/48": "3301", - "240a:a083::/32": "142781", - "240e:473:a350::/40": "4134", - "240a:a588::/32": "144066", - "2603:c002:1700::/36": "31898", - "2800:160:15d3::/42": "14259", - "2804:2608::/32": "264319", - "2a01:79e0::/32": "199791", - "2a02:2610::/32": "25521", - "2001:4878:164::/48": "12222", - "2400:1700:300::/46": "45166", - "2401:ff80:1111::/46": "133954", - "2600:140f:ec01::/38": "20940", - "2408:8256:3580::/44": "17623", - "2620:11b:e0be::/48": "8551", - "2001:41a8:605::/32": "6762", - "240e:3b4:c000::/37": "140315", - "2804:2ec4::/32": "265365", - "2a02:26f7:d5c1::/46": "20940", - "2a09:5c0::/29": "202204", - "2a0f:9440::/31": "62240", - "2a10:c704::/32": "211858", - "2402:800:320f::/43": "7552", - "240a:a6b2::/32": "144364", - "2804:14d:cc00::/40": "28573", - "2a01:9e00::/32": "41495", - "2a06:2a80::/29": "201791", - "2a0f:607:1054::/48": "212360", - "2804:14d:4cb5::/46": "28573", - "2a04:f580:9080::/48": "4809", - "2001:4de0:3000::/45": "33438", - "2606:aa00::/32": "3794", - "2a0b:8f80:1::/48": "200746", - "2405:b900:3000::/48": "55701", - "240a:a7d6::/32": "144656", - "2803:d280:9::/32": "264733", - "2804:4::/32": "28667", - "2804:b84::/32": "52788", - "2a02:38::/32": "6881", - "2400:f940:13::/32": "45766", - "2620:122:b000::/48": "46656", - "2804:df0:2000::/32": "262775", - "2a02:2298:4000::/36": "15544", - "2001:470:bd::/48": "16621", - "2001:559:82e4::/48": "7015", - "2600:140b:d000::/48": "7679", - "2600:9000:20d2::/47": "16509", - "2800:160:12ac::/43": "14259", - "2804:414c:fffe::/47": "28204", - "2001:559:4e3::/48": "7016", - "2001:559:c37c::/48": "22317", - "240a:ae85::/32": "146367", - "2804:1e7c::/32": "264432", - "2a02:26f7:9c::/48": "36183", - "2a02:26f7:d6c8::/48": "36183", - "2001:559:86b7::/48": "33668", - "2001:559:c3d6::/48": "33657", - "2001:13b0:8016::/35": "3549", - "2001:1898:2400::/40": "26914", - "2803:bb20::/32": "266752", - "2a02:26f0:119::/48": "34164", - "2001:470:e6::/48": "47787", - "2620:32:c000::/44": "53869", - "2804:a54:41::/32": "262664", - "240a:a271::/32": "143275", - "2606:2e00:800e::/43": "36351", - "2620:13e:3000::/40": "397326", - "2806:2f0:38c::/36": "17072", - "2a00:fa60:1510::/44": "200077", - "2001:678:ac4::/48": "208505", - "2001:dce::/47": "38037", - "2404:af40::/47": "137020", - "2406:840:fd10::/48": "134993", - "2406:e240::/48": "131976", - "2408:840c:3a00::/40": "17621", - "2804:2d8c::/32": "265289", - "2403:c5c0::/32": "207083", - "2404:bf40:8041::/40": "139084", - "2408:8957:4e00::/40": "17622", - "2602:fea7:e00::/40": "32181", - "2804:5e2c::/36": "269016", - "2a02:970:1289::/39": "44002", - "2001:559:c21e::/48": "7922", - "2402:e380:319::/48": "141374", - "2a01:618:8000::/38": "8683", - "2a03:9b80:4000::/34": "5411", - "240a:a4fd::/32": "143927", - "240a:a624::/32": "144222", - "2606:8600::/32": "33604", - "2801:15:c800::/48": "18747", - "2804:300:2001::/48": "53237", - "2804:14c0::/32": "263348", - "2406:23c0::/48": "131409", - "2a0a:2c0:3::/48": "197481", - "2607:9080:605::/48": "62424", - "2804:113c:ac00::/33": "53181", - "2a02:26f7:e884::/48": "36183", - "2a05:8cc0::/29": "201210", - "2a0e:95c0::/29": "47362", - "2401:d800:9110::/42": "7552", - "2405:1c0:6571::/46": "135062", - "2605:a404:55a::/40": "33363", - "2605:ba40::/32": "60171", - "2804:a84:8001::/33": "262296", - "2804:ffc:e002::/35": "263612", - "2804:5bd0::/32": "268870", - "2a11:7400:f2::/48": "50518", - "2401:ff80:1901::/46": "133954", - "2600:100d:b070::/40": "22394", - "2604:4bc0::/36": "11509", - "2605:9200::/32": "36394", - "2800:160:1b87::/44": "14259", - "2a01:5040::/42": "43996", - "2407:4700::/32": "3462", - "240e:7:5800::/28": "4134", - "2600:1010:f010::/39": "22394", - "2620:57::/48": "2640", - "2804:7fd4::/32": "271712", - "2a02:cb80:2a20::/48": "43766", - "2001:1248:5b7f::/40": "11172", - "2404:138:4003::/48": "38022", - "240a:af7b::/32": "146613", - "2804:4760:c002::/34": "267050", - "2804:5dac::/32": "52984", - "2804:7e04::/32": "271597", - "2a02:26f0:88::/48": "34164", - "2001:44b8:4052::/48": "7545", - "240a:a54b::/32": "144005", - "240a:ab0d::/32": "145479", - "2600:1904::/28": "15169", - "2600:3408:700::/29": "4181", - "2804:1044::/32": "263627", - "2804:3154::/32": "265007", - "240a:a628::/32": "144226", - "240a:a83a::/32": "144756", - "2600:370f:342f::/41": "32261", - "2604:7580::/32": "46873", - "2620:171:56::/44": "42", - "2804:291c:2000::/33": "263998", - "2001:559:86c1::/48": "33491", - "2a02:26f7:e104::/48": "36183", - "2a0c:7e43:2e10::/48": "20473", - "2001:4878:8048::/48": "12222", - "2402:4200:1200::/48": "24284", - "240a:aa56::/32": "145296", - "2801:13:8800::/48": "269758", - "2803:18a0::/32": "266805", - "2a02:26f7:f640::/48": "36183", - "2a04:4e40:f000::/48": "54113", - "2001:559:80b6::/48": "33652", - "2409:8915:7200::/39": "56044", - "2600:1001:b030::/40": "22394", - "2600:1800:6::/44": "16552", - "2804:6ef8::/35": "270630", - "2a00:c1a0::/32": "16202", - "2a01:560::/29": "34087", - "2a0f:f680::/29": "60262", - "240a:a4d0::/32": "143882", - "2804:2c58::/35": "265211", - "2a00:ae00::/29": "34263", - "2a0d:e8c0::/47": "35829", - "240a:aebd::/32": "146423", - "2001:559:42c::/48": "33657", - "2001:fd8:1e1::/46": "4775", - "2405:3c00::/32": "24437", - "2001:67c:2668::/48": "31566", - "2408:8459:7a10::/42": "17623", - "2804:6c0c::/32": "270442", - "2a01:358:4028::/48": "47331", - "2607:9a00::/32": "35916", - "2804:54a0:1e00::/32": "27688", - "2402:800:73f0::/37": "7552", - "2402:6f40:1::/48": "4812", - "240e:3bc:9200::/36": "140317", - "2a02:26f7:d241::/46": "20940", - "2a02:26f7:d749::/46": "20940", - "2620:22:e000::/48": "64273", - "2804:3368::/32": "265394", - "2a0e:fd45:b72::/44": "212744", - "2604:9d40:120::/48": "6315", - "2001:4998:3c::/48": "14780", - "2405:58c0:4100::/38": "133101", - "2600:1000:f010::/40": "22394", - "2a05:a740::/29": "42926", - "2001:678:b7c::/48": "207871", - "2600:3500:c000::/31": "396998", - "2804:14c:8581::/45": "28573", - "2804:5ba8:4000::/32": "268861", - "2804:70e8::/32": "270755", - "2408:8956:c800::/39": "17622", - "240a:a32d::/32": "143463", - "240e:3b5:7a00::/32": "140313", - "240e:473:9b50::/40": "4134", - "2804:5890::/32": "268136", - "2a02:26f7:f644::/48": "36183", - "2001:56b:10::/33": "852", - "2620:cc:4000::/48": "3356", - "2804:5ac8::/32": "268796", - "2a02:26f7:ec44::/48": "36183", - "2001:c80:84::/32": "4673", - "2600:1415:c01::/35": "20940", - "2600:370f:7585::/42": "32261", - "2804:7044::/32": "270716", - "2a02:1006:c0f0::/48": "3320", - "2602:fe64:4::/44": "396881", - "2806:2f0:7101::/42": "17072", - "2a02:a00:10::/35": "15987", - "2a05:45c7::/48": "202175", - "240a:ac5e::/32": "145816", - "2602:fcf6:104::/48": "49780", - "2603:f8f0::/29": "40676", - "2606:2c40::/48": "209242", - "2a02:2fc0::/29": "12586", - "2a06:e881:4405::/48": "203801", - "2804:58e8::/32": "268157", - "2a02:26f7:e9::/48": "20940", - "2a0e:fd45:b80::/41": "44103", - "2001:559:805d::/48": "7725", - "2001:df0:425::/48": "131475", - "2001:4490:4e70::/46": "9829", - "2600:1006:9150::/36": "22394", - "2a02:cb80:40f0::/48": "43766", - "2001:df3:180::/48": "132010", - "2401:d800:b180::/42": "7552", - "2a02:4c8::/40": "9070", - "2a02:2380:ff00::/48": "51941", - "2a02:26f7:d3ca::/42": "20940", - "2a02:26f7:f605::/46": "20940", - "2a03:4760::/32": "201457", - "2a0b:1306:4::/48": "198018", - "2408:8956:5400::/40": "17622", - "2620:99:e000::/48": "46642", - "2803:cda0::/32": "267788", - "2804:5a94::/32": "268782", - "2a01:7a5::/30": "29066", - "2a04:2e80:17::/48": "50294", - "2406:3003:2060::/43": "55430", - "240a:a4dc::/32": "143894", - "2600:1006:b070::/40": "22394", - "2620:1e0:311::/46": "10801", - "2804:629c::/32": "269307", - "2a06:ed40::/29": "203450", - "2401:400::/32": "7604", - "2604:3a80::/32": "33130", - "2804:46f0:81::/41": "267021", - "2804:4a24:6::/48": "267221", - "2a0e:8f02:2040::/44": "212746", - "2001:fb1:190::/36": "17552", - "2401:d800:9b90::/42": "7552", - "2803:9800:a507::/36": "11664", - "2804:1658:1009::/32": "263283", - "2a01:8840:b9::/48": "207266", - "2a03:cac0:2::/48": "61149", - "240e:473:2320::/41": "140486", - "2800:300:65e0::/36": "27986", - "2801:194::/44": "18747", - "2803:3620::/32": "265867", - "2804:70a4::/32": "270739", - "2804:7168::/32": "270787", - "2a0b:8e80::/47": "43824", - "2001:559:2f7::/48": "22258", - "2404:0:8040::/38": "131591", - "2604:f980:4480::/43": "19957", - "2a05:ef00::/29": "202536", - "2804:fe0:2450::/40": "263049", - "2001:2000:9000::/40": "3301", - "2400:fc00:8550::/40": "45773", - "2402:800:9d01::/44": "7552", - "240a:a76b::/32": "144549", - "2600:1413:2::/36": "20940", - "2604:f440::/45": "397423", - "2803:c760::/32": "269819", - "2804:4ee4::/32": "268289", - "2a01:210::/32": "8510", - "2604:eb00:201::/32": "19212", - "2607:f740:e051::/48": "63911", - "2a0d:3a00::/29": "208133", - "2a05:4e40::/32": "49808", - "2001:e48:122:25::/64": "135732", - "2402:800:9939::/41": "7552", - "2405:205:d000::/34": "55836", - "240e:938:f920::/25": "4134", - "2800:800:900::/44": "26611", - "2806:2f0:4304::/42": "17072", - "2a01:ce83:1000::/34": "51964", - "240a:a95d::/32": "145047", - "240e:44d:4800::/41": "140345", - "2606:8f80:1::/48": "6327", - "2804:5dc:48::/40": "53019", - "2804:7638::/32": "271097", - "2001:67c:780::/48": "200643", - "2001:1978:202::/48": "13768", - "240a:a196::/32": "143056", - "2600:1006:b170::/40": "22394", - "2607:f060:b005::/33": "11404", - "2803:b000::/32": "27975", - "2804:6a8c::/32": "270343", - "2a0e:aa07:e00a::/48": "207454", - "2a02:2420::/32": "197075", - "2001:559:7ea::/48": "7922", - "2001:67c:17d0::/48": "5588", - "2401:b80:4000::/32": "133334", - "2408:80f1:40::/44": "138421", - "2604:f980:6100::/40": "19957", - "2605:1980:204::/47": "13951", - "2804:2064::/32": "262433", - "2a02:f842::/29": "199483", - "2001:559:c3fb::/48": "33659", - "2001:1650::/32": "24776", - "2405:1c0:6711::/45": "135062", - "2804:1010:5000::/34": "263617", - "2804:10e0:1000::/38": "263653", - "2a0a:aa40::/32": "205668", - "2a0e:8f02:215f::/48": "211869", - "2001:1900:2365::/48": "3356", - "2406:c800::/32": "38016", - "2407:2f40::/48": "140787", - "2409:8019:4000::/32": "9808", - "2604:3d09:f000::/38": "6327", - "2804:6e74::/32": "270598", - "2001:5a0:4403::/38": "6453", - "2401:4900:3380::/44": "45609", - "2401:7200:2010::/47": "55328", - "240a:a728::/32": "144482", - "2806:230:6006::/48": "265594", - "2001:1248:8600::/39": "11172", - "2405:9800:c915::/46": "45458", - "2607:fe50::/32": "5661", - "2620:104:6000::/48": "2386", - "2800:160:2184::/43": "14259", - "2801:80:d10::/48": "264396", - "2804:7174::/32": "270790", - "2a06:5040:8::/47": "60188", - "2001:559:81ca::/48": "7922", - "2404:1fc0::/35": "133217", - "2606:2800:404a::/45": "14210", - "2620:138:b000::/46": "16740", - "2620:149:1170::/38": "714", - "2804:3be4::/32": "266178", - "2a05:3580:24::/46": "35807", - "2001:559:c0c2::/45": "33657", - "2001:67c:2ab8::/48": "3301", - "240a:a0a4::/32": "142814", - "2606:2800:4ad0::/47": "15133", - "2803:4220::/32": "27843", - "2804:1078::/32": "263637", - "2804:2cac::/35": "265234", - "2406:3003:2080::/48": "55430", - "240e:67a:c600::/34": "4134", - "2001:559:798::/47": "33287", - "2001:559:8224::/48": "7725", - "2600:380:d980::/41": "20057", - "2a01:280:1::/48": "12381", - "2a0e:b107:15a8::/46": "142597", - "2001:559:8766::/48": "7016", - "240e:474::/23": "4134", - "2607:f710:47::/48": "19624", - "2620:0:1000::/40": "45566", - "2806:2f0:23e4::/43": "22884", - "2a02:26f7:cb48::/48": "36183", - "2a02:2e02:83b0::/41": "12479", - "2001:559:839a::/48": "33287", - "240e:438:2220::/43": "140647", - "2605:dcc0::/35": "398570", - "2607:f699::/32": "53999", - "2607:fc48:c10::/48": "40009", - "2804:6104::/32": "269206", - "2a02:2149:c000::/34": "1241", - "2404:bf40:8580::/46": "45887", - "2407:2d00::/32": "14381", - "2607:6980:50b0::/44": "20473", - "2a00:9640::/41": "57710", - "2001:67c:2084::/48": "44030", - "2605:b40::/32": "397142", - "2800:484:400::/38": "10620", - "2806:230:4021::/48": "11888", - "2806:109f:7::/44": "8151", - "240a:ae17::/32": "146257", - "2806:230:601d::/48": "11888", - "2800:bf0:2300::/47": "52257", - "2001:559:c093::/48": "33657", - "2001:48c0:4::/32": "14589", - "2402:800:9a71::/44": "7552", - "2402:7500:800::/38": "24158", - "2408:8256:3b6c::/43": "17623", - "240e:fe:e000::/35": "136199", - "240e:108:80::/48": "23724", - "2a02:ee80:2020::/43": "3573", - "2a11:9c00::/40": "213354", - "2a07:59c6:ec21::/48": "206313", - "2001:559:c0f3::/45": "7922", - "2001:1840:c0b0::/44": "5400", - "2408:8456:ef40::/40": "17816", - "240a:a9ef::/32": "145193", - "2606:7100:3100::/48": "395831", - "2607:fb50:1a00::/34": "46253", - "2801:15c::/48": "14080", - "2a00:ef8::/32": "13243", - "2a04:9ac2::/32": "20766", - "2001:559:824f::/48": "33657", - "240e:1a:2000::/29": "4134", - "2605:89c0::/32": "16556", - "2610:28:5031::/32": "81", - "2a02:8388::/31": "8412", - "2a06:7280::/29": "204096", - "2a0a:3b40::/34": "207974", - "2001:500:13::/48": "393225", - "2001:559:827e::/48": "7922", - "240a:a307::/32": "143425", - "2803:f080:8900::/43": "64120", - "2804:204:261::/44": "28186", - "2406:800::/32": "23661", - "2408:8957:4500::/40": "17816", - "240e:108:1080::/48": "132153", - "2603:c0e0:1000::/38": "54253", - "2001:1248:55a1::/45": "11172", - "2600:1409:2::/48": "35994", - "2804:14c:bb8f::/43": "28573", - "2a02:2e02:d50::/42": "12479", - "2a0d:5642:115::/48": "35487", - "2001:67c:244c::/48": "39293", - "2400:fc00:8d50::/35": "45773", - "240a:aac8::/32": "145410", - "2602:fe19:399a::/33": "26073", - "2607:fbc0::/32": "7029", - "2a01:4b40::/34": "21299", - "2602:fef0::/47": "396388", - "2620:149:a1f::/42": "714", - "2800:5f0:3022::/45": "22724", - "2a00:d880:5::/32": "198203", - "2a02:61a0::/32": "41937", - "2a03:db05::/32": "28832", - "2a03:ff40::/33": "61102", - "2a05:6200:75::/32": "201630", - "2a0b:37c0::/29": "205728", - "2001:559:3f2::/47": "7015", - "2603:c0e0::/39": "54253", - "2001:559:8542::/47": "33651", - "2001:16e8::/32": "25542", - "2404:f780:b::/48": "206607", - "2406:e4c0::/48": "140766", - "2408:8459:4cc0::/38": "17816", - "2804:1980::/32": "61798", - "2804:739c::/32": "270926", - "2a02:26f7:cc88::/48": "36183", - "2001:559:8052::/47": "20214", - "2001:559:c3b4::/48": "7922", - "2408:8459:a830::/41": "17622", - "2804:21dc::/32": "264578", - "2a02:26f7:be40::/48": "36183", - "2001:c80:c000::/34": "4673", - "2408:864e::/27": "4837", - "2a0e:fd45:6938::/47": "207972", - "2001:559:c2d6::/47": "7922", - "2408:893a::/32": "4837", - "2806:230:600c::/48": "265594", - "2a0b:1b80::/32": "206521", - "2a0f:5500::/29": "211546", - "2402:9b00:84::/32": "45796", - "2406:4a00:900::/40": "56038", - "2604:d600:c12::/47": "32098", - "2804:2c58:1010::/39": "265211", - "2001:df6:e500::/47": "18030", - "2407:9440::/47": "141626", - "2408:8956:f4c0::/38": "17816", - "240e:f7:1000::/36": "4134", - "240e:67a:c400::/39": "140330", - "2400:3740::/32": "136000", - "2605:db80::/32": "5742", - "2a0e:fd45:e81::/39": "44103", - "2001:559:8074::/48": "7922", - "2408:8456:2e00::/41": "17623", - "2804:330::/35": "53240", - "2a00:1338::/32": "8878", - "2a02:1778::/32": "41079", - "2607:fb10:7162::/40": "2906", - "2a02:26f0:9101::/38": "20940", - "2a03:a0e0::/32": "44493", - "2a0c:7e42:f776::/48": "20473", - "2a0d:3b00::/29": "204939", - "2402:800:5ab7::/41": "7552", - "240a:a090::/32": "142794", - "2a01:abe0::/32": "199786", - "2a02:67e0:4000::/32": "203148", - "2a0e:97c0:39b::/45": "211437", - "2600:5c00:14::/36": "10838", - "2606:4700:5d::/40": "13335", - "2620:11a:a026::/44": "43515", - "2804:1320::/36": "263517", - "2804:3204::/32": "265051", - "2804:43c0::/33": "267588", - "2a03:37a0::/32": "59755", - "2409:807c:3900::/33": "9808", - "2620:126:e000::/48": "21556", - "2a04:9a00:1040::/45": "212157", - "2620:df:4002::/44": "16509", - "2804:3dc0::/32": "266551", - "2a02:2870::/33": "25459", - "2a03:5a00:13::/48": "197858", - "2001:67c:207c::/48": "39913", - "2001:4408:6d10::/38": "4758", - "2600:100a:b100::/42": "6167", - "2a07:24c0::/29": "203235", - "2403:5740::/32": "135872", - "240e:968:2000::/36": "63835", - "2600:1480:a000::/40": "33905", - "2606:5480:1000::/36": "21722", - "2a03:efc0:200::/40": "33438", - "2a0e:b107:a0::/44": "209218", - "2001:49f0:d03f::/41": "174", - "2800:160:13a1::/46": "14259", - "2804:358::/39": "53246", - "2a02:26f0:129::/43": "20940", - "2607:f738:300::/41": "17184", - "2a02:26f7:f688::/48": "36183", - "240a:a6d6::/32": "144400", - "240e:3b0:9c00::/34": "140310", - "2600:1007:9010::/40": "22394", - "2607:f8f0:6a0::/48": "55185", - "2001:559:176::/47": "7015", - "2409:8087:3c00::/33": "9808", - "240e:6b9:3000::/32": "4134", - "2602:ff96:10::/48": "26548", - "2804:2dd8::/32": "265307", - "240a:ab54::/32": "145550", - "2604:65c0:101::/32": "14585", - "2a01:798::/29": "29695", - "2a01:c50e:2900::/35": "12479", - "2a02:bf0:8000::/33": "25106", - "2607:f8f0:690::/48": "271", - "2607:fb58:f003::/36": "36086", - "2804:1cc4:400::/32": "61674", - "2a01:73e0:a000::/33": "47872", - "2a02:26f7:b645::/46": "20940", - "2a04:d80::/32": "20895", - "2a0c:9a40:8118::/46": "204438", - "2001:579:b11c::/40": "22773", - "2405:6e00:2600::/41": "133612", - "2408:863c::/31": "4837", - "240a:a6e9::/32": "144419", - "240a:ac76::/32": "145840", - "2a00:c020:1000::/34": "200414", - "2403:1300::/34": "56286", - "2804:1f46::/33": "268989", - "2a01:7fe0::/32": "199803", - "2605:fb40::/33": "40050", - "2804:7b8::/32": "262315", - "2804:31ec::/32": "265045", - "2804:7e18:8900::/33": "271602", - "2a01:52e0::/32": "57325", - "2a07:7f40::/29": "39500", - "2a0f:9400:7b08::/47": "210872", - "2001:559:c133::/48": "33657", - "2a02:26f7:dac1::/46": "20940", - "2a02:2891:10::/46": "51185", - "2a06:e040:7604::/32": "198507", - "240a:ab2f::/32": "145513", - "240e:473:8600::/41": "140485", - "2604::/40": "7397", - "2620:1d5:c03::/40": "14773", - "2803:5900:b::/48": "263175", - "2a01:5043:eff::/48": "202196", - "2a04:4e40:4810::/41": "54113", - "2001:470:c7::/44": "6939", - "2001:559:4b7::/48": "7922", - "2804:7cf8::/39": "271530", - "2001:579:c0df::/39": "22773", - "2804:3234::/32": "265062", - "2a02:6b8:6665::/32": "208722", - "2a02:26f7:d405::/46": "20940", - "2001:559:8357::/48": "20214", - "2401:d800:29e0::/38": "7552", - "2401:d800:d2e0::/39": "7552", - "2620:a5:c000::/48": "27625", - "2a07:e040::/32": "44486", - "2001:559:8202::/48": "33667", - "2001:bf7:1310::/42": "206813", - "2001:df0:fc00::/48": "18229", - "240a:a504::/32": "143934", - "2a0f:c100::/29": "56485", - "2001:559:4ca::/48": "33287", - "2001:559:525::/48": "7922", - "2402:e380:310::/48": "138632", - "2408:8256:3d8a::/48": "17623", - "2409:8087:7100::/37": "9808", - "240e:967:3000::/32": "4134", - "2604:880:d::/46": "29802", - "2408:8256:358e::/48": "17623", - "2600:1008:9000::/44": "6167", - "2804:1578::/32": "61906", - "2a05:f7c0::/29": "43260", - "2001:559:28c::/48": "33287", - "2001:df0:2fd::/48": "17436", - "2408:84f3:2c10::/44": "17623", - "2a00:6fa0::/34": "49206", - "2001:559:c31d::/48": "7015", - "2402:800:321d::/42": "7552", - "2409:8907:6b20::/37": "24547", - "240e:981:300::/36": "4134", - "2804:28c8::/32": "263980", - "2001:559:5a2::/45": "7922", - "2409:8915:2600::/40": "56044", - "2a10:fe00::/32": "208560", - "2001:559:818b::/48": "33287", - "2801:1e:800::/48": "3816", - "2804:4488:9010::/44": "262480", - "2001:559:1e3::/48": "33491", - "240a:a169::/32": "143011", - "2804:59b8::/32": "268721", - "2a0a:4980::/29": "57112", - "240a:a6ae::/32": "144360", - "2803:6900:553::/48": "52423", - "2a01:c00::/26": "6805", - "2a0e:44c0::/29": "39371", - "2001:559:86f4::/47": "33651", - "2408:8957:8d00::/40": "17816", - "2607:f060::/36": "11404", - "2403:300:a15::/48": "714", - "2404:e00:265::/48": "15695", - "2804:20b4::/34": "264509", - "2a02:2698:a000::/48": "42682", - "2a0f:32c0::/29": "60262", - "2001:559:81f2::/48": "33652", - "240e:473:8800::/41": "140485", - "240e:6bb:3000::/29": "4134", - "2a10:2ec7:d000::/36": "208861", - "2001:559:820e::/48": "13367", - "2001:4490:4e2c::/46": "9829", - "2405:f580::/32": "132019", - "2406:840:8000::/36": "142438", - "240e:473:5650::/39": "4134", - "2600:1402:1001::/37": "20940", - "2804:3358::/32": "265390", - "2405:ec00::/45": "23955", - "2804:54bc::/32": "268667", - "2a04:bac0::/29": "198610", - "2a09:400:4000::/32": "208861", - "2001:559:48d::/48": "7922", - "2001:df3:d500::/48": "137399", - "2408:8256:3960::/44": "17623", - "2605:2800:c301::/34": "6922", - "2607:f130::/32": "35916", - "2402:3a80:1080::/41": "38266", - "240a:a38e::/32": "143560", - "2804:2ec0::/32": "265364", - "2a02:26f7:e0c8::/48": "36183", - "2a02:26f7:f6f5::/46": "20940", - "2001:252::/32": "23911", - "2001:559:83de::/48": "33662", - "2001:850::/29": "8447", - "2001:890:c000::/34": "8562", - "2806:2f0:20e1::/46": "22884", - "2a03:69c0:100::/40": "49981", - "2a0c:31c0::/29": "203523", - "2001:1388:5e0a::/34": "6147", - "2404:c000::/46": "45147", - "240a:aa20::/32": "145242", - "2800:160:19ca::/45": "14259", - "2801:1e:6800::/48": "14080", - "2a02:26f0:4500::/48": "34164", - "2a02:26f0:6c01::/39": "20940", - "2001:43f8:391::/48": "327775", - "2605:3380:4127::/43": "12025", - "2a03:2a60:8000::/47": "59871", - "2a06:8143:9d9d::/48": "199364", - "2600:1001:9010::/40": "22394", - "2a01:8300::/32": "20681", - "2a02:26f7:b9c0::/48": "36183", - "2a02:2878:c000::/34": "42699", - "2a03:ec00:b300::/40": "24921", - "240e:473:2400::/41": "140485", - "2605:e000:1c00::/32": "20001", - "2607:9080:105::/48": "7018", - "2a03:5640:f530::/46": "16509", - "2a0a:f240::/29": "205820", - "2a0d:8bc0::/29": "57756", - "2602:fe4c::/36": "397427", - "2605:a940::/32": "15171", - "2a02:26f7:d388::/47": "36183", - "2a0c:5242::/32": "208861", - "240a:afd5::/32": "146703", - "2607:f740:70::/48": "36236", - "2a02:26f7:f344::/48": "36183", - "240e:438:aa20::/43": "140647", - "2604:d600:c71::/44": "32098", - "2620:85:8000::/48": "46453", - "2800:4d0:248a::/45": "7004", - "2804:14c:bb00::/40": "28573", - "2a00:ab40::/34": "41798", - "2402:e7c0:1000::/32": "59078", - "240a:a729::/32": "144483", - "2803:9800:a905::/46": "11664", - "2806:2f0:9401::/41": "17072", - "2a0b:4d07:601::/46": "44239", - "2001:1248:56dc::/42": "11172", - "2606:cc00::/32": "5760", - "2620:13b:3000::/48": "13607", - "2a06:7a00::/48": "49544", - "2401:3c00:40::/43": "38322", - "2804:7670::/32": "271112", - "2401:4900:5090::/42": "45609", - "2604:f980:3000::/36": "19957", - "2804:510c::/33": "61594", - "2806:1000:cfff:2::/34": "8151", - "2408:8456:b040::/38": "17816", - "2408:8406:9c00::/39": "4808", - "2401:4900:1c08::/46": "24560", - "2402:1b80:400::/35": "63956", - "2602:ff52::/48": "394923", - "2800:630::/32": "7049", - "2a0b:fd00::/32": "57119", - "2001:4490:d340::/46": "9829", - "2402:800:9d47::/43": "7552", - "240a:aa02::/32": "145212", - "2620:11d:9000::/48": "14805", - "2a00:7b00::/43": "12338", - "2a00:aa40::/32": "15415", - "2a03:c980:b239::/48": "210079", - "2a10:2140::/29": "205843", - "240a:a1e0::/32": "143130", - "2620:119:e000::/43": "30337", - "2a02:587:501b::/40": "6799", - "2a0c:4dc0:2::/29": "203959", - "2001:67c:1894::/48": "3301", - "240e:3bf:c800::/37": "4134", - "2600:1409:f801::/30": "20940", - "2803:9800::/33": "11664", - "2804:128c::/32": "263483", - "2a0c:9a40:10a0::/48": "213288", - "2001:df5:f680::/48": "135718", - "2607:9800:c104::/44": "15085", - "2a06:ecc0::/29": "12552", - "2401:d800:b7d0::/36": "7552", - "2402:800:9b1d::/42": "7552", - "240e:67b:c400::/39": "140330", - "2804:3684::/32": "266353", - "2806:2f0:2400::/48": "17072", - "2a0e:8f02:f032::/48": "211242", - "240e:37e:aa00::/39": "140330", - "2804:30b8:ac::/43": "28154", - "2a09:2dc2::/32": "43180", - "2a0b:bc80::/29": "42924", - "2001:c20:c83a::/45": "3758", - "2405:7d00::/32": "23777", - "2806:2f0:91e2::/38": "17072", - "2a10:bb40::/29": "41050", - "2404:6d40::/32": "138810", - "2620:9:c000::/48": "23099", - "2804:140::/32": "53138", - "2610:a1:1025::/48": "397237", - "2620:160:e340::/44": "4196", - "2a02:2808:2001::/48": "47909", - "2a0f:5707:abd0::/44": "210881", - "2c0f:f2a8::/32": "327960", - "2402:800:51e0::/44": "7552", - "2408:8956:7200::/40": "17622", - "2607:f150:ffff::/48": "3601", - "2610:a1:3068::/48": "12008", - "2a0c:7e42:993c::/48": "20473", - "2001:1248:871b::/45": "11172", - "2408:840d:8200::/42": "17621", - "2604:4600::/28": "19531", - "2804:4ca0:2::/39": "267381", - "2a02:26f7:e985::/46": "20940", - "2001:559:c262::/48": "33659", - "2804:204:210::/47": "28186", - "2804:8094::/32": "271760", - "2a00:1370:f201::/36": "25513", - "2a01:7a4::/32": "34289", - "2a02:26f7:f984::/48": "36183", - "2a06:e881:7000::/44": "208226", - "2001:550:105::/44": "174", - "2001:559:8396::/48": "33659", - "2401:f40::/44": "134732", - "2804:24b0:ffff::/48": "264238", - "2600:6c38:1ca::/43": "20115", - "2602:806::/40": "16904", - "240e:980:4700::/40": "131325", - "2a02:26f7:62::/48": "36183", - "2408:8957:6000::/40": "17622", - "2409:8078:1900::/34": "9808", - "240a:a073::/32": "142765", - "240a:a575::/32": "144047", - "2001:559:b::/48": "33657", - "2403:5800:1::/48": "136943", - "2a00:5f00::/32": "51055", - "2404:bf40:f802::/37": "139084", - "2804:5ec::/32": "28143", - "2804:59fc:c000::/34": "268738", - "2a03:85c1:925c::/48": "12085", - "2a04:5b81:1000::/40": "202265", - "2a0e:800:6666::/48": "139833", - "2401:e80::/32": "38293", - "2804:5394::/32": "268593", - "2a00:c920::/32": "197415", - "2001:67c:21e4::/48": "51634", - "2405:4803:d4c4::/36": "18403", - "2a04:db80::/32": "44724", - "2a10:2f01:2b0::/46": "205635", - "2801:80:22e0::/48": "267086", - "2804:4c14:db01::/34": "267348", - "2a00:1fc3::/32": "41209", - "2a0a:3e00::/29": "64411", - "2001:d28::/32": "9621", - "2804:14d:d682::/41": "28573", - "2a02:26f0:69::/43": "20940", - "2a09:d980::/29": "209681", - "2c0f:f0c8::/32": "328037", - "2001:1b28:405::/48": "51103", - "240e:44d:4280::/41": "4134", - "2400:4480:2000::/48": "17426", - "240a:a11c::/32": "142934", - "2001:16a2:8030::/45": "25019", - "2407:4000:5::/32": "38005", - "2605:e740::/40": "398710", - "2607:7000::/32": "25905", - "2607:f4a0:5011::/32": "11272", - "2a00:e78:7000::/36": "34602", - "2a01:4c8::/32": "12576", - "2408:8256:3590::/44": "17623", - "2607:fcd0:fa80:8d00::/54": "8100", - "2a0b:1306:6::/44": "198018", - "2a0b:6a00::/29": "207056", - "2001:559:424::/48": "33657", - "2408:8957:21c0::/38": "17622", - "2600:9000:10cb::/48": "16509", - "2604:d600:15f4::/44": "32098", - "2804:d3c::/32": "52613", - "2806:108e:2::/47": "8151", - "2409:8735::/28": "9808", - "2604:d600:c38::/46": "32098", - "2400:da00::/37": "38365", - "240a:ad24::/32": "146014", - "2602:fd6f:1::/48": "4785", - "2801:80:25f0::/48": "268716", - "2a03:9c40:400::/48": "34655", - "2800:160:144a::/47": "14259", - "2a02:868:4012::/36": "13247", - "2001:559:792::/48": "7922", - "2001:ee0:9b40::/37": "45899", - "240e:44d:b00::/41": "140345", - "240e:473:8320::/41": "140486", - "2600:1406:1a01::/37": "20940", - "2804:7874::/32": "271243", - "2a00:ef80::/32": "35334", - "2407:d340:fff0::/44": "2914", - "240a:a0cb::/32": "142853", - "2606:8000::/32": "17253", - "2a02:5320:100::/40": "12189", - "2a0a:e6c0::/29": "197075", - "240e:438:b340::/43": "140647", - "2804:14d:7281::/45": "28573", - "2804:d40::/28": "7738", - "2804:4da8::/32": "268211", - "2804:5784::/32": "268069", - "2a0e:46c4:1310::/47": "142598", - "2404:8000:101a::/42": "17451", - "2606:af80::/32": "25710", - "2800:160:142a::/45": "14259", - "2405:2000:ff00::/40": "6453", - "2a04:8e80::/48": "199937", - "2001:559:c02f::/43": "20214", - "2001:1248:9619::/45": "11172", - "2a04:71c7::/32": "206583", - "2a0a:7d40::/32": "49127", - "2a0b:4341:a14::/48": "57695", - "2402:5380::/32": "63980", - "2408:8956:e900::/40": "17816", - "2606:ae00:bec1::/42": "7287", - "2001:559:305::/48": "33651", - "2602:fd50:200::/40": "207609", - "2001:df0:9580::/48": "134868", - "240e:950:1000::/33": "4134", - "2600:1409:6001::/36": "20940", - "2600:1411:1::/48": "24319", - "2606:3c00:f010::/36": "20365", - "2a09:9000::/29": "34907", - "2a0b:4540::/29": "42011", - "2404:c400:9000::/36": "133321", - "2409:8050:3800::/47": "56047", - "240a:ae6d::/32": "146343", - "240e:3bd:dc00::/34": "4134", - "2a07:acc0::/29": "39899", - "2001:400:201:7::/57": "293", - "2804:15e4:6::/32": "53001", - "2806:2f0:80e1::/39": "17072", - "2a01:66c0::/32": "58308", - "240a:ac6d::/32": "145831", - "2804:938::/32": "263062", - "2804:ab4::/32": "52909", - "2804:1954::/32": "61787", - "2804:4d5c::/32": "268192", - "2a00:e66::/31": "200519", - "2620:19:4000::/48": "395611", - "2402:e80:41::/48": "23901", - "240a:ac48::/32": "145794", - "2804:3ed8::/32": "266624", - "2a02:26f7:c744::/47": "36183", - "2a03:db02::/32": "25086", - "2a02:27b8:1111::/46": "49278", - "2001:df0:1e::/50": "38794", - "2409:8c1f:8fa0::/34": "9808", - "240a:a394::/32": "143566", - "2600:1417:54::/48": "20940", - "2606:3240::/33": "399252", - "2620:1f:8002::/48": "10908", - "2a02:26f0:77::/48": "34164", - "2400:8b00:f80::/42": "45727", - "2804:66dc::/32": "269587", - "2a10:2780::/29": "3356", - "2001:559:8275::/46": "7922", - "2607:f220::/44": "26810", - "2803:dac0:a::/43": "265634", - "2804:776c::/32": "271177", - "2408:8456:c200::/42": "17622", - "2804:33cc::/32": "28656", - "2806:2f0:6141::/42": "17072", - "2001:559:805c::/48": "33657", - "2001:1248:a576::/44": "11172", - "240a:a90e::/32": "144968", - "240a:aa3f::/32": "145273", - "240e:62::/34": "140308", - "2600:9000:223a::/48": "16509", - "2620:101:e000::/47": "46646", - "2001:559:7ff::/48": "33287", - "2001:1348::/32": "27750", - "2405:1c0:6531::/45": "135062", - "2405:ec00:9054::/33": "23955", - "2804:720c::/32": "270829", - "2001:559:320::/48": "7922", - "2804:10f8::/32": "52783", - "2804:6300::/33": "262898", - "2a02:4a00::/32": "48638", - "2a04:7501::/32": "62373", - "2a0c:1b80::/29": "50873", - "2001:3c8:1306::/48": "137198", - "2001:43f8:1702::/47": "328365", - "2404:4a00:7000:1::/37": "45629", - "2405:4000:800:6::/63": "7470", - "2620:106:e00f::/48": "22518", - "2402:800:3a0f::/43": "7552", - "2402:3a80:1300::/41": "38266", - "2620:171:1::/46": "42", - "2804:1068::/34": "263634", - "2001:67c:2108::/48": "41446", - "2001:1248:703a::/41": "11172", - "2602:ffc5:d10::/44": "7489", - "2804:4544:d800::/40": "266915", - "2409:8b44::/28": "24445", - "2409:807c:100::/36": "9808", - "240a:a017::/32": "142673", - "2620:0:61f::/48": "6223", - "2806:230:101f::/48": "11888", - "2a09:8ac0::/32": "205718", - "2001:559:281::/48": "20214", - "2001:559:8360::/47": "7922", - "2a02:26f7:f504::/48": "36183", - "2a03:e40:47::/32": "202042", - "2a06:6980::/29": "34318", - "2a07:ae00::/31": "51299", - "2a07:ef40::/29": "204860", - "2804:1a9c::/32": "61871", - "2804:2f34::/35": "264877", - "2804:700c::/32": "270703", - "2804:77c4::/36": "271198", - "2a01:6c60:3000::/36": "39535", - "2001:559:c382::/48": "13367", - "2001:67c:1a0::/48": "5603", - "2401:d800:db0::/41": "7552", - "2a02:a30::/39": "8926", - "2a03:6947:300::/37": "61266", - "2001:559:1e7::/48": "33657", - "2400:ca07:f036::/36": "23688", - "2405:f080:1000::/37": "136907", - "2409:8000:5c00::/40": "56048", - "2606:ce80:6900::/40": "33438", - "2620:11b:e0f0::/47": "560", - "2a00:cb8:353::/48": "15695", - "240e:3b2:f100::/36": "4134", - "2620:d1:4000::/47": "36324", - "2a02:26f7:d3::/48": "20940", - "2402:ef1e:100::/47": "7633", - "2405:1c0:6831::/45": "135062", - "240e:473:4b20::/41": "140486", - "2804:146c::/32": "263329", - "2001:550:4201::/37": "174", - "2403:6a40:1000::/34": "135967", - "2607:fc48:c00::/48": "40009", - "2804:2f30:6c40::/40": "53096", - "2a04:5c85:1000::/36": "42570", - "2a0b:d440::/29": "204586", - "2804:14c:878e::/43": "28573", - "2a02:26f0:ae::/43": "20940", - "2a0e:46c4:1100::/40": "137490", - "2a0f:f800::/29": "48603", - "2a10:8441:110::/47": "50455", - "240a:a4da::/32": "143892", - "2604:e180:5001::/32": "55002", - "2604:cc80::/32": "62488", - "2a02:26f7:e909::/42": "20940", - "2a02:8383:8000::/29": "8412", - "2001:480:b0::/48": "5132", - "2001:56a:c::/47": "852", - "2800:160:1c93::/44": "14259", - "2804:5ef4::/32": "269067", - "2a06:1301:4003::/48": "49718", - "2001:44b8:1065::/48": "4739", - "2620:111:1004::/47": "18469", - "2804:6fc8:3e00::/39": "270684", - "2a02:26f7:c3d5::/44": "20940", - "2a02:ee80:405a::/42": "3573", - "2a04:4a45:10::/32": "206067", - "2a0e:b107:230::/48": "209419", - "2001:559:ba::/47": "33654", - "2001:1248:5988::/43": "11172", - "2600:9000:117c::/48": "16509", - "2804:1c54::/32": "61650", - "2804:1ce4:4000::/32": "61681", - "2a03:47c0:2401::/40": "21277", - "2402:ef17::/33": "7633", - "240e:95a:4000::/31": "4134", - "2801:80:ef0::/48": "264185", - "2804:53cc::/32": "268607", - "2806:369::/32": "265612", - "2a07:6b40::/29": "559", - "2600:100e:f110::/36": "6167", - "2600:1404:a000::/48": "35994", - "2607:5800::/32": "10320", - "2620:74:21::/48": "397197", - "2a02:26f7:b649::/42": "20940", - "2a02:2e02:1c70::/40": "12479", - "2a05:b080::/29": "198024", - "2001:470:4b::/45": "6939", - "2001:678:f70::/48": "213027", - "2401:80c0::/32": "135191", - "2600:1407:801::/38": "20940", - "2604:f400:9::/48": "29930", - "2001:559:85ef::/48": "7015", - "2406:e580::/32": "63679", - "2606:2c80::/32": "36813", - "2801:1b:a800::/48": "19429", - "2803:10e0::/42": "269853", - "2a0f:9180::/29": "21217", - "2401:8940:fc00::/38": "131291", - "2a02:4e0:2::/48": "16135", - "2a02:6180::/32": "31510", - "2a00:4802:a50::/42": "13124", - "2a02:26f7:c841::/46": "20940", - "2a03:5fe0::/30": "43191", - "2804:4368:df80::/41": "267568", - "2a06:8187:fe19::/48": "206671", - "2401:ff80:1389::/46": "133954", - "2404:bf40:86c2::/39": "139084", - "240e:fd:8000::/36": "136198", - "2804:4610::/32": "266966", - "2001:500:110::/48": "10745", - "2001:4d98:3ffa::/33": "3303", - "2400:cb00:423::/48": "13335", - "2620:171:9::/48": "715", - "2a02:45c0:18::/32": "59675", - "2001:559:285::/48": "33287", - "2001:df5:5780::/48": "132513", - "2a02:26f7:e389::/46": "20940", - "2a0c:dec0:3008::/48": "207063", - "2604:b980::/32": "47103", - "2804:2bdc:900::/32": "265181", - "2804:51e8::/32": "268484", - "2804:53b0:4001::/43": "268600", - "2a0a:4540:10::/48": "205723", - "2001:4878:c027::/48": "12222", - "2402:800:b160::/40": "7552", - "2800:bf0:8141::/48": "52257", - "2804:e1c::/47": "52545", - "2606:2800:4ae0::/46": "15133", - "2804:294c::/32": "52556", - "2804:639c::/32": "269372", - "2406:8800:9023::/45": "17465", - "2409:4001:2000::/35": "55836", - "2605:3680::/32": "63010", - "2620:101:402d::/48": "16880", - "2a0d:5280:f002::/47": "205989", - "2a01:c9c0:b1::/45": "24600", - "2600:1017:a410::/38": "6167", - "2606:2180:4::/47": "22241", - "2806:2f0:33e1::/37": "17072", - "2402:800:549b::/41": "7552", - "240a:afcd::/32": "146695", - "2800:160:17de::/42": "14259", - "2806:230:1308::/40": "265594", - "2806:230:203b::/48": "11888", - "2001:df2:9b00::/48": "56141", - "2408:8459:3830::/44": "17623", - "240a:a5b4::/32": "144110", - "2a02:28::/47": "8359", - "2a02:26f7:d705::/46": "20940", - "2a02:2aa8:203::/43": "702", - "2c0f:ecf0::/32": "36924", - "2a03:9900:100::/48": "20568", - "2001:559:739::/48": "33659", - "2408:8459:ce10::/42": "17623", - "2409:8030:2c00::/35": "9808", - "240a:a86e::/32": "144808", - "2600:6c4a::/32": "20115", - "2602:fcbc:2::/48": "16509", - "2607:ffc8:0:5::/62": "17356", - "2402:1200:4::/44": "24523", - "2a09:1780::/34": "205718", - "2a0e:97c5:79c::/46": "20473", - "2a0e:aa07:f041::/46": "208993", - "2001:559:2ed::/48": "7015", - "2001:559:81b0::/48": "22909", - "240a:a1a5::/32": "143071", - "2804:2308:5000::/32": "264138", - "2804:5e9c::/32": "269044", - "2804:7aa8::/32": "271384", - "2a03:9c40::/48": "34655", - "2a0f:9400:8015::/48": "213347", - "2401:2700:1:1::/48": "9286", - "240e:c3:3000::/28": "4134", - "2600:1415:f001::/37": "20940", - "2605:b100:300::/41": "577", - "2620:f5:8000::/48": "22388", - "2804:14d:1081::/41": "28573", - "2804:7140::/32": "270777", - "2001:559:c027::/48": "33652", - "2001:559:c2cd::/48": "7922", - "2806:230:400c::/48": "265594", - "2a02:26f0:10f::/48": "20940", - "2001:df5:a080::/48": "134461", - "240a:ad3b::/32": "146037", - "2620:123:4000::/40": "22990", - "2a02:26f7:bd08::/48": "36183", - "2409:8904:67b0::/36": "24547", - "2a06:1000::/29": "35041", - "2a0e:b107:e0f::/48": "212580", - "2001:14f0::/29": "12355", - "2800:1e0:2200::/40": "7195", - "2806:21a:8000::/48": "262913", - "2806:230:2012::/48": "265594", - "2a00:6cc0::/48": "62407", - "2a03:f80:389::/48": "25467", - "2a06:f2c0::/29": "202975", - "2001:67c:6c0::/48": "34984", - "2001:44b8:3090::/48": "7545", - "2408:820c::/41": "17621", - "240a:ae11::/32": "146251", - "2804:1d04::/36": "61689", - "2804:4824::/32": "267100", - "2a02:26f7:b6::/48": "36183", - "2001:15f8:1000::/40": "15776", - "2a01:5e0::/32": "16019", - "2a02:540::/45": "35432", - "2a0c:c9c2:2::/40": "202414", - "2001:1998:9::/39": "7843", - "2405:1c0:6871::/46": "135062", - "240a:a0f4::/32": "142894", - "2800:160:1f7e::/40": "14259", - "2800:160:1ff9::/46": "14259", - "2a02:ee80:4219::/42": "3573", - "2a05:6c40::/32": "51012", - "2a05:f507::/44": "13443", - "2803:9800:5200::/32": "11664", - "2804:6e58::/32": "270590", - "2a03:5a00:c::/48": "198324", - "2407:4a00::/32": "56055", - "2600:803:614::/46": "701", - "2a02:2808:4101::/48": "196953", - "2a07:14c0:8000::/29": "208861", - "2a10:55c0::/29": "206332", - "2001:448a:60f0::/39": "7713", - "240a:aea4::/32": "146398", - "2604:ad00::/32": "4181", - "2804:441c::/32": "267603", - "2a0b:5d40::/29": "6761", - "2001:1978:1300::/36": "13768", - "2001:1a11:21::/48": "42298", - "2a02:26f7:c004::/48": "36183", - "2001:dc0:a000::/35": "4608", - "240e:473:7520::/41": "140486", - "2a01:758:ffe9::/43": "3326", - "2001:4288:8008::/48": "36903", - "240a:a89a::/32": "144852", - "2602:fe32::/36": "397081", - "2606:cb80::/32": "394752", - "2a02:e5e::/32": "25057", - "2a0c:bf81::/48": "61295", - "2409:8030:3802::/40": "9808", - "2806:2f0:2200::/42": "17072", - "2a02:26f7:f888::/48": "36183", - "2a02:6c40::/32": "29283", - "2401:d800:f2c0::/42": "7552", - "2604:ea40::/32": "13687", - "2a0e:aa01:aa20::/35": "206499", - "2a10:a180::/30": "10753", - "2001:df2:d280::/48": "132010", - "2801:80:3810::/48": "52885", - "2804:104c:2800::/40": "263629", - "2804:20b8:2000::/32": "264510", - "2a02:ff0:2f5::/44": "12735", - "2a05:1083:ff00::/45": "211876", - "2001:559:85d9::/48": "7922", - "2001:15e8::/32": "24806", - "2603:c002:9010::/38": "31898", - "2603:fea8::/29": "396356", - "2804:5260::/32": "268514", - "2804:5d30::/32": "268956", - "2001:559:437::/48": "33287", - "2406:c500:fffd::/48": "7545", - "2604:ca00:d000::/48": "36492", - "2607:f870::/47": "11992", - "2620:7e:30e0::/48": "3549", - "2620:117:0:a::/64": "10564", - "2801:1b8:8::/45": "28000", - "2a0b:2f00::/29": "48112", - "2a0e:8f02:f027::/48": "212519", - "2804:7cbc::/32": "271515", - "2400:5280::/35": "63199", - "2403:1000:1100::/38": "38819", - "2409:8904:4b60::/37": "24547", - "240a:ab39::/32": "145523", - "2604:be00::/32": "22663", - "2606:43c0::/32": "3801", - "2803:d320::/32": "263689", - "2001:df2:eb00::/48": "9930", - "2400:b880::/32": "133556", - "2620:58:c400::/48": "36140", - "2804:204:231::/44": "28186", - "2001:1248:9c0f::/43": "11172", - "240e:fd:c800::/37": "4134", - "2602:fd6e::/36": "19999", - "2801:80:3ea0::/48": "272432", - "2804:76b0::/32": "271128", - "2a02:2e02:1fa0::/34": "12479", - "2001:df1:6f80::/48": "139655", - "2001:4410:2012::/40": "132040", - "2407:5000::/32": "17494", - "2607:f160:8800::/40": "6167", - "2a07:22c1:10::/47": "212856", - "2001:559:c120::/48": "33657", - "2804:3594::/32": "28240", - "2409:8703::/32": "9808", - "2602:fe70::/36": "21699", - "2804:3268::/32": "265076", - "2a00:55a0:2::/48": "43945", - "2001:559:55b::/48": "7922", - "2400:cf00::/32": "45396", - "2405:1c0:6383::/37": "55303", - "2406:8800:9043::/45": "17465", - "2606:8e80:5001::/37": "32133", - "2620:72::/48": "10359", - "2804:31c:6200::/40": "52962", - "2a00:7a80::/32": "34767", - "240e:473:af50::/40": "4134", - "2604:f980:5800::/40": "19957", - "2a0c:a040::/32": "48918", - "2001:559:85e8::/48": "33287", - "2001:1a68:35::/32": "15694", - "2803:9c0::/40": "207036", - "2a01:4a0:c::/46": "201011", - "2a02:26f7:e148::/48": "36183", - "2a0e:b107:1070::/46": "211622", - "2001:468:2102::/37": "11537", - "2001:b30:4211::/46": "2614", - "2001:c20:48c2::/48": "9255", - "2605:f440:5354::/37": "54874", - "2606:2800:6040::/47": "15133", - "2804:e00:6000::/32": "11419", - "2a0d:1740::/32": "201547", - "2804:d70:120::/43": "52626", - "2a00:1480::/47": "39737", - "2a01:b740:a07::/48": "714", - "2a03:a900::/32": "48926", - "2a04:880:6::/32": "43623", - "2a0e:b107:3e0::/47": "212034", - "2001:49f0:d0f2::/47": "30058", - "240e:473:eeee::/48": "140485", - "2803:2b00:1103::/32": "52468", - "2804:72ec::/32": "270884", - "2a07:a640::/29": "202524", - "2620:171:bb::/48": "42", - "2804:69e8::/32": "270299", - "2a02:2ad0:140::/38": "702", - "240b:4003:fc6a::/48": "45102", - "240e:966:e600::/36": "4134", - "2606:2800:4252::/48": "15133", - "2606:2b00::/32": "5723", - "2607:b500::/47": "54548", - "2804:2604::/32": "264318", - "2a02:26f7:e4c5::/46": "20940", - "2001:1b70:82b0::/46": "158", - "240a:a04f::/32": "142729", - "2a00:1788:101::/32": "31167", - "2001:559:8258::/48": "7015", - "240e:698:2900::/40": "4134", - "2605:a404:4a4::/41": "33363", - "2804:74b8::/32": "270999", - "2a01:9700:1370::/46": "8376", - "2a04:f580:8200::/48": "4134", - "2a05:4a40:fffe::/47": "2571", - "2001:503:39c1::/48": "397197", - "2803:2ce0::/32": "269907", - "2a05:8883:ffff::/48": "48749", - "2a09:11c0:331::/44": "211352", - "2001:559:8775::/48": "7922", - "2001:df0:5280::/48": "132169", - "2605:e2c0:200::/32": "49434", - "2610:e8:1902::/33": "6224", - "2800:e01:7000::/30": "27665", - "2804:77b0::/32": "271193", - "2a00:1851::/34": "29357", - "2001:bf7:1321::/48": "213106", - "240a:acdf::/32": "145945", - "2604:8400::/32": "25689", - "2a07:3502:1040::/48": "38915", - "2a07:85c5::/48": "174", - "2001:559:5c7::/48": "33657", - "2600:140f:a::/48": "20940", - "2803:3a00::/37": "23243", - "2a00:1908:fffc::/48": "205365", - "2a0e:a2c0::/32": "39702", - "2606:ae00:b3c0::/36": "7287", - "2a02:2ad0:619::/42": "702", - "2001:770::/32": "1213", - "2804:6eac::/32": "270612", - "240e:109:8047::/48": "131325", - "2a00:10a0:c::/32": "35745", - "2804:7b64::/32": "271429", - "2a0e:b107:1690::/48": "211066", - "2c0f:4200:2000::/32": "328790", - "2402:b5c0::/32": "137553", - "2600:1007:b0a0::/44": "6167", - "2803:2be0::/32": "270083", - "2001:67c:10e4::/48": "2119", - "2404:bf40:c080::/48": "2764", - "2606:2800:4120::/48": "15133", - "2804:4138::/32": "266011", - "2804:7830::/32": "271226", - "2806:370:5000::/44": "28403", - "2a0e:bbc0:8002::/45": "22604", - "2402:800:371d::/42": "7552", - "2406:2700::/36": "38283", - "2801:1d:a001::/48": "263779", - "2804:2144:1000::/32": "52795", - "2a0b:b780::/29": "206291", - "2804:2050:8a8c::/33": "264485", - "2a02:2330::/40": "12578", - "2001:559:707::/44": "7016", - "2402:800:f840::/42": "7552", - "2001:510:20d::/39": "376", - "2001:559:8754::/48": "7016", - "2409:8052:1800::/47": "56047", - "2602:ff96:4::/48": "8100", - "2603:c011::/36": "31898", - "2608:121::/48": "5376", - "2408:8456:2440::/39": "17816", - "240a:a8b8::/32": "144882", - "2620:ff:c000::/48": "64238", - "2a02:28c0::/48": "51806", - "2a03:b280:1000::/48": "29838", - "2001:fd0:3201::/39": "10029", - "2a02:2e02:8ed0::/42": "12479", - "2a03:1080::/32": "44395", - "2a07:7200:2::/32": "34197", - "2a07:9100::/29": "202774", - "2a10:f980::/29": "49801", - "2001:1248:70ae::/43": "11172", - "2402:800:9247::/43": "7552", - "2402:8100:39b0::/44": "55644", - "2600:180b:5002::/29": "16552", - "2801:80:1ce0::/44": "266604", - "2a01:8640:4::/47": "202015", - "2402:800:9201::/44": "7552", - "2a0e:2b80::/39": "28875", - "2001:559:c3d2::/48": "7016", - "240a:aedf::/32": "146457", - "2804:4710::/32": "267029", - "2a02:26f7:eec0::/48": "36183", - "2a07:ed00::/31": "41981", - "2620:13e::/44": "397327", - "2001:67c:18fc::/48": "35073", - "2001:1998:a04::/35": "7843", - "2405:8a00:2003::/44": "55824", - "2600:1408:7401::/36": "20940", - "2600:1417:64::/47": "20940", - "2607:ca00::/33": "15290", - "2607:fcd0:fa80:4201::/55": "8100", - "2804:66e4::/32": "269589", - "2401:1d40:f25::/35": "59019", - "2405:9800:9802::/47": "45458", - "2605:7e00::/32": "12042", - "2804:214:13::/33": "26615", - "2a0f:5701:3522::/45": "205593", - "2a0f:9400:772e::/48": "210934", - "2404:75c0::/32": "35280", - "2604:3840:2::/48": "20061", - "2620:e:2000::/48": "30546", - "2804:8258::/32": "272514", - "2a07:3500:1a00::/48": "38915", - "2a01:538::/32": "8518", - "2001:67c:1148::/48": "43115", - "2001:df3:3980::/48": "44592", - "2408:8456:a040::/38": "17816", - "240e:1c:3000::/36": "136188", - "2804:4bf8::/32": "267340", - "2001:559:c3e9::/48": "21508", - "2600:1fa0:60c0::/44": "16509", - "2804:618::/32": "28254", - "2a00:ab40:4001::/35": "41798", - "2a06:5040:30::/45": "6134", - "2a0a:340:100::/40": "56807", - "2001:4830:c100::/48": "395213", - "2404:bf40:a502::/41": "139084", - "240a:ab4d::/32": "145543", - "2606:9300::/32": "16904", - "2806:105e:1::/48": "8151", - "2a03:5343::/43": "28723", - "2400:6880:2c00::/32": "9652", - "2407:5280:508::/36": "133557", - "2804:6e4::/32": "262612", - "2804:154c:500f::/43": "263382", - "2408:8957:2d00::/40": "17816", - "2600:380:f103::/48": "64011", - "2800:280:4001::/48": "20940", - "2800:a30:6a6::/35": "262187", - "2a02:2528:2613::/48": "2613", - "2a0c:9280::/29": "42316", - "240e:44d:6c00::/41": "140345", - "2804:3d00::/32": "266247", - "2a00:5400::/35": "35753", - "2a0b:d5c1:100::/40": "197202", - "2407:38c0:64::/48": "59204", - "240e:3bb:3e00::/33": "140308", - "2804:3bb8::/32": "266167", - "2a03:f040::/32": "48133", - "2001:1424::/48": "47578", - "2001:559:8743::/48": "7922", - "2001:4878:8164::/48": "12222", - "2402:ef19:200::/30": "7633", - "2a03:db80:2c10::/48": "47610", - "2a0c:5900::/29": "202120", - "2001:fd8:303e::/47": "132199", - "2406:e00:10e::/47": "55740", - "240a:abf3::/32": "145709", - "2a02:26f7:b944::/48": "36183", - "2803:4320::/32": "266734", - "2001:559:397::/44": "7922", - "2001:559:83a7::/44": "33652", - "2001:df2:6200::/48": "135247", - "2001:67c:3b8::/48": "44786", - "2607:f3a0:a007::/48": "399813", - "2804:1194::/36": "263424", - "240a:a449::/32": "143747", - "2620:88:a000::/48": "398447", - "2620:c2:4000::/48": "394101", - "2a02:2370:f000::/48": "32787", - "2a09:8780::/29": "209737", - "2404:1a0:2012::/30": "24334", - "2804:5210::/32": "268492", - "2401:ff80:1b11::/46": "133954", - "2409:805c:5d00::/34": "9808", - "2a00:c040::/32": "8749", - "2409:8949:9f00::/30": "24445", - "240a:a831::/32": "144747", - "240a:af1f::/32": "146521", - "240e:60c:b000::/37": "137688", - "2804:e30:7800::/37": "11338", - "2804:5d14::/32": "268949", - "2804:6bb4::/35": "270418", - "2407:4940::/48": "140770", - "2804:67dc::/32": "269655", - "2c0f:fc89:80ba::/33": "36992", - "2803:7d00:b000::/48": "52327", - "2001:579:c24c::/37": "22773", - "2606:4700:4700::/48": "13335", - "2804:3e70:b008::/33": "266596", - "2a02:26f7:e480::/48": "36183", - "2001:df4:1b00::/48": "45489", - "2401:d800:e10::/39": "7552", - "2409:805e:2c00::/35": "9808", - "2803:7d80:5011::/41": "11664", - "2a0e:d4c0::/29": "197706", - "2001:6b0:4::/48": "2832", - "2803:6d00::/32": "52444", - "2804:6ecc::/32": "270619", - "2404:168::/32": "24229", - "2001:559:70e::/48": "7922", - "2600:370f:754a::/42": "32261", - "2804:7018::/32": "270705", - "2408:8406:4800::/39": "4808", - "240e:324::/30": "4134", - "240e:3b8:1800::/34": "4134", - "2602:fef7::/46": "396192", - "2806:260:1009::/48": "27672", - "240a:a416::/32": "143696", - "2600:1401:c001::/30": "20940", - "2401:4900:1a70::/40": "45609", - "2401:d800:ddb0::/41": "7552", - "2600:1480:7000::/48": "21342", - "2a0a:c080::/29": "51546", - "2a0e:8f02:f034::/48": "211153", - "2409:8904:6540::/42": "24547", - "2605:280::/32": "22709", - "2606:a000:c08::/35": "11426", - "2001:470:91::/45": "6939", - "2404:0:70b0::/36": "131142", - "2607:fdf0:5eb1::/45": "8008", - "2803:f080::/33": "64120", - "2804:5068::/32": "268387", - "2804:5cb8::/32": "268926", - "2a02:7a0::/29": "12586", - "2001:559:8193::/48": "33660", - "2001:a10:186::/32": "8308", - "2404:8000::/43": "17451", - "2405:7f00:90a0::/39": "133414", - "2a02:26f7:dbcc::/48": "36183", - "2400:adc4:800::/39": "9541", - "2402:800:3763::/43": "7552", - "2405:1c0:7f14::/32": "55303", - "2602:fce1::/48": "395886", - "2800:4e0:c000::/34": "16629", - "2804:14d:12fa::/45": "28573", - "2804:3f10:4101::/38": "262566", - "2a05:9a00:1000::/46": "59441", - "2001:559:c050::/48": "7015", - "2001:67c:155c::/48": "199265", - "2409:805c:3100::/36": "9808", - "2600:1007:9110::/36": "22394", - "2600:40fc:1003::/48": "14210", - "2606:2800:4006::/44": "15133", - "2405:6f00::/32": "9814", - "2804:4b8c::/32": "267313", - "2804:63d8::/32": "269387", - "2a03:e581:1::/46": "49282", - "240e:966:1000::/37": "133775", - "2800:68:38::/48": "61468", - "2a07:4bc0::/29": "198537", - "2804:21bc::/38": "264570", - "2001:1a30::/32": "29488", - "2405:fd80::/40": "135391", - "2600:9000:10f8::/39": "16509", - "2800:6f0:1000::/40": "20207", - "2402:e280:212c::/47": "134674", - "2804:27b4::/32": "53124", - "2a02:e900::/32": "16302", - "2600:1406:6401::/36": "20940", - "2603:c001:2a10::/39": "31898", - "2001:678:dd0::/48": "47753", - "2001:df1:ad80::/47": "56093", - "2600:40f0:110::/42": "701", - "2a00:17f1::/32": "50533", - "2001:df3:e480::/48": "140699", - "2404:8d02:48c9::/39": "9587", - "2804:574:4000::/32": "53013", - "2804:14c4::/32": "263349", - "2001:db0:2800::/35": "17766", - "2402:800:3c01::/43": "7552", - "2405:b8c0:6795:40fe::/32": "131674", - "240a:a108::/32": "142914", - "2606:2800:5140::/48": "15133", - "2607:f810:340::/36": "6192", - "2a02:26f7:e409::/42": "20940", - "2001:559:74::/48": "33659", - "2001:df6:c480::/48": "38254", - "2600:1004:b1f0::/44": "22394", - "2606:ae04:8020::/48": "17224", - "2806:230:2006::/48": "265594", - "2a02:f840::/47": "199483", - "2402:2f80:1::/48": "38001", - "2408:8957:a400::/40": "17622", - "240e:12:9000::/37": "134766", - "2607:f100::/32": "13776", - "2804:64d0::/32": "269450", - "2a07:aa00:8::/40": "3549", - "2a04:c340::/29": "44640", - "2405:8a00:20f4::/39": "55824", - "2605:c00:1000::/40": "46920", - "2620:0:167e::/48": "7046", - "2804:330:3000::/36": "53240", - "2804:414::/32": "262760", - "2804:2a60:25::/32": "263089", - "2a02:26f7:e3::/48": "20940", - "2001:1a00::/32": "15412", - "2400:a980:60f0::/44": "133512", - "240a:a059::/32": "142739", - "2a05:7ac0::/29": "21263", - "2001:16a2:8016::/42": "39386", - "240e:108:1100::/47": "136195", - "240e:44d:5f80::/41": "4134", - "2a01:6f60::/32": "62365", - "2a03:68c0::/34": "61327", - "2a01:9700:1700::/48": "8376", - "2401:d800:7e10::/42": "7552", - "2402:800:54ee::/39": "7552", - "2600:6c38:606::/44": "20115", - "2603:c0e8:2110::/40": "1218", - "2804:14d:4083::/41": "28573", - "2804:2f74::/32": "264892", - "2806:230:2019::/48": "11888", - "2402:e380:31d::/48": "141781", - "240a:a6ca::/32": "144388", - "2801:10:b000::/48": "264635", - "2c0f:f7a8:9220::/48": "4809", - "2a02:26f7:c508::/48": "36183", - "2800:160:2003::/45": "14259", - "2804:3cb8::/32": "53221", - "2a0d:f780::/29": "202921", - "2a0e:b107:ac0::/48": "204307", - "2620:39:6000::/48": "25682", - "2804:1b84::/32": "61732", - "2a01:5d0::/32": "8462", - "2404:7180:c001::/46": "23848", - "240e:ea::/27": "4134", - "2001:559:8455::/46": "7725", - "2001:eb0:100::/46": "9584", - "2a0e:8f02:f02f::/43": "212074", - "2620:11a:a03d::/40": "43515", - "2803:8e60::/32": "267914", - "2804:14fc::/32": "263363", - "2804:504c::/33": "268380", - "2a07:f880::/29": "52212", - "2610:a1:3020::/48": "12008", - "2a00:8860:900::/40": "209485", - "2a02:26f7:8f::/48": "20940", - "2a0f:d7c0::/32": "57825", - "2606:b900::/32": "33089", - "2a00:7ee0::/46": "16347", - "2a02:2af8:409::/45": "702", - "2a0c:4d40::/29": "57353", - "2a0d:5642:130::/48": "35487", - "2001:7b8:407::/29": "12859", - "240a:a6b6::/32": "144368", - "2804:49c:13::/48": "7162", - "2804:4084::/32": "265964", - "2804:7bbc::/32": "271451", - "2a00:6fa0:4300::/32": "49206", - "2600:3000:2412::/38": "13649", - "2001:559:c05c::/48": "7015", - "2600:1000:bf00::/44": "6167", - "240e:473:8e00::/41": "140485", - "2804:5d00::/32": "268945", - "2a02:26f7:e14c::/48": "36183", - "2001:648:2c31::/40": "5408", - "2804:ac8:102::/40": "262672", - "2804:65f4::/32": "52743", - "2001:708::/43": "1741", - "2600:1480:4801::/37": "20940", - "2a01:8840:21::/48": "207266", - "2a02:4d80::/32": "8968", - "2a0a:c0:ffff::/48": "43824", - "2001:559:86bd::/48": "7016", - "2602:ff84:8::/48": "3223", - "2a06:e881:6500::/44": "208958", - "2604:3f40::/36": "394277", - "2804:1ad8::/32": "52589", - "2804:2df8:eecf::/35": "265315", - "2a10:9906::/36": "39409", - "2001:660:3005::/46": "2486", - "2001:1bd0::/32": "28716", - "2001:4408:6300::/37": "4758", - "2402:8100:20ca::/43": "45271", - "2600:140b:fc01::/29": "20940", - "2607:f098::/35": "33363", - "2a00:1280:8004::/33": "39591", - "240a:a2d3::/32": "143373", - "2803:1dc0::/32": "20207", - "2804:6d90::/32": "270541", - "2a02:830::/32": "8426", - "2a03:4740::/32": "50737", - "2409:8087:7500::/36": "9808", - "240a:a4f3::/32": "143917", - "240a:a80f::/32": "144713", - "2a02:f181::/48": "197573", - "2a04:5b82::/44": "202265", - "2a02:26f7:dd40::/48": "36183", - "2c0f:eb98::/32": "328594", - "2001:559:80d2::/48": "7015", - "2001:67c:22f8::/48": "44770", - "2402:3a80:c030::/48": "38266", - "2409:8904:7e40::/39": "24547", - "2600:6c39:605::/46": "20115", - "2602:ff96:5::/48": "40676", - "2001:559:52f::/43": "33659", - "2a07:e00:ac::/48": "210083", - "240e:44:8000::/33": "4134", - "2602:fd8d::/36": "398044", - "2804:12dc::/32": "263501", - "2a00:1a08::/32": "25534", - "2a01:5c8::/37": "12312", - "2a05:3a40::/32": "210236", - "2600:1403:a401::/48": "20940", - "2620:12d:2000::/40": "33545", - "2001:559:c098::/48": "33657", - "2400:7400:77::/32": "38044", - "240e:473:1200::/41": "140485", - "2610:20:8050::/44": "6629", - "2a06:1140::/29": "49262", - "2a0e:b107:770::/44": "213105", - "2404:3d00:400a::/45": "21433", - "2408:8956:cb40::/40": "17816", - "2607:e680::/32": "40355", - "2800:160:196c::/46": "14259", - "2800:bf0:104::/44": "52257", - "2a02:26f0:8501::/40": "20940", - "240a:a573::/32": "144045", - "240a:abaf::/32": "145641", - "2804:7e48::/32": "271614", - "2a0a:e940::/29": "207543", - "240e:980:8900::/40": "4134", - "2803:3440:9100::/33": "263784", - "2a04:53c0:85::/48": "47784", - "2402:db00::/32": "132142", - "240e:438:2e40::/35": "4134", - "2607:fdb8:2000::/33": "30496", - "2a01:4f80::/29": "51053", - "2a02:26f7:65::/48": "20940", - "2a02:26f7:dd04::/48": "36183", - "2001:559:c18f::/48": "7725", - "2001:67c:2290::/48": "43407", - "2001:fb0:101d::/42": "7470", - "2801:14:6800::/48": "19429", - "2804:19dc::/32": "61823", - "2001:559:8471::/48": "33659", - "2001:678:46c::/48": "207142", - "2600:1401:8::/34": "20940", - "2600:2c00:f000::/36": "26094", - "2804:3e4::/32": "262404", - "2a02:26f7:dc84::/48": "36183", - "2a10:e580:1::/46": "399114", - "2001:559:20e::/48": "33651", - "240e:108:4f::/42": "4134", - "2804:6c00::/32": "270439", - "2a02:290::/32": "8732", - "2a02:d480:280::/32": "680", - "2a06:5dc0::/29": "25542", - "2a0d:1fc0::/29": "3214", - "2001:3c8:9009::/48": "9464", - "2804:7490::/32": "270989", - "2a02:26f7:e3cd::/42": "20940", - "2a01:4260::/32": "205938", - "2001:67c:20c::/48": "51289", - "2402:800:980f::/43": "7552", - "240e:473:520::/41": "140486", - "2605:a408::/41": "33363", - "2620:149:12::/41": "714", - "2804:14d:8c00::/40": "28573", - "2a01:808::/27": "3209", - "2001:579:5144::/40": "22773", - "2401:ff80:1a8f::/43": "133954", - "2605:bfc0::/32": "32703", - "2804:526c:e000::/35": "268517", - "2001:4998:19c::/46": "36646", - "240a:a636::/32": "144240", - "240a:a7d1::/32": "144651", - "2602:fed2:7307::/48": "53356", - "2604:cec0::/32": "36472", - "2804:1b40:9000::/33": "28255", - "2401:4900:4040::/44": "45609", - "2401:ff80:1913::/40": "133954", - "240a:a7d9::/32": "144659", - "2602:fcf6:103::/48": "212577", - "2804:5a78::/32": "268775", - "2a0b:4341:704::/48": "57695", - "2001:678:6d4::/48": "200019", - "2404:b300:31::/46": "59318", - "2605:9a00::/48": "160", - "2803:2c0::/32": "264830", - "2001:4878:8347::/48": "12222", - "2620:17b:3::/48": "209", - "2a01:500::/32": "39537", - "2a02:610:ffff::/48": "42979", - "2400:cb00:a150::/45": "13335", - "2402:5c40:2000::/48": "64089", - "2404:c600::/32": "38195", - "2608:c185:1::/48": "6025", - "2620:149:1500::/42": "6185", - "2a00:4cc1::/32": "51691", - "2a00:fe00:d07e::/48": "702", - "2001:67c:1104::/48": "213021", - "2001:1a11:12::/42": "8781", - "2402:800:3455::/42": "7552", - "2607:f6f0:7000::/48": "27330", - "2804:53a0:4000::/36": "268596", - "2804:7750::/32": "271170", - "2401:31c0:fffe::/48": "134830", - "2801:140:10::/48": "42", - "2a02:1c8:7::/48": "41704", - "2c0f:ed00::/48": "328442", - "2a0b:6b86:d00::/43": "212232", - "2001:559:77c::/48": "33659", - "2602:802:5000::/40": "19065", - "2602:fdbc::/36": "397774", - "2605:a404:7fb::/36": "33363", - "2a02:26f7:d188::/48": "36183", - "2a02:26f7:f141::/46": "20940", - "2a0a:51c1::/30": "48314", - "240a:a373::/32": "143533", - "240a:af1e::/32": "146520", - "240e:105:f500::/40": "139316", - "2600:1012:f110::/36": "22394", - "2602:feb4:c0::/44": "25961", - "2806:106e:10::/48": "8151", - "2a0c:4300:50::/40": "43722", - "2001:49f0:d01b::/42": "174", - "2400:adc0:c130::/48": "9541", - "2a02:fe80:1010::/48": "30148", - "2a03:1e02::/32": "203865", - "2a03:57e0::/32": "60481", - "2a07:1480::/29": "59626", - "2a0e:b105:6ec::/43": "20473", - "2001:12f8:2::/47": "12136", - "2406:c500:ffd8::/48": "135421", - "2409:8050:1100::/37": "9808", - "2a0f:c087:b29::/48": "48108", - "2a03:77a0::/32": "201085", - "2001:550:409::/48": "30103", - "2409:8950::/30": "56047", - "240a:aa55::/32": "145295", - "240a:adfe::/32": "146232", - "2600:9000:2000::/45": "16509", - "2800:381::/33": "10834", - "2a00:8ee2::/40": "48635", - "2001:ee0:306::/48": "135905", - "2001:4878:c220::/48": "12222", - "240e:473:2120::/41": "140486", - "2802:0:23::/48": "18747", - "2a00:8d00::/32": "4589", - "2001:470:9c::/48": "54972", - "240e:424::/30": "4134", - "2804:21f8:13::/39": "262272", - "2a00:16f8::/48": "17025", - "2a06:79c0::/47": "15622", - "2a06:bdc0:191a::/38": "62240", - "2403:5180:16::/48": "138467", - "2620:108:8002::/48": "14904", - "2803:d60::/46": "269774", - "2a00:98c0::/32": "29287", - "2a02:26f7:bf41::/46": "20940", - "2606:2800:257::/44": "15133", - "2001:c98::/32": "9858", - "2604:7a80:1000::/34": "26548", - "2800:4b0:8100::/37": "12252", - "2402:800:fae0::/39": "7552", - "2404:e7:210::/28": "703", - "240a:a08e::/32": "142792", - "2803:e600:aaab::/35": "18809", - "2804:2190::/32": "264562", - "2402:800:9ee0::/44": "7552", - "2405:1c0:6a23::/43": "55303", - "2607:fc58:1004::/48": "12055", - "2804:3894::/32": "266487", - "2a02:26f7:b8c4::/48": "36183", - "2a0c:e8c0::/29": "208861", - "2001:3b8::/32": "2527", - "2001:df3:f380::/48": "140718", - "2405:6e00:498::/41": "133612", - "2600:1415:f801::/30": "20940", - "2401:d800:5850::/42": "7552", - "2405:4802:31b0::/33": "18403", - "240a:a867::/32": "144801", - "2607:f408:10::/45": "19871", - "2a02:500::/33": "5538", - "2c0e:2204::/30": "37457", - "2001:260::/32": "2518", - "2600:1001:d0c0::/44": "6167", - "2607:9500::/32": "22423", - "2600:1409:c::/43": "35994", - "2607:f4f8::/32": "23127", - "2a0f:f980::/29": "60262", - "2c0f:f388::/32": "37004", - "2402:800:3271::/44": "7552", - "2607:f7a8:1c1a::/48": "46887", - "2a02:2e02:900::/38": "12479", - "2a0d:3040::/29": "61100", - "2001:67c:21e0::/48": "39029", - "2001:4878:c242::/48": "12222", - "2001:4b98:abcb::/48": "209453", - "2602:ff63::/48": "19754", - "2607:fa48:200::/32": "5769", - "2a09:be40:1170::/48": "212582", - "2a0e:7740::/32": "208490", - "2406:2700:1001::/32": "38283", - "2600:141b:a800::/48": "23454", - "2804:2050::/35": "264485", - "2a00:bc00::/32": "31272", - "2a04:fa80:2::/44": "2635", - "2001:559:c1d8::/48": "7015", - "2001:1248:5992::/45": "11172", - "2600:140b:4401::/36": "20940", - "2a00:a160::/32": "60592", - "2a07:4480::/32": "59494", - "2001:559:513::/48": "7015", - "2406:7400:7::/44": "24309", - "2408:8957:4000::/40": "17622", - "2001:559:8753::/48": "7015", - "2001:67c:2da8::/48": "41040", - "2001:1248:961f::/41": "11172", - "2401:d800:90e0::/39": "7552", - "240a:a930::/32": "145002", - "2804:2178:5001::/32": "264556", - "2001:13d1:2c04::/35": "7303", - "2408:80f5:4000::/34": "4837", - "2605:ad80:ffee::/43": "62887", - "2803:9800:a88d::/43": "11664", - "2a04:4e42:18::/41": "54113", - "240a:a6a3::/32": "144349", - "2602:ffc5:400::/40": "398395", - "2803:a920::/32": "266668", - "2804:4520::/32": "267674", - "2804:4c14:9b01::/34": "267348", - "2a10:480::/29": "4785", - "2001:559:c111::/48": "20214", - "2001:559:c36d::/48": "7922", - "2401:d800:da50::/42": "7552", - "2800:370:5::/48": "28006", - "2804:d70:c0::/39": "52626", - "2001:559:819b::/48": "7922", - "2407:c00::/32": "45356", - "2804:e94:f0::/46": "262468", - "2804:1a58::/32": "61855", - "2804:1bac::/32": "61651", - "2404:c2c0:240::/44": "135629", - "240e:97a:2d01::/48": "131325", - "2600:387:c::/25": "7018", - "2600:1901:ff90::/44": "15169", - "2a06:d680::/29": "203593", - "2001:b08:18::/48": "8684", - "240a:a439::/32": "143731", - "2804:14c:6573::/40": "28573", - "2001:559:c127::/48": "33489", - "2001:67c:2f9c::/48": "5588", - "2400:8b00:1800::/42": "45727", - "2402:b400:40d0::/39": "45960", - "240a:a11a::/32": "142932", - "240a:acf6::/32": "145968", - "2606:9700::/32": "237", - "2001:c00:facf::/37": "4618", - "2408:8256:2f9c::/46": "17623", - "240a:a282::/32": "143292", - "2620:11b:e020::/44": "3549", - "2804:3e70:abce::/35": "266596", - "2001:550:e03::/45": "174", - "2001:559:c2a1::/48": "7922", - "240a:a887::/32": "144833", - "2607:fc48:c38::/48": "40009", - "2607:fb10:7030::/45": "2906", - "2800:c70:20::/37": "23201", - "2806:2f0:3441::/46": "17072", - "2a00:8d60::/32": "60720", - "2a00:bf40::/32": "57928", - "2a09:4c0:fe1::/33": "58057", - "2001:559:271::/48": "7725", - "2602:fd89::/36": "55129", - "2401:ff80:138f::/43": "133954", - "2804:6654::/32": "269551", - "2804:79c8::/32": "271327", - "2a01:b7c0::/32": "60384", - "2803:86e0:8000::/33": "269952", - "2400:5680::/32": "55720", - "2404:0:7000::/40": "131142", - "2404:1f00:ffa2::/45": "55947", - "240a:a193::/32": "143053", - "240e:329::/25": "4134", - "2606:2800:15::/46": "15133", - "2803:f00:700::/42": "262182", - "2806:230:202b::/48": "11888", - "2a02:26f0:4a00::/48": "34164", - "2a0b:bbc0:3100::/40": "205388", - "2a0e:b107:5a5::/46": "203943", - "2a0a:54c1:55::/46": "62240", - "2001:1248:7055::/42": "11172", - "2403:e00::/32": "38437", - "2406:bfc0::/32": "131668", - "2600:1402:f::/43": "20940", - "2600:6000:fd94::/38": "12271", - "2606:2800:4262::/44": "15133", - "2606:9500:1000::/36": "393423", - "2001:579:f138::/40": "22773", - "240a:a14e::/32": "142984", - "2600:140b:1001::/38": "20940", - "2804:2144:900::/37": "52795", - "2a03:ecc0::/32": "199277", - "2400:7a00::/32": "6939", - "2a02:2ca0::/32": "43350", - "2a02:7880::/32": "28745", - "2001:559:8711::/48": "7922", - "2408:8957:12c0::/39": "17816", - "2602:feb0::/36": "174", - "2620:f8:4000::/48": "1767", - "2804:11d8::/32": "263443", - "2804:1938::/32": "262752", - "2001:df0:ec00::/48": "133640", - "2001:1248:a428::/43": "11172", - "240e:698:2500::/40": "134756", - "2607:f0d0:3502:31::/32": "36351", - "2607:fb90:2c00::/38": "21928", - "2801:80:1610::/48": "2635", - "2a00:c827::/45": "60330", - "2001:ee0:3740::/36": "45899", - "2a10:d780::/46": "211997", - "2001:df1:9580::/48": "138433", - "2409:804e:3100::/36": "9808", - "2607:6780::/32": "395282", - "2a01:190:160::/35": "1764", - "2001:67c:2e4::/48": "47886", - "2001:67c:2718::/48": "25068", - "2001:df7:3700::/48": "138456", - "2607:fdf0:5e28::/47": "8008", - "2a0c:93c0:8022::/48": "212465", - "2401:4900:1000::/41": "45609", - "2401:d800:50c0::/39": "7552", - "2804:e30:400::/45": "11338", - "240e:848:10::/42": "4134", - "2a00:6920:f000::/40": "42003", - "2001:1248:964f::/43": "11172", - "240a:afc5::/32": "146687", - "2600:1006:b130::/44": "22394", - "2804:6304::/32": "269333", - "2406:840:d110::/44": "38136", - "240e:bf:c000::/37": "4134", - "2803:2fe0::/32": "271781", - "2804:3160:4::/33": "265010", - "2a00:d30:16::/48": "202024", - "2a04:d740::/29": "12907", - "2a0e:4847::/48": "48749", - "2001:df3:5000::/48": "132986", - "2409:8904:d040::/42": "24547", - "240a:a832::/32": "144748", - "2a0c:8f80::/29": "44293", - "2001:4410::/35": "132040", - "2409:8924:4700::/36": "56046", - "2610:b0:40f0::/45": "3573", - "2a10:e800:1::/48": "28885", - "240a:a6a8::/32": "144354", - "240e:3b9:ec00::/35": "140314", - "2800:484:b800::/40": "10620", - "2a00:5647::/32": "34182", - "2a02:26f7:b8c8::/48": "36183", - "2a0b:4700::/29": "50628", - "2a0e:7f80::/29": "208927", - "2001:67c:2698::/48": "50779", - "2804:2900::/32": "263992", - "2001:550:3101::/38": "174", - "2600:380:ba00::/37": "20057", - "2001:559:8160::/48": "7725", - "2402:3700::/32": "38496", - "2409:4051:5000::/30": "55836", - "2800:160:1248::/42": "14259", - "2801:80:3e40::/48": "271396", - "2a01:5041:2efd::/46": "202196", - "2a10:d900::/32": "34953", - "2a01:208::/32": "49752", - "2a02:26f0:501::/46": "20940", - "2a03:8480::/32": "47394", - "2a06:3040::/29": "203020", - "2806:1010:cbff:100::/37": "8151", - "2001:510:207::/44": "376", - "2001:559:8233::/48": "7015", - "2001:1248:8707::/43": "11172", - "2400:bc80::/47": "38726", - "240a:a242::/32": "143228", - "240a:ab74::/32": "145582", - "2804:b4::/32": "28294", - "2a02:26f7:b648::/48": "36183", - "2a02:26f7:f409::/46": "20940", - "2402:800:5d2b::/41": "7552", - "2403:5800:6000::/35": "4764", - "2606:2800:500c::/48": "14153", - "2a00:f720::/32": "24824", - "2a0d:1580::/48": "202085", - "2a0f:607:1200::/44": "212534", - "2001:67c:25cc::/48": "56511", - "2620:11f:700a::/48": "399333", - "2a00:ad04::/30": "41897", - "2400:dc00:ea::/48": "23947", - "2403:bd00::/32": "58590", - "2408:8456::/42": "17622", - "240e:3b8:7a00::/32": "140313", - "2803:6440::/32": "263755", - "2804:40a0:f200::/39": "265971", - "2a07:cb84::/32": "28878", - "2607:e300::/32": "40948", - "2a01:4740::/32": "203020", - "2a0b:b2c0:2::/48": "8892", - "2c0f:f778::/32": "37009", - "2001:df3:c180::/48": "140671", - "2402:3a80:19e0::/43": "38266", - "2600:2c01:3000::/33": "16858", - "2620:104:f000::/44": "33517", - "2a02:2e02:a60::/40": "12479", - "2001:559:406::/48": "7725", - "2001:559:84de::/48": "33657", - "2403:dd00::/32": "58599", - "240e:44d:7900::/41": "140345", - "2602:fcf7::/36": "398942", - "2a0f:ca00::/33": "43309", - "2804:f50::/32": "263579", - "2a10:d580::/29": "51809", - "2a02:26f7:d344::/48": "36183", - "2001:559:818f::/48": "13367", - "240a:a094::/32": "142798", - "240a:ae52::/32": "146316", - "240a:afdd::/32": "146711", - "240e:965:9400::/38": "133776", - "2a00:4fc0::/32": "39931", - "2a02:26f7:d109::/42": "20940", - "2a0d:9b80::/47": "43519", - "2001:559:c2cf::/48": "33652", - "2401:2700::/47": "9286", - "2604:c180::/32": "32882", - "2804:28a0::/32": "263971", - "2804:72d0::/32": "270877", - "2404:f080:2000::/32": "131392", - "2409:8a4c:ce00::/31": "9808", - "2602:807:6006::/40": "53978", - "2602:ffb8::/36": "14469", - "2620:119:4076::/36": "7726", - "2a01:7b60::/32": "48223", - "2a07:5440::/29": "24875", - "2607:fc58:1:6::/64": "13536", - "2402:e380:33c::/48": "7489", - "2404:bf40:a480::/48": "7545", - "2605:a240::/32": "21769", - "2804:214:8640::/43": "26615", - "2a0d:5300::/38": "135391", - "2804:6b14::/32": "270376", - "2001:67c:24b8::/48": "212725", - "2001:67c:2d00::/48": "205597", - "2001:df7:a800::/48": "18267", - "2001:1250:ffe0::/43": "22894", - "240a:ad4c::/32": "146054", - "2600:1901:c0a0::/41": "396982", - "2604:8200:dbdb::/48": "31793", - "2001:579:104::/43": "22773", - "240a:aec4::/32": "146430", - "2600:1409:b000::/48": "35994", - "2a07:22c1:31::/48": "212405", - "2001:550:908::/47": "174", - "2409:8074:1900::/34": "9808", - "2c0f:eb50:1::/46": "328580", - "2401:ff80:158b::/45": "133954", - "2605:f880::/32": "32281", - "2602:ffc5:105::/48": "398395", - "2604:ca00:f::/48": "36492", - "2620:125:4000::/44": "394812", - "2620:137:5000::/42": "10851", - "2801:1c0::/39": "52424", - "2a00:1d23::/32": "206570", - "2001:559:8708::/48": "7922", - "2806:20d:5035::/46": "32098", - "2a05:8380::/29": "43645", - "2001:638:30d::/48": "8519", - "2402:8e00:3::/32": "38529", - "240a:a4d2::/32": "143884", - "240a:a7b3::/32": "144621", - "2804:214:86d1::/42": "26615", - "2a01:b740:2::/43": "714", - "2a02:26f7:c145::/46": "20940", - "2001:559:5b::/48": "33659", - "2001:579:e041::/40": "22773", - "2804:24c4:2000::/36": "264241", - "2a00:7380:feee::/39": "51906", - "2001:559:27a::/48": "7015", - "2804:23b0:bc00::/33": "262645", - "2a00:7460::/32": "24833", - "2a02:c70::/32": "47841", - "2a04:e4c0:47::/44": "36692", - "2a0b:8c80::/29": "206420", - "2408:8459:3810::/44": "17623", - "2409:8e01::/28": "9808", - "2801:80:19d0::/48": "265375", - "2001:978:8701::/36": "174", - "2001:1248:99ff::/38": "11172", - "2600:140b:7800::/48": "24319", - "2600:6c3a:831::/41": "20115", - "2804:3df8:8000::/33": "266566", - "2001:559:36d::/48": "7922", - "2402:800:9501::/44": "7552", - "2404:880:26::/48": "38750", - "240a:ab3b::/32": "145525", - "2620:51:c000::/48": "25861", - "2a01:110f:5100::/21": "5617", - "2401:c680:1400::/34": "133854", - "2408:84f3:3060::/40": "17623", - "2801:80:3840::/48": "269675", - "2804:462c::/32": "266973", - "2a02:a30:173::/32": "8926", - "2001:253:119::/48": "142085", - "2404:7180:f000::/48": "23848", - "2404:a640::/39": "133827", - "2409:8948:8f00::/40": "24445", - "2620:104:c000::/44": "13462", - "2a07:b0c0::/29": "202617", - "2804:2870:1::/46": "52863", - "2a00:5c60::/47": "43329", - "2a03:2881:d::/46": "32934", - "2001:43f8:920::/48": "3741", - "2800:160:1357::/42": "14259", - "2a07:de80::/29": "35779", - "2a0d:8d06:1::/36": "60557", - "2a0e:e2c0::/32": "42282", - "2408:8456:8a00::/42": "17622", - "2408:8956:9a00::/40": "17622", - "2804:e94:b2::/41": "262468", - "2a00:fb8:8000::/29": "8881", - "2401:a6c0:3::/45": "136178", - "2001:dce:5101::/40": "23869", - "2001:fb0:109f:8006::/64": "7470", - "2607:6000:900::/40": "12189", - "2806:264:4501::/48": "13999", - "2a0c:b641:266::/44": "59598", - "2a11:7400:d1::/48": "50518", - "2001:1228::/32": "18592", - "2607:f740:e010::/48": "63911", - "2a0f:600:607::/44": "51044", - "2804:3a4c::/32": "266082", - "2804:7880::/33": "271247", - "2a02:26f7:ca48::/48": "36183", - "2001:418:1401:8::/64": "2914", - "2001:67c:1441::/48": "45018", - "2404:4a00:1::/64": "55423", - "240e:97f:5000::/32": "4134", - "2804:3098::/32": "264963", - "2001:678:4cc::/48": "199086", - "2406:840:5000::/47": "139317", - "2607:f740:e623::/45": "63911", - "2a05:be80::/29": "12637", - "2407:3dc0::/32": "140583", - "240e:44d:a00::/41": "140345", - "2604:86c0:f300::/40": "63023", - "2001:559:1d6::/48": "33491", - "2001:648:2810::/48": "12364", - "2001:4c28:1::/48": "39832", - "2a05:c741::/32": "1299", - "2a0b:9bc0:1::/46": "9074", - "2a0e:2340::/29": "57756", - "2402:800:997f::/40": "7552", - "240a:abb5::/32": "145647", - "2600:1406:4c01::/38": "20940", - "2605:6440:8000::/47": "396356", - "2610:a1:3064::/48": "12008", - "2803:c80::/32": "263192", - "2804:2ebc:200a::/32": "265363", - "2001:559:87df::/48": "7725", - "2406:6200:2000::/36": "23756", - "2600:6c38:70f::/43": "20115", - "2801:1fc:2::/48": "27951", - "2a02:7d00::/32": "52130", - "240a:a3bd::/32": "143607", - "2806:108e:24::/48": "8151", - "2400:6280:126::/48": "132280", - "2403:300:720::/36": "714", - "240a:a27a::/32": "143284", - "2605:4540::/32": "26863", - "2804:7040::/32": "270715", - "2a0d:ca46::/32": "8423", - "2402:1::/36": "10197", - "240e:979:8600::/35": "4134", - "2602:ff7a:f00::/48": "208830", - "2800:bf0:8120::/47": "52257", - "2803:5ce0:a00::/40": "10753", - "2a01:7b00::/32": "41589", - "2a02:c540::/29": "12874", - "2001:4408:4900::/37": "4758", - "2401:f540:1::/46": "134094", - "2a01:b740:a1b::/48": "714", - "2001:df4:6080::/48": "140967", - "2401:85c0::/32": "131605", - "2600:141b:801::/37": "20940", - "2804:1784:130::/32": "263152", - "2405:201:800::/35": "55836", - "2600:1012:b074::/44": "22394", - "2620:171:9f::/48": "42", - "2a00:dd80:9::/48": "36236", - "2a0d:ac0::/29": "42689", - "2402:3a80:1708::/47": "38266", - "240a:ae57::/32": "146321", - "2a03:7c00::/32": "199087", - "2605:de40::/35": "397553", - "2620:119:53::/48": "36692", - "2804:744:b0b2::/33": "262632", - "2804:37cc::/32": "266436", - "2a05:3180::/32": "34580", - "2001:678:328::/48": "206567", - "2001:67c:21fc::/48": "43922", - "2404:8640::/32": "17675", - "2620:31:2007::/48": "53722", - "2801:80:3400::/48": "268743", - "2804:72b4::/32": "270870", - "2a0e:b107:13d6::/48": "211168", - "2402:f080:a::/45": "38150", - "2804:214:8300::/37": "26615", - "2a03:2d40::/38": "198056", - "2001:67c:2904::/48": "212125", - "2804:88::/47": "28135", - "2600:1413:c001::/35": "20940", - "2a0a:db40::/29": "200601", - "2a01:8c81::/32": "205151", - "2a01:a0c0::/32": "47179", - "2a03:69e0::/32": "51784", - "2a0c:bfc0::/29": "61998", - "2605:9d80:8081::/48": "4134", - "2800:381:aaab::/35": "10834", - "2804:6e84::/32": "270602", - "2a03:1b20:ffff::/48": "208073", - "2001:678:b04::/48": "208242", - "2001:4878:2242::/48": "12222", - "2605:3380:4c00::/40": "12025", - "2620:ce:8000::/48": "14738", - "2a02:d0c2:1::/48": "59793", - "2a06:9800::/29": "6908", - "2408:8256:3769::/48": "17816", - "2a00:1a30::/32": "25369", - "2405:7f00:a900::/38": "133414", - "2408:8956:8300::/40": "17816", - "240a:a3ce::/32": "143624", - "2606:9b80::/32": "394487", - "2a00:a040::/38": "12849", - "2001:579:5181::/38": "22773", - "2800:160:19da::/45": "14259", - "2804:22cc::/37": "264123", - "2a10:7040::/29": "212602", - "2001:559:81b6::/48": "33287", - "2408:8957:a800::/40": "17622", - "2602:fcff:11::/48": "213216", - "2604:880:39::/48": "54540", - "2804:14d:7285::/42": "28573", - "2a04:3d80::/29": "50628", - "2a0e:b107:9dc::/48": "141237", - "2405:f140::/32": "138754", - "2610:b0:40c0::/44": "3573", - "2a0d:d680::/29": "57588", - "240a:a682::/32": "144316", - "2402:9e00:403::/32": "24183", - "2600:8807:1fa2::/34": "22773", - "240e:44d:e00::/41": "140345", - "2a0e:46c4:4000::/36": "38230", - "2a09:4c0:402::/39": "58057", - "240a:a1ab::/32": "143077", - "240e:947:3000::/33": "139887", - "2607:c200:1106::/48": "6461", - "2620:17b:4::/48": "174", - "2800:5f0:809::/45": "22724", - "2801:1e:3000::/48": "267893", - "2804:6924::/32": "270251", - "2c0f:f570::/32": "327980", - "240a:a14a::/32": "142980", - "2604:8b80:a::/48": "55106", - "2606:54c0::/32": "13335", - "2a06:e881:6706::/44": "208751", - "2001:67c:1494::/48": "61431", - "2001:dde::/48": "24082", - "2001:b011:9400::/34": "3462", - "240e:4c:7800::/31": "4134", - "2607:f928:5::/48": "14085", - "2607:fb10:7039::/41": "2906", - "2a02:26f7:fbc0::/48": "36183", - "2001:4408:5b00::/45": "55824", - "2600:5c01:3044::/48": "11351", - "2804:5ee8:b000::/33": "269064", - "2a02:26f7:f1c8::/48": "36183", - "2a05:7440:c14b::/48": "200165", - "2405:f600:1d::/46": "45117", - "2406:eac0::/32": "135055", - "2800:160:1ebd::/41": "14259", - "2804:5b8::/32": "262535", - "2804:33ec::/32": "265425", - "2a06:ee05::/32": "25623", - "2001:559:c2df::/48": "33491", - "240a:ab49::/32": "145539", - "2607:fee0::/34": "3599", - "2804:5a30:c000::/36": "268754", - "2a02:27b8:2000::/48": "49278", - "2c0f:fab0:1000::/48": "37492", - "2400:a980:2d00::/38": "133111", - "2409:8a51:b00::/37": "56047", - "2604:50c0::/32": "20150", - "240a:a908::/32": "144962", - "2602:ffa4::/36": "46886", - "2620:0:22b0::/48": "20144", - "2001:559:531::/48": "33652", - "240a:a65c::/32": "144278", - "240e:946::/47": "58540", - "2602:fcd3:10::/44": "212934", - "2806:20d:3218::/42": "32098", - "2001:df2:f000::/48": "55319", - "2401:d800:f260::/40": "7552", - "2406:ef40:5::/46": "133811", - "2600:1405:7001::/37": "20940", - "2620:131:3008::/46": "58419", - "2802:8000::/31": "22927", - "2804:7c40::/32": "271484", - "2806:230:2034::/48": "265594", - "2a00:1d78::/32": "44050", - "2a02:26f7:14::/48": "36183", - "2a02:26f7:bc49::/42": "20940", - "2001:428:6402:221::/36": "209", - "2804:81cc::/32": "272477", - "2001:b08:20::/48": "198444", - "240a:acfc::/32": "145974", - "2a01:358:4020::/45": "9121", - "2001:df7:5080::/48": "137655", - "2406:3000:2b::/45": "4657", - "240e:438:6020::/43": "140647", - "2800:800:400::/39": "26611", - "2804:1994::/32": "262905", - "2a0a:5000::/29": "57814", - "240a:a3f9::/32": "143667", - "2803:5c80:5595::/48": "64114", - "2804:6eec::/32": "270627", - "2a02:26f7:dd00::/48": "36183", - "2a0f:ca80::/47": "208046", - "2001:559:c1e5::/48": "13367", - "2401:ff80:1113::/40": "133954", - "240e:929::/32": "17638", - "2600:8804:2400::/35": "22773", - "2610:f0::/38": "22925", - "2a00:8880::/32": "15557", - "2404:e100:3001::/48": "133840", - "240a:a515::/32": "143951", - "240e:983:800::/38": "4134", - "2a01:8840:1d::/48": "207266", - "2408:80ea:6700::/41": "17816", - "2001:67c:40::/48": "35733", - "2001:87f::/32": "198455", - "2401:d800:fd90::/42": "7552", - "240e:1c:b000::/36": "136190", - "2a00:1c70::/32": "28890", - "2405:b900:1::/44": "55701", - "2620:11e:900a::/48": "12196", - "2a05:4700:b::/48": "43578", - "2804:456c::/32": "266925", - "2a00:5540:5014::/48": "198362", - "2a02:8f0::/32": "29003", - "2001:43f8:1180::/48": "37394", - "240a:ad4d::/32": "146055", - "2606:2800:1::/48": "15133", - "2804:6f0:900::/32": "53047", - "2001:1568::/32": "39790", - "2001:1a11:83::/48": "8781", - "2001:4878:c031::/48": "12222", - "240e:983:204::/37": "4134", - "2804:2cfc::/32": "265255", - "2a00:1fa2:80c1::/34": "28884", - "2a06:5240:f0::/44": "204253", - "2401:d800:2e80::/42": "7552", - "2402:800:39c5::/43": "7552", - "2402:ca40::/32": "137707", - "2600:1015:9110::/34": "6167", - "2602:fe62::/36": "394356", - "2803:720::/32": "52317", - "2806:322::/37": "28546", - "2001:4830:c150::/44": "22147", - "240e:3b4:ec00::/35": "140314", - "2804:4224:9000::/33": "267480", - "2804:79d0::/32": "271329", - "2a0e:b107:800::/44": "213383", - "2a10:3ec0:32::/48": "198417", - "2404:e801:1021::/34": "55430", - "2600:9000:1083::/45": "16509", - "2001:1900:23cd::/48": "202818", - "2409:8087:6300::/36": "9808", - "2801:16:6800::/48": "3549", - "2a0e:1c80:e::/48": "1299", - "2001:67c:560::/48": "8949", - "240a:a7e6::/32": "144672", - "2800:160:1055::/44": "14259", - "2001:559:8143::/48": "7015", - "2001:559:8195::/48": "7015", - "240a:a91c::/32": "144982", - "2804:e94::/48": "262468", - "2001:559:812d::/46": "7922", - "2401:1d40:2000::/48": "4811", - "2804:5124::/32": "268433", - "240a:a72e::/32": "144488", - "2602:fe19:4017::/34": "26073", - "2407:b4c0:12::/48": "142366", - "2606:7a80::/28": "10958", - "2a0a:fa80::/29": "5582", - "2001:df0:1e:4000::/64": "45796", - "240a:ac61::/32": "145819", - "2804:42ac::/32": "267518", - "2001:fd8:3046::/39": "4775", - "2400:eac0::/32": "5580", - "2405:1c0:6671::/46": "135062", - "2406:7400:f1::/45": "24309", - "2407:4800:8000::/34": "45193", - "2409:8070:3100::/30": "9808", - "2600:140f:1200::/48": "9498", - "2a01:8840:b1::/48": "207266", - "2a02:26f7:ea80::/48": "36183", - "2a0d:c340::/29": "206123", - "2001:df3:5580::/48": "14618", - "240a:a333::/32": "143469", - "2a01:d0:318::/33": "29632", - "2a01:7f20::/48": "43385", - "2a02:26f7:eec9::/42": "20940", - "2001:559:81f8::/48": "7015", - "2408:84e9::/32": "4837", - "240a:a236::/32": "143216", - "2600:370f:3523::/45": "32261", - "2a0e:8f02:2170::/46": "211168", - "2600:2000:f010::/48": "33517", - "2804:20fc:1b01::/37": "264525", - "2a03:5640:f501::/42": "2906", - "2407:a600:6000::/36": "18004", - "240a:ac70::/32": "145834", - "2800:160:2b9d::/42": "14259", - "2a02:2698:8800::/38": "51035", - "2a09:9fc0::/29": "209318", - "2a10:2f01:310::/44": "39526", - "240a:ad86::/32": "146112", - "2806:230:6003::/48": "11888", - "2a02:5f81::/32": "8359", - "2806:2f0:2040::/48": "17072", - "2001:559:a2::/48": "33657", - "2401:4900:5230::/41": "45609", - "2404:2000:3000::/40": "132003", - "240a:a478::/32": "143794", - "240e:981:e200::/35": "4134", - "2600:6c38:844::/44": "20115", - "2800:160:1ec2::/43": "14259", - "2408:8459:c830::/41": "17622", - "2605:a404:a03::/42": "33363", - "2607:a400::/45": "21859", - "2001:df1:9780::/48": "56150", - "2804:14c:5700::/40": "28573", - "2a03:6f20::/32": "201146", - "2a0d:4bc0::/29": "3214", - "2001:550:9f00:1::/46": "174", - "2001:678:344::/48": "47939", - "2406:3003:1000::/43": "55430", - "2600:380:f1e2::/47": "64011", - "2804:431c:300::/32": "267549", - "2a03:1980:d113::/48": "61029", - "2a0c:93c0:c002::/48": "212465", - "2a0a:e5c0:26::/44": "207996", - "2001:480:240::/48": "687", - "2001:44b8:25::/48": "4739", - "240a:a163::/32": "143005", - "240e:983:1e00::/48": "58466", - "2605:3380:4136::/47": "12025", - "2605:a401:80ed::/39": "33363", - "2804:2a5c:c000::/34": "264071", - "2401:d800:f530::/41": "7552", - "2403:8940:300::/37": "135817", - "2804:6b10::/32": "270375", - "2a02:26f7:ea04::/48": "36183", - "2605:b740:c0::/42": "2773", - "2001:559:c24b::/48": "7922", - "2001:67c:1124::/48": "60973", - "2001:4200:c10::/33": "2018", - "2401:5a40::/32": "136759", - "2801:b6:1000::/32": "263083", - "2804:f14:c100::/34": "262865", - "2a02:26f7:c780::/48": "36183", - "2001:19e8:8001::/48": "4046", - "240e:3b5:9c00::/34": "140310", - "2600:9000:a100::/48": "16509", - "2606:d200::/32": "7018", - "2804:17e8::/32": "28245", - "2a02:26f7:c5c4::/47": "36183", - "2a0f:6440::/29": "200899", - "2a0c:2b40::/29": "213053", - "2403:6b00:2000::/48": "58562", - "2600:1001:f110::/30": "22394", - "2604:4d40:7378::/48": "399196", - "2620:4d:400e::/48": "395403", - "2a01:280:108::/48": "199150", - "2a04:7300::/29": "200008", - "2a0a:4180::/48": "57724", - "2001:3c8:1012::/48": "24475", - "2401:d800:2600::/42": "7552", - "240a:a354::/32": "143502", - "2001:559:c17f::/48": "33651", - "2620:80:8000::/48": "16796", - "2620:10f:7000::/47": "54765", - "2604:f400:12::/48": "18923", - "2804:978::/32": "263087", - "2804:4218:2100::/35": "267477", - "2a0c:be00::/32": "209846", - "2405:205:6000::/32": "55836", - "2600:370f:36a5::/41": "32261", - "2804:19c8:3100::/32": "61818", - "2804:79b4::/32": "271322", - "2a02:26f7:d800::/48": "36183", - "240a:a40e::/32": "143688", - "240a:a423::/32": "143709", - "2600:1419:8401::/36": "20940", - "2a02:26f7:bbc1::/45": "20940", - "2001:4d78:fe19::/48": "15830", - "2a0d:1a45:babe::/48": "210089", - "2804:bd4::/32": "52836", - "2804:4560::/32": "266922", - "2a05:f8c0::/29": "49940", - "2400:6700::/32": "16509", - "2801:0:4c0::/48": "266736", - "2400:cb00:63::/44": "13335", - "2401:4900:4fb0::/41": "45609", - "2401:d800:dba0::/41": "7552", - "2409:8a51:d00::/38": "56047", - "2804:6ae0::/32": "270363", - "2804:7114::/39": "270765", - "2c0f:ea18::/32": "328519", - "2001:580::/32": "1798", - "2001:668:1fc::/46": "16260", - "2001:4408:4500::/45": "4758", - "2408:8426::/31": "4837", - "2600:2a05::/28": "396319", - "2620:11d:9002:600::/56": "14805", - "2a10:4e40::/48": "209286", - "2405:1480:2000::/48": "23724", - "2600:14c0:5::/48": "20940", - "2001:1388:8a83::/35": "6147", - "2800:68:17::/44": "61468", - "2804:5440::/32": "268637", - "2a0e:b107:1080::/44": "213377", - "2600:1488:c241::/26": "20940", - "2a00:5560::/32": "205411", - "2a00:5dc0::/29": "31313", - "2a01:b747::/37": "714", - "2605:3dc0::/48": "397952", - "2804:2070::/32": "28661", - "2401:d800:c30::/41": "7552", - "2600:141a:8001::/31": "20940", - "240a:a0dc::/32": "142870", - "2a0e:5800::/29": "212660", - "2401:a400::/38": "7477", - "2408:8456:4810::/42": "134543", - "2604:e7c0:1::/48": "14821", - "2001:978:6713::/45": "174", - "2600:100a:9100::/44": "6167", - "2607:fc00::/32": "13576", - "2c0f:fc90:1002::/32": "16284", - "240a:a94b::/32": "145029", - "2600:80c:1200::/40": "23148", - "2800:484:2800::/37": "14080", - "2804:3b34:7001::/40": "266135", - "2a00:c38::/32": "15576", - "2001:67c:2d04::/48": "198463", - "2001:67c:2ff4::/48": "47699", - "2001:44c8:a000::/36": "38444", - "2600:1408:f800::/48": "35994", - "2a0e:8680::/48": "208832", - "2409:8a00::/31": "56048", - "2404:8000:b3::/41": "17451", - "2604:f980:4240::/44": "19957", - "2804:371c:8000::/48": "266390", - "2a02:2340::/32": "51319", - "2a03:2881:4005::/32": "32934", - "2600:1417:53::/48": "9498", - "2600:1417:58:100::/56": "4788", - "2804:11dc:5000::/32": "263444", - "2804:182c::/32": "52845", - "2a0c:ef40::/29": "49223", - "2001:67c:2bb4::/48": "207537", - "2406:1600::/38": "23871", - "2408:8957:5400::/40": "17622", - "240e:108:11d5::/48": "134769", - "2803:e600:facf::/37": "18809", - "2a04:bc40:1dc7::/48": "35277", - "2a09:be40:1132::/48": "207343", - "2804:15d4:8000::/33": "263413", - "2001:559:23b::/48": "33491", - "2001:559:826c::/48": "7015", - "2400:cb00:a470::/45": "13335", - "2407:54c0::/32": "142065", - "240a:ae19::/32": "146259", - "2604:d600:c80::/47": "32098", - "2800:160:1cfc::/46": "14259", - "2a04:1ac1:1::/46": "211960", - "2a0e:b105:57c::/40": "20473", - "2403:4e80::/32": "131270", - "2605:3380:42fd::/48": "12025", - "2a02:26f7:e700::/48": "36183", - "2a02:db40::/48": "48749", - "2407:1e40:6::/38": "141732", - "2804:6ac4:3000::/32": "16921", - "2a0e:b107:147c::/48": "142164", - "2a05:3c80::/29": "47447", - "2001:67c:192c::/48": "24961", - "240a:a25c::/32": "143254", - "240e:e9:8000::/37": "137702", - "2602:fec3::/38": "62563", - "2607:fc48:420::/48": "40009", - "2804:296c::/32": "264014", - "2804:583c::/32": "268115", - "2a05:8080::/29": "58173", - "2001:8b0:1629::/33": "20712", - "2401:d800:d870::/40": "7552", - "2405:f200::/32": "55406", - "2607:a780:1::/48": "395518", - "2404:e00:60::/46": "15695", - "2607:fdc0:100::/32": "20326", - "2a01:1ee::/32": "33843", - "2001:288::/32": "1659", - "2606:2800:506b::/48": "14153", - "2a02:26f7:dbc0::/48": "36183", - "2408:8957:1dc0::/38": "17622", - "2806:2f0:1104::/42": "22884", - "2001:559:58d::/48": "7016", - "240a:a315::/32": "143439", - "240e:67b:e400::/39": "140330", - "2605:7b40::/32": "53384", - "2803:2d60::/35": "14754", - "2804:2c24::/32": "265198", - "2a05:b40::/29": "57043", - "2402:7800::/34": "4826", - "240a:a55d::/32": "144023", - "240a:aafe::/32": "145464", - "240a:ad55::/32": "146063", - "240e:473:5d50::/40": "4134", - "2600:d800::/31": "13804", - "2a02:26f0:9301::/37": "20940", - "2001:4998:130::/44": "10880", - "2804:5c8::/32": "262541", - "2a02:26f7:f2c1::/46": "20940", - "2a02:26f7:f704::/48": "36183", - "2a02:26f7:fa48::/48": "36183", - "2001:978:201::/62": "174", - "2a03:5760::/46": "201900", - "2a06:1280::/32": "61138", - "2a0b:c080::/29": "197659", - "240a:a2a8::/32": "143330", - "2804:40cc::/32": "265982", - "2a00:ea40::/32": "2589", - "240a:a3c7::/32": "143617", - "240e:438:ae40::/35": "4134", - "2600:6c3a:c::/43": "20115", - "2602:fe6b::/36": "46475", - "2401:ff80:1781::/45": "133954", - "2800:160:1063::/43": "14259", - "2001:559:8387::/48": "7922", - "2405:9000:80::/48": "17719", - "240e:438:40::/38": "4134", - "2610:a1:1074::/48": "397218", - "2404:8240::/32": "56067", - "240a:a7fb::/32": "144693", - "2602:feb4:80::/44": "25961", - "2804:59d8:b182::/33": "268729", - "2806:230:2053::/48": "11888", - "2a0c:ed80::/29": "34191", - "2a0e:7d02::/31": "211335", - "240a:a5a1::/32": "144091", - "240a:a5ce::/32": "144136", - "2800:160:11cd::/46": "14259", - "2001:559:8163::/48": "7015", - "2804:2214:e::/32": "28177", - "2401:ee00:2011::/32": "23951", - "240a:ac03::/32": "145725", - "2804:5634::/32": "267983", - "2806:2f0:80a0::/41": "17072", - "2a0e:b107:14d0::/48": "38308", - "2604:9440::/32": "53407", - "2408:8459:8c10::/42": "17623", - "2604:1900::/40": "12182", - "2a0e:9dc0::/29": "34919", - "2c0e:4000:a000::/36": "36994", - "2401:7b40:4001::/46": "38071", - "2804:28e4:e817::/42": "28260", - "2a03:31c0::/37": "43256", - "2a02:26f7:fa80::/48": "36183", - "2409:8062:3003::/40": "9808", - "2600:5c01:1fff::/34": "10796", - "2620:129:9002::/48": "64262", - "2800:484:9a00::/34": "10620", - "2803:7000::/33": "52362", - "2804:49a4:c008::/34": "267194", - "2a00:11d8::/32": "39598", - "2001:559:c094::/48": "33651", - "2001:4998:140::/44": "7280", - "2804:214:8658::/40": "26615", - "2804:e10::/32": "52540", - "2804:5d80::/33": "268976", - "2806:33e::/32": "265573", - "2a03:ad00::/29": "8208", - "2001:4998:61::/46": "10310", - "2401:d800:bc20::/41": "7552", - "2600:1806:311::/48": "16552", - "2408:894c::/32": "4837", - "2409:8835::/24": "9808", - "240e:978:d00::/40": "134756", - "2804:214::/47": "26615", - "2a03:ad40:120::/48": "199349", - "2a02:26f7:dcc1::/46": "20940", - "2001:559:532::/48": "7015", - "2001:67c:2e0::/48": "43758", - "2401:1c00:4100::/35": "38809", - "240e:473:ad20::/41": "140486", - "240e:a67:1a00::/34": "140330", - "2600:800::/30": "701", - "2607:f330:5000::/48": "15130", - "2a0e:4007:fffe::/48": "208226", - "2001:559:3af::/48": "33491", - "2001:559:c320::/48": "33657", - "2001:df0:401::/48": "9357", - "240a:a9e6::/32": "145184", - "2620:60:e000::/48": "19014", - "2620:10f:400e::/48": "30037", - "2a04:71c3::/29": "206583", - "2a0e:f200::/29": "60781", - "2406:2400:cdef::/48": "45287", - "2a02:a200::/27": "33915", - "2001:559:80dd::/48": "7015", - "2001:4830:2070::/48": "25623", - "2401:d800:fcd0::/42": "7552", - "2402:800:310f::/43": "7552", - "240a:aaac::/32": "145382", - "2a02:26f7:f1c1::/46": "20940", - "2402:800:9601::/44": "7552", - "2605:4180::/28": "35985", - "2606:5000:2a00::/37": "3908", - "2a01:9860::/32": "205952", - "2001:4d20:8000::/33": "39290", - "240a:a5d6::/32": "144144", - "2600:1004:b000::/40": "6167", - "2a0e:fd45:dd0::/30": "44103", - "2401:14c0:22::/44": "136531", - "2402:800:5a7f::/40": "7552", - "2804:6690::/35": "269568", - "2001:559:c39c::/48": "7015", - "2001:579:5084::/41": "22773", - "2001:1248:9a0b::/45": "11172", - "2408:8957:2ac0::/39": "17816", - "2606:d101::/36": "395563", - "2804:224::/32": "262792", - "2804:4c2c::/32": "267354", - "2a02:ee80:4248::/47": "21433", - "2a0c:2100::/29": "208861", - "2402:8100:21c0::/45": "45271", - "240a:a970::/32": "145066", - "2620:56:6000::/48": "46924", - "2804:14c:d000::/40": "28573", - "2a03:5780::/48": "25122", - "2a05:1087::/32": "142438", - "2600:1000:f000::/44": "6167", - "2600:180a:1002::/33": "16552", - "2a02:26f7:be48::/48": "36183", - "2a05:26c0:d2::/29": "201536", - "2001:550:302::/44": "174", - "2001:ee0:e600::/40": "45899", - "2001:16a2:3e::/39": "39386", - "2804:6824::/32": "269671", - "2407:ba80::/32": "45062", - "2602:fc6f::/36": "399568", - "2804:52e4::/32": "268548", - "2a03:90c0:10::/39": "199524", - "2a09:840::/32": "209634", - "2401:10c0::/32": "131717", - "2604:880:60::/48": "29802", - "2606:2800:4a58::/46": "15133", - "2a0c:2f06::/32": "207080", - "2a0c:b340:2::/29": "206262", - "2001:4998:eff5::/48": "36647", - "2a0e:b540::/32": "30823", - "2001:e60:d720::/43": "4766", - "2605:c140::/32": "32674", - "2607:f1f0::/32": "11666", - "2804:14d:be82::/47": "28573", - "2607:f110:47::/43": "21889", - "2620:30:4000::/48": "1226", - "2a0a:ec02:b01::/48": "42692", - "2a00:1de8::/32": "48220", - "2001:44b8:1058::/46": "4739", - "2402:cf80:1003::/45": "62597", - "2402:ef03:6001::/40": "7633", - "240e:44d:6e80::/41": "4134", - "2804:4c0::/32": "3549", - "2804:3a44::/32": "266080", - "2804:71fc::/32": "270824", - "2408:84f3:9e40::/34": "17816", - "2804:4bb4::/35": "267325", - "2001:67c:1e0::/48": "31554", - "240a:a55c::/32": "144022", - "2804:448::/47": "262427", - "2804:27a8::/32": "263915", - "2604:d600:1270::/45": "32098", - "2605:a40e:2::/45": "33363", - "240a:a382::/32": "143548", - "2607:2000::/32": "5786", - "2a0f:fb00::/29": "208178", - "2001:559:1b8::/48": "7015", - "2408:8957:3000::/40": "17622", - "2804:19e8::/32": "61826", - "2001:ec0:100::/40": "134166", - "2a02:26f7:c989::/42": "20940", - "2001:559:421::/46": "7922", - "240a:a83e::/32": "144760", - "2605:aa40:c1e4::/48": "18792", - "2804:14c:6185::/41": "28573", - "2a00:1c50:5::/46": "30811", - "2a02:26f7:b6cc::/48": "36183", - "2001:559:85d6::/48": "33661", - "2401:4900:4620::/41": "45609", - "2406:8800:9013::/45": "17465", - "240a:a74b::/32": "144517", - "240e:980:4f00::/34": "4134", - "2607:9b00::/32": "30041", - "2620:13d:d000::/44": "6461", - "2a04:bf80::/29": "198101", - "2408:8456:a410::/42": "134543", - "240a:aba3::/32": "145629", - "2606:18c0:4::/46": "399448", - "2804:6e20::/32": "270577", - "2a0b:4d07:101::/46": "44239", - "2a0d:9f00::/32": "49821", - "2001:678:cc4::/48": "42086", - "240e:982:e000::/40": "58466", - "2a02:6c20::/46": "207167", - "2a03:420::/32": "28994", - "2a0c:b641:24f::/48": "141694", - "2001:67c:16c0::/48": "5588", - "2400:c540:c753::/36": "59238", - "2405:7f00:a2a0::/37": "133414", - "240e:3b8:1200::/39": "4134", - "2804:7db4::/32": "271577", - "2a00:1a90::/33": "45014", - "2a01:6460::/32": "13193", - "2a10:1d00::/32": "16019", - "2001:67c:1028::/47": "12553", - "2401:c500:fd04::/48": "54994", - "2600:380:b280::/39": "20057", - "2602:fd26::/48": "14639", - "2607:fc58:1:64::/64": "13536", - "2804:5b34::/32": "268827", - "2a0c:cc00::/32": "205206", - "2a04:4e40:2a00::/47": "54113", - "2405:6e00:2480::/45": "18291", - "240a:a5cf::/32": "144137", - "240e:fd:f800::/43": "140315", - "2806:1080::/39": "8151", - "2a02:26f0:1201::/39": "20940", - "2a02:26f7:cf41::/46": "20940", - "2a02:66a0::/32": "60086", - "2a06:d380::/29": "57860", - "2001:67c:2cfc::/48": "2119", - "2804:e94:700::/43": "262468", - "2a03:2b20:ff::/48": "202077", - "2001:678:f98::/48": "15598", - "2800:40::/43": "16814", - "2a0a:6a00::/32": "207097", - "2409:8019::/34": "134810", - "240a:a453::/32": "143757", - "2804:14c:41c2::/43": "28573", - "2a02:26f0:c401::/40": "20940", - "2001:559:323::/48": "33652", - "2402:700::/32": "9997", - "240a:aa89::/32": "145347", - "2600:1003:b1a0::/44": "6167", - "2804:c40::/32": "262809", - "2a00:e9e0::/32": "48670", - "2408:8340::/32": "4837", - "2600:140f:4c01::/39": "20940", - "2804:5f68::/32": "269097", - "2001:559:80e8::/48": "33651", - "2001:559:83c5::/48": "33652", - "2001:df0:e4::/48": "56026", - "2a02:858::/39": "3329", - "2a09:7:2005::/48": "41767", - "2a0e:97c0:2bf::/48": "211553", - "2a04:9f00::/29": "199837", - "2001:44b8:2052::/48": "7545", - "2402:f080::/46": "38150", - "2600:140f:7000::/48": "9498", - "2600:5c01:2c0d::/39": "10796", - "2806:265:501::/48": "13999", - "2a00:1ca8:d5::/32": "50673", - "2a01:c9c0:a1::/45": "8891", - "240e:438:1c20::/43": "140647", - "2804:14c:7b00::/40": "28573", - "2804:1894::/32": "61941", - "2a02:26f7:d380::/48": "36183", - "2a04:7c0:1::/45": "61135", - "2a05:d000:e000::/40": "16509", - "2001:559:8278::/48": "33651", - "2402:800:5ce0::/39": "7552", - "2405:203:99b::/45": "55836", - "2800:160:12bb::/45": "14259", - "2804:e94:640::/43": "262468", - "2a01:7e0:1fd::/32": "44066", - "2001:cf8:6::/36": "9619", - "2400:c540:bb::/39": "59238", - "2401:d800:2050::/42": "7552", - "2408:8957:7a00::/40": "17622", - "2620:11a:a01f::/48": "36040", - "2804:1408:a001::/33": "28635", - "2001:559:570::/48": "7922", - "2804:1a8::/32": "28229", - "2a0f:ea00::/46": "60781", - "2001:df1:2980::/48": "55654", - "2001:48a8:68fe::/32": "237", - "2405:8a00:4015::/34": "55824", - "2602:ff84:1::/48": "36351", - "240e:438:9840::/38": "4134", - "2803:b9c0:4100::/38": "265705", - "2804:4ecc::/32": "268283", - "2a02:26f0:e201::/39": "20940", - "2a05:dfc7:100::/43": "200897", - "2801:19:a800::/48": "271802", - "2a02:26f7:fbc8::/48": "36183", - "2a09:9bc0:a::/48": "9009", - "240e:438:6a40::/37": "4134", - "2605:a404:50e::/42": "33363", - "2a02:b50:8002::/48": "393954", - "2001:148f:fffe::/47": "20701", - "240a:a8b6::/32": "144880", - "2605:9c40::/32": "23420", - "2400:ac40:cb0::/39": "136255", - "2605:a401:806c::/43": "33363", - "2803:2240::/32": "263777", - "2a00:74e0::/32": "60879", - "2a03:6440:1001::/46": "199055", - "2404:f4c0:f90c::/48": "139833", - "2803:9e0::/32": "264732", - "2001:678:a48::/48": "209163", - "2001:1a10:d00::/38": "8781", - "2803:b060::/36": "267815", - "2409:4073:3000::/24": "55836", - "2605:6404::/32": "53667", - "2606:6680:8::/48": "19844", - "2a0a:6280::/29": "199434", - "2a0c:8fc4::/30": "202401", - "2405:c900::/32": "4739", - "2607:fc58:2000:600::/64": "13536", - "2a02:26f7:e141::/46": "20940", - "2402:8100:38c0::/39": "45271", - "2620:131:6000::/40": "16639", - "240a:ac1c::/32": "145750", - "2001:559:c1e9::/46": "7922", - "2001:559:c3dd::/48": "33287", - "2001:44b8:1056::/47": "7545", - "2400:a980:60fc::/46": "133512", - "2402:3a80:1368::/40": "38266", - "2402:3f80:1400::/40": "133475", - "2406:9dc0:60::/44": "18250", - "2803:a9e0::/32": "270014", - "2804:45e0::/32": "263065", - "2a03:b940::/32": "206484", - "2a0e:b107:9da::/48": "213262", - "2a0e:b107:bf4::/48": "140938", - "2001:7fb:ff00::/45": "12654", - "2001:860::/29": "5410", - "2804:6918::/35": "270248", - "2001:4479:a000::/37": "7545", - "2401:a100::/46": "45194", - "2401:ff80:168d::/46": "133954", - "2602:fd16::/36": "62611", - "2001:1440:203::/48": "5401", - "2404:7e80:4000::/36": "132717", - "2409:8924:700::/36": "56046", - "2606:ae00:2044::/48": "7287", - "2804:2ab0::/32": "264090", - "2607:f518:166::/44": "46887", - "2804:1c1c:5000::/32": "61638", - "2001:559:c3ff::/48": "33489", - "2402:ef3c::/32": "7633", - "2605:a401:80c6::/43": "33363", - "2606:2800:4204::/46": "15133", - "2804:4e0c::/33": "268236", - "2a01:c9c0:af::/48": "8891", - "2a02:a300::/27": "6830", - "2001:559:27b::/48": "33491", - "2001:19f0:caba::/48": "20473", - "2408:8956:1940::/40": "17816", - "2804:104c:800::/40": "263629", - "2a02:2e02:8ab0::/41": "12479", - "2a11:b00::/29": "208959", - "2620:11b:e0a4::/47": "202818", - "2803:6604:6a00::/32": "28075", - "2a06:5040:5::/48": "4785", - "2405:d200::/32": "2907", - "240e:580::/22": "4134", - "2602:ff58::/36": "40713", - "2a0c:5700:3134::/29": "30893", - "240a:ab20::/32": "145498", - "2804:c0c::/32": "52665", - "2804:6310:1800::/33": "269336", - "2a02:f2c0::/29": "208704", - "2a0e:b107:390::/44": "211781", - "2001:7f8:107::/48": "211947", - "2402:800:3b2b::/41": "7552", - "2804:14d:4e85::/41": "28573", - "2804:1c4c:1a3::/37": "61648", - "2a00:fa40:2000::/36": "57739", - "2a02:26f7:c709::/42": "20940", - "2a05:9f40:1f::/48": "42831", - "2001:438:70::/44": "6461", - "2001:500:203::/44": "394353", - "2001:1248:9737::/44": "11172", - "240e:966:9800::/33": "4134", - "2607:fcd0:fa80:3901::/54": "8100", - "2001:18b8::/44": "29789", - "2001:4878:8037::/44": "12222", - "2606:4180::/35": "393775", - "2606:8e80:4800::/35": "32133", - "2620:128:e008::/48": "22317", - "2a02:5320:500::/40": "12189", - "2a03:2a84::/30": "47232", - "2605:1c00:ff0::/44": "16787", - "2801:80:3ab0::/41": "270410", - "2a0d:eb40::/29": "39070", - "2a10:5d00::/29": "208256", - "2c0f:ec00::/32": "328383", - "2a0d:3000::/30": "205544", - "240a:a306::/32": "143424", - "240a:ae69::/32": "146339", - "2605:1900:2::/32": "12208", - "2800:bf0:8249::/43": "27947", - "2804:1bd8:5000::/32": "28224", - "2804:6660:d400::/34": "269554", - "2a02:9d8::/32": "6672", - "2600:805:b00::/48": "397601", - "2804:1328::/32": "52724", - "240e:473:8d50::/40": "4134", - "240e:980:4e00::/40": "136195", - "2804:14d:4600::/40": "28573", - "2804:9c0::/32": "262989", - "2a02:348::/46": "35470", - "240e:946:3005::/46": "58540", - "2606:6080:2004::/46": "32489", - "2804:74c::/32": "262805", - "2606:2800:2::/48": "14153", - "2804:3b34:2002::/35": "266135", - "2a02:18::/32": "44569", - "2a02:e70:19a::/32": "33965", - "240e:964:e600::/36": "4134", - "2001:559:208::/48": "33659", - "2400:cc00::/34": "17477", - "2600:140b:3401::/36": "20940", - "2602:fcc6::/48": "394737", - "2804:5dc8::/32": "268992", - "2806:2f0:1281::/46": "17072", - "2a03:6b00:9::/46": "48832", - "2001:559:7c5::/46": "7922", - "240a:a18f::/32": "143049", - "2a02:1680::/32": "50673", - "2a02:26f7:f689::/46": "20940", - "2a0e:b107:110::/47": "209294", - "2001:559:431::/48": "7016", - "2602:fd06::/36": "22150", - "2607:6300::/32": "29804", - "2a02:26f7:eb85::/46": "20940", - "2a02:ac80:11::/42": "25145", - "2a05:f507:75::/48": "13443", - "2001:559:566::/48": "33651", - "240a:a9fc::/32": "145206", - "240e:e:a800::/37": "17633", - "2804:e0:501::/32": "28330", - "2a09:500::/32": "48131", - "2a0a:5840::/32": "206137", - "2408:840c:2000::/40": "17621", - "240e:e9:4000::/37": "137702", - "2a04:92c7:33::/45": "62240", - "2402:800:998d::/43": "7552", - "2600:1003:b0d0::/44": "6167", - "2620:10a:8017::/44": "394354", - "2800:160:1ef9::/45": "14259", - "2804:78f0::/32": "271275", - "2001:579:d144::/42": "22773", - "2401:ff80:1503::/45": "133954", - "2402:800:5d9b::/41": "7552", - "2a06:200::/29": "200770", - "2804:13b0:ec00::/48": "263546", - "2a01:77c0:6::/48": "34848", - "240e:3be:2800::/38": "4134", - "2600:6400::/28": "14371", - "2602:fd23:9::/48": "19168", - "2804:6db0::/32": "270549", - "2804:77d0::/32": "271201", - "2408:873d:1000::/36": "140717", - "240a:a041::/32": "142715", - "240e:904::/30": "23724", - "2600:1404:f401::/36": "20940", - "2001:559:7ac::/48": "7922", - "2001:df5:d200::/48": "46050", - "2a0a:d980::/31": "213113", - "2a02:f3c0::/29": "49633", - "2001:67c:2aac::/48": "57508", - "2001:4878:37::/44": "12222", - "2403:cfc0:1006::/48": "395092", - "240a:a56b::/32": "144037", - "240a:a968::/32": "145058", - "2605:1980::/47": "13951", - "2620:129:b000::/47": "394575", - "2001:c20:484a::/43": "3758", - "2604:2d80:be80::/33": "30036", - "2a02:cb80:4100::/43": "43766", - "2a03:6740::/32": "20910", - "2a0a:5800::/29": "200428", - "2a0a:e5c2::/32": "209898", - "2001:468:c0f::/41": "10886", - "2404:c400:402::/47": "9328", - "240a:a5a8::/32": "144098", - "2804:275c::/32": "263896", - "2a02:26f7:d105::/46": "20940", - "2a09:4a40::/29": "62240", - "2a0d:d00::/29": "212865", - "2a06:9d40::/29": "31543", - "2400:4840::/48": "395363", - "2404:5dc0::/32": "136652", - "240a:ad83::/32": "146109", - "2606:2800:3::/48": "15133", - "2a01:190:15ea::/47": "1764", - "2001:559:8197::/48": "33656", - "2401:d800:fdf0::/38": "7552", - "240a:a92b::/32": "144997", - "2804:2ef8::/32": "52692", - "2a02:e980:25::/48": "62571", - "2402:800:350f::/43": "7552", - "2a09:480::/29": "212449", - "2a11:5900::/29": "211199", - "2401:ce80:1000::/47": "396417", - "2600:6c38:c2b::/45": "20115", - "2603:c002:8e10::/35": "31898", - "2a03:2880:f144::/47": "32934", - "2a10:7140::/29": "204007", - "2403:c200:1::/46": "9790", - "240e:108:20::/48": "4134", - "2801:14:b000::/48": "52318", - "2804:694c::/34": "270261", - "2a02:26f7:bdc8::/48": "36183", - "2a09:ac80::/29": "209723", - "2a0f:3ec0::/29": "41332", - "2401:ff40:e050::/35": "137080", - "2620:c3:c000::/44": "46416", - "2804:297c:c3c0::/42": "262907", - "2a00:a0a0::/46": "203144", - "2a02:26f7:c390::/48": "36183", - "240e:44d:6000::/41": "140345", - "2401:48c0::/32": "136119", - "240a:a6af::/32": "144361", - "2806:230:100d::/48": "11888", - "2804:54::/35": "28220", - "2804:58b4::/32": "268145", - "2a06:6541:1201::/48": "8220", - "2001:559:289::/48": "7016", - "240a:a536::/32": "143984", - "2605:ff40::/32": "13837", - "2804:930::/32": "263057", - "2a01:4a0:31::/44": "201011", - "2a01:7e0:aa00::/40": "31400", - "2404:cb00::/32": "17937", - "2408:8957:78c0::/39": "17816", - "240e:438:3640::/36": "4134", - "2a05:2240::/32": "59835", - "2001:559:83c4::/48": "33660", - "2001:1af0::/32": "13046", - "2600:1409:c000::/48": "35994", - "2607:ea00::/32": "57", - "2620:171:11::/46": "715", - "2a00:cbe0:100::/38": "60297", - "2804:3e60:110::/41": "266592", - "2804:7094::/33": "270735", - "2001:559:442::/48": "22258", - "2605:f440:cafe::/48": "209864", - "2804:2bd4::/32": "265178", - "2001:67c:1928::/48": "12843", - "2401:d1c0:8000::/33": "136994", - "240a:a8a2::/32": "144860", - "2800:68:2c::/43": "61468", - "2804:1eac::/32": "264443", - "2001:b000:59c::/48": "131660", - "2401:d800:9b30::/41": "7552", - "2408:840c:b600::/40": "17621", - "240a:a673::/32": "144301", - "2604:d600:1712::/36": "32098", - "2804:4f34:8030::/41": "268311", - "2a01:8640::/48": "59711", - "2408:8256:3493::/44": "17623", - "2605:a401:8241::/40": "33363", - "2a02:26f7:c8d1::/45": "20940", - "2404:a600::/32": "23816", - "240a:af2d::/32": "146535", - "2600:1488:6421::/40": "20940", - "2620:136:3000::/40": "18874", - "2804:4844::/32": "267108", - "240e:5f:600e::/48": "140314", - "2a05:3600::/29": "201290", - "2408:8459:6c10::/42": "17623", - "2607:f9f1:3::/32": "22205", - "2800:160:17a0::/45": "14259", - "2001:5e0:23::/48": "395394", - "2600:1480:7001::/37": "20940", - "2607:f740:e050::/48": "398748", - "2804:3b80::/32": "266153", - "2a04:bb40::/29": "62031", - "2a0a:b600::/29": "61317", - "2001:678:a44::/48": "208817", - "2402:800:34fe::/39": "7552", - "240a:aa58::/32": "145298", - "240a:adf1::/32": "146219", - "2a01:c50f:f140::/37": "12479", - "2a02:c600::/29": "47317", - "2001:559:c006::/48": "33660", - "2001:559:c156::/48": "33656", - "2620:1d:2000::/48": "13539", - "2804:192c::/32": "61776", - "2804:3938::/32": "266019", - "2604:6640::/32": "3131", - "2804:6534::/32": "269475", - "2001:67c:1270::/48": "20712", - "2403:6000::/42": "24085", - "2406:3003:1015::/48": "4657", - "2600:1488:b001::/33": "20940", - "2600:3503:6000::/29": "396998", - "2600:1901:ffa0::/41": "396982", - "2804:bec::/32": "263018", - "2a0a:6400::/29": "35202", - "2a0d:2787::/32": "62068", - "2804:3320::/32": "265374", - "2a01:7640:9000::/48": "206768", - "2a04:4e40:b600::/48": "54113", - "2001:500:72::/45": "30133", - "240e:3b3:f100::/36": "4134", - "2600:1001:f000::/44": "6167", - "2a09:b00::/29": "209895", - "2001:df2:1000::/47": "132335", - "2402:800:b830::/41": "7552", - "2607:4d00:2000::/35": "33398", - "2804:1b2c:1400::/32": "61713", - "2a01:9700:14d4::/44": "8376", - "2a06:6541:30c1::/48": "3549", - "2401:4900:1200::/42": "45609", - "2607:ff28:c000::/35": "62904", - "2806:2f0:90e2::/39": "17072", - "2a0d:2582:170::/44": "211367", - "2001:4878:c225::/48": "12222", - "2409:805f:3900::/26": "9808", - "2804:18:7820::/43": "10429", - "2001:559:c043::/48": "7922", - "2406:d7c0::/32": "38839", - "240a:a8ca::/32": "144900", - "2804:145c:c610::/42": "263327", - "2a02:2068::/32": "15830", - "2a06:2f40::/29": "57878", - "2400:c700:188::/38": "55644", - "2607:ff60::/46": "3900", - "2a0c:ab07:5000::/36": "208861", - "2001:559:1b2::/48": "33287", - "2606:2800:50c::/46": "15133", - "2804:23c0:500::/34": "26218", - "2804:2800::/32": "263934", - "2001:559:c3ae::/48": "7922", - "2001:67c:38c::/48": "43081", - "2401:4800::/48": "38457", - "2403:e840::/32": "137969", - "240e:980:3000::/33": "4134", - "2803:6f00:801::/32": "14117", - "240e:473:5200::/41": "140485", - "2a05:43c0::/29": "12570", - "2408:8246::/35": "140726", - "2408:8456:5e00::/42": "17622", - "2600:40ff:fcfc::/47": "7046", - "2605:bc00::/32": "46309", - "2001:1be0::/32": "2686", - "2804:cb0:d302::/45": "52742", - "2804:1068:4000::/32": "263634", - "2804:787c::/32": "271245", - "2a00:1e50:8000::/33": "204273", - "2a0c:4280::/32": "20866", - "2001:559:8061::/48": "33657", - "2800:bf0:2425::/43": "27947", - "2a10:7a40:3::/48": "39910", - "2001:559:12a::/48": "7015", - "240a:a92e::/32": "145000", - "2600:e000::/38": "22995", - "2607:ff00:300::/40": "19437", - "2803:6604:e001::/37": "28075", - "2001:67c:a4::/48": "48908", - "2607:e880:55::/48": "13602", - "240a:a6b8::/32": "144370", - "2a04:4e40:2210::/44": "54113", - "2605:e700::/34": "6913", - "2a02:26f7:bec0::/48": "36183", - "2a04:f600::/29": "200435", - "2a0a:49c0::/29": "206178", - "2800:160:200e::/43": "14259", - "2806:267:1501::/48": "13999", - "2c0f:f738:2000::/45": "61317", - "2a03:e340::/48": "28753", - "2001:559:8205::/48": "33657", - "2001:67c:168c::/48": "199217", - "2001:dc9::/32": "24252", - "2001:44b8:405b::/48": "4739", - "2405:7040:6000::/48": "4812", - "2804:2178:4006::/35": "264556", - "2a03:d000:9000::/48": "13075", - "2001:559:c294::/48": "33667", - "2001:67c:15e8::/48": "3301", - "2001:500:104::/44": "21775", - "2604:f980:4220::/44": "19957", - "2803:5b20:2000::/33": "27735", - "240e:438:6640::/36": "4134", - "2602:80b:7000::/44": "20473", - "2800:2a0:230::/47": "264788", - "2a02:26f7:b705::/46": "20940", - "2001:559:3e8::/48": "33489", - "2620:3b::/48": "11488", - "2a01:c50e:b900::/37": "12479", - "2806:3a4::/32": "265623", - "2001:559:87d7::/48": "7922", - "2001:678:970::/48": "31317", - "2405:b8c0:1000::/33": "131674", - "2406:a2c0::/32": "135845", - "2602:fd50:f32::/48": "212149", - "2803:fd80::/36": "52468", - "2804:46dc::/32": "267016", - "2a01:6f00::/29": "43571", - "2a03:ac0::/32": "2128", - "2a04:ba80::/29": "202217", - "2001:fd8:b0e0::/44": "132199", - "2620:32:8000::/48": "1742", - "2a0a:6380::/29": "12552", - "2001:559:8286::/47": "7922", - "2001:19f0:a08::/48": "46407", - "2605:a000:1e00::/40": "11955", - "2804:7d80::/32": "271565", - "2a0e:1bc0::/35": "208621", - "2406:35c0::/32": "38038", - "2401:d800:b630::/41": "7552", - "2600:1408:e001::/37": "20940", - "2a02:26f7:facd::/42": "20940", - "2a0e:97c5:5bc::/46": "20473", - "2001:559:856c::/48": "7922", - "2001:49f0:d0a5::/44": "174", - "240a:ab52::/32": "145548", - "2804:2b44:87::/32": "265144", - "2a02:26f7:cd48::/48": "36183", - "2404:a8:4094::/48": "24514", - "2804:75a8::/32": "271061", - "2001:678:94c::/48": "30962", - "2001:1260:11f::/40": "13591", - "2800:3c0:20a0::/39": "19863", - "2a03:4d41:410::/38": "199610", - "2001:559:84fc::/47": "33651", - "2001:7fb:ff12::/45": "12654", - "2001:df1:c080::/48": "139739", - "2406:e000:c1c::/31": "23655", - "240a:aee0::/32": "146458", - "240e:108::/43": "58519", - "2804:14d:c283::/41": "28573", - "2001:df0:c800::/48": "133173", - "2401:d800:f30::/41": "7552", - "240e:90d:a000::/36": "137688", - "2803:3340::/32": "264700", - "2a02:26f7:4::/48": "36183", - "2001:559:83b7::/48": "7015", - "2409:8939::/30": "9808", - "2604:6600:26::/41": "40676", - "2607:f1c8::/32": "32890", - "2001:678:6bc::/48": "202592", - "2001:67c:108::/48": "202244", - "2401:df00::/31": "17916", - "2600:1404:6c01::/35": "20940", - "2806:322:800::/34": "28546", - "2a05:6740:40c0::/48": "206228", - "2602:ffe2:10::/48": "53334", - "2603:c001:1630::/36": "31898", - "2606:2800:602c::/48": "15133", - "2620:12f:f000::/44": "43", - "2401:fd80:ffff::/48": "139853", - "2405:4040::/32": "135206", - "2800:6d0::/32": "19889", - "2804:17dc::/32": "263255", - "2a00:4802:a30::/41": "13124", - "2a06:f400::/29": "203387", - "2001:559:8181::/48": "33287", - "2001:4878:2031::/48": "12222", - "2604:f580::/32": "54329", - "2800:160:1dca::/43": "14259", - "2804:1d40::/32": "52674", - "2804:5ffc::/32": "269138", - "2a02:26f7:13::/48": "20940", - "2001:7a8:802::/44": "13193", - "2001:43f8:d20::/44": "328209", - "2606:45c0:9591::/33": "26073", - "2a02:710::/32": "42973", - "2a0b:90c0::/29": "205565", - "2401:ff80:110b::/45": "133954", - "2800:a4:2a00::/28": "6057", - "2803:7ce0::/32": "23140", - "2804:344c::/32": "262818", - "2804:5364:e000::/35": "268581", - "2a05:2940::/29": "61131", - "2a06:3b00::/48": "50007", - "2001:df0:206::/48": "37990", - "2804:1570::/32": "263388", - "2a06:9ac0::/32": "209242", - "2a0f:70c0:100::/48": "207869", - "240e:980:2f00::/40": "134760", - "2a02:26f7:bf8c::/48": "36183", - "2406:e780:eb3::/32": "63679", - "2620:11c:f008::/48": "393667", - "2a00:1cb8:2:9::/61": "12713", - "2001:c38:902b::/41": "9931", - "2001:df1:6e80::/48": "174", - "2001:43f8:ab0::/48": "328093", - "2401:5e40:2000::/32": "63770", - "2a04:540::/29": "44391", - "2001:559:c266::/48": "33287", - "2a01:a480::/32": "15576", - "2806:2f0:84e0::/35": "17072", - "2a00:1eb8:c002::/47": "8764", - "2a04:6a00:d4::/48": "43460", - "2a06:7400::/29": "59398", - "2a0d:e40::/29": "39402", - "2401:900::/32": "9351", - "240e:473:6920::/41": "140486", - "2600:1406:b::/43": "20940", - "2602:ffce::/42": "63019", - "2607:fcd0:fa80:1::/62": "8100", - "2a03:a300:1140::/48": "35104", - "2a0a:c0c0::/29": "39106", - "2001:43f8:6c0::/48": "37495", - "2401:d800:d1f0::/38": "7552", - "2402:e380:30e::/48": "138564", - "2408:8456:6000::/42": "17622", - "2409:8c20:1832::/48": "56046", - "240a:a434::/32": "143726", - "2001:468:2631::/44": "11537", - "2001:44b8:404b::/48": "4739", - "2409:8a53:1100::/32": "56047", - "2804:1d04:8000::/35": "61689", - "2804:7950::/32": "271298", - "2806:230:6021::/48": "11888", - "2a01:8840:61::/48": "207266", - "2001:559:8461::/48": "7922", - "2001:dc7:cd1b::/35": "24151", - "2400:cb00:200::/44": "13335", - "2409:8c4d:5201::/30": "9808", - "240e:a51:5c00::/34": "134419", - "2804:2854::/32": "263956", - "240a:ae49::/32": "146307", - "2800:160:1fe3::/44": "14259", - "2804:1624:2000::/32": "263270", - "2001:470:11b::/48": "395570", - "2402:800:9555::/42": "7552", - "2403:8600:c90::/44": "45820", - "2408:8026:710::/36": "17621", - "2607:1280:11a0::/44": "394972", - "2a02:4d8::/32": "41589", - "2804:5df0::/32": "269002", - "2a02:ff0:1000::/40": "12735", - "2001:1a11:101::/48": "8781", - "2406:840:fc00::/48": "140938", - "2605:7f40::/32": "396357", - "2c0f:f290::/32": "37492", - "2001:570::/48": "6066", - "2404:bac0::/32": "131642", - "2409:8a02::/32": "38019", - "2604:2e80:1400::/46": "30036", - "2620:119:501a::/47": "13443", - "2a01:5040:1001::/42": "43996", - "2a07:1980:4::/46": "48851", - "2001:978:5401::/36": "174", - "2401:e740::/32": "135607", - "2406:e1c0:fcf::/32": "141459", - "2605:a404:15f::/42": "33363", - "2a0e:6a00::/29": "209057", - "2400:4800::/32": "9790", - "2406:2140::/32": "24202", - "240e:473:1720::/41": "140486", - "2803:eb40::/32": "264712", - "2804:5d80:4100::/32": "268976", - "2804:7a48::/32": "271362", - "2a02:2e02:c60::/43": "12479", - "2001:559:87c6::/48": "7015", - "2001:67c:394::/48": "47698", - "2408:8957:6500::/40": "17816", - "240a:41cc::/31": "58834", - "2600:140a:a001::/33": "20940", - "2001:400:210:89::/55": "293", - "2001:559:80c3::/45": "33651", - "2408:8957:b000::/40": "17622", - "2a01:6e00::/44": "43142", - "2a02:26f7:e501::/46": "20940", - "2001:1938:0:2001::/64": "34305", - "2400:1c00:310::/44": "45143", - "240e:3bd:2c00::/35": "134774", - "2402:800:379b::/41": "7552", - "2604:5500:ac00::/38": "19165", - "2001:678:6a4::/48": "202481", - "2600:6c3a:17::/44": "20115", - "2607:1e00::/35": "22489", - "2a04:f580:9212::/47": "4809", - "2406:3000:a:8::/47": "4657", - "2605:a900:3022::/33": "46887", - "2401:b780::/41": "45410", - "2600:40f0:150::/35": "701", - "2a02:400::/32": "47264", - "2001:559:82dc::/47": "33659", - "2404:8000:1016::/44": "17451", - "2607:f5c0::/32": "10326", - "2620:42:c000::/48": "395089", - "2620:109:c003::/48": "40793", - "2806:230:201f::/48": "11888", - "2001:dcc:500::/46": "23596", - "2803:5200:2000::/36": "52439", - "2806:370:4000::/44": "28403", - "240e:6ba::/36": "140314", - "2620:13f:8000::/47": "27547", - "2804:32dc::/32": "262322", - "2a06:e881:1407::/44": "202540", - "2001:67c:2558::/48": "20943", - "2a01:190:3a::/39": "1764", - "240a:aa95::/32": "145359", - "2605:9d80:a021::/48": "36678", - "2804:22d8:c000::/34": "264126", - "2001:559:828a::/48": "7922", - "2408:8256:2ea0::/39": "17816", - "2605:d880::/32": "40945", - "2606:9600::/32": "17018", - "2a0b:91c0::/29": "203489", - "2a02:26f7:b580::/48": "36183", - "2a0e:e6c0:2000::/36": "51579", - "2409:8062:807::/40": "9808", - "2605:5340::/32": "62532", - "2610:a1:3038::/48": "12008", - "2a02:2230::/34": "25467", - "2401:5180::/32": "31216", - "2409:8924:4b00::/37": "56046", - "2804:11b8::/32": "263434", - "2a00:a000::/32": "35332", - "2a02:2ad0:219::/41": "702", - "2a03:6e80::/32": "15425", - "2a07:c540::/29": "198930", - "2402:800::/34": "7552", - "2806:230:5010::/48": "265594", - "2001:df6:600::/48": "135653", - "2402:800:990f::/43": "7552", - "2a02:26f0:cb01::/37": "20940", - "2a07:14c6::/32": "59504", - "2a0e:d200::/29": "209044", - "2401:d800:f7b0::/41": "7552", - "2404:ec:200::/39": "703", - "2404:4d40::/32": "138575", - "240a:af03::/32": "146493", - "2a02:6b60::/28": "201838", - "2a06:8780::/32": "50629", - "2400:a980:7100::/37": "133111", - "2a02:29a8:900::/30": "60142", - "2a07:48c0::/29": "212629", - "2a0a:e680::/29": "21159", - "2a0f:5707:abe0::/48": "211066", - "2400:a980:3100::/37": "133111", - "2600:1004:f000::/44": "6167", - "2a01:7a40::/32": "48483", - "2a01:80a0:ffff::/48": "62156", - "2a01:a280:6::/40": "35000", - "2405:9800:b418::/48": "133481", - "2409:8904:68b0::/39": "24547", - "2404:160::/32": "10030", - "2a00:1a28:1158::/32": "42708", - "2a03:e140:1::/48": "208274", - "2408:8a00:c000::/35": "9929", - "2409:8051:900::/37": "9808", - "2600:1002:b000::/42": "6167", - "2607:eb00::/32": "53486", - "2806:2f0:6021::/41": "17072", - "2a01:c50f:f900::/40": "12479", - "2a02:26f7:e804::/48": "36183", - "2a00:6960::/32": "60950", - "2a02:26f7:6e::/48": "36183", - "2620:11c:f004::/48": "393667", - "2402:800:76f0::/39": "7552", - "2404:0:2000::/36": "7482", - "2404:b1:9000::/34": "9891", - "2407:adc0::/32": "142470", - "2408:8456:7000::/42": "17622", - "2409:806a:1100::/36": "9808", - "240a:ad66::/32": "146080", - "2a00:1600::/32": "50195", - "2001:3c8:c302::/45": "4621", - "2408:8956:6f00::/40": "17816", - "240a:a2ce::/32": "143368", - "240a:ae7a::/32": "146356", - "2600:804:200::/48": "12234", - "2600:1480:b001::/37": "20940", - "2604:d600:1059::/46": "32098", - "240a:acda::/32": "145940", - "2a10:9903:101::/48": "15510", - "2602:fcc2::/36": "399289", - "2804:2d6c::/32": "265281", - "2a05:df40::/29": "9186", - "2a0c:9b80::/29": "205816", - "2607:ff48::/32": "8100", - "2a03:1240::/48": "34187", - "2402:800:5d63::/43": "7552", - "2800:440:8180::/48": "27738", - "2a03:1ac0::/34": "9049", - "2a05:d01a::/36": "16509", - "2a06:8e01:1::/46": "44103", - "2a0d:6100::/29": "60781", - "2620:89:2000::/48": "394616", - "2a0c:4840::/29": "204296", - "2a02:1006:c000::/48": "3320", - "2409:8734:aa00::/33": "9808", - "2409:8904:5e40::/42": "24547", - "2604:eb40:6::/48": "55158", - "2620:149:a31::/48": "6185", - "2804:4a24:50::/48": "267221", - "2804:7678::/32": "271114", - "2a00:fc20::/32": "200059", - "2a02:26f7:ea00::/48": "36183", - "2a07:6840::/29": "29119", - "2804:5034::/32": "268375", - "2806:230:4031::/48": "11888", - "2a0c:f00::/29": "56485", - "2a0e:97c0:330::/44": "211481", - "2401:ff80:190f::/43": "133954", - "240e:ff:c001::/48": "134774", - "2a0b:4342:4000::/36": "57578", - "2001:559:418::/48": "20214", - "2001:67c:1198::/47": "47805", - "2001:fd8:3480::/42": "132199", - "2001:16a2:c00::/34": "39386", - "2401:d800:9cd0::/42": "7552", - "2a02:26f7:f0c5::/46": "20940", - "2602:fde4::/36": "22058", - "2804:f24:c000::/36": "263567", - "2a04:b880:5::/48": "43578", - "2001:559:7c2::/47": "33659", - "2001:df6:5880::/48": "142022", - "2401:3c0:10b::/48": "45528", - "2600:7c00::/28": "15344", - "2a04:2700::/29": "12637", - "2001:4d0:6118::/48": "10343", - "2604:ca00:100::/45": "36492", - "2001:67c:52c::/48": "49639", - "2401:d800:2320::/41": "7552", - "2607:f750:20::/47": "23473", - "2a0d:2e00:3000::/48": "33932", - "2001:559:4ce::/48": "7016", - "2001:41f8::/32": "13115", - "2401:d800:f9b0::/41": "7552", - "2804:7ac::/32": "262542", - "2a02:6b0::/32": "24638", - "2001:650:cc02::/48": "3320", - "2402:800:340f::/43": "7552", - "2804:36f0:2400::/33": "266381", - "2a00:c00:f050::/46": "8373", - "2400:7400:e036::/48": "23736", - "240a:a215::/32": "143183", - "2804:3244:28::/32": "265066", - "2804:4998::/32": "267192", - "2a00:cc0::/46": "13237", - "2600:806:101::/38": "701", - "2607:ffc8:0:7::/47": "17356", - "2620:0:5300::/44": "11131", - "2803:5ce0:500::/40": "271809", - "2a09:3800::/29": "208861", - "2405:9800:d003::/48": "133848", - "2408:8459:8250::/37": "17816", - "2801:141::/44": "271958", - "2804:1a0::/47": "28189", - "2804:5edc::/33": "269061", - "2a02:26f7:be01::/46": "20940", - "2a04:a580::/29": "12874", - "2001:67c:2120::/48": "31710", - "2404:4a00:6501::/64": "55423", - "2409:8051:2800::/47": "56047", - "240e:37f:2600::/32": "4134", - "2600:c13::/32": "13791", - "2605:36c0:1::/48": "29944", - "2804:5880::/32": "268133", - "240a:addb::/32": "146197", - "2600:1409:2801::/35": "20940", - "2801:164::/40": "27951", - "2806:2f0:12a0::/46": "22884", - "2001:559:864f::/48": "33661", - "2001:559:8657::/48": "7922", - "2409:8b35::/28": "9808", - "2600:140b:4400::/48": "31109", - "240e:473:9e00::/41": "140485", - "2600:14a0:101::/27": "20940", - "2605:6c80:e::/47": "397373", - "2a01:b740:a04::/48": "6185", - "2a05:fb46::/32": "59504", - "2a09:4fc0::/48": "209562", - "240a:ad44::/32": "146046", - "2804:20bc::/32": "264511", - "2a02:26f7:c1c5::/46": "20940", - "2a0a:d6c0:1::/48": "51658", - "2a02:26f7:e845::/46": "20940", - "2001:559:83bf::/48": "33657", - "2001:ae8::/32": "9080", - "2001:df1:bd80::/48": "139742", - "240e:108:11e3::/48": "134763", - "2600:350f:3000::/32": "396998", - "2605:f700:400::/38": "18978", - "2804:70c0:a::/47": "270746", - "2001:49f0:d089::/43": "174", - "2a03:8de0::/32": "41887", - "2001:67c:2b44::/48": "25525", - "240a:a16d::/32": "143015", - "2603:90be::/32": "12271", - "2806:230:1033::/48": "11888", - "2a04:2140::/29": "199283", - "2001:559:7f3::/48": "33491", - "2001:67c:24d8::/48": "204228", - "2409:8051:2000::/47": "56047", - "2804:646c::/32": "269427", - "2001:559:c32b::/48": "7922", - "2800:160:1d0a::/45": "14259", - "2804:2144:8800::/34": "52795", - "2a03:5d60::/29": "14340", - "2605:6440:3005::/33": "396356", - "2606:e600::/32": "4258", - "2806:2f0:a361::/33": "17072", - "2a02:26f7:c288::/48": "36183", - "2a02:6300:30::/48": "57801", - "2a0f:9441:47::/29": "62240", - "2001:559:3cb::/48": "33491", - "2001:7a0::/32": "15782", - "240a:a313::/32": "143437", - "2804:e30:c00::/38": "11338", - "2401:4900:5070::/40": "45609", - "2606:6680:6::/48": "30475", - "2620:78:200f::/48": "209242", - "2804:1568::/32": "263387", - "2409:8744::/28": "24445", - "240e:44d:5380::/41": "4134", - "2607:ae80:4::/47": "26558", - "2a01:37:2000::/35": "8875", - "2a01:5900::/32": "29239", - "2a0b:e0c0::/29": "41206", - "2401:ff80:1711::/46": "133954", - "2408:84f3:be10::/42": "134543", - "2800:e0::/28": "13489", - "2804:25d0::/32": "262656", - "2a02:26f7:c649::/42": "20940", - "2a02:26f7:ed88::/48": "36183", - "2a02:2e02:9fd0::/34": "12479", - "2a11:0:1::/29": "44103", - "2406:b480:100::/46": "38146", - "2408:825c::/31": "4837", - "240e:473:3250::/39": "4134", - "2803:7a00::/32": "52468", - "2a01:53c0:fd00::/48": "13658", - "2001:559:3f::/48": "7015", - "2405:9800:b12a::/37": "45430", - "2001:1388:8a64::/43": "6147", - "240a:afb3::/32": "146669", - "2800:6f0:5800::/40": "20207", - "2801:1:8800::/48": "64102", - "2a07:c480::/29": "50017", - "2a09:bac0:275::/48": "13335", - "2001:1248:578c::/42": "11172", - "2402:800:3aee::/43": "7552", - "2407:500:4111::/34": "58940", - "2604:d600:2003::/38": "32098", - "2800:3c0:2050::/40": "19863", - "2a02:26f7:f288::/48": "36183", - "2001:503:5419::/48": "7342", - "240e:44d:4480::/41": "4134", - "2606:bc0::/32": "3356", - "2800:160:1392::/45": "14259", - "2a02:6900:8818::/48": "7160", - "2a05:a100::/29": "200899", - "2a0b:ea40::/31": "198188", - "2001:df1:9c00::/48": "133882", - "2604:72c0::/32": "26095", - "2a02:678::/32": "8632", - "2a03:4c60::/32": "199909", - "2a03:9d40::/36": "41095", - "2a0c:6d00:232::/48": "3218", - "2001:4490:fffc::/46": "9829", - "2408:8026:4b0::/39": "17621", - "2409:8c10::/30": "9808", - "240a:ac08::/32": "145730", - "2605:52c0:1::/46": "54574", - "2800:1e0:2100::/40": "64124", - "2a02:c60::/32": "49985", - "2001:678:f20::/48": "211551", - "2402:3a80:c071::/48": "38266", - "2409:8087:2800::/44": "56041", - "240e:109:804c::/25": "4134", - "2804:7a3c::/36": "271357", - "2001:67c:1328::/48": "199268", - "2408:80f1:200::/43": "17621", - "2409:805c:6100::/30": "9808", - "2607:3400::/32": "26891", - "2001:559:8443::/48": "33660", - "2a01:8880:8001::/33": "8745", - "2001:510:101::/44": "376", - "2001:1248:8714::/44": "11172", - "2401:4900:4f53::/45": "9730", - "2a0a:da80::/29": "213112", - "2a0e:97c5:454::/46": "20473", - "2001:df6:780::/48": "141384", - "2402:4880::/32": "134160", - "2405:201:c800::/35": "55836", - "240a:a46d::/32": "143783", - "2620:125:9014::/48": "397415", - "2804:14d:9400::/40": "28573", - "2407:5600::/32": "45186", - "2409:8053:2c00::/38": "9808", - "2604:7b80::/32": "32808", - "2804:18:6040::/37": "10429", - "2804:6610::/32": "269531", - "2605:2fc0:1200::/36": "31984", - "2606:6d00:200::/32": "1403", - "2a02:26f7:b7c8::/48": "36183", - "2a04:bc40:1dc0::/48": "44750", - "2a0d:ea80::/29": "43350", - "240a:a528::/32": "143970", - "240a:aafd::/32": "145463", - "2804:1c3c::/32": "61642", - "2401:ff80:1393::/37": "133954", - "2a01:bd40::/29": "12586", - "2a0b:2d85::/32": "44582", - "2001:df4:4f80::/48": "140941", - "2605:9a00:10::/48": "160", - "2804:5e40::/32": "269021", - "2a02:26f7:e101::/46": "20940", - "2a06:c5c0:600::/48": "210329", - "2a0c:7280::/30": "204786", - "2c0f:ed50::/32": "328468", - "2001:340::/32": "4678", - "2001:559:137::/44": "7922", - "2409:408c:9000::/31": "55836", - "2600:8000::/26": "29992", - "2408:8256:3b96::/44": "17623", - "240e:3b7:4c00::/35": "136200", - "2605:a401:8c46::/42": "33363", - "2607:5a80::/32": "11847", - "2804:3cb8:d000::/34": "53221", - "2a02:26f7:f6dd::/42": "20940", - "2a02:ee80:40b2::/47": "21433", - "2a02:ac80:51::/42": "25145", - "2001:fd0::/44": "10029", - "2402:8e40::/32": "137473", - "2602:803::/48": "393457", - "2806:230:4009::/48": "11888", - "2402:800:5747::/43": "7552", - "2804:46fc:8000::/33": "267024", - "2a05:1500:100::/46": "48635", - "2a0a:4140::/29": "60111", - "2001:559:4ad::/48": "7016", - "2001:c20:c818::/42": "3758", - "2620:f0:4005::/44": "394699", - "2804:8dc::/32": "262395", - "2804:3244:1c::/42": "265066", - "2c0f:f9c8::/32": "37549", - "2001:44c8:4190::/42": "131445", - "2001:559:3c4::/48": "33660", - "2001:559:c166::/47": "33659", - "240a:a488::/32": "143810", - "2605:a900:202e::/39": "46887", - "2804:1a20::/32": "61838", - "2001:559:85db::/45": "7015", - "2a00:1850:6e1::/45": "29357", - "2a05:1a00:4000::/27": "43754", - "2001:559:85d8::/48": "33667", - "2602:feda:3::/45": "46997", - "2804:3f3c::/32": "266647", - "2a0b:3f80::/29": "43019", - "2408:8459:4e40::/40": "17623", - "2803:2040::/32": "28050", - "2a02:ee80:413f::/48": "3573", - "2a03:6440:2001::/46": "199055", - "2402:4cc0::/32": "136724", - "2a01:7e0:ab00::/33": "44066", - "2001:559:491::/48": "33657", - "2600:1003:9110::/37": "22394", - "2600:140f:4e00::/48": "38266", - "2604:86c0:f000::/40": "61003", - "2803:1240:3502::/32": "27855", - "2a0f:5707:ab22::/48": "202297", - "2602:ffb7:5a0::/46": "62874", - "2604:d600:914::/44": "32098", - "2607:f808::/32": "3464", - "2408:8456:840::/39": "17816", - "2803:280::/32": "52498", - "2a02:26f7:4a::/48": "36183", - "2a02:2e02:8a30::/40": "12479", - "2a0c:7e46:4f08::/48": "20473", - "2402:e240::/32": "55699", - "240a:a7da::/32": "144660", - "2600:140b:7400::/48": "31109", - "2607:f7a8::/37": "16657", - "2a00:4940:2::/32": "198279", - "2a02:26f7:ec85::/46": "20940", - "2001:4490:da70::/46": "9829", - "2803:6900:507::/48": "52423", - "2804:29b8:5104::/41": "28126", - "2a02:26f7:f145::/46": "20940", - "240e:965:3000::/32": "4134", - "2600:6c38:7a::/45": "20115", - "2a05:44c0::/32": "32338", - "2a07:cbc0:1c0::/29": "201299", - "2001:559:f9::/48": "7015", - "2001:559:8639::/45": "7015", - "2401:b300::/32": "131999", - "2402:2080::/32": "131144", - "2804:1ecc::/32": "264448", - "2a0c:e640::/45": "211876", - "2001:559:c0ab::/45": "7922", - "2600:1008:b030::/44": "22394", - "2604:d600:1558::/47": "32098", - "2800:550:3::/45": "7004", - "2801:1f:8800::/48": "18747", - "2a02:f00::/48": "48137", - "2a02:26f7:eb05::/46": "20940", - "2001:df4:5f00::/47": "134033", - "2620:11:60::/47": "3486", - "2001:4878:4164::/48": "12222", - "2402:9400::/32": "55803", - "2405:b8c0:6795:40fd::/64": "131677", - "240e:108:10b0::/47": "134420", - "2620:121:5080::/48": "14618", - "2a02:2808:1009::/48": "56361", - "2a05:d840::/29": "200994", - "2804:299c::/32": "264025", - "2a11:c00::/29": "47787", - "2406:f00:7::/48": "24186", - "2804:9ec:800::/32": "263002", - "2804:39f8::/32": "266062", - "2806:230:2036::/48": "265594", - "2001:2f8:1009::/32": "2907", - "2405:84c0:9c00::/40": "9886", - "2408:80ea:6300::/41": "17816", - "240a:abbf::/32": "145657", - "240a:aff1::/32": "146731", - "2a00:4800::/40": "13124", - "2a05:e580::/32": "63399", - "2001:559:c369::/48": "33651", - "2400:8500:3300::/48": "55907", - "2604:6040:20::/48": "53698", - "2804:e24:ffff::/48": "262417", - "2a03:a0a0::/46": "39405", - "2400:cb00:291::/46": "13335", - "2607:fe90::/33": "19237", - "2a06:a5c0::/30": "46723", - "2a07:22c0:8002::/47": "213034", - "2a07:c840::/29": "62183", - "2604:2680:5::/46": "2386", - "2607:fb90:2f00::/35": "21928", - "2606:2800:600a::/48": "15133", - "2804:3b7c::/32": "266152", - "2a01:4d0::/32": "31400", - "2a09:87c0:ffff::/48": "59497", - "2a03:b240::/32": "3250", - "2401:ff80:1791::/46": "133954", - "2407:6100::/32": "58952", - "2409:8c14:100::/36": "56044", - "2800:160:170f::/43": "14259", - "2804:35e0::/36": "266312", - "2804:514c::/32": "268444", - "2a00:45c0::/32": "42707", - "2c0f:6400::/32": "37088", - "240a:a748::/32": "144514", - "240e:874:360::/30": "4134", - "240e:980:9200::/40": "4134", - "2001:ae1::/32": "42008", - "240e:982:8000::/40": "133774", - "2a0e:5480::/29": "16019", - "2a10:2f00:15a::/48": "212237", - "2605:ac80::/32": "33481", - "2a00:1f90::/32": "9021", - "2a0a:df80:26::/48": "39212", - "2a02:26f7:f64c::/48": "36183", - "2001:428::/36": "209", - "2400:cb00:a550::/46": "13335", - "2402:800:5963::/43": "7552", - "240a:ad94::/32": "146126", - "2600:1001:a000::/44": "6167", - "2804:5b8c::/32": "268854", - "2806:2f0:3461::/40": "17072", - "2001:559:711::/46": "7922", - "2001:44c8:45e0::/43": "45430", - "2402:3a80:1800::/42": "38266", - "2409:8730:3000::/33": "9808", - "2607:f170:20::/44": "13768", - "2607:f6f0:9002::/40": "32323", - "2806:230:4043::/45": "265594", - "2a07:a343:120::/44": "9009", - "2001:559:591::/48": "7015", - "2402:800:529b::/41": "7552", - "240a:a388::/32": "143554", - "2606:4700:f5::/39": "13335", - "2804:30c4:2000::/32": "264973", - "2806:10b7:2::/47": "8151", - "2402:800:b310::/42": "7552", - "2402:8100:20d7::/44": "45271", - "2604:d600:164b::/45": "32098", - "2804:6f04::/32": "270633", - "2a00:9d20:101::/48": "30633", - "2001:559:39f::/42": "33652", - "2404:c400:dc06::/34": "9328", - "2a01:80a0:1::/48": "62156", - "2408:80ea:6680::/41": "17622", - "2409:8915:2400::/39": "56044", - "240e:438:7a20::/43": "140647", - "2620:12f:c00d::/46": "395831", - "2801:1c:c800::/48": "269883", - "2804:1b60::/32": "61724", - "2a01:c8:400::/32": "20756", - "2a01:8840:86::/44": "12041", - "2a06:1287:3000::/44": "34549", - "2a0b:6d80::/29": "31477", - "2a0e:fd40:be01::/29": "44103", - "2001:559:c354::/48": "33287", - "240a:a91f::/32": "144985", - "2a03:e841::/32": "47492", - "2a06:5400::/29": "62341", - "2a07:fa00::/29": "3214", - "2a0f:5707:17::/48": "212592", - "2a0b:af40::/29": "205543", - "2001:559:829f::/48": "33657", - "2408:840c:5f00::/40": "17621", - "240e:c9:6000::/29": "4134", - "240e:3b4:2800::/38": "4134", - "2602:fdaa::/48": "27385", - "2607:fb90:8c00::/39": "21928", - "2a0a:d6c0:186::/48": "212981", - "2409:873d::/25": "9808", - "2804:2bec::/32": "265184", - "2804:4f78::/32": "268329", - "2a0c:9480::/30": "15083", - "2a10:4440::/29": "212693", - "2408:8459:1f50::/34": "17816", - "2600:802:101::/37": "701", - "2a00:f620:1::/48": "174", - "2a02:16f0::/32": "34928", - "2a02:26f7:ef40::/48": "36183", - "2804:81a0::/32": "272466", - "2a01:b740:a05::/48": "714", - "2604:4e00:6000::/32": "25764", - "2804:6704::/32": "269598", - "2a04:8e40::/29": "5524", - "2403:ffc0:1100::/38": "137758", - "2a03:2880:f046::/44": "32934", - "2a0b:9280::/29": "206438", - "2001:67c:230::/48": "49788", - "2001:df5:8000::/48": "17547", - "240e:e1:9700::/36": "4812", - "2800:310:901::/32": "18678", - "2001:559:c1ba::/48": "13367", - "240a:a97a::/32": "145076", - "2804:10a0:21c::/42": "28173", - "2001:67c:1974::/48": "207760", - "2402:4700::/32": "17931", - "2607:f7a8:1637::/44": "16657", - "2801:17:800::/48": "264635", - "2a0b:f00::/29": "49191", - "2a10:a040::/29": "40970", - "240a:a055::/32": "142735", - "2a05:47c0::/36": "199167", - "2a02:26f7:e4c9::/42": "20940", - "2001:559:c21d::/48": "33491", - "2001:df1:2d00::/48": "136112", - "2001:122c::/32": "18592", - "240a:af66::/32": "146592", - "240e:473:5c50::/39": "4134", - "2604:21c0::/32": "396097", - "2800:160:172f::/43": "14259", - "2a02:26f7:f4c9::/42": "20940", - "2a03:2881:4003::/45": "32934", - "2001:1938:2200::/46": "33438", - "2406:2000:1ac::/46": "56173", - "2a04:b800::/29": "204348", - "2001:608::/32": "5539", - "240a:af68::/32": "146594", - "2600:1403:bc01::/29": "20940", - "2600:3002:1212::/32": "13649", - "2804:80f0::/32": "272422", - "2806:2f0:3521::/41": "17072", - "2a01:56c1:300::/40": "198864", - "2a0c:90c0::/29": "197637", - "2c0f:f3d0::/32": "3491", - "2001:67c:19f8::/48": "56879", - "2600:1012:9100::/44": "6167", - "2a00:1ec0::/47": "8544", - "2001:559:809d::/48": "33652", - "2001:559:8334::/48": "33651", - "2408:8956:3600::/40": "17622", - "2409:8904:2ea0::/39": "24547", - "2a0d:9bc0::/32": "25540", - "2001:c38:904b::/43": "9931", - "2401:d800:27a0::/41": "7552", - "2804:3054::/32": "264944", - "2001:fd8:3280::/42": "132199", - "2400:cb00:385::/44": "13335", - "2602:ff62:183::/38": "61317", - "2620:149:a1d::/48": "714", - "2a01:6c60::/34": "62217", - "2a03:46c0::/32": "42525", - "2001:4940:2002::/32": "21547", - "240a:a2b2::/32": "143340", - "2a03:b100::/32": "15991", - "2001:559:52::/47": "33651", - "2001:df0:fb00::/48": "136105", - "2402:b300::/32": "23631", - "2407:4ac0::/32": "142044", - "240e:b7:5000::/34": "58563", - "240e:250:2907::/26": "4134", - "2804:6a18::/32": "270312", - "2804:7110:7100::/32": "270764", - "2a02:4280::/32": "40981", - "240a:afdb::/32": "146709", - "2604:9000:2101::/32": "19693", - "2606:2c0:3::/45": "16509", - "2610:20:1031::/45": "10616", - "2804:6698::/32": "269570", - "2804:7f34::/39": "271673", - "2a00:d0c0:200::/48": "205766", - "240a:a6a9::/32": "144355", - "2804:449c::/40": "267642", - "2a00:f400::/32": "28931", - "2804:7898:5000::/48": "271253", - "2001:559:836e::/48": "7922", - "2001:78c::/32": "57651", - "2001:448a:4030::/41": "7713", - "2401:b0c0:d000::/48": "136941", - "240a:ac12::/32": "145740", - "2605:6840:300::/32": "398041", - "2804:21b4::/32": "264568", - "2a0c:bc80::/29": "34979", - "2a0e:b107:11b0::/44": "140731", - "2403:a140:10::/48": "23724", - "2408:8256:2f8c::/48": "17623", - "2409:807e:1100::/36": "9808", - "2a09:bac0:113::/45": "13335", - "2001:559:837f::/40": "33657", - "2001:49f0:d0ff::/48": "174", - "2408:8456:8c40::/39": "17816", - "2a02:26f7:81::/48": "20940", - "2a06:11c0:5::/29": "31169", - "2a0f:5707:abb1::/48": "211620", - "2401:d800:5ef0::/39": "7552", - "2402:e280:214d::/43": "134674", - "2407:7c0:100::/43": "9422", - "2804:14d:3e00::/40": "28573", - "2001:978:901::/46": "174", - "2001:678:aa4::/48": "202297", - "2603:c0f0:2020::/39": "6142", - "2605:2800:1200::/48": "10812", - "2803:440::/32": "263774", - "2001:559:8140::/47": "33657", - "2001:1388:8441::/42": "6147", - "2001:43f8:100::/48": "6968", - "2404:80::/28": "18182", - "2404:a640:13a::/32": "133827", - "2606:2800:507a::/48": "14153", - "2a07:a40:b::/48": "48821", - "2402:800:7090::/42": "7552", - "2407:8c00:1b0::/44": "55441", - "2600:1000:b080::/42": "22394", - "2804:64fc::/32": "269461", - "2804:7c1c::/32": "271476", - "2a03:41e0::/32": "201510", - "2a0f:1300::/29": "57675", - "2409:805c:5900::/38": "9808", - "240a:ae7c::/32": "146358", - "2620:171:df::/48": "715", - "2804:3b8:6a::/39": "52965", - "2001:fd8:228::/41": "4775", - "2600:370f:3429::/46": "32261", - "2604:d600:110f::/43": "32098", - "2804:5b88::/32": "268853", - "2a03:1980:d0ff::/48": "48260", - "2a0b:7140:1::/48": "207408", - "2001:dc8:2002::/48": "131122", - "240a:abe5::/32": "145695", - "2804:f70::/32": "262862", - "2a03:4c00::/29": "16347", - "2001:559:83f6::/48": "7725", - "2400:cb00:300::/47": "13335", - "2402:8100:21c8::/45": "55644", - "240e:473:3200::/41": "140485", - "2800:c90::/32": "263689", - "2803:2b00:8002::/33": "52468", - "2804:4394::/32": "267577", - "2a0c:b641:1c0::/44": "39792", - "2001:480:91::/44": "668", - "2001:4c8:1018::/45": "15290", - "2001:559:820b::/45": "7016", - "2600:1fa0:2080::/44": "8987", - "2607:ff28:3::/44": "62904", - "2a0a:9740::/32": "206011", - "2a0e:b107:458::/42": "57883", - "2400:cb00:a6a0::/45": "13335", - "2401:d800:93e0::/37": "7552", - "2405:6e00:f82e::/48": "133612", - "240a:a324::/32": "143454", - "2806:21a:a000::/46": "262913", - "2a0a:3200::/29": "46723", - "2a0c:b0c0::/29": "64398", - "2001:559:c344::/48": "21508", - "240a:a267::/32": "143265", - "2a02:26f7:63::/48": "20940", - "2001:559:8242::/48": "33651", - "2402:800:53ee::/37": "7552", - "2404:600::/32": "4833", - "240a:a4e4::/32": "143902", - "2620:149:f02::/35": "714", - "2c0f:feb8::/32": "36959", - "2400:c6c0::/32": "58909", - "2402:8cc0:200::/40": "131137", - "2404:2e80:28::/47": "135043", - "2409:805f:900::/35": "9808", - "2600:140b:b801::/38": "20940", - "2401:ff80:1481::/46": "133954", - "2402:800:7940::/42": "7552", - "2600:1406:3801::/38": "20940", - "2a01:7900::/32": "35100", - "2a02:26f7:ef4c::/48": "36183", - "2001:559:485::/46": "7922", - "2001:579:184c::/40": "22773", - "2402:800:99c5::/43": "7552", - "240a:ae2e::/32": "146280", - "2600:1407:7801::/32": "20940", - "2001:559:70c::/48": "33659", - "2001:579:b850::/40": "22773", - "2a02:dc80::/29": "13227", - "2a03:a7a0::/32": "203316", - "2001:67c:16b4::/48": "51942", - "2408:8256:3b89::/48": "17816", - "2600:2b00::/28": "6181", - "2a02:7500::/32": "9155", - "2a06:e380:2::/32": "203507", - "2a10:6340::/48": "49981", - "2407:8b00:9000::/36": "64073", - "240a:a131::/32": "142955", - "2408:8957:200::/40": "17622", - "2001:559:19e::/48": "33652", - "2001:4998:ef99::/48": "26101", - "2401:4900:5550::/44": "45609", - "2804:716c::/32": "270788", - "2001:559:4a3::/48": "33657", - "2401:bb40::/32": "136838", - "2403:9b00::/32": "45110", - "2803:9800:a4c1::/46": "11664", - "2804:40ec::/32": "265991", - "2a02:26f7:af::/48": "20940", - "2a02:26f7:d988::/48": "36183", - "2402:800:3655::/42": "7552", - "2405:4803:270::/37": "18403", - "2a02:f784:8000::/47": "25252", - "240e:320::/30": "140061", - "2804:41d0:400::/34": "267458", - "2a01:8c9::/29": "3209", - "2a02:26f7:c8cd::/46": "20940", - "2a0a:5980::/29": "49544", - "2a01:b1c1::/32": "200548", - "2001:559:c206::/48": "7016", - "2406:4440:10::/48": "142641", - "2408:8459:9a50::/37": "17816", - "240e:108:10f1::/46": "136197", - "2600:1fa0:6080::/44": "16509", - "2620:4d:400a::/48": "395403", - "2a00:1180::/32": "15518", - "2a02:26f7:ce08::/48": "36183", - "2a09:380::/29": "204860", - "2a0a:340:1400::/39": "48043", - "2402:800:3dee::/43": "7552", - "2402:78c0:1000::/34": "137455", - "2a00:1ec0:3::/34": "8544", - "2001:4998:effe::/35": "10310", - "2800:484:3b00::/33": "14080", - "2a02:ff0:ef1::/44": "12735", - "2a02:26f0:33::/48": "34164", - "2a0e:c80:323::/48": "40676", - "2c0f:f010::/32": "37236", - "2001:559:844f::/48": "7016", - "2001:559:c0cb::/48": "33651", - "2001:559:c1be::/48": "33652", - "2404:7500::/32": "58655", - "2a01:5200::/32": "48304", - "2a0a:1d00::/32": "201401", - "2001:67c:10c8::/48": "3246", - "2402:8100:ca0::/44": "45271", - "2604:5500:a000::/38": "19165", - "2620:79:5::/44": "30013", - "2620:120:1000::/40": "2575", - "2803:d80::/29": "13489", - "2803:5440:4038::/48": "264738", - "2a0d:1cc0::/48": "208549", - "2602:fed2:7010::/48": "134666", - "2a0d:ae00::/29": "42910", - "2604:8340::/32": "53877", - "2a10:17c0::/29": "397651", - "2001:559:e0::/46": "7922", - "2402:800:5a1d::/42": "7552", - "240a:aee6::/32": "146464", - "2a05:b6c1::/32": "12637", - "2a11:380::/29": "211319", - "2804:1408:9100::/34": "28635", - "2001:559:4f5::/48": "7922", - "2001:67c:27b8::/48": "42428", - "2001:44c8:132::/35": "45430", - "2403:6c0::/48": "137366", - "2409:8a28:4600::/32": "56041", - "2a00:10d0::/32": "5588", - "2a02:ac80:101::/38": "25145", - "2620:12d:e03f::/48": "7015", - "2600:140f:c01::/39": "20940", - "2607:fb10:503d::/48": "2906", - "2a0a:8380::/29": "33943", - "2402:800:6218::/42": "7552", - "2605:3380:42f7::/44": "12025", - "2a02:26f7:c149::/46": "20940", - "2a03:28a0:4::/32": "201650", - "2001:559:4d9::/48": "7015", - "2804:6674::/32": "269559", - "2a0e:a3c0::/29": "60262", - "2804:2ff0::/32": "264921", - "2a0b:70c0::/32": "206420", - "2405:8a00:a01e::/42": "55824", - "2600:100f:f010::/40": "22394", - "2a02:26f7:c::/48": "36183", - "2804:76d0::/32": "271136", - "2001:1248:57fe::/47": "11172", - "240a:a1bc::/32": "143094", - "240e:44d:1480::/41": "4134", - "240e:44d:7500::/41": "140345", - "2600:1404:bc01::/38": "20940", - "2600:9c0f::/32": "7979", - "2605:ee00:fff0::/44": "29990", - "2401:4900:ea0::/43": "45609", - "240e:982:6000::/40": "58563", - "2803:e600:c200::/36": "18809", - "2a02:26f7:be0c::/48": "36183", - "2a02:70c0::/32": "29467", - "2a0e:2900::/30": "209929", - "2001:559:181::/46": "7922", - "2001:c38:4000::/36": "9931", - "240a:a2ba::/32": "143348", - "2804:5408::/32": "268624", - "2a0e:e700::/31": "57199", - "2402:3a80:1452::/44": "38266", - "2800:180::/32": "27924", - "2a02:2e02:13c0::/37": "12479", - "2a0b:dd40::/29": "204817", - "2a0e:8f02:10f4::/44": "204446", - "2001:559:17c::/47": "7016", - "2001:4878:a228::/48": "12222", - "2001:4878:b216::/48": "12222", - "240a:a2e9::/32": "143395", - "240e:473:6550::/40": "4134", - "2a02:26f7:f800::/48": "36183", - "2001:1848::/32": "6325", - "2408:84f3:9810::/42": "134543", - "2a02:26f7:b588::/48": "36183", - "2a04:dd00::/30": "60117", - "2a05:3fc0::/29": "201491", - "2408:8862::/29": "4837", - "2409:8010::/35": "9808", - "240e:1e:2000::/36": "136200", - "240e:44d:1600::/41": "140345", - "2604:aa80::/32": "46276", - "2620:0:cf0::/48": "6456", - "2620:129:9003::/48": "395506", - "2001:67c:6f0::/48": "44934", - "2001:67c:254c::/48": "39871", - "2001:978:6715::/35": "174", - "240a:af2b::/32": "146533", - "240e:44d:5980::/41": "4134", - "2600:c12::/32": "12179", - "2600:141c:d001::/34": "20940", - "2408:8456:8000::/42": "17622", - "2600:1405:a001::/35": "20940", - "2604:eb40::/45": "32727", - "2803:ad80:69::/48": "42473", - "2a01:e00::/30": "12322", - "2a07:9140::/29": "57475", - "2001:559:304::/48": "33657", - "2001:67c:26ac::/48": "204635", - "2001:1248:9855::/42": "11172", - "2603:c002:8000::/39": "31898", - "2804:44bc::/32": "267650", - "2405:3140:11::/48": "56006", - "240a:a0a1::/32": "142811", - "2a00:4580::/30": "3226", - "2a02:26f7:76::/48": "36183", - "240e:978:1600::/36": "4134", - "2a02:26f7:ea84::/48": "36183", - "2a09:eb80::/29": "209649", - "2a0e:fd45:a00::/40": "44541", - "2a0e:fd45:b00b::/48": "208150", - "2403:8dc0::/32": "133648", - "2a02:7a00:6::/48": "197895", - "2001:1ac0::/32": "16004", - "2600:9000:21a1::/46": "16509", - "2620:10d:6000::/46": "26722", - "2803:ae10::/32": "271969", - "240e:44d:5300::/41": "140345", - "2600:1408:a402::/36": "20940", - "2804:eac::/32": "262967", - "2001:559:401::/48": "20214", - "2001:559:84bf::/48": "33659", - "240e:981:b200::/33": "4134", - "2a02:26f0:1d01::/40": "20940", - "240a:a571::/32": "144043", - "2804:73c0::/32": "270935", - "2a01:5140::/32": "30830", - "2c0f:f6d0:14::/44": "327687", - "2600:1003:a110::/38": "22394", - "2a00:d980::/32": "12512", - "2001:c20:48c7::/35": "3758", - "2409:8052:3802::/40": "56047", - "240a:ad8e::/32": "146120", - "2804:14c:5b00::/40": "28573", - "2a02:6b8::/46": "208722", - "2a0b:b200::/32": "64439", - "2402:8100:2240::/39": "45271", - "2404:efc0:235::/46": "10122", - "2620:105:b000::/40": "2055", - "2800:3a0:193::/48": "52229", - "2804:1658::/35": "263283", - "2a01:5040:21::/41": "43996", - "2607:fb50::/36": "46253", - "2a09:a400::/29": "212660", - "2a10:a647::/32": "47753", - "2402:6940:407::/40": "7645", - "2604:4280:203::/32": "14866", - "2a00:86c0:ff0b::/40": "2906", - "2a0c:a500:50::/40": "209385", - "2001:df1:2780::/48": "133725", - "2405:1c0:6641::/46": "135062", - "2a04:e00:104::/48": "39855", - "2001:559:4e2::/48": "7922", - "2402:800:b770::/40": "7552", - "2804:3e40:8000::/33": "266583", - "2605:f700:100::/44": "18978", - "2804:7f68::/32": "271686", - "2a02:26f7:cc40::/48": "36183", - "2a02:2a28::/32": "51137", - "2a0a:7dc0::/29": "57656", - "2804:520::/47": "262496", - "2804:29b8:5159::/32": "28126", - "2a0f:542::/32": "398481", - "2001:fd8:3300::/42": "132199", - "2400:fc00:8190::/38": "45773", - "240e:473:a050::/39": "4134", - "2602:ff35::/36": "40317", - "2a04:bc40:1dc9:2::/48": "35277", - "2806:103e:b::/45": "8151", - "2a10:b880::/32": "38965", - "2001:468:1b00::/37": "11537", - "2804:6438::/32": "269414", - "240a:a121::/32": "142939", - "240a:a882::/32": "144828", - "2606:7c0::/32": "54804", - "2607:f208:305::/48": "26496", - "2a00:8e00:1::/48": "20712", - "2600:5400:e901::/27": "19108", - "2620:100:6029::/43": "19679", - "2804:14d:ac00::/40": "28573", - "2804:3fec::/32": "265922", - "2001:4de0:2::/47": "34343", - "2001:b201::/21": "3462", - "2408:8459:b650::/36": "17816", - "2600:6:ff0b::/42": "1239", - "2620:11b:e090::/42": "3356", - "2402:800:b190::/42": "7552", - "2403:3540::/32": "137370", - "240e:438:220::/43": "140647", - "2602:fcc6:2::/36": "394737", - "2804:47c8::/32": "267076", - "2001:1b38::/32": "8554", - "2401:d800:9890::/42": "7552", - "2401:ff80:1983::/45": "133954", - "2804:1840::/32": "262711", - "2806:104e:7::/43": "8151", - "2a02:26f0:ed::/43": "20940", - "2a0c:b641:570::/48": "209300", - "2001:298::/32": "9600", - "2602:fead::/36": "395567", - "2607:a500::/45": "12025", - "2a01:cd00:80f0::/48": "28708", - "2a03:e340:1::/48": "60781", - "2402:800:b340::/42": "7552", - "2408:8459:1c10::/42": "17623", - "2600:1405:c001::/35": "20940", - "2403:eb40:2001::/32": "138418", - "2604:e5c0::/32": "31950", - "2a05:fc1::/32": "49791", - "2a0b:f380:3e8::/48": "49544", - "2407:f100:5::/32": "133075", - "2a01:8840:81::/48": "207266", - "2a01:aea0::/36": "42473", - "2a05:92c0::/29": "12859", - "2a06:3ac0::/29": "196945", - "2a0a:e340::/29": "205689", - "2600:8807:7a2::/41": "22773", - "2620:119:50c0::/48": "14413", - "2800:160:1818::/42": "14259", - "2804:4fc8::/32": "268349", - "2806:2f0:51e2::/38": "17072", - "2a02:2808:1006::/48": "47211", - "2a02:29c8::/32": "3910", - "2001:559:81b7::/48": "7922", - "2604:8540:fcc2::/48": "33353", - "2606:2e00:8002::/47": "32780", - "2a02:26f7:3c::/48": "36183", - "2a07:59c6:eed7::/44": "48646", - "2a0a:61c0::/29": "206119", - "2a0e:b105:750::/45": "20473", - "2001:dc8:d000::/48": "38737", - "240a:ab47::/32": "145537", - "2001:67c:2c84::/48": "50838", - "2001:b000:595::/44": "3462", - "2401:14c0:2b::/41": "136531", - "2804:5550:facf::/37": "263067", - "2401:ee00:1041::/34": "23951", - "2600:1007:9000::/44": "6167", - "2408:8459:3c20::/44": "17816", - "2409:8c20:a18::/37": "56046", - "240a:ad03::/32": "145981", - "2605:a900:b::/45": "46887", - "2804:14c:cc93::/42": "28573", - "2a01:53c0:ffeb::/48": "54994", - "2a0f:1a40::/29": "60262", - "2001:559:47c::/48": "33287", - "2804:4d44::/32": "262978", - "2a03:5a07::/32": "51028", - "2a0d:63c0::/31": "200313", - "2804:16f0::/32": "263109", - "2804:3660::/32": "266344", - "240a:a8e1::/32": "144923", - "2a0c:e080::/30": "51095", - "2a0e:c147::/32": "16262", - "2001:503:83eb::/48": "396574", - "2001:559:41d::/46": "7922", - "2001:559:81d0::/48": "33651", - "2001:4878:4031::/48": "12222", - "2804:5984:8f00::/33": "268707", - "2804:7c08::/32": "271471", - "2a01:e8::/32": "25473", - "2001:67c:158c::/48": "5539", - "2404:c80::/32": "23704", - "2602:ffe2:100::/48": "53334", - "2606:2800:410b::/45": "15133", - "2801:0:1c0::/45": "21578", - "2a00:7640::/32": "48954", - "2a0e:97c5:438::/46": "20473", - "2400:6280:10d::/48": "132280", - "2406:2000:f0::/46": "10229", - "2804:29e8::/32": "264043", - "2a01:b640:7700::/40": "39045", - "2a03:db80:3410::/48": "12643", - "2001:67c:318::/48": "51608", - "2804:4a0:5000::/32": "52989", - "2a0f:607:105a::/47": "38308", - "2001:559:80e2::/48": "33287", - "2001:67c:2ef0::/48": "15542", - "2402:9d80:840::/43": "131429", - "2406:8f00::/32": "38761", - "2804:37ec::/32": "266444", - "2806:2f0:21e0::/48": "17072", - "2a00:1790::/29": "42000", - "2001:468:365::/37": "11537", - "240e:30f:5600::/27": "4134", - "240e:3ba:9c00::/34": "140310", - "2804:29f8:3::/48": "264048", - "2a00:16f8:1::/44": "6461", - "2a0a:1b00::/32": "51892", - "2a0f:3500::/29": "201188", - "2a0f:52c1:1::/48": "212345", - "2001:ba0::/32": "8560", - "2404:7180:b001::/46": "23848", - "240a:a632::/32": "144236", - "2606:f900:a602::/36": "812", - "2620:101:b000::/41": "12079", - "2a01:4d60::/46": "30870", - "2a0e:46c4:200::/48": "38230", - "2001:559:20b::/48": "22909", - "2001:559:745::/48": "33659", - "2408:8656:2efe::/47": "17623", - "2806:3be::/32": "270119", - "2a03:3a60::/32": "49544", - "2a07:4840::/48": "64245", - "2600:1402:16::/48": "20940", - "2602:fe96::/36": "396502", - "2a02:e980:92::/42": "19551", - "2a07:2fc0::/29": "41337", - "2606:7e00:4::/48": "7215", - "2804:30b8:bd::/32": "28154", - "2804:5154::/32": "268445", - "2a01:1000::/23": "5617", - "2001:4c78::/32": "12350", - "2001:4de0:200::/40": "33438", - "2402:c800:ffff::/48": "37900", - "2c0f:f860::/32": "36890", - "2409:8924:b500::/38": "56046", - "2600:1409:e801::/37": "20940", - "2804:4368:e000::/35": "267568", - "2001:470:13f::/41": "6939", - "2401:7641::/32": "63778", - "240a:a53b::/32": "143989", - "2603:c002:1b10::/37": "31898", - "2620:130:3050::/48": "62861", - "2804:b0c::/32": "52935", - "2804:3790::/32": "266421", - "2a02:26f7:ce09::/42": "20940", - "2001:4998:efe7::/44": "10310", - "2a0a:3a40::/32": "8308", - "2a0f:8600::/48": "23470", - "2a03:a900:ffff::/48": "57707", - "2402:d000:8131::/45": "9329", - "2403:8000:10::/48": "18007", - "2405:9000:208::/32": "7474", - "2409:8c20:9c74::/34": "56046", - "240e:103:8b00::/44": "139203", - "2607:7000:a100::/33": "25905", - "2a00:c587:fd00::/40": "51331", - "2401:c680:b::/45": "133854", - "2407:680::/33": "9676", - "2409:8f54::/24": "9808", - "2800:68:19::/45": "61468", - "2804:492c::/32": "267168", - "2a00:6740::/32": "8779", - "2001:678:17::/48": "43832", - "2403:88c0::/47": "138192", - "2804:14d:4483::/44": "28573", - "2804:672c::/32": "269609", - "2a0a:3507:1::/48": "203038", - "2001:388:40c7::/35": "7575", - "2001:13d2:3805::/44": "7303", - "2a01:48a0:4001::/48": "57271", - "2a0a:340:aa00::/40": "48043", - "240e:108:44::/48": "134768", - "240e:473:400::/41": "140485", - "2804:7c50::/32": "271488", - "2a02:26f0:97::/44": "20940", - "2a02:26f7:f909::/46": "20940", - "2a07:1800::/29": "51560", - "2001:559:7b8::/48": "7016", - "2600:140f:801::/39": "20940", - "2a0d:1700::/29": "30791", - "2a10:3900::/48": "39392", - "2c0f:2600::/32": "328848", - "2001:559:863f::/48": "33662", - "2408:8456:1a00::/42": "17622", - "2600:6c38:f18::/31": "20115", - "2a01:9ba0::/32": "30742", - "2a02:25c8::/32": "43557", - "2a10:200:2::/36": "208059", - "2803:6900:546::/47": "52423", - "2804:605c::/32": "269162", - "2a02:26f7:f2c8::/48": "36183", - "2001:67c:558::/48": "202060", - "2a02:26f0:a801::/39": "20940", - "2a05:4140:300::/42": "212271", - "2402:800:7180::/42": "7552", - "2a01:c50e:f000::/39": "12479", - "2401:d800:2b00::/42": "7552", - "2a07:c280::/32": "206892", - "2001:559:53f::/48": "7922", - "2001:1700::/27": "6730", - "2401:af80::/33": "10010", - "2408:8456:2c50::/39": "17816", - "2600:1407:4801::/35": "20940", - "2803:b0e0::/32": "269862", - "2a05:71c0::/29": "34993", - "2001:559:86b0::/45": "7922", - "2804:f44::/32": "263574", - "2a02:2180::/32": "16245", - "2a02:ee80:4227::/44": "3573", - "2a00:d0c0::/39": "58010", - "240e:3bd:1200::/39": "4134", - "2600:370f:70a0::/45": "32261", - "2602:102:1006::/48": "20115", - "2607:f430::/32": "3663", - "2607:fc48:418::/48": "40009", - "2804:2e58::/32": "265340", - "2a00:1678:baba::/48": "49453", - "2a01:4b0::/46": "42310", - "2a02:26f7:b8c9::/42": "20940", - "2607:fe68::/32": "15146", - "2620:135:5005::/44": "26457", - "2a00:17b0::/32": "204896", - "2001:67c:2188::/48": "197500", - "2400:cb00:a592::/45": "13335", - "2a00:db0::/32": "9092", - "2001:13c7:6015::/48": "61441", - "2806:230:fff3::/48": "11888", - "2a01:111:202c::/46": "8068", - "2600:1417:4e::/47": "20940", - "2604:7500::/32": "6368", - "2800:160:1ceb::/43": "14259", - "2804:7988::/32": "271311", - "2a09:bac0:270::/48": "13335", - "2804:4f8:8000::/38": "28263", - "2001:559:81a2::/48": "33287", - "2406:57c0:2130::/48": "134672", - "2804:4558::/32": "266920", - "2804:807c::/32": "271753", - "2806:230:203d::/48": "11888", - "2a00:fc00:e00a::/43": "3255", - "2a03:2880:f00b::/43": "32934", - "2001:559:82a9::/48": "33287", - "2001:c20:4871::/48": "9255", - "2001:df1:7780::/48": "30823", - "2402:3300:6000::/48": "56300", - "2804:60a8::/32": "269182", - "2a00:1978::/32": "12579", - "2a02:4b8::/31": "39605", - "240a:aaf6::/32": "145456", - "2600:1001:9100::/44": "6167", - "2804:c48:e000::/38": "52687", - "2001:ac8:36::/44": "9009", - "2607:f5b7::/32": "30633", - "2a0b:b86::/45": "3280", - "2001:67c:ac::/48": "44329", - "2001:4be0::/32": "31703", - "2408:84f3:3260::/40": "17623", - "240e:44d:3880::/41": "4134", - "2800:bf0:2900::/46": "52257", - "2804:14d:8c3::/42": "28573", - "2a02:5fa0::/32": "198545", - "2a0a:ee80:8::/47": "43988", - "2001:799::/32": "21320", - "2402:800:7be0::/37": "7552", - "2408:84f3:ac10::/42": "134543", - "240a:a63a::/32": "144244", - "2605:a40c::/44": "33363", - "2800:160:16ac::/41": "14259", - "2804:7e38::/32": "269561", - "240a:aba1::/32": "145627", - "2602:fcdf::/36": "398491", - "2804:78c0::/32": "271263", - "2a00:1c50:1::/48": "30811", - "2001:67c:1308::/48": "211693", - "2602:fcae::/36": "16904", - "2604:9d40:1337::/48": "393290", - "2a03:d400:122::/47": "198913", - "2620:98:e008::/46": "399728", - "2001:4403:deae::/34": "9500", - "240e:473:5000::/41": "140485", - "2804:68b0::/32": "269709", - "2806:108e:21::/46": "8151", - "2001:559:c283::/45": "7015", - "240a:a24b::/32": "143237", - "2a00:9080::/32": "30736", - "2001:4b69::/32": "12635", - "240e:108:10b2::/41": "4134", - "2607:f108:4700::/32": "29838", - "2620:128:6000::/48": "395361", - "2804:21cc::/32": "264574", - "2a02:26f7:d508::/48": "36183", - "2402:800:63f7::/44": "7552", - "240a:afc1::/32": "146683", - "2600:6c38:51::/44": "20115", - "2804:3f10::/33": "262566", - "2a02:26f7:eb41::/46": "20940", - "2404:6640:1000::/32": "18013", - "2001:44b8:30c5::/46": "4739", - "2401:4900:2180::/45": "45609", - "2406:a900:29::/48": "132712", - "240a:a051::/32": "142731", - "2804:33d4:9::/32": "265419", - "2a01:48a0:4050::/48": "52000", - "2a0a:ec02:c01::/48": "42692", - "2803:4000::/32": "265801", - "2804:14d:72b5::/41": "28573", - "2a02:26f7:cec0::/48": "36183", - "2a0f:99c0::/32": "205240", - "2001:13c7:600e::/48": "52374", - "2607:d500:600::/47": "13768", - "2804:27dc::/32": "263926", - "2a00:11e0::/32": "48072", - "2a04:4e40:f800::/48": "54113", - "240e:951:2800::/38": "141157", - "2610:178::/32": "16668", - "2a0e:5540:10::/46": "208258", - "2a0a:d6c0:2::/45": "61423", - "2001:559:c340::/48": "7922", - "2400:8480:3010::/42": "133385", - "2403:e200::/47": "45543", - "2409:8904:5940::/42": "24547", - "2607:f7c0::/34": "36444", - "2a01:238::/39": "6724", - "2a07:8d40::/29": "207075", - "2001:df5:2a80::/48": "141371", - "2001:4408:5900::/38": "4758", - "240a:a5dc::/32": "144150", - "2606:2800:402b::/48": "14153", - "2800:2a0:232::/34": "27947", - "2804:3a94::/32": "266097", - "2a02:250::/47": "39570", - "2a02:21f8::/32": "8851", - "2001:559:c004::/48": "7922", - "2400:d400:b97::/48": "45671", - "240e:473:8520::/41": "140486", - "2602:feda:182::/47": "211843", - "2606:4700:8d70::/44": "13335", - "2607:1280:11e0::/44": "394972", - "2804:6954::/32": "270263", - "2a02:44a0::/43": "61955", - "240a:aef0::/32": "146474", - "2620:13c:a000::/48": "19367", - "2804:22bc::/32": "264119", - "2806:2f0:3121::/46": "17072", - "2a0a:aac0::/29": "50599", - "2400:a980:1000::/40": "133517", - "2804:14d:ac94::/41": "28573", - "2a00:1e20::/29": "34661", - "2a03:2480:80::/48": "200107", - "2a0f:5707:aa90::/44": "212592", - "240a:a48c::/32": "143814", - "2806:230:102d::/48": "11888", - "2001:1248:709a::/47": "11172", - "2408:84f3:2c90::/38": "17816", - "2600:1200::/24": "4152", - "2602:fed2:710b::/48": "34927", - "2607:f738::/39": "17184", - "2a03:9240::/32": "202632", - "2408:84f3:a040::/38": "17816", - "2600:1900:41d0::/31": "15169", - "2806:310:34::/46": "16960", - "2803:9a40:8001::/33": "263824", - "2804:5234::/32": "268502", - "240a:a607::/32": "144193", - "2803:6900:597::/44": "52423", - "2804:4260::/32": "267496", - "2a0e:eb00:1::/48": "43431", - "2400:e440:500::/41": "42382", - "2401:8d00:f::/43": "38345", - "240a:ab51::/32": "145547", - "2804:51c::/33": "262495", - "2a02:26f7:b986::/47": "20940", - "240a:a2c6::/32": "143360", - "240e:44d:1a80::/41": "4134", - "2a02:898::/32": "8283", - "2a03:5344::/44": "34414", - "2a0f:29c4::/30": "398481", - "240a:a597::/32": "144081", - "240a:ae27::/32": "146273", - "2804:4c14:8a01::/39": "267348", - "2804:8124::/32": "272435", - "2a00:fc00:e009::/48": "35296", - "2a02:26f7:9f::/48": "20940", - "2001:559:546::/48": "33651", - "240a:a0fe::/32": "142904", - "2804:17c0::/32": "263155", - "2804:3508::/32": "265496", - "2001:559:837a::/48": "33651", - "2804:385c:200::/32": "262687", - "2a03:32c0::/44": "48503", - "2001:43f8:900::/48": "327935", - "2600:380:f100::/46": "20057", - "2600:1006:9040::/44": "6167", - "2600:1405:7800::/48": "21342", - "2604:d600:1327::/44": "32098", - "2400:adce::/40": "9541", - "2402:6800:765::/32": "22822", - "2409:8a5c::/33": "9808", - "240a:a446::/32": "143744", - "2604:1280:1::/46": "11696", - "2a03:3ec0::/32": "61124", - "2a09:8b40::/29": "197690", - "2603:b019::/25": "11796", - "2607:f178:4::/47": "30217", - "2a01:bda0::/32": "61981", - "2400:f400::/32": "24278", - "2401:d800:b1b0::/38": "7552", - "2804:37c::/32": "52981", - "2804:2bf4:c0c0::/34": "262785", - "2a00:f10:171::/38": "48635", - "2001:559:5c0::/48": "22909", - "2404:8000:c6::/43": "17451", - "2a00:e30:a00::/40": "61333", - "2a01:5041:efd::/46": "202196", - "2a09:bac0:59::/48": "13335", - "2001:559:714::/48": "20214", - "2001:1a11:26::/48": "42298", - "2406:5880::/32": "135391", - "2600:1403:ac01::/48": "20940", - "2803:c880::/32": "263179", - "2804:43c:4000::/32": "262422", - "2a03:7b20::/32": "48450", - "240a:a260::/32": "143258", - "240a:aa61::/32": "145307", - "2a09:d2c1:a::/48": "209669", - "2001:df1:6000::/48": "131217", - "2402:4380::/32": "132162", - "2404:6b00::/32": "58640", - "240a:aa5e::/32": "145304", - "2a09:58c0::/48": "8426", - "2001:2001:6000::/40": "1759", - "2001:4478:1a00::/34": "4802", - "2408:8924::/32": "4837", - "2804:e30:7e00::/39": "11338", - "2a0c:f000:1000::/48": "206976", - "2800:bf0:b400::/48": "52257", - "2001:550:10d::/38": "174", - "2001:559:36e::/48": "33489", - "2408:8459:3040::/38": "17816", - "2600:1407:9801::/34": "20940", - "2605:de40:2005::/35": "397553", - "2607:4a00::/32": "36316", - "2800:160:1a1b::/42": "14259", - "2804:20b8::/38": "264510", - "2a02:2e02:83d0::/37": "12479", - "2a02:2e02:88e0::/39": "12479", - "2001:559:830d::/48": "33661", - "2400:ab80::/32": "133399", - "2620:137:d000:1::/64": "394161", - "2001:4130:20::/48": "29067", - "2800:440:1200::/42": "27738", - "2001:13c7:601b::/48": "61520", - "2a06:f0c0::/29": "3352", - "2a0b:4342:1a30::/47": "57695", - "2a09:a940::/29": "61437", - "2001:df0:232::/48": "9355", - "2001:df1:a100::/48": "136758", - "2803:2ac0::/32": "52300", - "2804:5450::/32": "268642", - "2804:798c::/32": "271312", - "2a00:12f8::/37": "9198", - "2a00:ab00:7000::/32": "49505", - "2a0e:8f00:fe05::/48": "34553", - "2404:e5c0::/32": "21859", - "2604:1d80::/32": "54876", - "2803:9800:9022::/43": "11664", - "2a02:2f0c:8002:4::4/33": "8708", - "2a0c:3ac0::/48": "46562", - "2405:f800::/32": "17506", - "240a:a60f::/32": "144201", - "2a02:26f7:c581::/46": "20940", - "2600:1fa0:1020::/44": "16509", - "2605:6400:10::/48": "53667", - "2604:d600:618::/46": "32098", - "2620:10b:3000::/40": "55166", - "2804:4b48::/32": "267295", - "2a01:89a0::/34": "31556", - "2a09:6d00::/29": "209871", - "2001:559:76e::/47": "33659", - "2001:559:820a::/48": "33287", - "2001:4490:7000::/46": "9829", - "2605:6ac0:7000::/36": "12182", - "2804:1248::/32": "263467", - "2a0f:9400:7390::/44": "210815", - "2c0f:e8b0::/32": "327712", - "2804:14ec::/32": "263359", - "2001:559:c2::/48": "33652", - "2001:559:87bf::/48": "7922", - "2001:559:c2c6::/48": "33657", - "240e:109:8022::/48": "58466", - "2001:559:533::/48": "33287", - "2405:6800:2000::/37": "18207", - "2600:100d:b1d0::/42": "6167", - "2605:e000:1b00::/40": "10838", - "2a04:9140:3003::/48": "201958", - "2a0e:b107:c30::/44": "140731", - "2404:3d00:417a::/47": "21433", - "2600:1000:9f10::/40": "22394", - "2604:ca00:1f6::/44": "36492", - "2620:b6:4000::/48": "11448", - "2800:bf0:24c::/48": "27947", - "2806:2f0:4064::/40": "17072", - "2400:a740::/32": "133034", - "2403:5340::/32": "137639", - "240e:3b6:5600::/34": "4134", - "2602:fc8b:21::/46": "211544", - "2804:69bc:8000::/33": "270288", - "2001:67c:1bdc::/48": "29493", - "2001:4998:60::/48": "14196", - "2403:8940:80::/39": "135817", - "2602:801:2::/48": "397781", - "2606:cb00:ff16::/47": "6643", - "2806:230:fffa::/45": "11888", - "2408:8956:1100::/38": "17816", - "240a:aaf5::/32": "145455", - "2620:171:4a::/45": "715", - "2804:4f8:2000::/36": "28263", - "2a04:4e40:ca00::/48": "54113", - "2a09:e1c1:f000::/44": "20473", - "2a03:a000::/32": "13009", - "2402:ee40::/47": "134033", - "2404:c2c0:4000::/40": "135629", - "240e:145::/30": "4134", - "240e:44d:3580::/41": "4134", - "2600:140b:6::/44": "20940", - "2a00:6e80::/32": "2119", - "2a01:420::/32": "41695", - "2a06:5484::/30": "43754", - "2401:ff80:1a09::/46": "133954", - "240e:980:2600::/40": "4134", - "2605:a404:c4::/46": "33363", - "2806:102e:22::/48": "8151", - "2401:c500:fd06::/44": "54994", - "240a:a8e7::/32": "144929", - "2600:380:a00::/35": "20057", - "2603:4:1000::/46": "44273", - "2803:8180:2::/32": "263237", - "2a0a:8bc0::/29": "206021", - "2401:1d40:3001::/40": "59019", - "240e:980:8100::/40": "4134", - "2803:65e0::/32": "270034", - "2803:b900::/32": "52436", - "2804:1b3:3000::/39": "18881", - "2001:559:c378::/48": "7922", - "2001:40e0::/32": "15879", - "2401:c680::/47": "133854", - "2404:a140:f::/48": "138915", - "2620:9c:2000::/48": "54406", - "2804:14c:445::/42": "28573", - "2a01:8740:6::/32": "57344", - "2001:67c:284::/48": "198605", - "240e:108:23::/48": "58519", - "2602:fed2:fa0::/41": "53356", - "2801:18:c000::/48": "263186", - "2803:1240:65::/34": "27855", - "2a0c:93c0:6002::/48": "212465", - "240a:a1b6::/32": "143088", - "2604:d240::/32": "396852", - "2804:48b4::/32": "267139", - "240a:a1be::/32": "143096", - "2806:370:7070::/40": "28403", - "240a:ac26::/32": "145760", - "2804:e8c:4000::/35": "52561", - "2406:daa0:1080::/44": "16509", - "240e:44d:6380::/41": "4134", - "2606:a100:400::/39": "394285", - "2620:0:6b0::/48": "23028", - "2800:160:2c2c::/43": "14259", - "2a0d:5042::/29": "8315", - "2602:fcef:41::/36": "398984", - "2620:ee:8000::/48": "16881", - "2a00:c840::/32": "44998", - "2a02:26f0:5600::/48": "34164", - "2405:55c0:3d::/46": "63991", - "2407:6080::/32": "133583", - "240a:2:c90::/44": "9605", - "240a:a6c1::/32": "144379", - "240a:ad75::/32": "146095", - "2a0d:9600:a::/48": "39664", - "2a0e:b107:382::/47": "208753", - "2408:84f3:4810::/42": "134543", - "240a:aaaf::/32": "145385", - "2a00:1148::/45": "47764", - "2a07:eec0::/29": "201240", - "2a0e:800:ff00::/48": "209083", - "2001:559:c251::/46": "7015", - "2001:67c:2350::/48": "6830", - "2001:1401::/29": "9201", - "240e:473:4f20::/41": "140486", - "2a02:b58::/32": "9125", - "2a02:26f7:ce85::/46": "20940", - "2a07:7200::/47": "34197", - "2404:4800:20::/48": "9892", - "240e:874:260::/40": "4134", - "2c0f:f590:0:203::/32": "36974", - "2400:c540:c827::/41": "59238", - "2620:1ec:e::/43": "8075", - "2a0d:9d00::/29": "50954", - "2602:fd50:f20::/44": "207609", - "2610:b0::/34": "3573", - "2a0e:b105:468::/46": "20473", - "2a02:348:ad::/41": "35470", - "2400:d400:9::/48": "45671", - "2402:800:3bc5::/43": "7552", - "2406:1000::/32": "4711", - "2409:8915:2700::/40": "56044", - "2603:c0f8::/38": "20054", - "2804:4364::/32": "267567", - "2804:5880:b000::/33": "268133", - "2001:559:8488::/48": "7922", - "2001:67c:6e8::/48": "201641", - "2001:dce:7400::/48": "45285", - "2400:5200:1000::/40": "55410", - "2401:d800:840::/42": "7552", - "2620:120:e000::/40": "15169", - "2400:7400:e02d::/48": "23736", - "2408:8456:3a00::/41": "17623", - "2804:55c8::/32": "267956", - "2408:8656:a51::/44": "17622", - "2803:ce00::/32": "52422", - "2804:1318::/32": "263515", - "2a0b:100::/29": "48402", - "2a10:1440::/29": "213035", - "2001:559:10f::/48": "7016", - "2804:7a2c::/32": "271352", - "2001:1440::/38": "8469", - "2001:448a:2010::/42": "7713", - "2402:800:5bd3::/44": "7552", - "2a0e:b107:10c0::/44": "211495", - "2001:df0:7080::/48": "23954", - "2001:67c:24cc::/48": "12464", - "2408:840d:9c00::/42": "17621", - "240a:a845::/32": "144767", - "2607:1a00::/32": "22653", - "2a02:b50:8003::/34": "48910", - "2408:8957:2140::/40": "17816", - "2800:160:1511::/42": "14259", - "2a0f:2740::/29": "36351", - "240e:108:8b::/48": "137695", - "2a02:2af8:403::/45": "702", - "2408:8256:3a61::/43": "17623", - "240a:a57c::/32": "144054", - "240e:fc:7000::/32": "134772", - "2a0c:4c0::/29": "52080", - "2401:d800:b910::/42": "7552", - "2606:6a80::/32": "394384", - "2804:37bc::/32": "266433", - "2a02:26f0:85::/46": "20940", - "2a02:26f7:d210::/48": "36183", - "2a0e:b107:1110::/44": "42394", - "2409:8904:6740::/42": "24547", - "2600:380:ac80::/38": "7018", - "2804:3454::/32": "265451", - "2804:82e0::/32": "272162", - "2a04:8740::/29": "44212", - "2001:559:83f9::/48": "7015", - "2600:1004:b140::/42": "6167", - "2600:1017:b0b0::/41": "6167", - "2804:5f5c::/32": "269094", - "2a02:26f7:bec1::/46": "20940", - "240a:a927::/32": "144993", - "240a:acee::/32": "145960", - "2a01:b740::/47": "714", - "2a07:db01::/47": "204527", - "2001:e10::/32": "7539", - "2405:9400::/32": "45172", - "2600:200d:4000::/30": "33517", - "2a00:86c0:2040::/47": "40027", - "2001:67c:2ad0::/48": "60053", - "2400:c540:66::/40": "59238", - "2401:e380:7551::/48": "131091", - "2001:16d8:55::/46": "16150", - "2001:4490:4c1c::/46": "9829", - "2604:c340::/32": "17055", - "2620:c2:c000::/48": "13383", - "2a02:6680:21f0::/44": "16116", - "2a06:98c1:50::/45": "13335", - "2402:5b00:20::/41": "18002", - "240a:a179::/32": "143027", - "240a:a2ea::/32": "143396", - "240e:438:1c40::/38": "4134", - "2a01:468::/29": "5403", - "2a05:14c0::/29": "28686", - "2604:1700::/48": "23237", - "2804:5968::/36": "268188", - "2804:620c::/32": "28225", - "2804:7e70::/32": "271624", - "2605:3380:3000::/36": "62947", - "2804:41e0::/32": "267462", - "2a00:ff0:1234::/48": "41494", - "2a02:26f7:e04d::/42": "20940", - "2a03:c980:b957::/48": "210079", - "2001:559:4f6::/48": "62644", - "2405:58c0:3e00::/40": "133101", - "240a:a716::/32": "144464", - "2a00:d100::/32": "15704", - "2a02:9b0:4023::/32": "35819", - "2a0d:f407:a4::/48": "50219", - "2001:559:84d2::/48": "33491", - "2001:67c:2e74::/48": "60396", - "2400:8000:3003::/32": "4800", - "2600:1417:4c::/47": "24319", - "2408:8026:100::/38": "17621", - "2408:8656:2d00::/38": "17816", - "2800:200:f1d0::/36": "12252", - "2800:370:48::/48": "28006", - "2001:678:15c::/48": "209616", - "2401:f540:6::/47": "134094", - "2804:14c:3b9c::/42": "28573", - "2804:5178::/32": "52714", - "2a01:cd00:80d0::/48": "28708", - "2a0b:b580::/48": "43304", - "2001:559:84e0::/48": "33287", - "2001:d98:e000:7::/64": "26415", - "2001:49f0:a05e::/47": "174", - "2606:2800:422b::/48": "14153", - "2a0b:20c0:2001::/36": "205766", - "2804:15a8::/32": "263401", - "2a02:26f7:7a::/48": "36183", - "2a03:d1c0::/32": "41690", - "2a0b:e46:1::/48": "203055", - "2001:df0:1a00::/48": "132779", - "2404:e100:2001::/48": "55685", - "2405:25c0:a200::/40": "131969", - "2a03:ac40:1::/48": "212882", - "2a05:547::/32": "206766", - "2a0d:60c7::/32": "208861", - "240e:980:9300::/40": "134768", - "2a04:a900:2::/48": "43067", - "2a05:f180::/29": "200836", - "2a09:bac0:174::/48": "13335", - "2001:559:8545::/48": "7016", - "2001:559:c0d2::/45": "7922", - "2409:8010:3100::/30": "9808", - "240a:aac9::/32": "145411", - "2607:f4e8:412::/36": "22822", - "2806:230:5013::/48": "11888", - "2001:550:9d01::/38": "174", - "2600:1480:6800::/48": "21342", - "2a02:ac80:6001::/35": "25145", - "2001:579:b884::/41": "22773", - "2001:1520:3::/48": "34011", - "2402:c480:9001::/33": "63916", - "2a00:d520::/29": "15600", - "2a01:9700:1484::/46": "8376", - "2a0a:ab40::/47": "205988", - "2408:8957:5200::/40": "17622", - "240a:a5ae::/32": "144104", - "2804:cc4:11::/32": "52551", - "2001:559:96::/48": "33287", - "240a:a675::/32": "144303", - "240a:adc1::/32": "146171", - "2804:250c::/32": "264255", - "2001:678:cf0::/48": "60557", - "2001:af0::/32": "5588", - "2400:a980:1fff::/48": "133515", - "240e:67c:c400::/39": "140330", - "2a0e:fd45:b00c::/30": "44103", - "2c0f:f7f8:1::/46": "10753", - "2401:4900:3b00::/42": "45609", - "2401:5c00::/32": "9889", - "2401:a580::/46": "55403", - "240a:a424::/32": "143710", - "240a:a6fd::/32": "144439", - "2800:200:e221::/41": "12252", - "2804:25bc::/44": "264299", - "2400:a980:50fd::/46": "133111", - "2409:8028:1800::/40": "56041", - "2405:13c0::/32": "135808", - "2408:8656:30f1::/45": "17816", - "2804:1654::/33": "263282", - "2403:a8c0::/32": "131149", - "2409:8044:2b14::/28": "24445", - "2401:d800:f200::/42": "7552", - "2001:559:389::/48": "22258", - "2001:67c:149c::/48": "44968", - "2406:7400:80::/46": "24309", - "240a:ac8c::/32": "145862", - "2a09:b180::/29": "56485", - "2001:559:800b::/45": "7922", - "2604:2e8e:2000::/38": "30036", - "2800:bf0:3800::/46": "52257", - "2a01:b540::/29": "15600", - "2001:559:825c::/48": "33659", - "2001:67c:18e4::/48": "199957", - "2401:d800:5330::/41": "7552", - "2803:7200:8006::/47": "27696", - "2402:3a80:c060::/48": "38266", - "2409:8030:2900::/38": "9808", - "2803:d8a0::/32": "266812", - "2a0c:dec0:f100::/48": "207063", - "2001:559:837c::/48": "20214", - "2001:dcd:40::/48": "38796", - "2600:14c0:9::/48": "20940", - "2604:ee00:3::/48": "18865", - "2620:196::/32": "14014", - "2a06:aa40::/32": "51944", - "2401:d800:9830::/40": "7552", - "2409:8915:5800::/39": "56044", - "240a:a047::/32": "142721", - "2600:1012:b100::/42": "6167", - "2804:1eb8::/32": "52564", - "2a05:4100::/29": "204272", - "2001:559:27e::/47": "33651", - "2001:559:82e2::/48": "7015", - "2406:f380:1::/48": "29066", - "2801:0:3b0::/48": "19429", - "2001:559:82f5::/48": "22909", - "2001:44b8::/45": "4739", - "240a:adb4::/32": "146158", - "2804:18f0::/32": "61764", - "2806:230:402a::/48": "265594", - "2a02:26f7:ea44::/48": "36183", - "2a02:6c20:3::/48": "201922", - "2406:2000:a0::/48": "24376", - "2605:7f80::/32": "19032", - "2a00:15c0::/32": "31543", - "2a00:7d20::/32": "44671", - "2a01:110::/32": "6584", - "2a02:26f7:d209::/46": "20940", - "2a07:9a40::/36": "30081", - "2001:559:8282::/48": "33660", - "240a:acd8::/32": "145938", - "2620:31:4000::/40": "14977", - "2804:7f40::/32": "271676", - "2001:559:11f::/42": "7922", - "2406:e000:c05::/43": "23655", - "240e:438:7240::/37": "4134", - "240e:473:6050::/39": "4134", - "2620:116:800c::/46": "16509", - "2806:21b::/47": "19332", - "2a06:d180::/29": "51184", - "2801:1be::/40": "19429", - "2803:7680::/33": "22541", - "2804:36d8::/32": "266376", - "2402:800:9ce0::/39": "7552", - "2a00:d1c0::/32": "198694", - "2a02:503:2::/45": "5538", - "2a09:bac0:181::/48": "13335", - "2a01:a0a0::/48": "35501", - "2a02:390::/32": "12496", - "2001:559:805e::/48": "33657", - "2001:559:823e::/48": "7922", - "2804:79e8::/32": "271335", - "2a0b:33c0:107::/48": "57395", - "2001:1a68:2a::/48": "206838", - "2406:4a00::/48": "56038", - "2804:6218::/32": "269275", - "2001:df7:bd00::/48": "45312", - "240a:a3d4::/32": "143630", - "2620:104:400c::/46": "15248", - "2804:80dc::/32": "272417", - "2001:19f0:1000::/37": "20473", - "2401:bd00:dc03::/48": "38636", - "2a0a:60c1:2::/48": "212782", - "2408:80ea:76a0::/41": "17816", - "2a01:6f0:fffe::/48": "36351", - "2a05:bd02::/29": "42221", - "2a06:6540:1000::/48": "34893", - "2403:8300:82bf::/48": "24442", - "2606:2800:4050::/48": "14210", - "2607:fdf0:5e49::/46": "8008", - "2a02:26f0:ce00::/48": "34164", - "2400:dd01:301c::/30": "7497", - "2a01:358:3b12::/33": "9121", - "2a0f:5940::/30": "209372", - "2405:1c0:6631::/45": "135062", - "240a:a1ca::/32": "143108", - "2a07:cd40::/29": "212855", - "2001:4878:a204::/48": "12222", - "240a:ac72::/32": "145836", - "2801:11e::/47": "3816", - "2a00:ed20::/32": "64401", - "2a02:ee80:420d::/46": "3573", - "2a0c:b640::/44": "34872", - "2001:df6:7a80::/48": "142054", - "2409:8907:7620::/39": "24547", - "2620:8d::/48": "23342", - "2a02:26f7:c309::/46": "20940", - "2a02:27b0:5600::/32": "9146", - "2a05:5504:10::/47": "8218", - "2001:9b8:3::/32": "6774", - "2403:a040:ce01::/48": "38047", - "240a:a6a5::/32": "144351", - "240e:3b9:6400::/35": "140312", - "2800:160:1869::/43": "14259", - "2405:a000:13::/48": "55844", - "2604:6600:38c::/34": "40676", - "2607:f920::/32": "11758", - "2001:559:8413::/48": "7016", - "240a:a462::/32": "143772", - "2620:139:7000::/40": "396950", - "2804:3798:10::/32": "266423", - "2806:2f0:3002::/42": "17072", - "2001:253:132::/48": "142098", - "2001:4830:c500::/40": "27552", - "2401:3c0:216::/44": "45528", - "2600:1007:f010::/40": "22394", - "2a02:d78::/32": "44819", - "2a02:26f7:f784::/48": "36183", - "2c0f:f348:1601::/32": "24757", - "2800:5f0:103a::/34": "22724", - "2804:c00:a100::/38": "52655", - "2405:b7c0::/32": "139112", - "2600:380:b480::/39": "20057", - "2804:10ec::/32": "52864", - "2804:501c::/32": "268370", - "2804:5ea4::/32": "269047", - "2c0f:fe18::/32": "37179", - "240a:a3c2::/32": "143612", - "240e:438:8c20::/43": "140647", - "2600:1406:ac01::/35": "20940", - "2a0f:aa40::/29": "207646", - "2a05:9f06::/31": "206898", - "2001:df1:300::/48": "136350", - "2401:b0c0:a::/48": "136941", - "2402:800:5ee0::/44": "7552", - "2402:6e80::/32": "139100", - "2402:8a80::/32": "134375", - "2409:8020:c1::/43": "56046", - "2a02:26f7:d588::/48": "36183", - "2a09:f907::/32": "62200", - "2401:2d80::/48": "58641", - "2401:4900:22f0::/39": "45609", - "2408:834e::/27": "4837", - "2409:8907:7420::/39": "24547", - "2a02:166b::/32": "51088", - "2a04:5b05::/32": "203974", - "2804:4c48::/32": "267361", - "2001:559:20f::/48": "7016", - "2403:fc80::/32": "63501", - "2408:8956:1240::/40": "17622", - "2409:8a3c::/35": "24444", - "2600:1405:d001::/34": "20940", - "2600:1406:37::/44": "35994", - "2620:39::/48": "39984", - "2804:5ad4::/32": "268799", - "2804:6080::/32": "269171", - "2c0f:f1a0:8200::/33": "37314", - "2001:df4:9980::/48": "141007", - "2400:b200:4104::/32": "37963", - "2408:8756:2c00::/40": "135061", - "2602:fef2::/36": "396313", - "2607:f278::/32": "6360", - "2804:5004::/32": "268364", - "2a02:26f7:ca00::/48": "36183", - "2001:559:8350::/48": "7922", - "2a03:e140:41::/48": "44056", - "2a05:840::/48": "43350", - "2a0f:9c00::/29": "211546", - "240a:ab50::/32": "145546", - "2001:df1:e300::/48": "132402", - "2403:6d00::/40": "56094", - "2405:1300::/32": "58698", - "2001:500:53::/45": "12041", - "2001:67c:16b0::/48": "198093", - "2001:1248:553f::/41": "11172", - "2600:1f1c::/36": "16509", - "2604:bac0::/32": "19748", - "2a00:a180::/32": "51922", - "2a0b:1300:8000::/48": "198018", - "2001:559:c1b0::/48": "22909", - "2409:8914:8200::/39": "56044", - "2620:65:c000::/48": "15053", - "2a02:26f7:d4d0::/48": "36183", - "2a03:f580:2::/32": "15763", - "2001:678:d24::/48": "15830", - "2404:26c0::/48": "135987", - "2406:2000:1d1::/32": "10310", - "2406:6e00:fff0::/44": "7280", - "240a:a52b::/32": "143973", - "240a:ab55::/32": "145551", - "2a00:800:429::/41": "1257", - "2620:13b:a000::/44": "393657", - "2001:1248:561b::/42": "11172", - "2001:12f0:b6f::/43": "1916", - "2403:9000::/32": "7594", - "2405:800:a000::/35": "4817", - "2408:8956:a700::/40": "17816", - "2605:a900:8::/48": "26793", - "2607:fc58:1:97::/64": "13536", - "2001:dcc:4::/48": "23599", - "2402:ef19::/39": "7633", - "2405:600::/46": "55805", - "2408:8719::/30": "4837", - "240a:a01e::/32": "142680", - "2600:140f:c::/48": "20940", - "2804:6834::/32": "269676", - "2001:559:86db::/48": "33660", - "2804:1d04:f000::/36": "61689", - "2a0e:fd45:2b14::/46": "44103", - "2404:d00::/32": "58616", - "2600:40f1:102::/28": "701", - "2602:fc8a::/40": "399588", - "2620:120:2000::/40": "393983", - "2a04:92c7:53::/32": "62240", - "2001:559:c27c::/47": "33652", - "2605:940::/37": "396919", - "2804:2b90::/32": "265160", - "2a0f:9400:fa0::/43": "53356", - "2a02:1390:4000::/40": "21351", - "2001:550:1200:4::/63": "174", - "2001:c20:48a2::/48": "9255", - "240a:a0dd::/32": "142871", - "240a:af94::/32": "146638", - "2600:370f:728a::/42": "32261", - "2600:6c38:8ea::/47": "20115", - "2620:123:200b::/45": "30103", - "2803:c200:100::/44": "22411", - "2402:d0c0::/45": "35913", - "2403:f3c0::/32": "131626", - "2605:a404:68b::/43": "33363", - "2800:200:e291::/42": "12252", - "2a0e:7d40::/41": "209833", - "2402:e280:2126::/44": "134674", - "240e:1a:120::/44": "134756", - "2a03:80::/32": "57154", - "2001:559:2ef::/48": "33652", - "2001:67c:15f4::/48": "41103", - "2001:1a11:119::/45": "42298", - "2804:2bf4::/32": "262785", - "2804:3970::/32": "266030", - "2a04:3c0::/29": "57099", - "2001:559:8225::/48": "7015", - "2001:67c:13b0::/48": "34953", - "2600:40ff:fcfa::/47": "701", - "2a04:e1c0:1::/48": "60781", - "2001:559:288::/48": "33657", - "2800:2000::/20": "7303", - "2a02:26f0:b601::/39": "20940", - "2400:9380:9230::/47": "4809", - "2803:c240:1100::/36": "41095", - "2804:2238::/38": "264598", - "2a08:600:99::/48": "206747", - "2a11:ab00::/32": "209164", - "2803:ecc0:600::/34": "264814", - "2001:7b8::/37": "12859", - "2001:df2:7d00::/48": "45780", - "2401:d800:7c90::/42": "7552", - "2403:0:e::/39": "4755", - "2409:8c14:f0::/44": "9808", - "240a:ad49::/32": "146051", - "240d:c010:69::/48": "139341", - "2404:2280:147::/48": "24429", - "240e:97d:2000::/36": "134764", - "2800:40:30::/47": "16814", - "2803:32a0::/32": "266858", - "2806:100f::/27": "8151", - "2001:be0::/32": "13005", - "2405:ba00:880c::/48": "7160", - "2804:1c9c::/32": "61665", - "2401:b780:5000::/48": "65435", - "2409:8c28:201::/46": "56041", - "2409:8d05::/32": "24547", - "2a01:3f8::/32": "34270", - "2a01:9700:105c::/46": "8376", - "2a04:9e00::/29": "62183", - "2a07:35c2::/31": "197561", - "2803:1b40::/32": "27843", - "2a02:cb40::/30": "20546", - "240e:bf:b000::/36": "134768", - "2a00:1570::/32": "39308", - "2a02:970:1407::/41": "44002", - "2a02:26f0:6901::/38": "20940", - "2001:559:c342::/47": "7922", - "2001:678:290::/48": "206814", - "2402:800:52c5::/43": "7552", - "2600:1902::/31": "19527", - "2a03:47c0::/35": "21277", - "2001:559:2bc::/48": "7922", - "2a02:26f7:bd81::/46": "20940", - "2a06:f902::/36": "56630", - "2607:f368:3221::/46": "32982", - "2620:12e:1002::/44": "396075", - "2804:3bcc:8000::/35": "266171", - "2a02:2e02:2e40::/42": "12479", - "2607:fcd0:fa80:8908::/54": "8100", - "2a02:26f7:e644::/48": "36183", - "2a07:2d80::/29": "42929", - "2a07:3502:1070::/48": "38915", - "2001:67c:13e4::/48": "51410", - "2606:45c0::/35": "26073", - "2804:7eac::/32": "271639", - "2001:978:3c03::/45": "174", - "2600:14a0:100::/48": "16625", - "2607:f250:d024::/48": "7046", - "2607:fb10:7142::/47": "2906", - "2a02:6f8::/32": "39287", - "2001:559:23c::/47": "7922", - "2401:ac00::/32": "9268", - "2a02:26f7:e9c4::/48": "36183", - "2a0a:e580::/29": "208861", - "2001:559:8254::/48": "33651", - "240e:62:f000::/36": "4134", - "2804:26c0::/32": "263854", - "2a02:26f7:f000::/48": "36183", - "2001:559:32f::/48": "33489", - "2402:800:5955::/42": "7552", - "240e:3bd:1800::/34": "4134", - "2600:1408:3401::/36": "20940", - "2602:806:5000::/44": "22617", - "2804:3b40::/32": "266138", - "2806:230:400d::/48": "11888", - "2403:8400:10::/47": "17917", - "240a:afa9::/32": "146659", - "240e:cf:8000::/36": "134238", - "2804:2bdc::/47": "265181", - "2001:559:866c::/48": "33651", - "2001:678:564::/48": "56439", - "2402:800:3955::/42": "7552", - "2409:8008:2900::/35": "24547", - "240a:a3e4::/32": "143646", - "2605:4840:ffff::/48": "63473", - "2801:15:d000::/48": "28116", - "2001:388:608c::/48": "56132", - "240e:d:a800::/37": "136192", - "2602:fe27:a0::/48": "6473", - "2604:3400:abca::/48": "209453", - "2a00:e200:105::/32": "41313", - "2001:559:80c2::/48": "33657", - "2001:fd8:301e::/47": "132199", - "2001:4408:5225::/46": "4758", - "240a:ac93::/32": "145869", - "2804:3480::/32": "265462", - "2a02:e0:14::/34": "34984", - "2a04:5200:68::/48": "200740", - "2001:579:d0e4::/39": "22773", - "2804:4900:8000::/33": "267158", - "2a02:e00:ffe7::/48": "61272", - "2a02:d100::/29": "197155", - "2a0e:a280::/29": "60262", - "2405:a040::/32": "131667", - "2804:5b24::/32": "268821", - "2806:2f0:1024::/41": "22884", - "2a07:7ec0::/29": "59441", - "2a0e:5cc0::/29": "43282", - "2c0f:f7a8:9210::/47": "4809", - "2001:470:c4::/47": "6939", - "2403:4e00:30e::/43": "45528", - "2404:f4c0:fac0::/47": "142284", - "2405:1c0:6771::/46": "135062", - "2602:ffa2::/36": "209", - "2603:c0fa:4000::/35": "20054", - "2a06:8784::/32": "205112", - "2400:cb00:184::/44": "13335", - "2600:6c7f:9150::/44": "20115", - "2a05:3580:ee00::/35": "35807", - "2a06:1c0::/30": "50873", - "2600:1409:7801::/37": "20940", - "2a02:26f7:c705::/46": "20940", - "2001:559:c001::/48": "33491", - "2607:f738:b80::/37": "17184", - "2a02:26f7:df80::/48": "36183", - "2a0f:9340:3d::/48": "1299", - "2001:559:c32c::/47": "33659", - "2408:820c:9c10::/42": "17621", - "2409:8062:2100::/36": "9808", - "2606:2800:5100::/46": "15133", - "2806:2f0:50a1::/41": "17072", - "2001:550:7202::/45": "174", - "2401:d800:f700::/42": "7552", - "240a:a809::/32": "144707", - "2606:5980::/32": "11071", - "2001:ee0:9140::/40": "45899", - "2a01:9700:10f0::/46": "8376", - "2607:ff28:a::/33": "62904", - "2401:4800:3021::/48": "38457", - "2607:f6f0:7001::/48": "394749", - "2804:4170::/39": "267433", - "2a01:190:15ef::/48": "44753", - "2001:4ca0::/29": "12816", - "2400:a800::/32": "2514", - "240a:a568::/32": "144034", - "2600:1802:3::/45": "16552", - "2602:fed2:7106::/48": "23470", - "2801:80:1b80::/48": "266461", - "2804:214:c009::/34": "26615", - "2804:4368::/37": "267568", - "2a00:4802:350::/42": "13124", - "2001:559:8451::/48": "7015", - "2001:ac8:87::/48": "9009", - "2409:802f:2b08::/32": "56041", - "240e:67f:c600::/34": "4134", - "2606:4700:310c::/48": "13335", - "2408:8456:4e00::/42": "17622", - "2409:8030:3100::/36": "9808", - "2600:381:200::/39": "20057", - "2a07:4f00::/29": "31263", - "2a0e:2d47::/32": "35913", - "2001:559:596::/47": "33287", - "2001:67c:3c4::/48": "1136", - "2001:4878:b038::/48": "12222", - "2401:d800:96c0::/42": "7552", - "2801:80:22b0::/48": "267001", - "2804:5e8::/32": "262549", - "2a02:26f7:c4c4::/48": "36183", - "2001:49f0:d200::/48": "30058", - "2804:19f4::/32": "61828", - "2804:3d1c::/32": "266254", - "2a03:8920::/32": "41103", - "2a0e:b102:160::/44": "212546", - "2401:d800:2140::/42": "7552", - "2406:a1c0:2::/48": "131921", - "2800:200:bc10::/39": "12252", - "2a02:1628::/32": "12360", - "2001:470:eb::/45": "6939", - "2607:f0d0:2200::/36": "36351", - "2806:2f0:3501::/42": "17072", - "2a07:9e00::/29": "20740", - "2408:8956:cdc0::/38": "17622", - "240a:abfe::/32": "145720", - "2603:3:6000::/39": "398101", - "2804:370::/32": "262881", - "2a00:1288:7c::/48": "43428", - "2001:57a:3a06::/33": "22773", - "240a:a0e5::/32": "142879", - "240a:a4b0::/32": "143850", - "240a:ac4e::/32": "145800", - "2a07:e03:30::/39": "210083", - "2a0a:7e80::/29": "203203", - "2001:550:2f01::/35": "174", - "2001:559:164::/48": "33489", - "2402:800:7750::/42": "7552", - "2c0f:f060::/32": "328154", - "2001:559:75d::/48": "7725", - "2405:9800:9804::/47": "45430", - "2a03:a960:30::/32": "61317", - "2c0f:f178::/32": "32437", - "240a:aa14::/32": "145230", - "2607:f778::/32": "32035", - "240a:ab37::/32": "145521", - "240a:ae01::/32": "146235", - "2804:6b64::/32": "270397", - "2a01:8840:72::/45": "12041", - "2a02:ee80:4178::/40": "3573", - "2001:559:c145::/48": "33652", - "2001:df4:6300::/48": "137487", - "2001:4b38::/32": "25220", - "240a:a210::/32": "143178", - "2804:39fc::/32": "266063", - "2a00:fa00::/32": "12926", - "2a10:7a40::/47": "39910", - "2001:559:8239::/48": "7725", - "2a0c:1700:2::/29": "205112", - "2001:559:80dc::/48": "7922", - "2001:559:8226::/48": "33657", - "2001:67c:176c::/48": "31725", - "2804:16b0::/36": "61910", - "2a00:d8c0:100::/48": "50716", - "240a:a7ba::/32": "144628", - "2610:e0:5000::/32": "2572", - "2800:3a0:5::/46": "23201", - "2a00:c5a0::/32": "39279", - "240a:af8e::/32": "146632", - "2804:3ea0::/32": "266610", - "2a01:8840:e2::/45": "12041", - "2a01:8840:f5::/48": "207266", - "2a02:2e02:8410::/40": "12479", - "2a0b:d280::/32": "20655", - "2001:559:38c::/48": "7922", - "2001:678:f90::/48": "39138", - "2408:8459:7010::/42": "17623", - "2607:f1c0:100::/32": "8560", - "2001:dce:7000::/48": "45285", - "2408:840e:dd00::/34": "17621", - "2600:100f:d000::/42": "6167", - "2604:c4c0::/32": "11635", - "2804:73f8::/32": "270949", - "2001:678:c44::/48": "49752", - "2402:e280:2136::/44": "134674", - "2402:fd40::/48": "137889", - "2407:1e40:fcf::/32": "141732", - "240a:a011::/32": "142667", - "2604:5500:8000::/38": "19165", - "2607:2480:2::/48": "395450", - "2406:3d40::/32": "134980", - "2605:6700::/32": "11976", - "2a01:c50f:100::/38": "12479", - "2a0c:b641:493::/48": "53356", - "2404:8c00::/32": "3605", - "2001:df5:3600::/48": "56236", - "2404:8380::/32": "135158", - "2620:8:4300::/48": "174", - "2a03:10c0::/30": "61044", - "2a04:4ac0::/29": "200844", - "2a0a:2880::/29": "208861", - "2a02:26f7:b5c8::/48": "36183", - "2401:c500:fd11::/48": "54994", - "2803:e560::/32": "262186", - "2a0c:9a40:8113::/45": "204438", - "2a0f:5180::/32": "29802", - "2a10:2f01:2aa::/48": "212995", - "2405:b40:41::/46": "55674", - "2408:840d:5d00::/42": "17621", - "2804:1158::/32": "263672", - "2804:3f10:6203::/35": "262566", - "2806:230:6031::/48": "11888", - "2a04:2b00:6374::/48": "42044", - "2a0a:8e40::/29": "203605", - "2a0e:b105:520::/46": "20473", - "2a02:26f7:cd45::/46": "20940", - "2001:559:c274::/48": "33651", - "2404:8d02:3000::/36": "10089", - "2409:4001:4000::/30": "55836", - "2409:8028:3092::/42": "56041", - "2409:8e4c::/30": "9808", - "2606:8200::/32": "32400", - "2806:230:1015::/48": "11888", - "2001:67c:5f8::/48": "198089", - "2001:1248:9c70::/40": "11172", - "2a02:26f7:e108::/48": "36183", - "2402:800:512b::/41": "7552", - "2408:8957:8800::/40": "17622", - "2605:e380::/32": "7954", - "2804:63a0::/32": "269373", - "2a00:9100::/32": "196925", - "2a0e:b107:ac2::/48": "204307", - "2001:67c:2658::/48": "204179", - "2001:4980::/33": "7753", - "2400:90c0::/32": "136184", - "2408:840d:4e00::/42": "17621", - "2409:8b00::/31": "56048", - "2600:1405:1001::/36": "20940", - "2804:818c::/32": "272461", - "2001:559:19b::/48": "33662", - "2001:559:c3eb::/48": "33668", - "240a:ad1f::/32": "146009", - "2804:e8:8100::/33": "28280", - "2804:fc::/32": "28142", - "2a00:e79::/30": "34602", - "2001:678:54::/48": "57382", - "2408:84f3:f820::/43": "17816", - "2605:62c0::/32": "395349", - "2620:149:1a10::/39": "714", - "2800:160:1d47::/44": "14259", - "2804:3d4:38::/45": "262401", - "2804:1950::/32": "61786", - "240a:a6b4::/32": "144366", - "2804:1a48::/32": "61850", - "2a02:2e02:9c70::/40": "12479", - "2408:8459:4230::/41": "17622", - "2804:184c::/39": "61928", - "2806:230:1008::/48": "265594", - "2a01:4020:17::/42": "25369", - "2a02:26f7:ba01::/46": "20940", - "2a04:5f80::/32": "60233", - "2402:8100:2458::/45": "55644", - "240a:a0c5::/32": "142847", - "240a:a8a7::/32": "144865", - "2600:1a0e:ce11::/48": "10307", - "2604:d600:1211::/46": "32098", - "2620:186::/46": "396013", - "2a03:2a80::/32": "196782", - "2001:559:c2b3::/48": "7015", - "2402:e380:304::/48": "134997", - "2a02:c6c1::/48": "44050", - "2403:6dc0::/40": "134526", - "240e:473:a520::/41": "140486", - "2800:200:b3b0::/41": "12252", - "2804:270::/40": "262814", - "2806:2f0:93e1::/37": "17072", - "2a0e:9cc0:2000::/36": "6810", - "2407:8a40::/47": "139516", - "240e:473:7b20::/41": "140486", - "2a04:5980::/29": "201587", - "2001:559:822b::/45": "7922", - "2402:800:5d71::/44": "7552", - "2a03:dfc0::/47": "203520", - "2a0c:3800:ff::/39": "205315", - "2001:1250:e300::/44": "22894", - "2001:1938:4007::/48": "33438", - "2604:a880:50::/48": "14061", - "2604:ba00::/32": "11798", - "2804:c48:ef01::/35": "52687", - "2a0d:b201:1000::/44": "206026", - "2001:559:e4::/47": "33651", - "2001:559:818d::/46": "7922", - "2401:8000:221::/26": "9919", - "2408:8656:3d00::/28": "17816", - "2804:130::/32": "28264", - "2804:2140:1017::/42": "53059", - "2a0e:8f02:f01c::/48": "211715", - "2001:5a8::/32": "46375", - "2620:27::/48": "10846", - "2a0f:9401::/32": "53356", - "2001:56b:800c::/34": "852", - "2a02:26f7:bac8::/48": "36183", - "2a03:ebc0:5000::/36": "31400", - "2001:253:111::/48": "142077", - "240e:908:8200::/29": "4134", - "2600:1419:5401::/36": "20940", - "2803:3640::/32": "264750", - "2a06:3280::/31": "201722", - "2a10:ca80::/29": "44592", - "2a10:a8c0::/29": "211678", - "2001:1248:8720::/46": "11172", - "2408:8459:6e50::/35": "17816", - "2804:29c0:c000::/34": "264032", - "2806:230:1021::/48": "11888", - "2a02:26f7:d74c::/48": "36183", - "2a0b:f080::/32": "213319", - "2a10:8980::/29": "15623", - "2001:dce:100::/48": "38064", - "2600:1404:7001::/38": "20940", - "2803:8600::/32": "27759", - "2a02:26f7:bd01::/46": "20940", - "2a02:26f7:bdcc::/48": "36183", - "2a07:80c0::/29": "202829", - "2001:4118::/32": "2607", - "2803:71a0::/32": "267702", - "2a02:26f7:1e::/48": "36183", - "2402:800:9eb1::/44": "7552", - "2403:300:1d00::/32": "714", - "2a0e:3580::/29": "30788", - "2a11:6c6:1000::/32": "210916", - "2001:550:2100:300::/44": "174", - "2a07:4d80::/32": "206332", - "2a07:dfc0::/32": "212944", - "2001:470:5f::/48": "198362", - "2001:559:81ba::/48": "13367", - "2001:1248:993f::/41": "11172", - "2406:840:c80::/48": "139317", - "2600:1416:e000::/48": "25019", - "2602:ff7f::/32": "7219", - "2a04:eec0::/29": "57795", - "2804:1628::/32": "263271", - "2001:559:c380::/48": "33659", - "2001:4488:2001::/33": "7713", - "2400:dcc0:a404::/39": "38631", - "2401:7400:801:b::/61": "4773", - "2409:8f05::/27": "9808", - "240a:a720::/32": "144474", - "2605:a900:1005::/44": "46887", - "2a01:8840:19::/48": "207266", - "2a0e:fd45:2b13::/48": "52112", - "2401:4900:6050::/40": "45609", - "2402:800:9dfe::/38": "7552", - "2409:8080:2a9f::/48": "56040", - "2409:8a03::/32": "9808", - "2a03:5a00:3b::/48": "60299", - "2405:1c0:6535::/41": "55303", - "240e:16:b800::/31": "4134", - "240e:982:6100::/40": "138982", - "2600:6c38:a01::/43": "20115", - "2804:55e0::/32": "267962", - "2a01:260::/29": "34779", - "2a03:1ac0:5f50::/32": "9049", - "2c0e:7f85::/28": "36974", - "2402:4840::/32": "137329", - "2407:c340::/48": "140822", - "2604:ee40::/32": "395646", - "2801:17:2800::/48": "13489", - "2804:a6c::/33": "262282", - "2804:5eb0::/35": "269050", - "2a10:7800::/29": "46723", - "2001:559:8290::/48": "7016", - "2001:5f8::/33": "5056", - "2409:8e44::/28": "24445", - "240e:931::/30": "4134", - "240e:938:f901::/44": "4134", - "2a06:5040:10::/45": "4785", - "2404:3d00:417c::/32": "3573", - "2406:9b00::/32": "56264", - "2800:381:5151::/48": "265760", - "2804:42d8::/32": "267531", - "2804:7378::/32": "270917", - "2a01:510::/32": "43708", - "2a04:7b40::/29": "200003", - "2001:559:83c7::/48": "33491", - "2001:c20:700a::/36": "3758", - "2409:8000:2900::/40": "9808", - "2a03:39c0::/29": "43858", - "2a09:4c2:4c::/29": "58057", - "2a0c:4ac0:1100::/38": "60548", - "2a0d:a140::/29": "24639", - "2001:559:19f::/48": "21508", - "2402:4e00:2::/45": "45090", - "2406:3003:1060::/43": "55430", - "240a:a78f::/32": "144585", - "2600:370f:5282::/47": "32261", - "2600:3c0f:6::/48": "63949", - "2804:383c:300::/32": "52601", - "240e:473:2e00::/41": "140485", - "2a02:2e02:a90::/39": "12479", - "2a03:b000:400::/40": "42695", - "2a04:3740::/48": "35625", - "2001:559:8103::/48": "7725", - "2001:1620:2016::/39": "13030", - "2402:e380:31b::/48": "141706", - "2600:1407:b::/43": "20940", - "2804:1868::/32": "61930", - "2a02:26f7:f6c4::/48": "36183", - "2a05:79c0:1::/46": "27381", - "2001:df3:7880::/48": "140583", - "2801:80:23f0::/48": "268293", - "2804:77dc::/32": "271204", - "2a00:91c0::/32": "204558", - "2a01:a280:4::/48": "206357", - "2403:5440::/32": "138033", - "2409:8904:e0b0::/39": "24547", - "240e:473:7000::/41": "140485", - "2607:f368:3210::/44": "32982", - "2a00:f18::/32": "39545", - "2001:4b20:0:193::/64": "65505", - "2606:8180::/32": "31769", - "2801:0:360::/48": "27951", - "2804:5c7c:100a::/32": "268911", - "2a00:1cb8:1::/46": "12713", - "2a02:26f0:6401::/38": "20940", - "2c0f:f568::/46": "37451", - "2a00:fda0::/32": "62365", - "2001:67c:640::/48": "59398", - "2607:3900::/32": "27382", - "2400:cb00:270::/48": "13335", - "2401:d800:2740::/42": "7552", - "2404:3440:2100::/36": "138534", - "2404:8d02:2000::/41": "9587", - "2600:9000:117e::/48": "16509", - "2a02:b48:8000::/44": "39572", - "2001:848::/32": "2595", - "2604:1380:45d0::/38": "54825", - "2a01:8840:e6::/44": "12041", - "2a02:e58:3::/32": "209523", - "2804:2b44:37::/44": "265144", - "2a09:88c0::/29": "62336", - "2a0d:27c0::/29": "197706", - "2001:57a:f210::/46": "22773", - "240e:e:c000::/37": "4134", - "2804:7e58::/32": "271618", - "2806:1040::/40": "8151", - "240e:97c:5000::/32": "4134", - "2a00:67e0::/30": "203986", - "2a05:ba00::/32": "207595", - "2001:559:c364::/48": "7016", - "2001:4200:49::/38": "2018", - "2a00:90c0::/38": "197745", - "2603:40ff:6000::/36": "10578", - "2800:40:36::/32": "16814", - "2a04:29c2::/32": "42821", - "2a04:4e40:7c30::/41": "54113", - "2c0f:ee78:8003::/33": "61317", - "2001:df3:1600::/48": "9555", - "2402:800:5b8d::/43": "7552", - "2001:678:f64::/48": "16509", - "2001:df0:e400::/48": "133661", - "2406:db00::/32": "59216", - "2a00:12a8::/29": "6855", - "2001:559:36b::/48": "7725", - "2402:1440:31::/39": "63689", - "2408:820c:1a50::/34": "17621", - "2620:103:e0f9::/48": "13893", - "2804:3764:fffd::/46": "266409", - "2a0e:e1c0::/29": "15391", - "2620:100:9000::/47": "26211", - "2804:fe0:2400::/42": "263049", - "2a06:9dc4::/32": "41917", - "2001:268:852::/32": "2516", - "240a:abc3::/32": "145661", - "2804:1040:facf::/42": "263626", - "2804:277c::/32": "263904", - "2804:40bc::/32": "265978", - "2a0a:e5c0::/48": "209898", - "2a0d:8400::/32": "56630", - "240a:af3b::/32": "146549", - "2610:20:9147::/48": "3477", - "2001:67c:153c::/48": "3301", - "2001:bf7:1350::/44": "213106", - "2402:800:fba0::/41": "7552", - "240e:473:4a50::/39": "4134", - "2610:e0:b000::/33": "2572", - "2a02:bf0:1003::/36": "25106", - "2a06:e881:79ff::/48": "211230", - "2001:1248:9822::/44": "11172", - "2405:6e00:8ee::/47": "133612", - "2603:c0fa:8000::/35": "20054", - "2607:f750:4000::/40": "23473", - "2a0e:9f40::/29": "208436", - "2a0f:c780::/29": "50113", - "2001:559:3c8::/47": "33491", - "2404:c140:156::/32": "138997", - "2408:8456:aa40::/37": "17816", - "2620:11f:f000::/40": "2381", - "2803:6604:6000::/37": "28075", - "2001:67c:784::/48": "201511", - "2404:18c:2001::/40": "6619", - "240a:aecb::/32": "146437", - "2605:2800:102::/40": "3354", - "2a00:d40:100::/45": "2597", - "2a00:1d24::/30": "49544", - "2a02:ff0:4::/48": "12735", - "2001:678:540::/48": "16108", - "2001:df3:a800::/48": "133408", - "2804:3c7c::/32": "266215", - "2a00:17f8:db::/32": "47622", - "2a0f:7cc0::/29": "34591", - "240a:aa29::/32": "145251", - "2600:5800:f627::/48": "11351", - "2a02:2160:7111::/46": "201308", - "2a06:e881:102::/48": "202959", - "2600:1406:9401::/36": "20940", - "2800:2f0::/48": "27668", - "2a03:8ac0:250::/48": "47523", - "2a05:b380::/29": "207307", - "2001:448a:1090::/42": "7713", - "2408:8957:d600::/40": "17622", - "2804:3c6c::/32": "266210", - "240a:af40::/32": "146554", - "2604:2d80:f400::/36": "30036", - "2607:f4e8:e::/47": "22822", - "2800:68:25::/44": "61468", - "2a06:e881:73ff::/48": "16509", - "2a0b:dc80::/29": "206170", - "2a03:2880:f04d::/43": "32934", - "2400:7400:e02f::/43": "23736", - "2400:f7c0::/32": "133952", - "2407:d40::/43": "139009", - "2408:8459:c450::/38": "17816", - "240a:af07::/32": "146497", - "2800:200:e801::/41": "12252", - "2804:28d0::/32": "263982", - "2404:7ac0:6b4::/48": "209306", - "2408:840c:5200::/40": "17621", - "2409:8907:7220::/39": "24547", - "2604:1280:4::/46": "11696", - "2800:484:9300::/36": "14080", - "2001:559:80a1::/46": "7015", - "2001:559:82b7::/48": "21508", - "2001:df1:bb80::/48": "18207", - "240e:109:8046::/48": "134756", - "240e:44d:7700::/41": "140345", - "2a06:e881:6203::/48": "61138", - "2605:bc0:800::/48": "54201", - "2a00:8a04::/44": "34414", - "2a02:ee80:41d7::/48": "3573", - "2a03:2880:f202::/44": "32934", - "2a10:d380::/29": "50892", - "2400:1bc0::/32": "59368", - "2403:6d00:cd::/46": "56094", - "2409:8c28:203::/36": "56041", - "2804:c6c:8105::/33": "52704", - "2a04:6a40::/29": "49892", - "2c0f:1c00::/32": "328802", - "2409:4054:3000::/31": "55836", - "2804:710:90::/32": "17222", - "2001:678:d94::/48": "49183", - "2620:11c::/46": "27647", - "2a10:c941:10:a::/47": "35277", - "2001:559:f7::/48": "21508", - "2804:14d:a281::/41": "28573", - "2a00:d30:122::/45": "47201", - "2a02:26f0:ec01::/38": "20940", - "2a02:26f7:df84::/48": "36183", - "2a02:26f7:f389::/46": "20940", - "2a0f:e280::/29": "50629", - "2001:559:b8::/47": "33657", - "240a:a5f0::/32": "144170", - "2806:286:a800::/33": "265524", - "2001:388::/44": "7575", - "2001:44c8:4130::/44": "45430", - "240e:104:7c00::/40": "137690", - "2605:a404:b22::/40": "33363", - "2a0f:20c0::/29": "60262", - "2001:418:1456:b00::/51": "2914", - "2001:559:c146::/48": "33651", - "2001:c38:9057::/42": "9931", - "2a05:8880:5::/30": "34304", - "2804:6978::/32": "270272", - "2001:df4:1b80::/48": "140874", - "240a:aad0::/32": "145418", - "240a:ac46::/32": "145792", - "2600:1419:ac01::/35": "20940", - "2602:feda:d9b::/48": "57401", - "2602:ffc8:3d20::/43": "20278", - "2804:248:9::/39": "28598", - "2a02:2428::/32": "196845", - "2c0f:f4e8::/32": "327750", - "2c0f:fef8::/43": "15399", - "2c0f:fcb0:6000::/32": "36916", - "2001:468:500::/48": "14041", - "2001:500:2c::/48": "12041", - "2607:f110:140::/32": "21889", - "2804:2df8:eebf::/41": "265315", - "2804:67c4::/32": "269649", - "2a00:4802:370::/40": "13124", - "2a0e:b107:1330::/44": "212357", - "240e:3b6:7a00::/32": "140313", - "2600:1000:10::/32": "22394", - "2a10:b080::/29": "198473", - "240a:a7c6::/32": "144640", - "2600:100d:b170::/40": "22394", - "2806:261:1400::/41": "13999", - "2a02:27aa::/32": "59729", - "2001:559:82d4::/48": "33660", - "2001:67c:488::/48": "3246", - "2401:d800:4d0::/42": "7552", - "2607:f7a8:603::/45": "16657", - "2801:0:100::/48": "28039", - "2a01:e35::/28": "12322", - "2a02:26f7:df48::/48": "36183", - "2001:438:fffd:110::/63": "3456", - "2001:559:8741::/48": "7015", - "2001:559:c359::/48": "7015", - "2804:68c8::/33": "269715", - "2a0c:54c0::/32": "204065", - "2001:67c:2560::/48": "57763", - "2400:4480:8000::/48": "17426", - "2607:f3f8::/45": "19019", - "2620:57:4003::/48": "39122", - "2620:84:c000::/48": "30242", - "2804:24d4::/32": "52781", - "2a00:ece1::/48": "5606", - "2001:218:3004::/48": "20940", - "2409:8924:7300::/37": "56046", - "2620:106:6008::/48": "377", - "2620:131:1038::/41": "26450", - "2804:22c:f002::/37": "22689", - "2804:3cf0::/32": "266243", - "2001:1250:2000::/44": "22894", - "2001:13b4:4005::/32": "3356", - "2402:800:9b63::/43": "7552", - "240a:aaf7::/32": "145457", - "2804:802c:201::/46": "271734", - "2a02:1398::/32": "16350", - "2a00:8a00:a000::/36": "45769", - "2803:7d80:5041::/32": "11664", - "2a02:26f7:d3c5::/46": "20940", - "2a03:6400:30::/44": "11054", - "2a0e:1c80:5::/48": "40028", - "2001:67c:2a18::/48": "58320", - "2401:7e80::/32": "133324", - "2405:2300:ff03::/44": "13443", - "2801:80:2310::/48": "267130", - "2801:16e:2::/48": "19429", - "2804:390::/36": "52956", - "2a06:4480::/29": "200430", - "2800:160:1b62::/45": "14259", - "2804:4758::/32": "267047", - "2001:590:3803::/48": "206264", - "2001:5e0:24::/32": "16713", - "2804:2dac::/35": "265296", - "2001:67c:478::/48": "212774", - "2001:1260::/47": "13591", - "2405:c9c0:1389::/32": "138823", - "2409:8d15:a00::/35": "56044", - "2a05:cf00::/29": "201014", - "2408:8956:4700::/40": "17816", - "240a:ac2a::/32": "145764", - "2804:180c::/32": "61924", - "2a03:5840:ffff::/48": "200995", - "2a0b:2a00::/32": "51933", - "2400:7400:e026::/48": "38044", - "2a02:2578::/35": "51375", - "2a10:fc40::/29": "57777", - "240a:a94d::/32": "145031", - "2804:360::/32": "53088", - "2a05:5b80::/29": "38999", - "2c0f:f3a8::/32": "37308", - "240a:ace4::/32": "145950", - "2605:5fc4::/32": "397881", - "2a03:7e0::/32": "12859", - "2400:cb00:a4e0::/45": "13335", - "2607:fda8::/46": "6128", - "2801:1b4::/46": "14080", - "2a0d:c9c0:1::/46": "49645", - "2803:d700:cc00::/38": "61461", - "2804:188:6007::/32": "262750", - "2a02:6c00::/37": "786", - "2a0d:2581:fffe::/47": "209261", - "2001:16d8:a0a3::/36": "16150", - "2001:48e8::/32": "1249", - "2401:a040::/32": "131586", - "2401:d800:9050::/42": "7552", - "2605:e740:ff04::/46": "398710", - "2a03:2f80::/32": "197308", - "2001:559:482::/48": "7922", - "2406:8dc0:2003::/48": "38173", - "2409:8d50::/30": "56047", - "2804:1774::/32": "263145", - "2804:74a0::/32": "270993", - "2a04:2e80:21::/48": "44397", - "2a07:f600:4033::/48": "6679", - "2800:484:cf00::/40": "14080", - "2804:43c::/34": "262422", - "2804:3310::/32": "265114", - "2804:7898:5ff0::/44": "271253", - "2a02:26f7:e885::/46": "20940", - "2001:df6:e780::/48": "142334", - "240e:947:2000::/36": "4134", - "2602:fd37::/46": "398493", - "2620:122:1005::/46": "29954", - "2a0a:a3c0:c0::/32": "41955", - "2604:e000::/32": "27553", - "2a09:19c0::/48": "35691", - "2001:559:238::/48": "33287", - "2402:800:38d3::/44": "7552", - "2402:1440::/42": "63689", - "2408:8456:bc40::/38": "17816", - "2600:2000:3020::/48": "15135", - "2804:175c::/32": "263140", - "2804:1818::/32": "262657", - "2a04:4e40:e600::/48": "54113", - "2001:fd8:31c0::/42": "132199", - "2403:2c00:f000::/43": "4058", - "2406:3003:2030::/41": "55430", - "2804:565c::/32": "267993", - "2a00:66a0::/35": "199270", - "2a02:2638:7::/44": "44788", - "2a02:26f7:d78c::/48": "36183", - "2001:400:201:73::/61": "3425", - "240a:a63b::/32": "144245", - "2620:8c:4000::/48": "54054", - "2804:658::/32": "262578", - "2a02:26f7:f885::/46": "20940", - "2a05:1540::/29": "47755", - "2406:ac00:203::/48": "23750", - "2804:61dc:5000::/32": "269261", - "2a04:7340::/33": "62172", - "2401:ff80:1589::/46": "133954", - "240e:473:1050::/39": "4134", - "2606:4600::/32": "23118", - "2803:d100:3000::/33": "52362", - "2804:3720:1000::/34": "266391", - "2a01:cb22:8000::/34": "3215", - "240a:a7ca::/32": "144644", - "2a02:26f0:5::/44": "20940", - "2001:978:4a00::/48": "51863", - "2001:4888:8023::/48": "6167", - "2409:805c:3900::/33": "9808", - "2409:8087:5020::/40": "56047", - "2804:14d:e622::/41": "28573", - "2804:125c::/32": "263472", - "240a:a1cd::/32": "143111", - "240a:a2a6::/32": "143328", - "2804:145c:5000::/32": "263327", - "2804:30ac::/32": "264968", - "2001:4d0:241b::/48": "22767", - "2402:d340::/32": "38381", - "2408:84f3:3490::/38": "17816", - "240e:3be:f100::/36": "4134", - "2607:fdf0:5c99::/38": "8008", - "2804:6048::/32": "269157", - "2a01:68c0::/32": "35168", - "2a0a:ec40::/32": "62214", - "2001:7c8::/29": "2110", - "2409:8060:1900::/34": "9808", - "2607:f348:3595::/48": "16626", - "2001:678:2c0::/48": "206740", - "2001:67c:2588::/48": "8447", - "2001:1b78::/32": "28855", - "2804:13c::/32": "14571", - "2001:1248:5582::/45": "11172", - "2408:8346:1200::/32": "4837", - "2604:6400::/33": "29974", - "2804:16d8::/38": "262729", - "2a0f:640::/48": "207983", - "2400:adc0::/45": "9541", - "2401:d800:5f80::/42": "7552", - "240a:a360::/32": "143514", - "2804:4350::/32": "267562", - "2a02:2b60:103::/32": "42947", - "2a09:b640::/29": "209255", - "2001:4f8:12::/32": "1280", - "2804:28dc::/32": "263985", - "2804:38e8::/32": "266509", - "2804:713c::/32": "270776", - "2001:1388:602::/39": "6147", - "2800:bf0:28a::/43": "27947", - "2804:2050:4abd::/35": "264485", - "2804:4ee0::/32": "268288", - "2a0c:cb40::/29": "48571", - "2001:502:7094::/48": "396566", - "2001:678:bf8::/48": "29301", - "2620:105:4000::/46": "26001", - "2a05:89c0::/29": "49223", - "2a0d:1d00::/29": "212974", - "2001:520:1018::/46": "8103", - "2604:340::/32": "32281", - "2801:80:1f0::/48": "52996", - "2804:14c:7f00::/41": "28573", - "2001:559:8136::/48": "7016", - "2404:9700::/32": "10023", - "2605:cc80::/32": "398700", - "2804:4600::/32": "266961", - "2a0d:5642:129::/48": "35487", - "2a0e:8f02:f015::/48": "212243", - "2604:4d40:6a::/48": "213073", - "2a03:9900::/40": "8990", - "2001:559:8552::/48": "33651", - "2408:8957:e500::/40": "17816", - "240a:ad64::/32": "146078", - "240e:983:1e03::/45": "58543", - "2804:5ca0::/32": "268920", - "2a04:1700::/29": "41354", - "2001:12f0:dc0::/38": "1916", - "2403:2c00:d000::/34": "4058", - "240a:a7b0::/32": "144618", - "2806:370:80d0::/44": "28403", - "2a0e:8f02:1050::/40": "204446", - "2804:e28::/40": "52547", - "2001:559:807a::/47": "33651", - "2404:ed::/30": "703", - "2408:84f3:b410::/42": "134543", - "2a02:2b50:ffff::/48": "21286", - "2a01:7d20:102::/38": "203645", - "2001:559:8502::/48": "20214", - "2001:67c:25b8::/48": "41038", - "2402:9e80:41::/48": "138558", - "2409:8c01::/30": "9808", - "2605:f500:404::/39": "1828", - "2800:160:17bb::/41": "14259", - "2804:6b90::/32": "270408", - "2a06:c580::/29": "62297", - "2402:b140::/32": "135425", - "2404:3900:a92::/48": "38320", - "2800:440:86::/48": "27738", - "2804:80d0::/32": "272414", - "240a:a0d7::/32": "142865", - "2605:7900:100::/48": "19133", - "2001:559:8631::/48": "33287", - "240a:a2de::/32": "143384", - "240e:44d:1100::/41": "140345", - "2801:c4:15::/48": "262922", - "2a02:2380:1::/45": "51941", - "2001:67c:1808::/48": "56837", - "2001:67c:22a8::/48": "197416", - "2400:8700::/39": "55394", - "240a:aeb1::/32": "146411", - "2620:118:a000::/47": "42633", - "2001:4998:65::/46": "10310", - "2804:145c:8890::/38": "263327", - "2804:7414::/32": "270957", - "2a02:26f7:ba49::/42": "20940", - "2406:9c40::/35": "55366", - "2407:3b80::/32": "136557", - "240a:a288::/32": "143298", - "2801:10:c800::/48": "14080", - "2a02:26f7:e940::/48": "36183", - "2a0a:cf40::/29": "44295", - "2806:2f0:5022::/41": "17072", - "2a00:b3a1::/32": "31027", - "2a01:42c0::/32": "208966", - "2a03:5640:f500::/48": "16509", - "2610:a1:301c::/48": "12008", - "2803:9800:9099::/39": "11664", - "2804:2164:8100::/33": "264552", - "2a02:26f7:d248::/48": "36183", - "2a07:aa00::/45": "3549", - "2001:67c:1460::/45": "47487", - "2001:129c:8000::/33": "22356", - "2400:9380:85c0::/44": "136167", - "2408:8459:1e10::/42": "17623", - "2408:8656:3b00::/37": "17816", - "2804:5490::/32": "268658", - "2806:290::/32": "8151", - "2001:67c:2f70::/48": "3303", - "2405:7c00:1000::/32": "24028", - "2804:6474:c000::/34": "269429", - "2a06:9f45:1111::/48": "17830", - "2a0f:4e80::/29": "50629", - "2001:19e8:d1::/44": "2576", - "2406:3002:50::/50": "138345", - "2600:803:270::/48": "12234", - "2600:1012:9000::/43": "6167", - "2a0b:a740::/32": "25276", - "2408:8256:3b95::/48": "17816", - "2409:8914:4600::/39": "56044", - "2803:a00::/32": "52381", - "2804:7868::/32": "271240", - "2a00:1f50::/32": "196655", - "2a0b:6cc1:8::/29": "202984", - "2a0b:9fc0::/48": "48858", - "2402:c800:ff70::/48": "131155", - "240a:ad08::/32": "145986", - "2804:38b0:280::/37": "266494", - "2804:7e54::/32": "271617", - "2a02:5d0::/29": "21032", - "240a:a8eb::/32": "144933", - "2606:ae00:bf80::/33": "7287", - "2001:4918::/32": "7849", - "2400:ca08::/31": "23688", - "2401:d800:94a0::/41": "7552", - "2404:4a00:1000::/48": "55423", - "2600:1005:f110::/30": "22394", - "2a02:26f0:96::/48": "34164", - "2600:370f:7020::/46": "32261", - "2602:fdc4::/48": "63430", - "2800:160:2b78::/40": "14259", - "2804:1b04:10::/46": "53048", - "2a09:60c0::/29": "207668", - "240e:967:1800::/34": "4134", - "2600:1409:9000::/48": "35994", - "2605:3c80:fc::/46": "32787", - "2a00:1850:6a1::/48": "29357", - "2a05:b80::/29": "50867", - "2c0f:eed0::/32": "328316", - "2001:67c:380::/48": "41599", - "2a01:728:109::/29": "16347", - "2a01:8000::/48": "60672", - "2a02:7d0::/32": "34141", - "2a0a:5ec0::/29": "206123", - "2400:9280:12::/48": "59159", - "2402:ef2d:b::/30": "7633", - "2620:171:a::/43": "42", - "2804:3888::/32": "266484", - "2001:388:1030::/48": "137188", - "2409:8050:3002::/40": "56047", - "2604:2ec0::/32": "13984", - "2607:3100::/32": "13994", - "2804:4d4c::/32": "267422", - "2401:d800:db70::/40": "7552", - "2402:800:f2c0::/42": "7552", - "2402:d7c0:5::/48": "133234", - "2804:4c14:ab01::/35": "267348", - "2402:8a00::/33": "24477", - "240a:a4ba::/32": "143860", - "2600:1409:a801::/37": "20940", - "2001:df5:4b80::/48": "141404", - "2407:4e00::/47": "17995", - "240a:aeed::/32": "146471", - "2001:678:d7c::/48": "213003", - "2400:d8c0::/32": "38525", - "2401:4900:4ca0::/44": "45609", - "240a:a5be::/32": "144120", - "2a02:ee80:400e::/43": "3573", - "2a0a:f880::/29": "60111", - "2a05:300::/47": "59895", - "2402:ef02::/31": "7633", - "2403:1cc0:1101::/46": "45352", - "2405:17c0:a2::/32": "139331", - "2409:8053:800::/47": "56047", - "2600:1408:e801::/37": "20940", - "2600:1417:9001::/36": "20940", - "2607:f790:f000::/36": "12129", - "2a06:ec00::/29": "553", - "2a07:7800:7::/29": "31727", - "2a0f:3540::/29": "60262", - "2001:559:7c7::/48": "20214", - "240e:438:9620::/43": "140647", - "2800:b000::/32": "7303", - "2804:f40::/32": "263573", - "2a09:0:11::/48": "3214", - "2001:678:358::/48": "206514", - "2403:df00:3::/32": "9292", - "2405:6800:3000::/33": "18207", - "2409:8020:71::/40": "56046", - "2600:6c3b:491::/41": "20115", - "2804:1274::/32": "263477", - "2a00:49e0::/32": "199361", - "2a05:fdc0:1001::/30": "42313", - "2001:559:871b::/48": "7016", - "2402:800:bbc0::/42": "7552", - "2404:880:22::/48": "38750", - "2604:82c0:c::/32": "62917", - "2804:38ec::/32": "266510", - "2a06:7600::/29": "44205", - "2a0e:dc80::/29": "202346", - "2620:0:2840::/48": "16813", - "2804:2d40::/32": "265269", - "2a02:2228::/32": "51378", - "2a03:1100::/32": "42903", - "2001:253:13a::/45": "38272", - "2404:2480:8101::/33": "135391", - "2605:ef80::/45": "36492", - "2804:14d:8a00::/40": "28573", - "2a09:2700:8::/48": "208187", - "2402:e880::/32": "9808", - "240a:a73d::/32": "144503", - "240e:473:1250::/39": "4134", - "2602:feda:c90::/44": "212360", - "2804:14f4::/32": "263361", - "2a02:26f7:de8c::/48": "36183", - "2001:67c:21f0::/48": "52191", - "2001:fe8:10::/48": "24435", - "2001:1838:9001::/48": "13331", - "2804:43b4::/32": "267585", - "2401:3bc0:601::/39": "137409", - "2408:8459:9610::/42": "17623", - "2409:804b:2908::/48": "24445", - "2603:4000::/31": "3", - "2001:559:c02a::/45": "7922", - "2001:df0:f900::/48": "139397", - "2402:800:3d0f::/43": "7552", - "2407:6340::/32": "135021", - "2a01:1e8::/32": "33843", - "2001:12e0:806::/37": "10429", - "2001:1938:2002::/40": "33438", - "2400:ec40::/32": "10214", - "2401:d380::/32": "38031", - "2804:418::/32": "262415", - "2a02:ac80:a001::/35": "25145", - "2001:c20:4891::/45": "9255", - "2001:18b0::/32": "12282", - "2804:79f4::/32": "271338", - "2806:2f0:4341::/42": "17072", - "2a02:26f7:5f::/48": "20940", - "2001:450:2016::/32": "3549", - "2408:8957:f1c0::/38": "17622", - "2607:8b00::/48": "36454", - "2804:6fc8:1700::/36": "270684", - "2001:559:8617::/48": "33657", - "2a03:7960::/46": "47661", - "2a06:5100::/29": "15576", - "2600:1409:6801::/37": "20940", - "2804:7158::/32": "270783", - "2001:44c8:4680::/44": "131445", - "2606:2800:4ab8::/46": "15133", - "2606:3a80:200::/48": "54913", - "2800:b10::/48": "27884", - "2a01:4800::/32": "8767", - "2a03:9d40:2000::/37": "41095", - "240a:a84b::/32": "144773", - "2606:ab00::/47": "55106", - "2a02:25b0:aaaa::/48": "42422", - "2404:58c0:1::/48": "138296", - "240e:37d:1a00::/34": "140330", - "2604:4280::/38": "14866", - "2001:559:83fa::/48": "7922", - "2401:cf80::/33": "55303", - "2406:8600:efa8::/48": "45502", - "240e:3ba:5600::/34": "4134", - "2604:d600:1563::/44": "32098", - "2620:0:30::/45": "8075", - "2804:3200::/32": "265050", - "2402:800:5401::/44": "7552", - "2a03:9b40::/32": "9063", - "2a05:abc0::/29": "43260", - "2001:559:572::/48": "7015", - "2001:559:86f1::/48": "33659", - "2806:1070:cfff:9::/34": "8151", - "2a02:2680::/32": "51675", - "2a02:26f7:f481::/46": "20940", - "2a05:1200::/30": "201654", - "2404:4a00:2:1::/48": "45629", - "2803:6a60::/46": "262186", - "2a00:1af4:1001::/30": "35699", - "2a02:2278::/38": "28907", - "2001:559:2fb::/48": "33287", - "2a02:26f7:c3cc::/48": "36183", - "2a06:6540:2003::/48": "397568", - "2a0a:e2c1::/32": "50560", - "2a11:2380::/29": "60935", - "2001:418::/48": "2914", - "2605:5440:a::/32": "23328", - "2620:1e1::/36": "26848", - "2804:2424::/32": "264204", - "2400:bb40:8888::/48": "136787", - "2800:160:118c::/43": "14259", - "2a02:26f7:bc48::/48": "36183", - "2a04:4e40:3e00::/48": "54113", - "2801:1f:4800::/48": "269848", - "2804:5100::/34": "268424", - "2804:549c::/32": "268661", - "2a07:7340::/29": "34549", - "2001:503:bfb0::/48": "7342", - "2001:1b00::/32": "20597", - "2404:4fc0::/32": "38047", - "240e:fd:a000::/36": "140308", - "2800:370:42::/48": "28006", - "2804:1030::/32": "53163", - "2407:2f00:103::/48": "38001", - "2804:14d:c887::/41": "28573", - "2806:2f0:3404::/42": "17072", - "2001:559:c28b::/48": "7922", - "240a:a238::/32": "143218", - "2a01:8b80::/29": "8821", - "2a03:7220::/32": "197422", - "2405:7e00:1000::/36": "17408", - "240a:a2e8::/32": "143394", - "2804:5368::/32": "268582", - "2400:ddc0:d000::/34": "4785", - "240a:aef3::/32": "146477", - "2607:f4f0::/32": "40581", - "2a02:ac80:f01::/35": "25145", - "2c0f:5900::/32": "60171", - "2403:ce00::/32": "9984", - "2804:28e0::/32": "262550", - "2409:871a::/29": "132525", - "240e:44d:3080::/41": "4134", - "2804:1690:880::/32": "263292", - "2a01:5b0:5::/48": "50611", - "2401:3bc0:1001::/44": "137409", - "2a01:5a00::/32": "9208", - "2001:559:275::/48": "7922", - "2409:807d::/30": "9808", - "2600:1003:f000::/44": "6167", - "2600:1417:62::/48": "20940", - "2804:2238:400::/39": "264598", - "2620:15c::/36": "45566", - "2a01:c910::/28": "3215", - "240a:ae2c::/32": "146278", - "2a06:ec0::/32": "8943", - "2804:7bd8::/32": "271458", - "2806:2f0:8004::/42": "17072", - "2a03:e140:1a::/48": "50317", - "2001:559:715::/46": "7922", - "2001:678:974::/48": "49697", - "2600:1006:f140::/44": "6167", - "2001:559:557::/48": "33491", - "2001:559:860b::/48": "7725", - "2409:801e:3005::/46": "9808", - "2001:559:8435::/48": "22909", - "2401:3c0:211::/46": "45528", - "2403:2e40:1::/46": "137959", - "240a:a705::/32": "144447", - "2603:ffb0::/29": "40676", - "2620:125:9070::/48": "397415", - "2404:8000:d3::/45": "17451", - "240a:ab92::/32": "145612", - "2600:1002:d030::/41": "6167", - "2607:fd48:184:3::/38": "13536", - "2801:1d:8801::/48": "18747", - "2001:559:3ed::/48": "33662", - "2001:67c:398::/48": "50213", - "2001:df1:3100::/48": "64050", - "2403:300:a14::/48": "6185", - "240a:a762::/32": "144540", - "2604:b180:510::/44": "14976", - "2a03:d000:9008::/48": "20632", - "2001:559:c152::/48": "33652", - "2600:1014:f000::/44": "6167", - "2607:a500:df11::/34": "12025", - "2804:2978::/32": "264017", - "2a03:5a00:d::/48": "58319", - "2401:d800:d3d0::/37": "7552", - "240a:ad8a::/32": "146116", - "2604:70c0::/32": "395163", - "2607:b600::/46": "10397", - "2804:18:7040::/44": "26599", - "2a02:26f7:dd09::/42": "20940", - "2a0a:4640::/44": "206177", - "240a:ad1c::/32": "146006", - "2600:1406:3601::/36": "20940", - "2800:bf0:2800::/48": "52257", - "2804:2674:10::/32": "264344", - "2a0f:5701:3521::/48": "206499", - "2a11:2480::/29": "61192", - "240a:a81e::/32": "144728", - "240e:3b5:3e00::/33": "140308", - "2804:5e6c::/32": "269032", - "2402:800:527f::/40": "7552", - "2602:fe9f:a00::/48": "23738", - "2001:559:c241::/48": "7725", - "2404:bf00:8000::/40": "9303", - "2405:f080:1e00::/46": "136907", - "2800:160:14e4::/44": "14259", - "2a06:7c80::/29": "204030", - "2a0a:3840::/29": "39287", - "2001:559:c35b::/45": "7922", - "240e:981:9000::/40": "58542", - "2803:13e0::/32": "270072", - "2a00:1970::/32": "12480", - "2a03:d9c0:3000::/48": "3214", - "2a0a:7c0::/29": "34909", - "2401:d800:2f70::/40": "7552", - "2406:daa0:4080::/44": "16509", - "2600:6c38:c8::/46": "20115", - "2604:61c0::/33": "29831", - "2605:ad80:12f0::/44": "62887", - "2607:f518:16d::/43": "46887", - "2a01:5b0:30::/32": "8391", - "2a0c:9a40:1022::/48": "213288", - "2409:8904:8790::/36": "24547", - "2605:5fcf::/32": "398481", - "2804:4420::/32": "267604", - "2a02:608::/32": "41698", - "2a05:ca80::/29": "49603", - "2001:559:8261::/48": "33651", - "240a:a579::/32": "144051", - "2a0d:ca40::/48": "8423", - "2a04:be20::/30": "47258", - "2001:559:c350::/48": "7922", - "2404:1f00:ffa6::/47": "55947", - "2408:8020::/29": "4808", - "2408:8656:a59::/37": "17622", - "2606:7800::/32": "11598", - "2804:5c14::/32": "268886", - "2a03:4a0::/32": "201888", - "2a0e:b107:cb0::/44": "212948", - "2c0f:f690:8000::/36": "37019", - "2c0f:fa90::/32": "37271", - "2607:f8c0:208::/48": "25885", - "2804:3b30::/32": "266134", - "2a01:9f00::/32": "42187", - "2001:1908::/32": "7029", - "2602:fe68::/36": "26370", - "2604:cc00::/48": "53292", - "2400:9380:9bc0::/44": "136167", - "2001:978:2308::/46": "174", - "2602:fe13:fa0::/44": "53356", - "2804:8280:800::/32": "272521", - "2804:9d4:1001::/34": "262996", - "2804:4a88::/32": "267246", - "2806:2f0:8041::/46": "17072", - "2a00:8860:b00::/40": "39239", - "2a05:1083:1100::/47": "142280", - "2a05:d050:6040::/44": "16509", - "2c0f:eb58::/32": "36924", - "2001:1248:a600::/43": "11172", - "2001:4400::/31": "4768", - "2602:ffb0::/46": "54726", - "2607:ffb0:3004::/44": "6327", - "2804:ad8::/33": "262494", - "2a00:aee0::/29": "60503", - "2a05:93c0::/29": "7979", - "2401:2900:8000::/45": "23679", - "240e:108:90::/48": "134420", - "2600:1406:8401::/36": "20940", - "2800:3c0:2130::/35": "19863", - "2a0b:2d87::/32": "35048", - "2401:d800:20e0::/39": "7552", - "240e:3b0:2c00::/35": "134774", - "2620:10c:7000::/44": "2906", - "2a06:8a07::/32": "204418", - "2408:84f3:d810::/42": "134543", - "2409:8915:5e00::/39": "56044", - "2a04:d380::/29": "41997", - "2c0f:fc88::/42": "36992", - "2401:f800::/32": "7529", - "2408:8459:ea10::/42": "17623", - "2607:ffd0:5::/39": "13767", - "2a00:11c0:43::/45": "42473", - "2a04:e9c0::/29": "34768", - "2a0c:140::/29": "31631", - "2a10:a380::/29": "196777", - "2402:3a80:640::/40": "38266", - "2600:370f:1120::/43": "32261", - "2804:3a1c::/32": "266071", - "2402:ee40:2::/48": "17754", - "240e:44d:6f00::/41": "140345", - "2804:18c4::/32": "53049", - "2804:6fc8:700::/40": "270684", - "2600:8807:9a82::/37": "22773", - "2602:fe3a:5::/48": "20119", - "2604:9d40:1e0::/44": "393290", - "2606:f500::/34": "11352", - "2a09:c400::/29": "13032", - "2a10:fa80:212::/48": "57050", - "2406:8800:9049::/46": "17465", - "240a:afa5::/32": "146655", - "2600:6c38:9e::/42": "20115", - "2604:d600:91e::/42": "32098", - "2606:9800::/32": "13536", - "2804:2c8c:4100::/32": "265226", - "2a07:b700::/29": "57626", - "2001:67c:10fc::/48": "3301", - "2402:8100:39c0::/44": "45271", - "2406:3400:201::/37": "10143", - "2600:6c38:22a::/43": "20115", - "2804:6648::/32": "269546", - "2a09:bac0:253::/48": "13335", - "2001:dd9::/48": "24302", - "2606:2800:4aec::/46": "15133", - "2001:67c:5dc::/48": "3303", - "2001:fd8:f180::/42": "132199", - "2001:559:71e::/48": "33287", - "2001:b28:f23e::/48": "42065", - "2001:4868:906::/40": "23148", - "2404:a800:2a01::/35": "9498", - "2604:d600:1f02::/34": "32098", - "2607:2200::/32": "17090", - "2804:40:e000::/35": "28657", - "2804:14d:b400::/40": "28573", - "2804:29f4:800::/32": "264047", - "2804:5540::/32": "268427", - "2a0b:8f00::/29": "33988", - "2001:697::/32": "199155", - "2405:9200:2100::/41": "131596", - "2408:8957:c600::/40": "17622", - "2803:c100::/32": "28103", - "2a02:470::/32": "42303", - "2001:67c:2e48::/48": "210140", - "2403:6cc0::/32": "138155", - "2602:feb4:240::/44": "25961", - "2602:ff85::/36": "14901", - "2804:2c5c::/33": "265214", - "2804:67a4::/46": "269641", - "2a00:f48::/32": "47447", - "2a04:4e40:c02::/41": "54113", - "2001:559:331::/48": "7015", - "2001:678:a10::/48": "204526", - "2402:800:9255::/42": "7552", - "2405:8a00:6036::/35": "55824", - "2620:134:1000::/44": "30025", - "2a02:26f7:bf00::/48": "36183", - "2804:6e10::/32": "270573", - "2001:559:c2c1::/48": "33287", - "2001:dc8:9000::/48": "131415", - "2001:df0:30f::/48": "9255", - "2804:7fb4:7f00::/32": "271704", - "2a01:bca0::/32": "202114", - "2408:84f3:a610::/42": "134543", - "2600:6c38:e0e::/47": "20115", - "2804:1ab0::/32": "61876", - "2a01:4d80::/32": "39702", - "2a0b:2980::/48": "206520", - "2001:1a11:6f::/43": "42298", - "2400:8b00:980::/42": "45727", - "2804:4aec::/32": "267272", - "2a02:26f7:ec00::/48": "36183", - "2a0e:97c5:750::/46": "20473", - "2602:806:7008::/45": "14618", - "2a06:2700::/29": "203020", - "2a07:bbc0:1::/48": "35365", - "2804:41a0:4000::/32": "267446", - "2001:559:83d9::/46": "33287", - "2001:67c:19e4::/48": "2119", - "2001:df0:500::/40": "132361", - "2408:8957:f4c0::/39": "17816", - "2800:160:1bf3::/37": "14259", - "2804:8cc:8::/46": "262394", - "2804:1e68:a::/32": "53006", - "2a00:d68::/32": "24594", - "2a02:26f7:c40c::/48": "36183", - "2001:df0:65::/48": "38567", - "2408:8459:a250::/37": "17816", - "2604:f1c0::/32": "27580", - "2804:802c::/39": "271734", - "2a01:8840:2a::/45": "12041", - "2a0e:b107:c10::/47": "137256", - "2a0e:c500::/29": "57878", - "2408:8001:3170::/44": "135061", - "240a:af32::/32": "146540", - "2a02:1630::/32": "30848", - "2a02:2e02:3000::/40": "12479", - "2a06:1a40::/29": "20988", - "2604:5740::/32": "19006", - "2800:380::/32": "22927", - "2804:36d4::/32": "266375", - "2a02:26f7:4b::/48": "20940", - "2a0f:9400:7350::/48": "14570", - "2604:b2c0:d00::/40": "7018", - "2803:ad80:16::/48": "42473", - "2804:52b8:c080::/38": "268537", - "2804:7710:8000::/33": "271152", - "2a02:2e02:1140::/40": "12479", - "2001:559:842e::/48": "33287", - "2001:912::/33": "51083", - "2400:a980:d00::/38": "133111", - "2610:a1:302c::/48": "12008", - "2a09:bac0:143::/48": "13335", - "2001:518::/32": "8001", - "2404:2440::/32": "132680", - "2404:bf40:f001::/48": "2764", - "2600:1419:a401::/36": "20940", - "2606:6c00:104::/44": "32787", - "2a04:a182::/32": "201301", - "2408:8459:2c10::/44": "17623", - "2602:80a:c000::/48": "399685", - "2620:11d:500c::/47": "393732", - "2800:110:3401::/45": "4270", - "2804:2e8::/46": "262847", - "2a02:2498:56::/38": "13213", - "2a02:d4e0::/30": "197491", - "2a0b:8400:1::/48": "43350", - "240e:473:5350::/40": "4134", - "2620:24:8080::/48": "23389", - "2804:2834::/32": "263947", - "2804:71ac::/32": "270804", - "2001:d08::/40": "9534", - "2401:cf80:6109::/45": "55303", - "2800:d302:11::/46": "11830", - "2a02:26f7:d3c0::/48": "36183", - "2001:550:4102::/38": "174", - "2403:a880::/32": "17964", - "240a:a2e1::/32": "143387", - "240a:a3b2::/32": "143596", - "2607:fdf8:db::/45": "13649", - "2804:640:3e81::/32": "262713", - "2804:677c::/32": "269631", - "2001:638:30e::/32": "680", - "2408:826a::/32": "4837", - "240a:a8c5::/32": "144895", - "2804:2080::/32": "264494", - "2a0a:9204:30::/48": "211375", - "2400:dc40::/32": "136440", - "2402:ee40:60::/40": "17754", - "240a:a8dd::/32": "144919", - "240a:ae0c::/32": "146246", - "2600:380:a380::/36": "20057", - "2401:d800:9b00::/42": "7552", - "2404:f4c0:800::/40": "17920", - "2600:141b:1000::/48": "35994", - "2606:45c0:1571::/48": "62623", - "2a00:fe0::/32": "34953", - "2a02:4140:5::/32": "43957", - "2a0a:90c0:1049::/45": "205080", - "2001:df0:5980::/48": "139041", - "2001:4838::/32": "29748", - "2600:1017:f010::/39": "6167", - "2804:e94:f12::/48": "262468", - "2405:8a00:2022::/43": "55824", - "240a:aeb9::/32": "146419", - "2803:b780:11::/42": "27742", - "2804:68d0::/32": "269718", - "2a00:7420::/33": "60893", - "240a:a39b::/32": "143573", - "2605:a401:81bc::/41": "33363", - "2806:2f0:83a1::/43": "17072", - "2a02:26f7:e308::/48": "36183", - "2a10:cbc0::/29": "49778", - "2001:dd8::/48": "24390", - "2404:ab80::/43": "55944", - "2600:140b:ec01::/35": "20940", - "2800:bf0:3003::/48": "27947", - "2804:6fb0::/32": "270677", - "2a03:7100::/29": "49567", - "2a0c:ac0::/29": "44659", - "2a0e:8c40::/29": "51659", - "2001:559:858c::/48": "7922", - "2606:3380:ffff::/48": "53334", - "2a00:1630::/33": "49544", - "2a02:26f7:c0c5::/46": "20940", - "2001:590:2005:200::/56": "16625", - "2407:bb00::/36": "45625", - "2801:1fc:1e::/48": "27951", - "2a00:1908:faca::/48": "44628", - "2404:8000:73::/44": "17451", - "2408:8256:337f::/48": "17816", - "2402:1c00::/36": "23838", - "240a:a21d::/32": "143191", - "2600:5801::/32": "7843", - "2a01:540:5000::/34": "12389", - "2a0a:e2c3::/32": "201525", - "2001:c20:c836::/48": "3758", - "2401:fa00:40::/47": "24424", - "2402:800:6211::/45": "7552", - "2a10:3000::/29": "2830", - "2001:559:c26f::/48": "33662", - "2607:f358:c::/43": "18779", - "2a01:a980::/29": "197524", - "2a05:3951::/32": "201503", - "2a0e:b107:240::/44": "204982", - "2001:559:8524::/44": "7015", - "2a02:26f0:6201::/40": "20940", - "2a0b:6c81::/32": "16509", - "2401:1c00::/34": "38809", - "2408:8957:ac00::/40": "17622", - "240e:5a:4600::/40": "140298", - "2600:2000:600::/44": "33517", - "2606:4700:85c0::/43": "13335", - "2804:7ff4::/34": "271720", - "2806:2f0:8221::/39": "17072", - "2408:8957:5900::/40": "17816", - "240e:95d:c00::/38": "4134", - "2600:6c7f:9040::/48": "20115", - "2602:fd92:100::/40": "39618", - "2604:1300:7701::/36": "3833", - "240a:a7b6::/32": "144624", - "2600:1403:6401::/36": "20940", - "2a0c:f440::/29": "200319", - "2001:559:244::/48": "7016", - "2407:7a80:11::/46": "132384", - "2600:1404:8401::/35": "20940", - "2602:fcff:16::/48": "213216", - "2605:b100:d00::/41": "577", - "2a00:d40:1::/48": "2597", - "2a06:1e00:18::/48": "60695", - "2804:154c:4409::/35": "263382", - "2804:6804::/32": "269665", - "2001:610::/29": "1103", - "2001:12f0::/42": "1916", - "2001:1a11:27::/41": "8781", - "2804:6620::/32": "269536", - "240e:979:1e00::/40": "134770", - "2604:880:5c::/48": "29802", - "2a00:f2a0::/32": "12555", - "2001:67c:738::/48": "43139", - "2001:7f8:1e::/48": "13004", - "2804:14c:9d84::/41": "28573", - "2a09:e1c1:eff0::/44": "210311", - "2a0a:cac0::/29": "31246", - "2406:d00::/48": "132165", - "240a:a964::/32": "145054", - "2607:fe28:5040::/32": "53347", - "2800:ba0:6::/48": "263812", - "2a02:2538::/32": "43012", - "2a09:fe00::/29": "209900", - "2a09:58c0:1::/48": "9186", - "2001:559:7f7::/48": "7015", - "240e:473:4800::/41": "140485", - "2600:370f:3581::/45": "32261", - "2605:59c1:2000::/32": "36492", - "2a02:ee80:4015::/42": "3573", - "2a05:4140:1a0::/48": "211358", - "2a0c:9840::/29": "202510", - "2001:559:8075::/48": "20214", - "2001:df4:4180::/48": "140917", - "2408:8459:b810::/42": "17623", - "240a:ae7e::/32": "146360", - "240e:44d:3000::/41": "140345", - "2606:7740::/48": "16509", - "2a00:1d38:feee::/39": "50655", - "2401:7400:2fe::/48": "132915", - "2402:fb00:4000::/32": "3300", - "2804:42d4::/32": "267530", - "2a01:8e80::/29": "8362", - "2a02:1140:100::/40": "43193", - "2001:67c:2390::/48": "21155", - "2600:100a:b1d0::/44": "6167", - "2404:6c00:a001::/33": "24324", - "2a02:970:1249::/40": "44002", - "2a0b:3b40::/29": "7", - "2001:67c:133c::/48": "35052", - "2001:67c:21b0::/48": "51871", - "2001:df4:8b00::/48": "137325", - "2001:15f8:1::/48": "25384", - "2804:e28:100::/32": "52547", - "2804:5d68::/32": "268970", - "2a04:b080::/29": "42343", - "2001:559:8260::/48": "33667", - "2001:4878:b102::/48": "12222", - "2607:f8b0::/33": "15169", - "2a00:114f:8::/32": "47764", - "2001:678:f4c::/48": "56793", - "2409:8053:2100::/37": "9808", - "240a:aee2::/32": "146460", - "2804:18:7000::/42": "26599", - "2001:559:349::/48": "33652", - "2403:8600:60e0::/47": "45820", - "2405:600:1008::/33": "55805", - "240a:a3e9::/32": "143651", - "2a06:1e00:5::/48": "60695", - "2001:67c:2e90::/48": "203918", - "2606:2800:4233::/48": "15133", - "2804:7e60::/32": "271620", - "2a02:26f7:cbc8::/48": "36183", - "2001:44b8:30cb::/48": "4739", - "2400:6280:109::/46": "132280", - "2405:7f00:3261::/36": "133414", - "2408:8459:4650::/36": "17816", - "2610:160:12::/32": "27325", - "2604:d600:15a2::/45": "32098", - "2a02:2aa8:121::/44": "702", - "2001:1520:102::/40": "34011", - "240a:a120::/32": "142938", - "2605:2700::/32": "47066", - "2a00:1898::/32": "44677", - "2a02:26f7:de85::/46": "20940", - "240a:aaa5::/32": "145375", - "2803:bc00::/38": "52438", - "2a03:ba40::/32": "39280", - "2404:6300::/35": "131310", - "2405:2840::/48": "135951", - "2a01:4400:1::/46": "1257", - "2804:7dbc::/32": "271579", - "2001:559:8699::/45": "7922", - "2001:559:8726::/48": "33657", - "2400:cb00:a970::/46": "13335", - "2600:140b:bc00::/48": "24319", - "2606:5000:c00::/35": "3908", - "2804:52f8:200::/40": "268554", - "2804:627c::/32": "269300", - "2a03:2887:ff2e::/43": "63293", - "2001:1248:9899::/48": "11172", - "2408:8768::/32": "4837", - "2800:200:b410::/42": "12252", - "2a04:9ac0::/32": "62242", - "2a09:4c0:304::/40": "58057", - "2406:280::/32": "24372", - "2607:fcd0:105:6408::/46": "8100", - "2a03:d500::/32": "35754", - "2a0e:cd00:680::/31": "23031", - "240e:473:8200::/41": "140485", - "2604:d600:1502::/45": "32098", - "2a02:220e:210::/31": "6697", - "2a02:26f7:ee45::/46": "20940", - "2a07:2a00::/29": "203099", - "2a0c:b641:4::/48": "34872", - "2401:2000::/33": "4608", - "2403:4c00::/32": "24453", - "2408:8409:9000::/40": "4808", - "2408:8957:c000::/40": "17622", - "2801:1d2::/48": "18747", - "2803:9c60:a000::/33": "27896", - "2804:4a8c:200::/32": "267248", - "2001:218:2200::/40": "18259", - "2600:140f:bc00::/48": "9498", - "2a0a:e700::/32": "3292", - "2600:1409:f000::/48": "35994", - "2001:559:c3c8::/48": "33651", - "2001:1260:c::/46": "28537", - "2402:3a80:1ab8::/41": "38266", - "2404:5cc0::/32": "136022", - "2406:bf00:1::/48": "45671", - "2409:8060:2100::/35": "9808", - "240a:ac83::/32": "145853", - "2620:fb::/48": "22651", - "2a02:6900:8807::/48": "43898", - "2a0b:6b83:2001::/33": "202562", - "2a04:2100::/31": "40999", - "2001:a98:30::/48": "1967", - "2405:6e00:f830::/48": "133612", - "240a:a29d::/32": "143319", - "2607:f510::/32": "21719", - "2800:40:2b::/45": "16814", - "2a02:8100::/27": "3209", - "2a03:2880:f23b::/45": "32934", - "2a10:a480::/29": "6729", - "2001:559:82e9::/46": "7922", - "2400:a980:cd::/43": "133111", - "2408:84f3:a210::/42": "134543", - "2801:96::/40": "28586", - "2804:ab8::/32": "52911", - "2a01:160::/32": "16186", - "2a02:cec0::/30": "25459", - "240a:a1ef::/32": "143145", - "2603:c010:8000::/36": "31898", - "2604:76c0::/32": "36103", - "2607:700::/37": "22343", - "2001:300::/32": "2497", - "2001:559:4fd::/48": "13367", - "2001:44b8:405f::/48": "4739", - "2a0f:5707:ab26::/48": "41108", - "2a0f:e580::/48": "197424", - "2408:8957:6200::/40": "17622", - "240a:ae18::/32": "146258", - "2602:fe30::/36": "394752", - "2605:6280::/32": "32338", - "2804:3a08::/32": "266066", - "2a02:2aa0:101::/43": "702", - "2a03:7300::/32": "8426", - "2001:504:2e::/48": "10578", - "2a02:26f0:ad01::/38": "20940", - "2a0f:5707:aac0::/44": "48646", - "2001:559:81ff::/48": "33657", - "2409:8a51:700::/36": "56047", - "2800:370:12::/48": "28006", - "2a07:a40:d::/29": "48821", - "240a:a400::/32": "143674", - "2a02:26f7:c541::/46": "20940", - "2a03:9520::/32": "42220", - "2804:47ac::/32": "267070", - "2001:418:1401:4::/64": "20940", - "2001:579:f184::/36": "22773", - "2001:1248:a4cc::/43": "11172", - "2404:4ac0::/32": "138572", - "2406:5800:800::/38": "45577", - "240a:a692::/32": "144332", - "240e:108:24::/48": "134768", - "2a0e:f40::/32": "208585", - "2001:559:c22e::/48": "33287", - "2804:548::/32": "53005", - "2001:c20:48b6::/48": "3758", - "240e:980::/35": "58519", - "2803:6604:6801::/39": "28075", - "2a00:1be7::/32": "205005", - "2a01:ad00::/45": "51865", - "2408:8956:1fc0::/34": "17622", - "2408:8957:9100::/40": "17816", - "240a:a798::/32": "144594", - "240e:67f:8800::/38": "140330", - "2607:f3a0:a00a::/48": "399809", - "2a02:26f7:34::/48": "36183", - "2a02:26f7:e704::/48": "36183", - "2a0e:b107:320::/44": "207756", - "2603:c0f2:4000::/35": "6142", - "2801:11:1000::/48": "264633", - "2804:652c::/32": "269473", - "2a10:6b00::/29": "398559", - "2001:480:32::/47": "668", - "2001:4b20:100:57a::/61": "34288", - "2804:bac::/32": "262317", - "2804:4ae8::/32": "267271", - "2a00:9801::/32": "51178", - "2a0a:7d80:2::/48": "56740", - "2001:559:81f9::/48": "7922", - "240e:44d:6600::/41": "140345", - "2600:1001:f100::/44": "6167", - "2801:136::/46": "19429", - "2a00:4760::/32": "39217", - "2a04:b5c0::/29": "2611", - "2a0c:a9c7:1::/48": "12938", - "2402:800:5b9b::/42": "7552", - "2600:6c38:d0::/45": "20115", - "2804:47d4::/32": "267079", - "2804:60c0::/32": "269188", - "2a02:26f7:c38b::/45": "20940", - "2001:559:8494::/48": "7922", - "240a:ab6d::/32": "145575", - "240e:473:5720::/41": "140486", - "2804:7eb8::/32": "271643", - "2a0c:8fc1::/40": "34081", - "240a:a629::/32": "144227", - "2606:ae80:1c10::/44": "25751", - "2606:ae80:1c20::/43": "19834", - "2610:108:4000::/48": "13506", - "2620:13f:d000::/44": "398767", - "2a01:c8c0::/28": "25454", - "2a0e:b107:10f0::/44": "213105", - "240a:a013::/32": "142669", - "240e:44d:4600::/41": "140345", - "2a0a:e5c0:22::/48": "213081", - "2a0d:5c80::/29": "200899", - "2001:67c:2e54::/48": "200871", - "2607:f798::/32": "812", - "2620:119:501d::/46": "13443", - "2a05:4140:7::/44": "211604", - "2a02:26f0:8201::/39": "20940", - "2001:559:c2b4::/48": "7922", - "2400:a980:14fe::/47": "133515", - "2408:8256:317c::/48": "17816", - "240a:a59f::/32": "144089", - "240a:af0f::/32": "146505", - "240e:44d:f00::/41": "140345", - "2a01:9bc0::/29": "39686", - "2a0d:5c0::/29": "61317", - "2a0b:e45:1::/48": "205809", - "2001:67c:1440::/48": "44597", - "240a:ae39::/32": "146291", - "2606:7c80:100::/48": "40300", - "2800:370:46::/48": "28006", - "2804:32cc::/32": "265098", - "2804:487c:228::/45": "267124", - "2804:5df8::/32": "269004", - "2a01:8840:6d::/48": "207266", - "2001:559:8600::/48": "399141", - "2408:8956:21c0::/38": "17622", - "2409:8c50:a01::/32": "56047", - "240a:a57f::/32": "144057", - "2606:4700:3108::/48": "13335", - "2607:9e80:1101::/40": "397068", - "2607:fb28:10::/48": "29384", - "2400:5740::/32": "23953", - "2403:a340::/32": "134823", - "240a:afbf::/32": "146681", - "240a:a1d5::/32": "143119", - "240a:a412::/32": "143692", - "2a04:d480::/35": "25291", - "2a0e:b107:2f0::/44": "205908", - "2407:9802:f000::/29": "10139", - "240a:a98a::/32": "145092", - "240e:44d:6280::/41": "4134", - "2600:140f:2201::/39": "20940", - "2600:6c38:d14::/44": "20115", - "2401:9c00::/32": "23923", - "2401:d800:9c70::/40": "7552", - "2804:6478::/32": "53123", - "2a03:d200::/32": "56366", - "2602:ffd9:200::/40": "62874", - "2803:2180:10::/46": "27941", - "2a03:1d20::/32": "201704", - "2a03:75c0::/32": "197922", - "2a02:26f7:bec8::/48": "36183", - "240e:945:1000::/32": "4134", - "2a00:8740:1a::/45": "49037", - "2001:13d2:e801::/29": "7303", - "2401:3280:1000::/34": "133613", - "2404:bf00::/40": "9303", - "2605:a40a:9000::/34": "33363", - "2620:132:7000::/42": "19537", - "2801:b0:b4::/41": "52888", - "2804:f7c::/32": "262715", - "2804:2c3c::/32": "265205", - "2804:7c90::/32": "271504", - "2a02:dd8::/29": "8778", - "2a02:26f7:ca89::/42": "20940", - "2a02:45c0::/47": "59675", - "2a10:cc40:df3::/48": "20473", - "2c0f:f408:3::/32": "37684", - "2001:41f0::/32": "33915", - "240a:a4c6::/32": "143872", - "240a:aaf2::/32": "145452", - "2600:380:ac00::/41": "20057", - "2804:46cc::/32": "267012", - "2804:6a40::/32": "270322", - "240a:ac44::/32": "145790", - "2604:3d80:808::/48": "394302", - "2620:df:8000::/48": "30679", - "2620:11f:b006::/44": "394514", - "2001:678:ba8::/48": "207722", - "240a:a452::/32": "143756", - "2804:c48:4000::/36": "52687", - "2a00:1560::/45": "29684", - "240e:44d:5780::/41": "4134", - "2804:1a98::/32": "61870", - "2a01:c50e:9800::/38": "12479", - "240a:a86f::/32": "144809", - "2604:d600:1595::/44": "32098", - "2605:2b80::/32": "16832", - "2620:11a:1001::/48": "62840", - "2804:2568::/32": "264279", - "2804:3244:26::/47": "265066", - "2804:3a64::/32": "266086", - "240a:a421::/32": "143707", - "2602:fd80:2::/36": "53612", - "2604:95c0::/32": "20130", - "2620:49:8::/47": "16686", - "2a03:6400:40::/47": "11054", - "240e:473:6450::/39": "4134", - "240e:95c::/34": "58563", - "2605:a880:8000::/48": "46261", - "2a02:26f7:c380::/48": "36183", - "2a02:26f7:e241::/46": "20940", - "2001:559:82ac::/47": "7922", - "2804:43e8::/32": "267598", - "2001:43f8:7d0::/48": "37591", - "2409:8c15:2e00::/35": "9808", - "2600:1f70:e000::/40": "16509", - "2801:80:3520::/48": "268844", - "2a02:26f0:115::/48": "34164", - "2a0a:a000::/32": "200564", - "2001:559:8466::/48": "33287", - "2404:f4c0:1108::/48": "17920", - "2a0c:9a40:8088::/48": "43927", - "2400:9800:1c:5000::/33": "24203", - "2803:360::/32": "264773", - "2804:14d:9e87::/42": "28573", - "2001:559:259::/48": "33651", - "2402:800:5dd3::/44": "7552", - "240e:981:200::/40": "23724", - "2600:1016:b050::/40": "6167", - "2a06:ba80::/29": "50042", - "240a:aa31::/32": "145259", - "240a:aa7c::/32": "145334", - "240b:4003:12b::/45": "45102", - "2803:3140::/32": "27843", - "2a02:26f7:e188::/48": "36183", - "2404:de80:400::/40": "137443", - "2600:100e:bf1e::/33": "6167", - "2606:2800:700a::/45": "15133", - "2800:160:156a::/45": "14259", - "2a00:1100::/29": "51483", - "2001:438:fffd:11e::/64": "397601", - "2804:2408::/32": "52705", - "2a02:26f0:dd01::/34": "20940", - "2c0f:f7e8::/47": "62217", - "2001:c20:48aa::/47": "9255", - "2001:df3:7600::/48": "132060", - "2404:7180:b010::/48": "23848", - "2600:1417:78::/48": "9498", - "2604:c0c0:6000::/32": "14525", - "2a0b:4780::/29": "60129", - "2001:559:8393::/48": "7015", - "2801:140:144::/48": "262249", - "2803:3f40::/48": "264754", - "2a01:8d1::/26": "3209", - "2a02:26f7:11::/48": "20940", - "2001:4b98:aaaa::/47": "209453", - "2400:cb00:245::/46": "13335", - "2a0a:e202:8000::/48": "33438", - "2a0d:4d00:80::/48": "44794", - "2001:4888:a609::/45": "6167", - "2402:1440:200::/32": "132168", - "2604:8dc0:100::/38": "40474", - "2804:2804::/32": "263935", - "2a02:26f7:cc80::/48": "36183", - "2a06:ee01::/32": "27552", - "2a0b:6903:fdb::/48": "206873", - "2001:408:ff02::/40": "14793", - "2602:801:7000::/47": "397955", - "2801:1ca::/44": "3816", - "2804:5ad0:f000::/36": "268798", - "2602:ff98::/39": "63447", - "2a0c:a940::/29": "9009", - "2400:8500:7000::/36": "58791", - "240e:438:5e20::/43": "140647", - "240e:44d:5400::/41": "140345", - "2a00:cc40:3::/29": "44395", - "2a01:8840:52::/45": "12041", - "2a02:26f7:6b::/48": "20940", - "2a0b:b86:f8::/48": "3280", - "2c0f:e890::/32": "60171", - "2402:3a80:18::/47": "38266", - "2409:801f:3005::/46": "9808", - "240a:a3ae::/32": "143592", - "240a:aeac::/32": "146406", - "2607:8700:110::/46": "25820", - "2806:230:600f::/48": "11888", - "2803:1780::/32": "264646", - "2001:559:161::/48": "7725", - "2001:67c:10::/48": "60149", - "2405:55c0:40::/43": "63991", - "240e:473:c00::/41": "140485", - "2600:6c33:218::/48": "11351", - "2604:d600:102d::/43": "32098", - "2800:160:1769::/45": "14259", - "2804:297c:c400::/36": "262907", - "2806::/29": "6503", - "2a02:26f7:d1c5::/46": "20940", - "2606:2800:11f::/42": "15133", - "2804:22e4::/32": "264129", - "2a02:5f0::/32": "35320", - "2001:1330::/29": "11830", - "240a:aa81::/32": "145339", - "2600:33c0::/27": "397165", - "2a01:7d20:700::/40": "203645", - "2001:44b8:3089::/48": "4739", - "2620:95:4000::/45": "40138", - "2804:4dec::/32": "268228", - "2a00:f826:12::/31": "34549", - "2001:2013::/28": "1299", - "2402:800:517f::/40": "7552", - "2408:872f::/27": "4837", - "240e:3b3:6400::/35": "140312", - "2602:ff39::/40": "63318", - "2001:67c:1e8::/48": "49820", - "2001:44b8:1054::/47": "4739", - "2400:c540:81::/42": "59238", - "2408:8459:410::/41": "17622", - "2600:6c38:822::/44": "20115", - "2a03:6100:6101::/32": "34594", - "2001:550:502::/38": "174", - "2a0e:46c4:2400::/46": "211579", - "2604:5400::/35": "11776", - "2620:10:8000::/44": "18563", - "2a05:15c0::/29": "201600", - "2001:559:80c5::/46": "7922", - "240e:44d:680::/41": "4134", - "2602:fd92:600::/44": "38281", - "2a03:9180:4::/32": "199422", - "2605:fd00::/32": "15296", - "2804:2200:1103::/32": "264585", - "2001:fd8:2a1::/46": "4775", - "2604:8f80::/32": "22667", - "2804:3224::/32": "265059", - "2804:30b4::/32": "264970", - "2a01:8c40::/32": "8301", - "2001:559:57e::/48": "7922", - "2001:b400:f220::/37": "3462", - "2401:d800:5570::/40": "7552", - "2408:840c:9300::/40": "17621", - "240a:aa7a::/32": "145332", - "240e:1e:6000::/36": "140314", - "2804:7774::/32": "271179", - "2401:ee00:e1::/39": "23951", - "2801:1f:2800::/48": "19429", - "2c0f:fed8::/32": "22822", - "2001:559:9a::/45": "33651", - "2001:559:8473::/48": "33668", - "2402:800:92b7::/41": "7552", - "2408:8256:3977::/44": "17623", - "240e:473:ff01::/48": "140486", - "2605:a404:606::/40": "33363", - "2620:119:4014::/41": "7726", - "2001:b28:4::/48": "31500", - "240a:afea::/32": "146724", - "2600:1408:4c01::/35": "20940", - "2804:2fb0::/32": "264906", - "2001:1838:2008::/35": "23352", - "2400:dd01:3015::/44": "7497", - "240a:acbe::/32": "145912", - "2804:218::/40": "27715", - "2804:2650:d000::/34": "264340", - "2c0f:f748::/39": "37662", - "2401:d800:df60::/40": "7552", - "2404:8d02:4983::/37": "9587", - "2405:34c0:1::/45": "134316", - "2408:805c:5000::/32": "17816", - "2610:20:6b00::/40": "2648", - "2800:160:1566::/44": "14259", - "2a02:26f7:ea81::/46": "20940", - "2001:559:8120::/48": "19231", - "2804:113c::/32": "53181", - "2804:241c::/32": "264202", - "2804:404c:12::/41": "265950", - "2001:678:340::/48": "206480", - "240e:3bc:2800::/38": "4134", - "2a02:26f7:e445::/46": "20940", - "2001:67c:1108::/47": "198060", - "2405:7f00:3260::/48": "9716", - "240a:a813::/32": "144717", - "2804:3018::/32": "263020", - "2a06:6f07:ffff::/48": "197164", - "2a08:600:ff::/48": "206747", - "2408:8120:7000::/36": "9929", - "2a01:8340::/39": "59410", - "2a06:e881:2502::/48": "205908", - "2a09:79c0::/34": "208803", - "2a0d:8480::/46": "48282", - "2001:67c:1498::/48": "43455", - "2001:4b27:ffff::34/121": "34288", - "2800:98:1710::/36": "14754", - "2800:c00:2::/32": "18747", - "2806:230:100a::/48": "265594", - "2a02:e840:1003::/30": "15974", - "240e:5f:600b::/48": "140313", - "2600:1409:4000::/48": "35994", - "2a02:878:a::/48": "42632", - "2402:800:58d3::/44": "7552", - "2403:c300::/32": "24157", - "2a00:1c10:40::/44": "50300", - "2001:2000:6100::/32": "1299", - "2600:1fa0:50c0::/44": "16509", - "2602:801:5000::/40": "399477", - "2803:80::/35": "61317", - "2a0d:12c0:1000::/48": "205804", - "2001:500:125::/48": "396566", - "2001:df0:c280::/48": "64271", - "240a:a043::/32": "142717", - "2a01:20f::/32": "41666", - "2a0a:90c2::/35": "198912", - "2001:559:248::/48": "33668", - "240a:a255::/32": "143247", - "2806:31d::/32": "18734", - "2a02:26f7:f1c0::/48": "36183", - "2001:559:814b::/48": "33651", - "2001:559:c110::/48": "7016", - "2401:d800:24c0::/42": "7552", - "2408:8256:2d9f::/38": "17816", - "240a:ad10::/32": "145994", - "2605:e480::/32": "393398", - "2a0e:fd45:b00::/48": "213249", - "2409:8a7f::/24": "9808", - "240e:3b5:8200::/35": "140316", - "240e:3b6:f100::/36": "4134", - "2620:100:3010::/48": "23286", - "2804:3a5c::/32": "53174", - "2804:470c::/32": "267028", - "2a01:7ce0::/32": "62102", - "2001:500:94::/48": "33517", - "2001:559:87b1::/44": "7922", - "2409:8c44:801::/38": "24445", - "240e:978:f00::/40": "134769", - "2a03:7b40::/48": "30286", - "2409:8914:800::/39": "56044", - "2804:40b0::/32": "265975", - "2a03:efc0:1100::/40": "33438", - "2a0d:f540::/29": "56786", - "2a0f:cd80::/32": "208683", - "2001:44b8:403c::/47": "7545", - "240e:3b1:dc00::/34": "4134", - "2610:20:1030::/48": "209", - "2620:107:6000:1146::/53": "6462", - "2a0d:55c0::/29": "58011", - "2a04:7a00::/32": "6786", - "2001:678:6a0::/48": "207647", - "2001:f28::/32": "9644", - "2403:4800:1100::/40": "9714", - "2409:8b0c::/30": "56042", - "2602:fd91::/36": "399533", - "2804:188::/33": "262750", - "2a02:7040:ff02::/40": "199236", - "2a0f:25c0::/48": "207077", - "240a:a4bc::/32": "143862", - "2606:cd80::/48": "394727", - "2a03:1300::/32": "13214", - "2a06:3b80:30::/48": "200478", - "2a06:8400::/31": "198463", - "2a09:bac0:70::/45": "13335", - "2001:559:23e::/47": "7015", - "2001:12f0:7c0::/36": "1916", - "2407:16c0::/48": "135905", - "2408:8456:1000::/42": "17622", - "2a0e:fd45:40fa::/48": "7489", - "2404:6380:8001::/48": "18257", - "2606:2800:4212::/48": "15133", - "2a04:9a00:100e::/48": "202553", - "2a0f:a080::/29": "15391", - "2402:3a80:1760::/48": "38266", - "2620:56:c002::/44": "393279", - "2001:678:e48::/48": "61232", - "2600:1802:5::/46": "16552", - "2803:da00::/32": "52253", - "2a00:1cb8:2:4::/60": "12713", - "2001:450::/34": "3549", - "2001:67c:2648::/48": "13030", - "2a03:e842::/44": "43131", - "2a09:4c2:35::/41": "58057", - "2a09:1740::/29": "25582", - "2804:204:315::/42": "28186", - "2602:fe27:70::/48": "6473", - "2a0c:a9c7:166::/48": "45029", - "2001:57a:c00::/35": "22773", - "2a00:da8:fffb::/48": "6878", - "2a02:26f7:d54d::/46": "20940", - "2001:559:81fd::/48": "33491", - "2001:559:c0f6::/47": "21508", - "2604:4300:bf01::/33": "33387", - "2610:18:8104::/48": "22550", - "2801:12:2800::/48": "269972", - "2804:5bbc::/32": "268866", - "2800:b20::/35": "14754", - "2804:204:212::/44": "28186", - "2001:678:744::/48": "203660", - "2402:800:3755::/42": "7552", - "2600:6c38:c6::/47": "20115", - "2804:2a60::/42": "263089", - "2804:545c::/32": "268645", - "2a02:f784:20::/48": "25252", - "2a0c:1700::/47": "205112", - "2001:44b8:30e0::/48": "7545", - "2401:5100::/32": "38442", - "2600:1007:c04::/32": "22394", - "2806:2f0:8021::/46": "17072", - "2001:14a8::/32": "15547", - "2404:6ac0::/32": "138619", - "2a02:26f7:f708::/48": "36183", - "2a06:e881:7700::/40": "212024", - "2001:510:131::/38": "376", - "2001:67c:2eac::/48": "211060", - "2400:c400:a001::/31": "45570", - "2001:559:11::/48": "7015", - "240a:adda::/32": "146196", - "2610:20:5002::/48": "5744", - "2800:ba0:6a::/48": "263812", - "2a03:a320::/32": "203457", - "2001:4210:290a::/35": "25818", - "240a:ae1b::/32": "146261", - "2804:1414::/32": "263311", - "2a02:4620::/32": "3303", - "2a06:8782::/32": "3624", - "2405:3740:8004::/44": "38526", - "2407:8000:14:200::/31": "9381", - "2a03:9c00:d::/48": "41732", - "2001:559:15a::/48": "7725", - "2600:9000:108c::/48": "16509", - "2803:f8c0::/32": "264750", - "2a01:b940::/30": "48635", - "2c0f:f908::/32": "25429", - "2403:89c0:3::/32": "55824", - "2600:1419:b401::/36": "20940", - "2607:fdf8:dd::/38": "13649", - "2801:1a:4800::/48": "269790", - "2804:7f4::/31": "18881", - "2804:1bc4::/32": "61748", - "2a02:970:1207::/44": "44002", - "240e:3b1:7800::/39": "4134", - "240e:97a:2d00::/48": "23650", - "2602:fd31::/36": "398568", - "2800:440:9600::/42": "27738", - "2a02:970:1246::/44": "44002", - "2001:67c:21c::/48": "51090", - "2400:7400:e019::/48": "23736", - "2600:803:1201::/29": "701", - "2c0f:f608:f200::/40": "21351", - "2001:559:2da::/48": "33652", - "2804:1128::/32": "263661", - "2a09:3340::/29": "209509", - "2001:559:c0c0::/48": "7016", - "240a:a146::/32": "142976", - "2603:c002:350::/36": "31898", - "2804:1380:6::/39": "263536", - "2001:44b8:2040::/47": "7545", - "2401:c500:fd00::/48": "54994", - "2607:fe70::/32": "11170", - "2a0c:f040::/48": "51765", - "2001:678:c74::/48": "8881", - "2408:8409:6c00::/40": "4808", - "2602:fed2:fe0::/44": "53356", - "2a0a:6500::/48": "60742", - "2c0f:ff00::/32": "14988", - "2620:112:4000::/47": "36204", - "2803:9620::/34": "265865", - "2804:44e8:101::/38": "267660", - "2a06:3e87::/32": "198507", - "2402:800:fd90::/42": "7552", - "2406:daa0:80a0::/44": "16509", - "2409:8c39::/25": "9808", - "2804:14c:5971::/40": "28573", - "2804:3650::/32": "266341", - "2804:4544:b000::/40": "266915", - "2a02:24c8:c000::/34": "39228", - "2600:1901:ffd0::/44": "15169", - "2602:fd80::/47": "53612", - "2604:d600:689::/43": "32098", - "2620:116:800a::/48": "16509", - "2a0e:bf00:161::/31": "202539", - "2001:559:1cf::/48": "33660", - "2600:1805:ff11::/48": "16552", - "2602:ff65:cb::/36": "33083", - "2a0d:3584:1111::/48": "200303", - "2001:559:75a::/48": "7922", - "2602:feda:b70::/48": "212705", - "2a06:1301:4100::/48": "203004", - "2409:8d14:1400::/38": "56044", - "240a:a084::/32": "142782", - "2a03:7380:6000::/41": "13188", - "2001:df0:1800::/48": "23642", - "240b:4003:fc00::/48": "45102", - "2607:faa0::/32": "11924", - "2a03:8860::/32": "200931", - "2a05:5940::/29": "42632", - "2400:cb00:a742::/45": "13335", - "2605:6dc0::/32": "394838", - "2001:559:8670::/48": "33660", - "2001:1810:9980::/48": "30447", - "2402:e380:113::/45": "139073", - "2603:c012:4000::/36": "31898", - "2607:6480:4000::/35": "395337", - "2a02:7c0::/32": "34816", - "2a0c:93c0:10::/44": "212465", - "240e:3b5:4c00::/35": "136200", - "2602:fcce:b2::/41": "399200", - "2804:16d8:8000::/34": "262729", - "2a02:26f7:79::/48": "20940", - "2a0d:b00:2901::/48": "205862", - "2607:e400::/34": "7459", - "2804:bb0:8000::/33": "52808", - "2001:550:6c04::/48": "26824", - "2001:678:d9c::/48": "3303", - "2401:ff80:110d::/46": "133954", - "2804:66cc::/32": "269583", - "2a04:d940::/29": "41887", - "2001:df5:9980::/48": "140766", - "240a:ad36::/32": "146032", - "2804:724::/32": "28310", - "2804:cf8:3::/48": "52580", - "2804:1088::/32": "52913", - "2a00:5ec0::/32": "197581", - "2a02:e30:f030::/48": "199410", - "2c0f:ec80::/32": "37315", - "2405:800:a::/35": "7545", - "2801:80:2e00::/40": "267976", - "2804:b4:9000::/33": "28294", - "2804:1b50::/32": "61719", - "2804:52ec::/32": "268550", - "2a03:2880:f022::/43": "32934", - "2404:bf40:e800::/48": "7545", - "2804:145c:8090::/39": "263327", - "2a02:970:471::/35": "44002", - "2a07:b400::/29": "14576", - "2001:1410::/32": "25538", - "2800:160:1164::/44": "14259", - "2a00:7f80::/29": "48585", - "2a01:288:4005::/46": "8717", - "240a:a5af::/32": "144105", - "240a:a92f::/32": "145001", - "2604:9200::/32": "36687", - "2804:4d3c:1e20::/33": "267420", - "2a03:a200::/32": "43451", - "2a0d:5600:33::/48": "63473", - "2401:4900:4e40::/42": "45609", - "2600:1000:b000::/41": "6167", - "2806:2f0:32c1::/42": "17072", - "2a01:298:f002::/31": "30880", - "2001:559:149::/46": "33287", - "2001:559:52d::/48": "7725", - "2401:d800:7e0::/36": "7552", - "2405:8d40:a07::/48": "139831", - "2607:ff30:1110::/48": "237", - "2a02:88::/32": "8240", - "2404:a140:a::/45": "138915", - "2804:5ab8::/32": "268791", - "2404:7cc0:7f04::/47": "10100", - "2405:204:f000::/31": "55836", - "2a02:26f7:5e::/48": "36183", - "2001:43ff::/48": "328813", - "240e:473:4b50::/40": "4134", - "2a02:26f0:8b01::/37": "20940", - "2a02:26f7:bd88::/48": "36183", - "2804:485c::/32": "267116", - "2001:16a2:b216::/36": "39386", - "2402:800:fb10::/42": "7552", - "240e:3bd:ac00::/35": "4134", - "2600:1419:6400::/48": "35994", - "2602:ffc5:110::/44": "40676", - "2804:2eb0:fc43::/38": "265359", - "2804:4718::/32": "267031", - "2a03:b040::/32": "60981", - "2001:ab7:f000::/36": "15594", - "2405:cc40::/32": "135690", - "2604:5f00::/32": "10755", - "2806:310:18::/46": "16960", - "2a02:ab0::/29": "42346", - "2c0f:f020::/46": "327907", - "240a:a09e::/32": "142808", - "2a02:26f7:d345::/46": "20940", - "2a02:26f7:ec08::/48": "36183", - "2a0d:c000::/29": "205345", - "2001:468:280a::/43": "11537", - "240e:228::/25": "4134", - "2604:8d40::/32": "23260", - "2607:fb90:dd00::/38": "21928", - "2806:363:2000::/35": "22566", - "2a02:58::/32": "25596", - "2a05:4180::/29": "201436", - "2001:559:5ff::/48": "7016", - "2001:de4::/48": "131621", - "2620:10a:80e8::/46": "55195", - "2803:980::/39": "263248", - "2a09:d2c1:9::/48": "207530", - "2001:559:312::/48": "33287", - "2001:5b0::/39": "6621", - "2001:1938:2203::/39": "33438", - "240e:63:3000::/33": "140312", - "240e:473:2000::/41": "140485", - "2600:1004:b200::/44": "6167", - "2607:fda8:800d::/33": "6128", - "2001:1bc8::/29": "29422", - "2400:3980::/32": "2497", - "240a:a686::/32": "144320", - "2804:5728::/32": "268048", - "2a0b:e181:400::/38": "198605", - "2a00:f080::/42": "13030", - "2406:57c0:128::/47": "134672", - "2408:8256:3680::/48": "17816", - "2600:1406:cc01::/35": "20940", - "2604:9100::/36": "29944", - "2604:d2c0::/32": "12131", - "2604:fe00::/32": "30517", - "2605:47c0::/32": "397589", - "2a0a:ab00::/29": "25057", - "2001:67c:2090::/48": "8787", - "2001:ee0:3020::/39": "45899", - "2400:d280::/44": "45648", - "2804:5800::/32": "52843", - "2a02:26f7:cccd::/42": "20940", - "2a02:26f7:f408::/48": "36183", - "2a0d:f802::/32": "20278", - "2408:81a3:ca66::/48": "140707", - "240a:ae5e::/32": "146328", - "2606:fe80:20::/44": "12180", - "2a02:26f7:bc06::/47": "20940", - "2605:1f00::/32": "14335", - "2804:5f2c::/33": "269081", - "2a01:baa0::/38": "57795", - "2a02:26f7:28::/48": "36183", - "2804:1918:180::/46": "52862", - "2804:5164::/32": "268449", - "2a01:d8:8::/48": "43489", - "2001:df5:b900::/48": "131418", - "2001:1980:2300::/37": "29838", - "2405:4500:e::/32": "9671", - "240e:473:2950::/40": "4134", - "2804:954:2000::/32": "263073", - "2a09:2944::/31": "207996", - "2001:559:311::/48": "33491", - "2001:1a11:d6::/47": "8781", - "2403:c00:3::/48": "9498", - "2605:a401:889d::/41": "33363", - "2606:a400::/32": "11922", - "2620:1e8:3::/45": "29802", - "2a02:73a0:70::/48": "201895", - "2001:579:9104::/40": "22773", - "2402:6800:741::/43": "22822", - "2a02:26f0:1901::/40": "20940", - "2a02:26f7:efc9::/42": "20940", - "2001:559:764::/48": "33659", - "240a:abea::/32": "145700", - "2804:20a4::/32": "264503", - "2a01:358:4b11::/35": "9121", - "2a02:26f0:bd01::/33": "20940", - "2a06:a800::/29": "203818", - "2a03:47c0:20c1::/39": "21277", - "2402:3640::/32": "137248", - "2402:8100:13::/48": "55644", - "240a:aaf0::/32": "145450", - "2600:e00f:4009::/36": "22995", - "2804:218:e002::/35": "27715", - "2804:2b34::/32": "265140", - "2a02:26f7:1f::/48": "20940", - "2001:67c:1300::/48": "1836", - "2402:ef3f:2::/48": "9430", - "2450:1740:1::/48": "140079", - "2804:2174::/32": "264555", - "2a0f:f780::/29": "60262", - "2001:559:8303::/45": "7015", - "2001:c20:c83f::/41": "9255", - "240e:473:9200::/41": "140485", - "2605:ed00:4c63::/48": "11351", - "2a03:5f00:1000::/48": "207044", - "2001:559:5c6::/48": "33287", - "2001:df0:d780::/48": "139288", - "2402:800:5a47::/43": "7552", - "2620:134:c000::/48": "394887", - "2803:db40::/47": "64100", - "2600:1419:9c01::/34": "20940", - "2620:13f:3019::/40": "46842", - "2804:24b0::/38": "264238", - "2804:2cb8:40::/32": "265239", - "240a:a2fe::/32": "143416", - "240e:3b0:7a00::/32": "140313", - "2804:3548::/32": "266279", - "2a06:c5c0:900::/48": "44709", - "2c0f:ffc8::/33": "22355", - "2001:6f0::/33": "1257", - "2402:800:36d3::/44": "7552", - "2402:1500:8000::/33": "25222", - "2c0e:7f80::/38": "36974", - "2001:559:7a6::/48": "7922", - "2402:a340::/32": "10200", - "2408:80f9:4000::/34": "4837", - "240a:a544::/32": "143998", - "2607:2c00::/32": "14265", - "2607:f208:df05::/48": "21499", - "2804:3dac::/39": "266546", - "2406:f400:130::/44": "38001", - "2602:fcf6:107::/36": "51999", - "2804:39c:6000::/32": "28329", - "2a09:be40:4700::/40": "209077", - "2c0f:f400:10fe::/47": "3741", - "2401:c000::/32": "24323", - "2409:8020:10b1::/41": "56046", - "240a:ab5f::/32": "145561", - "2605:a404:b88::/42": "33363", - "2620:7f:a000::/48": "62827", - "2604:e180:1006::/33": "55002", - "2804:5fdc::/35": "269128", - "2403:7f40:e000::/48": "211622", - "2804:314:4032::/32": "61568", - "2a05:1c47::/32": "201594", - "2001:67c:64c::/48": "47846", - "2001:1960:100::/40": "32587", - "2600:9000:2245::/44": "16509", - "2a02:26f0:9700::/48": "6762", - "2001:7f0:4021::/29": "13237", - "2001:4878:4246::/48": "12222", - "2600:1011:b170::/33": "6167", - "2602:fcff:12::/48": "57164", - "2804:6ac8::/32": "270358", - "2a02:26f7:d38a::/42": "20940", - "2a02:26f7:de0c::/48": "36183", - "2806:2f0:91a2::/41": "17072", - "2001:579:cd80::/38": "22773", - "2404:6900:2012::/48": "394749", - "2409:8c18::/31": "134810", - "2600:1012:b030::/44": "22394", - "2600:1419:11::/46": "20940", - "2604:6600:2608::/39": "40676", - "2804:e0c:180::/48": "28176", - "2a06:d001::/30": "47725", - "2600:1003:b4d0::/44": "6167", - "2610:100:2010::/37": "8047", - "2a02:26f7:f3c9::/46": "20940", - "2001:500:8c::/48": "20144", - "240a:a275::/32": "143279", - "2a02:26f7:ba44::/48": "36183", - "2a02:50a0::/32": "201787", - "2001:559:5c8::/48": "33668", - "240a:a2b4::/32": "143342", - "2a0b:3100::/39": "12859", - "2001:559:70a::/48": "33659", - "2001:559:830e::/48": "33659", - "2001:4878:2037::/44": "12222", - "2403:300:1cf2::/44": "714", - "2404:7f40::/48": "138645", - "2602:fed2:710e::/48": "20473", - "2604:d500::/32": "54098", - "2a02:ee80:406d::/43": "3573", - "2408:8456:a840::/38": "17816", - "2600:6c38:d19::/45": "20115", - "2605:3a40:2::/44": "6233", - "2607:f928:17::/33": "22645", - "2800:9a7:3070::/32": "14522", - "2804:2b10:5::/46": "52916", - "2804:3dc4::/34": "266552", - "2a04:940:2::/35": "51407", - "2402:800:5eee::/43": "7552", - "2407:4340::/32": "142014", - "2607:f208:209::/48": "26496", - "2401:ff80:1891::/46": "133954", - "2408:8256:358f::/48": "17816", - "240a:a18c::/32": "143046", - "240a:a1f6::/32": "143152", - "240a:ac1a::/32": "145748", - "2606:6080:1004::/48": "32489", - "2804:4ec:1100::/38": "28668", - "2a0a:4540:220::/48": "16509", - "2001:559:30c::/48": "7922", - "240a:a100::/32": "142906", - "2602:feda:ae1::/48": "140506", - "2605:7900:20::/48": "19133", - "2804:5474::/45": "268651", - "2a00:f46:10::/36": "21395", - "2a02:1390:f000::/40": "21351", - "2a0b:b600:1000::/38": "60404", - "2001:579:e03c::/41": "22773", - "240a:a6cf::/32": "144393", - "2602:fcc9:777::/48": "32505", - "2800:320:8003::/48": "27882", - "2804:2050:2abd::/35": "264485", - "2804:6554::/32": "269483", - "2a02:26f7:c044::/48": "36183", - "2001:df4:b400::/48": "17701", - "2402:3a80:1b30::/41": "38266", - "2600:40f0:100::/44": "3369", - "2a02:26f7:e580::/48": "36183", - "2001:44b8:30e5::/44": "7545", - "2406:a3c0::/32": "37922", - "2800:160:192d::/43": "14259", - "2804:6ae8::/32": "270365", - "2a0a:340:200::/40": "48651", - "2a0e:fd45:da2::/47": "44103", - "2001:678:97c::/48": "49697", - "2405:1c0:6435::/41": "55303", - "240e:3bc:ec00::/35": "140314", - "2800:160:12b1::/44": "14259", - "240a:aeaa::/32": "146404", - "2803:980:e00::/32": "263248", - "2804:13a8::/32": "263544", - "2804:3920:8000::/36": "266013", - "2804:63a8:818::/35": "269375", - "2a03:8fa0:1000::/36": "17819", - "2a0e:aa07:f0e0::/44": "208680", - "2001:df2:2e00::/48": "135421", - "2405:4200::/38": "24482", - "2405:84c0:ff3e::/48": "139782", - "2801:1b2::/44": "14080", - "2804:f8c:8890::/37": "263591", - "2a02:26f7::/48": "36183", - "2a02:26f7:8c::/48": "36183", - "2a03:8e20::/32": "211713", - "2001:67c:13a4::/48": "209579", - "2001:1248:9895::/46": "11172", - "240a:a64c::/32": "144262", - "240e:37c:ac00::/31": "4134", - "2600:1000:be00::/44": "6167", - "2620:104:2031::/46": "40185", - "2a0c:8b40::/29": "42908", - "2001:4c5c::/30": "13119", - "2402:b400:4608::/42": "45960", - "2804:3830::/32": "266463", - "2001:a00::/32": "41437", - "2001:1218:601e::/47": "278", - "2605:a900:3014::/42": "46887", - "2606:b600:104::/48": "12167", - "2607:f750:d00::/40": "23473", - "2804:5d78::/36": "268974", - "2806:2f0:322::/45": "22884", - "240e:3bc:1400::/38": "134773", - "2a0b:6b83:4243::/32": "202562", - "2001:559:59a::/45": "33659", - "240a:a048::/32": "142722", - "2607:fed8::/32": "36416", - "2800:160:11c2::/44": "14259", - "2800:1e0:e02::/39": "7195", - "2804:7784::/32": "271183", - "2a04:fac0::/29": "212859", - "2400:c800::/39": "4515", - "2401:8180::/32": "24341", - "2804:23ec::/32": "21574", - "240a:a161::/32": "143003", - "2603:b0e0:bef0::/33": "11796", - "2804:f8:8003::/33": "53147", - "2a01:1b8::/45": "1257", - "2a0b:9401::/32": "209505", - "2620:11b:400a::/47": "47870", - "2a02:26f7:f548::/48": "36183", - "2a03:dc0::/32": "61428", - "2401:d800:dae0::/39": "7552", - "2405:1c0:6235::/41": "55303", - "2605:2340::/32": "393898", - "2607:8700:109::/48": "25820", - "2804:2488:11::/34": "264228", - "2001:1900::/34": "3356", - "2406:d500:9::/48": "136557", - "2a02:26f7:52::/48": "36183", - "2a02:26f7:f1c5::/46": "20940", - "2001:559:42::/48": "7922", - "2401:4900:5d10::/41": "45609", - "2620:121:5070::/48": "14618", - "2804:1878:192::/45": "61935", - "2a10:b680::/32": "44486", - "2001:559:84b2::/48": "7922", - "2403:eb40:1001::/34": "138418", - "240a:a240::/32": "143226", - "240a:a9ff::/32": "145209", - "2600:1406:4201::/37": "20940", - "2604:7480::/47": "54826", - "2610:170::/32": "11260", - "2408:8956:6700::/40": "17816", - "2800:110:3400::/48": "28068", - "2405:1c0:6861::/45": "135062", - "2402:e380:312::/48": "139073", - "2804:36c4::/32": "266370", - "2a0c:b641:73b::/45": "207338", - "2001:559:4e9::/48": "33651", - "2001:880::/32": "24973", - "2402:3180::/48": "141706", - "2409:8904:62b0::/39": "24547", - "2600:140b:7001::/38": "20940", - "2803:9040::/32": "264821", - "2602:feda:d40::/44": "38136", - "2a02:26f7:e684::/48": "36183", - "2001:7f8:f::/48": "6895", - "2403:7900::/32": "1851", - "240a:a06a::/32": "142756", - "240a:a37e::/32": "143544", - "2600:1407:c01::/35": "20940", - "2606:2800:4214::/44": "15133", - "2a04:3f80::/30": "9120", - "2402:e000:5380::/41": "24499", - "2408:84f3:3690::/36": "17816", - "240a:add3::/32": "146189", - "2620:74:29::/46": "396570", - "2803:4e0::/32": "262213", - "2a02:26f7:c7c8::/47": "36183", - "2a05:e581::/29": "63399", - "2001:559:8068::/48": "33657", - "2401:7400:2ff::/36": "4773", - "2409:804b:2b09::/32": "24445", - "240e:44d:800::/41": "140345", - "2804:d1c::/32": "52600", - "2a02:2838::/32": "31264", - "240e:44d:1d80::/41": "4134", - "2600:1419:1c::/38": "20940", - "2604:d700::/32": "53824", - "2605:4200::/32": "14543", - "2620:111:d002::/47": "18841", - "2a01:111:4005::/36": "8075", - "2001:559:3ce::/48": "33668", - "2001:978:8e01::/39": "174", - "2001:758::/32": "35393", - "2001:1248:9b0d::/42": "11172", - "2408:8957:a00::/40": "17622", - "240a:ada8::/32": "146146", - "2604:d600:170c::/43": "32098", - "2806:230:6032::/48": "265594", - "2a00:79a0::/36": "60771", - "2404::/35": "17709", - "2a00:5cc0::/32": "31692", - "2409:805e:3100::/36": "9808", - "2605:a401:8068::/46": "33363", - "2800:940::/36": "27953", - "2a01:5b0:2e::/48": "50611", - "2a02:888:de::/39": "47794", - "2001:44b8:30e1::/45": "4739", - "2600:1409:7000::/48": "35994", - "2606:e480:4800::/32": "55083", - "2a0a:d6c0:efef::/48": "61423", - "2a11:4c00::/29": "43624", - "2a09:4e00::/30": "208861", - "2001:67c:1d4::/48": "2043", - "2001:dc7:fffe::/47": "24406", - "2001:1a68:7::/48": "42503", - "2001:41a8:604::/48": "34164", - "2800:88::/44": "26210", - "2804:e70::/32": "262955", - "2804:70d4::/34": "270751", - "2a0e:b107:9d0::/46": "213262", - "2401:14c0:d::/42": "136531", - "2620:22:c000::/48": "55196", - "2a01:8080::/32": "48161", - "2401:ff80:1609::/46": "133954", - "2600:141b:7001::/37": "20940", - "2605:9500:212::/47": "14244", - "2607:f750:6000::/40": "23473", - "2620:10a:80e3::/45": "55195", - "2804:e94:660::/43": "262468", - "2a02:ff0:3d00::/40": "12735", - "2605:bc0:2134::/48": "54201", - "2804:7d00::/32": "271532", - "2405:9800:15::/41": "45430", - "2a05:1084:7500::/32": "59598", - "2a0b:3d00::/30": "48152", - "2001:678:ea0::/48": "48992", - "2001:4840::/32": "7029", - "2401:4900:4900::/43": "45609", - "2604:4d40:6c::/47": "213073", - "2804:14d:8088::/43": "28573", - "2a02:26f7:c348::/46": "36183", - "2a09:2dc1::/32": "43641", - "2001:57a:f201::/48": "54275", - "240a:ab5d::/32": "145559", - "240e:108:1112::/42": "4134", - "2a02:1748::/32": "51184", - "240a:acab::/32": "145893", - "2606:8d00::/32": "36327", - "2a02:26f7:f845::/46": "20940", - "240a:aef5::/32": "146479", - "2806:2f0:3341::/42": "17072", - "2001:57a:7008::/32": "22773", - "2408:8459:bc30::/41": "17622", - "2803:3e0::/32": "270062", - "2804:e40::/32": "262947", - "2804:34b8::/32": "265475", - "2001:678:9c0::/48": "50030", - "2600:1007:f000::/45": "6167", - "2804:4400::/32": "267615", - "2804:725c::/32": "262506", - "2a02:e38:8100::/40": "14616", - "2a03:c140::/29": "13101", - "2a09:be40:3680::/44": "212276", - "2401:4900:2150::/42": "45609", - "240a:ad5c::/32": "146070", - "2a02:26f7:c248::/48": "36183", - "2a02:26f7:c289::/42": "20940", - "2605:aa40:103::/48": "395394", - "2804:4a30::/32": "267223", - "2a02:25e0:7700::/40": "41691", - "2804:5e8c::/32": "269040", - "2404:fd00::/44": "58552", - "240a:a04b::/32": "142725", - "2602:fd01::/36": "23483", - "2604:2700::/39": "32181", - "2607:f148:1000::/34": "11734", - "2607:f390:7200::/39": "17244", - "2620:104:a00d::/46": "26008", - "2a00:eb9::/32": "16083", - "2001:67c:164::/48": "49866", - "2404:55c0::/32": "17831", - "2406:c700::/32": "9358", - "240a:a583::/32": "144061", - "240e:788::/29": "4812", - "2803:2e40:102::/44": "27796", - "2001:df6:c880::/48": "136906", - "2409:8020:3074::/36": "56046", - "2607:f250:d004::/48": "7046", - "2607:f9f0::/32": "14492", - "2804:2744::/32": "263888", - "2c0f:f5c0:403::/41": "29465", - "2001:559:c0f8::/48": "33659", - "2a02:cb80:4220::/45": "43766", - "240e:109:8021::/48": "4811", - "2a00:1768::/33": "43350", - "2620:118:8010::/48": "40885", - "2804:452c::/32": "262529", - "2a02:2e00:2000::/36": "12479", - "2a0a:7e00::/29": "61317", - "2a0d:d1c0::/32": "209582", - "2600:1a0e:4000::/36": "10307", - "2804:ae0:2c01::/32": "28352", - "2a00:6240::/32": "198354", - "2a02:26f7:e004::/48": "36183", - "2001:678:ea8::/48": "209295", - "2407:9300:1::/45": "58765", - "2001:67c:2b0::/48": "29432", - "2406:840:1010::/48": "139317", - "2408:84f3:a240::/37": "17816", - "2600:40f0:1120::/44": "7046", - "2607:f408:1010::/45": "19871", - "2a10:f300::/29": "212263", - "2a0c:a400::/29": "34907", - "2001:559:dc::/48": "7016", - "2406:9dc0:1012::/48": "141747", - "240a:a134::/32": "142958", - "2804:2dc8::/32": "265303", - "2804:45f0::/32": "266956", - "2a02:3e8::/32": "43646", - "2a02:20c8:2570::/32": "50304", - "2400:addb:800::/39": "9541", - "240e:3b0::/35": "134773", - "2607:f3a0:1a::/35": "23342", - "2800:160:1435::/46": "14259", - "2804:2e04::/32": "265318", - "2a00:1580:3::/30": "39010", - "2a02:2aa0:111::/44": "702", - "240a:a3a2::/32": "143580", - "2602:ff96:6::/48": "26548", - "2804:4b08::/32": "267279", - "2a0d:77c7:792d::/32": "7489", - "2a01:ad40::/32": "198781", - "2a02:6722::/32": "44234", - "2a03:5f00:1001::/32": "29644", - "2001:678:60::/48": "42", - "2001:67c:2460::/48": "3246", - "2605:a401:8141::/45": "33363", - "2606:5d80::/32": "32613", - "2620:1ec:90c::/48": "8068", - "2a02:26f7:db84::/48": "36183", - "2a05:fb80::/29": "31317", - "2001:559:82d1::/48": "7015", - "2620:11e:3010::/44": "19541", - "2800:160:1b3c::/46": "14259", - "2804:702c::/32": "262909", - "2a00:1dd0::/29": "719", - "2a0e:2980:2::/48": "34568", - "2001:559:8644::/48": "7922", - "240a:ae58::/32": "146322", - "2800:160:10ab::/43": "14259", - "2806:230:101c::/48": "265594", - "2001:4878:b010::/48": "12222", - "2409:8907:7d20::/38": "24547", - "2602:fe67::/36": "40646", - "240e:473:8f50::/40": "4134", - "2600:1000:9e00::/44": "6167", - "2804:7f34:110::/32": "271673", - "2a00:61a0::/32": "60205", - "2a0a:1c40::/29": "198024", - "2001:400:211:52::/58": "293", - "2408:8346::/35": "140726", - "2804:2de8::/32": "265311", - "2a02:26f7:f881::/46": "20940", - "2001:998:83::/29": "719", - "240a:acf4::/32": "145966", - "2600:6000:f5d5::/48": "11351", - "2a02:26f7:d185::/46": "20940", - "2a03:1ea0::/32": "201714", - "2001:550:5500:1::/38": "174", - "2409:8c28:7de1::/32": "56041", - "2606:4700:8ca0::/44": "13335", - "2a02:26b0:8000::/48": "42910", - "2408:8256:3976::/48": "17816", - "2a02:b8::/38": "25273", - "2a0c:3500:1::/48": "51201", - "2001:559:82ec::/48": "33659", - "2001:1670::/32": "28885", - "240e:473:a000::/41": "140485", - "2603:b010:2000::/33": "11796", - "2605:b000::/32": "33361", - "2408:840d:d200::/42": "17621", - "2804:1e2c:200::/40": "264412", - "2804:5dc4::/32": "268991", - "2a02:ee80:416a::/43": "3573", - "2001:559:86b8::/47": "7922", - "2407:5d80::/32": "59362", - "2804:588c::/32": "268135", - "2a11:fc0::/29": "210767", - "2a03:a860:17::/44": "34587", - "2001:7d0::/32": "3249", - "2001:49f0:d097:8000::/44": "174", - "2400:c700:11::/40": "55644", - "2405:7f00:ae40::/40": "133414", - "2600:6000:f0cb::/48": "11351", - "2803:980:b00::/37": "263248", - "2a01:190:15f::/48": "51454", - "2a10:1e40::/29": "206173", - "2408:8456:6a40::/39": "17816", - "2600:1007:9100::/44": "6167", - "2605:3e00::/32": "13706", - "2620:100:d000::/47": "33419", - "2a02:26f7:1b::/48": "20940", - "2a02:d180::/29": "39090", - "2c0f:f390::/32": "37356", - "2001:559:c155::/48": "33651", - "240e:438:1840::/38": "4134", - "2408:8956:e000::/40": "17622", - "2001:c20:4888::/46": "3758", - "2406:eb00:208::/47": "132653", - "2a10:9980:254::/48": "39110", - "2606:2800:4a4c::/46": "15133", - "2620:11e:f001::/44": "27644", - "2804:cd4::/32": "52558", - "2804:7be8::/32": "271462", - "2804:18:5010::/42": "26599", - "2a02:26f7:4c::/48": "36183", - "2401:d800:b770::/40": "7552", - "2600:6c38:12a::/45": "20115", - "2801:16:c800::/48": "19429", - "2804:808::/32": "16735", - "2a02:2400::/32": "29263", - "2a06:71c0::/29": "203968", - "2001:468:2611::/44": "11537", - "2001:dce:3::/48": "133532", - "2407:6e00:1::/48": "17987", - "2409:8c85:aa39::/41": "9808", - "2600:1404:5::/48": "35994", - "2602:fd10:820::/44": "398795", - "2607:f4e8:6::/44": "22822", - "2001:559:81aa::/48": "7015", - "2604:880:54::/48": "29802", - "2803:4be0::/32": "270078", - "2804:318c:ff02::/40": "265023", - "240a:ac17::/32": "145745", - "2607:800::/32": "26794", - "2806:268:2302::/37": "13999", - "2a04:c00::/29": "41400", - "2001:67c:19d0::/48": "43770", - "240a:a153::/32": "142989", - "2602:ff16:10::/46": "29802", - "2607:ffd0:700::/36": "26994", - "2804:1764::/32": "263143", - "2804:3940::/32": "266021", - "2804:7c5c::/32": "271491", - "2607:fd48:fff0:1046::/44": "13536", - "2804:3cd0::/32": "266236", - "2a00:6901:c005::/48": "20926", - "2600:6c38:187::/44": "20115", - "2606:3f80::/32": "394102", - "2a02:582:1c00::/33": "6799", - "2a0b:6380::/29": "206318", - "2001:559:8588::/48": "33491", - "2407:2c0::/48": "140775", - "240a:a73a::/32": "144500", - "2600:1415:b::/43": "20940", - "2804:4250::/32": "267492", - "2804:4b1c::/32": "267284", - "2001:67c:2e38::/48": "31424", - "240e:3be:d000::/36": "134772", - "2a0a:4587:2010::/32": "29670", - "2001:579:18cc::/39": "22773", - "2001:678:40::/48": "25354", - "2607:f6f0:4005::/40": "29884", - "2a06:1280:aee2::/33": "61138", - "2001:df0:86::/48": "18055", - "2001:1a11:f7::/48": "8781", - "2604:d600:566::/43": "32098", - "2806:230:5009::/48": "11888", - "2a02:5560::/32": "60130", - "2001:43f8:10f0::/48": "328280", - "2405:7cc0::/32": "139792", - "240e:473:a450::/39": "4134", - "2602:ffb0:7::/48": "20473", - "2610:f0:37f::/40": "22925", - "2804:448c::/32": "267638", - "2a0f:9400:100::/46": "59893", - "2001:16d8:8f0::/44": "16150", - "240a:a3e2::/32": "143644", - "2800:5f0::/45": "22724", - "240c:4000::/24": "38365", - "2600:1003:9010::/40": "22394", - "2607:f740:e630::/46": "63911", - "2804:7ca8::/32": "271510", - "2a0a:ad80::/29": "60670", - "240a:ac79::/32": "145843", - "2804:135c::/32": "263530", - "2804:7a24::/32": "271350", - "2a02:d480::/38": "680", - "2408:8957:8600::/40": "17622", - "2610:a1:1014::/48": "397218", - "2804:2b8c::/32": "265159", - "2a04:5b80:200::/48": "202265", - "2a0e:b107:1370::/44": "211267", - "2001:1248:9719::/46": "11172", - "2a0a:56c4:8301::/48": "42649", - "2001:559:78e::/48": "7922", - "2001:df3:d780::/48": "139605", - "2c0f:6a00::/32": "328829", - "240e:967:800::/37": "133774", - "2605:a7c0:121::/44": "16509", - "2607:f360::/39": "32592", - "2804:aa8:200::/37": "52903", - "2804:6964::/32": "270267", - "2804:4e10::/32": "268237", - "2a01:4440::/32": "31499", - "2a02:13b8::/29": "15614", - "2409:8752:300::/37": "56047", - "2800:b70:e::/47": "262191", - "2804:c84::/32": "52720", - "2a05:bf81::/32": "50352", - "2001:940::/32": "12853", - "2001:fd8:33f0::/44": "4775", - "2001:4478::/48": "4802", - "2401:d800:440::/42": "7552", - "2408:8459:2e30::/44": "17623", - "2409:806a:100::/36": "9808", - "2804:8034::/32": "271736", - "2a0f:c440::/48": "212073", - "2404:9dc0:cd01::/48": "138699", - "2a02:4544:e0::/46": "197207", - "2a0e:97c5:680::/46": "20473", - "2a11:980::/29": "208861", - "2602:ff62:124::/40": "61317", - "2800:160:1437::/41": "14259", - "2a03:be80::/32": "15510", - "2001:12f0:b28::/43": "1916", - "2001:1498::/32": "12956", - "2606:4c80::/32": "5650", - "2a02:27ab::/32": "21100", - "2a09:8280:14::/42": "40509", - "2001:559:85b4::/47": "7922", - "2406:3000:c::/43": "4657", - "2409:8020:1061::/43": "56046", - "2806:2f0:30c4::/42": "17072", - "2a03:2880:f11d::/46": "32934", - "2800:440:70::/48": "27738", - "2001:559:c0d9::/48": "33489", - "2400:fb80::/32": "63930", - "2401:4900:4b50::/44": "45609", - "240a:a3b9::/32": "143603", - "240a:ac59::/32": "145811", - "2600:1417:3800::/48": "24319", - "2607:9080:705::/48": "62424", - "2800:a10:2002::/32": "11014", - "2804:2a4c::/32": "53167", - "2a00:6760::/32": "202140", - "2a0e:2b80:203::/32": "28875", - "2803:8100::/32": "21826", - "2a02:26f0:9e::/48": "20940", - "2a02:26f0:a200::/48": "34164", - "2001:559:c01d::/48": "7015", - "2001:579:8e8::/43": "22773", - "2402:ef03:2100::/33": "7633", - "2a02:838a:50::/29": "8412", - "2001:559:c0bd::/46": "33651", - "2401:4900:3670::/40": "45609", - "240e:3b6:6400::/35": "140312", - "2620:0:2f00::/41": "693", - "2a0d:1680::/29": "199926", - "2400:5280:1800::/34": "63199", - "2405:6100::/32": "3462", - "240a:af9e::/32": "146648", - "240e:f7:3000::/36": "136190", - "2804:314:4019::/42": "61568", - "2804:21a4:1800::/32": "53190", - "2a04:1600::/29": "61967", - "2001:559:c2cc::/48": "7016", - "2a00:d600::/32": "24778", - "2400:12::/48": "4766", - "2408:8957:aa00::/40": "17622", - "2804:1288:f01::/35": "263482", - "2a02:ca0::/32": "8587", - "2001:df0:5800::/48": "55660", - "2804:414c::/32": "28204", - "2a04:4e42:fe6::/43": "54113", - "2a0e:4480::/32": "57757", - "2604:d600:131e::/42": "32098", - "2610:30:4001::/32": "30313", - "2804:73b8::/32": "270933", - "2804:7594::/32": "271056", - "2409:804b:2901::/45": "9808", - "2607:fda8:1019::/33": "6128", - "2804:1664::/32": "263285", - "2a0e:1b80:1003::/48": "54201", - "2001:df0:2e4::/48": "18123", - "2402:800:7850::/42": "7552", - "2402:ef0b:4000::/36": "24515", - "2405:1c0:6873::/40": "55303", - "2408:8456:e610::/42": "134543", - "2607:e080::/32": "197696", - "240a:a247::/32": "143233", - "2607:f180:7300::/31": "35908", - "2001:df6:6880::/48": "16509", - "2800:68:1d::/48": "27947", - "2800:160:1f63::/43": "14259", - "2a00:de20::/32": "62405", - "2a02:26f0:4301::/37": "20940", - "240a:ae0d::/32": "146247", - "2804:1cc4::/38": "61674", - "2804:5a38::/32": "268756", - "2806:2f0:2460::/48": "17072", - "2804:3e8:2::/39": "28663", - "2804:6b40::/32": "270388", - "2a00:8220::/32": "24971", - "2a10:440::/29": "207289", - "2001:67c:2b50::/48": "44865", - "2001:4dc0::/32": "12703", - "2400:cd00:1044::/48": "138911", - "2620:4a:c000::/48": "32703", - "2804:3f08::/32": "266635", - "2a00:a8e0:201::/46": "15598", - "2a09:84c0::/37": "8145", - "2001:1af8:4410::/48": "38930", - "2408:8756:2cfd::/46": "135061", - "2804:1e0c:fffe::/47": "264141", - "2001:559:c39a::/48": "33667", - "240a:ad22::/32": "146012", - "2a03:8ac0:254::/47": "47523", - "2c0f:ee18::/32": "37110", - "2001:df6:f000::/48": "133142", - "2402:a300:4000::/45": "55427", - "2409:8904:cca0::/39": "24547", - "2604:a040::/32": "38195", - "2606:2800:457::/44": "15133", - "2001:559:c39b::/48": "33659", - "240e:95:8002::/33": "17638", - "2800:160:1077::/40": "14259", - "2800:550:5::/42": "7004", - "2806:2f0:3081::/42": "17072", - "2404:8000:d7::/42": "17451", - "2602:fc9b::/36": "26795", - "2a01:b747:6f1::/32": "714", - "2806:230:203f::/48": "11888", - "2a00:1ab8::/32": "29422", - "2408:8957:bc00::/40": "17622", - "240a:a2cf::/32": "143369", - "2600:370f:36e0::/45": "32261", - "2604:cb40::/32": "40020", - "2804:4f0c::/32": "268300", - "2804:6914::/32": "270247", - "2001:67c:132c::/48": "13189", - "2400:7400:e035::/48": "38044", - "2001:df4:2900::/48": "56155", - "2404:3d00:4060::/46": "3573", - "2a01:4c8:f401::/48": "2856", - "240a:aeec::/32": "146470", - "2600:1415:a::/48": "24319", - "2a02:2ad0:133::/45": "702", - "2a0d:3c00::/29": "205243", - "2804:3218::/32": "265055", - "2001:df5:4080::/48": "135839", - "2001:4490:4c80::/47": "9829", - "2001:44b8:308a::/45": "7545", - "2408:84f3:3010::/44": "17623", - "2600:1003:b440::/42": "6167", - "2600:6c38:177::/44": "20115", - "2620:38:a00::/48": "22695", - "2804:487c:21e::/42": "267124", - "2a05:fc80::/29": "57118", - "2408:8456:1040::/38": "17816", - "240a:ae07::/32": "146241", - "240e:250:1700::/34": "4134", - "2600:6c38:224::/44": "20115", - "2001:44b8:1068::/34": "4739", - "2600:1406:ec00::/48": "35994", - "2600:1900::/33": "15169", - "2a02:26f7:db45::/46": "20940", - "2409:8d18::/31": "134810", - "2804:2b44:8100::/33": "265144", - "2806:230:500c::/48": "265594", - "2a0d:7ac0::/29": "210206", - "2001:44c8:12a::/45": "45430", - "240a:a11f::/32": "142937", - "2804:460c::/32": "266965", - "2806:230:1018::/48": "265594", - "2a02:26f7:c405::/46": "20940", - "2001:678:ccc::/48": "206477", - "2001:1938:4100::/40": "33438", - "240a:a246::/32": "143232", - "240a:a3af::/32": "143593", - "240e:473:a200::/41": "140485", - "2a0f:75c0:1::/46": "44016", - "2405:2400::/48": "38546", - "2001:559:c373::/48": "33287", - "2001:579:6f01::/45": "22773", - "2403:2400::/32": "9729", - "2804:68ec::/32": "270237", - "2a02:26f7:85::/48": "20940", - "2a0d:5a80::/29": "21100", - "2001:559:af::/48": "7016", - "2404:b0:1006::/44": "4750", - "2600:3000:3102::/33": "13649", - "2a00:ff0:8888::/48": "12672", - "2a00:59c0:4::/32": "49232", - "2a02:2518:12::/29": "28917", - "2a02:7680::/32": "57119", - "2a0f:eb80::/47": "47267", - "2600:1417:3001::/37": "20940", - "2804:72a4::/32": "270866", - "2a02:26f0:d4::/42": "20940", - "2a02:26f7:12::/48": "36183", - "2a07:71c0::/29": "202918", - "2a09:7ac0::/32": "39679", - "2a0d:8d00::/30": "47750", - "2001:1368::/32": "3551", - "2402:c800:fff9::/45": "38639", - "2620:81:2000::/48": "16904", - "2a0e:b107:197::/48": "207559", - "2001:559:78b::/48": "7015", - "240e:14:8000::/36": "4134", - "2600:1415:3c01::/33": "20940", - "2803:9840:a000::/33": "263765", - "2804:1c1c::/34": "61638", - "2806:230:2008::/48": "265594", - "2406:3003:2081::/36": "4657", - "2803:c4e0:8000::/33": "269809", - "2001:df3:2880::/48": "140021", - "2406:81c0::/32": "141203", - "240a:a1fe::/32": "143160", - "2600:c06::/32": "12181", - "2804:29b8::/35": "28126", - "2804:4b88::/32": "267312", - "2a0f:dac0:2::/29": "60781", - "2001:559:158::/48": "33662", - "2001:559:8293::/45": "7922", - "2001:559:8399::/48": "33662", - "2409:893c::/31": "24444", - "2600:3501:7000::/32": "396998", - "2602:feda:dd0::/44": "46997", - "2a02:26f7:e084::/48": "36183", - "2a0e:b800::/31": "197216", - "2401:e380:10::/48": "131091", - "2602:220::/32": "16532", - "2a00:16d8::/32": "42695", - "2001:c38:9041::/44": "9931", - "2001:4bd8:52::/48": "199284", - "240a:aea9::/32": "146403", - "2600:380:f1d4::/42": "20057", - "2401:e780::/32": "63930", - "2409:8014::/44": "56044", - "2a02:2498:296::/32": "13213", - "2a02:5f60::/32": "201955", - "2a0a:bd40::/29": "208808", - "2001:1838:3100::/33": "23352", - "2406:2000:fc::/46": "10229", - "2001:418:1456:1300::/56": "16625", - "2400:9380:89c0::/44": "136167", - "2407:a600:8000::/36": "18004", - "2602:ffc5:152::/47": "7489", - "2604:6680::/32": "18853", - "2a01:55e4::/30": "201709", - "2001:559:580::/48": "7922", - "240e:3b5:1400::/38": "134773", - "240e:473:9000::/41": "140485", - "2605:a404:a36::/40": "33363", - "2804:6504::/32": "269463", - "2a01:ce8c:a000::/35": "51964", - "2001:590::/35": "3257", - "2408:8459:9430::/41": "17622", - "2604:af40::/32": "14099", - "2607:fc28:5000::/34": "22911", - "2a0e:6540:a192::/48": "208364", - "2a0e:b105:110::/44": "211851", - "2405:7f00:c900::/34": "133414", - "2604:fb80:601::/36": "15128", - "2806:230:6017::/48": "11888", - "2a02:26f7:c208::/48": "36183", - "2a02:fb00::/29": "44066", - "2001:dce:7801::/37": "23869", - "2401:1700:7c30::/32": "55666", - "2401:e180::/32": "9674", - "2404:de00::/32": "55819", - "2806:230:6016::/48": "265594", - "2a0f:72c0::/29": "39106", - "2803:eb80::/32": "61493", - "2a00:9640:6a::/32": "57710", - "240e:1a:50::/39": "23650", - "2600:6c38:d1f::/38": "20115", - "2607:9280:1::/48": "395502", - "2804:5f28::/32": "269080", - "2806:230:2033::/48": "11888", - "2a02:26f0:9e00::/48": "34164", - "2001:559:809b::/48": "33491", - "2405:db40::/32": "137987", - "2600:1010:9110::/36": "22394", - "2407:c080:7000::/47": "55990", - "2606:2800:4a0c::/46": "15133", - "2a01:5300::/32": "2840", - "2a06:24c0::/29": "12576", - "2c0f:f338::/32": "327983", - "2600:140f:2e01::/35": "20940", - "2a02:26f7:d041::/46": "20940", - "2600:1004:9000::/44": "6167", - "2803:e080::/32": "12150", - "2806:2f0:21::/46": "22884", - "2001:4de0:ac13::/48": "33438", - "2a0d:2585::/32": "211398", - "2001:550:800:200::/39": "174", - "2001:f18::/32": "9916", - "2804:5dc:100::/32": "53019", - "2804:7568::/32": "271044", - "2001:1658::/29": "719", - "2401:d800:d370::/40": "7552", - "2409:8924:9500::/38": "56046", - "2804:7680::/32": "271116", - "2400:8000:2421::/35": "4800", - "2402:800:f690::/39": "7552", - "2409:8050:1002::/40": "56047", - "2607:2f00:15::/44": "12025", - "2800:b10:100::/44": "27884", - "2800:bf0:80e0::/47": "52257", - "2404:f4c0:f000::/44": "24239", - "2408:8957:dd00::/40": "17816", - "2804:1c80::/32": "61657", - "2a00:1d38:fb::/32": "50655", - "2a11:7380::/29": "18779", - "2402:8100:39d0::/42": "45271", - "2404:7180:a010::/48": "23848", - "2605:b8c0::/32": "22534", - "2001:678:4fc::/48": "59947", - "2605:9440::/32": "397446", - "2a02:6680:f1e0::/43": "16116", - "2a02:f000::/32": "199490", - "2001:4c08:2026::/48": "32787", - "2405:f600:30::/45": "45117", - "2600:140f:4c00::/48": "9498", - "2607:fe00::/35": "30689", - "2a02:26f7:cd01::/46": "20940", - "2a03:40e0::/32": "196932", - "2001:1900:229b::/48": "63168", - "2600:140b:15::/38": "20940", - "2803:a480::/32": "262192", - "2806:2f0:30e1::/46": "17072", - "2a02:26f7:bac1::/45": "20940", - "2a0d:8040::/31": "61439", - "2001:1248:7008::/47": "11172", - "2402:800:9d1d::/41": "7552", - "2602:fe90:700::/48": "35913", - "2a00:8740:1e::/42": "49037", - "2a01:d0::/43": "29632", - "2a02:c08::/32": "21050", - "2a0a:7540:4::/29": "206066", - "2001:df0:8400::/48": "55741", - "240e:438:7640::/36": "4134", - "2607:fdf0:5fa7::/41": "8008", - "2804:3b0:830d::/33": "53062", - "2804:4284:4000::/38": "267505", - "2a01:b740:a18::/48": "6185", - "2001:808::/35": "9112", - "2400:cb00:274::/47": "13335", - "240a:ab4b::/32": "145541", - "2620:0:e50::/45": "3676", - "2804:db8::/32": "28335", - "2804:4ddc::/32": "268224", - "2a01:4020:3::/43": "25369", - "2001:559:8537::/48": "33491", - "2001:559:8285::/48": "7015", - "2001:559:c222::/48": "33667", - "2001:4878:7::/44": "12222", - "2404:170::/32": "38525", - "2602:fdb1::/36": "54638", - "2607:ff60:4009::/48": "20251", - "2a0a:4d80::/29": "44462", - "2800:ba0:12::/48": "263812", - "2001:67c:148c::/48": "199564", - "2001:df0:2bf::/48": "198723", - "2402:800:940f::/43": "7552", - "2402:5300:1210::/34": "45903", - "240a:a4a2::/32": "143836", - "2604:4d40:fff::/48": "213073", - "2610:a0::/43": "7786", - "2804:3b8:9::/41": "52965", - "2a01:cb22::/34": "3215", - "2001:253:127::/48": "142093", - "2001:678:ad8::/48": "208562", - "2001:4878:81e0::/44": "35994", - "2605:a404:343::/40": "33363", - "2800:160:17c4::/47": "14259", - "2804:436c::/32": "267569", - "2a02:26f0:108::/46": "20940", - "2607:f7b8::/32": "10490", - "2a02:2588::/29": "28851", - "2001:4998:1d::/46": "10310", - "2602:fed2:7303::/48": "209294", - "2a04:9440::/30": "21182", - "2a04:f000::/29": "60016", - "2606:5580:2000::/38": "63242", - "2001:df0:246::/48": "9555", - "2001:df2:c900::/48": "38635", - "2400:9380:90b0::/45": "4809", - "2400:9380:95c0::/44": "136167", - "2401:9480::/32": "56304", - "2600:1f70:5000::/40": "16509", - "2602:fe12:22::/48": "62707", - "2804:5248::/32": "268508", - "2001:559:8165::/48": "33654", - "2001:4048:105::/48": "198345", - "2402:800:7240::/42": "7552", - "2607:f380:806::/47": "257", - "2001:dce:8401::/38": "23869", - "2406:840:3c0::/48": "139317", - "2800:484:a00::/40": "10620", - "2a01:c50f:f5c0::/38": "12479", - "2a09:be40:6b00::/40": "208810", - "2408:8256:1066::/39": "17622", - "2605:7680::/32": "11042", - "2a00:96c0::/32": "198538", - "2a02:26f7:cf05::/46": "20940", - "2402:1280::/32": "63931", - "2604:a880:400::/48": "14061", - "2804:1bf0::/47": "61758", - "240e:473:b120::/41": "140486", - "2600:1415:4001::/37": "20940", - "2803:10e0:24::/32": "269853", - "2804:101c::/32": "53043", - "2a02:ac80:d001::/34": "25145", - "2a02:cb43:4009::/48": "20546", - "240a:adca::/32": "146180", - "240e:44d:6d80::/41": "4134", - "2607:f170:120::/41": "6364", - "2804:3b64::/32": "266146", - "2804:41f8:f502::/36": "267469", - "2400:adc0:4030::/47": "9541", - "240a:a28c::/32": "143302", - "2605:a404:8b2::/45": "33363", - "2606:ac80::/32": "393582", - "2800:98:111b::/37": "14754", - "2001:559:8244::/48": "33651", - "2a10:a080::/29": "51083", - "2001:559:201::/48": "33660", - "2401:d800:f290::/42": "7552", - "2402:800:9447::/43": "7552", - "240a:ae9a::/32": "146388", - "2a00:b280::/32": "15557", - "2a02:e30:f0a0::/48": "60755", - "2a02:2230:4300::/34": "25467", - "240a:a52f::/32": "143977", - "240a:a9af::/32": "145129", - "240e:3b9:c800::/37": "4134", - "2800:88:10::/46": "26210", - "2804:6728::/47": "269608", - "2a09:3580::/29": "38946", - "2402:7500:4c0::/48": "24158", - "2403:e440::/32": "138096", - "2409:8018:28f2::/35": "134810", - "2604:880:3a3::/45": "29802", - "2604:7e00:70::/38": "17378", - "2803:3440:9004::/40": "64112", - "2001:4dc8::/36": "16316", - "2604:9d80:13::/32": "395172", - "2804:15c8::/32": "263410", - "2a00:11c0:4a::/48": "42473", - "2a02:26f7:e489::/46": "20940", - "2a02:ac80:f001::/29": "25145", - "2001:43f8:1320::/48": "328358", - "2a0d:9480::/29": "35916", - "2a10:2f01:100::/48": "39753", - "2001:559:364::/48": "13367", - "240a:a348::/32": "143490", - "2600:380:9000::/38": "20057", - "2600:6c1c::/30": "20115", - "2620:10d:6004::/48": "26722", - "2800:160:2b07::/41": "14259", - "2804:40c4::/32": "265980", - "2001:67c:15c8::/48": "3246", - "2001:df0:6e80::/48": "17439", - "2806:230:200d::/48": "11888", - "2402:e280:2107::/44": "134674", - "2409:800b:2806::/39": "9808", - "2602:fc85:ff0::/47": "398875", - "2804:52ac::/32": "268533", - "2a02:970:1053::/42": "44002", - "2a02:26f7:a2::/48": "36183", - "2600:1017:f400::/44": "22394", - "2610:150::/32": "46844", - "2a03:3840::/29": "199600", - "2001:fd8:1a0::/48": "132199", - "240a:a45d::/32": "143767", - "2804:43e0::/32": "267596", - "2600:5c01:e0a::/48": "11351", - "2804:14c:471::/45": "28573", - "2804:5258::/32": "268512", - "2804:7f08:a::/34": "271662", - "2001:67c:564::/48": "62121", - "2602:fd23:3::/45": "33185", - "2607:f8f0:1200::/40": "271", - "2a0b:72c0::/32": "60522", - "2001:67c:75c::/48": "204254", - "2001:1248:55e6::/43": "11172", - "240a:a0ea::/32": "142884", - "240e:438:2240::/37": "4134", - "2001:67c:4::/48": "51531", - "2405:e6c0::/32": "137532", - "2606:4700:12::/42": "13335", - "2804:428::/32": "28218", - "2a0f:b4c1::/32": "57487", - "2001:1248:98e3::/48": "11172", - "2402:2400::/33": "9226", - "240a:aecc::/32": "146438", - "2606:2f80::/32": "395075", - "2a02:26f7:ba80::/48": "36183", - "2001:67c:2d14::/48": "204088", - "2001:df5:a180::/48": "136696", - "2604:aa00::/32": "14159", - "2610:18::/32": "2828", - "2a02:2698:1400::/38": "50542", - "2a02:26f0:3501::/40": "20940", - "2a0c:b641:290::/44": "208506", - "2600:1408:f001::/37": "20940", - "2620:128:1002::/48": "53620", - "2804:2550::/32": "264273", - "2c0f:ea28::/32": "327932", - "2620:2d:4005::/48": "41231", - "2a09:2dc3::/29": "30860", - "2001:559:a7::/48": "33651", - "2001:579:b849::/45": "22773", - "2400:9380:87c0::/44": "136167", - "2402:c800:ff72::/47": "18259", - "2a02:26f0:7701::/36": "20940", - "2001:128c:7100::/32": "25933", - "2401:d800:2460::/40": "7552", - "240a:adb6::/32": "146160", - "2806:230:2001::/48": "11888", - "2a02:26f7:fb84::/48": "36183", - "2a05:6744::/48": "3549", - "2a10:7240::/32": "212574", - "2001:388:6030::/48": "137188", - "2001:67c:274c::/48": "42034", - "2a07:1e80::/29": "57795", - "2a10:c0c0::/29": "208861", - "2401:2280::/32": "56294", - "2620:3c::/42": "35929", - "2804:2c20::/32": "265197", - "2a00:11b0::/29": "16019", - "2a02:26f0:11b::/48": "34164", - "2804:42b0::/32": "267519", - "2a02:20a8::/32": "15830", - "2a02:26f7:c5c9::/42": "20940", - "2a02:ee80:41d8::/42": "3573", - "2401:d800:670::/40": "7552", - "240a:ad0a::/32": "145988", - "2605:3380:ff06::/48": "12025", - "2801:80:300::/48": "53039", - "2a0b:e182:100::/38": "198605", - "2403:5a40:20::/48": "134562", - "2606:f405::/32": "11776", - "2001:67c:21e8::/48": "51944", - "2402:4f00:4004::/32": "58453", - "2600:100d:9f10::/40": "22394", - "2406:8600:f03f::/41": "10310", - "2408:8610::/29": "4837", - "2a02:26f7:d9c8::/48": "36183", - "2a02:2a50::/29": "49800", - "2001:fd8:260::/48": "132199", - "2404:4840::/32": "138568", - "240a:a2e5::/32": "143391", - "240e:979:e00::/40": "134770", - "2a02:26f0:fa01::/37": "20940", - "2001:579:701c::/42": "22773", - "240a:a86d::/32": "144807", - "2804:14f0::/32": "263360", - "2a02:26f0:3901::/37": "20940", - "2a03:6505:2000:6::/64": "25513", - "2a0a:9300:1::/48": "207569", - "2001:678:814::/48": "64404", - "2401:4900:3c70::/40": "45609", - "2403:7f40:ff00::/48": "20473", - "2403:fc00:40::/32": "9482", - "2404:b9c0:b0::/32": "137409", - "2610:a1:1079::/48": "397228", - "2a0e:5e86::/32": "44176", - "2803:8500::/32": "27987", - "2804:1ad4::/32": "52536", - "2001:4478:1::/48": "4739", - "2401:dac0::/32": "13984", - "2600:4040:8000::/31": "701", - "2604:ed40::/32": "25697", - "2804:5f8c::/32": "269108", - "240e:108:4c::/48": "58519", - "2606:b40::/32": "393445", - "2403:b080::/32": "17964", - "240e:108:4e::/48": "136195", - "2604:7ac0:900::/40": "398014", - "2620:84:6000::/48": "393936", - "2620:e2:4000::/48": "64230", - "2a01:280:350::/48": "3301", - "2400:1700:200::/48": "136552", - "2a0b:9cc0::/29": "12859", - "2a0c:c400::/32": "8473", - "2a10:200::/47": "208059", - "2600:140b:a001::/38": "20940", - "2604:b5c0::/32": "394859", - "2a09:bac0:242::/48": "13335", - "2001:559:8325::/48": "33652", - "2001:4878:a261::/48": "12222", - "2620:107:907d::/48": "22787", - "2a02:26f0:bb00::/48": "34164", - "2803:e600::/46": "18809", - "2001:559:58a::/47": "7922", - "2001:678:11::/48": "200070", - "2001:67c:2150::/48": "49750", - "2001:4998:190::/46": "10310", - "2402:5ec0::/36": "23724", - "2409:804e:100::/36": "9808", - "2801:1b:2000::/48": "61447", - "2a03:99a0::/32": "2606", - "2a0e:b107:15ae::/48": "142597", - "2401:f000:18::/48": "23838", - "2403:e200:2::/43": "45543", - "2404:bc80:2::/32": "64072", - "240a:af87::/32": "146625", - "2804:7a94:2100::/32": "271380", - "2c0f:f598:6::/47": "327813", - "240a:a155::/32": "142991", - "2604:ccc0::/32": "46506", - "2607:f348:3596::/32": "13354", - "2a01:2b0::/29": "12552", - "2401:fd80:404::/46": "137502", - "2404:8d02:28c6::/39": "9587", - "2409:897b::/29": "9808", - "240a:a385::/32": "143551", - "2803:9800:b4c1::/46": "11664", - "2804:4b78::/32": "267308", - "2806:230:2052::/48": "265594", - "2602:809:3000::/48": "34553", - "2604:2bc0::/32": "396141", - "2804:29a8::/32": "264027", - "2a02:26f7:d28c::/48": "36183", - "2404:b280:c000::/34": "141461", - "2409:800c::/30": "56042", - "2606:e480::/39": "55083", - "2a04:2dc0:4::/48": "39216", - "2a0b:de00::/42": "6805", - "2a0f:2a80::/29": "204860", - "2409:8020:a1::/43": "56046", - "2600:141b:e801::/35": "20940", - "2a0f:2bc0::/29": "60262", - "2001:559:844c::/48": "7016", - "2402:e380:100::/43": "139073", - "2620:6e:a007::/44": "397444", - "2620:10e:6000::/40": "11279", - "2001:559:c20b::/48": "7922", - "2001:df0:18::/48": "45344", - "240a:a62e::/32": "144232", - "2804:1218::/40": "263456", - "2a02:2430:3::/48": "59491", - "2a02:26f7:cac0::/48": "36183", - "2402:800:5901::/44": "7552", - "240a:ae6e::/32": "146344", - "240e:473:b000::/41": "140485", - "2a02:6680:2162::/48": "16116", - "2001:460:74::/46": "3561", - "2001:559:8547::/48": "7016", - "2001:678:b54::/48": "41268", - "2402:800:96b7::/41": "7552", - "2409:8002:100::/37": "9808", - "2804:6200::/32": "269270", - "2c0f:fbc8::/32": "37075", - "2001:559:1aa::/48": "33287", - "2606:6ec0::/32": "3356", - "2607:f6f0:5001::/48": "394749", - "2806:230:500d::/48": "11888", - "2a00:15f8:a001::/33": "25532", - "2a0e:b107:1600::/44": "210842", - "2001:559:8144::/48": "7725", - "2402:800:3efe::/33": "7552", - "2406:840:ac10::/44": "139317", - "2800:160:1b5b::/42": "14259", - "2804:7ae4::/32": "271398", - "2a01:ac80::/32": "15958", - "2001:559:5eb::/48": "22909", - "2409:8924:3900::/38": "56046", - "240e:978:900::/40": "137697", - "2603:c022::/35": "31898", - "2801:1e0::/41": "27875", - "2804:7358::/32": "270909", - "2804:8260::/32": "272516", - "2a0e:b107:1041::/48": "211604", - "2409:40c3::/26": "55836", - "2604:6840:ac20::/48": "20446", - "2606:5f00::/32": "10396", - "2804:d0c:8040::/33": "53112", - "2a02:970:1062::/44": "44002", - "2a02:cb80:4280::/45": "43766", - "2a03:a240::/46": "199441", - "2001:559:8500::/47": "7922", - "2400:dcc0:ae04::/39": "38631", - "2600:140f:cc01::/38": "20940", - "2605:ff80::/32": "21632", - "2a02:26f0:a401::/39": "20940", - "2607:fb90:fa00::/37": "21928", - "2401:d800:7930::/41": "7552", - "2408:84f3:3420::/43": "17816", - "240a:a7a3::/32": "144605", - "2602:fd60:12::/42": "396503", - "2605:4400:2::/45": "40715", - "2804:295c::/32": "53209", - "2620:122:8008::/48": "30069", - "2803:ba40::/47": "263756", - "2804:7f84::/32": "271693", - "2001:e48:40:6::/45": "9583", - "2001:1248:706d::/43": "11172", - "2620:106:7002::/45": "11795", - "2a05:1080:30::/48": "61004", - "2804:5114::/32": "268429", - "2a02:26f0:11f::/42": "20940", - "2a02:26f7:eb45::/46": "20940", - "2a02:fac0::/32": "58220", - "2a09:9400::/29": "24822", - "2001:67c:1754::/48": "201456", - "2001:67c:2e3c::/48": "57896", - "2001:df4:5300::/48": "137469", - "2600:1004:b170::/40": "22394", - "2a02:26f7:c088::/48": "36183", - "2a0b:9480::/29": "50308", - "2607:e880:1000::/48": "12220", - "2800:ad0::/32": "11816", - "2804:2eb0::/32": "265359", - "2a00:97a0::/32": "60651", - "2a0d:adc0::/29": "44659", - "2001:559:140::/48": "20214", - "2001:559:c3cf::/48": "21508", - "2801:80:9f0::/48": "263273", - "2804:58fc::/33": "268162", - "2804:7684::/32": "271117", - "2a04:ec10::/47": "32066", - "2401:f540:4::/48": "134094", - "240a:a8db::/32": "144917", - "2607:fc68::/42": "2711", - "2400:fa00::/32": "18065", - "2a00:c6c0:1::/48": "133752", - "2a10:9ec0::/29": "211785", - "2001:678:800::/48": "213103", - "2400:1440::/32": "135666", - "2408:866c::/27": "4837", - "240a:af84::/32": "146622", - "240e:3b7:7800::/39": "4134", - "2600:5400:e101::/36": "19108", - "2804:1f0a::/34": "10938", - "2001:500:134::/48": "396566", - "2001:4b20:100:206::/53": "34288", - "2404:3d00:40f6::/47": "21433", - "2405:b900:10::/44": "55701", - "2408:8456:3650::/39": "17816", - "240e:3b1:ec00::/35": "140314", - "2605:8e00::/32": "22772", - "2a02:26f7:b704::/48": "36183", - "2001:df3:bb80::/48": "140644", - "240e:958:2000::/40": "140527", - "2804:1370::/32": "61901", - "2001:67c:1000::/47": "43893", - "2409:8704:5900::/34": "24547", - "240a:a467::/32": "143777", - "2001:4c28:212::/48": "39832", - "2405:6e00:240::/40": "133612", - "2409:8914:c00::/38": "56044", - "240a:a6e6::/32": "144416", - "240e:3b4:9c00::/34": "140310", - "2a0e:b704:4::/48": "210960", - "2405:600:1003::/45": "55805", - "2401:d800:7560::/40": "7552", - "2404:4e00:1083::/48": "32787", - "240a:abbd::/32": "145655", - "2803:3540::/32": "61519", - "2001:8000::/20": "1221", - "2a05:d03a:a000::/40": "16509", - "2001:4408:7300::/37": "4758", - "2401:d800:b7a0::/41": "7552", - "2408:8957:3600::/40": "17622", - "2600:1000:b100::/42": "6167", - "2804:1528::/32": "263374", - "2a02:26f7:bb08::/48": "36183", - "2a03:76e0::/32": "44424", - "2c0f:ecf8::/32": "328441", - "2001:49f0:a06c::/43": "174", - "240a:ad76::/32": "146096", - "2804:1420::/35": "52901", - "2a0c:e640:102d::/48": "210951", - "2001:550:7708::/48": "25829", - "2001:678:88::/48": "44358", - "2409:806a:2100::/36": "9808", - "2a03:4440::/32": "62020", - "2406:380::/31": "7979", - "2600:6c38:a31::/41": "20115", - "2610:e8:1900::/47": "10753", - "2804:14d:600::/40": "28573", - "2a02:6d0::/32": "47227", - "2800:4b0::/33": "12252", - "2602:ffd9:400::/40": "62874", - "2804:2f44::/32": "264881", - "2806:312::/32": "265562", - "2c0f:f0e0::/32": "36972", - "2001:df2:b080::/48": "139929", - "2001:4408:5601::/36": "4758", - "2806:230:6030::/48": "265594", - "2a10:fa80:56::/44": "57050", - "2001:4288:8009::/33": "6713", - "2a02:d740::/29": "199567", - "2a09:bac0:145::/48": "13335", - "2401:ff80:178b::/45": "133954", - "2600:1480:1800::/48": "21342", - "2a02:26f7:f8d4::/48": "36183", - "2001:678:fc8::/48": "207960", - "2407:f800::/38": "38182", - "2409:8051:2802::/38": "56047", - "2a05:3950:8001::/37": "201503", - "2001:44b8:4047::/48": "4739", - "2404:bf40:e702::/48": "7545", - "2406:dc0:8850::/47": "9221", - "2406:fc00::/32": "45477", - "2804:320c::/32": "265053", - "2a02:26f7:dc44::/48": "36183", - "2001:550:9f03::/34": "174", - "240a:a525::/32": "143967", - "2604:4d40:acc::/48": "213073", - "2606:ae00:9e00::/44": "7287", - "2804:609c::/32": "269180", - "2a02:26f0:4b00::/48": "35994", - "2a0c:8fc2::/32": "202401", - "2001:1998:8d0::/44": "13343", - "2402:800:537f::/40": "7552", - "2804:674::/32": "28328", - "2804:800c::/32": "271726", - "2001:559:c32f::/48": "33659", - "240a:a866::/32": "144800", - "240e:3b4:5600::/34": "4134", - "2803:2280::/32": "264663", - "2404:8e80:2::/47": "45881", - "2804:8ec::/32": "28235", - "240d::/27": "2527", - "2600:1404:fc01::/31": "20940", - "2606:2800:333::/45": "15133", - "2a02:26f7:c884::/48": "36183", - "2001:67c:134::/48": "12643", - "2600:6c38:549::/38": "20115", - "2804:6344::/32": "269350", - "2a02:a0::/32": "8426", - "2c0f:f858:3::/32": "36947", - "2001:559:c361::/48": "33659", - "2400:1a00:5::/32": "17501", - "2607:f710:35::/48": "19624", - "2a01:53c0:2f::/48": "54994", - "2a03:9040::/32": "61281", - "2402:e280:212e::/47": "134674", - "240e:473:4520::/41": "140486", - "2606:ae00:6000::/41": "7287", - "2a0c:93c0:8020::/48": "212465", - "2001:df0:7980::/48": "38510", - "2408:8456:5000::/42": "17622", - "2800:160:1ff7::/44": "14259", - "2801:b0:c4::/32": "52888", - "2a0e:2c00::/29": "63023", - "2a07:e740:dc01::/43": "43299", - "2001:1930:3c10::/48": "11985", - "2402:800:571d::/42": "7552", - "2402:8100:3000::/42": "45271", - "2409:8a15:9800::/30": "56044", - "2803:6560::/32": "269755", - "2804:37c4::/32": "266435", - "2806:230:2005::/48": "11888", - "2a0d:a740::/46": "213371", - "2a0f:9400:7730::/44": "211767", - "2402:800:5c55::/42": "7552", - "2408:8256:2d77::/44": "17623", - "2620:10c:c072::/48": "15009", - "2404:3d00:412e::/43": "3573", - "2600:1415:5001::/36": "20940", - "2605:a40a::/32": "33363", - "2800:160:1541::/45": "14259", - "2a09:6ec0::/29": "197706", - "2001:67c:288::/48": "28855", - "240a:aae4::/32": "145438", - "2804:5290::/32": "268526", - "2001:559:864e::/48": "7922", - "2001:67c:1268::/48": "203383", - "2402:800:979b::/42": "7552", - "2402:2700:8000::/33": "132618", - "2408:8956:9400::/40": "17622", - "2602:fc91:163::/48": "399561", - "2a02:26f7:c685::/46": "20940", - "2001:dce:101::/48": "45285", - "240a:a921::/32": "144987", - "240a:ad1a::/32": "146004", - "2804:56c8::/32": "268023", - "2a02:440::/32": "30968", - "2a0c:da02::/32": "57878", - "240a:a241::/32": "143227", - "240a:ad5b::/32": "146069", - "2804:2644::/32": "264336", - "2a03:9b80::/34": "375", - "2001:559:c3fc::/48": "7016", - "2001:1960:13::/40": "5650", - "2804:1c0::/32": "28307", - "2a02:26f7:e9c5::/46": "20940", - "2a0c:1d00::/43": "39614", - "2408:8456:e240::/37": "17816", - "2602:ff62:208::/45": "61317", - "2620:6b:2000::/48": "397382", - "2a0f:5707:aa20::/46": "207622", - "2001:520:100b::/45": "8103", - "2409:8750:300::/37": "56047", - "2607:8300:a::/48": "13876", - "2605:6c00:1::/44": "2734", - "2001:480:11::/44": "668", - "240e:3b5:c000::/37": "140315", - "2607:fcf0::/47": "13445", - "2001:428:4804::/34": "209", - "2400:8905::/32": "48337", - "2401:d800:23e0::/37": "7552", - "2001:559:81f3::/45": "7922", - "2001:559:8340::/48": "7922", - "2001:67c:20dc::/48": "51740", - "2001:1248:98d0::/44": "11172", - "2404:0:5005::/48": "24154", - "2a00:1020::/45": "24739", - "2a01:7660:7::/32": "12843", - "240a:a9bc::/32": "145142", - "240e:6b3:2000::/32": "4134", - "240e:90d:d000::/37": "137688", - "2804:2a10::/32": "264054", - "2804:158c::/32": "263394", - "2001:559:83ff::/48": "33655", - "2001:ee0:362::/43": "135905", - "2400:7400:56::/48": "23736", - "2403:600::/32": "135391", - "240a:a80e::/32": "144712", - "240a:a8f1::/32": "144939", - "2607:fb90:b500::/36": "21928", - "2a07:da80::/29": "209372", - "2001:67c:54::/48": "47207", - "2408:8459:6630::/41": "17622", - "2600:1007:f008::/45": "6167", - "2a02:d48:bb::/48": "16080", - "2a02:26f7:c1c4::/48": "36183", - "2001:67c:118::/48": "50419", - "2001:df7:c600::/48": "135905", - "2408:8459:c050::/38": "17816", - "2607:6900::/32": "14818", - "2a02:26f7:ec0c::/48": "36183", - "2001:400:8815::/44": "293", - "240a:a9b8::/32": "145138", - "2600:6000:fd0e::/48": "11351", - "2a00:7580:60::/48": "8414", - "2a01:c50f:36c0::/39": "12479", - "2a02:26f7:f740::/48": "36183", - "2001:559:84b5::/48": "7725", - "240a:aa63::/32": "145309", - "240e:473:6a00::/41": "140485", - "2600:1003:9000::/44": "6167", - "2606:6680:7::/48": "40676", - "2800:160:12d3::/44": "14259", - "2803:e5e0::/32": "270035", - "240a:ac10::/32": "145738", - "2801:1b:a000::/48": "265700", - "2a02:e40::/32": "6700", - "2a09:e201::/48": "208422", - "240a:a3bc::/32": "143606", - "2c0f:f750::/32": "327724", - "2001:428:4408::/36": "209", - "2001:559:84c7::/48": "7015", - "2001:1388:248a::/36": "6147", - "2401:4900:1050::/42": "45609", - "240a:af6a::/32": "146596", - "2a03:1400::/32": "50272", - "2001:67c:2a2c::/48": "49566", - "2001:df4:1500::/48": "133448", - "2a04:8ec0::/48": "1712", - "2409:802f:2906::/48": "56041", - "240e:438:ac20::/43": "140647", - "2605:a40e:521::/45": "33363", - "2405:4500::/44": "9671", - "2408:8456:f100::/42": "17622", - "240a:adab::/32": "146149", - "2a02:26f7:f54c::/48": "36183", - "2a02:26f7:fc01::/46": "20940", - "2a0d:8d06:1000::/48": "48079", - "2a11:e900::/29": "211199", - "2001:4488::/45": "7713", - "240a:a321::/32": "143451", - "2a01:190:151f::/40": "1764", - "2001:559:391::/48": "33659", - "2401:5200::/32": "23659", - "2408:8420::/30": "4837", - "240a:a399::/32": "143571", - "2620:0:690::/47": "13371", - "2620:9b:c001::/48": "54413", - "2806:264:5300::/37": "13999", - "2a01:8840:dd::/48": "207266", - "2001:df0:1700::/48": "136070", - "2400:bc00:1800::/48": "10115", - "2406:3003:1050::/44": "4657", - "2409:4052:3000::/31": "55836", - "2806:2f0:4301::/46": "17072", - "2a02:2aa8::/39": "702", - "2001:49f0:d057::/40": "174", - "2400:7400:e031::/48": "38044", - "240a:af01::/32": "146491", - "240e:3b6:4c00::/35": "136200", - "2607:f398::/32": "11090", - "2001:470:150::/45": "6939", - "2001:4268:2a1::/37": "15964", - "2403:c80::/32": "45062", - "2408:8456:2600::/42": "17622", - "2408:8459:f110::/42": "17623", - "2408:8957:7d00::/40": "17816", - "2605:a404:105::/41": "33363", - "2a06:82c5::/48": "209537", - "2001:5b0:3d00::/38": "6621", - "2409:8088::/32": "24445", - "2a02:26f7:96::/48": "36183", - "2a06:e881:1702::/48": "206813", - "2a0f:1b00::/29": "7155", - "2a0b:4380::/32": "43594", - "2403:73c0::/32": "135244", - "2408:8957:6f00::/40": "17816", - "240e:473:650::/39": "4134", - "2600:370f:36e6::/39": "32261", - "2606:1700::/44": "62917", - "2804:7c8:f000::/36": "262323", - "2a02:26f7:46::/48": "36183", - "2803:abe0::/32": "270082", - "2a02:9b0:400f::/42": "35819", - "2a05:90c0::/29": "42812", - "2a07:5cc0::/32": "3399", - "2a0a:3140:610::/44": "15532", - "2a0f:17c0::/29": "60262", - "2001:559:24f::/48": "33651", - "2001:559:811f::/48": "33652", - "2001:559:c0c9::/48": "7016", - "2604:ca00:2::/48": "36492", - "2803:6900:593::/48": "52423", - "2001:44b8:30cf::/48": "4739", - "2804:15a4:aaa0::/44": "263400", - "2a04:6ec0::/29": "197637", - "2001:418:3807::/48": "4128", - "240a:aa4a::/32": "145284", - "240e:e1:9c00::/38": "4812", - "2a00:1c20::/32": "50989", - "2a01:664:1400::/36": "48951", - "2405:1c0:6765::/43": "55303", - "240e:438:5640::/36": "4134", - "2803:4600:111b::/36": "14754", - "2a0d:cb80::/29": "61062", - "2402:5300:407::/42": "45903", - "2406:840:e14a::/48": "142164", - "2607:f238::/32": "11799", - "2404:e400::/44": "45345", - "2803:c300::/32": "22869", - "2a01:58:20::/47": "12782", - "2804:1278::/32": "263478", - "2a01:b747:500::/38": "714", - "2001:559:11c::/48": "20214", - "2001:579:5a9c::/37": "22773", - "2404:bf40:a501::/48": "7545", - "240a:af43::/32": "146557", - "2a00:1860::/32": "35369", - "2001:67c:518::/48": "206138", - "2001:dcd:30::/48": "38796", - "2001:1a11:db::/48": "8781", - "2a01:9700:1070::/44": "8376", - "2001:559:c3c9::/48": "7015", - "2606:b300::/33": "33438", - "2a06:8e00::/48": "7489", - "2402:4e00:7::/41": "45090", - "240a:a9fd::/32": "145207", - "2604:90::/32": "26636", - "2606:57c0::/48": "6461", - "2a0b:95c0::/32": "205555", - "2001:978:1e04::/40": "174", - "2610:b0:40de::/42": "3573", - "2620:131:1049::/46": "26450", - "2620:18f::/32": "104", - "2804:4124::/32": "266006", - "2a03:6083:9000::/33": "16285", - "2a0c:a9c7:160::/48": "43832", - "2406:3000:3:9::/58": "4657", - "2408:8956:c00::/40": "17622", - "2409:8948:8c00::/40": "24445", - "240e:473:5800::/41": "140485", - "2a0b:4340:3331::/36": "48024", - "2602:808:5000::/44": "13578", - "2804:14c:7700::/40": "28573", - "2403:9200::/32": "23641", - "2600:100f:a100::/44": "6167", - "2804:7010::/32": "270701", - "2a01:5040:2001::/42": "43996", - "2a02:e280::/29": "12486", - "2001:1aea::/32": "5588", - "2620:149:ac3::/42": "714", - "2803:d4a0::/32": "266827", - "2804:3b90::/36": "266157", - "2a10:ed00::/29": "212297", - "2c0f:e9a0::/32": "174", - "2001:559:81ad::/46": "7922", - "2404:bf40:a442::/42": "139084", - "2600:1407:5::/48": "18717", - "2804:79cc:bf00::/33": "271328", - "2a01:e04::/28": "12322", - "2a02:26f7:e500::/48": "36183", - "2a0a:6840::/29": "25317", - "2c0f:fd20::/32": "36909", - "2001:559:c1b2::/48": "33491", - "2001:448a:6070::/40": "7713", - "2605:a404:164::/43": "33363", - "2606:7100:3010::/40": "21581", - "2610:b0:4109::/48": "21433", - "2800:1e0:1024::/41": "7195", - "2804:5564::/32": "264173", - "2401:4900:3d30::/44": "45609", - "2605:6840::/39": "398041", - "2607:fc58:1:71::/64": "13536", - "2620:131:104c::/47": "26450", - "2804:30f8:c00::/32": "264984", - "2a04:7180::/32": "28717", - "240e:3be:2200::/37": "136198", - "2600:1417:2c::/48": "9498", - "2a02:26f7:bf40::/48": "36183", - "2001:4100::/32": "12401", - "2401:4900:4c60::/44": "45609", - "2405:6240::/32": "136700", - "2620:0:1b00::/48": "714", - "2a02:17a0::/29": "47232", - "2a0e:b107:158f::/48": "210956", - "2001:559:7fe::/48": "7922", - "2001:b400:f000::/38": "3462", - "2606:3380:fff0::/48": "53334", - "2a02:26f7:cb01::/46": "20940", - "2001:480:161::/48": "5978", - "2001:559:83f7::/48": "7922", - "240a:a023::/32": "142685", - "2804:9d4:2001::/35": "262996", - "2001:559:8266::/48": "33651", - "2001:559:c15f::/48": "33491", - "240e:ff:c009::/36": "4134", - "2408:8459:ca10::/42": "17623", - "240e:3bf:2200::/37": "136198", - "2600:1008:e000::/44": "6167", - "2600:9000:113e::/41": "16509", - "2607:2f00:1f::/32": "12025", - "240a:acf2::/32": "145964", - "240e:473:ae50::/39": "4134", - "2001:448a:3050::/42": "7713", - "2a0f:8880::/29": "42184", - "2405:800:8000::/35": "4817", - "2804:104::/32": "262685", - "2a01:54e0:ec00::/35": "31483", - "2a02:26f7:bf89::/46": "20940", - "2605:a401:86df::/39": "33363", - "2607:9e80:1181::/38": "397068", - "2a02:1010:c200::/40": "9197", - "2001:550:2901::/38": "174", - "2001:67c:2b3c::/48": "47127", - "2402:e380:134::/44": "139073", - "240a:a523::/32": "143965", - "2620:13a:f001::/48": "33110", - "2a00:d900::/32": "5405", - "2001:559:42f::/48": "7015", - "2001:678:8cc::/48": "210146", - "240e:979:2e00::/40": "134770", - "2804:41bc::/36": "267453", - "2804:567c::/32": "268003", - "2402:800:f7e0::/36": "7552", - "2408:8456:dc10::/42": "134543", - "2408:876c::/27": "4837", - "240e:3ba:f100::/36": "4134", - "2620:13f:6000::/44": "210", - "2a10:13c0:da7a::/48": "212238", - "2402:b040:fde9::/48": "137132", - "2600:803:618::/48": "3495", - "2604:a140:1500::/47": "64658", - "2606:3d00::/32": "13549", - "2607:ad80::/32": "395558", - "2804:28f8::/32": "263990", - "2a02:26f0:111::/45": "20940", - "2001:1988::/32": "16467", - "2409:8904:8d90::/38": "24547", - "2804:4870:1b3::/41": "267121", - "2408:8256:3281::/48": "17623", - "240a:a0b0::/32": "142826", - "2600:2000:4030::/44": "33517", - "2001:510:130::/48": "36786", - "2607:ffc0::/32": "18705", - "2620:49:f::/48": "16686", - "2a03:41a0:10::/44": "59764", - "2a0f:5707:b0cb::/45": "212895", - "2402:28c0:101::/32": "136620", - "2407:fa00::/32": "24043", - "2600:1f01:48e0::/46": "16509", - "2604:3040::/32": "394907", - "2620:111:800a::/45": "32771", - "2600:2108:4000::/29": "11404", - "2607:7e80:2000::/33": "395354", - "2a00:1178:4::/32": "35415", - "2c0f:eea0::/32": "37288", - "2001:559:822a::/48": "21508", - "2001:67c:1600::/44": "47487", - "2804:314:4025::/46": "61568", - "2804:7c24::/32": "271478", - "2a0a:f980::/29": "50877", - "2a0e:b107:370::/44": "208751", - "2001:67c:20c4::/48": "8767", - "240a:a685::/32": "144319", - "2600:140b:d::/48": "17511", - "2620:a2:4000::/48": "701", - "2406:4300::/32": "133398", - "2600:1488:60c3::/39": "20940", - "2804:4bd8:86::/37": "267332", - "2a03:ae00::/34": "49138", - "2c0f:f3d8::/32": "327741", - "2400:dd01:1028::/34": "7497", - "2a0f:3b03::/32": "58313", - "240a:a062::/32": "142748", - "2602:feda:c30::/47": "209294", - "2605:c00:1800::/40": "46920", - "2801:80:6c0::/48": "262963", - "2803:6cc0::/32": "264813", - "2804:1540::/32": "263380", - "2a0b:b86:8::/45": "3280", - "2001:559:c03a::/48": "13367", - "2405:9800:b419::/40": "45430", - "2408:80f1:250::/40": "17621", - "2408:84f3:2c20::/43": "17816", - "240a:aa90::/32": "145354", - "2a02:26f7:ad::/48": "20940", - "2a02:26f7:da::/48": "36183", - "2001:559:c355::/48": "7725", - "240e:67e:1000::/37": "140330", - "2606:3380:100::/46": "53334", - "2001:67c:273c::/48": "3303", - "2001:448a:1070::/40": "7713", - "2001:4888:8041::/46": "22394", - "2402:8100:b::/48": "45271", - "240a:a194::/32": "143054", - "2a10:83c0::/29": "43440", - "2a05:b0c6:300::/40": "8100", - "2402:800:3771::/44": "7552", - "2409:4040:1000::/30": "55836", - "240a:af39::/32": "146547", - "2600:1002:a100::/44": "6167", - "2804:2780::/32": "263905", - "2804:7b5c:9::/32": "271427", - "2a01:5c40:4::/47": "12687", - "2406:8800:9045::/44": "17465", - "2a00:1f60::/32": "8218", - "2600:100d:a000::/43": "6167", - "2604:2a80::/32": "20413", - "2620:134:d000::/44": "32263", - "2804:4f8:4000::/36": "28263", - "2804:4c30::/32": "267355", - "2401:9700:2000::/40": "45498", - "240a:a18e::/32": "143048", - "2a02:970:1012::/45": "44002", - "2a02:26f7:ddc5::/46": "20940", - "2409:803c:1000::/40": "24444", - "240a:a4c5::/32": "143871", - "2600:1a0e:1001::/36": "46650", - "2607:fc88:1003::/45": "30475", - "2620:a1::/48": "19285", - "2a02:26f7:d500::/48": "36183", - "2a0a:340:cd00::/40": "48043", - "2405:1c0:6265::/43": "55303", - "240e:44d:7580::/41": "4134", - "2620:125:9015::/48": "10780", - "2803:6700:140::/48": "263210", - "2a02:17b0::/32": "29252", - "2a02:26f7:bf49::/46": "20940", - "2001:1248:9723::/43": "11172", - "2804:c20::/32": "52680", - "2804:5cc0::/32": "268928", - "2a05:88c0::/29": "210107", - "2620:145:400::/48": "12257", - "2400:e240::/32": "38247", - "2800:160:1107::/44": "14259", - "2804:43bc::/32": "267587", - "2a02:e00::/32": "29141", - "2001:978:4f00:2::/35": "174", - "2001:2041::/32": "1299", - "2001:4878:2136::/48": "12222", - "2403:d140::/32": "133187", - "240a:a580::/32": "144058", - "2400:7400:4a::/48": "23736", - "2400:fc00:82f2::/37": "45773", - "2800:370:67::/43": "28006", - "2804:70bc:9000::/33": "270745", - "2806:2f0:5161::/40": "17072", - "2a02:f380::/29": "199516", - "2a09:bac0:132::/48": "13335", - "2402:800:58c5::/43": "7552", - "2404:181::/32": "6619", - "2405:3340:e000::/48": "141362", - "240e:473:2150::/40": "4134", - "2001:3c8:2707::/48": "4762", - "2607:9000:4000::/32": "11878", - "2804:1f4c:900::/32": "269175", - "2a02:63e0::/32": "202709", - "2001:559:245::/48": "22909", - "240a:a8f0::/32": "144938", - "2600:1901:ffe0::/43": "396982", - "2404:19c0::/32": "138505", - "240a:a225::/32": "143199", - "2600:80c:1000::/40": "701", - "2620:0:ee0::/48": "47015", - "2a00:1bd8::/32": "8315", - "2a00:6020::/32": "60294", - "2c0f:fb40::/32": "37315", - "2001:559:8157::/48": "33491", - "2001:df5:4300::/48": "137880", - "2404:3e00::/32": "38758", - "2408:8459:e610::/42": "17623", - "2a02:db0::/32": "25500", - "2a02:2e02:2c50::/40": "12479", - "2401:d800:2c70::/40": "7552", - "2403:8500:100::/36": "45804", - "2408:8956:bb00::/40": "17816", - "240a:affa::/32": "146740", - "2600:9000:2091::/44": "16509", - "2a02:26f7:cb84::/48": "36183", - "2a10:1ac0::/29": "209886", - "2402:800:5255::/42": "7552", - "2600:1480:e100::/37": "20940", - "2605:6400:d815::/34": "53667", - "2620:9f:14::/48": "3549", - "2800:160:1d8e::/47": "14259", - "2804:2860::/32": "263959", - "2a02:26f7:dec9::/46": "20940", - "2600:a800::/28": "27017", - "2602:fd92:500::/40": "206607", - "2a03:27a0::/32": "13237", - "2001:4c8:1016::/47": "15290", - "240a:a3e6::/32": "143648", - "240e:105:f600::/30": "4134", - "2804:1c2c::/35": "262869", - "2404:4e00:104::/47": "32787", - "2600:1415:1001::/37": "20940", - "2804:4b04::/34": "267278", - "2a00:7bc0::/32": "200727", - "2402:a600::/32": "17996", - "2403:9800:b019::/41": "4648", - "2408:8256:596::/38": "17622", - "240e:950:c00::/38": "141157", - "2600:1406:601::/39": "20940", - "2620:8a::/48": "19574", - "2804:14d:4c00::/40": "28573", - "240a:ae82::/32": "146364", - "240a:af9c::/32": "146646", - "2600:1002:6000::/44": "6167", - "2a00:bbe0::/29": "60414", - "2a0c:b641:130::/44": "142438", - "2402:5300:4410::/39": "45903", - "240a:a32e::/32": "143464", - "2804:14c:65e1::/45": "28573", - "2804:77e8::/32": "271207", - "2a03:2400::/29": "47295", - "2a0f:3e80::/29": "30633", - "2804:1b5c:2::/32": "28334", - "2001:520:1014::/47": "8103", - "240e:108:42::/48": "58466", - "2804:37d0::/46": "266437", - "2804:5424::/32": "268631", - "2400:9380:98c0::/44": "136167", - "2401:f000:7::/48": "38477", - "2404:2f80:ff00::/48": "140399", - "2406:daa0:6080::/44": "16509", - "240a:a3e0::/32": "143642", - "2604:5000:2000::/32": "7752", - "2a0b:3180::/29": "198333", - "2001:559:82a8::/48": "33657", - "2405:9000:91::/38": "7474", - "240a:a99d::/32": "145111", - "2804:4444::/32": "267621", - "2a10:5800::/29": "398559", - "2001:1248:a4e7::/43": "11172", - "2804:5aa4::/32": "268786", - "2001:678:928::/48": "60149", - "2405:1e00::/44": "17771", - "240a:ae24::/32": "146270", - "240e:105:e600::/39": "138982", - "2605:3a00:44::/47": "22768", - "2620:81:c000::/48": "393420", - "2a10:2040::/29": "204576", - "2405:ba00:887f::/48": "63295", - "240e:438:3e20::/43": "140647", - "2a02:26f0:a601::/39": "20940", - "2408:8456:9640::/36": "17816", - "2409:8c20:5027::/39": "56046", - "2804:1e48::/32": "4809", - "2604:d600:2801::/38": "32098", - "2804:248:200::/33": "28598", - "2804:673c:c400::/40": "264598", - "2a02:238::/32": "16097", - "2001:559:82de::/48": "33287", - "2001:579:247c::/40": "22773", - "2001:df6:1e00::/48": "18403", - "2404:8d00:3000::/30": "10089", - "240e:3b3:ac00::/35": "4134", - "2a00:4bc0:600::/40": "48263", - "2a04:7d00::/29": "3209", - "2001:67c:23c8::/48": "49793", - "2804:6748::/32": "269618", - "2001:1478::/35": "3257", - "240a:a812::/32": "144716", - "2a00:f820::/29": "34549", - "2001:559:803f::/41": "33657", - "2620:9b:4000::/48": "26569", - "2803:68e0::/32": "269874", - "2a0b:f4c0::/39": "205100", - "2408:2000::/24": "4608", - "2602:febe:301::/36": "30405", - "2604:6600:78::/40": "40676", - "2a0b:b2c0::/48": "205504", - "2001:559:747::/48": "33287", - "2409:8924:5100::/38": "56046", - "2409:8a4c::/32": "9808", - "2605:dd40:1216::/33": "398549", - "2408:8409:3c00::/40": "4808", - "2602:ffd3::/36": "6140", - "2a02:6ca3::/32": "50242", - "2001:678:ab4::/48": "208584", - "2001:df5:b000::/48": "45637", - "2405:8a00:c022::/47": "55824", - "2409:8752:f00::/35": "56047", - "240a:a652::/32": "144268", - "240a:aa0c::/32": "145222", - "2a04:4e40:3c10::/41": "54113", - "2001:13c7:600b::/48": "52360", - "2605:3380:44fe::/47": "12025", - "2403:81c0::/32": "131149", - "2407:9440:52::/42": "141626", - "240e:1a:160::/35": "23650", - "2605:a900:300c::/43": "46887", - "2607:fc88:1007::/44": "30475", - "2a06:fec0:3203::/48": "205476", - "2607:f740:19::/48": "36236", - "2001:470:159::/32": "6939", - "2804:62c0::/32": "269316", - "2001:559:c0d7::/48": "33652", - "2409:8087:1a00::/40": "132525", - "2602:feda:2a7::/44": "204185", - "240e:438:1a20::/43": "140647", - "2607:f4a8:200d::/48": "397894", - "2a09:9dc0::/48": "44364", - "2001:579:b0dc::/47": "22773", - "2402:d000:8f01::/33": "9329", - "2404:7e40:2::/32": "138649", - "2801:1c2::/48": "19429", - "2806:2f0:23e1::/46": "22884", - "2402:800:378d::/43": "7552", - "240a:a55f::/32": "144025", - "2600:1413:a001::/35": "20940", - "2804:72c::/32": "52851", - "2804:66c8:c000::/34": "269582", - "2a05:ed40::/29": "207628", - "2a00:ab60::/32": "60522", - "2a07:4880::/29": "24971", - "2001:559:8129::/46": "7922", - "2401:d800:5b20::/41": "7552", - "2620:8f:4000::/48": "3424", - "2804:293c::/32": "264005", - "2804:420c:c000::/34": "267474", - "2001:1248:55c6::/44": "11172", - "2620:149:a0c::/43": "6185", - "2a02:26f7:ecc8::/48": "36183", - "2a06:e881:4001::/46": "204604", - "2001:c20:4878::/48": "9255", - "2400:a980:900::/37": "133111", - "2401:f400::/32": "9269", - "240e:966:3000::/32": "4134", - "2001:559:25e::/48": "33659", - "2001:7f8:6::/48": "9070", - "2800:160:1b1f::/42": "14259", - "2804:154c::/39": "263382", - "2001:1248:595a::/42": "11172", - "2a01:8960::/32": "202136", - "2a02:868::/33": "13247", - "2406:2000:ef64::/48": "45501", - "240e:44d:4c80::/41": "4134", - "2803:ecc0:deae::/34": "264814", - "2a0c:61c0::/32": "203602", - "2001:67c:15a1::/48": "21430", - "2001:44c8:4850::/32": "45430", - "2401:ff80:1a0f::/43": "133954", - "2620:1ec:be0::/37": "8075", - "2a02:26f7:db85::/46": "20940", - "2a05:f700:fffe::/48": "42236", - "2406:3000:8:4030::/60": "9874", - "240a:a24d::/32": "143239", - "240a:ae05::/32": "146239", - "2600:1409:4::/46": "35994", - "2605:9840::/32": "1448", - "2804:19b4:4::/32": "61813", - "2a02:10:101::/29": "24785", - "2001:559:c099::/46": "7015", - "2402:800:5d7f::/40": "7552", - "2409:8a52:500::/38": "56047", - "240a:a7bd::/32": "144631", - "2600:140f:e401::/38": "20940", - "2a01:b944::/32": "48635", - "2001:690::/32": "1930", - "240a:a5a7::/32": "144097", - "2604:8200:e000::/36": "23089", - "2800:860:1::/48": "262197", - "2803:5c80:6591::/48": "64114", - "2804:24cc:2::/32": "264242", - "2a0d:4d40:12::/45": "50630", - "2001:428:6808::/48": "19648", - "2001:678:860::/48": "212466", - "2001:df2:fe80::/48": "132906", - "240a:a80a::/32": "144708", - "2a02:c18:3::/32": "15436", - "2404:d500::/47": "132370", - "2800:160:1e26::/44": "14259", - "2801:1fc:3a::/48": "27951", - "2a00:1288:ef6c::/48": "14778", - "2a00:f800::/32": "51984", - "2001:67c:2630::/48": "42044", - "2804:a2c::/32": "263028", - "2a02:26f0:ae01::/40": "20940", - "2a09:a4c7:e000::/35": "208861", - "2a0e:b107:384::/48": "210770", - "2c0f:f140::/33": "327700", - "240a:a58c::/32": "144070", - "2602:ff71:1001::/48": "29802", - "2804:3d8c::/32": "266538", - "2001:43f8:3b0::/48": "327694", - "2402:800:63ff::/48": "7552", - "2804:14c:7500::/40": "28573", - "2401:ff80:1c89::/45": "133954", - "2804:5308::/32": "268559", - "2806:10a6::/46": "8151", - "2a01:cd00:c000::/41": "28708", - "2a05:4140:101::/46": "208753", - "2001:559:c005::/48": "7016", - "2400:cb00:308::/48": "13335", - "2803:8c10:40::/42": "271868", - "2804:28f4::/32": "263989", - "2a0d:91c0::/29": "40970", - "2001:49b0::/32": "26860", - "240e:473:4650::/39": "4134", - "2800:160:144c::/47": "14259", - "2804:3dc:a2::/41": "52967", - "2001:678:458::/48": "8422", - "240a:a665::/32": "144287", - "2600:3c0f:4::/48": "63949", - "2a05:7400:8000::/34": "208221", - "2001:1388:2f02::/45": "6147", - "240a:a9b7::/32": "145137", - "2806:230:3020::/48": "265594", - "2806:230:6027::/48": "11888", - "2a0a:d240::/29": "205916", - "2a0e:97c5:744::/46": "20473", - "2409:8d15:2a00::/30": "56044", - "240a:ace1::/32": "145947", - "2a02:367:1187::/48": "42804", - "2001:4c0::/47": "855", - "2407:6e00:4::/48": "38332", - "2600:1408:4401::/36": "20940", - "2604:b500::/32": "11045", - "2605:bd40::/32": "22608", - "2804:7980::/32": "271309", - "2a11:e80::/29": "208861", - "2801:80:36e0::/48": "269224", - "2803:7080::/32": "263172", - "2001:678:298::/48": "2613", - "2409:8b1a::/29": "132525", - "240a:a183::/32": "143037", - "240e:438:7440::/38": "4134", - "2600:6c3b:486::/43": "20115", - "2620:ac:4000::/48": "22652", - "2a07:e740::/32": "43299", - "2001:67c:202c::/48": "1257", - "2001:49f0:d0fd::/46": "30058", - "240a:aaed::/32": "145447", - "240e:10:800::/37": "63835", - "2600:3001:22::/45": "13649", - "2804:18:5008::/45": "26599", - "2600:1009:b140::/42": "6167", - "2607:3180:a001::/35": "14877", - "2610:1e0:1800::/48": "1657", - "2803:1a00:150e::/43": "262186", - "2a03:a360::/32": "12350", - "2404:4600:7::/48": "45991", - "2806:2f0:20e3::/48": "17072", - "2604:af80::/36": "18859", - "2804:770::/32": "262649", - "2804:74c0::/32": "271001", - "2a00:e00::/32": "8304", - "2a00:13c0:201::/48": "12616", - "2a02:ac80:c1::/43": "25145", - "2001:418:143b:100::/56": "20940", - "2408:8409:b400::/40": "4808", - "240e:4:800::/32": "4134", - "2804:14c:85a6::/41": "28573", - "2a00:1608::/32": "51275", - "2a04:1000::/29": "61001", - "2620:119:500a::/48": "13443", - "2001:559:34a::/48": "33491", - "240a:a938::/32": "145010", - "2605:26c0:2300::/40": "397300", - "2402:ef15::/32": "9430", - "2406:8800::/42": "17465", - "2804:597c::/32": "268705", - "2a0e:97c5:560::/45": "20473", - "2001:559:83f5::/48": "22909", - "2001:67c:28a4::/48": "198794", - "2400:cb00:170::/48": "13335", - "2a02:26f7:ec41::/46": "20940", - "2001:1248:5a67::/44": "11172", - "2408:8256:2f7b::/48": "17816", - "2604:cb80::/32": "21554", - "2804:65b0::/32": "269508", - "2804:6bc8::/32": "270425", - "2804:817c::/32": "272457", - "2001:1248:5f41::/44": "11172", - "240e:f7:7000::/36": "136190", - "2800:160:1df7::/44": "14259", - "2804:7e34::/32": "271609", - "2a09:9100::/29": "211546", - "2001:44b8:105e::/48": "7545", - "2401:5500::/32": "9749", - "2804:1e90:a0c0::/39": "264436", - "2001:418:e401:4::/35": "2914", - "2001:559:85ea::/47": "7922", - "2402:f180:3::/48": "58579", - "2408:8956:f140::/40": "17816", - "2607:f4e8:411::/48": "23059", - "2a00:fd80::/32": "38719", - "2401:ff80:1b89::/37": "133954", - "2402:800:7210::/42": "7552", - "2600:1480:e000::/40": "33905", - "2804:6918:5000::/32": "270248", - "2a00:47e0::/32": "3292", - "2a02:26f7:bb40::/48": "36183", - "2a0e:8f02:f028::/48": "212623", - "2001:67c:2810::/48": "198676", - "2402:ee40:5f::/48": "134033", - "2408:8459:9e10::/42": "17623", - "2001:dcc:600::/48": "131100", - "2600:4402:c002::/47": "6130", - "2a02:26f7:c6c2::/47": "20940", - "2a02:26f7:c741::/46": "20940", - "2001:7f8:94::/48": "51225", - "2001:c20:485e::/47": "9255", - "2403:300:a33::/41": "714", - "2408:8456:6400::/42": "17622", - "2600:1480:7801::/37": "20940", - "240a:a699::/32": "144339", - "2804:80a0::/32": "271763", - "2a02:26f7:ef51::/42": "20940", - "2400:7940::/32": "59126", - "2607:f740:e626::/48": "29997", - "2a02:26f7:e185::/46": "20940", - "2001:559:2f8::/47": "7922", - "2001:559:865c::/48": "7725", - "240e:3b6:7800::/39": "4134", - "2604:ae80:6001::/46": "11904", - "2607:fd48:300:100::/47": "13536", - "2607:ffc8:0:3::/61": "17356", - "2a02:26f7:d489::/46": "20940", - "2001:67c:2250::/48": "33895", - "2402:9e80:9::/48": "135103", - "2804:7220::/32": "270834", - "2a07:e02:bee::/48": "210083", - "2a09:e1c1:effb::/45": "210311", - "2a0c:c80::/29": "200000", - "2a0f:d600::/39": "208236", - "240e:3b3:d000::/36": "134772", - "2620:109:40::/40": "10753", - "2804:4308::/46": "267544", - "2001:559:c3a1::/46": "7015", - "2401:bc40:300::/40": "12189", - "2402:800:9171::/40": "7552", - "2a03:8320::/32": "200874", - "2a04:e800:5407::/48": "57976", - "2a07:b000::/29": "35902", - "240e:3b7:7a00::/32": "140313", - "2620:78:2000::/48": "26331", - "2800:2a0:2101::/37": "27947", - "2804:2368::/32": "264160", - "2a00:86c0:101::/38": "2906", - "2a01:c50f:a080::/39": "12479", - "2001:559:86aa::/48": "33491", - "2406:93c0::/32": "137042", - "240e:9f:c000::/35": "134420", - "2a02:c6a0::/30": "680", - "2a0e:4100::/32": "57279", - "2401:d800:9230::/41": "7552", - "2804:5e70::/32": "269033", - "2a02:26f7:dfc0::/48": "36183", - "2001:4320::/32": "28683", - "2402:800:b920::/41": "7552", - "2a05:1083:407e::/48": "209870", - "2a0e:fd45:1338::/34": "44103", - "2001:200:900::/40": "7660", - "2a03:60c0::/32": "20473", - "2a03:8bc0::/32": "33876", - "2001:df3:480::/48": "132010", - "2401:d800:1f0::/38": "7552", - "2409:8904:9590::/38": "24547", - "240a:a01a::/32": "142676", - "2402:8100:20dd::/46": "45271", - "2402:ef1c::/31": "7633", - "2403:e000:fec1::/39": "9555", - "2408:8452::/31": "4837", - "2604:ca00:8000::/35": "36492", - "2a0e:dc40::/29": "208315", - "2408:8956:28c0::/38": "17816", - "2607:d100::/32": "394844", - "2804:37d0:8000::/33": "266437", - "2001:a18::/29": "2602", - "2620:15:8000::/48": "26039", - "2804:165c::/32": "263284", - "2a00:1d40::/32": "25180", - "2001:1248:a402::/43": "11172", - "2402:e280:216b::/43": "134674", - "240a:a85b::/32": "144789", - "240e:3bf:8200::/35": "140316", - "2804:1918:380::/32": "52862", - "2a02:26f0:b001::/40": "20940", - "240e:930::/32": "134420", - "2a00:1850:2e6::/44": "29357", - "2a02:e0:5000::/36": "34984", - "2001:c20:48ae::/43": "9255", - "2001:1820:1a::/48": "6147", - "2403:a040:1688::/48": "38047", - "240e:438:9640::/36": "4134", - "2602:ff28::/36": "14877", - "2804:2ff8::/32": "264923", - "2a0f:9400:7a00::/47": "135395", - "2408:8459:4a50::/37": "17816", - "2408:8956:700::/40": "17816", - "2605:fb80:e013::/42": "16584", - "2a00:1928::/32": "12898", - "2a02:7b0:64::/48": "39780", - "2001:559:8327::/48": "7922", - "2405:6280::/32": "132111", - "2804:1b3:4180::/36": "18881", - "2a00:1cd0:6::/48": "43408", - "2a02:c48::/29": "49024", - "2a02:26f7:e441::/46": "20940", - "2a03:d5c0:100::/37": "199391", - "2001:559:80e0::/48": "33657", - "2409:8924:8900::/38": "56046", - "2602:800:c800::/38": "398642", - "2804:383c::/45": "52601", - "2806:230:101e::/48": "265594", - "2a00:ad07:4000::/32": "41897", - "2a02:2e02:86d0::/39": "12479", - "2804:69c4::/32": "270290", - "2001:4c8:1068::/48": "46482", - "2001:559:c212::/48": "33652", - "2001:67c:280c::/48": "57839", - "240a:a72c::/32": "144486", - "240e:473:4a00::/41": "140485", - "2610:a1:3014::/48": "12008", - "2804:1b2c::/35": "61713", - "2001:500:86::/47": "26710", - "2001:678:868::/48": "8220", - "2804:14d:a485::/43": "28573", - "2804:ff0::/32": "263609", - "2804:4a08::/32": "267214", - "2800:1e0:3000::/40": "7195", - "2800:950::/32": "10299", - "2804:14d:c800::/40": "28573", - "2806:230:4020::/48": "265594", - "2a01:9d80::/32": "197883", - "2a01:c50f:c480::/41": "12479", - "2001:559:8312::/47": "7015", - "2a02:26f7:cc45::/46": "20940", - "2001:ee0:f100::/40": "45899", - "2409:804e:1900::/34": "9808", - "2a05:ca40::/29": "41906", - "2804:2968::/32": "264013", - "2a03:1aa0:5000::/32": "201730", - "2403:fbc0:2000::/48": "23959", - "2610:e0:3000::/33": "2572", - "2804:14d:4cdf::/42": "28573", - "2001:559:8760::/48": "7016", - "2803:7200:2001::/32": "27696", - "2a00:c740::/32": "48803", - "2a02:26f7:c8c0::/48": "36183", - "2a02:4540:7040::/45": "197207", - "2a04:f80::/29": "42858", - "2001:e60:d300::/42": "4766", - "2405:f600:11::/44": "45117", - "2804:998:11::/40": "28589", - "2804:1094:c000::/34": "263641", - "2001:559:97::/48": "7922", - "2800:d302:38::/29": "11830", - "2804:4494::/32": "267640", - "2a02:26f0:9501::/40": "20940", - "2620:12:2000::/48": "394756", - "2800:5f0:203b::/45": "22724", - "2a01:8640:6::/48": "42708", - "2a02:16a8::/32": "5404", - "2604:2e8e::/35": "30036", - "2604:b000::/34": "14638", - "2804:5bdc:4::/32": "268873", - "2a02:26f7:d789::/46": "20940", - "2a0b:a240::/29": "205535", - "2409:807c:1900::/34": "9808", - "2804:7d50::/32": "271553", - "2001:550:1605::/44": "174", - "2607:5f80::/32": "23336", - "2620:5e:a000::/47": "394855", - "2806:2f0:2221::/43": "22884", - "2001:e58::/32": "18266", - "2001:4878:228::/48": "12222", - "2401:d800:23b0::/41": "7552", - "2600:1415:2c01::/38": "20940", - "2620:36:c000::/48": "1645", - "2620:139:6006::/48": "22600", - "2409:8038:3100::/36": "9808", - "240a:a9d9::/32": "145171", - "2607:5200::/32": "18501", - "2801:80:370::/48": "28609", - "2801:15e::/44": "19429", - "2804:61f0::/32": "269266", - "2c0f:fc88:37::/44": "36992", - "240a:a429::/32": "143715", - "2a03:29c0::/32": "61189", - "2a03:5ce0::/48": "29667", - "2a06:b7c0::/29": "203740", - "240a:aff3::/32": "146733", - "240e:967:c600::/36": "4134", - "2600:6c3a:1e::/41": "20115", - "2608:c101:1::/48": "27066", - "2804:fe0:10::/48": "263049", - "2804:7078::/32": "270728", - "2001:4479:1900::/34": "7545", - "2408:8756:1800::/34": "17816", - "2600:141b:1801::/34": "20940", - "2604:2dc0::/32": "16276", - "2801:1a:c800::/48": "262589", - "2a00:1cb8:2:e::/48": "12713", - "2403:e600::/32": "58376", - "2600:140f:f000::/48": "9498", - "2a0d:12c0:2000::/48": "205804", - "2604:8000::/32": "21528", - "2a02:26f0:8101::/40": "20940", - "2a02:26f7:e889::/42": "20940", - "2a04:e00:13::/48": "39855", - "2406:b580::/32": "132296", - "2606:ad00::/32": "25694", - "2803:2e10::/32": "271968", - "2a09:8340::/47": "42275", - "2001:bf0:c000::/35": "29670", - "2408:8459:ff60::/44": "136959", - "240a:ad42::/32": "146044", - "2804:7a58::/32": "271361", - "2a10:c140::/29": "211572", - "2a0c:36c0:2::/48": "202301", - "2402:5300:440::/39": "45903", - "2600:141b:5801::/37": "20940", - "2600:8804:3f07::/32": "22773", - "2602:806:4002::/48": "14032", - "2620:96:4000::/48": "63126", - "2a00:9e20::/32": "60574", - "2a02:26f7:c6c0::/47": "36183", - "2001:579:d224::/41": "22773", - "2408:8456:cc00::/42": "17622", - "2600:140b:cc01::/38": "20940", - "2408:8674::/28": "4837", - "2a02:7260::/29": "201898", - "2a0e:fd45:d40::/42": "44103", - "2c0f:600::/32": "328838", - "2001:559:55f::/42": "7016", - "2803:9620:2501::/32": "265865", - "2001:470:96::/48": "55243", - "2001:559:490::/48": "7922", - "2001:559:8164::/48": "7922", - "2001:c20:7807::/38": "3758", - "2804:7178::/32": "270791", - "2a06:1040::/29": "200648", - "2001:559:12d::/48": "33491", - "2001:4a00::/27": "13285", - "240a:a906::/32": "144960", - "2801:11:f000::/48": "266896", - "2400:9280:10::/48": "59159", - "2401:a580:6::/32": "55403", - "2405:3340:e011::/48": "142437", - "240a:a144::/32": "142974", - "240e:14:6800::/37": "133774", - "2001:678:f3c::/48": "211640", - "2408:8256:3273::/44": "17623", - "2408:8456:cd40::/40": "17816", - "2600:9000:1030::/48": "16509", - "2804:19d0::/32": "61820", - "2a02:4780:3::/45": "47583", - "2001:678:44::/48": "25354", - "2400:cb00:a0c0::/45": "13335", - "2402:800:3d9b::/41": "7552", - "2600:9000:a310::/47": "16509", - "2804:6d34::/32": "53114", - "2a01:50c0:1000::/36": "12843", - "2a02:878:a80e::/48": "42632", - "2a07:a347::/32": "47447", - "2001:fd8:b1f0::/44": "4775", - "2608:140:c::/48": "5927", - "2620:107:9058::/48": "22787", - "2804:37d4::/32": "266438", - "2804:4d98::/32": "268207", - "2a00:fb8:3900::/33": "8881", - "2a01:bfe0::/32": "199997", - "2a0d:4b00::/29": "204943", - "2a0d:5380::/29": "204818", - "2001:dc8:1000::/48": "38736", - "2401:d800:2d30::/38": "7552", - "2a0f:6146::/32": "138398", - "2001:559:87c9::/48": "7015", - "2606:bc00:5000::/32": "19419", - "2806:20d:1d05::/43": "32098", - "240a:a509::/32": "143939", - "2a00:7147:b1::/48": "51430", - "2001:559:791::/48": "33668", - "240a:a546::/32": "144000", - "2a0a:98c0::/29": "208571", - "2001:1690::/32": "20847", - "2409:8a14::/33": "56044", - "240e:ff:b000::/36": "4134", - "2600:0:2::/30": "1239", - "2803:3b80::/47": "263702", - "2a04:100:3000::/29": "49223", - "2405:8a00:4002::/44": "55824", - "2408:8456:40::/39": "17816", - "2804:7c8::/35": "262323", - "2804:5efc::/32": "269069", - "2804:617c::/32": "269237", - "2a02:26f7:d348::/48": "36183", - "2405:17c0:b::/40": "139331", - "240a:a7b1::/32": "144619", - "2604:8380::/35": "29802", - "2a01:c50f:c040::/40": "12479", - "2a02:7be0::/32": "201175", - "2405:9000:81::/44": "7474", - "2a06:1e40::/29": "12941", - "2a01:ac40:2000::/36": "8244", - "2001:559:8785::/48": "7015", - "2a02:26f7:d801::/46": "20940", - "2a02:26f7:df4c::/48": "36183", - "2a07:afc0::/29": "205435", - "2001:b98:205::/29": "5413", - "2804:c7c::/32": "52718", - "2804:6cc8::/32": "270491", - "240a:a7d7::/32": "144657", - "2804:6ad0::/32": "270360", - "2a02:26f0:2201::/37": "20940", - "2a02:26f7:e6c9::/42": "20940", - "240e:438:5040::/38": "4134", - "2620:107:f000::/40": "13541", - "2804:12b4::/32": "263493", - "2a00:d02::/29": "41887", - "2408:8459:4850::/38": "17816", - "240a:a369::/32": "143523", - "2600:100b:9110::/34": "6167", - "2600:1010:b030::/41": "22394", - "2620:149:a13::/48": "714", - "2804:5d0::/32": "28241", - "2806:2f0:9262::/40": "17072", - "2001:648:2c01::/44": "5408", - "2401:cf80:600d::/48": "198949", - "2408:8956:ef40::/40": "17816", - "240a:a30b::/32": "143429", - "2a0d:2581:12::/48": "209261", - "2001:520:1012::/48": "8103", - "2408:8456:ce40::/40": "17816", - "240a:a350::/32": "143498", - "2606:5b00::/38": "29765", - "2801:1d:9000::/48": "264718", - "2a0e:2c0::/29": "47755", - "2605:6800::/32": "11996", - "2801:1fc:12::/48": "27951", - "2804:2418::/32": "264201", - "2a0b:47c0::/29": "204805", - "2a0f:ff00:1912::/48": "213281", - "2001:1248:a900::/42": "11172", - "2610:a1:1018::/48": "397218", - "2804:7aac::/32": "271385", - "2a00:a1a0::/32": "41885", - "2a0c:8440::/48": "205296", - "2a0e:b107:198::/48": "207740", - "2400:f6c0::/45": "136530", - "2409:8087:1000::/38": "9808", - "2800:300:89e0::/43": "27651", - "2001:559:82f3::/48": "33287", - "2605:7a40::/32": "398135", - "2606:c00::/42": "9505", - "2800:160:1e57::/44": "14259", - "2a0c:e642::/44": "211323", - "2001:44b8:405c::/48": "7545", - "2403:d200::/32": "45230", - "2405:3200:102::/37": "17639", - "2606:2800:420e::/47": "14210", - "2606:6c00:2::/48": "32787", - "2620:1ec:901::/45": "8075", - "2a02:26f7:df8c::/48": "36183", - "2a10:1c0::/29": "207297", - "2c0f:ea98::/32": "37347", - "2001:470:ff::/39": "6939", - "2402:3a80:c037::/44": "38266", - "2a0a:e202:800b::/48": "33438", - "2001:fd8:60::/48": "132199", - "2401:ee00:401::/39": "23951", - "2405:a000::/43": "7693", - "2607:f738:600::/41": "17184", - "2a00:bda0::/32": "42525", - "2a02:2010:2320::/45": "20978", - "2a06:3840::/29": "204182", - "2c0f:f888:8000::/33": "37119", - "2001:67c:23fc::/48": "41352", - "2403:71c0::/48": "43959", - "2600:1012:a120::/36": "22394", - "2620:109:3000::/45": "29888", - "2803:6f40::/32": "265641", - "2a02:26f7:fb48::/48": "36183", - "2a03:ec80::/48": "211220", - "2402:8100:3880::/42": "55644", - "2605:380:32::/48": "42473", - "2620:52:e000::/48": "32995", - "2804:16a8::/32": "52817", - "2a00:d8a0::/29": "44332", - "2a05:3182::/29": "34580", - "2400:5280:2800::/38": "63199", - "240a:a35a::/32": "143508", - "240e:980:2200::/40": "58466", - "2a05:1083:1103::/48": "142280", - "240a:a0c8::/32": "142850", - "2804:607c::/32": "269170", - "2a03:5a00:39::/48": "203517", - "2a04:4a43:4000::/35": "206067", - "2a0f:f340::/32": "208164", - "2001:c20:a006::/35": "3758", - "2409:8c50:402::/36": "56047", - "2620:11a:a0f2::/44": "43515", - "2402:800:9863::/43": "7552", - "2404:4880::/32": "135069", - "2a00:1ca8:8a::/43": "50673", - "2a02:408:8093::/48": "35295", - "2a07:85c2::/48": "174", - "2a0a:a7c0::/29": "50966", - "2408:8459:3a40::/37": "17816", - "2605:2e00::/36": "63017", - "2607:180::/32": "395663", - "2a02:2330:b2::/48": "34073", - "2402:800:5efe::/34": "7552", - "2a07:6d40::/29": "44592", - "2401:4900:1c20::/46": "24560", - "240a:a87c::/32": "144822", - "2800:160:1762::/44": "14259", - "2a02:26f7:bf04::/48": "36183", - "2c0f:e870::/32": "60171", - "2001:559:8640::/46": "7015", - "2402:9e80:60::/48": "138351", - "2804:1e38:4001::/45": "264415", - "2806:230:402d::/48": "11888", - "2a02:2878::/33": "42699", - "2a0f:5707:b101::/48": "211684", - "2406:cb41::/48": "395092", - "2600:140f:a001::/38": "20940", - "2600:1488:a401::/42": "20940", - "2620:12d:e02f::/48": "3356", - "2403:ad80:3c00::/38": "134835", - "2406:de00:100::/38": "18225", - "2600:1407:3800::/48": "35994", - "2800:110:3405::/36": "4270", - "2a02:26f7:db00::/48": "36183", - "2a0b:bc0::/29": "62455", - "2001:df5:5480::/48": "141412", - "2610:a1:1081::/48": "397228", - "2a01:d8:9::/32": "5537", - "240a:ad7d::/32": "146103", - "2607:fb10:2023::/45": "55095", - "2620:115:c00e::/47": "2635", - "2800:160:10f5::/39": "14259", - "2806:2f0:7141::/42": "17072", - "2403:b800:1000::/48": "45671", - "240a:aa18::/32": "145234", - "2602:fd81::/36": "32018", - "2602:fed2:7309::/48": "20473", - "2602:feda:2b8::/45": "138210", - "2607:f778:c300::/34": "32035", - "2803:b700::/32": "262262", - "2a01:488:bb06::/48": "39779", - "2001:559:c179::/48": "33652", - "2001:cd8::/33": "4780", - "2001:df2:7180::/48": "139904", - "2001:b400:f418::/45": "17421", - "2404:9d80::/32": "59249", - "2604:2c80::/32": "6591", - "2401:d800:9c10::/42": "7552", - "240a:ad8b::/32": "146117", - "2a0a:dc07::/32": "39142", - "2804:5abc::/32": "268792", - "2a02:26f7:d60d::/42": "20940", - "2a03:6660::/32": "43287", - "2001:df3:804::/44": "22787", - "2a09:bac0:34::/47": "13335", - "2a0f:4540::/29": "47362", - "2a01:5240::/31": "58243", - "2a02:ff0:c00::/40": "12735", - "2a0e:97c0:36f::/48": "211484", - "2001:559:8476::/48": "7016", - "2a06:6240::/29": "20643", - "2a06:b280::/47": "199213", - "2001:df5:1e80::/48": "137650", - "2402:c000:2::/34": "9230", - "240a:a0ab::/32": "142821", - "2605:c3c0:e000::/35": "393954", - "2a00:1f10::/32": "198682", - "2408:8456:a440::/38": "17816", - "2804:11bc:c000::/38": "263435", - "2001:559:c105::/48": "33659", - "2001:1438::/32": "8881", - "2405:1c0:7962::/38": "55303", - "2620:11b:1000::/40": "32274", - "2800:320:404::/44": "27882", - "2a00:1ec8:26::/47": "2854", - "2a04:5b81:2010::/44": "202265", - "2001:67c:2878::/48": "8881", - "2620:10f:3000::/40": "6510", - "2803:f60::/32": "269832", - "2804:149c::/32": "262643", - "2804:7238::/32": "270840", - "2806:2f0:4321::/41": "17072", - "2a0c:9a40:1001::/48": "34927", - "2a0f:9400:7565::/48": "142588", - "2806:320:200::/32": "28438", - "2001:1900:3012::/48": "6086", - "2406:8dc0:2100::/40": "212425", - "240e:e1:8000::/36": "4811", - "2803:d540::/32": "8053", - "2804:2ca4::/33": "265232", - "2a00:5140::/32": "42707", - "2a05:d000:a000::/40": "16509", - "2001:67c:17a8::/48": "24660", - "2406:ae00::/39": "55564", - "2600:1415:8801::/35": "20940", - "2607:8480:8000::/33": "22639", - "2804:1a4c::/32": "61851", - "2804:4b30::/32": "267289", - "2a07:e02:1400::/40": "210083", - "2001:4868:905::/48": "7046", - "2402:ce00::/31": "7700", - "2403:c00:a00::/39": "17488", - "2600:100::/28": "32703", - "2604:a200::/32": "13614", - "240a:a8a0::/32": "144858", - "240e:983:1e06::/48": "4816", - "2804:59f0::/32": "268735", - "2001:559:832b::/48": "7922", - "2408:80ea:7600::/41": "17816", - "2408:8956:6b00::/40": "17816", - "240c:6:3::/48": "24445", - "2806:20d:5a0e::/39": "32098", - "2001:470:33::/48": "14613", - "2600:1f01:4840::/47": "16509", - "2604:f840::/32": "397026", - "2801:f0:20::/48": "13679", - "2a02:cb80:1040::/48": "43766", - "2a05:4f44::/30": "31012", - "2a0b:6f80:fff::/48": "211196", - "2001:559:c14f::/48": "7922", - "2408:8206:84c0::/39": "4808", - "2620:4f:8000::/48": "112", - "2804:f9c::/32": "263595", - "2804:60f0::/32": "269201", - "2a02:16d8:104::/46": "5518", - "2a02:6a80:5300::/48": "197997", - "2a10:52c0::/48": "60078", - "240a:a41e::/32": "143704", - "2607::/32": "19016", - "2800:160:148e::/43": "14259", - "2804:3808::/32": "266451", - "2a07:5cc1::/32": "197595", - "2001:1938:2100::/45": "12989", - "2620:4d:400b::/45": "62597", - "2803:2e60::/32": "267920", - "2600:1400::/45": "20940", - "2605:bec0::/32": "32313", - "2607:f2b1::/43": "3614", - "2001:678:634::/48": "204345", - "2804:1d68::/32": "264367", - "2804:2140:1802::/32": "53059", - "2a02:9e0::/32": "25459", - "2408:8956:b400::/40": "17622", - "2804:40d4::/32": "265984", - "2804:811c::/32": "272433", - "2a09:bac0:4::/48": "13335", - "2a0f:5707:aa40::/44": "48126", - "2604:6000::/32": "11351", - "2a0d:3842:1080::/48": "57629", - "2001:648:2c10::/48": "8762", - "2a0e:97c3:a6::/48": "20473", - "2001:44b8:30af::/48": "4739", - "240a:a9a6::/32": "145120", - "2a02:26f7:f484::/48": "36183", - "2a03:9180:2::/47": "199813", - "2a04:dc80::/29": "49788", - "240e:438:8620::/43": "140647", - "2605:a401:8213::/41": "33363", - "2606:8900::/44": "33044", - "2804:63c4::/32": "269382", - "240e:570::/28": "4134", - "2600:1417:19::/48": "20940", - "2800:390::/32": "25620", - "2a02:17c8::/32": "39648", - "2a02:f040:7::/48": "59605", - "2a03:7380:7380::/42": "13188", - "2a0b:bb80::/32": "201787", - "2406:1840::/32": "140641", - "2a02:26f7:cd88::/48": "36183", - "2001:559:7d1::/48": "7016", - "2001:7f8:49::/48": "20530", - "2400:cb00:a610::/48": "13335", - "2a00:1528::/39": "6696", - "2a0e:d9c0::/29": "39287", - "2001:678:fd8::/48": "29670", - "2605:4300:ff00::/40": "62907", - "2804:6e50::/32": "270588", - "2a04:f580:9230::/48": "4809", - "2408:8957:700::/40": "17816", - "240a:a4dd::/32": "143895", - "2804:58e0::/32": "268155", - "2a03:3320:4::/48": "8670", - "2001:380::/32": "4713", - "2001:559:790::/48": "33659", - "2001:1998:610::/41": "7843", - "2409:8c14:2e00::/35": "9808", - "2605:3840::/32": "53451", - "2804:11a4::/32": "53243", - "2a02:26f7:ebc9::/42": "20940", - "2a11:8f00::/29": "60345", - "2001:559:c0e3::/48": "33287", - "2001:559:c2e9::/48": "7922", - "2001:559:c3cd::/48": "33657", - "2001:df1:e500::/48": "63773", - "2401:1d40:3f03::/40": "59019", - "2800:8c0::/32": "18840", - "2409:8924:3d00::/33": "56046", - "2a05:5504:1::/44": "8218", - "2400:1c00:1a0::/43": "45143", - "2804:2490::/32": "264230", - "2a07:4dc0::/29": "14576", - "2405:b40:43::/45": "55674", - "2804:68fc::/32": "270241", - "2a00:1420::/32": "44993", - "2a02:c58::/32": "29217", - "2a02:26f7:d28d::/42": "20940", - "240a:ad6d::/32": "146087", - "2804:7de0::/32": "271588", - "2a03:5a00:4::/48": "34518", - "2a09:c3c0::/29": "209102", - "2408:8957:2840::/40": "17622", - "2409:8c1f:c340::/34": "9808", - "2603:5:2100::/38": "44273", - "2a00:8647::/32": "31056", - "2a02:26f7:e3c9::/46": "20940", - "2408:8459:6e10::/42": "17623", - "240a:af5b::/32": "146581", - "2800:9b0::/32": "52342", - "2804:4d28::/32": "267415", - "2a02:4240::/32": "50266", - "2a03:1780::/32": "34173", - "2001:559:8578::/48": "33651", - "2001:b28:999a::/34": "42065", - "240a:ad12::/32": "145996", - "2607:f6f8::/32": "30170", - "2804:39a0::/32": "266040", - "2408:8256:2f80::/44": "17623", - "2606:6240::/44": "398447", - "2401:3240:63::/48": "63490", - "240a:adbc::/32": "146166", - "2605:1c00:fff0::/44": "16787", - "2607:fb10:2015::/42": "2906", - "2804:4614:c000::/34": "266967", - "2a0a:3900::/29": "201978", - "2620:104:1f::/48": "6356", - "2804:644::/32": "53225", - "2a02:26f7:bd41::/46": "20940", - "2a09:c180::/29": "209707", - "2a0d:77c7:2241::/35": "7489", - "2001:500:31::/48": "393220", - "2604:a180:5000::/36": "22933", - "2607:a800:206::/48": "15695", - "2804:75d0::/32": "271071", - "2a02:26f7:ed44::/48": "36183", - "240a:a6aa::/32": "144356", - "2a0a:2842:af00::/46": "42962", - "2001:559:84be::/48": "33657", - "2401:d800:5c20::/41": "7552", - "2a04:ad80:2::/48": "60011", - "2001:559:5e1::/46": "22909", - "2001:559:8596::/48": "7922", - "2620:13b:3020::/48": "13607", - "2804:1efc::/36": "264458", - "2a10:a700::/46": "212329", - "2001:388:3031::/41": "7575", - "2001:18c8:400::/40": "54519", - "2001:43f8:610::/48": "37419", - "2401:4900:4abb::/48": "45609", - "2401:d800:5e30::/41": "7552", - "2605:4ac0::/32": "23503", - "2800:160:3::/45": "14259", - "2400:fc00:87c0::/36": "45773", - "2620:122:a000::/40": "394485", - "2a0c:9a40:1::/48": "34927", - "2001:559:18c::/46": "33651", - "2a00:fbe0::/32": "62113", - "2a04:4e40:cc10::/44": "54113", - "2409:8e39::/25": "9808", - "240a:a8e6::/32": "144928", - "2804:3fe4::/32": "26616", - "2a00:1ec0:4000::/32": "8544", - "2409:8087:5700::/40": "56040", - "2800:650::/45": "28032", - "2a02:2858::/29": "8315", - "2409:8904:8640::/39": "24547", - "2803:4b80::/32": "27940", - "2a02:26f7:ea::/48": "36183", - "2a04:4e40:ca10::/44": "54113", - "2a04:7700::/29": "207203", - "2001:678:b5c::/48": "60033", - "2605:a404:180::/42": "33363", - "2804:3278:c000::/34": "265080", - "2a07:e480::/48": "202261", - "2400:8800:4101::/40": "3491", - "2a00:cd0::/35": "48173", - "2600:5400:cd01::/38": "19108", - "2a07:a343:aee0::/44": "9009", - "2a09:28c0::/48": "25540", - "2a0b:97c0::/29": "58067", - "2001:5002:300:2::/27": "1273", - "2600:370f:74a5::/41": "32261", - "2001:559:49::/48": "33491", - "2001:67c:19ac::/48": "48919", - "2408:8256:3b6b::/48": "17816", - "2800:370:53::/44": "28006", - "2a02:26f7:fb08::/48": "36183", - "2a03:a060::/32": "203538", - "2001:4898:8020::/48": "8071", - "2001:4b20:100:667::/64": "65505", - "2401:d800:d5f0::/38": "7552", - "2804:19fc::/32": "61830", - "2401:ee00::/40": "23951", - "2406:9dc0:6668::/48": "140936", - "2620:119:10::/46": "36692", - "2806:250:6::/47": "28554", - "2001:4580::/26": "4780", - "240a:a4a6::/32": "143840", - "240e:438:8020::/43": "140647", - "2001:678:7e0::/48": "200306", - "2602:fe6a::/44": "54632", - "2803:f240::/32": "61508", - "2804:1454::/32": "263325", - "2a02:26f7:f6e1::/48": "36183", - "2a0c:2140::/29": "31617", - "2409:8915:5400::/39": "56044", - "2a03:db80:4410::/48": "5501", - "240e:920::/30": "140061", - "2a0f:df00::/48": "41281", - "2001:67c:2050::/48": "199118", - "2800:160:1ffb::/34": "14259", - "2a02:26f7:c189::/42": "20940", - "2a09:bac0:213::/48": "13335", - "2001:67c:2218::/47": "2485", - "2606:f280::/34": "46261", - "2803:f680::/32": "263230", - "2804:37a8:1206::/43": "266428", - "2804:562c::/32": "267981", - "2001:678:7a8::/48": "13037", - "2001:1388:7bb1::/32": "6147", - "2a00:fc00:e000::/48": "50392", - "2001:4060:4053::/32": "6772", - "2409:8010:2900::/35": "9808", - "2804:51cc::/32": "268478", - "2a0c:7780::/29": "21263", - "2a05:3580:f400::/39": "35807", - "2001:678:36c::/48": "3320", - "2406:daa0:8080::/44": "16509", - "2607:f110:ea20::/35": "21889", - "2804:14a0::/32": "263340", - "2804:2178::/33": "264556", - "2a00:a200::/32": "5520", - "2a02:26f7:bc45::/46": "20940", - "2a07:c387::/32": "5578", - "2001:559:c27f::/48": "7922", - "2001:4888:8054::/47": "6167", - "2408:8459:a410::/42": "17623", - "2801:0:480::/48": "27817", - "2a01:40:494a::/32": "5459", - "2a04:bc40:1dc9::/63": "35277", - "2a06:a281::/32": "49117", - "2402:e80:24::/48": "23901", - "2604:a00:15::/46": "19318", - "2620:0:f0::/48": "26523", - "2804:6004::/32": "269140", - "2620:10a:80aa::/48": "55195", - "2804:33a4::/32": "265409", - "2a02:ee80:4140::/43": "3573", - "2a03:2880:f222::/43": "32934", - "2a05:4200:a::/45": "21534", - "2a02:26f7:fa09::/42": "20940", - "2001:4888::/43": "6167", - "240a:a727::/32": "144481", - "2600:9000:2250::/46": "16509", - "2605:9500:b001::/48": "14244", - "2620:117:2000::/40": "194", - "2804:14c:3bc3::/42": "28573", - "2804:619c::/32": "269245", - "2001:559:727::/48": "33287", - "2602:ffb0:16::/48": "20473", - "2a02:c00::/32": "12316", - "2a02:7960::/48": "39710", - "2a03:61a0::/32": "202719", - "2a03:b500:100::/34": "41135", - "2001:df0:3980::/48": "135942", - "2408:8456:7c00::/42": "17622", - "2604:3700::/48": "10973", - "2a00:1f68::/32": "50919", - "2a01:8840:c9::/48": "207266", - "2a05:4140:440::/48": "213388", - "2402:800:570f::/43": "7552", - "2804:76d8::/32": "271138", - "2a00:10e8::/46": "44574", - "2001:400:8818:51::/42": "293", - "240e:b1:f800::/30": "4134", - "240e:982::/39": "136195", - "2a09:80c0::/29": "209335", - "2408:80e0:4000::/32": "4808", - "240a:a49d::/32": "143831", - "2804:79b8::/32": "271323", - "2803:6604:c401::/39": "28075", - "2a02:26f7:bf81::/46": "20940", - "2001:559:37c::/48": "7016", - "240a:a45c::/32": "143766", - "2600:6c39:608::/30": "20115", - "2600:6c7f:93a0::/44": "19115", - "2610:b0:411a::/41": "3573", - "2a02:26f7:f109::/42": "20940", - "2a09:95c0::/48": "209562", - "2001:1248:558a::/43": "11172", - "2407:1e40:601::/36": "141732", - "240a:a140::/32": "142970", - "2600:5c01:3045::/39": "10796", - "2604:880:32::/48": "29802", - "2607:ca80::/32": "395475", - "2804:49e0::/32": "267206", - "2401:ff80:1693::/39": "133954", - "240a:aa2a::/32": "145252", - "2605:aa40:c1e0::/48": "18792", - "2804:640:102::/43": "262713", - "2804:599c::/32": "268713", - "2a00:1c78:1::/48": "49340", - "2a09:5440::/29": "199163", - "2001:559:84a5::/46": "7922", - "2001:fd8:3010::/44": "4775", - "2001:4878:2215::/46": "12222", - "2607:f6f0:a004::/40": "16553", - "2a0d:e000::/29": "59682", - "2001:500:6d::/46": "30133", - "2604:8540:fc00::/48": "33353", - "2607:fdf0:5e7d::/40": "8008", - "2804:138b:b0c2::/42": "53037", - "2602:fd60:11::/48": "49134", - "2606:f180::/48": "64286", - "2a01:5e80::/32": "42789", - "2405:9d40::/48": "140399", - "2600:1fa0:5040::/44": "16509", - "2a04:5b80:100::/48": "16509", - "2a09:300::/29": "209899", - "240a:af0a::/32": "146500", - "2406:4e40:201::/39": "140966", - "2409:8904:37a0::/36": "24547", - "240e:44d:3800::/41": "140345", - "2607:fb10:7062::/43": "2906", - "2a03:2880::/34": "32934", - "2001:559:868d::/46": "7922", - "240a:af93::/32": "146637", - "2602:fdd3::/36": "46573", - "2a03:b8c0:2::/45": "202276", - "2001:559:c109::/48": "13367", - "2800:370:61::/48": "28006", - "2409:8a50:1100::/31": "56047", - "2600:370f:33c0::/46": "32261", - "2a0c:b641:280::/44": "60240", - "2a0c:b641:510::/48": "209586", - "2803:41e0::/32": "269995", - "2804:14c:a900::/40": "28573", - "2a00:f460::/32": "28968", - "2a0e:46c4:2940::/48": "138435", - "2600:6c39:505::/38": "20115", - "2607:ff28:6000::/32": "62904", - "2a03:4da0::/32": "25341", - "2a11:c80::/29": "208861", - "2001:559:45a::/47": "33657", - "2001:559:c0e4::/47": "33651", - "240a:a88b::/32": "144837", - "2a02:26f7:c180::/48": "36183", - "2001:559:c2d3::/48": "33652", - "2606:8e80:64::/48": "32133", - "2a00:1ca8:2c::/48": "206264", - "2409:8000:301b::/40": "9808", - "2600:140f:d800::/48": "55836", - "2806:20d:100d::/39": "32098", - "2a02:26f0:1e00::/48": "34164", - "2a0f:d601::/29": "208236", - "2001:559:8056::/48": "33491", - "2001:559:8243::/48": "33659", - "2001:45b1:1000::/28": "4780", - "2605:2180:911::/32": "12422", - "2804:744::/32": "262632", - "2804:2c64::/32": "265215", - "2a01:4a0:51::/45": "201011", - "240a:af4e::/32": "146568", - "2a00:a320::/32": "39605", - "2a02:b48:800c::/46": "39572", - "2a04:5d00:80::/48": "206754", - "2a05:50a7::/32": "62445", - "2a0d:9a00::/32": "39401", - "2804:4a78::/32": "267242", - "2a09:c80::/29": "41743", - "2001:559:34c::/47": "33651", - "240a:a9ad::/32": "145127", - "2604:ca00:1100::/41": "36492", - "2804:2c38::/32": "265204", - "2804:48bc::/32": "267141", - "2a05:2ec0::/29": "34580", - "2001:d10:840a::/45": "4787", - "2001:12e0:2000::/36": "10429", - "2409:805f:2100::/35": "9808", - "240e:1e:3000::/36": "4134", - "2606:4700:140::/36": "13335", - "2804:6528::/32": "269472", - "2001:480:ab::/45": "668", - "2001:67c:14a4::/48": "42191", - "2620:104:2001::/46": "40185", - "2a02:23b8::/32": "25003", - "2404:b0::/44": "4750", - "2603:90f5:7::/48": "11351", - "2a01:cf00::/42": "2278", - "2401:d800:79f0::/38": "7552", - "2800:430:a000::/33": "23487", - "2a03:d7c0::/29": "42695", - "2a0c:6fc0::/40": "198755", - "240a:a3df::/32": "143641", - "240e:3b3:9c00::/34": "140310", - "2605:a401:804a::/43": "33363", - "2a02:26f7:d948::/48": "36183", - "2404:2280:1be::/48": "24429", - "2600:370f:5208::/42": "32261", - "2607:f928:15::/48": "14085", - "2804:10:9000::/33": "28299", - "2a0a:c340::/32": "12996", - "2001:678:48c::/48": "50775", - "2001:678:e90::/48": "8447", - "2408:8000:a000::/43": "4837", - "240a:ad56::/32": "146064", - "2620:1ec:25::/46": "8075", - "2803:f340:1100::/36": "14754", - "2a00:1728::/47": "34224", - "2a0e:fd45:40fd::/48": "61138", - "240a:a48a::/32": "143812", - "240a:a565::/32": "144031", - "2600:1fa0:8140::/44": "16509", - "2620:113:8083::/41": "3680", - "2a02:26f7:d881::/46": "20940", - "2402:800:f260::/40": "7552", - "2408:84f3:3620::/43": "17816", - "2606:b400:8020::/48": "1219", - "2607:f750:700::/36": "23473", - "2404:1c40:6::/48": "24432", - "2a02:26f7:b9c4::/47": "36183", - "2600:6c38:d09::/43": "20115", - "2800:160:13e7::/43": "14259", - "2804:46f0:21::/41": "267021", - "2a02:450::/36": "34372", - "2a03:6087::/32": "16285", - "2001:4878:4225::/48": "12222", - "2600:6c38:8a::/45": "20115", - "2a0b:6bc0::/47": "43197", - "2409:8a52:900::/38": "56047", - "240e:84c:10::/42": "4134", - "2a0c:a580::/29": "62206", - "2001:559:8215::/48": "33657", - "2400:8500:6703::/48": "7506", - "2408:8957:b300::/40": "17816", - "2607:fe28:20b1::/41": "53347", - "240e:980:4400::/40": "134768", - "2607:f098:4100::/34": "33363", - "2a01:5800::/32": "39608", - "2a02:26f7:c404::/48": "36183", - "2a02:26f7:fb44::/48": "36183", - "2804:b10::/32": "52936", - "2001:559:828c::/47": "33660", - "2400:89c0:1130::/44": "37936", - "2404:4a00:1:1::/48": "45629", - "2408:8256:3d69::/48": "17816", - "2409:805c:3071::/40": "9808", - "2605:ed00:4c71::/34": "11427", - "2801:168:2::/48": "61554", - "2804:3330::/48": "265380", - "2806:2a0::/45": "28548", - "2a02:26f7:90::/48": "36183", - "2001:559:8273::/48": "7725", - "2001:44b8:6050::/48": "7545", - "2404:f4c0:f306::/48": "139299", - "240a:a8ae::/32": "144872", - "2620:11e:3050::/44": "395686", - "2a02:f48:2100::/40": "44515", - "2a0d:6140::/29": "8823", - "2001:67c:2380::/48": "20897", - "2001:df0:c780::/48": "134862", - "2400:7fc0::/40": "55960", - "2600:1fa0:6040::/44": "16509", - "2a01:9700:13ac::/46": "8376", - "2a02:26f7:bf84::/48": "36183", - "240e:3b6:9c00::/34": "140310", - "2620:bc:4000::/48": "394858", - "2a02:26f7:d2c0::/48": "36183", - "2001:559:4c::/48": "7922", - "240a:aec3::/32": "146429", - "240e:ff:c008::/48": "140310", - "2620:7f:e000::/48": "394719", - "2804:269c:fe10::/48": "47065", - "2001:559:81a4::/48": "7922", - "2804:2d80:ab00::/33": "262378", - "2806:230:4017::/48": "11888", - "2a00:1388:1000::/40": "8328", - "2001:559:c232::/48": "33660", - "2401:d800:7280::/42": "7552", - "2803:b100::/32": "52392", - "2a03:a1a0::/32": "201004", - "2a00:7143:102::/29": "51430", - "2a0e:b105:62c::/46": "20473", - "2605:3600:a::/48": "30452", - "2a01:8180:1000::/36": "21150", - "2a07:20c0::/29": "48602", - "2604:d600:1238::/45": "32098", - "2804:3de8::/33": "266562", - "2806:230:400e::/48": "265594", - "2a03:cdc0::/35": "31034", - "2001:1248:7074::/44": "11172", - "2406:e5c0::/32": "4782", - "2803:c010::/48": "271799", - "2804:1e54::/32": "52746", - "2405:1c0:6811::/45": "135062", - "240a:ad21::/32": "146011", - "240a:ad84::/32": "146110", - "240e:438:3820::/43": "140647", - "2620:104:4004::/48": "15248", - "2a02:540:6::/32": "35432", - "2a07:6cc0:50::/48": "61098", - "2402:ef2e:b::/31": "7633", - "2804:e34::/36": "61889", - "2a02:26f7:ca04::/48": "36183", - "2001:559:c0df::/42": "33659", - "2620:125:d002::/47": "394956", - "2804:1200::/32": "263450", - "2804:37f0:6100::/35": "266445", - "2c0f:e9f0::/32": "328748", - "2403:a2c0:128::/47": "131662", - "2600:6c58::/32": "20115", - "2a02:26f7:e788::/48": "36183", - "2a0c:b200::/29": "39782", - "2001:559:86bc::/48": "33287", - "2001:918:ffab::/43": "3303", - "2606:26c0::/32": "63033", - "2620:10a:80d1::/48": "27299", - "2806:230:1100::/46": "265594", - "2001:1388:6644::/35": "6147", - "240a:a06c::/32": "142758", - "2600:c04:1024::/32": "10912", - "2a00:cb00::/32": "25144", - "2a04:4e40:5400::/48": "54113", - "2001:520:1007::/48": "8103", - "2001:559:8246::/48": "33491", - "2001:44b8:604d::/48": "4739", - "2606:4100::/32": "11745", - "2607:ffa0::/47": "19355", - "2620:12f:100e::/48": "396279", - "2a01:8640:f::/48": "59711", - "2409:8924:7500::/38": "56046", - "2607:fb10:70f0::/44": "55095", - "2804:14d:90ab::/45": "28573", - "2806:370:7000::/44": "28403", - "2a02:188:1004::/48": "5491", - "2403:6d00:cf::/35": "56094", - "2602:808:b001::/48": "40417", - "2804:534:667::/32": "22177", - "2806:2f0:2421::/46": "22884", - "2408:8456:6e40::/39": "17816", - "240a:a9b6::/32": "145136", - "240e:6b6:4000::/36": "140310", - "2a0a:54c1:57::/44": "62240", - "2001:559:25b::/45": "33652", - "2800:3f0:4006::/32": "15169", - "2408:883a:7c0::/32": "4837", - "2804:8220::/32": "272500", - "2a02:26f7:eccc::/48": "36183", - "2408:84f3:b440::/38": "17816", - "2a03:5900::/44": "31126", - "2401:2d00:10::/48": "17625", - "2409:8b71::/29": "9808", - "2804:5b5c::/32": "268837", - "2401:5281:3800::/38": "63199", - "2402:800:3eb1::/44": "7552", - "2408:8459:c930::/41": "17622", - "240a:a996::/32": "145104", - "2800:160:11a4::/43": "14259", - "2a03:d640::/32": "24713", - "2408:8459:8030::/41": "17622", - "2408:8956:4500::/40": "17816", - "2600:6c38:840::/46": "20115", - "2606:4000:300::/40": "11074", - "240a:a464::/32": "143774", - "2a05:544::/31": "206766", - "240e:473:8b20::/41": "140486", - "2800:c20::/32": "28110", - "2804:15dc::/32": "263415", - "2a09:bf80::/40": "12213", - "240a:a09f::/32": "142809", - "2a02:9b0:1e::/42": "64105", - "2602:ffc5:190::/48": "7489", - "2803:9800:b501::/45": "11664", - "2804:4338::/32": "267556", - "2001:559:c34c::/48": "33287", - "2001:ddc::/48": "133874", - "2001:48a8::/33": "237", - "2409:8028:30f1::/44": "56041", - "2804:998:2::/43": "28589", - "2a0e:b107:159a::/48": "142598", - "2c0f:f6b0::/32": "327728", - "2001:1388:2482::/44": "6147", - "2409:8904:6770::/40": "24547", - "2804:3724::/32": "266392", - "2804:4b00::/32": "267277", - "2a00:79e0::/39": "45566", - "2a02:26f7:b99c::/48": "36183", - "2a0e:2a80::/29": "207902", - "2803:1d80::/32": "61481", - "2804:2348::/32": "264153", - "2401:afc0::/32": "133300", - "2408:8256:3560::/44": "17623", - "240a:a200::/32": "143162", - "240e:108:85::/48": "133774", - "2804:775c::/32": "271173", - "2804:7818::/32": "271220", - "2a0b:c800:1::/45": "8637", - "2001:c20:4806::/41": "3758", - "2400:f6::/32": "4766", - "2600:370f:37e1::/45": "32261", - "2402:9e80:29::/48": "142266", - "2409:804c:3002::/40": "9808", - "2600:9000:113b::/45": "16509", - "2a00:e10::/34": "61157", - "2409:804d:3900::/30": "9808", - "2a02:29ab:1::/29": "60142", - "2a0e:46c3:100::/40": "204982", - "2001:67c:2f6c::/48": "15626", - "2602:fcf6:102::/48": "51999", - "2a0a:ec02:101::/48": "42692", - "2401:d800:d840::/42": "7552", - "2610:1c8:1c::/32": "23393", - "2801:80:3890::/48": "270327", - "2804:4b98:e000::/35": "267317", - "2a02:2a30::/29": "9158", - "2806:310:130::/40": "16960", - "2a06:e881:1705::/46": "206813", - "2a07:9444::/30": "202682", - "2a0b:31c0::/45": "205726", - "2a06:14c0::/32": "213211", - "2001:559:8a::/48": "21508", - "2001:559:8402::/48": "7015", - "2001:12f8:6::/47": "53035", - "2409:8004:3900::/31": "24547", - "2409:8070:1900::/34": "9808", - "2a02:26f7:cd41::/46": "20940", - "2a03:82e0::/35": "200991", - "2001:918:1ac::/36": "3303", - "2602:ff84:10::/46": "36351", - "2606:b580::/32": "18897", - "2a03:1e40::/32": "197799", - "2001:44b8:4062::/48": "7545", - "2600:1409:b::/48": "20940", - "2606:2800:4a98::/46": "15133", - "2a02:618::/45": "20485", - "2a02:26f7:d101::/46": "20940", - "2a0c:b641:730::/44": "207338", - "2402:d000:143::/35": "9329", - "2408:8459:c950::/38": "17816", - "2804:7108::/32": "52881", - "2a01:288:4008::/48": "198941", - "2a0f:b100:40::/48": "211672", - "2801:1e:e800::/48": "262186", - "2a00:df8::/32": "24753", - "2a02:26f7:cb41::/46": "20940", - "2a02:26f7:d300::/48": "36183", - "2a04:2740::/29": "31169", - "2401:d800:b820::/41": "7552", - "240a:a87d::/32": "144823", - "2401:4900:4f00::/45": "45609", - "2600:6c38:455::/46": "20115", - "2604:6400:4520::/38": "29974", - "2800:160:1185::/44": "14259", - "2a05:2d07::/32": "198507", - "2a0a:3440::/29": "207092", - "2001:559:ce::/47": "7922", - "2408:8957:9e00::/40": "17622", - "2a02:26f7:f6e9::/48": "36183", - "2400:cb00:109::/48": "13335", - "2402:800:510f::/43": "7552", - "2408:8957:4200::/40": "17622", - "2803:a520::/32": "266685", - "2804:4920::/32": "267166", - "2804:5218::/32": "268494", - "2a00:f28::/43": "15802", - "240a:a0f6::/32": "142896", - "240a:a2f3::/32": "143405", - "2600:1416:1001::/36": "20940", - "2001:43f8:1070::/48": "328174", - "2409:8020:91::/42": "56046", - "240e:95d:1000::/37": "136191", - "2804:20dc::/32": "264517", - "2804:5b38::/32": "52842", - "2804:6fa8::/32": "270675", - "2a09:d400::/32": "41001", - "2001:67c:540::/48": "3301", - "2402:900::/32": "131459", - "2607:fb91:7a00::/28": "21928", - "2620:171:17::/44": "42", - "2001:dc3::/32": "7500", - "2600:140f:e400::/48": "9498", - "2604:d600:c7b::/45": "32098", - "2a02:910::/32": "43070", - "2001:15c8::/32": "20495", - "2401:d800:b150::/42": "7552", - "240a:a0da::/32": "142868", - "2804:18::/35": "26599", - "2a01:5b8::/29": "16333", - "2a02:26f7:c488::/48": "36183", - "2402:3800::/32": "7503", - "2405:1c0:6843::/43": "55303", - "2408:8456:4240::/37": "17816", - "2607:f790:fff0::/48": "62588", - "2a00:1eb8:e000::/45": "8764", - "2a00:afa0::/32": "62210", - "240a:a1bb::/32": "143093", - "2600:6000:faac::/48": "11351", - "2804:1ea0::/32": "264440", - "2a0d:8980::/29": "42237", - "2a0e:b107:1573::/48": "38281", - "2001:df4:5c00::/48": "135724", - "2409:8907:7e20::/39": "24547", - "2a02:e48::/32": "5379", - "2001:67c:6ec::/48": "1101", - "2001:12f0:b18::/42": "1916", - "2600:380:c600::/39": "20057", - "2804:6f5c::/32": "270655", - "2a0d:2680:1100::/43": "20473", - "2405:9800:b860::/40": "45430", - "240a:a9c6::/32": "145152", - "2604:c980::/32": "33438", - "2a02:e980:170::/40": "19551", - "2a03:4920::/32": "42652", - "2001:fd8:2120::/43": "4775", - "2800:160:1f0d::/43": "14259", - "2a0c:7100::/29": "40970", - "2a0e:97c0:1b0::/48": "211840", - "2001:579:5384::/41": "22773", - "2600:6000:f97e::/48": "11351", - "2607:fb90:1000::/36": "21928", - "2800:190:9::/40": "11664", - "2804:17bc::/32": "52739", - "2806:288:4092::/48": "28469", - "2001:240::/32": "2497", - "2001:590:3800::/46": "3257", - "240e:3b1:3e00::/33": "140308", - "2603:4:1400::/48": "44273", - "2607:fdb8:22::/43": "30496", - "2001:559:3dd::/48": "33652", - "240a:ac8e::/32": "145864", - "240d:c040::/44": "132203", - "2a01:3f1:3400::/33": "8674", - "2a01:6880::/32": "13121", - "2a04:7cc0::/29": "62332", - "2001:559:c173::/48": "33660", - "2001:559:c36a::/48": "33659", - "2406:7440::/32": "131970", - "2a03:bcc0:1::/48": "197882", - "2a0f:7b40::/29": "21227", - "2c0f:f828::/32": "37468", - "2406:daa0:6020::/44": "16509", - "2001:4238::/32": "30844", - "2401:af80:8000::/35": "59103", - "2804:6370::/32": "269361", - "2600:1405:3001::/36": "20940", - "2804:1b28::/32": "61712", - "2a02:cb43:8000::/48": "20546", - "2401:3cc0::/45": "137409", - "240a:aaa1::/32": "145371", - "2a02:26f0:6001::/39": "20940", - "2001:559:8523::/48": "7725", - "2402:d2c0::/46": "136897", - "2406:1d40::/32": "138259", - "240a:ad3c::/32": "146038", - "2409:8080:2aa0::/44": "9808", - "240a:ab01::/32": "145467", - "2604:980:1000::/33": "21859", - "2620:119:50e1::/48": "14413", - "2a0a:4540:11::/48": "54699", - "2001:44b8:4060::/48": "7545", - "2405:4802:7610::/32": "18403", - "2a0d:dd80::/29": "200308", - "2001:df7:6800::/51": "59194", - "2602:803:3000::/44": "21705", - "2804:2888:4000::/32": "263967", - "2a09:ca00:1::/29": "49434", - "2409:8b4c::/30": "9808", - "240a:a4a8::/32": "143842", - "2001:df6:1500::/48": "134003", - "2404:138:4005::/43": "38022", - "2607:fcd0:fa80:5e03::/50": "8100", - "2001:559:83c0::/48": "33659", - "2600:1419:801::/38": "20940", - "2600:9400::/28": "23470", - "2800:880::/30": "27773", - "2001:678:488::/48": "206335", - "2402:d000:106d::/43": "9329", - "2404:bf40:a5c0::/47": "7545", - "2a02:2148::/31": "1241", - "2001:559:c305::/48": "33657", - "2405:6e00:2690::/41": "18291", - "2a03:5840:10b::/32": "35661", - "2001:67c:7e8::/48": "47405", - "2001:67c:2b20::/48": "59467", - "2001:1a10:c2::/44": "8781", - "2402:6b00::/32": "18126", - "2408:8409::/40": "4808", - "2600:6000:fd93::/48": "11351", - "2604:fb80:f001::/46": "15128", - "2001:67c:2b74::/48": "3320", - "2001:4800::/32": "33070", - "240a:ad6a::/32": "146084", - "2404:4a00:5542:4::/54": "55423", - "2409:8910::/30": "9808", - "2a01:6d00::/32": "28726", - "2a0c:7d40::/32": "209418", - "240a:a239::/32": "143219", - "2a04:c442::/33": "10725", - "2001:df5:6080::/48": "135826", - "2001:4998:64::/48": "393245", - "2400:bb40:4444::/48": "136787", - "240e:473:1600::/41": "140485", - "2a00:19b8::/32": "49503", - "2a01:ce82::/34": "51964", - "2a02:26f0:11a::/48": "20940", - "2c0f:fd58::/32": "11845", - "2403:a280:1000::/48": "64087", - "2803:9800:98c7::/39": "11664", - "2a02:26f7:cf89::/46": "20940", - "2a10:c080::/29": "209288", - "2401:4900:1fe0::/34": "45609", - "2406:9840::/44": "134053", - "2409:803d:2c00::/25": "9808", - "2801:80:16e0::/48": "265362", - "2a03:c20::/32": "50825", - "2a10:fa80:216::/48": "57050", - "2401:c5c0:dfd::/32": "55492", - "2409:8057:306d::/36": "56040", - "2607:6100:d0::/48": "54380", - "2804:459c::/32": "266938", - "2a00:5d60::/32": "62353", - "2a06:55c0::/29": "206130", - "2a09:62c0::/29": "8224", - "2001:559:87bc::/46": "7015", - "2001:598::/35": "21548", - "240a:a35b::/32": "143509", - "2803:2a0::/32": "266849", - "2a02:4540:9000::/43": "197207", - "2a07:1340::/29": "34907", - "2804:6c0:10::/44": "262418", - "240a:a89c::/32": "144854", - "2602:fd75:aaa::/48": "46793", - "2803:1a00:500f::/43": "262186", - "2804:2e98::/32": "265354", - "2a00:1590::/32": "9051", - "2a06:1280:ce05::/34": "61138", - "2001:ee0:e100::/38": "45899", - "2400:65c0::/32": "132774", - "2607:fcd0:100:8e03::/50": "8100", - "2a02:100e:bef8::/48": "201318", - "2a07:ca07::/32": "35048", - "2402:a300:13e6::/44": "55427", - "240a:a65f::/32": "144281", - "2620:1bc:1025::/46": "7726", - "2800:160:1d7d::/40": "14259", - "240a:a250::/32": "143242", - "240a:ad9e::/32": "146136", - "2804:54c::/32": "262507", - "2804:e24:fff1::/44": "262417", - "2804:1c6c::/32": "61655", - "2a06:4dc0::/29": "60501", - "2a0e:17c0::/29": "59668", - "2620:171:19::/48": "715", - "240e:848::/44": "140553", - "2600:6c38:457::/44": "20115", - "2800:160:1e98::/46": "14259", - "2a01:7640::/38": "21282", - "2400:cb00:390::/46": "13335", - "2407:1400::/47": "23752", - "2a04:5b87:1::/48": "202265", - "2001:579:7184::/41": "22773", - "2001:4850::/32": "27446", - "2405:cc00::/32": "9471", - "2607:fdb8:33::/35": "30496", - "2804:53b0:4::/33": "268600", - "2a02:26f7:bec5::/46": "20940", - "2a03:4ba0:1::/48": "47697", - "2a10:ccc2:20::/43": "35619", - "2804:4c14::/32": "267348", - "2a01:9460::/32": "44644", - "2a08:600::/45": "206747", - "2001:df0:ec80::/48": "138894", - "2403:8600:a080::/43": "45820", - "2804:483c::/32": "267106", - "2804:7ef4::/32": "271657", - "2a02:598:3::/34": "43037", - "240a:a44f::/32": "143753", - "2607:f3c8:4000::/34": "33724", - "2800:160:1a33::/44": "14259", - "2804:1f32::/32": "265994", - "2404:e400:10::/44": "136402", - "2600:380:f1d2::/47": "64011", - "2801:0:20::/48": "28027", - "2a01:838::/32": "33874", - "2a07:6e80::/29": "202932", - "2a02:26f7:c0::/48": "36183", - "2409:8c28:31b1::/37": "56041", - "2a0f:bd40::/32": "197560", - "2001:559:47b::/48": "7015", - "2a00:800::/38": "1257", - "2001:678:25c::/48": "203055", - "240a:a751::/32": "144523", - "2804:57c4::/32": "268085", - "2b10:3c84::/30": "53820", - "2001:559:8066::/48": "7016", - "2001:67c:2de8::/48": "50476", - "2400:81c0::/32": "17804", - "2a0f:5e80::/29": "39287", - "2405:aa00::/32": "7712", - "2408:8956:af00::/40": "17816", - "2607:fb10:7072::/40": "2906", - "2a03:b700::/32": "51269", - "2408:856c::/31": "4837", - "2409:801e:3000::/46": "9808", - "2a0e:b103:ce8::/43": "20473", - "2a10:11c0::/32": "206858", - "2a02:26f7:e908::/48": "36183", - "2001:559:64::/48": "7725", - "2001:559:8335::/48": "7922", - "2001:678:1ec::/48": "42700", - "2600:6c33:718::/48": "11351", - "2606:2200::/32": "35986", - "2806:109f:1::/48": "8151", - "2a00:e98::/32": "39912", - "2a10:a641::/40": "47753", - "2001:67c:710::/48": "197933", - "2001:ce0:3::/48": "3661", - "2404:18c:2100::/32": "6619", - "2408:8256:1466::/39": "17622", - "2600:1417:a001::/36": "20940", - "2001:559:99::/48": "33659", - "2801:82::/32": "10881", - "2001:428:b22::/45": "209", - "240e:1f:6000::/36": "4816", - "2001:67c:275c::/48": "31371", - "2401:4900:840::/44": "45609", - "2600:8807:4fe0::/35": "22773", - "2803:8f80::/32": "263829", - "2a0e:dd40::/32": "397735", - "240a:a30a::/32": "143428", - "240e:438:8040::/38": "4134", - "2607:f3c0::/32": "16805", - "2800:800:640::/40": "26611", - "2606:7c00:d003::/34": "46103", - "2607:cf00::/30": "32522", - "2a02:2738::/32": "51088", - "2a02:6c20:808::/43": "207167", - "2405:8a00:6017::/44": "55824", - "2607:f8d8::/32": "3580", - "2a02:26f7:d445::/46": "20940", - "2a0c:8540:1::/45": "42198", - "2a0d:9240::/29": "210167", - "2001:559:5bb::/48": "21508", - "2001:4020::/32": "13110", - "2408:8459:cd30::/41": "17622", - "240e:981:f100::/38": "136197", - "2804:a14:300b::/33": "262342", - "2401:78c0::/47": "56150", - "240a:a438::/32": "143730", - "2600:380:4780::/35": "20057", - "2606:ae00:62a0::/37": "7287", - "2804:6c58::/32": "270462", - "2804:a00:2::/45": "262838", - "2804:5b64::/32": "268840", - "2a02:d68::/32": "12778", - "2a02:26f7:c908::/48": "36183", - "2a05:d050:4020::/44": "16509", - "2404:9400:1000::/33": "133159", - "2804:6cac::/32": "270484", - "2804:7ab0::/32": "271386", - "2a04:d040::/29": "48641", - "2a02:d58::/29": "44919", - "2001:559:e7::/48": "7922", - "2001:559:573::/48": "33659", - "2405:9800:70::/40": "131445", - "2408:820c:2750::/33": "17621", - "240a:ae37::/32": "146289", - "2800:160:2531::/40": "14259", - "2804:1ac4:2::/47": "61884", - "2a02:26f7:d155::/48": "36183", - "2a04:2d01::/48": "56647", - "2a0a:2540::/29": "42244", - "2406:d200::/32": "23629", - "2804:4d3c:1062::/38": "267420", - "2804:5808::/32": "268101", - "2a0e:cd00::/37": "23031", - "2001:559:15e::/47": "33659", - "2406:840:860::/48": "139317", - "240e:3b1:2200::/37": "136198", - "2600:2c03:1000::/36": "7349", - "2602:fe3d::/36": "46246", - "2001:67c:460::/48": "15542", - "2001:dce:9501::/33": "23869", - "2001:4c20::/32": "29636", - "2401:ff80:190d::/46": "133954", - "2409:8b28::/32": "56041", - "2600:9000:220b::/43": "16509", - "2001:678:360::/48": "206506", - "2402:c800:ff7b::/48": "18131", - "2806:230:600a::/48": "265594", - "2a02:26f7:cb05::/46": "20940", - "2a03:1ac0:2e01::/40": "9049", - "2a0f:1e80::/41": "30633", - "2001:de9:4000::/48": "23676", - "2001:4490:ddac::/43": "9829", - "2408:8446::/28": "4837", - "2409:8020:11::/42": "56046", - "2800:150:1::/48": "12956", - "2a00:ab40:5001::/32": "41798", - "2a09:12c0::/48": "34775", - "2401:25c0::/32": "131918", - "240a:a061::/32": "142747", - "2001:c78::/35": "2764", - "2602:feb7::/48": "16827", - "2a01:9700:12a0::/44": "8376", - "2a02:fc40::/29": "209959", - "2408:8120:1::/46": "9929", - "240a:a72d::/32": "144487", - "2a09:ac40::/32": "57040", - "2801:14e:1::/45": "27951", - "2804:5798::/32": "268074", - "2a02:e28::/32": "41696", - "2a02:26f7:c444::/48": "36183", - "2a0f:b780::/29": "49095", - "2804:1c04::/33": "61633", - "2001:559:113::/48": "7922", - "2001:559:5ac::/48": "33491", - "2001:4bb0::/32": "41497", - "2402:800:f0e0::/39": "7552", - "2402:5300:4310::/37": "45903", - "2620:b4:4000::/48": "63314", - "2800:300:84e0::/43": "27986", - "2a03:5480::/32": "35223", - "2001:2042::/31": "3301", - "2408:8256:2f6b::/48": "17816", - "2801:17c::/44": "14080", - "2804:80b8::/36": "271769", - "2a04:500::/29": "198249", - "2001:559:821f::/48": "7725", - "2a03:9e00::/37": "14537", - "2a0b:4340:520::/44": "134098", - "2001:559:8634::/48": "33659", - "2001:44b8:6067::/48": "4739", - "2400:1700:210::/47": "136552", - "2804:7710::/34": "271152", - "2a03:39a0::/32": "15733", - "2a04:b280::/29": "199708", - "2c0f:f2b0::/32": "328049", - "2a0e:1c00::/29": "61317", - "2408:8706::/28": "4808", - "2408:8956:f200::/42": "17816", - "2607:f4e8:c::/47": "22822", - "2620:149:983::/41": "714", - "2a02:26f7:e989::/42": "20940", - "2a07:1100::/29": "57389", - "2a0c:d980::/29": "35684", - "2a0e:97c1:800::/40": "20473", - "2a0f:2240::/29": "60262", - "2a0f:6480::/32": "205112", - "240a:a61b::/32": "144213", - "2804:164c:abcc::/33": "263280", - "2a02:27a8::/32": "15626", - "2001:559:7bb::/48": "33287", - "2408:84f3:b810::/42": "134543", - "2620:11b:3000::/48": "26470", - "2a10:cc44:100::/44": "38281", - "2001:1248:7090::/47": "11172", - "2402:800:fe80::/42": "7552", - "240a:aee1::/32": "146459", - "2620:4d:402f::/43": "395403", - "2001:559:87a8::/47": "7015", - "2001:4878:8062::/47": "12222", - "2401:c040::/32": "136965", - "2a01:8000:4::/47": "60672", - "2a0f:f300::/29": "208163", - "2001:13d2:3810::/33": "7303", - "2604:6600:fdc1::/38": "40676", - "2801:1c:a800::/48": "18747", - "2001:559:879a::/45": "7015", - "2804:7030::/32": "270711", - "2a0f:c087:e::/48": "212521", - "2001:468:2601::/44": "11537", - "2001:678:820::/48": "213297", - "2408:8026:530::/38": "17621", - "240e:473:4c00::/41": "140485", - "2a00:4b40::/32": "51013", - "2a02:2010:22e0::/45": "20978", - "2a06:efc0::/32": "34762", - "2403:2c00:7:1::4/62": "4058", - "2408:8956:4600::/40": "17622", - "2600:1406:3001::/37": "20940", - "2800:680:12::/32": "3816", - "2804:63fc::/32": "269396", - "2800:370:63::/45": "28006", - "2001:559:c106::/48": "20214", - "2001:df0:290::/48": "22787", - "240a:a9ba::/32": "145140", - "2604:6e00::/37": "13977", - "2610:a1:304c::/48": "12008", - "2620:132:5000::/44": "20182", - "2620:1d5:c9a::/38": "14773", - "2c0f:fe88::/32": "12556", - "2001:1388:3cc4::/33": "6147", - "2804:2438:2000::/32": "264209", - "2a00:f28:20::/48": "57187", - "2001:559:845c::/48": "7725", - "2804:a84::/33": "262296", - "2804:5d18::/32": "268950", - "2a03:3a40:2000::/48": "20712", - "2001:dcd:1::/48": "397229", - "2001:df5:f00::/48": "24205", - "2001:44c8:4730::/40": "45430", - "2405:1c0:6371::/46": "135062", - "2801:1fc:2a::/48": "27951", - "2804:14d:fb00::/63": "28573", - "2804:214:8420::/43": "26615", - "2001:559:c2d2::/48": "7922", - "240e:1f:8000::/48": "4813", - "2603:f600::/29": "40676", - "2620:13a:c021::/40": "53356", - "2a06:e80:3000::/36": "211720", - "2a06:2400::/29": "49788", - "2c0f:f538::/32": "22354", - "2a0b:a1c0::/29": "213102", - "2001:559:82fa::/48": "7015", - "2001:4888:8044::/48": "6167", - "2400:cb00:a570::/47": "13335", - "240a:a82e::/32": "144744", - "2804:3fc8::/32": "265914", - "2a01:300:71::/29": "9009", - "2a01:ce88::/32": "51964", - "2001:4928::/32": "13819", - "240a:ad43::/32": "146045", - "2804:18ec::/32": "61763", - "2804:18f8::/32": "61766", - "2804:581c::/32": "268107", - "2001:df1:3700:4000::/48": "136324", - "2405:a6c0::/32": "58820", - "2801:116:a::/48": "271827", - "2804:4228::/32": "267481", - "2a0e:e704:45::/48": "212970", - "2620:26:c000::/47": "55243", - "2804:4884::/32": "267126", - "2a02:26f7:c085::/46": "20940", - "2a0d:d740:107::/48": "207675", - "2804:22b4::/40": "264117", - "2001:648:2e02::/41": "5408", - "2001:df0:c300::/48": "136099", - "2408:8956:fd00::/40": "17622", - "240a:a436::/32": "143728", - "240e:108:1160::/48": "58563", - "2600:1406:1000::/48": "35994", - "2602:fd10:860::/44": "398795", - "2804:7d74::/32": "271562", - "2a09:ccc0::/29": "209222", - "2001:4868:4200::/40": "23148", - "2408:8456:1600::/42": "17622", - "2800:68:33::/48": "269844", - "2804:6380::/32": "269365", - "2a0d:6680::/29": "50782", - "2001:c38:3001::/46": "9335", - "2001:df0:a1::/48": "55532", - "2804:a84:4400::/32": "262296", - "2a0c:8187::/32": "206994", - "2401:ff80:1401::/46": "133954", - "240a:a60e::/32": "144200", - "240e:3b7:ac00::/35": "4134", - "2a03:6607::/32": "197838", - "2a04:2600::/29": "60924", - "2c0f:fe30::/32": "37006", - "2408:84f3:3610::/44": "17623", - "2a02:4b0:217::/32": "43751", - "2a00:8aa0::/32": "62059", - "2806:264:400::/43": "13999", - "2a02:26f7:e689::/42": "20940", - "2a0c:e640:6001::/46": "17830", - "2001:559:c1f8::/47": "7922", - "2001:67c:2028::/48": "43591", - "2804:2c0:6608::/35": "262834", - "2001:428:6809::/32": "209", - "2400:9380:8221::/48": "4134", - "2401:d800:250::/42": "7552", - "2803:9800:b995::/46": "11664", - "2804:9c4::/32": "33182", - "2a00:66e0::/32": "48953", - "2001:57a:1206::/34": "22773", - "240e:3bb:9c00::/34": "140310", - "2a00:1f88::/32": "29545", - "2001:559:11a::/47": "7016", - "2001:4998:ef5f::/42": "10310", - "240e:3ba:d000::/36": "134772", - "2800:160:23e9::/37": "14259", - "2804:1f20::/32": "19200", - "2607:f8f8::/37": "23033", - "2a02:ff0:3300::/40": "12735", - "2c0f:f578::/42": "24691", - "2001:559:2a1::/46": "7015", - "2401:ff80:1681::/45": "133954", - "2600:1488:a201::/40": "20940", - "2600:3000:2711::/35": "13649", - "2605:a900:3005::/48": "55088", - "2804:5a5c::/35": "268768", - "2806:230:301b::/48": "11888", - "2a06:6d40::/29": "198090", - "2001:1540::/32": "47886", - "2401:ff40:f010::/36": "137080", - "2409:8c20:c800::/34": "56046", - "240a:ac94::/32": "145870", - "2620:98:c000::/48": "11810", - "2620:1f6::/36": "26305", - "2a05:fc87::/32": "39540", - "2a0f:9400:8012::/48": "23470", - "2001:559:8186::/48": "7922", - "2402:5300:4610::/36": "45903", - "2409:8000:5200::/37": "9808", - "240a:a9ca::/32": "145156", - "2600:100a:d020::/34": "22394", - "2a02:2e02:8830::/41": "12479", - "2001:559:8580::/48": "7015", - "2401:d800:b0f0::/39": "7552", - "240e:473:2850::/39": "4134", - "240e:473:7850::/39": "4134", - "240e:60c:6000::/36": "137688", - "2620:122:1004:45::/48": "29954", - "2806:310:100::/42": "16960", - "2400:a980:9100::/34": "133111", - "2401:b00::/43": "17564", - "2a0f:7700::/29": "47787", - "2a11:5580::/29": "61192", - "2405:1500:31::/41": "58717", - "2607:f208:d000::/43": "398101", - "2c0f:ec98::/32": "328278", - "2602:ff96:12::/48": "40676", - "2620:3f:2000::/48": "31852", - "2800:bf0:8029::/43": "27947", - "2a02:26f7:e7::/48": "20940", - "2a02:26f7:b884::/48": "36183", - "2001:df2:bc00::/48": "45734", - "2001:1248:9987::/44": "11172", - "2605:6440:6006::/36": "396356", - "2a01:111:3000::/33": "8075", - "2401:d800:2fa0::/41": "7552", - "240a:a41c::/32": "143702", - "2607:6003:2307::/48": "19181", - "2a00:78c0::/29": "30781", - "2a0e:fb44::/32": "398343", - "2804:33fc::/32": "265429", - "2a0b:2900:4100::/38": "48582", - "240a:a4e6::/32": "143904", - "2804:2a0:400::/32": "28272", - "2a06:9cc7:ff01::/46": "8666", - "2a06:e881:6000::/44": "49981", - "2c0f:f858::/46": "36947", - "2001:559:449::/48": "7016", - "2001:4998:1b0::/48": "10880", - "2406:e001:9000::/36": "23655", - "2001:559:7f1::/48": "7922", - "240e:473:3920::/41": "140486", - "2600:1417:17::/44": "20940", - "2804:526c::/36": "268517", - "2001:678:2c::/48": "48283", - "2606:1880::/35": "32931", - "2a02:7c40:8000::/33": "8758", - "2408:8456:2100::/42": "17622", - "2a01:9380::/32": "43638", - "2a02:26f7:e205::/46": "20940", - "2a00:18c0::/32": "8402", - "2a02:26f7:da0d::/46": "20940", - "2a10:3044::/30": "398481", - "2408:8206::/35": "4808", - "240a:a51b::/32": "143957", - "240e:965:1000::/37": "133775", - "2600:140b:5::/48": "24319", - "2602:807:5010::/42": "55136", - "2606:b400:8808::/48": "7160", - "2a01:5f0::/32": "35592", - "2a02:26f7:d884::/48": "36183", - "2401:d800:51e0::/38": "7552", - "2408:805c:4000::/44": "17622", - "2a02:970:1069::/39": "44002", - "240a:ad00::/32": "145978", - "2a02:478::/32": "30975", - "2a06:8145:9f::/48": "199364", - "2001:559:2a4::/46": "7922", - "2001:559:2df::/48": "33652", - "2001:df6:cc00::/48": "55683", - "2408:8256:356f::/48": "17816", - "240a:af7f::/32": "146617", - "2603:c011:6000::/36": "31898", - "2804:14c:b388::/41": "28573", - "2401:0:4000::/40": "23966", - "2405:edc0::/48": "140746", - "2606:2800:30c::/46": "15133", - "2606:2800:4a64::/46": "15133", - "2806:230:4003::/48": "11888", - "2a0e:1c80:14::/47": "1299", - "2c0f:f1a0::/32": "37314", - "2404:6380::/48": "23650", - "2804:214:8003::/43": "26615", - "2804:3f64::/32": "265890", - "2a04:ad40::/29": "60156", - "2c0f:f7a8:9010::/47": "4809", - "2801:80:1e81::/46": "14026", - "2804:61a8::/32": "269248", - "2402:ef1b:2100::/40": "7633", - "2a01:290::/32": "30781", - "2620:1a:e000::/48": "396233", - "2804:e94:790::/42": "262468", - "2a00:1ec8:55::/42": "2854", - "2a01:53c0:ffcf::/43": "54994", - "2401:3cc0:801::/41": "137409", - "2403:6a40:2::/48": "135967", - "2a04:4e41:40::/44": "54113", - "2001:559:825b::/48": "7922", - "2a02:26f7:ef88::/48": "36183", - "2604:3400:abcc::/48": "209453", - "2607:9080:5::/48": "701", - "2a0b:83c0::/29": "20634", - "2409:8924:a300::/37": "56046", - "2605:a404:4f6::/39": "33363", - "2804:50b0::/32": "268404", - "2806:2f0:9661::/40": "17072", - "2a01:8840:b6::/44": "12041", - "2401:dec0::/32": "137023", - "240e:108:1191::/45": "63835", - "2804:5d34::/32": "52690", - "2a06:8144:1121::/48": "199364", - "2a0d:5440::/29": "48927", - "240e:44a::/29": "4134", - "2604:880:38c::/46": "29802", - "2604:ff00:b000::/44": "36271", - "2607:fdc0:12::/40": "20326", - "2800:1e0:d02::/38": "7195", - "2804:62e4:faa3::/41": "269326", - "2001:559:31d::/46": "7016", - "2a0e:3080::/29": "208921", - "2001:df0:62::/48": "38040", - "2001:1248:84f5::/44": "11172", - "2400:bc00:1811::/46": "140637", - "240e:185::/30": "4134", - "2602:ffe4:4::/37": "21859", - "2404:bf40:c3c2::/48": "7545", - "240a:ac6a::/32": "145828", - "2001:df2:f300::/48": "136699", - "2408:8456:a40::/39": "17816", - "2600:1806:30::/46": "16552", - "2a01:c50f:d500::/36": "12479", - "2a04:8f40:2000::/48": "205505", - "2001:559:3db::/48": "7725", - "2001:4878:c1e0::/44": "35994", - "2402:800:57d3::/44": "7552", - "2804:3d24::/32": "266256", - "2a00:a220::/32": "13287", - "2a02:26f7:e5c5::/46": "20940", - "2a07:e02:1000::/38": "210083", - "2001:559:82d0::/48": "7922", - "2001:678:66c::/48": "200924", - "2603:90bc::/32": "11427", - "2804:14d:7e8d::/43": "28573", - "2a0e:b107:861::/46": "211840", - "240a:a26e::/32": "143272", - "2001:67c:19dc::/48": "12552", - "2607:b080:301::/32": "29838", - "2a00:c90::/32": "20853", - "2a00:edc0:1000::/45": "62597", - "2001:648:2cef::/48": "199399", - "2001:67c:18e0::/48": "199971", - "2001:fd8:b0f0::/39": "4775", - "2400:c700:1302::/34": "55644", - "2404:c900:3::/45": "58682", - "2408:8956:1d40::/40": "17816", - "240e:44d:7d00::/41": "140345", - "2a04:9140:3104::/48": "201958", - "2600:180c:3002::/33": "16552", - "2a04:8b40::/29": "62126", - "2a0c:9a40:8250::/48": "212509", - "2001:67c:11cc::/48": "3301", - "2803:4600::/35": "14754", - "2a0f:304::/32": "1239", - "2409:8914:a000::/39": "56044", - "240a:a1b3::/32": "143085", - "2804:4800::/32": "267091", - "2a03:a2c2::/32": "60595", - "240a:ad9c::/32": "146134", - "2604:2400::/32": "14107", - "2800:160:2c57::/40": "14259", - "2a00:11c0:df::/48": "42473", - "2a02:d400::/29": "50261", - "2a11:e680::/29": "60022", - "2001:67c:23ec::/48": "24693", - "2804:2164:d005::/44": "264552", - "2a02:7980:106::/32": "43937", - "2402:1b80:2000::/35": "63956", - "2600:1408:9401::/36": "20940", - "2a0f:5382:acab::/48": "208135", - "2a10:b640:3000::/36": "211607", - "2600:1408:5401::/36": "20940", - "2a03:a860:a01::/48": "58431", - "2001:559:8185::/48": "33652", - "2001:1478:1101::/32": "3257", - "2405:1c0:6331::/45": "135062", - "2806:2f0:8024::/41": "17072", - "2a02:26f0:78::/45": "20940", - "2620:0:870::/48": "3856", - "2a10:d504:1::/48": "22773", - "2407:7200::/47": "10098", - "2602:fe19:4005::/43": "26073", - "2804:3d4::/45": "262401", - "2a0e:c400::/29": "51083", - "2001:67c:124c::/48": "197564", - "2402:800:9ec0::/43": "7552", - "240e:1c:4000::/36": "4134", - "2620:131:104e::/43": "26450", - "2a0b:4340:c0::/48": "44421", - "2a0c:e640:101f::/48": "141011", - "2a0e:97c0:2e0::/47": "211544", - "2404:9140::/48": "134687", - "240e:928:1500::/32": "58542", - "2607:f7c8:401::/38": "36221", - "2804:540::/32": "262504", - "2a00:1a78::/32": "41729", - "2a00:cdc0::/43": "12586", - "2a02:970:101a::/42": "44002", - "2a0e:b107:dce::/48": "212237", - "2001:559:8446::/48": "33657", - "2409:8050:1900::/37": "9808", - "2600:1419:d::/43": "20940", - "2607:3e00::/32": "14928", - "2804:7898:4000::/48": "271253", - "2a02:26f7:dc01::/46": "20940", - "2a0d:2146:be00::/43": "50801", - "2001:559:8671::/46": "7922", - "2406:2100::/45": "56209", - "240e:100:70::/31": "4134", - "2600:1a00::/28": "46650", - "2803:f580::/32": "61470", - "2a02:26f7:f500::/48": "36183", - "2001:67c:144::/48": "56738", - "240a:ac43::/32": "145789", - "2604:880:264::/43": "29802", - "2408:840c:f00::/40": "17621", - "2600:1f12::/36": "8987", - "2607:4000::/38": "73", - "2a0b:21c0:3004::/32": "21859", - "2c0f:ffc8:6004::/32": "22355", - "2001:660::/34": "2200", - "2001:13c7:6013::/48": "52404", - "2001:4878:b153::/48": "12222", - "2400:9380:9220::/47": "4809", - "2401:cc00::/32": "24363", - "2409:8904:2840::/39": "24547", - "2603:c025:c000::/35": "31898", - "2001:4868:100::/44": "23148", - "2804:4728::/32": "267035", - "2a0a:3140:2600::/46": "15532", - "2a0e:74c0::/29": "41498", - "2a0e:b107:13e0::/44": "211284", - "2001:559:387::/48": "33287", - "2001:559:c087::/44": "7922", - "2001:12f0:240::/40": "1916", - "2001:579:a07d::/40": "22773", - "2001:c20:4000::/36": "3758", - "2401:4900:4a60::/45": "45609", - "2620:1e5::/40": "13382", - "2804:1f50::/32": "61607", - "2a0c:3b80::/29": "58057", - "2a02:26f7:dc80::/48": "36183", - "2001:559:3a7::/48": "33651", - "2001:67c:3fc::/48": "51776", - "240a:aa0d::/32": "145223", - "240e:6b2:2000::/32": "4134", - "2803:f340::/35": "14754", - "2804:368::/32": "22381", - "2a02:26f7:be::/48": "36183", - "2001:559:8565::/48": "7922", - "2604:82c0:2::/44": "62917", - "2605:7b80::/32": "2728", - "2607:3500::/48": "11228", - "2a00:9380::/32": "15557", - "2a05:3580:f600::/36": "35807", - "2001:480:30::/48": "13", - "2600:a003::/29": "22450", - "2605:ea80::/32": "32709", - "2a0a:40c0::/29": "49596", - "2403:1ec0:1200::/48": "4808", - "2804:3578::/32": "266288", - "2001:4b20::/55": "34288", - "2a07:3a40::/34": "212734", - "2a0b:8240::/31": "205581", - "240a:a953::/32": "145037", - "2a01:9700:1354::/46": "8376", - "2001:559:7f2::/48": "33489", - "2408:8957:7500::/40": "17816", - "240e:438:3440::/38": "4134", - "2603:f500::/29": "396356", - "2a02:128:14::/48": "201069", - "2a0f:580::/29": "30823", - "2a0f:f3c0::/47": "207590", - "2001:559:c108::/48": "33287", - "2001:678:a00::/48": "49697", - "2402:e7c0:c00::/38": "134366", - "2600:100d:f110::/36": "22394", - "2600:6c38:78::/47": "20115", - "2a0f:8640::/29": "25682", - "2407:59c0::/32": "140072", - "240e:438:7c20::/43": "140647", - "2a00:a5a0::/32": "24971", - "2001:678:5c4::/48": "48534", - "2804:578::/32": "262516", - "2a00:f380::/32": "39551", - "2a02:26f7:fa40::/48": "36183", - "2a07:1fc0::/29": "42970", - "2001:559:8342::/48": "33651", - "2600:100d:9110::/36": "22394", - "2804:4308:4::/32": "267544", - "2001:67c:69c::/48": "47267", - "2604:3400:dc1::/48": "209453", - "2a0e:aa07:e025::/48": "210903", - "2401:d800:fb90::/42": "7552", - "2407:7a00::/32": "24187", - "2804:5b1c::/32": "268819", - "2a02:26f7:f544::/48": "36183", - "2a02:e5c0::/29": "51219", - "2001:4878:2220::/48": "12222", - "240e:473:a750::/40": "4134", - "2602:ff18:241::/46": "21973", - "2804:4ac::/32": "262458", - "2a07:9944:40::/48": "58305", - "2a0d:de80::/29": "3214", - "2001:500:89::/48": "26710", - "2001:16c0:feff::/29": "31732", - "2606:9080::/32": "397122", - "2800:160:1022::/43": "14259", - "2804:bf8:5000::/32": "52653", - "2804:7580::/32": "271051", - "2001:559:8288::/48": "7015", - "2001:559:c335::/46": "7015", - "240a:a85c::/32": "144790", - "2620:171:73::/40": "715", - "2806:230:204f::/48": "11888", - "2a02:750:15::/30": "42708", - "2001:67c:24bc::/48": "42652", - "2001:c20:4890::/48": "3758", - "2001:df7:80::/48": "136697", - "2602:fe6b:1000::/43": "398646", - "2804:14c:8700::/40": "28573", - "2001:559:e6::/48": "22909", - "240a:a408::/32": "143682", - "2600:140f:1800::/48": "9498", - "2a02:16a0::/32": "13030", - "2403:f440::/32": "134869", - "2600:1003:b4e0::/36": "22394", - "2620:52::/48": "22753", - "2a01:8640:c::/48": "61102", - "2a02:faa0::/48": "203427", - "2408:8956:7100::/40": "17816", - "2604:6d00:2000::/48": "36223", - "2801:1e4::/42": "27951", - "2804:12bc::/32": "263495", - "2804:7f30::/33": "271672", - "2400:ac40:8bc::/38": "136255", - "2400:cb00:a0f0::/45": "13335", - "240a:a5aa::/32": "144100", - "2a00:1ce8::/32": "34525", - "2a00:4940::/47": "198279", - "2a03:3400::/32": "20559", - "2a0b:6b86:3fa::/48": "202562", - "2001:4970::/32": "11274", - "2604:c140::/32": "394740", - "2620:101:9004::/47": "40934", - "2a02:9d0::/32": "12617", - "2a02:26f7:c548::/48": "36183", - "2001:579:709c::/42": "22773", - "2408:8256:3775::/48": "17816", - "2602:fcf6::/44": "51999", - "2605:1c00:1ff0::/44": "16787", - "2804:1248:9000::/33": "263467", - "2804:29b0::/38": "61577", - "2a02:7900:ff01::/48": "43044", - "2001:559:8212::/47": "33657", - "2620:79:8000::/48": "698", - "2a01:8840:5d::/48": "207266", - "2a04:c680::/29": "201277", - "2001:559:c3d5::/48": "7922", - "2001:67c:2e1c::/48": "6848", - "240a:a42e::/32": "143720", - "240a:af1d::/32": "146519", - "2606:cb00:16::/47": "6643", - "2804:6e70::/32": "270597", - "2a03:860::/32": "59971", - "2405:6e00:f812::/47": "133612", - "2604:10c0::/47": "40034", - "2804:7c8c::/32": "271503", - "2a0e:b107:1591::/48": "142598", - "2400:da00:5f26::/32": "38365", - "2402:800:93b7::/41": "7552", - "240a:a4c8::/32": "143874", - "2804:37f8:8000::/33": "266447", - "2a01:8840:f4::/48": "12041", - "2001:559:83a9::/48": "33489", - "2001:4490:3ff4::/44": "9829", - "2400:a980:e2::/47": "133111", - "2408:8459:1410::/41": "17622", - "240a:ac84::/32": "145854", - "2803:f780:1978::/48": "271804", - "2804:34c4::/32": "262646", - "2400:fe00::/32": "17968", - "2605:8bc0::/32": "26695", - "2403:4700::/47": "23728", - "2406:d040::/32": "38856", - "2408:8760::/32": "4837", - "240a:a2df::/32": "143385", - "2804:3c20:b3::/32": "266192", - "2804:14d:4000::/40": "28573", - "2804:14d:e600::/42": "28573", - "2804:2414::/32": "264200", - "2804:2d0c:e0::/32": "262408", - "2001:1388:1454::/40": "6147", - "2001:4878:b031::/48": "12222", - "2800:1e0:a04::/39": "7195", - "2804:b1c::/32": "53008", - "2804:2dbc::/32": "265300", - "240e:3b5:9200::/36": "140317", - "2804:4f8:6200::/36": "28263", - "2804:36b8::/32": "266367", - "2a00:5da0::/32": "48716", - "2a02:5740:10::/48": "58065", - "2a0b:2700::/29": "206894", - "2001:4298::/40": "30990", - "240a:a0bb::/32": "142837", - "240a:a7af::/32": "144617", - "2600:1406:41::/46": "20940", - "2804:7da8::/32": "271575", - "2a02:26f7:c3c5::/46": "20940", - "2a02:7c40::/33": "5539", - "2001:14e0::/32": "12931", - "2800:8a0:c400::/38": "5722", - "2804:6c4c::/32": "270458", - "2a01:664:1b00::/30": "48951", - "2001:1248:56c5::/43": "11172", - "2408:8256:3ca0::/39": "17816", - "2a02:26f7:c701::/46": "20940", - "2001:678:5e0::/48": "204671", - "2403:1940:40::/48": "137935", - "240a:aaec::/32": "145446", - "240e:966:800::/37": "133774", - "2a00:af60::/32": "199364", - "2001:b400:d210::/37": "3462", - "2603:c002::/39": "31898", - "2a01:8840::/46": "12041", - "2001:559:c15c::/48": "7015", - "2401:d800:7900::/42": "7552", - "2605:b940::/46": "19047", - "2804:2e90::/32": "52528", - "2804:6328::/32": "269342", - "2604:d600:532::/45": "32098", - "2607:f7c0:4100::/32": "36444", - "2804:3ce0::/32": "266240", - "2a02:2368:ffff::/48": "50270", - "2a02:26f7:88::/48": "36183", - "2001:559:20c::/48": "33659", - "2001:559:86da::/48": "33659", - "2605:6c80:4::/47": "397373", - "2620:115:7002::/40": "55091", - "2404:92c0::/32": "48024", - "2804:f54::/32": "263580", - "2402:bd82::/31": "136557", - "2603:c0f8:2000::/43": "20054", - "2607:f928:12::/48": "16905", - "2804:790::/32": "28653", - "2804:5e50::/32": "269025", - "2a02:26f0:3d::/48": "31108", - "2a0e:6b80::/29": "202709", - "2408:8956:ba00::/40": "17622", - "2804:14c:489::/42": "28573", - "2804:14d:2c00::/40": "28573", - "2804:72e0::/32": "270881", - "2a03:25a0::/32": "201656", - "2a04:4e40:2230::/44": "54113", - "2a06:c040::/31": "61430", - "2c0f:fe60::/32": "37619", - "2409:803c:100::/37": "9808", - "2800:200:e850::/40": "12252", - "2804:50f0::/32": "268420", - "2a0d:d580::/32": "205588", - "2a0b:6b82::/32": "42615", - "2001:559:8096::/47": "22909", - "2408:8256:1596::/38": "17622", - "240e:d:b800::/37": "136194", - "240e:44d:7d80::/41": "4134", - "2804:1bb8::/32": "61745", - "2804:7880:6200::/32": "271247", - "2a03:9ea0::/32": "51815", - "2c0f:fe90::/32": "36943", - "2404:a500:4::/48": "45854", - "2409:8924:5700::/36": "56046", - "2409:8d5b::/29": "9808", - "2804:2258::/32": "264604", - "2804:7d20::/32": "271540", - "2a02:26f7:bdc1::/46": "20940", - "2a06:f904::/36": "56630", - "2001:559:c150::/48": "33668", - "2408:80f1:70::/44": "138421", - "240a:ab2e::/32": "145512", - "2600:140f:6001::/37": "20940", - "2a01:4000::/32": "33852", - "2a02:73c0::/32": "59395", - "2402:28c0:ffaf::/41": "136620", - "240a:a86a::/32": "144804", - "2600:9000:1152::/48": "16509", - "2607:f220:412::/44": "3527", - "2a05:2701:f00::/43": "62371", - "2405:84c0:8d00::/40": "9886", - "2408:8956:a000::/40": "17622", - "240e:44d:2a80::/41": "4134", - "2620:149:22c::/43": "714", - "2a03:2100::/43": "51559", - "2a0c:a0c0::/31": "202486", - "2001:559:32a::/48": "7016", - "2001:559:83b3::/45": "33287", - "2403:fe00::/32": "38743", - "2603:c027::/35": "31898", - "2800:620::/32": "11562", - "2804:6570::/32": "269490", - "2a00:1340::/32": "42840", - "2603:f958::/29": "262287", - "2607:fb90:3900::/33": "21928", - "2001:67c:15dc::/48": "43284", - "2401:c800::/32": "7511", - "2604:3d00::/33": "6327", - "2a00:86c0:1043::/43": "2906", - "2a0e:b107:e70::/44": "212292", - "2804:814c::/32": "272445", - "2001:4998:198::/46": "36647", - "2401:4100::/32": "9387", - "2402:6a40::/46": "135718", - "2402:6c00::/32": "46015", - "2620:101:403c::/48": "16880", - "2800:9a7:3011::/41": "14522", - "2803:3b80:5000::/34": "263702", - "2a0b:c6c0::/29": "57407", - "2a0b:f4c0:16c::/48": "205100", - "2001:67c:1250::/48": "49697", - "240a:a8c2::/32": "144892", - "240a:abc8::/32": "145666", - "2a06:1600:71::/48": "39221", - "2001:559:59::/48": "13367", - "2404:4f00::/34": "17819", - "2600:1002:a110::/36": "22394", - "2803:59a0::/32": "52468", - "2804:3a00::/32": "266064", - "2a0c:4b40::/29": "202449", - "2001:67c:2274::/48": "197164", - "2409:8904:3ba0::/37": "24547", - "2620:11:a000::/48": "41625", - "2402:800:39d3::/44": "7552", - "2404:c000:4000::/46": "45147", - "240a:a667::/32": "144289", - "240e:982:7100::/38": "139201", - "2a03:7020:10::/48": "59625", - "2402:800:920f::/43": "7552", - "2402:800:b040::/42": "7552", - "2607:fcd0:fa80:5100::/53": "8100", - "2a02:26f7:ce::/48": "36183", - "2001:559:109::/48": "33287", - "2001:df2:b500::/48": "137004", - "2001:4998:1c1::/32": "10310", - "2407:8800:bf02::/33": "7545", - "2a06:d640::/48": "56601", - "2a0f:85c1:beef::/48": "207781", - "2600:5c01:1a3::/36": "10796", - "2606:f900:ae01::/33": "812", - "2804:2e60::/32": "265342", - "2804:4d3c:a48::/35": "267420", - "2620:119:5014::/48": "13443", - "2001:2002::/32": "3301", - "2401:d800:da80::/41": "7552", - "2405:9800:11::/45": "45430", - "240c:6::/48": "24445", - "240e:3be:6400::/35": "140312", - "2604:d600:c85::/42": "32098", - "2605:6c80::/47": "397373", - "2804:14c:8587::/42": "28573", - "2804:827c::/32": "262937", - "2a0d:5081:e::/30": "62240", - "2001:559:117::/48": "33287", - "2409:8028:30e1::/43": "56041", - "240a:ac9e::/32": "145880", - "240a:acb9::/32": "145907", - "2a02:26f7:ba40::/48": "36183", - "2a04:8f40:ffff::/48": "205505", - "2001:559:82e7::/48": "7922", - "2401:d800:5680::/42": "7552", - "240a:ac7e::/32": "145848", - "2606:bd80::/32": "53732", - "2804:36ec::/32": "266380", - "2804:3e28::/32": "266577", - "2a02:26f7:c285::/46": "20940", - "2400:1c00:13::/48": "3758", - "2600:380:ed00::/35": "7018", - "2604:bc0:1::/48": "46562", - "2803:9800:988d::/41": "11664", - "2a02:26f7:f908::/48": "36183", - "2a06:f140::/29": "42034", - "2001:df0:258::/47": "33517", - "2804:be4::/44": "52840", - "2a02:2090:e800::/48": "48287", - "2001:579:5104::/41": "22773", - "2400:cb00:a1b2::/45": "13335", - "2404:f080::/35": "131392", - "2607:f368:2d00::/35": "32982", - "2803:a9c0:2::/47": "265819", - "2001:4878:a007::/44": "12222", - "2402:ef0c::/32": "24515", - "2a06:d040::/29": "50785", - "2602:feca::/36": "6939", - "2604:20c0::/36": "40641", - "2403:300:a17::/42": "714", - "2803:d8c0::/40": "264787", - "2a09:6f80::/29": "3320", - "2a0e:8f02:f011::/48": "212357", - "2001:253:102::/48": "142068", - "2001:559:8257::/48": "7016", - "2402:e380:302::/48": "133846", - "2408:8256:2f77::/44": "17623", - "240a:a256::/32": "143248", - "2001:df5:e800::/48": "133498", - "2403:cfc0:1100::/44": "135134", - "2804:c9c::/32": "52729", - "2a07:a343:94d0::/44": "9009", - "2408:8a04:e000::/40": "9929", - "2800:68:dc42::/34": "61468", - "2803:7320::/32": "266758", - "2804:14c:87fd::/46": "28573", - "2804:65fc::/32": "269526", - "2a05:5244::/30": "198722", - "2a07:14c0:7000::/36": "59504", - "2a05:2880::/32": "59827", - "2001:868::/29": "12731", - "2001:40f0::/32": "15997", - "2405:1c0:6551::/46": "135062", - "2600:1001:9000::/44": "6167", - "2605:a401:8de1::/38": "33363", - "2804:2330::/32": "264147", - "2804:3528::/32": "266272", - "2404:7180:b021::/46": "23848", - "2620:13f:4000::/44": "397386", - "2001:559:5b0::/48": "7922", - "2804:69a0::/32": "270281", - "2001:67c:17bc::/48": "3246", - "240a:a836::/32": "144752", - "2804:3e0::/32": "262403", - "2804:1460::/32": "28308", - "2001:df0:7480::/48": "139076", - "2a03:bec0::/32": "202016", - "2a0c:9f40::/32": "41785", - "2401:1801::/36": "58683", - "240a:abe6::/32": "145696", - "2804:5984::/32": "268707", - "2a00:17cf::/32": "12511", - "2a06:9140::/29": "31486", - "2001:43f8:6b0::/47": "8094", - "2600:370f:2065::/40": "32261", - "2804:4afc:f000::/44": "267276", - "2806:2f0:6200::/41": "17072", - "2001:1520:4::/46": "8972", - "2402:f740:1000::/36": "131477", - "240a:ab1b::/32": "145493", - "2602:807:6003::/48": "399209", - "2a0a:5640::/32": "207242", - "2001:400::/43": "293", - "2001:648:2001::/44": "5408", - "2409:8d5a::/32": "56040", - "240a:a29a::/32": "143316", - "2a04:1a00::/29": "199318", - "2a02:26f7:cb85::/46": "20940", - "2001:67c:44::/48": "8423", - "2001:16a2:38::/47": "39386", - "2001:1838:5100::/34": "23352", - "2402:800:7b20::/41": "7552", - "2406:e400:2::/32": "7642", - "2804:400::/32": "262409", - "2804:7668::/32": "271110", - "2404:fd00:facf::/37": "58552", - "240a:ad13::/32": "145997", - "240a:aee5::/32": "146463", - "240a:afe8::/32": "146722", - "2607:fea0::/46": "16578", - "2806:230:3010::/48": "265594", - "2a00:fe8::/32": "16178", - "2604:5c40::/32": "14078", - "2a03:6600::/32": "44124", - "2a0d:2080::/29": "204646", - "2a01:b0e0::/32": "61984", - "2001:559:870e::/48": "7016", - "2001:579:403f::/41": "22773", - "2001:e68:2001:1::/64": "65530", - "2401:8e00:2800::/35": "9260", - "2402:800:f3e0::/37": "7552", - "2600:1f01:4880::/47": "16509", - "2602:ff82::/48": "3064", - "2001:559:c175::/48": "33491", - "2001:830::/32": "61157", - "2406:8800:902b::/43": "17465", - "2a02:2e02:3090::/42": "12479", - "2401:ff80:1a81::/46": "133954", - "2404:f900:41::/43": "58482", - "2406:c800:f001::/36": "38016", - "2001:1a11:e8::/45": "42298", - "240a:a23c::/32": "143222", - "2607:f7a8:a0d::/35": "16657", - "2804:5718::/32": "268043", - "2804:585c::/32": "268124", - "2a02:26f7:e949::/42": "20940", - "2a11:5100::/29": "50304", - "2001:559:80be::/48": "7922", - "2001:978:6402::/38": "174", - "2600:6000:fd40::/48": "11351", - "2804:42b8::/32": "267521", - "2804:7978::/32": "271307", - "2402:9d80:804::/47": "131429", - "240a:aee4::/32": "146462", - "2604:880:1::/46": "29802", - "2605:a000:40e::/48": "11955", - "2607:faf8::/32": "7029", - "2804:6efc::/32": "270631", - "2001:559:594::/48": "7922", - "240a:a12f::/32": "142953", - "2804:2084:2000::/32": "264496", - "2a02:53e0::/32": "44092", - "2a0e:8f02:f00e::/48": "212359", - "2a0f:5ac0::/32": "60472", - "2405:1fc0:720::/48": "139188", - "2405:b900:5570::/48": "55701", - "2406:840:c20::/48": "139317", - "2804:16a0::/32": "61908", - "2806:217:402::/38": "28394", - "2a0f:b4c3::/32": "199669", - "2607:fdb8:21::/48": "33693", - "2607:ffb0:600f::/35": "6327", - "2803:dfa0::/32": "267797", - "2804:41a0::/34": "267446", - "2a04:4e40:6210::/44": "54113", - "2a11:680::/29": "208861", - "2402:3b00::/32": "38648", - "2a02:26f7:e349::/42": "20940", - "2409:805e:2100::/36": "9808", - "240e:473:8720::/41": "140486", - "240e:473:af20::/41": "140486", - "2804:59a0:c000::/36": "268714", - "2a01:5b40:ac3::/48": "208045", - "2a10:6800::/29": "398559", - "2600:9000:118e::/43": "16509", - "2804:e30:3c00::/38": "11338", - "2a00:1b60::/32": "12552", - "2a0b:7540::/29": "21140", - "2001:559:8738::/48": "33287", - "2600:80a:422::/48": "55228", - "2a01:8d80::/48": "35157", - "2a0b:2cc0::/48": "203929", - "2407:9f00::/32": "58834", - "240e:473:9050::/39": "4134", - "2605:7c0:1000::/48": "19382", - "2a01:7f80::/32": "15975", - "2a0e:46c6:700::/40": "34924", - "2a0e:b105:700::/46": "20473", - "2001:470:e5::/48": "6939", - "240e:3bb:6400::/35": "140312", - "2804:74::/32": "28338", - "2804:507c::/32": "268392", - "2a02:26f7:e005::/46": "20940", - "2a03:aac0::/32": "48473", - "2a03:e600:101::/32": "1764", - "2001:559:7ae::/48": "7016", - "240e:938:f910::/44": "139462", - "2605:3380:4802::/48": "14532", - "2a02:26f7:f508::/48": "36183", - "2001:43f8:1500::/44": "328560", - "240a:ae47::/32": "146305", - "2605:a404:23c::/40": "33363", - "2800:160:1231::/44": "14259", - "2804:52f4:a90::/41": "268552", - "2a02:26f0:3301::/37": "20940", - "2a0b:f880::/29": "200548", - "2804:548c::/32": "268657", - "2a0e:97c3:bf::/41": "20473", - "2001:559:8584::/47": "33651", - "2406:840:d002::/48": "208266", - "2605:a900:1002::/45": "46887", - "2a04:2b00:14dd::/48": "212390", - "2a05:1500::/40": "200837", - "2a07:3140::/29": "48408", - "2001:559:46c::/47": "7922", - "2606:9e00::/32": "16413", - "2804:1674:c::/46": "53231", - "2a09:d2c2:1::/48": "213064", - "2600:1417:68::/47": "20940", - "2804:1ed8::/32": "264449", - "2804:213c::/32": "264544", - "2806:366::/32": "11172", - "2a02:ed04:110::/34": "50304", - "2804:4024:2030::/35": "265937", - "2001:b18:a::/47": "47787", - "2001:df4:d500::/48": "135905", - "2001:4878:321::/45": "12222", - "2401:d800:5910::/42": "7552", - "2401:d800:b2d0::/42": "7552", - "2604:5240::/34": "54614", - "2620:11a:40b0::/48": "7014", - "2001:918:ff77::/40": "3303", - "2405:1c0:6881::/46": "135062", - "240a:a345::/32": "143487", - "2804:2f8c::/32": "264898", - "2a09:fcc0::/32": "205718", - "2a0b:6900:185d::/48": "206873", - "2001:1978:1000::/39": "13768", - "2401:e980::/32": "64006", - "2403:2e80::/32": "23858", - "240a:ace2::/32": "145948", - "2a02:26f7:d24d::/46": "20940", - "2a07:3ac0::/29": "58243", - "240a:a8a8::/32": "144866", - "2602:fed2:7121::/46": "53356", - "2a00:8a00:4f02::/35": "8983", - "2a02:26f7:f101::/46": "20940", - "2a02:ac80:701::/36": "25145", - "2001:559:5f1::/48": "33659", - "2001:67c:2568::/48": "16375", - "2404:98c0:12::/42": "135259", - "2600:1417:20::/48": "9498", - "2a05:3280::/37": "50999", - "2804:c90::/47": "28198", - "2001:559:29::/48": "33660", - "2001:579:2439::/46": "22773", - "2001:67c:2bd4::/48": "1257", - "2001:1248:a4b0::/46": "11172", - "2600:1406:2000:300::/38": "20940", - "2605:a000::/37": "10796", - "2606:73c0::/32": "15169", - "2405:1c0:6481::/46": "135062", - "240e:67b:e600::/29": "4134", - "2a02:26f7:eb81::/46": "20940", - "2402:800:3363::/43": "7552", - "2408:8456:1640::/39": "17816", - "2408:8956:1400::/40": "17622", - "2607:f058:2200::/32": "22302", - "2801:10:7000::/48": "19429", - "2a0c:5241::/32": "59504", - "2a02:28:2::/45": "8359", - "2a02:2e02:8850::/40": "12479", - "2001:c20:4849::/48": "9255", - "2409:8087:5800::/37": "9808", - "2600:1008:d020::/36": "22394", - "2600:1480:5801::/44": "21342", - "2600:6c38:730::/46": "20115", - "2620:7b:b000::/48": "3713", - "2804:570c::/32": "268040", - "2001:253:107::/48": "142073", - "2001:4878:8225::/48": "12222", - "240e:108:4a::/48": "4811", - "2600:1480:d000::/48": "21342", - "2a02:250:2::/48": "51013", - "2401:5400:5001::/32": "4434", - "2620:129:f000::/48": "393462", - "2a0b:4d07:1::/46": "44239", - "2600:1900:41c0::/44": "396982", - "2604:49c0::/32": "395400", - "2604:9f00::/36": "27364", - "2804:5bc8::/32": "268869", - "2402:c480::/34": "63916", - "2a01:871::/29": "3209", - "2a03:85c1:925d::/29": "20561", - "2001:67c:2d40::/48": "50581", - "2401:d800:dd80::/42": "7552", - "2407:dc00:104::/38": "9714", - "2600:4800:80::/28": "6128", - "2604:300::/32": "21947", - "2605:46c0::/32": "395658", - "2a01:c50f:c700::/36": "12479", - "2001:559:819e::/48": "22909", - "2401:1040:400::/32": "138482", - "2408:8459:6a10::/42": "17623", - "2600:1404:6401::/36": "20940", - "2804:2ecc::/32": "265367", - "2a0b:99c0::/29": "207187", - "2a02:26f0:f9::/48": "34164", - "2403:ad80:20::/48": "36351", - "2404:e801:100c::/46": "55430", - "2408:8957:3c00::/40": "17622", - "2606:4700:57::/44": "13335", - "2607:fcf0:9100::/33": "13445", - "2620:153:81::/36": "6498", - "2804:4bbc::/32": "28333", - "2a0a:d880::/44": "207306", - "2001:67c:2074::/48": "57763", - "2001:df1:c700::/47": "136786", - "2001:4500::/35": "18183", - "2402:3a80:1728::/48": "38266", - "2610:28:f020::/48": "19718", - "2001:428:2001:205::/64": "20940", - "2001:480:120::/48": "3381", - "2001:b30:4213::/32": "2614", - "2001:1248:5641::/44": "11172", - "2402:5fc0::/32": "137419", - "2a01:668::/32": "13105", - "2a04:4e40:ec20::/43": "54113", - "2406:7600::/32": "38084", - "2620:10a:9054::/48": "2685", - "2620:12d:e010::/48": "29909", - "2806:2f0:3221::/41": "17072", - "2a00:ccc0::/31": "57433", - "2400:8280::/32": "58511", - "2a01:8840:f1::/48": "207266", - "2001:559:c19a::/48": "13367", - "2400:9380:80c0::/44": "136167", - "2804:11b4::/32": "263433", - "2804:6604::/32": "269528", - "2a00:9801:e001::/48": "199072", - "2a10:e780::/40": "212027", - "2001:559:82f6::/48": "33667", - "2406:3003:3000::/42": "55430", - "240a:a3e7::/32": "143649", - "2602:fd55:1::/48": "45250", - "2602:fed2:7114::/48": "23470", - "2804:80c0::/32": "271771", - "2a02:26f7:ecc1::/46": "20940", - "2001:400:211:61::/36": "293", - "2001:559:c26a::/48": "7922", - "240a:a20f::/32": "143177", - "2a07:6cc1::/32": "61098", - "2400:cb00:a430::/45": "13335", - "2a05:480::/29": "200000", - "2402:b740:8000::/47": "140867", - "240e:5e:4000::/48": "134773", - "240e:44d:7280::/41": "4134", - "2001:4878:8356::/48": "12222", - "2806:230:4027::/48": "11888", - "2406:54c0::/32": "140479", - "240a:a1da::/32": "143124", - "240e:16:b000::/37": "38283", - "2600:c0b::/46": "14745", - "240a:a89e::/32": "144856", - "2a01:488:bb0b::/48": "26496", - "2a02:ff0:1e00::/40": "12735", - "2001:c38:90aa::/45": "135566", - "2001:4878:8158::/48": "12222", - "2620:4:4000::/48": "53819", - "2800:68:53::/36": "61468", - "2c0f:f020:10::/48": "327907", - "2001:978:1f01::/34": "174", - "2001:40b0::/32": "13041", - "240a:a1fd::/32": "143159", - "240e:473:a00::/41": "140485", - "2607:fdf8:300::/40": "20284", - "2001:559:7b4::/48": "33491", - "2402:8100:30e0::/44": "55644", - "2804:3370::/32": "265396", - "2a0f:104::/30": "3356", - "2c0f:f8b8::/32": "37356", - "2600:6c40::/32": "20115", - "2a01:3b8::/33": "33885", - "2001:67c:1490::/48": "3301", - "2001:ae0::/32": "8925", - "2402:8780::/32": "63859", - "2606:6800:1800::/40": "394899", - "2804:e0:4::/37": "28330", - "2a03:2887:ff2c::/47": "33490", - "2001:308::/32": "7668", - "2402:e7c0:440::/36": "59078", - "2602:feb6::/36": "7001", - "2a06:1740::/29": "200652", - "2401:4900:ee0::/43": "134426", - "2600:6c38:b13::/44": "20115", - "2605:8280::/32": "36069", - "2804:779c::/32": "271189", - "2a01:53c0:ffe0::/45": "54994", - "2001:1938:4300::/40": "33438", - "2409:805c:4900::/35": "9808", - "2409:8087:2000::/37": "56046", - "240a:a9d2::/32": "145164", - "2803:6604:e600::/35": "28075", - "2804:595c::/32": "268185", - "2a02:27f0::/32": "4455", - "240a:aa8f::/32": "145353", - "2a0e:8f02:1000::/42": "204446", - "2a0e:b103:9ab::/45": "20473", - "2001:559:82a3::/48": "33651", - "2001:4402::/31": "9500", - "2607:cd80:b000::/33": "6528", - "2620:149:a29::/43": "714", - "2804:6e44:1300::/32": "270585", - "2a0e:cd00:600::/29": "23031", - "2606:2e80::/32": "63125", - "2800:bf0:100::/46": "52257", - "2001:559:8347::/48": "7015", - "2408:8456:ed40::/40": "17816", - "2600:1a0e:2000::/48": "10307", - "2a01:cf00:50::/46": "3215", - "2a02:2a08::/32": "39923", - "2a0a:1240::/35": "12440", - "2001:559:c0c5::/48": "33491", - "2a06:c480::/29": "203698", - "2001:559:81a3::/48": "33657", - "2001:559:81e5::/48": "7922", - "2001:57a:9208::/34": "22773", - "2403:9e00::/32": "9443", - "240e:3ba:4c00::/35": "136200", - "2600:1408:9001::/38": "20940", - "2607:f7a8:163e::/36": "16657", - "2001:500:122::/47": "396574", - "2001:559:9::/48": "33287", - "2404:8d02:1041::/46": "10089", - "2406:e001:6800::/35": "23655", - "2a0c:6080::/29": "200000", - "2001:3c8:2a07::/48": "135528", - "2001:67c:20cc::/48": "16243", - "2402:8100:2442::/44": "55644", - "2605:1640::/43": "19681", - "2620:132:f523::/38": "394977", - "2806:2f0:24a3::/48": "17072", - "2a0e:b107:1571::/48": "142031", - "2001:559:801f::/48": "33659", - "2001:67c:289c::/48": "198093", - "2607:f7a0:5::/46": "46562", - "2804:6660:d100::/40": "269554", - "2a07:a343:ce30::/44": "9009", - "2a0a:2306:f000::/45": "20853", - "2001:678:804::/48": "12897", - "2607:fd48:180:2::/61": "13536", - "2a0b:f200::/32": "207031", - "2a0f:b506::/32": "206313", - "2620:0:2902::/48": "22843", - "2803:a410::/32": "64114", - "2600:6c04:be::/30": "20115", - "2804:7fe8::/32": "271717", - "2a04:9a04::/32": "29311", - "2a02:cb80:4250::/47": "43766", - "2405:58c0:3a00::/40": "133101", - "2408:84f3:4210::/42": "134543", - "240e:950:5c00::/31": "4134", - "2600:1015:b0c2::/39": "6167", - "2620:149:a09::/46": "6185", - "2803:6900:533::/45": "52423", - "2a02:23c8:ff00::/40": "24592", - "2a07:3500:11e0::/48": "39686", - "2001:559:c24d::/46": "7015", - "2001:df7:3c00::/48": "38767", - "2402:800:951d::/41": "7552", - "2607:fdf0:5e13::/44": "8008", - "2a03:2880:f1fe::/47": "32934", - "2a0a:9c40::/29": "43809", - "2800:110:1018::/48": "52442", - "2804:7bfc::/32": "271468", - "2606:5000:3000::/39": "209", - "2001:4490:4e78::/46": "9829", - "2406:840:880::/48": "139317", - "2408:8456:cf40::/35": "17816", - "240a:afde::/32": "146712", - "2a01:9f20::/37": "201746", - "2605:5000::/32": "20283", - "2607:1c00::/32": "40395", - "2001:559:75f::/48": "7922", - "2602:ffb0:11::/48": "40676", - "2607:ffd8::/38": "33333", - "2620:133::/40": "19692", - "2620:171:14::/46": "715", - "2a0d:940::/32": "39191", - "240e:966:8800::/38": "133775", - "2a02:26f0:af00::/48": "34164", - "2a0e:40c0:4::/48": "50979", - "2001:559:551::/46": "33659", - "2403:3800:9::/37": "4007", - "240a:a232::/32": "143212", - "2607:f408:1::/48": "19871", - "2a01:6780:8::/48": "12586", - "2400:aa00:9300::/33": "9873", - "2a0f:9400:7001::/46": "211144", - "2408:8459:a810::/42": "17623", - "2803:e140::/32": "264631", - "2a0d:c740:1a::/48": "49367", - "240e:473:2650::/39": "4134", - "2604:1440::/32": "394985", - "2001:559:7d4::/48": "7725", - "2001:559:837d::/48": "33287", - "2001:67c:18d0::/48": "60216", - "2408:8957:3d00::/40": "17816", - "240e:1a:110::/44": "134769", - "2a05:2d00::/32": "62217", - "2001:67c:2388::/48": "12843", - "2604:d600:1543::/44": "32098", - "2800:370:c000::/46": "28006", - "2804:3868::/38": "266475", - "2a00:c540::/32": "57506", - "2a02:26f7:c890::/48": "36183", - "2408:8459:d040::/40": "17623", - "2408:8956:b600::/40": "17622", - "2409:8924:a900::/38": "56046", - "2804:4c68::/32": "267369", - "2804:5820::/32": "268108", - "2804:6abc::/32": "270356", - "2804:7080::/32": "270730", - "2a0a:2300::/31": "212754", - "2001:67c:2a4c::/48": "20712", - "240a:ae5f::/32": "146329", - "2602:80a:1000::/46": "11378", - "2605:e200::/32": "18451", - "2804:615c::/32": "269230", - "2a01:4ba0:4::/29": "199987", - "2a02:2ac8::/32": "702", - "2001:550:6502::/38": "174", - "240a:abaa::/32": "145636", - "2a0c:b641:80::/47": "209861", - "2001:678:580::/48": "50873", - "2001:1250:ffc0::/44": "22894", - "240a:a884::/32": "144830", - "240a:a978::/32": "145074", - "2a06:1cc0::/32": "198964", - "2a0c:1d80::/29": "31480", - "2001:678:764::/48": "202039", - "240a:a843::/32": "144765", - "2800:160:21de::/42": "14259", - "2803:ab00:93::/32": "52471", - "2804:7d5c::/32": "271556", - "2001:4050::/32": "6830", - "2402:e940:f00::/47": "132088", - "2804:c48:ff01::/45": "52687", - "2804:1a6c::/32": "61858", - "2001:503:e239::/48": "397229", - "2400:cb00:59::/48": "13335", - "2404:c2c0::/40": "135629", - "2407:7380::/32": "134970", - "2620:134:b003::/48": "14593", - "2804:45e4:7410::/36": "262567", - "2a0e:b103:e00::/40": "20473", - "2001:678:3d4::/48": "201723", - "2804:76f4::/32": "271145", - "2a02:4340::/32": "51551", - "2001:559:769::/48": "33491", - "2402:800:fb40::/42": "7552", - "2408:8957:9500::/40": "17816", - "240a:a723::/32": "144477", - "240e:3bb:1800::/34": "4134", - "2a0d:f3c0::/29": "34907", - "2c0f:eec0::/32": "25163", - "2406:2000:ef6a::/40": "10310", - "2407:4800::/33": "139759", - "2604:d600:1c17::/39": "32098", - "2804:7b70::/32": "271432", - "2a01:c50f:d0c0::/39": "12479", - "2a04:e00:1e::/47": "54103", - "2a10:4880::/29": "204802", - "2001:559:85a5::/46": "33659", - "240a:a934::/32": "145006", - "2a00:a300::/32": "47764", - "2001:67c:18f4::/48": "3246", - "2409:8073:2a00::/29": "9808", - "2620:aa:4000::/48": "26716", - "2a01:6c8::/36": "29006", - "2a05:8c40::/29": "201172", - "2001:15a8::/32": "29449", - "2406:8800:9041::/46": "17465", - "2a01:4120::/32": "62363", - "2001:468:900::/43": "3754", - "2001:559:80f5::/48": "33657", - "2001:67c:59c::/48": "59448", - "2001:67c:233c::/48": "47438", - "2604:82c0::/47": "62917", - "2803:4fe0::/32": "271775", - "2a03:7f80::/32": "42010", - "2001:559:278::/48": "7015", - "2409:8051:800::/47": "56047", - "240a:af6d::/32": "146599", - "2a00:da80::/32": "43614", - "2a04:e00:100::/47": "48806", - "2a0e:97c0:170::/48": "58057", - "2a0e:b105:548::/46": "20473", - "2804:3418::/47": "265435", - "2804:3a9c::/32": "266099", - "2a01:7c0::/32": "8359", - "2402:800:9eee::/43": "7552", - "240e:44d:4100::/41": "140345", - "2602:fed2:7034::/48": "62997", - "2a00:c340::/32": "57951", - "2001:d18::/32": "9821", - "2001:1810:40::/35": "14116", - "240a:aeb6::/32": "146416", - "2804:7da0::/32": "271573", - "2a0c:b641:410::/44": "31396", - "2a10:86c0::/29": "211850", - "2001:559:5fa::/48": "7725", - "2403:71c0:8000::/48": "43959", - "2600:1406:b401::/36": "20940", - "2606:ae00:a480::/42": "7287", - "2a05:9a80::/29": "29691", - "2a07:1a80::/48": "48767", - "2001:559:373::/48": "7922", - "2001:559:8574::/47": "7015", - "2402:800:7f80::/42": "7552", - "2804:1c14::/32": "61636", - "2a01:4f0:4018::/32": "28717", - "2a02:2e02:8d70::/40": "12479", - "2a0c:6c40:c82f::/48": "20705", - "2401:ff80:1109::/46": "133954", - "240a:ad0d::/32": "145991", - "240e:44d:5d00::/41": "140345", - "2804:1f24:101::/48": "30383", - "2001:559:8414::/48": "7922", - "2408:8956:7700::/36": "17816", - "2600:140b:c001::/36": "20940", - "2602:ffe2:ffe::/47": "53334", - "2a01:270::/32": "41075", - "2001:400:6441:61::/38": "293", - "2001:559:8400::/48": "33287", - "2620:1e0:300::/48": "10801", - "2804:415c::/32": "267428", - "2804:50fc::/32": "268423", - "2a02:26f0:c7::/44": "20940", - "2001:4878:c321::/45": "12222", - "2400:cb00:336::/44": "13335", - "2600:100d:fe10::/40": "22394", - "2804:5774::/32": "268066", - "2a09:55c0::/32": "209451", - "2604:1300:7c00::/32": "3833", - "2605:a401:8665::/40": "33363", - "2620:0:1601::/48": "33052", - "2403:300:1500::/42": "6185", - "2406:1dc0::/32": "137871", - "2604:65c0::/39": "14585", - "2403:9800:c100::/40": "4771", - "2600:5c00::/43": "10838", - "240a:ae04::/32": "146238", - "2806:310:1f::/42": "16960", - "2a02:26f0:84::/48": "8966", - "2001:559:5a::/48": "7725", - "240a:a890::/32": "144842", - "2a00:c080::/32": "5524", - "2a04:94c0::/30": "202746", - "2001:253:105::/48": "142071", - "2610:b0:401e::/42": "3573", - "2804:138b:b100::/33": "53037", - "2a00:ea8::/32": "9211", - "2a0e:b107:df1::/48": "141237", - "2001:559:45::/48": "33659", - "2402:800:3971::/44": "7552", - "2405:1c0:6a41::/46": "135062", - "2a04:6580::/29": "6831", - "2a09:bd00:ffc9::/48": "21416", - "2001:7a8::/37": "13193", - "2400:a980:1900::/37": "133111", - "2400:c700:181::/45": "55644", - "2408:8456:e440::/38": "17816", - "2600:1406:400::/48": "35994", - "2001:559:c23f::/48": "33662", - "2620:11b:4002::/48": "19210", - "2804:7254::/32": "270847", - "2a02:b48:8106::/43": "39572", - "2a10:6740::/32": "60672", - "2a0e:b107:5a1::/46": "203943", - "2001:559:8255::/48": "7922", - "2404:e100:3004::/48": "133840", - "240a:a53e::/32": "143992", - "240a:afba::/32": "146676", - "2806:250:100::/40": "28554", - "2a02:2a38::/42": "58073", - "2a03:34a0::/32": "59817", - "2001:559:c1a0::/48": "33651", - "2406:f400:20::/44": "38001", - "2800:860:a::/48": "262206", - "2804:66b4::/32": "269577", - "2a01:9700:1230::/46": "8376", - "2a03:5180::/43": "3223", - "2001:df4:1700::/48": "137084", - "2406:8dc0:2251::/48": "212057", - "2408:870c:4000::/44": "140979", - "2600:9800::/24": "4193", - "2a00:1358::/35": "6866", - "2a02:26f7:fb85::/46": "20940", - "2604:a640::/32": "54980", - "2a0d:4ac0::/46": "208006", - "2a0e:46c4:10b::/45": "142632", - "2001:678:d5c::/48": "21195", - "2001:df0:41a::/48": "9509", - "2405:8180:d00::/38": "135478", - "2a0c:a9c7:4::/48": "64409", - "2001:559:2ec::/48": "7016", - "2604:6600:2001::/48": "201106", - "2604:e180:86::/35": "55002", - "2607:f018:fffe::/48": "177", - "2800:300:89a0::/41": "27986", - "2001:df6:b800::/48": "59349", - "2001:1b28:406::/32": "8728", - "240a:a266::/32": "143264", - "2600:8807:93ce::/42": "22773", - "2804:337c::/32": "265399", - "2a06:8bc0::/29": "57103", - "2001:559:1d1::/46": "7922", - "2403:c880::/31": "7363", - "2404:bf40:e002::/48": "139084", - "2600:1480:8100::/37": "20940", - "2602:fd20::/36": "46980", - "2a03:96e0:8000::/33": "2119", - "2402:79c0:1154::/46": "26415", - "240a:a691::/32": "144331", - "240a:a8bd::/32": "144887", - "2001:559:770::/48": "22909", - "2409:804c:1100::/36": "9808", - "2607:fc50:4::/34": "36236", - "2804:4328::/32": "267552", - "2604:4540::/32": "88", - "2604:e840::/44": "396965", - "2a07:291b::/32": "6830", - "2a0c:e707:4000::/32": "39533", - "2001:559:4d3::/48": "33657", - "2001:49f0:d010::/44": "174", - "2406:f380:2::/32": "398109", - "2620:1ec:c12::/38": "8075", - "2a0b:6901::/48": "206873", - "2401:4900:3b70::/44": "45609", - "2a03:3b40::/38": "24971", - "2a05:1240::/29": "201809", - "240e:438:3a40::/37": "4134", - "2606:1980:16::/44": "54994", - "2a02:26f7:e6c0::/48": "36183", - "240a:a4d1::/32": "143883", - "2001:df2:6080::/48": "139875", - "2401:1d40:101::/36": "59019", - "240a:a395::/32": "143567", - "2600:370f:37a0::/47": "32261", - "2620:131:300b::/45": "19747", - "2001:408:20::/32": "14793", - "2804:3344::/32": "265385", - "2001:559:c171::/48": "33660", - "2001:43b8::/32": "30844", - "2401:d800:8a0::/41": "7552", - "2604:af80:1048::/37": "18859", - "2a00:ab00::/33": "49505", - "2a01:578::/43": "16509", - "2001:678:d90::/48": "213092", - "2804:7a68::/32": "271369", - "2a07:e0c0::/30": "213206", - "2001:678:aac::/48": "208658", - "2001:df0:21e::/48": "55396", - "2401:b780:5012::/32": "45410", - "2804:4348::/32": "267560", - "2a0c:3040::/29": "13054", - "2001:559:547::/48": "7725", - "2600:1408:f000::/48": "35994", - "2603:c026:8000::/35": "31898", - "2606:4700:80f0::/44": "13335", - "2001:559:8109::/48": "33651", - "2001:4868:a00::/33": "701", - "2607:ffb0:5001::/46": "6327", - "2a02:2e02:cf0::/39": "12479", - "240e:67b:c600::/34": "4134", - "2620:11d:5000::/46": "393732", - "2804:8170::/32": "272454", - "2a05:1083:fe80::/42": "209870", - "2001:fb1:300a::/32": "17552", - "2403:ac40::/32": "131149", - "2804:4200::/32": "267471", - "2408:8459:7c50::/38": "17816", - "240a:a94e::/32": "145032", - "2602:fd23::/48": "33185", - "2606:7480::/32": "394232", - "2804:1c18::/32": "61637", - "2804:21f4::/32": "52568", - "2a02:128:15::/48": "62008", - "240e:44d:3400::/41": "140345", - "2804:179c:11::/34": "263159", - "2a04:4e47::/46": "54113", - "2a03:1b00::/32": "47478", - "2001:df6:f400::/48": "132203", - "2600:380:9300::/40": "7018", - "2600:1004:b130::/44": "22394", - "2804:dd4:8100::/33": "53024", - "2a00:ef0::/32": "6834", - "2a01:50a0::/32": "201764", - "2a02:26f7:d001::/46": "20940", - "2400:cb00:a2f0::/46": "13335", - "2806:230:2011::/48": "11888", - "2a01:7120::/32": "62206", - "2a03:2880:f055::/44": "32934", - "240a:a78e::/32": "144584", - "240e:3b8:c000::/37": "140315", - "2607:b800::/32": "1970", - "2800:160:1375::/46": "14259", - "2001:67c:27a4::/48": "3301", - "2402:c400::/32": "18097", - "2801:80:1200::/48": "264313", - "2001:1248:99ef::/43": "11172", - "2408:8256:3796::/44": "17623", - "240a:a177::/32": "143025", - "2607:f160:ff00::/40": "6167", - "2a0a:1141:4000::/34": "206702", - "2a02:27ba:4000::/34": "49278", - "2001:418:1456:1900::/56": "16625", - "2001:468:cf0::/44": "40220", - "2001:fb0:1071::/48": "133761", - "2403:2c00:f020::/36": "4058", - "2600:1401:7::/48": "35994", - "2803:ea80::/36": "28048", - "2804:5284:d000::/48": "268523", - "2a0c:f587:fffd::/48": "205381", - "2402:800:95a9::/43": "7552", - "240e:679:c400::/39": "140330", - "2804:2440::/32": "52686", - "2806:1080:102::/32": "8151", - "240e:5a:4840::/40": "140301", - "2804:258::/40": "28132", - "2804:4d48:4040::/32": "53115", - "2a02:48::/32": "12969", - "2a02:26f7:c0c8::/48": "36183", - "2001:1a68:2c::/48": "24723", - "2402:800:96a9::/43": "7552", - "2607:6980:e710::/44": "9009", - "2a0c:2580::/30": "211186", - "2001:559:8687::/48": "33657", - "2401:6bff::/40": "9466", - "2408:8459:3220::/44": "17816", - "2a02:b50:4014::/34": "30282", - "2a0f:5946::/31": "209372", - "2001:1248:a006::/44": "11172", - "2402:7800:ffe1::/43": "4826", - "2408:840c::/40": "17621", - "2600:1007:a010::/40": "22394", - "2804:6ef0::/32": "270628", - "2a02:17a5::/32": "204405", - "2001:559:c0a9::/48": "7922", - "2401:4900:2100::/45": "45609", - "2408:8456:1b00::/42": "17622", - "240a:a191::/32": "143051", - "2a01:a520::/32": "62002", - "2a03:2887:ff31::/46": "33667", - "2001:978:1c01::/46": "174", - "2409:8053:2000::/47": "56047", - "240a:ac27::/32": "145761", - "2600:8800::/30": "22773", - "2604:14c0::/32": "22121", - "2a0c:eec0::/29": "50819", - "2001:550:a07::/44": "174", - "2001:559:c0a1::/48": "33652", - "2001:590:3c02::/32": "3257", - "2605:3380:48fe::/47": "12025", - "2a0b:b87:ffd2::/48": "213186", - "2600:9000:225e::/48": "16509", - "2620:b0::/48": "16796", - "2a11:e100::/32": "212271", - "2408:8456:c440::/39": "17816", - "2a02:2e02:8950::/40": "12479", - "2a04:2300::/29": "197623", - "2001:559:415::/46": "33652", - "240a:a7f3::/32": "144685", - "240a:aa5b::/32": "145301", - "2806:2f0:2044::/43": "22884", - "2a02:26f7:bb88::/48": "36183", - "2a0c:c0c0::/29": "202438", - "2c0e:2210::/21": "5713", - "2402:68c0:c000::/36": "137432", - "240e:473:5150::/40": "4134", - "2604:f180::/32": "30526", - "2804:4d10::/32": "267410", - "2a0e:ddc0::/32": "208861", - "2001:678:5e4::/48": "61961", - "2600:1f01:4810::/47": "16509", - "2606:4700:81c0::/44": "13335", - "2800:190:1::/48": "19037", - "2a04:2dc0:e::/47": "39216", - "2a0c:3500::/48": "42989", - "2001:470:ce::/48": "396097", - "2405:a640::/32": "131668", - "2408:8347:1200::/28": "4837", - "2603:a000::/24": "395662", - "2605:ab00::/32": "32277", - "2800:98:1809::/45": "14754", - "2a02:a00:e::/47": "15987", - "2001:67c:324::/48": "30950", - "240a:ab95::/32": "145615", - "240e:108:4d::/48": "137687", - "240e:978:100::/37": "4134", - "2804:259c::/32": "52772", - "2804:479c::/32": "267065", - "2001:559:8014::/48": "33491", - "2001:579:d03c::/40": "22773", - "2400:a980:3900::/37": "133111", - "240a:acb2::/32": "145900", - "2a02:2968::/29": "48635", - "2001:67c:1404::/46": "29670", - "240a:aa52::/32": "145292", - "240e:3bb:1200::/39": "4134", - "2607:f738:200::/41": "17184", - "2803:48e0::/47": "52468", - "2a02:2698:9000::/38": "41661", - "2620:131:3002::/45": "19747", - "2001:1248:9a81::/44": "11172", - "2409:8a7b::/29": "9808", - "240a:a4a5::/32": "143839", - "2a01:b740:a03::/48": "714", - "2001:7f8:69::/48": "201925", - "2407:b380::/32": "45062", - "240a:a87a::/32": "144820", - "2600:1409:a000::/48": "35994", - "2a04:280::/29": "28917", - "2a04:ff07::/32": "202297", - "2001:559:84aa::/48": "33659", - "2402:800:3c8d::/41": "7552", - "2804:5720::/32": "268046", - "2a09:bac0:191::/45": "13335", - "2401:b800:f001::/36": "38248", - "240a:aeca::/32": "146436", - "2607:fc48:bc3a::/47": "40009", - "2a02:26f7:dc04::/48": "36183", - "2a03:af00::/32": "31614", - "2402:c480:3001::/33": "63916", - "2408:8256:3d6a::/48": "17623", - "2408:8656:30fb::/48": "17816", - "2409:408d:9000::/25": "55836", - "2a00:1358:c100::/48": "205972", - "2a00:1fa2:bb00::/33": "28884", - "2a02:26f7:e741::/46": "20940", - "2400:cb00:a840::/46": "13335", - "2401:ff80:1381::/46": "133954", - "240e:473:1950::/40": "4134", - "2803:ba00:600::/36": "52286", - "2804:4f8:6001::/39": "28263", - "2a00:d260::/29": "15600", - "2a00:fd80:aaab::/33": "38719", - "2001:559:861a::/48": "33659", - "2001:678:cb4::/48": "56396", - "2402:1c00:c01::/45": "23838", - "2404:ea80:300::/36": "135373", - "2409:8062:3100::/36": "9808", - "2409:8914:7e00::/39": "56044", - "2620:f:1::/48": "3756", - "2403:9800:b056::/33": "4648", - "2600:9000:11c1::/46": "16509", - "2620:1a:a000::/48": "62698", - "2620:124:3000::/40": "46900", - "2800:bf0:a801::/46": "52257", - "2804:14c:8500::/40": "28573", - "2a04:4e42:2::/43": "54113", - "2001:559:c2b8::/48": "33659", - "2001:579:e138::/40": "22773", - "2400:9380:a01f::/48": "23764", - "240a:a2f1::/32": "143403", - "240e:624::/30": "4134", - "2801:1e:d000::/48": "265652", - "2804:7dc4::/32": "271581", - "2a02:26f7:b5c0::/48": "36183", - "2a04:f580:8210::/47": "4134", - "2a02:2048::/32": "1342", - "2001:418:1401:7e::/56": "2914", - "2001:67c:21a8::/48": "51421", - "2001:ce8::/32": "17511", - "2001:43f8:1f3::/48": "37474", - "2403:1f00::/32": "10010", - "2604:6080::/32": "13739", - "2a00:b340:10::/48": "196745", - "2408:8256:3760::/44": "17623", - "2409:8020:3028::/43": "56046", - "2600:6ce0::/29": "16787", - "2620:11e:f000::/48": "6130", - "2001:559:81fc::/48": "7016", - "2001:559:c375::/48": "33657", - "2001:5b0:300::/40": "6621", - "2001:12f0:740::/40": "1916", - "240a:a0a5::/32": "142815", - "2607:f110:1a::/42": "21889", - "2803:6700:10::/48": "263210", - "2806:230:100c::/48": "265594", - "2a0c:8c80::/32": "201808", - "2403:cfc0:100e::/47": "135134", - "2405:200:300::/36": "55836", - "2409:8c34:4500::/32": "9808", - "2804:4ed4::/32": "268285", - "2a03:9060::/32": "28768", - "2401:4900:53d0::/42": "45609", - "2402:8100:3080::/42": "45271", - "2408:8256:3086::/48": "17816", - "2804:4f8:a00c::/40": "28263", - "2a02:2698:2c::/38": "12768", - "2a02:26f7:de49::/42": "20940", - "2402:800:5c71::/40": "7552", - "2403:0:208::/37": "4755", - "2806:106e:12::/45": "8151", - "2001:559:c187::/48": "7922", - "2402:800:6400::/36": "7552", - "2600:1003:b870::/40": "22394", - "2607:fb10:7152::/42": "2906", - "2a01:7d20:c00::/40": "203645", - "2a0e:b107:ec0::/44": "212196", - "2620:121::/45": "55219", - "2a00:5881:1000::/40": "203432", - "2a00:a500::/32": "49457", - "2a01:5b0:6::/48": "8561", - "2a0a:aa42::/32": "205668", - "240e:473:1a50::/39": "4134", - "2804:2e84:10::/40": "265350", - "2804:41a8::/32": "267448", - "2001:559:80c1::/48": "7015", - "2402:800:53d3::/44": "7552", - "240a:ac96::/32": "145872", - "2602:fdd7::/47": "2635", - "2a04:8080::/29": "61207", - "2001:559:830b::/48": "7015", - "2400:1c00:220::/43": "45143", - "2a02:4840:1111::/48": "203339", - "2001:4c8:1008::/48": "25864", - "240a:aa0a::/32": "145220", - "2602:fd92:e00::/40": "211584", - "2804:2f0::/32": "53236", - "2a02:26f7:d9c4::/48": "36183", - "2001:6d0:4004::/48": "60915", - "2001:4878:4102::/47": "12222", - "2408:8956:7a00::/40": "17622", - "2606:6480::/32": "22113", - "2806:370:6010::/40": "28403", - "2a02:26f7:c140::/48": "36183", - "2a07:9944:1a::/48": "8100", - "2001:1928::/32": "30528", - "2600:100d:b030::/44": "22394", - "2607:fdf0:5ea2::/45": "8008", - "2a01:3f1:c00::/34": "8674", - "2402:fd00::/32": "38264", - "2600:6c38:604::/47": "20115", - "2602:feda:2d0::/47": "133492", - "2620:ca:4000::/48": "394229", - "2402:800:950f::/43": "7552", - "240e:44d:3900::/41": "140345", - "2600:8807:ab22::/40": "22773", - "2607:f128::/48": "46440", - "2804:2958::/32": "264010", - "2a0c:5247:8000::/36": "208861", - "2400:ad40::/32": "136262", - "2401:1700:7c10::/42": "55666", - "240a:a4fb::/32": "143925", - "240e:940:cf00::/34": "4134", - "2600:802:1101::/44": "701", - "2804:58fc:6000::/32": "268162", - "2402:f00::/32": "23918", - "2405:7f00:a020::/40": "133414", - "2408:84f3:9440::/38": "17816", - "2001:559:c230::/48": "33659", - "2402:7500:5ce::/42": "24158", - "2408:8256:377b::/48": "17816", - "2606:e880::/32": "46811", - "2801:c4:13::/48": "265533", - "2a07:5080::/29": "49223", - "2a0a:9a04::/48": "61317", - "2001:67c:2104::/48": "9182", - "2401:d800:ff0::/34": "7552", - "2401:ff80:198f::/43": "133954", - "2804:7b3c::/32": "271419", - "2001:df3:5880::/48": "136704", - "2001:ee0:2820::/37": "45899", - "2408:8206:8510::/34": "4808", - "2600:370f:2020::/45": "32261", - "2603:c026:c000::/35": "31898", - "2603:f2e8::/29": "396356", - "2a0e:c40::/29": "57112", - "2604:f980:5c00::/40": "19957", - "2a0d:1e40::/29": "202714", - "2409:8002:2100::/37": "9808", - "240a:ae68::/32": "146338", - "240e:7:4000::/37": "134420", - "2800:110:3805::/37": "4270", - "2a01:280:328::/48": "34628", - "2a02:26f7:f084::/48": "36183", - "2a05:4700:50::/48": "43578", - "2405:9800:b01a::/48": "45430", - "2408:84f3:f640::/44": "17623", - "2804:6a5c:8000::/40": "270331", - "2804:6f14::/32": "270637", - "2a00:8a01:10::/44": "18666", - "2a06:dd80::/29": "203544", - "2a10:f540::/29": "15600", - "240e:3b7:c800::/37": "4134", - "2a02:26f7:c352::/45": "20940", - "2a07:6cc0:20::/47": "61098", - "2001:559:80a3::/48": "33668", - "2402:800:330f::/43": "7552", - "240a:a611::/32": "144203", - "2607:fb10:70e0::/47": "2906", - "2804:2d04::/32": "265257", - "2804:5c78::/33": "53245", - "2a01:8100:2000::/36": "39729", - "2404:3d00:40d6::/47": "21433", - "240a:a70a::/32": "144452", - "2804:4618:2200::/35": "266968", - "2a04:2b00:14ee::/48": "212391", - "2404:f240::/32": "134863", - "2620:10f:7002::/44": "54765", - "2801:80:1e41::/48": "14026", - "2a02:438::/32": "13132", - "2001:67c:2fc::/48": "41700", - "240a:afc6::/32": "146688", - "2600:1406:7000::/48": "35994", - "2607:f980::/32": "29744", - "2001:44b8:604f::/48": "4739", - "240a:a004::/32": "142654", - "2600:1002:9100::/44": "6167", - "2001:4060::/33": "6772", - "240e:965:e400::/39": "133775", - "2a09:fbc0::/32": "205718", - "2001:678:138::/48": "38990", - "2001:e48::/42": "9583", - "240e:3bb:d000::/36": "134772", - "2804:2ee8::/32": "262880", - "2a00:8a01:8000::/44": "10455", - "2001:1248:9a8a::/45": "11172", - "2804:6e7c::/32": "270600", - "2a05:3580:2f00::/32": "35807", - "2001:df3:8f80::/48": "140603", - "2408:8459:5e50::/34": "17816", - "2409:805c:30f1::/44": "9808", - "2a02:2892:40::/48": "51185", - "2a03:5840::/48": "199586", - "2a05:d050:8010::/42": "16509", - "2a00:1d60:f000::/36": "59990", - "2a02:480::/32": "8685", - "2a0e:5340::/29": "42306", - "2400:5800::/45": "38712", - "240a:a577::/32": "144049", - "2603:c0e1:2000::/36": "54253", - "2606:8e80:53::/48": "32133", - "2a01:a460::/32": "34520", - "2a04:92c7:b::/45": "62240", - "240e:473:3800::/41": "140485", - "240e:473:ab50::/40": "4134", - "2606:7100:3101::/32": "21581", - "2a06:e881:5300::/44": "209859", - "2a09:b280:ccc0::/47": "210025", - "2401:c900:2700::/36": "36351", - "2408:8256:2d6b::/48": "17623", - "2606:b180::/32": "63069", - "2804:2924::/32": "264000", - "2a02:6080::/32": "47381", - "2a09:1500:8::/48": "208175", - "2001:4c8:102b::/41": "15290", - "2405:206::/31": "55836", - "2600:2:da0::/29": "1239", - "2001:468:ef02::/40": "11537", - "2001:559:748::/48": "7015", - "2001:fd8:1ef0::/34": "4775", - "240a:a5cb::/32": "144133", - "2600:cc00:1::/46": "32298", - "2605:6400:d814::/48": "398355", - "2804:4b50::/34": "267297", - "2401:d800:5710::/40": "7552", - "240e:981:1100::/33": "4134", - "2a02:970:1193::/38": "44002", - "2a0f:8980::/32": "39351", - "2a01:8840:ce::/43": "12041", - "2001:df3:cc00::/48": "134053", - "240a:a02b::/32": "142693", - "240e:473:4c50::/39": "4134", - "240e:964:8800::/38": "133775", - "2600:1418:c001::/31": "20940", - "2620:df:4000::/48": "14618", - "2800:160:1f0b::/45": "14259", - "2a05:d03a:8000::/40": "16509", - "2a0e:1c40:4000::/48": "208635", - "2001:559:c1b9::/48": "33652", - "240a:a1cb::/32": "143109", - "240e:1:7100::/40": "137698", - "240e:473:8750::/40": "4134", - "2610:130:200::/35": "6122", - "2620:10a:80e6::/48": "55195", - "2a02:cb80:2110::/48": "43766", - "2001:df0:e680::/48": "136369", - "2608:141:c::/48": "6025", - "2801:2::/32": "17147", - "2001:559:84e2::/45": "7016", - "2a02:26f7:e744::/48": "36183", - "2600:803:1200::/48": "15572", - "2800:870:1002::/48": "6461", - "2a0a:6780::/29": "206377", - "2400:2000:6::/47": "20940", - "2600:d0d:4000::/30": "20161", - "2605:37c0:200::/34": "396469", - "2a01:8840:51::/48": "207266", - "2001:506:39::/48": "20055", - "2001:559:c1f3::/45": "7725", - "2409:8089::/35": "9808", - "2600:c0b:1021::/32": "14745", - "2600:1017:b0e0::/39": "6167", - "2607:6980:e1a0::/44": "16584", - "2804:1644:240::/39": "262903", - "2001:67c:1b2c::/48": "204074", - "240e:83:800::/32": "4134", - "2600:140b:c801::/38": "20940", - "2a00:c40:8095::/48": "206785", - "2a02:26f0:9000::/48": "34164", - "2a03:2880:f102::/44": "32934", - "2a07:cb80::/32": "49685", - "2001:678:c10::/48": "207488", - "240a:ae2b::/32": "146277", - "2607:dc80::/32": "64262", - "2804:81fc::/32": "272490", - "2001:4878:141::/48": "12222", - "240a:ab89::/32": "145603", - "2606:1700:b::/32": "62917", - "2a03:fd80::/29": "200781", - "2a0c:3a81::/40": "51903", - "2001:4878:215::/46": "12222", - "2a02:26f7:f8cc::/48": "36183", - "2001:19b8::/32": "30340", - "2001:4248::/43": "30999", - "2405:9800:b::/48": "20940", - "240e:679:1000::/37": "140330", - "2600:6c38:8ec::/43": "20115", - "2602:ffd8::/36": "29838", - "2a00:1fa3::/29": "8359", - "2803:7200:8016::/44": "27696", - "2a02:214d:8000::/33": "1241", - "2001:559:c1fb::/48": "33287", - "2401:d800:bf20::/41": "7552", - "240a:a295::/32": "143311", - "2800:160:1f24::/44": "14259", - "2803:9800:ba01::/46": "11664", - "2806:230:6023::/48": "11888", - "2a07:bbc2::/47": "50864", - "2001:67c:1438::/48": "44418", - "2804:6f18::/32": "270638", - "2a03:db80:4810::/48": "60824", - "2a0e:fd44:4a::/31": "44103", - "2620:149::/47": "714", - "2803:e1c0::/32": "265684", - "2804:2140:1024::/36": "53059", - "2a0c:5247:b000::/33": "59504", - "2c0f:eff0::/32": "327859", - "240a:a511::/32": "143947", - "2a04:a080::/29": "35205", - "2001:559:71a::/48": "7015", - "2001:559:c38d::/48": "22909", - "2804:fc:f000::/36": "28142", - "2804:3aec::/32": "266118", - "240a:a9e1::/32": "145179", - "2001:4878:246::/48": "12222", - "240a:70:8::/47": "9605", - "2605:9d80:9052::/48": "4809", - "2605:f440:5700::/34": "54874", - "2607:1280:1490::/44": "394972", - "2a02:4fc0::/33": "199081", - "2a0f:2140::/29": "60262", - "2400:fc00:4110::/38": "45773", - "2804:718::/32": "262620", - "2a02:2ad0:137::/44": "702", - "2a0b:3c40:9::/48": "208258", - "2a0d:ac41::/32": "208861", - "2a0e:2800::/29": "63023", - "2c0f:f5c0:481::/46": "29465", - "2001:e48:40:5::/64": "22317", - "2404:4600:4::/47": "9764", - "2408:8256:3180::/44": "17623", - "240e:3bb:c000::/37": "140315", - "2600:9000:2219::/42": "16509", - "2804:23b0::/32": "262645", - "2a0e:3400::/29": "209095", - "2408:8956:7600::/40": "17622", - "240a:ac60::/32": "145818", - "2620:104:2040::/48": "14618", - "2a02:26f7:d70a::/42": "20940", - "2001:67c:2f54::/48": "197474", - "2620:122:8000::/48": "18541", - "2001:438:65::/48": "26762", - "2402:2200:2000::/36": "24090", - "2405:1c0:6183::/41": "55303", - "2605:9780:2400::/36": "36180", - "2a02:26f7:ddc8::/48": "36183", - "2001:678:7e8::/48": "200300", - "2804:7b0::/32": "262453", - "2a02:26f7:c9c0::/48": "36183", - "2a0c:b641:5e0::/44": "212912", - "2408:8957:8700::/40": "17816", - "240e:44d:2900::/41": "140345", - "2620:171:30::/45": "42", - "2a03:c5c0::/32": "198484", - "2a0e:40c0:3::/48": "204957", - "2a02:26f7:ca81::/46": "20940", - "2001:df3:9400::/48": "134138", - "2404:bf40:a581::/46": "139084", - "2404:e740:4::/32": "139195", - "240a:acad::/32": "145895", - "240a:adec::/32": "146214", - "2602:fdb8:130::/44": "394151", - "2803:5440:4067::/44": "264738", - "2a0e:e41::/32": "328317", - "2405:600:5001::/32": "55805", - "2a06:4c0::/32": "60447", - "2403:3800:a00::/35": "4007", - "2409:805c:5::/36": "9808", - "240a:a176::/32": "143024", - "2604:f400:2800::/37": "19406", - "2607:fae0:a000::/35": "8038", - "2a0d:60c3::/32": "59504", - "2804:3420::/32": "265437", - "2a03:2880:f040::/46": "32934", - "2001:1890:1fff:104::/29": "7018", - "240e:878::/40": "137689", - "2600:2a02::/31": "396319", - "2800:2f0:1c::/48": "27668", - "2a00:8720::/32": "41937", - "2a03:2960::/39": "201590", - "2001:df0:b5::/48": "46049", - "2402:a800:fff1::/44": "9601", - "2606:9500:3000::/36": "14427", - "2804:724c:8001::/33": "270845", - "2402:d000:8125::/44": "9329", - "240a:af51::/32": "146571", - "2400:6400::/32": "38201", - "2409:8a53:100::/38": "56047", - "2607:f518:104::/42": "46887", - "2804:fe0::/47": "263049", - "2804:3ee0::/32": "266626", - "2c0f:f6d0:29::/40": "327687", - "2408:8256:3280::/48": "17816", - "240a:a677::/32": "144305", - "2600:9000:114b::/48": "16509", - "2800:68:34::/47": "61468", - "2a03:2480:81::/33": "41983", - "2001:67c:2190::/48": "51400", - "2402:800:7c50::/42": "7552", - "240a:a289::/32": "143299", - "240a:aa13::/32": "145229", - "240a:ab30::/32": "145514", - "2602:fd10::/40": "19529", - "2607:7c80:56::/48": "64260", - "2a10:d501::/32": "398464", - "2620:1bc:1030::/32": "7726", - "2804:1690:680::/36": "263292", - "2804:2ce4:4000::/34": "265249", - "2a0e:6e80::/44": "208800", - "2605:300::/32": "46849", - "2a03:90c0:420::/41": "199524", - "2001:df0:ca00::/47": "137442", - "2602:fe7d::/36": "12155", - "2801:80:c90::/48": "61656", - "2001:559:810a::/48": "33287", - "2001:df2:a600::/48": "45320", - "2806:335:252::/47": "265580", - "2a06:2940::/48": "44206", - "2001:67c:53c::/48": "43046", - "240a:a739::/32": "144499", - "2a0b:b87:ffd4::/48": "204826", - "2405:9800:c000::/37": "45430", - "240e:a50:5c00::/34": "134419", - "2804:18bc::/32": "61950", - "2a02:26f7:e1c4::/48": "36183", - "2a06:3480::/29": "48847", - "240e:974:e800::/39": "38283", - "2607:f00::/32": "5704", - "2804:63e0::/32": "269389", - "2a02:2e0:3fc::/48": "205766", - "2001:559:28b::/48": "33489", - "2a02:26f7:c881::/46": "20940", - "2402:2500:7::/33": "13445", - "2803:6900:578::/48": "52423", - "2804:14d:e200::/40": "28573", - "2804:7190::/32": "270797", - "2a05:4700:200::/48": "43578", - "2a0f:5707:fff7::/48": "50310", - "2001:559:81ee::/48": "33287", - "2400:adc5::/39": "9541", - "2804:5284:1000::/34": "268523", - "2a01:8840:b5::/48": "207266", - "2a06:3200::/32": "204989", - "2a06:e500::/29": "199733", - "2a0e:c9c0::/29": "50673", - "2a05:e740:242::/48": "29108", - "2402:800:627e::/40": "7552", - "2402:8400:400::/40": "17820", - "2409:8924:7d00::/38": "56046", - "240a:a068::/32": "142754", - "2804:1b00::/32": "61703", - "2a00:b6e0::/32": "60362", - "2a01:5042:1::/48": "202196", - "2001:500:84::/48": "394353", - "2001:559:765::/48": "7922", - "240a:a794::/32": "144590", - "240a:ab66::/32": "145568", - "2606:a300:f001::/36": "35847", - "2800:40:29::/46": "16814", - "2804:45fc::/32": "266959", - "2402:1e80::/50": "4672", - "240a:a949::/32": "145027", - "2a01:8840:9d::/48": "207266", - "240a:a75b::/32": "144533", - "2607:f208:d200::/43": "26496", - "2620:104:6003::/48": "14618", - "2804:fc4::/32": "263602", - "2a02:26f7:e309::/42": "20940", - "2602:feb4:1c0::/44": "25961", - "2804:236c:d000::/34": "264161", - "2a02:26f7:efc1::/46": "20940", - "2c0f:f470::/32": "37640", - "2800:bf0:80c2::/45": "27947", - "2804:38:3403::/45": "19089", - "2804:3130::/32": "264999", - "2a02:26f0:8701::/36": "20940", - "2a0e:1c80:11::/46": "1299", - "2001:559:83d3::/48": "7922", - "2001:550:1b01::/44": "174", - "2001:559:83d5::/48": "7922", - "2600:8807:6d3e::/32": "22773", - "2a0e:4540:cafe::/48": "58247", - "2001:559:86bb::/48": "7922", - "2001:b08:5::/46": "3267", - "2001:4878:b347::/48": "12222", - "2402:800:7bb0::/41": "7552", - "2800:160:1b25::/46": "14259", - "2a02:26f0:8001::/39": "20940", - "2001:579:530c::/41": "22773", - "240e:60c:dc00::/34": "4134", - "2804:6ddc::/32": "270560", - "2a02:26f7:d601::/46": "20940", - "2a04:5200::/41": "50113", - "2001:559:1dc::/47": "33659", - "2604:5e80:20::/48": "1700", - "2a04:5781:2000::/40": "12337", - "2402:800:9147::/43": "7552", - "2402:800:9dc5::/42": "7552", - "2409:805c:5b00::/37": "9808", - "240e:981:7100::/36": "4134", - "2a01:9700:11ae::/38": "8376", - "2a02:2698:782a::/47": "56981", - "2a0a:e5c0:16::/48": "213081", - "2408:8456:5640::/39": "17816", - "2600:1408:cc01::/35": "20940", - "2a00:f826:3::/48": "30823", - "2a01:4a0:39::/41": "201011", - "2a0d:f340::/29": "208861", - "2a10:4000::/29": "28701", - "2001:550:7206::/37": "174", - "2001:df6:6300::/47": "133225", - "240e:908::/33": "4134", - "2604:9b00::/38": "14230", - "2804:297c:e001::/35": "262907", - "2a0e:1b80:3::/48": "54201", - "2c0f:ec40:6000::/32": "327936", - "2400:d400:18::/48": "45671", - "240a:afd7::/32": "146705", - "2a05:c4c0::/29": "12859", - "2606:5580:2::/38": "63242", - "2607:ffd8:214::/36": "33333", - "2a10:22c0::/29": "206807", - "2605:cf00::/32": "46525", - "2804:7e44::/32": "271613", - "2a07:22c1:36::/48": "211244", - "2001:590:3c01::/48": "34164", - "2001:16a2:7400::/36": "25019", - "2404:f600::/32": "24207", - "2600:4402::/34": "6130", - "2804:283c::/32": "263949", - "2804:46f4::/32": "267022", - "2a02:7340::/32": "44838", - "2a0b:1d00::/32": "49709", - "2800:1e0:1071::/40": "7195", - "2a00:8940::/32": "35799", - "2a02:26f7:bb46::/47": "20940", - "2001:44b8:206b::/35": "4739", - "240a:a122::/32": "142940", - "2800:160:1da2::/44": "14259", - "2804:4fe8::/32": "268357", - "2a0d:42c0::/29": "197706", - "2001:13c7:6016::/48": "61494", - "240a:a676::/32": "144304", - "240a:ace9::/32": "145955", - "2a0b:84c0::/29": "205582", - "2600:370f:33ca::/42": "32261", - "2605:ca40:1::/48": "397011", - "2803:aea0::/32": "18678", - "2a02:2090:a800::/48": "47595", - "2404:4e40::/47": "136429", - "2408:8956:2c00::/40": "17622", - "2600:1408:25::/36": "20940", - "2604:f980:2600::/40": "19957", - "2806:261:300:4a::/37": "13999", - "2a01:7660:6::/48": "20676", - "2001:df3:a480::/48": "137549", - "2408:877e::/32": "133119", - "2800:200:b450::/40": "12252", - "2a02:26f7:e9c8::/48": "36183", - "2a02:26f7:f2cd::/42": "20940", - "2400:7400:76::/48": "23736", - "2604:4300:c009::/34": "33387", - "2a0e:b103:f93::/45": "20473", - "2001:1380::/37": "19180", - "2400:a980:5500::/36": "133111", - "2804:2c8c::/33": "265226", - "2804:525c::/32": "268513", - "2a04:4b00::/29": "12843", - "2001:418:142e:400::/43": "2914", - "2001:559:118::/48": "7922", - "2a09:e9c0::/29": "209181", - "2a0e:fd45:40ff::/48": "53356", - "2001:559:495::/46": "7922", - "2407:fe80::/39": "134749", - "240a:a389::/32": "143555", - "240e:473:8920::/41": "140486", - "2a06:3201::/32": "42184", - "2a0c:2f07:4896::/48": "206924", - "2a0e:3940:3200::/44": "207834", - "2402:5300:4210::/39": "45903", - "2408:805c::/34": "17816", - "240a:a622::/32": "144220", - "2a00:1d34:4400::/40": "47331", - "2a02:26f7:3b::/48": "20940", - "2a0e:97c7:160::/48": "42394", - "2a06:9240::/29": "47406", - "2804:530c::/32": "268560", - "2a07:e340::/32": "9009", - "2a10:30c4::/30": "398481", - "2409:8f1a::/25": "9808", - "2602:feda:c0::/47": "43126", - "2605:ad80:ff::/48": "62887", - "2a03:4780::/29": "47589", - "2a07:4a80::/29": "174", - "2a0a:6700::/45": "40676", - "2a0f:9400:771a::/47": "53356", - "2401:2d00:83e8::/48": "17625", - "2804:4c64::/32": "267368", - "2a0e:6540:d0d0::/48": "208364", - "2001:559:8606::/48": "33651", - "2001:fd8:3040::/47": "4775", - "2001:4df0::/29": "1680", - "2605:59c0:2000::/33": "36492", - "2804:a98::/47": "52896", - "2804:2200::/35": "264585", - "2a00:fd00::/32": "29695", - "2001:deb::/48": "63528", - "2001:4878:a220::/48": "12222", - "2400:6180:f000::/36": "14061", - "2401:440::/32": "10004", - "2401:b400:10::/47": "58536", - "2600:e004::/32": "22995", - "2800:ba0:14::/48": "27796", - "2a03:5980::/32": "34391", - "2a05:1081:1::/48": "211940", - "2a0b:ae40:5::/44": "396362", - "2001:df0:cb::/48": "45786", - "2001:df1:b900::/48": "132563", - "2001:4878:4158::/48": "12222", - "2401:d800:2830::/41": "7552", - "240a:a0d1::/32": "142859", - "2804:3600::/32": "266320", - "2804:5070::/32": "268389", - "2001:559:8119::/48": "7922", - "2001:559:c197::/48": "33491", - "2608:146:4::/48": "27046", - "2409:8904:5e70::/40": "24547", - "2804:2020::/32": "264470", - "2a02:1388::/34": "29247", - "2a02:fd40::/31": "31034", - "2a04:9700::/29": "62227", - "2001:559:577::/48": "7015", - "2401:ff80:1501::/46": "133954", - "2408:80f0:4000::/32": "4808", - "240a:acb7::/32": "145905", - "2001:559:39a::/48": "7015", - "2a00:eb80::/32": "48518", - "2001:1248:5aff::/39": "11172", - "2604:d600:1512::/47": "32098", - "2806:36c::/32": "265615", - "2a01:418::/32": "42344", - "2a01:8840:32::/45": "12041", - "2001:579:a08c::/43": "22773", - "240e:3b2:1400::/38": "134773", - "2600:1406:4c00:1::/48": "20940", - "2404:1fc0:1104::/48": "58534", - "2806:2f0:12c4::/42": "22884", - "2a0a:7780::/29": "207167", - "2001:559:823d::/48": "33652", - "2804:e94:82::/44": "262468", - "2a0c:9a40:8103::/48": "200857", - "2001:559:c168::/48": "33489", - "2a00:4880::/32": "50348", - "2a03:7840::/29": "207790", - "2001:ee0:9200::/37": "45899", - "2401:4900:3920::/43": "45609", - "2610:28::/33": "81", - "2800:bf0:80ed::/43": "27947", - "2804:76c8:1121::/34": "271134", - "2a00:9620::/32": "43071", - "2001:559:2d7::/48": "7016", - "2800:160:1a2f::/43": "14259", - "2804:e94:1a2::/43": "262468", - "2600:1014:b030::/44": "22394", - "2001:67c:2288::/48": "44073", - "2404:bf40:8183::/42": "139084", - "2801:80:b80::/48": "61841", - "2804:1100::/34": "53178", - "2a02:4840:1000::/48": "52048", - "2a03:5580::/29": "57280", - "2a07:1cc0::/29": "48760", - "2001:448a:7030::/41": "7713", - "2401:ed80::/32": "63932", - "2804:3908::/32": "266519", - "2a02:26f7:f789::/42": "20940", - "2a0f:9a00::/29": "328543", - "2001:678:72c::/48": "201697", - "2401:5e40::/35": "63770", - "240e:978:8000::/40": "137702", - "2600:1008:a100::/43": "6167", - "2602:fea1::/36": "20018", - "2001:559:1e1::/48": "33657", - "2610:88::/46": "14037", - "2620:0:2f0::/48": "32629", - "2804:1040:a240::/35": "263626", - "2a00:5c40::/29": "6821", - "2a0a:ec04::/32": "42692", - "2001:559:290::/48": "7016", - "2607:f8e0::/32": "21947", - "2a02:26f7:22::/48": "36183", - "2a02:26f7:c144::/48": "36183", - "2001:67c:2d68::/48": "31169", - "2a03:db80:2c14::/48": "47610", - "2001:4490:d500::/46": "9829", - "2401:d800:f640::/42": "7552", - "2409:8924:8300::/37": "56046", - "2600:1417:801::/35": "20940", - "2a0e:aa06:480::/44": "207454", - "2404:3d00:414e::/42": "3573", - "240e:640:f00::/32": "4134", - "2604:4000:4000::/48": "32491", - "2a00:4600::/32": "25451", - "2a01:5041:4efd::/48": "202196", - "240a:a32a::/32": "143460", - "2600:8807:9182::/38": "22773", - "2607:f358:8::/47": "60311", - "2a05:6e40::/29": "200552", - "2a0d:1000::/29": "206264", - "2607:fca8::/37": "17139", - "2800:600:181::/38": "52323", - "2a09:bac0:14::/46": "13335", - "2001:559:c2e6::/48": "33660", - "2001:4268:120::/43": "15964", - "240a:a0fb::/32": "142901", - "2603:fc38::/29": "262287", - "2804:6f0c::/32": "270635", - "2a00:1840::/32": "12333", - "2001:df7:6400::/48": "134809", - "2401:3f00::/32": "56308", - "2600:1406:2c01::/38": "20940", - "2605:72c0:5::/48": "40401", - "2a0e:8f02:2000::/44": "213045", - "2a0e:b107:df5::/48": "142055", - "2402:800:fe50::/42": "7552", - "2408:8256:a68::/39": "17622", - "2a00:d440::/29": "58046", - "2a0f:9600:f::/48": "60781", - "2405:1c0:6473::/40": "55303", - "2a0d:3842:1190::/48": "57629", - "2409:8c85:aa35::/44": "9808", - "2600:6c47:8000::/28": "20115", - "2606:2740::/32": "32490", - "2800:150:6::/48": "20940", - "2001:c20:8406::/44": "3758", - "2803:53e0:1000::/48": "52468", - "2a0d:f407:1001::/48": "209334", - "240e:94::/31": "17638", - "2804:6900::/32": "270242", - "2a00:14b8::/32": "49826", - "2a04:c440:8000::/36": "2534", - "2a06:6541:1440::/48": "8220", - "2001:1af8::/33": "60781", - "2001:4190:8024::/48": "8938", - "2401:d800:7d80::/42": "7552", - "2605:dd40:8880::/44": "16509", - "2804:a30::/32": "263030", - "2806:230:601b::/48": "11888", - "2a0e:e580::/29": "204394", - "2400:7fc0:220::/44": "55960", - "2401:3cc0:901::/32": "137409", - "240e:3b9:1400::/38": "134773", - "240e:44d:3c00::/41": "140345", - "2603:c025:4000::/35": "31898", - "2a02:348:5c::/42": "35470", - "2a0d:2d42::/29": "62075", - "2001:5e0:20::/48": "20224", - "2001:9c0::/32": "12902", - "2401:a840:400::/32": "136917", - "2408:80ea:4000::/34": "17816", - "240a:abf1::/32": "145707", - "2a07:dc0::/29": "25231", - "2001:67c:1a00::/44": "1837", - "2607:cc00::/32": "36003", - "2804:4d38::/32": "267419", - "2401:d800:c000::/35": "7552", - "2402:800:5be0::/44": "7552", - "240a:a8cf::/32": "144905", - "240e:438:c40::/38": "4134", - "2602:feda:be0::/48": "38173", - "2a02:cb80:4240::/44": "43766", - "2c0f:fdc0::/32": "36930", - "240a:a2db::/32": "143381", - "2a0d:9b84:1000::/36": "25180", - "2a0f:8ac1:2d3a::/48": "205749", - "2403:2500:4000::/41": "36236", - "2607:f038:6001::/32": "21527", - "2a02:2178::/29": "29075", - "2a0d:180::/31": "204668", - "2408:8956:8800::/40": "17622", - "2600:1900:4170::/40": "15169", - "2a0c:acc0::/29": "43260", - "2001:16f0::/32": "49220", - "240a:a993::/32": "145101", - "240a:abdb::/32": "145685", - "2a01:5041:4eff::/48": "202196", - "2a03:2d80::/32": "34457", - "2001:470:57::/48": "6939", - "2400:7e00::/32": "24572", - "2401:cf80:6044::/48": "198949", - "2408:8957:6e00::/40": "17622", - "2600:1f1e::/36": "16509", - "2403:98c0::/35": "138320", - "2a02:26f7:bb80::/48": "36183", - "2a03:4b27:d000::/36": "206452", - "2401:4900:52b0::/44": "45609", - "2408:8459:8a50::/37": "17816", - "2620:8d:8000::/48": "4385", - "2804:1110:822::/32": "262901", - "2a00:1728:4::/44": "34224", - "240a:a591::/32": "144075", - "2804:6b3c::/32": "270387", - "2a07:4280::/29": "48147", - "2001:1248:9a3f::/41": "11172", - "2408:8459:7c10::/42": "17623", - "2607:fdf0:5e39::/46": "8008", - "2800:160:1c2b::/43": "14259", - "2804:5318::/32": "268563", - "2a01:448:73::/32": "42585", - "2a02:2e02:90f0::/39": "12479", - "240a:a643::/32": "144253", - "2607:f750:7000::/40": "46925", - "2804:2cac:eeef::/35": "265234", - "2400:9380:9fc0::/44": "136167", - "2a06:e180::/29": "57081", - "2c0f:ed00:100::/44": "328442", - "240e:473:6e00::/41": "140485", - "2602:feda:30::/44": "46997", - "2605:a404:3ee::/37": "33363", - "2607:f740:100::/47": "36236", - "2804:234::/32": "262731", - "2804:3838:3::/45": "53170", - "2a01:5980::/32": "15689", - "2001:df6:b400::/48": "138148", - "2602:feda:d9d::/46": "38254", - "2800:bf0:2904::/37": "27947", - "2a02:598::/46": "43037", - "2a02:26f7:cc44::/48": "36183", - "2a02:2e02:84e0::/39": "12479", - "2001:678:b28::/48": "204867", - "2001:678:f80::/48": "52158", - "2404:3d00:400e::/41": "3573", - "2408:891c::/32": "4837", - "240a:a0a3::/32": "142813", - "2801:1d0:2::/48": "264647", - "2a02:708::/32": "8741", - "2804:49a0::/32": "262498", - "2001:678:f84::/48": "197942", - "2403:cfc0:1005::/48": "135134", - "2404:ffc0:12::/45": "62707", - "240a:a2c3::/32": "143357", - "240e:51:6000::/29": "4134", - "2800:160:189b::/42": "14259", - "2803:a5a0::/32": "267728", - "2806:2f0:2403::/48": "17072", - "2a00:c00:f033::/48": "24467", - "2a0f:d840::/29": "207558", - "2001:3c8:a702::/48": "132879", - "2404:8d02:1040::/48": "9587", - "2804:50e8::/32": "268418", - "2804:5b30::/32": "268824", - "2806:108e:26::/48": "8151", - "2001:559:c18c::/48": "13367", - "2406:9dc0:6666::/48": "38173", - "240a:a304::/32": "143422", - "2607:fe28:10::/48": "398119", - "2a02:26f7:f088::/48": "36183", - "2a03:ea40::/32": "197985", - "2804:774c::/32": "271169", - "2804:7ca0::/32": "271508", - "240e:105:e800::/37": "4134", - "2801:1ac::/48": "18747", - "2a01:430:12::/45": "24971", - "240a:a6c2::/32": "144380", - "2800:484:c200::/40": "14080", - "2001:559:c366::/44": "7015", - "2600:9000:11d1::/46": "16509", - "2603:40ff:2000::/36": "10578", - "2a02:d70::/32": "41176", - "2a05:1700:2::/47": "56577", - "2a0e:b107:16a0::/48": "210796", - "2a0f:540::/31": "207976", - "2404:1200:2::/47": "14636", - "2409:4064:5000::/27": "55836", - "2620:12c:b067::/48": "13448", - "2804:4efc::/32": "268296", - "2a02:2788:1000::/32": "12392", - "2800:bf0:8280::/44": "52257", - "2804:243c::/32": "264210", - "2a00:77a0::/32": "39586", - "2a07:7e00::/29": "34549", - "2a0e:5c00::/29": "209097", - "2001:49f0:a01c::/46": "174", - "2620:115::/45": "18888", - "2a02:2120::/30": "2119", - "2a02:4b00::/29": "50168", - "2001:67c:374::/48": "51861", - "2804:3004::/32": "264926", - "2001:dce:e000::/48": "38037", - "2404:d500:6::/44": "132370", - "240a:a3c1::/32": "143611", - "2001:559:477::/48": "7922", - "240b:c000::/24": "138384", - "2603:b010:8000::/33": "11796", - "2607:8100::/32": "11404", - "2804:678c::/32": "269635", - "2a02:cb80:2510::/48": "43766", - "2001:418:1::/48": "3130", - "2001:df7:d200::/48": "136179", - "2409:8751:b00::/37": "56047", - "2a06:c980::/29": "13287", - "2a09:4c0:5701::/40": "58057", - "2a0e:97c0:15d3::/45": "20473", - "2001:df5:2200::/48": "133156", - "2803:48e0:2::/32": "52468", - "2001:4c40::/32": "8368", - "2620:0:6c2::/48": "16807", - "2a02:26f0:c201::/37": "20940", - "2a0d:f803:8f00::/40": "20278", - "2001:13d8::/32": "3790", - "2406:ffc0::/32": "9830", - "2803:6fa0::/48": "267790", - "2001:67c:1394::/48": "199351", - "240a:a94c::/32": "145030", - "2602:fd65::/36": "55140", - "2804:5638::/32": "267984", - "2001:a78::/29": "12399", - "2407:1240:1::/48": "141197", - "2600:6:ff44::/42": "1239", - "2001:fd0:3401::/36": "10029", - "2604:d600:1252::/42": "32098", - "2607:f8f8:600::/39": "27323", - "2a0f:6580:103::/48": "48292", - "2a00:11f8::/29": "24875", - "2001:559:809f::/48": "7922", - "2001:1248:8301::/37": "11172", - "2405:d800::/32": "24247", - "2408:8409:8400::/40": "4808", - "2600:370f:7281::/44": "32261", - "2801:c4:b4::/48": "28392", - "2804:5a1c::/32": "268749", - "2001:df2:6880::/48": "139892", - "240a:a6d3::/32": "144397", - "2600:1004:b100::/42": "6167", - "2a02:26f7:c749::/42": "20940", - "2a04:ac00:6::/48": "56534", - "2001:559:87a6::/48": "7015", - "240a:a440::/32": "143738", - "2804:b40::/32": "52760", - "2409:8914:be00::/39": "56044", - "2610:a1:1023::/48": "397237", - "2a10:400::/32": "201787", - "2a02:26f0:c501::/38": "20940", - "2a0b:3880::/32": "62217", - "2a0f:9400:8001::/48": "208393", - "2a0e:a580::/29": "60262", - "2001:67c:18d4::/48": "62075", - "2001:df2:c000::/48": "132644", - "2409:8753:b00::/37": "56047", - "240e:3be:7600::/39": "140313", - "2804:214:4002::/43": "26615", - "2804:2cd4:50::/40": "265246", - "2804:80d4::/32": "272415", - "2804:c00:c100::/34": "52655", - "2804:de0::/32": "262604", - "2804:37d8::/32": "266439", - "2a00:ba80::/32": "15557", - "2a02:26f7:ce40::/48": "36183", - "2001:df7:7d80::/48": "141909", - "2a02:d480:240::/42": "42873", - "2001:67c:22a0::/48": "1764", - "2001:1248:8751::/45": "11172", - "2800:98:170d::/46": "14754", - "2a02:398::/32": "30781", - "2001:fd8:120::/48": "132199", - "2402:800:599b::/42": "7552", - "2600:2c01:6000::/36": "26094", - "2a07:bcc0::/47": "35146", - "2408:8459:2130::/41": "17622", - "2602:fe2e::/37": "21700", - "2804:1934::/32": "61778", - "2606:9680:2000::/44": "22918", - "2001:9d8::/32": "25577", - "2001:1938:0:6000::/48": "12989", - "2400:b000:200::/48": "45209", - "2405:1c0:6743::/43": "55303", - "2405:8d40:b00::/37": "139831", - "240a:a7e1::/32": "144667", - "240e:95c:5000::/36": "138982", - "2806:2f0:8201::/42": "17072", - "2a06:e881:110::/48": "206551", - "2402:800:79d0::/42": "7552", - "240a:ab41::/32": "145531", - "2804:14c:8183::/41": "28573", - "2a00:1e68:102::/43": "42861", - "2409:8750:1100::/32": "56047", - "2a02:20c8:1242::/34": "50304", - "2a02:f040:c::/48": "59605", - "2001:1248:8701::/46": "11172", - "240a:ac0b::/32": "145733", - "2600:1001:b000::/42": "6167", - "2801:13:b000::/48": "64109", - "2804:2bf8::/32": "265185", - "2a09:1480::/39": "35704", - "2804:72d8::/32": "270879", - "2a02:26f7:dd01::/46": "20940", - "2a0c:7480::/32": "5606", - "2001:df3:8d80::/48": "139521", - "2400:a840::/32": "134090", - "2600:6c38::/45": "20115", - "2a00:1d58:8000::/47": "47524", - "2001:42d0:7a00::/44": "33764", - "2600:1001:9110::/36": "22394", - "2607:fb91:200::/35": "21928", - "2602:ffc5:60:1::/43": "7489", - "2620:4b:c000::/46": "29921", - "2803:d280::/44": "264733", - "2804:f2c:1800::/33": "53191", - "2804:1a14:5000::/32": "28153", - "2a02:2e02:f10::/42": "12479", - "2409:8904:32a0::/39": "24547", - "2600:6c7f:91c0::/43": "20115", - "2804:7e6c::/32": "271623", - "2a00:ce60::/32": "8542", - "2a03:db80:4405::/44": "680", - "2400:adc0:110::/47": "9541", - "240a:a77b::/32": "144565", - "240a:ac5a::/32": "145812", - "2605:64c0::/47": "63294", - "2a02:26f7:b945::/46": "20940", - "2a03:e40::/41": "202042", - "2a04:11c0::/29": "48252", - "2001:559:853a::/48": "7015", - "240a:a510::/32": "143946", - "2620:31:c000::/48": "62478", - "2402:b740:8002::/33": "140867", - "2604:d600:152e::/43": "32098", - "2a02:26f7:d54c::/48": "36183", - "2a04:2e06::/32": "205258", - "2a0d:4a00:d000::/34": "29148", - "2600:1400:12::/36": "20940", - "240a:a684::/32": "144318", - "240e:3bd:c000::/37": "140315", - "2804:14c::/40": "28573", - "2a01:aea0:df2::/48": "42473", - "2409:8004:3051::/39": "24547", - "240e:108:47::/48": "131325", - "2001:418:2401:a::/35": "2914", - "2409:8020:81::/43": "56046", - "240e:438:440::/38": "4134", - "2001:559:c0ed::/46": "33652", - "2606:ae00:6080::/39": "7287", - "2804:14c:a989::/41": "28573", - "2a0b:e181::/40": "198605", - "2606:9500:200::/47": "393423", - "2001:df5:fc00::/48": "134281", - "2804:204:21e::/42": "28186", - "2804:2284::/32": "264106", - "2a00:1cb0::/32": "44219", - "2a09:e440::/46": "209185", - "2a0e:3700::/29": "174", - "2001:428:b20::/48": "7359", - "2001:559:5fd::/48": "33659", - "2001:559:84a3::/48": "33651", - "2408:8956:f6c0::/36": "17816", - "2001:678:e70::/48": "211607", - "240a:ab10::/32": "145482", - "2620:124:9000::/44": "6838", - "2804:7fd0::/32": "271711", - "2806:10ae:e::/43": "8151", - "2c0e:100:502::/20": "24863", - "2001:678:c34::/48": "207437", - "2001:67c:117c::/48": "207825", - "2001:1288::/32": "28640", - "2a0a:8d80:1::/48": "200019", - "2001:559:838b::/48": "33651", - "240a:a4b1::/32": "143851", - "2602:806:1000::/48": "397556", - "2a02:26f7:f6e2::/47": "20940", - "2409:8004:1100::/36": "24547", - "2605:b3c0::/32": "16576", - "2804:3dc:4::/40": "52967", - "2a0a:6c0::/29": "47447", - "240a:ae4a::/32": "146308", - "2801:80:140c::/48": "11097", - "2a02:26f7:ef50::/48": "36183", - "2a04:f580:9270::/48": "4809", - "2409:8055:306c::/48": "141425", - "240a:a19d::/32": "143063", - "2804:14c:6b00::/40": "28573", - "2a00:8a20::/32": "60745", - "2400:fc00:4a02::/44": "45773", - "240a:adcf::/32": "146185", - "2600:1006:d160::/34": "22394", - "2a01:240:ab02::/33": "30781", - "2a01:380:6020::/32": "13127", - "2001:df1:7f00::/48": "136726", - "2a0a:e5c0:303::/45": "207996", - "2001:4408:4308::/37": "4758", - "2402:800:f630::/41": "7552", - "2600:1400:1001::/36": "20940", - "2602:feda:1d1::/46": "137256", - "2a03:2500::/32": "59752", - "240a:a78d::/32": "144583", - "2804:2a80::/42": "53094", - "2605:4a40:900::/32": "13786", - "2a01:4ff:ff01::/48": "24940", - "2a01:ce8d:2000::/36": "51964", - "2a02:e540::/29": "8661", - "2001:468:1a08::/48": "302", - "2406:840:e10f::/48": "134477", - "240e:44d:f80::/41": "4134", - "2a02:cb80:2540::/48": "43766", - "2a02:ee80:4136::/44": "3573", - "2404:f4c0:80::/44": "17920", - "2406:7300:4::/40": "17559", - "240a:aaa9::/32": "145379", - "2a02:2630::/29": "15419", - "2605:c00:900::/37": "46920", - "2800:160:2078::/40": "14259", - "2803:7360::/32": "269800", - "2a04:d200::/29": "61438", - "2400:c540:25::/41": "59238", - "240a:a430::/32": "143722", - "2a02:2248::/32": "12615", - "2406:e401::/32": "135053", - "2602:feda:f3::/48": "205058", - "2607:f110:43::/45": "21889", - "2804:e94:120::/47": "262468", - "2a0e:1400::/29": "209106", - "2001:559:1fe::/48": "7725", - "2001:559:c2bb::/48": "7015", - "2600:6c38:b2d::/43": "20115", - "2803:e880::/32": "52468", - "2a10:cc41:100::/44": "49367", - "2001:67c:618::/48": "199061", - "2404:3d00:40c0::/45": "3573", - "2405:84c0:fdfc::/46": "210872", - "2600:880b:6000::/29": "22773", - "2605:de00:bc::/32": "30083", - "2620:48:8000::/48": "1767", - "2804:70c0::/46": "270746", - "240a:a986::/32": "145088", - "2a02:aa8::/29": "30892", - "2c0f:f188:4::/46": "28683", - "2001:520:1022::/48": "8103", - "2001:559:83e5::/48": "33668", - "2409:8720:c800::/34": "56046", - "2800:440:3::/45": "27738", - "2800:4d0:2485::/44": "52489", - "2a03:9c40:200::/48": "34655", - "2001:44b8:2066::/44": "7545", - "2400:bc80:2::/32": "38726", - "2a02:ed0:4000::/29": "47956", - "2401:2900::/40": "23679", - "2620:36:8000::/48": "33246", - "2408:8456:d040::/36": "17816", - "2606:6080:2000::/46": "32489", - "2804:40d8::/32": "265985", - "2a0f:9400:7b00::/45": "210872", - "2804:41d4::/36": "267459", - "2001:678:e20::/48": "210882", - "2408:8956:5800::/40": "17622", - "240e:964:ca00::/40": "133776", - "2600:8807:6d22::/43": "22773", - "2605:a401:8000::/47": "33363", - "2620:b1:4000::/48": "393238", - "2803:5e00::/40": "267765", - "2a0f:6dc0::/29": "200567", - "240e:473:9400::/41": "140485", - "2605:3380:43fe::/47": "12025", - "2804:267c::/32": "264345", - "2a0d:8d05:4::/32": "44103", - "2406:c140:65::/48": "132337", - "2407:5680::/32": "133476", - "240a:ae9c::/32": "146390", - "2804:14c:4100::/40": "28573", - "2001:fd0:1301::/34": "10029", - "2001:4180::/32": "5409", - "240e:473:9d50::/40": "4134", - "2600:140b:801::/38": "20940", - "2800:bf0:3804::/38": "27947", - "2804:5da4::/32": "268984", - "2607:f1c0:fe::/47": "15418", - "2804:18:6020::/43": "26599", - "2a02:2e02:8630::/41": "12479", - "2a04:4e42:601::/36": "54113", - "2404:6980:31::/46": "58431", - "240e:938:f900::/48": "139462", - "2804:e8::/39": "28280", - "2a02:6280::/32": "4589", - "2a0c:b641:7f4::/46": "213310", - "2408:8256:2d76::/48": "17816", - "2604:fb80:901::/37": "15128", - "2a0f:d700::/29": "208861", - "2606:2400::/35": "36295", - "2804:310::/46": "262688", - "2a05:c340::/29": "61157", - "2408:840c:d00::/40": "17621", - "2408:8956:1bc0::/37": "17622", - "2600:9000:2038::/41": "16509", - "2c0f:fd08::/32": "37309", - "2600:1002:b100::/42": "6167", - "2602:fd2c::/48": "398499", - "2a02:2e02:280::/37": "12479", - "2001:650:cc01::/48": "3209", - "2803:d560::/32": "269761", - "2409:8f04:c300::/34": "24547", - "2a0d:bf80::/29": "206576", - "2604:880:72::/45": "29802", - "2620:120:c000::/40": "395182", - "2a07:3501:1060::/48": "39686", - "2001:559:877d::/48": "7922", - "240e:3bb:c800::/37": "4134", - "2001:559:44d::/48": "33659", - "2a04:2e80:7::/48": "6697", - "2a05:7782::/32": "39892", - "2a0d:8780::/29": "49475", - "2405:8a00:400e::/43": "55824", - "2001:559:c1c7::/44": "7922", - "2402:2500:7100::/32": "13445", - "240a:a138::/32": "142962", - "2608:4163:1::/48": "5927", - "2a01:b740:a0a::/47": "6185", - "2001:57a:9202::/47": "22773", - "2001:df6:b000::/48": "45533", - "2402:800:5d01::/44": "7552", - "2404:f4c0:f402::/45": "209218", - "240e:964:9600::/39": "133776", - "2606:2800:4a50::/47": "15133", - "2800:160:120d::/43": "14259", - "2607:fae0::/38": "8038", - "2610:a1:3060::/48": "12008", - "2a03:ba0::/29": "201188", - "2001:559:81c6::/48": "7016", - "2401:4800:feed::/48": "38457", - "240a:afd0::/32": "146698", - "2a10:780::/32": "200780", - "2401:3bc0:801::/39": "137409", - "2408:8656:2cfd::/48": "17816", - "2800:160:15c3::/43": "14259", - "2a0b:8880::/29": "51164", - "2001:67c:1b30::/48": "15415", - "2001:4130:19::/45": "24725", - "2408:8456:5400::/42": "17622", - "240a:a02a::/32": "142692", - "240a:ab8b::/32": "145605", - "2600:140b:2001::/38": "20940", - "2a02:2008::/32": "49503", - "2400:1a00:8003::/34": "17501", - "2600:1406:bc01::/33": "20940", - "2801:1fc:18::/48": "27951", - "2001:44b8:2049::/48": "4739", - "2407:46c0::/32": "142024", - "2600:1480:2801::/37": "20940", - "2605:1980:402::/32": "13951", - "2001:4de0:2003::/48": "26769", - "240e:438:9a40::/37": "4134", - "2607:fdf0:5e4d::/46": "8008", - "2a0a:4080::/32": "47493", - "2800:d302:24::/46": "11830", - "240e:5e:1080::/34": "4134", - "2a0d:5600:34::/46": "9009", - "240a:ad5f::/32": "146073", - "2804:1d0c::/32": "61692", - "2a04:6100::/29": "60169", - "2403:f680:100::/48": "58898", - "2605:7d80::/32": "16843", - "2607:fc48:bc07::/44": "40009", - "2a00:cf8::/32": "12605", - "2a02:ac00::/29": "6717", - "2a04:e4c7:fffd::/46": "36692", - "2001:1248:9748::/43": "11172", - "2401:ee00:301::/37": "23951", - "2404:1140:1::/44": "141439", - "240a:a939::/32": "145011", - "2804:ae0:a001::/33": "28352", - "2401:d800:2110::/42": "7552", - "240e:e9:7000::/37": "134769", - "2800:440:76::/48": "27738", - "2804:1600::/32": "263421", - "2806:2f0:42e4::/39": "17072", - "2a0e:8f02:f006::/48": "211980", - "2001:df7:5d00::/48": "133296", - "2001:ee0:300::/47": "135905", - "2401:d800:ae0::/39": "7552", - "2800:160:216f::/40": "14259", - "2800:2e0::/32": "11081", - "2806:2ee::/32": "265539", - "2a0b:2bc0::/29": "13023", - "2001:559:8407::/44": "7016", - "2001:559:87a1::/48": "7015", - "2001:67c:21f4::/48": "197579", - "2401:ff80:1181::/44": "133954", - "2408:8256:3889::/43": "17623", - "240a:a58b::/32": "144069", - "2604:8540:fcd0::/47": "33353", - "2606:2800:7a10::/48": "15133", - "2a00:6c40::/32": "9103", - "2a03:9da0::/40": "42831", - "2401:d800:ded0::/42": "7552", - "2001:559:c3a0::/48": "7725", - "2409:8710::/30": "9808", - "2620:112:3000::/44": "36459", - "2804:da8:f7b0::/36": "262605", - "240a:aa07::/32": "145217", - "2604:4700::/33": "53591", - "2803:3b80:66::/43": "263702", - "2a06:f1c0::/29": "203361", - "2001:1218:6020::/45": "278", - "2404:bf40:e300::/48": "2764", - "2408:8256:378b::/48": "17816", - "240a:aa87::/32": "145345", - "2620:72:a000::/48": "20115", - "2804:14c:6f00::/40": "28573", - "2001:559:87da::/48": "7922", - "2404:bf40:f002::/41": "139084", - "2409:806b:1900::/34": "9808", - "240a:af24::/32": "146526", - "2a02:26f0:2001::/39": "20940", - "2a02:26f7:c340::/48": "36183", - "2a0a:2e40:ac01::/46": "206232", - "2001:df2:2280::/48": "135851", - "2600:100d:f100::/44": "6167", - "2a03:1e20::/32": "59925", - "2a0e:2c80::/29": "24940", - "2620:128:1000::/48": "53620", - "2a02:490::/29": "20811", - "2403:5180:6::/48": "138181", - "2408:8456:3450::/39": "17816", - "240a:a237::/32": "143217", - "2600:9000:a1a0::/38": "16509", - "2a01:8840:6::/44": "12041", - "2804:14d:1296::/41": "28573", - "2804:7514::/32": "271022", - "2001:67c:1c0::/48": "25577", - "2401:b240::/46": "133001", - "240a:a2ca::/32": "143364", - "2c0f:faa0::/32": "36998", - "240a:a92d::/32": "144999", - "2804:19ec::/35": "61827", - "2402:c800:fff1::/48": "37900", - "2408:8256:3d9c::/46": "17623", - "2602:800:1000::/45": "16970", - "2804:3f20::/32": "266641", - "2001:4818:6000::/36": "603", - "2406:bf00::/48": "38220", - "2600:6c38:c0d::/46": "20115", - "2605:4900::/32": "13576", - "2001:67c:232c::/48": "207160", - "2800:3a0:194::/32": "23201", - "2a07:a105::/30": "200486", - "2401:ee00:131::/46": "23951", - "240e:473:2920::/41": "140486", - "2803:ec10::/47": "271880", - "2a00:c700:8000::/34": "24645", - "2c0f:fea8::/32": "37248", - "2001:559:81f6::/48": "33491", - "2406:840:fe00::/44": "139231", - "240a:afb7::/32": "146673", - "2804:3e70:c008::/35": "266596", - "2a0b:a380::/48": "24931", - "2001:df0:fd80::/48": "139345", - "2409:8904:9190::/38": "24547", - "2604:880:231::/41": "29802", - "2a04:e4c0:10::/48": "36692", - "2602:feda:c52::/44": "212425", - "2803:7010::/32": "271812", - "2804:134c::/32": "263527", - "2804:2248::/32": "264602", - "2804:3d88::/32": "266537", - "2a00:bec7:ff00::/40": "12946", - "2a02:26f7:e514::/48": "36183", - "2001:559:856b::/48": "7015", - "2600:1480:c000::/40": "33905", - "2620:119:5005::/48": "13443", - "2801:80:1e71::/48": "14026", - "2a02:26f7:d288::/48": "36183", - "2408:8956:3200::/40": "17622", - "240e:108:49::/48": "23724", - "2804:6968::/32": "270268", - "2a04:dfc0::/29": "680", - "2402:800:377f::/40": "7552", - "2405:1dc0::/32": "46047", - "2604:ca00:f018::/42": "36492", - "2c0e:2710::/20": "5713", - "240e:698:4300::/40": "63835", - "2804:af4::/32": "52930", - "2804:4618:3200::/39": "266968", - "2a02:26f7:e405::/46": "20940", - "2408:80ea:6880::/41": "17622", - "2408:8456:cb40::/40": "17816", - "2409:8e35::/28": "9808", - "2800:bf0:3c04::/33": "27947", - "2804:4e08::/34": "268235", - "2804:6c78::/32": "270470", - "2804:82dc::/32": "272161", - "2001:4878:4027::/48": "12222", - "2402:800:54c5::/43": "7552", - "2402:7d80:999a::/33": "63582", - "2600:3408:300::/37": "4181", - "2605:c100::/32": "16567", - "2a03:2480:8025::/46": "200107", - "2001:559:124::/48": "33661", - "2404:f340::/34": "139070", - "2600:6c3b:4c1::/32": "20115", - "2804:13a0::/32": "263542", - "2a03:280::/32": "21211", - "2a0c:9a40:1094::/48": "34927", - "2405:1340::/32": "9654", - "2408:8459:3e30::/41": "17622", - "2607:fc58:1:87::/64": "13536", - "2a02:2e02:1d50::/42": "12479", - "2a07:72c0::/29": "57029", - "2604:2680:2::/48": "2386", - "2804:2c58:1310::/32": "265211", - "2a0a:c400::/29": "47716", - "2605:a40a:b000::/33": "33363", - "2a02:5580::/32": "34547", - "2804:11cc::/32": "263440", - "2001:1900:2364::/48": "202818", - "2600:6c2e:e84::/39": "20115", - "2604:b300:ad01::/48": "394896", - "2605:b800:788::/32": "23550", - "2803:97a0::/32": "267778", - "2804:18c::/32": "28637", - "2804:490:8800::/38": "265705", - "2001:559:c3ab::/48": "7015", - "2001:559:2ee::/48": "33657", - "240e:3bc:f100::/36": "4134", - "2a0b:9380::/43": "206002", - "2001:559:83d7::/48": "7015", - "2401:b140::/47": "54415", - "2401:ff80:1a03::/45": "133954", - "2804:14c:65fa::/45": "28573", - "2804:2114::/32": "264531", - "2001:1388:8a46::/48": "264684", - "2408:8459:9810::/42": "17623", - "2a02:e981:36::/44": "19551", - "2405:1040::/48": "135905", - "2406:da00:6000::/40": "16509", - "2408:8a22:9200::/36": "139007", - "2605:b400::/37": "25956", - "2804:2f88:e100::/35": "264897", - "2a07:b1c0::/29": "207853", - "2a10:3600::/32": "8422", - "2804:298::/34": "53087", - "2a00:4380::/29": "24751", - "2a00:52c0::/32": "29396", - "2a04:4e40:2600::/48": "54113", - "2001:559:2ad::/46": "7015", - "2403:9800:2::/43": "4648", - "2607:f758:b400::/33": "13649", - "2a00:ca0::/32": "29286", - "2a00:79c0::/32": "41998", - "2001:579:f104::/42": "22773", - "2404:bf40:a181::/48": "2764", - "240a:a69e::/32": "144344", - "2a05:e380::/46": "15739", - "2001:559:14d::/48": "7922", - "2001:559:81d1::/46": "20214", - "2001:559:83dd::/48": "33657", - "2001:579:f0bf::/39": "22773", - "2606:2800:410e::/48": "14153", - "2804:5b40::/32": "268829", - "2a00:43c0::/32": "3257", - "2a0b:e840::/29": "204949", - "2804:1a4::/32": "28140", - "2804:2584::/32": "264285", - "2a02:26f7:d904::/48": "36183", - "2001:559:8388::/48": "33491", - "240e:a6::/35": "134419", - "2600:1402:1c01::/34": "20940", - "2600:140b:4::/48": "20940", - "2a02:ac80:21::/43": "25145", - "2001:559:81cf::/48": "33659", - "2001:16b8:d300::/34": "8881", - "2404:bf40:ec01::/48": "7545", - "2406:7800::/32": "10101", - "2a00:ab80::/32": "50903", - "2a02:e200::/30": "8339", - "2405:7f00:8520::/36": "133414", - "2804:4e4::/32": "262476", - "2001:559:82bf::/48": "7725", - "2001:559:c2a3::/48": "7922", - "2800:160:15bc::/41": "14259", - "2a0f:5707:ab28::/48": "136620", - "2a10:a200::/48": "16509", - "2001:4878:8242::/48": "12222", - "2405:7400::/32": "9246", - "2408:8456:6200::/42": "17622", - "2408:8459:bc10::/42": "17623", - "2804:4e70::/32": "268261", - "2a00:6920:e000::/39": "42003", - "2a0f:600:604::/46": "51044", - "2001:df6:a900::/48": "133320", - "2804:40:8000::/36": "28657", - "2804:3fa8::/32": "265905", - "240a:a2b6::/32": "143344", - "2600:6c38:106::/47": "20115", - "2800:160:160c::/43": "14259", - "2804:6628::/32": "269538", - "2a01:4840::/32": "43942", - "2a02:26f7:c1c1::/46": "20940", - "2a07:7f00::/29": "43142", - "2001:df0:4400::/48": "17670", - "2001:1248:98a5::/48": "11172", - "2401:d800:8000::/35": "7552", - "240e:473:5520::/41": "140486", - "2408:8256:3d7c::/46": "17623", - "2a00:4802:4e10::/42": "13124", - "2401:d800:58b0::/41": "7552", - "2600:141c:f001::/31": "20940", - "2605:9680::/32": "63068", - "2a01:8980::/32": "57124", - "2a10:4800::/29": "398559", - "2401:4900:5170::/44": "45609", - "2a02:730:2001::/35": "29278", - "2a09:4c0:10b::/40": "58057", - "2a0d:2bc0::/48": "43260", - "2803:f6a0::/32": "266904", - "2804:199c::/32": "61806", - "2804:29c4::/32": "264033", - "2a05:d03a:6000::/40": "16509", - "2400:2000:d::/20": "17676", - "2404:3380::/32": "134707", - "2407:9740:fe00::/40": "139648", - "240a:a1a6::/32": "143072", - "2a06:bdc0::/35": "62240", - "2001:559:c1e8::/48": "7015", - "2001:678:504::/48": "25070", - "2001:678:b68::/48": "35684", - "2402:800:52d3::/44": "7552", - "2405:9800:bc00::/40": "133481", - "2a00:1e48::/32": "20485", - "2a0e:4680::/32": "24961", - "2001:559:c27b::/48": "33651", - "2606:5e80:ff01::/28": "22379", - "2a09:5bc0::/29": "63023", - "2001:ab0::/36": "15594", - "2620:10a:80ac::/48": "396501", - "2801:12:100::/44": "271818", - "2806:2f0:7281::/42": "17072", - "2001:559:5df::/48": "33651", - "2001:4490:4828::/46": "9829", - "2401:3340::/45": "45722", - "2402:7500:5b3::/45": "24158", - "2600:370f:73c4::/42": "32261", - "2803:41a0::/32": "262186", - "2a03:9400::/48": "41938", - "2001:df5:c780::/48": "137033", - "2001:4408:5b08::/37": "4758", - "2406:3340::/32": "139139", - "2804:5edc:8000::/33": "269061", - "2a03:720:5::/44": "57073", - "2a0f:5707:fff3::/48": "207469", - "2c0f:f618::/32": "327814", - "2001:550:100:4::/63": "174", - "2400:3dc0:301::/37": "134371", - "2403:7580::/32": "38364", - "2408:8459:6810::/42": "17623", - "2804:38bc::/32": "266498", - "2804:7d58::/32": "271555", - "2a06:1480::/29": "39371", - "2408:8956:f840::/40": "17622", - "2804:4c14:ca01::/39": "267348", - "2001:678:3e8::/48": "206108", - "2401:c900:1400::/38": "36351", - "2408:8956:a300::/40": "17816", - "2604:f480:100::/40": "54769", - "2a00:bae0::/32": "14381", - "2a02:26f7:ca44::/48": "36183", - "2403:5180:5::/48": "134666", - "2406:cf00:1000::/43": "23724", - "2408:876a::/32": "4837", - "2a02:26f7:dac4::/48": "36183", - "2402:800:b1c0::/38": "7552", - "2a0a:1900::/29": "43242", - "2001:559:3b9::/48": "21508", - "2409:8c79::/30": "9808", - "240a:a9f3::/32": "145197", - "240a:ae63::/32": "146333", - "2604:2d80:7000::/37": "30036", - "2804:3df8:6004::/35": "266566", - "2001:14d8::/32": "12371", - "2605:a401:82aa::/43": "33363", - "2606:6680:15::/44": "40676", - "2801:196::/48": "19429", - "2804:25bc:a::/42": "264299", - "2a00:fd40:3::/48": "201924", - "2804:2710::/32": "263873", - "2804:640c::/32": "269401", - "2a00:1d60::/32": "30851", - "2a02:26f0:127::/48": "20940", - "2804:3b00::/32": "52973", - "2a00:8380::/32": "15557", - "2a02:2928::/32": "39288", - "2a07:2800::/29": "21473", - "2a0b:6900:1ad::/48": "212461", - "2804:d3c:8001::/39": "52613", - "2804:1a3c::/32": "61847", - "2a0d:3140::/29": "198668", - "2001:559:5b5::/48": "22909", - "2408:8956:ea00::/40": "17622", - "2604:4000::/48": "15348", - "2a00:d400::/32": "197506", - "2001:67c:2750::/48": "200745", - "2607:8900::/32": "27298", - "2804:3c44::/32": "266200", - "2001:559:5c1::/48": "33651", - "240e:30d:5600::/30": "4134", - "2804:e30:9c00::/39": "11338", - "2a02:26f7:b740::/48": "36183", - "2a09:5040::/48": "209562", - "2a0c:7980::/29": "209372", - "2a0f:8840::/30": "21473", - "2a00:f7a0:101::/32": "21277", - "2001:559:86ef::/43": "7922", - "2001:559:c338::/48": "33659", - "2001:df1:2480::/48": "136368", - "2001:fd8:b2c0::/42": "132199", - "2408:8456:c000::/42": "17622", - "2606:2800:5150::/48": "15133", - "2607:3c80::/32": "54039", - "2400:a140::/32": "59125", - "2607:fb90:bb00::/37": "21928", - "2a0b:8340::/29": "50304", - "2c0f:fc89:60::/43": "36992", - "2001:b030:ae00::/31": "3462", - "2600:6c3a:1b::/45": "20115", - "2608:149:b::/48": "27064", - "2804:4704::/32": "267026", - "2a03:f440::/32": "12552", - "2a11:e600::/29": "42929", - "2001:559:733::/48": "33652", - "2409:8c1f:27b0::/33": "9808", - "2409:8c20:1834::/33": "56046", - "2804:d70:140::/42": "52626", - "2a02:13b0:100::/40": "48635", - "2001:dc7:1006::/34": "24151", - "2605:9d80:8001::/48": "4134", - "2800:160:2c3b::/41": "14259", - "2a02:26f7:d989::/42": "20940", - "2404:9740::/32": "135760", - "2a00:1348:10::/48": "57837", - "240a:ab7d::/32": "145591", - "2605:b980::/32": "23376", - "2a09:4c0:b01::/37": "58057", - "2c0f:f360::/34": "7489", - "2a01:9980:a::/45": "50837", - "2620:10c:c01c::/48": "6071", - "2800:bf0:2200::/46": "52257", - "2804:5a08::/32": "268741", - "2402:4800::/32": "18228", - "240e:fb:a000::/35": "136200", - "2a10:3980::/29": "397423", - "2001:67c:2170::/48": "43376", - "2606:f300:2::/47": "14135", - "2a02:26f7:f6d5::/46": "20940", - "2a02:4000::/32": "35361", - "2401:bf00::/32": "17530", - "2401:ee00:121::/44": "23951", - "240e:438:9820::/43": "140647", - "2600:1006:b1d0::/42": "6167", - "2a09:bac0:69::/48": "13335", - "2a0e:b107:11e::/48": "209294", - "2801:16e:2c::/48": "19429", - "2001:550:20c::/39": "174", - "2600:100a:f100::/44": "6167", - "2604:a900::/32": "27539", - "2a00:c78::/32": "28707", - "2001:4d0:108::/48": "24", - "2605:b100:a00::/40": "577", - "2c0f:f2a0:3::/45": "327849", - "2001:1248:84df::/42": "11172", - "2405:e4c0::/32": "131677", - "2409:8752:100::/38": "56047", - "240a:acd7::/32": "145937", - "2605:e3c0:11::/32": "398479", - "2001:579:9020::/41": "22773", - "2405:6e00:200::/42": "133612", - "2800:5f0:806::/44": "22724", - "2804:46dc:8400::/33": "267016", - "2405:1c0:6511::/45": "135062", - "2408:8956:d6c0::/36": "17816", - "2605:1080:0:ffdb::/58": "23367", - "2804:c8::/32": "28366", - "2a0f:9640::/29": "35415", - "2001:470:f8::/48": "64238", - "2001:559:86ed::/48": "22909", - "2402:4100::/32": "9326", - "240a:ae00::/32": "146234", - "2620:12f:e000::/40": "40216", - "2a0a:6200::/32": "680", - "2001:1248:9703::/45": "11172", - "2404:0:10a5::/46": "17709", - "2804:3ea4::/32": "266611", - "2806:230:102f::/48": "11888", - "2a02:26f7:e589::/42": "20940", - "2a0c:b642:fc0::/43": "213190", - "2a09:4c0:3e1::/37": "58057", - "2001:559:86de::/42": "33659", - "2001:67c:11bc::/48": "199462", - "2001:1388:2146::/37": "6147", - "240a:a0e3::/32": "142877", - "2600:1f15::/36": "16509", - "2605:5440::/44": "23328", - "2a07:8dc0::/31": "35661", - "2001:67c:330::/48": "35742", - "2001:df7:6800:2000::/48": "59194", - "240a:a3ef::/32": "143657", - "2a06:bcc0:9::/48": "203724", - "2001:db0:4003:ffff::3/37": "17766", - "2001:44b8:30d0::/45": "7545", - "2804:6fc:cc01::/38": "28158", - "2804:27c0::/32": "263920", - "2001:e68:2:100::/34": "4788", - "2404:8d05::/30": "10089", - "2404:bf40:a481::/39": "139084", - "2408:8310::/30": "4837", - "2409:8044::/34": "24445", - "240a:a66a::/32": "144292", - "2408:84f3:3250::/44": "17816", - "2804:7544::/32": "271035", - "2a02:26f7:db88::/48": "36183", - "2a03:b8c0:9::/48": "202276", - "2a05:d8c0::/29": "15391", - "2607:fda8:1018::/48": "54004", - "2620:bd:4000::/48": "398713", - "2800:160:1812::/45": "14259", - "2a07:5dc0::/29": "43260", - "2600:1002:6010::/32": "22394", - "2607:f898::/32": "13415", - "2806:230:101b::/48": "11888", - "2a01:8840:c1::/48": "207266", - "2a02:26f7:43::/48": "20940", - "2a10:9f80::/31": "207459", - "2402:800:522b::/41": "7552", - "2a03:db80:5461::/46": "680", - "2001:3c8:5007::/48": "17479", - "2408:8459:8650::/36": "17816", - "2600:2501:3000::/28": "26801", - "2803:e000::/32": "262215", - "2a00:1588:dc00::/38": "43380", - "2a04:e00::/48": "54103", - "2001:438:fffd:13::/64": "20940", - "240a:a42c::/32": "143718", - "2a02:26f0:c0::/48": "34164", - "2a0c:e340::/47": "30150", - "2001:4408:7b00::/37": "4758", - "2401:d800:bcb0::/41": "7552", - "2600:370f:74e5::/39": "32261", - "2607:f6f0:a000::/46": "16553", - "2800:a30:1709::/34": "262187", - "2a02:2378::/32": "15895", - "2001:1248:9962::/43": "11172", - "2607:f148::/48": "11734", - "2806:2f0:5061::/40": "17072", - "2001:67c:2abc::/48": "199552", - "2401:e700::/32": "38628", - "2600:140b:9401::/38": "20940", - "2620:8b:8000::/48": "23307", - "2804:21f8:f::/43": "262272", - "2806:263:9300::/37": "13999", - "2001:559:78f::/48": "7015", - "2401:d800:5fe0::/43": "7552", - "2620:131:1065::/48": "14618", - "2804:1f26:ca5a::/48": "265020", - "2a02:26f0:f5::/44": "20940", - "2400:d400:d51::/48": "45671", - "2404:a800:3101::/33": "9498", - "2406:4c00::/32": "9509", - "240e:44d:1c80::/41": "4134", - "2a05:3950::/32": "201503", - "2a00:4802:230::/41": "13124", - "2001:820::/32": "16186", - "2001:1218:5004::/47": "278", - "2400:8b00:300::/42": "45727", - "2600:6c38:b1::/41": "20115", - "2606:df00:9::/48": "20150", - "2607:f8f0:600::/48": "271", - "2803:b780:1::/48": "65000", - "2408:8856::/40": "17816", - "2803:7e00::/33": "28026", - "2a00:ff40::/32": "6782", - "2001:1388:70c6::/37": "6147", - "2404:bf40:85c0::/48": "7545", - "2407:900::/32": "58451", - "240e:3b3:4c00::/35": "136200", - "2600:6c38:505::/46": "20115", - "2605:3b80:cad::/48": "9009", - "2804:50d4::/32": "268413", - "2001:559:c022::/47": "33657", - "2401:d800:bb50::/42": "7552", - "2607:fcd0:fa80:4901::/53": "8100", - "2620:1fb::/36": "12061", - "2806:2f0:314::/44": "17072", - "2a02:26f0:3001::/39": "20940", - "2a0b:fd40::/29": "12637", - "2001:468:1203::/37": "11537", - "2001:559:107::/48": "7015", - "2408:8459:e650::/36": "17816", - "2a0f:52c1::/48": "212319", - "2001:559:80b0::/45": "33657", - "2001:678:588::/48": "57260", - "2607:f0d0:3502:7::/58": "36351", - "2804:e80:7800::/32": "262676", - "2a02:26f0:d700::/48": "34164", - "2a0e:b780::/31": "205581", - "2400:47c0::/32": "136014", - "2407:f800:501::/40": "38182", - "240a:a5c0::/32": "144122", - "2804:4f30::/32": "268310", - "2a0c:b641:160::/44": "211139", - "2001:ac8:3a::/41": "9009", - "2001:df5:1400::/48": "133255", - "2604:d600:66a::/45": "32098", - "2607:c300::/32": "22915", - "2a03:4940::/32": "3292", - "2a04:8f40:1000::/48": "205505", - "2001:67c:2038::/48": "197444", - "240e:473:9120::/41": "140486", - "2600:1480:8801::/37": "20940", - "2001:559:876d::/43": "7922", - "2620:10a:80f4::/48": "27299", - "2620:149:a14::/48": "6185", - "2a02:fc8:3::/32": "42572", - "2a0e:d380::/48": "203566", - "2001:67c:634::/48": "198089", - "2409:804d:900::/35": "9808", - "2409:8c28::/38": "56041", - "2a0e:9300::/48": "17818", - "2a0e:b107:1161::/48": "35761", - "2405:4000:801:6::/38": "38082", - "2600:6c2e:635::/39": "20115", - "2607:fae0:2000::/33": "8038", - "2a02:4560:4::/32": "60157", - "2a0c:a200::/29": "62183", - "2406:9dc0:70::/44": "212705", - "240a:a57d::/32": "144055", - "2603:c002:9310::/37": "31898", - "2a04:dec0::/29": "60044", - "2a09:e1c0::/32": "200462", - "240e:473:2f20::/41": "140486", - "2610:f0:afb::/34": "22925", - "2620:160:e300::/44": "4196", - "2a05:dd80::/29": "1764", - "2401:d800:95e0::/38": "7552", - "240a:aa6c::/32": "145318", - "240a:ac25::/32": "145759", - "2806:230:3002::/48": "265594", - "2a01:4b40:4800::/35": "21299", - "2606:2800:5033::/48": "15133", - "240e:651:3000::/36": "134419", - "2600:c80d::/30": "7018", - "2a00:f580::/32": "35819", - "2001:4998:1b1::/44": "10310", - "2607:f928:3::/48": "22645", - "2a00:1d58:fa01::/46": "47524", - "2a07:e700::/29": "43260", - "2a01:5043:efd::/48": "202196", - "2a0b:b40::/29": "51815", - "2001:550:9001::/39": "174", - "2001:1248:5ae6::/47": "11172", - "2001:1b18::/32": "21385", - "2a02:922::/35": "49292", - "2001:918:fffb::/45": "3303", - "2001:b400:f210::/45": "3462", - "2406:9b40::/32": "24262", - "2a02:2578:1a30::/32": "51375", - "2a02:26f7:f540::/48": "36183", - "2a04:b902::/32": "16509", - "2a0c:dd40::/32": "42675", - "2804:63a4::/32": "269374", - "2a04:3584::/30": "3308", - "2a09:bac0:38::/47": "13335", - "240e:1c:c000::/31": "4134", - "2a10:3400::/29": "210054", - "2c0f:fcb0:4000::/35": "36916", - "2806:2f0:2061::/46": "22884", - "2600:140f:6401::/38": "20940", - "2401:7400:ec01::/35": "4773", - "240a:a245::/32": "143231", - "2620:101:2001::/46": "16417", - "2001:1b08::/32": "20900", - "2602:fef7:eef::/39": "396192", - "2806:217:302::/37": "28394", - "2a07:c882::/32": "207249", - "2400:dcc0:a804::/39": "38631", - "2408:842a::/29": "4837", - "240a:a824::/32": "144734", - "240e:438:7a40::/37": "4134", - "2a02:ac80:c001::/35": "25145", - "2a0a:5680::/29": "35048", - "2001:43f8:780::/48": "37555", - "2800:d302:28::/43": "11830", - "2a03:2760::/32": "49115", - "2a05:22c0::/29": "42567", - "2804:4afc:8000::/35": "267276", - "2a07:22c1:ffe5::/48": "207740", - "2c0f:ec80:9000::/33": "37315", - "2a00:cf00::/32": "41937", - "2a03:7420::/48": "8751", - "2001:67c:3cc::/48": "56700", - "2402:800:c000::/34": "7552", - "2406:5800:ff00::/48": "45577", - "2600:1408:3c00::/48": "35994", - "2605:a404:c0::/46": "33363", - "2803:7d40::/32": "264680", - "2001:4408:101::/38": "4758", - "2a00:1a28:100::/48": "48618", - "2001:678:ce0::/48": "206384", - "2001:43a0::/32": "36965", - "240a:aa2b::/32": "145253", - "2800:4f0::/48": "28006", - "2803:a40::/47": "263817", - "2400:e000::/32": "18070", - "2401:e900::/46": "23991", - "240a:a989::/32": "145091", - "240e:3b9:2800::/38": "4134", - "2800:200:b4f0::/36": "12252", - "2803:ea10:1::/45": "271927", - "2405:6e00:688::/45": "18291", - "2408:8957:5c00::/40": "17622", - "240a:ae65::/32": "146335", - "2a01:a620::/45": "56911", - "2a01:cd01:8020::/48": "28708", - "2a06:f240::/29": "207355", - "2405:204:9000::/33": "55836", - "240a:a1b5::/32": "143087", - "240a:a1d0::/32": "143114", - "2600:1f70:1000::/40": "16509", - "2804:14c:cc00::/40": "28573", - "2804:7af8::/32": "271403", - "2a03:53a0::/32": "31736", - "2001:67c:4b4::/48": "206153", - "2001:448a:5130::/41": "7713", - "2408:8459:f600::/40": "17816", - "2602:fec3:f00::/40": "62563", - "2607:f110:9::/43": "21889", - "2408:8456:5440::/39": "17816", - "2600:1413:e001::/29": "20940", - "2605:f500:8107::/43": "1828", - "2607:2780::/48": "11878", - "2a07:6100::/29": "202979", - "2001:df1:d900::/48": "136797", - "240a:a37b::/32": "143541", - "240a:ae98::/32": "146386", - "2600:370f:7483::/42": "32261", - "2a00:4901::/32": "206509", - "2a07:2902:400::/38": "3303", - "2001:503:3227::/48": "7342", - "2001:4978:500::/45": "13331", - "2406:8700::/32": "7575", - "240a:aabe::/32": "145400", - "2800:160:1a8a::/45": "14259", - "2400:c980::/40": "132816", - "2402:800:5b1d::/42": "7552", - "2604:2e8b:e000::/35": "30036", - "2a02:2ad0:633::/44": "702", - "2a03:5a00:2f::/48": "203784", - "2a0f:ca84::/40": "208046", - "2409:8924:2900::/38": "56046", - "2402:c100:c03::/32": "23673", - "240e:5f:600c::/48": "4134", - "2620:0:dc0:4820::/48": "683", - "2804:1c::/32": "11844", - "2001:468:f0ff::/48": "11164", - "2402:8640::/47": "137491", - "2804:77e0::/32": "271205", - "2a00:c2a0::/32": "25376", - "2a02:26f7:f6d4::/48": "36183", - "2600:4407:c036::/34": "6130", - "2605:dd40:8bbb::/48": "398549", - "2804:14c:5b93::/42": "28573", - "2a00:1fa0::/32": "8359", - "2001:559:c234::/48": "33652", - "240e:e:d000::/37": "139887", - "2607:9e00::/35": "30536", - "2a0b:f301:465::/30": "62240", - "2401:4900:5da0::/41": "45609", - "2620:119:50e3::/44": "14413", - "2a03:a8a0::/29": "203195", - "2a0a:7d80:f::/48": "6697", - "2a02:7820::/32": "201873", - "2001:df6:2800::/48": "136639", - "2403:fc0::/32": "398704", - "240a:ac7a::/32": "145844", - "2606:a600:4::/48": "397933", - "2804:1e0::/32": "262784", - "2804:7ba0::/32": "271443", - "2a02:2ab0:430::/39": "702", - "2a0c:4880::/29": "212660", - "240a:ad6e::/32": "146088", - "2620:132:f702::/36": "394977", - "2a05:4140:181::/46": "211358", - "2a06:d980::/29": "51539", - "2a0e:46c4:1404::/40": "211930", - "2404:1980::/32": "131199", - "2607:fc48:c08::/48": "40009", - "2804:1ef8::/34": "264457", - "2001:559:82eb::/48": "7015", - "2400:7180::/32": "45671", - "240a:abf8::/32": "145714", - "2600:1016:b1e0::/33": "6167", - "2001:5a0:a000::/33": "6453", - "2803:2180:8000::/33": "27941", - "2804:8f8::/32": "2914", - "2a01:120::/29": "12348", - "2001:978:3401::/36": "174", - "2407:f700::/34": "132215", - "240e:44d:2300::/41": "140345", - "240a:a529::/32": "143971", - "2610:20:516a::/48": "5744", - "2804:6114::/32": "269211", - "2a00:e580::/29": "25424", - "2a0b:ac40::/29": "206485", - "2001:df5:9000::/48": "36351", - "2406:7400:30::/46": "131269", - "2a03:2980::/32": "49641", - "2001:67c::/48": "47490", - "2400:da00:405::/33": "38365", - "240e:950:5000::/36": "134419", - "2a02:26f7:c58c::/48": "36183", - "2408:8000:5004::/48": "139007", - "240e:3b8:5600::/34": "4134", - "2800:160:1d52::/44": "14259", - "2a00:fb8:2700::/35": "8881", - "2602:feb4:60::/44": "25961", - "2a02:26f7:cac5::/46": "20940", - "2401:fd80:9ff::/48": "138177", - "2a00:1d70::/32": "39020", - "2620:171:43::/45": "715", - "2a04:1b00:4::/47": "61005", - "2620:149:1050::/39": "714", - "2803:5840::/32": "262145", - "2804:240:3000::/32": "262798", - "2804:105c::/32": "263631", - "2a00:b0a1::/32": "203434", - "2a03:1e80:ff9::/45": "8590", - "2001:500:6b::/48": "27321", - "2001:559:2ca::/47": "33657", - "2001:6f8:821::/48": "3257", - "2001:dd8:12::/48": "18366", - "2a00:e100::/32": "196819", - "2a09:b280:ff60::/47": "208753", - "2402:800:f480::/39": "7552", - "2a00:8ee0::/32": "50673", - "2a04:4e40:f810::/41": "54113", - "240a:a704::/32": "144446", - "2600:1415:a001::/35": "20940", - "2604:2880::/48": "46562", - "2620:123:2081::/46": "30103", - "2a02:2b58::/29": "51074", - "2001:440:1878::/47": "1878", - "2404:3b40::/32": "133272", - "2407:c000::/32": "9270", - "240a:a7d5::/32": "144655", - "2606:4700:a2::/41": "13335", - "2a00:f826:9::/48": "34549", - "240e:473:fb50::/37": "4134", - "2800:550:2b::/32": "7004", - "2a01:c50f:8040::/35": "12479", - "2a03:8f87:1::/48": "51793", - "2a0c:a9c7:2::/47": "62135", - "2a0f:9201:1::/29": "45009", - "2001:559:1ce::/48": "7016", - "2804:4344::/32": "267559", - "2a11:6c0::/40": "211083", - "2001:678:368::/48": "15935", - "2400:1700:303::/32": "4628", - "2606:1a40:f000::/45": "398962", - "2a02:2298:8000::/36": "15544", - "2a05:35c0::/46": "60781", - "2a02:2698:202e::/38": "51645", - "2001:559:80c0::/48": "7922", - "2400:a980:5cff::/48": "133111", - "2407:3e40::/32": "137165", - "2407:a600::/36": "18004", - "2602:fdbb:a::/45": "17144", - "2602:ffc4:6::/47": "393398", - "2620:53:e000::/48": "394626", - "2a02:26f7:d781::/46": "20940", - "2001:470:e7::/48": "15011", - "240a:aa68::/32": "145314", - "2600:141d:8001::/25": "20940", - "2800:160:1116::/44": "14259", - "2a10:c4c0::/29": "212679", - "240a:a203::/32": "143165", - "2600:1406:1001::/37": "20940", - "2800:260::/31": "19429", - "2a00:5ee0::/32": "44925", - "2a00:7380:feed::/48": "205868", - "2a05:3a80::/48": "201499", - "2a0f:d480::/48": "205942", - "2600:1408:b000::/48": "35994", - "2602:fda3:4::/36": "397942", - "2604:d600:692::/45": "32098", - "2806:2f0:2464::/43": "22884", - "2a04:1b00:a::/47": "61007", - "2a09:4e04::/31": "208861", - "2001:550:4603::/39": "174", - "2408:8256:357d::/46": "17623", - "2409:8915:2d00::/38": "56044", - "2001:559:c073::/48": "33659", - "2001:678:730::/48": "47869", - "2606:ae00:bee1::/39": "7287", - "2607:f290::/32": "6106", - "2a00:9b60::/40": "48635", - "2a07:7140::/29": "202907", - "2a0d:a400::/29": "30836", - "2600:370f:7400::/45": "32261", - "2604:0:c1::/48": "40484", - "2001:43f8:1090::/48": "328267", - "2401:d800:c60::/40": "7552", - "240a:a91d::/32": "144983", - "2604:5680::/32": "14860", - "2804:16d0:fb80::/37": "52697", - "2001:1418::/29": "12779", - "2a00:1f30::/29": "29081", - "2a10:1fc0::/48": "133398", - "2001:500:6f::/48": "30128", - "2407:1e00:1004::/32": "45158", - "2a02:26f7:c305::/46": "20940", - "2001:67c:2f4::/48": "47137", - "2402:800:312b::/41": "7552", - "2408:80ea:7880::/42": "17623", - "2620:135:6054::/40": "22697", - "2a0a:e202:800e::/43": "33438", - "2a0c:9a40:808b::/48": "398646", - "2a0f:2340::/29": "41332", - "2001:559:8019::/48": "33491", - "2001:579:a1d4::/42": "22773", - "2620:11a:6000::/44": "32064", - "2a02:26f7:c500::/48": "36183", - "2001:559:499::/48": "33651", - "2001:559:c2c8::/48": "33491", - "2001:fd8:3400::/42": "132199", - "2404:3d00:410a::/43": "3573", - "240a:a3e1::/32": "143643", - "2806:230:4028::/48": "265594", - "2a06:b700::/29": "201616", - "2606:2800:4070::/46": "15133", - "2801:16e:4::/48": "19429", - "2806:230:5014::/48": "265594", - "2a02:26f7:e901::/46": "20940", - "2a03:90c0:3f0::/37": "199524", - "2400:ddc0:2100::/32": "4785", - "2607:fcd0:fa80:7701::/52": "8100", - "2a00:1e18::/31": "8896", - "2001:f20:1000::/48": "9875", - "2001:fd0:407::/35": "10029", - "2607:5b00::/32": "12260", - "2a01:6a40:1::/48": "30720", - "2001:5014:400:5::/21": "1273", - "2603:b000::/27": "11796", - "2a04:fcc0::/29": "21396", - "2a0d:3480:14fd::/48": "22773", - "2404:ffc0::/47": "62707", - "240e:101:4000::/30": "4134", - "2801:1d:2800::/48": "262589", - "2a01:8840:cd::/48": "207266", - "2a0e:b107:139::/48": "212227", - "2001:67c:1c::/48": "41884", - "2001:44b8:606f::/32": "4739", - "2408:8656:3800::/40": "17623", - "2a02:6b9::/29": "208722", - "2001:559:150::/48": "13367", - "2403:cd40::/32": "10075", - "240a:ae3d::/32": "146295", - "2801:b8::/32": "52886", - "2a00:1e80::/32": "21473", - "2001:559:3bf::/48": "33657", - "240e:3b6:2c00::/35": "134774", - "240e:473:1150::/40": "4134", - "240e:473:5750::/40": "4134", - "2605:40c0::/32": "397554", - "2620:1b::/44": "17103", - "2804:694::/34": "262596", - "2001:550:1c01::/39": "174", - "2a00:1fd0:ec00::/48": "29033", - "2a02:26f7:c9c8::/48": "36183", - "2001:67c:1b8::/48": "8916", - "240a:a409::/32": "143683", - "2606:2180:1::/48": "22241", - "2806:2f0:1280::/48": "22884", - "2a03:7204::/32": "197023", - "2a0c:c900::/29": "30931", - "2001:559:8172::/45": "7922", - "2001:559:c37b::/48": "33667", - "2a09:ce00::/29": "208861", - "2800:160:1c0f::/43": "14259", - "2001:480:52::/44": "668", - "2001:978:2a03::/35": "174", - "240a:a162::/32": "143004", - "240a:ac50::/32": "145802", - "240e:979:6e00::/40": "134770", - "2600:140f:f401::/38": "20940", - "2606:7f00:100::/40": "32307", - "2a02:2ab0:730::/32": "702", - "240a:ad9a::/32": "146132", - "2a01:410::/46": "30844", - "2a06:1700::/46": "200651", - "2804:38f4::/32": "266514", - "2001:255::/32": "38255", - "2001:44a0::/32": "2506", - "2405:7f00:ab00::/37": "133414", - "2408:840c:9c00::/40": "17621", - "2606:2800:4130::/47": "15133", - "2804:b18::/32": "52941", - "2804:230c::/32": "264139", - "2a06:1b00:104::/46": "8302", - "2001:4278::/32": "8346", - "2405:2040::/38": "48024", - "240a:aa3b::/32": "145269", - "2c0e:2000::/29": "5713", - "2001:678:58::/48": "198147", - "2408:8956:5700::/40": "17816", - "240a:ac0e::/32": "145736", - "240a:ac23::/32": "145757", - "2600:6c7f:9380::/44": "10796", - "2603:f760::/29": "262287", - "2a00:55a0:3::/48": "58018", - "240a:a9e8::/32": "145186", - "2a01:878::/32": "12302", - "2a0b:4880::/46": "48614", - "2001:559:5bd::/48": "22909", - "2407:1100::/32": "132825", - "2604:7c00::/32": "40244", - "2804:d20::/32": "262700", - "2804:db0:100::/40": "52862", - "2403:1cc0:3201::/46": "45352", - "240a:adba::/32": "146164", - "2a01:9900::/32": "21171", - "2a02:26f7:cc49::/46": "20940", - "2a04:2080::/29": "34758", - "2a0e:eec6::/32": "398343", - "2001:678:fdc::/48": "206362", - "2401:1d40:2f01::/40": "59019", - "2401:b800::/32": "38248", - "2600:1012:f100::/44": "6167", - "2606:2440::/32": "3838", - "2a02:2010:22a0::/45": "20978", - "240a:a174::/32": "143022", - "2804:2990::/32": "264022", - "2a06:2f80::/29": "60316", - "2a0f:9400:772b::/45": "53356", - "2605:ee00::/43": "29990", - "2806:2f0:24c0::/35": "17072", - "2a00:1c28::/29": "20764", - "2a02:80::/29": "34244", - "2001:41a8::/37": "6762", - "2400:dcc0:a904::/38": "38631", - "2401:d800:9550::/42": "7552", - "2409:8c85:aa31::/45": "9808", - "2602:802:b040::/48": "399788", - "2800:110:2200::/48": "264630", - "2400:6680::/32": "13414", - "240e:44d:4e00::/41": "140345", - "2606:2800:6030::/46": "15133", - "2804:5698::/32": "268011", - "2a09:e1c1:efd0::/48": "207713", - "240a:a080::/32": "142778", - "240a:a403::/32": "143677", - "2605:bf80:100::/40": "11889", - "2a0b:11c0:bea::/48": "198682", - "2001:559:8498::/47": "7922", - "2001:67c:10f8::/48": "199233", - "2408:8656:2cfe::/47": "17623", - "2a00:11c0:78::/48": "42473", - "2408:8956:3500::/40": "17816", - "2602:feda:b99::/46": "212995", - "2605:a401:80c1::/45": "33363", - "2a03:d400:25::/39": "198913", - "2001:bf7:541::/38": "44194", - "2001:4c58::/30": "8286", - "2600:100d:a020::/40": "22394", - "2620:137:8::/48": "396253", - "2a03:2880:f25d::/46": "32934", - "2a07:3500:12d0::/48": "33915", - "2001:470:2c::/46": "6939", - "2402:79c0:100::/44": "7342", - "2604:bc40::/33": "22188", - "2409:8020:51::/42": "56046", - "240e:678:2600::/31": "4134", - "2a02:26f7:d301::/46": "20940", - "2408:8256:3b7c::/46": "17623", - "240e:64:c000::/24": "4134", - "2604:b900::/33": "11042", - "2804:43d8::/32": "267594", - "2a04:4e40:a10::/41": "54113", - "2001:4220:3::/45": "36935", - "2a0a:90c0:1055::/44": "205080", - "2a10:4dc0::/32": "62240", - "2406:1940::/32": "131925", - "2604:4d40:7fff::/48": "399196", - "2804:70c0:13::/48": "270746", - "2001:43f8:790::/48": "6968", - "240a:a995::/32": "145103", - "2800:68:3a::/47": "61468", - "2a02:7c00::/32": "21060", - "2001:1248:557c::/40": "11172", - "2001:44b8:605b::/48": "4739", - "2402:800:93ee::/37": "7552", - "2407::/62": "4761", - "240a:a4a7::/32": "143841", - "2a07:8ec0::/36": "51254", - "2402:1b80:9000::/33": "63956", - "2605:9f80::/32": "63018", - "2a10:640::/32": "1680", - "2a0d:2682::/32": "212292", - "2401:d600::/32": "45204", - "2403:8a00::/32": "17686", - "2407:5740::/48": "140799", - "2604:d600:1649::/46": "32098", - "2804:2fe0::/32": "264918", - "2a02:22d0::/44": "61323", - "2a03:d9c0:2000::/48": "3214", - "2400:89c0:1010::/42": "4808", - "240e:44d:5600::/41": "140345", - "2602:ffc1::/32": "36731", - "2804:145c:8c90::/38": "263327", - "2001:559:8562::/48": "33651", - "2804:2e8:8::/47": "262847", - "2804:f80::/32": "61893", - "2a03:73a0::/29": "203368", - "2a03:b540::/32": "31287", - "2a04:e800:5010::/47": "57976", - "2400:89c0:6000::/48": "23724", - "2402:5300::/37": "45903", - "2a02:5be0::/47": "42427", - "2a0a:2307::/48": "20853", - "2a10:7900::/29": "398559", - "2001:559:455::/48": "7016", - "2a00:5f40::/29": "8469", - "2401:d800:cf0::/39": "7552", - "240e:473:4450::/39": "4134", - "2a01:4d8::/32": "39122", - "2a02:26f7:f305::/46": "20940", - "2c0f:ef68::/46": "37662", - "2001:df6:2180::/48": "135738", - "2402:7d80:240::/48": "24348", - "2402:91c0::/32": "139875", - "240a:a814::/32": "144718", - "2800:3c0::/35": "19863", - "2803:ba0::/46": "267756", - "2806:370:40a0::/44": "28403", - "2404:c800:8204::/29": "4760", - "2406:e940:1001::/32": "9449", - "2803:aa80::/32": "263698", - "2a0b:4580::/32": "20860", - "2409:8028:3800::/40": "56041", - "240e:11:9000::/30": "4134", - "2804:fe4::/32": "28343", - "2804:732c::/32": "270900", - "2001:559:8659::/48": "33659", - "2a0c:600::/29": "8399", - "2001:fd8:168::/40": "4775", - "2407:e700:12::/47": "132680", - "240e:438:9440::/38": "4134", - "2804:14c:c684::/41": "28573", - "2804:8110::/33": "272429", - "2001:67c:c::/48": "48136", - "2001:4430:4000::/39": "17853", - "2404:e680:1141::/32": "18409", - "2408:84f3:3020::/43": "17816", - "2620:32::/48": "4468", - "2800:9e0::/32": "26505", - "2a06:7243:f::/43": "62425", - "2001:559:45c::/48": "33652", - "2400:9380:9070::/47": "4809", - "2402:9b00::/40": "45796", - "2408:8456:e210::/42": "134543", - "2600:140f:e01::/35": "20940", - "2620:119:17::/48": "36692", - "2804:1094:b020::/36": "263641", - "2001:678:600::/48": "204600", - "2406:840:5880::/47": "139317", - "2408:8459:1a30::/41": "17622", - "2804:612c:4000::/32": "269218", - "2a02:57e0::/32": "59779", - "2a04:4e40:5a40::/44": "54113", - "2400:70c0::/32": "58507", - "2401:1740:3000::/48": "136600", - "2408:8957:b00::/40": "17816", - "2a02:2e0:41c::/48": "206564", - "2408:8459:9210::/42": "17623", - "2408:84f3:4410::/42": "134543", - "240a:a356::/32": "143504", - "240e:473:6200::/41": "140485", - "2804:e8:200::/32": "28280", - "2a02:6680:2100::/42": "16116", - "2a04:2b00:14aa::/48": "203961", - "2602:ffe4:c05::/46": "21859", - "2a00:4802:b00::/37": "13124", - "2401:4900:5270::/44": "45609", - "2402:800:561d::/42": "7552", - "2001:df6:5680::/48": "142020", - "2404:7a80::/29": "2518", - "240e:44d:80::/41": "4134", - "2602:fe55::/36": "267", - "2607:9e00:4002::/35": "30536", - "2803:9800:94c3::/39": "11664", - "2001:559:c1bf::/48": "33489", - "2001:df5:4000::/48": "132647", - "2804:5504::/32": "268684", - "2a03:a300:5000::/44": "35104", - "240a:a0f2::/32": "142892", - "2a00:61e0::/32": "60294", - "2a01:9e40::/32": "31287", - "2a05:3181::/32": "31514", - "2001:559:4a5::/46": "33657", - "2001:559:8594::/48": "33287", - "2001:67c:1144::/48": "16175", - "2001:67c:1388::/48": "13030", - "2401:ff80:1b05::/44": "133954", - "240a:a7cd::/32": "144647", - "2604:d600:91b::/45": "32098", - "2402:c680::/32": "134518", - "2405:1c0:6365::/43": "55303", - "2408:8956:ad00::/40": "17816", - "2803:4580:8210::/44": "52468", - "2a01:5ec0:7000::/36": "44244", - "2a02:2e02:2530::/41": "12479", - "2a05:4143::/32": "212271", - "2402:7500:f9ff::/48": "24158", - "2804:988::/32": "28239", - "2804:5914::/32": "268168", - "2a0f:5701:3520::/48": "205593", - "2408:8756:f00::/44": "136958", - "2408:8957:6d00::/40": "17816", - "2604:4500:900::/46": "29802", - "2605:9300:2::/48": "13767", - "2620:0:28a8::/48": "33522", - "2001:1a11:7b::/48": "8781", - "2607:f3a0:a004::/48": "399816", - "2a00:ce80::/46": "50535", - "2a04:b0c0::/44": "201017", - "2405:e840::/32": "4049", - "240e:1f:d000::/36": "134764", - "2600:6c38:8ca::/45": "20115", - "2001:df7:5380::/47": "3970", - "2001:4d20:4000::/34": "8569", - "2401:d800:9260::/40": "7552", - "2a02:26f7:d640::/48": "36183", - "2a06:1c5:a4::/41": "207455", - "2a06:e881:53ff::/48": "209859", - "2c0f:ee20::/32": "328251", - "2406:2700:1000::/48": "24151", - "2804:36f4::/32": "266382", - "2a0e:b105:534::/46": "20473", - "2001:67c:2ea0::/48": "47992", - "2401:d800:72b0::/41": "7552", - "2406:840:e1ef::/48": "141237", - "2408:8459:1f30::/41": "17622", - "2408:81a3:c800::/48": "140707", - "2408:8957:5b00::/40": "17816", - "240a:aa79::/32": "145331", - "2804:3c34::/32": "266196", - "2804:18b0::/32": "61947", - "2a00:1ae8::/32": "42517", - "2001:559:8481::/48": "33491", - "2001:559:84ce::/48": "33659", - "240a:a9de::/32": "145176", - "2607:c080::/32": "32767", - "2a01:9780::/32": "209754", - "2a02:28d0::/32": "6877", - "2600:6000:fa69::/48": "11351", - "2804:8020::/32": "271731", - "2a02:26f7:c68b::/42": "20940", - "2001:cb0:2207::/44": "4637", - "2402:800:567f::/40": "7552", - "2a01:c50e:1d00::/34": "12479", - "2a02:2e02:9550::/42": "12479", - "2a0d:2406:510::/46": "39753", - "2620:106:c005::/48": "11039", - "2a03:5640:f533::/41": "2906", - "2001:1b70:82c0::/48": "158", - "2409:8c1f:5b80::/34": "9808", - "240a:a38d::/32": "143559", - "2a02:26f7:fbc4::/48": "36183", - "2402:cec0::/32": "137566", - "240a:a616::/32": "144208", - "2606:1040::/35": "12243", - "2804:6eb4::/32": "270614", - "2001:559:84ed::/48": "33489", - "2400:cb00:410::/46": "13335", - "2600:1417:58:200::/46": "20940", - "2620:79:e000::/48": "398065", - "2804:291c:4100::/32": "263998", - "2804:33b4::/32": "265412", - "2409:8050:1802::/40": "56047", - "2001:408:8001::/33": "14793", - "240e:472::/32": "4134", - "2800:160:1d13::/42": "14259", - "2804:1e38:4005::/35": "264415", - "2a02:26f7:35::/48": "20940", - "2a0d:2687::/32": "209650", - "2607:f6f0:202::/48": "27224", - "2a0d:d6c0::/29": "200350", - "2602:feda:ca1::/48": "39753", - "2a07:6800::/29": "203443", - "2001:579:9260::/44": "22773", - "2a00:1480:5::/48": "39737", - "2a06:7a05::/48": "207682", - "2804:2100::/32": "264526", - "2a02:26f7:d604::/48": "36183", - "2a11:2180::/29": "56897", - "2001:559:800::/33": "7922", - "2604:3fc0:2000::/35": "396300", - "2a02:128:16::/48": "49465", - "2a0b:7ec0:deae::/29": "206728", - "2401:ff80:1081::/44": "133954", - "2408:8256:398b::/48": "17816", - "2408:8256:3d80::/44": "17623", - "2408:8459:ae50::/35": "17816", - "240a:a33c::/32": "143478", - "2a0c:c440::/29": "44489", - "2001:4998:21::/46": "10310", - "2604:cf00::/32": "40230", - "2001:4868:10d::/38": "23148", - "2401:d800:7e70::/40": "7552", - "2403:f680:111::/48": "58898", - "2a00:1fa2:8000::/40": "28884", - "2a01:9800::/35": "52070", - "2409:8c51::/30": "56047", - "2804:14d:1800::/40": "28573", - "2a0a:2f00:1::/46": "49683", - "2001:648:2801::/44": "5408", - "2804:6b78::/32": "270402", - "2a02:26f7:bbc9::/42": "20940", - "2a02:26f7:e809::/46": "20940", - "2a03:9cc0::/29": "5463", - "2a04:1b00:12::/47": "61007", - "2001:df1:6800::/48": "45671", - "2406:7ec0::/44": "38074", - "2620:122:8003::/48": "399731", - "2620:171:26::/47": "715", - "2804:44b0::/32": "267647", - "2a02:1f0::/32": "34080", - "2001:559:c13b::/45": "7922", - "2404:e801:200c::/46": "55430", - "2406:9e00:1110::/47": "55352", - "2c0f:eb00:700::/40": "37148", - "2804:3b34::/35": "266135", - "2a00:1200::/32": "33828", - "2a02:26f7:d84c::/47": "36183", - "2001:559:8191::/46": "33659", - "2401:ff80:100d::/46": "133954", - "2607:f6f0:203::/48": "19930", - "2620:1ec:2a::/43": "8075", - "2803:5440:ca::/48": "264738", - "2804:5020::/32": "268371", - "2a0c:7600::/29": "205190", - "2001:470:114::/44": "6939", - "2400:e340:3::/32": "136450", - "2408:8456:6c00::/42": "17622", - "2600:1411:2::/34": "20940", - "2a01:cb20:9000::/33": "3215", - "2001:df0:eb::/48": "38635", - "2409:805b:2905::/46": "56040", - "2a03:5b80::/32": "20870", - "2001:559:86d5::/48": "7725", - "2402:800:382b::/41": "7552", - "2408:8256:3861::/40": "17623", - "2606:7d00:c001::/48": "14749", - "2620:110::/47": "16692", - "2804:7f7:a000::/35": "10429", - "2a02:890::/32": "5631", - "2a05:b680:7::/48": "41028", - "2c0f:f948:a::/48": "37582", - "2001:1248:98a7::/44": "11172", - "2401:d800:ba30::/41": "7552", - "2604:980:7006::/32": "21859", - "2607:fcd0:fa80:3b03::/53": "8100", - "2800:160:1864::/47": "14259", - "2806:2f0:91c1::/48": "17072", - "2a02:850::/44": "30971", - "2001:4de0:2000::/48": "33438", - "2606:2e00:8008::/45": "36351", - "2804:14c:de8a::/43": "28573", - "2a06:e380::/47": "203507", - "2001:559:717::/48": "33659", - "2001:4488:5::/34": "7713", - "2001:4878:b141::/48": "12222", - "2409:8a7d::/30": "9808", - "2605:7700::/48": "36024", - "2804:378c::/32": "266420", - "2a0a:6040:ac69::/48": "211954", - "2607:fdf0:5e07::/43": "8008", - "2804:970:8000::/33": "263086", - "2a04:2800::/29": "206114", - "2a0a:7300:1000::/34": "56911", - "240e:388::/29": "4812", - "2600:1f01:48c0::/47": "16509", - "2607:f178::/48": "30217", - "2001:df2:e500::/48": "14907", - "2800:160:2cc3::/43": "14259", - "2a02:2ab0:213::/44": "702", - "2406:bd00:de00::/48": "55651", - "2409:8052:1000::/47": "56047", - "2620:0:950::/48": "395184", - "2a00:8a00:4000::/36": "8983", - "2a02:26f7:d008::/48": "36183", - "2a02:26f7:f649::/46": "20940", - "2a02:cdc0::/29": "59715", - "2409:877b::/29": "9808", - "2801:0:200::/48": "8053", - "2804:32d4::/32": "265100", - "2804:71c8::/32": "270811", - "2a0d:2581:fffc::/48": "209261", - "2001:559:8788::/46": "7015", - "2604:d600:65c::/42": "32098", - "2800:160:123e::/41": "14259", - "2800:b70:400::/48": "262191", - "2a0c:6600:1::/46": "48011", - "2a0e:b107:ac::/46": "209218", - "240a:a8f7::/32": "144945", - "2a0c:b641:219::/48": "209661", - "2c0f:ed08::/32": "327764", - "2001:67c:2840::/48": "25046", - "2401:ff80:1581::/46": "133954", - "2607:fa48:fc11::/29": "5769", - "2610:e0:a003::/42": "2572", - "2800:160:1c8a::/43": "14259", - "2a09:d280::/29": "56834", - "2001:559:c27a::/48": "33652", - "2001:1248:5b69::/43": "11172", - "2001:1260:2::/48": "28537", - "2607:f800::/32": "26480", - "2804:1f04::/32": "53046", - "2a01:9e00:ac53::/48": "206202", - "2a0f:da80::/29": "34856", - "240a:ab93::/32": "145613", - "2604:3c80::/32": "26792", - "2a02:26f7:5::/48": "20940", - "2a04:4e40:ec00::/48": "54113", - "2a04:92c7:17::/42": "62240", - "2402:e280:2154::/46": "134674", - "2804:6248::/32": "269288", - "2a0b:78c0::/32": "42830", - "2620:0:5070::/48": "302", - "2804:6840::/32": "269680", - "2a01:87c0::/32": "51406", - "2a03:1d87:2::/32": "31117", - "2001:df4:1580::/48": "137146", - "2001:fd8:224::/46": "132199", - "2803:3660::/32": "267905", - "2001:67c:2644::/48": "6908", - "2a0a:e5c0:1d::/46": "207996", - "2a0e:b105:738::/46": "20473", - "2606:d00::/32": "3926", - "2001:559:c032::/45": "22909", - "2001:678:424::/48": "43442", - "2a01:280:318::/48": "206320", - "2a02:5c00::/29": "12580", - "2a0e:7bc0::/29": "57610", - "2a0f:1740::/29": "60262", - "2001:559:160::/48": "20214", - "2401:7000:d900::/47": "45177", - "2605:fa80::/36": "11990", - "2606:4b40::/32": "31791", - "2607:f180:3200::/33": "35908", - "2806:2f0:3261::/46": "17072", - "2a02:26f7:f884::/48": "36183", - "2001:358::/32": "4680", - "2001:16a2:c0e3::/48": "39891", - "2401:7640::/32": "63771", - "240a:a912::/32": "144972", - "240e:438:5840::/38": "4134", - "2a0c:8540:6::/48": "42198", - "2001:67c:17ac::/48": "42251", - "2001:67c:27ac::/48": "8881", - "2400:7400:e027::/48": "23736", - "2409:8004:3021::/43": "24547", - "2803:5c80:6051::/46": "64114", - "2402:6800:5::/48": "22822", - "2403:300:1540::/36": "714", - "2605:49c0:2::/47": "15094", - "2806:230:5005::/48": "11888", - "2a02:1620:8005::/33": "1290", - "2a07:a343:3c00::/44": "9009", - "2600:6c38:b1f::/42": "20115", - "2620:83:8000::/48": "16", - "2a00:1b88::/32": "29075", - "2a00:4802:a10::/42": "13124", - "2a0d:d740:105::/48": "210036", - "2a0f:9400:7300::/44": "207890", - "2001:559:8774::/48": "33668", - "2a01:8740::/48": "57344", - "2a00:7147:22::/48": "51430", - "2a02:ae80::/29": "200139", - "2a07:c580::/29": "202527", - "2804:408c::/32": "265966", - "2a01:bd80::/29": "41881", - "2a0c:93c0:8062::/48": "212465", - "2001:559:24b::/45": "33491", - "2401:1700:a::/43": "55666", - "2401:d800:bfe0::/43": "7552", - "240a:a7b9::/32": "144627", - "2a02:26f7:d700::/48": "36183", - "2a02:26f7:fb81::/46": "20940", - "2a0b:e44:1::/48": "205809", - "2001:559:1fc::/48": "33491", - "2001:1a11:ef::/43": "42298", - "2607:f5d8:4::/43": "11096", - "2a00:b980::/29": "41000", - "2a02:26f7:c201::/46": "20940", - "2a05:9282::/29": "31019", - "240e:fd:d000::/36": "140312", - "2607:f9d0::/39": "11979", - "2a02:26f0:ab01::/37": "20940", - "2a02:2da0::/32": "47447", - "2a0d:2146:8586::/44": "39526", - "2400:dcc0:a704::/36": "38631", - "2600:9000:1199::/46": "16509", - "2806:20d:322e::/37": "32098", - "2800:bf0:826b::/48": "27947", - "2a00:18a8::/32": "29246", - "2a02:26f7:bfc5::/46": "20940", - "2401:8700:7f::/48": "36408", - "2800:160:1ff0::/47": "14259", - "2800:bf0:110::/42": "27947", - "2a01:5b40:6::/44": "12996", - "2a02:26f7:f2c9::/46": "20940", - "2a04:6650::/31": "210156", - "2001:418:4001:4::/64": "20940", - "240e:44d:4e80::/41": "4134", - "2620:17:a000::/48": "32334", - "2401:d800:b5d0::/42": "7552", - "2604:cd40::/32": "32899", - "2803:420::/32": "28120", - "2408:8456:8040::/39": "17816", - "2409:8008:3100::/36": "24547", - "240e:108:10e2::/43": "4134", - "2806:230:602b::/48": "11888", - "2a02:26f7:ef08::/48": "36183", - "240a:a2e7::/32": "143393", - "2600:802:721::/36": "701", - "2804:1a0c::/32": "61833", - "2a02:2e02:9d40::/38": "12479", - "2001:559:7e8::/48": "21508", - "2001:67c:1528::/48": "50321", - "2408:870c:2060::/36": "17621", - "240a:af53::/32": "146573", - "240a:ad88::/32": "146114", - "2a01:6ae0::/29": "62227", - "2409:8018:28f1::/48": "9808", - "2604:6840:1e00::/40": "33438", - "2607:4300::/47": "55286", - "2804:1488::/32": "28125", - "2804:19d8::/32": "61822", - "2a01:6b0::/32": "1820", - "2a01:9700:13d4::/46": "8376", - "2602:fcc1::/36": "399204", - "2605:dd40:8ff0::/44": "16509", - "2a01:238:20b::/37": "6724", - "2001:559:147::/48": "7015", - "2001:978:1c04::/39": "174", - "2602:ffe4:c4d::/46": "21859", - "2804:ca4::/32": "262336", - "2804:3b74::/32": "266150", - "2a00:f900::/32": "43925", - "2602:fff3::/36": "11512", - "2a00:b880::/32": "44943", - "2c0f:fd18::/32": "37343", - "2600:100b::/32": "6167", - "2804:3a88::/32": "266094", - "2804:4f8:a002::/45": "28263", - "2001:67c:65c::/48": "198903", - "2404:e00:165::/48": "15695", - "2401:73c0::/47": "136792", - "2409:8a39::/30": "9808", - "2a01:c0::/32": "31708", - "2a09:7c47::/32": "44094", - "2401:ff80:1b85::/44": "133954", - "2403:bc00:1::/48": "45668", - "2607:fb10:5017::/44": "2906", - "2400:6280:107::/48": "132280", - "2606:5000::/39": "209", - "2a00:1260::/32": "31641", - "2a10:dac0:100::/48": "50399", - "2606:5000:400::/39": "209", - "2a00:1d10::/32": "49909", - "2001:67c:71c::/48": "59824", - "2001:df6:2280::/48": "141557", - "2620:b0:8000::/48": "54297", - "2803:1520::/32": "266688", - "2a03:8ae0::/32": "35677", - "2001:559:8087::/48": "33651", - "2001:ee0:ca40::/39": "45899", - "2001:4878:219::/48": "12222", - "2403:ba00::/34": "24521", - "2408:8957:1500::/40": "17816", - "240a:a810::/32": "144714", - "2a01:618:400::/46": "43519", - "2001:500:4::/48": "10745", - "2401:2d00:8000::/46": "17625", - "2600:370f:72aa::/45": "32261", - "2804:14d:b484::/41": "28573", - "2a00:ad87:3b02::/47": "22216", - "2402:800:551d::/42": "7552", - "2408:8957:6700::/40": "17816", - "240e:18:12::/41": "4812", - "2a00:1560:17::/44": "29684", - "2a01:3f7::/48": "57021", - "2a02:26f7:bd::/48": "20940", - "2a0e:fd45:40fc::/48": "3280", - "2001:559:1f7::/48": "7922", - "240a:a8c9::/32": "144899", - "2607:f738:f00::/41": "17184", - "2804:934::/32": "263059", - "2804:42f4::/32": "267539", - "2a02:6c20:7::/48": "211085", - "2408:8956:5d00::/40": "17816", - "240a:a77e::/32": "144568", - "240e:44d:480::/41": "4134", - "2620:119:4000::/43": "7726", - "2a01:5741:1::/32": "57763", - "2a02:26f7:e808::/48": "36183", - "2001:559:19:e001::/42": "7922", - "2401:2a00:1004::/34": "7468", - "2600:6c38:8b1::/44": "20115", - "2a02:348:1f::/41": "35470", - "2001:550:3002::/39": "174", - "2800:160:1431::/45": "14259", - "2804:4ca0:200::/32": "267381", - "2a03:1a80::/32": "39878", - "2a02:1a8::/32": "203865", - "2001:559:c256::/48": "7725", - "2001:67c:214::/48": "25057", - "2001:1248:97ef::/36": "11172", - "240a:ae5b::/32": "146325", - "2602:fc5d:707::/48": "399866", - "2804:385c::/39": "262687", - "2804:7d3c::/34": "271548", - "2001:16c0::/42": "31732", - "240a:af29::/32": "146531", - "2607:f7a8:827::/38": "16657", - "2a02:f784:30::/48": "25252", - "2a0e:b107:a60::/44": "213105", - "2408:8459:3a20::/44": "17816", - "240a:a8b7::/32": "144881", - "2a02:6f60::/32": "12617", - "2a02:ac80:b01::/37": "25145", - "2a03:e00::/32": "50163", - "2001:559:3cc::/48": "7015", - "2400:c700:b001::/33": "55644", - "240a:af34::/32": "146542", - "2600:380:f107::/48": "64011", - "2607:fdf0:5ec1::/46": "8008", - "2804:14c:bbae::/47": "28573", - "2a01:c50e:200::/37": "12479", - "2602:802:2000::/40": "55244", - "2804:f8c:8090::/41": "263591", - "2a0e:fd45:da6::/43": "44103", - "2a0f:6fc5:3e84::/48": "43694", - "2001:559:c351::/48": "33657", - "240e:44d:5500::/41": "140345", - "2620:11b:e0c1::/48": "202818", - "2a02:26f7:b888::/48": "36183", - "2a04:9a00:1021::/46": "203396", - "2a07:7c80::/29": "61251", - "2a0e:fc80::/36": "212286", - "2001:44c8:4800::/41": "131445", - "2408:8256:2f8e::/43": "17623", - "240a:a7c1::/32": "144635", - "2600:6c38:6::/44": "20115", - "2620:100:f00d::/48": "46571", - "2803:b780:2::/44": "27742", - "2001:678:4b0::/48": "197942", - "2a0e:b107:bf6::/48": "140938", - "2001:559:c12e::/48": "7015", - "2001:67c:4d0::/48": "43354", - "2001:1b70:82ad::/46": "158", - "240e:3b4:3e00::/33": "140308", - "2610:b0:40fa::/45": "3573", - "2a02:26f7:f8d1::/46": "20940", - "2804:658c:10::/46": "269499", - "2001:67c:5c0::/48": "205076", - "2400:dc00:4006::/48": "131111", - "2803:9800:91c0::/37": "11664", - "2a00:1d58:801d::/46": "47524", - "2a02:e100::/29": "8426", - "2a05:a040::/29": "43652", - "2a0d:76c0::/48": "209608", - "2401:1c00:3100::/33": "38809", - "240e:438:2820::/43": "140647", - "2610:a1:1082::/48": "397218", - "2a02:26f7:f70c::/48": "36183", - "2001:559:83bb::/48": "33660", - "2404:8000:a0::/44": "17451", - "2408:8710::/30": "4837", - "240a:ab4e::/32": "145544", - "2605:dd40:8bea::/48": "398549", - "2610:b0:c140::/40": "701", - "2804:90::/32": "28580", - "2404:bf40:e301::/37": "139084", - "2600:1408:11::/44": "20940", - "2804:1a30::/38": "61844", - "2a02:26f7:da84::/48": "36183", - "2804:67c0::/32": "269648", - "2001:67c:17a0::/48": "24929", - "2401:d800:a0::/41": "7552", - "2404:7c80::/32": "133661", - "2405:200::/39": "55836", - "2600:6c7f:91f0::/44": "20115", - "2604:85c0::/45": "16524", - "2804:6444:2000::/32": "269417", - "2404:dd00::/32": "58687", - "240e:44d:6300::/41": "140345", - "240a:ae0a::/32": "146244", - "2a03:2880:f251::/45": "32934", - "2a04:780::/29": "39806", - "2001:4490:da00::/46": "9829", - "2605:1080:a1::/48": "23367", - "2a02:26f7:e640::/48": "36183", - "2a05:4145:dead::/48": "211522", - "2a07:5202::/47": "213208", - "2a0b:b87:ffa5::/48": "212450", - "2404:bf40:a040::/48": "7545", - "240e:3b4:2200::/37": "136198", - "2803:2d60:2000::/32": "14754", - "2001:16d8:cd00::/35": "16150", - "2600:140f:5401::/38": "20940", - "2600:1a0e:270e::/48": "10307", - "2800:370:4a::/48": "28006", - "2804:638::/32": "28178", - "2a09:f400::/29": "38983", - "2001:559:443::/48": "7015", - "2001:ed8::/32": "18422", - "240a:a1b0::/32": "143082", - "2804:14c:da00::/40": "28573", - "2607:9180::/32": "395477", - "2a01:8fb::/29": "3209", - "2a0d:d40::/32": "200318", - "240a:adc6::/32": "146176", - "2620:102:4000::/43": "4130", - "2602:ffc8::/45": "20278", - "2a02:26f7:d4cd::/46": "20940", - "2a02:26f7:ea05::/46": "20940", - "2001:559:c0fb::/48": "33652", - "2a01:1b0::/32": "31477", - "2a02:7b00::/36": "48328", - "2a02:26f0:31::/46": "20940", - "2a04:e00:200::/47": "39855", - "2406:daa0:10c0::/44": "16509", - "2409:8052:3900::/32": "9808", - "2604:6d00:3000::/48": "36223", - "2804:6408::/32": "269399", - "2a00:1d36:1340::/32": "9121", - "2a04:bc40:1dca::/48": "209813", - "2001:550:1b0a::/48": "397496", - "2001:1248:a537::/44": "11172", - "2800:160:1b0f::/43": "14259", - "2401:d800:2bf0::/37": "7552", - "2403:4040::/32": "131937", - "240a:a67f::/32": "144313", - "240a:a7e2::/32": "144668", - "2a03:2880:f051::/45": "32934", - "2001:253:133::/48": "142099", - "2604:d600:130d::/43": "32098", - "2607:f838::/32": "22581", - "2804:cfc::/32": "262887", - "2804:340c::/32": "265434", - "2a02:26f7:fb41::/46": "20940", - "2a0b:1d80::/29": "202694", - "2001:559:85a4::/48": "7015", - "2600:1419:c01::/38": "20940", - "2804:47b8::/32": "267073", - "2804:4a64::/32": "267237", - "240e:965:9800::/33": "4134", - "2804:93c:9000::/33": "52878", - "2804:6124::/32": "269215", - "2a01:7400::/32": "47544", - "2a03:7380:1e00::/42": "13188", - "2001:67c:1890::/48": "12552", - "240e:473:7750::/40": "4134", - "2600:370f:4065::/43": "32261", - "2607:f790:fff6::/48": "398351", - "2a03:b480::/32": "24993", - "2001:67c:2bac::/48": "12886", - "2600:5400:ce01::/34": "19108", - "2602:fff6:7::/48": "54561", - "2605:a404:17a::/45": "33363", - "2606:6080:1000::/46": "32489", - "2a01:5040:1021::/34": "43996", - "2a0d:5dc0::/29": "12453", - "2001:468:cff::/48": "40220", - "2408:8456:ee40::/40": "17816", - "2603:c012:6000::/36": "31898", - "2620:149:1150::/42": "714", - "2800:5f0:8001::/34": "22724", - "2a00:e20::/39": "25048", - "2a01:190::/42": "1764", - "2a0e:9580::/32": "61381", - "2001:67c:2c54::/48": "13189", - "2400:ba40::/32": "64271", - "2402:1200:2::/47": "24523", - "2404:bf40:8780::/48": "7545", - "2804:e94:20::/43": "262468", - "2804:5854::/32": "268122", - "2a0a:acc1::/32": "3258", - "2001:559:806a::/48": "7922", - "2a01:a380::/32": "12693", - "2001:559:3d0::/48": "33489", - "2404:138:134::/33": "38022", - "2409:804d:2100::/35": "9808", - "2a0b:b140::/29": "62000", - "2001:12f0:d40::/40": "1916", - "2804:57b0::/32": "268080", - "2a04:400::/29": "34254", - "2a0d:9080::/29": "56708", - "2409:802f:2a06::/39": "56041", - "2804:3c3c::/32": "266198", - "2a03:7720::/43": "201094", - "2a0a:eac2:1::/29": "31143", - "2a10:7340::/29": "52126", - "2401:d800:90b0::/41": "7552", - "2800:160:1fc8::/46": "14259", - "2a00:59a0::/32": "42442", - "2a0e:c6c1::/32": "209419", - "2a0f:240::/29": "60262", - "240e:87c:400::/24": "4134", - "2600:1005:f010::/39": "22394", - "2602:808:3000::/44": "398883", - "2a0b:7e80::/29": "43372", - "2408:8956:ec00::/39": "17622", - "2803:33c0::/32": "265721", - "2804:7a60:200::/32": "271367", - "2a02:26f7:dec4::/48": "36183", - "2604:d600:14::/44": "32098", - "2804:24c::/32": "262605", - "2a0a:5ac0::/32": "212696", - "2605:fb80:e030::/36": "16584", - "2804:6a94::/33": "270345", - "2a06:e043::/32": "198507", - "2803:6900:1::/48": "52423", - "2804:6f60::/32": "270656", - "2001:550:2304::/40": "174", - "2804:1128:c100::/34": "263661", - "2a02:587:1c00::/33": "6799", - "2001:270::/32": "3786", - "2401:ff80:1789::/46": "133954", - "2800:160:1590::/44": "14259", - "2801:80:12d0::/48": "263892", - "2a00:1578:100::/40": "205148", - "2a0b:4340:1501::/48": "48883", - "2001:57a:6031::/35": "22773", - "2600:1415:d801::/34": "20940", - "2600:9000:218c::/43": "16509", - "2607:f1d8::/40": "7795", - "2a0d:f407:1003::/48": "47687", - "2001:559:568::/48": "7015", - "2001:1248:5bcb::/42": "11172", - "2409:8b06::/28": "9808", - "2409:8050:3802::/40": "56047", - "2409:8051:1802::/40": "56047", - "2804:4028::/32": "265938", - "2a00:79e0:101::/48": "36385", - "2a02:26f7:d208::/48": "36183", - "2806:2f0:7041::/42": "17072", - "2a02:26f7:dd85::/46": "20940", - "2409:8000:2800::/40": "56048", - "2803:1920::/32": "266671", - "2a01:4180::/33": "200517", - "2a03:90c0:500::/41": "199524", - "2001:678:468::/48": "39431", - "2401:9140::/46": "136897", - "2405:1e40::/47": "58475", - "2a02:e60::/32": "47506", - "2a0b:b86:fd::/48": "3280", - "2001:918:ffb8::/41": "3303", - "2402:800:9947::/43": "7552", - "2600:1900:4120::/44": "396982", - "2001:559:c26c::/48": "33668", - "2409:8051:3900::/32": "9808", - "2001:468:1900::/40": "57", - "2001:67c:106c::/48": "58102", - "2400:6480::/32": "55507", - "2a02:26f0:e4::/44": "20940", - "2a09:db40::/48": "60781", - "240e:979:5e00::/40": "134770", - "2a03:f580::/47": "15763", - "2001:559:469::/46": "7922", - "2001:678:6d8::/48": "39334", - "2402:800:9263::/43": "7552", - "2620:12e:b000::/46": "7046", - "2800:160::/46": "14259", - "2804:51c:7001::/38": "262495", - "2804:1b80::/32": "262993", - "2804:5ef8::/32": "269068", - "2a06:1e00:50::/48": "60695", - "2a0d:8e00::/30": "197793", - "2600:6c7f:90e2::/48": "20115", - "2604:5500:c000::/34": "19165", - "2800:482:4002::/44": "14080", - "2a02:2e02:3ba0::/37": "12479", - "2001:550::/47": "174", - "2001:559:824a::/48": "33287", - "2402:ef0b:c000::/36": "24515", - "2602:fcf6:101::/48": "42394", - "2602:feda:3ab::/48": "141706", - "2603:c002:9410::/39": "31898", - "2804:58b8:11::/48": "15695", - "2a07:bec0::/29": "201466", - "2a09:bac0:196::/47": "13335", - "2001:df2:5c00::/48": "133947", - "2001:df0:4780::/48": "45278", - "2406:9900::/32": "17936", - "2407:52c0::/32": "139484", - "2804:5d6c::/32": "268971", - "240a:a2e0::/32": "143386", - "2001:67c:2020::/48": "48598", - "2403:a200:9999::/48": "133111", - "2408:8957:cdc0::/38": "17622", - "2607:fb10:7120::/41": "2906", - "2607:fd28:a004::/48": "62753", - "2620:12c:9004::/48": "395359", - "2400:7400:e028::/46": "38044", - "2402:e380:12d::/43": "139073", - "2408:877d::/32": "133118", - "2604:d600:163e::/41": "32098", - "2604:f6c0::/32": "22987", - "2a0c:7900::/29": "205052", - "2001:559:f4::/46": "7922", - "2001:67c:64::/48": "2121", - "2001:1248:5aa7::/43": "11172", - "240a:ae95::/32": "146383", - "2a0c:e640:1000::/48": "57401", - "2001:67c:19ec::/48": "47208", - "2001:559:c397::/44": "33657", - "2001:df7:ec00::/48": "7575", - "2408:8256:356d::/48": "17816", - "240e:3bc:3e00::/33": "140308", - "2804:1298:e000::/35": "263486", - "2a00:ece0::/32": "6718", - "2001:559:575::/46": "7016", - "2001:df0:ba00::/48": "132753", - "2001:df6:5c00::/48": "55938", - "2001:18b8:3a::/41": "29789", - "2409:8904:6240::/42": "24547", - "2602:fcff:10::/48": "57164", - "2806:268:2405::/40": "13999", - "2001:44c8:43d0::/44": "45430", - "2402:f800:ef01::/40": "7602", - "2404:fe40::/32": "131982", - "2a02:26f7:d549::/46": "20940", - "2a06:e881:5500::/45": "209864", - "240e:473:3050::/39": "4134", - "2404:b1:5000::/32": "9891", - "2800:430:c100::/35": "23487", - "2a01:8840:39::/48": "207266", - "2a0e:fd45:1337::/48": "207740", - "2602:fe65::/46": "396872", - "2602:ff71:1021::/48": "29802", - "2a05:3484:272::/48": "20655", - "2605:a900:2200::/35": "46887", - "2800:160:1245::/46": "14259", - "2803:c860::/32": "267819", - "2a03:2887:ff3f::/41": "63293", - "2600:380:cc80::/35": "7018", - "2602:feda:b42::/48": "142130", - "2806:230:1016::/48": "265594", - "2a01:98c0::/48": "44882", - "2a02:26f7:c944::/48": "36183", - "2a0f:a40::/29": "398559", - "2a0f:9400:7726::/48": "53356", - "2a04:f580:9070::/48": "4809", - "2001:e30:1111::/48": "2697", - "2406:daa0:c040::/44": "16509", - "2408:84f3:9240::/37": "17816", - "2600:1008:9010::/40": "22394", - "2600:1806:20::/44": "16552", - "2606:5000:1600::/39": "209", - "2a01:9700:10a0::/46": "8376", - "2a0b:3540::/45": "204413", - "2001:559:2c3::/48": "33659", - "240a:a3ca::/32": "143620", - "2602:230::/32": "6128", - "2001:67c:4ac::/48": "198692", - "2602:801:f005::/44": "32590", - "2a0e:46c5::/32": "49752", - "2a03:7203::/32": "42322", - "2a04:9bc0::/29": "62186", - "2001:4490:efe8::/46": "9829", - "2402:8100:30b0::/41": "55644", - "2405:1c0:6a33::/41": "55303", - "2409:8904:d070::/40": "24547", - "2804:14c:8794::/46": "28573", - "2806:2f0:6041::/42": "17072", - "2001:67c:2010::/48": "21344", - "2a09:d2c0::/32": "49181", - "2401:340::/32": "55720", - "2800:160:1378::/45": "14259", - "2806:230:fff2::/48": "265594", - "2a03:1e01::/32": "9145", - "2a0a:3340::/29": "25424", - "2001:1248:986b::/45": "11172", - "2a0b:f740::/29": "198776", - "2001:67c:29cc::/48": "3330", - "2001:7e8::/32": "6661", - "2605:5e00::/32": "40317", - "2606:b100::/32": "32393", - "2803:1240::/41": "27855", - "2400:1c00:b::/45": "45143", - "2402:3a80:c064::/48": "38266", - "2a06:700::/29": "200665", - "2001:1248:96b0::/45": "11172", - "2405:9800:f000::/48": "45458", - "240e:438:1240::/37": "4134", - "2607:a500:9::/45": "12025", - "2804:71f8::/32": "270823", - "2a02:5d01::/29": "28972", - "2400:cb00:a800::/48": "13335", - "2606:1a40::/45": "398962", - "2804:1288:2000::/32": "263482", - "2a02:26f7:36::/48": "36183", - "2405:3200::/39": "17639", - "2407:7000::/32": "9500", - "2409:8051:3100::/37": "9808", - "2804:2cb8::/42": "265239", - "2a0b:2b40::/29": "42035", - "2a04:a140::/32": "62217", - "2001:559:22::/47": "7922", - "2001:ce0:9::/34": "3662", - "2001:4818:2000::/36": "36030", - "240a:aa49::/32": "145283", - "240a:af91::/32": "146635", - "240e:44d:7400::/41": "140345", - "2a00:efc0::/32": "29394", - "2a0e:b107:9d4::/47": "213262", - "2409:8d10::/30": "9808", - "2602:fde7::/36": "5650", - "2806:230:5003::/48": "11888", - "2a0b:11c0::/48": "198682", - "2a0f:8a80::/29": "62009", - "240e:2e:8000::/25": "4134", - "2620:74:20::/48": "396549", - "2804:12f4::/32": "263506", - "2a00:1288:85::/46": "10310", - "2404:7cc0:7f00::/47": "10100", - "2804:1dcc::/32": "264394", - "2001:559:8d::/46": "13367", - "2a00:1ec8:28::/43": "2854", - "2a01:77e0::/32": "51088", - "2a00:1628::/32": "21360", - "2001:df5:d380::/48": "138754", - "2402:2380::/32": "134102", - "2408:8956:8a00::/40": "17622", - "2606:cd00:2::/43": "40845", - "2620:11b:3002::/48": "36351", - "2804:7d30::/32": "271545", - "2806:2f0:6181::/42": "17072", - "2a00:bd20::/32": "8455", - "2a0b:b87:ffbb::/48": "212831", - "2400:9380:9000::/46": "4809", - "2801:14a:d0::/42": "3816", - "2804:5510::/32": "268687", - "2804:6be0::/32": "270431", - "2a09:4c2:2e::/48": "205947", - "2001:6f8:1502::/36": "4589", - "2600:1402:5001::/34": "20940", - "2806:286::/33": "265524", - "2a04:4240::/29": "48871", - "2001:4170::/32": "13092", - "240a:a204::/32": "143166", - "2600:1806:111::/48": "16552", - "2607:f380:804::/48": "257", - "2800:870::/35": "6762", - "2804:7438:4::/32": "270967", - "2a01:4642:100::/38": "9042", - "2605:a404:67::/44": "33363", - "2804:26d4::/32": "263860", - "2804:4164::/32": "267430", - "2804:7d54::/32": "271554", - "2a02:26f0:b000::/48": "34164", - "2001:559:81bb::/48": "33651", - "2400:ebc0::/32": "59022", - "240a:a770::/32": "144554", - "240e:60c:b800::/33": "4134", - "2a02:d107:e000::/47": "200088", - "2001:370:b::/32": "9607", - "2607:6000:b00::/40": "12189", - "2804:1230::/34": "263462", - "2a02:7860::/32": "201859", - "2407:7200:5001::/32": "10098", - "240a:a90a::/32": "144964", - "2606:a000:707::/48": "11955", - "2a00:c000::/32": "41090", - "2a02:26f7:d4cc::/48": "36183", - "240a:aa3e::/32": "145272", - "2804:2c0::/33": "262834", - "2a01:7540::/32": "13097", - "2a05:27c0::/47": "210021", - "2001:67c:2458::/48": "2119", - "2001:48e0::/32": "40498", - "2406:2000:1a0::/46": "10229", - "2804:2364::/32": "264159", - "2804:64e8::/32": "269457", - "2001:7f0::/39": "13237", - "2001:1210::/32": "2549", - "2406:4b00:b::/32": "132602", - "2804:5250::/32": "268510", - "2a00:e180::/32": "57353", - "2a05:3400::/29": "200675", - "2a0f:6580:10::/48": "34828", - "2602:804:4000::/40": "32655", - "2607:fc58:1:52::/64": "13536", - "2806:20d:5049::/46": "32098", - "2a02:26f7:e1c5::/46": "20940", - "2a04:4e42:201::/37": "54113", - "2a07:2ec0::/32": "48111", - "2001:df2:5100::/48": "133929", - "2408:8256:3b7f::/48": "17816", - "2a00:4800:1f0::/38": "13124", - "2408:84f3:3050::/44": "17816", - "240a:aadf::/32": "145433", - "2600:6c38:61b::/45": "20115", - "2804:2a64::/32": "262644", - "2804:3568::/32": "266284", - "2804:44d4::/32": "267656", - "2001:559:8231::/46": "7922", - "2620:12e:f000::/40": "46771", - "2804:46ec::/32": "267020", - "2a00:1288:f044::/36": "10310", - "2001:454d::/30": "9924", - "240e:6b6::/36": "136199", - "2604:9f00:800:8::/64": "36040", - "2607:fca8:598b::/32": "17139", - "2a01:b600::/32": "43989", - "2a02:2188::/48": "60848", - "2c0f:f548::/32": "327963", - "2804:18:1870::/37": "26599", - "2001:67c:1304::/48": "48297", - "2404:3d00:4142::/47": "3573", - "240a:ac51::/32": "145803", - "240e:3b1:c800::/37": "4134", - "2600:380:f10f::/48": "64011", - "2600:1419:1401::/38": "20940", - "2607:fa38::/32": "25649", - "2a01:ade0::/32": "24641", - "2a02:2ad0:247::/44": "702", - "2a09:740::/32": "62214", - "2a09:71c0::/29": "44486", - "2a0f:4340::/29": "211626", - "2001:67c:12a0::/48": "41108", - "2408:8245:1200::/32": "4837", - "2806:20d:5a07::/44": "32098", - "2a02:3d8::/32": "39093", - "2804:7aa4::/33": "271383", - "2a02:17e8:d00::/32": "13002", - "2a10:f240::/29": "211385", - "2001:67c:1cc::/48": "50906", - "2409:8904:2da0::/38": "24547", - "2604:d600:1514::/46": "32098", - "2804:109c::/32": "262854", - "2001:fd8:b330::/44": "4775", - "240a:a135::/32": "142959", - "2600:803:22d::/41": "701", - "2600:100e:9110::/36": "6167", - "2606:9500:300::/36": "19893", - "2a00:f10::/39": "48635", - "2001:44b8:3080::/48": "7545", - "2604:d600:c82::/45": "32098", - "2804:274::/32": "53217", - "2a02:26f0:4b01::/37": "20940", - "2a09:f780::/48": "203395", - "2804:14d:9eb1::/41": "28573", - "2001:df7:6800:1182::/52": "59194", - "240a:a74f::/32": "144521", - "2604:7f80::/32": "27467", - "2001:67c:29e0::/48": "21131", - "2604:34c0::/32": "25780", - "2a02:7e0::/32": "200163", - "2a02:f48::/40": "44515", - "2620:109:1000::/40": "16958", - "2001:7f8:23::/48": "25309", - "2401:d800:2950::/42": "7552", - "2402:800:5a55::/42": "7552", - "2409:806a:900::/35": "9808", - "240e:982:8300::/37": "133775", - "2607:f308::/32": "6405", - "2607:fb10::/43": "2906", - "2a00:5a20::/47": "199289", - "2a01:a5e0::/32": "201808", - "2a02:ad8:5900::/32": "12389", - "2a06:5040:6::/48": "3214", - "2001:67c:2c24::/48": "15542", - "2401:d800:780::/42": "7552", - "240a:a5f9::/32": "144179", - "2603:90f4::/32": "7843", - "2a00:c1c0::/32": "31241", - "2a04:53c0:82::/47": "47784", - "2001:559:38e::/48": "33652", - "2405:1c0:6153::/42": "55303", - "240e:37e:ac00::/31": "4134", - "2a03:4bc0:2100::/48": "30893", - "2a04:4340::/31": "61349", - "2604:d600:54d::/46": "32098", - "2607:f5b5::/47": "60781", - "2a0d:5040::/31": "8315", - "2804:3188::/32": "265022", - "2001:559:c07c::/47": "33651", - "2001:579:523c::/41": "22773", - "2409:8904:8b90::/37": "24547", - "2607:fcd0:fa80:2e02::/51": "8100", - "2804:5548::/32": "268700", - "2a07:be80::/29": "212773", - "240a:a93c::/32": "145014", - "2803:e600:ff01::/40": "18809", - "2804:1f10::/32": "2715", - "2a10:4647::/46": "50046", - "2001:559:462::/48": "33652", - "2401:ff80:1911::/46": "133954", - "2001:559:c10b::/48": "33657", - "2604:d600:1139::/41": "32098", - "2a04:9a00:1010::/44": "62003", - "240e:b:f000::/37": "137687", - "240e:982:c100::/40": "38283", - "2606:5200:9000::/34": "32477", - "2803:a200::/32": "27775", - "2804:a4c::/32": "262268", - "2001:559:83be::/48": "7922", - "2001:559:859d::/46": "7922", - "2001:579:5284::/41": "22773", - "2001:1520:200::/40": "20738", - "2402:6800:740::/48": "38622", - "2806:370:4310::/40": "28403", - "2a05:4741:f::/48": "208393", - "2a0f:9c40::/29": "206983", - "2001:678:1e8::/48": "213151", - "240e:44d:4900::/41": "140345", - "2607:d400::/46": "22364", - "2620:107:9044::/47": "22787", - "2804:14c:a785::/41": "28573", - "2a01:b300::/29": "51678", - "2a09:40c0::/48": "50007", - "2001:2b8:e6::/48": "1237", - "240a:a642::/32": "144252", - "2603:4:1504::/48": "44273", - "2605:6fc0::/32": "19523", - "2803:2fa0:ff00::/40": "265705", - "2a02:26f7:cc05::/46": "20940", - "2001:67c:1b70::/48": "2488", - "2001:67c:24f8::/48": "57407", - "240a:414c::/31": "58834", - "240a:a5d3::/32": "144141", - "2804:1a44::/32": "61849", - "2408:8957:7e00::/40": "17622", - "2a02:26f7:dfc8::/48": "36183", - "2a0e:b107:b10::/47": "212580", - "2a11:1d40::/29": "210937", - "240a:a806::/32": "144704", - "240a:af08::/32": "146498", - "2602:fe12:1::/44": "62707", - "2607:e880:8221::/48": "12220", - "2a01:8d00::/31": "43070", - "2001:df7:5300::/48": "138115", - "2001:1248:a47f::/48": "11172", - "2408:8456:1800::/42": "17622", - "2804:351c::/35": "266269", - "2a02:26f7:df09::/42": "20940", - "2001:559:8450::/48": "33660", - "2600:9000:11a5::/43": "16509", - "2604:880:12::/48": "29802", - "2606:7e00:ff00::/40": "3064", - "2804:1e90:1009::/38": "264436", - "2001:67c:15ec::/48": "21485", - "2001:dc1::/48": "16509", - "2620:107:9036::/48": "13951", - "2a06:2140::/29": "200600", - "2001:df5:2d80::/48": "139727", - "240a:af77::/32": "146609", - "2600:4402:2019::/32": "6130", - "2600:6c7f:9012::/48": "20115", - "2001:678:6dc::/48": "41029", - "2404:e00:81::/48": "15695", - "2600:9000:a210::/47": "16509", - "2620:17e:300::/42": "19991", - "2a10:a800::/30": "213013", - "2001:559:24a::/48": "33652", - "2001:67c:7d8::/48": "31676", - "2606:4700:90c0::/44": "13335", - "2a02:2e0:3e0::/43": "12306", - "2a03:73c0::/48": "8426", - "2a0d:6540::/29": "210197", - "2001:1248:55f6::/44": "11172", - "2400:5280:3000::/38": "63199", - "2408:824e::/27": "4837", - "240a:a75f::/32": "144537", - "240e:438:9c20::/43": "140647", - "2602:fe5f::/36": "32899", - "2607:f740:b::/43": "36236", - "2001:43f8:de0::/48": "328213", - "2605:aa40:ffff::/48": "395394", - "2001:1248:88b0::/47": "11172", - "240e:108:41::/48": "4811", - "2804:7c34::/32": "28361", - "2806:230:300c::/48": "265594", - "2a10:ae02::/48": "8767", - "2001:2b8:bc::/48": "1237", - "240e:438:a640::/36": "4134", - "2600:7402::/28": "29933", - "2804:38:4205::/46": "19089", - "2804:4ce0::/32": "267398", - "2804:8210::/32": "272496", - "2001:559:c34f::/48": "7015", - "2600:1480:9001::/37": "20940", - "2607:fd48:302:100::/37": "13536", - "2a02:26f0:ea01::/39": "20940", - "240a:ab3a::/32": "145524", - "2804:35f0:5000::/32": "266316", - "2a0e:8f02:2151::/45": "211869", - "2c0f:f9d8::/32": "37352", - "2001:eb0::/40": "9584", - "2001:4998:29::/43": "10310", - "2a07:2780::/31": "15490", - "240a:aabb::/32": "145397", - "240e:6b0::/36": "134773", - "2606:6680:409::/48": "40676", - "2a03:5640::/32": "2906", - "2a04:c180::/29": "12842", - "2a0d:2581:14::/48": "209261", - "2401:2a00:2004::/32": "7468", - "2401:4900:1f80::/44": "45609", - "2804:1f48::/32": "53016", - "2a02:26f7:8b::/48": "20940", - "2a02:6680:f100::/44": "16116", - "2a0b:8bc0::/29": "41608", - "2600:100d:9f00::/44": "6167", - "2a02:7c20::/32": "201424", - "2804:4194::/32": "267442", - "2001:df0:400::/48": "56172", - "2001:df2:4a00::/48": "135441", - "2001:4de0:101::/48": "34343", - "2400:ca04:f037::/30": "23688", - "2401:fc0::/32": "136523", - "2405:1c0:6a82::/35": "55303", - "240e:473:4e00::/41": "140485", - "2a02:26f0:4501::/38": "20940", - "2001:559:7f0::/48": "7015", - "2001:1388:b46::/35": "6147", - "2402:3a80:1e64::/40": "38266", - "240a:a3b6::/32": "143600", - "240e:979:1f00::/34": "4134", - "2a06:1c5:ac2::/32": "207455", - "2001:678:7d8::/48": "2643", - "2001:6e0::/32": "8935", - "240e:108:21::/48": "4811", - "2606:5c80::/32": "394255", - "2a02:26f7:e881::/46": "20940", - "2a02:2e02:10e0::/39": "12479", - "2a07:3640::/29": "203179", - "2804:5094::/32": "268397", - "2a0f:bf00:40::/42": "208069", - "2803:3f80::/37": "263739", - "2a00:c10::/32": "12387", - "2a00:1280::/32": "39591", - "2a02:26f7:c640::/48": "36183", - "2001:4490:3600::/42": "9829", - "240a:a552::/32": "144012", - "2600:1000:fe00::/44": "6167", - "2a01:5c20::/35": "61419", - "2a07:76c0:1::/48": "42352", - "2606:a000:1800::/34": "11426", - "2607:fdf0:5fff::/32": "8008", - "2001:b08:15::/48": "3267", - "2001:df0:2cc::/48": "55909", - "240a:a278::/32": "143282", - "2620:149:ac1::/46": "714", - "2806:230:fff4::/44": "265594", - "2c0f:ffa8::/32": "37057", - "2620:89:c000::/48": "20099", - "2801:80:6d0::/48": "52750", - "2a01:5c00::/32": "201205", - "2001:df7:880::/48": "45325", - "2406:8800:60::/32": "17465", - "2606:2800:147::/44": "15133", - "2804:694:4900::/37": "262596", - "2a0d:2e00:1000::/48": "33932", - "2001:438:30::/44": "6461", - "240a:ae3f::/32": "146297", - "2800:160:113d::/41": "14259", - "2800:bf0:82d0::/48": "52257", - "2804:1b04:15::/48": "53048", - "2806:6::/28": "6503", - "2a00:fa80::/29": "203489", - "240a:aece::/32": "146440", - "2a00:dd60::/32": "60171", - "2402:800:7fe0::/32": "7552", - "240e:97d:4000::/34": "58543", - "2a04:9d40::/29": "13414", - "2c0f:f030::/34": "328137", - "2001:4998:15::/46": "10310", - "2803:9800:a907::/35": "11664", - "2402:800:7910::/42": "7552", - "2602:feb4:130::/44": "25961", - "2605:a680::/32": "174", - "2a03:efc0:900::/40": "33438", - "2001:67c:21bc::/48": "200533", - "2602:feb3::/47": "54116", - "2a0c:2f07:d::/48": "206924", - "2402:2900::/32": "45701", - "2406:5200::/32": "18067", - "240a:a5d7::/32": "144145", - "240a:ae02::/32": "146236", - "240a:ae89::/32": "146371", - "2001:678:6e4::/46": "202329", - "2409:8c1e:8fa0::/34": "9808", - "240e:3b2:2800::/38": "4134", - "240e:974:1200::/48": "38283", - "2408:8956:ab00::/40": "17816", - "2605:6c80:8000::/33": "40676", - "2607:f0b0:8::/32": "13319", - "2001:48c8:16::/47": "29791", - "2620:149:100::/41": "714", - "2a02:4dc0::/32": "25374", - "2001:14a0::/32": "15879", - "2001:4878:2000::/48": "12222", - "240a:ab88::/32": "145602", - "2a00:95a0::/32": "29425", - "2407:5040::/32": "134715", - "2001:559:8256::/48": "33651", - "2001:6d0:d6::/48": "43832", - "2001:16d8:baff::/39": "16150", - "2405:84c0:fa00::/40": "9886", - "2603:c0f8:2a10::/40": "20054", - "2610:a1:3010::/48": "12008", - "2605:3100:fffb::/45": "22906", - "2a0b:7240::/29": "43355", - "2a11:bc0::/48": "208085", - "2001:1a11:f8::/39": "42298", - "2604:5500:800::/42": "19165", - "2804:3680::/32": "266352", - "2a02:26f7:d80a::/42": "20940", - "2001:4d0:109::/34": "297", - "2401:4900:38e0::/43": "45609", - "2607:fcd0:fa80:7a01::/53": "8100", - "2804:145c:cc10::/39": "263327", - "2a03:d840::/32": "198668", - "2a0d:58c0::/29": "202932", - "2001:559:80fb::/48": "33660", - "2600:cc07::/28": "32298", - "2606:2980:2000::/40": "26344", - "2804:2d14::/32": "265260", - "2804:6728:2::/32": "269608", - "2409:8635::/24": "9808", - "240a:a3a1::/32": "143579", - "240e:473:8120::/41": "140486", - "2604:a880:800::/48": "14061", - "2620:114:b010::/48": "18440", - "2801:11a::/40": "269954", - "2a04:a1c0:22::/48": "39537", - "2408:8256:3d75::/48": "17816", - "2800:160:196f::/40": "14259", - "2a00:cb8:48::/47": "15695", - "2408:8256:3272::/48": "17816", - "240a:a5c7::/32": "144129", - "2602:808:a000::/48": "14618", - "2a11:3380::/29": "20565", - "2a01:8840:7a::/45": "12041", - "2a02:26f7:f308::/48": "36183", - "2a02:f0a0::/30": "25376", - "2c0f:f850:155::/32": "327979", - "2400:adc0:200::/48": "9541", - "2408:8459:b630::/41": "17622", - "240a:a609::/32": "144195", - "2600:1014:f010::/40": "22394", - "2806:310:d::/43": "16960", - "2a02:26f7:f488::/48": "36183", - "2001:df4:6c00::/48": "133802", - "2406:5140::/32": "135404", - "2409:8052:900::/37": "9808", - "2804:964::/32": "263080", - "2804:41b4::/33": "267451", - "2a00:1728:1d::/48": "44796", - "2406:2600:1::/45": "55569", - "2409:8915:5600::/39": "56044", - "2a00:8d80::/32": "15557", - "2a02:26f7:dbc4::/48": "36183", - "2a0e:8240::/29": "207902", - "2804:4bf4::/32": "267339", - "2001:559:8620::/47": "7922", - "2001:678:2ac::/48": "206763", - "2404:4980::/32": "132770", - "2406:3000:11:2006::/46": "4657", - "2607:fb10:503c::/48": "55095", - "2607:fdf0:5eac::/43": "8008", - "2804:14c:3d00::/40": "28573", - "2804:57f4::/37": "268097", - "2a00:79e1:f00::/47": "36384", - "2a02:26f7:2c::/48": "36183", - "2a04:4e40:4a00::/48": "54113", - "2a0e:f680::/29": "208613", - "2001:500:2d::/48": "10886", - "2402:8100:20c8::/47": "55644", - "2404:79c0:1002::/48": "138633", - "2600:6c39:23a::/37": "20115", - "2804:48c::/32": "262699", - "2a05:1602::/32": "207249", - "2001:678:f04::/48": "211646", - "2401:4900:52f0::/39": "45609", - "240a:adbf::/32": "146169", - "2600:1006:9140::/44": "6167", - "2804:2be0::/33": "262503", - "2804:43f4:c0::/32": "267601", - "2804:786c::/32": "271241", - "2404:d0::/44": "6648", - "2408:8957:6b00::/40": "17816", - "2620:72:4000::/48": "5050", - "2a00:4800:b0::/41": "13124", - "2a09:4c2:31::/48": "205642", - "2a09:9e40::/48": "44364", - "2408:8456:9e10::/42": "134543", - "2408:8956:f440::/40": "17622", - "2804:244c::/32": "264213", - "2001:559:3d6::/48": "33652", - "2403:6b80::/44": "2635", - "2600:100d:ff00::/44": "6167", - "2620:84:8000::/48": "26830", - "2a04:5201:6::/47": "200740", - "2001:559:4fe::/48": "7922", - "2800:2a0:9501::/33": "27947", - "2804:2140:100d::/43": "53059", - "2404:4e40:2::/32": "136429", - "2804:6c80::/32": "270472", - "2001:4878:8151::/48": "12222", - "2400:6280:6280::/48": "132280", - "2804:22dc::/32": "264127", - "2a01:4dc0::/43": "206618", - "2a04:4e40:2e00::/48": "54113", - "2a0f:6780::/29": "20766", - "2001:418:1401:21::/64": "20940", - "2a0d:b680::/29": "50304", - "2603:f7b0::/29": "396356", - "2607:fcc0:6000::/35": "32244", - "2803:96e0::/32": "269964", - "2804:663c::/32": "269535", - "2001:559:102::/48": "33287", - "240e:a52:6400::/31": "4134", - "2600:1406:f801::/38": "20940", - "2602:fdbf::/48": "397550", - "2604:41c0::/32": "14949", - "2400:cb00:a1c0::/45": "13335", - "2406:21c0::/32": "140429", - "2606:5d40::/32": "399440", - "2800:68:21::/46": "27947", - "2804:196c::/32": "61794", - "2a09:9180:ec00::/42": "42081", - "2a10:2ec1::/29": "208861", - "2401:3c00:d8::/45": "38322", - "2804:2938::/32": "264004", - "2a07:f246::/32": "46723", - "2001:559:c132::/48": "7922", - "2001:918:ff5e::/42": "3303", - "2402:a300:23e8::/48": "55427", - "2409:8915:2800::/40": "56044", - "2620:118:3000::/40": "46476", - "2001:678:68::/48": "199670", - "2607:fb10:2033::/45": "55095", - "2001:559:3ae::/48": "7922", - "240e:f:a000::/36": "4835", - "2001:5a0:4402::/48": "20940", - "2001:67c:27c::/48": "2494", - "240e:67a:1800::/32": "4134", - "2600:1410:2001::/35": "20940", - "2001:559:8098::/48": "7016", - "2402:7d80::/38": "63582", - "240a:a7fc::/32": "144694", - "2602:fd92:800::/40": "142418", - "2a0c:b641:170::/44": "211364", - "2400:cb00:f00e::/48": "13335", - "2408:8256:379f::/36": "17816", - "2600:1409:a001::/36": "20940", - "2001:559:86f7::/48": "7016", - "2001:4878:2204::/48": "12222", - "240a:a533::/32": "143981", - "2620:10d:2080::/48": "29384", - "2804:e94:160::/40": "262468", - "2804:6e44::/35": "270585", - "2806:2f0:1064::/43": "17072", - "2804:1344::/32": "263525", - "2806:3d8::/32": "270140", - "2a03:4b27:e000::/36": "200491", - "2408:8956:8600::/40": "17622", - "2409:8c15:4e00::/32": "56044", - "240a:af96::/32": "146640", - "2a01:8640:2::/48": "59711", - "2a04:b540:1000::/34": "42244", - "2a07:1c42::/48": "209673", - "240a:a1d4::/32": "143118", - "2605:a380::/32": "53828", - "2606:7d00::/32": "23248", - "2a04:4e42:fd4::/46": "54113", - "240a:a2d2::/32": "143372", - "2600:1404:24::/46": "35994", - "2600:140f:6801::/37": "20940", - "2a07:3b80:3::/48": "60781", - "2001:500:90::/48": "33517", - "2001:1b80::/29": "12912", - "2604:2d80::/40": "30036", - "2800:800:940::/48": "26611", - "2804:24bc::/32": "52695", - "2a02:26f7:f08d::/42": "20940", - "2400:1c00:66::/48": "45143", - "2402:8100:20e2::/45": "55644", - "240e:473:a150::/40": "4134", - "2804:5aa8::/32": "268787", - "2a00:dcc7:d000::/38": "34971", - "2402:9500::/36": "55720", - "240a:a956::/32": "145040", - "240e:44d:4200::/41": "140345", - "2804:e30:5e00::/39": "11338", - "2a0b:31c0:6::/37": "205726", - "2405:cdc0::/32": "131642", - "2600:380:1200::/36": "20057", - "2001:44b8:605d::/48": "4739", - "240a:a651::/32": "144267", - "240a:a95b::/32": "145045", - "2620:0:c80::/48": "1224", - "2402:800:9547::/43": "7552", - "240a:a6a7::/32": "144353", - "240a:adaf::/32": "146153", - "2605:a404:ba3::/41": "33363", - "2800:68:15::/48": "52343", - "2a02:26f7:c509::/42": "20940", - "2a0e:97c5:404::/46": "20473", - "2001:579:b114::/44": "22773", - "2600:1400:b001::/33": "20940", - "2a02:ac80:61::/43": "25145", - "2a0d:8700::/29": "3268", - "2001:253:141::/32": "38272", - "2001:559:c333::/48": "7015", - "2001:df0:1e:4001::/48": "38794", - "2001:1468::/32": "30738", - "2803:1740::/32": "36511", - "2804:5018::/32": "268369", - "2a02:d88::/32": "20552", - "2402:800:3b8d::/43": "7552", - "2403:7800::/32": "10010", - "2804:e60::/32": "61888", - "2a00:a4c0::/32": "57734", - "2a02:bf0:20::/44": "25106", - "2a0d:7f00::/29": "8560", - "2a04:ce00::/29": "21412", - "2a0e:e280::/29": "208740", - "2a03:f0c0::/32": "16253", - "2001:df5:c300::/48": "133876", - "2001:4b20:0:194::/44": "34288", - "2402:6940:207::/39": "7645", - "2606:b400:8820::/48": "7160", - "2804:28b4::/32": "263975", - "2a00:bc20::/32": "9186", - "2a01:56f::/48": "51603", - "2402:800:349b::/41": "7552", - "2620:94:e000::/48": "398915", - "2803:b9c0:8100::/40": "265705", - "2a00:13d1::/29": "42689", - "2001:678:6a8::/48": "39577", - "2610:20:5006::/48": "5744", - "2620:109:c00e::/48": "14413", - "2804:14c:bb85::/44": "28573", - "2804:2f60:200::/32": "264887", - "2a02:2698:9400::/38": "51819", - "2001:910::/32": "20766", - "2804:6278::/32": "269299", - "2a02:26f7:c786::/47": "20940", - "2a0d:c500::/29": "204888", - "2401:8140::/32": "133736", - "2604:15c0::/32": "40187", - "2604:b180:250::/44": "23277", - "2804:3728::/32": "266393", - "2a03:400::/32": "44922", - "2a04:d280::/29": "60164", - "2001:df1:1d00::/48": "136547", - "2001:4878:a048::/48": "12222", - "2401:d800:5d70::/40": "7552", - "2600:6c3a:19::/46": "20115", - "2800:1e0:1020::/46": "7195", - "2001:c20:c857::/34": "3758", - "2806:230:1002::/48": "265594", - "2a0d:5d80::/29": "200899", - "2a02:26f7:de48::/48": "36183", - "2001:559:85e4::/48": "7922", - "2401:d800:2fd0::/42": "7552", - "2401:d800:f1d0::/42": "7552", - "2409:8904:2ca0::/39": "24547", - "240a:a554::/32": "144014", - "2602:fcf6:106::/48": "210902", - "2a00:e740::/32": "21472", - "2605:1240::/33": "55222", - "2806:266:400::/41": "27672", - "2a01:8840:56::/44": "12041", - "2600:1010:bf0e::/33": "22394", - "2804:110c::/32": "52700", - "2001:df7:2e00::/48": "133966", - "2604:d800:1001::/48": "3713", - "2a02:26f7:f209::/42": "20940", - "2a02:6723::/32": "208668", - "2a09:7c44::/32": "43624", - "2001:df7:6a00::/48": "132136", - "2804:8114::/32": "272430", - "2a02:26f7:cf8d::/42": "20940", - "2402:800:9b39::/41": "7552", - "240d:c010:54::/48": "139341", - "240e:95a:3000::/36": "140083", - "2602:feb4:290::/44": "25961", - "2604:8d80::/32": "13427", - "2a04:cec0:1300::/40": "25117", - "2a0c:e303::/32": "211882", - "240a:afad::/32": "146663", - "240e:438:a820::/43": "140647", - "240e:60c:7000::/32": "4134", - "2602:feda:ab4::/47": "141011", - "2804:93c:8101::/36": "52878", - "2a02:26f0:ec00::/48": "34164", - "2a06:5680::/29": "210947", - "2001:678:878::/48": "48152", - "2606:6680:27::/44": "33387", - "2620:62:400c::/46": "30045", - "2605:f4c0::/32": "398717", - "2801:80:36d0::/48": "269216", - "2a04:c880::/32": "208189", - "2a0c:b641:480::/48": "208020", - "2001:4878:c259::/48": "2856", - "2402:800:3463::/43": "7552", - "2001:67c:774::/48": "64424", - "2400:c540:d000::/34": "59238", - "2a0b:7080:10::/44": "7489", - "2001:559:512::/48": "7922", - "240a:a47f::/32": "143801", - "2804:2ffc::/32": "264924", - "2a02:f8::/32": "28929", - "2a03:1900::/29": "47623", - "2a06:98c0:3605::/46": "202623", - "2409:8069:2a08::/39": "9808", - "2a0f:607:1002::/48": "209557", - "2001:67c:1984::/48": "3303", - "240a:a8fd::/32": "144951", - "2600:1404:b800::/48": "35994", - "2620:12f:2040::/42": "32726", - "2800:3b0:1001::/48": "6429", - "2806:102e:20::/48": "8151", - "2a07:3c80:600::/40": "209322", - "2409:8948:8d00::/40": "24445", - "2409:8f50::/30": "56047", - "2600:1008:b000::/42": "6167", - "2a0e:46c6:300::/40": "207955", - "2001:559:c1f0::/48": "33657", - "2409:805f:1100::/36": "9808", - "2800:bf0:8148::/43": "27947", - "2804:3b4c::/32": "266140", - "2806:2f0:2424::/43": "22884", - "2a02:c200::/47": "51167", - "2001:559:8196::/48": "20214", - "2401:d800:9780::/42": "7552", - "240e:980:8c00::/40": "4134", - "2620:e:c000::/48": "210", - "2804:b:c001::/45": "14840", - "2804:57b4::/32": "268081", - "2a03:d480::/32": "42455", - "2001:579:70b5::/39": "22773", - "2409:8078:2c00::/30": "9808", - "240a:a442::/32": "143740", - "2605:6f80:ffff::/48": "53340", - "2620:116:f004::/40": "14157", - "2a02:26f7:c205::/46": "20940", - "2403:ae00::/32": "38766", - "240e:356:6400::/31": "4134", - "2600:1408:5c01::/38": "20940", - "2a02:29d8::/32": "43509", - "2803:840:2300::/47": "263793", - "2a02:26f7:de09::/46": "20940", - "2a0d:2406:babe::/48": "49133", - "2408:8957:c00::/40": "17622", - "240e:44d:7b00::/41": "140345", - "2607:f900::/32": "10823", - "2806:108e:8::/43": "8151", - "2a02:26f7:60::/48": "36183", - "2a02:26f7:f9c0::/48": "36183", - "2a0f:9400:8018::/48": "213316", - "240e:56:c000::/37": "38283", - "2804:25ac::/32": "264294", - "2a09:be40:3100::/40": "213167", - "240a:a269::/32": "143267", - "2a03:2887:ff0c::/48": "8966", - "2a0c:2540::/29": "34820", - "2402:bb00::/32": "23627", - "2409:8c85:2022::/32": "9808", - "240e:980:9500::/40": "58563", - "2800:bf0:140::/44": "52257", - "2a00:f28:21::/35": "15802", - "2001:559:28d::/48": "7725", - "240e:473:7b50::/40": "4134", - "2607:f608::/32": "7412", - "2804:2488:9000::/33": "264228", - "2800:160:1162::/47": "14259", - "2606:a80::/32": "12212", - "2620:11a:c018::/48": "54113", - "2800:160:1db0::/41": "14259", - "2806:2f0:3281::/46": "17072", - "2a0e:46c6:4ff::/48": "209771", - "240a:ae15::/32": "146255", - "2603:c020:4000::/35": "31898", - "2607:fae0:f001::/48": "203993", - "2a00:1e6a:78::/47": "44303", - "2a00:bb40::/32": "3257", - "2001:559:821c::/48": "7922", - "2400:d400:5648::/48": "45671", - "240a:af1c::/32": "146518", - "240e:473:3400::/41": "140485", - "2620:13f:3000::/43": "46842", - "2001:559:82ca::/48": "7922", - "2600:140f:2c01::/38": "20940", - "2001:559:c18d::/48": "33651", - "2409:8050::/47": "56047", - "2001:67c:22f4::/48": "200490", - "240e:473:3150::/40": "4134", - "2a01:cde0:8010::/48": "16028", - "2400:7400:e02c::/48": "38044", - "2600:40ff:fc10::/45": "1321", - "2a0c:b641:2b0::/48": "212625", - "2001:559:5d6::/47": "7922", - "2401:d800:9bf0::/37": "7552", - "2604:6840:ac19::/48": "20446", - "2804:72a0::/32": "270865", - "2406:840:80::/47": "139317", - "2605:2b40::/34": "40763", - "2804:4580:1100::/32": "266931", - "2a02:2e02:cc0::/42": "12479", - "2404:4a00:5543::/36": "45629", - "2600:6c38:a9f::/42": "20115", - "2605:7900:21::/48": "63442", - "2620:1d9::/40": "20164", - "2600:1419:6c00::/48": "35994", - "2001:678:ec::/48": "197467", - "2402:800:3801::/44": "7552", - "2602:fd45::/36": "398419", - "2a02:26f7:e705::/46": "20940", - "2a0f:d780::/32": "44213", - "2001:c20:c832::/45": "3758", - "2602:fc6a::/48": "399747", - "2606:2b40::/32": "401308", - "2a00:1d48::/32": "12571", - "2a00:e4a0:200:100::/56": "49952", - "2a06:e881:113::/48": "205816", - "2a07:3501:1030::/48": "15542", - "2001:550:3205::/37": "174", - "2001:67c:728::/48": "198837", - "2408:8459:8210::/42": "17623", - "2603:c002:8b30::/37": "31898", - "2a07:a040::/29": "49542", - "2001:559:4a1::/48": "33659", - "2001:4010::/32": "44444", - "240a:acb3::/32": "145901", - "2600:1400:c001::/35": "20940", - "2804:500c::/32": "268366", - "2a0c:b641:6e2::/47": "213201", - "2c0f:fc90::/35": "16284", - "2001:67c:13f0::/48": "58042", - "240a:a451::/32": "143755", - "2600:380:8b80::/37": "20057", - "2804:14d:8483::/41": "28573", - "2c0f:ead8::/32": "37463", - "2804:f6c::/34": "263585", - "2806:230:201a::/48": "265594", - "2a02:7080:3000::/36": "48024", - "2001:dcc:5::/48": "23596", - "2001:df5:cf00::/48": "137964", - "2400:9380:9260::/47": "4809", - "2404:1c40:4::/48": "24432", - "2606:8f00::/32": "18712", - "2804:17cc:8900::/33": "263252", - "2a0b:ed80::/29": "206324", - "2409:802f:2905::/48": "9808", - "2806:2f0:1284::/43": "17072", - "2a0e:2e40::/29": "52193", - "240e:438:aa40::/37": "4134", - "2800:160:1e38::/47": "14259", - "2a00:d560::/29": "15600", - "2a02:26f7:c34c::/48": "36183", - "2a0c:c7c0::/29": "202424", - "2001:559:81d9::/46": "7015", - "2409:8904:34a0::/39": "24547", - "2600:1003:9450::/36": "22394", - "2804:5bc0:c000::/34": "268867", - "2a04:4100::/29": "31712", - "2001:b00::/29": "12874", - "2402:9e80:20::/47": "49745", - "2600:140a:6001::/32": "20940", - "2604:1380:4590::/44": "54825", - "2a00:1728:1a::/47": "34224", - "2a03:8f00::/29": "49621", - "2001:4878:c164::/48": "12222", - "2806:2f0:9361::/40": "17072", - "2001:c20:8800::/34": "3758", - "2600:400:3a10::/37": "15147", - "2a00:1288:ef6a::/48": "34010", - "2a0f:5707:b0c9::/46": "212895", - "2001:df1:2000::/48": "9268", - "2402:800:3d1d::/42": "7552", - "2404:6d00::/32": "45294", - "2a01:81e0:3::/32": "174", - "2600:6c38:8f::/43": "20115", - "2620:104:8000::/40": "3807", - "2a02:28:8::/45": "8359", - "2001:4190:8025::/33": "5588", - "2402:9900:100::/47": "27435", - "2404:3800:8::/46": "45459", - "2800:160:18d4::/44": "14259", - "2a03:3060::/29": "48635", - "2001:1248:9a6c::/43": "11172", - "2403:a040:6611::/48": "38047", - "240a:acc2::/32": "145916", - "2620:100:6036::/41": "19679", - "2804:c60::/32": "52696", - "240a:a9ac::/32": "145126", - "2a05:cec0::/29": "47487", - "2406:e1c0:6::/36": "141459", - "2600:9000:210d::/42": "16509", - "2a0d:f300::/32": "50673", - "2a11:3e00::/29": "42375", - "2001:559:c129::/48": "33657", - "2402:800:331d::/42": "7552", - "2404:34c0:3::/32": "138536", - "240e:1a:20::/43": "23650", - "2804:403c::/32": "265946", - "2a01:5da0::/32": "15397", - "2a0d:e640::/29": "210017", - "2620:129:100f::/48": "13536", - "2804:69b4::/32": "270286", - "2a09:7340::/32": "198985", - "2a09:f540::/32": "202376", - "2a0e:9900::/29": "56598", - "2001:978:3c05::/44": "174", - "2001:4de0:4202::/47": "11588", - "2806:230:402c::/48": "265594", - "240e:473:4d20::/41": "140486", - "2600:1406:3e01::/33": "20940", - "2600:1fa0:5080::/44": "16509", - "2804:3e34::/32": "266580", - "2804:6bd8:1c00::/38": "270429", - "2a04:4740:6293::/48": "25468", - "2400:cb00:a620::/46": "13335", - "2804:6040::/32": "269155", - "2404:e6:200::/42": "703", - "2409:8904:ab40::/33": "24547", - "240a:a285::/32": "143295", - "2a03:401:1::/48": "208258", - "2a03:2560::/32": "8982", - "2a03:7380:2fc0::/35": "13188", - "2a0e:8300::/29": "43415", - "2804:dd4:4100::/32": "53024", - "2a09:1980::/29": "209810", - "2402:6940:1202::/37": "7645", - "2620:78:a000::/48": "397990", - "2800:160:1e6b::/43": "14259", - "2a04:34c0::/29": "47156", - "2a06:8a00::/32": "12307", - "2001:559:5d2::/48": "7015", - "2404:7a40:1002::/48": "132556", - "2408:8956:1b40::/40": "17816", - "2804:14c:9bfa::/45": "28573", - "2a07:9b40::/48": "202698", - "2001:559:c21a::/47": "33659", - "2001:67c:2fe0::/48": "39381", - "2408:8459:9630::/41": "17622", - "2620:149:a32::/40": "714", - "2804:2164:4100::/32": "264552", - "2804:22c0:4000::/32": "264120", - "2a0d:9983::/32": "9009", - "2001:14b0::/41": "12374", - "2403:6e40:200::/44": "9830", - "2a0d:95c0::/29": "42375", - "2001:253:125::/48": "142091", - "2408:84f3:f850::/44": "17816", - "2a00:dc8::/32": "39637", - "2a02:26f7:b5c1::/46": "20940", - "2a06:a0c0::/29": "43016", - "2a10:2f00:157::/48": "212425", - "2a01:7d20:1000::/40": "203645", - "2a02:26f7:ee88::/48": "36183", - "2404:f4c0:f984::/48": "211876", - "2a0c:ab07:2000::/36": "208861", - "2001:500:7::/48": "40490", - "2001:4b20:20::/63": "65505", - "2408:882c::/32": "4837", - "2605:a404:77::/40": "33363", - "2001:559:8301::/48": "7015", - "2001:938::/33": "8437", - "2a07:7bc0::/29": "202882", - "2603:c0f8:2800::/43": "20054", - "2402:e280:2157::/44": "134674", - "2804:24dc::/32": "264245", - "2a04:1cc0::/31": "202916", - "2a04:ae00::/26": "39651", - "2a0a:4787::/32": "59504", - "2001:67c:2c80::/48": "198217", - "2409:8052:2000::/47": "56047", - "2803:5c80:6054::/44": "64114", - "2803:7300::/32": "262150", - "2804:27e4::/32": "263927", - "2804:790c::/32": "52602", - "2a0e:bf00::/39": "202539", - "2001:559:5da::/47": "21508", - "2620:101:80f8::/48": "395622", - "2a02:26f7:2e::/48": "36183", - "2a0d:7fc0::/29": "211748", - "2600:6c38:abd::/46": "20115", - "2620:cc:8000::/48": "3685", - "2001:559:38f::/48": "33654", - "2406:e400:deee::/34": "7642", - "2407:8100:2::/48": "134079", - "2409:8700::/31": "56048", - "240e:438:4a40::/37": "4134", - "2a02:26f7:f041::/46": "20940", - "2607:6100:100a::/48": "23026", - "2a04:4e40:f400::/48": "54113", - "2a09:aac0::/29": "209289", - "2001:559:1a2::/48": "33652", - "2001:67c:1544::/48": "3301", - "2403:3800:701::/36": "4007", - "240a:a16e::/32": "143016", - "240a:a928::/32": "144994", - "240e:44d:c00::/41": "140345", - "2a0f:2040::/29": "60262", - "2001:4c8:1096::/44": "15290", - "2001:678:bc0::/48": "41064", - "2404:5bc0::/32": "138596", - "240a:ab83::/32": "145597", - "2804:4544:8000::/40": "266915", - "2408:840c:a900::/40": "17621", - "240a:adb5::/32": "146159", - "2a02:26f0:5c01::/39": "20940", - "2a02:5ba0::/32": "203354", - "2001:fb1:fd1::/42": "17552", - "2607:fb10:2013::/48": "2906", - "2804:4778::/32": "267056", - "2a02:21e0::/32": "44700", - "240a:a948::/32": "145026", - "2a03:94e0::/32": "56655", - "2a0f:ba80::/29": "50629", - "2001:1900:2263::/48": "27205", - "2400:d400:1008::/48": "45671", - "2401:d800:2980::/42": "7552", - "2804:1718::/32": "263121", - "2605:4000::/32": "2722", - "2001:559:1e8::/48": "33659", - "2001:559:8512::/48": "7922", - "2400:c540:c345::/37": "59238", - "2409:8915:9600::/30": "56044", - "2602:fe43::/36": "397005", - "2602:ffe0::/36": "27337", - "2604:81c0::/39": "396422", - "2607:fcd0:fa80:9300::/53": "8100", - "2804:5918:2000::/33": "268169", - "2a04:5201:1::/48": "204154", - "2c0f:fb90::/32": "42235", - "240e:978:3100::/36": "4134", - "2804:4f8:e000::/36": "28263", - "2a02:28:6::/48": "8359", - "2a11:e487:beef::/48": "212580", - "2001:67c:2a00::/48": "57381", - "2404:5c80::/47": "59261", - "2405:2500:11::/48": "136566", - "2804:7b10::/32": "271408", - "2a02:e00:ffea::/43": "29141", - "2a0c:2f07:384::/48": "206924", - "2001:559:c306::/48": "33662", - "2001:df0:7600::/48": "133281", - "2001:fa0::/32": "2515", - "2408:8459:8010::/42": "17623", - "2604:d600:622::/45": "32098", - "2803:1400::/32": "27887", - "2804:204:20e::/47": "28186", - "2001:fd8:f1b0::/44": "4775", - "2804:5bc::/32": "28658", - "2804:1a04::/45": "61832", - "2408:8256:3c80::/48": "17816", - "2a00:1c39::/32": "29014", - "2607:f380:a4f::/48": "32361", - "2a01:3f7:2::/45": "57021", - "2400:adc0:c110::/47": "9541", - "2402:1c80:fc::/48": "19054", - "2408:844b::/29": "4837", - "240a:a64a::/32": "144260", - "240a:a755::/32": "144527", - "2806:265:5300::/37": "28481", - "2a10:5640::/32": "211690", - "2402:9d80:900::/46": "131429", - "2408:8456:dc40::/38": "17816", - "2620:131:5000::/40": "395468", - "2804:1368::/32": "262808", - "2806:2f0:2041::/46": "22884", - "2a02:6d00::/32": "44053", - "2a0f:c340::/29": "34487", - "2c0f:efe0::/32": "328366", - "2001:fb1:fc1::/43": "17552", - "2402:d000:1061::/45": "9329", - "2804:7210:100::/48": "270830", - "2a03:7380::/37": "13188", - "2001:67c:2dfc::/48": "48004", - "2001:1878:600::/39": "226", - "2001:49f0:2920::/48": "174", - "2400:f780::/32": "3257", - "2408:8056::/32": "4837", - "2804:46b0::/32": "267005", - "2a00:11c0:39::/48": "42473", - "2620:9:a005::/48": "395515", - "2804:21b0::/32": "264567", - "2a05:d050:4040::/44": "16509", - "2a0a:f6c0::/29": "42218", - "2400:9940:1003::/34": "136224", - "2a05:d050:1080::/44": "16509", - "2408:8957:6100::/40": "17816", - "2602:fe12:20::/48": "62707", - "2804:52bc::/32": "268538", - "2a02:26f7:f241::/46": "20940", - "2a09:800::/29": "209975", - "2001:16a2:8000::/43": "25019", - "240e:3b2:5600::/34": "136199", - "240a:a40d::/32": "143687", - "240e:438:7620::/43": "140647", - "240e:44d:900::/41": "140345", - "2607:ff38::/46": "22937", - "2804:ac8:100::/47": "262672", - "2a0e:b107:1560::/45": "209209", - "240a:a27c::/32": "143286", - "2604:d600:122d::/43": "32098", - "2a02:1660::/32": "35132", - "2a02:26f7:ef41::/46": "20940", - "2401:ff80:1801::/45": "133954", - "2403:ad80:98::/42": "134835", - "2610:a1:1002::/48": "397218", - "240e:473:2f50::/40": "4134", - "2a00:c88::/32": "15474", - "2402:800:9371::/40": "7552", - "2800:160:1ea8::/45": "14259", - "2a00:e120::/32": "20860", - "2a02:26f7:decc::/48": "36183", - "2001:67c:2e20::/48": "12945", - "2602:fd59:10::/48": "25773", - "2a01:5ec0:5000::/36": "44244", - "2a02:26f7:dbc1::/46": "20940", - "240a:a3f0::/32": "143658", - "2804:5460::/32": "268646", - "2402:3a80:c000::/44": "38266", - "2409:8057:805::/34": "56040", - "2620:92::/44": "1970", - "2001:4998:ef71::/40": "10310", - "2408:8459:c50::/38": "17816", - "240d:c010:18::/47": "132203", - "2604:d600:677::/44": "32098", - "2806:230:4039::/48": "11888", - "2a0b:6b84:1338::/32": "200639", - "240a:a37c::/32": "143542", - "240e:3b9:d000::/36": "134772", - "2804:4210::/35": "267475", - "2a00:5540::/33": "50763", - "240a:ad74::/32": "146094", - "2a0f:c587::/32": "208861", - "2001:559:234::/47": "7016", - "2001:559:85b3::/48": "7015", - "2600:1406:c401::/36": "20940", - "2605:dd40:8990::/44": "16509", - "2804:420c::/32": "267474", - "2a0e:fd45:da4::/48": "206064", - "2001:470:dd::/48": "397787", - "2001:fd8:124::/46": "132199", - "240a:ad20::/32": "146010", - "240e:5f:600f::/48": "134774", - "240e:67b:8800::/38": "140330", - "2804:4764::/32": "267051", - "2a02:4840:101::/48": "203557", - "2408:8256:2d7b::/48": "17816", - "240e:1e:7000::/32": "4134", - "2803:1500::/32": "27800", - "2a02:26f7:be89::/42": "20940", - "2001:1248:8429::/45": "11172", - "2001:44c8:4020::/40": "45430", - "2408:8957:3800::/40": "17622", - "2400:8f80::/47": "45638", - "2405:1500:b1::/32": "58717", - "2804:3c10::/32": "266188", - "2a02:26f7:e344::/48": "36183", - "2a0d:e940:b000::/36": "35507", - "2a02:968::/32": "12859", - "2001:1840:c060::/44": "196", - "2409:801e:3009::/45": "9808", - "2607:a300::/32": "36222", - "2620:c4::/48": "88", - "2620:119:76::/48": "36692", - "2804:4dc:fe01::/39": "262474", - "2804:6f00::/32": "270632", - "240a:a390::/32": "143562", - "2806:2f4:1200::/40": "265540", - "2a0c:b641:10::/48": "205523", - "2401:d800:7d50::/42": "7552", - "2409:8080:2ae0::/35": "9808", - "240a:aa2e::/32": "145256", - "2804:97c::/32": "263092", - "2804:5f7c::/32": "269103", - "2a0c:e340:2::/32": "30150", - "2804:4e24::/32": "268242", - "2a00:a140::/32": "34686", - "2a02:26f7:b805::/46": "20940", - "2a0e:5f40::/29": "41529", - "2402:bfc0:10::/32": "136361", - "2804:d7c:1001::/40": "52634", - "2a02:26f7:da48::/48": "36183", - "2001:df0:99::/48": "45304", - "240e:44d:6a00::/41": "140345", - "2600:5c00:3afe::/48": "11351", - "2a01:4240::/32": "31246", - "2a03:c980:d990::/48": "210079", - "2a0d:3842:1070::/48": "57629", - "2001:ec0:c00::/40": "131293", - "2405:6680::/32": "135425", - "240a:a5ea::/32": "144164", - "2607:f518:17e::/35": "46887", - "2806:2f0:42a0::/41": "17072", - "2a00:cd0:104f::/32": "48173", - "2a0d:d484::/30": "39458", - "2001:4888:801e::/47": "6167", - "2408:8456:9a40::/37": "17816", - "2409:8080:2ab0::/41": "9808", - "2804:2f24::/32": "264874", - "2804:77f8::/32": "271211", - "2803:69e0::/32": "270015", - "2600:6c7f:90e0::/48": "20115", - "2605:b400:600::/32": "25956", - "2620:1d0:5a::/48": "397228", - "2a0e:b107:dd0::/44": "212508", - "2405:1c0:6a13::/42": "55303", - "2804:3078::/32": "264953", - "2a0d:4500::/29": "205119", - "2001:559:80f1::/48": "33287", - "2804:5a98::/32": "262439", - "2a02:587:8500::/33": "6799", - "2001:4dd0::/29": "8422", - "2401:ff80:1193::/38": "133954", - "240a:a625::/32": "144223", - "2804:734::/33": "262624", - "2a03:2880:f220::/47": "32934", - "2600:1419:6401::/36": "20940", - "2610:1e8::/32": "11814", - "2a01:664:2::/38": "48951", - "2a06:62c0:51::/40": "204138", - "240b::/26": "2516", - "2a02:26f7:ce41::/46": "20940", - "2001:559:3b5::/48": "33651", - "2001:67c:1b58::/47": "35559", - "2402:ef03:100::/34": "7633", - "2a04:6040::/31": "49229", - "2001:4430:41e8::/36": "17853", - "2404:e740::/46": "139195", - "240a:a8e0::/32": "144922", - "2403:5000:172::/40": "9304", - "2620:110:7000::/44": "13880", - "2804:e0c:280::/48": "28176", - "2a06:5740::/29": "203020", - "2a09:7:2004::/48": "35537", - "240e:3ba:ec00::/35": "140314", - "2001:67c:11c0::/48": "206082", - "2404:1800::/32": "17705", - "240a:aafa::/32": "145460", - "2a0d:8d06:1002::/48": "48079", - "2a0f:a302:500::/40": "64457", - "240a:a7fe::/32": "144696", - "2804:1ca0:ff05::/48": "61666", - "2a02:2b88::/32": "197019", - "2a02:af40::/29": "60187", - "2001:500:124::/48": "396549", - "2405:e40:3::/48": "138506", - "2409:8904:8a90::/39": "24547", - "2600:1402:4000::/48": "35994", - "2001:559:867b::/45": "7922", - "2801:16:800::/48": "19429", - "2a02:26f7:f201::/46": "20940", - "2001:41d0::/32": "16276", - "240a:ae71::/32": "146347", - "2804:14d:8c81::/41": "28573", - "2a04:e802::/43": "57976", - "2001:c20:4876::/47": "3758", - "240e:f7:c000::/35": "134771", - "2804:1b1c::/32": "61709", - "2a02:26f7:e604::/48": "36183", - "2a0e:fd45:bef::/37": "44103", - "240a:a7cc::/32": "144646", - "2803:e4e0::/32": "269890", - "2804:0:5c01::/34": "2716", - "2806:230:101a::/48": "265594", - "2806:2f0:2121::/46": "22884", - "2a0a:b980::/32": "203604", - "2a0e:4000::/40": "42993", - "2001:67c:19c0::/48": "48778", - "2001:fb0:1003::/44": "7470", - "2400:9380:9cc0::/44": "136167", - "240e:108:11e1::/48": "134764", - "240e:473:ff02::/40": "4134", - "2605:c680::/32": "63251", - "2804:1054::/32": "53135", - "2001:559:c153::/48": "7922", - "2605:f500:602::/32": "1828", - "2607:f108:e00::/33": "29838", - "2a02:d10::/32": "9050", - "2a0a:7d80:1000::/36": "56740", - "2402:800:5b71::/44": "7552", - "2a02:7d8:e10::/32": "3302", - "2a02:26f7:df49::/46": "20940", - "2600:1480:4800::/48": "21342", - "2800:160:1b37::/44": "14259", - "2800:370:4c::/43": "28006", - "2a07:9944:1b::/45": "40676", - "2001:559:8317::/44": "7922", - "240e:44d:5680::/41": "4134", - "240e:473:6a50::/39": "4134", - "2801:140::/45": "262249", - "2a02:26f7:8e::/48": "36183", - "2c0f:fe28:e::/48": "36951", - "2408:8459:de30::/41": "17622", - "2604:db40::/32": "30382", - "2a0a:86c0::/44": "206163", - "2400:89c0:3010::/44": "37936", - "2408:8459:3620::/44": "17816", - "2804:3f0c::/38": "266636", - "2804:6404::/32": "269398", - "2a02:1211::/28": "3303", - "2a0e:b107:19f::/48": "209506", - "2001:559:87d4::/48": "33661", - "2a02:501::/32": "29345", - "240a:ab8f::/32": "145609", - "2600:1403:b401::/36": "20940", - "2804:1398:8000::/33": "263541", - "2402:3500::/32": "45177", - "2804:6b4::/32": "53224", - "2804:76c::/32": "262648", - "2a03:19c0::/32": "204141", - "2a04:2d00::/48": "56647", - "2a0f:c600::/29": "208262", - "2405:1c0:6731::/45": "135062", - "2804:171c::/32": "263124", - "2804:18a8::/32": "262502", - "2804:4218:3100::/32": "267477", - "2a0a:c5c0::/29": "29423", - "2408:8456:1440::/39": "17816", - "2605:b100:e000::/41": "577", - "2605:b200::/32": "26097", - "2a02:26f7:da04::/48": "36183", - "2a09:7100::/29": "20676", - "2402:800:3ac5::/43": "7552", - "240a:ae67::/32": "146337", - "2607:f480:9900::/40": "27435", - "2a09:2e80::/29": "199486", - "2a09:4e06::/31": "208861", - "2a07:5fc0::/29": "209621", - "2401:ff80:1c0d::/46": "133954", - "240a:a19a::/32": "143060", - "240a:a5fa::/32": "144180", - "2607:f330:5fa1::/48": "15130", - "2801:140:dddd::/48": "265731", - "2801:172::/48": "14080", - "2a00:fb80::/48": "48918", - "2a0b:f040::/32": "205033", - "2404:4a00:6a00::/64": "55423", - "2404:d680::/32": "132111", - "2409:8087:1400::/38": "56044", - "2800:560::/32": "27833", - "2806:370:6110::/40": "28403", - "2a07:1980:13::/48": "25773", - "2001:678:9c::/48": "57801", - "2401:3c0:10f::/43": "45528", - "2407:1400:2::/45": "23752", - "2c0f:ea58::/32": "328537", - "2001:1248:847d::/40": "11172", - "2804:10b0::/32": "28175", - "2a03:f80:373::/48": "43289", - "2a04:c900:1000::/36": "48096", - "2402:1980::/32": "4818", - "2c0f:f528:40::/45": "327782", - "2401:ff80:1c09::/45": "133954", - "2409:8052:1002::/40": "56047", - "2602:fdca::/36": "397709", - "2a02:20c8:2331::/37": "50304", - "2a02:26f7:b850::/48": "36183", - "2a03:6a00::/29": "6908", - "2a07:1c44:7014::/48": "137410", - "2001:559:4bb::/48": "33657", - "2001:44b8:4078::/40": "4739", - "2400:dc00:4100::/46": "131111", - "2607:ba80::/32": "394666", - "2804:24d8::/32": "264244", - "2804:5f90::/32": "269109", - "2804:612c:c000::/34": "269218", - "2001:78d::/30": "6893", - "2600:1004:9110::/36": "22394", - "2a02:26f7:b881::/46": "20940", - "2001:559:8238::/48": "33657", - "2403:6200:7602::/48": "138685", - "2a02:26f7:bd45::/46": "20940", - "2a02:ac87:5901::/40": "25145", - "2a03:3a00::/31": "49931", - "2001:559:83c3::/48": "33287", - "2001:1248:57cf::/43": "11172", - "2409:8028:2a00::/40": "9808", - "2803:9800:9507::/41": "11664", - "2a02:26f7:d::/48": "20940", - "2a0a:fc40::/29": "29075", - "2600:1008::/43": "6167", - "2804:3b34:7100::/32": "266135", - "2a02:54e0::/29": "50606", - "2001:67c:182c::/48": "47667", - "2401:1f80:10::/44": "29990", - "2404:7e00::/32": "38493", - "2405:6d00:105::/32": "17887", - "2600:1488:a521::/35": "20940", - "2604:2d80:880b::/40": "30036", - "2409:8087:3009::/45": "9808", - "240a:a0bf::/32": "142841", - "2600:370f:5060::/47": "32261", - "2804:8c0::/32": "262391", - "2a00:1a58::/32": "20904", - "2a03:a9c0::/29": "41709", - "2a06:e2c0::/29": "56697", - "2001:559:c341::/48": "7015", - "2001:8b8::/29": "1759", - "2405:1c0:6717::/42": "55303", - "2604:d600:c0a::/47": "32098", - "2400:8500:4800::/48": "58649", - "2402:cd00::/32": "45942", - "2408:8459:8830::/41": "17622", - "2409:8b54::/28": "56040", - "2600:8808:1a00::/34": "22773", - "240a:a4ec::/32": "143910", - "2604:2d00::/36": "64236", - "2804:224c::/32": "262769", - "2001:559:86c3::/48": "33659", - "2001:1a68:1b::/42": "15694", - "2400:c700:1184::/38": "55644", - "2600:5c01:10df::/36": "10796", - "2804:52b8::/32": "268537", - "2a02:7800::/32": "15582", - "2a0e:fd45:2b00::/44": "211562", - "2409:807c:3100::/36": "9808", - "2804:7468::/32": "270979", - "2a10:7c40::/29": "212751", - "2600:141c:4001::/36": "20940", - "2804:23f4::/32": "264193", - "2804:62d0::/32": "269320", - "2a01:bc00::/29": "43406", - "2407:4e00:1:1::/62": "17995", - "2409:8a53:b00::/37": "56047", - "2800:98:1810::/32": "14754", - "2804:7918::/32": "271284", - "2408:860c::/30": "17621", - "240a:a75d::/32": "144535", - "2620:103:e049::/48": "16711", - "2400:a980:f00::/40": "133111", - "2600:1406:e001::/37": "20940", - "2600:6c62::/29": "20115", - "2610:128:1300::/34": "11686", - "2800:8a0:b000::/36": "5722", - "2804:3d50::/32": "266267", - "2a0e:fd45:2b10::/47": "52112", - "2402:e380:30d::/48": "138558", - "2408:8726::/32": "4837", - "2409:8004:3116::/36": "24547", - "240a:a5e6::/32": "144160", - "2607:f790::/32": "12129", - "2a09:bac0:411::/46": "13335", - "2a0e:b105:488::/46": "20473", - "2001:df3:ba00::/48": "134808", - "2600:14c0:6::/44": "21342", - "2620:46:2000::/48": "13535", - "2a04:cdc0::/29": "201661", - "2a0f:5707:ab23::/48": "48646", - "2001:678:6b8::/48": "209869", - "2600:1016:b0e0::/39": "6167", - "2a00:b0e0::/32": "34282", - "2001:559:8204::/48": "7015", - "2401:d800:2b90::/42": "7552", - "2001:579:b80c::/41": "22773", - "2401:d800:bbb0::/41": "7552", - "240e:473:a800::/41": "140485", - "2804:3034:181::/38": "264936", - "2804:4bc4::/32": "267328", - "2a00:c3a0::/32": "51349", - "2a03:5d00::/30": "29399", - "2401:3400:1000::/33": "45352", - "2402:800:7b50::/42": "7552", - "240e:982:8200::/40": "133776", - "2600:1406:401::/39": "20940", - "2a02:26f7:dec1::/46": "20940", - "2001:448a:2070::/40": "7713", - "2409:8904:cba0::/37": "24547", - "240a:a407::/32": "143681", - "240e:108:11c1::/48": "38283", - "2800:160:1b42::/43": "14259", - "2a00:e20:144::/31": "25048", - "2001:db0:5000::/34": "17766", - "2001:4940::/34": "21547", - "2001:4c21::/32": "60610", - "240a:a96b::/32": "145061", - "2001:559:8422::/48": "22909", - "2001:559:8442::/48": "7922", - "2803:cd80:8000::/33": "61478", - "2804:2be4::/32": "263004", - "2a09:b280:ffb0::/46": "210025", - "2001:559:852a::/48": "7015", - "2001:678:790::/48": "201292", - "2001:df1:3e00::/48": "134868", - "2402:800:5bee::/37": "7552", - "240e:a52:5c00::/34": "134419", - "2602:fd2d::/36": "398567", - "2620:107:6000:1601::/44": "6462", - "2401:d800:5e90::/42": "7552", - "2a02:26f7:f001::/46": "20940", - "2a06:1e82::/47": "207480", - "2001:4260:5800::/38": "16637", - "2405:8a00:200b::/42": "55824", - "2603:c0e8:2800::/39": "1218", - "2a04:4e40:8000::/48": "54113", - "2a05:f4c0::/29": "203020", - "2620:126:5040::/47": "27632", - "2a02:6f20::/32": "15598", - "2001:559:474::/48": "33491", - "2001:559:5c9::/48": "7922", - "2001:44b8:2065::/48": "4739", - "2409:8904:4960::/38": "24547", - "240a:a71f::/32": "144473", - "2a00:f440::/44": "48347", - "2a02:26f7:d4::/48": "36183", - "2001:559:749::/46": "7922", - "2001:44b8:309d::/46": "7545", - "2600:6c38:408::/43": "20115", - "2606:3280::/32": "20298", - "2804:374c:100::/40": "266402", - "2804:4ccc:8000::/33": "267393", - "2001:1978:1e00::/40": "13768", - "2400:ea00:c010::/48": "23884", - "2803:f2e0::/32": "269931", - "2a02:26f7:97::/48": "20940", - "2a0d:5d00::/29": "205673", - "2407:ff00::/32": "45884", - "2803:e960::/32": "269738", - "2804:6574::/32": "269491", - "2a02:f7f:14::/48": "42927", - "2a02:26f7:d58d::/42": "20940", - "2001:559:183::/48": "33652", - "2001:559:801e::/48": "7922", - "2001:559:872b::/43": "7922", - "240e:3b4:c800::/37": "4134", - "2a00:1300::/32": "49272", - "2a04:5a00::/29": "60316", - "2a04:2b00:13ee::/48": "201304", - "2001:678:338::/48": "8375", - "2406:5d40:2::/32": "141009", - "240a:a6e4::/32": "144414", - "2602:fe9e::/36": "395434", - "2801:80:1d90::/48": "265988", - "2804:6738::/32": "269614", - "2a03:980:1::/46": "20645", - "2a05:dec0::/29": "197580", - "2a07:2781:a4a4::/29": "15490", - "2a0d:ca47::/47": "41195", - "2602:fed3:11::/48": "21769", - "2a0a:7640::/29": "206049", - "2400:d400:b00b::/48": "45671", - "240a:a869::/32": "144803", - "2604:5e80:21::/32": "8", - "2620:e0:c000::/48": "17116", - "2a02:26f7:cf44::/48": "36183", - "240a:a2fd::/32": "143415", - "240a:a52e::/32": "143976", - "2a00:4bc0:210d::/46": "31004", - "2a0f:6500::/32": "208183", - "2402:c340:eeef::/35": "38047", - "2404:e680::/35": "18409", - "2801:19a::/47": "19429", - "2804:5e08:380::/32": "269007", - "2a00:1650::/32": "24768", - "2a00:8740:15::/44": "49037", - "2a0e:7b80::/32": "29014", - "240a:a1a3::/32": "143069", - "2a02:26f7:d1c8::/48": "36183", - "2803:ddc0::/32": "27855", - "2408:8456:a810::/42": "134543", - "240a:70::/46": "9605", - "2600:370f:362a::/41": "32261", - "2620:13a:b003::/48": "54344", - "2806:263:a300::/37": "13999", - "2a05:7640:2040::/42": "174", - "2001:67c:2908::/48": "49752", - "2400:fc00:4060::/39": "45773", - "2804:5c68::/32": "268907", - "2a01:3e0::/37": "6453", - "2001:579:e0bc::/39": "22773", - "2001:918:1ab::/48": "8300", - "2620:0:1c00::/40": "32934", - "2800:160:164c::/46": "14259", - "240a:a346::/32": "143488", - "240e:3b6:dc00::/34": "4134", - "2400:a980:6900::/35": "133111", - "2405:2300:ff09::/42": "13443", - "2607:f098:1100::/34": "33363", - "2804:14c:87b3::/41": "28573", - "2804:1688::/32": "263290", - "2a00:b405::/30": "12857", - "2a04:d880::/29": "5587", - "2001:559:8122::/48": "13367", - "2001:7f8:80::/48": "8695", - "2607:f438::/32": "23520", - "2801:80:3a00::/40": "270410", - "2804:7390::/32": "270923", - "2a02:1688::/32": "48362", - "2a02:26f7:de04::/48": "36183", - "2a05:24c0:1::/46": "211889", - "2a0a:4587:2000::/44": "213341", - "2001:4b6c::/30": "12635", - "2400:cb00:403::/45": "13335", - "2402:800:389b::/41": "7552", - "240e:fb:f000::/36": "136199", - "2600:1017:b4e0::/38": "6167", - "2804:15ec:900::/32": "28599", - "2a01:a440::/48": "51297", - "2001:559:82bc::/48": "33659", - "2600:5c01:e0b::/35": "10796", - "2804:61e0::/32": "269262", - "2a02:26f7:f401::/46": "20940", - "2a10:d540::/29": "213053", - "2001:1248:8724::/43": "11172", - "2406:ac40::/32": "141389", - "2607:f1e0::/35": "19092", - "2806:268:485:8000::/41": "13999", - "2a00:cd00::/32": "39101", - "2a02:26f0:cb::/48": "2914", - "2a05:3940::/31": "59778", - "2001:400:8824::/34": "293", - "2001:559:8381::/48": "33652", - "2001:fb0:1079::/40": "7470", - "2607:9b80:4000::/36": "46558", - "2800:160:121b::/42": "14259", - "2804:14c:65ca::/43": "28573", - "2804:1590::/32": "263395", - "2804:1660::/32": "52560", - "2804:553c::/32": "268698", - "2804:802c:110::/42": "271734", - "2a00:1a48::/32": "15395", - "2a02:26f0:c5::/46": "20940", - "2a02:26f7:d409::/42": "20940", - "2001:559:c33d::/48": "7016", - "2001:678:da0::/48": "213068", - "2001:15f8:c00::/48": "25384", - "2804:4f54::/32": "268320", - "2600:1004:f100::/44": "6167", - "2600:1407:14::/48": "35994", - "2803:e610::/32": "271945", - "2a01:b740:1500::/42": "6185", - "2a02:26f7:e849::/42": "20940", - "2403:300:a26::/44": "714", - "2406:e00:800::/48": "55740", - "2408:8459:f050::/39": "17816", - "2600:370f:36c4::/48": "32261", - "2607:fcd0:fa80:8200::/55": "8100", - "2800:bf0:3020::/46": "52257", - "2001:4b8::/32": "14654", - "2409:8904:6940::/42": "24547", - "2409:8c85:aa5d::/42": "9808", - "2804:814::/32": "262777", - "2a09:47c0::/48": "44364", - "2a09:5f80:2::/47": "48038", - "2a09:d2c1:1::/48": "209669", - "2c0f:fa60::/32": "36917", - "2001:3c8:130a::/48": "17827", - "2001:df2:c880::/48": "140416", - "2001:1b40::/34": "20860", - "240a:a2f0::/32": "143402", - "2a04:2181:c010::/47": "61272", - "2001:678:2b4::/48": "48882", - "2402:b801:4000::/32": "18371", - "2404:c680::/32": "135330", - "2602:fe74::/36": "393996", - "2803:7d80::/33": "11664", - "2a0e:8f02:f02a::/48": "212577", - "2001:df5:a880::/48": "136557", - "2405:7f00:a0a0::/39": "133414", - "240a:a497::/32": "143825", - "240e:44d:4d00::/41": "140345", - "2a02:28c8::/32": "42353", - "2a02:ac80:a01::/39": "25145", - "2001:67c:2ed0::/48": "8767", - "240a:a38c::/32": "143558", - "2804:114::/32": "262721", - "2001:559:69::/46": "33651", - "240e:14:9000::/36": "140330", - "2605:a404:29e::/41": "33363", - "2610:128:9600::/33": "11686", - "2804:ef4:3::/33": "28642", - "2804:7f80::/32": "271703", - "240e:3bc:1200::/39": "4134", - "2a0b:2e00::/29": "15600", - "2600:6c34:203::/45": "33588", - "2001:559:8154::/48": "33657", - "240a:a1a2::/32": "143068", - "240e:4a:4300::/40": "58571", - "240e:b1:f000::/37": "136197", - "2600:80d:16::/47": "6984", - "2a01:4480::/32": "196816", - "2605:5c0:c080::/45": "28885", - "2a04:140::/29": "1764", - "2c0f:eb78::/32": "328331", - "2403:f680:f::/43": "58898", - "2405:da00::/47": "38235", - "240a:ab4c::/32": "145542", - "2804:148c::/32": "263336", - "2a0b:8fc1:2000::/32": "49825", - "2a0e:f00::/29": "47489", - "2a0e:eec0::/32": "206766", - "2001:559:c09e::/48": "33659", - "2001:df1:4300::/48": "9746", - "2400:3080::/32": "55424", - "2804:6b98::/32": "270411", - "2a05:1180::/29": "59791", - "2a0d:8d06::/48": "48079", - "2c0f:f638::/32": "37661", - "2001:67c:16f8::/48": "198611", - "2001:4bc8::/29": "8412", - "240a:a3fd::/32": "143671", - "2600:1806:319::/48": "16552", - "2600:6c38:b01::/45": "20115", - "2001:44b8:406e::/48": "7545", - "2400:ddc0::/35": "4785", - "2600:5c01:319c::/48": "11351", - "2a00:8860:700::/40": "210266", - "2001:559:823b::/48": "7015", - "240a:a9d6::/32": "145168", - "2804:4f4::/32": "262767", - "2a04:c7c0::/29": "31382", - "2c0f:f598:3::/48": "327813", - "2a0c:9c80::/29": "204760", - "2a0d:a180::/32": "211494", - "2605:1c00:50f0::/44": "16787", - "2001:579:703d::/41": "22773", - "2401:ff80:1405::/44": "133954", - "2405:8a00:2073::/44": "55824", - "2804:c5c::/32": "262318", - "2a0d:ecc0::/29": "60781", - "2400:cd00:1045::/32": "38794", - "2607:f6f0:6000::/48": "27566", - "2a05:91c0::/32": "56430", - "2c0f:f818::/32": "37090", - "2801:80:1660::/48": "52623", - "2804:421c::/32": "267478", - "2a02:26f7:b741::/46": "20940", - "2001:67c:10cc::/48": "45011", - "2408::/22": "9595", - "2620:0:210::/48": "43", - "2801:1b:2800::/48": "270074", - "2a02:21a0::/29": "49743", - "2406:3003:107e::/36": "4657", - "2409:8057:3806::/44": "56040", - "240e:3bc::/35": "134773", - "2804:d78::/32": "262444", - "2804:1264::/32": "263474", - "2804:3980::/32": "266034", - "2804:3b88::/32": "266155", - "2806:370:1090::/41": "28403", - "2a09:2200::/29": "29655", - "2a0a:8880::/46": "50937", - "2001:4478:2200::/40": "4739", - "2409:8b5c::/26": "9808", - "2a03:1980:d1ff::/38": "48260", - "2c0f:eac8::/32": "328566", - "240a:ac6f::/32": "145833", - "2800:5f0:83a::/45": "22724", - "2404:6480::/32": "135130", - "2409:8915:3600::/39": "56044", - "240a:add1::/32": "146187", - "2600:370f:35a5::/43": "32261", - "2605:4f00::/32": "26413", - "2804:3064::/32": "264948", - "240a:aae6::/32": "145440", - "2804:34c0::/32": "265477", - "2a04:c100::/29": "208861", - "2a0f:a100::/32": "8283", - "2a10:3144::/30": "398481", - "2001:678:330::/48": "3301", - "2001:df4:4980::/48": "140463", - "2407:4d00::/48": "38841", - "240a:a4a9::/32": "143843", - "240a:ac9f::/32": "145881", - "240e:108:1150::/48": "140527", - "2607:f380:865::/38": "2152", - "2001:df0:df80::/48": "139297", - "2408:8459:b610::/42": "17623", - "2408:8756:f0a::/40": "136958", - "2804:1490::/32": "263337", - "2a10:ee00::/32": "212401", - "2001:3c0::/35": "7516", - "2a01:9700:16c9::/48": "8376", - "2a05:6dc0::/29": "34822", - "2a0d:7b80::/29": "204556", - "2402:9dc0::/32": "131183", - "2404:d240::/32": "139033", - "2600:370f:342b::/45": "32261", - "2620:10a:3000::/40": "10349", - "2803:ae40::/32": "27928", - "2804:ef0:200::/32": "263558", - "2804:4870:4800::/34": "267121", - "2001:559:1a0::/48": "7015", - "2001:559:8065::/48": "7922", - "2405:bc0::/32": "136842", - "2a00:1a90:c000::/34": "33854", - "2a02:2528:2614::/29": "25091", - "2605:7900:24::/48": "63442", - "2804:1380:2::/45": "263536", - "2804:6f2c::/32": "270643", - "2a03:5100::/32": "197742", - "2401:d800:2380::/42": "7552", - "2408:8456:7440::/39": "17816", - "2a01:8840:75::/48": "207266", - "2a06:aa80::/32": "43267", - "2a01:c50e:ff40::/31": "12479", - "2a02:26f7:d8::/48": "36183", - "2001:dce:8801::/35": "23869", - "2408:8459:e050::/38": "17816", - "240e:2e::/33": "4812", - "2605:3dc0:1002::/48": "397952", - "2a02:26f0:4e00::/48": "34164", - "2a0c:8fc3::/40": "23470", - "240a:a6ea::/32": "144420", - "2600:6c7f:9072::/48": "20115", - "2604:6400:4610::/41": "29974", - "2607:fb10:2025::/43": "2906", - "2620:116:8082::/48": "27281", - "2804:7d9c::/32": "271572", - "2a06:e881:7800::/40": "212002", - "2400:9380:99c0::/44": "136167", - "2401:9780::/32": "132893", - "2402:800:b3d0::/37": "7552", - "240a:a82a::/32": "144740", - "240e:44d:d80::/41": "4134", - "2400:6d00::/32": "45355", - "2404:b300:1000::/48": "131207", - "2804:18d4::/32": "262489", - "2a0d:2280::/29": "51815", - "2401:dc40::/32": "24253", - "240a:a02f::/32": "142697", - "2603:b0e1::/27": "11796", - "2620:119:500c::/48": "13443", - "2801:96:fff3::/45": "28586", - "2001:559:825d::/48": "22909", - "2001:44b8:406f::/48": "4739", - "2001:559:81d5::/46": "7015", - "2001:67c:203c::/48": "30779", - "2408:8459:4a30::/41": "17622", - "2602:fd35::/36": "398427", - "2804:954:700::/36": "263073", - "2a00:1da0::/32": "29591", - "2001:559:c250::/48": "33657", - "2400:dcc0:a104::/38": "38631", - "2401:d6c0::/32": "137199", - "240a:ab86::/32": "145600", - "2804:e94:a0::/46": "262468", - "2001:67c:19d4::/48": "30877", - "2a00:b404:e000::/36": "203329", - "2a02:26f7:d085::/46": "20940", - "2a07:68c0::/47": "32338", - "2800:3f0::/33": "15169", - "2001:470:138::/48": "58110", - "2001:67c:22b0::/48": "42564", - "2001:44b8:205c::/48": "7545", - "240a:a5e4::/32": "144158", - "240a:a958::/32": "145042", - "2600:6c3a:821::/46": "20115", - "2604:1380:4110::/44": "54825", - "2a02:26f7:e10d::/42": "20940", - "2001:559:816f::/48": "20214", - "2001:b08:14::/48": "28800", - "2400:a980:e4::/37": "133111", - "2408:8459:54c0::/38": "17816", - "2a00:5881:6000::/40": "199396", - "2a01:9940:100::/47": "12807", - "2a02:26f7:d245::/46": "20940", - "2001:559:363::/48": "33652", - "2001:559:84ac::/48": "7015", - "2600:1419:1801::/38": "20940", - "2801:b6::/38": "263083", - "2a03:521::/32": "201822", - "2001:668:200::/29": "3257", - "2001:df6:cb00::/48": "138076", - "2620:123:9000::/48": "394976", - "2804:7210:200::/45": "270830", - "2400:8b00:2100::/42": "45727", - "2404:138::/41": "38022", - "2409:8924:a100::/38": "56046", - "2001:559:c003::/48": "33491", - "2001:1248:9803::/43": "11172", - "2801:80:1b60::/48": "266443", - "2a07:3500:1060::/47": "208240", - "2001:4048:109::/32": "33922", - "2602:803:c001::/45": "26667", - "2603:900c::/30": "33363", - "2001:559:c1f2::/48": "7922", - "2804:25d8::/32": "264307", - "2804:37f0:8100::/33": "266445", - "2603:c001:2810::/38": "31898", - "2804:7c60::/32": "271492", - "2a10:4680::/29": "398559", - "2402:e280:3d98::/47": "134674", - "2408:8256:3681::/43": "17623", - "2607:d980::/32": "10271", - "2a00:d90::/29": "21195", - "2a07:4400::/29": "24961", - "2001:559:c370::/48": "33657", - "2801:15:a000::/48": "61477", - "2a00:c4c0::/32": "56477", - "2c0f:f7a0::/32": "37184", - "2001:67c:1818::/48": "3303", - "2001:ec0:800::/40": "23969", - "2408:8957:1940::/40": "17816", - "2604:fa40::/32": "7850", - "2620:149:a1a::/48": "6185", - "2800:160:18db::/45": "14259", - "2a02:808::/29": "35311", - "2001:df7:3d00::/48": "4748", - "2600:1901:ff80::/44": "396982", - "2a06:3c40::/29": "34477", - "2606:2800:4a44::/46": "15133", - "2800:160:16e0::/44": "14259", - "2a01:6d80:f000::/36": "6723", - "2a02:26f7:75::/48": "20940", - "240a:a941::/32": "145019", - "2a0b:7800::/29": "15600", - "2001:500:126::/47": "396574", - "2a00:5480::/29": "42346", - "2a02:26f7:e048::/48": "36183", - "2404:c0:30a0::/39": "23693", - "2a10:540::/29": "47747", - "240e:3bf:ac00::/35": "4134", - "2607:1b00:93b2::/48": "54456", - "2a02:26f7:ef09::/46": "20940", - "2a0f:9882::/31": "208861", - "2405:b000::/39": "6262", - "2620:171:46::/48": "42", - "2a10:c540::/29": "44070", - "2001:678:994::/48": "208907", - "240a:ae97::/32": "146385", - "2602:804:1000::/45": "14536", - "2804:19f8::/32": "61829", - "2804:51b4::/32": "268471", - "2a0c:7a80::/29": "204782", - "2001:2020::/31": "12929", - "2401:5b80::/32": "133425", - "2404:af80:15::/48": "38026", - "2604:f980:4360::/44": "19957", - "2804:8cc:7::/48": "272413", - "2806:2f0:7024::/41": "17072", - "2a06:8380::/29": "212526", - "2a03:6f40::/32": "199508", - "2001:559:8249::/48": "33657", - "2401:4900:5910::/44": "45609", - "2402:9500:a01::/39": "55720", - "2405:4d00::/32": "17416", - "2804:1708::/32": "263117", - "2804:35c0::/32": "266304", - "2804:3608::/32": "266322", - "2a0b:f304:463::/32": "62240", - "2001:559:c103::/48": "7922", - "240e:44d:a80::/41": "4134", - "2001:146a::/32": "51032", - "2400:eb40:4005::/48": "14821", - "2401:5300::/32": "45680", - "2407:9440:62::/43": "141626", - "240a:a299::/32": "143315", - "2a01:7a8::/48": "207701", - "2a0c:5840::/32": "197226", - "2001:4870:a250::/33": "3549", - "240a:adfb::/32": "146229", - "2620:130:30c4::/48": "62861", - "2804:d84:cad::/32": "28171", - "2804:81e4::/32": "272484", - "2001:67c:2138::/48": "31348", - "2400:1c00:1::/45": "45143", - "240a:af80::/32": "146618", - "2604:bf00::/38": "17185", - "2620:82:e000::/48": "33014", - "2a0f:9400:7668::/47": "20473", - "2408:8957:9b00::/40": "17816", - "2600:1408:d401::/34": "20940", - "2804:3a20::/32": "266072", - "2a0a:a400::/29": "64444", - "240a:a471::/32": "143787", - "240a:a663::/32": "144285", - "2804:4088::/32": "265965", - "2a02:26f7:a4::/48": "36183", - "240a:ab44::/32": "145534", - "2804:157c::/32": "263390", - "2806:102e:15::/44": "8151", - "2403:18c0:1::/45": "54574", - "240e:967:8c00::/35": "4134", - "2602:fd23:2::/48": "398292", - "2800:160:2016::/44": "14259", - "2804:3838:31::/32": "53170", - "2001:44b8:30db::/45": "4739", - "2400:adc0:4000::/46": "9541", - "2401:b200::/45": "24186", - "2404:bf40:c002::/41": "139084", - "2a02:2a58::/39": "702", - "2a03:7020:1::/48": "59625", - "2a0e:fd45:e80::/48": "211772", - "2001:559:853c::/47": "7015", - "2401:3c0:21e::/48": "45528", - "240e:967:9800::/33": "4134", - "2620:171:4::/48": "42", - "2803:3100::/32": "16973", - "2804:69b0:150::/32": "270285", - "2a02:1c8:30::/44": "57128", - "2001:678:1f4::/48": "50004", - "2409:8038:1100::/36": "9808", - "2620:10a:e000::/40": "11250", - "2801:1f0:2020::/33": "3573", - "2001:559:84a9::/48": "7922", - "240a:ac98::/32": "145874", - "2804:14d:e669::/40": "28573", - "2001:67c:268c::/48": "199902", - "2001:67c:2aa4::/48": "8447", - "2403:2b40::/32": "137715", - "2804:ef4:6002::/37": "28642", - "2a01:6920::/32": "54876", - "2400:db80::/32": "56293", - "2001:200:c000::/35": "23634", - "2001:559:8503::/45": "7922", - "2804:dd0:200::/39": "28639", - "2a0f:ff00:100::/38": "213281", - "2804:1efc:f000::/36": "264458", - "2001:320::/33": "1237", - "2001:1838:a100::/33": "23352", - "2403:9140:7::/32": "18101", - "2406:8540:4::/47": "141202", - "240a:a61f::/32": "144217", - "2605:dd40:8206::/48": "398549", - "2804:1674::/44": "53231", - "2a0d:da06::/32": "211675", - "2001:508:a:1::/32": "32020", - "2001:678:898::/48": "39420", - "240e:1f:5000::/36": "58466", - "2604:2280::/40": "53340", - "2800:484:8b00::/35": "10620", - "2401:d800:f560::/40": "7552", - "2804:46d4:2::/32": "267014", - "2001:5b0:5f00::/40": "6621", - "2407:6ec0::/32": "133384", - "2607:9800:c114::/46": "15085", - "2a02:26f7:53::/48": "20940", - "240a:a6ce::/32": "144392", - "2804:8284::/32": "272524", - "2a05:f440::/29": "35280", - "2a06:2ec0::/32": "206281", - "2a0d:3c47::/32": "25369", - "2804:4a8c::/39": "267248", - "2a09:3a00:2000::/48": "200299", - "2a0a:e00::/48": "64432", - "2001:df0:217::/48": "56201", - "2600:6c38:72e::/47": "20115", - "2607:9200::/32": "19009", - "2605:80::/32": "11831", - "2804:2cd4:90::/42": "265246", - "2a00:8240::/29": "61029", - "2a0e:8140::/29": "35048", - "2001:1a10:5000::/31": "8781", - "2400:c800:204::/37": "4515", - "240e:804:200::/39": "140636", - "240e:c3:2800::/37": "63838", - "2a00:1c78::/48": "25408", - "2404:e801:100f::/43": "55430", - "2607:fdf0:5ef7::/44": "8008", - "2620:101:403a::/48": "36421", - "2a01:6480:11::/46": "29049", - "2a02:4880::/32": "12630", - "240e:983:1e08::/48": "134773", - "240a:ab90::/32": "145610", - "2602:ffa5::/40": "20141", - "2001:559:527::/44": "7015", - "2600:6c38:2c::/41": "20115", - "2803:bb40::/32": "52507", - "2a00:fac0::/32": "20677", - "2001:559:5ed::/46": "33287", - "2001:de2::/48": "142500", - "240a:a954::/32": "145038", - "2806:230:101d::/48": "11888", - "2a02:128:2::/48": "197726", - "2402:b80::/32": "134001", - "2403:1380::/32": "133421", - "240a:af4f::/32": "146569", - "2620:74:13::/48": "26134", - "2804:36d0::/32": "266374", - "2804:70a8:1800::/34": "270740", - "2001:648::/35": "5408", - "2401:3c0:15::/48": "45528", - "2405:9800:60::/44": "45430", - "2406:bd00:de50::/48": "55651", - "2804:14d:9e00::/40": "28573", - "2600:1407:3001::/37": "20940", - "2804:12a0::/32": "61900", - "2a06:6540:30c1::/48": "3549", - "2001:579:5400::/36": "22773", - "2402:8cc0::/40": "131137", - "2409:8c2f:3820::/32": "56041", - "2606:e800::/39": "25843", - "2620:0:1600::/48": "4390", - "2804:80b8:a000::/36": "271769", - "2804:53e0::/32": "28258", - "2a02:26f7:f285::/46": "20940", - "2400:c180:19::/48": "132513", - "2402:ef04:f000::/31": "7633", - "240a:ac62::/32": "145820", - "2600:40ff:ff92::/41": "701", - "2605:6f00::/32": "40092", - "2803:a3a0::/32": "267750", - "2804:6c0:100::/40": "262418", - "240a:a40a::/32": "143684", - "240a:a72a::/32": "144484", - "2605:4380::/32": "260", - "2607:f378::/32": "131", - "2801:80:1e79::/48": "14026", - "2a0a:4580::/29": "29670", - "2001:502:be98::/48": "7342", - "2408:8957:f6c0::/39": "17816", - "240e:473:ac50::/39": "4134", - "2803:fce0::/32": "269916", - "2804:3080::/32": "264955", - "2a00:4e40:1::/46": "59980", - "2a02:cb43:3004::/44": "20546", - "2402:1580:2100::/36": "17682", - "2804:74a8:200::/32": "270995", - "2a02:13e0::/48": "48075", - "2001:67c:157c::/48": "3215", - "2607:fd48:d00:2::/45": "13536", - "2804:16c0::/32": "61914", - "2804:2214:800c::/33": "28177", - "2001:c20:4869::/48": "3758", - "2406:e780:eb1::/48": "63679", - "2408:8240::/32": "4837", - "2803:b0a0::/32": "266806", - "2a01:4b00::/32": "56478", - "240a:a213::/32": "143181", - "2602:ff0c:a3::/48": "5081", - "2604:1b40::/32": "396006", - "2804:49b4::/32": "267198", - "2a03:1e80:c000::/40": "3320", - "2a0b:ee80::/29": "51395", - "2001:df4:f680::/48": "136360", - "2001:df7:6e00::/48": "17665", - "2406:e000:333::/41": "23655", - "240a:ac82::/32": "145852", - "2606:7700::/48": "399830", - "2804:e48::/32": "262949", - "2400:d400:9897::/44": "45671", - "2a02:26f7:3::/48": "20940", - "2a0b:cbc1::/29": "200780", - "2001:559:2fe::/47": "7922", - "2001:559:8038::/47": "7922", - "2409:8d15:1a00::/34": "56044", - "240e:e9:4800::/37": "4134", - "2620:10a:80ab::/48": "394354", - "2800:160:1616::/42": "14259", - "2a01:90e0::/32": "199733", - "2001:559:c2b9::/48": "7922", - "2408:8956:6600::/40": "17622", - "2600:1006:a120::/36": "22394", - "2804:18d0::/32": "19990", - "240a:abbb::/32": "145653", - "2804:22b4:c8::/32": "264117", - "2c0f:fb18::/32": "37199", - "2001:559:cd::/48": "33659", - "2404:bf40:8002::/42": "139084", - "240a:ae09::/32": "146243", - "240a:af64::/32": "146590", - "2804:4574::/32": "266927", - "240a:a44e::/32": "143752", - "240a:acb0::/32": "145898", - "240e:3b2:c000::/37": "140315", - "2607:fcd0:fa80:5701::/52": "8100", - "2a02:26f7:c700::/48": "36183", - "2a04:5b81:2000::/48": "206499", - "2001:559:8470::/48": "7015", - "2001:559:852e::/48": "7922", - "2001:4870:a24f::/48": "10596", - "2401:d800:db40::/42": "7552", - "240e:108:1183::/45": "133775", - "2a00:bdc0:e006::/48": "60476", - "2001:1938:10::/44": "11588", - "2400:9700:6::/39": "24550", - "2607:d700::/32": "19566", - "2804:4ba0::/32": "267319", - "2806:2f0:96a1::/41": "17072", - "2a0e:1c80:8::/48": "3399", - "2001:559:84b0::/48": "7015", - "2001:559:853f::/48": "7015", - "2001:559:85e1::/48": "13367", - "2408:8406:9000::/39": "4808", - "240e:980:2500::/40": "134756", - "2001:559:19a::/48": "33652", - "2401:f040::/32": "45828", - "2402:9500:c01::/39": "55720", - "2408:8957:9900::/40": "17816", - "2001:4998:1c::/48": "14779", - "2606:4700::/47": "13335", - "2a00:c00:f030::/46": "24467", - "2a00:1288:ef85::/43": "10310", - "2001:559:84af::/48": "33657", - "2404:3500::/32": "58627", - "2407:5140::/32": "138235", - "2606:ae00:9300::/37": "7287", - "2a11:7600::/29": "211199", - "240a:a273::/32": "143277", - "2602:fc97::/48": "399544", - "2a02:26f0:700::/48": "7545", - "2a02:2ab8:310::/42": "702", - "2a06:1a00::/33": "39824", - "240a:a35c::/32": "143510", - "240e:44d:5180::/41": "4134", - "2a00:e2a0::/32": "51004", - "2a02:26f7:de45::/46": "20940", - "2a02:2e02:1b40::/40": "12479", - "2a0a:fa00::/29": "49191", - "2400:9800:6015::/42": "24203", - "240a:a0e1::/32": "142875", - "2600:6001::/32": "11351", - "2401:8800:800::/40": "17439", - "2801:15:7000::/48": "269867", - "2a00:b5c0::/32": "57910", - "2a02:26f7:eac9::/42": "20940", - "2001:550:a902::/45": "174", - "2402:800:9ac5::/43": "7552", - "2804:3588::/32": "266292", - "2a03:4300::/29": "51048", - "2001:559:c2ae::/48": "21508", - "2001:ee0:d240::/39": "45899", - "240e:983:203::/48": "17799", - "2600:140f:a000::/48": "24319", - "2800:160:11cf::/43": "14259", - "2a02:26f7:b949::/42": "20940", - "2a03:5a00:3d::/48": "200503", - "2001:4878:4003::/48": "35994", - "2405:fc00::/32": "37989", - "2604:d600:1c::/46": "32098", - "2610:b0:4107::/44": "21433", - "2402:800:7440::/42": "7552", - "2a01:190:15ed::/48": "16099", - "2406:d501::/44": "136557", - "2804:104c:4800::/40": "263629", - "2a03:7580:4000::/40": "34530", - "2804:75f8::/32": "271081", - "2001:559:8486::/48": "33657", - "2806:230:302d::/48": "11888", - "2001:df7:1300::/48": "137827", - "2a00:1ec8::/42": "2854", - "2a06:e881:1802::/45": "206885", - "2001:4878:2010::/48": "12222", - "2407:b4c0:c::/47": "142366", - "2a02:f50::/32": "41833", - "2a0c:52c0::/29": "203973", - "2001:1248:a4c7::/44": "11172", - "2404:4a00:3294::/33": "45629", - "2a04:4e40:5e00::/48": "54113", - "2001:b08:17::/48": "8398", - "2408:8459:ed10::/42": "17623", - "240a:aba7::/32": "145633", - "2a02:26f0:fe01::/39": "20940", - "2401:d800:7190::/42": "7552", - "2804:3190::/32": "53097", - "2a00:a980::/32": "9022", - "2a06:3cc0::/29": "57763", - "2a0c:b641:264::/47": "59598", - "2402:800:f570::/40": "7552", - "2402:f800:e000::/36": "7602", - "2600:1406:9400::/48": "35994", - "2001:16f8:667::/34": "25525", - "2406:ef80:1::/46": "63473", - "2a0a:48c0::/32": "39324", - "2001:7f9:8::/48": "51354", - "2001:df1:ce00::/48": "64032", - "2c0f:ede8::/34": "328510", - "2600:2002:3000::/36": "33517", - "2607:a400:8::/32": "21859", - "2a00:19d0::/29": "12586", - "2a0b:7380::/29": "31617", - "240a:a8fe::/32": "144952", - "2803:9000::/32": "262194", - "2001:559:80e9::/48": "33657", - "2402:7e00::/32": "45280", - "2409:8074:3100::/32": "9808", - "2400:3b00:40::/48": "18229", - "2405:9800:9c00::/40": "38443", - "2409:8002:1000::/40": "38019", - "2409:8924:8500::/38": "56046", - "2804:14c:798f::/41": "28573", - "2804:46c8::/32": "267011", - "2a04:9fc0::/29": "1136", - "2001:67c:22e0::/48": "48803", - "2604:d600:928::/47": "32098", - "2a01:8640:7::/48": "61046", - "2a02:2430::/46": "39869", - "2a03:6083:d000::/29": "16285", - "2a04:eb40::/29": "21183", - "2606:2000:16::/32": "1616", - "2802:0:46::/47": "18747", - "2a00:1210:fffe::/48": "34700", - "2001:559:80ed::/48": "7922", - "2600:1007:b130::/40": "22394", - "2804:3c50::/32": "266203", - "2a0c:4500::/32": "207517", - "2400:d740::/32": "136106", - "2409:8053:1002::/40": "56047", - "2604:2700:200::/32": "32181", - "2607:f208:df01::/48": "26496", - "2a07:2dc0::/29": "57878", - "2001:678:35c::/48": "12331", - "2620:112:f000::/48": "6336", - "2803:94c0::/32": "52273", - "2804:4e28::/32": "268243", - "2a03:c780::/32": "29672", - "2001:43f8:11f1::/48": "37282", - "2401:7500:1111::/48": "33480", - "240e:e5:8000::/30": "4812", - "2406:cb42::/48": "395092", - "2607:8300::/46": "13876", - "2804:1048::/32": "263628", - "2a0c:8f00::/29": "205044", - "2001:67c:1ba8::/48": "49494", - "2a02:26f7:cd81::/46": "20940", - "2a06:1287:330d::/48": "208753", - "240a:a45b::/32": "143765", - "2600:370f:7028::/43": "32261", - "2605:8000::/42": "4261", - "2620:35:8000::/48": "394522", - "2a02:26f7:b789::/42": "20940", - "2405:ba00:8efe::/48": "23885", - "2803:9800:a01c::/47": "11664", - "2a02:26f7:c1c9::/42": "20940", - "240a:ada2::/32": "146140", - "2605:4b40::/32": "26425", - "2a00:15f8::/32": "25532", - "2401:580::/32": "38200", - "2408:8957:af00::/40": "17816", - "2602:fd53::/36": "395611", - "2804:7438::/46": "270967", - "2a01:9ac0::/32": "59919", - "2406:840:a08::/48": "139317", - "2600:141b:7800::/48": "35994", - "2a02:26f7:bc01::/45": "20940", - "2a0a:6340:dc02::/29": "42624", - "2801:114:7::/48": "26506", - "2a02:26f7:c5::/48": "20940", - "2400:c000::/32": "38294", - "2404:5f40:2::/48": "38447", - "2a04:4e40:7a00::/48": "54113", - "2a09:10c0::/29": "6886", - "2001:559:8033::/45": "7922", - "2a04:4e40:7200::/47": "54113", - "2a0b:f842::/29": "205376", - "2a10:e140::/32": "12779", - "2001:559:8577::/48": "7922", - "2001:448a:5110::/42": "7713", - "2400:fc00:4a40::/32": "45773", - "2403:9800:11::/48": "4771", - "2804:8150::/32": "272446", - "2401:ff80:1893::/39": "133954", - "2801:80:760::/48": "263576", - "2620:8e:2000::/48": "397263", - "2804:e94:1000::/41": "262468", - "2a00:1268::/32": "39761", - "2402:bc00::/29": "18144", - "2806:230:200f::/48": "11888", - "2a02:cc40::/29": "2116", - "2a05:d03a:c000::/40": "16509", - "2001:559:82b3::/45": "7922", - "240a:a932::/32": "145004", - "240e:85c:10::/42": "4134", - "2600:9000:2061::/40": "16509", - "2a00:1178::/46": "35415", - "2a03:e780::/43": "39735", - "2401:5f80::/45": "38731", - "2605:6f80::/40": "53340", - "2806:264:300::/41": "13999", - "2a02:26f0:cf00::/48": "34164", - "2001:670::/29": "719", - "2401:4900:1d00::/41": "45609", - "2401:ff80:140d::/46": "133954", - "240a:a5cc::/32": "144134", - "2804:3b8:7::/44": "52965", - "2804:316c::/32": "265014", - "2a03:c800::/32": "56993", - "2406:3000:36::/44": "4657", - "2620:10a:d000::/44": "33703", - "2806:230:2010::/48": "265594", - "2a0c:5940::/29": "44668", - "2001:559:2fd::/48": "7015", - "2a01:4a0:6::/44": "201011", - "2a07:6080::/29": "39798", - "2606:b600:100::/48": "26527", - "2804:2484:8110::/40": "28258", - "2c0f:fc00:b012::/27": "3741", - "240a:a9c7::/32": "145153", - "2600:1405:6001::/35": "20940", - "2804:7370::/32": "270915", - "2a0a:d6c0:2035::/48": "203564", - "2001:4b98::/36": "29169", - "240a:a6f6::/32": "144432", - "2604:d600:1641::/46": "32098", - "2800:160:1a0e::/43": "14259", - "2a0e:acc0::/29": "208414", - "2001:579:5f88::/34": "22773", - "2406:daa0:90c0::/44": "16509", - "2804:7a28:2000::/40": "271351", - "2806:2f0:4004::/42": "17072", - "2a05:ce40::/29": "201006", - "2001:559:c1df::/48": "33652", - "2001:67c:2cf4::/48": "59951", - "2001:fb0:1035::/48": "133167", - "2804:4a34::/32": "267224", - "2404:c000:8000::/46": "17727", - "2408:8956:d840::/40": "17622", - "2605:5c0:c045::/44": "28885", - "2a09:82::/29": "59615", - "2a0e:9100::/29": "212872", - "2401:8d00:6::/44": "38345", - "2600:2108::/34": "54858", - "2a00:79e1:f12::/40": "36384", - "2a04:1b00:e::/47": "61007", - "2a07:1c42:1::/48": "209669", - "2a09:5e40::/29": "209424", - "2a09:9180:ecfb::/48": "42081", - "2800:160:1e07::/43": "14259", - "2001:559:521::/48": "33660", - "2400:adc7:2800::/39": "9541", - "2404:63c0:50::/48": "131645", - "240a:a01b::/32": "142677", - "2408:8456:9810::/42": "134543", - "2600:1419:8001::/37": "20940", - "2604:4dc0::/32": "54483", - "2620:74:4f::/43": "7342", - "2a0c:e440::/29": "200497", - "2001:388:e3::/35": "7575", - "2001:df7:6300::/48": "132772", - "2804:c48:ffff::/48": "52687", - "2a06:100::/32": "200760", - "2a0d:2f00::/48": "39691", - "2620:104:600a::/48": "53779", - "2a02:26f7:c2c0::/48": "36183", - "2001:678:ff4::/48": "211033", - "2607:b580::/44": "19754", - "2620:103:a000::/44": "12148", - "2804:2b68::/32": "265152", - "2a04:e4c0:14::/44": "36692", - "2a0c:4180::/29": "29854", - "240a:a234::/32": "143214", - "240a:a731::/32": "144491", - "2804:4e08:2001::/32": "268235", - "2804:5930::/32": "268174", - "2a00:1288:80::/48": "203220", - "2a00:7ce0::/32": "60832", - "2a0b:bf80::/32": "60522", - "2a0d:8d05:1::/48": "209389", - "2a10:e80::/29": "47289", - "2a10:b340::/29": "211629", - "2a0a:ab80::/32": "206637", - "2001:559:8209::/48": "7015", - "2408:8459:fb00::/37": "17622", - "240e:14:2000::/33": "4134", - "2602:fd34::/36": "393292", - "2a00:11c0:1010::/48": "42388", - "2a09:4f40::/48": "209562", - "2a0a:65c0::/32": "15703", - "2001:c20:800::/34": "3758", - "2600:1407:f801::/28": "20940", - "2a04:9dc0::/42": "9009", - "2605:59c2:1000::/34": "36492", - "2607:8300:4::/48": "13876", - "2600:8807:5360::/34": "22773", - "2a04:4a43:5200::/34": "206067", - "2a0d:2145::/36": "39083", - "2402:800:32e0::/44": "7552", - "240a:ae6c::/32": "146342", - "240e:5a:4300::/40": "140294", - "2620:131:3000::/47": "19747", - "2001:67c:1590::/48": "21430", - "2001:df0:3a80::/48": "139002", - "2001:df5:f180::/48": "141710", - "2a02:26f7:f808::/48": "36183", - "240a:ad9b::/32": "146133", - "2602:feb4:f0::/44": "25961", - "2a02:26f7:94::/48": "36183", - "2a02:26f7:c800::/48": "36183", - "2a05:1083:fec0::/44": "209870", - "2a0a:eac0::/31": "31143", - "2001:49f0:d0f4::/44": "174", - "240a:aa3a::/32": "145268", - "240a:ada5::/32": "146143", - "240e:818::/26": "4134", - "2804:5fd4::/32": "269126", - "2a09:3c00:1::/48": "213268", - "2600:1901:bdd0::/44": "396982", - "2804:3a8::/32": "53195", - "2402:800:bb30::/41": "7552", - "240e:3ba:9200::/36": "140317", - "2600:1005:b030::/41": "22394", - "2602:fded::/36": "397472", - "2a0e:8f02:20f7::/44": "212008", - "2a10:2f00:147::/48": "212793", - "2c0f:ec18::/32": "328391", - "2402:e300::/46": "131706", - "2600:5c01:31cc::/37": "10796", - "2604:a180:6000::/32": "11139", - "2804:4dd0::/32": "268221", - "2804:5f00:11::/32": "269070", - "2400:9380:92c0::/44": "136167", - "2a05:db80::/29": "41071", - "2001:468:2807::/126": "11537", - "2001:67c:3e0::/48": "16089", - "2403:c00:d00::/46": "17488", - "2404:6080::/32": "135415", - "2804:493c::/32": "267172", - "2806:2f0:60e1::/39": "17072", - "2a02:26f7:ddc9::/42": "20940", - "2a03:da0::/32": "201782", - "2001:460:78::/46": "7991", - "2001:550:5605::/44": "174", - "2403:9800:b016::/48": "4771", - "2404:c0:1820::/34": "23693", - "240a:ab6c::/32": "145574", - "2804:4780::/32": "267058", - "2a02:2e02:10b0::/41": "12479", - "2a06:6541:3081::/48": "3549", - "2001:559:318::/48": "7922", - "2001:4408:5241::/43": "4758", - "2401:d7c0::/32": "45355", - "2409:8915:7c00::/32": "56044", - "2a00:d340:ffff::/48": "51720", - "2a00:f440:d::/32": "48347", - "2a03:7202::/32": "44895", - "2406:3000:30::/47": "4657", - "2620:171:66::/44": "42", - "2804:2674::/47": "264344", - "2a07:e100::/32": "200925", - "2a10:9fc0::/29": "40970", - "2400:cb00:a4b0::/46": "13335", - "2404:bf40::/32": "139084", - "2408:822a:9200::/34": "139007", - "2801:0:390::/48": "14080", - "2804:2a1c::/32": "264057", - "2806:2f0:5041::/42": "17072", - "2a00:a8e0:1::/46": "202108", - "2001:480:51::/48": "6009", - "2620:e:4000::/48": "13649", - "2a02:26f7:ee41::/46": "20940", - "2001:579:244c::/42": "22773", - "2001:678:490::/48": "12843", - "2404:b0:2000::/47": "9891", - "2408:8956:8100::/40": "17816", - "2402:8700:54::/32": "58979", - "2408:8957:edc0::/38": "17622", - "2800:160:1da9::/45": "14259", - "2a02:2e02:1e80::/41": "12479", - "2001:559:c229::/48": "7015", - "2001:1ba8::/29": "50821", - "2402:c800:ff74::/44": "38639", - "240a:a253::/32": "143245", - "2605:1900:8440::/33": "12208", - "2a02:c100::/29": "199645", - "2400:a980:4000::/40": "38587", - "240a:a830::/32": "144746", - "2605:a40e::/47": "33363", - "2a00:4802:3b0::/36": "13124", - "2001:559:454::/48": "7922", - "240a:a00d::/32": "142663", - "2001:559:c117::/48": "33667", - "2600:1000:a020::/40": "22394", - "2a02:26f7:c7ca::/42": "20940", - "2a09:be40:4251::/40": "213349", - "2a0f:a180::/29": "208083", - "2001:559:3ac::/48": "21508", - "2604:ae80:a100::/40": "11904", - "2001:559:c113::/48": "7922", - "2400:9380:9205::/46": "4809", - "2001:df0:2f5::/48": "55912", - "2a02:2f0c:d000:32::/57": "8708", - "240a:af8a::/32": "146628", - "240e:f:b000::/36": "134768", - "2a00:6901:e002::/47": "20926", - "2a05:e580:fd00::/38": "134521", - "2001:559:432::/48": "33287", - "2606:2800:4a2c::/46": "15133", - "2800:5f0:80d::/42": "22724", - "2a01:8840:96::/44": "12041", - "2a01:8840:bd::/48": "207266", - "2804:4ff8::/32": "268361", - "2804:6630::/32": "269540", - "2001:559:26d::/48": "7015", - "2001:559:2b4::/47": "7922", - "2620:11a:a00b::/43": "43515", - "2804:41c8::/32": "267456", - "2a02:26f7:a9::/48": "20940", - "2001:1900:2385::/44": "3356", - "240e:108:26::/48": "4134", - "2a02:26f7:f18d::/42": "20940", - "2001:388:607c::/48": "135893", - "2001:df4:2880::/48": "7545", - "2600:6c38:632::/39": "20115", - "2600:8807:93ca::/45": "22773", - "2605:a404:8ad::/43": "33363", - "2a09:f200::/29": "39305", - "2400:5200:1c00::/40": "55410", - "2405:c840::/32": "140072", - "2602:80b:4000::/40": "393941", - "2804:2868::/32": "263961", - "2804:7528::/32": "271027", - "2a03:16e0::/32": "21235", - "2a06:e382::/29": "203507", - "2001:559:c084::/48": "33651", - "2400:8500:d37d::/48": "7506", - "2406:6e00:f03a::/48": "55517", - "240e:37e:2600::/32": "4134", - "2a02:2e02:1c20::/41": "12479", - "2a0a:e5c0:13::/48": "213081", - "2001:559:447::/48": "22909", - "2a03:4f40::/32": "206825", - "2001:13f8::/32": "27817", - "2406:b480:200::/46": "38146", - "2407:0:0:5::/58": "4761", - "2600:6c38:231::/45": "20115", - "2604:d600:1c15::/46": "32098", - "2800:160:1e63::/44": "14259", - "2804:7a3c:f000::/36": "271357", - "2402:6000::/32": "9503", - "2406:8800:904b::/33": "17465", - "2a02:26f7:ecc0::/48": "36183", - "2a09:f180::/48": "50007", - "2600:6c2e:cf::/39": "20115", - "2602:fd63::/36": "11805", - "2001:67c:104::/48": "198595", - "2001:67c:2574::/48": "25148", - "2001:4408:5203::/42": "4758", - "2400:9800:6028::/32": "24203", - "2a02:fe80:11::/44": "30148", - "2a0f:5382:1312::/48": "208135", - "2001:1248:5916::/44": "11172", - "2600:1417:1f::/48": "20940", - "2a0d:4d00::/46": "44794", - "2001:fd8:3380::/42": "132199", - "2402:8100:20c7::/48": "45271", - "2804:21ac::/32": "264566", - "2804:33dc::/36": "265421", - "2a01:520::/32": "2116", - "2607:f2f8::/32": "25795", - "2800:370:44::/48": "28006", - "2a02:26f7:fa88::/48": "36183", - "2001:559:103::/48": "20214", - "2001:559:8057::/44": "7922", - "2409:8a52:b00::/37": "56047", - "2607:fd50::/32": "40015", - "2804:1ae4::/32": "61697", - "2804:3690::/32": "266356", - "2804:37b0::/36": "266429", - "2600:1415:801::/38": "20940", - "2800:b70:2000::/48": "262191", - "2a00:e78:8000::/46": "47530", - "2a02:26f7:c94a::/47": "20940", - "2a09:4c0:1e1::/38": "58057", - "2409:8c85:81::/35": "9808", - "2607:f758::/35": "13649", - "2806:2f0:4001::/46": "17072", - "2001:253:128::/48": "142094", - "240e:5:8000::/30": "4134", - "2804:73fc::/32": "270950", - "2a05:fb47::/32": "208861", - "2404:2e00::/44": "10226", - "2600:c02:1020::/48": "27385", - "2406:840:1860::/48": "139317", - "2a0e:46c4:2900::/48": "138435", - "2001:678:c58::/48": "213080", - "2405:9800:d008::/39": "45430", - "2406:3000:32::/45": "4657", - "240e:974:e202::/40": "4134", - "2803:9800:a099::/37": "11664", - "2804:4564::/32": "266923", - "2603:2000::/19": "7922", - "2605:a404:74a::/40": "33363", - "2a02:e980:1fa::/38": "19551", - "2a09:1180::/29": "59441", - "2001:448a:2030::/41": "7713", - "2001:4b20:1000:1::/50": "34288", - "240a:a933::/32": "145005", - "2620:3::/48": "14200", - "2620:18c:f2::/36": "396507", - "2804:57c::/36": "262517", - "2804:78dc::/32": "271270", - "2804:70c0:f::/43": "270746", - "240a:a582::/32": "144060", - "2600:1000:b1f0::/36": "22394", - "2602:fe87::/36": "399693", - "2401:4900:5930::/40": "45609", - "240e:967:e600::/36": "4134", - "2800:160:c167::/34": "14259", - "2804:17f0::/32": "263259", - "2804:28d8::/32": "263984", - "2800:160:1159::/42": "14259", - "2800:1a0::/32": "27933", - "2804:3740::/32": "266399", - "2a01:8840:3d::/48": "207266", - "2a02:26f7:dcc0::/48": "36183", - "2001:1388:5548::/36": "6147", - "2401:d800:b8e0::/39": "7552", - "2600:1007:d040::/40": "22394", - "2001:559:8102::/48": "7922", - "2403:8300:e04::/44": "204527", - "2610:a1:3070::/48": "12008", - "2804:151:61::/46": "10954", - "2804:b18:b050::/33": "52941", - "2a04:8b80::/29": "25151", - "2406:daa0:60a0::/44": "16509", - "2604:d600:1234::/47": "32098", - "2604:d600:2201::/36": "32098", - "2803:1800::/32": "27831", - "2a05:fa40::/29": "197524", - "2a07:2904::/32": "15585", - "2001:678:880::/48": "35332", - "2001:d38::/32": "2914", - "2401:3bc0:401::/38": "137409", - "2404:bf40:f201::/36": "139084", - "2409:8904:d2b0::/37": "24547", - "240e:5f::/33": "4134", - "2610:190:1c00::/38": "62", - "2a07:61c0::/29": "12329", - "2409:8752:700::/36": "56047", - "2600:380:7880::/39": "20057", - "2800:190:101::/44": "11664", - "2804:5694::/32": "268010", - "2804:62a4::/32": "269309", - "2a01:4020:15::/46": "213122", - "2a04:bc40:2dc1::/46": "35277", - "2604:39c0::/32": "396276", - "2a01:d0:1e::/38": "29632", - "2a03:780::/32": "59702", - "2001:559:403::/48": "33287", - "2403:9800:b017::/48": "4648", - "2406:da00:e000::/40": "16509", - "2600:100b:b1e0::/33": "6167", - "2804:4ac0::/32": "267261", - "2a04:3544:c000::/30": "202053", - "2404:c8::/47": "10217", - "2600:80c:1300::/40": "701", - "2600:1008:6000::/44": "6167", - "2a09:38c0::/29": "30823", - "2a0b:3dc0::/32": "43359", - "2408:8456:4a10::/42": "134543", - "2a02:c40::/46": "13000", - "2a03:25c0::/32": "41770", - "240a:a336::/32": "143472", - "240e:3ba:2c00::/35": "134774", - "2620:1d5:9::/45": "14773", - "2804:eb4::/32": "61890", - "2804:3138:d020::/34": "265000", - "2a04:4e40:4410::/41": "54113", - "240a:a855::/32": "144783", - "2602:80a:2004::/48": "398351", - "240a:a9f9::/32": "145203", - "2602:feb4:230::/44": "25961", - "2803:d400::/32": "52384", - "2804:5e0c::/32": "269008", - "2a07:8c00::/32": "208692", - "2001:579:e328::/41": "22773", - "2804:2634:1170::/32": "264332", - "2400:adc7:800::/39": "9541", - "240a:a10e::/32": "142920", - "240a:ab09::/32": "145475", - "240a:ac3d::/32": "145783", - "2600:1415:401::/36": "20940", - "2804:f8c:8100::/36": "263591", - "2a0c:ea40::/29": "200409", - "2408:845c::/31": "4837", - "2804:4040::/32": "265947", - "2804:4f28::/32": "268308", - "2a02:6100::/32": "34572", - "2407:ad80::/32": "45062", - "240a:ae23::/32": "146269", - "2600:6c38:d1d::/46": "20115", - "2600:9000:2031::/48": "16509", - "2a0b:d2c0::/29": "205452", - "240a:ad32::/32": "146028", - "2600:1017:b4d0::/44": "22394", - "2607:fc48:f004::/48": "40009", - "2a03:ac1::/32": "42953", - "2a09:bac0:133::/48": "395747", - "2a0b:11c0:20::/44": "198682", - "2a0b:2d40:eeef::/35": "209135", - "2001:df0::/48": "9431", - "2405:7700:a000::/35": "45352", - "2800:484:c600::/40": "10620", - "2a02:748:4000::/34": "29802", - "240a:a90f::/32": "144969", - "2607:f740:e00b::/48": "63911", - "2800:bf0:14b::/43": "27947", - "2a02:2010:2020::/45": "20978", - "2a02:26f7:df01::/46": "20940", - "2a04:2e80:8::/48": "25106", - "2001:678:12::/48": "197440", - "2400:8500:5701::/48": "58791", - "2605:6180::/32": "14340", - "2804:4290::/32": "267508", - "2a01:248::/32": "28792", - "2a01:5040:a000::/48": "43996", - "2a07:4140::/29": "50084", - "240a:a661::/32": "144283", - "2804:1e38:e001::/36": "264415", - "2a02:1390:9000::/40": "21351", - "2a04:c440::/34": "2047", - "2001:559:c31a::/48": "33657", - "2001:1248:96b9::/41": "11172", - "2400:f700::/32": "58451", - "2607:f6f0:201::/48": "54588", - "2804:5f0c::/32": "269073", - "2804:709c::/32": "270737", - "2001:4d98:2200::/35": "3303", - "2402:800:37fe::/36": "7552", - "2804:14c:6100::/40": "28573", - "2a09:ee00::/29": "200272", - "2a0c:100::/29": "206065", - "2a0f:ecc0::/29": "62167", - "2001:1a11:7c::/47": "42298", - "2406:8d40::/32": "138225", - "2604:da80::/32": "29886", - "2a02:f90::/32": "12886", - "2a03:db80:2c11::/46": "680", - "2a05:a1c0::/32": "201155", - "2400:dd03:1009::/46": "7497", - "2405:d400::/32": "9927", - "2600:1017:f800::/44": "22394", - "2804:13b8::/32": "263548", - "2a02:26f7:c401::/46": "20940", - "2407:ff80::/32": "135881", - "240a:ad0f::/32": "145993", - "240e:3bc:7800::/39": "4134", - "2800:200:f101::/40": "12252", - "2803:e360::/32": "264824", - "2804:59fc::/35": "268738", - "2a02:6460::/32": "201875", - "2001:559:c0ef::/48": "33660", - "2001:67c:530::/48": "42295", - "2404:2280:113::/48": "24429", - "2607:f0c8::/32": "21949", - "2803:19c0::/32": "264605", - "2a02:5640::/29": "9137", - "2600:141b:c801::/35": "20940", - "2a00:1188:1a::/29": "8455", - "2a0f:5707:aa8a::/45": "56382", - "2406:d140:8000::/34": "49544", - "2a01:8840:ca::/45": "12041", - "2804:1398::/47": "263541", - "2804:4024:ff00::/40": "265937", - "2a0e:b107:2b::/48": "208059", - "2001:16a2:4c00::/34": "25019", - "2407:400::/32": "17734", - "2a06:e40::/29": "31631", - "2001:470:9d::/42": "6939", - "2001:559:c15d::/48": "22909", - "2620:16d:3000::/32": "7862", - "2001:1248:97c5::/44": "11172", - "2607:380::/32": "27195", - "2001:559:206::/48": "7922", - "2001:559:c3d8::/48": "7016", - "2001:4430:6090::/36": "17853", - "2804:6d1c::/32": "270513", - "2a02:26f7:ec04::/48": "36183", - "2001:12d0:841::/40": "28571", - "240a:a0aa::/32": "142820", - "240a:a445::/32": "143743", - "2804:11c0::/32": "263436", - "2a01:650::/32": "30795", - "2a02:26f0:1c::/48": "31108", - "2a06:57c0::/29": "3214", - "2001:67c:2e68::/47": "62217", - "2407:ab00::/48": "45270", - "2a00:55a0:f900::/40": "9009", - "2a02:ee80:4196::/44": "3573", - "2a05:91c1::/48": "58016", - "2405:7100::/32": "38474", - "240a:a308::/32": "143426", - "2600:380:da00::/34": "7018", - "2001:ee0:9a40::/39": "45899", - "240e:280::/23": "4134", - "2604:a1c0::/32": "395466", - "2804:5e4c::/32": "269024", - "2a07:9a00::/29": "202605", - "2001:559:212::/47": "7016", - "2001:559:841e::/48": "33491", - "2001:1248:a560::/45": "11172", - "2806:240::/32": "14178", - "2a00:9a40::/32": "6819", - "2a01:8560::/32": "25376", - "2a02:e00:fff1::/44": "29141", - "2001:559:864b::/48": "7015", - "2001:fd8:34b0::/44": "4775", - "2804:2658::/32": "264328", - "240a:a7e4::/32": "144670", - "240e:473:5a50::/39": "4134", - "2804:6088::/32": "269173", - "240a:a0ec::/32": "142886", - "2804:1890::/32": "61940", - "2401:3c00:201::/48": "38322", - "2404:e100:3::/48": "55685", - "2801:80:ad0::/48": "52826", - "2806:230:302f::/36": "11888", - "2a01:5f20::/32": "56784", - "2a02:2440::/32": "33835", - "2001:559:845b::/48": "33287", - "2a02:2ad0:245::/46": "702", - "2a0f:ca86::/40": "208046", - "2a0f:e640::/29": "60781", - "2408:840c:b800::/40": "17621", - "2600:1014:f100::/44": "6167", - "2607:f368:320f::/48": "46846", - "2804:598::/32": "262526", - "2408:8459:4610::/42": "17623", - "2409:8c29::/29": "9808", - "2804:e94:800::/38": "262468", - "2806:20d:1d18::/46": "32098", - "2804:1f12::/32": "52950", - "2a02:26f7:d74d::/42": "20940", - "2a0d:d080::/29": "49054", - "2a00:4802:1b00::/37": "13124", - "2001:559:2bd::/46": "7015", - "2001:df0:24f::/48": "58436", - "2602:807:6005::/48": "399652", - "2804:2b30::/32": "262741", - "2804:3de4::/32": "266560", - "2804:6764::/32": "269625", - "2a00:1c10:fff0::/44": "50300", - "2a09:bac0:106::/47": "13335", - "2001:df0:25e::/48": "131159", - "2402:800:6249::/42": "7552", - "2604:8200:5::/48": "23089", - "2401:d800:97b0::/36": "7552", - "240a:a493::/32": "143821", - "2804:5f4c::/32": "269090", - "2a01:8840:79::/48": "207266", - "2a02:26f7:d648::/48": "36183", - "2a02:4544:e8::/46": "197207", - "2001:559:c020::/47": "7922", - "2402:800:9663::/43": "7552", - "2406:57c0:244::/46": "134672", - "2600:1407:18::/46": "20940", - "2604:bc0::/48": "8100", - "2620:144:a00::/32": "53692", - "2a02:26f7:eb88::/48": "36183", - "2001:67c:2cec::/48": "2686", - "2403:780:c000::/34": "64098", - "2406:d740::/48": "141449", - "240a:a615::/32": "144207", - "2600:1402:4001::/35": "20940", - "2804:1bd0::/32": "61752", - "2a01:6ee0::/32": "62214", - "2001:559:8116::/47": "7922", - "240e:473:7f50::/40": "4134", - "2803:ca80::/47": "263249", - "2804:621c::/32": "269276", - "2a02:26f0:1e::/42": "20940", - "2a02:26f0:74::/48": "34164", - "2001:559:3e2::/48": "7016", - "2001:559:8383::/48": "33659", - "2001:16a2:34::/46": "25019", - "2409:804c:25::/44": "9808", - "2606:4f00:6::/48": "19324", - "2a04:eac0::/29": "201878", - "2a10:2a80:ac::/48": "207727", - "2001:559:c11d::/48": "33662", - "2620:ed:4000::/48": "852", - "2804:62a8::/32": "269310", - "240a:a3a8::/32": "143586", - "2a0b:e42:1::/48": "205809", - "2001:dc7:5d78::/40": "24151", - "2a00:d60::/32": "29680", - "2a0f:8680::/29": "60781", - "2001:559:c0::/48": "21508", - "2409:8753:900::/38": "56047", - "2804:904::/32": "263046", - "2a02:26f7:f941::/46": "20940", - "2001:67c:211c::/48": "8447", - "2001:4430:c028::/35": "17853", - "2600:5000::/33": "7029", - "2001:678:4c4::/48": "48060", - "2001:67c:2344::/48": "200479", - "2001:44b8:2034::/48": "4739", - "2407:6bc0::/32": "63981", - "240a:a38f::/32": "143561", - "2607:f770::/32": "22958", - "2408:80ea:6480::/42": "17622", - "2600:6c38:242::/45": "20115", - "2604:a400:b000::/33": "11320", - "2804:4f58:4100::/32": "268321", - "2804:36a0::/35": "266360", - "2403:4200:401::/48": "58534", - "2408:8456:5240::/39": "17816", - "2a00:6d43:a00::/32": "31034", - "2a0d:60c1::/30": "208861", - "2803:9800:a893::/45": "11664", - "2804:ab0::/32": "52907", - "240a:a4e7::/32": "143905", - "2620:91:c004::/47": "54900", - "2a07:7e80::/29": "202870", - "2001:df1:3700::/50": "136324", - "2404:a800:7::/35": "9498", - "2602:fce2::/36": "398874", - "2804:27cc::/32": "53125", - "2a01:5cc0::/32": "51050", - "2001:559:82fb::/48": "7016", - "240a:a9a5::/32": "145119", - "2800:160:1ead::/43": "14259", - "2001:500:120::/48": "396549", - "2803:4460::/32": "3549", - "2a02:26f7:16::/48": "36183", - "2a06:1e00:70::/48": "60695", - "2a0f:6140:100::/44": "207599", - "2402:4400::/32": "44356", - "240a:a31c::/32": "143446", - "2602:feb4:a0::/44": "25961", - "2607:8200:8000::/36": "46691", - "2a00:1560:d::/48": "59771", - "2400:3200:babb::/33": "37963", - "2806:2f0:9681::/42": "17072", - "2405:6e00:620::/43": "18291", - "2607:f140:a001::/33": "25", - "2804:7344::/32": "270905", - "2001:67c:17e4::/48": "2119", - "2409:8915:1e00::/39": "56044", - "2a06:1c80::/31": "60011", - "2001:1328::/32": "1797", - "2408:8256:3997::/44": "17623", - "240e:438:5020::/43": "140647", - "2600:6c38:11c::/42": "20115", - "2607:f028::/48": "2158", - "2620:1d6:ff0::/46": "2571", - "2a04:4e40:f440::/44": "54113", - "2001:559:1f8::/47": "33659", - "2602:fd4a::/36": "53610", - "2801:1fc:10::/48": "27951", - "2001:500:14::/48": "42", - "2401:d800:94d0::/39": "7552", - "240a:aea7::/32": "146401", - "2804:3ec8::/46": "266620", - "2408:8001:3000::/44": "17816", - "2604:d600:61b::/45": "32098", - "2a0c:9a40:808c::/48": "53356", - "2001:4c00:893b::/48": "197835", - "2606:6c00:102::/48": "32787", - "2a02:2a70:20::/32": "702", - "2001:df2:ac00::/48": "134073", - "2402:800:348d::/43": "7552", - "2600:1a0e:ce12::/31": "46650", - "2801:0:90::/48": "28109", - "2804:3288:7100::/32": "52827", - "2a01:7d60::/32": "50181", - "2a0f:2700:10::/48": "60781", - "2001:559:827d::/48": "7015", - "240e:979:6f00::/35": "4134", - "2604:8380:2c00::/35": "29802", - "2a09:bd00:ffca::/48": "8985", - "2001:559:85ac::/48": "7922", - "2001:c50::/32": "9924", - "2404:8000:81::/44": "17451", - "2607:d500:200::/47": "54527", - "2a02:2ad8:10d::/43": "702", - "2001:579:90fd::/39": "22773", - "2409:801a::/29": "132525", - "2620:121:5000::/46": "36351", - "2a00:1558::/32": "29311", - "2001:559:8518::/42": "7015", - "240a:a881::/32": "144827", - "2804:1a54::/34": "61854", - "2001:559:26e::/48": "7922", - "2001:67c:2248::/48": "31382", - "2001:4830:c601::/36": "27552", - "2600:9000:2159::/42": "16509", - "2806:370:53c0::/44": "28403", - "2a01:b1c0::/32": "48200", - "2401:ff80:1583::/45": "133954", - "2600:1406:1601::/36": "20940", - "2605:e4c0::/32": "63394", - "2804:32b8::/32": "265095", - "2a00:1498::/32": "8832", - "2001:df5:9600::/48": "135480", - "2a0f:305::/30": "398559", - "2a0f:4507:8000::/33": "204506", - "2001:57a:8202::/35": "22773", - "240a:a317::/32": "143441", - "2605:9d80:9003::/48": "4809", - "2800:160:1a57::/42": "14259", - "2804:2f94::/32": "264900", - "2a02:26f7:b688::/48": "36183", - "2a02:2748::/32": "49779", - "2403:8940::/45": "135817", - "2620:12d:5002::/44": "55128", - "2a07:76c0:2::/48": "29107", - "2a0e:3c0::/29": "553", - "2001:370::/44": "9607", - "2604:c380::/32": "25853", - "2a02:26f7:c894::/48": "36183", - "2a07:a343:bc70::/44": "9009", - "2a0b:e740::/29": "47787", - "2a04:6543::/32": "200168", - "2001:559:c0c6::/48": "33657", - "240e:925::/36": "132147", - "2602:feb4:1f0::/38": "25961", - "2804:adc::/32": "52927", - "2804:428c::/32": "267507", - "2806:2f0:12::/42": "17072", - "2a02:2e02:2b00::/37": "12479", - "2a0c:1d03::/32": "39614", - "2a0f:c082::/32": "16262", - "2a02:f700::/29": "12812", - "2001:4490:d080::/46": "9829", - "2402:7780:2::/32": "132933", - "2402:a1c0::/32": "137526", - "240e:108:1003::/44": "4134", - "240e:3b9:7800::/39": "4134", - "2606:2980:1000::/40": "26344", - "2a00:cd80:8000::/33": "30778", - "2406:9c40:2002::/32": "55366", - "2409:8b20::/29": "9808", - "2801:16e::/48": "19429", - "2a00:1ca8:57::/40": "50673", - "2a10:fa00::/29": "52193", - "2001:16d8:c006::/43": "16150", - "2402:e380:115::/44": "139073", - "2605:4480::/32": "21624", - "2804:16c::/32": "28309", - "2804:6944::/32": "270259", - "2402:3a80:1a20::/41": "38266", - "2001:648:2303::/42": "5408", - "2407:9540::/32": "142435", - "2800:160:1938::/41": "14259", - "2803:4c60:8::/32": "267845", - "2a00:43e0::/32": "60975", - "2c0f:f738:3801::/46": "61317", - "2804:d18::/32": "52599", - "2a01:4540::/29": "199554", - "2a02:2098::/29": "47314", - "2a0b:e540::/32": "205311", - "2001:4878:a102::/48": "12222", - "2401:d800:2690::/42": "7552", - "2602:feda:1bf::/48": "133846", - "2804:65ec::/37": "269523", - "2804:6c48::/32": "270457", - "2001:550:5c07::/48": "15235", - "2001:559:548::/48": "33657", - "2001:559:8270::/48": "7016", - "2001:fa8::/32": "4697", - "240a:a7c3::/32": "144637", - "240a:a835::/32": "144751", - "2604:dbc0::/32": "21777", - "2001:4da8:c010::/44": "207564", - "2406:24c0::/44": "136634", - "2605:a404:41::/44": "33363", - "2806:2f0:30c1::/46": "17072", - "2a0d:a1c0::/29": "42695", - "2a0e:b107:12d5::/48": "211358", - "2001:559:3a4::/48": "33287", - "2001:67c:298::/48": "51307", - "2001:4878:a151::/48": "12222", - "240e:84c:40::/44": "140345", - "2605:a000:70e::/48": "11955", - "2001:448a:50b0::/41": "7713", - "2402:800:9101::/44": "7552", - "240a:aa08::/32": "145218", - "2800:440:240::/48": "27738", - "2620:0:440::/48": "10146", - "2804:247c::/32": "264226", - "2804:636c:2000::/35": "269360", - "2804:6464::/32": "262725", - "2806:230:100b::/48": "11888", - "2a10:bcc0::/29": "211597", - "2001:67c:2b88::/48": "51200", - "2a04:ee40::/29": "15796", - "2001:559:c14c::/47": "7015", - "2a0b:2a40::/32": "29423", - "2a0c:8540:10::/47": "42198", - "2001:dea:4001::/48": "7615", - "2403:300:a31::/48": "714", - "240a:a900::/32": "144954", - "2a02:530:23::/44": "21191", - "2a02:2308::/43": "29028", - "2400:9380:9121::/48": "4809", - "2401:4800:2011::/48": "38457", - "2404:d200::/35": "9797", - "2602:fda4::/36": "27228", - "2603:b0af::/25": "11796", - "2804:8c8::/32": "262393", - "2600:6c38:831::/44": "20115", - "2a07:a880:3101::/48": "3399", - "2a0f:7540::/48": "49239", - "2a0f:cd00::/29": "44885", - "2001:df0:43::/48": "38629", - "2600:1003:a010::/40": "22394", - "2607:fd68::/32": "7029", - "2001:fb1::/39": "17552", - "2409:8050:1800::/47": "56047", - "2806:370:1280::/44": "28403", - "2a01:70::/32": "25098", - "2a02:26f7:7e::/48": "36183", - "2a03:f80:385::/48": "25467", - "240a:a157::/32": "142993", - "2806:230:2016::/48": "265594", - "2a00:1370::/32": "25513", - "2a06:4101::/32": "394094", - "2001:1388:2f0a::/45": "6147", - "2404:c900:8::/46": "58682", - "2604:3b80::/34": "31857", - "2800:160:16a8::/46": "14259", - "2804:3a7c::/32": "266092", - "2a00:8b00::/32": "35154", - "2001:559:c042::/48": "33491", - "2607:f6f0:d000::/40": "12085", - "2a01:b740:a11::/45": "714", - "2a09:4c2:27::/48": "207317", - "2001:559:3a9::/48": "7922", - "2001:df3:e000::/48": "13214", - "2403:80::/32": "134623", - "240e:978:e00::/40": "4134", - "2620:79::/46": "30013", - "2804:810c::/32": "272428", - "2803:6fa0:100::/48": "267790", - "2a0a:5400::/29": "49010", - "2a0d:9b00::/32": "207498", - "2001:678:3b4::/48": "49855", - "2401:f000:2:100::/56": "38477", - "2402:8100:2110::/44": "45271", - "2600:7800::/28": "22646", - "2603:c001:1c10::/34": "31898", - "2620:134:6004::/47": "397726", - "2a0a:a3c0::/40": "41955", - "2001:559:80a6::/48": "33659", - "2400:0:860::/44": "4766", - "2409:8924:1900::/37": "56046", - "2804:6590::/32": "269500", - "2a00:f826:4::/46": "34549", - "2a0b:d240::/32": "47886", - "2a0d:ca47:2::/48": "49423", - "2a03:6e0:8000::/33": "197284", - "2001:df5:2c00::/48": "59115", - "2409:8c20:816::/44": "56046", - "240a:a9cb::/32": "145157", - "2804:7c2c::/32": "271480", - "2a00:b300::/32": "8613", - "2a02:26f7:d8c0::/48": "36183", - "2a02:26f7:e1c9::/42": "20940", - "2001:da8::/38": "23910", - "2402:800:7da0::/41": "7552", - "2604:a300::/32": "17056", - "2804:14c:9b00::/40": "28573", - "2a02:6aa0::/32": "200081", - "2a0e:b107:550::/48": "207317", - "2001:559:5bf::/48": "33659", - "2406:4440:f00::/40": "38008", - "2600:6c18::/30": "20115", - "2604:d040::/32": "396879", - "2803:cc60::/32": "267846", - "2a00:dc0::/32": "39560", - "2a05:e740:45::/46": "29108", - "2600:1900:4160::/44": "396982", - "2804:3ed0:1240::/32": "266622", - "2a02:26f7:c480::/48": "36183", - "2c0f:ed68::/32": "328170", - "2001:559:c08b::/48": "33491", - "2401:e800::/32": "24173", - "240e:473:6d50::/40": "4134", - "2a10:ccc2:12::/44": "35619", - "2a02:26f0:d2::/47": "20940", - "2400:8500:d29d::/48": "7506", - "2c0f:f5c0:443::/40": "29465", - "2402:8c00:9::/48": "17753", - "2600:3001:25::/46": "13649", - "2804:3848::/32": "266467", - "2a01:98::/32": "8190", - "2001:fb0:109f:8005::/64": "15133", - "240e:d9:a800::/37": "38283", - "240e:67f:e600::/24": "4134", - "2804:6708::/32": "269599", - "2a00:4040::/48": "48426", - "2a00:c780::/32": "15557", - "240e:3b0:2800::/38": "4134", - "2620:116:8084::/48": "27281", - "2a09:2740::/29": "209536", - "2401:1400::/32": "9297", - "2605:fb80:e000::/43": "16584", - "2804:4fac::/32": "268342", - "2001:67c:2a84::/48": "204847", - "2401:be00::/48": "23724", - "2409:8087:200::/40": "38019", - "2600:140b:a401::/36": "20940", - "2800:160:12be::/41": "14259", - "2804:1b2:8000::/34": "18881", - "2804:2278::/32": "264103", - "2a0b:2900:1000::/38": "48582", - "2a0c:cf00::/29": "205002", - "2001:df2:4e80::/48": "139849", - "2405:1c0:6661::/45": "135062", - "240a:a13f::/32": "142969", - "2a00:4800:f0::/39": "13124", - "2a00:7240::/30": "16234", - "2a0f:d00::/32": "41114", - "2600:9000:2208::/47": "16509", - "2606:2800:4014::/48": "15133", - "2a02:2878:8000::/34": "62310", - "2a0d:2581:8::/47": "209261", - "2001:559:4db::/45": "7015", - "2804:2128::/32": "264539", - "2001:67c:22ec::/48": "197874", - "2605:6c80:3::/48": "13768", - "2a00:1598::/29": "29518", - "2a0f:5707:ab2d::/48": "13830", - "2a0f:c540::/29": "42487", - "2001:67c:200::/48": "51038", - "2607:fcd0:fa80:1201::/55": "8100", - "2a0c:5240::/32": "208861", - "2001:430::/32": "7332", - "2001:559:c031::/48": "33659", - "2001:fb0:10a3::/32": "7470", - "2403:5400::/35": "38450", - "240e:9f:d800::/26": "4134", - "2600:1406:2a01::/39": "20940", - "2606:2800:601b::/45": "15133", - "2401:f000:2::/56": "23838", - "2402:800:3555::/42": "7552", - "2409:8904:6870::/40": "24547", - "2600:1404:9401::/36": "20940", - "2001:550:3d06::/44": "174", - "2001:df4:2600::/48": "132398", - "2406:daa0:9080::/44": "16509", - "2600:6c39:233::/44": "20115", - "2602:fd46::/36": "398328", - "2803:af00::/32": "52453", - "2a0f:7c40::/29": "14037", - "2001:67c:1354::/48": "212469", - "2409:8052:1100::/37": "9808", - "2409:8c28:88f1::/39": "56041", - "240e:438:7040::/38": "4134", - "2602:fe41::/36": "393434", - "2a02:13b0:1::/48": "48635", - "2a0b:b86:100::/40": "34641", - "2400:ac40:ab0::/39": "136255", - "2404:e280::/47": "58866", - "2408:8026:390::/37": "17621", - "2804:46b8::/32": "267007", - "2806:2f0:92a2::/41": "17072", - "240e:fe:2000::/33": "134774", - "2600:1014:b1e0::/33": "22394", - "2800:190:7::/44": "11664", - "2001:c20:489a::/48": "9255", - "2400:ca00:1fc::/30": "23688", - "2407:cc00::/32": "6660", - "2620:1e0:111::/46": "10801", - "2804:81d8::/32": "272480", - "2a0f:ea80::/32": "60144", - "2408:80e2::/33": "4837", - "2804:160c::/33": "263264", - "2a0c:89c0::/29": "43260", - "2001:44b8:3086::/48": "7545", - "2804:1e2c:1000::/40": "264412", - "2a02:26f7:b900::/48": "36183", - "2001:1598::/32": "28747", - "2604:f340:1::/46": "398736", - "2a03:f000::/30": "25472", - "2402:3a80:1b68::/40": "38266", - "2a01:9f60::/32": "34139", - "2a0a:640::/32": "34762", - "2001:559:c318::/48": "33651", - "2001:678:374::/48": "52003", - "240e:37c:aa00::/39": "140330", - "2804:4d80::/32": "268200", - "2804:738c:c002::/44": "270922", - "2a00:64a0::/32": "44099", - "2a02:24e8::/29": "21040", - "2a0b:14c0:2::/48": "61273", - "2402:8100:14::/48": "38266", - "2408:8956:12c0::/39": "17816", - "240a:ae2d::/32": "146279", - "2605:8000:8901::/33": "4261", - "2a03:7000::/32": "28997", - "2a09:ea00::/48": "16509", - "2a0d:5d40::/32": "210094", - "2403:0:206::/47": "4755", - "2606:5940::/32": "399599", - "2607:f928:16::/48": "22645", - "2804:4850:200::/32": "267113", - "2001:550:1d06::/38": "174", - "2602:feda:d51::/48": "141712", - "2a01:758:ffe1::/44": "3326", - "2a02:26f7:f580::/48": "36183", - "2a0c:a6c0:1::/48": "21473", - "2602:feda:d6e::/47": "212034", - "2604:2a40::/32": "62943", - "2408:8956:9d00::/40": "17816", - "2a00:1588:d801::/46": "36040", - "2a0b:340::/32": "43886", - "2401:9d00:2::/39": "9835", - "2602:fd50:10::/48": "207609", - "2804:c90:2::/37": "28198", - "2a03:6947:c00::/40": "12400", - "2a05:9280::/32": "31019", - "2a10:e800:3::/48": "204170", - "2001:559:c015::/44": "7922", - "2001:67c:2850::/48": "212894", - "240e:3b1:ac00::/35": "4134", - "2a00:1651::/33": "213277", - "2001:559:8449::/48": "33659", - "2406:e001:f000::/36": "23655", - "240a:ad7c::/32": "146102", - "2600:1407:15::/46": "20940", - "2600:140f:2a00::/48": "9498", - "2602:fe10::/36": "394119", - "2602:fed2:7107::/48": "205096", - "2a07:3500:1200::/48": "38915", - "2800:484:5c00::/39": "10620", - "2806:230:2020::/48": "265594", - "2001:559:195::/48": "33666", - "2804:4950::/32": "267177", - "2001:550:2606::/48": "174", - "240a:a3b5::/32": "143599", - "2a0a:4900::/29": "49425", - "2001:1248:5672::/40": "11172", - "2600:6000:fcfe::/39": "12271", - "2803:80:1005::/32": "61317", - "2a0e:73c0::/29": "208478", - "2001:579:cec0::/39": "22773", - "2409:8c14:3c00::/32": "56044", - "240a:a33a::/32": "143476", - "2606:e480:200::/39": "55083", - "2a00:c8a0::/29": "48057", - "2a02:26f0:b::/43": "20940", - "2001:559:c30b::/48": "33659", - "2401:d800:2a40::/42": "7552", - "2408:8656:2f00::/35": "17816", - "2804:195c::/32": "61790", - "2a01:8280:3330::/48": "202818", - "2a10:7500::/29": "398559", - "2402:f700::/34": "23907", - "2409:8904:59b0::/38": "24547", - "240e:97d::/36": "134763", - "2602:fe3a:8::/48": "20119", - "2804:1b3:8080::/36": "18881", - "2a00:65e0::/32": "198947", - "2a0e:f2c0::/29": "205243", - "2804:455c::/32": "266921", - "2001:559:840b::/48": "7016", - "2001:559:c3f4::/48": "7015", - "2403:6000:801::/39": "24085", - "2408:8459:9010::/42": "17623", - "2409:806b:5b00::/37": "9808", - "240e:109:802b::/41": "4134", - "2607:9b80:a00::/43": "46558", - "2a02:d6a0::/30": "20692", - "2a0c:580::/29": "210107", - "2001:e00::/31": "4795", - "2604:fc80::/32": "33438", - "2803:e0e0:1ff::/48": "269852", - "2a02:26f7:ee8c::/48": "36183", - "2c0f:f588::/32": "327966", - "2404:e840::/32": "131949", - "2409:8c28:802::/39": "56041", - "240a:a66c::/32": "144294", - "2a02:e982:32::/48": "19551", - "2a0c:4b80::/29": "204810", - "2001:67c:1508::/48": "47692", - "240e:44d:7a80::/41": "4134", - "2001:19d0::/37": "2044", - "2607:fb90:d100::/38": "21928", - "2804:204::/38": "28186", - "2804:91c::/32": "52877", - "2a0a:b707:aaa2::/48": "20473", - "240e:108:91::/48": "140061", - "240e:390::/26": "4134", - "2a07:9380::/32": "50840", - "2001:1938:3000::/45": "33438", - "2001:4000::/32": "8565", - "2402:800:9d0f::/43": "7552", - "2001:1248:982c::/43": "11172", - "2a00:df80::/47": "12301", - "2a02:26f7:21::/48": "20940", - "240e:438:4640::/36": "4134", - "2a00:16f8:11::/32": "6461", - "2a02:26f7:e8c1::/46": "20940", - "2001:4408:4801::/40": "4758", - "2400:cb00:281::/45": "13335", - "2408:8856:8100::/40": "134543", - "2600:1001:b0d0::/44": "6167", - "2600:6c34:381::/48": "33588", - "2804:2c88::/32": "265225", - "2a02:26f7:44::/48": "36183", - "2a02:13a0::/32": "12519", - "2a02:28f0::/29": "44136", - "2600:6c46::/32": "20115", - "2a01:870::/32": "21334", - "2001:559:8111::/48": "33491", - "2001:44b8:30c7::/48": "7545", - "2a02:26f0:eb::/45": "20940", - "2607:f8e8::/32": "46208", - "2a0b:7b00::/29": "206593", - "2400:0:500::/38": "4766", - "240a:ad78::/32": "146098", - "2620:1ec:1e::/42": "8075", - "2a00:d40:10a::/48": "2597", - "2a03:9aa0::/32": "203646", - "2605:2880::/48": "18907", - "2406:6200::/37": "23756", - "2600:100f:b000::/41": "6167", - "2620:78:c000::/48": "62692", - "2804:11e0::/32": "263445", - "2a01:198:ff00::/40": "60781", - "2a02:26f7:b780::/48": "36183", - "2a03:e140:32::/48": "48327", - "2407:2440:1::/48": "139057", - "240a:aad3::/32": "145421", - "2605:a7c0:100::/48": "14618", - "2804:eec:1302::/36": "28226", - "2a03:37e0::/32": "197898", - "2401:c5c0::/47": "55492", - "2403:bc80::/32": "133882", - "2620:11a:a033::/45": "36040", - "2001:df4:200::/47": "2", - "2400:dcc0:af04::/33": "38631", - "2408:80ea:7500::/41": "17816", - "240e:3b1:1400::/38": "134773", - "2604:5400:4000::/38": "11776", - "2804:56a0::/32": "268013", - "2001:67c:2e8c::/48": "8881", - "2404:f4c0:f200::/46": "139589", - "240a:ab15::/32": "145487", - "2600:1405:9001::/34": "20940", - "2804:150::/32": "10954", - "2804:389c::/32": "266489", - "2a0c:58c0::/29": "205254", - "2001:559:83bd::/48": "7015", - "2001:c10:ff07::/44": "7473", - "2a02:26f7:c284::/48": "36183", - "2a02:4640::/32": "25542", - "2001:559:c29f::/42": "33657", - "2404:1f00:ffb5::/41": "55947", - "240a:a220::/32": "143194", - "2600:3001:1111::/30": "13649", - "2620:13:a000::/48": "395651", - "2a03:5880:105::/32": "12757", - "2001:df1:ba00::/48": "45259", - "2801:1c8:301::/48": "19429", - "2803:7200:8019::/45": "27696", - "2a0a:f9c5::/32": "42375", - "2a0c:ac80::/29": "201863", - "2001:559:3fe::/48": "7922", - "2001:4398::/32": "328411", - "2600:140f:c400::/48": "9498", - "2604:1380:1000::/34": "54825", - "2a0b:9380:21::/32": "206002", - "2801:0:1b0::/48": "16701", - "2a02:768::/32": "44489", - "2a0d:9b80:fe::/47": "43519", - "2001:67c:2e18::/48": "50407", - "2600:140f:a400::/48": "9498", - "2600:1a0f:2001::/32": "46650", - "2605:2040::/32": "396040", - "2a0a:cd00:1::/48": "50166", - "2c0f:ebb0::/39": "43256", - "2804:4934::/32": "267170", - "2001:559:8535::/48": "21508", - "2402:a300:3e6::/44": "55427", - "240e:40:c::/48": "58519", - "2602:801:c00f::/48": "3356", - "2a10:2f40::/32": "49824", - "2a02:ae0::/32": "8375", - "2001:254::/33": "24489", - "2001:1248:a002::/48": "11172", - "2001:16a2:360a::/43": "25019", - "2402:800:970f::/43": "7552", - "2404:5600::/32": "23700", - "2607:3a80:26::/32": "395100", - "2804:1b8c::/32": "61734", - "2a0d:2146:9900::/40": "56894", - "240a:a44d::/32": "143751", - "2804:190:240::/40": "53165", - "2804:44c4::/32": "267652", - "2001:550:1802::/48": "29727", - "2001:df0:44::/48": "17990", - "2401:47c0:1700::/36": "41095", - "2401:ca40::/32": "136978", - "240a:a3f4::/32": "143662", - "240a:a6dc::/32": "144406", - "2804:1e58:4::/33": "264422", - "2a06:3880::/29": "49981", - "2001:559:465::/48": "7922", - "2804:20f8:1100::/32": "264524", - "2a0d:2800::/29": "25003", - "2001:67c:28ac::/48": "25400", - "2001:1a40:c::/32": "5416", - "240e:7c0::/20": "4134", - "2a00:b900::/46": "51561", - "2001:559:85f0::/48": "33657", - "2001:67c:10e8::/48": "199220", - "2404:8000:1025::/40": "17451", - "2408:84f3:e840::/38": "17816", - "240e:438:240::/37": "4134", - "2600:1017:b030::/40": "6167", - "2a06:4000::/29": "204151", - "2001:559:43a::/48": "33657", - "2001:df7:6880::/48": "133296", - "240a:a359::/32": "143507", - "2804:75e8::/32": "271077", - "2a0e:97c0:252::/44": "211685", - "2001:388:608d::/35": "7575", - "240e:3bf:ec00::/35": "140314", - "2401:b0c0:1011::/36": "136941", - "240a:a119::/32": "142931", - "240a:a4e9::/32": "143907", - "2a0a:1980::/29": "206782", - "2001:67c:25c::/48": "51188", - "2406:e480::/32": "135371", - "2408:8456:3850::/39": "17816", - "240a:a4b2::/32": "143852", - "2620:3e:a000::/48": "393802", - "2001:559:5f9::/48": "33491", - "2001:67c:1b08::/48": "2598", - "240a:a82d::/32": "144743", - "240a:ad7b::/32": "146101", - "240e:473:1e50::/39": "4134", - "2602:ffe4:c3b::/45": "21859", - "2400:cb00:180::/47": "13335", - "2409:4043:1000::/34": "55836", - "240a:a042::/32": "142716", - "2a01:b740:a1e::/48": "6185", - "2a0c:b641:720::/47": "207363", - "2a0e:b107:a00::/44": "213215", - "2001:559:8563::/48": "33659", - "240a:add2::/32": "146188", - "2a02:970:1177::/44": "44002", - "2a0e:b107:9c0::/44": "213171", - "2001:678:a04::/48": "3320", - "2001:1248:564d::/43": "11172", - "2405:2500:5::/48": "136566", - "2800:c00::/47": "18747", - "2803:6b60::/32": "269806", - "2001:1900:2368::/40": "3356", - "2605:3600:11::/48": "20034", - "2607:fc48:808::/48": "40009", - "2800:9a0:2100::/35": "14522", - "2806:370:4180::/44": "28403", - "2c0f:f980:2000::/33": "33763", - "2001:559:296::/48": "7922", - "2400:fc00:4022::/44": "45773", - "2409:8053:1900::/37": "9808", - "2804:41fc::/32": "267470", - "2a02:d300::/29": "15595", - "2a04:4e40:4e10::/42": "54113", - "240e:3b4:7800::/39": "4134", - "2604:bc40:6000::/48": "14618", - "2800:160:1acf::/43": "14259", - "2804:3e60::/39": "266592", - "2001:559:840a::/48": "33287", - "2600:387::/44": "20057", - "2605:c540:c002::/48": "398378", - "2804:368c::/32": "266355", - "2a02:26f7:b851::/42": "20940", - "2a0b:3e00::/32": "14076", - "2600:1006:b100::/42": "6167", - "2620:74:49::/45": "7342", - "2a01:64c0::/32": "45012", - "2a0b:2180::/48": "206502", - "2a0e:97c5:6dc::/46": "20473", - "2c0f:f348::/44": "24757", - "2001:579:926c::/40": "22773", - "240e:108:1162::/44": "4134", - "2606:a000:708::/36": "11426", - "2a02:5340::/48": "12552", - "2001:fb0:10a2::/48": "55451", - "2402:8100:25c0::/43": "45271", - "2804:7e00::/32": "271596", - "2a02:20::/32": "9026", - "2001:559:81ce::/48": "7016", - "2406:8dc0:2400::/40": "141173", - "2409:8914:1500::/38": "56044", - "240a:abd7::/32": "145681", - "240a:a5ba::/32": "144116", - "240a:af3e::/32": "146552", - "240e:1e:4000::/36": "140313", - "2a04:4e40:610::/41": "54113", - "2a03:5f80::/46": "31500", - "2001:16a2:c0e4::/44": "39386", - "2406:2000:a1::/46": "10310", - "240e:44d:6700::/41": "140345", - "2801:80:b00::/48": "61789", - "2804:2378::/32": "264164", - "2a00:aca0::/32": "49223", - "2a01:b2e0::/29": "60781", - "2401:380::/32": "17907", - "2402:3a80:c041::/48": "38266", - "2402:f880::/32": "64056", - "2405:800::/46": "7545", - "2620:f3::/48": "30286", - "2001:559:c06e::/47": "7015", - "2a01:488:bb0c::/48": "20773", - "2a06:9080::/32": "203271", - "2a0f:8400::/32": "208210", - "240e:108:1081::/44": "4134", - "2a01:c50f:37c0::/36": "12479", - "2a04:7bc0::/29": "47232", - "2607:4e00::/32": "10674", - "2804:1eb0::/32": "264444", - "2a04:4280:10::/48": "43260", - "2a04:4e40:1a00::/48": "54113", - "2001:559:808b::/45": "7922", - "2800:2a0:ffff::/48": "27947", - "2a0a:de80::/32": "206605", - "2a0e:f600:2e::/29": "60781", - "2a11:5b00::/32": "62269", - "2001:c38:9000::/44": "9931", - "2001:b400:e000::/36": "17421", - "2800:160:17a7::/44": "14259", - "2804:4a48::/32": "267229", - "2a0e:1000::/29": "60989", - "2001:678:454::/48": "1257", - "2401:d800:470::/40": "7552", - "2405:f080:810::/44": "136907", - "2804:3af0::/32": "266119", - "2804:6688::/32": "269566", - "2a01:5043:2eff::/48": "202196", - "2a02:2010:2610::/45": "20978", - "2a04:8480::/30": "196714", - "2409:8000:5a00::/40": "56048", - "240a:a1c4::/32": "143102", - "240a:a3ba::/32": "143604", - "240e:108:1140::/47": "134768", - "2604:d600:1517::/44": "32098", - "2a00:8280::/32": "45011", - "2a02:b000::/23": "1267", - "2800:381:5152::/32": "10834", - "2001:1248:8749::/43": "11172", - "2001:4b18::/32": "20746", - "2408:8957:efc0::/35": "17622", - "2a03:aec0::/32": "199408", - "2a0c:abc0::/29": "212961", - "2a0f:5707:aa30::/44": "207306", - "2001:67c:4d4::/48": "30887", - "2001:df5:2680::/48": "138708", - "2409:4055:5000::/30": "55836", - "2804:238:a::/45": "23106", - "2001:579:cf04::/46": "22773", - "2001:4490:4e94::/46": "9829", - "2620:135:6000::/41": "22697", - "2800:160:1c4f::/43": "14259", - "2a0a:54c1:28::/47": "9053", - "2a0c:9a40:c002::/36": "209022", - "2a0e:97c5:760::/43": "20473", - "2001:ce0:5::/48": "4158", - "2408:84f3:e240::/37": "17816", - "240e:979:1000::/36": "4134", - "2607:f910::/32": "31753", - "2803:b6a0::/32": "266905", - "2804:7410::/32": "270956", - "2a07:78c0::/29": "211769", - "2600:1403:6001::/38": "20940", - "2602:ff95::/36": "19194", - "2610:a1:1072::/48": "397218", - "2620:b8:8000::/48": "15199", - "2a00:e40::/32": "9127", - "2001:218:2003::/39": "2914", - "2001:253:129::/48": "142095", - "2001:559:782::/45": "7015", - "2804:76e0::/32": "271140", - "2a00:10a0:b::/48": "51305", - "2a02:578:3c00::/33": "9031", - "2001:559:420::/48": "20214", - "2001:559:80e3::/48": "33659", - "2408:8256:3176::/48": "17816", - "240e:473:1320::/41": "140486", - "2600:8807:3a20::/39": "22773", - "2606:7e80::/36": "33695", - "2a03:3e00::/32": "50469", - "2a04:e802:12::/44": "57976", - "2001:cd8:4781::/32": "4780", - "2404:f801:8020::/48": "45139", - "2406:c300::/32": "137253", - "240e:67b:1000::/37": "140330", - "240e:67e:1800::/32": "4134", - "2607:f750:5000::/40": "23473", - "2804:4a1c:1000::/32": "267219", - "2001:1221::/48": "28496", - "2804:4808:8000::/33": "267093", - "2001:559:8516::/48": "33657", - "2405:1c0:6683::/39": "55303", - "2409:8028:3100::/37": "9808", - "240a:aa9f::/32": "145369", - "2602:800::/44": "397614", - "2a01:6500:a054::/29": "42925", - "240a:ae35::/32": "146287", - "2600:7000::/24": "6939", - "2607:5300::/32": "16276", - "2620:90::/48": "174", - "2402:1840::/32": "45355", - "2600:100f::/32": "22394", - "2a00:f10:300::/32": "48635", - "2a02:26f7:e609::/42": "20940", - "2001:678:de0::/48": "21158", - "240a:a9df::/32": "145177", - "2804:3530::/32": "266273", - "2806:2f0:24a4::/43": "22884", - "2a02:26f7:f348::/46": "36183", - "2a02:9009:201::/27": "3352", - "2409:8d03::/29": "9808", - "2001:978:90a::/38": "174", - "2604:a840:8::/48": "6233", - "2801:1a:2800::/48": "269977", - "2804:48f0::/32": "61589", - "2806:2f0:3444::/42": "17072", - "2a0b:2200::/29": "39806", - "2a0d:2c40::/29": "207146", - "2001:559:8251::/46": "7922", - "240e:967:9400::/38": "133776", - "2600:370f:5062::/43": "32261", - "2604:f980:4500::/44": "19957", - "2804:248c:4000::/34": "264229", - "2a00:47c0:311::/48": "27435", - "2a01:b747:4f2::/44": "714", - "2401:ff80:1c13::/40": "133954", - "2604:1d40:2000::/36": "30612", - "2804:30d0::/32": "264974", - "2001:1248:8431::/44": "11172", - "2804:141c::/32": "53130", - "2804:54ec::/32": "268678", - "2806:203::/32": "13999", - "2a01:53c0:ff0a::/43": "54994", - "2a0e:6540:b0::/48": "208364", - "2001:559:8338::/48": "33657", - "2001:678:dc8::/48": "213032", - "2400:cb00:380::/46": "13335", - "240e:104::/33": "4134", - "2600:1007:d0d0::/34": "22394", - "2804:19a8::/32": "61810", - "2a02:a98::/32": "42017", - "2001:ee0:3c40::/33": "45899", - "2804:68::/32": "53070", - "2a04:c700::/48": "34499", - "2408:8256:2f8d::/48": "17816", - "240a:a5f2::/32": "144172", - "2600:1402:17::/44": "35994", - "2600:6c38:c2d::/46": "20115", - "2620:0:e58::/48": "3677", - "2803:5e40::/32": "52510", - "2a03:5f00:10b::/36": "29644", - "2001:df6:8000::/48": "10014", - "2600:805:808::/48": "33172", - "2600:1000:9f00::/44": "6167", - "2600:100c:f010::/31": "22394", - "2a05:9c00::/29": "47626", - "2a07:8144::/36": "203926", - "2001:559:8337::/48": "13367", - "2404:4600::/46": "10158", - "2409:8052:3000::/47": "56047", - "2606:6c00:100::/48": "32787", - "2620:22::/48": "53355", - "2804:e64::/39": "262952", - "2a02:26f7:b885::/46": "20940", - "2001:67c:2fe4::/48": "9002", - "2409:8e79::/24": "9808", - "2806:261:300::/57": "13999", - "2a02:26f7:ef44::/48": "36183", - "2001:559:574::/48": "33657", - "2a02:26f0:bd00::/48": "34164", - "2a04:3800::/48": "44417", - "240a:a737::/32": "144497", - "2804:3e64::/32": "266593", - "2404:8000:31::/41": "17451", - "2600:1480:1000::/40": "33905", - "2001:44b8:30a3::/48": "4739", - "2404:f4c0::/46": "17920", - "2408:8256:3291::/48": "17816", - "240e:44d:3700::/41": "140345", - "2a02:26f7:c385::/46": "20940", - "2001:559:8566::/48": "7015", - "2001:df0:218::/48": "38830", - "2001:df0:5080::/48": "136379", - "2404:4600:9::/48": "7625", - "2605:a401:8369::/40": "33363", - "2804:130c:200::/32": "263512", - "2a04:2bc0::/32": "207133", - "2408:8957:eb00::/40": "17816", - "240a:a53a::/32": "143988", - "2804:4578::/32": "266928", - "2a03:b2c6::/31": "40676", - "240a:a549::/32": "144003", - "2606:2cc0::/46": "54113", - "2620:149:a22::/48": "6185", - "2804:6e40::/32": "270584", - "2a04:1f80::/29": "60961", - "2a00:1850:6ea::/48": "29357", - "2001:67c:13d4::/48": "51496", - "2403:ad80:60::/45": "134835", - "2404:bc0:4210::/44": "137735", - "2607:fc30:100::/38": "396026", - "2803:d6c0:2::/44": "265698", - "2803:f3e0:11::/32": "270077", - "2804:4aac::/34": "267256", - "2a00:1d58:f011::/48": "47524", - "2a09:bac0:20::/46": "13335", - "2a0f:9100::/32": "212906", - "2001:559:82ba::/47": "7015", - "2001:67c:234::/48": "47302", - "2400:89c0:1050::/46": "23724", - "2404:9400:f::/48": "133159", - "2001:a68::/32": "15830", - "2400:ca00::/39": "23688", - "2a02:26f7:f38c::/48": "36183", - "2001:678:32c::/48": "3170", - "2001:44b8:604e::/48": "7545", - "2600:140b:d401::/36": "20940", - "2603:c0f8:1410::/39": "20054", - "2606:200::/32": "11942", - "2804:5a6c::/32": "268772", - "2a02:26f7:cbc0::/48": "36183", - "2a09:a4c0::/30": "208861", - "240a:a460::/32": "143770", - "2801:1c8:500::/48": "18747", - "2804:d28::/32": "52604", - "2804:6264::/32": "269294", - "2a02:26f7:49::/48": "20940", - "2a02:26f7:4e::/48": "36183", - "2001:44b8:403e::/47": "4739", - "2620:138:3008::/48": "11251", - "2803:5c80:5001::/48": "64114", - "2c0f:fb50::/32": "15169", - "2001:1a10:1000::/44": "42298", - "2620:171:fc::/46": "42", - "2a01:110:8069::/35": "6584", - "2c0f:ef78:5::/46": "63293", - "2402:8100:2000::/43": "45271", - "2409:8914:9c00::/39": "56044", - "2604:6840:1c00::/40": "12989", - "2001:559:214::/48": "33657", - "2607:f110:e370::/37": "21889", - "2804:4218::/34": "267477", - "2804:42c4:e001::/44": "267524", - "2a00:6220::/32": "43557", - "2a02:26f0:7101::/37": "20940", - "2a02:26f7:f108::/48": "36183", - "2001:490:4008::/48": "1248", - "2408:8956:400::/40": "17622", - "2607:d500:300::/47": "13768", - "2607:ff10::/32": "10439", - "2804:6444::/35": "269417", - "2a01:648::/32": "57809", - "2a01:ce83:8000::/35": "51964", - "2001:df0:9080::/48": "63769", - "2409:8728::/33": "56041", - "240e:978:2100::/36": "4134", - "2607:7e80:e000::/36": "27611", - "2607:f8f8:1f00::/45": "201106", - "2a02:4780:bad::/48": "204915", - "2a07:aa80::/29": "202657", - "2404:3fc0::/45": "32590", - "2404:bf40:8040::/48": "7545", - "2602:ff89::/36": "26269", - "2804:2c80::/32": "265223", - "2001:c20:7805::/46": "3758", - "2001:4408:7001::/38": "4758", - "2409:8c34:ac00::/33": "9808", - "2804:7998::/32": "271315", - "2a03:720::/45": "57073", - "2001:19f0:4000::/37": "20473", - "2400:b300:2::/32": "38470", - "2403:6600::/32": "55329", - "2803:a900:107::/44": "52420", - "2001:4410:1005::/40": "132040", - "2403:b4c0:f000::/36": "138398", - "2620:11f:b000::/46": "394514", - "2001:559:842c::/48": "33657", - "2001:559:c1cf::/48": "7725", - "2600:140b:f801::/37": "20940", - "2600:370f:51e2::/38": "32261", - "2602:fd5c:800::/37": "36247", - "2801:1cc::/44": "27951", - "2404:bf40:c3c3::/34": "139084", - "2405:f980::/48": "135905", - "240a:abce::/32": "145672", - "2604:1380::/40": "54825", - "2401:ff80:1003::/45": "133954", - "2800:160:1c14::/42": "14259", - "2804:30::/32": "28169", - "2804:4640::/32": "266978", - "2804:68d4::/32": "269719", - "2001:559:8259::/48": "7016", - "2400:adc0:10::/45": "9541", - "2406:daa0:2040::/44": "16509", - "2600:140b:e801::/37": "20940", - "2804:8f0::/32": "263040", - "2a07:e02:41::/48": "16509", - "2409:8020:3052::/42": "56046", - "240e:3b2:1800::/34": "4134", - "2a02:558::/32": "12594", - "2a03:2040::/29": "198385", - "2a07:7d80::/29": "50304", - "2001:559:c337::/48": "33652", - "2405:8180:1100::/32": "135478", - "2a10:7706::/31": "399975", - "2001:678:b08::/48": "48749", - "2402:9200::/32": "10084", - "2408:8256:337a::/45": "17623", - "240e:438:a040::/38": "4134", - "2804:14c:a782::/45": "28573", - "2804:522c::/32": "268500", - "2a0a:df80:24::/48": "13030", - "2001:253:118::/48": "142084", - "2001:559:84f6::/44": "33659", - "2a00:6300::/32": "42228", - "240a:a3c6::/32": "143616", - "2600:370f:7260::/45": "32261", - "2602:feda:1e0::/44": "140926", - "2a02:503:9::/29": "5538", - "2c0f:f3c8:21::/32": "328112", - "2001:559:1bd::/48": "7016", - "2001:67c:1be0::/48": "210317", - "240a:a5c6::/32": "144128", - "2604:a540::/32": "54594", - "2804:1cd8::/46": "262691", - "2a0c:de80::/48": "49453", - "2001:559:80bb::/48": "19704", - "2001:67c:348::/48": "47426", - "2620:12f:c000::/46": "395831", - "2a02:6b8:f::/43": "208722", - "2a0c:b806:8000::/34": "204725", - "2406:f500::/36": "55714", - "2606:9d00::/32": "46231", - "2607:f170:30::/39": "6364", - "2804:4878::/32": "267123", - "2a00:fd0::/32": "30914", - "2a02:2e0:407::/43": "12306", - "2a02:448::/31": "34146", - "2600:370f:33ea::/37": "32261", - "2a06:e881:53f0::/44": "209859", - "2804:5098::/32": "268398", - "2404:ee80::/48": "63741", - "2405:9800:c91b::/45": "45430", - "2a02:ec0:300::/32": "41653", - "2001:559:3b8::/48": "22909", - "2001:67c:1750::/48": "208441", - "240e:3b1:9c00::/34": "140310", - "2a0e:b107:440::/44": "207445", - "2402:b801:1900::/34": "18371", - "2804:671c::/32": "269604", - "2a0e:fa40::/47": "56970", - "240a:ad8d::/32": "146119", - "2804:be8::/32": "52841", - "2a00:6901:e005::/48": "20926", - "2600:1009:9010::/40": "22394", - "2a00:a600::/32": "56595", - "2a02:2698:a002::/48": "31483", - "2a02:26f0:7001::/39": "20940", - "2a03:ca80::/31": "20860", - "2a04:e700::/30": "48849", - "2804:4e88::/32": "268267", - "2a02:26f7:db05::/46": "20940", - "2a02:2e02:8f00::/42": "12479", - "2a06:1600:2::/48": "39221", - "2a07:22c1:34::/48": "211776", - "2800:160:23af::/41": "14259", - "2804:7504::/33": "271018", - "2a0b:af80::/29": "206310", - "2c0f:f4a0::/32": "31856", - "2402:800:5aee::/39": "7552", - "2620:1ec:c11::/48": "8068", - "2806:370:8300::/42": "28403", - "2a02:26f7:c648::/48": "36183", - "2001:67c:8::/48": "196621", - "240a:aa1c::/32": "145238", - "240a:adf0::/32": "146218", - "2606:9580::/37": "394256", - "2a04:4e40:4600::/48": "54113", - "2a09:bac0:120::/47": "13335", - "240a:a374::/32": "143534", - "2620:1bc:102f::/48": "7726", - "2804:7cb0:3e80::/44": "271512", - "2a07:8740::/29": "34549", - "2001:da8:257::/48": "4538", - "2408:8957:d200::/40": "17622", - "2804:1674:f::/32": "53231", - "2a04:12c0::/48": "48749", - "2a0e:8f02:f02b::/45": "206477", - "2001:678:f24::/48": "211514", - "240a:ab16::/32": "145488", - "2806:263:c300::/37": "13999", - "2a0f:27c0::/29": "398559", - "2001:468:1a09::/40": "4557", - "2001:13d2:2816::/35": "7303", - "2408:8256:880::/39": "17622", - "2604:f400:800::/37": "26878", - "2806:1030:ceff::/34": "8151", - "2a00:86c0:207a::/40": "2906", - "2a02:2698:8c00::/38": "57026", - "2c0f:f6d0:82::/45": "327687", - "2c0f:f6d0:86::/44": "327687", - "2406:f000::/32": "4844", - "240a:a7ae::/32": "144616", - "2604:d6c0:5000::/36": "64271", - "2a02:26f7:d1c1::/46": "20940", - "2001:1388:83f1::/37": "6147", - "2001:43f8:d00::/48": "33764", - "240a:a102::/32": "142908", - "2607:f9f1::/46": "22205", - "2a02:26f7:d505::/46": "20940", - "2a03:ef42:c000::/34": "57218", - "2001:559:42e::/48": "33287", - "2001:559:4cf::/43": "7015", - "2001:12b0::/32": "28618", - "2602:fed2:7706::/48": "53356", - "2620:119:50be::/48": "202745", - "2a02:26f7:e3c5::/46": "20940", - "2404:5d80:6600::/40": "33438", - "2602:101:4003::/48": "20115", - "2804:8118::/32": "272431", - "2a01:7a00:b01::/32": "51701", - "2a0e:4ec0::/29": "41918", - "240e:974:1201::/32": "4134", - "2600:1008:e010::/36": "22394", - "2800:bf0:80a2::/43": "27947", - "2001:559:7ce::/48": "7016", - "240a:a6f8::/32": "144434", - "2600:c10::/32": "19024", - "2806:268:501::/48": "13999", - "2a0f:76c0::/29": "202709", - "2405:2b40::/32": "139605", - "240a:a2dc::/32": "143382", - "2a01:3e0:403::/36": "6453", - "2a02:26f7:c68a::/48": "36183", - "2a11:8680::/29": "18779", - "2a00:ec8:407::/32": "38930", - "2806:2b0::/32": "22566", - "2620:72:c000::/48": "13736", - "2804:14c:7f83::/41": "28573", - "2804:14d:fc00::/44": "28573", - "2804:47d0::/32": "267078", - "2a02:2010:2400::/45": "20978", - "2001:559:713::/48": "7015", - "2001:559:c0fd::/48": "33287", - "2001:67c:438::/48": "198337", - "2403:d400::/32": "24364", - "2804:3440::/32": "265445", - "2a02:26f7:ebc1::/46": "20940", - "2001:5a0:4e02::/35": "6453", - "2401:d800:9c0::/38": "7552", - "2a00:1690::/32": "44123", - "2a07:e03:4::/42": "210083", - "2a0e:aa07:e027::/48": "210815", - "2a02:c18::/46": "15436", - "2001:559:72b::/48": "7922", - "2404:a8:10::/48": "24514", - "2409:8c20:81b::/38": "56046", - "2610:20:8000::/43": "6629", - "2800:440:8106::/48": "27738", - "2804:89c::/32": "262381", - "2804:e94:49::/45": "262468", - "2001:df6:9f80::/48": "38281", - "2401:fdc0:20::/32": "137074", - "2604:b300:ad04::/48": "174", - "2607:fa70::/34": "19855", - "2a09:bac0:83::/45": "13335", - "2c0f:f7a8:9020::/48": "4809", - "2408:8459:4410::/42": "17623", - "240e:3b2:1200::/39": "4134", - "2a0b:640::/46": "35236", - "2409:8c00:7841::/32": "9808", - "240e:49:6000::/32": "4134", - "2600:140b:2401::/38": "20940", - "2607:d500:603::/40": "13768", - "2804:1f00::/32": "11802", - "2804:3f58::/33": "265886", - "2a02:ed04:4510::/38": "50304", - "2001:c78:2000::/32": "2764", - "2001:13e8::/32": "11815", - "240a:a00e::/32": "142664", - "240e:108:11e0::/48": "58466", - "2620:16e:f0f5::/48": "3147", - "2803:6ce0:6000::/32": "269909", - "2a04:100::/34": "49223", - "2400:4880::/46": "131178", - "2406:9dc0:1010::/48": "18250", - "240a:a1e1::/32": "143131", - "240e:108:11b4::/41": "4134", - "2607:d500:302::/48": "54527", - "2607:f5a0:214::/36": "17048", - "2408:8459:3030::/44": "17623", - "2600:140b:6800::/48": "24319", - "2620:5c:6000::/48": "27623", - "2804:14c:4387::/41": "28573", - "2a10:ccc0:300::/48": "56755", - "2001:559:c348::/48": "22909", - "2401:4d40::/30": "59125", - "2606:b300:8000::/40": "13926", - "2804:f14::/32": "262865", - "2804:5a20::/32": "268750", - "2804:7a54::/32": "271365", - "2a0f:9400:800d::/48": "58093", - "2001:67c:2918::/48": "212034", - "2001:6a0:4000::/34": "8890", - "2a00:1a00::/32": "25593", - "2a01:7a20::/32": "35383", - "2a02:26f7:c540::/48": "36183", - "2001:5a0:3604::/36": "6453", - "2408:8459:1010::/41": "17622", - "240e:438:7420::/43": "140647", - "2600:8807:b7ea::/33": "22773", - "2a00:ff0::/48": "25409", - "2a02:2370:c000::/48": "32787", - "2001:559:8462::/48": "33661", - "2607:8700:106::/48": "25820", - "2804:777c:8000::/33": "271181", - "2a00:1878::/29": "8448", - "2a00:b220::/32": "43957", - "2a09:9f42::/29": "207976", - "2402:800:961d::/41": "7552", - "2400:d800::/30": "9506", - "2604:6600:159::/40": "40676", - "2001:418:1401:6a::/64": "20940", - "2001:1980:4445::/35": "29838", - "240e:944:3000::/36": "58541", - "2a02:26f7:e088::/48": "36183", - "2606:2800:4a8a::/48": "15133", - "2804:14d:7800::/40": "28573", - "2806:2f0:33a1::/41": "17072", - "2a03:b980:300::/32": "56730", - "2804:38b0:502::/32": "266494", - "2a06:4140::/29": "207083", - "240a:a305::/32": "143423", - "2a07:fc00::/48": "39378", - "2804:6838::/32": "269677", - "2a09:6d80::/32": "13984", - "2408:8256:316d::/43": "17623", - "2804:2f2c::/32": "264876", - "2a02:26f0:8200::/48": "34164", - "2a09:4c0::/39": "58057", - "2409:8904:2640::/39": "24547", - "240a:acc1::/32": "145915", - "2a03:9920::/32": "51546", - "2a0f:3107::/32": "57487", - "2001:4878:8215::/46": "12222", - "2607:fcd0:dac0::/34": "8100", - "2607:ff18::/36": "40630", - "2001:559:600::/40": "7922", - "2405:f080:400::/38": "136907", - "2600:6ce6:4410::/27": "16787", - "2806:250:20::/48": "28512", - "2a00:4de0::/29": "202831", - "2001:67c:2a34::/48": "58346", - "2001:44b8:7::/48": "7545", - "2408:8956:9600::/40": "17622", - "2600:1008:a120::/36": "22394", - "2a00:11c0:1799::/48": "42473", - "2a02:26f7:c905::/46": "20940", - "2602:feda:bf0::/44": "139328", - "2804:1f3e::/32": "269324", - "2a0b:af00::/29": "56708", - "2401:a840::/38": "136917", - "2402:3780::/48": "132789", - "2404:8d00:1c10::/34": "24378", - "2a01:8840:42::/45": "12041", - "2a02:26f7:ce89::/42": "20940", - "2001:559:4a9::/48": "33660", - "2001:559:8179::/48": "7016", - "2404:69c0::/32": "132129", - "2409:8089:1021::/23": "9808", - "2a02:26f7:e4c8::/48": "36183", - "2001:40f8::/32": "15798", - "2407:c080:805::/37": "55990", - "2604:5ec0::/32": "13356", - "2a07:3506:c1::/48": "9150", - "2a0e:de80::/29": "200462", - "2c0f:f5e0::/32": "25139", - "2604:4b40::/32": "396420", - "2a01:c9c0:c7::/48": "8891", - "2a02:4840::/46": "52048", - "2001:559:539::/46": "7922", - "2001:559:81de::/47": "33651", - "240a:aa39::/32": "145267", - "2602:ffe4:c44::/47": "21859", - "2a02:6ea0:c000::/36": "60068", - "2001:559:879f::/48": "33662", - "2602:fdd0::/36": "397488", - "2a00:55a0:12::/47": "57717", - "2a00:7142::/31": "51430", - "2a02:26f7:f9c9::/42": "20940", - "2401:2f80::/32": "27568", - "2a01:8b20::/32": "42314", - "2a06:900::/29": "34373", - "2a0c:b642:1a0b::/48": "3280", - "240e:44d:2b80::/41": "4134", - "2001:559:8133::/48": "7922", - "2402:4f40::/32": "137404", - "2606:380::/32": "40545", - "2806:2f0:31e4::/38": "17072", - "2a02:ff0:2c00::/40": "12735", - "2001:fb1:3009::/48": "7470", - "2001:1260:10e::/43": "13591", - "2600:6c38:e1::/46": "20115", - "2610:1a0::/41": "40193", - "2a0f:5707:ab2c::/48": "60404", - "2001:559:151::/48": "7015", - "2001:678:578::/48": "198956", - "2001:2000:3100::/36": "1299", - "2607:f0a0::/32": "32335", - "2607:fd78::/39": "26677", - "2a02:2020::/48": "34619", - "2c0f:f438::/32": "37517", - "2001:470:61::/45": "6939", - "2400:cb00:255::/44": "13335", - "2408:8256:3d9b::/48": "17816", - "2409:8751:500::/38": "56047", - "2001:67c:2184::/48": "8365", - "2401:c700::/42": "55639", - "2804:3e84::/32": "266602", - "2a0e:b107:13c0::/44": "211242", - "2001:df0:247::/48": "58631", - "2001:1248:55f2::/45": "11172", - "2405:3200:711::/32": "17639", - "2408:8256:2d8a::/48": "17816", - "2620:9a:8000::/48": "174", - "2620:139:2000::/40": "396912", - "2a0f:ab40::/32": "207797", - "2001:57a:505::/46": "33438", - "2001:67c:27ec::/48": "50304", - "2001:b08:b::/45": "3267", - "2408:840c:6e00::/40": "17621", - "240e:3bc:2200::/37": "136198", - "2a02:26f7:f1c4::/48": "36183", - "2401:d800:2170::/40": "7552", - "2402:e280:2162::/45": "134674", - "2a02:8000::/32": "50472", - "2001:648:2331::/37": "5408", - "2001:678:7::/48": "48053", - "2a02:240:100::/40": "28812", - "2a06:62c0:90::/32": "204138", - "2a04:4e40:9400::/48": "54113", - "2001:559:86c4::/44": "7922", - "2001:e60:a000::/33": "4766", - "2401:d640::/32": "132168", - "2604:480::/32": "40098", - "2606:a780::/32": "394437", - "2607:3700::/32": "16851", - "2a01:5f80::/32": "47408", - "2a0d:fec0:21::/48": "47481", - "2409:8d14:1100::/38": "56044", - "240e:966:2800::/37": "133776", - "2600:6c38:d06::/44": "20115", - "2605:dd40:8204::/48": "398549", - "2a0a:f0c0::/29": "204860", - "2602:804:1006::/44": "14536", - "2804:64b8:c000::/34": "269444", - "2408:8956:d4c0::/38": "17816", - "2605:de00::/40": "30083", - "2804:2a00::/32": "264050", - "2a09:bac0:50::/46": "13335", - "2001:df4:f080::/48": "141214", - "2401:d800:5a00::/41": "7552", - "2408:8956:c400::/40": "17622", - "2804:66ac::/32": "269575", - "2a09:5140::/48": "34775", - "2404:5700::/32": "58666", - "2607:f298:5::/46": "26347", - "2801:1f:c800::/48": "19429", - "2804:1e90::/35": "264436", - "2a02:26f7:c3c8::/47": "36183", - "2a10:20c0::/29": "207265", - "2a0b:2d40:bac4::/33": "209135", - "2001:559:c3e7::/44": "7922", - "2001:1248:98f6::/44": "11172", - "240e:473:7050::/39": "4134", - "2801:1f0:400a::/42": "3573", - "2804:49f0::/32": "267210", - "2a01:8dc0:112::/48": "29479", - "2a07:dc00:180::/44": "29997", - "2001:504:40:108::/64": "6461", - "2001:559:c3c3::/45": "33657", - "2600:370f:74c5::/46": "32261", - "2a02:2dc0::/32": "9063", - "2a0d:4d40:1a::/48": "50630", - "2c0f:f9e8::/32": "37497", - "2804:1bdc::/32": "61753", - "2001:500:76::/44": "30133", - "2001:550:3d0d::/38": "174", - "2001:559:3a8::/48": "7016", - "2607:fc48:450::/48": "40009", - "2804:14c:5500::/40": "28573", - "2804:4d8::/32": "52995", - "2804:b80::/32": "52786", - "2401:b180::/33": "37963", - "2001:510::/39": "376", - "2001:ee0:307::/41": "45899", - "2408:8957:500::/40": "17816", - "2607:f6f0:204::/48": "29884", - "2803:380::/32": "263728", - "2806:230:500a::/48": "265594", - "2001:559:826e::/47": "7922", - "240e:5f:600d::/48": "140315", - "2620:138:300f::/48": "11251", - "2a02:ac80:41::/43": "25145", - "2a0a:7e40:3::/29": "206056", - "2a0c:440::/32": "204419", - "2a0f:ec40::/32": "42433", - "2001:978:8f00:1::/35": "174", - "240a:a432::/32": "143724", - "2600:1408:4801::/37": "20940", - "2604:ef40:2::/48": "396158", - "2a0a:e5c0:e::/47": "207996", - "2001:df4:d180::/48": "140050", - "2404:2080::/32": "131270", - "2800:370:87::/42": "28006", - "2a02:26f7:bb05::/48": "36183", - "2a02:26f7:f8d0::/48": "36183", - "2a0d:9c80::/29": "49127", - "2a0f:a302:600::/40": "212503", - "240a:ad4e::/32": "146056", - "240e:3bf:1400::/38": "134773", - "240e:473:6850::/39": "4134", - "2600:1015:b070::/40": "6167", - "2a02:26f7:d104::/48": "36183", - "240a:a96c::/32": "145062", - "2804:7eb0::/32": "271641", - "2a01:8840:2e::/43": "12041", - "2001:df0:21a::/48": "23855", - "2620:f:7::/48": "3630", - "2804:4ae4::/35": "267270", - "2a06:9680::/31": "31293", - "2409:8020:1081::/43": "56046", - "2804:63d0::/32": "269385", - "2a00:7c80::/32": "49981", - "2a00:8140:f000::/36": "60351", - "2a09:9240::/29": "35388", - "2403:8880::/32": "17964", - "240a:a22e::/32": "143208", - "2404:1c40:f0::/39": "24432", - "240a:ab87::/32": "145601", - "240a:ae5a::/32": "146324", - "2a02:27d0:101::/32": "49463", - "2a10:cc40:c00::/40": "20473", - "2408:8459:9a10::/42": "17623", - "240a:a2e6::/32": "143392", - "240e:473:9320::/41": "140486", - "2607:6003:2305::/48": "11572", - "2a02:2e02:12d0::/42": "12479", - "2602:ffc5:130::/44": "40676", - "2a02:26f7:68::/48": "36183", - "2a0e:97c5:740::/46": "20473", - "2408:840d:c300::/42": "17621", - "2a02:26f7:d48d::/42": "20940", - "2001:559:c299::/48": "7015", - "2408:8956:100::/40": "17816", - "2800:bf0:172::/40": "27947", - "2801:86::/32": "53164", - "2001:559:c165::/48": "7725", - "2600:1900:40e0::/39": "15169", - "2620:77:6000::/48": "174", - "2a04:4e41:32::/44": "54113", - "2001:df4:a900::/48": "137327", - "2801:80:c30::/48": "61721", - "2a02:120::/47": "29396", - "2a02:26f7:fa84::/48": "36183", - "2001:67c:2730::/48": "198524", - "2001:1248:97b0::/45": "11172", - "2408:805c:4009::/36": "17622", - "2408:8459:2440::/40": "17623", - "240a:ac6e::/32": "145832", - "2600:1001:b1e0::/33": "22394", - "2605:9780::/48": "36180", - "240e:1e:1000::/36": "134772", - "240e:3b9:f100::/36": "4134", - "2803:aba0:2100::/40": "265554", - "2a0a:d1c0::/29": "15600", - "2001:418:144d::/48": "275", - "2804:1784:ff05::/40": "263152", - "2a02:4de0::/32": "31590", - "2001:900::/32": "35393", - "2400:6180::/48": "14061", - "2401:e380:2102::/47": "131091", - "2602:80a::/40": "2722", - "2607:f620::/32": "11590", - "2804:7110::/33": "270764", - "2606:ba00::/32": "16700", - "2806:10a8::/32": "8151", - "2403:9f00::/32": "17420", - "2403:b3c0::/48": "135905", - "2804:270:200::/40": "262814", - "2a0f:a8c0::/29": "209372", - "2602:102:1003::/48": "20115", - "2a0d:4a00::/32": "29148", - "2607:f5e8::/32": "22926", - "2a00:efe0::/32": "49489", - "2a02:2510::/32": "44068", - "2001:559:119::/48": "33657", - "2401:d800:2520::/41": "7552", - "240e:5a:40c0::/39": "140291", - "2606:cf00::/32": "54327", - "2a02:26f7:e08d::/42": "20940", - "2806:10a0:cbff:100::/34": "8151", - "2a01:180::/29": "12709", - "2a01:7c8:8000::/33": "20857", - "2a0c:5247:4000::/34": "208861", - "2402:d000:7001::/32": "9329", - "2607:9e00:5002::/32": "30536", - "2406:b100::/32": "132730", - "2001:67c:12f0::/48": "12843", - "2001:e48:22:1034::/41": "9583", - "2001:fd8:261::/46": "4775", - "2001:4878:4347::/48": "12222", - "2402:800:5701::/44": "7552", - "2405:fd80:1000::/40": "135391", - "2406:8c00::/32": "24282", - "2408:840d:9100::/42": "17621", - "240a:a599::/32": "144083", - "2620:57:4010::/40": "62831", - "2803:ad80::/48": "42473", - "2a00:cc40::/48": "44395", - "2001:579:412c::/43": "22773", - "2001:1388:1b8e::/34": "6147", - "2606:2000::/43": "1616", - "2804:13c4::/32": "262825", - "2a03:2880:f155::/44": "32934", - "2001:ee0:d340::/37": "45899", - "2403:75c0::/32": "136716", - "2404:3d40::/32": "138544", - "2404:a800:ff02::/30": "9498", - "240a:a5ef::/32": "144169", - "240e:44d:c80::/41": "4134", - "2001:678:c9c::/48": "200924", - "2600:8400::/28": "14813", - "2620:12e:e000::/40": "14630", - "2a00:6ec0:300::/37": "56837", - "2a0b:2a87::/32": "27176", - "2001:579:a0d4::/39": "22773", - "2401:ff80:1613::/40": "133954", - "2804:18:7050::/39": "10429", - "2806:2f0:6261::/40": "17072", - "2a02:26f7:f60d::/42": "20940", - "2a0e:1c80:6::/48": "3399", - "2a0f:16c0::/29": "60262", - "2001:678:5a0::/48": "207946", - "2001:67c:28ec::/48": "209943", - "240a:a29e::/32": "143320", - "240a:ad50::/32": "146058", - "2806:2f0:62::/43": "17072", - "2402:800:969b::/42": "7552", - "2a02:26f7:c0c1::/46": "20940", - "2a02:26f7:c381::/46": "20940", - "2001:67c:21ac::/48": "197727", - "240a:ad31::/32": "146027", - "2600:8807:e000::/28": "22773", - "2604:ca00:f024::/46": "36492", - "2804:95c::/32": "28654", - "2806:230:4002::/48": "265594", - "2a0c:b641:70::/48": "211013", - "2001:559:4b9::/48": "7922", - "2406:2000:efbc::/48": "10229", - "240e:44d:2280::/41": "4134", - "2803:e340::/32": "264694", - "2001:559:8241::/48": "7922", - "2600:804:201::/37": "701", - "2600:1415:3001::/37": "20940", - "2803:a900:6000::/48": "52420", - "2a0a:1a40::/32": "38176", - "2001:fd8:1a1::/46": "4775", - "2408:8956:be00::/40": "17622", - "240a:a79b::/32": "144597", - "240a:afe5::/32": "146719", - "240e:44d:300::/41": "140345", - "2804:1e68:9::/48": "16735", - "2001:559:85c4::/46": "7922", - "2001:559:864d::/48": "7015", - "2001:678:ad4::/48": "205597", - "2001:df2:ca00::/48": "135905", - "2408:8256:2d9c::/46": "17623", - "240a:a22a::/32": "143204", - "240a:a585::/32": "144063", - "2402:800:bb60::/40": "7552", - "2406:3000:12:200::/44": "4657", - "2607:f7e0::/32": "25660", - "2804:628c::/42": "269303", - "2401:c280::/32": "9752", - "2409:8904:a940::/38": "24547", - "240a:a646::/32": "144256", - "2a0d:d500::/29": "208861", - "2620:87:a000::/48": "12186", - "2804:3a50::/32": "14204", - "2001:c10:ff09::/40": "7473", - "2408:8459:ee50::/39": "17816", - "2806:220::/32": "28503", - "2a03:1a60::/32": "197161", - "2a10:ca00:1::/45": "212217", - "2001:4268:140::/38": "15964", - "2402:3a80:1c70::/45": "38266", - "2604:cd00::/32": "7352", - "2804:79a8::/32": "271319", - "2001:559:c0ca::/48": "7015", - "2001:559:c11c::/48": "13367", - "2401:31c0:ffff::/48": "133429", - "2405:4200:f002::/36": "24482", - "2806:10be:6::/44": "8151", - "240a:a111::/32": "142923", - "2620:171:1e::/47": "42", - "2001:559:c3ba::/48": "33659", - "2405:b000:600::/36": "6262", - "240a:a37d::/32": "143543", - "2620:4d:a000::/48": "32995", - "2a0b:4f00::/32": "200807", - "2001:67c:2548::/48": "6782", - "240a:a576::/32": "144048", - "240a:ac63::/32": "145821", - "2600:809:641::/30": "701", - "2800:c30::/32": "52361", - "2801:80:3780::/48": "269543", - "2a03:52a0::/39": "12557", - "2001:67c:11f8::/48": "204796", - "2404:f900:51::/32": "58482", - "2602:feda:cdc::/48": "141221", - "2c0f:fbf8:210::/29": "32653", - "2001:559:85c1::/48": "21508", - "2405:84c0:ff60::/44": "139782", - "2406:d00:aaaa::/48": "132165", - "2408:8456:5c00::/42": "17622", - "2804:2ac4::/32": "265117", - "2a02:26f7:df8d::/42": "20940", - "2a06:c240:40::/29": "49222", - "2408:8957:f800::/40": "17622", - "2606:5000:200::/39": "3908", - "2804:14d:9084::/43": "28573", - "2804:7bd0::/32": "271456", - "2409:807e:3100::/36": "9808", - "240e:980:2d00::/40": "136197", - "2a0a:3680::/29": "34907", - "2600:140f:b800::/48": "9498", - "2602:fcf6:100::/48": "57401", - "2804:86c::/32": "262369", - "2a02:26f7:dd44::/48": "36183", - "2a02:cb80:2710::/48": "43766", - "2001:df5:b80::/48": "141107", - "2001:1248:5a6b::/43": "11172", - "2605:a404:aac::/39": "33363", - "2001:559:df::/48": "33489", - "2001:559:8180::/48": "33659", - "2804:5534:9000::/34": "268696", - "2001:df4:e780::/48": "141206", - "240a:a68c::/32": "144326", - "2606:a700::/32": "17113", - "2a02:4901::/32": "200128", - "2a04:4e40:2e10::/44": "54113", - "2a0b:b980:1::/46": "51920", - "2409:8052:800::/47": "56047", - "240a:ac4a::/32": "145796", - "2a0c:2040::/29": "47447", - "240a:ac9a::/32": "145876", - "2a0e:46c4:2b00::/40": "212767", - "2001:67c:2acc::/48": "205046", - "2001:1a90::/32": "8851", - "2401:d800:fa70::/40": "7552", - "240a:a83b::/32": "144757", - "240a:a8df::/32": "144921", - "2806:2f0:30a1::/46": "17072", - "2a02:2aa8:129::/45": "702", - "2401:2f00::/32": "17617", - "2401:4900:1260::/44": "45609", - "2404:e5:212::/30": "703", - "2a02:26f7:eb49::/42": "20940", - "2a0b:dd00::/29": "31252", - "2001:559:217::/48": "33659", - "2409:8721::/29": "9808", - "2604:5500:7000::/38": "19165", - "2804:ce4::/32": "52573", - "2001:200:e00::/40": "4690", - "240a:a839::/32": "144755", - "2a02:26f7:bbc5::/48": "36183", - "2a0b:3c40:13::/48": "209280", - "2620:0:500::/42": "11643", - "2804:80d8::/32": "272416", - "2001:67c:2f8::/48": "47639", - "2409:805c::/46": "9808", - "240a:af47::/32": "146561", - "2603:c010:e000::/36": "31898", - "2800:160:1e82::/43": "14259", - "2a03:4bc0:2200::/48": "30893", - "2001:4328::/32": "30844", - "2402:800:3b71::/44": "7552", - "240e:3bf:7a00::/32": "140313", - "2803:bee0:4000::/36": "269989", - "2804:7ac8::/32": "271392", - "240a:aea5::/32": "146399", - "2605:4400::/47": "40715", - "2804:6dc4::/32": "270554", - "2806:2f0:5181::/43": "17072", - "2406:9e00:6::/44": "55352", - "240a:ad23::/32": "146013", - "2804:3e50:12f::/34": "266587", - "2400:bd00::/32": "45267", - "2806:2f0:2420::/48": "17072", - "2a0c:b080::/29": "204751", - "2a10:4646:b::/48": "211693", - "2408:84e2:4c0::/32": "17621", - "240e:438:6620::/43": "140647", - "2603:c023:8000::/35": "31898", - "2a01:a500:2::/35": "42831", - "2a02:26f7:e201::/46": "20940", - "2a03:e440::/29": "206978", - "2001:678:63c::/48": "39566", - "2401:d800:70::/40": "7552", - "240c:c000::/20": "23910", - "2600:1012:b1a0::/43": "6167", - "2a0d:7100::/45": "41033", - "2001:559:54f::/48": "33491", - "2001:559:868b::/48": "33665", - "2600:1417:74::/46": "20940", - "2602:fc81:1::/46": "399334", - "2605:41c0:2::/48": "397042", - "2a0b:4342:3000::/36": "57695", - "2001:b10:a000::/44": "196844", - "240a:a6c3::/32": "144381", - "2001:428:c0d::/35": "209", - "2001:559:c1cb::/45": "7922", - "2001:678:4d4::/48": "24868", - "2001:13d2:280f::/43": "7303", - "240a:a981::/32": "145083", - "2402:800:3bd3::/44": "7552", - "2803:6f00::/36": "14117", - "2a02:cb80:2940::/48": "43766", - "2a0f:3100::/32": "47596", - "2402:7500:4b3::/45": "24158", - "2620:100:e000::/47": "5662", - "2804:e94:1c1::/43": "262468", - "2402:800:3d71::/44": "7552", - "240a:ab6e::/32": "145576", - "2600:1a0e::/48": "10307", - "2a02:26f7:d584::/48": "36183", - "2001:67c:10f4::/48": "211763", - "2a0e:b105:650::/46": "20473", - "2a02:61e0::/32": "31543", - "2607:ff60:400a::/35": "3900", - "2a00:1eb8:c004::/48": "43811", - "2600:370f:7563::/40": "32261", - "2a01:2c0:23db::/48": "9179", - "2a01:9700:1800::/41": "8376", - "2a02:16d8:108::/32": "5518", - "2a02:ac80:d1::/42": "25145", - "240e:44d:1c00::/41": "140345", - "2804:539c::/32": "268595", - "2806:268:300::/40": "13999", - "2a01:c9c0:800f::/48": "2280", - "2a04:ce40::/29": "13157", - "240e:473:6f50::/40": "4134", - "2604:8540:fc0c::/47": "33353", - "2610:b0:40d6::/47": "3573", - "2a0e:a880:1000::/36": "209043", - "2a0e:fd45:d90::/44": "44103", - "2001:67c:2f50::/48": "2119", - "2800:98::/35": "14754", - "2001:1248:9a93::/42": "11172", - "2804:aa8:900::/32": "52903", - "2001:67c:24b4::/48": "8587", - "240a:a284::/32": "143294", - "2606:ab80::/32": "36001", - "2607:fad0::/42": "32244", - "2001:550:6f01::/35": "174", - "2602:ffb0:27::/48": "32780", - "2806:2f0:62a0::/35": "17072", - "2001:678:2e0::/48": "29686", - "2402:800:3b01::/44": "7552", - "2a02:26f7:f248::/48": "36183", - "2a03:f480:1::/46": "198068", - "2a07:c800::/29": "42159", - "2001:678:3ec::/48": "1257", - "2001:678:944::/48": "34015", - "2001:67c:278c::/48": "12732", - "2001:888::/29": "3265", - "2405:10c0::/48": "135905", - "2a03:77e0:5301::/48": "48305", - "2a0e:1d80:10::/48": "9009", - "2401:d800:2ad0::/42": "7552", - "2402:800:318d::/43": "7552", - "2804:7308::/36": "270891", - "2a0a:3b00::/32": "206497", - "2001:550:1e00:1::/47": "174", - "2804:1218:8000::/40": "263456", - "2a0b:5380::/29": "206119", - "2602:fdc6::/36": "29768", - "2c0f:2900::/32": "328915", - "2409:8914::/39": "56044", - "2409:8924:6b00::/37": "56046", - "2409:892a::/27": "9808", - "240a:a19f::/32": "143065", - "240a:a713::/32": "144461", - "2620:103:2::/48": "27357", - "2804:38e4::/32": "266508", - "2a02:26f7:bcd0::/48": "36183", - "2a09:bac0:151::/44": "13335", - "2001:470:2b::/48": "12266", - "2409:8c4c:c01::/38": "9808", - "240e:473:5f50::/40": "4134", - "2a0c:4380::/40": "20860", - "2001:448a:5150::/34": "7713", - "2402:800:5571::/44": "7552", - "2804:138b:b030::/40": "53037", - "2a07:e02:bac::/48": "210083", - "2a0b:b800::/29": "51269", - "240a:a7f8::/32": "144690", - "240a:ae4b::/32": "146309", - "2606:f300:20::/43": "4544", - "2607:f6b8::/32": "4043", - "2001:67c:4dc::/48": "201471", - "2001:1248:a47d::/46": "11172", - "2405:19c0::/48": "18403", - "2408:803e::/32": "4837", - "2603:4007::/28": "3", - "2804:4cc0::/32": "267389", - "2804:1780::/32": "263151", - "2a02:26f7:c6::/48": "36183", - "2a0f:c081:6d96::/48": "43694", - "240a:a2d0::/32": "143370", - "2804:7c94::/32": "271505", - "2602:fdea:2::/48": "19186", - "2804:154c:5011::/44": "263382", - "2a00:e6a0::/46": "12303", - "2a01:a500:2567::/32": "42831", - "2a06:ed00::/29": "50642", - "2a09:2840::/29": "15525", - "2001:678:f0c::/48": "211638", - "2408:8456:5200::/42": "17622", - "2a00:11c0:11c0::/48": "42388", - "240a:a058::/32": "142738", - "240e:f:d000::/27": "4134", - "2a00:1e68::/39": "42861", - "2a0d:3b40::/29": "8808", - "2001:468:2101::/48": "3676", - "2804:14c:5f85::/41": "28573", - "2804:19c8::/34": "61818", - "2804:1dd0::/32": "262332", - "2804:2230::/32": "264590", - "2a01:170::/35": "8820", - "2a02:26f0:4e01::/35": "20940", - "2001:4878:a038::/48": "12222", - "2406:840:5800::/47": "139317", - "2406:3000:20::/44": "4657", - "2409:8915:5200::/39": "56044", - "240a:a040::/32": "142714", - "2620:76:a000::/48": "33491", - "2804:6384::/32": "269366", - "2001:67c:271c::/48": "60213", - "2408:8409:6000::/40": "4808", - "240e:41:4000::/37": "17897", - "2600:1406:3c01::/38": "20940", - "2804:2074::/32": "264491", - "2804:338c::/32": "265403", - "2001:550:3203::/45": "174", - "2001:44b8:309c::/48": "4739", - "2401:4900:5e00::/43": "45609", - "2402:800:bff0::/44": "7552", - "2605:b1c0::/32": "14404", - "2804:2540::/32": "264268", - "2a0c:9a40:8080::/48": "136620", - "2001:559:559::/48": "7922", - "2409:8751:900::/38": "56047", - "240e:44d:4a00::/41": "140345", - "2a09:7e40::/29": "35437", - "2a0c:4400::/32": "39405", - "2a02:26f7:df44::/48": "36183", - "2a02:26f7:eb00::/48": "36183", - "2a0b:ed40::/31": "212547", - "2409:8a3c:8a00::/31": "24444", - "2620:10f:b071::/48": "395700", - "2403:0:608::/32": "4755", - "2804:5fe8::/32": "269131", - "2a0d:52c0::/29": "210129", - "2001:559:c2e7::/48": "33668", - "2001:1938:4002::/48": "33438", - "2402:800:f420::/41": "7552", - "2a03:1ae0:10::/48": "59944", - "2a0c:ba80::/29": "204741", - "2407:500:502::/47": "58940", - "2600:141d:1::/32": "20940", - "2a0e:68c0:4::/48": "57616", - "2401:d800:5e60::/40": "7552", - "2405:4802:9740::/31": "18403", - "2607:fcb8::/32": "6479", - "2405:5940::/32": "17473", - "2406:da70:6000::/40": "16509", - "240a:a0b6::/32": "142832", - "2409:804f:1900::/34": "9808", - "2600:1408:cc00::/48": "32787", - "2804:2e4::/32": "53234", - "2a01:9700:1760::/48": "8376", - "2001:48d0::/32": "195", - "2400:8500:6800::/48": "58786", - "240a:a103::/32": "142909", - "2607:f770:8464::/33": "22958", - "2a06:61c0::/29": "56329", - "2a0b:9d80::/32": "15699", - "2001:1248:84c9::/45": "11172", - "2402:800:5e01::/42": "7552", - "2804:75d4::/32": "271072", - "2001:67c:2378::/48": "41504", - "240a:a325::/32": "143455", - "2607:ee80:10::/48": "11403", - "2600:6c7f:9060::/48": "20115", - "2607:fc08::/32": "46786", - "2a00:13b8::/32": "34279", - "2a02:26f7:e8c9::/42": "20940", - "2604:2e80::/36": "30036", - "2a01:780::/32": "25415", - "2a02:a00:1034::/34": "15987", - "240a:abc1::/32": "145659", - "2600:8807:c800::/35": "22773", - "2804:4f84::/32": "268331", - "2a02:26f7:c941::/46": "20940", - "2a07:240::/32": "16089", - "2a00:6580::/32": "39505", - "2001:559:82b5::/48": "33651", - "2408:80e9:4000::/34": "4837", - "2409:8050:2::/40": "56047", - "2409:8d14:400::/38": "56044", - "2605:a400:7::/31": "33363", - "2606:2800:4a28::/46": "15133", - "2804:960::/32": "263078", - "2402:3a80:c00a::/48": "55410", - "2804:21bc:201::/32": "264570", - "2a07:21c0::/29": "43260", - "2001:43f8:1161::/48": "327796", - "2001:4998:ef66::/44": "10310", - "2408:840c:7b00::/40": "17621", - "240a:a38b::/32": "143557", - "2a00:1228:6::/39": "31148", - "2409:8904:5eb0::/39": "24547", - "2600:100a:d000::/43": "6167", - "2804:18:6a00::/37": "10429", - "2804:38b0::/38": "266494", - "2804:6784::/32": "269633", - "2001:678:658::/48": "3209", - "2401:ee00:133::/38": "23951", - "2607:fc48:1008::/48": "40009", - "2801:15a::/44": "267788", - "2a05:7300::/32": "35701", - "2001:67c:14::/48": "15960", - "2405:6cc0::/32": "131958", - "2405:d900::/32": "56004", - "2a00:f0e0:11::/41": "198499", - "2a02:1740::/32": "197133", - "2c0f:eed8::/32": "328317", - "240a:aaf3::/32": "145453", - "240a:af12::/32": "146508", - "2a02:26f7:e549::/42": "20940", - "2409:8051:3000::/47": "56047", - "2800:160:1b99::/42": "14259", - "2a0c:9a40:1033::/48": "34927", - "2001:dce:d452::/47": "45285", - "240e:bf:d000::/25": "4134", - "240e:6b3::/35": "136200", - "2607:fde8::/32": "3853", - "2801:80:b90::/48": "21506", - "2804:14c:f289::/41": "28573", - "2a0e:b107:4aa::/45": "207427", - "2a01:148::/29": "34245", - "2a06:6e40::/29": "204120", - "2001:559:87d2::/47": "7922", - "2001:67c:2f08::/48": "32421", - "2404:7d80::/32": "9268", - "2405:84c0:9700::/44": "9886", - "2600:140f:b801::/38": "20940", - "2800:160:1b96::/44": "14259", - "2a0a:3140:1610::/44": "15532", - "240a:a4e3::/32": "143901", - "2603:c001:3400::/42": "31898", - "2800:160:12e6::/44": "14259", - "2a00:1560:19::/35": "29684", - "2001:559:86e6::/47": "7725", - "2001:688::/32": "5511", - "2001:dce:5300::/48": "45285", - "2401:b5c0::/48": "135923", - "2607:f4e8:10::/46": "22822", - "2804:3994::/47": "266037", - "2804:3aa4:c4::/32": "266101", - "2a0b:ae47:3::/45": "40676", - "2604:9f00:800:9::/37": "27364", - "2604:f500:2::/32": "16698", - "2800:af0::/32": "27984", - "2408:8459:a630::/41": "17622", - "2803:aa60::/32": "267882", - "2a0e:97c0:380::/48": "60404", - "2a06:cd40:300::/48": "60781", - "2001:1388:8a00::/44": "264684", - "2001:4888:801a::/47": "6167", - "240e:473:9920::/41": "140486", - "2604:6f00::/32": "35985", - "2804:14c:c600::/40": "28573", - "2a01:598::/29": "3320", - "2a03:f80:ed31::/48": "57169", - "2001:559:c233::/48": "7922", - "2001:559:c2a2::/48": "33651", - "2606:2ac0::/32": "46962", - "2a01:90::/40": "29668", - "2604:c580::/32": "55230", - "2a0f:1c40::/29": "208229", - "2405:8a00:c028::/34": "55824", - "2600:1415:4401::/36": "20940", - "2605:2c40::/40": "63210", - "2a0b:300::/29": "61317", - "2804:7890::/32": "271251", - "2a00:79e0:502::/32": "45566", - "2a02:26f7:f9c5::/46": "20940", - "2a0e:f340::/29": "44205", - "240a:a522::/32": "143964", - "2604:4300:f18::/45": "33387", - "2605:a7c0:151::/44": "16509", - "2804:46f0:41::/40": "267021", - "2804:795c::/32": "271301", - "2a02:8380::/30": "8412", - "2408:8256:3570::/44": "17623", - "240e:108:1071::/44": "4134", - "2600:5c01:2d3a::/35": "10796", - "2800:280::/33": "27781", - "2806:268:1501::/48": "13999", - "2a02:29e8::/32": "49604", - "2403:580::/32": "134715", - "2409:8907:7720::/36": "24547", - "2804:1300::/48": "263509", - "2804:1e90:1300::/32": "264436", - "2a05:e00::/29": "202793", - "2001:df2:8c80::/48": "137655", - "2600:1a0f:2000::/48": "10307", - "2804:768:880::/35": "52977", - "2001:559:c23d::/48": "13367", - "240a:afed::/32": "146727", - "2804:3020::/32": "264931", - "2a01:8460::/32": "199770", - "2a11:a80::/29": "208861", - "2407:b9c0::/36": "142616", - "2408:8000::/48": "4837", - "240a:a637::/32": "144241", - "2803:a180::/32": "28118", - "2a01:40c0::/29": "29608", - "2a02:26f7:b784::/47": "36183", - "2a04:4e40:4c10::/44": "54113", - "2001:559:516::/48": "33489", - "2600:2001::/32": "33517", - "2401:3340:6::/32": "45722", - "2604:11c0:200::/40": "395822", - "2a01:89c0::/32": "25428", - "2001:df1:cd00::/48": "135425", - "2602:fdb7::/47": "396073", - "2804:bfc::/32": "52654", - "2c0f:f000:800::/40": "36891", - "2001:559:7ad::/48": "33656", - "2001:1a11:73::/48": "8781", - "2400:e4c0::/32": "136093", - "2606:a600:4001::/48": "398024", - "2800:bf0:2c0::/45": "52257", - "2a02:e0:3128::/38": "34984", - "2a02:26f7:dfc5::/46": "20940", - "2001:978:5204::/39": "174", - "2401:d800:9d30::/41": "7552", - "2804:710:2::/44": "17222", - "2a00:1ce0::/32": "50530", - "2a02:2370:4000::/48": "32787", - "240a:a0ca::/32": "142852", - "240e:97e::/33": "58543", - "240e:980:4500::/40": "58461", - "2804:f74::/32": "263586", - "2a02:6900:880c::/48": "43894", - "2001:559:8447::/48": "33491", - "2405:a140::/32": "132559", - "2408:8956:f8c0::/37": "17816", - "2605:5300:200::/32": "21557", - "2804:1a34::/32": "61845", - "2a00:1938::/32": "42093", - "2a05:2c0::/29": "62178", - "2408:8459:2c40::/38": "17816", - "240a:ad93::/32": "146125", - "2604:6e00:800::/37": "13977", - "2605:a404::/42": "33363", - "2804:69d4::/32": "270294", - "2a02:26f7:18::/48": "36183", - "2001:438:fffd:125::/62": "397601", - "2001:618::/32": "15716", - "2404:b1::/35": "9891", - "2409:8028:1000::/40": "56041", - "2800:200:b430::/41": "12252", - "2602:fff6:1::/46": "8100", - "2605:a401:8b41::/40": "33363", - "2806:2f0:9d01::/34": "17072", - "2001:559:c041::/48": "7016", - "2001:559:c2f4::/48": "7015", - "2406:8800:40::/43": "17465", - "2408:8459:7650::/36": "17816", - "2600:141b:6801::/35": "20940", - "2401:b200:7::/41": "24186", - "2620:125:7009::/48": "53780", - "2a02:5c40::/32": "42451", - "2402:5300:4004::/42": "45903", - "2a03:b8c0:10::/48": "202276", - "2a0e:ed80::/29": "6735", - "2001:67c:28e8::/48": "199768", - "2409:8a75::/28": "9808", - "240a:a66f::/32": "144297", - "2600:1480:b000::/48": "21342", - "2620:149:575::/40": "714", - "2804:164c::/40": "263280", - "2804:5d90::/32": "13786", - "2a03:2880:4000::/32": "32934", - "2001:418:1c01:2::/34": "2914", - "2001:16a2:6200::/40": "25019", - "2408:84f3:de10::/42": "134543", - "240e:698:2000::/40": "4134", - "240e:940:e00::/40": "136197", - "240e:95d:1800::/37": "136194", - "2620:115:50::/40": "18888", - "2a09:5303::/32": "50113", - "2a0c:e300::/30": "198985", - "2a02:587:6800::/32": "6799", - "2001:559:302::/48": "7016", - "2001:559:700::/48": "33659", - "2400:af80::/32": "4693", - "2400:d400:11::/46": "45671", - "240a:ac88::/32": "145858", - "2804:558::/32": "262509", - "2806:269:3300::/37": "13999", - "2a02:cdc6:3101::/31": "59715", - "2a02:f040:4::/47": "59605", - "2a0e:fd45:2b19::/33": "44103", - "2803:3c0::/32": "265728", - "2a02:6000::/33": "35130", - "2a0f:2980::/29": "39587", - "2804:5b84:8000::/36": "28329", - "2a02:6560::/32": "201932", - "2a0d:82c7:c000::/34": "47787", - "2001:43f8:1620::/48": "328706", - "2600:1012:9020::/40": "22394", - "2804:145c:510::/33": "263327", - "2a00:6ec0:100::/40": "56837", - "2001:398::/32": "7682", - "2400:b000:1000::/48": "135162", - "2600:d09:4000::/30": "20161", - "2604:a00:1010::/32": "19318", - "2804:7ddc::/32": "271587", - "2001:678:770::/48": "201836", - "2400:80c0::/32": "132453", - "2404:ca40::/32": "134944", - "2404:e9c0::/46": "134405", - "2405:9800:c917::/44": "45430", - "2408:8957:5500::/40": "17816", - "2a02:26f7:bcc8::/48": "36183", - "240a:ab9a::/32": "145620", - "2600:1419:5c01::/38": "20940", - "2602:fdba::/36": "40676", - "2804:2d24::/32": "263032", - "2001:559:7dd::/46": "7922", - "2402:4900::/32": "9216", - "2600:1417:6d::/46": "9498", - "2602:ff96:13::/48": "26548", - "2a00:d7a0::/48": "8884", - "2a01:9700:1590::/41": "8376", - "2a02:27b0:5400::/39": "9146", - "2001:468:d02::/40": "4600", - "2400:addf::/39": "9541", - "2604:2e88:800::/30": "30036", - "2001:559:8680::/47": "7922", - "2001:16f8:16::/37": "25525", - "2402:8100:289e::/37": "55644", - "2604:d600:1659::/39": "32098", - "2804:14c:6521::/41": "28573", - "2a00:6f60::/32": "44923", - "2408:8000:5005::/32": "4837", - "2600:370f:7508::/45": "32261", - "2606:1a40:f006::/43": "398962", - "2804:26a8::/32": "263847", - "2001:67c:14bc::/48": "44594", - "2600:1008:f000::/44": "6167", - "2804:5494::/32": "268659", - "2a0f:3784:100::/46": "213204", - "2001:4490:3a00::/42": "9829", - "2600:100e:ff20::/40": "6167", - "2600:1400:2001::/32": "20940", - "2620:4d:4020::/48": "62597", - "2801:18:6800::/48": "271828", - "2a02:26f7:cb80::/48": "36183", - "2a02:26f7:d481::/46": "20940", - "2803:d100:9080::/38": "52362", - "2806:230:6035::/32": "11888", - "2a06:7a40:1::/46": "204050", - "2c0f:fc88:3f::/31": "36992", - "2001:2000:1000::/40": "3308", - "2408:8740::/32": "4837", - "2607:fdf0:5e2a::/43": "8008", - "2803:3c20::/32": "266672", - "2806:2a0:1000::/40": "28548", - "2a01:8840:12::/45": "12041", - "2a0c:2c40::/32": "58110", - "2001:4ba8::/29": "12570", - "2406:f940::/32": "141596", - "2610:68::/33": "5774", - "2804:497c::/32": "262896", - "2a02:bc8:37::/48": "202717", - "2a02:26f7:f681::/46": "20940", - "2a0a:ec02:701::/48": "42692", - "2803:d860::/32": "267826", - "2001:559:873f::/48": "33491", - "2001:67c:10b0::/48": "31317", - "2400:9380:82c0::/44": "136167", - "2804:cb0:8889::/33": "52742", - "2804:1cc8::/32": "61675", - "2804:249c::/32": "264233", - "2a0e:b107:15d0::/47": "210951", - "2001:559:c178::/48": "33657", - "2404:e801:201b::/45": "55430", - "2620:73:e000::/48": "396970", - "2804:265c::/32": "264329", - "2806:2f0:20e0::/48": "17072", - "2a00:b700::/47": "51659", - "2a07:3500:19b0::/48": "38915", - "240a:a6cb::/32": "144389", - "240a:a77a::/32": "144564", - "2804:30c:200::/35": "28343", - "2a0b:b87:ffd7::/48": "206804", - "2405:6e00:f820::/48": "133612", - "2605:bc0:2002::/48": "54201", - "2620:3a:2000::/48": "396418", - "2803:2f40:ffff::/48": "36351", - "2804:26ec::/32": "263864", - "2804:73e0::/32": "270943", - "2a05:7e80::/29": "50009", - "2001:44b8:27::/48": "4739", - "2620:68:6000::/48": "397321", - "2620:128:e082::/48": "22317", - "2804:63cc::/32": "269384", - "2a05:e40:1400::/34": "59909", - "2a0d:b201:1060::/43": "206026", - "2001:1a68:8::/47": "15694", - "2401:ab40:1::/48": "136961", - "2402:3a80:400::/41": "38266", - "2402:8100:2450::/45": "45271", - "2403:7a00::/32": "17676", - "240a:a243::/32": "143229", - "240e:108:28::/48": "133775", - "2408:8956:c9c0::/38": "17622", - "2a04:f900::/29": "59921", - "2a07:e880::/29": "202333", - "2a0f:600::/48": "51044", - "2404:a800:3003::/39": "9498", - "2408:8256:3160::/44": "17623", - "240a:ae0b::/32": "146245", - "2804:b2c::/32": "52946", - "2001:df2:f680::/48": "132269", - "2804:444c::/32": "267623", - "2a02:26f7:e900::/48": "36183", - "2a0a:9bc0::/29": "48303", - "2a0e:fd45:b30::/48": "42831", - "2401:ff80:170f::/43": "133954", - "2409:807e:900::/35": "9808", - "240a:af18::/32": "146514", - "2a00:a920::/32": "60486", - "2001:559:8793::/48": "33491", - "2801:80:350::/48": "262524", - "2a01:c50f:b780::/36": "12479", - "2c0f:e908::/32": "327750", - "2001:559:457::/48": "33651", - "2001:559:7e3::/45": "7725", - "2406:dd80::/32": "398704", - "2801:1b0::/40": "263719", - "2803:e8c0::/32": "266776", - "2a00:ecc0::/32": "16001", - "2803:8920::/33": "266673", - "2803:d600::/32": "20255", - "2a0b:5ac0::/29": "202803", - "2400:c800:4004::/29": "4515", - "2402:d000:1071::/45": "9329", - "2804:64d8::/32": "269453", - "240a:a14c::/32": "142982", - "240a:a40f::/32": "143689", - "240a:a8f3::/32": "144941", - "2804:6658::/32": "269552", - "2806:230:5016::/48": "265594", - "2a01:4a80::/32": "15630", - "2a01:5640::/32": "43207", - "2001:559:8050::/47": "33491", - "2405:a200::/32": "17534", - "2800:310:400::/45": "18678", - "2804:294::/33": "28604", - "2a0e:1d00::/32": "21263", - "2a03:5f00:105::/46": "29644", - "2001:253:103::/48": "142069", - "2402:800:9d55::/42": "7552", - "240a:a0ac::/32": "142822", - "240a:af0c::/32": "146502", - "2606:2800:21f::/42": "15133", - "2a02:26f7:bb45::/48": "36183", - "2a02:6680:1162::/48": "16116", - "2a0a:2ec0::/29": "201050", - "2001:648:20f0::/48": "199399", - "240e:95c:6000::/32": "4134", - "240e:980:9100::/40": "140061", - "2600:1402:a801::/35": "20940", - "2600:1403:12::/45": "20940", - "2a02:26f7:d15d::/48": "36183", - "2a06:de00::/29": "56469", - "2409:8a53:d00::/38": "56047", - "240a:a26a::/32": "143268", - "2602:fef4:300::/48": "54721", - "2604:9000:103::/34": "19693", - "2620:104:2041::/48": "16509", - "2800:4b0:400e::/40": "12252", - "2a04:2180::/32": "61272", - "2001:559:4e8::/48": "7922", - "2400:fc00:e50::/33": "45773", - "2607:f368:3220::/48": "46846", - "2803:7800::/32": "263703", - "2804:34:ff08::/40": "28306", - "2a00:7c00::/32": "41783", - "2a03:a5e0::/32": "51551", - "2a05:35c0:3::/29": "60781", - "2606:8e80:3000::/48": "394308", - "2620:118:b003::/48": "32110", - "2a02:26f7:ec4c::/48": "36183", - "2a0e:b107:f50::/44": "212270", - "2001:44b8:2039::/45": "4739", - "2402:f840:2::/32": "137883", - "2a03:2960:200::/32": "201590", - "2001:1248:a43f::/41": "11172", - "2001:16d8:57::/44": "16150", - "2407:1400:7::/40": "23752", - "2602:fe12:9::/48": "139267", - "2a01:c50f:c380::/41": "12479", - "2c0f:fe38:2220::/39": "33771", - "2001:1840:c000::/44": "196", - "2408:8256:2d7f::/48": "17816", - "240a:a186::/32": "143040", - "240a:aa10::/32": "145226", - "2600:6c38:a3::/44": "20115", - "2606:2800:447::/44": "15133", - "2610:100:6610::/32": "8047", - "2401:d800:71c0::/42": "7552", - "2600:370f:33c4::/44": "32261", - "2a00:86c0:2076::/47": "40027", - "2001:dc8:c000::/47": "24066", - "2406::/32": "9732", - "2408:8459:e10::/41": "17622", - "2602:fe19:11::/42": "26073", - "2602:ff62:203::/45": "61317", - "2a02:26f0:4801::/40": "20940", - "2001:1248:97cc::/42": "11172", - "2402:800:338d::/43": "7552", - "2803:9800:b505::/46": "11664", - "2806:320::/39": "28438", - "2001:67c:2e58::/48": "205376", - "2001:4998:ef5e::/48": "7233", - "2605:3600::/46": "30452", - "2607:b00::/32": "53834", - "2620:f3:8000::/48": "29825", - "2a0d:2902:caff::/48": "204185", - "2001:67c:1084::/48": "34686", - "240a:adb8::/32": "146162", - "2804:1268::/32": "263475", - "2806:230:1004::/48": "265594", - "2a02:26f7:f2c5::/46": "20940", - "2001:67c:1580::/48": "50277", - "2408:8456:aa10::/42": "134543", - "2409:805f:1900::/34": "9808", - "240a:a59c::/32": "144086", - "2600:1415:1c01::/34": "20940", - "2a0c:fc0::/29": "204383", - "240a:a854::/32": "144782", - "2a06:dd40:5600::/47": "203416", - "2a0a:580:1100::/43": "15404", - "2400:9380:a042::/48": "23764", - "2402:c4c0::/47": "132933", - "2806:269:300::/37": "13999", - "2a0e:1b00::/32": "49436", - "2001:550:2607::/48": "142580", - "2001:579:110c::/42": "22773", - "240a:a0d9::/32": "142867", - "240e:14:a000::/31": "4134", - "2804:6ea8::/33": "270611", - "2001:67c:740::/48": "44655", - "2401:d800:b060::/40": "7552", - "2403:8600:60f0::/47": "45820", - "240a:a130::/32": "142954", - "240a:acf7::/32": "145969", - "2804:3ab8::/32": "266105", - "2a00:11c0:82::/45": "42473", - "2001:408:10::/44": "6250", - "2408:8459:5c30::/41": "17622", - "240a:ab2b::/32": "145509", - "240a:acc9::/32": "145923", - "2804:4430::/32": "267608", - "2804:6be4::/32": "270432", - "2a03:5f00:108::/46": "207044", - "2001:67c:1588::/48": "198168", - "2408:840d:de00::/42": "17621", - "2604:3d00:d4fb::/45": "6327", - "2804:6930::/34": "270254", - "2a03:2cc0::/32": "57537", - "2405:c9c0:2a::/35": "138823", - "240a:a698::/32": "144338", - "2a02:e88:8000::/48": "44914", - "2001:470:90::/48": "36225", - "2001:df2:6c80::/48": "134928", - "2600:370f:7503::/45": "32261", - "2001:559:862d::/48": "7016", - "2001:1388:4446::/36": "6147", - "240a:afa1::/32": "146651", - "2606:6680:31::/46": "6315", - "2a06:1301:4090::/48": "47691", - "240e:1c7::/22": "4134", - "2600:1409:5801::/34": "20940", - "2405:ec00:9014::/42": "23955", - "2a07:5100::/29": "203052", - "2001:559:c296::/47": "7015", - "2001:ce0:2901::/32": "3662", - "2408:8459:3420::/44": "17816", - "240a:af48::/32": "146562", - "2605:cc40::/32": "46713", - "2800:160:24ff::/39": "14259", - "2a03:9180::/47": "199422", - "2409:8918::/31": "134810", - "2409:8b39::/30": "9808", - "240a:a75c::/32": "144534", - "2607:fdf8::/40": "13649", - "2804:5220::/32": "268496", - "2a00:16c8:10c::/48": "3257", - "2607:f110:17::/44": "21889", - "2a0c:ee00::/39": "206805", - "2a0c:a640:1::/48": "42298", - "2001:a48:8000::/36": "15851", - "2607:f6f0:6002::/40": "27566", - "2a01:4de0::/32": "199933", - "2a02:26f7:d581::/46": "20940", - "2a07:3b80:1::/48": "47447", - "2a09:6200::/29": "38946", - "2a0b:ed42::/29": "212547", - "2001:559:8586::/47": "7015", - "2404:ba00:8::/46": "17665", - "2a03:6f80::/30": "35676", - "240e:473:720::/41": "140486", - "2804:fc8::/32": "263603", - "2a02:2698:4c28::/38": "42682", - "2a02:26f0:2200::/48": "34164", - "2a04:a100::/29": "62183", - "2602:feda:dc0::/44": "142427", - "2001:18e8::/46": "87", - "2800:160:1df9::/38": "14259", - "2a02:ab40::/29": "196810", - "2001:559:845d::/48": "33667", - "2409:8b7f::/21": "9808", - "240e:3bc:dc00::/34": "4134", - "2804:5534:d000::/37": "268696", - "2a01:280:370::/48": "3301", - "240a:a6d9::/32": "144403", - "240e:6bd:1000::/30": "4134", - "2600:370f:352d::/41": "32261", - "2604:9e40:4::/32": "29457", - "2620:a4:2051::/48": "399120", - "2001:1900:228d::/43": "3356", - "2600:1003:a400::/44": "6167", - "2607:f3b0::/32": "21976", - "2804:5de0::/32": "268998", - "2a01:8840:4e::/43": "12041", - "2a02:26f7:c8d8::/48": "36183", - "2a02:26f7:bec9::/42": "20940", - "2401:7000::/33": "45177", - "2406:2000:9d::/46": "10310", - "2409:8061:900::/35": "9808", - "2607:f2d8:6000::/32": "18450", - "2801:13a::/44": "270028", - "2a01:8900::/32": "30847", - "2a02:2698:3c00::/38": "50498", - "2a02:52a0::/32": "202017", - "2a06:9500::/45": "204028", - "2001:559:8468::/48": "22909", - "2001:559:85ec::/48": "33657", - "2402:800:51c5::/43": "7552", - "2604:e800::/32": "23376", - "2a01:ce82:4000::/32": "51964", - "2a02:26f7:be81::/46": "20940", - "2a06:f880::/29": "200719", - "2001:579:92f2::/39": "22773", - "2403:2c00:fffc::/46": "4058", - "2806:230:2038::/48": "265594", - "2a02:2090::/47": "48287", - "2001:559:8746::/48": "7922", - "2409:8070:1100::/36": "9808", - "2600:140f:bc01::/38": "20940", - "2607:fb10:5030::/44": "2906", - "2804:6154::/32": "269228", - "2a02:26f7:f68c::/48": "36183", - "2a02:2e02:8d40::/42": "12479", - "2001:678:c0c::/48": "15823", - "2001:48c0::/46": "14589", - "2408:84f3:de40::/39": "17816", - "2400:9700:121::/44": "24550", - "2408:8406:c00::/39": "4808", - "2804:7374::/32": "270916", - "2a02:5f00::/32": "19229", - "2a07:df00::/29": "41974", - "2a0f:c084::/32": "199669", - "2001:1248:a000::/48": "11172", - "2600:1406:36::/48": "20940", - "2a00:12a0::/32": "34123", - "2001:67c:2ae4::/48": "20572", - "2408:8256:359d::/46": "17623", - "2a0e:fd80::/29": "208722", - "2001:678:5cc::/48": "31149", - "2001:44b8:4067::/48": "4739", - "2401:1d80:1003::/48": "133530", - "2600:140a:2000::/48": "35994", - "2803:83a0::/48": "267745", - "2804:49dc::/32": "267205", - "2408:8459:a030::/41": "17622", - "240a:a066::/32": "142752", - "240e:983:1e09::/22": "4134", - "2605:a401:80a5::/43": "33363", - "2a02:a40::/32": "25248", - "2402:800:9647::/43": "7552", - "2404:0:8fff:100::/48": "131591", - "2803:c010:d::/46": "271799", - "2a01:488:bb07::/44": "20773", - "2a03:b8c0:17::/44": "137922", - "2001:559:13a::/48": "7016", - "2001:67c:2a68::/48": "198944", - "2409:8904:5ab0::/39": "24547", - "2605:1140:1::/48": "394142", - "2804:7ab4:200::/32": "271387", - "2a00:5884::/32": "204092", - "2a07:3500:19e8::/48": "38915", - "2401:f000:6::/48": "23838", - "2408:8256:317f::/48": "17816", - "2a02:26f7:c985::/46": "20940", - "2001:559:8742::/48": "33491", - "2001:1248:96ff::/39": "11172", - "240a:a736::/32": "144496", - "2600:250f::/32": "26801", - "2620:135:e000::/40": "2495", - "2408:8459:7e10::/42": "17623", - "2a02:26f7:ce81::/46": "20940", - "2a02:26f7:d484::/48": "36183", - "2a04:4e80::/47": "211400", - "2001:559:4a8::/48": "33657", - "2610:130:100::/40": "2698", - "2620:9f:12::/48": "3356", - "2620:100:9004::/47": "22843", - "2804:2cac:ddde::/34": "265234", - "2001:1360::/32": "52286", - "2407:a080::/32": "133480", - "2a09:6600::/29": "208861", - "2a0b:26c0::/29": "56800", - "2001:4c8:1094::/47": "15290", - "2620:75:a000::/48": "397799", - "2a01:c50f:2380::/36": "12479", - "2a02:2d8:1:7808::/64": "35277", - "2001:ee0:9440::/38": "45899", - "240a:6b::/32": "9605", - "2a01:3d8::/32": "12759", - "2a02:2d8:1:7809::/64": "9002", - "2400:6140::/32": "64006", - "240a:a2fb::/32": "143413", - "240e:44d:280::/41": "4134", - "2804:7bb4::/32": "271449", - "2a09:b240::/32": "21269", - "2001:918:ff73::/45": "8300", - "240a:ac1f::/32": "145753", - "2607:f7a8:42d::/39": "16657", - "2a00:1288:7d::/46": "10310", - "2a09:9180:fd::/48": "786", - "2a0b:1980::/29": "206529", - "2401:e380:8522::/47": "131091", - "2404:bf00:800::/40": "9303", - "2409:805e:100::/36": "9808", - "240a:af3a::/32": "146548", - "2a02:26f7:cc41::/46": "20940", - "2a02:2970::/32": "43847", - "2001:df3:da00::/48": "132134", - "2001:df0:230::/48": "56237", - "2804:1d30::/32": "264353", - "2804:22d0::/32": "264124", - "2a09:a700::/29": "209854", - "240e:3bf:5600::/34": "4134", - "2600:1406:200::/48": "35994", - "2606:2800:4a68::/46": "15133", - "2620:d2::/48": "25631", - "2a0e:8f02:2133::/44": "211722", - "2401:4900:4ce0::/44": "45609", - "2407:1e40:401::/39": "141732", - "2806:268:1300::/37": "13999", - "2001:1260:4::/48": "28535", - "2401:d800:2b30::/41": "7552", - "2404:2b40::/32": "24373", - "2804:71ec::/32": "270820", - "2001:559:44a::/48": "33659", - "2620:12d:5000::/47": "55128", - "2804:7560::/32": "271042", - "2403:9800:b018::/48": "4771", - "2620:109:c006::/48": "55163", - "2001:1260:f::/48": "28544", - "2402:ef0b:a000::/36": "24515", - "2607:9800::/32": "15085", - "2a06:9900::/29": "12552", - "2001:3e0::/34": "10013", - "2001:559:8798::/47": "7922", - "2804:71c::/32": "53080", - "2a02:23f0::/32": "20771", - "2c0f:f238::/32": "328032", - "2605:a401:87aa::/43": "33363", - "2804:a28::/32": "263026", - "2a01:548::/32": "9113", - "2a03:ef42::/33": "57218", - "2a02:26f7:f648::/48": "36183", - "2408:8456:9240::/37": "17816", - "2408:8456:ec40::/40": "17816", - "2408:8459:cb30::/41": "17622", - "2600:6c39:1::/44": "20115", - "2803:e800::/32": "13424", - "2806:260:4200::/39": "13999", - "2a02:26f7:e7d1::/42": "20940", - "2001:559:c362::/48": "33287", - "240a:a865::/32": "144799", - "2800:160:1e79::/40": "14259", - "2804:3ab4::/33": "266104", - "2804:7a38::/32": "271356", - "2a00:da60::/32": "25581", - "2408:8456:9c10::/42": "134543", - "2600:6c7f:90d0::/48": "20115", - "2606:6c00:2000::/48": "393560", - "2800:310:12::/38": "18678", - "2a0e:b4c0::/29": "208420", - "2a02:26f7:da40::/48": "36183", - "2001:559:5b4::/48": "33662", - "2400:b5c0::/32": "9891", - "240e:3b4:dc00::/34": "4134", - "2607:fb58:2002::/36": "36086", - "2620:113:1005::/46": "15224", - "2001:559:8118::/48": "33659", - "2a0a:e5c1:100::/38": "207996", - "240a:ab77::/32": "145585", - "240e:379:ac00::/30": "4134", - "2620:74:7b::/45": "7342", - "2a00:cb8:44::/48": "15695", - "2a01:9420::/29": "62099", - "2a05:b880::/29": "44746", - "2001:400:b20::/48": "45", - "2001:56b:500d::/36": "852", - "2001:16b8:8f00::/33": "8881", - "240a:a833::/32": "144749", - "2620:11b:4016::/47": "47870", - "2600:140f:9c00::/48": "9498", - "2a0e:b107:1200::/47": "142130", - "2402:800:5563::/43": "7552", - "2402:2700:100::/33": "132061", - "2a0f:5701:3517::/44": "205593", - "2001:1248:971b::/42": "11172", - "2408:8459:5c50::/38": "17816", - "2804:2484::/32": "28258", - "2a02:26f0:118::/48": "20940", - "2a02:26f7:c94e::/42": "20940", - "2a0c:c500::/32": "49798", - "2a0e:bc0::/29": "41731", - "2001:559:87a7::/48": "7922", - "2408:8957:7700::/40": "17816", - "240e:473:3e00::/41": "140485", - "2620:11b:e0f2::/44": "3356", - "2a02:26f7:f345::/46": "20940", - "2a0b:c1c0::/29": "42580", - "2c0f:ed00:351::/48": "328442", - "2001:8a8::/32": "15623", - "2400:8b00:c80::/42": "45727", - "2402:b7c0::/32": "63774", - "2607:f060:1000::/46": "17017", - "2804:bcc::/32": "52830", - "2a02:1620:8004::/48": "4637", - "2a0b:33c0:1::/46": "57395", - "2c0f:fb20::/32": "36925", - "2401:d800:9d60::/40": "7552", - "2604:da00::/36": "31745", - "2606:a000:4000::/32": "11426", - "2607:f208:8::/48": "398107", - "2620:1f8:f046::/48": "40443", - "2804:11bc:4000::/38": "263435", - "2a03:2800::/29": "12488", - "240a:a1f2::/32": "143148", - "2620:be:4000::/48": "394068", - "2800:160:1650::/45": "14259", - "2803:6de0::/32": "64126", - "2803:d100:e380::/41": "52362", - "2001:559:283::/48": "33662", - "2001:559:8015::/44": "7922", - "2001:dcc:702::/47": "23600", - "2602:feda:a2::/48": "46997", - "2806:230:6026::/48": "265594", - "2a0e:8f02:f013::/48": "212279", - "2001:218::/34": "2914", - "2401:ff80:1491::/46": "133954", - "2a00:1f00::/32": "50295", - "2a03:47c0:1081::/34": "21277", - "240e:109:8045::/48": "58461", - "2001:67c:2d34::/48": "207583", - "2001:1248:977f::/48": "11172", - "2409:8924:9700::/36": "56046", - "2a0c:95c0::/29": "207509", - "2001:418:8004::/47": "7019", - "2600:1480:6100::/37": "20940", - "2600:e000:8000::/38": "22995", - "2620:11a:a02f::/43": "43515", - "2804:1360:80::/32": "263531", - "2405:1c0:6761::/45": "135062", - "2607:f7a8:a0b::/45": "46887", - "2620:12b:4000::/40": "395568", - "2001:4878:b007::/44": "12222", - "2402:c200::/32": "9374", - "2605:1540::/32": "22497", - "2804:330c::/32": "265113", - "240a:ae10::/32": "146250", - "2602:fd15::/36": "398465", - "2602:ff70::/36": "394367", - "2620:123:2085::/48": "30103", - "2603:c023:c000::/35": "31898", - "2604:d600:1b08::/47": "32098", - "2605:1cc0::/32": "7029", - "2801:80::/48": "28646", - "2804:eec::/35": "28226", - "2a0a:c380::/29": "50308", - "2600:5800:f628::/39": "11426", - "2001:388:406d::/40": "7575", - "2001:559:83fc::/48": "7015", - "2800:bf0:81c0::/47": "52257", - "2a01:9640::/32": "47727", - "240a:a91a::/32": "144980", - "2001:678:efc::/48": "212135", - "2409:8c34:1000::/33": "9808", - "240a:a2d1::/32": "143371", - "2606:7000::/32": "46435", - "2804:c00:ac00::/33": "52655", - "2a00:fb40::/32": "198792", - "2a03:54a0::/32": "49100", - "2402:800:5663::/43": "7552", - "240a:aa4e::/32": "145288", - "240a:ad1b::/32": "146005", - "240a:a952::/32": "145036", - "2804:6908:6000::/35": "270244", - "2a01:ce8d:6000::/32": "51964", - "2a02:26f7:f6cd::/43": "20940", - "2001:559:8427::/48": "7725", - "2a01:c50f:600::/36": "12479", - "2620:5f:4000::/48": "17378", - "2403:7500::/32": "38566", - "2804:49c8::/32": "267203", - "2a02:2430:4::/48": "39869", - "2a02:26f7:d211::/42": "20940", - "2a0e:fd45:2a00::/44": "213253", - "240a:a9ab::/32": "145125", - "2804:5cbc:fa40::/37": "268927", - "2001:550:560b::/39": "174", - "2001:559:e9::/48": "13367", - "2001:ac8:53::/42": "9009", - "2001:4c38::/29": "15435", - "2600:1400:8001::/35": "20940", - "2a02:26f7:c34b::/48": "20940", - "2400:adc2:900::/38": "9541", - "2401:4900:4790::/42": "45609", - "2409:8004:5::/36": "24547", - "2a00:1d58:ae00::/39": "47524", - "2a02:26f7:e548::/48": "36183", - "2001:559:3aa::/48": "7015", - "2404:1280:1::/48": "393398", - "240e:44d:5800::/41": "140345", - "2620:74:14::/48": "30060", - "2804:235c:c00::/32": "52747", - "2a04:43c0::/29": "12564", - "2001:559:86af::/48": "33491", - "2404:e801:101b::/45": "55430", - "2800:160:204c::/47": "14259", - "2804:429c::/32": "267512", - "2806:230:3014::/48": "265594", - "2a00:c200::/32": "39512", - "2a03:720:19::/32": "57073", - "2406:da12::/36": "16509", - "2600:1000:d000::/43": "6167", - "2801:10:f000::/48": "3816", - "2a02:26f7:ce88::/48": "36183", - "2001:559:c013::/48": "33491", - "2001:67c:1ba4::/48": "59586", - "2001:67c:28fc::/48": "48635", - "2001:1248:a02f::/48": "11172", - "2408:8026:b0::/41": "17621", - "2409:40f0:1000::/32": "55836", - "2607:2680::/32": "394969", - "2a0a:ca00::/32": "207038", - "2001:559:143::/48": "7015", - "2001:df0:75::/48": "23767", - "2402:4e00:101::/32": "45090", - "240a:a387::/32": "143553", - "2620:12e:4001::/48": "36741", - "2800:160:1bc0::/44": "14259", - "2a0a:441:1::/48": "47692", - "2001:559:399::/48": "13367", - "2804:1ab4::/32": "61877", - "2409:8a04:e300::/31": "24547", - "2607:fd28:a006::/48": "3725", - "2a0e:1580::/29": "208942", - "2001:bf7::/39": "44194", - "2804:7858::/33": "271236", - "2a02:26f7:f8c9::/46": "20940", - "2402:4000:2290::/32": "18001", - "2620:10b:b000::/44": "11807", - "2620:1f0::/32": "1798", - "2804:7f48::/32": "271678", - "2001:4290::/32": "23889", - "2804:3168::/32": "265013", - "2a05:4140:400::/47": "213388", - "2001:1250:d000::/44": "22894", - "2001:4998:150::/44": "10310", - "2605:edc0::/32": "398639", - "2607:f380:a50::/44": "2152", - "2607:f518:101::/46": "46887", - "2804:e94:43::/44": "262468", - "2a02:1388:3000::/33": "29247", - "2001:1af0:9001::/43": "13046", - "2401:47c0:1900::/38": "41095", - "2001:678:cf4::/48": "213400", - "240a:aa0b::/32": "145221", - "2603:c0f0:1000::/43": "6142", - "2804:7c70::/32": "271496", - "2806:2f0:12e4::/43": "17072", - "2a02:cf40::/29": "62121", - "2001:559:8362::/48": "33491", - "2001:67c:2970::/48": "211722", - "2001:c20:8409::/48": "9255", - "2409:8904:e140::/42": "24547", - "2a03:2380:6::/32": "198818", - "2001:460:7c::/40": "3561", - "2001:559:52c::/48": "7016", - "2001:559:80f2::/48": "7922", - "2001:559:85f6::/48": "7725", - "2401:d800:5540::/42": "7552", - "2602:ff98:340::/36": "63447", - "2a02:47e0::/29": "201984", - "2a03:2880:f05d::/46": "32934", - "2a09:cfc0::/29": "42926", - "2c0f:fd48::/32": "37329", - "2001:253:135::/48": "142101", - "2001:500:12::/48": "5927", - "2401:cf80:600e::/41": "55303", - "2407:c600:1::/48": "56140", - "2606:2800:20c::/46": "15133", - "2804:1040:fb00::/37": "263626", - "2a0d:d6c2::/29": "200350", - "2402:47c0::/39": "137280", - "2001:559:73d::/48": "7015", - "2001:df0:8380::/48": "131401", - "2001:4998:1c0::/48": "7280", - "2800:bf0:80e2::/48": "27947", - "2804:2ac0::/32": "264092", - "2806:109f:c::/43": "8151", - "2a01:6140::/32": "51164", - "2409:8535::/22": "9808", - "2a01:b880::/32": "1257", - "2a03:2f40::/32": "3330", - "2a06:9e00::/29": "57795", - "2001:559:c114::/48": "7016", - "2001:4de0:4000::/45": "33438", - "2401:b0c0:b000::/48": "136941", - "2001:559:850b::/48": "7015", - "2407:1000::/32": "24005", - "2409:8915:7600::/39": "56044", - "2804:38ac::/32": "266493", - "2804:3990::/32": "266036", - "2001:678:e38::/48": "212651", - "240a:aaef::/32": "145449", - "2804:7e4::/32": "52865", - "2a00:aea0:6500::/40": "12678", - "2a0e:b107:1477::/48": "142164", - "2001:1248:9c28::/43": "11172", - "2401:2400::/44": "38496", - "2401:fd40::/32": "56301", - "2403:1540::/48": "45671", - "240a:acff::/32": "145977", - "240a:ad26::/32": "146016", - "2001:1248:986d::/43": "11172", - "2001:4228::/32": "15706", - "2001:b400:f410::/45": "3462", - "2804:6dc0::/32": "270553", - "2001:19f0:ccc::/47": "20473", - "2400:9380:83c0::/44": "136167", - "2402:5300:4040::/39": "45903", - "2406:cf00::/48": "4808", - "2407:b000:4012::/32": "17819", - "2408:8256:3177::/44": "17623", - "240a:ae30::/32": "146282", - "2a03:75a0::/32": "31736", - "2a0c:b807::/32": "204725", - "240a:a201::/32": "143163", - "2600:1fa0:4080::/42": "16509", - "2a05:81c0::/29": "2875", - "2a0a:8d80::/48": "44094", - "2001:df0:66::/48": "45894", - "2605:3380:4147::/44": "12025", - "2606:f100::/32": "3300", - "2620:149:a1e::/48": "6185", - "2804:174::/32": "53152", - "2a0a:ad00:9a::/48": "42352", - "2001:500:80::/48": "27299", - "2001:559:1f5::/46": "33652", - "2401:d800:e000::/35": "7552", - "2403:2c00:7::102/63": "4058", - "2409:8051:1900::/37": "9808", - "240a:ab91::/32": "145611", - "2804:2b6c::/32": "262794", - "2a0c:1ec0::/29": "60341", - "240a:a8f9::/32": "144947", - "2600:1003:a810::/37": "22394", - "2600:1014:a000::/43": "6167", - "2804:204:311::/45": "28186", - "2804:3df8::/46": "266566", - "2804:54fc::/32": "268682", - "2a09:8440::/29": "41918", - "2407:3640::/32": "141995", - "2001:df0:22b::/48": "38574", - "2604:bc80:8000::/33": "29066", - "2a0a:ec02:201::/46": "42692", - "2a10:7300::/29": "398559", - "2001:559:85f3::/45": "33651", - "2408:8459:a850::/38": "17816", - "2409:8c4c::/36": "9808", - "2804:43b0::/32": "267584", - "2a0f:de00::/29": "208253", - "2a0f:eb80:2::/44": "47267", - "2a0e:3200::/29": "12843", - "2001:559:358::/48": "33651", - "2001:559:860c::/47": "7922", - "2001:eb0:104::/32": "9584", - "240a:af46::/32": "146560", - "2604:69c0::/47": "18439", - "2a00:9780::/32": "50928", - "2a02:2698:3000::/38": "50544", - "2800:160:12c4::/44": "14259", - "2804:e00:a000::/33": "11419", - "2804:52a4::/32": "268531", - "2001:559:47::/48": "33659", - "2400:9380:8ac0::/44": "136167", - "2603:c0f8:2020::/39": "20054", - "2a03:6180::/32": "41741", - "2001:559:c135::/48": "33651", - "2408:84f3:3440::/44": "17623", - "240a:ac07::/32": "145729", - "2602:800:1006::/44": "16970", - "2804:269c:fe52::/47": "47065", - "2a03:5de0::/32": "57676", - "2001:559:c0bf::/48": "33659", - "2600:140f:d801::/38": "20940", - "2601::/20": "7922", - "2a0c:8080::/32": "204772", - "2406:1440:1101::/48": "7630", - "2a02:25e0:f00::/40": "41691", - "2001:d10:9800::/34": "4787", - "2408:8459:e430::/41": "17622", - "2606:4900::/32": "13765", - "2a00:6920:1000::/40": "42020", - "2a02:26f7:fa05::/46": "20940", - "2001:1b70:b1::/48": "8147", - "2001:4801::/32": "19994", - "240a:a6db::/32": "144405", - "2607:9b80:a20::/40": "46558", - "2803:2c00::/32": "262231", - "240a:a09b::/32": "142805", - "240e:3b2:7a00::/32": "140313", - "2610:20:8040::/44": "20033", - "2001:559:8569::/48": "7922", - "2001:4490:3800::/42": "9829", - "2806:230:2000::/48": "265594", - "2001:67c:18c0::/48": "62311", - "2600:1005:b0f0::/39": "22394", - "2801:0:140::/48": "52314", - "2804:14c:3ba7::/41": "28573", - "2a00:7b00:f900::/37": "12338", - "2001:67c:1378::/48": "56823", - "2001:67c:2f7c::/48": "24605", - "2402:1200:11::/39": "24523", - "2600:9000:219d::/46": "16509", - "2804:14c:ce00::/40": "28573", - "2a02:26f7:d189::/42": "20940", - "2a09:9180:ff::/48": "786", - "2804:29b4::/32": "264030", - "2001:559:298::/48": "33652", - "2001:1248:5635::/46": "11172", - "240e:438:6220::/43": "140647", - "2605:bfc0:e000::/35": "36048", - "2607:fda8:5::/35": "6128", - "2804:db0:184::/32": "52862", - "2001:579:5a5c::/42": "22773", - "2408:8956:8500::/40": "17816", - "2804:10e0:2000::/38": "263653", - "2a02:ff0:2fa::/47": "12735", - "2a04:2e80:1::/48": "56740", - "2001:67c:2800::/48": "57957", - "2401:d800:b740::/42": "7552", - "2402:800:4303::/40": "7552", - "2408:80ea:64c0::/38": "17816", - "2607:f570::/32": "13326", - "2a02:26f0:b6::/44": "20940", - "2001:18c8:600::/40": "8015", - "2607:f368:f00::/40": "46846", - "2001:df7:3b80::/48": "142627", - "240a:ac14::/32": "145742", - "2600:380:7480::/38": "20057", - "2607:f2d8::/41": "18450", - "2a0e:bbc0:8001::/48": "11251", - "2001:388:3049::/43": "7575", - "2403:0:11d::/38": "4755", - "2403:8400::/48": "17917", - "2605:4a40::/36": "13786", - "2605:8300:2::/48": "25645", - "2a10:4b40::/29": "210107", - "2620:83:a000::/48": "394191", - "2806:230:3007::/48": "11888", - "2001:1938:4003::/45": "12989", - "240e:7:4800::/37": "4134", - "2602:fcce:f2::/39": "399200", - "2806:303::/32": "21623", - "2c0f:f970::/32": "328471", - "2001:559:8234::/48": "33656", - "240a:a666::/32": "144288", - "2806:230:6010::/48": "265594", - "2408:8459:ba50::/37": "17816", - "2409:8924:900::/38": "56046", - "240e:c0:2000::/30": "4134", - "2a01:7220::/32": "62179", - "2a02:26f7:d7c4::/48": "36183", - "2001:67c:1548::/48": "200693", - "2001:1248:5662::/45": "11172", - "2620:10d:9004::/48": "25993", - "2804:48b8::/32": "267140", - "2804:6014:8000::/33": "269144", - "2a0d:7bc0::/29": "40970", - "2001:67c:14d::/48": "21083", - "2600:1480:580e::/37": "20940", - "2602:fcf5::/36": "14058", - "2a02:26f7:e709::/42": "20940", - "2001:1278::/44": "18734", - "2602:ffc0::/36": "11080", - "2800:484:b00::/40": "14080", - "2804:214:8498::/39": "26615", - "2a01:358:8011::/33": "9121", - "2a01:6780:2::/48": "24679", - "2a00:1c90::/32": "29486", - "2401:d800:5090::/42": "7552", - "2403:ec00:38::/47": "17806", - "2405:1c0:6441::/46": "135062", - "240e:982:7000::/40": "134238", - "2600:1a0e:7bf::/36": "46650", - "2600:40ff:fc00::/48": "7046", - "2620:121:8::/45": "55219", - "2a02:128:9::/48": "50685", - "2a0c:b641:610::/47": "208505", - "2401:3bc0:c::/46": "137409", - "2405:f080:9ff::/48": "141180", - "2409:8060:1100::/36": "9808", - "2602:ffc5:109::/48": "7489", - "2a01:8100:1::/48": "203461", - "2400:6280:20::/48": "132876", - "2409:8c44:b00::/48": "9808", - "240a:adee::/32": "146216", - "2806:230:204b::/48": "11888", - "2a0c:6200::/29": "48655", - "2001:678:57c::/48": "42239", - "2001:fd8:b1a0::/44": "132199", - "2608:4121:2::/48": "27065", - "240b:4003:1bf::/48": "45102", - "2600:140b:5400::/48": "31109", - "2605:dbc0::/32": "397880", - "2804:3100::/32": "264986", - "2a0e:69c0::/48": "39862", - "2401:d800:9d90::/42": "7552", - "2402:800:f2f0::/39": "7552", - "2a00:10e8:3::/29": "44574", - "2001:df0:e9::/48": "55680", - "2605:1080:0:ffce::/63": "23367", - "2a0f:b100:200::/40": "201281", - "2001:d58::/32": "9416", - "2804:279c::/32": "263913", - "2804:5268::/39": "268516", - "2401:7c00:2000::/36": "132870", - "2a02:750::/44": "42708", - "2a07:e7c0:1000::/48": "201076", - "2001:4888:8050::/46": "22394", - "2402:d000:1069::/45": "9329", - "2602:fc6a:200::/48": "399747", - "2607:6b80:66::/48": "63213", - "2a0f:d9c0::/29": "205544", - "2001:3c8:1010::/47": "4621", - "2602:fed2:731c::/48": "20473", - "2620:104:2021::/46": "40185", - "2a0e:8f00:e000::/36": "42847", - "2001:df4:db00::/48": "134884", - "2604:df40::/32": "394991", - "2a00:a7a0:1000::/48": "62243", - "2a02:2880::/32": "28886", - "2402:3a80:c043::/44": "38266", - "2406:e000:393::/36": "23655", - "240e:5f:6000::/48": "134773", - "2a06:1287:2900::/47": "207150", - "2605:3b00::/36": "36146", - "2605:b240::/48": "13820", - "2405:1c0:6311::/45": "135062", - "2409:8730:8000::/33": "9808", - "2a06:fdc0::/32": "34971", - "2001:559:1f1::/48": "7015", - "2001:559:c38b::/48": "7922", - "2001:df3:8800::/48": "36351", - "2600:370f:20e3::/39": "32261", - "2001:510:305::/32": "376", - "2620:129:9001:51::/48": "13767", - "2804:1cf0::/32": "61684", - "2a00:c320::/32": "42263", - "2001:dd8:5::/48": "55439", - "240a:adaa::/32": "146148", - "2603:c023::/35": "31898", - "2a02:2698:1c00::/38": "34590", - "2a03:f80:ad15::/48": "57169", - "2001:559:728::/48": "7922", - "2001:559:c227::/48": "21508", - "2001:ee0:f000::/40": "45899", - "2402:49c0::/32": "137385", - "2405:1a80::/32": "18283", - "2804:796c::/32": "271304", - "2a02:ff00::/29": "60475", - "2a07:e640::/29": "2613", - "2a0f:9207:1::/42": "45009", - "2620:12d:4000::/44": "53988", - "2a07:9c0::/29": "203328", - "2403:5800:4::/33": "4764", - "2001:67c:1990::/48": "207077", - "240a:a33e::/32": "143480", - "2606:2680:a000::/48": "7138", - "2804:3b34:1106::/34": "266135", - "2a0b:4340:60::/44": "205603", - "2406:cc40::/32": "134236", - "2a02:2698:8000::/44": "41682", - "2001:559:c04c::/47": "7015", - "2803:12a0::/32": "266855", - "2a05:5a42::/32": "8943", - "2c0f:f850:dc06::/34": "327979", - "2001:470:f7::/48": "6939", - "2400:51c0::/32": "133073", - "240e:5e:2101::/35": "4134", - "2600:1417:c000::/48": "24319", - "2800:bf0::/44": "52257", - "2a01:7c00::/43": "52075", - "2a10:4e80::/29": "203012", - "2001:559:8439::/46": "33667", - "2408:8207:19d0::/32": "4808", - "2607:fc58:1:18::/64": "13536", - "2607:f6f0:4002::/45": "29884", - "2806:260:1012::/47": "28481", - "2400:cb00:298::/47": "13335", - "2406:9dc0:10::/44": "207268", - "2602:fdce::/36": "397617", - "2a03:22c0::/32": "199551", - "2607:fcd0:fa80:210c::/62": "8100", - "2405:9200:3100::/41": "131596", - "2409:8924:8b00::/37": "56046", - "2a00:ce0::/32": "8553", - "2001:678:d08::/48": "213376", - "2001:67c:554::/48": "12525", - "2a0f:5701:3200::/37": "206499", - "2001:559:810c::/48": "7922", - "2607:5980::/32": "393573", - "2804:2d90:2200::/32": "52682", - "2001:559:810d::/48": "21508", - "2401:c900:1f00::/34": "36351", - "240a:af8c::/32": "146630", - "2600:100a:f110::/36": "22394", - "2605:f440:54::/33": "54874", - "2607:f148:6000::/47": "11734", - "2800:160:1321::/44": "14259", - "2a00:6d47::/36": "205727", - "2a00:f520::/32": "29551", - "2a05:b400::/32": "786", - "2001:559:4ac::/48": "22909", - "2a07:2440::/29": "42695", - "2a0d:7100:b::/48": "44167", - "2001:fd8:121::/46": "4775", - "240a:a2a4::/32": "143326", - "2800:484:b500::/38": "14080", - "2a01:7300::/32": "50031", - "240e:44d:3f80::/41": "4134", - "240e:44d:4a80::/41": "4134", - "2804:1b0::/36": "10429", - "2804:53dc::/32": "268611", - "2806:230:403e::/48": "265594", - "2a01:8840:ae::/43": "12041", - "2a02:26f7:f280::/48": "36183", - "2001:559:83ee::/48": "7922", - "2401:3cc0:701::/36": "137409", - "2409:8c28:35b1::/33": "56041", - "2606:4a00:1200::/32": "33154", - "2607:f6f0:208::/48": "27330", - "2620:107:904c::/48": "22787", - "2804:5130::/34": "268436", - "2804:6450::/32": "269420", - "2001:67c:2f68::/48": "207748", - "2402:800:3d8d::/43": "7552", - "2404:4a00::/48": "45629", - "240a:a823::/32": "144733", - "2600:1407:9800::/48": "35994", - "2803:2180:19::/45": "27941", - "2804:e6c:2000::/33": "262954", - "2a03:a0a1::/32": "202467", - "2a09:8e40::/33": "200735", - "2001:678:94::/48": "42", - "2600:140b:9c00::/48": "24319", - "2a02:26f7:e345::/46": "20940", - "2001:559:c2ba::/48": "7725", - "2001:df4:6280::/48": "45553", - "2001:4888:8010::/44": "22394", - "2607:a800:917::/48": "15695", - "2001:460:84::/44": "3561", - "2804:14d:58a1::/41": "28573", - "2a00:ce20::/29": "15600", - "2a02:26f7:e2c9::/42": "20940", - "2a03:5341:10::/44": "18666", - "2405:1500:61::/40": "58717", - "2804:78e0::/32": "271271", - "2a03:2880:f13b::/45": "32934", - "2408:8256:3a80::/48": "17816", - "2620:10a:9046::/48": "7018", - "2a00:11c0:77::/48": "42360", - "2a0a:7880:1ff::/48": "206677", - "2001:559:8632::/47": "33651", - "2406:daa0:4040::/44": "16509", - "2804:7444::/32": "270970", - "2a0b:3700::/47": "61317", - "2a0f:cc87:d000::/34": "208861", - "2001:b10:e000::/35": "13293", - "2001:df0:421::/48": "4826", - "2001:1248:70a2::/45": "11172", - "2400:e480:e::/32": "131588", - "2a01:6f0:200::/32": "42366", - "2a02:26f0:1800::/48": "34164", - "2605:9b00::/32": "32220", - "2610:a1:1024::/48": "397213", - "2a02:26f7:bdcd::/42": "20940", - "2a02:26f7:ec8d::/42": "20940", - "2001:4870:e00c::/31": "3549", - "240a:a0db::/32": "142869", - "2a03:4a81::/32": "20473", - "2a04:4280:100::/48": "43260", - "2001:559:6c::/47": "7922", - "2a0a:90c0:10c1::/48": "205080", - "2001:67c:1138::/48": "57288", - "240a:a8c7::/32": "144897", - "2602:fced::/36": "398992", - "2804:3858::/32": "266471", - "2804:3e70:f008::/36": "266596", - "2a01:9700:1398::/42": "8376", - "2001:550:6800:2::/38": "174", - "2001:559:95::/48": "7016", - "2001:67c:2664::/48": "42525", - "2405:7800::/32": "17689", - "2604:9000::/39": "19693", - "2800:b70:11::/48": "262191", - "2803:b320::/32": "266732", - "2801:80:400::/48": "263012", - "2806:2f0:9202::/41": "17072", - "2a00:9f00:b::/43": "29314", - "2a0b:2c40::/29": "205741", - "2a0e:3840:1::/48": "3170", - "2001:503:d2d::/48": "396566", - "2401:ad00::/32": "18125", - "240a:a916::/32": "144976", - "2804:4f8:a005::/44": "28263", - "2804:2fe8::/32": "264920", - "2a0c:28c0::/32": "206429", - "2a0d:22c0::/29": "209715", - "2801:1c8:5f0::/48": "19429", - "2a05:1d40::/30": "58239", - "2a06:83c0::/29": "15391", - "2602:800:c000::/38": "397695", - "2001:df5:900::/48": "136167", - "240e:3b4:d000::/36": "134772", - "2804:218:bef0::/33": "27715", - "2a00:1ed0::/32": "43541", - "2a0e:97c7:130::/44": "212996", - "2001:559:840d::/48": "33657", - "2001:1878:b00::/44": "5726", - "2408:8656:30f6::/44": "17623", - "2620:8d:c000::/48": "26365", - "2402:800:9739::/41": "7552", - "2804:14d:4081::/46": "28573", - "2804:7c8:2000::/33": "262323", - "2001:559:49c::/47": "7922", - "2001:c38:9014::/42": "9931", - "2401:d800:faa0::/41": "7552", - "2406:2000:ec::/46": "24506", - "240a:a7a8::/32": "144610", - "2001:67c:1314::/48": "15935", - "240e:6ba:1000::/34": "4134", - "2620:171:6a::/48": "715", - "2a00:1110::/29": "5483", - "2c0f:fe10::/32": "20294", - "2a07:59c6:ca01::/45": "205413", - "2402:800:518d::/43": "7552", - "2403:ad80:4c00::/38": "134835", - "240e:473:a950::/40": "4134", - "240e:979:5f00::/34": "4134", - "2800:160:147b::/40": "14259", - "2804:3318::/32": "265116", - "2a00:1538::/32": "44356", - "2a0f:ad40::/32": "41090", - "2001:ee0:3101::/43": "45899", - "2803:cae0:c000::/47": "270046", - "2a01:9b40::/32": "59554", - "2a07:ecc0::/29": "48399", - "2001:559:4e5::/48": "20214", - "2001:67c:778::/48": "50607", - "2001:1a68:c::/43": "15694", - "2804:2e84:ab::/32": "265350", - "2a02:560::/32": "13045", - "2a07:7a00::/29": "204064", - "2408:8256:318d::/43": "17623", - "2408:8456:ac10::/42": "134543", - "2800:e00:4000::/34": "27665", - "2804:2838::/38": "263948", - "240a:add8::/32": "146194", - "2801:1b:4800::/48": "269844", - "2a0f:f4c0::/32": "43380", - "2001:559:1af::/43": "7922", - "2806:230:100e::/48": "265594", - "2a06:f905::/36": "56630", - "2a10:c940:11::/48": "35277", - "2c0f:f130::/32": "37642", - "2001:559:35f::/48": "33652", - "240a:aa5a::/32": "145300", - "2800:b30::/31": "27740", - "2804:19c0::/32": "61816", - "2a02:26f7:d8c9::/42": "20940", - "2a0a:144:400::/48": "16509", - "2403:100:1000::/48": "56300", - "2409:8924:6300::/37": "56046", - "240a:ad72::/32": "146092", - "2620:111:d005::/48": "32908", - "2403:bb00:abcd::/48": "24528", - "240e:3bb:ec00::/35": "140314", - "240e:44d:4300::/41": "140345", - "2620:107:4008:b9dc::/64": "6461", - "2806:2f0:20e4::/43": "22884", - "2a01:b740:a1d::/48": "714", - "2a03:9f00::/32": "8676", - "2001:df1:e000::/48": "55666", - "2402:800:9c71::/40": "7552", - "2404:bd40:3::/48": "138005", - "2804:18:4830::/35": "26599", - "2804:47e8::/32": "263523", - "2804:48d8::/32": "267148", - "2001:678:810::/48": "1836", - "2001:67c:19f0::/48": "199771", - "2402:e280:2117::/44": "134674", - "2600:1015:b170::/33": "6167", - "2804:34:1004::/34": "28306", - "2a00:1680::/32": "31726", - "2001:1998:2000::/35": "3456", - "2001:42d0:b::/40": "33764", - "2404:f4c0:f9c0::/48": "142281", - "2605:aa40::/48": "395394", - "2a09:900::/46": "15576", - "2a0d:e4c0::/29": "208861", - "2001:559:877f::/40": "7922", - "2401:4900:3bc0::/42": "45609", - "2406:3c80::/46": "17747", - "2804:5d4::/46": "262545", - "2a02:6fa0::/32": "51935", - "2a0e:b107:d0::/44": "207968", - "240a:a63d::/32": "144247", - "2607:f740:e00a::/48": "36217", - "2a00:4800:210::/42": "13124", - "2a0b:2600::/29": "57878", - "2a0e:b107:270::/48": "207852", - "2a0c:9a40:1010::/45": "202479", - "2001:67c:25e8::/48": "34958", - "240a:ab05::/32": "145471", - "2605:c380::/32": "21713", - "2a02:26f7:c009::/46": "20940", - "2a03:5d40::/32": "20926", - "2a05:e201::/32": "60079", - "2a0a:27c0::/32": "47217", - "2001:df3:6600::/48": "132023", - "2600:14e0:8::/48": "33905", - "2a00:1c50:2002::/45": "30811", - "2a0b:4e00::/48": "207059", - "2405:1c0:6817::/42": "55303", - "240a:aca9::/32": "145891", - "2a0e:b107:ff0::/48": "42394", - "2404:3d00:4174::/44": "3573", - "2600:1488:a361::/40": "20940", - "2604:8e80::/34": "32505", - "2801:80:1e21::/48": "14026", - "2001:668:120::/48": "17035", - "2408:8456:440::/39": "17816", - "2804:20e0::/32": "264518", - "2a02:26f7:ec80::/48": "36183", - "2a0e:f800::/29": "38919", - "2607:f038:4001::/44": "21527", - "2607:f5a0::/45": "17048", - "2402:800:98b7::/41": "7552", - "240a:a6f1::/32": "144427", - "2800:160:142e::/43": "14259", - "2803:7200::/46": "27696", - "240a:a612::/32": "144204", - "240a:aa93::/32": "145357", - "2a0d:3841:1000::/48": "57629", - "2806:109f:4::/47": "8151", - "2406:e780:eb2::/48": "63677", - "240a:a0f1::/32": "142891", - "240a:ab00::/32": "145466", - "2607:f5b1::/32": "27411", - "2a02:26f7:e040::/48": "36183", - "2001:388:3059::/40": "7575", - "2a09:4c0:cc01::/30": "58057", - "2a0a:c200:2::/48": "16247", - "2001:43f8:14c0::/48": "328644", - "2408:8956:b800::/40": "17622", - "240e:108:1151::/44": "4134", - "2607:8300:3000::/36": "13876", - "2804:6f4c:4000::/34": "270651", - "2a02:26f0:d101::/38": "20940", - "2a03:2a00::/29": "15817", - "2603:c021:8000::/35": "31898", - "2610:20:5004::/48": "5744", - "2001:1900:23ad::/46": "202818", - "2409:8924:7100::/38": "56046", - "2605:8540::/32": "64281", - "2804:5c44::/32": "268898", - "2a10:2e41::/32": "213395", - "240a:ab68::/32": "145570", - "2600:1408:a401::/48": "20940", - "2804:8c:8::/33": "28216", - "2804:404c:1012::/32": "265950", - "2a0b:1306:9::/48": "133142", - "2001:559:4b8::/48": "33287", - "2408:840d:1a00::/42": "17621", - "2804:72ac::/32": "270868", - "2a02:158:c000::/39": "44946", - "2a05:2a80::/47": "200567", - "2408:8456:b210::/42": "134543", - "2804:1b38::/32": "61716", - "2804:3b2c::/32": "266133", - "2804:5954::/32": "268183", - "2a03:4d80::/32": "43323", - "2001:1ae0::/32": "8262", - "2400:9380:84c0::/44": "136167", - "2401:4900:3360::/44": "45609", - "2407:5200::/42": "55915", - "2600:40ff:ff90::/47": "1321", - "2602:feda:180::/48": "35251", - "2806:230:500e::/48": "265594", - "2a0e:6901:200::/39": "57695", - "2001:318::/32": "7522", - "2401:cd80:100::/37": "63920", - "2409:8d5d::/26": "9808", - "2607:f740:56::/47": "36236", - "2804:2430::/32": "264207", - "2a00:9540::/32": "49974", - "2a03:97e0::/32": "203673", - "240a:a8a9::/32": "144867", - "2001:1248:9840::/43": "11172", - "2804:533c::/32": "268571", - "2a06:e881:4300::/40": "204307", - "2a0c:8fc0::/32": "202401", - "2a0c:e642:10::/42": "211323", - "240a:af9a::/32": "146644", - "240a:a6e1::/32": "144411", - "2804:1080:c300::/34": "28287", - "2a04:a500:1337::/48": "20769", - "2a0e:b107:12f0::/47": "211722", - "2001:df5:7980::/48": "132513", - "2001:559:306::/48": "22909", - "2401:d800:b490::/42": "7552", - "2409:8914:c800::/31": "56044", - "2409:8c85:aa03::/48": "9808", - "240a:a224::/32": "143198", - "2800:160:140e::/42": "14259", - "2604:bc0:2::/48": "47869", - "2a0a:3507::/48": "57327", - "2804:1cd8:4::/32": "262691", - "2804:57a4::/32": "268077", - "2804:8070::/32": "271750", - "2a00:6901:5::/48": "20926", - "2a0d:5e00::/29": "25577", - "240a:a34b::/32": "143493", - "240a:ae6a::/32": "146340", - "2a02:dc00:200::/48": "15493", - "2001:16d8:59::/45": "16150", - "2001:4430:5310::/34": "17853", - "2a01:a320::/32": "49560", - "2001:67c:2ca0::/46": "50838", - "2a00:6920:d000::/40": "42003", - "2a02:26f7:e805::/46": "20940", - "2400:cb00:160::/46": "13335", - "2402:800:972b::/43": "7552", - "2407:b640:40::/47": "132046", - "2408:8956:9000::/40": "17622", - "2001:559:5ce::/48": "33287", - "2406:fd00:100::/40": "24459", - "2408:8459:9050::/38": "17816", - "240a:a16c::/32": "143014", - "2a00:ad87:1303::/48": "198573", - "2c0f:f800::/28": "37053", - "2001:fd8:31f0::/38": "4775", - "240e:3bf:6400::/35": "140312", - "2600:1480:b801::/37": "20940", - "2a03:3380::/46": "47169", - "2a05:adc2::/32": "206083", - "2001:df7:ce00::/48": "135905", - "2a0f:c400:ca::/48": "60781", - "2001:718::/32": "2852", - "2409:8a53:300::/37": "56047", - "2a02:2578:1309::/45": "51375", - "2a02:26f7:ba09::/42": "20940", - "2a01:111:5000::/32": "8075", - "2a01:a200::/32": "41811", - "2001:559:852b::/48": "20214", - "2406:f40::/32": "135697", - "2407:3e00:3000::/48": "9255", - "2408:822a:a800::/33": "4837", - "2800:160:1581::/44": "14259", - "240e:980:2a00::/40": "63835", - "2804:14c:b100::/40": "28573", - "2804:c64::/32": "52699", - "2806:250:8::/47": "28545", - "2a0c:36c2::/31": "9009", - "2001:4408:5::/39": "4758", - "2600:1000:b170::/40": "22394", - "2607:1d80::/32": "11287", - "2402:800:7880::/42": "7552", - "2804:a80:200::/35": "262293", - "2a03:f80:7::/48": "56630", - "2a04:4e40:2e30::/41": "54113", - "2001:559:c20f::/48": "33662", - "2a03:5a00:3f::/48": "197394", - "2a03:90c0:9990::/48": "199524", - "2a0d:1a40:faf::/48": "202313", - "2001:13c7:6019::/48": "52508", - "2610:58:3:aaab::/32": "111", - "2a0f:7880::/48": "47384", - "2409:8750:500::/38": "56047", - "2a01:af80::/32": "34785", - "2606:f480::/32": "54328", - "2607:f710:60::/48": "19624", - "2803:d100:e480::/42": "52362", - "2a05:5240::/30": "198722", - "2a0e:46c4:109::/48": "142598", - "2a0f:9300::/29": "198668", - "2a02:26f7:bb89::/42": "20940", - "2400:8500:3000::/48": "55907", - "2400:adc0:17::/48": "9541", - "2605:380:40::/48": "42473", - "2803:6900:1510::/48": "52423", - "2804:6c64::/32": "270465", - "2a00:e200:104::/48": "198127", - "2a01:75c0::/29": "199284", - "2a05:6200:72::/48": "25369", - "2001:67c:698::/48": "201820", - "2001:df6:2a80::/48": "135738", - "2400:4d40:257::/42": "134204", - "2602:fd23:a::/36": "33185", - "2804:7b18::/32": "271410", - "2806:2f0:320::/47": "22884", - "2001:559:78d::/48": "7015", - "240a:abb1::/32": "145643", - "2408:8459:3440::/38": "17816", - "2600:9000:209f::/48": "16509", - "2a00:1728:1c::/48": "44017", - "2a04:5d86::/31": "61310", - "2a0a:2c0::/48": "48648", - "2001:67c:2c18::/48": "59750", - "2a02:26f7:c888::/48": "36183", - "2402:800:3bfe::/37": "7552", - "240a:ac9c::/32": "145878", - "2600:6c3b:42a::/40": "20115", - "2001:678:f50::/48": "62350", - "2605:e740:300::/40": "174", - "2606:2800:600b::/48": "14153", - "2801:80:1e5a::/48": "14026", - "2804:1580::/32": "263391", - "2a0d:a2c0::/29": "60721", - "2001:df0:c180::/48": "139260", - "240e:5e:4004::/47": "58543", - "2804:318c:200::/34": "265023", - "2a02:5080:2000::/32": "51825", - "2a0c:9540::/32": "202516", - "2a0e:b107:1400::/44": "211350", - "2001:559:c17c::/47": "7922", - "2001:67c:218c::/48": "12986", - "2001:1388:5982::/45": "6147", - "2001:4998::/44": "10310", - "240a:af6e::/32": "146600", - "2a10:6500::/29": "398559", - "2409:8052:3002::/40": "56047", - "2a02:26f7:dc09::/46": "20940", - "2406:840:f660::/44": "209218", - "2408:8459:ee30::/41": "17622", - "2620:b8:4000::/48": "394151", - "2a10:db00::/32": "42609", - "2001:1520:300::/32": "8972", - "2610:b0:40cc::/43": "3573", - "2001:559:81ea::/48": "33659", - "2001:1248:a525::/44": "11172", - "2401:d800:78d0::/42": "7552", - "240a:a9f8::/32": "145202", - "2607:f558::/32": "33189", - "2603:c002:e10::/35": "31898", - "2804:2a8c::/32": "264078", - "2001:559:8511::/48": "7015", - "2001:5a0:3b06::/37": "6453", - "2401:1c00:6100::/35": "38809", - "2401:ff80:1103::/45": "133954", - "2403:9c00::/32": "18068", - "2001:559:c3e6::/48": "7015", - "240a:a600::/32": "144186", - "240e:981:b000::/39": "134420", - "2606:2800:5091::/48": "15133", - "2a00:1228:103::/32": "31148", - "2a02:26f7:e8c0::/48": "36183", - "2a0e:2c40::/43": "50581", - "2605:c540:c010::/44": "398378", - "2001:678:80::/48": "51955", - "2801:8e::/36": "11993", - "2803:f720::/32": "266764", - "2a00:10f8::/32": "3347", - "2a00:8620::/32": "200698", - "2a07:aa00:89::/29": "3549", - "2001:559:85f9::/48": "7015", - "2400:f640::/48": "18231", - "2620:171:48::/47": "42", - "2a00:4a00:3000::/33": "39356", - "2a02:c38::/32": "30764", - "2a02:26f0:a2::/47": "34164", - "2600:40f0:140::/44": "3369", - "2804:26d0::/32": "262454", - "2a02:26f7:e0c9::/46": "20940", - "2a02:26f7:f609::/46": "20940", - "2a03:9c0::/32": "28716", - "2a0c:fa40::/29": "61317", - "2001:b10:c000::/35": "8501", - "2408:840c:6c00::/40": "17621", - "2804:9d4::/35": "262996", - "2a02:26f7:e105::/46": "20940", - "2403:34c0::/32": "4787", - "2a02:2e02:9cf0::/39": "12479", - "2a04:3a60:4000::/34": "56467", - "2607:3380:1100::/38": "395766", - "2403:4e00:30a::/47": "45528", - "2403:5f40::/48": "9268", - "240a:ac65::/32": "145823", - "2804:13d0:1008::/32": "263297", - "2c0f:ed00:44::/48": "328442", - "2c0f:f6d0:a7::/41": "327687", - "2001:559:da::/48": "7922", - "2406:d500:2::/45": "136557", - "2600:140f:7400::/48": "9498", - "2600:6c3a:403::/42": "20115", - "2a03:700::/32": "35271", - "240e:64:a000::/35": "140317", - "2803:7d80:a001::/45": "11664", - "2804:ac0::/32": "28134", - "2a10:7cc0::/29": "209711", - "2a10:d500::/32": "174", - "2001:678:984::/48": "207910", - "2401:a880::/32": "133661", - "240e:980:2c00::/48": "4816", - "2a10:5c40::/29": "59441", - "2400:9380:96c0::/44": "136167", - "2402:b801:2d00::/35": "18371", - "2605:f080:200::/40": "62755", - "2a04:2dc0:18::/48": "211970", - "2a0b:c040::/31": "42237", - "2a05:91c2::/48": "57640", - "2404:4a00:7500:1::/36": "45629", - "240a:a671::/32": "144299", - "2600:1409:801::/35": "20940", - "2600:370f:51a0::/45": "32261", - "2a00:a0c0::/32": "34233", - "2a02:240::/44": "28812", - "2a03:2880:f070::/47": "32934", - "2001:67c:27a0::/48": "44404", - "2001:1b70:8600::/48": "395592", - "2401:4900:2080::/45": "45609", - "2600:370f:5245::/44": "32261", - "2a0f:100::/30": "3356", - "2001:4c48::/29": "5483", - "2400:9600:8800::/48": "4812", - "2800:160:2448::/45": "14259", - "2804:7554::/32": "271039", - "2a01:839::/25": "3209", - "2a0a:700::/29": "49720", - "2a0b:71c0:1::/48": "56583", - "2001:678:64::/48": "199670", - "240a:a5a9::/32": "144099", - "2620:d7:c000::/48": "394464", - "2806:230:601f::/48": "11888", - "2806:327::/32": "265573", - "2607:fe28:20e0::/33": "53347", - "2806:2f0:2141::/46": "22884", - "2a01:8840:e5::/48": "207266", - "2a02:1668::/32": "51088", - "240e:3b3:2800::/38": "4134", - "2602:fd9a:b::/36": "54613", - "2001:ee0:e700::/36": "45899", - "2605:6ac0:5000::/36": "12179", - "2804:7688::/32": "271118", - "2a03:f4c0::/32": "30781", - "2620:149:a28::/48": "6185", - "2803:17a0::/32": "267777", - "2806:230:2045::/48": "11888", - "2a06:aa87:ffff::/48": "49238", - "2a0e:97c5:794::/46": "20473", - "2c0f:f188:8::/32": "28683", - "2001:4e8::/32": "6327", - "2402:800:4400::/35": "7552", - "2620:0:1a10::/48": "159", - "2804:16d8:1a00::/40": "262729", - "2a02:26f7:fb88::/48": "36183", - "2001:559:82df::/48": "33491", - "2408:8456:4c40::/39": "17816", - "2800:580::/32": "27695", - "2604:6d00:2300::/48": "36223", - "2a07:6d80::/29": "59891", - "2a10:6540::/29": "212650", - "2001:468:26e2::/36": "11537", - "2403:8740:1::/48": "138202", - "2409:806b:1100::/36": "9808", - "2804:1b2:f000::/39": "10429", - "2804:20f4::/32": "264523", - "2a01:c840::/28": "15962", - "2a02:26f7:c34d::/43": "20940", - "2804:66c8::/33": "269582", - "2001:559:82c9::/48": "33657", - "2001:6d0:ffff::/48": "5568", - "2001:df1:6002::/48": "10021", - "2600:1402:9801::/34": "20940", - "2603:c0e0:2000::/39": "54253", - "2606:4280:4000::/36": "16696", - "2804:854:c::/32": "28368", - "2001:579:8b4::/41": "22773", - "2001:918:1000::/32": "3303", - "2804:248:4003::/45": "28598", - "2a09:5301:7220::/48": "207415", - "2a0e:46c4:2500::/40": "142039", - "240a:a507::/32": "143937", - "2a0b:b87:ffb5::/48": "211571", - "2409:8053:3800::/47": "56047", - "2607:fc90::/32": "12036", - "2001:550:a905::/44": "174", - "2804:ef4:5800::/34": "28642", - "2804:4050::/32": "262856", - "2c0f:fe08:14b::/32": "36914", - "2408:8459:8e10::/42": "17623", - "240a:af45::/32": "146559", - "2605:4300:5::/48": "53813", - "2607:f740:44::/48": "36236", - "2606:3380:4::/43": "53334", - "2606:4700:8dd0::/42": "13335", - "2620:11d:9002:100::/56": "33186", - "2a00:1728:1e::/47": "34224", - "2a0e:b107:1520::/48": "38173", - "2605:6400:40::/48": "53667", - "2620:11f:100c::/48": "7385", - "2a00:ff0:9999::/48": "12672", - "2a0e:97c5:578::/46": "20473", - "2001:559:c131::/48": "33491", - "2606:bf00::/32": "35891", - "2620:5a:6000::/48": "397088", - "2402:800:7c80::/42": "7552", - "240c:6:1::/46": "45275", - "2605:9780:20::/47": "36180", - "2800:160:1f1a::/45": "14259", - "2a02:26f7:d408::/48": "36183", - "2409:802f:2900::/46": "9808", - "240a:ac47::/32": "145793", - "240e:870:40::/44": "140486", - "2607:fcd0:fa80:2108::/62": "8100", - "2610:b0:4062::/43": "3573", - "2a07:dc00:1810::/42": "29997", - "2001:df4:7700::/46": "137176", - "2a0f:b6c0::/29": "207788", - "2001:559:c210::/48": "33659", - "2001:559:c31b::/48": "7016", - "240e:978:1500::/40": "131325", - "2a01:2000::/20": "3269", - "2a02:26f7:b8c1::/46": "20940", - "2a02:6900:8820::/48": "7160", - "2a03:d604::/31": "12727", - "2001:559:c31c::/48": "33659", - "2800:160:13c9::/45": "14259", - "2a0d:e380::/47": "204460", - "2001:559:394::/48": "33651", - "240a:a1bf::/32": "143097", - "2a00:5fc1::/32": "48324", - "2a01:bc60::/32": "1836", - "2a0a:54c1:5a::/30": "62240", - "2001:998:82::/48": "49762", - "2409:8b75::/28": "9808", - "240a:aff0::/32": "146730", - "2600:1fa0:10c0::/44": "16509", - "2620:cb:c000::/48": "393965", - "2804:7d4c::/32": "271552", - "2a02:2f8::/32": "12335", - "2001:dc7:cd1a::/48": "38283", - "2a0e:fd45:2b12::/48": "44103", - "2c0f:f3f8::/32": "327972", - "2001:df3:3d00::/48": "9304", - "2001:44b8:4054::/48": "7545", - "2404:ff80::/39": "64096", - "2405:cb00::/48": "55309", - "2408:8456:5840::/39": "17816", - "240a:a492::/32": "143820", - "2a02:ff0:200::/40": "12735", - "2401:9d40::/32": "59165", - "2603:c025::/35": "31898", - "2a04:5c85::/36": "200584", - "2a0e:3780:8150::/48": "206059", - "2a0f:4c00::/29": "8822", - "2001:b08:4::/48": "9162", - "2405:9800:c910::/48": "55488", - "2409:8070:100::/36": "9808", - "240a:a4ea::/32": "143908", - "2605:2600::/32": "19842", - "2804:7f7c::/32": "271691", - "2600:1100::/28": "7381", - "2804:7264::/32": "270849", - "2001:4c8:10ff::/39": "15290", - "240a:ae43::/32": "146301", - "2a04:e00:3::/48": "54103", - "2001:559:12c::/48": "7922", - "2409:8924:1d00::/38": "56046", - "2607:fb90:cb00::/37": "21928", - "2800:3d0::/32": "2688", - "2a04:5c85:2000::/36": "47936", - "2a0c:6880::/32": "204796", - "2a0f:e480::/29": "60262", - "2602:fef7:81::/36": "396192", - "2a00:f10:142::/42": "48635", - "2a0c:b641:90::/46": "210103", - "2404:e200:1::/46": "18353", - "2607:fa18::/32": "6315", - "2a01:358:5411::/36": "9121", - "2c0f:ef78:1::/48": "63293", - "2800:bf0:f::/43": "27947", - "2409:8021::/34": "9808", - "2803:1a00:410d::/43": "262186", - "2a02:b50:4013::/48": "393954", - "2001:559:8060::/48": "21508", - "2001:678:d0c::/48": "35273", - "2001:42d0:1500::/40": "33764", - "2804:1710::/32": "263120", - "2a02:ff0:1600::/40": "12735", - "2606:a300:3::/45": "35847", - "2001:559:563::/48": "13367", - "2001:4250::/32": "17400", - "2401:d800:5af0::/39": "7552", - "2404:c480::/32": "135328", - "2407:c080:7800::/44": "23724", - "2409:8904:8540::/38": "24547", - "2602:feda:7::/44": "46997", - "2401:4900:1c00::/46": "24560", - "2804:5f80::/32": "269104", - "2404:3200:4::/32": "17509", - "2800:160:182e::/41": "14259", - "240a:ae84::/32": "146366", - "2605:d480::/32": "3257", - "2800:68:41::/48": "27841", - "2a04:c41::/29": "61098", - "2a07:14c0:5000::/36": "59504", - "2a0a:f780::/29": "49191", - "2001:678:16c::/48": "44872", - "2401:d800:d2b0::/41": "7552", - "2403:88c0:b::/32": "138192", - "2408:8956:6100::/40": "17816", - "2a02:26f0:cc::/48": "34164", - "2a03:21c0::/32": "41722", - "2a04:e4c4:1::/45": "36692", - "2a02:ee80:407f::/40": "3573", - "2001:559:8560::/48": "7922", - "240a:ace5::/32": "145951", - "2620:18:c000::/48": "39287", - "2620:171:a00::/44": "42", - "2801:0:270::/48": "262212", - "2806:2f0:20a0::/48": "17072", - "2a02:26f7:fbc5::/46": "20940", - "2a03:2887:ff21::/48": "63293", - "2a03:fc80::/29": "15366", - "2a0e:2b80:101::/38": "28875", - "2a0f:3a00::/29": "8647", - "2c0f:ebd0:2200::/32": "328608", - "2c0f:f900::/32": "36864", - "2a0e:d080::/29": "15623", - "2406:b400:14::/47": "18209", - "240e:26c::/30": "4812", - "2603:c0f9:2000::/36": "20054", - "2606:2800:4065::/48": "15133", - "2800:160:2048::/46": "14259", - "2a02:2ae0::/32": "702", - "2602:fcce:904::/38": "399200", - "2607:f518:136::/41": "46887", - "2620:132:f0fb::/39": "394977", - "2804:57f8::/32": "268098", - "2402:6d00::/32": "55943", - "240e:108:2c::/48": "4816", - "2606:1980:10::/48": "54994", - "2a09:11c0:200::/44": "207613", - "2604:eb80::/32": "22418", - "2804:6d8c::/32": "270540", - "2a01:8a80::/32": "25496", - "2001:559:81f1::/48": "7015", - "2001:559:836b::/45": "7015", - "2600:1806:515::/48": "16552", - "2607:f750:1000::/40": "23473", - "2a01:7c80:8000::/33": "24877", - "2a02:26f7:eac4::/48": "36183", - "240a:ae25::/32": "146271", - "2801:18:6000::/48": "61496", - "2a02:26f7:f::/48": "20940", - "2a0f:1900:1000::/36": "209446", - "2400:cd00:1037::/48": "38293", - "2402:e280:2172::/40": "134674", - "2406:e040::/48": "140765", - "2a01:ba20::/32": "24931", - "2a07:2180::/32": "48579", - "2001:67c:17f4::/48": "1257", - "2001:43f8:360::/48": "328206", - "2a01:8840:1a::/45": "12041", - "240e:44d:3380::/41": "4134", - "2600:370f:75a8::/43": "32261", - "2603:fb48::/29": "40676", - "2800:350::/29": "11556", - "2803:2800:6000::/32": "52368", - "2804:4c90::/32": "267378", - "2a00:db60:2000::/48": "15224", - "2a07:b800::/29": "44066", - "2a0f:8900::/29": "47787", - "240e:966:8c00::/35": "4134", - "2604:77c0::/32": "21782", - "2620:149:a23::/45": "714", - "2801:16:f000::/48": "19429", - "2a02:3b8::/32": "16371", - "2001:559:8076::/48": "7922", - "2606:bc00:8ef0::/39": "19419", - "2001:67c:2ad4::/48": "61430", - "2402:2b40:8000::/36": "55967", - "2405:8180::/36": "135478", - "2409:8924:7700::/36": "56046", - "2403:f000:11::/46": "38220", - "2a0c:2f44::/30": "59829", - "2600:380:b380::/37": "20057", - "2801:1fc:24::/48": "27951", - "2804:36f8::/32": "266383", - "2a02:2010:2290::/45": "20978", - "2a02:2a90:130::/32": "702", - "2a06:6540:1440::/48": "8220", - "2a0a:1b07::/32": "51892", - "2606:4800::/32": "11430", - "2607:fb90:af00::/35": "21928", - "2a07:4900::/29": "50959", - "2a0a:d6c0:2157::/48": "211454", - "2001:df0:237::/48": "131460", - "2400:a040:a::/48": "137995", - "2409:8c30:1010::/39": "9808", - "2605:72c0:a::/48": "40401", - "2803:1320::/32": "27843", - "2a01:570:2::/32": "33941", - "2a03:5000::/32": "15854", - "2001:661:4000::/35": "2472", - "240a:a229::/32": "143203", - "240e:61:6000::/32": "4134", - "2600:6c38:e05::/44": "20115", - "2a02:26f7:e244::/48": "36183", - "2a0e:dc00::/32": "208653", - "2a0e:f180::/29": "63023", - "2001:559:c1d3::/48": "33657", - "2402:d840::/32": "134555", - "2606:2800:5130::/48": "15133", - "2620:13a:b001::/48": "54344", - "2800:160:24fc::/46": "14259", - "2a09:a440::/48": "205479", - "240a:a781::/32": "144571", - "2406:d00:bbbb::/48": "132165", - "2804:449c:200::/39": "267642", - "2a00:f940:1::/44": "197695", - "2408:8026:830::/32": "17621", - "2a0e:97c1:f0e::/47": "20473", - "2604:d600:608::/46": "32098", - "2606:5700::/32": "6580", - "2a02:26f7:d548::/48": "36183", - "2a07:3500:17f8::/48": "33915", - "2405:e440::/32": "132139", - "2600:1010:9f10::/34": "22394", - "2804:14c:7b8b::/41": "28573", - "2001:c10::/32": "7473", - "2404:e800:104::/31": "55430", - "2408:84f3:ae10::/42": "134543", - "2409:8087:300::/40": "9808", - "240e:473:b50::/40": "4134", - "2604:20c0:4000::/36": "40641", - "2a02:26f7:dc0c::/48": "36183", - "2600:1600::/24": "40788", - "2001:c38:900e::/47": "9931", - "2408:8459:1c30::/41": "17622", - "240a:a706::/32": "144448", - "240e:44d:1f80::/41": "4134", - "2804:771c::/32": "271156", - "2a02:c28::/29": "8681", - "2a02:26f7:f505::/46": "20940", - "2402:8100:21d0::/45": "45271", - "2408:8456:c00::/42": "17622", - "2600:141c:c001::/35": "20940", - "2602:fcf8::/36": "7018", - "2605:2100::/36": "14442", - "2607:cf03::/32": "32522", - "2401:d800:5650::/42": "7552", - "2404:dac0::/48": "140807", - "2600:1410:4001::/34": "20940", - "2606:c00:33::/45": "9505", - "2a00:7b60::/32": "49058", - "2a02:26f7:d745::/46": "20940", - "2001:559:8706::/47": "33287", - "2402:800:74a0::/39": "7552", - "2607:fb40::/32": "19008", - "2804:4d3c:1220::/36": "267420", - "2408:8456:3250::/39": "17816", - "240e:e1:9f00::/33": "4811", - "2001:67c:400::/48": "44233", - "2402:800:5e80::/42": "7552", - "2804:2e68::/32": "265344", - "2a02:26f7:e1c0::/48": "36183", - "2a0e:8f02:f014::/48": "212268", - "2001:559:40::/48": "7922", - "2401:4900:35f0::/38": "45609", - "240e:41:800::/34": "4134", - "2a02:a00:100a::/42": "15987", - "2409:8753:500::/38": "56047", - "2602:ffc5:104::/48": "44954", - "2804:446c::/32": "28369", - "2001:559:8300::/48": "33651", - "2001:16a2:400a::/43": "25019", - "2600:1402:801::/38": "20940", - "2607:f698::/32": "30176", - "2804:14c:d482::/43": "28573", - "2001:559:82c4::/48": "7922", - "2403:c00:c00::/46": "17488", - "2403:c200::/48": "9503", - "2001:559:205::/48": "20214", - "2408:8956:300::/40": "17816", - "2a03:5a00:14::/48": "59679", - "2a05:7dc2:3000::/33": "51324", - "2408:8459:a650::/36": "17816", - "2409:873c::/32": "24444", - "2c0e:2200::/33": "37457", - "2a02:ee80:2040::/33": "3573", - "2001:559:425::/48": "33659", - "2001:559:81d7::/44": "21508", - "2403:a200:a200::/33": "17428", - "240a:aac0::/32": "145402", - "2608:101:8::/48": "5974", - "2801:15:b000::/48": "266700", - "2a00:4100::/32": "12460", - "2409:8c15:2100::/37": "56044", - "2804:1ed0::/32": "262286", - "2804:6348::/32": "269351", - "2a02:cb80:2a40::/48": "43766", - "2a0a:bf80::/29": "49223", - "2408:8957:e200::/40": "17622", - "2803:3a80::/32": "23383", - "2804:110::/32": "28590", - "2402:800:62b7::/39": "7552", - "2610:b0:40d4::/47": "21433", - "2a06:1280:ae03::/40": "61138", - "240a:a410::/32": "143690", - "2806:217:602::/32": "28394", - "2402:800:5455::/42": "7552", - "240a:a6b9::/32": "144371", - "2607:5e80::/32": "13807", - "2804:42f8::/32": "267540", - "2804:7aa4:4100::/32": "271383", - "2a01:8160::/32": "44454", - "2a0c:b641:670::/44": "207536", - "2401:ce00::/32": "24139", - "2600:140f:4e01::/39": "20940", - "2a02:26f7:c704::/48": "36183", - "2402:800:5863::/43": "7552", - "240a:a6e2::/32": "144412", - "240a:a911::/32": "144971", - "2605:540::/32": "62640", - "2605:4c40:41::/39": "30081", - "2620:91:a000::/48": "32170", - "2620:115:c000::/46": "2635", - "2001:67c:24fc::/48": "57423", - "2408:80f1:50::/44": "17621", - "2409:8914:1300::/37": "56044", - "2608:c144:1::/48": "5927", - "2804:4c14:ba01::/39": "267348", - "2804:28b8::/32": "263976", - "2a02:e98::/32": "24641", - "2a0a:e202:8013::/45": "33438", - "2a0b:2900:6100::/38": "48582", - "240a:a37f::/32": "143545", - "2607:fdf0:5ea6::/44": "8008", - "2801:184:e::/47": "264817", - "2806:2f0:2064::/43": "22884", - "2a02:26f0:5701::/36": "20940", - "2001:4868::/40": "701", - "2406:6e00:109::/32": "17457", - "2408:8956:de00::/40": "17622", - "240a:abbc::/32": "145654", - "2804:870::/44": "52871", - "2804:584c::/32": "268120", - "2a04:4e40:7610::/44": "54113", - "2a02:26f7:f9c8::/48": "36183", - "2001:49f8:40a::/48": "14230", - "2404:a8:19::/48": "24514", - "240e:3b7:2200::/37": "136198", - "2600:1480:d801::/37": "20940", - "2600:9000:a104::/48": "16509", - "2800:be0:3e3::/45": "267848", - "2804:7590::/32": "271055", - "2a0a:90c0:108a::/48": "205080", - "2605:7c00::/32": "25668", - "2610:190::/38": "62", - "2804:1408::/33": "28635", - "2804:6ed4::/32": "270621", - "2806:230:302b::/48": "11888", - "2001:67c:253c::/48": "21080", - "2001:ab8::/29": "34177", - "2401:ff80:1189::/43": "133954", - "2406:e002::/36": "23655", - "2a0a:880::/48": "41524", - "2a02:26f0:9f01::/34": "20940", - "2a03:90c0:1a0::/41": "199524", - "2001:1b88::/47": "39477", - "2602:fe90::/38": "35913", - "2a09:f4c0::/32": "205718", - "2001:550:90b::/38": "174", - "2401:21c0::/32": "59362", - "240a:a0a2::/32": "142812", - "2600:1006:a100::/43": "6167", - "2a09:f1c0::/29": "52031", - "2a0c:b642:ace::/48": "208753", - "2001:2003::/32": "1759", - "2403:57c0::/32": "133815", - "2409:8008:d2::/45": "24547", - "2600:1007:a100::/44": "6167", - "2607:fc50:5000::/36": "36236", - "2a02:26f7:fa01::/46": "20940", - "2a0e:b107:1580::/48": "211013", - "2402:9500:8001::/33": "55720", - "240e:473:9e50::/39": "4134", - "2607:fa78::/32": "10430", - "2804:1c8c::/32": "28322", - "2a02:26f7:db49::/42": "20940", - "2a05:3580:f100::/38": "35807", - "2b0f:9ac0::/30": "62908", - "2001:67c:25ec::/48": "207394", - "240a:ae9e::/32": "146392", - "2a02:26f0:c4::/48": "34164", - "2a0c:e643:babe::/48": "213316", - "2a02:26f7:d885::/46": "20940", - "2001:559:80ab::/48": "33652", - "2409:8b63::/27": "9808", - "240a:a9bd::/32": "145143", - "2001:dd8:6::/48": "18368", - "2404:bf40:c081::/39": "139084", - "2406:3002:40::/50": "138345", - "2409:8c28:5e91::/39": "56041", - "2a01:42e0:1700::/32": "29046", - "2a0e:aa06:40f::/48": "209306", - "2001:678:5d0::/48": "204723", - "2804:6c2c::/32": "270450", - "2a02:26f7:47::/48": "20940", - "2001:559:c12a::/48": "33287", - "2803:d100:e3f0::/44": "52362", - "2804:628::/32": "53029", - "2804:556c::/32": "267934", - "2a01:8aa0::/32": "31122", - "2a02:2e02:1a0::/38": "12479", - "2001:c20:840a::/38": "3758", - "2001:df4:1780::/48": "38074", - "2001:4878:a246::/48": "12222", - "2407:b400::/32": "17924", - "2409:8914:b800::/39": "56044", - "2605:a900:9000::/48": "46887", - "2a02:26f7:b7::/48": "20940", - "2800:160:1857::/44": "14259", - "2804:10e8:52c0::/32": "263655", - "2806:230:2054::/48": "265594", - "2001:559:8609::/48": "7016", - "2a00:1128::/32": "21069", - "2001:559:297::/48": "33660", - "2001:67c:29dc::/48": "28940", - "2001:1248:873f::/41": "11172", - "2409:8c85:aa04::/48": "24547", - "2800:800:930::/48": "26611", - "2806:2f0:2480::/48": "17072", - "2409:8008:2100::/36": "24547", - "240a:ac67::/32": "145825", - "2804:e94:740::/40": "262468", - "2001:559:c15a::/48": "7725", - "2001:559:c177::/48": "33491", - "2400:cb00:60::/47": "13335", - "2604:940:30::/48": "40386", - "2605:a401:89f4::/44": "33363", - "2405:a000:20::/48": "134461", - "2408:8256:3b8b::/48": "17816", - "2a00:5940::/32": "207693", - "2400:b200:4100::/46": "45102", - "2406:2000:efa7::/43": "10310", - "2408:8956:5a00::/40": "17622", - "2606:2800:401c::/48": "14153", - "2803:9800:94c1::/46": "11664", - "2a03:d400::/42": "198913", - "2604:1040::/32": "18918", - "2605:6440:5004::/34": "396356", - "2620:101:200f::/43": "16417", - "2800:bf0:3008::/43": "27947", - "2a02:26f7:c9cd::/42": "20940", - "2a02:c647::/32": "61998", - "2001:559:82ff::/48": "7922", - "2001:67c:115c::/48": "31554", - "2408:8459:e50::/35": "17816", - "2804:1948::/32": "61784", - "2804:7460::/32": "270977", - "2001:1b70:4292::/48": "158", - "2a02:ed80::/29": "61303", - "2001:579:c5c0::/36": "22773", - "2600:1417:5f::/48": "38040", - "2a00:1f98::/32": "43557", - "2a09:e3c0::/29": "60843", - "2a0a:5080::/29": "49865", - "240a:ae0e::/32": "146248", - "2606:44c0::/32": "16851", - "2800:bf0:3004::/46": "52257", - "2804:1d80:8000::/36": "264374", - "2804:3b68::/32": "266147", - "2a01:afa0::/32": "47715", - "600:6001:110b::/48": "11351", - "2001:6d0:6d07::/48": "42385", - "2620:132:c000::/40": "11478", - "2607:3c00:6404::/47": "26380", - "240a:a697::/32": "144337", - "2600:1406:8c00::/48": "35994", - "2400:cb00:a300::/45": "13335", - "2406:a400::/32": "10024", - "2606:a600:4003::/36": "23005", - "2620:14:e000::/48": "54177", - "2a02:26f7:c005::/46": "20940", - "2001:df0:46::/48": "24287", - "2a0a:2786::/31": "206774", - "2406:2000:ff60::/44": "10880", - "2408:8456:b640::/36": "17816", - "240a:ab21::/32": "145499", - "2a07:e480:1::/48": "207465", - "2001:559:8654::/48": "33491", - "240a:a9a4::/32": "145118", - "2602:fed2:7127::/48": "212112", - "2605:da00::/32": "14935", - "2a0e:b107:14ff::/48": "398355", - "2001:559:c1b3::/48": "20214", - "2001:1248:9889::/43": "11172", - "2602:ffe1::/36": "11475", - "2801:80:150::/48": "28261", - "2001:4de0:4009::/39": "33438", - "2400:4fc0:1::/44": "134146", - "2401:e380:1001::/46": "131091", - "2404:f300::/43": "58463", - "2405:1c0:6483::/39": "55303", - "2409:8904:d240::/42": "24547", - "2800:bf0:2441::/38": "27947", - "2804:1138::/32": "262726", - "2804:312c::/32": "264998", - "2a06:3f00::/29": "62163", - "2620:121:5081::/46": "16509", - "2a0a:7600::/29": "207096", - "2804:7edc::/32": "271652", - "2a02:7040:ff00::/47": "203501", - "2a03:d9c0:1000::/48": "3214", - "2001:559:53e::/48": "33651", - "2402:800:3301::/44": "7552", - "2407:19c0::/36": "141519", - "240e:966:c600::/36": "4134", - "2806:230:2017::/48": "11888", - "2001:559:3a1::/48": "33657", - "2001:559:8572::/48": "7016", - "2401:d800:57f0::/36": "7552", - "2600:6c38:8a8::/43": "20115", - "2804:7e14::/32": "271601", - "2a0b:3c40:15::/46": "208258", - "2001:67c:24d0::/48": "51316", - "240a:a540::/32": "143994", - "2605:3380:d000::/36": "395174", - "2620:13a:2000::/40": "1970", - "2804:29b0:c00::/38": "61577", - "2a04:9680::/29": "20830", - "2001:559:846b::/48": "22909", - "2600:1000:b0e2::/43": "22394", - "2801:80:17c1::/42": "61580", - "2a02:2668:7900::/32": "16345", - "2a03:59e0::/32": "31736", - "2001:4530:4::/32": "9433", - "2620:171:3d::/46": "715", - "2804:544::/32": "262505", - "2a02:26f7:d201::/46": "20940", - "2804:229c::/32": "264111", - "2a01:380::/33": "13127", - "2a02:f340::/29": "8767", - "2001:cf0::/32": "9848", - "2001:44b8:309b::/48": "7545", - "2400:cb00:a340::/46": "13335", - "2407:8b00:20c0::/38": "64073", - "2604:b440::/47": "19738", - "2a00:16e8::/32": "24634", - "2a07:c000::/29": "202551", - "2804:38d8::/32": "266505", - "2001:559:2bf::/48": "33667", - "2404:4a00:6a00:1::/37": "45629", - "2408:8456:cf00::/42": "17622", - "2408:8956:efc0::/35": "17622", - "2409:8235::/23": "9808", - "240e:934::/28": "4134", - "2606:2800:4290::/48": "15133", - "2a01:c50f:1a40::/39": "12479", - "2a09:9540::/48": "60328", - "2408:840c:6a00::/40": "17621", - "2600:6c4c::/32": "20115", - "2607:1700::/32": "36454", - "2607:f250:d000::/48": "7046", - "2607:f740:e00c::/48": "200325", - "2804:e30:b800::/37": "11338", - "2a04:ff00:300::/48": "206731", - "2a03:3c00::/32": "20847", - "2001:559:3ff::/37": "33652", - "2001:559:c02d::/48": "33659", - "2001:df5:af80::/48": "18229", - "240a:ab2c::/32": "145510", - "240e:97d:8000::/33": "4134", - "2800:160:1b13::/44": "14259", - "2800:bf0:8106::/43": "27947", - "2a0e:e6c0:4000::/36": "59584", - "2804:1e58::/46": "264422", - "2a05:2080::/29": "204819", - "2001:559:81a7::/48": "7725", - "2001:4408:8300::/44": "4758", - "2406:da00:2000::/40": "16509", - "240a:a0ef::/32": "142889", - "240e:30c:4a00::/35": "137688", - "2606:4700:8390::/42": "13335", - "2607:fb10:32::/34": "2906", - "2001:678:584::/48": "5409", - "2404:1b40::/48": "18230", - "2409:8080:3814::/46": "9808", - "240e:108:2e::/41": "4134", - "2606:1440::/32": "399100", - "2607:fb90:d500::/38": "21928", - "2a06:e881:6205::/48": "202297", - "2001:43f8:13c0::/48": "328522", - "2806:2a0:16::/44": "28548", - "2a02:970:1532::/34": "44002", - "2a03:2480:8033::/48": "200107", - "2001:559:c174::/48": "21508", - "2a02:101c::/32": "61352", - "2a0e:840::/29": "208663", - "2602:fef7:b::/40": "396192", - "2804:5198::/32": "268464", - "2a01:8880::/32": "8745", - "2a0d:1a40:7813::/40": "208563", - "2401:4900:5290::/44": "45609", - "240e:3b8:ac00::/35": "4134", - "240e:980:8000::/40": "23724", - "2602:808:4001::/46": "16509", - "2604:bc40:6111::/32": "22188", - "2001:c38:5000::/48": "4651", - "2001:128c:560::/34": "25933", - "2405:205:9000::/33": "55836", - "240a:a7d3::/32": "144653", - "2804:1d5c::/32": "264364", - "2a03:ff00::/32": "61097", - "2a0f:54c0::/29": "207906", - "2804:2ea0:c660::/40": "265356", - "2a00:11c0:63::/48": "42473", - "2a00:1348:11::/32": "8879", - "2a02:26f7:ce00::/48": "36183", - "2001:559:37d::/48": "7922", - "2800:1e0:2::/36": "7195", - "2403:3800::/44": "4007", - "2406:daa0:c080::/44": "16509", - "2409:8051:1002::/40": "56047", - "240e:3bb:4c00::/35": "136200", - "2607:fd48:301:100::/46": "13536", - "2401:fd80:800::/48": "138177", - "2800:110:2801::/35": "4270", - "2804:7b0c::/32": "14463", - "2a01:6560:8001::/33": "62248", - "2a0d:5642:112::/48": "35487", - "2a02:2698:2000::/42": "51645", - "2a03:cac0:a::/47": "61149", - "2a06:2340:1000::/44": "9558", - "2001:520:1039::/48": "8103", - "2001:559:c399::/48": "7015", - "2400:9800:13::/45": "24203", - "2803:3aa0::/32": "266876", - "2804:64c::/32": "262557", - "2a02:26f7:cac8::/48": "36183", - "2001:df3:2000::/48": "45712", - "2408:8459:610::/41": "17622", - "240e:438:7e20::/43": "140647", - "2801:80:1d20::/48": "265910", - "2804:7ff0::/32": "271719", - "2001:df1:e307::/48": "138603", - "2408:8456:a640::/36": "17816", - "2604:d600:606::/47": "32098", - "2605:d00::/32": "6300", - "2804:1da8::/32": "264384", - "2a02:26f7:d785::/46": "20940", - "2a0e:6440::/32": "208501", - "2a0d:ff00::/29": "204877", - "240a:a807::/32": "144705", - "2620:149:50::/42": "714", - "2a04:4e40:1400::/48": "54113", - "2405:1c0:7195::/36": "55303", - "2605:6f00:a000::/33": "40092", - "2607:4100:4000::/34": "19171", - "2804:1398:2::/34": "263541", - "2a02:e0:3201::/46": "34984", - "2a0c:b642:1030::/44": "210020", - "2402:9e80::/47": "7489", - "240e:187::/25": "4134", - "2600:5c00:1000::/34": "20001", - "2803:d6c0::/48": "265698", - "2804:45e4:7210::/37": "262567", - "2001:67c:56c::/48": "8925", - "2001:448a:10f0::/34": "7713", - "2403:a200:999a::/34": "17428", - "2405:201:1800::/34": "55836", - "2407:8b00:1163::/34": "64073", - "2804:77ac::/32": "271192", - "2806:230:202f::/48": "11888", - "2001:ee0:3120::/38": "45899", - "2408:8956:4900::/40": "17816", - "240e:96c::/30": "4812", - "2804:41d0:4300::/32": "267458", - "2402:4000:b2d0::/36": "18001", - "2402:a040::/32": "137522", - "240e:67e:c600::/34": "4134", - "2610:a0:17::/42": "7786", - "2804:18c0::/44": "61951", - "2001:d10:8411::/35": "4787", - "2402:7800:3002::/48": "21775", - "2408:8957:d2c0::/39": "17816", - "2a02:878:a801::/48": "42632", - "2a0b:4d07:801::/48": "44239", - "2600:ac00::/28": "14007", - "2804:43f4::/42": "267601", - "2a03:c380::/32": "21309", - "2a0e:b105:590::/45": "20473", - "2c0f:fc89:76::/44": "36992", - "240a:afe7::/32": "146721", - "2602:fe90:602::/45": "35913", - "2804:edc::/32": "263553", - "2a0a:4944::/30": "208972", - "2a0c:1a80::/29": "204861", - "2a0d:82c7::/45": "47787", - "2605:cd40::/32": "14363", - "2804:6c5c::/32": "270463", - "2a00:1af8::/32": "6856", - "240a:ab12::/32": "145484", - "240e:473:9250::/39": "4134", - "2804:3418:4000::/32": "265435", - "2804:7758::/32": "271172", - "2a0b:f1c0::/32": "198682", - "2a0d:900::/32": "59951", - "2001:559:8558::/48": "7922", - "2600:140f:3c01::/39": "20940", - "2a0e:b107:380::/48": "208753", - "2001:df0:312::/47": "135008", - "2001:df4:6480::/48": "140971", - "2001:1248:57d1::/42": "11172", - "240e:3b3:c800::/37": "4134", - "2600:140b:c00::/48": "31109", - "2c0e:2201::/30": "37457", - "2400:fc00:42d0::/39": "45773", - "240a:a67e::/32": "144312", - "2a00:4802:3300::/37": "13124", - "2a06:f907::/36": "56630", - "2a03:efc0:1500::/40": "33438", - "2001:559:86d9::/48": "33652", - "2402:1440:30::/48": "132168", - "2406:9680::/32": "17635", - "2408:8207:84c0::/39": "4808", - "2408:866a::/32": "4837", - "2605:f440:5353::/48": "57439", - "2804:31bc::/32": "265034", - "2001:dcd:21::/48": "58620", - "2408:8459:9850::/38": "17816", - "240e:37b:1a00::/34": "140330", - "2804:3b8:2::/45": "52965", - "2804:32b0:4030::/32": "265093", - "2001:67c:1998::/48": "203055", - "2402:2000::/33": "24350", - "2a02:258::/32": "43097", - "2001:559:86a8::/47": "33651", - "2404:0:5003::/45": "17709", - "2407:2080::/32": "3064", - "2001:559:81a8::/48": "33287", - "2403:300:a0d::/48": "714", - "240a:af7c::/32": "146614", - "240e:3b6:c800::/37": "4134", - "2604:4640::/32": "32625", - "2a07:dc00:2550::/44": "29997", - "2001:559:f8::/48": "7922", - "2001:559:c2d8::/48": "33287", - "2804:7bec::/32": "271463", - "2a02:26f7:bf45::/46": "20940", - "2001:579:1d84::/34": "22773", - "2401:d800:95b0::/41": "7552", - "2401:d800:d070::/40": "7552", - "2600:1400:f001::/31": "20940", - "2605:dd40:8ccc::/48": "398549", - "2607:f750:2000::/39": "23473", - "2804:80c::/32": "262343", - "2a0a:5340:ffff::/48": "3320", - "2001:ee0:d540::/36": "45899", - "240e:44d:2580::/41": "4134", - "2600:6000:fb35::/41": "12271", - "2804:1668::/32": "53132", - "2a07:6fc0:10::/44": "200462", - "2001:559:1c2::/48": "7015", - "2600:3000::/35": "13649", - "2a02:1378::/32": "39775", - "2a04:88c0:1::/48": "49992", - "2404:8d02:2983::/41": "9587", - "2405:e700:400::/40": "133089", - "240e:ff:a000::/36": "134764", - "2406:c800:a1cb::/33": "38016", - "240e:44d:5080::/41": "4134", - "2620:132:e002::/48": "41690", - "2a00:f30:10::/48": "12418", - "2a0d:7ec0::/31": "25398", - "2001:468:cc1::/43": "40220", - "2409:8070:900::/35": "9808", - "2605:a401:816a::/43": "33363", - "2620:134:8004::/47": "8100", - "2804:799c::/32": "271316", - "2a02:26f7:da01::/46": "20940", - "240a:aa69::/32": "145315", - "2602:fd60::/43": "396503", - "2801:10:e800::/48": "27951", - "2a02:e0:3803::/45": "34984", - "2001:550:1602::/47": "174", - "2804:7ed8::/32": "28232", - "2a03:6947:600::/40": "31027", - "2a0d:6900::/29": "35916", - "2001:678:44c::/48": "43722", - "2607:f720::/32": "7377", - "2803:a3e0::/32": "270068", - "2804:4248:9001::/33": "267490", - "2600:1405:5401::/36": "20940", - "2607:f8f0:1000::/40": "271", - "2604:dc40::/48": "393398", - "2001:559:c243::/48": "7922", - "2001:559:c286::/48": "33657", - "2001:67c:29c8::/48": "52016", - "2404:2a40::/32": "131633", - "2404:c500::/46": "45910", - "2a04:d140::/29": "202040", - "2a02:26f7:e401::/46": "20940", - "2400:ac40:b60::/40": "136255", - "2402:8100:15::/36": "55644", - "2402:e380:320::/48": "142165", - "240a:a88a::/32": "144836", - "2800:4f0:8::/48": "28006", - "2803:a900::/47": "52420", - "2a02:26f7:d701::/46": "20940", - "2a03:9980::/32": "30742", - "2a0a:c940::/32": "2119", - "2a0b:e541::/29": "35826", - "2001:16b8:1f00::/32": "8881", - "2401:cf80:61fa::/45": "55303", - "2804:4ac8::/32": "267263", - "2804:82d0::/32": "272158", - "2a02:26f7:f449::/42": "20940", - "2001:1248:a41b::/42": "11172", - "2404:8000:b4b2::/36": "17451", - "2405:1400::/32": "38176", - "2a0c:efc0::/46": "206356", - "2406:840:c00::/48": "139317", - "2409:8020:1051::/42": "56046", - "2600:1fa0:e020::/44": "16509", - "2607:f160:37::/48": "22394", - "2804:1928::/32": "61775", - "2001:438:fffd:1a::/57": "6461", - "2001:559:282::/48": "33657", - "2405:1c0:6a51::/46": "135062", - "2607:f6e0::/32": "22346", - "2a09:dc04::/30": "35916", - "2405:4803:c1c::/32": "18403", - "240a:a4d4::/32": "143886", - "2607:f8f0:670::/48": "271", - "2620:18::/48": "21525", - "2804:dc0::/32": "28610", - "2a00:16f8:e::/48": "397942", - "240e:473:7120::/41": "140486", - "2620:114:d000::/44": "3671", - "2804:3b0:4002::/32": "53062", - "2804:580c::/32": "268103", - "2a02:26f7:e448::/48": "36183", - "2407:8100:5::/48": "56308", - "240a:a5d9::/32": "144147", - "240e:900:40::/30": "4134", - "240e:964:cc00::/34": "4134", - "2607:fb10:7092::/42": "2906", - "2a01:8b00::/32": "3303", - "2603:f200::/29": "396356", - "2a04:a181::/32": "47474", - "2a07:6cc0:40::/47": "61098", - "2a0d:7a40:5::/48": "60254", - "2001:67c:2e0c::/48": "209721", - "2407:ef00:931::/32": "12422", - "240e:473:2a50::/39": "4134", - "240e:980:8600::/40": "136195", - "2607:fe10::/34": "11796", - "2804:28e4:e022::/36": "28260", - "2804:5f74::/32": "269100", - "2600:1f01:4800::/45": "16509", - "2605:6ac0::/36": "14586", - "240e:964:1800::/37": "133774", - "2804:6b08::/32": "270373", - "2a09:900:100::/38": "15576", - "2406:daa0:a080::/44": "16509", - "240a:a99f::/32": "145113", - "240a:ad1e::/32": "146008", - "2605:5e40:110::/48": "397810", - "2606:ae00:a100::/41": "7287", - "240a:a96f::/32": "145065", - "2604:8740::/32": "19575", - "2a02:26f7:b801::/46": "20940", - "240a:a909::/32": "144963", - "2607:f3a0:a001::/48": "399819", - "2804:3dc:f2::/36": "52967", - "2400:adc0:4110::/47": "9541", - "2606:5780::/32": "54579", - "2803:9460::/32": "262186", - "2001:559:859a::/48": "33667", - "2001:fb0:109f:8008::/42": "7470", - "240a:aba5::/32": "145631", - "2600:1417:50::/47": "9829", - "2604:1940::/32": "47096", - "2620:126:b000::/40": "22208", - "2804:7d18::/32": "271538", - "2001:559:862e::/48": "33659", - "240e:3b2:d000::/36": "134772", - "2605:8000:de2b::/34": "4261", - "2801:80:e60::/48": "264534", - "2a02:26f7:e6c1::/46": "20940", - "2a0f:5701:fe11::/39": "206499", - "2600:9000:a300::/47": "16509", - "2607:f518:16a::/45": "46887", - "2a06:7b80::/29": "204052", - "2001:559:83ce::/48": "33659", - "2001:4408:7900::/38": "4758", - "2402:7d80:8889::/35": "63582", - "2404:ec:420::/39": "703", - "2409:807e:2900::/35": "9808", - "2806:230:600b::/48": "11888", - "2400:2000:8::/46": "17676", - "240a:ad6b::/32": "146085", - "2600:141b:2001::/37": "20940", - "2600:6c3a:47::/42": "20115", - "2605:bb00::/35": "4213", - "2c0f:ff90::/32": "15808", - "2404:0:8000::/42": "131591", - "2600:1406:a001::/38": "20940", - "2602:ffeb::/36": "54819", - "2806:370:7340::/40": "28403", - "2806:3bf::/48": "270120", - "2a00:7660::/29": "60876", - "2a0e:b107:968::/48": "207427", - "2001:559:c295::/48": "33491", - "2402:f740:2000::/36": "140096", - "2405:b900:2000::/48": "55701", - "2a02:26f7:c08c::/48": "36183", - "2001:4da8::/32": "28824", - "2600:140f:2800::/48": "9498", - "2604:c040::/32": "21922", - "2607:f6d0::/32": "32", - "2a0b:5740::/29": "205671", - "240a:a489::/32": "143811", - "2804:1e38:21::/35": "264415", - "2a03:9a00::/29": "8896", - "2408:872b:400::/46": "139007", - "240a:aa00::/32": "145210", - "2604:fb80:6000::/36": "15128", - "2a00:41c0::/32": "48971", - "2a0b:9e80::/32": "15576", - "2a0f:cc00:1::/48": "60781", - "240e:967:ca00::/39": "133776", - "2804:7cf4::/32": "271529", - "2001:44b8:4049::/48": "4739", - "2001:4c10::/32": "24586", - "2408:832e::/27": "4837", - "2620:7d:e000::/48": "42909", - "2a09:8280:1::/48": "40509", - "2a10:de80::/32": "211993", - "2001:470:11d::/46": "6939", - "2402:e380:30f::/48": "138631", - "2a09:d180::/29": "35710", - "240a:a101::/32": "142907", - "2607:e880:5060::/47": "12220", - "2804:d88::/32": "52637", - "2a02:367:1566::/48": "42804", - "2408:8456:240::/39": "17816", - "2408:8459:b210::/42": "17623", - "2408:8920::/32": "4837", - "2408:8957:dc00::/40": "17622", - "2a02:4820::/32": "201964", - "2a09:3500::/29": "208861", - "2a0c:40::/32": "204426", - "2c0f:fff0::/32": "37125", - "2001:559:841f::/48": "33651", - "2001:559:c085::/48": "7922", - "2605:f300:ffff::/48": "29873", - "2607:f110:52::/40": "21889", - "2800:160:1b53::/44": "14259", - "2a02:26f7:d20d::/46": "20940", - "2a02:29a8:500::/36": "60142", - "2804:5d0:e000::/35": "28241", - "2a05:d050:20c0::/44": "16509", - "2001:559:1bf::/48": "33659", - "2001:559:30e::/48": "7922", - "2408:8256:3d8b::/48": "17816", - "240a:a181::/32": "143035", - "240a:a773::/32": "144557", - "2602:feb4:170::/44": "25961", - "2804:5964::/32": "268187", - "2001:559:386::/48": "20214", - "2001:67c:5a0::/48": "21286", - "2406:5800:400::/38": "132064", - "240a:ad90::/32": "146122", - "2001:500:e0::/47": "207266", - "2001:678:9cc::/48": "61384", - "2607:fc48:bc31::/48": "40009", - "2a03:1f40::/32": "199588", - "2001:4878:a347::/48": "12222", - "2620:13c:a0a0::/47": "19367", - "2804:c00:8100::/36": "52655", - "2001:559:80cb::/48": "33657", - "2a02:2aa8:220::/39": "702", - "2405:9800:c700::/47": "45458", - "2800:484:be00::/39": "10620", - "2001:468:2807::4/48": "396961", - "2001:559:85de::/48": "7015", - "2600:1408:c801::/38": "20940", - "2804:4828::/32": "267101", - "2a10:d480:ac01::/48": "206232", - "240a:a9a7::/32": "145121", - "2607:f208:d310::/44": "21499", - "2801:140:fff1::/46": "262249", - "2a05:4bc0::/29": "59395", - "2a09:be40:28ff::/48": "213170", - "2001:559:81b5::/48": "33657", - "2001:13d2:380e::/47": "7303", - "2403:b100:2013::/48": "394749", - "240a:a819::/32": "144723", - "2600:1400:b::/45": "20940", - "2603:c002:1210::/39": "31898", - "2803:140::/32": "264622", - "2602:ffe4:c1f::/42": "21859", - "2a01:55e0::/30": "199938", - "2602:800:e000::/44": "33201", - "2001:200:600::/40": "7667", - "2001:678:fd4::/48": "56951", - "2a00:6dc0::/32": "202237", - "2a0c:7000::/29": "57508", - "2a0d:d900:1::/48": "57164", - "2001:43f8:11d0::/48": "328381", - "2405:eb40::/46": "135815", - "2a0f:bf00:100::/42": "39890", - "2c0f:5a00::/32": "327996", - "2402:800:3d63::/43": "7552", - "2405:4800:ae01::/30": "18403", - "2407:5200:201::/46": "55915", - "240e:982:d400::/40": "131325", - "2606:2800:4aa8::/46": "15133", - "2804:60b0::/32": "269184", - "2c0f:eb00:800::/35": "61266", - "2604:2d80:8000::/36": "30036", - "2a07:9942:39d6::/47": "58305", - "2001:559:1f0::/48": "33659", - "2001:fd8:3006::/44": "132199", - "2404:4a00:8000::/64": "55423", - "2804:11d0::/32": "263441", - "2806:1080:101::/48": "19373", - "2a02:e980:153::/44": "19551", - "240a:ab40::/32": "145530", - "2605:4640::/32": "20213", - "2a02:26f7:bb81::/45": "20940", - "240a:a0c1::/32": "142843", - "2600:1800:16::/31": "16552", - "2604:2e8b::/33": "30036", - "2806:2f0:4204::/40": "17072", - "2801:1c8:88::/48": "19429", - "2804:8fc::/32": "263043", - "2001:1ab8::/31": "15440", - "2409:8c1a::/29": "132525", - "2800:160:19fa::/38": "14259", - "2804:8040::/32": "271739", - "2a02:8880::/25": "5089", - "2a05:9100::/29": "41993", - "2408:8779::/34": "10206", - "2408:8957:a600::/40": "17622", - "2607:fcc8:afc0::/48": "11955", - "2804:98c::/32": "263099", - "2804:2698::/32": "263841", - "2a02:2798::/32": "28775", - "2a03:50a0::/32": "39699", - "2406:f380::/48": "398109", - "2605:b100:500::/41": "577", - "2804:391c:f::/43": "262287", - "2a02:2e02:9b90::/37": "12479", - "2a0f:5707:af0f::/48": "211358", - "2a10:cc40:dc0::/45": "20473", - "2001:1290::/31": "16735", - "2403:bf00::/32": "7616", - "2806:2e1::/32": "265505", - "2a00:1d36:1000::/39": "47331", - "2a05:1084::/33": "59598", - "2a07:e480:100::/48": "202261", - "2001:67c:6ac::/48": "201742", - "2404:f440::/32": "58460", - "240a:a5db::/32": "144149", - "2602:ff75:1000::/36": "22653", - "2602:ffb0:29::/48": "20473", - "2804:4bd0::/32": "262320", - "2a01:caa0::/32": "47377", - "240e:473:550::/40": "4134", - "2606:18c0::/48": "399448", - "2a0d:1a40:5500::/48": "57782", - "2001:559:861b::/45": "7922", - "2402:e7c0::/41": "59078", - "2600:7400::/31": "29933", - "2806:2f0:6101::/43": "17072", - "2a02:26f7:f788::/48": "36183", - "2a03:32a0::/32": "198225", - "2001:410:a002::/43": "8111", - "2804:15fc:8000::/33": "28359", - "2a02:26f7:ed::/32": "20940", - "2606:6580::/34": "15305", - "2801:80:1df0::/48": "267509", - "2001:1998:700::/36": "7843", - "2600:6c3a:11::/45": "20115", - "2607:7c80:57::/48": "6373", - "2a0b:d100::/29": "206828", - "2605:1900:8380::/37": "12208", - "2a07:5900::/39": "203014", - "2a09:1405::/48": "48749", - "2a0b:b86:12::/48": "34692", - "2a10:9c80::/29": "29405", - "2409:8052:1802::/40": "56047", - "240a:ab0b::/32": "145477", - "2a0c:b640:17::/32": "34872", - "2404:bcc0::/32": "138352", - "2001:500:8f::/48": "26710", - "2001:df1:800::/48": "59253", - "2400:a980:7d00::/32": "133111", - "2406:f200::/32": "17534", - "2408:8459:5e30::/41": "17622", - "2604:6d00:2400::/48": "36223", - "2400:1f00::/43": "45769", - "2403:9800::/47": "4648", - "2409:8052:100::/37": "9808", - "2604:8600:9000::/33": "14453", - "2a04:3540::/30": "202053", - "2605:54c0::/32": "397735", - "2606:2800:7030::/46": "15133", - "2801:11c:c0::/44": "269888", - "2a02:26f7:c048::/48": "36183", - "2a0e:800:fff0::/48": "208328", - "2001:57a:3a04::/47": "22773", - "2409:8714:4a00::/34": "56044", - "2600:1003:a410::/38": "22394", - "2620:13a:8000::/40": "55037", - "2803:1a00:1513::/33": "262186", - "2806:2f0:3181::/46": "17072", - "2a0d:4c44:4::/30": "61317", - "2a0b:aac0::/29": "64236", - "2400:f340:100::/47": "131746", - "2408:8a24:4000::/34": "4837", - "2600:5800:f78b::/36": "11426", - "2604:b3c0::/40": "53989", - "2607:b400:a01::/48": "40220", - "2804:810::/32": "262344", - "2a02:cb43:2003::/48": "41179", - "2001:4d98::/34": "3303", - "2402:1b80::/38": "63956", - "2400:adc0:30::/46": "9541", - "2408:8256:2f7f::/48": "17816", - "2604:d600:c17::/44": "32098", - "2a0e:5f00::/29": "47787", - "2a0e:b102:129::/46": "212895", - "2a10:8280::/32": "2611", - "2600:6c38:ac::/43": "20115", - "2800:160:1b68::/47": "14259", - "2620:10c:e000::/40": "32629", - "2804:bd8:cd00::/34": "52838", - "2408:8459:4830::/41": "17622", - "2409:8706::/28": "9808", - "240a:a5b1::/32": "144107", - "2a09:7::/48": "43959", - "2401:d800:f950::/42": "7552", - "2402:8100:2140::/40": "45271", - "2804:3b6c::/32": "266148", - "2a02:888:8000:2::/39": "47794", - "2a05:a640::/29": "12859", - "2001:658::/29": "20676", - "2408:8456:ba40::/37": "17816", - "240e:3b8:7800::/39": "4134", - "2600:1017:9010::/39": "6167", - "2a0d:8600::/29": "205185", - "2403:9800:b010::/46": "4771", - "2606:2800:424a::/47": "15133", - "2804:3484::/32": "265463", - "2a03:5a00:3e::/48": "48614", - "2a0a:eb00::/29": "201341", - "2a0d:f700:400::/35": "207044", - "2401:d800:d220::/41": "7552", - "2a02:26f7:f3c0::/48": "36183", - "2001:16a6:c100::/40": "25019", - "2600:1417:f800::/48": "25019", - "2806:2f0:41a1::/43": "17072", - "2a02:bf0::/43": "25106", - "2a06:97c0:1::/48": "12459", - "2001:559:862f::/48": "7922", - "2001:4830:c171::/38": "27552", - "240e:12:1000::/32": "4134", - "2801:b4::/48": "20116", - "2804:2b4::/36": "28265", - "2405:f280:35::/32": "131464", - "2a01:48a0:4060::/48": "57271", - "2001:559:c3b0::/48": "33657", - "2804:65f0::/32": "269524", - "2a00:7180:800c::/33": "15557", - "2a02:26f7:e181::/46": "20940", - "2a0f:4680::/32": "50113", - "2001:4490:4e48::/46": "9829", - "2806:20d::/35": "32098", - "2a0a:21c0::/29": "30972", - "240a:acac::/32": "145894", - "2806:230:3025::/48": "11888", - "2a02:2e02:da0::/38": "12479", - "2409:4073:1000::/34": "55836", - "240a:ac35::/32": "145775", - "2600:1806:10::/44": "16552", - "2804:4a14::/32": "267217", - "2804:4bd8:600::/32": "267332", - "2a0d:3e80::/29": "202914", - "2001:ee0:cc40::/39": "45899", - "2a10:2f00:16c::/48": "211495", - "240a:ac58::/32": "145810", - "2620:ae::/48": "22950", - "2a04:4e40:a800::/48": "54113", - "2a00:11c0:beef::/48": "42473", - "2001:559:81c7::/44": "33652", - "2001:5b0:2100::/37": "6621", - "2001:4450:40::/48": "20940", - "2406:3000::/46": "4657", - "2407:8c0::/32": "134858", - "2804:3c0::/32": "28605", - "2804:1bfc::/32": "61632", - "2001:df2:ff00::/48": "58537", - "2404:7c00:3::/32": "45650", - "2605:9d80:9061::/48": "4809", - "2001:559:2a3::/48": "33660", - "2401:8f40::/48": "136933", - "2402:8100:2500::/44": "55644", - "2804:6458::/32": "269422", - "2c0f:f020:3000::/33": "327907", - "2001:df1:6c80::/48": "139648", - "2001:44b8:3c::/48": "7545", - "2404:f4c0:f607::/48": "139328", - "2604:e8c0::/48": "6233", - "2606:3380:12::/45": "53334", - "2804:318c::/39": "265023", - "2a09:7140::/29": "50628", - "240e:3bf:f100::/36": "4134", - "2803:6606:c000::/35": "28075", - "2a07:8e00::/29": "42331", - "2001:678:8ac::/48": "20570", - "2408:8957:7300::/40": "17816", - "2605:1b40::/32": "40389", - "2607:f190:4000::/32": "11320", - "2804:2b2c::/32": "265139", - "2a00:bec7:10::/47": "12946", - "2a04:f580:9060::/48": "4809", - "2001:559:85fa::/45": "7922", - "2620:74:a5::/46": "7342", - "2a00:1728:2::/47": "34224", - "2a06:ff40::/29": "15738", - "2401:d800:2ee0::/39": "7552", - "2408:8459:f700::/40": "17623", - "2a05:fa82::/29": "202139", - "2a0c:7a00::/29": "57910", - "2409:8904:4c60::/39": "24547", - "240a:ac3f::/32": "145785", - "2a01:7e27::/32": "199805", - "2a02:26f0:da00::/48": "34164", - "2a03:2880:f261::/45": "32934", - "2408:8957:9300::/40": "17816", - "2607:f670::/39": "10587", - "2804:3dc::/46": "52967", - "2804:2ebc::/34": "265363", - "2001:1998:8a0::/41": "7843", - "2402:1b80:3100::/32": "63956", - "240a:a47d::/32": "143799", - "2604:1100:d000::/39": "11911", - "2803:760::/39": "269816", - "2001:559:82f4::/48": "33668", - "2607:fc48:bc21::/46": "40009", - "2804:45d4::/32": "266952", - "2607:f6f0:5000::/48": "27224", - "2804:30e0::/32": "264978", - "240e:438:5e40::/34": "4134", - "2607:f110::/45": "21889", - "2804:20fc::/42": "264525", - "2a01:450::/32": "6908", - "2a01:802::/29": "3209", - "2a0a:2780::/31": "206774", - "2600:6c3b:31::/37": "20115", - "2804:489c:4000::/34": "267133", - "2001:559:d6::/48": "33287", - "2804:2e9c::/32": "265355", - "2a0b:b87:ffb0::/48": "16509", - "2001:559:86eb::/48": "7922", - "2001:559:c263::/48": "33657", - "240a:afcc::/32": "146694", - "2406:9600::/32": "10208", - "240e:473:5b50::/40": "4134", - "2c0f:f5c0:483::/36": "29465", - "2001:559:c151::/48": "33654", - "2001:8c0::/29": "2116", - "2401:d800:7700::/42": "7552", - "240a:aebe::/32": "146424", - "2804:2178:4004::/47": "264556", - "2804:376c::/32": "266413", - "2a02:13c0::/32": "20792", - "2409:8948:9400::/31": "24445", - "2600:370f:5205::/46": "32261", - "2606:f900:6104::/35": "812", - "2804:2168::/32": "53199", - "2001:44b8:30cc::/48": "7545", - "2600:809:424::/48": "397601", - "2602:feda:cb0::/48": "209557", - "2804:e0c:40::/48": "28176", - "2406:b400:d2::/45": "18209", - "2a0d:ed40::/32": "209985", - "2804:8318::/32": "272176", - "2a0e:97c0:e41::/48": "20473", - "2001:550:3402::/48": "398355", - "2001:559:c044::/48": "7725", - "2402:a300:8006::/44": "55427", - "2409:8915:8e00::/39": "56044", - "240a:a3fb::/32": "143669", - "2604:1740::/32": "37353", - "2a0b:a0c0::/29": "59682", - "240a:a857::/32": "144785", - "2806:370:5310::/44": "28403", - "2401:ff80:190b::/45": "133954", - "2404:2200::/43": "18200", - "2600:1406:ec01::/38": "20940", - "2602:feda:102::/48": "396303", - "2804:6864::/39": "269689", - "2001:678:f00::/48": "208930", - "2804:b4:f000::/36": "28294", - "2a02:26f7:b604::/48": "36183", - "2a0b:3700:2::/29": "61317", - "2001:559:584::/48": "33652", - "2001:559:c3da::/48": "33659", - "2804:1574::/32": "263389", - "2a02:26f7:c148::/48": "36183", - "2a03:8980::/32": "16232", - "2a01:b740:a1a::/48": "6185", - "2001:559:8332::/48": "20214", - "2001:67c:14d8::/48": "61413", - "2408:8459:9c30::/41": "17622", - "240a:aae0::/32": "145434", - "2602:fdf0::/36": "396056", - "2a03:1984::/32": "48260", - "2001:678:a3c::/48": "8867", - "2406:e500:2::/33": "58593", - "240a:a8c4::/32": "144894", - "2001:c10:ff03::/45": "7473", - "2401:d800:bc50::/42": "7552", - "2803:9800:a8c3::/45": "11664", - "2804:7d0c::/32": "271535", - "2a0f:5840::/44": "39192", - "2a04:3fc0::/46": "197669", - "2001:67c:154::/48": "25318", - "2001:67c:764::/48": "201530", - "2800:440:104::/48": "27738", - "2804:534::/37": "22177", - "2804:1c2c:2000::/32": "262869", - "2a00:7b00:e900::/35": "12338", - "2a03:4bc0:2300::/48": "30893", - "2a05:3580:28::/34": "35807", - "2a0c:2f07:fed5::/48": "206924", - "2c0f:e8a8::/32": "328631", - "2804:670c::/32": "269600", - "2001:16a2:3800::/37": "25019", - "2405:7f00:3000::/38": "133414", - "2405:9800:c911::/46": "45458", - "2406:8100:2000::/32": "24182", - "2801:13:a800::/48": "271809", - "2803:bc40:810b::/45": "52468", - "2804:1040:f700::/36": "263626", - "2a0f:9400:7728::/47": "53356", - "2803:10c0::/32": "264770", - "2001:559:8237::/48": "7015", - "2408:8456:2e50::/39": "17816", - "2408:8956:df00::/40": "17816", - "2408:8957:3300::/40": "17816", - "240a:a3d1::/32": "143627", - "240a:ab11::/32": "145483", - "2800:3c0:30a0::/32": "19863", - "2a04:5080::/29": "35579", - "2607:e580::/32": "36601", - "2804:3a90::/32": "266096", - "2001:559:241::/48": "7725", - "2400:d980::/32": "59340", - "2401:d800:d7c0::/42": "7552", - "240e:438:3220::/43": "140647", - "2001:df6:3e80::/48": "141993", - "2804:685c::/32": "269687", - "2a0c:b642:902::/40": "204625", - "2a0e:46c3:202::/40": "208717", - "2a0e:f780::/29": "208725", - "2a10:dc00::/29": "61193", - "2001:16a2:402c::/43": "25019", - "2606:6380:5::/46": "26721", - "2a0d:ac00:1000::/48": "205202", - "2a0e:97c5:49c::/46": "20473", - "2a0f:b4c4::/32": "47596", - "2001:418:1401:22::/63": "2914", - "2001:559:864a::/48": "7922", - "2605:3780::/32": "62622", - "2606:2000:12::/45": "1616", - "2803:9800:b037::/44": "11664", - "2804:35a4::/32": "266298", - "2a10:ba00:bee5::/48": "16509", - "2c0f:f5b8::/32": "327997", - "240a:ad28::/32": "146018", - "2603:c022:c000::/35": "31898", - "2804:2e78::/35": "28213", - "2804:5ab0::/32": "268789", - "2a0e:9b80::/46": "41737", - "240e:966:cc00::/34": "4134", - "2602:ff76::/36": "21722", - "2a02:2490::/32": "51815", - "2a02:26f7:f480::/48": "36183", - "2a04:4e40:fe30::/41": "54113", - "2001:559:76::/48": "33491", - "2600:140f:4a01::/39": "20940", - "2c0f:ed60::/32": "328474", - "2402:9e80:58::/48": "139677", - "2403:5a40:50::/48": "134562", - "2409:8924:4300::/37": "56046", - "2620:0:3b0::/48": "20452", - "2800:bf0:8266::/44": "52257", - "2804:890::/32": "52873", - "2403:f000:1::/48": "38220", - "2620:10d:c09b::/45": "54115", - "2a02:26f7:e089::/46": "20940", - "2a04:4e00::/29": "24651", - "2a0b:4340:80::/48": "134176", - "2001:4b00::/29": "12620", - "240a:ae79::/32": "146355", - "2600:1403:2001::/35": "20940", - "2a06:f040::/32": "5420", - "2a0c:5243::/32": "59504", - "2a10:6bc0::/48": "201511", - "2001:57a:9204::/46": "22773", - "240e:838:40::/44": "140647", - "2620:fa::/48": "293", - "2a02:ee80:41ee::/43": "3573", - "2400:ac40:bb0::/37": "136255", - "2402:800:63f1::/45": "7552", - "2606:f900:7604::/46": "812", - "2a02:208::/32": "5495", - "2a03:8520:1206::/48": "200981", - "2405:7c00:a000::/45": "9534", - "240e:925:4000::/30": "4134", - "2606:2800:4032::/47": "14210", - "2a02:2580::/32": "2119", - "2a02:2e02:9450::/39": "12479", - "2a0a:9e00:c::/29": "61317", - "2804:1e6c::/32": "264428", - "2001:470:31::/48": "6939", - "2001:67c:1008::/48": "42385", - "2408:8256:2d80::/44": "17623", - "240e:473:2d50::/40": "4134", - "2600:141b:a801::/35": "20940", - "2607:f5d8:20::/48": "2553", - "2804:920::/32": "263053", - "2a01:100::/32": "39912", - "2a04:f580:9240::/48": "4809", - "2400:c700:2001::/35": "55644", - "2408:8256:376a::/48": "17623", - "240e:473:9c50::/39": "4134", - "2605:3c80:e00::/41": "36180", - "2606:ae80:1440::/43": "25751", - "2804:3000::/32": "264925", - "2402:5b00:b0::/44": "18002", - "240a:af55::/32": "146575", - "2800:440:144::/48": "27738", - "2804:2da4::/32": "265294", - "2a00:19a8::/32": "49640", - "2400:cb00:266::/44": "13335", - "2602:ff96:15::/46": "40676", - "2a0b:9940::/32": "29413", - "2a0e:8f02:2175::/48": "211168", - "2400:dcc0:ac04::/39": "38631", - "2800:160:1e3a::/47": "14259", - "2801:15:4800::/48": "19429", - "2804:580::/33": "262518", - "2a02:26f7:c588::/48": "36183", - "2a04:840::/43": "33182", - "2400:db00::/32": "23881", - "240a:2:d90::/44": "9605", - "2600:1402:b801::/33": "20940", - "2620:171:fb::/48": "715", - "2804:575c::/32": "268061", - "2804:69b0:100::/41": "270285", - "2001:67c:2e80::/48": "20712", - "2a02:1c8:10::/44": "24955", - "2001:678:258::/48": "58057", - "2a10:9903:110::/44": "15510", - "2001:c38:90b0::/39": "9931", - "2001:df4:c200::/48": "58522", - "2401:8a40:24::/44": "45326", - "2408:8956:9b00::/40": "17816", - "2409:8750::/38": "56047", - "240e:b58::/24": "4134", - "2610:a1:3028::/48": "12008", - "2001:c00::/39": "4618", - "2405:8400::/32": "9245", - "2408:8957:2f00::/40": "17816", - "240e:983:700::/40": "140061", - "2620:12c:3000::/44": "3356", - "2804:71cc::/32": "270812", - "2001:db0:7000::/32": "17766", - "2403:2d40::/32": "64018", - "2408:8957:3400::/40": "17622", - "240a:a780::/32": "144570", - "2604:d600:52e::/43": "32098", - "2606:2800:6023::/44": "15133", - "2a02:26f7:38::/48": "36183", - "2401:17c0::/32": "136533", - "240a:afdc::/32": "146710", - "2600:1417:42::/44": "20940", - "2a0e:97c0:1374::/48": "20473", - "2803:d480::/32": "8053", - "2001:3d8::/32": "9595", - "2401:1d40:3f01::/48": "59019", - "2409:8924:bf00::/33": "56046", - "2600:1415:9::/48": "20940", - "2600:1417:4801::/37": "20940", - "2602:103:4000::/35": "20115", - "2801:80:22d0::/48": "267068", - "2a01:8a00::/32": "42484", - "2001:559:8739::/48": "33662", - "2001:df0:2f3::/48": "132351", - "2001:44b8:1c::/46": "7545", - "2407:bd40:3830::/48": "399686", - "240a:a3e3::/32": "143645", - "2605:f440:b00b::/48": "212149", - "2620:9c:6000::/48": "174", - "2a04:ac0:1::/48": "20860", - "2a0f:1fc0::/29": "60262", - "2401:fbc0::/32": "134922", - "2403:51c0::/32": "138022", - "2407:7400::/48": "9498", - "2607:fb10:503e::/41": "2906", - "2804:3360:fe00::/39": "262725", - "2001:559:8104::/48": "33287", - "2a0e:b107:b80::/44": "212995", - "2001:559:2a::/48": "7015", - "2001:67c:234c::/48": "42204", - "2408:8957:6400::/40": "17622", - "240a:ac41::/32": "145787", - "2604:9f00:1000::/32": "27364", - "2804:2df8:eeaf::/43": "265315", - "2804:4608:8000::/33": "266964", - "2001:1a11:bc::/48": "8781", - "2401:4900:50::/48": "9498", - "240a:a864::/32": "144798", - "2806:2f0:2240::/39": "17072", - "2a03:6b00:2::/44": "48832", - "2409:8924:9900::/38": "56046", - "2806:329::/32": "28429", - "2409:8050:2000::/47": "56047", - "2602:fd92:631::/48": "142158", - "2a0d:3200::/29": "61161", - "2a0e:1bc1::/35": "208621", - "2402:c800:fff2::/48": "38639", - "2600:140b:a400::/48": "24319", - "2606:50c0:8000::/46": "54113", - "2a04:dbc0::/30": "8395", - "2a06:2e00::/29": "28920", - "2a07:6200::/29": "47820", - "2a0e:97c5:708::/45": "20473", - "2001:559:806b::/45": "7725", - "2401:f40:f::/32": "134732", - "240e:982:e400::/31": "4134", - "2604:8600:7000::/32": "14453", - "2604:fb00::/32": "19223", - "2804:3814::/32": "266454", - "2a0b:82c0::/29": "41645", - "2408:8957:b700::/40": "17816", - "2803:4c60::/45": "267845", - "2804:1b70::/32": "61728", - "2804:55d0::/32": "267958", - "2a01:6f0::/39": "42366", - "2001:559:c172::/48": "33651", - "2001:678:9d0::/48": "34944", - "2001:df6:a680::/48": "45679", - "2401:5f40::/32": "38004", - "240a:ac02::/32": "145724", - "2a03:e600::/40": "1764", - "2a0e:2e80::/29": "60255", - "2400:ac40:d70::/38": "136255", - "2607:fa40::/47": "25899", - "2001:559:26b::/48": "7015", - "2a0c:ec00::/29": "205255", - "2001:559:83e6::/48": "7015", - "240a:a52c::/32": "143974", - "2408:8459:7e30::/41": "17622", - "2607:fd28:a008::/48": "36086", - "2a02:26f7:d449::/46": "20940", - "2a09:be40:3420::/48": "212348", - "2001:559:816c::/48": "7016", - "2001:df1:2280::/48": "139588", - "2409:8752:500::/38": "56047", - "240a:aa6d::/32": "145319", - "2a0a:9c80::/32": "200665", - "2001:448a:7070::/40": "7713", - "2001:4490:c00::/43": "9829", - "2408:8256:3282::/48": "17816", - "240e:37c:2600::/32": "4134", - "2607:f160:25::/48": "22394", - "2a0f:d300::/29": "47787", - "2001:559:82e8::/48": "33659", - "2408:8456:ee00::/42": "17622", - "2803:1460::/32": "267837", - "2804:49ec::/32": "267209", - "2a06:2280::/29": "200582", - "2a07:a080::/29": "51399", - "2402:800:9301::/44": "7552", - "2604:d600:22::/43": "32098", - "2606:1040:1338::/32": "12243", - "2a00:ed80::/32": "34100", - "2400:a980:5d00::/38": "133111", - "2620:0:6c4::/48": "16807", - "2a01:238:10b::/38": "6724", - "2a05:acc0::/29": "3212", - "2a0d:77c7:f6ce::/36": "7489", - "2001:16d8:c014::/36": "16150", - "240e:3bc:5600::/34": "4134", - "2620:171:f4::/47": "42", - "2804:71dc::/32": "270816", - "2a02:ee80:410b::/43": "3573", - "2001:918:ff3e::/48": "48038", - "2001:9e8:2004::/39": "8881", - "2408:84f3:aa40::/37": "17816", - "2600:1413:7001::/36": "20940", - "2a02:26f7:d048::/48": "36183", - "2a07:7b80:102::/48": "8757", - "2001:448a:6050::/42": "7713", - "2a00:11c0:25::/43": "42473", - "2a00:17a8::/32": "8478", - "2a0f:5707:aad0::/47": "212591", - "2001:43f8:a30::/48": "20294", - "2804:5604::/32": "267971", - "2401:d800:f350::/42": "7552", - "2620:112:9000::/44": "36225", - "2a03:e581:5::/29": "49282", - "2803:b80::/32": "27930", - "2804:5c4c::/32": "268900", - "2001:388:3058::/48": "24433", - "2001:678:8b4::/48": "9009", - "2604:d600:c3f::/41": "32098", - "2001:1938:4400::/34": "12989", - "2404:76c0::/32": "138636", - "2620:21:c000::/48": "30256", - "2a06:6540:4101::/48": "8220", - "2001:fc8::/32": "23624", - "2001:4998:3d::/41": "10310", - "2a00:86c0:2086::/47": "40027", - "2001:cb0:3203::/32": "4637", - "2600:1407:1c01::/34": "20940", - "2602:ff22::/36": "63297", - "2806:2f0:8101::/46": "17072", - "2c0f:ed38::/35": "328437", - "2408:840c:dd00::/34": "17621", - "240a:a495::/32": "143823", - "2a06:98c0:3607::/48": "132892", - "2001:12d8::/40": "1251", - "2405:ec0::/35": "132768", - "2400:1d00::/32": "9656", - "240a:a23e::/32": "143224", - "2a0d:2902:caf7::/44": "204185", - "2a10:6700::/29": "398559", - "2409:807c:1100::/36": "9808", - "240a:add6::/32": "146192", - "2600:1fa0:e040::/44": "16509", - "2604:880:a::/48": "29802", - "2605:3380:ff09::/45": "12025", - "2a09:4c0:301::/46": "58057", - "2001:559:c3f0::/48": "33651", - "2401:d800:2490::/42": "7552", - "2620:131:f000::/40": "10255", - "2a0f:7480::/29": "212807", - "2407:3000:7::/41": "17707", - "2607:f740:e07b::/45": "398748", - "2804:2d30::/32": "265265", - "2408:862a::/32": "4837", - "2a0e:f43::/48": "211935", - "2001:559:8155::/48": "33659", - "2001:67c:550::/48": "202068", - "2602:803:9003::/44": "17138", - "2605:5800::/32": "15305", - "2804:7c84::/33": "271501", - "2a0e:aa07:e100::/44": "142025", - "2602:fd68::/36": "30241", - "2a00:cb0:8000::/34": "13289", - "2a02:748::/35": "29802", - "2001:500:8e::/48": "12041", - "2402:3a80:16e0::/39": "38266", - "240a:ab5a::/32": "145556", - "240a:ae87::/32": "146369", - "2a0e:6540:53a::/48": "208364", - "2406:840:d0b0::/44": "38136", - "2406:8000::/32": "17955", - "240a:a566::/32": "144032", - "2606:6c00:4::/44": "32787", - "2620:135:7003::/48": "3257", - "2804:5288::/37": "268524", - "2404:2000::/34": "23905", - "2607:f060:b004::/48": "53708", - "2a00:e800::/32": "49895", - "2001:559:c2b6::/48": "7016", - "2401:f000:19::/32": "38477", - "2402:800:5163::/43": "7552", - "2804:6a30::/32": "270318", - "2a02:26f0:6200::/48": "34164", - "2001:500:2::/48": "2149", - "240a:affe::/32": "146744", - "2600:c0d::/32": "14742", - "2600:2003::/32": "33517", - "2600:5002:1806::/48": "26793", - "2a0f:4780::/29": "197706", - "2001:c20:487e::/48": "9255", - "2404:2e80:2a::/32": "135043", - "2600:1419:5001::/37": "20940", - "2a07:2f00:dead::/48": "203132", - "2001:40d0::/32": "20912", - "240a:a48b::/32": "143813", - "240e:97d:1000::/36": "4134", - "2800:320:822::/48": "27882", - "2a00:4802:f00::/35": "13124", - "2605:9d80:8041::/48": "4134", - "2001:559:80e7::/48": "7922", - "2402:3a80:c059::/48": "38266", - "2402:c300::/32": "55653", - "240a:adc5::/32": "146175", - "240e:978:1000::/40": "137702", - "2600:bc01::/32": "398993", - "2602:feda:d82::/48": "142566", - "2804:10::/43": "28299", - "2806:230:5004::/48": "265594", - "2a02:26f7:b844::/48": "36183", - "2001:559:3f4::/47": "7016", - "2403:300:a11::/46": "714", - "2408:8957:9400::/40": "17622", - "2607:fda8:1009::/45": "6128", - "2a00:a8e0:301::/48": "17054", - "2a02:4007::/32": "56821", - "2401:d800:2b60::/40": "7552", - "2604:2800:fff4::/44": "26793", - "2620:130:3080::/48": "62861", - "2804:5534:1800::/34": "268696", - "2a0b:1c00:1919::/48": "62240", - "2400:cb00:110::/44": "13335", - "2620:a9:8008::/45": "62872", - "2a01:298:f001::/48": "30893", - "2a02:b30::/32": "20886", - "2001:559:c29c::/48": "7922", - "2403:ad80:90::/46": "135309", - "2404:e801:201f::/42": "55430", - "2409:805f:3100::/36": "9808", - "2001:559:8568::/48": "20214", - "2401:d800:df90::/42": "7552", - "2408:826c::/27": "4837", - "2408:8456:c400::/42": "17622", - "2600:3402:1405::/29": "4181", - "2a02:24f0::/32": "8592", - "2a02:26f7:f7c5::/46": "20940", - "2409:8907:8620::/33": "24547", - "2600:5c00:386d::/38": "20001", - "2620:1d5:a40::/37": "14773", - "2a0d:2146:2404::/48": "44592", - "2001:559:843b::/48": "7922", - "2804:1b5c::/47": "28334", - "2804:2b44:12::/42": "265144", - "2405:9800:b022::/39": "45430", - "2605:a404:5a7::/41": "33363", - "2804:20e8::/32": "264520", - "2804:46fc::/33": "267024", - "2408:80ea:78c0::/39": "17816", - "2804:5274::/32": "268519", - "2a02:26f7:8::/48": "36183", - "240e:6b4:1000::/31": "4134", - "2001:df5:f980::/48": "138245", - "2401:d800:9a40::/40": "7552", - "2804:878::/32": "262374", - "2806:230:102c::/48": "265594", - "2a0c:d540::/32": "60159", - "2001:559:847d::/48": "33287", - "2406:9000::/32": "24175", - "2607:f7c8::/37": "36221", - "2804:1f26:cafe::/48": "265020", - "2a00:ea20::/29": "28884", - "2001:8f0::/30": "3329", - "2402:2200:8000::/35": "4788", - "2408:873d:2000::/36": "140716", - "2602:ff25:e00::/39": "46657", - "2a00:1c88:100::/48": "209242", - "2a00:55a0:ff00::/40": "9009", - "2001:470:30::/48": "2033", - "2001:67c:15c::/48": "34387", - "240a:addd::/32": "146199", - "2620:52:3::/48": "17314", - "2a02:3c8::/32": "43892", - "2001:559:8429::/48": "7015", - "2001:678:bb8::/48": "20853", - "2001:4cf8::/32": "13167", - "2602:fe7e::/36": "32494", - "2620:108:f006::/48": "8161", - "2a0a:56c4:8501::/48": "42649", - "2a10:be40:1::/48": "20799", - "2804:7320::/32": "270897", - "2001:678:a34::/48": "51567", - "2001:ce0:7::/48": "3363", - "2402:800:919b::/42": "7552", - "2404:5800::/39": "9911", - "2606:2800:10c::/46": "15133", - "2804:d50::/28": "8167", - "2804:5030::/32": "268374", - "2a0b:4d07:401::/48": "44239", - "2600:1419:c401::/36": "20940", - "2804:406c::/32": "265958", - "2804:5e70:c000::/34": "269033", - "2a00:f08::/32": "21367", - "2a06:f700::/29": "208332", - "2001:67c:20b8::/47": "25303", - "2605:dd40:8100::/48": "398549", - "2620:12c:9006::/47": "395359", - "2a02:26f7:ca08::/48": "36183", - "2a05:1500:600::/36": "48635", - "2001:df6:6b00::/48": "135772", - "2409:8038:3900::/30": "9808", - "2804:4d84::/32": "268201", - "2804:57a8::/32": "268078", - "2804:5f6c::/35": "262287", - "2001:67c:2224::/48": "42655", - "2404:1f00:7000::/32": "55947", - "2600:1480:f001::/28": "20940", - "2804:3670::/32": "266348", - "2a00:86c0:2090::/47": "40027", - "2a04:4e41::/42": "54113", - "2001:559:439::/48": "33659", - "2804:1df8::/32": "264404", - "2a0a:d7c7:808::/48": "8447", - "2001:579:6040::/40": "22773", - "2001:678:1e0::/48": "202739", - "2607:f480:999::/48": "27435", - "2a01:aee0::/32": "208582", - "2001:559:444::/48": "22909", - "2001:e60:d8a0::/45": "4766", - "2605:bc0::/48": "54201", - "2606:4580::/32": "22684", - "2a00:ad40:10::/44": "57052", - "2408:8406:8400::/39": "4808", - "2a01:ce9d:1000::/30": "51964", - "2a02:2808:1005::/48": "196943", - "2a02:c240:103::/48": "30383", - "2a03:f002:1::/31": "25472", - "2001:df4:3200::/48": "132476", - "2400:3dc0:30::/39": "134371", - "2804:4c8::/42": "262465", - "2a02:26f7:ccc1::/46": "20940", - "2001:44b8:3088::/48": "7545", - "2402:e280:2139::/45": "134674", - "2806:370:7110::/44": "28403", - "2405:9800:110::/32": "45430", - "2a02:26f7:84::/48": "36183", - "2405:2040:2334::/32": "48024", - "2804:6ca4::/32": "270482", - "2804:6aa4::/32": "270350", - "2001:559:83e3::/48": "33652", - "2001:dc7:2e00::/33": "24151", - "2404:c2c0:280::/44": "135629", - "2803:9800:a022::/43": "11664", - "2804:954:400::/45": "263073", - "2804:5bd4::/32": "268871", - "2804:6128::/33": "269217", - "2001:67c:1c8::/48": "48896", - "2001:c20:c854::/46": "9255", - "2001:ee0:9f40::/34": "45899", - "2a03:3ca0::/32": "59785", - "2a0b:640:4::/30": "35236", - "2001:978:2300:202::/55": "174", - "2409:8753:1100::/32": "56047", - "2804:4be0::/32": "267334", - "2a02:dd00::/29": "57388", - "2a11:8180::/29": "56897", - "2001:fe8:8110::/47": "24435", - "2402:8100:2550::/44": "55644", - "2800:4b0:4440::/36": "12252", - "2800:bf0:160::/44": "52257", - "2804:8100::/32": "262306", - "2a02:ab8::/32": "48943", - "2a02:26f7:b788::/48": "36183", - "2a0c:b641:150::/44": "211449", - "2001:559:2b::/45": "7922", - "2001:559:35::/48": "33491", - "2001:4ba3::/32": "24961", - "2405:ec01::/35": "137412", - "2408:8000:a017::/48": "140717", - "2408:8256:3b69::/48": "17816", - "2604:8ac0::/32": "35889", - "2401:d800:bec0::/42": "7552", - "240a:a5f1::/32": "144171", - "2605:b100:1000::/39": "577", - "2803:5ce0:b00::/32": "54235", - "2804:7af4::/32": "271402", - "2a05:3040::/29": "42910", - "2404:a700::/32": "33182", - "2409:8080:3825::/29": "9808", - "2600:1407:1401::/36": "20940", - "2800:160:1224::/43": "14259", - "2a02:26f7:f705::/46": "20940", - "2a02:2e02:5f0::/38": "12479", - "2402:800:941d::/41": "7552", - "2409:806b:5d00::/29": "9808", - "2600:140f:d001::/37": "20940", - "2a02:26f7:c304::/48": "36183", - "2a03:f80:30::/48": "8280", - "2001:1890:1fff:103::/64": "6461", - "2001:1a11:10c::/48": "8781", - "2402:9d80:3b8::/41": "131429", - "2620:57:e000::/48": "397031", - "2409:8c7f::/24": "9808", - "2600:1003:b130::/40": "22394", - "2608:c184:1::/48": "5927", - "2402:ef25::/28": "7633", - "2001:978:909::/48": "61083", - "2a0a:6e00:49::/48": "207098", - "2001:388:d::/42": "7575", - "2001:1850::/32": "32181", - "2001:448a:6010::/42": "7713", - "2600:1480:8800::/48": "21342", - "2a03:1b80:d::/32": "18705", - "2403:1940:10::/48": "137935", - "2602:feb4:40::/44": "25961", - "2604:f400:2::/48": "19453", - "2806:230:4024::/48": "265594", - "2806:2f0:7121::/41": "17072", - "2a0f:607:1000::/48": "60614", - "240a:abc6::/32": "145664", - "2a0f:3740::/29": "60262", - "2a0f:9400:7b10::/48": "210872", - "2607:fe28:2::/44": "53347", - "2804:1d28::/32": "264351", - "2804:2ab4::/32": "53149", - "2a06:e881:6602::/47": "208872", - "2c0f:f668::/32": "37519", - "2401:a580:4::/47": "55403", - "2001:559:504::/48": "7922", - "240a:adc0::/32": "146170", - "2a03:4b20:f000::/36": "3209", - "2a02:26f7:c6c9::/42": "20940", - "2a09:4040::/48": "50007", - "2001:559:286::/48": "22909", - "2401:ff80:1a8d::/46": "133954", - "2605:ce80::/37": "393713", - "2804:46d0::/32": "267013", - "2804:6760::/34": "269624", - "2001:67c:424::/48": "8220", - "2600:1406:d800::/48": "35994", - "2607:ff00:900::/40": "46385", - "2804:54:6008::/32": "28220", - "2a05:2740::/29": "47176", - "2804:d08::/32": "262311", - "2001:df2:c800::/48": "133394", - "2001:4070::/33": "5550", - "2001:4d78:fe13::/48": "15830", - "2402:3a80:b00::/41": "38266", - "2408:8957:3900::/40": "17816", - "240a:a7a7::/32": "144609", - "2602:fc71:f00::/48": "397270", - "2a02:e9::/30": "12637", - "2a0a:2a40::/29": "50758", - "2a10:a100::/32": "16509", - "2001:990::/32": "15703", - "2409:4086:a000::/28": "55836", - "2607:f330:a001::/46": "15130", - "2607:f990::/32": "16866", - "2804:32d0::/32": "265099", - "2806:230:1024::/48": "265594", - "2a04:4e40:3400::/48": "54113", - "2600:1003:b8d0::/44": "6167", - "2602:fd50:f30::/48": "212149", - "2001:1398:274::/48": "52234", - "240a:a825::/32": "144735", - "2a02:2e02:1350::/40": "12479", - "2404:ff40::/32": "4229", - "2a00:d20::/32": "47262", - "2a01:b580::/32": "12688", - "2a01:c9c0:bf::/48": "24600", - "2a02:2698:5409::/38": "41843", - "2a03:b500:81::/41": "41135", - "2001:559:8314::/48": "7922", - "2001:67c:13a0::/48": "57954", - "2001:67c:2940::/48": "50636", - "2001:fd8:f230::/44": "4775", - "2402:d540:1::/43": "135139", - "2a00:bac0::/32": "58323", - "2a0a:dc40::/29": "12843", - "2408:8756:1000::/37": "17622", - "2607:7300::/32": "40438", - "2803:3680::/32": "27851", - "2a02:2328::/32": "8426", - "2001:579:ef09::/35": "22773", - "2408:8456:a610::/42": "134543", - "2600:1407:1c::/48": "3257", - "2606:b400:8006::/48": "792", - "2620:125:7006::/48": "53780", - "2804:6db4::/32": "270550", - "2a02:6b8:81::/48": "13238", - "2001:67c:14dc::/48": "3301", - "2408:8956:d440::/40": "17622", - "2a01:550::/32": "42579", - "2001:418:1401:98::/64": "3949", - "2001:44b8:3a::/48": "7545", - "2403:df40:113::/45": "14630", - "2408:8256:2f76::/48": "17816", - "2408:8459:dc50::/38": "17816", - "2604:c80:ffff::/48": "30164", - "2804:1884::/32": "61937", - "2a0e:aa01:1fff::/48": "139589", - "2a0f:5701:3527::/32": "206499", - "2806:1070:401::/48": "3905", - "2001:559:83e0::/48": "33652", - "2001:13d0:100c::/38": "7303", - "2001:4878:8027::/48": "12222", - "2401:ff80:1b09::/45": "133954", - "2404:4280::/32": "18106", - "2804:5594::/34": "267943", - "2804:7260::/32": "52926", - "2a02:a00::/44": "15987", - "2c0f:fee0::/32": "33785", - "2001:67c:13d8::/48": "203158", - "2405:1c0:7a82::/37": "55303", - "240a:3:bfe::/48": "9605", - "2a09:9ec0::/48": "5606", - "2001:559:7d0::/48": "33657", - "2001:67c:2ca6::/47": "50838", - "2600:370f:3705::/42": "32261", - "2804:3ac0::/32": "266107", - "2804:7f78::/32": "271690", - "2a02:ee80:422c::/41": "3573", - "2a0a:1fc0::/29": "15426", - "2001:559:8765::/48": "7922", - "2620:136:a008::/46": "36198", - "2800:160:1866::/44": "14259", - "2804:8000::/32": "271723", - "2a00:f40:f000::/48": "43447", - "2a02:ac80:e01::/39": "25145", - "2401:df40:1::/48": "23734", - "240e:b2:e000::/36": "136197", - "2804:2c7c::/32": "265222", - "2a07:3502:1120::/48": "21286", - "2a10:2f01:2af::/48": "212995", - "2804:2974:b000::/33": "264016", - "2a00:f5c0::/32": "41369", - "2a09:2884::/48": "202316", - "2a0e:8b40::/29": "205614", - "2001:559:57a::/48": "33659", - "2001:67c:4c::/48": "35609", - "2804:5d64::/32": "268969", - "2a02:2e02:11c0::/38": "12479", - "2a02:5320:b00::/40": "12189", - "2c0f:ed00:110::/48": "328442", - "2001:678:6b0::/48": "33873", - "2804:14c:65c7::/44": "28573", - "2804:5d94::/32": "268980", - "2a03:4bc0:2900::/48": "30893", - "2a07:4300:972::/48": "209622", - "2401:9cc0:200::/48": "59256", - "2a00:cb60:1::/48": "47488", - "2a02:26f7:de80::/48": "36183", - "2a09:fc00::/29": "200848", - "2c0f:fdc8::/32": "37049", - "2001:43f8:14d0::/48": "328700", - "240a:af95::/32": "146639", - "240e:3b1:9200::/36": "140317", - "2620:13a:c013::/42": "53356", - "2a04:c000::/29": "202194", - "240e:37a:1a00::/34": "140330", - "2600:100b:a110::/35": "6167", - "2600:1404:7400::/48": "35994", - "2a0f:e143::/32": "60781", - "240e:3b8:9200::/36": "140317", - "2409:8020:2902::/35": "56046", - "240e:44d:2780::/41": "4134", - "2606:6500::/28": "19331", - "2a01:65c0::/32": "3242", - "2a01:ab80::/32": "204243", - "2a02:26f7:e504::/48": "36183", - "2a02:a400::/25": "1136", - "240a:a3d7::/32": "143633", - "2a04:1dc0::/29": "44252", - "240e:44d:4400::/41": "140345", - "2600:1480:4100::/37": "20940", - "2a04:2fc7::/32": "43238", - "2001:ee0:9640::/39": "45899", - "2001:1980:5400::/34": "29838", - "2001:4b20:20:2::/39": "34288", - "2402:800:5b39::/41": "7552", - "2803:d20::/32": "265684", - "2a04:3080::/29": "29170", - "2404:f4c0:f948::/48": "142551", - "2804:14d:4cb7::/41": "28573", - "2a0e:b107:5b0::/44": "207328", - "2a0f:1440::/48": "60781", - "2001:1248:9707::/43": "11172", - "2001:4450:41::/29": "9299", - "2605:ee00:30::/41": "29990", - "2804:30f8:b00::/40": "264984", - "2a00:15e0::/29": "15960", - "2a0b:8f80:100::/47": "29290", - "2001:559:73e::/48": "33287", - "2001:559:84f1::/48": "33659", - "2001:920::/31": "8220", - "240e:473:3350::/40": "4134", - "2800:bf0:16e::/48": "27947", - "2804:11dc::/33": "263444", - "2001:468:2811::/32": "11537", - "2001:559:c05d::/48": "33491", - "2602:fd7d:2::/43": "16925", - "2803:c10::/32": "271867", - "2a02:26f7:d081::/46": "20940", - "2001:1b40:3333::/48": "3356", - "2607:f768:4000::/32": "33152", - "2804:7864::/32": "271239", - "2806:230:204e::/48": "265594", - "2a02:26f7:b980::/48": "36183", - "2a05:f080::/29": "38919", - "2a0b:1600::/29": "56485", - "2001:559:429::/48": "22909", - "2804:56e0::/42": "268029", - "2804:1024::/32": "263620", - "2804:3964::/32": "266028", - "2001:678:24::/48": "201612", - "2001:67c:295c::/48": "8365", - "2405:1a40::/48": "135981", - "2606:40c0::/32": "7018", - "2804:65b8::/32": "269510", - "2a00:9f40::/32": "57961", - "2a02:26f7:f8c8::/48": "36183", - "2400:1a00:b1e1::/33": "17501", - "2a02:26f0:9d01::/40": "20940", - "2408:8456:1400::/42": "17622", - "2a04:4900::/29": "64401", - "2001:579:d184::/42": "22773", - "2001:df0:a8::/48": "46052", - "2404:4580::/47": "63526", - "240e:45c::/31": "131285", - "2602:808:4004::/48": "398960", - "2605:a404:5cd::/38": "33363", - "2803:1120::/32": "52328", - "2405:3740::/32": "38526", - "2804:72d4::/32": "270878", - "2a02:e3c0::/29": "213402", - "2401:ff80:158d::/46": "133954", - "2401:ff80:1593::/38": "133954", - "2403:1ec0:1610::/48": "4812", - "2610:b0:4146::/32": "3573", - "2001:559:8326::/48": "33651", - "2804:74bc::/32": "271000", - "2a02:26f7:d48c::/48": "36183", - "2001:4479:8000::/36": "7545", - "2607:f7c0:4000::/40": "40819", - "2001:1218:6015::/46": "278", - "240e:965:800::/37": "133774", - "2001:1497:2::/47": "208520", - "2400:3dc0:601::/39": "134371", - "2409:8904:3ea0::/39": "24547", - "2600:1007:c01::/46": "22394", - "2001:559:a8::/47": "33287", - "2001:67c:1280::/48": "34883", - "2604:0:c2::/32": "7397", - "2a01:47c1::/32": "41075", - "2a0e:68c0:1::/48": "204743", - "2409:8914:8600::/39": "56044", - "2607:fa00::/32": "30362", - "2620:149:a16::/48": "6185", - "2a04:940:1601::/29": "51407", - "2a0c:8040::/29": "211892", - "2604:85c0:8::/47": "16524", - "2a01:2c0::/34": "8282", - "2001:559:833c::/48": "33651", - "2001:57a:7002::/45": "22773", - "2402:3a80:c00b::/43": "38266", - "2a07:e00:ff::/48": "210083", - "2409:8954::/28": "56040", - "240a:af3f::/32": "146553", - "2600:370f:4060::/45": "32261", - "2a00:4802:3010::/38": "13124", - "2a02:26f7:d181::/46": "20940", - "2a03:1d80::/29": "31117", - "2001:559:8398::/48": "7016", - "2605:7280::/45": "54600", - "2001:559:5a0::/48": "33491", - "2001:678:848::/48": "8873", - "2804:4ec::/47": "28668", - "2806:213::/32": "33182", - "2c0f:f738:3803::/37": "61317", - "2001:559:37a::/48": "33651", - "2001:b50::/32": "16245", - "2001:44b8:30c0::/48": "7545", - "2406:5900::/32": "3786", - "240a:a0e9::/32": "142883", - "2a02:2d20::/32": "202096", - "2a0e:ec00::/36": "50236", - "2a0c:78c0::/29": "207133", - "2401:d800:b090::/42": "7552", - "2406:2000:ef65::/48": "58525", - "2800:bc0::/32": "20080", - "2804:268::/32": "262812", - "2a00:4802:d10::/38": "13124", - "2a01:4b40:8800::/33": "21299", - "2a02:2e02:1020::/40": "12479", - "2403:a140:100::/40": "141771", - "2801:12e::/48": "271858", - "2a00:b920::/32": "60422", - "2a06:93c0::/29": "680", - "2406:840:fbb3::/45": "139058", - "2610:108:f000::/48": "13506", - "2a06:cd40:400::/48": "43927", - "2a11:2800::/48": "42831", - "2401:d800:9140::/42": "7552", - "2404:f4c0:1101::/48": "24144", - "2604:ab80:2::/45": "55079", - "2001:559:c140::/46": "33657", - "2402:800:41ff::/38": "7552", - "2602:fca3::/48": "2165", - "2603:c002:1510::/40": "31898", - "2804:14d:ae85::/41": "28573", - "2804:5140::/32": "268440", - "2402:6800:0:3015::/46": "22822", - "2605:a404:83e::/41": "33363", - "2607:f358::/46": "18779", - "2800:490:8000::/36": "27951", - "2001:c20:c817::/48": "58562", - "2804:7d14::/32": "271537", - "2a0b:e200:1::/48": "208321", - "2a0e:8440::/29": "47373", - "2001:559:33f::/48": "33652", - "2804:3f34::/32": "262351", - "2804:7754::/32": "61604", - "2a00:13a0::/32": "31242", - "2a02:26f7:e38c::/48": "36183", - "2001:500:b::/45": "12041", - "2001:559:313::/48": "33662", - "2001:559:8067::/48": "33659", - "2a02:ca00::/29": "41307", - "2404:bc0:1::/48": "137735", - "2804:75a4::/40": "271060", - "2a10:e2c0::/29": "211441", - "2001:559:8623::/45": "7922", - "2605:5fc8::/32": "46573", - "2804:16d8:1d06::/48": "262729", - "2804:6788::/32": "269634", - "2a02:26f0:5201::/39": "20940", - "2a06:580::/29": "200590", - "2001:678:d50::/48": "213204", - "2a04:92c0::/31": "62240", - "2001:500:13f::/48": "396574", - "2408:8956:4b00::/40": "17816", - "240e:356:5c00::/34": "134419", - "2a06:cf00::/29": "62365", - "2602:fe9a:9::/48": "25687", - "2804:41f4::/37": "267468", - "2001:1420::/30": "8676", - "2405:9800:f010::/36": "45430", - "2408:8256:3d8c::/43": "17623", - "2a0d:5e80::/29": "200899", - "2402:9d80:a51::/42": "131429", - "2602:800:cc00::/38": "397695", - "2604:180::/46": "3842", - "2804:1194:f000::/44": "263424", - "2a0d:1642:1::/48": "49505", - "2001:559:c25f::/42": "7922", - "2400:7400:e032::/45": "23736", - "2406:8800:9015::/44": "17465", - "2408:8344::/35": "140726", - "240a:a689::/32": "144323", - "2a02:26f0:13e::/38": "20940", - "2a02:2e02:9430::/41": "12479", - "2001:559:2a9::/48": "33491", - "2407:56c0::/32": "142116", - "2800:110:3e01::/32": "4270", - "2804:6940::/32": "270258", - "2a02:26f7:de91::/42": "20940", - "2001:1b48::/32": "8218", - "2408:8256:399f::/38": "17816", - "240a:a291::/32": "143307", - "240a:a85d::/32": "144791", - "2804:18:7800::/43": "26599", - "2a02:faa0:2::/48": "203427", - "2a0e:b107:934::/48": "204446", - "2400:ae00:1981::/48": "38367", - "2401:ff80:1881::/44": "133954", - "2602:10f::/32": "33588", - "2804:248:4005::/46": "28598", - "2a02:e982:2e::/43": "19551", - "2804:6bb4:1600::/32": "270418", - "2a02:26f7:cac1::/46": "20940", - "2001:559:8092::/48": "33660", - "2a04:f500::/29": "33988", - "2a10:2a80::/48": "207727", - "2001:648:24a1::/39": "5408", - "2603:c0f2::/35": "6142", - "2607:fb90:3500::/36": "21928", - "2620:171:20::/46": "715", - "2804:6dd8::/32": "270559", - "2a02:26f7:b90c::/48": "36183", - "2a0b:6800::/48": "12552", - "2408:8956:da40::/40": "17622", - "2409:8915:9400::/39": "56044", - "2806:20d:1b04::/37": "32098", - "2001:49b8::/32": "21737", - "2400:7400:e011::/48": "23736", - "2406:66c0::/32": "62126", - "2409:8924:6900::/38": "56046", - "240a:a795::/32": "144591", - "240e:44d:3280::/41": "4134", - "2602:ff06:677::/48": "25720", - "2a01:3f0::/31": "8674", - "2a0f:6680::/29": "41820", - "2400:b800::/44": "45638", - "240a:af02::/32": "146492", - "240a:af89::/32": "146627", - "2620:116:3000::/44": "33024", - "2800:160:2c18::/42": "14259", - "2801:c4:26::/48": "265584", - "2a00:1480:3::/48": "50819", - "2001:559:327::/44": "7922", - "240a:a330::/32": "143466", - "2604:ce00::/32": "27425", - "2a02:26f7:eac8::/48": "36183", - "2a07:81c0::/29": "29608", - "2406:8800:9019::/46": "17465", - "240a:a473::/32": "143789", - "2600:380:4180::/37": "20057", - "2a0a:3980:2::/48": "198949", - "2a0a:b240::/29": "42584", - "2001:67c:2e88::/48": "198722", - "240e:6:d130::/44": "140083", - "2604:e180:de09::/34": "55002", - "2804:1e5c::/32": "264424", - "2a01:470::/29": "35189", - "2a02:26f0:a01::/37": "20940", - "2001:559:66::/48": "33491", - "2001:df6:da00::/48": "64312", - "2400:9380:88c0::/44": "136167", - "2402:800:5155::/42": "7552", - "2409:8014:300a::/30": "56044", - "2a0c:b641:210::/48": "209661", - "2600:80c:a00::/37": "11486", - "2600:6c33:219::/37": "20115", - "2608:4123:2::/48": "6025", - "2804:34d4::/32": "265483", - "2804:391c::/44": "262287", - "2a02:26f7:cf85::/46": "20940", - "2c0f:f288::/32": "328039", - "2001:b08:16::/48": "29581", - "2001:48d0:a000::/35": "75", - "2401:d800:d9f0::/38": "7552", - "2409:804e:1100::/36": "9808", - "2606:ae00:bbc0::/37": "7287", - "2a01:348:63::/38": "39326", - "2a02:26f7:d1::/48": "20940", - "2001:559:7df::/48": "33659", - "2001:40e8::/32": "30798", - "2400:5480::/32": "58451", - "2409:8052:1900::/37": "9808", - "2804:76a0::/32": "271124", - "2a0b:8580::/29": "206429", - "2620:7e::/44": "22414", - "2804:4c50::/32": "267363", - "2a04:6480::/29": "39923", - "2a07:6380::/29": "44821", - "2a0f:c080::/32": "44582", - "2408:8856:400::/32": "17816", - "2a0f:5701::/34": "206499", - "2001:1248:5f1a::/42": "11172", - "2001:1248:a530::/45": "11172", - "2600:6c38:25b::/45": "20115", - "2a00:9e80::/40": "56791", - "2a09:bac0:199::/48": "13335", - "2a02:26f7:55::/48": "20940", - "2001:559:1a5::/48": "33287", - "2001:559:c159::/48": "7922", - "2401:4900:5870::/44": "45609", - "2402:3a80:28::/47": "38266", - "240a:abba::/32": "145652", - "2602:fcd3:200::/48": "6233", - "2605:c080::/32": "393682", - "2a02:26f7:c58d::/42": "20940", - "2a03:ed80::/32": "13178", - "2604:9b00:3c00::/38": "14230", - "2a02:26f0:9201::/39": "20940", - "2a0a:b080::/29": "202743", - "2403:97c0:10::/44": "7489", - "2408:8957:3f00::/40": "17816", - "2409:8904:2fa0::/35": "24547", - "2600:1404:5c01::/34": "20940", - "2a02:2698:1800::/38": "51604", - "2001:67c:88::/48": "57436", - "2001:d10:9400::/38": "135478", - "2001:df3:5700::/48": "137198", - "240e:473:2800::/41": "140485", - "2804:4f98::/32": "268337", - "2a0e:3f00::/29": "197706", - "2001:559:18f::/43": "7016", - "2001:579:d0c4::/42": "22773", - "2602:feda:af3::/48": "131477", - "2620:13d:d01c::/48": "3356", - "2620:1b2:c60::/38": "26673", - "2a04:62c0::/31": "47477", - "2a0e:b107:4b8::/45": "135309", - "2402:ec00::/32": "7575", - "2408:84f3:e440::/38": "17816", - "2804:82e8::/32": "272164", - "2a02:26f7:ebc4::/48": "36183", - "2a02:9010:46::/42": "3352", - "2409:8704:d700::/31": "24547", - "2606:7300::/32": "11495", - "2806:2f0:92c2::/39": "17072", - "2001:648:25e1::/38": "5408", - "2401:a100:c010::/34": "45194", - "240a:a6fc::/32": "144438", - "2a02:4e0:10::/48": "16135", - "2a0f:c087:c3ae::/48": "212521", - "2400:8480:1000::/48": "133385", - "2406:4e40:6::/39": "140966", - "2406:9400::/32": "9253", - "240a:a789::/32": "144579", - "2804:1b54:8000::/33": "61722", - "2806:2f0:20a1::/46": "22884", - "2a00:a640:4::/32": "13445", - "2804:3040::/32": "264939", - "2001:559:4be::/48": "7015", - "2001:559:84e8::/48": "33657", - "2001:4878:2356::/48": "12222", - "2401:680::/32": "715", - "2405:7e00:17::/48": "17408", - "240a:a88f::/32": "144841", - "2804:1d80:4000::/35": "264374", - "2804:7abc::/34": "271389", - "2806:2f0:61a1::/41": "17072", - "2a07:2500::/29": "48374", - "2600:140b:1800::/48": "24319", - "2620:a:d::/48": "36008", - "2804:6650::/32": "269548", - "2a00:1b70::/29": "39642", - "240a:aead::/32": "146407", - "2605:380:19::/48": "42473", - "2610:128:4300::/32": "11686", - "2620:0:cc3::/44": "36692", - "2620:126:4000::/44": "68", - "2804:6e2c::/32": "270580", - "2804:7b74::/32": "271433", - "2806:266:300::/41": "27672", - "2001:559:86cc::/46": "7922", - "2402:c100::/36": "23673", - "2607:f6f0:2001::/48": "394749", - "2804:3ed0::/35": "266622", - "2a07:ec80:210::/47": "44949", - "2a07:f600:4010::/48": "60591", - "2001:df3:5c00::/48": "135905", - "2402:800:33e0::/44": "7552", - "2405:205:4000::/35": "55836", - "240e:3b9:1800::/34": "4134", - "2605:6a80::/32": "27531", - "2607:fb90:c151::/36": "21928", - "2806:2f0:5221::/41": "17072", - "2a0b:b400::/29": "207141", - "2001:a88::/32": "8426", - "2400:f880::/32": "42960", - "240e:964:9580::/41": "133775", - "2a09:9443::/32": "206766", - "2802:8010::/30": "22927", - "2804:1a90::/32": "61868", - "2a01:5c40:3::/48": "6807", - "2a02:2e02:f30::/41": "12479", - "2001:559:48::/48": "33657", - "240a:a311::/32": "143435", - "2804:416c::/32": "267432", - "2a0a:7400::/29": "34863", - "240a:a25b::/32": "143253", - "240a:a750::/32": "144522", - "240e:3b4:8200::/35": "140316", - "2600:1806:320::/48": "16552", - "2602:fed2:730f::/48": "53356", - "2806:2f0:7321::/43": "17072", - "2a03:f1c0::/32": "61121", - "2403:5680::/48": "7489", - "240a:af50::/32": "146570", - "2606:2800:6050::/48": "15133", - "2804:7a28:4000::/40": "271351", - "2a0c:7e41:8600::/48": "20473", - "2001:16a2:f000::/36": "25019", - "2404:afc0::/32": "138829", - "2602:feda:103::/45": "38008", - "2a05:e200::/32": "39767", - "2605:b100:600::/40": "577", - "2a01:2d8::/29": "8224", - "2402:c4c0:2::/39": "132933", - "2a00:14d0::/32": "8331", - "2a07:abc0::/29": "62000", - "2a01:760::/32": "41622", - "2a02:26f7:ec84::/48": "36183", - "2001:559:366::/48": "33660", - "2001:559:c115::/48": "33489", - "2001:67c:b0::/48": "50673", - "2402:c980::/32": "134086", - "2a00:1780:dd00::/34": "8194", - "2a09:bac0:63::/45": "13335", - "2a0e:b107:f28::/48": "212268", - "2a02:730:2000::/48": "33947", - "2001:559:873c::/46": "7015", - "2001:fb0::/36": "7470", - "2403:ac00::/32": "55826", - "240a:ab94::/32": "145614", - "2600:1402:19::/48": "20940", - "2804:5b04::/32": "268813", - "2a01:b980::/32": "57228", - "2a03:78c0::/32": "198167", - "2a06:6380::/29": "201453", - "2a07:e740:dc11::/29": "43299", - "2a10:1140::/29": "33438", - "2001:559:7e7::/48": "7922", - "2001:559:847c::/48": "7016", - "2409:8028:900::/37": "9808", - "2610:a1:30fd::/48": "397218", - "2800:5f0:3026::/47": "22724", - "2801:16a::/44": "269937", - "2402:3a80:c01f::/42": "38266", - "2a00:1d36:1140::/40": "9121", - "2a03:cc00::/32": "9183", - "2a04:5d00:71::/44": "60241", - "2a0b:e640:1::/48": "206316", - "2409:8002:2000::/40": "38019", - "2600:5c01:10de::/48": "11351", - "2804:1ae0:2::/48": "61696", - "2804:6448::/32": "269418", - "2a00:f50::/32": "21497", - "2a00:aea0:100::/38": "12678", - "2001:df4:2a00::/48": "132401", - "2a03:a140::/32": "200185", - "2402:800:97fe::/36": "7552", - "2600:1406:dc01::/38": "20940", - "2605:2080::/33": "33182", - "2a03:6bc0::/29": "43439", - "2001:df1:4480::/48": "135986", - "2401:4900:948::/40": "45609", - "2404:f4c0:f54e::/48": "140498", - "2a02:26f7:cfcc::/48": "36183", - "2001:12f0:3e::/38": "1916", - "2800:484:d100::/38": "10620", - "240a:a904::/32": "144958", - "2a00:c020:5000::/32": "200414", - "2600:9000:1e0e::/48": "16509", - "2a0e:b103:b7b::/40": "20473", - "2408:8957:cfc0::/35": "17622", - "2620:0:c91::/46": "8076", - "2806:230:200c::/48": "265594", - "2a01:728:108::/48": "12395", - "2a05:1083:a00::/40": "211398", - "2409:8704:300::/37": "24547", - "2a00:8a02::/44": "8983", - "2a0b:d080::/32": "205747", - "2001:550:1609::/39": "174", - "2408:80ea:6780::/41": "17622", - "2a00:fa40::/35": "45031", - "2a04:8c00::/29": "44772", - "2404:3980::/32": "134967", - "2804:3af8::/32": "266121", - "2804:3bf4::/32": "266182", - "2c0f:ef18::/47": "328266", - "2401:1c40::/48": "135915", - "240a:ab2a::/32": "145508", - "240e:350:6400::/31": "4134", - "2a02:4500::/32": "200567", - "2a02:7ac0::/32": "42708", - "2001:df0:480::/48": "38532", - "2600:1407:1801::/37": "20940", - "2607:f750:3000::/40": "23473", - "2c0f:f5f0::/32": "37564", - "2402:47c0:200::/32": "137280", - "2408:8957:5d00::/40": "17816", - "240e:473:6d20::/41": "140486", - "2a01:9cc0::/41": "198047", - "2001:559:128::/48": "7015", - "2001:678:34::/48": "48283", - "240e:108:11d4::/48": "131325", - "2405:ba00:8804::/48": "7160", - "240a:ad47::/32": "146049", - "2600:200::/28": "7029", - "2a02:26f7:d1cc::/48": "36183", - "2401:d800:baf0::/39": "7552", - "2403:7100::/44": "132220", - "2404:7180:f010::/48": "23848", - "240e:244:300::/28": "4134", - "2604:7e00::/42": "17378", - "2804:8130::/32": "272438", - "2a00:e200:101::/46": "41313", - "2402:800:388d::/43": "7552", - "2402:b940::/40": "138538", - "2406:8dc0:2300::/40": "17413", - "2600:1403:4401::/35": "20940", - "2600:1417:21::/44": "20940", - "2804:a00:5::/43": "262838", - "2a02:26f7:ebc5::/46": "20940", - "2001:559:832a::/48": "33652", - "2001:559:c2a8::/48": "7922", - "2001:1248:a50a::/43": "11172", - "2a00:6f40::/32": "48452", - "2001:500:16::/42": "12041", - "240a:adf8::/32": "146226", - "2600:9000:1092::/45": "16509", - "2606:e800:400::/32": "25843", - "2804:6fa0::/32": "270673", - "2600:5c01:1a2::/48": "11955", - "2804:39d8::/32": "266054", - "2a00:13b7::/48": "34762", - "2a09:8380::/48": "209672", - "2a0f:53c0::/29": "8823", - "2405:1c0:6517::/42": "55303", - "240a:a049::/32": "142723", - "2607:f750:8000::/40": "23473", - "2804:33f0::/38": "265426", - "2a02:2010:2300::/45": "20978", - "2804:5670::/32": "267998", - "2001:559:c154::/48": "33660", - "2402:800:99ee::/38": "7552", - "2403:4e00:317::/44": "45528", - "2408:8459:2050::/39": "17816", - "240a:ac04::/32": "145726", - "2606:40::/32": "36492", - "2606:b700::/32": "26809", - "2a01:7e00::/31": "63949", - "2a09:3506::/31": "208861", - "2a0b:d880:1::/46": "206344", - "2001:559:c1e7::/48": "20214", - "2001:678:ed0::/48": "212567", - "2402:800:91a9::/43": "7552", - "2607:f7a8:81d::/42": "16657", - "2804:14d:ce00::/40": "28573", - "2a01:5f7::/32": "5588", - "2402:800:bfc0::/42": "7552", - "2a00:6a00::/29": "56588", - "2a02:26f0:128::/48": "6762", - "2a03:5120:12b::/48": "2386", - "2001:559:81db::/48": "33651", - "2403:1cc0:2201::/48": "45352", - "2405:1000::/32": "45671", - "2607:f110:a2::/39": "21889", - "2620:11b:e0bc::/48": "202818", - "2804:7894::/32": "271252", - "2a05:e202::/29": "39767", - "2400:cb00:a740::/48": "13335", - "2400:cb00:a880::/47": "13335", - "2402:800:5355::/42": "7552", - "2406:4440:e000::/40": "140938", - "2a06:41c0::/45": "51559", - "2a0d:1640::/32": "200313", - "2407:5400::/32": "17551", - "2409:8020:21::/43": "56046", - "2610:1d0::/32": "40068", - "2804:4c08::/32": "267344", - "2a0e:8900::/29": "44205", - "2408:8256:3196::/48": "17816", - "2804:984::/34": "263097", - "2804:1e38::/42": "264415", - "2804:7c98::/32": "271506", - "2401:d800:d50::/42": "7552", - "2607:7d00::/32": "18780", - "2800:860:face::/48": "20299", - "2804:60b4::/32": "269185", - "2406:3d80::/32": "63620", - "240a:ade5::/32": "146207", - "2602:fed2:7119::/48": "207414", - "2606:6280::/32": "31914", - "2a02:26f7:c945::/46": "20940", - "2a0b:6900:5::/48": "206873", - "2001:559:2db::/48": "7922", - "2001:559:4fa::/48": "33491", - "240e:473:8450::/39": "4134", - "2800:4b0:8810::/33": "12252", - "2804:640::/40": "262713", - "240e:3b5:1800::/34": "4134", - "2600:6c38:b65::/37": "20115", - "2600:9000:1000::/48": "16509", - "2408:8256:66::/39": "17622", - "2408:8978::/30": "4837", - "2610:108:3000::/48": "13506", - "2620:13e:d000::/44": "32864", - "2a02:2028::/32": "15943", - "2408:8957:ad00::/40": "17816", - "2607:fc58:1:42::/64": "13536", - "2001:559:844b::/48": "7922", - "2c0f:f7a8:815f::/48": "4134", - "2a03:4d22::/32": "59397", - "2a06:c5c0:200::/48": "41436", - "2607:fdf0:5efe::/39": "8008", - "2620:107:9042::/48": "22787", - "2804:48c0::/32": "267142", - "2a0e:b107:1134::/44": "212121", - "2001:978:6712::/48": "207866", - "2001:44b8:205b::/48": "4739", - "240e:3be:5600::/34": "4134", - "2a02:1760::/32": "33864", - "2a02:6420::/32": "201596", - "240e:ff:e000::/36": "58466", - "2607:f380:805::/48": "2152", - "2804:6608::/32": "269529", - "2a0a:f00::/29": "207822", - "2001:4b22:12:1::/29": "34288", - "2a02:26f7:d108::/48": "36183", - "2a04:4440::/29": "31655", - "2a07:4340::/29": "200612", - "240e:473:750::/40": "4134", - "2600:6000:fcfd::/48": "11351", - "2803:21c0::/32": "265680", - "2a02:c080::/29": "25133", - "2001:579:601c::/42": "22773", - "2400:b4c0::/32": "134141", - "2409:8d14:2700::/36": "56044", - "2804:75ac::/32": "271062", - "2001:559:81b2::/48": "33652", - "2408:8956:ed40::/40": "17816", - "2804:7014::/32": "270704", - "2401:c00::/32": "17480", - "240a:a695::/32": "144335", - "2a00:1288:ef84::/48": "40986", - "2a00:52e0::/32": "41881", - "2a0b:8800::/46": "43376", - "2a0c:c647:fe05::/39": "50489", - "2c0f:f6d0:c2::/32": "327687", - "2804:7558::/32": "271040", - "2806:265:3300::/37": "13999", - "2001:559:729::/46": "33659", - "2001:559:c24c::/48": "33652", - "240a:a678::/32": "144306", - "2a02:26f0:9600::/48": "34164", - "2001:559:827a::/48": "33651", - "2001:67c:1748::/48": "60799", - "2404:8000:ae::/47": "17451", - "240a:a251::/32": "143243", - "2a05:4140:10::/48": "211604", - "2a06:4cc0::/29": "24633", - "2407:2640::/32": "141549", - "2409:8000::/40": "56048", - "2a03:2267::/32": "49009", - "2a0e:b107:530::/47": "209114", - "2001:4998:eff6::/44": "10310", - "2406:b400:a4::/44": "55577", - "2620:e4::/48": "17365", - "2a02:a00:e005::/35": "15987", - "2a09:3a00:6000::/48": "208394", - "2001:4e0:1050::/48": "64251", - "2800:bf0:3000::/46": "52257", - "2a06:e381::/32": "206970", - "2a0b:4342:1a80::/43": "57695", - "2a0c:16c0::/32": "59615", - "2605:8780::/32": "393457", - "2a02:ff0:3df3::/44": "12735", - "240a:a277::/32": "143281", - "240a:ae96::/32": "146384", - "2804:7f50::/32": "271680", - "2a02:26f7:ca0c::/48": "36183", - "2a03:9c80::/34": "15525", - "2a0b:8f80::/48": "48635", - "2001:268::/36": "2516", - "2409:8051:1100::/37": "9808", - "2409:8053:1100::/37": "9808", - "240e:107::/32": "4134", - "2a05:d980::/29": "200978", - "2001:4d50:fe00::/39": "34309", - "2405:fc80::/32": "23805", - "2407:2880:c001::/46": "24314", - "240a:af78::/32": "146610", - "2604:fb40::/32": "46939", - "2804:50::/35": "26592", - "2a01:18::/32": "29240", - "2001:e48:122:26::/32": "9583", - "2402:d400:6::/44": "17762", - "2607:fc48:800::/48": "40009", - "2a02:26f7:5a::/48": "36183", - "2001:978:1406::/36": "174", - "2001:1460::/32": "48635", - "2406:7ec0:9::/33": "38074", - "2804:574::/45": "53013", - "2a0c:4480:1::/46": "204720", - "2a0a:2bc0::/32": "206894", - "2400:3b00::/46": "18229", - "2404:8e01::/32": "55392", - "240e:438:3620::/43": "140647", - "2620:171:37::/44": "42", - "2804:1338::/32": "263522", - "2804:332c::/32": "265379", - "2a02:5400:820::/48": "33353", - "2603:1000::/25": "8075", - "2408:840c:8400::/40": "17621", - "2001:559:5c::/47": "7922", - "2001:559:16c::/48": "7016", - "2001:678:4a8::/48": "35062", - "2408:8957:6a00::/40": "17622", - "2600:1409:800::/48": "35994", - "2604:2900::/32": "16527", - "2605:45c0::/35": "62217", - "2408:84f3:2e90::/35": "17816", - "240e:438:4e40::/35": "4134", - "2806:2f0:9041::/42": "17072", - "2406:2000:efa5::/48": "45501", - "240a:a20a::/32": "143172", - "2a06:9380::/29": "203965", - "2a06:fb40::/30": "203385", - "2001:559:578::/48": "7016", - "2001:df2:d680::/48": "132010", - "2400:a980:2000::/38": "133111", - "2804:b28::/32": "52944", - "2804:7a88::/32": "271377", - "2a04:1c43::/29": "201035", - "2a05:b700::/29": "201086", - "2a00:1cf0::/32": "196724", - "2a00:86c0:263::/35": "2906", - "2001:559:43e::/48": "20214", - "2405:1c0:6665::/43": "55303", - "240a:a339::/32": "143475", - "2804:792c::/32": "271289", - "2a02:5d8::/32": "8596", - "2a04:2f81:6::/29": "61157", - "2a02:e180::/46": "15135", - "2001:4998:15d::/42": "10310", - "2400:3240:9000::/33": "63996", - "2600:370f:7268::/46": "32261", - "2607:6000:300::/40": "12189", - "2607:b100::/32": "40555", - "2804:14c:486::/44": "28573", - "2804:d7c:101::/40": "52634", - "2a0e:b107:180::/44": "6556", - "2401:ff80:1a91::/46": "133954", - "2407:ea00::/32": "56059", - "2408:8957:cd40::/40": "17816", - "2409:8752:900::/38": "56047", - "2001:559:1db::/48": "7016", - "2403:ad80:80::/44": "134835", - "2402:800:54d3::/44": "7552", - "2407:a600:2000::/36": "18004", - "2409:8c1e::/34": "9808", - "2a02:6b8:4::/48": "13238", - "2a10:9107:f000::/36": "209588", - "2600:40fc:1017::/30": "701", - "2a03:1ac0:2e93::/33": "9049", - "2a03:5342:10::/42": "200656", - "2408:84f3:9410::/42": "134543", - "2409:8c20:4a23::/37": "56046", - "2604:6400:40e0::/37": "29974", - "2604:8540:fd01::/48": "33353", - "2a0f:b506:ff02::/40": "206313", - "2001:4878:31::/48": "12222", - "2607:700:500::/36": "22343", - "2c0f:f188:7::/48": "328228", - "2400:9380:8fc0::/44": "136167", - "240a:afd2::/32": "146700", - "2607:fcf8:b0b1::/36": "26788", - "2804:2ad8::/32": "265122", - "2a02:e980::/42": "19551", - "2001:559:5f5::/48": "22909", - "2404:c8:2::/48": "27435", - "240a:a3f3::/32": "143661", - "2804:30b8:caff::/34": "28154", - "2804:4d3c:5cc0::/39": "267420", - "2a02:2ab0:220::/37": "702", - "2001:1358::/32": "11960", - "2409:8904:a140::/38": "24547", - "240a:a6d2::/32": "144396", - "2602:fc5d:350::/48": "399866", - "2804:f24:9a10::/48": "263567", - "2a02:26f7:edc9::/42": "20940", - "2a0e:a400::/29": "209042", - "2408:890c::/31": "17621", - "2806:20d:161e::/47": "32098", - "2001:559:771::/48": "13367", - "2400:fa80:4::/46": "133480", - "2600:6c26::/28": "20115", - "2804:1f4::/32": "262757", - "2a01:ce89:2000::/32": "51964", - "2a0e:2580::/29": "197915", - "2001:559:855c::/48": "7922", - "240a:a97f::/32": "145081", - "2600:380:fe00::/31": "20057", - "2606:2800:5110::/48": "15133", - "2800:160:28e2::/38": "14259", - "2a11:4780::/29": "56897", - "2001:559:86ad::/48": "7016", - "2408:840c:a200::/40": "17621", - "2607:f6f0:3001::/48": "394749", - "2a09:1380::/29": "209815", - "2001:579:b8d4::/39": "22773", - "240e:438:9020::/43": "140647", - "2604:b480:fffe::/47": "46841", - "2800:190:200::/37": "11664", - "2804:4c1c::/32": "267350", - "2607:f358:15::/48": "54500", - "2001:678:610::/48": "202967", - "2a0e:6600::/29": "205516", - "2001:559:555::/48": "7922", - "2001:559:c11f::/48": "33489", - "2001:559:c332::/48": "33659", - "240e:6ba:4020::/32": "4134", - "2806:230:2009::/48": "11888", - "2001:df0:295::/48": "58516", - "240a:a060::/32": "142746", - "2a00:17c8::/31": "12511", - "2a0f:2c80::/48": "40676", - "2403:ddc0::/32": "138388", - "2804:c30::/32": "28284", - "2401:1740:2000::/48": "136600", - "2408:8456:4010::/42": "134543", - "2607:bb80::/32": "395774", - "2607:ffb0:4005::/35": "6327", - "2a02:2698:c00::/35": "39435", - "2a09:2280::/48": "209792", - "2001:559:81e7::/48": "33491", - "240a:a709::/32": "144451", - "2804:4988::/32": "267189", - "2804:6678::/32": "269561", - "2a03:3da0::/48": "59649", - "2405:84c0:fadf::/42": "9886", - "240a:a1a0::/32": "143066", - "240e:108:1270::/44": "140061", - "2001:8b0:0:50::/58": "20712", - "2405:aac0:fe::/48": "139949", - "240a:a404::/32": "143678", - "2804:6ea0:4030::/32": "270609", - "2a00:bfc0::/35": "34757", - "2a07:6c40::/29": "29505", - "2a0d:b780::/29": "209549", - "2403:7100:a::/48": "142033", - "240a:a13e::/32": "142968", - "2605:a401:81ac::/43": "33363", - "2806:2f0:310::/46": "22884", - "2a02:f20::/32": "197695", - "2a02:26f7:ec09::/46": "20940", - "2404:3d00:4136::/47": "21433", - "2408:8459:a230::/41": "17622", - "2620:136:c000::/48": "40337", - "2c0f:f738:2202::/35": "61317", - "2a02:26f7:f309::/42": "20940", - "2400:7400:e01c::/46": "23736", - "2406:ea00::/32": "131322", - "240a:ab8e::/32": "145608", - "2600:141b:d801::/34": "20940", - "2620:123:2003::/45": "30103", - "2804:5498::/32": "268660", - "2804:66c4:8000::/33": "269581", - "2001:559:808d::/48": "7016", - "2801:146::/48": "19429", - "2001:550:2200:205::/62": "174", - "2001:559:85c9::/46": "7922", - "2001:43d0::/32": "37061", - "2001:4998:28::/48": "36229", - "2408:8456:1b40::/40": "17816", - "240e:a7:8800::/37": "134419", - "2602:fd26:1::/48": "22855", - "2804:14c:6589::/43": "28573", - "2600:100f:b100::/42": "6167", - "2606:ef80::/45": "7226", - "2804:2388::/32": "264168", - "2a00:d540::/29": "49250", - "2a0e:97c5:654::/46": "20473", - "2001:470:156::/48": "25948", - "2001:1248:8441::/45": "11172", - "2600:140b:e401::/38": "20940", - "2a07:bc0::/29": "197393", - "2a0a:540::/29": "205892", - "2a0e:6540:a16::/48": "208364", - "2a02:45c0:15::/48": "59675", - "2001:559:c316::/48": "33660", - "2401:3cc0:5::/38": "137409", - "2406:3000:1000:100::/31": "4657", - "2408:8957:600::/40": "17622", - "240a:a0d4::/32": "142862", - "2600:141b:15::/36": "20940", - "2606:2800:5011::/46": "15133", - "2a03:ad40:420::/48": "54995", - "2001:559:30f::/48": "33287", - "2001:559:c36f::/48": "7725", - "2607:fdc8:fff4::/44": "30036", - "2a0f:5707:aa70::/44": "213377", - "2a0f:5707:abc2::/44": "210887", - "2001:559:14f::/48": "33287", - "2409:8924:4900::/38": "56046", - "240e:438:9420::/43": "140647", - "2800:160:1669::/43": "14259", - "2a01:158::/32": "3249", - "2405:1c0:6651::/46": "135062", - "2408:84f3:4610::/42": "134543", - "2600:1006:b0f0::/44": "22394", - "2a0b:3080:20::/32": "206516", - "2a04:207:ffff::/48": "48101", - "2001:559:54b::/48": "33657", - "240a:a0b2::/32": "142828", - "240e:473:fffe::/48": "140486", - "2620:c1:4000::/48": "26988", - "2803:22a0::/32": "266853", - "2804:16f4::/32": "263110", - "2804:3574::/32": "266287", - "2001:559:853b::/48": "33491", - "2001:19d0:600::/40": "12025", - "2404:bf40:8001::/48": "2764", - "2408:8956:cfc0::/35": "17622", - "2600:140b:e001::/37": "20940", - "2a0b:4342:1a20::/44": "57578", - "2001:253:101::/48": "142067", - "2400:6980::/32": "7575", - "2408:8456:ba10::/42": "134543", - "2606:a300::/46": "35847", - "2800:3c0:1050::/40": "19863", - "2804:194::/32": "53131", - "2a02:26f0:8600::/48": "34164", - "2001:470:b2::/48": "394894", - "2409:8052:2c00::/38": "9808", - "2804:19b0::/32": "61812", - "2602:10d::/33": "20115", - "2804:1ea8::/32": "264442", - "2a02:26f7:b680::/48": "36183", - "2001:559:84ef::/48": "7922", - "2402:7700::/32": "18074", - "2803:6700:226::/48": "263210", - "2803:e820::/32": "264750", - "2a00:eb8::/32": "200044", - "2a09:bac0:251::/48": "13335", - "2001:559:8214::/48": "7015", - "240e:438:7c40::/38": "4134", - "2604:9980:2::/48": "17216", - "2804:18c8::/32": "53119", - "2a00:e460::/32": "62251", - "2607:f148:103::/48": "11734", - "2001:67c:15a2::/48": "61317", - "240e:1d:5000::/32": "4134", - "2804:1420:2000::/32": "52901", - "2a02:26f7:c0c4::/48": "36183", - "2001:559:8530::/48": "7922", - "2607:f0d0:3502:2f::/59": "36351", - "2804:3bc:2::/32": "28624", - "2804:f2c:5800::/32": "53191", - "2001:1868:a10b::/48": "63366", - "2001:1948::/32": "210", - "240a:a670::/32": "144298", - "2604:ee80::/32": "7276", - "2803:9800:98c5::/46": "11664", - "2803:b440::/32": "263785", - "2804:49c:319::/48": "15201", - "2a0a:48c1::/32": "29422", - "2001:559:4ff::/48": "33491", - "2408:84e3::/29": "4837", - "2605:3b40::/32": "54904", - "2804:301:8000::/34": "53237", - "2804:56c::/39": "28210", - "2804:5cbc::/32": "268927", - "2404:1f00:ffa0::/47": "9498", - "240a:a50e::/32": "143944", - "2806:2f0:2461::/46": "22884", - "2a04:64c0::/29": "208484", - "2806:2f0:20c1::/46": "22884", - "2001:fb0:109e::/48": "55476", - "240a:a973::/32": "145069", - "2804:236c::/32": "264161", - "2a02:44a0:ffff::/48": "61955", - "240e:108:2b::/48": "58563", - "240e:3b3:dc00::/34": "4134", - "2606:2800:60f7::/44": "15133", - "2806:283:5000::/36": "265515", - "2a01:57a0::/32": "208909", - "2a0a:fe00::/30": "207072", - "2800:160:150d::/43": "14259", - "2806:363::/35": "265607", - "2a05:f240::/29": "1828", - "2001:559:8684::/46": "7922", - "2001:19f8::/38": "4927", - "2401:c440::/48": "135905", - "2405:f280:15::/42": "131464", - "240e:91f::/32": "4134", - "2604:fb80:1600::/48": "15128", - "2620:115:40fe::/48": "4583", - "2001:559:81a1::/48": "7922", - "2001:1248:96d9::/42": "11172", - "2401:d800:5b50::/42": "7552", - "2401:d800:9410::/42": "7552", - "2806:2f0:8104::/42": "17072", - "2a07:a340::/32": "62217", - "2a0b:5800::/32": "62167", - "2001:559:1da::/48": "33659", - "240a:a638::/32": "144242", - "240e:44d:1300::/41": "140345", - "2804:67e4::/32": "269657", - "2409:8053:3802::/40": "56047", - "2605:1b00::/32": "25999", - "2806:32d::/32": "28431", - "2a00:4802:330::/41": "13124", - "240e:964:c400::/39": "133775", - "2607:ff00:500::/40": "11572", - "2804:498c::/32": "267190", - "2a00:c760::/32": "47381", - "2a0c:20c0::/29": "204344", - "2001:559:1ea::/48": "33287", - "2406:6e00:f049::/36": "17457", - "240a:aa7b::/32": "145333", - "2001:559:5cc::/48": "33491", - "2401:4900:4d40::/44": "45609", - "2a02:f480::/29": "60717", - "2a06:8800::/29": "12517", - "2a0b:fd81::/48": "49419", - "2001:67c:10d0::/48": "43101", - "2804:260::/32": "53214", - "2a01:298::/40": "30880", - "2405:6e00:488::/43": "18291", - "240a:ad5d::/32": "146071", - "240a:afc8::/32": "146690", - "2a01:c50e:b300::/36": "12479", - "2a05:4700:100::/47": "43578", - "2800:160:20e9::/39": "14259", - "2001:678:2dc::/48": "786", - "2001:c20:48b3::/45": "3758", - "2403:2d00::/32": "17516", - "240e:3b9:2c00::/35": "134774", - "240e:473:6600::/41": "140485", - "2600:a00::/31": "16904", - "2605:bb00:8000::/35": "32940", - "2804:cdc::/32": "52565", - "2a0a:340:1a00::/40": "56807", - "2600:1406:2801::/38": "20940", - "2804:8294::/32": "272527", - "2a02:26f7:ee40::/48": "36183", - "2a03:1aa0:9000::/33": "201730", - "2001:559:82c0::/48": "7015", - "2001:67c:290::/48": "42195", - "2408:8779:4000::/32": "4837", - "2409:8c04:1116::/31": "24547", - "240a:abde::/32": "145688", - "2a02:16c8:4000::/32": "6871", - "2a02:ee80:411d::/48": "3573", - "2001:418:4005::/48": "1412", - "2409:8d20::/29": "56046", - "2600:1404:801::/35": "20940", - "2607:ff60:11::/33": "3900", - "2a01:7dc0::/32": "204274", - "2804:56d4::/32": "268026", - "2804:5de4::/34": "268999", - "2806:230:2023::/48": "11888", - "2001:470:1b::/42": "6939", - "240a:aeb3::/32": "146413", - "2602:fc62:a::/47": "399760", - "2a00:114f:4::/46": "199295", - "2a0e:b1c0::/29": "41918", - "2001:468:1f10::/47": "396955", - "2001:978:4204::/37": "174", - "2001:18e8:c04::/32": "19782", - "2602:fca7:f02::/47": "399318", - "2804:52c::/32": "262501", - "2804:6fc:bfff::/33": "28158", - "2804:a14:4c01::/32": "262342", - "2408:840c:ba00::/40": "17621", - "2600:6c38:34b::/43": "20115", - "2804:7508::/32": "271019", - "2a03:3d60::/29": "35394", - "2400:cb00:211::/44": "13335", - "2408:8026:480::/42": "17621", - "2606:5000:2400::/36": "209", - "2607:9480:f0::/44": "14338", - "2607:fda0::/32": "27008", - "2804:18:7840::/44": "26599", - "2a01:41e3::/32": "62336", - "2001:578:d50::/31": "22773", - "2001:dc7:ffd2::/48": "24406", - "2603:9033:7000::/36": "33363", - "2801:1e:c800::/48": "19429", - "2804:14c:bba5::/44": "28573", - "2001:67c:1b00::/48": "58027", - "240a:aade::/32": "145432", - "240e:3be:7a00::/32": "140313", - "2804:e94:79::/40": "262468", - "2001:12f0:940::/38": "1916", - "2001:678:49c::/48": "44574", - "2001:4210:350a::/32": "25818", - "2a04:a040::/29": "21277", - "2a0b:1580::/29": "206766", - "2c0f:f568:3::/32": "37451", - "2409:801e:3004::/48": "24400", - "2409:897d::/30": "9808", - "2604:9580::/32": "11127", - "2604:ad40::/32": "395795", - "2804:104c:a000::/40": "263629", - "2a02:26f0:9601::/40": "20940", - "2a02:26f7:f3cd::/42": "20940", - "2001:4158::/29": "8201", - "2400:aa00:fa::/32": "9873", - "2401:4900:2e80::/43": "45609", - "2403:fbc0:1000::/48": "23959", - "2405:a900:fffe::/48": "55992", - "2408:8459:26c0::/36": "17816", - "2a0c:36c7::/32": "34702", - "2001:67c:2f3c::/48": "205970", - "2401:ff80:168b::/45": "133954", - "2402:c340:cacc::/37": "38047", - "2409:8053:802::/40": "56047", - "2607:7c80:c0ff::/34": "64260", - "2620:14a::/36": "13684", - "2001:550:200:1::/60": "174", - "2001:559:526::/48": "7016", - "2401:fd80:8ff::/39": "138177", - "2801:1fa::/44": "19429", - "2a02:a800::/26": "6739", - "2a03:82e0:2000::/32": "200991", - "2a10:7440::/29": "12552", - "2001:559:3bd::/46": "33651", - "2001:ac8:89::/43": "9009", - "2409:8c44:3::/37": "24445", - "2804:b04::/33": "52934", - "2a02:618:6::/47": "15774", - "2400:cb00:11::/46": "13335", - "2804:4cac::/32": "267384", - "2a06:8dc7::/48": "25369", - "2001:1258::/32": "28499", - "2401:dd40:1::/48": "24289", - "2408:8356::/28": "17816", - "2606:ef80:7::/32": "7226", - "2a06:e80::/36": "43350", - "2602:ff19::/36": "395033", - "2803:af60::/32": "264637", - "2804:3d74::/32": "262617", - "2a01:a080::/32": "30915", - "2001:67c:114::/48": "9150", - "2001:df7:7800::/48": "17523", - "240a:a2f2::/32": "143404", - "2a00:ea60:200::/40": "43463", - "2001:678:2d4::/48": "198284", - "240e:698:4700::/40": "131325", - "2803:4840::/32": "263757", - "2a10:5940::/29": "207603", - "2001:1250:bc00::/44": "22894", - "2804:13b0:fc00::/38": "263546", - "2806:370:82b0::/41": "28403", - "2401:4900:54b1::/48": "45609", - "240a:a6f4::/32": "144430", - "2804:188:b1a2::/33": "262750", - "2a06:1b00:101::/46": "8302", - "2001:559:87d8::/47": "7015", - "240a:a69d::/32": "144343", - "2605:2b00::/32": "19881", - "2607:9b80:420::/39": "46558", - "2a0a:5780::/32": "47490", - "240a:a77d::/32": "144567", - "2804:63a8:1002::/32": "269375", - "2a02:2770::/32": "196752", - "2a0a:5e40::/32": "200353", - "2001:559:800a::/48": "33657", - "2400:adc7:2000::/39": "9541", - "2804:710:10::/40": "17222", - "2620:88:8001::/48": "46269", - "2a04:3e00:1001::/29": "56910", - "2801:80:6e0::/44": "262829", - "2804:c78::/32": "52714", - "2a02:a18::/32": "29492", - "2a02:26f7:b940::/48": "36183", - "2001:500:c0::/47": "12041", - "2001:978:2:c1::c:0/38": "174", - "2001:df1:d00::/48": "136302", - "2405:e300::/32": "132506", - "2a02:ff0:1ef1::/44": "12735", - "2001:418:e401:3::/64": "14427", - "2001:67c:2d30::/48": "207575", - "2409:8924:b300::/37": "56046", - "2607:ac80::/40": "17", - "2607:e880:501::/48": "12220", - "2804:14d:9484::/41": "28573", - "2804:5888::/32": "268130", - "2a0b:b582::/48": "43304", - "2401:ff80:1a0d::/46": "133954", - "2402:45c0::/48": "38221", - "240e:938:a00::/44": "139203", - "2620:106:e001::/46": "40428", - "2804:e30:405::/44": "11338", - "2001:43f8:ac0::/48": "37356", - "2403:e800:516::/44": "4637", - "240a:a379::/32": "143539", - "2600:6000:f97f::/38": "12271", - "2620:0:e10::/48": "40387", - "2804:1300:8000::/48": "263509", - "2a02:2ab8::/39": "702", - "2001:559:1c0::/47": "33651", - "2001:559:3bc::/48": "33657", - "2001:559:3cd::/48": "7725", - "2001:67c:2dc4::/48": "25411", - "2606:1a40:1000::/43": "398962", - "2620:149:1405::/40": "714", - "2a01:4a0:57::/35": "201011", - "2a03:44a0:100::/48": "200521", - "2001:678:dbc::/48": "213067", - "240a:ad9d::/32": "146135", - "240e:438:6e20::/43": "140647", - "2a02:2398:2::/48": "41008", - "2608:148:b::/48": "27064", - "2803:d700:db00::/34": "61461", - "2400:8b00:a400::/44": "45727", - "2408:8956:7c00::/40": "17622", - "2600:380:b580::/36": "20057", - "2806:20d:1912::/38": "32098", - "2806:20d:520b::/43": "32098", - "2001:4130:21::/39": "24725", - "2001:44b8:24::/48": "7545", - "2409:8924:5500::/38": "56046", - "2600:1417:3c::/48": "24319", - "2a01:ce91::/36": "51964", - "2a02:26f7:e5c0::/48": "36183", - "2409:8924:500::/38": "56046", - "2620:129:9000::/48": "17216", - "2001:678:b9c::/48": "207853", - "240e:67c:8800::/38": "140330", - "2607:f7f8:4459::/48": "4459", - "2800:bf0:8066::/43": "27947", - "2001:559:c277::/48": "33657", - "2001:1250:fe00::/48": "22894", - "2804:63f4::/32": "269394", - "2001:559:843d::/48": "7016", - "2402:800:5a2b::/41": "7552", - "2620:149:522::/41": "714", - "2803:5200:1::/36": "64116", - "2806:2f0:4161::/40": "17072", - "2804:e30:2c00::/38": "11338", - "2604:55c0:a::/45": "4138", - "2804:61dc::/33": "269261", - "2a0d:a680::/32": "204609", - "2001:67c:16cc::/48": "59469", - "2001:2001:6100::/32": "1299", - "2001:4200:ab10::/33": "2018", - "2408:8756:af1::/37": "136958", - "240e:104:5000::/34": "4134", - "2602:feda:ae2::/47": "138181", - "2804:1a28::/32": "52644", - "2403:98c0:2000::/32": "138320", - "2404:bf40:8841::/48": "7545", - "2607:f718::/32": "11847", - "2001:4288::/39": "6713", - "2001:4888:8064::/44": "22394", - "2a01:b740:a24::/48": "6185", - "2a0d:3bc0::/29": "60781", - "2600:140f:5400::/48": "9498", - "2a02:2698:6400::/38": "56420", - "2a04:2e80:9::/48": "59860", - "2001:1400::/48": "1881", - "2806:230:4022::/48": "265594", - "2400:fc00:4a10::/42": "45773", - "240a:afe0::/32": "146714", - "2600:6c34:1e::/48": "33588", - "2a01:53c0:fff4::/44": "54994", - "2a01:b740:a09::/48": "714", - "2001:df3:7c80::/48": "140577", - "2408:862a:a800::/33": "4837", - "2409:8904:3ca0::/39": "24547", - "240e:698:2600::/40": "4134", - "2604:ae00::/46": "7029", - "2a0c:f7c0::/29": "200374", - "2001:559:80ba::/48": "33287", - "2400:c700:1203::/39": "55644", - "2600:c08:2016::/32": "10913", - "2a00:4080::/48": "41609", - "2a02:7e60::/32": "200925", - "2a04:4480::/32": "211037", - "2402:db40:2::/33": "131486", - "2804:6d8:3::/32": "262609", - "2804:46fc:5011::/34": "267024", - "2804:7604:8000::/34": "271084", - "2a00:1838::/32": "43317", - "2a02:26f0:cd00::/48": "34164", - "240e:982:d300::/40": "134756", - "2a02:4440::/32": "60185", - "2409:8c1e:27b0::/33": "9808", - "240a:a070::/32": "142762", - "240a:a719::/32": "144467", - "2604:5000:19::/35": "7752", - "2804:3ca0::/32": "61599", - "2a01:9f80::/32": "16006", - "2a0e:97c0:2b0::/47": "211553", - "2001:67c:2620::/48": "25238", - "2408:8957:c500::/40": "17816", - "2602:ff99:4::/47": "14333", - "2620:a8:4000::/48": "393900", - "2001:559:c2de::/48": "7922", - "2001:16a2:c400::/36": "25019", - "2602:fdd9::/36": "396935", - "2604:a180:a000::/35": "22933", - "2a02:26f7:e280::/48": "36183", - "2405:9800:b002::/45": "133481", - "2600:1406:3f::/41": "20940", - "2a0e:b107:eb1::/48": "212120", - "2001:559:840e::/48": "33659", - "240a:a422::/32": "143708", - "2a0b:6300::/29": "33983", - "2401:fd80:ffb1::/48": "139853", - "2806:20d:1601::/45": "32098", - "2a03:3a40::/47": "199629", - "2c0f:ec70::/32": "328341", - "240a:a21c::/32": "143190", - "240e:981:7000::/40": "140061", - "2600:6c38:b54::/46": "20115", - "2a01:5740::/31": "57763", - "2a06:1b00::/40": "8302", - "2a0e:b105:674::/44": "20473", - "2a02:ac80:201::/39": "25145", - "2401:ff80:1093::/39": "133954", - "240e:44d:6100::/41": "140345", - "2607:f6f0:20c::/48": "32550", - "2620:b4::/48": "1341", - "2804:4c58::/32": "267365", - "2806:2f0:7161::/40": "17072", - "2a00:1ca8:2d::/41": "50673", - "2001:559:1ac::/48": "20214", - "240a:ab8d::/32": "145607", - "2a09:9180:ecfd::/48": "42081", - "2001:559:8712::/47": "7725", - "2001:6d8::/32": "8267", - "2402:2840::/32": "10011", - "240a:ac15::/32": "145743", - "2803:e7c0::/32": "265769", - "2a0a:a040::/31": "12552", - "2620:8d:4000::/48": "7954", - "2804:6598::/32": "269502", - "2a05:4144::/32": "213388", - "2a0b:f302:463::/29": "62240", - "2001:1b70:81::/48": "16086", - "240e:964:ea00::/40": "133776", - "2605:ed00:6888::/32": "11427", - "2801:13e::/45": "19429", - "240a:a476::/32": "143792", - "2600:1004:a030::/40": "22394", - "2600:370f:75a1::/45": "32261", - "2804:5364:6000::/36": "268581", - "2a02:9010:45::/48": "20905", - "240a:a3f8::/32": "143666", - "2600:6c38:cc::/46": "20115", - "2607:f110:28::/43": "21889", - "2a02:2e02:8330::/40": "12479", - "2001:df5:4c80::/48": "141388", - "2001:44b8:30b2::/48": "7545", - "2404:4a00:4:1::/36": "45629", - "2001:67c:2d2c::/48": "206321", - "2406:2fc0::/32": "138997", - "2804:5010::/32": "268367", - "2806:20d:3603::/33": "32098", - "2a02:26f7:a0::/48": "36183", - "240a:a5f6::/32": "144176", - "2605:6400:100::/48": "53667", - "2607:7a00::/32": "26241", - "2402:7940::/32": "134090", - "240a:aca2::/32": "145884", - "240e:473:5050::/39": "4134", - "2a05:d050:60c0::/44": "16509", - "2a07:85c1::/48": "174", - "2001:1b70:82b6::/48": "158", - "240a:a6a6::/32": "144352", - "2604:eb00::/38": "19212", - "2806:2f0:9142::/42": "17072", - "2600:140b:bc01::/33": "20940", - "2806:322:2001::/32": "28546", - "2001:428:6402:6::/54": "209", - "2001:559:f3::/48": "33651", - "2001:579:1164::/36": "22773", - "240a:a8da::/32": "144916", - "2600:1003:b0a0::/44": "6167", - "2a02:ee80:40d8::/39": "3573", - "2a03:2880:f255::/44": "32934", - "2001:18e8:10::/38": "19782", - "2402:800:b590::/42": "7552", - "2a01:758:fff7::/44": "3326", - "2a02:26f7:c909::/42": "20940", - "2408:8957:b900::/40": "17816", - "2804:371c:2::/48": "266390", - "2a04:fee3::/32": "49774", - "2a07:380::/29": "49596", - "2a0e:b105:66c::/46": "20473", - "2a0e:b107:150::/44": "62075", - "2a01:5c8:806::/32": "12312", - "2001:559:85d1::/48": "7922", - "2405:11c0::/32": "134000", - "2408:8456:4040::/38": "17816", - "2408:8459:8630::/41": "17622", - "240a:af69::/32": "146595", - "2806:230:1009::/48": "11888", - "2806:230:3013::/48": "11888", - "2a02:26f7:64::/48": "36183", - "2408:8957:f8c0::/37": "17816", - "2801:11:4800::/48": "269850", - "2a04:1b40::/29": "20861", - "2001:559:73b::/48": "7015", - "2408:8456:4c00::/42": "17622", - "2607:a800:773::/48": "15695", - "2804:93c:1031::/40": "52878", - "2001:448a:4050::/42": "7713", - "2402:800:3b0f::/43": "7552", - "2402:800:3e40::/43": "7552", - "2806:2f0:2441::/46": "22884", - "2001:548::/32": "30432", - "2602:fff4::/32": "54869", - "2800:160:1317::/44": "14259", - "2804:15ec::/36": "28599", - "2a02:278::/32": "42227", - "2a06:a8c0:1::/48": "29017", - "2a07:3e00::/29": "559", - "2600:140f:1201::/37": "20940", - "2804:1b2:4042::/36": "18881", - "2a02:418::/29": "29691", - "2a07:62c0::/29": "202970", - "2001:559:c3c6::/48": "33287", - "2001:56b:e00c::/35": "852", - "2600:6c38:616::/44": "20115", - "2607:f5b4::/32": "395954", - "2a03:1980::/40": "48260", - "2406:400::/32": "7654", - "240a:a456::/32": "143760", - "2600:1000:a000::/43": "6167", - "2620:127:d011::/46": "394941", - "2a06:6540:1201::/48": "8220", - "2001:1900:2262::/48": "21775", - "2403:4280::/48": "4808", - "2001:559:5d3::/48": "33657", - "2001:1bf0::/29": "2586", - "2406:52c0::/32": "139141", - "2408:8256:30a0::/39": "17816", - "2804:73a4::/32": "270928", - "2a02:8010::/29": "13037", - "2402:4000:12d0::/42": "18001", - "2407:a300::/32": "132497", - "2001:418:142e:200::/55": "16625", - "240a:a1a4::/32": "143070", - "2a02:26f7:3a::/48": "36183", - "2001:df2:2100::/48": "136821", - "2404:b0:1002::/45": "4750", - "2a0b:6903:1ad::/48": "212461", - "240e:982:e200::/40": "4816", - "2602:ff18:216::/48": "21973", - "2605:a401:8960::/40": "33363", - "2610:1a0:301::/33": "40193", - "2804:75e4::/32": "271076", - "2a09:b687::/32": "208861", - "2a0e:97c0:2f0::/44": "211540", - "2405:6e00:2e00::/35": "133612", - "2406:ef40::/47": "133811", - "240a:aa8d::/32": "145351", - "2604:8440::/32": "32217", - "2607:f7a0:b::/43": "46562", - "2804:8280::/37": "272521", - "2a04:57c0::/29": "62183", - "2001:559:735::/48": "7015", - "2001:67c:18a0::/48": "39686", - "240a:a09c::/32": "142806", - "2620:76:6000::/48": "54544", - "2001:1a68:19::/46": "57367", - "2402:800:5c1d::/42": "7552", - "2409:8924:8f00::/35": "56046", - "240a:a1c2::/32": "143100", - "2600:100e:b1e0::/36": "6167", - "2620:128:7002::/47": "32030", - "2804:70c8::/32": "270748", - "2001:67c:1220::/46": "197451", - "2401:d800:56b0::/41": "7552", - "2409:8052:3800::/47": "56047", - "240a:a480::/32": "143802", - "2604:e180:de06::/44": "55002", - "2a02:2e02:9040::/43": "12479", - "2a05:ffc0::/32": "198317", - "2001:559:565::/48": "7922", - "240e:438:9c40::/38": "4134", - "2804:7d88::/32": "271567", - "2a02:c98::/32": "48918", - "2a07:1ec0::/29": "41364", - "2a0a:bf40::/36": "205943", - "2400:400:9::/48": "4766", - "2605:a401:8950::/44": "33363", - "2620:111:d00a::/47": "18828", - "2804:88:4000::/36": "28135", - "2a00:1fa2:ba00::/40": "42087", - "2a02:26f0:d1::/48": "34164", - "2001:559:84bd::/48": "7922", - "2001:df2:e180::/48": "140216", - "2409:8904:35a0::/38": "24547", - "2620:a4:2050::/48": "394592", - "2a00:1158::/47": "8972", - "2001:559:c070::/48": "33652", - "2604:4300::/36": "33387", - "2a01:6d8::/32": "30889", - "2c0f:f720::/32": "327767", - "2605:cc00::/32": "15065", - "2a02:7280::/32": "49572", - "2a07:3500:1998::/48": "38915", - "2401:b200:93::/32": "24186", - "2403:1280::/32": "141397", - "2803:6b80::/32": "28093", - "2a02:26f7:c981::/46": "20940", - "2001:67c:135c::/48": "12552", - "2001:1a11:9a::/48": "8781", - "2001:44b8:30c2::/48": "7545", - "2404:3c00:1000::/32": "23944", - "2a02:26f7:f1c9::/42": "20940", - "2a02:26f7:d851::/42": "20940", - "2001:3c8:5008::/37": "4621", - "2404:0:6000::/36": "24155", - "240a:aa1d::/32": "145239", - "2610:a1:1080::/48": "397218", - "2620:117:7010::/40": "26955", - "2a10:d880::/29": "211995", - "2804:314:4013::/45": "61568", - "2a02:26f0:d100::/48": "9121", - "2a03:c200::/32": "33814", - "2001:559:522::/48": "7015", - "2409:8000:3100::/37": "9808", - "2a0e:2bc0::/29": "61048", - "2001:470:df::/42": "6939", - "2001:559:8420::/48": "7016", - "2806:2f0:1100::/46": "22884", - "2401:7400:801:d::/33": "4773", - "240e:3be:9200::/36": "140317", - "2605:7900:1000::/48": "42831", - "2804:774::/38": "52858", - "2a01:8840:aa::/45": "12041", - "2a02:d28::/32": "3257", - "2001:559:589::/48": "20214", - "240a:a827::/32": "144737", - "2606:2e00:8000::/48": "32780", - "2a0d:a8c0::/29": "39405", - "2001:4490:d970::/46": "9829", - "240e:3bd:9c00::/34": "140310", - "2800:160:1eef::/43": "14259", - "2a00:a520::/32": "198570", - "2402:800:629a::/42": "7552", - "2804:5534:e000::/37": "268696", - "2a07:e02:baf::/48": "210083", - "2001:67c:2330::/48": "56963", - "2001:df2:7480::/48": "139909", - "2a02:26f0:e501::/38": "20940", - "2a02:2e02:ea0::/43": "12479", - "2001:678:de4::/48": "57632", - "2c0f:eb68::/32": "36924", - "2a09:bac0:100::/48": "13335", - "2001:559:856f::/48": "33652", - "2607:e400:2904::/46": "7459", - "2804:4838::/32": "267105", - "2a00::/22": "3209", - "2a00:fb8:4700::/34": "8881", - "2a00:f826:b::/43": "34549", - "2a03:f80:40::/48": "9009", - "2a0e:46c4:2930::/48": "138435", - "2001:559:8695::/48": "33287", - "240a:af0d::/32": "146503", - "2a02:26f7:e508::/48": "36183", - "2a0a:be80::/29": "43391", - "2a0d:5600:a32::/48": "9009", - "2606:6d00::/39": "1403", - "2a00:d580:4900::/40": "16365", - "2a0f:f0c0::/32": "6830", - "2401:8d00:3::/45": "38345", - "2402:9e80:24::/48": "137219", - "2403:6c0:137::/48": "137366", - "2605:7840:8000::/35": "12130", - "2804:3ef4::/32": "266631", - "2a0b:a280::/48": "203377", - "2001:500:83::/48": "42", - "2402:e380:30a::/48": "138166", - "2408:8956:cf40::/40": "17816", - "2804:276c:100::/37": "263900", - "2001:1248:57bf::/41": "11172", - "2400:cb00:a310::/45": "13335", - "2408:8957:3700::/40": "17816", - "2409:8924:3b00::/37": "56046", - "2a02:26f7:c8d9::/42": "20940", - "2a05:9f80::/29": "211308", - "2a09:5c80::/29": "40976", - "2001:559:c38f::/48": "33287", - "2804:6884::/32": "269698", - "2602:300::/24": "7018", - "2606:2800:5120::/48": "15133", - "2a01:8840:d6::/44": "12041", - "2a02:ac87:59cc::/32": "25145", - "2a06:9280::/29": "12984", - "2401:d800:d6e0::/39": "7552", - "2804:269c:fe41::/46": "47065", - "2804:2e78:2000::/32": "28213", - "2806:230:1017::/48": "11888", - "2a02:26f0:d701::/36": "20940", - "2001:b80::/29": "12767", - "2407:3280::/32": "4851", - "2803:9800:b4c3::/39": "11664", - "2804:2728:e00::/32": "263880", - "2804:7790::/32": "271186", - "2a03:4b20::/32": "56912", - "2402:800:9c01::/43": "7552", - "2402:8c00:2::/48": "17753", - "2600:6000:fd83::/48": "11351", - "2600:9000:2234::/44": "16509", - "2803:5440:177::/48": "264738", - "2804:3258::/32": "265072", - "2a0a:6fc0::/29": "56864", - "2001:559:c184::/47": "7922", - "2001:df0:ce::/48": "24101", - "240e:44d:4d80::/41": "4134", - "2600:1406:6801::/37": "20940", - "2602:fe5c::/36": "40881", - "2804:44::/32": "28606", - "2804:13d0::/35": "263297", - "2001:559:80c9::/46": "7725", - "2001:41ca::/29": "35425", - "2406:2000:efb3::/48": "45501", - "2602:ffc8:3d40::/32": "20278", - "2604:8fc0::/32": "13549", - "2a00:dfa0::/32": "50673", - "2001:1248:59d2::/42": "11172", - "2605:1080:0:4004::/48": "23367", - "2a04:3640::/29": "49784", - "2001:4878:1e0::/44": "35994", - "2a02:c740::/30": "24978", - "2a06:19c0::/29": "8309", - "2a06:afc0::/48": "41011", - "2403:e800:e803:800::/51": "4637", - "240a:acdc::/32": "145942", - "240a:ae3e::/32": "146296", - "2607:fcd0:fa80:1a01::/55": "8100", - "2a02:26f7:c384::/48": "36183", - "2a04:3f83:49::/48": "211633", - "2001:559:754::/48": "7016", - "240a:a0fc::/32": "142902", - "240e:3be::/35": "134773", - "2604:ca00:176::/40": "36492", - "2804:14d:da00::/40": "28573", - "2a04:b00::/29": "199256", - "2a02:26f7:c240::/48": "36183", - "2a0a:9a40::/29": "205801", - "2a10:2f01:2a0::/46": "212995", - "2001:559:c2a4::/48": "33652", - "240a:aace::/32": "145416", - "2607:f8a8::/32": "40913", - "2a01:68::/32": "13193", - "2001:559:808a::/48": "33660", - "2001:559:c2ec::/48": "33652", - "2600:1404:a800::/48": "35994", - "2804:1a2c::/32": "61842", - "2804:51b8::/33": "268472", - "2a04:2c00::/29": "6876", - "2001:678:114::/48": "57436", - "2402:f740:8000::/36": "138391", - "2620:37:4000::/44": "36213", - "2801:106::/48": "19429", - "2a04:c440:9000::/33": "2047", - "2602:fe90:500::/40": "35913", - "2607:6980::/43": "62217", - "2607:f018:ffff::/48": "36375", - "2001:1248:a411::/44": "11172", - "2402:d000:8109::/45": "9329", - "2409:8052:2002::/40": "56047", - "2a01:8840:66::/44": "12041", - "2a02:26f7:e505::/46": "20940", - "2a09:6e80::/29": "48585", - "2c0f:f450::/32": "37302", - "2001:418:8001::/48": "20940", - "2001:fd8:2a4::/46": "132199", - "2001:4479:a900::/40": "7545", - "2402:c480:6003::/35": "63916", - "2408:8956:e600::/40": "17622", - "2801:80:14e0::/43": "11097", - "2804:2e2c::/32": "265329", - "240a:acce::/32": "145928", - "2600:1408:c00::/48": "35994", - "2606:2800:511a::/48": "14153", - "2607:1280:1150::/44": "394972", - "2402:c340::/32": "38047", - "240e:983:b01::/35": "4134", - "2620:dc:4000::/40": "22023", - "240a:a208::/32": "143170", - "2600:1009:9000::/44": "6167", - "2a02:2ab0::/39": "702", - "2600:1408:4001::/38": "20940", - "2604:e180:6::/40": "55002", - "2804:12f8:2000::/32": "263507", - "2001:559:856e::/48": "7922", - "240a:a7c4::/32": "144638", - "2605:3380:4152::/45": "12025", - "2800:68:3d::/46": "61468", - "2804:5c0::/45": "262537", - "2a02:26f0:3401::/39": "20940", - "2a02:2e02:1d90::/38": "12479", - "2001:550:301::/48": "26988", - "2400:a980:2500::/36": "133111", - "2804:1094::/32": "263641", - "2804:4384::/32": "267575", - "2a02:26f7:dd41::/46": "20940", - "2a07:3c80:400::/40": "209322", - "2a0f:4800::/29": "50064", - "240e:438:7820::/43": "140647", - "2607:9000:3000::/36": "46844", - "2620:84:e000::/48": "29818", - "2804:314:4027::/43": "61568", - "2a02:26f7:c3dd::/42": "20940", - "2a0e:46c4:22a9::/46": "136918", - "2001:678:594::/48": "44973", - "2408:8956:c700::/40": "17816", - "240a:a59b::/32": "144085", - "2a02:68e0::/32": "201896", - "2a03:22a0::/32": "44833", - "2a03:5a00:1c::/48": "39864", - "2001:678:c88::/48": "206161", - "2001:1308::/32": "6400", - "2401:d800:960::/40": "7552", - "2403:7f00::/34": "56300", - "2404:4f80::/42": "58715", - "2406:2000:a5::/46": "10310", - "2409:8914:b200::/39": "56044", - "2001:559:114::/48": "7016", - "2001:67c:1211::/48": "42139", - "2400:a980:34ff::/48": "133111", - "240e:f7:6000::/36": "134771", - "2606:c00:36::/32": "9505", - "2a02:e0:3204::/36": "34984", - "2804:7f1c::/48": "271667", - "2a02:26f7:dac9::/42": "20940", - "2409:8924:c300::/37": "56046", - "2600:1802:15::/31": "16552", - "2804:7fec::/32": "271718", - "2a02:26f0:c801::/38": "20940", - "2a0d:5600:20::/44": "9009", - "2400:d400:9280::/48": "9280", - "2620:139:6004::/48": "22600", - "2804:435c::/37": "267565", - "2a0b:8f80:102::/48": "48635", - "2a10:2f01:280::/44": "213092", - "2804:70ec::/32": "270756", - "2a01:6100::/32": "15967", - "2001:df7:4480::/48": "142529", - "2402:800:f020::/41": "7552", - "2803:7900::/32": "28094", - "2804:6e04::/35": "270570", - "2a02:26f7:e9c0::/48": "36183", - "2a04:4e40:c60::/40": "54113", - "2001:579:a1fd::/35": "22773", - "2001:67c:2580::/48": "8751", - "2001:4878:c246::/48": "12222", - "2804:4f8:c000::/36": "28263", - "2406:3400:1d::/41": "10143", - "2800:160:1a6c::/43": "14259", - "2804:10a4::/34": "263642", - "2a01:a700:4643::/29": "39138", - "2a10:8140::/29": "207886", - "2620:1f7:3800::/37": "18703", - "2a04:4e40:f600::/48": "54113", - "2401:d800:d990::/42": "7552", - "2610:20:1000::/42": "10616", - "2620:133:2000::/40": "198949", - "2a0c:8680::/29": "59865", - "2001:559:c0ea::/48": "7015", - "2402:9e80:a00::/40": "138564", - "2405:9940::/32": "46044", - "2801:80:1418::/48": "11097", - "2a02:26f7:b9c1::/46": "20940", - "2a0e:dc0:3::/48": "63473", - "2a0f:c444::/48": "212073", - "2a03:2f00::/32": "29467", - "2a05:1500:ff00::/40": "48635", - "2600:140a:c001::/34": "20940", - "2602:801:c008::/48": "2639", - "2620:18c::/40": "396507", - "2801:19c:10::/48": "14080", - "2a02:26f7:c8c9::/46": "20940", - "2a02:17a6::/31": "47232", - "2001:67c:18ac::/48": "62316", - "2001:4490:d100::/46": "9829", - "2404:bf40:e701::/48": "2764", - "2408:8459:b030::/41": "17622", - "240a:a617::/32": "144209", - "2600:1419:7400::/48": "35204", - "2804:2f40:f00f::/36": "264880", - "2407:a580::/32": "4851", - "2001:12ff::/32": "22548", - "2804:6244::/32": "269287", - "2a06:fb00:1::/48": "203391", - "2001:d10:8410::/48": "131119", - "2404:fc00:1::/45": "45910", - "240a:a757::/32": "144529", - "2804:3f68::/32": "265891", - "2804:4fb8::/32": "268345", - "2001:49f0:a050::/44": "174", - "2409:807c:2900::/35": "9808", - "2806:230:301e::/48": "265594", - "2a0f:40c0::/29": "207929", - "2a0e:8f02:2030::/44": "212799", - "2001:559:c2fc::/48": "33659", - "2001:41c0::/31": "2818", - "2402:8100:30f0::/44": "45271", - "2600:1011::/32": "6167", - "2a02:158:aa00::/39": "44946", - "2a02:26f7:c988::/48": "36183", - "2a05:5000::/29": "207225", - "2001:559:270::/48": "7922", - "2001:67c:1094::/48": "210290", - "2001:67c:2858::/48": "8304", - "2001:e60:d500::/42": "4766", - "240a:a561::/32": "144027", - "2804:4658::/32": "266984", - "2620:e8:c000::/48": "394545", - "2800:bf0:a000::/48": "52257", - "2001:559:561::/46": "7922", - "2607:fdc8:c00::/48": "30036", - "2804:4024:2022::/44": "265937", - "2a02:26f7:e748::/48": "36183", - "2001:67c:31c::/48": "47195", - "2001:44b8:30a6::/44": "7545", - "2403:7940:fcd0::/48": "33353", - "2602:feda:b40::/48": "142130", - "2001:559:836f::/48": "33657", - "2001:ac8:88::/48": "16247", - "2001:b08:8::/48": "59714", - "2401:4900:38c0::/44": "45609", - "2803:6940::/35": "61512", - "2a0d:f802:9000::/33": "20278", - "2a0e:6540:d16::/48": "208364", - "2a02:2e02:8fd0::/42": "12479", - "2402:e280:2160::/47": "134674", - "240a:afec::/32": "146726", - "2604:640:e000::/48": "393562", - "2604:d600:1277::/40": "32098", - "2620:0:280::/48": "19783", - "2a01:8a40::/32": "8823", - "2a02:26f7:d444::/48": "36183", - "2001:400:241a::/48": "683", - "2001:559:1ab::/48": "7922", - "2001:559:849c::/48": "7725", - "2400:ca07:f020::/43": "23688", - "2606:2800:4a10::/46": "15133", - "2607:fe28::/47": "53347", - "2804:751c::/32": "271024", - "2001:550:1d05::/48": "9009", - "2001:559:819f::/48": "20214", - "2001:579:52c4::/39": "22773", - "2403:4b40::/32": "137785", - "240a:ab1d::/32": "145495", - "2620:138:b004::/40": "16740", - "2a0c:b640:14::/46": "34872", - "2a06:1680::/29": "207560", - "2001:67c:1210::/48": "45029", - "2402:800:fc40::/42": "7552", - "2600:1409:9001::/36": "20940", - "2600:1415:16::/44": "20940", - "2605:7840:d120::/34": "12130", - "2607:fc48:c28::/48": "40009", - "2a05:bd40:d13::/48": "29264", - "240e:bc0::/21": "4134", - "2606:4700:301d::/42": "13335", - "2a00:ff80::/32": "8264", - "2001:559:c176::/48": "33657", - "2408:840c:a000::/40": "17621", - "2409:8020:10c1::/43": "56046", - "2801:80:1b40::/48": "266426", - "2804:6720::/32": "269605", - "2a0b:32c0::/29": "205739", - "2600:6000:fb42::/37": "12271", - "2603:7080::/28": "11351", - "2804:5b80::/32": "268851", - "2a0e:b105:460::/46": "20473", - "2804:1000::/32": "28208", - "2406:1fc0::/32": "140689", - "240a:aadc::/32": "145430", - "2620:12c:b131::/48": "13448", - "2804:8cc:2::/45": "262394", - "2a01:5b0:8::/48": "48519", - "2a0b:9700::/32": "8943", - "240a:add7::/32": "146193", - "240a:af35::/32": "146543", - "2001:d08:b0::/34": "9534", - "2409:8915:2000::/39": "56044", - "2604:d600:62e::/43": "32098", - "2a03:9e00:406::/32": "14537", - "2a0d:4040::/29": "35070", - "2001:559:c289::/48": "7922", - "2001:bc8:2000::/32": "12876", - "2001:44b8:30f3::/44": "7545", - "240e:108:1110::/47": "137695", - "2800:26a::/32": "19429", - "2806:230:1031::/48": "11888", - "2001:678:808::/48": "210316", - "240e:e:c800::/37": "137690", - "2806:2f0:2440::/48": "17072", - "2a02:26f7:d9c5::/46": "20940", - "2a05:3580:e300::/36": "35807", - "2408:840c:d000::/40": "17621", - "240a:aae8::/32": "145442", - "2806:230:3000::/48": "265594", - "2a0d:4d00:81::/48": "62303", - "2a0e:8880::/29": "60262", - "2001:67c:2a74::/48": "57839", - "2001:44b8:205d::/48": "4739", - "2606:a880::/32": "12119", - "2804:1ac4:4000::/34": "61884", - "2a02:26f0:a5::/44": "34164", - "2a02:7f80::/29": "56510", - "2a0e:97c5:5e4::/44": "20473", - "2404:2200:11::/42": "18200", - "2408:840c:d600::/40": "17621", - "2607:9b80:8000::/35": "46558", - "2a0c:e640:18::/42": "211876", - "2409:8000:3800::/40": "56048", - "240e:a51:6400::/30": "4134", - "2600:1008:b100::/42": "6167", - "2001:df3:3200::/48": "135724", - "2401:d800:f230::/41": "7552", - "2409:8c04:1007::/39": "24547", - "240a:a3be::/32": "143608", - "2620:130:30c0::/48": "62861", - "2a02:26f0:124::/46": "34164", - "2806:102e:2::/45": "8151", - "2001:428:2001:206::/37": "209", - "2001:1248:5525::/43": "11172", - "2001:4998:124::/46": "26101", - "2406:2000:e8::/46": "10310", - "240a:a292::/32": "143308", - "240a:aa15::/32": "145231", - "2607:f928:4002::/32": "22645", - "2001:44b8:405e::/48": "7545", - "2409:8924:2b00::/37": "56046", - "2600:1406:1c::/42": "20940", - "2602:fed2:710d::/48": "53356", - "2801:10::/45": "28068", - "2606:ae00:9c00::/40": "7287", - "2408:8957:5100::/40": "17816", - "2607:d580::/32": "16717", - "2a00:bdc0::/35": "47541", - "2001:638::/38": "680", - "2602:ff0d::/39": "395938", - "2605:f400:2::/47": "54641", - "2804:7d0::/32": "262324", - "2a07:9443::/32": "205055", - "2a09:9680::/29": "51546", - "2001:c20:c839::/48": "9255", - "2409:8e14:7000::/32": "56044", - "2620:10a:6000::/44": "33651", - "2804:49cc::/32": "52663", - "2a01:b160::/32": "50064", - "2a02:2e02:1800::/40": "12479", - "2a06:e881:119::/48": "39753", - "2001:67c:2440::/48": "16107", - "2001:4818::/36": "12188", - "240a:a659::/32": "144275", - "240a:a78b::/32": "144581", - "2804:7bf0::/32": "271464", - "2408:8459:9830::/41": "17622", - "240e:fc::/33": "136200", - "2804:6f24::/32": "270641", - "2a02:26f7:d908::/48": "36183", - "2a07:22c0:a000::/35": "213190", - "2401:d800:7ed0::/42": "7552", - "2402:800:63a1::/44": "7552", - "2408:8957:7600::/40": "17622", - "240a:ada6::/32": "146144", - "2800:26c::/32": "19429", - "2804:47cc::/32": "267077", - "2a00:54c0::/32": "41966", - "2a02:26f7:ebc8::/48": "36183", - "2001:678:7bc::/48": "197600", - "2001:1900:229c::/39": "3356", - "2404:7a40:2000::/46": "132556", - "2409:8915:3a00::/33": "56044", - "2600:1402:7801::/32": "20940", - "2804:5a64::/32": "268770", - "2804:5f10::/32": "269074", - "2a07:7201::/29": "34197", - "2c0f:fd50::/32": "37187", - "2001:559:82cf::/48": "33659", - "2400:cb00:a9f0::/47": "13335", - "240a:abe8::/32": "145698", - "2620:69:c000::/48": "62993", - "2a07:3500:1ac0::/48": "1136", - "2406:daa0:4020::/44": "16509", - "2408:8459:1650::/36": "17816", - "2803:3a40::/32": "263826", - "2a10:cb42::/29": "198328", - "2001:df0:264::/48": "132043", - "2606:2800:500b::/48": "15133", - "2a02:26f7:bb00::/48": "36183", - "2a03:60e0::/32": "60768", - "2c0f:7c00::/32": "328809", - "2001:503:6810::/48": "7342", - "2001:559:28a::/48": "7922", - "240a:accf::/32": "145929", - "2605:380:aa1::/48": "42388", - "2a03:ab00::/32": "197046", - "2a0f:1640::/29": "60262", - "2400:4e80:1001::/33": "131584", - "2401:800::/32": "9812", - "2402:800:341d::/42": "7552", - "2608:4122:2::/48": "5927", - "2804:31e8::/32": "265044", - "2a02:26f7:c3::/48": "20940", - "2a03:2380::/45": "198818", - "2605:a80:1::/48": "13213", - "2620:11e:1000::/48": "20052", - "2800:160:1ce0::/44": "14259", - "2800:440:1800::/42": "27738", - "2a03:5e60::/32": "6895", - "2a04:e00:107::/44": "39855", - "2405:55c0:56::/40": "63991", - "2402:5400::/48": "45938", - "240a:ab7b::/32": "145589", - "240e:3b2:2c00::/35": "134774", - "240e:473:7450::/39": "4134", - "2605:f740::/32": "25892", - "2620:130::/48": "13460", - "2a02:5cc0::/32": "59689", - "2804:3560::/32": "266282", - "2a01:4bc0::/36": "12422", - "2a0e:9b80:70::/48": "41737", - "2407:5280:308::/37": "133557", - "2409:8915:4c00::/39": "56044", - "2620:10a:4001::/48": "17394", - "2804:2030:8000::/33": "262651", - "2804:2e28::/32": "265328", - "2804:7628::/32": "271093", - "2a00:a400::/32": "8943", - "2400:7400:e021::/48": "23736", - "2a00:af00:e000::/35": "15599", - "2a0b:1200::/29": "559", - "2a0c:b641:69c::/48": "209297", - "2a0c:e640:102f::/48": "210951", - "2409:8087:8009::/33": "9808", - "240a:abd3::/32": "145677", - "2804:4914::/32": "267163", - "2a01:74e0::/32": "205668", - "240e:a5:4000::/36": "137693", - "2803:29e0::/32": "270013", - "2a00:1020:8::/45": "24739", - "2a02:26f7:d941::/46": "20940", - "2401:7e00::/32": "38355", - "2a03:9480::/32": "42442", - "2a0c:4dc0:1::/48": "47945", - "2400:7500::/32": "45325", - "2604:38c0::/32": "54097", - "2804:14d:4cd2::/44": "28573", - "2405:e40:4::/32": "24511", - "2406:d00:5555::/48": "132165", - "2408:8957:8400::/40": "17622", - "2001:648:2420::/47": "31563", - "2620:f:6000::/48": "11509", - "2804:3068::/32": "264949", - "2a01:488::/32": "20773", - "2a02:23a0::/32": "13287", - "2001:1380:3800::/32": "19180", - "2804:1510::/32": "262327", - "2a01:32::/29": "8875", - "2c0f:eab0::/32": "328111", - "2404:7600::/39": "23853", - "2408:840d:b600::/42": "17621", - "2600:1409:f001::/36": "20940", - "2806:230:1028::/48": "265594", - "2a02:26f7:b584::/48": "36183", - "2001:df1:1b80::/48": "139364", - "2405:b900:20::/44": "55701", - "2407:cb00::/32": "23860", - "240e:438:4040::/38": "4134", - "2a00:7b00:15::/32": "12338", - "2a02:26f7:e285::/46": "20940", - "2408:8459:6e30::/41": "17622", - "2408:8956:e00::/40": "17622", - "2409:8051:1800::/47": "56047", - "240a:ad38::/32": "146034", - "2803:ec10:2::/32": "271880", - "2a03:6100::/33": "34594", - "2600:1488:a341::/42": "20940", - "2600:1488:c081::/38": "20940", - "2a01:348::/41": "39326", - "2001:480:90::/48": "5980", - "2604:d9c0::/32": "36222", - "2804:aac:8000::/33": "52905", - "2a02:420::/29": "38927", - "2804:30cc::/32": "263055", - "2804:6338::/32": "269347", - "2a0c:6980::/29": "50113", - "2001:502:f3ff::/48": "397237", - "240a:a942::/32": "145020", - "2604:be40::/32": "13857", - "2607:fb90:cd00::/38": "21928", - "2806:217:202::/39": "28394", - "2a00:86c0:1019::/42": "2906", - "2400:9780::/46": "136557", - "2606:13c0::/48": "10843", - "2800:bf0:1cc::/48": "52257", - "2804:6024::/32": "269148", - "2a02:6b8:20::/46": "13238", - "2a0f:c087:89ca::/48": "212521", - "2001:44c8:4670::/44": "45430", - "2402:9740::/32": "135023", - "2403:6000:114::/36": "24085", - "2800:160:1176::/44": "14259", - "2800:160:15f0::/38": "14259", - "2a00:c8e0::/32": "199876", - "2407:f100::/45": "133075", - "2803:e840::/32": "61498", - "2a07:c180::/29": "64442", - "2a0c:b641:140::/44": "211448", - "2001:1248:84d6::/44": "11172", - "2408:8956:a600::/40": "17622", - "240a:aee3::/32": "146461", - "2a03:4b40:5183::/38": "50710", - "2406:d00:2222::/48": "132165", - "2804:1a14:4000::/36": "28153", - "2407:4e40::/48": "142040", - "240a:a43c::/32": "143734", - "240e:e9:b800::/33": "23650", - "2602:802:d000::/44": "53506", - "2a02:2000:5::/32": "35297", - "240e:44d:7980::/41": "4134", - "2803:6604:e401::/39": "28075", - "2803:b5a0:8000::/33": "269804", - "2a0d:7980:1::/48": "12859", - "2408:8256:3b8c::/43": "17623", - "240d:4000::/21": "133111", - "240e:5e:1040::/42": "134774", - "240e:964:c600::/36": "4134", - "2a07:8080::/32": "62296", - "2001:480:36::/48": "289", - "2400:ffc0:4::/47": "132335", - "2804:aec::/32": "52928", - "2405:3840::/32": "131957", - "240a:aff9::/32": "146739", - "2a10:8400::/29": "203206", - "2402:a7c0::/32": "59253", - "2403:71c0:ff00::/48": "43959", - "2806:2f0:12a4::/41": "22884", - "2001:559:c30c::/48": "7922", - "240a:a137::/32": "142961", - "240e:44d:7000::/41": "140345", - "240e:698:2800::/40": "133775", - "2804:300:c000::/31": "53237", - "2804:42b4::/32": "267520", - "2001:559:1e9::/48": "33662", - "2001:ee0:cd40::/35": "45899", - "2620:0:6e0::/48": "4185", - "2a03:b300::/32": "35399", - "2a0e:b107:580::/44": "138211", - "2001:67c:2628::/48": "205016", - "2001:df7:c500::/48": "139943", - "2a02:26f7:ec81::/46": "20940", - "2409:8924:b100::/38": "56046", - "2804:7f54::/32": "271681", - "2a00:11c0:1337::/48": "42473", - "2a0f:25c0:1990::/48": "207077", - "2401:14c0:8b::/32": "136531", - "2801:14::/48": "19429", - "2801:19:e800::/48": "267777", - "2804:310:c000::/34": "262688", - "240a:a634::/32": "144238", - "2600:380:c800::/38": "7018", - "2607:fad8::/40": "22652", - "2a05:cc00::/29": "47447", - "240a:a0c0::/32": "142842", - "240e:473:5e50::/39": "4134", - "2604:2c00::/32": "11071", - "2a06:2340:2000::/44": "9558", - "2a0e:5880::/29": "60843", - "2a04:4e40:600::/48": "54113", - "2402:800:34c5::/43": "7552", - "2406:dc0:235e::/47": "9221", - "240a:aa1a::/32": "145236", - "2600:1417:6801::/35": "20940", - "2804:2bdc:2::/36": "265181", - "2a00:1228::/47": "31148", - "2a02:26f7:cd05::/46": "20940", - "2a0c:7e47:c909::/48": "20473", - "2001:67c:418::/48": "8981", - "2001:67c:28b8::/48": "28892", - "2408:8956:600::/40": "17622", - "240a:a05e::/32": "142744", - "2607:a680:f000::/36": "395092", - "2001:550:1304::/37": "174", - "240a:a21f::/32": "143193", - "240a:a37a::/32": "143540", - "2804:3558::/32": "53155", - "2804:6214::/32": "269274", - "2a0a:2842:15::/46": "42962", - "2001:67c:14b8::/48": "12655", - "2620:1ec:4::/46": "8068", - "2a0c:b642:1a08::/48": "202297", - "2607:3c00:6414::/47": "26380", - "2804:73d0::/32": "270939", - "2a02:6680:2166::/48": "16116", - "2001:678:9fc::/48": "15550", - "2402:800:592b::/43": "7552", - "2403:40c0::/48": "45215", - "2600:900::/28": "7896", - "2a0e:b103:f7a::/48": "20473", - "2001:19e8::/46": "2576", - "240e:108:1070::/48": "140061", - "240e:3b3:7a00::/32": "140313", - "2605:c0::/32": "397019", - "2400:4a00::/32": "9341", - "2600:1406:6400::/48": "35994", - "2602:feb4:180::/44": "25961", - "2605:a7c0:140::/48": "14618", - "2804:1374::/32": "263534", - "2001:559:c276::/48": "7015", - "2001:4878:8246::/48": "12222", - "2a01:8840:d::/48": "63403", - "2a03:f80:3991::/48": "56630", - "2a05:5f40::/31": "201366", - "2001:559:86ec::/48": "33667", - "240a:a1fa::/32": "143156", - "240a:abd4::/32": "145678", - "2804:1408:5100::/34": "28635", - "2a03:3f40:3::/40": "50673", - "2001:550:40a::/45": "174", - "2001:df2:7e01::/48": "135526", - "2606:5d00::/28": "11525", - "2a06:98c0:1001::/48": "139242", - "2402:800:52ee::/39": "7552", - "2405:6e00:690::/41": "133612", - "2a02:26f7:cd80::/48": "36183", - "2a10:2f00:14a::/48": "212767", - "2409:807c:900::/35": "9808", - "240a:a7f0::/32": "144682", - "240a:abbe::/32": "145656", - "2600:1488:6151::/42": "20940", - "2803:9640::/32": "264605", - "2803:b2c0:2100::/47": "264851", - "2001:559:8269::/48": "33651", - "2401:ff80:1409::/46": "133954", - "2806:230:4013::/48": "11888", - "2a0f:eb80:b::/45": "47267", - "2001:559:76a::/48": "22909", - "2001:5f8:7d04::/32": "5056", - "2403:6a00::/32": "18239", - "2a02:54c0::/29": "20811", - "2001:428:2501::/48": "2714", - "2407:a800:3e11::/48": "3949", - "2600:c08:2015::/48": "27385", - "2804:14c:a700::/40": "28573", - "2a02:26f7:ca88::/48": "36183", - "2401:ff80:1005::/44": "133954", - "2402:8640:2::/32": "137491", - "2403:8000:11::/32": "4796", - "240e:44d:5e80::/41": "4134", - "2600:140f:2601::/39": "20940", - "2620:13d:2000::/41": "20326", - "2a00:5000::/29": "51896", - "2606:5cc0:ff01::/46": "36263", - "2001:550:1d02::/45": "174", - "2001:559:c2d0::/48": "33662", - "2804:74f4:4::/33": "271014", - "2400:11c0::/32": "133296", - "2400:dd01:3007::/43": "7497", - "2404:f801::/32": "3598", - "2606:4700:3000::/43": "13335", - "2620:1ec:49::/36": "8075", - "2a00:1940::/32": "16353", - "2a02:26f0:2f01::/35": "20940", - "2a02:5120::/32": "3246", - "2001:579:6310::/36": "22773", - "2402:800:96ee::/39": "7552", - "2402:8100:2800::/40": "45271", - "2403:5800:2::/48": "4764", - "2409:8028:30a1::/43": "56041", - "240a:a5a3::/32": "144093", - "240e:3b6:1200::/39": "4134", - "2a02:17c0::/32": "44869", - "2001:559:468::/48": "33491", - "2001:df4:3b00::/48": "55688", - "2001:44b8:38::/48": "7545", - "2409:877f::/20": "9808", - "240e:352:5c00::/34": "134419", - "2804:fe0:2102::/45": "263049", - "2a01:7a00::/36": "51701", - "2a07:59c6:ee00::/40": "56382", - "2401:d800:130::/41": "7552", - "2402:c600::/32": "17941", - "240e:44d:6980::/41": "4134", - "2600:1404:d801::/37": "20940", - "2a02:26f7:fa49::/42": "20940", - "2001:559:38::/45": "7922", - "2408:8956:4400::/40": "17622", - "240a:ae40::/32": "146298", - "2404:0:3000::/36": "17709", - "240a:ad4a::/32": "146052", - "2620:10f:5000::/47": "21740", - "2001:4198::/32": "25525", - "2600:6c7f:9140::/44": "19115", - "2a0c:b980:1000::/36": "48096", - "2600:1006:d100::/41": "6167", - "2620:1d5:6f0::/36": "14773", - "2800:484:c00::/40": "10620", - "2a09:b440::/48": "20473", - "2402:3cc0::/32": "137257", - "2407:9740:ae00::/43": "131466", - "2408:8957:7800::/40": "17622", - "240a:a411::/32": "143691", - "2a03:fc40::/32": "41937", - "2c0f:3200:2::/32": "37558", - "2001:559:1ee::/48": "33287", - "2620:129:6010::/48": "395363", - "240a:aaab::/32": "145381", - "2801:196:2::/48": "19429", - "2a0e:b80::/29": "208951", - "2001:559:194::/48": "7016", - "2405:6e00:400::/43": "133612", - "240a:a6d1::/32": "144395", - "2804:1444::/32": "263322", - "2804:3ef0::/32": "266630", - "2806:2f0:2144::/43": "22884", - "2806:2f0:6120::/41": "17072", - "2401:ff80:1785::/44": "133954", - "2001:6f8:1501::/48": "8190", - "2408:84f3:4a10::/42": "134543", - "2800:160:1718::/42": "14259", - "2a00:1e98::/29": "34058", - "2a01:1df::/32": "15744", - "2a02:4540:9040::/46": "197207", - "2a0a:5e80::/48": "48715", - "2803:ab00::/40": "52471", - "2804:248:5::/44": "28598", - "2a00:e0c0::/32": "16174", - "2001:559:8701::/48": "33652", - "2401:1c00:7100::/32": "38809", - "2403:b4c0::/35": "138398", - "2605:c600::/32": "33097", - "2c0f:fc58::/32": "37294", - "2a0e:b107:1165::/48": "211184", - "2001:678:7dc::/48": "39149", - "2001:44c8:45c0::/43": "131445", - "2408:80f1:230::/44": "17621", - "2408:8456:3e10::/42": "134543", - "2800:440:8004::/48": "27738", - "2a02:2e02:96a0::/43": "12479", - "2a0c:640::/29": "328543", - "2001:678:8b0::/48": "43815", - "2001:df4:ac00::/48": "134347", - "2804:6bc::/32": "53078", - "2001:67c:15a3::/48": "5577", - "2001:df0:2ca::/48": "17944", - "2403:c00:704::/36": "17488", - "2605:6440:4009::/35": "396356", - "2a02:26f7:c7c5::/46": "20940", - "2401:d800:c90::/42": "7552", - "2409:8924:c500::/38": "56046", - "2605:a401:8423::/44": "33363", - "2001:67c:2b30::/48": "3320", - "2403:2600::/32": "24538", - "2408:8738::/32": "4837", - "240a:a653::/32": "144269", - "2a01:190:15ec::/48": "199216", - "2600:1800:11::/45": "16552", - "2804:36b4::/32": "266366", - "2804:550c::/33": "268686", - "2a02:26f0:5901::/37": "20940", - "2a0b:2740::/48": "205755", - "2a0c:9a40:8110::/46": "204438", - "2001:500:6::/48": "12287", - "2001:978:201:3::/37": "174", - "2405:1c0:6a11::/46": "135062", - "2409:8904:e170::/40": "24547", - "240e:d:b000::/37": "136191", - "2806:2f0:24a1::/46": "22884", - "2a02:2e02:bc0::/43": "12479", - "2a0d:2a00:ab1::/46": "205157", - "2405:1c0:6541::/46": "135062", - "2606:b400:882b::/48": "7160", - "2804:3494::/32": "265466", - "2a03:90c0:570::/40": "199524", - "2a06:8147:cc9a::/48": "199364", - "2c0f:eac0::/32": "37682", - "2a0f:d080::/29": "51659", - "2001:559:c34a::/47": "7015", - "2408:8406:b400::/39": "4808", - "240a:a967::/32": "145057", - "2602:feda:2a9::/46": "204185", - "2620:6:2000::/46": "395460", - "2a02:26f7:c089::/46": "20940", - "2a0f:be00::/29": "208250", - "2402:7480::/32": "18106", - "2408:8256:319f::/38": "17816", - "2607:f518::/39": "46887", - "2804:1a14::/34": "28153", - "2001:67c:2758::/48": "41618", - "2400:a980:4100::/37": "133111", - "2a02:fe9:337::/32": "39686", - "2a10:3040::/30": "208256", - "2001:67c:2c14::/48": "31424", - "2606:2800:4060::/46": "15133", - "2620:ef:4000::/48": "394137", - "2803:7860::/32": "267829", - "2a02:26f7:c080::/48": "36183", - "2001:978:1f00::/48": "43858", - "2001:c20:48c5::/48": "3758", - "240a:acea::/32": "145956", - "2804:691c::/32": "270249", - "2a01:298:fd::/48": "50827", - "2a02:26f7:f985::/46": "20940", - "2401:c1c0::/32": "136966", - "240e:108:1130::/47": "137693", - "2602:ff96:81::/46": "40676", - "2604:9380::/32": "33230", - "2800:160:2083::/41": "14259", - "2803:6940:2000::/32": "61512", - "2001:559:84f5::/48": "33657", - "2403:b100:2014::/32": "9989", - "2620:13a:5000::/44": "19755", - "2803:24c0::/32": "264796", - "2804:5a50::/32": "268764", - "2a0e:aa07:e00e::/48": "206843", - "2001:559:86ba::/48": "33657", - "2404:bf40:81c1::/38": "139084", - "240e:250:1400::/38": "134419", - "2804:14d:909a::/42": "28573", - "2804:ddc::/32": "262387", - "2a02:26f7:cc48::/48": "36183", - "2a0d:3842:1170::/48": "57629", - "2001:559:3e9::/48": "22909", - "240a:a31d::/32": "143447", - "2a00:7000::/32": "34762", - "2a00:dd00::/46": "212573", - "2a06:85c0::/48": "202610", - "240a:a2bd::/32": "143351", - "240a:a65d::/32": "144279", - "2806:269:4400::/41": "13999", - "2a02:2a38:38::/32": "58073", - "2a10:2f01:220::/48": "207890", - "2001:df5:5e80::/48": "141413", - "2620:12d:6000::/47": "13380", - "2804:31d4::/32": "53139", - "2804:49d0::/32": "52698", - "2a02:214a::/29": "1241", - "2a0e:b107:b15::/48": "212580", - "2620:16:6000::/48": "27195", - "2804:3f38::/35": "266646", - "2a05:2c00::/30": "201559", - "2001:44b8:4045::/48": "4739", - "2400:cb00:303::/45": "13335", - "2801:80:2330::/48": "267247", - "2a02:610:7501::/48": "51894", - "2a0d:9780::/32": "20860", - "2602:800:900e::/48": "40528", - "2a0d:ac00::/48": "205202", - "2404:d8::/32": "7629", - "2409:8c28:c06::/34": "56041", - "240a:a889::/32": "144835", - "2800:160:154b::/43": "14259", - "2804:1784:ff82::/41": "263152", - "2a02:1390:7000::/36": "21351", - "2a02:26f7:e38d::/42": "20940", - "2600:1488:a421::/41": "20940", - "2804:79d4::/32": "271330", - "2a06:7f80::/29": "204035", - "2602:feb4:110::/44": "25961", - "2604:f400:7::/48": "29930", - "2a02:c800::/41": "43930", - "2a07:2781:a4a3::/48": "206160", - "2408:8459:d180::/42": "134543", - "2806:230:1029::/48": "11888", - "2a02:2f0c:d000:41::/30": "8708", - "2a0a:9000::/29": "64472", - "2001:67c:2c2c::/48": "57763", - "2001:df6:4280::/48": "142006", - "2001:df7:200::/47": "135871", - "2400:9800::/44": "24203", - "2001:16d8:deae::/34": "16150", - "2402:ee40:3::/42": "134033", - "2406:c500:ffef::/48": "7545", - "2604:5000:18::/48": "26419", - "2001:559:5f6::/48": "33651", - "2001:ec0:2000::/40": "131293", - "2404:bf40:e101::/38": "139084", - "2405:f080::/38": "136907", - "240a:409a:c000::/35": "58834", - "2804:14c:cca2::/41": "28573", - "2a02:26f7:c641::/46": "20940", - "2603:c001:3430::/38": "31898", - "2806:230:2025::/48": "11888", - "2a05:900::/29": "198930", - "2400:cb00:a870::/45": "13335", - "240a:a84f::/32": "144777", - "2801:1fc:16::/48": "27951", - "2804:5ae4:ff10::/40": "268803", - "240a:a725::/32": "144479", - "240a:ab79::/32": "145587", - "2607:5700::/32": "20093", - "2800:484:c400::/40": "10620", - "2806:2f0:12e1::/46": "17072", - "2a01:5ec0:9000::/36": "44244", - "2001:338::/32": "4675", - "2a04:9300::/32": "62239", - "2a10:1680::/32": "47935", - "2001:559:c122::/48": "7015", - "2804:1110::/36": "262901", - "2409:8d35::/28": "9808", - "2804:14c:5d00::/40": "28573", - "2001:67c:13b8::/48": "196957", - "2402:ee40:10a::/32": "17754", - "2600:1fa0:4010::/42": "16509", - "2800:160:1f52::/45": "14259", - "2a06:bcc0:1::/45": "203724", - "2a07:a343:cc70::/44": "136620", - "2408:8456:c640::/39": "17816", - "240a:a1cf::/32": "143113", - "2803:8720::/32": "266755", - "2804:45e4:6100::/35": "262567", - "2a02:26f0:13d::/48": "8966", - "2001:1930:e80::/41": "11985", - "2408:84f3:f860::/40": "17623", - "2602:fcb1::/36": "399306", - "2001:559:322::/48": "7922", - "2001:559:c0e6::/48": "7922", - "2804:52f4:b00::/32": "268552", - "2a02:2e02:b50::/40": "12479", - "2c0f:f7f8:3::/32": "3356", - "2001:67c:25dc::/48": "41018", - "2402:800:bb90::/42": "7552", - "2405:1c0:6583::/38": "55303", - "2405:9800:f001::/44": "45430", - "240a:ac8d::/32": "145863", - "2605:b4c0:550::/48": "25780", - "2a02:d98::/32": "25146", - "2001:67c:2824::/48": "12722", - "2400:4d40::/47": "134204", - "2409:8924:2f00::/35": "56046", - "240e:965:c600::/36": "4134", - "2606:4f00:8::/48": "19324", - "2800:160:1ff5::/46": "14259", - "2a0f:5707:aaa0::/44": "205298", - "240a:abcf::/32": "145673", - "2603:90f5:2::/48": "12271", - "2620:125:f000::/44": "395114", - "2804:2250:7040::/32": "262756", - "2a00:8a84:a010::/30": "29119", - "2a0e:b40::/48": "62321", - "2c0f:ed68:ff02::/40": "328170", - "2409:806b:100::/36": "9808", - "2a0d:e4c4:d000::/34": "208861", - "2001:4541:a000::/29": "9924", - "2a0c:b641:4c0::/44": "212756", - "2001:559:3fb::/48": "33659", - "240a:aaa2::/32": "145372", - "2800:160:13f7::/44": "14259", - "2001:559:c2ef::/48": "7016", - "2401:ff80:148b::/45": "133954", - "2406:9300::/32": "38506", - "2602:ffa5:100::/40": "53907", - "2804:1360::/41": "263531", - "2a02:26f7:bd80::/48": "36183", - "2a0d:82c7:9000::/34": "47787", - "2a01:3e0:d01::/48": "38191", - "2001:738:5::/32": "1955", - "2401:2d00:12::/48": "17625", - "2405:9800:c921::/45": "45430", - "2804:4dfc::/32": "268232", - "2001:559:c14b::/48": "20214", - "2401:ee00:b2c::/35": "23951", - "240a:a2d9::/32": "143379", - "2610:190:5e00::/34": "62", - "2a0f:14c0::/29": "398559", - "2a0d:3842:1270::/48": "57629", - "2a02:80c0::/30": "49562", - "2a0a:dd80::/29": "211199", - "2001:578:d00::/41": "22773", - "2407:7900:1000::/40": "58955", - "2804:2d70::/32": "265282", - "2804:3394::/32": "265405", - "2a07:1400::/29": "24853", - "2402:800:94c5::/42": "7552", - "240a:aaf8::/32": "145458", - "2600:370f:7265::/46": "32261", - "2605:2840::/32": "393763", - "2620:10c:700e::/47": "2906", - "2a00:1a28:101::/35": "42708", - "2c0f:f7a8:8010::/47": "4134", - "2001:67c:2400::/48": "57146", - "240a:af33::/32": "146541", - "2600:40ff:fcfe::/38": "701", - "2607:fdf0:5e9d::/42": "8008", - "2402:ea80::/48": "17747", - "2604:ca00:13::/48": "36492", - "2800:5f0:841::/42": "22724", - "2804:3050::/32": "264943", - "2a03:3660:1::/48": "51151", - "2001:559:c3d3::/48": "33660", - "2001:df3:f800::/48": "59216", - "240e:964:2c00::/38": "133776", - "240e:a53:6400::/26": "4134", - "2803:17e0::/32": "52468", - "2a01:bb20:3000::/32": "61969", - "2001:559:8437::/48": "7016", - "2a00:1c41::/29": "8851", - "2a0b:a540::/29": "1267", - "2401:1700:1d::/33": "55666", - "2409:8914:a00::/39": "56044", - "2607:fc50::/46": "36236", - "2a03:a860:a1d::/48": "34587", - "2a0f:5381:acac::/33": "208135", - "2401:d800:9170::/40": "7552", - "240e:109:8000::/43": "58519", - "2604:6840:ac10::/48": "20446", - "2804:4f8:8400::/34": "28263", - "2a01:67c0::/32": "16074", - "2402:d000:8111::/45": "9329", - "2408:8274::/28": "4837", - "240e:473:6f20::/41": "140486", - "2607:f740:e644::/44": "63911", - "2804:4750::/32": "267045", - "2a02:26f7:d5c8::/47": "36183", - "2402:800:3563::/43": "7552", - "2402:800:578d::/43": "7552", - "2403:1940:dac1::/48": "137935", - "240a:a49c::/32": "143830", - "2803:4980::/32": "52328", - "2001:559:83b1::/48": "33287", - "2001:559:84ad::/46": "33659", - "2408:8459:1050::/37": "17816", - "2408:892c::/32": "4837", - "2600:4402:c004::/29": "6130", - "2a0a:6a80::/29": "13045", - "2001:fb0:100e::/47": "37992", - "2620:13e:9007::/48": "17218", - "2a03:83a0:2::/48": "201529", - "2600:d401:600::/32": "1403", - "2a01:5580::/32": "29037", - "240e:3b7:1400::/38": "134773", - "240a:a77c::/32": "144566", - "2800:160:1e2d::/43": "14259", - "2804:4c40::/32": "267359", - "2001:cb8::/32": "7687", - "240e:698:2a00::/40": "63835", - "2600:1409:d001::/34": "20940", - "2803:2a80:1265::/48": "262928", - "2a0d:d81::/32": "213075", - "2001:559:c2f1::/48": "20214", - "2604:d600:121c::/42": "32098", - "2607:fc48:818::/48": "40009", - "2804:2538::/32": "28183", - "2a0c:29c0::/32": "35614", - "240e:3b5:2c00::/35": "134774", - "2600:1f18::/33": "14618", - "2604:cb00::/32": "7029", - "2a02:4660::/32": "201975", - "2a02:26f7:f384::/48": "36183", - "2001:559:84d1::/48": "7922", - "2001:67c:208c::/48": "15562", - "2402:800:9ab7::/41": "7552", - "2620:10a:8004::/48": "27299", - "2804:40a0:acc4::/33": "265971", - "2806:310:6:3::/44": "16960", - "2a02:26f7:c6c4::/47": "36183", - "2a02:7900:101::/32": "16154", - "2001:1400:ffee::/48": "9201", - "240a:a3e8::/32": "143650", - "240a:a924::/32": "144990", - "240c:f:2::/32": "45275", - "2606:b400:800c::/48": "792", - "2804:1de0::/32": "264400", - "2a01:cf00:74::/46": "3215", - "2a02:2e02:d30::/41": "12479", - "2405:a000:21::/32": "7693", - "2600:6c38:e23::/45": "20115", - "2607:6100:1006::/44": "54380", - "2806:230:4026::/48": "265594", - "2a02:578:6400::/38": "9031", - "2a07:95c0::/30": "46723", - "2a02:503:8::/48": "51955", - "240e:e9:8800::/34": "23650", - "240e:3b9:c000::/37": "140315", - "2804:4538::/32": "266912", - "2001:559:c05a::/48": "7016", - "2001:67c:28d8::/48": "48345", - "2402:c000:3801::/32": "9230", - "2604:6d00:2100::/48": "36223", - "2a02:26f7:e289::/42": "20940", - "2a04:88c4::/32": "205544", - "2600:1406:30::/48": "35994", - "2600:140f:4a00::/48": "9498", - "2610:b0:4030::/47": "701", - "2804:8104::/32": "272426", - "2a03:2900::/32": "48823", - "2001:559:8570::/47": "33651", - "2001:1320::/32": "27733", - "2602:ff3b::/36": "395723", - "2a01:5043:2efd::/48": "202196", - "2a02:26f7:b98d::/46": "20940", - "2a02:26f7:f2c0::/48": "36183", - "2001:559:30b::/48": "33491", - "2001:fd8:f0b0::/44": "4775", - "2806:20d:110c::/43": "32098", - "2a02:26f7:e981::/46": "20940", - "2a0e:fb42::/32": "47596", - "2001:5a0::/34": "6453", - "2001:67c:2354::/48": "39287", - "2406:82c0::/32": "141201", - "240e:3b0:7800::/39": "4134", - "2606:8e80:4000::/48": "32133", - "2607:fda8:1014::/48": "54004", - "2a04:4e40:b800::/47": "54113", - "2001:559:359::/46": "33659", - "2001:678:31c::/48": "35213", - "2409:8a52:300::/37": "56047", - "240e:44d:1900::/41": "140345", - "2804:33c::/32": "53137", - "2a00:9d20:49::/48": "28753", - "2a0e:97c5:638::/46": "20473", - "2001:468:2621::/44": "11537", - "2401:cbc0::/32": "23778", - "2403:fdc0:6000::/36": "138460", - "2a00:2380::/25": "2856", - "2a02:26f7:eb08::/48": "36183", - "2a02:26f7:ec48::/48": "36183", - "2a0e:4f80::/29": "51083", - "2001:18f0::/32": "12059", - "2404:ae00:17::/44": "45474", - "240e:473:5120::/41": "140486", - "2800:160:1c9f::/42": "14259", - "2a01:5c40::/46": "12687", - "2a0e:46c4:2c20::/47": "137509", - "2001:559:2a0::/48": "20214", - "2001:dce:102::/33": "23869", - "2402:a800:fff0::/48": "55895", - "2a03:dd41::/32": "39122", - "2a04:4e40:1410::/44": "54113", - "2001:559:330::/48": "7922", - "2001:43d8:c001::/44": "15022", - "2001:4978:10af::/36": "19255", - "2401:d800:5f20::/41": "7552", - "2402:800:3b1d::/42": "7552", - "2600:1419:7c00::/48": "35204", - "2804:35ac::/32": "266300", - "2408:8647::/35": "140726", - "240e:5f:6001::/48": "134774", - "2605:b100:a81::/39": "577", - "2606:2800:41f::/42": "15133", - "2608:121:1::/44": "721", - "2800:5f0:878::/35": "22724", - "2a02:aa00::/27": "6830", - "2001:559:2e8::/48": "33652", - "2001:559:c069::/48": "7922", - "2001:18e8:810::/37": "19782", - "2401:2d00::/46": "17625", - "240a:ad63::/32": "146077", - "2600:1416:a001::/33": "20940", - "2a05:8240::/29": "57353", - "2001:44b8:10::/46": "7545", - "240a:a895::/32": "144847", - "240a:aca4::/32": "145886", - "2a00:8a84:27f0:f::/32": "29119", - "2a05:b680:6::/48": "31017", - "2a0d:7c40::/32": "54290", - "2001:1270:4000::/34": "22011", - "2600:1417:c801::/37": "20940", - "2801:17:6800::/48": "19429", - "2a01:9560::/32": "62094", - "2001:43f8:c90::/48": "328374", - "2401:7400:4801::/34": "4773", - "240e:44d:b80::/41": "4134", - "2604:a2c0::/32": "53256", - "2a09:a441::/32": "205479", - "2806:2f0:3424::/41": "17072", - "2a0c:dd42::/29": "42675", - "2001:470:11c::/48": "7175", - "2001:480:24::/44": "668", - "2803:ae0::/32": "269930", - "2a0f:cf80::/29": "208861", - "2409:8000:5900::/40": "9808", - "2001:4c00::/32": "34695", - "2803:f00:440::/40": "262182", - "2804:14d:5ce4::/44": "28573", - "2a02:26f7:bd4d::/42": "20940", - "2a02:ac80:3001::/33": "25145", - "2a09:d240::/48": "30870", - "2a0a:af80::/29": "24867", - "2400:8b00:2080::/42": "45727", - "2605:fb80:ffff::/48": "17216", - "2606:3c00:f000::/44": "20365", - "2804:5108::/32": "268426", - "2600:80d::/44": "6984", - "2604:ca00:f002::/48": "36492", - "2804:4660::/32": "266986", - "2a00:4b00:13e::/38": "41935", - "2001:559:81fe::/48": "7922", - "2001:678:714::/48": "43590", - "2403:ff00::/48": "24535", - "240a:af54::/32": "146574", - "240e:44d:7c80::/41": "4134", - "2600:1417:1001::/36": "20940", - "2804:2188::/32": "61789", - "2a02:2ad0:911::/44": "702", - "2a02:2e02:2cf0::/38": "12479", - "2001:579:10ac::/39": "22773", - "240a:ac7b::/32": "145845", - "240e:67d:c400::/39": "140330", - "2804:1ca0::/39": "61666", - "2804:5e48:ff30::/46": "269023", - "2804:6c94::/32": "270478", - "2a0f:ca85::/48": "207616", - "2001:19f8:212::/32": "4927", - "2401:b900::/32": "17894", - "240e:974:e300::/37": "38283", - "2408:84f3:a810::/42": "134543", - "240a:a3cc::/32": "143622", - "2607:4700:f002::/36": "25720", - "2a03:1c80::/32": "25222", - "2a04:4000::/29": "201020", - "2602:ff50::/38": "63452", - "2804:a98:2::/32": "52896", - "2804:1bb4::/32": "61744", - "2804:2b20::/32": "265136", - "2804:43d4::/32": "267593", - "2804:6afc::/32": "270370", - "2001:678:fc0::/48": "196944", - "2604:d600:661::/44": "32098", - "2804:14d:2a7f::/40": "28573", - "2001:df0:2e00::/48": "59022", - "2400:6280:15::/48": "132876", - "2001:559:c17e::/48": "33652", - "2404:1900::/32": "18092", - "2607:fca8:b100::/33": "17139", - "2a02:26f7:cb45::/46": "20940", - "2a02:2a90::/39": "702", - "2409:8779::/30": "9808", - "2607:c400:6000::/32": "5555", - "2803:9d80::/32": "26617", - "2a01:6ca0::/32": "12703", - "2001:559:260::/48": "33659", - "2001:4490:4e58::/46": "9829", - "240e:95d:2000::/37": "4134", - "2806:370:2010::/41": "28403", - "2a00:1158:2::/47": "34011", - "2a10:bc40::/29": "211598", - "2001:559:8440::/48": "7015", - "2402:800:597f::/40": "7552", - "2402:d000:1065::/44": "9329", - "2408:8772::/29": "4837", - "2800:160:1e05::/46": "14259", - "2804:6298::/32": "269306", - "2a0b:7980::/29": "208272", - "2800:484:2300::/40": "10620", - "2804:66a0:13::/32": "269572", - "2401:4900:5388::/43": "45609", - "2404:0:9000::/26": "17709", - "2800:190:110::/40": "11664", - "2806:3ca::/32": "270124", - "2a0d:6800::/29": "14576", - "2600:1488:c041::/40": "20940", - "2803:2a80::/48": "262928", - "2804:4f3c::/32": "268314", - "2001:559:c1d5::/46": "7016", - "2800:110:1021::/45": "4270", - "2a02:d107:f008::/36": "197155", - "2001:db0:4800::/37": "17766", - "2408:8456:ea10::/42": "134543", - "2604:2d80:c02c::/46": "30036", - "2a02:bc0::/32": "60781", - "2a0c:93c0:8002::/48": "212465", - "2001:559:850f::/48": "7922", - "2401:b0c0:c000::/48": "136941", - "2402:ef03:6100::/29": "7633", - "2605:1000::/32": "19662", - "2401:7500:1000::/39": "133296", - "2405:9f80::/32": "134743", - "2001:ee0:3001::/43": "45899", - "2602:fe60::/36": "209", - "2604:ca00:f007::/44": "36492", - "2803:23c0::/32": "52444", - "2a01:8f40::/32": "59472", - "2001:67c:1424::/48": "49030", - "2001:1248:5b23::/41": "11172", - "240e:3bd:ec00::/35": "140314", - "2620:11a:a000::/44": "43515", - "2800:88:14::/41": "26210", - "2a02:26f7:b904::/48": "36183", - "2001:67c:1878::/48": "3301", - "2402:b400:4628::/32": "45960", - "240e:980:4600::/40": "134756", - "2606:5200:c000::/36": "11115", - "2804:1100:3000::/32": "53178", - "2a04:b480:23::/29": "60110", - "2400:3000::/32": "7527", - "2404:8000:94::/44": "17451", - "240a:a4b8::/32": "143858", - "2001:559:450::/47": "33668", - "2001:1a11:74::/46": "42298", - "240a:a69f::/32": "144345", - "2605:6880::/32": "63052", - "2804:bd8::/32": "52838", - "2804:2144:104::/38": "52795", - "2a01:5820::/32": "204222", - "2001:678:250::/48": "41038", - "2800:4d0:24a0::/32": "7004", - "2a00:1798::/32": "8426", - "2800:160:17c2::/47": "14259", - "2a00:1eb8::/35": "8764", - "2a01:c50f:b400::/39": "12479", - "2405:8a00:a032::/41": "55824", - "2408:84f3:9c10::/42": "134543", - "2a01:367:abcd::/48": "201061", - "2a03:43e0::/32": "59748", - "2001:559:8159::/48": "33287", - "2605:f700:140::/42": "18978", - "2620:6e:c000::/48": "393401", - "2a02:214e::/31": "1241", - "2a02:2270::/34": "43939", - "2001:502:100e::/48": "397229", - "240a:a58f::/32": "144073", - "240a:afc7::/32": "146689", - "2610:130:3402::/32": "6122", - "2a09:7180::/30": "39614", - "2001:559:17b::/48": "7725", - "2001:4878:8000::/48": "12222", - "240e:980:4900::/40": "23724", - "2604:cf80::/32": "3257", - "2a0e:b107:194::/48": "207650", - "2a03:65e0::/32": "207426", - "2606:5580:4000::/38": "63242", - "2607:fa58::/32": "31877", - "2801:80:3680::/48": "269133", - "2803:7380::/32": "27781", - "2804:3f10:8000::/33": "262566", - "2806:230:6004::/48": "265594", - "2a00:e50::/29": "15451", - "2409:8920::/29": "56046", - "2600:1488:6141::/43": "20940", - "2800:160:222c::/41": "14259", - "2806:2a0:19::/46": "28548", - "2a02:fb8::/32": "56329", - "2a02:26f7:df4d::/42": "20940", - "2001:559:c1e0::/48": "33651", - "2001:67c:18a8::/48": "50438", - "2607:3a80::/42": "395100", - "2a00:e70::/32": "43655", - "2a02:587:50f8::/46": "6799", - "2a05:7400::/34": "31257", - "2a05:d000:6000::/40": "16509", - "240e:965:ec00::/30": "4134", - "2801:1d0:1::/48": "3549", - "2604:9dc0::/32": "393626", - "2a02:2e02:a30::/41": "12479", - "2a03:8d40::/32": "61287", - "2a0c:f280::/29": "204703", - "2001:49d0:180::/42": "15116", - "2620:112:e000::/44": "26679", - "2800:160:2c03::/43": "14259", - "2804:1bc::/39": "10310", - "2001:559:c23a::/48": "33651", - "2a0d:e7c7:ffff::/48": "210015", - "2001:520:103b::/48": "8103", - "2001:559:43b::/48": "21508", - "2408:8459:1e50::/39": "17816", - "240a:abfa::/32": "145716", - "2803:ace0::/32": "269908", - "2804:24e8:c000::/34": "53171", - "2806:20d:5100::/38": "32098", - "2403:5800::/48": "4764", - "2404:f801:802c::/48": "45139", - "240e:67c:8c00::/33": "4134", - "2a06:b800:1000::/36": "48096", - "2a0f:607:1051::/48": "131668", - "240a:ae06::/32": "146240", - "2a02:26f7:d905::/46": "20940", - "2a03:90c0:4a0::/41": "199524", - "2a07:f9c0::/29": "60144", - "2600:9000:103b::/48": "16509", - "2804:10e8::/35": "263655", - "2804:3d78::/32": "266533", - "2a02:26f7:d088::/48": "36183", - "2401:b0c0:a000::/48": "136941", - "2402:800:387f::/40": "7552", - "240e:3bc:c000::/37": "140315", - "2600:180f::/32": "16552", - "2804:33bc::/32": "265414", - "2001:e68:2001:2::/40": "4788", - "2405:6e00:2400::/43": "18291", - "2600:100d:9e00::/44": "6167", - "2600:9000:11b6::/47": "16509", - "2804:3260::/32": "265074", - "2804:3f14::/32": "266638", - "2600:370f:2060::/45": "32261", - "2606:ff80:a::/48": "53259", - "2a02:6ea0:e600::/39": "60068", - "2a02:e980:a3::/39": "19551", - "2a03:36c0::/32": "12329", - "2a0a:e740::/29": "207020", - "2001:559:d2::/48": "7922", - "2408:8256:377c::/46": "17623", - "240e:44d:e80::/41": "4134", - "2602:ffe4:c2e::/43": "55836", - "2a00:10c0::/32": "8758", - "2401:7f40::/32": "136908", - "2600:6c38:10a::/45": "20115", - "2607:b600:12::/47": "10397", - "2a02:8200::/27": "9145", - "2001:67c:2780::/48": "200060", - "2401:ff80:1c8d::/46": "133954", - "2409:8924:2700::/36": "56046", - "2607:f4e8:14::/48": "23059", - "2600:370e:7000::/42": "32261", - "2604:7c0::/39": "395841", - "2804:6148::/32": "269226", - "2804:74d8::/32": "271007", - "2606:be80::/32": "394678", - "2610:20:2000::/43": "7764", - "2804:2144::/46": "52795", - "2001:df0:45::/48": "37918", - "2408:8459:b410::/42": "17623", - "2804:2728:702::/36": "263880", - "2806:230:202c::/48": "265594", - "2a04:4345:10::/44": "38965", - "2001:b70::/32": "25061", - "2600:1406:2000:100::/54": "2914", - "2608:120:c::/48": "5927", - "2801:16:a800::/48": "27817", - "2a02:2590::/32": "51615", - "2a02:26f7:d609::/46": "20940", - "2a10:53c0::/29": "34907", - "2001:d30:3::/48": "4796", - "2401:d280::/32": "133771", - "2600:1406:4::/44": "20940", - "2607:fee0:2100::/33": "3599", - "2605:8000:91::/38": "4261", - "2804:4054::/32": "265952", - "2606:df80::/32": "64227", - "2800:bf0:8265::/48": "27947", - "2001:57a:104::/40": "22773", - "2001:678:60c::/48": "207608", - "2401:8e00:9100::/33": "9260", - "2405:6e00:2488::/45": "133612", - "2800:160:165e::/42": "14259", - "2806:230:500b::/48": "11888", - "2a0e:1380::/35": "209987", - "2804:156c::/32": "61905", - "2001:559:856d::/48": "33287", - "2001:559:c128::/48": "33287", - "2001:1398:16::/48": "27678", - "2408:8459:5630::/41": "17622", - "2607:fb90:d900::/38": "21928", - "2800:200:b390::/42": "12252", - "2803:2a01:9800::/46": "27895", - "2804:1c24::/32": "28670", - "2a02:26f7:f249::/42": "20940", - "2a09:13c0::/48": "209562", - "2001:1980::/39": "29838", - "2602:fd66:b45::/37": "14756", - "2001:978:2305::/48": "9009", - "2400:9380:8030::/48": "4134", - "240e:44d:4080::/41": "4134", - "2600:4c00:200::/39": "63410", - "2602:ff67::/36": "15231", - "2620:110:f000::/44": "17012", - "2804:5b9c::/32": "268858", - "2400:9380:9050::/47": "4809", - "2409:8028:8f3::/45": "9808", - "2409:8a52:100::/38": "56047", - "2409:8c0c::/30": "56042", - "2600:6c38:d12::/47": "20115", - "2606:8c00::/48": "22995", - "2a0b:6b83::/35": "202562", - "2607:f858:9::/32": "4136", - "2401:d800:d7f0::/36": "7552", - "2a02:108::/32": "3292", - "2a0d:4fc0::/29": "49191", - "2001:4490:d800::/46": "9829", - "2402:3380::/32": "134119", - "2408:8656:2ef2::/44": "17623", - "2a00:1358:f100::/30": "6866", - "2a0d:8240::/29": "210190", - "2600:1007:b1b0::/41": "22394", - "2606:a600:4002::/48": "397933", - "2a02:cb43:a000::/47": "20546", - "2804:628c:2000::/42": "269303", - "2806:20d:5005::/43": "32098", - "2001:579:f040::/42": "22773", - "240e:63::/34": "140313", - "2607:fdf0:5e37::/44": "8008", - "2a0b:4341:1500::/48": "57695", - "2a10:8a40:ff01::/29": "39405", - "2001:559:63::/48": "7015", - "240e:44d:7b80::/41": "4134", - "240e:473:6e50::/39": "4134", - "2604:380::/32": "237", - "2a01:7080:15::/42": "42848", - "2a01:ae20::/32": "47381", - "2a03:2880:f120::/47": "32934", - "2408:8956:6900::/40": "17816", - "2602:807:6000::/46": "53978", - "2001:559:3da::/48": "7016", - "2402:800:5971::/44": "7552", - "2408:8956:9800::/40": "17622", - "2605:a000:70f::/36": "10796", - "2a0a:90c0:1090::/48": "205080", - "2a0e:b680::/29": "208016", - "2800:160:1496::/42": "14259", - "2a02:23a8::/32": "16164", - "2a03:3380:3::/32": "47169", - "2001:67c:1364::/48": "41289", - "2400:7100::/32": "63590", - "2400:a980:7900::/37": "133111", - "2602:fde5::/42": "393424", - "2605:a401:87c4::/36": "33363", - "2a02:26f7:83::/48": "20940", - "2406:da1c::/36": "16509", - "2406:e002:1000::/34": "23655", - "2a01:7480::/32": "12750", - "2a11:c0::/32": "47753", - "2001:df4:e800::/48": "133453", - "2400:dc00:c000::/46": "131111", - "240a:a6fb::/32": "144437", - "2a00:1d36:1200::/39": "47331", - "2a03:1a00::/32": "39647", - "2001:1248:97b6::/44": "11172", - "2800:120:7::/32": "27843", - "2a00:79e1:805::/48": "15169", - "2a02:26f7:ecc4::/48": "36183", - "2a0b:1301::/32": "198018", - "2804:511c::/32": "268431", - "2001:df0:ea00::/48": "135469", - "2400:cb00:569::/48": "13335", - "2408:8956:9500::/40": "17816", - "2604:3400:dc3::/48": "209453", - "2605:e740:100::/40": "174", - "2620:11a:a0f1::/48": "36040", - "2804:11ec::/32": "52850", - "2401:ff80:198b::/45": "133954", - "2803:ba00:e00::/32": "52286", - "2a01:9700:1244::/46": "8376", - "2402:53c0::/36": "137144", - "2001:1a68:15::/48": "35491", - "2408:8459:8c30::/41": "17622", - "240a:a782::/32": "144572", - "2605:b280::/32": "26709", - "2804:28e4:e825::/35": "28260", - "2804:63f0::/32": "269393", - "2001:470:84::/44": "6939", - "2001:67c:2280::/48": "39399", - "2401:d800:bc80::/42": "7552", - "2001:44b8:30c8::/48": "4739", - "2401:6bfd::/32": "18220", - "2804:4d5c:c000::/34": "268192", - "2a02:26f7:c505::/46": "20940", - "2c0f:f3c0::/32": "3491", - "240a:ae48::/32": "146306", - "2a02:24b8::/40": "52030", - "2803:9c60::/32": "27896", - "2804:3ac0:f7b0::/36": "266107", - "2a0d:f103::/32": "208449", - "2804:6a70::/32": "270336", - "2a09:6340::/44": "42721", - "2001:cb0:210::/34": "4637", - "2620:0:2d0::/48": "40528", - "2a07:6c0::/29": "62116", - "2801:17:4800::/48": "27951", - "2001:4cec::/32": "34868", - "2404:cc80::/32": "135352", - "2a00:f980::/32": "21293", - "2a05:4140:6::/48": "211188", - "2a02:2638::/46": "44788", - "2400:fa40::/32": "58768", - "2401:8800:c06::/40": "17439", - "240a:a3de::/32": "143640", - "240a:a848::/32": "144770", - "2600:140b:1801::/38": "20940", - "2804:20c::/32": "28172", - "2a00:f940::/48": "12695", - "2001:840::/29": "5381", - "240e:982:a100::/38": "4812", - "2804:3d98::/32": "266541", - "2800:870:1003::/32": "6762", - "2001:67c:265c::/48": "24861", - "2607:fb10:5043::/42": "2906", - "2804:5948::/32": "268181", - "2001:470:7a::/40": "6939", - "2402:7500:4ff::/48": "24158", - "240a:a0f5::/32": "142895", - "2a0d:8680::/32": "204570", - "2607:9100::/32": "21743", - "2a01:aa40::/32": "59622", - "2a0c:3ec7::/32": "204310", - "2409:8914:4800::/34": "56044", - "2409:8a18::/31": "134810", - "2803:dac0:15::/38": "265634", - "2804:4b20::/32": "267285", - "2a01:b5a0::/32": "45010", - "2a0d:2581:5::/48": "209261", - "2a0e:6d00::/29": "39761", - "2402:8100:2470::/40": "55644", - "2404:e801:1004::/46": "55430", - "240e:3b4:ac00::/35": "4134", - "240e:804::/40": "140636", - "2600:1a0f:1001::/36": "46650", - "2804:14c:4d2::/42": "28573", - "2001:49f0:d0fb::/45": "174", - "240e:982:d900::/37": "4134", - "2607:8200:c000::/36": "6295", - "2607:a800:647::/48": "15695", - "2803:f00:49c::/41": "262182", - "2a01:c500::/29": "12479", - "2a07:8100::/29": "202865", - "2401:d800:6000::/35": "7552", - "2620:149:a12::/48": "6185", - "2804:2cd4:30::/41": "265246", - "2602:ff96:9::/48": "40676", - "2604:600::/33": "40260", - "2804:5e48:ff10::/48": "269023", - "2a00:6720::/32": "34031", - "2402:800:3601::/44": "7552", - "240e:473:4550::/40": "4134", - "240e:966:2000::/37": "4134", - "2a06:6540:3081::/48": "3549", - "2a0c:e640:8::/36": "211876", - "2a04:4e40:1e10::/41": "54113", - "2001:1248:5965::/44": "11172", - "2620:113:80c4::/42": "3680", - "2800:160:1d59::/42": "14259", - "2804:2cac:cccd::/35": "265234", - "2804:7520::/32": "271025", - "2a02:2698:7400::/38": "49048", - "2a02:26f7:d044::/48": "36183", - "2001:67c:7a4::/48": "199121", - "240a:61:e00::/48": "9605", - "2804:13dc::/32": "262428", - "2a03:6420::/32": "39384", - "2400:a980:c0::/44": "133111", - "2409:8c15:3c00::/33": "56044", - "2a01:678::/29": "29608", - "2001:559:8539::/48": "33652", - "2001:2001:5000::/36": "1299", - "2804:5ed8::/32": "269060", - "2a01:61c0::/40": "20860", - "2a01:c50f:f780::/36": "12479", - "2001:4878:4204::/48": "12222", - "2409:8914:c600::/39": "56044", - "2a04:9dc0:21::/29": "9009", - "2a0e:b107:b20::/44": "63279", - "240a:a1c3::/32": "143101", - "2a02:d8::/32": "44654", - "2400:6600::/32": "9812", - "2602:fdc8::/36": "397656", - "2804:2320::/43": "264144", - "2a05:1280::/29": "200647", - "2001:559:c17a::/47": "7016", - "2409:806b:3900::/33": "9808", - "2409:8904:5c70::/40": "24547", - "2620:110:e000::/46": "16653", - "2804:34bc::/32": "265476", - "2a03:5a00:8::/48": "49124", - "2c0f:f980::/35": "33763", - "240e:1c:6000::/32": "4134", - "2a02:ee80:424f::/43": "3573", - "2001:2f8:1003::/44": "2907", - "2001:559:821e::/48": "7015", - "2402:aa40::/32": "137330", - "2409:803c:3000::/40": "24444", - "2804:542c::/35": "268633", - "2a02:ef8::/32": "56730", - "2a03:4b27:f000::/36": "204320", - "2600:1404:a401::/38": "20940", - "2600:1406:8001::/37": "20940", - "2620:10:e000::/48": "55228", - "2c0e:4010:a000::/36": "36994", - "2001:1388:4::/44": "6147", - "2405:8a00:c024::/46": "55824", - "2409:8087:1e00::/39": "24400", - "240a:ac31::/32": "145771", - "2620:11d:9004::/44": "33186", - "2a01:5b0:27::/44": "50611", - "2001:1248:a51b::/42": "11172", - "2001:1520:7::/44": "8972", - "2400:9700:130::/32": "24550", - "2408:8956:1700::/40": "17816", - "2804:6a00::/32": "270305", - "2a02:29d0::/32": "35575", - "2408:8256:3c61::/43": "17623", - "2600:140e:2::/48": "24319", - "2600:14a0:1::/40": "20940", - "2803:7e00:600f::/32": "28026", - "2804:3d04::/32": "266248", - "2a00:10c8::/32": "12835", - "2a0c:4380:9ff2::/48": "51945", - "2404:6800:480f::/32": "15169", - "2600:1009:b040::/42": "6167", - "2a01:a940::/32": "15954", - "2001:4878:a010::/48": "12222", - "240a:ad65::/32": "146079", - "2607:7b00:7000::/36": "54643", - "2607:fcd0:fa80:3601::/52": "8100", - "2a00:f70::/32": "30962", - "2a02:2430:5::/46": "59491", - "2c0e:2007:200::/23": "5713", - "2001:559:84f0::/48": "7016", - "2001:67c:2124::/48": "39526", - "2001:1a98::/29": "6677", - "2401:4900:40a0::/41": "45609", - "2402:800:b0a0::/41": "7552", - "2408:8957:7c00::/40": "17622", - "2606:8b80::/32": "15129", - "2001:559:58e::/48": "7015", - "2408:8957:2c00::/40": "17622", - "2804:154c:500d::/46": "263382", - "2408:840c:8f00::/40": "17621", - "2600:1003:b1e0::/37": "22394", - "2804:145c:d000::/36": "263327", - "2a01:6960::/32": "39542", - "2a0e:aa07:e200::/44": "210903", - "2001:678:c40::/48": "207754", - "2402:800:9e40::/43": "7552", - "2402:800:9847::/43": "7552", - "2409:8062:2c00::/35": "9808", - "2804:45f8::/32": "266958", - "2a0b:6c80::/32": "12586", - "2603:c023:4000::/35": "31898", - "2804:466c::/32": "262689", - "2a00:c827:7::/32": "60330", - "2a01:1b8:6::/32": "1257", - "2404:bf40:ec02::/35": "139084", - "240e:838:50::/25": "4134", - "2804:3868:1000::/37": "266475", - "2804:5550:200::/33": "263067", - "2806:2f0:72::/40": "17072", - "2a03:aa40::/34": "12843", - "2001:df6:b780::/48": "142290", - "2604:3380::/28": "46437", - "2605:67c0::/32": "397911", - "2607:6100::/45": "54380", - "2a04:4e40:2010::/41": "54113", - "2402:ee80:b::/45": "132647", - "2a0c:8305::/32": "61049", - "2402:800:532b::/41": "7552", - "240a:a56a::/32": "144036", - "2607:fb00::/32": "13760", - "2806:3a9::/33": "265626", - "2a02:26f7:d8c1::/46": "20940", - "2001:67c:50::/48": "38970", - "2800:160:10d2::/47": "14259", - "2804:75b4::/32": "271064", - "2402:800:6277::/44": "7552", - "2409:801e:300f::/31": "24400", - "2a02:d280::/29": "197296", - "2001:559:c2c7::/48": "7015", - "2001:43f8:1f5::/48": "37668", - "2401:d800:5c50::/39": "7552", - "240e:44d:4780::/41": "4134", - "240e:438:2c40::/38": "4134", - "2800:160:1ee1::/44": "14259", - "2a01:8::/27": "2860", - "2a02:26f7:c984::/48": "36183", - "2a04:9500::/29": "62097", - "2a04:f580:9050::/48": "4809", - "2a0e:b105:524::/46": "20473", - "2620:149:a17::/48": "714", - "2001:678:61c::/48": "204423", - "2405:7f00:a560::/36": "133414", - "2407:c280:4000::/48": "24322", - "2a0b:eb80::/29": "38946", - "2800:b70:100::/48": "262191", - "2602:ffe2:99::/48": "53334", - "2406:840:f000::/44": "142582", - "2804:5f84::/32": "269105", - "2a0a:7cc0::/47": "60880", - "2001:559:83d1::/48": "7922", - "2400:9840::/32": "136217", - "2600:1408:9400::/48": "35994", - "2a02:26f7:db80::/48": "36183", - "2001:678:618::/48": "206006", - "240a:a687::/32": "144321", - "2a00:fc00:e003::/48": "47266", - "2a02:4c07:4000::/32": "12676", - "240e:878:180::/42": "137689", - "2804:1d04:5000::/36": "61689", - "2a02:26f7:e544::/48": "36183", - "2001:df0:b580::/48": "138876", - "2600:80c:1400::/39": "11486", - "2a01:ab20::/32": "47302", - "2400:dd0d:2001::/30": "7497", - "2605:6ac0:3000::/36": "32374", - "2a0d:5800::/29": "34422", - "2602:ffcb::/36": "21757", - "2a0f:1c0::/29": "60262", - "2001:67c:6f4::/48": "50073", - "240a:ab17::/32": "145489", - "2806:230:3019::/48": "11888", - "2a00:4820::/32": "24800", - "240a:a717::/32": "144465", - "2800:510::/32": "28022", - "2a00:b580::/32": "16188", - "2a02:6c20:6::/48": "207167", - "2a0b:bbc0:1c00::/40": "58010", - "2401:d800:d810::/42": "7552", - "240a:abf4::/32": "145710", - "2804:529c::/32": "268529", - "2403:18c0:1000::/47": "54574", - "240e:978:b00::/37": "4134", - "2600:1406:800::/48": "35994", - "2804:4220::/32": "267479", - "2a02:26f7:be44::/48": "36183", - "2001:418:2401:9::/64": "20940", - "2408:836c::/30": "4837", - "2600:140b:3::/48": "24319", - "2a05:6d80::/29": "9110", - "2001:550:8800::/48": "46642", - "2803:2a80:2::/48": "262928", - "2804:a54::/44": "262664", - "2a00:1af0::/29": "35699", - "240a:a33d::/32": "143479", - "2804:1080:8004::/33": "28287", - "2a09:e100::/29": "209834", - "240a:a59e::/32": "144088", - "240a:a5b9::/32": "144115", - "2607:fc58:1:30::/64": "13536", - "2a02:2350::/32": "51468", - "2a02:26f7:d249::/46": "20940", - "2a03:2887:ff15::/48": "35819", - "2001:408::/44": "14793", - "2001:559:8714::/48": "33662", - "2001:678:4b4::/48": "48395", - "2001:df0:e3::/48": "9536", - "2402:800:520f::/43": "7552", - "2a0e:97c0:4da::/48": "211024", - "2001:559:c235::/48": "7922", - "240e:3b2:ec00::/35": "140314", - "2a00:1728:25::/46": "34224", - "2a01:9980:1::/46": "50837", - "2a02:e982:3::/43": "19551", - "2a03:91c0::/32": "57394", - "2a0b:11c0:30::/45": "198682", - "2804:5c88::/32": "268914", - "2a05:1082:f000::/48": "211013", - "2a0d:3842:1100::/48": "57629", - "2a0e:b107:ae0::/47": "207632", - "2001:df0:d4::/48": "55870", - "2001:1508::/32": "29208", - "2409:8935::/28": "9808", - "240a:adeb::/32": "146213", - "2804:1dfc::/32": "262765", - "2001:67c:628::/48": "28727", - "2001:1938::/50": "12989", - "2a02:26f7:d600::/48": "36183", - "2a0e:b107:1596::/48": "142598", - "2001:550:1200:6::/45": "174", - "2605:7840:9130::/33": "12130", - "2a02:2a68::/32": "702", - "2804:53f0::/32": "268617", - "2a0c:9a40:1060::/48": "34927", - "2401:bc40:e303::/48": "136899", - "2600:6:ff05::/48": "1239", - "2a00:f46::/44": "43447", - "2a02:26f7:e384::/48": "36183", - "2403:e800:922::/32": "4637", - "2803:14c0::/32": "28023", - "2804:d0c::/32": "53112", - "2806:2f0:328::/41": "17072", - "2a04:4e40:2400::/45": "54113", - "2a0d:380::/29": "200044", - "2001:559:c2f2::/48": "33651", - "2604:9b40::/32": "29848", - "2804:18:6850::/39": "10429", - "240e:964:8c00::/35": "4134", - "2600:1013::/32": "6167", - "2a04:fa87:fffd::/46": "2635", - "2a0a:e200:1511::/36": "33438", - "2001:4408:6d00::/44": "55824", - "2408:8956:b700::/40": "17816", - "2607:7b00:3000::/33": "54643", - "2804:4de0::/32": "268225", - "2a04:c007::/32": "204248", - "2408:8956:9100::/40": "17816", - "2605:a401:860d::/42": "33363", - "2620:12f:c007::/44": "395831", - "2a04:5500::/29": "60357", - "2a09:9c00::/29": "209947", - "2c0f:e810::/32": "328624", - "2001:18e8:c02::/47": "10680", - "2404:df40::/32": "24249", - "240a:a4c2::/32": "143868", - "240e:250:2906::/48": "134419", - "2604:2e80:1804::/37": "30036", - "2604:e580::/32": "62600", - "2a04:b900::/31": "8587", - "2800:6e0::/32": "52320", - "2803:1a00::/35": "262186", - "2a02:26f0:4201::/39": "20940", - "2a02:26f7:c88d::/46": "20940", - "2a07:f680::/29": "202311", - "2400:a980:5100::/37": "133111", - "2400:adc4::/39": "9541", - "2605:f980::/32": "7753", - "2a0a:e040::/29": "42349", - "2409:8a20:c800::/34": "56046", - "240a:a7f4::/32": "144686", - "2620:186:8::/46": "19690", - "2001:559:bd::/46": "33491", - "2001:559:8415::/48": "33659", - "2001:6d0:6d06::/48": "8985", - "2405:1c0:6143::/43": "55303", - "2801:1b:800::/48": "267855", - "2001:579:a11d::/41": "22773", - "240a:a037::/32": "142705", - "2803:f7e0:2040::/48": "271773", - "2806:20d:162c::/43": "32098", - "2a02:f30::/32": "15879", - "2001:15d8::/32": "8657", - "2401:1840::/32": "136001", - "2600:1419:5c00::/48": "4230", - "2607:fb10:71d0::/32": "2906", - "2804:594::/32": "19723", - "2c0f:fda0::/32": "37525", - "2401:ff80:1b81::/45": "133954", - "2408:8459:3430::/44": "17623", - "2804:1538::/32": "263378", - "2804:2cac:bbbc::/33": "265234", - "2804:352c::/32": "262662", - "2804:50f4::/32": "268421", - "2804:72e4::/32": "270882", - "240a:a68d::/32": "144327", - "240e:438:8240::/37": "4134", - "2803:ba00::/37": "52286", - "2804:14c:475::/46": "28573", - "2001:559:202::/48": "33657", - "2001:4818:3000::/36": "40341", - "2404:f4c0:f90e::/47": "139833", - "2406:f700::/32": "132837", - "2620:13:2000::/48": "29807", - "2804:1b2::/35": "18881", - "2804:1d70::/32": "264368", - "2402:800:3a55::/42": "7552", - "240a:a2ef::/32": "143401", - "2804:2d4:10::/44": "28244", - "2401:b200:46::/43": "24186", - "2403:d000::/32": "23720", - "240a:a940::/32": "145018", - "2001:559:85b6::/44": "33491", - "2a02:ee80:40a9::/43": "3573", - "240a:a3c3::/32": "143613", - "240a:ae9f::/32": "146393", - "2a10:d700::/29": "44874", - "2600:100f:b070::/40": "22394", - "2a02:2600::/32": "48299", - "2a02:ce00::/29": "47521", - "2402:7340:1::/46": "136557", - "2408:8956:5e00::/40": "17622", - "2600:141b:14::/48": "35994", - "2806:10a6:4::/43": "8151", - "2804:7db8::/32": "271578", - "2001:559:80e1::/48": "33662", - "2001:678:da4::/48": "213068", - "2001:df1:ba80::/48": "139735", - "2402:b801:2900::/38": "18371", - "2408:8256:2f6e::/43": "17623", - "2409:8030:1009::/45": "9808", - "2600:1011:b070::/39": "6167", - "2a0a:d6c0:194::/48": "211447", - "2001:480:241::/43": "668", - "2408:4009:501::/22": "37963", - "2408:8456:1a40::/40": "17816", - "2804:17e0::/32": "263256", - "2a02:26f7:d148::/47": "36183", - "2a02:5360::/32": "51326", - "2a09:c740::/32": "205718", - "2001:559:c25a::/45": "20214", - "2406:8b40::/39": "141218", - "2a00:eb0:101::/32": "39912", - "2a02:26f7:d5ca::/42": "20940", - "2a0d:3a40:1::/48": "41838", - "2001:1398:275::/48": "52306", - "2a01:6bc0::/32": "50061", - "2001:252:ff00::/40": "4538", - "2001:559:c221::/48": "33657", - "240a:a640::/32": "144250", - "2606:3380:54::/48": "53334", - "2a0d:2146:8040::/48": "209864", - "2001:559:820d::/48": "7015", - "240a:ac8f::/32": "145865", - "2a0f:24c0::/29": "207954", - "2001:44b8:1066::/47": "7545", - "2402:8100:3840::/42": "45271", - "240e:438:3840::/38": "4134", - "2620:124:1000::/44": "12161", - "2802:0:12::/48": "18747", - "2804:6d24::/32": "270515", - "2a0e:b107:fa0::/44": "212756", - "2001:388:c5::/42": "7575", - "2408:8459:be30::/41": "17622", - "2804:3adc::/32": "266114", - "2a0b:4340:90::/48": "205610", - "2401:3d00::/28": "17547", - "240e:3b6:2800::/38": "4134", - "2607:f738:900::/41": "17184", - "2408:8459:6830::/41": "17622", - "240a:a316::/32": "143440", - "2803:d080::/32": "27960", - "2001:559:3::/44": "7922", - "2600:140b:cc00::/48": "24319", - "2800:160:1bbc::/46": "14259", - "2001:559:c3d7::/48": "22909", - "2402:3a80:1900::/40": "38266", - "240a:addc::/32": "146198", - "2602:fd72::/36": "2740", - "2804:1690::/37": "263292", - "2a04:f580:9220::/48": "4809", - "2404:4e00:1::/48": "32787", - "2801:80:13b0::/48": "264083", - "2400:dcc0:ad04::/38": "38631", - "2402:800:7690::/42": "7552", - "2001:1938:2001::/48": "26769", - "2800:160:127f::/40": "14259", - "2a02:26f7:f0c4::/48": "36183", - "2001:67c:2b80::/48": "60997", - "2001:67c:2fd0::/48": "201925", - "2400:5880::/32": "58983", - "2a00:a900::/33": "60819", - "2c0f:e8e8::/32": "327750", - "2001:559:832c::/48": "7016", - "2001:44b8:4070::/45": "7545", - "2604:3700:1000::/34": "10973", - "2620:130:5000::/44": "11714", - "2a02:26f7:d009::/42": "20940", - "2a10:1380::/29": "207335", - "2001:559:c327::/48": "7016", - "2001:ad0::/33": "3327", - "2600:80c::/40": "11486", - "2001:468:2640::/48": "11164", - "2406:ae00:101::/32": "55564", - "240a:a398::/32": "143570", - "2600:141b:1001::/37": "20940", - "2001:559:8445::/48": "21508", - "2408:8256:3283::/44": "17623", - "2804:51a4:4100::/34": "268467", - "2804:1994:d400::/34": "262905", - "2804:2210::/32": "264589", - "2a0c:4140::/32": "206656", - "2a0d:ec0::/29": "41709", - "2001:44b8:6066::/48": "7545", - "240a:aa9e::/32": "145368", - "240e:473:800::/41": "140485", - "2804:58::/32": "262659", - "2a01:4640:100::/38": "9042", - "2a02:2078::/32": "47720", - "2a0d:4f40::/32": "202724", - "2001:3c8:c306::/36": "4621", - "2001:4de0:6000::/40": "33438", - "240a:a1de::/32": "143128", - "2a02:26f7:fac8::/48": "36183", - "2a04:4720::/30": "31511", - "2a05:8700::/29": "43513", - "2a0d:3c45::/32": "51659", - "2400:cb00:94::/44": "13335", - "240a:aa9d::/32": "145367", - "240a:ac5d::/32": "145815", - "2602:fd50:bb::/48": "206628", - "2606:8700::/32": "7050", - "2a01:e0::/32": "39854", - "2a0e:2940::/29": "207787", - "240a:a081::/32": "142779", - "240e:473:b320::/41": "140486", - "2803:ad60::/32": "271920", - "2a06:5040:20::/45": "6134", - "2a06:e881:7300::/47": "213151", - "2a0e:b107:14e0::/44": "211481", - "2001:678:a40::/48": "204911", - "2a02:26f7:2f::/48": "20940", - "2a03:680::/32": "197518", - "2a04:cec0::/35": "5410", - "2a0d:2d40::/32": "62075", - "2a05:6a00::/29": "51395", - "2001:67c:1914::/48": "20708", - "2001:67c:2d84::/48": "201129", - "2402:ef2c::/31": "7633", - "2620:154:a10::/48": "16733", - "2804:14c:6330::/40": "28573", - "2a01:a280::/46": "35000", - "2a02:730:4000::/48": "42371", - "2001:56a:e::/47": "7861", - "2405:6400:2000::/35": "23678", - "2620:34::/48": "3356", - "2a04:4e40:f630::/44": "54113", - "2400:a980:38ff::/48": "133111", - "2404:c000:4004::/47": "55818", - "2604:bc40:6001::/39": "22188", - "2a02:2e02:89e0::/38": "12479", - "2a10:300::/29": "207367", - "2604:ca00:e000::/48": "36492", - "2606:3b00::/32": "4906", - "2804:3604::/32": "266321", - "2001:559:18b::/48": "7015", - "2600:2800::/30": "13490", - "2001:1a68:14::/48": "51373", - "2400:ee00:ffff::/48": "17962", - "2401:4900:1973::/45": "45609", - "2408:8456:4640::/36": "17816", - "240a:61::/36": "9605", - "240a:abc2::/32": "145660", - "240e:3b1::/35": "134773", - "2606:6680:30::/48": "12129", - "2a0d:c480::/29": "60721", - "2001:559:3d9::/48": "7922", - "2408:8656:2ef1::/48": "17816", - "2804:673c:4000::/32": "269615", - "2a06:7d40::/29": "34428", - "2602:fddb::/36": "397460", - "2001:559:354::/47": "7922", - "2001:5d8::/32": "3742", - "2804:7540::/35": "271034", - "2a01:4ae0::/32": "59933", - "2407:3c80:3::/45": "55705", - "240e:97f::/33": "58543", - "2602:ff96:1a::/48": "40676", - "2408:8256:3780::/44": "17623", - "240a:a04d::/32": "142727", - "2602:fe19:4003::/45": "26073", - "240a:a987::/32": "145089", - "2605:a401:8313::/42": "33363", - "2a00:1a40::/32": "33923", - "2a06:21c0::/29": "51942", - "240a:a67b::/32": "144309", - "240e:b3c::/25": "4134", - "2606:4640::/32": "399521", - "2804:2aec::/32": "265125", - "2a07:59c6:eed3::/48": "48646", - "2400:cb00:373::/45": "13335", - "2606:8100::/32": "21817", - "2a05:fb45::/32": "208861", - "240e:944:1000::/34": "4134", - "2600:1009:a020::/40": "22394", - "2602:ff1d::/47": "31843", - "2607:ffb0::/34": "6327", - "2800:160:1d92::/42": "14259", - "2a05:1500:500::/40": "43345", - "2001:df1:3580::/48": "135985", - "2400:c700:381::/35": "55644", - "2402:800:5e60::/43": "7552", - "2408:8409:a800::/40": "4808", - "2620:96:c000::/48": "399932", - "2801:13c::/42": "18747", - "2a00:4cc5::/32": "203875", - "2a02:26f7:66::/48": "36183", - "2a06:6c0::/46": "200738", - "240a:a0c3::/32": "142845", - "240e:870:10::/42": "4134", - "2600:6000:f570::/48": "11351", - "2620:148:f00::/44": "4983", - "2806:2f0:364::/43": "17072", - "2a0c:da04:10::/46": "202365", - "2001:253:106::/48": "142072", - "2402:800:32d3::/44": "7552", - "2406:8600:efaf::/48": "45915", - "2602:fc8b::/47": "211544", - "2c0f:ecc0::/47": "328523", - "2407:500:500::/48": "58940", - "2408:8459:8e30::/41": "17622", - "2a00:b940::/32": "33991", - "2a02:970:1447::/44": "44002", - "2a04:1bc7::/32": "60982", - "2001:13c7:7002::/48": "28001", - "2400:a980:3500::/36": "133111", - "240a:a57e::/32": "144056", - "240a:a67d::/32": "144311", - "240e:3b8:f100::/36": "4134", - "2620:11f:7003::/45": "13737", - "2a02:26f7:d480::/48": "36183", - "2a06:180::/29": "198371", - "2404:6900:cd00::/34": "17819", - "2804:2728:3::/37": "263880", - "2a03:a300:2000::/48": "35104", - "2a05:4840::/29": "60576", - "2001:fd8:b080::/42": "132199", - "240a:af28::/32": "146530", - "2a06:b282::/29": "199213", - "2408:840d:2900::/42": "17621", - "2602:fe6a:10::/40": "54632", - "2800:160:1994::/44": "14259", - "2a03:7380:5840::/42": "13188", - "2800:160:1634::/41": "14259", - "2804:7dc8::/32": "271582", - "2a02:330::/45": "31261", - "2a07:3c00::/29": "42093", - "2a0d:c740:1c::/48": "49367", - "2600:1417:e000::/48": "8966", - "2804:7974::/32": "271306", - "2a02:26f7:f181::/46": "20940", - "2a03:2880:f020::/47": "32934", - "2a03:ebc0:1000::/36": "31400", - "2a06:78c0:db::/48": "210079", - "2a0b:6900::/48": "206873", - "2a0e:8f00:dfc0::/42": "213018", - "2001:661:8000::/35": "2470", - "2406:e000:37a::/40": "23655", - "2607:fdf0:5e3e::/47": "8008", - "2804:5ae4::/32": "268803", - "2a03:6960::/32": "198944", - "2a0e:46c7::/48": "34681", - "2a00:c020:9000::/33": "200414", - "2a02:ae8::/29": "20625", - "2402:800:3901::/44": "7552", - "2409:8051:3800::/47": "56047", - "240e:87c::/40": "137692", - "2606:2940::/32": "15017", - "2a01:6240::/29": "58273", - "2a02:26f7:cd84::/48": "36183", - "2001:559:874a::/45": "7922", - "2409:8004:3041::/43": "24547", - "2804:39ac::/32": "266043", - "2a02:2e02:8b00::/41": "12479", - "2a02:f040::/47": "59605", - "2001:dcc:6::/48": "131100", - "240a:14:ecc::/48": "9605", - "2607:f6f0:6001::/48": "394749", - "2a03:3160::/32": "62149", - "2001:7fc:2::/48": "3970", - "2001:ee0:3d0::/35": "45899", - "2404:2600::/32": "4776", - "2406:840:e1ec::/48": "141237", - "2804:da0::/32": "28587", - "2804:537c::/32": "268587", - "2a02:1348::/32": "51059", - "2a04:680::/29": "61395", - "2001:4878:21e0::/44": "35994", - "2401:1880::/32": "45177", - "2804:254::/32": "262806", - "2a02:22c0::/32": "43045", - "2a09:84c0:700::/32": "8145", - "2001:7fc:1::/48": "16509", - "240a:af2f::/32": "146537", - "2620:17e:21::/43": "26072", - "2804:15fc::/33": "28359", - "2a02:fe0:dd06::/31": "41164", - "2a0c:af00:f5a1::/48": "205321", - "2400:13c0::/32": "135893", - "2602:fc5f::/36": "399772", - "2804:7f28::/32": "271670", - "2a02:26f7:e001::/46": "20940", - "2600:1403:8401::/36": "20940", - "240e:354:6400::/31": "4134", - "2604:6d00:1::/48": "36223", - "2804:7c30::/32": "271481", - "2a02:2971::/29": "43847", - "2001:1838:100b::/40": "23352", - "2a02:26f7:c980::/48": "36183", - "2401:ff80:1289::/43": "133954", - "2408:840d:7700::/42": "17621", - "2602:fea7::/40": "397270", - "2a02:26f7:e408::/48": "36183", - "2001:559:8493::/48": "7015", - "2404:0:10a7::/41": "17709", - "2406:3400:5d::/42": "10143", - "2408:8956:b900::/40": "17816", - "240e:3b9:9c00::/34": "140310", - "2001:1998:200::/39": "16787", - "2a01:750::/32": "6702", - "2a02:26f7:de44::/48": "36183", - "2a0c:9640::/29": "197248", - "2408:8957:c400::/40": "17622", - "2600:370f:3645::/43": "32261", - "2604:d600:616::/47": "32098", - "2620:11f:7005::/48": "399333", - "2a03:f80:56::/48": "28099", - "240a:aaa6::/32": "145376", - "2602:fe34::/36": "397095", - "2801:80:3e80::/48": "271640", - "2a00:10b8::/32": "47116", - "2a02:c205::/30": "51167", - "2a0d:b600::/29": "48642", - "2800:68:11::/48": "262212", - "2a00:18e0:2::/48": "196763", - "2a03:c7c0::/32": "59432", - "2a0c:8dc7::/32": "43260", - "2a0d:ae80::/32": "34953", - "2001:df3:ff80::/48": "140924", - "2606:c000::/32": "2721", - "2408:8459:b010::/42": "17623", - "2806:2f0:9102::/42": "17072", - "2a00:1b98::/32": "25376", - "2a0c:d2c0::/32": "57335", - "2a0d:3841:1030::/48": "57629", - "2a0b:5c80::/29": "204779", - "2001:559:8630::/48": "33659", - "240e:3b7:5600::/34": "4134", - "2604:180:9::/45": "3842", - "2804:4b0::/32": "262459", - "2a00:1760::/30": "42772", - "2a02:28d8::/36": "15774", - "2a05:d540::/29": "47269", - "2a0f:f380::/29": "60262", - "2a0b:bc7::/32": "39122", - "240a:aa6a::/32": "145316", - "2a0e:b107:1dd::/46": "139328", - "240a:aa2d::/32": "145255", - "240e:473:7c50::/39": "4134", - "2607:f3a0:a005::/48": "399815", - "2a02:2af8::/39": "702", - "2a07:be00::/29": "31723", - "2a01:c50f:dd40::/38": "12479", - "2001:559:c325::/48": "7725", - "2400:6280:139::/46": "132280", - "2407:ac0::/32": "136696", - "240a:aaa4::/32": "145374", - "2a00:ee8::/32": "43503", - "2a01:178::/32": "8607", - "2a01:5042:eff::/48": "202196", - "2a02:26f0:7600::/48": "34164", - "2001:4210:9805::/44": "25818", - "2602:feda:c51::/48": "212279", - "2604:5b80::/32": "22898", - "2803:f3e0::/43": "270077", - "2001:559:c181::/46": "7922", - "240e:108:11d8::/48": "134769", - "2606:6a00::/32": "14280", - "2a04:5201:4::/48": "200740", - "2001:559:3b6::/48": "7922", - "2803:88e0::/32": "269868", - "2001:503:e8ef::/48": "7342", - "2401:d800:7160::/40": "7552", - "2604:2180::/32": "396098", - "2c0f:f408::/46": "37684", - "2406:600::/34": "4694", - "2801:88::/32": "53166", - "2a02:7b02:2000::/36": "48328", - "2a03:4f20::/29": "200719", - "2a0c:7680:1337::/48": "50629", - "2a0d:bd87::/32": "59601", - "2001:913:6000::/36": "204092", - "2404:6380:1000::/48": "138950", - "2800:bf0:8166::/40": "27947", - "2a03:afe1::/32": "198203", - "2001:559:46f::/48": "33287", - "2001:df1:6400::/48": "55925", - "2409:8a4d:e00::/30": "9808", - "2610:20:8030::/44": "6629", - "2800:440:9200::/42": "27738", - "2a02:26f7:da09::/46": "20940", - "2602:fc6a:210::/48": "399747", - "2804:4544::/40": "266915", - "2a0b:8f80:103::/48": "29290", - "2408:8956:3100::/40": "17816", - "240e:d9:b000::/33": "4134", - "2600:1009:a000::/43": "6167", - "2804:3c4c::/32": "266202", - "2001:b030:9400::/34": "3462", - "2400:9380:90c0::/44": "136167", - "2804:1bd8:8001::/40": "28224", - "2a01:c50f:bcc0::/38": "12479", - "2a03:3a40:2001::/32": "199629", - "2402:6440:1::/46": "135905", - "240a:a503::/32": "143933", - "2605:7380::/32": "25697", - "2804:2ee0::/32": "265372", - "2804:4204::/32": "267472", - "2a00:e2c0::/32": "6830", - "2a03:4b40:8000::/29": "50710", - "2402:4000:12f0::/34": "18001", - "2402:6800:3::/45": "55429", - "2620:0:402::/47": "3389", - "2804:1498::/32": "263339", - "2804:49bc::/32": "267200", - "2402:800:9c39::/41": "7552", - "2a0f:5707:aa00::/44": "34924", - "240e:473:9750::/40": "4134", - "2a02:26f7:db01::/46": "20940", - "240a:2:ccc::/48": "9605", - "240a:a543::/32": "143997", - "2001:559:800e::/43": "7922", - "2401:d800:500::/41": "7552", - "240e:473:3a50::/39": "4134", - "2a0f:8a00::/29": "43402", - "2a0e:2400::/29": "64463", - "2001:3c8:900a::/34": "4621", - "2001:67c:1b1c::/48": "43719", - "2400:6280:142::/45": "132280", - "2404:7180:aa10::/48": "23848", - "2409:8d1b::/29": "9808", - "2600:9000:107f::/40": "16509", - "2a0c:7180::/29": "35207", - "2001:ee0:320a::/41": "45899", - "2001:44c8:4000::/43": "131445", - "2607:fb58:4000::/36": "36086", - "2001:559:810f::/43": "33659", - "240e:44d:3b00::/41": "140345", - "240e:982:9400::/40": "63838", - "2804:5f38::/32": "269084", - "2a02:26f7:cd40::/48": "36183", - "2001:500:100::/46": "21775", - "2600:1017:9400::/44": "22394", - "2620:a3::/48": "116", - "2a06:b080:a001::/48": "203776", - "2a02:26f7:c308::/48": "36183", - "2001:3c8:1602::/39": "4621", - "2607:fae0:9000::/36": "62529", - "2a02:2e02:1e40::/42": "12479", - "2a04:6fb0::/31": "58005", - "2600:1407:12::/48": "35994", - "2804:bd0:df::/32": "10670", - "2a02:26f7:de01::/46": "20940", - "2a0d:f46::/32": "61157", - "2408:8456:640::/39": "17816", - "240e:e1:1000::/33": "4134", - "2620:0:2a09::/48": "30343", - "2a03:6400::/43": "11054", - "2001:559:868a::/48": "33657", - "2400:adc0:c000::/47": "9541", - "2404:b300:10::/48": "59318", - "240e:90e:3000::/27": "4134", - "2602:ff88::/36": "33346", - "2600:1010:be0e::/39": "22394", - "2600:8070::/28": "29992", - "2800:410::/32": "10269", - "2a02:26f7:e905::/46": "20940", - "2610:a1:3024::/48": "12008", - "2620:d4:8000::/48": "27250", - "2804:4c24::/32": "263103", - "2a02:26f7:be00::/48": "36183", - "2001:559:43::/48": "33491", - "2001:559:857c::/48": "33659", - "240a:aa84::/32": "145342", - "240e:62:c000::/36": "4134", - "2602:feda:af8::/48": "138210", - "2604:5500:9000::/38": "19165", - "2604:9d80::/43": "395172", - "2a06:aa40:cadb::/48": "51931", - "2409:8914:c200::/39": "56044", - "2a06:e881:180f::/48": "206885", - "2a07:1c44:6300::/37": "64473", - "2803:3b80:c000::/36": "263702", - "2804:53b8::/32": "268602", - "2a00:d2e0::/29": "15600", - "2404:3800:f::/48": "38719", - "2a04:4e40:4200::/48": "54113", - "2001:480:561::/38": "668", - "2401:4900:4bd5::/44": "45609", - "2600:1008:a020::/40": "22394", - "2a06:2bc0::/29": "204171", - "2001:470:e4::/48": "36103", - "2001:67c:2e10::/48": "200986", - "2404:60c0::/32": "131911", - "2408:80ea:7700::/41": "17816", - "2001:df6:4880::/48": "140168", - "2402:800:949b::/42": "7552", - "240a:affd::/32": "146743", - "2804:48dc::/32": "267149", - "2a02:c0::/32": "39029", - "2001:c20:b006::/33": "3758", - "2404:4f80:320::/32": "58715", - "2806:104e:13::/42": "8151", - "2a02:26f7:d2c9::/42": "20940", - "2620:6c:40c0::/48": "32", - "2001:418:1456:1400::/52": "2914", - "2001:559:857a::/48": "7016", - "2001:810::/32": "8839", - "2404:f4c0:1100::/48": "37972", - "2600:140f:a800::/48": "9498", - "2600:1417:2::/48": "24319", - "2600:370f:74c8::/47": "32261", - "2804:eec:4002::/48": "25933", - "2a00:55a0:7::/48": "19969", - "2a01:c50f:a4c0::/38": "12479", - "2a02:26f7:bdc5::/46": "20940", - "2408:8459:9410::/42": "17623", - "2804:43dc::/32": "267595", - "2a01:4400:6::/48": "1257", - "2a02:26f7:f6e4::/48": "36183", - "2a0e:fd40::/39": "44103", - "2001:67c:2788::/48": "3301", - "2803:8060::/32": "267803", - "2a02:218::/29": "44973", - "2a02:970:1449::/39": "44002", - "2001:fd8:b270::/44": "4775", - "2402:e380:309::/48": "137940", - "2a0e:b107:22::/48": "208181", - "2001:1978:2000::/40": "13768", - "2403:bf40::/48": "131386", - "2405:ec01:2000::/32": "137412", - "2409:8c30:150::/35": "9808", - "2001:67c:20::/48": "198303", - "2a0f:9207:25::/32": "45009", - "2409:8902::/31": "38019", - "2806:250:10::/48": "28555", - "2001:559:b6::/47": "33287", - "2408:8957:d6c0::/39": "17816", - "2a00:8920::/32": "25415", - "2a02:26f7:d5c0::/48": "36183", - "2a07:6cc0:30::/47": "61098", - "2001:4490:7f8::/45": "9829", - "2402:d000:8139::/45": "9329", - "2620:10a:8003::/48": "15290", - "2804:238c:1000::/36": "264169", - "2a0a:1dc4::/30": "35758", - "2a10:2f00:168::/48": "211640", - "2001:460::/44": "3561", - "2001:ee0:df00::/34": "45899", - "2606:4680::/32": "19116", - "2804:57f4:800::/48": "264349", - "2607:3180:b001::/33": "14877", - "2804:3400::/32": "265430", - "2600:1408:1c01::/34": "20940", - "2801:80:3770::/46": "269498", - "2804:58c8::/32": "268149", - "2a0b:c700::/29": "204403", - "2001:b400:f218::/45": "17421", - "2600:1417:9801::/34": "20940", - "2610:108:3100::/40": "13506", - "2804:1e70::/33": "264429", - "2001:67c:2ae8::/48": "58329", - "2001:c20:486f::/43": "3758", - "2600:6c38:50a::/45": "20115", - "2a01:14f::/32": "47443", - "2a02:26f7:c040::/48": "36183", - "2001:678:e78::/48": "41225", - "2a00:1218::/32": "34772", - "2a01:7d8::/47": "34744", - "2600:100d:b0f0::/44": "22394", - "2a0f:b104::/48": "213110", - "2407:8b80::/32": "63631", - "2a02:70e0::/32": "61296", - "240a:a5a4::/32": "144094", - "240a:aa38::/32": "145266", - "2604:c400::/32": "30350", - "2a06:8dc6::/44": "57878", - "2401:f880::/32": "133936", - "2402:3a80:1364::/47": "38266", - "240e:3b9:7600::/39": "140313", - "240e:3bc:ac00::/35": "4134", - "2607:f4e8:ac2::/48": "55429", - "2804:6028::/32": "269149", - "2a00:800:441::/31": "1257", - "2001:1248:5998::/45": "11172", - "2620:91::/48": "6124", - "2a02:26f7:bb01::/45": "20940", - "2a02:2e02:9f70::/40": "12479", - "2400:9880::/32": "133333", - "2409:8d80:9000::/34": "56040", - "2803:a0a0:901::/48": "269799", - "2804:680:b00::/37": "262589", - "2a01:5a80::/32": "13213", - "2a04:1c84::/32": "60964", - "2001:550:3801::/38": "174", - "2001:1618::/32": "15702", - "2402:e800::/32": "37912", - "2605:700::/32": "13750", - "2804:738::/32": "53153", - "2804:8198::/32": "272464", - "2a00:d280::/48": "43919", - "2403:a800::/32": "1239", - "2408:8459:250::/37": "17816", - "240a:a584::/32": "144062", - "2a02:26f7:be49::/42": "20940", - "2a05:1082:f00f::/48": "210956", - "2001:2040::/32": "3301", - "240e:3bf:2c00::/35": "134774", - "2602:805:2000::/45": "394392", - "2a03:e140:f::/48": "42608", - "2400:7fc0:240::/44": "55960", - "2402:8100:2600::/42": "45271", - "2409:8904:d0b0::/39": "24547", - "2605:c00:1200::/40": "46920", - "2607:fe28:11::/34": "53347", - "2610:a1:303c::/48": "12008", - "2806:2f0:8161::/40": "17072", - "2a0b:52c0::/32": "205691", - "2400:10c0::/32": "136007", - "2401:d800:f830::/41": "7552", - "2603:b010:fffe::/47": "11796", - "2a09:7c45::/32": "135330", - "2001:559:301::/48": "33652", - "2408:8a06::/47": "9929", - "2804:a14:8400::/35": "262342", - "2a00:1230::/29": "20902", - "2a02:26f0:9a01::/39": "20940", - "2001:559:13b::/48": "397601", - "2001:6d0:ffd9::/48": "3316", - "2800:ab0::/32": "262196", - "2804:5520::/36": "268691", - "2a09:3700::/29": "61100", - "2001:559:86f3::/48": "7725", - "2409:8050:3100::/37": "9808", - "240a:a337::/32": "143473", - "2604:9140:ffff::/48": "265721", - "2a05:f780:4000::/36": "57667", - "2001:678:d98::/48": "3303", - "2a04:8880::/31": "52102", - "2a06:b1c0::/29": "203765", - "2a09:8280:2f::/48": "40509", - "2a0e:b107:23::/48": "44024", - "2001:559:8298::/47": "33661", - "2401:d800:5b0::/41": "7552", - "2403:300::/37": "714", - "240a:a81b::/32": "144725", - "2620:1d5:d::/39": "14773", - "2a01:b740:a1f::/48": "714", - "2a02:a30:f091::/45": "8926", - "2400:3f80::/32": "7664", - "2607:f3a0:2000::/35": "40061", - "2804:3e10::/32": "266571", - "2001:500:3::/48": "20144", - "2001:559:8177::/44": "7922", - "2408:8956:3f00::/40": "17816", - "240e:3ba:2800::/38": "4134", - "2804:14d:a495::/41": "28573", - "2a06:bbc2:1::/48": "212044", - "2a0a:90c0::/44": "198912", - "2602:fd66::/36": "14756", - "2803:1a00:4113::/35": "262186", - "2804:5e68::/32": "269031", - "2a04:4e40:7e00::/48": "54113", - "2403:3800:601::/39": "4007", - "2408:8957:3b00::/40": "17816", - "2a00:ccc1:4::/48": "30823", - "2001:559:c353::/48": "7016", - "2620:171:3b::/45": "42", - "2804:14d:8000::/40": "28573", - "2a0b:4340:530::/41": "131477", - "2001:67c:2938::/48": "1880", - "2001:12e0:200::/40": "10429", - "2001:4488:f962::/38": "7713", - "2600:6c3a:77::/37": "20115", - "2806:370:5500::/40": "28403", - "2a03:a580::/32": "197914", - "2a0a:ec00::/32": "20836", - "2402:800:61a5::/43": "7552", - "2409:8a1e::/31": "24400", - "2620:1ec:34::/48": "8068", - "2a0b:8140::/29": "38948", - "2408:8456:1d40::/40": "17816", - "240a:a808::/32": "144706", - "2620:11b:e0c2::/42": "3356", - "2804:ef0::/39": "263558", - "2402:b180:9000::/36": "49544", - "2804:cb8::/32": "53213", - "2001:559:334::/48": "7015", - "2a03:6947:200::/40": "49800", - "2404:f900:21::/43": "58482", - "2405:4240:1::/48": "135370", - "240a:a7c2::/32": "144636", - "2804:1314::/32": "263514", - "2a0a:ec02:301::/48": "42692", - "2a0e:8f00:f100::/47": "49933", - "2402:9900:411::/48": "132084", - "2a00:1210:fffd::/48": "16223", - "2a00:86c0:2078::/47": "2906", - "2401:4900:1680::/39": "45609", - "2408:8956:bd00::/40": "17816", - "2602:fce8::/36": "395823", - "2800:68:40::/48": "27947", - "2804:47fc::/32": "267090", - "2806:2f0:3124::/41": "17072", - "2a0e:97c0:1505::/48": "20473", - "2408:84eb::/29": "4837", - "2801:80:1d30::/48": "265916", - "2804:2098::/32": "264500", - "2806:230:3021::/48": "11888", - "2001:56a:4::/44": "852", - "2001:b28:5::/33": "42065", - "2607:ac80:100::/40": "397511", - "2001:559:862c::/48": "33287", - "2001:67c:1368::/48": "20932", - "2404:bf40:8083::/39": "139084", - "240e:379:1a00::/34": "140330", - "2606:4840::/32": "399570", - "2804:14c:5f00::/40": "28573", - "2a02:26f7:f0c9::/42": "20940", - "2001:67c:1e4::/48": "15779", - "2a04:6c80::/48": "6718", - "2001:559:83c6::/48": "7015", - "240a:a81c::/32": "144726", - "240e:980:2300::/40": "58519", - "2603:c0e8::/39": "1218", - "2604:4300:f0d::/43": "33387", - "2804:2784::/32": "263906", - "2001:67c:22e4::/48": "47886", - "2607:e880:8224::/48": "12220", - "2607:f8f0:210::/41": "271", - "2804:256c::/32": "264280", - "2a02:26f0:3701::/36": "20940", - "2804:1f8::/32": "262787", - "2804:66ec::/32": "269591", - "2a10:c941::/43": "35277", - "2403:7200::/32": "9785", - "240a:aa43::/32": "145277", - "240a:afd6::/32": "146704", - "2600:380::/39": "20057", - "2804:2ec::/32": "262848", - "2a02:26f0:90::/45": "20940", - "2001:ee0:c340::/37": "45899", - "2409:8904:5640::/42": "24547", - "2600:1003:f110::/37": "22394", - "2409:8907:7120::/38": "24547", - "2607:f380:a68::/48": "396310", - "2804:3ccc::/32": "266235", - "2a02:4a40:100::/48": "42673", - "2409:803c:3900::/31": "9808", - "240a:ab6f::/32": "145577", - "2804:7744::/32": "271166", - "2a00:1e10::/32": "12494", - "240a:af6b::/32": "146597", - "2804:27a4::/32": "263914", - "2a00:1248:501d::/46": "39058", - "2a0e:b107:ea8::/46": "211640", - "2001:559:c204::/48": "7922", - "240a:a68b::/32": "144325", - "240a:a759::/32": "144531", - "2605:ed00:6887::/48": "3834", - "2a01:d8::/45": "5537", - "2a05:68c0::/29": "201059", - "2a0e:5c41::/30": "57578", - "2001:559:86a0::/47": "7015", - "2600:1415:e001::/37": "20940", - "2604:d600:1570::/46": "32098", - "2804:2084::/35": "264496", - "2804:34f8::/32": "265492", - "2806:1000::/32": "8151", - "2a02:26f7:d140::/48": "36183", - "2001:df2:ce00::/48": "45899", - "2400:cb00:26::/44": "13335", - "2402:800:548d::/43": "7552", - "240a:a5e2::/32": "144156", - "240e:3b8:dc00::/34": "4134", - "2605:cd00::/32": "53907", - "2001:678:300::/48": "39892", - "2402:800:35e0::/44": "7552", - "2001:44b8:404d::/48": "4739", - "2001:49d0:8400::/38": "2496", - "2603:c011:e000::/36": "31898", - "2804:14d:4e00::/40": "28573", - "2407:6800::/32": "9723", - "240a:a11d::/32": "142935", - "240a:a8aa::/32": "144868", - "2600:1407:22::/45": "35994", - "2605:7440::/32": "20128", - "2607:6000:100::/40": "12189", - "2607:f820::/34": "11051", - "2a01:54e0:6800::/38": "62287", - "2401:4900:18e0::/44": "45609", - "2402:9d80:920::/41": "131429", - "2409:40c0:1000::/32": "55836", - "2801:170:1::/46": "264648", - "2a00:9500::/32": "43608", - "2a02:610:fffe::/48": "43615", - "2a0e:3940:d000::/36": "60767", - "2405:d3c0::/32": "133164", - "240a:a1e8::/32": "143138", - "240a:ab59::/32": "145555", - "2607:6004:100::/40": "12189", - "2c0e:7800::/24": "36969", - "2001:1248:9acf::/42": "11172", - "2800:160:1e93::/45": "14259", - "2a02:26f7:c356::/47": "20940", - "2a03:60c1::/29": "31251", - "2a0c:b381:400::/32": "204731", - "2001:df0:3600::/48": "135014", - "2602:fe9c::/36": "33345", - "2620:103:e019::/48": "13893", - "2800:160:1d34::/44": "14259", - "2806:106e:18::/42": "8151", - "2401:1d40:2101::/36": "59019", - "2401:d800:7cc0::/42": "7552", - "2409:8751:700::/36": "56047", - "240e:83::/37": "23724", - "240e:3b6::/35": "134773", - "240e:978:5000::/40": "137702", - "2804:4f8:a300::/36": "28263", - "2a02:c800:43::/32": "43930", - "2a02:e840:1002::/48": "8485", - "2a0a:6580::/32": "206548", - "2a0b:3780::/32": "206487", - "2a0e:b107:15e0::/48": "208753", - "2408:840c:8800::/40": "17621", - "240a:a133::/32": "142957", - "2600:140b:7401::/38": "20940", - "2a10:740::/29": "62240", - "2409:801f:300f::/32": "24400", - "2409:8904:9290::/39": "24547", - "240e:679:e600::/30": "4134", - "2600:6c3a:401::/46": "20115", - "2620:11a:a011::/48": "36040", - "2806:230:201c::/48": "265594", - "2a00:db60:4000::/48": "15224", - "2001:559:8554::/48": "7016", - "2001:13c7:6011::/48": "52375", - "2406:56c0::/32": "18229", - "240e:d9:a000::/37": "38283", - "2001:559:8720::/48": "33491", - "2001:a40::/32": "9186", - "2804:5348::/32": "268574", - "2620:135:f000::/44": "393468", - "2a00:16c8::/39": "50173", - "2401:d800:9ca0::/41": "7552", - "240a:a418::/32": "143698", - "2600:6c38:85a::/40": "20115", - "2c0f:edb0::/32": "36236", - "2001:253:113::/48": "142079", - "2001:2e0::/33": "9293", - "2001:c00:101::/33": "4618", - "2001:df0:8800::/48": "23901", - "2001:44b8:40d7::/48": "7545", - "2607:9080:6::/48": "7018", - "2a05:8943::/29": "3356", - "2001:559:173::/45": "7016", - "2408:8456:b840::/38": "17816", - "2600:370f:37a2::/41": "32261", - "2a06:ef40::/32": "50495", - "2a0a:4785::/32": "59504", - "2a10:4d40::/29": "49409", - "2401:fa00:60::/32": "45566", - "240a:ac1b::/32": "145749", - "240e:55:4000::/30": "4134", - "2602:ff99:6::/36": "14333", - "2607:fda8:8008::/48": "54004", - "2804:2f6c::/32": "264890", - "2620:9:6000::/48": "22742", - "2001:559:583::/48": "7015", - "240a:accc::/32": "145926", - "2607:fcf0:2::/45": "13445", - "2610:a1:3054::/48": "12008", - "2a02:2e02:1610::/40": "12479", - "240e:3b3:7800::/39": "4134", - "2804:958::/32": "263077", - "2a06:96c0::/29": "60517", - "2a02:26f0:e01::/35": "20940", - "2001:559:82a4::/48": "33287", - "240a:ac73::/32": "145837", - "240e:44d:1e80::/41": "4134", - "2610:a1:3048::/48": "12008", - "2803:6a0::/32": "266884", - "2804:1f38::/32": "268118", - "2806:2f0:42c1::/46": "17072", - "2a0e:c740::/29": "60262", - "2401:d800:9200::/42": "7552", - "2408:8256:2c84::/43": "17623", - "240a:a53d::/32": "143991", - "240e:109:8029::/48": "4134", - "2603:c013::/36": "31898", - "2a02:2660::/32": "42459", - "2a0c:4a00:c10::/42": "203351", - "2406:2000:ef69::/48": "56173", - "2600:4041:1000::/24": "701", - "2606:db00::/32": "393398", - "2a02:26f7:e145::/46": "20940", - "240e:3b1:d000::/36": "134772", - "2001:4830:c0d0::/42": "27552", - "240a:a8f2::/32": "144940", - "2600:80a:861::/31": "701", - "2604:2d80:ec00::/35": "30036", - "2804:5940::/32": "268179", - "2a01:8840:8a::/45": "12041", - "2a0d:ce80::/29": "204189", - "2001:559:5d9::/48": "33491", - "2001:67c:29d4::/48": "58247", - "2406:3540:fff0::/44": "17415", - "2605:a401:80ba::/47": "33363", - "2804:70a0::/32": "270738", - "2a02:e50::/32": "49605", - "2a07:e400::/29": "202282", - "2001:579:9208::/41": "22773", - "2001:a98:8001::/33": "8517", - "2405:6e00:f840::/48": "133612", - "2a00:1858::/32": "25454", - "2001:559:875d::/46": "7922", - "2600:1407:17::/48": "35994", - "2806:265:300::/37": "13999", - "2a03:23e0::/32": "201688", - "2a0c:3a80::/40": "35325", - "2001:1b28::/37": "8728", - "2409:8907:7520::/38": "24547", - "240a:a1c7::/32": "143105", - "2604:f100::/32": "33234", - "2a00:1b30::/32": "25478", - "2a01:7e80:117::/38": "197990", - "2001:559:c322::/48": "7015", - "2a00:18d8:2::/47": "328126", - "2a00:cb60:2::/32": "49312", - "2001:559:599::/48": "33660", - "2001:559:84cf::/48": "22909", - "2408:8957:8b00::/40": "17816", - "2800:160:12ce::/43": "14259", - "2804:4ae0:200::/32": "267269", - "2806:2f0:3401::/46": "17072", - "2405:7600:2::/34": "23956", - "2801:80:2a0::/48": "262534", - "2804:46a0::/36": "52562", - "2a02:26f7:e248::/48": "36183", - "2a0b:7a80::/29": "34856", - "2001:559:515::/48": "7016", - "2405:3200:701::/43": "17639", - "2409:8028:1090::/41": "56041", - "2604:a100:200::/48": "6939", - "2001:559:c1ae::/48": "7725", - "2405:9800:c90a::/47": "45430", - "2804:4b28::/32": "267287", - "2001:559:740::/48": "21508", - "2001:44b8:105c::/48": "7545", - "240a:ab8a::/32": "145604", - "2801:80:1930::/48": "264979", - "2804:5818::/35": "268106", - "2405:aac0:52::/48": "139949", - "240e:473:7920::/41": "140486", - "2001:d00::/32": "17678", - "2001:44c8:4600::/42": "131445", - "2801:1f:2000::/48": "263831", - "2a02:26f7:da11::/42": "20940", - "240a:af41::/32": "146555", - "2610:148::/32": "2637", - "2800:160:1589::/45": "14259", - "2620:0:2a01::/48": "31997", - "2001:67c:21ec::/48": "56662", - "240a:a6ff::/32": "144441", - "2605:a401:8177::/40": "33363", - "2a0c:2e00::/29": "56708", - "2001:579:c08d::/41": "22773", - "240a:afb4::/32": "146670", - "2602:fcc3:ab0::/48": "399135", - "2804:5264::/32": "268515", - "2a00:86c0:2042::/43": "2906", - "2001:559:82d3::/48": "7922", - "2001:1248:883f::/41": "11172", - "2404:3d00:4124::/47": "3573", - "2408:8459:ec30::/41": "17622", - "240e:925:1000::/34": "4134", - "2a0f:bc0::/29": "203536", - "2401:ff80:198d::/46": "133954", - "2001:16a0:6000::/48": "25019", - "2620:171:d4::/44": "715", - "2804:14c:fc00::/40": "28573", - "2a01:8d0::/32": "30722", - "2a02:26f7:ca84::/48": "36183", - "2a02:26f7:f589::/46": "20940", - "2400:9380:8003::/48": "4134", - "240a:a1ae::/32": "143080", - "2604:6840:ff::/48": "20446", - "2a02:578::/34": "9031", - "2403:8000::/44": "4796", - "2408:8956:2300::/40": "17816", - "2607:fcd0:10a::/35": "8100", - "2620:57:2000::/48": "22652", - "2803:5500::/32": "52431", - "2001:4878:8141::/48": "12222", - "2401:d000::/28": "38195", - "240a:aeba::/32": "146420", - "2a02:26f7:b5c5::/46": "20940", - "2a02:f401::/30": "206283", - "2a04:4e40:7210::/41": "54113", - "2001:57a:b800::/33": "22773", - "2804:71f0::/32": "270821", - "2804:7bf8::/39": "271466", - "2a00:1df0::/32": "5464", - "2804:19e0::/32": "61824", - "2804:5590::/32": "267942", - "2a01:af::/32": "200363", - "2001:500:71::/48": "33071", - "2401:d800:2550::/40": "7552", - "2804:2a50::/32": "262819", - "2804:73d8::/32": "270941", - "2a02:2698:402a::/47": "56377", - "2804:5d70::/32": "268972", - "2a02:26f7:f549::/46": "20940", - "2a0c:7880::/29": "60781", - "2001:550:9c04::/47": "174", - "2804:4188::/32": "267439", - "2001:678:c7c::/48": "44416", - "2402:e280:215c::/46": "134674", - "2001:559:8161::/48": "33657", - "2001:579:e3a4::/43": "22773", - "2804:3268:8100::/35": "265076", - "2804:6500::/32": "269462", - "2a07:6680::/29": "202954", - "2a09:1f00::/29": "197205", - "2405:f000::/32": "7530", - "240a:a73f::/32": "144505", - "2a01:73c0::/39": "21450", - "2a0e:7580:4590::/48": "9312", - "2001:559:287::/48": "33662", - "2403:4f00:6000::/36": "63956", - "240a:acaa::/32": "145892", - "2804:8c::/45": "28216", - "2a0d:8d04::/30": "44103", - "2408:84f3:e010::/42": "134543", - "2a02:2010:6002::/48": "20978", - "2a06:e881:6209::/48": "7489", - "2a0e:4380::/29": "208711", - "2001:67c:219c::/48": "49542", - "2001:67c:2608::/48": "197422", - "2001:6a8::/32": "2611", - "2400:8b00:c00::/42": "45727", - "2600:140b:9800::/48": "24319", - "2600:2004:3000::/36": "33517", - "2806:230:401a::/48": "265594", - "2001:559:856a::/48": "7016", - "240e:438:2a20::/43": "140647", - "2606:7d80:1000::/33": "16399", - "2a02:26f7:c3dc::/48": "36183", - "2a05:5080::/48": "62222", - "2a0f:e240::/29": "60781", - "2001:559:82d7::/48": "33668", - "2001:12a0:aaab::/33": "28292", - "2402:9a00::/32": "38199", - "2001:1248:55ff::/38": "11172", - "2620:101:b068::/43": "12079", - "2a0c:7b81::/32": "47596", - "2001:67c:206c::/48": "49788", - "2604:c200::/32": "33544", - "2a01:5a8:9::/32": "8866", - "2a02:4140::/45": "43957", - "2a07:4580:b0e::/29": "46261", - "2001:978:2306::/47": "174", - "2409:8a52:700::/36": "56047", - "240a:a79f::/32": "144601", - "2804:2fd8::/32": "264915", - "2804:75a4:fc::/46": "265130", - "2001:df2:2800::/48": "55353", - "2001:1248:1::/45": "11172", - "2a02:752:2::/48": "43948", - "2a02:2e02:c10::/42": "12479", - "2001:c28::/32": "4685", - "2408:80fa:6300::/35": "17816", - "2804:4150::/32": "267426", - "2806:20d:5030::/45": "32098", - "2806:210::/32": "28466", - "2001:559:8410::/48": "7015", - "2001:559:848a::/48": "33491", - "2001:559:c191::/48": "13367", - "2c0f:eef0:27::/48": "15695", - "2a0a:340:ff00::/40": "48043", - "2406:6040::/32": "138257", - "240a:aa1e::/32": "145240", - "240e:473:9a50::/39": "4134", - "2606:8800::/32": "19940", - "2804:74a8::/39": "270995", - "2a02:26f7:bfc4::/48": "36183", - "2a07:8900::/29": "15516", - "2001:480::/44": "668", - "2001:678:301::/48": "29551", - "2610:100::/34": "8047", - "2001:67c:1360::/48": "41231", - "2408:8957:8e00::/40": "17622", - "2604:d600:1b0a::/37": "32098", - "2806:267:2300::/37": "13999", - "2a10:c640::/48": "211541", - "2001:16b0::/32": "12741", - "2001:4878:8219::/48": "12222", - "2804:426c::/32": "267499", - "2804:5594:4000::/32": "267943", - "2a07:3502:1160::/48": "20559", - "2001:678:7b0::/48": "199568", - "2001:67c:24e0::/48": "198141", - "2407:d700::/32": "132884", - "240a:aeab::/32": "146405", - "2600:380:f104::/46": "20057", - "2605:f700:10::/48": "18978", - "2620:4e:2000::/48": "14694", - "2a0c:b641:d0::/44": "212196", - "2401:d800:28c0::/42": "7552", - "2a01:280:388::/48": "42303", - "2a02:2a48::/32": "43853", - "2a0e:1101::/47": "51255", - "2001:1388:70c2::/45": "6147", - "2001:4038::/32": "31383", - "2600:1488:60c1::/46": "20940", - "2606:a000::/37": "11426", - "2607:f4a0::/37": "11272", - "2804:6d50::/32": "270524", - "2806:263:3300::/37": "13999", - "2a02:26f7:fa89::/42": "20940", - "2a0e:97c0:1400::/40": "20473", - "2405:8100:8005::/48": "13335", - "2a00:1e6a::/41": "49373", - "2a02:2e0::/38": "12306", - "2001:4490:3400::/42": "9829", - "2404:bf40:8180::/46": "7545", - "2408:8957:c940::/40": "17816", - "2600:1409:3::/48": "20940", - "2804:6814::/32": "269668", - "2a0d:d200::/29": "54543", - "240a:a227::/32": "143201", - "2600:140f:7801::/32": "20940", - "2803:6900:200::/48": "52423", - "2806:230:3008::/48": "265594", - "2a02:fe00::/29": "199332", - "2a0d:2581:2333::/48": "209261", - "2001:559:5fb::/48": "33287", - "240a:a3a4::/32": "143582", - "240a:ada0::/32": "146138", - "2606:1a40:101c::/42": "398962", - "2a0c:9a40:8086::/48": "3280", - "2a0e:b107:200::/44": "207036", - "2600:1406:4800::/48": "35994", - "2604:cac0:133::/45": "11019", - "2605:5940::/32": "14235", - "2804:3da4:1100::/32": "266544", - "2804:4454::/32": "267625", - "2806:230:6011::/48": "11888", - "2a03:1fe0::/32": "39509", - "2001:559:8002::/44": "7922", - "2001:c20:c816::/48": "3758", - "2404:2800::/32": "9942", - "240e:bf:c800::/37": "4835", - "240e:90d:b000::/33": "4134", - "2a02:22d0:d::/32": "61323", - "2a02:26f7:da45::/46": "20940", - "2605:1080:0:ffd0::/60": "23367", - "2a00:ca80::/32": "29134", - "2a06:500::/29": "38990", - "2408:8957:9800::/40": "17622", - "2409:8c28:89f1::/35": "56041", - "2a02:26f7:ba89::/42": "20940", - "2a04:83c0::/29": "41561", - "2406:e002:c000::/29": "23655", - "2409:8904:9690::/34": "24547", - "2409:8a35::/28": "9808", - "2001:559:5d1::/48": "33659", - "2401:4900:4f80::/44": "45609", - "240a:a608::/32": "144194", - "2804:43c0:c000::/34": "267588", - "2a03:9d40:2d00::/38": "41095", - "2a03:e2c0::/32": "205125", - "2408:8956:f2c0::/37": "17816", - "240a:acf1::/32": "145963", - "2804:e54::/32": "262807", - "2a01:8180:3000::/36": "29063", - "2a03:a600::/29": "44600", - "2001:559:52e::/48": "33662", - "2401:d800:5790::/42": "7552", - "240e:3b6:d000::/36": "134772", - "2620:137:6000::/44": "393507", - "2800:484:1300::/37": "10620", - "2a02:26f7:c5c8::/48": "36183", - "2001:df0:214::/48": "132696", - "2a02:cbf7:2::/39": "61157", - "2001:67c:20f4::/48": "39732", - "2001:df6:8100::/47": "137670", - "2408:8956:9f00::/40": "17816", - "2600:1419:4c01::/35": "20940", - "2606:4700:302d::/43": "13335", - "2804:7198::/32": "270799", - "2a01:8840:10::/48": "12041", - "2a04:1500::/29": "61026", - "2806:230:3017::/48": "11888", - "2001:253::/39": "38272", - "2001:579:6240::/40": "22773", - "2403:1940:1000::/34": "137935", - "240a:a420::/32": "143706", - "240a:aac5::/32": "145407", - "2602:ffc5:108::/48": "20473", - "2603:60bd::/32": "11426", - "2a02:26f7:92::/48": "36183", - "2a0a:6680:bee5::/48": "203500", - "2a0c:9a40:8130::/46": "209833", - "2804:e94:8000::/44": "262468", - "2a0c:4481:8::/47": "204720", - "2403:1300:9000::/33": "56286", - "2408:8956:c940::/40": "17816", - "2620:103::/47": "19994", - "2620:17a:8::/48": "7345", - "2a02:f406:fe50::/48": "206283", - "2a03:5a00:35::/48": "201717", - "2a10:5fc0::/29": "213373", - "2a02:26f7:f848::/48": "36183", - "2001:4478:2::/35": "4802", - "2406:2000::/40": "10310", - "2409:8087:c00::/38": "56042", - "2409:8c20:b282::/33": "56046", - "240a:af09::/32": "146499", - "240e:473:c50::/39": "4134", - "2a02:970:1354::/42": "44002", - "2a0c:9a40:1017::/48": "202479", - "2a10:e100::/29": "174", - "2a0a:dc00::/30": "51262", - "2001:df1:d400::/47": "133904", - "2001:1248:a4c5::/46": "11172", - "2404:3d00:40e8::/47": "21433", - "2620:60:8000::/44": "22953", - "2804:eec:2001::/33": "28226", - "2804:138b:c100::/41": "53037", - "2a02:26f7:b99d::/46": "20940", - "2001:df0:6a80::/48": "134986", - "2400:1880::/32": "17670", - "2402:2f80:4::/48": "63956", - "2408:8756:a00::/40": "136958", - "240e:3b0:5600::/34": "136199", - "2a0a:db00::/44": "51559", - "2a06:c780::/29": "198024", - "2a10:6840::/29": "60781", - "2001:559:3a3::/48": "7015", - "240e:438:8420::/43": "140647", - "2806:262:3300::/37": "13999", - "240a:a694::/32": "144334", - "240e:3bd:2200::/37": "136198", - "2604:d600:155d::/42": "32098", - "2a05:b300::/30": "46723", - "2a0b:efc0::/37": "60893", - "2001:559:5ec::/48": "33657", - "2406:840:eb80::/43": "140731", - "2a01:828::/29": "3209", - "2001:67c:2f04::/48": "16074", - "2409:8030:2100::/36": "9808", - "2806:2f0:30a4::/41": "17072", - "2a00:1418:8000::/36": "41391", - "2a02:26f7:d251::/46": "20940", - "2001:559:86e3::/45": "7922", - "2001:44b8:40::/46": "7545", - "2406:d501:10::/32": "136557", - "2408:8456:9840::/38": "17816", - "2600:141c:5001::/32": "20940", - "2607:9000::/34": "11878", - "2804:cc4::/43": "52551", - "2001:559:80d7::/48": "7015", - "2001:559:c0e9::/48": "7922", - "2605:70c0::/32": "265601", - "2804:18:6010::/44": "10429", - "2804:9d4:5108::/34": "262996", - "2408:8662::/29": "4837", - "240e:473:2b50::/40": "4134", - "2620:128:1004::/48": "53620", - "2804:314:10::/34": "61568", - "2804:1f3c::/36": "52910", - "2a04:4e40:5210::/41": "54113", - "2404:4c40::/32": "134937", - "2a02:2ad8::/39": "702", - "2a02:2e02:1460::/40": "12479", - "2a03:44a0:300::/48": "200521", - "2001:1238::/32": "22566", - "2402:800:9c8d::/42": "7552", - "240e:967:ea00::/39": "133776", - "2600:1f01:4860::/47": "16509", - "2600:370f:2025::/43": "32261", - "2620:74:a3::/45": "11840", - "2804:52f4:a30::/41": "268552", - "2401:7500:100::/40": "33480", - "2404:1a0::/35": "24334", - "2408:864c::/32": "4837", - "2606:7400::/32": "19310", - "2a07:3500:10a0::/48": "58083", - "2402:8100:12::/48": "45271", - "240a:aa37::/32": "145265", - "2607:f6f0:1400::/40": "398811", - "2a02:c78::/29": "5607", - "2a02:2aa0:120::/32": "702", - "2001:559:816a::/47": "33657", - "2a05:3880::/29": "201518", - "2a05:91c3:1::/48": "39511", - "2402:c800:f0::/32": "38639", - "240a:aac3::/32": "145405", - "240e:44d:4f80::/41": "4134", - "2602:feda::/48": "46997", - "2804:1380:173::/32": "263536", - "2806:2f0:99e1::/37": "17072", - "2a02:26f7:e745::/46": "20940", - "2a0e:15c0:34b::/29": "60781", - "2001:67c:13c4::/48": "196978", - "2001:6d0:ffb8::/48": "3316", - "2001:4b10::/32": "3213", - "2408:8220::/31": "4837", - "240e:438:6a20::/43": "140647", - "2607:fb10:5020::/47": "55095", - "2a0c:1940:20::/44": "60354", - "2620:4d:402a::/48": "395403", - "2806:2f0:1121::/46": "22884", - "2a03:5640:f140::/40": "2906", - "2a03:a4e0::/40": "50304", - "2a0d:2580:1000::/36": "213262", - "2001:4f8:a::/48": "1280", - "2804:738c:c010::/34": "270922", - "2a03:300::/32": "207934", - "2a0c:9e80::/32": "199520", - "2604:ca00:1d8::/42": "36492", - "2806:1010:d000::/34": "8151", - "2a00:6901:2::/47": "20926", - "2a00:c440::/29": "57963", - "240a:a0c9::/32": "142851", - "240e:3be:ac00::/35": "4134", - "2607:2700::/32": "11239", - "2806:2f0:2123::/48": "17072", - "2a03:2880:f167::/44": "32934", - "2001:559:801a::/48": "33667", - "240a:a68e::/32": "144328", - "2607:fcd0:fa80:1c01::/50": "8100", - "2803:a740:6::/34": "27810", - "2804:5ed4::/32": "269059", - "2a00:47c0:811::/48": "27435", - "2a00:5180::/48": "51957", - "240a:acdb::/32": "145941", - "240e:105::/32": "4134", - "2604:2e8b:7c00::/32": "30036", - "2803:a600::/32": "52388", - "2806:230:3001::/48": "11888", - "2a09:1500:20::/48": "208175", - "2001:4888:8024::/46": "22394", - "2402:c940::/32": "59217", - "2408:80fa:7580::/42": "17623", - "240a:a702::/32": "144444", - "2600:1406:e401::/36": "20940", - "2620:bf::/48": "3423", - "2804:14d:b291::/41": "28573", - "2001:500:88::/48": "16876", - "2001:559:a4::/48": "33651", - "2001:df7:c900::/48": "138616", - "2001:1248:7004::/46": "11172", - "2400:df80::/32": "133444", - "2600:370f:3080::/47": "32261", - "2803:4640::/32": "61506", - "2a0c:e140::/29": "42136", - "2405:dc0:8000::/48": "22604", - "2600:1001:d020::/41": "6167", - "2a0c:7dc0::/29": "18779", - "2a0e:b107:100::/44": "211972", - "2401:d800:2770::/40": "7552", - "240a:a842::/32": "144764", - "2600:1000:9100::/44": "6167", - "2600:140b:8c01::/35": "20940", - "2801:1fc:20::/48": "27951", - "2804:4cd8::/32": "267396", - "2001:559:8546::/48": "7922", - "240e:473:2720::/41": "140486", - "2803:11e0::/32": "269997", - "2a00:5d00::/32": "39153", - "2a0e:b107:31f::/48": "57164", - "2804:3fc0::/32": "265912", - "2001:550:2200:208::/46": "174", - "2001:df3:f900::/48": "137422", - "240e:438:9240::/37": "4134", - "2600:9000:2035::/46": "16509", - "2603:9031::/40": "33363", - "2607:fc48:c50::/48": "40009", - "2804:150:f000::/31": "10954", - "2a03:7580:4100::/32": "28785", - "2402:800:f350::/42": "7552", - "2406:840:eb00::/45": "142553", - "240a:ae4f::/32": "146313", - "2602:fe54:23::/33": "16584", - "2804:642c::/32": "269411", - "2001:559:460::/48": "33287", - "2001:559:84b7::/44": "7922", - "2600:1409:3001::/36": "20940", - "2a02:5300::/32": "34119", - "2a07:a880:4601::/45": "3399", - "2c0f:f530::/44": "61138", - "2409:8c75::/28": "9808", - "2602:fdb3::/36": "397945", - "2604:5000::/43": "7752", - "2a02:26f7:b::/48": "20940", - "2c0f:eea8:8000::/36": "39356", - "2405:30c0::/32": "45687", - "2607:9280:a::/47": "395502", - "2804:262c::/32": "264326", - "2806:103e:13::/42": "8151", - "2a0e:b107:911::/48": "211819", - "2001:678:408::/48": "47451", - "2401:d9c0::/36": "64271", - "2403:86c0::/32": "131633", - "240a:a61c::/32": "144214", - "2804:1a8c::/32": "61865", - "2a0e:63c0::/29": "208516", - "240a:a152::/32": "142988", - "2a02:26f7:e588::/48": "36183", - "2001:559:83e8::/48": "7922", - "2001:559:858f::/48": "33651", - "2406:fe00::/32": "23616", - "2408:8456:bc10::/42": "134543", - "2800:160:1928::/45": "14259", - "2c0f:f6d8:4016::/47": "21433", - "240e:12:800::/37": "134765", - "2600:bc02::/24": "54600", - "2800:484:3900::/38": "10620", - "2804:571c::/32": "268044", - "2a01:b740:a22::/48": "6185", - "2a07:9944:20::/48": "58305", - "2a0c:b641:231::/48": "209645", - "2001:678:e88::/48": "212548", - "2001:df7:a900::/48": "135987", - "2804:e50::/32": "53067", - "2804:1430::/32": "263316", - "2804:1c28::/32": "262746", - "2804:5b0c::/32": "268815", - "2001:4d0:2418::/48": "7847", - "2001:49f0:d0e7::/43": "174", - "2402:800:368d::/43": "7552", - "2600:140b:7801::/38": "20940", - "2a02:128:8::/48": "50916", - "2a02:26f7:cd04::/48": "36183", - "2001:418:c07::/35": "2914", - "2001:678:b64::/48": "30781", - "2001:df6:f900::/48": "138352", - "2602:fca6::/36": "399466", - "2606:2800:40c::/46": "15133", - "2804:204:710::/36": "28186", - "2a01:9140:cccc::/48": "52122", - "2403:5000:189::/32": "9304", - "240a:abd0::/32": "145674", - "2600:6c38:124::/47": "20115", - "2a02:26f7:d401::/46": "20940", - "2a09:6280:1::/48": "56603", - "2a0c:9a40:1050::/47": "34927", - "2a04:4e40:cc30::/41": "54113", - "2400:8b00:a00::/42": "45727", - "2600:1404:d001::/37": "20940", - "2804:1614::/34": "263266", - "2804:163c:303::/32": "263277", - "2a00:19f8::/32": "49010", - "2a01:ce95:8002::/33": "51964", - "2a02:6c00:f000::/44": "44971", - "2a04:bdc7:100::/48": "63473", - "2605:a401:842b::/39": "33363", - "2a01:8de0::/32": "47169", - "2a0b:b500:2::/32": "60764", - "2001:559:796::/48": "7015", - "2408:84f3:ba40::/37": "17816", - "240a:ac66::/32": "145824", - "2806:1060::/32": "8151", - "2a10:e5c0::/48": "58349", - "240a:ae1a::/32": "146260", - "2804:5dfc::/32": "52972", - "2400:8700:105::/32": "55394", - "2607:2400::/32": "40335", - "2806:230:204c::/48": "265594", - "2a0f:9d80::/32": "207449", - "2001:559:7b7::/48": "7922", - "2001:67c:2e9c::/48": "8742", - "240a:abad::/32": "145639", - "2620:171:71::/46": "42", - "2804:6a04:44::/32": "270306", - "2804:8238::/32": "272506", - "2806:2f0:1000::/46": "22884", - "2001:559:80f7::/48": "33651", - "2001:579:8f8::/38": "22773", - "2804:2054::/32": "264486", - "2a02:2e02:1300::/41": "12479", - "2a0c:f8c0::/30": "210214", - "2001:1248:a46e::/43": "11172", - "2600:1419:e801::/37": "20940", - "2804:676c::/32": "269627", - "2a01:8840:55::/48": "207266", - "2a03:34e0::/32": "12695", - "2a0f:85c1:cafe::/48": "207781", - "2001:559:8645::/46": "33651", - "2408:8256:397f::/48": "17816", - "2408:8956:4e00::/40": "17622", - "240a:ad07::/32": "145985", - "2001:628:2000::/48": "1120", - "2001:b58::/29": "20626", - "2001:559:361::/48": "7922", - "2409:8055:306d::/30": "56040", - "240a:ad92::/32": "146124", - "2607:fad0:4000::/36": "53824", - "2800:bf0:2001::/39": "27947", - "2a0e:1107::/48": "208975", - "2001:559:8636::/48": "7922", - "2409:8c20:5a63::/34": "56046", - "240a:a1f9::/32": "143155", - "2600:1004:b210::/33": "22394", - "2803:6604:a600::/33": "28075", - "2a00:6680::/46": "3320", - "2001:579:2702::/33": "22773", - "2001:4900::/32": "13657", - "2607:f7d8::/32": "26554", - "2620:38:2000::/48": "53535", - "2804:6140::/32": "61597", - "2a05:2600::/29": "57948", - "2a0c:b641:61e::/48": "208505", - "2001:559:817c::/48": "33667", - "2001:49f0:a01f::/41": "174", - "240a:a535::/32": "143983", - "2600:1003:f100::/44": "6167", - "2a0a:ec02:501::/48": "42692", - "2a0f:3300::/29": "208543", - "2001:67c:285c::/48": "213199", - "240a:a082::/32": "142780", - "2606:fa00::/32": "239", - "2804:3770::/32": "266414", - "2a00:5300::/32": "45031", - "2a04:e540::/32": "197938", - "2001:520:1055::/46": "8103", - "2403:780:fe00::/40": "7175", - "2a04:4e40:da10::/41": "54113", - "2a09:2980::/29": "42375", - "2408:8456:6600::/42": "17622", - "2408:8957:a000::/40": "17622", - "2605:2540::/32": "397324", - "2806:230:6025::/48": "11888", - "2604:b680::/32": "18683", - "2804:64c0::/32": "269446", - "2a01:5c40:7::/32": "12687", - "2a02:26f7:dfc4::/48": "36183", - "2001:ded:8000::/48": "23726", - "2407:500:167::/48": "58940", - "240a:17:f90::/44": "9605", - "240e:14:1000::/36": "140330", - "2604:c7c0::/32": "35935", - "2806:250:200::/46": "28555", - "2607:ffc8:4001::/32": "17356", - "2a02:198::/32": "16171", - "2a0a:7a04:3::/31": "61317", - "2a0e:fd40:201::/32": "44103", - "2001:df6:d600::/48": "136009", - "2600:3504:c000::/28": "396998", - "2604:4c00::/32": "40383", - "2606:41c0:1::/46": "11448", - "2801:80:2c00::/40": "268460", - "2803:cfa0::/32": "27847", - "2a0c:82c0::/29": "203015", - "2001:559:852c::/48": "7015", - "2406:2b40::/32": "131937", - "2409:8948:9300::/40": "24445", - "2602:ff62:106::/42": "61317", - "2a0e:c80:1::/46": "3170", - "2001:19f0:8800::/38": "20473", - "2405:9800:b0::/41": "45430", - "2806:270::/32": "19373", - "2a0b:2180:1::/48": "204995", - "2620:171:55::/48": "715", - "2a02:2058::/32": "44512", - "2a10:4646:3::/48": "42101", - "2c0f:f9e0::/32": "37148", - "2001:559:c304::/48": "33287", - "2800:160:1cff::/39": "14259", - "2001:7a8:800::/47": "34019", - "2001:4878:4010::/48": "12222", - "2400:c540:c841::/37": "59238", - "2406:b400:f0::/47": "18209", - "2408:8456:8440::/39": "17816", - "240a:a287::/32": "143297", - "2804:5b18::/32": "268818", - "2804:6078::/32": "269169", - "2400:2000::/45": "17676", - "2401:55c0::/32": "131954", - "2a00:4680::/32": "56672", - "2a0e:c886::/44": "208759", - "2409:8e18::/31": "134810", - "2600:140f:3401::/39": "20940", - "2a05:9580::/29": "42120", - "2001:418:1401:6b::/59": "2914", - "2001:470:157::/48": "6939", - "2001:1680::/29": "9044", - "240a:a0f7::/32": "142897", - "240e:3bb:7800::/39": "4134", - "2a00:1210:ffff::/48": "6712", - "2001:57b:2000::/32": "22773", - "240a:a0df::/32": "142873", - "2a02:958::/32": "29008", - "2402:e380:303::/48": "134496", - "2403:4280:1::/48": "138950", - "2a00:ae80::/32": "49750", - "2a03:6000::/32": "3265", - "240a:a361::/32": "143515", - "2804:2f3c::/32": "264879", - "2a01:280:380::/48": "212079", - "2a04:4e42:4058::/35": "54113", - "2620:ab:4000::/48": "393681", - "2001:559:8725::/48": "33287", - "2401:9d00:102::/35": "9835", - "2402:ef1e:200::/48": "7633", - "2405:8700:3000::/48": "24168", - "2408:8456:be10::/42": "134543", - "2602:fed2:7105::/48": "207393", - "2605:3ac0::/36": "20029", - "2804:14d:a600::/40": "28573", - "2a01:7e80::/39": "197990", - "2a02:23c8::/40": "24592", - "2a02:26f7:e300::/48": "36183", - "2a0e:97c1:e00::/40": "20473", - "2400:ea00:ffff::/48": "23884", - "2402:800:5c39::/41": "7552", - "2804:4b4c::/32": "267296", - "2a0f:b880::/29": "208060", - "2001:559:8767::/48": "7725", - "2600:1419:1601::/36": "20940", - "2806:370:12a0::/41": "28403", - "2a02:e20::/29": "5603", - "2a02:5be0:2::/47": "39588", - "2400:cb00:331::/48": "13335", - "2600:370f:3420::/45": "32261", - "2801:14:8800::/48": "267896", - "2804:10f4::/32": "52683", - "2804:5538::/32": "268697", - "2a02:26f0:bc01::/40": "20940", - "2400:5400:10::/48": "18245", - "2602:fd37:fff::/48": "398493", - "2803:480::/45": "52458", - "2a0f:8280::/29": "44659", - "2001:2044::/27": "1299", - "2402:3c80::/32": "64098", - "240e:3b0:1800::/34": "4134", - "2606:4700:8d90::/44": "13335", - "2804:74d0::/32": "271005", - "2a02:26f7:f604::/48": "36183", - "2001:470:5a::/48": "13746", - "2401:d800:be60::/40": "7552", - "2408:8459:b050::/38": "17816", - "2607:fc48:1410::/48": "40009", - "2620:13d:f000::/46": "22711", - "2804:4c6c::/32": "52542", - "2a01:55c0::/29": "21197", - "2a0e:aa07:e026::/48": "210872", - "2001:df7:8a00::/48": "132937", - "2400:1a00::/45": "17501", - "2600:1405:9::/36": "20940", - "2602:fd7d:101::/40": "16925", - "2404:d940::/35": "134877", - "240a:ab96::/32": "145616", - "2602:fe19:2b::/34": "26073", - "2800:160:1658::/45": "14259", - "2800:300:6940::/40": "27651", - "2a07:3b80:2::/48": "62240", - "2c0f:4500::/32": "328808", - "2001:44b8:5::/48": "7545", - "2804:4c0:fffa::/45": "3549", - "2a02:26f7:d441::/46": "20940", - "2a06:cd40:200::/48": "43927", - "2001:388:607d::/40": "7575", - "2001:5b0:6500::/38": "6621", - "2620:101:3000::/42": "19945", - "2801:80:3460::/44": "268766", - "2a05:d4c0::/29": "201011", - "2405:7f00:95a0::/38": "133414", - "2620:12f:c005::/46": "395831", - "2a0a:2303::/32": "202572", - "2001:678:d54::/48": "213187", - "2401:cf80:6045::/40": "55303", - "2804:4924:10::/32": "267167", - "2804:5e08:180::/38": "269007", - "2804:6670::/32": "269558", - "2001:d88::/32": "4694", - "2409:8904:a840::/39": "24547", - "2804:30bc::/32": "52609", - "2806:2f0:2160::/40": "17072", - "2a00:6bc0::/32": "5588", - "2a00:a580::/32": "15557", - "2a0a:7cc0:2::/29": "60880", - "2001:470:bb::/48": "36324", - "2402:3a80:c062::/48": "38266", - "2a03:dec0::/32": "48524", - "2800:160:2197::/42": "14259", - "240a:ada9::/32": "146147", - "2605:840::/32": "26209", - "2607:1680::/32": "15083", - "2a02:26f7:ee08::/48": "36183", - "2001:4490:4c9c::/46": "9829", - "2401:cb80::/32": "63581", - "240a:aec6::/32": "146432", - "2620:105:c000::/48": "7767", - "2804:4dc::/32": "262474", - "2a02:26f7:b988::/48": "36183", - "2a0b:d6c0::/29": "205856", - "2001:559:c2af::/43": "33657", - "2001:67c:112c::/48": "212760", - "2408:84f3:b840::/38": "17816", - "2409:8914:c400::/39": "56044", - "2605:9080::/32": "54858", - "2a02:2398:100::/38": "9166", - "240a:a3f6::/32": "143664", - "2803:a80:1::/48": "22698", - "2a00:1fa1::/33": "29497", - "2a02:26f7:15::/48": "20940", - "2a03:b0a0:1::/46": "39923", - "2600:1012:b0f0::/44": "22394", - "2606:9280::/32": "30035", - "2620:8e:e000::/48": "398838", - "2001:1248:882b::/43": "11172", - "2401:d800:f6d0::/42": "7552", - "2408:8456:3200::/41": "17623", - "2a02:26f7:cdc9::/42": "20940", - "2408:8256:3292::/44": "17623", - "2a01:8840:91::/48": "207266", - "2a02:26f7:b9c6::/47": "20940", - "2a03:1ac0:2e92::/48": "12768", - "2800:484:c800::/40": "10620", - "2a06:ac80:11::/48": "205427", - "2605:a401:8bfa::/37": "33363", - "2800:bf0:a0::/44": "52257", - "2a02:26f7:ba00::/48": "36183", - "2a03:2880:f03b::/45": "32934", - "2a01:b740:a06::/48": "6185", - "2402:33c0::/32": "24413", - "240a:a4ed::/32": "143911", - "2800:940:941::/46": "27953", - "2804:3d8::/32": "262402", - "2a09:7a00::/29": "39182", - "2602:fd09:500::/38": "212643", - "2804:2524::/32": "264262", - "2a00:fa60::/35": "53550", - "240a:a154::/32": "142990", - "240e:698::/35": "58519", - "2a02:26f7:dc48::/48": "36183", - "2001:559:814c::/48": "7922", - "2001:67c:2740::/48": "198543", - "2401:7b40:4005::/48": "38071", - "2a02:6680:f::/48": "16116", - "2a0e:b107:760::/44": "205977", - "2404:e040::/32": "63773", - "240a:aadd::/32": "145431", - "2a01:4200::/38": "21453", - "2401:d800:7370::/37": "7552", - "2406:7e40::/32": "141190", - "2a06:3080::/32": "25595", - "2a0b:a8c0::/29": "13215", - "2001:559:81c1::/48": "33659", - "240a:a840::/32": "144762", - "2600:100d:f000::/44": "6167", - "2602:fcd9::/36": "36326", - "2800:800:620::/44": "26611", - "2a00:13d8::/29": "3212", - "2a02:ed02::/32": "50304", - "2401:8ac0:1c0::/48": "4671", - "2801:19:b000::/48": "266666", - "2a02:2578:1301::/45": "51375", - "2001:559:36f::/48": "33657", - "2a02:1010:4000::/38": "9197", - "2001:559:86fb::/45": "7015", - "2402:800:baa0::/41": "7552", - "240a:af75::/32": "146607", - "2a02:9000::/28": "3352", - "2001:438:fffd:14::/60": "6461", - "2001:559:8162::/48": "33491", - "2001:c20:48ac::/47": "3758", - "2800:160:1fda::/42": "14259", - "2804:4b9c::/32": "267318", - "2a0f:78c0::/29": "205322", - "2001:67c:2eec::/48": "60531", - "2402:5300:2210::/39": "45903", - "240a:a40c::/32": "143686", - "2602:fd9c::/36": "398045", - "2605:6a40::/32": "398081", - "2607:f740:e608::/47": "63911", - "2a02:26f7:e249::/42": "20940", - "2001:480:60::/48": "5957", - "2406:9e00::/45": "55352", - "2804:129c::/32": "263487", - "2405:7f00:aec0::/35": "133414", - "2804:3aa0::/32": "266100", - "2804:4970::/32": "267184", - "2a06:63c0::/29": "41937", - "2a07:e940::/29": "213150", - "2a0b:3540:8::/47": "397964", - "2001:559:191::/48": "33659", - "2001:559:8689::/48": "33655", - "2607:f3c8::/34": "33724", - "2c0f:ff30::/32": "37334", - "2408:8a04:8000::/36": "9929", - "240e:3ba:3e00::/33": "140308", - "2620:13b:b000::/45": "138005", - "2001:559:8749::/48": "7016", - "2401:4900:1bc0::/44": "45609", - "240e:3b5:c800::/37": "4134", - "2620:13f:7004::/46": "55706", - "2001:559:129::/48": "7922", - "2620:122:7000::/48": "16507", - "2803:c800:4060::/32": "23243", - "2804:5cd0::/32": "268932", - "2a02:26f7:c708::/48": "36183", - "2a02:2a58:230::/32": "702", - "2401:ff80:1b13::/40": "133954", - "2a04:1540::/29": "199348", - "2a04:4300::/48": "12703", - "2405:b580::/32": "135234", - "2a02:26f7:51::/48": "20940", - "2a03:7380:5400::/40": "13188", - "2001:428:1004::/34": "209", - "2001:4490:d0c0::/46": "9829", - "2402:800:71b0::/41": "7552", - "2a02:2339:4000::/34": "48854", - "2a07:9a40:dcb::/29": "30081", - "2001:480:1670::/48": "213", - "2401:c5c0:201::/36": "55492", - "2804:37fc::/32": "266448", - "2a03:b020::/29": "41327", - "2a0b:ad40::/29": "205493", - "2001:579:d2a4::/34": "22773", - "2409:8004:310e::/43": "24547", - "2a03:11c0::/32": "199657", - "2001:4998:c::/46": "36647", - "2602:ffc5:cb0::/44": "395839", - "2800:10:11::/48": "27750", - "2a02:26f7:db04::/48": "36183", - "2001:559:c0a4::/48": "33491", - "2001:579:1130::/41": "22773", - "2404:1640::/32": "138494", - "2408:8256:3270::/48": "17816", - "240a:a014::/32": "142670", - "2606:2800:4a84::/46": "15133", - "2606:8e80:1000::/48": "394497", - "2a0f:bf00:80::/42": "207801", - "2001:cf8:acf::/32": "9619", - "2405:1c0:6841::/46": "135062", - "240a:a1f8::/32": "143154", - "240a:ab64::/32": "145566", - "240e:3b5:6400::/35": "140312", - "240e:438:1620::/43": "140647", - "2804:2264::/34": "264096", - "2401:3bc0:701::/36": "137409", - "2800:e00:7000::/31": "27665", - "2001:559:867e::/48": "7922", - "2408:80ea:6900::/35": "17816", - "2408:8459:2e20::/44": "17816", - "2408:8957:d4c0::/39": "17816", - "2804:302:4000::/35": "53237", - "2001:67c:50c::/48": "15486", - "2001:df7:3480::/48": "42960", - "2400:8800:4181::/32": "3491", - "2402:df80::/32": "58473", - "2403:5800:d000::/28": "4764", - "2a02:ee80:4042::/45": "3573", - "2a0e:25c0::/29": "35236", - "2001:fd8:33c0::/42": "132199", - "2a01:5c40:6::/48": "212397", - "2a02:c0c0::/29": "25520", - "2a00:e48::/33": "35703", - "2001:559:75c::/48": "33659", - "2001:579:6220::/43": "22773", - "2402:d000:8119::/45": "9329", - "2403:8080::/32": "17964", - "2403:ac80::/40": "4785", - "2403:fc00::/42": "9482", - "2600:1400:e000::/48": "6128", - "2a0d:6e00::/29": "201290", - "2001:67c:1bec:f000::/52": "2148", - "2607:f388::/32": "59", - "2a01:a700::/33": "39138", - "2602:fc60::/40": "33385", - "2607:6100:e1::/48": "54380", - "2800:9f0::/32": "27845", - "2804:1c84::/46": "61659", - "2a02:25b0:aaab::/33": "51731", - "2620:1f7:81c::/48": "1747", - "2a02:7b8::/32": "45011", - "2a07:e440::/29": "59441", - "2602:ff39:99::/36": "63318", - "2400:8b00:1000::/44": "45727", - "2402:9e00::/37": "24183", - "2602:fc9d::/36": "20220", - "2804:e94:1d2::/42": "262468", - "2804:6e34::/32": "270582", - "2a01:8840:6a::/45": "12041", - "2a01:c50f:c100::/40": "12479", - "2600:1002:d000::/43": "6167", - "2803:8ae0::/32": "269933", - "2804:40fc::/32": "265996", - "2001:470:143::/44": "6939", - "2001:559:c09f::/48": "33287", - "2406:e000:321::/43": "23655", - "2a01:9700:14b8::/45": "8376", - "2a02:ee80:4123::/44": "3573", - "2a05:d9c0::/29": "200970", - "2001:b200:700::/34": "9505", - "2620:107:901d::/42": "22787", - "2804:1b6c::/32": "61727", - "2a09:7c46::/32": "200019", - "2001:4c28:3000::/48": "39832", - "2401:4900:1af0::/44": "45609", - "2405:acc0::/32": "139922", - "2a03:6947:100::/40": "50973", - "240e:438:c20::/43": "140647", - "240e:473:200::/41": "140485", - "2804:18b8::/32": "61949", - "2a01:a500::/47": "42831", - "2a02:26f7:f541::/46": "20940", - "2a0b:1f80::/29": "62412", - "2c0f:5d00::/48": "328677", - "2400:cb00:132::/48": "13335", - "2a0a:59c7:1000::/36": "204724", - "2001:4888:8061::/48": "22394", - "2409:10::/28": "55391", - "240a:a598::/32": "144082", - "2607:ffd0:200::/37": "13767", - "2804:2450:c00::/32": "264214", - "2001:418:1401:7::/64": "20940", - "2001:16c0:fefe::/48": "49981", - "240e:109:804b::/48": "133774", - "2801:102::/48": "19429", - "2a00:50e0:ffff::/48": "61204", - "2a02:cb80:2140::/48": "43766", - "2a09:bac0:131::/48": "395747", - "2a06:9c40::/29": "8769", - "2001:559:c349::/48": "33657", - "2001:678:8ec::/48": "41549", - "2001:1248:599e::/41": "11172", - "2001:1248:8019::/40": "11172", - "2401:c740::/32": "23734", - "2604:6600:fc7b::/39": "40676", - "2804:1ac:5900::/32": "53175", - "2a0f:2ec0::/29": "60262", - "2001:678:9::/48": "199670", - "2401:d800:9c40::/42": "7552", - "2402:5100:6::/32": "9902", - "2406:3000:35:100::/48": "16625", - "2406:3400:68::/43": "10143", - "2605:a401:82b4::/41": "33363", - "2804:49fc::/32": "267212", - "2a03:3680::/32": "33824", - "2a04:e3c0::/29": "57736", - "2a07:241::/29": "3170", - "2a0a:4e83:120::/48": "206074", - "2a06:5b87::/32": "207083", - "2001:559:c18b::/48": "21508", - "2600:1007:b1a0::/44": "6167", - "2a02:26f7:b681::/46": "20940", - "2001:1a70::/32": "12046", - "2604:d600:157a::/45": "32098", - "2a05:b340::/29": "49223", - "2402:800:3201::/44": "7552", - "2404:2940::/34": "132257", - "2804:27c::/32": "25933", - "2a01:40a0::/32": "62297", - "2804:694:5000::/32": "262596", - "2001:388:70cc::/32": "7575", - "2408:883a::/37": "4837", - "240e:967:2800::/37": "133776", - "2600:6c38:e26::/44": "20115", - "2a01:5b0:4::/48": "8561", - "2a02:74a0:a008::/47": "204038", - "2607:fa10::/32": "7106", - "2001:df2:e800::/48": "131302", - "2600:380:cc00::/41": "20057", - "2804:1dc::/32": "53202", - "2a00:47c0:411::/48": "44568", - "2a02:26f7:dd49::/42": "20940", - "2001:1248:a024::/44": "11172", - "240a:a02d::/32": "142695", - "2602:fe76::/36": "399032", - "2803:f7e0:4000::/48": "271773", - "2a07:1c40:102e::/48": "7489", - "2402:800:9d9b::/42": "7552", - "2001:559:c0e2::/48": "33489", - "2403:6100::/32": "4621", - "240a:afa7::/32": "146657", - "2a00:f440:c::/48": "57712", - "2a02:ce0::/32": "35819", - "2001:67c:2430::/46": "57517", - "2a0b:4340:97::/48": "205610", - "2403:c200:3::/32": "9503", - "2600:1011:b030::/41": "6167", - "2804:2b38::/32": "265141", - "2804:36a0:1200::/34": "266360", - "2a00:6fc0:c010::/44": "3215", - "2a0c:e640:6780::/48": "17830", - "2407:6fc0::/32": "137169", - "2607:f928::/47": "22645", - "2607:feb0::/32": "26546", - "2a02:ee80:424d::/46": "3573", - "2a0d:40c0::/32": "203448", - "2600:1413:3001::/33": "20940", - "2a07:e900::/29": "3214", - "2a09:bac0:162::/47": "13335", - "2402:93c0:100::/48": "59073", - "2600:1406:35::/48": "35994", - "2603:c0f8:2820::/39": "20054", - "2620:34:2000::/48": "395763", - "2800:bf0:ae::/41": "27947", - "2a0c:aac0::/29": "49890", - "2803:2a00:3c00::/38": "27895", - "2a09:3a00:3000::/40": "49981", - "2a09:1c00::/29": "209891", - "2a0b:6b81:1::/48": "203729", - "2406:b800::/32": "38652", - "2620:f:2::/48": "3755", - "2620:74:77::/48": "11840", - "2a0e:fb47::/32": "29182", - "2001:559:135::/48": "33661", - "2001:559:402::/48": "33659", - "2001:678:26c::/48": "41062", - "240a:a564::/32": "144030", - "2606:2800:4247::/48": "15133", - "2804:394::/32": "262895", - "2a10:4480::/29": "398559", - "2001:559:131::/48": "33652", - "2001:ee0:360::/47": "135905", - "2406:e740::/48": "140766", - "2607:700:1300::/37": "22343", - "2806:2ea::/32": "139235", - "2a0f:5707:af0a::/48": "208753", - "2a07:580::/29": "31263", - "2001:559:8203::/48": "33652", - "2001:559:c10d::/48": "33662", - "2405:1c0:6461::/45": "135062", - "2405:8a00:a055::/33": "55824", - "2800:160:1ed5::/42": "14259", - "2804:7c8:7000::/32": "262323", - "2804:12a4:100::/40": "263489", - "2001:559:8602::/48": "33287", - "2001:4878:2261::/48": "12222", - "2407:8c00:ffe1::/48": "131317", - "2801:1fc:34::/48": "27951", - "2a0c:e040:1338::/29": "200629", - "2600:1417:e801::/37": "20940", - "2804:6de4::/32": "270562", - "2a0f:2f40::/29": "60262", - "2001:500:d937::/48": "396566", - "2400:cc00:8000::/33": "17477", - "2400:dd01:200e::/35": "7497", - "2620:0:2b70::/44": "22847", - "2620:9f::/48": "30021", - "2a01:cb20:1000::/33": "3215", - "2001:388:20c5::/35": "7575", - "2401:d800:98c0::/42": "7552", - "2409:806a:1900::/34": "9808", - "2804:4230::/32": "267484", - "2a0c:700:3000::/36": "204515", - "2001:4860:4865::/32": "15169", - "2602:fed2:7060::/44": "53356", - "2804:14c:4500::/40": "28573", - "2a00:14d8::/29": "8542", - "2a09:e940::/32": "34762", - "2001:4368::/32": "9129", - "240a:a448::/32": "143746", - "2804:6724::/32": "269606", - "2a01:9700:14f0::/45": "8376", - "2001:dce:6::/40": "23869", - "2a01:7c80::/33": "24852", - "2001:df0:293::/48": "10010", - "2402:800:bde0::/38": "7552", - "2403:3800:1300::/32": "4007", - "240a:a9a9::/32": "145123", - "2602:feb4:1e0::/44": "25961", - "2a02:26f7:dd84::/48": "36183", - "2001:67c:dc::/48": "50273", - "2409:8714:8a00::/31": "56044", - "2602:fd9d::/36": "26576", - "2001:559:15b::/48": "22909", - "2406:d840::/32": "141322", - "2408:8459:a430::/41": "17622", - "2620:131:8008::/45": "4966", - "2806:230:102a::/48": "265594", - "2a05:ae40::/29": "41723", - "2001:1248:9754::/44": "11172", - "2804:179c::/43": "263159", - "2804:1e68::/44": "53006", - "2a00:d78::/32": "1140", - "2a05:5c80::/29": "48846", - "2001:4490:3bfc::/46": "9829", - "2401:8a00::/32": "10099", - "240e:3b0:c000::/37": "140315", - "2607:fcc8::/33": "10796", - "2620:34:a001::/48": "7381", - "2a02:2940::/32": "13246", - "2a04:4e40:800::/47": "54113", - "2405:9240::/32": "61317", - "2602:feda:cf0::/44": "212528", - "2604:b100::/32": "20394", - "2803:5440:4059::/48": "264738", - "2a01:367:c205::/36": "30823", - "2804:7aa4:8100::/33": "271383", - "2409:4052:1000::/34": "55836", - "2409:8915:2900::/40": "56044", - "240e:44d:1580::/41": "4134", - "2600:100f:f100::/44": "6167", - "2606:2800:60e0::/48": "15133", - "2804:448:2::/39": "262427", - "2804:2f84::/32": "264896", - "2806:34b::/32": "265601", - "2a01:6c60:4000::/30": "62217", - "2001:559:81eb::/45": "7922", - "2001:fd8:b200::/42": "132199", - "2404:aac0::/32": "131642", - "2804:3034::/39": "264936", - "2804:46d4::/47": "267014", - "2a0d:1780::/29": "12570", - "2001:559:458::/47": "7015", - "2804:10d4::/32": "262376", - "2a02:26f7:cbc5::/46": "20940", - "2402:800:5601::/44": "7552", - "2804:aa4::/32": "52902", - "2a05:f787:ffff::/48": "57667", - "2806:230:3022::/48": "265594", - "2806:2f0:20a4::/43": "22884", - "2c0f:f940::/32": "33779", - "2a05:57c0::/36": "31259", - "2001:ee0:1007::/40": "45899", - "2400:b100::/32": "55555", - "240e:d6:7000::/28": "4134", - "2603:90f5:6::/48": "10796", - "2801:80:a00::/48": "263279", - "2a00:1348::/44": "8879", - "2a02:180::/32": "35366", - "2800:160:199b::/45": "14259", - "2001:559:48b::/48": "7016", - "2405:1c0:6a71::/48": "135062", - "2405:201:3000::/33": "55836", - "240e:964:800::/37": "133774", - "2600:1413:e000::/48": "24319", - "2602:fe06::/36": "397672", - "2620:15e:101::/46": "30383", - "2804:7844::/32": "271231", - "2a00:1851:8000::/34": "29357", - "2a00:47c0:511::/48": "44568", - "2a01:c50f:c500::/38": "12479", - "2a03:a60::/32": "59862", - "2a03:2880:f10b::/43": "32934", - "2a00:1490:fac1::/48": "42416", - "2001:18c8:700::/41": "18982", - "2409:8915:5a00::/39": "56044", - "240a:a150::/32": "142986", - "240e:13:800::/37": "134238", - "2600:1480:2800::/48": "21342", - "2804:3868:400::/38": "266475", - "2804:38c4::/32": "266500", - "2a00:18f0:1e00::/48": "25432", - "2403:1000:5100::/40": "38819", - "240a:a19c::/32": "143062", - "2806:230:2040::/48": "265594", - "2806:33f::/32": "270131", - "2001:1900:2383::/45": "10753", - "2a0a:6680:bee::/48": "203500", - "2001:559:c024::/48": "33667", - "2001:648:22b0::/48": "47616", - "2001:19e8:8900::/48": "4046", - "2406:7400:38::/46": "131269", - "2a01:6520::/32": "199860", - "2001:1248:5a32::/41": "11172", - "2804:aa8:700::/36": "52903", - "2001:559:758::/48": "33657", - "2607:fdc0::/43": "20326", - "2a03:3b00:1::/46": "202053", - "2001:559:35e::/48": "7922", - "2408:8948::/32": "4837", - "2603:c0f8:2210::/40": "20054", - "2804:1f1a::/32": "265212", - "2804:4be4::/32": "267335", - "2a04:e800:5040::/48": "57976", - "2a05:fb41::/30": "59504", - "240a:a811::/32": "144715", - "2600:5c01::/39": "10796", - "2606:4700:1100::/40": "132892", - "2620:0:2220::/48": "15318", - "2001:559:c1f1::/48": "7015", - "2001:44b8:6::/48": "4739", - "240a:a0c2::/32": "142844", - "2600:1480:f000::/48": "21342", - "2800:ba0:4::/48": "263812", - "2a06:8c0::/29": "200739", - "2a0f:6580:102::/48": "200334", - "2806:2f0:2124::/43": "22884", - "2001:67c:2bfc::/48": "3301", - "2404:ff80:101::/32": "64096", - "2409:8914:400::/39": "56044", - "2600:1407:8801::/37": "20940", - "2801:19:2800::/48": "267708", - "2804:18:4000::/36": "26599", - "2804:1e38:6000::/32": "264415", - "2a02:2e8::/32": "44512", - "2001:678:668::/48": "39591", - "2402:800:3b9b::/41": "7552", - "240a:a22c::/32": "143206", - "2600:c808::/32": "7018", - "2806:230:2027::/48": "11888", - "2a01:9700:1720::/43": "8376", - "2001:559:8189::/48": "7922", - "2401:7700::/32": "24150", - "2403:d700::/32": "58598", - "2409:8915:2200::/39": "56044", - "2602:fcb3::/36": "3356", - "2001:678:c::/48": "2484", - "2404:c0:33a0::/32": "23693", - "240a:aad2::/32": "145420", - "2800:9a0:3100::/29": "14522", - "2804:348::/33": "28133", - "2a02:2498:3::/48": "36351", - "2001:559:81c4::/47": "7725", - "2001:44b8:30b3::/44": "4739", - "2600:1f01:4081::/48": "16509", - "2605:c640::/39": "62538", - "2804:19b8::/33": "52912", - "2001:67c:2384::/48": "197942", - "240a:a7a0::/32": "144602", - "2a00:5b20::/32": "39816", - "2a0f:d940::/29": "60781", - "2800:be0:4e3::/32": "267848", - "2804:592c::/32": "268173", - "2a00:6900:10::/48": "60199", - "2a0c:a780::/31": "200748", - "2001:559:823f::/48": "7015", - "2001:4c90::/29": "35612", - "2402:dc00::/32": "45682", - "2a04:f580:8290::/48": "4134", - "2a09:da40::/29": "61100", - "2409:8914:aa00::/39": "56044", - "2a0d:f740::/32": "43182", - "2001:559:8247::/48": "33657", - "2001:67c:2994::/48": "62452", - "2405:ec00:5::/39": "23955", - "2804:c4c::/32": "52689", - "2a10:2240::/32": "205885", - "240a:a479::/32": "143795", - "240e:473:ac00::/41": "140485", - "2a07:3080::/29": "41639", - "2405:8a00:21be::/33": "55824", - "2620:2d:4000::/46": "41231", - "2800:c70::/43": "23201", - "2801:134::/43": "3549", - "2a01:6b40::/32": "198403", - "2a02:4c8:af::/48": "47748", - "2a02:26f7:bc00::/48": "36183", - "2a0d:5641:2100::/44": "57695", - "2001:559:831e::/47": "7922", - "2001:2000:6000::/40": "1759", - "240a:adb3::/32": "146157", - "240e:44d:d00::/41": "140345", - "2804:812c::/32": "272437", - "2001:559:84cd::/48": "7922", - "2409:8775::/28": "9808", - "240a:acbc::/32": "145910", - "2a00:b000::/32": "48326", - "2a02:26f7:dcc5::/46": "20940", - "2408:8456:4610::/42": "134543", - "2a0e:b107:ea4::/48": "212085", - "240a:a58a::/32": "144068", - "2001:df4:4880::/48": "140923", - "2001:1260:230::/40": "28536", - "2607:f5d8:11::/44": "11096", - "2800:110:2201::/37": "4270", - "2803:d700:ae00::/35": "61461", - "2408:84f3:3650::/44": "17816", - "2602:fd38::/36": "394037", - "2801:80:210::/48": "52998", - "2a00:4cc6::/32": "203871", - "2a06:62c0:81::/44": "204138", - "2001:678:414::/48": "31317", - "2001:67c:2f98::/48": "29691", - "2605:cac0::/32": "398425", - "2a03:96c0::/32": "29319", - "2a10:d8c0::/29": "208861", - "2001:44b8:6056::/44": "7545", - "2605:c1c0::/32": "63264", - "2a01:498:600::/32": "42018", - "2a0a:e805:300::/37": "64476", - "2402:5700::/32": "56111", - "240a:a437::/32": "143729", - "240e:3b8:1400::/38": "134773", - "2606:8c00:2::/48": "22995", - "2806:230:301c::/48": "265594", - "240a:acbf::/32": "145913", - "2600:6c38:42::/43": "20115", - "2801:80:3910::/48": "270530", - "2001:48a8:68fd::/48": "177", - "2803:5c80:8056::/48": "64114", - "2a0e:7d40:50::/32": "209833", - "2001:559:80cf::/48": "33491", - "240a:aa4c::/32": "145286", - "2a02:26f7:e48d::/42": "20940", - "240e:640:ce00::/40": "136197", - "2602:fffd::/36": "55022", - "2600:8808:3e00::/39": "64019", - "2602:ffce:31::/36": "63019", - "2a02:5320:d00::/40": "12189", - "2001:559:598::/48": "7015", - "2404:bc0:4010::/44": "137735", - "240a:a67a::/32": "144308", - "2a02:26f7:cf08::/47": "36183", - "240e:44d:4b00::/41": "140345", - "2600:1408:4000::/48": "35994", - "2a02:23e9::/32": "49509", - "2a02:26f7:e6c8::/48": "36183", - "240a:af83::/32": "146621", - "2a01:358:4018::/47": "9121", - "2a02:26f7:e0c4::/48": "36183", - "2a02:26f7:ed40::/48": "36183", - "2401:b0c0:e000::/48": "136941", - "2404:b680::/32": "135290", - "240a:a9f2::/32": "145196", - "2806:20f::/32": "28408", - "2a0b:24c1::/33": "205961", - "2606:c100::/32": "36545", - "2804:4074::/32": "265960", - "2001:978:2100:100::/38": "174", - "2402:ef3f::/48": "9430", - "2604:880:4d::/48": "54540", - "2001:559:38b::/48": "7725", - "240e:108:82::/48": "58461", - "2803:2b80::/32": "263730", - "2a01:a280:101::/46": "21314", - "2a02:6680:e000::/47": "16116", - "2607:fc68:21::/39": "2711", - "2a00:1e08::/32": "196997", - "2a03:5900:c::/29": "31126", - "2a04:4e40:d200::/48": "54113", - "2a07:45c2::/40": "31463", - "2401:d800:fd60::/40": "7552", - "240e:981:f300::/36": "4134", - "2604:f980:6800::/40": "19957", - "2620:d8:8000::/48": "2900", - "2800:3c0:8180::/33": "19863", - "2604:200::/45": "33132", - "2804:2088::/32": "53223", - "2a03:67c0::/32": "12703", - "2001:16f7::/32": "201370", - "2402:800:3501::/44": "7552", - "2408:80ea:76e0::/43": "17623", - "240a:a746::/32": "144512", - "2a01:8840:4::/47": "207266", - "2a01:c50f:400::/39": "12479", - "2a03:2880:f161::/45": "32934", - "2404:6c00::/32": "24324", - "240e:67f:e400::/39": "140330", - "2a00:1418:1000::/34": "41391", - "2a03:7c60::/32": "201038", - "2001:4878:2007::/44": "12222", - "240a:a82c::/32": "144742", - "2604:4e80::/32": "39964", - "2605:8d80:1080::/32": "812", - "2a02:7080::/48": "398826", - "2620:101:9008::/47": "40934", - "2803:5c80:6595::/48": "64114", - "2806:2f0:30e4::/39": "17072", - "2409:4054:1000::/34": "55836", - "2602:ff7a::/36": "394144", - "2804:6b68::/32": "270398", - "2804:7b48::/32": "271422", - "2a0b:b87:ffe3::/48": "205117", - "2403:300:a32::/48": "6185", - "2408:8256:328d::/43": "17623", - "240e:982:3200::/39": "138991", - "2604:e740::/32": "32281", - "2a02:188:5108::/48": "35678", - "2a02:26f7:f148::/48": "36183", - "240a:a2b1::/32": "143339", - "2804:1644::/38": "262903", - "2804:7090::/32": "270734", - "2a02:6b8:82::/33": "208722", - "2001:4878:2158::/48": "12222", - "2401:d800:28f0::/39": "7552", - "2409:8b3d::/25": "9808", - "2803:9800:a8c5::/46": "11664", - "2804:32a8::/32": "265091", - "2a09:4200::/29": "47602", - "2001:579:9395::/36": "22773", - "2404:4dc0::/32": "63570", - "2804:77c8::/32": "271199", - "2a02:26f7:f8d9::/42": "20940", - "2a02:acc1::/30": "198726", - "2a03:f80:81::/48": "9009", - "2a04:5680::/29": "197790", - "2001:a48::/33": "8970", - "2404:7c00:2::/48": "141177", - "2405:e400::/32": "9268", - "2406:840:f893::/48": "212034", - "2001:b30::/33": "2614", - "240a:ac16::/32": "145744", - "240e:438:8c40::/38": "4134", - "2804:ce0::/32": "52572", - "2804:39cc::/32": "266051", - "2a04:4e40:2810::/41": "54113", - "2405:a840::/32": "38562", - "2604:edc0::/32": "40764", - "2804:12e4::/32": "263503", - "2804:6a28::/32": "270316", - "2408:8456:6840::/39": "17816", - "240a:ac21::/32": "145755", - "2a02:13f0:13::/48": "35584", - "2a0f:5707:fff4::/47": "207401", - "2001:19b0::/32": "7029", - "2001:4403:dead::/48": "9896", - "2400:a980:500::/36": "133111", - "2409:8751:300::/37": "56047", - "2600:1408:c01::/38": "20940", - "2804:1070:100::/40": "28209", - "2a00:7440::/32": "12625", - "2001:559:83ed::/48": "33652", - "2603:90f5:14::/48": "33588", - "2607:400::/32": "30583", - "2a01:b480::/32": "35362", - "2001:579:d1a4::/41": "22773", - "2401:4900:1100::/41": "45609", - "2403:2300::/32": "56309", - "2a02:970:117a::/40": "44002", - "2405:1c0:6617::/42": "55303", - "2620:149:a1c::/48": "6185", - "2a01:358:4014::/46": "9121", - "2001:df2:a980::/48": "131203", - "2620:4:c000::/48": "20126", - "2a0b:fb00::/29": "200548", - "2408:840c:6100::/40": "17621", - "240e:473:8c50::/39": "4134", - "2a02:2360::/32": "51034", - "2a02:26f7:e649::/42": "20940", - "2a04:4e40:9800::/48": "54113", - "2a0b:6b86:d18::/40": "212232", - "2a0d:a0c0::/48": "198426", - "2804:7478:8000::/33": "270983", - "2a02:ff0:20f1::/44": "12735", - "2a0a:a600::/29": "61317", - "2402:3a80:c032::/48": "38266", - "2408:8456:be40::/39": "17816", - "2600:1017:f410::/38": "6167", - "2600:6c2e:c81::/39": "20115", - "2a02:e0:3809::/33": "34984", - "2a0a:4c0::/32": "206303", - "2c0f:f2a0::/46": "327849", - "2a00:5880:1400::/44": "209090", - "2a02:5740:14::/48": "58065", - "2a02:6c80::/32": "39741", - "2a04:cf40::/29": "12843", - "2a0f:9441:42::/45": "62240", - "2600:1417:f001::/37": "20940", - "2804:5aec::/32": "268805", - "2a09:bac0:148::/48": "13335", - "2001:67c:1442::/48": "43832", - "240e:473:7200::/41": "140485", - "2804:1354::/32": "52892", - "2a04:81c0::/29": "56665", - "2001:4d78:fe01::/44": "15830", - "2402:800:91fe::/38": "7552", - "240a:a6e3::/32": "144413", - "2600:c02:b021::/33": "12182", - "2a00:11b8::/32": "44009", - "2a06:4940::/29": "204279", - "2804:534c::/32": "268575", - "2a02:26f7:d741::/46": "20940", - "2a06:e881:1800::/48": "206885", - "2a02:26f7:a5::/48": "20940", - "2a03:540::/32": "34718", - "2a00:11c0:38::/48": "203833", - "2a05:b0c6:200a::/47": "208753", - "2001:1a68::/47": "15694", - "2407:4d40:8::/32": "142050", - "2604:d600:1592::/45": "32098", - "2605:a7c0:101::/44": "16509", - "2620:0:2be0::/48": "19106", - "2804:2d28::/32": "265264", - "2a02:2aa8:130::/38": "702", - "240e:473:ad50::/40": "4134", - "2a02:2ad0:503::/43": "702", - "2404:e4c0:8::/48": "54201", - "2803:f200::/32": "52322", - "2001:4978:1005::/40": "19255", - "240a:aeb8::/32": "146418", - "2a02:26f7:e400::/48": "36183", - "2a05:400::/29": "205112", - "2a0c:b641:4f0::/44": "212653", - "2600:230f::/32": "20115", - "2803:10e0:ced1::/34": "269853", - "2804:325c::/32": "53142", - "2001:559:85ff::/48": "21508", - "2001:678:798::/48": "201734", - "2408:8459:1610::/41": "17622", - "2803:d820::/32": "265813", - "2a0e:e704:43::/48": "212972", - "2001:6d0:d4::/47": "8985", - "2401:8d00::/47": "38345", - "2409:8053::/47": "56047", - "2600:1419:ec01::/35": "20940", - "2606:d980::/32": "14051", - "2a06:4400::/29": "50698", - "2001:559:1a3::/48": "7922", - "2401:ff80:1209::/46": "133954", - "2a02:2370:1000::/48": "213120", - "2a06:bc0::/29": "213078", - "2804:18:6800::/44": "26599", - "2804:34a4::/32": "265470", - "2804:7d44::/32": "271550", - "2a01:8840:76::/44": "12041", - "2a07:8980:103::/30": "198651", - "2001:c10:ff00:a::/47": "7473", - "2804:2f30:fd00::/38": "53096", - "2806:269:501::/48": "13999", - "2409:8904:5b40::/42": "24547", - "240a:a03c::/32": "142710", - "2a02:730::/48": "29278", - "2a0c:14c0::/29": "20546", - "2001:4490:4e64::/46": "9829", - "2804:3dc:c2::/42": "52967", - "2a00:cd40::/32": "49113", - "2a0e:b107:4a1::/48": "207427", - "2001:1248:95b0::/38": "11172", - "2001:448a:50d0::/42": "7713", - "2801:80:2430::/48": "268334", - "2804:4540::/32": "266914", - "2a0f:9400:800f::/48": "211767", - "2001:559:c365::/48": "33657", - "2001:67c:26c1::/46": "198478", - "2001:4868:205::/44": "7046", - "2401:d800:2c40::/42": "7552", - "2408:84f3:3290::/37": "17816", - "2a02:ee80:41d4::/46": "3573", - "2a04:e4c0:40::/45": "36692", - "2401:4300:abcd::/48": "45184", - "2602:fd50::/48": "62513", - "2001:559:c214::/48": "22909", - "2001:df2:df80::/48": "139904", - "2600:140f:5001::/39": "20940", - "2a05:8140::/29": "12776", - "2a03:6085::/30": "16285", - "2001:67c:1968::/48": "24989", - "2406:e002:5000::/32": "23655", - "2408:8456:e840::/38": "17816", - "240e:3bb:7a00::/32": "140313", - "240e:870:50::/30": "4134", - "2607:f0d0:2a00::/35": "36351", - "2610:100:2418::/39": "8047", - "2a03:7380:5c80::/42": "13188", - "2a0c:b641:32::/48": "210233", - "2001:559:85bd::/48": "33491", - "2001:4490:4860::/46": "9829", - "2001:44b8:30fa::/36": "4739", - "2a02:26f7:e045::/46": "20940", - "2a0c:b280::/48": "16509", - "2001:67c:1790::/48": "51350", - "2001:df6:a800::/48": "59165", - "2604:9cc0:5::/37": "201106", - "2a02:2498:4::/41": "13213", - "2a0c:a9c7:253::/48": "41740", - "2a0e:db80::/29": "205516", - "2001:559:75b::/48": "7015", - "2401:f8c0::/32": "58895", - "2405:ba00:8004::/48": "1217", - "2607:fb58:d200::/40": "53933", - "2803:50c0:105::/46": "264763", - "2401:2000:8000::/33": "4608", - "2602:808:8000::/40": "3763", - "2602:809:6000::/44": "399214", - "2604:dc00:7454::/32": "19752", - "2800:484:2400::/38": "14080", - "2804:145c:c310::/37": "263327", - "2001:559:c3c5::/48": "33668", - "2001:1579::/47": "12657", - "2402:800:98ee::/39": "7552", - "2409:8904:8240::/39": "24547", - "2604:2b40::/32": "46262", - "2a00:f80::/32": "25542", - "2a0e:8f02:f029::/48": "207071", - "2a02:26f7:f089::/46": "20940", - "2400:cb00:ab90::/46": "13335", - "240e:90:3000::/30": "4134", - "2606:2800:247::/44": "15133", - "2607:f750:c000::/40": "23473", - "2a03:2ba0::/32": "47944", - "2402:800:9e60::/40": "7552", - "2602:fed3:6::/48": "21769", - "2a01:5ac0::/32": "25460", - "2a09:7f40::/29": "209378", - "2a0f:a304::/32": "44326", - "2001:388:30d9::/33": "7575", - "2401:bd00:b001::/46": "38636", - "240e:103:8b20::/44": "139462", - "2a06:86c0::/29": "3213", - "2a02:26f7:f889::/42": "20940", - "2001:559:3ef::/48": "20214", - "2001:6f8:1904::/32": "4589", - "2401:d800:fa10::/42": "7552", - "240a:a056::/32": "142736", - "2607:fd78:702::/36": "26677", - "2a00:1968::/48": "41528", - "2a01:8840:5a::/45": "12041", - "2001:1b58::/29": "35283", - "2001:4878:4062::/47": "12222", - "2404:a8:3ff::/48": "24514", - "2804:221c::/32": "264592", - "2a02:26f7:eb::/48": "20940", - "2408:8459:e210::/42": "17623", - "240a:408a:c000::/35": "58834", - "240e:438:5440::/38": "4134", - "2804:14c:5584::/41": "28573", - "2a01:8840:3a::/45": "12041", - "2001:978:601::/36": "174", - "2401:ff80:178f::/43": "133954", - "240e:473:b350::/33": "4134", - "2804:5e18::/33": "269011", - "2a0b:1306:1dc::/48": "209915", - "2a0e:aa01:bad2::/33": "206499", - "2001:678:dc4::/48": "213032", - "2401:a100:4::/32": "45194", - "2408:84f3:e640::/36": "17816", - "2605:e300::/32": "5009", - "2a02:970::/37": "44002", - "2001:559:374::/47": "7015", - "2001:18a0::/32": "23265", - "2404:8000:aa::/45": "17451", - "240e:62:3000::/32": "4134", - "2801:118::/48": "264823", - "2405:1c0:6781::/46": "135062", - "2804:e94:e::/47": "262468", - "2a0e:fd45:40f1::/48": "48646", - "2001:67c:5cc::/48": "3320", - "2409:8a50:d00::/38": "56047", - "2801:14:4800::/48": "19429", - "2001:67c:510::/51": "15486", - "2001:67c:2864::/48": "51091", - "2001:67c:2f94::/48": "34288", - "2402:e380:311::/48": "139058", - "2603:c011:2000::/36": "31898", - "2803:a8a0::/32": "266802", - "2a0f:1540::/29": "398559", - "2401:d800:9290::/39": "7552", - "2600:9000:224b::/45": "16509", - "2a00:7d80:11::/48": "44889", - "2a02:2100::/32": "39134", - "2a0e:46c4:22a5::/46": "136918", - "2600:1402:e001::/35": "20940", - "2a03:5c60::/32": "201157", - "2001:559:77d::/48": "7015", - "2001:559:8329::/48": "33660", - "2404:f4c0:f609::/48": "139328", - "2607:ffc8:1:2::/33": "17356", - "2804:2488:4000::/32": "264228", - "2a0c:9a40:8082::/48": "61138", - "2402:d000:813d::/36": "9329", - "240a:a0e8::/32": "142882", - "240a:aea6::/32": "146400", - "2a02:26f7:4d::/48": "20940", - "2001:4998:194::/46": "26101", - "2400:4880:4::/32": "131178", - "2a06:3000::/36": "28715", - "2001:4878:8031::/48": "12222", - "240e:982:1200::/34": "4134", - "2001:559:83f8::/48": "13367", - "2402:800:fa20::/41": "7552", - "2604:9700:100::/40": "54119", - "2804:998:81::/32": "28589", - "2a0c:9a40:1097::/48": "34927", - "2402:8100:3038::/41": "45271", - "2404:f4c0:fe1f::/48": "138632", - "2405:9800:b01b::/42": "133481", - "2406:daa0:9040::/44": "16509", - "240e:473:9b20::/41": "140486", - "2a02:13d0::/29": "13136", - "2405:2c40::/32": "45705", - "2408:8957:1bc0::/37": "17622", - "240e:90e:2000::/36": "137688", - "2401:4900:4a90::/42": "45609", - "2a10:a240::/29": "211694", - "240e:a50:6400::/31": "4134", - "2600:140f:7800::/48": "9498", - "2a00:55a0::/48": "199267", - "2001:559:3a2::/48": "7016", - "2405:5340::/32": "63781", - "2606:2800:6038::/48": "15133", - "2a00:17d8::/32": "12574", - "2a0c:2480::/29": "201372", - "2a0e:b107:1650::/44": "210926", - "2402:ef11:2::/47": "9430", - "2606:f900:9901::/37": "812", - "2a04:6c00::/29": "62412", - "2a0c:1d00:15::/32": "39614", - "2804:a50::/34": "28349", - "2a10:8a40::/29": "39405", - "2c0f:fbf0:1::/43": "32653", - "2001:678:150::/48": "59617", - "2408:8459:c210::/42": "17623", - "2804:5d44::/32": "268961", - "2a03:e100::/29": "52144", - "2001:4200:8010::/34": "2018", - "2401:e7c0::/32": "132298", - "2401:ff80:180f::/43": "133954", - "2607:f6f0:205::/48": "12085", - "2001:418:143b:200::/41": "2914", - "240a:ad9f::/32": "146137", - "2a00:a760::/32": "41216", - "2a0b:6580::/29": "204007", - "2001:559:c30f::/48": "7922", - "2408:8957:5600::/40": "17622", - "240e:979:4f00::/35": "4134", - "2800:8e0::/47": "18822", - "2804:6310::/35": "269336", - "2001:418:1401:1c::/64": "20940", - "2001:4408:4100::/38": "4758", - "2a0a:7c40::/32": "205925", - "2804:f08::/32": "263563", - "2804:13b4:8400::/33": "262288", - "2401:5700::/32": "131447", - "2405:8a00:6014::/46": "55824", - "2804:2bc4::/32": "265174", - "2a0b:9580::/32": "199324", - "2001:1248:98b6::/48": "11172", - "2402:7500:468::/40": "24158", - "2607:fe78::/32": "3851", - "2804:4bc:5001::/32": "262462", - "2a01:664:c00::/35": "48951", - "240a:a905::/32": "144959", - "2600:1417:52::/48": "24319", - "2804:41a4::/32": "267447", - "2001:559:c3b5::/44": "33287", - "2600:6c38:b27::/44": "20115", - "2a02:930::/32": "44237", - "2800:bf0:81c3::/45": "52257", - "2001:df0:2a00::/48": "63731", - "2401:8ac0:100::/48": "4671", - "2401:ff80:1809::/46": "133954", - "2404:bf40:a300::/48": "2764", - "2408:875c::/44": "140886", - "240e:438:2020::/43": "140647", - "240e:438:4a20::/43": "140647", - "2406:3400:dd::/38": "10143", - "2408:8256:2d6c::/48": "17816", - "2602:fd13::/36": "397787", - "2a0b:880:7::/36": "49624", - "2001:df5:ab80::/48": "141309", - "2408:8956:a200::/40": "17622", - "2804:4a38::/33": "267225", - "2804:57c8::/32": "268086", - "2804:80a8::/39": "271765", - "2a03:2260::/34": "201701", - "2a0a:62c0::/32": "16086", - "2a0b:3200::/31": "201080", - "2001:559:185::/48": "7015", - "2401:640:2110::/48": "134844", - "2408:8644:1200::/32": "4837", - "240a:a4be::/32": "143864", - "2620:104:1000::/44": "20074", - "2804:319c::/32": "265026", - "2a00:b0a0::/46": "203434", - "2804:3cac::/32": "266228", - "2001:1318:1015::/32": "3597", - "2401:d800:9920::/41": "7552", - "2404:9e80::/32": "64095", - "2407:ef00:911::/42": "12422", - "2408:805d:9::/40": "17623", - "240a:a2a3::/32": "143325", - "2804:1dc8::/32": "264393", - "2a02:26f7:e519::/42": "20940", - "2a0d:2146:be12::/40": "50801", - "240e:104:7d00::/38": "4134", - "2607:fb58:7000::/36": "36086", - "2620:1bc:102d::/46": "7726", - "2804:14c:bfe0::/43": "28573", - "2804:e00::/33": "11419", - "2804:2884::/32": "263966", - "2a02:26f7:e288::/48": "36183", - "2001:67c:27fc::/48": "12732", - "2602:fcff:19::/46": "38041", - "2a0e:5100::/29": "30823", - "2407:4600::/32": "45295", - "2408:840d:6a00::/42": "17621", - "2001:4b60:100::/48": "1764", - "2a00:1728:19::/48": "47748", - "2a00:4802:2d0::/42": "13124", - "2a01:bc80:1::/44": "32590", - "2a0e:3940:1000::/36": "60767", - "2402:800:541d::/42": "7552", - "2604:af80:c48::/35": "18859", - "2804:7f6:8000::/33": "18881", - "2804:2700::/32": "263869", - "2804:3458::/32": "28128", - "2001:559:c3d0::/47": "7922", - "2401:d800:dc30::/41": "7552", - "240a:ae9d::/32": "146391", - "2606:5300::/32": "3367", - "2607:f870:2::/32": "11992", - "2801:1d:e000::/48": "18747", - "2801:80:1230::/48": "264347", - "2a02:26f7:f64d::/42": "20940", - "2a02:6c20:5::/48": "208143", - "2402:d000::/39": "9329", - "240e:84c:50::/27": "4134", - "2a01:b420::/44": "60162", - "2a04:5200:5977::/48": "202306", - "2605:e000:c0c::/35": "20001", - "2401:d800:7500::/42": "7552", - "2604:eb40:7::/32": "32727", - "2801:80:38f0::/48": "270461", - "2a09:a443::/32": "205479", - "240a:a0de::/32": "142872", - "240a:a5bd::/32": "144119", - "240a:a8bb::/32": "144885", - "240e:1e:5000::/36": "140315", - "2801:a4:100::/38": "262742", - "2a0e:4180::/29": "25540", - "2001:559:299::/48": "33660", - "2a03:8641::/32": "39143", - "2a0a:4ec0::/29": "559", - "2a0e:e704:46::/48": "210851", - "2401:2400:a::/32": "38496", - "2605:a401:80d7::/44": "33363", - "2804:34ac::/32": "265472", - "2a01:6340::/29": "60404", - "2604:880:3a2::/48": "13820", - "2001:559:81a6::/48": "33660", - "2001:4988::/32": "7029", - "2804:6fc:17::/44": "28158", - "2a03:51e0::/32": "43776", - "2001:c20:c831::/48": "9255", - "240a:a74d::/32": "144519", - "2804:3fc4::/32": "265913", - "2a10:e380::/32": "29066", - "2409:805c:900::/35": "9808", - "2409:8915:7400::/39": "56044", - "2a00:1c18:334::/29": "31463", - "2a01:7080::/43": "42848", - "2a02:2e02:2c20::/41": "12479", - "2001:550:c08::/46": "174", - "2001:67c:258c::/48": "31424", - "2403:100:2000::/48": "56300", - "2409:8c20:4826::/38": "56046", - "2a02:2698:3400::/38": "56330", - "2a10:db80::/29": "49962", - "2001:dcd:9::/48": "38796", - "2804:e0c:100::/48": "28176", - "2804:e24::/32": "262417", - "2804:8064::/32": "271747", - "2001:4d0:2419::/48": "297", - "2001:559:c32e::/48": "33657", - "2401:d800:b660::/40": "7552", - "2a0a:2842:100::/48": "42962", - "2c0f:4900::/32": "328870", - "2402:940::/32": "137990", - "240a:a500::/32": "143930", - "240a:a8b1::/32": "144875", - "2600:1415:e801::/35": "20940", - "2a0c:e186::/32": "204690", - "2a06:e881:5402::/47": "209808", - "2001:559:10d::/46": "7922", - "2001:559:c16a::/48": "22909", - "2001:56b:e::/47": "7861", - "240a:a35d::/32": "143511", - "240a:ae8b::/32": "146373", - "2602:fe9f:ee0::/43": "23738", - "2620:0:1a30::/48": "10546", - "2001:559:5e9::/48": "7922", - "2409:8907:6c20::/39": "24547", - "2a07:e03:200::/32": "210083", - "2401:d800:d0::/42": "7552", - "2600:1009:b1d0::/42": "6167", - "2a02:dd0::/32": "15735", - "2a02:26f7:ba86::/47": "20940", - "2a02:26f7:bc84::/48": "36183", - "2a0b:5080::/29": "43402", - "2c0f:fef0::/32": "36958", - "2001:e60:8000::/35": "4766", - "2607:fcd0:fa80:8f38::/51": "8100", - "2620:126:7002::/48": "394559", - "2804:465c::/32": "266985", - "2001:559:789::/48": "7015", - "2606:f900:a402::/38": "812", - "2402:800:7610::/40": "7552", - "2402:800:9d71::/40": "7552", - "2a07:a680::/29": "60111", - "2001:67c:23c4::/48": "21155", - "2a02:cb43:3000::/46": "20546", - "2a03:5820::/32": "47736", - "2a0c:4a40::/29": "210107", - "2001:559:85a1::/46": "7922", - "2001:67c:2910::/48": "3301", - "2402:800:fa50::/42": "7552", - "2a02:26f7:cd89::/42": "20940", - "2405:2300:ff71::/46": "13443", - "2409:8904:58b0::/39": "24547", - "2600:1009:b030::/44": "22394", - "2a02:2760::/32": "51402", - "2a0a:a440::/29": "36459", - "2001:c38:9201::/36": "9931", - "2604:d600:1216::/44": "32098", - "2620:30:6000::/48": "14936", - "2a00:1cf8:2000::/35": "44944", - "2a02:26f7:ef05::/46": "20940", - "2a04:4e40:5200::/48": "54113", - "2a0a:e8c0::/32": "205412", - "2001:559:c1a3::/48": "33668", - "240a:aa86::/32": "145344", - "2a06:e881:2103::/45": "206479", - "2400:adc3::/39": "9541", - "2402:800:fdf0::/38": "7552", - "2409:805c:3::/45": "9808", - "2620:12f:d000::/48": "40342", - "2a03:26e0::/32": "201646", - "2001:559:4ed::/46": "33661", - "2001:559:8773::/48": "21508", - "240e:640:ee00::/40": "136197", - "2804:136c::/32": "262372", - "2804:4ac4::/32": "267262", - "2804:2dc:8000::/33": "28277", - "2804:cb0:facf::/37": "52742", - "2001:559:c261::/48": "33652", - "2402:e280:1200::/39": "134674", - "2804:7f44::/32": "271677", - "2a02:6d40::/32": "42652", - "2405:9800:c91e::/48": "45458", - "2408:8459:d1c0::/36": "17816", - "2a00:d102::/34": "15704", - "2a10:c5c0::/31": "211547", - "2804:5c0:800d::/33": "262537", - "2001:470:14f::/48": "47061", - "2401:1c00:3081::/41": "38809", - "2402:8100:20e1::/48": "45271", - "2600:6c38:e03::/45": "20115", - "2602:febb::/39": "394989", - "2620:15:e000::/48": "396079", - "2804:14c:5f83::/45": "28573", - "2a00:1398::/30": "34878", - "2001:559:8158::/48": "33659", - "240a:a2bb::/32": "143349", - "240a:ae38::/32": "146290", - "2a00:cb40::/32": "48972", - "2a02:2e02:a180::/42": "12479", - "2c0f:eae8::/32": "26130", - "2405:8dc0::/32": "45370", - "240a:a907::/32": "144961", - "240e:b:f800::/46": "139018", - "2600:1017:a800::/44": "22394", - "2a02:26f7:f381::/46": "20940", - "2a02:fa80::/32": "50520", - "2a0e:b107:32::/47": "209650", - "2001:57a:800::/38": "22773", - "2401:ff80:1413::/40": "133954", - "240a:a78c::/32": "144582", - "240a:ab9c::/32": "145622", - "2605:b800::/37": "23550", - "2a09:6500::/29": "57756", - "2c0f:ed98::/32": "328483", - "2804:e94:19::/48": "262468", - "2804:4154::/32": "52806", - "2001:1980:4444::/48": "32903", - "240e:0:9000::/36": "23724", - "2a02:26f7:c448::/48": "36183", - "2a0f:7280::/48": "60781", - "2001:559:2b7::/44": "7922", - "2001:4888:8056::/48": "22394", - "2803:9810::/35": "36492", - "2a02:26f7:f7c0::/48": "36183", - "2a02:ac80:d01::/38": "25145", - "2a0f:f40::/29": "60262", - "240e:ff:c002::/48": "134773", - "2604:6600:4c::/42": "40676", - "2620:10a:9012::/48": "11133", - "240e:3b5:2800::/38": "4134", - "2a02:26f0:a::/48": "34164", - "2600:9000:21e8::/38": "16509", - "2620:132:f181::/38": "394977", - "2804:7ed4:f100::/36": "271650", - "2a0f:5944::/32": "9009", - "2001:559:144::/47": "7922", - "2408:8912::/29": "4837", - "2620:171:d00::/44": "187", - "2803:5c80:6598::/48": "64114", - "2804:3ca4::/32": "266226", - "2804:6a84::/32": "270341", - "2a02:26f7:e781::/46": "20940", - "2403:cec0::/32": "137995", - "2604:cac0:1::/44": "11019", - "2800:160:1547::/44": "14259", - "2a07:9980::/29": "8487", - "240a:ac74::/32": "145838", - "240a:ae7d::/32": "146359", - "2600:380:1c00::/38": "7018", - "2804:e0c:1c0::/48": "28176", - "2a01:8e00::/29": "48803", - "2a02:888:100:701::/37": "47794", - "2408:8000:2::/47": "4837", - "240e:473:9450::/39": "4134", - "2604:fb80:6801::/37": "15128", - "2605:8300:3::/44": "33059", - "2a02:26f7:ef45::/46": "20940", - "2a04:4e40:9000::/48": "54113", - "2a05:41c0::/29": "15600", - "2403:c00:4::/48": "17488", - "2806:283:6000::/37": "265515", - "2a02:26f7:c151::/42": "20940", - "2a03:a300:4100::/48": "35104", - "2a09:5000::/29": "206189", - "2600:1000:f100::/44": "6167", - "2a02:2578:1305::/44": "51375", - "2804:4e38::/32": "268247", - "2001:503:a83e::/48": "396574", - "2001:67c:2b0c::/48": "15542", - "240a:a4c3::/32": "143869", - "2605:f500:10a::/43": "1828", - "2620:7e:60c0::/48": "7385", - "2a02:26f7:c000::/48": "36183", - "2a02:6b40::/32": "44066", - "2804:5844::/32": "268117", - "2804:6588::/32": "269497", - "2806:2f0:4022::/47": "17072", - "2a01:498::/37": "42018", - "2a02:750:9::/43": "42708", - "2001:559:861d::/48": "7015", - "240e:965:2800::/37": "133776", - "2a0d:b500::/29": "51834", - "2001:428:b21::/48": "4015", - "240e:473:6400::/41": "140485", - "2804:1f42::/32": "270694", - "2a00:cc80::/32": "15557", - "2a02:26f7:ccc0::/48": "36183", - "2a04:4280:30::/48": "43260", - "2001:559:77::/44": "33651", - "2804:5090::/32": "263005", - "2a00:1188:f::/48": "8455", - "2a02:26f7:c7c0::/48": "36183", - "2a02:26f7:f441::/46": "20940", - "2a0b:6b83:4225::/41": "202562", - "2001:559:239::/48": "33659", - "2001:559:c147::/44": "7922", - "2001:1a80::/29": "20676", - "2404:4a00:6000:1::/37": "45629", - "240a:af44::/32": "146558", - "2804:19a0:3000::/48": "61808", - "2a0a:d00::/29": "207023", - "2803:c200:7519::/48": "22411", - "2804:2140::/35": "53059", - "2804:37c4:8400::/33": "266435", - "2804:5420::/32": "268630", - "2a07:3200::/29": "201873", - "2a0e:fd47::/32": "49085", - "2409:8020::/43": "56046", - "2600:140f:5000::/48": "9498", - "2804:6c4:9000::/36": "262893", - "2804:23b8::/32": "61584", - "2a02:28b0::/31": "51790", - "2001:5b0:5b00::/40": "6621", - "2001:12d0:8c1::/32": "28571", - "2401:4900:3280::/42": "45609", - "2600:1415:3401::/36": "20940", - "2804:7224::/32": "270835", - "2806:288:2a00::/40": "28469", - "2403:5000::/39": "9304", - "240e:44d:5100::/41": "140345", - "2a02:26f7:dd88::/48": "36183", - "2a02:5600::/32": "31430", - "2a0e:46c4:1400::/46": "211930", - "2600:1406:f000::/48": "35994", - "2620:117:7002::/44": "26955", - "240e:44d:400::/41": "140345", - "2a00:dd0::/32": "47869", - "2a00:10a0::/45": "35745", - "2001:559:c03e::/41": "7922", - "2001:dec::/48": "132797", - "2602:fc74::/48": "13768", - "2804:7a10::/32": "271345", - "2001:67c:28e4::/48": "15370", - "2408:8957:8200::/40": "17622", - "240a:aeeb::/32": "146469", - "2607:4a80::/32": "3778", - "2a01:8840:69::/48": "207266", - "2001:559:385::/48": "33491", - "2804:838::/32": "262359", - "2804:cb0:fac4::/44": "52742", - "2a02:26f7:c08d::/42": "20940", - "2a0c:b641:212::/48": "209661", - "240e:848:40::/44": "140553", - "2a06:7740::/48": "48282", - "2001:559:85ab::/48": "33657", - "2402:c800:ff71::/48": "38639", - "2409:8924:2500::/38": "56046", - "2804:bc4::/32": "52824", - "2a00:dd80:14::/48": "36236", - "2001:12f0:b7f::/37": "1916", - "2401:d800:7450::/42": "7552", - "240a:aa78::/32": "145330", - "2620:108:4022::/48": "1313", - "2a02:ac80:7001::/38": "25145", - "2001:559:1c3::/45": "33659", - "2408:8247:1200::/28": "4837", - "2605:2800:1201::/32": "6922", - "2001:559:c195::/48": "33491", - "2001:1218:5006::/34": "278", - "2600:1417:5b::/45": "20940", - "2804:6cd8:400::/32": "270496", - "2a02:2810::/32": "15954", - "2a02:ee80:4195::/48": "3573", - "2a0a:4640:14::/42": "206177", - "2001:559:834a::/47": "7016", - "240a:a01d::/32": "142679", - "240a:acb5::/32": "145903", - "2800:160:1948::/42": "14259", - "2804:1a08::/32": "262780", - "2a01:666:500::/31": "48951", - "2a0a:981::/32": "50113", - "2a01:54e0:a000::/38": "62287", - "2a10:cc40:b0f::/43": "20473", - "2c0f:f830::/32": "30844", - "2406:9c40:1002::/34": "55366", - "2409:8904:6370::/40": "24547", - "2402:800:b0d0::/42": "7552", - "2407:c300::/32": "133043", - "2408:80ea:7980::/43": "17623", - "240e:1a:40::/44": "137702", - "2804:14d:90ae::/47": "28573", - "2a03:2ca0::/38": "59865", - "2001:253:137::/48": "142103", - "2001:559:2e3::/48": "33491", - "2001:559:80f3::/45": "22909", - "2001:559:c247::/48": "33659", - "2001:67c:136c::/48": "60384", - "2606:2800:31f::/42": "15133", - "2a02:26f7:dbc9::/46": "20940", - "2a05:1085::/32": "209300", - "2001:559:4a4::/48": "7016", - "2401:d800:2f10::/42": "7552", - "2404:bf40:8082::/48": "7545", - "240a:ac24::/32": "145758", - "240e:473:4250::/39": "4134", - "2607:f5a8::/33": "27589", - "2a0d:8d05:3::/48": "211891", - "2402:5300:4e00::/40": "38733", - "2409:804c:23::/45": "9808", - "240e:37d:ac00::/30": "4134", - "2a07:3500:1a48::/48": "29396", - "2a0f:7940::/29": "51262", - "2a03:a980::/32": "16281", - "2408:8957:5700::/40": "17816", - "240a:a847::/32": "144769", - "2804:6fc8:1000::/37": "270684", - "2a01:c50f:fc40::/40": "12479", - "2a02:26f7:ee00::/48": "36183", - "2a02:2e02:24d0::/39": "12479", - "2a02:ee80:4074::/46": "3573", - "2605:4c40:209::/36": "30081", - "2620:185:50::/36": "11396", - "2804:14c:bbe9::/43": "28573", - "2a0c:7080::/29": "18779", - "2001:559:816d::/48": "33657", - "2400:8b00:e80::/42": "45727", - "2401:1c00:3080::/48": "131298", - "2600:1012:a000::/43": "6167", - "2a10:a000::/45": "42201", - "2402:800:5b0f::/43": "7552", - "240e:473:2e50::/39": "4134", - "2600:1006:a020::/40": "22394", - "2a00:4802:310::/42": "13124", - "2a02:26f7:c300::/48": "36183", - "240e:97a:2e00::/31": "4134", - "2804:535c::/32": "268579", - "2a07:1180::/29": "203311", - "2406:3000:3c::/41": "4657", - "2800:d00::/32": "263766", - "2a02:26f7:ed81::/46": "20940", - "2a03:db80:4c85::/35": "680", - "2001:559:81cc::/47": "33287", - "240a:a902::/32": "144956", - "2a01:e0a::/37": "12322", - "2001:559:519::/48": "33651", - "2a02:918::/32": "31178", - "2400:1c00:1e::/41": "45143", - "2806:2f0:7002::/42": "17072", - "2a02:2698:5c00::/38": "41754", - "2a0a:1182::/32": "39122", - "2001:559:c2ab::/48": "7725", - "2620:10a:4008::/48": "29792", - "2804:7d7c:140::/32": "271564", - "2a00:7300:43::/32": "47894", - "2404:e6:230::/36": "703", - "2804:111c:5::/32": "52818", - "2804:442c::/32": "267607", - "240a:a12c::/32": "142950", - "2602:fff8::/36": "13866", - "2804:1f2e::/32": "10715", - "2804:2b60::/32": "262587", - "2a10:cc40:800::/40": "20473", - "2001:41e0::/32": "20932", - "2409:8087:8005::/44": "9808", - "2600:14e0:5::/46": "20940", - "2605:2a80::/32": "62489", - "2804:4c04::/32": "267343", - "2a02:26f7:bb06::/47": "20940", - "2a03:900::/32": "20574", - "2001:579:2430::/44": "22773", - "2801:80:2380::/48": "267322", - "2001:7c0::/34": "553", - "240a:a29c::/32": "143318", - "2804:14c:fc8b::/41": "28573", - "2a00:1288:1ac::/32": "10310", - "2404:de80:800::/39": "137443", - "2801:80:3550::/48": "268889", - "2804:14d:4283::/41": "28573", - "2400:6280:13c::/48": "132280", - "2402:e380:31e::/48": "142030", - "2401:d800:5b80::/42": "7552", - "2604:d600:c0c::/43": "32098", - "2605:a400::/45": "33363", - "2800:680::/43": "3816", - "2a03:53e0::/32": "49223", - "2a0e:8f02:f002::/48": "213124", - "2a0e:97c5:424::/44": "20473", - "2403:c00:11::/48": "17488", - "2409:8069:2a06::/47": "9808", - "2806:2f0:3241::/42": "17072", - "2a0e:97c0:210::/44": "212271", - "2400:4d40:26a::/39": "134204", - "2401:d800:d4b0::/41": "7552", - "240a:a850::/32": "144778", - "2804:34fc::/32": "265493", - "2001:579:6f06::/35": "22773", - "2407:3e00:4000::/48": "9255", - "240e:44d:5580::/41": "4134", - "2607:c400::/33": "5555", - "2800:490:e000::/39": "27951", - "2001:559:847a::/48": "33657", - "2402:800:3c55::/42": "7552", - "240e:44d:3180::/41": "4134", - "240e:473:3950::/40": "4134", - "2804:6edc::/39": "270623", - "2a09:7d40::/44": "209382", - "2606:6c00:c000::/48": "32787", - "2a01:b740:a16::/47": "714", - "2a02:26f7:d509::/42": "20940", - "2607:4000:500::/40": "64247", - "2620:132:7090::/41": "19537", - "2a01:cd01:1f2c::/43": "28708", - "2804:358:200::/32": "53246", - "2001:559:78c::/48": "33287", - "2001:559:838a::/48": "7015", - "2001:579:f06c::/40": "22773", - "2001:67c:25ac::/48": "24597", - "240e:fb:c000::/36": "140317", - "240e:473:3f50::/40": "4134", - "240e:974:e200::/47": "38283", - "2804:6928::/32": "270252", - "2c0f:f5c0:402::/48": "64999", - "2a02:26f7:e180::/48": "36183", - "2a04:7444::/30": "21413", - "2a0d:3280::/29": "34907", - "2600:1488:6341::/40": "20940", - "2804:1210::/32": "263454", - "2804:3710:a000::/33": "266387", - "2a00:83e0::/32": "199496", - "2a0c:7284::/30": "204786", - "2001:df7:9300::/47": "134392", - "2001:1960:12::/48": "26127", - "2a02:2e02:1950::/42": "12479", - "2001:559:80f6::/48": "7015", - "2001:67c:2ba4::/48": "212864", - "2403:6e40:160::/44": "9830", - "240a:ac09::/32": "145731", - "240e:438:4820::/43": "140647", - "2600:8807:7c6::/36": "22773", - "2a02:26f7:c9cc::/48": "36183", - "2001:67c:1b8c::/48": "197087", - "2409:8028:2c00::/38": "9808", - "240e:44d:4500::/41": "140345", - "2804:2eb0:fc41::/46": "265359", - "2804:555c::/32": "264105", - "2a03:7c0::/32": "57704", - "2a07:9700::/29": "202741", - "2001:678:2d0::/48": "25482", - "2602:ffb7:d00::/40": "62874", - "2620:185::/41": "11396", - "2804:bc8::/32": "52829", - "2a00:1638::/32": "49322", - "2a03:6947:1900::/32": "61266", - "2400:c700:283::/39": "55644", - "2604:d680:5::/48": "29757", - "2806:2f0:3021::/41": "17072", - "2001:559:3c5::/46": "7922", - "2001:559:540::/48": "33491", - "2408:8459:4450::/38": "17816", - "2408:8957:4700::/40": "17816", - "2606:3000:e000::/35": "394896", - "2804:6ac4:2000::/36": "16921", - "2a07:7580::/29": "44558", - "2001:508::/44": "32020", - "2001:aa0::/32": "5669", - "2001:4490:dc4c::/46": "9829", - "240e:e6:1000::/32": "4812", - "2607:f4e8:15::/40": "22822", - "2607:fed0::/32": "40076", - "2620:e9::/48": "11286", - "2804:4300::/32": "267542", - "2a04:e800:5015::/46": "57976", - "2402:800:380f::/43": "7552", - "2600:6c3a:842::/37": "20115", - "2602:fef7:4::/44": "396192", - "2606:2800:4ad8::/46": "15133", - "2001:678:b78::/48": "8794", - "2001:f58::/32": "18126", - "2407:5f00::/32": "132890", - "2408:8256:316c::/48": "17816", - "240e:3bf:1200::/39": "4134", - "2001:559:8100::/47": "33659", - "2603:90b8::/32": "10796", - "2606:2800:400e::/47": "15133", - "2a0c:cb00::/32": "212313", - "2405:1500:81::/43": "58717", - "2804:5640::/32": "267986", - "2804:7be0::/32": "266261", - "2a02:26f7:ed04::/48": "36183", - "2001:559:c072::/48": "33489", - "2001:579:e360::/40": "22773", - "240e:3b3:7600::/39": "140313", - "2600:1f01:48a0::/47": "16509", - "2607:fdb8::/47": "30496", - "2a02:247a::/32": "51862", - "2a09:7c0::/29": "209624", - "2402:800:be10::/42": "7552", - "240a:a393::/32": "143565", - "2605:5080:5031::/32": "3367", - "2a02:26f7:b998::/48": "36183", - "2a02:26f7:cf49::/42": "20940", - "240a:a6b3::/32": "144365", - "2604:b140::/32": "40918", - "2620:171:cd::/46": "42", - "2804:1f36::/32": "268005", - "2001:ac8:6::/44": "9009", - "2408:8456:e040::/38": "17816", - "2800:160:1b22::/45": "14259", - "2a02:b48:4100::/34": "3491", - "2001:559:81::/48": "33287", - "2600:140f:201::/39": "20940", - "2605:a401:8627::/41": "33363", - "2804:4f34:8050::/33": "268311", - "2001:559:360::/48": "33491", - "2001:67c:179c::/48": "64465", - "2001:49a0:fc00::/38": "10310", - "2607:fda8:8001::/46": "6128", - "2804:62e0::/32": "269325", - "2001:559:c198::/48": "7922", - "2405:5300::/32": "24255", - "240a:a002::/32": "142652", - "2804:380::/32": "262890", - "2804:5b50::/32": "268834", - "2804:6c34::/32": "270452", - "2a00:1678:b00b::/48": "49453", - "2001:13c7:7000::/48": "28498", - "2001:16f8::/43": "25525", - "2405:86c0::/32": "45905", - "2804:82a8::/32": "272532", - "2a02:26f7:f405::/46": "20940", - "2001:559:c9::/46": "33491", - "240e:44d:4000::/41": "140345", - "2602:fe77::/36": "53732", - "2804:3390::/34": "265404", - "2804:6150::/32": "269227", - "2a0b:f400::/32": "15698", - "2001:503:7bbf::/48": "7342", - "2001:19f0:a800::/35": "20473", - "2001:559:8344::/48": "7922", - "2804:a00:8a1::/32": "262838", - "2a06:c000::/31": "45027", - "2401:2200:10::/48": "55420", - "2a02:680::/36": "24995", - "2a06:e881:620f::/48": "13830", - "2804:7208::/32": "270828", - "2a01:c50f:3400::/38": "12479", - "2602:fed2:7308::/48": "23470", - "2001:400:b30::/48": "44", - "2405:9800:50::/44": "131445", - "2600:140b:e800::/48": "24319", - "2804:10b4::/47": "263645", - "2a0e:aa07:e01b::/48": "211843", - "2001:fd8:b190::/44": "4775", - "240e:3b8:2c00::/35": "134774", - "2600:1004:9010::/40": "22394", - "2804:55a8::/32": "267948", - "2a04:f580:9250::/48": "4809", - "2602:ff10::/36": "19544", - "2a00:f00::/32": "8359", - "2a04:b500::/32": "197540", - "2001:418:1401:71::/64": "20940", - "2402:b400:41f0::/37": "45960", - "2a00:5500::/32": "3238", - "2a10:2f00:16d::/48": "211485", - "2404:63c0:10::/44": "131645", - "2804:4d3c:5d42::/32": "267420", - "2a02:26f7:dd48::/48": "36183", - "2a04:31c0::/29": "60820", - "2c0f:f128::/32": "37629", - "2407:9740::/44": "139648", - "2602:fd9e::/36": "397666", - "2804:8120::/32": "272434", - "2001:500:103::/48": "55002", - "2600:140b:ac01::/35": "20940", - "2607:fd60:c938::/48": "6188", - "2620:103:4000::/44": "13953", - "2803:6660::/32": "267895", - "2a06:bdc7:1a::/32": "62240", - "2400:cb00:a625::/46": "13335", - "2603:40ff:4000::/36": "10578", - "2804:4044::/35": "265948", - "2001:4490:4eac::/46": "9829", - "2401:d800:57c0::/42": "7552", - "2408:8459:8850::/38": "17816", - "2602:fdaf::/36": "396176", - "2a0c:8840:1000::/36": "211453", - "2405:8a00:21b6::/44": "55824", - "240e:67d:8800::/38": "140330", - "2804:4118::/32": "266003", - "2001:df5:9780::/48": "55736", - "2a0c:9a40:82d0::/48": "211738", - "2001:559:16d::/43": "7922", - "2400:c300::/47": "23881", - "2402:800:bbf0::/37": "7552", - "2408:8a21:4000::/35": "4837", - "2a01:5b0:20::/45": "8561", - "2a03:5120:104::/48": "2386", - "2a03:e581::/48": "201057", - "2405:a540:1004::/32": "38156", - "2604:d600:33::/41": "32098", - "2a00:e4c0::/32": "42908", - "2a02:26f7:cb00::/48": "36183", - "2a07:59c6:eed4::/46": "56382", - "2001:1938:0:2003::/61": "34305", - "2401:4900:4bb0::/41": "45609", - "2401:d800:a20::/41": "7552", - "2606:2800:4080::/48": "15133", - "2800:160:1a9d::/42": "14259", - "2804:5660::/32": "267994", - "2804:6454::/32": "269421", - "240a:a115::/32": "142927", - "2607:fdf0:5ecc::/43": "8008", - "240a:a98d::/32": "145095", - "240e:61:4000::/35": "136198", - "2804:1b2:f104::/36": "18881", - "2a07:6a82::/31": "203568", - "2001:67c:6bc::/48": "201723", - "2408:8459:7410::/42": "17623", - "240e:1f::/48": "134774", - "2607:f7c0:c100::/34": "36444", - "2a00:86c0:2092::/45": "2906", - "2001:4978:1000::/47": "19255", - "2402:8100:2640::/39": "55644", - "2804:e60:facf::/37": "61888", - "2a00:4e60::/32": "13306", - "2001:dc7:fff2::/44": "24151", - "2404:3d00:412c::/47": "21433", - "2604:55c0:100::/48": "4138", - "2610:b0:410a::/43": "3573", - "2804:9d4:5106::/47": "262996", - "2804:341c::/32": "265436", - "2a00:1068::/32": "47998", - "240e:3bf:1800::/34": "4134", - "2600:1f01:4814::/47": "16509", - "2605:b900:2::/32": "36218", - "2607:f368:1004::/36": "32982", - "2607:f640:e::/32": "32354", - "2a0d:7c0::/29": "29262", - "2600:1017:b430::/40": "6167", - "2406:840:ece0::/44": "213215", - "2610:e0:a040::/44": "3390", - "2a0f:fb80::/29": "60262", - "2a10:fa80:10::/48": "57050", - "2a0e:1c80:2::/48": "50304", - "2409:8907:7820::/39": "24547", - "240e:d:1000::/32": "4134", - "240e:3ba:1400::/38": "134773", - "2600:100c:d2d0::/34": "22394", - "2620:40:4000::/48": "16931", - "2a02:26f7:eb80::/48": "36183", - "2a03:2880:ff0d::/31": "32934", - "2001:559:5e8::/48": "22909", - "2401:ff40::/33": "137080", - "2602:feda:ce0::/48": "141237", - "2602:fedd:1::/48": "397023", - "2800:120::/45": "27843", - "2804:7df0::/32": "271592", - "2a03:7600::/32": "34066", - "240a:a34e::/32": "143496", - "240e:438:1e20::/43": "140647", - "2606:1a40:200e::/47": "42473", - "2a01:8000:1ffd::/48": "60672", - "2a02:26f7:b901::/46": "20940", - "2620:d:e000::/48": "395661", - "2a00:1e1f:ff00::/40": "212642", - "2a02:26f7:db8d::/42": "20940", - "2001:678:62c::/48": "51428", - "2402:7d80:9999::/48": "63583", - "2a02:26f7:ea09::/42": "20940", - "2a0e:b702::/32": "47449", - "2803:7a00:810d::/33": "52468", - "2a02:2e02:9b30::/40": "12479", - "2a07:6cc0:10::/46": "61098", - "2a0f:7980::/44": "141694", - "2001:559:793::/48": "33659", - "2001:4b20:100:580::/60": "65505", - "2a01:830::/32": "3329", - "2a02:26f7:3e::/48": "36183", - "2a03:8d60::/48": "203618", - "2001:4f8:11::/48": "16509", - "2001:559:215::/48": "33659", - "2001:43f8:9f0::/48": "327705", - "240a:a327::/32": "143457", - "240a:a5ab::/32": "144101", - "2600:1900:4050::/40": "15169", - "2a02:21c8::/32": "35625", - "2a0d:5642:119::/48": "35487", - "2001:67c:f8::/48": "49125", - "2403:b4c0:9000::/36": "138398", - "2604:8200:98::/48": "23089", - "2610:b0:40bf::/48": "3573", - "2620:11d:9002::/56": "14805", - "2801:80:e80::/48": "264581", - "2a02:26f0:b100::/48": "12956", - "2401:d800:f60::/40": "7552", - "240e:109:802a::/48": "63835", - "2600:1010:9e10::/39": "22394", - "2804:6970::/32": "270270", - "2a00:7300::/41": "47894", - "2001:678:f40::/48": "52192", - "2405:9800:c981::/35": "45430", - "240e:438:6c20::/43": "140647", - "2800:150::/48": "22047", - "2404:5780::/47": "9558", - "2408:8756:2cff::/48": "135061", - "2604:4440::/32": "396139", - "2620:106:e00a::/48": "40428", - "2804:4ec:1500::/32": "28668", - "2a02:bf0:2000::/33": "25106", - "2a02:26f7:e800::/48": "36183", - "2a07:cc80::/29": "42908", - "2001:550:b02::/37": "174", - "2402:e280:210f::/43": "134674", - "240a:a450::/32": "143754", - "240a:a51a::/32": "143956", - "2604:d600:1654::/44": "32098", - "2804:7a60::/39": "271367", - "2a02:970:1029::/41": "44002", - "2407:c280:ffff::/48": "134409", - "2600:1005:b070::/40": "22394", - "2a01:4280::/47": "31391", - "2408:8459:7050::/38": "17816", - "2408:8956:6300::/40": "17816", - "2408:840c:bc00::/40": "17621", - "2605:e680::/32": "30500", - "2a02:e186::/34": "33517", - "2001:559:8428::/48": "33652", - "2804:410c::/32": "266000", - "2a10:240::/29": "62240", - "2a00:ad00:2020::/30": "41897", - "2001:678:510::/48": "42060", - "2404:e900:4000::/32": "46062", - "240a:a97b::/32": "145077", - "240a:aa4f::/32": "145289", - "240e:44d:7c00::/41": "140345", - "2604:ac0::/32": "40090", - "2800:bf0:8240::/44": "52257", - "2001:428:1003::/48": "2560", - "240e:473:1800::/41": "140485", - "2c0f:f368::/32": "327750", - "2620:10a:80f1::/48": "27299", - "2620:149:74::/40": "714", - "2a02:26f7:db48::/48": "36183", - "2804:6bfc::/32": "270438", - "2001:559:819d::/48": "7922", - "2001:579:62bc::/39": "22773", - "2001:678:3c::/48": "197997", - "2001:df0:71::/48": "45665", - "2001:12a0:5::/33": "28292", - "2803:c3c0::/32": "27884", - "2804:14c:f400::/42": "28573", - "2a00:9ce0::/32": "44891", - "2c0f:3800::/32": "37616", - "2804:2dcc::/48": "265304", - "2a02:6900:8810::/48": "7160", - "2001:559:84b3::/48": "33657", - "2001:4488:fb62::/37": "7713", - "2804:fa0::/32": "263596", - "2a0f:2a40::/29": "398559", - "2001:559:a5::/46": "33287", - "2001:44b8:30ec::/48": "4739", - "2409:8c28:902::/37": "56041", - "2804:1a24::/32": "61839", - "2001:ac0:30fd::/48": "12541", - "2407:c280:30ff::/48": "24322", - "2806:2f0:2024::/43": "22884", - "2806:370:8000::/44": "28403", - "2001:67c:1bc4::/48": "5588", - "2409:8b7d::/30": "9808", - "2600:1417:57::/44": "20940", - "2a02:26f7:c1c8::/48": "36183", - "2401:2880::/32": "17452", - "240e:63:d000::/34": "140314", - "2603:c0ec::/40": "54253", - "2800:484:d600::/39": "10620", - "2804:14d:5c45::/43": "28573", - "2a02:6e8::/32": "8399", - "2c0f:f1e0::/47": "37235", - "2001:559:8240::/48": "33652", - "2001:559:828e::/48": "33491", - "2001:df0:311::/48": "9255", - "2600:8802:8000::/29": "22773", - "2001:559:85b1::/48": "7015", - "2001:c38:1000::/34": "9335", - "2001:1248:99ab::/41": "11172", - "2a04:e7c0::/29": "197879", - "2409:8924:f00::/35": "56046", - "240e:473:920::/41": "140486", - "2803:efc0:1::/32": "266664", - "2804:34:2003::/32": "28306", - "2804:824c:2000::/32": "272511", - "2a05:1c0::/29": "201508", - "2804:34dc::/32": "265485", - "2001:678:8a0::/48": "6453", - "2408:8956:3300::/40": "17816", - "2605:2700:9001::/33": "47066", - "2605:f440:53::/48": "57439", - "2620:9b:8000::/40": "36152", - "2804:14c:bfb0::/41": "28573", - "2804:2b04::/32": "265131", - "2804:4c14:ea01::/39": "267348", - "2001:559:388::/48": "7922", - "2804:5a48::/32": "268762", - "2a03:8460:1::/48": "201222", - "2001:559:8673::/45": "7015", - "2001:67c:1164::/48": "24940", - "2001:67c:25e4::/48": "198239", - "2001:42d0:af00::/40": "33764", - "2408:8956:d8c0::/38": "17816", - "2600:1406:1a00::/48": "35994", - "2a01:9700:1750::/47": "8376", - "2c0f:f9a8::/32": "37680", - "2806:230:4036::/48": "265594", - "2001:678:c50::/48": "207358", - "2001:67c:12b0::/48": "29468", - "2001:12d0:c001::/34": "28571", - "2401:d800:b70::/40": "7552", - "2408:8459:7450::/38": "17816", - "2600:1417:5001::/34": "20940", - "2605:e80::/32": "11269", - "2001:559:8265::/48": "7922", - "2001:48c8:18::/32": "29791", - "2a02:c8c0::/29": "29385", - "2a07:2911::/32": "21449", - "2a02:26f0:fa::/47": "20940", - "2a10:9640::/29": "59437", - "2406:9740::/32": "131642", - "240e:3b6:1400::/38": "134773", - "2001:c20:c812::/47": "3758", - "2409:8d28::/29": "56041", - "2804:1004::/32": "263614", - "2a0f:c085::/30": "48108", - "2001:40a8::/32": "12400", - "2a02:6a80:530e::/48": "197997", - "240e:109:8027::/48": "133774", - "240e:186:c000::/34": "4812", - "2a0e:b107:6d0::/44": "134478", - "2001:559:4ba::/48": "33652", - "2001:559:85ba::/48": "33659", - "2001:67c:1038::/48": "59480", - "240a:a3c5::/32": "143615", - "2600:14c0:c::/26": "20940", - "2804:7088::/32": "270732", - "2a02:26f0:1601::/39": "20940", - "2001:67c:2f24::/48": "25365", - "2405:6e00:f810::/48": "133612", - "240a:addf::/32": "146201", - "2a06:a600::/30": "46723", - "2001:c20:c837::/48": "9255", - "2406:9f40::/32": "133480", - "240e:438:a240::/37": "4134", - "2a0b:7086:fff0::/44": "50867", - "2c0f:ebf8::/32": "328436", - "2001:559:c3d4::/48": "7015", - "2001:df1:f600::/48": "27385", - "2402:ecc0::/32": "58507", - "2606:2800:501f::/42": "15133", - "2620:107:6000:1126::/57": "6462", - "2a04:8d80::/29": "201508", - "2a0c:5cc0::/29": "197648", - "2001:559:c21f::/48": "33651", - "2408:8459:1e30::/41": "17622", - "240a:af25::/32": "146527", - "2a02:26f7:e10c::/48": "36183", - "2a03:6947:d00::/35": "61266", - "2a03:90c0:350::/40": "199524", - "2401:5a00:b000::/48": "10032", - "2408:8a26:c000::/35": "4837", - "2607:fdf0:5e42::/44": "8008", - "2804:24ec::/32": "264248", - "2a03:14e0::/32": "6908", - "2a0d:7540::/29": "3214", - "2001:559:3d3::/45": "33652", - "2001:4210::/34": "25818", - "2602:fd43::/36": "63267", - "2607:f180:4200::/35": "35908", - "2801:1fc::/48": "27951", - "2804:67bc::/32": "269647", - "2001:12e8::/34": "16397", - "2a00:1728:30::/48": "42446", - "2a02:cd80::/29": "49100", - "2a0e:f400::/29": "42897", - "2001:559:329::/48": "20214", - "2001:579:7200::/36": "22773", - "2607:f170:180::/32": "6364", - "2801:104:40::/44": "27828", - "2a00:4840::/29": "198967", - "2a02:26f7:b6c5::/46": "20940", - "2a10:7d00::/29": "398559", - "2001:559:32e::/48": "20214", - "240a:a7df::/32": "144665", - "2600:e009::/32": "22995", - "2602:809:f000::/47": "23026", - "2604:ca00:116::/42": "36492", - "2a0c:75c0:4::/29": "44486", - "2001:559:832f::/43": "33659", - "2001:12e0:800::/45": "10429", - "2408:8256:378a::/48": "17623", - "240e:108:93::/48": "134768", - "2800:690::/32": "3132", - "2804:2724::/39": "263879", - "2804:3b8c::/32": "266156", - "2408:8459:6430::/41": "17622", - "2806:230:201b::/48": "11888", - "2a02:26f7:e688::/48": "36183", - "2a0a:4a40:2270::/48": "200280", - "2a0a:acc0::/48": "6369", - "2c0f:fe68::/32": "36868", - "2604:2680:10::/47": "2386", - "2804:706c::/32": "270726", - "2a07:1980:18::/48": "48851", - "2402:8100:24c0::/42": "45271", - "2a00:ee0::/29": "5603", - "2a02:5e0::/32": "3330", - "2001:44b8:39::/48": "4739", - "240a:a142::/32": "142972", - "2a0c:1d01::/30": "39614", - "240a:a009::/32": "142659", - "2620:0:2b0::/48": "21617", - "2804:6c6c::/32": "270467", - "2600:370f:7561::/46": "32261", - "2405:8a00:8034::/34": "55824", - "2605:e000::/37": "20001", - "2620:9c:c000::/48": "393717", - "2800:bf0:8040::/46": "52257", - "2804:2fa0::/32": "264903", - "2a01:a180::/32": "47212", - "2408:840c:ad00::/40": "17621", - "2600:1003:b8e0::/33": "22394", - "2605:640f:85ab::/48": "210935", - "2001:559:85f1::/48": "7016", - "2408:80ea:77a0::/36": "17816", - "2610:f0:21f::/39": "22925", - "2a01:8840:ee::/43": "12041", - "2409:8907:7a20::/39": "24547", - "2801:18e::/48": "271845", - "2804:7184::/32": "270794", - "2c0f:f510::/32": "327941", - "2001:559:821b::/48": "33660", - "2605:a401:800e::/42": "33363", - "2a00:4280::/32": "15401", - "2a02:26f7:cd44::/48": "36183", - "2a09:aa80::/32": "50673", - "2400:a980:4500::/36": "133111", - "2401:7200:a000::/46": "55328", - "2600:1406:9001::/38": "20940", - "2606:2800:4ae4::/46": "15133", - "2a02:6a80::/33": "3245", - "240e:d9:d801::/29": "4134", - "2a02:ad8:14::/42": "12389", - "2a02:26f7:e6c4::/48": "36183", - "2a02:7100::/32": "12942", - "2406:57c0:136::/44": "134672", - "240a:a3dd::/32": "143639", - "240a:a501::/32": "143931", - "2803:5d20::/32": "267757", - "2804:2b44:3a::/40": "265144", - "2406:9b80::/32": "132585", - "2409:8904:cda0::/38": "24547", - "240e:44d:4b80::/41": "4134", - "2804:dd0::/39": "28639", - "2804:2650::/32": "264340", - "2a01:618:8300::/33": "8683", - "2607:f9d0:700::/36": "11979", - "2a01:108::/32": "31127", - "2001:dce:8001::/38": "23869", - "240a:a31e::/32": "143448", - "240a:af73::/32": "146605", - "240e:67d:1000::/37": "140330", - "2a01:c50e:3f00::/33": "12479", - "2a03:b900::/32": "196695", - "2a05:d050:e040::/44": "16509", - "2001:680::/32": "3257", - "2405:58c0:5e00::/40": "133101", - "240e:108:9b::/35": "4134", - "2a02:26f7:f745::/46": "20940", - "2a05:1083:fe00::/41": "209870", - "2001:559:c248::/48": "7922", - "2001:1610::/32": "9008", - "2406:7900:9000::/47": "45328", - "2408:8256:3d6b::/48": "17816", - "2606:f900::/35": "812", - "2804:2960::/32": "264011", - "2001:67c:2944::/48": "211781", - "2001:4998:24::/46": "36647", - "2001:bb0::/29": "5466", - "2001:1b30::/29": "20783", - "2404:af00::/32": "58451", - "2600:1405:1801::/34": "20940", - "2606:ae80:1410::/44": "25751", - "2804:69fc::/32": "270304", - "2a0b:1901::/32": "57878", - "240e:438:620::/43": "140647", - "2620:13d:e002::/47": "398123", - "2a0a:5c40::/29": "205976", - "2800:200:e2b1::/41": "12252", - "2a02:26f8::/32": "29551", - "2001:67c:1514::/48": "3257", - "2600:370f:20a1::/46": "32261", - "2804:1b08:facf::/37": "61704", - "2a10:d000::/43": "35506", - "2401:d880::/32": "133880", - "240a:ab62::/32": "145564", - "2a0f:e2c0::/29": "8422", - "2001:4ce0::/32": "25058", - "2804:2c10::/32": "265192", - "2400:4480:1000::/47": "17426", - "240e:679:c600::/34": "4134", - "2604:4300:f09::/45": "33387", - "2a09:bac0:165::/44": "13335", - "2c0f:f4c0:1090::/38": "37611", - "2a0b:f940:2af3::/35": "205373", - "2001:1260:6::/44": "13591", - "2400:bd00:8004::/33": "45267", - "2406:26c0::/32": "134040", - "240a:a0a7::/32": "142817", - "2606:9500:202::/40": "393423", - "2a02:26f7:ba04::/48": "36183", - "2a04:b700:185d::/48": "201403", - "2001:bf6::/32": "29670", - "2401:d800:f420::/41": "7552", - "2408:8256:3b9c::/46": "17623", - "240a:abb0::/32": "145642", - "2600:1406:600::/48": "35994", - "2600:6c38:b05::/44": "20115", - "2a03:49e0::/32": "58260", - "2605:a401:8124::/41": "33363", - "2806:342:fa00::/37": "265591", - "2a09:ba40::/29": "60843", - "2404:6800::/33": "15169", - "2605:a401:82dc::/39": "33363", - "2605:a401:8c1c::/41": "33363", - "2400:1700::/39": "4628", - "240a:a26d::/32": "143271", - "2001:df0:ab00::/48": "4739", - "240a:a93f::/32": "145017", - "2001:dce:5200::/48": "38064", - "2001:12f0:340::/37": "1916", - "2801:80:550::/48": "28215", - "2804:818::/32": "262345", - "2a00:16e0::/32": "3249", - "2400:ac40:c70::/40": "136255", - "2605:efc0::/32": "1970", - "2a09:7440::/32": "31027", - "2001:ad8::/29": "8823", - "2a02:26f7:50::/48": "36183", - "2a05:3343:a::/45": "134433", - "2a0e:b107:1350::/44": "212360", - "2001:550:1604::/48": "395730", - "2403:6e40:100::/44": "9830", - "2409:893e::/25": "9808", - "240a:ad25::/32": "146015", - "2604:f980:2500::/44": "19957", - "2800:bf0:3024::/38": "27947", - "2a02:70::/47": "3326", - "2c0f:f6c8::/32": "15964", - "2400:ac40::/36": "136255", - "2400:dd05:1007::/30": "7497", - "2408:8256:3461::/40": "17623", - "240e:473:eeef::/35": "4134", - "2a00:1d36::/36": "9121", - "2400:7400:e023::/45": "23736", - "2a01:8ee0::/32": "50295", - "2a03:ad40:110::/48": "199349", - "2a09:9840::/48": "34775", - "2a0e:b107:d91::/48": "213244", - "2001:559:3c1::/48": "33287", - "2001:df0:b500::/47": "61327", - "2408:8459:8610::/42": "17623", - "240a:ade3::/32": "146205", - "2606:6680:3::/48": "3170", - "2620:118:400e::/48": "127", - "2409:8907:8320::/37": "24547", - "2606:4700:22::/41": "13335", - "2804:e64:667::/32": "262952", - "2804:2940::/32": "264006", - "2400:f940:11::/46": "45766", - "2803:1a00:5013::/32": "262186", - "2803:fbc0::/45": "265762", - "2804:324c::/32": "265068", - "2a02:bf8:1601::/48": "1654", - "2401:ff80:160b::/43": "133954", - "2a09:a0c0::/29": "34515", - "2001:550:702::/36": "174", - "2001:67c:2b34::/48": "8220", - "2804:14d:7e00::/42": "28573", - "2a03:9d40:fe00::/39": "41095", - "2001:559:2c4::/48": "33652", - "2001:678:ac::/48": "49251", - "2001:16a2:401e::/47": "39386", - "2804:111c::/47": "52818", - "2806:1018:cc00::/40": "8151", - "2001:df7:2f00::/48": "138114", - "240a:a1ce::/32": "143112", - "2600:1407:b000::/48": "35994", - "2600:1407:b801::/33": "20940", - "2606:2800:511b::/48": "15133", - "2801:80:850::/48": "263428", - "2a02:26f7:da08::/48": "36183", - "2a02:26f7:f849::/42": "20940", - "2c0f:ef10::/32": "328262", - "2606:2800:4048::/48": "14210", - "2804:1164::/32": "263674", - "2804:2cd0::/32": "265245", - "2a02:26f7:c00c::/48": "36183", - "2a03:2a60:8100::/47": "59871", - "2a04:6f02::/29": "3214", - "2a10:4c40::/29": "212736", - "2001:520:1052::/48": "8103", - "2402:1b40:2000::/33": "7628", - "2804:4bb8::/32": "267326", - "2804:5f3c::/32": "269085", - "2a00:14f0::/32": "29017", - "240a:abe1::/32": "145691", - "2603:90f5:5::/48": "11427", - "2804:14c:9983::/41": "28573", - "2a02:26f7:e515::/46": "20940", - "2c0f:f048::/32": "36924", - "2001:559:87b0::/48": "7015", - "2001:1938:3200::/33": "12989", - "2001:4868:209::/42": "23148", - "240e:44d:1800::/41": "140345", - "2603:4010::/31": "3", - "2407:6380::/32": "131713", - "2804:64a8:cafe::/48": "269438", - "2001:559:8688::/48": "7015", - "2001:579:a09c::/41": "22773", - "2401:ee00:501::/38": "23951", - "2620:13d:2064::/40": "20326", - "2804:4f8:cac9::/37": "28263", - "2804:ad8:4380::/32": "262494", - "240a:aca7::/32": "145889", - "2607:f740:e619::/46": "63911", - "2607:fcd0:fa80:3505::/54": "8100", - "2a00:d0c0:201::/32": "58010", - "2001:678:198::/48": "61180", - "2602:feda:2a0::/45": "204185", - "2620:12d:e004::/46": "397635", - "2001:67c:2b68::/48": "204444", - "2409:8704:9b00::/33": "24547", - "240a:a8f8::/32": "144946", - "2804:5818:1500::/32": "268106", - "2a06:c240::/42": "49222", - "2402:800:33d3::/44": "7552", - "240a:a092::/32": "142796", - "2600:6000:fb41::/48": "11351", - "2605:a200::/32": "33576", - "2620:ed:c000::/48": "14209", - "2800:160:160a::/47": "14259", - "2602:fed2:7311::/48": "53356", - "2a02:f58::/35": "49409", - "2001:559:303::/48": "33491", - "2001:1520::/46": "8972", - "240e:fd:e000::/42": "140313", - "2a02:26f7:e184::/48": "36183", - "2001:559:fe::/47": "7725", - "240a:a24f::/32": "143241", - "2803:9660::/32": "267900", - "2001:559:83b5::/48": "33659", - "2407:2ec0::/48": "135967", - "2407:3000:6b::/45": "17707", - "2803:f080:8800::/41": "64120", - "2a00:c3c0::/32": "43928", - "2a04:5d00:70::/48": "202590", - "2001:470:bc::/48": "6939", - "2001:57a:f301::/46": "62957", - "2803:e880:9001::/34": "52468", - "2a02:920::/32": "12597", - "2a0f:2e40::/29": "60262", - "2001:ee0:a640::/35": "45899", - "240a:abb7::/32": "145649", - "240e:44d:6e00::/41": "140345", - "2602:802:b0ca::/48": "397795", - "2610:20:8420::/47": "3477", - "2804:2d94::/32": "265290", - "2a02:ac80:601::/39": "25145", - "2001:559:8206::/48": "7016", - "2001:559:c2b5::/48": "7015", - "2001:15b0::/32": "21221", - "2409:8a04:c300::/34": "24547", - "240a:a03f::/32": "142713", - "240a:a8e5::/32": "144927", - "2803:9800:b997::/38": "11664", - "2a03:6f00:9::/48": "9123", - "2a0e:aa01::/35": "206499", - "2001:df3:ac00::/48": "63972", - "2401:8800:200::/40": "17439", - "240e:379:aa00::/39": "140330", - "2800:68:2a::/47": "61468", - "2804:1810:f400::/36": "263262", - "2804:7ce4::/32": "271525", - "2a02:2720::/32": "6663", - "2a0f:8443::/32": "29182", - "2001:559:c121::/48": "33659", - "2404:138:4011::/48": "134227", - "2409:8924:300::/37": "56046", - "2606:5000:4400::/36": "3908", - "2804:7764::/32": "271175", - "240e:30e:5600::/31": "4134", - "2605:2800:8300::/48": "14373", - "2a02:26f0:dc00::/48": "34164", - "2001:559:c097::/48": "33651", - "2001:559:c27e::/48": "7016", - "240e:983:1e02::/48": "134763", - "2602:fdfc::/36": "36556", - "2804:dc8::/32": "28636", - "2a05:dfc7:5::/48": "204136", - "2804:62c:2001::/45": "262569", - "2001:559:8755::/46": "7922", - "2404:ba00:e::/48": "17665", - "2804:4f8:4f01::/34": "28263", - "2c0f:fbd8::/34": "37542", - "2401:ff80:1689::/46": "133954", - "2803:8180::/47": "263237", - "2a00:d58::/32": "12466", - "2a09:5740::/29": "206793", - "2a0f:7840::/29": "6764", - "2804:1d00::/32": "61688", - "2001:978:230b::/37": "174", - "2402:d000:8105::/44": "9329", - "2403:0:607::/48": "38191", - "2408:8256:398c::/48": "17623", - "240e:473:8b50::/40": "4134", - "2607:f358:26::/32": "18779", - "2803:e880:8101::/45": "52468", - "2804:94::/32": "53081", - "2804:2c58:1210::/39": "265211", - "2a0e:b107:116e::/47": "58015", - "2606:cd80:1::/48": "29802", - "2804:47a0:2000::/32": "267066", - "2804:5950::/32": "268182", - "2a01:9540::/32": "59597", - "2a02:358::/32": "12822", - "2a02:26f7:f945::/46": "20940", - "2a02:2b60::/47": "42947", - "2001:df1:6c00::/48": "138685", - "2400:cb00:a500::/46": "13335", - "240e:473:7f20::/41": "140486", - "2605:3380:4600::/39": "12025", - "2804:1a90:9400::/33": "61868", - "2a0c:1600::/32": "50537", - "2001:559:c22d::/48": "33659", - "2001:67c:1b10::/48": "41681", - "2001:67c:22c0::/48": "3246", - "2403:2500:9000::/41": "36236", - "2604:880:6f::/48": "29802", - "2a02:ee80:4165::/44": "3573", - "2001:559:c3::/44": "7922", - "2001:559:c1ac::/48": "20214", - "2001:fc0::/32": "17547", - "2001:4b22:10:1::/47": "34288", - "2600:1488:c001::/41": "20940", - "2600:5c01:34b7::/44": "11351", - "2a10:56c0::/29": "212731", - "2001:4490:ffc::/46": "9829", - "2409:8914:8400::/39": "56044", - "2607:feb8::/32": "15083", - "2a05:a000::/46": "44322", - "2a0b:c200::/29": "24953", - "2408:8459:f010::/42": "17623", - "2408:8957:c100::/40": "17816", - "2804:4c60::/32": "267367", - "2a0e:8ac0::/29": "203744", - "2408:8456:b810::/42": "134543", - "240a:afdf::/32": "146713", - "2a02:2e02:d70::/40": "12479", - "2a09:be40:3441::/48": "57401", - "2406:7100::/32": "132692", - "2409:8030:1900::/34": "9808", - "2409:8c04::/35": "24547", - "2a0f:19c0::/29": "60262", - "2a0f:7040::/32": "203622", - "2001:678:1b::/48": "51966", - "2401:4900:a00::/44": "45609", - "2407:7c0::/43": "138128", - "2407:d000::/32": "23674", - "2600:1002:a010::/40": "22394", - "2a10:a40::/32": "207271", - "2403:1480:1000::/36": "36351", - "240a:a635::/32": "144239", - "2600:c04:1022::/48": "10480", - "2600:6c38:179::/40": "20115", - "2a0e:ff40::/29": "207902", - "240e:438:3420::/43": "140647", - "2607:9e80:1281::/39": "397068", - "2401:d800:ba00::/42": "7552", - "2600:6c38:88a::/43": "20115", - "2804:189c::/32": "61943", - "2a02:26f7:e605::/46": "20940", - "2a02:6680:1130::/46": "16116", - "2a0f:5701:3516::/48": "206499", - "2001:559:41::/48": "33668", - "2001:67c:568::/48": "57533", - "2001:df4:d600::/48": "45900", - "2403:3b00::/32": "38083", - "2602:ff36::/38": "395348", - "2a00:4802:a70::/40": "13124", - "2607:f110:e1a0::/38": "21889", - "2001:559:1cd::/48": "20214", - "2800:160:1dd5::/44": "14259", - "2804:14::/32": "28360", - "2a0b:4340:c3::/48": "44421", - "2a0e:b107:b8f::/48": "212995", - "2001:559:874e::/48": "7922", - "2804:57d0::/32": "268088", - "2c0f:f178:8001::/48": "328365", - "2001:fd8:3370::/44": "4775", - "2607:f8f0:660::/48": "36391", - "2400:8000:9::/34": "4800", - "240a:a5ff::/32": "144185", - "2600:4400::/31": "6130", - "2804:2324:f000::/36": "262883", - "2001:628:454::/35": "1853", - "2001:67c:6d8::/48": "62359", - "2620:11c:8000::/36": "19", - "2a01:8280:3331::/32": "44735", - "2604:9e01::/32": "20264", - "2a0b:2a86::/32": "21769", - "2804:54e4::/32": "268676", - "2804:58f0::/32": "268159", - "2a02:26f7:c1::/48": "20940", - "2a02:26f7:d151::/45": "20940", - "2a03:ce40::/47": "28753", - "2001:559:86ca::/48": "33659", - "2001:df0:1600::/48": "134980", - "240a:a1b1::/32": "143083", - "240e:fd:e800::/37": "140316", - "2607:fdf0:5ebb::/41": "8008", - "2a0f:80::/32": "24796", - "2602:805:5000::/48": "29981", - "2604:4d40:2000::/36": "53667", - "2605:8900:3000::/36": "8100", - "2a00:d180::/32": "15457", - "240e:3b4:1800::/34": "4134", - "2605:a401:8c7c::/40": "33363", - "2a0d:1140::/29": "208861", - "2a0e:c80:3::/48": "40676", - "2001:4b80::/29": "206557", - "2409:8a50:900::/38": "56047", - "2620:3f:a000::/48": "18696", - "2a02:26f7:d944::/48": "36183", - "2a0f:2680::/29": "204188", - "2606:9500:5000::/36": "26004", - "2a01:9700:14a0::/45": "8376", - "2a02:ee80:4156::/44": "3573", - "2001:678:14::/47": "42385", - "2402:800:31d3::/44": "7552", - "2001:559:71d::/48": "33659", - "2001:67c:590::/48": "206809", - "2001:df5:7b00::/48": "137368", - "2603:c011:a000::/36": "31898", - "2620:2e:40c0::/46": "394506", - "2a02:26f7:9d::/48": "20940", - "2a01:6560::/32": "62248", - "2001:559:85b0::/48": "33491", - "240e:3:8000::/47": "134761", - "2806:20d:5404::/36": "32098", - "2806:370:91a0::/41": "28403", - "2806:1050::/32": "8151", - "2a00:1ca8:45::/48": "58061", - "2a01:4b40:5800::/32": "21299", - "2a01:b960:230b::/48": "39239", - "2001:559:336::/48": "7922", - "2401:d800:b330::/41": "7552", - "2604:880:273::/45": "29802", - "2604:d600:159a::/42": "32098", - "2804:e94:a4::/43": "262468", - "2a04:ed40::/29": "201864", - "2a06:e881:5509::/46": "209864", - "2620:11d:3000::/44": "7872", - "2a11:2e00::/29": "48755", - "2001:503:ba3e::/48": "396574", - "2001:df0:1a::/48": "38244", - "2401:4900:1c16::/44": "24560", - "2804:6bdc::/32": "270430", - "2001:67c:235c::/48": "54990", - "2404:b0:f::/43": "7568", - "2404:bf40:8842::/34": "139084", - "2600:1417:70::/48": "9498", - "2607:b600:8::/48": "10397", - "2620:13::/48": "11647", - "2620:149:a00::/48": "6185", - "2a05:e186::/31": "200941", - "2001:559:1ae::/48": "7015", - "2602:809:b000::/48": "399242", - "2800:320:8406::/48": "27882", - "2804:5128::/32": "268434", - "2401:4300:a::/48": "45184", - "2408:843f:2600::/25": "4837", - "2a02:5320:700::/40": "12189", - "2a06:f907:4000::/36": "56630", - "2a0c:b641:1a0::/46": "57470", - "2001:678:4a0::/48": "44574", - "240a:a312::/32": "143436", - "2600:1007:b030::/40": "22394", - "2804:2e30:21::/46": "265330", - "2a02:e00:ffe8::/48": "43289", - "2a03:e6c0::/32": "199420", - "2a0a:3740::/29": "1257", - "2803:3b80:13::/41": "263702", - "2a0b:a907::/32": "206468", - "2402:5300:2310::/33": "45903", - "2605:1980:102::/45": "13951", - "2804:13dc:8008::/33": "262428", - "2a02:2668:5500::/34": "16345", - "2a02:26f7:dd80::/48": "36183", - "2001:44b8:6051::/45": "4739", - "2001:4cd8::/32": "8319", - "2600:6c34:30f::/48": "33588", - "2a04:d480:3c00::/38": "25291", - "2604:2b80::/36": "54351", - "2a03:5c40::/32": "42777", - "2001:678:8c::/48": "44358", - "240e:473:a650::/39": "4134", - "2605:6c80:9::/48": "53340", - "2607:f768::/34": "33152", - "2804:61c::/32": "28166", - "2a01:5d00::/32": "51918", - "2a07:22c1:35::/48": "211777", - "2408:8872::/32": "4837", - "240a:a1c5::/32": "143103", - "2800:68:42::/43": "61468", - "2800:150:2::/45": "22047", - "2a00:55a0:11::/48": "19969", - "2001:57a:f204::/44": "22773", - "2402:d000:810d::/43": "9329", - "2610:20:500a::/48": "5744", - "2804:2000:5000::/36": "264459", - "2a02:26f7:d4c4::/48": "36183", - "2a0e:b107:1572::/48": "142158", - "2a0f:5707:abc0::/47": "210887", - "2605:6440:3000::/45": "396356", - "2610:120::/36": "33606", - "2a0f:2c40::/29": "60262", - "2400:5200:403::/45": "55410", - "2402:e380:13f::/40": "139073", - "2600:1407:25::/37": "20940", - "2620:6e:8000::/48": "21680", - "2804:1380::/47": "263536", - "2001:df0:de80::/48": "138762", - "2406:6f40::/47": "141163", - "2804:2050:5a8c::/43": "264485", - "2a00:b7c0::/32": "47548", - "2a02:24b0::/32": "29470", - "2408:8444::/40": "140726", - "2600:6c38:734::/36": "20115", - "2a02:26f0:5401::/39": "20940", - "2001:ec0:889::/41": "23969", - "2001:1b70:4296::/48": "395592", - "240a:a2aa::/32": "143332", - "2600:40fc:1010::/45": "14210", - "2800:bf0:8260::/45": "52257", - "2804:6fdc::/32": "270689", - "2806:2f0:34e1::/39": "17072", - "2a09:b340::/29": "202591", - "2401:d800:ba60::/40": "7552", - "240e:44d:5a00::/41": "140345", - "2602:803:1::/48": "5769", - "2402:e280:300::/48": "134674", - "2600:1407:b001::/36": "20940", - "2607:de00:3b::/38": "23498", - "2620:1ec:a93::/39": "8075", - "2a03:62c0::/32": "43402", - "2a0c:9380::/29": "328543", - "2a0f:9980:6::/48": "40676", - "2806:2f0:1004::/42": "22884", - "2001:559:84fb::/48": "33668", - "2409:8751:f00::/35": "56047", - "2606:3e80::/32": "55199", - "2607:ae00::/32": "11468", - "2620:11b:400e::/47": "47870", - "2803:2e40::/39": "27796", - "2804:145c:501::/44": "263327", - "2a02:26f7:f6e5::/44": "20940", - "2a05:5f80::/29": "48402", - "2001:559:520::/48": "33651", - "2001:a98::/42": "8517", - "2409:8020:61::/43": "56046", - "240a:afc4::/32": "146686", - "2804:2634::/35": "264332", - "2a07:f600:4058::/48": "34567", - "2405:1ac0::/48": "18403", - "2600:1016:a110::/35": "6167", - "2604:d600:925::/46": "32098", - "2a00:e200:100::/48": "39396", - "2a02:26f7:f388::/48": "36183", - "2a0e:fd44:49::/48": "204526", - "2001:550:7709::/32": "174", - "2001:6f8::/36": "4589", - "240f::/23": "2516", - "2a06:5500::/29": "204232", - "2a03:600::/32": "15774", - "2403:f500:4000::/32": "10103", - "2405:4803:edd0::/35": "18403", - "240a:a268::/32": "143266", - "2600:380:f1d1::/48": "20057", - "2606:6c00:8000::/48": "32787", - "2804:35f0:9000::/33": "266316", - "2804:4ba4::/32": "267320", - "2c0f:4200::/35": "328790", - "2620:101:8030::/47": "36856", - "2a02:c140::/29": "8426", - "2a0c:8980::/29": "59562", - "2804:3db8::/32": "266549", - "2001:678:e44::/48": "61232", - "2001:dc2::/32": "2515", - "2406:3400:a00::/32": "10143", - "2600:1008:9100::/44": "6167", - "2600:1406:e801::/38": "20940", - "2803:50c0:1::/48": "264763", - "2804:14c:9b89::/41": "28573", - "2a07:a343:f210::/44": "9009", - "2408:8456:b410::/42": "134543", - "2409:8924:5900::/38": "56046", - "240e:108:1161::/48": "138982", - "240e:3b1:7600::/39": "140313", - "2804:334::/37": "53242", - "2a03:f080::/35": "42685", - "2001:67c:1550::/48": "31451", - "2405:57c0::/48": "137799", - "240a:aa33::/32": "145261", - "2804:23fc::/32": "264196", - "2a01:37:6000::/32": "8875", - "2a02:26f7:d259::/42": "20940", - "2001:559:866a::/48": "7922", - "2001:559:c29e::/48": "33287", - "240a:a4f7::/32": "143921", - "240e:965:1800::/34": "4134", - "2600:1002:f010::/40": "22394", - "2804:4d2c::/32": "267416", - "2a0e:4d80::/29": "208882", - "2001:e30:1800::/40": "2697", - "2401:ff80:1313::/40": "133954", - "2606:2800:157::/44": "15133", - "2607:f5b3::/32": "396362", - "2a02:2b60:2::/39": "42947", - "2001:579:b004::/41": "22773", - "240a:ad8f::/32": "146121", - "2a0b:eb40::/29": "41000", - "2001:67c:20ac::/48": "20612", - "2001:4cee::/32": "34868", - "240a:ad01::/32": "145979", - "2600:1008:20::/33": "22394", - "2804:138b:c160::/45": "22085", - "2a0f:9207:24::/48": "61421", - "2001:630::/32": "786", - "2801:1a:6800::/48": "13489", - "2804:c08::/32": "52664", - "2804:4120::/32": "266005", - "2a02:2339:c000::/34": "204652", - "2a07:f100::/35": "34741", - "240e:6b1:2000::/32": "4134", - "2001:559:c157::/48": "33662", - "2607:f298:abb::/48": "7385", - "2610:128:9100::/37": "11686", - "2804:6c90::/32": "270477", - "2c0f:f208::/32": "328471", - "2001:388:1035::/40": "7575", - "2001:428:4005::/37": "209", - "240a:a769::/32": "144547", - "2a02:26f7:de40::/48": "36183", - "2001:15c0::/29": "21283", - "2408:8779:c008::/30": "4837", - "2a02:2268::/32": "197902", - "2a02:26f7:fa81::/46": "20940", - "2a04:16c0:200::/48": "24971", - "2a0a:ed80::/29": "49127", - "2405:5940:b000::/33": "17473", - "2406:4440::/48": "38008", - "240a:aeb4::/32": "146414", - "240e:44d:3200::/41": "140345", - "2804:6930:3000::/32": "270254", - "2001:559:8581::/46": "33657", - "2402:800:3255::/42": "7552", - "240a:af57::/32": "146577", - "2a01:c9c0:cf::/48": "8891", - "2a02:26f7:bac5::/48": "36183", - "2a06:f906::/36": "56630", - "2600:1008:f110::/31": "22394", - "2804:1130::/32": "263664", - "2a02:28f8:2::/48": "31323", - "2a03:3820::/32": "201838", - "2001:559:b3::/45": "7922", - "2806:370:2150::/44": "28403", - "2a00:f10:ff05::/29": "48635", - "2402:28c0:fff9::/48": "137411", - "2c0f:ec08::/32": "328384", - "2001:4c8:1020::/44": "15290", - "2604:36c0::/32": "393670", - "2804:7e10::/32": "271600", - "2a03:5ee0::/32": "3320", - "2a03:b500:4000::/32": "41135", - "2a05:7cc0::/32": "61053", - "2a09:ee40::/29": "201011", - "2001:559:c209::/48": "33657", - "2804:5388::/32": "268590", - "2a00:85c0:1::/48": "203315", - "2a02:1328:2::/48": "31059", - "2001:559:d::/48": "33662", - "2600:140f:a00::/48": "9498", - "2a00:8dc0:ff00::/45": "201029", - "2404:f900:11::/42": "58482", - "2001:559:c386::/48": "33287", - "2408:84f3:e610::/42": "134543", - "2a09:f140::/29": "211332", - "2001:559:44e::/47": "7922", - "2001:1248:70f5::/46": "11172", - "2406:9dc0::/44": "18250", - "2a09:1240::/48": "44364", - "2001:49f0:d09c::/46": "174", - "2406:e000:381::/44": "23655", - "2803:760:181a::/40": "269816", - "2a00:79e1:806::/42": "36384", - "2a0d:b201:8060::/43": "206026", - "2001:559:68::/48": "7922", - "2a05:6740:4060::/46": "206228", - "2001:559:87d1::/48": "7015", - "240a:aac7::/32": "145409", - "2602:fed2:7020::/46": "39753", - "2804:1280::/32": "263480", - "2402:800:9bc5::/43": "7552", - "240e:925:3000::/36": "132153", - "2600:1006:b040::/42": "6167", - "2a02:26f7:d0c5::/46": "20940", - "2a05:1083:d00::/48": "211168", - "2001:78a::/31": "6893", - "2409:8904:5d40::/42": "24547", - "2620:6d:c000::/48": "31921", - "2804:1224::/32": "263459", - "2a02:26f7:ca09::/46": "20940", - "2402:13c0:1::/48": "7474", - "2408:8256:396c::/48": "17623", - "240a:a414::/32": "143694", - "2804:3dc0:b000::/33": "266551", - "2a02:26f7:33::/48": "20940", - "2a02:7b01::/34": "48328", - "2001:559:c15b::/48": "33491", - "2401:d00::/32": "133466", - "2401:4900:4f10::/44": "45609", - "2a00:c00:f060::/46": "15769", - "2a00:f8c0::/32": "198288", - "2a0c:b642:2000::/44": "34641", - "2001:559:816e::/48": "7016", - "2402:800:72a0::/39": "7552", - "240a:a089::/32": "142787", - "240a:ab56::/32": "145552", - "2804:2c8::/32": "262837", - "2409:8c1e:5b80::/34": "9808", - "2804:1f16::/32": "265190", - "2a0d:fd40::/41": "14630", - "2a0e:f880::/29": "207902", - "2001:df0:93::/48": "45128", - "240a:ac42::/32": "145788", - "240a:afe9::/32": "146723", - "2001:3a8::/32": "9848", - "2401:d800:dc60::/39": "7552", - "2408:8459:ac30::/41": "17622", - "240e:728::/24": "4134", - "2801:174:1::/48": "18747", - "2a02:4fe0::/32": "60129", - "2001:559:773::/45": "7922", - "240a:a6cd::/32": "144391", - "2607:fd48::/39": "13536", - "2806:230:1035::/40": "11888", - "2a00:1440::/32": "43727", - "2a02:970:115a::/42": "44002", - "2a0f:9400:7724::/48": "211027", - "2408:8459:3c30::/44": "17623", - "2605:a404:fd::/39": "33363", - "2607:f560::/32": "7029", - "2607:fff0::/32": "17293", - "2620:11a:a020::/46": "43515", - "2a01:2c0:23dc::/32": "8282", - "2404:6900:2013::/32": "17819", - "2600:1fa0:c0c0::/44": "16509", - "240e:44d:1a00::/41": "140345", - "2606:7d00:c002::/35": "23248", - "2a00:c50::/29": "49289", - "2605:f440:b00c::/36": "54874", - "2620:111:8000::/46": "32771", - "2401:14c0:4b::/40": "136531", - "240a:aaf9::/32": "145459", - "2602:805:8000::/40": "397110", - "2600:1012:f020::/40": "22394", - "2a0e:9cc0:3000::/29": "208905", - "2600:c05:3011::/32": "11855", - "2001:559:5e::/48": "33651", - "240e:980:2000::/40": "4134", - "2402:800:5871::/44": "7552", - "2800:bf0:80c7::/48": "27947", - "2a04:d2c0::/29": "15552", - "2a05:4140:190::/48": "211358", - "2001:559:46::/48": "7922", - "2001:559:829a::/48": "33657", - "2001:67c:227c::/48": "3320", - "2400:d400:6::/48": "45671", - "2607:d500:202::/40": "54527", - "2804:2a0c::/32": "264053", - "2a02:26f7:e385::/46": "20940", - "2400:7fc0:8000::/36": "55960", - "2a00:b9a0::/32": "198872", - "240a:a6d5::/32": "144399", - "2806:1008:cfff:2::/34": "8151", - "2a02:2698:2400::/38": "41786", - "2a03:c580::/32": "39104", - "2a0d:7780::/29": "59441", - "2605:8400::/32": "10242", - "2804:3dbc::/32": "266550", - "2a02:26f0:a901::/38": "20940", - "2001:559:1fd::/48": "7922", - "2401:d800:dfc0::/42": "7552", - "2804:7a08::/32": "271343", - "2a02:26f0:9c01::/39": "20940", - "2a03:3300::/32": "50399", - "2a03:c400::/32": "8445", - "2a0f:c400:a::/47": "60781", - "240e:978:600::/36": "4134", - "2804:5f2c:50c0::/32": "269081", - "2a01:c9c0:c5::/48": "8891", - "2001:559:8284::/48": "22909", - "2402:9900:200::/48": "27435", - "2403:9800:2f::/48": "2570", - "2620:f::/48": "3754", - "2801:80:260::/48": "53012", - "2804:62a0::/32": "269308", - "2a0e:3840:4::/48": "40676", - "2001:559:54e::/48": "7922", - "2402:8100:20c1::/46": "55644", - "240e:44d:980::/41": "4134", - "2600:3000:5200::/31": "13649", - "2804:574:8::/34": "53013", - "2a00:f480::/32": "2848", - "2a02:5bf::/32": "35575", - "2001:4130:141::/34": "24725", - "2402:ef40::/32": "4808", - "2804:2370::/32": "264162", - "2806:230:1005::/48": "11888", - "2a0d:c680::/29": "204467", - "2a03:2be0::/32": "59859", - "2001:648:2330::/48": "9069", - "2001:1a68:3::/48": "24723", - "240a:a749::/32": "144515", - "2605:4f40:8::/45": "33661", - "2800:bf0:8143::/45": "52257", - "2806:20d:1d1b::/45": "32098", - "2a02:ad8:204::/35": "12389", - "2001:550:9803::/38": "174", - "2409:804b:29ff::/48": "9808", - "240e:473:4120::/41": "140486", - "2607:f0d0::/46": "36351", - "2a01:9700:1000::/42": "8376", - "2a02:26f7:f385::/46": "20940", - "2406:4e40:fcf::/32": "140966", - "2606:2e00::/33": "29854", - "2804:66e0:8000::/33": "269588", - "2a02:e982:1f::/42": "19551", - "2001:67c:1768::/48": "209859", - "2001:67c:17ec::/48": "13127", - "2408:840c:ab00::/40": "17621", - "2602:ffe4:c34::/48": "135905", - "2607:f000::/32": "26978", - "2a03:87c0::/29": "31042", - "2a0a:f586::/32": "51837", - "2400:f2:7001::/29": "4766", - "240a:a21b::/32": "143189", - "2604:b180:500::/44": "18601", - "2804:5304::/32": "268557", - "2a00:1288:ef6b::/48": "10310", - "2a02:26f7:e740::/48": "36183", - "2001:559:396::/48": "7725", - "2403:3140::/32": "23910", - "240a:a9ce::/32": "145160", - "2600:1488:6181::/43": "20940", - "2620:149:2::/43": "714", - "2620:149:ae8::/43": "714", - "2a04:2e80:5::/48": "208407", - "2001:559:384::/48": "33652", - "240a:a8c0::/32": "144890", - "2a02:26f7:e484::/48": "36183", - "2001:1a11:ba::/47": "42298", - "2402:800:7470::/40": "7552", - "2804:e30:dc00::/38": "11338", - "2804:2484:8190::/33": "28258", - "2a07:1980:16::/48": "25773", - "2001:559:c0b0::/45": "7922", - "2a05:3580:fa00::/29": "35807", - "2001:559:86dc::/47": "7922", - "240a:a095::/32": "142799", - "240a:abcb::/32": "145669", - "2605:2800:200::/35": "6922", - "2401:d800:5ec0::/42": "7552", - "2605:b100:100::/41": "577", - "2803:c010:e6::/48": "271799", - "2804:7f60::/32": "270680", - "2a02:2698:3824::/38": "59713", - "2001:559:5fc::/48": "7922", - "240a:a3a5::/32": "143583", - "2600:1406:b001::/37": "20940", - "2607:f038:ffff::/48": "21527", - "2804:b4:c0c0::/34": "28294", - "2a00:d2c0:5::/32": "12975", - "2a01:1101:5::/48": "29535", - "2a0e:b102:12b::/45": "212895", - "2402:7500:4ce::/42": "24158", - "2606:b500::/32": "19751", - "2620:1f:8000::/48": "10908", - "2806:2a0:e::/43": "28548", - "2a01:a860::/32": "202212", - "2c0f:eb00:500::/38": "61266", - "2401:ff80:1c01::/46": "133954", - "2600:1410:c001::/31": "20940", - "2604:d600:1404::/46": "32098", - "2800:bf0:8060::/45": "52257", - "2804:7278::/32": "270854", - "240e:37c:1a00::/34": "140330", - "2600:140b:f401::/36": "20940", - "2804:7620::/32": "271091", - "2a02:f600::/29": "199139", - "2a03:afe2::/32": "51392", - "2001:559:57::/48": "7016", - "2607:f3c8:8000::/33": "33724", - "2a0e:6b40::/48": "207580", - "2001:4528:9580::/33": "18101", - "2401:ff80:1c8f::/43": "133954", - "2607:f5b6::/32": "393886", - "2a02:7a01::/32": "197895", - "2a03:5640:f560::/48": "16509", - "2001:559:819c::/48": "33652", - "240e:3bd::/35": "134773", - "2806:230:1000::/48": "265594", - "2a04:bc40:2dc3::/48": "209813", - "2c0f:f7d0::/32": "15964", - "2401:e900:1000::/48": "23991", - "2402:3a80:830::/38": "38266", - "2a01:9700:1050::/46": "8376", - "2a02:26f7:c808::/48": "36183", - "2a0e:97c0:4ff::/48": "210956", - "2402:e280:3da1::/45": "134674", - "240a:aab0::/32": "145386", - "240e:473:1e00::/41": "140485", - "2a01:6780:4::/48": "12676", - "2a02:aa0::/29": "44034", - "2a03:8000::/32": "60830", - "2a06:4d00::/29": "41332", - "2a0e:b107:1168::/46": "58015", - "2001:df2:e100::/48": "136852", - "2001:1a11:79::/46": "42298", - "2401:4900:1c0e::/47": "24560", - "2403:1000:5300::/40": "38819", - "240a:aed7::/32": "146449", - "2600:380:9f80::/34": "20057", - "2804:124c:4c0::/38": "263468", - "2a07:44c0::/29": "203081", - "2001:418:9808::/33": "2914", - "2800:d302:15::/46": "11830", - "2a01:190:15e8::/48": "29330", - "2a01:831::/29": "3209", - "2a01:53c0:ffe8::/47": "54994", - "2a02:26f7:d200::/48": "36183", - "2a02:26f7:e044::/48": "36183", - "2001:559:227::/48": "13367", - "2804:35b4::/32": "266301", - "2409:803c:2000::/40": "24444", - "2409:8904:66b0::/39": "24547", - "2800:200::/44": "12252", - "2804:313c::/32": "265001", - "2804:4c5c::/32": "267366", - "2a0f:5680:2::/47": "60906", - "2001:67c:3d4::/48": "207143", - "2001:1490:100::/48": "30857", - "240a:a2fc::/32": "143414", - "2607:9e00:1002::/34": "30536", - "2a02:26f7:d645::/46": "20940", - "240e:44d:2500::/41": "140345", - "240e:964:3000::/37": "133775", - "2a0e:fdc0::/29": "207375", - "2a0f:5707:aae0::/44": "30823", - "2001:559:380::/48": "33659", - "2001:a70::/32": "8426", - "2804:d30::/32": "52610", - "2804:6ce0::/47": "270498", - "2a02:26f7:fc00::/48": "36183", - "2a11:b80::/29": "208861", - "2001:559:c03b::/45": "20214", - "240a:a396::/32": "143568", - "2600:200a:3001::/29": "33517", - "2600:6c38:a90::/46": "20115", - "2605:a480::/32": "32703", - "2804:1e58:8000::/33": "264422", - "2a02:2ae8:8110::/33": "702", - "2405:7b40::/48": "135994", - "2800:160:13fe::/37": "14259", - "2001:559:4cb::/48": "33659", - "2408:8459:b230::/41": "17622", - "2408:8756:2cf3::/44": "135061", - "2604:2d80:4000::/34": "30036", - "2804:5cf0::/32": "268940", - "240a:a4c9::/32": "143875", - "2603:c001:2610::/36": "31898", - "2804:4024::/34": "265937", - "2a02:26f7:e109::/46": "20940", - "240e:980:8500::/40": "133774", - "2a02:2198::/32": "21161", - "2a0b:1640:1::/48": "205787", - "2001:559:2c0::/48": "33652", - "2620:53:c000::/48": "62821", - "2a04:3f83:44::/48": "213054", - "2001:559:274::/48": "20214", - "2001:559:85cf::/43": "33662", - "240a:a270::/32": "143274", - "2804:22c:f700::/36": "22689", - "2a02:26f7:f18c::/48": "36183", - "2a05:9d40::/29": "62166", - "2a0d:b200:800a::/48": "206026", - "2401:2a00::/35": "7468", - "2403:400:400::/39": "23820", - "2804:24c8::/32": "52846", - "2804:519c::/32": "268465", - "2001:df6:4400::/48": "133301", - "2001:49f0:a060::/44": "174", - "2409:8914:9b00::/40": "56044", - "240e:108:11b2::/47": "58461", - "2600:1007:b000::/42": "6167", - "2600:1419:1a::/48": "20940", - "2607:fda8:1010::/47": "54004", - "2a00:e7a0::/47": "204167", - "2a02:26f7:c3c0::/48": "36183", - "2001:1248:97bc::/41": "11172", - "2403:6200::/33": "45758", - "240a:af1a::/32": "146516", - "2600:1404:c000::/48": "35994", - "2600:1407:6401::/38": "20940", - "2804:4b24::/32": "267286", - "2408:8957:a900::/40": "17816", - "240a:aa54::/32": "145294", - "2602:ffe4:c09::/46": "21859", - "2605:3ac0:1000::/36": "6939", - "2803:ea60::/32": "267883", - "2a02:26f7:ccc8::/48": "36183", - "2a02:cb43:8004::/48": "20546", - "2001:4830:c0c0::/44": "3384", - "2605:aa40:c1f0::/48": "395394", - "2804:1bd8:9000::/33": "28224", - "2804:7fc4::/32": "271708", - "2a10:2f00:11a::/48": "207317", - "2001:4998:58::/45": "26101", - "2803:5440:4062::/45": "264738", - "2a0e:1b01::/32": "50873", - "2400:fc00:9901::/33": "45773", - "2a04:4e40:1220::/43": "54113", - "2a0a:8880:aaaa::/48": "50937", - "240a:abd1::/32": "145675", - "2804:61c0::/32": "269254", - "2806:230:301f::/48": "11888", - "2402:800:37e0::/44": "7552", - "2600:1002:9010::/40": "22394", - "2a02:26f7:c549::/42": "20940", - "2a02:26f7:e9c1::/46": "20940", - "240e:ff:c006::/48": "140308", - "2607:ae80:128::/48": "26558", - "2607:f790:fff1::/45": "12129", - "2804:6a14::/39": "61601", - "2a01:788:aaab::/48": "34305", - "2001:4340::/32": "3208", - "2401:d800:dea0::/41": "7552", - "2402:8100:2120::/43": "38266", - "240a:aa62::/32": "145308", - "2604:e100:1::/48": "33028", - "2a02:26f7:cbc9::/42": "20940", - "2001:678:d28::/48": "209314", - "2001:df5:7800::/48": "133465", - "2a02:d0c0::/31": "39150", - "2a03:14a0::/32": "60427", - "240a:a3ad::/32": "143591", - "2605::/32": "29848", - "2a03:51a0::/32": "39046", - "2001:559:c1f7::/48": "33659", - "2405:ba00:8800::/48": "63295", - "2407:2400::/32": "45641", - "2607:f148:4000::/36": "11734", - "2a04:4e40:5600::/48": "54113", - "2001:678:620::/48": "204388", - "2001:1248:5627::/43": "11172", - "2600:1003:a800::/44": "6167", - "2607:f770:fffc::/46": "22958", - "2a02:26f0:7c01::/39": "20940", - "2a06:ca40::/29": "44749", - "2600:1017:9810::/34": "6167", - "2620:3f:c009::/48": "62645", - "2a03:2ca0:3136::/32": "59865", - "2c0f:f038::/32": "36924", - "2404:e801:2004::/46": "55430", - "240a:afab::/32": "146661", - "240e:3b8:9c00::/34": "140310", - "2600:140f:1c00::/48": "55836", - "2806:2f0:23e3::/48": "17072", - "2a01:528::/32": "6775", - "2600:1a0e:270f::/35": "46650", - "2600:6c38:50f::/41": "20115", - "2806:2f0:81a1::/41": "17072", - "2a01:8840:da::/45": "12041", - "2001:468:2809::4/48": "396961", - "2001:559:13f::/48": "33655", - "2602:fcd8:7::/48": "14618", - "2a02:26f7:c781::/46": "20940", - "2a04:e840::/29": "47704", - "2a0d:9600:c::/48": "39664", - "2404:c400:a000::/33": "9328", - "2405:55c0:82::/32": "63991", - "2001:1248:8703::/45": "11172", - "2804:1c78::/32": "263041", - "2a04:f580:8090::/48": "4134", - "2a0e:fd45:b52::/42": "44103", - "240a:af19::/32": "146515", - "240d:c010:50::/48": "132591", - "2600:1009:f010::/40": "22394", - "2620:108:7000::/44": "16509", - "2001:41a0::/32": "6882", - "2408:8459:6c30::/41": "17622", - "2408:8956:78c0::/39": "17816", - "2600:1406:6c01::/38": "20940", - "2606:2800:60c::/47": "15133", - "2610:a1:3044::/48": "12008", - "2600:100d:b0d0::/42": "6167", - "2a06:5b40::/29": "59402", - "2a07:2e80::/29": "203201", - "2a09:7700::/29": "211199", - "240e:3b9:1200::/39": "4134", - "2a05:e40::/35": "59909", - "2a0f:5900::/29": "62412", - "2401:1d40:f8::/39": "23724", - "2800:485:1c00::/40": "10620", - "2a00:ede0::/32": "35804", - "2a02:2e02:be0::/37": "12479", - "2406:3003:207e::/47": "4657", - "2409:8028:2100::/37": "9808", - "2605:9780:30::/48": "393544", - "2a03:b500::/40": "41135", - "2a09:59c0::/29": "63023", - "2001:550:3e01::/33": "174", - "2402:a0c0:6::/48": "137922", - "2405:3040::/32": "139370", - "2604:c880:20::/43": "46455", - "2620:d8:c000::/48": "7784", - "2a00:8c40:235::/48": "205418", - "2804:3414::/32": "28666", - "2a02:26f7:e7cd::/46": "20940", - "2001:67c:2c78::/48": "9201", - "2001:978:b701::/33": "174", - "2409:8904:2a40::/39": "24547", - "2a02:26f7:f204::/48": "36183", - "2001:559:8267::/48": "7922", - "2001:df2:1b00::/48": "138225", - "240a:a530::/32": "143978", - "2600:140b:b401::/36": "20940", - "2a05:b0c6:200f::/48": "208753", - "2a06:7243:1a::/45": "202365", - "2606:5e00::/35": "14576", - "2804:5cac::/32": "268923", - "2a06:e880:1::/48": "48550", - "2001:559:5f8::/48": "33659", - "240a:ab3c::/32": "145526", - "2600:1415:e800::/48": "24319", - "2607:fb10:5062::/47": "55095", - "2800:160:1826::/44": "14259", - "2600:6c38:72b::/45": "20115", - "2610:20:9008::/45": "3477", - "2804:56c:200::/32": "28210", - "2806:230:6015::/48": "11888", - "2a00:b700:5::/48": "51659", - "2a09:2600::/29": "197036", - "2001:57b:1001::/38": "22773", - "240a:a93a::/32": "145012", - "2605:9c0::/48": "55158", - "2620:1d5::/44": "14773", - "2a00:ebc0::/32": "3190", - "2001:388:31::/40": "7575", - "2001:559:8171::/48": "33657", - "2400:f1::/30": "4766", - "240a:a6d4::/32": "144398", - "2806:102e:7::/44": "8151", - "2001:67c:2570::/48": "13030", - "2402:3880::/32": "23791", - "2403:4f80::/32": "131270", - "2409:8038:100::/36": "9808", - "2605:f140::/32": "398735", - "2001:560::/32": "18530", - "2402:800:9b47::/43": "7552", - "2600:805:b01::/30": "701", - "2a09:c580::/32": "209979", - "2001:559:87aa::/45": "7922", - "2001:67c:344::/48": "50156", - "2804:14c:9d00::/40": "28573", - "2610:98::/32": "11478", - "2001:550:1e02::/34": "174", - "2001:4d78:2000::/40": "15830", - "2400:89c0:6100::/48": "37936", - "2406:eb00:210::/48": "132653", - "240a:a00c::/32": "142662", - "240a:a8cc::/32": "144902", - "2606:2800:547::/44": "15133", - "2803:51c0::/32": "262181", - "2a10:4a80::/32": "210072", - "2001:559:804e::/48": "33287", - "2406:3000:11:100c::/50": "4657", - "2407:6180::/32": "138466", - "2001:67c:2b4c::/48": "60218", - "2400:e940::/32": "136463", - "2408:897e::/32": "4837", - "2a00:9de0::/32": "60228", - "2a02:a50::/32": "20742", - "2a06:b280:2::/31": "199213", - "2402:9d80:a00::/47": "131429", - "2408:8256:2d8d::/43": "17623", - "2804:5c00::/32": "268882", - "2001:559:80f8::/48": "33652", - "2409:8000:3900::/33": "9808", - "2409:8d30::/29": "9808", - "2600:6c38:442::/45": "20115", - "2a02:26f7:d689::/42": "20940", - "240e:3b0:4c00::/35": "136200", - "2604:940:34::/48": "40386", - "2a0d:e380:2::/29": "204460", - "2804:154c:502e::/32": "263382", - "2001:67c:2480::/48": "212966", - "2001:df5:f500::/48": "133296", - "2403:2c80::/40": "9312", - "2403:fa40:2::/48": "23858", - "2405:8000::/32": "38462", - "240a:ae75::/32": "146351", - "240e:6b9:1000::/36": "4134", - "240e:473:7a50::/39": "4134", - "2a01:6500:4::/32": "42925", - "2a03:b6c0::/32": "20672", - "2a04:4e40:3c00::/47": "54113", - "2400:f2:7000::/48": "202818", - "240a:af60::/32": "146586", - "2604:ae00:3::/48": "4452", - "2607:f048::/32": "26803", - "2607:fcd0:fa80:2301::/53": "8100", - "2804:14c:6b82::/41": "28573", - "2a01:8840:c::/48": "33280", - "2a0f:6f00::/29": "208861", - "240a:a22b::/32": "143205", - "2602:fdd4::/36": "396855", - "2804:161c::/34": "263268", - "2804:3850:8200::/36": "266469", - "2408:8256:3661::/43": "17623", - "2804:7c80::/32": "271500", - "2a00:1510::/32": "42882", - "2a03:2880:f01d::/46": "32934", - "2a0b:ec82::/32": "52000", - "2600:1400:801::/37": "20940", - "2804:14d:1681::/41": "28573", - "2a03:2880:f0fe::/47": "32934", - "2a0d:9500::/29": "48551", - "2600:100e:f010::/39": "6167", - "2400:addd::/30": "9541", - "240a:a5df::/32": "144153", - "240e:44d:2d00::/41": "140345", - "2800:160:1315::/46": "14259", - "2a04:4e40:4400::/47": "54113", - "2a0c:9a40:82b0::/48": "1239", - "240e:a7:9000::/28": "4134", - "2600:1402:8801::/35": "20940", - "2604:3840::/48": "20061", - "2606:b400:8302::/48": "90", - "2804:128::/32": "28634", - "2a02:26f7:e144::/48": "36183", - "2a0b:9b40::/29": "202120", - "2a0f:8040::/29": "6735", - "2401:ff80:1685::/44": "133954", - "2800:440:1e00::/42": "27738", - "2804:28b0::/32": "52932", - "2a00:1dd8::/29": "31042", - "2a06:c5c0:1100::/48": "204548", - "2a09:3c00::/48": "6939", - "2a0a:7c00::/29": "38955", - "2a0f:cc40::/29": "8901", - "2001:678:294::/48": "2613", - "2001:1260:105::/44": "13591", - "2001:1490:104::/32": "8895", - "2401:f80::/32": "9268", - "2806:2f0:72a1::/41": "17072", - "2a03:6f00:1::/45": "9123", - "2a0a:1800:4::/43": "49915", - "2001:4878:136::/48": "12222", - "2406:2000:1d0::/48": "10880", - "240e:3b8:ec00::/35": "140314", - "2600:1402:4::/44": "20940", - "2620:133:6000::/44": "22084", - "2804:14d:7e91::/41": "28573", - "2604:10::/32": "19112", - "2800:160:14d8::/42": "14259", - "2804:2238:f00::/32": "264598", - "2400:c700:5001::/32": "55644", - "2607:f868:8000::/45": "20141", - "2620:171:e0::/43": "42", - "2800:200:2005::/44": "12252", - "2804:514::/32": "262490", - "2a0d:8d05:2::/48": "211944", - "2407:5200:4924::/32": "55915", - "240a:a915::/32": "144975", - "2801:11:6800::/48": "3816", - "2001:470:ee::/48": "62538", - "2001:559:3ec::/48": "33652", - "2600:6c38:16e::/43": "20115", - "2606:6340::/32": "399857", - "2607:ca00:8000::/33": "7122", - "2804:7b30::/32": "271416", - "2a02:1718::/32": "51182", - "240e:874::/41": "140638", - "2001:648:3400::/40": "8248", - "2001:67c:2a98::/48": "3301", - "2001:cc8::/31": "4637", - "2400:ee80::/34": "45177", - "2404:3d00:4064::/40": "3573", - "2405:6e00:f800::/48": "133612", - "2408:8459:b850::/38": "17816", - "2a02:26f0:7601::/39": "20940", - "2401:1f00::/32": "9268", - "2405:1c0:7181::/46": "135062", - "2606:1f80::/32": "13414", - "2620:0:150::/48": "2714", - "2804:8d4::/32": "262753", - "2a02:26f7:ed89::/42": "20940", - "2a0e:c5c0::/32": "208854", - "2001:559:1e0::/48": "33659", - "2001:559:831b::/48": "33660", - "2001:43f8:1460::/48": "328601", - "2405:1c0:6273::/40": "55303", - "2406:daa0:a040::/44": "16509", - "240a:a7ff::/32": "144697", - "2a02:26f0:1600::/48": "34164", - "2a0f:9400:7722::/48": "211066", - "2001:559:c358::/48": "7016", - "2a00:1d28::/32": "8523", - "2001:559:148::/48": "33491", - "2001:559:c3fa::/48": "7016", - "2001:4478:ff02::/40": "4802", - "2602:fcf4::/36": "398738", - "2620:130:3025::/46": "62861", - "2a0f:9400:8020::/48": "20473", - "2804:1e08::/32": "264406", - "2804:3c30::/32": "266195", - "2a00:83a0::/32": "60772", - "2a0c:f80::/29": "209372", - "2001:7f8:3a::/48": "41692", - "2404:5d80:6300::/40": "33438", - "2407:8c00:90::/42": "55441", - "2602:803:4070::/48": "398223", - "2604:bc0:4::/48": "30176", - "2a06:e881:3500::/44": "205117", - "2405:9800:d001::/48": "134240", - "240e:44d:2a00::/41": "140345", - "2607:b480::/32": "394814", - "2001:559:53d::/48": "33491", - "2001:f20:2000::/47": "9875", - "2405:a00::/32": "4783", - "2a03:7380:3800::/42": "13188", - "2a10:9a80:dc01::/48": "1764", - "2400:f340:9::/48": "131746", - "2804:284c::/33": "263954", - "2402:800:3671::/44": "7552", - "2600:e00c::/32": "22995", - "2607:ff58::/32": "40475", - "2a02:2370:200::/47": "32787", - "2a0c:1040::/29": "204382", - "2604:ca00:156::/42": "36492", - "2804:de8::/32": "52525", - "2600:1417:55::/46": "9498", - "2405:1c0:6443::/43": "55303", - "2408:8306::/28": "4808", - "240a:a018::/32": "142674", - "2001:df7:a401::/48": "134839", - "2001:43f8:e0::/48": "37045", - "2401:d800:dde0::/38": "7552", - "2406:3003:1029::/45": "4657", - "240e:473:9d20::/41": "140486", - "2607:fcd0:100:c000::/50": "8100", - "2620:22:4000::/48": "29773", - "2001:df3:b880::/48": "17538", - "2001:df0:31a::/45": "140592", - "2402:800:3a9b::/41": "7552", - "2403:4440::/32": "9367", - "2600:380:e980::/41": "20057", - "2607:9480::/43": "14338", - "2803:8240:2::/40": "52511", - "2a01:8840:35::/48": "207266", - "2a09:4c0:d01::/38": "58057", - "2a01:e0a:600::/26": "12322", - "2a02:8b8::/32": "15657", - "2a0d:9e40:1000::/36": "9558", - "2001:678:95c::/48": "34093", - "2001:df6::/46": "132557", - "240e:97c:4000::/36": "4816", - "2803:6604:a401::/39": "28075", - "2806:20d:590d::/38": "32098", - "2001:44b8:2046::/48": "7545", - "2406:dc0:88ca::/47": "9221", - "240e:982:b100::/40": "136190", - "2620:2:6000::/48": "395409", - "2a00:4802:290::/42": "13124", - "2a04:88c7::/32": "205544", - "2a0b:b86:f4::/48": "3280", - "2607:fb10:503a::/47": "2906", - "2a00:f40:1::/46": "43447", - "2a00:19c8:9000::/29": "35833", - "2a0a:600::/29": "64431", - "2a0e:8f02:f021::/48": "211498", - "2001:44b8:605f::/48": "4739", - "2405:9800:b810::/48": "133481", - "2a00:4e00::/33": "15368", - "2001:df6:2480::/48": "44103", - "2001:6d0:fffc::/48": "42385", - "2001:df3:8980::/48": "140593", - "2400:e440:400::/41": "42382", - "2a0a:6f80::/32": "50673", - "2a0f:1e80:61::/48": "60781", - "2408:8459:3a10::/44": "17623", - "2607:f598:f001::/48": "397715", - "2a0e:97c0:2c0::/44": "211548", - "2408:80ea:75e0::/43": "17623", - "2620:125:9050::/48": "397415", - "2a01:c9c0:c1::/46": "8891", - "2a02:ff0:1800::/40": "12735", - "2a03:c9c0::/32": "51752", - "2001:1620:210d::/32": "13030", - "2a00:6900::/47": "20926", - "2a00:fd40:1::/48": "58272", - "2a01:5880::/32": "20924", - "2804:5544::/32": "268699", - "2600:370f:3545::/40": "32261", - "2620:0:480::/48": "28729", - "2a09:2dc0::/32": "30860", - "2001:67c:217c::/48": "2486", - "2403:5180:8888::/48": "6233", - "2409:804c:3100::/36": "9808", - "240a:a7e0::/32": "144666", - "2804:680:19::/37": "262589", - "2804:e04::/32": "52535", - "2a02:26f7:c440::/48": "36183", - "2001:678:e4c::/48": "212622", - "2409:8d4c::/30": "9808", - "2604:8100::/32": "26292", - "2001:678:cac::/48": "39702", - "2404:b0:11::/46": "4750", - "240a:a13b::/32": "142965", - "2607:fd48:480:2::/36": "13536", - "2409:8f18::/31": "134810", - "2607:8e80::/32": "395479", - "2a02:26f7:e7c5::/46": "20940", - "2a03::/32": "204094", - "2a03:a8e0::/32": "57090", - "2001:4870::/32": "3549", - "2401:ce80:1002::/32": "14340", - "2600:1402:3::/48": "35994", - "2604:cc00:a3::/48": "53292", - "2804:728::/32": "53201", - "2804:59cc::/32": "268726", - "2a02:26f7:e888::/48": "36183", - "2a07:f300::/29": "208861", - "2a0b:33c0:10::/48": "57395", - "2c0f:f4b0::/32": "328471", - "2401:1540::/32": "136534", - "2a01:8840:92::/45": "12041", - "2001:559:c002::/48": "7922", - "2620:98:a000::/48": "399668", - "2a02:26f7:1a::/48": "36183", - "2a03:a080::/32": "198145", - "2402:800:f660::/40": "7552", - "240a:a2b7::/32": "143345", - "2620:4e:a000::/48": "393529", - "2804:21f8::/44": "262272", - "2a00:1fa1:8000::/30": "8359", - "2403:b100::/34": "9989", - "2409:8d75::/28": "9808", - "2a00:c70::/32": "21409", - "2a10:b5c0::/29": "211668", - "2001:4500:1200::/32": "18183", - "2402:ef38::/32": "38536", - "2001:df0:4e80::/48": "139035", - "240a:afb6::/32": "146672", - "2804:3b8:fd10::/38": "52965", - "2a00:19e8::/32": "31493", - "2a01:a740::/32": "61157", - "2a02:26f7:c3d0::/48": "36183", - "2001:559:83cf::/48": "7725", - "2001:559:c25e::/48": "33287", - "2401:ff80:1b0d::/46": "133954", - "2407:1e40:301::/37": "141732", - "240a:afca::/32": "146692", - "2804:6d18::/32": "270512", - "2a0b:7e40::/32": "206894", - "2408:8406:6000::/39": "4808", - "240a:afb2::/32": "146668", - "2803:9800:b507::/36": "11664", - "2804:7b68::/44": "271430", - "2a04:52c0::/32": "60404", - "2a0d:2680:1112::/40": "20473", - "2001:559:c10f::/48": "7015", - "2400:3800::/32": "9617", - "2408:8756:3af0::/46": "17623", - "2603:c0f8:1000::/43": "20054", - "2620:171:63::/45": "42", - "2804:5ab4::/32": "268790", - "2804:5b14::/32": "268817", - "2001:559:13e::/48": "22258", - "2600:1406:8c01::/38": "20940", - "2a0e:46c4:100::/48": "139653", - "2001:559:8208::/48": "33654", - "2001:dce:8800::/48": "38064", - "2400:6b00::/32": "63997", - "2804:2ae4:f000::/36": "13878", - "2a04:4e40:6200::/48": "54113", - "2001:1248:9613::/44": "11172", - "2408:8256:668::/39": "17622", - "2409:8904:4460::/39": "24547", - "2600:6000:f571::/40": "12271", - "2404:4300::/32": "9930", - "2604:ca00:136::/41": "36492", - "2001:67c:670::/48": "201824", - "2a00:1358:d100::/36": "6866", - "2c0f:e9c8::/32": "36926", - "2001:470:142::/48": "22989", - "2001:559:30a::/48": "7922", - "2001:559:c2bc::/48": "33662", - "2600:370f:352a::/45": "32261", - "2803:8d80::/33": "11664", - "2804:25e8::/32": "264310", - "2804:5480::/32": "268654", - "2409:8904:4760::/36": "24547", - "240a:a8ef::/32": "144937", - "240e:964:2800::/38": "133776", - "240e:980:2800::/40": "133775", - "2804:758c::/32": "271054", - "2a04:6400:191a::/29": "62240", - "2408:8256:318b::/48": "17623", - "2804:1f44::/32": "270710", - "2a02:cb80:4005::/46": "43766", - "2a06:c702::/29": "6810", - "2a07:de40:400::/38": "29298", - "2001:320:4002:2001::/32": "1237", - "2401:3c0:214::/48": "45528", - "2401:1d40:f21::/45": "23724", - "2607:f180:5200::/34": "35908", - "2804:2f04::/32": "264866", - "2408:8459:be50::/33": "17816", - "240a:a803::/32": "144701", - "2607:f5b2::/32": "396190", - "2806:2f0:71c1::/42": "17072", - "2a04:4e40:6000::/48": "54113", - "2001:559:79a::/47": "7922", - "2804:5c58::/32": "268903", - "2001:559:837e::/48": "33491", - "2001:df0:2c1::/48": "58624", - "2620:11d:9001::/48": "33186", - "2a02:26f7:c359::/45": "20940", - "2404:1d40:d::/32": "131216", - "2a00:9340::/32": "57795", - "2a0a:8d40::/29": "60987", - "2804:9a8:8000::/33": "262979", - "2804:5ae0::/32": "268802", - "2001:559:836a::/48": "33652", - "2801:116:1::/48": "27951", - "2804:3a0::/32": "52960", - "2001:550:a11::/46": "174", - "2804:2a54::/32": "264069", - "2a00:1108::/32": "8771", - "2c0f:fd80::/32": "25543", - "240e:97e:8000::/33": "4134", - "2607:fd78:102::/37": "26677", - "2804:43a0:3003::/33": "267580", - "2a02:26f7:d708::/47": "36183", - "2a03:2880:f21d::/46": "32934", - "2a0a:2b40::/29": "35278", - "2a0f:88c1::/30": "395003", - "2001:559:87dc::/46": "7922", - "2001:67c:2724::/48": "211696", - "2001:4bd8::/41": "15725", - "2401:f100::/32": "38651", - "2409:8e80:b000::/23": "9808", - "2600:370f:3741::/46": "32261", - "2804:3844::/32": "266457", - "2408:8456:b440::/38": "17816", - "2409:8020:1011::/42": "56046", - "2602:fdc2:a::/48": "397720", - "2607:f6f0:4001::/48": "394749", - "2001:550:2204::/46": "174", - "2001:18e0::/32": "6062", - "2401:4900:808::/43": "45609", - "2600:1012:f000::/43": "6167", - "2a02:5f83::/32": "39811", - "2a0f:9400:801e::/48": "53356", - "2a0f:eb80:10::/32": "47267", - "2001:500:d0::/47": "12041", - "2001:67c:1591::/48": "61317", - "240a:a11e::/32": "142936", - "2a00:8f20::/32": "60687", - "2001:1520:a::/40": "8972", - "2405:8a00:801d::/46": "55824", - "2804:699c::/32": "270280", - "2a0e:15c7:ff82::/41": "60781", - "2804:3398::/32": "265406", - "2402:800:6150::/40": "7552", - "2402:bcc0::/32": "9639", - "2403:3200::/32": "18268", - "240a:a0ed::/32": "142887", - "240e:1d:1000::/34": "58461", - "2600:1417:f801::/28": "20940", - "2620:104:a000::/44": "26008", - "2a00:6901:a103::/48": "20926", - "2a03:f80:370::/47": "56630", - "2a09:35c0:100::/38": "209510", - "2a09:8b00::/29": "38913", - "2001:4998:15c::/48": "36752", - "2400:4480::/47": "17426", - "2001:559:a1::/48": "7015", - "2001:13c7:6f00::/44": "27814", - "240e:95d:800::/38": "136192", - "2a02:26f7:dec8::/48": "36183", - "240e:473:4e50::/39": "4134", - "2804:4d8c::/32": "268204", - "2a02:e0:3805::/44": "34984", - "2001:559:814d::/48": "13367", - "2001:e30:2200::/40": "2697", - "2606:800::/32": "1442", - "240a:abfb::/32": "145717", - "2800:300:69a0::/32": "27986", - "2a07:59c6:e000::/47": "203125", - "2001:fd8:164::/46": "132199", - "2001:fd8:3340::/42": "132199", - "2409:8904:5540::/42": "24547", - "2620:0:d60::/46": "46", - "2804:49c:3101::/46": "15201", - "2804:4f10::/32": "266612", - "2a02:26f7:ef0c::/48": "36183", - "2a0c:b641:6::/48": "34872", - "2a10:840::/29": "62240", - "2c0f:f918:800::/34": "37002", - "2804:7458::/32": "270975", - "2a00:1f19::/32": "197519", - "2001:550:3b02::/37": "174", - "240a:a1dd::/32": "143127", - "2804:214:c001::/44": "26615", - "2a02:26f7:d205::/46": "20940", - "2404:5440::/44": "56272", - "2604:1ec0::/36": "11260", - "2804:7484::/32": "270986", - "2a0b:b87:ffe4::/48": "207083", - "2001:4528:203::/36": "18101", - "2602:fed2:711d::/48": "140244", - "2804:582c::/32": "268111", - "2806:2f0:42e1::/46": "17072", - "2a02:2d8:1:780a::/64": "35277", - "2001:67c:1233::/48": "56554", - "2800:1e0:1100::/40": "7195", - "2a0d:f407:1017::/48": "212448", - "2401:d800:91d0::/42": "7552", - "2408:8456:7a00::/42": "17622", - "2409:8924:1300::/37": "56046", - "2600:1419:f401::/36": "20940", - "2a05:1083:fc00::/44": "209870", - "2401:9640::/32": "133982", - "2605:100::/32": "11442", - "2605:5640::/36": "25635", - "2a0b:4040::/29": "62217", - "2607:b400:801::/39": "40220", - "2804:3a70::/32": "266089", - "2a03:ec00::/32": "12847", - "2804:18e0::/32": "262698", - "2804:34b0::/32": "265473", - "2a07:3500:19f0::/48": "38915", - "2001:678:81c::/48": "21195", - "2804:3678::/32": "266350", - "2a0a:2846::/36": "42962", - "2a0e:2fc0::/48": "208595", - "2001:559:7dc::/48": "33659", - "2606:a200::/32": "14155", - "2607:3280::/32": "11385", - "2620:96:e000::/48": "398324", - "2a02:26f7:d3c8::/47": "36183", - "2a0d:3f40::/29": "39182", - "240a:a05d::/32": "142743", - "2606:2800:4a08::/46": "15133", - "2a03:a80::/32": "15836", - "2405:7f00:91a0::/38": "133414", - "2408:8459:1d10::/42": "17623", - "2806:2f0:4121::/46": "17072", - "2c0f:fb08::/32": "16637", - "2408:8345:1200::/32": "4837", - "2001:16a8::/32": "12533", - "2400:ee80:2001::/32": "45177", - "2402:8100:20c6::/48": "55644", - "240a:a8d4::/32": "144910", - "240a:aebc::/32": "146422", - "2600:1001:a110::/36": "22394", - "2001:c38:9069::/40": "9931", - "2404:7840:1::/46": "138638", - "2605:4040::/32": "46300", - "2800:110:3c01::/38": "4270", - "2a00:1eb8:4000::/35": "8764", - "2a0b:4340:1304::/48": "205152", - "2001:500:63::/45": "30133", - "2001:678:ecc::/48": "25304", - "240a:a5ee::/32": "144168", - "2803:f5e0::/32": "270042", - "2406:e6c0::/48": "140766", - "2409:8087:5d00::/34": "9808", - "2409:8904:5060::/39": "24547", - "2806:2f0:2444::/43": "22884", - "2a0e:46c4:22a3::/48": "136918", - "2001:559:8597::/48": "7015", - "2001:ee0:e900::/38": "45899", - "2401:b740::/32": "137549", - "2403:89c0::/48": "55824", - "2604:d600:c7d::/46": "32098", - "2a02:2e02:18a0::/39": "12479", - "2a07:bfc0::/29": "9022", - "2607:f220:10::/44": "19050", - "2a11:fe00::/29": "42375", - "2001:559:8416::/48": "21508", - "2001:67c:1684::/48": "16104", - "2001:1248:973f::/41": "11172", - "240a:a894::/32": "144846", - "2620:10f:d000::/44": "208722", - "2804:13b0:3c00::/45": "263546", - "2a02:6604:4::/30": "5377", - "2001:559:c2a9::/48": "33287", - "2605:7580::/32": "40107", - "2620:134:b0ff::/48": "14593", - "240a:a526::/32": "143968", - "240a:a7cf::/32": "144649", - "240a:aa97::/32": "145361", - "2a00:fb8::/34": "8881", - "2a01:3f1:5400::/32": "8674", - "240a:aeb2::/32": "146412", - "2602:fd9a::/44": "54613", - "2804:40c0::/32": "265979", - "2a02:d3c7::/32": "59565", - "2400:a980:8ff::/48": "133111", - "2404:7a00::/32": "17953", - "2408:8434::/28": "4837", - "2409:8750:700::/36": "56047", - "2600:1407:c801::/35": "20940", - "2620:171:6e::/43": "715", - "2a02:26f7:cf40::/48": "36183", - "240e:44d:5280::/41": "4134", - "2607:f7a8:600::/47": "16657", - "2607:fb10:7052::/42": "2906", - "2001:67c:2110::/48": "28734", - "2001:b28:f23c::/48": "44907", - "240a:a178::/32": "143026", - "2602:ffbc:1::/48": "16628", - "2804:62c::/34": "262569", - "2001:1248:56ee::/43": "11172", - "240a:a10c::/32": "142918", - "2a05:2605::/30": "49544", - "2001:480:162::/38": "668", - "2a0b:4a40::/29": "47926", - "2a04:42c0::/29": "12593", - "2001:559:36c::/48": "7016", - "2001:1938:b00b::/48": "11588", - "2402:5600::/32": "10083", - "2402:8100:2420::/43": "55644", - "2404:63c0::/44": "131645", - "2602:fcd3:104::/47": "211224", - "2800:9a0::/34": "14522", - "2001:67c:10b8::/48": "207021", - "2400:7400:31::/46": "23736", - "2408:8459:b430::/41": "17622", - "2605:f080:700::/40": "62756", - "2001:559:1b5::/48": "7016", - "2604:d600:c05::/44": "32098", - "2806:370:9050::/40": "28403", - "2a00:1298::/32": "5578", - "2a06:e881:3200::/44": "31798", - "2001:9f0::/29": "719", - "2a05:46c0::/29": "200780", - "2a01:b740:a23::/48": "714", - "2001:550:9c06::/39": "174", - "2001:df2:2c00::/48": "133929", - "240a:ab48::/32": "145538", - "2620:44::/47": "7133", - "2804:158::/32": "53093", - "2804:37c0::/32": "266434", - "2a00:d740::/29": "61006", - "2a02:26f7:df81::/46": "20940", - "240a:a36e::/32": "143528", - "2600:1f01:4844::/47": "16509", - "2600:1488:a181::/38": "20940", - "2a02:26f7:b8c0::/48": "36183", - "2a05:8540::/29": "44543", - "2001:550:4a03::/37": "174", - "2001:559:81fa::/48": "33652", - "2402:f100::/38": "38902", - "2409:8004:2100::/36": "24547", - "2a01:8640:b::/48": "202015", - "2a06:c700::/31": "6810", - "2001:1938:3005::/39": "33438", - "2405:84c0:9710::/44": "40676", - "240e:5e:4007::/32": "4134", - "2402:2940::/32": "24390", - "240e:24:c000::/28": "4134", - "2a0a:580:1120::/48": "209689", - "2a0b:a900::/30": "206712", - "2001:559:23a::/48": "33287", - "2409:8004:1900::/34": "24547", - "2604:d600:543::/44": "32098", - "2a0a:54c0::/31": "62240", - "2a0d:7ac5::/30": "210206", - "240e:3b3:2200::/37": "136198", - "2a00:6700::/48": "202753", - "2a00:8180::/32": "16205", - "2a0b:b840:1::/48": "42167", - "2404:e600::/48": "132804", - "240a:a9ec::/32": "145190", - "2600:1017:b8d0::/44": "22394", - "2804:2a0:c000::/34": "28272", - "2a04:3740:1::/46": "24935", - "2a0a:f582::/32": "51837", - "2001:559:8794::/48": "33657", - "2001:870::/29": "8447", - "2400:5900::/32": "18021", - "2409:8c28:91a1::/34": "56041", - "2a01:4a0:18::/45": "201011", - "2a02:1798::/29": "24637", - "2001:df0:e780::/48": "16089", - "2402:800:a000::/35": "7552", - "240e:3b0:2200::/37": "136198", - "2607:fc58:1:50::/64": "13536", - "2a07:c883::/32": "59872", - "2a0f:e600::/48": "60781", - "2400:1680::/32": "58895", - "2403:dc00::/32": "45926", - "2600:6c34:274::/48": "33588", - "2804:427c::/32": "267503", - "2804:7d2c::/32": "271544", - "2806:230:4010::/48": "265594", - "2a04:4e40:7800::/47": "54113", - "2001:559:801c::/48": "33667", - "2001:559:80bc::/47": "7015", - "2409:804c:2100::/35": "9808", - "2804:4968::/32": "262625", - "2806:261::/48": "13999", - "240e:3b0:ec00::/35": "140314", - "2800:bf0:1cb::/48": "27947", - "2804:3ebc::/32": "266618", - "2001:559:8123::/48": "33287", - "2401:d800:bb80::/42": "7552", - "2404:a1c0::/32": "55699", - "2803:cd60::/32": "64116", - "2804:37a8:1219::/32": "266428", - "2a04:4a45::/44": "206067", - "2001:559:1bc::/48": "33659", - "2600:380:7780::/36": "20057", - "2804:2f4::/32": "53118", - "2804:187c:a9::/32": "262673", - "2804:673c:c500::/34": "269615", - "2001:559:8534::/48": "7015", - "2001:1b70:82::/48": "29518", - "2600:1417:6001::/36": "20940", - "2803:9800:5080::/39": "11664", - "2001:418:1401:25::/64": "20940", - "2404:f880::/32": "135386", - "2620:0:d50::/48": "17244", - "2803:87e0::/32": "270095", - "2804:64d4::/32": "269452", - "2a02:26f7:f300::/48": "36183", - "2408:80da::/32": "17816", - "240e:980:8200::/40": "58461", - "2803:dba0::/32": "267767", - "2a00:1dc0::/29": "43289", - "2a02:26f0:1b01::/37": "20940", - "2a06:10c0::/29": "198930", - "2a0a:bb80::/29": "206620", - "2804:343c::/32": "263665", - "2001:559:8054::/47": "7922", - "2001:559:874d::/48": "33657", - "2409:8924:9300::/37": "56046", - "2409:8c85:8001::/34": "9808", - "2600:1407:6::/44": "20940", - "2603:c0f0:2000::/43": "6142", - "2606:29c0::/32": "31775", - "2a0b:1306:c::/48": "198018", - "2406:840:feb0::/48": "208753", - "2806:2f0:4361::/40": "17072", - "2600:1006:f040::/44": "6167", - "2804:3448::/32": "265447", - "2a03:8100::/32": "5524", - "2001:4d78:100::/36": "15830", - "2403:2940:1::/48": "63612", - "2804:3af4::/32": "266120", - "2804:53d0::/32": "268608", - "2a06:3d80::/29": "60117", - "2a0d:a440::/29": "197915", - "2401:ff40:5050::/32": "137080", - "240a:acd3::/32": "145933", - "2600:6c38:8d0::/47": "20115", - "2605:ef00::/47": "7806", - "2804:8cc:c::/46": "262394", - "2804:51d8::/32": "268480", - "2804:145c::/37": "263327", - "240e:473:6000::/41": "140485", - "2402:800:78b0::/39": "7552", - "2804:2374::/32": "264163", - "2804:308c::/32": "264960", - "2a06:3380::/29": "12941", - "2001:559:8719::/48": "33651", - "2402:ab00:f0::/32": "24206", - "240a:ac7d::/32": "145847", - "240e:44d:3c80::/41": "4134", - "2604:d400:ff11::/48": "25934", - "2606:ec00:a100::/40": "40328", - "2001:fb0:1036::/41": "7470", - "2605:7cc0::/32": "397161", - "2620:12a:2000::/44": "395421", - "2804:1b50:c880::/34": "61719", - "2a05:d000:c000::/40": "16509", - "2a0b:fe00::/29": "207026", - "2001:978:1d02::/38": "174", - "2001:4998:efe6::/48": "26085", - "2407:5c80::/32": "59362", - "2806:102e:1b::/48": "8151", - "2a00:4087::/32": "41609", - "2a02:26f7:ed45::/46": "20940", - "2001:559:c236::/48": "33662", - "2408:8456:5a00::/42": "17622", - "240a:a6c0::/32": "144378", - "2607:f8f0::/40": "271", - "2804:1424::/32": "52940", - "2a0e:46c4:2269::/48": "136918", - "2001:df2:a780::/48": "140054", - "2409:8a52:d00::/38": "56047", - "2800:800:580::/43": "26611", - "2804:27d8::/32": "263925", - "2806:20d:502b::/45": "32098", - "2001:559:c390::/48": "33657", - "2001:678:3a8::/48": "34309", - "2600:1488:a281::/39": "20940", - "2a02:26f7:6f::/48": "20940", - "2a06:f900::/36": "56630", - "2406:19c0::/32": "140659", - "2604:d600:c42::/45": "32098", - "2620:5:e000::/48": "13951", - "2804:d24::/32": "52603", - "2804:40a0::/32": "265971", - "2a02:970:1006::/43": "44002", - "2401:a400:8000::/33": "7477", - "2408:8956:e700::/40": "17816", - "2604:d600:112f::/43": "32098", - "2402:800:9801::/44": "7552", - "2409:8904:5570::/40": "24547", - "240e:3bd:4c00::/35": "136200", - "2804:1124::/32": "53142", - "2001:44b8:5034::/44": "7545", - "2402:8100:2560::/43": "45271", - "2803:1a00:1114::/37": "262186", - "2a00:99a0:f000::/48": "64484", - "2402:800:3dfe::/38": "7552", - "240a:aa71::/32": "145323", - "2800:160:1824::/47": "14259", - "2800:6b0::/32": "6306", - "2803:7200:800e::/43": "27696", - "2a02:503::/47": "51955", - "2001:1240::/32": "28561", - "240a:a7bf::/32": "144633", - "2606:6200:1402::/36": "21570", - "2001:b98::/38": "5413", - "2400:cb00:aa90::/47": "13335", - "2401:4900:1b80::/43": "45609", - "2402:5680:8000::/36": "133798", - "2804:5110:161::/32": "268428", - "2804:51e4::/32": "268483", - "2a00:f740:101::/38": "28875", - "240e:629::/25": "4134", - "2600:6c38:de::/42": "20115", - "2804:7c28::/32": "271479", - "2a0b:c540::/29": "47926", - "2800:160:21a4::/41": "14259", - "2a00:d640::/31": "213192", - "2001:550:9201::/36": "174", - "2408:84e2:200::/40": "17621", - "2408:8956:9700::/40": "17816", - "2600:1901:c120::/44": "396982", - "2607:fbd8::/32": "11260", - "2a00:ec80::/32": "15557", - "2001:559:c33b::/48": "7922", - "2600:1014:9010::/40": "22394", - "2620:84:a000::/44": "398330", - "2800:200:e::/34": "12252", - "2804:82ec::/32": "272165", - "2a02:26f7:f5cd::/42": "20940", - "2a0e:46c4:22a1::/48": "136918", - "2001:559:84f3::/45": "33659", - "2404:a3c0::/32": "134823", - "2602:805:d000::/44": "46208", - "2800:bf0:3c00::/46": "52257", - "2804:390:2000::/36": "52956", - "2a01:8840:7e::/40": "12041", - "2001:559:8603::/48": "33662", - "2001:67c:17dc::/48": "3246", - "2401:ff80:1309::/46": "133954", - "2402:3a80:c80::/38": "38266", - "2409:806a:5d00::/31": "9808", - "240a:aee9::/32": "146467", - "2602:feda:b9f::/48": "212995", - "2a02:2e02:92a0::/37": "12479", - "240e:473:a850::/39": "4134", - "2600:3000:1b05::/34": "13649", - "2804:3e50:8000::/36": "266587", - "2a01:5a60::/32": "200487", - "2a0f:5707:ab25::/48": "201106", - "2c0f:f070::/32": "36912", - "2a0f:f640::/48": "12731", - "2001:16a2:6300::/40": "39386", - "2407:e700:14::/32": "132680", - "240a:a4f9::/32": "143923", - "2606:3c80:8001:1::/33": "33582", - "2a00:b960::/32": "47544", - "2a01:8840:ad::/48": "207266", - "2a0b:1306:b::/48": "133142", - "2001:559:487::/48": "7015", - "2405:1c0:6a31::/46": "135062", - "240e:3be:3e00::/33": "140308", - "2a02:26f7:de08::/48": "36183", - "2001:678:7c8::/48": "39086", - "2406:840:f890::/48": "212034", - "2a0b:60c0::/29": "205655", - "2a0f:301::/30": "398559", - "2a07:4300:31::/48": "209622", - "2001:559:404::/47": "7016", - "240e:44d:6f80::/41": "4134", - "2600:6c7f:9111::/46": "19115", - "2a0b:76c0::/29": "201011", - "2401:ff80:1505::/46": "133954", - "240a:a17c::/32": "143030", - "2620:101:1000::/42": "589", - "2804:210::/32": "262790", - "2804:463c::/32": "266977", - "2a02:2698:4c00::/42": "42682", - "2600:140a:e001::/31": "20940", - "240e:264:2000::/36": "140330", - "2804:1f3a::/32": "268839", - "2a01:7820::/32": "9063", - "2a0a:3c44::/32": "205415", - "2a0c:75c0::/46": "44486", - "2a10:2ec7:3000::/36": "208861", - "2400:ac40:840::/40": "136255", - "240a:ade1::/32": "146203", - "2600:1008:b0f0::/44": "22394", - "2607:f358:21::/48": "41095", - "2a00:ec8::/37": "38930", - "2a01:7c60::/32": "201198", - "2a02:26f7:d0c4::/48": "36183", - "2001:418:3808::/33": "2914", - "2001:559:c2ad::/48": "7015", - "240a:adf4::/32": "146222", - "2607:3d00::/28": "12083", - "2a04:9740::/29": "196954", - "2a04:9a00:104a::/45": "212157", - "2001:678:f44::/48": "203329", - "2804:478c::/32": "267061", - "2001:19f0:5000::/34": "20473", - "2605:4280::/32": "12189", - "2804:2f40:f00a::/45": "264880", - "2804:3eb4::/32": "266616", - "2a03:4200::/32": "5413", - "2001:1b75:2000::/36": "28852", - "240a:af11::/32": "146507", - "2600:1001:d0d0::/34": "22394", - "2604:d600:15fe::/38": "32098", - "2804:4a40::/32": "267227", - "2806:370:80b0::/44": "28403", - "2001:559:8436::/48": "33667", - "2409:8904:a240::/39": "24547", - "2600:380:8100::/38": "7018", - "2620:153::/40": "6498", - "2a07:4580::/36": "46261", - "2001:67c:2e4c::/48": "48724", - "2804:7b6c::/32": "271431", - "2001:4c88::/32": "49100", - "2604:8200:1::/48": "23089", - "2620:51:8000::/48": "394520", - "2a02:26f7:cc09::/42": "20940", - "2a04:3cc0:800::/35": "31036", - "2001:67c:2604::/48": "8447", - "2610:b0:40f8::/47": "21433", - "2804:35b8::/32": "266302", - "2a02:26f7:dac0::/48": "36183", - "2402:800:97e0::/44": "7552", - "2a03:98c0::/32": "15814", - "2001:4de0:400::/38": "33438", - "240a:a378::/32": "143538", - "2600:1417:39::/46": "20940", - "2604:8600:5000::/34": "14453", - "2804:104c:6000::/40": "263629", - "2804:3e44:3000::/32": "266584", - "2804:458c::/32": "266934", - "2001:559:8764::/48": "33659", - "2406:3003:3030::/41": "55430", - "2600:6c38:130::/41": "20115", - "2804:48f4::/32": "267155", - "2804:5f1c::/32": "269077", - "2402:9e80:10::/48": "20473", - "240a:aa34::/32": "145262", - "2600:1000:fe10::/40": "22394", - "2605:6440:2002::/47": "396356", - "2001:559:168::/48": "20214", - "2001:559:866f::/48": "33662", - "2001:559:c3fd::/48": "33667", - "2405:9000:204::/46": "7474", - "240e:44d:2380::/41": "4134", - "2620:0:890::/48": "54113", - "2a0a:e5c0:23::/45": "209898", - "2803:9800:a447::/40": "11664", - "2804:df0:2::/36": "262775", - "2a0e:97c5:5c0::/46": "20473", - "240a:ae21::/32": "146267", - "2804:62d4::/32": "269321", - "2800:160:1f58::/42": "14259", - "2806:20d:5016::/44": "32098", - "2405:6600:c44::/32": "45845", - "2401:c80::/32": "24111", - "240a:a945::/32": "145023", - "240e:3b6:3e00::/33": "140308", - "2804:6194::/32": "269243", - "2001:978:1c03::/48": "62000", - "2001:c38:9012::/47": "9931", - "2001:4868:224::/48": "7046", - "2800:160:1b1d::/46": "14259", - "240a:a39a::/32": "143572", - "240e:978:a00::/40": "23650", - "2602:fdfa::/36": "397332", - "2804:500::/32": "262485", - "2804:4f60::/32": "268323", - "2a02:26f7:eec4::/48": "36183", - "2a02:cb80:4010::/41": "43766", - "2a06:b740::/29": "31027", - "2a0b:2400::/32": "16097", - "240a:a3d2::/32": "143628", - "240a:a6a0::/32": "144346", - "2800:160:1426::/44": "14259", - "2804:93c:c1::/35": "52878", - "2a01:8840:d9::/48": "207266", - "2001:559:395::/48": "20214", - "2001:678:47c::/48": "42214", - "2001:43f8:30::/48": "6968", - "2a0e:78c0::/29": "174", - "2001:df0:e480::/47": "7545", - "2607:f5b8::/32": "46208", - "2804:6bf4::/32": "270436", - "2a04:92c6::/31": "62240", - "2a10:bac0::/32": "39396", - "2605:7900:16::/44": "19133", - "2a02:26f7:d949::/42": "20940", - "2a02:2ad0:920::/32": "702", - "2a0a:dc05::/30": "51262", - "2405:8a00:8001::/43": "55824", - "2606:7b00:4000::/32": "10538", - "2a10:4646:14::/48": "212065", - "240e:944::/36": "58541", - "2600:1413:2001::/36": "20940", - "2606:2800:5081::/48": "15133", - "2001:1a68:34::/48": "24723", - "2401:d800:bce0::/39": "7552", - "2406:3400:7d::/40": "10143", - "2600:140b:dc01::/34": "20940", - "2a03:5c0::/32": "199254", - "2001:559:8390::/48": "33657", - "2600:1003:9850::/37": "22394", - "2606:2800:4016::/44": "15133", - "2a01:111:202f::/36": "8075", - "2a03:98a0::/32": "203449", - "2804:6df0::/33": "270565", - "2a02:368::/32": "28859", - "2a10:cc40:a00::/40": "20473", - "2001:559:31::/45": "7922", - "2001:67c:26d4::/48": "57801", - "2605:a401:8118::/46": "33363", - "2620:10f:b070::/48": "4185", - "2804:7e2c::/32": "271607", - "2a01:367:deae::/34": "30823", - "2a01:5042:2efd::/48": "202196", - "240e:3bc:c800::/37": "4134", - "2606:2800:7033::/48": "14153", - "2620:10a:b0fd::/46": "15297", - "2800:88:41::/32": "26210", - "2804:2444::/32": "264211", - "2a03:aba0::/29": "786", - "2409:804f:100::/36": "9808", - "2a03:9900:101::/32": "8990", - "2a05:4800::/29": "12722", - "2001:559:81a0::/48": "7015", - "2001:67c:17b0::/48": "21436", - "2402:800:939b::/42": "7552", - "240a:ac4d::/32": "145799", - "2607:f3d0::/32": "27400", - "2a00:1818::/32": "8915", - "2a01:9700:12f4::/39": "8376", - "240a:ac8b::/32": "145861", - "2a07:36c0::/29": "57795", - "2001:dce:d455::/36": "23869", - "240e:44d:1400::/41": "140345", - "2602:fe13:800::/48": "53356", - "2620:67::/48": "22303", - "2a01:330::/32": "15517", - "2001:559:8115::/48": "33287", - "2001:fd8:3042::/45": "132199", - "2600:1404:b401::/38": "20940", - "2600:6000:f927::/48": "11351", - "2804:31dc::/32": "265041", - "2a04:4e40:8230::/44": "54113", - "2001:67c:2d28::/48": "29236", - "2a05:8900:aa1::/48": "42388", - "2a0e:fd45:1001::/38": "44103", - "2a10:9902:210::/48": "212105", - "2c0f:f1d8::/32": "328196", - "2001:468:d01::/48": "3582", - "2001:559:2dc::/47": "33651", - "2401:b400:13::/48": "58536", - "2a0e:6540:a32::/48": "208364", - "2001:648:2e81::/35": "5408", - "2406:840:e010::/47": "213069", - "240a:aa50::/32": "145290", - "2a04:a40::/29": "50324", - "2a06:ef00::/29": "213222", - "2001:978:1d00:2::/47": "174", - "2001:fd8:32b0::/44": "4775", - "240a:a30c::/32": "143430", - "2a01:5b40:ac4::/32": "12996", - "2404:e100::/47": "55685", - "2620:103:a00b::/45": "12148", - "2a02:29a0::/32": "56472", - "2400:8800:302::/33": "3491", - "2800:40:34::/47": "16814", - "2a02:26f7:d280::/48": "36183", - "2a02:2ca7:2e::/48": "58305", - "2a02:ab80::/28": "21334", - "2a0f:fa40::/29": "213162", - "2001:558::/31": "7922", - "2606:18c0:9::/46": "399448", - "2620:0:2ed0::/48": "26711", - "2a0a:7d80::/47": "6697", - "2a0e:2700::/29": "203136", - "2a0e:97c0:240::/44": "211688", - "2001:550:ae01::/35": "174", - "2001:559:c188::/46": "33287", - "2001:4b20:10::4/49": "34288", - "2408:80ea:79a0::/38": "17816", - "2804:70e0::/32": "270753", - "2a01:578:14::/32": "16509", - "2001:fd8:b1b0::/44": "4775", - "240e:90::/34": "140061", - "2607:fdf0:5e40::/47": "8008", - "2804:10c8::/32": "263649", - "2a06:2780::/29": "204195", - "2a0c:e040:127::/43": "200629", - "2a0e:b103:daa::/45": "20473", - "2a02:2e02:2e80::/43": "12479", - "2001:559:8478::/47": "7922", - "240a:a3ed::/32": "143655", - "240a:a433::/32": "143725", - "2600:1008:b170::/40": "22394", - "2606:a000:407::/48": "11955", - "2804:f88::/32": "28665", - "2a00:1288:ef6d::/40": "10310", - "2a07:90c0::/29": "202771", - "2001:559:83fd::/46": "7016", - "2001:1388:8470::/36": "6147", - "2407:45c0::/32": "135714", - "2408:8001:3020::/41": "17816", - "2a02:26f7:de88::/48": "36183", - "240e:438:5420::/43": "140647", - "2402:800:7970::/40": "7552", - "240a:abc9::/32": "145667", - "240a:ac2b::/32": "145765", - "240e:10:a800::/31": "4134", - "2600:80c:900::/40": "701", - "2400:ca0a::/29": "23688", - "2401:ff80:1089::/43": "133954", - "2607:fb90:7f00::/32": "21928", - "2804:6d98::/32": "270543", - "2a0c:5700::/34": "30893", - "2406:daa0:e040::/44": "16509", - "2804:4c::/32": "8055", - "2804:7d90:2::/32": "271569", - "2a02:118:2::/48": "43811", - "2a03:f87:ffff::/48": "57169", - "2001:559:157::/48": "33491", - "2001:9b8::/46": "6774", - "2001:44b8:606a::/45": "7545", - "2600:1404:a001::/38": "20940", - "2001:67c:1444::/48": "43832", - "2c0f:4000::/32": "1828", - "2409:8028:800::/40": "56041", - "240e:620::/30": "140061", - "2801:80:680::/48": "22819", - "2804:9a8::/34": "262979", - "2a02:26f7:b6c8::/48": "36183", - "2a0a:2180::/29": "2119", - "2001:df2:e600::/48": "133661", - "2001:fd8:302a::/43": "4775", - "2404:300::/32": "38901", - "2408:8956:3c00::/40": "17622", - "240e:473:8e50::/39": "4134", - "2610:b0:4038::/47": "21433", - "2a00:fc00:e011::/48": "212825", - "240a:a983::/32": "145085", - "2001:559:c067::/44": "33491", - "240a:a318::/32": "143442", - "2804:2bb4::/32": "265170", - "2a02:13f8::/32": "25260", - "2a02:26f7:dcc4::/48": "36183", - "2a0e:b105:4ec::/46": "20473", - "2605:6900::/32": "174", - "2a01:7780::/32": "3225", - "2001:42d0::/44": "33764", - "2600:1002:b030::/40": "22394", - "2606:1e00::/32": "12067", - "2a00:1908:fffa::/48": "205365", - "2a0f:c800::/29": "198385", - "2408:8656:c53::/35": "17622", - "2a07:9cc5::/32": "209589", - "2c0f:fda8::/32": "37349", - "2001:559:8567::/48": "33668", - "2407:ca00::/32": "45280", - "2408:8957:6300::/40": "17816", - "2804:7cd8::/32": "271522", - "2a02:1f8::/32": "8426", - "2a04:4e42::/47": "54113", - "2a0f:2fc0::/32": "203115", - "2c0f:f000:400::/40": "36891", - "2001:350::/32": "7671", - "2804:37a0::/32": "266425", - "2a02:9f8:9000::/44": "6900", - "2001:559:8540::/48": "33652", - "2001:df0:4::/48": "681", - "2409:8c85:aa15::/46": "9808", - "2602:250::/28": "46690", - "2804:59d4::/32": "268728", - "2a01:358:101a::/34": "9121", - "2a02:582:5c00::/34": "6799", - "2804:417c::/32": "267436", - "2001:559:827b::/45": "7922", - "2401:3c00::/43": "38322", - "2402:800:5e40::/43": "7552", - "2409:408c:2000::/32": "55836", - "2409:8b79::/29": "9808", - "240a:a6d7::/32": "144401", - "2604:d600:573::/40": "32098", - "2407:14c0::/32": "138077", - "240a:a03b::/32": "142709", - "2a00:c1e0::/29": "59891", - "2a0a:2f81::/32": "47891", - "2001:559:c264::/48": "33652", - "2407:7040::/32": "142299", - "240a:aed5::/32": "146447", - "2600:6c09:2::/30": "20115", - "2804:1790::/32": "53085", - "2a04:4e40:6a30::/41": "54113", - "2409:8028:3004::/47": "56041", - "2620:104:2011::/46": "40185", - "2a02:26f0:19::/46": "20940", - "2001:559:c34d::/46": "7016", - "2001:67c:1110::/47": "21406", - "240e:6ba:4000::/43": "140315", - "2409:4021:2000::/29": "55836", - "2600:1000:ff00::/44": "6167", - "2607:f110:e280::/39": "21889", - "2a07:23c0::/48": "13213", - "2a0d:5082:65::/29": "62240", - "2401:3200::/32": "10019", - "2402:c7c0::/32": "137576", - "2405:9800:c908::/48": "45430", - "240a:aa53::/32": "145293", - "2804:6df0:8000::/33": "270565", - "2a09:4c0:101::/44": "58057", - "2001:13c7:601d::/48": "64103", - "2409:8062:900::/35": "9808", - "240a:a88e::/32": "144840", - "2804:14d:c6fa::/45": "28573", - "2a0e:b107:3d0::/47": "207687", - "2001:559:4ea::/45": "7015", - "2001:c48::/32": "9457", - "2600:370f:3743::/45": "32261", - "2406:3000:a:2::/61": "4657", - "2a01:258::/32": "31122", - "2a03:d9c0:8000::/48": "3214", - "2a0e:b107:1567::/44": "209209", - "2001:67c:714::/48": "224", - "2401:d800:6f0::/39": "7552", - "240e:473:7250::/39": "4134", - "2600:40ff:fc15::/40": "701", - "2606:3980::/48": "55229", - "2a02:26f7:cc4c::/48": "36183", - "2406:9dc0:1011::/48": "10153", - "240a:a0ad::/32": "142823", - "2800:160:1860::/46": "14259", - "2804:5c84::/32": "268913", - "2407:8f80:a51a::/48": "135636", - "2602:ff36:301::/40": "395348", - "2606:2800:6060::/48": "15133", - "2a01:4020:33::/32": "25369", - "2a0e:3dc0::/32": "49981", - "2a0f:cc87:f000::/36": "208861", - "2401:5f80:7::/33": "38731", - "240a:a118::/32": "142930", - "2804:7b9c::/32": "271439", - "2a01:360::/29": "34549", - "2a0a:e5c0:10::/48": "213081", - "2001:470:79::/48": "393763", - "2001:678:10c::/48": "21155", - "2001:67c:2828::/48": "61013", - "2409:8053:3000::/47": "56047", - "2600:140b:d001::/37": "20940", - "2600:6c08::/31": "20115", - "2a00:b420::/32": "60478", - "2001:559:c319::/48": "7725", - "2001:678:228::/48": "2863", - "2001:1960:200::/32": "5650", - "2404:bc80::/47": "64072", - "2a01:41e0::/31": "62336", - "2401:2700:3::/48": "9286", - "2408:8957:e900::/40": "17816", - "2620:11c:f::/48": "27647", - "2a05:ab40::/29": "25180", - "2a03:b8c0:12::/48": "202276", - "2a0e:46c6::/40": "207968", - "2001:559:87db::/48": "7015", - "2001:678:464::/48": "34087", - "2001:67c:2dc::/48": "2119", - "2607:fb28::/44": "9", - "2804:63b4::/32": "269378", - "2a09:be40:1140::/45": "208755", - "2409:8924:6700::/36": "56046", - "2001:559:8199::/48": "7015", - "2001:678:9c8::/48": "56796", - "2404:bd00:a::/45": "58678", - "2804:5dc::/41": "53019", - "2001:4408:c003::/34": "4758", - "2408:8406:7800::/39": "4808", - "240a:a5d8::/32": "144146", - "240e:44d:4880::/41": "4134", - "2804:44e8::/39": "267660", - "2a00:4802:2300::/37": "13124", - "240e:980:2700::/40": "133774", - "2804:21ec::/32": "264582", - "2c0f:f8f0::/32": "30969", - "2604:d800:1002::/32": "20355", - "2001:df2:ee00::/48": "131107", - "2403:d300:2800::/32": "15932", - "2405:d300:21::/40": "17477", - "2405:d340::/32": "134712", - "2408:8956:800::/40": "17622", - "240a:a9da::/32": "145172", - "2600:100d:a100::/43": "6167", - "2803:25e0::/32": "28032", - "2a02:29b8::/32": "51852", - "2606:fa80::/32": "18616", - "2607:f0d8::/29": "7385", - "2404:c400:404::/32": "9328", - "2606:a000:c07::/48": "11955", - "2a01:1d8::/29": "8508", - "2a02:26f7:b5c4::/48": "36183", - "2a03:2880:f11a::/45": "32934", - "2001:559:82ae::/47": "7015", - "2606:4700:80c0::/44": "13335", - "2801:b0::/40": "52888", - "2001:678:b70::/48": "207886", - "2408:8456:7200::/42": "17622", - "2620:11d:9003::/48": "14805", - "2a0c:9600::/29": "42265", - "2604:e8c0:8::/32": "62805", - "2a00:df00::/29": "34790", - "2a02:26f0:af01::/40": "20940", - "2a04:3542:c000::/29": "202053", - "240e:86:3000::/37": "137688", - "2602:fe90:800::/46": "35913", - "2806:107e:22::/32": "8151", - "2a03:1380::/32": "12423", - "2001:480:b1::/39": "668", - "2404:a800:7001::/32": "9498", - "2602:ffe4:c0d::/48": "21859", - "2a00:8643::/29": "203993", - "2c0f:fe38:2060::/39": "33771", - "2001:fd8:2138::/40": "4775", - "240a:ab14::/32": "145486", - "2620:85:e000::/48": "46616", - "2620:171:36::/48": "715", - "2a00:1188:11::/44": "8455", - "2001:13d2:6805::/46": "7303", - "2620:16e:487::/48": "3147", - "2804:14c:f200::/40": "28573", - "2a01:7e8::/32": "42525", - "2a01:8840:f::/48": "40490", - "2a02:2bb8::/32": "24851", - "2a0f:5707:aa10::/46": "208814", - "2001:480:31::/48": "5887", - "240a:adfc::/32": "146230", - "240a:ae60::/32": "146330", - "2607:fcd0:bbc0::/33": "8100", - "2800:650:101::/32": "28032", - "2a00:f500::/29": "13194", - "2a04:8484::/30": "21413", - "2a09:dd81::/30": "12637", - "2409:8035::/28": "9808", - "240a:a9e7::/32": "145185", - "240a:ad17::/32": "146001", - "2604:7c0:200::/36": "395841", - "2605:a404:1bd::/41": "33363", - "2804:151c::/32": "263371", - "2806:2f0:4184::/42": "17072", - "2a0b:dd80::/32": "50869", - "2001:4408:8500::/45": "4758", - "2607:fb10:7036::/44": "2906", - "2620:49:40c0::/48": "36062", - "2804:6fc:cfff::/34": "28158", - "2a05:6cc0::/29": "25151", - "2405:6e00:804::/46": "133612", - "240a:a551::/32": "144011", - "240a:a572::/32": "144044", - "240a:a90d::/32": "144967", - "2800:bf0:2801::/48": "27947", - "2a0f:c083::/32": "51837", - "2402:b780:54::/32": "64047", - "2402:c4c0:180::/32": "132933", - "240a:a4c7::/32": "143873", - "240a:ad70::/32": "146090", - "2804:8cc::/47": "272413", - "2804:54d8::/32": "268673", - "2a0d:4d00:82::/47": "44794", - "2c0f:fe78::/33": "37239", - "240e:30f:4a00::/35": "137688", - "2408:8644::/35": "140726", - "2600:140f:5201::/39": "20940", - "2620:12c:7004::/48": "13652", - "2a03:2880:f246::/43": "32934", - "2001:559:8747::/48": "7015", - "2401:ff80:1001::/46": "133954", - "240e:3b9:dc00::/34": "4134", - "2602:ff6e:19::/36": "63202", - "2606:5200:d000::/34": "32477", - "2620:e6::/48": "394275", - "2a00:7180::/33": "15557", - "2a07:1c42:c::/48": "209089", - "2405:201:fffc::/30": "55836", - "2600:6c3a:c4d::/38": "20115", - "2607:fda8:800a::/45": "54004", - "2803:c560:e000::/36": "207688", - "2804:14d:7600::/40": "28573", - "2a03:2887:ff19::/48": "63293", - "2a0e:9a80::/29": "56708", - "2402:800:b950::/38": "7552", - "2408:8456:ca00::/42": "17622", - "2a00:1d88::/32": "13249", - "2a01:4a8::/32": "33873", - "2a02:578:7c00::/32": "9031", - "2a0f:ca00:8000::/48": "42209", - "2001:559:c1ad::/48": "7015", - "2407:b840::/32": "142614", - "2604:a140:f000::/48": "11414", - "2620:12d:d000::/48": "63415", - "2a0f:9400:8008::/48": "207756", - "2c0f:f878::/32": "37109", - "2801:1fc:36::/48": "27951", - "2a02:4540:7000::/43": "197207", - "2a02:ac80:c01::/39": "25145", - "2400:fc00::/42": "45773", - "2408:8456:1900::/42": "17622", - "240e:3ba:2200::/37": "136198", - "2001:67c:11ac::/48": "199470", - "2402:28c0:5::/39": "136620", - "2801:80:3510::/48": "268843", - "2804:3afc::/32": "266123", - "2a03:6e60::/48": "9085", - "2a04:2b01::/30": "42044", - "2a10:5500::/32": "33874", - "2001:559:8127::/48": "33660", - "2001:559:871e::/48": "33491", - "2001:b000:592::/47": "3462", - "2a00:1560:11::/45": "29684", - "2001:fd8:3430::/44": "4775", - "2600:1003:b470::/40": "22394", - "2800:130::/32": "27820", - "2001:559:852d::/48": "33662", - "2405:7a40::/32": "132808", - "240a:a1ed::/32": "143143", - "2800:bf0:2204::/40": "27947", - "2a03:bc00::/32": "29086", - "2402:800:9571::/40": "7552", - "2409:8e14:4000::/34": "56044", - "240a:ab25::/32": "145503", - "2800:160:1886::/43": "14259", - "2a04:4e40:4800::/48": "54113", - "2a0a:5580:1002::/47": "208687", - "2600:c0e:3010::/48": "26558", - "2600:1014:b130::/40": "22394", - "2600:1014:f110::/36": "22394", - "2606:ec00:1000::/36": "40328", - "2607:9800:a10a::/33": "15085", - "2a02:2bc0::/32": "31708", - "2001:559:133::/48": "33287", - "240a:a106::/32": "142912", - "2804:3214::/32": "265054", - "2804:4fbc::/32": "268346", - "2a02:26f7:d080::/48": "36183", - "2a0c:d240::/29": "43341", - "2001:559:188::/48": "7922", - "2a0a:f500::/32": "6883", - "2405:b900:4000::/48": "55701", - "2801:1d:800::/48": "267928", - "2804:3d60::/32": "266527", - "2a02:f38:2::/48": "15499", - "2a02:26f7:e848::/48": "36183", - "2a03:5640:f000::/41": "16509", - "2a04:9b47::/48": "56740", - "2a0e:b107:c00::/45": "212888", - "2001:559:14b::/48": "33660", - "2804:90c::/40": "262617", - "2804:5b58::/32": "268836", - "2a06:1c5:b::/40": "207455", - "2001:550:3405::/39": "174", - "240a:abdc::/32": "145686", - "2a02:d6c0::/29": "34524", - "2c0f:f6e8::/32": "37315", - "2401:d800::/42": "7552", - "2620:0:2e61::/48": "29997", - "2a02:ed04::/39": "50304", - "2804:3fd8:c001::/34": "265919", - "2804:69d8::/32": "270295", - "2a03:5ac0::/32": "199587", - "2001:df0:3d80::/48": "18124", - "2405:9f40::/32": "139898", - "2408:8456:3800::/41": "17623", - "2620:bb:c000::/48": "33151", - "2a02:5a80::/29": "197729", - "2a0d:8b00::/29": "208861", - "2605:b080::/32": "11708", - "2620:13d:f004::/40": "22711", - "2804:44f0::/32": "267662", - "2804:46f0:c1::/32": "267021", - "2604:2e80:2400::/38": "30036", - "2606:9200::/32": "6428", - "2a02:26f7:dc4d::/42": "20940", - "2408:8256:359f::/38": "17816", - "240a:a4ac::/32": "143846", - "2804:c98::/32": "52726", - "2a0a:54c1:25::/46": "62240", - "2400:df00::/32": "18260", - "240a:a00f::/32": "142665", - "2804:1464::/32": "52630", - "2001:559:8553::/48": "7922", - "240e:980:4c00::/40": "58519", - "2804:2e1c:e500::/38": "265324", - "240a:a032::/32": "142700", - "2a02:26f7:ec11::/42": "20940", - "2a03:5f00::/39": "29644", - "240e:3bb:1400::/38": "134773", - "2620:149:1010::/42": "714", - "2803:9800:9a01::/34": "11664", - "2a03:d60:2::/48": "201743", - "2a03:4ba0::/48": "15669", - "240a:ac68::/32": "145826", - "2600:1003:a000::/44": "6167", - "2600:1408:1001::/36": "20940", - "2605:6c00:9::/48": "10255", - "2804:2a98::/32": "264082", - "2001:418:8002::/47": "2914", - "2804:14d:2::/40": "28573", - "2a04:4e40:9600::/48": "54113", - "2c0f:efa8::/32": "328368", - "2408:8256:3aa0::/39": "17816", - "2408:8956:6200::/40": "17622", - "2403:6380:24::/41": "212237", - "2408:8956:d100::/38": "17816", - "240a:a944::/32": "145022", - "2a02:2338::/32": "48854", - "2a06:d480::/29": "59701", - "2a0d:1a40:fa0::/47": "202313", - "2a0f:607:1100::/44": "212425", - "2409:8c30:1110::/38": "9808", - "240a:a096::/32": "142800", - "2804:6494::/32": "269436", - "2a01:b740:a27::/44": "714", - "2a02:2339::/36": "207199", - "2a00:79e1:f07::/44": "36384", - "2001:559:8128::/48": "13367", - "2405:1800::/32": "9999", - "2620:0:28a0::/46": "33522", - "2800:160:1679::/40": "14259", - "2804:45c4::/32": "266948", - "2804:48fc::/32": "267157", - "2a00:dd0:aaab::/35": "47869", - "2407:b9c0:f000::/36": "57695", - "2804:14c:3f00::/40": "28573", - "240a:aefa::/32": "146484", - "240e:4b:c000::/37": "139018", - "240e:fe:6000::/32": "136200", - "2603:c000::/35": "31898", - "2620:171:200::/40": "715", - "2804:478::/32": "22250", - "2a00:1eb8:c001::/48": "50065", - "240e:3b7::/35": "134773", - "2606:bc00:9000::/34": "19419", - "2804:4ef4::/34": "268294", - "2a01:111:2003::/48": "8068", - "2a10:8701::/32": "212109", - "240a:a454::/32": "143758", - "2804:3840::/32": "266465", - "2a07:1c44:460::/44": "206161", - "240a:a765::/32": "144543", - "2804:3114::/32": "264991", - "240a:a1d2::/32": "143116", - "2604:b200::/32": "29", - "2804:323c::/32": "262367", - "2804:40b8::/32": "265977", - "2804:7ba4::/32": "271445", - "2a02:26f7:c7c1::/46": "20940", - "2a0e:6901:500::/40": "57695", - "2406:840:fcc0::/44": "132623", - "2408:8956:9c00::/40": "17622", - "240a:abf7::/32": "145713", - "2a05:5180::/47": "211262", - "2a0a:fd40::/29": "44851", - "2408:8459:fd00::/38": "17816", - "2801:1f:f000::/48": "19429", - "2804:23c0:2100::/37": "26218", - "2804:81ec::/32": "272486", - "2a00:e760::/32": "8368", - "2a07:f7c7:ffff::/48": "39020", - "2001:559:3ea::/48": "33656", - "2001:67c:2af0::/48": "201271", - "2a02:26f7:e0c5::/46": "20940", - "2a0e:8f02:f023::/48": "211522", - "2001:559:846c::/48": "20214", - "2401:d800:9020::/41": "7552", - "2405:da00:2::/43": "38235", - "2606:5000:4c00::/39": "209", - "2806:2f0:6161::/40": "17072", - "2a02:2ba0::/32": "42781", - "2c0f:fdd0::/32": "37358", - "240e:86:3800::/33": "4134", - "2607:f368:2100::/36": "32982", - "2a11:7c0::/32": "211084", - "2001:67c:245c::/48": "49762", - "2406:a4c0::/32": "141120", - "2620:14d::/36": "17324", - "2804:5ac::/32": "10412", - "2a00:cb20:1200::/34": "60266", - "2c0f:eb80::/33": "328029", - "2001:470:ea::/48": "16524", - "240e:109:8025::/48": "134756", - "2804:7510::/32": "271021", - "2a02:970:3281::/32": "44002", - "2804:f4::/32": "26606", - "2001:559:815e::/48": "33668", - "2001:678:6c4::/48": "202383", - "2400:a300::/32": "18278", - "2403:f880:6000::/39": "33438", - "2408:8957:7200::/40": "17622", - "2604:6600:10::/42": "40676", - "2607:f4e0:300::/32": "4150", - "2804:2d88::/32": "265288", - "2804:3248::/32": "61582", - "2a00:86c0:2088::/47": "2906", - "2a03:d000:6400::/39": "31205", - "2001:df4:9f00::/48": "135722", - "240e:473:8a00::/41": "140485", - "2600:100d:9010::/40": "22394", - "2800:bf0:2400::/45": "52257", - "2a06:3080:8002::/30": "25595", - "2607:fea8::/32": "812", - "2806:1070:cefe::/48": "20940", - "2a00:f30::/48": "12418", - "240a:a1f0::/32": "143146", - "240a:ad59::/32": "146067", - "240e:108:25::/48": "134756", - "2a0c:98c0::/29": "49223", - "2001:1248:9500::/41": "11172", - "2408:8256:f96::/35": "17622", - "2804:5f08::/32": "269072", - "2a02:cc4:2f0::/44": "8211", - "2a02:26f7:de05::/46": "20940", - "2a00:b700:2::/45": "49392", - "2403:6200:7105::/37": "45758", - "2408:8456:ed00::/42": "17622", - "2600:1400:e001::/35": "20940", - "2600:140f:9001::/37": "20940", - "2607:fcd0:fa80:3c01::/54": "8100", - "2610:18:8105::/36": "2828", - "2804:c48:e300::/36": "52687", - "2001:1248:84cf::/43": "11172", - "2803:5200::/48": "52439", - "2c0f:fa28::/32": "37054", - "2001:559:726::/48": "33659", - "240a:a458::/32": "143762", - "240a:af05::/32": "146495", - "2600:6c38:b42::/45": "20115", - "2801:19:c800::/48": "64050", - "2804:4fb4::/32": "268344", - "2001:559:c3e5::/48": "7725", - "2001:7f8:46::/48": "51988", - "2001:df6:6900::/48": "18229", - "240a:aecd::/32": "146439", - "2804:37b8::/32": "266431", - "2a02:4780:8::/46": "47583", - "2a02:f7c0::/32": "49273", - "240e:473:1000::/41": "140485", - "2804:f24:f000::/36": "263567", - "2804:4f6c::/32": "268326", - "2a00:9000::/29": "20910", - "2a0d:da00::/32": "205072", - "2a10:4740:40::/42": "212806", - "2001:559:53c::/48": "21508", - "2001:948:58::/47": "1653", - "2404:2a00::/32": "56089", - "2409:8924:2300::/37": "56046", - "2a01:388::/29": "42689", - "2605:3380:4149::/45": "12025", - "2a03:e1c0::/32": "199421", - "2620:3a:c000::/48": "21976", - "2804:2a68::/32": "262435", - "2405:43c0:1000::/48": "139636", - "2607:f1d0::/32": "11383", - "2a02:26f0:2501::/36": "20940", - "2a02:26f7:c041::/46": "20940", - "2001:dcd:23::/48": "14618", - "240e:44d:5b00::/41": "140345", - "2a06:c00::/30": "59414", - "2001:43f8:7b0::/48": "37578", - "2001:44b8:4061::/48": "4739", - "240a:a281::/32": "143291", - "2604:66c0::/32": "6528", - "2604:e7c0:10::/48": "174", - "2001:67c:2b04::/48": "28771", - "240e:438:7840::/38": "4134", - "2a01:9820::/32": "62086", - "2405:4800::/39": "18403", - "2804:3e98::/32": "266608", - "2a03:12c0::/32": "199672", - "2a0c:2f07:72::/48": "208024", - "2401:ff80:1a85::/44": "133954", - "240a:a254::/32": "143246", - "240e:100::/42": "4134", - "240a:a99e::/32": "145112", - "2804:4694::/32": "266998", - "2001:1998::/44": "7843", - "240a:a6a1::/32": "144347", - "2804:2cc0::/32": "265241", - "2804:39f0::/32": "266060", - "2a00:8780::/32": "8829", - "2a01:6380::/32": "25540", - "2001:678:bc4::/48": "62126", - "2408:8459:6610::/42": "17623", - "2600:1417:60::/48": "20940", - "2800:160:2a4a::/39": "14259", - "2801:c4:19::/48": "22122", - "2607:6100:1005::/48": "23026", - "2607:f478::/32": "18540", - "2804:188c::/32": "61939", - "2804:3294::/32": "265086", - "2a00:1ba8::/32": "57653", - "2a04:4e40:7630::/41": "54113", - "2a10:2f01:248::/48": "208193", - "2402:4480:305::/32": "174", - "2a02:26f7:b585::/46": "20940", - "2a0e:b107:fff::/48": "42394", - "2001:559:c3aa::/48": "33668", - "2001:67c:1058::/48": "50345", - "2408:8957::/40": "17622", - "2804:76c0::/32": "271132", - "2001:12f8:4::/47": "11644", - "2409:8052:802::/40": "56047", - "2804:12c0::/32": "263496", - "2804:41d0::/38": "267458", - "2a0e:6500::/29": "40970", - "2a0e:b107:ebf::/48": "212120", - "2404:e640::/32": "136697", - "2409:8914:9900::/40": "56044", - "2604:d600:c32::/45": "32098", - "2a0b:f940:1af3::/34": "205373", - "2a0f:c583::/29": "208861", - "2a04:4e40:200::/48": "54113", - "2001:559:5ae::/47": "20214", - "2001:559:c3f9::/48": "33662", - "2001:dd8:7::/48": "187", - "2001:1890::/35": "7018", - "2001:4878:4215::/46": "12222", - "240e:924:5000::/32": "4134", - "2804:214:8460::/40": "26615", - "2001:44c8:40ff::/39": "131445", - "2401:7080::/32": "24157", - "2408:822e::/27": "4837", - "2605:2cc0::/32": "395494", - "2804:231c::/32": "61591", - "2a02:738::/32": "5588", - "2804:29f0::/32": "264046", - "2804:3cc0::/32": "266232", - "2a02:26f7:bd89::/42": "20940", - "2a03:b840:2::/47": "61221", - "2a10:87c0::/29": "49820", - "240e:105:f000::/37": "4134", - "2602:ff84:c::/48": "36351", - "2800:484:3200::/36": "14080", - "2801:80:17b3::/41": "61580", - "2c0f:fe20::/32": "18931", - "2001:df0:251::/48": "18055", - "2402:6a40:6::/48": "135718", - "2801:1f:b000::/48": "266715", - "2804:3360::/32": "262725", - "2a00:1ec8:39::/41": "2854", - "2a01:9aa0::/32": "200999", - "2001:559:81e8::/48": "33489", - "240a:aef8::/32": "146482", - "2800:485:fe00::/48": "14080", - "2a02:26f7:d4c5::/46": "20940", - "2a0a:2100::/29": "199624", - "2001:559:8020::/43": "7922", - "2401:1a80::/32": "59374", - "2408:8645::/35": "140726", - "2803:19a0::/32": "267714", - "2a0e:b107:f08::/45": "9886", - "2610:a1:1003::/45": "397228", - "2001:559:91::/46": "7922", - "2001:c20:487c::/47": "3758", - "2406:840:e030::/44": "142418", - "2409:8914:7000::/36": "56044", - "2409:8a51:1100::/30": "56047", - "240e:438:2c20::/43": "140647", - "2600:6c7f:9310::/44": "20115", - "2a00:1a28:1106::/48": "33886", - "2a09:f7c0::/29": "49028", - "2a0d:da40::/29": "210095", - "2001:559:c3ec::/47": "7015", - "2001:1270:2000::/35": "22908", - "2001:43f8:b20::/48": "327074", - "240a:af71::/32": "146603", - "2803:9800:b8c7::/44": "11664", - "2804:5ff8::/32": "269137", - "240a:a2c7::/32": "143361", - "240e:357:5c00::/34": "134419", - "240e:3bd:f100::/36": "4134", - "2620:0:dc0::/49": "683", - "2804:1070:2000::/36": "28209", - "2804:2e70::/32": "265346", - "2a0d:1ac3::/32": "44050", - "2605:ffc0::/32": "398259", - "2804:2968:c000::/34": "264013", - "2a02:ee80:4169::/48": "3573", - "2400:9380:8201::/48": "4134", - "2408:8956:6c00::/40": "17622", - "2800:b70:801::/48": "262191", - "2001:559:83e4::/48": "7922", - "2403:8600:ea88::/46": "131317", - "2406:f240::/32": "131963", - "2a00:6000::/32": "35012", - "2a02:26f0:dc01::/39": "20940", - "2a0d:c7c0::/32": "55158", - "2400:dd0b:1006::/29": "7497", - "2404:3d00:40ea::/43": "3573", - "2408:8956:7500::/40": "17816", - "2607:f518:200b::/37": "46887", - "2806:2f0:6061::/40": "17072", - "2a00:ad00::/34": "41897", - "2a01:280:310::/48": "1257", - "2001:559:438::/48": "7016", - "2402:3a80:1730::/48": "38266", - "2604:7ac0:b00::/37": "12213", - "2804:fdc:b000::/33": "263608", - "2a0a:9040::/29": "25486", - "2001:559:c0bb::/45": "7922", - "2001:559:c192::/48": "7015", - "240e:a66:2600::/31": "4134", - "2602:803:c006::/48": "26667", - "2a0d:1f80::/32": "205614", - "2001:559:8506::/48": "33659", - "2406:8500::/32": "134773", - "240a:ac99::/32": "145875", - "2600:9000:11bf::/48": "16509", - "2a03:ad40:130::/48": "199349", - "2803:e8e0::/32": "269875", - "2804:3034:280::/32": "264936", - "2a01:aec0::/32": "41549", - "2a0e:8f02:201c::/48": "213021", - "2001:cb0::/38": "4637", - "2001:2090::/31": "3301", - "2001:43f8:b80::/48": "328017", - "2402:800:358d::/43": "7552", - "240a:a85e::/32": "144792", - "2602:fcdd::/36": "398697", - "2400:5300:4::/48": "45815", - "240a:a8a4::/32": "144862", - "2804:e24:fec0::/39": "262417", - "2a07:89c0::/48": "199484", - "2a0b:4940::/29": "205699", - "2a10:4646:60::/44": "212106", - "2804:28e4:e815::/46": "28260", - "2806:230:1022::/48": "265594", - "2806:230:400a::/48": "265594", - "2a00:4800:350::/40": "13124", - "2a0a:380::/29": "49223", - "2800:160:11f9::/38": "14259", - "2800:160:2cdd::/42": "14259", - "2a00:1618::/29": "12577", - "2a03:6300::/32": "15497", - "2001:c20:19::/37": "3758", - "2001:df3:2e80::/47": "9833", - "2001:df4:5d00::/48": "58820", - "2400:8b00:100::/42": "45727", - "2409:8002::/40": "38019", - "240e:965:e600::/36": "4134", - "2401:4900:5aa0::/39": "45609", - "2409:8053:2::/40": "56047", - "240a:a02c::/32": "142694", - "240a:aaaa::/32": "145380", - "2a00:fd40:8::/46": "204402", - "2c0f:ee68::/32": "328271", - "2001:559:7a5::/48": "7016", - "2405:fd80:900::/37": "135391", - "2803:f300::/32": "52405", - "2804:14c:de00::/41": "28573", - "2804:1d0::/32": "262770", - "240a:aa1b::/32": "145237", - "2600:1014:b100::/42": "6167", - "2001:678:c0::/48": "51058", - "2404:b000::/36": "9822", - "2a01:b747:61d::/40": "714", - "2001:67c:1430::/48": "207076", - "2400:f940::/43": "45766", - "2405:2900::/36": "132198", - "240a:ac85::/32": "145855", - "240e:3be:1800::/34": "4134", - "2804:1e50::/32": "264421", - "2804:7d04::/32": "271533", - "2a02:dc8::/30": "42656", - "2001:1248:98ad::/43": "11172", - "2404:d200:2000::/32": "9797", - "240a:a1d1::/32": "143115", - "240a:a5c1::/32": "144123", - "2600:1404:b001::/37": "20940", - "2800:160:1f3c::/41": "14259", - "2806:230:403c::/48": "265594", - "2001:57a:4044::/34": "22773", - "2001:728::/32": "2914", - "240a:adae::/32": "146152", - "2604:8580::/32": "55140", - "2a02:26f7:fb09::/42": "20940", - "2a0e:3840:2::/48": "40676", - "2a0e:a680:1::/48": "61157", - "2400:c540:54::/42": "59238", - "2600:100f:b0e0::/43": "22394", - "2602:fc42:2::/48": "203690", - "2804:4a50::/32": "267232", - "2804:14d:e650::/42": "28573", - "2804:f30::/32": "263569", - "2804:4334::/32": "267555", - "2a03:8180:1f00::/34": "36351", - "2409:8d14:1700::/36": "56044", - "240e:438:8440::/38": "4134", - "2804:14c:bba9::/45": "28573", - "2a00:82c0::/32": "198433", - "2a09:c5c0::/32": "205718", - "2001:559:c1ca::/48": "21508", - "2001:67c:184c::/48": "35600", - "240a:a127::/32": "142945", - "240e:974:e01::/35": "4134", - "2600:1417:1800:300::/48": "20940", - "2a02:f08:1100::/32": "42184", - "2a10:5b00::/29": "208256", - "2607:4b80::/32": "7018", - "2a00:a900:7aff::/32": "60819", - "2a06:e881:121::/48": "202313", - "2c0f:f088::/32": "328471", - "2001:5a0:4605::/36": "6453", - "2001:1248:59c3::/45": "11172", - "2a00:d320::/29": "15600", - "2a0b:4340:a2::/44": "205532", - "2001:67c:9c::/48": "35733", - "2001:67c:2294::/48": "9052", - "240e:44d:6480::/41": "4134", - "2600:140b:2201::/39": "20940", - "2600:2c00::/33": "7349", - "2804:77a0::/32": "271155", - "2a03:5a00:1e::/48": "50465", - "2409:8c54:b010::/28": "56040", - "2604:9fc0::/32": "63270", - "2806:2f0:7181::/42": "17072", - "2a00:cc0:ffff::/29": "13237", - "2a00:1490:f1ea::/48": "42416", - "2a04:4e40:ca30::/41": "54113", - "2a00:801:4c::/28": "1257", - "2400:9380:9005::/46": "4809", - "2401:3bc0::/45": "137409", - "240a:a96a::/32": "145060", - "240e:146:c000::/34": "4812", - "240e:438:640::/36": "4134", - "2606:6c40::/32": "25780", - "2800:68:1e::/42": "61468", - "2001:4878:151::/48": "12222", - "2804:7c::/32": "28585", - "2a09:407:2000::/32": "208861", - "2405:1c0:6735::/41": "55303", - "240e:108:11b0::/48": "58461", - "2804:14d:5891::/42": "28573", - "2804:1230:20c0::/42": "263462", - "2a0f:f400::/29": "40970", - "2404:0:5ffa::/45": "24154", - "240a:aa82::/32": "145340", - "240e:473:8000::/41": "140485", - "2600:1407:1d::/48": "20940", - "2804:5c0:8::/32": "262537", - "2804:7fb4::/34": "271704", - "2803:5440:334::/48": "264738", - "2a09:48c0::/29": "6735", - "2a0e:8180::/48": "48749", - "2001:468:c07::/48": "396955", - "2401:4900:39b0::/44": "45609", - "2a02:26f0:10b::/45": "20940", - "2a0a:bb00::/29": "64435", - "2a0f:5707:aa14::/46": "208814", - "2001:559:875f::/48": "21508", - "2402:800:97c5::/43": "7552", - "2a0d:7f40::/29": "50559", - "2409:8c85:2000::/43": "56046", - "240e:43:f800::/37": "134761", - "2806:230:4038::/48": "265594", - "2a0d:3842:1230::/48": "57629", - "2001:4e0:1008::/48": "25979", - "2001:559:2ac::/48": "33651", - "2400:addc::/39": "9541", - "2600:1488:a101::/40": "20940", - "2a03:aa00::/36": "48176", - "2402:b9c0::/32": "24259", - "2a00:4802:2100::/38": "13124", - "2408:8957:ab00::/40": "17816", - "2806:230:6009::/48": "11888", - "2001:559:3bb::/48": "22909", - "2403:9140::/47": "135732", - "2605:92c0:f000::/36": "13904", - "2801:80:36c0::/48": "269209", - "2001:559:b5::/48": "33657", - "2a00:7b01::/29": "12338", - "2a06:9300::/29": "35684", - "2402:800:b2e0::/39": "7552", - "240a:ae31::/32": "146283", - "240a:afff::/32": "146745", - "240e:3b3:1400::/38": "134773", - "2804:4948::/32": "267175", - "2a02:ac80:5001::/34": "25145", - "2a04:1c41::/30": "201035", - "2804:4234::/33": "26104", - "2804:80e0::/32": "272418", - "2a0f:a940::/29": "60781", - "2001:1248:5611::/44": "11172", - "2001:4cb8:40c::/29": "28878", - "2602:feb2::/41": "62492", - "2800:160:2453::/40": "14259", - "2804:54cc::/32": "268670", - "2804:6cc::/32": "262607", - "2804:2818::/44": "263940", - "2a0c:b641:c0::/44": "212201", - "2401:d800:59d0::/42": "7552", - "2402:ef0b:8000::/36": "24515", - "2409:8914:a400::/39": "56044", - "2606:4300::/48": "55045", - "2804:c::/32": "28343", - "2804:7958::/32": "271300", - "2a09:6840::/29": "43619", - "2403:7100:10::/48": "132220", - "2406:840:380::/48": "139317", - "240e:3b3:ec00::/35": "140314", - "2804:4b04:4000::/32": "267278", - "2a02:5f40::/32": "199244", - "2001:559:8549::/46": "7015", - "2001:df0:a900::/48": "45701", - "2001:fd8:34f0::/32": "4775", - "2402:6800:763::/45": "55429", - "2600:1014:b0d0::/42": "6167", - "2a09:c140:db::/48": "210079", - "2001:559:82ee::/48": "7015", - "2600:1009:a100::/43": "6167", - "2a05:d050:40c0::/44": "16509", - "2a0d:8200::/29": "205144", - "2001:559:2b6::/48": "33657", - "2408:84f3:2e40::/44": "17623", - "2620:12b:5001::/45": "27381", - "2620:134:c003::/45": "394887", - "2804:7ccc::/32": "271519", - "2806:230:2044::/48": "265594", - "2a00:1cd8::/29": "48620", - "2600:6c38:851::/45": "20115", - "2803:5900:cccc::/48": "263175", - "2804:3cd8::/32": "266238", - "2a05:c440::/48": "47645", - "2001:978:1802::/38": "174", - "2404:8e80:1::/48": "135168", - "2607:f750:a000::/40": "23473", - "2607:fdf0:5e4b::/45": "8008", - "2620:1f:a000::/48": "396231", - "2804:6e08::/32": "270571", - "2a02:26f7:f4c8::/48": "36183", - "2610:38::/32": "21570", - "2001:559:3fa::/48": "33491", - "2402:800:392b::/41": "7552", - "2405:2300:ff42::/48": "13443", - "2604:5dc0::/32": "21788", - "2606:2800:4100::/48": "15133", - "2804:3b9c::/32": "266160", - "2804:8068::/32": "271748", - "2a05:6d40::/29": "202128", - "2610:20:1035::/48": "209", - "2800:68:c0c1::/35": "61468", - "2409:8904:9490::/39": "24547", - "240a:a856::/32": "144784", - "2a10:b740::/29": "202709", - "2001:559:c107::/48": "33667", - "2804:7214::/32": "270831", - "2401:d800:d040::/42": "7552", - "2600:6c38:820::/47": "20115", - "2800:160:15aa::/43": "14259", - "2a04:f580:9000::/46": "4809", - "240a:a192::/32": "143052", - "2600:1408:1000::/48": "35994", - "2620:f6::/48": "26806", - "2404:e100:4000::/47": "55685", - "2800:160:2450::/46": "14259", - "2404:4a00:7a00:1::/37": "45629", - "2409:8718::/31": "134810", - "2620:52:c000::/48": "54538", - "2a00:8a00:2000::/35": "18666", - "2a04:4e40:3a00::/47": "54113", - "2a05:d050:c080::/44": "16509", - "2a09:5f80::/48": "48038", - "2001:678:ac8::/48": "47988", - "2401:803e:2025::/33": "9919", - "240a:ad0b::/32": "145989", - "2a10:5e40::/29": "8875", - "240a:a71a::/32": "144468", - "240a:adad::/32": "146151", - "2600:140b:3c00::/48": "31109", - "2804:13e4::/32": "61902", - "2804:7b94::/32": "271441", - "240a:a943::/32": "145021", - "2604:ff00:ae00::/44": "36271", - "2804:1020:9000::/33": "262544", - "2804:6230::/32": "269281", - "2a02:cb00::/29": "43352", - "2001:42d8::/32": "29571", - "2001:559:4f8::/48": "33489", - "2604:8540:fcd3::/48": "33353", - "2804:750c::/32": "271020", - "2a00:9e00::/32": "25220", - "2a02:26f0:d201::/37": "20940", - "2001:559:c258::/48": "33651", - "2001:7be:1::/31": "12859", - "2407:dc00::/46": "9714", - "2001:579:b950::/40": "22773", - "2001:df2:9900::/48": "134032", - "2001:df3:f780::/48": "141052", - "2607:6500::/32": "7794", - "2a02:26f7:d44d::/42": "20940", - "2a0b:59c2::/29": "16082", - "2602:ff37::/36": "53981", - "2605:c640:105::/44": "62538", - "2620:0:cc0::/48": "36692", - "2001:a17:fffb::/45": "204679", - "2001:1a68:b::/48": "42503", - "2405:84c0:ff17::/48": "9886", - "2408:8000:c038::/45": "140726", - "2600:6c2e::/42": "20115", - "2607:3500:f00::/40": "11228", - "2620:129:f003::/48": "393462", - "2001:559:82aa::/48": "7015", - "2a00:1807::/32": "57728", - "2a01:48a0:4071::/48": "57271", - "2a03:2887:ff33::/48": "63293", - "2408:80ea:74e0::/43": "17623", - "2408:8459:7a30::/41": "17622", - "2600:6:ffc7::/31": "1239", - "2001:678:ca0::/48": "58299", - "2001:43f8:e00::/40": "715", - "2400:6280:101::/48": "132280", - "2600:2000:2100::/42": "31898", - "2806:2f0:2140::/48": "17072", - "2a01:280:358::/48": "207448", - "2c0f:fbb0::/32": "37055", - "2400:e1c0::/48": "58659", - "2403:9800:c042::/44": "133124", - "2803:f00:4c3::/48": "262182", - "2a02:26f7:eb44::/48": "36183", - "2408:8459:ba30::/41": "17622", - "2804:7280::/33": "270857", - "2001:4878:158::/48": "12222", - "2409:8b14::/30": "56044", - "2620:25:6000::/48": "15296", - "2804:7ebc::/32": "271644", - "2001:67c:28cc::/48": "51468", - "2600:1417:3d::/41": "20940", - "2a0f:b00::/29": "43414", - "2001:67c:1718::/48": "2263", - "2409:8904:5cb0::/39": "24547", - "240a:abef::/32": "145705", - "2a0d:2581:3::/48": "209261", - "2405:f080:e00::/46": "136907", - "2409:891e::/31": "24400", - "2605:bcc0::/33": "40718", - "2803:bee0:8000::/36": "269989", - "2a00:dec0::/32": "29695", - "2a0b:69c0::/29": "205619", - "2a06:cfc0::/29": "199837", - "2a11:880::/29": "60987", - "2a02:bf0:2a::/35": "25106", - "2001:df0:27b::/48": "58487", - "2001:df1:fd80::/48": "139787", - "2401:d800:7d20::/41": "7552", - "2401:d800:9080::/42": "7552", - "2600:806:100::/48": "12234", - "2606:7b00:3fff::/48": "6939", - "2801:15a:20::/40": "267788", - "2a05:4880::/29": "199811", - "2a09:1140::/48": "50007", - "2408:8256:3d9f::/28": "17816", - "2408:8459:cd10::/42": "17623", - "2600:9000:119c::/42": "16509", - "2806:230:1030::/48": "265594", - "2001:3c8:d10a::/34": "4621", - "2001:559:c0fe::/48": "7922", - "2406:2000:9c::/48": "38033", - "2804:2e30:31::/48": "265330", - "2a0e:59c0::/29": "207187", - "2001:678:164::/48": "39345", - "2001:c20:7c00::/32": "3758", - "240a:a4cb::/32": "143877", - "240a:afaf::/32": "146665", - "2a00:cb8:39::/48": "15695", - "2a00:1d34:8000::/39": "47331", - "2a02:ca80::/29": "49515", - "2001:559:37f::/48": "33660", - "2001:bf7:870::/35": "44194", - "2600:40ff:fc01::/44": "701", - "2620:d3:8000::/48": "54536", - "2804:62b4:8000::/36": "269313", - "2001:df0:a280::/48": "139225", - "2402:7500:5c0::/48": "24158", - "2600:1403:5c00::/48": "35994", - "2600:1411:8001::/30": "20940", - "2607:f3a0:a003::/48": "399818", - "2800:a40::/42": "22080", - "2803:d200::/32": "28086", - "2c0f:f5d8::/32": "37381", - "2408:8256:379b::/48": "17816", - "2600:6c38:1d8::/45": "20115", - "2605:b600::/32": "53525", - "2803:4d60::/32": "269768", - "2804:25e4:703::/32": "61573", - "2a04:4e40:4630::/41": "54113", - "2800:160:1525::/44": "14259", - "2a02:26f7:d608::/48": "36183", - "2405:e0c0::/48": "63730", - "2409:8c14:8a00::/31": "56044", - "240a:a2f9::/32": "143411", - "2803:d100:9780::/43": "52362", - "2a03:3140:fffe::/47": "61345", - "2a07:ac80::/29": "44812", - "2a0e:7f40::/29": "57756", - "2001:1248:5659::/42": "11172", - "2404:3d00:40a5::/43": "3573", - "2800:4f0:3::/48": "28006", - "2804:665c::/32": "269553", - "2001:559:8121::/48": "33287", - "2001:559:8331::/48": "33652", - "2001:49a0:fbff::/48": "7233", - "240a:a7ab::/32": "144613", - "240e:980:8e00::/40": "4134", - "2600:6c66::/31": "33588", - "2801:c0:3::/48": "16596", - "2a02:26f0:6601::/36": "20940", - "2a03:4680::/29": "25184", - "2001:559:8691::/48": "33659", - "2001:678:c18::/48": "207487", - "2001:67c:2244:8000::/49": "50448", - "2001:a98:100::/48": "5474", - "2401:ff80:1213::/40": "133954", - "2804:7048::/32": "270717", - "2a00:e58::/32": "9022", - "240a:2000::/29": "23844", - "2600:140b:9001::/38": "20940", - "2607:9800:d001::/34": "15085", - "2001:559:875c::/48": "7015", - "240e:64::/32": "4134", - "2604:4e00:4100::/35": "25764", - "2a0f:b4c6::/32": "15317", - "2001:559:c2d9::/48": "33657", - "2001:1ad0::/32": "24953", - "2401:ff80:1793::/36": "133954", - "2404:3d00:500::/33": "3573", - "2406:f100::/32": "58923", - "2a00:1a68:8000::/33": "38955", - "2a10:c5c1:c0de::/48": "211547", - "2607:f368:2c00::/40": "46846", - "2804:17f4::/32": "263260", - "2804:5860::/32": "268125", - "2804:66a0::/43": "269572", - "2a06:d581:3000::/36": "3303", - "2001:4c8:109c::/41": "15290", - "2409:8014:100a::/45": "56044", - "2607:fb10:5064::/34": "2906", - "2a05:c6c0::/29": "49605", - "2406:da70:c000::/40": "16509", - "2804:30c:1400::/32": "28343", - "2001:4870:a24a::/48": "26402", - "240a:ad96::/32": "146128", - "2001:559:c0da::/48": "33652", - "2804:3bfc:1100::/40": "52607", - "2605:1500::/32": "19518", - "2a00:47c0:711::/48": "27435", - "2c0f:fad8::/40": "37019", - "2403:7cc0::/32": "138179", - "2408:8459:fe10::/44": "17622", - "2409:8d14::/43": "56044", - "2803:6780::/32": "264635", - "2804:3288:a200::/35": "52827", - "2a01:c50f:c400::/41": "12479", - "2a0c:6380::/29": "24971", - "2402:79c0:f008::/46": "30060", - "240a:aa40::/32": "145274", - "2a02:3e0::/32": "39837", - "2001:4d0:241a::/48": "1848", - "2400:6100::/32": "137549", - "2404:e00:161::/48": "15695", - "2600:6c38:45b::/45": "20115", - "2a00:1ca8:9c::/48": "58061", - "2a01:58c0::/32": "42487", - "2a03:e581:4::/48": "201057", - "2001:4878:8204::/48": "12222", - "240a:ada3::/32": "146141", - "240e:438:2640::/36": "4134", - "2607:8680::/32": "31972", - "2607:f220:50a::/48": "5766", - "2a09:99c0::/48": "212886", - "2409:801f:3004::/48": "24400", - "2803:3440:9000::/46": "64112", - "2804:71f4::/32": "270822", - "2a05:bd40:a00::/40": "51366", - "2a0d:6500::/29": "200000", - "2402:800:577f::/40": "7552", - "2001:6a8:a002::/35": "2611", - "240e:108:9a::/48": "58466", - "2a00:1197::/32": "206364", - "2a02:26f7:c409::/46": "20940", - "2a02:26f7:dd89::/42": "20940", - "2001:67c:2c88::/47": "60092", - "2a03:2881:3::/44": "32934", - "2a0a:90c0:1002::/43": "205080", - "2803:6700:40::/48": "263210", - "2804:6074::/32": "269168", - "2406:e002:3000::/33": "23655", - "2801:16:1000::/48": "264618", - "2804:4588::/32": "266933", - "2a00:e540::/32": "33964", - "2001:918:ff76::/48": "8300", - "2401:2a80:2::/47": "58793", - "2409:8904:d140::/42": "24547", - "2804:cac::/32": "262748", - "2a0a:a042::/29": "12552", - "2606:2800:4104::/44": "15133", - "2801:80:1e31::/48": "14026", - "2408:840c:c900::/40": "17621", - "240e:3b1:4c00::/35": "136200", - "2a01:b740:a80::/35": "714", - "2a0c:4480:a::/45": "204720", - "2a0d:ab80::/32": "204523", - "2404:4a00:6501:1::/36": "45629", - "2405:1c0:6643::/43": "55303", - "240e:3b9:8200::/35": "140316", - "2602:ff1f::/36": "393635", - "2806:230:6002::/48": "265594", - "2a0f:3f00::/29": "207902", - "2001:4888:8048::/45": "6167", - "2001:4c30::/32": "9085", - "240e:108:81::/48": "4134", - "2606:a000:408::/38": "11426", - "2806:2f0:7261::/40": "17072", - "2a03:8cc0::/32": "61215", - "2a0a:3100::/29": "206799", - "2600:140b:201::/37": "20940", - "2607:f220:400::/47": "3527", - "2801:1e:4800::/48": "269792", - "2a02:c20::/32": "41453", - "2a04:8640::/29": "62275", - "2a0e:fd45:40f8::/48": "60404", - "2c0f:ed18::/32": "328200", - "2001:559:7a3::/48": "7016", - "2620:7a:8000::/48": "30622", - "2804:d7c:1100::/32": "52634", - "2a02:26f7:c108::/48": "36183", - "2a02:26f7:ed48::/48": "36183", - "2a0a:d100::/29": "198551", - "2409:896d:5700::/27": "9808", - "2620:2d:a000::/48": "27282", - "2a02:26f7:e14d::/42": "20940", - "2405:1c0:7953::/42": "55303", - "2a03:8fe0::/32": "200861", - "2800:820::/32": "10697", - "2a00:ac40::/46": "49694", - "2a00:ece1:1::/48": "61050", - "2405:e340::/32": "137067", - "2602:ffe4:c25::/46": "21859", - "2620:1e8:1::/48": "29802", - "2804:68b4:8000::/34": "269710", - "2a02:26f7:dc45::/46": "20940", - "2a0b:f4c0:400::/48": "205100", - "2a06:5040:3::/48": "55933", - "2001:67c:2324::/48": "47904", - "240a:a62d::/32": "144231", - "240a:ac3a::/32": "145780", - "240e:878:200::/39": "137689", - "2604:c6c0::/48": "46323", - "2610:a1:1008::/47": "397228", - "2806:2f0:9621::/41": "17072", - "2401:d1c0::/33": "136994", - "2409:804b:2b08::/48": "9808", - "2a02:26f7:d0c1::/46": "20940", - "2001:ee0:8a40::/37": "45899", - "240a:a2c2::/32": "143356", - "240e:3b4:6400::/35": "140312", - "2602:fd6b::/36": "36043", - "2804:14d:b087::/41": "28573", - "2a02:70:200::/32": "3326", - "2a09:f440::/32": "29462", - "2620:8c:6000::/48": "11364", - "2001:df3:4300::/48": "133616", - "2001:43f8:cc0::/44": "23889", - "2401:8a00:f601::/36": "10099", - "2404:4a00:2::/64": "55423", - "2408:8256:3d76::/44": "17623", - "2600:370f:5225::/41": "32261", - "2610:a1:1021::/48": "397222", - "2801:a0::/32": "28616", - "2804:7a70::/32": "271371", - "2a06:3300::/29": "56532", - "2001:67c:3c::/48": "1257", - "2001:7c0:2310::/44": "34878", - "2001:ec0:4000::/40": "131293", - "2408:84f3:3240::/44": "17623", - "2602:ff8d:1::/48": "14744", - "2a0b:4340:a1::/48": "134575", - "2001:fd8:f1f0::/44": "4775", - "2401:4900:5130::/44": "45609", - "2408:8256:2f96::/48": "17816", - "2605:a404:71::/45": "33363", - "2a0c:59c0::/32": "3214", - "2a0e:fb80::/29": "208551", - "240e:14:7000::/37": "133775", - "2a02:26f7:c849::/42": "20940", - "2a03:fc0::/32": "60294", - "2001:550:1704::/36": "174", - "2001:559:5f3::/48": "33287", - "2806:32a::/32": "265574", - "2a03:4500::/32": "30827", - "2a0c:9a40:2700::/40": "34927", - "2a0e:b105:100::/44": "398549", - "2602:ff0b::/36": "11071", - "2804:3290::/32": "265085", - "2a02:4c80::/32": "41421", - "2a03:cfc0::/32": "201814", - "2a04:3780::/29": "48097", - "2a0c:b642:1a0e::/48": "61138", - "2408:802a:8000::/33": "4837", - "240a:af97::/32": "146641", - "2a02:6b8:8::/45": "13238", - "2a0d:5fc0::/29": "62412", - "2a0b:fc0::/29": "42217", - "2001:559:84c0::/48": "33668", - "2402:8100:257a::/45": "55644", - "2406:57c0:130::/47": "134672", - "2602:fed0::/36": "396109", - "2604:8b80:2::/48": "55106", - "2804:688::/32": "262592", - "2a01:7080:25::/32": "42848", - "2001:df1:2600::/48": "59151", - "2804:1748::/32": "263133", - "2804:2f40::/32": "264880", - "2a04:bd40::/29": "62038", - "2a09:ec00::/29": "39392", - "2806:230:600e::/48": "265594", - "2a02:26f7:e540::/48": "36183", - "2a04:4e40:5440::/44": "54113", - "2a06:be00::/31": "200519", - "2a0f:6580:101::/48": "48292", - "2408:84f3:b010::/42": "134543", - "2409:8904:5f70::/40": "24547", - "2804:222c:400::/32": "264596", - "2804:550c:a000::/35": "268686", - "2806:230:1023::/48": "11888", - "2a03:24c0:ffff::/48": "201342", - "2a0e:46c4:2c00::/45": "213326", - "2409:8924:a700::/36": "56046", - "2804:6398::/32": "269371", - "2a0c:b642:1a07::/48": "7489", - "2406:ef80:100::/40": "63473", - "240e:473:3c50::/39": "4134", - "2804:4690::/32": "266997", - "2a02:26f7:d845::/46": "20940", - "2001:67c:d8::/48": "47708", - "2804:7518::/32": "271023", - "2a02:2668:6200::/37": "16345", - "2a03:f600::/32": "41943", - "2a10:6ac0::/29": "49735", - "2001:559:8622::/48": "33659", - "2001:42d0:a::/48": "37301", - "2403:df40:17::/39": "14630", - "2600:1400:2000::/48": "35994", - "2600:8807:bb2::/41": "22773", - "2a01:9700:12e0::/46": "8376", - "2a06:e881:6900::/48": "208434", - "2001:7f8:2a::/48": "13041", - "240a:a8f5::/32": "144943", - "2001:678:684::/48": "203085", - "2602:feda:ad0::/44": "140362", - "2605:afc0::/32": "14488", - "2804:14d:7e8a::/45": "28573", - "2a0b:5540:6::/33": "213002", - "2a04:de40::/42": "20860", - "2a06:6580::/29": "34549", - "2a0b:140::/29": "57773", - "2001:df1:8000::/48": "132440", - "2406:daa0:c0a0::/44": "16509", - "2409:8750:f400::/31": "56047", - "2605:a401:80bc::/47": "33363", - "2804:5780::/32": "262734", - "2804:5804::/32": "268100", - "2001:df4:d000::/48": "59216", - "2400:cb00:a1f0::/45": "13335", - "2402:9800::/32": "38158", - "240a:a342::/32": "143484", - "2a02:26f7:f080::/48": "36183", - "2a0a:7107:1af4::/48": "206986", - "2a0f:9f00::/29": "208206", - "2001:df0:26b::/48": "58505", - "2402:800:63ab::/43": "7552", - "240a:aa05::/32": "145215", - "2605:1080:1:ffdb::/46": "23367", - "2a01:43a0::/32": "199998", - "2a01:c50f:bf80::/33": "12479", - "2a02:26f7:c049::/42": "20940", - "2001:559:c101::/46": "13367", - "2620:119:e011::/42": "30337", - "2804:2dc4::/32": "265302", - "2a00:db60::/48": "15224", - "2a02:db8::/32": "48417", - "2400:dcc0:aa04::/39": "38631", - "2604:7e00:255::/32": "17378", - "2804:29a0::/32": "28219", - "2804:2f40:a000::/33": "264880", - "2a02:28:d::/48": "209024", - "2402:800:7fb0::/41": "7552", - "2409:8904:57b0::/36": "24547", - "2600:370f:51e0::/47": "32261", - "2a06:2300::/29": "29458", - "2001:559:c35f::/48": "13367", - "240a:a984::/32": "145086", - "2606:5680:1000::/36": "394344", - "2800:160:1add::/42": "14259", - "2a02:610::/33": "2588", - "2001:253:131::/48": "142097", - "2001:67c:220c::/48": "48155", - "2001:1248:9a8d::/43": "11172", - "2001:5000:b04::/30": "1273", - "2405:1c0:6a64::/43": "55303", - "2804:79ac::/32": "271320", - "2a02:168::/34": "13030", - "2001:b200:4000::/32": "9505", - "2402:800:317f::/40": "7552", - "2604:3d00:dc00::/34": "6327", - "2a0f:15c0::/29": "60262", - "2a02:26f7:d681::/46": "20940", - "2a07:7800::/45": "48254", - "2a0f:9400:7315::/48": "211940", - "2001:4818:4000::/36": "27272", - "240a:a310::/32": "143434", - "2602:fd28::/36": "62866", - "2620:10c:f014::/48": "33459", - "2a02:26f7:ec51::/46": "20940", - "2a0e:b107:381::/48": "211358", - "2804:fe0:200f::/48": "263049", - "2a0f:2d40::/29": "60262", - "2001:f40::/43": "9930", - "2620:11f:1000::/48": "27421", - "2804:8cc:1c1::/32": "262394", - "2a02:26f7:be45::/46": "20940", - "2a0a:9301:1::/48": "35196", - "2001:559:1a1::/48": "7725", - "2400:e1c0:10::/47": "58659", - "2001:559:221::/45": "33491", - "2620:118:c000::/42": "237", - "2804:80bc::/32": "271770", - "2a0b:b87:ffe8::/48": "44754", - "2a0c:1100::/32": "781", - "2001:678:3d8::/48": "5413", - "2804:1d34::/32": "264354", - "2a10:e440::/32": "50293", - "240e:979:2f00::/35": "4134", - "2a01:288:4009::/32": "8717", - "2c0f:e9a8::/32": "328732", - "2a02:26f7:f6ed::/48": "36183", - "2a0c:a080::/29": "43646", - "2a0f:f940::/29": "62412", - "2409:8c85:aa6b::/45": "9808", - "2806:230:2049::/48": "11888", - "2a01:51a0::/32": "21348", - "2a00:1cc0::/32": "20521", - "2a02:26f0:c700::/48": "9121", - "2a02:4020::/48": "60094", - "2a10:2f00:160::/48": "212129", - "2001:559:875a::/47": "7922", - "2400:8800::/38": "3491", - "240a:ad5a::/32": "146068", - "2600:9000:a102::/48": "16509", - "2606:600::/32": "6639", - "2001:df0:f700::/48": "139399", - "2803:6ce0::/35": "269909", - "2400:cb00:a4a0::/45": "13335", - "240e:108:1142::/44": "4134", - "2001:1248:8453::/44": "11172", - "240e:981:8000::/40": "132153", - "2602:fea7:f00::/40": "397270", - "2804:14d:4685::/41": "28573", - "2001:d10:8402::/44": "4787", - "2a02:a8::/32": "9188", - "2a06:8dc0::/42": "57878", - "2a0c:2500::/29": "29551", - "2a0e:4c80::/29": "328543", - "2804:204:22d::/43": "28186", - "2804:14a8::/32": "263342", - "2001:559:813a::/45": "7015", - "2001:67c:1bec::/48": "59624", - "240a:a0b1::/32": "142827", - "240e:3b2:7600::/39": "140313", - "2804:800::/32": "16509", - "2a04:1c40::/32": "201035", - "2a02:760::/29": "29468", - "2a02:ddc0::/29": "47165", - "2001:4478:1310:2000::/47": "4802", - "2a0d:d380::/29": "210107", - "2001:6f8:823::/48": "3257", - "2001:ee0:c740::/36": "45899", - "2a07:290a::/32": "559", - "2600:1300::/32": "20021", - "2001:559:86be::/48": "33491", - "2402:800:560f::/43": "7552", - "2607:4700::/32": "25720", - "2803:1040:2000::/32": "263751", - "2a02:26f0:1a01::/39": "20940", - "2620:129:5000::/45": "393347", - "2800:370:c004::/40": "28006", - "2804:36c8::/32": "266371", - "2a00:1fe8::/32": "34154", - "2a00:f7a0::/40": "21277", - "2a02:26f7:d840::/48": "36183", - "2408:8256:2d96::/48": "17816", - "2409:8087:4f1::/39": "24547", - "240a:a233::/32": "143213", - "2604:d600:162f::/43": "32098", - "2607:f060:1004::/32": "11404", - "2001:559:c30e::/48": "33659", - "2804:14d:ac81::/43": "28573", - "2a02:26f7:cec5::/46": "20940", - "2a0c:e780::/29": "209936", - "2a02:26f7:ef81::/46": "20940", - "2a0b:b86:fff0::/44": "50867", - "2001:559:811a::/48": "33489", - "2402:800:59a9::/41": "7552", - "2600:100a:9110::/36": "22394", - "2804:6f54::/32": "270653", - "2a00:1cf8:6000::/35": "44944", - "240e:3b0:1400::/38": "134773", - "2804:1bc8::/32": "61750", - "2a09:2681::/32": "61282", - "2001:559:581::/48": "33491", - "2001:1548:206::/48": "206804", - "2602:803:b000::/44": "11478", - "2602:fe02::/47": "16816", - "2804:1d20::/34": "264349", - "2001:44b8:4001::/42": "4739", - "240e:473:9520::/41": "140486", - "2600:1d00::/28": "3128", - "2604:d600:170a::/47": "32098", - "2804:59a4::/32": "268715", - "2a02:2698:3800::/42": "59713", - "2001:559:1a6::/47": "7725", - "240a:a1fb::/32": "143157", - "2804:3f38:9000::/36": "266646", - "2a02:2560::/32": "21127", - "2a07:1440::/29": "203293", - "2a0e:3840:415::/48": "40676", - "2400:cb00:a640::/45": "13335", - "2407:c1c0::/48": "135905", - "2600:140f:3a00::/48": "9498", - "2602:fe8a::/36": "62663", - "2804:e34:e000::/36": "61889", - "2a02:26f7:bb49::/42": "20940", - "2403:c000::/35": "4741", - "240a:a03a::/32": "142708", - "2605:a404:722::/41": "33363", - "2804:10f0::/32": "17108", - "2a0e:5fc0::/29": "207686", - "2001:1578:100::/40": "29317", - "2401:fa40::/32": "134326", - "2404:e100:4004::/46": "133840", - "240e:528::/25": "4134", - "2804:66a8::/32": "269574", - "2a02:230::/32": "43383", - "2a0d:aa00::/29": "49362", - "2001:1578::/48": "12657", - "2600:1404:d000::/48": "35994", - "2a03:2887:ff35::/44": "63293", - "2a0e:8200::/29": "206516", - "2c0f:f320::/32": "37126", - "2409:8915:3400::/39": "56044", - "2a02:9e8::/32": "3257", - "2a02:40c0::/36": "60781", - "2001:67c:2af8::/48": "29518", - "2001:df0:b980::/48": "139251", - "2408:84f3:2e10::/44": "17623", - "2605:9d80:8021::/48": "4134", - "2620:19f::/36": "397962", - "2804:1168:1001::/36": "52904", - "2a02:5f83:d0cd::/39": "39811", - "2401:4900:1b60::/44": "45609", - "2600:1408:4400::/48": "35994", - "2607:f160:28::/48": "63335", - "2804:d38::/32": "53158", - "2a04:3a60::/34": "56467", - "2001:fb0:1076::/47": "7470", - "2600:380:f110::/40": "7018", - "2a02:26f7:d15e::/42": "20940", - "2401:d800:7250::/42": "7552", - "2408:8957:fe00::/28": "17816", - "2804:b4:c040::/40": "28294", - "2804:2abc::/32": "264091", - "2001:44b8:6034::/44": "4739", - "2407:7b00::/32": "58451", - "240e:438:6820::/43": "140647", - "2606:f900:9e01::/39": "812", - "2a04:ac00:b::/48": "3180", - "2a04:b480:20::/46": "209506", - "2607:ff68::/44": "46475", - "2001:559:8472::/48": "33662", - "2804:7a98::/32": "271381", - "2806:230:300e::/48": "265594", - "2a01:a680::/32": "59545", - "2001:dc7:ffd3::/42": "24151", - "2605:6f00:9000::/36": "10929", - "2800:5d0::/38": "52302", - "2a00:eb20::/32": "8330", - "2401:4900:58a0::/41": "45609", - "2800:5f0:2001::/42": "22724", - "2804:eec:1301::/48": "25933", - "2804:593c::/32": "268177", - "2a01:c50f:2a00::/37": "12479", - "2a10:9800::/29": "212708", - "2401:3c00:c0::/46": "38322", - "2409:4056:1000::/34": "55836", - "2800:160:19d2::/44": "14259", - "2804:14d:be00::/40": "28573", - "2a0f:ce00::/29": "208261", - "240e:698:2700::/40": "133774", - "2606:6680:10::/46": "40676", - "2804:603c::/32": "269154", - "2a0a:800::/29": "64478", - "2a07:6881::/32": "204860", - "2a0e:e740::/30": "208338", - "2a0f:d180::/31": "208041", - "2401:d800:d280::/42": "7552", - "2409:8904:63b0::/37": "24547", - "240a:afd9::/32": "146707", - "2803:21a0::/32": "267698", - "2804:6e1c::/32": "270576", - "2c0f:f8c8::/32": "37531", - "2604:d600:45::/37": "32098", - "2001:559:2e4::/48": "33660", - "2001:559:83f2::/47": "33651", - "2001:67c:2680::/48": "202064", - "2001:1a68:2f::/43": "15694", - "2403:c980::/32": "38283", - "2405:3140:31::/48": "56006", - "2600:1409:14::/37": "20940", - "2a01:8840:5e::/42": "12041", - "2a06:a006:f3::/48": "207083", - "2620:133:8000::/46": "19054", - "2800:160:1d73::/45": "14259", - "2804:11a0::/32": "262889", - "2804:6414::/32": "269403", - "2001:67c:16dc::/48": "559", - "2405:3001::/32": "4641", - "2804:1ad0::/32": "28621", - "2806:2f0:3484::/42": "17072", - "2a02:80e0::/30": "197216", - "2a02:ee80:4188::/43": "3573", - "240a:a83c::/32": "144758", - "2607:f1e0:1200::/33": "19092", - "2a05:d050:8050::/42": "16509", - "2001:1a10:1010::/33": "8781", - "2620:171::/48": "715", - "2803:b480::/48": "28099", - "2804:297c::/32": "262907", - "2a02:800::/32": "9119", - "2a0c:6a40::/29": "30823", - "2a0d:3480:d41d::/48": "19844", - "2603:4:1404::/48": "44273", - "2408:8256:396d::/48": "17816", - "240e:40:15::/32": "4134", - "240e:983:1300::/48": "134419", - "2804:5c4::/32": "262540", - "2a02:26f0:4701::/36": "20940", - "2a03:9d40:5000::/40": "41095", - "2a0d:2582:140::/43": "211367", - "2406:e007:c000::/34": "23655", - "2806:230:1001::/48": "11888", - "2a06:5840::/29": "21067", - "2409:8000:2a00::/39": "56048", - "240e:947:1000::/36": "137690", - "2600:b000::/28": "46595", - "2a01:74c0::/43": "15540", - "2a02:a60:8000::/33": "57739", - "2a05:3950:8661::/33": "201503", - "2408:8456:1d00::/42": "17622", - "2606:6e80::/32": "33548", - "2804:45e4:7c10::/39": "262567", - "2a06:7d80::/29": "204046", - "2a09:9f41::/32": "1239", - "2605:b880::/32": "62782", - "2a00:d240::/32": "25274", - "2a07:3500:12c0::/48": "212778", - "2a02:74a0:1::/48": "204038", - "2a03:3700::/33": "15774", - "2a0c:d500::/29": "41765", - "2001:7f8:5d::/48": "15645", - "2001:df0:426::/48": "38331", - "2a0c:e082:10::/29": "51095", - "2804:568:601::/32": "262514", - "2804:70c::/32": "262668", - "2806:230:5015::/48": "11888", - "2404:e0::/29": "703", - "2600:1806:511::/48": "16552", - "2600:370f:40a3::/43": "32261", - "2605:bc0:1005::/48": "54201", - "2606:2800:7011::/46": "15133", - "2a02:13f0:8100::/48": "48874", - "2001:559:8700::/48": "7015", - "2001:41b0::/32": "12741", - "2001:43f8:110::/48": "37181", - "2402:9d80:4::/48": "131429", - "2406:840:10::/45": "139317", - "2a01:5b0:26::/48": "8561", - "2001:559:80e6::/48": "33657", - "2403:4e00:31a::/32": "45528", - "2409:8908::/30": "9808", - "240a:ae20::/32": "146266", - "2600:1413:8001::/35": "20940", - "2600:370f:70a5::/44": "32261", - "2001:c20:486b::/48": "3758", - "2001:13d1:3c04::/30": "7303", - "2409:8948:9200::/40": "24445", - "2620:82:a000::/48": "207563", - "2a04:4e40:3e30::/41": "54113", - "2402:800:5ca9::/41": "7552", - "2402:ef13:1::/48": "9430", - "240a:a5e7::/32": "144161", - "240e:473:7a00::/41": "140485", - "2804:6dac::/32": "270548", - "2a02:2050::/32": "47264", - "2c0f:fc60::/32": "30988", - "2402:9900:d11::/48": "27435", - "2409:8075::/28": "9808", - "240a:a4d7::/32": "143889", - "2600:1417:77::/48": "38266", - "2804:3734::/32": "266396", - "2806:230:6000::/48": "265594", - "2401:d800:7590::/42": "7552", - "2610:e8::/35": "6224", - "2804:4c28::/32": "267353", - "2804:7888::/32": "271249", - "2a11:4900::/29": "42375", - "2409:8753:f00::/35": "56047", - "2001:12a4::/32": "28346", - "2402:9f80::/32": "9808", - "2a01:4f00:2234::/32": "35047", - "2a04:a8c0::/29": "33438", - "2a05:4a40:fff0::/44": "2571", - "2405:df80::/32": "38719", - "2a02:2e02:ff0::/35": "12479", - "2a03:1e00::/32": "34219", - "2a03:db80:3824::/48": "199578", - "2804:6390::/36": "269369", - "2001:4408:7f10::/32": "4758", - "2a02:46e0:1dd::/32": "60049", - "2001:559:858b::/48": "33491", - "2600:6000:fd41::/43": "12271", - "2a0a:16c0::/32": "48464", - "2607:ffb0:8001::/33": "6327", - "2001:360:12::/45": "135887", - "2001:dcc:700::/48": "23600", - "2404:b0:13::/35": "4750", - "2409:8904:4360::/37": "24547", - "240a:a5e8::/32": "144162", - "2600:1419:d001::/37": "20940", - "2605:a401:8929::/43": "33363", - "2402:800:f600::/42": "7552", - "2408:84f3:9610::/42": "134543", - "2803:87a0::/32": "13489", - "2804:fb4:a040::/33": "263599", - "2a00:4120:8000:7::/33": "20804", - "2a02:990::/32": "25459", - "2a0e:40c0:1::/48": "15626", - "2406:1300::/48": "38713", - "2408:84f3:4010::/42": "134543", - "240e:473:320::/41": "140486", - "2001:ee0:2f07::/43": "45899", - "2604:880:13::/48": "54540", - "2801:80:220::/48": "262483", - "2001:559:845a::/48": "33651", - "240e:473::/41": "140485", - "2803:3b80:f::/43": "263702", - "2a05:1086::/32": "141694", - "2a10:8800::/29": "31743", - "2401:ff80::/35": "133954", - "240a:a545::/32": "143999", - "2803:84e0::/32": "27951", - "2a00:1528:101::/32": "6696", - "2a0f:97c0::/29": "41817", - "2001:559:833f::/48": "22258", - "2001:579:400c::/42": "22773", - "2409:8a10::/30": "9808", - "2804:5df4::/32": "269003", - "2401:7400:6001::/43": "4773", - "2407:240::/48": "140775", - "2409:8d14:1900::/34": "56044", - "2600:6c3a:824::/43": "20115", - "2607:5c80::/32": "14713", - "2804:1a84::/32": "61863", - "2804:39ec::/32": "266059", - "2a03:5b00::/32": "202695", - "2001:470:97::/44": "6939", - "2001:1248:a4b4::/46": "11172", - "2408:8456:a240::/37": "17816", - "2408:8957:9d00::/40": "17816", - "2605:8340::/32": "14315", - "2a00:5881:c000::/40": "51083", - "2001:428:f000::/36": "3908", - "2001:559:571::/48": "33287", - "2603:c010:c000::/36": "31898", - "2607:c000::/32": "5645", - "2804:3f00::/32": "52643", - "2a00:b900:3::/32": "51561", - "2408:8459:a050::/38": "17816", - "2804:432c::/32": "267553", - "2806:106e:2::/48": "8151", - "2803:c010:7::/48": "271799", - "2804:2ea0:c6e0::/34": "265356", - "2001:678:5a8::/48": "8387", - "2400:5300::/47": "45815", - "240e:90d:f800::/30": "4134", - "2603:c011:c000::/36": "31898", - "2803:4680::/32": "263222", - "2a04:1ac0:fff3::/45": "211960", - "2607:f4e8:ac3::/32": "22822", - "2001:67c:2bf8::/48": "3301", - "2001:7fb:fe0a::/43": "12654", - "2401:93c0:1::/45": "135834", - "2605:a404:69c::/39": "33363", - "2001:559:830a::/48": "13367", - "2001:559:8536::/48": "33651", - "2408:8957:3500::/40": "17816", - "2804:5998::/32": "268712", - "2401:1b00::/32": "18103", - "2401:2d00:22::/48": "17625", - "2403:5cc0::/44": "134883", - "2409:8000:1900::/37": "9808", - "2803:9800:b8cb::/39": "11664", - "2804:490:8100::/37": "28613", - "2804:13dc:cd00::/34": "262428", - "2a10:da00::/32": "34576", - "2001:7f0:102::/34": "13237", - "2001:e90::/32": "9622", - "2600:80c:1600::/32": "701", - "2607:fdb8:8000::/33": "36024", - "2607:fdf0:5ee5::/44": "8008", - "2804:868:2002::/32": "28649", - "2401:d800:3a0::/41": "7552", - "2402:800:3155::/42": "7552", - "2605:e000:40c::/38": "20001", - "2804:59c::/32": "262527", - "2a00:f0e0::/43": "198499", - "2a04:92c7:3::/44": "62240", - "2001:428:e000::/36": "3910", - "2001:559:c190::/48": "33489", - "2406:e000:346::/42": "23655", - "2602:feda:e3f::/48": "147028", - "2604:880:78::/48": "13820", - "2a0c:7140::/29": "39305", - "2408:840d:3600::/42": "17621", - "2409:8c20:7c92::/32": "56046", - "240a:a613::/32": "144205", - "2803:8ea0:1000::/34": "266909", - "2804:62b0::/32": "269312", - "2a03:2e4::/30": "197451", - "2a0a:b640:1::/46": "9009", - "2001:559:8037::/48": "33491", - "2001:559:c387::/48": "7016", - "2804:5d88::/32": "268978", - "2a05:c900::/32": "42463", - "240e:3b6:c000::/37": "140315", - "2804:e0::/46": "28330", - "2804:168:1000::/48": "28279", - "2a02:24a0::/32": "58343", - "2a02:26f7:f949::/46": "20940", - "2a0b:e980::/29": "51783", - "2a0d:d480::/30": "35916", - "2001:948:5a::/42": "39590", - "2a0c:5f00::/32": "20647", - "2a0d:5642:113::/48": "48386", - "2001:559:426::/48": "22258", - "2408:8256:3b7b::/48": "17816", - "2600:1801:2::/47": "16552", - "2a10:ec0::/29": "207048", - "2001:559:2fc::/48": "33652", - "2600:1008:b070::/40": "22394", - "2608:121:c::/48": "27142", - "2800:b70:102::/48": "262191", - "2800:bf0:80c8::/48": "52257", - "2001:c20:c842::/48": "9255", - "2409:8052:2800::/47": "56047", - "2620:132:3000::/40": "395089", - "2804:14c:477::/44": "28573", - "2a02:26f7:c2c8::/48": "36183", - "2a09:4c2:28::/46": "58057", - "2001:550:2403::/39": "174", - "2001:1388:8a47::/43": "6147", - "2600:1402:1f::/37": "20940", - "2600:1406:5401::/36": "20940", - "2602:ffe4:c07::/48": "135905", - "2620:76:e000::/48": "397869", - "2a04:4e40:c410::/41": "54113", - "2001:678:964::/48": "49697", - "2607:f188::/32": "21769", - "2a02:5d80::/29": "48294", - "2001:c20:5009::/38": "3758", - "240a:aab2::/32": "145388", - "2804:1c44::/36": "61645", - "2a0b:e3c0::/29": "205215", - "2a0c:6580::/48": "43576", - "2a0c:84c0::/29": "48635", - "2401:4900:4f61::/48": "45609", - "240a:a7c5::/32": "144639", - "240a:ab9b::/32": "145621", - "240e:44d:580::/41": "4134", - "2602:fce7::/36": "399065", - "2804:7fa0:1051::/32": "271699", - "2a01:b5c0::/32": "43160", - "2c0f:f948::/47": "37582", - "2402:800:977f::/40": "7552", - "2a02:26f7:e100::/48": "36183", - "2a0d:57c0::/29": "44212", - "2408:84f3:e040::/38": "17816", - "240a:a139::/32": "142963", - "2800:650:5::/39": "28032", - "2803:1fc0::/32": "265781", - "2804:762c::/33": "271094", - "2a02:e0c7:ffff::/48": "9100", - "2001:470:121::/48": "29962", - "2001:4490:4e10::/46": "9829", - "2a01:c50f:e7c0::/36": "12479", - "2001:559:81f5::/48": "33652", - "2408:8459:1850::/39": "17816", - "2804:46c::/32": "52978", - "2001:12f0:a40::/39": "1916", - "2605:7840:f120::/36": "12130", - "2804:2068::/32": "262470", - "2a09:7c43::/32": "48108", - "2a0e:b107:c9f::/48": "140938", - "2001:16a6:c200::/31": "39386", - "2403:88c0:2::/44": "138192", - "2620:11a:a035::/48": "43515", - "2620:131:1000::/45": "26450", - "2804:1530::/32": "262481", - "2a01:53c0:ff01::/44": "54994", - "2001:67c:2c74::/48": "9201", - "2405:6e00:2220::/43": "18291", - "240a:a8b3::/32": "144877", - "2600:1002:b0c0::/43": "6167", - "2600:1408:8801::/37": "20940", - "2600:1417:1801::/34": "20940", - "2607:f480:300::/47": "27435", - "2a05:a282::/32": "31586", - "2a0b:4d07:501::/48": "44239", - "2001:503:ff39::/48": "7342", - "2602:feda:100::/47": "38008", - "240a:ab69::/32": "145571", - "2803:8e20::/32": "27843", - "2a00:1190::/32": "16302", - "2a0c:4480:6::/47": "204720", - "2a0c:c880::/29": "398465", - "240a:a63c::/32": "144246", - "2804:14d:3200::/40": "28573", - "2806:2f0:374::/40": "17072", - "2a02:26f7:f301::/46": "20940", - "2001:559:c3b2::/48": "33659", - "2602:fdac:10::/48": "397665", - "240a:a0ba::/32": "142836", - "2a0e:fd45:40f7::/48": "398646", - "2405:a080::/48": "135745", - "240a:aa11::/32": "145227", - "2600:100b:b030::/40": "6167", - "2804:14c:7900::/40": "28573", - "2400:8000:8004::/33": "4800", - "2409:8904:6070::/40": "24547", - "2600:c0b:2:200::/35": "14745", - "2604:e100:3::/45": "33028", - "2804:18a0::/32": "61944", - "2a0b:4340:c8::/47": "44421", - "2001:559:8531::/48": "33491", - "2001:559:85e5::/46": "33491", - "2409:8c62:f20::/32": "9808", - "2804:7058:4000::/32": "270721", - "2804:7500::/32": "271017", - "240e:438:4620::/43": "140647", - "2600:140b:f001::/37": "20940", - "2606:a600:5::/46": "23005", - "2407:8800::/32": "7545", - "2408:8247::/35": "140726", - "2409:8924:1100::/38": "56046", - "240a:a7cb::/32": "144645", - "2804:4f34::/32": "268311", - "2804:1724::/32": "263126", - "2001:559:7c8::/48": "33666", - "2001:1248:5a99::/42": "11172", - "2405:58c0:3400::/38": "133101", - "240a:a656::/32": "144272", - "2604:880:241::/42": "29802", - "2607:f220:403::/43": "3527", - "2620:106:7080::/46": "11795", - "2a02:26f7:c351::/48": "36183", - "2001:cb0:20e::/47": "4637", - "2402:800:9a9b::/42": "7552", - "240e:473:4050::/39": "4134", - "2803:55c0::/32": "265715", - "2804:4b6c::/32": "267305", - "2a09:bac0:268::/48": "13335", - "2001:44b8:4064::/48": "7545", - "2409:8c20:5625::/39": "56046", - "240e:688::/29": "4812", - "2600:1415:4801::/37": "20940", - "2607:f2d8:43::/33": "18450", - "2a01:7d80:2000::/38": "8990", - "2401:c240:4100::/32": "132847", - "2409:805c:1900::/34": "9808", - "2603:c001:2e00::/35": "31898", - "2610:a1:3058::/48": "12008", - "2804:487c:22f::/32": "267124", - "2a0a:1ec0::/31": "205790", - "2401:ff80:1411::/46": "133954", - "240a:a6f9::/32": "144435", - "240a:a951::/32": "145035", - "240a:aec9::/32": "146435", - "2605:a580::/32": "36103", - "2a04:5340::/47": "200081", - "2a03:17c0::/32": "44300", - "2001:67c:218::/48": "51172", - "2001:67c:2210::/48": "49167", - "2001:df0:7b00::/48": "136086", - "2600:1488:a301::/41": "20940", - "2804:1a7c::/32": "61862", - "2806:2f0:12e3::/48": "22884", - "2a00:1930::/32": "34624", - "2001:559:768::/48": "7016", - "2001:559:8124::/48": "7015", - "2409:8924:1f00::/34": "56046", - "2801:80:bf0::/48": "61867", - "2a0e:aa07:e024::/48": "210934", - "2a00:1da8::/32": "49725", - "2408:8459:de10::/42": "17623", - "240a:abe0::/32": "145690", - "2605:6440:6003::/45": "396356", - "2607:2800::/32": "33302", - "2800:160:156d::/43": "14259", - "2804:778c::/32": "271185", - "2a00:1288:f03f::/41": "10310", - "2a09:c540::/32": "209231", - "2a0e:b102:100::/44": "212895", - "2001:559:825e::/48": "21508", - "2001:6c0::/32": "25286", - "2406:eb00:1::/48": "132653", - "2408:862e::/27": "4837", - "240a:affb::/32": "146741", - "2607:fcd0:fa80:2e00::/63": "8100", - "2a0a:c842::/29": "205394", - "2001:67c:2c44::/48": "49588", - "2401:4900:6190::/41": "45609", - "2401:ff80:1a0b::/45": "133954", - "2a02:17e8::/36": "13002", - "2a10:d181::/32": "197444", - "2402:3a80:1ef3::/39": "38266", - "2600:140b:1c01::/38": "20940", - "2001:df6:3600::/48": "132559", - "2607:f110:e320::/41": "21889", - "2a03:fec0::/32": "47747", - "2001:df0:1400::/48": "64010", - "2001:4878:c102::/47": "12222", - "2402:f800:df01::/40": "7602", - "2604:f940::/45": "397134", - "2620:160:e740::/44": "4196", - "240a:a542::/32": "143996", - "2801:14a::/40": "3816", - "2a02:26f7:f5c1::/46": "20940", - "2a0a:9201::/32": "11403", - "2605:b780::/32": "54555", - "2806:260:1015::/44": "13999", - "2a00:dcc7:2200::/40": "48611", - "2804:4e58:8000::/33": "268255", - "2806:230:3018::/48": "265594", - "2a01:250:f900::/37": "34511", - "2a02:26f7:f049::/42": "20940", - "2408:8640::/32": "4837", - "2804:104c:c000::/40": "263629", - "2408:80f1:10::/42": "17621", - "240b:240::/26": "2516", - "2408:8409:4800::/40": "4808", - "2606:2800:557::/44": "15133", - "2606:6b80::/32": "16788", - "2607:f9c8::/32": "26949", - "2a01:6c8:2000::/36": "59705", - "2a0c:9a40:8116::/47": "204438", - "2001:559:8198::/48": "20214", - "240a:a961::/32": "145051", - "2600:1405:4001::/35": "20940", - "2804:14d:5400::/40": "28573", - "2a00:1920::/48": "15866", - "2001:410:2002::/40": "10965", - "2403:1400::/32": "24446", - "2a02:26f7:ca40::/48": "36183", - "2c0f:e8f8:2100::/32": "328699", - "240a:abe9::/32": "145699", - "2600:1009:f000::/44": "6167", - "2600:14e0:9::/27": "20940", - "2a06:3c80::/29": "197648", - "2001:b28::/46": "42065", - "2401:4900:d00::/41": "45609", - "240e:30e:4a00::/35": "137688", - "2605:a900:3002::/45": "46887", - "2a01:664:400::/36": "48951", - "2a09:94c0::/29": "209327", - "2a0a:4e83::/48": "206074", - "2a0a:a100::/32": "206906", - "2620:13a:4000::/40": "22686", - "2001:559:8548::/48": "7725", - "2402:800:3e01::/43": "7552", - "240e:4e::/37": "17633", - "2600:140f:5200::/48": "9829", - "2a02:26f7:de0d::/42": "20940", - "2a06:be80::/29": "24940", - "2620:20:4000::/48": "32019", - "2620:134:6008::/47": "30031", - "2804:2e0c::/34": "263019", - "2a07:3500:19d8::/48": "38915", - "2001:67c:198c::/48": "205016", - "2409:8915:9000::/39": "56044", - "240a:a29f::/32": "143321", - "2607:9b80:820::/40": "46558", - "2607:f750:8200::/48": "23473", - "2a02:26f7:c105::/46": "20940", - "2402:800:959b::/42": "7552", - "2605:a401:8188::/42": "33363", - "2a04:4e40:4e00::/48": "54113", - "2a0a:56c4:8401::/48": "42649", - "2001:df7:c700::/48": "45316", - "2001:44b8:4040::/47": "7545", - "2402:6780::/32": "45213", - "2408:8256:3b76::/44": "17623", - "2a0b:b87:ffc0::/44": "50867", - "2401:4900:3840::/43": "45609", - "2a02:7aa0::/35": "43513", - "2a10:d502::/29": "3356", - "2001:559:c3db::/48": "33287", - "2001:4200:5001::/34": "2018", - "2404:c80:f001::/36": "23704", - "2600:1402:1401::/36": "20940", - "2607:f5b0::/32": "19148", - "2804:7c38::/32": "271482", - "2001:559:820f::/48": "33659", - "2405:1c0:7a81::/48": "135062", - "2600:9000:1003::/48": "16509", - "2604:f240::/32": "30317", - "2803:39e0::/32": "270023", - "2a02:b50:8000::/47": "48910", - "2620:104:4000::/47": "15248", - "2804:834::/32": "262907", - "2a03:c6c0::/48": "42421", - "2a00:1728:e::/43": "34224", - "2001:67c:690::/48": "1836", - "2600:130c::/32": "20021", - "2600:140b:e01::/39": "20940", - "2606:2800:4adc::/46": "15133", - "2801:80:2800::/40": "262441", - "2802:0:1b::/48": "18747", - "2804:6354::/32": "269354", - "2001:67c:808::/48": "210945", - "2602:fc71::/47": "397270", - "2607:fcd0:fa80:3801::/55": "8100", - "2a02:26f7:eec5::/46": "20940", - "2a10:9400::/32": "212499", - "2001:1230:103::/32": "13579", - "2401:7340:1000::/48": "34985", - "2804:2f1c::/32": "264872", - "2401:d800:870::/40": "7552", - "2403:fdc0:800::/33": "7175", - "2a0e:be00::/29": "61272", - "2001:67c:2634::/48": "197431", - "2403:4900:1::/48": "131188", - "2405:b900:1000::/48": "55701", - "2001:4980:4445::/32": "7753", - "2409:8915:3000::/39": "56044", - "2800:220:10::/48": "13585", - "2804:1cb4::/32": "61670", - "2a0a:3b80::/29": "205645", - "2a0e:9b80:68::/47": "41737", - "2001:678:1d8::/48": "8339", - "2600:1416:2001::/32": "20940", - "2804:2da4:c000::/34": "265294", - "2804:5c18::/32": "268887", - "2400:9940::/35": "136224", - "240e:473:4350::/40": "4134", - "240e:978:2000::/40": "137702", - "2a00:7c40::/32": "202940", - "2a01:758:8300::/45": "15785", - "2a0d:1a45::/42": "57782", - "2402:800:3171::/44": "7552", - "240a:a796::/32": "144592", - "240e:473:e00::/41": "140485", - "240e:473:4920::/41": "140486", - "2600:100d:b140::/42": "6167", - "2803:bc80::/42": "263202", - "2a0e:aa07:e010::/48": "208370", - "2001:559:76c::/48": "7922", - "2001:df4:d80::/48": "60614", - "2400:c700::/44": "55644", - "2402:e380:13d::/46": "139073", - "2a00:19e0::/29": "25504", - "2402:800:75b0::/41": "7552", - "2404:5d80:6000::/39": "33438", - "2408:8459:3c40::/38": "17816", - "2409:4014:1000::/34": "55836", - "240a:a898::/32": "144850", - "2801:80:1aa0::/48": "28248", - "2804:4be4:9000::/33": "267335", - "2001:418:1401:a::/61": "2914", - "2401:d800:2630::/41": "7552", - "2408:8a23:4000::/34": "4837", - "2607:f7c0:c000::/40": "6188", - "2a06:5780::/29": "56457", - "2001:559:c1a1::/48": "33657", - "2001:df0:3a00::/48": "17439", - "240e:44d:700::/41": "140345", - "2610:a1:3004::/48": "12008", - "2804:68a0:c000::/34": "269705", - "2a00:4400::/32": "8692", - "2a01:7360::/32": "198290", - "2001:67c:6c8::/48": "31229", - "2001:14e8:2::/32": "6736", - "240e:473:7e00::/41": "140485", - "2a03:47c0:2181::/38": "21277", - "2001:559:180::/48": "33659", - "2001:67c:2cf8::/48": "12552", - "2001:1248:5920::/41": "11172", - "2408:8957:7400::/40": "17622", - "2620:1fc::/36": "55028", - "2a0e:6540:a64::/48": "208364", - "2408:8459:f500::/40": "17623", - "2600:370f:34e5::/44": "32261", - "2606:eb80::/32": "55044", - "2804:20b0::/40": "264508", - "2a02:26f7:bac9::/42": "20940", - "2a02:26f7:c5c6::/47": "20940", - "2a09:bac0:172::/48": "13335", - "2a02:e30:f007::/48": "199943", - "2001:420:4100::/37": "109", - "2001:559:83ef::/48": "33651", - "2409:8904:e1b0::/38": "24547", - "2605:a401:811b::/45": "33363", - "2800:400:1c::/48": "27668", - "2804:1080:8003::/48": "28287", - "2806:370:2110::/44": "28403", - "2a02:26f7:d24c::/48": "36183", - "2405:4c0::/32": "139281", - "2001:559:240::/48": "33659", - "2001:559:8595::/48": "33651", - "2001:6b0::/46": "1653", - "2409:8904:cfb0::/35": "24547", - "2605:4c40:105::/43": "30081", - "2a02:26f7:f40d::/42": "20940", - "2a0f:8442::/32": "49981", - "2001:67c:2058::/48": "20712", - "2001:c20:c843::/45": "3758", - "2408:8756:e00::/40": "17622", - "240e:3b7:f100::/36": "4134", - "2804:397c::/39": "52592", - "2001:678:93c::/48": "209467", - "2408:870c:30::/40": "17621", - "2600:1404:e401::/38": "20940", - "2801:176::/44": "19429", - "2a00:ad87:1300::/48": "15465", - "2a02:2308:20::/48": "198485", - "2a02:26f7:f744::/48": "36183", - "2a02:128:5::/48": "62165", - "240e:67c:1000::/37": "140330", - "2804:594c::/32": "52870", - "2804:7a64::/32": "271368", - "2001:1a68:2b::/48": "29272", - "2404:b0:1005::/48": "135586", - "240a:aef7::/32": "146481", - "2604:d600:582::/38": "32098", - "2800:4b0:8003::/43": "12252", - "2001:250::/31": "23910", - "2001:df0:20b::/48": "38549", - "2001:4830:c400::/40": "33083", - "240e:5a:4780::/36": "140300", - "2605:4a00:121::/44": "14361", - "2620:d0:8000::/48": "16411", - "2402:2600::/32": "17813", - "2804:4034::/32": "265944", - "2a02:26f7:bf44::/48": "36183", - "2a03:d940::/32": "6833", - "2001:44c8:4700::/42": "131445", - "2804:3920:4600::/40": "266013", - "2804:73b4::/34": "270932", - "2001:500:4431::/48": "396549", - "2001:4db0::/40": "35028", - "2600:1800::/45": "16552", - "2604:d600:682::/45": "32098", - "2605:a401:8039::/41": "33363", - "2404:bf40:a182::/38": "139084", - "240e:5:2000::/35": "58542", - "2610:128:2200::/33": "11686", - "2620:34:e000::/48": "11195", - "2402:9d80:601::/48": "131429", - "2404:4a00:1001::/34": "45629", - "2408:8459:e830::/41": "17622", - "240a:a41a::/32": "143700", - "2620:11:e000::/48": "33496", - "2a0f:f6c0::/29": "57191", - "240a:a83d::/32": "144759", - "2804:6794::/32": "269637", - "2408:8956:1dc0::/38": "17622", - "2600:1480:580b::/45": "21342", - "2620:12e:3000::/44": "25670", - "2804:614c::/32": "269223", - "2001:559:21a::/47": "7922", - "2604:5500:f800::/38": "19165", - "2804:718c::/32": "270796", - "2001:678:d38::/48": "42504", - "240a:a184::/32": "143038", - "240a:a1f3::/32": "143149", - "240a:a84c::/32": "144774", - "2600:1480:d800::/48": "21342", - "2001:fd8:32c0::/42": "132199", - "2a01:8640:3::/48": "201525", - "2a02:26f0:cf01::/35": "20940", - "2a0e:7a80::/29": "9009", - "2409:8050:900::/37": "9808", - "240a:a143::/32": "142973", - "240a:a633::/32": "144237", - "2607:f810::/38": "6192", - "2804:104c:e400::/40": "263629", - "2a02:a60::/33": "45031", - "2a03:bd80::/32": "15830", - "2401:c100::/32": "45634", - "240e:95c:4000::/36": "4134", - "2602:fc5d:c0a::/48": "399866", - "2602:feda:106::/41": "38008", - "2607:fef8:ffe4::/48": "18598", - "2804:25c8::/32": "264302", - "2a0c:db00::/29": "50467", - "2803:82c0::/32": "264832", - "2804:d04::/32": "52584", - "2a01:8580::/32": "198089", - "2001:579:5a54::/44": "22773", - "240a:a7dd::/32": "144663", - "2605:8200::/32": "19653", - "2801:80:34a0::/48": "268807", - "2804:1240::/32": "263465", - "2a06:82c2::/48": "136620", - "2a06:c0c0::/47": "41018", - "2a05:dfc7:dfc7::/48": "204136", - "2001:410:1000::/40": "271", - "2001:4c8:1101::/46": "15290", - "2001:678:738::/48": "202267", - "2405:b000:e00::/32": "6262", - "2620:131:1054::/42": "26450", - "2804:f8c::/34": "263591", - "2a04:df80::/29": "201962", - "2001:44b8:4065::/48": "4739", - "240a:a4ab::/32": "143845", - "2a02:26f7:bf80::/48": "36183", - "2a02:26f7:da49::/42": "20940", - "2001:559:80d4::/48": "7016", - "2001:678:824::/48": "59891", - "2804:5c0c::/32": "268884", - "2a05:1080:20::/48": "61004", - "2001:4490:effc::/46": "9829", - "2620:10f:b001::/48": "395700", - "2804:70dc::/32": "270752", - "2a0f:1e81::/29": "60781", - "2401:3c0:117::/44": "45528", - "2405:800:c000::/34": "7545", - "2600:6c38:9c::/47": "20115", - "2804:25ec::/32": "264309", - "2a03:4cc0::/32": "199569", - "2a0c:7e44:da38::/48": "20473", - "2a10:6f00::/29": "398559", - "2603:4:e::/47": "44273", - "2a02:26f7:cc85::/46": "20940", - "2001:4878:347::/48": "12222", - "2401:cf80:60ff::/39": "55303", - "2a04:2cc0::/29": "38917", - "2402:800:f450::/42": "7552", - "240a:a5de::/32": "144152", - "240a:a654::/32": "144270", - "2620:171:39::/46": "715", - "2001:559:8619::/48": "33491", - "2804:4b40::/32": "267293", - "2a00:53c0::/32": "57084", - "2401:d800:78a0::/41": "7552", - "2403:e200:14::/44": "45543", - "2600:8804:a000::/30": "22773", - "2606:1a40:200c::/47": "394256", - "2a02:6ea0:ce00::/35": "60068", - "2a04:4e40:7600::/48": "54113", - "240e:0:a000::/33": "4134", - "2605:2e40::/32": "11260", - "2806:230:2024::/48": "265594", - "2a04:4e42:ff3::/33": "54113", - "2001:67c:1bc0::/48": "60216", - "2408:8459:5e10::/42": "17623", - "2600:1404:a801::/38": "20940", - "2606:a600:9::/33": "23005", - "2a00:1450:480f::/32": "15169", - "2a03:1981::/32": "48260", - "2a03:8d20::/48": "200849", - "2a02:29b0::/32": "16298", - "2401:4900:1978::/40": "45609", - "2401:d800:7a20::/41": "7552", - "2408:8459:4c40::/40": "17623", - "240a:abb2::/32": "145644", - "2801:150::/32": "3132", - "2804:2008::/32": "264461", - "2a02:26f0:b101::/38": "20940", - "2001:df5:fb00::/48": "135495", - "2a0f:68c0::/29": "60781", - "2602:fe19:ffad::/41": "26073", - "2a02:26f7:d740::/48": "36183", - "240a:afd1::/32": "146699", - "2600:1417:800::/48": "24319", - "2607:f4e8::/45": "22822", - "2803:7d80:a008::/33": "11664", - "2804:f04::/32": "262591", - "2a10:1a40::/29": "206236", - "2606:9100:2000::/36": "1421", - "2804:138b:c041::/40": "53037", - "2804:660c::/32": "269530", - "2a06:e881:3900::/44": "204624", - "2a09:a300::/32": "8896", - "2001:559:c13e::/47": "33287", - "2001:678:370::/48": "202584", - "2600:80d:14::/47": "701", - "2610:a1:1075::/46": "397228", - "2804:338::/32": "262730", - "2a03:9800::/29": "8916", - "2a0f:607:1500::/44": "210932", - "2a03:f80:45::/48": "9009", - "2405:7f00:3251::/44": "133414", - "2604:d600:115c::/38": "32098", - "2408:8001:3070::/44": "17623", - "2620:42:2000::/48": "30542", - "2804:27c4:8008::/33": "263921", - "2a02:26f7:d309::/42": "20940", - "2a03:efc0:1700::/36": "33438", - "2001:559:8748::/48": "33662", - "2001:16d8:53::/45": "16150", - "2408:8459:aa30::/41": "17622", - "2600:6c34:19d::/48": "33588", - "2804:2d74::/32": "265283", - "2a02:6ea0:e100::/37": "60068", - "2001:559:832d::/46": "33491", - "2001:67c:19c::/48": "196967", - "2400:9380:93c0::/44": "136167", - "240e:f7:e000::/35": "136190", - "2801:140:11::/48": "262249", - "2a01:ae40::/32": "199163", - "2a02:26f7:d649::/46": "20940", - "2409:8020:10d1::/34": "56046", - "240a:adbb::/32": "146165", - "2604:2d80:8900::/34": "30036", - "2a01:7d80:2500::/35": "8990", - "2001:559:814e::/48": "33652", - "2401:9cc0:300::/48": "59256", - "2600:6000:ffb2::/41": "12271", - "2a02:26f0:b901::/38": "20940", - "2407:7a80:14::/42": "132384", - "240e:85c::/44": "131285", - "2600:d05:4000::/30": "20161", - "2607:9e80:1301::/40": "397068", - "2804:67ac:8::/43": "269643", - "2806:230:4030::/48": "265594", - "2c0f:ee08::/48": "328249", - "2a02:578:6c00::/38": "9031", - "2a0f:8d40::/29": "207670", - "2401:cf80:6200::/32": "55303", - "2605:a40c:24::/32": "33363", - "2801:1d:e800::/48": "271918", - "2404:efc0:1300::/46": "10122", - "2409:8904:38a0::/39": "24547", - "2600:100d:be0e::/40": "22394", - "2604:2f80::/32": "26523", - "2804:78f4::/32": "271276", - "2a02:fe80:20::/46": "30148", - "2001:559:56d::/48": "7922", - "2403:9800:c040::/47": "133124", - "2404:bf40:e001::/48": "2764", - "2605:99c0::/32": "394775", - "2a0b:8900::/32": "21214", - "2a10:4646:40::/44": "211617", - "2804:ee8::/32": "262704", - "2a03:2880:f044::/47": "32934", - "2a03:f700::/32": "5563", - "2a0e:97c5:7ec::/46": "20473", - "2001:559:8345::/48": "22258", - "2001:67c:2094::/48": "12695", - "2804:5e74::/32": "269034", - "2806:1000:8001::/33": "8151", - "2001:df5:b700::/48": "131418", - "2001:16a2:c0f4::/44": "39386", - "240e:6b8:5000::/32": "4134", - "2a02:e0:3006::/39": "34984", - "2a02:6200::/29": "35206", - "2409:8c1f:a930::/33": "9808", - "2a00:86c0:2057::/42": "2906", - "2a0e:fa00::/47": "49447", - "2001:418:4006::/32": "2914", - "2600:1408:6c00::/48": "35994", - "2800:160:16a6::/47": "14259", - "2a01:358:4029::/36": "9121", - "2001:1638::/32": "31400", - "2401:b400:20::/48": "58811", - "240a:a16a::/32": "143012", - "2607:9e00:3002::/33": "30536", - "2804:2664::/32": "52721", - "2a0f:9400:8004::/48": "208393", - "2001:678:398::/48": "57560", - "2001:67c:1518::/48": "34776", - "2001:df5:ca80::/48": "132513", - "2400:9380:9ac0::/44": "136167", - "240e:473:4400::/41": "140485", - "2804:7a8::/39": "262309", - "2806:230:3005::/48": "11888", - "2a04:ec40:e000::/44": "20712", - "2001:678:73c::/48": "202266", - "2600:1407:2c01::/35": "20940", - "2607:f6f0:8002::/40": "32550", - "2a0f:9340:10::/47": "1299", - "2001:67c:43c::/48": "12552", - "2001:44b8:3091::/44": "4739", - "2409:8904:6270::/40": "24547", - "2600:6c38:610::/45": "20115", - "2602:fd60:ff0::/48": "137908", - "2a07:59c1:30c0::/45": "140731", - "2001:4b20:100:f002::/36": "34288", - "240a:a7ad::/32": "144615", - "2606:ae80:1472::/47": "25751", - "2804:151:1::/46": "10954", - "2804:204:229::/45": "28186", - "2804:2ea0:c6a0::/41": "265356", - "2806:230:4040::/48": "265594", - "2a00:9ac0::/32": "198096", - "2402:800:91c5::/42": "7552", - "2402:1580:297::/34": "17682", - "240e:44d:5b80::/41": "4134", - "2620:11::/44": "7743", - "2804:74f4:8000::/33": "271014", - "2a03:9fe0::/32": "21109", - "2a09:4c2:4b::/48": "212895", - "2001:503:91ef::/48": "7342", - "240a:aae9::/32": "145443", - "2001:503:231d::/48": "26415", - "2001:4479:4000::/35": "7545", - "2804:26b8::/48": "263852", - "2a00:f88::/32": "15726", - "2001:df3:7b80::/48": "139605", - "2404:fc00:1001::/44": "45910", - "2804:4d7c::/32": "268199", - "2a04:b480::/43": "60110", - "2a0b:96c0::/29": "211210", - "2800:484:100::/38": "14080", - "2400:5380::/32": "58910", - "240a:ac30::/32": "145770", - "2600:1406:d001::/37": "20940", - "2600:140b:7c01::/32": "20940", - "2a02:26f7:20::/48": "36183", - "2001:4dd8::/32": "13069", - "2400:7400:33::/41": "38044", - "2408:8957:e800::/40": "17622", - "240a:a0c6::/32": "142848", - "2804:2f9c::/32": "264902", - "2606:2800:4111::/46": "15133", - "2620:10a:a002::/40": "16920", - "2804:4880::/32": "267125", - "2a02:26f7:6d::/48": "20940", - "2a02:6680:11f0::/44": "16116", - "2001:dce:9500::/48": "38064", - "2001:43f8:1f4::/48": "37663", - "2405:6e00:2088::/45": "18291", - "2408:8256:2f8b::/48": "17816", - "2a00:1c10::/42": "50300", - "2a0b:11c0:11::/44": "198682", - "240a:aa60::/32": "145306", - "2604:81c0:1000::/36": "396422", - "2803:daa0::/32": "266875", - "2806:2f0:4061::/46": "17072", - "2a00:1160::/29": "5500", - "2a01:5f40::/32": "15682", - "2408:8001:e800::/37": "10206", - "2600:6c38:a94::/47": "20115", - "2604:a180:4000::/36": "11139", - "2c0f:f188::/46": "328228", - "2c0f:fb30::/32": "37412", - "2001:df0:cf::/48": "55390", - "2001:448a:20b0::/35": "7713", - "2401:d800:b9d0::/42": "7552", - "240a:a029::/32": "142691", - "240a:ad80::/32": "146106", - "2001:428:b27::/37": "209", - "2001:df4:bb80::/48": "139495", - "2001:1a11:78::/48": "8781", - "2409:875c:4e00::/26": "9808", - "240a:acfd::/32": "145975", - "240e:4::/37": "140061", - "2600:6c5c::/30": "20115", - "2a09:be40:4200::/41": "213349", - "2405:1c0:6223::/43": "55303", - "240a:a2a1::/32": "143323", - "2804:126c::/32": "267463", - "2a04:2640::/29": "60460", - "2600:1410:6001::/32": "20940", - "2800:280:4002::/32": "27781", - "2a00:1d34:4500::/34": "9121", - "2a04:4e40:3800::/48": "54113", - "2409:8a50:b00::/37": "56047", - "2600:6c38:b3f::/41": "20115", - "2a02:7cc0::/48": "35000", - "2001:12e0:8000::/36": "10429", - "2400:cb00:80::/47": "13335", - "2402:2000:6001::/35": "24350", - "2604:7c80::/32": "18897", - "2806:288:4081::/48": "28469", - "2a0f:f041::/32": "205715", - "2001:908::/30": "8326", - "2401:8700:3a::/48": "36408", - "240a:ac5b::/32": "145813", - "2607:4d00::/35": "33260", - "2804:674c::/32": "269619", - "2a0f:2b40::/29": "60262", - "2a01:4080::/32": "42291", - "2001:67c:760::/48": "35008", - "2401:7400:6020::/36": "4773", - "2409:8c63::/27": "9808", - "2600:1009:9100::/44": "6167", - "2607:9800:e001::/35": "15085", - "2804:6a74::/32": "270337", - "2a00:cb8:41::/48": "15695", - "2a10:380::/29": "213140", - "2001:253:123::/48": "142089", - "2402:800:33ee::/37": "7552", - "2620:f0:c001::/45": "14148", - "2a0b:5b00::/29": "48205", - "2409:8904:6840::/42": "24547", - "2a0e:c6c0::/32": "62075", - "2a0c:9a40:81fb::/48": "213253", - "2001:19e8:8ab0::/48": "4046", - "2403:a040:cdef::/48": "38047", - "2409:807c:2100::/36": "9808", - "2600:1000:f110::/36": "22394", - "2a02:26f7:ea88::/48": "36183", - "2a02:26f7:f8c0::/48": "36183", - "2a06:bf40::/30": "46723", - "2001:559:c02e::/48": "7725", - "2001:559:c080::/47": "33491", - "2408:8459:a10::/41": "17622", - "2604:cc00:a1::/48": "53292", - "2804:7858:6040::/35": "271236", - "2001:559:81ef::/48": "7015", - "240e:4e:800::/27": "4134", - "2001:559:8744::/48": "7015", - "240a:a1ff::/32": "143161", - "240a:ab60::/32": "145562", - "2602:ff41::/36": "395176", - "2a02:2000::/45": "35297", - "2a0d:60c4::/31": "208861", - "2001:559:51a::/47": "7922", - "2001:448a:5050::/40": "7713", - "2402:800:991d::/42": "7552", - "2804:11b0:2::/32": "263432", - "2804:3e54::/32": "266588", - "2a00:da00::/32": "8560", - "2a07:b6c0::/29": "50782", - "2001:559:86f6::/48": "33491", - "2803:3960::/32": "262186", - "2804:1b04::/45": "53048", - "2a02:2698:28::/46": "12768", - "2001:559:c2ed::/48": "33659", - "2001:44b8:406a::/48": "7545", - "2406:8dc0:2204::/48": "60614", - "240a:a886::/32": "144832", - "2a0f:5707:ab2b::/48": "7489", - "2a02:5060::/32": "60144", - "2001:559:c09d::/48": "33651", - "2001:559:c28c::/47": "33491", - "2406:1400:c174::/48": "24342", - "2406:3002:50:4000::/31": "4657", - "240a:a19e::/32": "143064", - "2a00:d340:ffe0::/48": "41321", - "2a02:818::/32": "15525", - "2a0b:14c0:3::/48": "396535", - "2a03:dc00::/32": "57752", - "2001:559:549::/48": "33651", - "2001:579:9d8c::/34": "22773", - "2001:978:5203::/48": "209312", - "2401:4640::/32": "18259", - "2600:380:9800::/37": "20057", - "2800:160:1a8d::/43": "14259", - "2a02:26f7:ed05::/46": "20940", - "2001:559:2b1::/48": "33491", - "240a:a71e::/32": "144472", - "2600:100f:b140::/40": "22394", - "2804:5704::/32": "268038", - "2a05:3343:8::/47": "36351", - "2a07:58c0::/29": "203018", - "2001:67c:20f8::/48": "34290", - "2400:e1c0:800::/37": "58659", - "2a05:e700::/29": "198710", - "2a0c:9a40:8085::/48": "7489", - "2a0c:b641:1::/48": "34872", - "2a0f:9340:1a::/48": "1299", - "2600:380:f10c::/46": "20057", - "2600:9000:112e::/43": "16509", - "2a02:28a8::/32": "51800", - "2405:9800:9812::/47": "45430", - "2806:370:41a0::/41": "28403", - "2a02:26f7:c801::/46": "20940", - "2a0c:f700::/29": "206119", - "2a0d:4707::/35": "207044", - "2a0e:800:ff40::/42": "208266", - "2a0e:22c0:1::/48": "48918", - "2001:1248:8427::/44": "11172", - "2600:1404:b801::/37": "20940", - "2607:f740:e60b::/48": "63911", - "2a02:26f7:e6::/48": "36183", - "2408:8256:2d8c::/48": "17816", - "2804:68a4::/32": "269706", - "2806:230:1007::/48": "11888", - "2a00:1bf8::/32": "8487", - "2a00:8c60:2::/48": "60432", - "2001:67c:160::/48": "44238", - "2001:ee0:ee00::/40": "45899", - "2409:8c15:2000::/40": "9808", - "2600:140f:2a01::/39": "20940", - "2620:0:a00::/47": "2165", - "2a02:26f0:7401::/39": "20940", - "2402:7800:ff50::/40": "4826", - "2402:8a00:4080::/32": "24477", - "2600:100d:f010::/40": "22394", - "2001:18e8:800::/44": "17", - "2408:8956:8200::/40": "17622", - "240a:ac0a::/32": "145732", - "2801:80:190::/48": "262413", - "2a0a:4a40::/34": "206754", - "2001:468:509::/40": "14041", - "2001:559:50d::/43": "7922", - "240e:422::/32": "4134", - "2804:6280::/45": "269301", - "2a05:6700::/29": "203020", - "2001:67c:25bc::/48": "198008", - "2620:115:40ff::/48": "3145", - "2406:840:f480::/48": "142554", - "2409:8002:1900::/37": "9808", - "240a:a1eb::/32": "143141", - "240a:a787::/32": "144577", - "2406:b400:d0::/47": "55577", - "2607:f678::/32": "13868", - "2001:559:c28f::/43": "21508", - "2001:978:3b00:3::/37": "174", - "2001:df2:d380::/48": "132010", - "2a02:26f7:93::/48": "20940", - "2a03:b202::/29": "20860", - "2a0c:b641:470::/44": "208029", - "2001:559:814f::/48": "33657", - "2001:b08:21::/45": "3267", - "240a:ad67::/32": "146081", - "2a01:ce8e::/32": "51964", - "2a04:23c0::/29": "200851", - "2001:470:f6::/48": "13925", - "2404:4a00:2094::/48": "55423", - "2001:559:c092::/48": "7922", - "2402:800:579b::/42": "7552", - "2402:e380:31f::/48": "142148", - "2604:a140:1502::/45": "4755", - "2a05:1140::/29": "59890", - "2001:1440:201::/46": "5401", - "2402:800:b130::/41": "7552", - "240a:a000::/32": "142650", - "240a:ae14::/32": "146254", - "240e:808::/27": "4134", - "2801:11e:4::/44": "3816", - "2605:ae00::/33": "7819", - "2a03:4d41:110::/38": "199610", - "2a03:5a00:7::/48": "61400", - "2001:559:5a1::/48": "33287", - "2001:559:c254::/48": "33662", - "240a:a51d::/32": "143959", - "2804:53a0::/35": "268596", - "2606:740::/32": "3356", - "2a09:e900::/29": "211546", - "2a0b:df00::/32": "44984", - "2001:559:257::/48": "33287", - "240a:a9f6::/32": "145200", - "2600:1900:40d0::/44": "396982", - "2804:2ef4::/32": "264863", - "2a03:fc00::/29": "34756", - "2a0e:b107:14a0::/44": "142438", - "2001:67c:20e0::/48": "34225", - "2401:ff80:1a13::/40": "133954", - "240e:4b:4800::/32": "4134", - "2602:feda:20::/44": "205532", - "2604:b40::/32": "395846", - "2803:d640::/32": "27729", - "2a0d:3640::/29": "3214", - "2a0f:b140::/29": "50067", - "2a0d:7a40:1::/46": "60254", - "2001:7f8:e7::/48": "34800", - "2402:800:5ae0::/44": "7552", - "2600:1406:46::/48": "20940", - "2804:2e4:8001::/34": "53234", - "2804:10fc::/32": "263656", - "2a04:4e40:4000::/48": "54113", - "2a0a:cc40::/29": "44241", - "2a0e:b107:f60::/44": "207466", - "2404:f780:a::/48": "136557", - "2602:ff96:7::/48": "31863", - "2803:f4a0::/32": "266830", - "2a03:d000:2000::/36": "31133", - "2001:678:22c::/48": "25419", - "2403:9f40::/32": "138074", - "2405:d300::/43": "17477", - "2804:29f8:1::/48": "264048", - "2001:67c:1384::/48": "204896", - "2408:8256:357f::/48": "17816", - "2600:1480:e800::/48": "21342", - "2804:14d:ea00::/40": "28573", - "2a0e:b107:532::/44": "209114", - "2402:800:95b7::/41": "7552", - "2600:370f:3585::/42": "32261", - "2607:8b80::/32": "4986", - "2a01:b740:a2a::/41": "714", - "2a02:26f7:d805::/46": "20940", - "2c0e:7f89::/27": "36974", - "240a:a6c7::/32": "144385", - "240a:ae50::/32": "146314", - "2606:6800:2c00::/40": "394897", - "2620:0:50c0::/48": "6939", - "2804:20::/32": "26615", - "2804:5104::/32": "268425", - "2806:20d:5b05::/32": "32098", - "2408:8459:e810::/42": "17623", - "240a:a85a::/32": "144788", - "2804:1c1c:2001::/35": "61638", - "2806:370:9010::/44": "28403", - "2a02:26f7:f901::/46": "20940", - "2a02:ee80:413a::/45": "3573", - "2401:7000:a0a2::/36": "45177", - "240a:a0d5::/32": "142863", - "2801:80:2560::/48": "268620", - "2804:3bf0:4001::/32": "266181", - "2806:230:6001::/48": "11888", - "240a:a226::/32": "143200", - "2804:2f60::/39": "264887", - "2a01:6d80:2000::/36": "15683", - "2a09:7:2007::/48": "43357", - "2001:559:26a::/48": "7922", - "2604:d600:c6f::/43": "32098", - "2804:5574::/32": "267936", - "2804:6cfc::/32": "270505", - "2a01:666:100::/37": "48951", - "2001:678:fa4::/48": "43173", - "2001:4878:c347::/48": "12222", - "2a02:2370:101::/45": "32787", - "2404:bf40:f801::/48": "2764", - "2605:a401:878c::/42": "33363", - "2605:e000:70b::/48": "10838", - "2a0d:1ac7::/32": "56601", - "2a0b:4341:d01::/48": "57695", - "2001:559:6e::/48": "33651", - "2604:d00::/32": "40523", - "2806:2f0:7340::/32": "17072", - "2a00:5a20:2::/34": "199289", - "2a01:9580::/34": "49544", - "2a02:26f7:d15a::/45": "20940", - "2a02:26f7:e3c4::/48": "36183", - "2001:4878:a000::/48": "12222", - "2400:cb00:a410::/45": "13335", - "2620:74:a1::/48": "11840", - "2a07:d40::/29": "203338", - "2606:2800:3fff::/33": "15133", - "2606:3a80:500::/48": "396948", - "2400:7fc0:2c0::/44": "55960", - "2600:1480:8000::/40": "33905", - "2602:feb4::/44": "25961", - "2606:ae00:cc31::/41": "7287", - "2804:27f8::/32": "263932", - "2001:559:3ee::/48": "33491", - "2001:559:80ce::/48": "7922", - "240a:a5f8::/32": "144178", - "2a02:26f7:cc89::/42": "20940", - "2a06:c002::/32": "206766", - "2a0f:c700::/29": "39384", - "2001:808:e000::/31": "8364", - "2001:48c8::/45": "29791", - "2402:6f80::/32": "134220", - "2a00:1ea0::/47": "35007", - "2a02:26f7:fc08::/48": "36183", - "2a06:6c0:254::/47": "200738", - "2a0c:b641:690::/46": "209297", - "2001:16d8:bc00::/33": "16150", - "240e:3b7:2800::/38": "4134", - "2606:af00::/32": "30236", - "2804:8140:2000::/32": "272442", - "2a02:ad8::/43": "12389", - "2a03:80c0:abba::/48": "210079", - "2001:559:8460::/48": "33660", - "2001:67c:25d0::/48": "48061", - "2409:8000:2100::/37": "9808", - "2804:c70::/32": "52706", - "2a0f:9400:7340::/47": "209101", - "2a02:cb81:1000::/45": "43766", - "2001:400:b14::/48": "3671", - "2001:559:80c7::/44": "33662", - "2401:d800:5e00::/42": "7552", - "2408:84f3:bc10::/42": "134543", - "2408:8957:9600::/40": "17622", - "2408:8957:9700::/40": "17816", - "2a02:f40::/32": "20960", - "2001:f40:12::/32": "9930", - "2620:106:c009::/48": "11039", - "2001:438:3a::/41": "6461", - "2404:a8:5::/48": "24514", - "2001:559:122::/48": "7015", - "2001:5002:300:1::/64": "6461", - "2801:1e2::/44": "27951", - "2a0b:5400:1::/48": "13030", - "2a06:6740::/29": "20596", - "2001:438:39::/48": "17025", - "2001:df5:9180::/48": "9009", - "2001:448a:3010::/42": "7713", - "2402:79c0:1179::/48": "26415", - "240a:a1d7::/32": "143121", - "2600:140b:2800::/48": "24319", - "2800:484:1600::/34": "10620", - "2a06:b840::/29": "203608", - "2a0f:bb00::/29": "34856", - "2001:978:5d04::/34": "174", - "2804:96c::/32": "263085", - "2a06:600::/29": "200742", - "2406:da70:1000::/40": "16509", - "240e:c2:2000::/31": "4134", - "2806:310:9::/48": "28523", - "2a02:26f7:d2c4::/48": "36183", - "2a09:8d00::/29": "2593", - "2001:1248:975d::/42": "11172", - "2408:8456:3c00::/41": "17623", - "240e:473:3720::/41": "140486", - "2a00:1418:f::/48": "41391", - "2a03:1000::/32": "25575", - "2c0f:ec30::/32": "37722", - "2001:559:823a::/48": "13367", - "2400:9700:101::/43": "24550", - "2408:8956:3800::/40": "17622", - "2804:63c::/32": "262571", - "2a0b:4d07:b01::/48": "44239", - "2a0b:a700::/29": "207003", - "2a0d:9d40::/29": "48704", - "2001:4878:4000::/48": "12222", - "2408:8957:ba00::/40": "17622", - "2602:fcd3:100::/48": "212934", - "2001:559:762::/47": "7015", - "2400:cb00:a2c2::/48": "13335", - "2602:fccf::/36": "398355", - "2a02:26f7:c3c4::/48": "36183", - "2a02:26f7:cac4::/48": "36183", - "2a02:26f7:e305::/46": "20940", - "2404:c2c0:2c0::/44": "135629", - "2408:8956:6e00::/40": "17622", - "2600:1012:b180::/43": "22394", - "2605:8300::/47": "33059", - "2804:3b04::/32": "266124", - "2806:230:202a::/48": "265594", - "2a03:5240::/32": "199599", - "2804:3d7c::/32": "266534", - "2001:7a8:810::/44": "34019", - "2001:fd8:220::/48": "132199", - "2400:6180:100::/40": "14061", - "2402:800:5671::/44": "7552", - "2402:8100:2360::/43": "55644", - "240a:a7f7::/32": "144689", - "240a:aeef::/32": "146473", - "2a02:26f7:e481::/46": "20940", - "240a:aedd::/32": "146455", - "240a:af52::/32": "146572", - "2a00:ebe0::/32": "62423", - "2a0e:e704:44::/48": "212971", - "240a:a7c9::/32": "144643", - "2801:1e:4000::/45": "262266", - "2804:798::/32": "262304", - "2804:73a0::/32": "270927", - "2a0e:f42::/32": "208627", - "240e:438:2a40::/37": "4134", - "2804:7dc0::/32": "271580", - "2001:470:ef::/48": "6939", - "2409:8080:2a50::/44": "9808", - "2620:129::/44": "6169", - "2a0f:cc0::/29": "60262", - "2c0f:2800::/32": "328543", - "2401:1d40::/48": "23724", - "2620:130:3041::/48": "62861", - "2a03:580::/32": "15576", - "2001:44b8:605e::/48": "7545", - "2401:d800:fc0::/42": "7552", - "2606:fe00::/32": "7828", - "2620:30:c000::/44": "32234", - "2806:230:3009::/48": "11888", - "2001:67c:266c::/48": "25417", - "2402:800:b7a0::/41": "7552", - "2409:8924:bd00::/38": "56046", - "2804:e64:123::/37": "262952", - "2804:6c28::/32": "270449", - "2001:c20:4883::/45": "9255", - "2408:872b:404::/32": "4837", - "240e:473:1650::/39": "4134", - "2605:7900:42::/48": "19133", - "2a0b:88c0::/29": "206728", - "2400:fc00:8040::/39": "45773", - "2804:2b18::/32": "265134", - "2401:d800:9610::/42": "7552", - "240e:3be:c000::/37": "140315", - "240a:a2f4::/32": "143406", - "2604:3548::/32": "399587", - "2801:19:6800::/48": "19429", - "2804:1bc:efd4::/48": "14781", - "2804:4498::/32": "267641", - "2a01:7c00:20::/29": "52075", - "2001:559:82f9::/48": "33661", - "2402:cac0::/32": "59217", - "240e:3b5:5600::/34": "4134", - "2600:370f:5250::/44": "32261", - "2602:807:50e0::/47": "55136", - "2a02:7200::/32": "30721", - "2a02:1c8:5::/48": "47775", - "2001:b28:9999::/48": "31500", - "2001:4878:2246::/48": "12222", - "2604:880:3c::/48": "29802", - "2800:160:129a::/42": "14259", - "2804:76cc:2000::/32": "271135", - "2a04:ac00:2::/48": "203004", - "2600:6c38:10f::/43": "20115", - "2001:67c:4e8::/48": "62041", - "2001:67c:2738::/48": "12628", - "2401:7500:fff0::/47": "133296", - "2408:8647:1200::/28": "4837", - "240a:a618::/32": "144210", - "240a:abc4::/32": "145662", - "2600:370f:3425::/44": "32261", - "2400:cb00:a1a0::/46": "13335", - "2405:6e00:470::/40": "133612", - "240a:ac36::/32": "145776", - "2620:100:a005::/46": "19750", - "2801:1f0:4026::/47": "3573", - "2a02:2978::/32": "15830", - "2001:678:1c4::/48": "48971", - "240a:a8e2::/32": "144924", - "2804:58c0::/32": "268147", - "2804:6b6c::/32": "270399", - "2a07:e80::/29": "203329", - "2401:4900:4110::/38": "45609", - "2608:4162:1::/48": "27065", - "2803:5c80:5591::/48": "64114", - "2804:f28::/32": "262683", - "2402:8100:2460::/44": "45271", - "240a:a259::/32": "143251", - "2804:79e4::/32": "271334", - "2a07:12c0::/29": "25795", - "2001:559:c1c6::/48": "7016", - "2408:8756::/36": "17622", - "240a:ae1e::/32": "146264", - "2600:1012:9110::/36": "22394", - "2804:2804:f800::/37": "263935", - "2a02:2c00::/29": "203424", - "2404:4600:8::/48": "10158", - "2a07:8d85::/30": "61110", - "2405:3f00::/31": "38719", - "2602:fcbf::/36": "399338", - "2604:a400::/32": "11320", - "2806:2f0:9241::/42": "17072", - "2a00:79e1:f0f::/43": "36384", - "2001:559:479::/46": "7922", - "2001:559:4a7::/48": "33660", - "2408:80f1:1b0::/44": "17621", - "2001:1248:a67b::/40": "11172", - "2a00:7145:b1::/48": "51430", - "2a00:e040:c00::/47": "15953", - "2806:230:1032::/48": "265594", - "2a07:3502:1050::/48": "1136", - "2001:559:833d::/48": "33659", - "2001:678:214::/48": "62269", - "2408:8459:24c0::/38": "17816", - "2409:8904:5870::/40": "24547", - "2600:140b:b001::/38": "20940", - "2804:2954::/32": "264009", - "240e:438:7020::/43": "140647", - "2804:768::/36": "52977", - "2a02:2b80:101::/48": "45012", - "2a0c:63c0::/48": "39642", - "2001:67c:14b0::/48": "13127", - "2a00:dd8:1::/48": "15994", - "240a:a87e::/32": "144824", - "2606:1b00::/32": "11722", - "2804:61b4::/32": "269251", - "2a0a:580:1121::/40": "15404", - "2001:4d40::/32": "13237", - "2401:d800:5bb0::/41": "7552", - "2409:8051:1000::/47": "56047", - "2620:106:8000::/44": "33309", - "2a03:ae00:2001::/32": "49138", - "2a04:4e40:5a00::/48": "54113", - "2001:4490:4c60::/46": "9829", - "2600:1012:b1f0::/33": "22394", - "2604:5880::/48": "10980", - "2a02:26f7:d545::/46": "20940", - "2400:adc0:c100::/46": "9541", - "240a:aa65::/32": "145311", - "2804:108c:d700::/34": "28146", - "2620:125:9001::/48": "397415", - "2801:1b:8800::/48": "19429", - "2001:678:ab8::/48": "35814", - "2602:808:1::/46": "25948", - "2604:9cc0:800::/38": "50131", - "2408:8244:1200::/32": "4837", - "2a02:ac80:7371::/32": "25145", - "2a0a:8500::/29": "206936", - "2001:559:8385::/48": "33651", - "2403:c00::/46": "17488", - "2408:8256:327c::/48": "17816", - "2800:5e0::/32": "28007", - "2a01:8380::/32": "5433", - "2001:df1:3200::/48": "131353", - "2401:7500:1112::/36": "133296", - "2408:840d:200::/42": "17621", - "2a02:2e02:a1b0::/33": "12479", - "2001:559:c2c5::/48": "7016", - "2001:67c:209c::/48": "212430", - "2001:df3:e180::/48": "140695", - "2404:4f02::/40": "137840", - "2a06:fac0::/29": "13182", - "2a02:26f7:c084::/48": "36183", - "2a02:2e02:96c0::/39": "12479", - "2a0e:b107:27e::/48": "212519", - "2001:13b0:800f::/43": "3549", - "2400:3b00:30::/48": "18229", - "2400:cb00:120::/44": "13335", - "240a:a60c::/32": "144198", - "2a01:190:151e::/48": "207791", - "2001:468:26e1::/48": "237", - "2001:579:b05::/37": "22773", - "2c0f:ef40::/32": "328337", - "2400:dd03:100b::/29": "7497", - "2402:c340:cccd::/34": "38047", - "2408:840d:5000::/42": "17621", - "2602:fcf1::/36": "398998", - "2604:9500::/32": "13807", - "2a02:e0::/43": "34984", - "2405:6400:4000::/36": "45121", - "240e:438:b020::/43": "140647", - "2a01:5c8:800::/45": "35402", - "2a01:b200::/32": "44185", - "2a02:26f7:c4c5::/46": "20940", - "2c0f:fde8:1000::/36": "37712", - "2402:9d80:a71::/44": "131429", - "2408:8956:a00::/40": "17622", - "2620:16:e000::/48": "396027", - "2804:474c::/32": "267044", - "2a0e:aa07:e011::/48": "212916", - "2a00:47a0::/32": "61010", - "2001:559:c32a::/48": "33657", - "2405:ef00::/43": "58779", - "240a:a13d::/32": "142967", - "2600:140f:f800::/48": "24319", - "2600:5c00:3aad::/48": "11351", - "2a01:7e80:321::/32": "197990", - "2a02:26f7:c185::/46": "20940", - "2001:4b22:10::/64": "65505", - "2607:ce80::/32": "23523", - "2607:f3f8:7::/35": "19019", - "2a02:26f7:d089::/42": "20940", - "2a02:26f7:f40c::/48": "36183", - "2a05:8880:4::/48": "203589", - "2401:47c0::/35": "41095", - "2604:d600:50b::/43": "32098", - "2409:8008:3900::/32": "24547", - "2620:13f:7008::/48": "51439", - "2800:430:2100::/33": "23487", - "2801:80:1e61::/46": "14026", - "2a00:5fa0:1000::/48": "205028", - "2a0b:6b86:401::/48": "207080", - "2a0d:bd80::/30": "47724", - "2001:4878:c215::/46": "12222", - "2401:3c0:100::/46": "45528", - "2408:8456:5800::/42": "17622", - "240e:940:ef00::/30": "4134", - "2001:559:125::/48": "7725", - "240a:a9a1::/32": "145115", - "2605:a401:8074::/40": "33363", - "2804:60e0::/32": "269197", - "2a03:8580::/32": "8464", - "2a0b:fa00::/32": "28674", - "2804:950::/32": "263072", - "2001:559:c3dc::/48": "7015", - "2001:4ce9::/30": "34868", - "240a:a6f2::/32": "144428", - "2602:fd12::/48": "16509", - "2606:3a80:100::/48": "396949", - "2620:149:a06::/48": "6185", - "2800:a00::/32": "11315", - "2a00:13f0::/32": "39662", - "2a00:ac00::/31": "51728", - "2a01:bf00::/32": "9044", - "2a11:f00::/29": "50178", - "2605:e240:b::/48": "16509", - "2a00:79e1:380::/48": "395973", - "2a01:a220::/29": "57276", - "2a09:dc40::/29": "197522", - "2001:400:b31::/34": "293", - "2001:559:84f9::/48": "33287", - "2408:805d::/44": "17623", - "2a02:26f7:32::/48": "36183", - "2a02:ff80::/29": "34764", - "2a05:e980::/32": "47215", - "240a:a2f6::/32": "143408", - "2a0a:c3c0::/29": "208861", - "240a:ab19::/32": "145491", - "2600:100b:a010::/39": "6167", - "2605:e9c0::/32": "29696", - "2801:140:fffe::/48": "262249", - "2a00:19c8::/32": "35833", - "2a02:26f7:40::/48": "36183", - "2001:4bf8::/32": "8271", - "2605:a408:4f::/32": "33363", - "2605:dd40:8220::/48": "398549", - "2a00:1908:ffff::/48": "205365", - "2a00:eac0::/32": "20915", - "2001:fd8:a8::/41": "4775", - "2001:4b22:0:1::/44": "34288", - "2401:fd80:1fd::/48": "43519", - "2800:160:137f::/40": "14259", - "2a02:2e02:1520::/41": "12479", - "2a07:c600::/29": "199163", - "2001:559:84fa::/48": "7016", - "2001:df0:29f::/48": "58445", - "2400:d400:1337::/48": "45671", - "2402:800:3a8d::/43": "7552", - "2408:8956:f640::/40": "17622", - "2a05:45c0::/32": "8193", - "2a10:c340::/29": "208861", - "2001:67c:b4::/48": "16509", - "2405:7f00:a1a0::/38": "133414", - "2607:fcd8::/42": "33182", - "2a0e:b107:88b::/48": "212858", - "2001:559:8724::/48": "7922", - "2409:4070:5000::/31": "55836", - "2606:5000:600::/36": "3908", - "2803:4120:50::/48": "64108", - "2804:6460::/32": "269424", - "2804:805c::/32": "271746", - "2a02:26f7:c341::/45": "20940", - "2001:559:850c::/47": "7725", - "2001:49d0:1c0::/32": "2495", - "2804:6484::/32": "269432", - "2a00:16f8:10::/48": "397942", - "2a02:26f7:b781::/46": "20940", - "2402:800:5271::/44": "7552", - "2a07:9440::/30": "202682", - "2001:c20:c814::/47": "9255", - "240a:a508::/32": "143938", - "2600:1417:1e::/48": "9498", - "2604:5040::/32": "20150", - "2804:2688::/32": "262482", - "2001:559:325::/48": "7922", - "2403:7340::/32": "136308", - "2803:f00:64b::/48": "262182", - "2804:1010::/34": "263617", - "2402:28c0:fffa::/45": "136620", - "240e:3ba::/35": "134773", - "2606:2800:4a87::/48": "14210", - "2a02:2018::/32": "51218", - "2a03:560::/47": "201832", - "2a0d:4cc0::/29": "30823", - "2c0f:ed58::/32": "328471", - "2001:559:80a7::/48": "7015", - "2600:1010:d1d0::/34": "22394", - "2804:14d:2a2d::/41": "28573", - "2800:160:1738::/41": "14259", - "2800:bf0:81c7::/43": "27947", - "2409:8080:2aaf::/48": "56040", - "2603:c0e9:2000::/36": "1218", - "2620:11d:d000::/40": "18995", - "2804:6bec::/32": "270434", - "2806:268:2300::/47": "13999", - "2402:1580:2970::/32": "17682", - "2620:138:6000::/48": "36710", - "2001:4528:1000::/32": "18101", - "2405:1c0:6453::/42": "55303", - "2606:2800:4224::/48": "15133", - "2607:fdf0:5e86::/44": "8008", - "2804:5740::/32": "268054", - "2001:559:c29a::/48": "33657", - "2404:4f80:34::/47": "58715", - "240e:d2:8000::/29": "4134", - "2604:4300:f1f::/42": "33387", - "2001:559:595::/48": "33659", - "2401:14c0::/44": "136531", - "2405:2001:2::/48": "6421", - "2405:ec01:a000::/33": "137412", - "240a:aca8::/32": "145890", - "240e:698:4200::/40": "58466", - "2800:160:14f4::/44": "14259", - "2408:8957:7b00::/40": "17816", - "2803:c660::/32": "64122", - "2a02:26f0:3d01::/33": "20940", - "2001:678:d8::/48": "35407", - "2001:67c:1708::/48": "38974", - "2401:d800:d760::/40": "7552", - "2606:a800::/32": "4922", - "2607:f5b5:2::/47": "7203", - "2620:74:2c::/48": "396574", - "2a07:a900::/29": "46261", - "2605:c8c0::/32": "10546", - "2a0c:e641::/32": "209645", - "2403:c240::/32": "9264", - "240e:473:1b50::/37": "4134", - "2606:9380::/32": "15011", - "2804:74f4::/46": "271014", - "2806:2f0:3104::/42": "17072", - "2a01:3e0:d02::/29": "6453", - "2a0a:4786::/32": "208861", - "2001:559:34e::/48": "7016", - "2001:1248:5504::/43": "11172", - "240a:a198::/32": "143058", - "2a02:500:6000::/32": "5538", - "2a02:26f7:d900::/48": "36183", - "2800:2d0::/32": "3603", - "2a01:a040::/32": "39791", - "2405:4000:801::/61": "7470", - "2a0e:b107:4d0::/47": "209083", - "2a10:3d00::/29": "212457", - "2604:3d40::/32": "40943", - "2804:66bc::/32": "269579", - "2a02:26f7:ea89::/42": "20940", - "2a02:7980::/39": "43937", - "2001:678:888::/48": "209933", - "2a0e:8f02:f01f::/48": "211696", - "2610:b0:4112::/45": "3573", - "2a04:30c0::/32": "20473", - "2606:1780::/32": "40676", - "2804:4c0c::/41": "267345", - "240e:44d:6b00::/41": "140345", - "240e:951:2400::/38": "138991", - "2602:fcdb::/36": "55103", - "2a0f:5707:ab21::/48": "49367", - "2408:8456:7640::/36": "17816", - "2801:80:250::/48": "262512", - "2804:6c70::/32": "270468", - "2a01:4fe0::/32": "57928", - "2a11:ad80::/48": "210829", - "2001:559:4e4::/48": "7922", - "240a:a875::/32": "144815", - "240a:ab57::/32": "145553", - "2605:6440:1000::/44": "396356", - "2806:202::/32": "28458", - "2a06:e540::/29": "203600", - "2001:67c:25e0::/48": "44760", - "2001:9e8:2180::/32": "8881", - "240e:83:ff00::/40": "23724", - "2804:49c:3110::/48": "15201", - "2a00:1c60::/32": "47674", - "2a01:5041:c::/48": "202196", - "2a04:4e40:c010::/41": "54113", - "2803:7c60::/32": "27951", - "2a00:1278::/32": "12813", - "2a0c:ca80::/31": "34915", - "2a0d:ce00::/29": "200428", - "2001:1248:9c41::/42": "11172", - "240a:ad45::/32": "146047", - "2604:2280:ff00::/40": "53340", - "2620:13a:3000::/44": "14414", - "2804:4d4::/32": "262469", - "2a0e:97c5:5b0::/46": "20473", - "2001:559:3b4::/48": "7015", - "2401:7000:c100::/35": "45177", - "2405:1e00:fe::/47": "17771", - "2607:1380:2::/32": "6576", - "2806:2f0:3544::/42": "17072", - "2001:3a0:f006::/48": "38644", - "2001:559:824e::/48": "33661", - "2408:8957:1600::/40": "17622", - "2604:fec0::/32": "21808", - "2801:1c:e800::/48": "18747", - "2804:4d94::/32": "268206", - "2402:f800:cf01::/40": "7602", - "2604:f80:3::/45": "22458", - "2400:1f80::/32": "58451", - "2402:b801:2b00::/37": "18371", - "2602:fed5:3::/45": "27398", - "2602:ffb1:300::/48": "53356", - "2a0f:1040::/29": "60262", - "2001:550:9b04::/37": "174", - "2408:80ea:6380::/41": "17622", - "2a02:2e02:2040::/43": "12479", - "2001:ee0:a040::/37": "45899", - "2409:8002:1100::/37": "9808", - "2409:8752:b00::/37": "56047", - "2804:5ac0::/32": "268793", - "2806:288:4040::/47": "28469", - "2a09:1e80::/29": "21769", - "2001:4878:8136::/48": "12222", - "240a:a17e::/32": "143032", - "240a:a7ef::/32": "144681", - "240e:3bc:2c00::/35": "134774", - "240e:473:b20::/41": "140486", - "2803:46e0::/47": "269953", - "2a06:5cc0::/29": "42505", - "2600:1413:1001::/36": "20940", - "2001:559:41f::/48": "33651", - "2a01:6d0::/32": "12552", - "2a0a:d540::/32": "207322", - "2a0d:b00:9201::/48": "205862", - "2001:67c:2d64::/48": "39923", - "2400:4c80::/32": "7632", - "2406:e001:7800::/32": "23655", - "240e:c:6800::/37": "4134", - "2001:559:5f0::/48": "7922", - "2001:678:348::/48": "43861", - "2001:978:1b04::/37": "174", - "2001:df7:b300::/48": "131111", - "2400:adce:5000::/40": "9541", - "2406:4580::/32": "59123", - "240a:a8b4::/32": "144878", - "2804:6f48::/32": "270650", - "2a0d:5bc0::/32": "210252", - "2607:fcd0:fa80:5906::/60": "8100", - "2a01:9700:145c::/46": "8376", - "2001:48d8::/32": "6596", - "240a:afcb::/32": "146693", - "240e:44d:3d00::/41": "140345", - "2604:d600:651::/46": "32098", - "2620:0:1a80::/48": "46964", - "2804:4fd4::/32": "268352", - "2a09:4c0:8701::/34": "58057", - "2001:559:21e::/48": "33651", - "2600:6c7f:9062::/48": "20115", - "2a02:2ab8:32d::/46": "702", - "2a04:7f80::/29": "48728", - "2001:559:54c::/47": "21508", - "2600:5800:1602::/32": "11426", - "2607:fae0:6000::/36": "8038", - "2620:100:3012::/48": "23286", - "2a06:c3c0:2::/48": "29182", - "2a0e:b102:130::/44": "39526", - "2001:67c:110::/48": "3274", - "240a:a80b::/32": "144709", - "240a:aaba::/32": "145396", - "240e:438:2620::/43": "140647", - "2620:1c0:72::/47": "22773", - "2804:6378::/32": "269363", - "2001:ee0:8100::/36": "45899", - "2607:b400:a00::/48": "1312", - "2804:3e78::/32": "266598", - "2a02:26f7:fbc1::/46": "20940", - "2a10:6300::/29": "398559", - "2001:df0:41f::/48": "133014", - "2402:800:5a0f::/43": "7552", - "2a02:6621::/32": "47723", - "2a03:e140:2::/48": "59533", - "2a07:3500:19a0::/48": "38915", - "2001:253:116::/48": "142082", - "2406:b400:10::/46": "18209", - "2a02:26f7:d004::/48": "36183", - "2a0e:b103:b93::/41": "20473", - "2c0f:eea8:9000::/36": "328306", - "2001:7e0::/32": "13285", - "2620:149:551::/42": "714", - "2a03:bb40::/32": "61211", - "2a04:940::/47": "51407", - "2001:502:4612::/48": "397229", - "2001:559:808e::/43": "33657", - "2001:4188:2::/48": "49666", - "2a04:cc0::/29": "29075", - "2a04:a4c0::/48": "59789", - "2803:7180:2000::/36": "21575", - "2a00:de60::/32": "47999", - "2a02:26f7:c181::/46": "20940", - "2c0f:f020:100::/38": "327907", - "2001:559:199::/48": "7016", - "2405:1c0:6343::/43": "55303", - "240a:a959::/32": "145043", - "2604:d600:1329::/45": "32098", - "2804:4c0:fffd::/46": "3549", - "2a01:b740:1540::/32": "714", - "2a0b:7280::/29": "48635", - "2405:8a00:8022::/44": "55824", - "240e:438:8640::/36": "4134", - "240e:967:8800::/38": "133775", - "2a07:180::/32": "209242", - "2404:3d00:4058::/47": "21433", - "2610:30::/34": "30313", - "2001:559:315::/48": "33489", - "2001:559:8401::/48": "33491", - "2403:1240::/32": "24279", - "240a:a51c::/32": "143958", - "240a:a8ff::/32": "144953", - "2800:370:a::/48": "28006", - "2a02:2ad0:109::/43": "702", - "2001:559:c0cf::/48": "33659", - "240a:a1b4::/32": "143086", - "240a:a9f4::/32": "145198", - "2620:0:1af0::/48": "36786", - "2409:8050:2c00::/38": "9808", - "2a02:ee80:4264::/43": "3573", - "2a05:7780::/32": "39892", - "2409:8904:7c40::/39": "24547", - "2409:8a51:300::/37": "56047", - "2001:559:464::/48": "7725", - "240e:44d:1700::/41": "140345", - "2401:4900:46c0::/43": "45609", - "2405:ed00::/32": "10000", - "2409:8704::/38": "24547", - "2804:1f22::/32": "264957", - "2804:4734::/32": "267038", - "240a:a2d8::/32": "143378", - "2001:4ce8::/32": "250", - "2804:5c50::/32": "268901", - "2a05:8f00::/29": "201199", - "240a:ad79::/32": "146099", - "2602:fca9::/36": "1742", - "2806:230:5001::/48": "11888", - "2a02:26f7:f6c1::/46": "20940", - "2600:1408:bc01::/33": "20940", - "2620:128:2011::/40": "395287", - "2803:6700:1000::/40": "263210", - "2804:1c84:700::/32": "61659", - "2a02:26f7:b7c0::/48": "36183", - "2001:559:545::/48": "22258", - "2a02:26f7:c784::/47": "36183", - "2a02:2864::/30": "25255", - "2a03:2880:f300::/36": "32934", - "2001:448a:6090::/41": "7713", - "2620:9:a00c::/46": "395515", - "2806:20d:1631::/36": "32098", - "2806:2f0:70c1::/39": "17072", - "2a0f:b7c0::/29": "49688", - "2401:7000:f000::/36": "45177", - "2605:7900:8::/47": "19133", - "2804:14c:6587::/44": "28573", - "2a00:5540:5015::/32": "50763", - "2001:559:c2a6::/48": "33659", - "2600:1405:f001::/30": "20940", - "2a00:4120:8000:6::/64": "201044", - "2a09:84c0:500::/38": "8145", - "2a0e:aa06:450::/44": "135671", - "2a02:2454:8000::/33": "16202", - "2402:800:fe20::/41": "7552", - "2804:4904::/32": "267159", - "2001:559:83c1::/48": "7922", - "2001:67c:1758::/48": "8820", - "2408:8957:4c00::/40": "17622", - "2602:fd00::/36": "39967", - "2620:149:a01::/45": "714", - "2401:4900:1aa0::/44": "45609", - "240e:5a:4180::/38": "140292", - "2600:803:613::/48": "27030", - "2600:3007:1311::/40": "13649", - "2a0c:b641:26f::/48": "59598", - "2a04:84c1::/32": "29017", - "2001:559:788::/48": "21508", - "2001:678:688::/48": "8283", - "2409:806b:900::/35": "9808", - "2803:bee0::/36": "269989", - "2a00:6060:b000::/48": "199881", - "2a02:26f7:f509::/42": "20940", - "2a02:f1c0::/29": "6846", - "2001:500:a6::/48": "393246", - "2620:12c:b052::/48": "13448", - "2a04:4e40:2800::/48": "54113", - "2001:660:3007::/32": "2200", - "2603:90f5:13::/48": "20115", - "2607:6002::/32": "12189", - "2804:fbc::/32": "61894", - "2001:8b0:0:70::/47": "20712", - "2001:1640::/32": "25394", - "2406:3002:40:4000::/44": "4657", - "240a:a6ed::/32": "144423", - "2409:8751:1100::/30": "56047", - "2804:4d58::/32": "268191", - "2a02:26f7:e601::/46": "20940", - "2a02:5d00::/32": "196861", - "2001:67c:29ec::/48": "58298", - "2600:141b:b801::/33": "20940", - "2602:fdff::/36": "397376", - "2803:e440::/32": "263780", - "2806:230:301d::/48": "11888", - "2a02:26f7:fb40::/48": "36183", - "2403:f000:100::/40": "38220", - "2606:f500:4000::/32": "11352", - "2804:c00:8b00::/34": "52655", - "2804:8224::/32": "272501", - "2a0c:6d00:61::/48": "3218", - "2001:559:2c5::/48": "33287", - "2a00:1cf8:4000::/35": "44944", - "2a00:f7a0:100::/48": "204249", - "2a02:1648::/29": "49375", - "2402:800:7dd0::/42": "7552", - "240a:adbe::/32": "146168", - "2600:1419:14::/44": "20940", - "2804:75b0::/33": "271063", - "2806:2f0:99c0::/42": "17072", - "2a04:2b00:212::/48": "42044", - "240a:a49b::/32": "143829", - "2801:80:19a0::/48": "265071", - "2804:4e3c::/32": "268248", - "2400:a980:4900::/35": "133111", - "2602:fe5b::/36": "53872", - "2a04:b2c0::/29": "5413", - "2400:5d00::/32": "58507", - "2409:8915:9200::/39": "56044", - "2001:559:868f::/48": "33659", - "2600:100e:b0e0::/39": "6167", - "2804:204:304::/47": "28186", - "2804:3d4:8::/43": "262401", - "2a07:22c1:2::/48": "212858", - "240e:44d:7f00::/41": "140345", - "2804:56d0::/32": "268025", - "2a02:efc0::/29": "56689", - "2001:67c:580::/48": "12703", - "2001:df0:30e::/48": "17547", - "2605:c400::/32": "19381", - "2a04:4e40:da00::/47": "54113", - "2a02:26f0:10d::/46": "20940", - "2001:559:812c::/48": "33652", - "2400:54c0::/40": "136352", - "2402:ef0e::/32": "38536", - "2604:f980:4400::/44": "19957", - "2803:b60::/32": "269797", - "2804:14d:1c00::/40": "28573", - "2804:57f4:801::/32": "268097", - "240a:a272::/32": "143276", - "2a0c:b9c0::/32": "202448", - "2400:e500:1::/42": "38742", - "240a:ae3b::/32": "146293", - "2600:141b:9001::/36": "20940", - "2804:8274::/32": "272522", - "2a02:26f7:b581::/46": "20940", - "2001:678:320::/48": "206613", - "2a02:26f7:ce04::/48": "36183", - "2a05:6747::/48": "1759", - "2404:1d40::/44": "131216", - "2409:804c:900::/35": "9808", - "2806:2f0:2063::/48": "17072", - "2a09:2bc0::/32": "209528", - "2a0e:b107:d00::/44": "212746", - "240e:e7::/28": "4134", - "2a02:26f0:bb01::/37": "20940", - "2a09:1500::/48": "208175", - "2001:559:5c5::/48": "33668", - "2602:fda3::/46": "397942", - "2a04:b903::/32": "8587", - "2400:e501::/32": "138322", - "240a:ac2f::/32": "145769", - "2a07:4f40::/29": "8426", - "2001:c20:11::/44": "3758", - "2402:800:3ce0::/39": "7552", - "2404:7fc0:1000::/32": "18013", - "2404:c000:8003::/33": "17727", - "2408:8456:8200::/42": "17622", - "2605:a404:218::/42": "33363", - "2001:559:291::/45": "7015", - "2001:678:8a8::/48": "48686", - "2607:f640::/44": "32354", - "2401:1d80:3000::/47": "16509", - "2600:1417:d000::/48": "35819", - "2605:a401:899a::/41": "33363", - "2a03:dd40::/32": "61025", - "2001:400:a000:d::/64": "32982", - "2a02:26f7:eb48::/48": "36183", - "2a04:2340::/29": "59455", - "2401:4900:54c0::/39": "45609", - "2401:d800:7220::/41": "7552", - "2a01:5620::/29": "29396", - "2a02:26f0:106::/47": "34164", - "2a0b:abc0::/29": "205516", - "2401:d800:2eb0::/41": "7552", - "2408:8256:328c::/48": "17816", - "240a:a0cd::/32": "142855", - "240e:3bb::/35": "134773", - "2600:1f01:4850::/47": "16509", - "2607:f6f0:5002::/47": "27224", - "2a00:1728:21::/46": "34224", - "2404:e100:3006::/47": "133840", - "240a:a1e2::/32": "143132", - "2806:2a0:7::/44": "28548", - "2a0d:abc0::/29": "208861", - "2001:559:8013::/48": "7016", - "240a:ac5c::/32": "145814", - "2607:f358:a::/47": "18779", - "2a00:49c0::/32": "199213", - "2001:c20:48bb::/41": "3758", - "2001:44c8:2000::/48": "45781", - "2600:1419:9401::/36": "20940", - "2803:2500::/32": "262253", - "2a0e:13c0::/29": "44659", - "2001:559:c1a2::/48": "33659", - "2001:559:c339::/48": "7016", - "2402:800:521d::/42": "7552", - "240a:a261::/32": "143259", - "2a01:430:18::/32": "24971", - "2a02:26f7:d641::/46": "20940", - "2a00:1248::/33": "3216", - "2001:978:a701::/35": "174", - "2001:16a2:200::/36": "25019", - "2001:43f8:c40::/48": "37578", - "240a:a4ff::/32": "143929", - "2607:d500:d00::/40": "13768", - "2803:7000:e000::/36": "52362", - "2804:14d:1600::/40": "28573", - "2a0b:ae40:1::/45": "40676", - "2404:1a8::/32": "9595", - "2a0e:aa07:f004::/47": "139742", - "2001:559:c30a::/48": "33657", - "240a:a917::/32": "144977", - "240a:ade7::/32": "146209", - "240a:af5e::/32": "146584", - "2607:fae0:246::/36": "8038", - "2620:1ec:90d::/46": "8075", - "2a0d:3842:1220::/48": "57629", - "2001:67c:2c58::/48": "29551", - "2001:1980:6900::/32": "29838", - "240a:a8b9::/32": "144883", - "2620:111:d014::/48": "12025", - "2a00:8a01:8010::/44": "18666", - "2a0e:b105:7f4::/46": "20473", - "2a0f:7d00::/29": "60781", - "2001:559:5ad::/48": "7725", - "2001:559:8356::/48": "33651", - "2408:877f::/32": "134542", - "2600:6c7f:9300::/44": "19115", - "2604:ad80::/32": "17043", - "2804:3968:40::/32": "266029", - "2806:230:1025::/48": "11888", - "2a0f:85c1:23::/48": "211224", - "2401:47c0:1b00::/37": "41095", - "2401:fdc0:10::/44": "141013", - "2404:bc0:4f10::/44": "137735", - "2a0b:6c40::/29": "8540", - "2001:1a11:6d::/46": "8781", - "240a:a300::/32": "143418", - "2600:140f:2c00::/48": "9498", - "2604:4700:8000::/33": "53591", - "2605:18c0::/32": "25892", - "2806:230:602d::/48": "11888", - "240e:982:9500::/34": "4134", - "2607:8280::/47": "27027", - "2607:fe40::/32": "26794", - "2804:5524::/32": "268692", - "2a00:4700::/32": "56357", - "2a07:3c0::/29": "34049", - "2604:8480::/32": "54945", - "2001:559:7cf::/48": "7015", - "2605:c00:1400::/38": "46920", - "2a01:53a0:1001::/48": "199953", - "240a:a217::/32": "143185", - "240a:a3a0::/32": "143578", - "240a:ada4::/32": "146142", - "2602:fc66::/36": "399771", - "2800:3c0:10a0::/39": "19863", - "240e:979:9600::/30": "4134", - "2600:1408:3400::/48": "35994", - "2605:8680:fffe::/31": "25780", - "2a0e:cd40::/29": "35048", - "2001:67c:2c90::/47": "31308", - "2401:d800:fd00::/42": "7552", - "2607:f6b0::/32": "6189", - "2607:ff50::/32": "53264", - "2a01:6600::/32": "39405", - "2a09:a780::/29": "40970", - "2406:7400::/46": "24309", - "240e:438:7e40::/32": "4134", - "2607:f978:7::/48": "32475", - "2801:80:1ae0::/48": "266365", - "2409:8904:6570::/40": "24547", - "240a:aff5::/32": "146735", - "2600:1480::/46": "21342", - "2600:40ff:ff12::/40": "701", - "2001:559:19:e000::/64": "20940", - "2001:16d8:a0a1::/46": "16150", - "240e:473:3320::/41": "140486", - "2600:8808:4000::/30": "22773", - "2406:bec0::/32": "138734", - "2409:4063:5000::/29": "55836", - "2605:a40::/32": "39944", - "2a02:2e02:2670::/39": "12479", - "2402:e280:5900::/37": "134674", - "2600:1000:be0e::/40": "22394", - "2604:d600:1236::/47": "32098", - "2804:3180::/38": "265019", - "2a03:7940::/32": "197226", - "2a0a:7000::/29": "58073", - "2001:7fb:ff0a::/43": "12654", - "2001:dc0:2000::/35": "4608", - "2405:40::/32": "136744", - "2409:8904:3aa0::/39": "24547", - "240a:a1b9::/32": "143091", - "2806:370:8140::/42": "28403", - "2604:6600:fdb7::/41": "40676", - "2803:b2c0:1101::/45": "264851", - "2404:3d00:405a::/45": "3573", - "240a:aec5::/32": "146431", - "2620:124:6040::/43": "22918", - "2620:125:b00f::/48": "15092", - "2a02:26f7:b9a1::/46": "20940", - "2001:559:8046::/47": "7922", - "240e:982:a300::/36": "4134", - "2a03:2de0::/32": "35444", - "2405:b40:45::/37": "55674", - "2408:8957:f2c0::/39": "17816", - "2605:5b40::/32": "36363", - "2a0b:6200::/29": "16010", - "2a0d:6c40::/29": "40970", - "2a00:8e80::/32": "200678", - "2a01:7e0:30::/39": "44066", - "2a01:7140::/32": "41849", - "2a00:1d38::/40": "50655", - "2001:559:38a::/48": "33287", - "2001:67c:2030::/48": "33817", - "2401:ff80:1c0f::/43": "133954", - "240e:44d:100::/41": "140345", - "240e:473:950::/40": "4134", - "2800:ba0:10::/48": "263812", - "2804:28d4::/32": "263983", - "2a00:7aa0::/32": "41114", - "2a0e:fe80::/48": "47447", - "2001:1248:7092::/44": "11172", - "2620:28:c000::/48": "55219", - "2409:806a:5b00::/37": "9808", - "240a:aac6::/32": "145408", - "2600:100d:bf00::/44": "6167", - "2600:6c38:b4e::/43": "20115", - "2a02:26f7:f6c0::/48": "36183", - "2402:e380:318::/48": "141021", - "2403:300:a2a::/45": "714", - "2605:fd40::/32": "398930", - "2a0e:97c0:1110::/48": "20473", - "2001:1900:2390::/42": "3356", - "2404:be00::/32": "55799", - "2607:f810:f40::/32": "6192", - "2620:40:6000::/48": "30405", - "2804:4b44::/32": "267294", - "2804:6fb8::/36": "270679", - "2001:559:8218::/47": "7922", - "2400:cb00:171::/48": "395747", - "240a:a175::/32": "143023", - "240e:978:5100::/36": "4134", - "2804:18:7850::/39": "10429", - "2a0e:eec5::/32": "62240", - "2804:31c4::/32": "265036", - "2001:438:fffd:127::/46": "6461", - "2001:559:c3ce::/48": "20214", - "2604:5200::/48": "32504", - "2800:160:13a3::/41": "14259", - "2804:14d:148f::/41": "28573", - "2804:a44::/32": "262675", - "2804:2590::/32": "264288", - "2001:559:c38a::/48": "7015", - "2600:380:f10b::/48": "64011", - "2607:ffd8:802::/32": "33333", - "2620:11c:30a1::/41": "31764", - "2a05:b800::/29": "203550", - "2400:ffc0:13c::/47": "17439", - "2405:7c00:b000::/33": "24028", - "2a01:a300::/32": "21310", - "2405:9800:c642::/40": "45430", - "240e:438:9a20::/43": "140647", - "2600:140b:1400::/48": "31109", - "2a02:26f7:eec1::/46": "20940", - "2c0f:f560::/32": "36939", - "2001:550:6600:1::/46": "174", - "2001:559:7a1::/48": "33657", - "2001:67c:420::/48": "3303", - "2409:8061:2100::/35": "9808", - "2a0c:7e40:b397::/48": "20473", - "2001:559:c028::/47": "33491", - "2001:559:c2f0::/48": "7922", - "2409:8087:4401::/40": "24445", - "240a:a40b::/32": "143685", - "2607:f578::/32": "14263", - "2803:2180:2::/47": "27941", - "2806:10ae:3::/48": "8151", - "240e:964:1000::/37": "133775", - "2806:2f0:2060::/48": "17072", - "2a02:26f7:ddc1::/46": "20940", - "2a0e:b107:7f0::/48": "207722", - "2001:559:c144::/48": "33667", - "2403:c800::/32": "9738", - "2804:3de8:e000::/36": "266562", - "2a01:cde0:40::/48": "16028", - "2a06:6541:2002::/48": "3356", - "2001:559:3d7::/48": "33659", - "2620:1f7::/36": "18703", - "2a00:b840::/47": "31472", - "2a07:3340::/48": "5539", - "2a0b:8bc7::/32": "34420", - "2001:559:1a9::/48": "33659", - "2409:8c62:e20::/39": "9808", - "240a:a45a::/32": "143764", - "2600:1418:4::/34": "20940", - "2804:271c::/32": "263877", - "2804:62bc::/32": "269315", - "2a07:8b00::/29": "202817", - "2804:14e8::/32": "263015", - "2001:67c:2c08::/48": "31424", - "2001:978:3902::/38": "174", - "2001:4268:700::/35": "15964", - "2400:6280:111::/48": "132280", - "2401:4d44::/30": "131925", - "2401:d800:77e0::/36": "7552", - "2402:2980::/32": "134224", - "2804:2cd4:d0::/32": "265246", - "2806:20d:505a::/40": "32098", - "2001:1248:9989::/42": "11172", - "2408:8459:6010::/42": "17623", - "2a02:26f7:cdc5::/46": "20940", - "2a0a:d880:102::/48": "16509", - "2400:cb00:4::/48": "13335", - "2a0c:7340::/32": "204886", - "2001:559:8088::/48": "33657", - "240a:a714::/32": "144462", - "2607:f4a0:501::/33": "11272", - "2804:4160::/32": "267429", - "2a10:9902:73f::/48": "211972", - "2402:800:339b::/41": "7552", - "2409:8904:2540::/38": "24547", - "240a:a2ee::/32": "143400", - "2600:1a0e:1000::/48": "10307", - "2620:138:8000::/47": "62766", - "2a00:8440::/32": "198508", - "2a07:6f44::/40": "39083", - "2001:559:81ab::/48": "33659", - "2001:1248:56f6::/44": "11172", - "2407:4840::/32": "133301", - "2a02:26f7:b600::/47": "36183", - "2a03:5840:1::/40": "35661", - "2a0a:9e00::/44": "61317", - "2409:8a14:4a00::/34": "56044", - "2600:140f:f801::/38": "20940", - "2604:8d00::/32": "3700", - "2606:5440::/32": "1239", - "2a02:26f7:df88::/48": "36183", - "2a05:5e40:f00f::/48": "49681", - "2001:c20:402::/38": "3758", - "2605:a40a:d000::/34": "33363", - "2a04:de80::/29": "201952", - "2400:7400::/44": "38044", - "2a02:7320::/32": "31222", - "2409:800b:2b06::/32": "9808", - "2602:feda:ab7::/48": "141011", - "2a0f:3106::/32": "49392", - "2408:84f3:aa10::/42": "134543", - "2607:fb10:7144::/43": "2906", - "2804:5fd8::/32": "269127", - "2409:800b:2b04::/47": "9808", - "2620:12f:90ff::/48": "6200", - "2a02:580::/30": "6799", - "2a02:26f7:ef80::/48": "36183", - "2a02:2ad0:117::/44": "702", - "2001:4878:259::/48": "12222", - "2402:800:558d::/43": "7552", - "2a00:4120::/32": "20804", - "240a:a0b7::/32": "142833", - "2408:84f3:ae40::/35": "17816", - "2804:1900::/32": "61768", - "2806:230:401c::/48": "265594", - "2a01:9700:1740::/47": "8376", - "2a06:6541:2003::/48": "397568", - "2a07:a980::/32": "1764", - "240e:878:a0::/39": "4134", - "2001:44b8:405d::/48": "4739", - "2408:8459:8050::/38": "17816", - "240a:ad3d::/32": "146039", - "2602:ffc5:10c::/48": "40676", - "2604:d600:1910::/38": "32098", - "2a00:11c0:3d::/48": "42354", - "2a02:7dc0::/32": "559", - "2001:468:f00::/35": "11537", - "2620:124:b002::/48": "394731", - "2804:e94:d6::/44": "262468", - "2600:c14::/32": "13790", - "2600:1403:5401::/36": "20940", - "2604:d600:1625::/44": "32098", - "2a00:bce0::/32": "59913", - "2400:6800::/32": "10105", - "2401:d800:2920::/41": "7552", - "2408:8347::/35": "140726", - "2804:5610::/32": "267974", - "2a02:26f7:d7::/48": "20940", - "2001:559:c183::/48": "7015", - "2001:678:1::/48": "25192", - "2001:1248:884b::/42": "11172", - "240e:d:a000::/37": "136193", - "2600:140f:3200::/48": "55644", - "2a02:26f7:2a::/48": "36183", - "2a10:68c0::/29": "30633", - "2409:8907:8020::/39": "24547", - "240e:473:9c00::/41": "140485", - "2607:b600:11::/48": "25645", - "2620:149:21c::/42": "714", - "2600:d400::/31": "1403", - "2606:6200:1c01::/32": "21570", - "2803:c2c0::/32": "264836", - "2a07:c5c0::/29": "202526", - "2a0b:d580::/29": "206350", - "2001:559:82b0::/48": "33287", - "2404:e800:4::/39": "55430", - "2600:370f:7367::/44": "32261", - "2001:3a0:f007::/48": "131079", - "240e:103:8b10::/44": "4134", - "2600:141b:1800::/48": "35994", - "2602:fec5:1::/48": "62952", - "2001:559:84c6::/48": "20214", - "2403:6c0:7367::/48": "137367", - "2806:230:1010::/48": "265594", - "2a01:c50e:ca00::/37": "12479", - "2a02:8c8::/32": "20860", - "2001:df6:f600::/48": "131772", - "240e:e4::/31": "4134", - "2620:107:7004::/48": "53997", - "2a00:42a0::/32": "25108", - "2a0f:9400:8021::/48": "212995", - "2600:6000:fb34::/48": "11351", - "2605:3a00:7::/48": "22768", - "2804:2d60::/32": "265278", - "2804:54e0::/32": "268675", - "2a0b:8780::/48": "16509", - "2001:dd8:8::/45": "4608", - "240a:a732::/32": "144492", - "2605:8680::/48": "25780", - "2c0e:0:502::/25": "24863", - "2001:559:c392::/47": "33659", - "240e:6b9::/36": "140312", - "2804:4a98:f000::/36": "267251", - "240e:d:800::/37": "58563", - "2620:84:2000::/48": "20344", - "2620:119:fc::/48": "36692", - "2804:3d5c::/32": "266526", - "2a02:50c0:e0::/32": "29355", - "2001:4478:5a00::/32": "4802", - "2406:e500::/47": "58593", - "240a:a47a::/32": "143796", - "2600:40f0:b::/45": "701", - "2800:110:1019::/45": "4270", - "2a03:ff80::/29": "197075", - "2404:e480::/32": "18127", - "2a01:9dc0:beef::/48": "30361", - "2a02:26f7:f585::/46": "20940", - "2a04:e2c0::/29": "207050", - "240a:a764::/32": "144542", - "2a02:26f7:bcc0::/48": "36183", - "2001:559:809a::/48": "33287", - "2001:42d0:bee0::/44": "33764", - "2001:4490:4048::/46": "9829", - "2804:7f98::/32": "271697", - "2a00:c8c0::/47": "44964", - "2001:559:84a7::/48": "21508", - "2402:ef0f::/32": "9430", - "2405:1c0:6a43::/43": "55303", - "2620:108:1000::/40": "394009", - "2a0a:5c0::/29": "206298", - "2a0d:d400::/29": "12748", - "2a0e:afc0::/29": "207902", - "2a01:6b20:8000::/34": "39218", - "2a02:26f7:24::/48": "36183", - "2a02:26f7:dc05::/46": "20940", - "2a0e:d800::/46": "209110", - "2001:559:47e::/48": "7725", - "240a:a6d8::/32": "144402", - "2800:160:5::/37": "14259", - "2804:214:9::/43": "26615", - "2a0e:8f02:f003::/48": "213033", - "2001:559:801b::/48": "7922", - "240e:5a:4480::/39": "140296", - "2a0c:b641:a0::/44": "212299", - "2001:4998:1a0::/44": "10310", - "2404:b300:133::/48": "131207", - "2806:2f0:3184::/42": "17072", - "2a0d:7380::/29": "202918", - "2409:8d14:2400::/38": "56044", - "2803:bd80::/32": "28007", - "2804:5078::/32": "268391", - "2a02:bf8:1602::/32": "1239", - "2a02:2370:1::/45": "32787", - "2400:df40::/32": "18042", - "2804:8164::/32": "272451", - "2a02:26f7:cdc0::/48": "36183", - "2001:1ad0:c4ff::/34": "24953", - "2404:2280:124::/47": "24429", - "240a:a15e::/32": "143000", - "2620:0:190::/48": "33084", - "2a02:5260::/29": "59775", - "2804:7ce0::/32": "271524", - "2001:67c:790::/48": "207042", - "2407:8f00::/32": "45677", - "240e:473:3120::/41": "140486", - "240e:473:6520::/41": "140486", - "2600:1007:b0b0::/41": "22394", - "2605:ed00:4c4::/33": "11427", - "2804:5550::/39": "263067", - "2408:80f1:110::/42": "138421", - "2800:370:4::/48": "26613", - "2803:5180::/32": "263762", - "2806:230:5007::/48": "11888", - "2001:559:8464::/48": "7015", - "2607:fce0::/32": "7151", - "2800:440:9800::/42": "27738", - "2a0c:2ac0:3700::/48": "138456", - "2a0f:600:600::/47": "51044", - "2603:c0f8:1020::/38": "20054", - "2605:5880:2::/48": "26167", - "2a03:6900::/32": "48847", - "2401:8e00::/36": "9260", - "240a:a3b4::/32": "143598", - "240e:473:7150::/40": "4134", - "2620:19b::/32": "19648", - "2800:320:8401::/48": "27882", - "2804:386c::/32": "266476", - "2a0c:500::/30": "205103", - "2001:4c8:1009::/45": "15290", - "2001:559:587::/48": "7015", - "2402:7d80:242::/33": "63582", - "2403:1b80::/48": "59083", - "2800:200:b3f0::/37": "12252", - "2a02:7a8::/32": "47917", - "2a02:26f7:facc::/48": "36183", - "2001:67c:2b2c::/48": "212129", - "240a:a8d1::/32": "144907", - "2804:2bf0:8100::/33": "262740", - "2a00:90c0:301::/29": "197745", - "240e:f7:2000::/36": "134771", - "240e:982:b400::/33": "4134", - "2a02:cbf7:101::/32": "61157", - "2a0e:2c40:20::/29": "50581", - "2001:579:192c::/37": "22773", - "2001:67c:2b94::/48": "62463", - "2405:6c0::/48": "4515", - "2600:370f:73ab::/45": "32261", - "2801:0:370::/48": "262245", - "2620:104:4008::/48": "15248", - "2001:559:87c8::/48": "7922", - "2001:559:c2e0::/48": "7016", - "2001:df0:b600::/48": "135054", - "2604:d600:c2d::/43": "32098", - "2605:fb80:f000::/48": "201106", - "2606:2800:6070::/46": "15133", - "2620:0:28a4::/48": "33522", - "2a05:4140:187::/48": "211358", - "2001:978:2:c1::b:0/112": "35277", - "2001:49f0:d099::/46": "174", - "2602:fed2:712d::/48": "53356", - "2a10:1bc0::/29": "28972", - "2001:67c:1874::/48": "39249", - "2405:84c0:99f0::/44": "9886", - "2a02:8400::/25": "15557", - "2a0a:6800::/29": "207202", - "2001:67c:14a0::/48": "199665", - "2408:8459:dc10::/42": "17623", - "2602:fec0::/44": "396320", - "2a0e:b105:5c0::/46": "20473", - "2a0e:b105:6b8::/46": "20473", - "2c0f:ece8::/32": "328386", - "2a02:2e02:9720::/36": "12479", - "2001:559:80a9::/48": "33651", - "2001:579:e298::/39": "22773", - "2400:9800:16::/44": "24203", - "2408:8656:3100::/38": "17816", - "240a:a5a0::/32": "144090", - "240a:a9b0::/32": "145130", - "2803:480:6::/32": "52458", - "2001:950::/32": "47381", - "2001:df7:2b00::/48": "58965", - "2001:5000:805::/38": "1273", - "2604:6600:2800::/32": "40676", - "2607:1e00:1003::/32": "22489", - "2804:2b58::/32": "265148", - "2001:559:175::/48": "7922", - "2600:1007:b1d0::/44": "6167", - "2800:160:1051::/46": "14259", - "2a02:26f7:b995::/46": "20940", - "2a0c:4fc0::/29": "203835", - "2a0d:3842:1050::/48": "57629", - "2610:b0:c200::/34": "3573", - "2620:101:80f2::/48": "395642", - "2804:23e4:400::/32": "264191", - "2804:6744::/32": "269617", - "2a03:5a00:17::/48": "61335", - "2408:8256:3360::/43": "17623", - "240e:940:8e00::/40": "136197", - "2806:20d:1114::/40": "32098", - "2a0c:9a40:80a0::/46": "51861", - "2001:67c:2734::/48": "198531", - "2600:1015:f110::/30": "6167", - "2804:18:5028::/45": "26599", - "2a03:5260::/32": "48576", - "2001:559:7cc::/48": "7922", - "2001:df6:4e80::/48": "141892", - "2408:840d:8f00::/42": "17621", - "240a:a17d::/32": "143031", - "2620:a1:c000::/48": "35960", - "2804:a38::/32": "263035", - "2804:79f0::/32": "271337", - "2001:df2:e700::/48": "136397", - "2402:800:9771::/44": "7552", - "2604:3a00::/32": "33069", - "2606:2800:4af0::/47": "15133", - "2804:1058::/32": "262988", - "2404:7240::/34": "59074", - "2409:895c::/26": "9808", - "2804:3930::/32": "266017", - "2804:62e4::/32": "269326", - "2001:438:2f::/48": "17025", - "2801:120::/32": "27790", - "2a02:7de0::/32": "8621", - "2001:559:80ea::/45": "33287", - "2402:800:be40::/42": "7552", - "2620:129:6000::/48": "395363", - "2804:49a8::/32": "267195", - "2a02:788:1::19/29": "12843", - "2001:559:834e::/48": "21508", - "240a:aa59::/32": "145299", - "2620:8::/41": "6327", - "2803:9ca0::/32": "266842", - "2a02:68::/29": "21396", - "2a05:b0c4:1::/48": "198412", - "2001:559:2c7::/44": "33287", - "2001:559:51c::/48": "33657", - "240a:aabc::/32": "145398", - "2600:6000:f004::/40": "12271", - "2606:be00::/40": "13768", - "2803:7200:4::/46": "27696", - "2804:731c::/32": "270896", - "2001:418:1401:2e::/63": "20940", - "2001:550:e06::/39": "174", - "2402:3a80:1436::/41": "38266", - "2408:8656:32fe::/47": "17623", - "2409:8904:d1b0::/38": "24547", - "240a:a20c::/32": "143174", - "2804:3668::/32": "266346", - "2804:5534:f000::/37": "268696", - "2806:230:4004::/48": "265594", - "2a07:14c0:6000::/36": "208861", - "2401:d800:9470::/40": "7552", - "2607:f4e8:ad::/39": "22822", - "2804:2124::/32": "264538", - "2804:4014::/32": "265933", - "2607:f3f8:2000::/32": "19019", - "2804:3138:d001::/43": "265000", - "2a0b:4342:1a2a::/45": "57578", - "2a0f:d40::/29": "60262", - "2001:550:2800:101::/48": "174", - "2001:559:c1fd::/48": "33652", - "2804:7028::/32": "270709", - "2a01:278::/32": "41913", - "2a01:49a0::/32": "62199", - "2a04:dc00::/29": "56990", - "2a07:22c1:4::/48": "212845", - "2a10:80c0:2000::/29": "211331", - "2001:678:e30::/48": "48108", - "2401:4900:2580::/38": "45609", - "2406:2400:7777::/48": "45287", - "2408:80ea:7a80::/44": "17623", - "2600:1f13::/36": "16509", - "2607:f708::/32": "18558", - "2407:c280:b100::/45": "211876", - "2804:18e8::/32": "61762", - "2a02:26f7:f58d::/42": "20940", - "2a06:a403::/29": "203596", - "2001:4c00:893c::/29": "34695", - "2405:9800::/45": "45430", - "2408:8256:3d7b::/48": "17816", - "2a02:239c::/48": "9166", - "2400:cb00:34::/47": "13335", - "2804:7cc0::/32": "271516", - "2806:230:300d::/48": "11888", - "2a02:26f7:f700::/48": "36183", - "2001:3c8:2808::/48": "141714", - "2401:8340::/32": "136168", - "240e:107:c200::/34": "4134", - "2602:fd21:800::/37": "398488", - "2a01:8840:a1::/48": "207266", - "2a03:90c0:460::/40": "199524", - "2001:43e8::/32": "37105", - "2001:559:c2ee::/48": "33287", - "240a:af3d::/32": "146551", - "2a02:26f0:c001::/40": "20940", - "2a06:8804:1::/30": "12517", - "2001:56b:5::/44": "852", - "2a00:7840::/32": "197403", - "2604:2e88::/38": "30036", - "2600:6c38:16b::/45": "20115", - "2605:9cc0:378::/48": "16509", - "2606:2800:400d::/48": "14153", - "2a06:7ec0::/29": "201011", - "2a0c:2800::/32": "205316", - "2a0c:b641:7f0::/46": "213310", - "2603:c0e0:2110::/40": "54253", - "2001:648:2800::/48": "5470", - "2604:17c0::/40": "9009", - "2001:2f0::/32": "7514", - "2001:559:80d1::/48": "13367", - "2001:559:833e::/48": "21508", - "2408:840c:400::/40": "17621", - "240a:a223::/32": "143197", - "2c0f:f200::/32": "328015", - "2409:8a53:900::/38": "56047", - "2804:6180::/32": "269238", - "2806:2a0:200::/39": "28548", - "2806:2f0:7061::/40": "17072", - "2401:d800:fbc0::/42": "7552", - "2403:2500:400::/48": "36236", - "2a0a:f4c0::/29": "205848", - "2a0c:7e45:1f8e::/48": "20473", - "2001:1388:1c::/42": "6147", - "2402:1d40::/45": "58826", - "240a:aaf4::/32": "145454", - "2c0f:f190::/32": "328231", - "2804:dd0:101::/40": "28639", - "2001:fd8:f200::/42": "132199", - "240a:a39f::/32": "143577", - "240a:a880::/32": "144826", - "240a:aac4::/32": "145406", - "2600:1005:d170::/34": "22394", - "2602:809:2000::/44": "398312", - "2804:19c::/32": "262755", - "2804:3e18::/32": "266573", - "2001:df1:a800::/48": "133210", - "2001:df6:fd80::/48": "137531", - "2404:f4c0:f408::/48": "209218", - "2a06:c100::/29": "208920", - "2a0e:b107:df2::/48": "20473", - "2a0b:21c0:f000::/31": "21859", - "2c0f:fac0::/32": "37294", - "2401:c240::/33": "132847", - "240a:a800::/32": "144698", - "2a0e:8f02:f00f::/48": "212358", - "2a0f:3105::/32": "199669", - "2604:d600:c22::/44": "32098", - "2804:3da8::/32": "266545", - "2400:cb00:a140::/45": "13335", - "2403:1640::/32": "134564", - "2600:9000:f530::/47": "16509", - "2607:fcd0:fa80:3100::/54": "8100", - "2804:5d50::/32": "268964", - "2a03:9e42::/32": "31399", - "2a06:9087:ffff::/48": "203271", - "2402:ae80::/32": "38800", - "2804:354c::/32": "53018", - "2a06:62c0::/41": "204138", - "2c0f:ec48::/32": "327991", - "2001:4d80:7358::/32": "5606", - "2620:cc:c000::/48": "394298", - "2804:13b0::/44": "263546", - "2804:4bcc::/32": "267330", - "2804:76ec::/32": "271143", - "2a00:1eb8:c000::/48": "198651", - "2401:d800:59a0::/41": "7552", - "240a:a375::/32": "143535", - "2620:10a:80bb::/45": "40568", - "2620:137:1000::/40": "398535", - "240a:ad2a::/32": "146020", - "2600:140b:2c00::/48": "31109", - "2804:3838:6::/42": "53170", - "2001:67c:150c::/48": "199302", - "2402:4e00:d020::/34": "45090", - "2804:7a00::/32": "271341", - "2a00:4802:2810::/38": "13124", - "2a02:26f7:ed80::/48": "36183", - "2a0d:f280::/29": "59953", - "2a04:d00::/29": "204326", - "2001:67c:15a0::/48": "29208", - "2402:800:99d3::/44": "7552", - "240a:acf0::/32": "145962", - "2602:ff3c::/36": "395111", - "2607:f740:e060::/43": "398748", - "2608:121:d::/32": "721", - "2806:230:2029::/48": "11888", - "2001:559:461::/48": "7015", - "2001:df1:4600::/48": "4826", - "2600:140f:4801::/39": "20940", - "2607:fcd0:fa80:8901::/61": "8100", - "2610:b0:2070::/33": "3573", - "2620:c::/44": "7324", - "2a01:47e0::/32": "49223", - "2001:1af8:4411::/32": "60781", - "2402:800:3855::/42": "7552", - "2600:140b:401::/36": "20940", - "2605:6340::/32": "40033", - "2607:fcd0:100:e207::/45": "8100", - "2804:4eb0::/32": "268278", - "2a0e:c180::/29": "60262", - "2804:73ec::/33": "270946", - "2a02:26f7:d440::/48": "36183", - "2408:8456:1e40::/40": "17816", - "240a:ae88::/32": "146370", - "2602:ff2e::/36": "21694", - "2605:3600:fffc::/46": "30452", - "2620:101:f000::/47": "12093", - "2800:e00::/34": "27665", - "2402:3a80:1c3c::/41": "38266", - "2606:8900:b::/32": "33044", - "2803:8d80:5002::/32": "11664", - "2a06:8ec0:3::/48": "7489", - "2404:bd40:10::/48": "138005", - "2409:8904:d490::/39": "24547", - "240a:af98::/32": "146642", - "2001:559:86c2::/48": "7015", - "2403:df40:118::/32": "14630", - "240a:a626::/32": "144224", - "2804:1040:b0c1::/42": "263626", - "2806:105e:1f::/42": "8151", - "2607:f110:e470::/39": "21889", - "2001:559:83::/48": "33652", - "2001:559:498::/48": "7922", - "2001:559:c1f6::/48": "7016", - "2600:140b:b400::/48": "24319", - "2603:c001:3610::/36": "31898", - "2604:6600:2011::/37": "40676", - "2604:f400:51::/48": "29930", - "2804:1ac4:5::/44": "61884", - "2803:70a0::/32": "27855", - "2a02:26f7:cd09::/42": "20940", - "2806:230:4046::/36": "11888", - "2001:df0:455::/48": "45853", - "2001:1970::/32": "7992", - "2409:8000:1100::/37": "9808", - "240a:a648::/32": "144258", - "240a:a962::/32": "145052", - "2800:5f0:3028::/32": "22724", - "2804:77c:e100::/35": "53222", - "2401:7400:4001::/43": "4773", - "2600:9000:20a1::/44": "16509", - "2804:54c0::/32": "268668", - "2a07:7cc0::/29": "61232", - "2001:67c:2268::/48": "56740", - "2600:80a:441::/36": "701", - "2800:484:7700::/36": "14080", - "2804:6538::/32": "269476", - "2a03:2887:ff00::/48": "9498", - "2a03:5a00:e::/48": "51028", - "2a0a:e440::/48": "42240", - "2603:4:1304::/48": "44273", - "2806:2f0:9501::/41": "17072", - "2a01:c50e:5600::/36": "12479", - "2a07:6886::/32": "204860", - "240a:a6e8::/32": "144418", - "2a01:758:fffd::/46": "3326", - "2a06:56c0:11::/46": "51776", - "2001:67c:2c8::/48": "47829", - "2001:4878:b151::/48": "12222", - "2408:8256:398::/37": "17622", - "240a:a427::/32": "143713", - "240a:ab38::/32": "145522", - "2a0c:8000::/29": "62275", - "2405:7000::/38": "9354", - "2405:e480::/46": "9507", - "240e:106:c000::/34": "4812", - "2a04:2e40::/29": "51859", - "240a:a401::/32": "143675", - "2a00:13e0::/32": "44764", - "2a00:5bc0::/32": "49158", - "2a06:28c0::/29": "197798", - "2001:579:7164::/43": "22773", - "2001:4490:3fbc::/46": "9829", - "2405:6040::/32": "134021", - "2600:1f70:6000::/40": "16509", - "2600:8807:8a00::/35": "22773", - "2806:264:5501::/48": "13999", - "240a:aa57::/32": "145297", - "2806:370:9120::/43": "28403", - "2a02:26f7:10::/48": "36183", - "2402:800:3701::/44": "7552", - "2620:12c:c000::/46": "395837", - "2804:ef8::/32": "262302", - "2804:5824::/32": "268109", - "2a00:9800::/32": "25227", - "2800:370:bc::/39": "28006", - "2a03:b200::/31": "20860", - "2a06:1e00:14::/48": "60695", - "2001:4408:8510::/38": "4758", - "2a0e:97c1:fdc::/48": "20473", - "2001:559:870d::/48": "7922", - "2401:1fc0::/32": "59155", - "2404:a640:114::/42": "133827", - "240a:a7dc::/32": "144662", - "2803:db00::/36": "262234", - "2a07:d9c0::/30": "27176", - "2001:559:804c::/48": "21508", - "2001:579:134::/36": "22773", - "2620:56:c000::/47": "393279", - "2a02:26f7:f841::/46": "20940", - "2804:3714::/32": "266388", - "2a00:ab00:6000::/36": "61976", - "2a01:8840:99::/48": "207266", - "2405:b40:707::/32": "55674", - "2a0e:5040::/29": "58280", - "2001:559:c3fe::/48": "33659", - "2001:678:690::/48": "49677", - "2001:16a2:6400::/36": "25019", - "2405:7e40::/32": "137515", - "2407:4e00:1:3::/32": "17995", - "240e:44d:500::/41": "140345", - "2605:dd40:8f00::/44": "16509", - "2001:df6:e300::/48": "138225", - "2404:63c0:30::/44": "131645", - "2607:fa88::/32": "6582", - "2001:418:3fe::/48": "3727", - "2001:559:81ac::/48": "7725", - "2406:4a00:1600::/40": "56038", - "2409:4003:1000::/34": "55836", - "2804:1ce4::/34": "61681", - "2a04:e802:19::/45": "57976", - "2a07:3500:1bc0::/48": "1136", - "2001:ee0:8d40::/35": "45899", - "2406:840:d001::/48": "38136", - "2804:1310::/32": "263513", - "2804:7598::/32": "271057", - "2a02:2230:2300::/33": "25467", - "2a02:26f7:a8::/48": "36183", - "2a03:9d40:4000::/40": "41095", - "2a09:4c2:34::/48": "213372", - "2001:df0:5e00::/48": "135046", - "2001:44b8:406d::/48": "4739", - "2401:d800:2890::/42": "7552", - "2804:36a0:2200::/32": "266360", - "2a06:e040:6a00::/35": "198507", - "2a09:f00:a::/47": "1836", - "2001:44b8:28::/48": "7545", - "2600:2100::/32": "54858", - "2607:f180:7100::/40": "45652", - "2a00:e480:1::/48": "12859", - "2a02:2e02:2310::/41": "12479", - "2001:dc7:8889::/35": "24151", - "2401:5dc0::/32": "1828", - "2600:1f70:4000::/40": "16509", - "2803:7da0:51::/48": "64114", - "2a01:280:330::/48": "29518", - "2804:5190::/32": "268462", - "2001:4408:6700::/44": "55824", - "2401:d180:10::/47": "133865", - "2402:9880:100::/37": "58744", - "2402:dfc0:40::/44": "137805", - "2407:b0c0::/32": "131988", - "240a:a18b::/32": "143045", - "240e:108:11a1::/46": "4812", - "2a02:26f0:5400::/48": "34164", - "2a10:cf00::/29": "12651", - "2001:1660::/32": "25417", - "2001:4b21:0:1::/32": "34288", - "2407:2580::/33": "44592", - "2620:13e:1000::/44": "11917", - "2408:8957:ae00::/40": "17622", - "2409:8087:3010::/42": "9808", - "2a05:a880:dc20::/48": "36351", - "2a10:8f00::/29": "39018", - "2001:1248:5b07::/42": "11172", - "2401:803e:1000::/34": "9919", - "2a03:4bc0:1015::/48": "202687", - "2001:559:54::/46": "7922", - "240a:ab02::/32": "145468", - "2a02:26f7:cec1::/46": "20940", - "2001:1a50::/32": "25560", - "2600:1004:d100::/42": "6167", - "2607:6980:e030::/44": "136620", - "2806:2f0:20c0::/48": "17072", - "2001:4870:e00b::/48": "21928", - "2804:2be0:7200::/32": "262503", - "2a0c:ca40::/29": "42598", - "2600:1419:7c01::/38": "20940", - "2620:38:c000::/48": "25656", - "2804:2558::/48": "264275", - "2001:678:b44::/48": "25526", - "2408:8260::/32": "4837", - "240a:a61d::/32": "144215", - "2803:6ce0:1cb0::/41": "269909", - "2a0c:b641:260::/46": "59598", - "2c0f:f4b8::/32": "327889", - "2600:380:a180::/38": "20057", - "2602:fddd::/36": "26801", - "2804:90c:facf::/37": "262617", - "2a01:b700::/32": "45011", - "2a0b:4200:2001::/48": "198433", - "2001:1248:a00c::/46": "11172", - "2001:559:c160::/48": "33660", - "2001:678:c14::/48": "5588", - "2403:4a00::/32": "9304", - "2803:4e40::/32": "264608", - "2a02:e840:1001::/48": "5543", - "2a10:44c0::/29": "210054", - "2402:fa00::/33": "55359", - "2607:fb90:cf00::/35": "21928", - "2a0d:5642:107::/48": "35487", - "2001:559:c330::/48": "7015", - "2401:4900:1280::/41": "45609", - "2401:4900:4020::/44": "45609", - "2a00:9d80::/32": "28876", - "2001:559:62::/48": "7725", - "2405:9800:ba81::/39": "45430", - "240a:a70f::/32": "144457", - "2603:90f5:1::/48": "20001", - "2620:53:a000::/48": "396431", - "2a0c:9a40:8a00::/48": "213234", - "2a0e:a440::/29": "208429", - "2001:559:87c0::/48": "7015", - "2001:559:c309::/48": "7922", - "2001:4200::/41": "2018", - "2606:1980:4::/44": "54994", - "2a02:7f0::/32": "42739", - "2001:579:c0dc::/46": "22773", - "2607:f220:204::/44": "19050", - "2801:166::/48": "19429", - "2803:dac0::/44": "265634", +var ipv6CidrToAsnPairList = [...]struct{ cidr, asn string }{ + {"2600:1407:3001::/37", "20940"}, + {"2400:a980:5900::/37", "133111"}, + {"2409:8710::/34", "9808"}, + {"240e:7c0::/20", "4134"}, + {"2402:800:3701::/44", "7552"}, + {"2406:daa0:10c0::/44", "16509"}, + {"2001:559:8511::/48", "7015"}, + {"2a02:26f7:33::/48", "20940"}, + {"2a03:3680::/32", "33824"}, + {"2400:dc00:4100::/46", "131111"}, + {"2409:8052:2802::/38", "56047"}, + {"2a02:26f7:db85::/46", "20940"}, + {"240a:aab8::/32", "145394"}, + {"2605:bc80::/32", "3701"}, + {"2607:7c80:56::/48", "64260"}, + {"2800:160:1378::/45", "14259"}, + {"2804:204:212::/45", "28186"}, + {"2a02:29b8::/32", "51852"}, + {"2a06:e044:10::/48", "198507"}, + {"2001:dce:8400::/48", "45285"}, + {"240e:db:8801::/35", "4134"}, + {"2800:160:1818::/42", "14259"}, + {"2806:230:602c::/48", "265594"}, + {"2a01:280:318::/48", "206320"}, + {"2a01:5200::/32", "48304"}, + {"2a03:7380:5400::/40", "13188"}, + {"2401:2280::/32", "56294"}, + {"2401:c240:4100::/35", "132847"}, + {"2406:f280:8000::/33", "31972"}, + {"2600:1488:6191::/38", "20940"}, + {"2806:2f0:31c1::/46", "17072"}, + {"2a01:b960:230d::/48", "208136"}, + {"2001:559:828e::/48", "33491"}, + {"2001:559:c1e8::/48", "7015"}, + {"2001:678:e20::/48", "210882"}, + {"2409:8087:5c0d::/40", "9808"}, + {"240a:a1fe::/32", "143160"}, + {"240a:ab19::/32", "145491"}, + {"2607:fd78:702::/36", "26677"}, + {"2804:5640:1100::/32", "267986"}, + {"2a02:26f7:b740::/48", "36183"}, + {"2a0a:ec02:a01::/48", "42692"}, + {"2001:579:c1c::/42", "22773"}, + {"240a:a4b3::/32", "143853"}, + {"2803:96e0::/32", "269964"}, + {"2804:73c0::/32", "270935"}, + {"2001:14d8::/32", "12371"}, + {"2001:67c:830::/48", "57964"}, + {"2800:160:2a4a::/39", "14259"}, + {"2804:58e8::/32", "268157"}, + {"2a02:26f7:c1c0::/48", "36183"}, + {"2a02:f1c0::/29", "6846"}, + {"2a0f:1840::/29", "60262"}, + {"2001:67c:2b34::/48", "8220"}, + {"240e:438:3220::/43", "140647"}, + {"2602:feb4:10::/42", "25961"}, + {"2606:26c0::/32", "63033"}, + {"2804:14c:da00::/40", "28573"}, + {"2804:2538::/39", "28183"}, + {"2a03:f85:2::/48", "60781"}, + {"2a0f:e80::/29", "42926"}, + {"2402:800:3d63::/43", "7552"}, + {"2600:1000:9e00::/44", "6167"}, + {"2a0a:4680::/29", "206737"}, + {"240a:a95a::/32", "145044"}, + {"2610:b0:401a::/45", "21433"}, + {"2620:1ec:1d::/48", "8068"}, + {"2804:8674::/32", "272644"}, + {"2a02:26f7:c240::/48", "36183"}, + {"2a06:e881:8400::/44", "149422"}, + {"2a0b:7e40::/32", "206894"}, + {"2602:feda:f0d0::/42", "396303"}, + {"2620:92::/44", "1970"}, + {"2a02:26f7:c68c::/48", "36183"}, + {"2a0d:5ec0::/29", "208861"}, + {"2607:f978:5::/48", "32475"}, + {"2620:0:28a0::/46", "33522"}, + {"2620:119:5071::/46", "13443"}, + {"2804:4618::/34", "266968"}, + {"2a04:4e40:2000::/48", "54113"}, + {"2001:ac8:51::/46", "9009"}, + {"2402:800:530f::/43", "7552"}, + {"2806:230:102a::/48", "265594"}, + {"2a02:2058::/32", "44512"}, + {"2a09:fd40::/48", "16376"}, + {"2a0f:1ac0::/29", "60262"}, + {"2a0f:f140::/29", "41776"}, + {"2602:10d:8000::/36", "33588"}, + {"2606:5000:2200::/36", "209"}, + {"2804:14c:b300::/40", "28573"}, + {"2a03:5d40::/32", "20926"}, + {"2401:4900:1f24::/43", "24560"}, + {"240e:37a:ac00::/33", "4134"}, + {"2804:7d5c::/32", "271556"}, + {"2a04:4e40:3000::/48", "54113"}, + {"2a0d:d000::/29", "204790"}, + {"2001:dce:5100::/48", "38064"}, + {"2001:4de8::/32", "29208"}, + {"2400:cb00:308::/48", "13335"}, + {"2401:7400:801:d::/35", "4773"}, + {"240e:438:420::/43", "140647"}, + {"2a01:ce83:1000::/34", "51964"}, + {"2a02:1398::/32", "16350"}, + {"2a0b:7380::/29", "31617"}, + {"2001:1900:23ad::/46", "202818"}, + {"2804:42b4::/32", "267520"}, + {"2a02:26f7:dd88::/48", "36183"}, + {"2404:bf40:e002::/48", "139084"}, + {"240a:aa43::/32", "145277"}, + {"2804:59c8::/32", "268725"}, + {"2001:4b20:100:668::/48", "34288"}, + {"2405:5940:b000::/33", "17473"}, + {"2607:fc48:428::/48", "40009"}, + {"2804:f84::/32", "263589"}, + {"2804:2cd4::/42", "265246"}, + {"2a00:65e0::/32", "198947"}, + {"2a01:d0::/42", "29632"}, + {"2406:6040::/32", "138257"}, + {"2a00:ad00::/34", "41897"}, + {"2001:e48::/42", "9583"}, + {"2405:7f00:91a0::/38", "133414"}, + {"2408:840c:8f00::/40", "17621"}, + {"2803:9800:9507::/36", "11664"}, + {"2804:5740::/32", "268054"}, + {"2a00:ab20::/29", "60530"}, + {"2001:fb0:109f:800a::/61", "7470"}, + {"2001:1980:4445::/35", "29838"}, + {"2001:4288:8009::/33", "6713"}, + {"2403:45c0::/32", "137989"}, + {"2408:8256:2d8b::/48", "17623"}, + {"2409:871a::/29", "132525"}, + {"2409:8979::/30", "9808"}, + {"240a:a94b::/32", "145029"}, + {"2804:14c:dc00::/40", "28573"}, + {"2804:2664::/32", "52721"}, + {"2804:71f8::/32", "270823"}, + {"2a03:ecc0::/32", "199277"}, + {"2a0f:c080::/32", "44582"}, + {"2001:67c:21e8::/48", "51944"}, + {"2001:df5:7980::/48", "132513"}, + {"2401:d800:5330::/41", "7552"}, + {"2403:2e40:10::/48", "137959"}, + {"2800:b20:2000::/30", "14754"}, + {"2620:10a:80e7::/48", "394354"}, + {"2620:11e:f001::/44", "27644"}, + {"2804:6ff4::/32", "270697"}, + {"2804:7f08::/43", "271662"}, + {"2a02:26f7:d1cc::/48", "36183"}, + {"2a02:26f7:fac9::/46", "20940"}, + {"240a:a308::/32", "143426"}, + {"2804:788c::/32", "271250"}, + {"2001:4888:801c::/47", "22394"}, + {"240a:af1f::/32", "146521"}, + {"2600:1408:2c01::/35", "20940"}, + {"2620:3c:c040::/48", "395063"}, + {"2803:5c80:6507::/48", "64114"}, + {"2a04:4e40:c200::/48", "54113"}, + {"2a07:a40:d::/29", "48821"}, + {"2001:678:41c::/48", "42563"}, + {"2001:4878:a048::/48", "12222"}, + {"2407:2e00::/32", "24436"}, + {"2600:6c62::/29", "20115"}, + {"2a01:a8::/32", "39122"}, + {"2406:26c0::/32", "134040"}, + {"240a:a0b9::/32", "142835"}, + {"2804:7648::/32", "271101"}, + {"2a02:2578:1a30::/32", "51375"}, + {"2a0b:c640::/29", "205473"}, + {"2409:8904:8640::/39", "24547"}, + {"2402:8100:21e0::/43", "45271"}, + {"240a:ad6d::/32", "146087"}, + {"2001:250:3081::/38", "23910"}, + {"2001:559:84b7::/44", "7922"}, + {"2404:f4c0:200::/46", "146961"}, + {"2408:8256:3399::/48", "17816"}, + {"2804:632c::/32", "269343"}, + {"2a02:8c8::/32", "20860"}, + {"2a02:26f7:b9cd::/46", "20940"}, + {"2a05:e580:fd00::/38", "134521"}, + {"2001:67c:2d34::/48", "207583"}, + {"240a:aa07::/32", "145217"}, + {"2804:2f90::/32", "264899"}, + {"2a0e:f080:1::/48", "12363"}, + {"2409:803d:2900::/38", "24444"}, + {"2409:8f04::/32", "24547"}, + {"2600:380:dc00::/44", "20057"}, + {"2801:80:1bc0::/48", "266511"}, + {"2408:8956:f1c0::/42", "17622"}, + {"240a:a6b8::/32", "144370"}, + {"2804:58fc:6000::/32", "268162"}, + {"2a03:aa80::/32", "48479"}, + {"2001:250:6817::/48", "23910"}, + {"2001:559:87ed::/48", "7922"}, + {"2001:13c7:6014::/48", "52500"}, + {"2403:2c00:7:2::4/44", "4058"}, + {"2800:800:a12::/42", "26611"}, + {"2402:800:5c71::/40", "7552"}, + {"2403:2400::/32", "9729"}, + {"2407:f140::/48", "140826"}, + {"2408:8459:5810::/42", "17623"}, + {"2803:5de0::/32", "270054"}, + {"2806:2f0:32a1::/46", "17072"}, + {"2a02:27ac::/32", "50979"}, + {"2a11:b1c1::/32", "35913"}, + {"2001:550:5605::/44", "174"}, + {"2600:370f:7162::/47", "32261"}, + {"2620:119:5000::/46", "13443"}, + {"2001:559:8795::/48", "33489"}, + {"2404:85c0::/32", "59110"}, + {"2408:8256:3196::/48", "17816"}, + {"240a:a463::/32", "143773"}, + {"2604:6600:a4::/39", "40676"}, + {"2605:7940:1000::/44", "30456"}, + {"2001:250:1400::/45", "24354"}, + {"2001:559:861d::/48", "7015"}, + {"2800:160:1b0f::/43", "14259"}, + {"2a01:7ae0::/32", "49182"}, + {"2a05:1083:fc00::/44", "209870"}, + {"2804:314:4015::/44", "61568"}, + {"2a02:26f7:cfc1::/46", "20940"}, + {"2001:559:2cc::/47", "7015"}, + {"2001:67c:15dc::/48", "43284"}, + {"2402:800:592b::/43", "7552"}, + {"2403:e200:805::/32", "45543"}, + {"2404:4d40::/32", "138575"}, + {"2406:e000:346::/42", "23655"}, + {"2408:8957:bb00::/40", "17816"}, + {"2804:3e90:4264::/32", "266606"}, + {"2001:559:8638::/48", "33491"}, + {"2607:f348:3595::/48", "16626"}, + {"2a02:70:200::/32", "3326"}, + {"2001:4220:3::/45", "36935"}, + {"2400:3ce0::/32", "132752"}, + {"2606:f40:1001::/48", "16509"}, + {"2606:6c00:c000::/48", "32787"}, + {"2804:3994:4000::/34", "266037"}, + {"2806:2f0:8063::/40", "17072"}, + {"2a00:1dc0::/29", "43289"}, + {"2001:67c:2608::/48", "197422"}, + {"2602:fc52:30d::/48", "399888"}, + {"2803:de20::/32", "265879"}, + {"2804:62dc::/32", "269323"}, + {"2804:6fb0::/32", "270677"}, + {"2806:2f0:9ba1::/46", "17072"}, + {"2a02:26f0:bd01::/38", "20940"}, + {"2a10:4646:12::/47", "47157"}, + {"2408:80f0:4000::/32", "4808"}, + {"2409:875c:4e00::/26", "9808"}, + {"240a:ac54::/32", "145806"}, + {"2600:6c7f:9170::/44", "20115"}, + {"2a07:7ec0::/29", "59441"}, + {"240a:a47f::/32", "143801"}, + {"2804:7c58::/32", "271490"}, + {"2a01:6e00::/44", "43142"}, + {"2a03:e600:101::/32", "1764"}, + {"2a0e:fd45:bef::/37", "44103"}, + {"2a0f:1800::/29", "51711"}, + {"2001:4408:7f10::/32", "4758"}, + {"240a:af66::/32", "146592"}, + {"240e:44d:1600::/41", "140345"}, + {"2803:cd80::/33", "264811"}, + {"2a0c:4c00::/29", "205260"}, + {"2001:559:8449::/48", "33659"}, + {"2402:800:75e0::/38", "7552"}, + {"2804:5d80:8580::/33", "268976"}, + {"2a02:26f7:f814::/48", "36183"}, + {"2a0a:9040::/29", "25486"}, + {"2001:559:700::/48", "33287"}, + {"2804:d38::/32", "53158"}, + {"2804:590c::/32", "268166"}, + {"2001:df0:2b7::/48", "9555"}, + {"2620:149:74::/40", "714"}, + {"2620:149:a1f::/42", "714"}, + {"2001:559:81ca::/48", "33657"}, + {"2605:a401:805e::/42", "33363"}, + {"2806:2f0:8221::/46", "17072"}, + {"240a:aad5::/32", "145423"}, + {"240a:aff2::/32", "146732"}, + {"2604:cf00::/32", "40230"}, + {"2806:2f0:52c3::/37", "17072"}, + {"240a:a2a3::/32", "143325"}, + {"2620:0:d30::/48", "22920"}, + {"2a03:2887:ff19::/48", "63293"}, + {"2001:559:286::/48", "22909"}, + {"2409:0:1::/40", "38620"}, + {"240e:438:a840::/38", "4134"}, + {"2a01:538::/32", "8518"}, + {"240a:a7e2::/32", "144668"}, + {"240a:aa38::/32", "145266"}, + {"2a02:2e02:da0::/38", "12479"}, + {"2a0d:5642:107::/48", "35487"}, + {"2600:1419:8001::/37", "20940"}, + {"2602:806::/40", "16904"}, + {"2a02:2af8:409::/45", "702"}, + {"2a0b:d780::/29", "16019"}, + {"2001:559:532::/48", "7015"}, + {"2804:3200::/32", "265050"}, + {"2a03:8900::/32", "1197"}, + {"2a0d:f407:1017::/48", "212448"}, + {"2001:470:83::/48", "26110"}, + {"2001:559:8321::/48", "7015"}, + {"2408:80ea:6800::/41", "17816"}, + {"2600:6c10:52::/44", "20115"}, + {"2606:2800:7a0c::/48", "15133"}, + {"2a02:26f7:f1::/46", "20940"}, + {"2401:5100::/32", "38442"}, + {"240e:44d:2100::/42", "140345"}, + {"2600:6c38:161::/45", "20115"}, + {"2a0f:cc87:d000::/34", "208861"}, + {"2001:579:2702::/33", "22773"}, + {"2402:800:f3e0::/37", "7552"}, + {"2406:de00:100::/38", "18225"}, + {"240a:afbd::/32", "146679"}, + {"2a01:8f80:100::/40", "62168"}, + {"2a07:2fc0::/29", "41337"}, + {"2a0d:180::/31", "204668"}, + {"2a02:26f7:fa84::/48", "36183"}, + {"2a06:c003::/32", "45027"}, + {"2001:559:c3ba::/48", "33659"}, + {"2600:6c38:f30::/45", "20115"}, + {"2a04:5900::/29", "60304"}, + {"2001:559:448::/48", "7725"}, + {"2001:44c8:41fe::/38", "131445"}, + {"2404:3d00:40a3::/45", "3573"}, + {"2804:24c4::/34", "264241"}, + {"2a02:26f7:c348::/46", "36183"}, + {"2a03:9180:4::/32", "199422"}, + {"2001:559:7ab::/48", "33659"}, + {"2001:78a::/31", "6893"}, + {"240a:adcc::/32", "146182"}, + {"2001:559:117::/44", "7922"}, + {"2a02:cb80:4200::/45", "43766"}, + {"2001:559:46f::/48", "33287"}, + {"2001:67c:2124::/48", "39526"}, + {"2602:fd46::/36", "398328"}, + {"2604:1a00:b::/32", "46887"}, + {"2a03:94a0::/32", "203752"}, + {"2a10:7fc0::/29", "202505"}, + {"2403:c000::/35", "4741"}, + {"2405:6e00:2220::/43", "18291"}, + {"2408:8956:f00::/40", "17816"}, + {"240a:afdd::/32", "146711"}, + {"2602:fdba::/36", "40676"}, + {"2620:0:167e::/48", "7046"}, + {"2804:846c::/32", "272260"}, + {"2a03:8480::/32", "47394"}, + {"2401:d800:d480::/42", "7552"}, + {"240a:abe5::/32", "145695"}, + {"2605:6640::/32", "397797"}, + {"2800:320:8408::/45", "27882"}, + {"2804:5ed8::/32", "269060"}, + {"2a02:26f7:f981::/46", "20940"}, + {"2001:67c:25a8::/48", "8218"}, + {"2401:4900:4790::/42", "45609"}, + {"240a:a3e5::/32", "143647"}, + {"2605:a401:8929::/43", "33363"}, + {"2c0f:fb40::/32", "37315"}, + {"2001:4490:d040::/46", "9829"}, + {"2401:d800:f7b0::/41", "7552"}, + {"2803:5260::/32", "267870"}, + {"2804:f8c:8090::/41", "263591"}, + {"2a0a:2180::/29", "2119"}, + {"240a:a228::/32", "143202"}, + {"240a:ae99::/32", "146387"}, + {"2407:bf40::/32", "142450"}, + {"2600:4402:c004::/29", "6130"}, + {"2a02:b60:2000::/35", "41032"}, + {"2a07:6240::/29", "34290"}, + {"2c0f:4880::/32", "328964"}, + {"2001:678:84c::/48", "57007"}, + {"240a:a137::/32", "142961"}, + {"2804:728:6040::/32", "53201"}, + {"2804:4c50::/32", "267363"}, + {"2a02:26f7:f181::/46", "20940"}, + {"2a03:1f40::/32", "199588"}, + {"2a04:4720::/30", "31511"}, + {"2001:49f0:d0dc::/42", "174"}, + {"2404:69c0::/32", "132129"}, + {"2600:1009:f100::/44", "6167"}, + {"2600:1480:800::/48", "21342"}, + {"2804:7f8c::/43", "271695"}, + {"2001:559:823e::/48", "7922"}, + {"2400:7940::/32", "59126"}, + {"2402:1280::/32", "63931"}, + {"2402:2000:7001::/32", "24350"}, + {"2402:2000:9001::/33", "24350"}, + {"2403:fbc0:3000::/48", "23959"}, + {"2804:26b0::/32", "263849"}, + {"2001:468:2806::/44", "396961"}, + {"2400:6b00::/32", "63997"}, + {"240e:109:8028::/48", "133775"}, + {"2806:2f0:52c1::/46", "17072"}, + {"2001:67c:2550::/48", "39870"}, + {"2406:840:edd0::/48", "38173"}, + {"240e:e9:8000::/37", "137702"}, + {"2800:440:1a00::/42", "27738"}, + {"2a09:ed80::/29", "203959"}, + {"2600:140f:4600::/48", "9498"}, + {"2600:1414:1::/31", "20940"}, + {"2602:fe30::/36", "394752"}, + {"2804:24b0::/38", "264238"}, + {"2a00:c280::/39", "50463"}, + {"2a01:6500:a054::/29", "42925"}, + {"2a07:8144::/36", "203926"}, + {"2c0f:f320::/32", "37126"}, + {"2001:df5:5c00::/48", "9649"}, + {"2804:1774::/32", "263145"}, + {"2a04:4e40:5440::/44", "54113"}, + {"2001:146b::/35", "49183"}, + {"2603:f8d0::/26", "397165"}, + {"2408:8a21:4000::/35", "4837"}, + {"2603:90f5:800::/40", "20115"}, + {"2603:f980::/25", "397165"}, + {"2800:68:c0c1::/35", "61468"}, + {"2803:d480::/32", "8053"}, + {"2a0b:2bc0::/29", "13023"}, + {"2404:f780:b::/48", "206607"}, + {"2406:f00:3::/48", "55824"}, + {"2408:8957:9700::/40", "17816"}, + {"240e:97a:2d02::/40", "23650"}, + {"2600:1003:b870::/40", "22394"}, + {"2600:100d:bf0e::/33", "22394"}, + {"2607:f330:9400::/40", "25996"}, + {"2a04:9540::/29", "51265"}, + {"2001:418:1456:b20::/62", "397601"}, + {"2402:3a80:1800::/42", "38266"}, + {"240a:a2e4::/32", "143390"}, + {"240e:3bb:7a00::/32", "140313"}, + {"2600:6c38:d7::/44", "20115"}, + {"2606:3980::/48", "55229"}, + {"2804:35f4::/33", "266317"}, + {"2a0c:6b00::/32", "21473"}, + {"2001:1af0:9021::/29", "13046"}, + {"2401:d800:e92::/41", "7552"}, + {"2804:30c4::/35", "264973"}, + {"2804:775c::/32", "271173"}, + {"2a00:1488::/32", "1887"}, + {"2001:559:834c::/48", "33657"}, + {"2a09:c540::/32", "209231"}, + {"2a0a:4587:2014::/32", "29670"}, + {"2001:43f8:1f5::/48", "37668"}, + {"2804:4a50::/32", "267232"}, + {"2a00:16e0::/32", "3249"}, + {"2001:4410:2012::/40", "132040"}, + {"2405:9800:c911::/45", "45430"}, + {"2a06:e881:121::/48", "202313"}, + {"2405:2300:ff43::/45", "13443"}, + {"2406:d500:12::/48", "136557"}, + {"2602:fe74::/36", "393996"}, + {"2c0f:e820::/32", "328575"}, + {"2001:559:8651::/48", "33489"}, + {"2600:1000:9100::/44", "6167"}, + {"2600:1406:d401::/38", "20940"}, + {"2804:37a8:1205::/48", "65002"}, + {"2001:4878:136::/48", "12222"}, + {"2604:3d80:804::/48", "394302"}, + {"2606:2800:6038::/48", "15133"}, + {"2606:6880::/32", "63470"}, + {"2800:150:7::/32", "22047"}, + {"2806:2ed::/32", "28398"}, + {"2001:678:164::/48", "39345"}, + {"2401:d800:7190::/42", "7552"}, + {"2600:2:d20::/40", "1239"}, + {"2600:1002:f000::/44", "6167"}, + {"2806:2f0:32c1::/46", "17072"}, + {"2a02:930::/32", "44237"}, + {"2001:4998:14::/48", "14777"}, + {"2405:4000:801::/61", "7470"}, + {"2408:8406:a800::/39", "4808"}, + {"2804:45b8::/32", "266945"}, + {"2804:5928::/32", "268172"}, + {"2a0c:ca40::/29", "42598"}, + {"2001:559:8067::/48", "33287"}, + {"2001:67c:2214::/48", "3301"}, + {"2001:67c:26b4::/48", "57672"}, + {"2401:4900:1680::/39", "45609"}, + {"2401:d800:dba0::/41", "7552"}, + {"2402:c000:3801::/32", "9230"}, + {"240e:3bc:9c00::/34", "140310"}, + {"2806:20d:1d47::/34", "32098"}, + {"2806:2f0:3381::/46", "17072"}, + {"2a02:26f7:5a::/48", "36183"}, + {"2a04:f580:9220::/48", "4809"}, + {"2a0e:aa00:210::/47", "41378"}, + {"2001:44b8:30b1::/48", "4739"}, + {"240a:aed0::/32", "146442"}, + {"2603:3:6000::/39", "398101"}, + {"2800:70::/32", "27789"}, + {"2804:ad8:828a::/33", "262494"}, + {"2804:69dc:8000::/33", "270296"}, + {"2402:800:3e20::/43", "7552"}, + {"2408:8956:8700::/40", "17816"}, + {"2604:86c0:f000::/40", "61003"}, + {"2804:4510::/32", "267670"}, + {"2a00:c70::/32", "21409"}, + {"2001:df2:6780::/48", "134340"}, + {"240a:a12a::/32", "142948"}, + {"2804:2a00:c000::/34", "264050"}, + {"2a01:388::/29", "42689"}, + {"2a02:88d:8300::/48", "48695"}, + {"2408:805c:5000::/32", "17816"}, + {"2408:8256:316b::/48", "17623"}, + {"2600:1405:1801::/34", "20940"}, + {"2602:fc1c::/43", "53356"}, + {"2803:f300::/32", "52405"}, + {"2a02:44a0:ffff::/48", "61955"}, + {"2401:d800:b740::/42", "7552"}, + {"240e:44d:2400::/41", "140345"}, + {"2800:48::/32", "27898"}, + {"2a01:61c0::/40", "20860"}, + {"2a02:2e02:d50::/42", "12479"}, + {"2a0d:c680::/29", "204467"}, + {"2001:43e0::/32", "37074"}, + {"2407:7d00:1::/48", "138915"}, + {"2604:b440::/47", "19738"}, + {"2606:2800:4025::/44", "15133"}, + {"2606:3380::/48", "53334"}, + {"2804:ea0::/33", "52968"}, + {"2a02:26f0:9301::/37", "20940"}, + {"2a04:2300::/29", "197623"}, + {"2401:d800:b1e0::/38", "7552"}, + {"2804:1c04::/33", "61633"}, + {"2804:4c30::/32", "267355"}, + {"2a00:11f8::/29", "24875"}, + {"2a04:bb80::/29", "62040"}, + {"240e:bf:b8e8::/46", "138635"}, + {"240e:3b6:7a00::/32", "140313"}, + {"2600:1015:b130::/40", "6167"}, + {"2a00:c50::/29", "49289"}, + {"2a00:4100::/32", "12460"}, + {"2a02:26f7:41::/48", "20940"}, + {"2a02:47a0:a::/48", "49673"}, + {"2a0c:f480::/29", "328543"}, + {"2401:3c0:10b::/48", "45528"}, + {"2406:2000:efa5::/48", "45501"}, + {"2603:90f5:14::/40", "11426"}, + {"2620:100:c::/48", "19637"}, + {"2620:10a:4003::/45", "17394"}, + {"2804:9d4::/39", "262996"}, + {"2a02:26f7:b941::/46", "20940"}, + {"2a02:26f7:b78d::/42", "20940"}, + {"2a11:9d80::/29", "49396"}, + {"2804:7778::/32", "271180"}, + {"2a04:e240::/29", "35617"}, + {"240a:a521::/32", "143963"}, + {"2600:370f:352a::/45", "32261"}, + {"2607:fb58::/47", "36086"}, + {"2620:10:e000::/48", "55228"}, + {"2409:f:f2::/48", "142502"}, + {"2804:224c::/32", "262769"}, + {"2804:72f8::/32", "270887"}, + {"2804:4f50::/32", "268319"}, + {"2804:6dcc::/32", "270556"}, + {"2a02:2aa0::/39", "702"}, + {"2a09:4e07:8000::/36", "210625"}, + {"2c0f:f020:10::/48", "327907"}, + {"2401:d800:2490::/42", "7552"}, + {"2600:6c10:8e::/43", "20115"}, + {"2606:2800:7a10::/48", "15133"}, + {"2a11:7400:f2::/48", "50518"}, + {"240a:a939::/32", "145011"}, + {"2600:5c01:34b7::/44", "11351"}, + {"2a02:d8c0::/29", "2119"}, + {"2a03:2880:f020::/47", "32934"}, + {"2a11:7347::/33", "33171"}, + {"2001:da8:210::/48", "23910"}, + {"2001:df0:5800::/48", "55660"}, + {"2409:8c14::/40", "56044"}, + {"2606:5dc0:8a00::/39", "395561"}, + {"2804:db8::/32", "28335"}, + {"2804:11cc::/32", "263440"}, + {"2001:4878:2220::/48", "12222"}, + {"2409:8a1a::/35", "132525"}, + {"2602:fd4e::/36", "13465"}, + {"2a03:5a07::/32", "51028"}, + {"2a0b:e45:1::/48", "205809"}, + {"2001:c20:48a4::/48", "9255"}, + {"2001:44b8:30c7::/48", "7545"}, + {"2403:8ec0::/32", "134098"}, + {"2604:880:d::/46", "29802"}, + {"2604:4480::/32", "22552"}, + {"2804:41e8::/32", "267464"}, + {"2a00:f080::/42", "13030"}, + {"2a06:e381::/32", "206970"}, + {"2a0c:b641:600::/44", "210356"}, + {"2001:559:78b::/48", "7015"}, + {"2001:559:c23e::/48", "33491"}, + {"2001:67c:3e8::/47", "39358"}, + {"2406:a400::/32", "10024"}, + {"2610:58::/46", "111"}, + {"2620:11a:b000::/44", "12276"}, + {"2804:28e4:e022::/44", "28260"}, + {"2a04:4e40:2230::/44", "54113"}, + {"2001:480:502::/41", "668"}, + {"2400:e501::/32", "138322"}, + {"2409:8904:cf40::/42", "24547"}, + {"240e:9f:c000::/35", "134420"}, + {"2803:3620::/32", "265867"}, + {"2a02:88d:220::/44", "48695"}, + {"2a05:b680::/48", "33823"}, + {"2404:e900:8000::/33", "46062"}, + {"2408:8000:c000::/45", "140726"}, + {"240a:a93c::/32", "145014"}, + {"240e:44d:4e80::/41", "4134"}, + {"2620:82:a000::/48", "207563"}, + {"2001:559:4ad::/48", "7016"}, + {"2408:8256:2e61::/40", "17623"}, + {"240a:a3d1::/32", "143627"}, + {"240a:a5fe::/32", "144184"}, + {"240a:a7f5::/32", "144687"}, + {"240a:a7fb::/32", "144693"}, + {"2604:c4c0::/32", "11635"}, + {"2607:c980::/32", "399092"}, + {"2804:449c::/40", "267642"}, + {"2a0a:e5c0:2::/48", "207996"}, + {"2001:4870:a24f::/48", "10596"}, + {"2620:4d:a000::/48", "32995"}, + {"2a00:4802:2d0::/44", "8717"}, + {"2a0b:b87:ffd7::/48", "206804"}, + {"2408:8956:200::/40", "17622"}, + {"240e:980:4d00::/40", "4134"}, + {"2604:d600:1c23::/39", "32098"}, + {"2a02:26f7:24::/48", "36183"}, + {"2a09:5cc0::/29", "199163"}, + {"2404:e7:210::/28", "703"}, + {"2607:280::/32", "32365"}, + {"2406:3000:11:1013::/60", "4657"}, + {"2605:3380:4dfe::/47", "395174"}, + {"2a02:26f7:bc41::/46", "20940"}, + {"2a03:6083:9000::/33", "16285"}, + {"2a0d:2080::/29", "204646"}, + {"2402:800:5a47::/43", "7552"}, + {"2402:800:7120::/41", "7552"}, + {"2408:8256:2f7c::/46", "17623"}, + {"2620:119:500b::/43", "13443"}, + {"2a02:26f7:eb80::/48", "36183"}, + {"2001:678:808::/48", "210316"}, + {"2001:978:6408::/38", "174"}, + {"2402:800:3c55::/42", "7552"}, + {"2603:f220::/25", "397165"}, + {"2803:e0e0:1ff::/48", "269852"}, + {"2a02:26f0:a200::/48", "34164"}, + {"2a0b:2200::/29", "39806"}, + {"2a0e:b107:9da::/48", "213262"}, + {"2600:6c38:549::/43", "20115"}, + {"2a00:1728:25::/44", "34224"}, + {"2a01:c50f:b540::/38", "12479"}, + {"2001:559:7e::/47", "33491"}, + {"2001:559:c340::/48", "7922"}, + {"2001:67c:2b40::/48", "198235"}, + {"2001:da8:257::/48", "4538"}, + {"2803:2f80::/32", "61503"}, + {"2a03:a600::/29", "44600"}, + {"2404:3a80::/32", "135063"}, + {"2407:7a80:14::/42", "132384"}, + {"2804:5558::/32", "263102"}, + {"2a02:26f7:c100::/48", "36183"}, + {"2a05:e200::/32", "39767"}, + {"2001:559:823f::/48", "7015"}, + {"2001:43d8:c001::/34", "15022"}, + {"2804:cb8::/32", "53213"}, + {"2804:821c::/32", "272499"}, + {"2405:2300:ff00::/46", "13443"}, + {"240a:ab70::/32", "145578"}, + {"2606:6680:20::/48", "27323"}, + {"2a07:5940::/32", "43915"}, + {"2607:f4a0:5010::/48", "396926"}, + {"2800:bf0:30::/46", "52257"}, + {"2a00:e440::/32", "56876"}, + {"2001:4408:7d00::/38", "4758"}, + {"2603:c022:8000::/35", "31898"}, + {"2804:cac::/32", "262748"}, + {"2804:7028::/32", "270709"}, + {"2a01:4c01::/32", "58291"}, + {"2001:559:289::/48", "7016"}, + {"2001:559:310::/48", "7922"}, + {"2001:559:81b8::/48", "33287"}, + {"240e:947:2000::/36", "4134"}, + {"2605:3dc0:8::/48", "397952"}, + {"2620:149:5b6::/41", "714"}, + {"2804:5a30::/34", "268754"}, + {"2a0c:b641:455::/48", "208333"}, + {"2a0d:4cc0::/29", "30823"}, + {"2a10:d9c0::/29", "34907"}, + {"2403:7000:4100::/32", "45179"}, + {"2606:2800:20c::/46", "15133"}, + {"2a02:26f7:ec88::/48", "36183"}, + {"2a06:b080:a001::/48", "203776"}, + {"240a:ae57::/32", "146321"}, + {"2605:e540::/32", "13370"}, + {"2a02:26f7:cd48::/48", "36183"}, + {"2001:1248:9813::/45", "11172"}, + {"2401:d6c0::/32", "137199"}, + {"2804:204:2dc::/39", "28186"}, + {"2001:cb0::/38", "4637"}, + {"2605:5c0:c105::/44", "28885"}, + {"2804:14d:90ab::/45", "28573"}, + {"2806:230:402b::/48", "11888"}, + {"2a02:26f7:e850::/48", "36183"}, + {"2401:e980::/32", "64006"}, + {"2406:3d80::/32", "63620"}, + {"2600:6c20:a01::/46", "20115"}, + {"2a05:dcc0::/29", "15600"}, + {"2001:ce0:2900::/48", "7650"}, + {"2403:2040::/32", "17775"}, + {"2408:8256:3795::/48", "17816"}, + {"240e:44d:3280::/41", "4134"}, + {"2600:5c01::/39", "10796"}, + {"2602:ffb0:29::/48", "20473"}, + {"2620:0:150::/44", "16524"}, + {"2804:3f58::/33", "265886"}, + {"2806:2f0:24a2::/48", "17072"}, + {"2a0d:77c7:f6ce::/36", "7489"}, + {"2001:559:7e2::/48", "33657"}, + {"2001:1a11:af::/48", "42298"}, + {"240e:44d:e40::/42", "140358"}, + {"2607:f720::/32", "7377"}, + {"2620:12f:f000::/44", "43"}, + {"2804:ff4::/32", "53218"}, + {"2804:75e8::/32", "271077"}, + {"2001:559:5c2::/45", "7922"}, + {"2001:559:84d8::/48", "7922"}, + {"2001:da8:c3::/48", "138381"}, + {"2402:1580::/38", "17682"}, + {"2804:2050:8a8c::/33", "264485"}, + {"2804:7930::/32", "271290"}, + {"2a01:1b0:c010::/34", "31477"}, + {"2001:559:82e8::/48", "33660"}, + {"2001:559:8474::/48", "33650"}, + {"2001:8b8::/29", "1759"}, + {"2409:8924:2b00::/37", "56046"}, + {"2800:160:144e::/43", "14259"}, + {"2803:1a00:500f::/43", "262186"}, + {"2a03:8a0::/32", "200691"}, + {"2a0c:a940::/29", "9009"}, + {"2001:df0:64c0::/48", "147293"}, + {"2001:12f0::/42", "1916"}, + {"2606:7b00:4000::/32", "10538"}, + {"2804:7e28::/32", "271606"}, + {"2407:7a80:28::/43", "132384"}, + {"240a:a9ea::/32", "145188"}, + {"2a09:e200:e200::/48", "49121"}, + {"2405:6e00:8fc::/46", "133612"}, + {"2406:daa0:b080::/44", "16509"}, + {"2610:e0::/34", "2572"}, + {"2804:833c:8000::/33", "272185"}, + {"2a0e:5540:10::/46", "208258"}, + {"2001:559:86e4::/47", "33651"}, + {"2600:6c2e:49b::/39", "20115"}, + {"2604:ef00::/32", "18988"}, + {"2607:6100:101c::/48", "400053"}, + {"2001:67c:1118::/48", "2119"}, + {"2408:8459:1650::/36", "17816"}, + {"240e:980:8800::/40", "38283"}, + {"2600:1801:2::/47", "16552"}, + {"2804:14c:4186::/44", "28573"}, + {"2804:8488::/32", "272266"}, + {"2a0d:3842:1180::/48", "57629"}, + {"2408:8459:a430::/41", "17622"}, + {"2409:8963::/28", "9808"}, + {"240a:a381::/32", "143547"}, + {"2a04:5201:8018::/48", "200740"}, + {"2001:67c:2288::/48", "44073"}, + {"240e:44d:2280::/41", "4134"}, + {"2804:4f8::/36", "28263"}, + {"2806:1090::/32", "8151"}, + {"2401:d800:9c40::/42", "7552"}, + {"2409:8053:3000::/47", "56047"}, + {"240e:61:6000::/32", "4134"}, + {"2602:fedc:10::/42", "393857"}, + {"2605:dd40:8f00::/44", "16509"}, + {"2806:2f0:4003::/41", "17072"}, + {"2a02:26f0:9801::/39", "20940"}, + {"2a09:c140:3::/48", "210079"}, + {"2406:a6c0::/48", "18403"}, + {"2409:896a:4200::/39", "9808"}, + {"240a:ac9f::/32", "145881"}, + {"240e:3b8:ec00::/35", "140314"}, + {"2604:d600:1b08::/37", "32098"}, + {"2604:e180:1006::/33", "55002"}, + {"2804:1070:4000::/36", "28209"}, + {"2806:2f0:2141::/48", "22884"}, + {"2a00:fe00:c180::/48", "702"}, + {"2a07:9b83::/32", "50113"}, + {"2001:44c8:46c0::/42", "45430"}, + {"2400:cb00:376::/47", "13335"}, + {"2620:cb:c000::/48", "393965"}, + {"2620:10a:e000::/40", "11250"}, + {"2803:a4c0::/32", "264795"}, + {"2804:8468::/32", "272259"}, + {"2a02:2808:1006::/48", "47211"}, + {"2a0e:b107:b80::/45", "212995"}, + {"2c0f:f780::/32", "327805"}, + {"2001:559:c4d4::/48", "33287"}, + {"2001:df5:3780::/48", "24303"}, + {"2401:803e:2001::/42", "9919"}, + {"2602:fc3e::/48", "400190"}, + {"2604:4f00::/36", "47002"}, + {"2a0c:84c0::/29", "48635"}, + {"2001:4200:3210::/37", "2018"}, + {"2607:fcd0:ff03:1::/40", "8100"}, + {"2804:4cd0::/32", "267394"}, + {"2804:66c4::/32", "269581"}, + {"2001:400:b14::/48", "3671"}, + {"2001:fd8:a4::/46", "132199"}, + {"2402:800:9d0f::/43", "7552"}, + {"2406:da19::/36", "16509"}, + {"2804:2558:3::/48", "264275"}, + {"2a0d:ac80::/29", "204475"}, + {"2001:559:c2b7::/48", "13367"}, + {"2001:67c:1084::/48", "34686"}, + {"2a00:ef20::/29", "199752"}, + {"2a02:26f7:f085::/46", "20940"}, + {"2a11:a9c0::/29", "1239"}, + {"2c0f:fe10::/32", "20294"}, + {"2607:b500::/47", "54548"}, + {"2800:190:f3::/39", "11664"}, + {"2a02:26f7:d484::/48", "36183"}, + {"2a03:cdc0::/35", "31034"}, + {"2001:978:2:c1::c:0/38", "174"}, + {"2405:6800:3000::/33", "18207"}, + {"2803:14c0::/32", "28023"}, + {"2804:6a84::/32", "270341"}, + {"2806:10a0::/32", "8151"}, + {"2405:7000:400::/40", "59108"}, + {"240a:a4cf::/32", "143881"}, + {"2804:6788::/32", "269634"}, + {"2a0d:3bc0::/29", "60781"}, + {"2a10:d780:4::/32", "211997"}, + {"2402:800:b890::/42", "7552"}, + {"2a00:de61:100::/38", "16509"}, + {"2a05:5a00::/29", "212613"}, + {"2a05:b880::/29", "44746"}, + {"2401:4900:32e0::/39", "45609"}, + {"2408:8459:6810::/42", "17623"}, + {"2804:7210:200::/45", "270830"}, + {"2804:795c::/32", "271301"}, + {"2a04:4e40:210::/41", "54113"}, + {"2a07:a905:ffe4::/48", "204543"}, + {"2001:67c:2c92::/47", "60092"}, + {"2404:bf40:8083::/42", "139084"}, + {"2408:8256:2f80::/44", "17623"}, + {"2602:fd5d:100::/40", "62731"}, + {"2602:ff7a::/32", "394144"}, + {"2404:9740::/32", "135760"}, + {"2409:8948:9400::/31", "24445"}, + {"2606:2800:400d::/48", "14153"}, + {"2804:270::/40", "262814"}, + {"2a04:b2c0::/29", "5413"}, + {"2620:101:3000::/42", "19945"}, + {"2a00:cf00::/32", "41937"}, + {"2a02:26f0:74::/48", "34164"}, + {"2404:3d00:4117::/48", "3573"}, + {"2804:578::/32", "262516"}, + {"2a01:430:11::/48", "51134"}, + {"2a02:26f7:d449::/46", "20940"}, + {"2001:559:8445::/48", "21508"}, + {"2405:6e00:2ed::/48", "65442"}, + {"2409:8087:2005::/42", "56046"}, + {"240e:3be:7600::/39", "140313"}, + {"240e:978:2100::/36", "4134"}, + {"2804:14d:be00::/40", "28573"}, + {"2a00:ea60:200::/40", "43463"}, + {"2a01:8840:1be::/41", "12041"}, + {"2a02:2698:1400::/38", "50542"}, + {"2405:1c0:6751::/46", "55303"}, + {"2408:8456:3650::/39", "17816"}, + {"240a:a7c6::/32", "144640"}, + {"2803:7860::/32", "267829"}, + {"2804:1e20:10::/47", "264409"}, + {"2a02:2498:9002::/36", "13213"}, + {"2a0a:d580::/32", "60602"}, + {"2a02:26f7:d1c5::/46", "20940"}, + {"2a0e:97c0:332::/48", "210542"}, + {"2001:67c:21ec::/48", "56662"}, + {"2804:14b4::/32", "263345"}, + {"2a03:9e43::/32", "141760"}, + {"2001:1248:59be::/41", "11172"}, + {"2001:1248:971f::/42", "11172"}, + {"2001:4478:5a00::/32", "4802"}, + {"2408:8256:3b76::/44", "17623"}, + {"2608:4122:2::/48", "5927"}, + {"2800:440:1e00::/42", "27738"}, + {"2a00:1c60::/32", "47674"}, + {"2a02:88d:8100::/44", "48695"}, + {"2001:c10:ff00:a::/47", "7473"}, + {"2606:82c0:1::/46", "32167"}, + {"2607:f160:2e::/48", "22394"}, + {"2001:df1:6800::/48", "45671"}, + {"2408:8756:ca0::/41", "136958"}, + {"2001:559:1bf::/48", "33659"}, + {"2001:559:80d0::/48", "22909"}, + {"2001:678:57c::/48", "42239"}, + {"240c:cf82::/25", "23910"}, + {"2605:4400:8::/32", "40715"}, + {"2606:2800:4201::/48", "14153"}, + {"2a01:b580::/32", "12688"}, + {"2a02:2698:7c00::/38", "52207"}, + {"2a05:8f00::/29", "201199"}, + {"2400:9380:9fc0::/44", "136167"}, + {"2620:108:8002::/48", "14904"}, + {"2a02:888:148::/47", "48695"}, + {"2a10:c700::/32", "212324"}, + {"2001:559:8561::/48", "7015"}, + {"2403:b100:2014::/32", "9989"}, + {"2604:d600:1105::/44", "32098"}, + {"2620:149:fe::/47", "714"}, + {"2803:3a80::/32", "23383"}, + {"2a0c:8900::/29", "200462"}, + {"2001:49c8::/32", "22284"}, + {"2a02:26f0:ab01::/37", "20940"}, + {"2001:559:8037::/48", "33491"}, + {"2001:559:c17e::/48", "33652"}, + {"2600:140f:8::/47", "20940"}, + {"2606:6000:4000::/36", "10838"}, + {"2800:160:1dd2::/45", "14259"}, + {"2801:11:800::/48", "14080"}, + {"2a02:2420::/32", "197075"}, + {"2a05:900::/29", "198930"}, + {"2001:559:81ea::/48", "33659"}, + {"2402:800:378d::/43", "7552"}, + {"240a:a8bc::/32", "144886"}, + {"2607:fdf0:5e8f::/43", "8008"}, + {"2a01:7f60:30::/32", "9115"}, + {"2a02:26f7:b904::/48", "36183"}, + {"2a07:b40::/29", "202629"}, + {"2a07:8980:103::/30", "198651"}, + {"2001:538::/32", "7381"}, + {"240e:109:804b::/48", "133774"}, + {"2604:d600:55f::/42", "32098"}, + {"2605:9f00::/38", "36473"}, + {"2a02:26f7:b409::/39", "20940"}, + {"2a03:be80:4::/44", "15510"}, + {"2001:559:c0::/48", "21508"}, + {"2001:559:8469::/48", "33659"}, + {"2401:1640::/32", "18254"}, + {"240a:a487::/32", "143809"}, + {"240e:95:8001::/48", "58542"}, + {"2a09:bac0:102::/47", "13335"}, + {"2408:84f3:2e50::/44", "17816"}, + {"2409:8a53:900::/38", "56047"}, + {"2606:1440::/32", "399100"}, + {"2804:3c78:f000::/48", "266214"}, + {"2a02:582:5c00::/34", "6799"}, + {"2a02:26f7:c181::/46", "20940"}, + {"2a04:4e42:601::/36", "54113"}, + {"2a0b:4200:2001::/48", "198433"}, + {"2a0c:9a40:808c::/48", "53356"}, + {"2a10:41c0::/29", "211645"}, + {"2405:c0:90::/48", "138881"}, + {"2a0e:dbc0::/46", "208366"}, + {"2001:df4:1d80::/48", "140878"}, + {"2402:5b00::/44", "18002"}, + {"2804:14c:5500::/40", "28573"}, + {"2a00:fc00:e000::/48", "50392"}, + {"2a07:2e80::/29", "203201"}, + {"2a0e:bbc0:8001::/48", "11251"}, + {"2408:8000:9fff::/48", "138421"}, + {"240a:ab1a::/32", "145492"}, + {"2001:559:c390::/48", "33657"}, + {"2408:8459:e250::/37", "17816"}, + {"240e:947:6000::/32", "4134"}, + {"2a0b:4340:a1::/48", "134575"}, + {"2804:13b0:7c00::/38", "263546"}, + {"2804:71dc::/32", "270816"}, + {"2409:8d0c::/30", "56042"}, + {"240e:44d:6280::/41", "4134"}, + {"2804:78dc::/32", "271270"}, + {"2a02:26f0:d701::/36", "20940"}, + {"2a07:40::/29", "16186"}, + {"2001:678:ad0::/48", "205597"}, + {"2600:1408:25::/36", "20940"}, + {"2a01:c8cf:ffe0::/43", "25454"}, + {"2a0e:9cc0::/29", "208905"}, + {"2600:1f01:4081::/48", "16509"}, + {"2607:4980::/32", "395261"}, + {"2a00:4e80::/32", "12754"}, + {"2a02:ee80:4242::/47", "21433"}, + {"2408:826c::/27", "4837"}, + {"2408:8956:1700::/40", "17816"}, + {"240a:a570::/32", "144042"}, + {"2607:f160:37::/48", "22394"}, + {"2806:230:6022::/48", "265594"}, + {"2a00:1fd0:ec00::/48", "29033"}, + {"2a0c:bdc0::/29", "51333"}, + {"2001:559:538::/48", "33659"}, + {"2402:800:98a9::/43", "7552"}, + {"2804:51c:8000::/34", "262495"}, + {"2804:5110::/39", "268428"}, + {"2a04:4e40:1400::/48", "54113"}, + {"2a07:20c0::/29", "48602"}, + {"2001:3c8:cb02::/35", "4621"}, + {"2001:da8:2f01::/40", "23910"}, + {"2409:40f1::/30", "55836"}, + {"240a:aa16::/32", "145232"}, + {"240e:44d:4a40::/42", "140357"}, + {"2605:afc0::/32", "14488"}, + {"2406:3002:40::/50", "138345"}, + {"2804:7d3c::/34", "271548"}, + {"2a09:f400::/29", "38983"}, + {"2001:3c8:2706::/48", "4621"}, + {"2a09:d240::/48", "30870"}, + {"2001:67c:2864::/48", "51091"}, + {"2804:7838:e000::/35", "271228"}, + {"2a02:5b0::/32", "35467"}, + {"2a02:ee80:4161::/45", "3573"}, + {"2c0f:fbb0::/32", "37055"}, + {"2001:559:1e5::/48", "33491"}, + {"2406:3c0::/32", "132315"}, + {"2607:f178:4::/47", "30217"}, + {"2408:8456:e440::/38", "17816"}, + {"2a02:26f7:e641::/46", "20940"}, + {"2a02:26f7:f1c8::/48", "36183"}, + {"2a0f:29c4::/30", "398481"}, + {"2001:4878:b347::/48", "12222"}, + {"2401:8e00:801::/34", "9260"}, + {"2402:8100:266f::/43", "45271"}, + {"2806:1020:702::/32", "8151"}, + {"2001:559:c489::/46", "7922"}, + {"2001:4c08:2020::/45", "3356"}, + {"2401:4900:54b1::/48", "45609"}, + {"2408:8644::/35", "140726"}, + {"2a09:b240::/32", "21269"}, + {"2a0e:cf80::/29", "210661"}, + {"2001:1248:5f4b::/43", "11172"}, + {"2804:69fc::/37", "270304"}, + {"2a00:1968::/48", "41528"}, + {"2a0a:e240::/31", "205893"}, + {"240a:a87c::/32", "144822"}, + {"240e:978:d00::/40", "134756"}, + {"2a02:26f0:6b01::/37", "20940"}, + {"2a02:26f7:f980::/48", "36183"}, + {"2a10:6780::/29", "204790"}, + {"2001:559:535::/48", "7922"}, + {"2401:5800::/32", "24481"}, + {"2408:8956:b900::/40", "17816"}, + {"2800:160:1531::/41", "14259"}, + {"2804:6ee8:2000::/36", "270626"}, + {"2001:1a11:9a::/48", "8781"}, + {"2a02:e10::/32", "43646"}, + {"2001:df4:7000::/48", "45561"}, + {"2801:0:1d0::/45", "52378"}, + {"2a01:808::/27", "3209"}, + {"2001:8c8::/32", "6700"}, + {"2406:f900:28::/43", "132829"}, + {"2408:8956:7500::/40", "17816"}, + {"2a0e:b105:100::/44", "212996"}, + {"2a0f:aac0::/47", "16509"}, + {"2400:cb00:a4b0::/46", "13335"}, + {"2804:6970::/32", "270270"}, + {"2a00:5641::/32", "13030"}, + {"2a05:3580:d400::/34", "35807"}, + {"2400:d400:5eae::/48", "24238"}, + {"2402:800:41e7::/44", "7552"}, + {"2404:4f02::/40", "137840"}, + {"2408:8459:e210::/42", "17623"}, + {"2602:ff16:10::/46", "29802"}, + {"2a02:2178::/29", "29075"}, + {"2001:67c:640::/48", "59398"}, + {"2001:df5:2200::/48", "133156"}, + {"240a:aafa::/32", "145460"}, + {"2604:5cc0:1fff::/32", "13351"}, + {"2620:12d:e019::/48", "3356"}, + {"2804:c48:ffff::/48", "52687"}, + {"2a02:26f7:c04d::/42", "20940"}, + {"240e:f7:2000::/36", "134771"}, + {"2600:1488:c061::/40", "20940"}, + {"2604:d600:536::/41", "32098"}, + {"2a01:660::/29", "48951"}, + {"2a02:a00:10::/35", "15987"}, + {"2401:d800:df30::/41", "7552"}, + {"2409:40f2:2000::/32", "55836"}, + {"240a:ac43::/32", "145789"}, + {"240a:adfc::/32", "146230"}, + {"2804:335c:f000::/36", "265391"}, + {"2409:8087:8005::/44", "9808"}, + {"2604:a900::/32", "27539"}, + {"2a03:efc0:900::/40", "33438"}, + {"2401:ac00::/32", "9268"}, + {"240a:a079::/32", "142771"}, + {"240a:a71e::/32", "144472"}, + {"240a:a9c5::/32", "145151"}, + {"240e:438:220::/43", "140647"}, + {"2605:c00:100::/40", "46920"}, + {"2607:f6f0:1800::/40", "15830"}, + {"2620:64:a000::/47", "397277"}, + {"2804:18c::/32", "28637"}, + {"2406:6140::/32", "137102"}, + {"2606:2800:4214::/44", "15133"}, + {"240e:3b4:7800::/39", "4134"}, + {"2a02:2268::/32", "197902"}, + {"2a02:26f7:25::/48", "20940"}, + {"2a06:5b00::/29", "41937"}, + {"2406:a2c0::/32", "135845"}, + {"240a:a14b::/32", "142981"}, + {"2602:807:50e0::/47", "55136"}, + {"2607:f250:d010::/48", "7046"}, + {"2607:f6f0:4000::/48", "29884"}, + {"2804:62b4:8000::/36", "269313"}, + {"2406:e400:deee::/34", "7642"}, + {"240a:a411::/32", "143691"}, + {"240e:84c:40::/44", "140345"}, + {"2a0f:b506:ff01::/45", "206313"}, + {"2402:800:b010::/42", "7552"}, + {"240a:afc4::/32", "146686"}, + {"2600:1409:6001::/36", "20940"}, + {"2804:550c:e000::/35", "268686"}, + {"2a04:d880::/29", "5587"}, + {"2a0a:90c0:1000::/47", "205080"}, + {"2a0d:77c7:f1e5::/37", "7489"}, + {"2001:559:318::/48", "7922"}, + {"2001:559:8547::/48", "7016"}, + {"2409:802f:2905::/44", "9808"}, + {"2600:1806:511::/48", "16552"}, + {"2605:a5c0::/32", "54161"}, + {"2804:6a60::/32", "270332"}, + {"2a07:6c40::/29", "29505"}, + {"2a03:5640:f043::/40", "2906"}, + {"2a0e:f880::/29", "207902"}, + {"2001:559:828f::/48", "7922"}, + {"240a:a336::/32", "143472"}, + {"2402:800:5671::/44", "7552"}, + {"2404:2440:eeee::/48", "138521"}, + {"240a:aa7c::/32", "145334"}, + {"2a03:32c0::/44", "48503"}, + {"2a0e:b107:11d0::/47", "58015"}, + {"2001:550:1304::/37", "174"}, + {"2001:559:86ea::/48", "33651"}, + {"2801:16e:6::/42", "19429"}, + {"2804:5bc::/32", "28658"}, + {"2001:678:cf0::/48", "60557"}, + {"2600:1413:1000::/48", "24319"}, + {"2603:c0f1::/36", "6142"}, + {"2804:2bf0:8100::/33", "262740"}, + {"2a0c:3340::/29", "39602"}, + {"2a10:2a80:1ab::/48", "207727"}, + {"2001:c20:4879::/46", "3758"}, + {"240e:981:6100::/36", "4134"}, + {"2a07:7800:7::/29", "31727"}, + {"2001:ee0:a640::/33", "45899"}, + {"2401:d800:bdf2::/38", "7552"}, + {"2803:9880::/32", "264640"}, + {"2a02:128:10::/48", "48709"}, + {"2a0b:b87:ff14::/48", "210667"}, + {"2001:1900:23ce::/36", "3356"}, + {"2402:800:91ee::/43", "7552"}, + {"2402:800:97fe::/36", "7552"}, + {"2605:8240::/32", "398113"}, + {"2804:2af0::/45", "265126"}, + {"2a00:1c10:cd0::/44", "50300"}, + {"2a03:f80:359::/48", "56630"}, + {"2600:1417:5f::/48", "38040"}, + {"2800:68:3a::/47", "61468"}, + {"2800:440:146::/48", "27738"}, + {"2a00:1678:3cc0::/48", "49453"}, + {"2a09:7c47::/32", "44094"}, + {"2a0e:2b04::/30", "1239"}, + {"240e:37c:aa00::/39", "140330"}, + {"2602:fc20::/36", "6461"}, + {"2620:11f:5000::/40", "393869"}, + {"2804:165c::/32", "263284"}, + {"2a02:26f7:cb11::/42", "20940"}, + {"2c0f:efe8::/32", "327795"}, + {"2001:550:1e02::/34", "174"}, + {"2001:df0:5dc0::/48", "149324"}, + {"240a:a195::/32", "143055"}, + {"2001:b88::/33", "33915"}, + {"2408:8256:3360::/43", "17623"}, + {"2408:8656:30fc::/46", "17623"}, + {"2600:6c3a:77::/44", "20115"}, + {"2800:160:1add::/42", "14259"}, + {"2804:102c::/32", "263623"}, + {"2a10:cc42:1790::/46", "20473"}, + {"2408:8956:d640::/40", "17622"}, + {"240a:ac0b::/32", "145733"}, + {"2600:1008:a020::/40", "22394"}, + {"2001:559:8105::/48", "7016"}, + {"2407:4240::/46", "136678"}, + {"2409:8008::/40", "24547"}, + {"2602:805:6000::/48", "36127"}, + {"2a07:e880::/29", "202333"}, + {"2c0f:fbf0:20::/28", "32653"}, + {"2400:1a00:b031::/41", "17501"}, + {"240e:44d:4580::/41", "4134"}, + {"2600:380:9000::/38", "20057"}, + {"2605:e340::/40", "8036"}, + {"2a01:bc80:1::/44", "32590"}, + {"2a05:a884:de10::/48", "7473"}, + {"2404:4f80:18::/42", "58715"}, + {"2804:3f10:4203::/35", "262566"}, + {"2a00:ae00::/29", "34263"}, + {"2a02:5740:9::/48", "58065"}, + {"2001:df6:5180::/48", "38215"}, + {"2a01:8840:8e::/43", "12041"}, + {"2400:9380:9100::/47", "4809"}, + {"2800:bf0:80c0::/47", "52257"}, + {"2a03:9240::/32", "202632"}, + {"2a0a:d6c0:eff4::/48", "211454"}, + {"2001:db0:4800::/37", "17766"}, + {"2403:4800:1200::/32", "9443"}, + {"2407:e80:2::/47", "58689"}, + {"2409:8087:1400::/38", "56044"}, + {"2604:cb00::/32", "7029"}, + {"2801:1b:8800::/48", "19429"}, + {"2a04:b800::/29", "204348"}, + {"2001:559:86e6::/47", "7725"}, + {"2001:fb0:1078::/48", "55844"}, + {"2602:fc09:806::/43", "13780"}, + {"2804:7f1c::/48", "271667"}, + {"240a:a646::/32", "144256"}, + {"240a:af11::/32", "146507"}, + {"2620:eb:8000::/48", "35873"}, + {"2804:14d:a000::/41", "28573"}, + {"2804:4838::/32", "267105"}, + {"2806:2f0:8103::/42", "17072"}, + {"2603:4:1300::/48", "44273"}, + {"2803:840:ba00::/48", "263793"}, + {"2a01:c50f:d400::/40", "12479"}, + {"2c0f:f230::/32", "328193"}, + {"2001:559:871a::/48", "21508"}, + {"2400:1a00:bde1::/33", "17501"}, + {"2408:840d:1c00::/42", "17621"}, + {"2604:1180::/32", "25625"}, + {"2a02:26f7:c981::/46", "20940"}, + {"2a02:26f7:cb01::/46", "20940"}, + {"2001:44c8:3100::/40", "45781"}, + {"2606:2800:4a5c::/46", "15133"}, + {"2001:559:7ca::/48", "7922"}, + {"2400:1a00:8001::/46", "17501"}, + {"2405:7f00:a2a0::/37", "133414"}, + {"240a:a3f4::/32", "143662"}, + {"240e:438:1c40::/38", "4134"}, + {"2800:160:1807::/43", "14259"}, + {"2801:0:260::/48", "52427"}, + {"2a05:b0c6:300::/40", "8100"}, + {"2a05:dfc7:5::/48", "204136"}, + {"2001:559:830b::/48", "7922"}, + {"2405:9800:b418::/48", "133481"}, + {"2620:f6:8000::/48", "35922"}, + {"2804:3fa8::/32", "265905"}, + {"2a01:c50f:4580::/41", "12479"}, + {"2001:559:27c::/47", "33652"}, + {"2001:559:846c::/48", "20214"}, + {"2605:6c80:8000::/33", "40676"}, + {"2a02:26f7:c045::/46", "20940"}, + {"2402:b140::/32", "135425"}, + {"240e:438:1e40::/34", "4134"}, + {"2800:b40:201::/46", "262220"}, + {"2804:88:8002::/35", "28135"}, + {"2a03:11c0::/32", "199657"}, + {"2001:559:3ec::/48", "33652"}, + {"2401:d800:2aa0::/41", "7552"}, + {"2620:12c:b052::/48", "13448"}, + {"2a04:180::/29", "174"}, + {"2001:559:110::/48", "33657"}, + {"2409:8959:cb54::/37", "56040"}, + {"240a:a6c0::/32", "144378"}, + {"2a00:11c0:77::/48", "42360"}, + {"2a00:8860:700::/40", "210266"}, + {"2a0f:f041::/32", "205715"}, + {"2001:2000:6100::/32", "1299"}, + {"2401:d800:f4d0::/42", "7552"}, + {"2602:fd2c::/48", "398499"}, + {"2a04:5781:2000::/40", "12337"}, + {"2a0a:d6c0:226::/48", "212014"}, + {"2001:559:c0c2::/45", "33657"}, + {"2001:4870::/32", "3549"}, + {"240e:108:30::/41", "4134"}, + {"2800:bf0:8000::/44", "52257"}, + {"2804:84fc:1500::/36", "272550"}, + {"2806:2f0:9343::/42", "17072"}, + {"2a00:1e20::/29", "34661"}, + {"2a02:26f0:b::/43", "20940"}, + {"2a02:26f7:dcc0::/48", "36183"}, + {"2a0d:d040::/29", "197036"}, + {"2001:5a0::/34", "6453"}, + {"2001:67c:266c::/48", "25417"}, + {"2404:bf40:8381::/41", "139084"}, + {"240a:a1fc::/32", "143158"}, + {"240a:a584::/32", "144062"}, + {"2600:6c10:f282::/45", "20115"}, + {"2607:3f80::/32", "32248"}, + {"2620:13a:3000::/44", "14414"}, + {"2001:43f8:11f1::/48", "37282"}, + {"2602:fcd5:2::/47", "399122"}, + {"2a03:90c0:10::/39", "199524"}, + {"2001:559:82fb::/48", "7016"}, + {"2405:fd80:1001::/40", "135391"}, + {"2804:77b0::/32", "271193"}, + {"2a0e:97c0:580::/44", "210662"}, + {"2001:1248:988f::/43", "11172"}, + {"2602:807:6004::/48", "53978"}, + {"2a02:166b::/32", "51088"}, + {"2a03:54c0:1e52::/48", "51762"}, + {"2001:4878:c102::/47", "12222"}, + {"2404:bf40:a141::/48", "7545"}, + {"2409:8c85:aa0c::/48", "56042"}, + {"2602:ff96:1a::/48", "40676"}, + {"2604:a00:2::/43", "19318"}, + {"2800:160:1a8d::/43", "14259"}, + {"2804:5824::/32", "268109"}, + {"2a02:26f7:d181::/46", "20940"}, + {"2a03:5880:105::/32", "12757"}, + {"2a05:6c80::/29", "43366"}, + {"2001:559:c313::/48", "33652"}, + {"2001:fd8:32c0::/42", "132199"}, + {"2409:8019::/34", "134810"}, + {"240a:a75e::/32", "144536"}, + {"2a01:4207::/48", "48149"}, + {"2a02:26f7:e304::/48", "36183"}, + {"2406:3001:22:19::/47", "4657"}, + {"2408:8957:a00::/40", "17622"}, + {"2a07:f840::/29", "201116"}, + {"2600:7800::/28", "22646"}, + {"2800:160:1df7::/44", "14259"}, + {"2803:2a0::/32", "266849"}, + {"2a02:cb43:8006::/48", "20546"}, + {"2a03:b480::/32", "24993"}, + {"2409:803c:2100::/37", "9808"}, + {"2a02:27f0::/32", "4455"}, + {"2001:67c:1b38::/48", "203688"}, + {"2001:13d2:380e::/47", "7303"}, + {"2402:800:72d0::/42", "7552"}, + {"2600:1012:b000::/42", "6167"}, + {"2600:1417:1d::/48", "24319"}, + {"2a02:868:4012::/36", "13247"}, + {"2a02:26f7:ec5d::/42", "20940"}, + {"2001:438:70::/32", "6461"}, + {"2001:559:813a::/45", "7015"}, + {"2600:140f:b::/48", "9498"}, + {"2600:6c3a:72::/45", "20115"}, + {"2804:7598:c020::/34", "271057"}, + {"2806:230:400d::/48", "11888"}, + {"2001:df0:8800::/48", "23901"}, + {"2408:8256:2d7c::/46", "17623"}, + {"2408:8406:8400::/39", "4808"}, + {"2001:480:61::/40", "668"}, + {"2001:dcc:700::/48", "23600"}, + {"2001:1248:98dc::/46", "11172"}, + {"2401:3400:9000::/33", "45352"}, + {"2607:2280::/32", "14487"}, + {"2803:65e0:30::/32", "270034"}, + {"2804:3e10::/32", "266571"}, + {"2a02:6160::/32", "47272"}, + {"240a:accc::/32", "145926"}, + {"2a02:21b2:ac18::/48", "57370"}, + {"2a02:f380::/29", "199516"}, + {"240e:983:1e09::/40", "4134"}, + {"2804:4284:4000::/38", "267505"}, + {"2a04:4e40:6210::/44", "54113"}, + {"2a0d:9bc0::/32", "25540"}, + {"2402:800:c000::/34", "7552"}, + {"2610:88:3::/38", "14037"}, + {"2806:2f0:43e3::/37", "17072"}, + {"2a03:2880:f24d::/43", "32934"}, + {"2a0d:20c0::/29", "200689"}, + {"2401:d800:f8f0::/39", "7552"}, + {"240a:a148::/32", "142978"}, + {"240a:a984::/32", "145086"}, + {"240a:ab8c::/32", "145606"}, + {"2a03:2880:f244::/47", "32934"}, + {"240e:979:4e00::/40", "134770"}, + {"2a02:26f7:c980::/48", "36183"}, + {"2001:559:537::/48", "7016"}, + {"2404:7180:f010::/48", "23848"}, + {"2606:ae00:8800::/35", "7287"}, + {"2804:6cac::/32", "270484"}, + {"2806:230:3002::/48", "265594"}, + {"2a00:2380::/25", "2856"}, + {"2a03:2880:f146::/44", "32934"}, + {"2402:b400:4090::/41", "45960"}, + {"2602:107:110::/48", "10796"}, + {"2620:1d5:c9a::/38", "14773"}, + {"2001:67c:16c0::/48", "5588"}, + {"2801:144::/42", "264835"}, + {"2a02:2090:e400::/48", "48287"}, + {"2a02:6900:8810::/48", "7160"}, + {"2a0d:5f80::/29", "200899"}, + {"2400:9380:9bc0::/44", "136167"}, + {"2401:8040::/32", "136127"}, + {"240a:a4d8::/32", "143890"}, + {"2804:6df8::/32", "270567"}, + {"2a0e:b107:9f4::/48", "20473"}, + {"2604:8c00::/32", "4474"}, + {"2606:4700:9c60::/44", "13335"}, + {"2620:90:8000::/48", "23371"}, + {"2a09:bac0:14::/46", "13335"}, + {"2001:67c:2c78::/48", "9201"}, + {"2604:fb80:901::/37", "15128"}, + {"2001:559:867d::/48", "33652"}, + {"2001:559:c365::/48", "33657"}, + {"2001:df0:9080::/48", "63769"}, + {"2620:171:5d::/48", "42"}, + {"2800:160:1abf::/41", "14259"}, + {"2801:18:e800::/48", "19429"}, + {"2804:5b24::/32", "268821"}, + {"2a00:8100::/32", "9125"}, + {"2a01:a620:9::/48", "56911"}, + {"2a10:a500::/42", "205920"}, + {"2404:2280:124::/47", "24429"}, + {"2801:13:a800::/48", "271809"}, + {"2803:4fe0::/32", "271775"}, + {"2a00:6fa0:3200::/32", "49206"}, + {"2001:250:6002::/45", "23910"}, + {"2401:d800:5e00::/42", "7552"}, + {"2408:8459:2050::/39", "17816"}, + {"240a:a7a4::/32", "144606"}, + {"2a00:cee6:dcd::/32", "60268"}, + {"2a03:25e0:200::/40", "16376"}, + {"2001:5b0:4100::/36", "6621"}, + {"240a:ae98::/32", "146386"}, + {"2803:e0e0::/47", "269852"}, + {"2a05:d050:c040::/44", "16509"}, + {"2001:19e8:d1::/44", "2576"}, + {"2a04:49c0::/32", "60471"}, + {"240e:44d:3a00::/41", "140345"}, + {"2801:80:3d0::/48", "263076"}, + {"2804:17ac::/32", "263164"}, + {"2a02:660::/32", "9125"}, + {"2a02:26f7:f74d::/46", "20940"}, + {"2001:559:125::/48", "7725"}, + {"2400:1f00:b700::/48", "45769"}, + {"2804:2f10::/32", "264869"}, + {"2804:7838::/32", "271228"}, + {"2804:83b0::/32", "272212"}, + {"2a02:26f7:c400::/48", "36183"}, + {"2a02:2808:2601::/48", "35165"}, + {"2a05:41c0::/29", "15600"}, + {"2a10:eb80::/29", "211288"}, + {"2001:550:2608::/36", "174"}, + {"2001:559:c23f::/48", "33662"}, + {"2409:8004:2100::/36", "24547"}, + {"2603:40ff:2000::/36", "10578"}, + {"2605:640f:18fc::/48", "53667"}, + {"2406:5800:800::/38", "45577"}, + {"2602:802:4000::/48", "14038"}, + {"2605:c40::/32", "62668"}, + {"2804:6bf8::/32", "270437"}, + {"2a0c:f000:2000::/48", "205265"}, + {"2403:9f00::/32", "17420"}, + {"240e:44d:7940::/42", "140355"}, + {"2620:0:2d0::/48", "40528"}, + {"2804:5550:200::/33", "263067"}, + {"2001:c38:90a0::/46", "135566"}, + {"2400:fc00:4a10::/42", "45773"}, + {"240e:44d:2a00::/41", "140345"}, + {"2607:ffa8::/32", "21858"}, + {"2a02:1668::/32", "51088"}, + {"2a02:4a40:101::/48", "49528"}, + {"2001:250:4835::/48", "24360"}, + {"2001:2002::/32", "3301"}, + {"2600:6c38:448::/45", "20115"}, + {"2602:fc66::/36", "399771"}, + {"2606:f900:a402::/38", "812"}, + {"2406:bf00:1::/48", "45671"}, + {"240e:96b:600c::/46", "140368"}, + {"2610:20:9147::/48", "3477"}, + {"2804:1d60::/32", "264365"}, + {"2a00:47c0:311::/48", "27435"}, + {"2a02:26f7:fc01::/46", "20940"}, + {"2402:800:589b::/41", "7552"}, + {"2806:230:4040::/48", "265594"}, + {"2a00:1d58:f815::/44", "47524"}, + {"2a02:2230:3200::/39", "25467"}, + {"2a0d:d740:105::/48", "210036"}, + {"2001:559:2dc::/47", "33651"}, + {"2408:8256:3d8b::/48", "17816"}, + {"2408:8957:cf40::/40", "17816"}, + {"2409:8949:9f00::/30", "24445"}, + {"2409:8a04:c300::/34", "24547"}, + {"240a:a1d5::/32", "143119"}, + {"2602:fc9c::/36", "399603"}, + {"2620:fb::/48", "22651"}, + {"2804:ef4:6002::/37", "28642"}, + {"2a02:26f7:c4c4::/48", "36183"}, + {"2602:ffd1:1::/48", "29802"}, + {"240a:a09e::/32", "142808"}, + {"2605:4b40::/32", "26425"}, + {"2800:800:540::/43", "26611"}, + {"2804:4f8:4f01::/34", "28263"}, + {"2a02:26f7:d8c5::/46", "20940"}, + {"2a02:26f7:fb08::/48", "36183"}, + {"2001:559:454::/48", "7922"}, + {"2409:8002:2800::/39", "38019"}, + {"2001:1248:9a4c::/43", "11172"}, + {"2603:fcd0::/26", "397165"}, + {"2804:37f0:a100::/36", "266445"}, + {"2a07:e0c0::/30", "213206"}, + {"2401:fd80:1fd::/48", "43519"}, + {"2607:f148:6002::/36", "11734"}, + {"2804:2fec::/32", "52991"}, + {"2804:6e48::/32", "270586"}, + {"2a03:24c0:ffff::/48", "201342"}, + {"2402:ef2f:13::/48", "7633"}, + {"2803:6ce0:1cb0::/41", "269909"}, + {"240a:a925::/32", "144991"}, + {"240e:1::/37", "17897"}, + {"2600:1418:c001::/31", "20940"}, + {"2800:e0::/28", "13489"}, + {"2803:6c0::/32", "265639"}, + {"2a02:5d8::/32", "8596"}, + {"2a03:8600::/48", "3399"}, + {"2c0f:f3c8::/43", "328112"}, + {"2001:df0:30e::/48", "17547"}, + {"2600:c13::/32", "13791"}, + {"2800:320:9800::/48", "27882"}, + {"2804:4870:4800::/34", "267121"}, + {"2804:7a60:103::/40", "271367"}, + {"2a0e:5040::/29", "58280"}, + {"2600:8807:c782::/41", "22773"}, + {"2605:4840:2::/47", "63473"}, + {"2804:278c::/32", "263908"}, + {"2804:2a5c:c000::/34", "264071"}, + {"2804:2dbc::/32", "265300"}, + {"2804:7ee4::/32", "271653"}, + {"2a00:f30:10::/48", "12418"}, + {"2a02:26f7:ccc4::/48", "36183"}, + {"2001:550:6a03::/37", "174"}, + {"2001:4878:8204::/48", "12222"}, + {"2600:1488:6151::/42", "20940"}, + {"2001:ff0::/32", "9824"}, + {"2409:8c3c::/36", "24444"}, + {"240e:105:f600::/30", "4134"}, + {"2600:c02::/35", "12182"}, + {"2607:fdf0:5f68::/40", "8008"}, + {"2804:1168:2000::/32", "52904"}, + {"2806:266:400::/41", "27672"}, + {"2a0e:cd01:2100::/36", "23031"}, + {"2a11:cc80::/29", "59437"}, + {"2001:678:620::/48", "204388"}, + {"2001:1260:200::/42", "28536"}, + {"2001:42a8:101::/32", "36937"}, + {"2620:0:f0::/48", "26523"}, + {"2804:620::/32", "16735"}, + {"2804:4c54::/32", "267364"}, + {"2a02:26f7:de08::/48", "36183"}, + {"2a02:2e02:1d70::/40", "12479"}, + {"2001:1400:ffee::/48", "9201"}, + {"2001:4ba7::/48", "34936"}, + {"2408:8256:378b::/48", "17816"}, + {"240e:3b1:2200::/37", "136198"}, + {"2a03:aa40::/34", "12843"}, + {"2404:4600:7::/48", "45991"}, + {"2404:4a00:5542:3004::/48", "55423"}, + {"240e:967:e200::/39", "133774"}, + {"2a0e:8f02:2142::/45", "211414"}, + {"2804:72c0::/32", "270873"}, + {"2a0f:8642:b00c::/31", "25682"}, + {"2a11:5800::/29", "204790"}, + {"2001:67c:11bc::/48", "199462"}, + {"2a01:ce8c:9000::/33", "51964"}, + {"2a02:26f7:e7::/48", "20940"}, + {"2001:559:735::/48", "7015"}, + {"2001:df0:2e8::/48", "45896"}, + {"2406:f200::/32", "17534"}, + {"2409:8d80:7000::/32", "9808"}, + {"240a:af94::/32", "146638"}, + {"2804:3c6c::/32", "266210"}, + {"2a02:2c60::/32", "9063"}, + {"2a0d:f600::/29", "202277"}, + {"2001:1388:7bb1::/32", "6147"}, + {"2409:8c85:2020::/47", "9808"}, + {"240a:a047::/32", "142721"}, + {"2600:1404:27::/44", "20940"}, + {"240e:980:4800::/40", "134769"}, + {"2607:f5b0::/32", "19148"}, + {"2800:1e0:1100::/40", "7195"}, + {"2001:67c:1950::/48", "29037"}, + {"2001:4b20:100:57a::/61", "34288"}, + {"2401:d800:610::/42", "7552"}, + {"2a02:26f7:db89::/46", "20940"}, + {"2a02:26f7:e309::/42", "20940"}, + {"2001:520:105a::/48", "8103"}, + {"2408:8459:ce30::/41", "17622"}, + {"2408:8957:2140::/40", "17816"}, + {"2409:8a20:c800::/34", "56046"}, + {"240a:a001::/32", "142651"}, + {"2600:1406:4c00:1::/48", "20940"}, + {"2603:c000::/35", "31898"}, + {"2001:559:40::/48", "7922"}, + {"2001:559:1fb::/48", "33652"}, + {"2001:67c:1928::/48", "12843"}, + {"2402:e380:30d::/48", "138558"}, + {"2602:fdd7::/47", "2635"}, + {"2803:9800:5080::/39", "11664"}, + {"2402:800:b272::/40", "7552"}, + {"2402:2f80::/48", "36351"}, + {"2a01:238::/39", "6724"}, + {"2a0f:9240::/35", "49434"}, + {"2a12:9f40::/29", "400522"}, + {"240e:108:1185::/43", "4134"}, + {"240e:938:a10::/32", "4134"}, + {"2600:380:9800::/37", "20057"}, + {"2804:6240::/32", "269286"}, + {"2a02:2e02:2040::/43", "12479"}, + {"2a04:4e42:28::/45", "54113"}, + {"2a10:b680::/32", "44486"}, + {"2603:fe40::/26", "397165"}, + {"2620:13c:5000::/48", "14856"}, + {"2804:22c:f402::/38", "22689"}, + {"2804:3138:c000::/35", "265000"}, + {"2001:e60:d500::/42", "4766"}, + {"2409:8754:3e00::/32", "9808"}, + {"240a:a1aa::/32", "143076"}, + {"2a00:ac20::/32", "199581"}, + {"2a06:d040::/29", "50785"}, + {"2001:67c:664::/48", "42528"}, + {"2001:da8:1046::/36", "23910"}, + {"2402:d000::/39", "9329"}, + {"2408:8719::/30", "4837"}, + {"240a:ac3f::/32", "145785"}, + {"240c:c803::/32", "24362"}, + {"2605:a404:173::/45", "33363"}, + {"2804:c90:2000::/32", "28198"}, + {"2001:678:408::/48", "47451"}, + {"2400:d580:b0::/47", "131587"}, + {"2409:8055:61::/45", "56040"}, + {"2602:fd51::/36", "13895"}, + {"2001:559:80bb::/48", "19704"}, + {"2001:67c:550::/48", "202068"}, + {"2001:df6:4e80::/48", "141892"}, + {"2001:fd8:f180::/42", "132199"}, + {"2804:1100:3000::/32", "53178"}, + {"2001:506:100::/48", "20115"}, + {"2a0b:8fc1:2000::/32", "49825"}, + {"2607:f368:3220::/48", "46846"}, + {"2001:44b8:309f::/48", "4739"}, + {"2001:550:9c04::/47", "174"}, + {"2001:559:8258::/48", "7015"}, + {"2405:7e00:1000::/36", "17408"}, + {"2804:56dc::/32", "268028"}, + {"2a03:2680::/32", "39444"}, + {"2408:8459:b810::/42", "17623"}, + {"2a01:d8:8::/48", "43489"}, + {"2001:8f0::/30", "3329"}, + {"2800:160:18ed::/39", "14259"}, + {"2c0f:e848::/32", "328633"}, + {"2402:1b80:3100::/32", "63956"}, + {"2600:1419:a401::/36", "20940"}, + {"2607:fd48:106::/44", "13536"}, + {"2a0b:3c80::/29", "16097"}, + {"2a0c:2640::/32", "201750"}, + {"2001:678:b08::/48", "48749"}, + {"2401:1380::/32", "58411"}, + {"2804:2bb8::/32", "265171"}, + {"2a12:9940::/29", "49910"}, + {"2001:da8:b2::/48", "23910"}, + {"2400:dc00:c000::/46", "131111"}, + {"2803:6940:2000::/32", "61512"}, + {"2804:3180:301::/32", "265019"}, + {"2a02:188:1004::/48", "5491"}, + {"2409:804f:2100::/35", "9808"}, + {"2409:8b04::/31", "24547"}, + {"240a:a6c9::/32", "144387"}, + {"2a00:1e10::/29", "12494"}, + {"2a0e:aa06:440::/48", "135671"}, + {"2001:67c:1260::/48", "50398"}, + {"2408:8459:4250::/37", "17816"}, + {"2a02:6c60::/32", "49223"}, + {"2001:559:46c::/47", "7922"}, + {"2403:b840::/32", "138336"}, + {"2803:f7e0:2000::/43", "271773"}, + {"2a07:1b80::/40", "42473"}, + {"2a11:60c0:1::/48", "212217"}, + {"2408:8459:1610::/41", "17622"}, + {"2600:1005:b000::/41", "6167"}, + {"2600:1017:b400::/42", "22394"}, + {"2a02:26f7:f8c8::/48", "36183"}, + {"2401:d800:dbd0::/37", "7552"}, + {"2a0d:c740:3c::/48", "197226"}, + {"2a0f:9400:771d::/48", "53356"}, + {"2408:8956:cf40::/40", "17816"}, + {"240a:a31e::/32", "143448"}, + {"240a:a727::/32", "144481"}, + {"2600:2b00::/28", "6181"}, + {"2001:678:294::/48", "2613"}, + {"2001:67c:13b0::/48", "34953"}, + {"2620:11c:1001::/48", "46764"}, + {"2a03:f80:385::/48", "25467"}, + {"2a0b:2d40:bac4::/33", "209135"}, + {"2c0f:f3c8:11::/42", "328112"}, + {"2400:62a0::/32", "149644"}, + {"2403:3140::/32", "23910"}, + {"240a:a1c6::/32", "143104"}, + {"240a:a204::/32", "143166"}, + {"240a:a2b6::/32", "143344"}, + {"240a:acfc::/32", "145974"}, + {"2803:720::/32", "52317"}, + {"2a0a:c800::/30", "39798"}, + {"2a0b:c306::/32", "9119"}, + {"2001:c20:48c8::/48", "9255"}, + {"2001:d28::/32", "9621"}, + {"2600:1406:5001::/37", "20940"}, + {"2804:37c::/32", "52981"}, + {"2804:2cac:1112::/32", "265234"}, + {"2001:a98:8001::/33", "8517"}, + {"2804:1038::/32", "263625"}, + {"2a02:bc8:38::/29", "8641"}, + {"2001:da8:b80f::/43", "23910"}, + {"2406:2000:ef66::/48", "10310"}, + {"2409:804d:100::/36", "9808"}, + {"2607:f428:9112::/42", "20115"}, + {"2804:18:6040::/44", "10429"}, + {"2001:559:8796::/47", "20214"}, + {"2405:201:5a00::/37", "55836"}, + {"240c:c000::/32", "23910"}, + {"2a0b:4d07:101::/46", "44239"}, + {"2001:470:4f::/48", "271915"}, + {"2407:ba80::/32", "45062"}, + {"2607:f4e8:412::/36", "22822"}, + {"2a00:8a80::/29", "29119"}, + {"2a07:b0c0::/29", "202617"}, + {"2001:250:203b::/40", "23910"}, + {"2001:559:8709::/48", "33668"}, + {"2001:1a68:34::/48", "24723"}, + {"2603:c010:6000::/36", "31898"}, + {"2803:fb00::/32", "262248"}, + {"2a0a:7107:1af4::/48", "206986"}, + {"2a0d:4940::/29", "197706"}, + {"2001:559:81c3::/48", "33491"}, + {"2404:8d02:28c6::/39", "9587"}, + {"2a00:47c0:411::/48", "44568"}, + {"2001:559:8392::/48", "33651"}, + {"2001:67c:2bb4::/48", "207537"}, + {"2001:4878:2055::/48", "35994"}, + {"2408:8957:dac0::/39", "17816"}, + {"2804:3d98::/32", "266541"}, + {"2a02:2578:1301::/45", "51375"}, + {"2001:559:70e::/48", "7922"}, + {"2001:1248:9962::/44", "11172"}, + {"2408:8456:e240::/37", "17816"}, + {"2620:11a:a031::/48", "36040"}, + {"2a02:26f0:c001::/40", "20940"}, + {"2001:678:730::/48", "47869"}, + {"2001:1248:5625::/46", "11172"}, + {"2402:1500::/33", "4819"}, + {"2406:5c0::/32", "140395"}, + {"2801:150::/32", "3132"}, + {"2001:b400:f420::/22", "3462"}, + {"2402:7500:5ce::/42", "24158"}, + {"2403:c00:c00::/46", "17488"}, + {"240a:a144::/32", "142974"}, + {"2604:a040::/32", "38195"}, + {"2001:250:342b::/48", "138393"}, + {"2001:579:4f03::/44", "22773"}, + {"2600:1417:5001::/34", "20940"}, + {"2620:100:a001::/46", "19750"}, + {"2a02:26f7:f2c8::/48", "36183"}, + {"2001:3c8:d109::/48", "138547"}, + {"2402:ef2d:b::/30", "7633"}, + {"2406:6e00:109::/32", "17457"}, + {"2602:804:b000::/47", "397824"}, + {"2603:c002:9310::/37", "31898"}, + {"2605:dd40:8f10::/41", "398549"}, + {"2804:85bc:8000::/36", "272597"}, + {"2806:230:2011::/48", "11888"}, + {"2a09:bac0:268::/48", "13335"}, + {"2600:6c38:165::/44", "20115"}, + {"2001:41d0:fc00::/38", "35540"}, + {"2407:2080::/32", "3064"}, + {"2620:a3::/48", "116"}, + {"2804:7d50::/32", "271553"}, + {"2a0c:e440::/29", "200497"}, + {"2001:67c:280c::/48", "57839"}, + {"2001:da0::/32", "4718"}, + {"2402:f800:df01::/40", "7602"}, + {"2604:8200:98::/48", "23089"}, + {"2606:ec00:1000::/36", "40328"}, + {"2804:45c::/32", "28652"}, + {"2804:375c::/32", "266406"}, + {"2804:3b8c::/32", "266156"}, + {"2804:5210::/32", "268492"}, + {"2401:d800:bd40::/42", "7552"}, + {"2404:bf40:e800::/48", "7545"}, + {"240a:a56c::/32", "144038"}, + {"2620:41::/47", "11017"}, + {"2804:488c:8000::/33", "267128"}, + {"2804:5d28::/32", "268954"}, + {"2a03:9040::/32", "61281"}, + {"2001:559:35c::/48", "33491"}, + {"2001:1248:5b23::/41", "11172"}, + {"2408:8456:9610::/42", "134543"}, + {"240a:aa3d::/32", "145271"}, + {"2602:ffc5:400::/40", "398395"}, + {"2a02:118:2::/48", "43811"}, + {"2804:b38::/32", "52758"}, + {"2804:1dcc::/32", "264394"}, + {"2806:2f0:2483::/43", "22884"}, + {"2a0f:5900::/29", "62412"}, + {"2406:1400:c174::/48", "24342"}, + {"2c0f:1100::/32", "328255"}, + {"2804:1c00::/48", "28274"}, + {"2001:559:80c5::/46", "7922"}, + {"2a02:25e0:7700::/40", "41691"}, + {"2a07:e00::/48", "210083"}, + {"2a00:11e0::/32", "48072"}, + {"2a02:910::/32", "43070"}, + {"2a02:5320:f00::/40", "12189"}, + {"2803:53e0:1003::/45", "52468"}, + {"2804:859c::/32", "272590"}, + {"2a0f:8643:b00b::/48", "212149"}, + {"2001:a88::/32", "8426"}, + {"2401:5400:2010::/33", "4434"}, + {"2409:8959:cf44::/43", "9808"}, + {"240e:108:93::/48", "134768"}, + {"2001:3c8:9009::/48", "9464"}, + {"2001:559:868e::/48", "33490"}, + {"2a09:ca00:1::/29", "49434"}, + {"2001:ac0::/34", "8903"}, + {"2804:72ec::/32", "270884"}, + {"2001:559:40d::/48", "33287"}, + {"2804:65e4::/32", "269521"}, + {"2a0d:5280:f002::/47", "205989"}, + {"2607:8900::/32", "27298"}, + {"2804:6fc:cc01::/38", "28158"}, + {"2804:2910::/48", "263995"}, + {"2a02:7680::/32", "57119"}, + {"2a05:7cc0::/32", "61053"}, + {"2001:4888:8057::/44", "6167"}, + {"2406:7ec0:9::/33", "38074"}, + {"2620:137:d000:1::/64", "394161"}, + {"2803:9800:98d0::/39", "11664"}, + {"2a02:26f7:e04c::/48", "36183"}, + {"2804:1524::/32", "263373"}, + {"2a02:26f0:7901::/38", "20940"}, + {"2a0a:e805:300::/40", "64476"}, + {"2604:87c0::/32", "32267"}, + {"2620:127:7001::/48", "63016"}, + {"2804:3e60:610::/32", "266592"}, + {"2804:6738::/32", "269614"}, + {"2a09:6c80::/32", "43845"}, + {"2404:f4c0:f90a::/48", "139833"}, + {"2408:8456:e810::/42", "134543"}, + {"2a02:cc4:2f0::/44", "8211"}, + {"2001:4878:2321::/45", "12222"}, + {"2600:370f:3648::/42", "32261"}, + {"2a02:2a38:38::/32", "58073"}, + {"2001:559:315::/48", "33489"}, + {"240a:a73a::/32", "144500"}, + {"2600:1406:3a01::/37", "20940"}, + {"2606:97c0::/32", "7018"}, + {"2a02:2808:4101::/48", "196953"}, + {"2a03:28a0::/46", "201650"}, + {"2404:bc0:4000::/43", "137735"}, + {"240e:67c:8400::/38", "140329"}, + {"2602:808:3000::/44", "398883"}, + {"2a02:26f7:df49::/46", "20940"}, + {"2001:44c8:41c0::/42", "45430"}, + {"2408:84f3:3640::/44", "17623"}, + {"2600:1406:3c::/47", "20940"}, + {"2409:8062:2c00::/35", "9808"}, + {"2620:1e:e000::/48", "46701"}, + {"2a02:26f7:cbc0::/48", "36183"}, + {"2401:d800:d50::/42", "7552"}, + {"2620:5c:6000::/48", "27623"}, + {"2001:460:74::/46", "3561"}, + {"2001:503:f3da::/48", "7342"}, + {"2001:1a11:10f::/48", "8781"}, + {"2402:b180:9000::/36", "49544"}, + {"2403:4f80::/32", "131270"}, + {"2408:8256:318d::/43", "17623"}, + {"2408:8459:3610::/41", "17623"}, + {"2408:8957:1100::/38", "17816"}, + {"2a03:5f00:10b::/36", "29644"}, + {"2a09:bac0:464::/48", "13335"}, + {"2a0e:1d80:2::/45", "9009"}, + {"2001:400:201:75::/43", "293"}, + {"2001:559:583::/48", "7015"}, + {"2806:230:3020::/48", "265594"}, + {"2a03:fdc0::/32", "8818"}, + {"2a04:ac40::/29", "60140"}, + {"2a09:6840::/29", "43619"}, + {"2a0b:f4c0::/39", "205100"}, + {"2001:559:85f7::/48", "7016"}, + {"2001:1248:a4c7::/43", "11172"}, + {"2401:c240:6100::/32", "132847"}, + {"240a:a995::/32", "145103"}, + {"2804:7dc::/32", "262329"}, + {"2804:7b74::/32", "271433"}, + {"2a02:e20::/29", "5603"}, + {"2402:6b00::/32", "18126"}, + {"2409:8020:1051::/42", "56046"}, + {"2606:ae00:b000::/39", "7287"}, + {"2606:af40::/32", "40405"}, + {"2804:3ed4:2::/32", "266623"}, + {"2a00:7aa0::/32", "41114"}, + {"2a06:1287:41::/34", "61138"}, + {"2001:559:3e2::/48", "7016"}, + {"2605:b100:f000::/36", "36522"}, + {"2620:4d:402a::/48", "395403"}, + {"2a00:d420::/29", "15600"}, + {"2a02:26f7:16::/48", "36183"}, + {"2a0c:c880::/29", "398465"}, + {"2602:fd50:1::/48", "207609"}, + {"2606:4300::/48", "55045"}, + {"2804:540c::/32", "268625"}, + {"2a00:4800:230::/39", "8717"}, + {"2a01:4a0:57::/35", "201011"}, + {"2a04:c600::/29", "49544"}, + {"2a0b:2c0::/32", "205831"}, + {"2a10:9200::/47", "212441"}, + {"2c0f:f750::/32", "327724"}, + {"2001:6d0:ffd4::/48", "43832"}, + {"2001:f10::/32", "17709"}, + {"2602:fbc7::/40", "400442"}, + {"2604:d600:6ab::/36", "32098"}, + {"2804:1784:ff82::/41", "263152"}, + {"2600:100f:b0d0::/44", "6167"}, + {"2800:440:c5::/48", "27738"}, + {"2804:5fdc::/32", "269128"}, + {"2a03:60c1::/29", "31251"}, + {"2a0a:ce04::/47", "9009"}, + {"2001:559:8370::/48", "7922"}, + {"2001:dce::/47", "23869"}, + {"240a:a7df::/32", "144665"}, + {"240a:ad15::/32", "145999"}, + {"240a:af9c::/32", "146646"}, + {"2600:100f:b0e0::/43", "22394"}, + {"2600:1405:9001::/34", "20940"}, + {"2603:f7f0::/20", "397165"}, + {"2603:fb70::/29", "397165"}, + {"2801:1b8::/45", "28000"}, + {"2804:22a0:500::/36", "264112"}, + {"2a03:9d40:1000::/38", "41095"}, + {"2a0d:6900::/29", "35916"}, + {"2a10:5680::/29", "399975"}, + {"240e:267:3400::/36", "4134"}, + {"2a12:e100:3::/48", "51847"}, + {"2402:8100:20d5::/46", "55644"}, + {"2403:1940:20::/48", "137935"}, + {"2408:8456:6e40::/39", "17816"}, + {"2803:4480:7000::/36", "263189"}, + {"2804:41a4::/32", "267447"}, + {"2a0b:4700::/29", "50628"}, + {"2001:559:c007::/48", "7015"}, + {"2001:44c8:b000::/33", "45430"}, + {"2800:160:12c4::/44", "14259"}, + {"2a0e:97c0:36f::/48", "211484"}, + {"2a0e:ac40::/29", "202966"}, + {"2001:67c:2ea8::/48", "209718"}, + {"2402:3d00::/32", "9597"}, + {"2620:10f:7002::/44", "54765"}, + {"2001:67c:240c::/48", "12552"}, + {"240a:adc6::/32", "146176"}, + {"2804:30b8:caef::/43", "28154"}, + {"2804:4ff4::/32", "268360"}, + {"2a02:fb8::/32", "56329"}, + {"2001:559:35f::/48", "33652"}, + {"2409:804c:3019::/42", "9808"}, + {"2804:2fa0::/32", "264903"}, + {"2a0e:bb80::/30", "58317"}, + {"2001:df7:3d00::/48", "4748"}, + {"2800:bf0:3445::/43", "27947"}, + {"2804:9c4:20::/44", "33182"}, + {"2804:dec::/32", "52527"}, + {"2804:3b6c:a008::/33", "266148"}, + {"2a00:1798::/32", "8426"}, + {"2a02:26f7:cec8::/47", "36183"}, + {"2a05:fb80::/29", "31317"}, + {"2606:b640::/32", "394195"}, + {"2a02:cb80:406a::/45", "43766"}, + {"2a06:e144::/30", "203503"}, + {"2806:230:5008::/48", "265594"}, + {"2a11:880::/29", "60987"}, + {"2001:40b8::/32", "13039"}, + {"2400:b080:452a::/32", "45296"}, + {"2409:8924:3300::/37", "56046"}, + {"2801:1e:4000::/45", "262266"}, + {"2804:4e44::/32", "268250"}, + {"2c0f:f698:f001::/46", "37693"}, + {"240e:678:c200::/39", "140329"}, + {"240e:966:1000::/37", "133775"}, + {"2604:8540:fd01::/48", "33353"}, + {"2a02:26f0:9a00::/48", "34164"}, + {"2804:29f4::/37", "264047"}, + {"2402:1c00:d000::/34", "23838"}, + {"2408:84f3:9e40::/34", "17816"}, + {"2804:1368:ffe::/32", "262808"}, + {"2804:6888::/32", "269699"}, + {"2409:8d71::/29", "9808"}, + {"240a:a3da::/32", "143636"}, + {"2600:1419:1b::/48", "4230"}, + {"2804:a18::/32", "263022"}, + {"2001:4c00:893c::/29", "34695"}, + {"2400:eac0::/32", "5580"}, + {"2402:800:5163::/43", "7552"}, + {"240e:267::/38", "140328"}, + {"2602:fe59:10::/48", "46432"}, + {"2a02:4c00::/39", "12676"}, + {"2a06:a403::/29", "203596"}, + {"2001:559:81b1::/48", "7015"}, + {"2001:559:83fa::/48", "7922"}, + {"2a10:30c0::/30", "208256"}, + {"2001:559:c364::/48", "7016"}, + {"2001:648:2e02::/41", "5408"}, + {"2404:a140:17::/48", "138915"}, + {"240a:a065::/32", "142751"}, + {"2806:10ae:3::/48", "8151"}, + {"2404:4600:8::/48", "10158"}, + {"2409:8062:3002::/48", "139080"}, + {"2804:474::/32", "52980"}, + {"2a06:fdc0::/32", "34971"}, + {"2406:3001:23:2::/30", "4657"}, + {"2607:f348:3596::/32", "13354"}, + {"2620:119:50e3::/44", "14413"}, + {"2804:51d8::/32", "268480"}, + {"2001:448a:6050::/42", "7713"}, + {"2a09:f00:a::/47", "1836"}, + {"2a02:2e02:1e80::/41", "12479"}, + {"2a0b:8bc7::/32", "34420"}, + {"2001:4da8:c020::/34", "28824"}, + {"2402:800:5b01::/44", "7552"}, + {"240a:a7ac::/32", "144614"}, + {"2605:8000::/42", "4261"}, + {"2a0b:aa80::/29", "42669"}, + {"2001:418:8007::/37", "2914"}, + {"2402:92c0::/48", "4847"}, + {"2804:85e0::/32", "272606"}, + {"2a0c:5f00::/32", "20647"}, + {"2001:df7:8d00::/48", "138318"}, + {"2403:8300:80bf::/48", "55423"}, + {"2403:8600:60f0::/47", "45820"}, + {"2620:106:c009::/48", "11039"}, + {"2804:7500::/32", "271017"}, + {"2a0c:b641:16f::/48", "211139"}, + {"2001:4830:c100::/48", "395213"}, + {"2600:140f:d::/46", "9498"}, + {"2603:4:1404::/48", "44273"}, + {"2804:5c40::/32", "268897"}, + {"2a02:7a00:7::/32", "39904"}, + {"240a:a3f6::/32", "143664"}, + {"240a:aef5::/32", "146479"}, + {"2606:e100::/32", "47100"}, + {"2804:43a0:5000::/32", "267580"}, + {"2a02:26f0:cb01::/37", "20940"}, + {"2403:e840::/33", "149175"}, + {"240e:fe:e000::/35", "136199"}, + {"2804:1b00::/32", "61703"}, + {"2806:2f0:8201::/46", "17072"}, + {"2a0f:9400:7820::/46", "147028"}, + {"240a:ab7e::/32", "145592"}, + {"2600:1017:9400::/44", "22394"}, + {"2803:ef20::/48", "266774"}, + {"2a02:e200::/30", "8339"}, + {"2001:470:22::/48", "217"}, + {"2001:678:36c::/48", "3320"}, + {"2408:8459:2030::/41", "17622"}, + {"2804:4f4::/32", "262767"}, + {"2804:8348::/32", "272188"}, + {"240e:3b8::/35", "134773"}, + {"2620:11e:3010::/44", "19541"}, + {"2804:27fc::/32", "263933"}, + {"2a01:a280:101::/46", "21314"}, + {"2803:c000::/32", "264628"}, + {"2804:2ab8:69::/32", "53180"}, + {"2804:5c28:100::/45", "268892"}, + {"2a02:2698:5c00::/38", "41754"}, + {"2a02:26f7:e748::/48", "36183"}, + {"2a0d:5d40::/32", "210094"}, + {"2a11:c900::/29", "199468"}, + {"2a03:f85:8::/48", "60729"}, + {"2001:fd8:1a1::/46", "4775"}, + {"240e:422::/32", "4134"}, + {"2620:119:76::/48", "36692"}, + {"2804:5368::/32", "268582"}, + {"2a06:6540:2003::/48", "397568"}, + {"2400:a980:5500::/36", "133111"}, + {"2804:150::/32", "10954"}, + {"2804:41d0:400::/34", "267458"}, + {"2804:4d3c:1e20::/34", "267420"}, + {"2a02:26f7:d78d::/42", "20940"}, + {"2402:5300:810::/35", "45903"}, + {"240a:a627::/32", "144225"}, + {"2a00:14a8::/32", "35548"}, + {"2a02:26f7:bdc8::/48", "36183"}, + {"2001:559:c0b8::/46", "20214"}, + {"2001:678:6d4::/48", "200019"}, + {"2001:1a11:dc::/42", "42298"}, + {"2001:448a:4030::/41", "7713"}, + {"2a02:26f7:ef81::/46", "20940"}, + {"2001:559:c0fb::/48", "33652"}, + {"2001:df1:c500::/48", "136311"}, + {"2600:1408:e801::/37", "20940"}, + {"2a03:b80::/32", "198859"}, + {"2a03:ca80::/31", "20860"}, + {"2a0c:9a40:808a::/48", "48646"}, + {"2400:9c00::/32", "38880"}, + {"2403:7f00::/34", "56300"}, + {"2409:8914:be00::/39", "56044"}, + {"240a:a901::/32", "144955"}, + {"2607:ffb0:5005::/34", "6327"}, + {"2610:a1:1011::/46", "397228"}, + {"2620:13f:7004::/46", "55706"}, + {"2800:800:a72::/40", "26611"}, + {"2804:14c:5b93::/42", "28573"}, + {"2a00:1c50:1::/48", "30811"}, + {"2405:6d00::/39", "17887"}, + {"240a:a54f::/32", "144009"}, + {"240a:a7ee::/32", "144680"}, + {"2804:1bd8:4600::/36", "28224"}, + {"2a02:26f7:f208::/48", "36183"}, + {"2a02:2e02:9060::/39", "12479"}, + {"2c0f:fc89:76::/44", "36992"}, + {"2001:559:4f8::/48", "33489"}, + {"2001:14b8::/29", "16086"}, + {"2409:8904:5db0::/38", "24547"}, + {"2803:eb40::/32", "264712"}, + {"2001:559:862f::/48", "7922"}, + {"2405:1c0:6571::/46", "55303"}, + {"2607:f110:37::/41", "21889"}, + {"2800:2000::/20", "7303"}, + {"2001:559:1e1::/48", "33657"}, + {"2001:df0:425::/48", "131475"}, + {"2600:141d:8001::/25", "20940"}, + {"2603:f7c0::/26", "397165"}, + {"2607:1a00::/32", "22653"}, + {"2607:ffc0::/32", "18705"}, + {"2804:dd0:1100::/32", "28639"}, + {"2804:82f4::/32", "272167"}, + {"2409:8087:6a47::/44", "9808"}, + {"2604:8000::/32", "21528"}, + {"2620:11c:a002::/47", "26414"}, + {"2803:2180:2::/47", "27941"}, + {"2a00:f680::/32", "50171"}, + {"2a02:26f7:ed44::/48", "36183"}, + {"2001:678:414::/48", "31317"}, + {"2409:805b:2906::/38", "56040"}, + {"2620:103:4000::/44", "13953"}, + {"2a02:26f7:dc00::/48", "36183"}, + {"2620:9f:a000::/48", "400179"}, + {"2a02:26f7:db40::/48", "36183"}, + {"2001:bb0::/29", "5466"}, + {"240a:a4c5::/32", "143871"}, + {"2605:8d80:700::/36", "812"}, + {"2800:260::/31", "19429"}, + {"2a06:c3c0:1::/48", "47596"}, + {"2a0e:b107:1340::/44", "57429"}, + {"240a:a634::/32", "144238"}, + {"240a:a84e::/32", "144776"}, + {"2620:8b:8000::/48", "23307"}, + {"2a02:26f7:f540::/48", "36183"}, + {"2a07:7cc0::/29", "61232"}, + {"2001:559:57b::/45", "7015"}, + {"2001:559:817f::/48", "33489"}, + {"2001:559:c288::/48", "33660"}, + {"2402:93c0:20::/48", "59073"}, + {"2606:45c0:9591::/33", "26073"}, + {"2620:11a:a02f::/43", "43515"}, + {"2804:57ac::/32", "268079"}, + {"2a00:1f50::/32", "196655"}, + {"2001:4980::/33", "7753"}, + {"2402:800:3ae0::/44", "7552"}, + {"240e:964:8800::/38", "133775"}, + {"2803:c80::/32", "263192"}, + {"2a02:d600::/29", "35739"}, + {"2620:1f:8006::/48", "10908"}, + {"2804:5364:e000::/35", "268581"}, + {"2a02:26f7:d548::/48", "36183"}, + {"2a02:26f7:e6c9::/46", "20940"}, + {"2a03:b0a0:1::/46", "39923"}, + {"2001:559:2ed::/48", "7015"}, + {"2600:1403:8c01::/35", "20940"}, + {"2607:f3a0:a002::/48", "399817"}, + {"2620:dc:4000::/40", "22023"}, + {"2804:7c94::/32", "271505"}, + {"2001:678:580::/48", "50873"}, + {"2408:80f1:50::/44", "17621"}, + {"240a:a398::/32", "143570"}, + {"240e:108:9a::/48", "58466"}, + {"2604:1300::/34", "3833"}, + {"2804:3f9c::/32", "265902"}, + {"2a06:a800::/29", "203818"}, + {"2001:559:c339::/48", "7016"}, + {"2803:a3a0::/32", "267750"}, + {"2804:2488:4000::/35", "264228"}, + {"2a00:8a60::/29", "47610"}, + {"2401:d800:94d0::/42", "7552"}, + {"240e:3be:1400::/38", "134773"}, + {"240e:980:9000::/40", "134420"}, + {"2001:558::/31", "7922"}, + {"2408:843c:1600::/34", "140716"}, + {"240a:a29d::/32", "143319"}, + {"2605:8940::/32", "393398"}, + {"2408:8456:ba40::/37", "17816"}, + {"2c0f:1c00::/32", "328802"}, + {"2001:559:c48b::/48", "7015"}, + {"2408:8024:8000::/30", "17621"}, + {"2600:1010:b0c0::/43", "6167"}, + {"2a09:97c0::/48", "34775"}, + {"2605:a401:8627::/41", "33363"}, + {"2a01:4fe0::/32", "57928"}, + {"2a01:c50e:5d00::/34", "12479"}, + {"2a03:402::/32", "29141"}, + {"2a0b:8f80:300::/48", "200746"}, + {"2a0f:ca80::/47", "208046"}, + {"2001:df6:a680::/48", "45679"}, + {"2403:a040:cdef::/48", "38047"}, + {"2406:e740::/48", "140766"}, + {"2801:80:2310::/48", "267130"}, + {"2804:13b0:1c30::/44", "263546"}, + {"2a02:ad80::/29", "15633"}, + {"2a03:db80:4404::/48", "5501"}, + {"2a0a:8bc0::/29", "206021"}, + {"240a:aebe::/32", "146424"}, + {"2806:230:4014::/48", "265594"}, + {"2a04:140::/29", "1764"}, + {"2401:b400:13::/48", "58536"}, + {"2402:d000:1069::/45", "9329"}, + {"240a:a869::/32", "144803"}, + {"2620:121:1000::/48", "394010"}, + {"2804:43d4::/32", "267593"}, + {"2a0b:95c0::/32", "205555"}, + {"2001:550:1703::/48", "397384"}, + {"2001:559:8307::/48", "33490"}, + {"240a:a5cf::/32", "144137"}, + {"2a01:3e0:ff72::/29", "6453"}, + {"2a02:26f7:dbc0::/48", "36183"}, + {"2001:da8:8f01::/40", "23910"}, + {"2605:5000::/32", "20283"}, + {"2001:1248:8438::/41", "11172"}, + {"240e:980:4900::/40", "23724"}, + {"2607:c300::/32", "22915"}, + {"2607:fb58:f003::/36", "36086"}, + {"2a00:1b50::/43", "8343"}, + {"2a05:ae40::/29", "41723"}, + {"2a07:41c0::/32", "62240"}, + {"2001:1838:100b::/40", "23352"}, + {"2401:1f00::/32", "9268"}, + {"2610:128:4300::/32", "11686"}, + {"2001:67c:25b0::/48", "29105"}, + {"2001:1a68:3::/48", "24723"}, + {"2600:1405:d001::/34", "20940"}, + {"2803:5200:2000::/36", "52439"}, + {"2804:7804::/32", "271215"}, + {"2001:559:84ae::/48", "33659"}, + {"2001:559:8532::/48", "7725"}, + {"2001:559:c306::/48", "33662"}, + {"2a02:26f7:e545::/46", "20940"}, + {"2a02:7820::/32", "201873"}, + {"2a04:4e42:7e::/40", "54113"}, + {"2408:8459:9030::/41", "17622"}, + {"2801:80:23d0::/48", "268203"}, + {"2803:b1a0::/32", "267704"}, + {"2804:40c4::/32", "265980"}, + {"2402:1680:a::/48", "7590"}, + {"2409::/48", "142500"}, + {"2600:1fa0:60c0::/44", "16509"}, + {"2607:f8c0:203::/48", "25885"}, + {"2804:110c::/32", "52700"}, + {"2001:559:86e1::/48", "22909"}, + {"2409:805c:5::/36", "9808"}, + {"2001:b18:1017::/48", "47943"}, + {"2402:6640::/45", "134995"}, + {"2409:805c:4100::/36", "9808"}, + {"2a02:26f7:eb44::/48", "36183"}, + {"2a0b:99c0::/29", "207187"}, + {"2001:16a2:c2f0::/46", "39891"}, + {"2001:1948::/32", "210"}, + {"2407:38c0:61::/48", "59204"}, + {"2804:3d28:11::/46", "7063"}, + {"2804:5590::/32", "267942"}, + {"2a02:26f7:c108::/48", "36183"}, + {"2a02:26f7:cd04::/48", "36183"}, + {"2409:8060:3900::/31", "9808"}, + {"2600:1406:8401::/36", "20940"}, + {"2607:fcd0:100:6901::/51", "8100"}, + {"2803:7080::/32", "263172"}, + {"2a03:14e0::/32", "6908"}, + {"2001:67c:190::/48", "198568"}, + {"240e:982:6700::/40", "58563"}, + {"2602:fc60::/40", "33385"}, + {"2620:1b:e000::/48", "394805"}, + {"2a07:3a40::/34", "212734"}, + {"2a05:d480::/29", "57795"}, + {"2a0e:fd45:b52::/42", "44103"}, + {"2001:678:660::/48", "203829"}, + {"2001:678:de8::/48", "212834"}, + {"2408:8256:30a0::/39", "17816"}, + {"2804:e30:7e00::/39", "11338"}, + {"2806:107e:22::/32", "8151"}, + {"2a00:4802:b00::/37", "8717"}, + {"2a0b:4340:3331::/36", "48024"}, + {"2a0f:e401:111::/48", "204307"}, + {"2001:bf6::/32", "29670"}, + {"2401:2d00:c3e6::/44", "17625"}, + {"2401:d800:f1a0::/41", "7552"}, + {"2001:559:43c::/48", "7015"}, + {"2001:559:85ad::/46", "7015"}, + {"2402:5300:2110::/38", "45903"}, + {"2406:da70:2000::/40", "16509"}, + {"2408:805d:1000::/26", "17816"}, + {"2600:6c7f:f000::/48", "20115"}, + {"2600:9000:1106::/44", "16509"}, + {"2604:4500:900::/46", "29802"}, + {"2804:2bdc::/47", "265181"}, + {"2404:3d00:4138::/46", "3573"}, + {"2605:cdc0:11::/48", "398088"}, + {"2620:107:9044::/47", "22787"}, + {"2804:c2c::/32", "28191"}, + {"2806:1018:cc00::/40", "8151"}, + {"2001:4d0:108::/48", "24"}, + {"2600:9000:2159::/42", "16509"}, + {"2804:2140::/35", "53059"}, + {"2001:428:b20::/48", "7359"}, + {"2001:df4:5800::/48", "135885"}, + {"2405:13c0::/32", "135808"}, + {"2600:800::/30", "701"}, + {"2602:ff37::/36", "53981"}, + {"2804:90::/33", "28580"}, + {"2804:231c::/32", "61591"}, + {"2804:61f0::/46", "269266"}, + {"2001:678:888::/48", "209933"}, + {"2604:bf00::/38", "17185"}, + {"2605:5240:4900::/37", "397494"}, + {"2620:149:a17::/48", "714"}, + {"2600:140f:5201::/39", "20940"}, + {"2a02:26f7:c899::/46", "20940"}, + {"2001:559:5df::/48", "33651"}, + {"2401:d800:840::/42", "7552"}, + {"2406:6200:2000::/36", "23756"}, + {"2804:387c::/32", "266481"}, + {"2804:6460::/32", "269424"}, + {"2a02:bf0::/43", "25106"}, + {"2001:d68::/48", "7587"}, + {"2404:3900:1992::/48", "38320"}, + {"240e:108:1280::/44", "4134"}, + {"240e:44d:5380::/41", "4134"}, + {"2800:160:24fc::/46", "14259"}, + {"2804:575c::/32", "268061"}, + {"2a02:ee80:4204::/44", "3573"}, + {"2405:8700:3000::/48", "24168"}, + {"2804:a00:10::/47", "262838"}, + {"2804:4588::/32", "266933"}, + {"2a05:d000:e000::/40", "16509"}, + {"2a06:c07::/32", "59414"}, + {"2a0e:aa07:e500::/48", "147028"}, + {"240a:a101::/32", "142907"}, + {"2600:140b:8c01::/35", "20940"}, + {"2607:cc80::/35", "25664"}, + {"2607:fdb8:2::/47", "30496"}, + {"2804:6bb4:1600::/32", "270418"}, + {"2a02:26f7:d251::/46", "20940"}, + {"2a0b:8480::/29", "25341"}, + {"2a0e:fb46::/32", "51837"}, + {"2600:6c3a:c4d::/46", "20115"}, + {"2a00:139c::/32", "58069"}, + {"2001:67c:173c::/48", "60481"}, + {"2604:cb40::/32", "40020"}, + {"2a02:1397:5000::/40", "21351"}, + {"2a07:6380::/29", "44821"}, + {"2001:468:cc1::/43", "40220"}, + {"2409:8924:2700::/36", "56046"}, + {"240a:a7e8::/32", "144674"}, + {"2607:fc48:bc4b::/48", "40009"}, + {"2804:680c::/32", "269667"}, + {"2a0e:8f02:21a0::/46", "208763"}, + {"2001:400:210:105::/47", "293"}, + {"2401:d800:2eb0::/41", "7552"}, + {"2408:8456:c400::/42", "17622"}, + {"240e:679:e600::/30", "4134"}, + {"2806:20d:3242::/40", "32098"}, + {"2001:559:8118::/48", "33287"}, + {"2402:f840:2::/32", "137883"}, + {"2606:b40::/32", "393445"}, + {"2804:6d80::/32", "270537"}, + {"2a0d:b80::/32", "199971"}, + {"2605:9400::/32", "12042"}, + {"2a02:4bb::/29", "39605"}, + {"2a0e:eec7::/32", "51837"}, + {"2001:559:575::/46", "7016"}, + {"2402:800:7970::/40", "7552"}, + {"2605:f500:8111::/33", "1828"}, + {"2606:ae00:bac0::/37", "7287"}, + {"2804:6544::/32", "269479"}, + {"2a00:e2c0::/32", "6830"}, + {"2a06:2380::/29", "29423"}, + {"2620:18f::/32", "104"}, + {"2804:5eb0::/35", "269050"}, + {"2a02:26f0:f9::/48", "34164"}, + {"2a0b:dc80::/29", "206170"}, + {"2001:67c:258c::/48", "31424"}, + {"2001:df0:2ed::/48", "17932"}, + {"2402:800:99c5::/43", "7552"}, + {"240a:ac0c::/32", "145734"}, + {"2600:370f:9043::/42", "32261"}, + {"2a03:2880:f100::/47", "32934"}, + {"2001:dc7:1::/36", "24151"}, + {"2400:ca00::/39", "23688"}, + {"2604:d600:1570::/46", "32098"}, + {"2800:1e0:1700::/44", "7195"}, + {"2804:b8::/32", "52965"}, + {"2804:2dc8::/32", "265303"}, + {"2406:280::/32", "24372"}, + {"240e:983:1300::/48", "134419"}, + {"2c0f:eb00:1100::/40", "61266"}, + {"2001:559:8584::/47", "33651"}, + {"2400:9380:9050::/47", "4809"}, + {"2a00:11c0:60::/48", "197540"}, + {"2a02:ac80:e1::/43", "25145"}, + {"2001:559:875d::/48", "33287"}, + {"2408:8256:2d76::/48", "17816"}, + {"2c0f:7400::/32", "328720"}, + {"2001:1248:9a6c::/43", "11172"}, + {"2604:1580::/32", "54455"}, + {"2806:2f0:3021::/41", "17072"}, + {"2a0c:b980:1000::/36", "48096"}, + {"2001:67c:27d8::/48", "198494"}, + {"2605:f700:43::/44", "18978"}, + {"2804:8164::/32", "272451"}, + {"2806:230:2046::/48", "265594"}, + {"2806:230:4012::/48", "265594"}, + {"2001:678:70::/48", "57801"}, + {"2409:8028:3053::/40", "56041"}, + {"240e:3ba:1400::/38", "134773"}, + {"240e:44d:6400::/42", "140345"}, + {"2a01:42e0::/35", "29046"}, + {"2a02:40c1::/32", "48635"}, + {"2a0c:b642:1a08::/48", "202297"}, + {"2a0e:97c0:4b0::/44", "210542"}, + {"2001:559:c1b2::/48", "33491"}, + {"2001:728:0:5000::15ec/32", "2914"}, + {"2001:43f8:1070::/48", "328174"}, + {"240e:ff:b000::/36", "4134"}, + {"2600:1007:c04::/32", "22394"}, + {"2800:68:17::/44", "61468"}, + {"2a07:9080::/33", "6758"}, + {"2800:bf0:2900::/45", "52257"}, + {"2804:7390::/32", "270923"}, + {"2a02:26f0:9f01::/34", "20940"}, + {"2a09:7180::/30", "39614"}, + {"2001:43f8:1::/48", "327844"}, + {"240e:438:7020::/43", "140647"}, + {"2620:105:3000::/44", "20109"}, + {"2800:160:1be3::/43", "14259"}, + {"2a04:a470:10::/48", "2116"}, + {"2c0f:ef60::/32", "328346"}, + {"2a00:edc0:100::/44", "62597"}, + {"2401:ab00::/32", "17809"}, + {"2800:160:17de::/42", "14259"}, + {"2001:44b8:205a::/48", "7545"}, + {"2804:e30:be00::/39", "11338"}, + {"2a09:300::/29", "209899"}, + {"2a09:a7c4::/30", "13030"}, + {"2a11:5707:b00b::/48", "212149"}, + {"2001:67c:368::/48", "12509"}, + {"240a:a136::/32", "142960"}, + {"240e:45c:1e00::/40", "131285"}, + {"2620:e7::/48", "398451"}, + {"2a00:1fa2:80c0::/48", "42087"}, + {"2001:418:1401:26::/60", "2914"}, + {"2408:8957:d440::/40", "17622"}, + {"2603:fef0::/23", "397165"}, + {"2a03:8ea0::/32", "21321"}, + {"2a10:4646:1000::/36", "210662"}, + {"2400:cb00:390::/46", "13335"}, + {"2606:3280::/32", "20298"}, + {"2804:2f40:f005::/44", "264880"}, + {"2a03:1980::/40", "48260"}, + {"2a05:aec0::/29", "65540"}, + {"2a0c:a500:50::/40", "209385"}, + {"2001:559:25f::/48", "22258"}, + {"2600:14a0:81::/41", "20940"}, + {"2602:ff2f::/36", "22241"}, + {"2a01:7780::/32", "3225"}, + {"2a02:26f7:b584::/48", "36183"}, + {"2001:250:831::/46", "138182"}, + {"2001:559:1ed::/48", "33651"}, + {"240e:980:8200::/40", "58461"}, + {"2804:1bd8:8100::/36", "28224"}, + {"2a00:f40:1::/46", "43447"}, + {"2a02:26f7:ba81::/46", "20940"}, + {"2a12:4946:1222::/48", "211398"}, + {"2402:5300::/37", "45903"}, + {"240a:a95c::/32", "145046"}, + {"2804:154c:501f::/42", "263382"}, + {"2a02:26f7:db88::/48", "36183"}, + {"2400:3f80::/32", "7664"}, + {"2404:2280:106::/47", "24429"}, + {"2409:8d14:1700::/36", "56044"}, + {"2607:f098:2100::/35", "33363"}, + {"2802:8000::/31", "22927"}, + {"2001:b000:592::/47", "3462"}, + {"2804:4188::/32", "267439"}, + {"2001:559:866f::/48", "33662"}, + {"2001:559:c3c7::/48", "7922"}, + {"2001:559:c3d9::/48", "33650"}, + {"2001:648:2011::/48", "15690"}, + {"2409:804b:290b::/45", "9808"}, + {"2804:14c::/40", "28573"}, + {"2804:3784:2800::/32", "53121"}, + {"2804:37f0:f100::/36", "266445"}, + {"2806:2f0:6101::/46", "17072"}, + {"2c0f:fe38::/47", "33771"}, + {"2804:214:801d::/38", "26615"}, + {"2804:2960::/32", "264011"}, + {"2a02:26f7:f200::/48", "36183"}, + {"2001:559:80::/48", "7015"}, + {"240a:a0c7::/32", "142849"}, + {"240a:a4de::/32", "143896"}, + {"2600:370f:520a::/42", "32261"}, + {"2620:10a:4011::/48", "29792"}, + {"2804:610c::/32", "268347"}, + {"2a02:26f7:9f::/48", "20940"}, + {"2001:559:8340::/48", "7922"}, + {"2801:80:3ec0::/44", "272493"}, + {"2a00:4802:220::/44", "13124"}, + {"2a06:3084::/30", "57075"}, + {"240a:a472::/32", "143788"}, + {"2800:c70:402::/32", "23201"}, + {"2001:df7:8980::/48", "138787"}, + {"2400:fc00:9901::/33", "45773"}, + {"240e:96b:6027::/44", "140377"}, + {"2a01:578::/43", "16509"}, + {"2a0f:48c0::/29", "60781"}, + {"2001:4b8::/32", "14654"}, + {"2600:370f:6048::/42", "32261"}, + {"2607:fb10:7030::/45", "2906"}, + {"2620:0:5080::/48", "26462"}, + {"2001:559:867a::/45", "33651"}, + {"2001:559:c0d8::/48", "33662"}, + {"2001:67c:30::/48", "210961"}, + {"2001:67c:27f8::/48", "51040"}, + {"2405:3200:711::/32", "17639"}, + {"2803:6900:546::/47", "52423"}, + {"2a02:26f7:da49::/42", "20940"}, + {"2001:1900:229b::/48", "63168"}, + {"2401:ee00::/40", "23951"}, + {"2402:e7c0:80::/37", "59078"}, + {"240e:6b4:1000::/32", "4134"}, + {"2600:370f:37e5::/36", "32261"}, + {"2602:fe96::/36", "396502"}, + {"2001:559:7e4::/48", "7922"}, + {"2001:df4:3480::/48", "140905"}, + {"2402:1a80::/32", "134069"}, + {"2408:8344::/35", "140726"}, + {"2408:8957:ea00::/40", "17622"}, + {"2804:3d74:7::/39", "262617"}, + {"2a01:5ec0:9000::/36", "44244"}, + {"240a:a3fc::/32", "143670"}, + {"2600:3c0f:10::/45", "63949"}, + {"2803:9800:a024::/43", "11664"}, + {"2a01:4700::/48", "41151"}, + {"2001:8b0:0:50::/58", "20712"}, + {"2401:d800:9950::/42", "7552"}, + {"2409:801a:3001::/45", "132525"}, + {"240a:a44a::/32", "143748"}, + {"2804:45e4:6100::/35", "262567"}, + {"2600:140f:ec01::/38", "20940"}, + {"2a00:d3a0::/29", "15600"}, + {"2a06:a005:410::/44", "149296"}, + {"2001:559:c2aa::/48", "33651"}, + {"2001:dc8:d000::/48", "38737"}, + {"240a:a577::/32", "144049"}, + {"240e:3b7:c000::/37", "140315"}, + {"2600:9000:236e::/43", "16509"}, + {"2605:3000::/32", "12033"}, + {"2607:fcb8::/32", "6479"}, + {"2a00:6680::/46", "3320"}, + {"2a0c:9080::/29", "57353"}, + {"2001:418:1c01:1::/64", "20940"}, + {"240e:44d:5680::/41", "4134"}, + {"2620:104:2021::/46", "40185"}, + {"2803:d10::/32", "272035"}, + {"2a02:26f7:d205::/46", "20940"}, + {"240e:67a:1000::/37", "140330"}, + {"2600:1010:b1f0::/36", "22394"}, + {"2602:fd89::/36", "55129"}, + {"2400:adc7:3000::/39", "9541"}, + {"2402:8e00:3::/32", "38529"}, + {"240a:a7cf::/32", "144649"}, + {"2604:5e80:20::/48", "1700"}, + {"2804:3edc::/32", "266625"}, + {"2a00:b4a0::/32", "60388"}, + {"2800:4f0:10::/46", "28006"}, + {"2804:103c::/32", "52813"}, + {"2a00:a7c0::/32", "57866"}, + {"2a02:26f7:eb85::/46", "20940"}, + {"2a06:f1c0::/29", "203361"}, + {"2001:559:80b0::/45", "33657"}, + {"2400:fc00:85b0::/38", "45773"}, + {"2409:8055:35::/46", "56040"}, + {"240a:a300::/32", "143418"}, + {"2a09:3702::/32", "49981"}, + {"240e:250:1700::/34", "4134"}, + {"2804:7038::/32", "270713"}, + {"2a04:6580::/29", "6831"}, + {"2a06:a004:1000::/36", "61138"}, + {"2001:559:849b::/48", "7016"}, + {"2001:559:84a5::/46", "7922"}, + {"2001:559:c1b5::/48", "33657"}, + {"2402:db00::/32", "132142"}, + {"2406:e780:eb2::/48", "63677"}, + {"2407:ab00::/48", "45270"}, + {"2801:80:3910::/48", "270530"}, + {"2001:470:60::/48", "50763"}, + {"2402:800:5101::/44", "7552"}, + {"2408:84f3:bc40::/38", "17816"}, + {"2604:6600:2800::/32", "40676"}, + {"2608:4163:1::/48", "5927"}, + {"2803:e880:9001::/34", "52468"}, + {"2a0f:8840::/30", "207840"}, + {"2001:678:d98::/48", "3303"}, + {"2001:7f8:27::/48", "29535"}, + {"2804:214:8731::/41", "26615"}, + {"2a02:e982:53::/48", "19551"}, + {"2a03:8960::/32", "200914"}, + {"240a:aa6c::/32", "145318"}, + {"2602:80a:2005::/46", "14618"}, + {"2804:2ce4:4000::/34", "265249"}, + {"2804:451c::/32", "267673"}, + {"2806:370:4040::/40", "28403"}, + {"2a00:4700::/32", "56357"}, + {"2a0b:2340::/29", "205763"}, + {"2c0f:fcb8::/32", "37323"}, + {"2402:d40::/32", "63850"}, + {"2408:8956:9d00::/40", "17816"}, + {"240e:44d:4080::/41", "4134"}, + {"2804:cb0:d302::/45", "52742"}, + {"2a02:26f7:b401::/46", "20940"}, + {"2001:56a:10::/31", "852"}, + {"2001:1248:9754::/44", "11172"}, + {"2401:4900:4d40::/44", "45609"}, + {"2402:800:5571::/44", "7552"}, + {"2407:a800:3e12::/48", "4713"}, + {"240e:6b3::/35", "136200"}, + {"2806:217::/38", "28394"}, + {"2603:c002:1710::/36", "31898"}, + {"2604:d600:c38::/46", "32098"}, + {"2804:1ab0:8100::/33", "61876"}, + {"2a02:e981:27::/44", "19551"}, + {"2a04:e802:19::/45", "57976"}, + {"2a0d:ed80:300::/40", "6830"}, + {"2400:cb00:f00e::/48", "13335"}, + {"240a:a4fe::/32", "143928"}, + {"2600:140b:4801::/38", "20940"}, + {"2804:1454::/32", "263325"}, + {"2001:12b0::/32", "28618"}, + {"2001:44a0::/32", "2506"}, + {"2001:44b8:3083::/48", "4739"}, + {"2409:8080:2ab0::/41", "9808"}, + {"240a:a2f8::/32", "143410"}, + {"2620:74:22::/45", "7342"}, + {"2804:954:400::/45", "263073"}, + {"2a00:5580::/29", "5564"}, + {"2001:678:a1c::/48", "29001"}, + {"240a:ab4e::/32", "145544"}, + {"2600:6c38:25e::/42", "20115"}, + {"2806:265:300::/37", "13999"}, + {"2a0d:fec0:77::/48", "47481"}, + {"2a10:7cc0::/29", "201086"}, + {"2001:559:8664::/48", "33650"}, + {"2001:559:c2c1::/48", "33287"}, + {"2001:df7:ce00::/48", "135905"}, + {"2001:1840:c0b0::/44", "5400"}, + {"2620:128:e080::/48", "22317"}, + {"2804:22a0:b::/45", "264112"}, + {"2a04:ee40::/29", "15796"}, + {"2001:550:1d05::/48", "9009"}, + {"2408:8459:2440::/40", "17623"}, + {"240a:ac70::/32", "145834"}, + {"2602:fc3b:401::/36", "399970"}, + {"2804:5818::/35", "268106"}, + {"2a00:9f00:b::/45", "29314"}, + {"2a02:bf8:1601::/48", "1654"}, + {"2a02:26f7:c141::/46", "20940"}, + {"2001:43f8:11b0::/48", "327923"}, + {"2001:4408:4d00::/44", "55824"}, + {"2402:9500:d01::/32", "55720"}, + {"2403:c300::/32", "24157"}, + {"2404:bf40:8040::/47", "7545"}, + {"2605:b800:787::/48", "27435"}, + {"2804:67b8::/41", "269646"}, + {"2806:2f0:6003::/42", "17072"}, + {"2a02:26f7:b805::/46", "20940"}, + {"2a0a:31c0::/29", "62098"}, + {"2600:370f:7290::/47", "32261"}, + {"2408:8456:7200::/42", "17622"}, + {"2605:1980:1::/48", "65007"}, + {"2408:8459:1e10::/42", "17623"}, + {"240a:aea5::/32", "146399"}, + {"2801:1e:6800::/48", "14080"}, + {"2a00:18d8::/47", "8697"}, + {"2c0f:f738:2000::/45", "61317"}, + {"2606:2800:410b::/45", "15133"}, + {"2607:f750:3000::/40", "23473"}, + {"2806:230:202a::/48", "265594"}, + {"2a06:8400::/31", "198463"}, + {"2a0a:f780::/29", "49191"}, + {"2001:559:c289::/48", "7922"}, + {"2001:42d0:af00::/40", "33764"}, + {"240a:a54c::/32", "144006"}, + {"2806:230:2036::/48", "265594"}, + {"2a00:9ac0::/32", "198096"}, + {"2a0e:1c80:3::/48", "174"}, + {"240a:a1ae::/32", "143080"}, + {"240a:ad65::/32", "146079"}, + {"240e:438:6240::/37", "4134"}, + {"2803:6900:1400::/48", "52423"}, + {"2806:2f0:43c1::/42", "17072"}, + {"2a09:2dc0::/32", "30860"}, + {"2001:678:81c::/48", "12552"}, + {"2001:c10:ff09::/43", "7473"}, + {"2001:1248:a600::/43", "11172"}, + {"2001:16a2:7d00::/38", "39386"}, + {"2409:8028:90::/41", "56041"}, + {"240a:a71c::/32", "144470"}, + {"2620:11b:e0a6::/43", "3356"}, + {"2804:43b4::/32", "267585"}, + {"2806:20d:3238::/41", "32098"}, + {"2402:4e00::/47", "45090"}, + {"2404:880:26::/48", "38750"}, + {"2804:3100::/32", "264986"}, + {"2a01:8840:ad::/48", "207266"}, + {"2a02:e30:f050::/48", "61056"}, + {"2804:14c:6500::/42", "28573"}, + {"2804:4ebc::/32", "268279"}, + {"2804:72e4:4001::/32", "270882"}, + {"2001:67c:2848::/48", "213100"}, + {"2001:8a0::/32", "3243"}, + {"2408:80ea:7a80::/44", "17623"}, + {"240a:a348::/32", "143490"}, + {"240a:aa4b::/32", "145285"}, + {"2a0c:b642:2fff::/48", "34641"}, + {"2001:559:82bc::/48", "33659"}, + {"2001:dce:4::/48", "23869"}, + {"2804:4cb4::/32", "267386"}, + {"2400:cc00:8b00::/37", "17477"}, + {"2610:e8:8000::/33", "6223"}, + {"2600:370f:74f2::/39", "32261"}, + {"2801:1c8:301::/48", "19429"}, + {"2a02:26f7:bcc9::/46", "20940"}, + {"2a06:a080::/32", "207220"}, + {"2001:df0:ca00::/47", "137442"}, + {"2001:12f8:4::/47", "11644"}, + {"2001:1698::/32", "34683"}, + {"2a04:88c5::/32", "28753"}, + {"2606:6780:8::/48", "20324"}, + {"2804:200::/32", "28187"}, + {"2804:32bc::/32", "265096"}, + {"2a00:7145:c1::/46", "51430"}, + {"2a03:6280::/29", "203936"}, + {"2a05:a884:de20::/48", "7473"}, + {"2001:67c:2358::/48", "39287"}, + {"240a:a08b::/32", "142789"}, + {"2804:2e94::/32", "52780"}, + {"2804:30fc::/46", "263009"}, + {"2804:5848::/32", "268119"}, + {"2806:2f0:3361::/46", "17072"}, + {"2a05:fbe0::/31", "200474"}, + {"2a09:bac0:43::/44", "13335"}, + {"2407:ed00:1f00::/32", "9587"}, + {"2408:8459:ca30::/41", "17622"}, + {"2600:1417:f801::/28", "20940"}, + {"2605:ba40::/32", "60171"}, + {"2620:48:8000::/48", "1767"}, + {"2804:7a10::/32", "271345"}, + {"2a02:26f7:d8::/48", "36183"}, + {"2001:250:814::/48", "23910"}, + {"2001:1430::/32", "29243"}, + {"2409:8053:2000::/47", "56047"}, + {"2602:fec3:f00::/40", "62563"}, + {"2a01:5b0:2c::/47", "8561"}, + {"2001:480:20::/48", "48"}, + {"2001:559:879f::/48", "33662"}, + {"2408:8406:7800::/39", "4808"}, + {"2409:8904:65b0::/38", "24547"}, + {"2602:ffb0:28::/48", "64245"}, + {"2804:714c::/32", "270780"}, + {"2a11:7e05::/32", "206446"}, + {"2400:cb00:90::/48", "13335"}, + {"2409:8054:3d::/46", "56040"}, + {"2a0f:ca00:8002::/48", "209907"}, + {"2804:6c0:700::/43", "262418"}, + {"240e:3bb:7600::/39", "140313"}, + {"240e:44d:7900::/42", "140345"}, + {"2600:100e:f110::/36", "6167"}, + {"2a02:26f7:ce45::/46", "20940"}, + {"2a02:26f7:e084::/48", "36183"}, + {"2a10:2f01:242::/48", "213316"}, + {"2401:d800:220::/41", "7552"}, + {"240e:1f:5000::/36", "58466"}, + {"2800:160:1cfc::/46", "14259"}, + {"2804:2a0:c000::/34", "28272"}, + {"2804:3644::/32", "266338"}, + {"2a00:1d58:fa21::/48", "47524"}, + {"2620:78:c000::/48", "62692"}, + {"2803:8720::/32", "266755"}, + {"2a0b:b840:1::/48", "42167"}, + {"2a0c:4180::/32", "29854"}, + {"2a10:55c0::/29", "206332"}, + {"2001:13d0::/35", "7303"}, + {"2a02:26f7:ea00::/48", "36183"}, + {"2a0e:5800::/29", "212660"}, + {"240a:a1d2::/32", "143116"}, + {"2602:ffc5:152::/47", "7489"}, + {"2804:67ac:13::/32", "269643"}, + {"2001:559:8355::/48", "33287"}, + {"2400:cb00:496::/44", "13335"}, + {"2600:6c10:14d::/43", "20115"}, + {"2605:3040::/32", "12183"}, + {"2a02:6c20:819::/48", "24641"}, + {"2a02:ee80:4227::/44", "3573"}, + {"2a0f:9400:7826::/47", "9833"}, + {"2804:28::/32", "28162"}, + {"2804:c90:2::/35", "28198"}, + {"2404:cb00::/32", "17937"}, + {"2408:8459:9a30::/41", "17622"}, + {"240a:adcd::/32", "146183"}, + {"2804:23e8::/32", "262855"}, + {"2804:269c:fe47::/48", "47065"}, + {"2a02:26f7:da40::/48", "36183"}, + {"2a04:a7c0::/32", "198785"}, + {"2a0d:b201:c0::/42", "206026"}, + {"2a0e:97c3:7bc::/48", "20473"}, + {"2a12:a900:1::/48", "16509"}, + {"2001:4998:171::/44", "10310"}, + {"2401:4900:7010::/44", "45609"}, + {"2620:106:3004::/40", "36671"}, + {"2402:e380:120::/45", "139073"}, + {"240a:aff4::/32", "146734"}, + {"2600:8807:93ce::/42", "22773"}, + {"2a0e:9580::/32", "61381"}, + {"2a10:240::/29", "62240"}, + {"2409:8055:3012::/47", "9808"}, + {"2a00:1228:6::/39", "31148"}, + {"2001:df3:2e80::/45", "9833"}, + {"2001:4490:d7a0::/46", "9829"}, + {"2602:803:4075::/48", "398223"}, + {"2800:bf0:3b81::/42", "27947"}, + {"2402:9900:e11::/48", "27435"}, + {"2602:ff98:140::/38", "63447"}, + {"2a01:410::/46", "30844"}, + {"2a02:26f7:c5cd::/42", "20940"}, + {"2a02:5320:300::/40", "12189"}, + {"2a04:f580:8210::/47", "4134"}, + {"2001:559:81f1::/48", "7015"}, + {"2404:e280::/47", "58866"}, + {"240a:a150::/32", "142986"}, + {"2603:c011:2000::/36", "31898"}, + {"2607:f428:9390::/44", "20115"}, + {"2a01:540::/33", "12389"}, + {"2a06:4e40::/29", "200567"}, + {"2404:138:46::/47", "38299"}, + {"240a:a547::/32", "144001"}, + {"2606:5580:8000::/38", "63242"}, + {"2801:11e:3::/48", "3816"}, + {"2804:6c0:600::/43", "262418"}, + {"2c0f:fa58::/32", "37356"}, + {"2001:da8:244::/48", "24349"}, + {"240e:3bc:9200::/36", "140317"}, + {"2804:7a70::/32", "271371"}, + {"2a01:5300::/32", "2840"}, + {"2001:67c:510:1165::49:2/48", "15486"}, + {"2001:4998:20::/48", "14776"}, + {"2400:54c0::/40", "136352"}, + {"2402:800:6150::/38", "7552"}, + {"240a:adde::/32", "146200"}, + {"240d:c010:64::/48", "139341"}, + {"2607:fb90:c900::/35", "21928"}, + {"2a04:6400:191a::/29", "62240"}, + {"2a0a:b980::/32", "203604"}, + {"2a0c:8d40::/29", "202825"}, + {"2001:559:83dd::/48", "33657"}, + {"2402:b801:400::/35", "18371"}, + {"2405:8a00:2073::/44", "55824"}, + {"2407:19c0::/36", "141519"}, + {"2605:59c2:1000::/39", "36492"}, + {"2a09:d2c1:1::/48", "209669"}, + {"2408:8456:3200::/41", "17623"}, + {"2409:8020:81::/43", "56046"}, + {"2801:1a:4800::/48", "269790"}, + {"2804:898::/32", "262380"}, + {"2a00:1188:f::/48", "8455"}, + {"2a01:8640::/48", "59711"}, + {"2a07:9944:20::/48", "58305"}, + {"2a0e:e080::/32", "42487"}, + {"2408:8459:8650::/36", "17816"}, + {"240a:a796::/32", "144592"}, + {"240a:a918::/32", "144978"}, + {"2800:650:101::/32", "28032"}, + {"2801:80:2800::/40", "262441"}, + {"2001:2000:9000::/40", "3301"}, + {"2603:c0f0:2800::/43", "6142"}, + {"2a01:4520::/32", "25459"}, + {"2a03:f680::/32", "1547"}, + {"2001:67c:1308::/48", "211693"}, + {"2408:8456:4c40::/39", "17816"}, + {"2a02:26f7:b9d1::/42", "20940"}, + {"2600:1488:c041::/42", "20940"}, + {"2804:16f4::/32", "263110"}, + {"2a02:26f7:c5::/48", "20940"}, + {"2a02:26f7:c140::/48", "36183"}, + {"2001:648:25e0::/48", "203348"}, + {"240e:67b:8800::/38", "140330"}, + {"2602:ffb0:27::/48", "32780"}, + {"2a03:8640::/32", "8491"}, + {"2a0e:bf00:161::/31", "202539"}, + {"2001:f20:1000::/48", "9875"}, + {"2401:3400:1000::/33", "45352"}, + {"2402:800:97a9::/43", "7552"}, + {"2605:8040::/32", "398008"}, + {"2806:230:2048::/48", "265594"}, + {"2a00:d28::/32", "31662"}, + {"2001:559:c4ad::/48", "33659"}, + {"2001:67c:16b0::/48", "198093"}, + {"2001:dce:8401::/38", "23869"}, + {"2600:1010:b040::/42", "6167"}, + {"2603:c013:2000::/36", "31898"}, + {"2606:2800:1::/48", "15133"}, + {"2620:15:c000::/48", "7029"}, + {"2804:838::/32", "262359"}, + {"2804:497c::/32", "262896"}, + {"2805:f10:f12::/45", "262182"}, + {"2001:16a2:d000::/37", "39386"}, + {"2400:6180::/48", "14061"}, + {"2408:84e2:4c0::/32", "17621"}, + {"2806:2f0:33a1::/46", "17072"}, + {"2a00:1d58:ac00::/35", "47524"}, + {"2a02:4544:e0::/44", "197207"}, + {"2606:2800:508a::/45", "15133"}, + {"2a02:26f7:f5c5::/46", "20940"}, + {"2a0b:af40::/29", "205543"}, + {"2a02:2788:1000::/32", "12392"}, + {"2a09:ab80::/29", "60733"}, + {"2405:25c0:a100::/40", "131951"}, + {"2406:3002:40:4000::/44", "4657"}, + {"2406:4d00::/48", "23724"}, + {"2600:1002:b050::/40", "22394"}, + {"2607:f348::/34", "13354"}, + {"2804:4390::/34", "28194"}, + {"2001:67c:2c68::/48", "62396"}, + {"2001:1630::/29", "28847"}, + {"2409:8052:3900::/32", "9808"}, + {"240a:a34e::/32", "143496"}, + {"240a:af06::/32", "146496"}, + {"2800:160:11d3::/44", "14259"}, + {"2a0c:4481:8::/47", "204720"}, + {"2001:559:844b::/48", "7922"}, + {"2001:4210::/34", "25818"}, + {"2600:6c7f:9060::/48", "20115"}, + {"2a02:1630::/32", "30848"}, + {"2a0e:41c0::/29", "208566"}, + {"2001:67c:14d8::/48", "61413"}, + {"2001:890::/32", "8447"}, + {"2404:54c0::/32", "17831"}, + {"2406:daa0:4020::/44", "16509"}, + {"2804:e1c::/47", "52545"}, + {"2804:3c20::/32", "266192"}, + {"240a:a663::/32", "144285"}, + {"240a:af8e::/32", "146632"}, + {"2804:6c64::/32", "270465"}, + {"2a01:5400::/32", "12775"}, + {"2a02:101c::/32", "61352"}, + {"2400:b880::/32", "133556"}, + {"2800:510::/32", "28022"}, + {"2804:203c::/32", "264479"}, + {"2804:7fd4::/32", "271712"}, + {"2a01:c00::/26", "6805"}, + {"2a02:26f7:e5::/48", "20940"}, + {"2a03:3460::/32", "207015"}, + {"240a:a14f::/32", "142985"}, + {"240e:16:c800::/48", "38283"}, + {"240a:60:f01e::/48", "9605"}, + {"240e:640:8f00::/33", "4134"}, + {"2606:9100:9000::/36", "1421"}, + {"2620:129:9003::/48", "395506"}, + {"2804:c00:c100::/36", "52655"}, + {"2001:559:2ce::/48", "33659"}, + {"2a02:26f7:b9a8::/48", "36183"}, + {"2a0d:b780::/29", "209549"}, + {"2a0f:3f00::/29", "207902"}, + {"2a11:e487:dead::/48", "212568"}, + {"240a:ae83::/32", "146365"}, + {"2001:438:4a::/48", "399033"}, + {"2001:468:cf0::/44", "40220"}, + {"2001:67c:26f4::/48", "57821"}, + {"2800:b70:11::/48", "262191"}, + {"2804:259c:c000::/34", "52772"}, + {"2804:79fc::/32", "271340"}, + {"2a00:b380::/32", "198471"}, + {"2a02:26f0:d700::/48", "34164"}, + {"2a04:b900::/31", "8587"}, + {"2a04:f400:3000::/48", "36351"}, + {"2600:140b:a400::/48", "24319"}, + {"2605:4cc0::/32", "20257"}, + {"2800:160:2450::/46", "14259"}, + {"2001:67c:184c::/48", "35600"}, + {"2001:12f8:2::/47", "12136"}, + {"2403:7580::/32", "38364"}, + {"2804:2b9c::/32", "265163"}, + {"2a03:7ae0::/32", "200846"}, + {"2405:4000:800:6::/63", "7470"}, + {"2409:8050:3802::/40", "56047"}, + {"2804:4870:1c3::/33", "267121"}, + {"2001:559:c1d2::/48", "33287"}, + {"2001:67c:1b2c::/48", "204074"}, + {"2001:da8:8003::/48", "23910"}, + {"2a10:5f80::/29", "37221"}, + {"2001:df0:ee80::/48", "139298"}, + {"2602:fd6f:aba::/45", "18526"}, + {"2a02:26f7:b600::/47", "36183"}, + {"2001:4878:b220::/48", "12222"}, + {"2001:4998:eff6::/35", "10310"}, + {"2402:5300:4210::/39", "45903"}, + {"2409:8c1f:9000::/34", "9808"}, + {"240e:3bf:1200::/39", "4134"}, + {"2600:1415:5001::/36", "20940"}, + {"2602:801:8000::/46", "208188"}, + {"2607:8280::/45", "27027"}, + {"2804:93c:9000::/33", "52878"}, + {"2804:5010::/32", "268367"}, + {"2804:6a0c:ff00::/40", "270309"}, + {"2400:15a0::/48", "140766"}, + {"2401:d800:5390::/42", "7552"}, + {"240a:add9::/32", "146195"}, + {"240e:18:10::/47", "4811"}, + {"2a01:caa0::/32", "47377"}, + {"240a:60:f000::/44", "9605"}, + {"2620:101:9004::/47", "40934"}, + {"2620:145:400::/48", "12257"}, + {"2804:639c::/32", "269372"}, + {"2804:7b0c::/32", "14463"}, + {"2a01:48a0:4001::/48", "57271"}, + {"2a0d:de80::/29", "8888"}, + {"2001:da8:6001::/48", "23910"}, + {"2a02:26f7:d941::/46", "20940"}, + {"2800:bf0:2a0::/44", "52257"}, + {"2803:7e60::/32", "262186"}, + {"2001:418:143a::/41", "2914"}, + {"2001:678:24c::/48", "59474"}, + {"2800:110:301::/35", "4270"}, + {"2001:559:c26a::/48", "33650"}, + {"240a:a7a1::/32", "144603"}, + {"2801:80:22e0::/48", "267086"}, + {"2409:8014:a::/36", "56044"}, + {"2600:6c38:610::/45", "20115"}, + {"2a02:310::/32", "34106"}, + {"2a0f:ffc0::/29", "207767"}, + {"240a:70:8::/47", "9605"}, + {"240a:a1af::/32", "143081"}, + {"2600:380:ba00::/37", "20057"}, + {"2600:380:d000::/44", "20057"}, + {"2800:160:1f1f::/42", "14259"}, + {"2804:954:72::/40", "263073"}, + {"2804:4ae0:2::/39", "267269"}, + {"2a01:7660:6::/48", "20676"}, + {"2a05:d016::/36", "16509"}, + {"2a07:6e80::/29", "202932"}, + {"2001:67c:13a8::/48", "8613"}, + {"2402:6800:0:3015::/46", "22822"}, + {"2600:4402:c002::/47", "6130"}, + {"2600:8807:8a00::/35", "22773"}, + {"2405:c0:20::/48", "138881"}, + {"240a:a286::/32", "143296"}, + {"2401:cf80:61ee::/43", "55303"}, + {"2408:840c:7700::/40", "17621"}, + {"2804:e8:200::/32", "28280"}, + {"2804:14d:168f::/41", "28573"}, + {"2806:230:203c::/48", "265594"}, + {"2a00:49e0::/32", "199361"}, + {"2001:559:365::/48", "7922"}, + {"2409:8220::/27", "9808"}, + {"240e:3b6:8200::/35", "140316"}, + {"2620:0:480::/48", "28729"}, + {"2a06:1b00:104::/46", "8302"}, + {"2a0a:90c0:20::/44", "11868"}, + {"240e:db:e800::/37", "38283"}, + {"2a02:f98::/32", "33984"}, + {"2001:559:8280::/48", "7016"}, + {"2001:df6:2800::/48", "136639"}, + {"2001:4998:19c::/46", "36646"}, + {"2408:8957:1b40::/40", "17816"}, + {"240a:ad53::/32", "146061"}, + {"2602:ffd5::/36", "26832"}, + {"2604:6040:40::/48", "53698"}, + {"2804:2214:8008::/46", "28177"}, + {"2a02:6b80::/32", "197973"}, + {"2a0f:9400:7500::/47", "210576"}, + {"2600:100e:be1e::/39", "6167"}, + {"2803:9800:9849::/40", "11664"}, + {"2804:80cc:b::/48", "272413"}, + {"2806:230:201e::/48", "265594"}, + {"2a0e:b102:100::/48", "212895"}, + {"2800:bf0:2a82::/42", "27947"}, + {"2804:45dc::/32", "266954"}, + {"2a0f:9407::/32", "62240"}, + {"2001:559:c188::/46", "33287"}, + {"2620:11a:a01d::/46", "43515"}, + {"2a02:26f7:b7c0::/48", "36183"}, + {"240a:a1c8::/32", "143106"}, + {"2806:370:5400::/44", "28403"}, + {"2001:678:f5c::/48", "57483"}, + {"2001:67c:1434::/48", "29560"}, + {"2402:1200:2::/47", "24523"}, + {"2407:bd40:8000::/36", "399686"}, + {"2409:8f18::/31", "134810"}, + {"2600:1410:5001::/34", "20940"}, + {"2620:149:a01::/45", "714"}, + {"2806:2f0:10a1::/48", "17072"}, + {"2a0b:1300:8000::/48", "198018"}, + {"2607:f7a8:1e00::/34", "46887"}, + {"2a02:26f7:bfc5::/46", "20940"}, + {"2a02:26f7:c1c5::/46", "20940"}, + {"2a0d:99c0::/29", "40970"}, + {"2600:380:6900::/35", "20057"}, + {"2620:64::/48", "36811"}, + {"2804:14d:8c81::/44", "28573"}, + {"2a06:c080::/29", "60111"}, + {"2804:26cc::/32", "263858"}, + {"2804:4b38::/32", "267291"}, + {"2804:6e7c::/32", "270600"}, + {"2a0c:ff00:2::/29", "204975"}, + {"2001:559:798::/48", "33287"}, + {"2408:80f1:1c0::/42", "138421"}, + {"2607:f7a8:2a00::/32", "46887"}, + {"2804:4c14:ab01::/35", "267348"}, + {"2a0c:93c0::/43", "212465"}, + {"2001:df6:1e00::/48", "18403"}, + {"2001:1840:c060::/44", "196"}, + {"240a:a422::/32", "143708"}, + {"2604:c040::/32", "21922"}, + {"2a02:4c8:af::/48", "47748"}, + {"2a06:180::/29", "198371"}, + {"2a0e:97c0:570::/44", "210661"}, + {"2001:fd8:b1c0::/42", "132199"}, + {"2403:5400:1810::/48", "7470"}, + {"2600:140b:b001::/38", "20940"}, + {"2a0e:7d40:50::/32", "209833"}, + {"2a0e:b107:df3::/45", "141237"}, + {"2405:2300:ff76::/40", "13443"}, + {"240e:44d:3c80::/41", "4134"}, + {"2600:6c34:20::/48", "33588"}, + {"2a03:6100::/33", "34594"}, + {"2a02:26f7:be8d::/46", "20940"}, + {"2a09:79c0::/34", "208803"}, + {"2a0c:2b80::/29", "208677"}, + {"2001:559:431::/48", "7016"}, + {"2001:559:823d::/48", "33652"}, + {"2408:840c:1a00::/40", "17621"}, + {"2804:7bfc::/32", "271468"}, + {"2400:4ec0:8813::/38", "64300"}, + {"2408:840d::/42", "17621"}, + {"2804:15b8::/32", "52666"}, + {"2001:500:c0::/47", "12041"}, + {"2001:1a11:10::/47", "42298"}, + {"2602:feb4:50::/44", "25961"}, + {"2801:16e:2c::/48", "19429"}, + {"2804:1de8::/32", "17222"}, + {"2a03:1980:d1ff::/38", "48260"}, + {"2001:559:751::/46", "33287"}, + {"2001:ce0:3::/48", "3661"}, + {"2804:12b4::/32", "263493"}, + {"2001:559:1ea::/48", "33287"}, + {"2001:c90::/32", "9595"}, + {"2409:8051:2100::/37", "9808"}, + {"2804:70e4::/32", "270754"}, + {"2400:cb00:a480::/45", "13335"}, + {"240a:adfb::/32", "146229"}, + {"240e:438:8020::/43", "140647"}, + {"240e:978:4100::/36", "4134"}, + {"2620:13e:e000::/48", "29802"}, + {"2806:2f0:4121::/46", "17072"}, + {"2a06:82c4::/48", "39602"}, + {"2a0c:b641:202::/45", "209710"}, + {"2407:2f00:103::/48", "38001"}, + {"2409:8924:6900::/38", "56046"}, + {"240a:acda::/32", "145940"}, + {"2605:4c40:41::/46", "30081"}, + {"2a02:26f7:f900::/48", "36183"}, + {"2a03:82e0:2000::/32", "200991"}, + {"2a07:3500:19d8::/48", "38915"}, + {"2001:1248:a00c::/48", "11172"}, + {"2001:4878:48::/48", "12222"}, + {"2403:ad80:90::/48", "135309"}, + {"2409:807f:2a00::/39", "9808"}, + {"240e:108:10f1::/46", "136197"}, + {"240e:438:2420::/43", "140647"}, + {"2001:559:441::/48", "7015"}, + {"2409:8051:1800::/47", "56047"}, + {"2600:1409:b801::/33", "20940"}, + {"2804:3a38::/32", "53227"}, + {"2a02:cdc6:3075::/39", "59715"}, + {"2a03:1a80::/32", "39878"}, + {"2001:500:3682::/48", "397232"}, + {"2001:1938:2200::/46", "33438"}, + {"2409:896a:2a00::/39", "9808"}, + {"2600:6c10:643::/36", "20115"}, + {"2600:d401:600::/32", "1403"}, + {"2603:4:1704::/48", "44273"}, + {"2a02:730:2001::/35", "29278"}, + {"2402:800:fe20::/41", "7552"}, + {"240e:698:2900::/40", "4134"}, + {"2600:1419:2a01::/37", "20940"}, + {"2804:4f38::/32", "268312"}, + {"2a00:6340:4001::/32", "58299"}, + {"2a09:9240::/29", "35388"}, + {"2a0e:b107:c00::/46", "212888"}, + {"240a:aedb::/32", "146453"}, + {"2607:f358:26::/32", "18779"}, + {"2a00:c020:4000::/36", "199551"}, + {"2604:cac0:133::/45", "11019"}, + {"2804:460c::/32", "266965"}, + {"2a00:1c38::/47", "29014"}, + {"2001:678:e38::/48", "212651"}, + {"2406:9000::/32", "24175"}, + {"2603:c002:a010::/40", "31898"}, + {"2604:8240::/32", "7979"}, + {"2605:a404:218::/42", "33363"}, + {"2a02:28:d::/48", "209024"}, + {"2001:67c:1160::/48", "202539"}, + {"2804:1c1c:3001::/33", "61638"}, + {"2407:79c0::/32", "212744"}, + {"240a:a527::/32", "143969"}, + {"2606:ee00:5::/48", "15102"}, + {"2001:49f0:d0fd::/46", "30058"}, + {"2620:fc:c000::/48", "64241"}, + {"2804:2f4c::/32", "264882"}, + {"2a00:aa40::/32", "15415"}, + {"2a0d:5540::/47", "210269"}, + {"2400:5380::/32", "58910"}, + {"2620:75:a000::/48", "397799"}, + {"2804:7950::/32", "271298"}, + {"2405:ec00:9024::/41", "23955"}, + {"240a:a89b::/32", "144853"}, + {"240a:ac2e::/32", "145768"}, + {"2602:feda:dff::/48", "147071"}, + {"2804:5f00:2::/43", "269070"}, + {"2804:8548::/32", "272569"}, + {"2806:2f0:7221::/46", "17072"}, + {"2806:1016:6::/43", "8151"}, + {"2a02:6c20:81a::/42", "207167"}, + {"2001:559:5da::/47", "21508"}, + {"2001:4200:7801::/32", "2018"}, + {"2408:8957:b300::/40", "17816"}, + {"2409:8904:a640::/39", "24547"}, + {"2600:6c39:1::/45", "20115"}, + {"2603:f070::/29", "396356"}, + {"2605:6c80:11::/48", "397373"}, + {"2a02:26f7:d801::/46", "20940"}, + {"2a09:4380::/32", "41114"}, + {"2a09:4d40::/32", "44812"}, + {"2001:559:8650::/48", "33491"}, + {"2001:559:c44e::/47", "7016"}, + {"2001:830::/32", "61157"}, + {"2001:ee0:302::/45", "135905"}, + {"2402:8400::/46", "17820"}, + {"2406:840:9000::/47", "210041"}, + {"2408:8459:4810::/42", "17623"}, + {"2409:8038:2100::/35", "9808"}, + {"240a:a7f2::/32", "144684"}, + {"2600:6c10:f40b::/45", "20115"}, + {"2806:2f0:3421::/46", "17072"}, + {"2a01:258::/32", "31122"}, + {"2a02:26f7:e10c::/48", "36183"}, + {"2001:40d0::/32", "20912"}, + {"2a01:288:4005::/48", "201642"}, + {"2001:67c:1430::/48", "207076"}, + {"2403:300:a07::/48", "714"}, + {"240a:a4eb::/32", "143909"}, + {"240e:16::/32", "4134"}, + {"240e:438:5420::/43", "140647"}, + {"240e:698:2600::/40", "4134"}, + {"2a02:26f0:c500::/48", "34164"}, + {"2602:808:1000::/40", "398898"}, + {"2a0e:2540::/29", "207902"}, + {"2400:f6c0:600::/32", "136530"}, + {"2620:10a:80e6::/48", "55195"}, + {"2a00:1a90:c000::/34", "33854"}, + {"2a03:db80:4c85::/35", "680"}, + {"2803:4180::/36", "263238"}, + {"2a02:6b40::/32", "44066"}, + {"240a:a0b3::/32", "142829"}, + {"240d:c010:7d::/48", "139341"}, + {"240e:438:5e20::/43", "140647"}, + {"2600:6c38:f3f::/41", "20115"}, + {"2605:d7c1::/29", "53820"}, + {"2800:d302:2::/44", "11830"}, + {"2804:67b8:80::/32", "269646"}, + {"2a03:1d87:2::/32", "31117"}, + {"2a0d:2584:f000::/36", "142566"}, + {"2a10:8e00::/32", "20473"}, + {"2001:250:2424::/47", "24356"}, + {"2001:df0:1700::/48", "136070"}, + {"2001:df4:4480::/48", "140918"}, + {"2409:805c:2100::/36", "9808"}, + {"2600:1901:ffe0::/43", "396982"}, + {"2603:90f5:13::/48", "20115"}, + {"2804:14c:7986::/41", "28573"}, + {"2a05:1e80::/29", "202796"}, + {"2a09:3347::/32", "209509"}, + {"240a:a43c::/32", "143734"}, + {"2001:559:c38f::/48", "33287"}, + {"2405:1c0:7911::/45", "55303"}, + {"2408:8456:ba10::/42", "134543"}, + {"2804:b18:8500::/36", "52941"}, + {"2a01:8b40::/35", "203165"}, + {"2a02:26f7:c4c5::/46", "20940"}, + {"2001:4cb0::/32", "29009"}, + {"2a02:26f7:e7c5::/46", "20940"}, + {"2a04:93c0::/29", "24861"}, + {"2001:67c:82c::/48", "210881"}, + {"2001:4888:8062::/47", "6167"}, + {"2401:c5c0:dfd::/32", "55492"}, + {"2606:2800:4070::/46", "15133"}, + {"2801:15c:2::/48", "10753"}, + {"2804:6fe0::/32", "270690"}, + {"2a02:2090:ec00::/48", "48287"}, + {"2a10:9640::/29", "48329"}, + {"2001:559:c389::/48", "33650"}, + {"2600:141b:1001::/37", "20940"}, + {"2803:600:cacf::/34", "18809"}, + {"2001:df4:d880::/48", "135967"}, + {"2401:5000::/32", "24218"}, + {"2602:804:8000::/40", "54506"}, + {"2606:7e40::/32", "22649"}, + {"2620:106:3000::/46", "36671"}, + {"2620:117:0:e::/64", "10564"}, + {"2a04:7cc0::/29", "62332"}, + {"2600:1407:9800::/48", "35994"}, + {"2602:809:4001::/48", "14995"}, + {"2a05:4741:f::/48", "208393"}, + {"2001:559:5::/44", "7922"}, + {"240a:aee8::/32", "146466"}, + {"2a03:3660:1::/48", "51151"}, + {"2405:7a40::/32", "132808"}, + {"2600:370f:6040::/47", "32261"}, + {"2602:fc22::/36", "396970"}, + {"2a0a:1dc4::/30", "35758"}, + {"2a0f:601::/30", "51044"}, + {"2001:559:69::/46", "33651"}, + {"240a:a602::/32", "144188"}, + {"240e:250:400::/35", "4134"}, + {"2001:559:856e::/48", "33650"}, + {"2408:8956:f140::/40", "17816"}, + {"240a:a9e1::/32", "145179"}, + {"2a03:2880:f220::/47", "32934"}, + {"2a12:e00::/29", "24940"}, + {"2001:4358::/32", "36866"}, + {"2408:84f3:b610::/42", "134543"}, + {"240a:a583::/32", "144061"}, + {"240a:af58::/32", "146578"}, + {"2607:f350::/32", "27630"}, + {"2803:7bc0:2::/34", "266185"}, + {"2804:459c::/32", "266938"}, + {"2a0e:9a40::/29", "58061"}, + {"2a0e:9a80::/29", "56708"}, + {"2a0e:fd45:40fd::/48", "61138"}, + {"2a10:31c4::/30", "398481"}, + {"2001:648:2c31::/40", "5408"}, + {"2001:4050::/32", "6830"}, + {"2408:822e::/27", "4837"}, + {"2804:38b0:301::/37", "266494"}, + {"2a02:26f7:ccc5::/46", "20940"}, + {"2001:559:c330::/47", "7015"}, + {"240a:a68a::/32", "144324"}, + {"2605:aa40:c1e1::/46", "395394"}, + {"2a02:2458::/32", "6908"}, + {"2a04:b540:1000::/34", "42244"}, + {"2402:8100:3000::/42", "45271"}, + {"2600:1415:b001::/36", "20940"}, + {"2804:1b68::/37", "61726"}, + {"2804:4d3c:2080::/36", "267420"}, + {"2806:230:4009::/48", "11888"}, + {"2a02:1338::/32", "43561"}, + {"2001:4878:81e0::/44", "35994"}, + {"2804:1b2c::/35", "61713"}, + {"2a01:4c8:f402::/29", "12576"}, + {"2a03:e0c0::/32", "41960"}, + {"2a11:180::/29", "212714"}, + {"2600:1419:6401::/36", "20940"}, + {"2806:33e::/32", "265573"}, + {"2001:1a68:53::/48", "203756"}, + {"2605:a800:2::/48", "603"}, + {"2806:230:402f::/48", "11888"}, + {"2806:310:1c::/46", "16960"}, + {"2a02:2030::/32", "198252"}, + {"2a04:1bc7::/32", "60982"}, + {"2001:3c8:1601::/48", "38589"}, + {"240a:a431::/32", "143723"}, + {"240e:44d:6d40::/42", "140354"}, + {"2a02:b48:801a::/42", "39572"}, + {"2c0f:f598:6::/47", "327813"}, + {"2001:4d48::/29", "8468"}, + {"240a:a19a::/32", "143060"}, + {"2600:1407:6401::/38", "20940"}, + {"2804:85d4::/32", "272603"}, + {"2a05:3580:2f00::/32", "35807"}, + {"2a0d:ec0::/29", "41709"}, + {"2001:559:360::/48", "33491"}, + {"2406:da00:ff00::/48", "14618"}, + {"2408:8256:377f::/48", "17816"}, + {"2a02:26f0:cb::/48", "2914"}, + {"2001:428:4407::/48", "706"}, + {"2804:338c::/32", "265403"}, + {"2a0f:ec06::/32", "30633"}, + {"240e:804:200::/39", "140636"}, + {"2804:63c::/32", "262571"}, + {"2804:7088::/32", "270732"}, + {"2001:16d8:c006::/43", "16150"}, + {"240a:a62b::/32", "144229"}, + {"2605:a404:b88::/43", "33363"}, + {"2803:80:1005::/32", "61317"}, + {"2806:2f0:99e1::/46", "17072"}, + {"2a02:26f7:be91::/42", "20940"}, + {"2a02:26f7:de00::/48", "36183"}, + {"2001:500:63::/44", "30133"}, + {"2001:559:c455::/48", "7015"}, + {"240a:aa7b::/32", "145333"}, + {"2804:6b4c::/32", "270391"}, + {"2001:4e0:1020::/41", "2381"}, + {"2001:559:80e7::/48", "7922"}, + {"2001:df6:c480::/48", "38254"}, + {"2401:1d00::/32", "38505"}, + {"2402:6940:207::/39", "7645"}, + {"2406:7400:b0::/46", "24309"}, + {"240a:a492::/32", "143820"}, + {"240c:c284::/21", "23910"}, + {"2402:800:7dd0::/42", "7552"}, + {"2402:800:980f::/43", "7552"}, + {"240a:a0d0::/32", "142858"}, + {"2603:c0e0:1210::/39", "54253"}, + {"2001:502:8c25::/48", "7342"}, + {"2401:4900:4a60::/45", "45609"}, + {"2401:7500:fff7::/48", "133296"}, + {"2409:8924:c100::/38", "56046"}, + {"2602:feda:19f::/48", "142025"}, + {"2610:b0:40db::/48", "21433"}, + {"2a03:f4c0::/32", "30781"}, + {"2001:df7:1d80::/48", "142594"}, + {"2001:4918::/32", "7849"}, + {"240a:a697::/32", "144337"}, + {"2605:ec80::/32", "11114"}, + {"2606:a380::/32", "13746"}, + {"2605:9e40::/32", "396304"}, + {"2a09:d4c0::/29", "209070"}, + {"2001:470:157::/48", "6939"}, + {"2001:fd8:3020::/47", "4775"}, + {"2402:8c00:2::/48", "17753"}, + {"240a:a5b0::/32", "144106"}, + {"2801:80:c10::/48", "61880"}, + {"2a02:26f7:b5c1::/46", "20940"}, + {"2409:805e:2100::/36", "9808"}, + {"240a:ac46::/32", "145792"}, + {"240e:965:1000::/37", "133775"}, + {"2600:6c10:fc1a::/38", "20115"}, + {"2a01:8740:5::/48", "212588"}, + {"2400:cb00:133::/48", "395747"}, + {"240a:a751::/32", "144523"}, + {"2801:1d:2800::/48", "262589"}, + {"2806:230:4006::/48", "265594"}, + {"2a03:6947:1900::/40", "61266"}, + {"2001:559:500::/48", "7015"}, + {"2001:559:852c::/48", "7015"}, + {"2804:5898::/32", "268138"}, + {"2804:6c28::/32", "270449"}, + {"2401:e380:7551::/48", "131091"}, + {"2404:4a00:1000::/48", "55423"}, + {"2600:1402:4::/44", "20940"}, + {"2600:3007:1311::/40", "13649"}, + {"2603:c0e8:2000::/39", "1218"}, + {"2620:12c:f00a::/45", "19833"}, + {"2803:980::/32", "263248"}, + {"2804:29f8:3::/48", "264048"}, + {"2a01:200::/32", "25164"}, + {"2600:6000:fd54::/40", "12271"}, + {"2804:2258::/32", "264604"}, + {"2a03:6b00:9::/46", "48832"}, + {"2a06:e881:8700::/45", "210554"}, + {"2406:840:5800::/47", "139317"}, + {"2408:8456:e40::/39", "17816"}, + {"2620:53:a000::/48", "396431"}, + {"2800:160:14d3::/45", "14259"}, + {"2a02:ee80:4295::/44", "3573"}, + {"240a:a4a4::/32", "143838"}, + {"2604:d600:c19::/42", "32098"}, + {"2620:ad:8000::/40", "52127"}, + {"2a02:26f7:c6c0::/47", "36183"}, + {"2001:559:c33f::/48", "33660"}, + {"2409:8030:2c00::/35", "9808"}, + {"240e:3bd:9200::/36", "140317"}, + {"2804:1b84::/32", "61732"}, + {"2804:223c::/32", "264599"}, + {"2a01:90::/40", "29668"}, + {"2404:bf40:e103::/48", "2764"}, + {"2804:1a48::/32", "61850"}, + {"2001:559:8134::/48", "33659"}, + {"2401:8d00:7::/44", "38345"}, + {"2405:cc00:3000::/33", "9471"}, + {"2804:768:4b80::/32", "52977"}, + {"2a02:e00::/32", "29141"}, + {"240e:44d:6580::/41", "4134"}, + {"2406:a3c0::/32", "37922"}, + {"2604:9b00:1800::/38", "14230"}, + {"2606:2580::/32", "393994"}, + {"2620:118:b001::/48", "32110"}, + {"2806:370:9010::/44", "28403"}, + {"2a11:3880::/29", "34734"}, + {"2607:d500:602::/48", "54527"}, + {"240e:44d:1a80::/41", "4134"}, + {"2a02:ac80:b1::/41", "25145"}, + {"2600:1806:411::/48", "16552"}, + {"2804:8cc:1c1::/32", "262394"}, + {"2804:1368:ca6b::/34", "262808"}, + {"2806:2f0:20c1::/48", "22884"}, + {"2a02:26f7:dc0c::/48", "36183"}, + {"2001:559:46e::/48", "7725"}, + {"2001:559:521::/48", "33660"}, + {"2001:df0:68::/48", "45689"}, + {"2405:6e00:440::/44", "133612"}, + {"2408:84f3:ac40::/38", "17816"}, + {"2409:8904:5160::/38", "24547"}, + {"2607:b600:4::/46", "10397"}, + {"2804:2868:40::/32", "263961"}, + {"2a02:26f7:e144::/48", "36183"}, + {"2a04:4e40:e00::/48", "54113"}, + {"2a09:4b44:e::/30", "61317"}, + {"2001:c20:487c::/47", "3758"}, + {"2001:df0:fc0::/48", "137165"}, + {"2403:3800:1300::/33", "4007"}, + {"240a:a094::/32", "142798"}, + {"2a02:26f7:b8c4::/48", "36183"}, + {"2a0e:8b40::/29", "205614"}, + {"2604:fb80:f001::/46", "15128"}, + {"2a04:dec0::/29", "60044"}, + {"2001:1908::/32", "7029"}, + {"2408:8459:1410::/41", "17622"}, + {"2604:880:60::/48", "29802"}, + {"2607:f738:d00::/40", "17184"}, + {"2804:a94::/32", "262572"}, + {"2602:fc62:ee::/47", "399760"}, + {"2605:90c0::/32", "15221"}, + {"2803:a8a0::/32", "266802"}, + {"2a02:2864::/30", "25255"}, + {"2c0f:fcc8::/32", "37154"}, + {"2404:0:6000::/36", "24155"}, + {"2602:ff93:5000::/36", "26968"}, + {"2a00:47c0:811::/48", "27435"}, + {"2a02:26f7:c00c::/48", "36183"}, + {"2001:253:109::/48", "142075"}, + {"2401:1d40:3f00::/48", "58466"}, + {"240a:a6b0::/32", "144362"}, + {"2604:b0c0::/32", "54501"}, + {"2a09:3704::/32", "62240"}, + {"2001:ae8::/32", "9080"}, + {"2408:840c:2b00::/40", "17621"}, + {"240e:67a:c200::/39", "140329"}, + {"2600:6c10:f24d::/43", "20115"}, + {"2620:11:a000::/48", "41625"}, + {"2001:fd8:f270::/44", "4775"}, + {"2620:51:c000::/48", "25861"}, + {"2804:7f7:2000::/33", "18881"}, + {"2a01:cd00:8040::/48", "28708"}, + {"2a0a:d6c0:efff::/48", "61423"}, + {"2404:a800:3101::/33", "9498"}, + {"240e:a51:6400::/30", "4134"}, + {"2600:380:ec10::/41", "7018"}, + {"2408:8957:21c0::/38", "17622"}, + {"2600:6c38:88a::/43", "20115"}, + {"2600:cc01:e100::/35", "32298"}, + {"2801:17:4800::/48", "27951"}, + {"2a04:7580::/29", "9199"}, + {"2001:448a:6030::/41", "7713"}, + {"2600:6c10:f342::/45", "20115"}, + {"2800:110:11::/38", "4270"}, + {"2806:108e:21::/46", "8151"}, + {"2a02:26f7:bccd::/46", "20940"}, + {"2a02:e220::/30", "61094"}, + {"2001:559:50f::/43", "7922"}, + {"2402:800:3ce0::/39", "7552"}, + {"2408:840c:ab00::/40", "17621"}, + {"240a:a79b::/32", "144597"}, + {"2001:559:5f1::/48", "33659"}, + {"2001:4998:efec::/43", "10310"}, + {"2402:4e00:5::/46", "45090"}, + {"2600:1404:6c01::/35", "20940"}, + {"2001:ee0:362::/43", "135905"}, + {"2402:a0c0::/47", "137922"}, + {"2404:e100:4004::/46", "133840"}, + {"2408:8456:c900::/42", "17622"}, + {"240a:a648::/32", "144258"}, + {"240e:983:1e00::/48", "58466"}, + {"2600:40ff:ff12::/40", "701"}, + {"2804:768c::/32", "271119"}, + {"2a00:eec0::/32", "3292"}, + {"2a02:68::/29", "21396"}, + {"2a07:4840::/48", "64245"}, + {"2c0f:ee68::/32", "328271"}, + {"240a:ad31::/32", "146027"}, + {"2a04:4e40:c800::/48", "54113"}, + {"2001:1310:3121::/48", "26610"}, + {"2400:cb00:171::/48", "395747"}, + {"2402:7ac0::/32", "137316"}, + {"2407:2440:1::/44", "139057"}, + {"2a02:26f7:f40c::/48", "36183"}, + {"2001:44b8:30b0::/48", "7545"}, + {"2404:3d00:40f8::/47", "3573"}, + {"2600:370f:30c0::/46", "32261"}, + {"2804:3400::/32", "265430"}, + {"2a01:c50e:ca00::/37", "12479"}, + {"2a02:26f7:e189::/42", "20940"}, + {"2a0f:93c0::/31", "62240"}, + {"2001:559:78a::/48", "7922"}, + {"2401:7940::/32", "134971"}, + {"2401:d800:2e12::/41", "7552"}, + {"2a0c:1580::/29", "204860"}, + {"2804:314:4019::/42", "61568"}, + {"2a01:8840:10::/48", "12041"}, + {"2a04:4e40:2010::/41", "54113"}, + {"2a0f:a01::/46", "30633"}, + {"2001:559:c193::/48", "33489"}, + {"2001:18e8:500::/38", "19782"}, + {"2401:7000::/33", "45177"}, + {"2409:8924:1900::/37", "56046"}, + {"2607:9200::/32", "19009"}, + {"2a00:1020::/45", "24739"}, + {"2a0a:d1c0::/29", "15600"}, + {"2a0c:700::/36", "204515"}, + {"2a0e:2c40:20::/29", "50581"}, + {"2001:559:864b::/48", "7015"}, + {"2001:d08:b0::/34", "9534"}, + {"2401:640:2110::/48", "134844"}, + {"240a:aaa9::/32", "145379"}, + {"2804:108c:d700::/34", "28146"}, + {"2804:16d8:8000::/34", "262729"}, + {"2a04:4343::/29", "61349"}, + {"2404:dd00::/32", "58687"}, + {"2620:a9:4000::/48", "3356"}, + {"2803:7680::/32", "22541"}, + {"2804:14d:5821::/46", "28573"}, + {"2a00:1590::/32", "9051"}, + {"2a0e:aa06:480::/44", "207454"}, + {"2a0f:b400::/44", "60781"}, + {"2001:ee0:ef00::/40", "45899"}, + {"2408:84f3:aa10::/42", "134543"}, + {"2600:140b:1000::/48", "17511"}, + {"2804:1a3c::/32", "61847"}, + {"2804:2068::/32", "262470"}, + {"2804:5d9c::/32", "268982"}, + {"2a09:d2c0::/32", "49181"}, + {"2001:559:c253::/48", "7725"}, + {"2001:4888:1a::/47", "22394"}, + {"240a:a9c8::/32", "145154"}, + {"2804:514::/32", "262490"}, + {"2400:c640:81::/36", "136406"}, + {"2602:ffb7:d00::/40", "62874"}, + {"2a03:2880:f138::/46", "32934"}, + {"2001:559:8266::/48", "33651"}, + {"2001:678:798::/48", "201734"}, + {"2404:0:8000::/42", "131591"}, + {"2405:6d00:105::/32", "17887"}, + {"2800:160:182a::/45", "14259"}, + {"2800:2a0:7101::/32", "27947"}, + {"2a02:2298:8000::/36", "15544"}, + {"2001:559:8388::/48", "7922"}, + {"2001:559:859c::/48", "33287"}, + {"2605:5080:5031::/32", "3367"}, + {"2607:fc48:1010::/48", "40009"}, + {"2806:262:300::/37", "13999"}, + {"2806:2d0:1::/48", "263114"}, + {"2401:d640::/32", "132168"}, + {"240a:ad36::/32", "146032"}, + {"240e:44d:4c80::/41", "4134"}, + {"2600:6c2e::/42", "20115"}, + {"2600:6c33:218::/48", "11351"}, + {"2602:107:2d10::/48", "20115"}, + {"2a02:26f7:dac1::/46", "20940"}, + {"2001:559:23e::/47", "7015"}, + {"2804:77ec::/32", "271208"}, + {"2806:370:9120::/43", "28403"}, + {"2a0c:b641:730::/44", "207338"}, + {"2001:559:8564::/48", "33652"}, + {"2001:ce0:7::/48", "3363"}, + {"2001:df3:bc00::/48", "59113"}, + {"2402:800:361d::/42", "7552"}, + {"2001:559:804f::/48", "20214"}, + {"2001:559:8052::/47", "20214"}, + {"2001:16e8:2::/35", "25542"}, + {"240e:62:f000::/36", "4134"}, + {"2a02:26f7:f8d5::/46", "20940"}, + {"2a0c:1f40::/29", "49191"}, + {"2a0f:9400:7a0a::/48", "135395"}, + {"240e:228::/25", "4134"}, + {"2607:3580::/32", "33452"}, + {"2400:c540:c000::/38", "59238"}, + {"2804:14c:5fe0::/44", "28573"}, + {"2804:2d40::/32", "265269"}, + {"2804:5134::/32", "268437"}, + {"2a12:6f47::/32", "148996"}, + {"2c0f:5e00::/32", "328843"}, + {"2001:559:c01e::/48", "7922"}, + {"2001:4de0:200::/40", "33438"}, + {"2620:74:f::/48", "29403"}, + {"2804:e8:8100::/33", "28280"}, + {"2804:80dc::/32", "272417"}, + {"2a04:4e40:a10::/41", "54113"}, + {"2001:559:4ab::/48", "33287"}, + {"2a02:750:11::/45", "42708"}, + {"2408:8456:840::/39", "17816"}, + {"2603:c020:c000::/35", "31898"}, + {"2604:c880:d000::/34", "46455"}, + {"2a01:7c00::/43", "52075"}, + {"2a01:8840:b2::/45", "12041"}, + {"2a02:26f7:be50::/48", "36183"}, + {"2404:bf40:c181::/48", "2764"}, + {"2405:9800:f001::/44", "45430"}, + {"2a00:9b60::/40", "48635"}, + {"2a01:8840:21::/48", "207266"}, + {"2a02:578:6c00::/38", "9031"}, + {"2a0e:3840:4::/48", "40676"}, + {"2001:3c8:130b::/37", "4621"}, + {"2001:559:844a::/48", "33491"}, + {"2405:1c0:6851::/46", "55303"}, + {"2600:9000:1152::/48", "16509"}, + {"2803:9800:a849::/40", "11664"}, + {"2804:18:1810::/44", "10429"}, + {"2c0f:ef78:11::/48", "63293"}, + {"2602:feda:cf0::/44", "212528"}, + {"2a09:5040::/48", "209562"}, + {"2400:7400:3c::/41", "38044"}, + {"240e:3b8:5600::/34", "4134"}, + {"2600:1406:b::/43", "20940"}, + {"2804:a14:3012::/32", "262342"}, + {"240a:a9c3::/32", "145149"}, + {"2606:e280::/32", "46687"}, + {"2a00:fda0::/32", "62365"}, + {"2400:dcc0:a304::/37", "38631"}, + {"2a02:4f00::/32", "44212"}, + {"2a04:4e40:dc00::/48", "54113"}, + {"2a0c:da81::/30", "208861"}, + {"2001:250:c10::/48", "23910"}, + {"2001:578:10b::/45", "22773"}, + {"2800:160:1b32::/45", "14259"}, + {"2806:2f0:3401::/46", "17072"}, + {"2c0e:0:501::/25", "24863"}, + {"2001:978:9400:1::/36", "174"}, + {"2409:804c:1100::/36", "9808"}, + {"240e:103:8b30::/33", "4134"}, + {"240e:108:11a3::/44", "4134"}, + {"2605:a401:8def::/43", "33363"}, + {"2605:a408:4f::/32", "33363"}, + {"2804:1a34::/32", "61845"}, + {"2804:3008::/32", "264927"}, + {"2804:61a8::/32", "269248"}, + {"2a0c:5247:6000::/36", "208861"}, + {"2001:559:853c::/47", "7015"}, + {"2001:da8:ac::/48", "24349"}, + {"2403:9a00::/32", "7505"}, + {"2408:8256:3888::/48", "17816"}, + {"2409:805f:1900::/34", "9808"}, + {"2604:8c0::/32", "209"}, + {"2804:36f0:2400::/33", "266381"}, + {"2a00:1728:30::/48", "42446"}, + {"2001:559:157::/48", "33491"}, + {"2403:6a40::/48", "135967"}, + {"2a02:788::/47", "12843"}, + {"2a0a:1780::/29", "206784"}, + {"2a0b:c900::/29", "206836"}, + {"2001:678:97c::/48", "49697"}, + {"2401:89c0::/48", "137443"}, + {"240e:87c:700::/36", "137692"}, + {"2605:f440:54::/33", "54874"}, + {"2607:fcf0:9100::/33", "13445"}, + {"2400:fc00:8020::/43", "45773"}, + {"2403:1000:3100::/40", "38819"}, + {"2409:8c20:81b::/38", "56046"}, + {"2a01:6960::/32", "39542"}, + {"2a02:ff0:10f3::/44", "12735"}, + {"2a04:29c7::/32", "42821"}, + {"2408:8459:a010::/42", "17623"}, + {"2604:6e00::/37", "13977"}, + {"2804:697c::/32", "270273"}, + {"2806:2f0:2100::/48", "17072"}, + {"2a01:c50f:eec0::/35", "12479"}, + {"2402:ecc0::/32", "58507"}, + {"240a:adcf::/32", "146185"}, + {"2a06:a640::/29", "212144"}, + {"2001:559:c0d4::/47", "7922"}, + {"2001:df4:5f00::/47", "134033"}, + {"2a09:7140::/29", "50628"}, + {"2001:df0:2e4::/48", "18123"}, + {"2409:8924:4d00::/38", "56046"}, + {"2604:e7c0:1::/48", "14821"}, + {"2800:bf0:8030::/44", "27947"}, + {"2804:6bf0::/33", "270435"}, + {"2a02:6604:4::/30", "5377"}, + {"2a0e:7200::/40", "35112"}, + {"2001:678:5ec::/48", "39617"}, + {"2404:8d06:a000::/40", "133543"}, + {"2407:7a80:23::/45", "132384"}, + {"2a00:1288:88::/48", "203070"}, + {"2a02:a800::/26", "6739"}, + {"2a03:5ae0::/32", "49944"}, + {"240a:a232::/32", "143212"}, + {"240e:db:f800::/48", "38283"}, + {"2605:a401:80a5::/43", "33363"}, + {"2802:8010::/30", "22927"}, + {"2a0f:fe80::/29", "60262"}, + {"2001:67c:204c::/48", "34816"}, + {"2001:dd8:17::/44", "30133"}, + {"2001:fd0::/44", "10029"}, + {"2405:9000::/44", "7474"}, + {"2409:8000:3800::/40", "56048"}, + {"2606:2800:4a18::/46", "15133"}, + {"2800:160:264c::/39", "14259"}, + {"2001:67c:628::/48", "28727"}, + {"2001:4de0:2106::/38", "33438"}, + {"2804:a28:c000::/34", "263026"}, + {"2804:4ee0::/32", "268288"}, + {"2804:53cc::/32", "268607"}, + {"2405:1c0:6a81::/48", "55303"}, + {"2801:122::/40", "3816"}, + {"2a02:6a0:4ffe::/47", "4410"}, + {"2a0f:3104::/32", "56694"}, + {"240e:67b:800::/37", "140329"}, + {"2600:1406:2e01::/35", "20940"}, + {"2800:a40::/42", "22080"}, + {"2803:d60::/46", "269774"}, + {"2001:678:388::/48", "206373"}, + {"2408:8459:3810::/41", "17623"}, + {"240a:a954::/32", "145038"}, + {"2604:1500::/32", "35843"}, + {"2a04:f800::/29", "201776"}, + {"2a05:d050:4080::/44", "16509"}, + {"2a0d:82c3::/29", "47787"}, + {"2a0f:d00::/32", "41114"}, + {"2607:4a00::/32", "36316"}, + {"2001:559:c25a::/45", "20214"}, + {"2001:67c:2f0::/48", "51395"}, + {"2408:8456:1c40::/40", "17816"}, + {"2409:4055:5000::/30", "55836"}, + {"2a02:2e02:1a0::/38", "12479"}, + {"2405:1c0:6681::/46", "55303"}, + {"2409:8904:5940::/42", "24547"}, + {"240a:a04d::/32", "142727"}, + {"2607:f148::/48", "11734"}, + {"2804:14c:bd00::/40", "28573"}, + {"2a0b:1905::/30", "57878"}, + {"2a12:5300::/29", "204790"}, + {"2001:559:854b::/48", "22909"}, + {"2001:db0:7000::/32", "17766"}, + {"2001:df2:e380::/48", "140224"}, + {"2001:44c8:132::/35", "45430"}, + {"2604:3680::/32", "10279"}, + {"2606:2800:4a8a::/48", "15133"}, + {"2607:fc40::/32", "13433"}, + {"2620:13e:500a::/48", "206885"}, + {"2a06:6080::/40", "204180"}, + {"2400:46e0::/32", "63878"}, + {"2403:9800:b060::/45", "4771"}, + {"2600:1011:b030::/41", "6167"}, + {"2600:6c38:c2d::/46", "20115"}, + {"2804:3078::/32", "264953"}, + {"2001:250:81b::/48", "23910"}, + {"240a:a665::/32", "144287"}, + {"2a00:1a28:1107::/41", "42708"}, + {"2a03:1b80:d::/32", "18705"}, + {"2a04:7700::/29", "207203"}, + {"2001:678:a10::/48", "204526"}, + {"2804:4600::/32", "266961"}, + {"2a01:6780:1::/48", "15743"}, + {"2a02:26f7:cc::/48", "36183"}, + {"2001:4490:4400::/40", "9829"}, + {"2405:9800:b640::/36", "45430"}, + {"240a:aa9b::/32", "145365"}, + {"2804:14d:2a82::/47", "28573"}, + {"2a02:26f0:31::/46", "20940"}, + {"240a:a762::/32", "144540"}, + {"2600:6c20:3d::/46", "20115"}, + {"2605:a000:c0e::/48", "11955"}, + {"2607:b80::/46", "30247"}, + {"2800:bf0:81c5::/44", "27947"}, + {"2a02:26f7:58::/48", "36183"}, + {"2409:8c62:e10::/44", "139080"}, + {"2409:8054:39::/46", "56040"}, + {"2600:140b:5::/48", "24319"}, + {"2001:250:5838::/47", "24363"}, + {"240a:a345::/32", "143487"}, + {"2604:3cc0:1020::/44", "396298"}, + {"2607:f108:4700::/36", "29838"}, + {"2610:a1:3014::/48", "12008"}, + {"2a04:5b82::/44", "202265"}, + {"2001:1270:2000::/35", "22908"}, + {"2400:c540:c841::/37", "59238"}, + {"240a:a888::/32", "144834"}, + {"2804:14c:5fc1::/43", "28573"}, + {"2804:73a8::/32", "270929"}, + {"2a02:26f7:d380::/48", "36183"}, + {"2a06:5b80::/29", "207083"}, + {"2408:84f3:f840::/44", "17623"}, + {"240e:328::/32", "17638"}, + {"2620:149:241::/45", "714"}, + {"2803:de40::/32", "27879"}, + {"2804:5264::/32", "268515"}, + {"2a02:2b88::/32", "197019"}, + {"2001:559:86da::/48", "33287"}, + {"2403:9800:2::/43", "4648"}, + {"2403:fa40:1::/48", "49544"}, + {"240a:af62::/32", "146588"}, + {"2607:fdc0::/39", "20326"}, + {"2a02:88d:8120::/44", "48695"}, + {"2402:c800:ff74::/44", "38639"}, + {"2600:1407:6::/44", "20940"}, + {"2602:fced::/36", "398992"}, + {"2804:1044::/32", "263627"}, + {"2a02:26f7:f800::/48", "36183"}, + {"2a07:290a::/32", "559"}, + {"2001:67c:1b50::/48", "211879"}, + {"2001:67c:2d9c::/48", "29436"}, + {"2401:4440::/32", "58945"}, + {"2402:5700::/32", "56111"}, + {"2404:b180:1006::/32", "135310"}, + {"2603:8000::/28", "20001"}, + {"2a04:2e00::/29", "60751"}, + {"2a09:8340::/47", "42275"}, + {"2a0d:5642:113::/48", "48386"}, + {"240a:aea0::/32", "146394"}, + {"2a0e:1b80:3::/48", "54201"}, + {"2800:160:1a88::/47", "14259"}, + {"2a01:8840:69::/48", "207266"}, + {"2a02:ad8:24::/41", "12389"}, + {"2a0a:e5c1:400::/40", "209898"}, + {"2a0c:7080::/29", "18779"}, + {"2001:d08:2800::/32", "9534"}, + {"2001:4408:1101::/33", "4758"}, + {"240a:a338::/32", "143474"}, + {"2806:370:7070::/40", "28403"}, + {"2a02:2808:2001::/48", "47909"}, + {"2a04:1b00:2::/47", "61007"}, + {"2a0a:e200:1100::/40", "33438"}, + {"2001:388:6030::/48", "137188"}, + {"2001:13c7:601b::/48", "61520"}, + {"2803:ace0::/32", "269908"}, + {"2a02:26f7:b::/48", "20940"}, + {"2a03:7380:6000::/41", "13188"}, + {"2001:559:8663::/48", "7922"}, + {"2606:b980::/32", "12089"}, + {"2a03:5640:f228::/39", "2906"}, + {"2a10:6747:10::/32", "210777"}, + {"2607:f6f0:202::/48", "27224"}, + {"2804:7e7c::/32", "271627"}, + {"2001:250:7018::/46", "23910"}, + {"2001:5f8::/33", "5056"}, + {"2001:4546:1004::/28", "9924"}, + {"2401:df40:2::/48", "38001"}, + {"2a0c:7280::/29", "13058"}, + {"2001:1840:c000::/44", "196"}, + {"2001:44c8:48e0::/32", "45430"}, + {"2404:1c40:cb::/45", "24432"}, + {"240e:44d:2e00::/42", "140345"}, + {"2600:1415:8801::/35", "20940"}, + {"2600:1417:f001::/37", "20940"}, + {"2a0f:af40::/29", "207793"}, + {"2001:559:328::/48", "7016"}, + {"2400:6280:4::/44", "132280"}, + {"2402:3a80:1b08::/42", "38266"}, + {"2a02:770::/32", "5578"}, + {"2a10:cc40:15f::/48", "209669"}, + {"2001:4d0:6319::/32", "297"}, + {"2001:559:4f0::/47", "7015"}, + {"2a00:1b38::/32", "8339"}, + {"2a01:488::/32", "20773"}, + {"2a02:6c20:807::/48", "201922"}, + {"2001:5b0:ffff::/48", "6621"}, + {"2402:ce80:3::/48", "133005"}, + {"2404:bf40:a501::/46", "7545"}, + {"240e:965:f600::/30", "4134"}, + {"2607:f4e8:ad::/39", "22822"}, + {"2a02:26f7:fa05::/46", "20940"}, + {"2a12:f00::/29", "204790"}, + {"2001:ee0:c440::/39", "45899"}, + {"2402:700::/32", "9997"}, + {"240e:438:3420::/43", "140647"}, + {"2a01:8c81::/32", "205151"}, + {"2a06:2080::/29", "197825"}, + {"2001:678:e7c::/48", "49677"}, + {"2001:1388:83f1::/37", "6147"}, + {"2001:49f0:a06a::/47", "174"}, + {"2408:870c:2020::/41", "138421"}, + {"240e:397:900::/38", "140488"}, + {"2606:3d40:14::/48", "400097"}, + {"2804:2cb8::/42", "265239"}, + {"2a07:1100::/29", "57389"}, + {"2a0d:3580:12e0::/32", "200303"}, + {"2602:fe27:a0::/48", "6473"}, + {"2804:81c0::/32", "272474"}, + {"2a02:587:50db::/42", "6799"}, + {"2a02:26f7:dac8::/48", "36183"}, + {"2402:8100:2440::/47", "45271"}, + {"2408:8256:3061::/40", "17623"}, + {"2600:9000:1003::/48", "16509"}, + {"2a01:b0e0::/32", "61984"}, + {"2001:559:c399::/48", "7015"}, + {"2405:9800:11::/45", "45430"}, + {"2600:cc06::/28", "32298"}, + {"2620:11a:a0f2::/44", "43515"}, + {"2806:2f0:8441::/46", "17072"}, + {"2a0f:f3c0::/48", "207590"}, + {"2402:f800::/32", "7602"}, + {"2409:8055:4d::/46", "56040"}, + {"2a09:7:2005::/48", "41767"}, + {"2408:8456:9c10::/42", "134543"}, + {"2606:18c0:1a::/48", "14445"}, + {"2620:74:14::/48", "30060"}, + {"2800:bf0:a820::/45", "52257"}, + {"2804:8008::/32", "271725"}, + {"2a01:5cc0::/32", "51050"}, + {"2403:97c0::/48", "7489"}, + {"2804:80bc::/32", "271770"}, + {"2a0c:5700:5354::/29", "30893"}, + {"2a10:9902:210::/48", "212105"}, + {"2400:cb00:63::/44", "13335"}, + {"2600:9000:a1a0::/38", "16509"}, + {"2804:1d5c::/32", "264364"}, + {"2a07:f100::/35", "34741"}, + {"2001:ac8:6a::/43", "9009"}, + {"2402:c800:fff2::/48", "38639"}, + {"240a:a0a8::/32", "142818"}, + {"240a:aea6::/32", "146400"}, + {"2a03:7e0::/32", "12859"}, + {"2a0e:25c0::/29", "35236"}, + {"2800:160:1162::/47", "14259"}, + {"2804:2ed4::/32", "265369"}, + {"2806:230:5000::/48", "265594"}, + {"2a03:2880:f25d::/46", "32934"}, + {"2a03:ff00::/32", "61097"}, + {"2a04:4e40:c410::/41", "54113"}, + {"2001:218::/34", "2914"}, + {"2001:559:8189::/48", "33490"}, + {"2401:d800:dae0::/39", "7552"}, + {"2402:800:f200::/42", "7552"}, + {"2a04:c440:9000::/33", "2047"}, + {"2a05:7240::/29", "35784"}, + {"2a0d:8e02::/32", "197793"}, + {"2402:ef2f:4c::/47", "7633"}, + {"2803:68e0::/32", "269874"}, + {"2803:b480::/48", "28099"}, + {"2a03:d000:7000::/39", "31133"}, + {"240e:fd:b000::/33", "4134"}, + {"2001:559:59::/48", "13367"}, + {"2607:3380:1100::/38", "395766"}, + {"2a0b:d6c0::/29", "205856"}, + {"2402:800:9101::/44", "7552"}, + {"2620:118:400e::/48", "127"}, + {"2a00:1fb0::/29", "34660"}, + {"2607:fc58:1:6::/64", "13536"}, + {"2a00:1ca8:57::/42", "50673"}, + {"2a02:2e02:8f00::/42", "12479"}, + {"2404:b300:1000::/48", "131207"}, + {"2404:e801:2008::/46", "55430"}, + {"2803:2540::/43", "264668"}, + {"2806:2f0:3403::/42", "17072"}, + {"2a02:888:8040::/46", "48695"}, + {"2401:d800:9110::/42", "7552"}, + {"2409:8057:3011::/48", "56040"}, + {"240e:b6:1000::/31", "4134"}, + {"2620:119:4076::/36", "7726"}, + {"2a0f:1440::/48", "60781"}, + {"2001:4478:5800::/39", "4739"}, + {"2600:380:f200::/36", "7018"}, + {"2600:1409:f001::/36", "20940"}, + {"2600:6c38:730::/46", "20115"}, + {"2604:1380:4590::/44", "54825"}, + {"2620:120:9000::/44", "26227"}, + {"2804:6fcc::/32", "270685"}, + {"2a0a:2880::/29", "208861"}, + {"2001:559:8491::/48", "7015"}, + {"2001:978:7402::/39", "174"}, + {"2402:ef2f:2f::/43", "7633"}, + {"2a05:dfc7:5353::/48", "204136"}, + {"2407:2a00::/32", "55832"}, + {"240a:afa2::/32", "146652"}, + {"2804:5d68::/32", "268970"}, + {"2a02:2e02:1fa0::/34", "12479"}, + {"2401:bc40:300::/40", "12189"}, + {"2408:805d:f9::/36", "17623"}, + {"240a:ac16::/32", "145744"}, + {"240e:44d:600::/41", "140345"}, + {"2606:b400:8000::/47", "792"}, + {"2804:14d:2a00::/42", "28573"}, + {"2804:6c8::/32", "262606"}, + {"2a0e:97c0:600::/44", "210537"}, + {"2001:df0:a280::/48", "139225"}, + {"2800:bf0:81e3::/45", "52257"}, + {"2a02:26f7:39::/48", "20940"}, + {"2402:800:b310::/42", "7552"}, + {"240a:ab63::/32", "145565"}, + {"240e:980:9200::/40", "4134"}, + {"2605:d00::/32", "6300"}, + {"2801:1fc:2::/48", "27951"}, + {"2806:2f0:4443::/42", "17072"}, + {"2a0e:f680::/29", "208613"}, + {"2406:ce00::/29", "9370"}, + {"2409:802f:2b07::/48", "9808"}, + {"2604:d600:15ad::/43", "32098"}, + {"2804:145c:e001::/35", "263327"}, + {"2806:230:600a::/48", "265594"}, + {"2a02:e980:170::/40", "19551"}, + {"2400:adc0:4311::/48", "9541"}, + {"2403:580:a00::/34", "134715"}, + {"2403:9900::/24", "17676"}, + {"2600:9000:a310::/47", "16509"}, + {"2607:f7a8:1200::/39", "21687"}, + {"2806:230:3004::/48", "265594"}, + {"2a01:9f20::/37", "201746"}, + {"2001:678:25c::/48", "203055"}, + {"2803:5c80:8056::/48", "64114"}, + {"2a02:2e02:9660::/43", "12479"}, + {"2806:2f0:8403::/41", "17072"}, + {"2001:400:b31::/34", "293"}, + {"2001:559:730::/48", "7015"}, + {"2001:df0:6e80::/48", "17439"}, + {"2001:559:c279::/48", "33657"}, + {"2604:d600:c96::/42", "32098"}, + {"2803:6440::/32", "263755"}, + {"2804:1c1c:2000::/35", "61638"}, + {"2401:3bc0:801::/39", "137409"}, + {"2600:1410:2001::/35", "20940"}, + {"2604:b180:190::/44", "33700"}, + {"2a00:1280::/32", "39591"}, + {"2001:978:201:3::/37", "174"}, + {"2804:7d8c::/32", "271568"}, + {"2a01:448::/41", "42585"}, + {"2001:16a2:6100::/40", "39386"}, + {"2403:6ac0::/32", "138149"}, + {"240a:ad5e::/32", "146072"}, + {"2600:6c3a:833::/44", "20115"}, + {"2a02:888:50::/48", "48695"}, + {"2a02:ea8::/32", "41848"}, + {"2a0e:46c4:1310::/47", "142598"}, + {"2001:678:c60::/48", "39527"}, + {"2409:8080:2ae0::/35", "9808"}, + {"2600:1009:b100::/41", "6167"}, + {"2605:400:1::/48", "16406"}, + {"2001:9a0::/32", "15879"}, + {"2400:32a0::/32", "131987"}, + {"2404:ff40::/32", "4229"}, + {"2602:fce1:200::/48", "395886"}, + {"2605:aa80::/32", "27176"}, + {"2804:e64::/37", "262952"}, + {"2a00:6060:ee38::/35", "60983"}, + {"2001:559:c138::/48", "33651"}, + {"2604:e840::/47", "396965"}, + {"2605:b100:600::/40", "577"}, + {"2804:161c:1000::/46", "263268"}, + {"2804:1a80::/32", "262333"}, + {"2a0c:9a40:8070::/44", "212704"}, + {"2a0c:b641:4::/48", "34872"}, + {"2c0f:f1a0::/32", "37314"}, + {"2001:67c:11f0::/48", "212378"}, + {"2001:4888:8024::/46", "22394"}, + {"2804:9d4:1001::/34", "262996"}, + {"2804:10c8:1338::/32", "263649"}, + {"2804:376c::/32", "266413"}, + {"2408:8456:e840::/38", "17816"}, + {"2602:feda:2f0::/48", "133492"}, + {"2804:1898::/34", "61942"}, + {"2403:300:701::/36", "714"}, + {"2604:6900::/32", "29863"}, + {"2605:5640::/36", "25635"}, + {"2806:230:4026::/48", "265594"}, + {"2400:cb00:aae0::/47", "13335"}, + {"2409:8b5c::/26", "9808"}, + {"240a:aeb2::/32", "146412"}, + {"2600:1409:14::/37", "20940"}, + {"2606:7c80:cc1::/46", "40300"}, + {"2a02:26f7:c209::/42", "20940"}, + {"2001:550:1b0b::/37", "174"}, + {"2001:559:81dc::/47", "7922"}, + {"240a:a459::/32", "143763"}, + {"2600:1408:1d::/42", "20940"}, + {"2804:604::/32", "262560"}, + {"2804:2378::/32", "264164"}, + {"2a02:f680:1::/48", "212913"}, + {"2a06:8d40::/29", "21315"}, + {"2001:16b8:6700::/36", "8881"}, + {"2001:1900:2276::/40", "3356"}, + {"2402:5400::/48", "45938"}, + {"2409:8e35::/28", "9808"}, + {"240a:a8dd::/32", "144919"}, + {"2605:4d00::/32", "14613"}, + {"2a02:26f0:4a00::/48", "34164"}, + {"2001:67c:13c::/48", "16075"}, + {"2600:1002:9100::/44", "6167"}, + {"2600:140b:e801::/37", "20940"}, + {"2607:fcd0:106:3b00::/49", "8100"}, + {"2620:ef:4000::/48", "394137"}, + {"2a06:1b00:98::/47", "8302"}, + {"2a06:7244::/32", "57878"}, + {"2001:67c:71c::/48", "59824"}, + {"2400:9380:91c0::/44", "136167"}, + {"2409:8904:5270::/40", "24547"}, + {"2600:1409:3001::/36", "20940"}, + {"2804:2d5c::/32", "265277"}, + {"2001:559:85a7::/48", "33657"}, + {"2800:4b0:8008::/43", "12252"}, + {"2803:6900:616::/47", "52423"}, + {"2a00:d340:ffff::/48", "51720"}, + {"2a02:26f7:e689::/46", "20940"}, + {"2c0f:feb8::/32", "36959"}, + {"2001:559:5f5::/48", "22909"}, + {"2001:568::/37", "852"}, + {"2405:4000:aab::/32", "38082"}, + {"2408:8957:c200::/40", "17622"}, + {"2409:8750:b00::/37", "56047"}, + {"2804:4b90::/32", "267315"}, + {"2403:8680:2::/32", "134630"}, + {"2406:b400:14::/47", "18209"}, + {"240a:a76f::/32", "144553"}, + {"2a02:26f0:8c01::/39", "20940"}, + {"2a05:f506::/48", "14413"}, + {"2a0c:7e43:a525::/48", "20473"}, + {"2401:fd80:1ff::/48", "137502"}, + {"2605:9780:1800::/40", "36180"}, + {"2620:0:167a::/48", "6984"}, + {"2a02:26f7:c945::/46", "20940"}, + {"2a02:26f7:ea4d::/42", "20940"}, + {"2409:8904:6370::/40", "24547"}, + {"2409:8924:7100::/38", "56046"}, + {"2606:5c0::/32", "36165"}, + {"2804:3dc:4::/40", "52967"}, + {"2a0f:5707:abe0::/47", "210522"}, + {"2400:9380:9230::/47", "4809"}, + {"2409:8020:21::/43", "56046"}, + {"2409:8924:9100::/38", "56046"}, + {"240a:a72b::/32", "144485"}, + {"2a00:46c0::/32", "48500"}, + {"2600:6c10:fc13::/44", "20115"}, + {"2804:a0::/32", "262318"}, + {"2001:559:83a6::/48", "33660"}, + {"240a:a031::/32", "142699"}, + {"2606:3c0:3::/32", "399016"}, + {"2001:559:2da::/48", "33652"}, + {"2001:559:81a3::/48", "33657"}, + {"2001:44b8:38::/48", "7545"}, + {"2409:8a79::/30", "9808"}, + {"2800:110:10::/48", "42"}, + {"2a02:610:7501::/48", "51894"}, + {"2409:8907:7620::/39", "24547"}, + {"240a:a87e::/32", "144824"}, + {"240e:3b7:8200::/35", "140316"}, + {"2603:900c::/30", "33363"}, + {"2a0e:b107:1595::/48", "142419"}, + {"2a11:a500::/32", "60505"}, + {"2001:67c:28ec::/48", "209943"}, + {"2400:c700:9::/43", "55644"}, + {"240e:3b1:d000::/36", "134772"}, + {"2804:4380::/32", "267574"}, + {"2a10:480::/31", "4785"}, + {"2409:805c:5100::/36", "9808"}, + {"240a:aefb::/32", "146485"}, + {"2604:c0c0:6000::/32", "14525"}, + {"2803:fd80::/46", "18747"}, + {"2a0e:3e80::/29", "204504"}, + {"2001:df6:9500::/48", "137671"}, + {"2a12:c480::/29", "35297"}, + {"2606:2800:4044::/48", "14210"}, + {"2620:11a:a02d::/46", "36040"}, + {"2804:134::/32", "28323"}, + {"2804:8230::/32", "272504"}, + {"2a03:5c40::/32", "42777"}, + {"2001:559:2e4::/48", "33660"}, + {"2001:559:c1bd::/48", "7725"}, + {"2001:67c:5c0::/48", "205076"}, + {"2607:fc48:c50::/48", "40009"}, + {"2600:6c10:60b::/43", "20115"}, + {"2620:131:1054::/42", "26450"}, + {"2804:a::/31", "14840"}, + {"2001:678:5cc::/48", "31149"}, + {"2001:df6:2480::/48", "44103"}, + {"2001:df7:1900::/48", "137636"}, + {"2001:4868:100::/44", "23148"}, + {"2600:6c38:179::/40", "20115"}, + {"2620:62:400c::/46", "30045"}, + {"2800:160:1ec2::/43", "14259"}, + {"2a0c:53c0::/29", "204081"}, + {"2001:1af8::/33", "60781"}, + {"2400:f2:7000::/48", "202818"}, + {"2404:bf00:8800::/40", "9303"}, + {"240a:a686::/32", "144320"}, + {"240e:45c:5200::/40", "131285"}, + {"2603:f9e0::/22", "397165"}, + {"2607:f040::/32", "14007"}, + {"2a00:6f40::/32", "48452"}, + {"240e:5a:4480::/39", "140296"}, + {"2a02:bc8:37::/48", "202717"}, + {"2a06:98c0:1400::/47", "202623"}, + {"2a0b:5540::/33", "213002"}, + {"2a0e:9740::/29", "51920"}, + {"2001:fd8:1e0::/48", "132199"}, + {"2001:1248:563f::/41", "11172"}, + {"2408:8459:ac50::/38", "17816"}, + {"2408:84f3:9410::/42", "134543"}, + {"240a:a558::/32", "144018"}, + {"2603:c022::/35", "31898"}, + {"2804:3b6c:a004::/46", "265442"}, + {"2604:9440::/32", "53407"}, + {"2804:14c:b500::/40", "28573"}, + {"2a02:618:6::/44", "15774"}, + {"2a0d:2c40::/29", "207146"}, + {"2600:140b:5001::/38", "20940"}, + {"2600:1480:9000::/48", "21342"}, + {"2804:1824::/32", "262301"}, + {"2804:219c::/32", "264564"}, + {"2001:559:8588::/48", "33491"}, + {"2600:370f:70a1::/41", "32261"}, + {"2804:2928::/32", "52951"}, + {"2001:559:303::/48", "33491"}, + {"240a:afa3::/32", "146653"}, + {"240e:44d:7a40::/42", "140355"}, + {"2606:3c00:f000::/44", "20365"}, + {"2620:116:f004::/40", "14157"}, + {"2800:bf0:8106::/48", "27947"}, + {"2001:559:87dc::/48", "33287"}, + {"2001:67c:2650::/48", "1257"}, + {"2404:8d00:1820::/37", "24378"}, + {"2a02:2e02:1440::/43", "12479"}, + {"2001:559:c4e6::/48", "7016"}, + {"2408:8256:356d::/48", "17816"}, + {"2408:8756:2cf3::/44", "135061"}, + {"2804:22a8::/32", "264114"}, + {"2a02:530:29::/32", "21191"}, + {"2a0f:9440::/31", "62240"}, + {"2001:559:3c5::/46", "7922"}, + {"2001:67c:420::/48", "3303"}, + {"2a00:4cc5::/32", "203875"}, + {"2a05:6f80::/29", "201086"}, + {"2a0e:9300::/48", "17818"}, + {"2001:559:77c::/48", "33287"}, + {"2001:559:82f1::/48", "7016"}, + {"2001:67c:28c4::/48", "1257"}, + {"2600:6c7f:9050::/48", "20115"}, + {"2a02:7be0::/32", "201175"}, + {"2a0e:46c4:2800::/47", "213045"}, + {"240a:a130::/32", "142954"}, + {"2605:b100:d00::/41", "577"}, + {"2804:c70::/32", "52706"}, + {"2a06:4ac0::/32", "20609"}, + {"2a0e:fd45:693a::/32", "44103"}, + {"2001:559:c0fa::/48", "21508"}, + {"2408:8459:fe10::/44", "17622"}, + {"2600:1012:b1a0::/43", "6167"}, + {"2803:2c0::/32", "264830"}, + {"2804:7620::/32", "271091"}, + {"2a03:fb40::/29", "202796"}, + {"2001:550:560b::/39", "174"}, + {"2001:678:3ec::/48", "1257"}, + {"2400:bb40:2000::/46", "141039"}, + {"2409:8000:1000::/40", "56048"}, + {"240a:aa6b::/32", "145317"}, + {"2600:1419:1a01::/37", "20940"}, + {"2a00:9640::/41", "57710"}, + {"2a11:ed00::/29", "400522"}, + {"240a:acbf::/32", "145913"}, + {"2600:141b:6801::/35", "20940"}, + {"2a02:2e02:2370::/40", "12479"}, + {"2a03:4bc0:3150::/47", "209454"}, + {"2a03:da40::/31", "58222"}, + {"2001:a98:101::/37", "8517"}, + {"2800:160:1ef9::/45", "14259"}, + {"2804:14d:fb00::/63", "28573"}, + {"2401:d800:2110::/42", "7552"}, + {"240c:cda2::/22", "23910"}, + {"2600:5c00:2305::/37", "20001"}, + {"2602:ffc8:c000::/34", "20278"}, + {"2a09:c0c0::/29", "209235"}, + {"2001:44b8:29::/48", "4739"}, + {"2607:880::/32", "43288"}, + {"2607:f858:9::/32", "4136"}, + {"2620:10f:7000::/47", "54765"}, + {"2804:14c:7900::/40", "28573"}, + {"2804:2e30:21::/48", "265330"}, + {"2806:2f0:3161::/46", "17072"}, + {"2a00:e040:c0c::/48", "60436"}, + {"2a0f:1640::/29", "60262"}, + {"2001:678:a40::/48", "204911"}, + {"2806:230:2044::/48", "265594"}, + {"2a00:1850:2e1::/45", "29357"}, + {"2001:250:500a::/43", "24361"}, + {"2001:df0:90c0::/48", "140825"}, + {"2001:4978:5ff::/48", "13331"}, + {"2408:8459:3250::/37", "17816"}, + {"2409:8c28:3401::/40", "56041"}, + {"2600:1418:4::/33", "20940"}, + {"2806:10c8::/32", "8151"}, + {"2001:c80:c000::/34", "4673"}, + {"2001:1938:4300::/40", "33438"}, + {"2403:c00:a00::/39", "17488"}, + {"2408:8459:c630::/41", "17622"}, + {"2804:4b0:31c::/41", "262459"}, + {"2001:250:6c20::/43", "138370"}, + {"2001:44b8:6060::/45", "7545"}, + {"2409:8054:38::/48", "9808"}, + {"240e:44d:4800::/41", "140345"}, + {"2600:6c21:40c::/43", "20115"}, + {"2604:d600:c05::/44", "32098"}, + {"2620:11d:9001::/48", "33186"}, + {"2a05:fa80::/31", "202139"}, + {"2001:559:83ff::/48", "33655"}, + {"2001:da8:8019::/45", "24364"}, + {"2001:4220:c::/48", "36935"}, + {"2604:d600:1019::/42", "32098"}, + {"2804:5194::/32", "268463"}, + {"2804:817c::/32", "272457"}, + {"2001:67c:19e4::/48", "2119"}, + {"2804:2a4c::/32", "53167"}, + {"2403:3240::/32", "136975"}, + {"2606:2800:5052::/45", "15133"}, + {"2804:7de8::/32", "271590"}, + {"2a01:6b20::/34", "198296"}, + {"2a02:1006:c000::/48", "3320"}, + {"2a0e:97c3:4d0::/48", "20473"}, + {"2602:ff96:13::/48", "26548"}, + {"2620:1bc:102f::/48", "7726"}, + {"2800:160:1f1a::/45", "14259"}, + {"2a02:b48:8900::/38", "39572"}, + {"2a02:26f0:9e::/48", "20940"}, + {"2001:559:80e1::/48", "33662"}, + {"2001:559:8501::/48", "33650"}, + {"2001:661:2000::/35", "2199"}, + {"240e:967:1000::/37", "133775"}, + {"2a02:26f7:d784::/48", "36183"}, + {"2a07:2902:9c00::/38", "210378"}, + {"2001:67c:1400::/45", "29670"}, + {"2001:4878:4037::/44", "12222"}, + {"2a00:6860::/32", "60917"}, + {"2a01:8840:8d::/48", "207266"}, + {"2a0f:ea80::/32", "60144"}, + {"2001:67c:12c0::/47", "202033"}, + {"2001:1248:8755::/42", "11172"}, + {"2402:1dc0::/32", "137209"}, + {"240a:ab3c::/32", "145526"}, + {"240e:267:9400::/28", "4134"}, + {"2600:100d:ff10::/40", "22394"}, + {"2804:15e4:ff6::/44", "53001"}, + {"2804:3a18::/32", "266070"}, + {"2a07:3500:19f0::/48", "38915"}, + {"2a0f:c081:6d96::/48", "43694"}, + {"2001:470:c6::/48", "396097"}, + {"2001:c20:4878::/48", "9255"}, + {"2402:800:347f::/40", "7552"}, + {"2803:a040::/32", "263750"}, + {"2001:559:420::/48", "20214"}, + {"2405:d340::/32", "134712"}, + {"2602:fe7d::/36", "12155"}, + {"2606:b0c0:b00b::/48", "142598"}, + {"2a0b:7280::/62", "48635"}, + {"2804:3b2c:9000::/33", "266133"}, + {"2806:2f0:43a3::/41", "17072"}, + {"2001:5f8:7f06::/48", "18883"}, + {"2403:c900::/32", "58600"}, + {"2804:7f00::/32", "271660"}, + {"2806:2f0:5221::/46", "17072"}, + {"2a02:26f7:cb41::/46", "20940"}, + {"2a03:18e0::/32", "39567"}, + {"2407:8700::/32", "45415"}, + {"2408:8957:2a40::/40", "17622"}, + {"2803:cd60::/32", "64116"}, + {"2806:230:102c::/48", "265594"}, + {"2409:8c85:aa6d::/43", "9808"}, + {"240a:a80f::/32", "144713"}, + {"2605:a401:83f6::/37", "33363"}, + {"2a01:b740:a19::/48", "714"}, + {"2001:67c:888::/48", "8881"}, + {"240e:37b::/35", "140329"}, + {"240e:438:3840::/38", "4134"}, + {"2602:fdcb::/36", "397646"}, + {"2806:2f0:24e0::/35", "17072"}, + {"2a00:b440::/32", "12389"}, + {"2408:8956:21c0::/38", "17622"}, + {"2600:6c10:f058::/45", "20115"}, + {"2804:3324::/32", "265377"}, + {"2a02:26f7:ca80::/48", "36183"}, + {"240a:a0fa::/32", "142900"}, + {"2603:90f5:100::/40", "20001"}, + {"2804:3f4c::/32", "266651"}, + {"2a00:c2a0::/32", "25376"}, + {"2403:5680::/48", "7489"}, + {"2a00:6220::/32", "43557"}, + {"2a06:2340:1000::/44", "9558"}, + {"2606:6680:3::/48", "3170"}, + {"2620:11c:5000::/44", "13331"}, + {"2001:67c:704::/48", "25522"}, + {"2001:948:58::/47", "1653"}, + {"2406:81c0::/32", "141203"}, + {"240a:a672::/32", "144300"}, + {"2803:9d80::/32", "26617"}, + {"2804:1b3:9800::/34", "18881"}, + {"2804:1de0::/32", "264400"}, + {"2a0f:607:1059::/48", "57401"}, + {"2001:da8:2f00::/48", "138393"}, + {"240e:44d:6c80::/41", "4134"}, + {"2600:6c20:a96::/37", "20115"}, + {"2604:d600:1643::/44", "32098"}, + {"2804:14d:5c45::/43", "28573"}, + {"2804:22c::/45", "22689"}, + {"2001:1248:8470::/46", "11172"}, + {"240e:d9:a000::/37", "38283"}, + {"2602:fbf9::/40", "400283"}, + {"2804:1b5c::/47", "28334"}, + {"2402:800:37d3::/44", "7552"}, + {"2402:800:f5a0::/41", "7552"}, + {"2604:e540::/32", "30165"}, + {"2607:ff08::/32", "13722"}, + {"2804:68c4::/33", "269714"}, + {"2a0f:4ac0:1236::/32", "207921"}, + {"2001:da8:26f::/48", "24350"}, + {"2404:c080::/32", "135327"}, + {"2803:b9c0:8100::/40", "265705"}, + {"2a09:6381::/30", "62000"}, + {"2001:da8:2d00::/46", "138369"}, + {"2405:203:99d::/37", "55836"}, + {"2804:8170::/32", "272454"}, + {"2a02:1608::/32", "12531"}, + {"2a0e:b107:30::/48", "209650"}, + {"2001:12f0:b6f::/37", "1916"}, + {"240a:a829::/32", "144739"}, + {"2600:100d:be0e::/40", "22394"}, + {"2001:559:36d::/48", "7922"}, + {"2001:559:8578::/48", "33651"}, + {"2401:b0c0:b000::/48", "136941"}, + {"240c:c703::/27", "23910"}, + {"2606:fd00::/32", "11013"}, + {"2607:700:1500::/38", "22343"}, + {"2a00:ec20::/32", "16236"}, + {"2a09:d640::/29", "198345"}, + {"2001:3c8:2a07::/48", "135528"}, + {"2406:d00:dddd::/48", "132165"}, + {"2407:6e00:5::/48", "17987"}, + {"2600:1408:a401::/48", "20940"}, + {"2607:fae0:6000::/36", "8038"}, + {"2804:2530::/32", "264265"}, + {"2804:36c8::/32", "266371"}, + {"2804:62d8::/32", "269322"}, + {"2001:fd8:b180::/42", "132199"}, + {"2a00:4901::/32", "206509"}, + {"2a00:8180::/32", "16205"}, + {"2001:fb1:300a::/32", "17552"}, + {"240e:3bf:9200::/36", "140317"}, + {"2620:171:1e::/47", "42"}, + {"2a00:9880::/32", "12963"}, + {"2a07:ed00::/31", "41981"}, + {"2001:250:6818::/46", "138373"}, + {"2600:370f:7581::/42", "32261"}, + {"2604:d600:1252::/42", "32098"}, + {"2a02:26f7:f384::/48", "36183"}, + {"2409:8904:57b0::/36", "24547"}, + {"2600:370f:20c8::/42", "32261"}, + {"2602:801:c008::/48", "2639"}, + {"2a02:720::/38", "34427"}, + {"2405:ae00::/32", "10219"}, + {"2600:1406:2801::/38", "20940"}, + {"2604:ca00:f000::/48", "36492"}, + {"2a00:9b00::/32", "29282"}, + {"2600:1415:e001::/37", "20940"}, + {"2600:140b:1201::/39", "20940"}, + {"2804:4544:d800::/40", "266915"}, + {"2806:230:4023::/48", "11888"}, + {"2001:559:33b::/48", "33657"}, + {"2001:67c:29dc::/48", "28940"}, + {"2400:3e20::/36", "398355"}, + {"2401:d800:2170::/40", "7552"}, + {"2607:fe28:206::/35", "53347"}, + {"2001:1900:2272::/45", "3356"}, + {"2a00:fc00::/32", "3255"}, + {"2a06:8145:9f::/48", "199364"}, + {"2c0f:eff0::/32", "327859"}, + {"240a:a089::/32", "142787"}, + {"2620:11c:d000::/47", "63161"}, + {"2800:180::/32", "27924"}, + {"2804:2cac::/35", "265234"}, + {"2804:2fc4:fffe::/47", "264911"}, + {"2605:c3c0:c0fe::/47", "393954"}, + {"2804:3768::/32", "266410"}, + {"2a01:418::/32", "42344"}, + {"2a0c:e707:4000::/34", "39533"}, + {"2a0f:5381:acac::/33", "208135"}, + {"2001:559:815e::/48", "33668"}, + {"2001:67c:16b8::/48", "25166"}, + {"240a:a833::/32", "144749"}, + {"2620:0:1cff:dead:beee::140a/50", "32934"}, + {"2800:bf0:81c2::/48", "27947"}, + {"2804:14c:3f00::/40", "28573"}, + {"2806:2f0:5441::/46", "17072"}, + {"2a04:2500::/48", "60940"}, + {"2a0e:bc0::/29", "41731"}, + {"2a0f:ca87:4::/48", "210344"}, + {"2001:678:4c::/48", "42"}, + {"2001:df0:2ba::/48", "132277"}, + {"2409:8d00::/32", "56048"}, + {"2600:1005:f000::/44", "6167"}, + {"2804:30c::/39", "28343"}, + {"2804:11c8::/36", "263439"}, + {"2a02:d48:bb::/48", "16080"}, + {"2a0e:fd45:b00b::/48", "208150"}, + {"2001:67c:2310::/48", "34564"}, + {"2607:4880:a000::/33", "53508"}, + {"2803:6603:8000::/33", "28075"}, + {"2804:14d:4e85::/44", "28573"}, + {"2804:35d0::/32", "266308"}, + {"2804:5ed8:9000::/33", "269060"}, + {"2806:230:2006::/48", "265594"}, + {"2a03:3100::/32", "29072"}, + {"2409:8030:1100::/36", "9808"}, + {"2607:fae0:9000::/36", "62529"}, + {"2806:2f0:20e0::/48", "17072"}, + {"2a07:e02:bee::/48", "210083"}, + {"2409:8754:2c00::/35", "9808"}, + {"2a02:2f0f:385::/32", "8708"}, + {"2001:df7:df80::/48", "23676"}, + {"2400:4d40:255::/46", "134204"}, + {"2403:ca00::/32", "37933"}, + {"2804:14d:188b::/41", "28573"}, + {"2a03:9320::/32", "5505"}, + {"2a05:d050:80a0::/43", "16509"}, + {"2a10:9903:301::/48", "60790"}, + {"2a12:3e80::/40", "30823"}, + {"2400:adc0:c110::/47", "9541"}, + {"2605:7380::/32", "25697"}, + {"2607:d500:200::/47", "54527"}, + {"2620:58:c400::/48", "36140"}, + {"2804:638c::/32", "269368"}, + {"2806:20d:580f::/39", "32098"}, + {"2a05:840::/48", "43350"}, + {"240a:a269::/32", "143267"}, + {"240a:ac9b::/32", "145877"}, + {"2804:112c::/32", "263663"}, + {"2a12:9140::/48", "16509"}, + {"2001:4cf8:6000::/48", "3758"}, + {"240a:a4d3::/32", "143885"}, + {"2605:2fc0:1200::/36", "31984"}, + {"2a02:26f7:bb41::/46", "20940"}, + {"2a09:3a00:3a00::/40", "59795"}, + {"2406:3003:2081::/36", "4657"}, + {"240e:928:401::/35", "58542"}, + {"2804:3344::/32", "265385"}, + {"2a01:b740:1112::/38", "714"}, + {"2408:8459:e10::/41", "17622"}, + {"240e:108:1003::/44", "4134"}, + {"2600:140b:8401::/36", "20940"}, + {"2804:6998::/32", "262574"}, + {"2a03:1aa0:5000::/32", "201730"}, + {"2a0b:cbc0::/32", "2027"}, + {"2a0f:7a40::/31", "207858"}, + {"2001:510:131::/38", "376"}, + {"2402:8100:3080::/42", "45271"}, + {"2a02:26f7:f6e0::/47", "36183"}, + {"2001:250:2c05::/48", "24357"}, + {"2607:6980:50b0::/44", "20473"}, + {"2607:f6f0:6000::/48", "27566"}, + {"2804:4cb8::/32", "267387"}, + {"2a02:26f7:e000::/48", "36183"}, + {"2a0c:40::/32", "204426"}, + {"2001:678:b78::/48", "8794"}, + {"2001:913:3000::/36", "204708"}, + {"2405:4803:ce0::/44", "18403"}, + {"2405:c9c0:ff::/35", "138823"}, + {"2600:1488:a201::/40", "20940"}, + {"2a02:26f7:e441::/46", "20940"}, + {"2a03:4d41:310::/37", "199610"}, + {"240a:a1ac::/32", "143078"}, + {"2600:1419:19::/48", "4230"}, + {"2605:a401:899a::/41", "33363"}, + {"2803:6604:e600::/35", "28075"}, + {"2a0d:bfc0::/32", "210220"}, + {"2a0e:aa01:2000::/32", "206499"}, + {"2001:559:18f::/43", "7016"}, + {"2001:559:203::/48", "7015"}, + {"2409:805c:5b00::/37", "9808"}, + {"2409:871e::/31", "24400"}, + {"2600:140f:b001::/37", "20940"}, + {"2a02:26a0::/29", "15547"}, + {"2a02:26f7:fb41::/46", "20940"}, + {"2001:b30:4213::/32", "2614"}, + {"2001:dce:7801::/37", "23869"}, + {"2001:fb0:101c::/48", "55476"}, + {"2804:4e88::/32", "268267"}, + {"2a02:26f7:d156::/47", "20940"}, + {"2001:550:5500:1::/38", "174"}, + {"2001:250:2438::/38", "23910"}, + {"2001:559:8240::/48", "33652"}, + {"2602:fc45::/36", "399904"}, + {"2606:2800:420c::/48", "14210"}, + {"2606:cd80::/48", "394727"}, + {"2804:7f68::/32", "271686"}, + {"2a00:18d8:3::/32", "8697"}, + {"2a02:26f0:4d00::/48", "34164"}, + {"2a0b:b980:1::/46", "51920"}, + {"2001:579:c1a4::/38", "22773"}, + {"2001:1248:9989::/45", "11172"}, + {"240a:affc::/32", "146742"}, + {"2620:1d0:5a::/48", "397228"}, + {"2a02:26f7:da05::/46", "20940"}, + {"2001:480:51::/48", "6009"}, + {"2001:da8:27f::/36", "23910"}, + {"2800:440:8106::/48", "27738"}, + {"240a:a75c::/32", "144534"}, + {"240d:c010:77::/44", "139341"}, + {"240e:964:2c00::/38", "133776"}, + {"2607:f4f0::/32", "40581"}, + {"2806:230:204d::/48", "11888"}, + {"2a02:26f7:b5c8::/48", "36183"}, + {"2a02:26f7:e145::/46", "20940"}, + {"2a0a:6f80::/32", "50673"}, + {"2c0f:f500::/32", "327935"}, + {"2001:559:444::/48", "22909"}, + {"240a:aed7::/32", "146449"}, + {"240e:982:7000::/40", "134238"}, + {"2804:2c84::/32", "265224"}, + {"2804:60e8::/32", "269199"}, + {"2a0c:9200::/40", "200924"}, + {"2a0e:b107:10f0::/44", "213105"}, + {"2a10:6d00::/29", "399975"}, + {"240a:ab26::/32", "145504"}, + {"2620:149:a1c::/48", "6185"}, + {"2800:370::/48", "28006"}, + {"2804:56e0::/42", "268029"}, + {"2806:2f0:43a1::/46", "17072"}, + {"2a02:d48:bc::/32", "34913"}, + {"2001:559:8640::/46", "7015"}, + {"240e:438:2820::/43", "140647"}, + {"2600:1417:2::/48", "24319"}, + {"2803:9800:a485::/41", "11664"}, + {"2804:3b6c:e000::/35", "265442"}, + {"2a05:4140:1a1::/48", "211358"}, + {"2a11:3c02::/31", "57844"}, + {"2409:806b:100::/36", "9808"}, + {"240e:44d:1b80::/41", "4134"}, + {"2602:fd5d::/40", "398578"}, + {"2605:37c0::/39", "396469"}, + {"2a00:1cf0::/32", "196724"}, + {"2a00:aea0:600::/40", "12678"}, + {"2a04:4e40:9400::/48", "54113"}, + {"2a0a:1580::/29", "34993"}, + {"2a0e:97c0:694::/44", "210354"}, + {"2001:468:c07::/48", "396955"}, + {"2607:f130::/32", "35916"}, + {"2a02:26f0:1d01::/40", "20940"}, + {"2a00:4040::/48", "48426"}, + {"2a00:ad87:4601::/48", "22216"}, + {"2a0f:ec00:1f::/48", "60781"}, + {"2001:4130:107::/48", "24725"}, + {"2800:160:13c9::/45", "14259"}, + {"2a02:5b40::/31", "59943"}, + {"2001:1680::/29", "9044"}, + {"240a:a4ce::/32", "143880"}, + {"2606:e900::/32", "32444"}, + {"2620:123:2007::/44", "30103"}, + {"2a07:e480:1::/48", "207465"}, + {"2409:8944::/28", "24445"}, + {"2804:1758::/32", "263139"}, + {"2a0f:9340:10::/47", "1299"}, + {"2001:3c8:1701::/48", "23687"}, + {"2001:559:1a6::/47", "7725"}, + {"2400:6280:15::/48", "132876"}, + {"2402:800:547f::/40", "7552"}, + {"2404:e040:c000::/34", "63780"}, + {"2408:8256:3d6a::/48", "17623"}, + {"2804:66d4::/32", "269585"}, + {"2a02:1748::/32", "51184"}, + {"2a10:c640::/48", "211541"}, + {"240d:4000::/21", "133111"}, + {"240e:966:8c00::/35", "4134"}, + {"2800:160:152e::/43", "14259"}, + {"2804:1dbc::/35", "264390"}, + {"2804:2d2c::/32", "52971"}, + {"2804:4f2c::/33", "268309"}, + {"2a07:22c1:31::/48", "212405"}, + {"2001:559:84bf::/48", "33659"}, + {"2001:559:c1fb::/48", "33287"}, + {"2001:678:8a8::/48", "48686"}, + {"2001:df2:9900::/48", "134032"}, + {"2800:68:39::/48", "27947"}, + {"2600:6c10:e44::/44", "20115"}, + {"2603:90b8::/32", "10796"}, + {"2804:1090::/32", "263640"}, + {"2804:184c:104::/32", "61928"}, + {"2806:2f0:12e0::/48", "22884"}, + {"2a02:1f8::/32", "8426"}, + {"2a0c:e640:24::/36", "211876"}, + {"2001:559:23::/48", "33650"}, + {"2001:67c:291c::/48", "211935"}, + {"240a:a61b::/32", "144213"}, + {"2620:11b:e0a4::/47", "202818"}, + {"2800:200:e::/34", "12252"}, + {"2a01:9e02::/29", "41495"}, + {"2a02:26f0:4501::/38", "20940"}, + {"2401:1c00:5100::/34", "38809"}, + {"2604:3840:2::/48", "20061"}, + {"2607:fdb8:8000::/33", "36024"}, + {"2001:ad0:5100::/32", "3327"}, + {"2406:ee80::/32", "55699"}, + {"2600:370f:60a3::/45", "32261"}, + {"2a03:b980:300::/32", "56730"}, + {"2a04:4a45:c::/46", "206067"}, + {"2a0e:c9c0::/29", "50673"}, + {"2a0f:fec0::/29", "47232"}, + {"2001:1a11:55::/42", "42298"}, + {"2a03:57c0::/32", "48159"}, + {"2001:559:4a1::/48", "33659"}, + {"2001:d08::/40", "9534"}, + {"2607:cd80:a000::/36", "6528"}, + {"2800:370:19::/48", "28006"}, + {"2a00:1d36:1140::/40", "9121"}, + {"2a0d:82c7:2::/47", "47787"}, + {"2600:1417:42::/44", "20940"}, + {"2607:fef8:ffe5::/43", "13750"}, + {"2803:83a0::/48", "267745"}, + {"2a03:12c0::/32", "199672"}, + {"2a07:5202::/47", "213208"}, + {"2001:4b20::/55", "34288"}, + {"2804:4c68::/32", "267369"}, + {"2a0b:b582::/48", "43304"}, + {"2001:2b8:e6::/48", "1237"}, + {"2001:559:c4de::/48", "7922"}, + {"2607:f150:ffff::/48", "3601"}, + {"2620:11e:900a::/48", "12196"}, + {"2a01:8640:2::/48", "59711"}, + {"2a0f:6fc2::/32", "51837"}, + {"2001:559:202::/48", "33657"}, + {"240e:44d:7780::/41", "4134"}, + {"2a06:a5c0::/30", "400177"}, + {"2a00:4802:1010::/37", "8717"}, + {"2404:8d02:2041::/40", "9587"}, + {"2405:9800:c919::/46", "45458"}, + {"2804:7cc:100::/48", "28669"}, + {"2804:2690::/32", "263838"}, + {"2804:6fa8::/32", "270675"}, + {"2806:2f0:1000::/46", "22884"}, + {"2a0f:8646:b00c::/31", "25682"}, + {"2001:678:b54::/48", "41268"}, + {"2404:c2c0:4000::/40", "135629"}, + {"2001:4c50::/32", "35244"}, + {"2403:8880::/32", "17964"}, + {"2804:1778::/32", "263146"}, + {"2804:7134::/32", "270774"}, + {"2806:230:4034::/48", "265594"}, + {"2a01:800::/31", "12430"}, + {"2405:7f00:aec0::/35", "133414"}, + {"2800:bf0:a10b::/48", "52257"}, + {"2804:757c::/32", "261050"}, + {"2a02:26f0:7701::/36", "20940"}, + {"2402:800:3555::/42", "7552"}, + {"2a03:a0a0::/46", "39405"}, + {"2c0f:fe38:5::/46", "33771"}, + {"2001:678:564::/48", "56439"}, + {"2600:1480:2100::/37", "20940"}, + {"2607:f1e8::/32", "31939"}, + {"2804:41c::/36", "262416"}, + {"2001:14e0::/32", "12931"}, + {"240a:a6f1::/32", "144427"}, + {"2607:9e80::/35", "397068"}, + {"2620:124:9000::/44", "6838"}, + {"2a01:3f1:3400::/33", "8674"}, + {"2a0e:b704::/46", "210960"}, + {"2001:678:850::/48", "20853"}, + {"2402:4000:1251::/40", "18001"}, + {"2408:8459:fd00::/38", "17816"}, + {"2604:a140:1500::/47", "64658"}, + {"2607:f110:1a::/42", "21889"}, + {"2a05:d050:40c0::/44", "16509"}, + {"2403:0:11c::/48", "65353"}, + {"2804:2980::/32", "53172"}, + {"2001:559:141::/48", "33287"}, + {"2001:4ba3::/32", "24961"}, + {"240a:aaa3::/32", "145373"}, + {"240e:3b5:ec00::/35", "140314"}, + {"2604:4180::/32", "15191"}, + {"2605:5300::/39", "21557"}, + {"2803:1840::/32", "265688"}, + {"2001:500:80::/48", "27299"}, + {"2001:559:71d::/46", "33287"}, + {"2408:8957:8d00::/40", "17816"}, + {"2409:8904:32a0::/39", "24547"}, + {"2a01:77e0::/32", "51088"}, + {"2001:67c:404::/48", "13008"}, + {"240e:3b7:9200::/36", "140317"}, + {"2804:14ac::/32", "263343"}, + {"2a0e:df40::/32", "60117"}, + {"2c0f:f850:dc02::/47", "327979"}, + {"2405:2c40::/32", "45705"}, + {"2804:1b2:4042::/36", "18881"}, + {"2001:559:8573::/48", "33659"}, + {"2401:b080::/41", "133748"}, + {"2402:7a00::/32", "23639"}, + {"2405:6e00:2600::/41", "133612"}, + {"2600:1480:a100::/36", "20940"}, + {"2603:c0e8:1210::/39", "1218"}, + {"2804:7e24::/32", "271605"}, + {"2001:67c:390::/48", "51857"}, + {"2001:4998:ef6b::/48", "36647"}, + {"2800:200:f0d0::/39", "12252"}, + {"2804:14c:ca00::/40", "28573"}, + {"2804:7ef8::/32", "271658"}, + {"2a0e:b107:3f4::/47", "57883"}, + {"2a12:d280::/32", "56958"}, + {"2001:cd8:4781::/32", "4780"}, + {"2404:f4c0:f4cf::/48", "142549"}, + {"240a:a983::/32", "145085"}, + {"2803:c660::/32", "64122"}, + {"2804:6fc::/43", "28158"}, + {"2804:8308::/32", "272172"}, + {"2a00:1e88::/45", "12389"}, + {"2001:678:a18::/48", "43350"}, + {"240e:108:12a0::/39", "4134"}, + {"2a01:c50f:c200::/39", "12479"}, + {"2001:ab7:f000::/36", "15594"}, + {"2001:df6:5e00::/47", "134909"}, + {"2600:80c:100::/40", "701"}, + {"2607:f380:a68::/48", "396310"}, + {"2804:4aa8::/32", "267255"}, + {"2804:808c::/32", "271758"}, + {"2a02:2720::/32", "6663"}, + {"2a03:f80:32::/47", "9009"}, + {"2a0c:dc40::/29", "31370"}, + {"2402:9d80:a20::/41", "131429"}, + {"2403:7200::/32", "9785"}, + {"240a:a96b::/32", "145061"}, + {"240e:3b1:ec00::/35", "140314"}, + {"2620:10c:f014::/48", "33459"}, + {"2607:ff10:fdc2::/38", "10439"}, + {"2800:484:d00::/40", "14080"}, + {"2804:1350::/32", "263528"}, + {"2806:370:8000::/44", "28403"}, + {"2400:dcc0:ad04::/38", "38631"}, + {"2402:e280:200::/48", "134674"}, + {"240a:ad78::/32", "146098"}, + {"2600:9000:1e23::/48", "16509"}, + {"2607:fd48:d00:2::/45", "13536"}, + {"2620:117:0:a::/64", "10564"}, + {"2a04:4e41:24::/43", "54113"}, + {"2a0b:7140:2::/48", "212228"}, + {"2001:559:861f::/48", "33651"}, + {"2605:1980:107::/38", "13951"}, + {"2a02:2a70::/32", "702"}, + {"2620:111:d014::/48", "12025"}, + {"2803:8d00::/32", "27988"}, + {"2a03:1d60::/32", "60294"}, + {"2a03:7700::/32", "34439"}, + {"2a0a:b6c0::/32", "57728"}, + {"2402:79c0:1145::/48", "26415"}, + {"2404:fc00:1001::/45", "45910"}, + {"2001:428:2001:206::/35", "209"}, + {"2001:678:31c::/48", "35213"}, + {"240e:108:92::/48", "4134"}, + {"240e:44d:2380::/41", "4134"}, + {"2600:370f:36c8::/42", "32261"}, + {"2600:6c38:1c7::/44", "20115"}, + {"2804:1ca4:8081::/33", "263010"}, + {"2a00:66c0::/32", "200460"}, + {"2001:559:2ca::/47", "33657"}, + {"2408:8656:3800::/40", "17623"}, + {"2600:6c38:11::/46", "20115"}, + {"2801:17:c001::/48", "272037"}, + {"2803:71a0::/32", "267702"}, + {"2806:230:2054::/48", "265594"}, + {"2a03:d000:9000::/48", "13075"}, + {"240a:a6db::/32", "144405"}, + {"240e:5a:49c0::/38", "140303"}, + {"2804:130c::/39", "263512"}, + {"2a01:6c60::/34", "62217"}, + {"2001:67c:2abc::/48", "199552"}, + {"240a:a831::/32", "144747"}, + {"2804:19a8::/32", "61810"}, + {"2a0f:7600::/32", "43847"}, + {"2001:67c:31c::/48", "47195"}, + {"2401:4900:5aa0::/39", "45609"}, + {"2402:800:32e0::/44", "7552"}, + {"2610:28:f021::/36", "81"}, + {"2804:4870::/39", "267121"}, + {"2806:1018:cd00::/34", "8151"}, + {"2a00:1920::/48", "15866"}, + {"2001:418:1466::/48", "396370"}, + {"240e:983:b00::/48", "134420"}, + {"2804:928::/32", "53102"}, + {"2a02:26f7:d408::/48", "36183"}, + {"2a0c:e641::/32", "209645"}, + {"2a10:40c0::/32", "213299"}, + {"2001:4b98:aaac::/39", "29169"}, + {"2620:10a:d000::/44", "33703"}, + {"2a02:5520::/32", "35600"}, + {"2a0b:a8c0::/47", "13215"}, + {"2a0d:a5c0::/36", "197991"}, + {"240a:a119::/32", "142931"}, + {"240a:a927::/32", "144993"}, + {"2a02:26f7:bec4::/48", "36183"}, + {"2001:559:81a8::/48", "33287"}, + {"2001:4830:c171::/38", "27552"}, + {"2409:8021:3803::/29", "9808"}, + {"2409:8053:1800::/47", "56047"}, + {"2600:370f:7024::/46", "32261"}, + {"2804:45e4:7210::/37", "262567"}, + {"2a01:288::/33", "8717"}, + {"2a04:9d40:f000::/36", "13414"}, + {"2402:800:f9f0::/38", "7552"}, + {"2408:8a02:b110::/42", "9929"}, + {"2804:5e9c::/32", "269044"}, + {"2a02:2510::/32", "44068"}, + {"2a06:fb00:1::/45", "203391"}, + {"2a11:9780::/29", "204790"}, + {"2001:16a2:3e::/39", "39386"}, + {"2402:5680:4000::/36", "133798"}, + {"2600:6c10:20f::/37", "20115"}, + {"2800:bf0:a400::/43", "52257"}, + {"2001:559:5b3::/48", "13367"}, + {"2804:6278::/32", "269299"}, + {"2a10:4140::/29", "206478"}, + {"240a:a1ab::/32", "143077"}, + {"240a:a229::/32", "143203"}, + {"2620:12f:c00d::/46", "395831"}, + {"2804:238::/32", "23106"}, + {"2a03:9c80:8000::/34", "208277"}, + {"2001:559:c500::/48", "33668"}, + {"240a:a5c5::/32", "144127"}, + {"2600:370f:5224::/44", "32261"}, + {"2a0c:9a40:8080::/48", "136620"}, + {"2401:9f00::/32", "9925"}, + {"2402:8100:39ed::/46", "55644"}, + {"240a:aec6::/32", "146432"}, + {"2606:be00::/40", "13768"}, + {"2620:1e0:311::/46", "10801"}, + {"2804:85dc:f001::/36", "272605"}, + {"2c0f:f738:3803::/37", "61317"}, + {"2a03:7240::/40", "56973"}, + {"2001:1248:98e1::/48", "11172"}, + {"2404:bf40:e005::/48", "2764"}, + {"2406:840:feb0::/48", "208753"}, + {"2406:8800:9035::/44", "17465"}, + {"2607:f380:a4f::/48", "32361"}, + {"2804:3f8::/32", "262589"}, + {"2001:1248:8901::/40", "11172"}, + {"240a:aabb::/32", "145397"}, + {"2604:2800::/33", "26793"}, + {"2804:7da0::/32", "271573"}, + {"2a02:bf8:1602::/32", "1239"}, + {"2a02:26f7:d308::/48", "36183"}, + {"2a0e:b100:101::/45", "207556"}, + {"240e:e1:d100::/48", "4811"}, + {"2600:1007:a110::/36", "22394"}, + {"2804:8000::/32", "271723"}, + {"2a04:8d80::/29", "201508"}, + {"2a05:44c0::/32", "32338"}, + {"2a05:5b00::/29", "196881"}, + {"2a0a:2e40:ac01::/46", "206232"}, + {"2a0a:6400::/29", "35202"}, + {"2401:b780:5002::/47", "65435"}, + {"240a:a376::/32", "143536"}, + {"240a:a941::/32", "145019"}, + {"2600:380:f108::/46", "20057"}, + {"2a0f:cd40::/29", "47638"}, + {"2001:428:4005::/37", "209"}, + {"2001:468:2631::/44", "11537"}, + {"2001:480:52::/44", "668"}, + {"2001:550:9b04::/40", "174"}, + {"2602:ffc0::/36", "11080"}, + {"2804:1d9c::/35", "264381"}, + {"2a02:4a20::/32", "30742"}, + {"2001:250:2401::/46", "24356"}, + {"2001:559:8099::/48", "7922"}, + {"2a02:d107:f006::/47", "200088"}, + {"2a0c:a80::/29", "200000"}, + {"2804:3680::/32", "266352"}, + {"2a04:e540::/32", "197938"}, + {"2a0f:d840::/29", "207558"}, + {"2c0f:ed00:100::/44", "328442"}, + {"2402:3dc0:572::/47", "11179"}, + {"240a:ad48::/32", "146050"}, + {"2a02:6900:880c::/48", "43894"}, + {"2001:559:338::/48", "33652"}, + {"2409:803c:100::/37", "9808"}, + {"240e:94a::/29", "4134"}, + {"2806:230:101e::/48", "265594"}, + {"2a02:1390:b000::/40", "21351"}, + {"2a09:e1c1:eff0::/44", "210311"}, + {"2001:559:862c::/48", "33287"}, + {"2001:67c:678::/48", "201816"}, + {"2a0e:1d80:7::/48", "47890"}, + {"2401:d800:9830::/40", "7552"}, + {"2a03:c340::/32", "57324"}, + {"2602:804:4000::/40", "32655"}, + {"2804:3778::/32", "266417"}, + {"2804:3988::/32", "52571"}, + {"2804:4608:8000::/33", "266964"}, + {"2a07:f680::/29", "202311"}, + {"2a0f:8640:b00c::/31", "25682"}, + {"2001:559:c3e1::/48", "33660"}, + {"240a:a5dd::/32", "144151"}, + {"2803:1240::/41", "27855"}, + {"2001:559:c415::/48", "7016"}, + {"2001:dd8:1::/48", "38283"}, + {"2402:e380:31c::/48", "141749"}, + {"2403:9800:c040::/47", "133124"}, + {"2804:2a0c::/32", "264053"}, + {"2a02:26f7:dec9::/46", "20940"}, + {"2a04:5a40::/29", "60311"}, + {"2a07:1780::/29", "57696"}, + {"2a01:c50f:f5c0::/38", "12479"}, + {"2a0a:2842:16::/48", "42962"}, + {"2a0c:3ac0::/48", "46562"}, + {"2a0d:a680::/32", "204609"}, + {"2400:c800:620::/33", "4515"}, + {"240a:a1ce::/32", "143112"}, + {"2602:ff8f:fff::/48", "53274"}, + {"2620:37:c000::/48", "5050"}, + {"2804:57b0::/32", "268080"}, + {"2a07:84c0::/29", "43770"}, + {"2001:1250:ffe0::/43", "22894"}, + {"2405:1c0:6161::/45", "55303"}, + {"2602:fcc3::/48", "399135"}, + {"2800:4f0:50::/40", "28006"}, + {"2804:6658::/32", "269552"}, + {"2a04:4e40:b2f0::/48", "54113"}, + {"2804:14d:688b::/42", "28573"}, + {"2a02:26f7:b99c::/48", "36183"}, + {"2401:df80::/32", "133652"}, + {"240a:a2d9::/32", "143379"}, + {"2a00:86c0:2090::/47", "40027"}, + {"2001:44b8:30c4::/48", "7545"}, + {"2401:d800:5d32::/41", "7552"}, + {"2a01:aee0::/32", "208582"}, + {"2001:559:12b::/48", "33654"}, + {"2001:67c:1b94::/48", "44768"}, + {"2400:cb00:a0f0::/45", "13335"}, + {"2602:fff4::/32", "54869"}, + {"2a00:ef8::/32", "13243"}, + {"2a04:13c5::/32", "61049"}, + {"2001:579:6298::/45", "22773"}, + {"2001:df7:fe80::/48", "149001"}, + {"2406:e000:c11::/44", "23655"}, + {"2409:8030:3900::/31", "9808"}, + {"2607:f798:3000::/32", "812"}, + {"2803:5440:ffff::/48", "264738"}, + {"2804:69f8::/32", "270303"}, + {"2a00:1b11:115::/46", "29152"}, + {"2a02:26f0:3301::/37", "20940"}, + {"2001:559:33a::/48", "33287"}, + {"2600:1011:f110::/36", "6167"}, + {"2800:bf0:69::/43", "52257"}, + {"2001:44b8:406e::/48", "7545"}, + {"2400:b380::/32", "38843"}, + {"2404:bac0::/32", "131642"}, + {"240a:ab33::/32", "145517"}, + {"2804:5248:9000::/33", "268508"}, + {"2a01:a680::/32", "59545"}, + {"2001:44b8:30ce::/48", "7545"}, + {"2407:98c0::/32", "139924"}, + {"2800:a10::/34", "11014"}, + {"2a02:26f7:d704::/48", "36183"}, + {"2a02:c080::/29", "25133"}, + {"2a0b:88c0::/29", "206728"}, + {"2409:8c54:1850::/37", "56040"}, + {"240a:a05c::/32", "142742"}, + {"240e:c:7000::/37", "136197"}, + {"2a02:2971::/29", "43847"}, + {"2a02:6a80:530e::/48", "197997"}, + {"2001:1a11:10c::/48", "8781"}, + {"2001:4b6c::/30", "12635"}, + {"2409:8055:3d::/46", "56040"}, + {"2800:110:1021::/45", "4270"}, + {"2a00:6200::/29", "21502"}, + {"2a01:367:deae::/34", "30823"}, + {"2a0b:5800::/32", "62167"}, + {"2408:8459:a050::/38", "17816"}, + {"2a04:8040::/29", "44527"}, + {"2408:8956:5400::/40", "17622"}, + {"240a:a748::/32", "144514"}, + {"2610:108:f000::/48", "13506"}, + {"2804:191c::/32", "52641"}, + {"2804:2b78:8000::/33", "52468"}, + {"2a02:6680:f1e0::/43", "16116"}, + {"2001:4220:8011::/46", "24835"}, + {"2402:800:7e60::/40", "7552"}, + {"2804:14d:4487::/44", "28573"}, + {"2a00:10d8:10::/48", "29405"}, + {"2001:559:84f1::/48", "33659"}, + {"2001:559:c318::/48", "33651"}, + {"2001:678:4c8::/48", "41731"}, + {"2001:ee0:306::/41", "135905"}, + {"240e:679:c200::/39", "140329"}, + {"2602:803:9003::/44", "17138"}, + {"2604:aa80::/32", "46276"}, + {"2804:e94:700::/43", "262468"}, + {"2a01:9140:cccc::/48", "52122"}, + {"2604:d600:63b::/41", "32098"}, + {"2a0b:59c0::/31", "204945"}, + {"2a0c:b642:321::/40", "206499"}, + {"2a0d:2581:fffc::/48", "209261"}, + {"2a0e:400::/25", "210278"}, + {"2a0f:8ac1:d452::/48", "205749"}, + {"2001:678:970::/48", "31317"}, + {"2001:67c:290::/48", "42195"}, + {"2001:c20:4871::/48", "9255"}, + {"2001:559:31::/46", "7922"}, + {"2001:df1:3580::/48", "135985"}, + {"2600:6c38:202::/43", "20115"}, + {"2606:6040::/32", "399871"}, + {"2a01:300:71::/29", "9009"}, + {"2a09:1480::/39", "35704"}, + {"2001:559:8088::/48", "33657"}, + {"2400:6280:101::/48", "132280"}, + {"2800:400:4000::/48", "27668"}, + {"2804:148c::/32", "263336"}, + {"2001:559:8354::/48", "22909"}, + {"2620:8b:4000::/48", "36407"}, + {"2a03:b880::/29", "47297"}, + {"2001:559:8695::/48", "33287"}, + {"2001:dec::/48", "132797"}, + {"2405:e280:2080::/48", "55769"}, + {"2001:b200:2300::/35", "9505"}, + {"2405:1c0:6441::/46", "55303"}, + {"2804:1780::/32", "263151"}, + {"2a02:26f7:d689::/42", "20940"}, + {"2800:bf0:71::/46", "27947"}, + {"2001:559:29e::/48", "33490"}, + {"2001:4479:8000::/35", "7545"}, + {"2606:4700:140::/36", "13335"}, + {"2620:135:604f::/43", "22697"}, + {"2806:230:2057::/48", "11888"}, + {"2a01:1b0::/32", "31477"}, + {"2001:250:2c2d::/46", "138381"}, + {"2a01:53c0:fffa::/45", "54994"}, + {"2a03:9900::/40", "8990"}, + {"2001:dc8::/47", "23902"}, + {"2401:14c0:5::/42", "136531"}, + {"2408:8957:f440::/40", "17622"}, + {"2803:7be0::/32", "270093"}, + {"2408:8206:a840::/31", "4808"}, + {"2620:78:2000::/48", "26331"}, + {"2804:61a4::/32", "269247"}, + {"2a0a:21c0::/29", "30972"}, + {"2400:cb00:245::/44", "13335"}, + {"2a04:e702:980::/29", "48849"}, + {"2a09:b640::/29", "209255"}, + {"2401:4900:5690::/39", "45609"}, + {"2804:8274::/32", "272522"}, + {"2001:559:37e::/48", "33651"}, + {"2001:df4:200::/47", "133967"}, + {"2001:4878:b136::/48", "12222"}, + {"2409:8051:3002::/40", "56047"}, + {"240a:a074::/32", "142766"}, + {"240e:438:2020::/43", "140647"}, + {"2a00:1fe8::/32", "34154"}, + {"2403:20c0:2::/47", "137945"}, + {"2803:c580::/32", "55259"}, + {"2804:e14::/32", "52543"}, + {"2a07:fe00::/29", "3214"}, + {"2001:253:125::/48", "142091"}, + {"2001:1a11:65::/44", "42298"}, + {"2408:8459:1a10::/42", "17623"}, + {"2600:2:d10::/44", "399741"}, + {"2401:dac0::/32", "13984"}, + {"2600:370f:3641::/45", "32261"}, + {"2605:8000:25::/40", "4261"}, + {"2804:8218::/32", "272498"}, + {"2a0d:3841:1000::/48", "57629"}, + {"2a0e:e704:44::/48", "212971"}, + {"2001:250:2c2f::/39", "23910"}, + {"2405:2d00::/32", "58877"}, + {"2409:8b00::/31", "56048"}, + {"240e:624::/30", "4134"}, + {"2804:7a58::/32", "271361"}, + {"2a03:1100::/32", "42903"}, + {"2001:250:343f::/41", "138393"}, + {"2001:559:c4c6::/48", "33287"}, + {"2409:804c:3900::/33", "9808"}, + {"2409:8924:4500::/38", "56046"}, + {"240a:a33f::/32", "143481"}, + {"240a:aa0b::/32", "145221"}, + {"2804:14c:4500::/40", "28573"}, + {"2804:6924::/32", "270251"}, + {"2401:d800:2f10::/42", "7552"}, + {"2620:83::/48", "5787"}, + {"2804:2490::/32", "264230"}, + {"2804:4ef8:7001::/32", "268295"}, + {"2a02:2698:5400::/44", "41843"}, + {"2a02:26f7:cdc8::/48", "36183"}, + {"2409:8e80:9000::/34", "56040"}, + {"2620:67::/48", "22303"}, + {"2a02:2818:7::/48", "197481"}, + {"2a0f:9885::/30", "208861"}, + {"2001:559:5ce::/48", "33287"}, + {"2001:48c8::/45", "29791"}, + {"2401:d800:dfc0::/42", "7552"}, + {"2409:8055:51::/46", "56040"}, + {"2600:80a:423::/41", "701"}, + {"2a02:26f7:e5c8::/48", "36183"}, + {"2a02:6ea0:e600::/36", "60068"}, + {"2a0b:9fc0:1::/64", "13094"}, + {"2001:df4:2d00::/48", "135905"}, + {"2404:df40::/32", "24249"}, + {"240a:14:e90::/44", "9605"}, + {"2607:f428:9300::/44", "19115"}, + {"2800:160:1718::/42", "14259"}, + {"2a02:2698:2800::/38", "41668"}, + {"2001:1248:571d::/46", "11172"}, + {"240a:aa8c::/32", "145350"}, + {"2620:171:17::/44", "42"}, + {"2806:2f0:2441::/48", "22884"}, + {"2a01:668::/32", "13105"}, + {"2a07:3c80:200::/40", "209322"}, + {"2a07:a880:4701::/48", "3399"}, + {"2a09:580::/29", "209715"}, + {"2804:548:200::/32", "53005"}, + {"2804:5db4::/32", "268987"}, + {"2804:6c50::/32", "270459"}, + {"2a01:110:e051::/35", "6584"}, + {"2001:559:4a7::/48", "33660"}, + {"2001:67c:8c::/48", "39686"}, + {"2401:4900:4d00::/44", "45609"}, + {"2a02:27b8:4000::/48", "49278"}, + {"2a0a:54c1:31::/41", "62240"}, + {"2001:559:c414::/48", "7015"}, + {"2408:8247::/35", "140726"}, + {"240a:afdf::/32", "146713"}, + {"2803:4e0::/32", "262213"}, + {"2804:47c::/32", "262437"}, + {"2a00:4802:1000::/44", "13124"}, + {"2001:559:8080::/48", "7922"}, + {"2804:7f7::/35", "10429"}, + {"2806:230:102f::/48", "11888"}, + {"2606:2800:4065::/48", "15133"}, + {"2a0e:b107:12f2::/48", "211722"}, + {"2a10:4480::/29", "399975"}, + {"240e:67f:c200::/39", "140329"}, + {"2600:6c10:641::/46", "20115"}, + {"2607:f8f0:600::/48", "271"}, + {"2804:5c88:1d00::/32", "268914"}, + {"2001:480:241::/43", "668"}, + {"2001:559:8736::/47", "7015"}, + {"2604:5e80:21::/32", "8"}, + {"2a01:7c60::/32", "201198"}, + {"2001:559:c0b0::/45", "7922"}, + {"2804:d3c:8001::/39", "52613"}, + {"2a0e:3a80::/32", "47454"}, + {"2409:874c::/32", "9808"}, + {"2409:8924:8500::/38", "56046"}, + {"240e:925::/36", "132147"}, + {"2400:54a0:1020::/48", "34927"}, + {"2a04:16c0:201::/29", "48921"}, + {"2607:700::/37", "22343"}, + {"2620:138:b000::/40", "16740"}, + {"2806:2f0:4521::/46", "17072"}, + {"2a09:11c0:332::/44", "211352"}, + {"2001:559:10d::/46", "7922"}, + {"2404:f300:12::/32", "56258"}, + {"2607:6700::/32", "40464"}, + {"2804:6464::/32", "262725"}, + {"2001:df0:be::/48", "7467"}, + {"240a:a86e::/32", "144808"}, + {"240a:ac17::/32", "145745"}, + {"2804:6ee0::/32", "270624"}, + {"2a00:eb0:100::/48", "61201"}, + {"2a02:b8:234::/32", "25273"}, + {"2a02:26f7:ba04::/48", "36183"}, + {"2a0c:9a40:101a::/47", "202479"}, + {"2a0e:b107:17c0::/44", "210537"}, + {"2001:67c:2f48::/48", "51273"}, + {"2400:7400:61::/48", "23736"}, + {"2407:fb40::/32", "132767"}, + {"2408:8956:8600::/40", "17622"}, + {"2605:2b40:4000::/34", "394851"}, + {"2804:6a04::/41", "270306"}, + {"2001:da8:ef00::/48", "138373"}, + {"2400:a980:2d00::/38", "133111"}, + {"2402:800:3371::/44", "7552"}, + {"2406:4ac0::/32", "55891"}, + {"2001:559:3a6::/48", "7015"}, + {"2409:8907:7320::/37", "24547"}, + {"240a:a905::/32", "144959"}, + {"2606:9b00::/32", "35894"}, + {"2620:1ec:34::/48", "8068"}, + {"2a00:4802:3020::/39", "8717"}, + {"2a09:7e40::/29", "35437"}, + {"2a09:dc04::/30", "35916"}, + {"2c0f:fac8::/32", "37395"}, + {"2001:b90::/32", "15919"}, + {"2607:ffd0:703::/48", "13767"}, + {"2803:bc40::/32", "52468"}, + {"2a10:eec0::/44", "7342"}, + {"2402:800:5871::/44", "7552"}, + {"2620:12f:c007::/44", "395831"}, + {"2804:4024:2030::/35", "265937"}, + {"2a01:18::/32", "29240"}, + {"2a0c:c647:fe05::/39", "50489"}, + {"2a0d:78c0::/29", "49191"}, + {"2001:559:c254::/48", "33662"}, + {"240e:67d:1000::/37", "140330"}, + {"2804:2634::/35", "264332"}, + {"2804:36d8::/32", "266376"}, + {"2a02:2090:e800::/48", "48287"}, + {"2a03:e581:4::/48", "201057"}, + {"2a09:7c43::/32", "48108"}, + {"2001:559:8398::/48", "7016"}, + {"2401:a840:400::/32", "136917"}, + {"2607:3380:1000::/40", "395152"}, + {"2001:1b28:405::/48", "51103"}, + {"2401:ee00:701::/36", "23951"}, + {"240a:a17d::/32", "143031"}, + {"2001:1260:240::/40", "28536"}, + {"2406:2b40::/32", "131937"}, + {"2408:864e::/27", "4837"}, + {"240e:44d:4d40::/42", "140357"}, + {"2a00:7820::/32", "34863"}, + {"2405:1c0:6471::/46", "55303"}, + {"2803:6900:506a::/48", "52423"}, + {"2804:5950::/32", "268182"}, + {"2804:705c::/32", "270722"}, + {"2a05:f140::/29", "200896"}, + {"2409:8b34:aa00::/33", "9808"}, + {"2a0a:48c0::/32", "39324"}, + {"2401:ed80::/32", "63932"}, + {"2804:580c::/32", "268103"}, + {"2804:5f44::/32", "269088"}, + {"2600:1406:d001::/37", "20940"}, + {"2605:e000:1c00::/32", "20001"}, + {"2804:7d20::/32", "271540"}, + {"2a02:26f7:b605::/46", "20940"}, + {"2a02:26f7:c68a::/48", "36183"}, + {"2a02:4540:9000::/43", "197207"}, + {"2a04:2080::/29", "34758"}, + {"2001:4408:5b00::/45", "55824"}, + {"2801:80:19f0::/48", "265392"}, + {"2803:6900:561::/48", "52423"}, + {"2a02:c0::/32", "39029"}, + {"2a03:2880:f26a::/45", "32934"}, + {"2001:c20:4896::/44", "3758"}, + {"240a:ace1::/32", "145947"}, + {"2600:3001:12::/42", "13649"}, + {"2804:46d4:2::/32", "267014"}, + {"2a0b:4340:a2::/44", "205532"}, + {"2001:67c:14c8::/47", "29478"}, + {"2001:480:331::/48", "2621"}, + {"2404:b980::/35", "62240"}, + {"2409:8924:4900::/38", "56046"}, + {"240e:967:ea00::/39", "133776"}, + {"2a03:1ac0:2e01::/40", "9049"}, + {"2a0c:8840:1000::/36", "211453"}, + {"2001:fd8:b300::/42", "132199"}, + {"240a:acba::/32", "145908"}, + {"2804:4a2c::/32", "267222"}, + {"2408:8356::/28", "17816"}, + {"2409:8014:100a::/45", "56044"}, + {"2409:8c71::/29", "9808"}, + {"240e:44d:4380::/41", "4134"}, + {"2610:b0:40dc::/47", "3573"}, + {"2804:6878::/32", "269694"}, + {"2001:559:814d::/48", "13367"}, + {"2402:800:bd50::/42", "7552"}, + {"2406:8600:efaf::/48", "45915"}, + {"2804:6568::/32", "269488"}, + {"2a02:26f7:46::/48", "36183"}, + {"2a0b:9580::/32", "199324"}, + {"2001:520:1055::/46", "8103"}, + {"2400:9380:8ec0::/44", "136167"}, + {"2406:3000::/46", "4657"}, + {"2408:8756:af6::/37", "136958"}, + {"2804:1660::/32", "52560"}, + {"2a00:e90::/32", "8400"}, + {"2a0b:e84::/30", "206537"}, + {"2804:4024::/34", "265937"}, + {"2a02:26f7:e301::/46", "20940"}, + {"2a02:e981:32::/44", "19551"}, + {"2a10:6880::/29", "204790"}, + {"2a11:bc40::/29", "211823"}, + {"2001:559:c0fc::/48", "7922"}, + {"2001:678:de4::/48", "57632"}, + {"240d:c010::/47", "132203"}, + {"2604:d600:b000::/33", "32098"}, + {"2a0b:180::/29", "43872"}, + {"2001:ee0:7ec0::/32", "45899"}, + {"2806:230:2040::/48", "265594"}, + {"2a02:26f7:dd84::/48", "36183"}, + {"2a09:1c00::/29", "209891"}, + {"2001:1248:5662::/45", "11172"}, + {"2401:d800:9df0::/38", "7552"}, + {"2602:ffa2::/36", "2386"}, + {"2001:559:349::/48", "33652"}, + {"2001:1a10:d00::/38", "8781"}, + {"2405:e440::/32", "132139"}, + {"2804:506c::/32", "268388"}, + {"2a0e:bac0::/29", "33770"}, + {"2408:8456:9040::/38", "17816"}, + {"2409:8c1f:27b0::/33", "9808"}, + {"240a:a477::/32", "143793"}, + {"2600:6c34:1e::/48", "33588"}, + {"2604:10c0::/47", "40034"}, + {"2804:154c:500f::/43", "263382"}, + {"2804:5714::/32", "268042"}, + {"2a02:26f7:e70c::/48", "36183"}, + {"2400:a980:40fc::/46", "38587"}, + {"2409:896a:1e00::/39", "9808"}, + {"2001:a10:186::/32", "8308"}, + {"2603:4:1000::/44", "44273"}, + {"2603:6033::/32", "10796"}, + {"2804:954:407::/38", "263073"}, + {"2804:1f1c::/32", "265235"}, + {"2804:2164::/32", "264552"}, + {"2804:2918::/32", "263997"}, + {"2a00:8740:600::/40", "211282"}, + {"2a09:bac0:108::/48", "395747"}, + {"2001:550:1:305::/39", "174"}, + {"2401:2700::/47", "9286"}, + {"2403:6a00::/32", "18239"}, + {"2405:c0:70::/48", "138881"}, + {"240a:acca::/32", "145924"}, + {"2607:fdf0:5eb6::/47", "8008"}, + {"2402:800:558d::/43", "7552"}, + {"2602:fc15::/44", "142632"}, + {"2605:c600::/32", "33097"}, + {"2a02:26f7:c3ca::/47", "20940"}, + {"2a0c:b540::/32", "62188"}, + {"2001:49d0:180::/42", "15116"}, + {"2600:c14::/32", "13790"}, + {"2607:fe28:5020::/45", "53347"}, + {"2a00:6901:e002::/47", "20926"}, + {"2a02:26f7:60::/48", "36183"}, + {"2c0f:ed68:ff02::/40", "328170"}, + {"2001:559:8538::/48", "33651"}, + {"2401:d800:f140::/42", "7552"}, + {"2605:2880::/48", "18907"}, + {"2a00:9f00::/44", "29314"}, + {"2a03:5a00:10::/48", "57489"}, + {"2a0f:93c1:1::/42", "62240"}, + {"2a10:21c0:4001::/48", "28885"}, + {"2a04:4e40:c400::/47", "54113"}, + {"2a0a:e5c0:23::/45", "209898"}, + {"2a0c:7000::/29", "57508"}, + {"2a0d:9f00::/32", "49821"}, + {"2a0e:7040::/29", "206766"}, + {"2600:140a:2001::/35", "20940"}, + {"2620:be:4000::/48", "394068"}, + {"2001:1250:ffc0::/44", "22894"}, + {"2001:4c08:200c::/43", "3356"}, + {"2404:fbc0::/48", "63734"}, + {"2604:69c0::/47", "18439"}, + {"2001:559:8200::/48", "33659"}, + {"2001:67c:134::/48", "12643"}, + {"2001:67c:1354::/48", "212469"}, + {"240a:ac21::/32", "145755"}, + {"2602:107:2510::/48", "20115"}, + {"2606:5780::/32", "54579"}, + {"2a02:ee80:4087::/43", "3573"}, + {"2400:8b00:1000::/44", "45727"}, + {"240e:fb:a000::/35", "136200"}, + {"2a02:26f7:1a::/48", "36183"}, + {"2001:df5:d680::/48", "141676"}, + {"240d:c010:54::/48", "139341"}, + {"2a02:26f7:f580::/48", "36183"}, + {"2a11:e580::/29", "204790"}, + {"2001:559:4fd::/48", "13367"}, + {"2409:1::/28", "55824"}, + {"240a:a8bb::/32", "144885"}, + {"2600:100d:fe00::/44", "6167"}, + {"2602:fd7d:500::/36", "16925"}, + {"2804:37c4:8400::/33", "266435"}, + {"2a00:c3a0::/32", "51349"}, + {"2a02:ee80:40d8::/39", "3573"}, + {"2407:6a00::/32", "18055"}, + {"2804:843c::/32", "272248"}, + {"2001:4458::/32", "4818"}, + {"2600:370f:7028::/43", "32261"}, + {"2804:4198::/32", "267443"}, + {"2a02:26f7:c385::/46", "20940"}, + {"2a0f:4f00::/29", "62412"}, + {"2001:1900:230f::/48", "10753"}, + {"2402:9500:8001::/33", "55720"}, + {"2600:1003:a000::/44", "6167"}, + {"2602:fc23:140::/44", "210631"}, + {"2a02:2e02:b10::/41", "12479"}, + {"2a0a:7d80:8::/48", "25106"}, + {"2001:678:3c8::/48", "34516"}, + {"2001:4268::/39", "15964"}, + {"2403:3200::/32", "18268"}, + {"2409:805c:3091::/42", "9808"}, + {"240a:a05b::/32", "142741"}, + {"2804:40:c000::/36", "28657"}, + {"2a02:2698:2000::/42", "51645"}, + {"2001:43f8:5::/48", "328325"}, + {"2400:adc0:c010::/47", "9541"}, + {"2402:800:581d::/42", "7552"}, + {"2602:fc46::/36", "400005"}, + {"2602:fc5d:252::/48", "399866"}, + {"2a03:2880:f122::/43", "32934"}, + {"2001:1248:8724::/43", "11172"}, + {"2404:1b00::/32", "55912"}, + {"240e:848:80::/43", "140553"}, + {"2620:10a:8023::/48", "27299"}, + {"2804:585c::/32", "268124"}, + {"2a02:26f7:cbc5::/46", "20940"}, + {"2001:559:ea::/45", "20214"}, + {"2001:559:c4df::/48", "33491"}, + {"2804:18d8::/32", "61583"}, + {"2a0a:3507::/48", "57327"}, + {"2a06:45c0::/32", "200425"}, + {"2001:559:86c2::/48", "7015"}, + {"2402:800:998d::/43", "7552"}, + {"2600:140f:2601::/39", "20940"}, + {"2620:f:a::/48", "3629"}, + {"2804:11b4::/32", "263433"}, + {"2a0f:e280::/29", "50629"}, + {"2404:d200::/32", "17766"}, + {"2a0f:2100:171::/48", "62240"}, + {"2001:410:2002::/40", "10965"}, + {"2001:df7:f280::/48", "138277"}, + {"2604:c180::/32", "32882"}, + {"2804:5cc4::/32", "268929"}, + {"2806:320::/39", "28438"}, + {"2400:1c00:13::/48", "3758"}, + {"2a0d:2406:d00::/44", "202418"}, + {"2a0e:aac4::/32", "212675"}, + {"2a10:2f01:360::/44", "56894"}, + {"2a10:3bc0::/29", "204790"}, + {"2001:559:8554::/48", "7016"}, + {"2401:3bc0:701::/36", "137409"}, + {"2606:9500::/39", "19893"}, + {"2804:4d3c:a38::/41", "267420"}, + {"2620:2d:4005::/46", "41231"}, + {"2804:1868::/32", "61930"}, + {"2a02:6b8:82::/29", "208722"}, + {"2a03:3c00::/32", "20847"}, + {"2001:3e0::/34", "10013"}, + {"2001:da8:3012::/42", "24358"}, + {"240a:aa11::/32", "145227"}, + {"240a:ada4::/32", "146142"}, + {"2800:2e0::/32", "11081"}, + {"2801:c4:13::/48", "265533"}, + {"2804:874:8000::/33", "262373"}, + {"2804:5d14::/38", "268949"}, + {"2a05:dfc7:dfc7::/44", "204136"}, + {"2a0e:46c4:10a::/48", "142635"}, + {"2001:253:13a::/45", "38272"}, + {"2001:1388:8a46::/48", "264684"}, + {"240a:af26::/32", "146528"}, + {"2a0c:1a40:1::/48", "48362"}, + {"2a0d:5600:60::/48", "9009"}, + {"2001:569::/44", "852"}, + {"2a01:1c8::/32", "15699"}, + {"2405:7f00:a1a0::/38", "133414"}, + {"2801:1e:3000::/48", "267893"}, + {"2804:6808:2000::/32", "269666"}, + {"2602:fbec::/36", "211535"}, + {"2607:f428:91d0::/44", "20115"}, + {"2a02:2110::/32", "57910"}, + {"2402:800:5471::/44", "7552"}, + {"2406:e500::/47", "58593"}, + {"2804:62f0:c102::/35", "269329"}, + {"2a00:a680::/32", "61174"}, + {"2001:559:3d5::/48", "33651"}, + {"2600:1409:7801::/32", "20940"}, + {"2800:600::/39", "52323"}, + {"2a0e:f200:174::/48", "30633"}, + {"2001:df2:d900::/48", "18403"}, + {"2405:12c0::/32", "135775"}, + {"2001:f40:12::/32", "9930"}, + {"2400:d580:a0::/47", "131587"}, + {"2604:81c0:3d5c::/48", "396422"}, + {"2c0f:eef0:27::/48", "15695"}, + {"2001:df3:802::/47", "22787"}, + {"2401:ee00:e1::/39", "23951"}, + {"240a:a992::/32", "145100"}, + {"240e:45c:aa00::/35", "131285"}, + {"2600:1409:6801::/37", "20940"}, + {"2606:5b80:2157::/32", "22612"}, + {"2a02:26f7:efc0::/48", "36183"}, + {"2a0c:f47::/32", "49436"}, + {"2a0c:2140::/29", "31617"}, + {"2001:250:7011::/46", "24369"}, + {"2001:67c:1818::/48", "3303"}, + {"2401:4900:5c70::/44", "45609"}, + {"2604:6d00:2400::/48", "36223"}, + {"2804:68c4:e000::/36", "269714"}, + {"2001:678:f20::/48", "211551"}, + {"2001:1320::/32", "27733"}, + {"240e:b58::/24", "4134"}, + {"2001:500:3e5::/48", "26134"}, + {"2001:559:c39f::/48", "33651"}, + {"2001:678:d5c::/48", "12552"}, + {"2804:46f0:c1::/32", "267021"}, + {"2401:4900:4c10::/44", "45609"}, + {"240a:ae5d::/32", "146327"}, + {"2604:f980:4360::/44", "19957"}, + {"2800:160:18d4::/44", "14259"}, + {"2a04:cec0::/35", "5410"}, + {"2a05:e186::/31", "200941"}, + {"2a0f:5b80::/29", "204790"}, + {"2a10:13c0:da7a::/48", "212238"}, + {"240e:45c:8600::/35", "131285"}, + {"2806:31d::/32", "18734"}, + {"2a0b:d0c0::/29", "51178"}, + {"2001:1248:9f00::/42", "11172"}, + {"2404:ccc0::/32", "139021"}, + {"240e:438:2e20::/43", "140647"}, + {"2800:bf0:80c6::/48", "27947"}, + {"2804:1f32::/32", "265994"}, + {"2001:df0:5080::/48", "136379"}, + {"2604:3d09:f000::/29", "6327"}, + {"2a0e:46c4:107::/48", "142419"}, + {"2001:67c:29a8::/48", "42168"}, + {"2001:1248:593f::/41", "11172"}, + {"240a:a864::/32", "144798"}, + {"240a:ab76::/32", "145584"}, + {"240a:ad61::/32", "146075"}, + {"2001:559:374::/47", "7015"}, + {"2001:fd8:b330::/44", "4775"}, + {"2409:8907:7820::/39", "24547"}, + {"240a:ab08::/32", "145474"}, + {"240a:ac13::/32", "145741"}, + {"240e:6b9:1000::/36", "4134"}, + {"2607:f3a0:a006::/48", "399814"}, + {"2804:14d:cc00::/40", "28573"}, + {"2a02:26f7:cd49::/46", "20940"}, + {"2a02:26f7:db49::/42", "20940"}, + {"2408:8310::/30", "4837"}, + {"2408:8456:1900::/42", "17622"}, + {"240a:aae9::/32", "145443"}, + {"2803:8920:7000::/32", "266673"}, + {"2a00:9ce0::/32", "44891"}, + {"2001:67c:2968::/48", "33907"}, + {"2001:e60:d3a0::/45", "4766"}, + {"240e:979:6e00::/40", "134770"}, + {"2806:230:302a::/48", "265594"}, + {"2a02:3d8::/32", "39093"}, + {"2001:470:f6::/48", "13925"}, + {"2001:559:80f3::/45", "22909"}, + {"2001:4138::/31", "15533"}, + {"2404:3d00:4136::/47", "21433"}, + {"2406:daa0:2040::/44", "16509"}, + {"2409:801e:3003::/45", "24400"}, + {"2620:107:9064::/48", "18747"}, + {"2804:5388::/32", "268590"}, + {"2a01:4180::/33", "200517"}, + {"2a02:26f0:b201::/37", "20940"}, + {"2a07:36c0::/29", "57795"}, + {"2a01:e8::/32", "25473"}, + {"2404:a00::/32", "18121"}, + {"240a:acd7::/32", "145937"}, + {"2600:1403:6c01::/32", "20940"}, + {"2620:171:a00::/44", "42"}, + {"2604:d600:45::/37", "32098"}, + {"2a0c:d540:1111::/48", "210896"}, + {"2a0c:e644::/31", "38136"}, + {"2001:559:405::/48", "7016"}, + {"2404:1b8::/32", "9794"}, + {"2600:1417:4c::/47", "24319"}, + {"2a00:a080::/32", "15557"}, + {"2a01:a200::/32", "41811"}, + {"2a02:26f7:e94d::/42", "20940"}, + {"2001:250:84f::/43", "138182"}, + {"2001:57a:510::/36", "22773"}, + {"2001:e60:a408::/42", "4766"}, + {"2400:fc00::/42", "45773"}, + {"2405:2900::/36", "132198"}, + {"2405:f080:1602::/48", "136907"}, + {"2407:3000:7::/41", "17707"}, + {"2001:253:128::/48", "142094"}, + {"2001:4d80::/33", "5606"}, + {"2804:6fc:cfff::/34", "28158"}, + {"2409:801f:3009::/45", "9808"}, + {"2600:1403:6401::/36", "20940"}, + {"2603:4:1500::/48", "44273"}, + {"2620:119:5015::/44", "13443"}, + {"240a:abdd::/32", "145687"}, + {"2606:5000:5e00::/32", "209"}, + {"2a01:c50f:9dc0::/38", "12479"}, + {"2401:8a40:1::/46", "45326"}, + {"2a02:6c20:8::/36", "207167"}, + {"2001:67c:5d4::/48", "8422"}, + {"2604:2e8b:e000::/35", "30036"}, + {"2804:2250:7040::/32", "262756"}, + {"2a01:280:310::/48", "1257"}, + {"2a02:26f7:92::/48", "36183"}, + {"2403:f500::/34", "10103"}, + {"2406:e001:5800::/34", "23655"}, + {"2409:8c04:110e::/43", "24547"}, + {"240e:5:2000::/35", "58542"}, + {"2602:fdc7::/36", "397636"}, + {"2800:200:b450::/40", "12252"}, + {"2804:38c4::/32", "266500"}, + {"2a01:678::/29", "29608"}, + {"2a02:b60:4000::/45", "44217"}, + {"2a02:26f7:b3::/48", "20940"}, + {"2a0e:4d80::/29", "208882"}, + {"2a0e:d640::/29", "208372"}, + {"2001:559:8378::/48", "33652"}, + {"2001:678:334::/48", "48031"}, + {"2402:b80::/32", "134001"}, + {"2408:8459:c910::/42", "17623"}, + {"2600:140f:1a01::/39", "20940"}, + {"2a0b:ec00::/29", "34373"}, + {"2a0e:7340::/29", "60843"}, + {"2a10:1b80::/32", "8896"}, + {"2a11:580::/29", "62206"}, + {"2400:5200:c00::/40", "55410"}, + {"2600:370f:73a3::/45", "32261"}, + {"2607:f8f0:614::/48", "393249"}, + {"2606:f900:9e01::/34", "812"}, + {"2607:f140:a000::/48", "393282"}, + {"2a00:a160::/32", "60592"}, + {"2a0c:e300::/30", "198985"}, + {"2a0f:ca87:6::/48", "208421"}, + {"2620:1f7:2800::/37", "2686"}, + {"2804:5774::/32", "268066"}, + {"2a00:7420::/33", "60893"}, + {"2a04:4e40:7600::/48", "54113"}, + {"2a07:9380::/32", "50840"}, + {"2001:18c8:800::/40", "54111"}, + {"2001:40f0::/32", "15997"}, + {"2402:800:5555::/42", "7552"}, + {"2600:370f:7565::/40", "32261"}, + {"2803:1a00::/37", "262186"}, + {"2804:7f50::/32", "271680"}, + {"2a0d:2904::/44", "205651"}, + {"2001:67c:3dc::/48", "207696"}, + {"2001:df4:d000::/48", "59216"}, + {"2408:84f3:3050::/44", "17816"}, + {"240e:44d:7b40::/42", "140355"}, + {"2607:fee8::/32", "7078"}, + {"2620:62:4000::/46", "30045"}, + {"2001:1998:650::/40", "7843"}, + {"2408:8456:ea40::/39", "17816"}, + {"2a00:dd8:1::/48", "15994"}, + {"2001:678:9c8::/48", "56796"}, + {"2001:da8:245::/48", "23910"}, + {"2804:5154:a0::/39", "268445"}, + {"2804:5470::/32", "268650"}, + {"2a02:26f0:5901::/37", "20940"}, + {"2a12:fc00::/29", "204790"}, + {"2001:4060:4053::/32", "6772"}, + {"2001:b000:590::/47", "131660"}, + {"2408:8456:9e10::/42", "134543"}, + {"2600:c0d::/32", "14742"}, + {"2a0a:340:aa00::/40", "48043"}, + {"240e:958:2000::/40", "140527"}, + {"2804:2248::/32", "264602"}, + {"2a0c:9a40:8090::/44", "20473"}, + {"2001:1490:2::/40", "8895"}, + {"2400:51a0:e080::/44", "211946"}, + {"2404:8c80::/32", "55933"}, + {"2804:5ad4::/32", "268799"}, + {"2001:808:e000::/31", "8364"}, + {"2401:bbc0::/32", "133527"}, + {"2600:1408:9c01::/48", "20940"}, + {"2a02:ee80:4250::/47", "21433"}, + {"2607:9b80:820::/40", "46558"}, + {"2804:b0c:e001::/35", "52935"}, + {"2804:28d4::/32", "263983"}, + {"2a02:88d:8130::/44", "48695"}, + {"2001:559:85d6::/48", "33661"}, + {"2001:da8:203::/48", "24351"}, + {"2001:559:c4f6::/44", "7922"}, + {"2001:4b38::/32", "25220"}, + {"2a05:4f40::/30", "29485"}, + {"2001:1248:a469::/45", "11172"}, + {"2a01:5ec0:7000::/36", "44244"}, + {"2600:1416:1001::/36", "20940"}, + {"2603:c002:1910::/38", "31898"}, + {"2804:13d8:100::/32", "262669"}, + {"2a06:5fc0::/29", "212144"}, + {"2c0f:f5c0:391::/37", "29465"}, + {"2001:678:230::/48", "1102"}, + {"2400:5280::/35", "63199"}, + {"2401:d800:ff10::/42", "7552"}, + {"2409:4053:3000::/29", "55836"}, + {"2600:1407:800::/48", "18717"}, + {"2803:6700:40::/48", "263210"}, + {"2600:140b:1e01::/34", "20940"}, + {"2603:c002:9d10::/40", "31898"}, + {"2804:2a68::/32", "262435"}, + {"2804:55d8::/32", "267960"}, + {"2a09:a441::/32", "205479"}, + {"2402:3a80:1710::/46", "38266"}, + {"2408:8459:7250::/37", "17816"}, + {"2409:8c20:a18::/37", "56046"}, + {"240a:a28f::/32", "143305"}, + {"240a:aefd::/32", "146487"}, + {"2620:0:190::/48", "33084"}, + {"2a07:1400::/29", "24853"}, + {"2403:4900:1::/48", "131188"}, + {"2806:230:2042::/48", "265594"}, + {"2c0f:fb50::/32", "15169"}, + {"2001:1248:a454::/44", "11172"}, + {"240e:981:f300::/36", "4134"}, + {"2806:2f0:4621::/46", "17072"}, + {"2a01:5d40::/32", "24945"}, + {"2402:ee80:58::/47", "132647"}, + {"2409:8703::/32", "9808"}, + {"2620:171:db::/48", "715"}, + {"2804:5004::/32", "268364"}, + {"2a01:270:f000::/36", "41075"}, + {"2a02:d5c0::/29", "49565"}, + {"2409:8904:5b40::/42", "24547"}, + {"2a00:4802:d00::/44", "13124"}, + {"2001:4d68::/32", "25441"}, + {"240e:44d:2300::/42", "140345"}, + {"2604:8480::/32", "54945"}, + {"2806:370:7240::/40", "28403"}, + {"2a02:9b0:4023::/43", "35819"}, + {"2001:559:536::/48", "33660"}, + {"2001:67c:2c4c::/48", "1257"}, + {"2401:d800:7b70::/40", "7552"}, + {"2001:559:bd::/46", "33491"}, + {"2001:559:3d0::/48", "33489"}, + {"2804:6704::/32", "269598"}, + {"2001:559:c21a::/47", "33659"}, + {"2402:800:99ee::/38", "7552"}, + {"2001:da8:ca::/48", "138182"}, + {"2001:4878:8141::/48", "12222"}, + {"2400:1920::/32", "146974"}, + {"2804:3174:8000::/36", "265016"}, + {"2a03:2040::/29", "198385"}, + {"2a0b:51c0::/29", "205679"}, + {"2001:1248:97c5::/44", "11172"}, + {"2401:cf80::/33", "55303"}, + {"2a0f:6f00::/29", "208861"}, + {"2001:559:2d3::/48", "33659"}, + {"240a:a460::/32", "143770"}, + {"2409:8080:381f::/42", "9808"}, + {"240a:a1d9::/32", "143123"}, + {"2604:d600:33::/41", "32098"}, + {"2804:1be0::/32", "61754"}, + {"2804:63fc::/32", "269396"}, + {"2a09:d2c2:1::/48", "213064"}, + {"2001:67c:1324::/48", "43384"}, + {"240a:adb9::/32", "146163"}, + {"2600:1700::/28", "7018"}, + {"2800:1e0:1600::/44", "7195"}, + {"2804:22e8::/32", "264130"}, + {"2a02:26f7:b884::/48", "36183"}, + {"2a0d:1a45:babf::/37", "57782"}, + {"2001:559:c3a4::/47", "33651"}, + {"2408:8456:6800::/42", "17622"}, + {"2a02:26f7:bfc9::/46", "20940"}, + {"2a03:5800::/32", "31214"}, + {"2a05:5a42::/32", "8943"}, + {"2001:1470::/29", "2107"}, + {"2804:5844::/32", "268117"}, + {"2a02:7cc0::/48", "35000"}, + {"2a04:2b00:13ff::/48", "201303"}, + {"2a05:d050:e0c0::/44", "16509"}, + {"2001:559:8721::/48", "33650"}, + {"2001:67c:50c::/48", "15486"}, + {"2001:67c:194c::/48", "62434"}, + {"2803:b2a0::/32", "3549"}, + {"2806:2f0:9a03::/39", "17072"}, + {"2a02:29b0::/32", "16298"}, + {"2001:559:8396::/48", "33659"}, + {"2001:559:c03b::/45", "20214"}, + {"2602:feda:c52::/44", "212425"}, + {"2605:a404:3f::/41", "33363"}, + {"2803:7180:4000::/36", "21575"}, + {"2804:68::/32", "53070"}, + {"2001:f60::/27", "2519"}, + {"2602:fbd0:10::/47", "16509"}, + {"2804:4d6c::/32", "268195"}, + {"2a0b:af80::/29", "206310"}, + {"2001:559:262::/48", "33651"}, + {"2001:df7:4480::/48", "142529"}, + {"240e:108:13b0::/41", "4134"}, + {"2804:421c::/32", "267478"}, + {"2a06:a005:2c0::/44", "211139"}, + {"2a0f:6dc0::/29", "200567"}, + {"240a:ad81::/32", "146107"}, + {"2a03:5640:f041::/48", "2906"}, + {"2001:df5:bb00::/48", "131375"}, + {"2607:6003:2305::/48", "11572"}, + {"2a0a:8c41::/29", "204957"}, + {"2001:250:c31::/48", "138374"}, + {"2402:e280:2225::/46", "134674"}, + {"2a03:4740::/32", "50737"}, + {"2001:df5:9480::/48", "136360"}, + {"2405:58c0:5c00::/40", "133101"}, + {"2607:6880::/32", "11554"}, + {"2804:432c::/32", "267553"}, + {"2a10:4941:10::/44", "200964"}, + {"240a:ad7f::/32", "146105"}, + {"2604:8800::/32", "23028"}, + {"2803:3960::/32", "262186"}, + {"2806:230:5005::/48", "11888"}, + {"2401:1c40::/48", "135915"}, + {"2606:4700:301d::/42", "13335"}, + {"2800:be0:4e3::/32", "267848"}, + {"2800:bf0:2a00::/45", "52257"}, + {"2804:52f8:200::/40", "268554"}, + {"2001:579:c0c4::/43", "22773"}, + {"2405:1000::/32", "45671"}, + {"2803:da20::/40", "27951"}, + {"2804:dac::/32", "28181"}, + {"2804:46b8::/32", "267007"}, + {"2804:493c::/32", "267172"}, + {"2804:3f54::/32", "53185"}, + {"2001:1248:8453::/44", "11172"}, + {"2402:800:310f::/43", "7552"}, + {"2406:21c0::/32", "140429"}, + {"2602:fbd3::/48", "16509"}, + {"2a0c:c380::/32", "207242"}, + {"2a0e:4540:cafe::/48", "58247"}, + {"240a:a838::/32", "144754"}, + {"2804:14d:5c96::/44", "28573"}, + {"2a04:4e40:5e10::/44", "54113"}, + {"2402:800:b190::/42", "7552"}, + {"2405:4803:cf0::/39", "18403"}, + {"2602:fc01::/36", "210902"}, + {"2803:4f20::/32", "266768"}, + {"2405:6e00:688::/45", "18291"}, + {"240a:abe0::/32", "145690"}, + {"2600:140f:5000::/48", "9498"}, + {"2603:c025::/35", "31898"}, + {"2804:679c::/32", "269639"}, + {"2001:578:121::/43", "22773"}, + {"2001:fd8:a1::/46", "4775"}, + {"2806:2f0:94a3::/43", "17072"}, + {"2a02:26f7:d190::/48", "36183"}, + {"2001:57a:8013::/44", "22773"}, + {"2406:9b00::/32", "56264"}, + {"2800:bf0:b424::/48", "27947"}, + {"2804:30c:200::/35", "28343"}, + {"2001:468:2640::/48", "396955"}, + {"2001:550:7601:1::/39", "174"}, + {"2001:ec0:8a6::/41", "23969"}, + {"2001:1b70:4296::/48", "395592"}, + {"2602:ffc8:3d20::/32", "20278"}, + {"2803:e520::/32", "266687"}, + {"2a0f:9b40::/29", "212144"}, + {"2001:550:6701::/36", "174"}, + {"2a00:1280:8004::/33", "39591"}, + {"2a02:26f7:c3d8::/48", "36183"}, + {"2404:4980::/32", "132770"}, + {"2406:e1c0:301::/37", "141459"}, + {"2a0a:340:be00::/40", "48043"}, + {"2001:df1:6e80::/48", "174"}, + {"2400:cb00:a590::/45", "13335"}, + {"2600:d0b:c000::/29", "20161"}, + {"2800:160:196c::/46", "14259"}, + {"2a05:b080::/29", "198024"}, + {"2001:678:fd4::/48", "56951"}, + {"2404:bf40:f802::/48", "139084"}, + {"240e:108:1168::/45", "4134"}, + {"240e:250:1400::/38", "134419"}, + {"2620:c::/44", "7324"}, + {"2804:1b3:c000::/34", "18881"}, + {"2804:4f48::/32", "268317"}, + {"240a:a979::/32", "145075"}, + {"2620:119:4000::/43", "7726"}, + {"2a01:7f80::/32", "15975"}, + {"2001:df7:3b80::/48", "142627"}, + {"2408:80f1:220::/44", "138421"}, + {"240e:946:3001::/45", "58540"}, + {"2607:f110:32::/45", "21889"}, + {"2a00:15e0::/29", "15960"}, + {"2a0a:c440::/29", "205935"}, + {"2a0f:e940::/29", "60781"}, + {"2001:250:7014::/46", "24369"}, + {"2406:e4c0::/48", "140766"}, + {"2804:47d8::/32", "267080"}, + {"2a07:1980:4::/46", "48851"}, + {"240e:3b0:2200::/37", "136198"}, + {"2602:feda:bb0::/44", "140938"}, + {"2804:14d:5e00::/40", "28573"}, + {"2a01:8200::/32", "31216"}, + {"2403:4040::/32", "131937"}, + {"2804:2764::/32", "263898"}, + {"2001:559:8086::/48", "33657"}, + {"2406:eb00:208::/47", "132653"}, + {"2607:fe28:2::/44", "53347"}, + {"2620:32:8000::/48", "1742"}, + {"2a0c:e640:102d::/46", "210951"}, + {"2001:559:5e0::/48", "33287"}, + {"240a:a287::/32", "143297"}, + {"240a:abb7::/32", "145649"}, + {"2607:f9a8::/32", "2685"}, + {"2804:67d4::/32", "269653"}, + {"2a02:26f0:6d01::/35", "20940"}, + {"2a02:26f7:c089::/46", "20940"}, + {"2400:a980:6000::/40", "133512"}, + {"2402:800:520f::/43", "7552"}, + {"240a:a573::/32", "144045"}, + {"2602:ff75:1000::/36", "22653"}, + {"2a10:f840::/29", "52031"}, + {"2401:d800:5732::/40", "7552"}, + {"2600:380:a080::/39", "20057"}, + {"2602:feb4:1e0::/44", "25961"}, + {"2602:feda:c51::/48", "212279"}, + {"2803:6604:a401::/39", "28075"}, + {"2a0e:aa01:1fff::/48", "139589"}, + {"240a:a7be::/32", "144632"}, + {"2604:e840:a::/43", "396965"}, + {"2a02:cc8::/31", "60781"}, + {"2001:678:e8::/48", "41088"}, + {"2402:3a80:1364::/47", "38266"}, + {"2a02:26f7:e305::/46", "20940"}, + {"2804:43e0::/32", "267596"}, + {"2001:559:14f::/48", "33287"}, + {"240a:ac44::/32", "145790"}, + {"2c0f:f708::/32", "327693"}, + {"2001:6d0:ffb8::/48", "3316"}, + {"2604:2ec0::/32", "13984"}, + {"2804:6100::/32", "269205"}, + {"2a0e:b107:8e0::/44", "213372"}, + {"2001:44b8:105f::/48", "4739"}, + {"2401:d800:da80::/41", "7552"}, + {"2001:559:2de::/48", "33660"}, + {"2001:559:c3cb::/45", "7015"}, + {"2001:678:f70::/48", "213027"}, + {"2001:67c:18b0::/48", "35684"}, + {"2406:d740::/46", "141449"}, + {"2604:480::/32", "40098"}, + {"2804:1764::/32", "263143"}, + {"2a03:5240::/32", "199599"}, + {"2001:df0:e480::/47", "7545"}, + {"240a:a09f::/32", "142809"}, + {"2606:82c0:21::/45", "32167"}, + {"2a0d:8cc0::/29", "43350"}, + {"2001:559:838f::/48", "33490"}, + {"240a:aca8::/32", "145890"}, + {"2800:160:28b5::/41", "14259"}, + {"2804:18f4::/32", "61765"}, + {"2a0a:6780::/29", "206377"}, + {"2001:ee0:cb40::/37", "45899"}, + {"2402:800:7352::/40", "7552"}, + {"2620:12d:e0a0::/44", "394027"}, + {"2803:f1a0::/32", "267705"}, + {"2a00:e20::/39", "25048"}, + {"2a00:79e1:380::/48", "395973"}, + {"2a02:26f0:b000::/48", "34164"}, + {"2001:559:13b::/48", "397601"}, + {"2001:fd8:2a8::/41", "4775"}, + {"2001:4210:290a::/35", "25818"}, + {"2800:370:10::/48", "28006"}, + {"2803:48e0:2::/32", "52468"}, + {"2804:78ac::/32", "271258"}, + {"2001:648:22b1::/41", "5408"}, + {"2402:fa00::/33", "55359"}, + {"2404:3e00:a700::/33", "38758"}, + {"2600:6c2e:d0e::/38", "20115"}, + {"2607:f110:e320::/41", "21889"}, + {"2804:1e48::/32", "4809"}, + {"2620:123:2000::/48", "30103"}, + {"2a00:11c0:aa1::/48", "42388"}, + {"2a02:4460::/32", "202032"}, + {"2a04:4e40:ae00::/48", "54113"}, + {"2a04:4e40:ba00::/48", "54113"}, + {"2a00:6700:1::/48", "202784"}, + {"2607:f978:7::/48", "32475"}, + {"2620:107:9042::/48", "22787"}, + {"2804:4b08::/32", "267279"}, + {"2804:7178::/32", "270791"}, + {"2a0b:8900::/32", "21214"}, + {"2402:2500::/45", "13445"}, + {"2600:6c10:413::/45", "20115"}, + {"2803:5c80:6001::/48", "64114"}, + {"2804:5ca0::/32", "268920"}, + {"2804:628c:4000::/42", "269303"}, + {"2a02:26f7:c088::/48", "36183"}, + {"2a0c:9a40:8116::/47", "204438"}, + {"2001:559:847b::/48", "33650"}, + {"2001:4210:6b00::/32", "25818"}, + {"2001:4878:321::/45", "12222"}, + {"2404:e100:3002::/47", "55685"}, + {"2620:83:a000::/48", "394191"}, + {"2001:57a:8038::/41", "22773"}, + {"2404:3200::/32", "17509"}, + {"2405:1c0:61db::/48", "55303"}, + {"2804:4d0c::/32", "267409"}, + {"2a07:2180::/32", "48579"}, + {"2a05:f6c0::/29", "203953"}, + {"2001:250:3434::/44", "138393"}, + {"240e:6:d140::/40", "4134"}, + {"2803:9800:a507::/36", "11664"}, + {"2803:ac10::/32", "271876"}, + {"2804:75b0:8000::/33", "271063"}, + {"2a01:3a8::/32", "20507"}, + {"2a02:26f7:fb09::/42", "20940"}, + {"2a04:bc40:3dc0::/44", "44750"}, + {"2a07:2500::/29", "48374"}, + {"2001:67c:2480::/48", "212966"}, + {"240a:a058::/32", "142738"}, + {"2806:2f0:45c3::/42", "17072"}, + {"2a0b:b84::/31", "7489"}, + {"2404:c000:8000::/46", "17727"}, + {"240a:ac2f::/32", "145769"}, + {"2604:3fc0:2000::/35", "396300"}, + {"2001:559:807a::/47", "33651"}, + {"2405:a400::/32", "38793"}, + {"2408:84f3:3660::/40", "17623"}, + {"2409:804d:2100::/35", "9808"}, + {"2600:3000:5100::/40", "13845"}, + {"2600:370f:73b0::/41", "32261"}, + {"2600:9000:a120::/41", "16509"}, + {"2607:f770:fffc::/46", "22958"}, + {"2a01:5043:e::/48", "202196"}, + {"2a03:d480::/32", "42455"}, + {"2001:559:476::/48", "7922"}, + {"2001:16d8:a0a3::/36", "16150"}, + {"2600:4402:2019::/32", "6130"}, + {"2804:2ca4::/33", "265232"}, + {"2001:559:21a::/48", "33651"}, + {"240a:a86f::/32", "144809"}, + {"2806:230:100b::/48", "11888"}, + {"2a04:4e40:f010::/42", "54113"}, + {"2409:8535::/22", "9808"}, + {"2620:11:40::/45", "3486"}, + {"2001:559:85cc::/48", "7922"}, + {"2400:6280:10d::/48", "132280"}, + {"2408:8956:7400::/40", "17622"}, + {"2607:1000::/32", "30263"}, + {"2607:f380:805::/48", "2152"}, + {"2804:9f8::/33", "262773"}, + {"2a00:1a28::/40", "42708"}, + {"2001:4b98:abcb::/48", "209453"}, + {"2408:8956:6f00::/40", "17816"}, + {"2409:8c28:c06::/39", "56041"}, + {"2602:fd0a::/36", "63027"}, + {"2803:c180:2010::/39", "52341"}, + {"2001:4c8:8000::/33", "6461"}, + {"2c0f:ef78:d::/46", "63293"}, + {"2401:7400:2ff::/36", "4773"}, + {"2620:104:4008::/48", "15248"}, + {"2804:3cac::/32", "266228"}, + {"2a02:2170::/32", "41480"}, + {"2a0f:85c0::/48", "207841"}, + {"2001:470:50::/48", "36791"}, + {"2406:20c0:6001::/32", "140423"}, + {"2408:843c:2600::/30", "4837"}, + {"2804:1ccc::/32", "61676"}, + {"2a00:8080::/32", "43366"}, + {"2a01:a500:2::/34", "42831"}, + {"2402:db40:2::/33", "131486"}, + {"2604:c8c0::/36", "396045"}, + {"2404:4a00:1001::/34", "45629"}, + {"2404:4e00:8000::/48", "32787"}, + {"2408:8256:1196::/37", "17622"}, + {"2620:9:a00c::/46", "395515"}, + {"2800:bf0::/43", "52257"}, + {"2a02:26f7:b5c9::/42", "20940"}, + {"2604:f980:2500::/44", "19957"}, + {"2409:8c4c:17::/44", "9808"}, + {"2620:100:3010::/48", "23286"}, + {"2a09:adc0:2::/29", "64466"}, + {"2001:559:8549::/46", "7015"}, + {"2405:7f00:9e40::/40", "133414"}, + {"2803:9c60::/32", "46198"}, + {"2804:3a64::/32", "266086"}, + {"2001:1248:5ad8::/42", "11172"}, + {"2600:1012:9110::/36", "22394"}, + {"2605:9d80:9092::/48", "4809"}, + {"2804:84f0::/32", "272547"}, + {"2a02:26f7:cb09::/45", "20940"}, + {"2a02:6600:f001::/29", "5377"}, + {"2a02:c100::/29", "199645"}, + {"2409:8030:2100::/36", "9808"}, + {"2804:4760:fab4::/37", "267050"}, + {"2804:81e0::/32", "272483"}, + {"2001:559:35e::/48", "7015"}, + {"2001:4048:109::/32", "33922"}, + {"2001:4490:3bfc::/37", "9829"}, + {"2001:4998:ef64::/47", "14778"}, + {"2800:160:2034::/41", "14259"}, + {"2a00:1510::/32", "42882"}, + {"2a02:26f7:b6c5::/46", "20940"}, + {"2a02:2930::/32", "49767"}, + {"2409:8054:3045::/42", "56040"}, + {"2600:6c3a:403::/42", "20115"}, + {"2c0f:fe38:2340::/32", "33771"}, + {"2401:d800:720::/41", "7552"}, + {"240e:108:24::/48", "134768"}, + {"2606:2800:5120::/46", "15133"}, + {"2803:760::/39", "269816"}, + {"2804:188:6007::/32", "262750"}, + {"2804:5500::/34", "268683"}, + {"2a00:7fc0::/33", "25291"}, + {"2a0f:304::/32", "1239"}, + {"2001:b08:26::/48", "198685"}, + {"2804:32e8::/32", "265104"}, + {"2a12:ff80::/48", "212686"}, + {"2001:260::/32", "2518"}, + {"2600:1006:d140::/43", "6167"}, + {"2804:1e38:6000::/32", "264415"}, + {"2404:3c00:1000::/32", "23944"}, + {"2603:c002:9710::/36", "31898"}, + {"2620:100:6000::/43", "19679"}, + {"2a0e:b107:da0::/44", "142438"}, + {"2a0f:ff00:100::/38", "213281"}, + {"2610:b0:40fe::/39", "21433"}, + {"2001:550:2c01::/38", "174"}, + {"2001:559:388::/48", "7922"}, + {"2402:800:392b::/41", "7552"}, + {"240a:a845::/32", "144767"}, + {"2804:5098::/32", "268398"}, + {"2a04:4e40:fe30::/41", "54113"}, + {"2a0a:1086:c0fe::/47", "393954"}, + {"2a0b:14c0:2::/48", "61273"}, + {"2607:f110:e520::/36", "21889"}, + {"2804:4fb4::/32", "268344"}, + {"2a00:11c0:3b::/48", "42473"}, + {"2a02:e980:ae::/43", "19551"}, + {"2401:fdc0:10::/44", "141013"}, + {"2409:803c:1800::/40", "24444"}, + {"2804:5f50::/32", "269091"}, + {"2800:bf0:3785::/42", "27947"}, + {"2804:80a8::/39", "271765"}, + {"2a0c:dec0:f100::/48", "207063"}, + {"2a0e:97c0:76c::/48", "207662"}, + {"2001:978:a701::/35", "174"}, + {"2405:1640::/32", "138886"}, + {"2606:6800:2400::/40", "394903"}, + {"2001:559:1b3::/48", "20214"}, + {"2409:8a50:700::/36", "56047"}, + {"2604:9e01::/32", "20264"}, + {"2803:c760::/32", "269819"}, + {"2806:230:2038::/48", "265594"}, + {"240e:981:b000::/39", "134420"}, + {"2604:bb80:300::/32", "14602"}, + {"2606:8e80:6800::/35", "32133"}, + {"2610:20:8804::/46", "2648"}, + {"2804:2484::/32", "28258"}, + {"2804:82c8::/32", "272540"}, + {"2806:102e:2::/45", "8151"}, + {"2a00:4802:320::/44", "13124"}, + {"2a10:1800:666::666/128", "43142"}, + {"2001:1818::/32", "7850"}, + {"2403:300:a15::/48", "714"}, + {"240a:a20d::/32", "143175"}, + {"2a02:950::/30", "31229"}, + {"2a06:28c0::/29", "197798"}, + {"2001:559:78c::/48", "33287"}, + {"2001:559:c15d::/48", "22909"}, + {"2408:8956:4c00::/40", "17622"}, + {"2803:3410::/32", "64129"}, + {"2804:819c::/32", "272465"}, + {"2a00:15a8:900::/32", "29140"}, + {"240e:964:ec00::/35", "4134"}, + {"2a00:6740::/32", "8779"}, + {"2a02:26f7:23::/48", "20940"}, + {"2001:418:4001:2::/64", "20940"}, + {"240e:1c:6000::/32", "4134"}, + {"2a04:dc0::/48", "199386"}, + {"2a06:1580::/29", "201086"}, + {"2a0e:b107:1806::/48", "149007"}, + {"2001:4998:21::/46", "10310"}, + {"2400:0:720::/43", "4766"}, + {"240e:67e:8400::/38", "140329"}, + {"2804:2298::/32", "264110"}, + {"2a01:8840:1e::/42", "12041"}, + {"2001:590:3804::/37", "3257"}, + {"2408:8256:378a::/48", "17623"}, + {"2804:6f0:900::/32", "53047"}, + {"2a0a:c700::/29", "28788"}, + {"2401:3bc0:901::/35", "137409"}, + {"240a:a873::/32", "144813"}, + {"2804:15c8::/32", "263410"}, + {"2a05:6c00::/29", "62126"}, + {"2001:56a:c::/47", "852"}, + {"2001:67c:2dec::/48", "41617"}, + {"240a:afee::/32", "146728"}, + {"2804:7dbc::/32", "271579"}, + {"2406:c800:e001::/35", "38016"}, + {"240e:3b0:f100::/37", "134775"}, + {"2603:8077::/32", "11955"}, + {"2605:6400:d814::/48", "398355"}, + {"2607:2900::/32", "25914"}, + {"2803:1e10::/36", "271975"}, + {"2a06:e881:2509::/48", "205634"}, + {"2405:4803:edd0::/35", "18403"}, + {"2407:1e40:601::/36", "141732"}, + {"240a:a968::/32", "145058"}, + {"2600:370f:3628::/47", "32261"}, + {"2600:6c3a:43a::/36", "20115"}, + {"2804:2ac8::/32", "265118"}, + {"2a04:4e40:4000::/48", "54113"}, + {"2a05:bf00::/29", "43260"}, + {"2a06:a005:a::/47", "9833"}, + {"2001:67c:99c::/48", "209105"}, + {"2620:149:100d::/46", "714"}, + {"2001:42d0:b::/40", "33764"}, + {"2001:4878:8228::/48", "12222"}, + {"2402:800:350f::/43", "7552"}, + {"2605:a404:f0::/44", "33363"}, + {"2620:38:2000::/48", "53535"}, + {"2620:10f:d000::/44", "208722"}, + {"2620:132::/44", "63027"}, + {"2804:1a30:c100::/40", "61844"}, + {"2001:ad8::/29", "8823"}, + {"240a:a2ed::/32", "143399"}, + {"240a:ad8b::/32", "146117"}, + {"240e:379:aa00::/39", "140330"}, + {"2620:151::/36", "16793"}, + {"2a04:6040::/31", "49229"}, + {"2a0a:e805:610::/44", "64476"}, + {"240a:a621::/32", "144219"}, + {"2600:1415:a::/48", "24319"}, + {"2606:4700:85c0::/43", "13335"}, + {"2806:230:1000::/48", "265594"}, + {"2a0f:600:607::/44", "51044"}, + {"2001:559:256::/48", "33662"}, + {"2600:1010:f100::/44", "6167"}, + {"2800:bf0:2420::/45", "52257"}, + {"2803:5c80:5595::/48", "64114"}, + {"2804:6c1c::/32", "270446"}, + {"2a03:a2c2::/32", "60595"}, + {"2a0b:2542::/48", "137256"}, + {"2409:8c30:1110::/38", "9808"}, + {"2606:a000:4000::/32", "11426"}, + {"2804:14c:fc00::/40", "28573"}, + {"2804:787c::/32", "271245"}, + {"2400:7400:e013::/48", "23736"}, + {"2402:e380:301::/48", "133072"}, + {"2607:f8f8:1f10::/32", "23033"}, + {"2001:df5:1680::/48", "45671"}, + {"2a02:26f7:d208::/48", "36183"}, + {"2a0d:c980::/29", "204487"}, + {"2a10:6500::/29", "399975"}, + {"240e:44d:2700::/41", "140345"}, + {"2602:fcca::/36", "399428"}, + {"2a02:5640::/29", "9137"}, + {"2c0f:e9c8::/32", "36926"}, + {"2001:1598::/32", "28747"}, + {"2401:8ac0:1c0::/48", "4671"}, + {"2620:68::/48", "29906"}, + {"2803:9800:9099::/46", "11664"}, + {"2804:62ec::/32", "269328"}, + {"2a02:26f7:b68d::/42", "20940"}, + {"2a02:2808:1009::/48", "56361"}, + {"2001:559:c3::/44", "7922"}, + {"2402:800:ba02::/41", "7552"}, + {"2406:daa0:c0c0::/44", "16509"}, + {"2804:672c::/32", "269609"}, + {"2a07:bfc0::/29", "9022"}, + {"2a0b:7800::/29", "15600"}, + {"2001:250:3c04::/44", "138369"}, + {"2001:559:c231::/48", "33652"}, + {"2407:3e80::/32", "38768"}, + {"2606:6300::/32", "46618"}, + {"2804:1b3:6f00::/41", "10429"}, + {"2a02:26f7:f381::/46", "20940"}, + {"2001:559:5d6::/47", "7922"}, + {"2404:2200:28::/32", "18200"}, + {"2804:4bc:5001::/32", "262462"}, + {"2804:e40::/32", "262947"}, + {"2a02:2ac8::/32", "702"}, + {"2001:df1:e000::/48", "55666"}, + {"2001:1248:885c::/42", "11172"}, + {"2001:1248:97ef::/43", "11172"}, + {"2804:6538::/32", "269476"}, + {"2001:559:c178::/48", "33657"}, + {"2001:67c:29f4::/48", "58302"}, + {"2401:1100::/32", "133380"}, + {"2406:2000:100::/40", "10310"}, + {"2800:160:1b87::/44", "14259"}, + {"2a0a:e5c0::/48", "209898"}, + {"2001:559:3d9::/48", "7922"}, + {"240c:c02f::/32", "24349"}, + {"2607:6b80:65::/48", "55081"}, + {"2804:128c::/32", "263483"}, + {"2a02:158:c000::/39", "44946"}, + {"2a04:1b00:80::/47", "60679"}, + {"2a0e:eec4::/32", "398343"}, + {"2001:678:80::/48", "51955"}, + {"2401:d800:d220::/41", "7552"}, + {"2804:f18::/32", "263566"}, + {"2001:559:35b::/48", "33651"}, + {"2001:13c7:601d::/48", "64103"}, + {"2001:4408:4801::/40", "4758"}, + {"2401:8b00::/32", "55385"}, + {"2402:800:9d1d::/41", "7552"}, + {"2600:1f00:1000::/40", "16509"}, + {"2804:1018::/32", "263619"}, + {"2a00:7580:10::/48", "8659"}, + {"2a0c:b640:a::/43", "34872"}, + {"2001:559:747::/48", "33287"}, + {"2404:e00:852::/48", "15695"}, + {"240a:a1a1::/32", "143067"}, + {"2a02:ee80:4012::/45", "3573"}, + {"2001:4878:4007::/44", "12222"}, + {"2001:49f0:d110::/47", "174"}, + {"2600:400:8f00::/33", "15147"}, + {"2804:1080:8003::/48", "28287"}, + {"2804:84f4::/32", "272548"}, + {"2a00:1e28::/32", "12859"}, + {"2001:559:c24d::/46", "7015"}, + {"2403:9200::/32", "23641"}, + {"2800:ad0::/32", "11816"}, + {"2806:2f0:60e1::/46", "17072"}, + {"2a02:26f7:cd4d::/46", "20940"}, + {"2a03:7dc0::/32", "39256"}, + {"2a10:7d40::/29", "6939"}, + {"2001:678:3b8::/48", "208733"}, + {"2a01:41a0::/32", "62282"}, + {"2a09:be40:4200::/41", "213349"}, + {"2a0b:d280::/32", "20655"}, + {"2404:3d00:40ec::/46", "21433"}, + {"2605:f700:100::/44", "18978"}, + {"2804:7cb4::/32", "271513"}, + {"2a0d:7a00::/29", "205145"}, + {"2a0e:97c3:5c4::/48", "20473"}, + {"2400:89c0:1130::/44", "37936"}, + {"2a01:75c0::/29", "199284"}, + {"2408:8957:4d00::/40", "17816"}, + {"240a:ae0b::/32", "146245"}, + {"2600:1000:9110::/36", "22394"}, + {"2605:4d80::/32", "27626"}, + {"2401:d800:7e70::/40", "7552"}, + {"2a01:70::/32", "25098"}, + {"2a03:6100:6100::/48", "38937"}, + {"2a0d:fd40:57::/29", "14630"}, + {"2401:d800:f020::/41", "7552"}, + {"2402:800:7ce0::/39", "7552"}, + {"240a:ae14::/32", "146254"}, + {"240a:afa0::/32", "146650"}, + {"2605:a401:8313::/42", "33363"}, + {"2803:6900:524::/48", "52423"}, + {"2a0e:db80::/29", "205516"}, + {"2406:840:eb80::/43", "140731"}, + {"2806:2f0:33e3::/37", "17072"}, + {"2a01:5b40:ac4::/32", "12996"}, + {"2a03:9c00:d::/48", "41732"}, + {"2a0c:b641:45c::/48", "210348"}, + {"2401:1880::/32", "45177"}, + {"2600:1404:dc01::/34", "20940"}, + {"2620:10a:80ec::/48", "394354"}, + {"2801:11:4000::/48", "10753"}, + {"2801:80:e60::/48", "264534"}, + {"2a02:26f7:d445::/46", "20940"}, + {"2001:1a12::/29", "8781"}, + {"2001:41ca::/29", "35425"}, + {"2602:803:c006::/48", "26667"}, + {"2602:fd15:2::/36", "398465"}, + {"2610:1e0::/35", "3714"}, + {"2804:5c18::/32", "268887"}, + {"2a02:26f7:c004::/48", "36183"}, + {"2001:67c:2b64::/48", "210466"}, + {"240a:70::/46", "9605"}, + {"2604:56c0::/32", "53507"}, + {"2804:7b54::/32", "271425"}, + {"2a06:8781::/40", "47447"}, + {"2610:160::/43", "27325"}, + {"2804:5094::/32", "268397"}, + {"2806:2f0:6063::/40", "17072"}, + {"2408:8656:2cfd::/48", "17816"}, + {"240a:ad3e::/32", "146040"}, + {"2803:b6a0::/32", "266905"}, + {"2404:f4c0:f90e::/47", "139833"}, + {"240a:a993::/32", "145101"}, + {"2a01:7c8:8000::/33", "20857"}, + {"2a01:8840:35::/48", "207266"}, + {"2001:4878:c257::/48", "12222"}, + {"2400:9380:9250::/46", "4809"}, + {"2804:4e24::/32", "268242"}, + {"2a02:26f7:c894::/48", "36183"}, + {"2404:4f00:3045::/32", "17819"}, + {"2409:8915:3400::/39", "56044"}, + {"2605:59c0:8000::/33", "36492"}, + {"2a02:26f7:c94e::/42", "20940"}, + {"2001:16a2:c1f0::/44", "39386"}, + {"2001:19e8:8041::/48", "3923"}, + {"2001:1a11:22::/45", "8781"}, + {"2400:7400:36::/47", "23736"}, + {"2405:a740::/32", "58820"}, + {"240a:a1e6::/32", "143136"}, + {"2600:140f:c00::/48", "55836"}, + {"2804:58b8:11::/48", "15695"}, + {"2a00:e78::/33", "34602"}, + {"2a01:4f40::/32", "29222"}, + {"2a02:26f7:c::/48", "36183"}, + {"2001:67c:154::/48", "25318"}, + {"2408:840c:9c00::/40", "17621"}, + {"2620:46:4000::/48", "395431"}, + {"2804:14d:1a00::/40", "28573"}, + {"2a03:a300:2000::/48", "35104"}, + {"2404:2680::/32", "9618"}, + {"2606:2800:15::/46", "15133"}, + {"2403:2c00:f000::/43", "4058"}, + {"2610:e0:a010::/44", "26934"}, + {"2804:5bcc::/32", "52657"}, + {"2806:230:3009::/48", "11888"}, + {"2803:800:5::/32", "25607"}, + {"2a01:c50f:f780::/36", "12479"}, + {"2a0e:5b80::/29", "42487"}, + {"2402:1c00:c01::/45", "23838"}, + {"2605:6400:4000::/32", "53667"}, + {"2a00:d40:10a::/48", "2597"}, + {"2001:559:212::/48", "7016"}, + {"2405:205:4000::/35", "55836"}, + {"2408:8957:3800::/40", "17622"}, + {"240e:3bd:6400::/35", "140312"}, + {"240e:67d:800::/37", "140329"}, + {"240e:964:f600::/31", "4134"}, + {"240e:983:1702::/40", "4134"}, + {"2804:3984::/32", "262902"}, + {"2a05:d8c0::/29", "15391"}, + {"2001:da8:e824::/37", "23910"}, + {"2602:107:510::/48", "11351"}, + {"2610:b0:40f8::/47", "21433"}, + {"2803:a010::/32", "271795"}, + {"2a00:fa60:1520::/32", "53550"}, + {"2a02:26f7:112::/48", "36183"}, + {"2a0a:9c40::/29", "43809"}, + {"2001:559:857b::/48", "33662"}, + {"2001:559:c2cd::/48", "33650"}, + {"2001:470:c7::/44", "6939"}, + {"2001:559:c1ec::/48", "33651"}, + {"2001:43f8:1090::/48", "328267"}, + {"2402:3a80:c80::/38", "38266"}, + {"2403:ddc0::/32", "138388"}, + {"240e:54:8000::/33", "140329"}, + {"2600:805:b01::/30", "701"}, + {"2803:f00::/47", "262182"}, + {"2a01:9780::/32", "209754"}, + {"2a06:e040::/33", "198507"}, + {"2a0f:b4c3::/32", "199669"}, + {"2a10:7a40:3::/48", "39910"}, + {"2402:3a80:640::/40", "38266"}, + {"2403:e800:51b::/36", "4637"}, + {"2406:aa00::/35", "55354"}, + {"2400:d800::/30", "9506"}, + {"2409:8044::/34", "24445"}, + {"240a:aa21::/32", "145243"}, + {"2605:3380:444f::/48", "12025"}, + {"2a04:2ac0::/29", "61081"}, + {"2a0d:f3c0::/29", "34907"}, + {"2c0f:1300::/32", "37440"}, + {"2409:8080:2a20::/44", "9808"}, + {"2409:870c::/30", "56042"}, + {"240a:af29::/32", "146531"}, + {"2600:1419:ac01::/35", "20940"}, + {"2a01:cb20:1000::/33", "3215"}, + {"2a0d:540::/29", "203180"}, + {"2a0d:82c7:2000::/35", "47787"}, + {"2001:559:c0fe::/48", "33650"}, + {"240a:ad00::/32", "145978"}, + {"2604:f9c0::/32", "397064"}, + {"2606:f700::/32", "54359"}, + {"2a0c:cb00::/32", "212313"}, + {"240e:183:8210::/46", "140652"}, + {"2620:0:e50::/45", "3676"}, + {"2a0c:b641:70::/48", "211013"}, + {"2001:559:8668::/48", "7725"}, + {"2001:559:c010::/47", "33287"}, + {"2605:a401:842b::/39", "33363"}, + {"2804:256c::/32", "264280"}, + {"2804:6608::/33", "269529"}, + {"2a0e:11c0::/32", "61150"}, + {"2a11:fc0::/29", "210767"}, + {"2606:8c00:2::/48", "22995"}, + {"2607:ae80:128::/48", "26558"}, + {"2a04:1580::/29", "200155"}, + {"2a0f:9340::/48", "1299"}, + {"2001:559:8753::/48", "7015"}, + {"2401:d800:f1d0::/42", "7552"}, + {"2607:f220:204::/44", "19050"}, + {"2620:149:a19::/48", "714"}, + {"2804:2b4::/36", "28265"}, + {"2a02:970:139a::/37", "44002"}, + {"2804:51ec::/32", "268485"}, + {"2a03:91c0::/32", "57394"}, + {"2a0b:2d85::/32", "44582"}, + {"2001:1248:982c::/43", "11172"}, + {"2804:d10::/32", "52593"}, + {"2804:47a0:2000::/32", "267066"}, + {"2001:559:82::/48", "33651"}, + {"2001:559:8359::/48", "33659"}, + {"2001:da8:9000::/45", "24369"}, + {"2403:9800:12::/42", "4648"}, + {"2604:7ac0:b00::/37", "12213"}, + {"2607:fb58:9000::/33", "36086"}, + {"2804:e94:675::/44", "262468"}, + {"2a00:a4c0::/32", "57734"}, + {"2a06:e044::/44", "203382"}, + {"2408:8344:1200::/32", "4837"}, + {"2602:fcbc::/48", "14618"}, + {"2803:5b10::/32", "272083"}, + {"2a02:d88::/32", "20552"}, + {"2a03:c680::/29", "28919"}, + {"2a0e:8f02:f026::/48", "211480"}, + {"2600:802:1103::/45", "701"}, + {"2001:4488:5::/34", "7713"}, + {"2001:da8:d024::/48", "23910"}, + {"2001:4408:4900::/37", "4758"}, + {"2405:84c0:99f0::/44", "9886"}, + {"240e:438:b040::/38", "4134"}, + {"2803:da60::/32", "267890"}, + {"2a0a:e5c0:2a::/47", "213081"}, + {"2001:559:81f0::/48", "33657"}, + {"2001:44b8:405e::/48", "7545"}, + {"2409:804e:3100::/36", "9808"}, + {"2409:8958:cd44::/43", "9808"}, + {"2600:100d:b1d0::/42", "6167"}, + {"2a02:26f7:dd09::/42", "20940"}, + {"2a0b:4340:95::/48", "205610"}, + {"2a0b:9d80::/32", "15699"}, + {"2a0c:5247:9000::/36", "59504"}, + {"2610:20:6000::/37", "49"}, + {"2a01:240::/32", "30781"}, + {"2a02:748::/35", "29802"}, + {"2a02:26f0:8a00::/48", "34164"}, + {"2a05:b0c6:6006::/48", "211139"}, + {"2a0a:e580::/29", "208861"}, + {"2001:559:164::/48", "33489"}, + {"2001:559:51b::/48", "7922"}, + {"2407:c00:8000::/33", "45356"}, + {"2606:4fc0:10::/44", "399581"}, + {"2a0a:cf40::/29", "44295"}, + {"2403:1300:9000::/33", "56286"}, + {"2602:fe1e::/36", "22751"}, + {"2804:62e8::/32", "269327"}, + {"2a01:46c0::/48", "199248"}, + {"2a06:1287:2610::/36", "61138"}, + {"2a09:eb80::/29", "209649"}, + {"2001:559:864c::/48", "33491"}, + {"2001:559:86e8::/47", "33652"}, + {"2404:f4c0:f940::/46", "142551"}, + {"240e:3b8:7600::/39", "140313"}, + {"2806:2f0:1300::/46", "22884"}, + {"2604:880:26::/47", "29802"}, + {"2804:90:6300::/37", "28580"}, + {"2804:3e1c::/32", "266574"}, + {"2a0a:8740::/29", "205851"}, + {"2001:1580::/32", "9158"}, + {"2606:6240:dead::/48", "398447"}, + {"2607:f028:8::/48", "2173"}, + {"2001:559:c3f8::/48", "7725"}, + {"2001:df1:f600::/48", "27385"}, + {"2001:4400::/31", "4768"}, + {"2600:140b:2c00::/48", "31109"}, + {"2a10:3140::/30", "208256"}, + {"2a12:ea00::/29", "1239"}, + {"2001:559:401::/48", "20214"}, + {"2001:559:7bf::/48", "33651"}, + {"2001:1878:800::/44", "85"}, + {"2406:e540::/48", "140766"}, + {"2604:6d00:2000::/48", "36223"}, + {"2604:ca00:7::/48", "36492"}, + {"2a04:ac0:1::/48", "20860"}, + {"2404:a500:4::/47", "45854"}, + {"2a02:26f7:e345::/46", "20940"}, + {"2a02:26f7:e48c::/48", "36183"}, + {"2001:468:300::/48", "2637"}, + {"2001:df0:86::/48", "18055"}, + {"240a:a7ca::/32", "144644"}, + {"2605:cac0::/32", "398425"}, + {"2804:eac::/32", "262967"}, + {"2806:2f0:1182::/48", "17072"}, + {"2a02:26f0:d501::/40", "20940"}, + {"2a02:26f7:cdc5::/46", "20940"}, + {"2a0d:1cc0::/48", "208549"}, + {"2402:800:9363::/43", "7552"}, + {"2804:7654::/32", "271104"}, + {"2a02:c140::/29", "8426"}, + {"2c0f:f980:7000::/32", "33763"}, + {"2001:c20:486a::/48", "9255"}, + {"2001:1810::/42", "14116"}, + {"240a:aa95::/32", "145359"}, + {"2606:fe80:20::/44", "12180"}, + {"2620:9a:e000::/48", "399879"}, + {"2800:bf0:80ed::/46", "27947"}, + {"2804:14c:7579::/40", "28573"}, + {"2a02:480::/32", "8685"}, + {"2001:559:c299::/48", "7015"}, + {"2402:800:3a8d::/43", "7552"}, + {"2402:800:70c0::/42", "7552"}, + {"240a:acfd::/32", "145975"}, + {"2602:fc6d::/40", "25819"}, + {"2a0c:b641:32::/48", "210233"}, + {"2c0f:f360::/34", "7489"}, + {"2001:559:833f::/48", "22258"}, + {"2001:19d0:600::/40", "12025"}, + {"240a:a562::/32", "144028"}, + {"2a02:26f7:e4::/48", "36183"}, + {"2001:43f8:2a0::/48", "32279"}, + {"2001:4408:6d10::/38", "4758"}, + {"2001:4830:c500::/40", "27552"}, + {"2804:2844::/33", "263951"}, + {"2001:559:c19a::/48", "13367"}, + {"2001:559:c3d6::/48", "33657"}, + {"2001:678:5f4::/48", "204626"}, + {"2409:802f:2b05::/48", "9808"}, + {"240a:a26e::/32", "143272"}, + {"240a:a770::/32", "144554"}, + {"240a:a932::/32", "145004"}, + {"2804:c90::/47", "28198"}, + {"2001:400:6000:a::/37", "293"}, + {"2001:559:85a9::/46", "33662"}, + {"2600:1417:1a::/48", "24319"}, + {"2605:41c0:2::/48", "397042"}, + {"2620:149:5fc::/36", "714"}, + {"2a02:368::/32", "28859"}, + {"2a02:26f7:bd0c::/48", "36183"}, + {"2a06:6541:30c1::/48", "3549"}, + {"2c0f:fbc8::/32", "37075"}, + {"240a:aba2::/32", "145628"}, + {"2804:14c:445::/42", "28573"}, + {"2804:7acc::/32", "13357"}, + {"2806:230:1200::/45", "11888"}, + {"2a10:8580::/48", "206436"}, + {"2001:559:c41f::/48", "33287"}, + {"2402:2500:7::/33", "13445"}, + {"240a:ad80::/32", "146106"}, + {"240e:cf:a000::/33", "4134"}, + {"240e:3bf:c000::/37", "140315"}, + {"2a02:26f7:df01::/46", "20940"}, + {"2a0d:55c0::/29", "58011"}, + {"2403:2500:400::/48", "36236"}, + {"2409:8060:100::/36", "9808"}, + {"2605:ad80:12f0::/44", "62887"}, + {"2607:f7a8:200::/39", "46887"}, + {"2801:1fc:14::/48", "27951"}, + {"2a02:26f7:4d::/48", "20940"}, + {"2400:ac40:d50::/40", "136255"}, + {"240e:44d:5e00::/41", "140345"}, + {"2001:448a:2010::/47", "7713"}, + {"2803:d860::/32", "267826"}, + {"2804:5b64::/32", "268840"}, + {"2a00:d880::/32", "198203"}, + {"2001:559:c285::/48", "33660"}, + {"2400:3320::/48", "140766"}, + {"2408:8456:1940::/40", "17816"}, + {"2409:805e:1100::/36", "9808"}, + {"2600:6c10:f308::/43", "20115"}, + {"2607:f220:300::/44", "22828"}, + {"2800:bf0:8120::/44", "52257"}, + {"2804:de0::/32", "262604"}, + {"2a0f:9400:800e::/48", "140098"}, + {"2606:3380:4::/43", "53334"}, + {"2607:fb90:b500::/36", "21928"}, + {"2a02:22d0::/44", "61323"}, + {"2406:f400:161::/48", "38001"}, + {"2600:1417:50::/47", "9829"}, + {"2606:5000:1200::/34", "209"}, + {"2800:bf0:3a04::/42", "27947"}, + {"2402:9d80:a00::/47", "131429"}, + {"240e:44d:4480::/41", "4134"}, + {"2602:ff4b::/48", "18106"}, + {"2606:4e00::/32", "396362"}, + {"2600:5c00:141::/40", "10838"}, + {"2600:9000:103b::/48", "16509"}, + {"2605:9d80:9023::/48", "4809"}, + {"2800:68:14::/48", "61468"}, + {"2a01:7a00::/36", "51701"}, + {"2a01:bb22::/32", "14618"}, + {"2a07:7a00::/29", "204064"}, + {"2a0b:ae40:5::/44", "396362"}, + {"2001:4210:350a::/33", "25818"}, + {"2404:79c0:1002::/48", "138633"}, + {"2408:8957:6400::/40", "17622"}, + {"2409:8a52:900::/38", "56047"}, + {"240a:a74f::/32", "144521"}, + {"2001:559:84c2::/48", "33659"}, + {"2402:8100:24c0::/42", "45271"}, + {"2610:b0:403c::/41", "3573"}, + {"2804:38f4::/32", "266514"}, + {"2a03:2887:ff1b::/45", "63293"}, + {"2a03:f080::/35", "42685"}, + {"2a0c:b641:452::/48", "211944"}, + {"2001:fd8:e4::/46", "132199"}, + {"2001:44b8:5::/48", "7545"}, + {"2a03:1360::/32", "31736"}, + {"2a0c:61c0::/32", "203602"}, + {"2403:cb00:301::/46", "58621"}, + {"2600:7000::/24", "6939"}, + {"2804:5d0:e000::/35", "28241"}, + {"2a00:1260::/32", "31641"}, + {"2a03:5840:100::/48", "213073"}, + {"2001:250:6802::/45", "138373"}, + {"2607:f2c0::/32", "5645"}, + {"2a01:4a0:31::/44", "201011"}, + {"2001:da8:2024::/44", "24357"}, + {"2001:1248:9728::/43", "11172"}, + {"240a:a8ab::/32", "144869"}, + {"240e:3bd:f100::/37", "134775"}, + {"2602:107:60d::/48", "20001"}, + {"2a00:1ca8:2d::/41", "50673"}, + {"2a02:26f7:bc09::/42", "20940"}, + {"2a02:4140::/45", "43957"}, + {"2a03:43e0::/32", "59748"}, + {"2001:43f8:1320::/48", "328358"}, + {"2403:4a00::/32", "9304"}, + {"2404:e801:100c::/46", "55430"}, + {"240e:24:c000::/28", "4134"}, + {"2a0d:ac00:1000::/48", "205202"}, + {"2a11:29c2:b00b::/48", "212149"}, + {"2600:1406:6401::/36", "20940"}, + {"2a00:dd00::/46", "212573"}, + {"2a02:c1c0::/29", "31655"}, + {"2a04:1c43::/29", "201035"}, + {"2001:c38:9125::/48", "9931"}, + {"2402:3a80:c062::/48", "38266"}, + {"240a:a58e::/32", "144072"}, + {"240a:ab43::/32", "145533"}, + {"240a:ac7a::/32", "145844"}, + {"240e:267:400::/35", "4134"}, + {"2600:1419:4c01::/35", "20940"}, + {"2804:11dc::/33", "263444"}, + {"2806:230:1027::/48", "11888"}, + {"2a02:ed04:4610::/39", "50304"}, + {"2a0f:9200::/31", "45009"}, + {"240e:438:4220::/43", "140647"}, + {"2600:370f:2020::/47", "32261"}, + {"2603:6030::/31", "10796"}, + {"2804:14c:6589::/43", "28573"}, + {"2001:559:21f::/48", "33491"}, + {"2404:e680::/35", "18409"}, + {"240a:a009::/32", "142659"}, + {"2602:ff0d::/39", "395938"}, + {"2606:18c0:3::/48", "61317"}, + {"2a02:2108::/32", "43284"}, + {"2a0e:46c4:200::/48", "38230"}, + {"2a0f:5000::/29", "205500"}, + {"2001:678:302::/48", "35684"}, + {"2606:9200::/32", "6428"}, + {"2607:fae0:245::/48", "15562"}, + {"2a00:ac00::/31", "51728"}, + {"2a03:6780::/48", "2119"}, + {"2a06:1cc0::/32", "198964"}, + {"2001:c20:700a::/36", "3758"}, + {"2401:c080:1000::/34", "20473"}, + {"2800:bf0:2300::/47", "52257"}, + {"2806:230:4015::/48", "11888"}, + {"2001:df5:5480::/48", "141412"}, + {"2405:7f00:3000::/38", "133414"}, + {"240e:3bd:1400::/38", "134773"}, + {"2804:7a7c:1000::/36", "271374"}, + {"2001:df0:1600::/48", "134980"}, + {"2804:2ecc::/32", "265367"}, + {"2806:2f0:72a1::/46", "17072"}, + {"2806:370:2210::/41", "28403"}, + {"2a00:4802:3200::/44", "13124"}, + {"2a04:4e41:60::/48", "54113"}, + {"240a:ab4b::/32", "145541"}, + {"2600:6c10:111::/45", "20115"}, + {"2a02:24e0::/32", "50957"}, + {"2a0f:5707:ab22::/48", "202297"}, + {"2407:2c0::/48", "140775"}, + {"240a:abd3::/32", "145677"}, + {"2a01:c50f:1140::/40", "12479"}, + {"2a10:7500::/29", "399975"}, + {"2001:250:c0d::/46", "138374"}, + {"2a00:7180:8004::/46", "207806"}, + {"2a10:4646:d0::/44", "210810"}, + {"2607:fd28:a004::/48", "62753"}, + {"2a02:26f7:ec54::/48", "36183"}, + {"2001:c98::/32", "9858"}, + {"2001:df0:44::/48", "17990"}, + {"2001:44b8:40d7::/48", "7545"}, + {"240a:ace5::/32", "145951"}, + {"2600:1415:4001::/37", "20940"}, + {"2600:1488:6421::/41", "20940"}, + {"2803:e600:9999::/48", "65500"}, + {"2a10:2f00:16c::/48", "211495"}, + {"2407:ca00::/32", "45280"}, + {"2607:f518:136::/35", "46887"}, + {"2803:e400::/32", "52373"}, + {"2804:39ec::/32", "266059"}, + {"2a01:3d8::/32", "12759"}, + {"2001:559:20b::/48", "22909"}, + {"2001:559:c091::/48", "33667"}, + {"2001:559:c378::/48", "7922"}, + {"2405:800:a::/35", "7545"}, + {"2409:896a:9e00::/39", "9808"}, + {"2602:fed2:710e::/48", "20473"}, + {"2a00:8140:f000::/36", "60351"}, + {"2a01:90:400::/48", "29668"}, + {"2a02:26f7:c8::/48", "36183"}, + {"2a05:4840::/29", "60576"}, + {"2402:c100:c03::/32", "23673"}, + {"2402:e380:322::/48", "64041"}, + {"2407:fa00::/32", "24043"}, + {"2409:8320::/27", "9808"}, + {"2605:2980::/32", "11404"}, + {"2a11:6c0::/40", "211083"}, + {"2c0f:ec80:9000::/33", "37315"}, + {"2001:559:8752::/48", "7922"}, + {"2620:137:d::/46", "396253"}, + {"2804:58::/32", "262659"}, + {"2804:6e68::/32", "270595"}, + {"2a02:26f7:c180::/48", "36183"}, + {"2a02:2e02:1230::/40", "12479"}, + {"2a03:bdc0::/32", "30781"}, + {"2a09:fc00::/29", "200848"}, + {"2a10:5900::/29", "208256"}, + {"2001:503:4872::/48", "7342"}, + {"2405:ec01:2000::/32", "137412"}, + {"2a11:5b40::/29", "204790"}, + {"2408:8459:b850::/38", "17816"}, + {"2804:14d:8e87::/44", "28573"}, + {"2804:79b4::/32", "271322"}, + {"2a02:2e02:1210::/42", "12479"}, + {"2a0e:6b40:10::/48", "42034"}, + {"240e:30b::/35", "137691"}, + {"2607:f2b1:4001::/48", "30614"}, + {"2a02:2698:7000::/38", "50543"}, + {"2001:5a0:3e02::/39", "6453"}, + {"240a:a0ce::/32", "142856"}, + {"2605:3d00::/32", "46353"}, + {"2610:b0:4072::/40", "3573"}, + {"2804:84f8::/32", "272549"}, + {"2400:dd0d:2001::/30", "7497"}, + {"2403:3a00::/32", "9371"}, + {"2405:1040::/48", "135905"}, + {"2407:5680::/32", "133476"}, + {"240e:3b4:1400::/38", "134773"}, + {"2804:48c0::/32", "267142"}, + {"2a02:df0::/32", "25233"}, + {"2a0f:c083::/32", "51837"}, + {"2a11:5740::/29", "1239"}, + {"2403:780:c000::/34", "64098"}, + {"2600:80c:1000::/39", "701"}, + {"2a00:6901:b005::/48", "20926"}, + {"2a06:a001:a000::/44", "210542"}, + {"2a0c:7480::/32", "5606"}, + {"2001:559:8510::/48", "33657"}, + {"2602:107:1010::/48", "33363"}, + {"2606:6e00::/32", "7296"}, + {"2607:e080::/32", "197696"}, + {"2804:4c2c::/32", "267354"}, + {"2a03:b280:1000::/48", "29838"}, + {"2409:8d5a:600::/45", "9808"}, + {"240a:a4b8::/32", "143858"}, + {"2600:1402:1f::/37", "20940"}, + {"2801:19c:10::/48", "14080"}, + {"2804:36f8::/32", "266383"}, + {"2a0e:b107:1567::/44", "209209"}, + {"2606:eb80::/32", "55044"}, + {"2800:2e::/32", "7908"}, + {"2804:6f00::/32", "270632"}, + {"2a03:2887:ff21::/48", "63293"}, + {"2a0b:6e00::/32", "203687"}, + {"240a:ab54::/32", "145550"}, + {"240a:ad91::/32", "146123"}, + {"2a09:9cc0::/48", "44364"}, + {"2a0a:9204:31::/30", "61317"}, + {"2c0f:f3f0::/32", "328024"}, + {"2001:559:3c8::/48", "7922"}, + {"2001:559:87a7::/48", "33287"}, + {"2001:1900:2816::/35", "3356"}, + {"2620:100:6036::/41", "19679"}, + {"2806:230:3005::/48", "11888"}, + {"2a00:4802:4e00::/44", "13124"}, + {"2a01:e0::/32", "39854"}, + {"2a03:9c0::/32", "28716"}, + {"2001:470:bf::/41", "6939"}, + {"2001:1248:8000::/43", "11172"}, + {"240a:a05d::/32", "142743"}, + {"2804:3724::/32", "266392"}, + {"2806:20d:5049::/46", "32098"}, + {"2a0a:540::/29", "205892"}, + {"2001:200:c000::/35", "23634"}, + {"2403:8300:813f::/48", "2516"}, + {"2406:ae40::/32", "141590"}, + {"2a02:88d:100::/48", "48695"}, + {"2a02:2ab0:220::/37", "702"}, + {"2001:559:c3e2::/48", "7922"}, + {"2604:5ec0::/32", "13356"}, + {"2608:148:b::/48", "27064"}, + {"2402:8100:27c0::/47", "45271"}, + {"2405:e100::/43", "132116"}, + {"2607:fb60::/32", "1742"}, + {"2a02:e980:e5::/44", "19551"}, + {"2001:4998:ef6d::/43", "14778"}, + {"2804:fb0::/32", "262841"}, + {"2a01:bb23:8000::/29", "14618"}, + {"2a02:26f7:c5c4::/47", "36183"}, + {"2001:df1:8000::/48", "132440"}, + {"2800:484:2f00::/40", "10620"}, + {"2806:2f0:4061::/46", "17072"}, + {"2001:1978:1300::/40", "13768"}, + {"2401:6bfd::/32", "18220"}, + {"240e:3b3:1400::/38", "134773"}, + {"2600:6c20:c22::/45", "20115"}, + {"2804:c20::/32", "52680"}, + {"2804:74f8::/32", "271015"}, + {"2001:df0:8640::/48", "133658"}, + {"2408:8957:7e00::/40", "17622"}, + {"2409:896a:2e00::/39", "9808"}, + {"2606:18c0:1e::/48", "14445"}, + {"2a02:26f7:f148::/48", "36183"}, + {"2a02:7b40::/32", "62282"}, + {"2a03:6640::/32", "199562"}, + {"240a:ac02::/32", "145724"}, + {"2602:ff62:20e::/36", "61317"}, + {"2804:52e4::/32", "268548"}, + {"2a02:6420::/32", "201596"}, + {"2407:8c00:1b0::/44", "55441"}, + {"2a00:5a20::/47", "199289"}, + {"2a07:2780::/31", "15490"}, + {"2001:df0:272::/48", "132111"}, + {"2001:1838:9002::/40", "23352"}, + {"2001:67c:1bec:f000::/52", "2148"}, + {"2001:bf7:fc10::/38", "44194"}, + {"2804:15f0:8000::/33", "263419"}, + {"2402:800:538d::/43", "7552"}, + {"2408:8456:6040::/39", "17816"}, + {"2408:84f3:a840::/38", "17816"}, + {"2a02:888:8044::/46", "48695"}, + {"2a03:22a0::/32", "44833"}, + {"2a05:d012::/36", "16509"}, + {"2804:10b0::/32", "28175"}, + {"2a04:d480:2400::/35", "25291"}, + {"2408:8459:cc30::/41", "17622"}, + {"240e:44d:100::/42", "140345"}, + {"2a0c:a9c7:236::/48", "47445"}, + {"2400:7fc0:2c0::/44", "55960"}, + {"2600:380:9f80::/34", "20057"}, + {"2602:107:e000::/40", "11426"}, + {"2804:163c:303::/32", "263277"}, + {"2804:3584::/32", "266291"}, + {"2a02:2e02:8600::/42", "12479"}, + {"2a0e:4980::/32", "15879"}, + {"2001:43f8:92::/48", "37708"}, + {"2405:4803:31a::/37", "18403"}, + {"2a05:dec0::/29", "197580"}, + {"2403:8500:100::/36", "45804"}, + {"2403:df00:3::/32", "9292"}, + {"240e:982:5500::/36", "4134"}, + {"2600:140b:6::/44", "20940"}, + {"2a06:c6c0:1::/48", "15626"}, + {"2001:1388:8a0c::/47", "264684"}, + {"2406:da00:6000::/40", "16509"}, + {"2407:d600::/32", "7690"}, + {"2408:8459:3a50::/37", "17816"}, + {"2600:6c38:a3e::/41", "20115"}, + {"2600:9000:2378::/45", "16509"}, + {"2803:c010:3e4::/47", "271799"}, + {"2804:14d:5083::/41", "28573"}, + {"2804:4c14:aa01::/39", "267348"}, + {"2a02:26f0:10b::/45", "20940"}, + {"2a02:26f7:d255::/46", "20940"}, + {"2404:bf40:f081::/39", "139084"}, + {"2406:d501:10::/32", "136557"}, + {"2804:2324:f000::/36", "262883"}, + {"2a02:6680:f100::/44", "16116"}, + {"2401:2a00:1004::/34", "7468"}, + {"2600:1009:a100::/43", "6167"}, + {"2a02:26b0:8000::/48", "42910"}, + {"2a03:4080::/32", "47815"}, + {"2a0b:5380::/29", "206119"}, + {"2001:559:773::/45", "7922"}, + {"2401:b400:10::/47", "58536"}, + {"240a:a99a::/32", "145108"}, + {"2607:4d00:4000::/35", "33260"}, + {"2a0c:10c0::/40", "196755"}, + {"2a0d:ee00::/32", "42487"}, + {"2001:da8:b6::/48", "24359"}, + {"2403:f040::/32", "4618"}, + {"2803:21c0::/32", "265680"}, + {"2a01:79c0::/32", "58326"}, + {"2a06:c3c0::/48", "52048"}, + {"2001:559:4cf::/43", "7015"}, + {"2804:10a0:e0::/38", "28173"}, + {"2a02:26f7:b608::/48", "36183"}, + {"2001:67c:1f4::/48", "39500"}, + {"2405:8a00:8020::/47", "55824"}, + {"2804:8124::/32", "272435"}, + {"2a02:26f7:c1::/48", "20940"}, + {"2a02:26f7:d154::/47", "36183"}, + {"2a02:26f7:ea80::/48", "36183"}, + {"2001:678:6bc::/48", "202592"}, + {"240a:abfe::/32", "145720"}, + {"2600:c04::/35", "10912"}, + {"2606:4700::/47", "13335"}, + {"2a0a:9c0::/29", "207991"}, + {"2001:559:c50b::/45", "7922"}, + {"2804:51c::/33", "262495"}, + {"2001:67c:1578::/48", "43757"}, + {"2407:3dc0::/32", "140583"}, + {"240a:a08f::/32", "142793"}, + {"2605:c00:1200::/40", "46920"}, + {"2806:2f0:1041::/46", "22884"}, + {"2a02:26f7:b7c4::/48", "36183"}, + {"2a02:2e02:3ba0::/37", "12479"}, + {"2a06:6541:2002::/48", "3356"}, + {"2001:900::/32", "35393"}, + {"2402:ef01::/47", "9430"}, + {"2804:d74::/32", "28577"}, + {"2a00:1288:1a8::/46", "34010"}, + {"2405:ec0::/36", "132768"}, + {"2407:c080:805::/37", "55990"}, + {"2a03:2e0::/32", "197451"}, + {"2620:149:a1b::/48", "714"}, + {"2804:1644:fb00::/37", "262903"}, + {"2804:14c:9b89::/41", "28573"}, + {"2804:117c:8010::/33", "53061"}, + {"240a:a989::/32", "145091"}, + {"240a:ac96::/32", "145872"}, + {"2607:9c00::/32", "18474"}, + {"2803:c40::/32", "33182"}, + {"2001:44c8:45a0::/43", "45430"}, + {"2404:bf40:e101::/46", "139084"}, + {"2406:3000:3:2c::/45", "4657"}, + {"240a:a123::/32", "142941"}, + {"2600:1805:ff11::/48", "16552"}, + {"2001:559:87a6::/48", "7922"}, + {"2001:1a68:16::/44", "15694"}, + {"2600:1406:32::/48", "21342"}, + {"2604:7f80::/32", "17378"}, + {"2803:2b00:1103::/32", "52468"}, + {"2a00:ab80::/32", "50903"}, + {"2a0c:54c0::/32", "204065"}, + {"2001:470:cf::/43", "6939"}, + {"2001:579:e02c::/43", "22773"}, + {"2001:4878:31::/48", "12222"}, + {"240e:951:2c00::/28", "4134"}, + {"2804:7e00::/32", "271596"}, + {"2a01:7120::/32", "62206"}, + {"2a04:4a45::/44", "206067"}, + {"2001:67c:17b0::/48", "21436"}, + {"2602:fd23:a::/36", "33185"}, + {"2607:f178:10::/48", "30217"}, + {"2803:c200:7519::/48", "22411"}, + {"2a06:4000::/29", "204151"}, + {"2001:67c:24b8::/48", "212725"}, + {"2401:d800:b4c0::/42", "7552"}, + {"240e:350:6400::/31", "4134"}, + {"2606:a600:4001::/48", "398024"}, + {"2804:3c34::/32", "266196"}, + {"2a03:83a0:2::/48", "201529"}, + {"2001:559:4ba::/48", "33652"}, + {"2001:579:e03c::/41", "22773"}, + {"2001:da8:cd::/48", "138373"}, + {"2600:100b:b0e0::/39", "6167"}, + {"2610:20:6b00::/40", "2648"}, + {"2804:14c:d800::/40", "28573"}, + {"2a02:26f7:c148::/48", "36183"}, + {"2a02:cb80:2140::/48", "43766"}, + {"2404:ce40:2000::/32", "138884"}, + {"240a:a4c2::/32", "143868"}, + {"2403:f680:101::/48", "58898"}, + {"2406:3002:50::/50", "138345"}, + {"2408:8957:d240::/40", "17622"}, + {"2409:8e14:9000::/31", "56044"}, + {"240e:978:600::/36", "4134"}, + {"2620:13d:c000::/48", "399086"}, + {"2804:92c::/32", "263056"}, + {"2001:388:30d9::/33", "7575"}, + {"2402:8100:31d8::/47", "45271"}, + {"2403:e600::/36", "58376"}, + {"2a02:26f7:eb40::/48", "36183"}, + {"2001:4530:4::/32", "9433"}, + {"2409:8971::/29", "9808"}, + {"2001:1a11:126::/48", "8781"}, + {"2408:8459:1a30::/41", "17622"}, + {"2600:1417:62::/48", "20940"}, + {"2620:171:71::/46", "42"}, + {"2800:810::/39", "27747"}, + {"2602:fcdf::/36", "398491"}, + {"2a02:a48::/32", "48960"}, + {"2a02:26f7:c809::/46", "20940"}, + {"2401:4900:3280::/42", "45609"}, + {"240a:a132::/32", "142956"}, + {"2a02:26f7:ef10::/48", "36183"}, + {"2a0e:8f02:2154::/48", "211869"}, + {"2405:c9c0:1389::/32", "138823"}, + {"2a07:1980:e::/43", "48851"}, + {"2408:8957:8100::/40", "17816"}, + {"2001:579:e384::/35", "22773"}, + {"2404:c140:956e::/48", "57401"}, + {"2409:8904:e140::/42", "24547"}, + {"2605:a40c:24::/32", "33363"}, + {"2804:66ac::/32", "269575"}, + {"2a02:45c0:15::/48", "59675"}, + {"2a03:3da0::/48", "59649"}, + {"2a03:47c0:20c1::/39", "21277"}, + {"2a10:7900:ffff::/29", "399975"}, + {"2001:450::/34", "3549"}, + {"2600:1004:f000::/44", "6167"}, + {"2001:5b0:3d00::/38", "6621"}, + {"2402:800:3dd3::/44", "7552"}, + {"2408:8956:3100::/40", "17816"}, + {"240a:aa77::/32", "145329"}, + {"2600:6c34:221::/48", "33588"}, + {"2806:230:3012::/48", "265594"}, + {"2a01:170:2000::/32", "8820"}, + {"2a02:26f7:eccc::/48", "36183"}, + {"2a0d:2406:babe::/48", "49133"}, + {"2404:0:2000::/36", "7482"}, + {"2404:0:9000::/26", "17709"}, + {"2600:1fa0:e0c0::/44", "16509"}, + {"2804:683c::/32", "269678"}, + {"2001:4c8:1086::/43", "15290"}, + {"2400:a980:1500::/36", "133111"}, + {"2402:800:62ac::/43", "7552"}, + {"2407:0:0:3e::/32", "4761"}, + {"240a:a861::/32", "144795"}, + {"2606:4800::/32", "11430"}, + {"2800:5f0:3001::/42", "22724"}, + {"2a00:cc40:3::/29", "44395"}, + {"2a0c:2800::/32", "205316"}, + {"2001:559:509::/48", "33650"}, + {"2001:dc7:ffc2::/48", "24406"}, + {"2402:8700:54::/32", "58979"}, + {"2803:2e40::/39", "27796"}, + {"2804:8260::/32", "272516"}, + {"2a10:2f00:12a::/48", "9886"}, + {"2001:df0:cf::/48", "55390"}, + {"2600:1409:9000::/48", "35994"}, + {"2a05:68c0::/29", "201059"}, + {"2a05:9340::/30", "60117"}, + {"2a06:8dc7::/48", "25369"}, + {"240a:a0b7::/32", "142833"}, + {"2605:7440::/32", "20128"}, + {"2a0d:d380::/29", "210107"}, + {"2001:67c:20::/48", "198303"}, + {"2600:c010:100::/40", "7843"}, + {"2a05:5300::/29", "200562"}, + {"2a09:4d41::/32", "50673"}, + {"2a0b:fec0::/29", "205360"}, + {"2a0d:3080::/29", "205068"}, + {"2001:67c:1cc::/48", "50906"}, + {"2001:67c:124c::/48", "197564"}, + {"240e:3b5:1400::/38", "134773"}, + {"2804:48d8::/32", "267148"}, + {"2804:6b00::/32", "270371"}, + {"2a00:e200:100::/48", "39396"}, + {"2a0e:fb44::/32", "398343"}, + {"2408:8956:700::/40", "17816"}, + {"2600:1403:3::/44", "20940"}, + {"2801:16:f000::/48", "19429"}, + {"2804:d8c::/32", "52638"}, + {"240a:a409::/32", "143683"}, + {"240a:a867::/32", "144801"}, + {"2606:d980::/32", "396481"}, + {"2001:559:840c::/48", "7015"}, + {"240e:44d:40::/42", "140346"}, + {"2804:8270::/32", "61608"}, + {"2806:370:6000::/40", "28403"}, + {"2a03:b6c0::/32", "20672"}, + {"2a03:ed80::/32", "13178"}, + {"2a12:7c40::/48", "208446"}, + {"2001:559:5ae::/47", "20214"}, + {"2001:559:c2d4::/48", "33659"}, + {"2804:4a48::/32", "267229"}, + {"2a02:26f7:dc41::/46", "20940"}, + {"2402:800:9947::/43", "7552"}, + {"240a:a53d::/32", "143991"}, + {"2620:132:3000::/40", "395089"}, + {"2800:160:1053::/45", "14259"}, + {"2a02:ad8:7c::/38", "12389"}, + {"2a0a:56c4:8200::/47", "42649"}, + {"2a0b:c540::/29", "47926"}, + {"2001:559:8717::/48", "33659"}, + {"2402:800:3cc5::/43", "7552"}, + {"2406:3000:20::/44", "4657"}, + {"2409:8030:900::/35", "9808"}, + {"240e:3b6:dc00::/34", "4134"}, + {"2605:a401:80c6::/43", "33363"}, + {"2803:6900:553::/48", "52423"}, + {"2804:145c::/37", "263327"}, + {"2a01:4000::/32", "33852"}, + {"2001:502:1ca1::/48", "396574"}, + {"2001:559:4d8::/48", "33655"}, + {"2409:896a:7c00::/39", "9808"}, + {"240a:a157::/32", "142993"}, + {"2606:4700:8ca0::/44", "13335"}, + {"2607:7c80:54::/48", "7247"}, + {"2001:df6:6380::/48", "141866"}, + {"2400:9380:9200::/46", "4809"}, + {"2401:f000:2:100::/56", "38477"}, + {"2402:800:9be0::/44", "7552"}, + {"2a00:4802:ab0::/41", "13124"}, + {"2a0b:a180::/29", "41038"}, + {"2001:559:139::/48", "33287"}, + {"2408:8956:300::/40", "17816"}, + {"2800:bf0:2a80::/47", "52257"}, + {"2001:67c:22a8::/48", "197416"}, + {"240a:ab7b::/32", "145589"}, + {"2605:b280::/32", "26709"}, + {"2803:1e80::/32", "28111"}, + {"2002::/16", "6939"}, + {"2400:e440:500::/41", "42382"}, + {"2402:c600::/32", "17941"}, + {"240e:ff:c000::/48", "134773"}, + {"2605:a40a:b000::/33", "33363"}, + {"2a0c:b641:453::/48", "211891"}, + {"2001:559:aa::/47", "7922"}, + {"2404:3d00:4134::/47", "3573"}, + {"240a:abcd::/32", "145671"}, + {"240e:964:9580::/41", "133775"}, + {"2620:48:c002::/47", "26549"}, + {"2804:1c30::/32", "28285"}, + {"2a00:1b88::/32", "29075"}, + {"2a04:9f40::/29", "204790"}, + {"2001:250:7801::/43", "24372"}, + {"240e:982:6800::/37", "4134"}, + {"2604:af80:848::/40", "18859"}, + {"2800:160:25d5::/38", "14259"}, + {"2a02:26f7:d485::/46", "20940"}, + {"2001:df1:fe80::/48", "139786"}, + {"2409:8c14:ae00::/31", "56044"}, + {"240a:a717::/32", "144465"}, + {"240a:adc1::/32", "146171"}, + {"2a01:aea0:dd2::/48", "42473"}, + {"2a02:ee80:4048::/46", "3573"}, + {"2a03:5f00:105::/46", "29644"}, + {"2001:6d0:ffb7::/48", "47445"}, + {"2001:df6:a700::/48", "132046"}, + {"2800:160:1f2a::/43", "14259"}, + {"2804:74cc::/32", "271004"}, + {"2001:250:7001::/46", "24369"}, + {"2001:559:81ac::/48", "7725"}, + {"2a02:26f0:9700::/48", "6762"}, + {"2a02:2aa8:121::/44", "702"}, + {"2402:800:3955::/42", "7552"}, + {"2404:138::/41", "38022"}, + {"2405:1c0:7961::/48", "55303"}, + {"2806:310:25::/44", "16960"}, + {"2a02:26f7:e149::/46", "20940"}, + {"2a03:9cc0::/29", "5463"}, + {"2a07:b8c1::/45", "14043"}, + {"2408:8957:4100::/40", "17816"}, + {"240e:1a:160::/44", "146966"}, + {"2001:67c:8d0::/48", "31564"}, + {"2602:fd50:100::/40", "62513"}, + {"2602:feda:105::/48", "396303"}, + {"2620:8:4300::/48", "174"}, + {"2800:490:4000::/36", "27951"}, + {"2803:9800:b4c3::/39", "11664"}, + {"2a0a:e5c1:100::/38", "207996"}, + {"2001:650:cc01::/48", "3209"}, + {"2402:800:599b::/42", "7552"}, + {"2408:8459:4450::/38", "17816"}, + {"2408:84e2:2c0::/37", "17621"}, + {"240e:628::/32", "17638"}, + {"2602:fed2:7195::/48", "33696"}, + {"2a01:3e0::/37", "6453"}, + {"2a09:c580::/32", "209979"}, + {"2c0f:fd58::/32", "11845"}, + {"2001:559:8187::/48", "7725"}, + {"2001:1250:2000::/44", "22894"}, + {"240e:804::/40", "140636"}, + {"2a01:40e0:2::/48", "34012"}, + {"2a0e:c80:1::/46", "3170"}, + {"2a0e:b107:340::/44", "209710"}, + {"2001:df0:e780::/48", "16089"}, + {"2600:5c00:386c::/48", "11351"}, + {"2a02:88d:8220::/44", "48695"}, + {"2001:470:ce::/48", "396097"}, + {"2605:1e80::/34", "14380"}, + {"2801:1ca::/44", "3816"}, + {"2001:559:75d::/48", "7725"}, + {"2408:870c:30::/40", "17621"}, + {"2409:807c:2100::/36", "9808"}, + {"240e:44d:5700::/42", "140345"}, + {"2a02:4c07:4000::/32", "12676"}, + {"2a06:e881:550d::/46", "209864"}, + {"2a10:2380::/29", "204790"}, + {"2001:df6:b780::/48", "148971"}, + {"2408:84f3:ba40::/37", "17816"}, + {"2605:cdc0:20::/48", "398088"}, + {"2800:bf0:140::/45", "52257"}, + {"2a05:3580:b800::/33", "35807"}, + {"2c0f:f088::/32", "328471"}, + {"2406:20c0::/34", "140423"}, + {"2406:7400:34::/47", "131269"}, + {"2607:fb10:7012::/42", "2906"}, + {"2a02:ee80:4199::/48", "3573"}, + {"2a09:bac0:242::/48", "13335"}, + {"2402:800:34d3::/44", "7552"}, + {"2604:d240::/32", "396852"}, + {"2001:559:c276::/48", "7015"}, + {"2001:559:c2ec::/48", "33652"}, + {"2800:bf0:2445::/38", "27947"}, + {"2804:2f40:f000::/45", "264880"}, + {"2a09:1405::/48", "48749"}, + {"2400:6d80::/32", "58621"}, + {"2804:13b0:3c00::/43", "263546"}, + {"2a00:f620:1::/48", "174"}, + {"2001:67c:2f04::/48", "16074"}, + {"2800:bf0:8250::/44", "27947"}, + {"2804:1608::/32", "263423"}, + {"2a10:2f01:220::/48", "207890"}, + {"2a10:c540::/29", "44070"}, + {"2408:8956:cdc0::/38", "17622"}, + {"2804:12a0::/32", "61900"}, + {"2804:67c4::/32", "269649"}, + {"2a00:1210:ffff::/48", "34700"}, + {"2a01:a460::/32", "34520"}, + {"2a02:2e02:1140::/40", "12479"}, + {"2a07:14c0:7000::/36", "59504"}, + {"2a0c:9a40:1038::/47", "34927"}, + {"2606:2800:6040::/47", "15133"}, + {"2607:ffd0:5::/39", "13767"}, + {"2804:10a0:224::/32", "28173"}, + {"2a05:6a00::/29", "51395"}, + {"2001:df2:f680::/48", "132269"}, + {"2406:3000:4d::/43", "4657"}, + {"2001:559:8439::/46", "33667"}, + {"2001:16a2:c2c4::/42", "39386"}, + {"2408:8456:4010::/42", "134543"}, + {"240e:51:6000::/29", "4134"}, + {"2804:6cd8:1000::/38", "270496"}, + {"2a02:610::/33", "2588"}, + {"2a02:28f0::/29", "44136"}, + {"2402:3a80:1705::/48", "38266"}, + {"2001:559:1d6::/48", "33491"}, + {"2001:559:8128::/48", "13367"}, + {"240e:438:ac40::/38", "4134"}, + {"2600:370f:3743::/45", "32261"}, + {"2801:80:3680::/48", "269133"}, + {"2a0c:7840::/29", "50415"}, + {"2001:648:2e81::/35", "5408"}, + {"2603:90b6::/32", "12271"}, + {"2408:883a::/37", "4837"}, + {"240a:a929::/32", "144995"}, + {"2610:a1:1082::/48", "397226"}, + {"2001:559:1b2::/48", "33287"}, + {"240a:a3fa::/32", "143668"}, + {"2600:1407:3401::/38", "20940"}, + {"2600:1419:3201::/37", "20940"}, + {"2001:559:832b::/48", "7922"}, + {"2001:559:85da::/48", "13367"}, + {"2001:448a:3010::/41", "7713"}, + {"2001:4300::/32", "31065"}, + {"2402:e280:2136::/44", "134674"}, + {"2001:559:85d9::/48", "7922"}, + {"2604:6140::/32", "21818"}, + {"2a04:7c00::/29", "200023"}, + {"2001:559:831e::/48", "7922"}, + {"2400:dd0b:1006::/29", "7497"}, + {"2801:140:bfa::/48", "262249"}, + {"2806:20d:16fd::/46", "32098"}, + {"2a07:3506:c1::/48", "9150"}, + {"2a09:be40:28ff::/48", "213170"}, + {"2001:df3:e180::/48", "140695"}, + {"2001:448a:1070::/40", "7713"}, + {"2803:6604:c401::/39", "28075"}, + {"2a00:12e8::/32", "29014"}, + {"2a01:4020:35::/32", "25369"}, + {"2a02:26f7:cc41::/46", "20940"}, + {"2a06:6780::/29", "56568"}, + {"2606:3380:fff0::/48", "53334"}, + {"2a0d:1a43::/32", "208590"}, + {"2406:2f00::/32", "132542"}, + {"2406:b400:f0::/47", "18209"}, + {"2407:1000::/35", "24005"}, + {"2409:8014:300a::/30", "56044"}, + {"2600:370f:3765::/44", "32261"}, + {"2804:cdc:c000::/34", "52565"}, + {"2806:107e:1c::/42", "8151"}, + {"2a00:1ec8:9a::/32", "2854"}, + {"2406:f00:9::/48", "58758"}, + {"2800:5d0:213::/48", "17048"}, + {"2804:1f4::/32", "262757"}, + {"2804:4120::/32", "266005"}, + {"2a00:7740::/32", "33915"}, + {"2a0b:8140::/29", "38948"}, + {"2001:250:2413::/44", "24356"}, + {"2001:da8:b4::/48", "24367"}, + {"2a0f:8780::/29", "208108"}, + {"2001:e48:83::/32", "9583"}, + {"2604:a200::/32", "13614"}, + {"2001:648:2c01::/44", "5408"}, + {"2001:16a2:7400::/36", "25019"}, + {"240e:6c0::/23", "4134"}, + {"2803:8c40::/32", "263789"}, + {"2803:c480::/32", "263194"}, + {"2a00:7b60::/32", "49058"}, + {"2a02:2708::/32", "21378"}, + {"2001:559:6f::/48", "33287"}, + {"2600:1004:a100::/43", "6167"}, + {"2603:5:2100::/38", "44273"}, + {"2001:559:269::/48", "13367"}, + {"2402:800:940f::/43", "7552"}, + {"2402:800:96ee::/39", "7552"}, + {"2604:400::/32", "26225"}, + {"2607:f750:20::/47", "23473"}, + {"2801:80:2540::/48", "268558"}, + {"2804:314:10::/34", "61568"}, + {"2a02:7aa0:5000::/48", "52173"}, + {"2c0f:e908::/32", "327750"}, + {"2404:d180:1a::/48", "133372"}, + {"2a02:24b0::/32", "29470"}, + {"2404:7e80:4000::/36", "132717"}, + {"2409:8028:2b00::/40", "56041"}, + {"2607:f6f0:3002::/40", "19930"}, + {"2801:140:49::/48", "262249"}, + {"2804:4f8:a002::/45", "28263"}, + {"2804:138b:b0c2::/42", "53037"}, + {"2a02:26f7:b8cc::/48", "36183"}, + {"2a09:bac0:134::/44", "13335"}, + {"2a0d:a8c0::/29", "39405"}, + {"2620:96:8000::/48", "3719"}, + {"2620:171:d1::/45", "42"}, + {"2a02:26f7:df4c::/48", "36183"}, + {"2a03:4d42::/36", "199610"}, + {"240e:3b6:9c00::/34", "140310"}, + {"2600:1408:8000::/48", "35994"}, + {"2606:4280:8000::/36", "16696"}, + {"2a02:7d0::/32", "34141"}, + {"2001:67c:1750::/48", "208441"}, + {"2401:b640::/32", "136948"}, + {"2804:2838::/38", "263948"}, + {"2001:dce:100::/48", "38064"}, + {"2001:df4:4280::/48", "140920"}, + {"240a:a7a7::/32", "144609"}, + {"240e:f:b000::/36", "134768"}, + {"2600:1406:fc01::/31", "20940"}, + {"2600:1801:4::/46", "16552"}, + {"2001:1248:55d8::/47", "11172"}, + {"2001:4070::/33", "5550"}, + {"2409:8c70:3a20::/41", "9808"}, + {"2607:fdf0:5efc::/39", "8008"}, + {"2a09:9dc0::/48", "44364"}, + {"2a0e:b107:370::/44", "208751"}, + {"2a0f:9640::/29", "35415"}, + {"2001:4c8:102b::/41", "15290"}, + {"2001:19e8:a::/48", "2576"}, + {"2600:140f:f800::/48", "24319"}, + {"2606:62c0:1000::/34", "399686"}, + {"2800:440:1c00::/42", "27738"}, + {"2804:6cc:8200::/36", "262607"}, + {"2a01:4e8::/32", "44314"}, + {"2a05:e800:1::/48", "50881"}, + {"2a10:ba00:bee5::/48", "16509"}, + {"240e:3b5:9200::/36", "140317"}, + {"2600:6c10:e01::/46", "20115"}, + {"2602:fd6e::/36", "19999"}, + {"2620:105:f000::/40", "4201"}, + {"2401:d800:2080::/42", "7552"}, + {"2401:d800:f200::/42", "7552"}, + {"2a01:4ff::/40", "213230"}, + {"2001:67c:1442::/48", "43832"}, + {"2600:1407:1401::/36", "20940"}, + {"2804:354c::/33", "53018"}, + {"2401:2200:50::/48", "55420"}, + {"2401:d800:5650::/42", "7552"}, + {"2402:800:f690::/39", "7552"}, + {"2602:ffca::/36", "32875"}, + {"2603:c002:150::/38", "31898"}, + {"2803:d1a0::/32", "267700"}, + {"2804:694:5000::/32", "262596"}, + {"2804:1194::/36", "263424"}, + {"2804:7690::/33", "271120"}, + {"2a02:250:3::/48", "25234"}, + {"2a02:c6c1::/48", "44050"}, + {"2001:559:761::/48", "7016"}, + {"2806:2f0:4241::/46", "17072"}, + {"2001:44b8:30ed::/48", "7545"}, + {"240a:a41d::/32", "143703"}, + {"2801:1fa::/44", "19429"}, + {"2a03:2880:f167::/44", "32934"}, + {"2a12:3780::/29", "57113"}, + {"240e:966:c400::/39", "133775"}, + {"2800:600:181::/38", "52323"}, + {"2801:80:2330::/48", "267247"}, + {"2804:7a98::/32", "271381"}, + {"2600:1005:b1f0::/33", "22394"}, + {"2600:1800:11::/45", "16552"}, + {"2a02:26f7:bf49::/46", "20940"}, + {"2001:678:800::/48", "213103"}, + {"2402:800:9a0f::/43", "7552"}, + {"2404:bc0:4200::/43", "137735"}, + {"2408:894e::/32", "4837"}, + {"2a04:4e40:7840::/43", "54113"}, + {"2001:ee0:ee00::/40", "45899"}, + {"2603:c0f0:1210::/39", "6142"}, + {"2a02:6aa0::/32", "200081"}, + {"2a0b:b2c0::/48", "205504"}, + {"2405:4803:cea::/45", "18403"}, + {"2408:8459:50::/38", "17816"}, + {"240a:a08c::/32", "142790"}, + {"2804:66c0::/32", "269580"}, + {"2804:7048::/32", "270717"}, + {"2a01:7660:7::/32", "12843"}, + {"2602:fc3b:101::/38", "399970"}, + {"2a07:6880::/32", "202872"}, + {"2001:7f8:5d::1000/48", "15645"}, + {"2001:fd8:3040::/47", "4775"}, + {"2600:1003:a410::/38", "22394"}, + {"2804:20fc:1100::/36", "264525"}, + {"2a01:b000:9::/32", "35266"}, + {"2a02:26f7:cd::/48", "20940"}, + {"2a04:100::/34", "49223"}, + {"2406:1e00::/32", "56030"}, + {"2409:8087:2900::/35", "9808"}, + {"2600:c02:1021::/32", "12182"}, + {"2607:f928:4::/48", "13359"}, + {"2804:72b4::/32", "270870"}, + {"2a09:35c0:100::/38", "209510"}, + {"2001:6d0:6d0::/48", "43832"}, + {"2001:978:5401::/36", "174"}, + {"2402:9e80:2402::/48", "133752"}, + {"240a:a2e1::/32", "143387"}, + {"2600:c02:b020::/48", "22211"}, + {"2806:264:4300::/37", "13999"}, + {"2806:107e::/43", "8151"}, + {"2001:559:f3::/48", "33651"}, + {"2408:8256:2ca0::/39", "17816"}, + {"2408:861a::/31", "4837"}, + {"240a:adec::/32", "146214"}, + {"2600:1901:bde0::/33", "15169"}, + {"2a00:61e0::/32", "60294"}, + {"240a:a072::/32", "142764"}, + {"2804:3838:6::/42", "53170"}, + {"2600:400::/35", "15147"}, + {"2604:ee40::/32", "395646"}, + {"2a0e:97c0:380::/48", "60404"}, + {"2001:559:c107::/48", "33667"}, + {"2a07:2d40::/48", "25435"}, + {"240a:a39c::/32", "143574"}, + {"240a:a7ad::/32", "144615"}, + {"2606:7ec0::/32", "4046"}, + {"2608:c144:1::/48", "5927"}, + {"2800:2a0:230::/47", "264788"}, + {"2a06:7740::/48", "207651"}, + {"2001:559:c022::/47", "33657"}, + {"2001:df7:c700::/48", "45316"}, + {"240a:a322::/32", "143452"}, + {"2a12:4946:1700::/48", "211398"}, + {"2001:1878:600::/39", "226"}, + {"2409:8b7d::/30", "9808"}, + {"2804:65dc::/32", "269519"}, + {"2806:2f0:3263::/40", "17072"}, + {"2001:550:1704::/36", "174"}, + {"2405:7c00:a000::/45", "9534"}, + {"2407:c000:c025::/34", "9270"}, + {"240e:10:1000::/32", "4134"}, + {"240e:a66::/35", "140329"}, + {"2806:2f0:9e81::/42", "17072"}, + {"2a02:2e02:bc0::/43", "12479"}, + {"2408:8459:b050::/38", "17816"}, + {"2801:13:4800::/48", "269825"}, + {"2804:84fc::/37", "272550"}, + {"2a02:26f7:bd11::/42", "20940"}, + {"2001:559:2b4::/47", "7922"}, + {"240a:ab28::/32", "145506"}, + {"2600:1417:9001::/36", "20940"}, + {"2801:10:f000::/48", "3816"}, + {"2a02:6604:3::/48", "44933"}, + {"2401:8e80::/32", "18187"}, + {"2408:8956:cd40::/40", "17816"}, + {"2804:6dec::/32", "270564"}, + {"2001:da8:a7::/48", "24363"}, + {"2409:8057:3054::/42", "56040"}, + {"2803:6700:340::/48", "263210"}, + {"2804:5e28::/32", "269015"}, + {"2a02:26f7:c9c5::/46", "20940"}, + {"2803:50c0:105::/46", "264763"}, + {"2804:7aa8::/32", "271384"}, + {"2001:500:9c::/46", "20144"}, + {"2001:559:80cd::/48", "22258"}, + {"2001:da8:7011::/48", "23910"}, + {"2001:44b8:3084::/48", "7545"}, + {"2409:8c20:c800::/34", "56046"}, + {"2806:2f0:9843::/42", "17072"}, + {"2a02:26f7:c88c::/47", "36183"}, + {"2a02:26f7:cd47::/48", "20940"}, + {"2a02:dc00:100::/48", "15493"}, + {"2001:559:8208::/48", "33654"}, + {"2404:c8:3::/32", "10217"}, + {"2600:140b:f001::/37", "20940"}, + {"2600:1480:5801::/44", "21342"}, + {"2804:2778::/34", "263903"}, + {"2a00:da80::/32", "43614"}, + {"2001:559:c332::/48", "33659"}, + {"2406:840:9995::/46", "210320"}, + {"2804:200c::/32", "262815"}, + {"2804:802c:205::/32", "271734"}, + {"2a00:1c08::/32", "44335"}, + {"2a00:da00::/32", "8560"}, + {"2a02:558::/32", "12594"}, + {"2a0a:aa42::/32", "205668"}, + {"2001:678:8::/48", "210004"}, + {"2401:d800:9c70::/40", "7552"}, + {"2404:bf40:c441::/48", "7545"}, + {"240a:ab3d::/32", "145527"}, + {"2804:3d4::/45", "262401"}, + {"2001:250:2406::/44", "24356"}, + {"2404:e801:2004::/46", "55430"}, + {"2408:8459:ee10::/42", "17623"}, + {"2607:f148:1000::/34", "11734"}, + {"2610:a1:3068::/48", "12008"}, + {"2a02:26f7:eb84::/48", "36183"}, + {"2404:c2c0:240::/44", "135629"}, + {"2a06:11c0::/46", "31169"}, + {"2a0d:75c0::/29", "49191"}, + {"2a11:c00::/29", "47787"}, + {"2001:559:79::/48", "7725"}, + {"2400:9800:13::/45", "24203"}, + {"2409:8c85:5400::/43", "56040"}, + {"240e:10:a000::/37", "63838"}, + {"240e:3b8:dc00::/34", "4134"}, + {"2607:fc48:c18::/48", "40009"}, + {"2804:27c4::/32", "263921"}, + {"2804:7f04::/32", "271661"}, + {"2a06:f787:2::/48", "2686"}, + {"2a0c:f000:1000::/48", "206976"}, + {"2001:da8:201d::/48", "138369"}, + {"240e:438:7a40::/37", "4134"}, + {"2620:128:1002::/48", "53620"}, + {"2a01:480::/32", "24961"}, + {"2a0b:5340::/48", "13030"}, + {"2407:b080::/48", "23724"}, + {"240a:acfa::/32", "145972"}, + {"2a0d:2e00:3000::/48", "33932"}, + {"2407:b400::/32", "17924"}, + {"2406:3400:9d::/41", "10143"}, + {"2600:1413:2000::/48", "24319"}, + {"2607:f1d0::/32", "17378"}, + {"2607:f598:f001::/48", "397715"}, + {"2803:8700:10::/48", "25577"}, + {"2001:559:878d::/46", "33652"}, + {"2602:fd50:f00::/48", "207071"}, + {"2803:7210:efff::/35", "271915"}, + {"2804:4f60::/35", "268323"}, + {"2a0f:cc87:6000::/36", "208861"}, + {"2402:800:3bee::/43", "7552"}, + {"2404:1900::/32", "18092"}, + {"240a:a967::/32", "145057"}, + {"240c:ca08::/30", "23910"}, + {"2600:141b:1000::/48", "35994"}, + {"2604:49c0::/32", "395400"}, + {"2a02:1800::/24", "6848"}, + {"2a09:fe00::/29", "209900"}, + {"2402:800:397f::/40", "7552"}, + {"240e:44d:2140::/42", "140361"}, + {"2a01:7d80:2000::/38", "8990"}, + {"2a0d:1642:1::/48", "49505"}, + {"2001:67c:2698::/48", "50779"}, + {"2407:d6c0:8::/48", "136785"}, + {"2605:6840:101::/38", "398041"}, + {"2620:ed:c000::/48", "14209"}, + {"2a00:5881:9000::/40", "198978"}, + {"2a03:2880:f20b::/43", "32934"}, + {"2001:1388:76c2::/36", "6147"}, + {"2406:2000:a1::/46", "10310"}, + {"2600:1406:1600::/48", "16625"}, + {"2620:102:4000::/43", "4130"}, + {"2806:32a::/32", "265574"}, + {"2a02:26f7:dd::/46", "20940"}, + {"2a09:5940::/29", "209304"}, + {"2001:da8:4021::/48", "23910"}, + {"2001:43f8:14c0::/48", "328644"}, + {"2001:4970::/32", "11274"}, + {"2407:3000::/45", "17707"}, + {"2604:d600:c82::/45", "32098"}, + {"2803:cb40::/32", "16906"}, + {"2806:230:500f::/48", "11888"}, + {"2a01:3b8::/33", "33885"}, + {"2a0a:4d00::/29", "201706"}, + {"2a0d:a740:1::/46", "213371"}, + {"2a0e:b107:450::/45", "57883"}, + {"2001:4490:d180::/46", "9829"}, + {"2603:b0af::/25", "11796"}, + {"2604:b000:9000::/33", "14638"}, + {"2c0f:f0a0::/32", "328638"}, + {"2001:df6:a800::/48", "59165"}, + {"2001:fd8:121::/46", "4775"}, + {"2404:7180:b021::/46", "23848"}, + {"2408:877f::/32", "134542"}, + {"240e:3b2:4c00::/35", "136200"}, + {"2800:484:d000::/38", "10620"}, + {"2803:d100:e940::/38", "52362"}, + {"2804:8254::/32", "272513"}, + {"2a02:f7c0::/32", "49273"}, + {"2401:d800:2550::/42", "7552"}, + {"2402:800:bb90::/42", "7552"}, + {"2403:7b40:1::/44", "132931"}, + {"240a:a3ef::/32", "143657"}, + {"2610:a1:1010::/48", "397226"}, + {"2408:8640::/32", "4837"}, + {"2608:4123:2::/48", "6025"}, + {"2803:c010:10::/47", "271799"}, + {"2a02:26f7:f244::/48", "36183"}, + {"2406:8ec0::/32", "45701"}, + {"2407:7800::/32", "55803"}, + {"2a03:2a00::/29", "15817"}, + {"2001:67c:208c::/48", "15562"}, + {"2402:4f00:4004::/32", "58453"}, + {"2600:1015::/32", "6167"}, + {"2620:101:403c::/48", "16880"}, + {"2a00:e540::/32", "33964"}, + {"2a02:4e0:2a00::/42", "16135"}, + {"2a0c:b641:190::/44", "57853"}, + {"2001:13b1:3::/32", "3549"}, + {"2a03:13c0::/32", "199624"}, + {"2a09:4c0:d01::/38", "58057"}, + {"2a0f:85c1:220::/44", "207842"}, + {"2402:800:fe80::/42", "7552"}, + {"240a:af32::/32", "146540"}, + {"2a01:7e0::/42", "44066"}, + {"2001:590:2005:300::/35", "3257"}, + {"2400:c540:c753::/36", "59238"}, + {"2402:800:be40::/42", "7552"}, + {"2408:8459:4e80::/42", "136959"}, + {"2620:1e0:100::/48", "10801"}, + {"2a00:1140:201::/32", "44806"}, + {"2a02:ac80:a001::/35", "25145"}, + {"2a03:2c20::/42", "50287"}, + {"2a04:c442:8000::/38", "2534"}, + {"2602:fc6a:210::/48", "399747"}, + {"2800:160:1c58::/42", "14259"}, + {"2800:5f0:3022::/45", "22724"}, + {"2a02:26f7:b748::/48", "36183"}, + {"2a03:1300::/32", "13214"}, + {"2401:31c0:fffe::/48", "134830"}, + {"240a:aa5e::/32", "145304"}, + {"2804:42b8::/32", "267521"}, + {"2a0c:3880::/29", "44543"}, + {"2405:84c0:fd15::/48", "51089"}, + {"2604:2e88::/30", "30036"}, + {"2800:160:18e0::/44", "14259"}, + {"2001:559:8488::/48", "7922"}, + {"2001:559:8729::/46", "33652"}, + {"2400:cb00:370::/48", "13335"}, + {"2406:9840::/44", "134053"}, + {"240a:a221::/32", "143195"}, + {"2804:61e4::/32", "269263"}, + {"2406:e002::/34", "23655"}, + {"2603:f390::/26", "397165"}, + {"2606:3d40:100::/40", "400097"}, + {"2804:1c84:4::/46", "61659"}, + {"2c0e:2005:0:200::/30", "5713"}, + {"2001:559:c220::/48", "33667"}, + {"2001:67c:93c::/48", "208445"}, + {"2404:f080:2000::/32", "131392"}, + {"240a:a393::/32", "143565"}, + {"2a00:4802:a90::/42", "13124"}, + {"2001:da8:af::/48", "24353"}, + {"2400:cb00:164::/48", "395747"}, + {"2620:11b:e0f2::/44", "3356"}, + {"2001:678:b9c::/48", "207853"}, + {"2001:df6:5c00::/48", "55938"}, + {"2610:b0:40da::/48", "3573"}, + {"2610:1e0:1801::/37", "3714"}, + {"2804:68d4::/32", "269719"}, + {"2804:6a10::/32", "270310"}, + {"2a02:b48:8010::/45", "39572"}, + {"2a0e:b107:11d8::/45", "58015"}, + {"2001:559:85dd::/48", "7725"}, + {"240e:45c:500::/40", "137266"}, + {"240e:982:b000::/40", "58461"}, + {"2800:68:11::/48", "262212"}, + {"2a02:cb43:1002::/45", "20546"}, + {"2001:579:5f84::/34", "22773"}, + {"2001:df0:290::/48", "22787"}, + {"2400:dd01:100a::/45", "7497"}, + {"2408:8656:30f0::/48", "17623"}, + {"2602:fc8b:11::/48", "211544"}, + {"2804:ea0:4002::/32", "52968"}, + {"2804:18b4::/32", "61948"}, + {"2a02:2010:2000::/43", "20978"}, + {"2a02:26f7:e385::/46", "20940"}, + {"2a0d:3c00::/29", "205243"}, + {"2a12:2340::/48", "59458"}, + {"2c0f:f508::/32", "327754"}, + {"2402:8100:27e2::/45", "55644"}, + {"2605:a401:8136::/41", "33363"}, + {"2a02:4560:4::/32", "60157"}, + {"2a09:4e07:d000::/36", "208861"}, + {"2001:dd8:1f::/48", "56088"}, + {"240a:a859::/32", "144787"}, + {"240e:87c:880::/24", "4134"}, + {"2602:fca9::/36", "1742"}, + {"2804:790::/32", "28653"}, + {"2a00:12a0::/32", "34123"}, + {"2001:da8:c1::/48", "138377"}, + {"2406:3340:2000::/32", "139139"}, + {"2602:fe4f::/36", "396917"}, + {"2a04:dfc0::/29", "680"}, + {"2001:250:803::/45", "24348"}, + {"240a:a0d6::/32", "142864"}, + {"2620:16d::/37", "7862"}, + {"2a10:f5c0::/29", "211357"}, + {"2a12:3e40::/48", "16509"}, + {"2001:559:409::/48", "7922"}, + {"2406:3400::/43", "10143"}, + {"2409:8054:44::/48", "9808"}, + {"240a:a3d5::/32", "143631"}, + {"2804:3034:108::/40", "264936"}, + {"2804:3ea4::/32", "266611"}, + {"2a02:26f7:f804::/48", "36183"}, + {"2408:8957:9100::/40", "17816"}, + {"2600:141b:15::/36", "20940"}, + {"2a0b:a700::/29", "207003"}, + {"2409:8904:5c70::/40", "24547"}, + {"240e:103:8b00::/44", "139203"}, + {"2804:61ec::/32", "269265"}, + {"2804:8060::/32", "61606"}, + {"2a0b:14c0:1::/48", "205184"}, + {"2407:5200:49::/38", "55915"}, + {"240a:ada3::/32", "146141"}, + {"240e:3b0:c000::/37", "140315"}, + {"2804:82a0::/32", "272530"}, + {"2a00:8860:100::/40", "60558"}, + {"2a00:ad40:20::/44", "197872"}, + {"2a02:26f7:d041::/46", "20940"}, + {"2a02:26f7:eb50::/48", "36183"}, + {"2001:678:c8::/48", "33999"}, + {"2407:4840::/32", "133301"}, + {"2605:7cc0::/32", "397161"}, + {"2801:0:310::/48", "262238"}, + {"2803:6900:1::/48", "52423"}, + {"2a0e:b700::/30", "35085"}, + {"2001:579:1c08::/42", "22773"}, + {"2409:8010:2900::/35", "9808"}, + {"2620:149:1150::/42", "714"}, + {"2804:111c:2::/45", "52818"}, + {"2a11:940::/29", "25145"}, + {"2001:da8:252::/48", "24350"}, + {"2804:8654::/32", "272636"}, + {"2a02:220::/32", "31122"}, + {"2a02:26f0:1501::/40", "20940"}, + {"2001:4200:3021::/38", "2018"}, + {"2400:18e0:1::/46", "131210"}, + {"2404:3c40::/32", "55933"}, + {"2404:6900:2013::/32", "17819"}, + {"2800:bf0:2443::/48", "27947"}, + {"2001:559:2b7::/44", "7922"}, + {"2409:896a:4c00::/39", "9808"}, + {"2600:6c38:106::/47", "20115"}, + {"2602:ffa6:700::/40", "62731"}, + {"2804:145c:cd10::/38", "263327"}, + {"2a0b:58c0::/29", "42375"}, + {"2001:559:850c::/47", "7725"}, + {"2001:1920::/32", "25689"}, + {"2606:f405::/32", "11776"}, + {"2620:1df::/36", "395678"}, + {"2001:250:219::/46", "24348"}, + {"2001:67c:292c::/48", "210211"}, + {"2800:160:164c::/46", "14259"}, + {"2804:39a0::/32", "266040"}, + {"2409:8028:1000::/40", "56041"}, + {"2600:100c:e210::/35", "22394"}, + {"2605:a401:8ca2::/41", "33363"}, + {"2804:520:2::/32", "262496"}, + {"2602:fc59:c0::/42", "19625"}, + {"2604:ca00:494::/42", "36492"}, + {"2a0b:4000::/29", "64488"}, + {"2806:2f0:7203::/42", "17072"}, + {"2a02:26f7:b4::/48", "36183"}, + {"2a09:3507::/32", "208861"}, + {"2a0e:40c0:2::/48", "21100"}, + {"2001:678:ec::/48", "197467"}, + {"2604:fb80:6801::/37", "15128"}, + {"2803:6900:593::/48", "52423"}, + {"2804:34d0::/32", "265482"}, + {"2804:5118::/32", "268430"}, + {"2a0f:19c0::/29", "60262"}, + {"2001:559:848a::/48", "33491"}, + {"2001:1810:9980::/48", "30447"}, + {"2406:840:f44f::/48", "137835"}, + {"2409:8c15:2e00::/35", "9808"}, + {"2600:9000:1e47::/48", "16509"}, + {"2a00:7e40:9ac1::/48", "1301"}, + {"2001:678:4::/47", "42909"}, + {"2001:da8:b81c::/48", "24372"}, + {"2001:1248:a4b0::/46", "11172"}, + {"2001:43f8:30::/48", "6968"}, + {"2403:9000::/32", "7594"}, + {"2404:4a00:7000:1::/37", "45629"}, + {"2605:e8c0::/32", "393444"}, + {"2607:f180::/34", "35908"}, + {"2620:171:1::/46", "42"}, + {"2803:f00:3::/45", "262182"}, + {"2a00:e120::/32", "20860"}, + {"240a:a781::/32", "144571"}, + {"2600:380:7c80::/39", "20057"}, + {"2800:600:212::/39", "52323"}, + {"240a:ab36::/32", "145520"}, + {"2600:1408:23::/45", "20940"}, + {"2604:d600:62e::/43", "32098"}, + {"2804:14d:8489::/41", "28573"}, + {"2c0f:ff30::/32", "37334"}, + {"2001:559:821b::/48", "33660"}, + {"2407:cc00::/32", "6660"}, + {"2602:fed2:7701::/48", "53356"}, + {"2804:f14:c100::/34", "262865"}, + {"2a0b:140::/29", "57773"}, + {"2001:559:831d::/48", "7015"}, + {"2001:678:7a8::/48", "13037"}, + {"2401:1d40:f8::/39", "23724"}, + {"2402:2f80:8::/48", "38001"}, + {"2804:3d4:2e::/43", "262401"}, + {"2001:559:124::/48", "33661"}, + {"2402:5d40::/32", "137079"}, + {"2620:115:c00e::/47", "2635"}, + {"2a06:79c0::/47", "15622"}, + {"2a0f:5701:3509::/48", "205593"}, + {"2407:1c00::/32", "26496"}, + {"2a02:26f7:b9::/48", "20940"}, + {"2001:559:8683::/48", "33660"}, + {"2403:fbc0:1000::/48", "23959"}, + {"2408:8456:6a00::/42", "17622"}, + {"2408:8459:8a30::/41", "17622"}, + {"2620:16e:487::/48", "3147"}, + {"2804:18c0::/35", "61951"}, + {"2a00:1c10:100::/40", "50300"}, + {"2a0e:8380::/32", "57793"}, + {"2402:800:328d::/43", "7552"}, + {"2405:19c0:1::/32", "140810"}, + {"2604:9740::/32", "11252"}, + {"2803:3440:9100::/33", "263784"}, + {"2804:2728:702::/45", "263880"}, + {"2a00:1d36:cc0::/38", "9121"}, + {"2a01:5740::/31", "57763"}, + {"2a0b:1b00::/29", "49544"}, + {"2a0f:9400:771f::/48", "211767"}, + {"2001:43f8:dd0::/48", "328212"}, + {"240a:a95b::/32", "145045"}, + {"2804:aec::/32", "52928"}, + {"2001:559:304::/48", "33657"}, + {"2401:ce80::/36", "14340"}, + {"2406:daa0:6060::/44", "16509"}, + {"240a:a3c8::/32", "143618"}, + {"2602:fd6b::/36", "36043"}, + {"2a00:4802:1e00::/40", "13124"}, + {"2a02:6c8::/33", "56611"}, + {"2a02:26f7:be4c::/48", "36183"}, + {"2a06:e881:8222::/48", "210761"}, + {"2001:550:1602::/47", "174"}, + {"2001:18b8:46::/44", "29789"}, + {"240a:adaa::/32", "146148"}, + {"2800:300:84e0::/43", "27986"}, + {"2804:738c:c010::/34", "270922"}, + {"2a02:26f7:c3dd::/46", "20940"}, + {"2a04:6d40::/47", "197888"}, + {"2a0e:97c0:550::/44", "58336"}, + {"2001:43f8:7b0::/48", "37578"}, + {"2409:8051:802::/40", "56047"}, + {"2602:ff96:1fe::/48", "40676"}, + {"2804:18:10d0::/44", "10429"}, + {"2804:25bc:a::/42", "264299"}, + {"2a02:6b8:23::/40", "208722"}, + {"2001:559:8387::/48", "33650"}, + {"2401:d800:500::/42", "7552"}, + {"2401:f000:7::/48", "38477"}, + {"2402:3780:2::/47", "132789"}, + {"240a:a62d::/32", "144231"}, + {"2620:d4:8000::/48", "27250"}, + {"2804:7070::/32", "270727"}, + {"2a10:2040::/29", "204576"}, + {"2001:559:81a1::/48", "7922"}, + {"2001:678:4d8::/48", "212704"}, + {"2001:fd0:3401::/36", "10029"}, + {"240a:a16f::/32", "143017"}, + {"2607:f018:ffff::/48", "36375"}, + {"2804:14d:5c9c::/42", "28573"}, + {"2a03:d9c0:8000::/48", "3214"}, + {"2a0b:37c0::/29", "205728"}, + {"2607:f7a0:1::/46", "46562"}, + {"2620:132:e002::/48", "41690"}, + {"2803:5e00:b5::/39", "267765"}, + {"2a02:d400::/29", "50261"}, + {"2001:4de0:49::/48", "50525"}, + {"240a:a2f2::/32", "143404"}, + {"2607:f8c0:208::/48", "25885"}, + {"2a02:26f7:90::/48", "36183"}, + {"2a0a:6840::/29", "25317"}, + {"2001:1248:9ae6::/39", "11172"}, + {"2402:b940::/40", "138538"}, + {"2409:8d14:1900::/34", "56044"}, + {"240e:44d:2d80::/41", "4134"}, + {"2600:1408:8c01::/35", "20940"}, + {"2600:6c10:f207::/44", "20115"}, + {"2604:bc40:6000::/48", "14618"}, + {"2602:fc03::/36", "400231"}, + {"2a0a:e0c0::/29", "15755"}, + {"2400:1bc0::/32", "59368"}, + {"2a0e:d4c0::/29", "197706"}, + {"2001:559:c1b3::/48", "20214"}, + {"2400:fa80:1::/48", "133480"}, + {"2602:fd60::/43", "396503"}, + {"2804:7f40::/32", "271676"}, + {"2406:8800:9043::/45", "17465"}, + {"2406:e401::/32", "135053"}, + {"2804:14d:c200::/40", "28573"}, + {"2804:161c:400::/43", "263268"}, + {"2804:4f80:3e00::/39", "268330"}, + {"2a01:8f9::/32", "3209"}, + {"2001:559:843d::/48", "7016"}, + {"2001:559:c441::/48", "7922"}, + {"2001:5b0:4ed5::/44", "6621"}, + {"2400:3dc0:501::/38", "134371"}, + {"2603:c0f0:2910::/40", "6142"}, + {"2001:250:808::/46", "138182"}, + {"2001:4878:b151::/48", "12222"}, + {"2804:431:e000::/35", "27699"}, + {"2806:2a0:a00::/40", "28548"}, + {"2a0e:1200::/29", "209112"}, + {"2001:559:820d::/48", "7015"}, + {"2001:678:300::/48", "39892"}, + {"2001:4b20:0:193::/64", "65505"}, + {"2400:7400:e031::/48", "38044"}, + {"2408:8459:ef10::/42", "17623"}, + {"2600:6c10:62::/47", "20115"}, + {"2607:f370::/32", "8057"}, + {"2a00:17c0::/40", "12993"}, + {"2a01:8580::/32", "198089"}, + {"2001:df6:f000::/48", "133142"}, + {"2804:2ee8::/32", "262880"}, + {"2a01:5b0:12::/44", "8391"}, + {"2001:250:2032::/44", "24355"}, + {"2001:559:2fe::/47", "7922"}, + {"2401:13c0:e000::/36", "132652"}, + {"2a00:11c0:1337::/48", "42473"}, + {"2a02:26f7:bd51::/42", "20940"}, + {"2400:7400:e021::/48", "23736"}, + {"240e:1e:3000::/36", "4134"}, + {"2600:1009:b0d0::/42", "6167"}, + {"2804:1b94:640::/36", "52974"}, + {"2804:6a30::/32", "270318"}, + {"2a03:b940::/32", "206484"}, + {"2001:57a:9202::/47", "22773"}, + {"2408:8456:3400::/41", "17623"}, + {"240a:a203::/32", "143165"}, + {"2804:ea4::/32", "262965"}, + {"2a04:8240::/29", "6694"}, + {"2a06:1740::/29", "200652"}, + {"2a07:df00::/29", "41974"}, + {"2409:8a55:3c00::/39", "56040"}, + {"2803:6fa0:100::/48", "267790"}, + {"2804:4368:e000::/35", "267568"}, + {"2a07:6886::/32", "204860"}, + {"2402:8100:21d0::/45", "45271"}, + {"2405:7e00:17::/48", "17408"}, + {"2408:8456:5640::/39", "17816"}, + {"2604:ff40::/32", "30211"}, + {"2607:fc18::/36", "13706"}, + {"2806:2f0:3481::/46", "17072"}, + {"2a02:6ea0:cd77::/48", "60068"}, + {"2a0c:b641:560::/47", "210481"}, + {"2001:559:871b::/48", "7016"}, + {"2404:f080::/35", "131392"}, + {"2804:e24::/32", "262417"}, + {"2806:265:3300::/37", "13999"}, + {"2a04:4e40:7210::/41", "54113"}, + {"2a12:5900::/29", "204790"}, + {"2402:1e80::/50", "4672"}, + {"2408:8956:bb00::/40", "17816"}, + {"2607:fd28:a000::/48", "3725"}, + {"2a01:76c0::/29", "21263"}, + {"2a07:9700::/29", "202741"}, + {"2001:458::/32", "8002"}, + {"2001:1900:2366::/47", "202818"}, + {"2600:200d:3000::/36", "33517"}, + {"2404:1140:1::/44", "141439"}, + {"2404:4f80::/43", "58715"}, + {"2408:8956:19c0::/38", "17622"}, + {"2620:101:4034::/46", "16880"}, + {"2620:121::/45", "55219"}, + {"2a02:26f0:8001::/39", "20940"}, + {"2a02:4901::/32", "200128"}, + {"2a05:4f44::/30", "31012"}, + {"2001:978:904::/44", "174"}, + {"2001:df5:c080::/48", "134505"}, + {"2404:5d80:6800::/40", "33438"}, + {"2a01:540:d000::/34", "12389"}, + {"2a07:48c0::/29", "212629"}, + {"2402:3a80:740::/42", "38266"}, + {"2606:2800:4048::/48", "14210"}, + {"2803:cf00::/32", "264642"}, + {"2001:468:200::/40", "11537"}, + {"2402:800:b650::/39", "7552"}, + {"2a03:be80:2::/47", "15510"}, + {"2400:cb00:220::/44", "13335"}, + {"240a:a985::/32", "145087"}, + {"2602:80c:9000::/44", "400070"}, + {"2806:2f0:80e1::/46", "17072"}, + {"2a00:4802:4e20::/44", "13124"}, + {"240e:438:7620::/43", "140647"}, + {"2a02:c20::/32", "41453"}, + {"2804:2904:a12::/32", "262588"}, + {"2a0c:b641:10::/47", "205523"}, + {"2600:1017:9810::/34", "6167"}, + {"2804:2c14::/32", "265194"}, + {"2a00:1188::/44", "8455"}, + {"2a0f:9400:7700::/48", "20473"}, + {"2001:678:ddc::/48", "212989"}, + {"2001:4490:d8c0::/46", "9829"}, + {"2804:5698::/32", "268011"}, + {"2a0f:40c0::/29", "207929"}, + {"2001:678:fa8::/48", "211564"}, + {"2001:1248:9721::/46", "11172"}, + {"2a02:ac80::/43", "25145"}, + {"2a04:9fc0::/29", "1136"}, + {"2001:67c:2718::/48", "25068"}, + {"2401:3c0:211::/46", "45528"}, + {"2408:8656:30f1::/45", "17816"}, + {"2620:a5:2000::/48", "7018"}, + {"2804:104c:4800::/40", "263629"}, + {"2a02:b50:4012::/48", "29791"}, + {"2001:250:e20::/35", "23910"}, + {"2001:67c:680::/48", "202577"}, + {"2408:84f3:ea40::/35", "17816"}, + {"2409:8051:2800::/47", "56047"}, + {"2600:1011:b070::/39", "6167"}, + {"2803:2d60:1119::/36", "14754"}, + {"2804:5be8:4000::/32", "268876"}, + {"2a01:c50f:600::/36", "12479"}, + {"2a02:26f7:c70d::/42", "20940"}, + {"2a0c:7b81::/32", "47596"}, + {"2607:5e80:1000::/33", "13807"}, + {"2a10:2f00:17b::/48", "210074"}, + {"2409:8051:3800::/47", "56047"}, + {"2804:5d4c::/32", "268963"}, + {"2804:7f28::/32", "271670"}, + {"2a00:bd00::/32", "6898"}, + {"2a02:26f7:f040::/48", "36183"}, + {"2a04:5201:4::/48", "200740"}, + {"2a0e:6540:d16::/48", "208364"}, + {"2001:678:be4::/48", "207647"}, + {"2404:cdc0::/32", "138842"}, + {"2405:4802:9740::/31", "18403"}, + {"2800:160:1d8e::/47", "14259"}, + {"2a02:367:1566::/48", "42804"}, + {"2001:678:ff8::/48", "207812"}, + {"240a:ac91::/32", "145867"}, + {"240e:62:3000::/32", "4134"}, + {"2602:fc23:117::/48", "211946"}, + {"2607:400::/32", "30583"}, + {"2a02:26f7:cf01::/46", "20940"}, + {"2001:fd8:b080::/42", "132199"}, + {"2804:104c:ec00::/40", "263629"}, + {"2a0d:b201:50b0::/41", "206026"}, + {"2408:8256:2c83::/48", "17816"}, + {"2804:cec::/32", "52575"}, + {"2804:3f90::/32", "263081"}, + {"2806:230:6005::/48", "11888"}, + {"2a01:5040:a000::/48", "43996"}, + {"2401:8800:400::/40", "17439"}, + {"2409:892a::/27", "9808"}, + {"240a:a452::/32", "143756"}, + {"2804:2ccc::/35", "265244"}, + {"2001:559:c3f9::/48", "33662"}, + {"2001:67c:244::/48", "39822"}, + {"2402:800:5d63::/43", "7552"}, + {"2406:840:e500::/47", "211571"}, + {"2803:6900:559::/48", "52423"}, + {"2804:18:5868::/34", "26599"}, + {"2804:b18:8001::/44", "52941"}, + {"2a02:26f0:118::/48", "20940"}, + {"2a03:5640:f042::/48", "16509"}, + {"2001:559:8147::/48", "7015"}, + {"2602:feb4:1b0::/44", "25961"}, + {"2607:9e80:1201::/40", "397068"}, + {"2804:41f4::/37", "267468"}, + {"240a:a821::/32", "144731"}, + {"2600:6c20:c26::/47", "20115"}, + {"2620:160:e372::/48", "2011"}, + {"2804:1674::/44", "53231"}, + {"2001:559:826c::/48", "7015"}, + {"2001:4478:1a00::/34", "4802"}, + {"2400:7400:12::/42", "38044"}, + {"240a:a4a6::/32", "143840"}, + {"2405:db00::/32", "9268"}, + {"240a:a976::/32", "145072"}, + {"2a02:2478::/32", "51862"}, + {"2001:559:358::/48", "33651"}, + {"2001:67c:2a2c::/48", "49566"}, + {"2804:6ea8::/33", "270611"}, + {"2a0f:25c0::/48", "207077"}, + {"2001:250:3c18::/48", "23910"}, + {"2408:8956:7200::/40", "17622"}, + {"240a:a4e3::/32", "143901"}, + {"240e:3b3:8200::/35", "140316"}, + {"240e:438:5440::/38", "4134"}, + {"2a02:690::/29", "41960"}, + {"2a02:26f7:bd8c::/48", "36183"}, + {"2a06:cf00::/29", "62365"}, + {"2001:44b8:30a6::/44", "7545"}, + {"2405:1340::/32", "9654"}, + {"2a05:e880::/29", "50304"}, + {"2001:559:c4e3::/48", "33287"}, + {"2408:8956:a200::/40", "17622"}, + {"240a:ab0f::/32", "145481"}, + {"2600:140b:f401::/36", "20940"}, + {"2607:f758:1400::/33", "13649"}, + {"2a0f:5701:350a::/43", "206499"}, + {"2001:67c:10f4::/48", "211763"}, + {"240e:964:e400::/39", "133775"}, + {"2600:140f:1201::/37", "20940"}, + {"2804:3e2c::/32", "266578"}, + {"2a01:8f20::/32", "51863"}, + {"2001:67c:a8::/48", "197269"}, + {"2001:44b8:4058::/48", "7545"}, + {"2409:8904:4560::/38", "24547"}, + {"240a:a4dd::/32", "143895"}, + {"240a:a4f7::/32", "143921"}, + {"2604:3d00::/33", "6327"}, + {"2620:117:7010::/40", "26955"}, + {"2804:39a8::/32", "266042"}, + {"2a00:c320::/32", "42263"}, + {"2a02:26f0:d301::/37", "20940"}, + {"2401:d800:fe50::/42", "7552"}, + {"240e:679:e400::/39", "140330"}, + {"2600:1012:9100::/44", "6167"}, + {"2606:bc00:bf00::/33", "19419"}, + {"2800:160:1d81::/46", "14259"}, + {"2a02:6722::/32", "44234"}, + {"2a0c:9a40:8060::/44", "20473"}, + {"2401:f40::/32", "134732"}, + {"2401:4900:44c0::/42", "45609"}, + {"240a:a7c7::/32", "144641"}, + {"240e:b2:e000::/36", "136197"}, + {"2804:2d4:10::/44", "28244"}, + {"2a0e:7740::/32", "208490"}, + {"2403:300:a14::/48", "6185"}, + {"2a0b:6c80::/32", "12586"}, + {"2600:6c38:414::/44", "20115"}, + {"2804:187c::/32", "262673"}, + {"2001:559:7c9::/48", "20214"}, + {"2001:13d2:6807::/32", "7303"}, + {"2401:b740::/32", "137549"}, + {"2401:d800:f60::/40", "7552"}, + {"2406:daa0:1040::/44", "16509"}, + {"240a:aed5::/32", "146447"}, + {"2600:1f01:4814::/47", "16509"}, + {"2804:1258::/32", "263471"}, + {"2804:4ca0:200::/32", "267381"}, + {"2400:6800::/32", "10105"}, + {"2620:171:ce::/47", "42"}, + {"2804:40a8::/32", "265973"}, + {"2a0b:4342:1a2a::/45", "57578"}, + {"2a0d:5a80::/29", "21100"}, + {"2408:8924::/32", "4837"}, + {"2600:9000:1e41::/48", "16509"}, + {"2a02:88d:8030::/44", "48695"}, + {"2c0f:f498::/32", "37575"}, + {"2806:230:5007::/48", "11888"}, + {"2402:800:9647::/43", "7552"}, + {"2607:f9c0::/32", "22070"}, + {"2806:2f0:2062::/48", "17072"}, + {"2c0f:ea98::/32", "37347"}, + {"2001:67c:2f68::/48", "207748"}, + {"2402:800:9ea0::/43", "7552"}, + {"2403:0:11d::/38", "4755"}, + {"240e:44d:5900::/42", "140345"}, + {"2605:a401:80bc::/47", "33363"}, + {"2a06:e800::/32", "47950"}, + {"2001:1290::/31", "16735"}, + {"2404:8d02:48c9::/39", "9587"}, + {"2408:8957:1fc0::/34", "17622"}, + {"2409:8904:a140::/38", "24547"}, + {"240e:980:2b00::/40", "58563"}, + {"2600:1000:b0e2::/43", "22394"}, + {"2a01:348:63::/36", "39326"}, + {"2408:840d:c300::/42", "17621"}, + {"2a0f:9400:7719::/46", "53356"}, + {"2001:559:864f::/48", "33661"}, + {"2001:df0:1e::/50", "38794"}, + {"2a02:26f7:8e::/48", "36183"}, + {"2a02:26f7:f850::/48", "36183"}, + {"2001:67c:4c::/48", "35609"}, + {"2406:3400:dd::/38", "10143"}, + {"2602:fec9::/36", "46995"}, + {"2a0f:9f00::/29", "208206"}, + {"2001:559:8458::/48", "33287"}, + {"2001:67c:2878::/48", "8881"}, + {"2405:5440::/48", "56150"}, + {"2602:fea7::/38", "397270"}, + {"2804:370::/32", "262881"}, + {"2001:559:c1ac::/48", "20214"}, + {"2400:1a00:8011::/34", "17501"}, + {"2400:5200:1000::/40", "55410"}, + {"2607:fe88:1000::/33", "852"}, + {"2a01:1f8::/32", "34568"}, + {"2a04:c007::/32", "204248"}, + {"2a0c:e80::/29", "200000"}, + {"2408:873c::/31", "4837"}, + {"2605:a404:69c::/39", "33363"}, + {"2804:eb8::/32", "262970"}, + {"2804:19b8::/33", "52912"}, + {"2001:559:2fb::/48", "33287"}, + {"2001:5b0:5f00::/40", "6621"}, + {"2804:3a0::/32", "52960"}, + {"2a00:f10:ff02::/29", "48635"}, + {"2a03:84a0::/44", "29990"}, + {"2001:500:103::/48", "55002"}, + {"2001:6f8:1904::/40", "3257"}, + {"2408:8409:4800::/40", "4808"}, + {"2409:801f:3005::/46", "9808"}, + {"240a:a53e::/32", "143992"}, + {"240e:44d:5640::/42", "140347"}, + {"2600:3501:f000::/30", "396998"}, + {"2804:e64:667::/32", "262952"}, + {"2001:250:4008::/46", "24358"}, + {"2604:15c0::/32", "40187"}, + {"2a0b:8e80::/47", "43824"}, + {"2a11:7280::/29", "1239"}, + {"2620:22:a000::/48", "27580"}, + {"2a00:1728:2e::/47", "34224"}, + {"2001:250:4810::/42", "24360"}, + {"2604:d600:692::/45", "32098"}, + {"2804:1df8::/32", "264404"}, + {"2804:39f0::/32", "266060"}, + {"2a09:440::/29", "204790"}, + {"2a0e:2e00::/29", "9119"}, + {"2401:d800:7990::/42", "7552"}, + {"2605:1700::/32", "40029"}, + {"2001:559:c206::/48", "7016"}, + {"2402:e280:3d82::/43", "134674"}, + {"240a:a084::/32", "142782"}, + {"2620:1b2::/36", "26673"}, + {"2800:bf0:2800::/44", "52257"}, + {"240a:a6bc::/32", "144374"}, + {"2804:407c::/32", "28153"}, + {"2403:fc00::/38", "9443"}, + {"2602:fe19:2b::/34", "26073"}, + {"2602:feda:c30::/44", "209294"}, + {"2a05:1086:f000::/47", "141694"}, + {"2a0b:78c0::/32", "42830"}, + {"2a0c:b641:1::/48", "34872"}, + {"2801:19:b000::/48", "266666"}, + {"2a00:c540::/32", "57506"}, + {"2a01:9940:100::/47", "12807"}, + {"2a0a:4500::/29", "199163"}, + {"2001:559:862d::/48", "7016"}, + {"2400:a980:d00::/38", "133111"}, + {"2405:f940::/32", "139154"}, + {"2408:84f3:3610::/44", "17623"}, + {"2a00:4802:4a30::/39", "8717"}, + {"2a01:6d00::/43", "28726"}, + {"2a0b:b87:ffe9::/48", "202307"}, + {"2a0c:9a40:10a0::/48", "213288"}, + {"240e:3b2:f100::/37", "134775"}, + {"2600:370f:5141::/40", "32261"}, + {"2a02:b48:8000::/44", "39572"}, + {"2a0e:e704:60::/44", "212469"}, + {"2401:d800:72e0::/39", "7552"}, + {"2a02:26f7:bf0c::/48", "36183"}, + {"2600:140f:c400::/48", "9498"}, + {"2a03:75c0::/32", "197922"}, + {"2804:6820::/32", "269670"}, + {"2804:8594::/32", "272588"}, + {"2a02:fc8::/32", "42572"}, + {"2a0f:5707:ab20::/48", "3280"}, + {"2001:b28:999a::/34", "42065"}, + {"2001:df1:1b80::/48", "139364"}, + {"2401:ca40::/32", "136978"}, + {"240a:ad9b::/32", "146133"}, + {"2600:6c39:45b::/39", "20115"}, + {"2001:579:9395::/41", "22773"}, + {"2800:160:1b3c::/46", "14259"}, + {"2806:230:403f::/48", "11888"}, + {"2a01:4ce0:50::/48", "174"}, + {"2a04:1cc3::/29", "48635"}, + {"2a04:e1c0:1::/48", "12859"}, + {"2001:df7:b780::/48", "134505"}, + {"2408:8956:3400::/40", "17622"}, + {"240c:cda1::/32", "24357"}, + {"240e:108:25::/48", "134756"}, + {"240e:946:3007::/32", "58540"}, + {"2804:20c8::/32", "264514"}, + {"2a02:26f7:ed45::/46", "20940"}, + {"2a09:bac0:123::/45", "13335"}, + {"2a0b:31c0:563::/48", "205726"}, + {"2403:9500::/32", "9657"}, + {"2408:8956:8200::/40", "17622"}, + {"2600:804:441::/31", "701"}, + {"2001:df2:c900::/48", "38635"}, + {"2001:fd8:120::/48", "132199"}, + {"2400:7400:3b::/48", "23736"}, + {"2602:fed2:7123::/48", "206607"}, + {"2607:2200::/32", "17090"}, + {"2800:800:970::/48", "26611"}, + {"2001:678:110::/48", "57436"}, + {"2001:67c:2cc0::/48", "5588"}, + {"2001:df7:7d80::/48", "141909"}, + {"240e:3b5:f700::/36", "4134"}, + {"2a02:26f7:cec5::/46", "20940"}, + {"2001:559:c13d::/48", "7016"}, + {"2001:978:3401::/36", "174"}, + {"2604:e080::/32", "32458"}, + {"2804:14d:d682::/41", "28573"}, + {"2a07:3b00::/29", "198024"}, + {"2001:db0:5000::/34", "17766"}, + {"2402:800:36e0::/44", "7552"}, + {"2408:8957:3500::/40", "17816"}, + {"2600:1406:601::/39", "20940"}, + {"2605:f700:400::/38", "18978"}, + {"2610:18:8104::/48", "22550"}, + {"2804:21f8:50::/39", "262272"}, + {"2804:50a4::/32", "268401"}, + {"2a0e:b106:20::/44", "203038"}, + {"2001:559:c30b::/48", "33659"}, + {"2408:8256:3d9c::/46", "17623"}, + {"2602:fc09::/40", "13780"}, + {"2804:1bd8:4a00::/37", "28224"}, + {"240e:3bf:7800::/39", "4134"}, + {"2001:57a:4044::/34", "22773"}, + {"2001:e68:20db:12::/32", "4788"}, + {"2402:800:f020::/41", "7552"}, + {"2606:2800:247::/44", "15133"}, + {"2620:137:7000::/40", "396322"}, + {"2804:2e10::/32", "265320"}, + {"2a0b:9b00:401::/38", "62240"}, + {"2401:b080:64::/32", "133748"}, + {"2804:4138::/32", "266011"}, + {"2a02:e540::/29", "8661"}, + {"2001:550:2200:205::/62", "174"}, + {"2605:a401:8c0a::/41", "33363"}, + {"2804:30f8::/36", "264984"}, + {"2804:430c::/32", "267545"}, + {"2001:388:607c::/48", "135893"}, + {"2001:67c:2418::/48", "9023"}, + {"2001:44b8:605e::/48", "7545"}, + {"2408:8456:8a00::/42", "17622"}, + {"240e:30e:4a00::/35", "137688"}, + {"2804:230::/32", "53211"}, + {"2804:5ac4:20::/43", "268795"}, + {"2408:8459:e50::/35", "17816"}, + {"240a:a5e9::/32", "144163"}, + {"2a09:de40::/32", "209198"}, + {"2804:14d:2c00::/40", "28573"}, + {"2804:34e4::/32", "264985"}, + {"2804:5b14::/34", "268817"}, + {"2a02:330:8::/47", "209456"}, + {"2a0f:2ec0::/29", "60262"}, + {"2a03:ca40::/32", "197727"}, + {"2406:ef80:1::/45", "63473"}, + {"2408:84f3:3490::/38", "17816"}, + {"2409:8c1f:8fa0::/41", "9808"}, + {"240a:ae44::/32", "146302"}, + {"2600:6c20:c53::/39", "20115"}, + {"2605:3380:4a00::/40", "12025"}, + {"2001:559:c320::/48", "33657"}, + {"2400:89c0:2200::/48", "37936"}, + {"2602:fed2:770b::/48", "34924"}, + {"2607:f368:1000::/46", "32982"}, + {"2a0c:d2c6::/32", "7007"}, + {"2a0f:d080::/29", "57756"}, + {"2001:400:201:73::/61", "3425"}, + {"2607:fe98::/32", "10947"}, + {"2a00:d2c0:5::/32", "12975"}, + {"2a02:7800::/32", "15582"}, + {"2a06:e040:7602::/47", "198507"}, + {"2001:4998:48::/43", "10310"}, + {"2401:d800:7cc0::/42", "7552"}, + {"2409:8907:8320::/37", "24547"}, + {"240e:45c:100::/40", "137266"}, + {"2604:f80::/46", "22458"}, + {"2620:10a:80ef::/48", "55195"}, + {"2620:128:2000::/44", "395287"}, + {"2804:75fc::/32", "271082"}, + {"2001:df2:3a80::/48", "138270"}, + {"2401:2900:8888::/48", "23679"}, + {"2405:8f40:1::/48", "54994"}, + {"2602:fdc4::/48", "63430"}, + {"2604:6840:ac10::/48", "20446"}, + {"2605:e240:b::/48", "16509"}, + {"2a03:ec00:b200::/40", "12847"}, + {"2001:15c0::/29", "21283"}, + {"2001:559:184::/48", "33490"}, + {"2a02:2455::/33", "35244"}, + {"2a02:2e02:2490::/41", "12479"}, + {"2402:4e00:2::/45", "45090"}, + {"2403:200::/32", "45461"}, + {"2a00:4520:9::/32", "42961"}, + {"2a0c:1d80::/29", "31480"}, + {"2a11:a6c0::/46", "3269"}, + {"2001:3c8:e10e::/48", "137546"}, + {"2401:d800:fa40::/42", "7552"}, + {"240e:97d:4000::/34", "58543"}, + {"2606:b800::/32", "25983"}, + {"2a02:26f7:d440::/48", "36183"}, + {"2001:559:196::/48", "7016"}, + {"2001:559:4db::/48", "7015"}, + {"2001:678:efc::/48", "212135"}, + {"2803:26e0:a1fa::/48", "269955"}, + {"2804:1924::/32", "61774"}, + {"2804:6ac4:2000::/36", "16921"}, + {"2806:2f0:24c3::/43", "22884"}, + {"2a02:26f7:e541::/46", "20940"}, + {"2a0c:e303::/32", "211882"}, + {"2001:250:6030::/47", "24364"}, + {"2400:cb00:384::/46", "13335"}, + {"2a00:cb80::/32", "35393"}, + {"2400:8500:2000::/36", "58791"}, + {"2406:da18::/36", "16509"}, + {"2600:370f:33c4::/44", "32261"}, + {"2604:4dc0::/32", "54483"}, + {"2804:3160:4::/33", "265010"}, + {"2a02:26f7:e80c::/48", "36183"}, + {"2a09:be40:3100::/40", "213167"}, + {"2001:2f8::/32", "2907"}, + {"2001:559:8794::/48", "33657"}, + {"2606:2800:7001::/46", "15133"}, + {"2804:1b04:14::/44", "53048"}, + {"2804:54c0::/32", "268668"}, + {"2a04:4e40:1430::/41", "54113"}, + {"2a0a:2b00:20::/48", "16509"}, + {"2a0c:a4c0::/29", "202451"}, + {"2405:7f00:a020::/40", "133414"}, + {"2602:fd55::/47", "45250"}, + {"2804:1c94::/32", "61663"}, + {"2a02:26f7:e148::/48", "36183"}, + {"2a0d:2687::/32", "209650"}, + {"2804:1e2c:200::/40", "264412"}, + {"2001:67c:2b74::/48", "3320"}, + {"2001:e60:d400::/42", "4766"}, + {"240e:44d:4340::/42", "140359"}, + {"2a00:a760::/32", "41216"}, + {"2a04:ff00:600::/40", "206634"}, + {"2a06:ba00::/48", "34775"}, + {"2a0a:c5c0::/29", "29423"}, + {"2001:67c:1588::/48", "198168"}, + {"2001:910::/32", "20766"}, + {"2402:800:97e0::/44", "7552"}, + {"240e:267:7000::/38", "140335"}, + {"240e:3bd:c800::/37", "4134"}, + {"2a03:d5c0:a000::/40", "199391"}, + {"2001:df6:cc00::/48", "55683"}, + {"2402:1f00:8300::/33", "16276"}, + {"2406:9e00:6::/44", "55352"}, + {"240a:a037::/32", "142705"}, + {"2803:efa0::/32", "267792"}, + {"2001:678:430::/47", "205956"}, + {"2402:800:9471::/40", "7552"}, + {"2408:4000::/28", "37963"}, + {"2602:fbeb::/36", "46685"}, + {"2001:250:80c::/48", "23910"}, + {"2606:a300:5::/32", "35847"}, + {"2001:3c8:9007::/48", "9464"}, + {"2001:678:66c::/48", "200924"}, + {"2600:1005:b100::/41", "6167"}, + {"2804:160::/32", "28195"}, + {"2804:f14::/32", "262865"}, + {"2a02:68a0::/32", "201906"}, + {"2001:559:430::/48", "33489"}, + {"2001:b18:10::/48", "47787"}, + {"2402:800:fb40::/42", "7552"}, + {"2405:aac0:221::/46", "139949"}, + {"240a:a042::/32", "142716"}, + {"240a:a5dc::/32", "144150"}, + {"240a:a725::/32", "144479"}, + {"2a02:4280::/32", "40981"}, + {"2a03:5dc0:6::/48", "13032"}, + {"2a0b:3c40:10::/48", "1239"}, + {"2a0c:1100::/32", "781"}, + {"2a0e:b107:1710::/44", "210826"}, + {"2001:559:870b::/48", "7015"}, + {"2408:8459:ae10::/42", "17623"}, + {"2602:fc97:50::/48", "399544"}, + {"2804:168:1000::/48", "28279"}, + {"2804:222c::/38", "264596"}, + {"2804:5d2c::/47", "268955"}, + {"2a00:1ca8:8a::/43", "50673"}, + {"2a01:488:bb07::/44", "20773"}, + {"2a0e:b107:ea8::/46", "211640"}, + {"2402:800:3efe::/33", "7552"}, + {"2408:84f3:4810::/42", "134543"}, + {"2600:6c3b:424::/44", "20115"}, + {"2a00:db60:4000::/48", "15224"}, + {"2a02:e60::/32", "47506"}, + {"2a0f:39c0::/29", "60781"}, + {"2001:dd8:7::/48", "187"}, + {"2001:1878:405::/40", "226"}, + {"2607:f330:6aab::/37", "15130"}, + {"2804:591c:30::/32", "28370"}, + {"2a00:1cb8:2000::/35", "12713"}, + {"2a00:4802:2e00::/41", "13124"}, + {"2a0f:3dc0::/29", "207902"}, + {"2001:da8:6000::/48", "24355"}, + {"2a01:b740:a06::/48", "6185"}, + {"2001:559:8311::/48", "7922"}, + {"2001:1270:4000::/34", "22011"}, + {"2620:132:7090::/41", "19537"}, + {"2804:16d8:4000::/35", "262729"}, + {"2001:559:c0af::/48", "33491"}, + {"2001:df0:201::/48", "1221"}, + {"2804:14d:ba84::/46", "28573"}, + {"2806:109f:1::/48", "8151"}, + {"2a02:e040::/29", "43995"}, + {"2001:1248:552c::/43", "11172"}, + {"2400:5300::/47", "45815"}, + {"2401:7400:c002::/36", "4773"}, + {"2409:896a:9000::/39", "9808"}, + {"2600:9000:1e1a::/45", "16509"}, + {"2605:6700::/32", "11976"}, + {"2803:9800:9012::/42", "11664"}, + {"2a02:26f7:cbc9::/42", "20940"}, + {"2001:502:ad09::/48", "397226"}, + {"2001:e60:100a::/41", "4766"}, + {"2620:ef:8000::/48", "35977"}, + {"2a0e:aa07:e010::/48", "208370"}, + {"2001:67c:38c::/48", "43081"}, + {"2001:67c:774::/48", "64424"}, + {"2001:4b60::/40", "28857"}, + {"2409:896a:5f00::/34", "9808"}, + {"2604:2d80:6880::/38", "30036"}, + {"2804:14c:5900::/41", "28573"}, + {"2804:a8c:400::/32", "262299"}, + {"2a00:14b8::/32", "49826"}, + {"2a04:4e40:4610::/44", "54113"}, + {"2405:1c0:6461::/45", "55303"}, + {"2607:f020:2000::/40", "40289"}, + {"2620:123:7000::/44", "46757"}, + {"2804:14c:8794::/42", "28573"}, + {"2a00:1e50::/33", "34006"}, + {"2a03:d60:2::/48", "201743"}, + {"2a07:a40:c::/48", "205112"}, + {"2001:559:86b6::/48", "33660"}, + {"2600:1419:e800::/48", "61580"}, + {"2804:5f64::/32", "269096"}, + {"2806:230:6019::/48", "11888"}, + {"2401:8a40:44::/46", "45326"}, + {"2800:160:1b6a::/43", "14259"}, + {"2803:ec60::/32", "267850"}, + {"2804:6338::/32", "269347"}, + {"2804:8564::/35", "262313"}, + {"2a03:980:1::/46", "20645"}, + {"2001:550:a905::/44", "174"}, + {"2001:559:314::/48", "33491"}, + {"2001:559:7d7::/48", "33654"}, + {"2001:559:c52f::/48", "33490"}, + {"2001:67c:788::/48", "16509"}, + {"2001:1458::/31", "513"}, + {"2a02:26f7:cf08::/47", "36183"}, + {"2a03:7203::/32", "42322"}, + {"2a06:8ec0:3::/48", "7489"}, + {"2a07:9b40:d00f::/48", "39702"}, + {"2401:d800:a50::/42", "7552"}, + {"2404:c0:33a0::/33", "23693"}, + {"2001:1b10::/32", "29259"}, + {"2001:3c8:a702::/48", "132879"}, + {"2402:800:5b0f::/43", "7552"}, + {"2405:8a00:a055::/33", "55824"}, + {"2409:8044:2b14::/28", "24445"}, + {"2605:a404:6a::/43", "33363"}, + {"2a0e:8f02:2171::/46", "211168"}, + {"2408:8456:2040::/40", "17816"}, + {"240e:438:9820::/43", "140647"}, + {"2600:140f:2400::/48", "9498"}, + {"2804:568:601::/32", "262514"}, + {"2a0c:5000:3085::/30", "60502"}, + {"2607:3200::/46", "11240"}, + {"2804:27b4::/32", "53124"}, + {"2a01:64c0::/32", "45012"}, + {"2a02:6b0::/32", "24638"}, + {"2001:43f8:d00::/48", "33764"}, + {"2001:44c8:4150::/40", "131445"}, + {"2402:800:3d2b::/41", "7552"}, + {"2605:b240::/48", "13820"}, + {"2803:9100::/32", "52409"}, + {"2804:18:6058::/45", "10429"}, + {"2804:2a60:182::/32", "263089"}, + {"2a01:5043:2eff::/48", "202196"}, + {"2a0e:f500:1::/46", "60781"}, + {"2001:579:192c::/43", "22773"}, + {"2001:1900:225d::/48", "10753"}, + {"2600:1419:5401::/36", "20940"}, + {"2605:9d80:a000::/48", "36678"}, + {"2a05:ff80::/29", "8758"}, + {"2a07:3147::/32", "48408"}, + {"2001:559:c49f::/48", "33651"}, + {"2402:1100::/32", "132035"}, + {"2602:107:2410::/48", "20115"}, + {"2804:67d8::/32", "269654"}, + {"2406:daa0:60a0::/44", "16509"}, + {"2402:13c0:1::/48", "7474"}, + {"2606:2800:4ae8::/46", "15133"}, + {"2804:8054:2000::/40", "271744"}, + {"2409:873d::/25", "9808"}, + {"240e:45c:3800::/40", "131285"}, + {"2a02:24d8::/32", "21473"}, + {"2a05:22c0::/29", "42567"}, + {"2001:fd8:264::/46", "132199"}, + {"2001:4878:4062::/47", "12222"}, + {"2001:4888:8061::/48", "22394"}, + {"2606:b400:8006::/48", "792"}, + {"2804:6fa0::/32", "270673"}, + {"2a00:7380::/37", "51906"}, + {"2a01:8c9::/29", "3209"}, + {"2402:3a80:800::/44", "38266"}, + {"2405:f080:1e00::/46", "136907"}, + {"240a:a353::/32", "143501"}, + {"2a05:e580::/32", "63399"}, + {"2001:4830:c170::/48", "22147"}, + {"2401:9d00:2::/39", "9835"}, + {"2405:8a00:4015::/44", "55824"}, + {"2804:2938::/32", "264004"}, + {"2a02:798::/32", "31688"}, + {"2a02:26f7:b940::/48", "36183"}, + {"2a0c:8640::/30", "3257"}, + {"240e:44d:e00::/42", "140345"}, + {"2a00:c20::/32", "29611"}, + {"2a01:9e40::/32", "31287"}, + {"2a0f:2b40::/29", "60262"}, + {"2001:550:1208::/39", "174"}, + {"2402:800:71b0::/41", "7552"}, + {"2408:8256:3281::/48", "17623"}, + {"2603:c011::/36", "31898"}, + {"2620:0:5010::/48", "30094"}, + {"2804:3cec::/32", "266242"}, + {"2001:678:610::/48", "202967"}, + {"2001:e68:2001:2::/40", "4788"}, + {"2406:840:fef0::/48", "136591"}, + {"2804:ae0:2801::/38", "28352"}, + {"2c0f:ee40:3000::/36", "36666"}, + {"2001:559:847d::/48", "33287"}, + {"2400:da00:401::/45", "38365"}, + {"2607:fcc8:5000::/36", "11955"}, + {"2803:3b80:c000::/36", "263702"}, + {"2804:3824::/32", "266459"}, + {"2001:559:c278::/48", "7015"}, + {"2a02:ee80:406d::/46", "3573"}, + {"2a05:2d01::/32", "64404"}, + {"2a0d:bf80::/29", "206576"}, + {"2400:b200::/33", "37963"}, + {"2401:d800:7c22::/41", "7552"}, + {"2607:fd28:a008::/48", "36086"}, + {"2001:250:e04::/44", "138375"}, + {"2001:559:86a2::/47", "7922"}, + {"2604:da00::/36", "31745"}, + {"2610:1e0:1800::/48", "1657"}, + {"2a01:4ae0::/32", "59933"}, + {"2001:67c:23fc::/48", "41352"}, + {"2409:8052::/47", "56047"}, + {"240a:aabc::/32", "145398"}, + {"2600:1480:1801::/37", "20940"}, + {"2804:18:7840::/43", "26599"}, + {"2400:a980:30f3::/45", "133513"}, + {"2402:8400:6::/48", "17820"}, + {"2404:3d00:41a3::/48", "3573"}, + {"2804:3ec8::/32", "266620"}, + {"2a00:4720::/32", "42442"}, + {"2001:559:83f1::/48", "7725"}, + {"240a:a736::/32", "144496"}, + {"240e:45c:6400::/40", "131285"}, + {"2a0b:340::/32", "43886"}, + {"2400:eb40:4005::/48", "14821"}, + {"240e:a67:1a00::/34", "140330"}, + {"2a02:26f7:11d::/48", "20940"}, + {"2a07:59c1:30c0::/43", "140731"}, + {"2001:559:8669::/48", "33491"}, + {"2001:4888:8045::/46", "22394"}, + {"2603:90f5:400::/40", "11955"}, + {"2804:2894::/32", "263969"}, + {"2806:250:1c::/46", "28509"}, + {"2a02:26f7:c418::/48", "36183"}, + {"2c0f:ed70::/32", "327822"}, + {"2409:8d1b::/29", "9808"}, + {"240a:ae45::/32", "146303"}, + {"2a00:1560:1112::/32", "29684"}, + {"2a00:1780:dc00::/40", "210213"}, + {"2a02:6c20:3::/48", "201922"}, + {"2401:4900:ea0::/43", "45609"}, + {"240e:9b:f027::/44", "140258"}, + {"2a0b:4340:82::/47", "134176"}, + {"2c0f:f348:b::/35", "24757"}, + {"2600:100b:b1e0::/33", "6167"}, + {"2600:1419:3c01::/38", "20940"}, + {"2800:160:2016::/44", "14259"}, + {"2804:4be4::/32", "267335"}, + {"2401:d800:b9d0::/42", "7552"}, + {"2603:faf0::/23", "397165"}, + {"2606:13c0::/48", "10843"}, + {"2804:7b3c::/32", "271419"}, + {"2a09:3d03::/32", "210625"}, + {"2a0e:1d40::/29", "212655"}, + {"2a0e:3200::/29", "12843"}, + {"2001:4408:201::/35", "4758"}, + {"2a00:c38::/32", "15576"}, + {"2a00:18f8::/32", "31416"}, + {"2001:559:76b::/48", "21508"}, + {"2a01:8840:25::/48", "207266"}, + {"2a03:9980:1930::2/29", "30742"}, + {"2600:1407:c801::/35", "20940"}, + {"2620:189::/36", "16957"}, + {"2806:250:10::/48", "28555"}, + {"2806:2f0:2160::/40", "17072"}, + {"2a02:b80::/29", "30740"}, + {"2405:84c0:ff60::/44", "139782"}, + {"2406:9e00::/45", "55352"}, + {"2804:f2c::/33", "53191"}, + {"2a00:6cc0::/48", "62407"}, + {"2a00:7540::/29", "25145"}, + {"2a02:ad8:2e00::/33", "12389"}, + {"2a02:26f7:e780::/48", "36183"}, + {"2a03:e400::/32", "45005"}, + {"2001:559:85ac::/48", "7922"}, + {"2001:db0::/35", "17766"}, + {"240e:679:c400::/39", "140330"}, + {"2804:694c:c000::/34", "270261"}, + {"2a12:7bc0:104::/47", "204903"}, + {"2001:1a11:a8::/45", "42298"}, + {"2403:cfc0:1006::/48", "395092"}, + {"240a:ab74::/32", "145582"}, + {"240e:3b1:ac00::/35", "4134"}, + {"2804:84ec::/32", "272284"}, + {"2a0f:8640:b00b::/48", "212149"}, + {"2001:579:184c::/40", "22773"}, + {"2001:678:220::/48", "52022"}, + {"2605:5080:5011::/42", "3367"}, + {"2605:6ac0:5000::/36", "400475"}, + {"2606:6e80::/32", "33548"}, + {"2804:1f16::/32", "265190"}, + {"2a03:67e0::/32", "201201"}, + {"2001:3c8:9008::/48", "4621"}, + {"2001:44b8:1058::/46", "4739"}, + {"2a02:26f7:f180::/48", "36183"}, + {"2a06:5040:30::/45", "6134"}, + {"2400:8300::/32", "10002"}, + {"2604:880:64::/47", "29802"}, + {"2801:80:1930::/48", "264979"}, + {"2801:15c::/48", "14080"}, + {"2a01:5da0::/32", "15397"}, + {"2a02:53a0::/32", "35280"}, + {"2001:500:125::/48", "396566"}, + {"2400:adc0:4200::/46", "9541"}, + {"2404:f240::/32", "134863"}, + {"240e:6b3:2000::/32", "4134"}, + {"2804:23c4::/32", "264181"}, + {"2806:1070:cefe::/48", "20940"}, + {"2a00:1570::/32", "39308"}, + {"2001:559:c343::/48", "33490"}, + {"2405:6c40:4::/44", "24527"}, + {"2804:1e70:4000::/34", "264429"}, + {"2a0c:f587:fffe::/47", "200334"}, + {"2a10:4a00::/29", "399975"}, + {"2620:5f:8000::/48", "33281"}, + {"2a00:be00::/32", "29226"}, + {"2001:559:2df::/48", "33652"}, + {"2409:8057:3040::/43", "56040"}, + {"2a06:e881:4405::/48", "203801"}, + {"240a:ac8e::/32", "145864"}, + {"2804:8140:2000::/32", "272442"}, + {"2a0e:1b07::/32", "49436"}, + {"2001:67c:548::/48", "56513"}, + {"2402:3a80:1ee0::/43", "38266"}, + {"240a:aa88::/32", "145346"}, + {"2606:df80::/32", "64227"}, + {"2804:4ba0::/32", "267319"}, + {"2001:550:2403::/39", "174"}, + {"2001:579:d10c::/42", "22773"}, + {"240e:44d:5a80::/41", "4134"}, + {"2600:370f:5068::/40", "32261"}, + {"2605:c9c0::/32", "398371"}, + {"2a02:7a00:6::/48", "197895"}, + {"2001:250:2100::/48", "138381"}, + {"2001:67c:1ba8::/48", "49494"}, + {"240a:a2ce::/32", "143368"}, + {"2800:420::/30", "5639"}, + {"2804:510c::/33", "61594"}, + {"2a10:2f01:100::/48", "39753"}, + {"240a:a1be::/32", "143096"}, + {"240e:967:ec00::/35", "4134"}, + {"2a02:88d:401f::/48", "47794"}, + {"2a0d:3580::/35", "200303"}, + {"2804:1058::/32", "262988"}, + {"2a0c:7900::/29", "205052"}, + {"2001:559:490::/48", "7922"}, + {"2001:dcc:403::/48", "23599"}, + {"2600:9000:1030::/48", "16509"}, + {"2800:160:1928::/43", "14259"}, + {"2804:3d04::/32", "266248"}, + {"2001:559:7bc::/48", "7016"}, + {"2600:6c3b:42a::/40", "20115"}, + {"2606:6200::/35", "21570"}, + {"2804:1b1c:f000::/36", "61709"}, + {"2a02:26f7:c04c::/48", "36183"}, + {"2001:678:700::/48", "50464"}, + {"2804:ee8::/32", "262704"}, + {"2804:4778::/32", "267056"}, + {"2a03:c980:dead::/48", "210079"}, + {"2604:3400:ca01::/48", "29169"}, + {"2804:38bc::/32", "266498"}, + {"2a02:26f7:bc::/48", "36183"}, + {"2a04:4e40:3c10::/41", "54113"}, + {"2407:b4c0:12::/48", "142366"}, + {"2804:6ac::/32", "262601"}, + {"2804:5888::/32", "268130"}, + {"2404:a8:4094::/48", "24514"}, + {"2a02:7f0::/32", "42739"}, + {"2a0b:2d87::/32", "35048"}, + {"2a0e:b107:d0::/44", "207968"}, + {"240e:3be:6400::/35", "140312"}, + {"2600:b00::/28", "36728"}, + {"2603:f7b8::/29", "397165"}, + {"2607:f6f8:2000::/35", "30170"}, + {"2a02:928:16::/32", "34108"}, + {"2a02:26f0:5601::/39", "20940"}, + {"2a02:26f7:bd08::/48", "36183"}, + {"2a0a:9880::/29", "44974"}, + {"2001:559:c452::/48", "33662"}, + {"2001:4878:259::/48", "12222"}, + {"2401:d800:29b0::/41", "7552"}, + {"2801:80:240::/48", "262511"}, + {"2001:1248:9731::/45", "11172"}, + {"2402:e40::/32", "23943"}, + {"2600:100b:a010::/39", "6167"}, + {"2610:b0:4128::/43", "3573"}, + {"2804:9d4:173::/38", "262996"}, + {"2001:559:c39a::/48", "33667"}, + {"2803:a2e0::/32", "269921"}, + {"2804:33bc::/32", "265414"}, + {"2a03:40e0::/32", "196932"}, + {"2a0e:1bc5::/35", "208621"}, + {"2001:b08:21::/45", "3267"}, + {"2001:4048:108::/48", "47341"}, + {"2a0e:b107:1182::/48", "210925"}, + {"2001:678:650::/48", "49472"}, + {"2800:160:1812::/45", "14259"}, + {"2a02:2ad8:120::/33", "702"}, + {"2a07:85c2::/48", "174"}, + {"2001:559:23c::/48", "7015"}, + {"240a:ad05::/32", "145983"}, + {"2a00:edc0:6259::/48", "62597"}, + {"2a0a:4080::/32", "47493"}, + {"2001:559:82b2::/48", "7725"}, + {"240a:aa97::/32", "145361"}, + {"2604:d800:1002::/32", "20355"}, + {"2001:67c:27b8::/48", "42428"}, + {"240e:982:b100::/40", "136190"}, + {"2607:fad0:40::/44", "53824"}, + {"2a03:1e40::/32", "197799"}, + {"2402:800:5963::/43", "7552"}, + {"2a01:bb20:3000::/32", "61969"}, + {"2a0c:e080::/44", "51095"}, + {"2607:f7c0:4100::/32", "36444"}, + {"2800:bf0:146::/44", "52257"}, + {"2804:7a80::/32", "271375"}, + {"2a00:5c20::/32", "199298"}, + {"2803:7ce0::/32", "23140"}, + {"2a02:2010:2300::/45", "20978"}, + {"2402:8100:27ea::/45", "55644"}, + {"2a03:5640:f560::/48", "16509"}, + {"2a0f:5701:3527::/32", "206499"}, + {"2c0f:f330::/32", "327950"}, + {"2408:840c:6e00::/40", "17621"}, + {"2606:2800:5033::/48", "15133"}, + {"2804:43c0::/32", "267588"}, + {"2804:5d14:800::/38", "268949"}, + {"2800:1e0:d02::/38", "7195"}, + {"2001:648:2c00::/48", "6867"}, + {"2001:7c0::/34", "553"}, + {"2001:19f0:a800::/35", "20473"}, + {"240e:108:4f::/42", "4134"}, + {"2600:1416:2001::/35", "20940"}, + {"2a02:26f7:eb8d::/42", "20940"}, + {"2001:67c:1124::/48", "60973"}, + {"2001:df3:b980::/48", "17538"}, + {"2407:e740:2::/39", "59239"}, + {"240a:ae39::/32", "146291"}, + {"2806:230:6018::/48", "265594"}, + {"2a00:8b00::/32", "35154"}, + {"2a01:4dc0::/42", "206618"}, + {"2402:8100:27e0::/47", "45271"}, + {"2804:3964::/32", "266028"}, + {"2804:3d34::/32", "266260"}, + {"2804:6b44::/32", "270389"}, + {"2a03:efc0:ba5e::/48", "33438"}, + {"2001:67c:1be0::/48", "210317"}, + {"2a03:af60::/32", "25513"}, + {"2a10:ca00:1::/48", "212217"}, + {"2408:84f3:3060::/40", "17623"}, + {"2409:8752:700::/36", "56047"}, + {"2803:6900:1531::/48", "52423"}, + {"2806:266:300::/41", "27672"}, + {"2804:56c:1200::/34", "28210"}, + {"2804:16d8:800::/38", "262729"}, + {"2001:559:36a::/48", "33490"}, + {"2001:978:8e00::/48", "197205"}, + {"240a:a6b2::/32", "144364"}, + {"2600:1407:3c01::/33", "20940"}, + {"2605:32c0:a001::/48", "14618"}, + {"2a02:cb80:2a40::/48", "43766"}, + {"2804:e24:fe40::/40", "262417"}, + {"2a02:26f7:d104::/48", "36183"}, + {"240a:a65a::/32", "144276"}, + {"2a05:27c0::/46", "210021"}, + {"2604:34c0::/32", "25780"}, + {"2806:230:1028::/48", "265594"}, + {"2806:230:4008::/48", "265594"}, + {"2a02:26f7:b90c::/48", "36183"}, + {"2401:d800:dce2::/39", "7552"}, + {"2405:6e00:2088::/45", "18291"}, + {"2407:5280:200::/45", "133557"}, + {"2804:1e84::/32", "264433"}, + {"2806:230:300b::/48", "11888"}, + {"2403:9800:7100::/37", "4771"}, + {"240e:967:d400::/39", "58772"}, + {"2804:6408::/32", "269399"}, + {"2001:559:8274::/48", "33660"}, + {"2409:8053:3802::/40", "56047"}, + {"2600:140f:4601::/36", "20940"}, + {"2602:fff8::/36", "13866"}, + {"2804:3ea0::/32", "266610"}, + {"2a01:47c1::/32", "41075"}, + {"2a02:d8a0::/32", "43709"}, + {"2a04:da00::/29", "60140"}, + {"240a:ac48::/32", "145794"}, + {"240e:108:11b2::/47", "58461"}, + {"240e:397:1e00::/34", "140495"}, + {"2804:6258::/32", "269291"}, + {"2001:559:65::/48", "33657"}, + {"2409:8958:ca54::/39", "56040"}, + {"2804:b0c::/32", "52935"}, + {"2804:30b0::/32", "264969"}, + {"2804:7e50::/32", "271616"}, + {"2a04:4e47::/46", "54113"}, + {"2a0d:c740:1c::/48", "49367"}, + {"2400:cb00:a8f0::/47", "13335"}, + {"240a:aa17::/32", "145233"}, + {"2620:c7:c000::/48", "394128"}, + {"2a00:11c0:dd::/48", "42473"}, + {"2a04:5740::/29", "43857"}, + {"2a06:a001:a060::/44", "210542"}, + {"2001:67c:244c::/48", "39293"}, + {"2403:0:607::/48", "38191"}, + {"2800:160:2042::/45", "14259"}, + {"2408:8456:5400::/42", "17622"}, + {"2001:559:8256::/48", "33651"}, + {"2406:2000:ec::/46", "24506"}, + {"2409:8087:6a37::/41", "9808"}, + {"240a:ae20::/32", "146266"}, + {"2603:c002:1a10::/42", "31898"}, + {"2804:131c::/32", "263516"}, + {"2a00:1228::/47", "31148"}, + {"2a04:f80::/29", "42858"}, + {"2001:4830:c150::/44", "22147"}, + {"2401:b8c0:b::/45", "64074"}, + {"2a02:26f7:ddc0::/48", "36183"}, + {"2a02:26f7:e744::/48", "36183"}, + {"2409:8c28:6093::/39", "56041"}, + {"2001:57a:f213::/40", "22773"}, + {"2409:895c::/26", "9808"}, + {"2606:8b40::/32", "21748"}, + {"2a02:26f7:e510::/48", "36183"}, + {"2600:6c38:73c::/41", "20115"}, + {"2804:14c:de43::/40", "28573"}, + {"2a00:d30:120::/45", "47201"}, + {"2a02:26f7:f080::/48", "36183"}, + {"2001:559:8497::/48", "7015"}, + {"2602:fcf6:ffb::/48", "210930"}, + {"2800:bf0:824b::/48", "52257"}, + {"2804:318c:2020::/32", "265023"}, + {"2806:2f0:20a3::/43", "22884"}, + {"2a01:190:15ee::/48", "28839"}, + {"2a02:2ae8::/39", "702"}, + {"2001:1248:98a7::/44", "11172"}, + {"240a:a4d0::/32", "143882"}, + {"2602:fc26:cd::/48", "213339"}, + {"2001:67c:2610::/48", "197964"}, + {"2804:7f7:a000::/35", "10429"}, + {"2a02:26f7:d400::/48", "36183"}, + {"2405:a040::/32", "131667"}, + {"2803:2ee0:3842::/32", "269983"}, + {"2803:f7e0:1040::/48", "271773"}, + {"2a00:1288:114::/40", "10310"}, + {"2a02:26f7:113::/45", "20940"}, + {"2408:8256:3292::/44", "17623"}, + {"240a:a539::/32", "143987"}, + {"2600:1406:f001::/37", "20940"}, + {"2602:fed2:fc3::/44", "53356"}, + {"2606:f300:2::/47", "14135"}, + {"2a01:288:4008::/48", "198941"}, + {"2a07:3b80:3::/48", "60781"}, + {"2001:559:c100::/48", "33659"}, + {"2400:7400::/44", "38044"}, + {"2401:1801:140::/36", "58683"}, + {"2602:fbe7::/40", "398898"}, + {"2605:9500::/45", "14244"}, + {"2a02:88d:22f::/48", "47794"}, + {"2a02:2ad0:633::/44", "702"}, + {"2a0f:9400:6225::/48", "48741"}, + {"2001:559:52f::/43", "33287"}, + {"2001:67c:24e8::/47", "47749"}, + {"240a:a773::/32", "144557"}, + {"240a:a8c4::/32", "144894"}, + {"2607:ffd8:214::/36", "33333"}, + {"2a01:8840:f1::/48", "207266"}, + {"2a09:2dc2::/32", "43180"}, + {"2001:559:79b::/48", "7922"}, + {"2408:840d:ab00::/42", "17621"}, + {"240a:a9b0::/32", "145130"}, + {"2001:678:c98::/48", "48025"}, + {"2001:67c:2ab4::/48", "3301"}, + {"2001:1840:c020::/44", "196"}, + {"2600:6c38:72b::/45", "20115"}, + {"2606:2800:6050::/48", "15133"}, + {"2804:14d:ce00::/40", "28573"}, + {"2804:2444::/32", "264211"}, + {"2a01:7d20:c00::/40", "203645"}, + {"2a0a:7a00::/29", "61317"}, + {"2600:9000:1083::/45", "16509"}, + {"2804:5d00::/32", "268945"}, + {"2a02:26f7:d740::/48", "36183"}, + {"2620:111:d002::/47", "18841"}, + {"2804:954:2000::/32", "263073"}, + {"2406:840:400::/48", "139317"}, + {"2409:8904:7e40::/39", "24547"}, + {"2803:6900:200::/48", "52423"}, + {"2804:10c0::/32", "263647"}, + {"2a04:a100::/29", "62183"}, + {"2a0b:e41:1::/46", "205809"}, + {"2001:559:769::/48", "33491"}, + {"2001:df3:8f80::/48", "140603"}, + {"2804:18:1860::/40", "26599"}, + {"2001:559:860b::/48", "7725"}, + {"2404:3d00:40a8::/45", "3573"}, + {"240e:13:807::/48", "140859"}, + {"2607:ff00:700::/40", "19181"}, + {"2800:110:3401::/36", "4270"}, + {"2806:230:4003::/48", "11888"}, + {"2a02:ee80:4074::/46", "3573"}, + {"2a0b:1d80::/29", "202694"}, + {"2001:44b8:9::/45", "4739"}, + {"2408:8956:2f00::/40", "17816"}, + {"240a:a0df::/32", "142873"}, + {"240e:109:8044::/48", "134768"}, + {"2600:6c38:b65::/43", "20115"}, + {"2607:4600::/32", "33339"}, + {"2607:f180:7300::/31", "35908"}, + {"2607:f6b8::/32", "4043"}, + {"2620:0:f00::/47", "6431"}, + {"2804:82f8::/32", "272168"}, + {"2a04:6c0::/29", "9067"}, + {"2001:559:479::/46", "7922"}, + {"2001:559:c0f9::/48", "7016"}, + {"2001:6d9::/29", "8323"}, + {"240a:a1c9::/32", "143107"}, + {"2804:368::/32", "22381"}, + {"2804:213c::/46", "264544"}, + {"2a0b:2d40:c10b::/34", "209135"}, + {"2001:bc8:2000::/32", "12876"}, + {"2804:1e64::/32", "264426"}, + {"2a02:26f7:bf00::/48", "36183"}, + {"2001:559:297::/48", "33660"}, + {"2402:3a80:1738::/48", "38266"}, + {"2408:84f3:a640::/36", "17816"}, + {"2610:a1:302c::/48", "12008"}, + {"2801:80:200::/48", "52997"}, + {"2804:20f8::/35", "264524"}, + {"2804:8648::/32", "272633"}, + {"2a03:bc00::/32", "29086"}, + {"2001:559:825c::/48", "33659"}, + {"2001:579:9260::/44", "22773"}, + {"2001:df7:6d80::/48", "139484"}, + {"2405:84c0:fa00::/40", "9886"}, + {"2610:b8::/32", "19021"}, + {"2a0d:7100::/45", "41033"}, + {"2409:802f:2a05::/48", "9808"}, + {"2001:559:83cd::/48", "33651"}, + {"2001:5e0:21::/46", "16713"}, + {"2400:adc1::/30", "9541"}, + {"2402:ef1b:2100::/40", "7633"}, + {"2409:806b:5d00::/29", "9808"}, + {"2600:100c:b280::/33", "22394"}, + {"2001:559:c383::/45", "7922"}, + {"2001:738:4::/48", "12303"}, + {"2406:840:fbb0::/48", "139058"}, + {"2800:160:1032::/41", "14259"}, + {"2804:2f40:a000::/33", "264880"}, + {"2001:559:3e3::/45", "33662"}, + {"2001:559:813d::/46", "33491"}, + {"2001:1248:84c5::/43", "11172"}, + {"2600:1406:8000::/48", "35994"}, + {"2620:1d5:9::/45", "14773"}, + {"2800:590:206d::/36", "7004"}, + {"2804:2ebc:200a::/32", "265363"}, + {"2001:df3:a800::/48", "133408"}, + {"2407:6380::/32", "131713"}, + {"2604:d600:15d2::/44", "32098"}, + {"2806:230:fffa::/45", "11888"}, + {"2408:840c:1300::/40", "17621"}, + {"240a:aee1::/32", "146459"}, + {"240e:67e:8c00::/33", "4134"}, + {"2a02:26f7:ca81::/46", "20940"}, + {"2401:4900:3760::/44", "45609"}, + {"2804:3840::/32", "266465"}, + {"2001:1248:4300::/44", "11172"}, + {"240e:f:c800::/37", "4835"}, + {"2600:370f:34e5::/44", "32261"}, + {"2602:fed2:7115::/46", "53356"}, + {"2a0f:5707:17::/48", "212592"}, + {"2a0f:9340:32::/47", "1299"}, + {"2a10:8700::/32", "207925"}, + {"2408:8406:3000::/39", "4808"}, + {"240a:aa05::/32", "145215"}, + {"2804:18:7000::/42", "26599"}, + {"2804:4760:c002::/34", "267050"}, + {"2001:67c:299c::/48", "56813"}, + {"2409:4003:3000::/27", "55836"}, + {"2803:1860:1200::/36", "267823"}, + {"2803:f200::/32", "52322"}, + {"2602:fdb3::/36", "397945"}, + {"2604:6600:2::/45", "40676"}, + {"2606:380::/32", "40545"}, + {"2803:af00::/32", "52453"}, + {"2a02:26f7:cb04::/48", "36183"}, + {"2a10:45c0::/32", "212808"}, + {"2409:8055:19::/45", "56040"}, + {"2800:bf0:a000::/44", "52257"}, + {"2a02:26f7:c488::/48", "36183"}, + {"2a12:7c00::/30", "210625"}, + {"2402:ef21:8000::/35", "7633"}, + {"240a:a38e::/32", "143560"}, + {"2600:1003:f850::/29", "22394"}, + {"2603:c0f8:1410::/39", "20054"}, + {"2a05:62c0::/29", "48360"}, + {"2402:b5c0::/32", "137553"}, + {"2602:802::/40", "397843"}, + {"2605:8300:d::/46", "33059"}, + {"2620:25:6000::/48", "15296"}, + {"2a02:26f7:dbc9::/46", "20940"}, + {"2a09:bfc0::/29", "44103"}, + {"2405:84c0:ff19::/48", "9886"}, + {"2a02:c744::/30", "199644"}, + {"2a0e:b107:af0::/44", "50798"}, + {"2001:2045::/27", "1299"}, + {"2404:bf40:8481::/42", "139084"}, + {"2605:7580::/32", "40107"}, + {"2804:204:313::/45", "28186"}, + {"2804:2fc0::/33", "264910"}, + {"2804:7bc4::/32", "271453"}, + {"2806:230:2002::/48", "265594"}, + {"2001:44b8:6068::/48", "7545"}, + {"2401:1700::/44", "55666"}, + {"2600:140f:cc01::/38", "20940"}, + {"2804:23b4::/32", "264178"}, + {"2804:5948::/32", "268181"}, + {"2a04:4e40:3e30::/41", "54113"}, + {"2a05:6200:73::/48", "201630"}, + {"2c0f:eea0::/32", "37288"}, + {"2001:559:c3d5::/48", "33650"}, + {"2001:df1:9180::/48", "139689"}, + {"2606:1540::/35", "398704"}, + {"2804:64d4::/32", "269452"}, + {"2806:230:4021::/48", "11888"}, + {"2001:559:8070::/47", "33490"}, + {"2001:559:c3ea::/48", "33657"}, + {"2001:67c:232c::/48", "207160"}, + {"2001:12e0:b000::/33", "10429"}, + {"2001:4998:15c::/48", "36752"}, + {"2406:daa0:8020::/44", "16509"}, + {"2602:fed2:7188::/48", "396881"}, + {"2804:1b9c::/32", "61737"}, + {"2a0d:6780::/29", "200899"}, + {"2001:67c:24e0::/48", "198141"}, + {"240a:aa98::/32", "145362"}, + {"2607:de00:3b::/38", "23498"}, + {"2804:35c0::/32", "266304"}, + {"2001:678:1d4::/48", "64449"}, + {"2606:8e80:4000::/48", "32133"}, + {"2a02:78::/32", "44514"}, + {"2a0b:1b82::/31", "206521"}, + {"2400:c700:11::/40", "55644"}, + {"2402:7b00:3::/48", "55843"}, + {"2620:10b:7000::/46", "11483"}, + {"2804:72a4::/32", "270866"}, + {"2a06:3380::/29", "12941"}, + {"2a0e:b107:eb1::/48", "212120"}, + {"2001:4430:c000::/42", "17853"}, + {"2409:8054:51::/46", "56040"}, + {"2602:ff16:1::/44", "29802"}, + {"2803:6c20::/32", "265830"}, + {"2a09:5140::/48", "34775"}, + {"2001:559:8096::/47", "22909"}, + {"2402:800:3871::/44", "7552"}, + {"2409:8c1e:5b80::/34", "9808"}, + {"2001:559:c2e9::/48", "33650"}, + {"2400:e940::/32", "136463"}, + {"240e:964:1800::/37", "133774"}, + {"2a02:26f7:f949::/46", "20940"}, + {"2a05:3e80::/29", "201211"}, + {"2405:ef00::/43", "58779"}, + {"2620:120:8000::/44", "393990"}, + {"2804:2984:780::/32", "53184"}, + {"2a0f:c087:e::/48", "212521"}, + {"240a:a8b5::/32", "144879"}, + {"240a:a9d2::/32", "145164"}, + {"2607:5500::/31", "54290"}, + {"2620:102:b001::/48", "7195"}, + {"2801:1fc:10::/48", "27951"}, + {"2804:14c:5584::/41", "28573"}, + {"2804:22cc::/37", "264123"}, + {"2a0c:7e45:d430::/48", "20473"}, + {"2001:dce:9400::/48", "45285"}, + {"2001:454e:c011::/34", "9924"}, + {"2409:8520::/27", "9808"}, + {"240a:ae5b::/32", "146325"}, + {"2001:559:825a::/48", "7725"}, + {"2607:f8b0::/33", "15169"}, + {"2a00:b6e0::/32", "60362"}, + {"2a0f:74c0::/29", "207572"}, + {"2620:e1:c000::/48", "56647"}, + {"2804:5b38::/32", "52842"}, + {"2806:332::/37", "265578"}, + {"2a00:1f28::/32", "43733"}, + {"2a04:2b87::/32", "47602"}, + {"2620:ed:4000::/48", "852"}, + {"2a09:900::/46", "15576"}, + {"2001:df2:9980::/48", "139889"}, + {"2402:a600::/32", "17996"}, + {"2600:1008:b1f0::/33", "22394"}, + {"2600:9c00::/32", "7979"}, + {"2804:21dc::/32", "264578"}, + {"2804:6934::/32", "270255"}, + {"2001:559:325::/48", "7725"}, + {"2001:df7:5280::/48", "138754"}, + {"2605:32c0:a004::/33", "5670"}, + {"2605:a404:c74::/40", "33363"}, + {"2806:230:5003::/48", "11888"}, + {"2405:1e00:ff00::/48", "9498"}, + {"2804:5024::/32", "262826"}, + {"240e:5e:10e0::/44", "140053"}, + {"2a0d:63c1::/32", "30721"}, + {"2001:1278:10::/32", "18734"}, + {"2401:d800:2b30::/41", "7552"}, + {"2405:1480:1000::/48", "4811"}, + {"2602:fed2:7314::/48", "53356"}, + {"2604:3b80:2833::/32", "31857"}, + {"2a01:b740:a22::/48", "6185"}, + {"2a03:f700::/32", "5563"}, + {"2409:8052:2000::/47", "56047"}, + {"2402:800:9b01::/44", "7552"}, + {"2600:1407:801::/38", "20940"}, + {"2001:67c:934::/48", "31662"}, + {"2403:9800:30::/39", "4648"}, + {"2409:8c3d::/25", "9808"}, + {"2804:518c::/32", "268459"}, + {"2a02:ee80:40d4::/46", "21433"}, + {"2408:8456:d040::/36", "17816"}, + {"2600:1014:9110::/36", "22394"}, + {"2600:1408:ac01::/38", "20940"}, + {"2804:2d78::/32", "265285"}, + {"2a02:2ae8:150::/32", "702"}, + {"2a0b:3080:8020::/33", "206516"}, + {"2001:559:c101::/46", "13367"}, + {"2404:59c0:4000::/32", "58507"}, + {"2804:5454::/32", "268643"}, + {"2404:bf40:f202::/40", "139084"}, + {"2600:1415:15::/48", "24319"}, + {"2a03:58a0::/32", "201330"}, + {"2001:1900:2285::/46", "3356"}, + {"2401:d800:f110::/42", "7552"}, + {"240a:a0dc::/32", "142870"}, + {"240a:a23e::/32", "143224"}, + {"240a:aab1::/32", "145387"}, + {"2600:140f:bc00::/48", "9498"}, + {"2605:a401:8ebc::/41", "33363"}, + {"2804:14d:ec00::/40", "28573"}, + {"2804:3298::/32", "265087"}, + {"2a02:26f7:59::/48", "20940"}, + {"2a02:2b80::/47", "45012"}, + {"2a0f:8ac1:a0a::/48", "205749"}, + {"2001:559:31b::/48", "7922"}, + {"240e:640:cf00::/34", "4134"}, + {"2a02:ee80:40c2::/43", "3573"}, + {"2a04:95c0::/29", "29611"}, + {"240a:aa58::/32", "145298"}, + {"240e:ff:c00b::/36", "4134"}, + {"2804:970:8000::/33", "263086"}, + {"2806:230:3018::/48", "265594"}, + {"2a04:34c0::/29", "47156"}, + {"2a10:cc42:1dba::/45", "20473"}, + {"2a11:90c0::/29", "204790"}, + {"2001:1388:4446::/36", "6147"}, + {"2404:5cc0::/32", "142122"}, + {"240a:aa6e::/32", "145320"}, + {"2804:204:235::/46", "28186"}, + {"2a02:26f7:dac9::/42", "20940"}, + {"2a0c:6c40:a4ef::/48", "20705"}, + {"2001:67c:18c::/48", "47682"}, + {"2001:df0:c200::/48", "131182"}, + {"2600:100d:fe10::/40", "22394"}, + {"2603:c002:8150::/38", "31898"}, + {"2a05:b8c0::/29", "203815"}, + {"2407:c940::/35", "48024"}, + {"2409:801e::/34", "24400"}, + {"2600:1001:b030::/40", "22394"}, + {"2804:76bc::/32", "271131"}, + {"2a00:f5c0::/32", "41369"}, + {"2a06:7f80::/29", "204035"}, + {"2001:559:87db::/48", "7015"}, + {"2001:1248:97b0::/44", "11172"}, + {"2401:3bc0:1014::/32", "137409"}, + {"2620:139:6006::/48", "22600"}, + {"2804:2744::/32", "263888"}, + {"2804:84cc::/34", "272541"}, + {"2a0e:3a87:ff00::/40", "208741"}, + {"2001:559:237::/48", "33661"}, + {"2400:a980:8ff::/48", "133111"}, + {"2409:8057:3807::/44", "56040"}, + {"2600:6c10:f069::/46", "20115"}, + {"2800:160:113d::/41", "14259"}, + {"2804:74a8:200::/32", "270995"}, + {"2a02:26f0:1e::/42", "20940"}, + {"2a02:26f0:a800::/48", "34164"}, + {"2a0c:b641:530::/44", "210597"}, + {"2a0e:2800::/29", "63023"}, + {"2001:500:53::/45", "12041"}, + {"2401:c900:1f00::/34", "36351"}, + {"2a02:26f7:b3c0::/48", "36183"}, + {"2a0f:9400:770a::/48", "211481"}, + {"2404:f4c0:f608::/41", "139328"}, + {"2a0c:5247:3000::/36", "59504"}, + {"2a0f:1201::/32", "62240"}, + {"2602:fdfa::/36", "397332"}, + {"2803:2a00:2000::/35", "27895"}, + {"2803:6580::/32", "265839"}, + {"2804:2198::/32", "52807"}, + {"2001:559:834f::/48", "33287"}, + {"2403:f880:6000::/39", "33438"}, + {"2604:6640::/32", "3131"}, + {"2620:13b:3000::/48", "13607"}, + {"2620:15c::/36", "45566"}, + {"2001:559:7ac::/48", "33491"}, + {"2001:559:c321::/48", "7922"}, + {"240a:c000::/21", "137726"}, + {"2600:1488:6161::/40", "20940"}, + {"2408:8956:5f00::/40", "17816"}, + {"2607:f6f0:5004::/40", "27224"}, + {"2804:25e4:301::/37", "61573"}, + {"2806:10a0:cbff:100::/34", "8151"}, + {"2401:d800:d650::/42", "7552"}, + {"2402:800:568d::/43", "7552"}, + {"240a:a3a2::/32", "143580"}, + {"2803:5ce0:300::/40", "54235"}, + {"240a:a805::/32", "144703"}, + {"2804:18a0::/32", "61944"}, + {"2804:72ac::/32", "270868"}, + {"2a01:5041:e::/48", "202196"}, + {"2a02:4de0::/32", "31590"}, + {"2a03:3f40:8a::/32", "50673"}, + {"2a0f:3101::/32", "62240"}, + {"2405:6e00:2200::/43", "133612"}, + {"2408:84f3:b440::/38", "17816"}, + {"2620:94:e000::/48", "398915"}, + {"2a0e:97c0:5ee::/47", "210426"}, + {"2001:1248:5f3f::/41", "11172"}, + {"2600:1404:d001::/37", "20940"}, + {"2607:fb90:1000::/36", "21928"}, + {"2804:964::/34", "263080"}, + {"2a06:3000:1000::/36", "209220"}, + {"2001:da8:260::/47", "23910"}, + {"2409:8a04:6100::/36", "24547"}, + {"240b:4003:12b::/45", "45102"}, + {"2803:4480:8000::/33", "263189"}, + {"2804:ec0::/32", "262972"}, + {"2806:2f0:2443::/43", "22884"}, + {"2400:4e80:7a00::/32", "131584"}, + {"2a0f:e6c0:fe1::/48", "60781"}, + {"2405:d000:7000::/36", "17660"}, + {"2803:5ac0::/32", "265633"}, + {"2a02:26f7:c89d::/42", "20940"}, + {"2404:138:130::/46", "45131"}, + {"240e:982:1200::/34", "4134"}, + {"2600:6c38:20::/45", "20115"}, + {"2607:fc48:f004::/48", "40009"}, + {"2402:79c0:3::/48", "7342"}, + {"2602:fbbe::/40", "40676"}, + {"2800:485:1c00::/40", "10620"}, + {"2604:6400:8100::/33", "29974"}, + {"2604:d600:131e::/42", "32098"}, + {"2804:6bd4::/32", "270428"}, + {"2a10:d000::/43", "35506"}, + {"2408:80ea:7700::/41", "17816"}, + {"2408:8459:4a30::/41", "17622"}, + {"2409:8d6b::/27", "9808"}, + {"240e:3bb::/35", "134773"}, + {"2600:140f:3c00::/48", "9498"}, + {"2604:6d00:1000::/48", "36223"}, + {"2a02:26f7:e3cc::/48", "36183"}, + {"2a0c:f00::/107", "56485"}, + {"2409:8904:5840::/42", "24547"}, + {"240e:45c:c100::/40", "140536"}, + {"2a06:19c0::/29", "8309"}, + {"2001:559:c2c4::/47", "7016"}, + {"2403:6380:16::/47", "212237"}, + {"2602:fc95::/36", "399499"}, + {"2606:6680:245::/48", "40676"}, + {"2620:149:538::/41", "714"}, + {"2801:80:ec0::/48", "264102"}, + {"2804:14d:1488::/47", "28573"}, + {"2001:1388:70c6::/37", "6147"}, + {"2403:9800:b050::/45", "4771"}, + {"2405:1c0:6241::/46", "55303"}, + {"2409:896a:6900::/38", "9808"}, + {"240a:a8ca::/32", "144900"}, + {"2a00:b580::/32", "16188"}, + {"2a0e:fd45:2a0e::/40", "213253"}, + {"2402:8100:39d0::/42", "45271"}, + {"240e:1f:1000::/33", "4134"}, + {"2804:18a8::/32", "262502"}, + {"2a02:870::/32", "42863"}, + {"2a02:26f0:8200::/48", "34164"}, + {"2a02:26f7:c38b::/48", "20940"}, + {"2a09:4c0:c01::/39", "58057"}, + {"2804:4854::/32", "267114"}, + {"2001:678:b68::/48", "35684"}, + {"2001:c20:c857::/34", "3758"}, + {"2620:106:c005::/48", "11039"}, + {"2804:1754::/48", "263137"}, + {"2804:39e8::/34", "266058"}, + {"2a0d:c500::/29", "204888"}, + {"2001:4878:2037::/44", "12222"}, + {"2408:8459:e610::/42", "17623"}, + {"2620:6b:2000::/48", "397382"}, + {"2620:13b:3020::/48", "13607"}, + {"2001:470:bb::/48", "36324"}, + {"2001:559:25c::/47", "7922"}, + {"2001:559:5cf::/48", "7015"}, + {"2001:4878:8031::/48", "12222"}, + {"2600:1000:bf00::/44", "6167"}, + {"2600:140b:c01::/38", "20940"}, + {"2600:1f1e::/36", "16509"}, + {"2607:f238::/32", "11799"}, + {"2800:160:11cf::/43", "14259"}, + {"2a02:a90::/32", "3303"}, + {"2a02:26f7:e38d::/42", "20940"}, + {"240a:adb6::/32", "146160"}, + {"2606:2800:157::/44", "15133"}, + {"2607:9080:6::/48", "7018"}, + {"2803:59e0::/32", "270021"}, + {"2806:268:2300::/47", "13999"}, + {"2a00:16f8:10::/48", "397942"}, + {"2a02:26f0:6c01::/39", "20940"}, + {"2602:feda:182::/47", "211843"}, + {"2610:18:8801::/48", "17035"}, + {"2620:74:57::/42", "7342"}, + {"2804:2cac:cccd::/35", "265234"}, + {"2a01:c50f:cb40::/40", "12479"}, + {"2a0c:9a40:1050::/47", "34927"}, + {"2001:559:524::/48", "7015"}, + {"2405:1c0:6661::/45", "55303"}, + {"2407:11c0::/32", "139879"}, + {"240a:afd1::/32", "146699"}, + {"2804:62f0:e102::/35", "269329"}, + {"2a02:57e0::/32", "59779"}, + {"2a07:e80::/29", "203329"}, + {"2a07:a8c0::/33", "34939"}, + {"2001:df1:b900::/48", "132563"}, + {"2a03:ea40::/32", "197985"}, + {"2001:559:64::/48", "7725"}, + {"2001:559:787::/48", "22909"}, + {"2001:559:80e5::/48", "7725"}, + {"2001:678:56c::/48", "41887"}, + {"2409:8020:1031::/41", "56046"}, + {"2803:4160::/32", "269726"}, + {"2401:d800:d620::/41", "7552"}, + {"2604:980:7004::/47", "21859"}, + {"2804:1ab0::/32", "61876"}, + {"2804:2f1c:a300::/33", "264872"}, + {"2804:47cc::/32", "267077"}, + {"2a02:26f0:8b01::/37", "20940"}, + {"2a02:26f7:dc80::/48", "36183"}, + {"2001:668:120::/48", "17035"}, + {"2804:314::/44", "61568"}, + {"2804:5680::/32", "268004"}, + {"2804:8414::/32", "272238"}, + {"2806:33b::/32", "265586"}, + {"2001:559:471::/48", "7725"}, + {"2001:559:85c4::/46", "7922"}, + {"2001:df0:31a::/45", "140592"}, + {"2402:b040:fde9::/48", "137132"}, + {"2602:feda:1e0::/44", "140926"}, + {"2a01:ce84::/36", "51964"}, + {"2401:d800:7480::/42", "7552"}, + {"2407:ef00:930::/48", "2687"}, + {"240a:aa55::/32", "145295"}, + {"2600:370f:51b2::/44", "32261"}, + {"2607:fdf0:5e9f::/42", "8008"}, + {"2804:143c::/32", "263320"}, + {"2a04:23c0::/29", "200851"}, + {"2a0e:b107:9f7::/48", "210337"}, + {"2001:559:c4ee::/47", "7015"}, + {"2401:4900:4b30::/44", "45609"}, + {"2404:a800:1611::/34", "9498"}, + {"2408:8948::/32", "4837"}, + {"240e:950:c00::/38", "141157"}, + {"2603:c002:9f00::/43", "31898"}, + {"2a01:b2e0::/29", "60781"}, + {"2409:806b:5b00::/37", "9808"}, + {"2a02:2e02:1300::/41", "12479"}, + {"2001:678:64::/48", "199670"}, + {"2001:1460::/32", "48635"}, + {"2405:e700:400::/40", "133089"}, + {"2406:8800:9011::/46", "17465"}, + {"240e:d6:1000::/36", "140330"}, + {"2804:624c::/32", "53106"}, + {"2001:559:313::/48", "33662"}, + {"2001:678:d78::/48", "8298"}, + {"240a:a674::/32", "144302"}, + {"2610:b0:40fa::/45", "3573"}, + {"2a02:2340::/32", "51319"}, + {"2a02:2e02:a90::/39", "12479"}, + {"2a12:49c2:4000::/31", "211444"}, + {"2001:579:244c::/42", "22773"}, + {"2402:ee80::/48", "132647"}, + {"240e:698:2500::/40", "134756"}, + {"2a02:26f7:f6ec::/47", "36183"}, + {"2c0f:fbe0::/28", "36874"}, + {"240e:44d:7880::/41", "4134"}, + {"2605:5080:5021::/43", "3367"}, + {"2606:8640::/32", "400170"}, + {"2804:682c::/32", "269673"}, + {"2001:678:78c::/48", "12360"}, + {"2001:678:8f8::/48", "206884"}, + {"240a:afb0::/32", "146666"}, + {"2a10:fa80:56::/44", "57050"}, + {"2001:559:8122::/48", "13367"}, + {"2600:370f:40a0::/47", "32261"}, + {"2806:230:600f::/48", "11888"}, + {"2a02:f0a0::/30", "25376"}, + {"2001:559:214::/48", "33657"}, + {"2001:559:830a::/48", "13367"}, + {"2001:67c:7f8::/48", "21221"}, + {"2001:1248:96b0::/45", "11172"}, + {"2001:559:860a::/48", "33659"}, + {"2403:6c0:7367::/48", "137367"}, + {"2600:6c38:a90::/45", "20115"}, + {"2804:6aa8::/32", "270351"}, + {"2a0f:5707:aa14::/46", "208814"}, + {"2001:559:61::/48", "7015"}, + {"2001:da8:23d::/48", "24348"}, + {"2801:96:fff7::/48", "28586"}, + {"2a0f:57c0::/32", "199536"}, + {"2001:dce:7401::/38", "23869"}, + {"2408:8456:7000::/42", "17622"}, + {"240a:a4ed::/32", "143911"}, + {"2600:1419:601::/36", "20940"}, + {"2602:fe9e::/36", "395434"}, + {"2804:3654::/32", "266342"}, + {"2804:61dc:5000::/34", "269261"}, + {"2a10:2080::/29", "207551"}, + {"2001:578:b::/45", "22773"}, + {"2001:ce0:8::/48", "7651"}, + {"2806:2f0:3521::/46", "17072"}, + {"240a:ad56::/32", "146064"}, + {"2803:1d80::/32", "61481"}, + {"2804:37f0:3100::/36", "266445"}, + {"2a02:158:fffe::/48", "44946"}, + {"2001:559:394::/48", "33651"}, + {"2806:288:4092::/48", "28469"}, + {"2a0b:2a86::/32", "21769"}, + {"2a0e:1c40:4000::/48", "208635"}, + {"2600:1417:20::/48", "9498"}, + {"2620:10f:b071::/48", "395700"}, + {"2803:f340:1100::/36", "14754"}, + {"2001:1248:986a::/45", "11172"}, + {"2001:4408:5601::/36", "4758"}, + {"240e:3bb:f100::/37", "134775"}, + {"2602:107:810::/48", "11955"}, + {"2607:8e80::/32", "395479"}, + {"2620:79:5::/44", "30013"}, + {"2a02:ed03::/32", "61292"}, + {"2001:559:5c8::/48", "33668"}, + {"2604:9d80::/43", "395172"}, + {"2604:b400::/32", "11979"}, + {"2604:d040::/32", "396879"}, + {"2804:4d3c::/36", "267420"}, + {"2001:559:8507::/48", "33651"}, + {"2408:8956:f200::/42", "17816"}, + {"240e:6b8::/34", "140308"}, + {"2a04:ba80::/29", "202217"}, + {"240a:a5d5::/32", "144143"}, + {"2a0a:7dc0::/29", "57656"}, + {"2405:4803:d0a::/43", "18403"}, + {"2a09:bac0:133::/48", "395747"}, + {"2001:559:c163::/48", "7015"}, + {"2409:807e:3100::/36", "9808"}, + {"240a:a7f9::/32", "144691"}, + {"2600:40ff:fffc::/46", "701"}, + {"2800:bf0:81c9::/45", "52257"}, + {"2a0d:2580:ff00::/48", "20473"}, + {"2a10:4646:60::/44", "212106"}, + {"2001:da8:218::/47", "24349"}, + {"2409:8004:2900::/35", "24547"}, + {"2804:4748::/32", "267043"}, + {"2401:d800:53f0::/37", "7552"}, + {"2605:a401:8089::/42", "33363"}, + {"2610:20:9008::/45", "3477"}, + {"2404:6300::/35", "131310"}, + {"2405:84c0:ff25::/48", "9516"}, + {"2600:1417:c001::/36", "20940"}, + {"2001:678:820::/48", "213297"}, + {"2607:f178::/48", "30217"}, + {"2804:6e38::/32", "270583"}, + {"2a09:1c40::/32", "209553"}, + {"2a0f:3440::/29", "37296"}, + {"2001:678:ea8::/48", "209295"}, + {"2407:47c0::/32", "210542"}, + {"2804:8018:6000::/36", "271729"}, + {"2a01:5b0:30::/48", "50611"}, + {"2a09:4c2:34::/48", "213372"}, + {"2001:67c:8cc::/48", "210562"}, + {"2001:67c:157c::/48", "3215"}, + {"2001:15f8:c00::/48", "25384"}, + {"240a:a3b6::/32", "143600"}, + {"240e:87c:270::/39", "137692"}, + {"2a0d:e8c0::/47", "35829"}, + {"2001:559:82bd::/48", "33668"}, + {"2404:bf40:f803::/48", "7545"}, + {"2604:d00::/32", "40523"}, + {"2806:2f0:2400::/48", "17072"}, + {"2a00:c760::/32", "47381"}, + {"240a:aec7::/32", "146433"}, + {"2620:1d5:d::/39", "14773"}, + {"2a02:26f7:ce00::/48", "36183"}, + {"2a0e:b280::/29", "208794"}, + {"2001:67c:760::/48", "35008"}, + {"2001:978:5204::/39", "174"}, + {"2409:f:f5::/32", "55824"}, + {"240a:a698::/32", "144338"}, + {"2a02:238::/32", "16097"}, + {"2001:350::/32", "7671"}, + {"2001:500:124::/48", "396549"}, + {"240a:afe8::/32", "146722"}, + {"2a04:e800:5010::/47", "57976"}, + {"2a0a:6500::/48", "50219"}, + {"2804:14d:5823::/40", "28573"}, + {"2a01:5d0::/32", "8462"}, + {"2604:2c40:1000::/36", "63252"}, + {"2804:7dfc::/32", "271595"}, + {"2001:4978:10af::/36", "19255"}, + {"2407:7a80::/43", "132384"}, + {"240e:438:820::/43", "140647"}, + {"2804:4b0:364::/40", "262459"}, + {"2804:2804:840::/32", "263935"}, + {"2a04:6a40::/29", "49892"}, + {"2001:da8:4e00::/47", "138376"}, + {"2408:8459:7230::/41", "17622"}, + {"2804:1a84::/32", "61863"}, + {"2806:261:2300::/37", "13999"}, + {"2a02:ff0:3dfb::/45", "12735"}, + {"2607:fc58:2000:600::/64", "13536"}, + {"2806:2f0:97a1::/46", "17072"}, + {"2a0d:d900:2::/29", "61138"}, + {"240a:a080::/32", "142778"}, + {"240a:a2b3::/32", "143341"}, + {"2804:ef0:200::/32", "263558"}, + {"2001:559:8302::/48", "33651"}, + {"2400:cb00:a1b0::/45", "13335"}, + {"2402:b8c0::/32", "55966"}, + {"2408:8459:1b50::/37", "17816"}, + {"2620:120:e000::/40", "15169"}, + {"2800:bf0:8165::/48", "52257"}, + {"2001:b400:d408::/45", "17421"}, + {"2400:fa80:4::/46", "133480"}, + {"2409:8055:4c::/48", "9808"}, + {"240d:c010:6c::/48", "132203"}, + {"2600:6c10:f829::/41", "20115"}, + {"2604:d600:50b::/43", "32098"}, + {"2607:f440::/31", "7859"}, + {"2803:8280::/32", "264844"}, + {"2400:8800:500::/47", "6279"}, + {"2409:8054:301a::/48", "9808"}, + {"240e:3be:dc00::/34", "4134"}, + {"2620:0:a00::/44", "71"}, + {"2a02:26f0:1b01::/37", "20940"}, + {"2a06:a005:1::/48", "60438"}, + {"2001:df7:e200::/48", "135239"}, + {"2804:66a0:13::/32", "269572"}, + {"2a02:3d0::/45", "22822"}, + {"2a02:2160:8000::/36", "44679"}, + {"2404:bf40:c040::/46", "7545"}, + {"2600:1000:bf0e::/33", "22394"}, + {"2602:ffb0:11::/48", "40676"}, + {"2605:2700:9001::/33", "47066"}, + {"2607:f668::/32", "22351"}, + {"2804:2148::/32", "264545"}, + {"2407:c080::/36", "55990"}, + {"2409:8c4c::/43", "9808"}, + {"2600:1904::/30", "396982"}, + {"2a07:22c1:39::/48", "207846"}, + {"2001:559:4c6::/44", "7922"}, + {"2001:67c:850::/48", "210775"}, + {"240a:a607::/32", "144193"}, + {"2804:594::/32", "19723"}, + {"2804:32d4::/32", "265100"}, + {"2a00:1d58:fa15::/44", "47524"}, + {"2a01:4640:c800::/40", "9042"}, + {"2001:990::/32", "15703"}, + {"2001:df5:1700::/48", "18196"}, + {"2a11:540::/30", "210966"}, + {"2401:d800:5ef0::/39", "7552"}, + {"2600:1fa0:8010::/39", "16509"}, + {"2800:300:8500::/40", "27651"}, + {"2804:1950::/32", "61786"}, + {"2804:1f3a::/32", "268839"}, + {"2a0d:9540:a01::/46", "59460"}, + {"2c0f:f1e0::/47", "37235"}, + {"2408:8957:c100::/40", "17816"}, + {"240a:abb4::/32", "145646"}, + {"240e:3b9:1200::/39", "4134"}, + {"2a02:26f7:36::/48", "36183"}, + {"2001:4878:2164::/48", "12222"}, + {"2a0e:2a80::/29", "207902"}, + {"2409:8904:4160::/38", "24547"}, + {"2a02:340::/32", "48918"}, + {"2a02:26f7:e8d0::/48", "36183"}, + {"2a03:32c0:3023::/32", "48503"}, + {"2600:140b:e401::/38", "20940"}, + {"2602:80d:3000::/44", "545"}, + {"2604:ef40:2::/48", "396158"}, + {"2a02:27ba:4000::/34", "49278"}, + {"2001:df3:5580::/48", "14618"}, + {"240a:a669::/32", "144291"}, + {"2605:b100:a00::/40", "577"}, + {"2804:7db4::/32", "271577"}, + {"2a07:62c0::/29", "202970"}, + {"2402:3a80:1c3c::/41", "38266"}, + {"2408:840d:5b00::/42", "17621"}, + {"2604:d600:1156::/44", "32098"}, + {"2a01:5042:200b::/48", "202196"}, + {"2001:44b8:4052::/48", "7545"}, + {"2803:7da0:a::/48", "64114"}, + {"2a05:2140::/29", "201603"}, + {"2804:a9c::/32", "52898"}, + {"2806:2f0:62::/40", "17072"}, + {"2c0f:ea30::/32", "5713"}, + {"2600:380:8f00::/40", "7018"}, + {"2602:fc11::/36", "398334"}, + {"2806:2f0:12e2::/48", "22884"}, + {"2a00:b340:35::/48", "196745"}, + {"2a02:26f7:e604::/48", "36183"}, + {"2404:8d02:1049::/43", "9587"}, + {"2406:daa0:e040::/44", "16509"}, + {"2610:a1:1072::/48", "397220"}, + {"2a02:b48:8106::/44", "39572"}, + {"2a02:26f7:e448::/48", "36183"}, + {"2a05:3580::/42", "35807"}, + {"2001:559:c4bd::/46", "33287"}, + {"240a:a465::/32", "143775"}, + {"2600:380:cc80::/38", "7018"}, + {"2602:fd23:1::/48", "62788"}, + {"2a00:90c0::/38", "197745"}, + {"2a03:3e80::/32", "50372"}, + {"2001:4868:906::/33", "701"}, + {"2402:800:7940::/42", "7552"}, + {"2a09:4c0::/39", "58057"}, + {"2402:800:54ee::/39", "7552"}, + {"240a:a027::/32", "142689"}, + {"240a:a0b2::/32", "142828"}, + {"240a:a7d4::/32", "144654"}, + {"2804:88:4000::/36", "28135"}, + {"2804:674::/32", "28328"}, + {"2a00:ece0::/32", "6718"}, + {"2a0b:f800::/32", "39251"}, + {"2a11:6980::/29", "204790"}, + {"2401:1d40:1::/40", "59019"}, + {"2600:5c01:2c0c::/48", "11351"}, + {"2602:fddb::/36", "397460"}, + {"2a07:f600:4058::/48", "34567"}, + {"2001:ded:8000::/48", "23726"}, + {"2408:8026:100::/38", "17621"}, + {"240e:3be:f100::/37", "134775"}, + {"2a01:c9c0:8016::/48", "2285"}, + {"2a0b:2a41::/29", "29014"}, + {"2a0d:1a40:faf::/48", "202313"}, + {"240e:983:1f00::/22", "4134"}, + {"2600:4040:8000::/31", "701"}, + {"2804:3af4::/32", "266120"}, + {"2804:7d90::/47", "271569"}, + {"2a01:8840:e2::/45", "12041"}, + {"2a0b:4d07:401::/48", "44239"}, + {"2605:6c80:c::/48", "40244"}, + {"2804:7f14::/32", "271665"}, + {"2001:559:8636::/48", "7922"}, + {"240b:4005::/32", "45102"}, + {"2600:1406:2a01::/39", "20940"}, + {"2604:d600:1563::/44", "32098"}, + {"2610:20:8e00::/44", "3477"}, + {"2804:5a18::/32", "268748"}, + {"2a01:8840:29::/48", "207266"}, + {"2001:559:263::/48", "33657"}, + {"2402:800:3a63::/43", "7552"}, + {"240a:a188::/32", "143042"}, + {"2620:91:a000::/48", "32170"}, + {"2001:250:223::/48", "24349"}, + {"240e:980:2200::/40", "58466"}, + {"2a02:26f7:c588::/48", "36183"}, + {"2001:559:8057::/44", "7922"}, + {"2001:559:84f0::/48", "7016"}, + {"2001:4998:ef6c::/48", "36646"}, + {"2409:804c:2100::/35", "9808"}, + {"240e:438:8640::/36", "4134"}, + {"2604:c740::/32", "10392"}, + {"2a0e:b107:320::/44", "207756"}, + {"2001:559:849d::/46", "7015"}, + {"2603:f5e0::/27", "397165"}, + {"2620:54:2000::/48", "396997"}, + {"2a05:b0c6:5001::/48", "211358"}, + {"2600:6800::/24", "7155"}, + {"2804:8208::/32", "272494"}, + {"2a01:50c0:1000::/36", "12843"}, + {"2001:559:c16f::/48", "33657"}, + {"2401:d800:7de0::/38", "7552"}, + {"240e:980:8600::/40", "136195"}, + {"2600:8807:9e00::/34", "22773"}, + {"2a00:7460::/32", "24833"}, + {"2a0e:aa07:e100::/45", "142025"}, + {"2400:6600::/32", "9812"}, + {"2408:8459:1830::/41", "17622"}, + {"240a:a530::/32", "143978"}, + {"240a:a963::/32", "145053"}, + {"2607:6480:8000::/35", "54112"}, + {"2804:3764:fffd::/46", "266409"}, + {"2a02:26f7:f1c9::/42", "20940"}, + {"2a05:be80::/29", "12637"}, + {"2404:bf40:e703::/40", "139084"}, + {"240a:a928::/32", "144994"}, + {"240e:87c::/40", "137692"}, + {"2804:2de8::/32", "265311"}, + {"2a06:6540:1000::/48", "34893"}, + {"2a0e:97c0:68e::/47", "49953"}, + {"2001:678:fb4::/48", "50873"}, + {"2001:1498::/32", "12956"}, + {"2400:89c0:2100::/48", "37936"}, + {"2408:8459:a610::/42", "17623"}, + {"2620:c9::/48", "701"}, + {"2804:2364::/32", "264159"}, + {"2401:7500:fffa::/45", "133296"}, + {"2409:8087:3009::/45", "9808"}, + {"2a02:2698:8009::/38", "41682"}, + {"2001:559:424::/48", "33657"}, + {"2800:160:1ee1::/44", "14259"}, + {"2804:638::/32", "28178"}, + {"2001:559:34::/48", "7015"}, + {"2001:559:c36d::/48", "33667"}, + {"240e:44d:180::/41", "4134"}, + {"240e:45c:200::/40", "131285"}, + {"2606:43c0::/32", "3801"}, + {"2610:18:8105::/36", "2828"}, + {"2806:230:400c::/48", "265594"}, + {"2a02:938::/29", "8608"}, + {"2a07:54c0::/29", "61138"}, + {"240c:ca06::/32", "23910"}, + {"240e:108:11e0::/48", "58466"}, + {"2600:1406:a001::/38", "20940"}, + {"2001:559:806a::/48", "7922"}, + {"2001:6d0:ffff::/48", "5568"}, + {"2001:df0:71::/48", "45665"}, + {"2402:9900:d11::/48", "27435"}, + {"2600:1406:a401::/36", "20940"}, + {"2a10:482::/29", "4785"}, + {"2001:579:2483::/38", "22773"}, + {"2407:9000::/32", "24130"}, + {"2604:d600:162f::/43", "32098"}, + {"2800:190:7::/44", "11664"}, + {"2804:24c0::/32", "262290"}, + {"2804:5ae0::/32", "268802"}, + {"2a01:9d80::/32", "197883"}, + {"2001:67c:930::/48", "14907"}, + {"2001:da8:e019::/46", "23910"}, + {"2401:d800:d3a0::/41", "7552"}, + {"2605:7fc0::/32", "395846"}, + {"2a12:b380::/29", "210412"}, + {"2620:129:9000::/48", "17216"}, + {"2602:808:8000::/40", "3763"}, + {"2804:3550::/32", "266280"}, + {"2a02:2298::/36", "15544"}, + {"2a07:e00:ff::/48", "210083"}, + {"2001:559:c1f7::/48", "33287"}, + {"2804:7c8:2000::/33", "262323"}, + {"2a0d:8340::/32", "205125"}, + {"240a:adc9::/32", "146179"}, + {"2620:108:4022::/48", "1313"}, + {"2001:678:860::/48", "212466"}, + {"2001:da8:e015::/48", "23910"}, + {"2602:fba8:f00::/48", "14618"}, + {"2804:7910::/32", "271282"}, + {"2a02:c600::/29", "47317"}, + {"2001:1260:105::/44", "13591"}, + {"2620:136:f001::/48", "11153"}, + {"2804:145c:8c90::/39", "263327"}, + {"2a07:8084::/31", "62296"}, + {"2a0e:1c80:11::/46", "1299"}, + {"2602:fff6:4::/48", "20473"}, + {"2620:0:cf0::/48", "6456"}, + {"2a00:86c0:2092::/45", "2906"}, + {"2a09:d9c0::/32", "207568"}, + {"2603:90f5:e::/48", "20115"}, + {"2604:e840:2::/44", "396965"}, + {"2a03:a900::/32", "48926"}, + {"2c0f:f450::/32", "37302"}, + {"2400:cb00:230::/44", "13335"}, + {"2409:8c85:2000::/43", "56046"}, + {"240a:a972::/32", "145068"}, + {"2803:6900:597::/44", "52423"}, + {"2806:283::/35", "265515"}, + {"2a03:8980::/32", "16232"}, + {"2a09:9180:ecfd::/48", "42081"}, + {"2409:4056:1000::/34", "55836"}, + {"2606:9500:200::/47", "393423"}, + {"2804:1cc4:5000::/32", "61674"}, + {"2001:253:119::/48", "142085"}, + {"2406:c500:fff3::/48", "45671"}, + {"240e:3b1:c000::/37", "140315"}, + {"2602:ff62:106::/42", "61317"}, + {"2001:250:83b::/48", "138182"}, + {"2001:559:1cb::/48", "20214"}, + {"240e:3b4:6400::/35", "140312"}, + {"2804:93c:1031::/40", "52878"}, + {"2806:3ad::/32", "265586"}, + {"2001:67c:28e8::/48", "199768"}, + {"240e:67d:8400::/38", "140329"}, + {"2605:f540::/32", "398712"}, + {"2801:80:1bb0::/48", "266495"}, + {"2804:1218::/36", "263456"}, + {"2804:69b0:10::/42", "270285"}, + {"2001:559:8443::/48", "33660"}, + {"2001:559:c46b::/48", "33490"}, + {"2409:8b4c::/30", "9808"}, + {"2605:4f00::/32", "26413"}, + {"2806:2f0:50e1::/46", "17072"}, + {"2a02:26f0:dc00::/48", "34164"}, + {"2a06:afc0::/48", "41011"}, + {"2a0e:6540:d0d0::/48", "208364"}, + {"2406:c500:fffd::/48", "7545"}, + {"2620:45:2000::/48", "577"}, + {"2a02:26f7:bbc9::/42", "20940"}, + {"2a07:fc00::/48", "39378"}, + {"2a0d:2280::/29", "51815"}, + {"2605:5580::/32", "40805"}, + {"2001:559:811f::/48", "33652"}, + {"2001:df5:3580::/48", "136697"}, + {"2402:9500:a01::/39", "55720"}, + {"240a:a2a7::/32", "143329"}, + {"240e:ff:c007::/48", "136198"}, + {"240a:ad8d::/32", "146119"}, + {"2a02:26f7:f988::/48", "36183"}, + {"2001:559:52b::/48", "7922"}, + {"2402:8700::/41", "58979"}, + {"2620:0:f02::/41", "6431"}, + {"2620:11f:1000::/48", "27421"}, + {"2a00:f440::/44", "48347"}, + {"2a07:c180::/29", "64442"}, + {"2607:b080:301::/32", "29838"}, + {"2a02:748:a000::/33", "29802"}, + {"2c0f:f4f8::/32", "328471"}, + {"2404:fc00:20::/46", "45910"}, + {"2409:8057:302a::/43", "56040"}, + {"2620:f8:4000::/48", "1767"}, + {"2800:600:303::/37", "52323"}, + {"2803:4300::/32", "263759"}, + {"2804:7914::/32", "271283"}, + {"2001:978:901::/46", "174"}, + {"2403:57c0::/32", "133815"}, + {"2409:8000:2900::/40", "9808"}, + {"2804:23b0:b800::/33", "262645"}, + {"2a02:26f7:da09::/46", "20940"}, + {"2a0d:b880::/29", "39392"}, + {"2001:df0:9200::/48", "133384"}, + {"2408:892c::/32", "4837"}, + {"240e:41::/37", "17897"}, + {"2a02:26f7:e645::/46", "20940"}, + {"2001:250:22f::/43", "23910"}, + {"2001:250:3807::/48", "23910"}, + {"240e:9b:f003::/45", "140246"}, + {"2806:2f0:8123::/41", "17072"}, + {"2a00:e200:101::/46", "41313"}, + {"2a02:ac80:2001::/35", "25145"}, + {"2a03:42e0::/48", "47105"}, + {"2a07:7200::/47", "34197"}, + {"2a10:e300:26::/48", "44854"}, + {"2001:250:301c::/40", "24357"}, + {"2001:559:83e1::/48", "7922"}, + {"2001:e68:2:100::/34", "4788"}, + {"2408:8956:5900::/40", "17816"}, + {"2603:2000::/19", "7922"}, + {"2a0b:a40::/29", "57684"}, + {"2001:978:1406::/36", "174"}, + {"2001:1af0::/32", "13046"}, + {"240e:108:43::/48", "63835"}, + {"240e:874:360::/30", "4134"}, + {"2604:b180:500::/44", "18601"}, + {"2a0e:3840:415::/48", "40676"}, + {"2001:918:ff45::/43", "3303"}, + {"2001:430::/32", "7332"}, + {"2401:4900:2100::/45", "45609"}, + {"2408:8459:8230::/41", "17622"}, + {"2804:25e4:705::/32", "61573"}, + {"2a0b:eb80::/29", "38946"}, + {"2a0c:f00::14:0/29", "56485"}, + {"2620:2b:a000::/48", "394118"}, + {"2a01:440::/37", "29551"}, + {"2a03:2880:f05d::/46", "32934"}, + {"2a09:bac0:336::/47", "13335"}, + {"2a0e:6540:a32::/48", "208364"}, + {"2600:6c38:840::/44", "20115"}, + {"2001:67c:750::/48", "206170"}, + {"2804:1f2c::/32", "265478"}, + {"2a07:6840::/29", "29119"}, + {"2001:67c:10::/48", "60149"}, + {"2405:6e00:2680::/44", "18291"}, + {"2801:80:19d0::/48", "265375"}, + {"2804:1810:f400::/36", "263262"}, + {"2a02:26f7:f400::/48", "36183"}, + {"2001:4ba8::/29", "12570"}, + {"2402:800:fc10::/42", "7552"}, + {"2620:9c:a000::/48", "16509"}, + {"2620:11a:a00b::/43", "43515"}, + {"2001:1b70:82::/48", "29518"}, + {"2403:71c0:8000::/48", "43959"}, + {"2409:8a21::/29", "9808"}, + {"240a:af09::/32", "146499"}, + {"2600:370f:7424::/41", "32261"}, + {"2804:145c:c630::/36", "263327"}, + {"2001:559:81d1::/46", "20214"}, + {"2800:300:64e0::/43", "27986"}, + {"2806:230:301c::/48", "265594"}, + {"2a02:ee80:4192::/44", "3573"}, + {"2001:678:158::/48", "202886"}, + {"2001:67c:2ae8::/48", "58329"}, + {"2606:5180::/32", "7992"}, + {"2620:149:a18::/48", "6185"}, + {"2a06:a005:c::/46", "208753"}, + {"2001:559:850e::/48", "7015"}, + {"2401:4900:35f0::/38", "45609"}, + {"2408:862a:a800::/33", "4837"}, + {"2600:140a:1::/35", "20940"}, + {"2605:2180::/36", "12422"}, + {"2806:288:4050::/48", "28469"}, + {"2a01:300:10:6::/41", "9009"}, + {"2a02:3e8::/32", "43646"}, + {"2a05:f507:43::/45", "13443"}, + {"2001:559:7f0::/48", "7015"}, + {"2001:559:84d0::/48", "7725"}, + {"240a:a80d::/32", "144711"}, + {"240a:a9de::/32", "145176"}, + {"2600:9000:1128::/46", "16509"}, + {"2606:cd00:11::/32", "40845"}, + {"2803:d20::/32", "265684"}, + {"2001:678:424::/48", "43442"}, + {"2409:8055:39::/46", "56040"}, + {"2600:9000:2310::/46", "16509"}, + {"2603:c001:2a10::/37", "31898"}, + {"2620:9f::/48", "30021"}, + {"2001:250:82f::/43", "23910"}, + {"2603:90bb::/32", "11426"}, + {"2a02:26f7:98::/48", "36183"}, + {"2a09:bac0:113::/45", "13335"}, + {"2400:ca02:f01f::/40", "23688"}, + {"2606:1f80:f000::/36", "13414"}, + {"2607:f738::/39", "17184"}, + {"2804:3364::/37", "265393"}, + {"2001:67c:590::/48", "206809"}, + {"2001:67c:1010::/47", "8674"}, + {"2a05:6200:72::/48", "25369"}, + {"2001:1248:9658::/47", "11172"}, + {"2400:7400:e026::/48", "38044"}, + {"2804:49c:13::/48", "7162"}, + {"2a00:5ae0:100::/48", "198638"}, + {"2a02:2892:40::/48", "51185"}, + {"2a02:ee80:41bd::/48", "21433"}, + {"2a09:fbc0::/32", "205718"}, + {"2001:559:c040::/48", "33490"}, + {"2401:4900:880::/44", "45609"}, + {"2804:4094::/32", "265968"}, + {"2a05:7dc2:3000::/33", "51324"}, + {"2001:4478:1400::/40", "4802"}, + {"2403:cfc0:1004::/48", "9678"}, + {"240e:5:8000::/30", "4134"}, + {"2a01:8640:3::/48", "201525"}, + {"2a02:27b8:2002::/45", "49278"}, + {"2001:559:13d::/48", "22909"}, + {"2001:678:4a8::/48", "35062"}, + {"2401:d800:de10::/42", "7552"}, + {"2402:fbc0:10::/32", "134014"}, + {"2409:8010:2100::/36", "9808"}, + {"2a02:26f7:cc48::/48", "36183"}, + {"2a04:4e40:a800::/48", "54113"}, + {"2a06:aa40:cadc::/29", "51944"}, + {"2a11:7b80::/29", "57866"}, + {"2401:73c0::/47", "136792"}, + {"2402:800:9447::/43", "7552"}, + {"240e:d6:2000::/33", "4134"}, + {"2a0d:e4c5::/30", "208861"}, + {"2001:559:8152::/48", "33657"}, + {"2001:7a8:802::/44", "13193"}, + {"240a:a590::/32", "144074"}, + {"240a:affa::/32", "146740"}, + {"2606:7b00::/34", "10538"}, + {"2a02:bf0:20::/44", "25106"}, + {"2a03:6400:40::/47", "11054"}, + {"2001:559:716::/48", "7922"}, + {"2001:44c8:a000::/39", "38444"}, + {"2402:db40::/47", "131486"}, + {"2001:16b8:7a00::/32", "8881"}, + {"2401:d800:900::/42", "7552"}, + {"2405:b40:32::/41", "55674"}, + {"240a:a78a::/32", "144580"}, + {"240e:3b8:6400::/35", "140312"}, + {"2620:3a:c000::/48", "21976"}, + {"2803:1500::/32", "27800"}, + {"2804:7a00::/32", "271341"}, + {"2a09:bac0:145::/48", "13335"}, + {"2001:1520:3::/48", "34011"}, + {"240e:3bb:ac00::/35", "4134"}, + {"2804:39c:1000::/33", "28329"}, + {"2a01:699::/32", "25084"}, + {"2001:67c:2b68::/48", "204444"}, + {"2602:fd92:e00::/40", "39618"}, + {"2804:14d:1600::/40", "28573"}, + {"2a02:a0::/32", "8426"}, + {"2a02:888:48::/47", "48695"}, + {"2a02:26f7:95::/48", "20940"}, + {"2001:1bb8::/32", "31122"}, + {"2600:6c3a:1b::/45", "20115"}, + {"2600:a003::/29", "22450"}, + {"2602:fe06::/36", "397672"}, + {"2804:670c::/32", "269600"}, + {"2a05:9400::/29", "204957"}, + {"2001:678:9b4::/48", "213210"}, + {"240a:a801::/32", "144699"}, + {"240a:af60::/32", "146586"}, + {"2800:480:ff52::/48", "14080"}, + {"2a02:2888::/32", "8265"}, + {"2001:250:1407::/48", "23910"}, + {"2c0f:fec8:49::/38", "37197"}, + {"2402:800:fdc0::/42", "7552"}, + {"240a:a0a0::/32", "142810"}, + {"2a02:ef80::/48", "16509"}, + {"2001:559:830c::/48", "33657"}, + {"2408:8459:f600::/40", "17816"}, + {"2804:4e3c::/32", "268248"}, + {"2a02:26f7:ba88::/48", "36183"}, + {"2401:4900:5230::/41", "45609"}, + {"2c0f:fda0::/32", "37525"}, + {"240e:438:7e20::/43", "140647"}, + {"2602:febe:301::/36", "30405"}, + {"2603:7033::/32", "12271"}, + {"2a00:bdc0::/35", "47541"}, + {"2001:c20:c832::/45", "3758"}, + {"2001:559:55f::/42", "7016"}, + {"2402:e280:2412::/40", "134674"}, + {"2607:f3d0::/32", "27400"}, + {"2800:160:129a::/42", "14259"}, + {"2800:370:4000::/40", "28006"}, + {"2a00:1f40::/29", "42864"}, + {"2a0c:9f00::/48", "47890"}, + {"2001:559:2d0::/48", "33650"}, + {"2001:559:806d::/48", "33287"}, + {"2001:df1:1080::/48", "136977"}, + {"240a:a557::/32", "144017"}, + {"2600:6c20:262::/36", "20115"}, + {"2604:5880:2::/45", "10980"}, + {"2603:f920::/25", "397165"}, + {"2800:160:120d::/43", "14259"}, + {"2a02:1320::/32", "34409"}, + {"2a0a:8d80:1::/48", "200019"}, + {"240a:a03d::/32", "142711"}, + {"240a:a701::/32", "144443"}, + {"2610:b0:4030::/47", "701"}, + {"2001:df1:f080::/48", "139776"}, + {"2404:bf40:e001::/48", "2764"}, + {"2607:9e80:1181::/38", "397068"}, + {"2620:f0:c00a::/48", "14148"}, + {"2a02:670::/32", "47217"}, + {"2a0d:2406:510::/46", "39753"}, + {"2001:559:4ca::/47", "33287"}, + {"2407:e3c0::/48", "38732"}, + {"2400:39a0::/48", "63739"}, + {"2400:6280:129::/46", "132280"}, + {"2400:a980:1400::/40", "133515"}, + {"2402:800:5939::/41", "7552"}, + {"2600:6c10:182::/45", "20115"}, + {"2600:6c10:f402::/45", "20115"}, + {"2620:126:7002::/48", "394559"}, + {"2804:5f74::/32", "269100"}, + {"2a00:1218::/32", "34772"}, + {"2001:559:13c::/48", "33667"}, + {"2001:559:821a::/48", "20214"}, + {"2001:559:c1be::/48", "33652"}, + {"2001:b08:a::/48", "29147"}, + {"2600:6c20:85b::/45", "20115"}, + {"2804:5ae4::/32", "268803"}, + {"2001:559:1f5::/46", "33652"}, + {"2001:559:80f1::/48", "33287"}, + {"2001:df0:41f::/48", "133014"}, + {"2001:ee0:9940::/38", "45899"}, + {"2409:806a:1a::/40", "9808"}, + {"2804:cdc:2040::/32", "52565"}, + {"2a00:f280::/32", "206288"}, + {"2402:3a80:1a6f::/40", "38266"}, + {"2409:8a10::/34", "9808"}, + {"240e:44d:5540::/42", "140347"}, + {"2409:8c00:7840::/48", "56048"}, + {"240a:ad59::/32", "146067"}, + {"2804:4fe0::/32", "268355"}, + {"2a03:f80:ed15::/46", "57169"}, + {"2001:df7:9300::/47", "134392"}, + {"2001:e60:d110::/38", "4766"}, + {"2408:8957::/40", "17622"}, + {"2600:1488:6181::/43", "20940"}, + {"2801:1d2::/44", "18747"}, + {"2803:e880:8112::/45", "52468"}, + {"2a00:1728:21::/46", "34224"}, + {"2a03:2480:8010::/44", "200107"}, + {"2a05:93c6::/31", "7979"}, + {"240a:a877::/32", "144817"}, + {"2600:6:ff44::/42", "1239"}, + {"2606:b00::/32", "15305"}, + {"2a09:4c0:5e1::/36", "58057"}, + {"2401:d800:23b0::/41", "7552"}, + {"2402:800:b3a0::/41", "7552"}, + {"2800:bf0:172::/45", "27947"}, + {"240a:a3cf::/32", "143625"}, + {"2800:190::/48", "11664"}, + {"2806:2f0:9341::/46", "17072"}, + {"2001:500:1::/48", "1508"}, + {"2001:559:8409::/48", "7922"}, + {"2403:31c0::/32", "137376"}, + {"2408:84f3:d810::/42", "134543"}, + {"2801:106::/48", "19429"}, + {"2405:4cc1:300::/40", "55891"}, + {"2407:6dc0::/32", "140944"}, + {"2600:1400:5::/48", "35994"}, + {"2001:550:4f02::/35", "174"}, + {"2400:7fc0:2a0::/44", "55960"}, + {"240a:abf9::/32", "145715"}, + {"2a02:26f7:c1c4::/48", "36183"}, + {"2a02:ae00::/32", "16125"}, + {"2402:800:bf90::/42", "7552"}, + {"2620:138:3008::/48", "11251"}, + {"2804:6ae4::/32", "270364"}, + {"2a02:16d8::/39", "5518"}, + {"2a03:afe2::/32", "51392"}, + {"2402:f200::/32", "18196"}, + {"2405:ec00:1002::/39", "23955"}, + {"2600:1480:2801::/37", "20940"}, + {"2a09:6ec0::/29", "197706"}, + {"2001:978:1c01::/39", "174"}, + {"2001:1b28:406::/38", "8728"}, + {"240a:ad19::/32", "146003"}, + {"240e:983:1e01::/48", "134764"}, + {"2a02:26f7:ef04::/48", "36183"}, + {"2a0b:b87:ff15::/48", "210614"}, + {"2a10:a00::/32", "209208"}, + {"2001:559:85ef::/48", "7015"}, + {"2001:1a60::/32", "2594"}, + {"2405:7040:6001::/48", "17621"}, + {"240a:a1a5::/32", "143071"}, + {"240a:a591::/32", "144075"}, + {"2602:fed2:4000::/36", "53356"}, + {"2804:4b98:e000::/35", "267317"}, + {"2a0d:2902:caff::/48", "204185"}, + {"2001:559:87da::/48", "33489"}, + {"2001:678:54::/48", "57382"}, + {"2001:1978:1500::/36", "13768"}, + {"240a:a852::/32", "144780"}, + {"2804:4540::/32", "266914"}, + {"2804:5270::/32", "268518"}, + {"2804:8040::/32", "271739"}, + {"2600:1004:d160::/34", "22394"}, + {"2602:ff6e:19::/36", "63202"}, + {"2a0f:31c0::/29", "37405"}, + {"2401:d800:be60::/40", "7552"}, + {"2606:f900:7608::/32", "812"}, + {"2803:d6c0::/48", "265698"}, + {"2a0f:7940::/29", "51262"}, + {"2001:44b8:401::/35", "4739"}, + {"2001:4de0:2::/47", "34343"}, + {"2800:160:18db::/45", "14259"}, + {"2804:6ea0:4030::/32", "270609"}, + {"2a06:ec00::/29", "553"}, + {"240a:a22d::/32", "143207"}, + {"2603:c001:2610::/36", "31898"}, + {"2600:9000:2388::/47", "16509"}, + {"2800:160:1116::/44", "14259"}, + {"2804:5200::/32", "268489"}, + {"2806:2f0:2101::/48", "22884"}, + {"2a02:26f7:b8cd::/42", "20940"}, + {"2a03:b500:4000::/32", "41135"}, + {"2a11:7e02::/32", "52000"}, + {"2001:559:83fd::/46", "7016"}, + {"240e:84c::/44", "140345"}, + {"2804:eb4::/37", "61890"}, + {"2001:7f8:2a::/48", "13041"}, + {"2401:200::/32", "17666"}, + {"240a:aa79::/32", "145331"}, + {"2a0c:7e40:7bb1::/48", "20473"}, + {"2402:800:54d3::/44", "7552"}, + {"2408:8459:4210::/42", "17623"}, + {"2a0a:e940::/29", "207543"}, + {"240a:aa35::/32", "145263"}, + {"2804:7030::/32", "270711"}, + {"2a05:7e80::/30", "50009"}, + {"2a0f:d300::/29", "47787"}, + {"2001:fe8:10::/47", "24435"}, + {"240a:a173::/32", "143021"}, + {"2602:fe3a:2::/48", "20119"}, + {"2620:13c:a000::/48", "19367"}, + {"2800:160:1d13::/42", "14259"}, + {"2801:80:b00::/48", "61789"}, + {"2804:5360::/32", "268580"}, + {"2804:5520::/32", "268691"}, + {"2a02:26f7:d54d::/46", "20940"}, + {"2401:d800:2ad0::/42", "7552"}, + {"240e:438:5840::/38", "4134"}, + {"2607:dc80::/32", "64262"}, + {"2804:2a40::/32", "264067"}, + {"2a07:6cc0:60::/48", "61098"}, + {"2001:559:113::/48", "7922"}, + {"2403:43c0::/32", "137990"}, + {"240a:ab44::/32", "145534"}, + {"2604:b980::/32", "47103"}, + {"2a07:9944:1b::/45", "40676"}, + {"240e:267:6000::/38", "140334"}, + {"2600:c08::/34", "10913"}, + {"2a02:ff0:1400::/40", "12735"}, + {"2a02:26f7:d151::/46", "20940"}, + {"2001:559:80b7::/48", "7922"}, + {"2406:7400:60::/46", "24309"}, + {"2804:43f4:70::/40", "267601"}, + {"2a0e:b107:12d4::/46", "211358"}, + {"2405:6480::/32", "135425"}, + {"2406:5e00::/47", "38456"}, + {"2a00:10a0:6::/48", "199234"}, + {"2a0e:b107:1220::/44", "211479"}, + {"240a:a143::/32", "142973"}, + {"2600:370f:70ce::/39", "32261"}, + {"2602:fd92:700::/40", "174"}, + {"2804:b34::/32", "52751"}, + {"2804:6808::/35", "269666"}, + {"2a00:1b40::/32", "47777"}, + {"2001:67c:12c8::/48", "43028"}, + {"2001:c38:9012::/47", "9931"}, + {"2600:140f:4201::/37", "20940"}, + {"2607:fcc0::/33", "36483"}, + {"2803:9800:a8ce::/47", "11664"}, + {"2804:a3c::/32", "53054"}, + {"2a02:26f7:8::/48", "36183"}, + {"2a02:26f7:f704::/48", "36183"}, + {"2a0b:7f00::/29", "44489"}, + {"2a10:4880::/29", "204802"}, + {"240a:afd7::/32", "146705"}, + {"2600:9000:112e::/43", "16509"}, + {"2806:2f0:3043::/43", "17072"}, + {"2400:81c0::/32", "17804"}, + {"240a:af54::/32", "146574"}, + {"2602:80a:2001::/48", "14618"}, + {"2001:559:8766::/48", "7016"}, + {"2408:875c::/44", "140886"}, + {"240e:3b2::/35", "134773"}, + {"2606:2980:1000::/40", "26344"}, + {"2804:23ec::/32", "21574"}, + {"2806:370:1010::/44", "28403"}, + {"2a0a:1dc0::/30", "42994"}, + {"2001:559:c08b::/48", "33491"}, + {"2001:67c:1288::/48", "29560"}, + {"2404:8000:102b::/45", "17451"}, + {"2407:96c0::/32", "140158"}, + {"2605:8900:3000::/36", "8100"}, + {"2620:7d:c000::/48", "4190"}, + {"2a05:3b80::/29", "33915"}, + {"2c0f:f9e8::/32", "37497"}, + {"240a:a291::/32", "143307"}, + {"2600:6c3a:848::/37", "20115"}, + {"2804:7a3c::/39", "271357"}, + {"2a02:e980:28::/45", "19551"}, + {"2a0e:3500::/29", "56456"}, + {"2001:67c:21fc::/48", "43922"}, + {"2a01:b740:a1d::/48", "714"}, + {"2a02:26f0:da00::/48", "34164"}, + {"2a12:4942::/31", "211398"}, + {"2c0f:f428::/32", "30844"}, + {"2001:678:1f4::/48", "50004"}, + {"2001:67c:2588::/48", "8447"}, + {"240a:ab5b::/32", "145557"}, + {"2603:c011:8000::/36", "31898"}, + {"2607:fb10:32::/34", "2906"}, + {"2a06:3ac0::/29", "196945"}, + {"2001:559:c409::/48", "7015"}, + {"2409:8008:1100::/36", "24547"}, + {"2600:180a::/35", "16552"}, + {"2620:11d:d000::/40", "18995"}, + {"2a03:5c0::/32", "199254"}, + {"2a03:9fc0:1::/46", "200820"}, + {"240a:a8b9::/32", "144883"}, + {"2602:808:4000::/48", "398960"}, + {"2804:21cc::/32", "264574"}, + {"2804:7ae8::/32", "271399"}, + {"2001:559:182::/48", "7922"}, + {"2001:730::/29", "6830"}, + {"2401:4900:1b10::/42", "45609"}, + {"2408:8957:f6c0::/36", "17816"}, + {"2001:559:397::/44", "7922"}, + {"2001:da8:e803::/48", "24368"}, + {"2001:14f7:50::/32", "12355"}, + {"2408:8456:3600::/41", "17623"}, + {"240e:967:e400::/39", "133775"}, + {"2804:2b08::/32", "61578"}, + {"2806:230:2037::/48", "11888"}, + {"2806:2f0:50a3::/41", "17072"}, + {"2001:df2:f300::/48", "136699"}, + {"2408:8456:6400::/42", "17622"}, + {"240a:aa37::/32", "145265"}, + {"2602:feda:b8f::/48", "205923"}, + {"2610:20:5002::/48", "5744"}, + {"2a02:26f7:de81::/46", "20940"}, + {"2a05:ef40::/29", "200428"}, + {"2400:8b00:980::/42", "45727"}, + {"2409:8c28:6d08::/35", "56041"}, + {"2400:3dc0:301::/37", "134371"}, + {"2402:800:9a7f::/40", "7552"}, + {"2607:f5a0:214::/36", "17048"}, + {"2620:138:6000::/48", "36710"}, + {"2001:559:77e::/48", "20214"}, + {"2606:2000:12::/45", "1616"}, + {"2a01:8840:4d::/48", "207266"}, + {"2a02:148::/29", "1680"}, + {"2a0b:b580:ffff::/31", "43304"}, + {"2a0e:c887::/44", "208759"}, + {"2406:3000:7::/44", "4657"}, + {"240e:438:9a20::/43", "140647"}, + {"2a00:8aa0::/32", "62059"}, + {"2a0f:af00::/32", "208201"}, + {"2400:e3c0::/32", "45267"}, + {"240a:af25::/32", "146527"}, + {"2804:427c::/32", "267503"}, + {"2804:61b4::/32", "269251"}, + {"2a02:26f0:fc::/47", "20940"}, + {"2a02:59e0::/48", "60118"}, + {"2001:559:c0c8::/48", "7922"}, + {"2604:e500::/32", "6461"}, + {"2a02:26f7:d188::/48", "36183"}, + {"2001:7f8:107::/48", "211947"}, + {"2606:2f80::/32", "395075"}, + {"2801:19:e000::/48", "61499"}, + {"2804:2f3c:2030::/32", "264879"}, + {"2402:800:6249::/42", "7552"}, + {"2404:e8c0::/32", "139090"}, + {"2408:8456:5840::/39", "17816"}, + {"2603:90f2::/32", "7843"}, + {"2804:7cc8::/32", "271518"}, + {"2001:559:c457::/48", "7015"}, + {"2001:67c:4c8::/48", "50034"}, + {"240e:3be:1800::/34", "4134"}, + {"240e:924:4000::/36", "132153"}, + {"2803:d280::/32", "264733"}, + {"2a03:5640:f143::/48", "14618"}, + {"2a10:3780::/29", "206238"}, + {"2404:3d00:4174::/44", "3573"}, + {"2603:f3f8::/29", "396356"}, + {"2606:2800:51f::/42", "15133"}, + {"2606:2800:5062::/45", "15133"}, + {"2a05:544::/31", "206766"}, + {"2a0a:d6c0:9145::/48", "210596"}, + {"2001:4c8:1009::/45", "15290"}, + {"2401:ea80::/32", "133930"}, + {"2607:f010::/32", "52"}, + {"2a0f:140::/30", "62240"}, + {"2607:f6f0:2002::/40", "54588"}, + {"2001:2040::/32", "3301"}, + {"240e:580::/22", "4134"}, + {"2600:1480:e100::/37", "20940"}, + {"2602:fd9a:fff1::/44", "54613"}, + {"2a02:26f7:c34b::/48", "20940"}, + {"2a07:f7c7:ffff::/48", "39020"}, + {"2600:100d:b000::/42", "6167"}, + {"2803:ab00:92::/48", "23520"}, + {"2a0e:7b80::/32", "29014"}, + {"2001:550:a11::/46", "174"}, + {"2001:c20:489b::/45", "3758"}, + {"2604:d600:1270::/45", "32098"}, + {"2001:559:864a::/48", "33657"}, + {"2600:1404:fc01::/31", "20940"}, + {"2602:fd80:2::/36", "53612"}, + {"2804:6af0::/32", "270367"}, + {"240e:3ba:dc00::/34", "4134"}, + {"2a0f:b300:b300::/48", "208200"}, + {"2409:8915:9000::/39", "56044"}, + {"240a:a0a4::/32", "142814"}, + {"240e:874:300::/41", "140638"}, + {"2600:1003:b060::/40", "22394"}, + {"2a02:26f7:f708::/48", "36183"}, + {"2a0c:7a80::/29", "204782"}, + {"2620:0:2830::/48", "16876"}, + {"2001:678:828::/48", "24639"}, + {"2001:da8:7000::/45", "24363"}, + {"2407:3a40::/32", "58411"}, + {"2409:800b:2c05::/40", "24547"}, + {"2602:fe65:10::/41", "396872"}, + {"2607:fcf0:104::/32", "13445"}, + {"2804:1934::/32", "61778"}, + {"2a01:6ae0::/29", "62227"}, + {"2a02:26f7:d9c1::/46", "20940"}, + {"2401:d800:bb80::/42", "7552"}, + {"2402:3300:cac2::/48", "56300"}, + {"2001:dde::/48", "24082"}, + {"2405:6e00:640::/40", "133612"}, + {"240a:ac00::/32", "145722"}, + {"2a05:546::/32", "210352"}, + {"2a09:8580::/29", "43341"}, + {"2400:1f00:20::/48", "45769"}, + {"2406:6f40::/47", "141163"}, + {"2600:1415:3000::/48", "2914"}, + {"2602:fe05::/32", "54936"}, + {"2605:a140::/30", "40021"}, + {"2803:5e00::/40", "267765"}, + {"2804:ac4::/32", "52920"}, + {"2401:c900:1000::/38", "36351"}, + {"2607:3500::/48", "11228"}, + {"2607:fb10:2035::/41", "2906"}, + {"2607:fc58:1:30::/64", "13536"}, + {"2804:49c:4210::/48", "7162"}, + {"2804:1dc4::/32", "264392"}, + {"2a00:80a::/25", "1257"}, + {"2a01:6f60::/32", "62365"}, + {"2a0f:4640::/29", "200750"}, + {"2001:559:4f3::/48", "33657"}, + {"2001:579:f104::/42", "22773"}, + {"240e:965:1800::/34", "4134"}, + {"2600:1005:9100::/44", "6167"}, + {"2606:7d00:c002::/35", "23248"}, + {"2001:559:7cd::/48", "33657"}, + {"2001:559:8098::/48", "7016"}, + {"2001:67c:3e0::/48", "16089"}, + {"240a:a25b::/32", "143253"}, + {"240a:a5c3::/32", "144125"}, + {"2800:98:111b::/37", "14754"}, + {"2804:204:311::/46", "28186"}, + {"2a00:5740::/32", "56582"}, + {"2001:559:81bc::/48", "33491"}, + {"2404:6900::/34", "17819"}, + {"2600:1488:6341::/40", "20940"}, + {"2602:ffb0:ffd::/48", "32780"}, + {"2605:a401:8a3e::/39", "33363"}, + {"2605:f000::/32", "22442"}, + {"2606:5980::/32", "11071"}, + {"2600:1407:b001::/36", "20940"}, + {"2804:65b4::/32", "269509"}, + {"2001:4f8:9::/48", "30132"}, + {"2402:800:36ee::/39", "7552"}, + {"240e:37e:aa00::/39", "140330"}, + {"2605:5c0:40::/44", "26517"}, + {"2607:3200:3::/43", "11240"}, + {"2804:5f04::/32", "269071"}, + {"2401:4200::/32", "24195"}, + {"2409:805a:2902::/48", "9808"}, + {"2409:805b:2b05::/32", "56040"}, + {"2800:5f0:8001::/34", "22724"}, + {"2001:678:dd0::/48", "47753"}, + {"2401:d800:bce0::/39", "7552"}, + {"2a01:6480:14::/46", "29049"}, + {"2001:df0:8400::/48", "55741"}, + {"2403:300:2000::/32", "714"}, + {"2803:f4a0::/32", "266830"}, + {"2806:2a0:19::/46", "28548"}, + {"2409:8004:3031::/41", "24547"}, + {"2600:5c00:3aff::/39", "20001"}, + {"2620:12e:b000::/46", "7046"}, + {"2001:559:1ab::/48", "7922"}, + {"2001:67c:858::/48", "210775"}, + {"2800:200:b4b0::/41", "12252"}, + {"2804:1ca0:ff01::/46", "61666"}, + {"2a00:f28::/43", "15802"}, + {"2a0b:7500::/29", "206859"}, + {"2001:559:32e::/48", "7016"}, + {"2403:a200:a400::/33", "17428"}, + {"2406:5200::/32", "18067"}, + {"2408:8459:8210::/42", "17623"}, + {"2602:fc6e::/36", "399893"}, + {"2801:80:7b0::/48", "263613"}, + {"2804:4bb4:400::/35", "267325"}, + {"2408:8456:5040::/39", "17816"}, + {"240a:a46a::/32", "143780"}, + {"2602:fed2:7706::/48", "53356"}, + {"2610:a1:306c::/48", "12008"}, + {"2402:800:f570::/40", "7552"}, + {"2409:8924:7500::/38", "56046"}, + {"2600:9000:221e::/42", "16509"}, + {"2a06:ee05::/32", "25623"}, + {"2a0b:6dc0::/29", "5482"}, + {"2610:a1:3020::/48", "12008"}, + {"2803:380::/32", "263728"}, + {"2a0c:d80::/29", "200000"}, + {"2001:678:d34::/48", "59570"}, + {"2a0a:d340::/29", "56616"}, + {"2001:67c:13c8::/48", "42936"}, + {"2a02:26f7:e208::/48", "36183"}, + {"2a02:e0c7:ffff::/48", "9100"}, + {"2001:1248:57f2::/44", "11172"}, + {"2400:adcc:800::/39", "9541"}, + {"2402:800:fa20::/41", "7552"}, + {"240a:a695::/32", "144335"}, + {"2a01:8640:b::/48", "202015"}, + {"2a01:8cc0::/32", "59456"}, + {"2800:800:620::/44", "26611"}, + {"2800:bf0:80c7::/43", "52257"}, + {"2a01:d0:318::/45", "29632"}, + {"2a01:aa80::/48", "3301"}, + {"2a0d:e4c1::/32", "59504"}, + {"2a10:3cc0::/29", "204790"}, + {"2001:590:2005:200::/56", "20940"}, + {"2001:678:cfc::/48", "61400"}, + {"2001:1a68:21::/48", "57723"}, + {"2402:800:b410::/42", "7552"}, + {"2408:8456:cf40::/35", "17816"}, + {"2600:1403:b::/43", "20940"}, + {"2600:1419:18::/48", "20940"}, + {"2804:7970::/32", "271305"}, + {"2a00:10a0:b::/48", "51305"}, + {"2a02:26f7:b7c9::/42", "20940"}, + {"2001:559:76d::/48", "7725"}, + {"2400:e480:e::/32", "131588"}, + {"2605:2800:100::/47", "3354"}, + {"2804:14d:2::/40", "28573"}, + {"240a:a0e8::/32", "142882"}, + {"2a05:4700:200::/48", "43578"}, + {"2804:104c:2400::/40", "263629"}, + {"2a0a:5080::/29", "49865"}, + {"2405:db40::/32", "137987"}, + {"2602:ff96:11::/48", "8100"}, + {"2605:a404:cf4::/39", "33363"}, + {"2804:4734:3000::/32", "267038"}, + {"2804:4c38::/32", "267357"}, + {"2a07:b380::/29", "202604"}, + {"2a07:ba80::/29", "40970"}, + {"2001:df0:96::/48", "45770"}, + {"2406:5d40::/47", "141009"}, + {"2804:14d:5c5f::/42", "28573"}, + {"2a02:2308:21::/43", "29028"}, + {"2605:a000:40f::/38", "10796"}, + {"2607:f699::/32", "53999"}, + {"2803:ddc0::/32", "27855"}, + {"2804:1040::/33", "263626"}, + {"2804:1cc8::/32", "61675"}, + {"2001:250:7401::/44", "24371"}, + {"2804:30c:1400::/32", "28343"}, + {"2a02:850:ffe0::/48", "1921"}, + {"2402:3a80::/46", "38266"}, + {"2607:f8f0:e00::/40", "271"}, + {"2804:4784::/32", "267059"}, + {"2a02:26f7:eac4::/48", "36183"}, + {"2c0f:edd8::/32", "328114"}, + {"2001:4878:a136::/48", "12222"}, + {"240c:6:3::/48", "24445"}, + {"2607:f738:800::/41", "17184"}, + {"2a02:ee80:403a::/41", "3573"}, + {"2404:efc0:155::/48", "10122"}, + {"2408:8956:3e00::/40", "17622"}, + {"2408:8957:ed40::/40", "17816"}, + {"240a:a7fe::/32", "144696"}, + {"2804:aa8::/37", "52903"}, + {"2a03:7f20::/48", "8473"}, + {"2401:d800:d760::/40", "7552"}, + {"2408:862a::/32", "4837"}, + {"2804:321c::/32", "265056"}, + {"2804:5b58::/32", "268836"}, + {"2a01:270:e000::/46", "29657"}, + {"2a01:6780:2::/48", "24679"}, + {"2a0b:2040::/29", "559"}, + {"2001:438:fffd:13::/64", "20940"}, + {"2001:559:c094::/48", "33651"}, + {"2001:ee0:e200::/40", "45899"}, + {"2408:8956:b600::/40", "17622"}, + {"2408:8956:d6c0::/36", "17816"}, + {"2804:3494::/32", "265466"}, + {"2a03:b000:600::/36", "42695"}, + {"2a04:5ec7::/48", "62154"}, + {"2100:1900:5:2:2::1ba4/126", "3356"}, + {"2600:141b:2800::/48", "35994"}, + {"2606:ec00:a100::/40", "40328"}, + {"2a02:1c8:7::/48", "41704"}, + {"2001:559:406::/48", "7725"}, + {"2001:559:8191::/46", "33659"}, + {"2407:4cc0::/32", "134905"}, + {"2408:8456::/42", "17622"}, + {"240e:3b2:f700::/36", "4134"}, + {"2620:131:104c::/47", "26450"}, + {"2804:7b8::/32", "262315"}, + {"2a02:26f7:b604::/48", "36183"}, + {"2001:67c:2aa8::/48", "3330"}, + {"2403:9800:c021::/43", "4648"}, + {"2001:559:7a4::/48", "7015"}, + {"2001:559:83c0::/48", "33659"}, + {"2600:803:22d::/41", "701"}, + {"2602:fe43::/36", "397005"}, + {"2804:1c4::/32", "262744"}, + {"2a00:ab40:3001::/33", "41798"}, + {"2a0d:5600:a32::/48", "9009"}, + {"2a0f:64c0::/29", "31463"}, + {"2001:559:84c5::/48", "33287"}, + {"2405:c0:40::/48", "138881"}, + {"2a06:f2c0::/29", "202975"}, + {"2a11:f2c0::/48", "207960"}, + {"2406:7800::/32", "10101"}, + {"2a0c:b5c0::/29", "59909"}, + {"2a0e:8f02:f036::/48", "210915"}, + {"2001:dd8:8::/45", "4608"}, + {"2402:be80::/32", "131749"}, + {"2600:100a:b0e0::/43", "22394"}, + {"2600:8807:7a2::/41", "22773"}, + {"2804:669c:4080::/32", "269571"}, + {"2a02:26f7:c3d4::/48", "36183"}, + {"2405:8a00:2079::/40", "55824"}, + {"2800:160:c167::/34", "14259"}, + {"2804:1088::/33", "52913"}, + {"2804:3de8::/33", "266562"}, + {"2a00:4902::/32", "12390"}, + {"2a03:6400:20::/44", "11054"}, + {"2a0d:3842:1070::/48", "57629"}, + {"240a:a9f1::/32", "145195"}, + {"2803:2e60::/32", "267920"}, + {"2804:2d34::/32", "265266"}, + {"2a0a:8887:1::/48", "59922"}, + {"2a0e:fdc0::/29", "207375"}, + {"240a:a1bb::/32", "143093"}, + {"240e:3b6:f100::/37", "134775"}, + {"2602:ff25::/39", "394346"}, + {"2804:15dc::/32", "263415"}, + {"2001:559:80a4::/48", "33287"}, + {"2001:4998:194::/46", "26101"}, + {"2804:3b8:1e9::/43", "52965"}, + {"2a00:c560::/29", "62416"}, + {"2a00:d580:4900::/40", "16365"}, + {"240a:aff3::/32", "146733"}, + {"2804:adc::/32", "52927"}, + {"2a00:d240::/32", "25274"}, + {"2001:67c:23a8::/48", "50101"}, + {"2001:fd8:3330::/44", "4775"}, + {"2408:8956:ea00::/40", "17622"}, + {"2800:160:14d8::/42", "14259"}, + {"2804:3f70::/32", "265892"}, + {"2804:4794::/32", "267063"}, + {"2a0e:46c3:300::/40", "51745"}, + {"2001:1838:4200::/35", "23352"}, + {"2402:800:5a55::/42", "7552"}, + {"240a:aab2::/32", "145388"}, + {"240e:e3:8000::/33", "4812"}, + {"2603:fd00::/29", "63023"}, + {"2620:82:4000::/48", "22098"}, + {"2801:15:2800::/48", "270033"}, + {"2804:2fdc:8000::/36", "264917"}, + {"2806:310:2e::/43", "16960"}, + {"2a00:4580::/30", "3226"}, + {"2a03:1fe0::/32", "39509"}, + {"2a03:2420::/32", "201682"}, + {"2a06:f0c0::/29", "3352"}, + {"2a07:7280::/29", "202591"}, + {"2001:57a:6031::/35", "22773"}, + {"2001:912::/33", "51083"}, + {"2400:8800:4082::/32", "3491"}, + {"2400:b800::/44", "45638"}, + {"240a:a88c::/32", "144838"}, + {"2806:2f0:7223::/41", "17072"}, + {"2001:559:3c3::/48", "33651"}, + {"2803:7260:3::/43", "52238"}, + {"2804:80cc:f::/43", "272413"}, + {"2a00:4802:4c20::/39", "8717"}, + {"2a00:9300::/32", "12843"}, + {"2a02:26f7:e008::/48", "36183"}, + {"2a11:27c0::/43", "199524"}, + {"2001:559:2f9::/48", "7922"}, + {"240a:a58d::/32", "144071"}, + {"2605:4000::/32", "2722"}, + {"2804:93c::/42", "52878"}, + {"2402:8100:20ee::/43", "55644"}, + {"2405:9800:c906::/47", "45458"}, + {"2804:6e80::/32", "270601"}, + {"2001:559:8553::/48", "7922"}, + {"2605:4300:ff00::/40", "62907"}, + {"2605:5480::/32", "26253"}, + {"2606:2180:1::/46", "22241"}, + {"2a02:26f7:e089::/46", "20940"}, + {"2602:fc64:df1::/48", "36829"}, + {"2604:ad00::/32", "4181"}, + {"2804:7110:6100::/35", "270764"}, + {"2a01:4480::/32", "196816"}, + {"2a02:1390:5000::/40", "21351"}, + {"2a02:2ad0:140::/38", "702"}, + {"2a0c:d947::/32", "209877"}, + {"2406:da1c::/36", "16509"}, + {"240a:a062::/32", "142748"}, + {"240a:a5a0::/32", "144090"}, + {"2606:f200::/32", "36097"}, + {"2620:56:a000::/48", "46924"}, + {"2409:8904:5770::/40", "24547"}, + {"2602:feda:b90::/46", "212995"}, + {"2620:13a:2000::/40", "1970"}, + {"2803:7180:6000::/36", "21575"}, + {"2804:1bb4::/32", "61744"}, + {"2804:62b4:4000::/36", "269313"}, + {"2a09:ae80::/29", "204537"}, + {"2a12:13c0::/29", "35710"}, + {"2402:3500::/32", "45177"}, + {"240a:a4b7::/32", "143857"}, + {"240e:44d:6c00::/41", "140345"}, + {"2a04:8680::/32", "39150"}, + {"2001:640::/32", "2895"}, + {"2001:fd8:302c::/43", "4775"}, + {"2001:44c8:48d0::/44", "131445"}, + {"2806:2f0:70e3::/39", "17072"}, + {"2a02:818::/32", "15525"}, + {"2a02:7860::/32", "201859"}, + {"2001:559:3cd::/48", "7725"}, + {"2404:2400:201::/32", "56132"}, + {"2409:805e:3900::/31", "9808"}, + {"2600:1802:13::/45", "16552"}, + {"2804:2fc4:ff14::/44", "264911"}, + {"2a02:ee80:428e::/47", "21433"}, + {"2a0c:b641:f0::/48", "210985"}, + {"2001:df4:7100::/48", "131784"}, + {"2001:df5:a080::/48", "134461"}, + {"2400:d400:9::/48", "45671"}, + {"2405:9240::/32", "61317"}, + {"240e:0:a000::/33", "4134"}, + {"2600:6c38:b33::/44", "20115"}, + {"2800:cd0::/32", "6568"}, + {"2804:3d9c::/32", "266542"}, + {"2806:250:c::/48", "28554"}, + {"2a03:5580::/29", "57280"}, + {"2001:57b:2000::/32", "22773"}, + {"2600:140f:1801::/39", "20940"}, + {"2800:160:13fe::/37", "14259"}, + {"2a00:1288:ef68::/47", "10310"}, + {"2001:250:241f::/48", "23910"}, + {"2001:938:4001::/44", "8437"}, + {"2600:140f:1601::/39", "20940"}, + {"2600:6c38:61f::/42", "20115"}, + {"2a02:f640::/29", "58291"}, + {"2001:4de0:3000::/45", "33438"}, + {"240a:a655::/32", "144271"}, + {"2804:6410::/32", "269402"}, + {"2a0d:e640::/29", "210017"}, + {"2602:feda:a2::/47", "46997"}, + {"2606:bc00:5000::/32", "19419"}, + {"2607:fdb8:4::/48", "7181"}, + {"2800:381:bbbc::/33", "10834"}, + {"2803:9800:91c0::/37", "11664"}, + {"2804:7754::/32", "61604"}, + {"2806:2f0:1283::/43", "17072"}, + {"2a02:888:40::/46", "48695"}, + {"2a04:4e40:fe10::/44", "54113"}, + {"2a09:7:2004::/48", "35537"}, + {"2a10:6f00::/32", "399975"}, + {"2408:8957:ef40::/40", "17816"}, + {"2409:8924:7b00::/37", "56046"}, + {"2804:4080::/32", "265963"}, + {"2806:2f0:8001::/46", "17072"}, + {"2001:67c:18fc::/48", "35073"}, + {"2804:eec:1302::/36", "28226"}, + {"2a02:26f0:117::/48", "21342"}, + {"2a02:26f0:bb00::/48", "34164"}, + {"2c0f:f020:3000::/33", "327907"}, + {"2405:3001::/32", "4641"}, + {"2600:370f:4020::/47", "32261"}, + {"2607:fcc8:afc1::/33", "10796"}, + {"2804:5064::/32", "268386"}, + {"2a00:dc0::/32", "39560"}, + {"2001:428:b21::/48", "4015"}, + {"2001:503:91ef::/48", "7342"}, + {"2001:550:6502::/38", "174"}, + {"2001:559:152::/48", "33652"}, + {"2402:800:5a01::/44", "7552"}, + {"2404:9d00::/32", "135817"}, + {"2a02:26f7:cd81::/46", "20940"}, + {"2a03:ec0::/47", "199669"}, + {"2001:ee0:8300::/36", "45899"}, + {"2401:4300:abcd::/48", "45184"}, + {"2408:8456:3800::/41", "17623"}, + {"2409:4064:5000::/27", "55836"}, + {"2804:fc4::/32", "263602"}, + {"2804:3800:1000::/34", "266449"}, + {"2a0b:df00::/32", "44984"}, + {"2604:6600:200a::/43", "40676"}, + {"2620:0:2b10::/48", "20381"}, + {"2409:8020:91::/42", "56046"}, + {"240e:3b2:c000::/37", "140315"}, + {"2600:1409:5801::/34", "20940"}, + {"2803:55c0::/32", "265715"}, + {"2001:559:8800::/33", "7922"}, + {"2408:84f3:2e60::/40", "17623"}, + {"2804:547c::/32", "268653"}, + {"2a03:63c0::/32", "199578"}, + {"2400:9380:8bc0::/44", "136167"}, + {"2600:1004:9100::/44", "6167"}, + {"2804:2d50::/32", "265274"}, + {"2804:43f8::/32", "267613"}, + {"2a00:54e0::/32", "199324"}, + {"2401:cbc0::/32", "23778"}, + {"240a:a04a::/32", "142724"}, + {"2600:370f:37ca::/42", "32261"}, + {"2606:ae80:1410::/44", "25751"}, + {"2620:42:c000::/48", "395089"}, + {"2a02:888:8140::/46", "48695"}, + {"2a09:bac0:78::/47", "13335"}, + {"2001:250:2011::/48", "23910"}, + {"2406:9c40:1002::/34", "55366"}, + {"2600:1901:4020::/32", "15169"}, + {"2602:ffe4:c3b::/45", "21859"}, + {"2804:d4::/32", "28138"}, + {"2804:6a3c::/32", "270321"}, + {"2409:8c74:f200::/36", "9808"}, + {"2600:9000:2089::/45", "16509"}, + {"2803:5c80:6034::/48", "64114"}, + {"2a01:5b40::/45", "12996"}, + {"2001:9e0::/29", "12414"}, + {"2401:c7c0:21a::/48", "134148"}, + {"2603:c0e0::/39", "54253"}, + {"2620:8d::/48", "23342"}, + {"2a00:1728:20:200::/48", "31490"}, + {"2a09:a280::/29", "210051"}, + {"2401:4900:5b80::/42", "45609"}, + {"2800:1e0:1071::/40", "7195"}, + {"2a02:f040:a::/48", "59605"}, + {"240e:264:1000::/36", "140329"}, + {"2804:4970::/32", "267184"}, + {"2804:4e38::/32", "268247"}, + {"2804:61bc::/32", "269253"}, + {"2a02:26f7:e8c1::/46", "20940"}, + {"2a03:39c0::/29", "43858"}, + {"2a07:9e00::/29", "20740"}, + {"2001:6d0:ffc7::/48", "8985"}, + {"2620:119:501b::/45", "13443"}, + {"2804:5cf0::/32", "268940"}, + {"2001:418:2401:2::/35", "2914"}, + {"2001:4de0::/47", "34343"}, + {"2402:800:b920::/41", "7552"}, + {"2405:84c0:ff26::/44", "59598"}, + {"240a:a885::/32", "144831"}, + {"2600:370f:35aa::/43", "32261"}, + {"2804:cc0::/32", "52550"}, + {"2402:9d80:601::/48", "131429"}, + {"240a:a3bd::/32", "143607"}, + {"2c0f:faa0::/32", "36998"}, + {"2403:2900::/32", "132005"}, + {"2406:daa0:9040::/44", "16509"}, + {"2406:e000:378::/47", "23655"}, + {"240a:14:ecc::/48", "9605"}, + {"2607:fcd0:100:7f01::/48", "8100"}, + {"2a00:e20:154::/31", "25048"}, + {"2a02:540::/45", "35432"}, + {"2a04:4e40:d600::/48", "54113"}, + {"2604:20c0:2000::/36", "40641"}, + {"2620:4d:400e::/48", "395403"}, + {"2a02:1c0::/29", "29084"}, + {"2a02:26f7:ce80::/48", "36183"}, + {"2a06:c840::/29", "198024"}, + {"2001:500:7::/48", "40490"}, + {"2001:56a:e::/47", "7861"}, + {"2402:a0c0:6::/48", "137922"}, + {"240a:aeb7::/32", "146417"}, + {"2804:2cd0::/32", "265245"}, + {"2a02:26f7:b9c6::/47", "20940"}, + {"2001:550:8200:1::/36", "174"}, + {"2401:4900:38e0::/43", "45609"}, + {"240e:44d:7380::/41", "4134"}, + {"2806:370:40a0::/44", "28403"}, + {"2a03:37a0::/32", "59755"}, + {"2001:940::/32", "12853"}, + {"2001:1a68:54::/32", "15694"}, + {"2409:8904:d170::/40", "24547"}, + {"2801:80:1330::/48", "264019"}, + {"2804:d88::/32", "52637"}, + {"2a04:4e40:4410::/41", "54113"}, + {"2001:559:8005::/44", "7922"}, + {"240e:a7:7fc0::/46", "140508"}, + {"2606:2200::/32", "35986"}, + {"2804:3dbc:c000::/35", "266550"}, + {"2a02:e48::/32", "5379"}, + {"2400:cb00:94::/44", "13335"}, + {"2402:ea80::/48", "17747"}, + {"2407:1e40:501::/38", "141732"}, + {"2409:8915:2700::/40", "56044"}, + {"2a03:f1c0::/32", "61121"}, + {"2a0f:3d81::/29", "1239"}, + {"2001:48f8:f330::/36", "11232"}, + {"2409:8728:4600::/32", "56041"}, + {"240e:3b6:d000::/36", "134772"}, + {"2605:a401:86cd::/39", "33363"}, + {"2a02:26f7:62::/48", "36183"}, + {"2a04:1c0::/29", "57795"}, + {"240e:964:5000::/37", "58772"}, + {"2605:6400:1::/46", "53667"}, + {"2607:f810:f40::/32", "6192"}, + {"2804:15a4:11a0::/38", "263400"}, + {"2001:559:546::/48", "33651"}, + {"240a:afa4::/32", "146654"}, + {"2a06:2bc0::/29", "204171"}, + {"2001:1638::/32", "44066"}, + {"2407:2640::/32", "141549"}, + {"2409:8057:3020::/47", "9808"}, + {"2800:bf0:827a::/40", "52257"}, + {"2804:5e40::/32", "269021"}, + {"2a02:26f0:90::/45", "20940"}, + {"2a03:8320::/32", "200874"}, + {"2001:12e8::/34", "16397"}, + {"2800:160:1b99::/42", "14259"}, + {"2a02:26f7:b5c4::/48", "36183"}, + {"2001:559:c4fb::/48", "33659"}, + {"2001:cb0:3203::/32", "4637"}, + {"240a:abd1::/32", "145675"}, + {"2800:160:1169::/46", "14259"}, + {"2a0e:e640::/29", "202844"}, + {"2001:4878:215::/46", "12222"}, + {"240a:a0f0::/32", "142890"}, + {"2001:559:770::/48", "22909"}, + {"2407:3100:8114::/33", "10118"}, + {"2602:806:b000::/40", "63279"}, + {"2620:11a:a033::/45", "36040"}, + {"2a01:8020::/32", "199800"}, + {"2a02:26f7:e700::/48", "36183"}, + {"2a0b:2cc0::/48", "203929"}, + {"2001:da8:26a::/48", "23910"}, + {"240a:ac50::/32", "145802"}, + {"240e:3b0:7a00::/32", "140313"}, + {"2603:c0f8:1210::/37", "20054"}, + {"2001:559:8750::/47", "20214"}, + {"2001:c30::/32", "4721"}, + {"2409:8057:3012::/47", "9808"}, + {"240a:aa4c::/32", "145286"}, + {"2605:3380:4d01::/48", "395174"}, + {"2001:250:342a::/48", "138438"}, + {"2001:67c:2cf8::/48", "12552"}, + {"2401:b0c0:f000::/48", "136941"}, + {"2407:38c0:64::/48", "59204"}, + {"240a:a0c4::/32", "142846"}, + {"2605:a404:de8::/46", "33363"}, + {"2804:29a8::/32", "264027"}, + {"2a02:26f7:f201::/46", "20940"}, + {"2a0d:d00::/29", "212865"}, + {"2a0f:1fc0::/29", "60262"}, + {"2001:4c70::/32", "28678"}, + {"240a:a0db::/32", "142869"}, + {"240a:a211::/32", "143179"}, + {"2a02:ff0:1e00::/40", "12735"}, + {"2a03:2880:f21a::/45", "32934"}, + {"2a0a:2842:f853::/48", "136796"}, + {"2a0b:6903::/48", "206873"}, + {"240e:30a::/35", "137691"}, + {"2600:100d:f110::/36", "22394"}, + {"2801:80:1e21::/48", "14026"}, + {"2803:d100:1000::/36", "52362"}, + {"2a02:2698:9000::/38", "41661"}, + {"2001:67c:15a3::/48", "5577"}, + {"2620:72:a000::/48", "20115"}, + {"2804:3234::/32", "265062"}, + {"2804:7ab4:200::/32", "271387"}, + {"2806:2f0:8043::/42", "17072"}, + {"2a03:14a0::/32", "60427"}, + {"2406:180:8000::/40", "63956"}, + {"2409:8c85:aa03::/48", "9808"}, + {"240e:d6:6000::/37", "133774"}, + {"2a06:d581:3000::/36", "3303"}, + {"2a0d:3842:1050::/48", "57629"}, + {"2804:3af8::/32", "266121"}, + {"2804:758c::/32", "271054"}, + {"2a02:5c20::/29", "60111"}, + {"2a0c:5c81::/29", "55081"}, + {"2a11:fe00::/29", "42375"}, + {"2600:1410:e001::/31", "20940"}, + {"2804:25e8::/32", "264310"}, + {"2a05:d050:a0c0::/44", "16509"}, + {"2a09:9c00::/29", "209947"}, + {"2001:4e8::/32", "6327"}, + {"2803:9800:a893::/45", "11664"}, + {"2804:6120::/32", "269214"}, + {"2a02:7080::/48", "398826"}, + {"2001:559:7d2::/48", "33657"}, + {"2001:da8:2009::/48", "23910"}, + {"2001:1980:900::/34", "29838"}, + {"240a:ab67::/32", "145569"}, + {"2606:6680:5::/48", "53340"}, + {"2620:1d5:a40::/37", "14773"}, + {"2804:6444::/35", "269417"}, + {"2806:230:4019::/48", "11888"}, + {"2a00:a140::/32", "34686"}, + {"2a02:1620::/32", "1290"}, + {"2a02:26f7:dc::/48", "36183"}, + {"2a02:27b0:5600::/32", "9146"}, + {"240e:980:9500::/40", "58563"}, + {"2604:4b40::/32", "396420"}, + {"2604:d600:108c::/39", "32098"}, + {"2803:4e40::/32", "264608"}, + {"2a00:1fa2:80c1::/34", "28884"}, + {"2a02:4e8::/32", "20738"}, + {"2a02:26f7:f791::/46", "20940"}, + {"2a05:3280::/37", "50999"}, + {"2a0f:c400:a::/48", "60781"}, + {"2001:559:49::/48", "33491"}, + {"2001:fd8:f2b0::/44", "4775"}, + {"2a02:f040:c::/48", "59605"}, + {"2001:559:c144::/48", "33667"}, + {"2001:fd8:f280::/42", "132199"}, + {"2001:1248:5621::/45", "11172"}, + {"2605:3380:1000::/36", "12025"}, + {"2804:14d:5cc3::/43", "28573"}, + {"2409:896a:4600::/39", "9808"}, + {"240a:a46d::/32", "143783"}, + {"2600:3501:1200::/33", "396998"}, + {"2a00:efe0::/32", "49489"}, + {"2a0c:e740::/33", "51778"}, + {"2001:559:c407::/44", "33659"}, + {"2405:2500:11::/48", "136566"}, + {"2409:801e:3000::/46", "9808"}, + {"2603:c021::/35", "31898"}, + {"2403:4280:1::/48", "138950"}, + {"240e:5f:6003::/48", "136200"}, + {"2a0d:4b00::/29", "204943"}, + {"2407:ed00::/35", "9587"}, + {"2603:c002:8000::/39", "31898"}, + {"2610:120::/36", "33606"}, + {"2804:14d:4c91::/45", "28573"}, + {"2401:d800:ff40::/42", "7552"}, + {"2403:300:a32::/48", "6185"}, + {"240e:14:2000::/33", "4134"}, + {"2804:18:7858::/39", "10429"}, + {"2804:3808::/32", "266451"}, + {"2804:54a0:1e00::/32", "27688"}, + {"2a00:cd0::/32", "48173"}, + {"2a01:5100::/32", "50032"}, + {"2a03:7000::/32", "28997"}, + {"2a0e:8940::/29", "209528"}, + {"2a0e:b800:abcd::/48", "20473"}, + {"2a10:5740::/46", "34412"}, + {"2804:1040:b100::/33", "263626"}, + {"2a02:26f7:d9c8::/48", "36183"}, + {"2001:ae1::/32", "42008"}, + {"2804:1384::/32", "263537"}, + {"2a00:b404:e000::/36", "203329"}, + {"2a02:26f7:f::/48", "20940"}, + {"2a02:26f7:cf41::/46", "20940"}, + {"2a02:26f7:ec11::/42", "20940"}, + {"2a06:c240:40::/29", "49222"}, + {"2a0b:db00::/29", "13285"}, + {"2001:559:82c5::/44", "7015"}, + {"2409:896a:3c00::/39", "9808"}, + {"240e:5f:6010::/26", "4134"}, + {"2001:503:a83e::/48", "396574"}, + {"2001:559:4b3::/45", "7922"}, + {"240a:abf5::/32", "145711"}, + {"2606:91c0::/32", "400229"}, + {"2804:24e8::/32", "53171"}, + {"2a03:efc0:1900::/40", "54203"}, + {"2a07:3c80:400::/40", "209322"}, + {"2401:d800:27d0::/36", "7552"}, + {"2604:9b00:4800::/38", "14230"}, + {"2605:c000::/32", "7393"}, + {"2607:f5a0:8::/38", "17048"}, + {"2803:4580:9100::/38", "52468"}, + {"2804:7438:4::/32", "270967"}, + {"2806:2f0:4603::/42", "17072"}, + {"2a0c:c9c0::/30", "202414"}, + {"2001:559:5c6::/48", "33287"}, + {"2606:9f00::/32", "30640"}, + {"2001:559:791::/48", "33668"}, + {"2401:d800:7ba0::/41", "7552"}, + {"2401:d800:d370::/40", "7552"}, + {"2402:8100:17::/36", "55644"}, + {"2600:5400:e901::/27", "19108"}, + {"2405:7f00:8000::/39", "133414"}, + {"240c:c407::/28", "23910"}, + {"2a02:26f7:e549::/42", "20940"}, + {"2a11:f300::/29", "400522"}, + {"2001:559:871f::/48", "7015"}, + {"2001:559:c2cf::/48", "33652"}, + {"2408:8459:f130::/41", "17622"}, + {"2607:f740:e003::/48", "63911"}, + {"2804:130c:200::/32", "263512"}, + {"2804:1f36::/32", "268005"}, + {"2a0a:5c0::/29", "206298"}, + {"2001:250:5878::/37", "23910"}, + {"2001:420::/40", "109"}, + {"2001:e60:a788::/36", "4766"}, + {"240e:982:5100::/38", "4134"}, + {"2600:6c3a:83c::/41", "20115"}, + {"2a02:26f7:f344::/48", "36183"}, + {"2a06:b140::/29", "58264"}, + {"2a09:e200::/48", "49121"}, + {"2403:bc00:7fff::/32", "45668"}, + {"2602:fbd3:10::/48", "398653"}, + {"2620:100:4000::/46", "25923"}, + {"240a:aa9c::/32", "145366"}, + {"2607:ffb0:4007::/35", "6327"}, + {"2804:8614::/32", "272619"}, + {"2a02:26f7:d008::/48", "36183"}, + {"2a09:bac0:162::/47", "13335"}, + {"2a0a:ef40::/29", "5378"}, + {"2001:550:2a02::/39", "174"}, + {"240e:3bb:5600::/34", "4134"}, + {"2804:6784::/32", "269633"}, + {"2806:230:202d::/48", "11888"}, + {"2806:230:3021::/48", "11888"}, + {"240a:a4ec::/32", "143910"}, + {"2801:13:2800::/48", "14080"}, + {"2804:5918:2000::/33", "268169"}, + {"2a03:3500::/32", "13054"}, + {"2a0e:b107:19b1::/48", "206569"}, + {"2c0f:eb00:400::/40", "328962"}, + {"2c0f:f940::/32", "33779"}, + {"240e:9b:f021::/46", "140256"}, + {"2604:f980:5800::/40", "19957"}, + {"2605:5f00::/32", "15257"}, + {"2401:3bc0:601::/39", "137409"}, + {"2408:840c:5200::/40", "17621"}, + {"240a:a283::/32", "143293"}, + {"240e:979:9500::/40", "131325"}, + {"2804:6124::/32", "269215"}, + {"2001:1520:200::/40", "20738"}, + {"2404:ea80:d21::/32", "135373"}, + {"2408:8956:6a00::/40", "17622"}, + {"2408:8957:f140::/40", "17816"}, + {"2600:1417:68::/47", "20940"}, + {"2804:4dcc:6000::/32", "52856"}, + {"2804:7da4::/32", "61605"}, + {"2a02:3c0::/29", "44065"}, + {"2a11:7500::/29", "42375"}, + {"2001:559:87fe::/48", "7015"}, + {"2607:f220:10::/44", "19050"}, + {"2800:bf0:8268::/45", "52257"}, + {"2804:42e0::/32", "267533"}, + {"2a01:5041:400b::/48", "202196"}, + {"2403:fa40:2::/48", "23858"}, + {"2404:c400::/37", "9328"}, + {"240a:a880::/32", "144826"}, + {"240a:aa8a::/32", "145348"}, + {"2600:5c00:2304::/48", "3456"}, + {"2600:6c7f:90a0::/48", "20115"}, + {"2600:d800::/31", "13804"}, + {"2a00:14e8::/29", "25358"}, + {"240a:ae77::/32", "146353"}, + {"2606:7640::/32", "54502"}, + {"2a12:2a80::/29", "204790"}, + {"2001:559:c258::/48", "33651"}, + {"2600:1fa0:e040::/44", "16509"}, + {"2620:124:5000::/40", "19523"}, + {"2001:4860::/35", "15169"}, + {"2400:cb00:403::/44", "13335"}, + {"2404:f4c0:f402::/48", "209218"}, + {"2620:a2:e000::/48", "399273"}, + {"2804:2e3c::/32", "265334"}, + {"2a00:6920:e000::/39", "42003"}, + {"2001:1248:5bb6::/41", "11172"}, + {"2405:84c0:fadf::/42", "9886"}, + {"2406:d501::/44", "136557"}, + {"2a03:32c0:16::/48", "29555"}, + {"2a05:f7c0::/29", "43260"}, + {"2001:559:846e::/48", "33287"}, + {"2001:579:b914::/41", "22773"}, + {"240a:abf3::/32", "145709"}, + {"2a00:d8c0::/48", "31138"}, + {"2402:5300:4004::/42", "45903"}, + {"2409:8069:2c00::/30", "9808"}, + {"2409:8752:f00::/35", "56047"}, + {"2001:559:40b::/45", "33659"}, + {"2a00:1628::/32", "21360"}, + {"2a02:cb80:2120::/48", "43766"}, + {"2602:107:1110::/48", "33363"}, + {"2604:5500:800::/42", "19165"}, + {"2804:3454::/32", "265451"}, + {"2a01:4640:100::/38", "9042"}, + {"2a02:ee80:4025::/44", "3573"}, + {"2402:e280:3d98::/47", "134674"}, + {"2406:3003:3030::/41", "55430"}, + {"2409:8924:8f00::/35", "56046"}, + {"240a:a1d7::/32", "143121"}, + {"2605:8bc0:3462::/48", "26695"}, + {"2a05:f8c0::/29", "49940"}, + {"2408:8459:8630::/41", "17622"}, + {"240a:ab07::/32", "145473"}, + {"2605:2800:8300::/48", "14373"}, + {"2607:fb91:2000::/36", "21928"}, + {"2801:18c::/48", "10753"}, + {"2804:6f14::/32", "270637"}, + {"2a02:22e0::/32", "38987"}, + {"2a02:af80::/29", "39440"}, + {"2a03:53a0::/32", "31736"}, + {"2a04:71c7::/32", "206583"}, + {"2604:ff00:b000::/44", "36271"}, + {"2804:2d30::/32", "265265"}, + {"2a0a:7c40::/32", "205925"}, + {"2a0d:2146:be00::/43", "50801"}, + {"2400:8800::/39", "3491"}, + {"2804:3e44::/34", "266584"}, + {"2001:67c:200::/48", "51038"}, + {"2001:df6:7900::/48", "135843"}, + {"2800:160:2cc3::/43", "14259"}, + {"2001:678:998::/48", "200288"}, + {"2404:ec00::/32", "18081"}, + {"2604:1300:4000::/34", "3833"}, + {"2804:250::/32", "262803"}, + {"2804:3d54::/32", "266268"}, + {"2a11:1b00::/29", "210967"}, + {"2001:67c:24b0::/48", "50905"}, + {"2001:67c:2858::/48", "8304"}, + {"240a:a555::/32", "144015"}, + {"2600:140f:3a00::/48", "9498"}, + {"2604:d600:c54::/42", "32098"}, + {"2804:14d:4cd2::/45", "28573"}, + {"240e:44d:5c80::/41", "4134"}, + {"2602:80a::/40", "2722"}, + {"2620:13f:f000::/44", "397687"}, + {"2a02:5180::/32", "43247"}, + {"2a03:2880:4000::/32", "32934"}, + {"2a03:32a0::/32", "198225"}, + {"2a0c:c00:400::/41", "208402"}, + {"2a0e:46c4:2c25::/48", "137509"}, + {"2001:559:577::/48", "7015"}, + {"2400:70c0::/32", "58507"}, + {"2402:800:5b2b::/43", "7552"}, + {"2804:7e08::/32", "271598"}, + {"2a00:dcc0::/32", "34971"}, + {"2a02:26f7:f9c9::/42", "20940"}, + {"2607:f778::/32", "32035"}, + {"2804:22f8::/32", "264135"}, + {"2a03:1980:d113::/48", "61029"}, + {"2a07:85c3::/48", "174"}, + {"2a0a:3380::/29", "16353"}, + {"2a0d:3b80::/29", "39384"}, + {"2a0d:ca47:3::/36", "8423"}, + {"2a10:cc44:112::/48", "59922"}, + {"2620:0:2ed0::/48", "26711"}, + {"2620:125:4008::/45", "394812"}, + {"2804:e30:400::/45", "11338"}, + {"2a02:26f7:f004::/48", "36183"}, + {"2001:250:6007::/48", "24364"}, + {"2001:550:1:d::/55", "174"}, + {"2001:67c:135c::/48", "12552"}, + {"2001:67c:136c::/48", "60384"}, + {"2a02:26f7:cf05::/46", "20940"}, + {"2a02:26f7:e74c::/48", "36183"}, + {"2001:1b70:b3::/48", "6461"}, + {"2405:7f00:8520::/36", "133414"}, + {"240a:2:d90::/44", "9605"}, + {"240c:4000::/24", "38365"}, + {"2600:140b:7400::/48", "31109"}, + {"2602:fd21:800::/37", "398488"}, + {"2801:80:350::/48", "262524"}, + {"2a02:2498:53aa::/48", "13213"}, + {"2a02:26f7:30::/48", "36183"}, + {"2a06:ecc0::/29", "12552"}, + {"2a0a:ec02:902::/48", "42692"}, + {"2600:1017:a400::/44", "22394"}, + {"2804:894::/32", "262379"}, + {"2a0a:e5c1:500::/38", "207996"}, + {"2402:2f00::/32", "58434"}, + {"2404:b9c0::/32", "137409"}, + {"2620:160:e720::/44", "4196"}, + {"2001:4c88::/32", "49100"}, + {"2800:160:1855::/46", "14259"}, + {"2803:f7a0::/32", "267783"}, + {"2a00:1e50:8000::/33", "204273"}, + {"2803:9800:a501::/45", "11664"}, + {"2804:4308::/32", "267544"}, + {"2a00:1db8::/29", "34659"}, + {"2a02:26f7:4b::/48", "20940"}, + {"2a0d:77c7:2241::/35", "7489"}, + {"2a0f:8e40::/29", "200602"}, + {"2409:8c54:b010::/28", "56040"}, + {"2600:140b:2601::/39", "20940"}, + {"2a02:2668:6200::/37", "16345"}, + {"2001:559:205::/48", "20214"}, + {"2001:559:284::/48", "33657"}, + {"2406:cb40::/48", "395092"}, + {"2804:df8::/32", "52532"}, + {"2a0a:3980:9::/48", "198949"}, + {"2a0d:2587:c200::/48", "7721"}, + {"2001:559:8050::/47", "33491"}, + {"2001:559:8352::/48", "33660"}, + {"2404:f340:4000::/34", "139190"}, + {"240a:a23f::/32", "143225"}, + {"2607:f740:19::/48", "36236"}, + {"2607:ff00:500::/40", "11572"}, + {"2800:bf0:3a00::/46", "52257"}, + {"2804:3424::/32", "265438"}, + {"2a0b:4d07:701::/46", "44239"}, + {"2a0f:b100:100::/40", "210118"}, + {"2001:559:160::/48", "20214"}, + {"2804:7c7c:e00::/32", "271499"}, + {"2a11:48c0::/29", "24940"}, + {"2001:ee0:ea00::/40", "45899"}, + {"2400:3460::/32", "131812"}, + {"240a:af7c::/32", "146614"}, + {"2804:a48::/32", "263084"}, + {"2804:1f38::/32", "268118"}, + {"2a10:cc42:137e::/40", "20473"}, + {"2001:559:38::/45", "7922"}, + {"240a:a3e6::/32", "143648"}, + {"2a0b:4340:530::/41", "131477"}, + {"2a02:ee80:4070::/46", "3573"}, + {"2a04:9600::/29", "199766"}, + {"2804:2514::/32", "264259"}, + {"2001:559:58a::/47", "7922"}, + {"2001:67c:90c::/48", "41294"}, + {"240a:a1ee::/32", "143144"}, + {"2804:2a60:ff00::/40", "263089"}, + {"2a0a:2640::/29", "200428"}, + {"2a02:da8::/32", "39906"}, + {"2a02:4bc0::/32", "20618"}, + {"2001:df1:7e00::/48", "135300"}, + {"2001:fd8:f330::/44", "4775"}, + {"2600:1fa0:8120::/44", "16509"}, + {"2800:bf0:3024::/43", "27947"}, + {"2804:14d:2c84::/42", "28573"}, + {"2a05:3240::/29", "59780"}, + {"2a09:4dc0::/32", "196822"}, + {"2600:14c0::/45", "21342"}, + {"2620:149:65::/43", "714"}, + {"2a0c:9a40:1010::/45", "202479"}, + {"2001:579:b950::/40", "22773"}, + {"2001:ee0:d540::/36", "45899"}, + {"2403:1ec0:1610::/48", "4812"}, + {"2001:2a8::/32", "7670"}, + {"2001:388:608d::/35", "7575"}, + {"2406:7900:7226::/48", "132300"}, + {"2a00:1728:20::/55", "31490"}, + {"2001:67c:98::/48", "15600"}, + {"2001:1248:5965::/44", "11172"}, + {"2402:1200:156::/32", "24523"}, + {"2604:e180:5206::/32", "55002"}, + {"2607:f220::/44", "26810"}, + {"2804:73d8::/32", "270941"}, + {"2806:286:6000::/32", "265524"}, + {"2a0e:a680::/48", "8767"}, + {"2401:d800:cc0::/42", "7552"}, + {"2408:841a::/29", "4837"}, + {"2605:6800::/32", "11996"}, + {"2a07:e300::/29", "43341"}, + {"2001:559:15e::/48", "33659"}, + {"2604:d600:1c0b::/43", "32098"}, + {"2804:214:2::/44", "26615"}, + {"2001:550:10d::/38", "174"}, + {"2405:5540::/32", "133676"}, + {"2a02:4e0:2300::/42", "16135"}, + {"2404:7940::/32", "58593"}, + {"240a:ad89::/32", "146115"}, + {"240c:c781::/32", "24367"}, + {"2600:370f:37e1::/45", "32261"}, + {"2600:8808:4000::/31", "22773"}, + {"2607:fdf0:5ef2::/45", "8008"}, + {"2804:1088:8000::/33", "52913"}, + {"2804:3488::/32", "262766"}, + {"2404:f4c0:f944::/47", "142551"}, + {"2a00:8780::/32", "8829"}, + {"2a01:198:ff00::/40", "60781"}, + {"2a02:26f0:cd00::/48", "34164"}, + {"2a02:26f7:dc0d::/42", "20940"}, + {"2c0f:f5d8::/32", "37381"}, + {"2001:57a:7002::/45", "22773"}, + {"2408:84e2:200::/40", "17621"}, + {"2800:b10:10::/48", "27884"}, + {"2803:abc0::/48", "265632"}, + {"2804:20f0::/32", "264522"}, + {"2a0b:3100::/39", "12859"}, + {"2a10:c941:101::/30", "35277"}, + {"2001:559:c436::/48", "7016"}, + {"2406:daa0:6020::/44", "16509"}, + {"2408:8957:5d00::/40", "17816"}, + {"240e:438:6420::/43", "140647"}, + {"2604:bd40::/32", "395236"}, + {"2804:13b0::/44", "263546"}, + {"2804:6558::/32", "269484"}, + {"2a03:80c0::/47", "210079"}, + {"2a0d:2146:8040::/48", "209864"}, + {"2a0d:9b00::/32", "207498"}, + {"2605:4580:3141::/46", "14299"}, + {"2800:bf0:3440::/45", "52257"}, + {"2804:5538::/32", "268697"}, + {"2806:230:2016::/48", "265594"}, + {"2402:800:f192::/41", "7552"}, + {"240a:a051::/32", "142731"}, + {"240e:3b8:1200::/39", "4134"}, + {"2a02:26f7:f581::/46", "20940"}, + {"2a06:1a00::/33", "39824"}, + {"2804:a14::/34", "262342"}, + {"2a04:ff00:501::/40", "206607"}, + {"2001:388:c5::/42", "7575"}, + {"2001:4878:151::/48", "12222"}, + {"2401:1d40:4000::/32", "59019"}, + {"2403:e800:80c::/39", "4637"}, + {"2404:bf40:a182::/42", "139084"}, + {"2600:1f13::/36", "16509"}, + {"2800:160:1c9f::/42", "14259"}, + {"2804:4404::/32", "267616"}, + {"2a01:8480:2005::/32", "15704"}, + {"2408:80e3:8000::/33", "4837"}, + {"2804:7f58::/32", "271682"}, + {"2405:4803:c4e::/40", "18403"}, + {"2001:678:978::/48", "209347"}, + {"2405:1500::/42", "58717"}, + {"2409:8924:7300::/37", "56046"}, + {"240e:44d:5400::/42", "140345"}, + {"2c0f:fd20::/32", "36909"}, + {"2800:bf0:2820::/44", "52257"}, + {"2803:5c40::/32", "263796"}, + {"2a01:97a0::/32", "34702"}, + {"2001:438:fffd:127::/46", "6461"}, + {"2001:559:c307::/48", "33657"}, + {"2001:1a11:122::/45", "8781"}, + {"2408:8656:3b00::/37", "17816"}, + {"2a0c:5540::/43", "204020"}, + {"2400:1c00:f0::/44", "45143"}, + {"240a:a413::/32", "143693"}, + {"240a:abcc::/32", "145670"}, + {"2804:4858::/32", "267115"}, + {"2a02:26f7:bec8::/48", "36183"}, + {"2001:250:84d::/46", "23910"}, + {"2001:550:5b00:3::/37", "174"}, + {"2001:559:228::/43", "33491"}, + {"2a07:3500:1060::/47", "208240"}, + {"2a0d:a280::/29", "206487"}, + {"2804:6440::/32", "269416"}, + {"2a03:97e0::/32", "203673"}, + {"2a07:85c0::/48", "174"}, + {"2a0a:c980::/29", "48596"}, + {"2001:559:372::/48", "13367"}, + {"240e:e1:1000::/33", "4134"}, + {"2604:c400::/32", "30350"}, + {"2620:81:c000::/48", "393420"}, + {"2804:2930::/32", "264002"}, + {"2a04:4e40:b200::/48", "54113"}, + {"2001:da8:6f01::/40", "23910"}, + {"2001:44b8:3b::/48", "4739"}, + {"2600:1000::/44", "6167"}, + {"2607:f438::/32", "23520"}, + {"2804:4358::/32", "267564"}, + {"2001:678:980::/48", "35675"}, + {"2401:4900:5110::/44", "45609"}, + {"2405:ce00::/32", "7575"}, + {"2408:8459:bc30::/41", "17622"}, + {"2604:2380::/32", "33029"}, + {"2a02:26f7:d385::/46", "20940"}, + {"2a03:6940::/32", "61266"}, + {"2001:de8:13::/48", "55822"}, + {"2001:4998:1b1::/44", "10310"}, + {"2806:104e:3::/45", "8151"}, + {"2a02:26f7:bb::/48", "20940"}, + {"2a03:af80::/29", "16342"}, + {"2001:fb0:109f:8006::/64", "7470"}, + {"2001:4479:900::/35", "7545"}, + {"2401:d800:53c0::/42", "7552"}, + {"2600:9000:1e0c::/48", "16509"}, + {"2606:4700:8d90::/44", "13335"}, + {"2a06:c980::/29", "13287"}, + {"2a09:d880::/48", "209680"}, + {"2a02:c740::/30", "24978"}, + {"2a07:8140::/36", "49690"}, + {"2405:7f00:3203::/45", "133414"}, + {"240a:a20f::/32", "143177"}, + {"2804:4bd8:600::/33", "267332"}, + {"2806:2f0:21e0::/48", "17072"}, + {"2a04:7c0:1::/45", "61135"}, + {"2400:dbc0::/32", "133255"}, + {"2600:1014:b0d0::/42", "6167"}, + {"2a03:49e0::/32", "58260"}, + {"2a0e:97c0:720::/48", "208779"}, + {"2408:8206:19d0::/32", "4808"}, + {"2409:8a52:500::/38", "56047"}, + {"2800:440:2000::/42", "27738"}, + {"2803:6910::/32", "272004"}, + {"2804:214:8018::/45", "26615"}, + {"2a02:26f7:cc89::/46", "20940"}, + {"2a02:46e0::/39", "60049"}, + {"2001:250:209::/48", "24348"}, + {"2001:4479:c000::/36", "7545"}, + {"2402:800:6239::/41", "7552"}, + {"2409:805f:3900::/26", "9808"}, + {"2a0f:e1c3::/29", "60781"}, + {"2407:c00::/33", "45356"}, + {"240a:a3c5::/32", "143615"}, + {"2602:fbf1:20::/40", "38136"}, + {"2605:dd40:9000::/33", "398549"}, + {"2804:8f4:3000::/40", "52875"}, + {"2001:428:4408::/36", "209"}, + {"2a02:23a0::/32", "13287"}, + {"2001:67c:2204:607::2ffa:1/48", "24708"}, + {"2408:8956:a800::/40", "17622"}, + {"240a:a7db::/32", "144661"}, + {"240a:a7fa::/32", "144692"}, + {"2600:1488:a301::/41", "20940"}, + {"2620:46:2000::/48", "13535"}, + {"2804:fac::/32", "263598"}, + {"2001:4d0:6118::/48", "10343"}, + {"240e:95d:2800::/37", "139316"}, + {"2a0e:8f02:2130::/48", "211722"}, + {"2a0f:de40::/48", "60781"}, + {"240a:aa1a::/32", "145236"}, + {"2606:34c0:1::/48", "398810"}, + {"2800:440:240::/48", "27738"}, + {"2804:79bc::/32", "271324"}, + {"2a04:4280:30::/48", "43260"}, + {"2a0b:6440::/29", "41779"}, + {"2a0d:5bc0::/32", "210252"}, + {"2001:428:b22::/45", "209"}, + {"2001:559:c38d::/48", "22909"}, + {"2001:df7:80::/48", "136697"}, + {"2a0c:b381::/37", "204731"}, + {"2a0d:f80::/29", "58273"}, + {"2a01:c50e:9800::/38", "12479"}, + {"2a02:d4e0::/30", "197491"}, + {"2401:d800:9d30::/41", "7552"}, + {"240a:abc1::/32", "145659"}, + {"2600:5000::/30", "7029"}, + {"2604:ae00:3::/48", "4452"}, + {"2a09:da00::/32", "35913"}, + {"2409:8008:3900::/32", "24547"}, + {"240a:af24::/32", "146526"}, + {"2605:a404:cd0::/42", "33363"}, + {"2804:774::/38", "52858"}, + {"2a05:d050:6080::/44", "16509"}, + {"2001:df1:d400::/47", "133904"}, + {"2001:44b8:30e5::/44", "7545"}, + {"2806:2f0:22::/48", "22884"}, + {"2a01:5043:2000::/48", "202196"}, + {"2605:5440::/44", "23328"}, + {"2605:bb00:1002::/47", "4213"}, + {"2620:1ec:c12::/38", "8075"}, + {"2a00:8c60:2::/48", "60432"}, + {"2a01:b740:a02::/48", "6185"}, + {"2a0d:5600:34::/46", "9009"}, + {"2001:480:24::/44", "668"}, + {"2001:559:2a1::/46", "7015"}, + {"2001:67c:618::/48", "199061"}, + {"2001:43f8:160::/48", "37170"}, + {"2408:8456:5240::/39", "17816"}, + {"240e:108:82::/48", "58461"}, + {"2a02:40c0::/36", "60781"}, + {"2a06:a001:a030::/48", "211481"}, + {"2a09:6140::/29", "50107"}, + {"2001:559:8452::/47", "33287"}, + {"2001:df6:1500::/48", "134003"}, + {"2400:cb00:a146::/48", "13335"}, + {"2405:f600:41::/44", "45117"}, + {"240a:a533::/32", "143981"}, + {"2607:b080::/38", "29838"}, + {"2804:3894::/32", "266487"}, + {"2620:137:8::/48", "396253"}, + {"2804:5534:4000::/43", "268696"}, + {"2806:2f0:62a0::/35", "17072"}, + {"2a02:cb80:2a10::/48", "43766"}, + {"2a07:5900::/39", "203014"}, + {"2a10:c800::/47", "56322"}, + {"2400:1a00:b041::/39", "17501"}, + {"2409:8904:5060::/39", "24547"}, + {"240a:af10::/32", "146506"}, + {"2606:a780::/32", "394437"}, + {"2607:e880:55::/48", "13602"}, + {"2a02:2588::/29", "28851"}, + {"2a04:6480::/29", "39923"}, + {"2a10:3040::/30", "208256"}, + {"2001:550:3801::/38", "174"}, + {"2403:2700:10::/48", "38500"}, + {"2a02:26f7:d785::/46", "20940"}, + {"2a0a:af00::/29", "206955"}, + {"2a0b:f200::/32", "207031"}, + {"2001:678:a98::/48", "208702"}, + {"2602:fbfa::/36", "400270"}, + {"2620:18:c000::/48", "39287"}, + {"2804:8070::/32", "271750"}, + {"2a07:d840::/29", "210107"}, + {"2a0d:2bc0::/48", "43260"}, + {"2a00:6340::/33", "58299"}, + {"2a01:8840:e::/48", "12287"}, + {"2a02:ad8:204::/35", "12389"}, + {"2a06:6541:2003::/48", "397568"}, + {"2406:3000:35:100::/48", "16625"}, + {"2602:ff2e::/36", "21694"}, + {"2a00:df0::/32", "28717"}, + {"2600:140f:e800::/48", "12222"}, + {"2806:2f0:9521::/46", "17072"}, + {"2001:1890:1fff:103::/64", "6461"}, + {"2400:fc00:81b0::/38", "45773"}, + {"2b0d:6f84::/30", "37268"}, + {"2401:d800:f0a2::/39", "7552"}, + {"240a:ab30::/32", "145514"}, + {"2607:f9f1::/46", "22205"}, + {"2800:1e0:2::/36", "7195"}, + {"2801:1fc:1a::/48", "27951"}, + {"2804:29a0::/32", "28219"}, + {"2a0b:ee80::/29", "51395"}, + {"2001:418:1401:2c::/64", "20940"}, + {"2001:559:c31b::/48", "7016"}, + {"2405:9000:90::/48", "17719"}, + {"240e:979:2e00::/40", "134770"}, + {"2607:6980:e030::/44", "136620"}, + {"2a0e:b107:159b::/48", "142598"}, + {"2408:8256:196::/38", "17622"}, + {"2600:100b:f110::/36", "6167"}, + {"2806:20d:1908::/43", "32098"}, + {"2a05:4680::/29", "57902"}, + {"2001:559:4d6::/48", "22909"}, + {"2001:678:d50::/48", "213204"}, + {"2001:43f8:1400::/48", "328650"}, + {"2401:b780:6a::/33", "45410"}, + {"2605:d7c0::/32", "207976"}, + {"2a0b:a900::/30", "206712"}, + {"2001:1248:5696::/41", "11172"}, + {"2001:4ce8::/32", "250"}, + {"2403:600::/32", "135391"}, + {"2604:6780::/32", "13694"}, + {"2804:45e4:7c10::/39", "262567"}, + {"2a02:26f7:da44::/48", "36183"}, + {"2c0f:f7c0:3001::/32", "30986"}, + {"2804:85b4::/32", "272595"}, + {"2a02:ed04::/39", "50304"}, + {"2a0e:b107:9d7::/48", "213262"}, + {"2001:43f8:c70::/48", "328030"}, + {"2401:47c0:1b00::/37", "41095"}, + {"2605:ef80:16::/42", "36492"}, + {"2804:45a8::/32", "266941"}, + {"2001:559:8165::/48", "33654"}, + {"2001:559:111::/48", "33287"}, + {"2001:67c:710::/48", "197933"}, + {"2404:f801:802c::/48", "45139"}, + {"240e:67b:c200::/39", "140329"}, + {"2600:9000:2000::/44", "16509"}, + {"2806:230:6010::/48", "265594"}, + {"2a00:79a0::/36", "60771"}, + {"2a02:23e0::/32", "35393"}, + {"2a03:d640::/32", "24713"}, + {"2001:388:d::/42", "7575"}, + {"2600:6c2e:fd4::/32", "20115"}, + {"2604:200::/45", "33132"}, + {"2800:c20::/32", "28110"}, + {"2804:18:10e0::/43", "26599"}, + {"2806:20d:5b03::/45", "32098"}, + {"2a01:8180:1000::/36", "21150"}, + {"2a0f:2bc0::/29", "60262"}, + {"2001:559:c1b0::/48", "22909"}, + {"2400:c600:3320::/41", "24389"}, + {"2407:a2c0::/32", "63791"}, + {"2602:feb0::/36", "174"}, + {"2606:8740:1000::/40", "26968"}, + {"2a0b:7140:1::/48", "207408"}, + {"2001:67c:24d8::/48", "204228"}, + {"240a:a9ec::/32", "145190"}, + {"2605:9880::/38", "23470"}, + {"2804:469c::/33", "267000"}, + {"2804:4ef8::/33", "268295"}, + {"2a02:80::/29", "34244"}, + {"2a0b:9b40::/29", "202120"}, + {"2001:559:c49e::/48", "7725"}, + {"2001:559:c4a4::/48", "33651"}, + {"2001:1900:224e::/43", "3356"}, + {"2409:8704:300::/37", "24547"}, + {"2a01:758:fff9::/45", "3326"}, + {"2a02:26f7:f78d::/46", "20940"}, + {"2a0a:7640::/30", "206049"}, + {"2402:800:6310::/40", "7552"}, + {"2402:b400:41b0::/41", "45960"}, + {"2604:ca00:1100::/44", "36492"}, + {"2a05:dfc7:8::/48", "200897"}, + {"2c0f:3600:100::/38", "328855"}, + {"2403:1380::/32", "133421"}, + {"2408:8256:3d8a::/48", "17623"}, + {"2801:80:1af0::/48", "266373"}, + {"2804:104c:a000::/40", "263629"}, + {"2a0d:12c0:2000::/48", "205804"}, + {"2400:8480:3010::/42", "133385"}, + {"240a:a2d2::/32", "143372"}, + {"2602:fd53::/36", "395611"}, + {"2804:7b64::/32", "271429"}, + {"2a02:2048::/32", "1342"}, + {"2a0e:2740::/29", "208093"}, + {"2c0f:f2b0::/32", "328049"}, + {"2001:1388:7aa1::/39", "6147"}, + {"2409:8a5c::/33", "9808"}, + {"240a:a662::/32", "144284"}, + {"240e:d:b000::/37", "136191"}, + {"2806:2f0:4423::/41", "17072"}, + {"2620:98:e00e::/48", "399728"}, + {"2804:3a7c::/32", "266092"}, + {"2a00:12f8:410::/32", "9198"}, + {"2a02:26f7:f0c1::/46", "20940"}, + {"2a03:2887:ff4a::/47", "63293"}, + {"2001:df7:e080::/48", "137165"}, + {"2407:a180:1c9::/48", "131758"}, + {"240e:3b2:c800::/37", "4134"}, + {"2804:15a4::/35", "263400"}, + {"2806:2f0:3561::/46", "17072"}, + {"2a03:11a0:1::/48", "201684"}, + {"2a0e:a880::/36", "51561"}, + {"2600:9000:1170::/46", "16509"}, + {"2804:34:2007::/42", "28306"}, + {"2804:7ba4::/32", "271445"}, + {"2a0f:21c0::/29", "60262"}, + {"2a0f:8400::/32", "208210"}, + {"2001:559:135::/48", "33661"}, + {"2001:559:705::/48", "33659"}, + {"2402:8100:3840::/42", "45271"}, + {"2408:8647:1200::/28", "4837"}, + {"2620:ed::/48", "3660"}, + {"2804:18:6050::/45", "26599"}, + {"2a07:940::/29", "201127"}, + {"2001:559:c3c8::/48", "33651"}, + {"2401:47c0:1700::/36", "41095"}, + {"2404:ba00:4::/48", "17665"}, + {"240e:44d:2c00::/42", "140345"}, + {"2603:f7b0::/29", "396356"}, + {"2a0c:b641:7a1::/46", "207268"}, + {"2001:57a:aa09::/35", "22773"}, + {"2001:4350:3002::/32", "2609"}, + {"2402:7500:faff::/48", "24158"}, + {"2602:fe54::/43", "16584"}, + {"2804:2144:1000::/32", "52795"}, + {"2a01:8840:c2::/45", "12041"}, + {"2a02:26f7:b7::/48", "20940"}, + {"2001:559:c510::/48", "33287"}, + {"2404:c900:8::/46", "58682"}, + {"2a00:1730::/32", "25549"}, + {"2a01:c50f:e140::/37", "12479"}, + {"2804:5c44::/32", "268898"}, + {"2408:8406::/39", "4808"}, + {"2a0b:efc0:401::/32", "60893"}, + {"2001:4878:c220::/48", "12222"}, + {"2402:800:fca0::/39", "7552"}, + {"2806:2f0:31e1::/46", "17072"}, + {"2806:2f0:9941::/46", "17072"}, + {"2a0a:a400::/29", "64444"}, + {"2a11:3bc0::/29", "212238"}, + {"2001:559:715::/48", "33490"}, + {"2001:44b8:406b::/48", "4739"}, + {"2403:9800:6000::/40", "4771"}, + {"2406:2000:e4::/46", "56173"}, + {"2620:11a:40b0::/48", "7014"}, + {"2804:6474:c000::/34", "269429"}, + {"2a01:8840:2e::/43", "12041"}, + {"2a0e:97c0:6b0::/44", "210076"}, + {"2804:4e8c::/32", "268268"}, + {"2804:70c0:32::/48", "270746"}, + {"2400:201::/48", "4766"}, + {"2407:c940:2103::/32", "48024"}, + {"2600:9000:20a1::/44", "16509"}, + {"2806:230:5009::/48", "11888"}, + {"2806:250:1::/45", "28509"}, + {"2a01:9bc0::/29", "39686"}, + {"2a02:26f7:c185::/46", "20940"}, + {"2406:e00:800::/48", "55740"}, + {"2a00:1ca0::/34", "21413"}, + {"240a:aebf::/32", "146425"}, + {"240e:3b9:c800::/37", "4134"}, + {"2602:250::/28", "46690"}, + {"2804:3d28:a::/45", "7063"}, + {"2a02:2068:a000::/29", "15830"}, + {"2a02:26f7:df09::/42", "20940"}, + {"2600:1010:9f00::/44", "6167"}, + {"2602:fd92:a00::/40", "39618"}, + {"2804:52f4:a70::/40", "268552"}, + {"2001:48a8:68fd::/48", "177"}, + {"2804:20dc::/32", "264517"}, + {"2400:adc0:4000::/46", "9541"}, + {"2405:1c0:6171::/46", "55303"}, + {"240a:aeba::/32", "146420"}, + {"2800:160:1b37::/44", "14259"}, + {"2a00:1278::/32", "12813"}, + {"2a00:ccc0::/31", "57433"}, + {"2c0f:ed68::/32", "328170"}, + {"2001:559:781::/48", "33287"}, + {"2001:ee0:e500::/40", "45899"}, + {"2a02:26f7:c040::/48", "36183"}, + {"2a0d:d6c2::/29", "200350"}, + {"2408:8256:2f8b::/48", "17816"}, + {"2408:8459:9230::/41", "17622"}, + {"2801:1fc:34::/48", "27951"}, + {"2804:3b6c:c004::/46", "265442"}, + {"2a02:26f7:dd05::/46", "20940"}, + {"2001:559:c205::/48", "33491"}, + {"2001:df6:ad80::/48", "142064"}, + {"2606:5580::/47", "63242"}, + {"2804:3eb0::/32", "266615"}, + {"2a0b:d5c1:100::/40", "197202"}, + {"240e:44d:7480::/41", "4134"}, + {"2600:1415:2c01::/38", "20940"}, + {"2804:8080::/32", "271754"}, + {"2806:2f0:6081::/46", "17072"}, + {"2403:f3c0::/32", "131626"}, + {"2406:daa0:e0c0::/44", "16509"}, + {"2408:870c:90::/41", "17621"}, + {"2409:8904:8890::/39", "24547"}, + {"240a:a680::/32", "144314"}, + {"2600:380:a880::/38", "7018"}, + {"2a02:2e02:2630::/41", "12479"}, + {"2a05:bec0:40::/48", "44486"}, + {"2001:559:402::/47", "33287"}, + {"2401:d100::/44", "18705"}, + {"240e:964:3000::/37", "133775"}, + {"2600:140b:4c01::/35", "20940"}, + {"2608:c143:1::/48", "27066"}, + {"2a01:c9c0:c1::/46", "8891"}, + {"2001:67c:318::/48", "51608"}, + {"2001:1a11:b0::/47", "8781"}, + {"2604:880:207::/43", "29802"}, + {"2803:2a01:9800::/46", "27895"}, + {"2a0f:ca80:1337::/44", "208046"}, + {"2a10:f8c0::/29", "8387"}, + {"2402:800:52ee::/39", "7552"}, + {"2402:800:5771::/44", "7552"}, + {"2402:9e80:2a::/48", "140224"}, + {"2402:e380:12d::/43", "139073"}, + {"2607:f428:9350::/44", "11351"}, + {"2a00:d540::/29", "49250"}, + {"2a0f:5701:3515::/48", "205593"}, + {"2001:559:c11a::/48", "7015"}, + {"2401:bc40:e303::/48", "136899"}, + {"2620:11e:f000::/48", "6130"}, + {"2804:14c:7700::/40", "28573"}, + {"2404:1a40:200::/32", "9744"}, + {"2408:8459:aa30::/41", "17622"}, + {"2a04:3600::/29", "57487"}, + {"2a04:4e40:9600::/48", "54113"}, + {"2806:2f0:5121::/46", "17072"}, + {"2a00:e580::/29", "25424"}, + {"2401:c340::/46", "56136"}, + {"2401:ce80:1003::/32", "14340"}, + {"2408:84f3:e610::/42", "134543"}, + {"2409:8a3c:1400::/33", "24444"}, + {"2604:df40::/32", "394991"}, + {"2001:559:10b::/48", "7016"}, + {"2001:559:8764::/47", "33659"}, + {"2001:fd8:1a0::/48", "132199"}, + {"2001:1388:2f06::/44", "6147"}, + {"2409:821e::/31", "24400"}, + {"240a:af4d::/32", "146567"}, + {"2a02:26f7:da0d::/46", "20940"}, + {"2a02:26f7:ea09::/42", "20940"}, + {"2a07:a900::/29", "46261"}, + {"2001:67c:738::/48", "43139"}, + {"2001:da8:3010::/48", "24358"}, + {"2400:cb00:270::/48", "13335"}, + {"2801:1e4::/42", "27951"}, + {"2001:559:1b9::/46", "33652"}, + {"2800:160:17fa::/45", "14259"}, + {"2801:140:eeee::/48", "264798"}, + {"2a01:4c8::/32", "12576"}, + {"2a02:888:8240::/46", "48695"}, + {"2a11:3::/29", "8888"}, + {"2402:b940:200::/39", "138538"}, + {"2c0f:f388::/32", "37004"}, + {"2001:18b8:124::/32", "29789"}, + {"2401:4900:c00::/43", "45609"}, + {"2408:8956:3500::/40", "17816"}, + {"2a02:ee80:4285::/44", "3573"}, + {"2001:4210:980d::/43", "25818"}, + {"2600:1806:119::/48", "16552"}, + {"2607:f428:91b0::/41", "20115"}, + {"2a02:2398::/46", "9166"}, + {"2001:dc7:5df8::/45", "24151"}, + {"2001:559:815f::/48", "7015"}, + {"240a:aaef::/32", "145449"}, + {"240e:44d:2880::/41", "4134"}, + {"2803:2200::/32", "263174"}, + {"2a02:26f7:e580::/48", "36183"}, + {"2a10:31c0::/30", "208256"}, + {"2409:8054:3020::/47", "9808"}, + {"2607:f480:24::/48", "27435"}, + {"2a0f:4d80::/29", "201847"}, + {"2604:6600:e900::/40", "201106"}, + {"2804:487c::/32", "267124"}, + {"2804:542c:8000::/36", "268633"}, + {"2a02:26f7:f000::/48", "36183"}, + {"2409:8c44:801::/38", "24445"}, + {"2602:ffa6:300::/46", "62731"}, + {"2a02:26f7:f7d0::/48", "36183"}, + {"2a02:2af8:220::/37", "702"}, + {"2a0f:b100:200::/40", "201281"}, + {"2001:67c:2ce8::/48", "199508"}, + {"2620:121:a000::/44", "6082"}, + {"240a:a90f::/32", "144969"}, + {"2600:1409:9001::/36", "20940"}, + {"2a00:5f40::/29", "8469"}, + {"2a01:b200::/32", "44185"}, + {"240e:44d:2780::/41", "4134"}, + {"240e:938:f910::/44", "139462"}, + {"2804:194::/32", "53131"}, + {"2804:1f26:ca5a::/48", "265020"}, + {"2404:bf40:a583::/45", "7545"}, + {"2605:6300::/32", "27026"}, + {"2001:559:717::/48", "33659"}, + {"2402:800:9a9b::/42", "7552"}, + {"240a:a7bc::/32", "144630"}, + {"2607:f750:7000::/40", "23473"}, + {"2803:6700:220::/48", "263210"}, + {"2804:3108::/32", "264988"}, + {"2a00:8000::/32", "200707"}, + {"2a02:502::/32", "5538"}, + {"2a0d:49c0::/29", "43260"}, + {"2804:17c4::/32", "263250"}, + {"2a01:9d20::/29", "39611"}, + {"2402:e380:13f::/40", "139073"}, + {"2600:806:100::/48", "12234"}, + {"2602:ffc5:110::/44", "40676"}, + {"240a:aa87::/32", "145345"}, + {"240e:438:9640::/36", "4134"}, + {"2602:feb4:240::/44", "25961"}, + {"2607:f058::/34", "22302"}, + {"2803:6700:1000::/40", "263210"}, + {"2804:74::/32", "28338"}, + {"2804:22d8:8000::/33", "264126"}, + {"2a01:8840:11::/48", "13657"}, + {"2a02:26f7:ed08::/48", "36183"}, + {"2001:559:1a3::/48", "7922"}, + {"2001:559:c40b::/45", "7015"}, + {"2001:678:a7c::/48", "200924"}, + {"2602:feda:b9f::/48", "212995"}, + {"2a0a:2b00::/43", "52129"}, + {"2405:8a00::/40", "55824"}, + {"2406:d00::/48", "132165"}, + {"2606:4700:a2::/39", "13335"}, + {"2607:a800:408::/48", "15695"}, + {"2800:200:e2c1::/42", "12252"}, + {"2a10:1240::/29", "15589"}, + {"2a10:f240::/29", "211385"}, + {"2620:74:4f::/43", "7342"}, + {"2803:96c0::/32", "265654"}, + {"2402:800:5c55::/42", "7552"}, + {"2408:862e::/27", "4837"}, + {"240e:978:7100::/36", "4134"}, + {"2606:4840::/32", "399570"}, + {"2400:5ce0::/44", "149522"}, + {"2401:d800:b40::/42", "7552"}, + {"2804:2020::/32", "264470"}, + {"2a00:1588:f800::/37", "43139"}, + {"2a03:2880:f151::/45", "32934"}, + {"2400:adca::/39", "9541"}, + {"2409:8e28::/29", "56041"}, + {"2602:feb4:90::/44", "25961"}, + {"2603:c0e9::/36", "1218"}, + {"2001:44b8:2049::/48", "4739"}, + {"2804:45e4:8100::/33", "262567"}, + {"2a11:7480::/29", "1239"}, + {"2404:b300::/48", "59318"}, + {"2a02:26f7:e648::/48", "36183"}, + {"2a09:8280:14::/42", "40509"}, + {"2a0f:5707:aa10::/46", "208814"}, + {"240a:a363::/32", "143517"}, + {"2600:6c38:8ec::/43", "20115"}, + {"2606:2800:601b::/45", "15133"}, + {"2a0d:a400::/29", "30836"}, + {"2603:c020::/35", "31898"}, + {"2001:559:8603::/48", "33662"}, + {"2001:67c:20a0::/47", "50472"}, + {"2605:72c0:500::/40", "40401"}, + {"2a11:7b40::/29", "210545"}, + {"2001:559:820b::/45", "7016"}, + {"2605:e640::/32", "13370"}, + {"2804:b18:c020::/36", "52941"}, + {"2001:559:c371::/48", "33287"}, + {"2408:8957:c940::/40", "17816"}, + {"240a:a0cc::/32", "142854"}, + {"240a:a883::/32", "144829"}, + {"2607:2a00::/47", "29909"}, + {"2803:6200::/32", "262237"}, + {"2804:7d90:2::/32", "271569"}, + {"2001:418:1401:21::/64", "20940"}, + {"2001:559:835f::/48", "33287"}, + {"2001:559:c38e::/48", "7922"}, + {"2401:1c00:3080::/48", "131298"}, + {"2401:4800:2011::/48", "38457"}, + {"2402:800:7030::/41", "7552"}, + {"2408:8456:8040::/39", "17816"}, + {"240a:a71b::/32", "144469"}, + {"240e:f7:3000::/36", "136190"}, + {"2620:117:7002::/44", "26955"}, + {"2804:39c:6000::/32", "28329"}, + {"2804:f8c:5000::/32", "263591"}, + {"2804:3244:28::/32", "265066"}, + {"2a03:5a00:d::/48", "58319"}, + {"240a:a046::/32", "142720"}, + {"2800:484:5e00::/39", "14080"}, + {"2001:559:81e3::/48", "33652"}, + {"2401:f000::/47", "38477"}, + {"2406:1440:1101::/48", "7630"}, + {"2409:8008:db::/48", "24547"}, + {"240a:a8d0::/32", "144906"}, + {"2600:370f:7468::/40", "32261"}, + {"2804:f4::/32", "26606"}, + {"2a02:26f7:d3c8::/47", "36183"}, + {"2001:448a:5030::/41", "7713"}, + {"2409:806a:100::/36", "9808"}, + {"2602:fcce:f2::/36", "399200"}, + {"2604:a00:1010::/32", "19318"}, + {"2804:4b50::/34", "267297"}, + {"2a03:f80:40::/48", "9009"}, + {"2001:250:2808::/42", "138378"}, + {"2001:6d0:d4::/47", "8985"}, + {"2405:4802:7610::/32", "18403"}, + {"2600:1406:3e::/48", "35994"}, + {"2806:2f0:23e3::/43", "22884"}, + {"2a12:b840::/32", "29119"}, + {"2a01:8840:41::/48", "207266"}, + {"2001:fd8:f1f0::/44", "4775"}, + {"2408:8456:6a40::/39", "17816"}, + {"2801:16:c800::/48", "19429"}, + {"2803:b780:1::/48", "65000"}, + {"2a10:2f01:2b0::/46", "205635"}, + {"2001:250:5073::/48", "23910"}, + {"2401:c5c0::/47", "55492"}, + {"240a:a434::/32", "143726"}, + {"2607:fb90:7f00::/32", "21928"}, + {"2804:175c::/32", "263140"}, + {"2a10:8680::/29", "197071"}, + {"2001:da8:7015::/48", "23910"}, + {"2400:cb00:a710::/48", "13335"}, + {"2401:f880::/32", "133936"}, + {"2402:800:7d40::/42", "7552"}, + {"2408:8459:c50::/38", "17816"}, + {"2600:6c10:fc11::/46", "20115"}, + {"2408:84f3:a610::/42", "134543"}, + {"2804:8608::/32", "272615"}, + {"2001:559:835a::/48", "33287"}, + {"2401:c680:e::/48", "134371"}, + {"240e:44d:1200::/41", "140345"}, + {"2600:6c38:b47::/44", "20115"}, + {"2605:35c0::/36", "6597"}, + {"2607:fd48:200:3::/47", "13536"}, + {"2804:1664::/32", "263285"}, + {"2001:678:bd0::/48", "207631"}, + {"2001:67c:168c::/48", "199217"}, + {"2400:e240::/32", "38247"}, + {"2600:140b:cc00::/48", "24319"}, + {"2620:12c:3000::/44", "3356"}, + {"2a00:1248:501f::/32", "3216"}, + {"2a02:bd8::/32", "8535"}, + {"2a0e:e740::/30", "208338"}, + {"2409:800b:2b04::/47", "9808"}, + {"2a02:d0c2:2::/48", "212414"}, + {"2001:559:5e8::/48", "22909"}, + {"2804:297c:c3c0::/42", "262907"}, + {"2001:440:1880::/48", "1880"}, + {"2001:67c:151c::/48", "210543"}, + {"2a02:26f7:f545::/46", "20940"}, + {"2604:2d80:c030::/34", "30036"}, + {"2407:8b00:1163::/34", "64073"}, + {"2607:ea00::/32", "57"}, + {"2607:fb90:8c00::/35", "21928"}, + {"2620:f:2::/48", "3755"}, + {"2a01:160::/32", "16186"}, + {"2001:4c0:6003::/32", "855"}, + {"2407:8c00:20::/48", "55441"}, + {"2a02:26f7:ef50::/48", "36183"}, + {"2001:678:ce0::/48", "206384"}, + {"2404:1c40:45::/44", "24432"}, + {"2806:36f::/32", "265619"}, + {"2a02:26f7:c9c9::/46", "20940"}, + {"2001:559:c0ff::/48", "33660"}, + {"2001:559:c11b::/48", "33651"}, + {"2600:380:f1e2::/47", "64011"}, + {"2600:6c38:b31::/46", "20115"}, + {"2602:fdfc::/36", "36556"}, + {"2804:5b68::/32", "268841"}, + {"240a:a8ba::/32", "144884"}, + {"2602:fd92:800::/48", "211481"}, + {"2620:103:c006::/44", "14203"}, + {"2a04:e702:97f::/48", "9044"}, + {"2a07:8b00::/29", "202817"}, + {"2001:df7:1500::/48", "135955"}, + {"240a:a233::/32", "143213"}, + {"240e:3b5:2c00::/35", "134774"}, + {"2607:b400:a00::/48", "1312"}, + {"2607:fcf0:2::/45", "13445"}, + {"2800:370:4c::/43", "28006"}, + {"2804:4e58::/32", "268255"}, + {"2001:559:c48e::/48", "33659"}, + {"2001:1980:5400::/34", "29838"}, + {"2402:800:5855::/42", "7552"}, + {"2600:1016:f110::/31", "6167"}, + {"2607:f900::/32", "10823"}, + {"2806:2f0:90a6::/39", "17072"}, + {"2409:8904:5eb0::/39", "24547"}, + {"2600:2601:101::/28", "33362"}, + {"2a02:26f7:e900::/48", "36183"}, + {"2a02:6d40::/32", "42652"}, + {"2a0b:cf00::/32", "208683"}, + {"2a0e:f800::/29", "38919"}, + {"2001:550:4201::/37", "174"}, + {"2001:559:c451::/48", "7016"}, + {"240e:1:a000::/37", "137688"}, + {"2607:f6f8::/35", "30170"}, + {"2001:43f8:ab0::/48", "328093"}, + {"2620:171:51::/48", "715"}, + {"2804:244::/32", "262801"}, + {"2a06:a005:210::/44", "207705"}, + {"2001:500:8f::/48", "26710"}, + {"240a:a257::/32", "143249"}, + {"2a02:b60:4006::/32", "44217"}, + {"2a09:5c80::/29", "40976"}, + {"2001:559:833e::/48", "21508"}, + {"2001:44b8:6051::/45", "4739"}, + {"240a:a006::/32", "142656"}, + {"2a0a:1a40::/32", "38176"}, + {"2001:250:4::/48", "24348"}, + {"2401:7840::/32", "136795"}, + {"2402:d400:d::/32", "17762"}, + {"240e:438:9440::/38", "4134"}, + {"2804:4344::/32", "267559"}, + {"2804:6efc::/32", "270631"}, + {"2a00:4bc0:600::/40", "48263"}, + {"2001:559:8613::/48", "33650"}, + {"2403:f500:4000::/32", "10103"}, + {"2407:65c0::/32", "142272"}, + {"240a:a1d1::/32", "143115"}, + {"2603:fb40::/29", "397165"}, + {"2606:ad00::/32", "25694"}, + {"2801:1fc:32::/48", "27951"}, + {"2a01:c50f:3400::/36", "12479"}, + {"2a0f:27c0::/29", "399975"}, + {"2406:f400::/44", "38001"}, + {"240a:ae00::/32", "146234"}, + {"240e:108:11d8::/48", "134769"}, + {"240e:44d:3c00::/41", "140345"}, + {"2803:c3c0::/32", "27884"}, + {"2a0d:8f40::/29", "208906"}, + {"2001:559:815c::/48", "33287"}, + {"2001:559:8698::/48", "33659"}, + {"2a02:3000::/23", "6805"}, + {"2a11:58c0::/29", "62240"}, + {"2001:559:8489::/48", "33287"}, + {"2001:67c:2634::/48", "197431"}, + {"2401:d800:190::/42", "7552"}, + {"2403:5180:16::/48", "138467"}, + {"2604:6d00:2500::/48", "36223"}, + {"2804:4368:4d0::/42", "267568"}, + {"2a12:49c0::/30", "211444"}, + {"2001:67c:288::/48", "28855"}, + {"2402:800:9247::/43", "7552"}, + {"2403:8e80::/32", "134739"}, + {"240a:a93f::/32", "145017"}, + {"2804:1060::/32", "263632"}, + {"2804:7208::/32", "270828"}, + {"2a0b:c180::/32", "16019"}, + {"2a0e:7d02::/31", "211335"}, + {"2001:4868:4200::/40", "23148"}, + {"2402:4480::/38", "174"}, + {"2404:3280:b::/32", "9287"}, + {"2604:c7c0::/32", "35935"}, + {"2a00:f120::/32", "200026"}, + {"2a03:5120::/40", "6830"}, + {"2600:8804:a000::/30", "22773"}, + {"2a02:698::/32", "34784"}, + {"2a0c:e9c0::/29", "197036"}, + {"2405:da00::/47", "38235"}, + {"2602:107:e600::/40", "20001"}, + {"2606:5cc0:ff01::/45", "36263"}, + {"2606:6240::/46", "398447"}, + {"2a02:26f7:c001::/48", "20940"}, + {"2a04:c880::/32", "208189"}, + {"2600:140f:1800::/48", "9498"}, + {"2803:4be0::/32", "270078"}, + {"2a02:26f7:d2c9::/42", "20940"}, + {"2c0f:eb00:1300::/40", "328962"}, + {"2001:ee0:c540::/38", "45899"}, + {"2408:8459:4cc0::/38", "17816"}, + {"2607:6003:2307::/48", "19181"}, + {"2620:44::/47", "7133"}, + {"2801:80:1d90::/48", "265988"}, + {"2a02:26f7:ea90::/48", "36183"}, + {"2600:6c10:c35::/46", "20115"}, + {"2607:fb90:1f00::/34", "21928"}, + {"2a07:72c0::/29", "57029"}, + {"2001:1a11:10b::/48", "42298"}, + {"2605:21c0::/32", "20055"}, + {"2804:7884::/32", "271248"}, + {"2806:20d:350e::/43", "32098"}, + {"2402:e280:3d7c::/40", "134674"}, + {"2001:4478:ff01::/48", "4739"}, + {"2401:1040:400::/32", "134806"}, + {"2405:aac0:fe::/48", "139949"}, + {"240a:a66a::/32", "144292"}, + {"2605:380:40::/48", "42473"}, + {"2804:8284::/32", "272524"}, + {"2a02:26f7:b3c5::/46", "20940"}, + {"2001:559:c160::/48", "33660"}, + {"2400:4e80::/35", "131584"}, + {"2602:fed2:710b::/48", "34927"}, + {"240e:979:6f00::/35", "4134"}, + {"2603:c002:1210::/39", "31898"}, + {"2806:230:4035::/48", "11888"}, + {"2a01:568:6000::/32", "43950"}, + {"2a02:26f7:c3d5::/46", "20940"}, + {"2a02:26f7:eb04::/48", "36183"}, + {"2a03:5900::/44", "31126"}, + {"2408:8956:1500::/40", "17816"}, + {"2600:1008:b170::/40", "22394"}, + {"2a03:db80:5464::/48", "200943"}, + {"2a06:1e85:2::/48", "57782"}, + {"2800:160:2735::/36", "14259"}, + {"2803:eee0::/32", "269987"}, + {"2a04:f580:8000::/48", "4134"}, + {"2001:4878:b038::/48", "12222"}, + {"2400:c540:c277::/39", "59238"}, + {"2604:300::/32", "21947"}, + {"2a09:bac0:100::/48", "13335"}, + {"2001:df0:df80::/48", "139297"}, + {"2600:1406:9400::/48", "35994"}, + {"2a0a:380::/29", "49223"}, + {"2001:978:2a01::/46", "56638"}, + {"240a:ab50::/32", "145546"}, + {"2a01:ab80::/32", "204243"}, + {"2600:1014:b0f0::/44", "22394"}, + {"2804:37a8:1206::/43", "266428"}, + {"2806:101e:1::/48", "8151"}, + {"2604:ca00:1000::/48", "36492"}, + {"2400:dd01:1010::/34", "7497"}, + {"2800:484:e100::/40", "10620"}, + {"2800:bf0:828e::/48", "27947"}, + {"2803:5300::/32", "264637"}, + {"2406:8500::/32", "134773"}, + {"2600:370f:3721::/45", "32261"}, + {"2a10:7706::/31", "399975"}, + {"2c0f:f738:2202::/35", "61317"}, + {"2610:160:11::/48", "30312"}, + {"2801:80:400::/48", "263012"}, + {"2804:104c:e400::/40", "263629"}, + {"2a05:7900::/29", "48348"}, + {"2001:da8:701f::/48", "138371"}, + {"2001:44b8:2059::/48", "4739"}, + {"2001:559:707::/44", "7016"}, + {"2001:678:f38::/48", "211362"}, + {"2402:e280:212e::/47", "134674"}, + {"2404:4a00:3294::/33", "45629"}, + {"2600:d402::/28", "1403"}, + {"2604:4d40:7fff::/48", "399196"}, + {"2a00:eb9::/32", "16083"}, + {"2a02:6c20:829::/32", "207167"}, + {"2a04:4e42:ff3::/33", "54113"}, + {"2c0f:f5c0:131::/38", "29465"}, + {"2401:d800:d182::/42", "7552"}, + {"2605:48c0::/32", "397504"}, + {"2001:67c:1874::/48", "39249"}, + {"2409:8d14:20::/38", "56044"}, + {"2404:3800::/47", "45459"}, + {"2406:9e00:1110::/47", "55352"}, + {"2620:149:245::/37", "714"}, + {"2804:3848::/47", "266467"}, + {"2a06:3e40::/29", "42102"}, + {"2001:1248:5a6b::/43", "11172"}, + {"2001:4d78:1300::/40", "15830"}, + {"2400:6500:ff01::/40", "16509"}, + {"240e:b08::/27", "4134"}, + {"2602:fd10:800::/44", "398795"}, + {"2a00:aac0::/29", "25375"}, + {"2001:df1:6001::/48", "4755"}, + {"2405:201:7200::/32", "55836"}, + {"2408:840c:3600::/40", "17621"}, + {"2408:870c:d0::/42", "138421"}, + {"2409:8c70:3ad5::/46", "9808"}, + {"2a00:4cc6::/32", "203871"}, + {"2a02:2ad0:120::/43", "702"}, + {"2a09:e140::/29", "9119"}, + {"2a0c:4e40::/29", "48943"}, + {"2a10:7700:f215::/48", "400177"}, + {"2001:550:221b::/39", "174"}, + {"2001:67c:2dac::/48", "42886"}, + {"2404:f4c0:f502::/48", "134666"}, + {"2001:1a50::/32", "25560"}, + {"2001:4200:310::/40", "2018"}, + {"240a:a191::/32", "143051"}, + {"240a:acff::/32", "145977"}, + {"240e:86:9000::/28", "4134"}, + {"2604:1100:d200::/39", "11911"}, + {"2a07:bcc0::/47", "35146"}, + {"2a0e:c400::/29", "51083"}, + {"2401:3cc0:841::/39", "137409"}, + {"2600:1000:a020::/40", "22394"}, + {"2001:1900:23af::/41", "3356"}, + {"2803:6604:6401::/39", "28075"}, + {"2a00:4802:380::/44", "13124"}, + {"2a0b:56c0::/29", "41960"}, + {"2001:1248:9723::/45", "11172"}, + {"2402:6c00::/32", "46015"}, + {"240e:3bf::/35", "134773"}, + {"2604:d600:2005::/38", "32098"}, + {"2804:14d:7681::/45", "28573"}, + {"2804:59d4::/32", "268728"}, + {"2804:5bb8:cc::/32", "268865"}, + {"2001:67c:854::/48", "210775"}, + {"2600:6c7f:9350::/44", "11351"}, + {"2a00:7147:b1::/48", "51430"}, + {"2402:b300::/32", "23631"}, + {"240e:44d:4240::/42", "140359"}, + {"2804:7dc0::/32", "271580"}, + {"2a03:6880::/32", "39835"}, + {"2001:559:371::/48", "33652"}, + {"2001:4488:7008::/32", "7713"}, + {"2405:ed80::/44", "135106"}, + {"2408:8459:9e10::/42", "17623"}, + {"240e:933::/32", "134420"}, + {"2606:2800:10c::/46", "15133"}, + {"2a05:ed80::/29", "200278"}, + {"2402:d500::/32", "45235"}, + {"2620:40:4000::/48", "16931"}, + {"2a01:488:bb1b::/33", "20773"}, + {"2a0c:b641:580::/48", "210469"}, + {"2001:a17:fffb::/45", "204679"}, + {"2409:8018:28f2::/35", "134810"}, + {"240a:40aa:c000::/35", "58834"}, + {"2606:6800:2c00::/40", "394897"}, + {"2a06:4940::/29", "204279"}, + {"2001:678:40::/48", "25354"}, + {"2405:8d40:aa0::/48", "139831"}, + {"2a0e:fd45:2b70::/48", "210305"}, + {"2001:4b20:1000::/64", "65505"}, + {"2405:2d40::/43", "55695"}, + {"2600:1488:a501::/42", "20940"}, + {"2a02:26f7:becc::/48", "36183"}, + {"2a02:26f7:d7c9::/42", "20940"}, + {"2408:84f3:9a10::/42", "134543"}, + {"2803:6700:440::/48", "263210"}, + {"2804:49c:319::/48", "15201"}, + {"2402:800:63a1::/44", "7552"}, + {"2402:800:9a1d::/42", "7552"}, + {"2408:8956:1fc0::/34", "17622"}, + {"2409:8028:8f1::/46", "56041"}, + {"2001:559:44b::/45", "7015"}, + {"2001:559:563::/48", "13367"}, + {"240e:978:a00::/40", "23650"}, + {"2804:62f0::/32", "269329"}, + {"2a05:300::/47", "59895"}, + {"2001:678:5e4::/48", "61961"}, + {"2402:4b80::/32", "24367"}, + {"2603:fcb0::/25", "397165"}, + {"2a02:1770::/33", "8865"}, + {"2401:8e00::/36", "9260"}, + {"2404:138:4012::/31", "38022"}, + {"2606:bc0::/32", "7018"}, + {"2607:f3f0::/46", "16724"}, + {"2804:3c10::/32", "266188"}, + {"2804:4808::/32", "267093"}, + {"2a07:2f40::/29", "212659"}, + {"2a07:4247:3000::/36", "211956"}, + {"2001:67c:49c::/48", "2799"}, + {"2001:df0:2ea::/48", "38605"}, + {"2407:9440:62::/43", "141626"}, + {"2804:4ef4:4000::/32", "268294"}, + {"2409:806b:2900::/35", "9808"}, + {"2001:67c:27fc::/48", "12732"}, + {"2600:c800::/28", "7018"}, + {"2804:214:c001::/44", "26615"}, + {"2a03:4900::/46", "197695"}, + {"2a0e:8f02:f01f::/48", "211696"}, + {"240e:1:1000::/33", "4134"}, + {"2620:119:4014::/41", "7726"}, + {"2804:14d:2a84::/41", "28573"}, + {"2a02:26f7:3::/48", "20940"}, + {"2a02:26f7:f6c5::/46", "20940"}, + {"2a0b:2900:5200::/40", "48582"}, + {"2a0d:3c0::/29", "201211"}, + {"2001:67c:5e8::/48", "29663"}, + {"2402:e380:314::/48", "140244"}, + {"2406:7400:f1::/45", "24309"}, + {"240a:acde::/32", "145944"}, + {"2800:160:16dd::/46", "14259"}, + {"2804:300:c000::/31", "53237"}, + {"2a02:26f7:bd4c::/48", "36183"}, + {"2a02:26f7:c580::/48", "36183"}, + {"2406:6e00:f03b::/41", "17457"}, + {"2804:1a8::/32", "28229"}, + {"2a00:a8e0:201::/46", "15598"}, + {"2a07:5fc0::/29", "209621"}, + {"2a07:cbc0::/39", "201299"}, + {"2a0e:b1c0::/29", "60843"}, + {"2c0f:f6d0::/44", "327687"}, + {"2001:388:10ad::/41", "7575"}, + {"2001:559:3c0::/48", "33652"}, + {"2001:559:76e::/47", "33659"}, + {"2804:1380:173::/32", "263536"}, + {"2a00:15b8:500::/32", "31122"}, + {"2a06:1287:3300::/44", "206499"}, + {"2a0e:6d00::/29", "39761"}, + {"2607:2800::/32", "33302"}, + {"2607:fcd0:100:2d04::/49", "8100"}, + {"2804:1bd8::/33", "28224"}, + {"2001:559:c04c::/47", "7015"}, + {"2001:559:c073::/48", "33659"}, + {"2001:16a2:4200::/37", "25019"}, + {"2403:6dc0:1000::/36", "38047"}, + {"2404:2340:5000::/36", "134926"}, + {"2409:8915:9200::/39", "56044"}, + {"2620:1ec:14::/44", "8075"}, + {"2804:e0c::/48", "28176"}, + {"2a02:ee80:4169::/48", "3573"}, + {"2001:67c:198c::/48", "205016"}, + {"240a:a69a::/32", "144340"}, + {"2600:1417:4001::/37", "20940"}, + {"2606:2800:2::/48", "14153"}, + {"2a02:26f7:f0c5::/46", "20940"}, + {"2a02:e982:1f::/42", "19551"}, + {"2a02:e0:3201::/46", "34984"}, + {"2a11:97c0::/29", "204790"}, + {"2001:500:120::/48", "396549"}, + {"2403:400:900::/31", "23820"}, + {"2600:c000::/40", "7843"}, + {"2401:d800:a80::/42", "7552"}, + {"240a:a0af::/32", "142825"}, + {"2606:ae00:ac00::/40", "7287"}, + {"2607:f680::/32", "26228"}, + {"2001:559:877f::/48", "33651"}, + {"2001:4878:8215::/46", "12222"}, + {"2006:75c0::/32", "400010"}, + {"2408:8a27:4000::/35", "4837"}, + {"2409:8004:310e::/43", "24547"}, + {"2804:3ef0:a101::/48", "266630"}, + {"2a0c:9a40:1030::/47", "34927"}, + {"2401:340::/32", "55720"}, + {"2402:800:3163::/43", "7552"}, + {"2403:1840::/32", "137845"}, + {"2803:b2c0::/47", "264851"}, + {"2806:2f0::/43", "17072"}, + {"240a:ae32::/32", "146284"}, + {"2602:fca3::/48", "2165"}, + {"2604:7ac0::/36", "12213"}, + {"2620:14:2000::/48", "395899"}, + {"2804:11a0::/32", "262889"}, + {"2a02:26f7:e14d::/42", "20940"}, + {"2a02:faa0::/48", "203427"}, + {"2a09:51c0::/29", "202053"}, + {"2a10:f900::/29", "49191"}, + {"2409:8a56:9200::/40", "9808"}, + {"2600:cc03:e000::/40", "62833"}, + {"2001:559:812d::/46", "7922"}, + {"2001:16a2:c120::/44", "39386"}, + {"2405:6c40::/47", "24527"}, + {"2600:6c7f:9012::/48", "20115"}, + {"2a05:1082:1::/48", "136918"}, + {"2407:7380::/32", "134970"}, + {"2600:370f:5250::/42", "32261"}, + {"2607:f740:e60a::/48", "63911"}, + {"2803:cd80:8000::/33", "61478"}, + {"2001:678:268::/48", "206939"}, + {"2400:addb:800::/39", "9541"}, + {"2606:8980::/32", "394368"}, + {"2001:550:1b0a::/48", "397496"}, + {"2401:d800:2350::/42", "7552"}, + {"2804:2f6c::/32", "264890"}, + {"2a02:e70:19a::/32", "33965"}, + {"2001:1528::/32", "15685"}, + {"2403:2800:2::/48", "27435"}, + {"2409:8d14:2900::/31", "56044"}, + {"2606:2800:4a68::/46", "15133"}, + {"2804:5114::/32", "268429"}, + {"2001:a90::/32", "21119"}, + {"2001:16a2:4028::/47", "39386"}, + {"2402:800:f420::/41", "7552"}, + {"2404:bf40:8403::/42", "139084"}, + {"240e:964:2000::/37", "4134"}, + {"2600:140f:c800::/48", "24319"}, + {"2600:6c38:d44::/38", "20115"}, + {"2607:f740:44::/48", "36236"}, + {"2800:bf0:1d1::/46", "52257"}, + {"2804:14c:7575::/46", "28573"}, + {"2402:800:561d::/42", "7552"}, + {"2606:3900::/32", "13329"}, + {"2001:559:84f9::/48", "33287"}, + {"2800:5f0:6::/39", "22724"}, + {"2001:559:473::/48", "33659"}, + {"2402:4e00:7::/41", "45090"}, + {"2606:f900:2000::/33", "812"}, + {"2a02:5f00::/32", "19229"}, + {"2a03:9a00::/29", "8896"}, + {"2a0f:5707:fff7::/48", "50310"}, + {"2600:6c38:76d::/36", "20115"}, + {"2607:f038::/46", "21527"}, + {"2409:896a:9800::/39", "9808"}, + {"2409:8c70:3aa0::/44", "9808"}, + {"240a:aa4f::/32", "145289"}, + {"2804:4a34::/32", "267224"}, + {"2a02:1648::/29", "49375"}, + {"2a0a:6380::/29", "12552"}, + {"2c0f:f220::/32", "36924"}, + {"2001:4958::/32", "577"}, + {"2401:d800:da50::/42", "7552"}, + {"2405:e40:9::/32", "139005"}, + {"2409:8a14::/33", "56044"}, + {"2607:9800:c104::/44", "15085"}, + {"2804:43b0::/32", "267584"}, + {"2a00:1eb8:c006::/48", "47583"}, + {"2a02:26f7:e9::/48", "20940"}, + {"2a04:7b40::/29", "200003"}, + {"2a11:29c6:b00b::/48", "212149"}, + {"2409:8915:5400::/39", "56044"}, + {"240e:44d:4f00::/41", "140345"}, + {"2600:1480:f000::/48", "21342"}, + {"2605:8680:fffe::/31", "25780"}, + {"2806:2f0:9e61::/40", "17072"}, + {"2a02:ee80:402b::/43", "3573"}, + {"2a06:1280::/36", "61138"}, + {"2a0f:ec40::/32", "42433"}, + {"2001:67c:2160::/48", "2486"}, + {"240c:c410::/32", "24369"}, + {"2800:4b0:4503::/44", "12252"}, + {"2803:9800::/33", "11664"}, + {"2a07:59c6:caca::/48", "205413"}, + {"2001:b400:f408::/45", "17421"}, + {"2402:f800:d000::/36", "7602"}, + {"2620:85:8000::/48", "46453"}, + {"2804:4d60::/32", "263096"}, + {"2a03:3260::/32", "6829"}, + {"2404:7a40:16::/36", "132556"}, + {"240a:ad6f::/32", "146089"}, + {"240a:aee3::/32", "146461"}, + {"2804:3aec::/32", "266118"}, + {"2001:559:877c::/48", "33287"}, + {"2001:67c:1600::/44", "47487"}, + {"2402:ef11:2::/47", "9430"}, + {"2406:840:7::/48", "139317"}, + {"2607:fb20:10::/48", "14230"}, + {"2800:160:156d::/43", "14259"}, + {"2a06:1700:100::/48", "200651"}, + {"2a0f:cc80::/32", "210625"}, + {"2620:1fd:20::/44", "11971"}, + {"2804:84a4::/32", "28267"}, + {"2a0a:7c80::/32", "206672"}, + {"2404:3bc0::/32", "55933"}, + {"2409:801e:3010::/31", "24400"}, + {"2804:6250::/32", "262964"}, + {"2001:250:600a::/48", "23910"}, + {"2401:1700:1d::/33", "55666"}, + {"2408:8957:9b00::/40", "17816"}, + {"2804:1ad0::/32", "28621"}, + {"2a02:26f7:e749::/46", "20940"}, + {"2001:4830:2446::/48", "395326"}, + {"2401:8f40::/48", "136933"}, + {"2804:1f06::/32", "52887"}, + {"2a02:26f7:bcd0::/48", "36183"}, + {"2a02:5560::/32", "60130"}, + {"2a03:8180:1c00::/39", "36351"}, + {"2001:67c:3c4::/48", "1136"}, + {"2405:55c0:3d::/46", "63991"}, + {"240a:acd0::/32", "145930"}, + {"2620:81:2000::/48", "16904"}, + {"2620:98:4002::/47", "393949"}, + {"2800:bf0:b42d::/33", "27947"}, + {"2001:67c:2668::/48", "31566"}, + {"2408:8956:6800::/40", "17622"}, + {"2804:54:1c00::/33", "28220"}, + {"2804:1b3:4100::/41", "10429"}, + {"2404:c0:31a0::/38", "23693"}, + {"2a02:c40:3::/32", "13000"}, + {"2a0f:5707:ab27::/48", "43927"}, + {"2001:b08:9::/48", "3267"}, + {"2407:f440::/32", "59191"}, + {"2800:bf0:3a40::/47", "52257"}, + {"2001:559:8271::/48", "7725"}, + {"2804:1b04:20::/46", "53048"}, + {"2a02:2891:4::/48", "51185"}, + {"2001:678:680::/48", "25223"}, + {"2403:1000:5100::/40", "38819"}, + {"2409:8907:8220::/39", "24547"}, + {"2804:5300::/32", "268556"}, + {"2806:230:2039::/48", "11888"}, + {"2a02:26f7:ce05::/46", "20940"}, + {"2401:4900:50::/48", "9498"}, + {"2401:d800:dc60::/40", "7552"}, + {"2404:d500:4::/47", "132370"}, + {"240a:a268::/32", "143266"}, + {"2605:6180::/32", "14340"}, + {"240a:a4fa::/32", "143924"}, + {"2600:1f1c::/36", "16509"}, + {"2a09:9b80::/29", "204790"}, + {"2001:c20:487b::/48", "9255"}, + {"2401:d800:97d2::/36", "7552"}, + {"2a02:26f7:ebc4::/48", "36183"}, + {"2a04:6650::/31", "210156"}, + {"2001:559:19:e001::/45", "7922"}, + {"2401:a040::/32", "131586"}, + {"2402:8100:16::/48", "45271"}, + {"240a:a129::/32", "142947"}, + {"2602:fc2a::/36", "15020"}, + {"2800:bf0:14b::/48", "27947"}, + {"2a05:fec0::/29", "39224"}, + {"2a0e:ce40::/29", "12778"}, + {"2001:ec0:800::/40", "23969"}, + {"2a02:26f7:cb08::/48", "36183"}, + {"2a0b:5100::/29", "15765"}, + {"2a0d:1a40:7800::/43", "208563"}, + {"2001:559:869b::/45", "33667"}, + {"2001:678:154::/48", "203017"}, + {"240a:a49b::/32", "143829"}, + {"240e:978:4000::/40", "137702"}, + {"2607:ffc8:4001::/32", "17356"}, + {"2620:137:6000::/44", "393507"}, + {"2001:250:5400::/42", "24362"}, + {"2001:559:c4f1::/45", "7922"}, + {"2001:ee0:c640::/36", "45899"}, + {"2407:8f00::/32", "45677"}, + {"240a:a76a::/32", "144548"}, + {"2803:8c10:40::/42", "271868"}, + {"2a00:fe00:c0a0::/48", "702"}, + {"2001:da8:800a::/47", "24364"}, + {"240a:ac36::/32", "145776"}, + {"2402:a300:3e6::/44", "55427"}, + {"240a:ac6c::/32", "145830"}, + {"240e:357:6400::/26", "4134"}, + {"2804:85b0::/32", "262810"}, + {"2806:230:101f::/48", "11888"}, + {"2a06:a005:b0::/48", "207941"}, + {"2804:46f4::/32", "267022"}, + {"2001:559:81d9::/46", "7015"}, + {"2001:678:210::/48", "204506"}, + {"240e:f:a000::/36", "4835"}, + {"2610:108:8001::/48", "11724"}, + {"2620:124:6000::/42", "40816"}, + {"2a04:1b00:4::/47", "61005"}, + {"2408:8956:ac00::/40", "17622"}, + {"240a:a507::/32", "143937"}, + {"2804:428c::/32", "267507"}, + {"2806:230:1006::/48", "265594"}, + {"2a02:26f7:fa41::/46", "20940"}, + {"240a:a020::/32", "142682"}, + {"240a:a679::/32", "144307"}, + {"2804:840c::/32", "272236"}, + {"2a11:1::/30", "44103"}, + {"2403:100:1000::/48", "56300"}, + {"240a:ae49::/32", "146307"}, + {"2600:6c3a:c4f::/38", "20115"}, + {"2610:a1:3048::/48", "12008"}, + {"2620:13d:f004::/40", "22711"}, + {"2800:200:bd30::/41", "12252"}, + {"2a0d:1080:1::/48", "47215"}, + {"2001:4998:19::/46", "10310"}, + {"2401:d180:2120::/48", "133865"}, + {"2804:60cc::/32", "269192"}, + {"2001:67c:104::/48", "198595"}, + {"2407:4d00:ff02::/48", "38841"}, + {"240e:3bb:1800::/34", "4134"}, + {"240e:982:4300::/36", "4134"}, + {"2804:1b70::/32", "61728"}, + {"2804:291c:4100::/32", "263998"}, + {"2a01:8840:9e::/42", "12041"}, + {"2a0b:6b86:b00::/47", "206699"}, + {"2409:8000:2a00::/39", "56048"}, + {"2804:4c14:9a01::/39", "267348"}, + {"2a03:1ac0:1::/34", "9049"}, + {"240a:a5c9::/32", "144131"}, + {"2607:fe20::/32", "30404"}, + {"2800:bf0:2905::/40", "27947"}, + {"2a09:8280:2f::/48", "40509"}, + {"2001:d58::/32", "9416"}, + {"2402:4f40::/32", "137404"}, + {"240e:974:e202::/40", "4134"}, + {"2600:6c38:822::/44", "20115"}, + {"2a00:6901:2::/47", "20926"}, + {"2408:870c:4010::/30", "17621"}, + {"2605:1b00::/32", "25999"}, + {"2001:67c:2e10::/48", "200986"}, + {"2408:8256:3282::/48", "17816"}, + {"2806:230:4038::/48", "265594"}, + {"2001:559:1fc::/48", "33491"}, + {"2400:cb00:26::/44", "13335"}, + {"2a0f:c581::/30", "208861"}, + {"2602:feda:1d1::/46", "137256"}, + {"2804:710:10::/32", "17222"}, + {"2a02:26f7:cf00::/48", "36183"}, + {"2a02:ee80:4121::/46", "3573"}, + {"240a:a3e2::/32", "143644"}, + {"240a:a56a::/32", "144036"}, + {"240e:44d:2240::/42", "140361"}, + {"2607:9100::/32", "21743"}, + {"2a0e:97c0:74f::/48", "208260"}, + {"2001:559:551::/46", "33659"}, + {"2001:da8:b8::/48", "24366"}, + {"2401:1400::/32", "9297"}, + {"2409:8e18::/31", "134810"}, + {"2804:42c4:c803::/48", "267524"}, + {"2a02:e0:3809::/33", "34984"}, + {"2a02:2e02:8f70::/40", "12479"}, + {"2a0a:af40::/32", "208075"}, + {"2001:df2:8200::/47", "135551"}, + {"2001:1398:121::/48", "52304"}, + {"2600:140f:a00::/48", "9498"}, + {"2800:160:14e4::/44", "14259"}, + {"2804:4cfc::/32", "267405"}, + {"2a01:5040::/42", "43996"}, + {"2a02:26f0:9201::/39", "20940"}, + {"2a11:a680::/29", "204790"}, + {"2001:438:fffd:11f::/58", "6461"}, + {"2001:da8:6f00::/48", "138378"}, + {"2602:fda1::/38", "397031"}, + {"2804:66f8::/32", "269595"}, + {"2a02:26f7:f884::/48", "36183"}, + {"2a02:4240::/32", "50266"}, + {"2a06:83c0::/29", "15391"}, + {"2001:3a0:f007::/48", "131079"}, + {"2001:559:12::/44", "7922"}, + {"2001:559:82ae::/47", "7015"}, + {"2400:57e0::/32", "142317"}, + {"2a07:aa00:7::/48", "203"}, + {"2001:559:722::/48", "7922"}, + {"2405:201:fffc::/30", "55836"}, + {"2620:0:500::/42", "11643"}, + {"2a00:4a00:8000::/33", "39356"}, + {"2a01:6020:f000::/36", "199070"}, + {"2a02:26f7:8f::/48", "20940"}, + {"2a04:5d00:71::/44", "60241"}, + {"2001:67c:1104::/48", "213021"}, + {"240e:108:11b4::/41", "4134"}, + {"240e:438:3a40::/37", "4134"}, + {"2605:59c2:1140::/33", "36492"}, + {"2a03:4f00::/32", "5524"}, + {"2a03:5ee0::/32", "3320"}, + {"2408:8779:c008::/30", "4837"}, + {"2607:fde8::/32", "3853"}, + {"2001:df0:c0::/48", "55741"}, + {"240a:a120::/32", "142938"}, + {"240a:ac78::/32", "145842"}, + {"2001:470:11b::/48", "395570"}, + {"2001:13c7:600d::/48", "52359"}, + {"2401:cac0::/32", "136982"}, + {"2404:8000:ba72::/33", "17451"}, + {"240a:a5a3::/32", "144093"}, + {"240a:ad70::/32", "146090"}, + {"2604:84c0::/32", "7979"}, + {"2604:d600:1558::/47", "32098"}, + {"2a01:7360::/32", "198290"}, + {"2a01:cb22::/34", "3215"}, + {"2a02:26f7:d1c1::/46", "20940"}, + {"2001:579:d204::/42", "22773"}, + {"2001:67c:24f4::/48", "196653"}, + {"2a04:fac0::/29", "212859"}, + {"2a0b:6b81:210::/48", "203729"}, + {"2001:49f8:40a::/48", "14230"}, + {"2408:8256:3780::/44", "17623"}, + {"2409:803c:30c0::/48", "9808"}, + {"240a:af9b::/32", "146645"}, + {"2806:2f0:4581::/46", "17072"}, + {"2a11:a980::/29", "204790"}, + {"2408:8256:2f8e::/43", "17623"}, + {"2806:250:d::/46", "28509"}, + {"2a02:26f7:cd44::/48", "36183"}, + {"2001:559:209::/48", "7016"}, + {"2602:ffc5:105::/48", "398395"}, + {"2804:24d4::/32", "52781"}, + {"2a00:1fa3::/29", "8359"}, + {"2a02:26f7:f109::/42", "20940"}, + {"2a09:4a47::/32", "23470"}, + {"2600:1012:b1c0::/44", "22394"}, + {"2605:a401:8ce3::/39", "33363"}, + {"2804:2540::/32", "264268"}, + {"2804:3e70:d008::/34", "266596"}, + {"2001:559:8262::/47", "33657"}, + {"240e:982::/39", "136195"}, + {"2804:a54:13::/32", "262664"}, + {"2001:250:210::/48", "24349"}, + {"2401:d800:29e0::/38", "7552"}, + {"2408:8406:5400::/39", "4808"}, + {"2a03:9c40::/48", "34655"}, + {"2a0a:ec02:301::/48", "42692"}, + {"2001:67c:6b0::/48", "34756"}, + {"2a04:4e40:f810::/41", "54113"}, + {"2a07:4f40::/29", "8426"}, + {"2a0d:12c0:1000::/48", "205804"}, + {"2401:4900:5850::/44", "45609"}, + {"2401:d800:75c0::/42", "7552"}, + {"2408:8956:b000::/40", "17622"}, + {"2804:4218::/34", "267477"}, + {"2a0c:1680::/29", "15874"}, + {"2001:57a:3a04::/47", "22773"}, + {"240a:a256::/32", "143248"}, + {"240e:938:a00::/44", "139203"}, + {"2a0b:d680::/32", "201127"}, + {"2a11:4280::/29", "210883"}, + {"2408:8956::/40", "17622"}, + {"240a:ad57::/32", "146065"}, + {"2a0b:5cc0::/32", "49432"}, + {"2001:559:381::/48", "7922"}, + {"2401:d800:5fb0::/41", "7552"}, + {"2804:332c::/32", "265379"}, + {"2a04:9a40::/29", "51373"}, + {"2a06:6d40::/29", "198090"}, + {"2a07:59c6:ca01::/45", "205413"}, + {"2001:510::/39", "376"}, + {"2400:e500:1::/42", "38742"}, + {"2402:800:7180::/42", "7552"}, + {"2602:fc64:ce00::/48", "36829"}, + {"2a0a:e5c0:13::/48", "208731"}, + {"2001:559:116::/48", "20214"}, + {"2001:559:80f9::/48", "33660"}, + {"2001:df1:c600::/48", "133821"}, + {"2001:b400:f220::/37", "3462"}, + {"240e:908:8000::/39", "137698"}, + {"2620:0:960::/48", "6223"}, + {"2806:230:4030::/48", "265594"}, + {"2a03:52a0::/39", "12557"}, + {"2602:fe90::/38", "35913"}, + {"2a02:ff0:e00::/40", "12735"}, + {"2401:d800:7fb2::/41", "7552"}, + {"2606:2800:6a60::/46", "15133"}, + {"2001:559:59d::/48", "33287"}, + {"2408:8776::/28", "4837"}, + {"240a:a24a::/32", "143236"}, + {"240c:c7ba::/20", "23910"}, + {"240e:67b:c400::/39", "140330"}, + {"2a00:1908::/36", "43586"}, + {"2a03:3840::/29", "199600"}, + {"2a05:19c0:2::/47", "59802"}, + {"2a0d:7b40::/29", "60016"}, + {"2a02:e90::/32", "15389"}, + {"2a02:26f7:c40c::/48", "36183"}, + {"2603:b000::/27", "11796"}, + {"2801:80:36d0::/48", "269216"}, + {"2804:7eb0::/32", "271641"}, + {"2a02:26f7:f204::/48", "36183"}, + {"2a03:e580::/32", "49282"}, + {"2a0d:df40::/29", "61272"}, + {"2402:8cc0:200::/40", "131137"}, + {"2406:840:f62f::/48", "140506"}, + {"2407:58c0::/32", "24277"}, + {"2409:8028::/40", "56041"}, + {"2409:8904:cfb0::/35", "24547"}, + {"2804:2cd4:90::/42", "265246"}, + {"2a06:a281::/32", "49117"}, + {"2a0a:68c0::/40", "134835"}, + {"2a0d:b201:80c0::/42", "206026"}, + {"2c0f:fbc0::/32", "37670"}, + {"2001:4998:ef5f::/42", "10310"}, + {"2405:d900::/32", "56004"}, + {"240a:a1d0::/32", "143114"}, + {"2a0c:9a40:808b::/48", "398646"}, + {"2600:141c:e001::/35", "20940"}, + {"2602:fc71:f00::/48", "400232"}, + {"2603:c013::/36", "31898"}, + {"2604:7c00::/32", "40244"}, + {"2a02:1370::/32", "39324"}, + {"2a04:f580:9212::/47", "4809"}, + {"2001:559:c2f9::/48", "33659"}, + {"2001:678:dc8::/48", "213032"}, + {"2001:67c:14b0::/48", "13127"}, + {"2001:fd0:e::/40", "10029"}, + {"2401:1801:1120::/32", "58683"}, + {"2402:ef04:f000::/31", "7633"}, + {"240e:3bb:c800::/37", "4134"}, + {"2600:1409:3::/48", "20940"}, + {"2a0b:b87:ffd2::/48", "213186"}, + {"2a0d:1a45:babe::/48", "210089"}, + {"2001:559:86ca::/48", "33287"}, + {"2001:b58::/29", "20626"}, + {"2408:8256:3087::/43", "17623"}, + {"2800:bf0:80ef::/43", "52257"}, + {"2a0b:a080:1::/48", "202165"}, + {"2001:67c:19a4::/48", "51815"}, + {"2001:1490:100::/48", "30857"}, + {"2600:140f:801::/39", "20940"}, + {"2607:f108::/38", "29838"}, + {"2801:82::/32", "10881"}, + {"2804:18:4878::/35", "26599"}, + {"2a0f:1140::/32", "34959"}, + {"2a02:26f7:f745::/46", "20940"}, + {"2a05:7880::/32", "209242"}, + {"2600:1016:f010::/39", "6167"}, + {"2600:370f:72a8::/47", "32261"}, + {"2a02:73a0:90::/48", "201895"}, + {"2001:44b8:30af::/48", "4739"}, + {"2408:8656:2ef0::/48", "17623"}, + {"240a:ad3f::/32", "146041"}, + {"240e:679:1800::/32", "4134"}, + {"2a0c:e186::/32", "204690"}, + {"2001:67c:2068::/48", "34261"}, + {"2402:800:5a0f::/43", "7552"}, + {"2402:800:b590::/42", "7552"}, + {"2404:4a00:8a00::/64", "55423"}, + {"2a00:1f78:fffe::/48", "39227"}, + {"2a02:26f7:e841::/46", "20940"}, + {"2a0b:11c0:bea::/48", "198682"}, + {"2a0c:b641:4f0::/44", "212653"}, + {"2a0c:db00::/29", "50467"}, + {"2406:840:e0c0::/45", "141429"}, + {"2408:80f1:180::/43", "17621"}, + {"2600:6c10:ff9d::/42", "20115"}, + {"2804:f74::/32", "263586"}, + {"2804:28e4:e002::/42", "28260"}, + {"2804:4fd8::/32", "268353"}, + {"2806:2f0:9b61::/46", "17072"}, + {"2400:d400:b97::/48", "45671"}, + {"240e:44d:3000::/41", "140345"}, + {"2803:8d00:e001::/35", "27988"}, + {"2804:7878::/32", "271244"}, + {"2409:8f50::/30", "56047"}, + {"2620:171:60::/48", "42"}, + {"2a01:8840:81::/48", "207266"}, + {"2001:67c:10e0::/48", "201612"}, + {"2409:8924:b700::/36", "56046"}, + {"2a01:4060::/32", "9063"}, + {"2a02:6b8:81::/48", "13238"}, + {"2001:559:c0ab::/45", "33490"}, + {"2407:e540::/32", "146969"}, + {"2409:8a04:6a00::/32", "24547"}, + {"2804:75c0::/32", "271067"}, + {"2806:108e:2::/47", "8151"}, + {"2a07:a740::/29", "57795"}, + {"2001:678:98c::/48", "31371"}, + {"2001:1900:2263::/48", "3356"}, + {"2804:100::/32", "28364"}, + {"2a04:4e40:b010::/41", "54113"}, + {"2606:3580::/32", "46450"}, + {"2a00:1cf8:8000::/33", "44944"}, + {"2a09:84c0::/37", "8145"}, + {"2803:ecc0::/37", "264814"}, + {"2804:1244::/32", "263466"}, + {"2a10:847:8000::/33", "3223"}, + {"2a10:7240::/32", "212574"}, + {"240a:ad2e::/32", "146024"}, + {"240a:adc2::/32", "146172"}, + {"2800:300:89e0::/43", "27651"}, + {"2a01:360::/29", "34549"}, + {"2001:49f0:d105::/44", "174"}, + {"2408:8459:10::/41", "17622"}, + {"2409:8d15:2a00::/30", "56044"}, + {"240e:981:8000::/40", "132153"}, + {"2602:feda:e39::/46", "147028"}, + {"2001:4408:c001::/46", "4758"}, + {"2402:8100:cb0::/35", "55644"}, + {"240e:1f:d000::/36", "134764"}, + {"2804:448c::/32", "267638"}, + {"2a02:ac80:e01::/39", "25145"}, + {"2a04:c340::/29", "44640"}, + {"2c0f:f528:40::/45", "327782"}, + {"2400:a440:144::/48", "18019"}, + {"2401:d800:bd70::/40", "7552"}, + {"2602:feda::/48", "46997"}, + {"2001:4430:6090::/36", "17853"}, + {"2408:8026:830::/32", "17621"}, + {"2804:db0:100::/40", "52862"}, + {"2a00:f0e0::/43", "198499"}, + {"2a06:e881:7700::/40", "212024"}, + {"2a0a:340:1400::/39", "48043"}, + {"2a10:87c0::/29", "49820"}, + {"2001:559:73a::/48", "33491"}, + {"2001:67c:10fc::/48", "3301"}, + {"2402:800:569b::/41", "7552"}, + {"2404:5d80:6300::/40", "33438"}, + {"240a:a426::/32", "143712"}, + {"240e:3bf:1400::/38", "134773"}, + {"2600:140f:e801::/38", "20940"}, + {"2a04:f580:80a0::/48", "4134"}, + {"2001:67c:234c::/48", "42204"}, + {"2001:df6:b500::/48", "136715"}, + {"240a:a081::/32", "142779"}, + {"240a:a8a3::/32", "144861"}, + {"2a10:8703::/32", "207925"}, + {"2604:2600::/32", "46209"}, + {"2a04:3f83:45::/44", "9120"}, + {"2001:559:c3dc::/48", "7015"}, + {"2001:1248:841e::/42", "11172"}, + {"2408:80ea:7680::/43", "17623"}, + {"2409:807c:2900::/35", "9808"}, + {"2607:fae0::/38", "8038"}, + {"2c0f:ef10::/32", "328262"}, + {"2605:bc0:2008::/48", "54201"}, + {"2804:7a68::/32", "271369"}, + {"2806:28e::/32", "265530"}, + {"2a02:230::/32", "43383"}, + {"2a02:26f7:dfcc::/47", "36183"}, + {"2a04:6540::/32", "200168"}, + {"2a12:4946:9900::/40", "211696"}, + {"2001:678:594::/48", "58132"}, + {"2401:4900:3e80::/42", "45609"}, + {"2a02:3c8::/32", "43892"}, + {"2a02:888:4047::/48", "47794"}, + {"2001:1248:8845::/44", "11172"}, + {"2409:807c:100::/36", "9808"}, + {"2804:812c::/32", "272437"}, + {"2a02:c280::/29", "198725"}, + {"2a04:5b81:2010::/44", "202265"}, + {"2a09:9f42::/29", "1239"}, + {"2408:8957:a000::/40", "17622"}, + {"2a04:4e40:1600::/47", "54113"}, + {"2a0d:9c40::/29", "210150"}, + {"240a:ac09::/32", "145731"}, + {"2604:d600:c71::/44", "32098"}, + {"2804:4acc::/32", "267264"}, + {"2804:4d58::/35", "268191"}, + {"2804:5ab4::/32", "268790"}, + {"2804:6f60::/32", "270656"}, + {"2a03:5a00:a::/48", "198778"}, + {"2a06:ed00::/29", "50642"}, + {"2600:6c20:249::/45", "20115"}, + {"2a00:79e1:f02::/45", "395973"}, + {"2a09:380::/29", "204860"}, + {"2001:440:1800::/48", "1880"}, + {"2610:b0:415b::/42", "3573"}, + {"2610:150::/32", "46844"}, + {"2804:42c8::/32", "267526"}, + {"2804:57e4::/32", "268093"}, + {"2a03:e140:3a::/48", "16262"}, + {"2402:9800:4006::/48", "138138"}, + {"240a:a4df::/32", "143897"}, + {"240e:1a:20::/44", "23650"}, + {"2a00:ca8::/32", "30764"}, + {"2a0d:9340:1004::/29", "35761"}, + {"2001:559:3ce::/48", "33668"}, + {"2001:978:7303::/37", "174"}, + {"2a00:a640::/46", "13445"}, + {"2a06:c7c0::/29", "198024"}, + {"2001:480:91::/44", "668"}, + {"2001:7e0::/32", "13285"}, + {"2400:7400:e022::/48", "38044"}, + {"240a:a97f::/32", "145081"}, + {"240a:af87::/32", "146625"}, + {"2803:5440:4049::/48", "264738"}, + {"2804:104::/32", "262685"}, + {"2a0e:7d40:44::/44", "209833"}, + {"2600:1007:f002::/45", "6167"}, + {"2a02:23f8::/32", "24590"}, + {"2605:6880::/32", "63052"}, + {"2605:9780::/48", "36180"}, + {"2607:f460::/32", "22742"}, + {"2804:14c0::/32", "263348"}, + {"2001:5a8::/32", "46375"}, + {"2001:1248:989c::/42", "11172"}, + {"2001:1a11:12e::/48", "8781"}, + {"2401:d800:9410::/42", "7552"}, + {"2409:8c85:aa35::/44", "9808"}, + {"2804:6114::/32", "269211"}, + {"2001:1248:a4d6::/44", "11172"}, + {"2402:d840::/32", "134555"}, + {"240c:c804::/23", "23910"}, + {"2804:190:300::/32", "53165"}, + {"2804:3210::/35", "262779"}, + {"2804:7d84::/32", "271566"}, + {"2a02:26f7:e640::/48", "36183"}, + {"2a06:1e00:40::/48", "60695"}, + {"2001:559:82da::/48", "33662"}, + {"240a:a153::/32", "142989"}, + {"2600:141c:8::/36", "20940"}, + {"2001:4de0:7001::/46", "33438"}, + {"2403:40c0::/48", "45215"}, + {"2604:a180:a000::/35", "22933"}, + {"2a04:3cc0:800::/35", "31036"}, + {"2402:e280:2162::/45", "134674"}, + {"2001:559:c48f::/48", "7922"}, + {"2404:8000:b3::/41", "17451"}, + {"2405:6e00:200::/42", "133612"}, + {"2408:8956:3300::/40", "17816"}, + {"2409:8087:3021::/40", "9808"}, + {"2606:fd80::/32", "2552"}, + {"2806:230:102e::/48", "265594"}, + {"2a01:5e80::/32", "42789"}, + {"2404:f4c0:f000::/44", "24239"}, + {"2408:84f3:3690::/36", "17816"}, + {"2408:8956:2700::/36", "17816"}, + {"2602:fed2:7311::/48", "53356"}, + {"2804:58ec::/32", "268158"}, + {"2001:57a:9204::/46", "22773"}, + {"2001:c38:9000::/44", "9931"}, + {"2402:800:3671::/44", "7552"}, + {"240a:a437::/32", "143729"}, + {"240a:a775::/32", "144559"}, + {"2804:54c::/32", "262507"}, + {"2804:8c0::/32", "262391"}, + {"2a01:5041:2000::/48", "202196"}, + {"2a03:90c0:500::/40", "199524"}, + {"2a06:a005:3c0::/42", "149296"}, + {"2a0c:b641:690::/46", "209297"}, + {"2804:25f0::/32", "264311"}, + {"2a00:1e80::/32", "21473"}, + {"2a01:8640:4::/47", "202015"}, + {"2001:dce:101::/48", "45285"}, + {"2a09:b681::/32", "208861"}, + {"2a0d:b00:2901::/48", "205862"}, + {"2001:67c:2fb4::/48", "200826"}, + {"2001:6d8::/32", "8267"}, + {"2401:d800:b300::/42", "7552"}, + {"2620:107:a000::/40", "20"}, + {"2a11:2800::/48", "42831"}, + {"2406:e00:10e::/47", "55740"}, + {"240a:a58a::/32", "144068"}, + {"2604:ca00:233::/48", "36492"}, + {"2804:37f0:a900::/35", "266445"}, + {"2806:2f0:3163::/40", "17072"}, + {"2a02:26f7:3e::/48", "36183"}, + {"2a0f:52c1::/48", "212319"}, + {"2401:3bc0:f::/37", "137409"}, + {"2804:50f4::/32", "268421"}, + {"2406:840:e80f::/48", "134488"}, + {"2610:190::/38", "62"}, + {"2a0b:3e00::/32", "14076"}, + {"2001:df0:214::/48", "132696"}, + {"240a:a053::/32", "142733"}, + {"240a:a33b::/32", "143477"}, + {"2a01:b1c0::/32", "48200"}, + {"2a02:26f7:e389::/46", "20940"}, + {"2804:82b0::/32", "272534"}, + {"2a0f:e404:100::/46", "58057"}, + {"2001:438:fffd:6d::/55", "6461"}, + {"2600:6c38:a31::/45", "20115"}, + {"2804:8d0::/32", "28269"}, + {"2400:f280:2200::/39", "55766"}, + {"2406:6e00:f049::/36", "17457"}, + {"240a:a677::/32", "144305"}, + {"2a10:9fc0::/29", "40970"}, + {"2001:559:8742::/47", "33491"}, + {"2001:628:454::/35", "1853"}, + {"2001:67c:1894::/48", "3301"}, + {"2001:dc0:a000::/35", "4608"}, + {"2408:8456:e010::/42", "134543"}, + {"2602:feb4:1a0::/44", "25961"}, + {"2a02:2780::/32", "35434"}, + {"2a03:4cc0::/32", "199569"}, + {"2001:559:238::/46", "33287"}, + {"2001:579:b11c::/41", "22773"}, + {"2a02:26f7:d0c8::/48", "36183"}, + {"2a0b:8c80::/29", "206420"}, + {"2a0f:7880:100::/40", "210542"}, + {"2a0f:aac0:2::/48", "14618"}, + {"2001:1968::/32", "7029"}, + {"2401:2e00::/32", "37963"}, + {"2404:bd00:a::/45", "58678"}, + {"240e:982:8100::/40", "133775"}, + {"2001:1248:9a54::/44", "11172"}, + {"2001:44b8:4057::/48", "4739"}, + {"2402:800:9b9b::/42", "7552"}, + {"2409:8080:2a10::/44", "9808"}, + {"2a03:6f00:1::/45", "9123"}, + {"2604:8440::/32", "32217"}, + {"2804:280::/32", "53219"}, + {"2804:6e0c::/32", "270572"}, + {"2a0d:4d40::/44", "50630"}, + {"2a04:4e40:6610::/44", "54113"}, + {"2a0f:be00::/29", "208250"}, + {"2001:da8:8017::/44", "23910"}, + {"240e:378::/35", "140329"}, + {"2603:c002:9a30::/39", "31898"}, + {"2804:14c:4700::/40", "28573"}, + {"2a02:26f7:c249::/40", "20940"}, + {"2600:141c:1001::/36", "20940"}, + {"2600:370f:738b::/42", "32261"}, + {"2a00:1600::/32", "50195"}, + {"2a05:35c0::/46", "60781"}, + {"2001:559:c45b::/48", "33650"}, + {"2403:e240::/32", "4767"}, + {"2405:4803:dda0::/34", "18403"}, + {"2600:100f:a010::/40", "22394"}, + {"2603:90b1::/32", "10838"}, + {"2800:bf0:8068::/46", "52257"}, + {"2c0f:f778::/32", "37009"}, + {"2400:32e0::/48", "140770"}, + {"2408:8456:be10::/42", "134543"}, + {"240a:a731::/32", "144491"}, + {"2600:1006:d160::/34", "22394"}, + {"2600:1480:580c::/47", "21342"}, + {"2606:2800:4204::/46", "15133"}, + {"2a02:16c8::/32", "6871"}, + {"2001:67c:22f4::/48", "200490"}, + {"240e:108:1162::/45", "4134"}, + {"2604:3e00::/32", "2552"}, + {"2804:18:830::/44", "26599"}, + {"2a0d:2902:caf9::/45", "204185"}, + {"2604:8600:9000::/33", "14453"}, + {"2803:9800:ba01::/33", "11664"}, + {"2a00:edc0:136::/48", "136468"}, + {"2a04:2b01::/30", "42044"}, + {"2a10:1c80::/29", "400522"}, + {"2001:1260:5::/48", "28544"}, + {"2607:9e80:1281::/39", "397068"}, + {"2620:d8:c000::/48", "7784"}, + {"2803:1040:2000::/32", "263751"}, + {"2804:2004::/32", "264460"}, + {"2a00:1d80::/32", "6789"}, + {"240a:af65::/32", "146591"}, + {"240e:974:eb00::/40", "38283"}, + {"2a09:bac0:1000::/47", "13335"}, + {"2001:c10:ff13::/44", "7473"}, + {"2409:805e:900::/35", "9808"}, + {"2409:8924:3100::/38", "56046"}, + {"2600:1406:ac00::/48", "35994"}, + {"2606:2800:4ad0::/47", "15133"}, + {"2620:39:6000::/48", "25682"}, + {"2804:90:6700::/32", "28580"}, + {"2804:14a8::/32", "263342"}, + {"2a02:508::/32", "8473"}, + {"2001:559:9f::/48", "7922"}, + {"2607:3f00:4::/42", "46261"}, + {"2607:5200::/32", "18501"}, + {"2610:18::/32", "2828"}, + {"2a01:c50f:e7c0::/36", "12479"}, + {"240a:aa15::/32", "145231"}, + {"240e:108:1151::/46", "4134"}, + {"2804:6fc8:8000::/37", "270684"}, + {"2a01:b8::/32", "8978"}, + {"2c0f:e878::/32", "60171"}, + {"2001:502:7094::/48", "396566"}, + {"2001:559:c4bc::/48", "33659"}, + {"2408:8957:cbc0::/37", "17622"}, + {"2409:8904:e040::/42", "24547"}, + {"2800:160:1880::/45", "14259"}, + {"2804:8024::/32", "271732"}, + {"2806:2f0:3243::/42", "17072"}, + {"2a02:587:501b::/40", "6799"}, + {"2a09:7d40:9::/32", "209382"}, + {"2001:559:87f1::/48", "20214"}, + {"2001:da8:8002::/48", "24366"}, + {"2401:9640::/32", "133982"}, + {"2604:9b40::/32", "29848"}, + {"2804:4218:3100::/32", "267477"}, + {"2a06:1000::/29", "35041"}, + {"2400:f7c0::/32", "133952"}, + {"2804:1b40::/35", "28255"}, + {"2001:250:4800::/44", "24360"}, + {"2001:4878:8102::/48", "12222"}, + {"2604:8600:7000::/32", "14453"}, + {"2806:2f0:3041::/46", "17072"}, + {"2a0f:bc0::/29", "203536"}, + {"2400:ad40::/32", "136262"}, + {"2606:cf00::/32", "54327"}, + {"2607:fc08::/32", "46786"}, + {"2a02:2308:31::/32", "29028"}, + {"2405:9800:c926::/44", "45430"}, + {"240a:a5f0::/32", "144170"}, + {"2804:3968::/32", "266029"}, + {"2804:4580:800::/35", "266931"}, + {"2a00:d0c0:200::/48", "205766"}, + {"2400:35e0::/32", "149026"}, + {"2404:2640:4000::/32", "138523"}, + {"2604:d600:1236::/44", "32098"}, + {"2408:8956:6200::/40", "17622"}, + {"2604:cac0:49::/48", "11019"}, + {"2801:bc:2000::/32", "28601"}, + {"2804:6a8c::/32", "270343"}, + {"2409:8053:2802::/38", "56047"}, + {"2620:171:59::/45", "715"}, + {"2a0f:9400:770c::/48", "53356"}, + {"2403:300:a31::/48", "714"}, + {"2605:8a40::/32", "13855"}, + {"2a01:c50f:fcc0::/39", "12479"}, + {"2a03:d900::/32", "49079"}, + {"2a0e:b107:ac2::/48", "204307"}, + {"2001:da8:267::/44", "23910"}, + {"2402:800:9a01::/44", "7552"}, + {"2803:4600:111b::/36", "14754"}, + {"2804:d84::/36", "28171"}, + {"2a0b:e46:1::/48", "203055"}, + {"2001:67c:1444::/48", "43832"}, + {"240a:a8f8::/32", "144946"}, + {"2a02:26f7:9a::/48", "36183"}, + {"2a03:7180::/32", "8499"}, + {"2a09:1380::/29", "209815"}, + {"2001:503:e239::/48", "397226"}, + {"2409:8904:38a0::/39", "24547"}, + {"240e:980:4e00::/40", "136195"}, + {"2600:5002:1807::/28", "7029"}, + {"2600:6c10:37::/44", "20115"}, + {"240e:1a:50::/39", "23650"}, + {"2600:380:c600::/39", "20057"}, + {"2a0d:6fc0::/29", "12400"}, + {"2001:eb0:100::/46", "9584"}, + {"2409:8915:4c00::/39", "56044"}, + {"240e:3b3:7800::/39", "4134"}, + {"2610:a1:fff::/48", "12008"}, + {"2a01:348::/41", "39326"}, + {"2a01:7140::/32", "41849"}, + {"2a0d:52c0::/29", "210129"}, + {"240a:a9a2::/32", "145116"}, + {"2607:f740:e610::/48", "63911"}, + {"2a03:9d40:4000::/40", "41095"}, + {"2a10:cb42::/29", "198328"}, + {"2804:768:880::/35", "52977"}, + {"2804:3c70::/32", "266211"}, + {"2408:8956:4300::/40", "17816"}, + {"2600:6c10:a1::/45", "20115"}, + {"2600:6c2e:711::/36", "20115"}, + {"2804:544::/32", "262505"}, + {"2804:3288::/32", "52827"}, + {"2a02:26f0:8e00::/48", "34164"}, + {"2a02:2750::/32", "8245"}, + {"2a02:6c00::/37", "786"}, + {"2001:df4:b400::/48", "17701"}, + {"2402:8100:20c8::/47", "55644"}, + {"2a02:e980:12f::/43", "19551"}, + {"2001:559:83d2::/47", "7725"}, + {"2804:5ccc::/36", "268931"}, + {"2a0c:eec0::/29", "50819"}, + {"2001:428:6808::/48", "19648"}, + {"2001:559:c1d3::/48", "33657"}, + {"2804:d50::/28", "8167"}, + {"2a01:a8c0::/29", "44712"}, + {"2a0d:1a40:fa0::/47", "202313"}, + {"2800:484:2400::/38", "14080"}, + {"2804:1bf4::/32", "61759"}, + {"2a01:6f0:fffe::/48", "36351"}, + {"2001:fd8:1e1::/46", "4775"}, + {"2600:1003:9110::/37", "22394"}, + {"2806:217:602::/32", "28394"}, + {"2a02:26f7:d984::/48", "36183"}, + {"2a02:26f7:f984::/48", "36183"}, + {"2001:559:c456::/48", "7922"}, + {"2804:34:2025::/32", "28306"}, + {"2a01:53c0:ffed::/43", "54994"}, + {"2001:550:7705::/46", "174"}, + {"240a:a70a::/32", "144452"}, + {"2607:f740:e03a::/48", "63911"}, + {"2804:c54::/32", "262650"}, + {"2a05:ca40::/29", "41906"}, + {"2403:ae00::/32", "38766"}, + {"2409:8e10::/30", "9808"}, + {"2a0c:e643:1984::/48", "146992"}, + {"2001:16a2:8200::/40", "25019"}, + {"2600:1417:c000::/48", "24319"}, + {"2800:8a0:c400::/38", "5722"}, + {"2a01:758:1::/32", "3326"}, + {"2a02:d10::/32", "9050"}, + {"2001:3a8::/32", "9848"}, + {"2600:141b:3801::/33", "20940"}, + {"2001:418:144e::/47", "15562"}, + {"2408:8256:2d9f::/38", "17816"}, + {"240a:a8a7::/32", "144865"}, + {"2804:694:4500::/38", "262596"}, + {"2804:269c:fe05::/48", "47065"}, + {"2806:20d:3214::/46", "32098"}, + {"2a02:26f7:ca::/48", "36183"}, + {"2a02:26f7:f889::/46", "20940"}, + {"2a12:9240::/32", "198034"}, + {"2600:6c10:fff6::/47", "20115"}, + {"2607:6800::/32", "27258"}, + {"2a02:440::/32", "30968"}, + {"2a02:26f0:96::/48", "34164"}, + {"2a04:9a00:1113::/48", "208153"}, + {"2a0b:11c0:11::/44", "198682"}, + {"2001:4478:1312::/48", "4739"}, + {"2001:4cb8:c1::/38", "28878"}, + {"2401:f540:1::/46", "134094"}, + {"240a:af53::/32", "146573"}, + {"2800:160:21a4::/41", "14259"}, + {"2404:2440:e0e0::/48", "138521"}, + {"2405:7f00:8900::/38", "133414"}, + {"240e:44d:1280::/41", "4134"}, + {"2800:860::/47", "262197"}, + {"2a00:15f8:a001::/33", "25532"}, + {"2a00:d360::/29", "15600"}, + {"2a0c:ab40::/29", "51105"}, + {"2a0e:bc00::/29", "206316"}, + {"2804:cc4::/43", "52551"}, + {"2001:678:1e0::/48", "202739"}, + {"2404:fa00::/34", "45780"}, + {"2620:123:d001::/48", "3356"}, + {"2a02:2290::/48", "206610"}, + {"2a02:26f7:b684::/48", "36183"}, + {"2a02:26f7:de91::/42", "20940"}, + {"2400:7400:e037::/35", "38044"}, + {"240a:a7a3::/32", "144605"}, + {"2600:803:1201::/29", "701"}, + {"2607:f740:50::/48", "36236"}, + {"2a02:26f7:b2::/48", "36183"}, + {"2a03:db02::/32", "25086"}, + {"240e:e1:9c00::/38", "4812"}, + {"2600:141b:3800::/48", "35994"}, + {"2001:559:c400::/48", "33651"}, + {"2402:1200:4::/44", "24523"}, + {"2a0e:8f02:f014::/48", "212268"}, + {"2001:67c:2278::/48", "44574"}, + {"2806:2f0:3121::/46", "17072"}, + {"2a00:1138::/33", "43782"}, + {"2a00:1490:fac1::/48", "42416"}, + {"2a09:5ec0::/29", "209428"}, + {"2001:67c:2a74::/48", "57839"}, + {"2405:6ac0::/32", "139736"}, + {"2409:8a4c:ce00::/31", "9808"}, + {"240a:a263::/32", "143261"}, + {"240e:a7:7fd5::/46", "140515"}, + {"2602:fed9::/36", "209"}, + {"2603:90f5:700::/40", "11351"}, + {"2804:5d78::/36", "268974"}, + {"2a02:d3c7::/32", "59565"}, + {"2408:8459:cd30::/41", "17622"}, + {"2408:8956:7e00::/40", "17622"}, + {"2602:ffe2:53::/45", "53334"}, + {"2a01:73c0:124::/37", "21450"}, + {"2001:559:153::/45", "7922"}, + {"2400:ac40:b80::/42", "136255"}, + {"2804:5884::/32", "268134"}, + {"2404:b0:2000::/47", "9891"}, + {"2605:3380:44fe::/47", "12025"}, + {"2804:2204::/32", "264586"}, + {"2c0f:fb18::/32", "37199"}, + {"2c0f:fe38:2060::/39", "33771"}, + {"2001:428:c0c::/48", "19604"}, + {"2001:df3:9a00::/48", "135769"}, + {"2001:1900:3012::/48", "6086"}, + {"2001:2060::/30", "1759"}, + {"240e:878:400::/39", "4134"}, + {"2a03:5640:f510::/46", "2906"}, + {"2001:67c:1bf0::/48", "33885"}, + {"2001:4878:c031::/48", "12222"}, + {"2402:800:512b::/41", "7552"}, + {"2604:3400:dc1::/48", "209453"}, + {"2001:df7:dc80::/48", "17487"}, + {"2402:800:f110::/42", "7552"}, + {"2001:559:8783::/45", "7922"}, + {"2001:67c:1100::/48", "197498"}, + {"2001:1260:2::/48", "28537"}, + {"2405:6e00:f820::/48", "133612"}, + {"2604:9cc0:a::/38", "50131"}, + {"2804:5f98::/32", "269111"}, + {"2a03:ff40::/33", "61102"}, + {"2a0f:a01:3::/45", "7018"}, + {"2001:559:326::/48", "13367"}, + {"2001:df7:6100::/48", "138504"}, + {"2402:3a80:1a20::/41", "38266"}, + {"2800:1e0:b02::/37", "7195"}, + {"2804:6040::/32", "269155"}, + {"2402:a300:8006::/44", "55427"}, + {"2001:1a11:ae::/48", "8781"}, + {"2404:4a00:2::/64", "55423"}, + {"240a:ad29::/32", "146019"}, + {"2602:fe6b::/36", "46475"}, + {"2a0f:9400:8023::/48", "213092"}, + {"2001:78c::/32", "57651"}, + {"2401:fa00:40::/47", "24424"}, + {"2607:da00:190::/36", "15164"}, + {"2804:5148::/32", "268443"}, + {"2c0f:fa28::/32", "37054"}, + {"2001:559:24e::/48", "33659"}, + {"2404:8e01::/32", "55392"}, + {"2a02:88d:811f::/48", "47794"}, + {"2a0f:a300::/32", "44326"}, + {"2001:559:c387::/48", "7016"}, + {"2400:8bc0::/32", "134907"}, + {"2408:8957:4c00::/40", "17622"}, + {"2600:1008:f010::/40", "22394"}, + {"2602:807:5000::/46", "55136"}, + {"2602:fcef::/36", "398984"}, + {"2a02:1778::/32", "41079"}, + {"2402:e380:310::/48", "138632"}, + {"2404:2440:c0c0::/48", "138521"}, + {"2409:8b3c::/32", "24444"}, + {"2607:f4e0:300::/32", "4150"}, + {"2620:0:1a20::/48", "33368"}, + {"2804:214::/47", "26615"}, + {"2804:6c58::/32", "270462"}, + {"2a01:c9c0:b1::/45", "24600"}, + {"2a02:26f7:de41::/46", "20940"}, + {"2a0d:8d06:1003::/32", "60557"}, + {"2408:8244::/35", "140726"}, + {"2600:380:f110::/40", "7018"}, + {"2604:5500:ac00::/38", "19165"}, + {"2607:b300:fd03::/48", "54994"}, + {"2804:4fc0::/32", "268347"}, + {"2806:2f0:34e1::/39", "17072"}, + {"2001:550:6600:1::/46", "174"}, + {"2606:800::/32", "1442"}, + {"2a02:c205::/30", "51167"}, + {"2a09:a4c7:8000::/36", "210625"}, + {"2402:800:961d::/41", "7552"}, + {"2001:da8:20f::/48", "24349"}, + {"2401:d800:5270::/40", "7552"}, + {"2804:2f3c::/34", "264879"}, + {"2a00:11c0:39::/48", "42473"}, + {"2a01:8dc0:109::/48", "29479"}, + {"2400:cb00:40::/47", "13335"}, + {"2600:2001::/32", "33517"}, + {"2620:65:a000::/48", "13536"}, + {"2804:13d0:99c0::/38", "263297"}, + {"2804:2fb0::/32", "264906"}, + {"2001:388:3058::/48", "24433"}, + {"2001:559:21::/48", "7015"}, + {"2409:8720:c800::/34", "56046"}, + {"2600:9000:1e4f::/43", "16509"}, + {"2804:7a0c::/32", "271344"}, + {"2001:4010::/32", "44444"}, + {"2404:188::/29", "6619"}, + {"2405:4cc1:d00::/40", "9471"}, + {"240a:aefe::/32", "146488"}, + {"2a04:aa40::/32", "47176"}, + {"2a06:85c0::/48", "202610"}, + {"2a0b:8f80:1::/48", "200746"}, + {"2001:4968::/32", "30513"}, + {"2604:8600:5000::/34", "14453"}, + {"2804:f24:9a11::/33", "263567"}, + {"2a02:26f7:c3c8::/47", "36183"}, + {"2402:e280:2201::/44", "134674"}, + {"240a:a1f2::/32", "143148"}, + {"2603:90b7::/32", "20001"}, + {"2804:4bb4:2000::/32", "267325"}, + {"2a02:26f7:be44::/48", "36183"}, + {"240a:a01a::/32", "142676"}, + {"2a01:66c0::/32", "58308"}, + {"2a0c:4480:a::/48", "204720"}, + {"2001:559:450::/47", "33668"}, + {"2001:67c:2890::/48", "43862"}, + {"2001:df0:d780::/48", "139288"}, + {"240a:a154::/32", "142990"}, + {"2600:6c10:d4::/46", "20115"}, + {"2a06:6541:1440::/48", "8220"}, + {"2a0a:d980::/31", "213113"}, + {"2a0f:1e00:456::/48", "30633"}, + {"2409:8030:1900::/34", "9808"}, + {"240e:352:6400::/31", "4134"}, + {"2605:70c0::/32", "398013"}, + {"2606:cc0:10::/47", "40676"}, + {"2804:3ba0::/32", "52688"}, + {"2620:0:2ea1::/48", "26777"}, + {"2a0c:9a40:8040::/43", "213392"}, + {"2602:fc5d:707::/48", "399866"}, + {"2607:f3f0:3::/32", "16724"}, + {"2a02:2e02:27c0::/36", "12479"}, + {"2402:5c40:5c42::/48", "64089"}, + {"2409:803c:30c1::/42", "24444"}, + {"240a:a0b0::/32", "142826"}, + {"240a:aee7::/32", "146465"}, + {"2604:5040:11::/48", "20150"}, + {"2605:3380:412e::/43", "12025"}, + {"2804:47e4::/32", "267083"}, + {"2a02:2090:6800::/48", "43489"}, + {"2a0b:4d07:501::/48", "44239"}, + {"2a0e:fa00:1::/48", "49447"}, + {"2001:428:f000::/36", "3908"}, + {"2804:e30:dc00::/38", "11338"}, + {"2804:1498::/32", "263339"}, + {"2a07:4bc0::/29", "198537"}, + {"2a0c:9a40:81a0::/48", "213385"}, + {"2001:da8:243::/48", "24348"}, + {"2401:c5c0:201::/37", "55492"}, + {"2406:7400:10::/46", "24309"}, + {"240a:a18a::/32", "143044"}, + {"2400:181::/48", "4766"}, + {"240a:afb1::/32", "146667"}, + {"2804:5420::/32", "268630"}, + {"2a02:26f0:c201::/37", "20940"}, + {"2a03:c8c0::/29", "50476"}, + {"2a0f:607:1056::/48", "212057"}, + {"2800:bf0:2ca::/35", "27947"}, + {"240a:a4d6::/32", "143888"}, + {"2606:8e80:53::/48", "32133"}, + {"2804:18:7800::/43", "26599"}, + {"2a04:42c0::/29", "12593"}, + {"2a0b:20c0:2001::/36", "205766"}, + {"2402:6f40:1::/48", "4812"}, + {"2404:1c40:ff::/39", "24432"}, + {"2804:4b28::/32", "267287"}, + {"2a0b:2780::/29", "43260"}, + {"2a10:c941:10:d::/47", "35277"}, + {"2407:cdc0:e014::/46", "38136"}, + {"2409:804b:2908::/48", "24445"}, + {"240a:acf5::/32", "145967"}, + {"2602:800:c000::/38", "397695"}, + {"2804:18f0::/32", "61764"}, + {"2001:1a08::/32", "15830"}, + {"240a:a81c::/32", "144726"}, + {"2800:bf0:828c::/47", "27947"}, + {"2804:22b0::/32", "264116"}, + {"2a01:768::/32", "25563"}, + {"2a0a:6340::/29", "42624"}, + {"2a0e:d601:7220::/48", "202436"}, + {"2403:c240::/32", "9264"}, + {"2600:6c38:b1c::/46", "20115"}, + {"2605:aa40:c1e5::/34", "395394"}, + {"2a0b:7d40:1::/46", "205583"}, + {"2a0c:b641:5d0::/48", "212952"}, + {"2001:57a:eff1::/35", "22773"}, + {"2001:df4:f900::/48", "137351"}, + {"2804:ac::/32", "18547"}, + {"2406:840:80::/47", "139317"}, + {"2408:8956:f4c0::/38", "17816"}, + {"2800:490:e000::/39", "27951"}, + {"2800:bf0:3780::/45", "52257"}, + {"2a00:1288:f043::/48", "23880"}, + {"2a03:8b60::/45", "29256"}, + {"2a0d:2144::/38", "39083"}, + {"2001:559:84d9::/46", "7015"}, + {"2409:8924:6700::/36", "56046"}, + {"240a:a890::/32", "144842"}, + {"2607:6480:4000::/35", "395337"}, + {"2001:550:a01::/48", "18640"}, + {"2602:ffdf::/38", "63060"}, + {"2604:1d40:200::/40", "30612"}, + {"2402:7f40::/32", "137166"}, + {"2404:6480::/32", "135130"}, + {"2408:8957:f8c0::/37", "17816"}, + {"2a01:aea0:df6::/32", "42473"}, + {"2a06:8c0::/29", "200739"}, + {"2a0e:b107:cb0::/44", "212948"}, + {"2a11:e487:cafe::/48", "212568"}, + {"2600:1010:e000::/44", "6167"}, + {"2803:4610::/32", "271939"}, + {"2a02:2010:2110::/45", "20978"}, + {"2001:559:8733::/45", "33651"}, + {"2402:3a80:1e64::/40", "38266"}, + {"2607:fd48:300:100::/47", "13536"}, + {"2803:e080::/32", "12150"}, + {"2001:559:fe::/39", "7922"}, + {"2001:559:c013::/48", "33491"}, + {"2001:559:8060::/48", "21508"}, + {"2001:c20:7805::/46", "3758"}, + {"2406:e580::/32", "63679"}, + {"2408:8120:7000::/36", "9929"}, + {"240a:a753::/32", "144525"}, + {"2607:fdc8:800::/48", "30036"}, + {"2804:2f60:200::/32", "264887"}, + {"2001:4c8:1111::/33", "15290"}, + {"2a02:5260::/29", "59775"}, + {"2a0a:d180:1000::/29", "206652"}, + {"2409:8904:4260::/39", "24547"}, + {"2803:1680:3000::/36", "21351"}, + {"2a0a:4a40:2273::/29", "206754"}, + {"2600:100c:9010::/38", "22394"}, + {"2620:11a:6000::/44", "32064"}, + {"2a02:27ab::/32", "21100"}, + {"2a02:6600::/32", "5377"}, + {"2a02:ddc3::/48", "47246"}, + {"2001:67c:2eac::/48", "211060"}, + {"2401:7500:fffd::/48", "33480"}, + {"240a:a2b2::/32", "143340"}, + {"2605:38c0::/32", "393601"}, + {"2620:13f:7018::/47", "51439"}, + {"2a01:58:6106::/48", "12552"}, + {"2a09:bd00:ffca::/48", "8985"}, + {"2a0b:1740::/29", "42202"}, + {"2001:550:6f01::/35", "174"}, + {"2406:600::/34", "4694"}, + {"2409:8000:3900::/33", "9808"}, + {"2804:26a4::/32", "263846"}, + {"2a06:cc0::/29", "30929"}, + {"2a0e:8f02:2120::/46", "211635"}, + {"2001:44c8:46b0::/44", "131445"}, + {"2400:ffc0:13c::/47", "17439"}, + {"240a:a342::/32", "143484"}, + {"2606:2800:4290::/48", "15133"}, + {"2804:64fc::/33", "269461"}, + {"2a02:7280::/32", "49572"}, + {"2a04:f240::/29", "201825"}, + {"2a07:b8c1:6::/43", "14043"}, + {"2407:4b40::/47", "141796"}, + {"2800:160:2c37::/44", "14259"}, + {"2804:51b0::/32", "268470"}, + {"2408:80ea:6300::/41", "17816"}, + {"2605:2280::/32", "62886"}, + {"2804:4b54::/32", "267298"}, + {"2a00:7180:8010::/46", "212775"}, + {"2a02:26f7:e2c4::/48", "36183"}, + {"2a0e:b107:5a1::/46", "203943"}, + {"2001:67c:28cc::/48", "51468"}, + {"240a:ad23::/32", "146013"}, + {"2600:1000:9f00::/44", "6167"}, + {"2610:e0:a001::/44", "2572"}, + {"2800:160:1acf::/43", "14259"}, + {"2a02:ac87:ac88::/33", "25145"}, + {"2405:3200::/39", "17639"}, + {"2602:ffc5:30::/46", "7489"}, + {"2a03:b8c0:20::/45", "396253"}, + {"2409:8070:1100::/36", "9808"}, + {"2a03:5342:10::/42", "200656"}, + {"2a03:9180:2::/47", "199813"}, + {"2001:1838:5003::/40", "23352"}, + {"240a:aa81::/32", "145339"}, + {"240a:af93::/32", "146637"}, + {"2804:315c::/32", "265009"}, + {"2a02:2698:9800::/38", "31363"}, + {"2a03:3000::/32", "42772"}, + {"2a0a:3140:1610::/44", "15532"}, + {"2a0d:2146:2404::/48", "44592"}, + {"2a11:3380::/29", "20565"}, + {"2001:e60:a488::/38", "4766"}, + {"2001:1248:5916::/44", "11172"}, + {"2001:1a10:2::/40", "8781"}, + {"2600:1409:3801::/33", "20940"}, + {"2610:a1:1028::/48", "19905"}, + {"2800:3f0::/33", "15169"}, + {"2401:8800:4::/43", "17439"}, + {"240a:a358::/32", "143506"}, + {"240a:ac95::/32", "145871"}, + {"2620:109:40::/40", "10753"}, + {"2804:13b8::/32", "263548"}, + {"2a02:6da0::/29", "47638"}, + {"2408:8456:5000::/42", "17622"}, + {"2408:8459:c930::/41", "17622"}, + {"240a:ae3f::/32", "146297"}, + {"240a:aff6::/32", "146736"}, + {"2600:1406:201::/39", "20940"}, + {"2803:2a00::/38", "27895"}, + {"2804:7114::/32", "270765"}, + {"2a0f:d600::/39", "208236"}, + {"2600:370f:350e::/42", "32261"}, + {"2a02:2968::/29", "48635"}, + {"2a10:9903:110::/44", "15510"}, + {"2001:559:90::/48", "7725"}, + {"2001:df2:4100::/48", "132304"}, + {"2001:1aea::/32", "5588"}, + {"240a:ac5c::/32", "145814"}, + {"2604:10c0:ffff::/48", "40034"}, + {"2800:160:2b07::/41", "14259"}, + {"2803:1780:8000::/48", "264646"}, + {"2804:6348::/32", "269351"}, + {"2a11:a880::/29", "204790"}, + {"2804:52b4::/32", "268535"}, + {"2a00:1c88:100::/48", "209242"}, + {"2001:559:c005::/48", "7016"}, + {"2408:8256:318c::/48", "17816"}, + {"2603:fb80::/27", "397165"}, + {"2a0d:1580::/48", "202085"}, + {"2001:559:822a::/48", "21508"}, + {"2001:678:4a0::/48", "44574"}, + {"2600:1407:e801::/35", "20940"}, + {"2804:1240::/32", "263465"}, + {"2a02:26f0:116::/48", "3292"}, + {"2a11:5705:b00b::/48", "212149"}, + {"2001:559:c262::/48", "33659"}, + {"2620:125:9001::/48", "397415"}, + {"2a02:1710:4::/48", "44843"}, + {"2a0e:cb80::/29", "44486"}, + {"240a:a3b4::/32", "143598"}, + {"2001:559:83d5::/48", "7922"}, + {"2001:4830:c210::/48", "64249"}, + {"2600:1901:c130::/34", "15169"}, + {"2620:106:6009::/45", "3562"}, + {"2a00:4802:5010::/40", "8717"}, + {"2a07:7b80:101::/44", "8757"}, + {"2a11:c300::/29", "204790"}, + {"2001:559:706::/48", "33287"}, + {"2804:a84:8001::/33", "262296"}, + {"2a0e:aa06:470::/44", "208618"}, + {"2400:e500::/48", "138322"}, + {"2620:10a:80ac::/48", "396501"}, + {"2409:8924:6300::/37", "56046"}, + {"2602:feb4:250::/44", "25961"}, + {"2605:e000:40c::/38", "20001"}, + {"2806:230:202f::/48", "11888"}, + {"2806:102e:1e::/48", "8151"}, + {"2001:559:4f9::/48", "33287"}, + {"2405:16c0::/32", "134781"}, + {"240a:ad30::/32", "146026"}, + {"2600:1409:f801::/30", "20940"}, + {"2800:370:84::/48", "28006"}, + {"2401:d800:70::/40", "7552"}, + {"2409:803c:2c00::/38", "9808"}, + {"2409:896a:1b00::/37", "9808"}, + {"2620:128:2010::/48", "397457"}, + {"240a:afcc::/32", "146694"}, + {"2600:1409:b::/48", "20940"}, + {"2607:f6f0:a004::/40", "16553"}, + {"2804:204:206::/44", "28186"}, + {"2001:13d2:5802::/47", "7303"}, + {"2603:fa30::/25", "397165"}, + {"2804:14d:5ca6::/43", "28573"}, + {"2001:559:76a::/48", "22909"}, + {"2001:559:c085::/48", "33287"}, + {"2401:d800:7e10::/42", "7552"}, + {"2406:e900::/48", "132649"}, + {"2804:2fcc::/32", "264912"}, + {"2806:269:3300::/37", "13999"}, + {"2001:5a0:4e02::/35", "6453"}, + {"2001:df2:4380::/48", "139870"}, + {"2409:8a50:1100::/31", "56047"}, + {"2620:2e:40ce::/47", "394506"}, + {"2804:9f8:400c::/32", "262773"}, + {"2804:531c:228::/43", "268564"}, + {"2a07:a105::/30", "200486"}, + {"2a10:a1c0::/32", "6730"}, + {"2001:e60:a388::/37", "4766"}, + {"2604:9e02::/32", "53365"}, + {"2620:11c:f000::/48", "393667"}, + {"2804:6590::/32", "269500"}, + {"2804:7308::/36", "270891"}, + {"2a02:2e02:1ee0::/39", "12479"}, + {"2001:559:86b2::/48", "33650"}, + {"2001:650:cc03::/29", "28748"}, + {"2600:1000:b1d0::/42", "6167"}, + {"2600:1488:c001::/41", "20940"}, + {"2804:14d:600::/40", "28573"}, + {"2804:2674:4000::/40", "264344"}, + {"2804:3c98::/32", "266223"}, + {"2a07:9944:10::/48", "58305"}, + {"2607:f038:4010::/45", "21527"}, + {"2a02:2010:2310::/45", "20978"}, + {"2a04:aa47::/32", "47176"}, + {"2001:559:c267::/44", "7922"}, + {"2408:8000:a018::/48", "140716"}, + {"2408:8956:7840::/40", "17622"}, + {"2602:fd6f:aaa::/45", "18526"}, + {"2a0b:efc0::/37", "60893"}, + {"2a0f:34c0::/29", "400177"}, + {"240a:a206::/32", "143168"}, + {"240e:62:c000::/36", "4134"}, + {"2600:2003::/32", "33517"}, + {"2803:b80::/32", "27930"}, + {"2a00:c40::/32", "34315"}, + {"2a01:8840:52::/45", "12041"}, + {"2001:559:c235::/48", "7922"}, + {"2001:1248:9703::/45", "11172"}, + {"2402:5b00:20::/41", "18002"}, + {"2607:f4e8:e::/47", "22822"}, + {"2001:1bc0::/31", "29686"}, + {"2a01:53c0:ffbf::/48", "54994"}, + {"2001:559:804d::/48", "33662"}, + {"2001:559:c10e::/48", "33659"}, + {"2602:240::/28", "46375"}, + {"2606:40cc::/30", "1239"}, + {"2a00:86c0:2086::/47", "40027"}, + {"2a03:7f80::/32", "42010"}, + {"2a06:1280:ce06::/31", "61138"}, + {"2001:559:1e2::/48", "33656"}, + {"2001:df3:5700::/48", "137198"}, + {"2a00:d00::/39", "41887"}, + {"2a01:6100::/32", "15967"}, + {"2001:df0:a3::/48", "45305"}, + {"2404:a640::/41", "133827"}, + {"240a:a251::/32", "143243"}, + {"2600:1419:6c01::/35", "20940"}, + {"2803:c10::/32", "271867"}, + {"2804:17c8::/32", "263251"}, + {"2a02:26f7:d088::/48", "36183"}, + {"2409:804d:900::/35", "9808"}, + {"2604:6600:fe7d::/40", "40676"}, + {"2804:318c:ff02::/40", "265023"}, + {"2806:20d:322e::/47", "32098"}, + {"2404:7180:aa00::/48", "23848"}, + {"2408:84f3:2c20::/43", "17816"}, + {"2604:e180:de06::/44", "55002"}, + {"2403:6c00::/32", "17514"}, + {"2001:559:8689::/48", "33655"}, + {"2001:559:c136::/48", "20214"}, + {"2401:d380::/32", "38031"}, + {"2a02:26f7:d781::/46", "20940"}, + {"2a0e:b107:15d0::/46", "210951"}, + {"240a:a226::/32", "143200"}, + {"2804:4efc::/34", "268296"}, + {"2804:7d70::/35", "271561"}, + {"2400:1c00:1::/45", "45143"}, + {"2600:1404:a001::/38", "20940"}, + {"2800:5f0:2034::/46", "22724"}, + {"2804:41c4::/32", "267455"}, + {"2806:2f0:2183::/42", "22884"}, + {"2a02:ec80:500::/48", "14907"}, + {"2a0b:8f80::/48", "48635"}, + {"2600:9000:1e0e::/48", "16509"}, + {"2605:a401:8e41::/44", "33363"}, + {"2804:5d08::/32", "263101"}, + {"2a09:2bc0::/32", "209528"}, + {"2a0f:d0c0::/29", "43424"}, + {"2a10:da40::/29", "34907"}, + {"2c0f:ef68:4::/32", "37662"}, + {"2001:579:412c::/43", "22773"}, + {"2001:43f8:13a0::/48", "37187"}, + {"2400:1701::/32", "4765"}, + {"2604:880:264::/43", "29802"}, + {"2803:6f00:801::/32", "14117"}, + {"2a02:2600::/32", "48299"}, + {"2a02:26f0:9d01::/40", "20940"}, + {"2a02:26f7:8c::/48", "36183"}, + {"2a02:4d40::/32", "25394"}, + {"2a0d:a80::/29", "200851"}, + {"2404:c140:222::/34", "138997"}, + {"2600:1006:b030::/44", "22394"}, + {"2606:65c0:30::/48", "399804"}, + {"2804:118c::/32", "53182"}, + {"2804:2a04::/32", "264051"}, + {"2804:574c::/34", "268057"}, + {"2a00:4140::/32", "34766"}, + {"2a0f:9400:7726::/48", "53356"}, + {"2001:1388:80a::/38", "6147"}, + {"240a:accd::/32", "145927"}, + {"2600:1008:b030::/44", "22394"}, + {"2600:14c0:a::/47", "21342"}, + {"2605:9600::/32", "62"}, + {"2800:160:1231::/44", "14259"}, + {"2801:80:a10::/48", "263287"}, + {"2804:7be8:2::/32", "271462"}, + {"2a06:9f40::/30", "204136"}, + {"2406:3400:a00::/32", "10143"}, + {"2409:8050:2100::/37", "9808"}, + {"2607:f718::/32", "11847"}, + {"2a06:6541:4181::/48", "8220"}, + {"2408:880c::/27", "17621"}, + {"2607:8200:c000::/36", "6295"}, + {"2801:80:3400::/48", "268743"}, + {"2806:230:100c::/48", "265594"}, + {"2a02:2380:1::/45", "51941"}, + {"2001:500:89::/48", "26710"}, + {"240e:108:1090::/48", "58542"}, + {"2600:6c38:97::/44", "20115"}, + {"2800:bf0:b405::/42", "27947"}, + {"2804:21ec::/32", "264582"}, + {"2a02:26f7:b404::/48", "36183"}, + {"2001:559:142::/48", "20214"}, + {"2401:4900:40a0::/41", "45609"}, + {"240a:a093::/32", "142797"}, + {"2804:1f08::/32", "263293"}, + {"2804:28b0::/32", "52932"}, + {"2a01:1b8:6::/32", "1257"}, + {"2001:559:467::/48", "33657"}, + {"2001:678:7::/48", "48053"}, + {"2001:67c:2840::/48", "25046"}, + {"2001:d50::/32", "7665"}, + {"240a:a46f::/32", "143785"}, + {"240e:980:9400::/40", "4134"}, + {"2a00:d100::/32", "15704"}, + {"2a06:a004:6000::/36", "44570"}, + {"2a10:3100::/29", "35598"}, + {"2c0f:7b00::/28", "8452"}, + {"2408:8456:cc00::/42", "17622"}, + {"2a00:19c8::/32", "35833"}, + {"2a06:cfc0::/29", "199837"}, + {"2a0f:2a04::/32", "42692"}, + {"240a:a397::/32", "143569"}, + {"2604:8fc0::/32", "13549"}, + {"2a01:77c0:6::/48", "34848"}, + {"2a02:6e8::/32", "8399"}, + {"2a0e:6c80::/29", "208599"}, + {"2c0f:f6d8:4022::/47", "21433"}, + {"2001:7f8:ec::/48", "208425"}, + {"2001:da8:e016::/44", "24367"}, + {"2620:b3:4000::/48", "62611"}, + {"2803:ea80:2000::/36", "28048"}, + {"2804:808::/32", "16735"}, + {"2804:145c:8d90::/38", "263327"}, + {"2804:8150::/34", "272446"}, + {"2001:250:342d::/48", "138393"}, + {"2408:8756:4d00::/32", "17816"}, + {"240e:108:98::/48", "137698"}, + {"2804:3d58::/32", "266525"}, + {"2600:6c20:85e::/40", "20115"}, + {"2001:c20:489a::/48", "9255"}, + {"2001:4878:4225::/48", "12222"}, + {"240b:4007::/32", "45102"}, + {"2a0e:e6c0:4000::/36", "59584"}, + {"2001:559:85af::/48", "20214"}, + {"2001:b20::/29", "24611"}, + {"2405:aa00::/32", "7712"}, + {"2600:140b:cc01::/38", "20940"}, + {"2620:74:29::/48", "396574"}, + {"2803:f00:680::/42", "262182"}, + {"2806:20d:5014::/47", "32098"}, + {"2a00:6180::/32", "29062"}, + {"2a01:9660::/43", "199743"}, + {"2401:8700:3a::/48", "36408"}, + {"2406:c7c0::/32", "138800"}, + {"2600:1418:8001::/33", "20940"}, + {"2804:81d8::/32", "272480"}, + {"2c0f:f598:3::/48", "327813"}, + {"2405:9000:b::/41", "7474"}, + {"2600:140b:7001::/38", "20940"}, + {"2605:380:32::/48", "42473"}, + {"2605:6ac0:3000::/36", "32374"}, + {"2607:f128:1::/37", "32748"}, + {"2610:b0:414c::/43", "3573"}, + {"2a0f:ca86::/40", "208046"}, + {"2001:559:16c::/48", "7016"}, + {"2400:cb00:a770::/47", "13335"}, + {"240e:44d:1100::/42", "140345"}, + {"2602:fed2:718b::/45", "53356"}, + {"2606:4700:3000::/43", "13335"}, + {"2a00:be80::/32", "15557"}, + {"2001:43f8:90::/48", "37708"}, + {"2800:160:1caf::/43", "14259"}, + {"2804:2aa8::/32", "264088"}, + {"2806:2f0:6141::/46", "17072"}, + {"2a0e:3840:1::/48", "3170"}, + {"2001:4408::/45", "4758"}, + {"2403:8400:10::/47", "17917"}, + {"2600:100d:9010::/40", "22394"}, + {"2605:f440:5353::/48", "57439"}, + {"2a0a:7780::/29", "207167"}, + {"2001:1578:200::/40", "12817"}, + {"2404:8d02:4983::/41", "9587"}, + {"2409:8087:102c::/38", "9808"}, + {"2800:8f0::/32", "22860"}, + {"2402:800:5ee0::/44", "7552"}, + {"2405:9200:5f00::/44", "131596"}, + {"240e:3b7:ec00::/35", "140314"}, + {"2a02:ce00::/29", "47521"}, + {"2a11:fe80:fabd::/46", "209209"}, + {"2c0f:f530:20::/44", "61138"}, + {"2804:6064::/32", "269164"}, + {"2a02:2e02:10b0::/41", "12479"}, + {"2001:559:c3b1::/48", "33659"}, + {"240e:45c:3a00::/40", "131285"}, + {"2606:5b00::/38", "29765"}, + {"2620:124:b003::/40", "32521"}, + {"2620:149:100::/41", "714"}, + {"2804:2c58:1010::/39", "265211"}, + {"2a02:ab0::/29", "42346"}, + {"2a03:c400::/32", "8445"}, + {"2001:468:913::/48", "1747"}, + {"2400:9380:99c0::/44", "136167"}, + {"240a:acdb::/32", "145941"}, + {"2a02:63e0::/32", "202709"}, + {"2a02:ad40::/29", "21207"}, + {"2a09:a4c2::/32", "210625"}, + {"2001:559:8495::/48", "22909"}, + {"2001:df1:8900::/48", "136733"}, + {"240e:44d:5a40::/42", "140350"}, + {"2804:3b8::/44", "52965"}, + {"2804:6908:6000::/35", "270244"}, + {"2a07:4841::/48", "13213"}, + {"2a0e:da40:10::/42", "210542"}, + {"2001:250:c29::/48", "23910"}, + {"2001:268:837::/44", "2516"}, + {"2001:468:702::/36", "11537"}, + {"2001:4878:a038::/48", "12222"}, + {"2405:9640::/48", "136557"}, + {"240a:a604::/32", "144190"}, + {"2607:1280:12e0::/44", "394972"}, + {"2607:fb10:5043::/42", "2906"}, + {"2403:1940:10::/48", "137935"}, + {"2409:8914:9c00::/39", "56044"}, + {"2600:1407:20::/47", "20940"}, + {"2602:fff0::/36", "18889"}, + {"2607:f620::/32", "11590"}, + {"2803:cae0:c002::/47", "27951"}, + {"2a0a:c140::/32", "205901"}, + {"2001:559:8338::/48", "33657"}, + {"2001:67c:2944::/48", "211781"}, + {"240e:438:1440::/38", "4134"}, + {"2a02:26f7:d345::/46", "20940"}, + {"2a0f:4680::/32", "50113"}, + {"2a11:bd40::/29", "18779"}, + {"2001:500:61::/48", "33080"}, + {"2607:fc48:c00::/48", "40009"}, + {"2804:70d4::/34", "270751"}, + {"2a0b:6b84:b::/35", "200639"}, + {"2400:1c00:1e::/41", "45143"}, + {"2400:fc00:87e0::/36", "45773"}, + {"2600:6000:fb34::/48", "11351"}, + {"2604:880:222::/43", "29802"}, + {"2607:fb58:7000::/36", "36086"}, + {"2a0b:97c0::/29", "58067"}, + {"2001:1248:a02f::/48", "11172"}, + {"240c:caa1::/32", "24363"}, + {"2600:6c38:d42::/47", "20115"}, + {"2001:559:c1d4::/48", "33287"}, + {"2804:482c::/32", "267102"}, + {"2a02:2e02:280::/37", "12479"}, + {"2001:503:3227::/48", "7342"}, + {"2403:300:a16::/48", "6185"}, + {"2404:bc0:4100::/43", "137735"}, + {"2408:8459:e450::/38", "17816"}, + {"2607:f5b3::/32", "396362"}, + {"2620:e2:4000::/48", "64230"}, + {"2804:660c::/32", "269530"}, + {"2804:67ec::/32", "269659"}, + {"2001:550:9006::/39", "174"}, + {"2405:3140:31::/48", "56006"}, + {"2406:3000:e::/48", "140929"}, + {"2606:4700:1100::/40", "132892"}, + {"2a05:cf40::/29", "199163"}, + {"2400:cb00:a320::/45", "13335"}, + {"2600:bc01::/32", "398993"}, + {"2604:f180::/32", "30526"}, + {"2620:11b:4000::/48", "19210"}, + {"2a02:26f7:f188::/48", "36183"}, + {"2800:160:1f08::/46", "14259"}, + {"2406:eb00:1::/48", "132653"}, + {"2600:380:e900::/41", "7018"}, + {"2600:803:613::/48", "27030"}, + {"2600:1401:8::/34", "20940"}, + {"2804:1288:2000::/32", "263482"}, + {"2a00:47c0:611::/48", "27435"}, + {"2a10:1fc0:4::/48", "61102"}, + {"2001:df3:8880::/48", "132335"}, + {"2603:f078::/24", "397165"}, + {"2604:d600:54f::/43", "32098"}, + {"2803:f00:4c9::/48", "262182"}, + {"2804:7094:5000::/32", "270735"}, + {"2a0f:f480::/29", "60262"}, + {"2402:800:f9c0::/42", "7552"}, + {"240e:67c:c600::/34", "4134"}, + {"2604:9000:103::/34", "19693"}, + {"2a04:4e40:2400::/45", "54113"}, + {"2401:7500:ff6::/47", "33480"}, + {"2806:2f0:5163::/40", "17072"}, + {"2404:7a00::/32", "17953"}, + {"240e:3b9:4c00::/35", "136200"}, + {"240e:44d:5440::/42", "140347"}, + {"2600:380:f107::/48", "64011"}, + {"2600:387:15::/25", "7018"}, + {"2607:f778:c100::/38", "32035"}, + {"2a00:1b00:1000::/48", "47862"}, + {"2a0c:3580::/29", "30823"}, + {"2c0f:fbf0::/48", "37394"}, + {"2001:df0:e6::/48", "45596"}, + {"2001:4878:4031::/48", "12222"}, + {"2405:ec00:9014::/42", "23955"}, + {"2605:940::/40", "396919"}, + {"2607:f160:ff00::/40", "6167"}, + {"2a06:c100::/29", "208920"}, + {"2001:678:108::/48", "196682"}, + {"2402:800:1131::/34", "7552"}, + {"2402:8a80::/32", "134375"}, + {"2407:c40:1::/46", "46562"}, + {"2409:8087:2025::/40", "56046"}, + {"240a:a384::/32", "143550"}, + {"2804:3940::/32", "266021"}, + {"2a04:1a00::/29", "199318"}, + {"2a04:4e40:3a00::/47", "54113"}, + {"2402:800:9601::/44", "7552"}, + {"2600:140b:1401::/38", "20940"}, + {"2800:160:11a4::/43", "14259"}, + {"2804:314:4007::/43", "61568"}, + {"2a0e:9680::/29", "57112"}, + {"2001:df2:f980::/48", "17439"}, + {"2402:800:3de0::/44", "7552"}, + {"2403:e800:e80c::/35", "4637"}, + {"2408:8456:f100::/42", "17622"}, + {"2602:fe04::/36", "15164"}, + {"2804:4498::/32", "267641"}, + {"2a02:26f7:b6c9::/46", "20940"}, + {"2a0f:5707:aa23::/44", "207622"}, + {"2001:cc8::/31", "4637"}, + {"2402:ef40::/32", "4808"}, + {"2404:bf40:f002::/41", "139084"}, + {"240a:a2af::/32", "143337"}, + {"240e:979:7f00::/32", "4134"}, + {"2a0a:4ac0::/29", "40970"}, + {"2001:1900:2288::/45", "3356"}, + {"2404:3d00:4146::/44", "3573"}, + {"240a:ad25::/32", "146015"}, + {"2a00:12d8::/43", "12586"}, + {"2001:df3:a980::/48", "135900"}, + {"2401:dc40::/32", "24253"}, + {"2a0e:97c0:4da::/48", "211024"}, + {"2001:559:30f::/48", "33287"}, + {"2401:7b40:4001::/46", "38071"}, + {"2404:8000:94::/44", "17451"}, + {"2409:8914:9e00::/39", "56044"}, + {"240a:a387::/32", "143553"}, + {"240a:a6f8::/32", "144434"}, + {"2604:b180:150::/44", "26925"}, + {"2605:7b40::/32", "53384"}, + {"2620:104:600a::/48", "53779"}, + {"2804:7734::/33", "271162"}, + {"2a00:dd80:3e::/41", "36236"}, + {"2406:e000::/38", "23655"}, + {"2607:f740:e626::/48", "29997"}, + {"2620:17c::/36", "30641"}, + {"2804:59c::/32", "262527"}, + {"2804:bfc::/32", "52654"}, + {"2a0e:97c3:416::/48", "20473"}, + {"2800:110:3400::/48", "28068"}, + {"2001:49f0:a071::/36", "174"}, + {"2800:370:61::/48", "28006"}, + {"2a00:6c80::/32", "44974"}, + {"2a02:2a60::/32", "702"}, + {"2a0c:9840::/29", "202510"}, + {"2804:cb0:facf::/37", "52742"}, + {"2001:500:6::/48", "12287"}, + {"2404:2280:1c8::/48", "24429"}, + {"240a:a8a1::/32", "144859"}, + {"2604:a2c0::/32", "53256"}, + {"2800:550:5::/42", "7004"}, + {"2804:4604::/32", "266962"}, + {"2a0c:8540:1::/45", "42198"}, + {"240a:a429::/32", "143715"}, + {"2804:7c18::/42", "271475"}, + {"240e:44d:6000::/41", "140345"}, + {"2600:140b:9800::/48", "24319"}, + {"2607:f148:4000::/36", "11734"}, + {"2800:860:facf::/37", "262197"}, + {"2804:49a4::/32", "267194"}, + {"2804:6010::/32", "269143"}, + {"2600:6c08::/31", "20115"}, + {"2a02:26f0:af01::/40", "20940"}, + {"2c0f:ecf0::/32", "36924"}, + {"2001:559:8350::/47", "7922"}, + {"2001:559:c0a1::/48", "33652"}, + {"2001:df5:3080::/48", "55308"}, + {"2804:76d0::/32", "271136"}, + {"2a02:ec0:300::/32", "41653"}, + {"2804:7090::/32", "270734"}, + {"2a05:4741:6::/48", "51699"}, + {"2a06:a000:200::/40", "210842"}, + {"2409:8904:a840::/39", "24547"}, + {"240a:a5ac::/32", "144102"}, + {"2a02:4b8::/31", "39605"}, + {"2a0b:7ec0::/33", "206728"}, + {"2001:468:2620::/48", "237"}, + {"2001:57a:b800::/33", "22773"}, + {"2401:b180:8000::/33", "37963"}, + {"240a:a0c9::/32", "142851"}, + {"2602:fcb8::/36", "36289"}, + {"2603:b0e0:caff::/34", "11796"}, + {"2610:b0:40bf::/41", "3573"}, + {"2620:122:8003::/48", "399731"}, + {"2804:550c::/33", "268686"}, + {"2400:6280:150::/48", "132280"}, + {"2607:9e80:1381::/32", "397068"}, + {"2803:2a80:1255::/48", "262928"}, + {"2a02:26f7:cf0a::/42", "20940"}, + {"2a02:26f7:d888::/48", "36183"}, + {"2a09:f780::/48", "203395"}, + {"2001:559:c298::/48", "33287"}, + {"2400:cb00:380::/46", "13335"}, + {"240e:3b8:1800::/34", "4134"}, + {"2600:9000:232a::/45", "16509"}, + {"2a02:2e02:a0d0::/39", "12479"}, + {"2a0c:a9c7:2::/47", "62135"}, + {"2001:250:5831::/48", "138371"}, + {"2001:559:c30c::/48", "7922"}, + {"2001:e48:22:1018::/48", "9583"}, + {"2001:4220:800b::/45", "24835"}, + {"2402:9800:4005::/48", "136108"}, + {"2405:9cc0::/32", "139967"}, + {"2606:54c0::/32", "13335"}, + {"2804:2bc::/39", "262832"}, + {"2001:1248:9c0f::/43", "11172"}, + {"2400:a980:4000::/40", "38587"}, + {"2600:c0e::/34", "13789"}, + {"2600:140b:b801::/38", "20940"}, + {"2600:8807:a840::/38", "22773"}, + {"2c0f:1a00::/32", "37603"}, + {"240e:96b:600f::/43", "140369"}, + {"2001:1260:4f1::/44", "28532"}, + {"2400:9380:8140::/48", "4134"}, + {"2404:bf40:c201::/41", "139084"}, + {"2404:f4c0:5151::/36", "139248"}, + {"2604:92c0::/32", "19568"}, + {"2804:1d0c::/32", "61692"}, + {"2804:455c::/32", "266921"}, + {"240e:30a:1200::/32", "4134"}, + {"2806:230:602b::/48", "11888"}, + {"2a03:8ac0:250::/48", "47523"}, + {"2a0a:e680::/29", "21159"}, + {"2600:1402:4000::/48", "35994"}, + {"2607:f058:2200::/32", "22302"}, + {"2a09:b0c0::/32", "9063"}, + {"2001:559:c116::/48", "7922"}, + {"2001:df0:21e::/48", "55396"}, + {"2001:df5:9980::/48", "140766"}, + {"2407:cdc0:a000::/44", "38136"}, + {"240a:a681::/32", "144315"}, + {"240e:980:2c01::/40", "4134"}, + {"2604:200:7::/43", "33132"}, + {"2801:ba::/32", "28602"}, + {"2804:67fc::/32", "269663"}, + {"2a03:d200::/32", "56366"}, + {"2a0f:5701:fe02::/43", "206499"}, + {"2800:160:1afb::/39", "14259"}, + {"2001:559:c032::/45", "22909"}, + {"2409:8a02::/32", "38019"}, + {"2600:1417:78::/48", "9498"}, + {"2804:14c:dc81::/41", "28573"}, + {"2a02:128:6::/48", "50765"}, + {"2a02:26f7:f284::/48", "36183"}, + {"2a03:a580::/32", "197914"}, + {"2001:579:6290::/45", "22773"}, + {"2402:800:76c0::/42", "7552"}, + {"240a:aa40::/32", "145274"}, + {"2804:3c28::/36", "263011"}, + {"2804:77d0::/32", "271201"}, + {"2a03:6306::/32", "12837"}, + {"2a0f:85c2::/32", "207841"}, + {"2620:10a:80ad::/48", "55195"}, + {"2a02:ff0:3df1::/46", "12735"}, + {"2a02:26f7:f6f8::/47", "36183"}, + {"2a0c:9ac0::/29", "18779"}, + {"2001:1b70:86ae::/48", "158"}, + {"240a:abbc::/32", "145654"}, + {"2402:800:3eb1::/44", "7552"}, + {"2402:800:5d2b::/41", "7552"}, + {"240a:afa5::/32", "146655"}, + {"2a02:2e02:24d0::/39", "12479"}, + {"2a10:d8c0::/29", "208861"}, + {"2a11:e700::/29", "60935"}, + {"240a:acd5::/32", "145935"}, + {"2607:f710:60::/48", "19624"}, + {"2001:df2:e600::/48", "133661"}, + {"2607:4800::/32", "25637"}, + {"2804:431c:300::/32", "267549"}, + {"2a02:26f7:b8c5::/46", "20940"}, + {"2001:559:8550::/47", "33490"}, + {"2600:1004:d060::/40", "22394"}, + {"2603:c001:3e00::/43", "31898"}, + {"2606:1a40:200e::/47", "42473"}, + {"2804:4f10::/32", "266612"}, + {"2804:599c::/32", "268713"}, + {"2a0b:bc80::/29", "42924"}, + {"2a0b:c4c0::/29", "9144"}, + {"2a0f:2240::/29", "60262"}, + {"2400:8901::/29", "63949"}, + {"2407:3280::/32", "4851"}, + {"2409:8087:1000::/44", "9808"}, + {"2620:40:6000::/48", "30405"}, + {"2620:100:6029::/43", "19679"}, + {"2a02:1390:7000::/36", "21351"}, + {"2a03:c940::/32", "52142"}, + {"2a0a:6680:197a::/34", "203500"}, + {"2001:fd8:f200::/42", "132199"}, + {"2607:e480:4::/48", "395748"}, + {"2607:fdf0:5fff::/32", "8008"}, + {"2801:15:a800::/48", "19429"}, + {"2a00:4802:3c10::/39", "8717"}, + {"2400:4ec0:8f01::/35", "64300"}, + {"2408:8459:ce10::/42", "17623"}, + {"2409:8055:301a::/48", "9808"}, + {"2803:8100::/32", "21826"}, + {"2a0d:4ac0::/46", "208006"}, + {"2001:44b8:309b::/48", "7545"}, + {"2403:3800:601::/35", "4007"}, + {"2600:6c7f:91c0::/43", "20115"}, + {"2620:149:a23::/45", "714"}, + {"2a09:f0c0::/29", "209169"}, + {"2a0c:7680:1337::/48", "50629"}, + {"2406:bf00::/48", "38220"}, + {"240a:aea8::/32", "146402"}, + {"240e:41:c000::/37", "17799"}, + {"2604:d600:698::/42", "32098"}, + {"2606:c380::/32", "11440"}, + {"2606:ef80:7::/32", "7226"}, + {"2801:b6:1000::/32", "263083"}, + {"240a:aae6::/32", "145440"}, + {"2804:62c::/34", "262569"}, + {"2001:559:558::/48", "33287"}, + {"2001:dd8:1b::/48", "24049"}, + {"2405:8a00:c028::/34", "55824"}, + {"240a:a69e::/32", "144344"}, + {"2606:c280::/32", "394968"}, + {"2607:f8f0:680::/48", "271"}, + {"2803:6ce0:6000::/32", "269909"}, + {"2a01:a560::/32", "12552"}, + {"2001:1248:5a0d::/43", "11172"}, + {"2a00:1e68:113::/31", "42861"}, + {"2a00:dcc7:d000::/38", "34971"}, + {"2a02:26f7:78::/48", "36183"}, + {"2a02:6900:8818::/48", "7160"}, + {"2409:8070:30fd::/46", "9808"}, + {"240a:aa86::/32", "145344"}, + {"2600:1009:9100::/44", "6167"}, + {"2607:d500:202::/40", "54527"}, + {"2a00:5a60:c000::/48", "199274"}, + {"2a03:2880:f03b::/45", "32934"}, + {"2c0f:f858:3::/32", "36947"}, + {"2001:559:3db::/48", "7725"}, + {"2408:8956:f6c0::/36", "17816"}, + {"2606:2800:4ac4::/46", "15133"}, + {"2a00:1c98::/32", "34762"}, + {"2a0a:9000::/29", "64472"}, + {"2001:1900:221f::/42", "3356"}, + {"2407:5040:a00::/34", "134715"}, + {"2606:ae00:1000::/48", "7287"}, + {"2806:230:2025::/48", "11888"}, + {"2a03:b8c0:1b::/45", "396253"}, + {"2001:470:f7::/48", "6939"}, + {"2406:4c00::/32", "9509"}, + {"2407:ff80::/35", "135881"}, + {"240a:a13f::/32", "142969"}, + {"2001:818::/29", "12353"}, + {"2404:4600:6::/48", "38099"}, + {"2800:160:232f::/40", "14259"}, + {"2a01:b5a0::/32", "45010"}, + {"2804:2b44::/43", "265144"}, + {"2a01:6e60::/32", "199883"}, + {"2001:500:f1::/48", "198260"}, + {"2401:4800::/48", "38457"}, + {"2404:880:22::/48", "38750"}, + {"2602:fd35::/36", "398427"}, + {"2a01:4ac0:1::/46", "57497"}, + {"2a09:7d40::/44", "209382"}, + {"2a0f:d940::/29", "60781"}, + {"2400:cc00::/34", "17477"}, + {"2a07:4f81:1::/48", "14870"}, + {"2402:800:9855::/42", "7552"}, + {"2402:800:9cc5::/43", "7552"}, + {"240e:44d:4f80::/41", "4134"}, + {"2806:2f0:1062::/48", "22884"}, + {"2406:2000:9c::/48", "38033"}, + {"2600:6c10:a5::/44", "20115"}, + {"2610:20:8030::/44", "6629"}, + {"2607:8b80::/32", "4986"}, + {"2a01:c840::/28", "15962"}, + {"2a0b:79c0::/29", "8426"}, + {"2001:468:c81::/42", "40220"}, + {"2001:67c:217c::/48", "2486"}, + {"2001:ee0:eb00::/40", "45899"}, + {"2001:f20:4001::/48", "9875"}, + {"2804:2f34::/35", "264877"}, + {"2a02:26f7:2b::/48", "20940"}, + {"2405:4000::/36", "38082"}, + {"2600:1002:d000::/43", "6167"}, + {"2a0a:a3c0:c0::/32", "41955"}, + {"2600:6000:fd0f::/42", "12271"}, + {"2804:7110:5100::/34", "270764"}, + {"2a02:26f7:d000::/48", "36183"}, + {"2a02:26f7:d588::/48", "36183"}, + {"2001:470:9a::/48", "17197"}, + {"2001:559:8446::/48", "33657"}, + {"2402:800:5a2b::/41", "7552"}, + {"2404:4a00:7a00:1::/37", "45629"}, + {"240e:351:5c00::/34", "134419"}, + {"2a04:4e40:810::/41", "54113"}, + {"2001:559:878f::/48", "7015"}, + {"2001:678:fc8::/48", "207960"}, + {"2a02:6900:8807::/48", "43898"}, + {"2a06:6541:1000::/48", "34893"}, + {"2001:df3:2d00::/48", "63765"}, + {"2a0e:1a00::/29", "206894"}, + {"2600:1003:b0a0::/44", "6167"}, + {"2a10:1180::/31", "212181"}, + {"2001:559:68::/48", "7922"}, + {"2001:559:340::/45", "33651"}, + {"2001:c20:48c2::/48", "9255"}, + {"2001:df3:8e80::/48", "140599"}, + {"240e:f7::/36", "58461"}, + {"2602:feb4:130::/44", "25961"}, + {"2607:f098:3300::/33", "33363"}, + {"2804:4ad0::/32", "267265"}, + {"2a07:5100::/29", "203052"}, + {"2001:e40::/29", "9370"}, + {"2605:5980::/32", "12284"}, + {"2606:7d00:c001::/48", "14749"}, + {"2806:2f0:6123::/41", "17072"}, + {"2001:67c:17f4::/48", "1257"}, + {"2402:f700:4000::/32", "23907"}, + {"2404:3d00:40de::/47", "3573"}, + {"240e:3b1:2c00::/35", "134774"}, + {"2800:b000::/32", "7303"}, + {"2a00:1ec8:26::/47", "2854"}, + {"2001:67c:12e8::/47", "24603"}, + {"2001:67c:27dc::/48", "8426"}, + {"2402:e280:211b::/45", "134674"}, + {"240a:a777::/32", "144561"}, + {"2600:380:c180::/37", "20057"}, + {"2600:6000:fd0e::/48", "11351"}, + {"2804:64f4::/32", "269459"}, + {"2a0e:b107:22::/48", "208181"}, + {"2400:5e00::/32", "7598"}, + {"2408:8957:1000::/40", "17622"}, + {"2a00:4802:a70::/40", "13124"}, + {"2a02:26f7:c2::/48", "36183"}, + {"2a02:26f7:c480::/48", "36183"}, + {"2a05:400::/29", "205112"}, + {"2401:4900:3840::/43", "45609"}, + {"2605:9300:2::/48", "13767"}, + {"2804:13dc:ff30::/40", "262428"}, + {"2804:76b4::/32", "271129"}, + {"2a01:c9c0:8018::/48", "2285"}, + {"2a0a:90c0:1059::/42", "205080"}, + {"2001:43f8:1180::/48", "37394"}, + {"2405:4000:800:a::/61", "38082"}, + {"2600:140f:3201::/37", "20940"}, + {"2a02:a80::/29", "52126"}, + {"2a06:5d00::/29", "47372"}, + {"2001:43f8:3b0::/48", "327694"}, + {"2402:9d80:26d::/40", "131429"}, + {"240a:a6a9::/32", "144355"}, + {"2804:13d0:9940::/40", "263297"}, + {"2a02:dc00:202::/48", "15493"}, + {"2a0e:fd45:40fc::/48", "3280"}, + {"2001:418:9808::/48", "21778"}, + {"2001:dcc:702::/48", "23600"}, + {"2604:7c40:100::/40", "31867"}, + {"2a01:a7e0::/36", "200711"}, + {"2a05:1580:10::/46", "59874"}, + {"240a:a902::/32", "144956"}, + {"2804:b18:89::/45", "52941"}, + {"2001:678:128::/48", "205236"}, + {"2001:da8:d800::/42", "24362"}, + {"240a:a5a8::/32", "144098"}, + {"2804:644c::/32", "269419"}, + {"2804:6ac4:3000::/32", "16921"}, + {"2806:230:3015::/48", "11888"}, + {"240a:a632::/32", "144236"}, + {"2605:a401:8c75::/44", "33363"}, + {"2800:b70:2::/44", "262191"}, + {"2001:1b70:6202::/48", "158"}, + {"2600:1480:1100::/37", "20940"}, + {"2800:3c0:20a0::/39", "19863"}, + {"2a0e:8880::/29", "210662"}, + {"240a:a98e::/32", "145096"}, + {"2402:800:510f::/43", "7552"}, + {"2402:800:f840::/42", "7552"}, + {"2602:803:6000::/44", "25915"}, + {"2606:b440::/32", "396893"}, + {"2a00:ea40::/32", "2589"}, + {"2a01:6c8::/36", "29006"}, + {"2a01:4660::/32", "34360"}, + {"2a02:26f7:ee41::/46", "20940"}, + {"2001:559:c282::/48", "33652"}, + {"2001:67c:2554::/48", "39840"}, + {"2001:da8:4805::/48", "24360"}, + {"2001:448a:10f0::/34", "7713"}, + {"2404:9400:f::/48", "133159"}, + {"2409:8c70:3a10::/44", "140105"}, + {"240a:a121::/32", "142939"}, + {"2804:50::/35", "26592"}, + {"2804:62b4::/35", "269313"}, + {"2a06:4280::/29", "60032"}, + {"2a10:f9c0::/29", "202365"}, + {"2404:af80:10::/47", "38026"}, + {"240e:d9:d801::/34", "4134"}, + {"2a04:4e40:9420::/43", "54113"}, + {"2a05:9d40::/29", "62166"}, + {"2607:f298:b::/48", "26347"}, + {"2803:7600::/32", "265751"}, + {"2806:2f0:8183::/42", "17072"}, + {"2a01:7d20:102::/38", "203645"}, + {"240e:983:1a00::/40", "4811"}, + {"2804:2e2c::/32", "265329"}, + {"2804:3f3c::/32", "266647"}, + {"2a02:26f7:d884::/48", "36183"}, + {"2001:678:d::/48", "49488"}, + {"2405:be40::/48", "131378"}, + {"2408:8957:e700::/40", "17816"}, + {"240e:108:8d::/48", "137693"}, + {"2620:1ec:49::/36", "8075"}, + {"2a00:16c8::/39", "50173"}, + {"2a06:21c0::/29", "51942"}, + {"2403:6b80::/44", "2635"}, + {"2404:7c80::/32", "133661"}, + {"2804:3bbc::/32", "266168"}, + {"2a04:2cc0::/29", "38917"}, + {"2c0f:f030::/34", "328137"}, + {"2408:840d:2900::/42", "17621"}, + {"2800:160:1ed5::/42", "14259"}, + {"2a03:c100::/32", "49808"}, + {"2a09:a940::/29", "61437"}, + {"2408:870c:100::/34", "17621"}, + {"240a:af9a::/32", "146644"}, + {"2a03:1180::/32", "198002"}, + {"2001:1600::/32", "29222"}, + {"2405:8dc0::/32", "45370"}, + {"2610:a0:2::/47", "7786"}, + {"2804:40d0::/32", "265983"}, + {"2a04:b480:20::/46", "209506"}, + {"2a12:5840:b00b::/48", "212149"}, + {"2401:c500:fd10::/46", "54994"}, + {"240a:a59a::/32", "144084"}, + {"2620:98:a000::/47", "399668"}, + {"2804:2fc::/32", "53238"}, + {"2a0b:cdc1::/32", "35790"}, + {"2602:fed2:7190::/45", "53356"}, + {"2801:1f0:2020::/33", "3573"}, + {"2804:7b28::/32", "271414"}, + {"2a06:3d80::/29", "60117"}, + {"2402:6640:6::/43", "134995"}, + {"2804:4274::/32", "267501"}, + {"2a02:2698:2c00::/38", "41727"}, + {"2a02:26f7:b648::/48", "36183"}, + {"2a04:e4c7:fffd::/46", "36692"}, + {"2001:1248:5ae6::/47", "11172"}, + {"2001:18e8:400::/40", "1767"}, + {"2620:13f:3000::/43", "46842"}, + {"2804:2f88:e100::/35", "264897"}, + {"2a04:7840::/32", "56523"}, + {"2a05:d000:2000::/40", "16509"}, + {"2404:f4c0:f9cb::/48", "142281"}, + {"2605:dd40:40::/44", "398549"}, + {"2607:f4a0:5011::/32", "11272"}, + {"2804:c1c::/32", "52679"}, + {"2a03:48c0::/32", "199608"}, + {"2602:fd50:f60::/44", "212276"}, + {"2804:50a0::/32", "268400"}, + {"2a04:2bc0::/32", "207133"}, + {"2001:67c:2eb4::/48", "207372"}, + {"2400:a980:68fc::/47", "133111"}, + {"2408:8256:2d8d::/43", "17623"}, + {"240a:ae18::/32", "146258"}, + {"240e:44d:3580::/41", "4134"}, + {"2600:1406:fc00::/48", "35994"}, + {"2600:6c10:98::/46", "20115"}, + {"2602:fd81::/36", "32018"}, + {"240e:108:86::/48", "136195"}, + {"240e:438:4240::/37", "4134"}, + {"2603:f730::/24", "397165"}, + {"2001:678:6a4::/48", "202481"}, + {"2001:b08:17::/48", "8398"}, + {"2602:107:2b10::/48", "20115"}, + {"2804:3980::/32", "266034"}, + {"2a0d:d680::/29", "57588"}, + {"2c0f:f568::/46", "37451"}, + {"2001:559:866d::/48", "13367"}, + {"2001:559:c1ae::/48", "7725"}, + {"2600:6c7f:9040::/48", "20115"}, + {"2001:559:831f::/48", "33650"}, + {"2001:678:a20::/48", "15380"}, + {"2001:913:1000::/36", "204059"}, + {"2001:4998:61::/46", "10310"}, + {"2001:4b18::/34", "20746"}, + {"2604:ab80:2::/45", "55079"}, + {"2a07:7340::/29", "34549"}, + {"2c0e:7f80:300::/29", "36974"}, + {"2402:800:3c8d::/41", "7552"}, + {"2804:3868:1800::/32", "266475"}, + {"2a01:6f00::/29", "43571"}, + {"2001:559:87e5::/48", "7922"}, + {"2001:559:c394::/48", "33651"}, + {"2405:f080:2e00::/47", "136907"}, + {"2806:303::/32", "21623"}, + {"2a06:1a40::/29", "20988"}, + {"2001:250:85a::/48", "138182"}, + {"2a10:540::/29", "47747"}, + {"2402:6f40::/48", "45079"}, + {"2404:bf40:c4c0::/48", "7545"}, + {"2406:9dc0::/44", "18250"}, + {"2801:1e:7000::/48", "266773"}, + {"2801:80:3770::/46", "269498"}, + {"2408:8256:3273::/44", "17623"}, + {"240a:a713::/32", "144461"}, + {"2804:f1c::/32", "262463"}, + {"2a03:5a00:39::/48", "203517"}, + {"2001:559:77d::/48", "7015"}, + {"2001:df3:2000::/48", "45712"}, + {"2409:805c:1100::/36", "9808"}, + {"2620:4d:4021::/46", "395403"}, + {"2a09:bac0:143::/48", "13335"}, + {"2001:559:5b0::/48", "7922"}, + {"2001:559:c008::/46", "33651"}, + {"2001:67c:86c::/48", "59935"}, + {"2001:df0:2780::/48", "138973"}, + {"2407:6800::/32", "9723"}, + {"2a03:2887:ff31::/46", "33667"}, + {"2402:c340:eeef::/35", "38047"}, + {"2409:8051:1802::/40", "56047"}, + {"240e:438:e20::/43", "140647"}, + {"2a0d:76c0::/48", "209608"}, + {"2001:559:c2fd::/39", "33287"}, + {"240a:a807::/32", "144705"}, + {"240a:a305::/32", "143423"}, + {"2604:d600:15a8::/45", "32098"}, + {"2402:8100:c::/43", "55644"}, + {"2607:f280::/32", "14615"}, + {"2804:40:e000::/35", "28657"}, + {"2804:4524::/32", "267675"}, + {"2a01:5042:3::/48", "202196"}, + {"2a02:2e02:1ba0::/43", "12479"}, + {"2a04:2e80:6::/48", "59861"}, + {"2001:470:91::/45", "6939"}, + {"2804:2384:f000::/36", "264167"}, + {"2a0e:b40::/48", "62321"}, + {"2001:df0:c2::/48", "9749"}, + {"240a:a10c::/32", "142918"}, + {"240a:a94d::/32", "145031"}, + {"2a07:d880::/32", "3214"}, + {"2a0b:b81::/46", "211772"}, + {"2602:fed5:5::/36", "27398"}, + {"2603:b051::/26", "11796"}, + {"2c0f:ffa8::/32", "37057"}, + {"2001:2000:6000::/40", "1759"}, + {"2600:8806:c000::/31", "22773"}, + {"2620:1ec:41::/44", "8068"}, + {"2804:734::/32", "262624"}, + {"2804:49e8::/32", "267208"}, + {"2409:8924:c500::/38", "56046"}, + {"2a10:3900::/48", "39392"}, + {"2001:67c:284::/48", "198605"}, + {"2409:408c:9000::/31", "55836"}, + {"240a:ac26::/32", "145760"}, + {"2804:63a8::/36", "269375"}, + {"2a00:63c0::/29", "44133"}, + {"2001:67c:25b8::/48", "41038"}, + {"2402:800:7090::/42", "7552"}, + {"240a:aa4a::/32", "145284"}, + {"240e:105::/32", "4134"}, + {"2600:8807:9400::/36", "22773"}, + {"2602:fc8b:25::/46", "211544"}, + {"2604:ae80:1000::/36", "11904"}, + {"2a02:26f7:e408::/48", "36183"}, + {"2a06:6dc0::/29", "49788"}, + {"2801:1:8805::/46", "64102"}, + {"2804:6b04::/32", "270372"}, + {"2a03:5840:1::/40", "35661"}, + {"2a03:db80:3410::/48", "12643"}, + {"2a0c:5600::/29", "208106"}, + {"2a0e:d200::/29", "209044"}, + {"2001:559:18b::/48", "7015"}, + {"2400:fc00:42d0::/37", "45773"}, + {"2408:8256:2d77::/44", "17623"}, + {"240a:a2d4::/32", "143374"}, + {"240a:a5ae::/32", "144104"}, + {"240c:c0a8:5c4a::/32", "24348"}, + {"2804:14d:148f::/43", "28573"}, + {"2804:46f0:81::/41", "267021"}, + {"2804:5570::/32", "267935"}, + {"2a04:9a00:1046::/44", "212157"}, + {"2a0a:e340::/29", "205689"}, + {"2a10:a80::/32", "202717"}, + {"2001:9f0::/29", "719"}, + {"2604:d600:1073::/40", "32098"}, + {"2804:6244::/32", "269287"}, + {"2a01:598::/29", "3320"}, + {"2001:67c:1810::/48", "62392"}, + {"240a:a6d3::/32", "144397"}, + {"2a0a:fd40::/29", "44851"}, + {"2a0e:f600:49::/29", "60781"}, + {"2a01:a7c0::/32", "199606"}, + {"2a0d:4d00:80::/48", "44794"}, + {"240a:afbe::/32", "146680"}, + {"240a:afbf::/32", "146681"}, + {"2607:6004:a100::/40", "397378"}, + {"2607:b400:a01::/48", "40220"}, + {"2a02:5360::/32", "51326"}, + {"2400:cb00:300::/47", "13335"}, + {"2a02:26f0:ea01::/39", "20940"}, + {"2c0f:eb00:700::/40", "37148"}, + {"2607:a780:1::/48", "395518"}, + {"2620:0:2250::/48", "20130"}, + {"2800:bc0::/32", "20080"}, + {"2a02:26f7:dbc1::/46", "20940"}, + {"2a02:2e02:1950::/42", "12479"}, + {"2001:67c:2c54::/48", "13189"}, + {"240a:ac6e::/32", "145832"}, + {"2804:90:4100::/38", "28580"}, + {"2804:5cd4::/33", "268933"}, + {"2806:230:200c::/48", "265594"}, + {"2a03:efc0:1700::/40", "33438"}, + {"2a0e:68c0:4::/48", "57616"}, + {"2a0e:97c0:6d1::/46", "208690"}, + {"2c0f:5200::/32", "328822"}, + {"2c0f:fc90:1002::/32", "16284"}, + {"2001:480:50::/48", "6043"}, + {"240a:a6b3::/32", "144365"}, + {"240e:3bd:4c00::/35", "136200"}, + {"2a01:9860::/32", "205952"}, + {"2a02:26f7:cc09::/42", "20940"}, + {"2a03:6420::/32", "39384"}, + {"2a0a:ec40::/32", "62214"}, + {"240a:a977::/32", "145073"}, + {"2602:fc0a::/48", "400191"}, + {"2804:4008::/32", "265929"}, + {"2804:59a0:1000::/36", "268714"}, + {"2a02:7d8:e10::/32", "3302"}, + {"2a03:4d42:1000::/31", "199610"}, + {"2a09:7c45::/32", "135330"}, + {"2001:4088::/32", "9153"}, + {"2402:800:9739::/41", "7552"}, + {"2a02:26f7:cc80::/48", "36183"}, + {"2a02:26f7:cdc9::/42", "20940"}, + {"2a03:dc00::/32", "57752"}, + {"2a0b:aac0::/29", "64236"}, + {"2a0e:b101:302::/32", "60474"}, + {"2001:67c:2b38::/48", "16101"}, + {"2600:6c38:1b7::/44", "20115"}, + {"2803:10a0::/32", "266793"}, + {"2804:6b6c::/32", "270399"}, + {"2a02:b48:800c::/46", "39572"}, + {"2001:da8:b00c::/48", "23910"}, + {"2406:c500:ffef::/48", "4739"}, + {"2605:1500::/32", "19518"}, + {"2620:106:f000::/47", "22964"}, + {"2a02:26f7:da85::/46", "20940"}, + {"2001:d10:9800::/33", "4787"}, + {"240a:a2ab::/32", "143333"}, + {"2600:2c01:1000::/36", "27582"}, + {"2603:c027:4000::/35", "31898"}, + {"2800:88:14::/41", "26210"}, + {"2a01:8840:b5::/48", "207266"}, + {"2a03:5640:f200::/42", "16509"}, + {"2c0f:f5b8::/32", "327997"}, + {"2400:44a0::/48", "149194"}, + {"2403:c000:1401::/48", "38228"}, + {"240e:67a:1800::/32", "4134"}, + {"2a00:1908:e965::/48", "50475"}, + {"2a10:3dc0::/29", "204790"}, + {"2620:84:a000::/44", "398330"}, + {"2804:764::/32", "10733"}, + {"2a06:7880::/29", "12437"}, + {"2001:df3:5a00::/48", "131996"}, + {"2001:df4:9f00::/48", "135722"}, + {"2403:7500::/32", "38566"}, + {"2605:a900:2200::/35", "46887"}, + {"2607:f6f0:8001::/48", "394749"}, + {"2804:2524::/32", "264262"}, + {"2804:504c::/33", "268380"}, + {"2a02:26f7:c285::/46", "20940"}, + {"2a02:26f7:ed88::/48", "36183"}, + {"2a06:e881:7800::/40", "212002"}, + {"2a0c:f80::/29", "209372"}, + {"2001:67c:2054::/48", "34953"}, + {"2001:1248:5a99::/42", "11172"}, + {"2607:fb58:2::/34", "36086"}, + {"2a0b:b602::/32", "57758"}, + {"2001:550:9803::/38", "174"}, + {"2606:3d40:e::/48", "400097"}, + {"2620:0:630::/48", "4185"}, + {"2001:1248:559d::/42", "11172"}, + {"2001:1248:5f00::/43", "11172"}, + {"2001:49f0:d0e6::/48", "30058"}, + {"2409:8008:d9::/48", "24547"}, + {"2a02:26f7:7f::/48", "20940"}, + {"2c0f:fd80::/32", "25543"}, + {"2001:3c8:1401::/48", "3839"}, + {"2001:67c:2e54::/48", "200871"}, + {"2804:f64::/32", "263583"}, + {"2804:3ef8::/32", "266632"}, + {"2a02:5320:b00::/40", "12189"}, + {"2001:428::/36", "209"}, + {"2001:550:c00:103::/61", "174"}, + {"2001:559:c2f1::/48", "20214"}, + {"2401:f100::/32", "38651"}, + {"240a:aad8::/32", "145426"}, + {"2607:f408:1::/48", "19871"}, + {"2804:1c50::/32", "61649"}, + {"2600:1408:4801::/37", "20940"}, + {"2602:ff84:8::/48", "3223"}, + {"2a04:5ec0::/29", "60239"}, + {"2001:678:5d0::/48", "204723"}, + {"2001:978:2a03::/35", "174"}, + {"2403:1000:1100::/38", "38819"}, + {"2404:e801:200c::/46", "55430"}, + {"240a:a906::/32", "144960"}, + {"2620:149:ae2::/45", "714"}, + {"2804:5484::/32", "268655"}, + {"2806:20d:1114::/42", "32098"}, + {"2a00:1f00::/32", "50295"}, + {"2a0a:7e04::/30", "61317"}, + {"2001:67c:2bd0::/48", "204847"}, + {"2a02:76c0:1::/48", "61170"}, + {"240a:a2a1::/32", "143323"}, + {"240a:a8d2::/32", "144908"}, + {"2a00:d740::/29", "61006"}, + {"2a02:26f7:84::/48", "36183"}, + {"2a0e:97c0:130::/44", "211972"}, + {"2402:e280:216b::/43", "134674"}, + {"2607:f928:5::/48", "14085"}, + {"2800:160:16e0::/44", "14259"}, + {"2001:470:32::/48", "19969"}, + {"2401:4d40::/30", "59125"}, + {"2804:85bc::/36", "272597"}, + {"2a02:2e02:8cf0::/39", "12479"}, + {"2a05:7980::/29", "201246"}, + {"240a:a63b::/32", "144245"}, + {"240e:109:8000::/43", "58519"}, + {"2a07:c540::/29", "198930"}, + {"2800:160:2421::/41", "14259"}, + {"2a02:26f7:df04::/48", "36183"}, + {"2a0c:ea40::/29", "200409"}, + {"2001:df7:9980::/48", "147039"}, + {"240a:a797::/32", "144593"}, + {"2600:380:7d80::/32", "20057"}, + {"2620:131:1038::/41", "26450"}, + {"2800:160:1ab7::/44", "14259"}, + {"2402:5ac0::/32", "137409"}, + {"2409:8915:6000::/39", "56044"}, + {"2600:1419:b401::/36", "20940"}, + {"2602:fed2:8000::/36", "1239"}, + {"2800:160:20e9::/39", "14259"}, + {"2804:4ca8::/36", "267383"}, + {"2a04:dc1::/48", "199386"}, + {"2403:6d00::/40", "56094"}, + {"2804:25d8::/32", "264307"}, + {"2806:2f0:21c1::/48", "22884"}, + {"2a00:19e0::/29", "25504"}, + {"2a00:8d80::/32", "15557"}, + {"2a02:26f7:e485::/46", "20940"}, + {"2001:4978:500::/45", "13331"}, + {"2402:fa00:6000::/32", "55359"}, + {"240e:3bb:8200::/35", "140316"}, + {"2600:6c21:489::/41", "20115"}, + {"2605:a380::/34", "53828"}, + {"2804:840:8030::/38", "262680"}, + {"2a09:b682::/31", "210625"}, + {"2a0e:b107:93a::/48", "204446"}, + {"2001:559:5b2::/48", "33287"}, + {"2406:8f00::/32", "38761"}, + {"240e:378:aa00::/39", "140330"}, + {"2a02:e8::/32", "43128"}, + {"2a0d:3842:1170::/48", "57629"}, + {"240a:a8ce::/32", "144904"}, + {"2804:14d:8e8e::/43", "28573"}, + {"2804:6900::/32", "270242"}, + {"2401:d800:f9e0::/38", "7552"}, + {"240a:a629::/32", "144227"}, + {"2803:39e0::/32", "270023"}, + {"2804:8658:200::/32", "272637"}, + {"2a06:cbc0::/29", "12693"}, + {"2001:1900:220a::/48", "53670"}, + {"2408:8452::/31", "4837"}, + {"2001:4490:d500::/46", "9829"}, + {"2401:8a00::/32", "10099"}, + {"2408:4009::/37", "37963"}, + {"2408:8256:3889::/43", "17623"}, + {"2602:80a:c000::/48", "399685"}, + {"2607:8200:e000::/36", "6295"}, + {"2620:31:c000::/48", "62478"}, + {"2804:1f50::/32", "61607"}, + {"2a01:664:c00::/35", "48951"}, + {"2001:559:2a3::/48", "33660"}, + {"2001:67c:228::/48", "42175"}, + {"2407::/62", "4761"}, + {"2408:8256:396d::/48", "17816"}, + {"2600:6c3b:4e6::/32", "20115"}, + {"2604:4d40:7b1b::/48", "399196"}, + {"2804:3ae0::/32", "266115"}, + {"2a01:7080::/43", "42848"}, + {"2a02:2e00:f000::/36", "12479"}, + {"2a0e:97c0:780::/46", "47316"}, + {"2001:16a2:c2c0::/46", "39891"}, + {"2602:fd28::/36", "62866"}, + {"2a02:850::/44", "30971"}, + {"2a04:4e40:3c00::/47", "54113"}, + {"2600:6c10:ff25::/44", "20115"}, + {"2607:fc68:101::/32", "2711"}, + {"2804:6478::/32", "53123"}, + {"2a04:2e40::/29", "51859"}, + {"2604:d600:543::/44", "32098"}, + {"2a00:6901:b002::/47", "20926"}, + {"2a0e:b107:18::/48", "210814"}, + {"240a:a5ee::/32", "144168"}, + {"2602:feda:d70::/44", "138435"}, + {"2a02:13c8::/32", "39484"}, + {"2a03:a80::/32", "15836"}, + {"2a06:6f00::/29", "197164"}, + {"2a0e:6901:200::/37", "57695"}, + {"2001:67c:21cc::/48", "25354"}, + {"2a00:1c20::/32", "50989"}, + {"2a0c:b641:1c0::/47", "39792"}, + {"2001:559:85ec::/48", "33657"}, + {"2408:84f3:4010::/42", "134543"}, + {"240a:a9c7::/32", "145153"}, + {"2a03:9220::/32", "15742"}, + {"2001:559:852b::/48", "20214"}, + {"2403:ad80:94::/48", "135309"}, + {"2801:0:330::/48", "52382"}, + {"2401:d800:9b00::/42", "7552"}, + {"2804:34ac::/32", "265472"}, + {"2001:67c:1211::/48", "42139"}, + {"2001:918:f00::/40", "8300"}, + {"2404:6dc0::/32", "135876"}, + {"2620:13e:d000::/44", "32864"}, + {"2401:13c0::/34", "132652"}, + {"2405:84c0:9000::/44", "139618"}, + {"240a:a90e::/32", "144968"}, + {"2804:18f8::/32", "61766"}, + {"2a02:88d:813f::/40", "47794"}, + {"2a0c:9a40::/48", "202479"}, + {"2403:8600:a080::/43", "45820"}, + {"2407:2bc0::/32", "136380"}, + {"2607:2480:2::/48", "395450"}, + {"2620:ef:c000::/48", "64233"}, + {"2804:ae0:8100::/38", "28352"}, + {"2806:2f0:21e1::/46", "17072"}, + {"2a02:ac80:d01::/38", "25145"}, + {"2404:f4c0:fac0::/47", "142284"}, + {"2600:3505:f000::/28", "396998"}, + {"2600:6c21:6::/43", "20115"}, + {"2620:3e::/48", "394271"}, + {"2a02:2528:2613::/48", "2613"}, + {"2001:67c:274c::/48", "42034"}, + {"240a:a4a8::/32", "143842"}, + {"2620:16e:287::/48", "3147"}, + {"2804:145c:c510::/42", "263327"}, + {"2804:62f0:a102::/35", "269329"}, + {"2a03:94e0::/30", "56655"}, + {"2408:8459:c450::/38", "17816"}, + {"2409:8924:6b00::/37", "56046"}, + {"2600:6c10:9b::/45", "20115"}, + {"2804:28ec::/32", "263987"}, + {"2804:5048::/32", "268379"}, + {"2a04:4e40:4810::/41", "54113"}, + {"2001:df6:5880::/48", "142022"}, + {"2001:44b8:28::/48", "7545"}, + {"2405:9800:d003::/48", "133848"}, + {"2804:ef4:3::/33", "28642"}, + {"2a12:3f00::/29", "204790"}, + {"2403:2500:4000::/41", "36236"}, + {"2409:8907:7520::/38", "24547"}, + {"2605:a404:29a::/41", "33363"}, + {"2a00:fde0::/32", "199736"}, + {"2a11:f880::/29", "204790"}, + {"2400:5d80::/32", "58507"}, + {"2402:600:a12b::/33", "38515"}, + {"2a02:678::/32", "8632"}, + {"2a02:26f7:df41::/46", "20940"}, + {"2408:8957:8e00::/40", "17622"}, + {"2409:8055:9::/45", "56040"}, + {"2409:8c54:4020::/36", "56040"}, + {"240a:a405::/32", "143679"}, + {"240a:ac9c::/32", "145878"}, + {"2605:a404::/42", "33363"}, + {"2a02:26f7:dec0::/48", "36183"}, + {"2600:6c3a:1e::/41", "20115"}, + {"2605:aa40:c1e0::/48", "18792"}, + {"2800:160:1b71::/40", "14259"}, + {"2804:4284::/38", "267505"}, + {"240a:a307::/32", "143425"}, + {"2a00:7145:b1::/48", "51430"}, + {"2a02:d8:e::/32", "44654"}, + {"2001:df1:b400::/48", "10214"}, + {"2605:9d80:8001::/48", "4134"}, + {"2801:80::/48", "28646"}, + {"2001:250:6400::/45", "24367"}, + {"240a:a496::/32", "143824"}, + {"2603:fe80::/25", "397165"}, + {"2620:12d:6000::/47", "13380"}, + {"2804:22c:6::/32", "22689"}, + {"2804:80d4::/32", "272415"}, + {"2804:81b8::/33", "272472"}, + {"2a00:c1c0::/32", "31241"}, + {"2408:8957:9800::/40", "17622"}, + {"2600:370f:7421::/46", "32261"}, + {"2800:a00::/32", "11315"}, + {"2001:3c8:1702::/34", "4621"}, + {"2001:559:8586::/47", "7922"}, + {"2001:16a2:8030::/44", "25019"}, + {"2001:1a11:b2::/45", "42298"}, + {"2001:559:c405::/48", "33657"}, + {"2001:1a11:115::/48", "8781"}, + {"2402:1c00:c05::/46", "23838"}, + {"2408:8956:4d00::/40", "17816"}, + {"2606:b300::/33", "33438"}, + {"2620:108:7000::/44", "16509"}, + {"2804:4d74::/32", "268197"}, + {"2a02:26f7:dc08::/48", "36183"}, + {"2001:559:4e5::/48", "20214"}, + {"2001:16a3::/29", "39386"}, + {"2404:4e00:1083::/48", "32787"}, + {"240e:878::/40", "137689"}, + {"2804:4d14::/32", "266054"}, + {"2a00:4fa0::/29", "206293"}, + {"2001:44c8:4750::/40", "45430"}, + {"2603:c0f8:2000::/43", "20054"}, + {"2804:416c::/32", "267432"}, + {"2a03:7940::/32", "197226"}, + {"2001:df0:5bc0::/48", "140825"}, + {"2408:8459:ba30::/41", "17622"}, + {"2a0c:2bc0::/29", "212302"}, + {"2405:58c0:4100::/38", "133101"}, + {"2600:1408:a402::/36", "20940"}, + {"2607:fcd0:100:b01::/53", "8100"}, + {"2620:11e:3050::/44", "395686"}, + {"2a03:a4e0:100::/40", "2119"}, + {"2a0a:a980::/29", "31742"}, + {"2a0f:600:600::/47", "51044"}, + {"2001:c20:c843::/45", "3758"}, + {"240a:a89c::/32", "144854"}, + {"240e:44d:1e00::/41", "140345"}, + {"2803:4e10::/32", "271965"}, + {"2804:4024:2022::/44", "265937"}, + {"2a03:30c0::/32", "61408"}, + {"2a03:41a0:10::/44", "59764"}, + {"2001:b200:700::/34", "9505"}, + {"2407:7a80:11::/46", "132384"}, + {"2408:8001:3070::/44", "17623"}, + {"240a:a019::/32", "142675"}, + {"240e:fe:6000::/32", "136200"}, + {"2804:124c:4c0::/38", "263468"}, + {"2a02:2e02:17d0::/42", "12479"}, + {"2001:559:4d7::/48", "33657"}, + {"240e:ff:c008::/48", "140310"}, + {"2606:7080::/32", "13727"}, + {"2803:dac0:15::/38", "265634"}, + {"2804:52f4:b00::/32", "268552"}, + {"2001:42d0::/44", "33764"}, + {"240e:108:41::/48", "4811"}, + {"2a03:2480:8028::/46", "200107"}, + {"2401:d800:73f2::/37", "7552"}, + {"2402:e380:309::/48", "137940"}, + {"2408:8256:3b7f::/48", "17816"}, + {"2a07:5cc0::/29", "3399"}, + {"2a0e:46c4:1100::/40", "38230"}, + {"2400:9c80::/48", "58396"}, + {"2402:b740:8002::/33", "140867"}, + {"240e:85c:50::/26", "4134"}, + {"2602:801:f00d::/46", "32590"}, + {"2607:3e80::/32", "16463"}, + {"2a00:40a0::/40", "49528"}, + {"2a0a:df80:24::/48", "39212"}, + {"2001:250:301b::/48", "23910"}, + {"240a:a9e0::/32", "145178"}, + {"2604:2e80::/47", "30036"}, + {"2607:f6f8:3101::/32", "30170"}, + {"2620:f0:4000::/45", "394699"}, + {"2620:10c:700e::/47", "2906"}, + {"2a01:a700:4643::/29", "39138"}, + {"2a0d:c80::/29", "21032"}, + {"2a10:4680::/29", "399975"}, + {"2001:1388:8a60::/46", "264684"}, + {"2406:eb00:132::/48", "132653"}, + {"240e:44d:4440::/42", "140359"}, + {"2801:80:a70::/48", "263257"}, + {"2a02:26f7:ed89::/42", "20940"}, + {"2001:1900:300a::/43", "3356"}, + {"2409:8c44:b01::/35", "24445"}, + {"2a02:26f0:d500::/48", "34164"}, + {"2a05:4c00::/29", "24750"}, + {"2001:559:85df::/48", "33491"}, + {"2001:4479:1900::/34", "7545"}, + {"2600:1417:d001::/37", "20940"}, + {"2600:9000:11e0::/47", "16509"}, + {"2a00:fa40:2000::/36", "57739"}, + {"2a03:17c0::/32", "44300"}, + {"2a04:7f80::/29", "48728"}, + {"2001:559:8085::/48", "33287"}, + {"2405:43c0:1000::/48", "139636"}, + {"2600:6c33:219::/37", "20115"}, + {"2804:4f90::/38", "268335"}, + {"2a00:41e0::/29", "57809"}, + {"2a03:b8c0:1e::/48", "396253"}, + {"2a06:a005:240::/43", "211358"}, + {"2402:800:9163::/43", "7552"}, + {"2a05:e780::/29", "52115"}, + {"2a09:2940::/32", "209898"}, + {"2001:df6:b800::/48", "59349"}, + {"2001:e60:a308::/42", "4766"}, + {"2405:dc00:fe::/47", "4804"}, + {"2001:67c:19d4::/48", "30877"}, + {"2400:6280:104::/48", "132280"}, + {"240a:ab72::/32", "145580"}, + {"2606:3d00::/32", "13549"}, + {"2620:171:65::/48", "715"}, + {"2403:cfc0:100c::/48", "395092"}, + {"240e:3b7:c800::/37", "4134"}, + {"2804:40a0:f400::/36", "265971"}, + {"2a02:4a8::/32", "25234"}, + {"2806:2f0:7103::/42", "17072"}, + {"2a03:4360::/32", "61307"}, + {"240e:44d:2500::/41", "140345"}, + {"2804:ad8:4380::/32", "262494"}, + {"2804:2b44:87::/32", "265144"}, + {"2a02:5500::/32", "40993"}, + {"2a03:2887:ff25::/48", "63293"}, + {"2a07:b5c0::/29", "41046"}, + {"2a0c:dc80::/32", "208033"}, + {"2001:978:4f06::/35", "174"}, + {"2001:c20:48a7::/44", "3758"}, + {"2602:fc53:1::/46", "399924"}, + {"2602:fd92:801::/48", "142418"}, + {"2a09:c740::/32", "205718"}, + {"2a0a:4540:1000::/48", "16509"}, + {"2408:8957:d2c0::/37", "17816"}, + {"240a:a958::/32", "145042"}, + {"2605:3a40::/47", "6233"}, + {"2600:1f16::/36", "16509"}, + {"2602:fe0d::/36", "30168"}, + {"2804:2028::/32", "264473"}, + {"2a02:26f0:3401::/39", "20940"}, + {"2a06:1287:3010::/38", "61138"}, + {"2400:cb00:a2c2::/48", "13335"}, + {"2409:896a:5200::/39", "9808"}, + {"240a:a896::/32", "144848"}, + {"2804:2ca4:4100::/32", "265232"}, + {"2804:43dc::/32", "267595"}, + {"2804:6c08:c000::/34", "270441"}, + {"2a02:88d:4030::/44", "48695"}, + {"2a04:4e40:3a10::/41", "54113"}, + {"2a06:fd80::/47", "206206"}, + {"2600:140f:f400::/48", "9498"}, + {"2804:5e8c::/32", "269040"}, + {"2a0c:9a40:8085::/48", "7489"}, + {"2001:559:87cc::/48", "33657"}, + {"2408:8957:2840::/40", "17622"}, + {"2605:a000:70e::/48", "11955"}, + {"2804:2884::/32", "263966"}, + {"2402:4480:304::/48", "138433"}, + {"2409:8c14:f0::/44", "9808"}, + {"2a02:26f7:c309::/46", "20940"}, + {"2a04:5d00::/41", "60241"}, + {"2408:8956:c600::/40", "17622"}, + {"2a02:2e02:95b0::/38", "12479"}, + {"2a03:26e0::/32", "201646"}, + {"2a03:90c0:320::/40", "199524"}, + {"2001:559:369::/48", "33287"}, + {"2001:5a0:5202::/32", "6453"}, + {"240e:59:8000::/30", "4134"}, + {"2801:1c:3000::/48", "16906"}, + {"2804:84d8::/32", "272283"}, + {"2a05:7300::/32", "35701"}, + {"2001:559:84f2::/48", "33657"}, + {"2600:1408:4401::/36", "20940"}, + {"2600:6c10:c25::/44", "20115"}, + {"2a09:cc0::/48", "44364"}, + {"2a0f:5180::/32", "29802"}, + {"2a10:9100:7::/48", "209588"}, + {"2606:1980:100::/48", "54994"}, + {"2804:3b80::/32", "266153"}, + {"2a02:26f7:e388::/48", "36183"}, + {"2a02:ee80:4140::/43", "3573"}, + {"2a0e:1c80:2::/48", "50304"}, + {"2a0e:2940::/29", "207787"}, + {"2001:559:556::/48", "33659"}, + {"2001:67c:1b8::/48", "8916"}, + {"2402:800:3d01::/44", "7552"}, + {"2602:fca7:1::/46", "399318"}, + {"2806:2f0:9f21::/40", "17072"}, + {"2001:44b8:1054::/47", "4739"}, + {"2404:bf40:a041::/40", "139084"}, + {"240a:a048::/32", "142722"}, + {"2600:1408:5401::/36", "20940"}, + {"2804:40::/34", "28657"}, + {"2806:370:2110::/44", "28403"}, + {"2a04:4e40:c600::/48", "54113"}, + {"2600:1010:9f10::/40", "22394"}, + {"2600:140b:d001::/37", "20940"}, + {"2a00:bc20::/32", "9186"}, + {"2a02:26f7:6b::/48", "20940"}, + {"2a02:6c20:5::/48", "208143"}, + {"2001:559:545::/48", "22258"}, + {"2001:678:100::/48", "47697"}, + {"240a:a743::/32", "144509"}, + {"2620:96:a000::/48", "399628"}, + {"2602:fcc9:777::/48", "32505"}, + {"2605:a7c0:111::/44", "16509"}, + {"2806:230:1600::/36", "11888"}, + {"2a06:98c1:3120::/46", "13335"}, + {"2001:253:133::/48", "142099"}, + {"2001:559:81ed::/48", "33668"}, + {"2001:678:e60::/48", "212596"}, + {"2001:8b0::/57", "20712"}, + {"2620:4:a000::/48", "16539"}, + {"2800:200:e281::/43", "12252"}, + {"2804:113c:ac00::/33", "53181"}, + {"2a00:11b0::/29", "16019"}, + {"2a00:df80:ffff::/48", "210611"}, + {"2a02:26f7:d90d::/42", "20940"}, + {"2401:3c0:118::/47", "45528"}, + {"240e:16:b203::/45", "38283"}, + {"2607:cc00::/32", "36003"}, + {"2a02:e0:3803::/45", "34984"}, + {"2a09:1b40::/32", "209383"}, + {"2a09:2681::/32", "61282"}, + {"2001:559:81cc::/47", "33287"}, + {"2402:800:32c5::/43", "7552"}, + {"2409:8924:a700::/36", "56046"}, + {"2803:ffe0::/32", "27951"}, + {"240a:aba8::/32", "145634"}, + {"2606:f100::/32", "3300"}, + {"2a04:1b00:e::/47", "61007"}, + {"2001:559:860c::/47", "7922"}, + {"240a:a36c::/32", "143526"}, + {"240e:3bc:f100::/37", "134775"}, + {"2600:1419:4a01::/39", "20940"}, + {"2603:d090::/25", "30600"}, + {"2605:f700:40::/46", "18978"}, + {"2800:484:cd00::/38", "10620"}, + {"2804:4bfc::/32", "267341"}, + {"2a03:2480:80::/48", "200107"}, + {"2a0a:90c0:1090::/48", "205080"}, + {"2408:8459:1050::/37", "17816"}, + {"2409:8052:3802::/40", "56047"}, + {"2606:1980:12::/47", "54994"}, + {"2a02:f880::/29", "61244"}, + {"2a07:2280::/29", "48909"}, + {"2400:9700:121::/44", "24550"}, + {"2400:cb00:11::/46", "13335"}, + {"2600:1480:3000::/40", "33905"}, + {"2804:214:4002::/43", "26615"}, + {"2a00:1d58:fa1c::/46", "47524"}, + {"2001:56b:e::/47", "7861"}, + {"2620:65:8000::/46", "20306"}, + {"2620:101:2009::/46", "30238"}, + {"2800:160:1fc8::/46", "14259"}, + {"2804:aa8:700::/36", "52903"}, + {"2806:230:601c::/48", "265594"}, + {"2a01:367:c205::/35", "30823"}, + {"2a02:1760::/32", "33864"}, + {"2a0d:8d04::/31", "44103"}, + {"2001:dce:8800::/48", "38064"}, + {"240a:a9f0::/32", "145194"}, + {"2001:df7:8280::/48", "147017"}, + {"2a01:4aa0::/32", "24951"}, + {"2a0e:c5c0::/32", "208854"}, + {"2401:d800:93e0::/37", "7552"}, + {"2402:3a80:1900::/40", "38266"}, + {"2a00:c840::/32", "44998"}, + {"2a05:ed40::/29", "207628"}, + {"2606:1340::/32", "399091"}, + {"2a00:c00:f060::/46", "15769"}, + {"2a09:9ac0::/48", "209562"}, + {"240e:967:ac00::/33", "4134"}, + {"2620:128:e00c::/48", "22317"}, + {"2a03:47c0:2181::/38", "21277"}, + {"2804:3b9c::/32", "266160"}, + {"2a02:26f7:c88e::/47", "20940"}, + {"2001:b201::/21", "3462"}, + {"240a:af2d::/32", "146535"}, + {"2a00:da8:fffb::/48", "6878"}, + {"2a07:9100::/29", "202774"}, + {"2a09:bac0:201::/45", "13335"}, + {"2001:200:a00::/37", "2500"}, + {"2400:1700:200::/48", "136552"}, + {"2402:7500:5c0::/48", "24158"}, + {"2604:d600:c7b::/45", "32098"}, + {"2001:559:364::/48", "13367"}, + {"2001:559:520::/48", "33651"}, + {"2001:1248:a4b4::/46", "11172"}, + {"2001:1540:dd06::/34", "47886"}, + {"2407:500:4000::/39", "58940"}, + {"2a01:c50f:b100::/38", "12479"}, + {"2a02:26f7:d248::/48", "36183"}, + {"2a0b:7ec0:deae::/29", "206728"}, + {"2620:11a:c018::/48", "54113"}, + {"2804:2b58::/32", "265148"}, + {"2804:7608::/32", "271085"}, + {"2806:20d:36ff::/33", "32098"}, + {"2a07:1980::/46", "25773"}, + {"2001:19f0:5000::/34", "20473"}, + {"2806:268:2405::/40", "13999"}, + {"2a05:55c0::/31", "50597"}, + {"2a0c:6c40:c82f::/48", "20705"}, + {"2402:800:41ef::/43", "7552"}, + {"2803:f3a0::/32", "267758"}, + {"2804:4220::/32", "267479"}, + {"2a02:26f7:bac4::/47", "36183"}, + {"2001:559:c2ed::/48", "33659"}, + {"2a01:4120::/32", "62363"}, + {"2a10:2f00:15c::/48", "212292"}, + {"2406:e780::/36", "63679"}, + {"240a:a86c::/32", "144806"}, + {"240e:51:5800::/37", "137695"}, + {"2804:5330::/32", "174"}, + {"2a02:26f7:d48c::/48", "36183"}, + {"2605:cb80::/32", "17210"}, + {"2800:bf0:826f::/48", "27947"}, + {"2a0b:f300:4c7::/30", "62240"}, + {"2001:480:561::/38", "668"}, + {"2001:67c:744::/48", "59632"}, + {"2001:1900:2269::/43", "3356"}, + {"240a:a421::/32", "143707"}, + {"240e:438:5040::/38", "4134"}, + {"2a11:7e03::/32", "135330"}, + {"2804:14c:7577::/44", "28573"}, + {"2804:8334::/32", "272183"}, + {"2409:8057:3074::/37", "56040"}, + {"2c0f:f6c8::/32", "15964"}, + {"2001:559:460::/48", "33287"}, + {"2001:ee0:1007::/40", "45899"}, + {"2408:840d:9e00::/42", "17621"}, + {"2603:c012:2000::/36", "31898"}, + {"2806:230:6012::/48", "265594"}, + {"2a00:c4c0::/32", "56477"}, + {"2602:fcff:10::/48", "57164"}, + {"2607:fdb8:5::/42", "30496"}, + {"2a05:d050:4020::/44", "16509"}, + {"2001:f00::/32", "3836"}, + {"2400:9380:9005::/46", "4809"}, + {"2401:3f00::/32", "56308"}, + {"2402:800:7850::/42", "7552"}, + {"2408:8459:7050::/38", "17816"}, + {"2600:6c38:231::/45", "20115"}, + {"2603:1062:2::/27", "8075"}, + {"2a0d:2e00:1000::/48", "33932"}, + {"2a0f:6fc6::/32", "16262"}, + {"2401:5f80::/45", "38731"}, + {"2405:40::/32", "136744"}, + {"2405:4803:2ee::/43", "18403"}, + {"2604:d600:616::/47", "32098"}, + {"2606:6800::/40", "394597"}, + {"2a01:5c00::/32", "201205"}, + {"2001:678:704::/48", "1257"}, + {"2403::/44", "4755"}, + {"2404:8d02:1045::/44", "9587"}, + {"2406:e000:38a::/43", "23655"}, + {"2409:8028:1800::/40", "56041"}, + {"2600:1408:3401::/36", "20940"}, + {"2a0e:1bc1:2000::/35", "59566"}, + {"2402:800:9afe::/39", "7552"}, + {"2406:840:110::/47", "139317"}, + {"240a:a1e4::/32", "143134"}, + {"2600:1419:c::/48", "35204"}, + {"2408:84f3:4040::/38", "17816"}, + {"2803:4580:8100::/45", "52468"}, + {"2804:3e70::/35", "266596"}, + {"2804:5648::/32", "267988"}, + {"2a01:c50f:ad80::/38", "12479"}, + {"2c0f:e8f8:2100::/32", "328699"}, + {"2001:579:b218::/36", "22773"}, + {"2408:8459:1d10::/42", "17623"}, + {"240e:44d:500::/41", "140345"}, + {"2600:6c10:f042::/44", "20115"}, + {"2804:28e4:403::/32", "28260"}, + {"2408:8957:8b00::/40", "17816"}, + {"2001:559:8106::/48", "20214"}, + {"2001:67c:1868::/48", "57683"}, + {"2620:139:7000::/40", "396950"}, + {"2a02:88d:200::/44", "48695"}, + {"2001:4878:8037::/44", "12222"}, + {"2402:ef2f:2c::/48", "7633"}, + {"240a:a092::/32", "142796"}, + {"240e:698:4900::/38", "4134"}, + {"2a00:1e88:8::/48", "39229"}, + {"2a02:cec0::/30", "25459"}, + {"2a05:5240::/30", "198722"}, + {"2001:700::/32", "224"}, + {"2400:dd03:100b::/29", "7497"}, + {"2803:4000::/32", "265801"}, + {"2001:250:20c::/48", "24349"}, + {"2402:800:63f1::/45", "7552"}, + {"240e:e9:4800::/37", "4134"}, + {"2607:6b80:34::/48", "9009"}, + {"2607:feb0::/32", "26546"}, + {"2800:bf0:2400::/44", "52257"}, + {"2a02:26f7:e501::/46", "20940"}, + {"2a02:2e02:a00::/42", "12479"}, + {"2a0f:240::/29", "60262"}, + {"2405:3300::/32", "131143"}, + {"240a:a8e3::/32", "144925"}, + {"2804:3430::/32", "265441"}, + {"2a00:85a0::/32", "12703"}, + {"2a09:6903::/32", "49981"}, + {"2a09:e640::/29", "204981"}, + {"2a0e:1e80::/29", "9119"}, + {"2a0e:b680::/29", "208016"}, + {"2a11:4980::/29", "210879"}, + {"2001:559:800d::/48", "7725"}, + {"2001:1a11:112::/48", "8781"}, + {"2409:8904:ab40::/33", "24547"}, + {"240a:a766::/32", "144544"}, + {"2620:10a:4008::/48", "29792"}, + {"2a10:200:2::/36", "208059"}, + {"2405:f080:1000::/37", "136907"}, + {"2406:840:44::/47", "139317"}, + {"240e:44d:7280::/41", "4134"}, + {"2a07:aa00:89::/29", "3549"}, + {"2a0a:2307::/48", "20853"}, + {"2001:559:258::/48", "7922"}, + {"2001:7f9::/48", "211655"}, + {"2001:df0:3d80::/48", "18124"}, + {"240a:a6b7::/32", "144369"}, + {"2a0b:e181:400::/38", "198605"}, + {"2001:559:2ea::/48", "33287"}, + {"2408:8956:6c00::/40", "17622"}, + {"2606:aa00::/32", "3794"}, + {"2a0d:c040::/29", "210081"}, + {"2400:dcc0:a604::/39", "38631"}, + {"2401:d800:5f80::/42", "7552"}, + {"2604:d600:2201::/36", "32098"}, + {"2804:77ac::/32", "271192"}, + {"2a01:8840:f5::/48", "207266"}, + {"2a04:3542:c000::/29", "202053"}, + {"2a0d:c9c0:1::/48", "49645"}, + {"2001:468:f00::/35", "11537"}, + {"2001:559:1b6::/48", "33287"}, + {"2001:559:87f8::/48", "7922"}, + {"2408:8056::/32", "4837"}, + {"2600:140b:4c00::/48", "31109"}, + {"2001:559:247::/48", "7016"}, + {"2409:8051:1002::/40", "56047"}, + {"2606:2c80::/32", "36813"}, + {"2607:f740:e640::/46", "63911"}, + {"2803:4c80::/32", "263181"}, + {"2001:559:81a7::/48", "7725"}, + {"2001:df0:7480::/48", "139076"}, + {"2403:7000::/33", "45179"}, + {"2600:1417:17::/44", "20940"}, + {"2a02:2e02:6b0::/41", "12479"}, + {"240a:a7f3::/32", "144685"}, + {"2402:800:910f::/43", "7552"}, + {"2406:f400:40::/44", "38001"}, + {"240e:37a::/35", "140329"}, + {"2a01:43a0::/32", "199998"}, + {"2a0d:d580::/32", "205588"}, + {"2001:559:2e1::/48", "33659"}, + {"2404:bf40:c280::/48", "7545"}, + {"2806:2f0:51a1::/46", "17072"}, + {"2a02:26f7:df8d::/42", "20940"}, + {"2a09:bac0:4::/48", "13335"}, + {"240a:aab4::/32", "145390"}, + {"2604:c840::/32", "397181"}, + {"2804:1784:ff05::/40", "263152"}, + {"2a00:4802:270::/44", "8717"}, + {"2a0c:4380::/40", "20860"}, + {"2407:59c0::/32", "140072"}, + {"2605:a401:80dd::/46", "33363"}, + {"2806:2f0:7061::/46", "17072"}, + {"2001:fd8:34b0::/44", "4775"}, + {"2604:d600:65c::/42", "32098"}, + {"2a02:26f7:d9::/48", "20940"}, + {"2402:800:3363::/43", "7552"}, + {"240a:ac99::/32", "145875"}, + {"2604:2c00:ff80::/41", "11071"}, + {"2804:14c:c600::/40", "28573"}, + {"2804:14d:7e3c::/41", "28573"}, + {"2804:5ec::/32", "28143"}, + {"2804:55b8::/32", "267952"}, + {"2a00:5400::/35", "35753"}, + {"2001:1a11:ca::/47", "8781"}, + {"2603:c022:c000::/35", "31898"}, + {"2606:4700:55::/46", "13335"}, + {"2804:3e70:b008::/33", "266596"}, + {"2a02:26f7:bcc1::/46", "20940"}, + {"2403:bdc0::/32", "138338"}, + {"240a:a718::/32", "144466"}, + {"2606:2800:5130::/48", "15133"}, + {"2a10:5c80::/29", "25726"}, + {"2001:559:7b3::/48", "7922"}, + {"2408:84f3:3650::/44", "17816"}, + {"2409:8a20::/32", "56046"}, + {"240a:aa4d::/32", "145287"}, + {"2a0b:380::/29", "60111"}, + {"2001:250:1c0a::/48", "23910"}, + {"2001:df3:1880::/48", "140015"}, + {"2401:d800:810::/42", "7552"}, + {"2a02:26f7:c3d9::/46", "20940"}, + {"2600:1003:b840::/42", "6167"}, + {"2620:115:50::/40", "18888"}, + {"2804:77c:501::/32", "53222"}, + {"2806:230:3017::/48", "11888"}, + {"2a02:2ab8:330::/32", "702"}, + {"2401:a140:1::/48", "4811"}, + {"240a:ac6f::/32", "145833"}, + {"240e:3bb:6400::/35", "140312"}, + {"2801:194::/44", "18747"}, + {"2a02:26f7:c589::/46", "20940"}, + {"2a0d:e0c0::/29", "210662"}, + {"2408:81a3:c800::/48", "140707"}, + {"2a02:2610::/32", "25521"}, + {"2a02:cb43:3004::/44", "20546"}, + {"2a04:4e40:b840::/44", "54113"}, + {"2a0a:8300::/29", "50911"}, + {"2001:550:1605::/39", "174"}, + {"2620:17e:300::/42", "19991"}, + {"2804:4098:3e90::/32", "265969"}, + {"2804:73e4:3000::/32", "270944"}, + {"2a00:40c0::/31", "12762"}, + {"2a02:7720::/32", "2119"}, + {"2001:559:3b5::/48", "33651"}, + {"2001:559:c197::/48", "33491"}, + {"2602:fed2:3ec::/46", "53356"}, + {"2a0d:ae00::/29", "42910"}, + {"2001:67c:314::/48", "39628"}, + {"2001:da8:4009::/42", "24353"}, + {"2801:17:800::/48", "264635"}, + {"2a02:88d:20::/44", "48695"}, + {"2a04:8580:ffff::/48", "21030"}, + {"2001:4490:3200::/42", "9829"}, + {"240e:946:3005::/46", "58540"}, + {"2600:140f:1e01::/34", "20940"}, + {"2804:5f58::/32", "269093"}, + {"2a06:6440::/29", "200000"}, + {"2a0a:7a04:3::/31", "61317"}, + {"2001:648:22b0::/48", "47616"}, + {"240e:6b6:4000::/36", "140310"}, + {"2a02:c6c2::/31", "58061"}, + {"2001:638:30e::/32", "680"}, + {"2001:4998:28::/48", "36229"}, + {"2402:8dc0::/32", "137496"}, + {"2409:8914:4600::/39", "56044"}, + {"2607:f740:e00c::/48", "200325"}, + {"2804:c00:3600::/32", "52655"}, + {"2804:2070::/32", "28661"}, + {"2804:72d8::/32", "270879"}, + {"2a02:290::/32", "8732"}, + {"2001:67c:1460::/45", "47487"}, + {"2400:8b00:a80::/42", "45727"}, + {"2407:6c80::/32", "38298"}, + {"2804:49a4:c008::/34", "267194"}, + {"2804:4c64::/32", "267368"}, + {"2a00:7b00:f900::/37", "12338"}, + {"2a02:26f7:e281::/46", "20940"}, + {"2a03:af20::/32", "197949"}, + {"240a:a82b::/32", "144741"}, + {"2607:fb10:5064::/43", "2906"}, + {"2a00:1f78:ffff::/48", "8893"}, + {"2620:1ec:901::/45", "8075"}, + {"2a0d:e480::/29", "51207"}, + {"2c0f:5500::/32", "328895"}, + {"2600:140f:3e00::/48", "9498"}, + {"2605:f440:cafe::/48", "209864"}, + {"2804:90c:f800::/38", "262617"}, + {"2a01:b740:a1e::/48", "6185"}, + {"2a02:26f7:ba09::/42", "20940"}, + {"2001:559:8049::/46", "7922"}, + {"2001:559:84ed::/48", "33489"}, + {"2604:e800::/32", "23376"}, + {"2a0c:2dc0::/29", "49028"}, + {"2001:da8:e804::/48", "138373"}, + {"240e:1e:6000::/32", "4134"}, + {"2604:d600:1329::/45", "32098"}, + {"2804:4930::/32", "267169"}, + {"2a02:2760::/32", "51402"}, + {"2a07:9a40::/36", "30081"}, + {"2001:559:2fc::/48", "33652"}, + {"2401:2540::/32", "55899"}, + {"2404:e680:1141::/32", "18409"}, + {"240a:a3d7::/32", "143633"}, + {"240a:af55::/32", "146575"}, + {"240e:3bf:7a00::/32", "140313"}, + {"2603:c002:8e10::/35", "31898"}, + {"2c0f:f0f8::/32", "36924"}, + {"2400:7400:e029::/48", "38044"}, + {"240e:397:600::/36", "140487"}, + {"2602:808:a003::/45", "16509"}, + {"2a02:2e02:83d0::/37", "12479"}, + {"2001:678:784::/48", "3301"}, + {"2402:9900:100::/47", "27435"}, + {"2403:300:a33::/35", "714"}, + {"2001:559:8168::/48", "33662"}, + {"2804:5edc::/32", "269061"}, + {"2a02:26f0:115::/48", "34164"}, + {"2001:c20:4872::/47", "3758"}, + {"2401:d800:54e0::/39", "7552"}, + {"2600:9000:1000::/48", "16509"}, + {"2a00:d60::/32", "29680"}, + {"2a02:26f7:d2c8::/48", "36183"}, + {"2a0b:1900::/44", "57878"}, + {"2001:1248:9745::/46", "11172"}, + {"2804:2788::/32", "263907"}, + {"2a00:1450:480f::/32", "15169"}, + {"2c0f:e870::/32", "60171"}, + {"2001:559:84f6::/44", "33659"}, + {"2001:1248:a4e0::/45", "11172"}, + {"2402:1580:2970::/32", "17682"}, + {"2804:30f8:809::/46", "264984"}, + {"2a02:26f7:b90d::/42", "20940"}, + {"2c0f:f6d0:107::/32", "327687"}, + {"2001:559:80ea::/45", "33287"}, + {"2408:8256:316a::/48", "17816"}, + {"2606:dc0::/32", "398816"}, + {"2620:132:f702::/36", "394977"}, + {"2806:2f0:4283::/43", "17072"}, + {"2a02:28c0::/48", "51806"}, + {"2001:728::/49", "2914"}, + {"2001:b200:4000::/32", "9505"}, + {"2602:fdae::/36", "14106"}, + {"2603:f200::/27", "397165"}, + {"2605:6400:d815::/34", "53667"}, + {"2605:de40:3005::/32", "397553"}, + {"2a02:26f7:c008::/48", "36183"}, + {"2a03:5700::/32", "5524"}, + {"2001:43f8:920::/48", "3741"}, + {"2409:8c85:aa14::/48", "56044"}, + {"240a:ab95::/32", "145615"}, + {"2600:140f:3c01::/39", "20940"}, + {"2408:8459:f800::/40", "17816"}, + {"2607:fa08::/46", "23404"}, + {"2804:1e58::/46", "264422"}, + {"2804:5bdc:8004::/33", "268873"}, + {"2806:2f0:4081::/46", "17072"}, + {"2a02:26f7:d254::/48", "36183"}, + {"2405:23c0::/32", "134325"}, + {"2a00:f0e0:71::/32", "198499"}, + {"2a02:26f7:d988::/48", "36183"}, + {"2a0a:d7c7:808::/48", "8447"}, + {"2001:67c:248c::/48", "47638"}, + {"2001:978:3000:1::/38", "174"}, + {"2401:d800:b292::/41", "7552"}, + {"2a0c:d400:100::/48", "7809"}, + {"2001:bb8::/32", "3221"}, + {"2001:da8:e800::/48", "24368"}, + {"2404:b5c0::/32", "134911"}, + {"2001:1388:2146::/37", "6147"}, + {"2001:1af0:9000::/48", "44325"}, + {"2404:6300:4001::/32", "131310"}, + {"2604:b180:80::/44", "32775"}, + {"2604:d800:1001::/48", "3713"}, + {"2804:1b3:1000::/36", "18881"}, + {"2804:4c74::/32", "267371"}, + {"2a0a:6280::/29", "199434"}, + {"2607:f698::/32", "30176"}, + {"2a00:f90::/32", "34781"}, + {"2a02:5740:18::/48", "41564"}, + {"2001:df0:8380::/48", "131401"}, + {"2402:800:6218::/42", "7552"}, + {"2406:cf00:1000::/43", "23724"}, + {"2408:840c:8800::/40", "17621"}, + {"2607:f928:3::/48", "22645"}, + {"2001:559:41b::/45", "7725"}, + {"240e:67a:c600::/34", "4134"}, + {"2804:248:4008::/32", "28598"}, + {"2001:559:131::/48", "33652"}, + {"2400:adc4::/39", "9541"}, + {"2401:c800::/32", "7511"}, + {"2605:7c0::/48", "19382"}, + {"2804:e30:5800::/37", "11338"}, + {"2a02:ab00::/29", "6830"}, + {"2804:c48:ff01::/44", "52687"}, + {"2804:743c::/32", "270968"}, + {"2a02:2698:3000::/38", "50544"}, + {"2600:1413:9001::/34", "20940"}, + {"2620:6a::/48", "3152"}, + {"2402:8e00::/46", "38529"}, + {"2605:8300:b::/48", "174"}, + {"2606:9580:ff03::/48", "394256"}, + {"2804:62c:2006::/43", "262569"}, + {"2804:4a20::/32", "267220"}, + {"2a02:26f7:c740::/48", "36183"}, + {"2001:559:80c1::/48", "7015"}, + {"2407:d0c0::/32", "133434"}, + {"2620:171:50::/48", "42"}, + {"2a02:598:3334::/33", "43037"}, + {"2a04:4ec0::/31", "202503"}, + {"2a0a:fa00::/29", "49191"}, + {"2a0d:5e80::/29", "200899"}, + {"2001:1978:1b00::/37", "13768"}, + {"2409:895a:d000::/31", "56040"}, + {"2800:d302:13::/45", "11830"}, + {"2a00:1d08::/32", "13003"}, + {"2a01:8840:b1::/48", "207266"}, + {"2a0a:3d00::/48", "1836"}, + {"2001:410:8003::/48", "549"}, + {"2404:f4c0:fa0a::/47", "142280"}, + {"2600:1404:8401::/35", "20940"}, + {"2606:b400:881c::/48", "7160"}, + {"2800:160:1063::/43", "14259"}, + {"2804:4c14:da01::/39", "267348"}, + {"240e:1f:7000::/36", "134763"}, + {"2604:b5c0::/32", "394859"}, + {"2804:1184::/32", "61895"}, + {"2804:7948::/32", "271296"}, + {"2001:559:c0c9::/48", "7016"}, + {"2001:16a2:b800::/38", "25019"}, + {"2a04:5b84:1::/48", "202265"}, + {"2001:ac8:98::/32", "9009"}, + {"2a02:26f7:b408::/48", "36183"}, + {"2a02:26f7:c485::/46", "20940"}, + {"2a02:26f7:d24d::/46", "20940"}, + {"2401:c500:fd04::/48", "54994"}, + {"2402:800:59c5::/43", "7552"}, + {"2a00:e48::/33", "35703"}, + {"2a0a:4300::/29", "56655"}, + {"240a:a56e::/32", "144040"}, + {"2605:6400:9004::/33", "53667"}, + {"2804:7edc::/32", "271652"}, + {"240a:ac90::/32", "145866"}, + {"240a:af20::/32", "146522"}, + {"240e:438:8e40::/35", "4134"}, + {"240e:878:180::/41", "137689"}, + {"2804:710::/47", "17222"}, + {"2806:2f0:4201::/46", "17072"}, + {"2001:5a0:4403::/38", "6453"}, + {"240a:afaf::/32", "146665"}, + {"2602:feda:af8::/48", "138210"}, + {"2800:2f0::/48", "27668"}, + {"2806:230:5014::/48", "265594"}, + {"2a0a:1a80::/29", "203828"}, + {"2a0c:5100::/29", "205071"}, + {"2a0f:cc00:1::/48", "60781"}, + {"2a10:4941:30::/44", "62214"}, + {"2404:4a00:4::/64", "55423"}, + {"2600:100b:b030::/40", "6167"}, + {"2607:f2d8:6000::/32", "18450"}, + {"2a00:1d58:fa23::/45", "47524"}, + {"2001:a48:9000::/33", "8970"}, + {"2001:dce:9500::/48", "38064"}, + {"2001:1260:11f::/40", "13591"}, + {"240a:a3de::/32", "143640"}, + {"2602:feda:c40::/48", "212580"}, + {"2a00:15a8::/36", "29140"}, + {"2a00:17c0:c5::/32", "12993"}, + {"2602:102:1019::/31", "20115"}, + {"2803:10e0::/32", "269853"}, + {"2001:500:76::/44", "30133"}, + {"2803:9800:b037::/44", "11664"}, + {"2804:2678::/32", "264342"}, + {"2600:1488:a521::/35", "20940"}, + {"2a02:1380::/32", "50572"}, + {"2a02:26f7:db48::/48", "36183"}, + {"2a03:6947:1700::/40", "61266"}, + {"2a06:98c0:1000::/48", "203898"}, + {"2a09:500::/32", "48131"}, + {"2409:803c:3091::/42", "24444"}, + {"240a:a88e::/32", "144840"}, + {"240a:a9af::/32", "145129"}, + {"2803:f80::/32", "263726"}, + {"2a02:26f0:8000::/48", "8551"}, + {"2a05:dfc7:9::/42", "61138"}, + {"2a0b:4200:1001::/48", "3303"}, + {"2001:67c:2f9c::/48", "5588"}, + {"2408:8956:500::/40", "17816"}, + {"240a:a996::/32", "145104"}, + {"2804:ef4:5402::/38", "28642"}, + {"2804:4520::/32", "267674"}, + {"2804:77dc::/32", "271204"}, + {"2a02:888:4040::/46", "48695"}, + {"2a02:26f7:dcc8::/48", "36183"}, + {"2001:559:876f::/43", "7016"}, + {"2001:b48::/29", "16117"}, + {"240e:108:44::/48", "134768"}, + {"2804:3af0::/32", "266119"}, + {"2804:4488:7010::/44", "262480"}, + {"2a00:cee5:dcd::/30", "60268"}, + {"2408:8957:1240::/40", "17622"}, + {"240a:ae95::/32", "146383"}, + {"2406:93c0::/32", "137042"}, + {"240a:af47::/32", "146561"}, + {"2001:559:518::/48", "33655"}, + {"2001:4998:64::/48", "393245"}, + {"2604:880:3ad::/41", "29802"}, + {"2620:149:ae7::/43", "714"}, + {"2a01:aea0:dd6::/42", "42473"}, + {"2001:1248:57cf::/42", "11172"}, + {"2604:2e80:1403::/36", "30036"}, + {"2607:7b00:7000::/36", "54643"}, + {"2806:2f0:4641::/46", "17072"}, + {"2a05:4a40:fffe::/47", "2571"}, + {"2a09:5302::/32", "205090"}, + {"2a0a:f0c0::/29", "204860"}, + {"2a10:30c4::/30", "398481"}, + {"2001:559:c31d::/48", "7015"}, + {"240a:ad2a::/32", "146020"}, + {"2600:6c38:557::/42", "20115"}, + {"2605:a401:8f47::/40", "33363"}, + {"2620:124:1000::/44", "12161"}, + {"2a05:e581::/29", "63399"}, + {"2001:559:c366::/44", "7015"}, + {"2404:8d02:2983::/37", "9587"}, + {"2600:6c20:dff::/38", "20115"}, + {"2604:5400:4400::/35", "11776"}, + {"2804:aac:8000::/33", "52905"}, + {"2a00:88a0::/32", "25540"}, + {"2001:1248:5988::/43", "11172"}, + {"2806:230:1016::/48", "265594"}, + {"2a02:26f7:d8c4::/48", "36183"}, + {"2001:df0:c300::/48", "136099"}, + {"2803:87e0::/32", "270095"}, + {"2a04:c180::/29", "12842"}, + {"2a0b:4e80::/32", "206491"}, + {"2001:da8:8000::/48", "24364"}, + {"2602:ff36:301::/40", "395348"}, + {"2620:149:983::/41", "714"}, + {"2804:5598::/32", "267944"}, + {"2804:5ac4:40::/34", "268795"}, + {"2a0d:5c0::/29", "61317"}, + {"2001:678:b7c::/48", "207871"}, + {"2001:16c0:12::/32", "31732"}, + {"2408:8957:f200::/42", "17816"}, + {"240e:3bb:d000::/36", "134772"}, + {"240e:438:6e20::/43", "140647"}, + {"2602:ff3a::/36", "62512"}, + {"2620:49:8080::/48", "7046"}, + {"2804:2000:1000::/33", "264459"}, + {"2a02:26f7:cf85::/46", "20940"}, + {"2a03:9980::/35", "30742"}, + {"2001:ce0:4::/48", "4616"}, + {"2a04:1bc0::/32", "60982"}, + {"2402:800:55ee::/38", "7552"}, + {"2604:38c0::/32", "54097"}, + {"2800:160:1212::/44", "14259"}, + {"2804:2010::/32", "264462"}, + {"2a05:9580::/29", "42120"}, + {"2001:df0:cb::/48", "45786"}, + {"2606:2c40::/48", "209242"}, + {"2a00:10b0::/29", "49586"}, + {"2001:559:53b::/48", "7015"}, + {"2001:559:82a2::/47", "7922"}, + {"2404:3380::/32", "134707"}, + {"2806:2f0:9e03::/42", "17072"}, + {"2a0f:f780::/29", "60262"}, + {"2001:559:161::/48", "7725"}, + {"2001:559:2e3::/48", "33491"}, + {"2001:559:4ac::/48", "22909"}, + {"2620:171:aa::/48", "42"}, + {"2a00:1dc8::/32", "34352"}, + {"2a02:128:14::/48", "201069"}, + {"2a02:2698:a001::/48", "12768"}, + {"2602:feda:e40::/44", "149285"}, + {"2804:eb0::/32", "262968"}, + {"2804:4bc8::/40", "267329"}, + {"2a06:98c1:50::/45", "13335"}, + {"2a09:bac0:11::/46", "13335"}, + {"240a:ab18::/32", "145490"}, + {"2804:7110::/34", "270764"}, + {"2a0e:8f02:f039::/48", "210826"}, + {"2800:bf0:259::/45", "52257"}, + {"240a:a383::/32", "143549"}, + {"2610:1c8::/43", "23393"}, + {"2a02:26f0:2::/45", "20940"}, + {"2a02:26f0:6901::/38", "20940"}, + {"2a0e:b107:21::/48", "137490"}, + {"2001:250:583b::/41", "24363"}, + {"2001:559:8467::/48", "7015"}, + {"2602:805:8000::/40", "397110"}, + {"2a01:51c0::/31", "29422"}, + {"2001:559:714::/48", "20214"}, + {"2401:8800:a00::/46", "17439"}, + {"2405:9800:9814::/38", "45430"}, + {"2407:b000:4015::/48", "394749"}, + {"240e:108:84::/48", "63835"}, + {"2606:3c80:c000::/34", "33582"}, + {"2a02:26f7:c440::/48", "36183"}, + {"2a04:f900::/29", "59921"}, + {"2a07:3fc0::/29", "203468"}, + {"2a07:f600:4045::/48", "9098"}, + {"2600:5400:ce01::/34", "19108"}, + {"2800:1e0:3000::/40", "7195"}, + {"2a01:111:2004::/42", "8075"}, + {"2a0f:e6c0:a::/48", "60781"}, + {"2001:550:502::/38", "174"}, + {"2001:559:2b::/45", "7922"}, + {"2a0b:9e00::/29", "35370"}, + {"2001:468:d02::/40", "4600"}, + {"2804:3434::/32", "265442"}, + {"2a01:618:8000::/38", "8683"}, + {"2a01:5bc0::/32", "48298"}, + {"2a02:26f6:1::/32", "20940"}, + {"2a02:26f7:b984::/47", "36183"}, + {"2a06:d480::/29", "59701"}, + {"2a0e:47c7:1000::/48", "208259"}, + {"2001:559:c208::/48", "33491"}, + {"2602:feda:20::/44", "205532"}, + {"2a06:3c40::/29", "1764"}, + {"2406:3002:20::/48", "9874"}, + {"240e:45c:6800::/40", "131285"}, + {"2607:1b00:10::/48", "54456"}, + {"2620:138:3009::/45", "22604"}, + {"2804:7d48::/32", "271551"}, + {"2001:559:8188::/48", "33659"}, + {"2001:18a0::/32", "23265"}, + {"2001:44b8:6034::/44", "4739"}, + {"240a:a0eb::/32", "142885"}, + {"240a:a28b::/32", "143301"}, + {"2600:1409:c801::/35", "20940"}, + {"2602:fcae::/36", "16904"}, + {"2a04:29c2::/32", "42821"}, + {"2403:3800:8000::/33", "4007"}, + {"240a:ad9e::/32", "146136"}, + {"2620:149:f02::/35", "714"}, + {"2001:559:8160::/48", "7725"}, + {"2403:6e40:160::/44", "9830"}, + {"2803:c010:2a::/48", "271799"}, + {"2804:70bc::/32", "270745"}, + {"2804:7f10::/32", "271664"}, + {"2a02:26f7:ea85::/46", "20940"}, + {"2a04:5c85:1000::/36", "42570"}, + {"2a05:43c3::/29", "210139"}, + {"2409:8c20:5800::/38", "56046"}, + {"2800:160:1869::/43", "14259"}, + {"2a01:8fa::/32", "12302"}, + {"2001:559:465::/48", "7922"}, + {"2001:dce:7000::/48", "45285"}, + {"2603:4010::/31", "3"}, + {"2402:93c0:100::/48", "59073"}, + {"240a:adb1::/32", "146155"}, + {"2001:67c:2b30::/48", "3320"}, + {"2605:7000::/32", "44444"}, + {"2a02:80e0::/30", "197216"}, + {"2a0f:5707:af07::/44", "211358"}, + {"2001:678:e24::/48", "212717"}, + {"240e:3b3:f100::/37", "134775"}, + {"2602:107:2610::/48", "20115"}, + {"2606:b0c0::/32", "8095"}, + {"2a05:980::/29", "201702"}, + {"2001:678:19::/48", "44358"}, + {"2406:a340::/32", "141327"}, + {"2600:1001:f110::/30", "22394"}, + {"2800:bf0:8166::/47", "27947"}, + {"2804:37c4:8200::/39", "266435"}, + {"2804:5960::/32", "268186"}, + {"2804:6414::/32", "269403"}, + {"2a00:1909::/32", "3266"}, + {"2a00:1a10::/29", "41230"}, + {"2602:feda:d55::/44", "141712"}, + {"2001:559:8281::/48", "33665"}, + {"2001:dcc:4::/48", "23599"}, + {"2408:8956:bd00::/40", "17816"}, + {"240a:a19d::/32", "143063"}, + {"2610:a1:1073::/48", "397228"}, + {"2804:2e64::/32", "265343"}, + {"2001:44b8:5034::/44", "7545"}, + {"2401:d800:d790::/42", "7552"}, + {"2604:bfc0::/32", "54646"}, + {"2a00:19c8:9000::/29", "35833"}, + {"2a0f:480::/29", "198111"}, + {"2a10:3f80::/29", "212144"}, + {"2001:559:c35a::/48", "33651"}, + {"2404:1f00:ffa2::/45", "55947"}, + {"2408:8957:2600::/40", "17622"}, + {"2804:23e4:2a::/32", "264191"}, + {"2804:561c::/32", "267977"}, + {"2001:968::/29", "24875"}, + {"2001:49f0:d0b0::/44", "174"}, + {"2406:3002:50:4000::/31", "4657"}, + {"2408:8409:6c00::/40", "4808"}, + {"2607:f4e8:6::/44", "22822"}, + {"2a02:26f7:c9cd::/42", "20940"}, + {"2a09:bfc7::/32", "49544"}, + {"240a:a54b::/32", "144005"}, + {"2803:5c80:5507::/48", "64114"}, + {"2a02:26f7:cbc1::/46", "20940"}, + {"2a0e:97c3:55c::/48", "20473"}, + {"2001:67c:1108::/47", "198060"}, + {"2001:44c8:4080::/44", "131445"}, + {"2402:5300:4110::/38", "45903"}, + {"2408:8256:2f7f::/48", "17816"}, + {"240a:ad50::/32", "146058"}, + {"2a02:26f7:d160::/48", "36183"}, + {"240a:a6dd::/32", "144407"}, + {"2600:1fa0:1040::/44", "16509"}, + {"2a00:c68::/32", "43513"}, + {"2a0a:4640:14::/42", "206177"}, + {"240e:981:300::/36", "4134"}, + {"2605:a404:23c::/40", "33363"}, + {"2606:2800:60f5::/48", "15133"}, + {"2001:410:a01c::/48", "40007"}, + {"2001:468:600::/40", "10578"}, + {"2401:d800:bef0::/39", "7552"}, + {"240a:a309::/32", "143427"}, + {"240a:a396::/32", "143568"}, + {"240a:a7dc::/32", "144662"}, + {"2600:1407:1801::/37", "20940"}, + {"2a02:f840:2::/31", "199483"}, + {"2a0f:9400:8020::/48", "20473"}, + {"2401:f800::/32", "7529"}, + {"240a:a46b::/32", "143781"}, + {"2602:ff18:221::/48", "21973"}, + {"2620:8b:c000::/48", "14382"}, + {"2804:45cc::/32", "266950"}, + {"2a06:ec0::/32", "8943"}, + {"2a0a:7980::/32", "41114"}, + {"2a0f:9400:8011::/48", "207445"}, + {"2001:559:8386::/48", "33491"}, + {"2406:f00:1::/48", "132524"}, + {"2a01:53a0:1001::/48", "199953"}, + {"2001:559:3dc::/48", "33657"}, + {"2001:4430:41e8::/36", "17853"}, + {"240a:abb0::/32", "145642"}, + {"2602:fd2d::/36", "398567"}, + {"2a0b:6b81:208::/48", "203729"}, + {"2a0f:8ac1:d9a3::/48", "205749"}, + {"2401:3c0:205::/44", "45528"}, + {"2a02:2bb8::/32", "24851"}, + {"240e:44d:7340::/42", "140356"}, + {"2001:44b8:2054::/44", "7545"}, + {"2402:800:527f::/40", "7552"}, + {"2606:f40:3001::/48", "14618"}, + {"2a05:e980::/32", "47215"}, + {"2a0e:b107:1170::/47", "142055"}, + {"2407:5440::/48", "141145"}, + {"2407:aa40::/32", "142508"}, + {"240a:ac87::/32", "145857"}, + {"240a:af97::/32", "146641"}, + {"2600:1410:b001::/33", "20940"}, + {"2600:1480:b001::/37", "20940"}, + {"2602:fddd::/36", "26801"}, + {"2604:880:38c::/46", "29802"}, + {"2804:85c8::/32", "272600"}, + {"2a02:2010:2410::/45", "20978"}, + {"2a12:79c0::/32", "47536"}, + {"2001:559:803a::/48", "33491"}, + {"2403:9800:b019::/41", "4648"}, + {"2606:6580::/34", "15305"}, + {"2606:e600::/32", "4258"}, + {"2804:5bc0:c000::/34", "268867"}, + {"2a04:e7c0::/29", "197879"}, + {"2603:c0e8:2910::/40", "1218"}, + {"2607:f740:e621::/48", "63911"}, + {"2a06:1780::/32", "60781"}, + {"2408:8956:9200::/40", "17622"}, + {"240a:aaa1::/32", "145371"}, + {"240e:3b3:2200::/37", "136198"}, + {"2606:2800:50c::/46", "15133"}, + {"2a03:2ca0:256::/34", "59865"}, + {"2001:559:c0f8::/48", "33659"}, + {"2001:678:cf8::/48", "38974"}, + {"2001:1688::/29", "3212"}, + {"240a:a476::/32", "143792"}, + {"2a0e:9300:42c0::/48", "62184"}, + {"2400:adc3::/39", "9541"}, + {"2405:7f00:9b00::/37", "133414"}, + {"2408:8956:d440::/40", "17622"}, + {"2607:f2d8:401b::/48", "33494"}, + {"2803:6604:a001::/37", "28075"}, + {"2804:1288::/36", "263482"}, + {"2a02:26f7:cb00::/48", "36183"}, + {"2a02:2a28::/32", "51137"}, + {"2a09:2740::/29", "209536"}, + {"2404:8d06:6100::/36", "10089"}, + {"240a:ad22::/32", "146012"}, + {"2804:ffc::/32", "263612"}, + {"2a00:e000::/48", "56975"}, + {"2a0d:d6c0::/31", "200350"}, + {"2406:8600:f03f::/41", "10310"}, + {"240e:108:1196::/42", "4134"}, + {"2804:25b4:ff01::/40", "264297"}, + {"2804:2c38::/32", "265204"}, + {"2a04:b903::/32", "8587"}, + {"2a0b:b600:1000::/38", "60404"}, + {"2001:559:8132::/48", "33491"}, + {"2a05:d018::/35", "16509"}, + {"2001:da8:258::/48", "23910"}, + {"2001:1b70:86::/48", "158"}, + {"240e:438:6a40::/37", "4134"}, + {"2804:1ae4::/32", "61697"}, + {"2804:2994::/32", "264023"}, + {"2804:7570::/32", "271046"}, + {"2a0d:f980::/29", "204431"}, + {"2001:559:817c::/48", "33667"}, + {"2001:1b70:4292::/48", "158"}, + {"240e:d:a000::/37", "136193"}, + {"2604:6840:f800::/37", "33438"}, + {"2a0e:c640::/29", "208386"}, + {"2001:503:e8ef::/48", "7342"}, + {"2001:559:c06b::/48", "7016"}, + {"2001:4350:a000::/48", "31245"}, + {"2408:84f3:9e10::/42", "134543"}, + {"240e:3b4:2200::/37", "136198"}, + {"2600:1016:b0e0::/39", "6167"}, + {"2603:b0a3::/28", "11796"}, + {"2a10:50c0::/48", "212772"}, + {"2001:670::/29", "719"}, + {"2001:e10::/32", "7539"}, + {"2408:8456:7a00::/42", "17622"}, + {"240a:a16b::/32", "143013"}, + {"2804:6388::/32", "269367"}, + {"2a00:1938::/32", "42093"}, + {"2a0b:1301:8000::/48", "198018"}, + {"2409:8763::/28", "9808"}, + {"2606:2800:4100::/48", "15133"}, + {"2a02:26f7:e704::/48", "36183"}, + {"2a03:5a00:8::/48", "49124"}, + {"2a03:7c00::/32", "199087"}, + {"2a0b:e200:1::/48", "208321"}, + {"2a11:d940::/29", "30879"}, + {"2409:8054:45::/44", "56040"}, + {"240c:c7b9::/32", "24367"}, + {"240e:980:2400::/40", "134768"}, + {"2603:6080::/28", "11426"}, + {"2804:2cdc::/32", "263069"}, + {"2001:503:6810::/48", "7342"}, + {"2001:5014:400:4::/64", "6461"}, + {"2405:6e00:f810::/48", "133612"}, + {"2a02:26f7:ea81::/46", "20940"}, + {"2403:2500:300::/48", "36236"}, + {"2408:8256:3590::/44", "17623"}, + {"2804:29cc::/32", "264035"}, + {"2001:c20:c84d::/46", "9255"}, + {"2404:a800:2a01::/35", "9498"}, + {"2602:ffa5:100::/40", "53907"}, + {"2804:5e08::/39", "269007"}, + {"2001:559:461::/48", "7015"}, + {"2001:559:8420::/48", "7016"}, + {"240a:a3db::/32", "143637"}, + {"2a01:8840:d1::/48", "207266"}, + {"2a02:26f0:1701::/36", "20940"}, + {"2400:4a20:f000::/36", "141731"}, + {"2401:3c0:217::/44", "45528"}, + {"2407:b000:4016::/32", "17819"}, + {"2604:4c40::/32", "395555"}, + {"2606:4700:9ae0::/44", "13335"}, + {"2800:160:1bbc::/46", "14259"}, + {"2804:38:3403::/45", "19089"}, + {"2001:1a11:79::/46", "42298"}, + {"2402:800:3771::/44", "7552"}, + {"2806:267:2300::/37", "13999"}, + {"2a02:ad8:1200::/37", "12389"}, + {"2409:803c:3800::/40", "24444"}, + {"240e:44d:4a00::/42", "140345"}, + {"2804:2bc4::/32", "265174"}, + {"2a06:5040:10::/45", "4785"}, + {"2605:19c0::/32", "30697"}, + {"2620:1f7:3800::/37", "18703"}, + {"2800:bf0:3742::/42", "27947"}, + {"2803:9840::/32", "263765"}, + {"2804:145c:9000::/33", "263327"}, + {"2a03:8800:2::/32", "49687"}, + {"2c0f:eac0::/32", "37682"}, + {"2408:8409:9000::/40", "4808"}, + {"2607:f428:9360::/44", "12271"}, + {"2804:b18:8090::/41", "52941"}, + {"2001:fd8:261::/46", "4775"}, + {"2403:6200:7105::/37", "45629"}, + {"240e:67e:800::/37", "140329"}, + {"2600:370f:33c0::/46", "32261"}, + {"2605:2480::/32", "53454"}, + {"2804:448::/32", "262427"}, + {"2a00:4900::/32", "12390"}, + {"2a03:3200::/32", "8752"}, + {"2a0f:e404:10a::/48", "58057"}, + {"2408:84ee::/32", "140726"}, + {"2408:84f3:a440::/38", "17816"}, + {"2806:329::/32", "28429"}, + {"2a02:26f7:e949::/46", "20940"}, + {"2001:559:84bd::/48", "33490"}, + {"2001:67c:2f88::/48", "204082"}, + {"240a:a2bc::/32", "143350"}, + {"2600:141b:c01::/38", "20940"}, + {"2804:2168::/32", "53199"}, + {"2a02:970:1244::/47", "44002"}, + {"2a04:3740:3::/29", "35625"}, + {"2001:df0:de80::/48", "138762"}, + {"2400:1440::/32", "135666"}, + {"2406:3a00:10::/48", "136557"}, + {"240a:aa2d::/32", "145255"}, + {"2610:108:8004::/47", "11724"}, + {"2800:3c0:1130::/34", "19863"}, + {"2804:2634:2000::/39", "264332"}, + {"2a00:800:429::/41", "1257"}, + {"2001:67c:6a4::/48", "50370"}, + {"2402:800:b2e0::/39", "7552"}, + {"2607:f7a0:8::/47", "46562"}, + {"2804:14c:9b00::/40", "28573"}, + {"2806:288:4040::/47", "28469"}, + {"2a0e:aa00:301::/48", "41378"}, + {"2001:559:d::/48", "33662"}, + {"2404:7cc0:7f00::/47", "10100"}, + {"240a:a92a::/32", "144996"}, + {"2600:370f:20e1::/43", "32261"}, + {"2a02:26f0:8d01::/40", "20940"}, + {"2401:d800:9bf0::/37", "7552"}, + {"240a:a617::/32", "144209"}, + {"2602:fbfe::/48", "18944"}, + {"2602:fe45::/36", "35900"}, + {"2607:1280:13a0::/44", "394972"}, + {"2800:bf0:1c0::/45", "52257"}, + {"2804:500::/32", "262485"}, + {"2a02:26f7:c74c::/48", "36183"}, + {"2605:a401:8de1::/44", "33363"}, + {"2400:cd00::/35", "38794"}, + {"2402:7400:8000::/33", "38883"}, + {"2409:8055:3074::/30", "56040"}, + {"240a:a315::/32", "143439"}, + {"2800:160:2c18::/42", "14259"}, + {"2a00:c720::/32", "60323"}, + {"2a03:99a0::/32", "2606"}, + {"2001:678:75c::/48", "199819"}, + {"2001:49d0::/40", "2495"}, + {"2600:1400:2000::/48", "35994"}, + {"2804:8e8::/34", "262399"}, + {"2a07:1980:a::/45", "48851"}, + {"2a0c:b641:250::/44", "210821"}, + {"2a10:dfc0::/29", "62206"}, + {"2a00:4802:5110::/29", "8717"}, + {"2a04:4280:10::/48", "43260"}, + {"2a0e:97c0:a41::/46", "210667"}, + {"2001:4488:2005::/33", "7713"}, + {"2a04:3740:1::/46", "24935"}, + {"2a0a:2a40::/29", "50758"}, + {"2a00:c020:5000::/32", "200414"}, + {"2a0a:5000::/29", "57814"}, + {"2001:559:c050::/48", "7015"}, + {"2620:56:4000::/48", "31990"}, + {"2804:71b0::/34", "270805"}, + {"2001:559:581::/48", "33491"}, + {"2001:12f0:d00::/42", "1916"}, + {"240a:adb7::/32", "146161"}, + {"2a03:7600::/32", "34066"}, + {"2001:4478:1600::/36", "4802"}, + {"2400:addd::/30", "9541"}, + {"240e:14:7000::/37", "133775"}, + {"2a0c:b641:454::/48", "210344"}, + {"2001:559:8267::/48", "33650"}, + {"2001:559:c1fa::/48", "7015"}, + {"2001:fb0:10b5::/48", "138685"}, + {"2001:4878:c062::/47", "12222"}, + {"2406:840:fef9::/48", "141776"}, + {"2408:8459:8050::/38", "17816"}, + {"240e:fe::/35", "140317"}, + {"2600:370f:50af::/39", "32261"}, + {"2804:3a4c::/32", "266082"}, + {"2a07:ef40::/29", "204860"}, + {"240e:3be:2c00::/35", "134774"}, + {"2a02:26f7:cc00::/48", "36183"}, + {"2a09:9444::/32", "395092"}, + {"2a0e:97c0:5e0::/48", "210426"}, + {"2a11:aa80::/47", "35673"}, + {"2c0f:f698:8ff1::/33", "37693"}, + {"2804:3e98::/40", "266608"}, + {"2a00:5f80::/32", "57353"}, + {"2a06:1307::/32", "49392"}, + {"2001:400::/43", "293"}, + {"2401:5e80::/32", "132895"}, + {"2607:f500::/35", "6181"}, + {"2800:4b0:4013::/42", "12252"}, + {"2803:1a00:5213::/37", "262186"}, + {"2803:8040::/32", "263749"}, + {"2804:6790::/32", "269636"}, + {"2a04:6000::/29", "50477"}, + {"2001:ce0:9::/34", "3662"}, + {"240a:a07e::/32", "142776"}, + {"240a:a673::/32", "144301"}, + {"2606:1a40:2000::/44", "398962"}, + {"2001:559:3fb::/48", "33287"}, + {"2408:8456:440::/39", "17816"}, + {"240a:a9b4::/32", "145134"}, + {"2a00:8420::/32", "9304"}, + {"2a02:26f7:cfc4::/48", "36183"}, + {"2a03:3a40:2001::/32", "199629"}, + {"2a05:d050:8050::/42", "16509"}, + {"2001:df7:6c00::/48", "134633"}, + {"240a:a8ef::/32", "144937"}, + {"240e:438:3c40::/38", "4134"}, + {"2602:fce1:226::/48", "395886"}, + {"2804:19d8::/32", "61822"}, + {"2804:5164::/32", "268449"}, + {"2806:230:6027::/48", "11888"}, + {"2620:fa::/48", "293"}, + {"2a01:c9c0:801a::/48", "2285"}, + {"2a05:a880:de56::/48", "20765"}, + {"2a07:9540::/29", "206141"}, + {"2a0c:88c0::/46", "202344"}, + {"2a0e:b107:777::/48", "213105"}, + {"2401:a700::/32", "17726"}, + {"2408:8956:100::/40", "17816"}, + {"2606:ae00:a480::/42", "7287"}, + {"2804:8d4::/32", "262753"}, + {"2001:67c:13f4::/48", "1257"}, + {"2001:1490:101::/46", "8895"}, + {"2001:1b08::/32", "20900"}, + {"2406:d00:ddcc::/48", "132165"}, + {"2408:84f3:3090::/38", "17816"}, + {"2603:90d8::/30", "10838"}, + {"2620:171:f4::/47", "42"}, + {"2a00:c500::/32", "48661"}, + {"2a0d:9e00::/29", "204988"}, + {"2a10:13c0:ef1c::/48", "197816"}, + {"2001:6f0:4006::/29", "1257"}, + {"2800:190:4005::/32", "11664"}, + {"2800:370:46::/48", "28006"}, + {"2800:484:dd00::/38", "14080"}, + {"2804:1c4c:593::/35", "61648"}, + {"2a00:59c0:4::/32", "49232"}, + {"2001:ac0:30fd::/48", "12541"}, + {"2402:bc00::/29", "18144"}, + {"240a:a1ff::/32", "143161"}, + {"2800:ba0:16::/48", "263812"}, + {"2405:3140:3a::/48", "59068"}, + {"2804:49cc::/32", "52663"}, + {"2804:51b4:6a00::/35", "268471"}, + {"2806:2f0:23::/41", "17072"}, + {"2a03:2887:ff3f::/41", "63293"}, + {"2001:ac0:c880::/44", "12541"}, + {"2001:1900::/45", "3356"}, + {"2404:6c00::/32", "24324"}, + {"2406:5f40::/48", "135905"}, + {"2602:804:9000::/44", "11661"}, + {"2620:130:7004::/47", "27518"}, + {"2001:579:1c34::/40", "22773"}, + {"240a:aa8d::/32", "145351"}, + {"2600:803:270::/48", "12234"}, + {"2605:3380:4403::/45", "12025"}, + {"2800:bf0:800d::/46", "27947"}, + {"2803:c200::/47", "22411"}, + {"2804:3bcc:8000::/35", "266171"}, + {"2806:2f0:6163::/40", "17072"}, + {"2a00:86c0:1022::/41", "2906"}, + {"2a0f:607:130f::/48", "138181"}, + {"2402:9d80:3ff::/37", "131429"}, + {"2a01:7f8::/29", "15925"}, + {"2a04:e4c0:14::/44", "36692"}, + {"2001:56b:a00c::/33", "852"}, + {"2001:579:5104::/40", "22773"}, + {"2001:678:964::/48", "49697"}, + {"2405:9800:c91b::/45", "45430"}, + {"2600:1405:e001::/35", "20940"}, + {"2607:fce0::/32", "7151"}, + {"2a01:240:ab01::/48", "49030"}, + {"240e:438:2440::/38", "4134"}, + {"2001:678:7bc::/48", "197600"}, + {"2409:8958:ce54::/39", "56040"}, + {"2806:2f0:5263::/40", "17072"}, + {"2a01:5c40:7::/32", "12687"}, + {"2a02:5d80::/29", "48294"}, + {"2a11:1ec0::/29", "25145"}, + {"2001:8000::/20", "1221"}, + {"2803:f080::/33", "64120"}, + {"2001:388:7001::/32", "7575"}, + {"2001:7f8:5b::/48", "62047"}, + {"2001:978:6407::/48", "212711"}, + {"2404:0:1100::/36", "17709"}, + {"240e:678::/36", "140329"}, + {"2803:9840:a000::/33", "263765"}, + {"2a02:26f7:b945::/46", "20940"}, + {"2001:559:c01b::/48", "33659"}, + {"2408:8956:28c0::/38", "17816"}, + {"240a:a03a::/32", "142708"}, + {"2600:100d:9f10::/40", "22394"}, + {"2804:3b4c::/32", "266140"}, + {"2a00:8a01:10::/44", "18666"}, + {"2a01:6a00::/29", "13122"}, + {"2001:df5:3800::/48", "56285"}, + {"2408:8001:3180::/36", "17816"}, + {"2408:8456:40::/39", "17816"}, + {"2804:104c:e800::/40", "263629"}, + {"2804:6474::/33", "269429"}, + {"2a02:26f0:d201::/39", "20940"}, + {"2001:559:22::/48", "7922"}, + {"2408:8456:cb00::/42", "17622"}, + {"240a:ae56::/32", "146320"}, + {"2605:8680::/48", "25780"}, + {"2806:2f0:2023::/43", "22884"}, + {"2001:1b70:88ae::/48", "158"}, + {"2408:8256:99a::/38", "17622"}, + {"2408:8456:7400::/42", "17622"}, + {"2605:bec0::/32", "32313"}, + {"2a01:8d80::/48", "35157"}, + {"2001:559:814c::/48", "7922"}, + {"2402:2080::/32", "131144"}, + {"2406:2600:2::/44", "55569"}, + {"2408:8956:6400::/40", "17622"}, + {"2409:8c30:50::/39", "9808"}, + {"240e:981:1100::/33", "4134"}, + {"2801:15:b000::/48", "266700"}, + {"2a0a:1301::/29", "207028"}, + {"2001:913::/36", "60197"}, + {"2405:1c0:6a61::/46", "55303"}, + {"2600:370f:362a::/41", "32261"}, + {"2600:5c00:2542::/35", "20001"}, + {"2603:ff60::/24", "397165"}, + {"2804:54a0::/35", "27688"}, + {"2a01:2c0::/34", "8282"}, + {"2a04:4e40:4800::/48", "54113"}, + {"2804:59f0::/32", "268735"}, + {"2a02:f00::/48", "48137"}, + {"2001:df3:3200::/48", "135724"}, + {"2402:800:92b7::/41", "7552"}, + {"2402:ee40:50::/48", "134033"}, + {"240a:addb::/32", "146197"}, + {"2600:6c38:716::/47", "20115"}, + {"2605:a404:53c::/41", "33363"}, + {"2804:3220:1001::/48", "265058"}, + {"2804:52b8::/32", "268537"}, + {"2001:678:640::/48", "204302"}, + {"2408:84e2::/39", "17621"}, + {"2804:5ea4::/32", "269047"}, + {"2a02:2368:ffff::/48", "50270"}, + {"2a02:26f7:c105::/46", "20940"}, + {"2a02:26f7:f710::/48", "36183"}, + {"2001:559:c03a::/48", "13367"}, + {"2001:67c:2884::/48", "35003"}, + {"2401:d800:94f2::/39", "7552"}, + {"2406:2fc0::/32", "138997"}, + {"240a:a24b::/32", "143237"}, + {"240e:5a:4180::/38", "140292"}, + {"2600:1406:b401::/36", "20940"}, + {"2605:a404:70b::/42", "33363"}, + {"2607:f510::/32", "21719"}, + {"2a01:4d40:1::/48", "43994"}, + {"2804:14c:477::/44", "28573"}, + {"2a00:51c0::/32", "51758"}, + {"2a06:ffc0::/29", "203376"}, + {"2404:bf40:c100::/48", "7545"}, + {"2804:728::/33", "53201"}, + {"2a01:b740:a03::/48", "714"}, + {"2a0f:99c0::/32", "205240"}, + {"2604:5880::/48", "10980"}, + {"2620:126:4000::/44", "68"}, + {"2001:480:422::/39", "668"}, + {"240a:a9fc::/32", "145206"}, + {"240a:adda::/32", "146196"}, + {"2804:2974::/32", "264016"}, + {"2001:4078::/29", "16086"}, + {"2600:1407:b000::/48", "35994"}, + {"2a02:ee80:4224::/46", "3573"}, + {"2001:4350:2000::/48", "31245"}, + {"2804:4ec:1100::/38", "28668"}, + {"2a02:e5e::/32", "25057"}, + {"2a0b:86c0::/30", "202120"}, + {"2401:b180:4100::/48", "45102"}, + {"240a:a5ca::/32", "144132"}, + {"2600:6c38:b3f::/41", "20115"}, + {"2605:cc40::/32", "46713"}, + {"2402:800:73f0::/37", "7552"}, + {"2600:380:3200::/33", "20057"}, + {"2804:7018::/32", "270705"}, + {"2a02:d40:8::/32", "44592"}, + {"2a04:1a40::/48", "50362"}, + {"2a06:63c0::/29", "41937"}, + {"2a06:e881:7000::/44", "208226"}, + {"2402:4000:b1c1::/38", "18001"}, + {"240a:a9e8::/32", "145186"}, + {"2806:370:8300::/42", "28403"}, + {"2a02:239c::/48", "9166"}, + {"2a02:26f7:e0cc::/48", "36183"}, + {"2a09:a4c7:e000::/35", "208861"}, + {"2a10:4646:c0::/44", "210816"}, + {"2001:1700::/27", "6730"}, + {"2605:a401:80ba::/47", "33363"}, + {"2804:7220::/32", "270834"}, + {"2a00:1640::/32", "12389"}, + {"2a02:2b30::/32", "21390"}, + {"2402:9d80:266::/47", "131429"}, + {"2a0f:5707:ab21::/48", "49367"}, + {"2402:8100:2012::/41", "45271"}, + {"2001:df1:7f00::/48", "136726"}, + {"2404:bf40:e702::/48", "7545"}, + {"240a:a8d1::/32", "144907"}, + {"2800:160:2046::/47", "14259"}, + {"2803:7210::/32", "271915"}, + {"2a0b:440::/36", "39921"}, + {"2001:16d8:ef00::/35", "16150"}, + {"240a:aee0::/32", "146458"}, + {"2a04:5540::/29", "42557"}, + {"2001:559:c05c::/48", "7015"}, + {"2001:da8:800e::/43", "24364"}, + {"2401:d800:24f0::/39", "7552"}, + {"2620:5f:4000::/48", "17378"}, + {"2804:732c::/32", "270900"}, + {"2a00:f10:300::/32", "48635"}, + {"2001:559:5aa::/48", "33490"}, + {"2a0a:7600::/29", "207096"}, + {"2a0d:9dc0::/29", "40970"}, + {"2a11:6200::/29", "204790"}, + {"2001:868::/29", "12731"}, + {"2001:4478:2300::/33", "4802"}, + {"2400:5b60::/32", "131916"}, + {"2600:1400:8001::/35", "20940"}, + {"2c0f:5400::/48", "205897"}, + {"2001:559:8529::/48", "33651"}, + {"2001:559:86f7::/48", "7016"}, + {"2605:a404:b2::/44", "33363"}, + {"2a06:ef00::/29", "213222"}, + {"2a0f:17c0::/29", "60262"}, + {"240e:108:11d5::/48", "134769"}, + {"2001:18c8:600::/40", "8015"}, + {"2401:4900:52f0::/39", "45609"}, + {"2406:d7c0::/32", "38839"}, + {"240e:3b4:f700::/36", "4134"}, + {"2800:160:1d0e::/43", "14259"}, + {"2806:265:4300::/37", "28481"}, + {"2001:559:82d5::/48", "33650"}, + {"2001:7f8:3a::/48", "41692"}, + {"2001:4288::/39", "6713"}, + {"2606:2800:4aa8::/46", "15133"}, + {"2804:e04::/32", "52535"}, + {"2804:82a8::/32", "272532"}, + {"240e:67a:800::/37", "140329"}, + {"2600:1f70:c000::/40", "16509"}, + {"2a01:c50f:c380::/41", "12479"}, + {"2a0e:b107:381::/48", "211358"}, + {"2a11:6e01::/32", "57695"}, + {"2001:559:19a::/48", "33652"}, + {"2604:e780::/32", "15154"}, + {"2a0e:2c40::/43", "50581"}, + {"2001:57a::/39", "22773"}, + {"2400:1000::/32", "10021"}, + {"2401:2900:8000::/45", "23679"}, + {"2600:6c38:c0b::/45", "20115"}, + {"2604:a680:5::/48", "55079"}, + {"2804:6d9c::/32", "270544"}, + {"2a01:7d60::/32", "50181"}, + {"2a02:26f7:ecc8::/48", "36183"}, + {"2a02:7320::/32", "31222"}, + {"2001:559:c353::/48", "7016"}, + {"2402:800:f630::/41", "7552"}, + {"2607:fe28:5027::/43", "53347"}, + {"2a02:26f7:ecc1::/46", "20940"}, + {"2804:1b04:10::/46", "53048"}, + {"2804:5348::/32", "268574"}, + {"2a01:488:bb19::/48", "20773"}, + {"240e:37c:1a00::/34", "140330"}, + {"2001:250:343a::/47", "138438"}, + {"2001:550:2901::/38", "174"}, + {"2001:b28:4::/48", "31500"}, + {"2401:d800:d870::/40", "7552"}, + {"2403:8680::/47", "134630"}, + {"2600:1402:c801::/35", "20940"}, + {"2a02:2698:28::/46", "12768"}, + {"2a0e:8780::/29", "37289"}, + {"2409:807e:900::/35", "9808"}, + {"2409:8c28:802::/39", "56041"}, + {"2001:4878:b225::/48", "12222"}, + {"2400:cb00:331::/48", "13335"}, + {"2402:3a80:1c00::/42", "38266"}, + {"2408:80ea:6480::/42", "17622"}, + {"2604:ca00:1c8::/43", "36492"}, + {"2a07:8500::/32", "1104"}, + {"2c0f:f138::/32", "37577"}, + {"2c0f:fb08::/32", "16637"}, + {"2409:8908::/30", "9808"}, + {"2606:a600:4003::/36", "23005"}, + {"2804:78b4::/32", "271260"}, + {"2a0d:7a40:5::/48", "60254"}, + {"2a0f:1e00:def9::/48", "30633"}, + {"2401:d800:fe80::/42", "7552"}, + {"2408:8a22:9a00::/34", "139007"}, + {"2409:8904:8d90::/38", "24547"}, + {"2600:1900:4140::/40", "396982"}, + {"2600:9000:2386::/48", "16509"}, + {"2803:87a0::/32", "13489"}, + {"2a05:43c0::/30", "210139"}, + {"2001:4878:41e0::/44", "35994"}, + {"2401:a840::/38", "136917"}, + {"240e:37c::/35", "140329"}, + {"240e:698:2300::/40", "58519"}, + {"2606:9600::/32", "17018"}, + {"2a0a:2e80::/32", "210695"}, + {"2a11:5100::/29", "50304"}, + {"2404:8ec0::/32", "135780"}, + {"2600:6c38:42::/43", "20115"}, + {"2605:a404:7fb::/36", "33363"}, + {"2605:dcc0::/35", "398570"}, + {"2801:80:12e0::/48", "28650"}, + {"2804:1e20:19::/48", "264409"}, + {"2a03:3060::/29", "48635"}, + {"2001:df2:b600::/48", "132645"}, + {"2001:df6:2d80::/48", "141778"}, + {"2405:84c0:faaa::/48", "138990"}, + {"2406:7400::/46", "24309"}, + {"2600:9000:1160::/44", "16509"}, + {"2607:f740:e07b::/45", "398748"}, + {"2620:10f:a000::/47", "54496"}, + {"2a02:8880::/25", "5089"}, + {"2607:b580::/44", "19754"}, + {"2607:f740:45::/48", "63911"}, + {"2a02:7500::/32", "9155"}, + {"2a0e:97c0:366::/48", "211484"}, + {"2001:1248:56ff::/39", "11172"}, + {"2404:bf40:a341::/37", "139084"}, + {"2404:bf40:c3c4::/37", "139084"}, + {"240a:a3f3::/32", "143661"}, + {"240a:a891::/32", "144843"}, + {"2803:f340:1060::/40", "14754"}, + {"2804:4918::/32", "267164"}, + {"2a0d:b280::/29", "41720"}, + {"2408:8256:1466::/39", "17622"}, + {"2604:3400:dc3::/48", "209453"}, + {"2804:7c7c:200::/36", "271499"}, + {"2a01:c9c0:af::/48", "8891"}, + {"2a04:7180::/32", "28717"}, + {"2404:bf40:a441::/48", "7545"}, + {"2409:8053:2100::/37", "9808"}, + {"2409:8904:5fb0::/34", "24547"}, + {"240e:104:5000::/34", "4134"}, + {"2610:130:100::/40", "2698"}, + {"2620:171:1d::/48", "715"}, + {"2803:f00:64b::/48", "262182"}, + {"2804:104c:e000::/40", "263629"}, + {"2001:df0:2b40::/48", "149179"}, + {"2604:d600:15f4::/44", "32098"}, + {"2001:fd0:301::/37", "10029"}, + {"2001:12e0:200::/40", "10429"}, + {"2404:f4c0:f9c0::/48", "142281"}, + {"2405:8a00:2111::/40", "55824"}, + {"240a:a25c::/32", "143254"}, + {"2605:a401:8241::/40", "33363"}, + {"2803:9c60:a000::/33", "46198"}, + {"2804:39b0::/32", "266044"}, + {"2804:40cc::/32", "265982"}, + {"2001:250:340b::/45", "138393"}, + {"2001:678:5a8::/48", "8387"}, + {"240e:678:1a00::/34", "140330"}, + {"2a00:c2e0::/39", "30919"}, + {"2a06:e3c0::/29", "62159"}, + {"2a11:5702:b00b::/48", "212149"}, + {"2402:e000:2::/47", "24499"}, + {"240e:db:b801::/33", "4134"}, + {"2a12:fe00::/29", "206170"}, + {"2001:df1:9580::/48", "138433"}, + {"2405:400::/32", "24439"}, + {"2405:6e00:f830::/48", "133612"}, + {"2b10:3c84::/30", "53820"}, + {"240e:90d:f800::/30", "4134"}, + {"2803:f60::/32", "269832"}, + {"2804:6198::/32", "269244"}, + {"2001:4f8:12::/32", "1280"}, + {"2407:d340:f020::/44", "142586"}, + {"2409:8020:1011::/42", "56046"}, + {"2408:865c::/31", "4837"}, + {"2804:505c::/32", "268384"}, + {"2a04:c480::/29", "34241"}, + {"2400:fc00:8d20::/41", "45773"}, + {"2405:ba00:8efe::/48", "23885"}, + {"2a11:6f40::/29", "1239"}, + {"2001:df0:43::/48", "38629"}, + {"240a:a7c1::/32", "144635"}, + {"240a:ac5a::/32", "145812"}, + {"2804:352c::/32", "262662"}, + {"2a00:a7e0::/48", "200741"}, + {"2a04:4e40:1a00::/48", "54113"}, + {"2600:140f:c01::/39", "20940"}, + {"2604:cac0:118::/48", "11019"}, + {"2803:4120:50::/48", "64108"}, + {"2804:14c:4c8::/42", "28573"}, + {"2a0e:cd00::/37", "23031"}, + {"2001:470:f9::/39", "6939"}, + {"2001:559:30e::/48", "33650"}, + {"2001:559:8365::/48", "33660"}, + {"240e:b2:f000::/29", "4134"}, + {"2605:a880:8000::/48", "46261"}, + {"2a02:e300::/48", "60280"}, + {"2a0f:3980::/29", "202543"}, + {"2a10:4e80::/29", "203012"}, + {"2001:559:7c1::/48", "7016"}, + {"2001:559:c025::/46", "7922"}, + {"2001:da8:7013::/48", "138371"}, + {"2405:1c0:6271::/46", "55303"}, + {"2602::/24", "209"}, + {"2605:1980:401::/48", "13767"}, + {"2606:1980::/46", "54994"}, + {"2804:3e4c::/32", "266586"}, + {"2804:7784::/32", "271183"}, + {"2806:2f0:4401::/46", "17072"}, + {"2a0e:6b40::/48", "207580"}, + {"2403:5f40:ca05::/48", "16509"}, + {"2600:1405:5001::/37", "20940"}, + {"2600:9000:2334::/44", "16509"}, + {"2804:3d74:102::/48", "266532"}, + {"2a02:582:4c00::/35", "6799"}, + {"2a02:890::/32", "5631"}, + {"2a02:2430:80::/32", "39869"}, + {"2001:df5:b700::/48", "131418"}, + {"2804:6480::/32", "269431"}, + {"2a02:26f7:bf90::/48", "36183"}, + {"2001:559:5bd::/48", "22909"}, + {"2001:559:8635::/48", "33651"}, + {"2001:579:a11d::/41", "22773"}, + {"2001:fe8:8110::/47", "24435"}, + {"2001:1a68::/47", "15694"}, + {"2408:8459:6030::/41", "17622"}, + {"2409:807e:2c00::/35", "9808"}, + {"2804:629c::/32", "269307"}, + {"2001:559:74::/48", "33659"}, + {"2600:6c20:6d::/43", "20115"}, + {"2a0d:3c45::/32", "51659"}, + {"2001:559:8464::/48", "7015"}, + {"2001:678:d24::/48", "15830"}, + {"2001:16b8:1900::/37", "8881"}, + {"2406:38c0::/32", "140449"}, + {"240e:3b4:ec00::/35", "140314"}, + {"2a02:26f7:de45::/46", "20940"}, + {"2001:559:c215::/48", "7922"}, + {"2620:13f:700f::/48", "59116"}, + {"2804:28e4:e02a::/36", "28260"}, + {"2a0c:af00:f5a1::/48", "205321"}, + {"240a:ac32::/32", "145772"}, + {"2600:9000:238e::/48", "16509"}, + {"2a09:140::/29", "26636"}, + {"2001:44b8:204a::/45", "7545"}, + {"2405:206::/31", "55836"}, + {"2409:8710:2400::/30", "9808"}, + {"2600:1006:a020::/40", "22394"}, + {"2607:cf00::/30", "32522"}, + {"2001:67c:2248::/48", "31382"}, + {"2600:100a:b030::/44", "22394"}, + {"2607:4e00::/32", "10674"}, + {"2001:559:1e9::/48", "33662"}, + {"2001:559:588::/48", "33657"}, + {"2001:df1:3b00::/48", "134750"}, + {"2603:f340::/29", "397165"}, + {"2607:4b00::/32", "4307"}, + {"2803:4840::/32", "263757"}, + {"2804:221c::/32", "264592"}, + {"2402:800:3d7f::/40", "7552"}, + {"2404:e000::/32", "17673"}, + {"240a:a5d4::/32", "144142"}, + {"2600:1901:c0d0::/39", "15169"}, + {"2606:cb00:17::/48", "6643"}, + {"2804:8228::/32", "272502"}, + {"2408:8456:bc10::/42", "134543"}, + {"2620:149:a1a::/48", "6185"}, + {"2800:160:1ff5::/46", "14259"}, + {"2804:ad0::/32", "262773"}, + {"2804:b0c:f005::/36", "52935"}, + {"2804:2fe8::/32", "264920"}, + {"2806:264:4501::/48", "13999"}, + {"2a02:26f7:e6cc::/48", "36183"}, + {"2a0e:1d00::/32", "21263"}, + {"2001:250:806::/47", "23910"}, + {"2001:1248:9707::/44", "11172"}, + {"2800:485:fe00::/48", "14080"}, + {"2804:3b6c:c010::/45", "266148"}, + {"2001:67c:21d0::/48", "35096"}, + {"240a:ac5f::/32", "145817"}, + {"2607:fcd0:105:6c00::/46", "8100"}, + {"2001:18b8:116::/44", "29789"}, + {"2408:84f3:f890::/37", "17816"}, + {"2409:8e0c::/30", "56042"}, + {"2600:1407:9001::/37", "20940"}, + {"2600:1415:2401::/36", "20940"}, + {"2600:6c38:ac::/43", "20115"}, + {"2620:74:78::/48", "30060"}, + {"2a00:b920::/32", "60422"}, + {"2001:559:28a::/48", "7922"}, + {"2001:67c:83c::/48", "24840"}, + {"2a0b:8f80:200::/48", "200746"}, + {"2c0f:f738:3801::/46", "61317"}, + {"2001:559:3a9::/48", "7922"}, + {"2001:c20:c856::/48", "9255"}, + {"2402:800:f660::/40", "7552"}, + {"2405:8a00:c013::/42", "55824"}, + {"240a:aa45::/32", "145279"}, + {"2602:fbde:253::/48", "26057"}, + {"2620:118:c080::/42", "237"}, + {"2400:9380:8020::/47", "4134"}, + {"2401:ea00::/44", "55501"}, + {"2604:1740::/32", "37353"}, + {"2a03:6947:e00::/39", "61266"}, + {"2001:250:781d::/48", "23910"}, + {"2001:559:45e::/48", "7922"}, + {"2400:adc0:100::/48", "9541"}, + {"2600:140a:e001::/31", "20940"}, + {"2604:b900:6000::/36", "40900"}, + {"2803:6810::/32", "271829"}, + {"2a00:7320::/29", "49191"}, + {"2a02:26f7:ef44::/48", "36183"}, + {"2001:559:8599::/48", "7725"}, + {"2001:67c:1328::/48", "199268"}, + {"2409:8914:c00::/38", "56044"}, + {"2602:fc5d:573::/48", "399866"}, + {"2607:fad8:1101::/32", "22652"}, + {"2607:fe28:2030::/40", "53347"}, + {"2610:1c8:1c::/32", "23393"}, + {"2804:524c::/32", "268509"}, + {"2001:1248:98d0::/45", "11172"}, + {"2402:e580:10::/32", "40138"}, + {"2600:141a:8001::/31", "20940"}, + {"2804:1bc:115::/32", "10310"}, + {"2804:1a90::/32", "61868"}, + {"2804:259c:ab00::/35", "52772"}, + {"2a04:9a00:1114::/48", "198730"}, + {"2a0b:fac0::/29", "51920"}, + {"2001:250:240e::/48", "23910"}, + {"2001:dc8:3000::/48", "23962"}, + {"2407:62c0::/32", "38854"}, + {"2804:47ac::/32", "267070"}, + {"2001:559:80f7::/48", "33651"}, + {"2402:2400::/33", "9226"}, + {"2804:354::/44", "262874"}, + {"2a00:1728:2d::/48", "43548"}, + {"2a01:6ea0::/32", "199880"}, + {"2a02:26f7:c401::/46", "20940"}, + {"2a0e:eec5::/32", "62240"}, + {"2a0f:afc0::/29", "50782"}, + {"2001:678:264::/48", "16509"}, + {"2406:3003:1030::/41", "55430"}, + {"240a:a690::/32", "144330"}, + {"240e:3ba:c800::/37", "4134"}, + {"2c0f:ec98::/32", "328278"}, + {"2001:4de0:1006::/48", "50525"}, + {"2607:f870:2::/32", "11992"}, + {"2a07:bbc0::/48", "207085"}, + {"2c0f:f7b8::/32", "327824"}, + {"2404:ae00:ff27::/48", "45474"}, + {"2603:f430::/25", "397165"}, + {"2804:6e10::/32", "270573"}, + {"2a10:fb80::/29", "211969"}, + {"2401:d800:930::/41", "7552"}, + {"2409:8904:9290::/39", "24547"}, + {"240a:a4e4::/32", "143902"}, + {"240a:ad52::/32", "146060"}, + {"2804:63dc::/32", "269388"}, + {"2408:8456:7e40::/39", "17816"}, + {"2a00:fbe0::/32", "62113"}, + {"2a02:26f0:4e01::/35", "20940"}, + {"2001:610:120::/48", "1104"}, + {"2001:67c:153c::/48", "3301"}, + {"2409:8087:3001::/44", "9808"}, + {"2409:8d14:2100::/38", "56044"}, + {"2a02:26f7:c149::/46", "20940"}, + {"2001:678:ca0::/48", "58299"}, + {"2403:300:a0d::/48", "714"}, + {"2408:8957:3e00::/40", "17622"}, + {"240a:ade7::/32", "146209"}, + {"2800:5b0::/32", "27975"}, + {"2a04:9bc0::/29", "62186"}, + {"2a06:6541:3081::/48", "3549"}, + {"2a11:9080::/29", "204790"}, + {"2400:adcc:1000::/39", "9541"}, + {"2408:840d:d000::/42", "17621"}, + {"2607:4a80::/32", "3778"}, + {"2804:14c:bb91::/42", "28573"}, + {"240a:a6c5::/32", "144383"}, + {"2800:160:23e9::/37", "14259"}, + {"2a00:c020:1000::/34", "200414"}, + {"2001:44c8:4000::/41", "131445"}, + {"2800:160:1e82::/43", "14259"}, + {"2a00:96c0::/32", "198538"}, + {"2402:3a80:172b::/45", "38266"}, + {"2402:4000:b193::/42", "18001"}, + {"2804:eec:2000::/33", "28226"}, + {"2a00:9220::/32", "49867"}, + {"2001:df4:4980::/48", "140463"}, + {"2408:8256:3b60::/44", "17623"}, + {"2606:a400::/32", "11922"}, + {"2a00:1288:7c::/48", "43428"}, + {"2001:559:8278::/48", "33651"}, + {"2001:1b60::/29", "31103"}, + {"2409:8c70:3ad9::/32", "9808"}, + {"240a:a658::/32", "144274"}, + {"2606:2800:4006::/44", "15133"}, + {"2804:32a8::/32", "265091"}, + {"2001:1998:700::/36", "7843"}, + {"2400:aa00:4300::/32", "9873"}, + {"2401:4900:3da0::/44", "45609"}, + {"2401:5840:400::/32", "132113"}, + {"2408:8956:1000::/40", "17622"}, + {"2409:8020:3028::/43", "56046"}, + {"2409:8061:900::/35", "9808"}, + {"240e:85:8800::/30", "4134"}, + {"2a0d:f540::/29", "56786"}, + {"2400:a980:28ff::/48", "133111"}, + {"2409:4054:3000::/31", "55836"}, + {"240a:a561::/32", "144027"}, + {"2804:7c00::/32", "271469"}, + {"2a02:4020::/48", "60094"}, + {"2a03:6b00:b::/32", "48832"}, + {"240a:a723::/32", "144477"}, + {"2804:14c:9900::/40", "28573"}, + {"2a05:1280::/29", "200647"}, + {"2a0d:5380::/29", "204818"}, + {"2001:250:3423::/45", "138393"}, + {"2001:370::/44", "9607"}, + {"2001:579:6220::/43", "22773"}, + {"2001:4898::/32", "3598"}, + {"2409:8002:2c00::/31", "9808"}, + {"2604:2800:fff2::/44", "26793"}, + {"2a03:f080:1001::/37", "42685"}, + {"2a11:ee00::/29", "204790"}, + {"2c0f:f7a8:9220::/48", "4809"}, + {"2409:805c:3061::/43", "9808"}, + {"240a:a2b0::/32", "143338"}, + {"2602:fc23:120::/44", "60438"}, + {"2803:ecc0:3d00::/32", "264814"}, + {"2804:6854::/32", "269685"}, + {"2001:678:494::/48", "42135"}, + {"2406:9dc0:1010::/48", "141747"}, + {"2409:803c:900::/37", "9808"}, + {"2804:57c:c00::/32", "262517"}, + {"2804:532c:8900::/33", "268568"}, + {"2a02:888:8048::/47", "48695"}, + {"2a02:f68::/29", "15542"}, + {"2001:559:84cd::/48", "33650"}, + {"2001:b030:ae00::/31", "3462"}, + {"2602:803:5000::/48", "30330"}, + {"2a02:26f0:6101::/40", "20940"}, + {"2a07:9e40::/29", "1902"}, + {"2001:da8:3000::/45", "24358"}, + {"2402:800:399b::/41", "7552"}, + {"2806:2f0:9563::/40", "17072"}, + {"2001:559:54e::/48", "7922"}, + {"2001:559:5d1::/48", "33287"}, + {"2401:4900:52b0::/44", "45609"}, + {"240e:44d:6780::/41", "4134"}, + {"2803:fe10::/32", "271982"}, + {"2a10:b340::/29", "211629"}, + {"2804:71b0:ff00::/40", "270805"}, + {"2409:8730:8000::/33", "9808"}, + {"2804:6570::/33", "269490"}, + {"2a00:1760::/30", "42772"}, + {"2a02:6680:11f0::/44", "16116"}, + {"2a02:26f7:d44c::/48", "36183"}, + {"2a09:bac0:19::/48", "13335"}, + {"2a0f:9400:8004::/48", "208393"}, + {"2409:8914:b800::/39", "56044"}, + {"2a02:4e0:2100::/41", "16135"}, + {"2a02:a00:e::/47", "15987"}, + {"2a06:5680::/29", "210947"}, + {"2a09:bac0:184::/47", "13335"}, + {"2a0e:2580::/29", "197915"}, + {"2a0e:b107:1520::/48", "38173"}, + {"2001:559:786::/48", "33491"}, + {"2001:67c:2e38::/48", "31424"}, + {"2402:800:519b::/41", "7552"}, + {"2600:1406:46::/48", "20940"}, + {"2620:103:e049::/48", "16711"}, + {"2a00:cb20:1200::/34", "60266"}, + {"2a02:26f7:ce41::/46", "20940"}, + {"2a0a:7540:4::/29", "206066"}, + {"2001:468:1500::/40", "81"}, + {"2804:0:6c01::/32", "2716"}, + {"2a00:dd0:aaab::/35", "47869"}, + {"2a02:26f7:bbc6::/47", "20940"}, + {"2a03:f80:354::/48", "50613"}, + {"2001:250:2c06::/44", "138381"}, + {"2001:559:87b5::/48", "33650"}, + {"2400:9380:9205::/46", "4809"}, + {"2402:800:b620::/41", "7552"}, + {"2600:1419:1001::/38", "20940"}, + {"2001:678:984::/48", "207910"}, + {"240e:97c:5000::/32", "4134"}, + {"2610:20:8420::/47", "3477"}, + {"2610:a1:3040::/48", "12008"}, + {"2804:5108::/32", "268426"}, + {"2001:67c:12bc::/48", "199249"}, + {"2001:848::/32", "2595"}, + {"2001:4c28:1::/48", "39832"}, + {"2804:4870:1b1::/46", "267121"}, + {"2001:67c:13b8::/48", "196957"}, + {"2001:1248:845d::/42", "11172"}, + {"2804:470::/32", "53108"}, + {"2c0f:f700::/32", "327726"}, + {"2408:84eb::/29", "4837"}, + {"2610:20:8000::/43", "6629"}, + {"2a00:1630::/33", "49544"}, + {"2a07:2800::/29", "21473"}, + {"2400:c700:188::/38", "55644"}, + {"2401:d800:2770::/40", "7552"}, + {"2408:8456:cb40::/40", "17816"}, + {"240a:a3ec::/32", "143654"}, + {"2602:fdaa::/48", "27385"}, + {"2803:420::/32", "28120"}, + {"2a10:4ec0::/29", "57353"}, + {"2404:3d00:40c0::/46", "3573"}, + {"2a01:4020:3::/45", "25369"}, + {"2a02:26f7:b881::/46", "20940"}, + {"2a0d:2586::/47", "213115"}, + {"2001:1248:9cfe::/47", "11172"}, + {"240a:a659::/32", "144275"}, + {"2800:2a0:ffff::/48", "27947"}, + {"2803:6700::/47", "263210"}, + {"2804:3a28:4000::/34", "266074"}, + {"2804:8588::/32", "268186"}, + {"2a03:f003:400::/34", "25472"}, + {"2408:8456:800::/42", "17622"}, + {"240e:44d:7b80::/41", "4134"}, + {"2606:7980::/32", "54182"}, + {"2804:5978::/32", "268704"}, + {"2a09:eac0::/32", "205718"}, + {"2001:550:2100:300::/44", "174"}, + {"2001:6d0:6d08::/48", "205022"}, + {"2800:680:11::/48", "263719"}, + {"2803:4d60::/32", "269768"}, + {"2804:24e0::/32", "264246"}, + {"2804:67ac::/45", "269643"}, + {"2001:559:725::/48", "7015"}, + {"2403:5700::/47", "2497"}, + {"240a:afd9::/32", "146707"}, + {"2600:6c20:29::/43", "20115"}, + {"2804:5dc::/41", "53019"}, + {"2a00:cb00::/32", "25144"}, + {"2c0f:e8b0::/32", "327712"}, + {"2c0f:f7e8::/47", "62217"}, + {"2001:678:94::/48", "42"}, + {"240a:a92c::/32", "144998"}, + {"2804:7a94:2100::/32", "271380"}, + {"2804:7fb4:7f00::/32", "271704"}, + {"2001:df3:5b80::/48", "140389"}, + {"2602:ff64::/36", "3900"}, + {"2a02:26f7:bf04::/48", "36183"}, + {"2404:bf40:a5c2::/38", "139084"}, + {"240e:109:8021::/48", "4811"}, + {"2610:f0:21f::/39", "22925"}, + {"2a02:6c8:8000::/33", "202425"}, + {"2a03:53e0::/32", "49223"}, + {"240a:a1b3::/32", "143085"}, + {"2600:100b:9110::/34", "6167"}, + {"2607:fca8:b100::/33", "17139"}, + {"2a09:6bc0::/29", "51920"}, + {"2001:44b8:4066::/48", "7545"}, + {"2402:9e80:9::/48", "135103"}, + {"240e:965:8c00::/35", "4134"}, + {"2a01:7820::/32", "9063"}, + {"2a0c:ac80::/29", "201863"}, + {"2a0d:4d00:82::/47", "44794"}, + {"2001:559:8560::/48", "7922"}, + {"2804:2a74::/32", "52948"}, + {"2a0e:8f02:2140::/48", "211414"}, + {"2602:ff79::/32", "30257"}, + {"2602:ffd9:400::/40", "62874"}, + {"2804:390::/36", "52956"}, + {"2806:1080::/39", "8151"}, + {"2c0f:ed08::/32", "327764"}, + {"2001:559:c1eb::/48", "33650"}, + {"2001:4bb0::/32", "41497"}, + {"2400:8240::/32", "38719"}, + {"2408:882c::/32", "4837"}, + {"2409:8d15:1a00::/34", "56044"}, + {"2804:14d:a600::/40", "28573"}, + {"2a01:5a8:8::/48", "211526"}, + {"2a02:26f7:cf48::/48", "36183"}, + {"2001:559:7c5::/46", "7922"}, + {"2408:8957:7400::/40", "17622"}, + {"2409:8715:9800::/30", "56044"}, + {"2804:19c8:1007::/44", "61818"}, + {"2804:82e8::/32", "272164"}, + {"2a00:10e8::/46", "44574"}, + {"2a02:a68::/32", "39574"}, + {"2a02:26f7:e9cd::/42", "20940"}, + {"2a07:e740::/32", "43299"}, + {"2405:4803:d4c4::/36", "18403"}, + {"2408:8459:e050::/38", "17816"}, + {"2804:3ed0:1240::/32", "266622"}, + {"2804:7a48::/32", "271362"}, + {"2a06:4800::/32", "209283"}, + {"2001:559:40a::/48", "21508"}, + {"2001:559:56a::/47", "7015"}, + {"2001:df1:4600::/48", "4826"}, + {"2a04:4b00::/29", "12843"}, + {"2001:4830:2070::/48", "25623"}, + {"2602:fe76::/36", "399032"}, + {"2606:6c00:201::/48", "32787"}, + {"2001:7c0:2310::/44", "34878"}, + {"2408:8256:398e::/43", "17623"}, + {"2607:4000:400::/40", "73"}, + {"2a02:26f7:79::/48", "20940"}, + {"2001:b70::/32", "25061"}, + {"240a:af64::/32", "146590"}, + {"2804:234::/32", "262731"}, + {"2a00:1b30::/32", "25478"}, + {"2404:2440:d0d0::/48", "138521"}, + {"2409:8030:3100::/36", "9808"}, + {"240e:3bf:2800::/38", "4134"}, + {"2c0f:ed18::/32", "328200"}, + {"2c0f:f5c0:481::/46", "29465"}, + {"2001:fb0:109e::/48", "55476"}, + {"2404:bf40:8602::/41", "139084"}, + {"2405:9800:c642::/40", "45430"}, + {"240a:a002::/32", "142652"}, + {"240a:a449::/32", "143747"}, + {"2804:e0c:40::/48", "28176"}, + {"2001:559:55c::/48", "20214"}, + {"2001:559:828c::/47", "33660"}, + {"2001:7f8:94::/48", "51225"}, + {"2606:8e80:5001::/37", "32133"}, + {"2804:e0c:300::/48", "28176"}, + {"2a09:b280:ffbb::/45", "210025"}, + {"2a11:5e80::/29", "204790"}, + {"2400:cb00:190::/44", "13335"}, + {"2404:9dc0:cd01::/48", "138699"}, + {"2409:8020:3072::/47", "56046"}, + {"240a:ac79::/32", "145843"}, + {"2001:559:8223::/48", "33287"}, + {"2404:8d02:1053::/34", "9587"}, + {"2409:8d7d::/30", "9808"}, + {"240a:a85a::/32", "144788"}, + {"2600:1009:f110::/30", "22394"}, + {"2602:804:1006::/44", "14536"}, + {"2a09:d2c1:9::/48", "207530"}, + {"2001:67c:6c0::/48", "34984"}, + {"2001:df7:1180::/48", "138277"}, + {"240a:af2e::/32", "146536"}, + {"2610:100::/32", "8047"}, + {"2804:286c::/32", "262799"}, + {"2804:4760::/32", "267050"}, + {"2804:4a8c::/39", "267248"}, + {"2a02:26f7:f0c0::/48", "36183"}, + {"2001:480:501::/48", "37"}, + {"2001:559:84ec::/48", "33287"}, + {"2001:1248:442c::/43", "11172"}, + {"2404:e801:100f::/43", "55430"}, + {"2803:7d80:5011::/42", "11664"}, + {"2a0e:8f02:f034::/48", "211153"}, + {"240a:af50::/32", "146570"}, + {"240a:aff1::/32", "146731"}, + {"2a02:e80::/32", "39823"}, + {"2001:559:26b::/48", "7015"}, + {"2408:8347:1200::/28", "4837"}, + {"2a02:26f7:be51::/42", "20940"}, + {"2001:550:9001::/45", "174"}, + {"2001:559:82ee::/48", "7015"}, + {"2408:8956:f840::/40", "17622"}, + {"240e:108:1191::/45", "63835"}, + {"240e:97e:8000::/33", "4134"}, + {"2600:6c20:888::/43", "20115"}, + {"2a02:26f7:d195::/42", "20940"}, + {"2a09:4fc0::/48", "209562"}, + {"2001:19d0:306::/37", "2044"}, + {"2400:a980:1900::/37", "133111"}, + {"2602:ffce:31::/36", "63019"}, + {"2606:3380:ffff::/48", "53334"}, + {"2a00:db0::/32", "9092"}, + {"2a09:be40:1140::/45", "208755"}, + {"2001:520:5031::/48", "8103"}, + {"2402:800:3bc5::/43", "7552"}, + {"2408:8957:1dc0::/38", "17622"}, + {"2600:350f:3000::/32", "396998"}, + {"2a00:1778::/32", "42252"}, + {"2a04:16c0:200::/48", "24971"}, + {"2001:67c:278::/48", "51278"}, + {"2402:800:b860::/40", "7552"}, + {"2a0e:b107:5c0::/48", "213366"}, + {"2001:559:c504::/48", "7922"}, + {"2408:8459:4830::/41", "17622"}, + {"2409:8c85:aa05::/44", "9808"}, + {"2600:370f:3661::/45", "32261"}, + {"2605:3380:4156::/42", "12025"}, + {"2620:171:4::/48", "42"}, + {"2806:2a0:1000::/40", "28548"}, + {"2600:100e:b070::/36", "6167"}, + {"2600:6c10:142::/45", "20115"}, + {"2604:d7c0::/32", "11114"}, + {"2804:621c::/32", "269276"}, + {"2a0c:2040::/29", "47447"}, + {"2a10:a40::/32", "207271"}, + {"2001:67c:5bc::/48", "197915"}, + {"2400:fc00:70::/36", "45773"}, + {"2804:25b0::/32", "264295"}, + {"2804:43a0::/34", "267580"}, + {"2a01:b980::/32", "57228"}, + {"2a02:26f7:f444::/48", "36183"}, + {"2001:1520::/46", "8972"}, + {"2600:9000:a600::/43", "16509"}, + {"2804:1eb0::/32", "264444"}, + {"2804:29b0::/36", "61577"}, + {"2a02:26f7:e708::/48", "36183"}, + {"2001:4d0:2419::/48", "297"}, + {"2804:2974:b000::/33", "264016"}, + {"2804:43cc::/32", "267590"}, + {"2001:559:c112::/48", "33657"}, + {"2001:da8:e818::/46", "138373"}, + {"2600:9000:a210::/47", "16509"}, + {"2800:160:1c76::/40", "14259"}, + {"2800:bf0:8169::/40", "27947"}, + {"2a03:3b00:1::/46", "202053"}, + {"2a0e:b107:d91::/48", "213244"}, + {"2001:df3:8b80::/48", "139726"}, + {"2408:84f3:a040::/38", "17816"}, + {"2409:802f:2904::/48", "56041"}, + {"2604:3a00::/32", "33069"}, + {"2a01:4a0:c::/46", "201011"}, + {"2a03:7380:5c00::/42", "13188"}, + {"2a0c:e600::/29", "197036"}, + {"2a11:2b07:f000::/47", "210892"}, + {"2001:df4:e780::/48", "141206"}, + {"2400:1700:201::/44", "4628"}, + {"2406:4440:10::/48", "142641"}, + {"2804:40a0:acc2::/47", "265971"}, + {"2001:67c:1a4::/48", "15879"}, + {"2001:67c:2844::/48", "51458"}, + {"2406:840:eddd::/48", "38173"}, + {"2a02:26f7:ce04::/48", "36183"}, + {"2a0b:9400:1000::/48", "209505"}, + {"2a12:7d40::/32", "210035"}, + {"2001:129c:6000::/32", "22356"}, + {"2804:6834::/32", "269676"}, + {"2a03:1d20::/32", "201704"}, + {"2403:f440::/32", "134869"}, + {"2620:122:8001::/48", "393490"}, + {"2620:171:9f::/48", "42"}, + {"2001:480:b1::/39", "668"}, + {"2001:678:b50::/48", "62009"}, + {"2804:3d00::/32", "266247"}, + {"2a02:188:5402::/34", "31027"}, + {"2a02:26f7:dc05::/46", "20940"}, + {"2a04:cec0:1400::/29", "5410"}, + {"2a10:6080::/29", "33770"}, + {"2001:550:d09::/45", "174"}, + {"2406:9dc0:30::/44", "213262"}, + {"2001:559:c239::/48", "33650"}, + {"2409:8924:8900::/38", "56046"}, + {"2806:20d:5913::/40", "32098"}, + {"2401:d800:7010::/42", "7552"}, + {"240e:378:ac00::/33", "4134"}, + {"2600:140a:6001::/32", "20940"}, + {"2604:f980:2d00::/40", "19957"}, + {"2607:f330:a001::/46", "15130"}, + {"2001:559:86ed::/48", "22909"}, + {"2408:8459:1950::/38", "17816"}, + {"2600:1008:9010::/40", "22394"}, + {"2607:f368:2c00::/40", "46846"}, + {"2a04:5c85:f000::/47", "200584"}, + {"2a0e:97c0:a10::/47", "206895"}, + {"2401:d800:2fa0::/41", "7552"}, + {"2408:8957:e600::/40", "17622"}, + {"2806:2f0:30c1::/46", "17072"}, + {"2a00:fa00::/32", "12926"}, + {"2600:1001:b0d0::/44", "6167"}, + {"2800:830::/31", "19114"}, + {"2a0e:fd45:d90::/44", "44103"}, + {"2a11:7e00::/32", "43624"}, + {"2401:d800:77e0::/36", "7552"}, + {"2408:8256:3d9f::/28", "17816"}, + {"240a:a5c4::/32", "144126"}, + {"2804:4ab8::/32", "7155"}, + {"2a0b:640:4::/30", "35236"}, + {"2001:df0:220::/48", "55684"}, + {"2001:1b75:2000::/36", "28852"}, + {"2001:4878:2356::/48", "12222"}, + {"2404:f801:8021::/44", "3598"}, + {"2607:ffc8::/62", "17356"}, + {"2a03:f80:30::/48", "8280"}, + {"2a0d:4300::/47", "204920"}, + {"2a0d:6640::/29", "40970"}, + {"2a10:7f40::/29", "202505"}, + {"2001:678:2a0::/48", "35292"}, + {"2604:6940:100::/36", "11006"}, + {"2620:101:e000::/47", "46646"}, + {"2a02:ff0:2800::/40", "12735"}, + {"2a02:50c0:a000::/29", "29355"}, + {"2a0b:2f40::/32", "52176"}, + {"2a0c:79c0:2::/48", "12779"}, + {"2a0e:8900::/29", "44205"}, + {"2806:2f0:9821::/46", "17072"}, + {"2001:678:758::/48", "202144"}, + {"2001:1a11:10a::/48", "8781"}, + {"2408:8256:2f6c::/48", "17623"}, + {"2408:8957:f2c0::/37", "17816"}, + {"2409:8b71::/29", "9808"}, + {"2606:2800:4a1c::/46", "15133"}, + {"2804:2924::/32", "264000"}, + {"2806:230:402a::/48", "265594"}, + {"2a05:dfc7:30::/48", "36351"}, + {"2001:250:7032::/48", "24370"}, + {"2001:559:848d::/48", "7016"}, + {"2400:cb00:a130::/45", "13335"}, + {"240a:ae29::/32", "146275"}, + {"2606:7400::/32", "19310"}, + {"2803:9800:b039::/40", "11664"}, + {"2804:4b0:388::/43", "262459"}, + {"2001:67c:2b58::/48", "41980"}, + {"240a:a6ac::/32", "144358"}, + {"2604:4500:903::/40", "29802"}, + {"2605:bb00:8000::/35", "32940"}, + {"2800:160:17ab::/43", "14259"}, + {"2a02:26f7:f001::/46", "20940"}, + {"2a0e:b107:198::/48", "207740"}, + {"2001:67c:2030::/48", "33817"}, + {"2402:800:9871::/40", "7552"}, + {"240a:a48f::/32", "143817"}, + {"2602:fc38::/48", "6315"}, + {"2602:ff70::/36", "394367"}, + {"2604:e140::/32", "30174"}, + {"2804:2210::/32", "264589"}, + {"2a01:8ee0::/32", "50295"}, + {"2a04:4e41:53::/44", "54113"}, + {"2406:7ac0::/32", "141078"}, + {"240e:10:a800::/31", "4134"}, + {"2600:6c3a:401::/46", "20115"}, + {"2607:b600:12::/47", "10397"}, + {"2804:53b0:4::/33", "268600"}, + {"2a0e:e980::/29", "60781"}, + {"2001:da8:300e::/48", "24358"}, + {"2402:800:f8c2::/42", "7552"}, + {"2406:8540::/45", "141202"}, + {"2604:880:200::/45", "29802"}, + {"2606:2800:6a68::/48", "15133"}, + {"2607:f6f0:6002::/40", "27566"}, + {"2804:2728:8202::/33", "263880"}, + {"2804:3eec::/32", "266629"}, + {"2a00:801:4b::/48", "41819"}, + {"2a00:6901:1002::/47", "20926"}, + {"2001:559:809f::/48", "7922"}, + {"2408:8a26:c000::/35", "4837"}, + {"240a:ab9f::/32", "145625"}, + {"240e:3b9:d000::/36", "134772"}, + {"2803:2540:13::/40", "264668"}, + {"2a00:ed0::/32", "8426"}, + {"2c0f:fc60::/32", "30988"}, + {"2a06:a004:7000::/36", "61138"}, + {"2001:559:c43a::/48", "22909"}, + {"240a:a2f9::/32", "143411"}, + {"2806:2f0:9861::/46", "17072"}, + {"2a00:c340::/32", "57951"}, + {"2001:559:c34c::/48", "33287"}, + {"240a:a5f8::/32", "144178"}, + {"2a03:be80:d::/43", "15510"}, + {"2a05:6200:74::/48", "60068"}, + {"2c0f:fcb0:4000::/35", "36916"}, + {"2400:9700:111::/42", "24550"}, + {"2400:cb00:388::/48", "13335"}, + {"2804:6cc:8a00::/33", "262607"}, + {"2a02:26f7:d6c8::/48", "36183"}, + {"2a09:2340::/29", "43260"}, + {"2a02:26f7:c14d::/46", "20940"}, + {"2a11:8140::/29", "211199"}, + {"2400:cb00:a840::/48", "13335"}, + {"2401:4900:1a50::/44", "45609"}, + {"2406:2400:f1f0::/48", "45287"}, + {"240a:a99e::/32", "145112"}, + {"2801:80:25f0::/48", "268716"}, + {"2804:4010::/32", "265931"}, + {"2804:47a4::/32", "267067"}, + {"2804:68bc::/32", "269712"}, + {"2a02:2e02:d30::/41", "12479"}, + {"2001:13c7:7005::/44", "30133"}, + {"2400:3840:8000::/35", "23860"}, + {"2804:2508::/32", "264254"}, + {"2a10:5c0::/29", "201299"}, + {"2001:df5:8000::/48", "58885"}, + {"2406:1600::/38", "23871"}, + {"240e:1d:4000::/36", "136190"}, + {"2600:380:6880::/41", "7018"}, + {"2804:b4::/32", "28294"}, + {"2a02:ee80:4171::/45", "3573"}, + {"2a0a:d80::/29", "206795"}, + {"2a0e:aa07:e02b::/48", "210384"}, + {"2401:4900:1b80::/43", "45609"}, + {"2408:8456:a240::/37", "17816"}, + {"240e:3b4:9c00::/34", "140310"}, + {"2602:fe19:4005::/43", "26073"}, + {"2001:559:c3c9::/48", "7015"}, + {"2804:7d80::/32", "271565"}, + {"2a02:26f7:dbc8::/48", "36183"}, + {"2a05:9c00::/29", "47626"}, + {"2401:4900:4990::/42", "45609"}, + {"240e:900:100::/30", "4134"}, + {"2606:1400::/32", "10732"}, + {"2a03:1e82:90ff::/48", "2856"}, + {"2a0c:e640:6001::/46", "17830"}, + {"2600:2c01:3000::/33", "16858"}, + {"2a02:26f7:c891::/46", "20940"}, + {"2001:678:4b0::/48", "197942"}, + {"2001:df6:ff80::/48", "141818"}, + {"2408:8956:b500::/40", "17816"}, + {"2804:2bf0::/32", "262740"}, + {"2806:2f0:2041::/48", "22884"}, + {"2620:110:5000::/44", "6623"}, + {"2800:160:196f::/40", "14259"}, + {"2a03:1380::/32", "12423"}, + {"240e:9b:f00f::/43", "140250"}, + {"2620:1ec:90c::/48", "8068"}, + {"2803:9800:9995::/46", "11664"}, + {"2001:b08:13::/48", "51352"}, + {"2404:7a40:2000::/46", "132556"}, + {"2600:1419:3001::/38", "20940"}, + {"2606:2800:6037::/48", "14153"}, + {"2409:8907:7220::/39", "24547"}, + {"2a05:8900:28::/48", "199159"}, + {"2001:1248:99ff::/38", "11172"}, + {"240a:a934::/32", "145006"}, + {"2620:74:1b::/48", "397226"}, + {"2803:9800:a039::/40", "11664"}, + {"2804:14d:baa8::/41", "28573"}, + {"240a:a417::/32", "143697"}, + {"2804:6b78::/32", "270402"}, + {"2a01:1d8::/29", "8508"}, + {"2001:490:4008::/48", "1248"}, + {"2001:67c:245c::/48", "49762"}, + {"240a:abdc::/32", "145686"}, + {"240a:af72::/32", "146604"}, + {"2607:7e80:e000::/36", "27611"}, + {"2806:2f0:2221::/46", "17072"}, + {"2a11:1140::/29", "34907"}, + {"2001:400:a000:d::/64", "32982"}, + {"240e:438:a20::/43", "140647"}, + {"2a06:aa40:cadb::/48", "51931"}, + {"2a0c:b641:459::/48", "208771"}, + {"2a0d:187::/32", "16246"}, + {"2001:2e0::/32", "9293"}, + {"2001:918:ffb8::/41", "3303"}, + {"2404:9e80::/32", "64095"}, + {"2404:ca00::/32", "24295"}, + {"2600:6c34:251::/48", "33588"}, + {"2a00:4b00:12e::/43", "41935"}, + {"2a10:7a40:a::/48", "39910"}, + {"2602:fed2:7f00::/47", "203027"}, + {"2606:ae80:10::/48", "209242"}, + {"2804:188c::/32", "61939"}, + {"2a01:8f8::/32", "21334"}, + {"2a02:26f7:ecc9::/46", "20940"}, + {"2a03:9c40:200::/48", "34655"}, + {"2402:6800:0:3014::/64", "7473"}, + {"2800:160:1f7e::/40", "14259"}, + {"2804:6bc::/32", "53078"}, + {"2804:4ce0::/32", "267398"}, + {"2401:d800:7960::/40", "7552"}, + {"2804:2ffc::/32", "264924"}, + {"2600:6c38:f::/43", "20115"}, + {"2804:6c70::/32", "270468"}, + {"2a00:4802:3800::/44", "13124"}, + {"2a02:2b20::/32", "29422"}, + {"2a05:f700::/46", "50457"}, + {"2a0a:1540::/29", "43532"}, + {"2001:250:2012::/42", "24355"}, + {"2001:4d30::/32", "5555"}, + {"2404:6d00::/32", "45294"}, + {"240a:aca1::/32", "145883"}, + {"2602:ffb7:5a0::/46", "62874"}, + {"2001:250:6c1f::/48", "23910"}, + {"2001:559:c427::/48", "20214"}, + {"2804:4a24:6::/48", "267221"}, + {"2a02:26f7:da81::/46", "20940"}, + {"2001:67c:2908::/48", "209718"}, + {"2605:b200::/32", "26097"}, + {"2803:97a0::/32", "267778"}, + {"2a11:6c80::/29", "210785"}, + {"2001:559:c1a0::/48", "33651"}, + {"2602:80a:1000::/46", "11378"}, + {"2804:465c::/32", "266985"}, + {"2804:688c::/32", "269700"}, + {"2806:2f0:71a1::/46", "17072"}, + {"2a01:8840:c5::/48", "207266"}, + {"2a02:2530::/32", "43088"}, + {"2001:4878:c225::/48", "12222"}, + {"2402:800:3d0f::/43", "7552"}, + {"240e:980:4300::/40", "63835"}, + {"2600:6c38:a9b::/45", "20115"}, + {"2604:d600:1649::/46", "32098"}, + {"2804:6dd8::/32", "270559"}, + {"2a00:7a20::/32", "39194"}, + {"2402:800:bf60::/40", "7552"}, + {"2404:bf40:a4c0::/48", "7545"}, + {"2409:807c:3100::/36", "9808"}, + {"2800:160:17c2::/47", "14259"}, + {"2804:54c8::/32", "61595"}, + {"2a00:db8::/32", "3058"}, + {"2001:468:ef01::/48", "396955"}, + {"2001:da8:7fff::/48", "24363"}, + {"2001:16a0::/48", "39386"}, + {"2400:4d40:e001::/35", "134204"}, + {"240a:aa24::/32", "145246"}, + {"2602:fba1::/39", "60438"}, + {"2804:18:6800::/44", "26599"}, + {"2804:c48:ff09::/40", "52687"}, + {"2a02:ac80:31::/41", "25145"}, + {"2405:3340:e011::/48", "142437"}, + {"2600:1f14::/35", "16509"}, + {"2605:1680::/32", "18596"}, + {"2801:80:1e11::/48", "14026"}, + {"2806:2f0:310::/46", "22884"}, + {"240e:108:4e::/48", "136195"}, + {"240e:44d:1a00::/42", "140345"}, + {"2600:6c38:d1d::/46", "20115"}, + {"2804:14c:7573::/45", "28573"}, + {"2804:2474::/32", "264223"}, + {"2a00:6400::/32", "197558"}, + {"2a02:26f7:ef4d::/46", "20940"}, + {"2a04:41c0::/29", "199952"}, + {"240e:108:49::/48", "23724"}, + {"2600:1402:b::/45", "20940"}, + {"2001:1388:80b0::/38", "6147"}, + {"2604:d600:66a::/45", "32098"}, + {"2a02:ac80:401::/39", "25145"}, + {"2409:8054:8::/48", "9808"}, + {"240a:a98a::/32", "145092"}, + {"240a:ac15::/32", "145743"}, + {"2600:1408:6c00::/48", "35994"}, + {"2602:fd4a::/36", "53610"}, + {"2804:1708::/32", "263117"}, + {"2804:49f4::/32", "6453"}, + {"2a02:28:e::/29", "8359"}, + {"2a02:26f7:c9cc::/48", "36183"}, + {"2404:ae00:ffff::/48", "45474"}, + {"2406:b640:4100::/48", "139138"}, + {"240e:108:90::/48", "134420"}, + {"2803:29e0::/32", "270013"}, + {"2001:253:101::/48", "142067"}, + {"2001:678:9::/48", "199670"}, + {"2402:4440:a811::/33", "24423"}, + {"240e:983:1806::/48", "140330"}, + {"2806:3bf::/48", "270120"}, + {"240a:ac81::/32", "145851"}, + {"240a:af98::/32", "146642"}, + {"2606:6100::/32", "33262"}, + {"2804:2f40:f00f::/36", "264880"}, + {"2a02:26f7:c5c0::/48", "36183"}, + {"2620:10a:80f1::/48", "27299"}, + {"2803:3440:9004::/40", "64112"}, + {"2804:41e4::/32", "267463"}, + {"2a00:d58::/32", "12466"}, + {"2c0f:ec70::/32", "328341"}, + {"2001:67c:348::/48", "47426"}, + {"2400:4a00::/32", "9341"}, + {"2409:894a:8000::/34", "24445"}, + {"240a:a7d8::/32", "144658"}, + {"2804:2ad8::/32", "265122"}, + {"2402:800:342b::/41", "7552"}, + {"2403:4e00:303::/44", "45528"}, + {"2404:e9c0::/46", "134405"}, + {"2610:b0:40de::/42", "3573"}, + {"2a02:6c20:811::/44", "207167"}, + {"2a0f:100::/30", "7018"}, + {"2a07:b180::/29", "50963"}, + {"2001:388:607d::/40", "7575"}, + {"2001:19f8:212::/32", "4927"}, + {"240e:3be:2200::/37", "136198"}, + {"2620:108:a000::/44", "393601"}, + {"2a0b:1302::/33", "133142"}, + {"2400:9800:11::/46", "24203"}, + {"240e:d9:ad01::/38", "38283"}, + {"2400:e000::/32", "18070"}, + {"240a:a040::/32", "142714"}, + {"2605:1880::/32", "19257"}, + {"2804:6c0:400::/43", "262418"}, + {"2a02:b58::/32", "9125"}, + {"2a02:26f7:f209::/42", "20940"}, + {"240a:afc8::/32", "146690"}, + {"2803:2600::/32", "28114"}, + {"2a02:26f7:f6d4::/48", "36183"}, + {"2a11:2c0::/29", "210627"}, + {"2403:4f00:6000::/36", "63956"}, + {"2600:1406:a::/48", "35994"}, + {"240e:1a:10::/44", "137702"}, + {"240e:397:f00::/35", "140490"}, + {"2a02:6721::/32", "44631"}, + {"2001:708::/43", "1741"}, + {"2406:daa0:4060::/44", "16509"}, + {"240e:397::/38", "140483"}, + {"2605:7c80::/32", "393417"}, + {"2620:df:8000::/48", "30679"}, + {"2a02:26f7:dfc1::/46", "20940"}, + {"2001:559:c539::/48", "33668"}, + {"2401:d800:5b80::/42", "7552"}, + {"240a:a21e::/32", "143192"}, + {"2404:2200:18::/42", "18200"}, + {"2408:8956:2e00::/40", "17622"}, + {"2606:600::/32", "6639"}, + {"2804:54b0::/32", "268665"}, + {"240e:67b:8400::/38", "140329"}, + {"2605:8340::/32", "14315"}, + {"2c0f:eed8::/32", "328317"}, + {"2001:67c:23c8::/48", "49793"}, + {"2804:514:8001::/33", "262490"}, + {"2a02:730:1::/48", "42964"}, + {"2a02:26f7:ee81::/46", "20940"}, + {"2a0a:2786::/31", "206774"}, + {"2001:438:2f::/48", "17025"}, + {"2001:67c:15cc::/48", "210404"}, + {"2001:67c:24bc::/48", "42652"}, + {"2606:2800:4a7c::/46", "15133"}, + {"2a03:4a0::/32", "201888"}, + {"2a04:3280::/29", "21176"}, + {"2a05:fc1::/32", "49791"}, + {"2406:f900::/43", "132829"}, + {"240a:ab8a::/32", "145604"}, + {"240a:acbc::/32", "145910"}, + {"240e:267:5000::/38", "140333"}, + {"2a02:26f7:bd91::/42", "20940"}, + {"2a03:1400::/32", "50272"}, + {"2a09:405::/30", "208861"}, + {"2001:559:102::/48", "33287"}, + {"2001:df7:e480::/48", "138574"}, + {"2401:c00::/32", "17480"}, + {"2001:420:c0f0::/44", "109"}, + {"2001:1930:e80::/41", "11985"}, + {"2402:800:7610::/42", "7552"}, + {"240a:a5a5::/32", "144095"}, + {"2607:9800:d001::/34", "15085"}, + {"2800:bf0:80e7::/48", "27947"}, + {"2a02:26f7:ac::/48", "36183"}, + {"2a0b:d1c0::/32", "9188"}, + {"2001:500:2::/48", "2149"}, + {"2001:13c7:7002::/48", "28001"}, + {"2402:8100:25de::/42", "55644"}, + {"240a:ab58::/32", "145554"}, + {"2602:feda:e000::/36", "396303"}, + {"2604:f980:5c00::/40", "19957"}, + {"2a02:250:2::/48", "51013"}, + {"2a0b:eb40::/29", "41000"}, + {"2a0c:8f40::/29", "199216"}, + {"2a05:3343::/42", "36351"}, + {"2a0a:d6c0::/48", "61423"}, + {"2c0f:ff00::/32", "14988"}, + {"2620:17b:4::/48", "174"}, + {"2a02:bf0:1003::/36", "25106"}, + {"2a05:70c0::/35", "203455"}, + {"2a0d:82c7:5::/48", "47787"}, + {"2001:559:81b0::/48", "22909"}, + {"2001:678:f04::/48", "211646"}, + {"240a:a854::/32", "144782"}, + {"240a:aac3::/32", "145405"}, + {"2620:121:3000::/40", "54666"}, + {"2a02:26f7:b74d::/42", "20940"}, + {"2a04:3f83:44::/48", "213054"}, + {"2001:559:427::/44", "33491"}, + {"2001:c38:5000::/48", "4651"}, + {"2001:1980:2300::/37", "29838"}, + {"2403:2800::/47", "38566"}, + {"2403:5500::/32", "17537"}, + {"2600:6c34:5c::/48", "33588"}, + {"2607:9880::/32", "812"}, + {"2620:0:9c0::/48", "7941"}, + {"2806:230:302b::/48", "11888"}, + {"2a02:26f7:f64c::/48", "36183"}, + {"2a09:8ac0::/32", "205718"}, + {"2402:3a80:28::/46", "38266"}, + {"2806:322::/37", "28546"}, + {"2a02:f8c0::/29", "60713"}, + {"2001:559:72c::/48", "33287"}, + {"2001:df2:e200::/48", "133661"}, + {"2409:8904:a240::/39", "24547"}, + {"2409:8002::/40", "38019"}, + {"240e:44d:900::/41", "140345"}, + {"2604:f400:4800::/37", "29930"}, + {"2800:bf0:16::/44", "27947"}, + {"2a04:d80::/32", "20895"}, + {"2001:1248:a4b8::/45", "11172"}, + {"2001:4c28:3000::/48", "39832"}, + {"2402:8100:26c2::/45", "55644"}, + {"2620:8d:8000::/48", "4385"}, + {"2a02:26f7:f009::/42", "20940"}, + {"2001:1248:99ef::/43", "11172"}, + {"2408:8459:7e10::/42", "17623"}, + {"240a:a5aa::/32", "144100"}, + {"240a:ad45::/32", "146047"}, + {"2a06:e881:5301::/45", "209859"}, + {"2a10:9300::/29", "200736"}, + {"2001:559:c17c::/47", "33490"}, + {"2001:67c:810::/48", "210941"}, + {"2401:d800:f9b0::/41", "7552"}, + {"2402:4f00:4000:5::/46", "58453"}, + {"240a:ab9d::/32", "145623"}, + {"2600:6c20::/47", "20115"}, + {"2804:6330::/32", "269344"}, + {"2806:20d:1640::/46", "32098"}, + {"2a02:26f7:fac8::/48", "36183"}, + {"2a04:8a40::/29", "62283"}, + {"2001:df0:18c0::/48", "138277"}, + {"2401:2a80:2::/47", "58793"}, + {"2403:8940:10::/38", "135817"}, + {"2409:8057:10::/37", "56040"}, + {"2800:bf0:802b::/45", "52257"}, + {"2803:2ee0::/34", "269983"}, + {"2804:1314::/32", "263514"}, + {"2001:559:c020::/47", "7922"}, + {"2605:aec0::/32", "35932"}, + {"2806:230:6001::/48", "11888"}, + {"2001:67c:2808::/48", "197678"}, + {"240e:6ba::/36", "140314"}, + {"2405:800::/46", "7545"}, + {"2407:8b80::/32", "63631"}, + {"2804:14d:4cd7::/42", "28573"}, + {"2804:292c::/32", "264008"}, + {"2806:230:401d::/48", "11888"}, + {"2a07:1e00::/32", "197686"}, + {"2400:c800:4004::/29", "4515"}, + {"240e:7b0:1000::/31", "4134"}, + {"2a02:5a60::/32", "12685"}, + {"2a0a:2582::/32", "206568"}, + {"2001:559:8325::/48", "33652"}, + {"2001:1b00::/32", "20597"}, + {"2400:5680::/32", "55720"}, + {"2401:2500::/32", "7684"}, + {"2407:af40::/32", "142453"}, + {"2a01:b747:42a::/40", "714"}, + {"2a03:2260::/34", "201701"}, + {"2a0c:9a40:1060::/48", "34927"}, + {"2001:559:cb::/48", "7015"}, + {"240a:ad41::/32", "146043"}, + {"2600:6c38:41a::/47", "20115"}, + {"2620:6:2004::/44", "395460"}, + {"2804:644::/32", "53225"}, + {"2806:230:4032::/48", "265594"}, + {"2001:1a11:72::/48", "42298"}, + {"2409:8915:9400::/39", "56044"}, + {"240e:16:b207::/44", "38283"}, + {"2604:f582::/32", "399462"}, + {"2804:40:a000::/36", "28657"}, + {"2a00:4802:3410::/38", "8717"}, + {"2a05:f780:1000::/36", "57667"}, + {"2a0d:3840:110::/47", "57629"}, + {"2400:adc0:c100::/46", "9541"}, + {"2600:370f:9020::/46", "32261"}, + {"2800:6b0::/32", "6306"}, + {"2c0f:1500:6000::/36", "328888"}, + {"240a:a1b2::/32", "143084"}, + {"2620:3f:c009::/48", "62645"}, + {"2a05:6200::/41", "201630"}, + {"2804:3e14::/32", "266572"}, + {"2a0a:2842:15::/48", "136796"}, + {"2804:2cd8::/32", "265247"}, + {"2804:4d68::/32", "268194"}, + {"2a00:8a00:4000::/36", "8983"}, + {"2a02:540:6::/32", "35432"}, + {"2a10:2480::/29", "204790"}, + {"2401:4900:4530::/46", "45609"}, + {"240a:a389::/32", "143555"}, + {"2803:a100::/32", "262213"}, + {"2a00:aee0::/29", "60503"}, + {"2605:6c80:6::/48", "397423"}, + {"2607:f3e0::/32", "11647"}, + {"2620:131:8008::/45", "4966"}, + {"2620:171:fc::/46", "42"}, + {"2806:2f0:1082::/48", "22884"}, + {"2409:8c85:2802::/33", "9808"}, + {"2620:4d:4003::/45", "62597"}, + {"2806:103e:13::/42", "8151"}, + {"2001:559:3a4::/48", "33287"}, + {"2402:800:627e::/40", "7552"}, + {"2804:7140::/32", "270777"}, + {"2a10:8140::/29", "207886"}, + {"2001:559:82dc::/48", "33659"}, + {"2001:df2:ce00::/48", "45899"}, + {"2001:b032:ae00::/33", "3462"}, + {"2608:120:c::/48", "5927"}, + {"2804:5ac4:2080::/32", "268795"}, + {"2a04:4e40:7c30::/41", "54113"}, + {"2a07:3500:10c0::/48", "208973"}, + {"2001:dce:5::/48", "133532"}, + {"240a:a55c::/32", "144022"}, + {"2600:6c33:4c1::/48", "11351"}, + {"2602:fcbc:2::/48", "16509"}, + {"2606:5000::/37", "209"}, + {"2800:484:6100::/37", "14080"}, + {"2a02:26f7:e981::/46", "20940"}, + {"2a07:aa00::/47", "3549"}, + {"2001:678:7ec::/48", "210397"}, + {"240a:a6fe::/32", "144440"}, + {"2606:82c0:e005::/48", "32167"}, + {"2806:1008:cfff:2::/34", "8151"}, + {"2a00:ae40::/32", "50923"}, + {"2a02:26f7:c880::/48", "36183"}, + {"2a02:26f7:f541::/46", "20940"}, + {"2a0a:c0::/46", "29099"}, + {"240e:438:4040::/38", "4134"}, + {"2a00:4802:1b00::/40", "8717"}, + {"2a04:2fc0::/32", "8496"}, + {"2407:5d00::/32", "55720"}, + {"240a:ae82::/32", "146364"}, + {"2602:806:a002::/45", "398565"}, + {"2604:1380:1000::/34", "54825"}, + {"2604:5240::/34", "54614"}, + {"2604:cd40::/32", "32899"}, + {"2804:49c:3110::/48", "15201"}, + {"2804:5d34:2000::/32", "52690"}, + {"2409:8043:2c01::/48", "24444"}, + {"240e:438:c20::/43", "140647"}, + {"2a00:59c0::/46", "49232"}, + {"2a02:6300:31::/32", "50128"}, + {"2a0e:f400::/29", "42897"}, + {"240a:a85c::/32", "144790"}, + {"2600:6c10:aa::/43", "20115"}, + {"2607:fdf0:5ed0::/44", "8008"}, + {"2a03:6f80::/31", "35676"}, + {"2a0e:6080::/48", "212745"}, + {"2001:480:11::/44", "668"}, + {"2401:d800:5172::/40", "7552"}, + {"2406:c500:ffd0::/48", "20473"}, + {"2606:2800:5a74::/47", "15133"}, + {"2607:fc48:418::/48", "40009"}, + {"2800:68:40::/48", "27947"}, + {"2804:c08::/32", "52664"}, + {"2001:44b8:6056::/44", "7545"}, + {"2800:88:41::/32", "26210"}, + {"2804:6054::/32", "269160"}, + {"2a09:7440::/32", "31027"}, + {"2401:d800:9470::/40", "7552"}, + {"2409:8914:c800::/31", "56044"}, + {"2409:8c54:1800::/44", "9808"}, + {"2804:4424::/32", "267605"}, + {"2001:559:83ef::/48", "33651"}, + {"2001:6e0::/32", "8935"}, + {"2001:16a2:f000::/36", "25019"}, + {"2a00:7180:8014::/46", "210675"}, + {"2a02:b18::/32", "35339"}, + {"2a02:26f7:ca09::/46", "20940"}, + {"2403:8600:e080::/43", "45820"}, + {"2607:fad8:c8::/35", "22652"}, + {"2804:39c:f000::/36", "28329"}, + {"2001:fb0:10a2::/48", "55451"}, + {"240e:924:1000::/34", "4134"}, + {"2a02:26f7:d505::/46", "20940"}, + {"2400:a980:e0::/46", "133111"}, + {"2804:b18:8100::/37", "52941"}, + {"2001:df2:4080::/47", "55318"}, + {"2600:9000:10f8::/39", "16509"}, + {"2605:3380:4455::/46", "12025"}, + {"2606:2e00::/48", "29854"}, + {"2a00:8643::/29", "203993"}, + {"2a09:be40:4251::/40", "213349"}, + {"2a0e:b107:c90::/45", "140938"}, + {"2402:800:5701::/44", "7552"}, + {"2408:8936::/32", "4837"}, + {"2408:8956:9a00::/40", "17622"}, + {"2604:980:d000::/34", "21859"}, + {"2804:16a8::/32", "52817"}, + {"2804:2050:5a8c::/43", "264485"}, + {"2804:6df0::/33", "270565"}, + {"2a02:2b38::/32", "12703"}, + {"2001:559:566::/48", "33651"}, + {"2409:8730:3000::/33", "9808"}, + {"2a02:220e:290::/31", "6697"}, + {"2a0d:b201:8050::/40", "206026"}, + {"2400:c700:1086::/39", "55644"}, + {"2401:4900:54bd::/48", "45609"}, + {"2402:9d80:804::/47", "131429"}, + {"2405:c900::/32", "4739"}, + {"2600:1014:f110::/36", "22394"}, + {"2620:10a:8053::/48", "394354"}, + {"2804:7898:4000::/47", "271253"}, + {"2a01:c50f:3340::/40", "12479"}, + {"2a02:2698:3400::/38", "56330"}, + {"2403:3bc0::/32", "55933"}, + {"240a:a456::/32", "143760"}, + {"2a02:970:1186::/43", "44002"}, + {"2a0d:3180:7::/48", "49121"}, + {"2001:559:82c0::/48", "7015"}, + {"2001:1248:5b45::/42", "11172"}, + {"2400:9380:9260::/47", "4809"}, + {"2605:7780::/32", "26744"}, + {"2607:feb8::/32", "15083"}, + {"2a03:9b60::/32", "57184"}, + {"2001:250:20b::/48", "24350"}, + {"2001:67c:2038::/48", "197444"}, + {"2001:460:84::/39", "3561"}, + {"2001:1388:248a::/36", "6147"}, + {"2401:4900:2180::/45", "45609"}, + {"240a:a2b8::/32", "143346"}, + {"2600:141c:3801::/33", "20940"}, + {"2607:f6f0:20c::/48", "32550"}, + {"2a02:6fa0::/32", "51935"}, + {"2a03:c280::/32", "198330"}, + {"2a0c:b641:5b0::/48", "213015"}, + {"2406:daa0:7040::/44", "16509"}, + {"240a:ad08::/32", "145986"}, + {"240e:879:8000::/40", "137689"}, + {"2804:5bb8:2c::/40", "268865"}, + {"2a02:26f0:9501::/40", "20940"}, + {"2a10:9c80::/29", "29405"}, + {"2001:67c:2880::/48", "198311"}, + {"2406:3000:d::/48", "140928"}, + {"240a:a01d::/32", "142679"}, + {"240a:ae21::/32", "146267"}, + {"2607:fdf0:5eac::/43", "8008"}, + {"2620:171:fb::/48", "715"}, + {"2800:160:1faf::/41", "14259"}, + {"2a01:5b0::/47", "8391"}, + {"2a04:2180::/32", "61272"}, + {"2a0a:9740::/32", "206011"}, + {"2402:800:98c5::/42", "7552"}, + {"2402:800:f050::/42", "7552"}, + {"2804:2b90::/32", "265160"}, + {"2804:8434:387::/44", "272246"}, + {"2001:418:1451::/45", "2914"}, + {"2001:4c8:10a0::/47", "15290"}, + {"2404:bf40:8580::/46", "45887"}, + {"240e:3bc:7800::/39", "4134"}, + {"2600:6c3a:69::/43", "20115"}, + {"2806:2f0:4441::/46", "17072"}, + {"2804:1900::/32", "61768"}, + {"2001:44b8:3091::/44", "4739"}, + {"2405:c0:babe::/48", "138881"}, + {"2408:8957:7500::/40", "17816"}, + {"2600:380:1200::/36", "20057"}, + {"2804:5d0::/32", "28241"}, + {"2804:5ce8:9100::/33", "268938"}, + {"2804:676c::/36", "269627"}, + {"2806:230:6032::/48", "265594"}, + {"2a00:9d20:31::/48", "60781"}, + {"2a01:c50f:a880::/37", "12479"}, + {"2a02:26f7:dec4::/48", "36183"}, + {"2a12:ef00::/29", "204790"}, + {"2001:559:848e::/48", "33650"}, + {"2620:10d:6000::/46", "26722"}, + {"2a02:748:4000::/34", "29802"}, + {"2a0b:6e80::/29", "30745"}, + {"2a0b:b580::/48", "43304"}, + {"2001:678:f80::/48", "52158"}, + {"2606:f900:6104::/35", "812"}, + {"2620:11b:e0c2::/42", "3356"}, + {"2804:113c::/32", "53181"}, + {"2806:2f0:72e3::/39", "17072"}, + {"2a06:1e00:5::/48", "60695"}, + {"2a0a:1087::/32", "393954"}, + {"2001:559:38d::/48", "33662"}, + {"2408:84f3:be10::/42", "134543"}, + {"2806:230:500e::/48", "265594"}, + {"2407:ea00::/32", "56059"}, + {"2804:7898::/36", "271253"}, + {"2806:2f0:3443::/42", "17072"}, + {"2a0c:9a40:80c0::/48", "210529"}, + {"2001:678:c88::/48", "206161"}, + {"2001:da8:22e::/47", "23910"}, + {"2602:fc23:114::/47", "44406"}, + {"2602:ff49::/36", "10753"}, + {"2001:559:115::/48", "33650"}, + {"2402:53c0::/36", "137144"}, + {"240e:3ba:d000::/36", "134772"}, + {"2804:b04::/32", "52934"}, + {"2001:c20:4860::/45", "3758"}, + {"240a:a03c::/32", "142710"}, + {"240e:45c:400::/40", "131285"}, + {"240e:620::/30", "140061"}, + {"2600:370f:73a5::/46", "32261"}, + {"2607:fee0:2100::/33", "3599"}, + {"2a0c:4b80:4000::/34", "204810"}, + {"2406:dc0:88ca::/47", "9221"}, + {"2607:f208:d200::/43", "26496"}, + {"2a00:dd80:14::/48", "36236"}, + {"2a07:c400::/29", "34407"}, + {"240a:a922::/32", "144988"}, + {"2600:140f:2a01::/39", "20940"}, + {"2606:2800:4a84::/46", "15133"}, + {"2a0b:21c0:3004::/31", "21859"}, + {"2001:7d0::/32", "3249"}, + {"240a:a97c::/32", "145078"}, + {"2600:380:da00::/39", "7018"}, + {"2a02:26f7:d3ca::/42", "20940"}, + {"2a0e:a680:1::/48", "61157"}, + {"2001:4f8::/44", "1280"}, + {"2401:d800:b330::/41", "7552"}, + {"240a:abea::/32", "145700"}, + {"2604:9980:2::/48", "17216"}, + {"2803:ab60::/32", "269805"}, + {"2804:1624::/35", "263270"}, + {"2a01:cd20::/32", "47377"}, + {"2001:1400:ffef::/48", "2119"}, + {"2408:8456:ee40::/40", "17816"}, + {"2408:8956:d2c0::/37", "17816"}, + {"2620:10a:80e3::/45", "55195"}, + {"2801:86::/32", "53164"}, + {"2806:230:6016::/48", "265594"}, + {"2a0d:4fc0::/29", "49191"}, + {"2a0a:aa40::/32", "205668"}, + {"2a11:9940::/32", "205160"}, + {"2001:480:1610::/48", "518"}, + {"2001:da8:205::/44", "24350"}, + {"2408:8246::/35", "140726"}, + {"2806:2f0:81a3::/41", "17072"}, + {"2a02:5bf::/32", "35575"}, + {"2a07:6881::/32", "204860"}, + {"2001:5f8:7f0c::/48", "5056"}, + {"240e:a7:7fe4::/46", "140520"}, + {"2602:fc31::/47", "400071"}, + {"2804:4494::/32", "267640"}, + {"2a02:2370:1000::/48", "213120"}, + {"2c0f:fe08:305::/37", "36914"}, + {"2604:3cc0::/44", "396298"}, + {"2803:bfc0::/48", "265787"}, + {"2a05:f1c0::/29", "60924"}, + {"2001:559:8242::/48", "33651"}, + {"240a:af0c::/32", "146502"}, + {"2804:397c::/32", "52592"}, + {"2a02:26f7:d64c::/48", "36183"}, + {"2001:559:d6::/48", "33287"}, + {"2001:559:5e3::/45", "7015"}, + {"2001:14f0::/29", "12355"}, + {"2406:840:fef3::/48", "142553"}, + {"240e:3b6:1200::/39", "4134"}, + {"2605:cf40::/32", "15242"}, + {"2806:2a0:1200::/39", "28548"}, + {"2a09:3501::/30", "208861"}, + {"2400:61a0::/32", "38047"}, + {"2408:8957:c800::/39", "17622"}, + {"240a:a9a5::/32", "145119"}, + {"2607:ff28::/46", "62904"}, + {"2620:11b:400e::/47", "47870"}, + {"2804:cd8::/32", "52559"}, + {"2a04:7444::/30", "21413"}, + {"2a0d:3ec0::/32", "49981"}, + {"2a11:6e40::/32", "35913"}, + {"2400:34a0::/32", "147269"}, + {"2600:140b:6800::/48", "24319"}, + {"2a03:7480::/44", "60781"}, + {"2a05:b700::/29", "201086"}, + {"2a0c:b641:61e::/48", "208505"}, + {"2001:468:701::/48", "3681"}, + {"2001:559:423::/48", "7922"}, + {"2001:67c:b0::/48", "50673"}, + {"2001:dc7:9d0f::/33", "24151"}, + {"240a:a045::/32", "142719"}, + {"2804:4d58:1001::/32", "268191"}, + {"2a02:2230:4200::/40", "25467"}, + {"2a09:4b44:1::/44", "61317"}, + {"2a0c:8980::/29", "59562"}, + {"2001:3c8:5505::/48", "137850"}, + {"2400:9800::/45", "24203"}, + {"2408:8000:9ffe::/48", "17621"}, + {"2605:f300:ffff::/48", "29873"}, + {"2803:c210::/32", "271899"}, + {"2804:374c:100::/40", "266402"}, + {"2a05:adc2::/32", "206083"}, + {"2001:df3:9880::/48", "136969"}, + {"2600:380:8900::/40", "7018"}, + {"2a02:2e02:be0::/37", "12479"}, + {"2404:f4c0:ff04::/46", "139247"}, + {"2405:9800:b012::/48", "45430"}, + {"2600:100d:a100::/43", "6167"}, + {"2804:df0::/47", "262775"}, + {"2a00:14e0::/32", "41412"}, + {"2001:559:c003::/48", "33491"}, + {"2001:4878:141::/48", "12222"}, + {"2804:22fc::/32", "52612"}, + {"2603:c002::/39", "31898"}, + {"2605:6000::/37", "11427"}, + {"2800:160:1a7e::/40", "14259"}, + {"2a06:e380:9000::/33", "203507"}, + {"2001:1248:8600::/39", "11172"}, + {"240a:ae01::/32", "146235"}, + {"2607:ff10::/32", "10439"}, + {"2804:6078::/32", "269169"}, + {"2a00:ff0::/48", "25409"}, + {"2404:e00:81::/48", "15695"}, + {"2a00:1d58:8002::/34", "47524"}, + {"2a0d:7ac5::/30", "210206"}, + {"2001:4b27:ffff::11/126", "34288"}, + {"2001:4d78:fe17::/48", "15830"}, + {"2409:8753:d00::/38", "56047"}, + {"240e:e1:c300::/35", "4812"}, + {"2801:141:b::/48", "271958"}, + {"2a11:1080::/29", "204790"}, + {"2001:bf7:1310::/42", "206813"}, + {"2a01:7d80:2500::/35", "8990"}, + {"2a02:26f7:df8c::/48", "36183"}, + {"2a0d:6840::/29", "210232"}, + {"2001:559:485::/46", "7922"}, + {"2001:fd8:2010::/39", "4775"}, + {"2001:1310:7211::/48", "11340"}, + {"240a:a249::/32", "143235"}, + {"2a11:71c0::/29", "1239"}, + {"2401:78c0::/47", "56150"}, + {"240a:adc3::/32", "146173"}, + {"240e:378:2600::/32", "4134"}, + {"2600:370f:7181::/42", "32261"}, + {"2607:f600::/32", "12"}, + {"2a02:26f7:b1::/48", "20940"}, + {"2a06:1e86:babe::/48", "210089"}, + {"2405:c9c0:2a::/40", "138823"}, + {"2409:8017:2902::/48", "56044"}, + {"240a:aa14::/32", "145230"}, + {"2605:1b40::/32", "40389"}, + {"2804:3bfc:300::/37", "52607"}, + {"2a00:1288::/41", "10310"}, + {"2a04:b480::/43", "60110"}, + {"2a10:2780::/29", "3356"}, + {"2400:1700:212::/40", "4628"}, + {"2402:ef3f:2::/48", "9430"}, + {"2a0c:3400::/29", "205268"}, + {"2001:4490:d280::/46", "9829"}, + {"240e:44d:6300::/42", "140345"}, + {"2803:ff20::/32", "262186"}, + {"2a0a:d6c0:2157::/48", "211454"}, + {"2409:8a7f::/24", "9808"}, + {"2605:a1c0:1001::/32", "11738"}, + {"2606:2800:6a34::/47", "15133"}, + {"2a02:26f7:d4cc::/48", "36183"}, + {"2a07:3146::/32", "47688"}, + {"2a0f:e400::/32", "61218"}, + {"2607:8480::/34", "22639"}, + {"2600:370f:7371::/40", "32261"}, + {"2605:3380:445b::/42", "12025"}, + {"2804:90:6500::/38", "28580"}, + {"2806:345::/32", "265596"}, + {"2001:67c:4e8::/48", "62041"}, + {"2001:df3:3d00::/48", "9304"}, + {"2610:1d8::/32", "5078"}, + {"2a02:6800::/32", "43205"}, + {"2a0f:9400:8021::/48", "212995"}, + {"2405:f3c0::/48", "41378"}, + {"2600:1000:9f10::/40", "22394"}, + {"2620:74:7b::/40", "7342"}, + {"2a02:26f7:87::/48", "20940"}, + {"2404:bf40:a2c0::/47", "7545"}, + {"2408:8456:7a40::/39", "17816"}, + {"2606:aac0::/32", "399831"}, + {"2001:559:4e8::/48", "7922"}, + {"2409:8057:303e::/47", "9808"}, + {"2607:f038:fffe:1::/48", "21527"}, + {"2400:dd03:1009::/46", "7497"}, + {"240a:a982::/32", "145084"}, + {"2801:16a::/44", "269937"}, + {"2804:1254::/32", "263470"}, + {"2804:722c::/32", "270837"}, + {"2a02:26f7:f6f0::/48", "36183"}, + {"2001:338::/32", "4675"}, + {"240a:a623::/32", "144221"}, + {"2a01:7d20:100::/47", "203645"}, + {"2a01:b747::/39", "714"}, + {"2407:c3c0::/32", "142454"}, + {"2408:8956:c200::/40", "17622"}, + {"2409:408a:1000::/29", "55836"}, + {"2604:55c0::/48", "4138"}, + {"2a02:2d8:1:7809::/64", "9002"}, + {"240e:3bf:1800::/34", "4134"}, + {"2600:1fa0:50c0::/44", "16509"}, + {"2a01:238:10b::/38", "6724"}, + {"2001:67c:660::/48", "8881"}, + {"2602:fcd5:8::/47", "397373"}, + {"2804:772c::/32", "271160"}, + {"2a02:26f7:ed85::/46", "20940"}, + {"2001:559:7d1::/48", "7016"}, + {"2001:67c:2088::/48", "20902"}, + {"2408:8956:9800::/40", "17622"}, + {"2800:280:4002::/32", "27781"}, + {"2620:74:82::/45", "7342"}, + {"2a07:ee00::/32", "206711"}, + {"2a12:2c80::/29", "204790"}, + {"2c0f:f7c0::/34", "30986"}, + {"2001:250:23c::/47", "23910"}, + {"2001:df3:8d80::/48", "139521"}, + {"2001:1938:4100::/40", "33438"}, + {"2406:b480:200::/46", "38146"}, + {"2806:2f0:9161::/45", "17072"}, + {"2409:8004:3021::/43", "24547"}, + {"240a:a453::/32", "143757"}, + {"2806:230:301f::/48", "11888"}, + {"2a06:8800::/29", "12517"}, + {"2001:559:80e2::/48", "33287"}, + {"2408:8459:2c50::/38", "17816"}, + {"2600:1000:9e10::/40", "22394"}, + {"2600:40fc:1004::/44", "701"}, + {"2602:ffe4:c49::/45", "21859"}, + {"2a00:d220::/32", "206894"}, + {"2408:840c:dd00::/34", "17621"}, + {"2800:5f0:2037::/44", "22724"}, + {"2001:da8:4030::/48", "23910"}, + {"2401:3cc0::/39", "137409"}, + {"2804:3d7c::/32", "266534"}, + {"2804:6c08::/32", "270441"}, + {"2a0d:ac00:dc01::/48", "205202"}, + {"2001:4870:a250::/33", "3549"}, + {"240a:afcb::/32", "146693"}, + {"2600:5800:1601::/48", "33363"}, + {"2803:e600::/46", "18809"}, + {"2804:7840::/32", "271230"}, + {"2a01:8760::/32", "199758"}, + {"2402:800:978d::/43", "7552"}, + {"240a:aa94::/32", "145358"}, + {"240a:ac0f::/32", "145737"}, + {"2801:1c8:230::/46", "27817"}, + {"2804:204:247::/44", "28186"}, + {"2804:72c8::/32", "270875"}, + {"2a00:1728:e::/43", "34224"}, + {"2a02:26f0:83::/48", "20940"}, + {"2a02:26f7:f891::/42", "20940"}, + {"2001:1530::/32", "2586"}, + {"240e:183:8224::/46", "140657"}, + {"2602:fed2:7118::/48", "53356"}, + {"2607:f750:8000::/44", "23473"}, + {"2800:160:1a3f::/41", "14259"}, + {"240a:afe4::/32", "146718"}, + {"2620:c3:c000::/44", "46416"}, + {"2a02:503:2::/45", "5538"}, + {"2a0b:33c0:107::/48", "57395"}, + {"2001:678:d1c::/48", "56948"}, + {"2806:2f0:9d23::/41", "17072"}, + {"2a04:4e40:6a30::/41", "54113"}, + {"2c0f:f000:900::/37", "36891"}, + {"2001:559:861a::/48", "33287"}, + {"240a:a09c::/32", "142806"}, + {"240a:ab60::/32", "145562"}, + {"2600:c07::/48", "29791"}, + {"2600:1900:41f0::/31", "15169"}, + {"2610:10::/32", "6366"}, + {"2a00:8a01:8000::/44", "10455"}, + {"2a06:c701:eeef::/29", "6810"}, + {"2001:559:808b::/45", "7922"}, + {"2402:800:b0d0::/42", "7552"}, + {"2600:1901:ffa0::/41", "396982"}, + {"2604:a00:15::/46", "19318"}, + {"2a03:3400::/32", "20559"}, + {"2001:67c:1910::/48", "3301"}, + {"2409:8087:100c::/42", "9808"}, + {"240e:45c:5600::/34", "131285"}, + {"2804:41d4:1000::/32", "267459"}, + {"2804:54ec::/32", "268678"}, + {"2806:2f0:8041::/46", "17072"}, + {"2a0b:2f80::/29", "62412"}, + {"2001:df6:4280::/48", "142006"}, + {"2001:ee0:9740::/36", "45899"}, + {"2404:2200::/43", "18200"}, + {"2409:8904:4e60::/39", "24547"}, + {"240e:108:89::/48", "4134"}, + {"2a0a:a440::/29", "36459"}, + {"2001:678:a5c::/48", "209075"}, + {"240a:ac40::/32", "145786"}, + {"2804:5394::/32", "268593"}, + {"2a01:5c20::/35", "61419"}, + {"2a02:26f7:f94d::/42", "20940"}, + {"2a0e:aa07:e024::/48", "210934"}, + {"2405:1c0:7181::/46", "55303"}, + {"2600:1010:d170::/40", "22394"}, + {"2a07:4540:a::/48", "203116"}, + {"2001:1248:9c83::/44", "11172"}, + {"2408:84e3::/29", "4837"}, + {"2600:6c39:d::/38", "20115"}, + {"2804:80c::/32", "262343"}, + {"2a02:26f7:c244::/48", "36183"}, + {"2804:5aec::/32", "268805"}, + {"2806:2f0:9da3::/41", "17072"}, + {"2a00:8220::/32", "24971"}, + {"2a06:3840::/29", "204182"}, + {"2402:ab00:f0::/32", "24206"}, + {"2408:8459:3c50::/38", "17816"}, + {"240a:a13d::/32", "142967"}, + {"240e:966:cc00::/35", "4134"}, + {"2606:9580:fffa::/48", "394256"}, + {"2800:68:3d::/46", "61468"}, + {"2a02:2e02:82f0::/39", "12479"}, + {"2a0c:7500::/29", "205046"}, + {"2a0e:47c6::/32", "212362"}, + {"240a:ab32::/32", "145516"}, + {"240e:a65:2600::/32", "4134"}, + {"2602:fea7:e00::/40", "32181"}, + {"2604:a880::/45", "14061"}, + {"2607:3d00::/28", "12083"}, + {"2804:37d0::/46", "266437"}, + {"240e:e1:9900::/38", "4811"}, + {"2602:fbf7::/36", "400201"}, + {"2800:68:33::/48", "269844"}, + {"2a03:b900::/32", "196695"}, + {"2a04:2e80:7::/48", "6697"}, + {"2a09:bac0:97::/44", "13335"}, + {"2403:ac00::/32", "55826"}, + {"2600:1417:3000::/54", "24203"}, + {"2602:802:2000::/40", "55244"}, + {"2800:b70:e::/47", "262191"}, + {"2a01:b740:a18::/48", "6185"}, + {"2a04:4e40:3810::/41", "54113"}, + {"2001:559:c214::/48", "22909"}, + {"2001:67c:1058::/48", "50345"}, + {"2001:1a11:db::/48", "8781"}, + {"240e:3bc:2c00::/35", "134774"}, + {"2607:9b80:400::/43", "46558"}, + {"2800:160:1acc::/46", "14259"}, + {"2001:559:8207::/48", "33650"}, + {"2409:807c:1900::/34", "9808"}, + {"240a:a24f::/32", "143241"}, + {"240e:44d:1900::/42", "140345"}, + {"2602:fc6b::/36", "852"}, + {"2800:68:2a::/47", "61468"}, + {"2804:14d:d600::/40", "28573"}, + {"2804:4d3c:5dc0::/32", "267420"}, + {"2a02:26f7:bc04::/47", "36183"}, + {"2a12:1e01::/32", "41634"}, + {"2403:6d00:cf::/35", "56094"}, + {"2806:250:12::/48", "28509"}, + {"2a02:f784:30::/48", "25252"}, + {"2001:3c8:1203::/39", "4621"}, + {"2001:468:f100::/36", "11537"}, + {"2001:559:734::/48", "7016"}, + {"2001:559:c3ca::/48", "33489"}, + {"2001:579:e0bc::/39", "22773"}, + {"2402:800:b130::/41", "7552"}, + {"2403:9800:6100::/40", "4648"}, + {"2804:1878:196::/32", "61935"}, + {"2a02:5740:10::/48", "58065"}, + {"2a02:7dc0::/32", "559"}, + {"2a09:c400::/29", "13032"}, + {"2001:559:3f0::/48", "33490"}, + {"2001:67c:6b8::/48", "31477"}, + {"2404:200::/32", "7672"}, + {"240a:ab69::/32", "145571"}, + {"2a0b:5ec0::/29", "42926"}, + {"2602:fcf6:fff::/48", "48413"}, + {"2a02:26f7:e040::/48", "36183"}, + {"2001:559:8427::/48", "7725"}, + {"2a02:26f7:d204::/48", "36183"}, + {"2001:618::/32", "15716"}, + {"2409:8020:11::/42", "56046"}, + {"2600:d09:4000::/30", "20161"}, + {"2600:1408:d401::/34", "20940"}, + {"2804:28e4:20::/41", "28260"}, + {"2a01:b747:16e::/37", "714"}, + {"2a02:26f7:dc44::/48", "36183"}, + {"2001:550:3101::/38", "174"}, + {"2a0d:77c7:e908::/35", "7489"}, + {"2a0f:e440::/29", "205544"}, + {"2600:2501:3000::/28", "26801"}, + {"2804:e8c::/34", "52561"}, + {"2a02:2aa8:220::/39", "702"}, + {"2a0e:b107:1574::/47", "141011"}, + {"2402:800:9bc5::/43", "7552"}, + {"2406:fb00:1000::/48", "15224"}, + {"2804:3f58:7000::/32", "265886"}, + {"240a:ab4a::/32", "145540"}, + {"2602:803:b000::/44", "399214"}, + {"2803:9800:b88d::/41", "11664"}, + {"2a00:b900::/46", "51561"}, + {"2001:df3:ad00::/48", "137275"}, + {"2804:354c:4600::/32", "53018"}, + {"2804:4204::/32", "267472"}, + {"2a00:e480:1::/48", "12859"}, + {"2a02:1400::/26", "2119"}, + {"2a03:2de0::/32", "35444"}, + {"2600:80c::/40", "11486"}, + {"2602:fd92:500::/40", "206607"}, + {"2607:f220:412::/44", "3527"}, + {"2404:c0:30a0::/39", "23693"}, + {"2607:f180:7200::/40", "4213"}, + {"2a07:a343:e0f0::/44", "9009"}, + {"2001:559:c1fd::/48", "33652"}, + {"2600:6c7f:9111::/46", "19115"}, + {"2602:802:5000::/40", "19065"}, + {"2606:ae00:c500::/36", "7287"}, + {"2a01:8c8::/32", "3329"}, + {"2001:559:8382::/48", "7015"}, + {"2001:df0:c800::/48", "133173"}, + {"2001:fe8:8130::/47", "24435"}, + {"2804:3444::/32", "265446"}, + {"2a0e:c740::/29", "210661"}, + {"2001:559:841e::/48", "33491"}, + {"240a:a0f3::/32", "142893"}, + {"2600:1419:a::/47", "20940"}, + {"2a01:111:202f::/36", "8075"}, + {"2a01:130::/32", "8495"}, + {"2001:418:1401:2d::/57", "2914"}, + {"2605:88c0::/36", "398202"}, + {"2804:1b48::/32", "61718"}, + {"2806:2f0:2463::/43", "22884"}, + {"2a02:e982:1e::/48", "62571"}, + {"2a07:bbc2::/47", "50864"}, + {"2a11:dc00::/29", "42375"}, + {"2404:4880::/32", "135069"}, + {"2408:8456:1e40::/40", "17816"}, + {"240a:a474::/32", "143790"}, + {"240e:964:c600::/36", "4134"}, + {"2600:6c10:f241::/45", "20115"}, + {"2604:8540:fcd3::/48", "33353"}, + {"2620:10a:b0fd::/46", "15297"}, + {"2620:119:4043::/48", "7726"}, + {"2a00:8a02::/44", "8983"}, + {"2a0c:a7c0::/46", "202468"}, + {"2a11:5f80::/29", "18779"}, + {"2001:4878:b031::/48", "12222"}, + {"2400:cb00:274::/47", "13335"}, + {"2804:2984::/40", "53184"}, + {"2804:3e40:8000::/33", "266583"}, + {"2a00:19d0::/29", "12586"}, + {"2001:16a2:c2f4::/44", "39386"}, + {"2408:8456:6640::/39", "17816"}, + {"240a:afea::/32", "146724"}, + {"2a0d:9c80::/29", "49127"}, + {"2001:559:7a9::/48", "7922"}, + {"2001:559:86c9::/48", "20214"}, + {"2600:1005:b1d0::/42", "6167"}, + {"2804:6fa4::/32", "270674"}, + {"2001:1248:a67b::/40", "11172"}, + {"2404:c0:5e00::/34", "23693"}, + {"2607:a280::/32", "394117"}, + {"2610:1f0::/32", "4181"}, + {"2a04:4000::/29", "201020"}, + {"2409:8053:1002::/40", "56047"}, + {"2600:80c:f00::/40", "11486"}, + {"2a02:4720::/31", "201333"}, + {"2a0b:ec82::/32", "52000"}, + {"2c0f:f6d0:82::/47", "327687"}, + {"2804:1450::/32", "262861"}, + {"2001:559:c36a::/48", "33659"}, + {"2001:dda::/48", "18149"}, + {"240e:67e:1800::/32", "4134"}, + {"2600:1fa0:8180::/44", "16509"}, + {"2a02:26f7:f305::/46", "20940"}, + {"2a03:fbc0::/29", "61317"}, + {"2804:4f04::/32", "268298"}, + {"2a00:1b60::/32", "12552"}, + {"2a00:5884::/32", "204092"}, + {"2a0c:fac0::/48", "200076"}, + {"2604:9100:1001::/48", "14313"}, + {"2607:fa40::/47", "25899"}, + {"2a00:6d43:a00::/32", "31034"}, + {"2a00:a780:5::/36", "44229"}, + {"2a07:2911::/32", "21449"}, + {"2409:8a15:9800::/30", "56044"}, + {"2600:1404:a400::/48", "35994"}, + {"2602:fc09:a00::/40", "13780"}, + {"2602:ffe4:c2e::/43", "55836"}, + {"2603:90b0::/32", "10796"}, + {"2804:e4c:7000::/36", "269104"}, + {"240a:a872::/32", "144812"}, + {"240e:90d:b000::/33", "4134"}, + {"2804:37f0:d100::/36", "266445"}, + {"2001:559:805d::/48", "7725"}, + {"2403:a200:a3ff::/48", "58466"}, + {"2409:8907:7020::/39", "24547"}, + {"2606:2800:144::/48", "15133"}, + {"2607:2a00:3::/32", "29909"}, + {"2804:4e4::/32", "262476"}, + {"2806:230:6023::/48", "11888"}, + {"2a04:4e40:6600::/48", "54113"}, + {"2a07:e7c0:147::/48", "201076"}, + {"2406:2000:ef68::/48", "24506"}, + {"2a01:8840:ea::/45", "12041"}, + {"2a02:88d:20f::/48", "47794"}, + {"2a04:4e41:1::/46", "54113"}, + {"2a09:1400::/30", "42423"}, + {"2001:67c:2048::/48", "31317"}, + {"240a:a0ab::/32", "142821"}, + {"2a00:9bc0::/32", "57844"}, + {"2a02:26f0:1d::/48", "34164"}, + {"2a0b:4341:509::/48", "57695"}, + {"2a0c:b641:720::/47", "207363"}, + {"2402:8640:2::/44", "137491"}, + {"2406:b480:100::/46", "38146"}, + {"2600:140e:2::/48", "24319"}, + {"2a0a:cac0::/29", "31246"}, + {"2001:559:287::/48", "33662"}, + {"2001:df0:1a00::/48", "132779"}, + {"2402:4440:9c83::/34", "24423"}, + {"2804:e28:c0::/42", "52547"}, + {"2a00:7d00::/32", "41165"}, + {"2a03:aec0::/32", "199408"}, + {"2001:559:317::/48", "33489"}, + {"2405:b000:411::/39", "6262"}, + {"240e:95d:1000::/37", "136191"}, + {"2600:14c0:6::/44", "21342"}, + {"2806:230:2030::/48", "265594"}, + {"2a01:b747:a00::/34", "714"}, + {"2a0e:fd45:dd0::/38", "44103"}, + {"2401:d800:bf20::/41", "7552"}, + {"2406:e780:eb1::/48", "63679"}, + {"2605:1980:105::/46", "13951"}, + {"2a02:6b8:f::/42", "208722"}, + {"2001:559:868d::/48", "7922"}, + {"2001:67c:1028::/47", "12553"}, + {"2804:1ce4:4000::/32", "61681"}, + {"2a00:1d58:f021::/48", "47524"}, + {"2a07:12c0::/29", "25795"}, + {"2001:67c:ec::/48", "44097"}, + {"2001:1838:5100::/34", "23352"}, + {"2406:7bc0::/32", "141077"}, + {"2620:0:cc0::/48", "36692"}, + {"2806:2f0:24c2::/48", "17072"}, + {"2a02:26f7:f281::/46", "20940"}, + {"2a04:4e40:b600::/48", "54113"}, + {"2a05:6740:4060::/46", "206228"}, + {"2001:550:1e00:1::/47", "174"}, + {"2401:4900:6270::/40", "45609"}, + {"2804:14d:2a7f::/40", "28573"}, + {"2806:264:5501::/48", "13999"}, + {"2a04:e00:13::/48", "39855"}, + {"2a07:4880::/29", "24971"}, + {"2001:559:39e::/48", "33491"}, + {"2408:8456:b410::/42", "134543"}, + {"2a03:66e0::/32", "200538"}, + {"2804:12a4::/32", "263489"}, + {"2804:6d74::/32", "270534"}, + {"2806:101e:3::/45", "8151"}, + {"2a00:4802:1c00::/44", "13124"}, + {"2a00:a9a0::/32", "198721"}, + {"2408:8256:2f9c::/46", "17623"}, + {"240a:a610::/32", "144202"}, + {"240a:a6e0::/32", "144410"}, + {"2610:148::/32", "2637"}, + {"2803:c560:e000::/36", "207688"}, + {"2804:2e58::/32", "265340"}, + {"2804:806c::/32", "271749"}, + {"2a00:11c0:62::/48", "42354"}, + {"2a02:10:101::/29", "24785"}, + {"2a02:888:152::/47", "48695"}, + {"2a09:bac0:106::/47", "13335"}, + {"2a09:be40:3420::/48", "212348"}, + {"2a0f:ecc0::/29", "62167"}, + {"2602:fd1b::/36", "398871"}, + {"2001:550:102::/48", "16409"}, + {"2001:4818:4000::/36", "27272"}, + {"2a0a:4784::/32", "43317"}, + {"240a:a28d::/32", "143303"}, + {"2605:2680::/32", "393301"}, + {"2804:22c:e124::/35", "22689"}, + {"2c0e:2200::/32", "37457"}, + {"2001:678:4c0::/48", "41948"}, + {"2400:3620::/32", "149025"}, + {"2620:ac:4000::/48", "22652"}, + {"2804:6fc:bfff::/33", "28158"}, + {"2804:138b:b100::/33", "53037"}, + {"2a01:560::/29", "34087"}, + {"2a0c:b641:620::/44", "211851"}, + {"2001:4878:a246::/48", "12222"}, + {"2602:ffe2:ffe::/47", "53334"}, + {"2001:250:2411::/46", "23910"}, + {"2400:cb00:a300::/45", "13335"}, + {"2604:880:1::/46", "29802"}, + {"2606:4580::/32", "22684"}, + {"2620:0:880::/48", "29763"}, + {"2800:160:1b62::/45", "14259"}, + {"2804:6f34::/32", "28234"}, + {"2a0e:800:6666::/48", "139833"}, + {"2a10:4e40::/48", "209286"}, + {"2804:45e0::/32", "263065"}, + {"2806:202::/32", "28458"}, + {"2a06:1e00:14::/48", "60695"}, + {"2a07:4dc0::/29", "14576"}, + {"2407:c080:fc0::/35", "55990"}, + {"2001:67c:21ac::/48", "197727"}, + {"2401:d800:670::/40", "7552"}, + {"2801:1a0::/42", "52467"}, + {"2001:1248:9a60::/44", "11172"}, + {"2602:fed2:770a::/48", "53356"}, + {"2606:2800:4a20::/46", "15133"}, + {"2804:7c34::/32", "28361"}, + {"2a0e:84c0::/32", "24929"}, + {"2804:37d4::/32", "266438"}, + {"2001:559:384::/48", "33652"}, + {"240e:6b5:2000::/32", "4134"}, + {"2600:9000:2461::/48", "16509"}, + {"2607:4200::/32", "19214"}, + {"2a02:888:8052::/47", "48695"}, + {"2a07:c280::/32", "206892"}, + {"2001:559:1a8::/48", "7922"}, + {"2402:9d80:105::/48", "131429"}, + {"2408:8410::/29", "4837"}, + {"240e:67d:e600::/30", "4134"}, + {"2604:95c0::/32", "20130"}, + {"2804:3b20::/32", "266131"}, + {"2a04:5340::/47", "200081"}, + {"2400:3e20:e000::/35", "210542"}, + {"2406:c3c0::/32", "134823"}, + {"2606:4700:9640::/44", "13335"}, + {"2a00:6540::/29", "9032"}, + {"2a02:2b60:52::/39", "42947"}, + {"2a06:440::/29", "57842"}, + {"2a0b:4340:c3::/48", "44421"}, + {"2a0d:3640::/29", "8888"}, + {"2a11:2640::/31", "3170"}, + {"240a:a497::/32", "143825"}, + {"2602:feb4:110::/44", "25961"}, + {"2604:d600:625::/46", "32098"}, + {"2401:b200:46::/43", "24186"}, + {"2403:300:a04::/46", "6185"}, + {"2a00:1728:33::/32", "34224"}, + {"2a02:26f7:d700::/48", "36183"}, + {"2001:df7:6a80::/48", "137166"}, + {"2606:d680::/32", "4508"}, + {"2803:ab00::/40", "52471"}, + {"2804:7014:8100::/33", "270704"}, + {"240a:a955::/32", "145039"}, + {"240e:250:2907::/26", "4134"}, + {"2800:160:1886::/43", "14259"}, + {"2804:2728:3::/37", "263880"}, + {"2806:20d:16ff::/36", "32098"}, + {"2a01:5b0:25::/48", "48519"}, + {"2c0f:f578:30::/41", "24691"}, + {"2402:79c0:1179::/48", "26415"}, + {"2409:8028:30b3::/41", "56041"}, + {"240e:438:b360::/25", "4134"}, + {"240e:967:cc00::/35", "4134"}, + {"2620:137:5000::/42", "10851"}, + {"2804:3990::/32", "266036"}, + {"2a11:7980::/40", "210861"}, + {"2001:559:87c1::/48", "33667"}, + {"2400:3c00::/47", "38258"}, + {"2001:4888:8048::/45", "6167"}, + {"2405:9800:c92e::/41", "45430"}, + {"2407:cf40::/32", "146932"}, + {"240e:3bc:3e00::/33", "140308"}, + {"240e:6b1:2000::/32", "4134"}, + {"2620:da:4000::/48", "393945"}, + {"2a09:4c0:5701::/40", "58057"}, + {"2a0d:b201::/43", "206026"}, + {"2a0e:b107:ec0::/46", "212196"}, + {"2001:559:c1a1::/48", "33657"}, + {"240e:45c:c700::/40", "140538"}, + {"240e:60c:d800::/38", "137688"}, + {"240e:944:4000::/32", "4134"}, + {"2801:80:1a90::/48", "265490"}, + {"2a06:4400::/29", "50698"}, + {"2001:559:857e::/47", "33657"}, + {"2401:f4c0::/32", "132754"}, + {"2620:c2:4000::/48", "394101"}, + {"2a09:40c0::/48", "50007"}, + {"2c0f:ef00::/32", "327900"}, + {"2404:bf40:c580::/48", "2764"}, + {"2408:8956:900::/40", "17816"}, + {"2409:f:f3::/48", "142501"}, + {"2804:104c:a800::/40", "263629"}, + {"2a01:540:b000::/33", "12389"}, + {"2a02:26f7:bf50::/48", "36183"}, + {"2a12:7cc0::/29", "212986"}, + {"2401:6bff::/40", "9466"}, + {"2408:883a:7c0::/32", "4837"}, + {"2409:8d30::/29", "9808"}, + {"2a02:320::/29", "8351"}, + {"2405:9800:b022::/39", "45430"}, + {"2606:cd00:2::/43", "40845"}, + {"2a01:47c2::/32", "12301"}, + {"2a02:26f7:c9c0::/48", "36183"}, + {"2001:67c:214c::/48", "24909"}, + {"2401:3c0:106::/48", "45528"}, + {"2409:8a51:f00::/35", "56047"}, + {"2600:6c38:cc::/46", "20115"}, + {"2605:a900:9001::/33", "46887"}, + {"2a02:26f7:d448::/48", "36183"}, + {"2001:420:4488::/32", "109"}, + {"2401:c700::/42", "55639"}, + {"240a:a82e::/32", "144744"}, + {"2606:4f40::/32", "64227"}, + {"2610:108:3000::/48", "13506"}, + {"2402:b780:54::/32", "64047"}, + {"2409:874c:ce00::/30", "9808"}, + {"2a01:80a0:ffff::/48", "62156"}, + {"2001:559:c33c::/48", "7015"}, + {"2402:800:5355::/42", "7552"}, + {"2409:8a53:d00::/38", "56047"}, + {"2806:1080:101::/48", "19373"}, + {"2409:8e80:b000::/23", "9808"}, + {"2804:3734::/32", "266396"}, + {"2804:7c54::/32", "271489"}, + {"2a00:b7c0::/32", "47548"}, + {"2a02:cf80:3::/48", "35435"}, + {"2a04:b904::/48", "211321"}, + {"2001:240::/32", "2497"}, + {"2001:67c:324::/48", "30950"}, + {"2a02:2b00::/32", "702"}, + {"2600:9000:1e25::/44", "16509"}, + {"2605:1980:204::/47", "13951"}, + {"2a02:2008::/32", "49503"}, + {"2001:df0:264::/48", "132043"}, + {"2001:1900:2368::/47", "3356"}, + {"2604:d600:14::/44", "32098"}, + {"2a02:26f7:decc::/48", "36183"}, + {"2a04:f340:1100::/29", "8758"}, + {"2a0e:46c4:2910::/48", "138435"}, + {"2001:67c:2c90::/47", "31308"}, + {"2001:4c08::/34", "3356"}, + {"2620:52:2::/48", "22753"}, + {"2806:20d:1d31::/45", "32098"}, + {"2a02:20c8:1242::/34", "50304"}, + {"2a02:ee80:4011::/48", "3573"}, + {"2a06:db80::/29", "24631"}, + {"2a0e:b107:10c0::/44", "211495"}, + {"2001:df2:d100::/48", "136707"}, + {"240a:a27e::/32", "143288"}, + {"240a:acd9::/32", "145939"}, + {"2801:196::/48", "19429"}, + {"2a09:bac0:308::/48", "13335"}, + {"2408:8956:2140::/40", "17816"}, + {"2600:3000:5200::/31", "13649"}, + {"2602:fd10:8f0::/44", "398795"}, + {"2001:4388:7::/32", "8452"}, + {"2600:9000:114b::/48", "16509"}, + {"2a0e:b107:b10::/48", "212580"}, + {"2408:8256:356f::/48", "17816"}, + {"2001:559:121::/48", "33287"}, + {"2404:9200::/32", "2516"}, + {"240e:3b3:1800::/34", "4134"}, + {"2a0e:8f02:f002::/48", "213124"}, + {"2001:67c:600::/48", "20491"}, + {"2804:1e0c:fffe::/47", "264141"}, + {"2a0e:4180::/29", "25540"}, + {"240e:940:ce00::/40", "136197"}, + {"2804:69c0::/32", "270289"}, + {"2a01:e00::/30", "12322"}, + {"2a0c:e304:2::/30", "198985"}, + {"2a0f:f0c0::/32", "6830"}, + {"2001:67c:2b2c::/48", "212129"}, + {"2401:2d00::/46", "17625"}, + {"2607:f738:600::/41", "17184"}, + {"2a00:1851:8000::/34", "29357"}, + {"2001:559:859b::/48", "7015"}, + {"2001:559:c2bb::/48", "7015"}, + {"2600:1406:7400::/48", "35994"}, + {"2804:4ae4::/35", "267270"}, + {"2a06:4dc0::/29", "60501"}, + {"2a07:79c0::/29", "44920"}, + {"2001:678:5d8::/48", "3399"}, + {"2401:1d40:3f01::/48", "59019"}, + {"2401:ee00:2011::/40", "23951"}, + {"240a:abf6::/32", "145712"}, + {"2620:121:d000::/44", "19108"}, + {"2804:2ec0::/32", "265364"}, + {"2a09:ac40::/32", "57040"}, + {"2607:f110:e810::/38", "21889"}, + {"2a01:ae40::/32", "199163"}, + {"2001:250:700d::/43", "23910"}, + {"2001:559:876d::/48", "7015"}, + {"2001:fb1:fe1::/34", "17552"}, + {"2402:800:7470::/40", "7552"}, + {"2403:b4c0::/35", "138398"}, + {"2602:fe37::/36", "54987"}, + {"2610:f0:afb::/34", "22925"}, + {"2001:668:118::/45", "3257"}, + {"2402:800:3bfe::/37", "7552"}, + {"2606:1a40:2015::/48", "398962"}, + {"2607:f8f0:200::/48", "271"}, + {"2804:3d90::/32", "266539"}, + {"2a00:db00::/32", "47868"}, + {"2a03:90c0:999f::/48", "199524"}, + {"2a0c:fc0::/29", "204383"}, + {"2804:4680::/32", "266993"}, + {"2806:230:403c::/48", "265594"}, + {"2806:230:5010::/48", "265594"}, + {"2a02:26f0:6200::/48", "34164"}, + {"2400:4fc0:b::/48", "134146"}, + {"2401:c240::/35", "132847"}, + {"240a:a4b4::/32", "143854"}, + {"240a:adb4::/32", "146158"}, + {"2602:fca7:f01::/46", "399318"}, + {"2804:18:820::/44", "10429"}, + {"2804:642c::/32", "269411"}, + {"2804:791c::/32", "271285"}, + {"2806:310:130::/37", "16960"}, + {"2a07:7f00::/29", "43142"}, + {"2a0d:d900::/48", "61138"}, + {"2001:4888:8060::/48", "6167"}, + {"2605:5d00::/32", "27288"}, + {"2800:bf0:73::/44", "52257"}, + {"2a02:26f7:f688::/48", "36183"}, + {"2400:cb00:aa90::/47", "13335"}, + {"2405:8180:1100::/32", "135478"}, + {"2407:5280:300::/45", "133557"}, + {"2600:6c4a::/32", "20115"}, + {"2620:74:2b::/48", "40717"}, + {"2800:320:8403::/45", "27882"}, + {"2a02:e0:3003::/45", "34984"}, + {"2a02:26f7:f081::/46", "20940"}, + {"2a10:d640::/29", "211309"}, + {"2800:bf0:81c0::/47", "52257"}, + {"2804:391c:1a::/47", "262287"}, + {"2804:76c0::/32", "271132"}, + {"2a05:8dc0::/29", "15377"}, + {"2a0b:fd87:ffff::/48", "49419"}, + {"2a10:cc42:15e1::/45", "20473"}, + {"2602:803::/48", "393457"}, + {"2403:a200:a1ff::/48", "4811"}, + {"2605:db80::/32", "5742"}, + {"2804:57f4::/37", "268097"}, + {"2001:da8:a4::/48", "24364"}, + {"2602:fc9e::/40", "399525"}, + {"2402:800:5971::/44", "7552"}, + {"240a:a8e5::/32", "144927"}, + {"2600:1002:f110::/31", "22394"}, + {"2603:f348::/29", "63023"}, + {"2606:ae80:1c20::/43", "19834"}, + {"2a0c:c440::/29", "44489"}, + {"2001:1640::/32", "25394"}, + {"2404:f4c0:f703::/44", "138517"}, + {"2408:8245:1200::/32", "4837"}, + {"2605:a404:210::/45", "33363"}, + {"2620:0:890::/48", "54113"}, + {"2804:18c0:1a00::/32", "61951"}, + {"2001:250:1c0e::/39", "23910"}, + {"240a:a793::/32", "144589"}, + {"2602:fdc6::/36", "29768"}, + {"2a00:7142::/31", "51430"}, + {"2a03:2880:f022::/43", "32934"}, + {"2a05:c900::/32", "42463"}, + {"2001:678:17::/48", "43832"}, + {"2806:261:1400::/41", "13999"}, + {"2620:0:30::/45", "8075"}, + {"2804:3dd4::/32", "266556"}, + {"2806:20d:5a24::/39", "32098"}, + {"2a02:2a08::/32", "39923"}, + {"2403:fc0::/35", "398704"}, + {"2402:4f00:f000::/36", "58807"}, + {"2620:139:6004::/48", "22600"}, + {"2a00:1148:5::/48", "21051"}, + {"2a01:540:5000::/34", "12389"}, + {"2a02:26f7:eb45::/46", "20940"}, + {"2404:cf00:f001::/36", "38511"}, + {"2a09:407:e000::/36", "210625"}, + {"2a0b:db80::/29", "48004"}, + {"2a10:2240::/32", "205885"}, + {"2001:1a11:11d::/48", "8781"}, + {"2600:1007:9110::/36", "22394"}, + {"2600:6c38:150::/42", "20115"}, + {"2606:6680:15::/44", "40676"}, + {"2804:6e9c::/32", "270608"}, + {"2a03:4d41:900::/40", "199610"}, + {"2001:559:87c2::/48", "33490"}, + {"2001:df4:c200::/48", "58522"}, + {"2804:8644::/32", "272632"}, + {"2806:2f0:71e1::/46", "17072"}, + {"2a02:61a0::/32", "41937"}, + {"2400:3b00:40::/48", "18229"}, + {"2405:ec00::/45", "23955"}, + {"2408:8256:398b::/48", "17816"}, + {"240e:104:7c00::/40", "137690"}, + {"2600:40f1::/48", "46639"}, + {"2804:14c:bbe5::/43", "28573"}, + {"2804:105c::/32", "263631"}, + {"2804:1c84::/46", "61659"}, + {"2804:3460::/32", "265453"}, + {"2a0e:fd45:40f6::/48", "202297"}, + {"2403:1940::/47", "137935"}, + {"2a04:4e40:b400::/47", "54113"}, + {"2a0a:4940:1::/44", "208972"}, + {"2600:1003:b4e0::/36", "22394"}, + {"2804:63b4::/32", "269378"}, + {"2806:230:1023::/48", "11888"}, + {"2a05:2a80::/47", "200567"}, + {"2001:67c:2d8::/48", "13042"}, + {"2001:df3:f800::/48", "59216"}, + {"2404:0:70b0::/36", "131142"}, + {"2407:9f00::/32", "58834"}, + {"2408:8956:9400::/40", "17622"}, + {"240e:3b1:8200::/35", "140316"}, + {"2a02:26f7:db01::/46", "20940"}, + {"2a02:26f7:e68c::/48", "36183"}, + {"2001:400:6411::/41", "293"}, + {"2400:d280:a::/32", "45648"}, + {"2401:d800:ba60::/40", "7552"}, + {"2403:8600:c090::/42", "45820"}, + {"240a:a2c9::/32", "143363"}, + {"2804:14c:a785::/41", "28573"}, + {"2a05:24c0:1::/46", "211889"}, + {"2a0b:2900:1f00::/40", "48582"}, + {"2a11:8d00::/29", "61271"}, + {"2402:800:f600::/42", "7552"}, + {"2605:3a40:4::/48", "6233"}, + {"2607:fdf0:5e39::/41", "8008"}, + {"2a10:200::/47", "208059"}, + {"2001:1808::/32", "46650"}, + {"2804:5d6c::/32", "268971"}, + {"2a05:2100::/30", "198977"}, + {"2a0a:44c0::/29", "50083"}, + {"2a02:158:aa00::/39", "44946"}, + {"2800:1e0:2100::/40", "64124"}, + {"2a02:26f0:78::/45", "20940"}, + {"2001:559:5c1::/48", "33651"}, + {"2001:67c:d8::/48", "47708"}, + {"2600:1406:6400::/48", "35994"}, + {"2806:220::/32", "28503"}, + {"2001:252::/32", "23911"}, + {"240e:96b:6012::/45", "140370"}, + {"2604:da80::/32", "29886"}, + {"2a00:fcc0::/32", "9135"}, + {"2a0c:b642:200::/39", "206499"}, + {"2600:1402:f001::/31", "20940"}, + {"2606:2800:e400::/43", "15133"}, + {"2610:a1:301c::/48", "12008"}, + {"2803:b0e0:9985::/33", "269862"}, + {"2a0a:ce80::/29", "40970"}, + {"2a0b:b87:ff10::/48", "210902"}, + {"2a0e:fd45:40fa::/48", "7489"}, + {"2001:559:77a::/48", "7725"}, + {"2001:1248:970e::/43", "11172"}, + {"240e:438:ae20::/43", "140647"}, + {"2804:4b0:35c::/42", "262459"}, + {"2804:138b:b030::/40", "53037"}, + {"2804:2b38:e020::/35", "265141"}, + {"2402:8100:20e2::/48", "55644"}, + {"2801:80:460::/48", "52915"}, + {"2a0f:9400:7370::/44", "213092"}, + {"2600:1404:e401::/38", "20940"}, + {"2803:8d20::/32", "28007"}, + {"2804:15e4:6::/36", "53001"}, + {"2804:25d0::/32", "262656"}, + {"240a:a8db::/32", "144917"}, + {"2a01:b740:a11::/45", "714"}, + {"2a05:d050:9080::/44", "16509"}, + {"2a0e:4280::/29", "59717"}, + {"2001:559:82a1::/48", "33651"}, + {"2001:559:842c::/48", "33657"}, + {"2604:8d80::/32", "13427"}, + {"2620:11a:a01c::/48", "36040"}, + {"2a02:26f7:e140::/48", "36183"}, + {"2a03:2902::/32", "31400"}, + {"2a0a:b706:999f::/48", "204363"}, + {"2402:1d40:5005::/36", "58826"}, + {"240a:a1fb::/32", "143157"}, + {"2a0e:46c4:29f0::/44", "147047"}, + {"2400:2000:6::/47", "20940"}, + {"2402:800:94c5::/42", "7552"}, + {"2001:67c:1d4::/48", "2043"}, + {"2408:8956:de00::/40", "17622"}, + {"2606:2e00:800c::/48", "36351"}, + {"2803:9620:2501::/32", "265865"}, + {"2804:37f0:9100::/36", "266445"}, + {"2804:4984::/32", "267188"}, + {"2a09:4d42::/29", "44812"}, + {"2a0f:5707:abd0::/44", "210881"}, + {"2001:559:c2c9::/46", "7922"}, + {"2402:8100:31d2::/45", "55644"}, + {"240a:a696::/32", "144336"}, + {"2804:7d98::/32", "271571"}, + {"2a04:e840::/29", "47704"}, + {"2a0d:2406:11ea::/48", "212025"}, + {"2001:559:8763::/48", "33667"}, + {"2405:55c0:82::/32", "63991"}, + {"240a:a4ba::/32", "143860"}, + {"2a02:26f7:c000::/48", "36183"}, + {"2a04:5180::/29", "34855"}, + {"2c0f:ee78::/32", "61317"}, + {"2401:d800:2320::/41", "7552"}, + {"2407:b4c0:c::/47", "142366"}, + {"240a:a884::/32", "144830"}, + {"2803:5ce0:700::/40", "27887"}, + {"2804:2f30::/33", "53096"}, + {"2001:559:84e1::/48", "33657"}, + {"2400:cb00:a260::/47", "13335"}, + {"240e:44d:f00::/42", "140345"}, + {"2801:1a:a800::/48", "19429"}, + {"2804:15d4::/33", "263413"}, + {"2402:8100:2360::/43", "55644"}, + {"2403:5800:6::/27", "4764"}, + {"2a03:3180:f::/48", "47692"}, + {"2001:559:fc::/47", "33490"}, + {"240a:a3ab::/32", "143589"}, + {"2602:233::/32", "7782"}, + {"2804:4e1c::/32", "268240"}, + {"2a02:7940::/32", "9063"}, + {"2a04:f8c0::/29", "201698"}, + {"2001:67c:2a1c::/48", "24836"}, + {"240a:a8d7::/32", "144913"}, + {"2600:6c7f:91f0::/44", "20115"}, + {"2804:1110:ab00::/47", "262901"}, + {"2402:8100:267a::/45", "55644"}, + {"2406:e500:2::/33", "58593"}, + {"2602:804:1000::/45", "14536"}, + {"2604:81c0:1000::/36", "396422"}, + {"2606:6240:174::/48", "398447"}, + {"2a05:3fc0::/29", "201491"}, + {"2a06:d641::/32", "49981"}, + {"2a0b:4d80::/29", "206492"}, + {"2a0e:97c0:4f0::/48", "211013"}, + {"2a11:e487:affe::/48", "212568"}, + {"2001:559:c22a::/48", "33651"}, + {"2001:1aa8::/32", "24642"}, + {"2404:ba00:ff::/48", "17665"}, + {"240a:ae65::/32", "146335"}, + {"2602:ff5d::/36", "27382"}, + {"2605:f440:5600::/47", "50555"}, + {"2620:8f:4002::/44", "3424"}, + {"2001:559:8204::/48", "7015"}, + {"2001:67c:254c::/48", "39871"}, + {"2001:828::/32", "21155"}, + {"2801:116:a::/48", "271827"}, + {"2a00:17e0::/32", "49983"}, + {"2a02:ee80:2020::/43", "3573"}, + {"2a0d:3c42::/32", "25369"}, + {"2a0f:2f40::/29", "60262"}, + {"2001:da8:7006::/47", "132553"}, + {"240a:a3c2::/32", "143612"}, + {"2604:f980:4480::/43", "19957"}, + {"2001:559:82b9::/48", "33659"}, + {"2405:4cc1:c00::/40", "132468"}, + {"240e:f:d000::/27", "4134"}, + {"240e:964:9600::/39", "133776"}, + {"2804:7198::/32", "270799"}, + {"2001:c18::/32", "10204"}, + {"2401:d800:26c0::/42", "7552"}, + {"2408:8957:c400::/40", "17622"}, + {"240e:d9:a500::/36", "38283"}, + {"2804:1c8::/39", "53184"}, + {"2804:2674:c000::/40", "264344"}, + {"2606:2800:6a6a::/48", "15133"}, + {"2803:c100::/32", "28103"}, + {"2a04:4e40::/48", "54113"}, + {"2a10:340::/30", "207995"}, + {"2001:559:c249::/46", "33651"}, + {"2401:d800:2ee0::/39", "7552"}, + {"2603:90fb:20::/41", "19115"}, + {"2804:1120::/32", "52670"}, + {"2804:2d00::/32", "265256"}, + {"240a:a2dd::/32", "143383"}, + {"240a:a705::/32", "144447"}, + {"2620:12e:3009::/45", "25670"}, + {"2804:3a6c::/32", "266088"}, + {"2a04:d740::/29", "12907"}, + {"2600:6c10:ff06::/44", "20115"}, + {"2606:93c0::/32", "400220"}, + {"2607:2f80::/32", "2734"}, + {"2a0f:9a80::/29", "51290"}, + {"2a11:7440::/29", "204790"}, + {"2407:53c0::/44", "63630"}, + {"240a:acd6::/32", "145936"}, + {"2604:d600:1592::/44", "32098"}, + {"2804:93c:8101::/36", "52878"}, + {"2001:559:c066::/48", "7922"}, + {"2001:4b20:10:4101::/44", "34288"}, + {"2800:bf0:812e::/41", "27947"}, + {"2804:6d44:9000::/33", "270521"}, + {"2804:7de4::/32", "271589"}, + {"2a0d:63c0::/32", "200313"}, + {"2001:678:27c::/48", "203369"}, + {"2400:9380:9121::/48", "4809"}, + {"2800:68:53::/36", "61468"}, + {"2a0a:2842:481::/48", "42962"}, + {"2001:559:c083::/48", "33657"}, + {"2001:579:c9c0::/38", "22773"}, + {"2001:13d2:e801::/29", "7303"}, + {"2804:5a6c::/32", "268772"}, + {"2a06:80::/29", "206312"}, + {"2408:8646::/35", "140726"}, + {"2804:383c:300::/32", "52601"}, + {"2806:1016:4::/48", "8151"}, + {"2a04:b5c0::/29", "2611"}, + {"2a07:3500:19a8::/48", "38915"}, + {"2a0c:b641:210::/48", "209661"}, + {"2600:1802:5::/46", "16552"}, + {"2804:1270::/40", "262851"}, + {"2a03:ab80::/32", "197876"}, + {"2a04:27c0::/29", "197706"}, + {"2a0b:5a40::/29", "1764"}, + {"2a0c:14c0::/29", "204188"}, + {"2602:fed2:7113::/48", "53356"}, + {"2a00:7143:102::/29", "51430"}, + {"2a0a:5400::/29", "49010"}, + {"2001:559:856a::/48", "7016"}, + {"2001:1248:99ab::/41", "11172"}, + {"2408:84f3:9a40::/37", "17816"}, + {"240a:a608::/32", "144194"}, + {"2600:1406:5801::/34", "20940"}, + {"2602:fd58:1::/48", "32505"}, + {"2620:149:a16::/48", "6185"}, + {"2a00:1620::/32", "137"}, + {"2a02:26f7:5f::/48", "20940"}, + {"2a02:ed04:4710::/30", "50304"}, + {"2a06:f240::/29", "207355"}, + {"2a07:e345:3::/44", "211588"}, + {"2a0c:7180::/29", "35207"}, + {"2001:559:c2ad::/48", "7015"}, + {"2001:67c:2f1c::/48", "41847"}, + {"2402:800:3c71::/40", "7552"}, + {"2602:fdc2::/48", "397720"}, + {"2607:f428:9370::/44", "19115"}, + {"2a02:7b07::/48", "48328"}, + {"2401:c000::/32", "24323"}, + {"2403:cc0::/32", "131314"}, + {"2408:8456:3e10::/42", "134543"}, + {"2800:d302:20::/47", "11830"}, + {"2001:67c:1240::/48", "198812"}, + {"2001:ee0:8940::/38", "45899"}, + {"240a:a088::/32", "142786"}, + {"2605:a480::/32", "32703"}, + {"2800:160:1b28::/43", "14259"}, + {"2804:c00:d000::/34", "52655"}, + {"2a04:ad80::/47", "44684"}, + {"2401:d800:78a0::/41", "7552"}, + {"240a:a015::/32", "142671"}, + {"240a:a6a2::/32", "144348"}, + {"2803:1460::/32", "267837"}, + {"2001:4490:d780::/46", "9829"}, + {"2408:8957:5800::/40", "17622"}, + {"2a02:ae8::/29", "20625"}, + {"2a02:26f0:2901::/38", "20940"}, + {"2a0a:640::/32", "34762"}, + {"2001:559:8771::/46", "7922"}, + {"2001:67c:1734::/48", "60805"}, + {"2402:800:9655::/42", "7552"}, + {"2403:6000:900::/32", "24085"}, + {"2400:cb00:253::/44", "13335"}, + {"2404:fd00:facf::/37", "58552"}, + {"2408:8346::/35", "140726"}, + {"2600:1007:9000::/44", "6167"}, + {"2804:2050:4abd::/35", "264485"}, + {"2401:d800:95e0::/38", "7552"}, + {"2407:8b40::/32", "135188"}, + {"240a:afc1::/32", "146683"}, + {"2605:ba80::/32", "40473"}, + {"2a02:26f7:ae::/48", "36183"}, + {"240a:aa62::/32", "145308"}, + {"2605:a900::/45", "46887"}, + {"2a02:17d0::/32", "12668"}, + {"2a0b:6b84:1338::/32", "200639"}, + {"2c0f:ee28::/32", "37172"}, + {"240c:c0a8:9c02::/33", "24348"}, + {"240e:3b5:3e00::/33", "140308"}, + {"2001:1900:222c::/46", "3356"}, + {"2404:1940::/32", "136030"}, + {"240a:a933::/32", "145005"}, + {"2804:5da0::/32", "268983"}, + {"2a00:4920::/32", "202169"}, + {"2a07:6000::/29", "59586"}, + {"2001:df0:301::/48", "18402"}, + {"2405:b40:2a::/43", "55674"}, + {"2a02:26f7:f799::/42", "20940"}, + {"2a03:ec00:b900::/40", "24921"}, + {"2a06:7580::/29", "203460"}, + {"2001:559:8362::/48", "33491"}, + {"2001:559:c292::/48", "33287"}, + {"2405:9800:d200::/48", "134240"}, + {"240e:354:6400::/31", "4134"}, + {"2800:800:900::/44", "26611"}, + {"2a02:26f7:e808::/48", "36183"}, + {"2404:ae00:12::/47", "45474"}, + {"2800:160:1367::/43", "14259"}, + {"2a02:26f7:f605::/46", "20940"}, + {"2404:4a00:5543::/36", "45629"}, + {"2804:1408:a001::/33", "28635"}, + {"2a02:ad8:1600::/34", "12389"}, + {"2a0b:9780::/29", "41847"}, + {"2001:559:574::/48", "33657"}, + {"2404:4a00:3:1::/48", "45629"}, + {"2804:8244::/32", "272509"}, + {"2408:8434::/28", "4837"}, + {"2a00:1c10:fff0::/44", "50300"}, + {"2a01:a1e0:1::/48", "39293"}, + {"2a02:850:ffe5::/46", "1921"}, + {"2a0b:100::/29", "210858"}, + {"2001:67c:8f4::/48", "210189"}, + {"2400:6280:130::/48", "132280"}, + {"2408:8256:319f::/38", "17816"}, + {"240a:a319::/32", "143443"}, + {"240a:a3af::/32", "143593"}, + {"2803:2500::/32", "262253"}, + {"2804:1248:5000::/32", "263467"}, + {"2806:261:507::/48", "13999"}, + {"2a07:3501:1050::/48", "39686"}, + {"2a0b:6200::/29", "16010"}, + {"2804:fec::/32", "262493"}, + {"2a0a:f584::/32", "62240"}, + {"2a0f:de00::/29", "208253"}, + {"2a10:8441:112::/48", "8422"}, + {"2001:250:2807::/48", "23910"}, + {"2409:8904:4f60::/35", "24547"}, + {"2600:1002:f010::/40", "22394"}, + {"2605:3380:4474::/44", "12025"}, + {"2800:bf0:81e7::/44", "27947"}, + {"2a0e:8f02:1024::/46", "204446"}, + {"2001:253:138::/48", "142104"}, + {"2a0e:b107:178c::/47", "208679"}, + {"2001:67c:2980::/48", "196948"}, + {"2404:ba00:e::/48", "17665"}, + {"2405:9800:c909::/48", "55476"}, + {"2a01:62a0::/32", "206250"}, + {"240a:a4b5::/32", "143855"}, + {"240e:679:8400::/38", "140329"}, + {"2607:fd28:a006::/48", "3725"}, + {"2a00:7800::/32", "51929"}, + {"2a0f:d180::/31", "208041"}, + {"2a12:a4c1::/32", "35543"}, + {"2001:dce:3::/48", "133532"}, + {"2001:fd8:61::/46", "4775"}, + {"2400:ea00::/48", "23884"}, + {"2408:8957:4400::/40", "17622"}, + {"2409:8028:1090::/41", "56041"}, + {"2620:1ec:8fd::/46", "8075"}, + {"2a00:ee0::/29", "5603"}, + {"2a02:26f0:f401::/39", "20940"}, + {"2001:559:82fe::/48", "33660"}, + {"2407:b001::/35", "24121"}, + {"240e:97c:4000::/36", "4816"}, + {"2804:294:8100::/33", "28604"}, + {"2a09:6980::/29", "56598"}, + {"2001:da8:a005::/43", "24352"}, + {"2400:adc0:4300::/47", "9541"}, + {"240a:a2fc::/32", "143414"}, + {"2804:4d80::/36", "268200"}, + {"2a02:26f7:55::/48", "20940"}, + {"2a02:2e02:2f40::/40", "12479"}, + {"2001:dc7:5dcd::/42", "24151"}, + {"2606:2800:130::/48", "15133"}, + {"2a02:4b0:217::/32", "43751"}, + {"2a02:26f7:d405::/46", "20940"}, + {"2402:800:56c5::/43", "7552"}, + {"2404:e801:1004::/46", "55430"}, + {"2409:8904:5a40::/42", "24547"}, + {"2a10:5940::/29", "207603"}, + {"2402:800:9ec0::/43", "7552"}, + {"2600:370f:3101::/45", "32261"}, + {"2a02:26f7:b645::/46", "20940"}, + {"2a02:5a80::/29", "197729"}, + {"2a03:dc40:ffff::/48", "196904"}, + {"2400:1520::/44", "132829"}, + {"240e:37d::/35", "140329"}, + {"2602:fce1:250::/48", "395886"}, + {"2606:2800:50a0::/43", "15133"}, + {"2406:a1c0:2::/48", "131921"}, + {"2408:8756:2c00::/40", "135061"}, + {"240a:a59f::/32", "144089"}, + {"2600:1417:3801::/33", "20940"}, + {"2605:ee00:30::/41", "29990"}, + {"2a00:6fc0:c010::/44", "3215"}, + {"2a0b:b87:ffea::/48", "201331"}, + {"2401:d800:dea0::/41", "7552"}, + {"240e:3b0:4c00::/35", "136200"}, + {"2600:6000:fd41::/43", "12271"}, + {"2607:f670::/32", "10587"}, + {"2804:3cd0::/32", "266236"}, + {"2804:446c::/32", "28369"}, + {"2a02:2aa8:203::/43", "702"}, + {"2a05:d01a::/36", "16509"}, + {"2c0e:4000:a000::/36", "36994"}, + {"2001:559:37::/48", "7046"}, + {"2600:1009:9000::/44", "6167"}, + {"2600:1010:a100::/43", "6167"}, + {"2803:2e40:102::/44", "27796"}, + {"2804:6ba0::/32", "270413"}, + {"2804:6ec8::/32", "270618"}, + {"2a09:bac0:445::/48", "13335"}, + {"240e:438:ae40::/35", "4134"}, + {"2800:370:44::/48", "28006"}, + {"2a02:26f7:d249::/46", "20940"}, + {"2a10:b641::/36", "211607"}, + {"2001:559:c29e::/48", "33287"}, + {"2407:14c0:800::/32", "138077"}, + {"2a01:8c20::/32", "8368"}, + {"2a02:26f7:c7::/48", "20940"}, + {"2001:67c:2bd4::/48", "1257"}, + {"2406:e002:3000::/33", "23655"}, + {"2804:4734::/34", "267038"}, + {"2a06:26c0::/29", "31662"}, + {"2001:559:c4e9::/48", "33657"}, + {"2405:84c0:ff11::/48", "9886"}, + {"2602:ff36::/38", "395348"}, + {"2a00:4b40::/32", "51013"}, + {"2a03:96e0:8000::/33", "2119"}, + {"2001:559:868a::/48", "33657"}, + {"2001:da8:249::/48", "24350"}, + {"2407:3640::/32", "141995"}, + {"240a:a066::/32", "142752"}, + {"2001:67c:22a4::/48", "56825"}, + {"240a:a5e7::/32", "144161"}, + {"2803:fce0::/32", "269916"}, + {"2804:265c::/32", "264329"}, + {"2804:764c::/32", "271102"}, + {"2401:d800:be22::/41", "7552"}, + {"2600:1404:b401::/38", "20940"}, + {"2604:d600:554::/44", "32098"}, + {"2a02:26f7:c648::/48", "36183"}, + {"2a03:5100::/32", "197742"}, + {"2a04:ff07::/32", "202297"}, + {"2001:559:1b7::/48", "7922"}, + {"2600:141b:a000::/48", "35994"}, + {"2600:6c21:a0f::/43", "20115"}, + {"2606:ae00:6d40::/40", "7287"}, + {"2620:116:800a::/48", "16509"}, + {"2a00:1a28:101::/35", "42708"}, + {"2a10:e580:2000::/48", "399114"}, + {"2800:ba0:4::/48", "263812"}, + {"2804:28ac::/32", "263974"}, + {"2a02:2208::/47", "6697"}, + {"2a0e:1e40::/29", "64484"}, + {"2a11:fe80::/32", "209209"}, + {"2405:8a00:4020::/34", "55824"}, + {"2600:140b:15::/38", "20940"}, + {"2606:2800:5012::/48", "15133"}, + {"2804:8078::/32", "271752"}, + {"2a00:58c0::/48", "200774"}, + {"2a02:6b60::/28", "201838"}, + {"2001:559:8518::/42", "7015"}, + {"2001:67c:1050::/48", "58130"}, + {"2001:890:c000::/34", "8562"}, + {"2001:12d8::/40", "1251"}, + {"2408:8207:19d0::/32", "4808"}, + {"240a:aad7::/32", "145425"}, + {"2607:f9d0::/39", "11979"}, + {"2803:5440:4062::/45", "264738"}, + {"2803:9a40:8001::/46", "263824"}, + {"2803:c180:2110::/38", "52341"}, + {"2804:4448::/32", "267622"}, + {"2804:5f84::/32", "269105"}, + {"2a0d:2680:1100::/40", "20473"}, + {"2001:578:110::/46", "22773"}, + {"2408:840d:1e00::/42", "17621"}, + {"2804:6d04::/32", "270507"}, + {"2a0a:54c1:53::/45", "62240"}, + {"240a:a4b2::/32", "143852"}, + {"2604:f100::/32", "33234"}, + {"2620:f::/48", "3754"}, + {"2804:fdc::/32", "263608"}, + {"2a01:bf40::/32", "15691"}, + {"2a02:ee80:4042::/45", "3573"}, + {"2a09:bec0::/32", "12552"}, + {"2c0f:f2e8::/32", "37182"}, + {"2001:559:832c::/48", "7016"}, + {"2001:579:d184::/42", "22773"}, + {"2401:8d00:3::/48", "38345"}, + {"2607:ce00::/32", "53488"}, + {"2804:32c0::/32", "265097"}, + {"2a01:7ee0::/48", "1257"}, + {"2a02:26f7:d78c::/48", "36183"}, + {"2400:7400:e02a::/47", "23736"}, + {"2405:ef00:18::/32", "58779"}, + {"2804:5cc8:3300::/32", "268930"}, + {"2001:559:278::/48", "7015"}, + {"2001:5b0:2100::/37", "6621"}, + {"2402:e280:214f::/43", "134674"}, + {"240a:a6cf::/32", "144393"}, + {"2a02:26f7:f588::/48", "36183"}, + {"2a04:940:2::/35", "51407"}, + {"2605:6c80:2::/48", "14935"}, + {"2a01:4400:6::/48", "1257"}, + {"2a0c:d4c0::/29", "8823"}, + {"2406:4a00:15::/48", "56038"}, + {"2409:8043:2c02::/47", "9808"}, + {"2409:8c20:1832::/48", "56046"}, + {"2600:380:7680::/39", "20057"}, + {"2804:7fe0:4000::/34", "271715"}, + {"2a03:a0e0::/32", "44493"}, + {"2607:f598::/32", "32329"}, + {"2610:130:2301::/48", "14513"}, + {"2a03:31c0::/37", "43256"}, + {"2001:678:80c::/48", "29560"}, + {"2409:8914:c200::/39", "56044"}, + {"2804:9ec::/37", "263002"}, + {"2806:230:600c::/48", "265594"}, + {"2a07:b000::/29", "35902"}, + {"2001:250:810::/47", "138182"}, + {"2a00:de00::/32", "56566"}, + {"2001:559:1bc::/48", "33659"}, + {"2001:fd8:e1::/46", "4775"}, + {"2401:4900:4f52::/48", "45609"}, + {"240a:a2c1::/32", "143355"}, + {"2607:fd48:204::/39", "13536"}, + {"2a0e:f240::/29", "208348"}, + {"2602:fcff::/48", "40916"}, + {"2804:eec:11c5::/38", "28226"}, + {"2a01:ce85::/35", "51964"}, + {"240e:3b9:2200::/37", "136198"}, + {"2804:fe4::/32", "28343"}, + {"2a03:1a20:10::/48", "207467"}, + {"2a11:af40::/29", "210626"}, + {"2001:c20:48a5::/48", "3758"}, + {"2600:1006:b0d0::/42", "6167"}, + {"2602:fce1:241::/48", "395886"}, + {"2801:80:220::/48", "262483"}, + {"2804:14d:be84::/44", "28573"}, + {"2a04:6bc0::/36", "48635"}, + {"2a07:980::/29", "48213"}, + {"2606:4700:4700::/48", "13335"}, + {"2804:2ff0::/32", "264921"}, + {"2806:230:1002::/48", "265594"}, + {"2001:559:126::/48", "33659"}, + {"2001:559:236::/48", "7922"}, + {"2001:1248:97ff::/36", "11172"}, + {"2401:4900:3a00::/42", "45609"}, + {"240a:af16::/32", "146512"}, + {"240e:67a:e400::/39", "140330"}, + {"2804:1040:fb00::/37", "263626"}, + {"2804:1998::/32", "61805"}, + {"2a02:348:7a::/40", "35470"}, + {"2001:550:6c04::/48", "26824"}, + {"2a02:25c8::/32", "43557"}, + {"2a0e:c80:743::/48", "40676"}, + {"2001:57a:7008::/32", "22773"}, + {"2001:4408:8300::/44", "4758"}, + {"2406:1940::/32", "131925"}, + {"2409:8053:1100::/37", "9808"}, + {"2409:8087:2000::/45", "56046"}, + {"240a:a502::/32", "143932"}, + {"2a07:cc00::/29", "207988"}, + {"2a0a:144:400::/48", "16509"}, + {"2a0c:d100::/29", "202283"}, + {"2001:559:8423::/48", "7015"}, + {"2400:80c0::/32", "132453"}, + {"2402:800:7bb0::/41", "7552"}, + {"2803:9800:a8d0::/39", "11664"}, + {"2a01:8840:56::/44", "12041"}, + {"2a01:aac0::/32", "43391"}, + {"2c0f:800::/32", "328778"}, + {"240e:5f:600e::/48", "4134"}, + {"2607:4b80::/32", "7018"}, + {"2a00:a362::/32", "60435"}, + {"2a00:ad87:1300::/48", "15465"}, + {"2a05:8cc0::/29", "201210"}, + {"2a05:a040::/29", "43652"}, + {"2001:df3:809::/43", "22787"}, + {"2406:3400:1d::/41", "10143"}, + {"240e:3b6:2800::/38", "4134"}, + {"2801:141:9::/48", "271958"}, + {"2a01:55c0::/29", "21197"}, + {"240a:a8f2::/32", "144940"}, + {"2600:1403:11::/48", "21342"}, + {"2a01:190:151e::/48", "207791"}, + {"2001:559:84d4::/48", "33659"}, + {"2602:107:e500::/40", "11427"}, + {"2a10:f300::/29", "212263"}, + {"2001:559:81ef::/48", "7015"}, + {"2001:559:8629::/46", "7016"}, + {"2001:67c:17e0::/48", "207688"}, + {"240a:a86d::/32", "144807"}, + {"2602:fd60:11::/48", "49134"}, + {"2001:4d98:2200::/35", "3303"}, + {"2606:ae80::/44", "25751"}, + {"2a01:5860::/32", "199939"}, + {"2804:6f38::/32", "270646"}, + {"2a0f:5707:fff3::/48", "207469"}, + {"2001:df0:421::/48", "4826"}, + {"2001:fb0:10a3::/43", "7470"}, + {"2001:4490:7000::/46", "9829"}, + {"2806:230:2055::/48", "11888"}, + {"2a00:4bc0:2134::/32", "31004"}, + {"2a02:26f7:e445::/46", "20940"}, + {"2404:1b40::/47", "18230"}, + {"2600:1004:b000::/40", "6167"}, + {"2620:100:a005::/44", "19750"}, + {"2a00:1288:ef67::/48", "14778"}, + {"2001:559:4be::/48", "7015"}, + {"2402:800:379b::/41", "7552"}, + {"2605:a401:80d9::/45", "33363"}, + {"2806:370:4210::/40", "28403"}, + {"2607:4700::/32", "25720"}, + {"2801:1b:2000::/48", "61447"}, + {"2804:a20::/32", "263024"}, + {"2a02:e0:3128::/45", "34984"}, + {"2001:da8:3007::/44", "24358"}, + {"2001:1248:558a::/43", "11172"}, + {"2401:d800:59d0::/42", "7552"}, + {"2804:4a8c:200::/32", "267248"}, + {"2804:5090::/32", "263005"}, + {"2a04:d00::/29", "204326"}, + {"2402:9f80::/32", "9808"}, + {"2804:3d74:103::/32", "262617"}, + {"2a02:8801::/32", "5089"}, + {"2a03:74c0::/32", "203304"}, + {"2a0f:607:1100::/44", "212425"}, + {"2a10:e580:4000::/48", "399114"}, + {"2001:648:2c11::/42", "5408"}, + {"2407:9440:42::/43", "141626"}, + {"2409:8028:2000::/40", "56041"}, + {"2409:8904:5bb0::/37", "24547"}, + {"240a:a0b1::/32", "142827"}, + {"2804:5d04::/32", "268946"}, + {"2600:1f01:4870::/47", "16509"}, + {"2804:14::/32", "28360"}, + {"2804:14c:6b00::/40", "28573"}, + {"2804:3600::/32", "266320"}, + {"2a0c:1600::/32", "50537"}, + {"2001:559:c0da::/48", "33652"}, + {"2001:678:250::/48", "41038"}, + {"2400:7400:e027::/44", "23736"}, + {"2402:4000:1290::/34", "18001"}, + {"2600:6c20:10::/45", "20115"}, + {"2a05:2940::/32", "43740"}, + {"2402:800:f230::/41", "7552"}, + {"2604:980:1000::/33", "21859"}, + {"2001:559:c196::/48", "7922"}, + {"2401:fb00::/32", "17754"}, + {"2409:8907:8420::/39", "24547"}, + {"240a:abaf::/32", "145641"}, + {"2605:c880::/32", "63290"}, + {"2a06:1287:3310::/32", "61138"}, + {"2001:67c:210::/48", "51066"}, + {"2001:4c08:201e::/48", "3356"}, + {"2a0f:5707:ffa5::/46", "131668"}, + {"240e:45c:6d00::/40", "140531"}, + {"2a02:e980:f8::/45", "19551"}, + {"2a0c:d040::/32", "30781"}, + {"2001:468:f0ff::/48", "11164"}, + {"240a:a40a::/32", "143684"}, + {"240e:108:81::/48", "4134"}, + {"2a03:6947:b00::/40", "59819"}, + {"240d:c010:18::/47", "139341"}, + {"2800:430:a000::/35", "23487"}, + {"2804:64::/32", "27693"}, + {"2a01:4ce0:62::/39", "19624"}, + {"2a02:2370:101::/45", "32787"}, + {"2001:40b0::/32", "13041"}, + {"2408:8256:327d::/46", "17623"}, + {"2804:1f12::/32", "52950"}, + {"2a00:cc40::/48", "44395"}, + {"2001:559:8773::/48", "21508"}, + {"2001:648:24a0::/48", "12402"}, + {"240e:97d:1000::/36", "4134"}, + {"2408:8456:bc40::/38", "17816"}, + {"2606:2800:4270::/46", "15133"}, + {"2606:bbc0::/48", "400509"}, + {"2804:14d:7200::/40", "28573"}, + {"2804:fb4::/34", "263599"}, + {"2001:c20:402::/38", "3758"}, + {"240a:ad67::/32", "146081"}, + {"2600:1406:2201::/37", "20940"}, + {"2606:f180:7::/48", "3356"}, + {"2a00:c60::/32", "8851"}, + {"2a01:c50f:f6c0::/39", "12479"}, + {"2a04:92c7:3::/44", "62240"}, + {"2408:8256:34a0::/39", "17816"}, + {"240e:3bd:5600::/34", "4134"}, + {"2602:fe23::/36", "7018"}, + {"2803:50e0::/32", "269857"}, + {"2a09:bac0:373::/45", "13335"}, + {"2001:559:220::/48", "21508"}, + {"240a:ab82::/32", "145596"}, + {"2607:fdb8::/47", "30496"}, + {"2a02:4260::/29", "60163"}, + {"2a0c:3ec7::/32", "204310"}, + {"2a0e:fd40:be01::/43", "44103"}, + {"2001:7f8:6::/48", "9070"}, + {"240e:ff:f000::/36", "4816"}, + {"2607:ff28:b008::/43", "62904"}, + {"2602:fed2:711c::/48", "53356"}, + {"2804:8570::/32", "272579"}, + {"2a10:bb40::/29", "41050"}, + {"2001:418:4001:3::/64", "2914"}, + {"240e:438:3e40::/33", "4134"}, + {"240e:45c:6300::/40", "140530"}, + {"2806:2f0:44e3::/39", "17072"}, + {"2001:67c:2c88::/47", "60092"}, + {"2001:918:ff76::/47", "8300"}, + {"2001:1248:95b0::/38", "11172"}, + {"2001:1248:9879::/45", "11172"}, + {"240a:a8d8::/32", "144914"}, + {"2606:8e80:1000::/48", "394497"}, + {"2607:fcd0:cd80::/35", "8100"}, + {"2620:106:e00a::/48", "40428"}, + {"2804:36b4::/32", "266366"}, + {"2a02:26f7:de01::/46", "20940"}, + {"2001:fd8:3470::/44", "4775"}, + {"240e:108:1132::/47", "138991"}, + {"2a01:96e0::/32", "35179"}, + {"2a05:8140::/29", "12776"}, + {"2a0f:9400:772b::/48", "207941"}, + {"2a02:26f7:ca84::/48", "36183"}, + {"2001:128c:2004::/33", "25933"}, + {"240a:ab9c::/32", "145622"}, + {"2a0c:b0c0::/29", "64398"}, + {"240a:afd5::/32", "146703"}, + {"240e:108:1270::/44", "140061"}, + {"2607:fc30:200::/40", "396026"}, + {"2804:1c18::/32", "61637"}, + {"2001:559:81b2::/48", "33652"}, + {"2402:3580:9011::/48", "134118"}, + {"2409:8904:8990::/38", "24547"}, + {"240e:438:8c20::/43", "140647"}, + {"2600:1417:61::/48", "24319"}, + {"2804:119c::/32", "263427"}, + {"2a0a:d6c0:1::/48", "51658"}, + {"2401:13c0:6000::/36", "132652"}, + {"240a:a57a::/32", "144052"}, + {"2620:118:a004::/47", "26342"}, + {"2804:3ae8::/32", "266117"}, + {"2001:559:8716::/48", "7725"}, + {"2001:19f0:ccc::/47", "20473"}, + {"2407:8440::/32", "135981"}, + {"2605:4200::/32", "14543"}, + {"2605:a404:c48::/43", "33363"}, + {"2804:78d8::/32", "271269"}, + {"2402:800:332b::/41", "7552"}, + {"240a:a578::/32", "144050"}, + {"2607:f770:8464::/33", "22958"}, + {"2620:149:a15::/48", "714"}, + {"2800:4f0:8::/48", "28006"}, + {"2804:84dc::/32", "272543"}, + {"2a01:5900::/32", "29239"}, + {"2001:1248:8469::/46", "11172"}, + {"240e:9f:d800::/26", "4134"}, + {"2a0e:6200::/29", "8888"}, + {"2001:ac8:87::/48", "9009"}, + {"2600:6000:fb35::/37", "12271"}, + {"2a00:6800::/32", "42730"}, + {"2a0c:cc40::/29", "204790"}, + {"2600:80a:441::/36", "701"}, + {"2804:2178:4004::/47", "264556"}, + {"2409:8a50:900::/38", "56047"}, + {"240e:982:4000::/38", "134768"}, + {"2606:be80::/32", "394678"}, + {"2607:f798:2600::/36", "812"}, + {"2a05:8b80::/29", "201206"}, + {"2c0f:ef40::/32", "328337"}, + {"2401:3c0:101::/46", "45528"}, + {"2407:dc00:4::/39", "9714"}, + {"240e:3b8:c800::/37", "4134"}, + {"240e:45c:1d00::/40", "137401"}, + {"2a01:ce82::/34", "51964"}, + {"2408:834e::/27", "4837"}, + {"240a:a767::/32", "144545"}, + {"2806:20d:59ff::/38", "32098"}, + {"2a02:26f7:d90c::/48", "36183"}, + {"2a02:5680::/32", "41484"}, + {"2806:230:6031::/48", "11888"}, + {"2001:559:c47c::/48", "33651"}, + {"2620:100:e000::/47", "5662"}, + {"2602:feb4:70::/44", "25961"}, + {"2a00:1d70::/32", "39020"}, + {"2a00:aa00::/32", "15663"}, + {"2a00:b840:2::/29", "31472"}, + {"2a01:c9c0:c7::/48", "8891"}, + {"2a02:4e0:2d00::/40", "16135"}, + {"2403:e200::/43", "45543"}, + {"2803:e1c0::/32", "265684"}, + {"2804:28e4:e817::/42", "28260"}, + {"2804:6404::/32", "269398"}, + {"2a02:26f7:b901::/46", "20940"}, + {"2a07:10c0::/48", "203234"}, + {"2a09:4c2:2f::/48", "58133"}, + {"2a0e:fd40:be11::/29", "44103"}, + {"2804:2984:100::/40", "53184"}, + {"2806:2a0:28::/43", "28548"}, + {"2a03:1ac0:2e93::/33", "9049"}, + {"240e:982:d600::/40", "134756"}, + {"2605:8900:5000::/36", "3800"}, + {"2600:380:4180::/37", "20057"}, + {"2603:c010:c000::/36", "31898"}, + {"2607:f480:999::/48", "27435"}, + {"2806:2f0:2122::/48", "17072"}, + {"2a0e:9b42::/32", "213342"}, + {"2401:4900:4ca0::/44", "45609"}, + {"240a:a3b8::/32", "143602"}, + {"2801:80:36e0::/48", "269224"}, + {"2620:10a:8017::/44", "394354"}, + {"2800:be0:3e3::/45", "267848"}, + {"2804:4d84::/32", "268201"}, + {"2001:559:c155::/48", "33651"}, + {"2804:3dc:c2::/42", "52967"}, + {"2a0e:b800:aaaa::/48", "20473"}, + {"2001:579:5a94::/44", "22773"}, + {"240e:438:2c20::/43", "140647"}, + {"2a03:b980::/38", "56730"}, + {"2001:559:c442::/48", "7016"}, + {"2001:da8:225::/48", "24348"}, + {"2408:8256:328d::/43", "17623"}, + {"240a:0:100::/38", "9605"}, + {"2a0e:8f02:f03d::/48", "208223"}, + {"2001:559:80fc::/47", "33657"}, + {"2001:d30:3::/48", "4796"}, + {"2001:559:86cb::/48", "13367"}, + {"2001:559:c2a5::/48", "21508"}, + {"2409:8e00::/32", "56048"}, + {"2604:85c0:8::/47", "16524"}, + {"2a02:1c8:9::/48", "57128"}, + {"2a09:b600:5::/48", "61323"}, + {"240e:1f:1::/48", "58543"}, + {"2800:68::/44", "61468"}, + {"2804:19b0::/32", "61812"}, + {"2606:f900:7604::/46", "812"}, + {"2620:11:50::/47", "3486"}, + {"2804:6580::/32", "269495"}, + {"2a02:26f7:ce09::/42", "20940"}, + {"2001:559:827a::/48", "33651"}, + {"2001:4830:c101::/41", "27552"}, + {"240e:37b:aa00::/39", "140330"}, + {"2804:36f4:9000::/33", "266382"}, + {"2a02:2560:4::/40", "21127"}, + {"2001:4878:2204::/48", "12222"}, + {"2600:1400:2001::/36", "20940"}, + {"2800:bf0:b421::/48", "52257"}, + {"2001:550:1d06::/38", "174"}, + {"2401:4900:5388::/43", "45609"}, + {"2407:e700:12::/32", "132680"}, + {"2409:8959:c954::/38", "56040"}, + {"2803:f7e0:3000::/48", "271773"}, + {"2a03:240::/32", "25009"}, + {"2001:3c8:243::/48", "138685"}, + {"2800:bf0:814c::/48", "27947"}, + {"2001:67c:26c1::/46", "198478"}, + {"2409:8914:1300::/37", "56044"}, + {"2606:7d40:201::/48", "400042"}, + {"2804:7d44::/32", "271550"}, + {"2a10:cc46:100::/44", "58057"}, + {"240e:105:e800::/37", "4134"}, + {"2620:10f:b001::/48", "395700"}, + {"2804:3fd8::/39", "265919"}, + {"2804:6a08::/32", "270307"}, + {"2804:7758::/32", "271172"}, + {"2a07:3500:1a00::/48", "38915"}, + {"2001:559:37a::/48", "33651"}, + {"2001:678:b0::/46", "6736"}, + {"2610:a1:1002::/48", "397220"}, + {"2800:160:12d9::/45", "14259"}, + {"2806:2f0:33e1::/46", "17072"}, + {"2a00:1560:19::/35", "29684"}, + {"2a0d:da07::/32", "53755"}, + {"2a0e:fcc0::/29", "201963"}, + {"2a10:ee00::/32", "212401"}, + {"2c0f:2e00::/38", "328578"}, + {"2001:559:5e::/48", "33651"}, + {"2402:840:d000::/46", "63646"}, + {"2404:c6c0::/48", "135905"}, + {"2606:4700:110::/42", "13335"}, + {"2804:b0c:f003::/45", "52935"}, + {"2a02:26f7:d584::/48", "36183"}, + {"2a06:a004:3000::/33", "61138"}, + {"2a0f:2700:10::/48", "60781"}, + {"2401:d800:f350::/42", "7552"}, + {"240a:a445::/32", "143743"}, + {"2600:1488:a181::/38", "20940"}, + {"2804:7a44::/32", "271359"}, + {"2a00:1128::/32", "21069"}, + {"2a03::/32", "204094"}, + {"2001:4490:dbf0::/46", "9829"}, + {"240a:a1fd::/32", "143159"}, + {"2804:5730::/32", "268050"}, + {"2400:1000:8026::/33", "10021"}, + {"2403:9800:c071::/40", "4648"}, + {"240a:af3c::/32", "146550"}, + {"240e:104::/33", "4134"}, + {"240e:980:2f00::/40", "134760"}, + {"2a06:1e40::/29", "12941"}, + {"2001:1998:6f0::/44", "16787"}, + {"2600:1406:31::/48", "20940"}, + {"2800:bf0:a82b::/43", "52257"}, + {"2c0f:f030:8000::/33", "328137"}, + {"2408:8957:78c0::/39", "17816"}, + {"2607:fb90:c150::/48", "16509"}, + {"2a10:9040::/29", "212795"}, + {"240a:a0c8::/32", "142850"}, + {"240e:983:180a::/48", "133774"}, + {"2607:fb08:5::/32", "32703"}, + {"2620:130:5000::/44", "11714"}, + {"2804:240c::/32", "262289"}, + {"2a00:8a04::/44", "34414"}, + {"2a0d:c000::/29", "205345"}, + {"2c0e:2210::/21", "5713"}, + {"2001:559:82b7::/48", "21508"}, + {"2001:559:c05a::/48", "7016"}, + {"2400:cb00:aa20::/47", "13335"}, + {"240a:a7c3::/32", "144637"}, + {"2a02:26f7:ef80::/48", "36183"}, + {"2405:a6c0::/32", "58820"}, + {"2602:fd92:630::/45", "141011"}, + {"2605:a401:8177::/40", "33363"}, + {"2607:ac80::/40", "17"}, + {"2607:f108:e00::/35", "29838"}, + {"2a03:73a0::/29", "203368"}, + {"2408:8256:359d::/46", "17623"}, + {"2604:a00::/47", "19318"}, + {"2803:6604:c001::/37", "28075"}, + {"2804:4f18::/36", "268303"}, + {"2001:559:c498::/48", "7922"}, + {"2001:67c:18d0::/48", "60216"}, + {"2803:ba00:110::/37", "52286"}, + {"2804:4678::/32", "266991"}, + {"2804:4b94::/32", "267316"}, + {"2a02:27a8::/32", "15626"}, + {"2a0e:1cc0:9::/48", "207846"}, + {"2401:bf00::/32", "17530"}, + {"2804:cc8::/32", "52554"}, + {"2804:6320::/32", "269340"}, + {"2a01:7540::/32", "13097"}, + {"2001:559:84b3::/48", "33657"}, + {"2001:559:c48c::/47", "7922"}, + {"2400:e4c0::/32", "136093"}, + {"240a:a5ad::/32", "144103"}, + {"2804:14d:cc82::/45", "28573"}, + {"2804:22e4::/32", "264129"}, + {"2a02:26f7:50::/48", "36183"}, + {"2804:163c::/39", "263277"}, + {"2a04:5c80::/32", "201365"}, + {"2c0f:ea18::/32", "328519"}, + {"2001:67c:808::/48", "210945"}, + {"2408:8456:9e40::/34", "17816"}, + {"2806:1000:8001::/33", "8151"}, + {"2a02:13f0:8200::/48", "64398"}, + {"2a02:2e02:b50::/40", "12479"}, + {"2001:43d8::/32", "15022"}, + {"2402:800:59ee::/38", "7552"}, + {"2405:4000:800:8::/63", "38082"}, + {"2620:b0::/48", "16796"}, + {"2a03:e040:10::/48", "34879"}, + {"2001:43fe:c000::/48", "328913"}, + {"2401:d800:f752::/40", "7552"}, + {"2402:2b40:a000::/36", "55967"}, + {"2604:d600:1139::/41", "32098"}, + {"2001:df4:ba80::/48", "136306"}, + {"2402:800:52e0::/44", "7552"}, + {"2406:e300:5::/32", "45250"}, + {"2001:df4:ac80::/48", "141048"}, + {"2401:d800:b6b2::/39", "7552"}, + {"2600:370f:51a5::/43", "32261"}, + {"2a10:4b40::/29", "210107"}, + {"2001:1248:a452::/47", "11172"}, + {"2406:3003:207e::/47", "4657"}, + {"2a02:26f7:dc8d::/42", "20940"}, + {"2409:897b::/29", "9808"}, + {"2602:fe0b::/36", "23415"}, + {"2603:8079::/34", "33363"}, + {"2a00:bdc0:f000::/36", "47542"}, + {"2a03:8a00::/36", "13768"}, + {"2a04:b500::/32", "197540"}, + {"2a07:1cc0::/29", "48760"}, + {"2a0a:3c44::/32", "205415"}, + {"2001:43f8:d40::/48", "328998"}, + {"2403:1940:70::/48", "137935"}, + {"2408:8256:2c61::/40", "17623"}, + {"240a:a9f5::/32", "145199"}, + {"240a:ace8::/32", "145954"}, + {"2600:802:721::/36", "701"}, + {"2600:6c34:3e2::/48", "33588"}, + {"2800:160:16ea::/39", "14259"}, + {"2a06:bc0::/29", "213078"}, + {"2a0b:f1c0::/32", "198682"}, + {"2001:559:83::/48", "33652"}, + {"240a:a7e7::/32", "144673"}, + {"2600:9000:2346::/47", "16509"}, + {"2a04:5200::/41", "50113"}, + {"2001:67c:115c::/48", "31554"}, + {"2001:44b8:309c::/48", "4739"}, + {"240e:a50:5c00::/34", "134419"}, + {"2608:c185:1::/48", "6025"}, + {"2800:160:19de::/42", "14259"}, + {"2804:7ca0::/32", "271508"}, + {"2a02:26f7:cf8d::/46", "20940"}, + {"2a0c:9a44::/48", "34927"}, + {"2402:800:590f::/43", "7552"}, + {"2408:8256:3977::/44", "17623"}, + {"2409:8070:30ec::/47", "9808"}, + {"240e:107::/32", "4134"}, + {"2a00:e78:8000::/46", "47530"}, + {"2001:67c:2e18::/48", "50407"}, + {"2402:3a80:40::/46", "38266"}, + {"2804:790c::/32", "52602"}, + {"2a05:6e40::/29", "200552"}, + {"2400:1f00:b0::/44", "45769"}, + {"2600:40f1:1::/39", "701"}, + {"2605:f4c0::/32", "398717"}, + {"2a05:92c0::/29", "12859"}, + {"2606:6800:1000::/40", "394634"}, + {"2606:e480::/39", "55083"}, + {"2402:8100:20e1::/48", "45271"}, + {"2600:140b:c001::/36", "20940"}, + {"2604:d600:1036::/44", "32098"}, + {"2804:21bc:201::/32", "264570"}, + {"2804:60b8::/32", "269186"}, + {"2a00:8a84:1050::/34", "29119"}, + {"2408:8856:8100::/40", "134543"}, + {"2804:5984::/32", "268707"}, + {"2a00:fc20::/32", "200059"}, + {"2a02:2698:4c00::/42", "42682"}, + {"2a02:26f0:af00::/48", "34164"}, + {"2a04:7bc0::/29", "47232"}, + {"2a0e:46c3:202::/40", "208717"}, + {"2001:67c:2648::/48", "13030"}, + {"2402:b801:1900::/34", "18371"}, + {"2408:8001:3020::/41", "17816"}, + {"2804:141c::/32", "53130"}, + {"2804:7b8c::/32", "271438"}, + {"2a00:1eb8:c002::/47", "8764"}, + {"2001:49d0:8400::/38", "2496"}, + {"240a:a711::/32", "144459"}, + {"240e:45::/33", "17638"}, + {"2606:5dc0:e:c::/64", "395561"}, + {"2a01:47e0::/32", "49223"}, + {"2a02:26f0:97::/44", "20940"}, + {"2a04:62c2:1::/45", "47477"}, + {"2a07:4280::/29", "48147"}, + {"240a:a068::/32", "142754"}, + {"2a07:5480::/29", "203034"}, + {"2001:da8:e007::/48", "23910"}, + {"2001:dcd:1::/46", "397226"}, + {"2001:fd8:124::/46", "132199"}, + {"2606:5580:4000::/38", "63242"}, + {"2a10:f980::/29", "49801"}, + {"2001:df4:5100::/48", "18229"}, + {"2402:e280:106::/48", "134674"}, + {"240e:44d:6540::/42", "140348"}, + {"2804:2098::/32", "264500"}, + {"2804:2290::/32", "264108"}, + {"2a0a:9240::/32", "201543"}, + {"2a0e:46c4:2930::/48", "138435"}, + {"2001:678:d9c::/48", "3303"}, + {"2804:e0c:280::/48", "28176"}, + {"2a07:6800::/29", "203443"}, + {"2600:8802:8000::/29", "22773"}, + {"2620:101:900c::/47", "40934"}, + {"2803:d100:9500::/38", "52362"}, + {"2804:260::/32", "53214"}, + {"2804:30f8:b00::/40", "264984"}, + {"2804:5fcc::/32", "269124"}, + {"2a0e:b107:1070::/44", "211622"}, + {"2c0f:feb0::/31", "37100"}, + {"2001:510:207::/44", "376"}, + {"2001:648:2331::/37", "5408"}, + {"2001:67c:2e3c::/48", "57896"}, + {"2001:da8:b814::/44", "23910"}, + {"2001:fd8:f2c0::/42", "132199"}, + {"2408:8001:4000::/32", "4837"}, + {"2409:8915:2200::/39", "56044"}, + {"240a:a15f::/32", "143001"}, + {"240a:a485::/32", "143807"}, + {"2620:171:45::/46", "42"}, + {"2800:e00:4000::/34", "27665"}, + {"2a0c:93c0:8002::/48", "212465"}, + {"240e:14:6800::/37", "133774"}, + {"2605:340:cd02::/48", "396986"}, + {"2620:1e2::/36", "36502"}, + {"2801:14:8800::/48", "267896"}, + {"2804:77c::/37", "53222"}, + {"2804:12cc::/32", "263499"}, + {"2804:1f3c:4000::/35", "269679"}, + {"2001:da8:230::/48", "24349"}, + {"2001:df3:f280::/48", "140712"}, + {"2404:4a00:2:1::/48", "45629"}, + {"2803:6fa0:2::/48", "267790"}, + {"2804:840::/32", "262680"}, + {"2804:6904:4000::/34", "270243"}, + {"2408:84f3:9440::/38", "17816"}, + {"2409:8070:302b::/45", "9808"}, + {"2602:80c:1008::/48", "10796"}, + {"2800:160:206d::/43", "14259"}, + {"2804:42b0::/32", "267519"}, + {"2a0f:fb00::/29", "208178"}, + {"2001:da8:b80b::/45", "23910"}, + {"2400:1c00:64::/48", "45143"}, + {"2a0c:b641:6f0::/46", "210546"}, + {"2001:400:210:89::/55", "293"}, + {"2001:559:260::/48", "33659"}, + {"2600:6c38:364::/37", "20115"}, + {"2001:559:85f6::/48", "7725"}, + {"2804:4b0:588::/35", "262459"}, + {"2804:5800::/32", "52843"}, + {"2001:fb0:109f:8013::/61", "36040"}, + {"240e:44d:7c00::/42", "140345"}, + {"2600:140b:3401::/36", "20940"}, + {"2600:1fa0:6020::/44", "16509"}, + {"2001:1a11:ba::/47", "42298"}, + {"240e:107:c200::/34", "4134"}, + {"2804:1c9c::/32", "61665"}, + {"2804:8440::/32", "272249"}, + {"2a0a:6680:bee1::/48", "203500"}, + {"2001:559:8333::/48", "33287"}, + {"2403:40c0:4::/48", "45215"}, + {"2404:b300:133::/48", "131207"}, + {"2001:678:8f0::/48", "209619"}, + {"2405:1c0:6311::/45", "55303"}, + {"2804:16f8::/32", "263111"}, + {"2804:44e8:301::/32", "267660"}, + {"2a01:1000::/23", "5617"}, + {"2a06:6541:1201::/48", "8220"}, + {"2404:3fc0::/45", "32590"}, + {"240a:a73b::/32", "144501"}, + {"2605:d800::/32", "11067"}, + {"240e:44d:2340::/42", "140361"}, + {"2a02:26f7:a7::/48", "20940"}, + {"2001:44b8:30cb::/48", "4739"}, + {"2401:d800:be90::/42", "7552"}, + {"2605:2800:1201::/32", "6922"}, + {"2803:cae0:1::/48", "3816"}, + {"2a01:298::/40", "30880"}, + {"2a02:26f7:c64c::/48", "36183"}, + {"2a02:4540:5040::/46", "197207"}, + {"2a02:26f0:5401::/39", "20940"}, + {"2a0c:e642::/42", "211323"}, + {"2001:559:87d7::/48", "33287"}, + {"2001:1478:1101::/32", "3257"}, + {"2408:8256:357f::/48", "17816"}, + {"2607:fa00::/32", "30362"}, + {"2804:274::/32", "53217"}, + {"2a0a:eac0::/31", "31143"}, + {"2409:8008:d8::/48", "9808"}, + {"2602:801:c00a::/45", "397849"}, + {"2604:6400::/33", "29974"}, + {"2604:f880::/32", "62695"}, + {"2804:55e0::/32", "267962"}, + {"2a02:26f7:d0c0::/48", "36183"}, + {"2a03:f80:36::/48", "5483"}, + {"2600:6c39:51f::/38", "20115"}, + {"2806:2f0:9cc1::/46", "17072"}, + {"2a02:ac80:61::/43", "25145"}, + {"2a09:9c40::/29", "209148"}, + {"2001:cb0:209::/46", "4637"}, + {"2001:4ba0::/31", "24961"}, + {"2604:d600:155a::/45", "32098"}, + {"2001:579:4280::/36", "22773"}, + {"2804:22c0::/34", "264120"}, + {"2a02:c440::/29", "8399"}, + {"2402:800:7fb0::/41", "7552"}, + {"2803:b440::/32", "263785"}, + {"2a01:77c0:1180::/47", "34848"}, + {"2a02:26f7:ca88::/48", "36183"}, + {"2a11:4180::/29", "1239"}, + {"2001:da8:ab::/48", "24372"}, + {"2001:16a2:c3d0::/42", "39386"}, + {"2400:c400:a001::/31", "45570"}, + {"2404:bf40:a700::/48", "7545"}, + {"2600:2c00:f000::/36", "17378"}, + {"2a00:1850:6e1::/45", "29357"}, + {"2a0c:7780::/29", "21263"}, + {"2001:df1:9780::/48", "56150"}, + {"2409:8018::/34", "134810"}, + {"2a00:c6e0::/32", "12552"}, + {"2a04:4e40:f000::/48", "54113"}, + {"2a06:6c0::/46", "200738"}, + {"2001:559:c467::/44", "7922"}, + {"2600:140f:6800::/48", "9498"}, + {"2a02:26f0:b501::/38", "20940"}, + {"2a02:26f7:cd01::/46", "20940"}, + {"2a05:db80::/29", "41071"}, + {"2a05:edc0::/29", "58314"}, + {"2001:448a:6070::/40", "7713"}, + {"2402:800:f320::/41", "7552"}, + {"2408:80f1:230::/44", "17621"}, + {"2408:8957:e800::/40", "17622"}, + {"2605:b0c0::/32", "11282"}, + {"2a01:8280:3330::/48", "202818"}, + {"2a03:2880:f102::/44", "32934"}, + {"240a:a66e::/32", "144296"}, + {"2a00:5881:6000::/40", "199396"}, + {"2a0f:7b81::/48", "9009"}, + {"2001:67c:22b0::/48", "42564"}, + {"2001:4490:d970::/46", "9829"}, + {"2607:5c80::/32", "14713"}, + {"2804:14c:5b00::/40", "28573"}, + {"2001:c20:7807::/38", "3758"}, + {"2001:ec0:5300::/40", "131293"}, + {"2404:f4c0:6666::/48", "7721"}, + {"240a:abce::/32", "145672"}, + {"2804:18:1820::/41", "26599"}, + {"2804:7880::/32", "271247"}, + {"2a02:26f7:d844::/48", "36183"}, + {"2404:bf00:800::/40", "9303"}, + {"240a:aa90::/32", "145354"}, + {"2600:c10::/32", "19024"}, + {"2800:160:1c53::/45", "14259"}, + {"2804:4764::/32", "267051"}, + {"2a02:45c0:6::/48", "8881"}, + {"2a06:a900::/29", "213358"}, + {"2c0f:ffc8:6004::/32", "22355"}, + {"2001:559:146::/48", "33491"}, + {"2804:5a0c::/32", "268742"}, + {"2a00:edc0:1010::/48", "62597"}, + {"2a03:6080::/45", "16285"}, + {"2001:559:788::/48", "21508"}, + {"2001:1248:a55a::/45", "11172"}, + {"240a:a6ca::/32", "144388"}, + {"2001:4998:efe6::/48", "26085"}, + {"2405:205:9000::/33", "55836"}, + {"2409:8020:61::/43", "56046"}, + {"240a:a76b::/32", "144549"}, + {"2804:214:c009::/34", "26615"}, + {"2804:44c4::/32", "267652"}, + {"2001:559:8116::/47", "7922"}, + {"2001:eb0:104::/32", "9584"}, + {"240e:3b3:ac00::/35", "4134"}, + {"2803:6410::/32", "271855"}, + {"2a03:a080::/32", "198145"}, + {"2602:103:c000::/29", "20115"}, + {"2804:3d4c::/32", "266266"}, + {"2001:559:856f::/48", "33652"}, + {"2403:1cc0:2000::/48", "45352"}, + {"2604:5dc0::/32", "21788"}, + {"2804:33fc::/32", "265429"}, + {"2806:230:fff4::/44", "265594"}, + {"2a01:6e0::/32", "12976"}, + {"2a04:9444::/30", "25584"}, + {"2a0c:b641:510::/48", "209586"}, + {"2a0e:800:fff0::/48", "208328"}, + {"2001:559:8500::/48", "33490"}, + {"2a05:7380::/29", "201283"}, + {"2001:559:40e::/43", "33659"}, + {"2409:8c2f::/34", "56041"}, + {"2600:1003:9450::/36", "22394"}, + {"2600:1010:e010::/36", "22394"}, + {"2a06:e881:2000::/44", "206313"}, + {"2a11:df80::/29", "204790"}, + {"2a12:5780::/29", "204790"}, + {"2001:67c:2c3c::/48", "29226"}, + {"2409:896a:2400::/39", "9808"}, + {"240e:968:3000::/30", "4134"}, + {"2001:470:13a::/45", "6939"}, + {"2806:2f0:9ba3::/41", "17072"}, + {"2a05:7100::/29", "42673"}, + {"2804:21a4:3800::/32", "53190"}, + {"2a12:a640::/29", "400522"}, + {"2001:559:2d8::/47", "7922"}, + {"2409:8087:5803::/37", "9808"}, + {"2620:3a:4000::/44", "36711"}, + {"2806:20d:540b::/39", "32098"}, + {"2a02:26f7:dd48::/48", "36183"}, + {"2a0d:3000::/30", "205544"}, + {"2001:1838::/35", "23352"}, + {"2804:90c:102::/45", "262617"}, + {"2a04:2b00:14ee::/48", "212391"}, + {"2409:8051:1100::/37", "9808"}, + {"2804:4b18::/32", "267283"}, + {"2a01:5ec0:b000::/36", "44244"}, + {"2a03:b700::/32", "51269"}, + {"2402:800:38e0::/44", "7552"}, + {"2402:800:9c01::/43", "7552"}, + {"2405:7f00:92a0::/39", "133414"}, + {"2408:8256:b98::/37", "17622"}, + {"2604:6840:ff::/48", "20446"}, + {"2804:48fc::/32", "267157"}, + {"2a0b:ffc0::/40", "207013"}, + {"240a:a23b::/32", "143221"}, + {"2806:2f0:81a1::/46", "17072"}, + {"2806:322:2100::/37", "28546"}, + {"2a02:26f7:c0c8::/48", "36183"}, + {"2404:8d00::/35", "24378"}, + {"2804:14c:65e1::/45", "28573"}, + {"2001:253:130::/48", "142096"}, + {"2001:67c:2110::/48", "28734"}, + {"2403:3a40::/32", "55933"}, + {"2806:250:6::/47", "28554"}, + {"2a05:e40:1400::/34", "59909"}, + {"2001:df7:480::/48", "138754"}, + {"2400:cb00:a430::/45", "13335"}, + {"2402:e380:303::/48", "134496"}, + {"2804:1e0::/32", "262784"}, + {"2a02:800::/32", "9119"}, + {"2a03:2880:f265::/46", "32934"}, + {"2605:4c40:105::/43", "30081"}, + {"2a02:20b2::/32", "16278"}, + {"2801:0:4c0::/48", "266736"}, + {"2801:1f0:4050::/32", "3573"}, + {"2806:370:2150::/44", "28403"}, + {"2001:67c:27ec::/48", "50304"}, + {"2401:5ac0::/32", "131923"}, + {"2402:9e80::/47", "7489"}, + {"240a:a145::/32", "142975"}, + {"240e:3b7:dc00::/34", "4134"}, + {"2001:2022::/27", "1299"}, + {"2606:2800:41f::/42", "15133"}, + {"2804:854:a::/47", "61832"}, + {"2804:3a90::/32", "266096"}, + {"2a02:26f0:f501::/38", "20940"}, + {"2a06:7ec0::/29", "201011"}, + {"2a0f:2fc0::/32", "203115"}, + {"2a0b:8380::/29", "60580"}, + {"2a0b:cbc1::/29", "200780"}, + {"2401:ee00:2100::/32", "23951"}, + {"2803:5440:4038::/48", "264738"}, + {"2804:5ac4::/43", "268795"}, + {"2a01:ce80::/34", "51964"}, + {"2001:678:5dc::/48", "204675"}, + {"2406:3003:1000::/43", "55430"}, + {"240a:af17::/32", "146513"}, + {"2600:1003:f110::/37", "22394"}, + {"2600:1409:b000::/48", "35994"}, + {"2600:1480:e000::/40", "33905"}, + {"2804:4e70::/32", "268261"}, + {"2001:1b70:82ad::/46", "158"}, + {"240e:924::/36", "132147"}, + {"2620:f:8000::/48", "27500"}, + {"2804:7b00::/32", "271405"}, + {"2a02:26f7:ee80::/48", "36183"}, + {"2602:feda:be0::/48", "38173"}, + {"2a02:26f7:ea48::/48", "36183"}, + {"2a04:92c7:fa11::/37", "62240"}, + {"2001:678:55c::/48", "12552"}, + {"2401:b0c0:1011::/36", "136941"}, + {"2620:2e:40c0::/48", "394506"}, + {"2a02:26f7:e400::/48", "36183"}, + {"2a0b:4340:c0::/48", "44421"}, + {"2a0c:1140::/29", "48611"}, + {"240a:a904::/32", "144958"}, + {"240e:e4::/31", "4134"}, + {"2804:76c4::/32", "271133"}, + {"2a00:ee8::/32", "43503"}, + {"2a00:bbe0::/29", "60414"}, + {"2a02:26f0:c701::/36", "20940"}, + {"2a02:26f7:ca04::/48", "36183"}, + {"2a02:26f7:df08::/48", "36183"}, + {"2a07:4843::/48", "64245"}, + {"2001:579:9042::/44", "22773"}, + {"2400:cb00:326::/48", "13335"}, + {"240a:ae0a::/32", "146244"}, + {"2404:c0:9400::/36", "23693"}, + {"2408:8956:9100::/40", "17816"}, + {"2409:8b02::/32", "38019"}, + {"2604:5000::/35", "7752"}, + {"2803:3f80::/38", "263739"}, + {"2803:4220::/32", "27843"}, + {"2804:5a14::/32", "268747"}, + {"2a0e:46c4:101::/48", "137490"}, + {"2806:2f0:2060::/48", "17072"}, + {"2a02:26f7:c08c::/48", "36183"}, + {"2a06:6541:2001::/48", "46887"}, + {"2a0d:77c7:792d::/32", "7489"}, + {"2001:559:13a::/48", "7016"}, + {"2408:84f3:f660::/40", "17623"}, + {"2a0b:7040::/29", "208819"}, + {"2402:800:959b::/42", "7552"}, + {"2409:8050:900::/37", "9808"}, + {"2a02:2b80:393::/48", "45012"}, + {"2404:f340::/34", "139070"}, + {"2408:84f3:3040::/44", "17623"}, + {"240e:16:b800::/33", "4134"}, + {"2a02:7e80::/32", "20655"}, + {"2a0f:c100::/29", "56485"}, + {"2c0f:f7a8:9010::/47", "4809"}, + {"2c0f:f8f0::/32", "30969"}, + {"240e:44d:6d00::/42", "140345"}, + {"2604:5e40::/32", "16409"}, + {"2804:4b4c:400::/32", "267296"}, + {"2001:559:30a::/48", "7922"}, + {"2001:559:c32f::/48", "33659"}, + {"2607:6200::/32", "21817"}, + {"2804:3b84::/32", "266154"}, + {"2a07:2f00:1337::/48", "12502"}, + {"2605:1c00:50f0::/44", "16787"}, + {"2800:484:b00::/40", "14080"}, + {"2804:71c::/32", "53080"}, + {"2a0e:e580::/29", "204394"}, + {"2001:4840::/32", "7029"}, + {"2607:f3a0:a00b::/33", "23342"}, + {"2800:bf0:3460::/46", "52257"}, + {"2804:7c0::/32", "262316"}, + {"2a02:250:ffff::/48", "39570"}, + {"2a03:2880:f046::/44", "32934"}, + {"240a:a10b::/32", "142917"}, + {"240a:add4::/32", "146190"}, + {"2803:cae0:8020::/48", "3549"}, + {"2a02:26f7:c484::/48", "36183"}, + {"2a11:6880::/29", "204790"}, + {"2001:579:c0dc::/46", "22773"}, + {"2604:b300:ad03::/48", "394896"}, + {"2620:2d:4000::/46", "41231"}, + {"2a06:bdc0::/35", "62240"}, + {"2a0d:5600:33::/48", "63473"}, + {"2001:4350::/35", "2609"}, + {"2403:600:b001::/48", "7641"}, + {"2001:4c8:1069::/40", "15290"}, + {"2408:840c::/40", "17621"}, + {"240e:44d:7e00::/41", "140345"}, + {"2600:6c38:8b9::/41", "20115"}, + {"2806:230:6024::/48", "265594"}, + {"2a01:c910::/28", "3215"}, + {"2a0e:6440::/32", "208501"}, + {"2605:cd00::/32", "53907"}, + {"2a02:88d:4020::/44", "48695"}, + {"240a:a09b::/32", "142805"}, + {"240a:a2a6::/32", "143328"}, + {"240a:ae30::/32", "146282"}, + {"2605:a000:c0f::/35", "10796"}, + {"2804:2368::/32", "264160"}, + {"2c0f:f800::/28", "37053"}, + {"2600:141b:e801::/35", "20940"}, + {"2801:1ec::/42", "19429"}, + {"2a00:1108::/32", "8771"}, + {"2a07:b00::/29", "29468"}, + {"2400:ee80::/34", "45177"}, + {"2402:800:9671::/40", "7552"}, + {"2804:6b58::/32", "270394"}, + {"2001:559:c243::/48", "7922"}, + {"2404:8d06:8100::/36", "10089"}, + {"2001:559:83d8::/48", "33661"}, + {"240a:a532::/32", "143980"}, + {"2607:6100:1003::/48", "54380"}, + {"2804:7934::/34", "271291"}, + {"2a0a:ab40::/47", "205988"}, + {"2408:820c:6840::/32", "17621"}, + {"240e:6:d021::/39", "4134"}, + {"2a00:1b18::/32", "47527"}, + {"2a0b:7fc0::/29", "43668"}, + {"2a0e::/26", "31549"}, + {"2001:67c:25a0::/48", "41954"}, + {"2600:100b:9010::/39", "6167"}, + {"2606:4280:4000::/36", "16696"}, + {"2804:259c::/32", "52772"}, + {"2c0f:fc89:12f::/33", "36992"}, + {"2400:580:9::/48", "4766"}, + {"2801:80:1230::/48", "264347"}, + {"2a05:d03a:e000::/40", "16509"}, + {"2001:579:d124::/41", "22773"}, + {"240e:44d:5e80::/41", "4134"}, + {"2800:160:1c06::/44", "14259"}, + {"2a0b:3900::/31", "58310"}, + {"2a11:6f00::/29", "20592"}, + {"2001:250:700a::/45", "24370"}, + {"2001:4878:2261::/48", "12222"}, + {"2400:df40::/32", "18042"}, + {"240a:a545::/32", "143999"}, + {"2801:0:80::/48", "262148"}, + {"2804:2b4c::/32", "262960"}, + {"2a01:8160::/32", "44454"}, + {"2409:8028:3004::/47", "56041"}, + {"2620:149:522::/43", "714"}, + {"2a02:350::/29", "16246"}, + {"2a06:1280:ce05::/48", "204136"}, + {"2a0b:f4c0:400::/48", "205100"}, + {"2001:590:1006::/48", "20940"}, + {"2001:df6:4900::/48", "139195"}, + {"2806:250:8::/47", "28545"}, + {"2001:559:87a0::/48", "33650"}, + {"2001:df6:5080::/48", "137655"}, + {"2001:fd8:2138::/41", "4775"}, + {"2001:1b70:8600::/48", "395592"}, + {"2402:3a80:c041::/48", "38266"}, + {"2405:9800:c700::/47", "45458"}, + {"2a0f:1e40::/32", "58055"}, + {"2001:559:3b6::/48", "33659"}, + {"2a01:8840:fb::/48", "207266"}, + {"2c0f:3a00::/32", "328835"}, + {"2401:d900::/32", "10003"}, + {"2406:4440::/44", "38008"}, + {"240a:a9fb::/32", "145205"}, + {"240e:438:3640::/36", "4134"}, + {"240e:44d:2d00::/42", "140345"}, + {"2a0c:be00::/32", "209846"}, + {"2a0d:c00::/29", "29632"}, + {"2a02:26f7:e845::/46", "20940"}, + {"2610:20:500a::/48", "5744"}, + {"2803:3b60::/32", "269811"}, + {"2804:640:3e96::/32", "262713"}, + {"2a00:17a8::/32", "8478"}, + {"2001:df5:ac80::/48", "140768"}, + {"2408:8956:8400::/40", "17622"}, + {"2600:6c7f:9150::/44", "20115"}, + {"2804:e00:a000::/33", "11419"}, + {"2804:6838::/32", "269677"}, + {"2001:500:16::/42", "12041"}, + {"240a:ab4c::/32", "145542"}, + {"2600:140f:d800::/48", "55836"}, + {"2600:e009::/32", "22995"}, + {"2803:d100:ee80::/42", "52362"}, + {"2001:559:79a::/48", "33490"}, + {"2a00:e6c0::/32", "198385"}, + {"2a06:4101::/32", "394094"}, + {"2001:250:e03::/48", "23910"}, + {"2602:ffc5:cb0::/44", "395839"}, + {"2605:c4c0::/32", "398338"}, + {"2a04:11c0::/29", "48252"}, + {"2a0c:9a40:81fb::/48", "213253"}, + {"240a:a37c::/32", "143542"}, + {"2620:11d:9002:600::/56", "14805"}, + {"2405:9800:bc00::/40", "133481"}, + {"2408:8957:1600::/40", "17622"}, + {"2409:804c:31::/36", "9808"}, + {"240a:ab5c::/32", "145558"}, + {"2a02:26f7:d089::/42", "20940"}, + {"2620:a1::/48", "19285"}, + {"2400:7500::/32", "45325"}, + {"2402:ef34::/32", "7633"}, + {"2600:1012:a000::/43", "6167"}, + {"2620:171:6e::/43", "715"}, + {"2404:bfc0::/32", "135859"}, + {"2600:1409:7001::/36", "20940"}, + {"2804:18:900::/35", "26599"}, + {"2804:1c54::/32", "61650"}, + {"2a01:5ec0:d000::/34", "44244"}, + {"2a0a:16c0::/32", "48464"}, + {"2a0e:b107:c96::/48", "140938"}, + {"2402:ad80::/48", "59257"}, + {"240a:af80::/32", "146618"}, + {"2a0c:5900::/29", "202120"}, + {"2001:418:1401:1d::/58", "2914"}, + {"2402:6940:307::/37", "7645"}, + {"240a:a8b1::/32", "144875"}, + {"240a:a8d9::/32", "144915"}, + {"2600:1008:b140::/42", "6167"}, + {"2a01:8840:be::/41", "12041"}, + {"2a02:ac80:51::/42", "25145"}, + {"2001:559:23d::/48", "7922"}, + {"2001:4490:dfa8::/46", "9829"}, + {"240a:afc3::/32", "146685"}, + {"2804:c44::/32", "52917"}, + {"2804:69d4::/32", "270294"}, + {"2a01:a740::/32", "61157"}, + {"2a0e:2980::/48", "34568"}, + {"2001:978:8802::/39", "174"}, + {"2001:1248:596d::/46", "11172"}, + {"2001:57a:104::/40", "22773"}, + {"2804:224::/32", "262792"}, + {"2a07:7b00::/29", "60960"}, + {"2001:250:80d::/46", "138182"}, + {"2401:de00::/32", "7497"}, + {"2607:fb10:2042::/48", "55095"}, + {"2001:559:4e1::/48", "20214"}, + {"2001:1a40::/44", "5416"}, + {"2405:9800:b01a::/48", "45430"}, + {"2607:d500:300::/47", "13768"}, + {"2a01:488:bb0e::/48", "397513"}, + {"2605:dd40:1000::/33", "398549"}, + {"2a03:7580:4000::/40", "34530"}, + {"2001:ee0:400::/35", "45899"}, + {"2406:840:300::/48", "139317"}, + {"240a:aa53::/32", "145293"}, + {"2620:a9:8008::/45", "62872"}, + {"2620:101:1000::/42", "589"}, + {"2804:8:6::/33", "14840"}, + {"2a0a:340:1a00::/40", "56807"}, + {"2a0e:b107:3f8::/45", "57883"}, + {"2001:559:c1c3::/48", "7922"}, + {"2401:d800:b460::/40", "7552"}, + {"2a07:5200::/48", "213208"}, + {"2a0b:c700::/29", "204403"}, + {"2a0c:b641:5e0::/44", "212912"}, + {"2a0e:3dc0::/32", "49981"}, + {"2404:63c0:40::/44", "131645"}, + {"2a0b:d2c0::/29", "205452"}, + {"2a0e:3840:801::/48", "40676"}, + {"2a0e:8f02:f018::/48", "212057"}, + {"2409:8053:800::/40", "56047"}, + {"2600:1000:a120::/36", "22394"}, + {"2610:120:aab::/32", "33606"}, + {"2803:1ec0::/32", "265671"}, + {"2a02:26f7:ce40::/48", "36183"}, + {"2001:1280:2000::/36", "16685"}, + {"240a:a95f::/32", "145049"}, + {"2600:80d::/44", "6984"}, + {"2804:4260::/32", "267496"}, + {"2a0b:e880::/29", "205614"}, + {"240a:a490::/32", "143818"}, + {"2a03:ebc0:1000::/36", "31400"}, + {"2001:410:a002::/43", "8111"}, + {"2404:de80:400::/40", "137443"}, + {"240a:a24e::/32", "143240"}, + {"2600:1014:a110::/36", "22394"}, + {"2600:6c2e:c81::/39", "20115"}, + {"2602:feda:bf0::/44", "139328"}, + {"2803:d100:9780::/43", "52362"}, + {"2804:1094:c000::/34", "263641"}, + {"2804:27e0::/32", "262817"}, + {"2001:44b8:14::/46", "4739"}, + {"2620:1f:8004::/48", "10908"}, + {"2804:4004::/32", "265928"}, + {"2001:559:c0d0::/47", "20214"}, + {"2806:2f0:2103::/43", "22884"}, + {"2a00:d0c0::/39", "58010"}, + {"2001:67c:23b8::/48", "5524"}, + {"2408:8456:9810::/42", "134543"}, + {"2409:896d:5708::/27", "9808"}, + {"240e:bf:b8f4::/46", "138513"}, + {"2600:6c10:c2b::/43", "20115"}, + {"2600:6c3a:824::/43", "20115"}, + {"2600:6c38:104::/47", "20115"}, + {"2804:2674:a::/48", "264344"}, + {"2804:5b1c::/32", "268819"}, + {"2a02:4840::/46", "52048"}, + {"2a07:9944:1a::/48", "8100"}, + {"2605:1c00:1ff0::/44", "16787"}, + {"2804:4098::/34", "265969"}, + {"2a02:26f7:111::/48", "20940"}, + {"2a02:26f7:f6c0::/48", "36183"}, + {"2001:559:782::/45", "7015"}, + {"2406:840:5860::/47", "139317"}, + {"2409:8958:cc54::/39", "56040"}, + {"2600:6c38:a96::/44", "20115"}, + {"2603:c001:2410::/38", "31898"}, + {"2804:2abc::/32", "264091"}, + {"2a00:55a0:f000::/40", "9009"}, + {"2a02:26f7:b680::/48", "36183"}, + {"2804:d90::/32", "52639"}, + {"2001:559:c199::/48", "7015"}, + {"2804:cb0:b000::/33", "52742"}, + {"2804:3e04::/35", "266568"}, + {"2a0e:97c3:4c2::/48", "20473"}, + {"2a0e:b107:1408::/48", "208548"}, + {"2401:7400:8888:12::/33", "4773"}, + {"2409:802f:290b::/48", "9808"}, + {"2605:ea80::/32", "32709"}, + {"2a00:1bd8::/32", "8315"}, + {"2a05:1c47::/32", "201594"}, + {"240e:45c:cc00::/31", "131285"}, + {"2a02:26f7:e200::/48", "36183"}, + {"2a02:2e02:8ca0::/41", "12479"}, + {"2001:559:86b8::/47", "7922"}, + {"2408:840c:ba00::/40", "17621"}, + {"2408:8456:6000::/42", "17622"}, + {"2803:9800:5200::/34", "11664"}, + {"2804:2108::/32", "264528"}, + {"2a09:87c0:ffff::/48", "59497"}, + {"2001:559:803c::/48", "33491"}, + {"2401:d800:2b90::/42", "7552"}, + {"240a:a5b2::/32", "144108"}, + {"240a:ae67::/32", "146337"}, + {"2a01:68c0::/32", "35168"}, + {"2a02:26f7:bf05::/46", "20940"}, + {"2a05:1c0::/29", "201508"}, + {"2001:559:8331::/48", "33657"}, + {"2001:67c:2d88::/48", "3320"}, + {"2a00:9d80::/32", "28876"}, + {"2a09:1740::/29", "25582"}, + {"2001:df6:3e80::/48", "141993"}, + {"2600:900::/28", "7896"}, + {"2804:bb4:201::/32", "52812"}, + {"2a02:26f0:5701::/36", "20940"}, + {"2a02:26f7:e9c9::/46", "20940"}, + {"2a0c:b641:7af::/48", "207268"}, + {"2001:1378::/32", "52250"}, + {"2405:2300:ff46::/42", "13443"}, + {"2804:67f4::/32", "269661"}, + {"2a09:4c0:b01::/37", "58057"}, + {"240e:44d:3b80::/41", "4134"}, + {"240a:a2f0::/32", "143402"}, + {"2606:1980:104::/48", "54994"}, + {"2804:14c:4395::/41", "28573"}, + {"2804:9d0::/32", "262995"}, + {"2a03:efc0:1300::/40", "33438"}, + {"2a0b:4341:2e00::/48", "35487"}, + {"2001:559:7a5::/48", "7016"}, + {"2001:559:c388::/48", "33657"}, + {"2a0e:a3c0::/29", "33770"}, + {"2605:4c40:101::/45", "30081"}, + {"2804:6f8c::/32", "270668"}, + {"2a09:6880::/29", "56814"}, + {"2408:8256:3560::/44", "17623"}, + {"240c:c019::/26", "23910"}, + {"240e:3b4:8200::/35", "140316"}, + {"2620:146:d::/48", "16500"}, + {"2a02:7980::/39", "43937"}, + {"2a0c:4840::/29", "204296"}, + {"2001:c20:c83a::/45", "3758"}, + {"2001:4878:a031::/48", "12222"}, + {"2402:800:9301::/44", "7552"}, + {"2402:c800:caff::/34", "38639"}, + {"2a0d:2587::/34", "142553"}, + {"2603:c026:4000::/35", "31898"}, + {"2804:8214::/32", "272497"}, + {"2001:400:2411::/33", "293"}, + {"2409:8904:39a0::/38", "24547"}, + {"2409:8c50:402::/36", "56047"}, + {"2803:71e0::/32", "270007"}, + {"2803:c880::/32", "398712"}, + {"2a0d:82c7:1000::/48", "47787"}, + {"2a0e:eec6::/32", "398343"}, + {"2001:480:32::/47", "668"}, + {"2001:559:478::/48", "20214"}, + {"2409:8050:2::/40", "56047"}, + {"2800:9a7:3070::/32", "14522"}, + {"2001:559:c13b::/45", "7922"}, + {"2a01:8140::/32", "42331"}, + {"2404:2080::/32", "131270"}, + {"2409:8a0c::/30", "56042"}, + {"240a:a9b1::/32", "145131"}, + {"2801:1a2:6::/48", "269845"}, + {"2001:250:5872::/48", "23910"}, + {"2001:559:35d::/48", "33287"}, + {"2001:559:86d4::/48", "7015"}, + {"2804:6f0c::/32", "270635"}, + {"2a06:78c0:db::/48", "210079"}, + {"2a0a:2303::/32", "202572"}, + {"2a0b:d40::/29", "59437"}, + {"2400:3c00:2::/32", "38258"}, + {"2408:8459:610::/41", "17622"}, + {"2600:1003:b000::/41", "6167"}, + {"2800:bf0:1ce::/43", "27947"}, + {"2803:810:2021::/48", "271822"}, + {"2a00:10d0::/32", "5588"}, + {"2a01:c50f:d0c0::/39", "12479"}, + {"2a02:26f7:82::/48", "36183"}, + {"2a02:e980:117::/42", "19551"}, + {"2a03:2880:f13b::/45", "32934"}, + {"2400:a980:900::/37", "133111"}, + {"2403:df40:118::/32", "14630"}, + {"2607:fdf0:5e42::/43", "8008"}, + {"2800:bf0:79::/45", "27947"}, + {"2804:46ec:3400::/32", "267020"}, + {"2804:85c0::/34", "272598"}, + {"2a07:440::/30", "49532"}, + {"240a:adca::/32", "146180"}, + {"2600:2800::/30", "13490"}, + {"2804:2a10::/32", "264054"}, + {"2806:260:1015::/44", "13999"}, + {"2001:978:3c03::/45", "174"}, + {"2001:4878:8158::/48", "12222"}, + {"2404:7f40:ffff::/48", "138645"}, + {"2409:8904:37a0::/36", "24547"}, + {"240a:a360::/32", "143514"}, + {"2600:6400::/28", "14371"}, + {"2801:80:bf0::/48", "61867"}, + {"2806:2f0:70a3::/41", "17072"}, + {"2a00:1c18::/38", "31463"}, + {"2a01:d8::/45", "5537"}, + {"2a01:581:9::/45", "9136"}, + {"2a0b:1300::/34", "198018"}, + {"2402:800:57b7::/41", "7552"}, + {"2804:53c0::/32", "268604"}, + {"2a02:2698:800::/38", "57044"}, + {"2a0d:f480::/29", "57933"}, + {"2403:71c0::/48", "43959"}, + {"2800:4b0:880d::/46", "12252"}, + {"2a0c:32c0::/48", "61183"}, + {"2406:c80::/32", "132092"}, + {"2804:565c::/32", "267993"}, + {"2806:2f0:4083::/42", "17072"}, + {"2001:559:8462::/48", "33661"}, + {"2408:8256:3960::/44", "17623"}, + {"2600:1417:64::/47", "20940"}, + {"2605:6480::/32", "92"}, + {"2607:6b80:5e::/48", "133480"}, + {"2806:2fb::/32", "265547"}, + {"240a:a2f6::/32", "143408"}, + {"240e:3b7:9c00::/34", "140310"}, + {"2600:6c38:e6::/44", "20115"}, + {"2803:4e80::/32", "263232"}, + {"2a03:e140:f::/48", "42608"}, + {"2a06:a001:a0b2::/48", "210260"}, + {"2a09:a4c3::/29", "208861"}, + {"2a0b:8e00::/47", "1921"}, + {"2604:d600:110f::/43", "32098"}, + {"240e:5a:7000::/29", "4134"}, + {"2607:f450::/32", "19170"}, + {"2800:190:101::/44", "11664"}, + {"2804:4d3c:a48::/35", "267420"}, + {"2a01:8840:3d::/48", "207266"}, + {"2a02:26f7:d64d::/46", "20940"}, + {"240a:a90a::/32", "144964"}, + {"2804:60d4:4100::/34", "269194"}, + {"2a02:26f7:f9c4::/48", "36183"}, + {"2800:68:dc1::/35", "61468"}, + {"2804:2e4:ffaf::/41", "53234"}, + {"2a00:8da0::/32", "6696"}, + {"2001:559:9c::/46", "33651"}, + {"240e:40:d::/43", "4134"}, + {"2a02:46e0:1dd::/32", "60049"}, + {"2401:d800:9200::/42", "7552"}, + {"2607:fb10:70f0::/44", "55095"}, + {"2804:5154::/40", "268445"}, + {"2a00:d3c0::/32", "204165"}, + {"240e:397:1b00::/37", "140494"}, + {"2a04:4e40:bef0::/48", "54113"}, + {"240a:a8c5::/32", "144895"}, + {"2607:f170:180::/32", "6364"}, + {"2804:7224::/32", "270835"}, + {"2400:1680::/32", "58895"}, + {"240a:a2fd::/32", "143415"}, + {"2602:fed2:7034::/48", "62997"}, + {"2602:ffe4:c05::/46", "21859"}, + {"2a01:4ce0::/41", "19624"}, + {"2a0f:9100::/32", "212906"}, + {"2001:559:c2c3::/48", "7015"}, + {"2001:44c8:43e0::/37", "131445"}, + {"2001:4930:4000::/32", "19530"}, + {"2402:800:a000::/35", "7552"}, + {"2402:8100:30b0::/41", "55644"}, + {"240a:a83f::/32", "144761"}, + {"2804:1dd4::/32", "264397"}, + {"2a02:26f7:c901::/46", "20940"}, + {"2600:6c3a:831::/46", "20115"}, + {"2801:19:c800::/48", "64050"}, + {"2804:279c:d000::/34", "263913"}, + {"2804:2c58:1310::/32", "265211"}, + {"2a00:1288:80::/48", "203220"}, + {"2602:fefa::/32", "64267"}, + {"2603:90be::/32", "12271"}, + {"2607:f098:1100::/34", "33363"}, + {"2801:181::/48", "271954"}, + {"2804:69e8::/32", "270299"}, + {"2a02:5c80::/32", "5602"}, + {"2001:da8:e008::/43", "24367"}, + {"2a03:5f80:8::/46", "50952"}, + {"2408:8957:3d00::/40", "17816"}, + {"240a:a53f::/32", "143993"}, + {"2804:2658:800::/32", "264328"}, + {"2405:e400::/32", "9268"}, + {"2800:160:1c0f::/43", "14259"}, + {"2804:67a4:11a::/42", "269641"}, + {"2a0a:ed40::/29", "8881"}, + {"2001:503:d414::/48", "397197"}, + {"2001:1248:5969::/45", "11172"}, + {"2408:8256:3c80::/48", "17816"}, + {"2a0c:b641:73b::/45", "207338"}, + {"240e:3b7:2c00::/35", "134774"}, + {"2620:130:3011::/46", "62861"}, + {"2001:c20:48c3::/48", "3758"}, + {"2800:160:1936::/47", "14259"}, + {"2804:4f1c::/32", "268304"}, + {"2804:78b8::/32", "271261"}, + {"240e:44d:a00::/41", "140345"}, + {"2001:559:201::/48", "33660"}, + {"2401:af40::/32", "41690"}, + {"2606:5640::/32", "399673"}, + {"2a03:a1a0::/32", "201004"}, + {"2001:e48:48::/40", "9583"}, + {"2001:44b8:4053::/48", "4739"}, + {"240a:a3ba::/32", "143604"}, + {"2600:141d:3::/32", "20940"}, + {"2804:4a24:69::/48", "267221"}, + {"2a01:578:14::/32", "16509"}, + {"2a02:1c8:40::/44", "60095"}, + {"2a04:240::/29", "3222"}, + {"2001:738::/46", "1955"}, + {"2001:b80::/29", "12767"}, + {"2001:1260:500::/32", "13591"}, + {"2404:a700::/32", "33182"}, + {"2604:d600:1065::/43", "32098"}, + {"2804:3064::/32", "264948"}, + {"2001:559:8514::/48", "33491"}, + {"2001:678:1c::/48", "35052"}, + {"2001:49d0:1c0::/32", "2495"}, + {"2401:4900:5600::/42", "45609"}, + {"2405:6600:c44::/32", "45845"}, + {"240a:a2b1::/32", "143339"}, + {"2804:14d:c800::/40", "28573"}, + {"2a02:7100::/32", "12942"}, + {"2001:559:80e3::/48", "33659"}, + {"2001:67c:780::/48", "200643"}, + {"2001:df1:801::/48", "133752"}, + {"2001:4490:efe8::/43", "9829"}, + {"2408:8409:c00::/40", "4808"}, + {"2408:84f3:f860::/40", "17623"}, + {"240a:aabf::/32", "145401"}, + {"2804:3ebc::/32", "266618"}, + {"2001:268::/36", "2516"}, + {"240a:a12f::/32", "142953"}, + {"240a:af6c::/32", "146598"}, + {"2602:ffd8::/36", "29838"}, + {"2604:6600:fdb7::/41", "40676"}, + {"2804:7300::/32", "270889"}, + {"2a0a:2400::/32", "206157"}, + {"2a0b:5e00::/29", "50309"}, + {"2001:250:85c::/42", "138182"}, + {"2001:67c:28d8::/48", "48345"}, + {"2804:8238::/32", "272506"}, + {"2a02:f5c0::/32", "207388"}, + {"240e:438:c40::/38", "4134"}, + {"2804:2674:8000::/48", "264344"}, + {"2804:7a38::/32", "271356"}, + {"2a10:2f00:168::/48", "211640"}, + {"240a:a7c2::/32", "144636"}, + {"2804:145c:81d0::/37", "263327"}, + {"2804:2e20::/32", "265326"}, + {"2804:70a4::/32", "270739"}, + {"2001:448a:4050::/42", "7713"}, + {"2607:b580:15::/46", "19754"}, + {"2001:418:1401:7::/64", "20940"}, + {"2406:400::/32", "7654"}, + {"2406:4440:e000::/40", "140938"}, + {"2804:54e8::/32", "268677"}, + {"2a02:26f0:701::/36", "20940"}, + {"2a05:fa40::/29", "197524"}, + {"2400:d400:d51::/48", "45671"}, + {"2402:8100:2200::/42", "55644"}, + {"2607:fd48:10a:1::/56", "13536"}, + {"2610:20::/37", "33343"}, + {"2620:134:1000::/44", "30025"}, + {"2620:1e1::/36", "26848"}, + {"2804:14c:de8a::/43", "28573"}, + {"2804:7ea4::/32", "271637"}, + {"2804:8320::/32", "272178"}, + {"2a00:53c0::/32", "57084"}, + {"2001:b10:e000::/35", "13293"}, + {"2405:9800:5a::/45", "131445"}, + {"240e:1c:1000::/36", "58461"}, + {"2804:41f4:2000::/38", "267468"}, + {"2a02:dd00::/29", "57388"}, + {"2409:8061:2903::/35", "9808"}, + {"2600:1404:9c01::/38", "20940"}, + {"2604:ccc0::/32", "46506"}, + {"2804:bac::/32", "262317"}, + {"2804:673c:4000::/32", "269615"}, + {"2a00:9e20::/32", "60574"}, + {"2a02:5f0::/32", "35320"}, + {"2a0a:7e00::/30", "61317"}, + {"2804:7958::/32", "271300"}, + {"2a01:790::/32", "42926"}, + {"2001:559:c2c7::/48", "7015"}, + {"2001:678:804::/48", "12897"}, + {"2401:dd00::/32", "38229"}, + {"2404:b300:101::/48", "131207"}, + {"2602:fed2:7117::/48", "57257"}, + {"2001:559:d3::/48", "7015"}, + {"2401:3480:2000::/48", "4811"}, + {"2409:8b39::/30", "9808"}, + {"240a:ade8::/32", "146210"}, + {"2a01:cd00:80d0::/48", "28708"}, + {"2a0c:b641:570::/48", "209300"}, + {"2a11:2a47::/32", "35913"}, + {"2001:559:7f3::/48", "33491"}, + {"2001:fd8:1ef0::/39", "4775"}, + {"2403:5c80::/48", "23724"}, + {"2408:84f3:2c40::/44", "17623"}, + {"2a00:1020:8::/45", "24739"}, + {"2a0d:2f00::/48", "39691"}, + {"2001:df5:ab80::/48", "141309"}, + {"2403:1cc0:3201::/46", "45352"}, + {"2800:160:2c2c::/43", "14259"}, + {"2a02:26f0:1e01::/34", "20940"}, + {"2001:559:8656::/48", "33659"}, + {"2402:15c0:6::/48", "10222"}, + {"2607:7c80:53::/48", "398987"}, + {"2a05:f507:76::/44", "13443"}, + {"2001:500:86::/47", "26710"}, + {"2001:559:8565::/48", "33650"}, + {"2001:fd8:1f10::/41", "4775"}, + {"2001:1900:2100:3800::/56", "54030"}, + {"2001:1a68:8::/47", "15694"}, + {"2401:d800:b7a0::/41", "7552"}, + {"240a:a374::/32", "143534"}, + {"2804:3944::/32", "266022"}, + {"2a01:138::/32", "15598"}, + {"2001:44b8:30d0::/45", "7545"}, + {"2804:6e44::/32", "270585"}, + {"2a0d:d500::/29", "208861"}, + {"2409:8914:1900::/34", "56044"}, + {"2605:dd40:8ff0::/44", "16509"}, + {"2804:7554::/32", "271039"}, + {"2a0b:7240::/29", "43355"}, + {"2c0f:f038::/32", "36924"}, + {"2001:559:3bc::/48", "33657"}, + {"2401:4900:1c30::/46", "24560"}, + {"2404:2440:b0b0::/48", "138521"}, + {"2600:1f00:5000::/40", "16509"}, + {"2a00:89c0::/32", "197981"}, + {"2a02:26f7:d191::/46", "20940"}, + {"2a04:c440:2a00::/40", "47340"}, + {"2a11:b980::/29", "204790"}, + {"2c0f:f188:4::/46", "28683"}, + {"2620:149:a12::/48", "6185"}, + {"2607:1880:ffff::/48", "13499"}, + {"2c0f:6c00:fff0::/44", "51110"}, + {"2001:1248:55bf::/41", "11172"}, + {"240a:aca7::/32", "145889"}, + {"2600:1404:b801::/37", "20940"}, + {"2610:68:8000::/33", "5774"}, + {"2405:1c0:6561::/45", "55303"}, + {"240e:3b1:f700::/36", "4134"}, + {"2804:4c5c:f7c0::/36", "267366"}, + {"2804:5a10::/32", "268746"}, + {"2804:6660::/32", "269554"}, + {"2804:7110:3100::/33", "270764"}, + {"2a02:888:4051::/48", "47794"}, + {"2001:df5:a300::/48", "137925"}, + {"2620:1a:e000::/48", "396233"}, + {"2803:3b80::/44", "263702"}, + {"2a02:f406:fe50::/48", "206283"}, + {"2400:b640::/48", "64067"}, + {"2405:e000:1421::/32", "37963"}, + {"240a:af8a::/32", "146628"}, + {"2600:1488:b001::/33", "20940"}, + {"2804:41a0:4000::/32", "267446"}, + {"2600:370f:344a::/43", "32261"}, + {"2803:d000:fffe::/48", "393398"}, + {"2a05:b4c0::/47", "201093"}, + {"2a05:f700:fffe::/48", "42236"}, + {"2804:7e04::/32", "271597"}, + {"2a11:1b80::/29", "42375"}, + {"2001:559:c4d9::/48", "33657"}, + {"2401:d800:2cd0::/42", "7552"}, + {"2402:2700:100::/33", "132061"}, + {"2409:8904:68b0::/39", "24547"}, + {"240a:a536::/32", "143984"}, + {"2804:2e30:31::/46", "265330"}, + {"2001:559:8336::/48", "33657"}, + {"2402:3a80:c060::/48", "38266"}, + {"2408:8459:7210::/42", "17623"}, + {"2602:fd40:ca1::/48", "14618"}, + {"2806:2f0:24a3::/43", "22884"}, + {"2001:559:499::/48", "33651"}, + {"2a02:26f7:bd45::/46", "20940"}, + {"2a0e:2c47:b::/32", "50581"}, + {"2804:5820::/32", "268108"}, + {"2a03:2780::/32", "57238"}, + {"2603:c0fd::/36", "54253"}, + {"2001:67c:2e04::/48", "21473"}, + {"240e:3b2:7800::/39", "4134"}, + {"2a00:c000::/32", "41090"}, + {"2a02:26f7:edc1::/46", "20940"}, + {"2001:43f8:a40::/48", "31960"}, + {"240a:afd8::/32", "146706"}, + {"2602:fcdb::/36", "55103"}, + {"2804:1e10::/32", "53122"}, + {"2a01:abe0::/32", "199786"}, + {"2001:67c:238::/48", "49974"}, + {"2001:67c:15e0::/48", "50360"}, + {"2401:d800:280::/42", "7552"}, + {"2804:2c3c::/32", "265205"}, + {"2a02:26f7:f1c0::/48", "36183"}, + {"2a07:b7c0::/29", "35280"}, + {"2400:a980:1f00::/40", "133515"}, + {"2400:cb00:480::/48", "13335"}, + {"2402:800:f162::/40", "7552"}, + {"2409:8904:6870::/40", "24547"}, + {"240e:982:d800::/40", "134769"}, + {"2001:67c:10d8::/48", "211501"}, + {"2001:7c0:2320::/29", "553"}, + {"2400:9380:90b0::/45", "4809"}, + {"2402:800:3b55::/42", "7552"}, + {"2620:1f7::/36", "18703"}, + {"2803:9140::/32", "264609"}, + {"2804:4de8::/32", "268227"}, + {"2a11:b740::/29", "204790"}, + {"2c0f:4f00::/32", "328961"}, + {"2401:d800:ba30::/41", "7552"}, + {"2401:d800:bf80::/42", "7552"}, + {"2806:230:6013::/48", "11888"}, + {"2a01:8840:96::/44", "12041"}, + {"2001:559:8297::/48", "33657"}, + {"2607:fb91:1700::/36", "21928"}, + {"2403:2700::/45", "38500"}, + {"240a:a5e5::/32", "144159"}, + {"2602:fc47::/36", "20454"}, + {"2a02:5060::/32", "60144"}, + {"2001:250:2427::/48", "24356"}, + {"2409:8054:303c::/48", "9808"}, + {"2803:6660::/32", "267895"}, + {"2a00:ce60::/32", "8542"}, + {"2a0a:e2c6::/32", "202015"}, + {"2001:559:8248::/48", "7015"}, + {"2001:559:8755::/46", "33491"}, + {"2404:ec:311::/42", "703"}, + {"2407:ae80::/32", "45062"}, + {"2620:138:3020::/48", "11251"}, + {"2a03:2b20::/48", "202077"}, + {"2408:8a22:9200::/36", "139007"}, + {"2600:1009:b1d0::/42", "6167"}, + {"240a:a097::/32", "142801"}, + {"2605:ad80:ff::/48", "62887"}, + {"2800:440:46::/48", "27738"}, + {"2a00:19e8::/32", "31493"}, + {"2001:480:36::/48", "289"}, + {"2001:67c:15d4::/48", "47397"}, + {"2001:67c:1978::/48", "24956"}, + {"2607:6980:e1a0::/44", "16584"}, + {"2804:5f1c::/32", "269077"}, + {"2408:8459:ac10::/42", "17623"}, + {"2804:2ec::/32", "262848"}, + {"2a03:2480:81::/33", "41983"}, + {"2a0d:7c80::/32", "204425"}, + {"2404:e680:1102::/42", "18409"}, + {"2605:a401:87aa::/43", "33363"}, + {"2605:ad80::/40", "62887"}, + {"2800:200:b390::/42", "12252"}, + {"2402:2100::/32", "19855"}, + {"2600:1406:9c00::/48", "35994"}, + {"2604:fb00::/32", "19223"}, + {"2606:4880::/32", "26156"}, + {"2804:49b4::/32", "267198"}, + {"2804:5688::/32", "268007"}, + {"2001:559:78d::/48", "7015"}, + {"2408:840c:1c00::/40", "17621"}, + {"2600:1008:9000::/44", "6167"}, + {"2600:1408:b001::/37", "20940"}, + {"2620:10a:80aa::/48", "55195"}, + {"2804:698c::/32", "270277"}, + {"2a01:5042:2efd::/48", "202196"}, + {"2a02:b48:8017::/44", "39572"}, + {"2a09:8400::/29", "44016"}, + {"2a0e:fd80::/29", "208722"}, + {"2001:ce8::/32", "17511"}, + {"2600:380:f10c::/46", "20057"}, + {"2602:feda:3b0::/44", "134575"}, + {"2620:101:80f8::/48", "395622"}, + {"2804:44::/32", "28606"}, + {"2804:17f8:200::/32", "262628"}, + {"2a05:7dc2:1000::/36", "51324"}, + {"2001:550:109::/45", "174"}, + {"2402:8100:2800::/40", "45271"}, + {"2408:8459:a250::/37", "17816"}, + {"2600:1006:b100::/42", "6167"}, + {"2605:a7c0:140::/48", "14618"}, + {"2620:a6:2000::/48", "27566"}, + {"2800:200:b3f0::/37", "12252"}, + {"2a02:5840::/32", "49476"}, + {"2402:8100:26c8::/47", "45271"}, + {"240e:3be:d000::/36", "134772"}, + {"2606:9580::/37", "394256"}, + {"2a0a:8c40::/32", "50979"}, + {"2001:559:86f1::/48", "33659"}, + {"2001:da8:b807::/44", "24372"}, + {"2404:73c0:2102::/48", "48024"}, + {"2409:8924:a900::/38", "56046"}, + {"240a:a438::/32", "143730"}, + {"2804:356c::/32", "266285"}, + {"2a02:ed80::/29", "61303"}, + {"2001:fd8:220::/48", "132199"}, + {"2409:861e::/31", "24400"}, + {"2409:8924:9500::/38", "56046"}, + {"240a:a3d6::/32", "143632"}, + {"2801:b6:300::/36", "263083"}, + {"2a02:4a40:108::/48", "50994"}, + {"2a05:8900:aa1::/48", "42388"}, + {"2001:559:c02f::/43", "20214"}, + {"2001:df4:6480::/48", "140971"}, + {"240e:96b:6003::/45", "140365"}, + {"2a00:1d34:8000::/39", "47331"}, + {"2a09:4980::/32", "39360"}, + {"2001:559:818f::/48", "13367"}, + {"2403:5440::/32", "138033"}, + {"2604:2000::/32", "12271"}, + {"2620:118:e001::/44", "27418"}, + {"2804:5100:2100::/35", "268424"}, + {"2001:579:247c::/40", "22773"}, + {"2001:67c:864::/48", "210887"}, + {"2001:7f8:1::/64", "35277"}, + {"2401:d800:faa0::/41", "7552"}, + {"2402:5680:8000::/36", "133798"}, + {"2a02:530:1a::/42", "21191"}, + {"2a0a:56c4::/48", "42649"}, + {"240a:a54e::/32", "144008"}, + {"2600:c0c::/32", "11854"}, + {"2a0e:97c3:589::/48", "20473"}, + {"240e:108:11b0::/48", "58461"}, + {"2804:3ee0::/32", "266626"}, + {"2804:8430::/34", "272245"}, + {"2407:e740::/47", "59239"}, + {"240a:a46e::/32", "143784"}, + {"2602:feda:7::/44", "46997"}, + {"2800:4f0::/48", "28006"}, + {"2804:1b0:1a82::/47", "10429"}, + {"2804:802c:110::/42", "271734"}, + {"2a02:a00:e005::/35", "15987"}, + {"2a09:f1c0::/29", "57756"}, + {"2001:559:2bf::/48", "33667"}, + {"2804:53dc::/32", "268611"}, + {"2a06:b740::/29", "31027"}, + {"240e:108:85::/48", "133774"}, + {"2a0d:f407:1030::/48", "211030"}, + {"2600:6c38:1ca::/43", "20115"}, + {"2620:106:e00f::/48", "22518"}, + {"2a09:7700::/29", "211199"}, + {"2a12:8d40:2022::/48", "208171"}, + {"240a:a13c::/32", "142966"}, + {"2607:fa70:2490::/32", "19855"}, + {"2803:6e0::/32", "269950"}, + {"2001:67c:14dc::/48", "3301"}, + {"2402:600::/47", "38515"}, + {"2402:1d40:3::/33", "58826"}, + {"2408:8456:ac40::/38", "17816"}, + {"2600:9000:2368::/48", "16509"}, + {"2a02:898::/32", "8283"}, + {"2a05:b780::/29", "57809"}, + {"2a09:80::/29", "59615"}, + {"2409:8d14:700::/36", "56044"}, + {"240a:ae10::/32", "146250"}, + {"2a12:7340::/29", "400522"}, + {"2001:559:1fa::/48", "7922"}, + {"2404:b300:400::/48", "131207"}, + {"2408:8206:8510::/34", "4808"}, + {"2409:8080:2a30::/41", "9808"}, + {"2602:fc2d::/36", "3653"}, + {"2801:140:fffb::/45", "262249"}, + {"2a0c:640::/29", "328543"}, + {"2402:3a80:830::/38", "38266"}, + {"2402:ce00::/31", "7700"}, + {"2408:8956:3600::/40", "17622"}, + {"2408:8957:c600::/40", "17622"}, + {"240e:44d:2080::/41", "4134"}, + {"2a05:1602::/32", "207249"}, + {"2c0f:f698:cff1::/34", "37693"}, + {"2001:579:534c::/40", "22773"}, + {"2001:67c:2960::/48", "209844"}, + {"240a:ac9e::/32", "145880"}, + {"2804:80cc:7::/48", "272413"}, + {"240a:aa31::/32", "145259"}, + {"2804:6090::/32", "269177"}, + {"2a00:df8::/32", "24753"}, + {"2a02:26f7:c58d::/42", "20940"}, + {"2001:468:e00::/40", "2153"}, + {"2001:550:200:9::/44", "174"}, + {"2804:7cb8::/32", "271514"}, + {"2a02:cb80:4005::/46", "43766"}, + {"2001:4868:205::/44", "7046"}, + {"2400:d980::/32", "59340"}, + {"2407:c800::/32", "9365"}, + {"2620:12c:9004::/48", "395359"}, + {"2a02:26f7:e844::/48", "36183"}, + {"2a0d:b680::/29", "50304"}, + {"2408:8956:1600::/40", "17622"}, + {"2804:5ee8:c000::/34", "269064"}, + {"2a02:26f7:e181::/46", "20940"}, + {"240a:a8fa::/32", "144948"}, + {"240e:44d:2f00::/41", "140345"}, + {"2607:fb10:50c3::/34", "2906"}, + {"2620:117:2000::/40", "194"}, + {"2402:800:70f0::/39", "7552"}, + {"240a:a62e::/32", "144232"}, + {"2600:6c38:199::/42", "20115"}, + {"2804:6864::/39", "269689"}, + {"2a05:dfc7:dfc9::/34", "61138"}, + {"2001:43f8:10::/48", "36948"}, + {"2408:8957:5e00::/40", "17622"}, + {"240a:a931::/32", "145003"}, + {"2600:1008:9100::/44", "6167"}, + {"2804:75cc::/32", "271070"}, + {"2a00:1728:b::/45", "34224"}, + {"2a02:fd00::/29", "15613"}, + {"2a0a:a040::/31", "12552"}, + {"2001:df4:9980::/48", "141007"}, + {"2401:4900:1200::/42", "45609"}, + {"2406:ab40::/28", "63784"}, + {"2a01:8840:a5::/48", "207266"}, + {"2c0f:ec30::/32", "37722"}, + {"2001:67c:2e90::/48", "203918"}, + {"2a02:26f7:e801::/46", "20940"}, + {"2001:67c:25e4::/48", "198239"}, + {"2408:8957:f1c0::/42", "17622"}, + {"2606:4700:2001::/48", "395747"}, + {"2607:f750:2400::/38", "23473"}, + {"2001:559:87ca::/48", "33287"}, + {"240e:3ba:2200::/37", "136198"}, + {"2600:1402:5001::/34", "20940"}, + {"2620:107:f000::/40", "13541"}, + {"2801:80:3eb0::/48", "272519"}, + {"2804:593c::/32", "268177"}, + {"2804:7458::/32", "270975"}, + {"2a01:4280::/47", "31391"}, + {"2a01:8840:aa::/45", "12041"}, + {"2a02:6a80:5300::/48", "197997"}, + {"2a07:a880:3101::/48", "42675"}, + {"2a0b:6980::/29", "43414"}, + {"2001:48c0:4::/32", "14589"}, + {"2408:8256:66::/39", "17622"}, + {"2620:a8::/48", "237"}, + {"2804:1a04:c::/42", "61832"}, + {"2001:559:c1ef::/48", "33660"}, + {"2402:800:fa50::/42", "7552"}, + {"2804:8448::/32", "272251"}, + {"2604:6600:9a::/42", "40676"}, + {"2606:6800:c00::/40", "32940"}, + {"2607:f3a0:a003::/48", "399818"}, + {"2a02:2120::/30", "2119"}, + {"2a04:4e40:f200::/48", "54113"}, + {"2a06:8784::/32", "205112"}, + {"240a:a0bd::/32", "142839"}, + {"240e:44d:6940::/42", "140351"}, + {"2604:6840:ac19::/48", "20446"}, + {"2607:8700:102::/48", "25820"}, + {"2620:12c:b131::/48", "13448"}, + {"2a00:1d58::/32", "47524"}, + {"2001:559:c1e2::/47", "33651"}, + {"2404:8d02:20a7::/37", "9587"}, + {"2804:6a4c::/32", "270325"}, + {"2a0c:7e44:da38::/48", "20473"}, + {"2a0f:5fc0:beef::/48", "205036"}, + {"2001:4830:c400::/40", "33083"}, + {"240a:a638::/32", "144242"}, + {"2604:d600:54d::/46", "32098"}, + {"2a02:cb80:2a20::/48", "43766"}, + {"2406:66c0::/32", "62126"}, + {"2620:10a:9046::/48", "7018"}, + {"2a04:33c0::/40", "60671"}, + {"2a0e:b105:120::/44", "211659"}, + {"2001:2e8::/32", "10013"}, + {"2001:559:17b::/48", "7725"}, + {"2402:ad80:c0::/48", "138423"}, + {"2409:8004::/45", "24547"}, + {"2620:119:c000::/44", "46322"}, + {"2001:559:418::/48", "20214"}, + {"240a:acac::/32", "145894"}, + {"2607:f1e0:5200::/32", "19092"}, + {"2a02:d900::/29", "43809"}, + {"2c0f:4900::/32", "328870"}, + {"2409:8027:2b07::/37", "9808"}, + {"2803:fc40::/32", "264651"}, + {"2804:735c::/32", "270910"}, + {"2a0f:9400:772d::/48", "209533"}, + {"2401:d800:de0::/38", "7552"}, + {"2408:8256:317d::/46", "17623"}, + {"240a:aa6a::/32", "145316"}, + {"240e:45e::/26", "4134"}, + {"2001:250:681c::/38", "23910"}, + {"2001:fd8:228::/41", "4775"}, + {"240a:af19::/32", "146515"}, + {"2804:7080::/32", "270730"}, + {"2a02:26f7:f6d5::/46", "20940"}, + {"2001:559:f9::/48", "7015"}, + {"2600:6c2e:36::/40", "20115"}, + {"2606:2800:4050::/48", "14210"}, + {"2a00:1728::/47", "34224"}, + {"2001:559:c31a::/48", "33657"}, + {"240a:a9cd::/32", "145159"}, + {"2600:6c10:f612::/36", "20115"}, + {"2607:f330:5fa1::/48", "15130"}, + {"2607:f740:e630::/46", "63911"}, + {"2a02:2698:c00::/35", "39435"}, + {"2001:250:6428::/43", "24367"}, + {"2405:201:6400::/35", "55836"}, + {"2606:b400:8820::/48", "7160"}, + {"2804:3bfc:100::/40", "52607"}, + {"2a02:3f8:7::/48", "8359"}, + {"2a0e:f2c0::/29", "205243"}, + {"2001:67c:25c::/48", "51188"}, + {"2001:1900:2100:3900::/38", "3356"}, + {"2801:80:850::/48", "263428"}, + {"2605:b4c0:1234::/48", "25780"}, + {"2803:1a00:513::/35", "262186"}, + {"2a00:79c0::/32", "41998"}, + {"2a06:9380::/29", "203965"}, + {"2a0c:bf80::/48", "61295"}, + {"2402:800:5d8d::/43", "7552"}, + {"2404:3900:1::/48", "38320"}, + {"2804:3230::/32", "265061"}, + {"2804:3534::/32", "266274"}, + {"2c0f:ef28::/32", "328333"}, + {"2c0f:fc89:e1::/39", "36992"}, + {"2001:559:390::/46", "7922"}, + {"2001:678:c5c::/48", "50509"}, + {"2001:df1:6003::/48", "9318"}, + {"240a:ae9d::/32", "146391"}, + {"2001:1248:5a29::/46", "11172"}, + {"2403:2c00:f020::/36", "4058"}, + {"2602:feda:ca1::/48", "39753"}, + {"2804:800:ff01::/40", "16509"}, + {"2402:800:9bee::/43", "7552"}, + {"2600:9000:2035::/46", "16509"}, + {"2a02:587:1c00::/33", "6799"}, + {"2001:1960:100::/40", "32587"}, + {"2400:7400:e01a::/47", "38044"}, + {"2a00:8040::/32", "50792"}, + {"2001:559:c275::/48", "33650"}, + {"2001:56b:8000::/44", "852"}, + {"2001:1940::/32", "21947"}, + {"2a02:26f7:d1cd::/42", "20940"}, + {"2401:8800:200::/40", "17439"}, + {"2600:6:ff05::/48", "1239"}, + {"2801:1b:800::/48", "267855"}, + {"2803:7c10::/32", "271884"}, + {"2804:4b4c::/38", "267296"}, + {"2a02:26f7:d80a::/47", "20940"}, + {"2001:678:c00::/48", "49554"}, + {"2400:6280:12d::/48", "132280"}, + {"240e:44d:5000::/41", "140345"}, + {"2a00:82a0::/32", "21230"}, + {"2001:678:280::/48", "50169"}, + {"2001:df2:7f80::/48", "133803"}, + {"240e:878:640::/31", "4134"}, + {"2a02:568:fe00::/48", "31529"}, + {"2a02:26f7:c5c9::/46", "20940"}, + {"2a0c:b641:f2::/47", "210985"}, + {"2a10:6f00:ffff::/29", "399975"}, + {"2001:67c:2564::/48", "1133"}, + {"2806:2f0:12e3::/43", "17072"}, + {"2a02:26f7:d701::/46", "20940"}, + {"2a04:4e40:2200::/48", "54113"}, + {"2a0e:fc80::/36", "212286"}, + {"2804:5df0::/32", "269002"}, + {"2a00:eb20::/32", "8330"}, + {"2a0c:a9c7:225::/48", "44597"}, + {"2c0f:f7a0::/32", "37184"}, + {"2001:678:42c::/48", "205955"}, + {"2401:cf80:6045::/40", "55303"}, + {"2402:800:5755::/42", "7552"}, + {"2804:715c::/32", "270784"}, + {"2a03:38a0::/32", "60781"}, + {"2a04:4e40:9200::/48", "54113"}, + {"2a09:6f80::/29", "3320"}, + {"2600:1007:b0d0::/44", "6167"}, + {"2620:122:8000::/48", "18541"}, + {"2a01:358:8011::/33", "9121"}, + {"2403:bac0::/32", "133815"}, + {"240a:a51d::/32", "143959"}, + {"240e:698:2200::/40", "58466"}, + {"2606:f900:a201::/37", "812"}, + {"2620:1ec:8::/47", "8075"}, + {"2804:1b2:6000::/32", "18881"}, + {"2804:6d4::/32", "53045"}, + {"2804:2b34:f900::/37", "265140"}, + {"2a00:1ec0::/47", "8544"}, + {"2a03:2300::/29", "47975"}, + {"2001:df1:1400::/48", "133296"}, + {"2620:16:6000::/48", "27195"}, + {"2a06:6ec0::/29", "37478"}, + {"2a0d:4d80::/29", "1764"}, + {"2406:b400:6::/44", "18209"}, + {"240a:ab6c::/32", "145574"}, + {"240d:c010:12::/48", "132203"}, + {"2a03:28a0:4::/32", "201650"}, + {"2a04:c440:8000::/36", "2534"}, + {"2001:559:435::/46", "7922"}, + {"2600:1410:4001::/35", "20940"}, + {"2a02:26f7:7d::/48", "20940"}, + {"2a0e:38c0::/32", "207747"}, + {"2a11:f700::/29", "400522"}, + {"2001:4860:1025::/48", "36040"}, + {"2001:4998:1a0::/44", "10310"}, + {"2408:8957:b600::/40", "17622"}, + {"240a:a875::/32", "144815"}, + {"2001:da8:302f::/41", "24358"}, + {"2409:8948:8d00::/40", "24445"}, + {"240a:a802::/32", "144700"}, + {"2804:6adc::/32", "270362"}, + {"2001:559:8209::/48", "7015"}, + {"2001:978:1f01::/34", "174"}, + {"2001:1478::/35", "3257"}, + {"2406:4e40::/32", "140966"}, + {"2600:1004:b1f0::/44", "22394"}, + {"2600:6c10:11d::/46", "20115"}, + {"2607:f928:2::/48", "16905"}, + {"2620:107:9029::/48", "7018"}, + {"2804:43c8::/32", "267589"}, + {"2a02:ee80:41f0::/45", "3573"}, + {"2c0f:f000::/39", "36891"}, + {"2001:559:812f::/48", "7015"}, + {"2001:559:c147::/48", "7922"}, + {"2408:8256:357c::/48", "17816"}, + {"2a03:ee40::/32", "3170"}, + {"2a10:6100::/29", "399975"}, + {"240a:a1b7::/32", "143089"}, + {"240e:108:1134::/44", "4134"}, + {"2600:370f:3622::/45", "32261"}, + {"2620:13f:701e::/48", "59116"}, + {"2804:62c:2011::/32", "262569"}, + {"2a0b:9100::/32", "201098"}, + {"2001:250:5874::/48", "23910"}, + {"2001:559:c1db::/45", "7922"}, + {"2401:b8c0:e::/47", "64074"}, + {"2408:8456:2e50::/39", "17816"}, + {"2a05:7640:fb0::/44", "174"}, + {"2a0a:340:1000::/40", "48043"}, + {"2600:1415:2001::/37", "20940"}, + {"2620:110:f000::/44", "17012"}, + {"2806:2f0:24a0::/48", "17072"}, + {"2a06:e881:5508::/48", "212243"}, + {"2a0e:b107:32::/47", "209650"}, + {"2602:ff44::/36", "393524"}, + {"2602:ff96:1f::/48", "40676"}, + {"2a01:4040::/32", "25176"}, + {"2a03:5000::/32", "15854"}, + {"2001:67c:17a4::/48", "59891"}, + {"240a:ae50::/32", "146314"}, + {"2804:1b5c:2::/32", "28334"}, + {"2a02:27d0::/39", "49463"}, + {"2404:1b0::/32", "18059"}, + {"2404:5f40:2::/48", "38447"}, + {"2409:801a::/34", "132525"}, + {"2603:b010:2000::/33", "11796"}, + {"2620:1fb::/36", "12061"}, + {"2804:35ac::/32", "266300"}, + {"2a02:4fe0::/32", "60129"}, + {"2001:ae0::/32", "8925"}, + {"240e:83:ff00::/40", "23724"}, + {"2607:fb10:70d2::/44", "2906"}, + {"2804:6204::/32", "269271"}, + {"2806:10b0::/32", "8151"}, + {"2001:559:d9::/48", "13367"}, + {"2404:4e00:1003::/48", "32787"}, + {"2408:8456:3e40::/33", "17816"}, + {"2a02:26f7:e848::/48", "36183"}, + {"2a0f:9441:44::/29", "62240"}, + {"2401:4900:4940::/44", "45609"}, + {"2a04:7640::/48", "6730"}, + {"2a0e:3940:1000::/36", "60767"}, + {"240a:ae6c::/32", "146342"}, + {"2804:7a3c:f000::/36", "271357"}, + {"2a01:c8:400::/32", "20756"}, + {"2804:4bf8::/32", "267340"}, + {"2a01:8840:7d::/48", "207266"}, + {"2001:250:5824::/46", "24363"}, + {"2602:ffdf:400::/36", "63060"}, + {"2607:6d00::/32", "1798"}, + {"2804:3578::/32", "266288"}, + {"2804:4184::/32", "267438"}, + {"2a00:1d58:f01c::/46", "47524"}, + {"2a02:e9::/30", "12637"}, + {"2a0c:6400::/32", "207045"}, + {"2a0c:b640:14::/46", "34872"}, + {"2c0f:e890::/32", "60171"}, + {"2001:44b8:404f::/48", "4739"}, + {"2409:8904:6340::/42", "24547"}, + {"2a02:26f7:d608::/48", "36183"}, + {"2001:4f8:11::/48", "16509"}, + {"240e:b7:5000::/34", "58563"}, + {"2804:62c:2001::/45", "262569"}, + {"2804:3188::/32", "265022"}, + {"2401:1700:7c30::/32", "55666"}, + {"2620:121:5::/44", "55219"}, + {"2001:559:c2d0::/48", "33662"}, + {"2409:8028:3100::/37", "9808"}, + {"240e:438:4e40::/35", "4134"}, + {"2600:803:1200::/48", "15572"}, + {"2607:f7f8:4459::/48", "4459"}, + {"2801:80:b90::/48", "21506"}, + {"2806:2f0:46a3::/39", "17072"}, + {"2a02:2188:2000::/36", "60848"}, + {"2001:1978:1000::/39", "13768"}, + {"2409:8052:2100::/37", "9808"}, + {"240a:a192::/32", "143052"}, + {"2806:20d:1638::/46", "32098"}, + {"2a00:8640::/30", "203993"}, + {"2a03:2400::/29", "47295"}, + {"2001:250:21e::/48", "24349"}, + {"2001:579:9004::/43", "22773"}, + {"240a:a489::/32", "143811"}, + {"2606:6c00:4::/44", "32787"}, + {"2607:d500:603::/40", "13768"}, + {"2806:2f0:61a3::/41", "17072"}, + {"2a05:37c0::/29", "48091"}, + {"2401:13c0:a000::/36", "132652"}, + {"2605:a580::/32", "36103"}, + {"2800:160:2cdd::/42", "14259"}, + {"2804:11e4::/32", "52945"}, + {"2a0f:c087:b29::/48", "48108"}, + {"2a11:7347:7348::/32", "33171"}, + {"2001:559:86a4::/48", "33650"}, + {"2001:648:2010::/48", "8643"}, + {"2605:4180::/28", "35985"}, + {"2800:bf0:2ac3::/37", "27947"}, + {"2804:14c:4300::/40", "28573"}, + {"2001:4878::/48", "12222"}, + {"2409:8958:cf54::/31", "56040"}, + {"240e:95c:6000::/32", "4134"}, + {"2a0a:f240::/29", "205820"}, + {"2001:67c:207c::/48", "39913"}, + {"2001:df0:311::/48", "9255"}, + {"2001:f20:3000::/46", "9875"}, + {"2001:13d2:6805::/46", "7303"}, + {"240e:44d:5740::/42", "140350"}, + {"2620:12d:e010::/48", "29909"}, + {"2806:2f0:45a1::/46", "17072"}, + {"2408:80ea:77a0::/36", "17816"}, + {"2a07:1980:18::/48", "48851"}, + {"2a0f:9400:7721::/48", "20473"}, + {"2407:600::/32", "9268"}, + {"2600:6c20:846::/43", "20115"}, + {"2408:8956:3b00::/40", "17816"}, + {"2001:559:843f::/48", "33491"}, + {"2402:800:960f::/43", "7552"}, + {"240a:a67e::/32", "144312"}, + {"2804:2d0c:e0::/32", "262408"}, + {"2001:559:8441::/48", "33668"}, + {"2001:668:1f8::/46", "30371"}, + {"2600:1417:4800::/48", "8781"}, + {"2610:20:6f96::/47", "49"}, + {"2a07:6200::/29", "47820"}, + {"2001:1a10:1010::/33", "8781"}, + {"2405:e480:1::/46", "9507"}, + {"2408:8957:e00::/40", "17622"}, + {"2600:6c38:6::/44", "20115"}, + {"2801:0:20::/48", "28027"}, + {"2a00:4b80::/48", "43833"}, + {"2a04:4e40:1a20::/44", "54113"}, + {"240a:aa27::/32", "145249"}, + {"2600:1419:b001::/37", "20940"}, + {"2605:9380::/32", "32614"}, + {"2800:bf0:a800::/48", "52257"}, + {"2804:19cc::/32", "61819"}, + {"2a04:a2c0::/32", "9044"}, + {"2409:8924:5f00::/34", "56046"}, + {"2620:11a:a03d::/40", "43515"}, + {"2801:80:2240::/48", "267592"}, + {"2a02:27d8::/32", "20741"}, + {"2402:800:3b0f::/43", "7552"}, + {"240a:a3bc::/32", "143606"}, + {"2804:340::/33", "28165"}, + {"2804:145c:c530::/38", "263327"}, + {"2001:559:8144::/48", "33650"}, + {"2001:dc7:dd02::/45", "24151"}, + {"2606:96c0::/32", "26943"}, + {"2a05:a400::/29", "8492"}, + {"2a05:d540::/29", "47269"}, + {"2c0f:f418::/46", "37714"}, + {"2409:8000:5100::/40", "56048"}, + {"2800:160:168d::/42", "14259"}, + {"2800:bf0:2c22::/38", "27947"}, + {"2803:3a00::/36", "23243"}, + {"2806:20d:500a::/43", "32098"}, + {"2a02:26f7:f601::/46", "20940"}, + {"2a06:bc00::/29", "203732"}, + {"2001:559:dd::/46", "7922"}, + {"2401:8d00:f::/43", "38345"}, + {"2405:1c0:6341::/46", "55303"}, + {"240a:a525::/32", "143967"}, + {"2804:6448::/32", "269418"}, + {"2a03:4ba0:1::/48", "47697"}, + {"2a07:b280:100::/38", "212148"}, + {"2a0e:acc0::/48", "208414"}, + {"2a10:e541::/30", "211434"}, + {"2001:358::/32", "4680"}, + {"2001:df7:3f80::/48", "140819"}, + {"2400:4f00::/36", "17911"}, + {"2600:1415:6::/44", "20940"}, + {"2400:4880::/46", "131178"}, + {"2803:ec10::/47", "271880"}, + {"2a0a:2000::/29", "201057"}, + {"2001:fd8:304a::/39", "4775"}, + {"2602:feb4:f0::/44", "25961"}, + {"2605:5240:2500::/33", "397494"}, + {"2804:e2c::/32", "262938"}, + {"2a00:d900::/32", "58160"}, + {"2402:45c0::/48", "38221"}, + {"2604:cec0::/32", "36472"}, + {"2a02:210::/32", "6898"}, + {"2a05:48c0::/29", "207227"}, + {"2a0d:9480::/29", "50313"}, + {"2a11:e980::/29", "24940"}, + {"2406:ef40::/47", "133811"}, + {"2600:6c38:7a::/45", "20115"}, + {"2606:2800:4120::/48", "15133"}, + {"2a06:9f45:1200::/40", "211480"}, + {"2a07:9b00::/29", "202640"}, + {"2a0c:4880::/29", "212660"}, + {"2001:678:1e8::/48", "213151"}, + {"2401:3400:8000::/48", "45352"}, + {"240a:af8d::/32", "146631"}, + {"2a02:26f7:e1c4::/48", "36183"}, + {"2a02:4540:9040::/46", "197207"}, + {"2a0f:8740::/29", "34596"}, + {"2401:2000:8000::/33", "4608"}, + {"2402:ef03:d::/40", "7633"}, + {"2404:8e80:1::/48", "135168"}, + {"2406:20c0:4001::/34", "140423"}, + {"240e:3bd:8200::/35", "140316"}, + {"2605:ee00::/43", "29990"}, + {"2a02:2010:22d0::/45", "20978"}, + {"2001:559:2c0::/48", "33652"}, + {"2001:559:82a4::/48", "33287"}, + {"2001:67c:117c::/48", "207825"}, + {"2800:40:34::/47", "16814"}, + {"2a0a:7a06::/31", "61317"}, + {"2a12:8d06::/31", "57695"}, + {"2001:559:8652::/48", "7015"}, + {"2001:df0:4::/48", "681"}, + {"2408:8256:358e::/48", "17623"}, + {"240e:108:4d::/48", "4134"}, + {"2600:805:149::/37", "701"}, + {"2620:1c0:72::/47", "22773"}, + {"2801:12:b000::/48", "265884"}, + {"2804:59a8::/35", "268717"}, + {"2a03:4600::/32", "44334"}, + {"2a07:2918:6000::/36", "60115"}, + {"2a10:e5c0::/48", "58349"}, + {"240e:44d:1500::/41", "140345"}, + {"2806:2f0:1121::/46", "22884"}, + {"2a02:5420:627::/48", "43541"}, + {"2001:df0:69::/48", "41625"}, + {"2402:800:b0a0::/41", "7552"}, + {"2408:8456:200::/42", "17622"}, + {"240a:a6e7::/32", "144417"}, + {"2804:233c::/32", "264150"}, + {"2a0f:9400:7728::/48", "53356"}, + {"2001:250:22e::/48", "24349"}, + {"2001:559:472::/48", "7016"}, + {"240e:698:4400::/40", "134768"}, + {"2802:0:24::/41", "18747"}, + {"2403:cfc0:1003::/48", "135134"}, + {"240e:250:2900::/45", "4134"}, + {"2600:6c10:f064::/47", "20115"}, + {"2001:559:5d3::/48", "33657"}, + {"2801:80:1d30::/48", "265916"}, + {"2804:7024:8400::/33", "270708"}, + {"2804:7868::/32", "271240"}, + {"2a00:6380::/32", "51469"}, + {"2a02:eb8::/29", "51132"}, + {"2001:44b8:205b::/48", "4739"}, + {"2001:559:e8::/48", "22909"}, + {"2404:ef00::/32", "63515"}, + {"2600:370f:71a5::/41", "32261"}, + {"2a02:26f0:501::/46", "20940"}, + {"2001:559:794::/48", "33657"}, + {"2001:559:c1ba::/48", "13367"}, + {"2620:8d:4000::/48", "7954"}, + {"2803:7900::/32", "28094"}, + {"2a02:108::/32", "3292"}, + {"2001:250:342f::/48", "23910"}, + {"2408:8459:1c50::/39", "17816"}, + {"2620:11c:30a1::/41", "31764"}, + {"2a02:26f7:d0c5::/46", "20940"}, + {"2001:4878:261::/48", "12222"}, + {"2407:3e00:3000::/48", "9255"}, + {"2408:840c:d00::/40", "17621"}, + {"2620:0:2a0c::/48", "40344"}, + {"2804:6eb0::/32", "270613"}, + {"2409:8c20:28c2::/33", "56046"}, + {"2602:feda:3d2::/44", "213361"}, + {"2804:3184::/32", "265021"}, + {"2a00:ec40::/29", "34127"}, + {"2a0e:97c0:490::/44", "211044"}, + {"2405:8a00:a00e::/43", "55824"}, + {"2606:9b80::/32", "394487"}, + {"2620:117:80::/48", "10564"}, + {"2804:18:6010::/44", "10429"}, + {"2804:229c::/32", "264111"}, + {"2a0b:7a00:2::/47", "60689"}, + {"2606:6ec0::/32", "22773"}, + {"2a02:26f7:31::/48", "20940"}, + {"2a02:2e02:c60::/40", "12479"}, + {"2a0b:8780::/48", "16509"}, + {"2a0f:9400:700c::/48", "211144"}, + {"2804:540::/32", "262504"}, + {"2804:7c8::/35", "262323"}, + {"2404:bf40:e100::/48", "2764"}, + {"2a04:9f80::/29", "5432"}, + {"2400:adcc:1800::/39", "9541"}, + {"2405:9200:5100::/41", "131596"}, + {"2409:8c20:4826::/38", "56046"}, + {"240a:a488::/32", "143810"}, + {"240a:a7c9::/32", "144643"}, + {"2620:12d:e03f::/48", "7015"}, + {"2801:1c:1800::/48", "18678"}, + {"2001:df2:a780::/48", "140054"}, + {"2602:fd23::/48", "33185"}, + {"2602:fed2:7119::/48", "207414"}, + {"2804:2984:700::/41", "53184"}, + {"2804:3504::/32", "265495"}, + {"2804:6dc8::/32", "270555"}, + {"2001:4b98:aaaa::/47", "209453"}, + {"2405:9800:b010::/47", "133481"}, + {"2804:2230::/32", "264590"}, + {"2a02:2890:ffff::/31", "51185"}, + {"2a07:14c0:2::/34", "208861"}, + {"2001:678:ad8::/48", "208562"}, + {"2001:4878:8347::/48", "12222"}, + {"2602:ffd3::/36", "6140"}, + {"2605:29c0::/32", "397312"}, + {"2a05:b300::/30", "400177"}, + {"2a0f:607:1000::/47", "7480"}, + {"2001:16a0:4::/33", "39386"}, + {"2602:ff62:124::/40", "61317"}, + {"2604:f400:6000::/37", "40579"}, + {"2620:123:f008::/48", "20127"}, + {"2a01:8840:75::/48", "207266"}, + {"2a02:26f7:c8c5::/46", "20940"}, + {"2a04:53c0:80::/48", "47784"}, + {"2001:ac0:c890::/34", "8903"}, + {"2400:8b00:500::/42", "45727"}, + {"240a:ad5d::/32", "146071"}, + {"2001:200:e000::/35", "7660"}, + {"2607:f750:8010::/38", "23473"}, + {"2804:7674::/32", "271113"}, + {"2804:7b80::/32", "262610"}, + {"2a02:ac80:b001::/33", "25145"}, + {"2804:77f4::/32", "271210"}, + {"2a02:26f7:cfc5::/46", "20940"}, + {"2a04:3e00:2::/36", "56910"}, + {"240e:44d:6500::/42", "140345"}, + {"2606:840::/32", "3356"}, + {"2a02:26f7:bf88::/48", "36183"}, + {"2a03:12a0::/29", "3301"}, + {"2a07:2440::/29", "42695"}, + {"2001:559:108::/48", "33659"}, + {"2001:67c:10d4::/48", "58057"}, + {"2400:8500:9d07::/48", "7506"}, + {"2a02:26f7:ee89::/46", "20940"}, + {"2804:21fc::/32", "264584"}, + {"2804:54bc::/32", "268667"}, + {"2a02:26f7:ea89::/46", "20940"}, + {"2a0b:2a00::/32", "51933"}, + {"2804:4938::/32", "267171"}, + {"2a0c:1940:20::/44", "60354"}, + {"2a0e:b00::/29", "63023"}, + {"2401:d800:5cd2::/39", "7552"}, + {"2a0a:5780::/32", "47490"}, + {"2a0a:7cc0:2::/29", "60880"}, + {"2a0d:8fc0::/29", "44050"}, + {"2001:559:8203::/48", "33652"}, + {"2001:559:8678::/47", "7922"}, + {"2403:1ec0:1200::/48", "4808"}, + {"2804:4bd8:86::/47", "270891"}, + {"2804:8434::/48", "272246"}, + {"2a00:5020::/48", "60781"}, + {"2a04:e00:200::/46", "39855"}, + {"2001:559:8324::/48", "7922"}, + {"2400:1b20::/32", "141518"}, + {"240e:471::/32", "140486"}, + {"2602:fef2::/36", "396313"}, + {"2803:5100::/32", "263761"}, + {"2804:80c8::/32", "262626"}, + {"2a02:d40::/46", "44592"}, + {"2a02:e980:110::/46", "19551"}, + {"2405:7e00:4000::/36", "17408"}, + {"2600:1408:c::/43", "20940"}, + {"2800:160:18a4::/41", "14259"}, + {"2a02:26f7:e1c5::/46", "20940"}, + {"2a0a:3b80::/29", "205645"}, + {"2a0e:c180::/29", "25726"}, + {"240e:981:1000::/40", "137698"}, + {"2604:fb80:6000::/36", "15128"}, + {"2804:2c5c::/33", "265214"}, + {"2001:559:87e7::/48", "7015"}, + {"2001:559:c309::/48", "33651"}, + {"2409:8c85:5430::/36", "9808"}, + {"2a02:26f7:d644::/48", "36183"}, + {"2a02:2e02:89c0::/43", "12479"}, + {"2001:67c:2bf4::/48", "39036"}, + {"240a:a4e1::/32", "143899"}, + {"240a:a542::/32", "143996"}, + {"2605:b3c0::/32", "16576"}, + {"2800:160:1307::/44", "14259"}, + {"2804:70ac::/32", "270741"}, + {"2a01:6380::/32", "25540"}, + {"2a02:ee80:420f::/43", "3573"}, + {"2a10:c704::/32", "211858"}, + {"2606:4700:3108::/48", "13335"}, + {"2804:2778:8000::/35", "263903"}, + {"2a02:26f7:e001::/46", "20940"}, + {"2001:df7:f580::/48", "136496"}, + {"2001:f18::/32", "9916"}, + {"240a:a8a9::/32", "144867"}, + {"2a02:26f7:c48d::/46", "20940"}, + {"2001:579:4154::/42", "22773"}, + {"2804:492c::/32", "267168"}, + {"2806:2f0:3363::/40", "17072"}, + {"2a02:26f0:e1::/44", "20940"}, + {"2001:1af8:4410::/48", "38930"}, + {"2001:4cf8:6001::/32", "13167"}, + {"240e:964:9400::/39", "133776"}, + {"2001:559:70d::/48", "33657"}, + {"2408:8456:c200::/42", "17622"}, + {"240a:ae04::/32", "146238"}, + {"240e:a50:6400::/31", "4134"}, + {"2804:3bf8::/32", "266183"}, + {"2a0d:4707::/35", "207044"}, + {"240a:ac94::/32", "145870"}, + {"2804:13e4::/32", "61902"}, + {"2a09:5240::/48", "34775"}, + {"2400:c300::/47", "23881"}, + {"2409:8914:6c00::/39", "56044"}, + {"2600:100f:b140::/40", "22394"}, + {"2804:10c::/32", "28144"}, + {"2a07:3500:1c30::/48", "207894"}, + {"240a:af95::/32", "146639"}, + {"2600:6c38:9c::/47", "20115"}, + {"2804:5078::/32", "268391"}, + {"2a02:214e::/31", "1241"}, + {"2001:678:f68::/48", "211169"}, + {"2001:67c:18e8::/48", "49855"}, + {"2a02:920::/32", "12597"}, + {"2a0b:3880::/32", "62217"}, + {"2604:fb80:f00a::/47", "15128"}, + {"2a00:1c70::/32", "28890"}, + {"2407:5140::/32", "138235"}, + {"240a:a612::/32", "144204"}, + {"240a:aaff::/32", "145465"}, + {"2804:6150::/32", "269227"}, + {"2a02:26f0:cb00::/48", "9121"}, + {"2001:4490::/43", "9829"}, + {"2401:d800:5f20::/41", "7552"}, + {"2409:8c29::/29", "9808"}, + {"240e:62:a000::/35", "140310"}, + {"2604:d600:c3b::/45", "32098"}, + {"2804:7710:8000::/33", "271152"}, + {"2a02:e980:16b::/45", "19551"}, + {"2a03:7c60::/32", "201038"}, + {"2a10:4740:40::/42", "212806"}, + {"2001:1248:5500::/44", "11172"}, + {"2400:8b00:b80::/42", "45727"}, + {"2607:f110:11::/46", "21889"}, + {"2804:52f4:a30::/41", "268552"}, + {"2a09:4c0:306::/40", "58057"}, + {"2a0e:aa00:126::/41", "41378"}, + {"2402:800:7b50::/42", "7552"}, + {"240a:a238::/32", "143218"}, + {"2804:1c8:8200::/33", "53184"}, + {"2804:59fc:c000::/34", "268738"}, + {"240e:108:11e3::/48", "134763"}, + {"2a01:758:fff7::/44", "3326"}, + {"2a02:8383:8000::/29", "8412"}, + {"2402:800:7550::/42", "7552"}, + {"2405:9800:8::/48", "45430"}, + {"2409:8958:cf44::/43", "9808"}, + {"2402:800:3aee::/43", "7552"}, + {"240e:438:a620::/43", "140647"}, + {"2607:f380:864::/48", "23483"}, + {"2804:5f48::/32", "269089"}, + {"2a0c:e8c0::/29", "208861"}, + {"2001:559:87d4::/48", "33661"}, + {"2001:fd8:3300::/42", "132199"}, + {"2600:1415:b801::/33", "20940"}, + {"2620:3a:2000::/48", "396418"}, + {"2001:df5:e000::/48", "132885"}, + {"2402:800:3263::/43", "7552"}, + {"2402:800:3a01::/44", "7552"}, + {"2405:3740::/32", "38526"}, + {"240e:44d:7080::/41", "4134"}, + {"240e:91e::/32", "134761"}, + {"2804:ec4::/32", "262973"}, + {"2804:1614::/32", "263266"}, + {"2a0d:700::/29", "39104"}, + {"2409:8a52:b00::/37", "56047"}, + {"240e:5a:4540::/40", "140297"}, + {"2806:230:3026::/48", "265594"}, + {"2a04:9a00:104e::/47", "212157"}, + {"2001:3e0:3001::/32", "10013"}, + {"2404:b780::/32", "63967"}, + {"2409:8959:c844::/43", "9808"}, + {"2600:6000:faad::/39", "12271"}, + {"2600:6c38:f65::/31", "20115"}, + {"2605:380:38::/48", "42473"}, + {"2620:1ec:8f1::/45", "8075"}, + {"2a0b:b600:3000::/48", "15703"}, + {"2001:4d80:7358::/32", "5606"}, + {"2407:c840::/48", "140823"}, + {"240e:7b3::/36", "140315"}, + {"2a03:c980:b239::/48", "210079"}, + {"2001:559:8226::/48", "33657"}, + {"2001:67c:296c::/48", "211723"}, + {"2620:0:10::/48", "18694"}, + {"2806:20d:1614::/44", "32098"}, + {"2a02:26f7:d551::/42", "20940"}, + {"2a11:9ac0::/31", "210652"}, + {"2001:df0:2140::/48", "149048"}, + {"240e:929::/32", "17638"}, + {"2606:1b40:800::/40", "19740"}, + {"2a05:d580::/32", "199753"}, + {"2c0f:f6d0:14::/42", "327687"}, + {"2001:559:c3e9::/48", "21508"}, + {"2001:ee0:c240::/39", "45899"}, + {"2804:84a0::/32", "272272"}, + {"2001:df1:b80::/48", "139466"}, + {"240a:17:fcc::/48", "9605"}, + {"2620:0:dd0::/48", "46357"}, + {"2001:1328::/32", "1797"}, + {"2001:44b8:405c::/48", "7545"}, + {"2400:a980:60fa::/45", "133512"}, + {"2602:fbaf:ab::/48", "400519"}, + {"2804:e80::/32", "262676"}, + {"2804:3df8:6001::/46", "266566"}, + {"2a0b:af00::/29", "56708"}, + {"2001:df0:b5::/48", "46049"}, + {"2406:c140:65::/48", "132337"}, + {"240a:aeb0::/32", "146410"}, + {"2800:bf0:3500::/48", "52257"}, + {"2804:2674:b000::/39", "264344"}, + {"2a05:50a7::/32", "62445"}, + {"2400:8800:302::/37", "3491"}, + {"2401:e380:10::/48", "131091"}, + {"2409:8002:2100::/37", "9808"}, + {"2409:804f:1900::/34", "9808"}, + {"240a:a786::/32", "144576"}, + {"240e:96b:6018::/46", "140372"}, + {"2607:4e80::/32", "15165"}, + {"2620:121:5000::/46", "36351"}, + {"2800:160:3::/45", "14259"}, + {"2a02:61e0::/32", "31543"}, + {"2620:bb:c000::/48", "33151"}, + {"2620:10d:6004::/48", "26722"}, + {"2803:dfa0::/32", "267797"}, + {"2804:c6c:8103::/45", "52704"}, + {"2001:559:51a::/48", "33650"}, + {"2402:8100:2560::/43", "45271"}, + {"240a:a618::/32", "144210"}, + {"2600:1417:2d::/46", "20940"}, + {"2600:141b:2801::/37", "20940"}, + {"2600:1480:c100::/36", "20940"}, + {"2607:cd80:2000::/33", "6528"}, + {"2a00:6920::/48", "42020"}, + {"2001:1248:983d::/46", "11172"}, + {"2409:8b35::/28", "9808"}, + {"240a:a021::/32", "142683"}, + {"240e:924:5000::/32", "4134"}, + {"2607:f740:e00a::/48", "36217"}, + {"2620:132:e000::/48", "41690"}, + {"2a02:f38:2::/48", "15499"}, + {"2001:559:599::/48", "7922"}, + {"2400:5120::/32", "131642"}, + {"240e:37f:ac00::/24", "4134"}, + {"2804:4ddc::/32", "268224"}, + {"2a01:ce8d:9000::/30", "51964"}, + {"2a0a:4ec0::/29", "559"}, + {"2a0f:5707:aa80::/44", "56382"}, + {"2620:100:9000::/47", "26211"}, + {"2804:22a0::/44", "264112"}, + {"2a02:26f7:cb::/48", "20940"}, + {"2a05:b6c1::/32", "12637"}, + {"2001:250:6815::/46", "24368"}, + {"2001:468:500::/48", "14041"}, + {"2607:f7c0:4000::/40", "40819"}, + {"2806:2f0:8143::/42", "17072"}, + {"2a00:14c0::/32", "35382"}, + {"2001:559:87df::/48", "7725"}, + {"2001:799::/32", "21320"}, + {"2001:4ce0::/32", "25058"}, + {"240e:379::/35", "140329"}, + {"2605:4a00:211::/44", "14361"}, + {"2a00:18a8::/32", "29246"}, + {"2a02:20c8:2570::/32", "50304"}, + {"2401:d800:f860::/40", "7552"}, + {"2409:8054:3035::/44", "56040"}, + {"2607:b300:fd06::/48", "54994"}, + {"2804:5bd4::/32", "268871"}, + {"2a04:4e42:2e::/43", "54113"}, + {"2801:80:16f0::/48", "264895"}, + {"2a0d:2784::/30", "62068"}, + {"2001:428:6402:5::/64", "2639"}, + {"2001:559:c464::/48", "33651"}, + {"2401:d800:7420::/41", "7552"}, + {"2a03:a900:ffff::/48", "57707"}, + {"2a05:4800::/29", "12722"}, + {"2a07:3c0::/29", "34049"}, + {"2a0d:5440::/29", "48927"}, + {"2001:253:118::/48", "142084"}, + {"2001:df6:b981::/48", "136969"}, + {"2406:800::/32", "23661"}, + {"2409:8002:2000::/40", "38019"}, + {"240a:a36a::/32", "143524"}, + {"240a:aaca::/32", "145412"}, + {"2606:3240::/33", "399252"}, + {"2620:160:e300::/44", "4196"}, + {"2804:4c4::/32", "28271"}, + {"2804:ef0::/39", "263558"}, + {"2804:1e90::/35", "264436"}, + {"2a00:114f:4::/46", "199295"}, + {"2001:559:c218::/47", "33667"}, + {"2001:fd8:3370::/44", "4775"}, + {"2a00:4800::/40", "8717"}, + {"2a02:d58::/29", "44919"}, + {"2001:520:1001::/48", "8103"}, + {"2803:5c80:5054::/44", "64114"}, + {"2401:4900:3380::/44", "45609"}, + {"2404:9ec0:500::/48", "38136"}, + {"2408:8346:1200::/32", "4837"}, + {"2600:380:e010::/38", "7018"}, + {"2a00:7580:16::/48", "3257"}, + {"2a00:b900:3::/32", "51561"}, + {"2001:559:2f7::/48", "22258"}, + {"2001:dc7:5e00::/32", "24151"}, + {"2403:300:a08::/48", "6185"}, + {"2800:a30::/37", "262187"}, + {"2401:4900:4538::/45", "45609"}, + {"2402:e880::/32", "9808"}, + {"2404:bf40:8600::/47", "7545"}, + {"2606:4740::/32", "399116"}, + {"2606:7d00:d001::/34", "23248"}, + {"2803:8060::/32", "267803"}, + {"2803:d040::/32", "61497"}, + {"2804:2488::/43", "264228"}, + {"2804:7a84::/32", "271376"}, + {"2400:7400:e02c::/48", "38044"}, + {"2401:d800:50c0::/42", "7552"}, + {"2a03:8d60::/48", "203618"}, + {"2001:12b4::/32", "262983"}, + {"2401:1d40:3f02::/48", "58466"}, + {"2408:8409:6000::/40", "4808"}, + {"240a:af83::/32", "146621"}, + {"2600:140f:e01::/35", "20940"}, + {"2605:5c0:c085::/44", "28885"}, + {"2607:fdb0::/32", "3361"}, + {"2a06:fb80::/29", "21013"}, + {"2a0b:c340::/29", "205477"}, + {"2a0f:c480::/29", "56655"}, + {"2001:470:96::/48", "55243"}, + {"2001:559:119::/48", "33657"}, + {"2001:67c:8::/48", "196621"}, + {"2401:d800:7b10::/42", "7552"}, + {"2406:bfc0::/32", "131668"}, + {"240e:97e::/33", "58543"}, + {"2804:213c:4::/42", "264544"}, + {"2a01:8840:2a::/45", "12041"}, + {"2a0c:b641:456::/48", "208421"}, + {"2001:fb0:109f:12::/64", "36040"}, + {"240a:a0bc::/32", "142838"}, + {"240a:a9da::/32", "145172"}, + {"2a02:26f7:f60d::/42", "20940"}, + {"2a02:2da0::/32", "47447"}, + {"2a02:2e02:1af0::/39", "12479"}, + {"2a07:4300:31::/48", "209622"}, + {"2407:c280:30ff::/48", "24322"}, + {"2a00:fa60:1260::/37", "53550"}, + {"2a12:a2c0::/29", "400522"}, + {"2001:1398:1::/45", "27678"}, + {"2408:8957:5000::/40", "17622"}, + {"2409:8054:35::/46", "56040"}, + {"240a:ab2d::/32", "145511"}, + {"2620:107:9050::/48", "22787"}, + {"2620:149::/47", "714"}, + {"2a00:bdc0:e002::/45", "28709"}, + {"2a01:4020:17::/42", "25369"}, + {"2a04:8e80::/48", "199937"}, + {"2a04:8f40:ffff::/48", "205505"}, + {"2a02:26f7:ef41::/46", "20940"}, + {"2620:135:6000::/44", "22697"}, + {"2a0d:1fc0::/29", "8888"}, + {"2a0e:b107:220::/44", "208717"}, + {"2604:3b80::/34", "31857"}, + {"2803:d100:a000::/33", "52362"}, + {"2804:655c::/32", "269485"}, + {"2a04:4280:200::/48", "43260"}, + {"2a04:92c7:f::/42", "62240"}, + {"240a:a299::/32", "143315"}, + {"240e:965:ac00::/33", "4134"}, + {"2001:559:43b::/48", "21508"}, + {"2600:1404:bc01::/38", "20940"}, + {"2804:2b6c::/32", "262794"}, + {"2806:2f0:7321::/46", "17072"}, + {"2600:6c38:16e::/43", "20115"}, + {"2620:129:9001:2::/57", "13767"}, + {"2800:bf0:b422::/48", "27947"}, + {"2001:da8:21c::/48", "24349"}, + {"2001:df3:2580::/48", "140110"}, + {"2404:4a00:6500:1::/48", "45629"}, + {"2406:69c0:1000::/36", "17439"}, + {"2806:230:3022::/48", "265594"}, + {"2a02:26f7:e90c::/48", "36183"}, + {"2001:fd8:3022::/44", "132199"}, + {"2400:54a0:1030::/48", "149476"}, + {"2620:0:50c0::/48", "6939"}, + {"2a03:44a0:100::/48", "200521"}, + {"2001:250:681b::/48", "24368"}, + {"2604:f040::/32", "395927"}, + {"2605:72c0:3::/48", "32354"}, + {"2804:18:6060::/45", "26599"}, + {"2a01:be80::/32", "51401"}, + {"2001:579:10ac::/41", "22773"}, + {"2804:4f80:9200::/48", "268330"}, + {"2a04:4e40:2210::/44", "54113"}, + {"2a04:dbe0::/30", "201894"}, + {"2a0e:e704:46::/48", "210851"}, + {"2600:9000:21ca::/48", "16509"}, + {"2804:2bc8::/32", "265175"}, + {"2a02:26f7:cf88::/48", "36183"}, + {"2a02:26f7:f2c0::/48", "36183"}, + {"2a03:4300::/29", "51048"}, + {"2001:1900:22a3::/39", "3356"}, + {"2400:1c00:1a0::/43", "45143"}, + {"2408:8459:9210::/42", "17623"}, + {"2409:8e15:8000::/35", "56044"}, + {"2801:134::/43", "3549"}, + {"2a02:26f7:cec0::/48", "36183"}, + {"2407:e400::/32", "18390"}, + {"2804:2dd4::/32", "265306"}, + {"2806:2f0:2123::/43", "22884"}, + {"2409:8924:9b00::/37", "56046"}, + {"240a:a377::/32", "143537"}, + {"240e:95d:3000::/26", "4134"}, + {"2606:f900:a602::/36", "812"}, + {"2607:500::/32", "17049"}, + {"2803:2a80:8f0::/47", "262928"}, + {"2a0a:2c0:2::/48", "48648"}, + {"2001:6b0:5::/32", "1653"}, + {"240a:a720::/32", "144474"}, + {"240e:353:5c00::/34", "134419"}, + {"2a02:26f7:bed1::/42", "20940"}, + {"2a0a:b500::/29", "57878"}, + {"2401:7ec0::/32", "59127"}, + {"240e:438:3c20::/43", "140647"}, + {"2600:9000:10e8::/43", "16509"}, + {"2602:feda:d60::/47", "212034"}, + {"2604:5500:1000::/42", "19165"}, + {"2a00:a0c0::/32", "34233"}, + {"2a0e:b107:1130::/46", "212121"}, + {"2001:678:f30::/48", "211398"}, + {"2001:67c:6c4::/48", "38914"}, + {"2610:b0:4038::/47", "21433"}, + {"2a09:afc0::/48", "207597"}, + {"2a10:6740::/32", "60672"}, + {"2403:2c40::/32", "58668"}, + {"2600:6c38:604::/44", "20115"}, + {"2a02:26f7:c101::/46", "20940"}, + {"2a03:4800::/39", "21286"}, + {"2001:df0:2cc::/48", "55909"}, + {"2001:12f8:8::/47", "10906"}, + {"2409:896a:5600::/39", "9808"}, + {"2804:710c::/32", "270763"}, + {"240a:add3::/32", "146189"}, + {"2605:e000:c0b::/48", "10838"}, + {"2a01:821::/29", "3209"}, + {"2a0c:9a40:1::/48", "34927"}, + {"2001:559:c095::/48", "7015"}, + {"2001:1388:8a0b::/48", "6147"}, + {"240a:a9dd::/32", "145175"}, + {"2804:6d6c::/33", "270532"}, + {"2a01:5ec0::/34", "44244"}, + {"2001:67c:213c::/48", "43681"}, + {"2408:8957:6000::/40", "17622"}, + {"2606:2800:4a9c::/46", "15133"}, + {"2620:e8:c000::/48", "394545"}, + {"2804:a24::/32", "263025"}, + {"2804:1bd8:9000::/33", "28224"}, + {"2a0d:2902:caf7::/44", "204185"}, + {"240e:960:c00::/40", "148969"}, + {"2a02:ce0:1809::/32", "35819"}, + {"2a02:26f7:cccd::/42", "20940"}, + {"2001:250:3814::/38", "23910"}, + {"2001:1bf8::/29", "47814"}, + {"2401:d800:9a40::/40", "7552"}, + {"240a:a3be::/32", "143608"}, + {"240a:ab75::/32", "145583"}, + {"2600:140f:5401::/38", "20940"}, + {"2409:8f04:c300::/35", "24547"}, + {"240a:a212::/32", "143180"}, + {"2600:6c10:f84c::/37", "20115"}, + {"2606:82c0:31::/46", "32167"}, + {"2a00:6060:8000::/48", "199881"}, + {"2a02:ac80:7371::/32", "25145"}, + {"2a05:cfc0::/29", "48635"}, + {"2402:800:9571::/40", "7552"}, + {"2409:8904:5740::/42", "24547"}, + {"2605:dd40::/44", "398549"}, + {"2606:2800:5091::/48", "15133"}, + {"240a:a0e6::/32", "142880"}, + {"2804:56cc::/32", "268024"}, + {"2a00:1718::/32", "25176"}, + {"2a02:26f7:f6d8::/46", "36183"}, + {"2a11:2180::/29", "56897"}, + {"2800:484:9300::/36", "14080"}, + {"2001:da8:233::/45", "24349"}, + {"2401:c300::/32", "55353"}, + {"240a:acb8::/32", "145906"}, + {"2605:a401:8960::/40", "33363"}, + {"2801:1b:f000::/48", "267703"}, + {"2804:664::/32", "262582"}, + {"2804:59b0::/32", "268719"}, + {"2001:678:90::/48", "57801"}, + {"2401:d800:d680::/42", "7552"}, + {"2405:c0:10::/48", "138881"}, + {"240a:a5b9::/32", "144115"}, + {"2600:140b:7c00::/48", "31109"}, + {"2607:f0a0::/32", "32335"}, + {"2a02:26f0:7c01::/39", "20940"}, + {"2001:df2:9280::/48", "136375"}, + {"240a:a5ab::/32", "144101"}, + {"2804:1a70::/32", "61859"}, + {"2804:7fd0::/32", "271711"}, + {"2a05:3f40::/29", "60781"}, + {"2a08:600::/45", "206747"}, + {"2a0b:6800:3::/29", "16150"}, + {"240e:10:800::/37", "63835"}, + {"2600:6c38:108::/47", "20115"}, + {"2800:68:dc42::/34", "61468"}, + {"2806:370:4310::/40", "28403"}, + {"2a00:1930::/32", "34624"}, + {"2001:559:525::/48", "7922"}, + {"2001:67c:2a4c::/48", "20712"}, + {"2408:8347::/35", "140726"}, + {"2804:124c:800::/32", "263468"}, + {"2001:a98:100::/48", "5474"}, + {"2402:f080::/46", "38150"}, + {"240e:45c:8500::/40", "140533"}, + {"240e:45c:9100::/40", "140534"}, + {"240e:879:80c0::/30", "4134"}, + {"240e:982:8500::/36", "4134"}, + {"2600:1403:5c00::/48", "35994"}, + {"2001:550:6603::/40", "174"}, + {"2001:559:39a::/48", "7015"}, + {"2001:559:801d::/48", "7015"}, + {"2001:6d0:6d0b::/48", "45029"}, + {"2407:1e40:301::/37", "141732"}, + {"2607:fb10:5039::/48", "55095"}, + {"2804:8350::/32", "272190"}, + {"2a01:828::/29", "3209"}, + {"2a0e:9dc0::/29", "34919"}, + {"2401:4900:5ee0::/43", "45609"}, + {"2409:8e14:7000::/32", "56044"}, + {"240a:a6f9::/32", "144435"}, + {"2801:18:9001::/48", "14080"}, + {"2a02:26f7:bf85::/46", "20940"}, + {"2001:56a:4::/44", "852"}, + {"2001:1a68:ec00::/40", "57367"}, + {"2600:370f:20c1::/46", "32261"}, + {"2a05:e740:145::/48", "29108"}, + {"2001:559:8523::/48", "7725"}, + {"2607:b400::/40", "1312"}, + {"2607:f9a0::/32", "36149"}, + {"2a04:ec10::/47", "32066"}, + {"2001:678:2e4::/48", "31079"}, + {"2001:930::/39", "15924"}, + {"2408:840c:d400::/40", "17621"}, + {"2803:5e40::/32", "52510"}, + {"2804:20c::/32", "28172"}, + {"2804:6750::/32", "52648"}, + {"2806:1030:cefe::/48", "20940"}, + {"2a00:1d24::/30", "49544"}, + {"2a01:7860::/32", "12859"}, + {"2a07:e400::/29", "202282"}, + {"2001:44b8:205d::/48", "4739"}, + {"240e:44d:3840::/42", "140353"}, + {"2a04:2640::/29", "60460"}, + {"2001:559:843c::/48", "7725"}, + {"2001:1a11:f8::/39", "42298"}, + {"2804:3670::/32", "266348"}, + {"2a06:7a00::/48", "49544"}, + {"2403:5000:189::/38", "9304"}, + {"2405:7f00:9620::/36", "133414"}, + {"2804:9c4:30::/32", "53055"}, + {"2804:1bb8::/32", "61745"}, + {"2a0c:c7c0::/29", "202424"}, + {"2001:559:84ad::/48", "33287"}, + {"2408:8256:596::/38", "17622"}, + {"2803:d80::/29", "13489"}, + {"2804:156c::/32", "61905"}, + {"2001:559:744::/48", "33650"}, + {"240e:44d:6480::/41", "4134"}, + {"2804:73f8::/32", "270949"}, + {"2a0d:bc2::/29", "29384"}, + {"2a0f:2940::/29", "399975"}, + {"2001:c10:ff02::/48", "397942"}, + {"2400:32::/48", "4766"}, + {"2603:f0c8::/29", "63023"}, + {"2604:4bc0::/36", "11509"}, + {"2803:9800:b8cb::/45", "11664"}, + {"2001:ee0:f140::/36", "45899"}, + {"240a:a678::/32", "144306"}, + {"240a:ac25::/32", "145759"}, + {"2605:5240::/34", "397494"}, + {"2a00:1750::/32", "3257"}, + {"2a0a:3b40::/34", "207974"}, + {"2a0c:7e47:c909::/48", "20473"}, + {"2001:559:80ce::/48", "7922"}, + {"2001:44b8:2046::/48", "7545"}, + {"2409:8904:6040::/42", "24547"}, + {"2001:13c7:7000::/48", "28498"}, + {"2400:7400:42::/48", "38044"}, + {"2605:7b00::/32", "22110"}, + {"2607:f3a0:1014::/36", "23342"}, + {"240e:26c::/30", "4812"}, + {"2607:f368:2d00::/35", "32982"}, + {"2804:44e8:201::/39", "267660"}, + {"2803:3280::/32", "263218"}, + {"2a02:26f7:e484::/48", "36183"}, + {"2001:67c:24fc::/48", "57423"}, + {"2001:df3:5d00::/48", "137204"}, + {"2001:18b8::/45", "29789"}, + {"2603:fe10::/26", "397165"}, + {"2803:e600:aaab::/35", "18809"}, + {"2a00:c584::/32", "198813"}, + {"2a02:26f7:b749::/46", "20940"}, + {"2001:559:8181::/46", "33287"}, + {"2001:67c:2560::/48", "57763"}, + {"2404:bf40:a002::/42", "139084"}, + {"2801:80:1c30::/48", "266077"}, + {"2804:18:10f8::/36", "26599"}, + {"2a02:26f7:b609::/46", "20940"}, + {"2a09:7f40::/29", "209378"}, + {"2001:250:3c22::/38", "23910"}, + {"2404:e5:130::/38", "703"}, + {"2409:8055:10::/48", "9808"}, + {"2600:1012:b080::/44", "6167"}, + {"2804:1798::/32", "263156"}, + {"2806:102e:1b::/48", "8151"}, + {"2409:8a04:3100::/33", "24547"}, + {"240a:a316::/32", "143440"}, + {"240a:aaba::/32", "145396"}, + {"240a:ac14::/32", "145742"}, + {"2804:1bfc::/32", "61632"}, + {"2a0a:7840::/29", "25433"}, + {"2a0e:b107:14d3::/48", "50058"}, + {"2001:f80::/32", "23775"}, + {"2408:8256:3174::/48", "17816"}, + {"2803:e880:8108::/45", "52468"}, + {"2a0d:e7c7:ffff::/48", "210015"}, + {"2001:559:8477::/48", "33659"}, + {"2804:171c::/32", "263124"}, + {"2a03:8580::/32", "8464"}, + {"2620:74:2d::/48", "26415"}, + {"2801:80:3890::/48", "270327"}, + {"2804:78f0::/32", "271275"}, + {"2a0c:fc00::/31", "205250"}, + {"2001:44b8:2035::/44", "7545"}, + {"2408:8459:3050::/38", "17816"}, + {"2620:171:36::/48", "715"}, + {"2a02:dc8::/30", "42656"}, + {"2a02:26f7:eb09::/42", "20940"}, + {"2a03:700::/32", "35271"}, + {"2001:559:8454::/48", "33651"}, + {"2001:df2:fc00::/48", "59111"}, + {"2403:6200:7603::/36", "45629"}, + {"2a00:fd40:1::/48", "58272"}, + {"2a0e:f340::/29", "44205"}, + {"2001:1900:5:2:2::5a20/108", "3356"}, + {"2409:804d:1100::/36", "9808"}, + {"240a:af02::/32", "146492"}, + {"240e:45c:6e00::/35", "131285"}, + {"2408:8459:f300::/37", "17622"}, + {"2409:8d75::/28", "9808"}, + {"240e:44d:6b80::/41", "4134"}, + {"2600:140b:ac01::/35", "20940"}, + {"2606:200::/32", "11942"}, + {"2a02:26f7:c0::/48", "36183"}, + {"2a02:26f7:d9c0::/48", "36183"}, + {"2a06:e881:6600::/48", "208872"}, + {"2001:559:3af::/48", "33491"}, + {"2001:4b20:100:599::/54", "34288"}, + {"240e:438:1e20::/43", "140647"}, + {"2620:10a:80f4::/48", "27299"}, + {"2803:3140::/32", "27843"}, + {"2804:7f7c::/32", "271691"}, + {"2a02:26f0:7001::/39", "20940"}, + {"2001:43f8:240::/47", "37304"}, + {"2600:6c38:b05::/44", "20115"}, + {"2803:1920::/32", "266671"}, + {"2804:4300::/32", "267542"}, + {"2a02:d00::/32", "49101"}, + {"2409:8054:3040::/45", "56040"}, + {"2409:8907:7b20::/37", "24547"}, + {"2409:8c85:81::/37", "9808"}, + {"2607:4000:600::/32", "73"}, + {"2800:3a0:194::/32", "23201"}, + {"2804:14c:4e5::/44", "28573"}, + {"2806:105e:c::/48", "8151"}, + {"2a03:2480:6a::/45", "41983"}, + {"2a06:fac0::/29", "13182"}, + {"2001:44b8:404a::/48", "7545"}, + {"2804:14d:4283::/41", "28573"}, + {"2804:5c00::/32", "268882"}, + {"2a02:570::/32", "15935"}, + {"2a04:7340:7341::/29", "62172"}, + {"2a00:f826:9::/48", "34549"}, + {"2a02:2498:3::/48", "36351"}, + {"2a02:26f7:a3::/48", "20940"}, + {"2a02:26f7:bac0::/48", "36183"}, + {"2400:c3c0::/32", "136407"}, + {"2401:d800:2830::/41", "7552"}, + {"2607:4d00:2000::/35", "33398"}, + {"2803:86e0::/32", "269952"}, + {"2804:84:881b::/33", "14282"}, + {"2a09:28c0::/48", "25540"}, + {"240a:a5e0::/32", "144154"}, + {"240e:966:800::/37", "133774"}, + {"2605:2080:8000::/34", "394844"}, + {"2804:5140::/32", "268440"}, + {"2804:7dc8::/32", "271582"}, + {"2a04:5200:5977::/48", "202306"}, + {"2a0d:2581:8::/48", "209261"}, + {"2402:6800:6::/48", "26506"}, + {"2404:c800:8204::/29", "4760"}, + {"2408:840c:9300::/40", "17621"}, + {"2408:84f3:3410::/44", "17623"}, + {"2620:149:224::/44", "714"}, + {"2a09:4f40::/48", "209562"}, + {"2a0b:a200::/29", "208681"}, + {"2a00:5881:1000::/40", "203432"}, + {"2a01:248::/32", "28792"}, + {"2001:480:60::/48", "5957"}, + {"2001:df0:480::/48", "38532"}, + {"2401:14c0:31::/32", "136531"}, + {"2600:1408:3400::/48", "35994"}, + {"2401:4900:1b60::/44", "45609"}, + {"2a02:26f0:da01::/39", "20940"}, + {"2a02:ed02::/32", "50304"}, + {"2a03:2100:31::/48", "209127"}, + {"2001:550:105::/44", "174"}, + {"2001:559:c110::/48", "7016"}, + {"2001:67c:438::/48", "198337"}, + {"2402:800:3b9b::/41", "7552"}, + {"2408:8456:b240::/37", "17816"}, + {"2409:8904:9190::/38", "24547"}, + {"240e:964:ac00::/33", "4134"}, + {"240e:978:7000::/40", "137702"}, + {"2804:1b74::/32", "61729"}, + {"2804:44b0::/32", "267647"}, + {"2a09:2ac0::/29", "41563"}, + {"2001:1248:55a8::/47", "11172"}, + {"240a:a28a::/32", "143300"}, + {"2605:4a80:ef00::/40", "11055"}, + {"2a0b:7f80::/29", "13126"}, + {"2406:3000:f::/43", "4657"}, + {"240e:5a:4a80::/34", "4134"}, + {"2605:700::/32", "13750"}, + {"2a00:12c0::/29", "47215"}, + {"2a03:62c0::/32", "43402"}, + {"2a03:85c0:141::/31", "20561"}, + {"2a0b:a280::/48", "203377"}, + {"2001:1a11:12f::/48", "42298"}, + {"2404:a800:7::/35", "9498"}, + {"2408:840d:2b00::/42", "17621"}, + {"240a:a4d5::/32", "143887"}, + {"2a02:26f7:e94c::/48", "36183"}, + {"2a02:26f7:f8d8::/48", "36183"}, + {"2a0a:3140:600::/46", "15532"}, + {"2001:df4:4b00::/48", "137315"}, + {"2400:a980:30f2::/48", "38587"}, + {"2402:47c0:200::/32", "137280"}, + {"2407:e80::/47", "58689"}, + {"240a:a1b8::/32", "143090"}, + {"2600:9000:2452::/48", "16509"}, + {"2a00:5dc0::/29", "31313"}, + {"2a0e:fd45:2::/45", "44103"}, + {"2400:d400:5648::/48", "45671"}, + {"2001:ee0:305::/48", "45899"}, + {"240e:438:5220::/43", "140647"}, + {"240e:6b6::/36", "136199"}, + {"2600:370f:372a::/41", "32261"}, + {"2602:ff18:241::/46", "21973"}, + {"2804:693c::/33", "270257"}, + {"2804:7890::/32", "271251"}, + {"2001:418:8004::/47", "7019"}, + {"240a:aab0::/32", "145386"}, + {"2806:2f0:6181::/46", "17072"}, + {"2a06:3880::/29", "49981"}, + {"2001:678:adc::/48", "3320"}, + {"2605:2600::/32", "19842"}, + {"2800:430:2100::/33", "23487"}, + {"2a10:88c0::/29", "49808"}, + {"2001:559:8002::/47", "7922"}, + {"2001:559:c118::/48", "33657"}, + {"2001:41a0::/32", "6882"}, + {"2403:300:a0e::/48", "6185"}, + {"240a:a953::/32", "145037"}, + {"2804:431:c000::/35", "27699"}, + {"2a01:358:4014::/47", "9121"}, + {"2a06:1e00:27::/48", "210075"}, + {"2408:8956:b800::/40", "17622"}, + {"240a:a090::/32", "142794"}, + {"2620:115:c007::/44", "2635"}, + {"2802:0:47::/44", "18747"}, + {"2408:8459:b610::/42", "17623"}, + {"240a:a275::/32", "143279"}, + {"2804:2538:4ee0::/32", "28183"}, + {"2001:388:30c5::/43", "7575"}, + {"2001:67c:2268::/48", "56740"}, + {"2605:6fc0::/32", "19523"}, + {"2803:5440:100::/47", "264738"}, + {"2804:6370::/32", "269361"}, + {"2806:2f0:2182::/48", "17072"}, + {"240a:a9c0::/32", "145146"}, + {"2600:6c3a:44::/46", "20115"}, + {"2607:fba8::/32", "7029"}, + {"2804:2f48::/33", "53052"}, + {"2001:67c:2f80::/48", "42251"}, + {"2402:800:99e0::/44", "7552"}, + {"2a00:f940::/48", "12695"}, + {"2401:d800:692::/39", "7552"}, + {"2804:60d4::/33", "269194"}, + {"2806:2f0:2422::/48", "17072"}, + {"2a00:6dc0::/32", "202237"}, + {"2001:559:8435::/48", "22909"}, + {"2402:800:5ca9::/41", "7552"}, + {"2408:8459:ee50::/39", "17816"}, + {"2408:8912::/29", "4837"}, + {"2600:1409:a801::/37", "20940"}, + {"2602:fcd5:18::/46", "399122"}, + {"2604:d600:1216::/44", "32098"}, + {"2a0e:40c0:4::/48", "50979"}, + {"2c0f:ed00:44::/48", "328442"}, + {"2402:5300:4510::/38", "45903"}, + {"2600:1000:a100::/43", "6167"}, + {"2a11:82c0::/29", "1239"}, + {"2001:df4:2a00::/48", "132401"}, + {"2409:8820::/27", "9808"}, + {"240a:a078::/32", "142770"}, + {"2604:d600:154c::/46", "32098"}, + {"2804:400::/32", "262409"}, + {"2001:559:16b::/48", "7015"}, + {"2800:160:147b::/40", "14259"}, + {"2806:230:402d::/48", "11888"}, + {"2a0b:3f80::/29", "43019"}, + {"2403:a500::/32", "133495"}, + {"2804:48dc::/32", "267149"}, + {"2a02:f000::/32", "199490"}, + {"2001:67c:1094::/48", "210290"}, + {"2620:a2:c000::/48", "46875"}, + {"2a07:23c0:8::/47", "13213"}, + {"2001:1248:57a6::/43", "11172"}, + {"2606:5dc0:8800::/40", "395561"}, + {"2607:f750:2000::/39", "23473"}, + {"2400:6140::/32", "64006"}, + {"2607:f6f0:e000::/40", "398814"}, + {"2804:1040:888b::/34", "263626"}, + {"2804:2ac4::/32", "265117"}, + {"2a07:ae80::/29", "8455"}, + {"2405:c400::/48", "133104"}, + {"2605:6440:6006::/32", "396356"}, + {"2800:160:24ff::/39", "14259"}, + {"2a03:2880:f10b::/43", "32934"}, + {"2001:67c:2c74::/48", "9201"}, + {"240a:a428::/32", "143714"}, + {"240a:abf8::/32", "145714"}, + {"2602:fbdf::/36", "398355"}, + {"2606:f900:4407::/34", "812"}, + {"2a07:4d80::/32", "206332"}, + {"2a0b:b86:fe01::/48", "205749"}, + {"2001:559:8630::/47", "33287"}, + {"2001:16a2:401e::/47", "39386"}, + {"2001:559:c093::/48", "33657"}, + {"240a:a808::/32", "144706"}, + {"240a:adae::/32", "146152"}, + {"2602:fc99::/36", "400142"}, + {"2a01:4a60:ffc0::/42", "6768"}, + {"2a06:a001:a10e::/48", "210384"}, + {"2001:678:a14::/48", "13101"}, + {"240a:ab81::/32", "145595"}, + {"2a01:a480::/32", "15576"}, + {"2a02:6680:2100::/44", "16116"}, + {"2400:6980::/32", "7575"}, + {"2600:370f:34c5::/43", "32261"}, + {"2804:778c::/32", "271185"}, + {"2001:67c:2f18::/48", "56344"}, + {"2001:df7:400::/48", "134753"}, + {"2409:8a55:2800::/38", "56040"}, + {"2a00:1d60:f000::/36", "59990"}, + {"2a0c:b642:900::/47", "204625"}, + {"2001:4830:3101::/40", "22147"}, + {"2607:f148:6000::/47", "11734"}, + {"2001:559:c323::/48", "7016"}, + {"2001:fd8:32f0::/44", "4775"}, + {"2408:8026:40::/40", "17621"}, + {"240e:62:e000::/36", "140310"}, + {"2600:140b:d401::/36", "20940"}, + {"2603:90f5:b00::/40", "20115"}, + {"2804:38d4::/32", "266504"}, + {"2a00:5980::/32", "197869"}, + {"2a01:8840:26::/44", "12041"}, + {"2a0b:2080::/32", "36924"}, + {"2001:da8:25f::/48", "24351"}, + {"2001:df2:e500::/48", "14907"}, + {"2804:2580:4000::/35", "264284"}, + {"2a04:1600::/29", "61967"}, + {"240a:a568::/32", "144034"}, + {"240c:c001::/32", "59201"}, + {"2804:13c8::/32", "263551"}, + {"2804:4be4:9000::/33", "267335"}, + {"2804:7f84::/32", "271693"}, + {"2600:140b:2800::/48", "24319"}, + {"2607:f0d0::/46", "36351"}, + {"2610:b0:40d6::/47", "3573"}, + {"2800:160:1310::/45", "14259"}, + {"2a0d:60c0::/32", "59504"}, + {"2001:4b80::/29", "206557"}, + {"240a:ab5d::/32", "145559"}, + {"2a03:b4c0::/32", "61169"}, + {"2a09:b280:ff81::/48", "133846"}, + {"2a0d:5642:101::/48", "35487"}, + {"2001:559:839d::/42", "33652"}, + {"2001:67c:60c::/48", "201907"}, + {"2001:1248:882b::/43", "11172"}, + {"2402:800:55e0::/44", "7552"}, + {"2606:6c00:6001::/45", "49846"}, + {"2620:125:9014::/48", "397415"}, + {"2a01:4a8::/32", "33873"}, + {"2a02:22f0::/32", "52088"}, + {"2a03:dd41::/32", "39122"}, + {"2402:a700::/32", "7575"}, + {"2620:10f:400e::/48", "30037"}, + {"2001:fd8:f300::/42", "132199"}, + {"2600:1402:7801::/32", "20940"}, + {"2607:4100::/34", "19171"}, + {"2001:250:342e::/48", "138438"}, + {"2001:ee0:8a40::/37", "45899"}, + {"2409:0:100::/32", "142500"}, + {"2602:fc05::/40", "398355"}, + {"2607:fb10:7203::/42", "2906"}, + {"2607:fca8:534::/35", "17139"}, + {"2a06:8280:20::/44", "42978"}, + {"2803:fbe0:100::/46", "270092"}, + {"2a02:26f7:e08d::/42", "20940"}, + {"2a05:1a10:2002::/26", "43754"}, + {"2a0f:9400:7932::/45", "210718"}, + {"240a:afd6::/32", "146704"}, + {"2604:85c0:6::/47", "16524"}, + {"2804:6a64::/32", "270333"}, + {"2a00:8a00:a000::/36", "45769"}, + {"2001:559:477::/48", "33650"}, + {"2001:ee0:9140::/40", "45899"}, + {"2401:8d00:14::/48", "24149"}, + {"2607:fcd0:100:f01::/50", "8100"}, + {"2804:7598:c001::/44", "271057"}, + {"2a02:5f60::/32", "201955"}, + {"240a:ab5a::/32", "145556"}, + {"2600:14a0:1::/40", "20940"}, + {"2606:ae80:1470::/46", "26762"}, + {"2a01:280:1::/48", "12381"}, + {"2402:e380:313::/48", "139677"}, + {"2a02:26f7:dc40::/48", "36183"}, + {"2a04:9301::/29", "1764"}, + {"2001:67c:1544::/48", "3301"}, + {"2001:67c:2738::/48", "12628"}, + {"2001:df0:ac00::/44", "133729"}, + {"2405:17c0:2::/32", "139331"}, + {"2607:fb10:2015::/42", "2906"}, + {"2a0f:ca87:1::/48", "209389"}, + {"2001:67c:2488::/48", "48258"}, + {"2a03:2600::/32", "25353"}, + {"2a0a:5800::/29", "200428"}, + {"2c0f:f560::/32", "36939"}, + {"2402:800:7f80::/42", "7552"}, + {"2406:3000:3:2a::/63", "4657"}, + {"240a:ae11::/32", "146251"}, + {"2a00:1f08::/32", "28676"}, + {"2405:3200:102::/37", "17639"}, + {"240e:3b7:3e00::/33", "140308"}, + {"2a02:26f0:bf00::/48", "34164"}, + {"2408:8957:2ac0::/39", "17816"}, + {"2409:8e5d::/26", "9808"}, + {"2801:1fc:1c::/48", "27951"}, + {"2804:c84:26::/43", "52720"}, + {"2a01:328::/32", "31117"}, + {"2001:c20:48ae::/43", "9255"}, + {"240a:a9dc::/32", "145174"}, + {"2602:fd55:2::/48", "40564"}, + {"2804:e24:fffb::/45", "262417"}, + {"2804:1bac::/32", "61651"}, + {"2804:51b4::/33", "268471"}, + {"2a02:26f7:c8cd::/46", "20940"}, + {"2001:559:c459::/48", "33659"}, + {"2001:ee0:3208::/47", "45899"}, + {"2401:d800:440::/42", "7552"}, + {"2401:d800:a20::/41", "7552"}, + {"2409:8904:8790::/36", "24547"}, + {"240a:a77b::/32", "144565"}, + {"240a:a8f0::/32", "144938"}, + {"2a0c:9a40:2100::/38", "34927"}, + {"2001:67c:2ee0::/48", "51214"}, + {"240e:438:4840::/38", "4134"}, + {"2604:dc00:100a::/33", "19752"}, + {"2001:559:c203::/48", "33667"}, + {"2001:678:301::/48", "29551"}, + {"2001:67c:2e20::/48", "12945"}, + {"2408:8956:9f00::/40", "17816"}, + {"2800:bf0:3429::/43", "27947"}, + {"2001:559:565::/48", "33490"}, + {"2a02:52a0::/32", "202017"}, + {"2001:559:81d7::/44", "21508"}, + {"2605:47c0::/32", "397589"}, + {"2804:6ff0::/32", "270696"}, + {"2a0a:b780::/29", "51815"}, + {"2001:1248:9c9f::/42", "11172"}, + {"2402:28c0::/46", "136620"}, + {"2402:ef3c::/32", "7633"}, + {"2405:7f00:9ec0::/34", "133414"}, + {"2603:1061:7::/30", "8075"}, + {"2806:264:3300::/37", "13999"}, + {"2620:0:22b0::/48", "20144"}, + {"2803:6700:201::/46", "263210"}, + {"2804:14c:a700::/40", "28573"}, + {"2804:8660::/32", "272639"}, + {"2001:67c:158c::/48", "5539"}, + {"2001:df4:1580::/48", "137146"}, + {"2404:f4c0:f700::/47", "138517"}, + {"2804:62e4::/32", "269326"}, + {"2a06:f905::/36", "56630"}, + {"2001:559:86e3::/48", "33652"}, + {"240a:ad87::/32", "146113"}, + {"240a:ade4::/32", "146206"}, + {"2600:1480:b000::/48", "21342"}, + {"2806:2f0:4183::/41", "17072"}, + {"2a02:e50::/32", "49605"}, + {"2403:5000:29a::/32", "9304"}, + {"2408:8456:1b00::/42", "17622"}, + {"240e:108:8b::/48", "137695"}, + {"240e:438:1620::/43", "140647"}, + {"2a06:3e80::/32", "62217"}, + {"2a09:d380::/30", "35709"}, + {"2409:8b3d::/25", "9808"}, + {"2800:430:b600::/33", "23487"}, + {"2a02:26f7:cb81::/46", "20940"}, + {"2a02:26f7:fb81::/46", "20940"}, + {"2001:250:742e::/48", "24371"}, + {"240e:438:5820::/43", "140647"}, + {"2607:f6f0:7002::/40", "27330"}, + {"2a02:26f7:d004::/48", "36183"}, + {"2a0f:9400:7864::/47", "147028"}, + {"2001:4479:a000::/37", "7545"}, + {"2402:53c0:2000::/33", "137144"}, + {"240e:945:1000::/32", "4134"}, + {"2600:6c20:65::/44", "20115"}, + {"2001:559:19e::/48", "33652"}, + {"2001:678:b18::/48", "15507"}, + {"2001:fd8:3004::/47", "4775"}, + {"2a0e:1c80:7::/48", "50304"}, + {"2a0f:14c0::/29", "399975"}, + {"2001:559:5fb::/48", "33287"}, + {"2001:559:c328::/48", "33651"}, + {"2407:a3c0::/32", "136742"}, + {"2604:ca00:1d8::/42", "36492"}, + {"2806:2f0:3301::/46", "17072"}, + {"2a00:ede0::/32", "35804"}, + {"2a0f:2680::/29", "204188"}, + {"240a:a61f::/32", "144217"}, + {"2604:20c0:4000::/36", "40641"}, + {"2801:0:370::/48", "262245"}, + {"2806:230:602f::/48", "11888"}, + {"2a00:1be7::/32", "205005"}, + {"2a02:26f7:dcc4::/48", "36183"}, + {"2a03:d000:301::/48", "31213"}, + {"2001:16a2:c0e0::/44", "39386"}, + {"240a:af68::/32", "146594"}, + {"2604:e580:ffff::/48", "2900"}, + {"2804:4870:1b3::/41", "267121"}, + {"2a00:42a0::/32", "25108"}, + {"2405:9800:110::/32", "45430"}, + {"2408:8456:3000::/41", "17623"}, + {"240a:af88::/32", "146626"}, + {"2001:1248:8200::/39", "11172"}, + {"2001:16a2:200::/36", "25019"}, + {"2001:4878:a062::/48", "12222"}, + {"2607:fe28:2090::/42", "53347"}, + {"2a01:4020:15::/46", "213122"}, + {"2a02:2b60:101::/46", "42947"}, + {"2400:cb00:184::/44", "13335"}, + {"2406:3000:3c::/41", "4657"}, + {"240e:698:4300::/40", "63835"}, + {"2606:9100:2000::/36", "1421"}, + {"2803:34c0::/32", "264806"}, + {"2806:322:500::/36", "28546"}, + {"2a01:110f:5100::/21", "5617"}, + {"240a:ae6f::/32", "146345"}, + {"2804:14c:7d83::/45", "28573"}, + {"2804:2cbc::/35", "265240"}, + {"2a0b:ef00::/29", "205697"}, + {"2001:559:268::/48", "33651"}, + {"2001:4490:4078::/40", "9829"}, + {"2408:8956:bf00::/40", "17816"}, + {"240a:a27c::/32", "143286"}, + {"2606:8840::/32", "3136"}, + {"2804:100c::/32", "263616"}, + {"2804:6030::/32", "269151"}, + {"2a04:9a00:1010::/44", "212157"}, + {"2402:8100:27f8::/47", "45271"}, + {"2606:2800:547::/44", "15133"}, + {"2a01:298:fe::/32", "30880"}, + {"2a03:5a00:e::/48", "51028"}, + {"2a04:88c4::/32", "205544"}, + {"2001:df7:6e00::/48", "17665"}, + {"2402:800:3855::/42", "7552"}, + {"2408:8957:e900::/40", "17816"}, + {"2a02:2318::/32", "15766"}, + {"2409:8c50:a01::/32", "56047"}, + {"2607:cd80:6000::/36", "6528"}, + {"2806:230:601d::/48", "11888"}, + {"2a01:74c0::/43", "15540"}, + {"2a02:26f7:e509::/46", "20940"}, + {"2a04:26c0::/29", "60532"}, + {"2402:800:38ee::/39", "7552"}, + {"2606:ed00::/47", "47869"}, + {"2804:7cc:1000::/48", "28669"}, + {"2001:978:2204::/39", "174"}, + {"2001:13b2::/29", "3356"}, + {"2001:4b22:10::/64", "65505"}, + {"240e:3b4:dc00::/34", "4134"}, + {"2800:860:b0b::/48", "20299"}, + {"2803:1240:3502::/32", "27855"}, + {"2001:1b30::/29", "20783"}, + {"2404:8280::/32", "38719"}, + {"2804:4f28::/32", "268308"}, + {"2a00:8a02:8000::/44", "8983"}, + {"2a03:f80:44::/48", "24851"}, + {"2a04:cec0:1300::/40", "25117"}, + {"2a10:ac80::/31", "29405"}, + {"2401:d800:d900::/42", "7552"}, + {"2402:800:559b::/41", "7552"}, + {"2408:8459:7010::/42", "17623"}, + {"2600:6c10:80::/44", "20115"}, + {"2620:162::/36", "14381"}, + {"2804:1b30::/32", "61714"}, + {"2a02:26f7:dc8c::/48", "36183"}, + {"2a0f:5384:acab::/48", "208135"}, + {"2401:2fc0::/32", "149305"}, + {"2406:dc0:8850::/47", "9221"}, + {"240a:a761::/32", "144539"}, + {"2804:154c:c000::/34", "263382"}, + {"2a0e:b107:13de::/48", "59922"}, + {"2001:1260:113::/44", "13591"}, + {"2404:c2c0:2c0::/44", "135629"}, + {"2a00:1348::/44", "8879"}, + {"2001:1248:56ee::/43", "11172"}, + {"2600:1400:6::/44", "20940"}, + {"2604:1d80::/32", "54876"}, + {"2804:54fc::/32", "268682"}, + {"2a02:2ad0:640::/32", "702"}, + {"2a0a:3540::/29", "208861"}, + {"2001:559:797::/48", "33490"}, + {"2600:1415:f801::/30", "20940"}, + {"2a01:5043:efd::/48", "202196"}, + {"2a0b:4a40::/29", "47926"}, + {"2001:559:8492::/48", "33667"}, + {"2001:1248:9c41::/40", "11172"}, + {"240a:a4a9::/32", "143843"}, + {"240a:ae89::/32", "146371"}, + {"2602:fd92:637::/44", "141011"}, + {"2806:288:2a00::/40", "28469"}, + {"2a02:2339:c000::/34", "204652"}, + {"2402:c500::/32", "56284"}, + {"2a01:c50f:4680::/35", "12479"}, + {"2408:8459:4a10::/42", "17623"}, + {"2620:115:a::/45", "18888"}, + {"2804:3360::/32", "262725"}, + {"2804:5be0::/32", "268874"}, + {"2a00:afe0::/32", "60491"}, + {"2a0d:4c44:4::/30", "61317"}, + {"2001:678:378::/48", "57294"}, + {"2801:80:1610::/48", "2635"}, + {"2a04:55c0::/29", "207630"}, + {"2408:8456:b440::/38", "17816"}, + {"240e:980:8b00::/40", "137695"}, + {"2606:5d80::/32", "32613"}, + {"2a02:26f0:2b01::/35", "20940"}, + {"2a0f:29c0::/30", "208256"}, + {"2001:67c:2b24::/48", "1257"}, + {"2001:12f0:940::/38", "1916"}, + {"2401:5400:5001::/32", "4434"}, + {"2408:8768::/32", "4837"}, + {"2409:8060:900::/35", "9808"}, + {"2600:8807:6d22::/43", "22773"}, + {"2a0c:3140:ffff::/48", "48989"}, + {"2a0f:f4c1:2::/48", "36040"}, + {"2406:daa0:b040::/44", "16509"}, + {"240a:a246::/32", "143232"}, + {"2804:290::/32", "28669"}, + {"2a02:26f7:cec1::/46", "20940"}, + {"2a02:26f7:d14c::/48", "36183"}, + {"2001:550:1205::/46", "174"}, + {"2001:559:c32b::/48", "33650"}, + {"2600:1419:d801::/34", "20940"}, + {"2604:8e80:3400::/32", "32505"}, + {"2620:a7:c000::/47", "40035"}, + {"2804:77c:e100::/35", "53222"}, + {"2a09:0:11::/48", "3214"}, + {"2409:4063:5000::/29", "55836"}, + {"240a:a3b1::/32", "143595"}, + {"2a02:d300::/29", "15595"}, + {"2a00:1288:110::/47", "34010"}, + {"2a02:26f7:f890::/48", "36183"}, + {"2a02:cb80:2720::/48", "43766"}, + {"2a11:ba40::/29", "211199"}, + {"2001:559:8483::/48", "22258"}, + {"240a:af4c::/32", "146566"}, + {"2600:1413:3001::/33", "20940"}, + {"2001:250:2c2c::/48", "23910"}, + {"2001:559:87f2::/48", "7015"}, + {"240a:a522::/32", "143964"}, + {"2600:6:ff89::/42", "1239"}, + {"2600:80c:a00::/37", "11486"}, + {"2602:101:4008::/30", "20115"}, + {"2605:1900:2::/32", "12208"}, + {"2a00:7bc0::/32", "200727"}, + {"2001:df3:b500::/48", "135946"}, + {"2001:43f8:bc0::/48", "37399"}, + {"240e:3b0:c800::/37", "4134"}, + {"2804:2ab4::/32", "53149"}, + {"2a02:26f7:b949::/42", "20940"}, + {"240e:44d:3a80::/41", "4134"}, + {"2604:2e80:1400::/46", "30036"}, + {"2800:110:1025::/34", "4270"}, + {"2a00:1a20::/29", "21283"}, + {"2804:378c::/32", "266420"}, + {"2408:8957:1400::/40", "17622"}, + {"240e:6:d1a0::/44", "149178"}, + {"2620:13a:c000::/46", "53356"}, + {"2804:707c::/32", "270729"}, + {"240a:a582::/32", "144060"}, + {"240a:a952::/32", "145036"}, + {"2607:e880:1000::/48", "12220"}, + {"2a02:5580::/32", "34547"}, + {"240a:a4ad::/32", "143847"}, + {"2806:2f0:2142::/48", "17072"}, + {"2806:10b8::/32", "8151"}, + {"2a02:26f7:ef00::/48", "36183"}, + {"2409:8043:2c04::/48", "24444"}, + {"240e:3b4:7a00::/32", "140313"}, + {"240e:964:eac0::/42", "133775"}, + {"2600:9000:1e3c::/47", "16509"}, + {"2605:6440:4009::/35", "396356"}, + {"2607:3e00::/32", "14928"}, + {"2804:3d8::/32", "262402"}, + {"2804:78e4::/32", "271272"}, + {"2804:37a8:1219::/45", "266428"}, + {"2a02:120:3::/29", "29396"}, + {"2001:559:5cb::/48", "33651"}, + {"2404:aa00::/32", "10031"}, + {"2605:ba00:f000::/36", "14638"}, + {"2a0e:fd45:d35::/44", "207803"}, + {"2001:df0:2740::/48", "149063"}, + {"2a02:e5c::/32", "44530"}, + {"2a02:2270:3000::/32", "43939"}, + {"2001:559:814b::/48", "33651"}, + {"2800:4b0:4510::/32", "12252"}, + {"2a03:db80:3825::/33", "680"}, + {"2600:370f:7160::/47", "32261"}, + {"2606:3800::/32", "3912"}, + {"2606:b100::/32", "32393"}, + {"2a02:26f7:f088::/48", "36183"}, + {"240a:ae72::/32", "146348"}, + {"240e:438:1640::/36", "4134"}, + {"2804:da8:f7b0::/36", "262605"}, + {"2806:2f0:7083::/42", "17072"}, + {"2a01:73c0:690::/41", "21450"}, + {"2a02:888:43::/48", "47794"}, + {"2a04:2200::/31", "60955"}, + {"2001:559:c02e::/48", "7725"}, + {"2404:bf40:ea03::/48", "7545"}, + {"2a0e:97c0:2c0::/44", "211548"}, + {"2a10:e080::/32", "20473"}, + {"2001:c80:84::/32", "4673"}, + {"2409:4012:3000::/29", "55836"}, + {"2607:ffc8:0:3::/61", "17356"}, + {"2804:5cb0::/32", "268924"}, + {"2001:df5:2800::/48", "24558"}, + {"2607:f790::/32", "12129"}, + {"2800:160:2c3b::/41", "14259"}, + {"2801:174:3::/48", "27951"}, + {"240e:67f:8c00::/33", "4134"}, + {"2800:bf0:25e::/42", "27947"}, + {"2806:230:1025::/48", "11888"}, + {"2a0f:3800::/29", "198211"}, + {"2a0f:9c00::/29", "52031"}, + {"240a:ab93::/32", "145613"}, + {"2a02:26f7:bc85::/46", "20940"}, + {"2404:a140:20::/48", "138915"}, + {"2804:673c:c400::/34", "269615"}, + {"2001:579:d224::/41", "22773"}, + {"2607:4100:8000::/33", "19171"}, + {"2803:84a0::/32", "266820"}, + {"2804:2df8::/32", "265315"}, + {"2804:6a38:f0::/44", "270320"}, + {"2a03:2f40::/32", "3330"}, + {"2001:250:5::/38", "23910"}, + {"2620:ea:8000::/48", "2386"}, + {"2a00:4802:2c00::/42", "13124"}, + {"2001:500:4::/48", "10745"}, + {"2600:6c38:31c::/42", "20115"}, + {"2803:4600::/35", "14754"}, + {"2001:559:c449::/48", "7922"}, + {"2620:131:1066::/40", "26450"}, + {"2803:e800::/32", "13424"}, + {"2804:a84::/33", "262296"}, + {"2804:6500::/32", "269462"}, + {"2607:f400::/32", "7029"}, + {"2800:ba0:20::/48", "263812"}, + {"2804:7f20::/39", "271668"}, + {"2001:559:c06c::/48", "33287"}, + {"2804:3868::/38", "266475"}, + {"2a01:8840:8a::/45", "12041"}, + {"2a04:9500::/29", "62097"}, + {"2a0a:7cc0::/47", "60880"}, + {"2001:67c:256c::/48", "48091"}, + {"240e:3b0:7800::/39", "4134"}, + {"2600:1003:b0d0::/44", "6167"}, + {"2a06:100::/32", "200760"}, + {"2001:250:5816::/48", "138371"}, + {"240a:a4a7::/32", "143841"}, + {"2620:103:a00b::/45", "12148"}, + {"2800:160:f4d0::/36", "14259"}, + {"2804:1a54:2040::/32", "61854"}, + {"2001:df0:2e00::/48", "59022"}, + {"2401:d800:d310::/42", "7552"}, + {"2402:800:537f::/40", "7552"}, + {"2600:2c00:c000::/36", "7349"}, + {"2605:a401:80d2::/45", "33363"}, + {"2800:a90::/32", "262195"}, + {"2804:79c8::/32", "271327"}, + {"2806:2f0:30a1::/46", "17072"}, + {"2a0a:b600::/29", "61317"}, + {"2804:556c::/32", "267934"}, + {"2001:559:c3d2::/48", "7016"}, + {"2001:559:7df::/48", "33659"}, + {"2001:dce:6::/40", "23869"}, + {"2001:fd8:160::/48", "132199"}, + {"2001:1368::/32", "3551"}, + {"2602:808:7000::/44", "14618"}, + {"2800:160:190d::/42", "14259"}, + {"2804:7d78::/32", "271563"}, + {"2a00:5860::/32", "197308"}, + {"2a01:8000::/35", "60672"}, + {"2a02:2428::/32", "196845"}, + {"2a0e:b107:1350::/44", "212360"}, + {"2404:f4c0:fa81::/44", "142282"}, + {"2408:8456:5c00::/42", "17622"}, + {"2408:8456:9440::/38", "17816"}, + {"2604:8540:fcf2::/48", "33353"}, + {"2804:3e8:2002::/40", "28663"}, + {"2804:a8::/32", "4230"}, + {"2804:1c80::/32", "61657"}, + {"2a0c:5940::/29", "44668"}, + {"2c0f:ecd0::/32", "328433"}, + {"2605:9780:2000::/36", "36180"}, + {"2a00:8dc0:ff05::/40", "57811"}, + {"2a07:22c0::/48", "34854"}, + {"2600:370f:73ae::/47", "32261"}, + {"2800:490:4900::/37", "27951"}, + {"2a02:26f7:de48::/48", "36183"}, + {"2a0c:e340::/47", "30150"}, + {"2404:bf40:8701::/48", "7545"}, + {"2606:2800:7033::/48", "14153"}, + {"2620:3d:c000::/48", "22512"}, + {"2804:2bb4::/32", "265170"}, + {"2a04:3fc0::/46", "197669"}, + {"2001:16a2:ee00::/39", "39386"}, + {"2606:1000::/32", "20448"}, + {"2804:938::/32", "263062"}, + {"2a05:e202::/29", "39767"}, + {"2001:559:c006::/48", "33660"}, + {"2409:800b:2d00::/32", "9808"}, + {"2602:803:3000::/44", "21705"}, + {"2a07:a343:120::/44", "9009"}, + {"2600:3000:2412::/38", "13649"}, + {"2620:171:3b::/45", "42"}, + {"2804:618::/32", "28254"}, + {"2804:5adc::/32", "268801"}, + {"2001:1248:99a7::/44", "11172"}, + {"2402:2700::/40", "132061"}, + {"2404:f4c0:a000::/46", "210320"}, + {"2804:43d8::/32", "267594"}, + {"2803:1780::/47", "264646"}, + {"2803:2f40:ffff::/48", "36351"}, + {"2a01:260::/29", "34779"}, + {"2a01:5041:200b::/45", "202196"}, + {"2a04:a802:102::/32", "3549"}, + {"2a0f:cfc0::/32", "207729"}, + {"2001:579:5a9c::/37", "22773"}, + {"2404:ca40::/32", "134944"}, + {"2804:18:20::/44", "10429"}, + {"2a01:40e0:3::/32", "8315"}, + {"2a11:1b40::/29", "204790"}, + {"2001:559:87f0::/48", "33287"}, + {"2001:4998:c::/46", "36647"}, + {"2408:8459:1f10::/42", "17623"}, + {"2a07:4842::/48", "13213"}, + {"2a0e:f43::/48", "211935"}, + {"2001:559:82cb::/48", "33659"}, + {"2001:678:fcc::/48", "211023"}, + {"2001:67c:8e8::/48", "210409"}, + {"2605:9d80:9013::/48", "4809"}, + {"2803:e600:6::/48", "65500"}, + {"2804:44f0::/32", "267662"}, + {"2804:54d4::/32", "268672"}, + {"2400:a980:6900::/35", "133111"}, + {"2404:f4c0:f667::/40", "139328"}, + {"240e:3bd:2800::/38", "4134"}, + {"2606:2800:400c::/48", "15133"}, + {"2804:486c::/32", "267120"}, + {"2403:a100::/48", "55994"}, + {"240a:ab11::/32", "145483"}, + {"2604:cc00:801::/48", "53292"}, + {"2606:8e80:64::/48", "32133"}, + {"2a03:f80:39::/48", "9009"}, + {"2a04:4040::/29", "60610"}, + {"2406:3000:36::/44", "4657"}, + {"2605:fa80::/36", "11990"}, + {"2804:1d04:6::/37", "61689"}, + {"2804:53f8::/32", "268619"}, + {"2800:484:c800::/40", "10620"}, + {"2a00:11c0:47::/44", "47147"}, + {"2c0f:ed60::/32", "328474"}, + {"2405:6240::/32", "136700"}, + {"2600:370f:3545::/40", "32261"}, + {"2604:4e00::/33", "25764"}, + {"2607:fa18::/32", "6315"}, + {"2800:160:1f0b::/45", "14259"}, + {"2804:37f0:d900::/34", "266445"}, + {"240e:981:7100::/36", "4134"}, + {"2602:ffc5:34::/48", "25926"}, + {"2606:3a80:800::/48", "36007"}, + {"2a11:8080::/29", "210807"}, + {"2401:d800:fd90::/42", "7552"}, + {"2408:8710::/30", "4837"}, + {"2a02:73c0::/32", "59395"}, + {"2402:800:8400::/35", "7552"}, + {"2402:7500:4c0::/48", "24158"}, + {"2602:feda:c90::/44", "212360"}, + {"2606:6000::/34", "20001"}, + {"2800:bf0:83::/43", "52257"}, + {"2a00:1d60::/32", "30851"}, + {"2a05:1087::/32", "142438"}, + {"2001:559:3e9::/48", "22909"}, + {"2001:da8:cb::/48", "138370"}, + {"2400:f0c0:fcf::/32", "136477"}, + {"2605:a401:87c4::/36", "33363"}, + {"2803:5480::/32", "28038"}, + {"2a01:9e00:427a::/32", "41495"}, + {"2a02:26f7:bdd0::/48", "36183"}, + {"2a03:efc0:1100::/40", "33438"}, + {"2803:dd80::/32", "269918"}, + {"2804:2984:200::/40", "53184"}, + {"2a0c:7880::/31", "60781"}, + {"2001:559:8425::/48", "33287"}, + {"2001:fb0:109f:8009::/64", "36040"}, + {"2605:b600::/32", "53525"}, + {"2800:160:1dd5::/44", "14259"}, + {"2a06:a001:a101::/46", "210384"}, + {"2409:8a51:100::/38", "56047"}, + {"2803:e960::/32", "269738"}, + {"2804:c7c::/32", "52718"}, + {"240e:438:1240::/37", "4134"}, + {"2804:2608::/32", "264319"}, + {"2a02:2aa0:101::/43", "702"}, + {"2a02:2e02:10e0::/39", "12479"}, + {"2804:6c0c::/32", "270442"}, + {"2a0a:1a00::/29", "58130"}, + {"2001:559:825e::/48", "21508"}, + {"2001:e38:f001::/36", "17934"}, + {"240e:267:5400::/36", "4134"}, + {"2600:1801:7::/43", "16552"}, + {"2600:370f:2065::/40", "32261"}, + {"2602:fc23:159::/42", "8095"}, + {"2804:4878::/32", "267123"}, + {"2a01:8840:42::/45", "12041"}, + {"2408:8256:3b6b::/48", "17816"}, + {"2408:8456:ef00::/42", "17622"}, + {"2409:8080:3814::/44", "9808"}, + {"2610:60::/32", "29748"}, + {"2804:4a1c:1000::/32", "267219"}, + {"2a02:2e02:8b80::/37", "12479"}, + {"2001:559:803f::/41", "33657"}, + {"2400:7400:e035::/48", "38044"}, + {"2605:85c0::/32", "398196"}, + {"2620:4e::/48", "11872"}, + {"2803:a240::/32", "263805"}, + {"2803:e440::/32", "263780"}, + {"2a06:e881:5509::/48", "209864"}, + {"2a0a:d240::/29", "205916"}, + {"2a12:4940::/35", "211398"}, + {"240e:44d:3400::/41", "140345"}, + {"2a00:f7a0:100::/48", "204249"}, + {"2a02:582:7400::/29", "6799"}, + {"2a10:4a40:4ddc::/48", "31463"}, + {"2001:550:5400:100::/46", "174"}, + {"2402:8100:2470::/40", "55644"}, + {"2404:e6:200::/42", "703"}, + {"2407:1e40::/45", "141732"}, + {"2602:fd80::/47", "53612"}, + {"2603:c001:3a10::/39", "31898"}, + {"2800:bf0:8020::/44", "52257"}, + {"2a03:6f00:8::/48", "200088"}, + {"2a10:2680::/29", "212813"}, + {"2001:c38:9127::/38", "9931"}, + {"2405:b40:45::/37", "55674"}, + {"240e:44d:3880::/41", "4134"}, + {"2a02:26f7:d3c4::/48", "36183"}, + {"2a09:840::/32", "209634"}, + {"2a0b:b87:ffa4::/48", "212332"}, + {"2a11:fe80:fab4::/46", "209209"}, + {"2607:fdf0:5e6b::/43", "8008"}, + {"2804:6b28::/32", "270382"}, + {"2a04:7340::/33", "62172"}, + {"2a06:e881:3500::/44", "205117"}, + {"240a:a79c::/32", "144598"}, + {"2600:1406:47::/48", "35994"}, + {"2604:2340::/32", "32281"}, + {"2606:ce80:6100::/37", "33438"}, + {"2804:1854::/32", "53176"}, + {"2804:33b0::/32", "52662"}, + {"2a0a:b580::/29", "201296"}, + {"2001:559:81ba::/48", "13367"}, + {"2001:580::/32", "1798"}, + {"2600:6c10:f016::/42", "20115"}, + {"2602:fcfc:1::/48", "398868"}, + {"2804:1cac::/32", "61668"}, + {"2a02:6b8::/45", "208722"}, + {"2a04:4e42:7a::/45", "54113"}, + {"2400:c780::/32", "131590"}, + {"240e:a66:2600::/32", "4134"}, + {"2600:9000:2031::/46", "16509"}, + {"2606:2800:4af0::/47", "15133"}, + {"2a02:26f7:c48c::/48", "36183"}, + {"2a0f:7b80::/48", "62282"}, + {"2400:17a0::/44", "139351"}, + {"2a02:88d:820f::/48", "47794"}, + {"2a02:26f7:c845::/46", "20940"}, + {"2001:550:7202::/45", "174"}, + {"2409:8958:c844::/43", "9808"}, + {"2600:380:d800::/43", "20057"}, + {"2600:6c34:274::/48", "33588"}, + {"2602:fe3d::/36", "46246"}, + {"2605:3380:4501::/48", "12025"}, + {"2804:5b70::/32", "268845"}, + {"2a02:2b98::/32", "39642"}, + {"2001:559:da::/48", "7922"}, + {"2001:559:8782::/48", "33660"}, + {"2408:820c:2750::/33", "17621"}, + {"240c:c0a8:5c27::/41", "24348"}, + {"2600:5c00:3afe::/48", "11351"}, + {"2804:14c:b386::/47", "28573"}, + {"2001:559:555::/48", "7922"}, + {"2001:559:778::/48", "33652"}, + {"2001:67c:654::/48", "34244"}, + {"2404:300::/32", "38901"}, + {"2404:ba00:fd00::/46", "17665"}, + {"2804:232c::/32", "264146"}, + {"2001:49f0:a000::/44", "174"}, + {"2804:24b4::/32", "264239"}, + {"240e:3be:9200::/36", "140317"}, + {"2602:809:f000::/47", "23026"}, + {"2001:559:83cb::/48", "33657"}, + {"2a02:26f7:e0c9::/46", "20940"}, + {"2403:ff00::/48", "24535"}, + {"2409:8d14:1400::/38", "56044"}, + {"2602:fc97:40::/44", "399544"}, + {"2602:fe19:6401::/32", "26073"}, + {"2804:c00::/34", "52655"}, + {"2001:559:c2ae::/48", "21508"}, + {"2001:579:104::/43", "22773"}, + {"2400:9380:94c0::/44", "136167"}, + {"2620:10d:c09b::/45", "54115"}, + {"2800:b40:1::/48", "262220"}, + {"240e:983:1800::/48", "133775"}, + {"2803:2360::/32", "269782"}, + {"2804:601c::/32", "269146"}, + {"2a02:be8::/32", "42612"}, + {"2a02:26f7:c608::/47", "36183"}, + {"2607:f688::/32", "26935"}, + {"2804:4890::/33", "267129"}, + {"2001:470:e3::/48", "11282"}, + {"2408:8459:cf30::/41", "17622"}, + {"2a0c:8f00::/29", "205044"}, + {"2a0d:d200::/29", "54543"}, + {"2404:3d00:405a::/45", "3573"}, + {"2408:840c:b800::/40", "17621"}, + {"2600:6c39:625::/46", "20115"}, + {"2804:954::/42", "263073"}, + {"2806:264:400::/43", "13999"}, + {"2a02:ee80:4260::/46", "3573"}, + {"2001:129c::/33", "22356"}, + {"2a02:7aa0:161a::/33", "43513"}, + {"2a0f:d500::/29", "208425"}, + {"2402:800:318d::/43", "7552"}, + {"2402:c00::/32", "9268"}, + {"2409:877b::/29", "9808"}, + {"240e:3b5:7a00::/32", "140313"}, + {"240e:95d:2000::/37", "4134"}, + {"2600:1003:b100::/41", "6167"}, + {"2607:f7a8:827::/38", "46887"}, + {"2620:122:f001::/46", "14870"}, + {"2a00:1678:baba::/48", "49453"}, + {"2a00:5881:8100::/40", "60630"}, + {"2a02:ee80:412d::/43", "3573"}, + {"2a0f:607:150a::/48", "210932"}, + {"2001:df2:e700::/48", "136397"}, + {"2400:3a60:ff0::/35", "149051"}, + {"240a:a9d4::/32", "145166"}, + {"2600:100a:b040::/44", "6167"}, + {"2620:101:c000::/40", "3359"}, + {"2804:75c8::/32", "271069"}, + {"2806:28c:2000::/36", "265529"}, + {"2a02:868:8000::/34", "8820"}, + {"2405:d180:1::/46", "9506"}, + {"2408:8957:8500::/40", "17816"}, + {"240e:528::/25", "4134"}, + {"2605:6c00::/44", "2734"}, + {"2804:45f8::/32", "266958"}, + {"2804:53e8::/32", "268615"}, + {"2a00:fe0::/32", "34953"}, + {"2001:67c:19d0::/48", "43770"}, + {"2001:da8:302a::/45", "24358"}, + {"2001:1248:5a51::/44", "11172"}, + {"2001:4398::/32", "328411"}, + {"2400:cb00:120::/44", "13335"}, + {"2604:2dc0::/32", "16276"}, + {"2a05:3580:c400::/36", "35807"}, + {"2a07:a6c0::/29", "3267"}, + {"240a:ae62::/32", "146332"}, + {"2001:438:fffd:112::/60", "6461"}, + {"2001:560::/32", "18530"}, + {"2400:ed00:1::/48", "7595"}, + {"240a:ada6::/32", "146144"}, + {"2804:3e8::/47", "28663"}, + {"2804:4024:3001::/32", "265937"}, + {"2a02:28:2::/45", "8359"}, + {"2a02:4722::/29", "201333"}, + {"2a0c:6600:1::/46", "48011"}, + {"2001:559:507::/48", "33652"}, + {"2a06:1287:40::/48", "12406"}, + {"2001:559:80c7::/44", "33662"}, + {"2804:954:700::/36", "263073"}, + {"2a02:2e02:15c0::/38", "12479"}, + {"2a0e:97c0:170::/48", "58057"}, + {"2001:c20:48c4::/48", "9255"}, + {"2401:d800:5e0::/38", "7552"}, + {"2800:190:2::/45", "11664"}, + {"2001:559:7dc::/48", "33659"}, + {"2402:a00:96::/47", "45916"}, + {"2403:4c0::/33", "17639"}, + {"240a:a56b::/32", "144037"}, + {"240a:ad58::/32", "146066"}, + {"240e:49:6000::/32", "4134"}, + {"2607:fb10:7144::/43", "2906"}, + {"2804:79d0::/32", "271329"}, + {"2402:cf80:100a::/47", "136468"}, + {"240a:a551::/32", "144011"}, + {"2600:6c38:187::/44", "20115"}, + {"2620:1ec:912::/38", "8075"}, + {"2804:689c::/32", "269704"}, + {"2a0f:bb00::/29", "34856"}, + {"2001:4479:e000::/38", "7545"}, + {"2800:bf0:8300::/44", "52257"}, + {"2401:d800:7bd0::/37", "7552"}, + {"2406:e240::/48", "131976"}, + {"2408:8956:7600::/40", "17622"}, + {"240e:27f:3::/32", "4134"}, + {"2620:131:1000::/45", "26450"}, + {"2a00:16d8::/41", "42695"}, + {"2001:559:8199::/48", "7015"}, + {"2400:2000::/45", "17676"}, + {"2604:d600:503::/44", "32098"}, + {"2806:2f0:92c6::/42", "17072"}, + {"2a01:7a40::/32", "48483"}, + {"2a02:26f7:e480::/48", "36183"}, + {"2001:559:5bb::/48", "21508"}, + {"2001:559:c4d3::/48", "7015"}, + {"2620:ab:4000::/48", "393681"}, + {"2a02:26f7:b5::/48", "20940"}, + {"2a05:90c0::/29", "42812"}, + {"2409:8c00:7841::/32", "9808"}, + {"2620:115:6::/44", "18888"}, + {"2804:d84:cad::/32", "28171"}, + {"2a0b:3780::/32", "206487"}, + {"2a0d:b201:f090::/42", "206026"}, + {"2a10:2ec1::/32", "208861"}, + {"2001:559:809d::/48", "33652"}, + {"240a:a018::/32", "142674"}, + {"240a:a2df::/32", "143385"}, + {"2605:9d80:8041::/48", "4134"}, + {"2001:550:d0d::/38", "174"}, + {"2404:8d00:1c10::/32", "24378"}, + {"2001:250:818::/48", "23910"}, + {"240e:438:6e40::/35", "4134"}, + {"2a00:79e1:f11::/48", "395973"}, + {"2a00:b6c0::/29", "35170"}, + {"2402:dc40:4::/47", "134331"}, + {"2406:daa0:6080::/44", "16509"}, + {"2409:896a:9a00::/39", "9808"}, + {"2803:ca20::/32", "265849"}, + {"2804:23e0::/32", "264189"}, + {"2804:7298::/48", "270863"}, + {"2001:4238::/32", "30844"}, + {"2a0f:600:604::/46", "51044"}, + {"2804:5130::/34", "268436"}, + {"2804:6314::/32", "269337"}, + {"2001:7d8::/32", "12329"}, + {"2001:c20:484a::/43", "3758"}, + {"2401:d800:79f0::/38", "7552"}, + {"2800:3c0:10a0::/39", "19863"}, + {"2a02:e98::/32", "24641"}, + {"2a02:ee80:41b6::/44", "3573"}, + {"2a10:4646:70::/44", "211405"}, + {"2001:559:c424::/48", "7922"}, + {"2409:8924:2f00::/35", "56046"}, + {"240a:a8fd::/32", "144951"}, + {"2a0a:2846::/48", "136796"}, + {"2001:270::/32", "3786"}, + {"240a:a5db::/32", "144149"}, + {"240a:a87a::/32", "144820"}, + {"2a03:cc00:fc1::/32", "9183"}, + {"2001:559:41d::/46", "7922"}, + {"2402:e7c0:440::/36", "59078"}, + {"2606:18c0:26::/47", "14445"}, + {"2804:1590::/32", "263395"}, + {"2a02:26f7:63::/48", "20940"}, + {"2a02:26f7:d550::/48", "36183"}, + {"2001:678:63c::/48", "39566"}, + {"2001:4978:1002::/45", "13331"}, + {"2001:559:8390::/48", "33657"}, + {"2001:4be0::/32", "31703"}, + {"2a0d:b00:3502::/48", "205862"}, + {"2a11:ef80::/29", "204790"}, + {"2401:4900:30b0::/41", "45609"}, + {"2600:6c39:608::/42", "20115"}, + {"2602:fd86:1::/48", "400113"}, + {"2804:8dc::/32", "262395"}, + {"2a00:5ec0::/32", "197581"}, + {"2001:67c:184::/48", "25111"}, + {"2409:8902::/31", "38019"}, + {"2804:22a0:e::/40", "264112"}, + {"2a01:8e20::/32", "12843"}, + {"2001:5b0:6500::/38", "6621"}, + {"2001:df4:3500::/48", "17439"}, + {"2001:4600::/24", "2119"}, + {"240a:a30b::/32", "143429"}, + {"240e:13:801::/48", "140853"}, + {"2603:c0ec:2000::/40", "54253"}, + {"2a00:6d47::/36", "205727"}, + {"2404:0:7000::/40", "131142"}, + {"240a:a170::/32", "143018"}, + {"2800:160:201b::/42", "14259"}, + {"2804:6690::/32", "269568"}, + {"2a02:2978::/32", "15830"}, + {"2409:8057:306d::/43", "56040"}, + {"240a:a889::/32", "144835"}, + {"240a:af5f::/32", "146585"}, + {"2600:1d00::/28", "3128"}, + {"2804:197c::/32", "61797"}, + {"2804:383c:5::/38", "52601"}, + {"2804:5cbc:fa40::/37", "268927"}, + {"2a02:26f7:f784::/48", "36183"}, + {"2a06:f040::/32", "5420"}, + {"2001:3c8:1012::/48", "24475"}, + {"2600:1800:9::/43", "16552"}, + {"2603:fb48::/29", "40676"}, + {"2804:7f74::/46", "271689"}, + {"2a00:4802:a50::/42", "13124"}, + {"2a09:bac0:172::/48", "13335"}, + {"2a0f:5701:3100::/40", "205593"}, + {"2404:9ac0::/32", "37981"}, + {"2620:149:1b01::/32", "714"}, + {"2806:2f0:7081::/46", "17072"}, + {"2001:559:8680::/48", "33650"}, + {"240a:a1c5::/32", "143103"}, + {"240a:af2a::/32", "146532"}, + {"2620:12c:9030::/47", "395359"}, + {"2804:314:402e::/47", "61568"}, + {"2804:71e4::/32", "270818"}, + {"2804:5c58::/32", "268903"}, + {"2a0b:d580::/29", "206350"}, + {"2c0f:ea38::/32", "328527"}, + {"2402:800:517f::/40", "7552"}, + {"2405:f080:2a00::/48", "136907"}, + {"2804:30c0::/32", "264972"}, + {"2a0d:26c0::/32", "209041"}, + {"2a0e:7d40::/41", "209833"}, + {"2001:559:c2e8::/48", "7015"}, + {"2001:67c:2bac::/48", "12886"}, + {"2803:b300::/32", "52455"}, + {"2a01:280:338::/48", "42303"}, + {"2404:3d00:417a::/47", "21433"}, + {"2804:47d0::/32", "267078"}, + {"2a00:1138:7400::/32", "43782"}, + {"2604:1a00::/44", "46887"}, + {"2806:5:201::/32", "6503"}, + {"2a02:26f0:e201::/39", "20940"}, + {"2a05:d014::/36", "16509"}, + {"2a06:e80::/36", "43350"}, + {"2400:cb00:336::/44", "13335"}, + {"2406:840:fcc0::/44", "132623"}, + {"2408:84f3:2c50::/44", "17816"}, + {"2409:8914:b000::/39", "56044"}, + {"2600:6c2e:627::/43", "20115"}, + {"2800:4f0:560::/46", "28006"}, + {"2a0a:e440::/48", "42240"}, + {"2001:df0:37c0::/48", "141296"}, + {"2001:df4:f680::/48", "136360"}, + {"240e:438:6620::/43", "140647"}, + {"2600:6c2e:373::/37", "20115"}, + {"2804:7374::/32", "270916"}, + {"2a06:8a00::/32", "12307"}, + {"2409:8f04:d600::/34", "24547"}, + {"240c:c716::/26", "23910"}, + {"2600:6c38:851::/45", "20115"}, + {"2804:2050:5a7f::/40", "264485"}, + {"2401:d800:100::/42", "7552"}, + {"2402:e80:41::/48", "23901"}, + {"240a:af43::/32", "146557"}, + {"2602:fc09:d2f::/48", "13780"}, + {"2604:6600:fe9c::/39", "40676"}, + {"2a0e:8f02:2110::/44", "213326"}, + {"2407:3380::/32", "64063"}, + {"2604:1900::/40", "12182"}, + {"2804:206c::/32", "264490"}, + {"2a0d:e4c4:5000::/32", "208861"}, + {"2a0a:e8c0::/32", "205412"}, + {"2001:559:487::/48", "7015"}, + {"2404:7600:101::/32", "23853"}, + {"2803:77c0::/32", "52290"}, + {"2001:67c:14e0::/45", "25516"}, + {"2408:8907:9000::/44", "4808"}, + {"2409:8b54::/28", "56040"}, + {"2a01:cc00::/32", "47377"}, + {"2a04:e4c0:20::/45", "36692"}, + {"2001:e48:40:5::/64", "22317"}, + {"240a:a125::/32", "142943"}, + {"2804:5a94::/32", "268782"}, + {"2a0c:a580::/29", "62206"}, + {"2a0f:f980::/29", "60262"}, + {"2402:1440::/42", "63689"}, + {"2404:7ac0:607::/48", "139216"}, + {"2600:9000:22fd::/48", "16509"}, + {"2602:fff6:7::/48", "54561"}, + {"2603:c023::/35", "31898"}, + {"2604:ca00:116::/42", "36492"}, + {"2a01:52e0::/32", "57325"}, + {"2605:a401:8bc7::/42", "33363"}, + {"2a02:dc00:200::/48", "15493"}, + {"2a05:4145:1::/48", "211522"}, + {"2a05:9f40:1f::/48", "42831"}, + {"2001:dcd:23::/48", "14618"}, + {"240e:6:d020::/48", "140527"}, + {"2600:1006:b140::/42", "6167"}, + {"2a03:5640:f561::/36", "2906"}, + {"2001:559:8107::/48", "7725"}, + {"240a:a732::/32", "144492"}, + {"240e:3bb:9200::/36", "140317"}, + {"2806:2f0:9503::/42", "17072"}, + {"2a0f:5707:af05::/48", "211358"}, + {"2804:7b58:10::/32", "4"}, + {"2a02:26f7:bc80::/48", "36183"}, + {"2804:d70:50::/39", "52626"}, + {"2404:bf40:a481::/42", "139084"}, + {"2409:8a51:d00::/38", "56047"}, + {"240a:ab5e::/32", "145560"}, + {"240e:44d:5840::/42", "140350"}, + {"2600:80a:861::/31", "701"}, + {"2a01:280:348::/47", "3166"}, + {"2a0a:6bc0::/29", "60059"}, + {"2402:5380::/32", "63980"}, + {"240a:a920::/32", "144986"}, + {"2600:1404:d401::/38", "20940"}, + {"2607:f3f8:8001::/33", "17378"}, + {"2804:3774:2500::/33", "266416"}, + {"2a00:79e1:f0c::/47", "36384"}, + {"2a02:26f7:d744::/48", "36183"}, + {"2001:67c:510::/51", "15486"}, + {"240e:438:7640::/36", "4134"}, + {"2602:feda:de0::/46", "142641"}, + {"2a00:7ce0::/32", "60832"}, + {"2a0e:97c0:690::/46", "210354"}, + {"2a10:3ac0::/29", "204790"}, + {"2001:559:80be::/48", "7922"}, + {"2409:8771::/29", "9808"}, + {"240e:3ba:5600::/34", "4134"}, + {"2600:2000:1002::/47", "33517"}, + {"2001:559:80a8::/48", "33667"}, + {"240a:a791::/32", "144587"}, + {"2804:1b2:d000::/39", "18881"}, + {"2804:6384::/32", "269366"}, + {"2a06:3980::/29", "34694"}, + {"2405:f080:1500::/38", "136907"}, + {"240e:3b2:3e00::/33", "140308"}, + {"2804:1ac:581c::/40", "53175"}, + {"2a00:d520::/29", "15600"}, + {"2a0e:f42::/32", "208627"}, + {"2001:559:1a2::/48", "33652"}, + {"2a02:26f7:fa45::/46", "20940"}, + {"2001:559:c28f::/43", "21508"}, + {"2606:7100:1cac::/34", "21581"}, + {"2607:f110:47::/43", "21889"}, + {"2a0a:3340::/29", "25424"}, + {"2402:800:6381::/42", "7552"}, + {"240e:438:8240::/37", "4134"}, + {"240e:980:8e00::/39", "4134"}, + {"2a07:6fc0::/48", "205948"}, + {"2a11:29c1:b00b::/48", "212149"}, + {"240e:966:3000::/33", "4134"}, + {"2804:768:2000::/35", "52977"}, + {"2a02:26f7:f851::/42", "20940"}, + {"2a02:29a0::/32", "56472"}, + {"2a04:d340::/29", "60717"}, + {"2405:9000:81::/44", "7474"}, + {"2600:1406:3e01::/33", "20940"}, + {"2804:7b58::/44", "4"}, + {"2a0b:4540::/29", "42011"}, + {"2a0e:b107:150::/44", "62075"}, + {"2001:559:5c9::/48", "7922"}, + {"2001:4278::/32", "8346"}, + {"2001:448a:7090::/42", "7713"}, + {"2409:8054:21::/45", "56040"}, + {"240a:a189::/32", "143043"}, + {"2620:68:2000::/48", "397335"}, + {"2620:90::/48", "174"}, + {"2a02:26f7:fb80::/48", "36183"}, + {"2a05:3580:24::/46", "35807"}, + {"2001:678:474::/48", "205866"}, + {"2001:1248:9ad5::/42", "11172"}, + {"2001:44b8:1066::/44", "7545"}, + {"240a:ae91::/32", "146379"}, + {"2a07:1e01::/32", "207446"}, + {"2409:8907:7e20::/39", "24547"}, + {"2604:2d80:f400::/36", "30036"}, + {"2a0f:b100:300::/40", "208074"}, + {"2001:559:2eb::/48", "33651"}, + {"2603:fba0::/25", "397165"}, + {"2a02:26f7:d58c::/48", "36183"}, + {"2a07:2400::/29", "48402"}, + {"2a0e:fd45:da2::/45", "44103"}, + {"2800:bf0:8095::/44", "27947"}, + {"2605:a7c0:131::/44", "16509"}, + {"2607:4100:4000::/34", "19171"}, + {"2607:f0d0:2200::/36", "36351"}, + {"2620:119:1000::/48", "33004"}, + {"2620:130:1000::/48", "62649"}, + {"2804:be4::/44", "52840"}, + {"2804:454c::/32", "266917"}, + {"2a03:2880:f240::/46", "32934"}, + {"2a06:9880::/29", "203713"}, + {"2a0e:b107:23a::/45", "209419"}, + {"2a10:c5c1:c0de::/48", "211547"}, + {"2001:550:100:4::/63", "174"}, + {"2401:4900:1c88::/47", "24560"}, + {"240e:3be:7a00::/32", "140313"}, + {"2a00:eab::/32", "9211"}, + {"2a02:503:8::/48", "51955"}, + {"2a04:3800::/48", "44417"}, + {"2a05:1220::/29", "201625"}, + {"2001:559:c2db::/45", "7015"}, + {"2402:3a80:1368::/40", "38266"}, + {"2409:800b:2c04::/48", "9808"}, + {"2804:35f0:9000::/33", "266316"}, + {"2a02:26f7:d044::/48", "36183"}, + {"2a02:26f7:f3c5::/46", "20940"}, + {"2408:8956:8b00::/40", "17816"}, + {"240a:aa30::/32", "145258"}, + {"2001:678:ef8::/48", "202592"}, + {"240a:a837::/32", "144753"}, + {"2600:1419:1601::/36", "20940"}, + {"2804:3f5c::/32", "265887"}, + {"2407:e1c0:90::/32", "146872"}, + {"2804:2d1c::/32", "265262"}, + {"2a02:26f7:dc48::/48", "36183"}, + {"2a05:b0c1::/48", "198412"}, + {"2001:4998:15::/46", "10310"}, + {"2402:800:5263::/43", "7552"}, + {"2803:f100::/32", "52255"}, + {"2a06:e881:5800::/45", "204003"}, + {"2a09:fe40::/29", "400522"}, + {"2c0f:f130::/32", "37642"}, + {"2804:2440::/32", "52686"}, + {"2804:4098:f180::/36", "265969"}, + {"2a02:26f7:e589::/42", "20940"}, + {"2a0a:ec04::/32", "42692"}, + {"2001:559:853a::/48", "7015"}, + {"2409:8b18::/31", "134810"}, + {"240a:a277::/32", "143281"}, + {"240e:983:105::/38", "4134"}, + {"2606:1380::/32", "22079"}, + {"2606:e580::/32", "14237"}, + {"2620:0:2280::/48", "26827"}, + {"2804:2030:8000::/33", "262651"}, + {"2a00:e68::/29", "15743"}, + {"2a02:8060::/31", "6752"}, + {"2a0c:8480::/30", "5400"}, + {"2a10:dcc0::/29", "34907"}, + {"2408:840d:5000::/42", "17621"}, + {"2606:5000:5a00::/37", "209"}, + {"2404:a340::/32", "135273"}, + {"2408:8256:377b::/48", "17816"}, + {"240a:a69f::/32", "144345"}, + {"2600:6c38:45e::/39", "20115"}, + {"2607:f5d8:20::/48", "2553"}, + {"2a00:10a0:c::/32", "35745"}, + {"2a02:180::/32", "35366"}, + {"2a02:26f7:f901::/45", "20940"}, + {"2a0e:b107:1560::/45", "209209"}, + {"2a02:2e02:ff0::/35", "12479"}, + {"2001:1248:84dc::/46", "11172"}, + {"2406:b480:204::/48", "24538"}, + {"2409:8055:3020::/47", "9808"}, + {"2a0e:a780::/36", "16509"}, + {"2001:559:483::/48", "7016"}, + {"2001:559:80fb::/48", "33660"}, + {"2400:cb00:14::/46", "13335"}, + {"240e:960:d00::/29", "4134"}, + {"2620:138:301e::/48", "23344"}, + {"2a02:26f7:df85::/44", "20940"}, + {"2a03:e6c0::/32", "199420"}, + {"2001:559:73c::/48", "21508"}, + {"2603:c013:6000::/36", "31898"}, + {"2a02:26f7:e940::/48", "36183"}, + {"2a02:cb80:4010::/41", "43766"}, + {"2a11:2d40::/29", "204790"}, + {"2401:d800:b910::/42", "7552"}, + {"2402:e280:3da7::/43", "134674"}, + {"240a:a2ba::/32", "143348"}, + {"240a:a6f3::/32", "144429"}, + {"2a02:26f7:d14d::/46", "20940"}, + {"2a03:2880:f040::/46", "32934"}, + {"2001:678:270::/48", "206128"}, + {"2600:141b:b001::/36", "20940"}, + {"2804:5cac::/32", "268923"}, + {"2a07:241::/29", "3170"}, + {"2001:1248:870a::/45", "11172"}, + {"2402:8100:27d2::/44", "55644"}, + {"2a00:d68::/32", "24594"}, + {"2001:4878:c136::/48", "12222"}, + {"240e:6bd::/36", "140317"}, + {"2001:468:700::/48", "20080"}, + {"240e:5f::/33", "4134"}, + {"2603:c002:1310::/37", "31898"}, + {"2a00:79e0:101::/48", "36385"}, + {"2a09:dec0::/29", "43424"}, + {"2402:800:38d3::/44", "7552"}, + {"240a:ae19::/32", "146259"}, + {"2803:6900:609::/48", "52423"}, + {"2a00:8740:10::/47", "49037"}, + {"2a06:a001:a090::/45", "208814"}, + {"2a09:4d46::/32", "44066"}, + {"2a0e:b107:bf4::/48", "140938"}, + {"2600:1406:c401::/36", "20940"}, + {"2804:2348::/32", "264153"}, + {"2a0e:3780::/36", "41652"}, + {"2001:e60:d720::/43", "4766"}, + {"2a02:26f7:b6c8::/48", "36183"}, + {"2a02:6720::/32", "201890"}, + {"2a04:f580:9050::/48", "4809"}, + {"2a07:1e80::/29", "57795"}, + {"240a:add6::/32", "146192"}, + {"2001:559:ba::/47", "33654"}, + {"2620:13e:3000::/40", "397326"}, + {"2a10:7c40::/29", "212751"}, + {"2001:678:17c::/48", "201163"}, + {"2001:12e0:2000::/36", "10429"}, + {"2404:bf40:a701::/35", "139084"}, + {"2605:a7c0:110::/48", "14618"}, + {"2804:139c::/32", "52908"}, + {"2a00:1d58:f823::/45", "47524"}, + {"2a02:21b2:beee::/48", "57370"}, + {"2a02:26f7:f9c5::/46", "20940"}, + {"2a0a:56c4:8100::/47", "42649"}, + {"2a0c:9700::/29", "57376"}, + {"2806:230:100d::/48", "11888"}, + {"2001:559:86cd::/48", "7922"}, + {"2001:ac8::/44", "9009"}, + {"2403:2800:3::/32", "38566"}, + {"2804:7598:c000::/48", "265442"}, + {"2a00:60a0::/32", "42339"}, + {"2a01:8840:99::/48", "207266"}, + {"2a0a:4440::/32", "207242"}, + {"2001:df0:c80::/48", "58499"}, + {"240e:d:c000::/30", "4134"}, + {"2606:38c0::/32", "399307"}, + {"2607:d980::/32", "10271"}, + {"2804:45e4::/33", "262567"}, + {"2a02:13f8::/32", "25260"}, + {"2a02:2e02:1520::/41", "12479"}, + {"2a07:a380::/29", "15426"}, + {"2a02:26f0:504::/38", "20940"}, + {"2a07:2e40::/32", "2259"}, + {"2c0f:fd98:8110::/48", "28698"}, + {"2001:559:c3d0::/47", "7922"}, + {"240a:a3b3::/32", "143597"}, + {"2606:ae00:8300::/40", "7287"}, + {"2801:184:e::/47", "264817"}, + {"2001:678:3fc::/48", "197422"}, + {"2001:df6:b400::/48", "138148"}, + {"2001:e68::/46", "4788"}, + {"2408:8459:c10::/41", "17622"}, + {"2620:b0:4000::/48", "209"}, + {"2a01:820::/32", "30722"}, + {"2a0f:d480::/48", "205942"}, + {"2001:4878:2048::/48", "12222"}, + {"2405:da40::/32", "140220"}, + {"240a:a91c::/32", "144982"}, + {"2800:3e0::/32", "1239"}, + {"2001:559:812b::/48", "33490"}, + {"2001:67c:67c::/48", "15404"}, + {"2404:bf40:8185::/42", "139084"}, + {"240e:980:4100::/40", "4811"}, + {"2600:370f:4024::/43", "32261"}, + {"2800:400::/46", "27668"}, + {"2804:11d8::/32", "263443"}, + {"2a03:3ec0::/32", "61124"}, + {"2001:559:148::/48", "33491"}, + {"2408:8459:b230::/41", "17622"}, + {"2800:110:2801::/35", "4270"}, + {"2a04:4c0::/29", "58321"}, + {"2a04:5c85:4000::/36", "207161"}, + {"2408:8956:d100::/38", "17816"}, + {"2409:8050:1002::/40", "56047"}, + {"2803:c510::/32", "272019"}, + {"2804:2bec::/32", "265184"}, + {"2a0a:9e00::/44", "61317"}, + {"2c0f:f378::/32", "36941"}, + {"2001:550:a90a::/38", "174"}, + {"2001:628:453::/48", "1120"}, + {"240e:878:1d0::/44", "4134"}, + {"2804:5f00:11::/32", "269070"}, + {"2408:8459:ea50::/37", "17816"}, + {"2600:c02:b021::/33", "12182"}, + {"2a02:a30:173::/32", "8926"}, + {"2001:559:c1::/48", "33667"}, + {"2001:559:307::/48", "33489"}, + {"2605:7c0:1006::/44", "19382"}, + {"2804:7bf4::/32", "271465"}, + {"2001:559:4aa::/48", "13367"}, + {"2400:cb00:200::/44", "13335"}, + {"2402:6800:765::/32", "22822"}, + {"2804:527c::/32", "268521"}, + {"2a01:4c8:f401::/48", "2856"}, + {"2001:559:82d6::/48", "33287"}, + {"2a01:758:fffd::/46", "3326"}, + {"2402:800:341d::/42", "7552"}, + {"240a:a61e::/32", "144216"}, + {"2804:2e68::/32", "265344"}, + {"2a10:9902:73f::/48", "211972"}, + {"2402:800:7be0::/37", "7552"}, + {"240e:3bc:2200::/37", "136198"}, + {"2620:1d5:6f0::/36", "14773"}, + {"2800:ba0:22::/48", "263812"}, + {"2804:6c30::/32", "270451"}, + {"2a01:2c0:23db::/48", "9179"}, + {"2a01:758:8300::/45", "15785"}, + {"2a0d:2582:120::/43", "211367"}, + {"2a0f:c583::/29", "210625"}, + {"2001:4b20:1000:2515::/32", "34288"}, + {"240a:a9a0::/32", "145114"}, + {"2804:12e8::/32", "53082"}, + {"2a02:26f7:f3c1::/46", "20940"}, + {"2a06:940::/48", "207333"}, + {"2001:559:ac::/48", "33489"}, + {"2600:1010:9e10::/40", "22394"}, + {"2405:8a00:801d::/46", "55824"}, + {"2a00:f46:1000::/31", "43447"}, + {"2a0f:e200::/47", "60781"}, + {"2402:800:7780::/42", "7552"}, + {"2406:840:fbb3::/45", "139058"}, + {"2804:2df8:eebf::/41", "265315"}, + {"2409:8d80:9000::/34", "56040"}, + {"2001:559:768::/48", "7016"}, + {"2402:800:f8f2::/39", "7552"}, + {"2406:840:f100::/47", "39753"}, + {"2a00:fc80::/48", "60781"}, + {"2001:67c:1684::/48", "16104"}, + {"240e:58:d000::/31", "4812"}, + {"2804:5408::/32", "268624"}, + {"2a02:ec0::/38", "41653"}, + {"2a02:26f7:c3cc::/48", "36183"}, + {"2001:4c8:1104::/44", "15290"}, + {"2001:559:7d4::/48", "7725"}, + {"2001:4de0:aaa0::/44", "34343"}, + {"2408:84f3:4a40::/32", "17816"}, + {"2600:1419:1e01::/34", "20940"}, + {"2605:1640::/32", "19681"}, + {"2a09:27c0::/29", "209531"}, + {"2001:559:c3a0::/48", "7725"}, + {"2402:800:9ee0::/44", "7552"}, + {"2607:f690::/32", "7029"}, + {"2620:12d:4000::/44", "53988"}, + {"2a06:2800::/29", "25579"}, + {"2a11:b580::/29", "204790"}, + {"2c0f:f698::/32", "37693"}, + {"240e:64:c000::/24", "4134"}, + {"2600:1008:6000::/44", "6167"}, + {"2600:370f:3665::/40", "32261"}, + {"2804:1dc::/32", "53202"}, + {"2a06:6541:1241::/48", "8220"}, + {"2a0a:f000::/32", "207210"}, + {"2401:d800:d070::/40", "7552"}, + {"240a:aae0::/32", "145434"}, + {"2001:559:592::/48", "33491"}, + {"240a:a5c2::/32", "144124"}, + {"2602:ffe4:c1c::/48", "21859"}, + {"2a03:2c80::/32", "31084"}, + {"2804:14d:ecf3::/39", "28573"}, + {"2a04:f480::/34", "25373"}, + {"2001:df0:310::/48", "17547"}, + {"2602:feda:1bf::/48", "133846"}, + {"2620:74:77::/48", "11840"}, + {"2804:8184::/32", "272459"}, + {"2620:12e:1000::/47", "396075"}, + {"2a00:8d60::/32", "60720"}, + {"2001:400:2410::/48", "3152"}, + {"2408:802c::/32", "4837"}, + {"2804:41b0::/38", "267450"}, + {"2a03:8de0::/32", "41887"}, + {"2001:df0:45::/48", "37918"}, + {"2a05:3951::/32", "201503"}, + {"2001:250:2c12::/48", "23910"}, + {"2001:559:53f::/48", "33650"}, + {"2001:1248:5525::/44", "11172"}, + {"2401:d800:94a0::/41", "7552"}, + {"2804:67a4:3::/39", "269641"}, + {"2806:20d:191a::/40", "32098"}, + {"2a11:5701:b00b::/48", "212149"}, + {"2602:808:a000::/48", "14618"}, + {"2a03:b240::/32", "3250"}, + {"2a0a:e200:1511::/36", "33438"}, + {"2402:dfc0:40::/44", "137805"}, + {"2600:380:fe00::/31", "20057"}, + {"2604:f400:7::/48", "29930"}, + {"2803:760:7800::/32", "269816"}, + {"2804:a84:4400::/32", "262296"}, + {"2804:76cc:2000::/32", "271135"}, + {"2a04:4e40:cc00::/48", "54113"}, + {"2001:67c:1009::/48", "44522"}, + {"240a:aa6f::/32", "145321"}, + {"2606:4700:8d70::/44", "13335"}, + {"2a01:a520::/32", "62002"}, + {"2c0f:f250::/32", "37678"}, + {"2001:4cd0::/29", "8551"}, + {"2401:d800:5a00::/41", "7552"}, + {"2a02:e0:14::/34", "34984"}, + {"2001:7f8:49::/48", "20530"}, + {"2001:df4:a300::/48", "135817"}, + {"2001:1248:9737::/41", "11172"}, + {"2408:8456:dc40::/38", "17816"}, + {"240a:a6c6::/32", "144384"}, + {"2a09:9f40::/31", "1239"}, + {"2406:9740::/32", "131642"}, + {"240a:ab04::/32", "145470"}, + {"240e:d:b800::/37", "136194"}, + {"2602:fd86:2::/36", "33412"}, + {"2804:5374::/32", "268585"}, + {"2a06:e881:108::/48", "206633"}, + {"2001:200:600::/40", "7667"}, + {"2402:2600::/32", "17813"}, + {"240a:a919::/32", "144979"}, + {"240e:979:5f00::/34", "4134"}, + {"2604:5500:7000::/38", "19165"}, + {"2607:f928:13::/45", "22645"}, + {"2804:30a0::/32", "264965"}, + {"2804:78a8::/32", "271257"}, + {"2a0d:1a45::/42", "57782"}, + {"2c0f:fdf8::/32", "37028"}, + {"240e:44d:5300::/41", "140345"}, + {"2804:18:7820::/43", "10429"}, + {"2a06:5dc0::/29", "25542"}, + {"2a10:4640:ffff::/48", "212815"}, + {"2001:559:54::/46", "7922"}, + {"2404:ffc0:12::/45", "62707"}, + {"2405:7000:2c00::/40", "18281"}, + {"2600:1419:9c01::/34", "20940"}, + {"2604:5d00::/32", "11915"}, + {"2620:0:2f0::/48", "32629"}, + {"2a01:488:bb10::/45", "20773"}, + {"2a02:26f7:d845::/46", "20940"}, + {"2a05:9407::/32", "15626"}, + {"2001:1448::/32", "16245"}, + {"2400:89c0:3010::/44", "37936"}, + {"2408:84f3:3240::/44", "17623"}, + {"240a:a8f9::/32", "144947"}, + {"2604:6600:fdc1::/38", "40676"}, + {"2801:1e6::/44", "27951"}, + {"2a0b:3540:8::/47", "397964"}, + {"2001:559:9a::/47", "7922"}, + {"240a:a54d::/32", "144007"}, + {"2606:ce80:6900::/40", "33438"}, + {"2607:8300::/46", "13876"}, + {"2001:559:c503::/48", "33659"}, + {"2402:4d40::/32", "24479"}, + {"2406:35c0::/32", "38038"}, + {"2605:9cc0:302::/48", "14618"}, + {"2606:69c0:5000::/36", "11039"}, + {"2405:9800:9806::/43", "45430"}, + {"240a:a6f7::/32", "144433"}, + {"2804:408c::/32", "265966"}, + {"2804:4224::/32", "267480"}, + {"2a02:fa8:c410::/44", "399104"}, + {"2408:8956:800::/40", "17622"}, + {"2600:1417:f800::/48", "25019"}, + {"2804:3dcc::/32", "266554"}, + {"2001:559:8339::/48", "33661"}, + {"240e:978:1600::/36", "4134"}, + {"2806:230:1017::/48", "11888"}, + {"2001:250:340a::/48", "138438"}, + {"2409:8904:6270::/40", "24547"}, + {"2800:b70:801::/48", "262191"}, + {"2a0a:59c7:100b::/45", "204724"}, + {"2600:1012:b100::/42", "6167"}, + {"2600:6c21:416::/44", "20115"}, + {"2804:c48:ef01::/35", "52687"}, + {"2a00:9780::/32", "50928"}, + {"2a06:bdc7:1a::/32", "62240"}, + {"240a:ada1::/32", "146139"}, + {"2607:f7c0:c100::/34", "36444"}, + {"2a01:aea0:df3::/45", "40980"}, + {"2a0b:4342:1a30::/44", "57695"}, + {"2401:fd80:ffb1::/48", "139853"}, + {"2403:780::/44", "64098"}, + {"240e:55:4000::/30", "4134"}, + {"2804:83f0::/32", "272230"}, + {"2406:2d40::/34", "36492"}, + {"2406:3340::/35", "139139"}, + {"2a0b:6800:1::/46", "42695"}, + {"240a:af13::/32", "146509"}, + {"2602:fed0::/36", "396109"}, + {"2a10:52c0::/48", "60078"}, + {"2001:559:395::/48", "7922"}, + {"2001:16a2:3616::/39", "39386"}, + {"2405:9800:c90a::/47", "45430"}, + {"2408:8756:af1::/45", "136958"}, + {"240a:a118::/32", "142930"}, + {"240a:a17c::/32", "143030"}, + {"2806:2f0:3483::/42", "17072"}, + {"2a05:93c5::/32", "39134"}, + {"2a07:f80::/29", "45033"}, + {"2001:1248:98b8::/45", "11172"}, + {"240a:a4d9::/32", "143891"}, + {"240e:878:1f0::/44", "4134"}, + {"2a03:5440::/29", "42541"}, + {"2a0b:4d07:301::/48", "44239"}, + {"2001:559:8430::/46", "33287"}, + {"2404:8380::/32", "135158"}, + {"240a:a810::/32", "144714"}, + {"2a06:e881:5600::/48", "203478"}, + {"2001:559:8348::/48", "33287"}, + {"2001:4dc8::/36", "16316"}, + {"2406:8700::/32", "7575"}, + {"240a:ad21::/32", "146011"}, + {"2804:6b5c::/32", "270395"}, + {"2a02:26f7:d60d::/42", "20940"}, + {"2a10:1e40::/29", "206173"}, + {"2001:1248:4343::/45", "11172"}, + {"2409:8c30:150::/35", "9808"}, + {"2605:bb00:4000::/34", "18672"}, + {"2804:5df4::/32", "269003"}, + {"2a02:26f7:b908::/48", "36183"}, + {"2806:230:201f::/48", "11888"}, + {"2001:559:81bf::/48", "21508"}, + {"2402:800:5371::/44", "7552"}, + {"2402:c800:ff7b::/48", "18131"}, + {"2406:f240::/32", "131963"}, + {"2a02:26f7:c145::/46", "20940"}, + {"2a02:cb80:2110::/48", "43766"}, + {"2a04:7501::/32", "62373"}, + {"2001:559:162::/48", "7016"}, + {"2001:559:c437::/48", "7015"}, + {"2409:8915:8e00::/39", "56044"}, + {"2603:f470::/24", "397165"}, + {"2604:d600:1573::/44", "32098"}, + {"2806:370:7200::/44", "28403"}, + {"2a02:26f7:de49::/42", "20940"}, + {"2803:82c0::/32", "264832"}, + {"2804:14d:4000::/42", "28573"}, + {"2804:1b54:c000::/34", "61722"}, + {"2804:5954::/32", "268183"}, + {"2a07:3500:12c0::/48", "212778"}, + {"2001:218:3004::/48", "20940"}, + {"2001:438::/42", "6461"}, + {"240e:3b6:7800::/39", "4134"}, + {"2620:13c:a0a0::/47", "19367"}, + {"2001:67c:1088::/47", "8426"}, + {"2001:bf0:e000::/31", "12732"}, + {"2401:8a40:3c::/46", "45326"}, + {"2402:e380:306::/48", "135646"}, + {"2620:11b:4018::/48", "19210"}, + {"2804:1f34::/32", "262679"}, + {"2804:318c::/39", "265023"}, + {"2001:480:240::/48", "687"}, + {"2001:559:446::/48", "7015"}, + {"2001:559:847e::/48", "33657"}, + {"2a00:4802:2c0::/44", "13124"}, + {"2a02:26f7:c8c4::/48", "36183"}, + {"2a04:1700::/29", "41354"}, + {"2a0b:11c0:92::/48", "198682"}, + {"2a0e:fd45:4100::/34", "44103"}, + {"2401:b400::/48", "58536"}, + {"2402:8100:21a0::/43", "55644"}, + {"2804:33b4::/32", "265412"}, + {"2a02:26f7:ed80::/48", "36183"}, + {"2a09:65c0::/32", "48045"}, + {"2001:4888:8010::/44", "22394"}, + {"2607:f3f8:7000::/36", "17378"}, + {"2a03:47c0:2401::/40", "21277"}, + {"2a0a:3640::/29", "29504"}, + {"2001:7f0:3004::/33", "13237"}, + {"2001:44b8:400::/48", "7545"}, + {"2402:b500::/48", "38203"}, + {"240a:abaa::/32", "145636"}, + {"2804:694:4c90::/38", "262596"}, + {"2a04:1b00::/47", "61005"}, + {"2a05:8940::/30", "8468"}, + {"2a05:b7c0::/48", "61400"}, + {"2c0f:f128::/32", "37629"}, + {"2001:550:5c00:100::/45", "174"}, + {"2001:1248:871d::/46", "11172"}, + {"2401:5700::/32", "131447"}, + {"2407:4a00::/32", "56055"}, + {"2409:8051:3900::/32", "9808"}, + {"2607:fb10:70e4::/44", "2906"}, + {"2620:0:2220::/48", "15318"}, + {"2806:2f0:4063::/40", "17072"}, + {"2001:67c:233c::/48", "47438"}, + {"2800:160:1dca::/43", "14259"}, + {"2001:1a11:26::/48", "42298"}, + {"2604:9b00:c00::/46", "14230"}, + {"2001:fd8:161::/46", "4775"}, + {"2607:f3a0:2000::/35", "40061"}, + {"2804:27ec::/32", "263929"}, + {"2a03:6f20::/32", "201146"}, + {"2a05:e40::/35", "59909"}, + {"2a09:8900::/29", "210303"}, + {"2a11:b180::/29", "204790"}, + {"240a:aa68::/32", "145314"}, + {"2600:cc0e::/32", "32298"}, + {"2804:2bdc:900::/32", "265181"}, + {"2806:2f0:70e1::/46", "17072"}, + {"2001:559:156::/48", "7015"}, + {"2600:6c38:718::/47", "20115"}, + {"2a02:26f7:e505::/46", "20940"}, + {"240e:62:d000::/36", "140308"}, + {"2804:7e38::/32", "269561"}, + {"2a0c:140::/29", "31631"}, + {"2a0e:e2c0::/32", "42282"}, + {"2001:559:c4f9::/48", "7015"}, + {"2600:6c7f:9300::/44", "19115"}, + {"2804:4d2c::/32", "267416"}, + {"2a0c:9bc0::/29", "25415"}, + {"2001:678:f28::/48", "211523"}, + {"2804:1784:b::/39", "263152"}, + {"2804:37f0:b100::/36", "266445"}, + {"2001:559:809e::/48", "33668"}, + {"2001:559:c0e8::/48", "33662"}, + {"2001:1250:d000::/44", "22894"}, + {"2404:ea80::/38", "135373"}, + {"2804:14d:9eb1::/41", "28573"}, + {"2a0f:c707::/32", "39384"}, + {"2001:df3:4400::/48", "133969"}, + {"240a:a76c::/32", "144550"}, + {"2804:3f20::/32", "266641"}, + {"2001:678:b90::/48", "35407"}, + {"2404:a140:f::/48", "138915"}, + {"2606:ec0:2000::/36", "14618"}, + {"2a02:26f7:dfc4::/48", "36183"}, + {"2a02:26f7:f604::/48", "36183"}, + {"2a04:207:100::/40", "48101"}, + {"2a0e:e1c0::/29", "15391"}, + {"2401:3c0:113::/48", "45528"}, + {"2409:8a52:700::/36", "56047"}, + {"2a01:b340::/32", "15751"}, + {"2401:d800:db10::/42", "7552"}, + {"2406:da70:c000::/40", "16509"}, + {"240a:a109::/32", "142915"}, + {"2607:f558::/32", "33189"}, + {"2607:fb90:f800::/31", "21928"}, + {"2804:198c::/32", "61802"}, + {"2804:1a68::/32", "262420"}, + {"2a06:f300::/29", "203421"}, + {"2403:c00:11::/48", "17488"}, + {"240a:60:f010::/44", "9605"}, + {"2605:a401:8bbc::/41", "33363"}, + {"2806:230:2013::/48", "11888"}, + {"240e:1:7200::/32", "4134"}, + {"2602:fef4:300::/48", "54721"}, + {"2607:fee0:4100::/32", "3599"}, + {"2a00:86c0:2076::/47", "40027"}, + {"2001:579:e1bc::/38", "22773"}, + {"2804:2314:2::/32", "262811"}, + {"2804:2fc0:4041::/34", "264910"}, + {"2a02:5ba0::/32", "203354"}, + {"2a0c:2580::/30", "211186"}, + {"2405:cc00:5000::/32", "55943"}, + {"240e:951:2400::/38", "138991"}, + {"2600:6c10:40::/44", "20115"}, + {"2803:fe00::/32", "27650"}, + {"2001:559:c15b::/48", "33491"}, + {"2001:da8:2040::/36", "23910"}, + {"2402:800:b040::/42", "7552"}, + {"2804:5fb4::/32", "269118"}, + {"2804:66e4::/32", "269589"}, + {"2001:67c:2b78::/48", "59516"}, + {"2620:171:28::/48", "42"}, + {"2804:5de4::/34", "268999"}, + {"2a02:a48:f000::/36", "49025"}, + {"2a0e:5c41::/30", "57578"}, + {"2001:67c:1268::/48", "203383"}, + {"2804:1168:1e00::/39", "52904"}, + {"2806:108e:26::/48", "8151"}, + {"2001:550:a02::/45", "174"}, + {"240a:a237::/32", "143217"}, + {"2600:9000:1133::/45", "16509"}, + {"2620:107:9000::/43", "22787"}, + {"2a00:1020:e::/32", "24739"}, + {"2a0e:2440::/29", "60781"}, + {"2a11:af01::/32", "210625"}, + {"2001:df6:5e80::/48", "142029"}, + {"2407:b0c0::/32", "131988"}, + {"2409:8000:5200::/37", "9808"}, + {"2a02:878:1::/46", "42632"}, + {"2405:8a00:200b::/42", "55824"}, + {"2603:c002:1f00::/43", "31898"}, + {"2a0e:f600::/42", "60781"}, + {"2001:559:c397::/44", "33657"}, + {"2405:9800:9812::/47", "45430"}, + {"2406:23c0::/48", "131409"}, + {"240e:878:1e0::/44", "137689"}, + {"2604:8400::/32", "25689"}, + {"2620:14::/48", "6481"}, + {"2804:9c8::/32", "262992"}, + {"2402:c800:fff3::/45", "37900"}, + {"240a:ab14::/32", "145486"}, + {"2800:bf0:8312::/35", "27947"}, + {"2a09:5e40::/29", "209424"}, + {"2a0f:3140::/29", "37540"}, + {"2001:470:84::/44", "6939"}, + {"2001:559:85d3::/45", "7922"}, + {"2001:da8:7008::/46", "24363"}, + {"2800:160:11e1::/43", "14259"}, + {"2806:266:501::/48", "27672"}, + {"2a00:c00:f030::/46", "24467"}, + {"2a00:7e40:80e::/48", "1301"}, + {"2a02:8070::/31", "3209"}, + {"2001:559:845a::/48", "33651"}, + {"2001:1318::/35", "3597"}, + {"2400:4c80::/35", "7632"}, + {"2402:800:549b::/41", "7552"}, + {"2402:3a80:1cd0::/42", "38266"}, + {"2408:8957:6c00::/40", "17622"}, + {"2606:5240:f1bf::/36", "6649"}, + {"2001:559:c1f8::/47", "7922"}, + {"2804:46cc::/32", "267012"}, + {"2001:559:c3f3::/48", "7922"}, + {"2403:7300::/32", "55891"}, + {"2606:e800:200::/39", "25843"}, + {"2607:f4e8:411::/48", "23059"}, + {"2804:4e90::/32", "268269"}, + {"2a02:5f83:d0cd::/39", "39811"}, + {"2a0b:2180:1::/48", "204995"}, + {"2804:52f4:a50::/42", "268552"}, + {"2a02:5fa0::/32", "198545"}, + {"2a0e:5880::/29", "211626"}, + {"2405:1c0:6181::/46", "55303"}, + {"240a:ae51::/32", "146315"}, + {"2607:fdf0:5e19::/45", "8008"}, + {"2a02:fa0::/32", "35191"}, + {"2408:8456:c00::/42", "17622"}, + {"2603:c012:a000::/36", "31898"}, + {"2a0e:b107:b50::/44", "213064"}, + {"2400:cb00:a2e0::/47", "13335"}, + {"240a:a3ce::/32", "143624"}, + {"2600:1008:b1d0::/42", "6167"}, + {"2602:fe19:6400::/48", "62623"}, + {"2804:3050::/32", "264943"}, + {"2409:8753:f00::/35", "56047"}, + {"2409:8c0c:400::/30", "56042"}, + {"2803:5c80:6593::/48", "64114"}, + {"2a0c:bfc0::/29", "61998"}, + {"2a11:5b00::/32", "62269"}, + {"2001:559:1c9::/48", "33652"}, + {"2001:559:711::/48", "33490"}, + {"240a:ac01::/32", "145723"}, + {"2a03:fc80::/29", "15366"}, + {"2001:df1:2600::/48", "59151"}, + {"2406:c700::/32", "9358"}, + {"2620:109:a006::/44", "15294"}, + {"2001:559:8292::/48", "33657"}, + {"2620:74:27::/48", "396566"}, + {"2a0e:2c00::/29", "63023"}, + {"2403:ba00::/34", "24521"}, + {"240a:add7::/32", "146193"}, + {"2600:100f::/32", "22394"}, + {"2806:310:18::/46", "16960"}, + {"2a03:75a0::/32", "31736"}, + {"2401:d800:f920::/41", "7552"}, + {"2404:8d06:2100::/35", "10089"}, + {"240a:a8e1::/32", "144923"}, + {"2607:f0d0:4::/46", "36351"}, + {"2a05:ba00::/32", "207595"}, + {"2a0e:46c4:2940::/48", "138435"}, + {"2001:559:84a0::/46", "33660"}, + {"2602:fd2f:10::/44", "33229"}, + {"2600:e000:8000::/38", "22995"}, + {"2a03:2d40::/38", "198056"}, + {"2a05:e5c0::/29", "200977"}, + {"2a0b:4341:a0e::/48", "57695"}, + {"2804:14c:578c::/41", "28573"}, + {"2a00:5b00::/29", "33986"}, + {"2a01:4f0:4017::/48", "31027"}, + {"2a03:efc0:700::/40", "33438"}, + {"2001:559:8129::/46", "7922"}, + {"2001:559:c0cd::/46", "33287"}, + {"2401:d800:d810::/42", "7552"}, + {"2402:800:9563::/43", "7552"}, + {"2404:8e80:2::/47", "45881"}, + {"2405:9000:91::/38", "7474"}, + {"2409:8c3c:1300::/40", "9808"}, + {"240e:874:2c0::/42", "4134"}, + {"2803:9800:a083::/43", "11664"}, + {"2600:380:f10b::/48", "64011"}, + {"2600:1402:c01::/35", "20940"}, + {"2602:feda:adb::/45", "140362"}, + {"2804:84ac::/32", "28223"}, + {"2402:76c0::/32", "137449"}, + {"2a02:fe1:d100::/29", "41164"}, + {"2a0d:2e40::/29", "208861"}, + {"2406:3000:30::/47", "4657"}, + {"2406:cf00::/48", "23724"}, + {"240e:45c:b300::/40", "140537"}, + {"2600:1801:14::/30", "16552"}, + {"2800:5f0:2001::/42", "22724"}, + {"2804:802c:201::/46", "271734"}, + {"2a06:e881:531a::/48", "209859"}, + {"2406:9680::/32", "17635"}, + {"2408:8256:316c::/48", "17816"}, + {"240e:45c:c300::/40", "140536"}, + {"2604:d600:1580::/44", "32098"}, + {"2804:2cac:bbbc::/33", "265234"}, + {"2408:8256:d98::/38", "17622"}, + {"2600:6c10:41d::/46", "20115"}, + {"2801:80:3960::/44", "270693"}, + {"2a02:ab80::/28", "21334"}, + {"2001:559:49e::/48", "33287"}, + {"2001:678:604::/48", "49824"}, + {"2602:107:910::/48", "10838"}, + {"2604:9d40:1f9::/48", "7018"}, + {"2800:160:1ff9::/46", "14259"}, + {"2a0b:7980::/29", "208272"}, + {"2001:468:ef02::/40", "11537"}, + {"2001:678:898::/48", "62445"}, + {"2406:c500:ffd2::/48", "4764"}, + {"240a:abe3::/32", "145693"}, + {"2a00:e78:7000::/36", "34602"}, + {"2409:8055:28::/48", "9808"}, + {"2804:e24:fec0::/39", "262417"}, + {"2804:415c::/32", "267428"}, + {"2806:2f0:9dc3::/42", "17072"}, + {"2a06:dc40::/29", "29182"}, + {"2a10:c80::/29", "56786"}, + {"2403:7100:a::/48", "142033"}, + {"2401:1840::/32", "136001"}, + {"2401:ff40::/32", "137080"}, + {"2804:7be8:c00a::/45", "271462"}, + {"2a00:4b00:100::/42", "41935"}, + {"2a04:dc00::/29", "56990"}, + {"2a11:5580::/29", "61192"}, + {"2a01:358:401e::/47", "9121"}, + {"2a02:2010:22a0::/45", "20978"}, + {"2a02:2e02:86d0::/39", "12479"}, + {"2a11:5d00::/29", "210863"}, + {"240e:3b8:f100::/37", "134775"}, + {"2803:7200:800e::/43", "27696"}, + {"2a0a:7240::/32", "206082"}, + {"2001:43f8:1f3::/48", "37474"}, + {"2620:fe::/48", "19281"}, + {"2001:559:8231::/48", "33650"}, + {"2405:1c0:6481::/46", "55303"}, + {"2602:80b:a001::/48", "399791"}, + {"2001:fd8:331::/41", "4775"}, + {"2001:4408:8510::/38", "4758"}, + {"2402:800:51ee::/38", "7552"}, + {"2408:8456:8e40::/39", "17816"}, + {"2804:2138::/32", "264543"}, + {"2a0b:3140::/29", "204790"}, + {"2001:bf7::/39", "44194"}, + {"2001:4878:c164::/48", "12222"}, + {"2400:cb00:80::/47", "13335"}, + {"240a:a3ea::/32", "143652"}, + {"2600:1009:a000::/43", "6167"}, + {"2a00:1910::/29", "29551"}, + {"2a0c:b642:2000::/44", "34641"}, + {"2001:67c:219c::/48", "49542"}, + {"2804:7aa4::/32", "271383"}, + {"2a06:f900::/36", "56630"}, + {"2a0d:58c0::/29", "202932"}, + {"2804:2a84::/32", "264076"}, + {"2a00:4800:1b0::/41", "8717"}, + {"2a0c:3080::/48", "204809"}, + {"2001:4488::/45", "7713"}, + {"2001:4870:a24b::/45", "3549"}, + {"2404:bf40:f801::/48", "2764"}, + {"2607:f160:a::/45", "6167"}, + {"2a0b:3901:2::/29", "58310"}, + {"2001:559:82fc::/47", "7922"}, + {"2001:559:c2d9::/48", "33657"}, + {"2001:579:e22c::/39", "22773"}, + {"2400:4000::/22", "4713"}, + {"2402:800:fb10::/42", "7552"}, + {"2602:ff96:10::/48", "26548"}, + {"2804:8520::/32", "272559"}, + {"2405:e4c0::/32", "131677"}, + {"2409:8d28::/29", "56041"}, + {"240a:a288::/32", "143298"}, + {"2804:7388::/32", "270921"}, + {"2806:265:501::/48", "13999"}, + {"240a:a601::/32", "144187"}, + {"240e:44d:6440::/42", "140348"}, + {"2804:1b08:facf::/37", "61704"}, + {"2804:2820::/32", "263942"}, + {"2804:3c58::/32", "266205"}, + {"2804:7a28::/34", "271351"}, + {"2602:fd9d::/36", "26576"}, + {"2804:1ea8::/32", "264442"}, + {"2a10:3a40::/29", "204790"}, + {"2001:4408:4500::/45", "4758"}, + {"2600:140b:4400::/48", "31109"}, + {"2a00:7180:8000::/46", "208157"}, + {"2001:559:8393::/48", "7015"}, + {"2001:1a11:14c::/48", "8781"}, + {"2402:800:b3d0::/37", "7552"}, + {"2600:380:2600::/36", "20057"}, + {"2602:fd3a:228::/48", "16509"}, + {"2620:132:f3a1::/37", "394977"}, + {"2001:559:c024::/48", "33667"}, + {"2400:cb00:a4c0::/47", "13335"}, + {"2408:84ee:c000::/27", "4837"}, + {"2804:2ec4::/32", "265365"}, + {"2804:6ef4::/34", "270629"}, + {"2a05:bec0:41::/29", "197071"}, + {"2804:7e4:8100::/33", "52865"}, + {"2804:33c0::/32", "265415"}, + {"2a06:3f40::/29", "21466"}, + {"2406:4440:f00::/43", "38008"}, + {"2600:1010:b1d0::/42", "6167"}, + {"2804:1b08::/37", "61704"}, + {"2c0e:2201::/30", "37457"}, + {"2001:44b8:1052::/47", "7545"}, + {"2402:600:1001::/32", "38515"}, + {"2402:800:9201::/44", "7552"}, + {"2620:171:13::/48", "42"}, + {"2804:8370::/32", "272198"}, + {"2a05:5000::/29", "207225"}, + {"2001:df2:3c00::/45", "63950"}, + {"2402:3a80:c059::/48", "38266"}, + {"240e:f7:7000::/36", "136190"}, + {"240e:982:a100::/38", "4812"}, + {"2804:3694::/32", "266357"}, + {"2001:559:84e2::/44", "7016"}, + {"2602:fe59:30::/48", "46432"}, + {"2804:5218::/32", "268494"}, + {"2a0d:4d00:81::/48", "62303"}, + {"2400:4d40::/47", "134204"}, + {"2402:8100:2683::/44", "55644"}, + {"2600:9000:200f::/42", "16509"}, + {"2606:4600::/32", "23118"}, + {"2804:62f0:b102::/33", "269329"}, + {"2a10:4180::/29", "399975"}, + {"240a:4092:c000::/35", "58834"}, + {"2801:124::/44", "270030"}, + {"2a01:ac00::/32", "9066"}, + {"2a03:5b80::/32", "20870"}, + {"2001:df4:9300::/48", "134305"}, + {"2406:840:e112::/48", "141712"}, + {"2a01:cde0:c010::/48", "16028"}, + {"2001:7fd::/32", "25152"}, + {"2001:df0:4b00::/48", "9723"}, + {"2409:8087:4f1::/39", "24547"}, + {"240e:244:300::/28", "4134"}, + {"2600:1405:7801::/32", "20940"}, + {"2a10:bc0::/29", "62240"}, + {"2001:df3:800::/47", "22787"}, + {"2402:800:9c8d::/42", "7552"}, + {"240a:adb2::/32", "146156"}, + {"2600:141b:5801::/37", "20940"}, + {"2600:6c33:4c2::/38", "20115"}, + {"2600:6c38:a99::/46", "20115"}, + {"2608:121:d::/32", "721"}, + {"2620:c1:4000::/48", "26988"}, + {"2804:1250:c000::/34", "263469"}, + {"2a00:5a60::/48", "199274"}, + {"2a0d:1700::/29", "30791"}, + {"2001:2000:1::/36", "1299"}, + {"2409:8008:d2::/45", "24547"}, + {"2604:2e80:2400::/38", "30036"}, + {"2604:fd80::/32", "62688"}, + {"2803:1a00:1114::/37", "262186"}, + {"2804:2cb8:40::/32", "265239"}, + {"2001:1248:a51b::/42", "11172"}, + {"2001:1900:2356::/44", "3356"}, + {"2405:9800:c91e::/48", "45458"}, + {"2804:5dec::/32", "269001"}, + {"2804:67b0::/32", "269644"}, + {"2a0c:8fc0::/32", "202401"}, + {"2a10:c280::/32", "212059"}, + {"2001:3c8:2808::/48", "141714"}, + {"240e:3ba:f700::/36", "4134"}, + {"2804:7d68::/32", "271559"}, + {"2001:67c:26c::/48", "211731"}, + {"2001:1388:6644::/35", "6147"}, + {"2401:f400::/32", "9269"}, + {"240e:106:c000::/34", "4812"}, + {"2803:3a00:1800::/37", "23243"}, + {"2803:7200:8012::/45", "27696"}, + {"2804:504c:6000::/32", "268380"}, + {"2a10:5b80::/29", "25793"}, + {"2a11:2800:4::/48", "14445"}, + {"2001:d30::/46", "4717"}, + {"2403:7f40:ff00::/48", "20473"}, + {"2804:74a8::/39", "270995"}, + {"2a07:22c1:c002::/48", "207649"}, + {"2800:160:1f95::/46", "14259"}, + {"2806:106e:5::/48", "8151"}, + {"2a02:26f7:9c::/48", "36183"}, + {"2a03:8a80::/32", "12930"}, + {"2a0a:7880:1ff::/48", "206677"}, + {"2001:250:2c13::/42", "138381"}, + {"2409:896a:3200::/39", "9808"}, + {"2600:1f70:8000::/40", "14618"}, + {"2602:fed2:7189::/48", "53356"}, + {"2605:34c0:e000::/36", "397449"}, + {"2a02:88d:8210::/44", "48695"}, + {"2001:559:5fa::/48", "7725"}, + {"2600:1417:800::/48", "24319"}, + {"2602:feda:dd0::/44", "46997"}, + {"2605:dd40:5bbc::/37", "398549"}, + {"2803:9800:988d::/41", "11664"}, + {"2806:20d:5208::/46", "32098"}, + {"2a0d:2640::/29", "60501"}, + {"2001:250:6c42::/47", "138370"}, + {"2001:550:6800:2::/38", "174"}, + {"2001:559:2e2::/48", "33287"}, + {"2602:fde6::/36", "10796"}, + {"2a0c:55c0:1::/48", "43009"}, + {"2a0c:c181::/32", "46844"}, + {"2001:67c:528::/48", "50222"}, + {"2403:0:608::/32", "4755"}, + {"2408:870c::/44", "138421"}, + {"2001:67c:988::/48", "207716"}, + {"2001:1248:a024::/44", "11172"}, + {"2404:bf40:c4c1::/39", "139084"}, + {"2604:e100:3::/45", "33028"}, + {"2606:4a00:1100::/40", "18572"}, + {"2620:100:f00d::/48", "46571"}, + {"2001:678:944::/48", "34015"}, + {"2001:708:11::/32", "1741"}, + {"2801:11:8800::/48", "19429"}, + {"2806:286:a800::/33", "265524"}, + {"2a03:16a0::/32", "15397"}, + {"2a02:d8:800d::/33", "44654"}, + {"2a02:2e02:9cf0::/39", "12479"}, + {"2a0a:be80::/29", "43391"}, + {"2a0e:b107:1134::/44", "212121"}, + {"2001:559:c406::/48", "7015"}, + {"2001:67c:1b9c::/48", "9143"}, + {"2001:bf7:870::/35", "44194"}, + {"2a01:55e4::/30", "201709"}, + {"2a0b:2900:4100::/38", "48582"}, + {"2001:df7:3480::/48", "42960"}, + {"240a:a28c::/32", "143302"}, + {"2602:fed2:fd0::/44", "49134"}, + {"2605:a401:8758::/45", "33363"}, + {"2804:37f0:e900::/35", "266445"}, + {"2c0f:e9f0::/32", "328748"}, + {"2001:559:c0f6::/47", "21508"}, + {"2402:e380:312::/48", "139073"}, + {"2404:1c40:4f::/48", "24432"}, + {"2602:feb4:180::/44", "25961"}, + {"2602:feda:da0::/44", "142055"}, + {"2001:550:210b::/38", "174"}, + {"2400:7400:76::/48", "23736"}, + {"2405:8a40::/32", "139161"}, + {"2602:fd60:ff0::/48", "137908"}, + {"2804:8420::/32", "272241"}, + {"2a03:6300::/32", "15497"}, + {"2a04:4900::/29", "64401"}, + {"2a04:a900:2::/48", "43067"}, + {"2a0b:6800::/48", "12552"}, + {"2a0f:2a40::/29", "399975"}, + {"2001:480:121::/41", "668"}, + {"2001:df4:6180::/48", "132515"}, + {"2400:8f80::/47", "45638"}, + {"2400:c540:3::/45", "59238"}, + {"2403:2300::/32", "56309"}, + {"2a02:26f7:c585::/46", "20940"}, + {"2001:559:846f::/48", "33651"}, + {"2605:c5c0::/32", "395853"}, + {"2804:5d18::/32", "268950"}, + {"2a02:2000:5::/32", "35297"}, + {"2a09:3440::/29", "400522"}, + {"2a11:3e80::/29", "204790"}, + {"2401:d800:b262::/40", "7552"}, + {"240a:ae52::/32", "146316"}, + {"2a0f:7680::/29", "42316"}, + {"2c0f:fce8::/33", "37153"}, + {"2001:2093::/20", "1299"}, + {"2402:800:969b::/42", "7552"}, + {"2a00:8a20::/32", "60745"}, + {"2a01:8840:16::/44", "12041"}, + {"2407:c300::/32", "133043"}, + {"2604:9000:2101::/32", "19693"}, + {"2001:559:c222::/48", "33667"}, + {"2001:67c:2fc4::/48", "197936"}, + {"2001:4bd8::/41", "15725"}, + {"2400:dc00:4002::/48", "131111"}, + {"2401:d800:7760::/40", "7552"}, + {"2600:140f:7800::/48", "9498"}, + {"2a02:26f7:da88::/48", "36183"}, + {"2001:1388:8a00::/44", "264684"}, + {"2402:800:3ee0::/44", "7552"}, + {"2404:4a00:7a00::/64", "55423"}, + {"240a:a07f::/32", "142777"}, + {"2a06:a000:1e0::/48", "206804"}, + {"2a10:b600::/32", "212241"}, + {"2001:579:7f07::/32", "22773"}, + {"2607:fc48:bc6b::/48", "40009"}, + {"2620:131:1005::/42", "26450"}, + {"2804:5dc:880::/32", "53019"}, + {"2001:559:2a0::/48", "20214"}, + {"2001:559:c2b8::/48", "33287"}, + {"240a:a6cb::/32", "144389"}, + {"2604:d600:157a::/45", "32098"}, + {"2607:f6f0:203::/48", "19930"}, + {"2806:2f0:2240::/39", "17072"}, + {"2a0f:5680::/47", "60906"}, + {"2001:559:c294::/48", "33667"}, + {"2001:67c:16c4::/48", "199612"}, + {"2404:7ac0:608::/48", "4842"}, + {"2404:8500::/32", "55470"}, + {"240a:aa5a::/32", "145300"}, + {"2604:7a40:1200::/34", "394710"}, + {"2605:d9c0::/32", "32361"}, + {"2607:3380::/40", "395152"}, + {"2a02:cb43:8004::/48", "20546"}, + {"2a0f:2880:100::/38", "208164"}, + {"2404:e040::/32", "63773"}, + {"2405:9800:b013::/44", "133481"}, + {"240a:ad3b::/32", "146037"}, + {"2600:1405:3001::/36", "20940"}, + {"2600:370f:5090::/42", "32261"}, + {"2603:90c8::/30", "11955"}, + {"2804:44c0::/32", "267651"}, + {"2a00:4802:3a0::/44", "13124"}, + {"2400:4d40:302::/44", "134204"}, + {"2600:1407:c01::/35", "20940"}, + {"2804:30c4:1800::/37", "264973"}, + {"2a02:ee80:41d4::/46", "3573"}, + {"2001:250:7035::/48", "24369"}, + {"2001:559:4a8::/48", "33657"}, + {"2406:340::/32", "140576"}, + {"240a:aa83::/32", "145341"}, + {"240e:30f:5600::/27", "4134"}, + {"2804:2228::/32", "264595"}, + {"2804:83a0::/32", "272209"}, + {"2a00:54c0::/32", "41966"}, + {"2407:a640::/32", "146753"}, + {"2602:ff05::/36", "55009"}, + {"2804:20fc::/42", "264525"}, + {"2804:5cb8::/32", "268926"}, + {"2001:559:5dc::/48", "7922"}, + {"2409:8904:9090::/39", "24547"}, + {"2800:320:8003::/48", "27882"}, + {"2801:80:2a00::/44", "271107"}, + {"2804:5278::/32", "268520"}, + {"2804:6928::/32", "270252"}, + {"2a04:2b00:14bb::/48", "204055"}, + {"2001:c20:c816::/48", "3758"}, + {"2402:800:3571::/44", "7552"}, + {"2602:107:2c10::/48", "20115"}, + {"2a06:2980::/29", "42695"}, + {"2a0c:58c0::/29", "205254"}, + {"2405:9200:2100::/41", "131596"}, + {"2409:8055:55::/44", "56040"}, + {"2620:20:a000::/48", "16539"}, + {"2800:5f0:203b::/45", "22724"}, + {"2803:cae0:2::/48", "27951"}, + {"2804:1a94::/32", "61869"}, + {"2a07:7800:2::/48", "31727"}, + {"2a09:7::/48", "43959"}, + {"2a0a:aec0::/29", "6830"}, + {"2001:559:3ee::/48", "33491"}, + {"2804:3c9c::/32", "266224"}, + {"2001:250:fe01::/48", "24372"}, + {"2405:8a00:6036::/35", "55824"}, + {"2406:9600::/32", "10208"}, + {"2602:ff01::/48", "396101"}, + {"2607:fb10:70e0::/47", "2906"}, + {"2804:7da8::/32", "271575"}, + {"2a01:c9c0:8010::/48", "2285"}, + {"2407:4ec0::/45", "134012"}, + {"2408:8459:ed50::/38", "17816"}, + {"2409:8c28:2809::/39", "56041"}, + {"240a:a1e8::/32", "143138"}, + {"240e:438:9e40::/34", "4134"}, + {"2803:db00:a81::/32", "262234"}, + {"2804:1e60::/32", "264425"}, + {"2a05:ad00::/29", "56803"}, + {"2a06:5400::/29", "62341"}, + {"2001:1248:a002::/48", "11172"}, + {"2001:12f0:dc0::/38", "1916"}, + {"240a:a856::/32", "144784"}, + {"2a06:a004:8000::/33", "44570"}, + {"2406:45c0::/32", "64300"}, + {"2605:99c0::/32", "394775"}, + {"2800:3c0:2060::/40", "19863"}, + {"2804:4c7c::/32", "267373"}, + {"2600:9000:2170::/40", "16509"}, + {"2620:ee:8000::/48", "16881"}, + {"2804:104c:8800::/40", "263629"}, + {"2001:1a11:145::/48", "42298"}, + {"2620:0:2f00::/41", "693"}, + {"2803:5b20:2000::/33", "27735"}, + {"2402:ef19::/39", "7633"}, + {"2804:79d4::/32", "271330"}, + {"2403:9800:7800::/38", "4771"}, + {"240a:a739::/32", "144499"}, + {"2a06:52c0:1::/46", "201483"}, + {"2001:3c8:4008::/35", "4621"}, + {"2001:16a2:c3a0::/41", "39386"}, + {"240a:a3c9::/32", "143619"}, + {"2604:ee00::/48", "18865"}, + {"2620:13d:d000::/44", "6461"}, + {"2804:84cc:2100::/33", "272541"}, + {"2403:fbc0:2000::/48", "23959"}, + {"2804:37f0:1900::/34", "266445"}, + {"240a:a1cf::/32", "143113"}, + {"2600:380:b380::/37", "20057"}, + {"2801:0:180::/48", "19429"}, + {"2a02:26f7:bd01::/46", "20940"}, + {"2a0e:aa06:400::/45", "209306"}, + {"2001:67c:29ec::/48", "58298"}, + {"2402:5080::/32", "133959"}, + {"2408:8645:1200::/32", "4837"}, + {"2610:a1:1071::/48", "397228"}, + {"2a03:2881:3::/43", "32934"}, + {"240a:a331::/32", "143467"}, + {"240a:adf8::/32", "146226"}, + {"2600:1408:6401::/36", "20940"}, + {"2600:3006:1400::/31", "13649"}, + {"2600:370f:7265::/44", "32261"}, + {"2620:79:3::/45", "30013"}, + {"2620:11a:c081::/48", "394192"}, + {"2801:1e:e800::/48", "262186"}, + {"2804:6dc4::/32", "270554"}, + {"2409:8a15:3c00::/32", "56044"}, + {"240a:a017::/32", "142673"}, + {"2a01:7a0::/30", "29066"}, + {"2001:4de0:2000::/39", "33438"}, + {"2402:2f80:5::/46", "134451"}, + {"2001:559:845d::/48", "33667"}, + {"2404:e801:2015::/44", "55430"}, + {"2408:8256:1796::/41", "17622"}, + {"2a03:90c0:5d0::/42", "199524"}, + {"2a04:d480::/35", "25291"}, + {"2a07:fa00::/29", "8888"}, + {"2001:4490:da00::/46", "9829"}, + {"2804:268::/32", "262812"}, + {"2804:7fe4::/32", "271716"}, + {"2a02:120:2::/48", "41887"}, + {"2001:559:c2a7::/48", "21508"}, + {"2403:a040:1688::/48", "38047"}, + {"240e:925:4000::/30", "4134"}, + {"2a0c:1040::/29", "204382"}, + {"2a0e:b107:1600::/44", "210842"}, + {"2a0f:9400:800f::/48", "211767"}, + {"2607:d100::/32", "394844"}, + {"2001:4878:2215::/46", "12222"}, + {"2400:cb00:a880::/47", "13335"}, + {"2407:39c0::/32", "133653"}, + {"240a:a9e7::/32", "145185"}, + {"2607:ffd8:213::/48", "17048"}, + {"2804:568::/37", "262514"}, + {"2804:3ac0::/32", "266107"}, + {"2a03:5640:f51a::/42", "2906"}, + {"2001:250:813::/48", "138182"}, + {"2001:da8:4022::/44", "24353"}, + {"2001:16a2:c200::/44", "39891"}, + {"2408:8256:668::/39", "17622"}, + {"2409:8054:10::/48", "9808"}, + {"2605:64c0:2::/32", "63294"}, + {"2804:7b44::/32", "271421"}, + {"2001:67c:11ac::/48", "199470"}, + {"2a00:b3a1::/32", "31027"}, + {"2a02:c6c7::/32", "58061"}, + {"2a0f:f40::/29", "60262"}, + {"2409:8a29::/27", "9808"}, + {"2600:40f0:f::/40", "701"}, + {"2803:b3a0::/32", "267755"}, + {"2803:b510::/32", "272032"}, + {"2804:4780::/32", "267058"}, + {"2a01:190:151f::/40", "1764"}, + {"2a0c:9a40:8020::/44", "212925"}, + {"240a:a247::/32", "143233"}, + {"240e:3b9:5600::/34", "4134"}, + {"2620:115:10::/41", "18888"}, + {"2a00:bfc0::/35", "34757"}, + {"2a0e:fd40:200::/48", "60557"}, + {"2402:800:9c55::/42", "7552"}, + {"2606:f900:ae01::/33", "812"}, + {"2801:be::/32", "263610"}, + {"2804:850c::/32", "272554"}, + {"2a02:2168::/29", "42610"}, + {"2001:df5:c780::/48", "137033"}, + {"2606:18c0::/48", "14445"}, + {"2804:50fc::/34", "268423"}, + {"2c0f:e8e0:40d0::/34", "327926"}, + {"2001:4878:a228::/48", "12222"}, + {"2402:800:320f::/43", "7552"}, + {"2409:8904:d490::/39", "24547"}, + {"2605:a401:875e::/40", "33363"}, + {"2804:1094::/32", "263641"}, + {"2804:6f18::/32", "270638"}, + {"2804:333c::/32", "265383"}, + {"2a0e:fb47::/32", "29182"}, + {"2001:500:20a::/45", "394353"}, + {"2600:1407:b::/43", "20940"}, + {"2600:140b:9801::/38", "20940"}, + {"2602:fc51::/48", "399114"}, + {"2800:440:8004::/48", "27738"}, + {"2804:48cc::/32", "267145"}, + {"2001:559:84c6::/48", "20214"}, + {"2620:153::/40", "6498"}, + {"2001:49f0:d099::/46", "174"}, + {"2401:d800:5a60::/40", "7552"}, + {"2409:8d80:3000::/33", "9808"}, + {"2607:1d00::/32", "63003"}, + {"2804:405c::/32", "265954"}, + {"2404:9ec0:114::/48", "138919"}, + {"240a:afe5::/32", "146719"}, + {"2602:fcf6:ffc::/48", "210902"}, + {"2a02:808::/29", "35311"}, + {"2a03:a100::/32", "56635"}, + {"2a11:a780::/29", "204790"}, + {"2600:100d:9e10::/40", "22394"}, + {"2a10:5500::/34", "33874"}, + {"2001:470:34::/41", "6939"}, + {"2001:1388:14c4::/36", "6147"}, + {"2404:4c40::/32", "134937"}, + {"2a01:cd00:c000::/41", "28708"}, + {"2001:12ff::/32", "22548"}, + {"240a:aa46::/32", "145280"}, + {"240e:974:1201::/32", "4134"}, + {"2600:6000::/32", "12271"}, + {"2620:7f:e000::/48", "394719"}, + {"2804:196c::/32", "61794"}, + {"2804:4bd8:88::/37", "267332"}, + {"2a00:1ac0::/32", "35260"}, + {"2407:7a40::/32", "142412"}, + {"2a0a:2842:d853::/48", "136796"}, + {"2a0e:97c0:565::/46", "210659"}, + {"2001:4868:225::/37", "701"}, + {"2401:d800:2920::/41", "7552"}, + {"2403:6000:200::/36", "24085"}, + {"2404:af80:14::/47", "38026"}, + {"2407:2140::/32", "141532"}, + {"2605:aa40:c1e4::/48", "18792"}, + {"2a0f:78c0::/29", "205322"}, + {"2605:a401:8c7c::/40", "33363"}, + {"2804:1e58:4::/33", "264422"}, + {"2804:33c8::/32", "265417"}, + {"2a00:c700:c000::/34", "47609"}, + {"2a02:26f7:b78c::/48", "36183"}, + {"2a05:b0c6:6000::/48", "211139"}, + {"2600:140f:c801::/38", "20940"}, + {"2804:1834::/32", "61923"}, + {"2804:4614:e000::/35", "266967"}, + {"2a09:7c40::/32", "43624"}, + {"2a0c:7e42:993c::/48", "20473"}, + {"2001:288::/32", "1659"}, + {"2001:678:22c::/48", "25419"}, + {"2001:67c:144::/48", "41887"}, + {"2001:da8:ef01::/35", "23910"}, + {"2401:af80:9016::/33", "59103"}, + {"2402:6980::/32", "59278"}, + {"2602:fed2:710c::/48", "202479"}, + {"2606:2800:4247::/48", "15133"}, + {"2800:160:160a::/47", "14259"}, + {"2a02:17b8::/32", "34040"}, + {"2a02:26f7:e585::/46", "20940"}, + {"2a0f:3a00::/29", "8647"}, + {"2001:67c:1591::/48", "61317"}, + {"2407:5040:2100::/32", "134715"}, + {"2606:1a40::/45", "398962"}, + {"2620:112:3000::/44", "36459"}, + {"2620:149:a11::/48", "714"}, + {"2800:160:174c::/43", "14259"}, + {"2a02:26f7:b986::/47", "20940"}, + {"2a0c:a9c7:1::/48", "12938"}, + {"2a0f:11c0::/29", "45671"}, + {"2606:4f00:2::/48", "19324"}, + {"2800:300:6240::/37", "27651"}, + {"2a02:2310::/32", "39817"}, + {"2a04:e00:1e::/47", "54103"}, + {"2001:559:c513::/44", "7922"}, + {"2407:a800:3e11::/51", "3949"}, + {"2600:6c20:a92::/45", "20115"}, + {"2804:7188::/32", "270795"}, + {"2a09:7:2006::/48", "205758"}, + {"240a:a3a4::/32", "143582"}, + {"240e:982:d500::/40", "134769"}, + {"2602:fed2:711b::/48", "210715"}, + {"2804:d78::/32", "262444"}, + {"2a03:5d00::/30", "29399"}, + {"2a05:a840::/29", "29424"}, + {"2a12:a540::/29", "400522"}, + {"240a:a676::/32", "144304"}, + {"2600:1003:9440::/44", "6167"}, + {"2600:1806:311::/48", "16552"}, + {"2a00:1110::/29", "5483"}, + {"2a00:1928::/32", "12898"}, + {"2a0e:97c0:2bf::/48", "211553"}, + {"2001:250:400c::/43", "24358"}, + {"2401:4900:4020::/44", "45609"}, + {"2402:e280:2107::/44", "134674"}, + {"2a06:2a80::/29", "201791"}, + {"2001:b08:19::/48", "197467"}, + {"2402:ef21::/36", "7633"}, + {"240e:44d:1000::/42", "140345"}, + {"2a02:2e02:8a10::/40", "12479"}, + {"2a0d:2146:9900::/40", "56894"}, + {"2a0d:e4c4:c000::/34", "208861"}, + {"2400:cb00:a550::/46", "13335"}, + {"240a:a280::/32", "143290"}, + {"2600:5c00:21d0::/48", "20001"}, + {"2607:2c00:9000::/33", "14265"}, + {"2607:ffb0:5001::/46", "6327"}, + {"2804:14d:ac92::/47", "28573"}, + {"2804:95c::/32", "28654"}, + {"2a00:1480:3::/48", "50819"}, + {"240e:3b1:9c00::/34", "140310"}, + {"2607:f710:35::/48", "19624"}, + {"2800:160:1e38::/47", "14259"}, + {"2804:5a78::/32", "268775"}, + {"2a00:e300::/32", "43711"}, + {"2001:67c:25ac::/48", "24597"}, + {"2a02:9e0::/32", "25459"}, + {"2800:110:1020::/48", "61496"}, + {"2804:36f4::/32", "266382"}, + {"2001:4158::/29", "8201"}, + {"2001:4908::/32", "7029"}, + {"2001:4998:170::/48", "10880"}, + {"240a:a1f7::/32", "143153"}, + {"2001:460:a::/41", "3561"}, + {"2001:678:c4::/48", "9066"}, + {"2408:8878::/31", "4837"}, + {"2602:ff65::/36", "33083"}, + {"2620:13f:7008::/48", "51439"}, + {"2a05:1080:10::/48", "61004"}, + {"2001:da8:b010::/48", "23910"}, + {"2804:3b0::/33", "53062"}, + {"2a03:2f00::/32", "29467"}, + {"2001:559:82b6::/48", "7922"}, + {"2800:bf0:a80a::/45", "52257"}, + {"2a0b:b600:2000::/38", "57758"}, + {"2001:13b4:4005::/32", "3356"}, + {"2a0b:2600::/29", "57878"}, + {"2a0b:2900:216d::/40", "48582"}, + {"2a11:7ec0::/29", "204790"}, + {"2001:df4:1b80::/48", "140874"}, + {"240a:a3f9::/32", "143667"}, + {"2804:35f8::/32", "266318"}, + {"2804:4400::/32", "267615"}, + {"2001:559:32f::/48", "33491"}, + {"2404:34c0:2::/48", "138536"}, + {"2409:801e:3009::/45", "9808"}, + {"2606:42c0::/40", "399078"}, + {"2804:2d0c::/40", "262408"}, + {"2a01:8840:f::/48", "40490"}, + {"2a04:c147::/32", "60786"}, + {"2001:67c:2138::/48", "31348"}, + {"2401:d800:5d02::/42", "7552"}, + {"2402:a300:23e8::/48", "55427"}, + {"240a:aadc::/32", "145430"}, + {"2602:fb9d:80::/48", "400554"}, + {"2a09:4e01::/30", "210625"}, + {"2402:800:f380::/42", "7552"}, + {"2001:559:81e8::/48", "33489"}, + {"2001:559:86e2::/48", "33659"}, + {"2604:bb80::/38", "14602"}, + {"2001:1248:5a8d::/43", "11172"}, + {"2001:1a11:87::/43", "42298"}, + {"2406:840:e10f::/48", "134477"}, + {"2409:8a7b::/29", "9808"}, + {"2600:1406:5000::/48", "35994"}, + {"2800:160:1bab::/43", "14259"}, + {"2a00:d78::/32", "1140"}, + {"2c0f:eb00:800::/39", "61266"}, + {"2c0f:fd28::/32", "29091"}, + {"2408:8256:3380::/43", "17623"}, + {"2409:8904:e240::/42", "24547"}, + {"2800:160::/46", "14259"}, + {"2a02:26f7:f6e8::/47", "36183"}, + {"2a04:f580:9270::/48", "4809"}, + {"2001:16a2:803c::/39", "39386"}, + {"2600:1417:6d::/46", "9498"}, + {"2602:fe26::/36", "53740"}, + {"2620:129:1009::/48", "36821"}, + {"2800:160:1857::/44", "14259"}, + {"2001:67c:1134::/48", "205915"}, + {"2001:da8:c000::/44", "24354"}, + {"2001:19f0:c000::/38", "20473"}, + {"2605:41c0:300::/40", "397042"}, + {"2a02:26f7:cfc8::/48", "36183"}, + {"2a03:a420::/32", "51007"}, + {"2a0d:ac00::/48", "205202"}, + {"2001:500:122::/47", "396574"}, + {"2001:559:c382::/48", "13367"}, + {"2401:2880::/32", "17452"}, + {"2401:d800:f530::/41", "7552"}, + {"2604:8540:fc00::/48", "33353"}, + {"2605:4c40:223::/41", "30081"}, + {"2606:4ec0::/32", "399551"}, + {"2804:7998::/32", "271315"}, + {"2a0a:f586::/32", "51837"}, + {"2403:5400::/35", "38450"}, + {"2602:fffa::/36", "29889"}, + {"2804:248:4003::/45", "28598"}, + {"2804:8234::/32", "272505"}, + {"2806:230:6033::/48", "11888"}, + {"2a00:9800::/32", "25227"}, + {"2001:67c:17c0::/48", "204896"}, + {"240a:ad1f::/32", "146009"}, + {"2a02:20f8::/32", "34510"}, + {"2a02:26f7:d::/48", "20940"}, + {"2001:42d0:7a00::/44", "33764"}, + {"2402:800:39c5::/43", "7552"}, + {"2404:bf40:8a00::/47", "7545"}, + {"2409:8a74:1000::/32", "9808"}, + {"2600:370f:5064::/46", "32261"}, + {"2620:0:1654::/48", "6984"}, + {"2804:588::/32", "53014"}, + {"2804:7918::/36", "271743"}, + {"2a00:1230::/29", "20902"}, + {"2402:800:3963::/43", "7552"}, + {"2408:8956:1800::/39", "17622"}, + {"2804:1d0::/32", "262770"}, + {"2a02:c180:1fff::/48", "701"}, + {"2a02:26f7:f648::/48", "36183"}, + {"2404:7f40::/48", "138645"}, + {"2602:ffbc:1::/48", "16628"}, + {"2800:160:783f::/32", "14259"}, + {"2c0f:f6d0:29::/46", "327687"}, + {"2001:67c:484::/48", "35044"}, + {"240e:67e:e200::/39", "140329"}, + {"2607:6b80:1::/46", "46562"}, + {"2607:ff58::/32", "40475"}, + {"2a02:9010:6d::/43", "3352"}, + {"2600:d05:4000::/30", "20161"}, + {"2607:ffd8::/38", "33333"}, + {"2a01:358:401c::/47", "9121"}, + {"2a09:1780::/34", "205718"}, + {"2a10:2f01:3df::/48", "134666"}, + {"2400:9380:9ac0::/44", "136167"}, + {"2620:bc:4000::/48", "394858"}, + {"2a07:6c0::/29", "62116"}, + {"2a0f:fa40::/29", "213162"}, + {"2600:1005:a020::/40", "22394"}, + {"2a09:be40:b200::/40", "34641"}, + {"2a09:e683:4::/48", "213143"}, + {"2a0b:f300:4::/37", "62240"}, + {"2001:559:c113::/48", "7922"}, + {"2a06:a8c0:1::/48", "29017"}, + {"2001:250:4418::/38", "23910"}, + {"2001:559:8093::/48", "7922"}, + {"2001:67c:2918::/48", "212034"}, + {"2001:df7:8380::/48", "131990"}, + {"2409:895a:83f0::/44", "9808"}, + {"2a09:4c0:2d01::/33", "58057"}, + {"240c:ca23::/32", "138371"}, + {"2606:8180::/32", "31769"}, + {"2804:2888:4000::/32", "263967"}, + {"2a11:8f00::/29", "60345"}, + {"2001:67c:12b4::/48", "200564"}, + {"2a00:12a8::/29", "6855"}, + {"2c0f:f400:10fe::/47", "3741"}, + {"240a:aa85::/32", "145343"}, + {"2001:559:87ff::/48", "33651"}, + {"2401:2d00:10::/48", "17625"}, + {"240e:13:803::/48", "140855"}, + {"2001:da8:a022::/48", "23910"}, + {"2400:8b00:c00::/42", "45727"}, + {"2401:1c00:3081::/41", "38809"}, + {"2409:40f3::/29", "55836"}, + {"2409:8080:2aaf::/48", "56040"}, + {"2a0c:a9c7:166::/48", "45029"}, + {"2401:300::/32", "4658"}, + {"2a05:3600::/29", "201290"}, + {"2a07:d881::/30", "43357"}, + {"2a11:9e00::/29", "204790"}, + {"2001:4370::/32", "36915"}, + {"2607:fdf8:1c1::/38", "13649"}, + {"2800:160:1cbc::/41", "14259"}, + {"2800:bf0:282a::/43", "52257"}, + {"2a02:26f7:e8::/48", "36183"}, + {"2a11:3980::/29", "34734"}, + {"2607:f740:14::/46", "36236"}, + {"2804:31b4::/32", "265032"}, + {"2a05:4140:181::/48", "211358"}, + {"2001:df4:ac00::/48", "134347"}, + {"2407:fe80:200::/32", "134749"}, + {"240e:67c:e600::/31", "4134"}, + {"2801:b8::/32", "52886"}, + {"2804:269c:fe45::/48", "47065"}, + {"2a03:5b00::/32", "202695"}, + {"240e:808::/27", "4134"}, + {"2600:6c21:41a::/40", "20115"}, + {"2620:113:8000::/41", "3680"}, + {"2804:84fc:900::/35", "272550"}, + {"2a03:9c40:600::/48", "34655"}, + {"2a07:a980::/32", "1764"}, + {"2a0a:a3c0::/40", "41955"}, + {"240e:f9:8000::/34", "134773"}, + {"2803:2180:8000::/33", "27941"}, + {"2804:1d48::/32", "264358"}, + {"2804:6e04::/35", "270570"}, + {"2804:3bc4::/32", "266169"}, + {"2400:8b00:1800::/42", "45727"}, + {"2607:f140::/32", "25"}, + {"2a02:26f7:b994::/48", "36183"}, + {"2604:4d40:3a00::/40", "213073"}, + {"2800:160:123e::/41", "14259"}, + {"2a00:1ca8:46::/43", "50673"}, + {"2a0b:86c3::/29", "202120"}, + {"2a10:a240::/29", "211694"}, + {"2c0f:f548::/32", "327963"}, + {"2803:9800:a898::/41", "11664"}, + {"2804:3acc::/32", "266110"}, + {"2804:7e48::/32", "271614"}, + {"2001:67c:6fc::/48", "29551"}, + {"2804:15c::/32", "11835"}, + {"2001:fb0:109f:14::/64", "36040"}, + {"2402:8100:20da::/45", "55644"}, + {"2406:4540::/32", "140464"}, + {"2001:559:7d6::/48", "33491"}, + {"2400:4e80:1001::/33", "131584"}, + {"2401:d800:d122::/41", "7552"}, + {"2404:3d00:40a5::/46", "3573"}, + {"2610:20:8020::/44", "40623"}, + {"2804:6918:5000::/32", "270248"}, + {"2a09:bac0:20::/46", "13335"}, + {"2001:559:c2b6::/48", "7016"}, + {"2401:8800:c06::/40", "17439"}, + {"2409:804c:900::/35", "9808"}, + {"2605:3380:ffff::/48", "12025"}, + {"2804:1ad8::/32", "52589"}, + {"2804:47a0::/35", "267066"}, + {"2001:559:c273::/48", "33287"}, + {"2001:678:780::/48", "201626"}, + {"2a01:7080:25::/46", "42848"}, + {"2001:9e8::/34", "8881"}, + {"2001:df2:8c80::/48", "137655"}, + {"2001:1b78::/32", "28855"}, + {"2404:3d00:4144::/47", "21433"}, + {"2404:c000:4004::/47", "55818"}, + {"2600:141b:9001::/36", "20940"}, + {"2600:40f0:a::/48", "7046"}, + {"2806:2f0:4723::/41", "17072"}, + {"2a00:5c60:e::/47", "43329"}, + {"2001:559:244::/48", "7016"}, + {"2001:df7:6400::/48", "134809"}, + {"2402:fa80::/32", "24516"}, + {"240a:a481::/32", "143803"}, + {"2600:3001:25::/46", "13649"}, + {"2604:af80:2048::/37", "18859"}, + {"2800:440:34::/47", "27738"}, + {"2a02:26f7:f90d::/42", "20940"}, + {"2402:a300:8000::/45", "55427"}, + {"240a:a00f::/32", "142665"}, + {"2600:1413:e000::/48", "24319"}, + {"2a04:ac00:4::/48", "201848"}, + {"2001:559:c2d6::/47", "7922"}, + {"2001:c38:4000::/36", "9931"}, + {"2404:8680:1000::/36", "135161"}, + {"240a:a38a::/32", "143556"}, + {"2804:4370::/32", "267570"}, + {"2a03:4940::/32", "3292"}, + {"2a0c:b641:170::/44", "211364"}, + {"2001:1248:5992::/42", "11172"}, + {"2800:160:116f::/43", "14259"}, + {"2804:66d8::/32", "269586"}, + {"2804:7260::/32", "52926"}, + {"2a02:888:52::/47", "48695"}, + {"2a04:e3c0::/29", "57736"}, + {"2a0a:7d80:f::/48", "6697"}, + {"2a00:1ce8::/32", "34525"}, + {"2001:678:d8::/48", "35407"}, + {"2001:978:3b00:3::/37", "174"}, + {"2001:1248:98b6::/48", "11172"}, + {"2405:84c0:faab::/41", "9886"}, + {"2406:2400:1000::/48", "45287"}, + {"2408:8456:6c00::/42", "17622"}, + {"2a06:9500:8::/29", "204028"}, + {"2001:67c:1270::/48", "20712"}, + {"2803:480:6::/32", "52458"}, + {"2a00:10a0:7::/44", "35745"}, + {"2a03:2880:f055::/44", "32934"}, + {"2a0b:bc7::/32", "39122"}, + {"2a0d:9b80:fe::/47", "43519"}, + {"2409:8019:4000::/32", "9808"}, + {"2600:1419:7c01::/38", "20940"}, + {"2806:2f0:7301::/46", "17072"}, + {"2a02:26f0:c200::/48", "34164"}, + {"2404:bf00:8000::/40", "9303"}, + {"2600:6c38:b76::/47", "20115"}, + {"2605:f500:10a::/43", "1828"}, + {"2800:160:1b8e::/43", "14259"}, + {"2001:67c:17a0::/48", "24929"}, + {"2409:8704:e300::/31", "24547"}, + {"2409:8904:e0b0::/39", "24547"}, + {"2409:8e44::/28", "24445"}, + {"2a00:f8c0::/32", "198288"}, + {"2001:579:f0bf::/41", "22773"}, + {"2001:1248:9a93::/42", "11172"}, + {"2001:1b70:82a3::/48", "158"}, + {"2603:c002:9610::/39", "31898"}, + {"2620:4e:2000::/48", "14694"}, + {"2800:160:1d52::/44", "14259"}, + {"2a03:5a00:3b::/48", "60299"}, + {"2001:13d0:1300::/31", "7303"}, + {"2806:105e:1::/48", "8151"}, + {"2001:678:60c::/48", "207608"}, + {"2001:67c:9c::/48", "35733"}, + {"2001:67c:8a4::/48", "210648"}, + {"2001:1a10:c2::/44", "8781"}, + {"2405:9800:7::/48", "45458"}, + {"2620:115:83::/41", "18888"}, + {"2800:e00::/34", "27665"}, + {"2801:80:17a1::/43", "61580"}, + {"2400:cb00:303::/45", "13335"}, + {"2403:89c0::/48", "55824"}, + {"240a:aa18::/32", "145234"}, + {"2604:b180:40::/44", "23278"}, + {"2800:2a0::/38", "27947"}, + {"2a01:b740:a80::/35", "714"}, + {"2a03:3600::/32", "49285"}, + {"2a05:d050:9040::/44", "16509"}, + {"2001:2001:6000::/40", "1759"}, + {"2402:800:929b::/42", "7552"}, + {"240a:ace0::/32", "145946"}, + {"2620:12d:400b::/45", "395853"}, + {"2806:230:2041::/48", "11888"}, + {"2001:1248:9aae::/43", "11172"}, + {"2401:d800:b940::/42", "7552"}, + {"2402:e280:2246::/44", "134674"}, + {"240a:ad9a::/32", "146132"}, + {"2801:1e:4800::/48", "269792"}, + {"2804:3da4:1100::/32", "266544"}, + {"2a00:1ba0:2::/48", "6720"}, + {"2a02:26f7:ad::/48", "20940"}, + {"2a02:26f7:c808::/48", "36183"}, + {"2a09:bac0:151::/44", "13335"}, + {"2001:df0:ab00::/48", "4739"}, + {"2402:800:3471::/44", "7552"}, + {"2406:da70:1000::/40", "16509"}, + {"240e:109:8022::/48", "58466"}, + {"2607:f6a0::/32", "11563"}, + {"2a01:7c8:f0::/46", "34762"}, + {"2a0e:8f02:212e::/47", "211635"}, + {"2409:8c70:3ab0::/44", "140105"}, + {"2804:1624:2000::/32", "263270"}, + {"2a0f:dc0::/29", "60262"}, + {"2001:559:8345::/48", "22258"}, + {"2001:559:83b2::/48", "33659"}, + {"2408:805d::/44", "17623"}, + {"2408:80f1:250::/40", "17621"}, + {"2605:7900:16::/44", "19133"}, + {"2804:34dc::/32", "265485"}, + {"2a02:888:143::/48", "47794"}, + {"2a02:ac80:e001::/35", "25145"}, + {"2a04:c442:8300::/36", "2534"}, + {"2001:559:83cf::/48", "7725"}, + {"2a01:3f0::/31", "8674"}, + {"2603:fa10::/26", "397165"}, + {"2803:c180:2210::/39", "52341"}, + {"2001:678:958::/48", "197069"}, + {"2804:1c24::/32", "28670"}, + {"2a02:26f7:f70c::/48", "36183"}, + {"2a0f:fa80::/29", "60262"}, + {"2001:559:84d2::/48", "33491"}, + {"240a:acce::/32", "145928"}, + {"2604:8ac0::/32", "35889"}, + {"2a03:5e00::/32", "203975"}, + {"2a0a:2306:f000::/45", "20853"}, + {"2001:559:354::/47", "7922"}, + {"2001:1401::/29", "9201"}, + {"2400:ee00:ffff::/48", "17962"}, + {"2605:a404:74a::/40", "33363"}, + {"2803:e360::/32", "264824"}, + {"2804:658::/32", "262578"}, + {"2804:1e08::/32", "264406"}, + {"2a02:26f7:6f::/48", "20940"}, + {"240a:abfa::/32", "145716"}, + {"2a01:5041:2002::/48", "202196"}, + {"2803:8920::/33", "266673"}, + {"2a02:26f7:d250::/48", "36183"}, + {"2404:4a00:6000:1::/37", "45629"}, + {"2405:c0:50::/48", "138881"}, + {"2620:10c:7009::/45", "2906"}, + {"2a02:88d:803f::/40", "47794"}, + {"2001:559:8384::/48", "33491"}, + {"2001:da8:901f::/36", "23910"}, + {"240e:5f:600f::/48", "134774"}, + {"2001:5a0:3f07::/33", "6453"}, + {"2408:8459:250::/37", "17816"}, + {"2600:380:e880::/41", "20057"}, + {"2600:1007:b150::/40", "22394"}, + {"2a09:5fc0::/29", "35360"}, + {"2a11:3a80::/29", "34734"}, + {"2001:559:85::/46", "7922"}, + {"2400:d8c0::/32", "38525"}, + {"2409:8d63::/28", "9808"}, + {"240e:6b0:1000::/32", "4134"}, + {"2a06:800::/40", "207257"}, + {"2001:559:8405::/48", "7725"}, + {"2001:bf0:c000::/35", "29670"}, + {"240a:ac30::/32", "145770"}, + {"240a:ad9d::/32", "146135"}, + {"2600:1fa0:4080::/41", "16509"}, + {"2801:80:35c0::/47", "269086"}, + {"2804:3e40:f400::/36", "266583"}, + {"2a0e:2240:3::/48", "1239"}, + {"2001:559:14b::/48", "33660"}, + {"2001:559:462::/48", "33652"}, + {"2403:300:1540::/36", "714"}, + {"240a:a7bf::/32", "144633"}, + {"240e:958:1000::/40", "142608"}, + {"2603:f870::/24", "397165"}, + {"2a0e:fd45:a00::/40", "44541"}, + {"2a0f:85c1:214::/48", "206751"}, + {"2001:1af8:4411::/32", "60781"}, + {"2403:27c0:c03::/48", "139866"}, + {"2406:7400:50::/44", "24309"}, + {"2409:8915:4e00::/39", "56044"}, + {"2a0f:ca84::/40", "208046"}, + {"2001:550:4a03::/37", "174"}, + {"2001:da8:2d03::/38", "23910"}, + {"2001:44b8:403c::/47", "7545"}, + {"2001:4b27:ffff::49/48", "34288"}, + {"240a:a77e::/32", "144568"}, + {"2603:c002:9f20::/34", "31898"}, + {"2804:37f0:3900::/33", "266445"}, + {"2a02:f406:fe90::/48", "206283"}, + {"2001:678:f08::/48", "202325"}, + {"2406:840:f900::/48", "139833"}, + {"2600:100a:f100::/44", "6167"}, + {"2a0e:8f02:20fa::/45", "212008"}, + {"2001:559:8074::/48", "7922"}, + {"2001:4160::/32", "8586"}, + {"2408:8956:400::/40", "17622"}, + {"2409:8d44::/28", "24445"}, + {"2408:8256:317f::/48", "17816"}, + {"2409:8924:af00::/35", "56046"}, + {"240a:a44e::/32", "143752"}, + {"2a02:26f7:f789::/46", "20940"}, + {"2a05:dfc7:7::/48", "61138"}, + {"2001:559:83e2::/48", "33660"}, + {"2404:ab00::/32", "132347"}, + {"2620:30:6000::/48", "14936"}, + {"2804:1be8::/32", "61756"}, + {"2a04:4e40:4600::/48", "54113"}, + {"2803:de80::/32", "262186"}, + {"2a0a:7540::/46", "206066"}, + {"2407:ef00:911::/42", "12422"}, + {"240a:aaa6::/32", "145376"}, + {"240e:14:8000::/36", "140329"}, + {"2620:1ec:a::/45", "8068"}, + {"2a01:5b0:7::/48", "8391"}, + {"2001:df1:3b80::/48", "139609"}, + {"2a02:26f7:e548::/48", "36183"}, + {"2a0b:7d80::/29", "59889"}, + {"2400:3080::/32", "55424"}, + {"2401:b0c0:a::/48", "136941"}, + {"2602:fc5d:c0a::/48", "399866"}, + {"2605:a404:85a::/40", "33363"}, + {"2001:df0:a180::/48", "135977"}, + {"2001:e20::/32", "17435"}, + {"2001:4d20::/33", "8569"}, + {"2400:c540:53::/48", "59238"}, + {"2406:4b00:b::/32", "132602"}, + {"2803:5ee0::/32", "269986"}, + {"2a00:ed20::/32", "64401"}, + {"2a03:42c0::/32", "50818"}, + {"2a0e:fd45:b30::/48", "42831"}, + {"2a10:4440::/29", "212693"}, + {"2001:559:85b3::/48", "7015"}, + {"2001:be8::/32", "13189"}, + {"2804:56b4:1000::/34", "268019"}, + {"2a01:b740:a10::/48", "6185"}, + {"2a02:2010:6002::/48", "20978"}, + {"2a02:e981:3d::/41", "19551"}, + {"2a01:ce83:8000::/35", "51964"}, + {"2c0f:fe28:e::/48", "36951"}, + {"2001:df5:fa80::/47", "141564"}, + {"240e:83::/37", "23724"}, + {"2600:6c38:18c::/43", "20115"}, + {"2806:230:2014::/48", "265594"}, + {"2a02:26f7:b9a9::/43", "20940"}, + {"2a02:26f7:d304::/48", "36183"}, + {"2a0e:b107:ef0::/44", "212129"}, + {"2407:5040::/38", "134715"}, + {"2408:84f3:3450::/44", "17816"}, + {"2602:fe90:700::/48", "35913"}, + {"2804:43bc::/32", "267587"}, + {"2a00:8e00:1::/48", "20712"}, + {"2a02:26f7:b681::/46", "20940"}, + {"2a02:2e02:3160::/43", "12479"}, + {"2404:f801:8020::/48", "45139"}, + {"240a:a6b1::/32", "144363"}, + {"2a00:1b70::/29", "39642"}, + {"2a0e:1d80::/47", "203523"}, + {"2400:6280:135::/48", "132280"}, + {"2405:f600:61::/48", "45117"}, + {"2a0e:b980::/29", "208644"}, + {"240a:af7f::/32", "146617"}, + {"2800:3b0:2000::/36", "263173"}, + {"2a01:ce90:9000::/34", "51964"}, + {"2a10:9100:5::/48", "267784"}, + {"2a10:fc80::/29", "47447"}, + {"2001:4b22::/64", "65505"}, + {"240e:978:8100::/31", "4134"}, + {"2804:72d4::/32", "270878"}, + {"2a01:190:3a::/39", "1764"}, + {"2001:559:c33e::/48", "7725"}, + {"2605:8300::/47", "33059"}, + {"2a02:26f7:bc40::/48", "36183"}, + {"2a0d:6600::/29", "39650"}, + {"2001:559:3e1::/48", "7015"}, + {"2604:11c0:200::/40", "395822"}, + {"2620:149:2::/43", "714"}, + {"2804:5d2c:2::/32", "268955"}, + {"2a00:1e88:c000::/34", "12389"}, + {"2a00:68c0::/32", "30781"}, + {"2406:e400:2::/32", "7642"}, + {"2408:8756:ea0::/41", "17622"}, + {"2a02:26f7:86::/48", "36183"}, + {"2a05:2a44:601::/46", "201411"}, + {"2a0f:9207:1::/42", "45009"}, + {"2402:e380:11f::/48", "139073"}, + {"240e:1c:c000::/31", "4134"}, + {"2a07:1980:16::/48", "25773"}, + {"2001:49f0:a06c::/43", "174"}, + {"2a02:26f7:bf0d::/42", "20940"}, + {"2001:559:84a9::/48", "7922"}, + {"2804:6e00::/32", "270569"}, + {"2806:2f0:61c3::/42", "17072"}, + {"2a02:26f7:ec50::/48", "36183"}, + {"2a0a:1c40::/29", "198024"}, + {"2406:daa0:e080::/44", "16509"}, + {"2408:8456:7440::/39", "17816"}, + {"2803:f9e0::/32", "270026"}, + {"2a02:2090:9800::/48", "47595"}, + {"2a02:f540::/30", "15692"}, + {"2610:1e8::/32", "11814"}, + {"2620:4e:4000::/48", "18472"}, + {"2406:2ac0::/32", "140736"}, + {"2407:a500::/39", "18356"}, + {"2408:8456:9210::/42", "134543"}, + {"240a:a45d::/32", "143767"}, + {"2803:280::/32", "52498"}, + {"2a01:5c0::/32", "42652"}, + {"2a03:7fc0::/32", "35717"}, + {"2001:559:82bf::/48", "33491"}, + {"2600:140f:600::/48", "55836"}, + {"2606:5200:c000::/36", "11115"}, + {"2600:370f:7080::/45", "32261"}, + {"2a00:79e1:f22::/40", "36384"}, + {"2a01:8840:5e::/42", "12041"}, + {"2a0f:9400:7708::/48", "20473"}, + {"240a:aca0::/32", "145882"}, + {"2a02:26f7:e609::/42", "20940"}, + {"240a:a9a1::/32", "145115"}, + {"2606:1980:7::/44", "54994"}, + {"2607:f220:41f::/48", "393689"}, + {"2804:9d4:2001::/35", "262996"}, + {"2804:bc4::/32", "52824"}, + {"2a00:1b58::/32", "50621"}, + {"2a0c:b641:200::/48", "209710"}, + {"2a0f:8641:b00c::/30", "25682"}, + {"2001:559:823b::/48", "7015"}, + {"2001:67c:2b3c::/48", "47127"}, + {"2400:9800:b010:1200::/33", "24203"}, + {"240e:44d:3380::/41", "4134"}, + {"2600:1002:9110::/36", "22394"}, + {"2620:1f:4000::/48", "14086"}, + {"2804:534::/37", "22177"}, + {"2804:2c7c::/32", "265222"}, + {"2806:250:24::/46", "28512"}, + {"2a04:e00:10::/46", "54103"}, + {"2a0d:2e00:2000::/48", "33932"}, + {"2001:57a:505::/46", "33438"}, + {"2400:e500:3b::/32", "38742"}, + {"2409:896a:1900::/38", "9808"}, + {"2606:2800:5a01::/48", "15133"}, + {"2a02:26f7:ca08::/48", "36183"}, + {"2a04:e080::/29", "201949"}, + {"2a09:bac0:216::/44", "13335"}, + {"240a:a158::/32", "142994"}, + {"2804:72a0::/32", "270865"}, + {"2806:20d:5224::/47", "32098"}, + {"2a02:26f7:c3d0::/48", "36183"}, + {"2001:559:860f::/43", "33667"}, + {"240c:c0a9:1000::/40", "4538"}, + {"2804:41f0::/32", "267467"}, + {"2a02:26f0:c4::/48", "34164"}, + {"2a05:7640:21c0::/38", "174"}, + {"240a:a4f8::/32", "143922"}, + {"2600:1004:b170::/40", "22394"}, + {"2600:1404:5::/48", "35994"}, + {"2604:7640::/32", "393796"}, + {"2804:14c:a782::/45", "28573"}, + {"2603:f2b0::/25", "397165"}, + {"2a0c:d0c0::/29", "48390"}, + {"2001:67c:14bc::/48", "44594"}, + {"2001:67c:2dd8::/48", "43351"}, + {"240a:a6bb::/32", "144373"}, + {"2804:161c::/43", "263268"}, + {"2804:36e4::/32", "266379"}, + {"2804:3908::/32", "266519"}, + {"2806:2f0:6241::/46", "17072"}, + {"2001:1418::/29", "12779"}, + {"2604:2900::/32", "16527"}, + {"2a07:1480::/29", "59626"}, + {"2001:1a11:155::/48", "42298"}, + {"2409:8055:301b::/45", "56040"}, + {"2602:fd5b::/36", "398280"}, + {"2a05:1084:2::/33", "59598"}, + {"2001:559:84b1::/48", "13367"}, + {"2001:67c:dc::/48", "50273"}, + {"2801:80:2350::/48", "267300"}, + {"2803:78a0::/32", "266815"}, + {"2804:37d0:8000::/33", "266437"}, + {"2a04:5380::/29", "202292"}, + {"2001:250:7023::/48", "24369"}, + {"2001:df4:1780::/48", "38074"}, + {"2403:300:a30::/48", "6185"}, + {"2a01:8600::/32", "8636"}, + {"2a02:26f0:127::/48", "20940"}, + {"2a0c:ed40::/29", "8888"}, + {"2001:6a8:a002::/35", "2611"}, + {"2620:112:9000::/44", "36225"}, + {"2804:b8c::/32", "52794"}, + {"2804:3d28:13::/32", "7063"}, + {"2a02:2010:22e0::/45", "20978"}, + {"2a12:c100::/29", "204790"}, + {"2607:f1c0:fe::/47", "15418"}, + {"2804:6604::/32", "269528"}, + {"2a04:2b00:13ee::/48", "201304"}, + {"2a0e:5f40::/29", "41529"}, + {"2a11:5840::/29", "18779"}, + {"2001:559:8156::/48", "7922"}, + {"240c:cd22:cd22::/48", "24357"}, + {"2a01:8840:f7::/48", "207266"}, + {"2a11:1d40::/47", "210937"}, + {"2804:3868:800::/37", "266475"}, + {"2804:637c::/32", "269364"}, + {"2804:70d0:c000::/34", "270750"}, + {"2a04:e00:107::/44", "39855"}, + {"2001:918:dedf::/34", "3303"}, + {"240a:a526::/32", "143968"}, + {"2600:1417:3800::/48", "24319"}, + {"2605:dd40:8213::/45", "398549"}, + {"2800:160:1e3a::/47", "14259"}, + {"2804:14d:cc85::/41", "28573"}, + {"2a00:7840::/32", "197403"}, + {"2a07:380::/29", "49596"}, + {"2001:470:68::/48", "12266"}, + {"2400:cb00:298::/47", "13335"}, + {"2405:5940::/32", "17473"}, + {"2a0d:df80::/31", "52091"}, + {"2a12:83c0::/29", "43202"}, + {"2001:550:8e03::/35", "174"}, + {"2001:df0:a6::/48", "55536"}, + {"2a01:600::/32", "25148"}, + {"2a07:e02:1000::/40", "210083"}, + {"2001:559:c28b::/48", "33650"}, + {"240e:bf:b900::/37", "134768"}, + {"2600:6c34:71::/48", "33588"}, + {"2607:fd08::/32", "36610"}, + {"2a01:c50e:f400::/36", "12479"}, + {"2a10:20c0::/29", "207265"}, + {"2a01:528::/32", "6775"}, + {"2a03:ae60:8::/32", "202847"}, + {"2a0f:9400:7386::/44", "53356"}, + {"2408:84f3:4410::/42", "134543"}, + {"240a:a131::/32", "142955"}, + {"2600:1000:b090::/42", "22394"}, + {"2803:5ce0:800::/40", "19114"}, + {"2803:aea0::/32", "18678"}, + {"2806:230:2021::/48", "11888"}, + {"2400:a980:1000::/40", "133517"}, + {"2406:da00:a000::/40", "16509"}, + {"2804:6458::/32", "269422"}, + {"2408:8956:1d40::/40", "17816"}, + {"2409:408c:2000::/32", "55836"}, + {"2804:382c::/32", "266462"}, + {"2400:a980:7100::/37", "133111"}, + {"2a02:26f7:e405::/46", "20940"}, + {"2a0a:8880:aaaa::/48", "50937"}, + {"2a0d:3e80::/29", "202914"}, + {"2001:559:8275::/48", "33650"}, + {"2001:ee0:cd40::/35", "45899"}, + {"2403:d600::/32", "4826"}, + {"240a:a5de::/32", "144152"}, + {"240e:978:3900::/40", "146966"}, + {"2620:d1:8000::/48", "36726"}, + {"2804:30ac::/32", "264968"}, + {"2a02:ac80:a1::/43", "25145"}, + {"2a0f:5701:3519::/45", "206499"}, + {"2001:1308::/32", "6400"}, + {"2408:8459:9c50::/38", "17816"}, + {"240a:aef2::/32", "146476"}, + {"2600:100f:b000::/42", "6167"}, + {"2602:ff93:1000::/36", "26968"}, + {"2a01:8840:4e::/43", "12041"}, + {"2a02:26f7:ee40::/48", "36183"}, + {"2a0c:9f40::/32", "41785"}, + {"2001:880::/32", "24973"}, + {"2402:800:62b7::/41", "7552"}, + {"240e:109:8045::/48", "58461"}, + {"240e:438:5c20::/43", "140647"}, + {"2607:fb58:f000::/46", "36086"}, + {"2a03:aa00:1001::/48", "204169"}, + {"2400:8500:3300::/48", "55907"}, + {"2804:14d:12fa::/45", "28573"}, + {"2804:6930::/34", "270254"}, + {"2a02:26f7:f1c4::/48", "36183"}, + {"2001:4490:f020::/46", "9829"}, + {"2604:bc40::/33", "22188"}, + {"2607:a500:9::/45", "12025"}, + {"2804:1aa8::/32", "61874"}, + {"2a00:4802:260::/44", "13124"}, + {"2a02:26f7:66::/48", "36183"}, + {"2a03:4bc0:1015::/48", "202687"}, + {"2001:559:74b::/48", "33657"}, + {"240a:a7d0::/32", "144650"}, + {"240e:3b7:5600::/34", "4134"}, + {"2001:250:4834::/48", "23910"}, + {"2001:678:340::/48", "206480"}, + {"2400:9bc0::/46", "55313"}, + {"2408:8256:3b8a::/48", "17623"}, + {"2600:6c38:70f::/43", "20115"}, + {"2603:c0ec:1000::/39", "54253"}, + {"2800:440:9400::/42", "27738"}, + {"2804:25b4::/32", "264297"}, + {"2a0a:3440::/29", "207092"}, + {"2a0a:e200:1300::/37", "33438"}, + {"2c0f:fb20::/32", "36925"}, + {"2400:f340:100::/47", "131746"}, + {"2600:1008:e000::/44", "6167"}, + {"2804:6630::/32", "269540"}, + {"2a01:8640:a::/48", "59711"}, + {"2001:559:150::/48", "13367"}, + {"2001:559:c210::/48", "33659"}, + {"2804:1b1c::/32", "61709"}, + {"2806:2f0:7201::/46", "17072"}, + {"2402:3180:3::/48", "141706"}, + {"2606:1980:15::/44", "54994"}, + {"2804:1be4::/32", "61755"}, + {"2804:5534::/37", "268696"}, + {"2a00:13f0::/32", "39662"}, + {"240a:a5e3::/32", "144157"}, + {"2600:1008:b0d0::/42", "6167"}, + {"2600:140f:3200::/48", "55644"}, + {"2620:13a:7000::/44", "5078"}, + {"2804:6310:1000::/37", "269336"}, + {"2a06:7100::/29", "48520"}, + {"2a0c:a300::/29", "44486"}, + {"2401:1c00::/34", "38809"}, + {"2402:800:5a1d::/42", "7552"}, + {"240a:aa2e::/32", "145256"}, + {"2800:160:204c::/47", "14259"}, + {"2806:20d:9100::/38", "32098"}, + {"2001:559:c153::/48", "33490"}, + {"240a:af22::/32", "146524"}, + {"2604:d9c0::/32", "36222"}, + {"2804:14c:6100::/40", "28573"}, + {"2a0c:e040:132::/35", "200629"}, + {"240e:104:8000::/33", "4134"}, + {"2607:f1d8::/40", "7795"}, + {"2a02:e981:60::/47", "19551"}, + {"2001:418:1::/48", "3130"}, + {"2001:559:84c4::/48", "33659"}, + {"2a00:1368::/32", "28933"}, + {"2a04:4e40:4630::/41", "54113"}, + {"2403:89c0:1::/46", "137661"}, + {"2804:6e30::/32", "270581"}, + {"2a10:5dc0::/32", "212033"}, + {"2604:4080::/32", "54858"}, + {"2804:109c::/32", "262854"}, + {"2a02:26f7:e14c::/48", "36183"}, + {"2a11:1bc0::/32", "59639"}, + {"2407:e500::/46", "17929"}, + {"240e:60c:6000::/36", "137688"}, + {"2a04:4e40:5420::/44", "54113"}, + {"2a06:3fc0::/29", "42344"}, + {"2001:253:139::/48", "142105"}, + {"2001:8b0:2::/35", "20712"}, + {"2a0c:4300:90::/41", "43722"}, + {"2605:3c80:e00::/41", "36180"}, + {"2804:802c::/39", "271734"}, + {"2806:2f0:9723::/41", "17072"}, + {"2a04:1000::/29", "61001"}, + {"2a10:8c00::/32", "20473"}, + {"2605:c780::/32", "30674"}, + {"2a02:26f7:bf45::/46", "20940"}, + {"2001:678:91c::/48", "206671"}, + {"2001:df3:f380::/48", "140718"}, + {"2001:e60:a018::/42", "4766"}, + {"2401:d800:dc30::/41", "7552"}, + {"2402:6000::/32", "9790"}, + {"2406:57c0:2130::/48", "134672"}, + {"240a:a1f1::/32", "143147"}, + {"240e:44d:4880::/41", "4134"}, + {"2001:67c:17f0::/48", "702"}, + {"2001:67c:2574::/48", "25148"}, + {"2001:df4:2c80::/48", "140896"}, + {"2a07:da80::/29", "209372"}, + {"2a10:7a40::/47", "39910"}, + {"2001:67c:2d04::/48", "198463"}, + {"2408:8957:7300::/40", "17816"}, + {"2409:8070:30e9::/48", "9808"}, + {"2408:8456:e640::/36", "17816"}, + {"2600:1406:4::/44", "20940"}, + {"2620:134:c000::/48", "394887"}, + {"2804:c00:a100::/38", "52655"}, + {"2804:1084::/32", "52847"}, + {"2804:68ac:8000::/33", "269708"}, + {"2a04:8880::/31", "52102"}, + {"2406:daa0:1080::/44", "16509"}, + {"2600:c0a::/32", "12180"}, + {"2608:149:b::/48", "27064"}, + {"2a03:2f80::/32", "197308"}, + {"2a07:cc80::/29", "42908"}, + {"2001:250:781e::/47", "24372"}, + {"2001:559:80d2::/48", "7015"}, + {"2400:9380:8fc0::/44", "136167"}, + {"2408:8456:1400::/42", "17622"}, + {"240a:a1f0::/32", "143146"}, + {"240e:965:5000::/37", "58772"}, + {"2600:1415:2801::/37", "20940"}, + {"2a0c:a9c7:240::/48", "42139"}, + {"2001:559:51c::/48", "33657"}, + {"2001:559:8137::/48", "33660"}, + {"240a:a030::/32", "142698"}, + {"2600:9000:223c::/41", "16509"}, + {"2604:6e00:2000::/37", "13977"}, + {"2804:3024::/32", "264932"}, + {"2804:79b8::/32", "271323"}, + {"2806:2f0:9bc1::/46", "17072"}, + {"2001:559:8194::/48", "22909"}, + {"2405:4f00::/32", "132432"}, + {"2800:370:c004::/40", "28006"}, + {"2803:2040::/32", "28050"}, + {"2804:3d0c::/32", "266250"}, + {"2402:800:5301::/44", "7552"}, + {"240a:a265::/32", "143263"}, + {"240a:abb8::/32", "145650"}, + {"2801:80:1bf0::/48", "52608"}, + {"2a05:b9c0::/29", "201057"}, + {"2405:b40:23::/44", "55674"}, + {"2409:8057:2060::/35", "56040"}, + {"240a:ab13::/32", "145485"}, + {"2804:14c:de00::/41", "28573"}, + {"2804:37f0:6100::/36", "266445"}, + {"2804:6fe8::/32", "270692"}, + {"2a00:da60::/32", "25581"}, + {"2a0d:ce00::/29", "200428"}, + {"2001:4408:7900::/38", "4758"}, + {"240a:a8cb::/32", "144901"}, + {"2a00:1e88:5::/46", "12389"}, + {"2a04:2e80:19::/48", "62351"}, + {"2a0c:9a40:c004::/36", "209022"}, + {"2001:67c:2d50::/48", "201173"}, + {"2001:18e0::/32", "6062"}, + {"2409:4073:5000::/24", "55836"}, + {"2600:1403:12::/45", "20940"}, + {"2804:22dc::/32", "264127"}, + {"2001:559:43f::/41", "33287"}, + {"2001:df1:e300::/48", "132402"}, + {"2409:8915:2900::/40", "56044"}, + {"240a:ac2c::/32", "145766"}, + {"2a00:4c40:2000::/36", "197965"}, + {"2a02:e70::/39", "33965"}, + {"2001:559:8b::/45", "33667"}, + {"2a00:89e0::/32", "198024"}, + {"2a02:26f0:6001::/39", "20940"}, + {"2a02:26f7:c7ca::/42", "20940"}, + {"2001:678:2d8::/48", "39285"}, + {"2600:1410:6001::/35", "20940"}, + {"2800:a30:6a6::/35", "262187"}, + {"2001:500:96::/48", "15135"}, + {"2001:559:5c0::/48", "22909"}, + {"2001:16d8::/41", "16150"}, + {"2001:4c00::/32", "34695"}, + {"2404:f4c0:ea00::/47", "140731"}, + {"2800:200:bc10::/39", "12252"}, + {"2801:80:12d0::/48", "263892"}, + {"2804:2784:d000::/34", "263906"}, + {"2a06:1c80::/31", "60011"}, + {"2a0d:9a00::/32", "39401"}, + {"2001:550:1404::/38", "174"}, + {"2402:800:3301::/44", "7552"}, + {"2407:8c00:ffe1::/48", "131317"}, + {"240a:a64e::/32", "144264"}, + {"2602:ffa6:303::/40", "62731"}, + {"2a00:f2a0::/32", "12555"}, + {"2a02:26f7:f18c::/48", "36183"}, + {"2a07:3500:1240::/46", "33915"}, + {"2a11:29c7:b00b::/48", "212149"}, + {"2409:896a:3400::/39", "9808"}, + {"240e:978:2a00::/37", "4134"}, + {"2607:f358:16::/42", "18779"}, + {"2a06:e881:1800::/48", "206885"}, + {"2a0a:2100::/29", "199624"}, + {"2001:559:533::/48", "33287"}, + {"240e:3b8:7a00::/32", "140313"}, + {"2600:1004:9110::/36", "22394"}, + {"2605:4400:2::/45", "40715"}, + {"2001:250:400::/48", "55826"}, + {"2600:1488:a401::/42", "20940"}, + {"2602:fe62::/36", "394356"}, + {"2620:11d:5000::/46", "393732"}, + {"2804:125c::/32", "263472"}, + {"2a01:590::/32", "8492"}, + {"2a03:c80::/32", "8829"}, + {"2a07:3480::/29", "47759"}, + {"2001:559:169::/48", "7016"}, + {"2001:678:c30::/48", "39591"}, + {"2001:67c:1bfc::/48", "3264"}, + {"2001:df7:1000::/48", "59216"}, + {"2001:43fd::/48", "327811"}, + {"240e:965:ec00::/35", "4134"}, + {"2604:5b80::/32", "22898"}, + {"2a10:cc42:1200::/40", "20473"}, + {"2001:67c:2a68::/48", "198944"}, + {"2804:dd4:4100::/32", "53024"}, + {"2a01:b740:a1a::/48", "6185"}, + {"2a02:2e02:a60::/40", "12479"}, + {"2a0a:e5c3::/32", "207996"}, + {"2a11:7e04::/32", "61424"}, + {"2c0f:f158::/32", "328220"}, + {"2001:559:39b::/45", "7922"}, + {"2408:8957:e200::/40", "17622"}, + {"2607:e580::/32", "36601"}, + {"2804:958::/32", "263077"}, + {"2a02:26f7:f501::/46", "20940"}, + {"2a03:c980:db::/48", "210079"}, + {"2a0e:b107:1901::/48", "207111"}, + {"2a10:2880::/32", "51968"}, + {"2404:1f00:9000::/33", "55947"}, + {"2404:3d00:4124::/46", "21433"}, + {"2803:5c80:6591::/48", "64114"}, + {"2403:0:119::/46", "4755"}, + {"2408:840c:5400::/40", "17621"}, + {"240e:13:802::/48", "140854"}, + {"2a02:26f7:eb::/48", "20940"}, + {"2a02:26f7:bc89::/42", "20940"}, + {"2001:da8:304f::/48", "23910"}, + {"2001:df5:6400::/48", "55380"}, + {"240a:a700::/32", "144442"}, + {"240a:afc0::/32", "146682"}, + {"2604:b3c0::/40", "53989"}, + {"2803:5700:8000::/33", "28024"}, + {"2001:550:90a::/48", "32489"}, + {"2600:7402::/28", "29933"}, + {"2a01:5b0:5::/46", "50611"}, + {"2a02:2090:a800::/48", "47595"}, + {"2a04:280::/29", "28917"}, + {"2001:470:bd::/48", "16621"}, + {"2001:df0:8a80::/48", "139250"}, + {"2605:a408::/41", "33363"}, + {"2804:65ec::/32", "269523"}, + {"2a01:6bc0::/32", "50061"}, + {"2a0a:fc40::/29", "29075"}, + {"2001:4c8:10ff::/39", "15290"}, + {"2001:c38:20f9::/36", "9335"}, + {"2401:d800:bf50::/42", "7552"}, + {"2407:f800:800::/40", "38182"}, + {"2408:8656:2f00::/35", "17816"}, + {"2001:4490:7400::/46", "9829"}, + {"2605:1b80::/32", "26153"}, + {"2a02:26f0:fb01::/37", "20940"}, + {"2a0b:b86:fe03::/48", "205749"}, + {"240a:ad5b::/32", "146069"}, + {"2606:ae00:6dd0::/35", "7287"}, + {"2607:8280:5::/32", "27027"}, + {"240a:abf4::/32", "145710"}, + {"2606:5e80:ff01::/28", "22379"}, + {"2620:96:c000::/48", "399932"}, + {"2a00:c4e0::/32", "200133"}, + {"2a04:a980::/29", "206833"}, + {"2001:4060:4052::/48", "197439"}, + {"2405:8a00:a01e::/42", "55824"}, + {"2409:804b:2a00::/39", "24445"}, + {"240e:96b:6024::/46", "140376"}, + {"2001:550:7206::/37", "174"}, + {"2001:1a98::/29", "6677"}, + {"240a:ad69::/32", "146083"}, + {"2600:1405:b001::/33", "20940"}, + {"2604:5c40::/32", "14078"}, + {"2a02:16c0::/29", "56402"}, + {"2600:1014:b1f0::/33", "22394"}, + {"2606:b400:8024::/48", "1216"}, + {"2607:4d00::/35", "33260"}, + {"2a0b:4d07:901::/48", "44239"}, + {"2a0d:f740::/32", "43182"}, + {"2408:8756:2d00::/35", "17816"}, + {"2600:140f:5001::/39", "20940"}, + {"2620:119:5004::/47", "13443"}, + {"2804:284c::/33", "263954"}, + {"2001:648::/35", "5408"}, + {"2620:1e0:111::/46", "10801"}, + {"2806:2f0:364::/43", "17072"}, + {"2a00:ad44:3084::/48", "199875"}, + {"2a0f:f640::/48", "12731"}, + {"2409:8e1e::/31", "24400"}, + {"240a:a94e::/32", "145032"}, + {"240e:438:9c40::/38", "4134"}, + {"2a07:3440::/29", "201873"}, + {"2001:250:7036::/37", "23910"}, + {"2001:559:8319::/48", "33652"}, + {"2001:4408:5241::/43", "4758"}, + {"2404:bf40:f200::/47", "7545"}, + {"2600:1017:b8d0::/44", "22394"}, + {"2600:1f01:48d0::/46", "16509"}, + {"2607:f388::/32", "59"}, + {"2804:3784::/34", "53121"}, + {"2a06:1ec7::/32", "49832"}, + {"2001:678:9e8::/48", "208447"}, + {"2610:b0::/34", "3573"}, + {"2605:b40:f0c1::/36", "397142"}, + {"2408:8256:2e87::/43", "17623"}, + {"2804:14d:800::/40", "28573"}, + {"2804:1f4a::/32", "271354"}, + {"2a05:2d00::/32", "62217"}, + {"2001:559:834a::/47", "7016"}, + {"2001:df0:13::/48", "38244"}, + {"2001:4878:4055::/48", "35994"}, + {"2404:8c00::/32", "3605"}, + {"2408:8957:5300::/40", "17816"}, + {"2804:298::/34", "53087"}, + {"2804:6c84::/32", "270473"}, + {"2001:559:c43b::/45", "33651"}, + {"2001:579:40d8::/42", "22773"}, + {"2001:678:458::/48", "8422"}, + {"2408:8456:4810::/42", "134543"}, + {"2409:8904:55b0::/38", "24547"}, + {"240e:44d:5180::/41", "4134"}, + {"2804:336c::/32", "265395"}, + {"2a00:86c0:ff0b::/40", "2906"}, + {"2001:250:e0d::/48", "23910"}, + {"2401:4900:2e80::/43", "45609"}, + {"2403:8600:80e0::/43", "45820"}, + {"2409:8720::/32", "56046"}, + {"2804:3690::/32", "266356"}, + {"2a00:41c0::/32", "48971"}, + {"2a09:4c0:304::/47", "58057"}, + {"2001:559:86b5::/48", "7016"}, + {"2409:8004:3900::/31", "24547"}, + {"240a:a423::/32", "143709"}, + {"2804:2ef0::/32", "264862"}, + {"2a00:5400:f000::/45", "43766"}, + {"2001:67c:2188::/48", "197500"}, + {"2408:8956:8d00::/40", "17816"}, + {"2a02:26f7:f808::/48", "36183"}, + {"2001:678:3e0::/48", "42718"}, + {"2804:1048::/32", "263628"}, + {"2a01:5041:b::/45", "202196"}, + {"2a02:ac80:f1::/39", "25145"}, + {"2a09:aac0::/29", "209289"}, + {"2a09:bac0:63::/45", "13335"}, + {"2a0d:3842:1220::/48", "57629"}, + {"2408:8459:4410::/42", "17623"}, + {"240e:2e:8000::/25", "4134"}, + {"2800:580::/32", "27695"}, + {"2804:4130::/32", "266009"}, + {"2a02:26f0:2101::/37", "20940"}, + {"2a0a:59c7:1000::/45", "204724"}, + {"2800:d302:a::/43", "11830"}, + {"2a05:b500:53::/48", "39176"}, + {"2a0c:b641:76a::/48", "207292"}, + {"2a0d:1ac3::/32", "44050"}, + {"240a:a30e::/32", "143432"}, + {"2605:7900:100::/48", "19133"}, + {"2804:7808::/32", "271216"}, + {"2001:559:8261::/48", "33651"}, + {"2001:13c7:600e::/48", "52374"}, + {"2406:7400:c0::/45", "24309"}, + {"2804:768::/36", "52977"}, + {"2804:78ec::/32", "271274"}, + {"2a0f:85c1:70::/44", "209267"}, + {"2001:559:53d::/48", "33491"}, + {"2001:67c:1030::/48", "3257"}, + {"2001:4350:fff0::/44", "2609"}, + {"2606:ca00:408::/32", "14537"}, + {"2607:fa48::/39", "5769"}, + {"2803:5960::/32", "269743"}, + {"2a02:26f7:f6c9::/46", "20940"}, + {"2a03:e280::/32", "60781"}, + {"2001:16a2:c290::/42", "39386"}, + {"2a03:5880::/39", "12757"}, + {"2001:559:82d3::/48", "33650"}, + {"2001:67c:2120::/48", "31710"}, + {"2a01:758:8308::/33", "3326"}, + {"2a02:26f7:f845::/46", "20940"}, + {"2001:503:39c1::/48", "397197"}, + {"2402:7400::/34", "38883"}, + {"2404:5780::/47", "9558"}, + {"2804:4be0::/32", "267334"}, + {"2a0b:6000::/29", "60721"}, + {"2404:f380::/46", "38614"}, + {"2804:2554::/32", "264274"}, + {"2a02:26f7:ec89::/46", "20940"}, + {"2a03:41e0::/32", "201510"}, + {"2a03:6bc0::/29", "43439"}, + {"2409:8080:3825::/29", "9808"}, + {"240a:aafe::/32", "145464"}, + {"2604:9980:230::/48", "17216"}, + {"2804:14c:fc88::/46", "28573"}, + {"2804:5f5c::/32", "269094"}, + {"2001:250:680d::/48", "24368"}, + {"2001:67c:68::/48", "24971"}, + {"2001:c20:4888::/46", "3758"}, + {"240a:a53b::/32", "143989"}, + {"2a02:998::/32", "9197"}, + {"2a0f:85c1:212::/48", "207529"}, + {"2a10:ba80::/29", "211360"}, + {"2408:8956:3d00::/40", "17816"}, + {"2610:a1:2016::/48", "19905"}, + {"2803:d8c0::/40", "264787"}, + {"2402:800:95a9::/43", "7552"}, + {"2607:f778:c300::/34", "32035"}, + {"2a02:26f7:f8c1::/46", "20940"}, + {"2a09:f9c0::/29", "211626"}, + {"2001:4878:2062::/47", "12222"}, + {"2620:132:f181::/38", "394977"}, + {"2804:436c::/32", "267569"}, + {"2a02:26f7:f309::/42", "20940"}, + {"2001:559:8284::/48", "22909"}, + {"2001:559:c12e::/48", "7015"}, + {"2001:678:ac8::/48", "47988"}, + {"2001:16a2:c370::/40", "39386"}, + {"2404:2800::/32", "9942"}, + {"2001:559:c3da::/48", "33659"}, + {"2407:a740:8::/48", "38852"}, + {"240a:ad01::/32", "145979"}, + {"240e:40:14::/48", "139767"}, + {"240e:45c:9500::/40", "140534"}, + {"2602:feda:b42::/45", "142130"}, + {"2402:800:560f::/43", "7552"}, + {"2402:800:b5f0::/38", "7552"}, + {"2405:6600:70a::/36", "45845"}, + {"2803:7820:8000::/45", "267708"}, + {"2804:a1c::/32", "262727"}, + {"2402:1::/36", "10197"}, + {"2402:3a80:1c38::/47", "38266"}, + {"2804:549c::/32", "268661"}, + {"2001:579:b849::/45", "22773"}, + {"2402:800:79a0::/41", "7552"}, + {"240e:3be:7800::/39", "4134"}, + {"2801:80:35a0::/48", "269045"}, + {"2806:2f0:9463::/43", "17072"}, + {"2a07:dc00:1330::/44", "14627"}, + {"2a0d:b201:5030::/41", "206026"}, + {"2406:e6c0::/48", "140766"}, + {"2408:8459:7a30::/41", "17622"}, + {"2604:4540::/32", "88"}, + {"2806:230:1007::/48", "11888"}, + {"2a02:26f7:f5::/46", "20940"}, + {"2001:559:c0c6::/48", "33657"}, + {"240e:67d:e400::/39", "140330"}, + {"2800:bf0:3703::/42", "27947"}, + {"2804:6e08::/32", "270571"}, + {"2a0f:ca87:5::/48", "208333"}, + {"2600:370f:340b::/45", "32261"}, + {"2603:4:1204::/48", "44273"}, + {"2804:904::/32", "263046"}, + {"240a:aa84::/32", "145342"}, + {"2604:f400:12::/48", "18923"}, + {"2607:f740:e608::/48", "63911"}, + {"2a0a:4180::/48", "57724"}, + {"2001:4818:5000::/36", "30715"}, + {"2001:48c8:16::/47", "29791"}, + {"2402:800:39d3::/44", "7552"}, + {"2605:3b80:cad::/48", "9009"}, + {"2800:4d0:2485::/44", "52489"}, + {"2001:67c:380::/48", "41599"}, + {"2001:67c:1110::/47", "21406"}, + {"2001:e60:a028::/38", "4766"}, + {"2001:4350:e009::/35", "2609"}, + {"2600:140f:1a00::/48", "9498"}, + {"2a00:1248:e283::/35", "3216"}, + {"2a01:5041:4000::/48", "202196"}, + {"2a0c:9a40:8110::/46", "204438"}, + {"2001:559:c2a6::/48", "33659"}, + {"2001:da8:a9::/48", "24370"}, + {"2408:80c2::/33", "4837"}, + {"2a07:aa00:3::/45", "3549"}, + {"2a0e:aa07:f094::/44", "208884"}, + {"2401:8ac0:100::/48", "4671"}, + {"2a02:2518:12::/29", "28917"}, + {"2a11:1280::/29", "56485"}, + {"2401:d800:2d82::/42", "7552"}, + {"2804:75ac::/32", "271062"}, + {"2a0b:a840::/32", "206894"}, + {"2400:9800:6028::/32", "24203"}, + {"2409:8924:1500::/38", "56046"}, + {"2606:2800:4212::/48", "15133"}, + {"2607:fb91:1a00::/37", "21928"}, + {"2620:117:7000::/47", "26955"}, + {"2404:5440::/44", "56272"}, + {"2804:1b3:8080::/35", "18881"}, + {"2a00:1860::/32", "35369"}, + {"2401:d800:b390::/42", "7552"}, + {"2001:559:578::/48", "7016"}, + {"2001:559:83f7::/48", "33650"}, + {"2001:fb0:109f:8015::/42", "7470"}, + {"2402:800:62a0::/44", "7552"}, + {"2402:7280:cfa2::/48", "46014"}, + {"240e:788::/29", "4812"}, + {"2a02:26f0:6300::/48", "34164"}, + {"2a0a:1f40::/32", "209372"}, + {"2001:13c7:7012::/48", "52224"}, + {"2409:8070:30ea::/47", "140105"}, + {"240a:a52b::/32", "143973"}, + {"2801:80:3990::/48", "270807"}, + {"2804:a00:12::/36", "262838"}, + {"2001:559:4e7::/48", "33651"}, + {"2408:8459:1e50::/39", "17816"}, + {"2620:1f:8002::/48", "10908"}, + {"2a0c:2e00::/29", "56708"}, + {"2c0f:eaa8::/32", "37540"}, + {"2401:fc0::/32", "136523"}, + {"240a:ac8c::/32", "145862"}, + {"2607:a400::/45", "21859"}, + {"2804:2a8c::/32", "264078"}, + {"2a02:1688::/32", "48362"}, + {"2a0f:f940::/29", "62412"}, + {"240a:aa9a::/32", "145364"}, + {"240e:44d:6e00::/42", "140345"}, + {"2a0f:ca85:11::/48", "207616"}, + {"2c0f:f0b0:1100::/48", "37069"}, + {"2001:559:8475::/48", "7922"}, + {"2409:805a:2903::/31", "56040"}, + {"240a:a2bf::/32", "143353"}, + {"2604:f940:7::/32", "397134"}, + {"2600:100f:d040::/34", "22394"}, + {"2606:a700:2000::/32", "17378"}, + {"2801:164::/40", "27951"}, + {"2804:3d84::/32", "266536"}, + {"2804:4bd8::/40", "267332"}, + {"2804:5bd0::/32", "268870"}, + {"2a02:420::/29", "38927"}, + {"2a02:26f7:61::/48", "20940"}, + {"2001:559:808d::/48", "7016"}, + {"240e:3bf:4c00::/35", "136200"}, + {"2600:1001:d060::/40", "22394"}, + {"2606:ed00:2::/47", "47869"}, + {"2a03:8520:1206::/48", "200981"}, + {"2001:df6:180:8100::/49", "141731"}, + {"2804:1a54::/34", "61854"}, + {"2a0e:b107:14c2::/44", "211042"}, + {"2001:559:c11c::/46", "7922"}, + {"2600:140f:4200::/48", "9498"}, + {"2804:4cac::/32", "267384"}, + {"2a0c:b641:c0::/44", "212201"}, + {"240e:56:c800::/31", "4134"}, + {"2804:910::/32", "53075"}, + {"2804:1918:180::/46", "52862"}, + {"2806:2f0:4801::/35", "17072"}, + {"2001:44b8:30ef::/43", "7545"}, + {"2804:3bc::/32", "28624"}, + {"2c0f:ebd0::/34", "328608"}, + {"2402:ab00::/40", "24206"}, + {"240a:aa80::/32", "145338"}, + {"2600:6c38:a56::/44", "20115"}, + {"2600:7f00::/28", "6465"}, + {"2a00:f28:3000::/29", "15802"}, + {"2a02:26f7:becd::/46", "20940"}, + {"2804:293c::/32", "264005"}, + {"2001:480:1671::/32", "668"}, + {"2001:fd0:1201::/39", "10029"}, + {"2402:800:b9d2::/38", "7552"}, + {"240e:109:8024::/48", "134768"}, + {"2804:6fc4::/32", "270683"}, + {"2a02:970:1069::/39", "44002"}, + {"2406:840:e666::/47", "211843"}, + {"2600:370f:7088::/42", "32261"}, + {"2a02:26f0:a0::/47", "20940"}, + {"2a09:7:2002::/48", "57969"}, + {"2a0b:8f80:100::/45", "29290"}, + {"2a02:26f7:c350::/47", "36183"}, + {"2600:1402:3::/48", "35994"}, + {"2804:8128::/32", "272436"}, + {"2a02:26f7:f549::/46", "20940"}, + {"2001:250:5865::/48", "24363"}, + {"2001:559:7b::/45", "7922"}, + {"2408:8779:4000::/32", "4837"}, + {"240a:a4f4::/32", "143918"}, + {"240a:a82c::/32", "144742"}, + {"2804:1810::/34", "263262"}, + {"2804:1954::/32", "61787"}, + {"2a07:7400::/29", "203964"}, + {"2001:c20:48aa::/47", "9255"}, + {"2001:1900:221a::/45", "3356"}, + {"2604:2680:10::/47", "2386"}, + {"2604:fac0::/30", "398481"}, + {"2605:3e00::/32", "13706"}, + {"2804:774c::/32", "271169"}, + {"2a12:b200::/29", "44592"}, + {"2402:4000:c002::/34", "18001"}, + {"240a:ab02::/32", "145468"}, + {"240a:ad8f::/32", "146121"}, + {"2804:108c:c500::/35", "28146"}, + {"2a0e:b102:12f::/48", "20473"}, + {"2001:470:142::/48", "22989"}, + {"2001:550:4102::/38", "174"}, + {"2001:67c:1a8::/48", "1200"}, + {"2001:67c:2244:8000::/49", "50448"}, + {"2001:df0:fc00::/47", "59173"}, + {"2001:fd8:b270::/44", "4775"}, + {"240a:a589::/32", "144067"}, + {"2800:c30:ad00::/40", "265705"}, + {"2804:6e54::/32", "270589"}, + {"2408:8956:ba00::/40", "17622"}, + {"240d:c010:69::/48", "139341"}, + {"2806:230:600d::/48", "11888"}, + {"2a00:f320::/48", "24586"}, + {"2a02:26f7:e8c9::/46", "20940"}, + {"2a11:e080::/29", "204790"}, + {"2001:559:83a5::/48", "33652"}, + {"2401:d800:9f70::/40", "7552"}, + {"2406:3000:32::/45", "4657"}, + {"240e:40:15::/32", "4134"}, + {"240e:44d:6680::/41", "4134"}, + {"2600:6c38:87d::/40", "20115"}, + {"2607:fe28:20b1::/41", "53347"}, + {"2a02:4ba::/32", "200271"}, + {"2a04:12c0::/48", "48749"}, + {"2604:8280::/32", "27618"}, + {"2806:370:5600::/40", "28403"}, + {"2a09:1e80::/29", "21769"}, + {"2001:1900:2812::/45", "3356"}, + {"2408:8459:6c30::/41", "17622"}, + {"2409:8924:b900::/38", "56046"}, + {"2a02:970:1249::/40", "44002"}, + {"2a02:26f0:db01::/40", "20940"}, + {"2a02:26f0:dd01::/38", "20940"}, + {"2a02:26f7:bf::/48", "20940"}, + {"2001:4408:5d00::/38", "4758"}, + {"2401:4900:1c36::/44", "24560"}, + {"2604:880:231::/41", "29802"}, + {"2604:8540:fcc0::/48", "33353"}, + {"2606:4700:2::/43", "13335"}, + {"2a07:80c0::/29", "202829"}, + {"2a0b:f300::/46", "62240"}, + {"2a0c:b641:610::/47", "208505"}, + {"2a0e:5cc0::/29", "43282"}, + {"2001:559:8233::/48", "7015"}, + {"2001:559:c038::/48", "7922"}, + {"2001:67c:2108::/48", "41446"}, + {"2606:740::/32", "7018"}, + {"2803:5440:4050::/47", "264738"}, + {"2a00:1030::/32", "24956"}, + {"2a01:4f0::/33", "28717"}, + {"2405:8a00:a053::/45", "55824"}, + {"2607:f740:e60c::/48", "63911"}, + {"2804:2e1c:e503::/45", "265324"}, + {"2001:67c:1b70::/48", "2488"}, + {"2001:44b8:6030::/46", "7545"}, + {"240c:cec1::/32", "138440"}, + {"2600:370f:740a::/42", "32261"}, + {"2a00:1bc8::/32", "50554"}, + {"2a06:e881:3200::/44", "31798"}, + {"2a0a:c3c0::/29", "208861"}, + {"2001:559:86bd::/48", "7016"}, + {"2001:678:b60::/48", "12496"}, + {"2001:df6:e500::/47", "18030"}, + {"2402:800:31e0::/44", "7552"}, + {"240a:ad2c::/32", "146022"}, + {"2001:1b70:83::/48", "32094"}, + {"2408:8256:3195::/48", "17623"}, + {"240a:ac8d::/32", "145863"}, + {"2804:5d20::/32", "268952"}, + {"2a04:e4c4:1::/45", "36692"}, + {"2401:7b40:4300::/44", "38071"}, + {"2405:1500:b1::/32", "58717"}, + {"2408:8000:a019::/45", "4837"}, + {"240a:af5e::/32", "146584"}, + {"2804:1b28::/32", "61712"}, + {"2a02:f48:2000::/40", "50613"}, + {"2001:559:819d::/48", "7922"}, + {"2001:14a0::/32", "15879"}, + {"2406:b400:f9::/48", "18209"}, + {"240a:a565::/32", "144031"}, + {"2600:100d:b070::/40", "22394"}, + {"2a04:ac00:2::/48", "203004"}, + {"2402:8100:2420::/43", "55644"}, + {"240e:3b7:f700::/36", "4134"}, + {"2600:6c38:c6::/47", "20115"}, + {"2409:8054:60::/48", "9808"}, + {"2a03:f080:1800::/48", "47515"}, + {"2001:df7:480a::/48", "131893"}, + {"2600:1406:4801::/37", "20940"}, + {"2603:c000:1f00::/34", "31898"}, + {"2800:160:1547::/44", "14259"}, + {"2801:1e0::/41", "27875"}, + {"2803:7bc0:4000::/32", "265761"}, + {"2a09:3d00::/32", "210625"}, + {"2a0d:b201:3060::/43", "206026"}, + {"2001:1248:55ff::/38", "11172"}, + {"2001:44b8:205c::/48", "7545"}, + {"2402:800:511d::/42", "7552"}, + {"2407:e700::/43", "132680"}, + {"2408:8256:3d6b::/48", "17816"}, + {"240a:a7dd::/32", "144663"}, + {"2603:c027:c000::/35", "31898"}, + {"2605:8000:23a::/32", "4261"}, + {"2605:b100:a81::/39", "577"}, + {"2804:3998::/32", "266038"}, + {"2a0e:97c0:3b5::/48", "211484"}, + {"2001:559:8125::/48", "33489"}, + {"2a02:5f80::/32", "39811"}, + {"2001:3c8:e10f::/35", "4621"}, + {"2001:559:844d::/48", "33650"}, + {"2600:1010:bf0e::/33", "22394"}, + {"2605:3380:ff05::/46", "12025"}, + {"2605:a900:8::/48", "26793"}, + {"2800:440:8064::/48", "27738"}, + {"2a0c:5240::/31", "59504"}, + {"2804:2bdc:2::/37", "265181"}, + {"2a04:ecc0::/29", "207992"}, + {"2401:1700:a::/43", "55666"}, + {"2401:4900:1978::/40", "45609"}, + {"2408:8256:3861::/40", "17623"}, + {"2600:6c38:f18::/42", "20115"}, + {"2a04:4e40:3800::/48", "54113"}, + {"2804:5940::/32", "268179"}, + {"2a01:b220::/32", "202164"}, + {"2001:df0:7c80::/48", "6461"}, + {"2401:1d40:f21::/45", "23724"}, + {"2401:d800:ba0::/41", "7552"}, + {"2403:2e40:1::/46", "137959"}, + {"240a:a354::/32", "143502"}, + {"2606:a600:4002::/48", "397933"}, + {"2800:160:1ff7::/44", "14259"}, + {"2a01:520::/32", "2116"}, + {"2001:559:c3ec::/47", "7015"}, + {"2804:297c:aaab::/33", "262907"}, + {"2602:804:d000::/44", "27587"}, + {"2a02:18::/32", "44569"}, + {"2402:800:35d3::/44", "7552"}, + {"2409:8904:cba0::/37", "24547"}, + {"2409:896a:2000::/39", "9808"}, + {"2a01:79e0::/32", "199791"}, + {"2a09:b440::/48", "20473"}, + {"2001:559:83c5::/48", "33652"}, + {"2804:656c::/32", "269489"}, + {"2001:559:fa::/47", "33660"}, + {"2001:678:e70::/48", "211607"}, + {"2001:fd8:3480::/42", "132199"}, + {"2001:16a2:c360::/44", "39891"}, + {"240a:a68b::/32", "144325"}, + {"2604:ca00:434::/41", "36492"}, + {"2606:4700:8040::/44", "13335"}, + {"2001:67c:2094::/48", "12695"}, + {"2001:67c:21c0::/48", "39265"}, + {"2001:1330::/29", "11830"}, + {"240a:a603::/32", "144189"}, + {"2600:6c3b:21::/43", "20115"}, + {"2a02:26f0:37::/44", "20940"}, + {"2a02:2838::/32", "31264"}, + {"2001:250:6c00::/43", "138370"}, + {"2001:559:c458::/48", "7922"}, + {"2804:c::/32", "28343"}, + {"2804:343c::/32", "263665"}, + {"2804:46f0:41::/40", "267021"}, + {"2a02:26f7:ec08::/48", "36183"}, + {"2a04:e00:100::/47", "48806"}, + {"2a0a:9200::/29", "61317"}, + {"2401:e380:8522::/47", "131091"}, + {"2408:8444:100::/31", "140726"}, + {"2a05:26c0::/40", "201536"}, + {"2406:e001:c800::/34", "23655"}, + {"2409:8020:1091::/42", "56046"}, + {"2409:804c:3025::/40", "9808"}, + {"2a0c:9c80::/29", "204760"}, + {"2001:559:868c::/48", "22909"}, + {"2803:b4e0::/32", "263218"}, + {"2a00:1d58:f800::/43", "47524"}, + {"2a07:a300::/30", "400177"}, + {"2a0b:b87:ffbb::/48", "212831"}, + {"2001:559:48e::/47", "33657"}, + {"2001:678:dbc::/48", "213067"}, + {"2001:df0:5d40::/48", "142394"}, + {"2001:4978:1000::/47", "19255"}, + {"2409:8c39::/30", "9808"}, + {"2804:14d:a400::/40", "28573"}, + {"2804:522c::/32", "268500"}, + {"2a04:b907::/48", "211321"}, + {"2400:180:9::/48", "4766"}, + {"2403:a140:100::/40", "141771"}, + {"240a:a4f0::/32", "143914"}, + {"2804:1224::/32", "263459"}, + {"2a00:8a00:4f02::/35", "8983"}, + {"2a02:26f7:b8c9::/46", "20940"}, + {"2001:4090::/31", "12312"}, + {"2401:d800:7f52::/40", "7552"}, + {"2804:1784:12a::/45", "263152"}, + {"2a0e:aa07:e027::/48", "210815"}, + {"240a:a63e::/32", "144248"}, + {"2600:6c38:84b::/43", "20115"}, + {"2603:c0f0:2820::/39", "6142"}, + {"2a0c:5247:8000::/36", "208861"}, + {"2a0e:bf01:101::/32", "202539"}, + {"2600:5c01:e0a::/48", "11351"}, + {"2603:c0e0:2110::/40", "54253"}, + {"2620:10b:b000::/44", "11807"}, + {"2801:13e:6::/40", "19429"}, + {"2a02:2298:4000::/36", "15544"}, + {"2a02:28c8::/32", "42353"}, + {"2a0c:8d80::/29", "212991"}, + {"2a0f:85c1:50::/48", "210202"}, + {"240a:a1a4::/32", "143070"}, + {"240a:a3e0::/32", "143642"}, + {"2607:e600::/32", "32719"}, + {"2803:160::/32", "267932"}, + {"2a01:9420::/29", "62099"}, + {"2401:d800:fd60::/40", "7552"}, + {"2409:8020:1081::/43", "56046"}, + {"2600:1419:2601::/36", "20940"}, + {"2001:253:12a::/45", "38272"}, + {"2401:d800:12::/42", "7552"}, + {"2001:44b8:503a::/34", "4739"}, + {"2606:7f00:400::/40", "32307"}, + {"2620:112:4000::/47", "36204"}, + {"2001:250:102e::/38", "23910"}, + {"2a03:ad40:420::/48", "54995"}, + {"2a0a:7c00::/29", "38955"}, + {"2402:800:7da0::/41", "7552"}, + {"2409:8e75::/28", "9808"}, + {"2600:141c:6801::/35", "20940"}, + {"2804:1e74::/32", "264430"}, + {"2a12:8f40::/32", "60488"}, + {"2001:44b8:2048::/48", "7545"}, + {"2800:300:89a0::/41", "27986"}, + {"2a05:e380::/46", "15739"}, + {"2a0c:b641:d0::/46", "212196"}, + {"2409:8054:300a::/43", "56040"}, + {"240a:ac52::/32", "145804"}, + {"240e:44d:340::/42", "140346"}, + {"2600:6c38:e0c::/47", "20115"}, + {"2804:3b8:9::/41", "52965"}, + {"2001:559:819c::/48", "33652"}, + {"2001:678:3e8::/48", "206108"}, + {"2a02:2190::/29", "44134"}, + {"2a0e:46c4:2900::/48", "138435"}, + {"2001:fd8:2a0::/48", "132199"}, + {"2401:9d00::/47", "9835"}, + {"2409:8235::/23", "9808"}, + {"2800:c80::/32", "61510"}, + {"2a01:4a0:1f::/42", "201011"}, + {"2a0c:9640::/29", "197248"}, + {"2c0f:ef20::/32", "37611"}, + {"2001:559:8719::/48", "33651"}, + {"2406:3540::/48", "17415"}, + {"2408:8957:8f00::/40", "17816"}, + {"2a00:c980::/29", "52148"}, + {"2001:57a:f210::/46", "22773"}, + {"2408:8456:d010::/42", "134543"}, + {"240a:af3b::/32", "146549"}, + {"2801:12:e800::/48", "271885"}, + {"2a02:88d:f::/48", "47794"}, + {"2a03:dc0::/32", "61428"}, + {"2a04:fa80:2::/44", "2635"}, + {"2a05:3580:28::/34", "35807"}, + {"2001:408:ff02::/40", "14793"}, + {"2001:559:7c7::/48", "20214"}, + {"2001:9e8:2004::/39", "8881"}, + {"2400:cb00:70::/44", "13335"}, + {"2600:1419:e801::/37", "20940"}, + {"2602:fdd3::/36", "46573"}, + {"2620:8::/41", "6327"}, + {"2a02:26f0:bb01::/37", "20940"}, + {"2604:d700::/32", "53824"}, + {"2001:559:54b::/48", "33657"}, + {"2001:559:c0cb::/48", "33651"}, + {"2400:cb00:a6a0::/45", "13335"}, + {"2a0a:b300::/29", "206951"}, + {"2001:559:3b9::/48", "21508"}, + {"2404:a800:2002::/36", "9498"}, + {"2406:7440::/32", "131970"}, + {"240c:ca22::/32", "23910"}, + {"2603:90bd::/32", "11955"}, + {"2620:a0:2000::/48", "397994"}, + {"2804:3c50::/32", "266203"}, + {"2804:7898:5ff0::/44", "271253"}, + {"2a01:440:510::/29", "29551"}, + {"2a02:218::/29", "44973"}, + {"2a0d:2406:1134::/48", "202656"}, + {"2001:4830:100::/40", "27552"}, + {"2804:22c:f002::/37", "22689"}, + {"2a03:9960::/32", "208719"}, + {"2a07:a100::/29", "202701"}, + {"240a:a5d6::/32", "144144"}, + {"2600:1004:b0f0::/44", "22394"}, + {"2a02:26f7:de8c::/48", "36183"}, + {"2a07:1180::/29", "203311"}, + {"2a0c:89c0::/29", "43260"}, + {"2a11:e180::/29", "204790"}, + {"240a:a7b7::/32", "144625"}, + {"240a:aa76::/32", "145328"}, + {"2604:d600:161a::/47", "32098"}, + {"2620:4f:e000::/48", "22652"}, + {"2804:19c8::/35", "61818"}, + {"2405:4802:1270::/37", "18403"}, + {"2409:806b:900::/35", "9808"}, + {"2803:140::/32", "264622"}, + {"2001:500:4e::/47", "207266"}, + {"2001:559:85f0::/48", "33657"}, + {"2804:1b2:f080::/41", "10429"}, + {"2a00:ad87:1303::/48", "198573"}, + {"2a06:cd40:1::/46", "43927"}, + {"2600:6c10:f608::/43", "20115"}, + {"2600:cc04:e100::/35", "32298"}, + {"2a0f:2c80::/48", "40676"}, + {"2001:559:2d1::/48", "33491"}, + {"2001:49f0:d0d9::/46", "30058"}, + {"2804:18:1850::/44", "10429"}, + {"2804:6c18:8000::/33", "270445"}, + {"2a02:26f7:d4d1::/42", "20940"}, + {"2400:dd06:1006::/28", "7497"}, + {"2402:d000:1065::/44", "9329"}, + {"2001:559:c159::/48", "7922"}, + {"2409:8c2f:3820::/32", "56041"}, + {"2804:510::/32", "28163"}, + {"2a01:4f00::/34", "35047"}, + {"2a02:fe80:20::/46", "30148"}, + {"2a07:7d40::/29", "202876"}, + {"2a0a:5ec0::/29", "206123"}, + {"2804:7ec8::/32", "271647"}, + {"2001:559:8798::/47", "7922"}, + {"2803:d700:4000::/32", "61461"}, + {"2a02:26f7:d1c9::/46", "20940"}, + {"2001:df7:6c80::/48", "146963"}, + {"2403:5000:166::/43", "9304"}, + {"240e:44d:2600::/41", "140345"}, + {"2620:104:4000::/45", "15248"}, + {"2804:2838:21a::/32", "263948"}, + {"2a03:220:f001::/36", "61400"}, + {"2001:da8:3009::/48", "23910"}, + {"2401:4900:43a0::/44", "45609"}, + {"2409:8924:1100::/38", "56046"}, + {"240a:acad::/32", "145895"}, + {"2600:1308::/32", "20021"}, + {"2600:2500::/31", "26801"}, + {"2a01:7e00::/31", "63949"}, + {"2a10:9880::/29", "39050"}, + {"2001:42d0:1500::/40", "33764"}, + {"2408:8956:6300::/40", "17816"}, + {"2001:678:870::/48", "199815"}, + {"2401:2900::/40", "23679"}, + {"2404:6140::/33", "138143"}, + {"2405:4803:270::/40", "18403"}, + {"2600:6c1c::/30", "20115"}, + {"2607:f368:1003::/48", "46846"}, + {"2a00:fb8::/33", "8881"}, + {"2a00:c1e0::/29", "59891"}, + {"240a:ac82::/32", "145852"}, + {"2600:100d:b100::/42", "6167"}, + {"2600:6c7f:9410::/44", "20001"}, + {"2606:a4c0::/32", "400290"}, + {"2001:559:c2d5::/48", "33652"}, + {"2402:800:34fe::/39", "7552"}, + {"240a:aa47::/32", "145281"}, + {"2602:805:2000::/45", "394392"}, + {"2602:fc23:162::/36", "8095"}, + {"2602:fc3b:201::/39", "399970"}, + {"2607:f478::/32", "18540"}, + {"2804:136c::/32", "262372"}, + {"2804:2f74::/32", "264892"}, + {"2a07:a680::/29", "60111"}, + {"2a0e:b107:790::/44", "208680"}, + {"2001:559:c10b::/48", "33657"}, + {"2405:7000:500::/34", "9354"}, + {"2a05:ec0::/29", "56828"}, + {"2001:559:760::/48", "33659"}, + {"2401:4900:3bc0::/42", "45609"}, + {"240a:aa0e::/32", "145224"}, + {"2a0f:c087:f51c::/48", "212521"}, + {"2001:67c:20dc::/48", "51740"}, + {"2607:f738:400::/39", "17184"}, + {"2610:a1:1025::/48", "397228"}, + {"2804:2e4c::/32", "265337"}, + {"2001:4928::/32", "13819"}, + {"240e:1a:40::/44", "137702"}, + {"2806:2f0:6061::/46", "17072"}, + {"2806:10be:2::/45", "8151"}, + {"2a02:6f00:ec0::/48", "59518"}, + {"2001:559:271::/48", "7725"}, + {"2001:de4::/48", "131621"}, + {"2604:d680::/48", "29757"}, + {"2a02:26f7:dd80::/48", "36183"}, + {"2a03:d940::/32", "6833"}, + {"2a07:ac80::/29", "44812"}, + {"2607:f360::/39", "32592"}, + {"2804:4054::/32", "265952"}, + {"2a02:26f7:b9c0::/48", "36183"}, + {"2409:8914:f00::/35", "56044"}, + {"240a:a0de::/32", "142872"}, + {"240a:ae4d::/32", "146311"}, + {"2804:6944::/32", "270259"}, + {"2a01:65c0::/32", "3242"}, + {"2a06:140::/29", "47704"}, + {"2404:4a00:6501:1::/36", "45629"}, + {"2603:90fb:10::/44", "20115"}, + {"2804:48e4::/32", "267151"}, + {"2804:6ac8:2704::/32", "270358"}, + {"2a11:f0c0::/29", "204790"}, + {"2001:470:120::/48", "63343"}, + {"2803:32e0::/32", "269928"}, + {"2804:6830::/32", "269674"}, + {"2a0e:c80:403::/48", "40676"}, + {"2001:559:8720::/48", "33491"}, + {"2606:4700:ff02::/48", "395747"}, + {"2402:1d40:4001::/45", "58826"}, + {"240e:30c:4a00::/35", "137688"}, + {"2607:f108:4900::/32", "29838"}, + {"2a02:26f7:ed00::/48", "36183"}, + {"2a0c:c640::/29", "50489"}, + {"2400:9380:9070::/47", "4809"}, + {"2404:fc40::/32", "133971"}, + {"2407:4d00::/48", "38841"}, + {"2a0b:20c0::/39", "205766"}, + {"2001:559:86ce::/48", "7016"}, + {"2602:fd91::/36", "399533"}, + {"2607:9f00:3::/48", "25875"}, + {"2001:480:90::/48", "5980"}, + {"2001:da8:24f::/43", "24350"}, + {"2408:8456:3850::/39", "17816"}, + {"2607:ff60:4::/43", "3900"}, + {"2804:57c4::/32", "268085"}, + {"2a0e:cd40::/29", "35048"}, + {"2a0f:bd40::/32", "197560"}, + {"2803:9c0:100::/40", "265695"}, + {"2803:2280::/32", "264663"}, + {"2804:1600::/32", "263421"}, + {"2401:d800:76d0::/42", "7552"}, + {"2405:8a00:8034::/34", "55824"}, + {"2408:8459:26c0::/36", "17816"}, + {"2a02:26f7:e608::/48", "36183"}, + {"2a04:d900::/29", "8470"}, + {"2a10:bec0::/29", "13247"}, + {"2404:ae00::/48", "45474"}, + {"2a00:7180::/33", "15557"}, + {"2a0d:cc80::/29", "59493"}, + {"2a0f:85c1:cafe::/48", "207781"}, + {"2400:9380:8001::/48", "4134"}, + {"2406:da1a::/36", "16509"}, + {"2602:ffe4:c09::/46", "21859"}, + {"2620:8a::/48", "19574"}, + {"2a02:26f7:f58c::/48", "36183"}, + {"2a05:dfc0::/29", "61138"}, + {"2a0a:7c0::/29", "34909"}, + {"2401:d800:5060::/40", "7552"}, + {"240e:67c:1000::/37", "140330"}, + {"2a05:91c0::/32", "56430"}, + {"2001:559:8220::/48", "33650"}, + {"2001:fd8:b3f0::/33", "4775"}, + {"2401:d800:d570::/40", "7552"}, + {"240a:aac0::/32", "145402"}, + {"2604:7100::/32", "32391"}, + {"2605:2700::/32", "47066"}, + {"2001:df7:2b00::/48", "58965"}, + {"2804:3dc0:e000::/35", "266551"}, + {"2607:fdf0:5e86::/44", "8008"}, + {"2607:ffd0::/45", "13767"}, + {"2001:559:3cb::/48", "33491"}, + {"2404:bf40:ea01::/46", "139084"}, + {"2407:f100::/45", "133075"}, + {"2804:2060::/32", "264489"}, + {"2804:4850::/39", "267113"}, + {"2a05:4140:187::/48", "211358"}, + {"2a04:4e40:2800::/48", "54113"}, + {"2a05:b0c6:200f::/48", "208753"}, + {"2001:559:218::/48", "33651"}, + {"2001:559:c334::/48", "33660"}, + {"2001:1248:9c15::/44", "11172"}, + {"2404:8d00:1410::/36", "24378"}, + {"2406:e000:37a::/40", "23655"}, + {"2408:8956:1bc0::/37", "17622"}, + {"2a05:9bc0::/44", "51559"}, + {"2a0e:b107:14c0::/47", "211042"}, + {"2a12:a740::/29", "400522"}, + {"2001:250:3800::/45", "138440"}, + {"2801:13a::/44", "270028"}, + {"2804:80b8::/36", "271769"}, + {"2a06:f901:4000::/36", "8849"}, + {"2001:16a2:360a::/43", "25019"}, + {"2a00:83e0::/32", "199496"}, + {"2a0c:93c0:6002::/48", "212465"}, + {"2001:559:c3bb::/41", "33287"}, + {"2001:978:6713::/45", "174"}, + {"2001:ee0::/38", "45899"}, + {"240a:ad7d::/32", "146103"}, + {"2600:1f01:4810::/47", "16509"}, + {"2a02:26f0:7101::/37", "20940"}, + {"2001:678:de0::/48", "21158"}, + {"2405:8000::/32", "38462"}, + {"2800:bf0:a801::/45", "27947"}, + {"2804:ff8::/32", "263611"}, + {"2804:25bc::/44", "264299"}, + {"2001:1900:2265::/46", "3356"}, + {"240e:6:d013::/44", "4134"}, + {"2602:fcd7::/36", "6939"}, + {"2800:160:137f::/40", "14259"}, + {"2804:22e0::/32", "264128"}, + {"2804:483c::/32", "267106"}, + {"2a0b:f5c0::/29", "205377"}, + {"2001:559:3eb::/48", "33657"}, + {"2001:559:426::/48", "22258"}, + {"2600:1415:3801::/37", "20940"}, + {"2602:feda:ce0::/48", "141237"}, + {"2804:5660::/32", "267994"}, + {"2804:8028::/32", "271733"}, + {"2a07:14c0:8000::/29", "208861"}, + {"2a0e:b107:100::/44", "211972"}, + {"2a0e:b107:ff0::/48", "42394"}, + {"2001:250:341a::/47", "138438"}, + {"2405:7f00:a560::/36", "133414"}, + {"2409:8d14:2400::/38", "56044"}, + {"2600:1008:b070::/40", "22394"}, + {"2801:80:2210::/48", "267525"}, + {"2a00:fa60:1510::/44", "200077"}, + {"2a0b:71c0:1::/48", "56583"}, + {"2a10:a380::/29", "196777"}, + {"2a02:2858::/29", "8315"}, + {"2001:559:740::/48", "21508"}, + {"2400:dd02:1013::/31", "7497"}, + {"240a:ad73::/32", "146093"}, + {"2001:559:c3f2::/48", "33657"}, + {"2404:e0::/29", "703"}, + {"2406:9900::/32", "17936"}, + {"2407:e940::/48", "18403"}, + {"2600:6c10:816::/47", "20115"}, + {"2606:6c00:2::/48", "32787"}, + {"2a03:db80:2c14::/48", "47610"}, + {"2a11:28c0::/47", "212688"}, + {"2c0f:fb30::/32", "37412"}, + {"2001:559:8417::/44", "7016"}, + {"2803:2e0::/32", "269917"}, + {"2a10:2f00:13a::/48", "213069"}, + {"2001:559:c161::/46", "7922"}, + {"2001:697::/32", "199155"}, + {"2404:1c40:b0::/45", "24432"}, + {"2409:8704:7d00::/32", "24547"}, + {"2606:2ac0::/32", "46962"}, + {"2607:f110:140::/32", "21889"}, + {"2804:670::/32", "262665"}, + {"2a03:61a0::/32", "202719"}, + {"2a12:4946:1658::/48", "211398"}, + {"2001:468:c0f::/41", "10886"}, + {"2402:800:7820::/41", "7552"}, + {"240e:397:1500::/38", "140492"}, + {"2602:fca6::/36", "399466"}, + {"2804:6e34::/32", "270582"}, + {"2001:67c:1e8::/48", "49820"}, + {"2404:b0::/44", "4750"}, + {"240e:438:6840::/38", "4134"}, + {"2804:4e34::/32", "268246"}, + {"240a:ab77::/32", "145585"}, + {"2620:104:e000:ad::/64", "13536"}, + {"2800:160:142e::/43", "14259"}, + {"2a0a:2bc0::/32", "206894"}, + {"2001:559:45c::/48", "33652"}, + {"2001:559:7b7::/48", "7922"}, + {"2001:978:2100:100::/38", "174"}, + {"240a:a999::/32", "145107"}, + {"2603:ffb8::/25", "397165"}, + {"2801:80:c90::/48", "61656"}, + {"2a10:8980::/29", "15623"}, + {"2804:778::/32", "262411"}, + {"2804:eec::/35", "28226"}, + {"2a02:26c8::/32", "13156"}, + {"2a0f:ae40::/32", "207489"}, + {"2001:550::/47", "174"}, + {"2001:49f0:a00b::/43", "174"}, + {"240e:438:9420::/43", "140647"}, + {"2800:484:b800::/40", "10620"}, + {"2a00:cd80::/33", "24848"}, + {"2a0b:300::/29", "61317"}, + {"2607:fb90:c151::/36", "21928"}, + {"2a00:1288:ef99::/41", "10310"}, + {"2a04:fa87:fffd::/46", "2635"}, + {"2600:1415:9::/48", "20940"}, + {"2801:104:20::/44", "27828"}, + {"2804:128::/32", "28634"}, + {"2a02:2698:1c00::/38", "34590"}, + {"2a02:26f7:bec1::/46", "20940"}, + {"2a03:4b27:d000::/36", "206452"}, + {"2602:fd75:1::/46", "46793"}, + {"2001:7f8:69::/48", "201925"}, + {"240a:af9e::/32", "146648"}, + {"2804:8610::/32", "272618"}, + {"2a02:26f7:f68c::/48", "36183"}, + {"2001:4b58::/32", "6802"}, + {"2401:d800:5142::/42", "7552"}, + {"2402:9f00::/32", "58740"}, + {"2602:ff50:200::/48", "63452"}, + {"2602:ff62:203::/45", "61317"}, + {"2605:c140::/32", "32674"}, + {"2a00:ff40::/32", "6782"}, + {"2a0c:b641:493::/48", "53356"}, + {"2c0f:ea00::/32", "327733"}, + {"2610:1c0::/31", "11403"}, + {"2620:74:a9::/45", "7342"}, + {"2804:5d80::/33", "268976"}, + {"2806:2f0:9b83::/42", "17072"}, + {"2001:67c:1d0::/48", "42061"}, + {"2404:3d00:40e0::/47", "21433"}, + {"240e:67b:e400::/39", "140330"}, + {"2804:3900::/32", "266517"}, + {"2a00:1ef8::/32", "29690"}, + {"2a03:32c0:17::/34", "48503"}, + {"2a09:6a80::/48", "50007"}, + {"2001:559:567::/48", "33657"}, + {"2001:d38::/32", "2914"}, + {"2001:1980:6300::/36", "29838"}, + {"2804:7d00::/32", "271532"}, + {"2404:4600:fce::/48", "45991"}, + {"2409:8057:380f::/48", "56040"}, + {"2602:ff52::/48", "394923"}, + {"2607:f738:900::/41", "17184"}, + {"2804:690::/32", "262595"}, + {"2a0f:9400:8019::/48", "213262"}, + {"2001:559:87dd::/48", "7016"}, + {"2001:559:c012::/48", "33657"}, + {"2001:df0:1740::/48", "142369"}, + {"240e:980:4700::/40", "131325"}, + {"2a0c:2f07:9459::/48", "206924"}, + {"2403:1480:1000::/36", "36351"}, + {"2404:fa00:d000::/36", "45780"}, + {"240a:ae9f::/32", "146393"}, + {"2a03:a3a0::/32", "25780"}, + {"2a0b:4fc1::/32", "205688"}, + {"2c0f:fa78::/32", "37387"}, + {"2001:559:21e::/48", "7922"}, + {"2001:1248:5627::/43", "11172"}, + {"2001:4403:deae::/34", "9500"}, + {"2404:9600:400::/32", "7600"}, + {"2804:4f8:6200::/36", "28263"}, + {"2804:1408:6001::/35", "28635"}, + {"2a01:238:20b::/37", "6724"}, + {"2a0b:f940:1af3::/34", "205373"}, + {"2001:480:21::/46", "668"}, + {"2001:da8:c8::/48", "138442"}, + {"2001:4cc0::/32", "8426"}, + {"2404:bf40::/32", "139084"}, + {"2a02:b48::/33", "39572"}, + {"2a0e:97c3:631::/48", "20473"}, + {"2c0f:f140:e000::/35", "327700"}, + {"2001:67c:294c::/48", "210211"}, + {"2409:804c:25::/44", "9808"}, + {"2409:8078:2100::/36", "9808"}, + {"240a:a5cc::/32", "144134"}, + {"240e:e9:6800::/37", "134770"}, + {"240e:438:2c40::/38", "4134"}, + {"2800:bf0:3000::/44", "52257"}, + {"2804:3dc::/46", "52967"}, + {"2804:14a4::/32", "263341"}, + {"2001:7f8:31::/48", "24957"}, + {"2001:4d78:fe13::/48", "15830"}, + {"2804:695c::/32", "270265"}, + {"2403:6200:7602::/48", "138685"}, + {"2a02:26f7:e244::/48", "36183"}, + {"2a06:2540::/29", "44994"}, + {"2001:559:82d8::/47", "7922"}, + {"2001:67c:18c0::/48", "62311"}, + {"2404:bf40:e006::/48", "7545"}, + {"2a03:85c1:925d::/29", "20561"}, + {"2408:8459:6050::/38", "17816"}, + {"240e:965:e400::/39", "133775"}, + {"2800:b10:100::/44", "27884"}, + {"2a04:9a00:1001::/46", "202553"}, + {"2a0e:b107:16::/48", "208191"}, + {"2001:cb0:20c::/47", "4637"}, + {"2605:f700:10::/48", "18978"}, + {"2607:f7d8::/32", "26554"}, + {"2804:85a4::/32", "272592"}, + {"2806:2f0:50c1::/46", "17072"}, + {"2408:8957:a900::/40", "17816"}, + {"2600:8804:3f07::/32", "22773"}, + {"2605:6080::/32", "62833"}, + {"2607:3200:13::/45", "11240"}, + {"2804:ef8::/32", "262302"}, + {"2c0f:f0c8::/32", "328037"}, + {"2404:8640::/32", "17675"}, + {"2600:1008:e010::/36", "22394"}, + {"2804:3cb8::/32", "53221"}, + {"2806:2f0:8460::/35", "17072"}, + {"2403:7a40::/32", "133317"}, + {"240a:a789::/32", "144579"}, + {"2404:5540::/37", "134715"}, + {"240e:965:f400::/39", "58772"}, + {"2600:370f:3725::/44", "32261"}, + {"2800:160:15f0::/38", "14259"}, + {"2a03:5d80::/32", "44858"}, + {"240a:a72f::/32", "144489"}, + {"2605:32c0::/32", "5670"}, + {"2a00:cb0::/34", "29624"}, + {"2a03:5a00:4::/48", "34518"}, + {"2001:44b8:30a3::/48", "4739"}, + {"2404:bf40:f804::/37", "139084"}, + {"2409:8950::/30", "56047"}, + {"240e:3b0:2c00::/35", "134774"}, + {"2a02:26f7:d194::/48", "36183"}, + {"2a02:26f7:e988::/48", "36183"}, + {"2401:7200::/47", "55328"}, + {"2404:d500:6::/44", "132370"}, + {"240a:a6e2::/32", "144412"}, + {"240c:c030::/24", "23910"}, + {"2610:a1:3060::/48", "12008"}, + {"2804:59cc::/32", "268726"}, + {"2a01:5b80::/32", "13226"}, + {"2a0b:b140::/29", "62000"}, + {"2001:559:866c::/48", "33651"}, + {"2602:fec2::/32", "16713"}, + {"2a02:26f7:18::/48", "36183"}, + {"2a04:4e40:b410::/41", "54113"}, + {"2a0c:b641:45a::/48", "208850"}, + {"2a0d:a740::/48", "208673"}, + {"2602:10d::/33", "20115"}, + {"2806:2f0:50e3::/39", "17072"}, + {"2001:559:c108::/48", "33287"}, + {"240e:1a:150::/44", "134770"}, + {"2600:9000:117e::/48", "16509"}, + {"2605:4c0::/32", "6939"}, + {"2401:b780:5010::/47", "65435"}, + {"2405:1e40:2::/32", "58475"}, + {"2405:ba00:8804::/48", "7160"}, + {"2801:80:17b3::/41", "61580"}, + {"2001:918:ffab::/43", "3303"}, + {"2404:3d00:40d7::/48", "21433"}, + {"2408:8256:378c::/43", "17623"}, + {"2620:112:c000::/40", "29899"}, + {"2804:60:40::/32", "53066"}, + {"2804:5bf4::/32", "268879"}, + {"2804:7d60::/32", "20473"}, + {"2a06:a000:1d0::/44", "142594"}, + {"2a0b:3c40:fca6::/48", "208258"}, + {"2001:ee0:cc40::/40", "45899"}, + {"2600:9000:1188::/46", "16509"}, + {"2804:66b4::/32", "269577"}, + {"2a02:e982:27::/43", "19551"}, + {"2600:1006:9140::/44", "6167"}, + {"2603:c013:e000::/36", "31898"}, + {"2806:230:1014::/48", "265594"}, + {"2a02:6ea0:e000::/38", "60068"}, + {"2a07:22c1:4::/48", "212845"}, + {"2a07:2680::/29", "8823"}, + {"2001:559:82aa::/48", "7015"}, + {"2408:8456:f140::/28", "17816"}, + {"240a:a271::/32", "143275"}, + {"2620:119:50d2::/48", "13443"}, + {"2804:7b1c::/32", "271411"}, + {"2400:cb00:a310::/45", "13335"}, + {"2401:d800:52a0::/41", "7552"}, + {"240a:a935::/32", "145007"}, + {"2803:ad80:69::/48", "42473"}, + {"2a00:ebe0::/32", "62423"}, + {"2a04:9ac0::/32", "62242"}, + {"240e:44d:6f80::/41", "4134"}, + {"2605:2800:c300::/48", "11481"}, + {"2804:a80::/32", "262293"}, + {"2804:539c::/32", "268595"}, + {"2404:b0:1005::/48", "135586"}, + {"240e:108:99::/48", "4816"}, + {"2604:180:9::/45", "3842"}, + {"2800:160:1770::/44", "14259"}, + {"2804:1884::/32", "61937"}, + {"2804:6374::/32", "269362"}, + {"2a00:ece1:2::/48", "43474"}, + {"2a10:57c0::/29", "8767"}, + {"2403:5180:5::/48", "134666"}, + {"2409:804c:23::/45", "9808"}, + {"2607:fa48:fc11::/29", "5769"}, + {"2610:a8::/32", "600"}, + {"2a05:f507::/45", "13443"}, + {"2a07:9140::/29", "57475"}, + {"2001:250:6408::/43", "24367"}, + {"2001:dd8:12::/48", "18366"}, + {"2408:8459:cc10::/42", "17623"}, + {"2607:9800:c117::/35", "15085"}, + {"2a03:1aa0::/33", "201730"}, + {"2a03:4d43:2800::/32", "199610"}, + {"2a10:2f00:15d::/48", "39282"}, + {"2001:504:35::/48", "14432"}, + {"2001:559:86c4::/47", "33490"}, + {"2001:67c:130::/48", "30857"}, + {"2401:c900:1400::/38", "36351"}, + {"2405:ba00:8004::/48", "1217"}, + {"2600:1403:6c00::/48", "35994"}, + {"2602:ff62:82::/39", "61317"}, + {"2804:4398::/32", "267578"}, + {"2804:6fdc::/32", "270689"}, + {"2a06:62c0:51::/40", "204138"}, + {"2a06:b5c0::/30", "400177"}, + {"2a07:a540::/29", "394545"}, + {"2001:559:8694::/48", "33651"}, + {"2001:559:c4ea::/48", "7922"}, + {"2604:3d80:808::/48", "394302"}, + {"2804:ae0:8500::/38", "28352"}, + {"2804:7dd8::/32", "271586"}, + {"2001:559:c16c::/48", "33489"}, + {"2001:da8:22c::/48", "23910"}, + {"2001:df7:e180::/48", "137165"}, + {"2406:2000:fc::/46", "10229"}, + {"2a02:26f7:cd41::/46", "20940"}, + {"2a03:6920::/32", "60592"}, + {"2a04:1b00:a::/47", "61007"}, + {"2a04:a4c0::/48", "59789"}, + {"2403:e200:405::/36", "45543"}, + {"2804:83b8::/33", "272214"}, + {"2408:8957:3000::/40", "17622"}, + {"240a:a4cd::/32", "143879"}, + {"240e:a65::/35", "140329"}, + {"2600:9000:1e05::/48", "16509"}, + {"2001:678:f0c::/48", "211638"}, + {"2402:ef02::/31", "7633"}, + {"2409:8004:807::/44", "9808"}, + {"2600:1011::/32", "6167"}, + {"2607:f220:41e::/48", "70"}, + {"2804:40dc::/32", "265986"}, + {"2a01:1b0:c000::/44", "51923"}, + {"2a03:2880:f267::/44", "32934"}, + {"2001:559:87a1::/45", "7015"}, + {"2403:2200::/48", "45148"}, + {"240e:9:7000::/32", "4134"}, + {"2a00:d600::/32", "24778"}, + {"2001:559:8389::/48", "33651"}, + {"2405:9800:100::/44", "131445"}, + {"2602:fd3a:229::/48", "14618"}, + {"2804:104c:2800::/40", "263629"}, + {"2a02:d880::/32", "41960"}, + {"2a07:3740::/29", "47132"}, + {"2804:5f68::/32", "269097"}, + {"2a0b:b87:ffee::/48", "213361"}, + {"2001:559:85c0::/48", "7922"}, + {"2001:1620:2015::/48", "35663"}, + {"2001:49f0:d200::/48", "30058"}, + {"2403:7cc0::/32", "138179"}, + {"2a02:730:4001::/36", "29278"}, + {"2401:0:8001::/48", "23966"}, + {"2607:f390:7200::/39", "17244"}, + {"2a02:26f7:d580::/48", "36183"}, + {"2804:8280::/37", "272521"}, + {"2a01:c9c0:bf::/48", "24600"}, + {"2a02:26f7:b889::/42", "20940"}, + {"2a02:7b07:fff::/48", "48328"}, + {"2a03:2ca0:3136::/32", "59865"}, + {"2a03:87c0::/29", "31042"}, + {"2a04:9a00:100e::/48", "202553"}, + {"2a0e:e280::/29", "208740"}, + {"2001:b68::/32", "2108"}, + {"2001:da8:a2::/48", "24357"}, + {"2407:6e00:4::/48", "38332"}, + {"2606:3080::/32", "16423"}, + {"2804:108c:fa00::/37", "28146"}, + {"2a10:1c0::/29", "207297"}, + {"2001:559:834d::/48", "33651"}, + {"2600:1f15::/36", "16509"}, + {"2620:0:2ee0::/48", "20144"}, + {"2801:1fc:36::/48", "27951"}, + {"2804:3440::/32", "265445"}, + {"2001:559:8645::/46", "33651"}, + {"2001:448a:50d0::/42", "7713"}, + {"2607:fe68::/32", "15146"}, + {"2402:800:f7e0::/36", "7552"}, + {"2600:1006:f150::/31", "22394"}, + {"2600:1010:9100::/44", "6167"}, + {"2a01:5041:5000::/48", "202196"}, + {"2001:250:218::/48", "24349"}, + {"2402:e380:319::/48", "141374"}, + {"2403:4c00::/32", "24453"}, + {"2405:1c0:7151::/48", "55303"}, + {"2804:6df0:8000::/33", "270565"}, + {"2001:fc0::/32", "17547"}, + {"2404:f780::/46", "136557"}, + {"240a:aee5::/32", "146463"}, + {"240e:67f:e600::/24", "4134"}, + {"2604:dfc0::/32", "14727"}, + {"2605:640f:640f::/48", "211066"}, + {"2607:fc88::/32", "30475"}, + {"2801:8e::/36", "11993"}, + {"2804:3b0:4002::/32", "53062"}, + {"2804:164c:fad::/32", "263280"}, + {"2806:20d:504b::/43", "32098"}, + {"2001:67c:2674::/48", "57684"}, + {"2a0c:dec0:3008::/48", "207063"}, + {"2001:559:86c6::/44", "7922"}, + {"2001:4de0:2101::/48", "34305"}, + {"2606:1b00::/32", "11722"}, + {"2801:16:800::/48", "19429"}, + {"2a02:5320:100::/40", "12189"}, + {"2a0d:8480::/48", "48282"}, + {"2001:559:806b::/45", "7725"}, + {"2001:1248:84e4::/44", "11172"}, + {"2404:140::/32", "37992"}, + {"2409:8904:d070::/40", "24547"}, + {"2806:310:d::/43", "16960"}, + {"2001:559:143::/45", "7922"}, + {"2001:df4:4700::/48", "137107"}, + {"2001:1248:561b::/42", "11172"}, + {"240e:983:1301::/40", "4134"}, + {"2a02:2af8::/39", "702"}, + {"2a0c:f440::/29", "200319"}, + {"2001:550:9101::/38", "174"}, + {"2401:1740:3000::/48", "136600"}, + {"240a:aba6::/32", "145632"}, + {"2804:14d:6887::/44", "28573"}, + {"2804:2a30::/32", "264063"}, + {"2804:6290::/32", "269304"}, + {"2806:2f0:1181::/48", "22884"}, + {"2a0f:8d40::/29", "207670"}, + {"2404:f4c0:ea02::/40", "140731"}, + {"2605:a401:8369::/40", "33363"}, + {"2607:fc48:bc08::/48", "40009"}, + {"2804:cd0::/32", "52557"}, + {"2a04:ce40::/29", "13157"}, + {"2001:480:31::/48", "5887"}, + {"2001:4940:2002::/32", "21547"}, + {"2408:80e9:4000::/34", "4837"}, + {"240a:aee6::/32", "146464"}, + {"2401:1800::/32", "45187"}, + {"2402:e280:2157::/44", "134674"}, + {"2403:2880::/32", "131905"}, + {"2a0b:5080::/29", "43402"}, + {"2606:9400::/32", "3737"}, + {"2800:484:7700::/36", "14080"}, + {"2a03:2480:8023::/48", "200107"}, + {"2602:fd10:e00::/40", "399980"}, + {"2001:559:c3de::/47", "7922"}, + {"2401:4900:4f00::/45", "45609"}, + {"2402:800:398d::/43", "7552"}, + {"2402:e280:222d::/43", "134674"}, + {"2620:52:6::/48", "21785"}, + {"2804:72e4::/34", "270882"}, + {"2a02:ac80:b01::/37", "25145"}, + {"2a10:77c0::/29", "212144"}, + {"2001:4868:4300::/32", "701"}, + {"2620:74:2c::/48", "396574"}, + {"2408:8957:7840::/40", "17622"}, + {"2a01:ce9e:1000::/31", "51964"}, + {"2409:8924:2100::/38", "56046"}, + {"2409:896a:3000::/39", "9808"}, + {"240e:980:4c00::/40", "58519"}, + {"2602:809:c000::/44", "54364"}, + {"2607:fdf0:5e7a::/40", "8008"}, + {"2804:6acc::/32", "270359"}, + {"2a02:2818:5::/48", "196705"}, + {"2001:559:83d7::/48", "7015"}, + {"2001:559:85a5::/46", "33659"}, + {"2001:559:c192::/48", "7015"}, + {"2400:9380:97c0::/44", "136167"}, + {"2620:125:b000::/47", "15092"}, + {"2800:4b0:400d::/43", "12252"}, + {"2804:811c::/32", "272433"}, + {"240e:109:8048::/48", "134769"}, + {"2620:126:5040::/47", "27632"}, + {"2804:248:9::/39", "28598"}, + {"2a00:9801:e001::/48", "199072"}, + {"2a02:720:300::/32", "34427"}, + {"2404:c400:dc05::/48", "58735"}, + {"2800:160:1a1b::/42", "14259"}, + {"2a0a:b440::/29", "212755"}, + {"2a0d:8f80::/29", "204790"}, + {"240e:109:8029::/48", "4134"}, + {"2604:5c80::/32", "21981"}, + {"2804:dd4::/33", "53024"}, + {"2804:1c90::/32", "61662"}, + {"2804:4d44::/32", "262978"}, + {"2804:6a54::/32", "270329"}, + {"2a03:e1c0::/32", "199421"}, + {"2001:67c:170c::/48", "60829"}, + {"2001:dce:7400::/48", "45285"}, + {"240a:af1e::/32", "146520"}, + {"2a02:26f0:75::/46", "20940"}, + {"2a0b:22c0::/29", "59939"}, + {"2a0c:9380::/29", "328543"}, + {"2404:bf40:a101::/46", "7545"}, + {"2406:20c0:a001::/33", "140423"}, + {"2a00:1c90::/32", "29486"}, + {"2402:1580:297::/34", "17682"}, + {"2a03:b840:2::/47", "61221"}, + {"2a0b:8880::/29", "51164"}, + {"2001:4b20:0:194::/43", "34288"}, + {"240e:6:d012::/48", "142608"}, + {"2600:1480:5000::/40", "33905"}, + {"2602:101::/33", "20115"}, + {"2604:14c0::/32", "22121"}, + {"2806:2f0:9da1::/46", "17072"}, + {"2a01:1ee::/32", "33843"}, + {"2001:559:80a6::/48", "33659"}, + {"2600:1008:a120::/36", "22394"}, + {"2600:140f:3600::/48", "9498"}, + {"2800:160:1f97::/42", "14259"}, + {"240e:3b3:f700::/36", "4134"}, + {"2804:6b4::/32", "53224"}, + {"2001:559:5ef::/43", "7922"}, + {"2402:800:9b47::/43", "7552"}, + {"2404:bf40:8783::/41", "139084"}, + {"2606:2800:6030::/46", "15133"}, + {"2001:200:e00::/40", "4690"}, + {"2402:c340::/32", "38047"}, + {"240a:a9b3::/32", "145133"}, + {"2600:6c10:f248::/45", "20115"}, + {"2a03:9ba0:201::/46", "209082"}, + {"2620:104:f000::/44", "33517"}, + {"2801:80:34a0::/48", "268807"}, + {"2a0b:6cc1:8::/29", "202984"}, + {"2400:ac40:a10::/41", "136255"}, + {"2409:8087:3c00::/40", "24444"}, + {"2804:a8c::/38", "264159"}, + {"2804:4fe4::/32", "53086"}, + {"2001:dc8:8000::/48", "24089"}, + {"2402:8000::/32", "24541"}, + {"2406:da00:1000::/40", "16509"}, + {"240e:101:4000::/30", "4134"}, + {"2803:3010::/32", "271808"}, + {"2803:9800:9505::/46", "11664"}, + {"2803:b800::/32", "262202"}, + {"2001:559:c479::/48", "33650"}, + {"2001:67c:2740::/48", "198543"}, + {"2001:4d50:fe00::/39", "34309"}, + {"2409:8a35::/28", "9808"}, + {"2a02:26f0:13d::/48", "8966"}, + {"2a02:26f7:be11::/42", "20940"}, + {"2c0f:f590:0:203::/32", "36974"}, + {"2001:559:c3a6::/48", "7922"}, + {"2001:678:7d8::/48", "2643"}, + {"2400:cb00:a2c0::/48", "13335"}, + {"2610:a1:3024::/48", "12008"}, + {"2804:54:6008::/32", "28220"}, + {"2804:48e0::/32", "267150"}, + {"2001:559:833b::/48", "33659"}, + {"2600:6c38:b42::/45", "20115"}, + {"2a01:a620::/45", "56911"}, + {"2001:418:8006::/48", "3927"}, + {"2605:4ac0::/32", "23503"}, + {"2607:ae80:192::/48", "26558"}, + {"2607:f380:a69::/32", "2152"}, + {"2a01:6f0::/39", "42366"}, + {"2a09:dd40::/32", "205718"}, + {"2401:d800:96f0::/39", "7552"}, + {"2605:a401:8120::/43", "33363"}, + {"2a03:2880:f300::/36", "32934"}, + {"2401:2200:10::/48", "55420"}, + {"240a:a599::/32", "144083"}, + {"2604:d680:5::/48", "29757"}, + {"2800:160:1397::/42", "14259"}, + {"2804:810::/32", "262344"}, + {"2a02:2a8::/32", "29655"}, + {"2001:388:20c5::/35", "7575"}, + {"2409:8750:500::/38", "56047"}, + {"2604:9e40::/46", "29457"}, + {"2804:4800::/32", "267091"}, + {"2804:7e74::/33", "271625"}, + {"2800:3c0:3060::/40", "19863"}, + {"2803:5d20::/32", "267757"}, + {"2a02:ac80:d001::/34", "25145"}, + {"2a06:56c0:11::/46", "51776"}, + {"2a09:8380:a::/48", "209561"}, + {"2402:3a80:400::/41", "38266"}, + {"2804:339c::/32", "265407"}, + {"2a00:1288:f044::/36", "10310"}, + {"2a12:6fc0::/31", "204957"}, + {"2001:559:87c4::/46", "7015"}, + {"2001:7f0::/39", "13237"}, + {"240a:a84f::/32", "144777"}, + {"2607:f7a8:603::/45", "46887"}, + {"2806:2f0:4281::/46", "17072"}, + {"2a02:4340::/32", "51551"}, + {"2a0d:3200::/29", "61161"}, + {"2001:df7:4e80::/48", "138754"}, + {"2001:1248:98fb::/45", "11172"}, + {"2402:800:5001::/39", "7552"}, + {"2404:60c0::/32", "131911"}, + {"240a:a335::/32", "143471"}, + {"240a:aa7f::/32", "145337"}, + {"2804:6378::/32", "269363"}, + {"2a00:bae0::/32", "14381"}, + {"2402:800:552b::/41", "7552"}, + {"2403:2c00:7::102/63", "4058"}, + {"2602:fe19::/43", "26073"}, + {"2a06:ac80:11::/48", "205427"}, + {"240a:aed2::/32", "146444"}, + {"2402:cec0::/32", "137566"}, + {"2800:160:1679::/40", "14259"}, + {"2a0e:b107:9d4::/47", "213262"}, + {"2001:4268:201::/40", "15964"}, + {"2407:e1c0::/42", "146872"}, + {"2620:12b:4081::/41", "395568"}, + {"2804:49dc::/32", "267205"}, + {"2804:8244:8400::/33", "272509"}, + {"2806:2f0:4321::/46", "17072"}, + {"2a00:1ec8:28::/43", "2854"}, + {"2a01:a980::/29", "197524"}, + {"2001:559:331::/48", "7015"}, + {"2001:67c:209c::/48", "212430"}, + {"2402:5580::/32", "133817"}, + {"2409:8a14:7000::/32", "56044"}, + {"2600:1901:ff80::/44", "396982"}, + {"2806:230:400e::/48", "265594"}, + {"2806:2f0:3463::/40", "17072"}, + {"2602:feda:185::/48", "142586"}, + {"2804:884::/47", "262375"}, + {"2804:cb0::/32", "52742"}, + {"2a01:c50e:f000::/39", "12479"}, + {"2a0d:f840::/29", "57756"}, + {"2001:67c:2f98::/48", "29691"}, + {"2404:4800::/46", "9892"}, + {"2804:14d:ac81::/43", "28573"}, + {"2804:6c90::/32", "270477"}, + {"2a0e:8f02:213d::/48", "211722"}, + {"240a:a218::/32", "143186"}, + {"2804:14c:65ca::/43", "28573"}, + {"2804:108c::/32", "28146"}, + {"2a00:5080::/32", "204119"}, + {"2a02:2e02:16b0::/39", "12479"}, + {"2001:559:86bb::/48", "7922"}, + {"2402:3880::/32", "23791"}, + {"2409:8008:1900::/34", "24547"}, + {"2409:8087:6c70::/35", "9808"}, + {"2409:8924:ab00::/37", "56046"}, + {"2602:fc80::/40", "396503"}, + {"2804:5d80:4100::/32", "268976"}, + {"2a02:188:6202::/29", "31027"}, + {"2a0e:a280::/29", "208254"}, + {"2001:67c:19ac::/48", "48919"}, + {"2001:67c:2ed4::/48", "6890"}, + {"2804:1398:12::/34", "263541"}, + {"2804:1460::/32", "28308"}, + {"2a0c:9280::/29", "42316"}, + {"2001:ee0:300::/47", "135905"}, + {"2407:4800::/33", "139759"}, + {"2620:100:4::/46", "19637"}, + {"2620:139:6008::/48", "22600"}, + {"2a02:128:7::/48", "50245"}, + {"2a02:26f7:f34b::/48", "20940"}, + {"2001:559:842e::/48", "33287"}, + {"2400:bb40:2005::/44", "141039"}, + {"2402:800:7410::/42", "7552"}, + {"240e:60c:b000::/37", "137688"}, + {"2600:6c10:c39::/38", "20115"}, + {"2a02:8200::/27", "9145"}, + {"240a:a1f8::/32", "143154"}, + {"2600:141c:7801::/32", "20940"}, + {"2a09:4c0:e01::/39", "58057"}, + {"2602:ffbd::/36", "14440"}, + {"2804:48f0::/32", "61589"}, + {"2001:559:c21d::/48", "33491"}, + {"2402:8100:2442::/44", "55644"}, + {"2408:8957:9500::/40", "17816"}, + {"240a:a47a::/32", "143796"}, + {"240a:a997::/32", "145105"}, + {"2604:bc40:6001::/39", "22188"}, + {"2a00:7ec0::/47", "8528"}, + {"2a01:7d20:e00::/40", "203645"}, + {"2001:520:101c::/42", "8103"}, + {"2806:2f0:1100::/46", "22884"}, + {"2402:ee40:5f::/48", "134033"}, + {"240a:aaed::/32", "145447"}, + {"2602:feda:b8c::/47", "200334"}, + {"2803:1000::/32", "263783"}, + {"2a04:4e40:2600::/48", "54113"}, + {"2001:1960:3::/43", "5650"}, + {"2409:8f1e::/31", "24400"}, + {"2605:18c0::/32", "25892"}, + {"2804:1570::/32", "263388"}, + {"2804:7be8:c00e::/43", "271462"}, + {"2a00:1348:10::/48", "57837"}, + {"2a0b:b40::/29", "51815"}, + {"2001:4d40::/32", "13237"}, + {"2604:ca00:156::/42", "36492"}, + {"2804:43fc:ff00::/40", "267614"}, + {"2404:ea80:300::/36", "135373"}, + {"2408:8456:8400::/42", "17622"}, + {"2001:559:c4fc::/48", "7725"}, + {"2a02:e980:19c::/42", "19551"}, + {"2400:dcc0::/32", "38631"}, + {"2405:ca40::/32", "134918"}, + {"2409:8087:3100::/36", "9808"}, + {"240a:a7aa::/32", "144612"}, + {"2602:fd23:3::/44", "33185"}, + {"2605:db40::/32", "398326"}, + {"2800:484:2800::/37", "14080"}, + {"2800:bf0:a810::/44", "27947"}, + {"2a02:26f7:eacc::/48", "36183"}, + {"2a0b:6b81:1::/48", "203729"}, + {"2a0e:b107:f60::/48", "207466"}, + {"2403:4c0:8000::/33", "17639"}, + {"2404:8000:a0:609::/44", "17451"}, + {"2606:2800:257::/44", "15133"}, + {"2801:80:6d0::/48", "52750"}, + {"2804:5fd4::/32", "269126"}, + {"2a03:82e0::/35", "200991"}, + {"2001:559:3cf::/48", "33654"}, + {"2001:57a:2203::/35", "22773"}, + {"2401:5a40::/32", "136759"}, + {"240e:3b9:f700::/36", "4134"}, + {"2001:559:4df::/42", "7725"}, + {"2400:dcc0:ab04::/37", "38631"}, + {"2603:b0e0:feee::/39", "11796"}, + {"2620:129:6020::/48", "395363"}, + {"2804:11bc:c000::/38", "263435"}, + {"2a00:7146::/48", "51430"}, + {"2a00:8a02:8010::/44", "200656"}, + {"2a02:e0c0:1000::/38", "9100"}, + {"2001:559:1ff::/48", "33491"}, + {"2001:559:8541::/48", "22909"}, + {"2408:2000::/24", "4608"}, + {"2a04:1bc3::/32", "60982"}, + {"2a09:800::/29", "209975"}, + {"2408:8459:8010::/42", "17623"}, + {"2600:1011:9010::/39", "6167"}, + {"2602:fbf0::/32", "400312"}, + {"2602:fd06::/36", "22150"}, + {"2803:8960::/39", "269736"}, + {"2a00:ec8::/37", "38930"}, + {"2a02:26f7:fbc9::/42", "20940"}, + {"2001:67c:674::/48", "12552"}, + {"2001:4870:e00b::/48", "21928"}, + {"2409:8904:8240::/39", "24547"}, + {"240e:438:7220::/43", "140647"}, + {"2620:0:690::/47", "13371"}, + {"2804:10d4::/32", "262376"}, + {"2804:3a48::/32", "266081"}, + {"2a02:26f7:be0c::/48", "36183"}, + {"2a0c:6180::/29", "47648"}, + {"2001:559:86f4::/47", "33651"}, + {"2001:978:8e01::/39", "174"}, + {"240a:a7a8::/32", "144610"}, + {"240a:a840::/32", "144762"}, + {"2806:2f0:20e2::/48", "17072"}, + {"2c0f:fc00::/27", "3741"}, + {"2001:559:8535::/48", "21508"}, + {"2001:df3:b380::/48", "38238"}, + {"2604:8100::/32", "26292"}, + {"2800:bf0:100::/46", "52257"}, + {"2404:3d00:40d4::/46", "21433"}, + {"240a:a11f::/32", "142937"}, + {"240a:a2d7::/32", "143377"}, + {"2403:5400:1811::/32", "38450"}, + {"2804:1dd8::/32", "264398"}, + {"2a00:13d0::/32", "48961"}, + {"2a02:26f7:c358::/48", "36183"}, + {"2a03:5640:f533::/41", "2906"}, + {"2c0f:f608:f200::/40", "21351"}, + {"2403:e040::/33", "138399"}, + {"2620:54:a000::/48", "396024"}, + {"2401:d800:7782::/41", "7552"}, + {"2401:d800:fca0::/41", "7552"}, + {"2804:5c70::/32", "268909"}, + {"2804:6710::/32", "269601"}, + {"2a05:dd80::/29", "1764"}, + {"2001:678:d30::/48", "59570"}, + {"240a:a11d::/32", "142935"}, + {"240a:a32d::/32", "143463"}, + {"2800:160:1c14::/42", "14259"}, + {"2800:160:2197::/42", "14259"}, + {"2804:204:231::/45", "28186"}, + {"2804:7a94::/35", "271380"}, + {"2001:559:727::/48", "33287"}, + {"2001:44b8:6066::/48", "7545"}, + {"2404:e801:1015::/44", "55430"}, + {"240e:3b5:7800::/39", "4134"}, + {"2a10:a8c0::/29", "211678"}, + {"2406:b700::/32", "58504"}, + {"2402:800:991d::/42", "7552"}, + {"2605:a900:6000::/32", "46887"}, + {"2804:14c:87fd::/46", "28573"}, + {"2a09:58c0:1::/48", "9186"}, + {"2a0f:8644:b00c::/31", "25682"}, + {"2a11:fac0::/32", "41044"}, + {"2001:4de0:3005::/39", "33438"}, + {"2804:1784:8900::/33", "263152"}, + {"2001:559:84dc::/47", "7015"}, + {"240e:966:9800::/34", "4134"}, + {"2804:c80::/32", "52719"}, + {"2804:4118::/32", "266003"}, + {"2806:36a::/32", "265613"}, + {"2a00:50c0::/48", "31415"}, + {"2409:8904:9490::/39", "24547"}, + {"2a02:2698:2400::/38", "41786"}, + {"2a05:1500:400::/40", "205631"}, + {"2a0e:1c80:8::/48", "3399"}, + {"2605:b780::/32", "54555"}, + {"2a00:1d58:ff00::/44", "47524"}, + {"2804:53e0:8200::/33", "28258"}, + {"2806:2f0:7063::/40", "17072"}, + {"2400:8b00:1600::/42", "45727"}, + {"2605:5340::/32", "62532"}, + {"2401:7400:e002::/36", "4773"}, + {"240a:a598::/32", "144082"}, + {"240a:a752::/32", "144524"}, + {"2600:9000:11b6::/47", "16509"}, + {"2603:c0e1:2000::/36", "54253"}, + {"2803:94c0::/32", "52273"}, + {"2806:230:4007::/48", "11888"}, + {"2a0d:6100::/29", "60781"}, + {"2400:4500::/32", "24167"}, + {"2402:800:54c5::/43", "7552"}, + {"240e:679:1000::/37", "140330"}, + {"2806:230:1206::/48", "265594"}, + {"2a06:e881:690f::/48", "208434"}, + {"2001:579:8c4::/43", "22773"}, + {"2001:1388:8a47::/43", "6147"}, + {"240e:940:8f00::/33", "4134"}, + {"2803:f2e0::/32", "269931"}, + {"2804:30::/32", "28169"}, + {"2804:6c0:500::/43", "262418"}, + {"2a02:cb43:8000::/48", "20546"}, + {"240e:3b9:7a00::/32", "140313"}, + {"2600:370f:60c1::/43", "32261"}, + {"2a03:fd80::/29", "200781"}, + {"2a0d:10c0::/29", "31566"}, + {"2401:d800:9640::/42", "7552"}, + {"2404:e100:2001::/48", "55685"}, + {"2408:8256:3681::/43", "17623"}, + {"240e:309::/35", "137691"}, + {"2803:aa80::/32", "263698"}, + {"2804:3a08::/32", "266066"}, + {"2a02:26f7:d745::/46", "20940"}, + {"2a03:db80:4815::/37", "680"}, + {"2400:9940:2001::/32", "136224"}, + {"2605:940:400::/40", "396919"}, + {"2606:2800:4af4::/47", "15133"}, + {"2804:c78::/32", "52714"}, + {"2a03:d5c0:1c00::/42", "199391"}, + {"2001:559:8332::/48", "20214"}, + {"2400:adc7:1000::/39", "9541"}, + {"240e:5a:46c0::/39", "140299"}, + {"2604:d600:532::/45", "32098"}, + {"2804:65e8::/32", "269522"}, + {"2806:260:1009::/48", "27672"}, + {"2a02:ee80:410b::/43", "3573"}, + {"2400:6100::/32", "137549"}, + {"2403:8740:1::/48", "138202"}, + {"240a:af46::/32", "146560"}, + {"2600:806:300::/48", "12234"}, + {"2a00:f28:20::/48", "57187"}, + {"2a0b:ae00:1c00::/29", "207044"}, + {"2607:f3a0::/43", "23342"}, + {"2406:2400:f01d::/48", "45287"}, + {"240a:abca::/32", "145668"}, + {"2001:678:d74::/48", "197058"}, + {"2001:67c:112c::/48", "212760"}, + {"2604:b300:ad01::/48", "394896"}, + {"2001:559:822b::/48", "33650"}, + {"2001:559:c2f3::/48", "33652"}, + {"2602:fed2:7128::/48", "53356"}, + {"2a02:26f7:cd05::/46", "20940"}, + {"2a03:6980::/32", "15830"}, + {"2405:19c0::/48", "18403"}, + {"2407:6180::/32", "138466"}, + {"2806:250:700::/40", "28509"}, + {"2001:579:d144::/42", "22773"}, + {"2001:6a8:8a01::/34", "2611"}, + {"2001:1248:5bdb::/42", "11172"}, + {"2409:8027:2a07::/39", "9808"}, + {"2620:46:8000::/48", "17234"}, + {"2801:c4:b4::/48", "28392"}, + {"2a02:1620:8004::/48", "4637"}, + {"2a02:26a8:f000::/36", "49675"}, + {"2001:480:1670::/48", "213"}, + {"2408:8256:337f::/48", "17816"}, + {"2605:a7c0:120::/48", "14618"}, + {"2804:4d50:e000::/36", "268189"}, + {"2a03:f040::/32", "48133"}, + {"2a0a:e5c0:8::/48", "207996"}, + {"2001:d88::/32", "4694"}, + {"2408:8456:7c00::/42", "17622"}, + {"2600:1004:d000::/41", "6167"}, + {"2605:c740::/32", "395510"}, + {"2a00:79e0:504::/48", "395973"}, + {"2a02:26f7:c3c0::/48", "36183"}, + {"2a02:d500::/29", "48596"}, + {"2606:7d00::/32", "23248"}, + {"2a04:1b00:10::/47", "61005"}, + {"2400:1d60::/32", "45727"}, + {"2406:3540:ffec::/46", "18041"}, + {"2408:8957:d6c0::/36", "17816"}, + {"2409:8c70:3ad4::/48", "140105"}, + {"2607:f220:f0::/48", "7046"}, + {"2a01:7ce0::/32", "62102"}, + {"2a0c:6580:2::/48", "35365"}, + {"2001:678:bc4::/48", "62126"}, + {"2001:1248:846b::/45", "11172"}, + {"2804:84fc:500::/36", "272550"}, + {"2a02:8380::/30", "8412"}, + {"2001:428:6809::/32", "209"}, + {"2401:1780::/32", "18046"}, + {"2a05:6740:40c0::/48", "206228"}, + {"2001:67c:4a4::/48", "3301"}, + {"240e:44d:6600::/42", "140345"}, + {"240e:965:800::/37", "133774"}, + {"2602:fcd8:1c::/46", "399141"}, + {"2a01:c9c0:800f::/48", "2280"}, + {"2a03:56a0::/32", "50971"}, + {"2001:67c:88c::/48", "42441"}, + {"2408:8459:8c50::/38", "17816"}, + {"2409:8c54:4900::/35", "56040"}, + {"2606:4180::/35", "393775"}, + {"2800:160:17fd::/36", "14259"}, + {"2a03:97c0:1::/48", "58076"}, + {"2a07:acc0::/29", "39899"}, + {"2a0d:d900:1::/48", "57164"}, + {"2402:3a80:1c88::/42", "38266"}, + {"240e:45c:c600::/40", "131285"}, + {"2a00:79e1:f20::/48", "36384"}, + {"2a07:3b80:4::/29", "47869"}, + {"2c0f:efd0::/36", "328336"}, + {"2001:510:101::/44", "376"}, + {"2400:8000:2421::/35", "4800"}, + {"2804:984:f800::/37", "263097"}, + {"2a00:e40::/32", "9127"}, + {"2400:9380:9dc0::/44", "136167"}, + {"240a:a84b::/32", "144773"}, + {"2800:bf0:806b::/43", "27947"}, + {"2001:250:3c11::/46", "138369"}, + {"2620:134:a000::/47", "40907"}, + {"2804:1b0:e000::/31", "18881"}, + {"2804:60e0::/32", "269197"}, + {"2804:7d64::/32", "271558"}, + {"2a0d:ca47:863::/32", "8423"}, + {"2001:559:8217::/48", "33651"}, + {"2408:80ea:7500::/41", "17816"}, + {"2406:840:e20f::/48", "142112"}, + {"2a04:ad80:2::/48", "60011"}, + {"2001:550:b701::/36", "174"}, + {"2403:4100::/32", "24210"}, + {"2804:2be4::/32", "263004"}, + {"2804:5e68::/32", "269031"}, + {"2a02:5600::/32", "31430"}, + {"2001:559:c30f::/48", "33650"}, + {"2001:40e8::/32", "30798"}, + {"2402:800:539b::/41", "7552"}, + {"2407:a8c0::/32", "135772"}, + {"2408:8256:398c::/48", "17623"}, + {"2a02:26f7:f881::/46", "20940"}, + {"2408:84e9::/32", "4837"}, + {"240e:3b0:1800::/34", "4134"}, + {"2607:f428:93b0::/44", "20115"}, + {"2800:bf0:34::/44", "52257"}, + {"2a02:fa8:4400::/44", "25751"}, + {"2408:8256:2f9f::/35", "17816"}, + {"240a:af6e::/32", "146600"}, + {"240e:67c:e200::/39", "140329"}, + {"2604:880:54::/48", "29802"}, + {"2804:27d8::/32", "263925"}, + {"2a02:88d:4010::/44", "48695"}, + {"2a0f:9980:6::/48", "40676"}, + {"2001:559:3de::/48", "7922"}, + {"2400:9380:9270::/46", "4809"}, + {"2404:3d00:4058::/47", "21433"}, + {"240a:a682::/32", "144316"}, + {"240a:a7f1::/32", "144683"}, + {"2600:1004:f010::/40", "22394"}, + {"2801:80:3f00::/48", "272616"}, + {"2400:cb00:83::/44", "13335"}, + {"2402:800:340f::/43", "7552"}, + {"2a02:26f7:7c::/48", "36183"}, + {"2a0b:6900:1ad::/48", "212461"}, + {"2001:480:aa::/47", "5132"}, + {"2001:67c:448::/48", "1257"}, + {"2001:1a11:d6::/48", "8781"}, + {"2605:bf80:100::/40", "11889"}, + {"2607:1b00:93b2::/48", "54456"}, + {"2607:fdc0:300::/32", "20326"}, + {"2804:e0:4::/37", "28330"}, + {"2a02:2fc0::/29", "12586"}, + {"2a0c:b641:a0::/44", "212299"}, + {"2a0f:5707:aa30::/44", "207306"}, + {"2001:678:b5c::/48", "60033"}, + {"2001:4408:8508::/45", "55824"}, + {"2001:4878:2246::/48", "12222"}, + {"240e:108:28::/48", "133775"}, + {"2a07:2f00::/48", "203132"}, + {"2a0b:ecc0::/29", "205390"}, + {"2404:7180:a000::/48", "23848"}, + {"2804:6148::/32", "269226"}, + {"2806:230:1022::/48", "265594"}, + {"2a02:26f7:c8d0::/48", "36183"}, + {"2c0f:ed48::/32", "328467"}, + {"2407:3e00:e000::/48", "24075"}, + {"2407:f0c0::/32", "140151"}, + {"2409:894a:6400::/35", "24445"}, + {"2a06:d980::/29", "51539"}, + {"2407:3c80::/47", "55705"}, + {"2803:c600::/44", "27901"}, + {"2804:1680::/32", "263289"}, + {"2806:269:4300::/37", "13999"}, + {"2a0e:fd45:40fb::/48", "136620"}, + {"2c0f:f3d0::/32", "3491"}, + {"2001:559:52e::/48", "33662"}, + {"2001:559:58e::/48", "7015"}, + {"2001:1248:a006::/44", "11172"}, + {"240a:a004::/32", "142654"}, + {"240a:a734::/32", "144494"}, + {"2804:e0:501::/32", "28330"}, + {"2a02:26f7:bac9::/42", "20940"}, + {"2a02:e980:15e::/42", "19551"}, + {"2a0a:4f80::/32", "206281"}, + {"2402:4e00:50::/39", "45090"}, + {"2405:7f00:c220::/36", "133414"}, + {"2804:14d8:c000::/34", "263354"}, + {"2a03:c6c0::/48", "42421"}, + {"2a0f:6440::/29", "200899"}, + {"2001:67c:2acc::/48", "205046"}, + {"2409:8027:290a::/38", "9808"}, + {"240e:356:6400::/31", "4134"}, + {"2600:1480:9001::/37", "20940"}, + {"2804:346c::/32", "265457"}, + {"2a00:4802:370::/44", "8717"}, + {"2a05:1083:ff03::/48", "211876"}, + {"2001:1658::/29", "719"}, + {"2402:f100::/38", "38902"}, + {"2804:605c::/32", "269162"}, + {"2804:6794::/32", "269637"}, + {"2403:41c0::/32", "63969"}, + {"2607:8300:1010::/48", "13876"}, + {"2a0c:4ac0:1100::/38", "58212"}, + {"2409:896a:6100::/38", "9808"}, + {"240e:a5:4000::/36", "137693"}, + {"2605:a404:e00::/32", "33363"}, + {"2a01:ad00:129::/32", "51865"}, + {"2a02:26f7:da80::/48", "36183"}, + {"2001:559:2b9::/46", "7015"}, + {"2001:978:6000:1::/37", "174"}, + {"2806:230:6009::/48", "11888"}, + {"2a0d:7380::/29", "202918"}, + {"2c0e:40:402::/39", "24863"}, + {"2001:559:85ee::/48", "7016"}, + {"240e:44d:1140::/42", "140358"}, + {"2801:16e::/48", "19429"}, + {"2804:14d:8e92::/41", "28573"}, + {"2406:6cc0:a300::/48", "63515"}, + {"2409:806c:3900::/27", "9808"}, + {"2001:520:103b::/48", "8103"}, + {"2604:f980:4300::/44", "19957"}, + {"2a02:26f7:cc8d::/46", "20940"}, + {"2a0e:5100::/29", "30823"}, + {"2a10:9906::/36", "39409"}, + {"2001:559:8082::/48", "33490"}, + {"2408:870c:3010::/36", "17621"}, + {"2408:8956:3000::/40", "17622"}, + {"240a:aaf2::/32", "145452"}, + {"2001:fd8:f0b0::/44", "4775"}, + {"2001:1a11:131::/44", "42298"}, + {"2402:b801:2b00::/35", "18371"}, + {"2602:fe02::/47", "16816"}, + {"2604:940:30::/48", "40386"}, + {"2804:4388::/32", "267576"}, + {"2a07:bbc0:1::/48", "35365"}, + {"2001:559:75c::/48", "33659"}, + {"2001:1248:992a::/43", "11172"}, + {"2406:1600:301::/32", "23871"}, + {"2407:d40:8001::/33", "139009"}, + {"2800:bf0:1c5::/48", "27947"}, + {"2a0a:ad00:9a::/48", "42352"}, + {"2803:2a80:1265::/48", "262928"}, + {"2804:1784:130::/32", "263152"}, + {"2804:4058::/32", "265953"}, + {"2a02:2698:8c00::/38", "57026"}, + {"2001:559:c42c::/48", "33287"}, + {"2001:678:568::/48", "58116"}, + {"2001:678:cac::/48", "39702"}, + {"2401:78c0:2::/32", "56150"}, + {"2401:d800:f042::/42", "7552"}, + {"2404:4e00:3::/45", "32787"}, + {"240a:ae1f::/32", "146265"}, + {"2a00:10d8:11::/31", "42005"}, + {"2a00:dd80:20::/48", "36236"}, + {"2a02:26f7:d305::/46", "20940"}, + {"2408:8956:fd00::/40", "17622"}, + {"2a00:e520::/32", "35551"}, + {"2a02:26f7:65::/48", "20940"}, + {"2001:4890::/32", "3257"}, + {"2401:b300::/32", "131999"}, + {"2402:1940::/32", "38198"}, + {"2403:1e40::/39", "137967"}, + {"2408:8956:af00::/40", "17816"}, + {"240a:a27f::/32", "143289"}, + {"2600:370f:5200::/45", "32261"}, + {"2804:9d8::/32", "262997"}, + {"2804:78c0::/32", "271263"}, + {"2a11:2800:2::/48", "42244"}, + {"2001:250:c0c::/48", "23910"}, + {"2401:d600::/32", "45204"}, + {"2403:51c0::/32", "138022"}, + {"2600:1006:b170::/40", "22394"}, + {"2804:10bc:500::/32", "263646"}, + {"2a03:90c0:9990::/46", "199524"}, + {"2a04:4100::/29", "31712"}, + {"2a0f:3300::/29", "208543"}, + {"2600:370f:40a2::/47", "32261"}, + {"2603:c002:8350::/36", "31898"}, + {"2001:1424::/48", "47578"}, + {"2409:896a:7a00::/39", "9808"}, + {"2600:5c00:f8e5::/37", "20001"}, + {"2800:310:3::/43", "18678"}, + {"2804:4b0:348::/43", "262459"}, + {"2a02:26f7:eec4::/48", "36183"}, + {"2402:800:9401::/44", "7552"}, + {"2406:840:f4cf::/48", "142586"}, + {"2409:8069:2a08::/39", "9808"}, + {"240a:a43b::/32", "143733"}, + {"2600:1419:a001::/37", "20940"}, + {"2610:b0:40d8::/47", "21433"}, + {"2804:16f0::/33", "263109"}, + {"2804:1bd8:4901::/40", "28224"}, + {"2a0e:8f02:2000::/44", "213045"}, + {"2001:559:7fd::/48", "7725"}, + {"2001:4490:3d00::/42", "9829"}, + {"2402:800:362b::/41", "7552"}, + {"2403:9800:11::/48", "4771"}, + {"2404:f4c0:f200::/48", "139589"}, + {"240a:ae36::/32", "146288"}, + {"2806:1008::/32", "8151"}, + {"2409:896a:2c00::/39", "9808"}, + {"240e:438:aa40::/37", "4134"}, + {"2605:46c0::/44", "395658"}, + {"2804:3e04:2000::/32", "266568"}, + {"2a11:2480::/29", "61192"}, + {"2001:67c:1198::/47", "47805"}, + {"2409:8054:3c::/48", "9808"}, + {"2601::/20", "7922"}, + {"2620:0:61f::/48", "6223"}, + {"2a02:ee80:4248::/47", "21433"}, + {"2a06:e881:6700::/44", "208751"}, + {"240a:a317::/32", "143441"}, + {"240e:96b:601b::/45", "140373"}, + {"2800:bf0:1cc::/47", "52257"}, + {"2804:14d:4cef::/43", "28573"}, + {"2a02:26f7:b580::/48", "36183"}, + {"2600:1403:3c01::/33", "20940"}, + {"2a02:23c0::/32", "45011"}, + {"2001:418:1401:1c::/64", "20940"}, + {"2409:8057:3810::/48", "9808"}, + {"2409:805f:3100::/36", "9808"}, + {"2620:89:c000::/48", "20099"}, + {"2804:bd8:6100::/32", "52838"}, + {"2a0a:2842:100::/48", "42962"}, + {"2a0e:46c4:22ad::/48", "136918"}, + {"2001:678:d84::/48", "207908"}, + {"2001:41f8::/32", "13115"}, + {"2804:1398:2::/43", "263541"}, + {"2a0c:3300::/32", "211215"}, + {"2001:67c:2748::/48", "51810"}, + {"2001:67c:27ac::/48", "8881"}, + {"2402:9e80:43::/48", "138631"}, + {"2404:0:8040::/38", "131591"}, + {"240a:a0fd::/32", "142903"}, + {"2605:3c80:fa::/48", "20115"}, + {"2a06:41c0::/45", "51559"}, + {"2a06:e881:110::/48", "206551"}, + {"2a10:a600::/32", "201641"}, + {"2a11:e40::/29", "204790"}, + {"2401:4900:4bd5::/44", "45609"}, + {"2402:800:338d::/43", "7552"}, + {"240a:af9f::/32", "146649"}, + {"2604:c0c0:2000::/35", "14525"}, + {"2605:a401:8665::/40", "33363"}, + {"2803:d180::/48", "263245"}, + {"2804:e94:800::/38", "262468"}, + {"2a06:b7c0::/29", "203740"}, + {"2a0a:40c0::/29", "49596"}, + {"2602:fc42:1::/48", "398017"}, + {"2a00:6720::/32", "34031"}, + {"2404:8000:101a::/42", "17451"}, + {"2603:c0ee::/35", "54253"}, + {"2606:c00:35::/48", "10126"}, + {"2a00:4bc0:700::/34", "31004"}, + {"2a0e:1c04:1::/30", "61317"}, + {"2604:fb80:601::/36", "15128"}, + {"2800:160:127f::/40", "14259"}, + {"2404:e200:101::/45", "18353"}, + {"2803:c010:e6::/48", "271799"}, + {"2804:17f0::/32", "263259"}, + {"2001:67c:1560::/46", "41231"}, + {"240a:aea9::/32", "146403"}, + {"2001:579:4204::/41", "22773"}, + {"2400:8800:1800::/37", "3491"}, + {"2404:bf40:a103::/41", "139084"}, + {"2404:fd00::/44", "58552"}, + {"2409:8904:5340::/42", "24547"}, + {"2620:11d:9002:100::/56", "33186"}, + {"2a05:df00::/31", "47891"}, + {"2001:938:4022::/45", "8437"}, + {"240a:a3b5::/32", "143599"}, + {"2a07:be00::/29", "31723"}, + {"2001:559:846b::/48", "22909"}, + {"2001:da8:e805::/44", "24368"}, + {"2001:1a11:146::/47", "8781"}, + {"2408:8459:f010::/42", "17623"}, + {"2801:18:800::/48", "267740"}, + {"2402:800:3afe::/39", "7552"}, + {"2409:8053::/47", "56047"}, + {"2800:bf0:95::/44", "27947"}, + {"2a00:1a90:8000::/48", "33854"}, + {"2a0e:b107:31f::/48", "57164"}, + {"2404:1f00:ffa0::/47", "9498"}, + {"2606:6dc0::/35", "13781"}, + {"2606:d101::/36", "395563"}, + {"2a10:7a80::/29", "213317"}, + {"2402:800:bb30::/41", "7552"}, + {"2408:8459:ea10::/42", "17623"}, + {"240e:3bd:7600::/39", "140313"}, + {"2804:62a4::/32", "269309"}, + {"2a00:15f8::/32", "25532"}, + {"2a0c:6cc0::/29", "203082"}, + {"2a0c:a680::/29", "21331"}, + {"2a0f:2cc0::/29", "60262"}, + {"2001:14a8::/32", "15547"}, + {"2402:c180::/32", "134503"}, + {"240a:a900::/32", "144954"}, + {"2600:1012:f100::/44", "6167"}, + {"2620:1b:4000::/48", "54722"}, + {"2806:2f0:34c3::/42", "17072"}, + {"2a0b:bbc0::/39", "205388"}, + {"2804:5e0c::/32", "269008"}, + {"2a00:8440::/32", "198508"}, + {"2001:bf7:180::/37", "44194"}, + {"240e:5e:10d0::/44", "140320"}, + {"2800:160:15c3::/43", "14259"}, + {"2804:3258::/32", "265072"}, + {"2a00:13c8:4::/32", "25291"}, + {"2401:cf80:60ff::/39", "55303"}, + {"2407:cdc0:eeee::/48", "38136"}, + {"2620:128:2011::/40", "395287"}, + {"2800:160:1279::/45", "14259"}, + {"2803:bc60::/32", "264773"}, + {"2804:4b1c::/32", "267284"}, + {"2a0a:b706:9992::/45", "204363"}, + {"2001:1900:228d::/43", "3356"}, + {"2a01:cde0:40::/48", "16028"}, + {"2001:559:8185::/48", "33652"}, + {"2402:8100:27a0::/47", "45271"}, + {"2600:1408:d400::/48", "36183"}, + {"2a02:26f7:22::/48", "36183"}, + {"2c0f:f5c0::/46", "29465"}, + {"2001:4490:de24::/46", "9829"}, + {"2400:a980:60f0::/44", "133512"}, + {"2a06:cd40:200::/48", "43927"}, + {"2a0e:15c0:34b::/31", "60781"}, + {"2a0e:97c0:3b0::/48", "211484"}, + {"2001:678:5e0::/48", "204671"}, + {"2001:df3:c180::/48", "140671"}, + {"2408:8256:2f8c::/48", "17623"}, + {"2607:f170:120::/41", "6364"}, + {"2801:80:3540::/48", "268850"}, + {"2806:230:2049::/48", "11888"}, + {"2a02:26f0:b6::/44", "20940"}, + {"2001:b000:100::/37", "3462"}, + {"2603:c0e9:2000::/36", "1218"}, + {"2804:297c:c921::/37", "262907"}, + {"2804:5534:f000::/37", "268696"}, + {"2a02:2e02:9d40::/38", "12479"}, + {"2400:adc0:4020::/48", "9541"}, + {"2400:fa40::/32", "58768"}, + {"2604:3040::/32", "394907"}, + {"2803:a600::/32", "52388"}, + {"2a02:2e02:9c70::/40", "12479"}, + {"2a0a:9080::/29", "60981"}, + {"2001:728:0:5000::15ea/127", "29632"}, + {"2001:4d78:fe19::/48", "15830"}, + {"2401:d800:f700::/42", "7552"}, + {"2406:da70:a000::/40", "16509"}, + {"2409:807c:3900::/33", "9808"}, + {"2604:4000:6800::/37", "32636"}, + {"2605:6404::/32", "53667"}, + {"2804:1b0::/36", "10429"}, + {"2806:206::/32", "28398"}, + {"2a02:16a8::/32", "5404"}, + {"2001:418:1401:72::/60", "2914"}, + {"2406:3003:2060::/43", "55430"}, + {"240e:983:a00::/40", "4134"}, + {"2a02:26f7:e805::/46", "20940"}, + {"240a:a219::/32", "143187"}, + {"2607:fb10:7192::/38", "2906"}, + {"2800:b70:2000::/48", "262191"}, + {"2a02:26f7:b804::/48", "36183"}, + {"2a05:47c0::/36", "199167"}, + {"2600:1fa0:c020::/44", "16509"}, + {"2804:2b44:8100::/33", "265144"}, + {"2804:3364:500::/32", "265393"}, + {"2a00:ed80::/32", "34100"}, + {"2001:559:1b4::/48", "33652"}, + {"2001:559:7a1::/48", "33657"}, + {"2001:559:c251::/46", "7015"}, + {"2407:f700:2000::/32", "132215"}, + {"2a02:6ea0:1000::/39", "212238"}, + {"2a0c:eb00::/32", "204983"}, + {"2604:b300:ad0a::/48", "394896"}, + {"2800:280::/33", "27781"}, + {"2803:bc40:a003::/45", "52468"}, + {"2a0b:1306:1dc::/48", "209915"}, + {"2001:250:7008::/47", "24369"}, + {"2408:8957:e100::/40", "17816"}, + {"2001:1900:2211::/46", "3356"}, + {"2600:1417:3001::/37", "20940"}, + {"2606:18c0:f::/48", "14445"}, + {"2620:11a:a011::/48", "36040"}, + {"2800:bf0:292::/44", "27947"}, + {"2a01:2e1:ffff:6::/64", "21243"}, + {"2a02:ee80:424d::/46", "3573"}, + {"240a:a541::/32", "143995"}, + {"2602:fc23:110::/48", "57401"}, + {"2001:559:871c::/48", "7015"}, + {"2001:df0:66::/48", "45894"}, + {"2407:a080::/33", "133480"}, + {"2409:8000:5d00::/31", "9808"}, + {"2610:a1:30fd::/48", "397226"}, + {"2803:8240:db::/32", "52511"}, + {"2803:fbc0::/45", "265762"}, + {"2001:67c:2aa4::/48", "8447"}, + {"2402:c4c0::/32", "132933"}, + {"2a0c:bf81::/48", "61295"}, + {"240e:45c:6600::/40", "131285"}, + {"2800:5f0:3028::/33", "22724"}, + {"2a01:6f0:ffff::/48", "63473"}, + {"2a02:26f7:e9c5::/46", "20940"}, + {"240a:acd1::/32", "145931"}, + {"2602:107:610::/48", "20001"}, + {"2604:5500:8000::/38", "19165"}, + {"2a00:11c0:78::/48", "42473"}, + {"2a03:b7c0::/32", "29286"}, + {"2603:c002:9910::/38", "31898"}, + {"2a03:3ca0::/32", "59785"}, + {"2a10:5f00::/29", "399975"}, + {"2001:559:7cf::/48", "7015"}, + {"2001:559:814a::/48", "33652"}, + {"240a:a267::/32", "143265"}, + {"2620:80:8000::/48", "16796"}, + {"2620:104:c000::/44", "13462"}, + {"2804:4234:8001::/33", "26104"}, + {"2a02:26f7:e800::/48", "36183"}, + {"2001:df0:cd80::/48", "139279"}, + {"2001:16a2:3c00::/39", "39386"}, + {"2804:6ddc::/32", "270560"}, + {"2001:559:259::/48", "33651"}, + {"2405:3d40::/32", "139523"}, + {"2620:12d:d000::/48", "63415"}, + {"2804:eb4:780::/32", "61890"}, + {"2804:6c88::/32", "270474"}, + {"2001:448a:2050::/40", "7713"}, + {"240e:983:1701::/48", "134238"}, + {"2403:9800:b056::/44", "4648"}, + {"2405:7f80::/32", "137510"}, + {"2407:3880:101::/32", "133012"}, + {"240a:a30a::/32", "143428"}, + {"2606:4700:22::/41", "13335"}, + {"2803:b2c0:1100::/48", "264851"}, + {"2806:2f0:31e3::/38", "17072"}, + {"2a02:26f7:dd08::/48", "36183"}, + {"2610:1a0:301::/33", "40193"}, + {"2806:230:204e::/48", "265594"}, + {"2806:2f0:9165::/40", "17072"}, + {"2a02:26f7:d4::/48", "36183"}, + {"2001:67c:24cc::/48", "12464"}, + {"2001:df6:b380::/48", "142288"}, + {"2401:d800:2980::/42", "7552"}, + {"2a01:4b40:7000::/32", "21299"}, + {"2a02:7a60::/47", "47674"}, + {"240a:aaf7::/32", "145457"}, + {"2604:9380::/32", "33230"}, + {"2620:185::/41", "11396"}, + {"2001:da8:20a::/48", "24351"}, + {"2602:fda3::/46", "397942"}, + {"2a02:cd8::/32", "42760"}, + {"2a0e:b107:a5f::/48", "209606"}, + {"2408:8957:5b00::/40", "17816"}, + {"2605:b100:800::/40", "577"}, + {"240a:a96d::/32", "145063"}, + {"2600:2c00:8000::/34", "7349"}, + {"2607:f5c0::/32", "10326"}, + {"2607:f750:1000::/40", "23473"}, + {"2a04:e4c0:40::/44", "36692"}, + {"2a07:3500:1b90::/48", "33915"}, + {"2600:1417:7b::/37", "20940"}, + {"2a09:7:2008::/48", "3258"}, + {"2001:559:8604::/48", "7922"}, + {"240a:acc2::/32", "145916"}, + {"2605:8400::/32", "10242"}, + {"2620:131:5000::/40", "395468"}, + {"2a01:4840::/32", "43942"}, + {"2a03:73c0::/48", "8426"}, + {"2a0a:f80::/29", "51546"}, + {"2a0e:8f02:f013::/48", "212279"}, + {"2a0f:5381:1313::/42", "208135"}, + {"2402:800:5563::/43", "7552"}, + {"2404:bf40:e104::/38", "139084"}, + {"2406:8800:9025::/44", "17465"}, + {"2408:8459:a830::/41", "17622"}, + {"240a:a503::/32", "143933"}, + {"240a:aaaf::/32", "145385"}, + {"2804:474c::/32", "267044"}, + {"2a01:aea0::/36", "42473"}, + {"2a0e:b107:f28::/48", "212268"}, + {"2a0e:fd45:2ba0::/48", "211041"}, + {"2409:8924:5900::/38", "56046"}, + {"2602:fc52:315::/48", "209864"}, + {"2604:c240::/32", "22952"}, + {"2804:3c3c::/32", "266198"}, + {"2001:fd8:3280::/42", "132199"}, + {"2401:d800:f640::/42", "7552"}, + {"2404:9600::/38", "7600"}, + {"2600:140f:bc01::/38", "20940"}, + {"2600:1413:d001::/36", "20940"}, + {"2602:ff10::/36", "19544"}, + {"2804:218:e002::/35", "27715"}, + {"2804:7b48::/32", "271422"}, + {"2a01:170:1050::/48", "208545"}, + {"2001:559:2bd::/46", "7015"}, + {"2001:67c:7ac::/48", "13030"}, + {"2001:67c:104c::/48", "59524"}, + {"240a:ac1b::/32", "145749"}, + {"2620:129:9001::/63", "13767"}, + {"2806:3d6::/32", "270142"}, + {"2a02:ee80:411e::/42", "3573"}, + {"2001:da8:e814::/48", "24368"}, + {"2620:115:c000::/46", "2635"}, + {"2620:171:5e::/47", "715"}, + {"2620:18c:f2::/36", "396507"}, + {"2a02:26f7:2::/48", "36183"}, + {"2a02:26f7:a6::/48", "36183"}, + {"2a09:bac0:59::/48", "13335"}, + {"2001:df5:3b00::/48", "17439"}, + {"2600:100f:b030::/41", "22394"}, + {"2600:6c32::/31", "20115"}, + {"2a00:ea20::/29", "28884"}, + {"2001:559:80c0::/48", "33650"}, + {"2001:1b40::/34", "20860"}, + {"2600:1407:8800::/48", "35994"}, + {"2602:ff96:4::/48", "8100"}, + {"2606:8440::/32", "400030"}, + {"2a0e:fd45:40f1::/48", "48646"}, + {"2001:da8:e01b::/45", "24367"}, + {"2603:c002:8b30::/37", "31898"}, + {"2620:64:4000::/48", "54480"}, + {"2a01:510::/32", "43708"}, + {"2a02:b28::/29", "42605"}, + {"2a06:4a80::/32", "57685"}, + {"2a07:c3c0::/29", "50033"}, + {"2001:67c:191c::/48", "35445"}, + {"2600:1406:36::/48", "20940"}, + {"2600:9000:10c8::/48", "16509"}, + {"2804:399c::/32", "266039"}, + {"2a0f:607:1300::/44", "7603"}, + {"2001:678:ac4::/48", "208505"}, + {"2400:ac40:cb0::/41", "136255"}, + {"2620:10b:3000::/40", "55166"}, + {"2a02:1c8:a::/48", "60095"}, + {"240e:8f:e000::/35", "134761"}, + {"2806:230:4041::/46", "11888"}, + {"2a00:77a0::/32", "39586"}, + {"2a01:a580::/29", "30972"}, + {"2604:8540:fcf0::/48", "33353"}, + {"2604:f240::/32", "30317"}, + {"2a02:26f7:b7c5::/46", "20940"}, + {"2a03:1980:d400::/40", "48260"}, + {"2a03:f003:4::/38", "25472"}, + {"2605:f400:2::/47", "54641"}, + {"2804:630c::/32", "269335"}, + {"2a02:26f7:c541::/46", "20940"}, + {"2a0f:7180::/29", "43995"}, + {"240a:a117::/32", "142929"}, + {"2600:1419:f401::/36", "20940"}, + {"2603:60b3::/32", "11426"}, + {"2604:9cc0:7::/44", "50131"}, + {"2804:17b8::/32", "262434"}, + {"2a01:2a8::/29", "1836"}, + {"2a07:5080::/29", "49223"}, + {"240a:a2f4::/32", "143406"}, + {"240e:96b:602a::/45", "140378"}, + {"2804:3aa0::/32", "266100"}, + {"2a01:8340::/39", "59410"}, + {"2a06:7400::/29", "59398"}, + {"2c0f:fe38:2260::/39", "33771"}, + {"2001:559:838c::/48", "7922"}, + {"2001:df5:b80::/48", "141107"}, + {"2400:3b00:20::/48", "18229"}, + {"2404:a640:114::/42", "133827"}, + {"2804:14d:5000::/40", "28573"}, + {"2804:2650:d000::/34", "264340"}, + {"2a01:488:bb0d::/48", "398107"}, + {"2a0a:e5c0:e::/47", "207996"}, + {"2400:1120:168::/48", "56308"}, + {"2409:4021:2000::/29", "55836"}, + {"2409:805e:100::/36", "9808"}, + {"2a00:1ce0::/32", "50530"}, + {"2a03:34e0::/32", "12695"}, + {"2a06:8187:fb00::/40", "64475"}, + {"240e:97d:2000::/36", "134764"}, + {"2607:fcd0:fac0::/37", "8100"}, + {"2620:1d6:ff4::/44", "2571"}, + {"2a04:4cc0::/29", "47215"}, + {"2001:df0:f500::/48", "142379"}, + {"2401:3c00:d8::/45", "38322"}, + {"2607:6100:1005::/48", "23026"}, + {"2400:cb00:360::/48", "13335"}, + {"2a04:5e80::/29", "60243"}, + {"2a0d:40::/29", "39204"}, + {"2001:559:873f::/48", "33491"}, + {"240a:a4f2::/32", "143916"}, + {"2804:14d:e650::/42", "28573"}, + {"2804:cb0:d000::/38", "52742"}, + {"2804:6574::/32", "269491"}, + {"2a04:f310::/31", "12344"}, + {"2001:388:a099::/33", "7575"}, + {"2402:8100:26d8::/47", "45271"}, + {"2403:780:e400::/35", "64098"}, + {"2600:1405:a001::/35", "20940"}, + {"2610:a1:3070::/48", "12008"}, + {"2a03:2887:ff37::/44", "63293"}, + {"2001:559:c4d5::/48", "33667"}, + {"2001:da8:b013::/37", "23910"}, + {"240a:af73::/32", "146605"}, + {"2600:1015:b030::/41", "6167"}, + {"2a01:5040:21::/41", "43996"}, + {"2402:b400:41f0::/37", "45960"}, + {"2409:8c14:2000::/36", "56044"}, + {"240a:a6d1::/32", "144395"}, + {"2604:2680:5::/46", "2386"}, + {"2a02:ce80::/46", "200183"}, + {"2a10:2f00:181::/48", "207556"}, + {"2408:8256:3b6c::/43", "17623"}, + {"2804:2190::/32", "264562"}, + {"2a0a:54c1:28::/47", "9053"}, + {"2803:7260::/46", "52238"}, + {"2001:470:156::/48", "25948"}, + {"2001:559:c3b4::/48", "7922"}, + {"2001:df1:3100::/48", "64050"}, + {"2620:55:8000::/48", "53804"}, + {"2804:4950::/32", "267177"}, + {"2804:6fd4::/32", "270687"}, + {"2a03:9da0::/40", "42831"}, + {"2a0e:9100::/29", "212872"}, + {"2a0f:5ac0::/32", "60472"}, + {"2001:559:84bb::/48", "33491"}, + {"2001:fd8:3006::/44", "132199"}, + {"2402:800:f2f0::/39", "7552"}, + {"2402:8100:39a0::/44", "45271"}, + {"2408:8656:3100::/38", "17816"}, + {"2408:8957:19c0::/38", "17622"}, + {"2a04:3a00::/29", "60703"}, + {"240a:a72c::/32", "144486"}, + {"2600:6c38:f2e::/47", "20115"}, + {"2a01:b740:a0b::/45", "714"}, + {"2400:adc7:800::/39", "9541"}, + {"2408:8459:6450::/38", "17816"}, + {"2804:14c:bba9::/45", "28573"}, + {"2804:4b9c::/32", "267318"}, + {"2a01:8840:b9::/48", "207266"}, + {"2001:250:21b::/45", "23910"}, + {"2408:8756:4cf2::/44", "136959"}, + {"2620:1f8:f011::/46", "40443"}, + {"2804:6d8::/32", "262609"}, + {"2804:3ca4::/32", "266226"}, + {"2804:6588::/32", "269497"}, + {"2a04:6b40::/29", "8681"}, + {"2a11:f740:2::/48", "210560"}, + {"2001:579:b04c::/43", "22773"}, + {"2402:8100:259e::/42", "55644"}, + {"2804:e94:8000::/44", "262468"}, + {"2a02:26f7:f008::/48", "36183"}, + {"2a11:af04::/30", "208861"}, + {"2401:d800:b232::/41", "7552"}, + {"2804:180::/32", "26615"}, + {"2804:3f34::/32", "262351"}, + {"2804:7668::/32", "271110"}, + {"2a0d:240::/29", "8881"}, + {"2402:8100:2000::/43", "45271"}, + {"2402:ef0f::/32", "9430"}, + {"240a:ac8f::/32", "145865"}, + {"2804:37f0:4100::/36", "266445"}, + {"2804:5ef8::/32", "269068"}, + {"2804:8638::/32", "272629"}, + {"2600:6c34:1d8::/48", "33588"}, + {"2600:9000:2061::/40", "16509"}, + {"2620:109:c001::/46", "14413"}, + {"2800:484:cb00::/40", "10620"}, + {"2804:204:301::/46", "28186"}, + {"2806:3dd::/32", "28443"}, + {"2a01:4a0:f::/43", "201011"}, + {"2a0c:7040::/32", "203488"}, + {"2001:1248:971b::/45", "11172"}, + {"2001:4d40:840f::/29", "13237"}, + {"2409:8904:2ea0::/39", "24547"}, + {"2409:8a51:900::/38", "56047"}, + {"240a:a135::/32", "142959"}, + {"240a:abe4::/32", "145694"}, + {"240e:3bb:2200::/37", "136198"}, + {"2804:2b20::/32", "265136"}, + {"2a03:fec0::/32", "47747"}, + {"2a11:9680::/29", "204790"}, + {"2001:559:3ca::/48", "33657"}, + {"2804:4c14:8a01::/39", "267348"}, + {"2a00:cb8:31::/48", "15695"}, + {"2a00:55a0:12::/47", "57717"}, + {"2a03:4ca0::/32", "208154"}, + {"2a03:b040::/32", "60981"}, + {"2001:468:502::/48", "12145"}, + {"2804:14d:7e84::/44", "28573"}, + {"2402:3a80:1760::/48", "38266"}, + {"2403:e000::/32", "9555"}, + {"2409:8924:5500::/38", "56046"}, + {"240a:a20e::/32", "143176"}, + {"2806:20d:5222::/47", "32098"}, + {"2a07:8180::/29", "202680"}, + {"2001:df7:4d80::/48", "138754"}, + {"240a:a78e::/32", "144584"}, + {"2604:fb40::/32", "46939"}, + {"2a00:d1c0::/32", "20559"}, + {"2a00:d4e0::/29", "15600"}, + {"2001:418:3807::/48", "4128"}, + {"2001:559:1fd::/48", "7922"}, + {"2001:559:86fa::/48", "7016"}, + {"2001:4878:2151::/48", "12222"}, + {"240e:e:b800::/37", "136195"}, + {"2605:a401:80be::/41", "33363"}, + {"2804:490:8100::/37", "28613"}, + {"2804:3e54::/32", "266588"}, + {"2001:1248:9c00::/44", "11172"}, + {"2402:8100:399f::/48", "55644"}, + {"240e:438:4640::/36", "4134"}, + {"2603:ff40::/27", "397165"}, + {"2606:18c0:2::/48", "14445"}, + {"2a01:c50f:c400::/41", "12479"}, + {"2409:8050:2802::/38", "56047"}, + {"2603:f4b8::/25", "397165"}, + {"2604:f400:5::/48", "19406"}, + {"2800:484:7200::/37", "14080"}, + {"2a03:1b20:1::/44", "39351"}, + {"2a05:3580:e100::/35", "35807"}, + {"2404:3900:a92::/48", "38320"}, + {"240e:944:1000::/34", "4134"}, + {"2606:acc0::/32", "20055"}, + {"2803:7260:11::/42", "52238"}, + {"2a02:1ba::/29", "47692"}, + {"2a03:d000:6400::/39", "31205"}, + {"2405:4803:2da::/42", "18403"}, + {"240a:a7ab::/32", "144613"}, + {"2001:4408:5f00::/34", "4758"}, + {"2405:9800:c601::/42", "45430"}, + {"2408:8756:f0a::/40", "136958"}, + {"240a:a887::/32", "144833"}, + {"2800:160:1d3f::/41", "14259"}, + {"2a00:8120::/32", "41480"}, + {"2a02:26f0:f8::/48", "20940"}, + {"2001:559:51d::/46", "7922"}, + {"2402:800:93c5::/42", "7552"}, + {"2600:1901:c0a0::/41", "396982"}, + {"2605:80::/32", "11831"}, + {"2803:9e20::/32", "265877"}, + {"2804:1b2c:1003::/32", "61713"}, + {"2a0b:33c0:117::/44", "57395"}, + {"2001:559:a7::/48", "33651"}, + {"240e:45c:600::/35", "131285"}, + {"2a0b:8f80:301::/48", "12859"}, + {"2407:500:500::/48", "58940"}, + {"240a:a39b::/32", "143573"}, + {"2620:119:4044::/42", "7726"}, + {"2804:7f44::/32", "271677"}, + {"2a00:1480::/47", "39737"}, + {"2409:8e20::/29", "9808"}, + {"2a09:bac0:189::/48", "13335"}, + {"2001:559:3ed::/48", "33662"}, + {"2001:559:c133::/48", "33657"}, + {"2400:c700:1182::/47", "55644"}, + {"2603:f1c0::/26", "397165"}, + {"2607:1c00::/32", "40395"}, + {"2804:2048::/32", "264483"}, + {"2a01:40e0::/47", "8315"}, + {"2a05:f440::/44", "35280"}, + {"2001:678:480::/48", "3320"}, + {"2404:1c40:b6::/41", "24432"}, + {"240e:90:3000::/30", "4134"}, + {"2800:bf0:240::/43", "52257"}, + {"2804:59a8:2000::/32", "268717"}, + {"2806:230:4031::/48", "11888"}, + {"2a02:2578::/35", "51375"}, + {"2a02:2f0c:d000:41::/30", "8708"}, + {"2a06:e881:5504::/48", "209864"}, + {"2001:67c:18c8::/47", "30857"}, + {"2605:9f00:300::/32", "36473"}, + {"2804:7054::/32", "270720"}, + {"2804:8138:2000::/32", "272440"}, + {"2a01:4a00::/32", "44395"}, + {"2a0c:8540:10::/47", "42198"}, + {"2001:df7:200::/47", "135871"}, + {"2400:c800:610::/44", "4760"}, + {"2401:e740::/32", "135607"}, + {"240a:aeb8::/32", "146418"}, + {"2600:6c39:441::/43", "20115"}, + {"2001:559:8406::/48", "7922"}, + {"2001:13d2:811::/46", "7303"}, + {"240e:983:b01::/37", "4134"}, + {"2607:f4e8:ac3::/32", "22822"}, + {"2620:0:1c00::/40", "32934"}, + {"2a02:ac80:d1::/42", "25145"}, + {"2001:49f0:d100::/47", "30058"}, + {"2405:4cc1:1000::/40", "55891"}, + {"2620:ed:8000::/48", "36288"}, + {"2600:803:618::/48", "3495"}, + {"2800:160:1511::/42", "14259"}, + {"2804:24a4::/32", "264235"}, + {"2a02:26f7:f805::/46", "20940"}, + {"2a02:4600::/32", "200831"}, + {"2001:56b:e00c::/35", "852"}, + {"2604:ca00:4f4::/44", "36492"}, + {"2a03:6000::/32", "60131"}, + {"2803:35e0::/32", "270040"}, + {"2803:9800:9039::/40", "11664"}, + {"2a00:52c0::/32", "29396"}, + {"2403:5a40:20::/48", "134562"}, + {"2409:8959:cd54::/38", "56040"}, + {"2a0f:8444::/32", "16262"}, + {"2001:df0:24f::/48", "58436"}, + {"2403:71c0:ff00::/48", "43959"}, + {"2406:2000:9d::/46", "10310"}, + {"240e:3b4:d000::/36", "134772"}, + {"2800:bf0:160::/44", "52257"}, + {"2806:2f0:5443::/40", "17072"}, + {"2a01:8840:ee::/43", "12041"}, + {"2a02:26f7:1f::/48", "20940"}, + {"2a03:5620::/32", "51090"}, + {"2001:6f0:3603::/33", "1257"}, + {"2409:8021::/34", "9808"}, + {"2600:370f:7260::/47", "32261"}, + {"2603:c0f9:2000::/36", "20054"}, + {"2804:59e4::/32", "268732"}, + {"2804:6ecc::/32", "270619"}, + {"2a0a:6700::/45", "40676"}, + {"2001:559:2e9::/48", "7725"}, + {"2001:da8:23a::/48", "24350"}, + {"2400:adda::/35", "9541"}, + {"2a02:26f7:bac6::/47", "20940"}, + {"2a05:c340::/29", "61157"}, + {"2001:b18:1014::/48", "47787"}, + {"240e:44d:4180::/41", "4134"}, + {"2a02:45c0:14::/48", "3209"}, + {"2a12:cd00::/29", "204790"}, + {"2001:508:a:1::/32", "32020"}, + {"2409:8c85:1a01::/37", "9808"}, + {"2400:dd0a:1006::/31", "7497"}, + {"2408:84f3:3e10::/42", "134543"}, + {"2801:b6::/38", "263083"}, + {"2804:c0::/32", "53100"}, + {"2806:230:2008::/48", "265594"}, + {"2a0d:6800::/29", "14576"}, + {"2001:559:c090::/48", "20214"}, + {"2600:1002:6000::/44", "6167"}, + {"2600:1409:9801::/37", "20940"}, + {"2606:4680::/32", "19116"}, + {"2620:74:28::/48", "396568"}, + {"2001:758::/32", "35393"}, + {"2403:fc00:400::/32", "9443"}, + {"2607:fc48:1000::/48", "40009"}, + {"2620:114:2000::/40", "5707"}, + {"2804:1e2c::/40", "264412"}, + {"2a0f:641::/32", "201086"}, + {"2400:9380:8dc0::/44", "136167"}, + {"2405:1c0:6551::/46", "55303"}, + {"2a0a:7d80:3::/48", "35594"}, + {"2a0d:5e00::/29", "25577"}, + {"2404:bf40:80c2::/39", "139084"}, + {"2404:e800::/46", "55430"}, + {"2800:200:bd50::/33", "12252"}, + {"2a02:26f7:cccc::/48", "36183"}, + {"2001:dc8:6000::/48", "45554"}, + {"2408:8956:2a40::/40", "17622"}, + {"2a02:888:8147::/48", "47794"}, + {"2a09:bd00:ffbc::/48", "42385"}, + {"2001:67c:1944::/48", "61430"}, + {"2001:da8:7030::/48", "23910"}, + {"240a:ae5e::/32", "146328"}, + {"2602:102:1018::/48", "33588"}, + {"2a02:26f7:e74d::/42", "20940"}, + {"2a02:26f7:f809::/46", "20940"}, + {"2001:678:12c::/48", "29405"}, + {"2001:678:b44::/48", "25526"}, + {"2001:67c:1b4::/48", "50188"}, + {"2001:df1:2900::/48", "136301"}, + {"2001:ee0:4600::/36", "45899"}, + {"2803:9800:a4c1::/46", "11664"}, + {"2a00:9080::/32", "30736"}, + {"2a02:26f7:cd40::/48", "36183"}, + {"2a0b:d000::/29", "34665"}, + {"2400:12::/48", "4766"}, + {"2401:d800:870::/40", "7552"}, + {"2408:8862::/29", "4837"}, + {"2602:fd21::/37", "398488"}, + {"2a02:6c20:808::/45", "207167"}, + {"2a03:5780:197::/44", "25122"}, + {"2001:559:3f8::/48", "33287"}, + {"2001:559:810e::/48", "33657"}, + {"2607:b600:11::/48", "25645"}, + {"2610:20:3000::/44", "3635"}, + {"2001:559:85b2::/48", "33659"}, + {"2402:4000:2290::/32", "18001"}, + {"2406:840:e030::/47", "142418"}, + {"2600:1010:b100::/42", "6167"}, + {"2602:ffe4:c11::/44", "21859"}, + {"2604:c200::/32", "33544"}, + {"2804:8088::/32", "271757"}, + {"2a02:26f7:d5::/48", "20940"}, + {"2001:410:e000::/40", "7860"}, + {"2400:8800:101::/38", "3491"}, + {"240a:a827::/32", "144737"}, + {"2804:1e38:2000::/43", "264415"}, + {"2804:6b98::/32", "270411"}, + {"2804:7644::/32", "271100"}, + {"2a0f:89c0::/29", "212238"}, + {"2001:4268:1120::/32", "15964"}, + {"2405:ec01:a000::/33", "137412"}, + {"2600:6c34:19d::/48", "33588"}, + {"2803:5840:e004::/35", "262145"}, + {"2803:5ba0::/32", "267766"}, + {"2a04:85c0::/29", "51890"}, + {"2a0e:1380::/35", "209987"}, + {"2402:800:76f0::/39", "7552"}, + {"2606:62c0:7000::/32", "399686"}, + {"2804:7f30::/33", "271672"}, + {"2a06:1a80::/29", "207481"}, + {"2408:840c:af00::/40", "17621"}, + {"240e:438:3e20::/43", "140647"}, + {"2600:6c10:40b::/43", "20115"}, + {"2a11:b080::/29", "211737"}, + {"2001:559:3df::/42", "33652"}, + {"2001:678:f14::/48", "8767"}, + {"2001:44b8:30fb::/36", "4739"}, + {"240e:91f::/32", "4134"}, + {"2804:2ac::/32", "28300"}, + {"2804:81e4::/32", "272484"}, + {"2a02:f181::/48", "197573"}, + {"2001:559:505::/48", "33659"}, + {"2001:b08:18::/48", "8684"}, + {"2401:2700:1:1::/48", "9286"}, + {"2a02:26f0:3501::/40", "20940"}, + {"2a10:cc42:1e00::/40", "20473"}, + {"240a:a3f2::/32", "143660"}, + {"2600:5c01:319c::/48", "11351"}, + {"2804:53d0::/32", "268608"}, + {"2a00:1688::/32", "34056"}, + {"2a02:9b0:405f::/32", "35819"}, + {"2a02:26f7:8d::/48", "20940"}, + {"2001:da8:bc::/48", "24351"}, + {"2408:8459:8030::/41", "17622"}, + {"2409:8038:1900::/34", "9808"}, + {"2a02:2578:1309::/45", "51375"}, + {"2a02:26f7:bd00::/48", "36183"}, + {"2a06:cc80::/29", "203659"}, + {"2001:1388:10c::/37", "6147"}, + {"2401:6c0::/32", "136514"}, + {"2600:1404:a000::/48", "35994"}, + {"2804:31c4::/32", "265036"}, + {"2a00:1458::/32", "50083"}, + {"2a02:26f7:bd80::/48", "36183"}, + {"2a02:26f7:e70d::/42", "20940"}, + {"2001:559:82d0::/48", "7922"}, + {"2602:ffe4:c3e::/41", "21859"}, + {"2804:4030::/32", "265943"}, + {"2a02:26f7:d201::/46", "20940"}, + {"2a06:1287:30::/44", "203909"}, + {"2001:5b0:6900::/40", "6621"}, + {"2402:5300:4f00::/35", "45903"}, + {"240a:acb6::/32", "145904"}, + {"240a:af3e::/32", "146552"}, + {"2a06:e382::/29", "203507"}, + {"2401:d800:5be0::/37", "7552"}, + {"2806:2f0:6143::/42", "17072"}, + {"2a05:2cc0::/29", "44439"}, + {"240a:a108::/32", "142914"}, + {"240a:a9f7::/32", "145201"}, + {"2600:1488:6101::/41", "20940"}, + {"2804:2214:e::/32", "28177"}, + {"2804:6ac8:103::/45", "270358"}, + {"2a02:88d::/44", "48695"}, + {"2405:b000::/39", "6262"}, + {"2603:c021:c000::/35", "31898"}, + {"2a0e:8f01:10b::/45", "38230"}, + {"2001:559:7fc::/48", "7015"}, + {"2001:44b8:30c3::/48", "4739"}, + {"240e:45c:2c00::/35", "131285"}, + {"2603:c001::/38", "31898"}, + {"2606:6240:b00b::/48", "212149"}, + {"2620:10c:7000::/44", "2906"}, + {"2801:c4:15::/48", "262922"}, + {"2804:4db0::/34", "268213"}, + {"2a03:560::/47", "201832"}, + {"2a0a:3cc0::/29", "62035"}, + {"2600:6c38:726::/44", "20115"}, + {"2a00:5b20::/32", "39816"}, + {"2a09::/48", "6233"}, + {"2001:550:2801::/48", "63199"}, + {"240a:a747::/32", "144513"}, + {"2604:a880:400::/48", "14061"}, + {"2607:fe50::/32", "5661"}, + {"2001:678:374::/48", "52003"}, + {"2405:5500::/32", "54187"}, + {"2405:d300:20::/48", "38809"}, + {"2602:80c:2015::/40", "399976"}, + {"2605:bb00::/35", "4213"}, + {"2804:6d98::/32", "270543"}, + {"2a0b:32c0::/29", "205739"}, + {"2a0c:ee00::/39", "206805"}, + {"2404:a300::/48", "23884"}, + {"2a02:d140::/29", "49788"}, + {"2405:5240::/35", "398704"}, + {"2a02:26f0:5201::/39", "20940"}, + {"2a09:4c2:2d::/48", "58057"}, + {"2409:8704:9900::/38", "24547"}, + {"2603:c001:3210::/37", "31898"}, + {"2604:8540:fc02::/45", "33353"}, + {"2a02:26f7:b9a0::/48", "36183"}, + {"2a02:26f7:d901::/46", "20940"}, + {"240a:affe::/32", "146744"}, + {"2a0d:c340::/29", "206123"}, + {"2001:67c:7bc::/48", "8949"}, + {"2001:67c:1580::/48", "50277"}, + {"240a:a2cf::/32", "143369"}, + {"240a:a394::/32", "143566"}, + {"2804:3e90:8b01::/33", "266606"}, + {"2a00:cc0::/46", "13237"}, + {"2a07:3b80:1::/48", "47447"}, + {"2a0c:8b40::/29", "42908"}, + {"2001:19f0:8000::/38", "20473"}, + {"2400:fd80:100::/40", "55891"}, + {"240e:13:7000::/37", "139201"}, + {"2607:f250:d000::/48", "7046"}, + {"2a07:6a86::/32", "203568"}, + {"2a0f:5701:3517::/44", "205593"}, + {"2803:ad60::/32", "271920"}, + {"2a0c:b641:750::/44", "210546"}, + {"2405:8a00:601d::/42", "55824"}, + {"2801:80:1400::/48", "11097"}, + {"2804:58a8::/32", "268142"}, + {"2a02:1211::/28", "3303"}, + {"2a02:26f7:bd84::/48", "36183"}, + {"2a04:4e40:7630::/41", "54113"}, + {"2a06:6240::/29", "20643"}, + {"2401:4900:c80::/44", "45609"}, + {"240b:4003:fee3::/48", "45102"}, + {"2a07:3500:11e0::/48", "39686"}, + {"2a0e:e44::/32", "208638"}, + {"2409:8061:1100::/36", "9808"}, + {"240e:44d:2b80::/41", "4134"}, + {"2605:3380:4802::/48", "14532"}, + {"2804:43c::/34", "262422"}, + {"2804:646c::/32", "269427"}, + {"2a02:26f7:e081::/46", "20940"}, + {"2001:559:ae::/48", "33657"}, + {"240a:ad40::/32", "146042"}, + {"2600:370f:7292::/42", "32261"}, + {"2a02:26f7:f5c4::/48", "36183"}, + {"2001:559:8637::/48", "7015"}, + {"2402:800:93ee::/37", "7552"}, + {"2600:380:2100::/37", "20057"}, + {"2600:140f:6801::/37", "20940"}, + {"2600:370f:522a::/41", "32261"}, + {"2804:3d50::/32", "266267"}, + {"2a09:57c0::/29", "63023"}, + {"2600:6c38:723::/45", "20115"}, + {"2a01:b740:921::/40", "714"}, + {"2a0e:46c4:2c33::/48", "142597"}, + {"2001:67c:2c80::/48", "198217"}, + {"2804:42fc::/32", "267541"}, + {"2804:5564::/32", "264173"}, + {"2c0f:3200:2::/32", "37558"}, + {"2001:67c:1b78::/48", "61411"}, + {"2607:fee0:a100::/33", "3599"}, + {"2801:80:12c0::/48", "263890"}, + {"2a01:8640:f::/48", "59711"}, + {"2001:678:bb4::/48", "43962"}, + {"2603:9000::/28", "33363"}, + {"2605:3380:4459::/48", "12025"}, + {"2606:2800:4016::/44", "15133"}, + {"2800:110:3c01::/38", "4270"}, + {"2a02:c390::/29", "31304"}, + {"2606:2800:504c::/48", "15133"}, + {"2800:200:e890::/35", "12252"}, + {"2a0b:9440::/29", "34766"}, + {"2a0e:8f02:f029::/48", "207071"}, + {"2001:df0:411::/48", "17439"}, + {"2001:1248:9803::/44", "11172"}, + {"2409:8060:3100::/36", "9808"}, + {"2620:49:3::/45", "16686"}, + {"2a02:26f7:ecc0::/48", "36183"}, + {"2a0a:15c0::/29", "206273"}, + {"2a0b:e300::/32", "44808"}, + {"2a0c:fe80::/29", "200490"}, + {"2409:8c7f::/24", "9808"}, + {"2600:1a00::/28", "46650"}, + {"2804:2e00::/32", "265317"}, + {"2a00:dbc0::/32", "48885"}, + {"2a04:c040::/29", "212694"}, + {"2804:7bc::/32", "52861"}, + {"2a06:bcc0:11::/48", "203724"}, + {"2a09:3800::/29", "208861"}, + {"2001:4128::/32", "28788"}, + {"2600:141c:f001::/31", "20940"}, + {"2a00:1450::/33", "15169"}, + {"2a00:5a00::/32", "197529"}, + {"2001:559:c15a::/48", "7725"}, + {"2401:75c0::/32", "136793"}, + {"240a:a076::/32", "142768"}, + {"2602:210::/32", "11290"}, + {"2804:7db0::/32", "271576"}, + {"2a00:4802:230::/41", "8717"}, + {"2a05:46c0::/29", "200780"}, + {"2a0b:b7c0::/29", "57717"}, + {"2a10:a000::/45", "42201"}, + {"2606:2800:5a0c::/47", "15133"}, + {"2a0f:dac0::/29", "60781"}, + {"2001:16f8:666::/48", "30870"}, + {"2401:d800:d592::/41", "7552"}, + {"2804:14d:68b1::/41", "28573"}, + {"2806:20d::/35", "32098"}, + {"2a02:26f0:b100::/48", "12956"}, + {"2c0f:1d00::/32", "60171"}, + {"2001:559:94::/48", "7015"}, + {"2001:678:ffc::/48", "210959"}, + {"2001:1a11:bd::/41", "42298"}, + {"2a04:4e40:f600::/48", "54113"}, + {"2a09:d2c1:6::/48", "209117"}, + {"2403:8600:2080::/43", "45820"}, + {"2407:c600:1::/48", "56140"}, + {"240a:a6d6::/32", "144400"}, + {"2605:a401:8118::/45", "33363"}, + {"2804:18:40::/42", "26599"}, + {"2804:66a8::/32", "269574"}, + {"2804:385c:200::/32", "262687"}, + {"2a05:1d40::/30", "58239"}, + {"2a06:1783::/32", "202134"}, + {"2602:ff75::/36", "8100"}, + {"2804:37c0::/32", "266434"}, + {"2a09:6f00::/29", "208861"}, + {"240e:5a:40c0::/39", "140291"}, + {"2001:559:872d::/48", "33491"}, + {"2001:67c:488::/48", "1257"}, + {"240a:a3ac::/32", "143590"}, + {"2804:245c::/32", "264217"}, + {"2a06:aa40::/32", "51944"}, + {"2a0b:e740::/29", "47787"}, + {"2a10:6340::/48", "49981"}, + {"2401:d800:b600::/42", "7552"}, + {"2600:140f:b800::/48", "9498"}, + {"2602:ff19::/36", "395033"}, + {"2804:33a0::/32", "265408"}, + {"2a05:a1c0::/32", "201155"}, + {"2401:d7c0::/32", "45355"}, + {"2406:c800::/32", "38016"}, + {"240a:a367::/32", "143521"}, + {"2a05:9a40::/29", "212144"}, + {"2a07:de80::/29", "35779"}, + {"2001:4878:228::/48", "12222"}, + {"240a:ae4c::/32", "146310"}, + {"2620:74:1c::/48", "397228"}, + {"2a01:ad00:7::/39", "51865"}, + {"2001:4998:60::/48", "14196"}, + {"2a02:548::/32", "35087"}, + {"2001:559:c354::/48", "33287"}, + {"240a:a2f5::/32", "143407"}, + {"240a:a8e8::/32", "144930"}, + {"2400:4b20::/32", "149330"}, + {"2405:1c0:6541::/46", "55303"}, + {"2408:8956:6900::/40", "17816"}, + {"2408:8957:2d00::/40", "17816"}, + {"2801:12:2800::/48", "269972"}, + {"2803:70e0::/32", "263235"}, + {"2804:1a7c::/32", "61862"}, + {"2a00:13c8::/46", "25291"}, + {"2a10:c941:11:11::/39", "35277"}, + {"2602:fc26:16::/48", "211562"}, + {"2800:650:5::/39", "28032"}, + {"2804:1010:4500::/36", "263617"}, + {"2804:7110:7100::/32", "270764"}, + {"2804:8568::/32", "272577"}, + {"2a01:2000::/20", "3269"}, + {"2001:4998:160::/48", "7280"}, + {"2401:d800:b542::/40", "7552"}, + {"240a:a691::/32", "144331"}, + {"2600:140f:201::/39", "20940"}, + {"2a10:5980::/29", "208254"}, + {"2a02:26f7:ff::/48", "20940"}, + {"2a02:26f7:b9cc::/48", "36183"}, + {"2a02:26f7:ee09::/42", "20940"}, + {"2a09:bac0:199::/48", "13335"}, + {"2603:c024:4000::/35", "31898"}, + {"2a0f:5707:b101::/48", "211684"}, + {"2001:559:8135::/48", "7922"}, + {"2001:559:63::/48", "7015"}, + {"2001:559:7f8::/48", "33657"}, + {"2602:fd9a:1000::/32", "54613"}, + {"2607:f368:3221::/46", "32982"}, + {"2607:f7a8:400::/39", "16657"}, + {"2804:51c:7001::/38", "262495"}, + {"2a01:8100:2000::/36", "39729"}, + {"2a02:b000::/23", "1267"}, + {"2400:cb00:490::/46", "13335"}, + {"240e:13:806::/48", "140858"}, + {"2602:fe12:9::/48", "139267"}, + {"2605:a7c0:141::/44", "16509"}, + {"2804:14c:ce00::/40", "28573"}, + {"2a00:11d8::/32", "39598"}, + {"2a02:24c0::/32", "197307"}, + {"2001:250:343e::/48", "23910"}, + {"2800:160:140e::/42", "14259"}, + {"2804:3b8:6a::/39", "52965"}, + {"2404:168::/32", "24229"}, + {"2409:4061:3000::/30", "55836"}, + {"240a:a6ce::/32", "144392"}, + {"2603:b010:fffe::/47", "11796"}, + {"2804:b30::/32", "52748"}, + {"2a10:1ac0::/29", "209886"}, + {"2001:13c7:7001::/48", "28000"}, + {"2401:50c0::/32", "136732"}, + {"2402:6800:761::/46", "22822"}, + {"2404:e100:4009::/48", "133840"}, + {"240c:ca30::/32", "24363"}, + {"2804:5a9c::/32", "268784"}, + {"2001:559:816f::/48", "20214"}, + {"2401:4900:20:84::/46", "45609"}, + {"2a00:1981::/32", "39603"}, + {"2001:668:200::/29", "3257"}, + {"2001:4408:8609::/33", "4758"}, + {"2803:d640::/32", "27729"}, + {"2804:3da4::/35", "266544"}, + {"2c0f:fe08:14b::/38", "36914"}, + {"2001:250:3808::/43", "138440"}, + {"2001:559:810f::/48", "33287"}, + {"2001:559:8149::/48", "7016"}, + {"2400:a980:d6::/44", "133111"}, + {"240a:aa73::/32", "145325"}, + {"2a02:26f7:e004::/48", "36183"}, + {"2a06:a005:400::/44", "211358"}, + {"2a0f:c085::/30", "48108"}, + {"2606:8200::/32", "32400"}, + {"2800:370:bc::/39", "28006"}, + {"2803:c010::/48", "271799"}, + {"2a02:26f7:e5c9::/42", "20940"}, + {"2001:67c:828::/48", "210833"}, + {"2408:870c:20::/44", "138421"}, + {"240a:a49a::/32", "143828"}, + {"2620:b1:4000::/48", "393238"}, + {"2a00:6f00::/32", "31273"}, + {"2a01:58a0::/39", "51018"}, + {"2a05:fc87::/32", "39540"}, + {"2a0b:2180::/48", "206502"}, + {"2c0f:fe98::/32", "30844"}, + {"2804:d7c:1100::/32", "52634"}, + {"2804:4530::/32", "262873"}, + {"2804:4afc:8000::/33", "267276"}, + {"2a01:8200:ff01::/40", "31216"}, + {"2001:67c:1bc::/48", "1921"}, + {"2001:1578::/48", "12657"}, + {"2401:d800:5510::/42", "7552"}, + {"2404:82c0::/42", "135377"}, + {"2408:8420::/30", "4837"}, + {"2600:5c00:3b7d::/37", "20001"}, + {"2804:3e8:2::/39", "28663"}, + {"2a02:250:4::/33", "39570"}, + {"2a06:9dc4::/32", "41917"}, + {"2a0e:a2c0::/32", "39702"}, + {"2803:6604:e001::/37", "28075"}, + {"2804:8354::/32", "272191"}, + {"2001:559:82e9::/46", "7922"}, + {"2001:559:c12b::/48", "7922"}, + {"2400:cc00:3000::/36", "140637"}, + {"2401:7000:f000::/36", "45177"}, + {"2a00:12d0::/29", "13101"}, + {"2001:4490:d080::/46", "9829"}, + {"2607:6480:6000::/35", "30377"}, + {"2402:e380:15::/48", "135646"}, + {"2600:5c01:1a3::/36", "10796"}, + {"2602:ffd1:2::/47", "393336"}, + {"2001:559:4c4::/47", "7015"}, + {"2001:559:81f6::/48", "33491"}, + {"2409:8715:3c00::/32", "56044"}, + {"2001:559:8745::/48", "33651"}, + {"2001:df0:1e:4000::/64", "45796"}, + {"240a:ac7c::/32", "145846"}, + {"2600:1413:3000::/48", "24319"}, + {"2800:4b0::/33", "12252"}, + {"2804:7960::/32", "271302"}, + {"2a0c:8187::/32", "206994"}, + {"2001:250:2c0d::/43", "138381"}, + {"2001:559:877b::/48", "33657"}, + {"2404:8840::/32", "32519"}, + {"2605:3380:4000::/39", "12025"}, + {"2607:f6e0::/32", "22346"}, + {"2806:230:101d::/48", "11888"}, + {"2a05:8c40::/29", "201172"}, + {"2400:4480:8000::/48", "17426"}, + {"2402:79c0:1154::/46", "26415"}, + {"2403:8500:1200::/40", "45804"}, + {"2409:805a:2901::/48", "56040"}, + {"2607:f7c0::/34", "36444"}, + {"2a02:610:7502::/32", "2588"}, + {"2001:1248:56c5::/43", "11172"}, + {"2600:5800:f78b::/36", "11426"}, + {"2804:5dac::/32", "52984"}, + {"2001:da8:a003::/45", "23910"}, + {"2402:9c00::/32", "9676"}, + {"2408:8956:5800::/40", "17622"}, + {"240a:a6f2::/32", "144428"}, + {"240a:a792::/32", "144588"}, + {"240a:a809::/32", "144707"}, + {"2001:df1:2980::/48", "55654"}, + {"240a:a408::/32", "143682"}, + {"240e:980:8400::/40", "63835"}, + {"2804:fbc::/32", "61894"}, + {"2a00:dca0::/29", "60175"}, + {"2c0f:4480::/32", "329028"}, + {"2804:640::/41", "262713"}, + {"2804:1b08:700::/34", "61704"}, + {"2804:1bc8::/32", "61750"}, + {"2a03:70e0::/32", "58243"}, + {"2607:f750:5000::/40", "23473"}, + {"2800:160:1d92::/42", "14259"}, + {"2800:c70::/43", "23201"}, + {"2804:46c4::/32", "267010"}, + {"2a0c:3fc0::/29", "206268"}, + {"2001:4c8:1020::/44", "15290"}, + {"2001:df0:93::/48", "45128"}, + {"2806:230:203b::/48", "11888"}, + {"2a05:1083:ff00::/48", "211876"}, + {"2a10:f2c0::/29", "207003"}, + {"2405:58c0:3a00::/40", "133101"}, + {"2604:bac0::/32", "19748"}, + {"2803:1fc0::/32", "265781"}, + {"2804:615c::/32", "269230"}, + {"2806:230:2033::/48", "11888"}, + {"2a01:558::/32", "15516"}, + {"2401:7200:2128::/48", "55328"}, + {"2a05:d050:2080::/44", "16509"}, + {"2a0b:3c40:13::/48", "209280"}, + {"2404:b0:1009::/36", "4750"}, + {"2408:84f3:b840::/38", "17816"}, + {"240a:a44c::/32", "143750"}, + {"2804:204:254::/46", "28186"}, + {"2804:1540::/32", "263380"}, + {"2804:5b18::/32", "268818"}, + {"2a01:688::/32", "20694"}, + {"2a06:8e00::/48", "7489"}, + {"2001:559:8033::/48", "7922"}, + {"2001:1260:7::/48", "28532"}, + {"2620:34:2000::/48", "395763"}, + {"2804:14c:f400::/42", "28573"}, + {"2a03:65e0::/32", "207426"}, + {"2001:1248:5ae3::/45", "11172"}, + {"2801:1d:e000::/48", "18747"}, + {"2804:14d:728a::/45", "28573"}, + {"2804:15e4::/46", "53001"}, + {"2a02:4e0:2900::/42", "16135"}, + {"2a02:1308::/29", "196922"}, + {"2a02:26f7:e851::/42", "20940"}, + {"2001:978:4204::/37", "174"}, + {"2001:df6:6300::/47", "133225"}, + {"2603:ffb0::/29", "40676"}, + {"2803:d100:9810::/42", "52362"}, + {"2804:ef4::/46", "28642"}, + {"2001:df0:8::/48", "18149"}, + {"2404:9400::/45", "133159"}, + {"240e:64:a000::/35", "140317"}, + {"2800:370:53::/44", "28006"}, + {"2801:1c:c800::/48", "269883"}, + {"2804:2b28::/32", "265138"}, + {"2a0f:a307::/32", "44326"}, + {"2001:67c:16c8::/48", "206479"}, + {"2001:1a30::/32", "29488"}, + {"2404:6d40::/32", "138810"}, + {"2404:8000:e2::/35", "17451"}, + {"2404:f4c0:fe1f::/48", "138632"}, + {"2800:190:9::/40", "11664"}, + {"2804:6c0:900::/43", "262418"}, + {"2804:3c1c::/32", "266191"}, + {"240a:a510::/32", "143946"}, + {"2604:5500:c00::/42", "19165"}, + {"2a0f:7700::/29", "47787"}, + {"2001:559:c051::/45", "7922"}, + {"2602:fc5c:4::/48", "29802"}, + {"2604:5940::/32", "395839"}, + {"2800:110:2200::/48", "264630"}, + {"2a0b:8240::/31", "205581"}, + {"2a0f:9180::/29", "21217"}, + {"2001:4490:d660::/45", "9829"}, + {"2600:6c04:be::/30", "20115"}, + {"2604:b180::/44", "11192"}, + {"2620:a9:8000::/45", "16991"}, + {"2001:559:83b8::/48", "33652"}, + {"2001:67c:72c::/48", "61337"}, + {"2602:102:1004::/46", "20115"}, + {"2804:5eb8::/32", "262866"}, + {"2a0e:b107:147a::/48", "142164"}, + {"2a10:4a80::/32", "210072"}, + {"2800:68:f::/43", "61468"}, + {"2a02:26f7:d108::/48", "36183"}, + {"2a04:ee00::/29", "56724"}, + {"2001:4d0:241a::/48", "1848"}, + {"2001:1900:2365::/48", "3356"}, + {"2409:8751:d00::/38", "56047"}, + {"2600:6c3a:e04::/31", "20115"}, + {"2001:559:c129::/48", "33657"}, + {"240a:aba4::/32", "145630"}, + {"240e:44d:2580::/41", "4134"}, + {"2604:50::/45", "393950"}, + {"2620:32:4000::/48", "395956"}, + {"2620:12a:600a::/45", "32578"}, + {"2804:151:63::/30", "10954"}, + {"2a02:2450::/29", "20880"}, + {"2001:500:3::/48", "20144"}, + {"240a:a20c::/32", "143174"}, + {"2c0f:f7a8:805f::/48", "4134"}, + {"2001:569:c::/30", "852"}, + {"2409:806b:3100::/36", "9808"}, + {"240e:4e:800::/27", "4134"}, + {"2603:6035::/32", "20001"}, + {"2804:111c:5::/32", "52818"}, + {"2a06:e881:140e::/47", "202540"}, + {"2a02:1378::/32", "39775"}, + {"2a02:26f7:e508::/48", "36183"}, + {"2001:500:90::/48", "33517"}, + {"2001:48a8::/33", "237"}, + {"2800:68:25::/44", "61468"}, + {"2804:79a0::/32", "271317"}, + {"2a03:6440:2001::/46", "199055"}, + {"2a12:3e80:100::/48", "48314"}, + {"2001:559:44a::/48", "33659"}, + {"2401:3c0:108::/47", "45528"}, + {"2403:9800:6d00::/38", "4771"}, + {"2804:1718::/32", "263121"}, + {"2a03:1f60::/32", "8787"}, + {"2400:df80::/32", "133444"}, + {"2600:370f:5268::/47", "32261"}, + {"2804:3b48::/32", "52591"}, + {"2a00:5300::/32", "45031"}, + {"2a06:e540:203::/29", "203600"}, + {"2a0e:a1c0::/29", "206576"}, + {"2a12:5240::/48", "209626"}, + {"2001:4998:3c::/48", "14780"}, + {"2408:8256:3980::/44", "17623"}, + {"240a:a6d2::/32", "144396"}, + {"240a:a83e::/32", "144760"}, + {"2804:7348::/32", "262690"}, + {"2a01:c50e:2900::/33", "12479"}, + {"2a02:26f7:ee04::/48", "36183"}, + {"2001:559:1cc::/48", "7725"}, + {"2401:2d80::/48", "58641"}, + {"240a:a10a::/32", "142916"}, + {"240a:ae08::/32", "146242"}, + {"240e:3b6:9200::/36", "140317"}, + {"2600:1407:1c01::/34", "20940"}, + {"2803:bc40:a006::/43", "52468"}, + {"2804:22b4:c8::/32", "264117"}, + {"2a07:22c1:c100::/40", "213021"}, + {"2001:12a0::/45", "28292"}, + {"2401:d800:7e40::/42", "7552"}, + {"2401:d800:de70::/40", "7552"}, + {"2402:a1c0::/39", "137526"}, + {"2a01:8840:45::/48", "207266"}, + {"2a02:6c00:f00b::/36", "44971"}, + {"2a02:cb80:4100::/43", "43766"}, + {"2a07:6cc0:10::/46", "61098"}, + {"2001:44c8:4700::/42", "131445"}, + {"240a:ad1a::/32", "146004"}, + {"240e:379:2600::/32", "4134"}, + {"2a0c:4a40::/29", "210107"}, + {"2001:1248:98c6::/44", "11172"}, + {"2406:2000:1a8::/46", "10310"}, + {"2806:230:1026::/48", "265594"}, + {"2001:559:c0ae::/48", "7922"}, + {"2409:8c3c:905::/35", "24444"}, + {"240a:a365::/32", "143519"}, + {"2600:cc04::/32", "32298"}, + {"2606:98c0::/32", "400333"}, + {"2a01:c50f:1600::/36", "12479"}, + {"2a02:6460::/32", "201875"}, + {"2a0f:cc83::/32", "208861"}, + {"2001:559:8400::/48", "33287"}, + {"2409:8035::/28", "9808"}, + {"2a02:26f0:119::/48", "34164"}, + {"2a02:26f7:c449::/42", "20940"}, + {"2a0f:4a80::/48", "50673"}, + {"2001:480:332::/37", "668"}, + {"2001:4860:4806::/41", "15169"}, + {"240e:1c:2000::/36", "4134"}, + {"2a00:1e6b::/29", "42861"}, + {"2a0c:b641:1a0::/47", "57470"}, + {"2c0f:fde8:1000::/36", "37712"}, + {"2001:49f0:d097:8000::/44", "174"}, + {"240e:f7:e000::/35", "136190"}, + {"2600:6c10:c37::/44", "20115"}, + {"2804:7e20::/32", "271604"}, + {"2a09:a0c0::/29", "34515"}, + {"2001:559:c2e3::/48", "7922"}, + {"2001:44b8:404c::/48", "7545"}, + {"2408:8459:ee30::/41", "17622"}, + {"2409:8928::/31", "56041"}, + {"2804:47c0::/32", "263665"}, + {"2804:4998::/32", "267192"}, + {"2a01:8840:ce::/43", "12041"}, + {"2a02:888:8247::/48", "47794"}, + {"2400:5ba0::/48", "149079"}, + {"2806:2f0:6283::/43", "17072"}, + {"2a01:4540::/29", "199554"}, + {"2603:c024:c000::/35", "31898"}, + {"2804:694:3900::/33", "262596"}, + {"2a00:cb40::/32", "48972"}, + {"2607:f6f0:b000::/40", "64275"}, + {"2804:7db8::/32", "271578"}, + {"2a0c:b641:69c::/48", "209297"}, + {"2401:4900:4ce0::/44", "45609"}, + {"2a02:26f7:c7c1::/46", "20940"}, + {"240a:a9d1::/32", "145163"}, + {"2604:e8c0:7::/48", "6233"}, + {"2800:150::/48", "22047"}, + {"2801:80:330::/48", "53046"}, + {"2a02:2b18::/32", "35816"}, + {"2001:df7:6800:2000::/48", "59194"}, + {"240a:a92b::/32", "144997"}, + {"240e:6bb::/36", "140316"}, + {"2804:46ec:2300::/35", "267020"}, + {"2804:6698::/32", "269570"}, + {"2a00:1358:1001::/32", "6866"}, + {"2a02:26f7:eccd::/42", "20940"}, + {"2a0d:3842:1260::/48", "57629"}, + {"2404:bf40:a504::/42", "139084"}, + {"2602:fc26:14::/48", "211562"}, + {"2a02:e30:f008::/48", "51426"}, + {"2001:559:4::/48", "33490"}, + {"2804:14d:ca00::/40", "28573"}, + {"2a02:26f7:c780::/48", "36183"}, + {"2001:559:871e::/48", "33491"}, + {"2804:66a0::/43", "269572"}, + {"2a01:8840:d2::/45", "12041"}, + {"2a02:26f7:be48::/48", "36183"}, + {"2a02:26f7:cf84::/48", "36183"}, + {"2001:67c:298::/48", "51307"}, + {"2400:c540:c827::/41", "59238"}, + {"2401:4900:1000::/41", "45609"}, + {"2804:1b3:3000::/39", "18881"}, + {"2a02:418::/29", "29691"}, + {"2a02:25b0:aaaa::/48", "42422"}, + {"2a04:4e40:5600::/48", "54113"}, + {"2a11:5ec0::/48", "16509"}, + {"2408:8956:b200::/40", "17622"}, + {"2604:700::/32", "10384"}, + {"2607:1280:1490::/44", "394972"}, + {"2804:56c:200::/35", "28210"}, + {"2a06:4b02::/29", "51191"}, + {"2001:559:299::/48", "33660"}, + {"2401:d800:5850::/42", "7552"}, + {"2408:8459:1c10::/42", "17623"}, + {"2800:630::/32", "7049"}, + {"2801:80:1c70::/48", "266122"}, + {"2804:4088::/32", "265965"}, + {"2001:559:84d5::/46", "7015"}, + {"2403:5800::/47", "4764"}, + {"2409:8030::/36", "9808"}, + {"2604:a640::/32", "54980"}, + {"2a01:ce95:8002::/33", "51964"}, + {"2a02:26f0:84::/48", "8966"}, + {"2a03:69c0:100::/40", "49981"}, + {"2a03:9520::/32", "42220"}, + {"2a03:c5c0::/32", "198484"}, + {"2a0e:46c6:8d5::/48", "208696"}, + {"2401:3280:1000::/34", "133613"}, + {"240a:a2b9::/32", "143347"}, + {"240a:ad8c::/32", "146118"}, + {"2600:8807:4782::/36", "22773"}, + {"2804:297c:c400::/36", "262907"}, + {"2a02:70::/47", "3326"}, + {"2a02:26f7:4e::/48", "36183"}, + {"2001:559:5de::/48", "7922"}, + {"2001:559:f2::/48", "7922"}, + {"2001:148f:fffc::/48", "59747"}, + {"2405:6e00:690::/41", "133612"}, + {"2a01:cde0:8010::/48", "16028"}, + {"2a02:26f7:ce44::/48", "36183"}, + {"2a03:1e02::/32", "203865"}, + {"2a0e:ba40::/29", "207547"}, + {"2600:6c38:f0e::/43", "20115"}, + {"2001:253:11a::/45", "38272"}, + {"2001:550:aa02::/35", "174"}, + {"2001:559:593::/48", "33287"}, + {"2001:df0:d1::/48", "55857"}, + {"2401:4900:5910::/44", "45609"}, + {"2402:8100:26a0::/46", "45271"}, + {"2406:840:fd10::/48", "134993"}, + {"2408:8957:9a00::/40", "17622"}, + {"2600:140f:7001::/38", "20940"}, + {"2620:122:b000::/48", "46656"}, + {"2804:2074::/32", "264491"}, + {"2a03:efc0:200::/40", "33438"}, + {"2a09:3c00:2::/29", "6939"}, + {"2a0a:6640::/29", "42658"}, + {"2001:559:728::/48", "7922"}, + {"2001:559:8015::/44", "7922"}, + {"2001:678:ef4::/48", "202592"}, + {"2001:13b0::/32", "3549"}, + {"2403:a340::/32", "134823"}, + {"2404:2f40::/32", "133938"}, + {"240a:a3e8::/32", "143650"}, + {"2800:bf0:118::/42", "27947"}, + {"2a04:f580:9230::/48", "4809"}, + {"2a05:6c0::/36", "203043"}, + {"2a0b:4d07:159::/48", "44239"}, + {"2001:16a0:6000::/48", "25019"}, + {"2409:8028:2c00::/38", "9808"}, + {"2a02:26f7:d4d0::/48", "36183"}, + {"2804:28e0::/32", "262550"}, + {"2a0b:dbc0::/29", "207003"}, + {"2402:c040::/32", "137567"}, + {"2408:8459:6e30::/41", "17622"}, + {"240e:44d:7700::/42", "140345"}, + {"2a01:aea0:dd3::/45", "40980"}, + {"2001:f98::/32", "17683"}, + {"2408:840d:dd00::/42", "17621"}, + {"240e:3bf:ec00::/35", "140314"}, + {"2804:3df8:6004::/35", "266566"}, + {"2a06:e881:5501::/46", "209864"}, + {"2a0b:b5c0::/29", "54543"}, + {"2001:1938:2000::/40", "33438"}, + {"240a:a961::/32", "145051"}, + {"2600:1407:f801::/28", "20940"}, + {"2600:140f:a01::/39", "20940"}, + {"2607:f110:e170::/40", "21889"}, + {"2620:0:1601::/48", "33052"}, + {"2804:1d70::/32", "264368"}, + {"2a02:868::/33", "13247"}, + {"2a02:26f7:dc04::/48", "36183"}, + {"2001:550:2802::/45", "174"}, + {"2600:100b:f010::/39", "6167"}, + {"2620:0:b30::/48", "32982"}, + {"2804:5640:f800::/37", "267986"}, + {"2a03:6580::/32", "19855"}, + {"240a:acef::/32", "145961"}, + {"2804:4cf8:2000::/32", "267404"}, + {"2001:559:81cf::/48", "33287"}, + {"2404:63c0:10::/44", "131645"}, + {"2406:e00:104::/47", "55740"}, + {"2604:d400:ff11::/48", "25934"}, + {"2606:4700:3055::/46", "13335"}, + {"2800:6c0::/32", "27823"}, + {"2a01:8840:66::/44", "12041"}, + {"2a0b:b87:ffef::/48", "20473"}, + {"240e:44d:2900::/41", "140345"}, + {"2804:1698::/32", "263295"}, + {"2c0f:fcb0:6000::/32", "36916"}, + {"2602:feca::/36", "6939"}, + {"2801:80:ae0::/48", "61779"}, + {"2806:2f0:3543::/42", "17072"}, + {"2a10:6c0::/29", "207324"}, + {"2600:1413:c001::/35", "20940"}, + {"2602:fd41::/36", "53859"}, + {"2a06:a005:14::/47", "210925"}, + {"2408:8957:9600::/40", "17622"}, + {"240a:ae92::/32", "146380"}, + {"2620:135:7001::/48", "7029"}, + {"2803:ca0::/32", "266831"}, + {"2a05:2080::/29", "204819"}, + {"240a:a302::/32", "143420"}, + {"2a02:4560::/46", "60157"}, + {"2001:df1:9000::/48", "58820"}, + {"2400:a980:500::/36", "133111"}, + {"2402:a00:fffa::/45", "45916"}, + {"2a02:47e0::/29", "201984"}, + {"2a0d:d740::/48", "210036"}, + {"2001:18c8:500::/40", "26326"}, + {"2001:4408:5227::/41", "4758"}, + {"2407:de40:4200::/48", "146886"}, + {"2001:1248:982a::/48", "11172"}, + {"2400:4d40:100a::/34", "134204"}, + {"2408:8956:e000::/40", "17622"}, + {"2804:316c::/32", "265014"}, + {"2804:7974::/32", "271306"}, + {"2a02:4e0:2800::/41", "16135"}, + {"2a0c:f040::/48", "51765"}, + {"2804:24dc::/32", "264245"}, + {"2a00:79e1:f1f::/48", "395973"}, + {"2610:20:6f15::/48", "49"}, + {"2804:5220::/32", "268496"}, + {"2a02:8f0::/32", "29003"}, + {"2a04:c940::/29", "25081"}, + {"2001:4878:4321::/45", "12222"}, + {"2401:4900:1c26::/44", "24560"}, + {"2402:1580:2100::/36", "17682"}, + {"2404:7a40::/43", "132556"}, + {"2800:bf0:a103::/45", "27947"}, + {"2803:6e80::/32", "27923"}, + {"2a02:cf40::/29", "62121"}, + {"240a:a0b6::/32", "142832"}, + {"240a:a66b::/32", "144293"}, + {"2600:1009:a120::/36", "22394"}, + {"2600:370f:36e5::/46", "32261"}, + {"2605:a401:8000::/47", "33363"}, + {"2605:de00:bc::/32", "30083"}, + {"2800:160:182e::/41", "14259"}, + {"2804:24c::/32", "262605"}, + {"2a03:9e00:406::/32", "14537"}, + {"2408:80fa:4000::/34", "17816"}, + {"2600:6c20:a10::/44", "20115"}, + {"2602:ff68::/36", "63436"}, + {"2800:160:19fa::/38", "14259"}, + {"2a0d:b201:6030::/41", "206026"}, + {"2408:870c:3000::/44", "138421"}, + {"240a:a164::/32", "143006"}, + {"240a:a633::/32", "144237"}, + {"2600:6c10:ffe4::/46", "20115"}, + {"2606:3b00::/32", "4906"}, + {"2607::/32", "19016"}, + {"2804:1530::/32", "262481"}, + {"2804:48a4::/32", "267135"}, + {"2a02:888:14a::/45", "47794"}, + {"2a02:26f7:cd45::/48", "20940"}, + {"2001:559:a4::/48", "33651"}, + {"2401:d800:b5a0::/41", "7552"}, + {"2409:8053:3002::/40", "56047"}, + {"240a:a650::/32", "144266"}, + {"240e:3b0:3e00::/33", "140308"}, + {"2607:f8d8::/32", "3580"}, + {"2801:2:101::/32", "17147"}, + {"2001:678:148::/48", "16302"}, + {"2001:67c:137c::/48", "49638"}, + {"2001:1988::/32", "16467"}, + {"2600:6:ff80::/44", "10507"}, + {"2804:319c::/32", "265026"}, + {"2a00:8140::/35", "60351"}, + {"2a11:e487:beef::/48", "212580"}, + {"2001:16e8:1118::/32", "25542"}, + {"2401:fa00::/42", "45566"}, + {"2600:5c01:2bd6::/37", "10796"}, + {"2804:90:5100::/38", "28580"}, + {"2804:7710::/34", "271152"}, + {"2a01:c50f:c040::/39", "12479"}, + {"2a03:2887:ff0f::/43", "35819"}, + {"240a:a6f6::/32", "144432"}, + {"2804:63a8:1002::/32", "269375"}, + {"2a02:f480::/29", "60717"}, + {"2404:ec:520::/32", "703"}, + {"2804:f78:cecf::/34", "263587"}, + {"2a02:26f7:72::/48", "36183"}, + {"2a02:ee80:415e::/42", "3573"}, + {"2a09:da80::/29", "15830"}, + {"2620:52:7::/48", "40955"}, + {"2a00:ca0::/32", "29286"}, + {"2a01:8000:1ffe::/32", "60672"}, + {"2a0b:f840::/32", "205376"}, + {"2001:c20:48b6::/48", "3758"}, + {"2404:6800:480f::/32", "15169"}, + {"240a:a005::/32", "142655"}, + {"240e:3b2:7600::/39", "140313"}, + {"2610:108:4000::/48", "13506"}, + {"2a05:d4c0::/29", "201011"}, + {"2406:d00:5555::/48", "132165"}, + {"2409:8904:5540::/42", "24547"}, + {"240a:ab8e::/32", "145608"}, + {"2a04:eb40::/29", "21183"}, + {"2a04:f580:9030::/48", "4809"}, + {"2a07:3500:13b8::/48", "212151"}, + {"2a0a:c540::/29", "205940"}, + {"2001:559:c036::/47", "20214"}, + {"2401:13c0:4000::/36", "132652"}, + {"2804:154c:4404::/35", "263382"}, + {"2804:4da8::/32", "268211"}, + {"2a00:5600::/32", "31727"}, + {"2a00:8c60:1::/48", "60706"}, + {"2a00:90c0:301::/29", "197745"}, + {"2a03:59e0::/32", "31736"}, + {"2001:559:4dc::/48", "7922"}, + {"2001:559:511::/48", "7016"}, + {"2001:67c:4d0::/48", "43354"}, + {"2403:4000:1a::/32", "24122"}, + {"240a:a552::/32", "144012"}, + {"240e:44d:2b40::/42", "140349"}, + {"2607:fb10:7152::/42", "2906"}, + {"2a00:6760::/32", "202140"}, + {"2a02:26f7:d049::/42", "20940"}, + {"2405:84c0:fade::/48", "138990"}, + {"2409:8924:900::/38", "56046"}, + {"2800:950::/32", "10299"}, + {"2804:78e8::/32", "271273"}, + {"2a00:4b00:13e::/38", "41935"}, + {"2400:c400::/32", "45570"}, + {"240e:44d:3f80::/41", "4134"}, + {"2620:3c::/42", "35929"}, + {"2804:1274::/32", "263477"}, + {"2001:418:2::/36", "2914"}, + {"2001:470:e7::/48", "15011"}, + {"2001:57a:1206::/34", "22773"}, + {"2404:7240:2009::/33", "59074"}, + {"2600:6c10:d7::/39", "20115"}, + {"2605:3380:440e::/48", "12025"}, + {"2804:4c14:eb01::/35", "267348"}, + {"2a00:c440::/29", "2116"}, + {"2001:559:c428::/48", "7922"}, + {"2402:1c80:4000::/32", "133957"}, + {"2804:2984:380::/37", "53184"}, + {"2a01:6e80:fffe::/48", "198156"}, + {"2001:590:3c01::/48", "34164"}, + {"2001:df7:fc80::/48", "136897"}, + {"2600:2002:3000::/36", "33517"}, + {"2600:6c21:403::/45", "20115"}, + {"2803:e880:fff1::/44", "52468"}, + {"2804:81a4::/32", "272467"}, + {"2a03:9120::/32", "43232"}, + {"2c0f:fe78:6000::/32", "37239"}, + {"2001:559:e::/48", "7922"}, + {"240e:44d:7d80::/41", "4134"}, + {"2804:4f90:300::/32", "268335"}, + {"2a03:25a0::/32", "201656"}, + {"2405:ba00:8701::/48", "136025"}, + {"2407:2ec0::/48", "135967"}, + {"2a02:f800::/29", "20485"}, + {"2001:579:408c::/41", "22773"}, + {"240a:60:f00e::/48", "9605"}, + {"240a:abd0::/32", "145674"}, + {"2804:67c0::/32", "269648"}, + {"2a02:750:15::/30", "42708"}, + {"2a05:3580:d000::/38", "35807"}, + {"2001:559:264::/47", "7922"}, + {"240a:a3b9::/32", "143603"}, + {"2a06:dd40:5600::/47", "203416"}, + {"2c0f:f350::/32", "328471"}, + {"2001:44b8:44::/38", "4739"}, + {"2600:6c7f:9072::/48", "20115"}, + {"2409:8052:3800::/47", "56047"}, + {"2804:2984:300::/41", "53184"}, + {"2001:c20::/43", "3758"}, + {"2a02:e980:1fa::/38", "19551"}, + {"2408:8956:edc0::/38", "17622"}, + {"240a:a34a::/32", "143492"}, + {"2606:2800:3::/48", "15133"}, + {"2804:884:2::/32", "262375"}, + {"2a0f:cd00::/29", "44885"}, + {"2001:678:2f0::/48", "20847"}, + {"2400:8000:8004::/33", "4800"}, + {"2600:6c39:23a::/40", "20115"}, + {"2800:160:1656::/47", "14259"}, + {"2a02:2e02:1bc0::/42", "12479"}, + {"2a03:7500::/29", "20810"}, + {"2800:bf0:81e9::/46", "52257"}, + {"2a02:26f7:53::/48", "20940"}, + {"2a0c:8540:a::/47", "42198"}, + {"2a07:a40::/44", "48821"}, + {"2a0f:3500::/29", "201188"}, + {"2408:8957:1500::/40", "17816"}, + {"2409:8087:4401::/40", "24445"}, + {"2a04:83c0::/29", "41561"}, + {"2a10:84c0::/29", "44103"}, + {"240a:a379::/32", "143539"}, + {"2600:370f:2022::/45", "32261"}, + {"2607:d580::/32", "16717"}, + {"2409:8a51:b00::/37", "56047"}, + {"2a09:ea00::/48", "16509"}, + {"2a0d:2c80::/29", "204647"}, + {"2001:978:7501::/38", "174"}, + {"2001:16a2:c00::/34", "39386"}, + {"2a01:c50e:a400::/35", "12479"}, + {"2a05:6e00::/29", "30781"}, + {"2c0f:ee88::/32", "328285"}, + {"2001:559:c177::/48", "33491"}, + {"2402:5300:4310::/37", "45903"}, + {"240a:a15e::/32", "143000"}, + {"2804:2644::/32", "264336"}, + {"2804:37f0::/35", "266445"}, + {"2001:df0:6800::/48", "23620"}, + {"2001:1248:9701::/46", "11172"}, + {"2404:8d06:b000::/40", "133543"}, + {"2804:211c:fe40::/39", "264536"}, + {"2804:22d0::/32", "264124"}, + {"2a02:2ad8::/39", "702"}, + {"2a04:c840::/29", "197830"}, + {"2a0a:5f40::/32", "207242"}, + {"2a0e:97c0:2f0::/44", "211540"}, + {"2c0f:ec08::/32", "328384"}, + {"2408:8469::/27", "4837"}, + {"2600:2c00:b000::/36", "17378"}, + {"2a05:a880:dc20::/48", "36351"}, + {"2a10:8001:c000::/36", "8551"}, + {"2a12:ba00::/29", "204790"}, + {"2404:f780:100::/48", "136557"}, + {"2804:18:6858::/39", "10429"}, + {"2804:c9c::/32", "52729"}, + {"2806:230:204c::/48", "265594"}, + {"2400:9380:8201::/48", "4134"}, + {"2607:d600::/32", "13576"}, + {"2a09:c80::/29", "41743"}, + {"2a02:26f7:f609::/46", "20940"}, + {"240a:afb6::/32", "146672"}, + {"2606:a680::/32", "393706"}, + {"2804:7918:1000::/32", "271284"}, + {"2a02:26f7:f508::/48", "36183"}, + {"2001:559:27b::/48", "33491"}, + {"2402:800:951d::/41", "7552"}, + {"2606:ae00:bee1::/39", "7287"}, + {"2620:f4:c000::/48", "13543"}, + {"2804:78::/32", "262684"}, + {"2a01:7640::/38", "21282"}, + {"2001:559:55d::/48", "7015"}, + {"2001:1490:104::/32", "8895"}, + {"2606:5580:c000::/38", "63242"}, + {"2607:f148:2005::/36", "11734"}, + {"2803:bb20::/32", "266752"}, + {"2a06:1287:330e::/47", "206499"}, + {"2401:5e40::/35", "63770"}, + {"2602:ffb9::/36", "16621"}, + {"2804:3b64::/32", "266146"}, + {"2403:9800:7f0d::/46", "4771"}, + {"2409:8904:d270::/40", "24547"}, + {"2804:640:112::/34", "262713"}, + {"2804:6d2c::/32", "270517"}, + {"2a00:ccc1:100::/40", "44486"}, + {"2600:1001:b100::/42", "6167"}, + {"2a01:7640:9000::/48", "206768"}, + {"2001:678:2ac::/48", "206763"}, + {"2001:df1:6c00::/48", "138685"}, + {"2001:df5:b000::/48", "45637"}, + {"2406:da00:e000::/40", "16509"}, + {"2600:6c20:80d::/42", "20115"}, + {"2606:2800:154::/48", "15133"}, + {"2607:fcd0:105:2700::/49", "8100"}, + {"2803:2fa0:ff00::/40", "265705"}, + {"2804:3358:4000::/32", "265390"}, + {"2804:41ec::/33", "267466"}, + {"2804:4fd4:c000::/34", "268352"}, + {"2a0b:6b86:d00::/43", "212232"}, + {"2a0e:8f02:f022::/48", "211479"}, + {"2001:250:1020::/44", "24353"}, + {"2001:15b0::/32", "21221"}, + {"2400:cb00:340::/45", "13335"}, + {"2405:6e00:2488::/45", "133612"}, + {"2606:2800:4a30::/46", "15133"}, + {"2401:3cc0:501::/38", "137409"}, + {"2600:1419:6400::/48", "35994"}, + {"2602:fe68::/36", "26370"}, + {"2804:81b0::/32", "272470"}, + {"240a:ad5c::/32", "146070"}, + {"2001:559:1e0::/48", "33659"}, + {"2001:559:c283::/45", "7015"}, + {"2603:c0f0:2000::/43", "6142"}, + {"2804:7d0::/32", "262324"}, + {"2a01:5f7::/32", "5588"}, + {"2a03:f80:381::/48", "9009"}, + {"2001:680::/32", "3257"}, + {"2605:a404:68b::/43", "33363"}, + {"2804:f2c:5800::/32", "53191"}, + {"2804:5238::/32", "268503"}, + {"2a02:26f7:e101::/46", "20940"}, + {"2a09:9a00::/29", "212417"}, + {"2401:cec0::/32", "55996"}, + {"2401:d800:b060::/40", "7552"}, + {"2402:2680::/32", "63873"}, + {"2607:180::/32", "395663"}, + {"2a00:4802:310::/44", "8717"}, + {"2001:4878:4158::/48", "12222"}, + {"2405:9800:c000::/37", "45430"}, + {"2607:f790:fff1::/45", "12129"}, + {"2607:fc58:1:29::/64", "13536"}, + {"2a00:a920::/36", "60486"}, + {"2a11:2780::/29", "21040"}, + {"2804:14c:65fa::/45", "28573"}, + {"2a0f:9207:24::/48", "61421"}, + {"2400:adc2:900::/38", "9541"}, + {"2405:ec00:5::/39", "23955"}, + {"2c0f:f578:70::/32", "24691"}, + {"2400:c6c0::/32", "58909"}, + {"2803:be20::/32", "52444"}, + {"2804:4db4::/32", "268214"}, + {"2001:559:1c5::/48", "33660"}, + {"2804:45e4:7410::/36", "262567"}, + {"2001:559:c14c::/47", "7015"}, + {"2620:c0::/48", "6492"}, + {"2803:f080:8800::/41", "64120"}, + {"2804:3110::/32", "264990"}, + {"2804:4488:2010::/44", "262480"}, + {"2a0c:1880::/29", "211594"}, + {"2a0c:7d40::/32", "209418"}, + {"2001:df0:d::/48", "24088"}, + {"2408:8459:a450::/38", "17816"}, + {"2804:1644::/38", "262903"}, + {"2a02:26f0:e301::/40", "20940"}, + {"2a0b:4340:520::/44", "134098"}, + {"2600:1403:9401::/36", "20940"}, + {"2801:1:8800::/48", "64102"}, + {"2a01:728::/29", "16347"}, + {"2a02:26f7:ec45::/46", "20940"}, + {"2a0c:3dc0::/29", "61323"}, + {"2408:840c:400::/40", "17621"}, + {"2607:fdf0::/33", "8008"}, + {"2a02:26f7:d788::/48", "36183"}, + {"2001:13d2:3805::/44", "7303"}, + {"2620:11e:1000::/48", "20052"}, + {"2001:250:1e0a::/39", "23910"}, + {"2001:fd8:b3b0::/44", "4775"}, + {"2402:1980::/32", "4818"}, + {"2600:370f:34c0::/45", "32261"}, + {"2804:28d0::/32", "263982"}, + {"2408:84f3:2c10::/44", "17623"}, + {"2603:f4b0::/29", "63023"}, + {"2804:20fc:2500::/32", "264525"}, + {"2a02:26f7:d585::/46", "20940"}, + {"2408:8956:cbc0::/37", "17622"}, + {"2600:140b:2201::/39", "20940"}, + {"2804:f88::/32", "28665"}, + {"2403:e00::/32", "38437"}, + {"2800:160:17b4::/44", "14259"}, + {"2a0a:6680:a000::/36", "206398"}, + {"2a0d:b201:c000::/43", "206026"}, + {"2804:827c::/32", "262937"}, + {"2806:2f0:9783::/42", "17072"}, + {"2a03:d7c0::/29", "42695"}, + {"2a06:e881:7100::/46", "207748"}, + {"2001:67c:890::/48", "49881"}, + {"2803:48e0::/47", "52468"}, + {"2001:559:82d7::/48", "33668"}, + {"2001:1ba0::/32", "5578"}, + {"2401:d280::/32", "133771"}, + {"2404:3d00:4132::/47", "21433"}, + {"2409:8904:8040::/39", "24547"}, + {"240a:a366::/32", "143520"}, + {"2a02:28e8::/32", "34347"}, + {"2600:4800::/41", "54004"}, + {"2a04:ac00::/48", "56534"}, + {"2001:468:f000::/48", "11164"}, + {"2804:5ef4::/32", "269067"}, + {"2806:2f0:1103::/42", "22884"}, + {"2a00:dc8::/32", "39637"}, + {"2a0d:c480::/29", "60721"}, + {"2001:579:50f8::/39", "22773"}, + {"2800:481::/32", "14080"}, + {"2804:1410::/32", "262360"}, + {"2001:44b8:30c8::/48", "4739"}, + {"2001:4818:2000::/36", "36030"}, + {"2606:a800::/32", "4922"}, + {"2800:5f0:3026::/47", "22724"}, + {"2806:2ea::/32", "139235"}, + {"2001:1960:200::/32", "5650"}, + {"2620:7e:3::/44", "22414"}, + {"2804:3a88::/32", "266094"}, + {"2804:414c::/32", "28204"}, + {"2a01:758::/48", "15785"}, + {"2a02:26f7:bb46::/47", "20940"}, + {"2a02:26f7:e1c1::/46", "20940"}, + {"2a11:8b80::/32", "13030"}, + {"2600:1406:43::/48", "35994"}, + {"2605:8d80:900::/34", "812"}, + {"2001:559:c20b::/48", "7922"}, + {"2001:67c:2444::/48", "43018"}, + {"2402:a900::/32", "9877"}, + {"2a0d:8580::/32", "204572"}, + {"2001:44b8:605d::/48", "4739"}, + {"2400:4ec0:8d01::/38", "64300"}, + {"2804:4020::/32", "265936"}, + {"2a02:54e0::/29", "50606"}, + {"2a0e:1106:fd::/46", "62142"}, + {"2c0f:f000:200::/37", "36891"}, + {"2001:da8:201::/48", "59201"}, + {"2001:dce:d454::/48", "38064"}, + {"2402:800:529b::/41", "7552"}, + {"240a:ae1c::/32", "146262"}, + {"2a10:2f00:15e::/48", "212227"}, + {"2600:6c21:805::/46", "20115"}, + {"2001:559:819e::/48", "22909"}, + {"2001:c20:c836::/44", "3758"}, + {"2001:dc7:cd01::/43", "24151"}, + {"2604:71c0::/32", "10423"}, + {"2a0b:1306:2::/48", "198018"}, + {"2001:cb0:2207::/35", "4637"}, + {"2602:fd7d:200::/37", "16925"}, + {"2800:bf0:3b42::/42", "27947"}, + {"2804:348:8000::/33", "28133"}, + {"2a0b:ed40::/31", "212547"}, + {"2a0c:6200::/29", "48655"}, + {"2a10:8441:113::/29", "50455"}, + {"2001:4998:68::/48", "5779"}, + {"2401:d800:f670::/40", "7552"}, + {"2a0c:cf00::/29", "205002"}, + {"2a0e:8f02:f010::/48", "212331"}, + {"2a10:2140::/29", "205843"}, + {"2a10:2f01:330::/44", "44024"}, + {"2001:850::/29", "8447"}, + {"2405:201:c800::/35", "55836"}, + {"240a:aae4::/32", "145438"}, + {"2607:f3d8::/32", "21513"}, + {"2803:dac0:201::/32", "265634"}, + {"2804:1368:f0d1::/36", "262808"}, + {"2804:8620::/32", "272623"}, + {"2001:559:c070::/48", "33652"}, + {"2408:8256:3176::/48", "17816"}, + {"240e:979:e00::/40", "134770"}, + {"2801:80:19c0::/48", "265101"}, + {"2804:b18:8009::/41", "52941"}, + {"2806:2f0:9dc1::/46", "17072"}, + {"2a02:13b0:1::/48", "48635"}, + {"2404:97c0::/32", "138814"}, + {"240a:a9d0::/32", "145162"}, + {"2600:1017:b4e0::/38", "6167"}, + {"2804:8a8::/32", "262385"}, + {"2804:7c7c::/39", "271499"}, + {"2a02:26f0:77::/48", "34164"}, + {"2a07:a343:f210::/44", "9009"}, + {"2a0b:2900:1000::/38", "48582"}, + {"2a11:8481::/32", "210852"}, + {"2001:559:7ec::/48", "33491"}, + {"240e:44d:a80::/41", "4134"}, + {"240e:67d:1800::/32", "4134"}, + {"2600:370f:7505::/44", "32261"}, + {"2620:125:9003::/48", "397415"}, + {"2806:34b::/32", "398013"}, + {"2a04:c41::/29", "61098"}, + {"2404:4e00:2000::/48", "32787"}, + {"2404:8000:31::/41", "17451"}, + {"240a:a67b::/32", "144309"}, + {"2605:e000:1b00::/40", "10838"}, + {"2606:8e80:800::/37", "32133"}, + {"2a02:26f7:e104::/48", "36183"}, + {"2a02:26f7:edc5::/42", "20940"}, + {"2a03:4d41:110::/38", "199610"}, + {"2001:559:86ad::/48", "7016"}, + {"2604:d600:111e::/42", "32098"}, + {"2804:15ec::/36", "28599"}, + {"2a02:26f1::/29", "20940"}, + {"2a0e:ec0::/29", "211147"}, + {"2001:559:84fe::/47", "33659"}, + {"2001:fd8:f230::/44", "4775"}, + {"2a00:1d36:c00::/40", "47331"}, + {"2a10:6800::/29", "399975"}, + {"2403:73c0::/32", "135244"}, + {"2408:8256:328c::/48", "17816"}, + {"240e:e:c800::/37", "137690"}, + {"2604:8f40::/32", "23423"}, + {"2806:335:100::/37", "265580"}, + {"2402:ab00:caff::/34", "24206"}, + {"2602:fca3:10::/48", "2165"}, + {"2607:fd80::/32", "14103"}, + {"240a:a034::/32", "142702"}, + {"240a:adf7::/32", "146225"}, + {"2804:6424::/32", "269409"}, + {"2001:df1:2000::/48", "9268"}, + {"240a:40a2:c000::/35", "58834"}, + {"240e:13::/37", "4134"}, + {"2800:590:1000::/34", "7004"}, + {"2803:bb40::/32", "52507"}, + {"2a02:26f0:fe01::/39", "20940"}, + {"2a0b:3380::/29", "28686"}, + {"2001:559:87e6::/48", "33491"}, + {"2001:da8:b009::/48", "23910"}, + {"2001:df7:ed00::/48", "138806"}, + {"2001:1248:59c3::/45", "11172"}, + {"2605:ca40:2::/48", "16158"}, + {"2607:1c80::/32", "18615"}, + {"2a02:4e0:2700::/41", "16135"}, + {"2a10:4646:14::/48", "212065"}, + {"2001:dce:5201::/40", "23869"}, + {"2001:df1:b200::/48", "135343"}, + {"2400:9380:9060::/47", "4809"}, + {"240e:44d:1d80::/41", "4134"}, + {"2804:3a44::/32", "266080"}, + {"2a02:d107:f001::/48", "200088"}, + {"2001:550:2602::/45", "174"}, + {"2001:43f8:1440::/48", "328578"}, + {"2401:e180::/32", "9674"}, + {"2407:4340::/32", "142014"}, + {"2409:8924:9f00::/34", "56046"}, + {"2409:8c20:5022::/45", "56046"}, + {"2604:d600:104d::/42", "32098"}, + {"2801:80:1970::/48", "265049"}, + {"2801:15a::/40", "267788"}, + {"2804:558::/32", "262509"}, + {"2001:559:b0::/47", "33491"}, + {"2401:4900:2580::/38", "45609"}, + {"2404:bf40:f000::/48", "7545"}, + {"2a02:990::/32", "25459"}, + {"2001:468:2810::/48", "396961"}, + {"2406:b2c0::/32", "40676"}, + {"240a:a43a::/32", "143732"}, + {"240a:a687::/32", "144321"}, + {"2600:370f:3585::/46", "32261"}, + {"2600:6c38:324::/43", "20115"}, + {"2620:12c:9020::/48", "395359"}, + {"2800:160:19ce::/43", "14259"}, + {"2a01:190:15f0::/29", "1764"}, + {"2a0d:5600:57::/44", "9009"}, + {"2001:559:8205::/48", "7922"}, + {"2001:559:c105::/48", "33659"}, + {"2409:8904:4760::/36", "24547"}, + {"2607:f408:10::/45", "19871"}, + {"2620:11a:a036::/44", "36040"}, + {"2a02:26f7:ba80::/48", "36183"}, + {"2001:67c:2e1c::/48", "6848"}, + {"240a:af76::/32", "146608"}, + {"2a02:26f7:cac8::/48", "36183"}, + {"2a0a:8ec0::/29", "48918"}, + {"2408:8656:c53::/35", "17622"}, + {"240a:a88f::/32", "144841"}, + {"2804:6768::/32", "269626"}, + {"2a02:26f7:e3c5::/46", "20940"}, + {"2a11:e487:1::/46", "212580"}, + {"2001:da8:8031::/48", "23910"}, + {"2001:fd8:b1f0::/44", "4775"}, + {"2607:c400::/33", "5555"}, + {"2804:74f4:8000::/33", "271014"}, + {"2a01:c50f:fa00::/37", "12479"}, + {"2001:559:c50e::/48", "7016"}, + {"2001:df5:af80::/48", "18229"}, + {"2403:d400::/32", "24364"}, + {"240e:109:8023::/48", "4134"}, + {"2804:3ef4::/32", "266631"}, + {"2804:4394::/32", "267577"}, + {"2a0b:5400:1::/48", "13030"}, + {"2a11:e680::/29", "60022"}, + {"2408:8459:9410::/42", "17623"}, + {"2803:12a0::/32", "266855"}, + {"2804:14d:7400::/40", "28573"}, + {"2a05:d050:20c0::/44", "16509"}, + {"2a0a:4a40::/34", "206754"}, + {"2a0d:5642:129::/48", "35487"}, + {"2001:cb8::/32", "7687"}, + {"2804:2d0::/32", "53230"}, + {"2804:4f8:c000::/36", "28263"}, + {"2a00:1978::/32", "12579"}, + {"2001:fd8:31b0::/44", "4775"}, + {"2408:8459:6a10::/42", "17623"}, + {"2607:fc58:1004::/48", "12055"}, + {"2804:4928::/32", "28161"}, + {"2a01:b740:16::/37", "714"}, + {"2a03:5400:100::/47", "6279"}, + {"240a:a320::/32", "143450"}, + {"240e:109:8047::/48", "131325"}, + {"240e:3b5:6400::/35", "140312"}, + {"2a07:eec0::/29", "201240"}, + {"2400:dcc0:a704::/36", "38631"}, + {"2409:8c28:6193::/36", "56041"}, + {"2600:140f:7801::/32", "20940"}, + {"2804:71e0::/32", "270817"}, + {"2a02:26f7:e5c5::/46", "20940"}, + {"2001:67c:28ac::/48", "25400"}, + {"2401:4900:4cc0::/44", "45609"}, + {"2409:8754:3c00::/39", "56040"}, + {"240e:947:3000::/33", "139887"}, + {"2600:1410:3001::/33", "20940"}, + {"2806:230:6030::/48", "265594"}, + {"2a02:e00:fff1::/44", "29141"}, + {"2c0f:fe38:2220::/41", "33771"}, + {"2001:559:c1f1::/48", "7015"}, + {"2408:8957:aa00::/40", "17622"}, + {"240e:108:1010::/48", "137698"}, + {"2a02:9010:75::/23", "3352"}, + {"2001:1540::/32", "47886"}, + {"2a0b:6b86:d13::/45", "212232"}, + {"2402:800:62dc::/39", "7552"}, + {"240e:438:9840::/38", "4134"}, + {"2607:f5e8::/32", "22926"}, + {"2804:117c:800d::/46", "262182"}, + {"2a00:5540:5014::/48", "198362"}, + {"2a02:7a0:908::/29", "12586"}, + {"2a02:2ad0:503::/43", "702"}, + {"2001:559:c072::/48", "33489"}, + {"2001:67c:1364::/48", "41289"}, + {"2001:4b20:100:570::/60", "65505"}, + {"2405:ba00:8800::/48", "63295"}, + {"2409:8904:4b60::/37", "24547"}, + {"240a:a10f::/32", "142921"}, + {"240e:b1:f800::/30", "4134"}, + {"2600:1000:f000::/44", "6167"}, + {"2001:559:3a1::/48", "33657"}, + {"2606:4700:4400::/44", "13335"}, + {"2620:12:2000::/48", "394756"}, + {"2804:8160::/32", "272450"}, + {"2c0e:2000::/29", "5713"}, + {"2400:7400:43::/45", "23736"}, + {"2402:800:92ee::/39", "7552"}, + {"2600:1415:13::/45", "20940"}, + {"2800:200:bd10::/42", "12252"}, + {"2804:4580:503::/38", "266931"}, + {"2804:4f80:c000::/46", "268330"}, + {"2804:5370::/32", "268584"}, + {"240a:a6e4::/32", "144414"}, + {"2600:370f:72a5::/46", "32261"}, + {"2602:fe8a::/36", "62663"}, + {"2610:a1:3018::/48", "12008"}, + {"2a02:7260::/29", "201898"}, + {"2a06:e881:7300::/47", "213151"}, + {"2a0f:9884::/32", "210625"}, + {"2001:250:205::/48", "24349"}, + {"2001:559:300::/48", "33659"}, + {"2001:559:72b::/48", "7922"}, + {"2001:559:c1b4::/48", "33668"}, + {"2600:381:200::/39", "20057"}, + {"2803:6604:6a00::/32", "28075"}, + {"2404:f4c0:fe10::/44", "139249"}, + {"240a:a855::/32", "144783"}, + {"2600:1800:16::/31", "16552"}, + {"2400:ca07:f020::/43", "23688"}, + {"2607:f740:e619::/45", "63911"}, + {"2a02:2698:5000::/38", "43478"}, + {"2a02:c6a0::/30", "680"}, + {"2a0a:3e00::/29", "64411"}, + {"2a0f:7c80::/29", "50113"}, + {"2001:16a2:8300::/34", "39386"}, + {"2405:7f00:81a0::/38", "133414"}, + {"240a:a914::/32", "144974"}, + {"2001:67c:7e4::/48", "57243"}, + {"2401:d800:bcb0::/41", "7552"}, + {"2600:100d:b170::/40", "22394"}, + {"2a02:26f7:ec05::/46", "20940"}, + {"2a03:b300::/32", "35399"}, + {"2a0f:e402::/32", "61218"}, + {"2c0f:fef8:11::/32", "15399"}, + {"2001:c20:4886::/48", "3758"}, + {"2001:df2:7900::/48", "6939"}, + {"2401:4900:55a0::/41", "45609"}, + {"2408:8256:3b6a::/48", "17623"}, + {"2804:14d:4400::/40", "28573"}, + {"2c0f:fec8:201::/35", "37197"}, + {"2001:579:5044::/40", "22773"}, + {"240a:afb3::/32", "146669"}, + {"2604:7a00:ffc0::/42", "11055"}, + {"2804:20e8::/32", "264520"}, + {"2a01:7e80:321::/32", "197990"}, + {"2a07:3d00::/29", "49088"}, + {"2001:559:c490::/46", "33287"}, + {"2001:67c:394::/48", "47698"}, + {"2001:da8:901e::/48", "24370"}, + {"240a:aa63::/32", "145309"}, + {"2600:1fa0:60a0::/44", "16509"}, + {"2604:8500::/32", "25769"}, + {"2605:89c0::/32", "16556"}, + {"2a01:94a0::/32", "8680"}, + {"2001:250:3433::/48", "138438"}, + {"2001:df0:5b40::/48", "140825"}, + {"2001:16a2:400a::/43", "25019"}, + {"2408:84f3:f610::/44", "17623"}, + {"2801:c4:10::/48", "28383"}, + {"2804:1464::/32", "52630"}, + {"2804:3dec::/32", "266563"}, + {"2400:cb00:a940::/47", "13335"}, + {"2400:da00:5ff1::/48", "58540"}, + {"2402:9e80:60::/48", "138351"}, + {"2803:a10::/32", "265822"}, + {"2803:37c0::/32", "265772"}, + {"2804:1030::/32", "53163"}, + {"2804:665c::/32", "269553"}, + {"2a01:3f1:3000::/38", "56908"}, + {"2a01:5042:e::/48", "202196"}, + {"2a02:6621::/32", "47723"}, + {"2a05:5ec0::/47", "201364"}, + {"2001:559:c346::/48", "33662"}, + {"2408:8456:1040::/38", "17816"}, + {"2602:fea7:f00::/40", "397270"}, + {"2620:26:c000::/47", "55243"}, + {"2a0f:9400:8018::/48", "213316"}, + {"2806:322:d00::/35", "28546"}, + {"2001:fb0:100e::/47", "37992"}, + {"2600:1415:c01::/35", "20940"}, + {"2606:cb80::/32", "394752"}, + {"2a03:dec0::/32", "48524"}, + {"2a0e:97c3:539::/48", "20473"}, + {"2001:dc7:ffc3::/45", "24151"}, + {"2401:4900:1aa0::/44", "45609"}, + {"2a00:7d20::/32", "44671"}, + {"2a03:b500::/40", "41135"}, + {"2a06:e881:5101::/46", "210090"}, + {"2001:3c8:c10c::/38", "4621"}, + {"2001:559:c272::/48", "7922"}, + {"2804:14c:5f88::/41", "28573"}, + {"2a06:e881:5402::/45", "209808"}, + {"2806:230:2017::/48", "11888"}, + {"2602:ff62:208::/45", "61317"}, + {"2804:37bc::/32", "266433"}, + {"2804:3ef0:e100::/47", "266630"}, + {"2001:559:842b::/48", "7015"}, + {"2001:67c:11cc::/48", "3301"}, + {"2001:67c:2910::/48", "3301"}, + {"2001:43f8:13c0::/48", "328522"}, + {"2001:44b8:2045::/48", "4739"}, + {"240e:838:50::/25", "4134"}, + {"2602:feb4:220::/44", "25961"}, + {"2a00:fbc0::/32", "29512"}, + {"2a01:8800::/29", "15693"}, + {"240e:108:13a0::/44", "4811"}, + {"2804:5158::/32", "268446"}, + {"2804:6eb4::/32", "270614"}, + {"2806:20d:1b04::/37", "32098"}, + {"2a02:26f7:f645::/46", "20940"}, + {"2a11:c780::/29", "210799"}, + {"2001:559:5b5::/48", "22909"}, + {"2001:49f0:a017::/44", "174"}, + {"2001:67c:2b8::/48", "51413"}, + {"2401:d800:bd0::/37", "7552"}, + {"2407:3100::/32", "10118"}, + {"2407:8780:2::/47", "135628"}, + {"240a:a1df::/32", "143129"}, + {"240a:a740::/32", "144506"}, + {"240e:44d:5600::/42", "140345"}, + {"240e:46c::/30", "4812"}, + {"2804:7bbc::/32", "271451"}, + {"2a10:d501::/32", "398464"}, + {"2001:559:c26c::/48", "33668"}, + {"240a:a4c9::/32", "143875"}, + {"2804:269c:fe41::/46", "47065"}, + {"2a10:cc42:1c00::/40", "20473"}, + {"2409:8c1f:5b80::/34", "9808"}, + {"2600:370f:31c3::/42", "32261"}, + {"2620:171:cc::/48", "42"}, + {"2800:320:8406::/48", "27882"}, + {"2804:1f04::/32", "53046"}, + {"2804:3828::/32", "266460"}, + {"2a06:cb00::/29", "203615"}, + {"2001:df0:99::/48", "45304"}, + {"2806:230:4011::/48", "11888"}, + {"2a06:45c1::/32", "200416"}, + {"2a0c:b641:24f::/48", "141694"}, + {"2405:d300:21::/40", "17477"}, + {"2600:140b:bc01::/33", "20940"}, + {"2804:348::/33", "28133"}, + {"2804:bd4::/32", "52836"}, + {"2804:3bf0:4001::/32", "266181"}, + {"2a0e:8f02:f001::/48", "213126"}, + {"2a0e:b107:13d6::/48", "211168"}, + {"2408:8957:b200::/40", "17622"}, + {"2607:f3f8:8000::/48", "19019"}, + {"2408:8656:3d00::/28", "17816"}, + {"2800:160:1b1f::/42", "14259"}, + {"2800:3c0:2130::/35", "19863"}, + {"2001:fd8:b0b0::/41", "4775"}, + {"2605:380:53::/44", "42473"}, + {"2804:44c:e001::/35", "262761"}, + {"2a00:1ca8:9c::/48", "58061"}, + {"2400:c700:381::/35", "55644"}, + {"240a:a424::/32", "143710"}, + {"2604:d600:ca1::/44", "32098"}, + {"2a02:26f7::/48", "36183"}, + {"2a10:5200::/29", "399975"}, + {"2803:4540::/32", "264658"}, + {"2a01:c50f:1bc0::/34", "12479"}, + {"2a02:26f7:c909::/42", "20940"}, + {"2001:df5:5d80::/48", "9930"}, + {"2401:d800:990::/42", "7552"}, + {"240a:a43f::/32", "143737"}, + {"2803:16a0:2::/48", "262206"}, + {"2a04:5d86::/31", "61310"}, + {"2a0c:e640::/47", "211876"}, + {"2a0f:ca00::/33", "43309"}, + {"240e:3bf:9c00::/34", "140310"}, + {"2605:b100:700::/41", "577"}, + {"2800:160:1bf3::/37", "14259"}, + {"2a01:a240::/32", "49984"}, + {"2409:8020:3035::/41", "56046"}, + {"2605:6440:100a::/34", "396356"}, + {"2804:960::/32", "263078"}, + {"2a0a:2c0::/48", "48648"}, + {"2001:df3:3080::/48", "137123"}, + {"2001:49f0:d09c::/46", "174"}, + {"2408:8256:3461::/40", "17623"}, + {"2408:8956:a500::/40", "17816"}, + {"240a:a435::/32", "143727"}, + {"2408:8957:7600::/40", "17622"}, + {"2600:6c10:608::/46", "20115"}, + {"2804:782c::/32", "271225"}, + {"2a02:26f7:b849::/46", "20940"}, + {"2a0a:e202:8000::/48", "33438"}, + {"2402:800:5739::/41", "7552"}, + {"240a:a702::/32", "144444"}, + {"2600:6c38:50a::/45", "20115"}, + {"2a01:b420::/44", "60162"}, + {"2a02:188:5108::/48", "35678"}, + {"2a04:3d80::/29", "50628"}, + {"2a05:4ac0::/32", "201453"}, + {"2001:4870:a24a::/48", "26402"}, + {"2401:3c00:100::/42", "38322"}, + {"2401:c680::/47", "133854"}, + {"2404:bf40:a580::/48", "2764"}, + {"2408:8647::/35", "140726"}, + {"2600:1000:be0e::/40", "22394"}, + {"2606:a100::/32", "394285"}, + {"2a02:a28::/32", "210958"}, + {"2407:a00::/32", "9268"}, + {"2806:203::/32", "13999"}, + {"2a00:c00:f033::/48", "24467"}, + {"2a02:26f7:d70a::/42", "20940"}, + {"2a02:6700::/32", "51695"}, + {"2001:67c:4e0::/48", "48550"}, + {"2001:dd8:5::/48", "55439"}, + {"2001:4410:2100::/35", "132040"}, + {"2401:4900:4040::/44", "45609"}, + {"2401:8f40:1::/48", "136950"}, + {"2404:4580::/47", "63526"}, + {"2600:6c20:806::/44", "20115"}, + {"2804:eec:4003::/32", "28226"}, + {"2a06:c480::/29", "203698"}, + {"2409:8b06::/28", "9808"}, + {"2803:ba80::/32", "262932"}, + {"2804:2050:7a8c::/32", "264485"}, + {"2001:559:c4c8::/47", "21508"}, + {"2606:b040:100::/43", "399726"}, + {"2a05:7600:2::/48", "203438"}, + {"2001:559:81a5::/48", "33652"}, + {"2400:7bc0:20::/43", "42962"}, + {"2401:d800:160::/40", "7552"}, + {"2402:800:562b::/41", "7552"}, + {"2607:7a00::/32", "26241"}, + {"2620:106:6000::/45", "3562"}, + {"2a06:7c00::/29", "50307"}, + {"2a0a:a540::/28", "8422"}, + {"2001:250:819::/46", "138182"}, + {"2407:e1c0:22::/41", "146872"}, + {"2804:6af4::/32", "270368"}, + {"2a03:8800::/48", "49687"}, + {"2001:400:b20::/48", "45"}, + {"2403:ad80:10::/48", "36351"}, + {"2404:9700::/32", "10023"}, + {"240a:a606::/32", "144192"}, + {"240e:1c6:c000::/34", "4812"}, + {"2804:5178::/32", "268454"}, + {"2a01:7d0::/32", "8612"}, + {"2a02:26f0:5::/44", "20940"}, + {"2a0d:f802::/32", "20278"}, + {"2a11:f040::/29", "204790"}, + {"2405:f600:1d::/46", "45117"}, + {"2409:8087:3010::/42", "9808"}, + {"2607:f0b0:8::/32", "13319"}, + {"2800:160:1a57::/42", "14259"}, + {"2a02:26f0:3001::/39", "20940"}, + {"2401:5a00:b000::/48", "10032"}, + {"2402:800:9aee::/43", "7552"}, + {"2408:8459:50c0::/38", "17816"}, + {"2804:1bc::/39", "10310"}, + {"2a00:8200::/32", "3292"}, + {"240a:a9f3::/32", "145197"}, + {"240e:44d:1680::/41", "4134"}, + {"2804:61c4::/32", "269255"}, + {"2a01:758:ffe1::/44", "3326"}, + {"2a02:ff0:1ef1::/44", "12735"}, + {"2a0b:b2c0:2::/48", "8892"}, + {"2402:4200:1200::/48", "24284"}, + {"2408:8957:5c00::/40", "17622"}, + {"2a09:8b00::/29", "38913"}, + {"240e:640:ee00::/40", "136197"}, + {"2001:da8:22d::/48", "24349"}, + {"240e:982:5300::/37", "149178"}, + {"2604:bc0:2::/48", "47869"}, + {"2a0a:6fc0::/29", "56864"}, + {"2a0f:6500::/34", "208183"}, + {"2001:250:5837::/48", "23910"}, + {"2001:559:c46f::/43", "7922"}, + {"2403:b300:ff01::/40", "16509"}, + {"2605:6c80:9::/48", "53340"}, + {"2804:60f0::/32", "269201"}, + {"2001:fd8:391::/42", "4775"}, + {"2400:aa00::/33", "9873"}, + {"2402:800:329b::/41", "7552"}, + {"240a:af40::/32", "146554"}, + {"2001:67c:11d8::/48", "200144"}, + {"2001:44b0::/32", "17940"}, + {"240a:ac4c::/32", "145798"}, + {"2001:67c:2f5c::/48", "21100"}, + {"2401:d800:250::/42", "7552"}, + {"240a:ac37::/32", "145777"}, + {"2607:6100:100a::/48", "23026"}, + {"2a0d:d8c0::/48", "395092"}, + {"2a0e:6400::/32", "209094"}, + {"2409:8a51:300::/37", "56047"}, + {"240a:a007::/32", "142657"}, + {"2602:fde8::/36", "398020"}, + {"2804:195c::/32", "61790"}, + {"2407:41c0::/32", "142015"}, + {"2409:8904:a940::/38", "24547"}, + {"2620:12f:c004::/48", "21581"}, + {"2806:2f0:9de3::/38", "17072"}, + {"2806:10a8::/32", "8151"}, + {"2a00:1908:fffc::/48", "205365"}, + {"2a02:2dc0::/32", "9063"}, + {"2a0e:46c4:2400::/46", "211579"}, + {"2001:43f8:d60::/48", "328162"}, + {"2405:9800:15::/41", "45430"}, + {"2406:2000:f01f::/36", "10310"}, + {"2604:7580::/32", "46873"}, + {"2a02:a00:100a::/42", "15987"}, + {"2a02:c840::/29", "8607"}, + {"2a0b:a880::/29", "42316"}, + {"2c0f:fe30::/32", "37006"}, + {"2403:4440::/32", "9367"}, + {"2404:f4c0:6660::/48", "7721"}, + {"2408:840c:5d00::/40", "17621"}, + {"2804:2484:8190::/36", "28258"}, + {"2a02:26f7:bcc0::/48", "36183"}, + {"2a0e:97c0:6ca::/45", "210013"}, + {"2407:e300::/31", "55536"}, + {"240a:a014::/32", "142670"}, + {"240e:fb:c000::/36", "140317"}, + {"2800:200:e2b1::/41", "12252"}, + {"2804:6d38::/32", "270518"}, + {"2a0f:4b41::/32", "29802"}, + {"2402:800:391d::/42", "7552"}, + {"2801:80:2a0::/48", "262534"}, + {"2401:d800:5300::/42", "7552"}, + {"2804:39e8:3e90::/32", "266058"}, + {"2804:5b5c::/32", "268837"}, + {"2a0c:9a40:1057::/48", "34927"}, + {"2403:ad80:20::/48", "36351"}, + {"2404:5740::/48", "395266"}, + {"2409:8924:500::/38", "56046"}, + {"2602:ff39:99::/36", "63318"}, + {"2600:2c00:7000::/36", "17378"}, + {"2602:808:5000::/44", "13578"}, + {"2804:3e84::/32", "266602"}, + {"2806:2f0:9963::/40", "17072"}, + {"2a0b:6b86:3ff::/48", "202562"}, + {"2001:4cb8:267::/37", "28878"}, + {"2607:6900::/32", "14818"}, + {"2001:8d8:100::/32", "8560"}, + {"2403:9800:c100::/40", "4771"}, + {"2405:9800:c600::/48", "45458"}, + {"2604:d600:67b::/40", "32098"}, + {"2806:2f0:3423::/41", "17072"}, + {"2400:8b00:100::/42", "45727"}, + {"2804:2a9c::/32", "264084"}, + {"2a06:8500::/29", "35684"}, + {"2a06:fa00::/29", "207395"}, + {"2001:df0:410::/48", "132228"}, + {"2602:feda:184::/48", "38308"}, + {"2a0f:9400:6228::/48", "48741"}, + {"2001:559:8198::/48", "20214"}, + {"2406:db00::/32", "59216"}, + {"240a:aaa2::/32", "145372"}, + {"2607:ca00::/33", "15290"}, + {"2001:559:835e::/48", "7922"}, + {"2400:9380:87c0::/44", "136167"}, + {"240a:a0d7::/32", "142865"}, + {"2620:138:300f::/48", "11251"}, + {"2804:4b2c::/32", "267288"}, + {"2a00:1880::/32", "15897"}, + {"2a02:21b2:b3ee::/48", "57370"}, + {"2403:ec00::/39", "17806"}, + {"2804:858::/32", "262365"}, + {"2804:76ec::/32", "271143"}, + {"2804:7fe8::/32", "271717"}, + {"2a0b:9040::/29", "9009"}, + {"240e:63:8000::/34", "140316"}, + {"240e:818::/26", "4134"}, + {"2600:141c:7::/48", "8151"}, + {"2803:e4e0::/32", "269890"}, + {"2a04:4e40:1800::/48", "54113"}, + {"2a0a:e5c0:1d::/48", "207996"}, + {"2402:800:7c80::/42", "7552"}, + {"2404:c800::/32", "4760"}, + {"2604:9b00:c04::/38", "14230"}, + {"2605:9d80:8011::/48", "4134"}, + {"2a07:7a80::/29", "206616"}, + {"240e:3b6:2200::/37", "136198"}, + {"2804:1330::/32", "263520"}, + {"2804:6c74::/32", "270469"}, + {"2a00:b000::/32", "48326"}, + {"2400:7700::/32", "56214"}, + {"2404:f4c0:fb00::/48", "139796"}, + {"2408:8459:ce50::/39", "17816"}, + {"2409:8057:3801::/45", "56040"}, + {"2620:95:4000::/45", "40138"}, + {"2a00:19c0::/32", "15922"}, + {"2a0f:6bc0::/29", "60404"}, + {"2001:559:c301::/48", "33491"}, + {"2406:6d40::/32", "141056"}, + {"240a:a6fa::/32", "144436"}, + {"2600:370f:40c8::/43", "32261"}, + {"2a10:c580::/29", "212041"}, + {"2001:da8:a01d::/48", "23910"}, + {"2804:7ab8::/32", "271388"}, + {"2a06:1700::/46", "200651"}, + {"2a0c:dd80:2000::/48", "52000"}, + {"2001:559:c2::/48", "33659"}, + {"2406:1400::/48", "24342"}, + {"240a:a23d::/32", "143223"}, + {"2620:128:7002::/47", "32030"}, + {"2804:37f0:e100::/36", "266445"}, + {"2804:6ae0::/32", "270363"}, + {"2a10:2f00:138::/48", "213105"}, + {"2401:d800:2690::/42", "7552"}, + {"2404:8d06:4000::/40", "133543"}, + {"2406:1d40::/32", "138259"}, + {"240a:a6df::/32", "144409"}, + {"2800:bf0:177::/48", "52257"}, + {"2a0f:e040:3::/48", "60781"}, + {"2001:19c0::/32", "36666"}, + {"2801:16:5000::/44", "266906"}, + {"2804:15b4::/32", "263405"}, + {"2a03:3ac0::/32", "57077"}, + {"2a0a:b640:1::/46", "9009"}, + {"2a0c:2100::/29", "208861"}, + {"2a0e:7a80::/29", "9009"}, + {"2a10:9d80::/29", "15447"}, + {"2406:3003:1060::/43", "55430"}, + {"2001:559:81f8::/48", "7015"}, + {"2001:da8:b5::/48", "24368"}, + {"2001:da8:dfff::/48", "24362"}, + {"2401:d800:7730::/41", "7552"}, + {"240a:a304::/32", "143422"}, + {"240a:a57c::/32", "144054"}, + {"240e:838::/44", "140647"}, + {"2800:440:104::/48", "27738"}, + {"2804:4044::/35", "265948"}, + {"2401:f2c0::/32", "63760"}, + {"2408:8806::/41", "4808"}, + {"2604:2d80:fc00::/48", "30036"}, + {"2605:a404:be9::/37", "33363"}, + {"2804:7bec::/32", "271463"}, + {"2a0c:e640:2::/45", "211876"}, + {"2803:3540::/32", "61519"}, + {"2804:4790::/32", "267062"}, + {"2a0e:c6c0::/32", "62075"}, + {"2001:df7:6680::/48", "146961"}, + {"2400:cb00:a6b0::/46", "13335"}, + {"240e:1d:1000::/34", "58461"}, + {"240e:44d:5500::/42", "140345"}, + {"2804:3b54::/32", "266142"}, + {"2a02:26f7:ec4c::/48", "36183"}, + {"2a02:e982:3::/43", "19551"}, + {"2a05:dfc7:47::/40", "61138"}, + {"240e:980:2700::/40", "133774"}, + {"2804:49ec::/32", "267209"}, + {"2804:4c20::/32", "267351"}, + {"2804:7c38::/32", "271482"}, + {"2806:2f0:5083::/42", "17072"}, + {"2001:df0:bc0::/48", "149013"}, + {"2400:8b00:e00::/42", "45727"}, + {"2402:800:63ab::/43", "7552"}, + {"2402:ee40:28::/41", "17754"}, + {"2406:2000:ef67::/48", "10229"}, + {"2610:b0:4120::/45", "3573"}, + {"2804:3bb8::/32", "266167"}, + {"2804:3bcc::/35", "266171"}, + {"2806:268:501::/48", "13999"}, + {"2a00:1fb8::/32", "29462"}, + {"2a02:26f7:c9c8::/48", "36183"}, + {"2a0e:ed80::/29", "6735"}, + {"240e:3b8:ac00::/35", "4134"}, + {"2a0e:b107:140::/45", "57883"}, + {"2001:df2:b780::/47", "140068"}, + {"2605:3380:43fe::/48", "12025"}, + {"2800:160:2583::/41", "14259"}, + {"2804:2dc:8000::/33", "28277"}, + {"2a0f:607:1051::/48", "131668"}, + {"2001:559:82d2::/48", "7725"}, + {"2001:559:c4dd::/48", "7015"}, + {"2409:8c54:1060::/37", "56040"}, + {"2607:fc48:450::/48", "40009"}, + {"2606:ab00::/47", "55106"}, + {"2a0a:ec02:ff00::/48", "42692"}, + {"2a0e:8f00:dfc0::/42", "213018"}, + {"2a10:7140::/29", "204007"}, + {"2405:a000:14::/32", "7693"}, + {"2409:8000:2000::/40", "56048"}, + {"2603:c0f8:1000::/43", "20054"}, + {"2605:4300:f001::/48", "22616"}, + {"2c0f:f4b0::/32", "328471"}, + {"2409:8730:f000::/31", "9808"}, + {"2620:149:108a::/43", "714"}, + {"2803:3110::/32", "271996"}, + {"2804:16d8:1a00::/40", "262729"}, + {"2a01:98c0::/48", "44882"}, + {"2600:370f:36a5::/46", "32261"}, + {"2607:f5d8:21::/32", "11096"}, + {"2804:5d10:c000::/34", "268948"}, + {"2c0f:ffd0::/32", "36968"}, + {"2001:559:8481::/48", "33491"}, + {"2402:e7c0:c00::/38", "134366"}, + {"2602:107:2810::/48", "20115"}, + {"2604:d600:1514::/46", "32098"}, + {"2606:c800::/32", "36012"}, + {"2607:f6f0:204::/48", "29884"}, + {"2001:ee0:c340::/37", "45899"}, + {"2407:d080::/32", "133120"}, + {"2605:d780::/32", "30162"}, + {"2804:5d4::/46", "262545"}, + {"2a01:c50e:fc00::/38", "12479"}, + {"2a02:f40::/32", "20960"}, + {"2a02:26f7:fb05::/46", "20940"}, + {"2a03:bf01::/32", "43529"}, + {"2001:df5:2d80::/48", "139727"}, + {"2001:1260::/47", "13591"}, + {"240a:a790::/32", "144586"}, + {"2605:3380:414d::/43", "12025"}, + {"2800:bf0:824a::/48", "27947"}, + {"2803:7760::/32", "269829"}, + {"2806:2f0:3081::/42", "17072"}, + {"2806:2f0:4463::/40", "17072"}, + {"2a01:8960::/32", "202136"}, + {"2001:590:3800::/46", "3257"}, + {"2001:67c:22a0::/48", "1764"}, + {"2001:df6:3600::/48", "132559"}, + {"2401:7500:1112::/36", "133296"}, + {"2405:6040::/32", "134021"}, + {"240a:aeeb::/32", "146469"}, + {"2a05:9a00::/45", "59441"}, + {"2001:559:1ef::/48", "33668"}, + {"2001:ee0:2820::/37", "45899"}, + {"2402:800:5a7f::/40", "7552"}, + {"2404:bf40:8682::/41", "139084"}, + {"2804:5b8::/32", "262535"}, + {"2a00:ad87:3b01::/46", "22216"}, + {"2a0b:f4c0:16c::/48", "205100"}, + {"2001:b08:15::/48", "3267"}, + {"2404:e6:810::/39", "703"}, + {"2603:90f5:c::/48", "20115"}, + {"2402:c800:ff7c::/40", "38639"}, + {"240a:abcf::/32", "145673"}, + {"2001:bf0:41::/32", "12732"}, + {"2001:c20:4000::/36", "3758"}, + {"2406:da70:e000::/40", "16509"}, + {"2408:8256:339a::/45", "17623"}, + {"2605:a40e:10::/37", "33363"}, + {"2a00:9100::/32", "196925"}, + {"2a06:1e00:60::/48", "60695"}, + {"2408:84f3:e000::/44", "17622"}, + {"2408:8660::/32", "4837"}, + {"2620:0:7f00::/48", "395262"}, + {"2804:548c::/32", "268657"}, + {"2a00:1728:1a::/47", "34224"}, + {"2a02:26f7:d15e::/47", "20940"}, + {"2a10:cc42:1191::/45", "20473"}, + {"2408:80f1:70::/44", "138421"}, + {"2408:883a:700::/40", "140716"}, + {"2600:6c20:e0f::/43", "20115"}, + {"2602:ff96:7::/48", "31863"}, + {"2604:8600::/34", "14453"}, + {"2605:a40::/32", "39944"}, + {"2806:20d:5a0e::/43", "32098"}, + {"2001:678:e4c::/48", "212622"}, + {"2400:4ec0:ff13::/44", "64300"}, + {"2401:ce80:1000::/46", "396417"}, + {"2620:12b::/48", "13993"}, + {"2803:41e0::/32", "269995"}, + {"2c0f:fb10::/48", "21003"}, + {"2001:df5:2a80::/47", "141371"}, + {"2001:44b8:30c0::/48", "7545"}, + {"2604:9d40:100::/44", "393290"}, + {"2a0e:17c0::/29", "59668"}, + {"2001:67c:7fc::/48", "201460"}, + {"2606:4700:91b0::/44", "13335"}, + {"2806:2f0:2460::/48", "17072"}, + {"2806:312::/32", "265562"}, + {"2a0a:4640::/44", "206177"}, + {"2408:8207:8510::/34", "4808"}, + {"2600:2000:600::/44", "33517"}, + {"2804:7528::/32", "271027"}, + {"2a05:1c40::/29", "203208"}, + {"2a09:b280:ffb0::/46", "210025"}, + {"2400:9380:9280::/46", "4809"}, + {"2406:9c80::/48", "45544"}, + {"2620:53:c000::/48", "62821"}, + {"2a0d:b980::/29", "56708"}, + {"2a11:de40::/29", "1239"}, + {"2402:800:b8f0::/39", "7552"}, + {"2605:3600:a::/48", "30452"}, + {"2804:e18::/32", "52544"}, + {"2804:6e64::/32", "270594"}, + {"2a02:26f7:f34d::/42", "20940"}, + {"2409:8914:9900::/40", "56044"}, + {"2600:1480:2000::/40", "33905"}, + {"2801:80:a80::/44", "11242"}, + {"2801:80:2260::/48", "267630"}, + {"2803:e140::/32", "264631"}, + {"2a02:26f7:ee85::/46", "20940"}, + {"2401:d800:5f50::/42", "7552"}, + {"2a01:8840::/46", "12041"}, + {"2a02:2e02:8910::/42", "12479"}, + {"2406:f00:7::/48", "24186"}, + {"2407:9880::/32", "23856"}, + {"240a:ac35::/32", "145775"}, + {"2a02:d8:800b::/45", "44654"}, + {"2001:4878:164::/48", "12222"}, + {"240e:983:1803::/48", "140329"}, + {"2801:80:210::/48", "52998"}, + {"2804:756c::/32", "271045"}, + {"2a00:1ec8::/42", "2854"}, + {"2a02:db8::/32", "48417"}, + {"2a03:b8c0:27::/48", "137922"}, + {"2a04:2f81::/47", "16509"}, + {"2001:678:2dc::/48", "786"}, + {"2804:204:216::/44", "28186"}, + {"2804:1e88::/32", "264434"}, + {"2a05:9b80::/29", "50083"}, + {"2c0f:eb80:4000::/34", "328029"}, + {"2001:559:15b::/48", "22909"}, + {"2602:fc5f::/36", "399772"}, + {"2800:484:9a00::/34", "10620"}, + {"2801:80:1210::/48", "264314"}, + {"2a00:1478::/32", "43190"}, + {"2a03:a320::/32", "203457"}, + {"2a06:e881:5380::/41", "209859"}, + {"2001:579:18cc::/39", "22773"}, + {"2a00:7ec0:2::/32", "8528"}, + {"2a02:26f7:b689::/46", "20940"}, + {"2a02:d107:e000::/47", "200088"}, + {"2a09:5303::/32", "50113"}, + {"2a0b:2d83::/32", "49542"}, + {"2402:2dc0::/32", "135607"}, + {"2403:300:a0b::/48", "714"}, + {"2804:dfc::/35", "263042"}, + {"2408:8656:2ef9::/45", "17816"}, + {"2804:1a04:8000::/33", "61832"}, + {"2a02:26f7:fc00::/48", "36183"}, + {"2600:1002:b100::/41", "6167"}, + {"2607:f6f0:2001::/48", "394749"}, + {"2803:9800:b8d0::/39", "11664"}, + {"2804:46d0::/32", "267013"}, + {"2a10:2ec7:3000::/36", "208861"}, + {"2603:c002:1510::/38", "31898"}, + {"2402:3a80:1ad8::/42", "38266"}, + {"2404:580::/32", "56268"}, + {"2406:840:f48f::/48", "142554"}, + {"240a:af00::/32", "146490"}, + {"2600:1407:4401::/38", "20940"}, + {"2800:160:1ddc::/42", "14259"}, + {"2804:3fd8:c001::/34", "265919"}, + {"2804:7b78::/32", "271434"}, + {"2a06:340::/29", "34942"}, + {"2001:1248:870d::/43", "11172"}, + {"240a:a5d1::/32", "144139"}, + {"2001:470:57::/48", "6939"}, + {"2401:21c0::/32", "59362"}, + {"2a05:7400:8000::/34", "208221"}, + {"2a06:8200::/32", "208355"}, + {"2a10:fa80:216::/48", "57050"}, + {"2a05:c1c0::/29", "31662"}, + {"2001:559:c2d2::/47", "7922"}, + {"2409:8915:7600::/39", "56044"}, + {"2804:572c::/32", "268049"}, + {"2804:858c::/33", "272586"}, + {"2806:10a8:cbff:100::/34", "8151"}, + {"2a06:9ac0::/32", "209242"}, + {"2a07:3505:80::/44", "31477"}, + {"2a07:3e00::/29", "559"}, + {"2401:1740:2000::/48", "7586"}, + {"240a:a45a::/32", "143764"}, + {"2803:a920::/32", "266668"}, + {"2a0e:97c3:6e0::/48", "20473"}, + {"2001:1a80::/29", "20676"}, + {"2600:6000:fd53::/48", "11351"}, + {"2804:7e14::/32", "271601"}, + {"2a02:26f7:11e::/48", "36183"}, + {"2408:8256:356e::/48", "17623"}, + {"240a:ad1d::/32", "146007"}, + {"240e:13:80b::/48", "140863"}, + {"2402:8100:2110::/44", "45271"}, + {"2403:9800:6600::/36", "4771"}, + {"2405:201:aa00::/37", "55836"}, + {"2405:6e00:f812::/47", "133612"}, + {"240e:982:5000::/40", "140527"}, + {"2804:41d8::/32", "267460"}, + {"2a03:2380::/45", "198818"}, + {"2001:da8:a1::/48", "24358"}, + {"2600:140f:c::/48", "20940"}, + {"2a00:1728:4::/44", "34224"}, + {"2a09:adc0::/47", "64466"}, + {"2001:4b22:12::/64", "65505"}, + {"2405:da00:2::/43", "38235"}, + {"240a:aeb4::/32", "146414"}, + {"2605:3380:3000::/36", "62947"}, + {"2800:bf0:40::/43", "27947"}, + {"2a00:a200::/32", "5520"}, + {"2a0d:6e80::/29", "204562"}, + {"2a0e:68c0::/48", "34907"}, + {"2001:4478::/35", "4802"}, + {"2402:7800:3003::/32", "4826"}, + {"2408:8459:8e30::/41", "17622"}, + {"240a:aeec::/32", "146470"}, + {"2001:559:8035::/46", "7922"}, + {"2407:0:0:3d::/64", "36040"}, + {"2600:370f:7503::/45", "32261"}, + {"2600:6c20:893::/38", "20115"}, + {"2600:6c38:501::/45", "20115"}, + {"2604:ca00:216::/48", "36492"}, + {"2606:e480:4800::/32", "55083"}, + {"2804:6724::/32", "269606"}, + {"2a0b:4341:b02::/48", "57695"}, + {"2a0d:7140::/29", "208861"}, + {"2a0d:fec0:98::/47", "47481"}, + {"2001:678:184::/48", "34953"}, + {"2a0a:f980::/29", "50877"}, + {"2001:559:2c9::/48", "7015"}, + {"2001:559:42e::/48", "33287"}, + {"2001:c20:c842::/48", "9255"}, + {"2001:df7:bb00::/48", "138051"}, + {"2406:840:20::/48", "139317"}, + {"2406:2000:1a4::/46", "24506"}, + {"2600:140f:dc00::/48", "55836"}, + {"2a02:1658::/32", "12290"}, + {"2602:fd9a:b::/36", "54613"}, + {"2605:5fc9::/29", "1239"}, + {"2a0c:2f06::/32", "207080"}, + {"2001:760::/32", "137"}, + {"2602:fff9:fff::/48", "54839"}, + {"2800:bf0:8048::/43", "27947"}, + {"2a04:5b81:2050::/44", "202265"}, + {"2406:daa0:8080::/44", "16509"}, + {"2804:d0c:8080::/33", "53112"}, + {"2a02:26f7:ef51::/42", "20940"}, + {"2a02:4540:5000::/43", "197207"}, + {"2001:4878:a261::/48", "12222"}, + {"2620:111:b000::/48", "22517"}, + {"2804:1d6c::/32", "262521"}, + {"2804:4074::/32", "265960"}, + {"2001:559:82ec::/48", "33659"}, + {"2001:67c:6c8::/48", "31229"}, + {"2401:4900:3a60::/40", "45609"}, + {"240e:3b2:6400::/35", "140312"}, + {"2607:f2b1:f080::/44", "1294"}, + {"2803:5200:1000::/36", "28319"}, + {"2806:2f0:51a3::/38", "17072"}, + {"2a02:26f7:ca0c::/48", "36183"}, + {"2a06:d640::/48", "56601"}, + {"2a0d:27c0::/29", "197706"}, + {"2404:c2c0:8000::/36", "135629"}, + {"2409:8924:9d00::/38", "56046"}, + {"2620:fd:8000::/48", "7922"}, + {"2001:470:a4::/48", "395681"}, + {"2001:559:c269::/48", "13367"}, + {"2001:4490:3600::/42", "9829"}, + {"2400:b000:100::/48", "23862"}, + {"2402:800:339b::/41", "7552"}, + {"2405:b900:1000::/48", "55701"}, + {"2804:58cc::/32", "268150"}, + {"2a03:ba40::/32", "39280"}, + {"2a04:92c7:b::/45", "62240"}, + {"2407:5200:402::/33", "55915"}, + {"2408:8459:7630::/41", "17622"}, + {"2408:8957:4f00::/40", "17816"}, + {"240e:96b:6000::/46", "140364"}, + {"2600:370f:36e8::/39", "32261"}, + {"2620:13f:3019::/40", "46842"}, + {"2804:294::/33", "28604"}, + {"2804:4564::/32", "266923"}, + {"2a07:e340::/32", "9009"}, + {"2a11:1980::/29", "204790"}, + {"2001:678:618::/48", "206006"}, + {"2620:1bc:1027::/44", "7726"}, + {"2804:4d90::/32", "268205"}, + {"2c0f:f3c8:21::/32", "328112"}, + {"2001:550:3405::/40", "174"}, + {"2001:da8:e821::/48", "138373"}, + {"2a02:ca80::/29", "49515"}, + {"2a0e:b107:960::/44", "207427"}, + {"2001:400:6410::/48", "43"}, + {"240e:44d:2200::/42", "140345"}, + {"2605:3380:4171::/44", "12025"}, + {"2403:3440::/36", "4787"}, + {"240a:acab::/32", "145893"}, + {"2a02:26f0:9701::/36", "20940"}, + {"2a02:26f7:fa01::/46", "20940"}, + {"2001:e60:8778::/40", "4766"}, + {"240a:a036::/32", "142704"}, + {"2610:a1:305c::/48", "12008"}, + {"2a0b:f940::/35", "205373"}, + {"2a0c:4100::/29", "204823"}, + {"2406:e000:c05::/43", "23655"}, + {"2407:34c0::/48", "140788"}, + {"2600:1406:3401::/38", "20940"}, + {"2800:800:580::/43", "26611"}, + {"2804:1b0:1a00::/41", "10429"}, + {"2804:2968::/32", "264013"}, + {"2a00:1ff8::/32", "47138"}, + {"2a00:8960::/48", "62082"}, + {"2a01:b8c0::/32", "198869"}, + {"2a02:618::/45", "20485"}, + {"2001:13d2:813::/45", "7303"}, + {"2408:84e1::/39", "4808"}, + {"2607:f928:6::/43", "22645"}, + {"2620:115:7000::/47", "55091"}, + {"2804:1b38::/32", "61716"}, + {"2804:6494::/32", "269436"}, + {"2a0f:c540::/29", "42487"}, + {"2a11:33c0::/29", "211199"}, + {"2001:550:a902::/45", "174"}, + {"2001:559:1e8::/48", "33659"}, + {"2a0c:1d03::/32", "39614"}, + {"2610:a0:17::/42", "7786"}, + {"2804:3480::/32", "265462"}, + {"2001:678:254::/48", "47251"}, + {"2400:6400::/32", "38201"}, + {"2602:fcac::/40", "400260"}, + {"2804:1130::/32", "263664"}, + {"2a09:5080:2::/47", "42652"}, + {"2a11:a480::/29", "204790"}, + {"2001:fd0:405::/35", "10029"}, + {"240a:aeae::/32", "146408"}, + {"240a:af12::/32", "146508"}, + {"2600:9000:1180::/48", "16509"}, + {"2803:ba40::/46", "263756"}, + {"2804:32f0::/32", "265106"}, + {"2001:4888:1c::/32", "6167"}, + {"2804:14c:a985::/44", "28573"}, + {"2804:4bcc::/32", "267330"}, + {"2600:370f:3425::/44", "32261"}, + {"2804:14c:9bfa::/45", "28573"}, + {"2a0a:100::/29", "40970"}, + {"2404:d940:f000::/36", "134877"}, + {"2407:d000::/32", "23674"}, + {"2408:8459:ca50::/39", "17816"}, + {"2606:2800:5042::/48", "15133"}, + {"2804:550c:a000::/35", "268686"}, + {"2804:66d0::/32", "269584"}, + {"2c0e:0:402::/39", "24863"}, + {"2409:8907:6d20::/38", "24547"}, + {"2600:1417:72::/47", "20940"}, + {"2610:a1:3030::/48", "12008"}, + {"2804:d64::/32", "52617"}, + {"2804:6390::/36", "269369"}, + {"2001:1800::/32", "10381"}, + {"240a:ad27::/32", "146017"}, + {"2804:1f26:cafe::/48", "265020"}, + {"2a01:cd01:1f2c::/43", "28708"}, + {"2a02:26f7:47::/48", "20940"}, + {"2401:d800:d152::/40", "7552"}, + {"2604:1b40::/32", "396006"}, + {"2606:6680:409::/48", "40676"}, + {"2804:4248:8001::/35", "267490"}, + {"2a0d:8980::/29", "42237"}, + {"2001:559:c028::/47", "33491"}, + {"2804:7bd0::/32", "271456"}, + {"2a02:e40::/32", "6700"}, + {"2a02:26f7:ebcd::/42", "20940"}, + {"2404:2480:6501::/32", "135391"}, + {"2600:6c38:d19::/45", "20115"}, + {"2401:4900:18e0::/44", "45609"}, + {"2604:980:7006::/32", "21859"}, + {"2001:bf7:1350::/44", "213106"}, + {"2001:df0:2c1::/48", "58624"}, + {"2001:df4:6b00::/48", "136493"}, + {"240a:a05e::/32", "142744"}, + {"240e:980:2800::/40", "133775"}, + {"2600:6c10:ff8f::/43", "20115"}, + {"2803:9800:b0d4::/42", "11664"}, + {"2804:76cc::/35", "271135"}, + {"2804:8484::/32", "272265"}, + {"2001:16d8:55::/46", "16150"}, + {"2404:bf40:c043::/40", "139084"}, + {"2804:2b8::/32", "28130"}, + {"2001:44b8:30f3::/44", "7545"}, + {"2604:7a40:3000::/32", "394710"}, + {"2804:bf8:5000::/32", "52653"}, + {"2001:df6:e100::/48", "138359"}, + {"2001:18c8:900::/32", "8015"}, + {"2600:1408:6000::/48", "35994"}, + {"2804:816c::/32", "272453"}, + {"2a03:b8c0:19::/48", "396253"}, + {"2a09:7d80::/29", "16245"}, + {"2a0c:6880::/32", "204796"}, + {"2a0d:7980:2::/39", "48635"}, + {"2a0e:b107:934::/48", "204446"}, + {"2001:4818:1000::/36", "36031"}, + {"2405:f600:70::/40", "45117"}, + {"2804:58fc::/33", "268162"}, + {"2804:5a34::/38", "268755"}, + {"2a05:b680:10::/48", "44682"}, + {"2001:250:c1d::/48", "23910"}, + {"2a00:b280::/32", "15557"}, + {"2a01:5b0:9::/48", "50611"}, + {"2001:559:80bc::/47", "7015"}, + {"2804:93c:c1::/35", "52878"}, + {"2a02:2e02:1c20::/41", "12479"}, + {"2600:1010:d120::/41", "6167"}, + {"2804:20bc::/32", "264511"}, + {"2804:4a98:f000::/36", "267251"}, + {"2a02:26f7:cb05::/46", "20940"}, + {"2a0e:fb45::/32", "62240"}, + {"2400:a980:6100::/37", "133111"}, + {"2401:d800:d540::/42", "7552"}, + {"2408:8256:2d6d::/43", "17623"}, + {"2001:43f8:360::/48", "328206"}, + {"2401:b80:4000::/32", "133334"}, + {"2a0b:6640::/32", "213158"}, + {"2a0b:8700::/29", "61317"}, + {"2407:6400::/32", "9484"}, + {"2620:13f:3018::/48", "27538"}, + {"2001:559:31a::/48", "33660"}, + {"2001:43f8:1d0::/48", "37288"}, + {"2001:44b8:4049::/48", "4739"}, + {"2403:c00:f00::/45", "17488"}, + {"240a:aca2::/32", "145884"}, + {"2a01:1e8::/32", "33843"}, + {"2a0a:f200::/29", "208861"}, + {"2001:559:8201::/48", "21508"}, + {"2001:fd8:f080::/42", "132199"}, + {"2406:8100::/35", "24182"}, + {"240a:a5da::/32", "144148"}, + {"2620:171:43::/45", "715"}, + {"2804:14d:bac1::/43", "28573"}, + {"2804:6a68::/32", "270334"}, + {"2a0b:880:7::/36", "210834"}, + {"2001:df6:2180::/48", "135738"}, + {"2606:5480:2000::/36", "395309"}, + {"2804:3098::/32", "264963"}, + {"2a02:f401::/30", "206283"}, + {"2a0f:301::/30", "398559"}, + {"2001:559:2aa::/47", "7922"}, + {"240a:a625::/32", "144223"}, + {"2602:fc5d:100::/47", "399866"}, + {"2620:131:104e::/43", "26450"}, + {"2a02:26f7:2f::/48", "20940"}, + {"2409:806a:3100::/36", "9808"}, + {"2001:559:17f::/48", "7922"}, + {"240a:a735::/32", "144495"}, + {"2602:107:2e10::/48", "20115"}, + {"2606:2800:4a2c::/46", "15133"}, + {"2804:70ec::/32", "270756"}, + {"240e:67a:8c00::/33", "4134"}, + {"2607:9480:f000::/44", "14338"}, + {"2a00:b703:fff1::/46", "210352"}, + {"2001:678:e88::/48", "212548"}, + {"2402:f740:1000::/36", "131477"}, + {"2606:4700:310c::/48", "13335"}, + {"2607:f6f0:3001::/48", "394749"}, + {"240a:a744::/32", "144510"}, + {"2607:f8c8::/32", "23308"}, + {"2620:fe:2040::/48", "174"}, + {"2804:1b04:6::/44", "53048"}, + {"2a02:b78::/32", "6894"}, + {"2a02:26f7:d641::/46", "20940"}, + {"2001:559:868b::/48", "33665"}, + {"2001:8b0:0:70::/47", "20712"}, + {"240a:a8e9::/32", "144931"}, + {"2602:107:e400::/40", "12271"}, + {"2a04:5200:68::/48", "200740"}, + {"2a11:3000::/29", "204790"}, + {"2001:43f8:100::/48", "6968"}, + {"2800:1a0::/32", "27933"}, + {"2a0b:91c0::/29", "203489"}, + {"2600:6c38:d06::/43", "20115"}, + {"2606:b400:8830::/46", "7160"}, + {"2620:0:8a0::/48", "3495"}, + {"2a0b:9480::/29", "50308"}, + {"2a0d:9cc0::/29", "57782"}, + {"2c0f:2b00::/32", "328984"}, + {"2001:678:e74::/48", "196994"}, + {"2001:dd8:25::/48", "45494"}, + {"2400:3ca0::/40", "136373"}, + {"2405:ed00::/32", "10000"}, + {"2a02:e30:f0a0::/48", "60755"}, + {"2a05:c700::/32", "24989"}, + {"2a0e:aa06:100::/48", "138631"}, + {"240c:ca47::/32", "24363"}, + {"2a02:26f7:d541::/45", "20940"}, + {"2a09:4bc7:d020::/47", "140096"}, + {"2a0a:1c80::/29", "44407"}, + {"2001:67c:220::/48", "43911"}, + {"2605:a404:c4::/46", "33363"}, + {"2602:febb::/39", "394989"}, + {"2800:ba0:24a::/48", "263812"}, + {"2402:2700:8000::/33", "132618"}, + {"240e:6bb:2000::/36", "140316"}, + {"2605:45c0::/35", "62217"}, + {"2a07:e345::/46", "211588"}, + {"2001:559:86ef::/43", "7922"}, + {"2001:67c:22bc::/48", "34086"}, + {"2400:4480::/47", "17426"}, + {"2403:e040:8000::/33", "16509"}, + {"2404:c680::/32", "135330"}, + {"2606:4700:9760::/44", "13335"}, + {"2804:6060:c000::/34", "269163"}, + {"2a0a:85c0::/29", "35189"}, + {"2a0d:5a00::/29", "3175"}, + {"2001:559:85ca::/48", "33650"}, + {"240a:aede::/32", "146456"}, + {"240e:146:c000::/34", "4812"}, + {"240e:45c:7700::/40", "140532"}, + {"2600:1404:c000::/48", "35994"}, + {"2600:1409:b001::/36", "20940"}, + {"2620:a8:c000::/48", "32425"}, + {"2804:1354:facf::/37", "52892"}, + {"2a09:bac0:196::/47", "13335"}, + {"2401:d800:3000::/33", "7552"}, + {"2a05:d03a:2000::/40", "16509"}, + {"2001:559:855f::/48", "20214"}, + {"240a:a142::/32", "142972"}, + {"2602:fe54:12::/42", "16584"}, + {"2607:e880:8221::/48", "12220"}, + {"2804:300:2001::/48", "53237"}, + {"2a02:2e02:8500::/42", "12479"}, + {"2c0f:f590::/54", "36974"}, + {"2001:4998:1c1::/32", "10310"}, + {"2405:1c0:6741::/46", "55303"}, + {"2001:978:1d00:2::/47", "174"}, + {"2001:1900:2383::/45", "10753"}, + {"2400:fb00::/32", "55670"}, + {"2600:1406:8c01::/38", "20940"}, + {"2a00:a7a0:ffff::/48", "60212"}, + {"2a01:c50f:b400::/39", "12479"}, + {"2a11:6d40::/29", "204790"}, + {"2001:1248:97cc::/42", "11172"}, + {"2001:18e8:c02::/47", "10680"}, + {"2405:201:8800::/35", "55836"}, + {"2600:1005:9000::/44", "6167"}, + {"2804:442c::/32", "267607"}, + {"2001:678:1d8::/48", "8339"}, + {"2401:4900:3c70::/40", "45609"}, + {"2407:5200:4924::/32", "55915"}, + {"2600:370f:36a8::/41", "32261"}, + {"2607:f078::/32", "18750"}, + {"2806:230:400f::/48", "11888"}, + {"2a00:f46::/44", "43447"}, + {"2a02:ee80:4083::/45", "3573"}, + {"2a0a:54c1:15::/42", "62240"}, + {"240a:a642::/32", "144252"}, + {"2620:149:ac3::/42", "714"}, + {"2804:6bec::/32", "270434"}, + {"2001:250:2e01::/39", "23910"}, + {"2001:559:b8::/47", "33657"}, + {"2405:bc0::/32", "136842"}, + {"240e:980:4f00::/34", "4134"}, + {"2620:128:e040::/48", "22317"}, + {"2804:5580::/32", "267938"}, + {"2a0a:e5c0:19::/48", "213081"}, + {"2a0d:6140::/29", "8823"}, + {"2001:559:87cd::/46", "33654"}, + {"2600:1014:f010::/40", "22394"}, + {"240e:3bc:c800::/37", "4134"}, + {"2620:135:7003::/48", "3257"}, + {"2804:5540::/32", "268427"}, + {"2408:8459:6a30::/41", "17622"}, + {"2600:1003:a100::/44", "6167"}, + {"2a00:1a68::/32", "38955"}, + {"2401:d800:9260::/40", "7552"}, + {"2804:145c:fe00::/39", "263327"}, + {"2001:678:c18::/48", "207487"}, + {"2408:8957:a800::/40", "17622"}, + {"240e:5e:10c0::/44", "140319"}, + {"2a00:1e68::/39", "42861"}, + {"2a02:26f7:f849::/46", "20940"}, + {"240e:87c:600::/42", "137692"}, + {"2600:100d:9000::/44", "6167"}, + {"2a0c:b641:771::/48", "207299"}, + {"2001:67c:1174::/48", "12552"}, + {"2001:67c:18a4::/48", "56881"}, + {"2001:48c8:8::/43", "29791"}, + {"2404:11c0::/32", "134806"}, + {"2404:3100:1::/48", "45669"}, + {"2803:8180:2::/32", "263237"}, + {"2a00:eaa0::/32", "59842"}, + {"2403:8000:11::/32", "4796"}, + {"2803:3f60::/32", "264744"}, + {"2804:57f4:801::/32", "268097"}, + {"2a02:26f7:f544::/48", "36183"}, + {"2001:559:c1f0::/48", "33657"}, + {"2402:800:b440::/39", "7552"}, + {"240a:aef3::/32", "146477"}, + {"240e:108:1160::/48", "58563"}, + {"2600:1407:6800::/48", "35994"}, + {"2600:6c10:f288::/39", "20115"}, + {"2800:bf0:a807::/44", "52257"}, + {"2804:3b04::/32", "266124"}, + {"2804:50a8::/32", "268402"}, + {"2a06:2900:125::/48", "39063"}, + {"2001:559:75::/48", "7015"}, + {"2001:df0:6480::/48", "63752"}, + {"2408:8256:3272::/48", "17816"}, + {"2604:880:39::/48", "29802"}, + {"2804:82c0::/32", "272538"}, + {"2a00:4802:2810::/39", "8717"}, + {"2a00:8a01::/44", "10455"}, + {"2a04:e00:207::/48", "39855"}, + {"2a05:d80::/29", "51257"}, + {"2001:67c:1210::/48", "45029"}, + {"2001:43f8:13b0::/48", "328501"}, + {"2400:8500:d37d::/48", "7506"}, + {"2803:ae80::/32", "263197"}, + {"2804:11dc:5000::/32", "263444"}, + {"2804:21e4::/32", "264580"}, + {"2a03:9e41::/32", "32611"}, + {"2a0f:3786::/40", "64475"}, + {"2001:4930::/34", "6263"}, + {"2408:8459:3e10::/42", "17623"}, + {"2408:8957:6e00::/40", "17622"}, + {"2600:1406:ec00::/48", "35994"}, + {"2800:e00:7000::/31", "27665"}, + {"2804:138b:c100::/34", "53037"}, + {"2804:3dc0:b000::/33", "266551"}, + {"2a0a:ec02:101::/48", "42692"}, + {"2a11:4e80::/29", "211344"}, + {"2001:67c:1508::/48", "47692"}, + {"2800:bf0:8107::/44", "52257"}, + {"2001:500:134::/48", "396566"}, + {"2001:559:8707::/48", "33287"}, + {"2406:ef80:100::/40", "63473"}, + {"2409:8052:3002::/40", "56047"}, + {"2409:8a53:100::/38", "56047"}, + {"240e:3b4:9200::/36", "140317"}, + {"2600:370f:340e::/42", "32261"}, + {"2607:f710:47::/48", "19624"}, + {"2804:6298::/32", "269306"}, + {"2a02:e0:5000::/32", "34984"}, + {"2a02:4e0:10::/48", "16135"}, + {"2402:3a80:1452::/44", "38266"}, + {"240e:3b9:f100::/37", "134775"}, + {"2602:107:50d::/48", "11351"}, + {"2604:9d40:1e0::/44", "393290"}, + {"2607:fb08:8001::/33", "32703"}, + {"2804:529c::/40", "268529"}, + {"2a02:26f7:fac4::/48", "36183"}, + {"2001:559:c14f::/48", "7922"}, + {"2406:f00:4::/48", "23770"}, + {"2409:807c:900::/35", "9808"}, + {"240e:108:80::/48", "23724"}, + {"2800:200:b9f0::/37", "12252"}, + {"240e:45c:a700::/40", "140535"}, + {"2600:6c21:224::/43", "20115"}, + {"2001:44b8:2052::/48", "7545"}, + {"2403:6d00:2000::/32", "56094"}, + {"2604:b180:20::/44", "32776"}, + {"2804:3b6c:c008::/46", "266148"}, + {"2602:fed2:7309::/48", "20473"}, + {"2605:5c0:10::/44", "26517"}, + {"2804:19e8::/32", "61826"}, + {"2804:23c8::/32", "264182"}, + {"2a00:fa0::/32", "13237"}, + {"2a01:53c0:ffd2::/48", "36408"}, + {"2a0d:2940::/29", "206028"}, + {"2c0f:fc90::/35", "16284"}, + {"2404:4a00:1:1::/48", "45629"}, + {"2804:648::/32", "53038"}, + {"2804:7c28::/32", "271479"}, + {"2a0b:cd00::/29", "206372"}, + {"2400:6280::/47", "132876"}, + {"2408:8456:8800::/42", "17622"}, + {"2804:7e90:fc00::/38", "271632"}, + {"2405:f600::/44", "45117"}, + {"2603:f600::/29", "40676"}, + {"2607:f110:e470::/39", "21889"}, + {"2a05:e140::/29", "6735"}, + {"2a0c:52c0::/29", "203973"}, + {"240a:a8f6::/32", "144944"}, + {"240a:ad43::/32", "146045"}, + {"2804:640:80::/44", "262713"}, + {"2a06:d900::/29", "208861"}, + {"2001:559:c2f4::/48", "7015"}, + {"2400:8700::/39", "55394"}, + {"2401:d800:5710::/42", "7552"}, + {"2406:2000:a0::/48", "24376"}, + {"2409:8008:3100::/36", "24547"}, + {"2603:c0f8:2800::/43", "20054"}, + {"2a01:358:401a::/47", "9121"}, + {"2a03:2880:f11a::/45", "32934"}, + {"2a03:44a0:300::/48", "200521"}, + {"2001:559:83d0::/48", "33652"}, + {"2402:800:3bd3::/44", "7552"}, + {"2804:2484:80a0::/39", "28258"}, + {"2804:617c::/32", "269237"}, + {"2a0f:9400:7395::/46", "210815"}, + {"2001:ac0:30fe::/32", "8903"}, + {"2001:16f0::/32", "49220"}, + {"2600:1410:1001::/34", "20940"}, + {"2605:1900:8380::/37", "12208"}, + {"2a02:88d:8020::/44", "48695"}, + {"2a02:26f7:b642::/47", "20940"}, + {"2a03:6947:1b00::/40", "61266"}, + {"2a0c:5247:1000::/36", "59504"}, + {"2001:67c:21a8::/48", "51421"}, + {"2607:fb10:50a4::/41", "2906"}, + {"2804:5ebc::/32", "269053"}, + {"2a02:26f7:e904::/48", "36183"}, + {"2001:579:c800::/39", "22773"}, + {"2001:df4:5d00::/48", "58820"}, + {"2600:1488:c241::/26", "20940"}, + {"2600:6c7f:9330::/41", "40294"}, + {"2801:1a:2800::/48", "269977"}, + {"2001:67c:2a7c::/48", "15598"}, + {"2408:8001:e800::/37", "10206"}, + {"2602:feda:2a7::/44", "204185"}, + {"2607:f110:a2::/39", "21889"}, + {"2a02:26f7:ca05::/46", "20940"}, + {"2001:44b8:4060::/48", "7545"}, + {"2801:154:10::/42", "266669"}, + {"2803:50c0:1::/48", "264763"}, + {"2804:40e8::/32", "265990"}, + {"2a06:8640::/29", "55081"}, + {"2001:ac0:c800::/44", "12541"}, + {"2409:8a56:2200::/37", "9808"}, + {"2600:6c38:de::/42", "20115"}, + {"2620:49:f::/48", "16686"}, + {"2a04:5c85:2000::/36", "47936"}, + {"2602:ff96:5::/48", "40676"}, + {"2001:678:2cc::/48", "16509"}, + {"2001:67c:20fc::/48", "210564"}, + {"2400:adc0:4030::/47", "9541"}, + {"2600:9000:20b5::/41", "16509"}, + {"2604:2e8b:b400::/33", "30036"}, + {"2607:f110:ea20::/35", "21889"}, + {"2c0f:f1c0::/32", "328178"}, + {"2806:2f0:1023::/41", "22884"}, + {"2806:2f0:4203::/42", "17072"}, + {"2a02:26f0:1301::/37", "20940"}, + {"2a02:26f7:ea04::/48", "36183"}, + {"2408:80ea:7980::/43", "17623"}, + {"2804:59fc::/35", "268738"}, + {"2a01:5b0:2f::/48", "8391"}, + {"2a01:6780:4::/48", "12676"}, + {"2a02:26f0:cd01::/40", "20940"}, + {"2001:559:85e7::/48", "33659"}, + {"2610:1a0:7000::/32", "40193"}, + {"2804:ac8:100::/47", "262672"}, + {"2a02:26f7:da01::/46", "20940"}, + {"2a03:d000:1300::/46", "31163"}, + {"2a05:4200:4::/47", "21534"}, + {"240e:438:4020::/43", "140647"}, + {"2a02:21b4::/32", "57370"}, + {"240e:44d:6840::/42", "140351"}, + {"2606:2ec0::/32", "399356"}, + {"2607:f6f0:2c00::/40", "15830"}, + {"2804:82c4::/32", "272539"}, + {"2a11:b280::/29", "204790"}, + {"2001:678:a3c::/48", "8867"}, + {"2600:6c10:f258::/40", "20115"}, + {"2600:9000:234c::/43", "16509"}, + {"2605:a3c0::/32", "395731"}, + {"2806:230:1104::/40", "265594"}, + {"2a0e:6c40::/29", "37221"}, + {"2001:67c:24f8::/48", "57407"}, + {"2408:8456:b210::/42", "134543"}, + {"2409:804b:2901::/45", "9808"}, + {"2600:380:e980::/41", "20057"}, + {"2800:160:175a::/42", "14259"}, + {"2a03:2560::/32", "8982"}, + {"2408:8456:2c50::/39", "17816"}, + {"240e:982:d300::/40", "134756"}, + {"2600:1902::/31", "19527"}, + {"2804:788::/32", "262300"}, + {"2a00:4802:3810::/38", "8717"}, + {"2a01:c50e:b300::/36", "12479"}, + {"2a02:26f7:f3c9::/46", "20940"}, + {"2001:da8:b9::/46", "23910"}, + {"2402:8100:2041::/42", "45271"}, + {"2409:8e15:a000::/30", "56044"}, + {"240a:ad39::/32", "146035"}, + {"2620:122:8008::/48", "30069"}, + {"2a04:2400::/27", "12302"}, + {"2a0c:6740::/29", "58061"}, + {"2a04:5c87::/32", "201365"}, + {"2605:a404:77::/40", "33363"}, + {"2800:4f0:21::/48", "28006"}, + {"2a0b:f303:464::/29", "62240"}, + {"2a0e:b107:14ff::/48", "398355"}, + {"2001:c20:c817::/48", "58562"}, + {"2403:c200::/32", "9790"}, + {"240a:a654::/32", "144270"}, + {"2806:2f0:31c3::/42", "17072"}, + {"2a00:4802:290::/44", "8717"}, + {"2a07:aa00:80::/48", "3356"}, + {"2403:bb00:abcd::/48", "24528"}, + {"2a0b:e480::/29", "206331"}, + {"2406:8800:9033::/45", "17465"}, + {"2408:8456:2200::/42", "17622"}, + {"2603:c012:e000::/36", "31898"}, + {"2a00:c280:101::/29", "50463"}, + {"2001:4d78:2000::/40", "15830"}, + {"2402:800:999b::/42", "7552"}, + {"2804:14d:7685::/41", "28573"}, + {"2403:fc80::/32", "63501"}, + {"2409:8c54:2800::/43", "9808"}, + {"240e:44d:5c00::/41", "140345"}, + {"2806:230:1011::/48", "11888"}, + {"2001:44b8:18::/47", "7545"}, + {"2404:f440::/32", "58460"}, + {"2a00:ce0::/32", "8553"}, + {"2a01:7c8::/40", "20857"}, + {"2a06:ff40::/29", "15738"}, + {"2a0f:d000::/29", "35048"}, + {"2a0f:f180::/32", "60682"}, + {"2001:67c:2664::/48", "42525"}, + {"2804:18:6820::/41", "26599"}, + {"2804:161c:a00::/45", "263268"}, + {"2a00:c080::/32", "5524"}, + {"2001:559:452::/47", "33659"}, + {"2001:559:85fa::/45", "7922"}, + {"2001:57a:f300::/46", "62957"}, + {"2400:fc00:40b0::/39", "45773"}, + {"2620:9c:2000::/48", "54406"}, + {"2800:310:2::/48", "262589"}, + {"2a02:5c0::/32", "21232"}, + {"2a02:26f7:e2c8::/48", "36183"}, + {"2a06:3b80:110::/48", "200478"}, + {"2001:559:103::/48", "20214"}, + {"2001:559:7ad::/48", "33656"}, + {"2400:11c0::/32", "133296"}, + {"2408:8459:3850::/38", "17816"}, + {"2804:299c::/32", "264025"}, + {"2a0e:c680::/32", "208654"}, + {"2001:550:a07::/43", "174"}, + {"2001:559:c312::/48", "22909"}, + {"2001:da8:cc::/48", "138371"}, + {"2a0e:aa07:f0e0::/44", "208680"}, + {"2001:fd8:221d::/35", "4775"}, + {"2400:3680::/32", "45582"}, + {"240a:a134::/32", "142958"}, + {"2600:6c10:f31d::/41", "20115"}, + {"2a04:81c0::/29", "56665"}, + {"2400:6280:114::/48", "132280"}, + {"2406:d500:9::/48", "136557"}, + {"2605:a404:180::/42", "33363"}, + {"2a03:e100::/29", "52144"}, + {"240a:a02c::/32", "142694"}, + {"240e:978:1500::/40", "131325"}, + {"2a06:bdc0:1a40::/29", "62240"}, + {"2604:bb00::/32", "46692"}, + {"2620:129:f003::/48", "393462"}, + {"2a00:4802:2a10::/39", "8717"}, + {"2a01:bca0::/32", "202114"}, + {"2a02:888:de::/39", "47794"}, + {"2a03:3b40::/38", "24971"}, + {"2001:4220:800f::/43", "24835"}, + {"2803:7820::/45", "267708"}, + {"2a10:7b00::/29", "399975"}, + {"240a:a29f::/32", "143321"}, + {"2803:84e0::/32", "27951"}, + {"2806:20d:3230::/45", "32098"}, + {"2001:418:1401:600::/42", "2914"}, + {"2a01:8f00::/32", "197063"}, + {"2a09:58c0::/48", "8426"}, + {"2a0d:2480::/29", "328543"}, + {"2001:559:58f::/48", "33287"}, + {"2001:1388:8a0e::/42", "6147"}, + {"2402:9e80:41::/48", "138558"}, + {"2408:8957:300::/40", "17816"}, + {"240a:aa51::/32", "145291"}, + {"2800:160:216f::/40", "14259"}, + {"2804:8528::/40", "272561"}, + {"2a02:26f7:c445::/46", "20940"}, + {"2404:2f80:ff01::/48", "58495"}, + {"2804:4d4c::/32", "267422"}, + {"2804:7f6c:71::/32", "271687"}, + {"2a0e:c885::/44", "208759"}, + {"2401:d800:92c0::/42", "7552"}, + {"2402:7800:3002::/48", "21775"}, + {"2408:8956:da40::/40", "17622"}, + {"240a:a008::/32", "142658"}, + {"240a:a60d::/32", "144199"}, + {"240e:950:5c00::/31", "4134"}, + {"2606:2000:16::/32", "1616"}, + {"2a02:26f7:df45::/46", "20940"}, + {"2a0e:a940::/32", "210499"}, + {"2c0f:f5e0::/32", "25139"}, + {"2001:559:85cf::/43", "33662"}, + {"2400:7fc0::/40", "55960"}, + {"240a:abbf::/32", "145657"}, + {"2607:f768:4000::/32", "33152"}, + {"2a03:2880:f200::/47", "32934"}, + {"2a0e:97c0:770::/44", "212935"}, + {"2a11:fc80:6277::/48", "20473"}, + {"2001:67c:730::/48", "60754"}, + {"2409:802e:2906::/32", "9808"}, + {"2409:8053:2c02::/48", "56047"}, + {"240e:438:8a20::/43", "140647"}, + {"2804:824c:2000::/32", "272511"}, + {"2a00:1068::/32", "47998"}, + {"2001:67c:2670::/48", "43451"}, + {"2600:1014:b030::/44", "22394"}, + {"2804:3798:10::/32", "266423"}, + {"2401:d800:2050::/42", "7552"}, + {"240a:a3dc::/32", "143638"}, + {"2804:3c::/32", "28576"}, + {"2402:800:522b::/41", "7552"}, + {"2403:8300:e00::/46", "204527"}, + {"2404:bf40:f080::/48", "2764"}, + {"240e:d9:e801::/30", "4134"}, + {"2600:1003:a010::/40", "22394"}, + {"2a00:11c0:3d::/48", "42354"}, + {"2a00:ff80::/29", "8264"}, + {"2a02:f48::/40", "44515"}, + {"2a0b:2180:2::/32", "206502"}, + {"2001:df7:880::/48", "45325"}, + {"2401:d800:640::/42", "7552"}, + {"240a:a6d0::/32", "144394"}, + {"240e:3b3:4c00::/35", "136200"}, + {"2804:14d:b000::/40", "28573"}, + {"2a00:1c78:1::/48", "49340"}, + {"2a0c:4500::/32", "207517"}, + {"2001:559:219::/48", "33657"}, + {"2400:3c20::/32", "18196"}, + {"240a:a2d5::/32", "143375"}, + {"240a:a40f::/32", "143689"}, + {"2a03:23e0::/32", "201688"}, + {"2a05:1c00::/29", "6718"}, + {"2001:559:c08c::/48", "33287"}, + {"2402:4380::/32", "132162"}, + {"2806:2f0:1303::/43", "22884"}, + {"2a00:4802:d10::/40", "8717"}, + {"2a02:df8::/29", "20799"}, + {"2a02:2a90:8110::/33", "702"}, + {"2a03:f80:65::/48", "9009"}, + {"2a0c:b280::/48", "16509"}, + {"2a0c:bcc0::/34", "206476"}, + {"2a0e:ed00::/29", "208839"}, + {"2001:559:8748::/48", "33662"}, + {"240a:a73e::/32", "144504"}, + {"2607:ff28:5003::/36", "62904"}, + {"2804:40bc::/32", "265978"}, + {"2804:45d0::/32", "266951"}, + {"2001:1998:2000::/35", "3456"}, + {"2401:7500:ff1::/48", "133296"}, + {"2610:20:8c20::/44", "3477"}, + {"2a00:1f30::/29", "29081"}, + {"2001:67c:838::/48", "24840"}, + {"240a:a846::/32", "144768"}, + {"2607:fb91:3000::/33", "21928"}, + {"2a02:26f7:e080::/48", "36183"}, + {"2a0d:f8c0::/42", "209122"}, + {"2600:1408:1001::/36", "20940"}, + {"2604:4d40:8000::/36", "13830"}, + {"2a0d:ea80::/29", "43350"}, + {"240a:a2e8::/32", "143394"}, + {"2804:248:3::/45", "28598"}, + {"2a01:c9c0:a1::/45", "8891"}, + {"2a04:4e40:d200::/48", "54113"}, + {"2408:84f3:3620::/43", "17816"}, + {"2409:8c4c:e02::/31", "9808"}, + {"240a:a044::/32", "142718"}, + {"240e:3bd:2c00::/35", "134774"}, + {"2a01:8840:6::/44", "12041"}, + {"2a06:e881:4800::/48", "134666"}, + {"2a09:5500::/29", "49010"}, + {"2a0b:6b82::/32", "42615"}, + {"2001:550:4002::/39", "174"}, + {"2001:1960:12::/48", "26127"}, + {"2605:2180:901::/43", "12422"}, + {"2606:c00:33::/45", "9505"}, + {"2001:559:594::/48", "33650"}, + {"2001:df0:23e::/48", "9752"}, + {"2602:fed2:7305::/48", "53356"}, + {"2a02:d6a0::/30", "20692"}, + {"2a0d:3c40:d498::/48", "49542"}, + {"240a:ab84::/32", "145598"}, + {"2607:fcc8::/33", "10796"}, + {"2a02:26f7:f0::/48", "36183"}, + {"2a0b:9e80::/32", "15576"}, + {"2a0c:5247:e000::/36", "59504"}, + {"2a0d:9b84:1000::/36", "25180"}, + {"2405:55c0:40::/40", "63991"}, + {"2804:14d:7e8d::/41", "28573"}, + {"2606:2680:a000::/48", "7138"}, + {"2804:e30:405::/44", "11338"}, + {"2806:2a0:2f2::/37", "28548"}, + {"2806:2f0:9761::/46", "17072"}, + {"2001:fb0:1075::/48", "55498"}, + {"2403:600:b002::/33", "135391"}, + {"2804:3fd8:8001::/33", "265919"}, + {"2a01:470::/29", "35189"}, + {"2a02:26f7:ef49::/46", "20940"}, + {"2001:dc7:fffe::/47", "24409"}, + {"2400:db00::/32", "23881"}, + {"2800:bf0:3700::/46", "52257"}, + {"2a06:f140::/29", "42034"}, + {"2620:10a:30f1::/44", "10349"}, + {"2804:18:870::/40", "26599"}, + {"2804:7cf4::/32", "271529"}, + {"2a02:26f7:ef88::/48", "36183"}, + {"2a09:db40::/48", "60781"}, + {"2a10:7700::/32", "399975"}, + {"240a:a1ca::/32", "143108"}, + {"2a0a:d00::/29", "207023"}, + {"2a0c:9540::/32", "202516"}, + {"2401:d800:9a10::/42", "7552"}, + {"2607:ffd0:900::/32", "13767"}, + {"2620:11d:9002:700::/48", "33186"}, + {"2804:1c04:fe00::/39", "61633"}, + {"2804:51cc::/32", "268478"}, + {"2a0c:b642:1a01::/48", "60404"}, + {"2c0f:4600::/32", "328839"}, + {"2001:579:f184::/36", "22773"}, + {"2001:4b78::/29", "12637"}, + {"2600:1409:a001::/36", "20940"}, + {"2804:75a8::/32", "271061"}, + {"2408:8957:6500::/40", "17816"}, + {"2001:978:3400::/48", "9009"}, + {"2001:c20:48a6::/48", "9255"}, + {"240a:ad88::/32", "146114"}, + {"2600:100::/28", "32703"}, + {"2602:fd3f::/46", "6939"}, + {"2a02:26f7:c408::/48", "36183"}, + {"2a05:7a80::/29", "204269"}, + {"2a10:9902:730::/46", "211972"}, + {"2001:559:84ab::/48", "22258"}, + {"2602:fdfe::/36", "17177"}, + {"2a02:26f0:b601::/39", "20940"}, + {"2001:678:384::/48", "207207"}, + {"2401:4900:4bdc::/46", "45609"}, + {"2401:d800:9140::/42", "7552"}, + {"240e:982:3400::/36", "4134"}, + {"2804:6d18::/32", "270512"}, + {"2a01:8840:65::/48", "207266"}, + {"2c0f:fa60::/32", "36917"}, + {"2001:559:50e::/48", "33650"}, + {"2600:1017:f800::/44", "22394"}, + {"2804:718c::/32", "270796"}, + {"2a02:2e02:12d0::/42", "12479"}, + {"2600:6c2e:692::/39", "20115"}, + {"2c0f:c00::/32", "328327"}, + {"2001:67c:218c::/48", "12986"}, + {"2001:df4:2880::/48", "7545"}, + {"2405:f600:ba::/47", "45117"}, + {"240a:ac6a::/32", "145828"}, + {"2600:1006:b000::/42", "6167"}, + {"2600:1800::/45", "16552"}, + {"2406:5800:ff00::/48", "45577"}, + {"2409:8915:2600::/40", "56044"}, + {"240a:a067::/32", "142753"}, + {"240a:a5a6::/32", "144096"}, + {"240c:c604::/23", "23910"}, + {"240e:108:11c1::/48", "38283"}, + {"2806:230:1020::/48", "265594"}, + {"2a02:26f7:cc44::/48", "36183"}, + {"2a02:26f7:fa89::/42", "20940"}, + {"2001:4a0::/32", "8134"}, + {"2405:203:886::/47", "55836"}, + {"2600:6c20:a03::/44", "20115"}, + {"2803:580::/32", "61449"}, + {"2a0d:6680::/29", "50782"}, + {"2001:1248:9818::/42", "11172"}, + {"2804:194c::/32", "61785"}, + {"2a0f:c800::/29", "198385"}, + {"2001:559:1e3::/48", "33491"}, + {"240a:a2a0::/32", "143322"}, + {"240a:a5f5::/32", "144175"}, + {"2600:6c10:f055::/46", "20115"}, + {"2607:6b80:41::/44", "13213"}, + {"2800:bf0:a809::/48", "27947"}, + {"2a01:bb24:2::/48", "16509"}, + {"2605:c680::/32", "63251"}, + {"2a00:1728:1d::/48", "44796"}, + {"2404:f300::/43", "56258"}, + {"240a:a37a::/32", "143540"}, + {"2600:1007:b1e0::/43", "22394"}, + {"2a02:26f7:f600::/48", "36183"}, + {"2a03:a200::/32", "43451"}, + {"2401:2f80::/32", "27568"}, + {"2800:484:e300::/40", "14080"}, + {"2a02:2698:400::/38", "50512"}, + {"2a04:5ec7:1::/32", "60239"}, + {"2404:a8:5::/48", "24514"}, + {"2405:f080:1e0a::/47", "136907"}, + {"2409:8c14:e00::/35", "9808"}, + {"240a:a860::/32", "144794"}, + {"2602:feb4:270::/44", "25961"}, + {"2a03:57e0::/32", "60481"}, + {"2a0c:b640:17::/32", "34872"}, + {"2a10:3ec0:32::/48", "198417"}, + {"2001:b60::/32", "20836"}, + {"240e:d6:6800::/37", "133775"}, + {"2600:140b:2400::/48", "31109"}, + {"2804:3dc:a10::/32", "52967"}, + {"2804:27a4::/32", "263914"}, + {"2a0b:20c0:3000::/32", "205766"}, + {"2602:feb4:e0::/44", "25961"}, + {"2a0f:e6c2::/32", "62240"}, + {"2c0f:ec78::/32", "328088"}, + {"240a:a455::/32", "143759"}, + {"2607:f6f0:9001::/48", "394749"}, + {"2620:13d:2060::/46", "209"}, + {"2804:2b64::/32", "265151"}, + {"2804:76a4::/32", "271125"}, + {"2a11:3800::/29", "43624"}, + {"2001:480:631::/35", "668"}, + {"2404:2940:4000::/32", "132257"}, + {"2607:fb28::/44", "9"}, + {"2803:e600:ff01::/40", "18809"}, + {"2001:1a38::/32", "34081"}, + {"2402:93c0::/48", "59073"}, + {"2600:370f:73e8::/37", "32261"}, + {"2001:df2:e900::/48", "137035"}, + {"2409:8959:ce54::/39", "56040"}, + {"2600:1005:b180::/41", "22394"}, + {"2804:2fc8::/32", "262611"}, + {"2a02:26f7:b991::/46", "20940"}, + {"2405:5700::/32", "17882"}, + {"2600:1000:10::/32", "22394"}, + {"2620:13f:7014::/46", "10975"}, + {"2804:7280::/33", "270857"}, + {"2a02:26f7:d885::/46", "20940"}, + {"2a0e:b107:1165::/48", "58057"}, + {"2a05:10c0::/29", "207594"}, + {"240a:afdb::/32", "146709"}, + {"2806:1080:102::/32", "8151"}, + {"2a0a:6d00::/29", "206988"}, + {"2800:310:407::/44", "18678"}, + {"2602:802:b040::/47", "399788"}, + {"2a00:c2e0:101::/32", "30919"}, + {"2a02:26f7:d980::/48", "36183"}, + {"2804:6230::/32", "269281"}, + {"2a02:26f7:e245::/46", "20940"}, + {"2a0b:fd81::/48", "49419"}, + {"2001:253:136::/48", "142102"}, + {"2001:6f8::/38", "3257"}, + {"2408:8459:fe20::/30", "17816"}, + {"2804:1d20:440::/38", "264349"}, + {"2a00:4600::/32", "25451"}, + {"2a0b:6b83:4225::/41", "202562"}, + {"2405:9800:9802::/47", "45458"}, + {"2602:fbfd::/36", "395019"}, + {"2604:1380:4500::/42", "54825"}, + {"2804:104c:c800::/40", "263629"}, + {"2804:5030::/32", "268374"}, + {"2a04:4e40:b810::/42", "54113"}, + {"2a0c:b641:e1::/48", "206877"}, + {"2409:8924:2900::/38", "56046"}, + {"240a:a5c1::/32", "144123"}, + {"240a:aeea::/32", "146468"}, + {"2620:11d:500f::/48", "393732"}, + {"2402:9b00::/40", "45796"}, + {"2402:ca40::/32", "137707"}, + {"2406:840:fbba::/48", "139058"}, + {"240e:44d:4d80::/41", "4134"}, + {"2620:10a:80ab::/48", "394354"}, + {"2804:4254::/32", "267493"}, + {"2a0d:41c0::/32", "204179"}, + {"240e:438:2a20::/43", "140647"}, + {"2a11:4140::/29", "5405"}, + {"240a:a07c::/32", "142774"}, + {"2804:64a0::/32", "269439"}, + {"2a02:1a8::/32", "203865"}, + {"2a05:7640:f40::/42", "174"}, + {"2001:678:a80::/48", "56796"}, + {"2001:1388:5548::/34", "6147"}, + {"2405:1500:91::/42", "58717"}, + {"240a:a882::/32", "144828"}, + {"2604:2d80:be80::/33", "30036"}, + {"2607:ff00:300::/40", "19437"}, + {"2620:15:8000::/48", "26039"}, + {"2c0f:f900::/32", "36864"}, + {"2405:df80::/32", "38719"}, + {"240a:afa9::/32", "146659"}, + {"2a00:1288:f03f::/41", "10310"}, + {"2a02:7b02:2000::/36", "48328"}, + {"2a07:3500:1778::/48", "34373"}, + {"2001:df0:3980::/48", "135942"}, + {"2a0e:97c0:410::/46", "211275"}, + {"2800:160:1658::/45", "14259"}, + {"2804:51c:7400::/36", "262495"}, + {"2804:8044::/32", "271740"}, + {"2a02:26f7:e84c::/48", "36183"}, + {"2405:9800:f000::/48", "45458"}, + {"240e:397:300::/37", "140484"}, + {"2800:8e0:2::/32", "14259"}, + {"2a02:26f7:c384::/48", "36183"}, + {"2401:f540:6::/47", "134094"}, + {"2402:73c0::/32", "131929"}, + {"2402:c100:c001::/34", "23673"}, + {"2a0c:46c0::/29", "29262"}, + {"2001:da8:c800::/45", "24356"}, + {"2405:203:986::/47", "55836"}, + {"2804:30a8::/32", "264967"}, + {"2804:37f0:8100::/36", "266445"}, + {"2a03:1440::/32", "9063"}, + {"2a0b:3200::/31", "201080"}, + {"2001:559:542::/48", "22909"}, + {"2001:df7:f300::/48", "138653"}, + {"2001:44b8:4046::/48", "7545"}, + {"2400:5880::/32", "58983"}, + {"2804:3dc4::/34", "266552"}, + {"2001:559:2d7::/48", "7016"}, + {"2001:559:539::/46", "7922"}, + {"2402:800:41ff::/38", "7552"}, + {"2a05:1083:407e::/48", "209870"}, + {"2a0e:46c4:2d0d::/48", "208753"}, + {"2001:559:c1bb::/45", "33287"}, + {"2409:8907:8120::/38", "24547"}, + {"240e:3b8:1400::/38", "134773"}, + {"2600:1408:8001::/37", "20940"}, + {"2804:1928::/32", "61775"}, + {"2a04:52c0::/32", "60404"}, + {"2a0e:aa06:490::/45", "24239"}, + {"2c0f:f850:155::/46", "327979"}, + {"2001:559:86b3::/45", "7922"}, + {"2401:d800:7220::/41", "7552"}, + {"2408:890c::/31", "17621"}, + {"2602:fff6:f::/48", "29802"}, + {"2001:67c:924::/48", "13030"}, + {"240a:a2ff::/32", "143417"}, + {"2806:2f0:9d01::/46", "17072"}, + {"2a00:139b::/32", "204680"}, + {"2001:559:8001::/48", "26868"}, + {"2001:559:c3f5::/48", "33660"}, + {"2001:678:454::/48", "1257"}, + {"2001:fe8:9000::/48", "24435"}, + {"2001:1868:a10c::/33", "11404"}, + {"2a02:26f7:ec51::/46", "20940"}, + {"2001:559:c0d9::/48", "33489"}, + {"2402:800:9dee::/43", "7552"}, + {"2402:e380:100::/43", "139073"}, + {"2600:2c01:5000::/34", "17378"}, + {"240a:a73c::/32", "144502"}, + {"2605:7900:42::/48", "19133"}, + {"2804:6684::/32", "269565"}, + {"2804:6c9c::/32", "270480"}, + {"2a0d:2406:200::/39", "64425"}, + {"2c0f:eb98::/32", "328594"}, + {"2001:250:7410::/42", "24371"}, + {"2400:5400:10::/48", "18245"}, + {"2404::/35", "17709"}, + {"2409:8054:303e::/47", "9808"}, + {"240a:adf4::/32", "146222"}, + {"2a04:1740::/29", "42159"}, + {"2001:559:c23b::/45", "7922"}, + {"2001:67c:1514::/48", "3257"}, + {"2409:8915:2000::/39", "56044"}, + {"2606:9e80::/32", "32212"}, + {"240a:a22a::/32", "143204"}, + {"2804:14c:3b91::/44", "28573"}, + {"2a01:878::/32", "12302"}, + {"2400:5200:1800::/40", "55410"}, + {"2602:fe10:ff5::/44", "394119"}, + {"2620:101:80f2::/48", "395642"}, + {"2804:54e4::/32", "268676"}, + {"2804:8478::/32", "272262"}, + {"2806:230:6003::/48", "11888"}, + {"2a03:7380:2140::/37", "13188"}, + {"2402:800:9d55::/42", "7552"}, + {"2405:7f00:c1a0::/38", "133414"}, + {"240a:a9b5::/32", "145135"}, + {"2602:fd10:820::/44", "398795"}, + {"2a0f:5707:aae0::/44", "44592"}, + {"2001:13d1:c04::/34", "7303"}, + {"240a:a749::/32", "144515"}, + {"2607:f208:df05::/48", "21499"}, + {"2406:8800:9015::/44", "17465"}, + {"2409:8915:7c00::/32", "56044"}, + {"240e:108:29::/48", "4134"}, + {"2600:141b:3000::/48", "35994"}, + {"2a01:879::/24", "3209"}, + {"2001:c20:840a::/38", "3758"}, + {"2408:8256:3760::/44", "17623"}, + {"2a02:2e02:18a0::/39", "12479"}, + {"2001:559:85c1::/48", "21508"}, + {"2001:fb0:101d::/42", "7470"}, + {"2403:0:208::/37", "4755"}, + {"2409:8087:200::/40", "38019"}, + {"240a:a938::/32", "145010"}, + {"2600:1005:f110::/30", "22394"}, + {"2804:2a0:400::/32", "28272"}, + {"2806:230:302e::/48", "265594"}, + {"2a0c:a640:1::/48", "42298"}, + {"2a0e:aac0::/32", "209974"}, + {"2001:e58::/32", "18266"}, + {"240a:a5e6::/32", "144160"}, + {"240a:ae34::/32", "146286"}, + {"2001:559:127::/48", "7725"}, + {"2804:13dc:8008::/33", "262428"}, + {"2a01:40a0::/32", "62297"}, + {"2001:1248:98e5::/43", "11172"}, + {"2402:e280:4001::/39", "134674"}, + {"2a01:320::/29", "31252"}, + {"2402:800:b7d0::/36", "7552"}, + {"2404:c000::/46", "45147"}, + {"240a:a94c::/32", "145030"}, + {"2a0f:8443::/32", "29182"}, + {"2a10:8003:8000::/27", "8551"}, + {"2001:250:3c14::/46", "138369"}, + {"2001:503:bfb0::/48", "7342"}, + {"240e:938:f901::/44", "4134"}, + {"2600:100d:b0f0::/44", "22394"}, + {"2600:1010:b030::/44", "22394"}, + {"2620:106:7000::/48", "11795"}, + {"2804:254c::/32", "264272"}, + {"2804:5770::/32", "268065"}, + {"2804:7694::/32", "271121"}, + {"2a10:9a80:dc01::/48", "1764"}, + {"2001:559:8508::/46", "33287"}, + {"2408:8956:df00::/40", "17816"}, + {"240a:a950::/32", "145034"}, + {"2804:1594::/32", "263396"}, + {"2a03:6960::/32", "198944"}, + {"2001:559:589::/48", "20214"}, + {"2409:4003:1000::/34", "55836"}, + {"2409:8038:100::/36", "9808"}, + {"240a:aa5c::/32", "145302"}, + {"2604:61c0:1201::/33", "29831"}, + {"2620:48:a000::/48", "32242"}, + {"2801:80:1b70::/48", "266455"}, + {"2a0d:ca40::/29", "8423"}, + {"2001:ac0:c810::/41", "8903"}, + {"2400:fc00:8190::/42", "45773"}, + {"2602:fbae::/40", "400495"}, + {"2605:2400:300::/37", "19528"}, + {"2a0c:e640:1012::/45", "141011"}, + {"2001:67c:27d4::/48", "42177"}, + {"2405:1c0:6431::/45", "55303"}, + {"2409:8057:3028::/47", "9808"}, + {"2605:a401:8b41::/42", "33363"}, + {"2803:2800:6000::/32", "52368"}, + {"2a03:e581:1::/46", "49282"}, + {"2602:fea4::/36", "399584"}, + {"2620:131:4000::/40", "394015"}, + {"2a0f:eb80:10::/32", "47267"}, + {"2408:84f3:e640::/36", "17816"}, + {"2804:5f7c::/32", "269103"}, + {"2a0b:7e00::/38", "198622"}, + {"2405:9800:b900::/38", "133481"}, + {"2409:8c2f:3800::/48", "9808"}, + {"240e:108:2b::/48", "58563"}, + {"2800:8c0::/32", "18840"}, + {"2a05:88c0::/29", "210107"}, + {"2a0c:aa40::/29", "50113"}, + {"2a0d:b4c0::/29", "210101"}, + {"2408:8957:c700::/40", "17816"}, + {"2804:4b00::/32", "267277"}, + {"2804:6918:2000::/33", "270248"}, + {"2a02:26f7:e6c8::/48", "36183"}, + {"2a02:8010::/29", "13037"}, + {"2a11:840:1::/45", "9009"}, + {"2606:c100::/32", "36545"}, + {"2620:12a:8000::/44", "54113"}, + {"2a02:ee80:424a::/45", "3573"}, + {"2001:559:158::/48", "33662"}, + {"2600:c08:2015::/48", "27385"}, + {"2605:a401:89f4::/44", "33363"}, + {"2001:4490:c00::/43", "9829"}, + {"2402:8100:27d0::/47", "45271"}, + {"2620:11a:a0f1::/48", "36040"}, + {"2a03:b500:100::/34", "41135"}, + {"2a06:e600::/29", "43826"}, + {"2001:559:875f::/48", "21508"}, + {"2401:d800:bb50::/42", "7552"}, + {"2602:feda:b66::/48", "146950"}, + {"2804:4f3c::/32", "268314"}, + {"2a02:26f0:9b01::/37", "20940"}, + {"2a0f:df00:dead::/48", "41281"}, + {"2001:67c:2210::/48", "49167"}, + {"2001:4900::/32", "13657"}, + {"2603:c002:1410::/39", "31898"}, + {"2a0b:ea40::/32", "198188"}, + {"2001:559:3fc::/47", "33652"}, + {"2606:7e00:4::/48", "7215"}, + {"2804:1b3:4003::/45", "10429"}, + {"2804:751c::/32", "271024"}, + {"2804:83f4::/32", "52918"}, + {"2a00:9860::/37", "44789"}, + {"2001:502:2eda::/48", "397226"}, + {"2001:4408:5225::/46", "4758"}, + {"2401:4900:3920::/43", "45609"}, + {"2804:3b90::/36", "266157"}, + {"2a01:488:bb06::/48", "39779"}, + {"2001:df1:a100::/48", "136758"}, + {"2804:291c:2000::/33", "263998"}, + {"2a0e:e42::/32", "208638"}, + {"2a0f:7040::/32", "203622"}, + {"2001:559:4a4::/48", "7016"}, + {"2001:1a40:120::/38", "5416"}, + {"2401:a580::/46", "55403"}, + {"2407:680:8000::/33", "7656"}, + {"240e:45c:a500::/40", "140535"}, + {"2600:140f:4e00::/48", "38266"}, + {"2801:1fc::/48", "27951"}, + {"2804:56c0::/32", "268021"}, + {"2806:2f0:61c1::/46", "17072"}, + {"2400:f1::/30", "4766"}, + {"2408:8409:a800::/40", "4808"}, + {"2605:a900:9::/46", "46887"}, + {"2a0f:5707:aa8a::/45", "56382"}, + {"2001:504:40:108::/64", "6461"}, + {"2001:48f8:c000::/34", "11232"}, + {"2a06:b840::/29", "203608"}, + {"2404:3280::/44", "9287"}, + {"2600:6c10:805::/44", "20115"}, + {"2a02:13e0:1::/48", "7018"}, + {"2405:b7c0::/32", "139112"}, + {"2605:60c0::/40", "395846"}, + {"2803:4640::/32", "61506"}, + {"2a01:270:eaeb::/37", "29657"}, + {"2a02:26f7:c6c8::/48", "36183"}, + {"2803:9640::/32", "264605"}, + {"2804:14c:6b82::/41", "28573"}, + {"2a02:88d:403f::/34", "47794"}, + {"2a02:2891:10::/46", "51185"}, + {"2a04:30c0::/32", "20473"}, + {"2a01:6b0::/32", "1820"}, + {"2a03:4b22::/32", "39835"}, + {"2a0d:3341:7000::/36", "36492"}, + {"2001:559:3c9::/48", "33491"}, + {"240a:a6fb::/32", "144437"}, + {"2602:fca7:4::/44", "399318"}, + {"2604:ad40::/32", "395795"}, + {"2a03:6a0::/32", "56925"}, + {"2a04:4e42:201::/37", "54113"}, + {"2001:67c:1878::/48", "3301"}, + {"2001:978:230b::/37", "174"}, + {"2607:f868:8000::/45", "20141"}, + {"2a00:a8a0::/32", "60533"}, + {"240e:5f:6000::/48", "134773"}, + {"2600:9000:2206::/48", "16509"}, + {"2804:14d:2400::/40", "28573"}, + {"2a02:2e02:8ff0::/35", "12479"}, + {"2001:44b8:30a5::/48", "4739"}, + {"2400:1a00::/45", "17501"}, + {"240a:a614::/32", "144206"}, + {"2a00:1b00::/48", "47862"}, + {"2a02:ee80:4022::/45", "3573"}, + {"2a10:fa00::/29", "52193"}, + {"2801:1b:a000::/48", "265700"}, + {"2804:3dbc:8000::/35", "266550"}, + {"2a00:1148::/45", "47764"}, + {"2a07:a343:bc70::/44", "9009"}, + {"2804:15fc::/32", "28359"}, + {"2a02:fe80:11::/44", "30148"}, + {"2a12:4946:1800::/48", "211398"}, + {"2001:470:69::/43", "6939"}, + {"2001:c20:4887::/48", "9255"}, + {"2001:4b26:0:100::/31", "34288"}, + {"2800:160:1d44::/46", "14259"}, + {"2806:2f0:4123::/41", "17072"}, + {"2a0f:76c0::/29", "202709"}, + {"2001:559:8459::/48", "7015"}, + {"2408:8956:eb00::/40", "17816"}, + {"240a:af63::/32", "146589"}, + {"2602:ffc5:10a::/48", "19969"}, + {"2001:1900:2231::/45", "3356"}, + {"240a:a4b0::/32", "143850"}, + {"2a02:26f0:124::/46", "34164"}, + {"240a:a6de::/32", "144408"}, + {"2602:fd2a::/40", "17326"}, + {"2801:80:22f0::/48", "267111"}, + {"2804:7468::/32", "270979"}, + {"2a0a:6040::/33", "61138"}, + {"2a0b:2900:2100::/41", "48582"}, + {"2408:8256:396e::/43", "17623"}, + {"2409:8918::/31", "134810"}, + {"2409:8c28:1201::/39", "56041"}, + {"240a:a640::/32", "144250"}, + {"2604:2f40::/38", "29749"}, + {"2001:550:9f00:1::/46", "174"}, + {"2001:559:83c6::/48", "7015"}, + {"2600:1417:2a::/47", "24319"}, + {"2605:c540:c000::/46", "398378"}, + {"2800:bf0:175::/48", "52257"}, + {"2600:370f:5221::/46", "32261"}, + {"2a02:26f7:b644::/48", "36183"}, + {"2a0f:5707:aaf0::/44", "211301"}, + {"2001:559:c137::/48", "7015"}, + {"2402:ef1c::/31", "7633"}, + {"2404:4fc0::/32", "38047"}, + {"2408:80fa:a000::/33", "17816"}, + {"240a:a913::/32", "144973"}, + {"240a:afc6::/32", "146688"}, + {"2602:ffc5:d10::/44", "7489"}, + {"2a02:26f7:d985::/46", "20940"}, + {"2803:9800:a847::/44", "11664"}, + {"2001:67c:1b8c::/48", "197087"}, + {"2803:bf40::/32", "264764"}, + {"2804:6848::/32", "269682"}, + {"2a0e:aa07:e025::/48", "210903"}, + {"2001:df0:f400::/47", "133657"}, + {"2804:51ac::/32", "268469"}, + {"2a0a:3900::/29", "208425"}, + {"2a0e:2700::/30", "203136"}, + {"2a0e:e7c0::/29", "204348"}, + {"2001:250:3011::/48", "23910"}, + {"2001:559:84b9::/48", "33287"}, + {"2001:67c:182c::/48", "47667"}, + {"2402:f800:ff01::/40", "7602"}, + {"2408:8957:6300::/40", "17816"}, + {"2600:140f:5400::/48", "9498"}, + {"2600:370f:5322::/41", "32261"}, + {"2800:310:40d::/36", "18678"}, + {"2a01:a860::/32", "202212"}, + {"2a02:2e02:1c70::/40", "12479"}, + {"2a03:6e60::/48", "9085"}, + {"2c0f:fdc8::/32", "37049"}, + {"2001:559:824f::/48", "33657"}, + {"2408:84f3:b010::/42", "134543"}, + {"240e:44d:8000::/41", "140345"}, + {"2001:559:e6::/48", "22909"}, + {"2001:df0:9e80::/48", "45926"}, + {"2804:478c::/32", "267061"}, + {"2804:75f4::/32", "271080"}, + {"2001:559:c410::/48", "7922"}, + {"2001:1248:5b07::/42", "11172"}, + {"2409:8051:2::/40", "56047"}, + {"2a0d:3340:c000::/31", "36492"}, + {"2001:1248:8427::/44", "11172"}, + {"2600:1408:2c00::/48", "35994"}, + {"2604:8bc0::/32", "14932"}, + {"2a05:8900:36::/48", "199159"}, + {"2a0e:46c4:1314::/48", "142598"}, + {"2a11:bd80::/32", "16509"}, + {"240a:a448::/32", "143746"}, + {"240a:a51e::/32", "143960"}, + {"240a:a787::/32", "144577"}, + {"2804:774:8600::/39", "52858"}, + {"2804:6564::/32", "269487"}, + {"2402:8400:600::/39", "17820"}, + {"2405:1c0:6631::/45", "55303"}, + {"2409:8a34:aa00::/33", "9808"}, + {"240a:a0a3::/32", "142813"}, + {"2804:36bc::/32", "266368"}, + {"2a02:26f7:d001::/46", "20940"}, + {"2001:559:3f9::/48", "33652"}, + {"2406:cb42::/48", "395092"}, + {"240e:438:440::/38", "4134"}, + {"2602:fbda:700::/44", "149506"}, + {"2606:2800:4a8c::/48", "15133"}, + {"2800:160:12ce::/43", "14259"}, + {"2804:49c:3104::/48", "15201"}, + {"2a10:640::/32", "1680"}, + {"2c0f:eb00:500::/38", "61266"}, + {"2001:67c:2f64::/48", "34393"}, + {"2001:4b20:100:206::/53", "34288"}, + {"2405:8a00:21be::/33", "55824"}, + {"2803:5c80:5001::/48", "64114"}, + {"2a02:26f7:e901::/46", "20940"}, + {"2001:1a11:b9::/48", "8781"}, + {"2400:3b00:30::/48", "18229"}, + {"240e:438:2220::/43", "140647"}, + {"2804:3f48::/32", "266650"}, + {"2001:67c:26ec::/48", "6908"}, + {"2001:df3:8600::/48", "131418"}, + {"2001:ec0:2000::/40", "131293"}, + {"2800:160:1824::/47", "14259"}, + {"2804:8500::/32", "272551"}, + {"2a02:26f7:bf51::/42", "20940"}, + {"2a02:26f7:fa85::/46", "20940"}, + {"2401:a400:5000::/34", "7477"}, + {"2402:e280:1104::/47", "134674"}, + {"2408:84f3:9840::/38", "17816"}, + {"240a:a668::/32", "144290"}, + {"240e:108:1011::/41", "4134"}, + {"2804:2144:307::/44", "52795"}, + {"2a0f:b480::/29", "213152"}, + {"240e:e9:4000::/37", "137702"}, + {"2620:13f:4000::/44", "397386"}, + {"2801:80:1d0::/48", "8075"}, + {"2804:1cc0:6000::/32", "61673"}, + {"2a0f:9a00::/29", "328543"}, + {"2408:8456:b040::/38", "17816"}, + {"240e:3b4:7600::/39", "140313"}, + {"240e:438:4c40::/38", "4134"}, + {"2607:b600:10::/48", "10397"}, + {"2a02:e58:3::/32", "209523"}, + {"2001:df1:1580::/48", "137130"}, + {"2001:4de0:1004::/47", "34343"}, + {"2401:d800:fc0::/42", "7552"}, + {"2403:9800:c049::/45", "133124"}, + {"2803:e600:cac4::/44", "18809"}, + {"2a0f:607:1003::/48", "7480"}, + {"2001:4868:10d::/40", "23148"}, + {"2620:10c:c072::/48", "15009"}, + {"2804:3404::/32", "52539"}, + {"2804:5bc0::/32", "268867"}, + {"2001:1b70:4293::/45", "8147"}, + {"2401:d800:7340::/42", "7552"}, + {"240e:3b8:9200::/36", "140317"}, + {"2804:1054::/32", "53135"}, + {"2a09:2dc3::/29", "30860"}, + {"2c0f:fe38:8::/34", "33771"}, + {"2001:ad0::/33", "3327"}, + {"2800:160:10ab::/43", "14259"}, + {"2804:1c04:8000::/33", "61633"}, + {"2001:559:70a::/48", "33659"}, + {"2801:80:b80::/48", "61841"}, + {"2a06:7c80::/29", "204030"}, + {"2a06:8000::/29", "50673"}, + {"2a0e:f200:164::/48", "30633"}, + {"2a0e:fd45:40f8::/48", "60404"}, + {"2400:f940:11::/46", "45766"}, + {"2804:54d8::/32", "268673"}, + {"2a00:c00:f050::/46", "8373"}, + {"2a00:1050::/32", "12470"}, + {"2a01:6d00:13::/32", "28726"}, + {"2a0e:b107:3f0::/46", "57883"}, + {"2001:480:254::/39", "668"}, + {"2402:800:96a9::/43", "7552"}, + {"2405:57c0:100::/48", "137799"}, + {"2602:ffe4:402::/36", "21859"}, + {"2a0f:4c40::/29", "207923"}, + {"2a0f:e841::/32", "30633"}, + {"2001:df0:23b::/48", "18188"}, + {"2a07:76c0:2::/48", "29107"}, + {"240a:af28::/32", "146530"}, + {"2607:fcd0:100:9a01::/50", "8100"}, + {"2804:7e4::/32", "52865"}, + {"2001:559:c478::/48", "33657"}, + {"2001:67c:2b20::/48", "59467"}, + {"2405:1c0:6841::/46", "55303"}, + {"240a:a2c8::/32", "143362"}, + {"2800:160:2080::/46", "14259"}, + {"2804:3c60::/32", "266207"}, + {"2a0a:e5c1:c00::/40", "213081"}, + {"2401:d800:2890::/42", "7552"}, + {"2401:f200::/32", "9988"}, + {"2407:c280:da02::/48", "138510"}, + {"240a:a486::/32", "143808"}, + {"2a00:9500::/32", "43608"}, + {"2001:19e8:d::/46", "2576"}, + {"2603:f0d0::/26", "397165"}, + {"2620:139:6002::/48", "22600"}, + {"2804:204:245::/46", "28186"}, + {"2a00:f48::/32", "47447"}, + {"2a03:6607::/32", "197838"}, + {"2001:19e8:8001::/48", "4046"}, + {"2406:6cc0:a200::/48", "63515"}, + {"2606:55c0::/32", "399969"}, + {"2a01:8840:e6::/44", "12041"}, + {"2409:8924:8700::/36", "56046"}, + {"2600:140b:11::/46", "20940"}, + {"2607:5580::/32", "18747"}, + {"2620:104:1f::/48", "6356"}, + {"2804:1ca4::/32", "263010"}, + {"2806:2f0:3461::/46", "17072"}, + {"2001:43ff::/48", "328813"}, + {"2401:d800:cf0::/39", "7552"}, + {"2600:6c38:408::/43", "20115"}, + {"2602:fc42:2::/48", "203690"}, + {"2605:ee00:fff0::/44", "29990"}, + {"2a03:8c60::/46", "51920"}, + {"2a03:b000:200::/40", "42695"}, + {"2407:5200::/42", "55915"}, + {"2602:ffc5:10d::/48", "398395"}, + {"2606:2800:4003::/48", "15133"}, + {"2001:559:f7::/48", "21508"}, + {"2001:559:c314::/48", "7016"}, + {"2404:4e00:1::/48", "32787"}, + {"2409:8c28:34b1::/39", "56041"}, + {"240a:aac2::/32", "145404"}, + {"2804:14c:4e9::/43", "28573"}, + {"2804:2050:3abd::/33", "264485"}, + {"2a07:b780::/29", "50601"}, + {"2806:230:1031::/48", "11888"}, + {"2401:8800:800::/40", "17439"}, + {"240a:a707::/32", "144449"}, + {"240e:438:2040::/38", "4134"}, + {"240e:983:204::/37", "4134"}, + {"2602:fe09::/36", "397072"}, + {"2806:2f0:3503::/42", "17072"}, + {"2403:60c0::/32", "134734"}, + {"2a09:f4c0::/32", "205718"}, + {"2a10:2f00:109::/48", "207650"}, + {"2001:559:860e::/48", "33668"}, + {"2001:dcc:1000::/48", "23600"}, + {"2001:1b70:a1::/48", "158"}, + {"2401:d800:f3d2::/37", "7552"}, + {"240e:44d:1b00::/41", "140345"}, + {"2001:df0:25e::/48", "131159"}, + {"2001:579:92f2::/39", "22773"}, + {"2804:1c84:700::/32", "61659"}, + {"2804:3994::/34", "266037"}, + {"2a0a:1000::/29", "31507"}, + {"2001:559:38b::/48", "7725"}, + {"2404:bf40:8141::/48", "7545"}, + {"2602:fbc8::/36", "400413"}, + {"2804:12c4::/32", "263497"}, + {"2001:1980:4444::/48", "32903"}, + {"2400:ca02:f122::/43", "23688"}, + {"240a:a8cd::/32", "144903"}, + {"240a:aecc::/32", "146438"}, + {"240e:37a:2600::/32", "4134"}, + {"2604:fb80::/37", "15128"}, + {"2804:5704::/32", "268038"}, + {"2804:7604:8000::/34", "271084"}, + {"2a0a:da80::/29", "213112"}, + {"2a0e:fd45:2b00::/41", "44103"}, + {"2804:1020::/32", "262544"}, + {"2804:4b78::/32", "267308"}, + {"2a04:4e40:6c00::/48", "54113"}, + {"2801:1a:6800::/48", "13489"}, + {"2804:14c:cc00::/40", "28573"}, + {"2a00:18c8::/29", "33915"}, + {"2a02:ef8::/32", "57793"}, + {"2a0c:1b80::/29", "50873"}, + {"2804:34f8::/32", "265492"}, + {"2a00:5840::/32", "5631"}, + {"2a03:fc0::/32", "60294"}, + {"2a04:4e40:8600::/48", "54113"}, + {"2a0f:e080::/48", "202971"}, + {"2409:8c04:1116::/31", "24547"}, + {"2607:fcd0:100:5900::/50", "8100"}, + {"2801:8e:a000::/36", "11993"}, + {"2a00:e200:104::/48", "198127"}, + {"2a09:a4c7:5000::/34", "208861"}, + {"2a0e:3940:f000::/36", "60767"}, + {"2001:559:1aa::/48", "33287"}, + {"2408:84f3:3220::/43", "17816"}, + {"2600:6c10:f498::/38", "20115"}, + {"2806:230:2012::/48", "265594"}, + {"2a02:d48::/40", "34913"}, + {"2405:1c0:6881::/46", "55303"}, + {"2409:8a51:1100::/30", "56047"}, + {"2a03:c200::/32", "33814"}, + {"2001:930:130::/48", "8386"}, + {"240a:a9d3::/32", "145165"}, + {"2804:1434::/32", "262492"}, + {"2405:42c0::/32", "139379"}, + {"2407:7c0:14::/40", "138128"}, + {"2602:102:1008::/43", "20115"}, + {"2604:b040:3::/48", "26282"}, + {"2803:c9e0::/32", "270012"}, + {"2804:14c:8581::/41", "28573"}, + {"2804:65e0::/32", "269520"}, + {"2a02:26f7:f848::/48", "36183"}, + {"2a0a:3b00::/32", "206497"}, + {"2001:559:85d7::/48", "33662"}, + {"2001:559:c396::/48", "7922"}, + {"2605:3380:4125::/44", "12025"}, + {"2800:860:2::/45", "262197"}, + {"2a02:26f7:bb86::/47", "20940"}, + {"2a0e:97c0:7ec::/46", "270014"}, + {"2804:228c:c000::/48", "264107"}, + {"2a00:fc00:e003::/48", "47266"}, + {"2001:559:438::/48", "7016"}, + {"2600:6c39:632::/44", "20115"}, + {"2806:230:300d::/48", "11888"}, + {"2a00:1fa2:ba00::/40", "42087"}, + {"2403:ecc0::/32", "58750"}, + {"240e:fd:a000::/36", "140308"}, + {"2600:1012:a100::/43", "6167"}, + {"2600:141b:6000::/48", "3257"}, + {"2806:2f0:4661::/46", "17072"}, + {"2a02:26f7:cd46::/48", "36183"}, + {"2409:4014:3000::/26", "55836"}, + {"2604:b000:3000::/32", "14638"}, + {"2607:6b80:3a::/48", "46562"}, + {"2804:4a28::/32", "53194"}, + {"2c0f:f7f8:3::/32", "3356"}, + {"2001:559:865d::/42", "33651"}, + {"240e:438:2620::/43", "140647"}, + {"2404:3d40::/32", "138544"}, + {"2407:4d40:f::/43", "142050"}, + {"2600:140b:4401::/36", "20940"}, + {"2620:88:8001::/48", "46269"}, + {"2800:300:6940::/40", "27651"}, + {"2a00:1990::/32", "34442"}, + {"2a01:c50f:4200::/40", "12479"}, + {"2a02:26f7:c08d::/42", "20940"}, + {"2408:8240::/32", "4837"}, + {"2001:559:c05b::/48", "33657"}, + {"2600:1406:e801::/38", "20940"}, + {"2602:fe92::/36", "13752"}, + {"2803:c0c0::/32", "264759"}, + {"2804:67c8::/32", "269650"}, + {"2409:8904:8540::/38", "24547"}, + {"2607:9800:c109::/43", "15085"}, + {"2a00:c827:7::/44", "60330"}, + {"2a05:7440:c14b::/48", "200165"}, + {"2a06:c040::/31", "61430"}, + {"2a0c:4187:8001::/48", "47596"}, + {"2001:67c:2b10::/48", "60275"}, + {"2408:8957:ad00::/40", "17816"}, + {"2804:2050:facf::/37", "264485"}, + {"2806:2f0:47e1::/36", "17072"}, + {"2a00:1d20::/30", "49544"}, + {"2a12:72c0::/29", "400522"}, + {"2404:bf40:a2c2::/42", "139084"}, + {"2407:9440:2::/41", "141626"}, + {"2607:f3f8::/34", "17378"}, + {"2620:a:d::/48", "36008"}, + {"2804:6254::/32", "269290"}, + {"2001:67c:149c::/48", "44968"}, + {"2402:6d00::/32", "55943"}, + {"2404:f4c0:feff::/48", "139249"}, + {"240a:ad6a::/32", "146084"}, + {"2001:470:bc::/48", "6939"}, + {"2405:6e00:f82e::/48", "133612"}, + {"240a:aa25::/32", "145247"}, + {"240e:97a:2d01::/48", "131325"}, + {"2a03:76e0::/32", "44424"}, + {"2408:8459:8c30::/41", "17622"}, + {"2801:1f0:4026::/41", "3573"}, + {"2804:4fd4::/32", "268352"}, + {"2a02:26f0:5c01::/39", "20940"}, + {"2a02:26f7:c749::/46", "20940"}, + {"2a02:2748::/32", "49779"}, + {"240a:ad77::/32", "146097"}, + {"2600:1419:bc01::/33", "20940"}, + {"2409:8054:18::/48", "9808"}, + {"2605:3380:446b::/48", "12025"}, + {"2a03:d000:8400::/39", "31133"}, + {"2001:388:1031::/45", "7575"}, + {"2001:57a:508::/45", "22773"}, + {"2001:16c0:feff::/29", "31732"}, + {"2a00:15b8::/37", "31122"}, + {"2604:d801::/32", "36372"}, + {"2a02:26f0:9101::/38", "20940"}, + {"2001:559:339::/48", "33659"}, + {"240a:a32c::/32", "143462"}, + {"2602:feb4:2b0::/36", "25961"}, + {"2806:370:8260::/40", "28403"}, + {"240a:a364::/32", "143518"}, + {"2602:ffc8:105::/38", "20278"}, + {"2607:f028::/48", "2158"}, + {"2804:6f48::/32", "270650"}, + {"2a02:26f7:e041::/46", "20940"}, + {"2a0d:cc0::/29", "60501"}, + {"2001:4de0:ac13::/48", "33438"}, + {"2402:9d80:4::/48", "131429"}, + {"2a00:1780:dd00::/34", "8194"}, + {"2a0d:9340:2::/37", "35761"}, + {"2a0e:c886::/44", "208759"}, + {"2001:67c:2050::/48", "199118"}, + {"240e:3bf:2c00::/35", "134774"}, + {"2600:1001:d020::/41", "6167"}, + {"2001:559:8616::/48", "7015"}, + {"2406:840:1110::/48", "139317"}, + {"2804:18::/43", "26599"}, + {"2001:559:35::/48", "33491"}, + {"2620:4d:400f::/43", "62597"}, + {"2a00:4802:2300::/37", "8717"}, + {"2a02:26f7:f481::/46", "20940"}, + {"2a03:fe40::/32", "60793"}, + {"2a0d:3842:1250::/48", "57629"}, + {"240e:3b9:8200::/35", "140316"}, + {"2801:80:2600::/40", "263261"}, + {"2a02:590::/29", "21263"}, + {"2a03:5f80:2:11::/47", "31500"}, + {"2a04:5200:69::/33", "50113"}, + {"2a10:4741:21::/48", "208914"}, + {"2800:484:c00::/40", "10620"}, + {"2a00:1418:8000::/36", "41391"}, + {"2a02:26f7:f405::/46", "20940"}, + {"2a0f:8642:b00b::/48", "212149"}, + {"2001:67c:22e4::/48", "47886"}, + {"2400:8480:1100::/48", "133385"}, + {"2800:bf0:60::/45", "52257"}, + {"2804:8400::/32", "272233"}, + {"2a00:ad04::/30", "41897"}, + {"2a02:2498:8000::/40", "13213"}, + {"240a:a075::/32", "142767"}, + {"240e:44d:1080::/41", "4134"}, + {"2602:ff1d::/36", "31843"}, + {"2800:160:1e07::/43", "14259"}, + {"2804:706c::/32", "270726"}, + {"2a0b:6b84::/44", "200639"}, + {"2001:67c:19c4::/48", "62159"}, + {"2a02:26f7:e085::/46", "20940"}, + {"240e:87c:640::/40", "4134"}, + {"2804:14d:8e00::/40", "28573"}, + {"2804:1b1:e000::/36", "10429"}, + {"2804:7d14::/32", "271537"}, + {"2001:400:211:52::/58", "293"}, + {"2001:559:183::/48", "33652"}, + {"2602:feda:af7::/48", "138919"}, + {"2a11:2e00::/29", "48755"}, + {"2001:559:79f::/48", "7922"}, + {"2408:8956:e900::/40", "17816"}, + {"2603:b0e1::/27", "11796"}, + {"2604:9b00:3c00::/38", "14230"}, + {"2607:f3a0:1a::/35", "23342"}, + {"2803:9800:9024::/43", "11664"}, + {"2001:16d8:b00c::/36", "16150"}, + {"2403:eb40::/32", "138418"}, + {"2407:8100:5::/48", "56308"}, + {"240a:a1d8::/32", "143122"}, + {"2607:a500::/45", "12025"}, + {"2804:75e0::/32", "271075"}, + {"2a02:26f0:c901::/38", "20940"}, + {"2a05:fb47::/32", "208861"}, + {"2001:dce:9401::/40", "23869"}, + {"2001:df0:232::/48", "9355"}, + {"240e:44d:1f00::/41", "140345"}, + {"2600:6c10:ff0e::/42", "20115"}, + {"2607:b380::/32", "19635"}, + {"2803:4a10::/32", "271916"}, + {"2001:559:c232::/48", "33660"}, + {"2607:f428:9330::/41", "40294"}, + {"2620:103:e0f9::/48", "13893"}, + {"2a06:1980::/48", "58321"}, + {"240a:ae9a::/32", "146388"}, + {"2804:24a8::/32", "264236"}, + {"2a02:24d8:ffff::/48", "15945"}, + {"2a0e:5e86::/32", "44176"}, + {"2001:559:8244::/48", "33651"}, + {"2607:f358:22::/45", "18779"}, + {"2800:5d0:214::/36", "52302"}, + {"2001:1440:201::/46", "5401"}, + {"2402:e380:30c::/48", "138351"}, + {"240a:aa44::/32", "145278"}, + {"2803:e340::/32", "264694"}, + {"2804:c00:8100::/34", "52655"}, + {"2a01:620:d000::/34", "12389"}, + {"2a0c:1d00::/43", "39614"}, + {"2a11:b8c0::/29", "204790"}, + {"2001:559:c143::/48", "7015"}, + {"2408:8a05:6002::/32", "17816"}, + {"240a:a8ae::/32", "144872"}, + {"240e:108:2a::/48", "63835"}, + {"2610:b0:40f0::/45", "3573"}, + {"2620:104:6003::/48", "14618"}, + {"2804:2404::/32", "264197"}, + {"2001:67c:920::/48", "62256"}, + {"2401:d800:7700::/42", "7552"}, + {"2402:3bc0::/32", "137225"}, + {"2409:8020:1041::/43", "56046"}, + {"2620:106:e001::/46", "40428"}, + {"2800:40:30::/47", "16814"}, + {"2804:1f54::/32", "272220"}, + {"2804:3de8:e000::/36", "266562"}, + {"2806:2f0:3281::/46", "17072"}, + {"2a05:9f04:25::/40", "210374"}, + {"2001:559:8598::/48", "7922"}, + {"2403:d140::/32", "133187"}, + {"240a:a774::/32", "144558"}, + {"2a02:26f7:3b::/48", "20940"}, + {"2a04:94c0::/30", "202746"}, + {"2a09:4c0:8701::/34", "58057"}, + {"2001:418:1401:5::/62", "2914"}, + {"2001:559:83f9::/48", "7015"}, + {"2405:84c0:fd01::/46", "51089"}, + {"2409:8020:41::/43", "56046"}, + {"2a01:8640:7::/48", "61046"}, + {"2001:559:718::/48", "33657"}, + {"2401:d800:9230::/41", "7552"}, + {"2604:d600:1119::/45", "32098"}, + {"2620:18c::/40", "396507"}, + {"2a0a:d6c0:194::/48", "211447"}, + {"2001:16a0:6001::/31", "39386"}, + {"240e:438:7440::/38", "4134"}, + {"2604:66c0::/32", "6528"}, + {"2804:70f4::/32", "270758"}, + {"2604:cc00:a1::/48", "53292"}, + {"2605:e480::/32", "393398"}, + {"2a03:2480:8033::/48", "200107"}, + {"2a09:1500::/48", "208175"}, + {"2404:b8c0::/32", "55933"}, + {"240a:abcb::/32", "145669"}, + {"2600:40ff:fcfa::/47", "701"}, + {"2620:1d9::/40", "20164"}, + {"2a0c:cb40::/29", "48571"}, + {"2001:448a:3052::/42", "7713"}, + {"2403:300:a17::/42", "714"}, + {"2405:3040::/32", "139370"}, + {"2806:264:5300::/37", "13999"}, + {"2a02:26f7:d348::/48", "36183"}, + {"2001:559:3bf::/48", "33657"}, + {"2001:559:81c4::/47", "7725"}, + {"2804:908:4900::/32", "263047"}, + {"2a01:baa0::/38", "57795"}, + {"2a11:980::/29", "208861"}, + {"2001:df6:780::/48", "141384"}, + {"2402:e380:30e::/48", "138564"}, + {"2600:1407:d801::/34", "20940"}, + {"2606:d380::/32", "7829"}, + {"2804:1dd0::/32", "262332"}, + {"2804:5550::/39", "263067"}, + {"2a01:580::/31", "9136"}, + {"2a02:26f7:e1c8::/48", "36183"}, + {"2a03:5a00:1::/48", "47196"}, + {"2001:678:368::/48", "15935"}, + {"2402:8100:21c8::/45", "55644"}, + {"2404:8d02:3000::/33", "9587"}, + {"240a:a1eb::/32", "143141"}, + {"240e:44d:2000::/42", "140345"}, + {"2602:ffe4:c1f::/42", "21859"}, + {"2804:2968:c000::/34", "264013"}, + {"2a00:1808::/32", "196843"}, + {"2a06:5b40::/29", "59402"}, + {"2001:4e0:1008::/48", "25979"}, + {"2001:559:8065::/48", "33650"}, + {"2001:dc0::/35", "4777"}, + {"2001:1b80::/29", "12912"}, + {"2408:8459:54c0::/38", "17816"}, + {"2600:6c38:10f::/43", "20115"}, + {"2c0f:fdc0::/32", "36930"}, + {"2001:4878:8136::/48", "12222"}, + {"2401:d800:d9c0::/42", "7552"}, + {"240a:a516::/32", "143952"}, + {"2620:12c:f001::/45", "19833"}, + {"2804:1eac::/32", "264443"}, + {"2a02:26f7:f6e2::/47", "20940"}, + {"2a04:ff00:b00b::/48", "200299"}, + {"240e:874::/40", "140638"}, + {"2804:1878:192::/45", "61935"}, + {"2a04:7800::/29", "200697"}, + {"2a0f:607:1500::/48", "210932"}, + {"2001:da8:7021::/44", "24363"}, + {"2804:8180::/32", "272458"}, + {"2001:559:8692::/48", "7922"}, + {"2607:7c00::/32", "21898"}, + {"2607:f990::/32", "16866"}, + {"2804:7af8::/32", "271403"}, + {"2a0e:eac0:2100::/44", "204582"}, + {"2001:44b8:30c9::/46", "7545"}, + {"240a:aa22::/32", "145244"}, + {"2607:fc30:300::/32", "19740"}, + {"2801:15:7000::/48", "269867"}, + {"2803:fbe0:800::/38", "270092"}, + {"2a0e:d602::/32", "50113"}, + {"2001:559:515::/48", "7016"}, + {"2001:559:c526::/44", "7922"}, + {"2400:a300::/32", "18278"}, + {"2402:840:e000::/48", "63646"}, + {"2604:880:4c::/48", "29802"}, + {"2604:a240::/32", "53449"}, + {"2803:2a80:2::/48", "262928"}, + {"2a0e:3040::/32", "49696"}, + {"2001:559:8639::/45", "7015"}, + {"240a:a17b::/32", "143029"}, + {"240a:a30d::/32", "143431"}, + {"2604:d600:154f::/43", "32098"}, + {"2607:f308::/32", "6405"}, + {"2a0b:3080::/43", "206516"}, + {"2001:559:189::/46", "33659"}, + {"2402:800:b340::/42", "7552"}, + {"2405:30c0::/32", "45687"}, + {"2001:1248:5abc::/47", "11172"}, + {"2401:b780:5001::/48", "45410"}, + {"240a:a6cd::/32", "144391"}, + {"2620:171:4a::/45", "715"}, + {"2a02:26f7:f6dd::/46", "20940"}, + {"2c0f:f140::/33", "327700"}, + {"2c0f:f8e8::/32", "37282"}, + {"2001:1618::/32", "15702"}, + {"2400:cb00:a140::/45", "13335"}, + {"2401:3200::/32", "10019"}, + {"2620:20:4000::/48", "32019"}, + {"2803:5440:face::/48", "264738"}, + {"2408:84f3:4840::/38", "17816"}, + {"240e:44d:f80::/41", "4134"}, + {"2001:44b8:3d::/46", "4739"}, + {"2804:5060::/32", "268385"}, + {"2804:784c:8000::/33", "271233"}, + {"2a01:330::/32", "15517"}, + {"2001:559:805c::/48", "33657"}, + {"2a02:560::/32", "13045"}, + {"2806:20d:1a00::/39", "32098"}, + {"2a02:26f7:d4c4::/48", "36183"}, + {"2001:6d0:ffd9::/48", "3316"}, + {"2404:c140:210::/44", "149030"}, + {"2804:2050::/35", "264485"}, + {"2001:908::/30", "8326"}, + {"2001:16e8::/47", "25542"}, + {"2602:807:6005::/48", "399652"}, + {"2804:998:11::/40", "28589"}, + {"2001:559:8269::/48", "33651"}, + {"2400:cb00:470::/46", "13335"}, + {"2602:feda:e36::/48", "147028"}, + {"2607:d00::/32", "14325"}, + {"2804:310:c000::/34", "262688"}, + {"2804:266c::/32", "12989"}, + {"2a00:1c10:40::/44", "50300"}, + {"2a02:26f7:de40::/48", "36183"}, + {"2400:adc7:2000::/39", "9541"}, + {"240a:aa3f::/32", "145273"}, + {"2602:fce1::/48", "395886"}, + {"2804:8068::/32", "271748"}, + {"240e:3b1:1200::/39", "4134"}, + {"2800:160:15aa::/43", "14259"}, + {"2a06:2240::/29", "31726"}, + {"2001:5e0:23::/48", "395394"}, + {"240a:a8b8::/32", "144882"}, + {"2806:230:201d::/48", "11888"}, + {"2001:550:1c01::/39", "174"}, + {"2001:d80::/32", "2687"}, + {"2402:e280:222a::/45", "134674"}, + {"2607:6b80:67::/48", "46562"}, + {"2602:fb9d::/44", "400554"}, + {"2607:a300::/32", "36222"}, + {"2a03:900::/32", "20574"}, + {"2a07:e00:bb::/45", "210083"}, + {"2001:650::/32", "28748"}, + {"240e:983:1603::/40", "4134"}, + {"2600:1005:d170::/34", "22394"}, + {"2800:440:1600::/42", "27738"}, + {"2804:3afc::/32", "266123"}, + {"2a0f:b507::/32", "206313"}, + {"2407:7200::/47", "10098"}, + {"2408:8957:200::/40", "17622"}, + {"240a:abb9::/32", "145651"}, + {"2a00:1288:efc2::/47", "10310"}, + {"2a03:e40::/41", "202042"}, + {"2001:b030:9400::/34", "3462"}, + {"2402:800:7632::/40", "7552"}, + {"2804:4618:2200::/35", "266968"}, + {"2402:800:5155::/42", "7552"}, + {"2804:7b94::/34", "271441"}, + {"2a03:2880:f251::/45", "32934"}, + {"2001:678:bd8::/48", "51895"}, + {"2001:ce0:2901::/32", "3662"}, + {"2400:5740::/32", "23953"}, + {"2804:4bc:4001::/35", "262462"}, + {"2804:243c::/32", "264210"}, + {"2a01:afa0::/32", "47715"}, + {"240a:a8ed::/32", "144935"}, + {"240e:965:9400::/38", "133776"}, + {"2605:a401:8188::/42", "33363"}, + {"2a00:1338::/32", "8878"}, + {"2a00:1390::/32", "34139"}, + {"2a01:4020::/46", "25369"}, + {"2a02:26f7:ba41::/46", "20940"}, + {"2a02:26f7:ec0d::/46", "20940"}, + {"2001:559:c0e3::/48", "33287"}, + {"2001:4d40:8407::/44", "13237"}, + {"2402:800:bb00::/42", "7552"}, + {"2404:bf40:c301::/40", "139084"}, + {"2409:8c85:aa18::/48", "134810"}, + {"2620:30:4000::/48", "1226"}, + {"2804:f58::/32", "28343"}, + {"2804:27f8::/32", "263932"}, + {"2806:2f0:3303::/42", "17072"}, + {"2a02:26f7:bd10::/48", "36183"}, + {"2a03:f300::/29", "47834"}, + {"2001:559:8556::/47", "7015"}, + {"2402:800:9755::/42", "7552"}, + {"2405:2500:25::/46", "136565"}, + {"2806:2f0:99e3::/38", "17072"}, + {"2001:559:8444::/48", "33657"}, + {"240e:44d:4540::/42", "140359"}, + {"2806:230:1308::/37", "265594"}, + {"2a03:e140:34::/48", "43465"}, + {"2001:559:36::/48", "7922"}, + {"2605:4680::/32", "54665"}, + {"2607:5180::/33", "54501"}, + {"2803:a0a0::/40", "266790"}, + {"2804:14d:8400::/40", "28573"}, + {"2804:5640::/35", "267986"}, + {"2a02:d0c0::/31", "39150"}, + {"2001:1250:1000::/44", "22894"}, + {"2400:89c0:6000::/48", "23724"}, + {"2409:8054:55::/44", "56040"}, + {"2600:1406:34::/48", "20940"}, + {"2604:8540:fcc2::/48", "33353"}, + {"2001:5b0:1f00::/40", "6621"}, + {"2403:1480:9000::/36", "49544"}, + {"2408:8957:7200::/40", "17622"}, + {"2a07:8000::/29", "199575"}, + {"2a09:6380::/32", "51269"}, + {"2a0e:3940:d000::/36", "60767"}, + {"2a0e:b107:17f0::/44", "142553"}, + {"2a0f:9e00::/29", "60781"}, + {"2001:67c:910::/48", "209693"}, + {"2405:8f00:edca::/48", "15133"}, + {"240e:3b3:3e00::/33", "140308"}, + {"2600:6c20:118::/47", "20115"}, + {"2001:df0:295::/46", "58516"}, + {"2402:ef30::/30", "7633"}, + {"2804:20fc:601::/46", "264525"}, + {"2a03:b000:400::/40", "42695"}, + {"2a07:4300:972::/48", "209622"}, + {"2a0d:82c7:c::/47", "47787"}, + {"2001:559:8700::/48", "7015"}, + {"2402:8100:26d0::/47", "45271"}, + {"240a:abd9::/32", "145683"}, + {"2404:9540::/48", "24242"}, + {"2409:8054:31::/46", "56040"}, + {"2800:160:144a::/47", "14259"}, + {"2806:2f0:20c2::/48", "17072"}, + {"2a04:4e40:f440::/44", "54113"}, + {"2001:df4:6280::/48", "45553"}, + {"2409:8915:3000::/39", "56044"}, + {"2802:0:1c::/42", "18747"}, + {"2001:df2:ff00::/48", "58537"}, + {"2404:7180:f000::/48", "23848"}, + {"240a:a824::/32", "144734"}, + {"2800:160:1cb2::/44", "14259"}, + {"2803:f0c0::/32", "264773"}, + {"2a02:9b0:28::/33", "35819"}, + {"2a02:26f0:5d::/42", "20940"}, + {"2a0a:e5c0:14::/48", "207996"}, + {"2001:678:8d4::/48", "1205"}, + {"2402:800:7240::/42", "7552"}, + {"2404:2380::/32", "135025"}, + {"2607:ff28:a::/33", "62904"}, + {"2a03:4c40::/32", "197964"}, + {"2001:44b8:3c::/48", "7545"}, + {"2404:f340:8000::/33", "15169"}, + {"2604:7a80:1000::/36", "26548"}, + {"2803:ed40::/32", "264676"}, + {"2804:18:7030::/44", "10429"}, + {"2a00:6780::/29", "57809"}, + {"2a03:2960::/39", "201590"}, + {"2408:8957:c500::/40", "17816"}, + {"240e:183:8103::/40", "4134"}, + {"2602:80e:c002::/45", "198622"}, + {"2606:4700:12::/42", "13335"}, + {"2804:1784:fe03::/43", "263152"}, + {"2001:559:8531::/48", "33491"}, + {"2001:559:c453::/45", "33657"}, + {"2001:678:c64::/48", "207341"}, + {"2001:2000::/48", "3301"}, + {"2405:4802:3190::/42", "18403"}, + {"2600:6c21:60a::/36", "20115"}, + {"2804:48f8::/32", "267156"}, + {"240a:a2c0::/32", "143354"}, + {"2804:2cac:ddde::/34", "265234"}, + {"2804:511c::/32", "268431"}, + {"2001:579:6288::/45", "22773"}, + {"2001:67c:2c70::/48", "9201"}, + {"2001:df0:45d::/48", "132556"}, + {"2001:1b98::/32", "51184"}, + {"2620:13a:c021::/40", "53356"}, + {"2803:2fe0::/32", "271781"}, + {"2a02:2892:32::/48", "51185"}, + {"2a04:1b40::/29", "20861"}, + {"2a05:3400::/29", "200675"}, + {"2a0f:95c0:4000::/34", "208662"}, + {"2001:4478:1313::/40", "4802"}, + {"2403:bf40::/47", "131386"}, + {"2405:10c0::/48", "135905"}, + {"2600:6c38:41c::/41", "20115"}, + {"2804:13dc:ffb0::/41", "262428"}, + {"2a0c:5540:16::/39", "204020"}, + {"240e:438:5a20::/43", "140647"}, + {"2a02:26f7:f4c4::/48", "36183"}, + {"2a05:8880:4::/48", "203589"}, + {"2a06:fd00::/32", "5488"}, + {"2600:c04:1022::/48", "10480"}, + {"2a02:26f7:43::/48", "20940"}, + {"2a02:26f7:cd08::/48", "36183"}, + {"2a10:b4c0::/29", "59852"}, + {"2001:67c:96c::/48", "16095"}, + {"2602:809:9004::/48", "399201"}, + {"2603:c011:a000::/36", "31898"}, + {"2620:13c:1000::/40", "397085"}, + {"2801:bc::/35", "28601"}, + {"2a02:f59::/32", "49409"}, + {"2a07:23c0::/48", "13213"}, + {"2001:559:198::/48", "33652"}, + {"2001:678:47c::/48", "42214"}, + {"2606:8d40::/32", "400209"}, + {"2a02:298::/32", "6908"}, + {"2a0f:7d00::/29", "60781"}, + {"2a12:4940:e710::/35", "211398"}, + {"2001:1248:59b0::/46", "11172"}, + {"240a:a60a::/32", "144196"}, + {"240a:aef7::/32", "146481"}, + {"240e:30d:4a00::/35", "137688"}, + {"2a02:cc40::/29", "2116"}, + {"2401:d800:da20::/41", "7552"}, + {"240e:983:2::/45", "23724"}, + {"2600:2000:3010::/47", "15135"}, + {"2600:6c38:339::/45", "20115"}, + {"2806:230:102d::/48", "11888"}, + {"2a04:2f80::/32", "61157"}, + {"2a07:a342:7000::/36", "56655"}, + {"2001:1388:2f0a::/45", "6147"}, + {"2404:b300:31::/46", "59318"}, + {"240a:a214::/32", "143182"}, + {"2602:fcc6::/36", "394737"}, + {"2804:5418::/32", "268628"}, + {"2a09:bac0:275::/48", "13335"}, + {"2001:559:c201::/48", "7922"}, + {"2409:8020:10a1::/43", "56046"}, + {"2804:45ec::/32", "266955"}, + {"2a05:e40:2400::/29", "59909"}, + {"2001:559:1f4::/48", "33659"}, + {"2a02:26f7:c388::/46", "36183"}, + {"2a04:4e42::/45", "54113"}, + {"2a06:e040:7604::/32", "198507"}, + {"2a0f:e840::/32", "7018"}, + {"2001:da8:a000::/48", "55826"}, + {"2402:5100::/45", "9902"}, + {"2405:7c00:b000::/33", "24028"}, + {"240a:adce::/32", "146184"}, + {"2602:fcd5:10::/47", "399122"}, + {"2804:2bf8::/32", "265185"}, + {"2a02:ff0:600::/40", "12735"}, + {"2408:8956:a600::/40", "17622"}, + {"240e:640:e00::/40", "136197"}, + {"2800:200:e291::/42", "12252"}, + {"2a0a:7d80:9::/48", "35594"}, + {"240a:a90b::/32", "144965"}, + {"2a02:26f7:f045::/46", "20940"}, + {"2001:67c:2994::/48", "62452"}, + {"2600:100f:b1d0::/44", "6167"}, + {"2804:19f8::/32", "61829"}, + {"2806:2f0:8081::/46", "17072"}, + {"2600:1402:6001::/36", "20940"}, + {"2605:a040::/32", "14077"}, + {"2a02:26f7:e3c8::/48", "36183"}, + {"2001:fd8:128::/41", "4775"}, + {"2400:54a0:1010::/48", "34927"}, + {"2401:4900:1d00::/41", "45609"}, + {"240e:60c:7000::/32", "4134"}, + {"2600:1405:2801::/35", "20940"}, + {"240e:438:9040::/38", "4134"}, + {"240e:44d:4980::/41", "4134"}, + {"2600:1f70:6000::/40", "16509"}, + {"2620:124:b000::/47", "32521"}, + {"2800:160:19da::/45", "14259"}, + {"2a04:4e40:1610::/42", "54113"}, + {"2404:e3c0::/32", "134676"}, + {"2800:6d0::/32", "19889"}, + {"2803:7200::/46", "27696"}, + {"2804:9d4:5106::/34", "262996"}, + {"2806:230:3027::/48", "11888"}, + {"2a00:c660::/32", "60341"}, + {"2a0f:e880::/29", "6898"}, + {"2409:8c28:a3c1::/33", "56041"}, + {"2605:cdc0::/48", "398088"}, + {"2804:3f80::/32", "265897"}, + {"2a07:e02:1200::/40", "210083"}, + {"2804:18:7040::/43", "26599"}, + {"2a00:4180:1000::/36", "56665"}, + {"2001:43f8:610::/48", "37419"}, + {"2405:4240:1::/48", "135370"}, + {"2620:a::/48", "36008"}, + {"2620:57:4002::/48", "62831"}, + {"2a02:7900:ff01::/48", "43044"}, + {"2001:67c:20c8::/48", "42836"}, + {"2607:e400::/34", "7459"}, + {"2a02:7d00::/32", "52130"}, + {"2400:f6::/32", "4766"}, + {"2401:4900:4820::/41", "45609"}, + {"2402:800:5b1d::/42", "7552"}, + {"2402:800:9901::/44", "7552"}, + {"2a06:f787:1::/48", "6905"}, + {"2001:250:602f::/48", "23910"}, + {"2001:df3:e500::/48", "135934"}, + {"2604:d600:634::/44", "32098"}, + {"2803:5440:cace::/48", "264738"}, + {"2409:8948:9300::/40", "24445"}, + {"240a:adf9::/32", "146227"}, + {"2a03:e500::/29", "35297"}, + {"2c0f:fec8:9::/41", "37197"}, + {"2607:f858::/44", "4136"}, + {"2a00:1c18:334::/29", "31463"}, + {"2001:da8:212::/47", "23910"}, + {"2408:8957:bf00::/40", "17816"}, + {"2620:10a:801e::/48", "394354"}, + {"2a02:26f7:f689::/46", "20940"}, + {"2001:1bb0::/32", "8342"}, + {"2604:f980:6100::/40", "19957"}, + {"2a09:0:10::/48", "34854"}, + {"2001:579:926c::/40", "22773"}, + {"2001:16a2:82a0::/43", "39386"}, + {"2405:9600::/32", "20940"}, + {"2600:4407:c036::/34", "6130"}, + {"2804:14c:6593::/42", "28573"}, + {"2a03:f80:61::/48", "9009"}, + {"2001:250:6c3a::/45", "23910"}, + {"2402:ef3f::/48", "9430"}, + {"240a:ad84::/32", "146110"}, + {"240e:13:805::/48", "140857"}, + {"2604:3d80:200::/40", "11030"}, + {"2803:e880:8101::/45", "52468"}, + {"2804:7f24::/47", "271669"}, + {"2806:2f0:23e2::/48", "17072"}, + {"2a00:dd8::/48", "31012"}, + {"2a02:aa8::/29", "30892"}, + {"2a02:e980:a0::/45", "19551"}, + {"2a09:6905::/32", "208861"}, + {"2a09:e940::/32", "34762"}, + {"2a0d:4500::/29", "205119"}, + {"2620:171::/48", "715"}, + {"2a03:4bc0:2300::/48", "30893"}, + {"2a04:d3c0::/29", "61155"}, + {"2408:8456:c940::/40", "17816"}, + {"2602:ffc5:108::/48", "20473"}, + {"2605:3380:42fd::/39", "12025"}, + {"2610:b0:40b1::/44", "3573"}, + {"2804:34e8::/32", "265487"}, + {"2001:44b8:10::/46", "7545"}, + {"2401:d800:2950::/42", "7552"}, + {"2405:201:5e00::/34", "55836"}, + {"2406:6940:60::/32", "141047"}, + {"2804:3594::/32", "28240"}, + {"2804:4d94::/32", "268206"}, + {"2a05:8f80::/31", "201722"}, + {"2401:4900:1973::/45", "45609"}, + {"2605:c8c0::/32", "10546"}, + {"2806:230:3029::/48", "11888"}, + {"2a10:cc40:130::/44", "210659"}, + {"2001:559:c430::/48", "33491"}, + {"2406:c00::/32", "45224"}, + {"2607:1280:1170::/44", "394972"}, + {"2800:160:1d47::/44", "14259"}, + {"2a00:1728:2a::/47", "34224"}, + {"2607:f480:9900::/40", "27435"}, + {"2804:14d:448b::/43", "28573"}, + {"2001:678:d2c::/48", "213318"}, + {"2001:4490:fffc::/46", "9829"}, + {"240e:37f:aa00::/39", "140330"}, + {"2620:0:ed0::/48", "22787"}, + {"2804:328::/32", "262868"}, + {"2804:1ae0::/46", "61696"}, + {"2a00:11c0:76::/48", "42473"}, + {"2a0c:6ac0::/32", "213050"}, + {"2401:fd80:9ff::/48", "138177"}, + {"2409:8055:41::/46", "56040"}, + {"2a00:4802:1810::/39", "8717"}, + {"2001:559:8760::/47", "7016"}, + {"2001:559:c11f::/48", "33489"}, + {"2001:559:c20d::/48", "33651"}, + {"2600:1fa0:10c0::/44", "16509"}, + {"2a02:26f7:f840::/48", "36183"}, + {"2a0e:ff40::/29", "207902"}, + {"2001:559:8632::/47", "33651"}, + {"2001:b08:e::/48", "9111"}, + {"2402:1b80:2000::/35", "63956"}, + {"2620:57::/48", "2640"}, + {"2801:1f:2000::/48", "263831"}, + {"2a00:1a60::/32", "15826"}, + {"2a0b:2d40:eeef::/35", "209135"}, + {"240e:3ba:2c00::/35", "134774"}, + {"2600:1406:c801::/37", "20940"}, + {"2804:35f0:5000::/32", "266316"}, + {"2a01:cd00:80f0::/48", "28708"}, + {"2a0e:b107:1910::/47", "211139"}, + {"2001:559:857c::/48", "33659"}, + {"2605:a401:884a::/40", "33363"}, + {"2804:be8::/32", "52841"}, + {"2804:1168:1001::/36", "52904"}, + {"2804:64a8::/32", "269438"}, + {"2a0d:9340::/47", "35761"}, + {"2a0e:b704:4::/48", "210960"}, + {"2001:df0:3840::/48", "149306"}, + {"2804:85e4::/32", "272607"}, + {"2a02:26f7:e98c::/48", "36183"}, + {"2a02:cbf7:101::/32", "61157"}, + {"2402:9e80:58::/48", "139677"}, + {"2403:9800::/47", "4648"}, + {"2607:f110:e410::/42", "21889"}, + {"2801:1c8:300::/48", "14080"}, + {"2a07:3500:19b0::/48", "38915"}, + {"2001:67c:2e5c::/48", "39299"}, + {"2407:c080:1800::/37", "58519"}, + {"2409:8a55:7800::/39", "56040"}, + {"2803:6a0::/32", "266884"}, + {"2001:559:84b4::/48", "33491"}, + {"2407:9d00::/32", "45179"}, + {"2a02:26f7:b845::/46", "20940"}, + {"2a03:2b20:ff::/48", "202077"}, + {"2a10:6747::/44", "210777"}, + {"2001:559:c3f1::/48", "33659"}, + {"2001:44b8:39::/48", "4739"}, + {"240a:a227::/32", "143201"}, + {"2804:314:4011::/45", "61568"}, + {"2001:559:233::/48", "33666"}, + {"2406:f0c0:111::/48", "138654"}, + {"2604:7e00:32::/41", "17378"}, + {"2800:160:1315::/46", "14259"}, + {"2800:310:400::/45", "18678"}, + {"2804:1b10::/32", "61706"}, + {"2a02:26f7:f184::/48", "36183"}, + {"2402:800:3801::/44", "7552"}, + {"2a01:5940::/35", "31034"}, + {"2001:559:82fa::/48", "7015"}, + {"2401:df00::/31", "17916"}, + {"2605:6c80:7::/44", "397373"}, + {"2a02:71a0::/32", "60003"}, + {"2a0c:6380::/29", "24971"}, + {"2001:67c:1b6c::/48", "8767"}, + {"2803:4c60:8::/32", "267845"}, + {"2806:2f0:90a2::/45", "17072"}, + {"2401:4900:38c0::/44", "45609"}, + {"2403:e200:14::/44", "45543"}, + {"2404:3d00:4106::/44", "21433"}, + {"2405:d200::/32", "2907"}, + {"2804:54e0::/32", "268675"}, + {"2a01:9b40::/32", "59554"}, + {"2001:250:5820::/46", "138371"}, + {"2001:df3:7600::/48", "132060"}, + {"2001:1978:803::/48", "54002"}, + {"2800:160:1e93::/45", "14259"}, + {"2804:178c::/32", "263154"}, + {"2804:2e98::/32", "265354"}, + {"2a02:26f0:36::/48", "34164"}, + {"2a0e:97c0:390::/44", "211437"}, + {"2a0f:e6c1::/32", "60781"}, + {"2607:f038:2:1::/44", "21527"}, + {"2406:4a00:1100::/48", "56038"}, + {"240a:a2a2::/32", "143324"}, + {"240e:3bc:1800::/34", "4134"}, + {"2804:3844::/32", "266457"}, + {"2001:df1:bf00::/48", "136773"}, + {"2401:3cc0:201::/37", "137409"}, + {"2600:1480:580e::/37", "20940"}, + {"2607:e300::/32", "40948"}, + {"2607:f1c0:100::/32", "8560"}, + {"2607:fb90:9200::/34", "21928"}, + {"2a0d:d1c0::/32", "209582"}, + {"2001:16a2:c000::/40", "39891"}, + {"240a:adf6::/32", "146224"}, + {"2801:80:810::/48", "263662"}, + {"2804:68d0::/32", "269718"}, + {"2a02:26f0:7d01::/40", "20940"}, + {"2001:559:57e::/48", "33650"}, + {"2001:db0:2800::/35", "17766"}, + {"2405:1e00:ff01::/40", "17771"}, + {"240e:bc0::/21", "4134"}, + {"2607:6b80:38::/48", "9009"}, + {"2803:e600:bc00::/33", "18809"}, + {"2a01:8840:86::/44", "12041"}, + {"2001:559:3f6::/47", "7922"}, + {"2001:559:833c::/48", "33651"}, + {"2402:7d80:7778::/32", "63582"}, + {"2409:896a:8e00::/39", "9808"}, + {"240a:aec4::/32", "146430"}, + {"240e:967:ca00::/39", "133776"}, + {"2607:a800:773::/48", "15695"}, + {"2a02:2148::/31", "1241"}, + {"2a0b:8100::/44", "51559"}, + {"2402:800:37ee::/43", "7552"}, + {"2600:1407:a801::/37", "20940"}, + {"2804:61d0::/32", "269258"}, + {"2a01:41c0::/32", "199092"}, + {"2600:1419:4201::/37", "20940"}, + {"2804:365c::/32", "266343"}, + {"2a01:aa00::/32", "34144"}, + {"2001:559:813f::/48", "20214"}, + {"2001:16b8::/36", "8881"}, + {"240a:a0fb::/32", "142901"}, + {"2600:6c10:64::/46", "20115"}, + {"2604:5500:c000::/34", "19165"}, + {"2a00:1eb8:4000::/35", "8764"}, + {"2a0f:6780::/29", "20766"}, + {"2408:8306::/28", "4808"}, + {"2602:808:1::/46", "25948"}, + {"2a04:2f81:2::/47", "61157"}, + {"2a09:bac0:83::/45", "13335"}, + {"2402:800:3b1d::/42", "7552"}, + {"240e:979:f00::/40", "138950"}, + {"2604:26c0:500::/40", "36815"}, + {"2608:129:b::/48", "27064"}, + {"2a02:26f7:bec5::/46", "20940"}, + {"2001:559:c170::/48", "13367"}, + {"2001:af0::/32", "13036"}, + {"2001:df6:180::/55", "141731"}, + {"2403:a200:999a::/34", "17428"}, + {"2405:203:89b::/45", "55836"}, + {"240a:a750::/32", "144522"}, + {"2620:16d:3000::/32", "7862"}, + {"2a0c:b1c0::/32", "202090"}, + {"2001:500:6d::/46", "30133"}, + {"2620:171:8::/48", "42"}, + {"2803:f420::/32", "265827"}, + {"2600:1001:b0e0::/43", "22394"}, + {"2804:1838::/32", "61925"}, + {"2a00:4802:4a00::/42", "13124"}, + {"2a05:26c0:d2::/29", "201536"}, + {"2405:55c0::/42", "63991"}, + {"2a0f:4200::/29", "207614"}, + {"2404:3d80:400::/32", "61138"}, + {"2800:160:226e::/47", "14259"}, + {"2804:4bb4:200::/39", "267325"}, + {"2804:5930::/32", "268174"}, + {"2806:20d:1601::/45", "32098"}, + {"2a00:b1e0:f001::/48", "60497"}, + {"2400:a040:a::/48", "137995"}, + {"2404:aac0::/32", "131642"}, + {"2405:3c00::/32", "24437"}, + {"2405:6400:4000::/36", "45121"}, + {"2801:14e:1::/45", "27951"}, + {"2804:74b8::/32", "270999"}, + {"2a02:730:4000::/48", "42371"}, + {"2a02:ee80:4176::/47", "2856"}, + {"2a0e:97c0:252::/44", "211685"}, + {"2001:da8:a800::/46", "24370"}, + {"2001:40a0::/32", "8607"}, + {"240e:3b0:9c00::/34", "140310"}, + {"2604:cc00:c::/47", "53292"}, + {"2605:2c40:100::/48", "7979"}, + {"2001:559:8172::/45", "7922"}, + {"2001:1aeb::/29", "13036"}, + {"2401:e900:1000::/48", "23991"}, + {"2620:0:a16::/48", "71"}, + {"2804:5550:facf::/37", "263067"}, + {"2001:1248:8720::/46", "11172"}, + {"2402:800:b370::/40", "7552"}, + {"2403:3d00::/32", "133720"}, + {"2404:bc0:4300::/44", "137735"}, + {"240e:6b0::/36", "134773"}, + {"2607:f428:9111::/48", "19115"}, + {"2a0f:5707:ab26::/48", "41108"}, + {"2c0f:fe90::/32", "36943"}, + {"2403:4940::/32", "135217"}, + {"2605:3380:42f0::/48", "12025"}, + {"2a00:1ba8::/32", "57653"}, + {"2a00:b4c0::/32", "47764"}, + {"2a02:2430:4::/48", "39869"}, + {"2a02:ac80:21::/43", "25145"}, + {"2001:df7:d80::/48", "138754"}, + {"2001:44b8:4001::/42", "4739"}, + {"2401:4d44::/30", "131925"}, + {"2405:6e00:2490::/41", "18291"}, + {"2804:30b8:ac::/43", "28154"}, + {"2804:3ff4::/32", "265924"}, + {"2a02:ca8::/32", "44981"}, + {"2a0e:2c80::/29", "24940"}, + {"2001:559:c3b0::/48", "33657"}, + {"2409:8e4c::/30", "9808"}, + {"240b:4003:1bf::/48", "45102"}, + {"2603:f3b0::/25", "397165"}, + {"2001:df0:213::/48", "17477"}, + {"2001:13b0:9002::/33", "3549"}, + {"2404:bf40:8140::/48", "2764"}, + {"240a:a152::/32", "142988"}, + {"2804:20d8::/32", "264516"}, + {"2a02:26f7:ec5c::/48", "36183"}, + {"2a0e:97c3:4f9::/48", "20473"}, + {"2a02:26f7:54::/48", "36183"}, + {"2a07:ca80::/29", "34762"}, + {"2a11:d540:530::/44", "207586"}, + {"2620:112:d000::/44", "11297"}, + {"2803:e880::/32", "52468"}, + {"2804:43e8::/32", "267598"}, + {"2806:20d:1d18::/46", "32098"}, + {"2a00:e7a0:4::/47", "204167"}, + {"2001:5e0:24::/32", "16713"}, + {"240a:ae8d::/32", "146375"}, + {"2804:da8::/32", "262605"}, + {"2804:1478::/32", "263332"}, + {"2804:489c::/32", "267133"}, + {"2804:73a0::/32", "270927"}, + {"2a02:28b0::/31", "51790"}, + {"2001:559:8422::/48", "22909"}, + {"2001:559:c45f::/42", "21508"}, + {"2408:8956:e400::/40", "17622"}, + {"2409:8027:2c0a::/32", "9808"}, + {"240e:e9:b800::/33", "23650"}, + {"2600:370f:726e::/40", "32261"}, + {"2607:fda8::/32", "6128"}, + {"2a02:ae0::/32", "8375"}, + {"2a12:7440::/29", "400522"}, + {"2001:559:5d0::/48", "7725"}, + {"2400:5900::/32", "18021"}, + {"2407:f800::/38", "38182"}, + {"240e:3b4:1200::/39", "4134"}, + {"2600:1419:7401::/36", "20940"}, + {"2800:590:206c::/48", "16629"}, + {"2a01:8840:1d::/48", "207266"}, + {"2a0f:5707:aad0::/47", "212591"}, + {"2409:8087:2095::/37", "56046"}, + {"2409:8c62:e20::/39", "9808"}, + {"2602:ff8d:1::/48", "14744"}, + {"2606:2800:5140::/48", "15133"}, + {"2607:fed0::/32", "40076"}, + {"2806:2f0:61e3::/38", "17072"}, + {"2a00:ad07:4000::/32", "41897"}, + {"2001:559:8349::/48", "33490"}, + {"2001:67c:960::/48", "212774"}, + {"2404:2440:f0f0::/48", "138521"}, + {"2a05:c4c0::/29", "48635"}, + {"2a0c:a780::/31", "200748"}, + {"2a10:8f00::/29", "39018"}, + {"240a:aa20::/32", "145242"}, + {"2610:a1:1014::/48", "397226"}, + {"2800:160:1386::/43", "14259"}, + {"2804:5a58::/32", "268767"}, + {"2001:559:864d::/48", "7015"}, + {"2606:ae00:bd31::/41", "7287"}, + {"2a03:4260::/29", "201476"}, + {"2409:8028:3800::/40", "56041"}, + {"2803:88e0::/32", "269868"}, + {"2806:2f0:10a0::/48", "22884"}, + {"2001:428:1004::/34", "209"}, + {"2001:67c:1b60::/48", "13040"}, + {"2402:9e80:24::/48", "137219"}, + {"2408:8459:2e50::/35", "17816"}, + {"240e:3b1:2800::/38", "4134"}, + {"2804:404c:67::/35", "265950"}, + {"2804:5b8c::/32", "268854"}, + {"2a03:4b27:e000::/36", "200491"}, + {"2a05:e1c0::/29", "50673"}, + {"2405:1c0:6511::/45", "55303"}, + {"2409:8089::/35", "9808"}, + {"2804:3ab4::/33", "266104"}, + {"2804:5eb0:2000::/32", "269050"}, + {"2a02:26f7:101::/45", "20940"}, + {"2a03:5343::/43", "28723"}, + {"2a04:9a02:1000::/36", "42894"}, + {"2001:559:7f9::/48", "33491"}, + {"2001:678:1c8::/48", "47543"}, + {"2001:67c:61c::/48", "200943"}, + {"2602:fc8e::/40", "399522"}, + {"2800:160:2048::/46", "14259"}, + {"2803:8600::/32", "27759"}, + {"2a02:7f84::/30", "56510"}, + {"2a04:3e00::/47", "56910"}, + {"2001:559:c2b4::/48", "7922"}, + {"2405:9800:9804::/47", "45430"}, + {"2406:4440:f20::/40", "38008"}, + {"2408:8256:3b89::/48", "17816"}, + {"240c:4082::/28", "38365"}, + {"240e:44d:1380::/41", "4134"}, + {"2607:fb10:17::/42", "2906"}, + {"2804:3f10:8201::/33", "262566"}, + {"2804:5534:d000::/37", "268696"}, + {"2a00:6901:c005::/48", "20926"}, + {"2a02:26f7:ed::/48", "20940"}, + {"2600:3c00::/29", "63949"}, + {"2804:91c::/32", "52877"}, + {"2a0c:3e00::/29", "49601"}, + {"2001:550:1906::/38", "174"}, + {"2001:559:83e8::/48", "7922"}, + {"2605:e740:300::/40", "174"}, + {"2803:fbe0:300::/46", "270092"}, + {"2605:3b80:11::/48", "9009"}, + {"2806:2e1::/32", "265505"}, + {"2a10:cc47:100::/40", "39282"}, + {"2001:250:7816::/48", "23910"}, + {"2401:4900:5f70::/44", "45609"}, + {"2402:680::/32", "24213"}, + {"2404:4300::/32", "9930"}, + {"2c0f::/32", "328001"}, + {"2605:4500::/32", "46636"}, + {"2804:81d0::/32", "272478"}, + {"2a02:ab8::/32", "48943"}, + {"2a05:3484:272::/48", "20655"}, + {"2001:c20:c847::/48", "9255"}, + {"2a01:750:2::/32", "6702"}, + {"2a02:26f7:be8c::/48", "36183"}, + {"2402:d1c0::/32", "137816"}, + {"240a:a174::/32", "143022"}, + {"240e:45c::/40", "131285"}, + {"2804:4ec:1700::/32", "28668"}, + {"2001:67c:2d7c::/48", "12859"}, + {"240a:a3f5::/32", "143663"}, + {"2804:29c0:c000::/34", "264032"}, + {"2a00:ff0:8888::/48", "12672"}, + {"2a01:288:4004::/48", "42794"}, + {"2a02:26f7:3d::/48", "20940"}, + {"2a03:5fe0::/30", "43191"}, + {"2a0a:9300:aaaa::/48", "207569"}, + {"2c0f:f6d0:c2::/39", "327687"}, + {"2001:5000:b04::/37", "1273"}, + {"2602:fe34::/36", "397095"}, + {"2604:eb40:6::/48", "6233"}, + {"2a0c:cd00::/32", "41913"}, + {"2001:470:11c::/48", "7175"}, + {"2407:1400:8a::/32", "23752"}, + {"2604:d600:132f::/43", "32098"}, + {"2a02:b90::/32", "16082"}, + {"2602:ff7f::/32", "7219"}, + {"2804:1398::/47", "263541"}, + {"2a00:9e00::/32", "25220"}, + {"2001:559:8246::/48", "33491"}, + {"2401:d800:f7e0::/36", "7552"}, + {"2406:e002:5000::/29", "23655"}, + {"2600:1480:8100::/37", "20940"}, + {"2600:3000:1b05::/34", "13649"}, + {"2804:908:a00::/33", "263047"}, + {"2804:35a0::/32", "266297"}, + {"2a0c:4dc0:1::/48", "47945"}, + {"2409:8087:4500::/36", "9808"}, + {"240a:a6ad::/32", "144359"}, + {"240a:afb5::/32", "146671"}, + {"240e:679:c600::/34", "4134"}, + {"2401:d800:5970::/40", "7552"}, + {"2409:806a:81a::/40", "9808"}, + {"2605:f080::/40", "29869"}, + {"2607:f038:aaad::/33", "21527"}, + {"2001:250:507a::/38", "23910"}, + {"240a:a6e9::/32", "144419"}, + {"2600:1417:3::/45", "20940"}, + {"2804:7940::/32", "271294"}, + {"2a04:6c80::/48", "6718"}, + {"2a10:6300::/29", "399975"}, + {"2001:559:c3ab::/48", "7015"}, + {"2404:8000:16::/42", "17451"}, + {"2804:2ae4:4000::/36", "13878"}, + {"2804:371c:8000::/48", "266390"}, + {"2a04:4940::/29", "60278"}, + {"2001:1248:a4d4::/47", "11172"}, + {"240a:a908::/32", "144962"}, + {"2604:af40::/32", "14099"}, + {"2606:6280::/32", "31914"}, + {"2607:f870::/47", "11992"}, + {"2801:1fe::/40", "19429"}, + {"2a02:b50:8003::/34", "48910"}, + {"2001:559:c29a::/48", "7922"}, + {"240e:37d:ac00::/33", "4134"}, + {"2602:ffa5::/40", "20141"}, + {"2804:6118::/32", "269212"}, + {"2a00:4802:3b0::/36", "8717"}, + {"2403:75c0::/32", "136716"}, + {"2600:5c00::/39", "10838"}, + {"2602:fcc3:ab0::/48", "399135"}, + {"2800:440:186::/48", "27738"}, + {"2803:2a80:800::/48", "262928"}, + {"2a0f:9400:7244::/48", "213163"}, + {"2401:d800:7100::/42", "7552"}, + {"2402:800:5a63::/43", "7552"}, + {"2602:fc23:11c::/46", "8095"}, + {"2607:f6f0:7001::/48", "394749"}, + {"2620:60:8000::/44", "22953"}, + {"2620:149:a13::/48", "714"}, + {"2a07:dd00::/32", "39485"}, + {"2401:d800:7500::/42", "7552"}, + {"240a:ac59::/32", "145811"}, + {"240e:3c0::/21", "4134"}, + {"2602:fdd5::/36", "30685"}, + {"2607:f4d0:a00::/32", "17054"}, + {"2620:11d:3000::/44", "7872"}, + {"2804:3608::/32", "266322"}, + {"2a02:2790::/32", "51796"}, + {"2001:559:549::/48", "33651"}, + {"2408:8256:3194::/48", "17816"}, + {"2409:8904:a540::/38", "24547"}, + {"2600:6c20:a1f::/40", "20115"}, + {"2806:342:fa00::/37", "265591"}, + {"2403:1940:1000::/34", "137935"}, + {"240a:ad32::/32", "146028"}, + {"2804:b18:8d00::/38", "52941"}, + {"2804:3ae4::/32", "266116"}, + {"2a01:666:100::/37", "48951"}, + {"2a02:26f7:be::/48", "36183"}, + {"2a02:2e02:1c00::/43", "12479"}, + {"2a0d:1d00::/29", "212974"}, + {"2001:428:3808::/33", "209"}, + {"2a00:1098::/32", "44684"}, + {"2a00:86c0:2008::/47", "40027"}, + {"2a03:7900::/37", "197731"}, + {"2001:44b8:4047::/48", "4739"}, + {"2401:b00:f000::/36", "17564"}, + {"2600:1480:5100::/36", "20940"}, + {"2a00:66a0::/35", "199270"}, + {"2a01:498:8600::/33", "42018"}, + {"2a03:7020:10::/48", "59625"}, + {"2a0c:f840::/29", "28716"}, + {"2c0f:fa18::/32", "36884"}, + {"2402:4e00:d020::/34", "45090"}, + {"240a:a5eb::/32", "144165"}, + {"240a:aed9::/32", "146451"}, + {"240e:982:3000::/39", "137693"}, + {"2602:fc16:1::/48", "203380"}, + {"2607:fc48:c48::/48", "40009"}, + {"2603:c0f0::/39", "6142"}, + {"2606:5b40::/32", "399821"}, + {"2001:67c:454::/48", "62083"}, + {"2001:ab7::/34", "15594"}, + {"2404:138:4005::/43", "38022"}, + {"2404:bf40:8480::/48", "7545"}, + {"240a:aa12::/32", "145228"}, + {"240e:44d:7f00::/41", "140345"}, + {"2600:1419:6001::/38", "20940"}, + {"2606:ae00:64f8::/36", "7287"}, + {"2620:58:4c00::/48", "6122"}, + {"2804:1e00::/32", "52566"}, + {"2a02:38::/35", "6881"}, + {"2001:c20:488b::/45", "9255"}, + {"2405:1c0:6761::/45", "55303"}, + {"240a:a0fc::/32", "142902"}, + {"240a:acb0::/32", "145898"}, + {"2600:9000:1092::/45", "16509"}, + {"2a00:c98::/34", "28753"}, + {"2a02:26f7:c404::/48", "36183"}, + {"2a0a:2c00::/29", "48506"}, + {"2a0b:e43:1::/48", "205809"}, + {"240a:a356::/32", "143504"}, + {"2602:ffc5:168::/47", "211169"}, + {"2804:204:25b::/42", "28186"}, + {"240a:ab85::/32", "145599"}, + {"2600:6c10:f842::/44", "20115"}, + {"2801:80:3500::/47", "268830"}, + {"2804:4310::/32", "267546"}, + {"2a02:ac80:f01::/35", "25145"}, + {"2a03:5180::/43", "3223"}, + {"2a09:9d40::/48", "44364"}, + {"2001:559:c3a9::/48", "7015"}, + {"240e:44d:3f00::/41", "140345"}, + {"2607:f4a0::/37", "11272"}, + {"2a07:6480::/29", "202812"}, + {"2407:8c0::/32", "134858"}, + {"2600:1405:4001::/35", "20940"}, + {"2a0f:1e00:abc::/48", "30633"}, + {"2001:468:501::/48", "104"}, + {"240a:a2da::/32", "143380"}, + {"2a01:a440:2::/48", "51297"}, + {"2001:7f8:e4::/48", "43431"}, + {"240a:af51::/32", "146571"}, + {"2803:9800:7080::/32", "11664"}, + {"2401:c240:5100::/34", "132847"}, + {"2402:a000::/32", "24211"}, + {"2408:8459:7410::/42", "17623"}, + {"240a:a4d7::/32", "143889"}, + {"2607:f498::/32", "10835"}, + {"2800:160:2531::/40", "14259"}, + {"2a0f:9400:8010::/48", "207393"}, + {"2001:528::/32", "46742"}, + {"2001:df0:bd::/48", "147171"}, + {"2001:df6:1800::/48", "131755"}, + {"2001:19f8::/38", "4927"}, + {"2406:ef40:5::/46", "133811"}, + {"2605:9d80:8021::/48", "4134"}, + {"2a01:8640:9::/48", "42708"}, + {"2a0a:6680:bee::/48", "203500"}, + {"2001:559:2cf::/48", "20214"}, + {"2402:800:96c5::/42", "7552"}, + {"2408:84f3:4240::/37", "17816"}, + {"2a01:64e0::/32", "212144"}, + {"2a04:3f83:4a::/29", "9120"}, + {"2001:559:c1a4::/48", "33287"}, + {"2001:df2:f100::/48", "136862"}, + {"2001:1248:a411::/44", "11172"}, + {"2401:9100::/32", "45918"}, + {"2402:e280:220b::/45", "134674"}, + {"2620:104:a000::/44", "26008"}, + {"2804:28a0::/32", "263971"}, + {"2001:ac8:53::/42", "9009"}, + {"2001:da8:226::/44", "23910"}, + {"2804:533c::/32", "268571"}, + {"2a02:ff0:1200::/40", "12735"}, + {"2a0b:2300::/32", "30962"}, + {"2c0f:5400:1::/48", "328799"}, + {"2001:fd8:168::/40", "4775"}, + {"2402:800:58e0::/44", "7552"}, + {"2a06:9a40:1::/48", "8948"}, + {"2a07:9947::/32", "58305"}, + {"2a10:e7c0::/29", "211423"}, + {"2408:872b:400::/46", "139007"}, + {"2600:1014:f100::/44", "6167"}, + {"2606:340::/32", "398913"}, + {"2804:2c10::/32", "265192"}, + {"2a02:26f7:ddc4::/48", "36183"}, + {"2a07:aa00:2::/48", "3356"}, + {"2602:feda:f010::/44", "147048"}, + {"2606:65c0:20::/48", "399804"}, + {"2a02:26f7:d4ca::/47", "20940"}, + {"2001:559:83ae::/48", "7015"}, + {"2404:f880::/32", "135386"}, + {"2800:bf0:3600::/48", "52257"}, + {"2804:3cb0::/32", "266229"}, + {"2804:6200::/32", "269270"}, + {"2a0f:ea40::/32", "41108"}, + {"2605:a401:8b8e::/42", "33363"}, + {"2a02:26f7:c081::/46", "20940"}, + {"2a07:7f40::/29", "39500"}, + {"2a0c:b641:2da::/48", "209449"}, + {"2001:12f0:a40::/39", "1916"}, + {"240e:90d:f000::/37", "137688"}, + {"2a02:2b60:103::/38", "42947"}, + {"2001:df0:2ca::/48", "17944"}, + {"240a:a863::/32", "144797"}, + {"2804:5964::/32", "268187"}, + {"2806:370:54c0::/43", "28403"}, + {"2a02:2ab0:502::/48", "33442"}, + {"240a:a5f6::/32", "144176"}, + {"240a:af44::/32", "146558"}, + {"2607:7c80:55::/48", "7034"}, + {"2001:559:864e::/48", "33651"}, + {"2602:fc0d::/36", "400181"}, + {"2804:1dfc::/32", "262765"}, + {"2a0b:5740::/29", "205671"}, + {"2402:79c0:100::/44", "7342"}, + {"2a01:ac80::/32", "15958"}, + {"2600:d0d:4000::/30", "20161"}, + {"2804:2e1c::/32", "265324"}, + {"2001:678:558::/48", "50472"}, + {"2401:d800:70c2::/42", "7552"}, + {"2401:d800:98c0::/42", "7552"}, + {"2804:5e48::/33", "269023"}, + {"2a02:e30:f030::/48", "199410"}, + {"2a06:8143:9d9d::/48", "199364"}, + {"2001:d30:4::/32", "4717"}, + {"2a02:1200::/27", "3303"}, + {"2600:1fa0:c0c0::/44", "16509"}, + {"2801:1b:e800::/48", "271940"}, + {"2804:14c:3ba5::/46", "28573"}, + {"2a06:e881:102::/48", "202959"}, + {"2001:1250:bc00::/44", "22894"}, + {"240a:a243::/32", "143229"}, + {"2602:800:900e::/48", "40528"}, + {"2800:550:2a::/48", "20940"}, + {"2603:c0e2::/35", "54253"}, + {"2409:8914:8600::/39", "56044"}, + {"2600:6c39:505::/44", "20115"}, + {"2600:9000:11ba::/47", "16509"}, + {"2603:f170::/24", "397165"}, + {"2a0e:fe80::/48", "47447"}, + {"240a:ade9::/32", "146211"}, + {"2600:380:9600::/39", "7018"}, + {"2602:107:2310::/48", "20115"}, + {"2801:14:4800::/48", "19429"}, + {"2001:df2:6880::/48", "139892"}, + {"240a:a569::/32", "144035"}, + {"2607:fc48:c08::/48", "40009"}, + {"2620:138:3010::/48", "23344"}, + {"2804:1a04::/45", "61832"}, + {"2806:230:600b::/48", "11888"}, + {"2a05:8380::/29", "43645"}, + {"2a12:8d00::/29", "57695"}, + {"2001:5f8:7f07::/44", "5056"}, + {"2a02:26f7:dd44::/48", "36183"}, + {"2a0d:e380::/47", "204460"}, + {"2001:67c:1c::/48", "41884"}, + {"2401:d800:9ad0::/42", "7552"}, + {"2407:1500:20::/48", "58752"}, + {"2409:803c:3100::/37", "9808"}, + {"2800:440:3::/44", "27738"}, + {"2a00:bc40::/32", "198731"}, + {"2a09:3a00:3000::/40", "49981"}, + {"2a0c:a500::/41", "209385"}, + {"2001:678:8a0::/48", "6453"}, + {"2409:8000:1900::/37", "9808"}, + {"2600:1406:bc01::/33", "20940"}, + {"2804:12f8::/32", "263507"}, + {"2a00:1248::/33", "3216"}, + {"2001:559:832a::/48", "33657"}, + {"2607:ce80::/32", "23523"}, + {"2800:bf0:810a::/43", "27947"}, + {"2a05:a880:de10::/48", "20765"}, + {"2001:da8:c80f::/37", "23910"}, + {"2400:e440:400::/41", "42382"}, + {"2403:6d00:cd::/46", "56094"}, + {"2a0b:3dc0::/32", "43359"}, + {"2a0e:b107:1980::/48", "138517"}, + {"2001:4888:a609::/45", "6167"}, + {"2602:ff84:10::/46", "36351"}, + {"2605:bb00:b000::/36", "4213"}, + {"2606:ae00:61c0::/38", "7287"}, + {"2804:3ff0::/32", "265923"}, + {"2a02:730:2000::/48", "33947"}, + {"2a09:5a00::/29", "204760"}, + {"2a11:9a00::/29", "204790"}, + {"2001:559:85ce::/48", "7922"}, + {"2409:8c30:1310::/29", "9808"}, + {"2606:7100:3010::/40", "21581"}, + {"2607:3a80:26::/32", "395100"}, + {"2804:2724::/39", "263879"}, + {"2a12:a5c0::/29", "400522"}, + {"2001:dd8:14::/47", "30133"}, + {"2001:1248:5f78::/40", "11172"}, + {"2409:8904:d240::/42", "24547"}, + {"2604:d600:1214::/47", "32098"}, + {"2620:11c:a000::/47", "26021"}, + {"2600:3402:1100::/37", "4181"}, + {"2a00:1560:17::/44", "29684"}, + {"2a06:5040:5::/48", "4785"}, + {"2404:f4c0:f50f::/48", "134666"}, + {"2408:8956:c000::/40", "17622"}, + {"2803:5c80:6595::/48", "64114"}, + {"2a02:26f7:c248::/48", "36183"}, + {"2001:559:5e7::/48", "33650"}, + {"2400:adda:2000::/31", "9541"}, + {"2604:d600:22::/43", "32098"}, + {"2607:f790:fff7::/44", "12129"}, + {"2001:44b8:4036::/44", "4739"}, + {"2001:4868:905::/48", "7046"}, + {"2400:fc00:4060::/40", "45773"}, + {"2408:877e::/32", "133119"}, + {"2803:8500::/32", "27987"}, + {"2804:12bc::/32", "263495"}, + {"2001:268:852::/32", "2516"}, + {"2001:ac8:80::/45", "9009"}, + {"2400:9800:6026::/47", "139994"}, + {"2402:d400:6::/44", "17762"}, + {"2409:8924:8100::/38", "56046"}, + {"240e:109:8025::/48", "134756"}, + {"2804:5504::/32", "268684"}, + {"2401:8500::/32", "55350"}, + {"2600:1408:9001::/38", "20940"}, + {"2602:ff39::/40", "63318"}, + {"2801:80:720::/48", "263559"}, + {"2603:6037::/32", "11955"}, + {"2607:fef8:ffe4::/48", "18598"}, + {"2a02:ca0::/32", "8587"}, + {"2a02:24e8::/29", "21040"}, + {"2a02:26f7:c4::/48", "36183"}, + {"2001:ee0:c940::/38", "45899"}, + {"2402:800:3101::/44", "7552"}, + {"2408:8256:379b::/48", "17816"}, + {"2c0f:6400::/32", "37088"}, + {"2001:428:c0d::/35", "209"}, + {"2404:bf00::/40", "9303"}, + {"2607:8880::/32", "31798"}, + {"2a09:407:d000::/36", "208861"}, + {"2a0c:ed80::/29", "34191"}, + {"2804:2ea8::/32", "262642"}, + {"2001:250:340e::/47", "138438"}, + {"2001:559:277::/48", "7016"}, + {"2600:1409:4::/46", "35994"}, + {"2408:842a::/29", "4837"}, + {"240a:aace::/32", "145416"}, + {"2600:40f0:110::/42", "701"}, + {"2a02:fae0::/29", "58193"}, + {"2408:8256:3d9b::/48", "17816"}, + {"240e:438:840::/38", "4134"}, + {"2605:b340::/32", "16713"}, + {"2a10:1680::/32", "47935"}, + {"2001:250:6008::/48", "23910"}, + {"2001:678:ce8::/48", "60557"}, + {"2405:1c0:6831::/45", "55303"}, + {"2804:14c:a900::/40", "28573"}, + {"2a00:4800:f0::/39", "8717"}, + {"2a07:8dc0::/31", "35661"}, + {"2406:3001:20:7::/60", "4657"}, + {"2408:8206:84c0::/39", "4808"}, + {"2620:137:e000::/44", "53758"}, + {"2804:18:18f8::/37", "26599"}, + {"2a02:26f7:d800::/48", "36183"}, + {"2001:468:100::/40", "11317"}, + {"240a:a352::/32", "143500"}, + {"2806:230:4029::/48", "11888"}, + {"2a02:26f0:10d::/46", "20940"}, + {"240e:105:f000::/37", "4134"}, + {"2a02:26f0:eb::/45", "20940"}, + {"2a02:2e02:8680::/42", "12479"}, + {"2a0e:b107:f50::/44", "212270"}, + {"2a0f:8040::/29", "6735"}, + {"2001:559:7c0::/48", "33650"}, + {"240a:a540::/32", "143994"}, + {"2800:bf0:82c0::/48", "52257"}, + {"2804:7110:4100::/35", "270764"}, + {"2806:21b:2::/32", "19332"}, + {"2600:9000:10cb::/48", "16509"}, + {"2804:e30:b800::/37", "11338"}, + {"2a11:7a80::/29", "204790"}, + {"2001:16a2:38::/47", "39386"}, + {"2400:7400:66::/44", "38044"}, + {"2602:105::/32", "33588"}, + {"2604:3d00:dc00::/34", "6327"}, + {"2804:1e50::/32", "264421"}, + {"2a05:687:1::/32", "201597"}, + {"240a:a1d6::/32", "143120"}, + {"240e:108:1183::/45", "133775"}, + {"2a02:aa00::/27", "6830"}, + {"2001:559:7c8::/48", "33666"}, + {"2605:5880::/48", "26167"}, + {"2401:d800:d8d0::/42", "7552"}, + {"2a02:26f7:cc49::/42", "20940"}, + {"2a0d:5042::/29", "8315"}, + {"2001:400:a000:8::/61", "293"}, + {"2001:559:584::/48", "33652"}, + {"2409:8c51::/30", "56047"}, + {"2804:4518::/32", "267672"}, + {"240a:a730::/32", "144490"}, + {"2a06:1e00:18::/48", "60695"}, + {"2405:1c0:6211::/45", "55303"}, + {"2408:8256:2e86::/48", "17816"}, + {"2a01:5140::/32", "30830"}, + {"2001:559:c403::/45", "7922"}, + {"2001:980::/29", "3265"}, + {"2400:adc7::/39", "9541"}, + {"2a00:7147:22::/48", "51430"}, + {"2a09:99c0::/48", "212886"}, + {"2001:559:858c::/48", "33650"}, + {"2001:6d0:4004::/48", "60915"}, + {"240a:a7e9::/32", "144675"}, + {"2600:5800::/35", "11426"}, + {"2801:80:1200::/48", "264313"}, + {"2a00:1028::/29", "5610"}, + {"2a02:22a0::/32", "28685"}, + {"2001:628::/37", "1853"}, + {"2001:1248:993f::/41", "11172"}, + {"240a:ab90::/32", "145610"}, + {"2602:ff84:1::/48", "36351"}, + {"2a02:d107:f008::/36", "197155"}, + {"2602:ffe4:c29::/46", "55836"}, + {"2605:9780:20::/47", "36180"}, + {"2804:5020::/32", "268371"}, + {"240e:44d:3540::/42", "140353"}, + {"2600:1406:1c::/42", "20940"}, + {"2a0e:8400::/29", "63023"}, + {"2001:559:285::/48", "33287"}, + {"2001:1520:102::/40", "34011"}, + {"240a:a43e::/32", "143736"}, + {"2804:2b84::/32", "265157"}, + {"2a00:cee3:dcd::/29", "60268"}, + {"2a06:7a07::/43", "49072"}, + {"2a03:2480:71::/44", "41983"}, + {"2a10:7900::/32", "399975"}, + {"2001:559:c381::/48", "7922"}, + {"2001:da8:7016::/44", "24363"}, + {"2001:18e8:3::/44", "87"}, + {"240a:a433::/32", "143725"}, + {"2600:c0e:3010::/48", "26558"}, + {"2607:f2b1::/43", "3614"}, + {"2620:107:9036::/48", "13951"}, + {"2001:559:c497::/48", "7015"}, + {"2001:67c:11d4::/48", "47702"}, + {"2404:bf40:f281::/48", "2764"}, + {"2600:1403:bc01::/29", "20940"}, + {"2a01:5040:1021::/34", "43996"}, + {"2405:7000:2d00::/32", "9354"}, + {"2408:8256:3a81::/43", "17623"}, + {"240e:267:9000::/38", "140337"}, + {"2604:9100:1002::/32", "29944"}, + {"2620:3b::/48", "11488"}, + {"2a01:8840:a9::/48", "207266"}, + {"2a0f:ca87:a::/48", "208850"}, + {"2001:df0:b6::/48", "63510"}, + {"2402:c980:141::/48", "134086"}, + {"2405:4803:d1a::/32", "18403"}, + {"2600:6000:faac::/48", "11351"}, + {"2620:ad:8081::/41", "52127"}, + {"2a0b:6f40::/32", "29582"}, + {"2605:4800:3::/48", "20209"}, + {"2606:5f00::/32", "10396"}, + {"2620:13a:8000::/40", "55037"}, + {"2a01:cd00:8020::/48", "28708"}, + {"2a03:2880:f11d::/46", "32934"}, + {"2a07:8f00::/29", "208828"}, + {"2001:559:c475::/48", "33667"}, + {"2001:678:a04::/48", "3320"}, + {"2409:877d::/30", "9808"}, + {"2409:8914:ac00::/38", "56044"}, + {"2a01:4420::/32", "30936"}, + {"2a02:858:200::/29", "3329"}, + {"2a02:26f7:db0d::/46", "20940"}, + {"2a0b:b87:ffb5::/48", "211571"}, + {"2a0b:bb40::/32", "28725"}, + {"2001:579:9314::/42", "22773"}, + {"240a:a9b2::/32", "145132"}, + {"2a02:26f7:cd8d::/42", "20940"}, + {"2a02:26f7:d80c::/48", "36183"}, + {"2a10:fc40::/29", "57777"}, + {"2604:5500:3000::/38", "19165"}, + {"2001:468:d00::/48", "4600"}, + {"2620:12:4000::/48", "22945"}, + {"2400:cb00:280::/45", "13335"}, + {"2402:800:941d::/41", "7552"}, + {"2600:1417:5::/48", "8966"}, + {"2a00:11c0:11c0::/48", "42388"}, + {"2a02:26f7:c540::/48", "36183"}, + {"2001:250:6431::/38", "23910"}, + {"240a:a5a4::/32", "144094"}, + {"2803:f7e0:1000::/43", "271773"}, + {"2620:11::/44", "7743"}, + {"2a02:26f7:bb40::/48", "36183"}, + {"2001:df0:1e:4001::/48", "38794"}, + {"240a:a240::/32", "143226"}, + {"2804:6620::/32", "269536"}, + {"2a06:5bc0::/32", "56911"}, + {"2600:803:22c::/48", "7046"}, + {"2604:4d40:eff::/48", "213073"}, + {"2605:a404:b0::/47", "33363"}, + {"2403:1300::/34", "56286"}, + {"2610:20:5006::/48", "5744"}, + {"2803:e600:c200::/36", "18809"}, + {"2001:559:447::/48", "22909"}, + {"2409:815d::/22", "9808"}, + {"2001:3c0::/35", "7516"}, + {"2001:550:302::/37", "174"}, + {"2403:c980::/32", "38283"}, + {"2a05:f780:4000::/35", "57667"}, + {"2600:370f:75a5::/46", "32261"}, + {"2604:640:e000::/48", "393562"}, + {"2605:e440::/48", "398343"}, + {"2620:bf::/48", "3423"}, + {"2a02:26f7:d600::/48", "36183"}, + {"2001:1a11:13b::/41", "42298"}, + {"2401:c500:fd00::/48", "54994"}, + {"2602:fed2:7102::/48", "53356"}, + {"2001:ee0:3001::/43", "45899"}, + {"2001:1248:a00e::/48", "11172"}, + {"240a:ad35::/32", "146031"}, + {"2804:7cf8:120::/32", "271530"}, + {"2a05:a740::/29", "42926"}, + {"2a0f:e1c0::/30", "60781"}, + {"2001:559:c168::/48", "33489"}, + {"2600:8807:e000::/28", "22773"}, + {"2800:bf0:a102::/48", "52257"}, + {"2a05:3f00::/29", "201454"}, + {"2a0b:4341:704::/48", "57695"}, + {"240e:108:1061::/44", "4134"}, + {"2804:5658::/32", "267992"}, + {"2604:1380::/40", "54825"}, + {"2001:67c:880::/48", "60454"}, + {"2800:160:159e::/42", "14259"}, + {"2a0a:2200::/29", "35132"}, + {"2800:800:a62::/43", "26611"}, + {"2803:7510::/32", "272033"}, + {"2a0e:b107:24::/48", "39753"}, + {"2a0f:1a40::/29", "60262"}, + {"2001:559:c3a3::/48", "33491"}, + {"2001:678:f94::/48", "211088"}, + {"2405:5740:1::/45", "138277"}, + {"2409:8915:1e00::/39", "56044"}, + {"240a:a9ab::/32", "145125"}, + {"2a11:b340::/29", "204790"}, + {"2001:1248:59d2::/42", "11172"}, + {"2001:500:7d::/48", "42"}, + {"2406:b800::/32", "38652"}, + {"2408:8956:c00::/40", "17622"}, + {"2600:370f:30c3::/42", "32261"}, + {"2800:381:aaab::/35", "10834"}, + {"2001:559:a8::/47", "33287"}, + {"240e:44d:6a40::/42", "140351"}, + {"2602:fc23:150::/48", "8095"}, + {"2801:140::/45", "262249"}, + {"2803:7200:8003::/45", "27696"}, + {"2803:9800:b485::/41", "11664"}, + {"2408:8256:2f96::/48", "17816"}, + {"240e:983:103::/45", "17897"}, + {"2600:6000:f97f::/38", "12271"}, + {"2606:7e00:ff00::/40", "3064"}, + {"2620:106:7008::/48", "11795"}, + {"2804:14c:4785::/41", "28573"}, + {"2a04:1d00::/29", "31343"}, + {"2001:788::/31", "6893"}, + {"2001:df4:9500::/48", "135938"}, + {"2804:6c00::/32", "270439"}, + {"2001:559:75b::/48", "7015"}, + {"2001:559:85e0::/48", "33660"}, + {"240c:c702::/32", "24366"}, + {"2602:feda:f027::/48", "147173"}, + {"2620:e0:c000::/48", "17116"}, + {"2804:4f8:a100::/38", "28263"}, + {"2a00:b704::/30", "51659"}, + {"2405:9940::/32", "46044"}, + {"240e:fb:d000::/34", "4134"}, + {"2a00:5180:1::/46", "44491"}, + {"2a0f:5701:fe11::/39", "206499"}, + {"2400:5800:5::/32", "38712"}, + {"2403:b200:a99c::/48", "38506"}, + {"2409:804e:1100::/36", "9808"}, + {"240e:983:140a::/47", "134768"}, + {"2604:f440:100::/40", "174"}, + {"2620:f3::/48", "30286"}, + {"2804:1784:fe19::/39", "263152"}, + {"2a02:888::/42", "47794"}, + {"2a02:c640::/32", "30836"}, + {"2605:400:500::/40", "19780"}, + {"2620:102:2000::/44", "3659"}, + {"2804:f8c:d000::/34", "263591"}, + {"2001:67c:8dc::/48", "205920"}, + {"2001:15a8::/32", "29449"}, + {"2001:550:100:6::/47", "174"}, + {"2402:8100:2120::/43", "38266"}, + {"240a:a231::/32", "143211"}, + {"2a0f:4ac0::/35", "207921"}, + {"2404:4a00:6a00:1::/37", "45629"}, + {"2a00:1210:fffd::/48", "16223"}, + {"2001:559:47d::/48", "33491"}, + {"2001:4100::/32", "12401"}, + {"2402:9400::/32", "55803"}, + {"2600:6c20:a1a::/45", "20115"}, + {"2803:a9e0::/32", "270014"}, + {"2804:330:3000::/36", "53240"}, + {"2804:4c14:cb01::/35", "267348"}, + {"2a0b:c800:1::/45", "8637"}, + {"2402:e280:214d::/46", "134674"}, + {"2408:8256:e66::/39", "17622"}, + {"2620:104:e000:ae::/40", "1351"}, + {"2803:c00::/32", "262230"}, + {"2804:14c:3d83::/41", "28573"}, + {"2a02:4780:bad::/48", "204915"}, + {"2a0e:fd45:6::/48", "213285"}, + {"2400:fc00:8cf2::/39", "45773"}, + {"240e:67a:e600::/31", "4134"}, + {"2605:2b40::/34", "40763"}, + {"2001:678:754::/48", "202171"}, + {"2402:800:7b80::/42", "7552"}, + {"2803:6ce0:1d00::/33", "269909"}, + {"2a02:1140:100::/40", "43193"}, + {"2a07:45c4::/40", "202521"}, + {"2001:418:8404:2::/35", "2914"}, + {"2001:1ac0::/32", "16004"}, + {"2401:5dc0::/32", "1828"}, + {"2620:107:4008:b9dc::/64", "6461"}, + {"2a06:b600::/29", "42184"}, + {"240a:a054::/32", "142734"}, + {"2610:b0:4170::/32", "3573"}, + {"2001:559:c15f::/48", "33491"}, + {"2001:dcd:22::/48", "16509"}, + {"2605:a401:858e::/41", "33363"}, + {"2804:6fc:21::/32", "28158"}, + {"2a0f:9400:6100::/45", "53356"}, + {"2001:559:c431::/45", "7015"}, + {"2401:4900:4fb0::/41", "45609"}, + {"2804:1e38::/35", "264415"}, + {"2a02:26f7:f944::/48", "36183"}, + {"2001:559:5a::/48", "7725"}, + {"2400:a980:c2::/44", "133111"}, + {"2406:840:1860::/48", "139317"}, + {"2620:4a:a000::/48", "30438"}, + {"2800:160:1437::/41", "14259"}, + {"2803:59a0::/32", "52468"}, + {"2a00:1298:8017::/33", "5578"}, + {"2001:559:279::/48", "33651"}, + {"2001:43f8:1100::/48", "328283"}, + {"2001:4d38::/32", "12850"}, + {"2600:380:f1d2::/47", "64011"}, + {"2803:7200:8006::/47", "27696"}, + {"2804:73e4::/34", "270944"}, + {"2a0a:9340::/48", "60016"}, + {"2001:4b20:100:f002::/36", "34288"}, + {"2401:4340::/32", "132268"}, + {"240a:af91::/32", "146635"}, + {"2600:140b:a401::/36", "20940"}, + {"2a01:c50f:3fc0::/33", "12479"}, + {"2001:559:57::/48", "7016"}, + {"2001:579:28::/40", "22773"}, + {"2600:1008:f100::/44", "6167"}, + {"2602:fbf1:10::/44", "9833"}, + {"2604:b180:290::/44", "21882"}, + {"2804:6e4:c000::/34", "262612"}, + {"2804:2ae0::/32", "53057"}, + {"2a02:6f8::/32", "39287"}, + {"2a0b:4d00:1::/44", "44239"}, + {"2001:250:3c19::/42", "138369"}, + {"2001:67c:2aac::/48", "57508"}, + {"2402:c480:3000::/47", "63916"}, + {"2600:6c38:b0e::/43", "20115"}, + {"2602:fbe9::/36", "51999"}, + {"2604:7a40::/35", "394710"}, + {"2a0b:a8c0:3::/29", "13215"}, + {"2001:559:84ee::/48", "33287"}, + {"2804:2728:705::/43", "263880"}, + {"2a00:1cf8:2000::/35", "44944"}, + {"2804:14d:888::/41", "28573"}, + {"2804:5990::/32", "268710"}, + {"2a02:7a00:2::/48", "199604"}, + {"2a0f:8900::/29", "47787"}, + {"2a0f:a8c0::/29", "209372"}, + {"2400:c700:b001::/33", "55644"}, + {"2401:d800:5b50::/42", "7552"}, + {"2402:a300:13e6::/44", "55427"}, + {"2404:c140:220::/47", "138997"}, + {"2600:1017:9410::/38", "6167"}, + {"2602:802:b000::/44", "397795"}, + {"2804:47b4::/32", "267072"}, + {"2804:7304::/32", "270890"}, + {"2806:217:202::/39", "28394"}, + {"2a00:1da8::/32", "49725"}, + {"2405:9800:b006::/44", "45430"}, + {"240a:a7bb::/32", "144629"}, + {"2600:1406:d801::/37", "20940"}, + {"240a:a491::/32", "143819"}, + {"2606:5d00::/28", "11525"}, + {"2800:160:1d34::/44", "14259"}, + {"2a00:85c0:3::/45", "203315"}, + {"2001:250:2c0c::/48", "23910"}, + {"2001:1248:98c0::/45", "11172"}, + {"2803:ab00:93::/32", "52471"}, + {"2406:3000:a:8::/45", "4657"}, + {"2408:840c:8400::/40", "17621"}, + {"240a:a769::/32", "144547"}, + {"2600:141c:2001::/36", "20940"}, + {"2600:370f:1040::/42", "32261"}, + {"2600:370f:7345::/46", "32261"}, + {"2804:1c4c:1714::/32", "61648"}, + {"2a02:128:5::/48", "62165"}, + {"2a06:5100::/29", "15576"}, + {"2a0f:4440:abcd::/48", "50937"}, + {"2a10:6700:ffff::/29", "399975"}, + {"2a11:aec0::/29", "1239"}, + {"2402:800:31fe::/38", "7552"}, + {"2801:152::/40", "14080"}, + {"2a10:4000::/29", "28701"}, + {"2409:8087:6a0c::/43", "9808"}, + {"2804:18:1010::/44", "10429"}, + {"2a00:8740:110::/46", "49037"}, + {"2a0d:f46::/32", "61157"}, + {"2a10:9a40::/40", "35065"}, + {"2408:8957:1800::/39", "17622"}, + {"2001:678:3c::/48", "197997"}, + {"2400:da00:5ff2::/32", "38365"}, + {"2a02:26f7:e50c::/48", "36183"}, + {"2a06:1b40::/29", "203762"}, + {"2a0b:e440::/29", "211774"}, + {"2402:af00::/32", "38719"}, + {"240a:ab00::/32", "145466"}, + {"240e:44d:5780::/41", "4134"}, + {"2602:fdd2::/36", "21659"}, + {"2603:90f5:d::/48", "11426"}, + {"2a04:4e40:2c00::/48", "54113"}, + {"2400:9700::/45", "24550"}, + {"2402:e740::/32", "9405"}, + {"2409:8055:3045::/42", "56040"}, + {"240a:a70f::/32", "144457"}, + {"2602:fdc2:a::/48", "397720"}, + {"2620:91:4000::/48", "393599"}, + {"2804:53c:c000::/34", "53004"}, + {"2804:1f24:101::/48", "30383"}, + {"2a02:26f0:e01::/35", "20940"}, + {"2a0c:efc0:fff::/29", "206356"}, + {"2001:250:5864::/48", "138371"}, + {"2610:e0:b000::/33", "2572"}, + {"2804:39fc::/32", "266063"}, + {"2a01:4ff:ff01::/48", "24940"}, + {"2a0e:1400::/29", "209106"}, + {"2001:559:523::/48", "7016"}, + {"2600:140b:1801::/38", "20940"}, + {"2800:930::/29", "27717"}, + {"2a02:26f7:dfc9::/46", "20940"}, + {"2a02:cb43:2003::/48", "41179"}, + {"2001:438:fffd:11e::/64", "397601"}, + {"240a:adee::/32", "146216"}, + {"240e:3b7:2200::/37", "136198"}, + {"2600:2c03:1000::/36", "7349"}, + {"2803:bc40:811d::/34", "52468"}, + {"2804:a28::/32", "263026"}, + {"2804:3b88::/32", "266155"}, + {"2a01:690::/29", "16326"}, + {"2803:d220::/32", "266880"}, + {"2a02:9010:46::/42", "3352"}, + {"2402:ef25::/28", "7633"}, + {"2406:daa0:a040::/44", "16509"}, + {"2600:1010:bf00::/44", "6167"}, + {"2a01:4d8::/32", "39122"}, + {"2a02:2770::/32", "196752"}, + {"2001:448a:10b0::/41", "7713"}, + {"2620:cc:8000::/48", "3685"}, + {"2a03:7540::/38", "44406"}, + {"2a0f:eb80:b::/45", "47267"}, + {"2001:3c8:100f::/48", "133919"}, + {"2001:559:c4fa::/48", "33491"}, + {"2001:1248:a50a::/43", "11172"}, + {"2001:4410:3100::/32", "132040"}, + {"2800:160:117f::/40", "14259"}, + {"2800:b70:102::/48", "262191"}, + {"2804:55c8::/32", "267956"}, + {"2a0b:2c40::/29", "205741"}, + {"2a0f:2840::/29", "399975"}, + {"2001:67c:2354::/48", "39287"}, + {"2001:df0:c280::/48", "140096"}, + {"2804:2904::/36", "262588"}, + {"2a02:2498:6d7b::/48", "13213"}, + {"2001:67c:2410::/48", "34755"}, + {"2400:dcc0:a004::/39", "38631"}, + {"2401:d800:2b60::/40", "7552"}, + {"2404:ff80:fff0::/44", "64096"}, + {"240e:44d:1980::/41", "4134"}, + {"2620:0:1cff:dead:beee::1408/127", "29632"}, + {"2a03:ad40:140::/48", "199349"}, + {"2a03:db80:5460::/48", "200943"}, + {"2405:a700:1b::/45", "9498"}, + {"2407:4d40:1::/45", "142050"}, + {"2409:8924:3500::/38", "56046"}, + {"240a:a664::/32", "144286"}, + {"2804:1f42::/32", "270694"}, + {"2a04:500::/29", "198249"}, + {"2001:258::/32", "2510"}, + {"2001:1b28:1000::/32", "8728"}, + {"2409:8904:5d70::/40", "24547"}, + {"2804:1bcc::/32", "61751"}, + {"2a0d:e000::/29", "59682"}, + {"2404:bf40:8042::/40", "139084"}, + {"2800:160:5::/37", "14259"}, + {"2804:12ac::/32", "263491"}, + {"2804:4fa8::/32", "268341"}, + {"2a02:26f7:dcc9::/42", "20940"}, + {"2c0f:f8c0::/32", "37529"}, + {"2604:bf00:211::/32", "17185"}, + {"2402:b400::/33", "45960"}, + {"2409:8050:2800::/47", "56047"}, + {"2804:14c:6f00::/40", "28573"}, + {"2804:14d:fc00::/44", "28573"}, + {"2a02:26f7:c601::/46", "20940"}, + {"2a03:2480:68::/47", "200107"}, + {"2a07:22c1:34::/48", "211776"}, + {"2a0f:9400:7709::/48", "213312"}, + {"2409:8054:5d::/46", "56040"}, + {"240a:ab57::/32", "145553"}, + {"2804:14c:6330::/40", "28573"}, + {"2a02:4e0:2200::/41", "16135"}, + {"2a02:f38:3::/48", "8422"}, + {"2001:559:c379::/46", "33657"}, + {"2001:1a10:5000::/31", "8781"}, + {"2401:d800:9fa0::/41", "7552"}, + {"2402:ee40:2::/48", "17754"}, + {"240e:3bc:c000::/37", "140315"}, + {"2600:1417:d801::/37", "20940"}, + {"2604:2d80:8900::/34", "30036"}, + {"2a02:26f7:cd85::/46", "20940"}, + {"2a03:560:148::/47", "201832"}, + {"2a06:e80:1000::/36", "200699"}, + {"2001:2000:9100::/31", "1299"}, + {"2600:6c20:e26::/44", "20115"}, + {"2402:ef2f:51::/48", "7633"}, + {"240a:a7b9::/32", "144627"}, + {"2605:5c0:c010::/44", "26517"}, + {"2801:118::/48", "264823"}, + {"2a00:7b00:c100::/34", "12338"}, + {"2a01:7e20::/31", "199805"}, + {"2a02:26f7:fac0::/48", "36183"}, + {"2a0f:10c0::/29", "43809"}, + {"2a06:2700::/29", "46516"}, + {"2001:559:8617::/48", "33657"}, + {"2402:8100:266b::/45", "55644"}, + {"240a:a3ed::/32", "143655"}, + {"2804:ed8::/32", "28343"}, + {"2a10:1647:fe00::/39", "206330"}, + {"2001:7a8:800::/47", "34019"}, + {"2600:4c01:ffff::/48", "13760"}, + {"2620:0:57f::/48", "62955"}, + {"2804:1ca0:1000::/40", "61666"}, + {"2001:1a11:bc::/48", "8781"}, + {"2409:8a1e::/31", "24400"}, + {"240a:ada9::/32", "146147"}, + {"2607:2000::/32", "5786"}, + {"2a0e:2704::/30", "203136"}, + {"2c0f:fe08:601::/32", "36914"}, + {"2001:559:86c3::/48", "33287"}, + {"2001:559:c0bd::/46", "33651"}, + {"2001:44c8:2000::/48", "45781"}, + {"2402:8100:21d8::/45", "55644"}, + {"2405:4400::/32", "18001"}, + {"240e:651:3000::/36", "134419"}, + {"2600:1488:a0c1::/39", "20940"}, + {"2a02:2e0:41d::/42", "12306"}, + {"2001:4498::/32", "24218"}, + {"2a01:49e0::/32", "201167"}, + {"2a0e:8a84::/32", "13559"}, + {"240e:980:9900::/40", "4816"}, + {"2804:4ecc::/32", "268283"}, + {"2a02:f78::/32", "42927"}, + {"2a07:5740::/31", "44901"}, + {"2803:5a80::/32", "262931"}, + {"2804:37a0::/32", "266425"}, + {"2001:559:c35e::/48", "7922"}, + {"2400:3200:babb::/33", "37963"}, + {"2804:29f8:1::/48", "264048"}, + {"2a00:1ea0::/47", "35007"}, + {"2a02:26f7:b944::/48", "36183"}, + {"2a0d:2582:100::/44", "211367"}, + {"2a0d:8d80::/32", "31424"}, + {"2a11:6c6:1000::/32", "210916"}, + {"2001:448a:4070::/35", "7713"}, + {"240a:ac53::/32", "145805"}, + {"2600:380:f980::/37", "7018"}, + {"2620:0:2a09::/48", "30343"}, + {"2405:a840:a000::/33", "38562"}, + {"2406:840:e014::/44", "213069"}, + {"2804:2800::/32", "263934"}, + {"2a07:a905:ffeb::/48", "204543"}, + {"2001:310::/34", "4694"}, + {"2001:559:c3fc::/48", "7016"}, + {"2001:948::/42", "2603"}, + {"2404:6180::/32", "58890"}, + {"2408:4009:500::/48", "45102"}, + {"2c0e:7f85::/27", "36974"}, + {"2001:500:135::/48", "396574"}, + {"2001:678:15:8000::/46", "42385"}, + {"2600:1407:7801::/32", "20940"}, + {"2803:e8e0::/32", "269875"}, + {"2a03:d9c0:1000::/48", "3214"}, + {"2001:67c:110::/48", "3274"}, + {"2408:8656:2cfa::/45", "17623"}, + {"2603:a000::/24", "395662"}, + {"2804:14d:b087::/44", "28573"}, + {"2405:8a00:21b6::/44", "55824"}, + {"240a:ab27::/32", "145505"}, + {"2607:fc48:818::/48", "40009"}, + {"2801:172::/48", "14080"}, + {"2a02:970:1385::/43", "44002"}, + {"2a0f:5382:1312::/48", "208135"}, + {"2600:6c38:1b::/45", "20115"}, + {"2605:ea00:1::/48", "26388"}, + {"2a02:188:1005::/33", "31027"}, + {"2a11:7380::/29", "18779"}, + {"2408:8256:1666::/39", "17622"}, + {"2409:8053:2002::/40", "56047"}, + {"2a09:407:3000::/36", "210625"}, + {"2a10:2f01:280::/44", "213092"}, + {"2001:250:802::/48", "138182"}, + {"2401:cf80:600d::/48", "198949"}, + {"2607:fdf0:5ea6::/44", "8008"}, + {"2408:8957:b100::/40", "17816"}, + {"240e:108:21::/48", "4811"}, + {"2804:14c:5d39::/40", "28573"}, + {"2804:76ac::/32", "271127"}, + {"2a02:26f7:ef45::/46", "20940"}, + {"2a02:4780:dead::/48", "204915"}, + {"2a03:4e40::/29", "25447"}, + {"2a03:8e20::/32", "211713"}, + {"2402:3a80:48::/46", "38266"}, + {"2405:6c0:1::/46", "63641"}, + {"2604:bc0:8::/48", "47869"}, + {"2620:1d4:501e::/47", "19726"}, + {"2804:7460::/32", "270977"}, + {"2001:559:8291::/48", "33490"}, + {"240e:44d:7d00::/41", "140345"}, + {"2620:fc:4000::/48", "26206"}, + {"2a02:ae80::/29", "200139"}, + {"2001:559:46b::/48", "20214"}, + {"2001:57a:503::/48", "33438"}, + {"2404:bf40:e007::/40", "139084"}, + {"2804:8474::/43", "272261"}, + {"2804:2ae4:f000::/36", "13878"}, + {"2806:230:4025::/48", "11888"}, + {"2001:559:84de::/48", "33657"}, + {"2408:8459:4650::/36", "17816"}, + {"2804:25ac::/32", "264294"}, + {"2a09:dc40::/29", "197522"}, + {"2605:9780:40::/48", "393544"}, + {"240a:a960::/32", "145050"}, + {"2620:119:5020::/43", "13443"}, + {"2804:1f54:f100::/36", "272220"}, + {"2804:2d98::/32", "61579"}, + {"2a00:8c40:235::/48", "205418"}, + {"2404:4600:4::/47", "9764"}, + {"2620:97:e000::/48", "399663"}, + {"2803:f340:2000::/32", "14754"}, + {"2a0c:a9c7:253::/48", "41740"}, + {"2001:1838:1100::/34", "23352"}, + {"2408:8256:3775::/48", "17816"}, + {"2600:6c0c::/31", "20115"}, + {"2a03:e880::/32", "20686"}, + {"2001:470:be::/48", "12266"}, + {"2409:8008:dd::/36", "24547"}, + {"2804:14e0::/32", "263356"}, + {"2806:2f0:4743::/42", "17072"}, + {"2a04:4e40:5010::/41", "54113"}, + {"2a0c:4300:50::/42", "43722"}, + {"2c0f:f408::/32", "37684"}, + {"2001:df5:d200::/48", "46050"}, + {"240a:aec8::/32", "146434"}, + {"240e:95a:4000::/36", "149178"}, + {"2801:1f0:400a::/42", "3573"}, + {"2804:34f4::/32", "265491"}, + {"2804:5614::/32", "267513"}, + {"2806:230:3000::/48", "265594"}, + {"2001:67c:4b4::/48", "206153"}, + {"2406:2000:1b0::/41", "10310"}, + {"240a:a51f::/32", "143961"}, + {"2804:1580::/32", "263391"}, + {"2a05:6c40::/32", "51012"}, + {"2402:800:5201::/44", "7552"}, + {"2402:800:9863::/43", "7552"}, + {"240a:ac33::/32", "145773"}, + {"2a02:26f0:69::/43", "20940"}, + {"2001:16d8:59::/45", "16150"}, + {"2001:4888:802f::/43", "22394"}, + {"240a:a710::/32", "144458"}, + {"240a:ae93::/32", "146381"}, + {"2800:440:8043::/45", "27738"}, + {"2804:4b30::/32", "267289"}, + {"2a02:1740::/32", "197133"}, + {"2a02:26f7:f38c::/48", "36183"}, + {"2a03:8cc0::/32", "61215"}, + {"240c:c782::/26", "23910"}, + {"2803:f6a0::/32", "266904"}, + {"2a02:2454:8000::/33", "16202"}, + {"2a02:26f7:d244::/48", "36183"}, + {"2001:408::/44", "14793"}, + {"2001:559:550::/48", "7922"}, + {"2001:678:8c::/48", "44358"}, + {"2402:3640::/32", "137248"}, + {"240a:a21c::/32", "143190"}, + {"2602:ffc4:6::/47", "393398"}, + {"2a0e:97c3:769::/48", "20473"}, + {"2001:678:634::/48", "204345"}, + {"2409:896a:ba00::/29", "9808"}, + {"2600:1017:a110::/38", "6167"}, + {"2a03:3f40::/47", "50673"}, + {"2406:7400:40::/46", "24309"}, + {"240e:7:5800::/32", "4134"}, + {"2607:f160::/48", "6167"}, + {"2804:46b0::/32", "267005"}, + {"2a00:e30:a00::/40", "61333"}, + {"2a06:10c0::/29", "198930"}, + {"2001:678:85c::/48", "59801"}, + {"2402:3fc0::/32", "134090"}, + {"240e:570::/28", "4134"}, + {"2804:4bc4::/32", "267328"}, + {"2a01:b5c0::/32", "43160"}, + {"2001:200::/37", "2500"}, + {"2001:448a:20b0::/35", "7713"}, + {"240e:61::/35", "134775"}, + {"2a06:7a06::/48", "44541"}, + {"2c0f:fe28:1::/48", "36951"}, + {"2408:8957:c00::/40", "17622"}, + {"2604:8d40::/32", "23260"}, + {"2a00:4800:3e0::/44", "13124"}, + {"2001:550:9c01::/46", "174"}, + {"2001:559:85a8::/48", "7725"}, + {"2001:1620::/34", "13030"}, + {"2402:e280:2154::/46", "134674"}, + {"2a06:e881:2103::/45", "206479"}, + {"2a0e:7580:4590::/48", "9312"}, + {"2001:12f0:f79::/40", "1916"}, + {"2403:b100::/34", "9989"}, + {"2600:14c0:5::/48", "20940"}, + {"2602:feda:e3f::/48", "147028"}, + {"2803:7200:2001::/32", "27696"}, + {"2a00:ecc0::/32", "16001"}, + {"2a02:26f7:d908::/48", "36183"}, + {"2001:df0:3a00::/48", "17439"}, + {"2403:5180:1::/48", "138038"}, + {"2606:36c0:500::/40", "399342"}, + {"2804:4a1c::/36", "267219"}, + {"2a00:1288:89::/39", "10310"}, + {"2001:559:62::/48", "7922"}, + {"2403:9800:c200::/40", "4648"}, + {"2606:2e00:8014::/44", "36351"}, + {"2804:4b4::/32", "262460"}, + {"2806:2f0:20a0::/48", "17072"}, + {"2a04:4e41:4e::/43", "54113"}, + {"2408:8956:6000::/40", "17622"}, + {"2a06:3080::/30", "25595"}, + {"2a0a:54c0::/31", "62240"}, + {"240a:a8dc::/32", "144918"}, + {"2a01:28:eeef::/35", "39392"}, + {"2607:f298:abb::/48", "7385"}, + {"2a02:26f7:ecc5::/46", "20940"}, + {"2001:15d8::/32", "8657"}, + {"2001:57a:f20b::/45", "22773"}, + {"2620:11a:a035::/48", "43515"}, + {"2804:145c:8890::/37", "263327"}, + {"240a:a58b::/32", "144069"}, + {"2607:fae0:246::/36", "8038"}, + {"2800:160:2b48::/42", "14259"}, + {"2a0a:bcc0::/29", "41001"}, + {"2a0e:6500::/29", "40970"}, + {"2402:8100:2240::/39", "45271"}, + {"240e:438:8840::/38", "4134"}, + {"2a02:ac80:7001::/38", "25145"}, + {"2a09:62c0::/29", "8224"}, + {"2a0f:1204::/31", "60781"}, + {"2602:fc81:1::/46", "399334"}, + {"2001:502:8cc::/48", "397197"}, + {"2001:559:81f9::/48", "7922"}, + {"2408:8207:84c0::/39", "4808"}, + {"240e:44d:3780::/41", "4134"}, + {"2a03:8a40::/32", "48173"}, + {"2c0f:f8e0::/32", "37100"}, + {"2403:82c0::/32", "9924"}, + {"2800:5f0:b022::/33", "22724"}, + {"2a06:71c0::/29", "203968"}, + {"240a:a1b5::/32", "143087"}, + {"240a:ad04::/32", "145982"}, + {"2607:f530::/32", "10996"}, + {"2620:10a:c000::/44", "53708"}, + {"2804:1964::/32", "61792"}, + {"2001:438:4b::/42", "6461"}, + {"2001:678:b28::/48", "204867"}, + {"2600:6c38:868::/43", "20115"}, + {"2605:f440:caff::/34", "54874"}, + {"2607:fb90:c13f::/41", "21928"}, + {"2620:113:1005::/46", "15224"}, + {"2804:bd0::/40", "10670"}, + {"2a06:7bc0::/29", "34373"}, + {"2001:559:7f4::/48", "33662"}, + {"2001:16d8:8f0::/44", "16150"}, + {"240a:a92d::/32", "144999"}, + {"2a0f:85c1:30::/47", "206628"}, + {"2804:38a4:8000::/42", "266491"}, + {"2a00:1288:1ac::/32", "10310"}, + {"2404:5e40:6::/44", "137703"}, + {"240a:ac4b::/32", "145797"}, + {"2804:2bc:200::/32", "262832"}, + {"2c0f:f698:f003::/44", "37693"}, + {"2600:6c38:1bd::/41", "20115"}, + {"2001:df7:7c80::/48", "140156"}, + {"2402:800:5ac5::/43", "7552"}, + {"2605:9200::/32", "36394"}, + {"2620:11a:a026::/44", "43515"}, + {"2a02:13a0::/32", "12519"}, + {"2a02:7842::/31", "47816"}, + {"2800:bf0:b0::/48", "27947"}, + {"2801:14:a000::/48", "61455"}, + {"2a0f:bf00:40::/42", "208069"}, + {"2001:67c:23d8::/47", "48151"}, + {"2603:c0e8:1000::/38", "1218"}, + {"2a02:500:6000::/32", "5538"}, + {"2a03:47c0::/35", "21277"}, + {"2a07:71c0::/29", "202918"}, + {"2001:559:2c7::/44", "33287"}, + {"2001:4998:128::/41", "10310"}, + {"2804:7f8c:20::/35", "271695"}, + {"2a02:ca00::/29", "41307"}, + {"2a03:d540::/32", "50904"}, + {"2001:559:8104::/48", "33287"}, + {"2600:140f:e400::/48", "9498"}, + {"2620:119:30::/48", "36692"}, + {"2620:119:35::/48", "36692"}, + {"2804:8100::/32", "262306"}, + {"2001:559:841d::/48", "33657"}, + {"2001:559:85a1::/48", "7922"}, + {"2001:559:c1e0::/48", "33651"}, + {"2001:678:94c::/48", "30962"}, + {"2402:c480:7000::/48", "63916"}, + {"2804:4544:8000::/40", "266915"}, + {"2a01:6a8::/32", "34554"}, + {"2400:dcc0:ae04::/39", "38631"}, + {"2607:a500:d::/32", "12025"}, + {"2a01:c50f:b000::/40", "12479"}, + {"2a02:26f0:4b01::/37", "20940"}, + {"2001:559:8100::/48", "33659"}, + {"2001:df1:b401::/48", "132458"}, + {"2804:161c:fc00::/48", "263268"}, + {"2a07:6bc0::/29", "197451"}, + {"2a0f:5707:af0f::/48", "211358"}, + {"2405:2500:65::/48", "136565"}, + {"2600:1409:12::/48", "20940"}, + {"2620:e:2000::/48", "30546"}, + {"2620:1ec:90a::/47", "8075"}, + {"2804:66c8:c000::/34", "269582"}, + {"2a00:b420::/32", "60478"}, + {"2001:559:83ba::/48", "33651"}, + {"2604:f140::/32", "22413"}, + {"2c0f:fad8::/40", "37019"}, + {"2001:559:8316::/48", "33652"}, + {"2001:67c:1ba0::/48", "8445"}, + {"2402:800:be10::/42", "7552"}, + {"2a02:582:1c00::/33", "6799"}, + {"2a05:d840::/29", "200994"}, + {"2001:559:846a::/48", "33657"}, + {"2001:4220:8000::/44", "24835"}, + {"2400:8200::/32", "45061"}, + {"2402:800:381d::/42", "7552"}, + {"2409:8a06::/28", "9808"}, + {"2800:68:12::/47", "61468"}, + {"2803:a5a0::/32", "267728"}, + {"2a01:358:4016::/44", "9121"}, + {"2001:559:c461::/48", "33659"}, + {"240e:397:2700::/26", "4134"}, + {"2804:14d:aca1::/41", "28573"}, + {"2a06:8401:3::/29", "198463"}, + {"2001:bf7:1330::/41", "44194"}, + {"2001:41b0::/32", "12741"}, + {"2401:d800:98f0::/39", "7552"}, + {"2402:3800:dc04::/34", "7503"}, + {"2603:c010:4000::/36", "31898"}, + {"2603:c0f0:1020::/38", "6142"}, + {"2605:940:710::/44", "396919"}, + {"2a01:5042:2007::/48", "202196"}, + {"2a09:96c0::/48", "20473"}, + {"2001:559:c1df::/48", "33652"}, + {"2001:559:c255::/48", "33650"}, + {"2001:559:c2d1::/48", "7015"}, + {"2401:5200::/32", "23659"}, + {"2401:d800:d0d0::/42", "7552"}, + {"2a10:cb40::/31", "198328"}, + {"2001:67c:15e8::/48", "3301"}, + {"2001:18b8:113::/45", "29789"}, + {"2408:8957:bd00::/40", "17816"}, + {"240a:a45b::/32", "143765"}, + {"240a:aaf5::/32", "145455"}, + {"2607:f6f0:9000::/48", "32323"}, + {"2800:bf0:3c00::/45", "52257"}, + {"2804:4f94::/32", "268336"}, + {"2804:6cc4::/32", "270490"}, + {"2a0e:8f02:2015::/48", "213021"}, + {"2001:df4:4f80::/48", "140941"}, + {"2405:203:89d::/39", "55836"}, + {"2607:f5a0::/45", "17048"}, + {"2001:ce0:2800::/40", "7651"}, + {"2602:802:b0ca::/48", "397795"}, + {"2604:d600:15bb::/45", "32098"}, + {"2804:2d94::/32", "265290"}, + {"2a00:fa80::/29", "203489"}, + {"2400:ff00:6::/32", "132045"}, + {"2a0a:e805:210::/44", "64476"}, + {"2403:7800::/32", "10010"}, + {"240a:a554::/32", "144014"}, + {"240e:3b3:7600::/39", "140313"}, + {"240e:964:3800::/33", "4134"}, + {"2800:160:165e::/42", "14259"}, + {"2a03:d000:9004::/46", "29648"}, + {"2a0f:8c40::/29", "42375"}, + {"2401:d800:dc90::/42", "7552"}, + {"2406:82c0::/32", "141201"}, + {"2804:a00:8a1::/41", "262838"}, + {"2a0a:340:cd00::/40", "48043"}, + {"2001:43f8:e0::/48", "37045"}, + {"2a00:84c0::/32", "197078"}, + {"2a05:547::/32", "206766"}, + {"2a09:740::/32", "62214"}, + {"2a0c:8fc1:6400::/39", "34081"}, + {"2001:678:b40::/48", "208003"}, + {"2403:ac80::/40", "4785"}, + {"2409:8779::/30", "9808"}, + {"2a03:1e01::/32", "9145"}, + {"2401:4900:5090::/42", "45609"}, + {"2403:a640::/39", "63776"}, + {"2404:bf40:8006::/42", "139084"}, + {"2406:3400:68::/43", "10143"}, + {"2408:8957:d00::/40", "17816"}, + {"2606:1a40:2010::/47", "398962"}, + {"2a02:26f7:cd80::/48", "36183"}, + {"2001:400:b21::/44", "293"}, + {"2402:800:911d::/41", "7552"}, + {"2405:9800:60::/44", "45430"}, + {"2603:c013:a000::/36", "31898"}, + {"2803:6a60::/46", "262186"}, + {"2804:60b0::/32", "269184"}, + {"2804:76dc::/32", "271139"}, + {"2a02:7c9::/44", "211099"}, + {"2a02:cc4:2100::/41", "8211"}, + {"2001:7e8::/32", "6661"}, + {"2001:df1:9c00::/48", "133882"}, + {"2605:4300:ee00::/40", "62907"}, + {"2804:30fc:4::/32", "263009"}, + {"2a0b:27c0::/31", "34215"}, + {"240e:44d:6f40::/42", "140354"}, + {"2804:2278::/32", "264103"}, + {"2a00:6620:2000::/48", "197746"}, + {"2a02:26f7:bf48::/48", "36183"}, + {"2a02:26f7:dc88::/48", "36183"}, + {"2003::/19", "3320"}, + {"2401:d800:7590::/42", "7552"}, + {"240a:a6d4::/32", "144398"}, + {"2800:160:1fc2::/45", "14259"}, + {"2a02:26f0:42::/43", "20940"}, + {"2001:559:82f3::/48", "33287"}, + {"2407:ef00:931::/32", "12422"}, + {"2408:8459:c250::/37", "17816"}, + {"2409:802f:2c06::/48", "9808"}, + {"240e:980:9100::/40", "140061"}, + {"2804:920:4200::/35", "263053"}, + {"2a03:eb80::/32", "56704"}, + {"2a0c:93c0:6000::/48", "212465"}, + {"2001:559:5a2::/45", "7922"}, + {"2001:ee0:a040::/37", "45899"}, + {"2409:8074:3100::/32", "9808"}, + {"2603:70b3::/32", "11351"}, + {"2a01:8840:39::/48", "207266"}, + {"2a03:5f00:1000::/48", "207044"}, + {"2600:2108:4000::/29", "11404"}, + {"2804:2f30:4800::/34", "53096"}, + {"2a00:c90::/32", "20853"}, + {"2001:3c8:2a08::/33", "4621"}, + {"2620:134:b0ff::/48", "14593"}, + {"2804:cf8:c::/46", "52580"}, + {"2a01:5042:2eff::/48", "202196"}, + {"2a03:5a00:c::/48", "198324"}, + {"2402:8100:3031::/45", "55644"}, + {"2806:230:2045::/48", "11888"}, + {"2404:bf40:c000::/47", "2764"}, + {"240a:aeb9::/32", "146419"}, + {"2602:fbb7::/36", "399899"}, + {"2606:b400:8808::/48", "7160"}, + {"2a02:4f60::/32", "60198"}, + {"2a0d:3842:1040::/48", "57629"}, + {"2001:579:c08d::/41", "22773"}, + {"2401:2d00:8000::/46", "17625"}, + {"240a:a77d::/32", "144567"}, + {"240a:addd::/32", "146199"}, + {"2800:940::/32", "27953"}, + {"2620:119:53::/48", "36692"}, + {"2620:136:c000::/48", "40337"}, + {"2804:4d5c::/32", "268192"}, + {"2a0b:480::/29", "16181"}, + {"2600:1415:3c01::/33", "20940"}, + {"2620:10e:6000::/40", "11279"}, + {"2001:250:1e00::/44", "138377"}, + {"2001:559:8089::/48", "13367"}, + {"2001:559:85f2::/48", "33652"}, + {"2001:b400:f000::/38", "3462"}, + {"240a:aa69::/32", "145315"}, + {"2620:120:2000::/40", "393983"}, + {"2a02:26f7:be49::/46", "20940"}, + {"2a04:400::/29", "34254"}, + {"2a0b:5dc0::/29", "198288"}, + {"2404:1c40:25::/44", "24432"}, + {"2408:840c:2000::/40", "17621"}, + {"2409:8739::/30", "9808"}, + {"2607:f8f0:400::/40", "271"}, + {"2800:590:2058::/42", "7004"}, + {"2804:2a4::/32", "262828"}, + {"2804:35a4::/32", "266298"}, + {"2804:7e80::/32", "271628"}, + {"2a03:50c0:3300::/40", "202087"}, + {"2a03:ad40:130::/48", "199349"}, + {"2001:559:8544::/48", "33662"}, + {"2001:559:8666::/47", "33657"}, + {"2620:12f:c009::/45", "395831"}, + {"2803:9800:b995::/46", "11664"}, + {"2804:1a88::/32", "61864"}, + {"2a02:26f7:ef4c::/48", "36183"}, + {"2a03:7520::/32", "13030"}, + {"2a06:6000::/29", "20802"}, + {"2001:df0:1b40::/48", "135906"}, + {"2400:a980::/40", "133111"}, + {"2408:8256:2d9b::/48", "17816"}, + {"2620:a5:6000::/48", "14618"}, + {"2804:204:710::/36", "28186"}, + {"2804:3c04:2::/32", "266185"}, + {"1900:5:2:2::5170/126", "3356"}, + {"2001:1900:2353::/45", "10753"}, + {"240a:a9c9::/32", "145155"}, + {"2620:171:55::/48", "715"}, + {"2a04:4e40:7c00::/48", "54113"}, + {"2001:559:8148::/48", "20214"}, + {"2001:1388:a::/43", "6147"}, + {"2001:44c8:43d0::/44", "45430"}, + {"2600:1401:3::/45", "20940"}, + {"2804:37b0::/36", "266429"}, + {"2804:56d0::/32", "268025"}, + {"2a03:65c0::/32", "61331"}, + {"2a0e:8f02:213a::/48", "211722"}, + {"2a0f:9880::/30", "208861"}, + {"2001:c48::/32", "9457"}, + {"2404:a800:7001::/32", "9498"}, + {"2a01:c50f:400::/39", "12479"}, + {"2001:500:6f::/48", "30128"}, + {"2001:678:32c::/48", "3170"}, + {"2404:4340:2::/32", "133275"}, + {"240a:af81::/32", "146619"}, + {"2600:1001:a110::/36", "22394"}, + {"2606:4f00:6::/48", "19324"}, + {"2a02:26f7:b850::/48", "36183"}, + {"2a0d:d9c7:a::/48", "208948"}, + {"240e:3bd:dc00::/34", "4134"}, + {"2606:ae40::/32", "174"}, + {"2607:ff28:b006::/47", "62904"}, + {"2804:8120::/32", "272434"}, + {"2a02:26f7:d6cc::/48", "36183"}, + {"240a:af4a::/32", "146564"}, + {"240e:3b2:7a00::/32", "140313"}, + {"2a02:618:a::/32", "20485"}, + {"2405:4200::/38", "24482"}, + {"2600:1404:f401::/36", "20940"}, + {"2801:16e:4::/48", "19429"}, + {"2a11:e000::/29", "42375"}, + {"2001:dcc:600::/48", "131100"}, + {"2401:7200:2010::/47", "55328"}, + {"2408:84f3:3e40::/33", "17816"}, + {"2600:140f:c001::/38", "20940"}, + {"2a00:cce0::/32", "43870"}, + {"2a03:521::/32", "201822"}, + {"2a06:e881:6200::/48", "60404"}, + {"2406:380::/31", "7979"}, + {"2804:11bc:4000::/38", "263435"}, + {"2001:559:c13e::/47", "33287"}, + {"2001:67c:21f8::/48", "34964"}, + {"2600:100f:9100::/44", "6167"}, + {"2604:9100:1000::/48", "25864"}, + {"2605:dbc0::/32", "397880"}, + {"2a01:5e00::/32", "34688"}, + {"2a02:888:8143::/48", "47794"}, + {"2a02:26f7:80::/48", "36183"}, + {"2001:678:8b0::/48", "43815"}, + {"2001:b08:16::/48", "29581"}, + {"2001:44b8:4063::/48", "4739"}, + {"2401:1a80::/32", "59374"}, + {"2605:3380:4184::/47", "12025"}, + {"2606:9380::/32", "15011"}, + {"2001:4878:c027::/48", "12222"}, + {"2409:8062:1100::/36", "9808"}, + {"2409:8904:5ab0::/39", "24547"}, + {"2605:a404:32f::/41", "33363"}, + {"2620:112:f006::/48", "6336"}, + {"2800:bf0:37c0::/45", "52257"}, + {"2803:24c0:600::/32", "264796"}, + {"2001:948:5a::/42", "39590"}, + {"240e:3b6:c000::/37", "140315"}, + {"2a02:f08::/32", "42184"}, + {"2001:1440:203::/48", "5401"}, + {"2407:cb00::/32", "23860"}, + {"2607:f060:b005::/33", "11404"}, + {"2801:136::/46", "19429"}, + {"2804:4f60:2000::/32", "268323"}, + {"2001:df1:6400::/48", "55925"}, + {"2604:a540::/32", "54594"}, + {"240a:ad5f::/32", "146073"}, + {"2a02:26f7:e7c1::/46", "20940"}, + {"2001:559:3b2::/47", "33660"}, + {"2405:1c0:6351::/46", "55303"}, + {"2600:1408:4c01::/35", "20940"}, + {"2606:5c80::/32", "394255"}, + {"2a10:d2c0::/32", "198288"}, + {"2a01:b740:a01::/48", "714"}, + {"2a02:26f7:c5c6::/47", "20940"}, + {"2a0a:90c2::/35", "198912"}, + {"2a0e:aa07:e300::/48", "149007"}, + {"2001:1578:400::/40", "35003"}, + {"2001:448a:5050::/40", "7713"}, + {"2402:5300:4700::/40", "38733"}, + {"2001:b400:f210::/45", "3462"}, + {"2a09:8387:ffff::/48", "51972"}, + {"2605:b800:788::/32", "23550"}, + {"2801:80:2430::/48", "268334"}, + {"2803:69e0::/32", "270015"}, + {"2a03:f180::/32", "42571"}, + {"2001:559:853b::/48", "33491"}, + {"2406:3003:2080::/48", "55430"}, + {"2604:2f40:243::/32", "29749"}, + {"2605:e000:70b::/48", "10838"}, + {"2800:160:1ffb::/34", "14259"}, + {"2801:8a::/32", "53187"}, + {"2804:4b40::/42", "267293"}, + {"2804:6ab8::/32", "270355"}, + {"2a02:26f0:ae::/43", "20940"}, + {"2001:559:81e9::/48", "7016"}, + {"2001:978:601::/36", "174"}, + {"2400:cb00:a625::/46", "13335"}, + {"2408:8026:710::/36", "17621"}, + {"2804:df0:2::/36", "262775"}, + {"2a03:7480:10::/44", "15699"}, + {"2a0a:59c7:100f::/43", "204724"}, + {"2a10:2f01:380::/42", "39526"}, + {"2804:5c78:5000::/32", "53245"}, + {"2806:239::/32", "18592"}, + {"2a01:5b0:a::/45", "8391"}, + {"2001:3c8:244::/35", "4621"}, + {"2409:8000:100::/37", "9808"}, + {"2409:8975::/28", "9808"}, + {"240a:a112::/32", "142924"}, + {"2001:df0:6440::/48", "149488"}, + {"240e:979:2f00::/35", "4134"}, + {"2a00:1180::/32", "15518"}, + {"2a0e:8f02:20f0::/45", "212008"}, + {"2001:559:77f::/48", "7015"}, + {"2600:1000:ff10::/31", "22394"}, + {"2800:160:2ba1::/37", "14259"}, + {"2804:14c:8183::/41", "28573"}, + {"2001:559:8767::/48", "7725"}, + {"2001:559:c412::/47", "7922"}, + {"2001:67c:1424::/48", "49030"}, + {"2405:ad40::/32", "137159"}, + {"240a:a0c0::/32", "142842"}, + {"2a11:4740::/29", "204790"}, + {"2407:9001:200::/45", "2764"}, + {"240a:a370::/32", "143530"}, + {"240e:3bd:2200::/37", "136198"}, + {"2620:103:e008::/47", "16711"}, + {"2001:559:363::/48", "33652"}, + {"2409:8054:3028::/47", "9808"}, + {"2409:8c1f:75c0::/32", "9808"}, + {"240a:ab1c::/32", "145494"}, + {"2604:d600:1517::/44", "32098"}, + {"2804:2e78:2000::/32", "28213"}, + {"2804:783c::/32", "271229"}, + {"2806:2f0:40a1::/46", "17072"}, + {"2001:559:c248::/48", "33650"}, + {"2402:3a80:c02c::/48", "38266"}, + {"2403:1b80::/48", "59083"}, + {"2404:87c0::/32", "138652"}, + {"2620:b0:8000::/48", "54297"}, + {"2804:6304::/32", "269333"}, + {"2a0d:7700::/29", "41645"}, + {"2001:559:3e8::/48", "33489"}, + {"2408:8957:6a00::/40", "17622"}, + {"240a:a7d7::/32", "144657"}, + {"2804:d7c:200::/35", "52634"}, + {"2a02:2e02:39f0::/38", "12479"}, + {"2001:559:8780::/47", "7015"}, + {"2001:c38:9201::/36", "9931"}, + {"2800:bf0:a00c::/39", "27947"}, + {"2a06:4e80::/29", "49375"}, + {"2600:1008:a100::/43", "6167"}, + {"2605:cd40:2::/32", "14363"}, + {"2a0b:b780::/29", "206291"}, + {"2a0b:d700::/29", "13178"}, + {"2607:1280:1310::/44", "394972"}, + {"2804:8358::/32", "272192"}, + {"2a0b:25c0::/29", "58243"}, + {"2a0c:7600::/29", "205190"}, + {"2001:56b:400c::/35", "852"}, + {"2401:d800:2c40::/42", "7552"}, + {"2607:fdf0:5e1e::/42", "8008"}, + {"2804:70d8::/32", "270743"}, + {"2c0f:ef98::/32", "328359"}, + {"2a02:26f7:c544::/48", "36183"}, + {"2404:6c80::/32", "134658"}, + {"2a02:fe9:337::/32", "39686"}, + {"2a02:26f7:56::/48", "36183"}, + {"2a02:26f7:e2c9::/42", "20940"}, + {"2a05:4a40:fff0::/44", "2571"}, + {"2a06:941::/48", "202958"}, + {"2001:67c:2b0c::/48", "15542"}, + {"2001:18e8::/46", "87"}, + {"240a:a5af::/32", "144105"}, + {"2804:1d3c:8000::/33", "264356"}, + {"2a01:7fe0::/32", "199803"}, + {"2a02:21b2:ac14::/48", "57370"}, + {"2001:1218:604d::/43", "278"}, + {"2001:16a2:c3cc::/46", "39891"}, + {"2001:4408:7001::/38", "4758"}, + {"240a:a49c::/32", "143830"}, + {"2600:6c10:ffb5::/41", "20115"}, + {"2a01:8400::/32", "20676"}, + {"2a02:2658:3000::/32", "20860"}, + {"2a03:1ac0:2e00::/48", "34533"}, + {"2a04:c7c0::/29", "31382"}, + {"2a0c:9a40:1005::/48", "34927"}, + {"2001:559:8224::/48", "7725"}, + {"2001:c10::/32", "7473"}, + {"240a:a2d3::/32", "143373"}, + {"2605:4300:1213::/40", "22616"}, + {"2800:160:1866::/44", "14259"}, + {"2804:2fa4::/32", "52771"}, + {"2400:cb00:131::/48", "395747"}, + {"2804:2c80::/32", "265223"}, + {"2a02:26f7:d080::/48", "36183"}, + {"2a0d:2584:efff::/48", "141776"}, + {"2a0d:5087:1a2c::/48", "34202"}, + {"2001:559:45::/48", "33659"}, + {"2001:1248:998f::/42", "11172"}, + {"2620:118:a000::/47", "42633"}, + {"2804:2ff8::/32", "264923"}, + {"2c0f:fe38:2::/45", "33771"}, + {"2001:1388:49ca::/35", "6147"}, + {"2801:80:3780::/48", "269543"}, + {"2a05:fdc0:1001::/29", "42313"}, + {"2a0a:e5c0:10::/48", "213081"}, + {"2a0d:d81::/32", "213075"}, + {"2001:559:81c0::/48", "7015"}, + {"240e:3b5:7600::/39", "140313"}, + {"2605:a7c0:130::/48", "14618"}, + {"240a:a10e::/32", "142920"}, + {"240a:aae5::/32", "145439"}, + {"2001:16a6:c100::/40", "25019"}, + {"2a04:8f40:1000::/48", "205505"}, + {"240a:a657::/32", "144273"}, + {"2a02:26f7:f744::/48", "36183"}, + {"2001:470:8b::/45", "6939"}, + {"2001:67c:2dd0::/48", "200881"}, + {"2602:fdab::/36", "397968"}, + {"2602:feb4:120::/44", "25961"}, + {"2610:20:5110::/42", "5744"}, + {"2a06:8146:49a1::/48", "199364"}, + {"2001:559:1a5::/48", "33287"}, + {"2001:559:c150::/48", "33668"}, + {"240e:67f:c400::/39", "140330"}, + {"2a01:a180::/32", "47212"}, + {"2001:559:c422::/48", "7725"}, + {"2001:67c:7e8::/48", "47405"}, + {"2600:6c38:b1::/41", "20115"}, + {"2804:2728:713::/36", "263880"}, + {"2a0c:9180::/48", "13127"}, + {"2600:1413:7001::/36", "20940"}, + {"2620:138:30ff::/48", "398849"}, + {"2804:214:8753::/40", "26615"}, + {"2a0c:b641:5f0::/44", "212832"}, + {"2a0f:280::/29", "57353"}, + {"2400:adc0::/45", "9541"}, + {"2409:8c14:3c00::/32", "56044"}, + {"2620:9b:8000::/40", "36152"}, + {"2a01:c50f:a140::/37", "12479"}, + {"2a10:cc42:19d6::/44", "20473"}, + {"2001:559:8708::/48", "33650"}, + {"2001:559:870f::/48", "20214"}, + {"2400:cb00:429::/48", "13335"}, + {"2404:8d06:6000::/40", "133543"}, + {"2600:1415:801::/38", "20940"}, + {"2620:171:ab::/43", "715"}, + {"2803:7210:effe::/48", "21826"}, + {"2a00:8de7::/32", "51840"}, + {"2a0d:1e40::/29", "202714"}, + {"2001:559:491::/48", "33657"}, + {"2404:1400::/48", "46027"}, + {"2408:8459:a410::/42", "17623"}, + {"2806:2a0:1c::/42", "28548"}, + {"2a10:4741:30::/45", "208914"}, + {"2402:3a80:1ab8::/41", "38266"}, + {"240e:983:5::/39", "4134"}, + {"2607:fc58:1:97::/60", "13536"}, + {"2804:76f8::/32", "271146"}, + {"2a0a:4640:21::/29", "206177"}, + {"2a10:cc42:1800::/40", "20473"}, + {"2001:559:8034::/48", "33490"}, + {"2001:559:c350::/48", "7922"}, + {"2600:8809:c000::/30", "22773"}, + {"2602:fd9c::/36", "398045"}, + {"2a11:8180::/29", "56897"}, + {"2001:388:10e1::/34", "7575"}, + {"2001:559:c494::/46", "7922"}, + {"2407:4e00:1:1::/62", "17995"}, + {"2a02:2538::/32", "43012"}, + {"2001:67c:17cc::/48", "3301"}, + {"2605:a900:d::/46", "46887"}, + {"2a02:ff0:2::/48", "12735"}, + {"2a02:26f0:1c::/48", "31108"}, + {"2a03:6400:30::/44", "11054"}, + {"2a0e:b107:2b::/48", "208059"}, + {"2001:559:70c::/48", "33659"}, + {"2a07:8d80::/29", "61110"}, + {"2001:1248:a43d::/41", "11172"}, + {"2804:2954::/32", "264009"}, + {"2602:808:c000::/48", "19661"}, + {"2804:4aec::/32", "267272"}, + {"2a02:26f7:facd::/42", "20940"}, + {"2a06:cd40:cafe::/47", "43927"}, + {"2a09:4c2:35::/41", "58057"}, + {"2c0f:ecb0::/32", "328423"}, + {"2001:12f0:b40::/42", "1916"}, + {"2603:fa70::/24", "397165"}, + {"2409:8054:29::/45", "56040"}, + {"2610:a1:3034::/48", "12008"}, + {"2a02:3d0:601::/42", "22822"}, + {"2a04:4e42:18::/42", "54113"}, + {"2a06:a005:bb::/48", "207941"}, + {"2a0f:5707:abc0::/44", "210887"}, + {"2404:bf40:c3c2::/47", "7545"}, + {"240a:a745::/32", "144511"}, + {"2607:d500:a00::/40", "54527"}, + {"2607:f920::/32", "11758"}, + {"2a03:f200::/32", "30962"}, + {"2a04:4b80::/29", "39397"}, + {"2001:67c:2e4::/48", "47886"}, + {"2001:67c:1790::/48", "51350"}, + {"2001:4d78:2700::/40", "15830"}, + {"2401:d800:b430::/41", "7552"}, + {"2804:84::/32", "14282"}, + {"2a02:26f7:69::/48", "20940"}, + {"2a05:9a00:1000::/46", "59441"}, + {"2406:7600::/32", "38084"}, + {"240a:a194::/32", "143054"}, + {"2600:1406:d800::/48", "35994"}, + {"2604:d600:1133::/44", "32098"}, + {"2620:7c:a000::/48", "32982"}, + {"2800:40:36::/32", "16814"}, + {"2a06:14c0::/32", "213211"}, + {"2a05:8883:ffff::/48", "48749"}, + {"2605:dd40:8201::/46", "398549"}, + {"2a01:c9c0:8000::/48", "2280"}, + {"2a02:ac80:701::/36", "25145"}, + {"2a04:4e40:f800::/48", "54113"}, + {"2001:559:81a9::/48", "33651"}, + {"2001:67c:16cc::/48", "59469"}, + {"2001:14b0:54::/32", "12374"}, + {"2001:4408:5201::/46", "4758"}, + {"2404:a140:a::/45", "138915"}, + {"240a:ab37::/32", "145521"}, + {"2a00:86c0:263::/35", "2906"}, + {"2a0c:44c0:1::/46", "198611"}, + {"2607:f2b1:70::/47", "12257"}, + {"2803:2a20::/32", "265850"}, + {"2001:559:c47d::/40", "7922"}, + {"2001:da8:c4::/48", "138393"}, + {"2401:7500:fff2::/47", "33480"}, + {"240e:0:9000::/36", "23724"}, + {"2610:e0:a020::/43", "2572"}, + {"2803:a210::/32", "271900"}, + {"2804:5d1c::/32", "268951"}, + {"2a00:c940::/32", "12581"}, + {"2001:1248:9987::/44", "11172"}, + {"2402:a740::/32", "134868"}, + {"240e:a65:1a00::/34", "140330"}, + {"2604:9d40:1337::/48", "393290"}, + {"2a06:e180::/29", "57081"}, + {"2a0b:4380::/32", "43594"}, + {"2001:dce:d452::/47", "45285"}, + {"2406:8800:9019::/46", "17465"}, + {"2607:7b80:f000::/36", "32798"}, + {"2a04:d202::/29", "61438"}, + {"2001:7fb:fd04::/48", "15562"}, + {"2401:4900:18f0::/39", "45609"}, + {"240a:a245::/32", "143231"}, + {"240a:a264::/32", "143262"}, + {"2a02:3d0:8::/37", "22822"}, + {"2a0a:2846:1::/36", "42962"}, + {"2607:f428::/32", "20115"}, + {"2801:1a:c800::/48", "262589"}, + {"2405:4803:2d0::/44", "18403"}, + {"2409:e:e1::/48", "142502"}, + {"2607:fc58:1:23::/64", "13536"}, + {"2a04:5b81:2000::/48", "206499"}, + {"2a06:cd00::/29", "57129"}, + {"2001:559:8762::/48", "20214"}, + {"2402:2f80:1::/48", "38001"}, + {"2405:d000:8000::/33", "18024"}, + {"2610:b0:2070::/33", "3573"}, + {"2803:9800:b01a::/42", "11664"}, + {"2606:d00::/32", "3926"}, + {"2a04:4e41:18::/42", "54113"}, + {"2620:0:120::/48", "32058"}, + {"2a01:8840:6e::/43", "12041"}, + {"2409:40c3::/26", "55836"}, + {"2409:804c::/42", "9808"}, + {"2600:b404::/32", "57695"}, + {"2605:a7c0:150::/48", "14618"}, + {"2607:f928:17::/33", "22645"}, + {"2804:653c::/32", "269477"}, + {"2001:4c58::/30", "8286"}, + {"2600:380:d400::/44", "20057"}, + {"2a0c:3800:ff::/39", "205315"}, + {"2001:67c:254::/48", "51224"}, + {"240a:a949::/32", "145027"}, + {"2602:fbd0:12::/48", "14618"}, + {"2a02:26f7:d8c0::/48", "36183"}, + {"2a05:8880:5::/30", "34304"}, + {"2a0d:7100:b::/48", "44167"}, + {"2a0e:46c7:2a0e::/48", "210645"}, + {"240e:109:802a::/48", "63835"}, + {"2806:10ae:5::/44", "8151"}, + {"2a04:4e40:cc30::/41", "54113"}, + {"2a00:ddc0::/32", "47836"}, + {"2a07:8c40::/47", "202810"}, + {"2a09:6301::/30", "48314"}, + {"2409:891a::/29", "132525"}, + {"240a:ac7f::/32", "145849"}, + {"2600:6c21:406::/44", "20115"}, + {"2804:4ca0::/47", "267381"}, + {"2a02:598::/46", "43037"}, + {"2a02:26f7:c241::/46", "20940"}, + {"2a0b:b500:f800::/48", "60764"}, + {"2400:3a60::/36", "149051"}, + {"2403:3800:9::/37", "4007"}, + {"2408:840d:8f00::/42", "17621"}, + {"2620:0:1605::/48", "6984"}, + {"2620:135:604a::/45", "22697"}, + {"2803:f960::/32", "269749"}, + {"2804:7588::/32", "271053"}, + {"2804:7c70::/32", "271496"}, + {"2a02:26f7:db08::/48", "36183"}, + {"2a02:2808:1005::/48", "196943"}, + {"2402:e380:307::/48", "137219"}, + {"2405:7f00:8360::/37", "133414"}, + {"240e:183:8228::/29", "4134"}, + {"2a05:dfc7:beef::/48", "204136"}, + {"240e:438:4820::/43", "140647"}, + {"2600:370f:3105::/41", "32261"}, + {"2804:417c::/32", "267436"}, + {"2804:6978::/32", "270272"}, + {"2804:31a4::/32", "265028"}, + {"2605:ef80:800a::/40", "36492"}, + {"2620:139:a000::/44", "31807"}, + {"2a01:190:1500::/48", "206159"}, + {"2a09:bac0:433::/48", "13335"}, + {"2402:9900::/48", "27435"}, + {"240a:ab1d::/32", "145495"}, + {"2804:140::/32", "53138"}, + {"2408:8256:798::/36", "17622"}, + {"2605:a401:889d::/39", "33363"}, + {"2a03:db80:4405::/44", "680"}, + {"2a07:3500:11a0::/48", "1136"}, + {"2a0d:b400::/29", "60695"}, + {"2001:559:6c::/47", "7922"}, + {"2001:678:358::/48", "206514"}, + {"2403:e600:1000::/32", "58376"}, + {"240a:ad7b::/32", "146101"}, + {"2600:140a:3001::/33", "20940"}, + {"2600:370f:7348::/45", "32261"}, + {"2a07:89c0::/48", "199484"}, + {"2001:638::/38", "680"}, + {"2001:67c:2bf8::/48", "3301"}, + {"2403:b3c0::/48", "135905"}, + {"2407:7c0::/43", "138128"}, + {"2409:8904:a440::/39", "24547"}, + {"2a0c:d240::/29", "43341"}, + {"2604:2d80:7000::/39", "30036"}, + {"2607:fda0::/32", "27008"}, + {"2801:80:3ab0::/41", "270410"}, + {"2804:1b3:4006::/40", "18881"}, + {"2a0b:f4c0:1a4::/48", "205100"}, + {"2001:67c:29b8::/48", "48430"}, + {"2001:c20:486b::/48", "3758"}, + {"2408:80ea:79a0::/38", "17816"}, + {"2409:8904:6970::/40", "24547"}, + {"2001:650:cc02::/48", "3320"}, + {"2400:9c80:1::/48", "58401"}, + {"2409:8057:3062::/44", "56040"}, + {"2409:896a:3a00::/39", "9808"}, + {"240a:a930::/32", "145002"}, + {"2602:ffe0::/36", "27337"}, + {"2a02:cb80:4280::/45", "43766"}, + {"2600:1006:a000::/43", "6167"}, + {"2001:559:3cc::/48", "7015"}, + {"2001:559:4c1::/48", "7922"}, + {"2001:559:8020::/43", "7922"}, + {"2402:7500:5ff::/38", "24158"}, + {"240a:a5bb::/32", "144117"}, + {"2600:1100::/28", "7381"}, + {"2804:1b44::/32", "61717"}, + {"2804:38cc::/32", "266502"}, + {"2a02:26f7:e78d::/42", "20940"}, + {"2409:8c4d:5201::/30", "9808"}, + {"2804:5334::/32", "268569"}, + {"2806:2f0:7263::/40", "17072"}, + {"2001:1248:5bac::/43", "11172"}, + {"2606:b400:8012::/48", "31898"}, + {"2804:14d:b484::/41", "28573"}, + {"2a0e:b107:5a5::/46", "203943"}, + {"240e:16:b209::/37", "38283"}, + {"2804:ea8::/32", "262966"}, + {"2a02:f740::/29", "39834"}, + {"2a09:bac0:69::/48", "13335"}, + {"2a0f:6680::/29", "41820"}, + {"2001:568:900::/37", "852"}, + {"2001:1248:9a0d::/42", "11172"}, + {"240e:870:50::/30", "4134"}, + {"2804:1ce4::/34", "61681"}, + {"2804:8434:37f::/40", "272246"}, + {"2806:2f0:9c83::/42", "17072"}, + {"2a02:2c8::/32", "44381"}, + {"2a05:cf00::/29", "201014"}, + {"2c0f:fba0::/45", "37333"}, + {"2400:a980:7900::/37", "133111"}, + {"240a:aa5b::/32", "145301"}, + {"2602:fc56::/36", "397901"}, + {"2804:5c0::/32", "262537"}, + {"2a00:9000::/29", "20910"}, + {"2a09:20c0::/31", "25115"}, + {"2001:559:c080::/47", "33491"}, + {"2401:d800:9bc0::/42", "7552"}, + {"2804:1c74::/32", "52712"}, + {"2804:4ed0::/32", "268284"}, + {"2c0f:f188:7::/48", "328228"}, + {"2001:978:2305::/48", "9009"}, + {"2407:4d00:fd02::/48", "38841"}, + {"2602:fd82::/36", "394728"}, + {"2803:ad80::/48", "42473"}, + {"2804:21f8::/44", "262272"}, + {"2001:250:238::/46", "23910"}, + {"2001:4998:180::/48", "7280"}, + {"2400:c600:1331::/48", "24389"}, + {"240a:a991::/32", "145099"}, + {"240a:a9d7::/32", "145169"}, + {"2806:2f0:9d03::/42", "17072"}, + {"2a06:1e00:70::/48", "60695"}, + {"2c0f:fbd8::/34", "37542"}, + {"2001:559:83c3::/48", "33287"}, + {"2401:d800:2b0::/41", "7552"}, + {"240e:44d:2e40::/42", "140349"}, + {"2604:1240:9000::/48", "53423"}, + {"2604:2700:200::/32", "32181"}, + {"2620:53:2000::/48", "6521"}, + {"2a02:28b7::/32", "51790"}, + {"2404:3a00::/48", "45557"}, + {"240e:678:8400::/38", "140329"}, + {"2607:f740:100::/47", "36236"}, + {"2804:5bac::/48", "268862"}, + {"2a02:688::/32", "5394"}, + {"2a06:2340:2000::/44", "9558"}, + {"2001:250:3444::/48", "23910"}, + {"2001:579:2052::/37", "22773"}, + {"2401:d800:e10::/42", "7552"}, + {"2620:1d6:ffe::/47", "2571"}, + {"2804:446c:8001::/33", "28369"}, + {"2a02:578:5c00::/38", "9031"}, + {"2a03:e60:8000::/46", "47530"}, + {"2001:559:1c2::/48", "7015"}, + {"2001:4978:f::/48", "26943"}, + {"2402:8100:20df::/42", "55644"}, + {"2404:4f00:3044::/48", "394749"}, + {"240e:979:3f00::/33", "4134"}, + {"2607:6b80:32::/48", "9009"}, + {"2001:49f0:d001::/44", "174"}, + {"2803:f680::/32", "263230"}, + {"2a0f:c600::/29", "208262"}, + {"240a:a9cb::/32", "145157"}, + {"2a02:26f7:109::/45", "20940"}, + {"2001:da8:203f::/48", "138369"}, + {"2001:4888:8056::/48", "22394"}, + {"2405:c5c0::/32", "139976"}, + {"240a:a41f::/32", "143705"}, + {"240a:a42d::/32", "143719"}, + {"2a02:3a8::/32", "15965"}, + {"2001:1248:977f::/48", "11172"}, + {"2404:2440:face::/48", "138521"}, + {"2804:4b0:4e4::/44", "262459"}, + {"2804:7b18::/32", "271410"}, + {"2a02:60a0::/32", "8793"}, + {"2a05:ee80::/29", "202523"}, + {"2401:b780:68::/47", "65435"}, + {"2409:8904:e1b0::/38", "24547"}, + {"2607:da00:802::/32", "15164"}, + {"2804:6438::/32", "269414"}, + {"2804:7788::/32", "271184"}, + {"2a00:4802:3f00::/33", "8717"}, + {"2001:16a2:c0f4::/44", "39386"}, + {"240a:ade6::/32", "146208"}, + {"2606:bd80::/32", "53732"}, + {"2804:1cc4::/33", "61674"}, + {"2a00:11c0:beef::/48", "42473"}, + {"2a03:4da0::/32", "25341"}, + {"2a07:3c80::/40", "209322"}, + {"2405:7100::/32", "38474"}, + {"2407:b7c0::/32", "17754"}, + {"2408:8459:9650::/36", "17816"}, + {"2605:a401:878c::/42", "33363"}, + {"2620:90:a000::/47", "398989"}, + {"2804:2ee0::/32", "265372"}, + {"2a02:6ca3::/32", "50242"}, + {"2001:559:8353::/48", "33659"}, + {"2001:df6:bd00::/48", "138069"}, + {"2600:1409:7000::/48", "35994"}, + {"2001:4298:89::/32", "30990"}, + {"2405:d800:111::/48", "393954"}, + {"2620:14:e000::/48", "54177"}, + {"2804:2728::/46", "263880"}, + {"2804:7ce8::/32", "271526"}, + {"2a11:1180::/29", "204790"}, + {"2001:559:86f3::/48", "7725"}, + {"2607:f750:9000::/39", "23473"}, + {"2620:e9::/48", "11286"}, + {"2a04:4e40:7610::/44", "54113"}, + {"2a0c:cc00::/32", "205206"}, + {"2001:16a2:16::/42", "39386"}, + {"2602:ff84::/48", "13213"}, + {"2804:7c0c::/32", "271472"}, + {"2403:cb00:cb00::/46", "58621"}, + {"2407:e9c0::/45", "17439"}, + {"2409:896a:9400::/39", "9808"}, + {"2804:53fc::/32", "268621"}, + {"2806:2f0:2223::/43", "17072"}, + {"2a06:dd00::/29", "56694"}, + {"2a0a:9440::/29", "57111"}, + {"2a0b:6700::/32", "197277"}, + {"2001:250:3402::/45", "138438"}, + {"240a:a600::/32", "144186"}, + {"240e:3:8000::/47", "134761"}, + {"2804:1af4::/32", "61700"}, + {"240a:a9f6::/32", "145200"}, + {"2804:4a18::/32", "267218"}, + {"2804:685c::/32", "269687"}, + {"2804:82ac::/32", "272533"}, + {"2a04:9140:3003::/48", "201958"}, + {"2001:559:49a::/47", "21508"}, + {"2001:559:c326::/47", "7922"}, + {"2402:4440:9820::/37", "24423"}, + {"2408:8256:3d75::/48", "17816"}, + {"2a01:210::/32", "8510"}, + {"2a02:9009:201::/27", "3352"}, + {"2401:d800:b3f0::/37", "7552"}, + {"240e:938:f920::/25", "4134"}, + {"2800:160:1f72::/45", "14259"}, + {"2804:14d:1031::/40", "28573"}, + {"2001:550:9203::/36", "174"}, + {"2001:67c:16dc::/48", "559"}, + {"2001:4478:2200::/40", "4739"}, + {"2404:f4c0:a003::/43", "210320"}, + {"2804:3dc8::/32", "266553"}, + {"2a11:680::/29", "208861"}, + {"2409:807e:3900::/31", "9808"}, + {"2a02:26f0:13e::/38", "20940"}, + {"2a0a:f040::/29", "61961"}, + {"2a0b:ea00::/32", "41827"}, + {"2c0f:fc89:60::/43", "36992"}, + {"2606:8e80:4800::/35", "32133"}, + {"2001:500:91::/46", "15135"}, + {"2001:44b8:406a::/48", "7545"}, + {"2408:84f3:3420::/43", "17816"}, + {"2801:13:e800::/48", "271925"}, + {"2a00:54a0::/32", "50941"}, + {"2a02:26f7:d609::/46", "20940"}, + {"2a02:26f7:f68d::/42", "20940"}, + {"2001:67c:2084::/48", "44030"}, + {"2403:ba00:2030::/32", "24521"}, + {"2408:8456:9a40::/37", "17816"}, + {"240a:a2e3::/32", "143389"}, + {"240a:a3a0::/32", "143578"}, + {"2804:640:90::/39", "262713"}, + {"2001:559:8357::/48", "20214"}, + {"2402:79c0:f008::/46", "30060"}, + {"2402:9e80:8::/48", "29802"}, + {"2406:4f40:c::/43", "40676"}, + {"2607:f5b7::/32", "30633"}, + {"2a04:fee3::/32", "49774"}, + {"2a0e:b107:9dc::/48", "141237"}, + {"2001:678:98::/48", "51833"}, + {"2001:678:4c4::/48", "48060"}, + {"2804:6bfc::/32", "270438"}, + {"240a:a7b6::/32", "144624"}, + {"2600:180a:4002::/31", "16552"}, + {"2804:3ed8::/32", "266624"}, + {"2804:4c0c:70::/32", "267345"}, + {"2a02:88d:21f::/48", "47794"}, + {"2a07:2902:400::/38", "3303"}, + {"2a07:d883:100::/48", "208476"}, + {"2a0f:9400:8001::/48", "208393"}, + {"2001:f58::/32", "18126"}, + {"240a:ad86::/32", "146112"}, + {"2620:19b::/32", "19648"}, + {"2804:3c8::/32", "262908"}, + {"2804:3938::/32", "266019"}, + {"2a00:e900::/29", "41175"}, + {"2a03:580::/32", "15576"}, + {"2402:6800:763::/45", "55429"}, + {"2a02:26f0:9f::/48", "34164"}, + {"2001:550:c00:105::/45", "174"}, + {"2001:559:872b::/45", "7922"}, + {"2607:fc58:1:e::/64", "13536"}, + {"2404:f4c0:ff01::/48", "139247"}, + {"2406:e480::/32", "135371"}, + {"240e:3b4:f100::/37", "134775"}, + {"2a00:77e0::/32", "60868"}, + {"2a03:8d20:1ce::/48", "200849"}, + {"2001:559:c4ab::/48", "33657"}, + {"2402:800:3be0::/44", "7552"}, + {"2610:a1:1019::/48", "397228"}, + {"2a02:26f7:ca41::/46", "20940"}, + {"2a06:5040:8::/47", "60188"}, + {"2001:559:c238::/48", "7922"}, + {"2401:d800:7092::/41", "7552"}, + {"240a:a103::/32", "142909"}, + {"240e:db:f000::/37", "4134"}, + {"2a01:7d80:c000::/40", "62214"}, + {"2a01:9700::/35", "8376"}, + {"2a04:4e40:8c00::/48", "54113"}, + {"2a06:8144:1121::/48", "199364"}, + {"2001:4c8:1018::/45", "15290"}, + {"2408:840c:5b00::/40", "17621"}, + {"240a:a7d5::/32", "144655"}, + {"240a:ae8b::/32", "146373"}, + {"240e:44d:4a80::/41", "4134"}, + {"2804:14e8::/32", "263015"}, + {"2a05:2a00::/29", "59816"}, + {"2401:4900:2ec0::/39", "45609"}, + {"2409:8958:ca44::/43", "9808"}, + {"2a0f:b300:1000::/46", "208200"}, + {"2001:579:5a64::/40", "22773"}, + {"2001:da8:201f::/48", "23910"}, + {"2402:e280:4112::/40", "134674"}, + {"2606:2800:420e::/47", "14210"}, + {"2606:4700:42c8::/45", "13335"}, + {"2a02:1397:4000::/40", "21351"}, + {"2001:44b8:105d::/48", "4739"}, + {"240a:a073::/32", "142765"}, + {"2803:9800:9997::/34", "11664"}, + {"2a0f:c087:89ca::/48", "212521"}, + {"2402:800:7e30::/41", "7552"}, + {"2604:5500:b400::/38", "19165"}, + {"2804:2050:5a9f::/34", "264485"}, + {"2001:d68:10::/46", "38759"}, + {"2405:58c0:3a::/47", "140840"}, + {"2409:4042:5000::/31", "55836"}, + {"2600:2c00:4000::/36", "7349"}, + {"2605:2180:911::/32", "12422"}, + {"2405:9800:d001::/48", "134240"}, + {"2804:6318::/32", "269338"}, + {"2a04:f580:9000::/46", "4809"}, + {"2a09:d881::/48", "209680"}, + {"2001:67c:85c::/48", "210775"}, + {"2001:c20:48b5::/48", "9255"}, + {"2001:4b22:12:1::/29", "34288"}, + {"240e:44d:3980::/41", "4134"}, + {"2600:1407:2c01::/35", "20940"}, + {"2800:320:8401::/48", "27882"}, + {"2804:4544::/40", "266915"}, + {"2a01:6d8::/32", "30889"}, + {"2001:67c:2970::/48", "211722"}, + {"2408:8456:4c00::/42", "17622"}, + {"2409:8750:900::/38", "56047"}, + {"240a:a00b::/32", "142661"}, + {"240c:ca24::/30", "23910"}, + {"2a02:2ab8:310::/42", "702"}, + {"2001:4878:4003::/48", "35994"}, + {"2408:8459:d1c0::/36", "17816"}, + {"240a:a75f::/32", "144537"}, + {"2800:370:a::/48", "28006"}, + {"2804:3e24::/32", "266576"}, + {"2800:a30:1709::/33", "262187"}, + {"2803:2b00::/35", "52468"}, + {"2804:64b8:4000::/34", "269444"}, + {"2a0b:ed42::/29", "212547"}, + {"2001:df2:9b00::/48", "56141"}, + {"2404:f4c0:5000::/39", "139248"}, + {"2605:640f:bcd7::/48", "211481"}, + {"2804:14d:4ce5::/44", "28573"}, + {"2a00:b940::/32", "33991"}, + {"2001:678:93c::/48", "209467"}, + {"2803:6680:102::/32", "267789"}, + {"2a07:81c0::/29", "29608"}, + {"2001:559:4e6::/48", "7016"}, + {"2001:559:81eb::/45", "7922"}, + {"2001:df3:f980::/48", "132040"}, + {"2409:804f:1100::/36", "9808"}, + {"2a04:4e40:8400::/48", "54113"}, + {"240e:940:ee00::/40", "136197"}, + {"2604:d600:15ee::/43", "32098"}, + {"2804:23bc::/32", "264180"}, + {"2402:2900::/32", "45701"}, + {"2a01:111:4005::/36", "8075"}, + {"2a0a:7880:103::/48", "206677"}, + {"2806:2f0:7283::/42", "17072"}, + {"2402:e380:305::/48", "135103"}, + {"240e:3b4:2c00::/35", "134774"}, + {"2610:e0:3000::/33", "2572"}, + {"2a00:8860:300::/48", "50389"}, + {"2001:1248:566a::/43", "11172"}, + {"2408:8459:1850::/39", "17816"}, + {"240a:a060::/32", "142746"}, + {"2606:2800:4ae4::/46", "15133"}, + {"2001:67c:7b0::/48", "57287"}, + {"2001:44b8:6044::/44", "7545"}, + {"2404:c000:4000::/46", "45147"}, + {"240a:abdb::/32", "145685"}, + {"2605:a404:722::/41", "33363"}, + {"2804:14d:1800::/40", "28573"}, + {"2a01:8840:5a::/45", "12041"}, + {"2a02:26f7:d651::/42", "20940"}, + {"2001:1960::/46", "5650"}, + {"2401:d800:9b30::/41", "7552"}, + {"2605:8300:3::/44", "33059"}, + {"2a02:26f7:ce48::/48", "36183"}, + {"2600:6c38:b25::/46", "20115"}, + {"2804:25bc:21::/32", "264299"}, + {"2405:9800:b01b::/42", "133481"}, + {"2a00:1248:501d::/46", "39058"}, + {"2a07:a905:ffef::/48", "204543"}, + {"2a0c:b641:270::/44", "207149"}, + {"2400:cb00:36::/48", "132892"}, + {"2804:7108::/32", "52881"}, + {"240a:aea1::/32", "146395"}, + {"240e:90e:2000::/36", "137688"}, + {"2800:bf0:152::/44", "27947"}, + {"2001:67c:28f0::/48", "57090"}, + {"2a00:4802:e40::/40", "13124"}, + {"2001:67c:1548::/48", "200693"}, + {"2001:7c8::/29", "2110"}, + {"2408:8956:8100::/40", "17816"}, + {"2604:f400:1::/48", "26878"}, + {"2804:13b4:8400::/33", "262288"}, + {"2804:4df4::/32", "268230"}, + {"2a02:328::/29", "25279"}, + {"2a0e:1d80:8::/47", "9009"}, + {"2402:7500:5b3::/45", "24158"}, + {"2409:8924:4300::/37", "56046"}, + {"2804:4068::/32", "265957"}, + {"2a01:488:bb05::/48", "20773"}, + {"2a04:680::/29", "61395"}, + {"2a0a:90c0:10c1::/48", "205080"}, + {"240a:a7d9::/32", "144659"}, + {"2600:140b:c00::/48", "31109"}, + {"2a02:26f7:d848::/48", "36183"}, + {"2a02:cb80:2510::/48", "43766"}, + {"2001:448a:70b0::/32", "7713"}, + {"2600:1005:b080::/42", "22394"}, + {"2001:c20:485e::/47", "9255"}, + {"240c:ca12::/32", "23910"}, + {"240e:107:c100::/40", "134774"}, + {"2a02:26f7:dac4::/48", "36183"}, + {"2001:4d0:109::/34", "297"}, + {"2001:2041::/32", "1299"}, + {"2408:8956:cb40::/40", "17816"}, + {"240e:108:4a::/48", "4811"}, + {"2600:100d:9100::/44", "6167"}, + {"2606:2e00:8002::/47", "32780"}, + {"2620:0:28b0::/48", "2936"}, + {"2001:678:498::/48", "44574"}, + {"240a:ae7a::/32", "146356"}, + {"2a00:ef80::/32", "35334"}, + {"2408:8256:2f97::/44", "17623"}, + {"2408:8738::/32", "4837"}, + {"240a:a235::/32", "143215"}, + {"2620:0:250::/48", "7046"}, + {"2a00:7280::/32", "56745"}, + {"2a02:26f7:e515::/46", "20940"}, + {"2401:d800:b030::/41", "7552"}, + {"2600:1415:1001::/37", "20940"}, + {"2602:fcd8:10::/46", "399141"}, + {"2605:3380:d000::/36", "395174"}, + {"2800:484:f200::/40", "14080"}, + {"2804:214:8788::/33", "26615"}, + {"2a01:c50f:9f40::/34", "12479"}, + {"2a02:888:8043::/48", "47794"}, + {"2a03:1a60::/32", "197161"}, + {"2a09:be40:ba00::/47", "208915"}, + {"2a0e:8200::/29", "206516"}, + {"2001:578:139::/45", "22773"}, + {"2001:67c:2658::/48", "204179"}, + {"2402:f800:f000::/36", "7602"}, + {"2408:84f4::/28", "4837"}, + {"2804:7c98::/32", "271506"}, + {"2a01:5041:2::/48", "202196"}, + {"2a01:9fc0::/32", "3238"}, + {"2001:559:407::/48", "22258"}, + {"2404:ae40::/32", "138932"}, + {"2603:c024::/35", "31898"}, + {"2607:f6f0:8000::/48", "32550"}, + {"2800:160:28e2::/38", "14259"}, + {"2804:5610::/32", "267974"}, + {"2804:5cbc::/32", "268927"}, + {"2a02:24d0::/32", "43545"}, + {"2404:d500::/47", "132370"}, + {"2405:7140::/47", "132335"}, + {"2600:100f:b080::/41", "22394"}, + {"2800:bf0:81ec::/47", "52257"}, + {"2a02:26f7:cd89::/46", "20940"}, + {"240e:44d:400::/41", "140345"}, + {"2620:115:7002::/40", "55091"}, + {"2a04:5d00:70::/48", "202590"}, + {"2a11:2980::/29", "60135"}, + {"2404:6900:cd00::/34", "17819"}, + {"240e:958:1300::/36", "4134"}, + {"2620:1ec:4::/46", "8068"}, + {"2a03:27a0::/32", "13237"}, + {"2a07:3500:1bc0::/48", "1136"}, + {"2a0c:681::/29", "200000"}, + {"2a0f:d40::/29", "60262"}, + {"2001:559:85e9::/48", "33662"}, + {"2001:5b0::/39", "6621"}, + {"2600:140f:2801::/39", "20940"}, + {"2602:fed2:731d::/48", "142418"}, + {"2605:3380:45fe::/38", "12025"}, + {"2804:2f40:f00a::/45", "264880"}, + {"2001:559:c37e::/47", "7922"}, + {"2404:f4c0:f408::/48", "209218"}, + {"240a:a0aa::/32", "142820"}, + {"2604:4580:204::/32", "26375"}, + {"2804:4084::/32", "265964"}, + {"2804:79e8::/32", "271335"}, + {"2a02:26f0:8701::/36", "20940"}, + {"2001:470:5b::/45", "6939"}, + {"2001:550:bb02::/33", "174"}, + {"2001:559:1fe::/48", "7725"}, + {"2405:6600:c01::/41", "45845"}, + {"240a:a0d3::/32", "142861"}, + {"2804:71ec::/32", "270820"}, + {"2a02:ac80:11::/42", "25145"}, + {"2401:4900:3820::/44", "45609"}, + {"2a02:26f7:f2c4::/48", "36183"}, + {"2a05:b80::/29", "50867"}, + {"2001:559:c226::/48", "33650"}, + {"2404:2280:113::/48", "24429"}, + {"240a:a32e::/32", "143464"}, + {"2600:140f:d801::/38", "20940"}, + {"2a06:8080::/29", "31349"}, + {"2a09:be40:ba02::/48", "137909"}, + {"2001:67c:2778::/48", "57926"}, + {"2001:1468::/33", "30738"}, + {"2409:8e50::/30", "56047"}, + {"240a:ae90::/32", "146378"}, + {"2600:140b:f801::/37", "20940"}, + {"2803:6b80::/32", "28093"}, + {"2803:9800:a88d::/43", "11664"}, + {"2a01:58:20::/47", "12782"}, + {"2a03:c980:beef::/48", "210079"}, + {"2800:3b0:10ff::/48", "6429"}, + {"2c0f:ea88::/32", "327931"}, + {"2c0f:fb60::/32", "12455"}, + {"2001:559:86be::/48", "33491"}, + {"2402:800:55d3::/44", "7552"}, + {"2600:6c7f:9002::/48", "20115"}, + {"2804:bb0:8000::/40", "52808"}, + {"2a02:26f7:cf8c::/48", "36183"}, + {"2a02:2b08::/32", "5552"}, + {"2a06:3b80:30::/48", "200478"}, + {"2a0e:c780::/29", "7018"}, + {"240a:ab21::/32", "145499"}, + {"2620:118:8032::/48", "40885"}, + {"240a:a54a::/32", "144004"}, + {"240a:a59b::/32", "144085"}, + {"2620:d3:8000::/48", "54536"}, + {"2804:58c8::/32", "268149"}, + {"2806:2f0:30a3::/41", "17072"}, + {"2401:7400:cc01::/34", "4773"}, + {"240a:a077::/32", "142769"}, + {"240a:a207::/32", "143169"}, + {"2604:3f40::/36", "394277"}, + {"2604:d800::/35", "20355"}, + {"2800:160:220f::/42", "14259"}, + {"2804:380::/32", "262890"}, + {"2a02:26f7:f8c9::/46", "20940"}, + {"2a03:2200::/32", "50998"}, + {"2400:5200:1c00::/40", "55410"}, + {"2400:cb00:250::/47", "13335"}, + {"2401:440::/32", "10004"}, + {"240a:a9f9::/32", "145203"}, + {"2606:ae00:6ac0::/37", "7287"}, + {"2a07:6100::/29", "202979"}, + {"2404:d00::/32", "58616"}, + {"240a:a91b::/32", "144981"}, + {"2600:1480:e800::/48", "21342"}, + {"2606:8b80::/32", "15129"}, + {"2620:11a:a02b::/45", "43515"}, + {"2a02:26f7:d4c0::/48", "36183"}, + {"2a0f:1e84::/32", "7203"}, + {"2602:fbef::/48", "32150"}, + {"2604:4000:2000::/36", "32133"}, + {"2001:678:39c::/48", "29684"}, + {"2600:140b:5801::/38", "20940"}, + {"2800:160:1245::/46", "14259"}, + {"2804:7014::/32", "270704"}, + {"2806:2f0:4761::/40", "17072"}, + {"2a01:c50f:c500::/38", "12479"}, + {"2001:559:3b7::/48", "13367"}, + {"2001:678:c84::/48", "48655"}, + {"2001:49f0:a060::/44", "174"}, + {"2401:4900:5290::/44", "45609"}, + {"2600:1007:f010::/40", "22394"}, + {"2600:6c3a:e01::/46", "20115"}, + {"2a0b:6b86:3fc::/48", "202562"}, + {"2a0f:3106::/32", "49392"}, + {"2001:67c:78c::/48", "56531"}, + {"2408:8956:5100::/40", "17816"}, + {"2804:5a5c::/35", "268768"}, + {"2a03:6b00::/47", "48832"}, + {"2c0f:f050::/32", "327804"}, + {"2001:67c:2c44::/48", "49588"}, + {"2600:1404:ac00::/48", "35994"}, + {"2001:67c:2f24::/48", "25365"}, + {"2404:8600::/33", "17918"}, + {"2409:8052:2::/40", "56047"}, + {"240a:ae37::/32", "146289"}, + {"2800:160:111a::/42", "14259"}, + {"2800:a30:ed31::/35", "262187"}, + {"2804:14d:7e25::/43", "28573"}, + {"2a00:1b48::/32", "197695"}, + {"2a01:5a00::/32", "9208"}, + {"2001:559:8775::/48", "7725"}, + {"2620:11d:9002:300::/53", "33186"}, + {"2804:33cc::/32", "28656"}, + {"2804:5d5c::/32", "268967"}, + {"2a02:6a0:cffe::/47", "8729"}, + {"2a0b:b87:ffe8::/48", "44754"}, + {"2001:250:84a::/48", "138182"}, + {"240a:ad71::/32", "146091"}, + {"240e:964:800::/37", "133774"}, + {"2605:de40:a000::/33", "397553"}, + {"2001:559:4d9::/48", "7015"}, + {"2400:a980:e6::/44", "133111"}, + {"2401:d800:7d50::/42", "7552"}, + {"2402:800:91b7::/41", "7552"}, + {"2600:6c10:f306::/47", "20115"}, + {"2603:c028::/35", "31898"}, + {"2620:149:ac1::/46", "714"}, + {"2a02:26f7:c5cc::/48", "36183"}, + {"2a0c:b180::/29", "16019"}, + {"2a0f:a00::/32", "396362"}, + {"2001:559:835c::/48", "33657"}, + {"2001:df2:6000::/48", "58392"}, + {"2409:8054:4d::/46", "56040"}, + {"2a02:a00::/44", "15987"}, + {"2a03:4b20:f000::/36", "3209"}, + {"2404:8000:b0::/46", "17451"}, + {"2a02:26f7:f794::/48", "36183"}, + {"2001:559:8161::/48", "33657"}, + {"2001:938:402c::/46", "8437"}, + {"2620:107:6000:1601::/44", "6462"}, + {"2803:da20:100::/40", "265855"}, + {"2804:f4c::/32", "263578"}, + {"2804:11e8::/32", "52752"}, + {"2001:891::/29", "8447"}, + {"2400:7400:30::/46", "23736"}, + {"2804:14c:5fd5::/44", "28573"}, + {"2a00:1d58:bf00::/33", "47524"}, + {"2001:559:19:e000::/64", "20940"}, + {"2001:559:8315::/48", "7015"}, + {"2001:4878:2136::/48", "12222"}, + {"2401:d800:9dc0::/42", "7552"}, + {"2402:23c0::/32", "137210"}, + {"2408:84f3:e210::/42", "134543"}, + {"2804:759c::/35", "271058"}, + {"2a10:4741:24::/48", "213327"}, + {"2001:4978::/44", "19255"}, + {"2409:804f:100::/36", "9808"}, + {"2801:88::/32", "53166"}, + {"2408:8459:7c50::/38", "17816"}, + {"2409:8020:1071::/40", "56046"}, + {"2804:6a5c:8000::/40", "270331"}, + {"2a02:26f7:bb44::/47", "36183"}, + {"2a06:7600::/29", "44205"}, + {"2001:df2:380::/48", "138296"}, + {"2a06:9cc7:ff11::/46", "8666"}, + {"2001:7fb:fe00::/47", "12654"}, + {"2402:7d80:240::/48", "24348"}, + {"2404:0:5006::/36", "17709"}, + {"2405:8a00:a01c::/47", "55824"}, + {"2604:30c0::/32", "395880"}, + {"2620:74:a0::/48", "30060"}, + {"2406:3000:8:4030::/60", "9874"}, + {"240e:397:c00::/38", "140489"}, + {"2804:6008::/32", "269141"}, + {"2804:7d18::/32", "271538"}, + {"2001:559:8580::/48", "7015"}, + {"2402:800:542b::/41", "7552"}, + {"240a:ab7d::/32", "145591"}, + {"2a00:a000::/32", "35332"}, + {"2001:16a2:c390::/44", "39891"}, + {"240a:a410::/32", "143690"}, + {"2600:6c3b:498::/41", "20115"}, + {"2607:f938::/32", "40028"}, + {"2804:21ac::/32", "264566"}, + {"2a00:1ca8:2c::/48", "206264"}, + {"2a0c:6fc0::/40", "198755"}, + {"2001:da8:901b::/45", "23910"}, + {"240a:a9ed::/32", "145191"}, + {"2800:bf0:2c6::/48", "27947"}, + {"2806:267:3400::/41", "13999"}, + {"2a00:f820::/29", "34549"}, + {"2001:559:8232::/48", "7922"}, + {"2001:559:87fd::/48", "7922"}, + {"240a:aaae::/32", "145384"}, + {"2604:900::/32", "14477"}, + {"2804:930::/32", "263057"}, + {"2804:62bc::/32", "269315"}, + {"2a02:26f0:85::/46", "20940"}, + {"2a0e:97c0:620::/44", "210562"}, + {"2409:804d:1900::/34", "9808"}, + {"2600:100f:f000::/44", "6167"}, + {"2604:880:41::/48", "29802"}, + {"2607:fa58::/32", "31877"}, + {"2001:678:890::/48", "33958"}, + {"2409:8000:900::/37", "9808"}, + {"240a:aed8::/32", "146450"}, + {"2804:650::/32", "262558"}, + {"2a03:540::/32", "34718"}, + {"2001:67c:2b94::/48", "62463"}, + {"240e:187::/25", "4134"}, + {"240e:979:7e00::/40", "134770"}, + {"2804:3e8:2100::/32", "28663"}, + {"2804:65fc::/32", "269526"}, + {"2804:8114::/32", "272430"}, + {"2a09:2701::/32", "208187"}, + {"2a0c:4300::/41", "43722"}, + {"2a0f:9400:7830::/47", "147028"}, + {"2001:4998:1c::/48", "14779"}, + {"2401:c80::/32", "24111"}, + {"2404:3d00:400e::/41", "3573"}, + {"240a:a8e6::/32", "144928"}, + {"2800:9b0::/32", "52342"}, + {"2804:85dc::/32", "272605"}, + {"2001:559:8537::/48", "33491"}, + {"2a02:26f7:6e::/48", "36183"}, + {"2408:84f3:3290::/37", "17816"}, + {"2600:809:425::/38", "701"}, + {"2a01:5b0:2::/48", "48519"}, + {"2a05:1940::/29", "203243"}, + {"2001:559:cc::/48", "33657"}, + {"2001:559:376::/48", "33651"}, + {"2402:800:63b1::/41", "7552"}, + {"2402:800:9271::/40", "7552"}, + {"2403:1280::/32", "141397"}, + {"2a02:1c8:700::/40", "41704"}, + {"2a02:26f7:f101::/46", "20940"}, + {"2a0b:d7c0::/29", "47237"}, + {"2407:ad80::/32", "45062"}, + {"2409:8062:100::/36", "9808"}, + {"240a:a820::/32", "144730"}, + {"240e:108:1290::/44", "17638"}, + {"240e:45c:1b00::/40", "137401"}, + {"2600:1014:b1a0::/41", "6167"}, + {"2600:1417:58:200::/45", "20940"}, + {"2604:4d40:70ae::/48", "399196"}, + {"2804:39c0::/32", "266048"}, + {"2804:42e4::/32", "267535"}, + {"2a10:78c0::/29", "212559"}, + {"2001:559:82b3::/45", "7922"}, + {"2001:678:16:8000::/49", "42385"}, + {"2a03:2880:f170::/40", "32934"}, + {"2001:559:18c::/46", "33651"}, + {"2001:1900:2264::/48", "27564"}, + {"2406:e940::/35", "9449"}, + {"2407:a580::/32", "4851"}, + {"240a:a0c5::/32", "142847"}, + {"2800:b70:100::/48", "262191"}, + {"2804:10b4:200::/32", "263645"}, + {"2a02:26f7:b800::/48", "36183"}, + {"2a0c:9a40:1017::/48", "202479"}, + {"2001:1238::/32", "22566"}, + {"2401:d800:7370::/40", "7552"}, + {"2620:10d:1000::/44", "5719"}, + {"2800:370:87::/42", "28006"}, + {"2801:0:220::/44", "262156"}, + {"2804:4f8:2000::/36", "28263"}, + {"2804:4c14:9b01::/34", "267348"}, + {"2a02:fe8::/31", "39686"}, + {"2a04:cc0::/29", "29075"}, + {"2a09:7:1::/48", "23959"}, + {"2620:0:6c4::/48", "16807"}, + {"2806:2f0:21e3::/43", "17072"}, + {"2a02:2698:8000::/44", "41682"}, + {"2a05:7c40::/30", "55222"}, + {"2001:da8:5080::/36", "23910"}, + {"240e:3b9:ec00::/35", "140314"}, + {"2a0d:8d07:115::/44", "207616"}, + {"2001:559:7cc::/48", "33650"}, + {"2610:a1:1018::/48", "397226"}, + {"2a04:e00:4::/48", "54103"}, + {"2a0c:fd80::/29", "202334"}, + {"2001:559:16a::/48", "33657"}, + {"2001:559:c4da::/45", "7922"}, + {"2001:ee0:9040::/39", "45899"}, + {"240a:a661::/32", "144283"}, + {"2602:80c::/47", "14618"}, + {"2001:c00:facf::/37", "4618"}, + {"240a:a149::/32", "142979"}, + {"2001:678:f44::/48", "203329"}, + {"2402:8100:31e8::/36", "55644"}, + {"2404:bf40:8584::/48", "7545"}, + {"240a:a276::/32", "143280"}, + {"2800:bf0:2a07::/48", "52257"}, + {"2001:b98::/29", "5413"}, + {"2001:4408:5203::/42", "4758"}, + {"2402:800:73c0::/42", "7552"}, + {"2a02:1710:2::/48", "42775"}, + {"2a11:c480::/29", "204790"}, + {"2605:6ac0:7000::/36", "12182"}, + {"2620:138:5000::/44", "13925"}, + {"2a07:3501:1010::/48", "1136"}, + {"2402:800:fdf0::/38", "7552"}, + {"2404:7180:aa10::/48", "23848"}, + {"2600:1408:2001::/36", "20940"}, + {"2600:6c10:f316::/44", "20115"}, + {"2800:160:1f63::/43", "14259"}, + {"2804:c04::/32", "52660"}, + {"2804:4250::/32", "267492"}, + {"2408:8956:5200::/40", "17622"}, + {"240a:a14d::/32", "142983"}, + {"2600:6c20:2::/44", "20115"}, + {"2607:f138::/32", "19151"}, + {"2620:4b:c000::/46", "29921"}, + {"2804:1424::/32", "52940"}, + {"2a03:8b60:10::/45", "29256"}, + {"2001:df0:245::/48", "132020"}, + {"240e:1d:5000::/30", "4134"}, + {"240e:438:8420::/43", "140647"}, + {"2804:4850:200::/32", "267113"}, + {"2804:7680::/32", "271116"}, + {"2a00:15a0::/32", "201577"}, + {"2a0d:adc0::/29", "60843"}, + {"2001:1a00::/32", "15412"}, + {"2401:2400:a::/32", "38496"}, + {"2404:a800:ff02::/30", "9498"}, + {"240a:a35e::/32", "143512"}, + {"2600:8807:aaf4::/39", "22773"}, + {"2804:4e30::/32", "268245"}, + {"2a02:26f7:f301::/46", "20940"}, + {"2a0d:2581:12::/48", "209261"}, + {"2a0f:900::/29", "15435"}, + {"2c0f:f1f0::/32", "328242"}, + {"2001:559:c429::/48", "7725"}, + {"2402:ef03:2001::/40", "7633"}, + {"2408:8000:a021::/35", "4837"}, + {"2607:f140:a001::/33", "25"}, + {"2607:f428:93f0::/37", "20115"}, + {"2804:7a54::/33", "271365"}, + {"2001:fb0:109f:13::/64", "7470"}, + {"240a:a222::/32", "143196"}, + {"240e:ff:c009::/48", "134773"}, + {"2001:1a11:69::/46", "8781"}, + {"2001:44b8:30ee::/48", "4739"}, + {"2407:b000:4011::/48", "45682"}, + {"240a:ac71::/32", "145835"}, + {"2604:7e00:31::/48", "399612"}, + {"2001:559:870c::/48", "33287"}, + {"2800:160:156a::/45", "14259"}, + {"2a04:b080::/29", "42343"}, + {"2001:4528:9580::/38", "18101"}, + {"2a0d:3841:1020::/48", "57629"}, + {"2a10:2f01:2aa::/48", "212995"}, + {"2001:4528:1000::/32", "18101"}, + {"2400:8b00:2000::/42", "45727"}, + {"2401:d800:57c0::/42", "7552"}, + {"2402:800:5c1d::/42", "7552"}, + {"2a02:bf0:2a::/35", "25106"}, + {"2a02:2e02:8930::/41", "12479"}, + {"2602:fe54:5001::/32", "16584"}, + {"2620:149:10a0::/39", "714"}, + {"2001:470:13f::/41", "6939"}, + {"2402:800:311d::/42", "7552"}, + {"2408:8957:7f00::/40", "17816"}, + {"2600:1417:66::/47", "24319"}, + {"2804:7ca4::/32", "271509"}, + {"2a00:4bc0::/37", "31004"}, + {"2a02:26f7:ec8d::/42", "20940"}, + {"2404:3dc0:1::/48", "138552"}, + {"240a:a9fd::/32", "145207"}, + {"240a:ae58::/32", "146322"}, + {"2001:559:c1a5::/48", "21508"}, + {"2401:2d00:22::/48", "17625"}, + {"2405:7f00:95a0::/38", "133414"}, + {"240e:a53:5c00::/34", "134419"}, + {"2600:6c10:146::/47", "20115"}, + {"2a02:7c20::/32", "201424"}, + {"2a06:8bc0::/29", "57103"}, + {"2406:f000::/32", "4844"}, + {"2408:8459:5a50::/37", "17816"}, + {"2408:8957:6700::/40", "17816"}, + {"240a:ab45::/32", "145535"}, + {"2600:380::/39", "20057"}, + {"2a00:cdc0::/32", "12586"}, + {"240a:a0e9::/32", "142883"}, + {"2600:c08:2016::/32", "10913"}, + {"2a0b:1306:4::/48", "198018"}, + {"2408:8956:c9c0::/38", "17622"}, + {"240e:698:4700::/40", "131325"}, + {"2a05:1080:30::/48", "61004"}, + {"2408:8459:3a10::/41", "17623"}, + {"240e:966:ec00::/35", "4134"}, + {"2604:ea40::/32", "13687"}, + {"2401:d800:7810::/41", "7552"}, + {"2408:8459:f150::/38", "17816"}, + {"240a:a776::/32", "144560"}, + {"2604:a180:6000::/32", "11139"}, + {"2a0f:607:1005::/48", "7480"}, + {"2001:df1:3700::/50", "136324"}, + {"240e:3:8002::/36", "134761"}, + {"2620:149:21c::/42", "714"}, + {"2804:6eec::/32", "270627"}, + {"2406:ea00::/32", "131322"}, + {"2408:8756:ce0::/39", "136958"}, + {"240a:a1c7::/32", "143105"}, + {"240e:438:6040::/38", "4134"}, + {"2600:1007:f008::/45", "6167"}, + {"2a02:26f7:d949::/42", "20940"}, + {"2a03:e340::/48", "28753"}, + {"2001:5000:f04::/30", "1273"}, + {"2409:802f:2b06::/48", "56041"}, + {"2600:6c7f:90d0::/48", "20115"}, + {"2605:2840::/32", "393763"}, + {"2804:3748::/32", "266401"}, + {"240a:a252::/32", "143244"}, + {"2600:100a:9000::/44", "6167"}, + {"2402:2200:2b00::/33", "24090"}, + {"240a:a8c2::/32", "144892"}, + {"2600:1012:f020::/40", "22394"}, + {"2600:370f:5243::/45", "32261"}, + {"2800:bf0:289::/43", "52257"}, + {"2804:5ac0::/32", "268793"}, + {"2a0e:3f40::/29", "43282"}, + {"2001:559:377::/48", "33657"}, + {"2001:678:540::/48", "16108"}, + {"2405:9800:c915::/46", "45458"}, + {"2600:1f70:2000::/40", "8987"}, + {"2a02:6c20:4::/48", "207167"}, + {"2a10:ce40::/48", "140224"}, + {"2408:8459:c030::/41", "17622"}, + {"240a:a671::/32", "144299"}, + {"2804:14c:d490::/48", "28573"}, + {"2804:297c::/32", "262907"}, + {"2804:82d8::/32", "272160"}, + {"2a00:e9e0::/32", "48670"}, + {"2a03:9420::/32", "9008"}, + {"2a0e:b107:15a8::/46", "142597"}, + {"2001:648:2801::/44", "5408"}, + {"240a:afe9::/32", "146723"}, + {"2605:b400:600::/32", "25956"}, + {"2620:ff:8000::/48", "22773"}, + {"2a02:ee80:40b2::/47", "21433"}, + {"2001:16a0:1::/46", "25019"}, + {"2408:8a07:6000::/37", "9929"}, + {"240e:41:c800::/30", "4134"}, + {"2804:3870::/32", "266477"}, + {"2a02:2e02:8b00::/41", "12479"}, + {"2a0f:7ac0::/29", "60154"}, + {"2406:840:eabf::/48", "142642"}, + {"2409:8000:5c00::/40", "56048"}, + {"240a:a0cf::/32", "142857"}, + {"2600:1901:8160::/34", "15169"}, + {"2800:800:7f7::/48", "26611"}, + {"2800:a10:2002::/32", "11014"}, + {"2a0a:a5c0:c::/46", "22787"}, + {"2a0b:1301::/34", "198018"}, + {"2001:559:c12c::/48", "7015"}, + {"2409:8c85:1a00::/48", "132525"}, + {"2a02:ee80:4178::/45", "3573"}, + {"2402:7500:468::/40", "24158"}, + {"2404:d940::/35", "134877"}, + {"2804:214:8658::/40", "26615"}, + {"2a06:9cc7:ff01::/46", "8666"}, + {"2001:250:800::/48", "138182"}, + {"2804:31f0::/32", "265046"}, + {"2a00:fb80::/48", "48918"}, + {"2a02:26f7:ba48::/48", "36183"}, + {"2a04:1f00::/30", "8416"}, + {"2a0e:c80:3::/48", "40676"}, + {"2402:800:3a71::/44", "7552"}, + {"2a06:c0c0::/47", "41018"}, + {"2a10:4646:10::/48", "212124"}, + {"240a:a6cc::/32", "144390"}, + {"2401:e300::/32", "23786"}, + {"2406:2000:ef64::/48", "45501"}, + {"2600:1406:9001::/38", "20940"}, + {"2001:df5:5100::/48", "34768"}, + {"2404:160:a040::/37", "10030"}, + {"240a:a631::/32", "144235"}, + {"2804:3c08::/32", "266186"}, + {"2a00:1430::/32", "24958"}, + {"2408:8957:2700::/36", "17816"}, + {"240a:ac89::/32", "145859"}, + {"2602:fe6d::/36", "64249"}, + {"2a01:a920::/32", "201866"}, + {"2001:502:f3ff::/48", "397226"}, + {"2600:6000:f97e::/48", "11351"}, + {"2804:3e78::/32", "266598"}, + {"2a01:82a0::/32", "61952"}, + {"2a06:a001:a010::/44", "208046"}, + {"2a12:dc00::/29", "204790"}, + {"2600:6c38:8d0::/47", "20115"}, + {"2a03:6947:1500::/40", "59819"}, + {"2402:800:98b7::/41", "7552"}, + {"2406:fe00::/32", "23616"}, + {"240e:438:1020::/43", "140647"}, + {"240e:980:9800::/40", "137698"}, + {"2602:fbf6::/40", "8095"}, + {"2605:6a80::/32", "27531"}, + {"2804:f8c:8890::/37", "263591"}, + {"2001:67c:1044::/48", "50609"}, + {"240e:95c:4000::/36", "4134"}, + {"2804:1ed8::/32", "264449"}, + {"2a02:26f7:f749::/46", "20940"}, + {"2001:4228::/32", "15706"}, + {"2600:9000:1e16::/47", "16509"}, + {"2804:7d4::/32", "262325"}, + {"2804:3b2c::/32", "266133"}, + {"2806:250:b::/48", "28545"}, + {"2a01:8840:59::/48", "207266"}, + {"2606:640::/48", "3356"}, + {"2800:690::/32", "3132"}, + {"2804:2860::/32", "263959"}, + {"2a12:a040::/29", "400522"}, + {"2600:1419:cc01::/35", "20940"}, + {"2001:559:1a0::/48", "7015"}, + {"2001:559:c0d6::/48", "7016"}, + {"240e:3b8:3e00::/33", "140308"}, + {"2804:329c::/32", "265088"}, + {"2a04:2ec0::/29", "60849"}, + {"2a09:87c0::/48", "59497"}, + {"240a:adfa::/32", "146228"}, + {"2806:20d:5a07::/44", "32098"}, + {"2001:dce:7001::/38", "23869"}, + {"2400:aa00:9300::/33", "9873"}, + {"2402:800:9ca9::/41", "7552"}, + {"2408:8459:7e30::/41", "17622"}, + {"2a00:8e80::/32", "200678"}, + {"2a0e:97c3:766::/48", "20473"}, + {"2001:4200:7001::/36", "2018"}, + {"2001:4878:8246::/48", "12222"}, + {"2804:33f4::/32", "265427"}, + {"2a00:1d58:f023::/45", "47524"}, + {"2602:fc85:ff0::/45", "398875"}, + {"2001:67c:106c::/48", "58102"}, + {"2607:cf03::/32", "32522"}, + {"2607:f750:a000::/40", "23473"}, + {"2a02:26f7:e340::/48", "36183"}, + {"240a:a2c2::/32", "143356"}, + {"240a:a461::/32", "143771"}, + {"2600:1404:6001::/37", "20940"}, + {"2804:6000::/32", "269139"}, + {"2402:2500:7100::/32", "13445"}, + {"2804:63b0::/32", "269377"}, + {"2a02:26f7:a8::/48", "36183"}, + {"2a0c:b381:800::/32", "204731"}, + {"2001:ee0:2f07::/43", "45899"}, + {"2409:8904:6070::/40", "24547"}, + {"2402:e280:2249::/43", "134674"}, + {"2406:7400:7::/44", "24309"}, + {"2408:8256:3160::/44", "17623"}, + {"2600:1406:9c01::/34", "20940"}, + {"2603:c002:9510::/38", "31898"}, + {"2605:380:aa1::/48", "42388"}, + {"2a02:26f0:a01::/37", "20940"}, + {"2a02:2ad0:619::/42", "702"}, + {"2001:559:8607::/48", "22909"}, + {"2001:5a0:4402::/48", "20940"}, + {"2405:3800::/32", "38466"}, + {"2804:1388::/30", "53037"}, + {"2001:678:c28::/48", "13195"}, + {"240a:a1d3::/32", "143117"}, + {"2600:1000:f100::/44", "6167"}, + {"2a03:4d45::/36", "199610"}, + {"2001:da8:402e::/47", "24353"}, + {"2604::/40", "7397"}, + {"2a10:2500::/29", "400522"}, + {"2600:809:629::/41", "701"}, + {"2600:140f:6000::/48", "55836"}, + {"2600:6c10:f02a::/41", "20115"}, + {"2608:c184:1::/48", "5927"}, + {"2800:160:144c::/47", "14259"}, + {"2801:1d:4800::/48", "13489"}, + {"2803:b9c0:9000::/36", "265705"}, + {"2804:3b8:1e4::/47", "52965"}, + {"2806:230:1008::/48", "265594"}, + {"2001:c28::/32", "4685"}, + {"2400:dd00::/31", "7497"}, + {"2409:8750:700::/36", "56047"}, + {"240a:a8d6::/32", "144912"}, + {"240c:c603::/32", "24361"}, + {"2600:1404:5401::/36", "20940"}, + {"2606:c40::/32", "32913"}, + {"2a02:1065:1000::/36", "13045"}, + {"2a03:3180:4000::/36", "44453"}, + {"2800:c90::/32", "263689"}, + {"2a06:1280:ae03::/33", "61138"}, + {"2a09:38c0::/29", "30823"}, + {"2001:1248:59e8::/45", "11172"}, + {"240e:355:5c00::/34", "134419"}, + {"2803:f8c0::/32", "264750"}, + {"2a02:2ad0:133::/45", "702"}, + {"2407:a9c0::/32", "142356"}, + {"2604:d600:627::/44", "32098"}, + {"2806:2f0:46a1::/46", "17072"}, + {"2001:559:c51b::/42", "7922"}, + {"2606:6800:1800::/40", "394899"}, + {"2804:4ac0::/32", "267261"}, + {"2a04:4e00::/29", "24651"}, + {"240a:af6a::/32", "146596"}, + {"2620:149:a1d::/48", "714"}, + {"2001:559:404::/48", "7922"}, + {"2001:559:c4bb::/48", "7922"}, + {"240a:a3aa::/32", "143588"}, + {"240e:438:a220::/43", "140647"}, + {"2600:6c38:b1f::/42", "20115"}, + {"2804:4154::/32", "52806"}, + {"2a02:26f7:fb00::/48", "36183"}, + {"2a04:4e40:9000::/48", "54113"}, + {"2001:1248:997a::/40", "11172"}, + {"2404:7c00:3::/44", "45650"}, + {"2a04:5b80:53::/48", "202265"}, + {"2001:470:9c::/48", "54972"}, + {"2001:67c:1394::/48", "199351"}, + {"240a:a141::/32", "142971"}, + {"240a:a294::/32", "143310"}, + {"240a:ae80::/32", "146362"}, + {"2602:80c:4::/48", "14618"}, + {"2605:4c40:202::/44", "30081"}, + {"2607:8300:4::/48", "13876"}, + {"2804:3ed0::/35", "266622"}, + {"240a:a27b::/32", "143285"}, + {"2607:ca00:8000::/33", "7122"}, + {"2800:bf0:81cd::/42", "27947"}, + {"2804:6a28::/32", "270316"}, + {"2806:230:204b::/48", "11888"}, + {"2001:559:84a8::/48", "33491"}, + {"240e:945::/36", "136195"}, + {"2604:d600:1659::/36", "32098"}, + {"2a0a:6680:bee5::/46", "203500"}, + {"2a0b:de00:30::/47", "207486"}, + {"240a:a230::/32", "143210"}, + {"2800:160:1d76::/44", "14259"}, + {"2806:2f0:4161::/46", "17072"}, + {"2a01:aa40::/32", "59622"}, + {"2001:df3:da00::/48", "132134"}, + {"2804:574::/45", "53013"}, + {"2804:5248::/32", "268508"}, + {"2001:250:3431::/46", "138393"}, + {"2001:44b8:204f::/48", "4739"}, + {"2620:11d:6000::/42", "30548"}, + {"2800:bf0:16e::/48", "27947"}, + {"2804:27e4::/32", "263927"}, + {"2804:67dc::/32", "269655"}, + {"2804:6bc8::/32", "270425"}, + {"2a09:8d00::/29", "2593"}, + {"2400:4d40:309::/35", "134204"}, + {"2603:c002:9a10::/42", "31898"}, + {"2607:f6f0:20d::/48", "32323"}, + {"2a0e:8a00::/29", "208256"}, + {"2001:67c:2394::/48", "25504"}, + {"2402:800:9155::/42", "7552"}, + {"2408:8256:2f6e::/43", "17623"}, + {"2408:8256:359f::/38", "17816"}, + {"2607:fdf0:5e35::/44", "8008"}, + {"2a02:26f7:c748::/48", "36183"}, + {"2400:cb00:100::/48", "13335"}, + {"2401:c5c0:440::/36", "55492"}, + {"2a02:888:4054::/32", "47794"}, + {"2a0b:e680::/29", "49601"}, + {"2a0f:4ac4::/41", "207671"}, + {"2a10:300::/29", "207367"}, + {"2401:cf80:61fa::/32", "55303"}, + {"2806:230:200b::/48", "11888"}, + {"2a02:2230:6400::/40", "25467"}, + {"2a03:7740::/32", "39232"}, + {"2a0a:1980::/29", "206782"}, + {"2001:559:8434::/48", "7015"}, + {"240a:ab0b::/32", "145477"}, + {"2600:140b:7c01::/32", "20940"}, + {"2600:6c38:177::/44", "20115"}, + {"2605:8300:12::/48", "33059"}, + {"2605:a401:8cd7::/42", "33363"}, + {"2804:60::/42", "53066"}, + {"2804:7764::/32", "271175"}, + {"2a02:26f7:ed48::/48", "36183"}, + {"2001:c38:90a3::/45", "9835"}, + {"2401:e800::/32", "24173"}, + {"2620:d:e000::/48", "395661"}, + {"2806:230:1300::/45", "265594"}, + {"2a03:34a0::/32", "59817"}, + {"2a0c:4200::/29", "48112"}, + {"2408:8456:6600::/42", "17622"}, + {"2620:12e:1002::/44", "396075"}, + {"2804:4c14:ba01::/39", "267348"}, + {"2001:19e8::/46", "2576"}, + {"240c:ca13::/29", "24363"}, + {"2001:559:873a::/45", "7015"}, + {"2001:559:82c4::/48", "7922"}, + {"2001:678:760::/48", "50472"}, + {"2804:104c:800::/40", "263629"}, + {"2804:27d0::/32", "53162"}, + {"2804:3bac:1100::/33", "266164"}, + {"2001:12f0:640::/39", "1916"}, + {"2409:8c50:ffff::/48", "9808"}, + {"2804:5f28::/32", "269080"}, + {"2a00:7660::/29", "60876"}, + {"2a01:4a0::/44", "201011"}, + {"2a06:98c0:3600::/44", "132892"}, + {"2605:a1c0::/35", "11738"}, + {"2a09:9441::/32", "49981"}, + {"2001:678:a64::/48", "198423"}, + {"240a:a98d::/32", "145095"}, + {"2604:d600:cab::/35", "32098"}, + {"2a00:7a60::/32", "200000"}, + {"2a0b:3cc0::/29", "48147"}, + {"2001:4ca0::/29", "12816"}, + {"2602:feda:d63::/45", "212034"}, + {"2804:2174::/32", "264555"}, + {"2a0f:5707:ab25::/48", "201106"}, + {"240a:a6e8::/32", "144418"}, + {"2800:ba0:18::/48", "263812"}, + {"2804:4a64::/32", "267237"}, + {"2001:67c:276c::/48", "50622"}, + {"2401:d800:fd00::/42", "7552"}, + {"2605:1600::/32", "17143"}, + {"2806:320:200::/39", "28438"}, + {"2a02:2e0:41c::/48", "206564"}, + {"2a0b:33c0:10::/48", "57395"}, + {"240a:400b::/33", "58834"}, + {"240a:afc2::/32", "146684"}, + {"2804:2c44::/32", "265207"}, + {"2a0b:72c0::/32", "60522"}, + {"2a0e:b107:1950::/47", "207705"}, + {"2a12:32c0::/29", "206430"}, + {"2001:559:c207::/48", "33651"}, + {"240e:5f:6004::/44", "4134"}, + {"2600:100a:f000::/44", "6167"}, + {"2600:9000:119c::/42", "16509"}, + {"2804:e0c:1c0::/48", "28176"}, + {"2804:84c8::/32", "272281"}, + {"2409:8028:1900::/37", "9808"}, + {"2a02:26f7:a9::/48", "20940"}, + {"2a02:e240::/29", "20676"}, + {"2a10:3940::/29", "204790"}, + {"2001:67c:2f84::/48", "44496"}, + {"2404:e801:1020::/34", "55430"}, + {"2408:840d:5200::/42", "17621"}, + {"240a:abd6::/32", "145680"}, + {"2400:9100::/48", "45552"}, + {"2620:1d5:650::/40", "14773"}, + {"2a02:26f7:c806::/47", "20940"}, + {"2a0a:ca00::/32", "207038"}, + {"2a05:8943::/29", "3356"}, + {"2001:559:8648::/47", "33491"}, + {"2001:dcc:6::/48", "131100"}, + {"2001:19f0:a08::/48", "46407"}, + {"240a:abd2::/32", "145676"}, + {"2600:1404:d801::/37", "20940"}, + {"2a04:e00:2::/48", "3257"}, + {"2001:4408:6700::/47", "55824"}, + {"2402:3a80:1300::/41", "38266"}, + {"2a12:4946:46::/48", "211398"}, + {"2804:6aac::/32", "270352"}, + {"2a01:5040:2001::/42", "43996"}, + {"2a02:2668:3a00::/33", "16345"}, + {"2a02:26f0:4601::/39", "20940"}, + {"2a02:26f7:c085::/46", "20940"}, + {"2001:1478:1100::/48", "27385"}, + {"240a:a5fd::/32", "144183"}, + {"2803:ce0::/32", "269897"}, + {"2804:677c::/32", "269631"}, + {"2a0b:b87:ff12::/48", "210718"}, + {"2001:44b8:4042::/47", "4739"}, + {"2404:1980::/32", "131199"}, + {"2804:4ff8::/32", "268361"}, + {"2a02:26f0:b901::/38", "20940"}, + {"2a0b:740::/29", "200599"}, + {"2604:9b00:2801::/48", "14230"}, + {"2606:2600::/32", "27425"}, + {"2803:5010::/32", "271803"}, + {"2001:250:7817::/44", "24372"}, + {"2400:cb00:a580::/47", "13335"}, + {"240a:ad7c::/32", "146102"}, + {"2602:10e:1a::/47", "20115"}, + {"2604:bc40:6110::/48", "14618"}, + {"2a09:4c0:aee1::/30", "58057"}, + {"2606:7800::/32", "11598"}, + {"2804:7a6c::/32", "271370"}, + {"2a0b:b87:ffb0::/48", "16509"}, + {"2806:230:302d::/48", "11888"}, + {"2001:470:139::/48", "46997"}, + {"2001:559:8140::/47", "33657"}, + {"2001:559:848c::/48", "7015"}, + {"2405:77c0::/32", "139449"}, + {"2409:8904:67b0::/36", "24547"}, + {"2a0b:6c81::/32", "16509"}, + {"2001:678:e48::/48", "61232"}, + {"2409:806c:2900::/35", "9808"}, + {"2800:b10::/48", "27884"}, + {"2804:7d28::/32", "271543"}, + {"2a03:d60:1::/48", "42503"}, + {"2a11:5d80::/29", "204790"}, + {"2001:428:b26::/48", "10753"}, + {"2001:1248:a4dc::/47", "11172"}, + {"2402:800:3501::/44", "7552"}, + {"2a00:4760::/32", "39217"}, + {"2c0e:7f80::/38", "36974"}, + {"2001:559:c359::/48", "7922"}, + {"2001:6d0:4005::/48", "57503"}, + {"2607:480::/32", "396443"}, + {"2a00:4802:2200::/40", "13124"}, + {"2a02:26f7:116::/48", "36183"}, + {"2001:559:5f6::/48", "33651"}, + {"2001:559:804e::/48", "33287"}, + {"2401:d800:7b0::/41", "7552"}, + {"2407:4000:5::/32", "38005"}, + {"2409:8c04:1111::/45", "24547"}, + {"2001:559:8517::/48", "33491"}, + {"2001:1248:a428::/43", "11172"}, + {"2803:2110::/32", "271987"}, + {"2a01:bf20::/32", "39608"}, + {"2a02:d78::/32", "44819"}, + {"2a09:e9c0::/29", "209181"}, + {"2a0e:b107:1880::/44", "210633"}, + {"2001:4e0:1009::/43", "2381"}, + {"2001:12f0:740::/40", "1916"}, + {"2001:4b20:100:667::/64", "65505"}, + {"2408:8001:f000::/36", "4837"}, + {"240a:a31f::/32", "143449"}, + {"2610:b0:40ee::/47", "21433"}, + {"2801:80:22a0::/48", "262654"}, + {"2804:40c0::/32", "265979"}, + {"2001:579:9194::/42", "22773"}, + {"2001:678:320::/48", "206613"}, + {"240e:100::/42", "4134"}, + {"2607:5a80::/32", "11847"}, + {"2a06:3000::/36", "28715"}, + {"2400:ea00:3560::/47", "23884"}, + {"2403:da00::/32", "3382"}, + {"2602:fce2::/36", "398874"}, + {"2620:11:a::/47", "10934"}, + {"2a0b:6380::/29", "206318"}, + {"2a10:e2c0::/29", "211441"}, + {"2001:67c:25bc::/48", "198008"}, + {"2401:d800:f6d0::/42", "7552"}, + {"2606:4a00:fff2::/44", "33154"}, + {"2804:73b4:4000::/32", "270932"}, + {"2402:800:5b71::/44", "7552"}, + {"2602:80c:a000::/40", "46969"}, + {"2001:df0:314::/46", "140592"}, + {"2404:c140:2597::/32", "138997"}, + {"240e:44d:380::/41", "4134"}, + {"2605:a401:82aa::/43", "33363"}, + {"2001:678:c44::/48", "209718"}, + {"2406:840:5100::/47", "139317"}, + {"2409:8924:8300::/37", "56046"}, + {"2602:fc26:a::/48", "211562"}, + {"2607:fb10:5015::/46", "2906"}, + {"2c0f:f338::/32", "327983"}, + {"2001:43f8:de0::/48", "328213"}, + {"240a:ab53::/32", "145549"}, + {"240e:982:d900::/37", "4134"}, + {"2600:6c2e:c44::/40", "20115"}, + {"2605:dd40:8570::/44", "16509"}, + {"2804:2344::/32", "264152"}, + {"2804:5bf8::/32", "268880"}, + {"2a00:6900::/47", "20926"}, + {"2a04:ac00:6::/48", "56534"}, + {"2001:559:75f::/48", "7922"}, + {"2001:67c:2e68::/47", "62217"}, + {"2a04:2140::/29", "199283"}, + {"2408:8956:12c0::/39", "17816"}, + {"2607:f7c0:c000::/40", "6188"}, + {"2a02:26f7:e4c4::/48", "36183"}, + {"2001:559:80fa::/48", "33489"}, + {"2001:df4:5300::/48", "137469"}, + {"240e:355:6400::/30", "4134"}, + {"2806:2f0:1381::/34", "17072"}, + {"2a00:dac0::/32", "197765"}, + {"2a01:4020:7::/43", "25369"}, + {"2a02:26f7:e381::/46", "20940"}, + {"2001:250:4007::/48", "23910"}, + {"2001:c20:7c00::/32", "3758"}, + {"2404:ba00::/47", "17665"}, + {"2409:8051:900::/37", "9808"}, + {"2803:9a00::/32", "262239"}, + {"2804:3cf8::/32", "266245"}, + {"2a0b:bc0::/29", "62455"}, + {"2001:559:c05d::/48", "33491"}, + {"2400:be00::/48", "4847"}, + {"2401:d800:6000::/35", "7552"}, + {"2403:7f40:e000::/48", "211622"}, + {"2600:1006:9150::/36", "22394"}, + {"2a03:ca0::/32", "59984"}, + {"2a05:8880::/46", "34304"}, + {"2001:c38:9083::/43", "9931"}, + {"2408:8456:7c40::/39", "17816"}, + {"2600:140f:4a00::/48", "9498"}, + {"2804:808c:b000::/33", "271758"}, + {"2804:8344::/32", "272187"}, + {"2001:3b8::/32", "2527"}, + {"2405:6600:601::/39", "45845"}, + {"2604:d8c0::/32", "46280"}, + {"2605:3b80:1::/48", "9009"}, + {"2001:43f8:120::/48", "37177"}, + {"2409:805f:1100::/36", "9808"}, + {"240a:a2c6::/32", "143360"}, + {"2806:2f0:2143::/43", "22884"}, + {"2a0d:1780::/29", "12570"}, + {"2001:559:c1c2::/48", "33490"}, + {"2602:800:9007::/48", "26710"}, + {"2605:4280::/32", "12189"}, + {"2804:69fc:500::/32", "270304"}, + {"2a0e:f600:2e::/41", "60781"}, + {"2a0f:5840::/44", "39192"}, + {"2401:d800:302::/42", "7552"}, + {"2403:3540::/32", "137370"}, + {"240a:a225::/32", "143199"}, + {"240a:aa0f::/32", "145225"}, + {"2a00:1358::/35", "6866"}, + {"2400:a980:1100::/38", "133111"}, + {"2402:800:9d71::/40", "7552"}, + {"2402:4f00:9000::/33", "58453"}, + {"2804:6a38:7000::/36", "270320"}, + {"2a01:710::/32", "34968"}, + {"2a0c:5540:134::/32", "204020"}, + {"2001:4818:6000::/36", "603"}, + {"2603:f608::/27", "397165"}, + {"2a01:870::/32", "21334"}, + {"2a02:26f7:b5c5::/46", "20940"}, + {"2a0b:b87:ffb6::/48", "207649"}, + {"2001:678:f84::/48", "197942"}, + {"2400:adc0:4110::/47", "9541"}, + {"2402:800:990f::/43", "7552"}, + {"2605:a40c::/44", "33363"}, + {"2607:ff48::/32", "8100"}, + {"2804:e94:300::/42", "262468"}, + {"2804:3610::/32", "266324"}, + {"2804:6f2c::/32", "270643"}, + {"2402:800:94fe::/39", "7552"}, + {"2408:80fa:62c0::/42", "17622"}, + {"240a:a2bd::/32", "143351"}, + {"2804:2308::/33", "264138"}, + {"2001:250:849::/48", "23910"}, + {"2406:6e00::/39", "17457"}, + {"2409:8c4c:c01::/38", "9808"}, + {"2a0d:77c7:33c6::/33", "7489"}, + {"240e:14:a000::/31", "4134"}, + {"2804:1b0:8000::/36", "18881"}, + {"2a06:fb40::/33", "203385"}, + {"2a07:e342::/32", "49981"}, + {"2001:57a:504::/48", "22773"}, + {"2404:a140:1d::/48", "138915"}, + {"240e:e:a800::/37", "17633"}, + {"240e:3bf:3e00::/33", "140308"}, + {"2001:550:9201::/46", "174"}, + {"2602:80d:2000::/47", "400274"}, + {"2605:8200::/32", "19653"}, + {"2804:14c:bfe0::/43", "28573"}, + {"2804:7230::/32", "270838"}, + {"2a0f:9980:936::/48", "40676"}, + {"2001:710::/32", "8419"}, + {"2001:1a11:130::/48", "8781"}, + {"2409:8924:8d00::/38", "56046"}, + {"2603:f790::/26", "397165"}, + {"2620:171:23::/48", "42"}, + {"2001:938::/34", "8437"}, + {"2409:8915:6200::/35", "56044"}, + {"2600:1480:801::/37", "20940"}, + {"2604:f440:7::/44", "397423"}, + {"2607:f6f0:3000::/48", "19930"}, + {"2620:108:d000::/44", "8987"}, + {"2a0f:8641:b00b::/48", "212149"}, + {"2001:49f0:a01a::/47", "174"}, + {"2a00:c040::/32", "8749"}, + {"2001:1248:557c::/40", "11172"}, + {"2804:5594::/34", "267943"}, + {"2804:6f68::/32", "270658"}, + {"2804:7c14:8000::/33", "271474"}, + {"2a00:bec7:ff00::/40", "12946"}, + {"2a02:26f7:d085::/46", "20940"}, + {"2a0f:b100:40::/48", "211672"}, + {"2409:8904:30a0::/38", "24547"}, + {"2408:8026:b0::/41", "17621"}, + {"2806:2f0:8223::/39", "17072"}, + {"2803:aa60::/32", "267882"}, + {"2804:13b0:ec00::/48", "263546"}, + {"2804:21bc::/38", "264570"}, + {"2804:82dc::/32", "272161"}, + {"2001:250:2000::/43", "24355"}, + {"2401:fd80:8ff::/39", "138177"}, + {"2402:4e00:4012::/32", "45090"}, + {"2804:14c:c692::/41", "28573"}, + {"2804:14d:4c95::/42", "28573"}, + {"2804:41fc::/32", "267470"}, + {"2a03:2880:f01a::/45", "32934"}, + {"2001:678:d08::/48", "213376"}, + {"240a:ae97::/32", "146385"}, + {"2606:62c0:180::/46", "399686"}, + {"2620:137:1000::/40", "398535"}, + {"2804:767c::/32", "271115"}, + {"2a0b:6c40::/29", "8540"}, + {"2c0f:f020:100::/38", "327907"}, + {"2001:559:5b6::/48", "33287"}, + {"2406:9300::/32", "38506"}, + {"2605:bd40::/32", "22608"}, + {"2803:9f20::/32", "266780"}, + {"2804:cb0:a500::/36", "52742"}, + {"2a03:98c0::/32", "15814"}, + {"2a0c:93c0:8060::/48", "212465"}, + {"2001:559:c505::/48", "33657"}, + {"240a:abfb::/32", "145717"}, + {"240e:698:2100::/40", "4811"}, + {"2600:8807:9a82::/37", "22773"}, + {"2a04:bd80::/29", "52004"}, + {"2a09:bac0:376::/48", "13335"}, + {"2001:559:854e::/48", "33491"}, + {"2602:fc23:161::/48", "149424"}, + {"2a02:26f7:c1c8::/48", "36183"}, + {"2001:1248:553f::/41", "11172"}, + {"2408:80f1:1b0::/44", "17621"}, + {"2600:e00f:4000::/45", "22995"}, + {"2800:3a0::/47", "23201"}, + {"2804:9a8:8000::/33", "262979"}, + {"2a0a:340:e300::/40", "56807"}, + {"2a0e:b107:30f::/48", "134666"}, + {"2400:1240::/32", "64098"}, + {"2401:fdc0:20::/32", "137074"}, + {"2404:640::/32", "131262"}, + {"2406:3000:2b::/45", "4657"}, + {"240a:a0a2::/32", "142812"}, + {"2001:da8:d846::/37", "23910"}, + {"240e:438:a640::/36", "4134"}, + {"2600:370f:726b::/45", "32261"}, + {"2600:6c38:61b::/45", "20115"}, + {"2800:26c::/32", "19429"}, + {"2804:1b1:b680::/41", "10429"}, + {"2804:1938::/32", "262752"}, + {"2a03:9800::/29", "8916"}, + {"2a0f:b4c6::/32", "15317"}, + {"2001:559:c10f::/48", "7015"}, + {"2a02:26f7:c789::/46", "20940"}, + {"2406:f040:c8::/48", "131775"}, + {"2408:8957:b500::/40", "17816"}, + {"2604:c5c0:100::/38", "29727"}, + {"2604:fa00::/32", "32278"}, + {"2620:171:29::/48", "715"}, + {"2604:5500:4000::/38", "19165"}, + {"2607:fb10:2053::/33", "2906"}, + {"2401:95c0:f001::/48", "206729"}, + {"2602:fce8::/36", "395823"}, + {"2607:3a80::/42", "395100"}, + {"2806:106e:18::/42", "8151"}, + {"2a02:26f7:5c::/48", "36183"}, + {"2a0b:6900:4::/46", "206873"}, + {"2001:df5:3d00::/48", "136312"}, + {"2400:cb00:a7d0::/46", "13335"}, + {"2404:92c0:233::/48", "48024"}, + {"240e:3b9:1800::/34", "4134"}, + {"2602:fe90:810::/48", "35913"}, + {"2a05:1240::/29", "201809"}, + {"2a05:c440::/48", "47645"}, + {"2a01:8840:ca::/45", "12041"}, + {"2a0e:1cc1::/47", "207960"}, + {"2001:559:8285::/48", "7015"}, + {"2001:67c:2f6c::/48", "15626"}, + {"2a0f:e143::/32", "60781"}, + {"2001:4dd0::/29", "8422"}, + {"2a02:ee80:4264::/43", "3573"}, + {"2a0e:aa01::/35", "206499"}, + {"2001:fd8:1a8::/41", "4775"}, + {"240a:a36f::/32", "143529"}, + {"2605:ab80::/32", "46792"}, + {"2607:fdf8:dd::/39", "13649"}, + {"2a03:ec00:ba00::/33", "12847"}, + {"2402:800:f922::/40", "7552"}, + {"2600:1f01:4850::/47", "16509"}, + {"2602:fe55::/36", "267"}, + {"2001:4288:102::/38", "6713"}, + {"2401:ee00:b2c::/35", "23951"}, + {"2405:8a00:8022::/44", "55824"}, + {"2602:80d:4000::/40", "11511"}, + {"2602:fe64:4::/44", "396881"}, + {"2804:204:219::/46", "28186"}, + {"2001:559:c213::/48", "33650"}, + {"2001:da8:26b::/45", "133111"}, + {"2a02:200::/32", "24889"}, + {"2a0a:54c1:5::/44", "62240"}, + {"2a0d:6500::/29", "200000"}, + {"2001:470:23::/44", "6939"}, + {"2001:559:83a9::/48", "33489"}, + {"2001:67c:620::/48", "197639"}, + {"2402:2380::/32", "134102"}, + {"2406:840:860::/48", "139317"}, + {"240a:aa93::/32", "145357"}, + {"2a01:b740:a1c::/48", "6185"}, + {"2a02:26f7:b5c0::/48", "36183"}, + {"2001:468:2641::/44", "11537"}, + {"2401:da80::/32", "63927"}, + {"2600:6c38:c2f::/39", "20115"}, + {"2620:129:4000::/40", "62909"}, + {"2a04:71c0::/32", "200086"}, + {"2402:800:3601::/44", "7552"}, + {"2600:8807:43e0::/37", "22773"}, + {"2a02:88d:230::/44", "48695"}, + {"2a03:bf00:200::/40", "43529"}, + {"2001:dcc:401::/48", "23599"}, + {"2001:44b8:4054::/48", "7545"}, + {"2a02:26f7:dfce::/42", "20940"}, + {"2a04:1040::/29", "59767"}, + {"2404:3d00:40c8::/47", "21433"}, + {"2407:fe80::/39", "134749"}, + {"240e:45c:6a00::/40", "131285"}, + {"2a02:fc00::/29", "61207"}, + {"2a09:d00::/29", "199496"}, + {"2a0d:bc6::/48", "32539"}, + {"2a0e:68c0:1::/48", "204743"}, + {"2a11:b380::/29", "204790"}, + {"2605:6c80:4::/47", "397373"}, + {"2606:2800:7011::/46", "15133"}, + {"2607:fc48:c20::/48", "40009"}, + {"2804:3e90:4244::/43", "266606"}, + {"2a04:9b47::/48", "56740"}, + {"2a0b:1306:9::/48", "133142"}, + {"2a0f:85c1:51::/48", "209552"}, + {"2402:7d80:8889::/35", "63582"}, + {"240a:af03::/32", "146493"}, + {"240e:1f:8000::/47", "58543"}, + {"2605:a401:8ed9::/39", "33363"}, + {"2606:29c0:400::/32", "31775"}, + {"2606:cc00::/32", "5760"}, + {"240a:ab5f::/32", "145561"}, + {"2602:ff42::/36", "7018"}, + {"2800:370:63::/45", "28006"}, + {"2a00:1370::/32", "25513"}, + {"2a02:2698:7400::/38", "49048"}, + {"2408:8956:8500::/40", "17816"}, + {"2600:80c:1300::/40", "701"}, + {"2804:8f8::/32", "2914"}, + {"2804:4828::/32", "267101"}, + {"2402:6800:5::/48", "22822"}, + {"2408:8957:d840::/40", "17622"}, + {"240a:a7b0::/32", "144618"}, + {"240e:108:11e4::/44", "4134"}, + {"2600:1417:6a::/48", "9498"}, + {"2620:a0:4000::/47", "55064"}, + {"2a02:66a0::/32", "60086"}, + {"2001:df3:a880::/48", "4826"}, + {"2402:800:3401::/44", "7552"}, + {"2600:9000:a300::/47", "16509"}, + {"2402:800:fe50::/42", "7552"}, + {"2001:559:34e::/48", "7016"}, + {"2001:559:7aa::/48", "33657"}, + {"240e:183:8204::/46", "140649"}, + {"2804:14d:4e90::/41", "28573"}, + {"2a05:9280::/32", "31019"}, + {"2a0b:83c0::/29", "20634"}, + {"2408:8459:b030::/41", "17622"}, + {"240a:a581::/32", "144059"}, + {"2602:fe25::/36", "33174"}, + {"2602:febe:e01::/39", "30405"}, + {"2605:a900:3006::/43", "46887"}, + {"2a03:a9a0::/32", "22208"}, + {"240a:ab42::/32", "145532"}, + {"2a02:88d:1f::/48", "47794"}, + {"2001:559:8555::/48", "33654"}, + {"240e:679:e200::/39", "140329"}, + {"2804:5fe8::/32", "269131"}, + {"2804:7bb0::/32", "271448"}, + {"2001:559:82e2::/48", "7015"}, + {"2001:67c:234::/48", "47302"}, + {"2001:67c:2dc4::/48", "25411"}, + {"2001:1248:9748::/43", "11172"}, + {"2401:1740::/39", "136600"}, + {"2404:f4c0:ff10::/48", "149506"}, + {"2a01:4ce0:51::/42", "19624"}, + {"2001:16d8:cd00::/35", "16150"}, + {"2402:800:3171::/44", "7552"}, + {"2404:2400:110::/40", "56132"}, + {"2600:1003:b470::/40", "22394"}, + {"2605:3380:ff09::/45", "12025"}, + {"2804:998::/47", "28589"}, + {"2804:1f3c::/36", "52910"}, + {"2a02:26f7:de90::/48", "36183"}, + {"2a03:aba0::/29", "786"}, + {"2a06:3040::/48", "203020"}, + {"2001:559:c0ec::/48", "7016"}, + {"2001:67c:2ad4::/48", "61430"}, + {"2001:4490:d820::/46", "9829"}, + {"240a:a311::/32", "143435"}, + {"2001:67c:5f4::/48", "51815"}, + {"2001:67c:16b4::/48", "51942"}, + {"2001:ec0:889::/42", "23969"}, + {"2001:1b28::/37", "8728"}, + {"2404:bc00::/32", "18037"}, + {"2407:d340:f000::/44", "142586"}, + {"2605:a404:67::/44", "33363"}, + {"2001:44b8:1056::/47", "7545"}, + {"240a:a26b::/32", "143269"}, + {"2602:fe9d::/36", "13760"}, + {"2803:c180::/34", "52341"}, + {"2c0f:f4c0::/35", "37611"}, + {"2001:559:14c::/46", "7016"}, + {"2401:4900:4450::/42", "45609"}, + {"2408:8256:3493::/44", "17623"}, + {"240a:aa59::/32", "145299"}, + {"2800:381:5152::/32", "10834"}, + {"2a0b:6b86:3fa::/48", "202562"}, + {"2001:4490:4e00::/40", "9829"}, + {"2400:fc00:4a40::/32", "45773"}, + {"2409:8003:2a00::/40", "9808"}, + {"2806:2f0:7323::/32", "17072"}, + {"2a02:26f7:d141::/45", "20940"}, + {"2407:5000::/32", "17494"}, + {"2409:8120::/25", "9808"}, + {"240a:ac2d::/32", "145767"}, + {"2001:559:20::/48", "33490"}, + {"2001:1248:9709::/45", "11172"}, + {"2409:4040:1000::/30", "55836"}, + {"240e:640:ef00::/27", "4134"}, + {"2a02:348:64::/43", "35470"}, + {"2a05:f00::/29", "41163"}, + {"2a06:82c1::/48", "201106"}, + {"2400:a600::/32", "55803"}, + {"240e:ff:c001::/48", "134774"}, + {"2600:140b:e01::/39", "20940"}, + {"2806:230:601e::/48", "265594"}, + {"2a00:74a0::/32", "20904"}, + {"2a0f:9400:770b::/48", "210576"}, + {"2001:559:c3e0::/48", "7015"}, + {"2401:4900:844::/44", "45609"}, + {"2600:6c38:e26::/44", "20115"}, + {"2604:f500::/47", "16698"}, + {"2801:114:5::/46", "23059"}, + {"2804:7e2c::/32", "271607"}, + {"2403:6cc0::/32", "138155"}, + {"2405:9800:c980::/48", "45458"}, + {"240a:a15b::/32", "142997"}, + {"240a:a575::/32", "144047"}, + {"2605:52c0:4000::/48", "32519"}, + {"2a0e:97c3:7ea::/48", "20473"}, + {"2001:388:31::/40", "7575"}, + {"2001:500:46::/44", "207266"}, + {"2600:1406:4401::/38", "20940"}, + {"2801:0:390::/48", "14080"}, + {"2001:44c8:4190::/42", "131445"}, + {"2409:8053:1900::/37", "9808"}, + {"240e:981:6000::/40", "134761"}, + {"2607:fb78::/32", "23309"}, + {"2a02:26f0:111::/45", "20940"}, + {"2401:f000:9::/43", "38477"}, + {"2600:6c38:e2a::/43", "20115"}, + {"2620:10a:8003::/48", "15290"}, + {"2800:160:23af::/41", "14259"}, + {"2a02:ed04:4510::/38", "50304"}, + {"2001:250:3::/48", "23910"}, + {"2001:428:6402:221::/36", "209"}, + {"2409:8948:8e00::/40", "24445"}, + {"2a01:7c80:8000::/33", "24877"}, + {"2a0f:8645:b00b::/48", "212149"}, + {"2402:800:9da9::/43", "7552"}, + {"2402:e280:2130::/45", "134674"}, + {"2605:a401:804a::/43", "33363"}, + {"2804:1620::/32", "263269"}, + {"2804:1a20::/32", "61838"}, + {"2600:1413:2::/36", "20940"}, + {"2607:c400:6000::/32", "5555"}, + {"2607:f998::/32", "11767"}, + {"2607:fe70::/32", "11170"}, + {"2001:559:80e4::/48", "7922"}, + {"2605:c240::/28", "7018"}, + {"2606:9300::/32", "16904"}, + {"2a09:bac0:453::/48", "13335"}, + {"2a0e:6540:d32::/48", "208364"}, + {"2408:8256:358d::/48", "17816"}, + {"2605:cc80::/32", "398700"}, + {"2606:7300::/32", "11495"}, + {"2608:141:c::/48", "6025"}, + {"2620:13d:2080::/41", "20326"}, + {"2804:3f10:4101::/38", "262566"}, + {"2001:250:805::/48", "138182"}, + {"2001:1900:2372::/45", "10753"}, + {"2408:840c:9100::/40", "17621"}, + {"240e:90d:d000::/37", "137688"}, + {"2602:fd34::/36", "393292"}, + {"2804:4ae0:200::/32", "267269"}, + {"2804:7bac::/32", "271447"}, + {"2a02:26f7:be0d::/46", "20940"}, + {"2a02:26f7:e945::/46", "20940"}, + {"2a05:a140::/29", "41174"}, + {"2a0d:b000::/29", "12637"}, + {"2a0e:b107:148::/45", "57883"}, + {"240e:e9:8800::/34", "23650"}, + {"240e:45c:c400::/40", "131285"}, + {"2600:6c20:10b::/45", "20115"}, + {"2804:1a2c::/32", "61842"}, + {"2c0f:f690:8000::/36", "37019"}, + {"2001:b000:59d::/27", "3462"}, + {"2402:800:3d1d::/42", "7552"}, + {"240a:a851::/32", "144779"}, + {"2600:1007:b0e0::/43", "22394"}, + {"2604:d600:64b::/45", "32098"}, + {"2620:10a:3000::/40", "10349"}, + {"2803:56a0::/32", "266894"}, + {"2a07:4f00::/29", "31263"}, + {"2a0f:9400:7718::/48", "210715"}, + {"2605:1ac0::/32", "397189"}, + {"2620:12f:c005::/46", "395831"}, + {"2804:608c::/32", "269174"}, + {"2001:559:36f::/48", "33657"}, + {"2001:56b:10::/33", "852"}, + {"240a:ac76::/32", "145840"}, + {"2606:1040:1338::/32", "12243"}, + {"2a00:1d36:1000::/39", "47331"}, + {"240e:967:f600::/28", "4134"}, + {"2a00:c0a0::/32", "200154"}, + {"2001:559:8335::/48", "33651"}, + {"240a:ae46::/32", "146304"}, + {"2607:fea0:8450::/48", "16578"}, + {"2803:6cc0::/32", "264813"}, + {"2804:1edc::/32", "264450"}, + {"2001:67c:2760::/48", "47655"}, + {"2605:8d40:8000::/33", "46292"}, + {"2620:59:a000::/48", "7018"}, + {"2a01:b960:2309::/48", "209485"}, + {"2a0a:3100::/29", "206799"}, + {"2a0e:fb42::/32", "47596"}, + {"2001:559:8595::/48", "33651"}, + {"2001:df0:46::/48", "24287"}, + {"2001:4490:db40::/46", "9829"}, + {"2402:800:598d::/43", "7552"}, + {"2404:2b40::/32", "24373"}, + {"2804:4178::/32", "267435"}, + {"2806:230:4001::/48", "11888"}, + {"2a03:fb80::/32", "206920"}, + {"2001:428:4804::/34", "209"}, + {"2001:67c:2d40::/48", "50581"}, + {"2804:1918:184::/38", "52862"}, + {"2a01:b640:7700::/40", "39045"}, + {"2001:503:f261::/48", "26134"}, + {"2001:1878::/37", "226"}, + {"2405:6e00:22ee::/48", "18291"}, + {"2607:f380:808::/41", "2152"}, + {"2804:51e8::/32", "268484"}, + {"2804:8380::/32", "272202"}, + {"2001:579:7184::/41", "22773"}, + {"2405:9800:c640::/47", "45458"}, + {"2409:8954::/28", "56040"}, + {"240a:ad7a::/32", "146100"}, + {"2804:54a0:1a00::/39", "27688"}, + {"2a00:c2c0:ffff::/48", "46844"}, + {"2a03:5080::/32", "43341"}, + {"2001:559:807f::/48", "7016"}, + {"2620:111:1008::/48", "18469"}, + {"2404:b1:9000::/34", "9891"}, + {"240e:5e:4000::/48", "134773"}, + {"2600:1480:3100::/36", "20940"}, + {"2804:38b0:502::/32", "266494"}, + {"2804:6744::/32", "269617"}, + {"2a07:e02:baf::/48", "210083"}, + {"2001:559:147::/48", "7015"}, + {"2402:800:3d71::/44", "7552"}, + {"2605:a401:87b4::/41", "33363"}, + {"2803:99e0::/44", "270020"}, + {"2001:500:202::/48", "4"}, + {"2605:4900::/32", "13576"}, + {"2607:2e00::/32", "19229"}, + {"2801:186::/44", "27951"}, + {"2404:6380:1000::/48", "138950"}, + {"2408:8956:a00::/40", "17622"}, + {"2804:6fc8::/34", "270684"}, + {"2001:67c:17fc::/48", "212024"}, + {"2402:5300:1210::/34", "45903"}, + {"2407:4ac0::/35", "142045"}, + {"2607:6b80:63::/45", "46562"}, + {"2a0e:fd87:4::/32", "208722"}, + {"2a0f:607:1400::/44", "211132"}, + {"2404:3d00:414e::/42", "3573"}, + {"240e:87c:400::/39", "4134"}, + {"2600:1417:1e::/48", "9498"}, + {"2a02:2ad0::/39", "702"}, + {"2a03:7720::/43", "201094"}, + {"2001:df0:ed00::/48", "139398"}, + {"2401:d800:75f0::/38", "7552"}, + {"2600:1013:b0e0::/33", "6167"}, + {"2001:ee0:2f02::/45", "45899"}, + {"2602:ff98:340::/36", "63447"}, + {"2620:13d:2064::/43", "20326"}, + {"2a00:b880::/32", "44943"}, + {"2a0b:11c0::/48", "198682"}, + {"2a10:d080::/29", "212023"}, + {"2001:1838:2008::/35", "23352"}, + {"2600:1010:d1a0::/41", "6167"}, + {"2600:1408:c800::/48", "35994"}, + {"2a04:4e40:ac00::/47", "54113"}, + {"2001:559:49f::/48", "7922"}, + {"2001:67c:14d::/48", "21083"}, + {"2600:140f:2a00::/48", "9498"}, + {"2803:b9c0:4100::/38", "265705"}, + {"2a01:8840:82::/45", "12041"}, + {"2401:7b40:4005::/48", "38071"}, + {"2407:240::/48", "140775"}, + {"2600:100d:9110::/36", "22394"}, + {"2600:6c38:126::/44", "20115"}, + {"2604:d600:52e::/43", "32098"}, + {"2001:fff:100::/32", "142500"}, + {"2600:6c21:15::/44", "20115"}, + {"2620:12c:9001::/46", "395359"}, + {"2804:598::/32", "262526"}, + {"2401:d800:73a0::/41", "7552"}, + {"240e:67e:c600::/34", "4134"}, + {"2600:1413:8000::/48", "24319"}, + {"2804:13b0:1c00::/44", "263546"}, + {"2a10:92c0::/29", "211786"}, + {"2001:559:875a::/47", "33490"}, + {"2001:67c:964::/48", "207947"}, + {"2401:af80:8000::/35", "59103"}, + {"2403:9d40::/32", "137263"}, + {"2800:440:8006::/48", "27738"}, + {"2804:1158::/32", "263672"}, + {"2806:230:5015::/48", "11888"}, + {"2a12:c080::/29", "1299"}, + {"2001:559:81a2::/48", "33287"}, + {"240e:96b:601e::/42", "140374"}, + {"2600:370f:3521::/46", "32261"}, + {"2603:f640::/27", "397165"}, + {"2a00:6b40::/32", "197603"}, + {"2405:201:d800::/34", "55836"}, + {"2406:840:f400::/48", "142111"}, + {"2620:aa:c000::/48", "15304"}, + {"2804:25e4::/38", "61573"}, + {"2a03:a300:800::/35", "35104"}, + {"2a05:d980::/29", "200978"}, + {"2401:4900:4f61::/48", "45609"}, + {"2408:8656:3cfe::/47", "17623"}, + {"240e:44d:5100::/41", "140345"}, + {"2600:1419:a01::/37", "20940"}, + {"2a02:26f7:d489::/46", "20940"}, + {"2a0f:8643:b00c::/29", "25682"}, + {"2001:559:8643::/48", "33651"}, + {"2001:559:c27e::/47", "7016"}, + {"2407:5200:204::/47", "55915"}, + {"2603:f6b0::/23", "397165"}, + {"2001:df5:e280::/48", "141640"}, + {"2001:4c5c::/30", "13119"}, + {"2409:8055:18::/48", "9808"}, + {"240a:a50c::/32", "143942"}, + {"2602:fc26::/46", "211562"}, + {"2804:4840::/32", "267107"}, + {"2a00:1af8::/32", "6856"}, + {"2a09:2980::/29", "42375"}, + {"2001:df5:6f80::/48", "141424"}, + {"240a:aa2c::/32", "145254"}, + {"2600:6c39:455::/44", "20115"}, + {"2806:2f0:4383::/42", "17072"}, + {"2001:67c:1998::/48", "203055"}, + {"2600:6c38:573::/38", "20115"}, + {"2804:73b4::/34", "270932"}, + {"2a09:b180::/29", "56485"}, + {"240a:a55d::/32", "144023"}, + {"240a:a666::/32", "144288"}, + {"2620:0:a1a::/48", "71"}, + {"2a00:86c0:2061::/43", "2906"}, + {"2a05:7640:2090::/44", "174"}, + {"2001:250:5875::/48", "138371"}, + {"240a:adbb::/32", "146165"}, + {"2600:380:e410::/36", "7018"}, + {"2602:fe19:ffad::/41", "26073"}, + {"2800:160:2c03::/43", "14259"}, + {"2806:108e:24::/48", "8151"}, + {"2a02:27aa::/32", "59729"}, + {"2a0d:b201:1000::/44", "206026"}, + {"2402:c480:5000::/48", "63916"}, + {"240a:a187::/32", "143041"}, + {"240e:44d:1700::/42", "140345"}, + {"2804:14d:a495::/41", "28573"}, + {"2a00:8841::/32", "12365"}, + {"2001:df2:3880::/48", "139836"}, + {"2405:f580::/32", "132019"}, + {"2408:8957:fe00::/28", "17816"}, + {"2605:9d80:8081::/48", "4134"}, + {"2a00:1908:ffff::/48", "205365"}, + {"2a09:bac0:191::/45", "13335"}, + {"2a0a:1f42::/32", "64236"}, + {"2a0d:86c0::/29", "210181"}, + {"2a0f:32c0::/29", "328221"}, + {"2602:ffc5::/48", "7489"}, + {"2001:df2:5100::/48", "133929"}, + {"2406:c500:ffd3::/48", "4739"}, + {"2600:80d:100::/27", "701"}, + {"2620:141:4fe::/48", "6075"}, + {"2a01:cf00:74::/46", "3215"}, + {"2a02:26f0:9c::/47", "34164"}, + {"2001:559:81a4::/48", "7922"}, + {"2404:a8:19::/48", "24514"}, + {"2406:b400:16::/47", "55577"}, + {"2605:3380:48fe::/47", "12025"}, + {"2800:160:1a6c::/43", "14259"}, + {"2804:7ba0::/32", "271443"}, + {"2a02:13d0::/29", "13136"}, + {"2a0e:15c7:ff82::/41", "60781"}, + {"2001:559:86b1::/48", "33490"}, + {"2001:67c:1ec::/48", "29607"}, + {"2001:4350:3000::/48", "2609"}, + {"2403:c880::/31", "7363"}, + {"2408:8256:3175::/48", "17623"}, + {"240e:979:3e00::/40", "134770"}, + {"2605:a40a:9000::/34", "33363"}, + {"2803:bc40:810d::/43", "52468"}, + {"2a03:7300::/32", "8426"}, + {"2a07:8147:ffff::/48", "211846"}, + {"240a:a64d::/32", "144263"}, + {"240e:db:f801::/29", "4134"}, + {"2600:40f0:100::/44", "3369"}, + {"2803:9800:9037::/44", "11664"}, + {"2a02:26f7:e38c::/48", "36183"}, + {"2a04:2e80:17::/48", "50294"}, + {"2001:1218:60be::/32", "278"}, + {"2401:d800:7fe2::/43", "7552"}, + {"2402:800:3dee::/43", "7552"}, + {"2a0f:aa40::/29", "207646"}, + {"2a10:b840::/29", "211624"}, + {"2001:559:c1fc::/48", "7922"}, + {"2001:678:938::/48", "29608"}, + {"2001:4248:7b::/32", "30999"}, + {"2401:680::/32", "715"}, + {"2409:8020:31::/41", "56046"}, + {"2605:ef00::/47", "7806"}, + {"2620:118:b003::/48", "32110"}, + {"2804:73d0::/32", "270939"}, + {"2806:230:202e::/48", "265594"}, + {"2001:559:9::/48", "33287"}, + {"2001:559:8581::/46", "33657"}, + {"2600:1406:e001::/37", "20940"}, + {"2602:feda:2ab::/45", "204185"}, + {"2800:200:b410::/42", "12252"}, + {"2401:e380:1001::/46", "131091"}, + {"2600:6c38:82d::/43", "20115"}, + {"2803:6604:a600::/33", "28075"}, + {"2a12:89c0::/29", "49581"}, + {"2600:1f01:48c0::/47", "16509"}, + {"2804:4420::/32", "267604"}, + {"2408:8456:ed40::/40", "17816"}, + {"2408:8957:4900::/40", "17816"}, + {"240e:3b6:5600::/34", "4134"}, + {"2a02:26f7:e240::/48", "36183"}, + {"2001:600::/32", "702"}, + {"2409:8028:2800::/39", "56041"}, + {"2409:8904:2b40::/37", "24547"}, + {"240a:a93e::/32", "145016"}, + {"2a0e:b102:160::/44", "212546"}, + {"2402:800:7d70::/40", "7552"}, + {"2a00:f10:142::/42", "48635"}, + {"2a02:2808:5501::/48", "47531"}, + {"2001:550:3d06::/33", "174"}, + {"2001:559:c0ca::/48", "7015"}, + {"2001:4948::/32", "7782"}, + {"2408:8256:2d6b::/48", "17623"}, + {"2600:1406:a01::/35", "20940"}, + {"2406:daa0:b0c0::/44", "16509"}, + {"2408:8256:3796::/44", "17623"}, + {"2a02:8080::/29", "6830"}, + {"2a0c:4d80::/29", "208327"}, + {"2001:559:2fa::/48", "7015"}, + {"2001:18b8:4a::/39", "29789"}, + {"2400:9380:a01f::/48", "23764"}, + {"2406:840:e114::/48", "141712"}, + {"240a:a0b5::/32", "142831"}, + {"2600:1017:b8b0::/41", "6167"}, + {"2804:7ac::/32", "262542"}, + {"2a02:888:8152::/47", "48695"}, + {"2a09:be41::/29", "209968"}, + {"2409:8904:63b0::/37", "24547"}, + {"2604:7040::/32", "10821"}, + {"2800:300:90e0::/33", "27986"}, + {"2800:860:a::/48", "262206"}, + {"2804:6430::/32", "269412"}, + {"2806:230:1010::/48", "265594"}, + {"2a02:26f7:af::/48", "20940"}, + {"2a0b:4340:c6::/48", "44421"}, + {"2607:f250:d008::/48", "7046"}, + {"2804:4814::/32", "267096"}, + {"2804:6dc0::/32", "270553"}, + {"2a10:d500::/32", "174"}, + {"2400:fc00:30::/41", "45773"}, + {"2409:8057:805::/35", "56040"}, + {"240a:a33c::/32", "143478"}, + {"240e:44d:7040::/42", "140354"}, + {"2604:4f40::/32", "396472"}, + {"2604:6600:159::/40", "40676"}, + {"2620:115:6001::/48", "32336"}, + {"2a02:2e0:421::/32", "12306"}, + {"2409:8959:cd44::/43", "9808"}, + {"2804:179c::/34", "263159"}, + {"2a01:6320::/32", "197580"}, + {"2a02:2e02:9b90::/37", "12479"}, + {"2a05:4280::/29", "62248"}, + {"2600:80c:200::/36", "11486"}, + {"2804:4774:9000::/33", "267055"}, + {"2a09:7c41::/30", "52000"}, + {"2001:559:8699::/46", "33650"}, + {"240a:a182::/32", "143036"}, + {"2804:37f0:6900::/35", "266445"}, + {"2a01:65e0::/32", "62244"}, + {"2a01:9500::/40", "197696"}, + {"2a02:26f7:c189::/42", "20940"}, + {"2a0b:3c40:9::/48", "208258"}, + {"2408:8000:c008::/42", "4837"}, + {"240a:afb9::/32", "146675"}, + {"2604:f980:4220::/44", "19957"}, + {"2001:559:c36c::/48", "33651"}, + {"2001:44b8:105c::/48", "7545"}, + {"2604:a580::/40", "1610"}, + {"2804:14d:4c00::/40", "28573"}, + {"2804:61f0:4::/32", "269266"}, + {"2804:7584::/32", "271052"}, + {"2a01:6ec0::/32", "198904"}, + {"2a02:26f7:f788::/48", "36183"}, + {"2001:559:c375::/48", "33657"}, + {"240e:a7:7fd2::/45", "140514"}, + {"2600:380:4780::/35", "20057"}, + {"2600:6c21:807::/38", "20115"}, + {"2806:370:5500::/40", "28403"}, + {"2402:8100:26a3::/44", "55644"}, + {"2406:2600::/48", "55569"}, + {"240a:acf7::/32", "145969"}, + {"2a01:5e40::/32", "34555"}, + {"2001:559:c3c2::/48", "7016"}, + {"2803:2300::/32", "17069"}, + {"2a03:7580::/34", "28785"}, + {"2606:2800:4ad8::/46", "15133"}, + {"2610:a1:304c::/48", "12008"}, + {"2804:3d4:40::/32", "262401"}, + {"2a06:d380::/29", "57860"}, + {"2a0d:2405::/30", "62068"}, + {"2401:f000:2::/56", "23838"}, + {"2801:2::/39", "17147"}, + {"2804:af4::/32", "52930"}, + {"2c0f:ea60::/32", "37215"}, + {"240e:db:b800::/48", "38283"}, + {"2600:1419:801::/38", "20940"}, + {"2603:c023:4000::/35", "31898"}, + {"2607:fff0::/32", "17293"}, + {"2001:67c:798::/48", "15404"}, + {"2001:1900:220f::/43", "3356"}, + {"2402:800:368d::/43", "7552"}, + {"2409:8914:800::/39", "56044"}, + {"2801:10a::/44", "19429"}, + {"2001:559:c::/48", "7015"}, + {"2001:1248:564d::/43", "11172"}, + {"2400:1480::/48", "132425"}, + {"2401:ebc0:1000::/32", "137041"}, + {"2405:58c0:38::/47", "133101"}, + {"2409:8080:2a60::/44", "9808"}, + {"2600:6c21:222::/47", "20115"}, + {"2605:5e40:110::/48", "397810"}, + {"2803:10c0::/32", "264770"}, + {"2a00:1950::/32", "39647"}, + {"2402:800:919b::/42", "7552"}, + {"240a:a0ec::/32", "142886"}, + {"2620:7a:8000::/48", "30622"}, + {"2804:84e8::/32", "272546"}, + {"2a00:a900::/33", "60819"}, + {"2a0e:a6c1::/30", "41047"}, + {"2001:16c0::/43", "31732"}, + {"2401:d800:b2d0::/42", "7552"}, + {"2408:860c::/30", "17621"}, + {"240a:a07b::/32", "142773"}, + {"2a02:608::/32", "41698"}, + {"2a04:3740::/48", "35625"}, + {"2a10:8280::/32", "2611"}, + {"2408:8956:c800::/39", "17622"}, + {"240a:af0d::/32", "146503"}, + {"2a0a:56c4:8500::/47", "42649"}, + {"2a10:11c0::/32", "206858"}, + {"2001:da8:251::/48", "23910"}, + {"2600:809:641::/30", "701"}, + {"2800:bf0:3020::/46", "52257"}, + {"2804:3b8:1e6::/44", "52965"}, + {"2804:38e0::/32", "266507"}, + {"2001:df0:7080::/48", "23954"}, + {"2804:950:8200::/33", "263072"}, + {"2804:14f0::/32", "263360"}, + {"2a06:1301:4050::/48", "24940"}, + {"2a0d:1740::/32", "201547"}, + {"2a0f:e6c0:991::/48", "60781"}, + {"2405:c440::/47", "139972"}, + {"2620:5e:6000::/48", "701"}, + {"2408:8957:1bc0::/37", "17622"}, + {"2607:f220:203::/48", "7046"}, + {"2806:230:2005::/48", "11888"}, + {"240a:a755::/32", "144527"}, + {"2a04:84c1::/32", "29017"}, + {"2001:df6:aa80::/48", "136421"}, + {"2406:d200::/32", "23629"}, + {"240e:95d:c00::/38", "4134"}, + {"2620:11a:e000::/46", "22300"}, + {"2a0e:e704:43::/48", "212972"}, + {"2001:6a8::/32", "2611"}, + {"2403:3800::/44", "4007"}, + {"2408:8456:7e00::/42", "17622"}, + {"2409:8c28:6c08::/39", "56041"}, + {"2620:1:a000::/48", "19770"}, + {"2804:24cc::/32", "264242"}, + {"2001:67c:648::/48", "51942"}, + {"2a02:26f7:cfcc::/48", "36183"}, + {"2409:8070:ac0::/42", "9808"}, + {"2a02:26f7:d8c9::/42", "20940"}, + {"240e:980:8500::/40", "133774"}, + {"2607:f190:4000::/32", "11320"}, + {"2800:160:10c7::/44", "14259"}, + {"2804:3e40:fb02::/37", "266583"}, + {"2001:67c:15c8::/48", "1257"}, + {"2408:8256:3a61::/43", "17623"}, + {"240e:965:3000::/33", "4134"}, + {"2620:101:2011::/46", "30238"}, + {"2804:10c8::/35", "263649"}, + {"2c0f:f7f8::/48", "3356"}, + {"2a02:168::/31", "13030"}, + {"2c0f:f758::/32", "37204"}, + {"2001:559:8032::/48", "7015"}, + {"2804:6654::/32", "269551"}, + {"2a04:ff00:300::/48", "206731"}, + {"2a10:1fc0:2::/47", "62005"}, + {"240a:a549::/32", "144003"}, + {"2a02:2330:b3::/29", "12578"}, + {"2001:4130:20::/48", "29067"}, + {"2001:4998:198::/46", "36647"}, + {"2607:f108:302::/36", "29838"}, + {"2607:fd48:480:2::/36", "13536"}, + {"2a01:3e0:ff71::/48", "8297"}, + {"2a0a:c842::/29", "205394"}, + {"2401:d800:7e0::/36", "7552"}, + {"2408:8456:1a00::/42", "17622"}, + {"2606:82c0:800::/40", "32167"}, + {"2804:b18:d0::/32", "52941"}, + {"2804:1340::/32", "263524"}, + {"2001:559:86ba::/48", "33657"}, + {"2001:67c:2744::/48", "47676"}, + {"240a:a4ab::/32", "143845"}, + {"2620:61::/48", "46720"}, + {"2806:2f0:20a1::/48", "22884"}, + {"2a00:b700:2::/45", "49392"}, + {"2a05:3a40::/32", "210236"}, + {"2a0c:6580::/48", "43576"}, + {"2001:67c:4f0::/48", "3303"}, + {"2400:cb00:a4e0::/45", "13335"}, + {"2a04:3880::/30", "60721"}, + {"2001:df5:2880::/48", "141370"}, + {"2804:18:860::/44", "10429"}, + {"2a04:1cc1::/30", "48635"}, + {"2a0a:7400::/29", "34863"}, + {"2a12:4946:1900::/48", "211398"}, + {"2604:36c0::/32", "393670"}, + {"2606:2800:147::/44", "15133"}, + {"2606:7d80:9000::/33", "2707"}, + {"2606:ab40:20::/41", "400339"}, + {"2a00:ab00:7000::/32", "49505"}, + {"2409:8d5a:5c0::/45", "9808"}, + {"240e:966:8800::/38", "133775"}, + {"2804:3be4::/32", "266178"}, + {"2804:60e4::/32", "269198"}, + {"2a03:4d80::/32", "43323"}, + {"2001:df0:2fd::/48", "17436"}, + {"2001:4408:8500::/45", "4758"}, + {"2406:8800:9045::/44", "17465"}, + {"2800:800:6f0::/44", "26611"}, + {"2804:1e18::/32", "264407"}, + {"2806:230:3007::/48", "11888"}, + {"2a09:bac0:128::/48", "13335"}, + {"2a10:e300:35::/48", "44854"}, + {"2806:230:601f::/48", "11888"}, + {"2a02:26f7:e789::/46", "20940"}, + {"240a:af59::/32", "146579"}, + {"2600:1480:4100::/37", "20940"}, + {"2600:6c7f:9140::/44", "19115"}, + {"2605:a401:8f41::/45", "33363"}, + {"2620:66:6000::/48", "54345"}, + {"2001:67c:2580::/48", "8751"}, + {"2001:12d0::/32", "28571"}, + {"240a:a420::/32", "143706"}, + {"240a:a7f0::/32", "144682"}, + {"2600:1011:b170::/33", "6167"}, + {"2804:5e48:ff10::/48", "269023"}, + {"2a00:d8c0:100::/48", "50716"}, + {"2603:80bd::/32", "11427"}, + {"2801:80:1b40::/48", "266426"}, + {"2806:230:2019::/48", "11888"}, + {"2a10:2a80::/48", "207727"}, + {"2401:b0c0:d000::/48", "136941"}, + {"2800:680::/43", "3816"}, + {"2a0c:1a80::/29", "204861"}, + {"2001:4200:598::/34", "2018"}, + {"2404:e00:165::/48", "15695"}, + {"2804:38a8::/32", "266492"}, + {"2001:678:138::/48", "38990"}, + {"2402:4480:305::/32", "174"}, + {"2407:38c0:82::/48", "59204"}, + {"240c:c715::/32", "24364"}, + {"2a01:8840:4a::/45", "12041"}, + {"2a02:26f7:d404::/48", "36183"}, + {"2402:3a80:c030::/48", "38266"}, + {"240a:a609::/32", "144195"}, + {"2803:5320::/32", "266728"}, + {"2a01:37:6000::/32", "8875"}, + {"2a10:2f00:129::/48", "213346"}, + {"2001:250:6c3d::/48", "138370"}, + {"2001:1878:b10::/32", "226"}, + {"2401:d800:7cf0::/39", "7552"}, + {"2406:8800:901b::/42", "17465"}, + {"2409:8e39::/25", "9808"}, + {"2a00:e66::/31", "200519"}, + {"2001:559:c488::/48", "33287"}, + {"2401:b780::/41", "45410"}, + {"2409:8924:1d00::/38", "56046"}, + {"2a03:8920::/32", "41103"}, + {"2001:559:16d::/43", "7922"}, + {"2001:2003::/32", "1759"}, + {"2607:6480::/35", "395336"}, + {"2804:4788::/32", "267060"}, + {"2001:15f0::/32", "213211"}, + {"2407:d840:1::/48", "149502"}, + {"240e:44d:4100::/41", "140345"}, + {"2803:dac0::/44", "265634"}, + {"2a00:1400::/32", "44764"}, + {"2a05:a940::/29", "20546"}, + {"2001:250:6807::/48", "23910"}, + {"240a:a870::/32", "144810"}, + {"2620:12d:5000::/47", "55128"}, + {"2800:bf0:8148::/47", "27947"}, + {"2a02:128:2::/48", "197726"}, + {"2408:840d:8400::/42", "17621"}, + {"240e:5e:2100::/48", "134774"}, + {"2803:e880:8116::/35", "52468"}, + {"2a0a:cdc0::/32", "43771"}, + {"2a0d:60c4::/30", "208861"}, + {"2001:559:732::/48", "7016"}, + {"2001:44b8:2053::/48", "4739"}, + {"2605:a900:301a::/33", "46887"}, + {"2620:11f:b003::/45", "394514"}, + {"2620:149:a28::/47", "6185"}, + {"2a02:26f7:f2cd::/42", "20940"}, + {"2001:559:8524::/44", "7015"}, + {"2403:400::/38", "23820"}, + {"2603:c012::/36", "31898"}, + {"2804:37e0::/32", "266441"}, + {"2804:62a0::/32", "269308"}, + {"2a03:e600:100::/48", "208323"}, + {"2001:579:91e1::/38", "22773"}, + {"2408:8256:3b8c::/43", "17623"}, + {"2602:fd86::/48", "33412"}, + {"2804:3554::/32", "262273"}, + {"2001:16a2:402a::/43", "25019"}, + {"2402:800:9e40::/43", "7552"}, + {"2603:c0f8:2910::/38", "20054"}, + {"2804:2b38::/36", "265141"}, + {"2804:41bc::/36", "267453"}, + {"2a04:92c3::/29", "62240"}, + {"2a06:c0::/29", "47467"}, + {"2806:2f0:4261::/46", "17072"}, + {"2a02:b10:1::/48", "20860"}, + {"2001:559:8251::/46", "7922"}, + {"240e:97c::/36", "58466"}, + {"2606:a200::/32", "14155"}, + {"2a05:b0c0::/48", "198412"}, + {"2a0e:1c00::/29", "61317"}, + {"240a:adaf::/32", "146153"}, + {"2804:4488:6010::/44", "262480"}, + {"2a02:26f7:45::/48", "20940"}, + {"2a0e:4100::/32", "57279"}, + {"2405:7900::/32", "24398"}, + {"2600:140b:6401::/38", "20940"}, + {"2a04:2b00:14cc::/48", "212222"}, + {"2001:559:c229::/48", "7015"}, + {"2400:0:500::/38", "4766"}, + {"2408:8120:1::/46", "9929"}, + {"2a0e:8f02:20ec::/46", "213033"}, + {"2001:420:c0fc::/34", "109"}, + {"2402:800:98ee::/39", "7552"}, + {"2600:1010:9000::/44", "6167"}, + {"2800:ba0:12::/48", "263812"}, + {"2a09:4e07:a000::/33", "210625"}, + {"2a09:9940::/48", "50007"}, + {"2401:d800:4a0::/41", "7552"}, + {"2408:8459:f900::/38", "17623"}, + {"2600:6c2e:e84::/39", "20115"}, + {"2804:5f0c::/32", "269073"}, + {"2a00:1ca8:d3::/45", "58061"}, + {"2a00:7640::/32", "48954"}, + {"2001:579:b0dc::/39", "22773"}, + {"2400:cb00:a9f0::/47", "13335"}, + {"2605:b4c0:550::/48", "25780"}, + {"2a00:79e1:f08::/46", "36384"}, + {"2400:e1c0::/48", "58659"}, + {"240a:a122::/32", "142940"}, + {"2a07:2781:a4a3::/48", "206160"}, + {"2a0f:24c0::/29", "207954"}, + {"2400:ac40:d90::/41", "136255"}, + {"240d:c010:81::/45", "139341"}, + {"2804:9a8::/34", "262979"}, + {"2401:803e:2025::/33", "9919"}, + {"2401:fd80:400::/45", "137502"}, + {"2405:4800::/39", "18403"}, + {"2801:1d:800::/48", "267928"}, + {"2804:de8::/32", "52525"}, + {"2a02:26f7:fb84::/48", "36183"}, + {"2402:e380:30a::/48", "138166"}, + {"2001:559:8739::/48", "33662"}, + {"2401:4900:1c46::/44", "24560"}, + {"2600:8807:6ca2::/39", "22773"}, + {"2604:d600:163e::/41", "32098"}, + {"2804:14c:7b8b::/41", "28573"}, + {"2804:749c::/32", "270992"}, + {"2a02:26f7:b6c4::/48", "36183"}, + {"2001:559:81f5::/48", "33652"}, + {"2409:8915:5c00::/39", "56044"}, + {"240a:ac24::/32", "145758"}, + {"2620:190::/32", "3379"}, + {"2a02:2010:20a0::/45", "20978"}, + {"2a04:9f00::/29", "199837"}, + {"2408:8247:1200::/28", "4837"}, + {"240a:a4ee::/32", "143912"}, + {"2600:370f:2041::/42", "32261"}, + {"2607:f368:3225::/32", "32982"}, + {"2620:114:3002::/48", "54391"}, + {"2a0c:8000::/29", "62275"}, + {"2407:8bc0:100::/32", "137990"}, + {"2804:1a4c::/32", "61851"}, + {"2407:1100::/32", "132825"}, + {"240a:ac66::/32", "145824"}, + {"240a:aedd::/32", "146455"}, + {"2602:fea2:1::/46", "40680"}, + {"2804:1338::/32", "263522"}, + {"2804:7c8c::/32", "271503"}, + {"2a01:4de0::/32", "199933"}, + {"2a02:2e02:8b60::/43", "12479"}, + {"2407:f540::/48", "140803"}, + {"2604:e180:5001::/38", "55002"}, + {"2605:a600::/31", "16591"}, + {"2801:19:a800::/48", "271802"}, + {"2a00:5c40::/29", "6821"}, + {"2a0e:f201::/32", "55286"}, + {"2600:4400::/31", "6130"}, + {"2607:f5b6::/32", "393886"}, + {"2a0f:c700::/32", "39384"}, + {"2406:3003:3028::/45", "4657"}, + {"2001:dc5:a::/48", "23600"}, + {"2409:8c50::/37", "56047"}, + {"2602:fd00:c::/46", "147297"}, + {"2401:4900:5f90::/44", "45609"}, + {"2620:e6::/48", "394275"}, + {"2804:312c::/32", "264998"}, + {"2804:7684::/32", "271117"}, + {"2400:8906::/31", "63949"}, + {"2407:4e00:1:3::/32", "17995"}, + {"2620:19f::/36", "397962"}, + {"2800:bf0:8040::/45", "52257"}, + {"2a01:9f80::/32", "16006"}, + {"2a02:6d0::/32", "47227"}, + {"2001:19f0:caba::/48", "20473"}, + {"2607:3200:11::/46", "11240"}, + {"2804:14d:5681::/41", "28573"}, + {"2a02:26f7:d684::/48", "36183"}, + {"2a0e:46c6:300::/40", "207955"}, + {"2806:322:2500::/32", "28546"}, + {"2a00:1728:1e::/47", "34224"}, + {"2a02:2338::/32", "48854"}, + {"2401:4900:53d0::/42", "45609"}, + {"2605:c2c0::/32", "398490"}, + {"2607:fd48:10a:100::/38", "13536"}, + {"2804:22bc::/32", "264119"}, + {"2602:80b:e000::/44", "396921"}, + {"2602:ffb0:7::/48", "20473"}, + {"2a01:d0:304::/47", "29632"}, + {"2001:1a11:11e::/42", "42298"}, + {"2001:480:30::/48", "13"}, + {"2001:4408:7b00::/37", "4758"}, + {"2600:1005:b0f8::/45", "22394"}, + {"2610:28:f020::/48", "19718"}, + {"2a06:6bc0::/29", "12905"}, + {"2001:559:877d::/48", "33651"}, + {"2400:a4c0::/48", "7575"}, + {"2402:800:bbc0::/42", "7552"}, + {"2407:e5c0::/32", "45724"}, + {"2408:8957:1d40::/40", "17816"}, + {"2606:b400:8030::/48", "20037"}, + {"2804:13a0::/32", "263542"}, + {"2804:7c88::/32", "271502"}, + {"2a02:578:6400::/38", "9031"}, + {"2a02:26f7:f2c9::/46", "20940"}, + {"2001:559:87c7::/48", "7016"}, + {"2001:c20:c811::/48", "9255"}, + {"2001:1a40:104::/44", "5416"}, + {"2001:978:1802::/38", "174"}, + {"2402:800:f7b0::/41", "7552"}, + {"240c:ca2a::/29", "23910"}, + {"2602:fdbc::/36", "397774"}, + {"2620:a7:4000::/48", "19473"}, + {"2803:9110::/34", "271992"}, + {"2001:4488:fe62::/30", "7713"}, + {"2001:44c8:4640::/43", "131445"}, + {"240a:a0f1::/32", "142891"}, + {"2001:4b60:100::/48", "1764"}, + {"240e:1a::/44", "23650"}, + {"2a03:8000::/32", "60830"}, + {"2a06:5f80::/32", "57780"}, + {"2402:800:5b7f::/40", "7552"}, + {"2402:800:f260::/40", "7552"}, + {"2a07:4c0::/29", "42306"}, + {"2001:559:c03e::/47", "7922"}, + {"2800:160:1077::/40", "14259"}, + {"2a05:1500:fe00::/40", "12859"}, + {"2001:559:4b7::/48", "33662"}, + {"2406:e000:32d::/43", "23655"}, + {"2409:8c15:2900::/37", "56044"}, + {"2804:5fec::/32", "269134"}, + {"2001:67c:28b8::/48", "28892"}, + {"2001:fd8:f1b0::/44", "4775"}, + {"2402:8100:211f::/48", "55644"}, + {"2a0b:a8c0:2::/48", "202181"}, + {"2a0c:2500::/32", "48314"}, + {"2001:678:794::/48", "201281"}, + {"2001:678:f00::/48", "208930"}, + {"2804:3c80:11a0::/32", "266216"}, + {"240a:ad64::/32", "146078"}, + {"240e:966:d400::/39", "58772"}, + {"2a07:9200::/29", "62206"}, + {"240e:45c:6b00::/40", "140531"}, + {"2a02:20b0::/31", "8315"}, + {"2c0f:f9d8::/32", "37352"}, + {"2401:d800:bac0::/42", "7552"}, + {"2604:8380:2400::/35", "29802"}, + {"2610:a1:3054::/48", "12008"}, + {"2a01:110:8069::/35", "6584"}, + {"2001:559:3bd::/46", "33651"}, + {"2403:9800:7f1d::/46", "4771"}, + {"240a:a1dd::/32", "143127"}, + {"240e:423::/32", "140061"}, + {"2800:bf0:8063::/48", "27947"}, + {"2804:204:32a::/47", "28186"}, + {"2806:230:101c::/48", "265594"}, + {"2a02:26f7:c3e1::/43", "20940"}, + {"2a04:4e40:9a00::/48", "54113"}, + {"2a0a:d040::/29", "59682"}, + {"2c0f:f020:8100::/40", "327907"}, + {"2406:7ec0::/44", "38074"}, + {"2600:1403:ac01::/35", "20940"}, + {"2a02:680::/36", "24995"}, + {"2a03:f87:ffff::/48", "57169"}, + {"2a07:3500:1b48::/48", "1136"}, + {"2404:bf40:8180::/45", "7545"}, + {"2402:e400::/32", "4851"}, + {"240e:108:4b::/48", "133774"}, + {"2a0c:c500::/32", "49798"}, + {"2604:3e40::/32", "19117"}, + {"2804:2c0::/33", "262834"}, + {"2400:ca00:101::/30", "23688"}, + {"2401:4900:1c16::/44", "24560"}, + {"2600:6c10:f07b::/40", "20115"}, + {"2a02:26f7:c9c1::/46", "20940"}, + {"2001:559:c385::/48", "33657"}, + {"2001:559:c438::/47", "7922"}, + {"2409:8020:b1::/41", "56046"}, + {"2801:1ac::/48", "18747"}, + {"2a09:bac0:148::/48", "13335"}, + {"2402:800:9255::/42", "7552"}, + {"2409:8004:1100::/36", "24547"}, + {"2a02:5740:4::/48", "58065"}, + {"2a0e:2380::/32", "208929"}, + {"2a10:9d40::/29", "211727"}, + {"2402:8100:2100::/44", "45271"}, + {"2409:8c54:2020::/37", "56040"}, + {"2a07:9280::/29", "202759"}, + {"2001:678:61c::/48", "204423"}, + {"2402:800:9ab7::/41", "7552"}, + {"2a02:26f7:d048::/48", "36183"}, + {"2a05:d050:4040::/44", "16509"}, + {"2001:e48:23::/41", "9583"}, + {"2001:4cf0::/29", "680"}, + {"2407:d700::/32", "132884"}, + {"2a02:2698:a004::/46", "49874"}, + {"2804:330::/35", "53240"}, + {"2804:5284::/46", "268523"}, + {"2804:7428::/32", "270962"}, + {"2404:bf40:a001::/48", "7545"}, + {"2409:8054:3074::/31", "56040"}, + {"240a:ab3f::/32", "145529"}, + {"2001:559:2a::/48", "7015"}, + {"2001:559:c509::/48", "33287"}, + {"2001:678:4a4::/48", "44574"}, + {"2804:37b8::/32", "266431"}, + {"2a06:5cc0::/29", "42505"}, + {"2a0d:b201:c030::/41", "206026"}, + {"2001:559:c2de::/48", "7922"}, + {"2001:df0:b100::/48", "136475"}, + {"2001:4878:c254::/48", "34164"}, + {"2400:d400:9280::/48", "9280"}, + {"240e:928::/37", "58542"}, + {"2610:b0:416e::/47", "21433"}, + {"2a01:8ca0::/32", "24589"}, + {"2a02:17b0::/32", "29252"}, + {"2a0f:85c1:28::/48", "213384"}, + {"2401:2d00:83e6::/44", "17625"}, + {"2402:7500:568::/40", "24158"}, + {"2404:f4c0:f4c0::/48", "142549"}, + {"2405:6580::/29", "4685"}, + {"2408:8456:a00::/42", "17622"}, + {"2605:6400:10::/48", "53667"}, + {"2804:2c24::/32", "265198"}, + {"2a02:2e02:cc0::/42", "12479"}, + {"2a03:9780::/32", "47767"}, + {"2a0d:bc00::/29", "51426"}, + {"2402:800:bb60::/40", "7552"}, + {"240a:a803::/32", "144701"}, + {"2a01:190:39::/48", "199015"}, + {"2a01:a280:103::/30", "35000"}, + {"2001:559:540::/48", "33491"}, + {"2403:2f00::/32", "24466"}, + {"2600:9000:1136::/44", "16509"}, + {"2606:e980::/32", "393945"}, + {"2804:14d:5891::/42", "28573"}, + {"2a02:74a0:1::/48", "204038"}, + {"2001:14c8::/32", "16128"}, + {"240a:a2db::/32", "143381"}, + {"240a:a5fb::/32", "144181"}, + {"240e:c9:4000::/35", "134765"}, + {"2600:6000:fcd2::/39", "12271"}, + {"2409:8924:4f00::/35", "56046"}, + {"2600:6c10:f409::/46", "20115"}, + {"2620:1e:a000::/48", "196962"}, + {"2a01:6b80::/32", "8887"}, + {"2400:9800:d::/43", "24203"}, + {"240e:6b6:1000::/34", "4134"}, + {"2804:164c::/40", "263280"}, + {"2806:2f0:20e3::/43", "22884"}, + {"2a0d:60c1::/30", "208861"}, + {"2001:4cb8:40c::/29", "28878"}, + {"2409:800b:2904::/47", "9808"}, + {"240a:a196::/32", "143056"}, + {"2a0c:3000::/32", "34953"}, + {"2c0f:f850:157::/32", "327979"}, + {"2605:f400:1::/48", "22611"}, + {"2a00:11b8::/32", "44009"}, + {"2a00:4280::/32", "15401"}, + {"2c0f:f000:700::/36", "36891"}, + {"2400:1d20::/32", "45727"}, + {"2408:8459:450::/38", "17816"}, + {"2a00:cc20::/33", "20495"}, + {"2402:800:550f::/43", "7552"}, + {"2402:bcc0::/32", "9639"}, + {"2409:8904:4460::/39", "24547"}, + {"2606:6680:2::/48", "40676"}, + {"2607:e480::/46", "395748"}, + {"2001:3c8:900a::/34", "4621"}, + {"2001:559:776::/48", "33659"}, + {"2402:e280:2167::/44", "134674"}, + {"2600:9000:a102::/48", "16509"}, + {"2a00:4fc0::/32", "39931"}, + {"2a02:26f7:dc85::/46", "20940"}, + {"2406:da11::/36", "16509"}, + {"240a:a512::/32", "143948"}, + {"240e:67a:8400::/38", "140329"}, + {"2600:9000:248c::/43", "16509"}, + {"2602:fc23:156::/47", "8095"}, + {"2607:3900::/32", "27382"}, + {"2800:4d0:2490::/44", "52489"}, + {"2804:14d:7e00::/42", "28573"}, + {"2a02:26f7:d605::/46", "20940"}, + {"2a03:62a0:3501::/48", "1759"}, + {"2001:678:3d4::/48", "201723"}, + {"2400:b340::/32", "139901"}, + {"2406:2000:efbd::/35", "10310"}, + {"240e:44d:4b00::/42", "140345"}, + {"2a01:7480::/32", "12750"}, + {"2a02:a60::/33", "45031"}, + {"2a0c:b641:260::/44", "59598"}, + {"2001:67c:684::/48", "12502"}, + {"2409:8074:100::/35", "9808"}, + {"240e:44d:7240::/42", "140356"}, + {"2602:ff84:c::/48", "36351"}, + {"2606:e480:400::/33", "55083"}, + {"2a02:26f7:bbc0::/48", "36183"}, + {"2a0e:8f02:f03a::/48", "210707"}, + {"2001:559:c1c9::/48", "33650"}, + {"2401:fa00:45::/43", "24424"}, + {"2804:2d4c::/32", "265272"}, + {"2001:559:c071::/48", "21508"}, + {"240a:a14e::/32", "142984"}, + {"2606:2800:4203::/48", "14210"}, + {"2804:4c0::/32", "3549"}, + {"2a04:f380::/32", "59985"}, + {"2c0f:f140:a000::/33", "327700"}, + {"2401:8d00::/47", "38345"}, + {"2405:f080:1e0e::/43", "136907"}, + {"2620:13b:3010::/47", "13607"}, + {"2804:40ec::/32", "265991"}, + {"2a02:26f7:e914::/48", "36183"}, + {"240a:a29a::/32", "143316"}, + {"2804:204:315::/42", "28186"}, + {"2a0e:c80:323::/48", "40676"}, + {"2804:471c::/32", "267032"}, + {"2806:20d:9300::/33", "32098"}, + {"2a01:a280::/46", "35000"}, + {"2a02:26f7:ebc9::/46", "20940"}, + {"2a0e:8f02:f005::/48", "212983"}, + {"2408:8456:5e40::/39", "17816"}, + {"2409:8020:c1::/43", "56046"}, + {"2610:a1:303c::/48", "12008"}, + {"2806:105e:f::/43", "8151"}, + {"2402:78c0:1000::/34", "137455"}, + {"2a02:26f7:c044::/48", "36183"}, + {"2001:67c:2fdc::/48", "42063"}, + {"2403:cd40:8001::/33", "10075"}, + {"2804:7f5c::/32", "271683"}, + {"2a00:9c80::/32", "35613"}, + {"2a06:8dc0::/42", "57878"}, + {"2001:4430:5128::/38", "17853"}, + {"2403:5a40:40::/48", "134562"}, + {"2a03:9180::/47", "199422"}, + {"2401:d800:ff92::/41", "7552"}, + {"2600:140f:6401::/38", "20940"}, + {"2604:ba00::/32", "11798"}, + {"2408:8456:8c40::/39", "17816"}, + {"240a:a2eb::/32", "143397"}, + {"240e:966:ac00::/33", "4134"}, + {"2804:18:5030::/36", "26599"}, + {"2a0f:d700::/29", "208861"}, + {"240e:940:f00::/32", "4134"}, + {"2604:1380:40d0::/39", "54825"}, + {"2606:2800:600a::/48", "15133"}, + {"2804:82b4::/32", "272535"}, + {"2a02:26f7:c905::/46", "20940"}, + {"2409:8052:2002::/40", "56047"}, + {"2804:6c0:100::/38", "262418"}, + {"2804:950:8010::/39", "263072"}, + {"2804:3054::/32", "264944"}, + {"2804:4b8c::/32", "267313"}, + {"2a0a:340:100::/40", "56807"}, + {"2001:250:81c::/42", "138182"}, + {"2602:fdd0::/36", "397488"}, + {"2620:106:7002::/45", "11795"}, + {"2a0c:b641:458::/48", "208749"}, + {"2001:67c:22d4::/48", "3320"}, + {"2409:896a:a200::/39", "9808"}, + {"240a:a056::/32", "142736"}, + {"2600:1417:79::/46", "20940"}, + {"2801:1b:a800::/48", "19429"}, + {"2001:559:85c7::/44", "33651"}, + {"2001:67c:15ec::/48", "21485"}, + {"2001:df2:c480::/48", "140001"}, + {"2001:16b8:1f00::/33", "8881"}, + {"2001:4490:3dfc::/38", "9829"}, + {"2403:1000:5300::/40", "38819"}, + {"2602:ffc8::/39", "20278"}, + {"2605:3600::/46", "30452"}, + {"2804:14c:3d00::/40", "28573"}, + {"2804:536c::/32", "268583"}, + {"2402:8100:2600::/41", "45271"}, + {"2409:8a6c:6300::/27", "9808"}, + {"240a:aa64::/32", "145310"}, + {"240e:67f:c600::/34", "4134"}, + {"2604:d600:1061::/45", "32098"}, + {"2a02:26f7:b8c0::/48", "36183"}, + {"2a05:d050:c0c0::/44", "16509"}, + {"2404:9400:1000::/33", "133159"}, + {"2404:bf40:a0c1::/39", "139084"}, + {"240a:ae1d::/32", "146263"}, + {"2602:ff96:14::/48", "8100"}, + {"2605:8600::/32", "26827"}, + {"2804:73bc::/46", "270934"}, + {"2408:8256:3260::/44", "17623"}, + {"2408:8957:4800::/40", "17622"}, + {"2409:8907:7d20::/38", "24547"}, + {"2804:4f0:c000::/34", "22129"}, + {"2804:7000::/32", "270700"}, + {"2a02:26f7:bd44::/48", "36183"}, + {"2a02:26f7:fa48::/48", "36183"}, + {"2a10:d100::/32", "28919"}, + {"2001:559:81bb::/48", "33651"}, + {"2604:21c0::/32", "396097"}, + {"2804:6138::/32", "269221"}, + {"2a06:e881:1802::/45", "206885"}, + {"2400:cd00:1038::/41", "38794"}, + {"240e:958:1100::/40", "4134"}, + {"2620:1fc::/36", "55028"}, + {"2408:84f3:b810::/42", "134543"}, + {"2804:1310::/32", "263513"}, + {"2a06:6f40::/29", "204109"}, + {"2400:b4c0::/32", "134141"}, + {"2400:bc00:1811::/46", "140637"}, + {"2804:954:41::/42", "263073"}, + {"2804:1634::/32", "263275"}, + {"2a00:79e1:f1c::/46", "36384"}, + {"2001:559:87b0::/47", "7015"}, + {"2001:1820:1a::/48", "6147"}, + {"2401:380::/32", "17907"}, + {"2c0f:f6d0:86::/42", "327687"}, + {"2001:550:9b00:100::/46", "174"}, + {"2602:ffb0:16::/48", "20473"}, + {"2a0f:bf00:80::/42", "207801"}, + {"2001:579:dc::/39", "22773"}, + {"2001:dc3::/32", "7500"}, + {"2001:dcc:5::/48", "23596"}, + {"2401:4900:4ac0::/44", "45609"}, + {"2404:c0:6400::/32", "23693"}, + {"2602:fc4a::/36", "399890"}, + {"2a00:1560:d::/48", "59771"}, + {"2400:b600::/32", "24362"}, + {"2606:7500::/32", "54154"}, + {"2620:171:5::/46", "715"}, + {"2a02:26f7:ca48::/48", "36183"}, + {"2a0a:69c0::/29", "25375"}, + {"2a0e:6902:4000::/40", "57695"}, + {"2406:840:f660::/44", "209218"}, + {"2408:80da::/32", "17816"}, + {"240a:a71a::/32", "144468"}, + {"2a02:26f7:eec9::/42", "20940"}, + {"2a0f:cc87:3000::/33", "210625"}, + {"2001:559:104::/48", "33651"}, + {"2600:6000:fcd1::/48", "11351"}, + {"2602:fda3:4::/36", "397942"}, + {"2806:370:5310::/44", "28403"}, + {"2a09:11c0:32c::/43", "211352"}, + {"2405:205:6000::/32", "55836"}, + {"2409:8a3e::/25", "9808"}, + {"240a:abc4::/32", "145662"}, + {"2602:fd50:f20::/44", "207609"}, + {"2804:8c8::/32", "262393"}, + {"2804:3d28:10::/48", "262664"}, + {"2001:559:e9::/48", "13367"}, + {"2001:660:3007::/32", "2200"}, + {"2001:67c:1550::/48", "31451"}, + {"2605:db00::/32", "25222"}, + {"2804:5cc8:dd00::/34", "268930"}, + {"2a01:298:fd::/48", "50827"}, + {"2a02:2068::/32", "15830"}, + {"2001:1b28:800::/37", "205950"}, + {"2400:1c00:220::/43", "45143"}, + {"2400:6280:111::/48", "132280"}, + {"2405:b900:2000::/48", "55701"}, + {"2408:8406:b400::/39", "4808"}, + {"240a:ac93::/32", "145869"}, + {"240e:db:a800::/37", "38283"}, + {"2605:5fc1::/29", "1239"}, + {"2610:e0:a000::/48", "26934"}, + {"2a01:8840:dd::/48", "207266"}, + {"2a0c:5500::/45", "205081"}, + {"2001:550:2600:200::/47", "174"}, + {"2001:67c:1bc8::/48", "210729"}, + {"2402:2200:2000::/36", "24090"}, + {"2803:7d40::/32", "264680"}, + {"2001:1a70::/32", "12046"}, + {"2001:4450:41::/29", "9299"}, + {"2604:af80::/37", "18859"}, + {"2001:550:6700::/48", "14877"}, + {"240e:964:5800::/32", "4134"}, + {"2a0a:49c0::/29", "206178"}, + {"2a0d:a780::/29", "208994"}, + {"2001:43f8:b30::/48", "327917"}, + {"2400:cb00:a340::/46", "13335"}, + {"240e:e2:2000::/31", "4134"}, + {"2800:310:12::/38", "18678"}, + {"2801:1f0::/34", "3573"}, + {"2a02:26f7:bd09::/46", "20940"}, + {"2a04:4e42:84::/38", "54113"}, + {"2001:559:c40a::/48", "7016"}, + {"2001:16b8:6d00::/35", "8881"}, + {"2600:370f:5040::/47", "32261"}, + {"2602:fb9d:10::/48", "400554"}, + {"2804:2c88::/32", "265225"}, + {"2a02:a40::/32", "25248"}, + {"2a02:26f7:bf80::/48", "36183"}, + {"2a02:cb43:4000::/45", "20546"}, + {"2001:7f8:26::/64", "6461"}, + {"2404:3d00:41a9::/32", "3573"}, + {"2604:d600:103f::/41", "32098"}, + {"2a03:b200::/31", "20860"}, + {"2610:30:2001::/33", "30313"}, + {"2804:1318::/32", "263515"}, + {"2a0d:82c7:8000::/36", "47787"}, + {"2402:800:6211::/45", "7552"}, + {"2600:370f:9061::/46", "32261"}, + {"2a05:f740::/29", "206119"}, + {"2001:67c:2044::/48", "51290"}, + {"2001:860::/29", "5410"}, + {"2001:fb0:109f:18::/63", "36040"}, + {"2408:840c:7900::/40", "17621"}, + {"240a:a06f::/32", "142761"}, + {"2600:5c01:3044::/48", "11351"}, + {"2600:6c20:e07::/44", "20115"}, + {"2a03:780::/32", "59702"}, + {"2001:678:c20::/48", "200303"}, + {"2001:67c:1bac::/48", "59876"}, + {"2405:9800:70::/40", "131445"}, + {"2409:8714:4a00::/34", "56044"}, + {"2a00:f08::/32", "21367"}, + {"2a02:ff0:200::/40", "12735"}, + {"2a10:7b40::/29", "9186"}, + {"2a10:9100:6::/48", "47890"}, + {"2001:559:8255::/48", "7922"}, + {"2001:559:841c::/48", "21508"}, + {"2600:141b:3001::/37", "20940"}, + {"2602:fd92:c20::/44", "46997"}, + {"2607:f750:c000::/40", "23473"}, + {"2800:150:2::/45", "22047"}, + {"2001:559:c0bf::/48", "33287"}, + {"2001:1248:9a85::/44", "11172"}, + {"2a02:26f7:e8c0::/48", "36183"}, + {"2001:250:7024::/48", "24370"}, + {"2001:559:c1e9::/46", "7922"}, + {"2001:678:f4c::/48", "56793"}, + {"2401:d800:fb90::/42", "7552"}, + {"2402:f8c0::/48", "137798"}, + {"2600:1017:b0e0::/39", "6167"}, + {"2600:1409:4801::/35", "20940"}, + {"2801:80:1700::/40", "61580"}, + {"2a11:c9c0::/29", "1239"}, + {"2602:fea0::/36", "18531"}, + {"2801:190::/42", "10753"}, + {"2a06:7343:1f2c::/48", "199364"}, + {"2a0e:b107:12d1::/46", "211358"}, + {"2a0f:2e40::/29", "60262"}, + {"2001:468:1a00::/45", "4557"}, + {"2001:559:494::/48", "7016"}, + {"240a:a61c::/32", "144214"}, + {"240e:980:4600::/40", "134756"}, + {"2607:f820:4000::/32", "11051"}, + {"2800:440:86::/48", "27738"}, + {"2a00:1cb8:2:9::/61", "12713"}, + {"2001:559:291::/45", "7015"}, + {"2001:559:875c::/48", "7015"}, + {"2600:380:b580::/36", "20057"}, + {"2001:678:74::/48", "55195"}, + {"2001:918:ff74::/48", "8300"}, + {"2001:1978:2300::/37", "13768"}, + {"2401:d800:130::/41", "7552"}, + {"2408:8957:a700::/40", "17816"}, + {"240e:5e:f000::/36", "58543"}, + {"2600:6c38:769::/45", "20115"}, + {"2605:1980:2::/39", "13951"}, + {"2606:6080:1001::/46", "32489"}, + {"2001:559:5d2::/48", "7015"}, + {"2001:df5:f180::/48", "141710"}, + {"2804:30e0::/32", "264978"}, + {"2806:250:300::/46", "28512"}, + {"2806:2f0:12::/42", "17072"}, + {"2a0b:d240::/32", "47886"}, + {"2001:468:2610::/48", "396955"}, + {"240e:41:800::/34", "4134"}, + {"2a00:c600::/29", "41960"}, + {"2a09:6d40::/32", "60349"}, + {"2a0e:aa01:aa10::/44", "210311"}, + {"2001:559:c49c::/48", "33659"}, + {"2001:4878:8220::/48", "12222"}, + {"2409:8087:1b00::/37", "9808"}, + {"2803:d060::/32", "267813"}, + {"2001:1388:b46::/35", "6147"}, + {"2402:8100:39f0::/38", "45271"}, + {"2600:1003:b1d0::/44", "6167"}, + {"2600:e000::/38", "22995"}, + {"2803:6ce0::/35", "269909"}, + {"2a02:26f0:b001::/40", "20940"}, + {"2a07:14c0:4000::/36", "208861"}, + {"2a0b:82c0::/29", "41645"}, + {"2402:800:371d::/42", "7552"}, + {"2600:141b:7800::/48", "35994"}, + {"2804:6e4:a000::/35", "262612"}, + {"2804:136c:e001::/35", "262372"}, + {"2804:3e50::/39", "266587"}, + {"2804:7698::/32", "271122"}, + {"2a00:4200::/32", "41349"}, + {"2a01:ad40::/32", "198781"}, + {"2a12:5c00::/32", "42000"}, + {"2803:d600::/32", "20255"}, + {"2001:559:843b::/48", "7922"}, + {"2400:3740::/32", "136000"}, + {"2403:5a00::/32", "23783"}, + {"2a02:26f7:fa88::/48", "36183"}, + {"2c0f:3200::/47", "37558"}, + {"2c0f:ee78:8003::/45", "61317"}, + {"2406:e1c0:601::/36", "141459"}, + {"2600:6000:f004::/40", "12271"}, + {"2605:c700::/32", "819"}, + {"2620:4f:2000::/48", "40773"}, + {"2804:3994:8000::/33", "266037"}, + {"2a09:72c0::/29", "400522"}, + {"2001:550:d03::/45", "174"}, + {"2405:a540:100f::/32", "38156"}, + {"2409:8704:5900::/34", "24547"}, + {"240a:a694::/32", "144334"}, + {"2600:6c38:892::/44", "20115"}, + {"2a0a:fc80::/32", "12409"}, + {"2a10:d200::/29", "212323"}, + {"2001:15b8::/32", "24730"}, + {"2400:7e80::/32", "59258"}, + {"240a:a0be::/32", "142840"}, + {"2606:1c00::/32", "11714"}, + {"2610:88:2:1::/48", "14037"}, + {"2804:645c::/32", "269423"}, + {"2804:7a2c::/32", "271352"}, + {"2a00:a640:4::/32", "13445"}, + {"2a02:16a::/31", "13030"}, + {"2a03:90c0:9994::/44", "199524"}, + {"2a05:7640:2040::/42", "174"}, + {"2001:559:c202::/48", "33661"}, + {"2001:df1:6f80::/48", "139655"}, + {"2804:80e0::/32", "272418"}, + {"2a02:26f7:c746::/47", "20940"}, + {"2a02:26f7:f885::/46", "20940"}, + {"2a0f:fc0::/29", "60262"}, + {"2001:559:8428::/48", "33652"}, + {"2401:9780::/32", "132893"}, + {"2604:5500:a000::/38", "19165"}, + {"2801:12:7000::/48", "266737"}, + {"2804:54b4::/32", "262821"}, + {"2a02:26f7:ca89::/42", "20940"}, + {"2001:388:1030::/48", "137188"}, + {"2001:559:36c::/48", "7016"}, + {"2401:d800:bdc2::/42", "7552"}, + {"2404:bf40:c081::/48", "7545"}, + {"240a:aeaf::/32", "146409"}, + {"240e:3ba::/35", "134773"}, + {"2803:700::/32", "27976"}, + {"2806:2f0:7101::/46", "17072"}, + {"2001:559:5be::/48", "7922"}, + {"2402:9d80:a04::/46", "131429"}, + {"2402:e800::/32", "37912"}, + {"2403:1000:4100::/40", "38819"}, + {"2605:bfc0::/32", "36048"}, + {"2620:5:e000::/48", "13951"}, + {"2a02:26f0:301::/37", "20940"}, + {"2a0d:4f40::/32", "202724"}, + {"2403:300:a0c::/48", "6185"}, + {"2602:ff06:725::/48", "6939"}, + {"2607:fdf0:5c99::/38", "8008"}, + {"2a02:26f7:d649::/46", "20940"}, + {"2a02:2b50:ffff::/48", "21286"}, + {"2a02:2ab0:430::/39", "702"}, + {"2404:138:48::/39", "38022"}, + {"2405:9400::/32", "45172"}, + {"240e:978:1a00::/37", "4134"}, + {"2a02:ad8:14::/42", "12389"}, + {"2a02:c502::/29", "199246"}, + {"2409:8904:5e40::/42", "24547"}, + {"240e:3b5:2800::/38", "4134"}, + {"2a07:6c80::/29", "27176"}, + {"2001:4878:21e0::/44", "35994"}, + {"2804:ebc::/32", "61588"}, + {"2a03:e841::/32", "47492"}, + {"2a0b:aa00::/29", "20811"}, + {"2001:559:8289::/48", "20214"}, + {"2605:4a00:131::/44", "14361"}, + {"2605:cf80::/32", "63297"}, + {"2801:80:2560::/48", "268620"}, + {"2804:14c:75a6::/47", "28573"}, + {"2001:67c:1b08::/48", "2598"}, + {"2604:d600:566::/38", "32098"}, + {"2804:2cd4:30::/41", "265246"}, + {"2001:559:c20f::/48", "33662"}, + {"2001:57a:102::/47", "26008"}, + {"240a:a7e6::/32", "144672"}, + {"240a:ae25::/32", "146271"}, + {"2600:140b:1c01::/38", "20940"}, + {"2603:c0fc:2800::/40", "54253"}, + {"2804:eb4:480::/38", "61890"}, + {"2001:559:c247::/48", "33659"}, + {"240a:a97d::/32", "145079"}, + {"2600:370f:376e::/40", "32261"}, + {"2804:145c:8500::/36", "263327"}, + {"2a02:26f7:d60c::/48", "36183"}, + {"2408:8406:9c00::/39", "4808"}, + {"2409:8c28:203::/36", "56041"}, + {"2607:fc58:1:57::/64", "13536"}, + {"2a06:1140::/29", "49262"}, + {"2a0f:5707:ffa0::/45", "131668"}, + {"2405:ba00:8010::/48", "38538"}, + {"2620:10a:80d1::/48", "27299"}, + {"2804:6e2c::/32", "270580"}, + {"2a0f:bd00::/29", "202591"}, + {"2001:250:181a::/48", "23910"}, + {"2402:79c0:1149::/48", "26415"}, + {"2a01:581:d::/29", "9136"}, + {"2a02:26f7:d300::/48", "36183"}, + {"2405:3340::/48", "137856"}, + {"2800:160:2c57::/40", "14259"}, + {"2804:80ac::/32", "271766"}, + {"2a02:e747::/48", "210168"}, + {"2001:1248:a444::/43", "11172"}, + {"2404:e400:20::/32", "45345"}, + {"2804:46d4::/47", "267014"}, + {"240a:aaee::/32", "145448"}, + {"2a07:e00:ac::/48", "210083"}, + {"2001:559:7ef::/48", "22258"}, + {"2001:d10::/32", "4787"}, + {"2001:df4:bd00::/48", "137338"}, + {"2001:df7::/48", "59162"}, + {"2405:8d40:b00::/37", "139831"}, + {"2408:8456:1640::/39", "17816"}, + {"2408:8957:500::/40", "17816"}, + {"240d:c010:41::/46", "139341"}, + {"2620:111:800a::/45", "32771"}, + {"2804:3868:1000::/37", "266475"}, + {"2804:38e4::/32", "266508"}, + {"2a03:be80:42::/32", "15510"}, + {"2407:9240:2900::/40", "212358"}, + {"2607:f3a0:a001::/48", "399819"}, + {"2800:160:2b78::/40", "14259"}, + {"2804:61dc::/33", "269261"}, + {"2a02:26f0:aa01::/39", "20940"}, + {"2001:67c:2af8::/48", "29518"}, + {"2408:8459:be50::/33", "17816"}, + {"2a02:26f7:d241::/46", "20940"}, + {"2405:1c0:6871::/46", "55303"}, + {"240a:ab8d::/32", "145607"}, + {"2602:feda:d83::/48", "209645"}, + {"2605:b1c0::/32", "14404"}, + {"2403:1940:50::/48", "137935"}, + {"2408:8456:dc10::/42", "134543"}, + {"2408:8610::/29", "4837"}, + {"2001:67c:2378::/48", "41504"}, + {"2001:67c:2c18::/48", "59750"}, + {"240a:a33a::/32", "143476"}, + {"2607:f250:d020::/48", "7046"}, + {"2001:678:e00::/48", "44471"}, + {"2400:cb00:a842::/48", "13335"}, + {"2804:14c:d000::/40", "28573"}, + {"2a00:7160::/32", "8449"}, + {"2a0c:dd80:1000::/48", "208626"}, + {"240a:a7d3::/32", "144653"}, + {"2605:6440:6003::/45", "396356"}, + {"2804:426c::/32", "267499"}, + {"2806:2f0:4523::/41", "17072"}, + {"2a02:26f7:f280::/48", "36183"}, + {"2a03:300::/31", "207934"}, + {"2a0f:cc40::/29", "8901"}, + {"2403:1cc0:1301::/48", "45352"}, + {"2408:822a:9200::/34", "139007"}, + {"2409:8752:900::/38", "56047"}, + {"240e:14:7800::/37", "133776"}, + {"2606:2800:501b::/48", "14153"}, + {"2800:bf0:80a0::/47", "52257"}, + {"2804:240:3000::/32", "262798"}, + {"2001:da8:e81e::/48", "24368"}, + {"240a:a22f::/32", "143209"}, + {"2801:0:200::/48", "8053"}, + {"2001:559:c349::/48", "33657"}, + {"240a:a65c::/32", "144278"}, + {"240a:aa50::/32", "145290"}, + {"2804:1c8:8010::/39", "53184"}, + {"2a03:2267::/32", "49009"}, + {"2a0d:2146:8586::/44", "39526"}, + {"2600:141c:1801::/34", "20940"}, + {"2607:fa98::/35", "22439"}, + {"2804:1420::/32", "52901"}, + {"2a00:ae80::/32", "49750"}, + {"2a0d:4900::/48", "205996"}, + {"2001:559:2::/48", "7016"}, + {"2001:559:4dd::/48", "7015"}, + {"2001:559:c24f::/48", "33659"}, + {"2408:8456:a840::/38", "17816"}, + {"2606:c140::/32", "211444"}, + {"2804:4ff0::/32", "268359"}, + {"2a02:c50:db8::/48", "196610"}, + {"2a02:26f7:ba84::/47", "36183"}, + {"2a04:200::/29", "48101"}, + {"2001:559:c130::/48", "33659"}, + {"2001:42a8::/39", "36937"}, + {"2404:181::/32", "6619"}, + {"2600:1400:f001::/31", "20940"}, + {"2806:20d:7500::/32", "32098"}, + {"2001:da8:a400::/48", "24348"}, + {"240a:a9bf::/32", "145145"}, + {"240a:aa66::/32", "145312"}, + {"2606:2800:6a4d::/46", "15133"}, + {"2a04:4e40:4e00::/48", "54113"}, + {"2001:1248:5a32::/41", "11172"}, + {"2401:d800:ae0::/39", "7552"}, + {"2404:fd00:c::/32", "58552"}, + {"240e:108:1110::/47", "137695"}, + {"2a00:8860:900::/40", "209485"}, + {"2a02:c900::/29", "62319"}, + {"2001:978:90a::/38", "174"}, + {"240a:a5d3::/32", "144141"}, + {"2605:7240::/32", "10352"}, + {"2a05:c5c0::/48", "3164"}, + {"240e:67f:1800::/32", "4134"}, + {"2600:1417:e801::/37", "20940"}, + {"2a00:79e1:f14::/48", "395973"}, + {"2001:559:866e::/48", "7922"}, + {"2001:da8:6408::/48", "24367"}, + {"240e:dd:e000::/30", "4134"}, + {"2600:370f:3741::/46", "32261"}, + {"2803:7d80:5041::/32", "11664"}, + {"2a02:5c00::/29", "12580"}, + {"2a0c:1380::/29", "209984"}, + {"2001:428:3807::/48", "18703"}, + {"2001:1250:e300::/44", "22894"}, + {"240a:abdf::/32", "145689"}, + {"2800:40::/43", "16814"}, + {"2a02:918::/32", "31178"}, + {"2a02:6000:ffff::/48", "63017"}, + {"2600:3402:900::/35", "4181"}, + {"2800:bf0:8080::/45", "52257"}, + {"2804:38ec::/32", "266510"}, + {"2804:6990::/32", "270278"}, + {"2403:2940:1::/48", "63612"}, + {"2001:559:c065::/48", "33652"}, + {"2001:67c:19c0::/48", "48778"}, + {"2001:da8:6011::/46", "23910"}, + {"2804:14c:7f49::/43", "28573"}, + {"2a06:be00::/31", "200519"}, + {"2001:559:c23a::/48", "33651"}, + {"2001:67c:118::/48", "50419"}, + {"2400:4ec0:8300::/36", "64300"}, + {"2403:8300:8282::/48", "24442"}, + {"240a:a9a8::/32", "145122"}, + {"240c:ca1a::/32", "23910"}, + {"2804:f6c:2051::/32", "263585"}, + {"2804:5d44::/32", "268961"}, + {"2a02:1010:4000::/38", "9197"}, + {"2a0c:da04:10::/46", "202365"}, + {"2a0f:88c0::/32", "397651"}, + {"2001:dcd:7::/48", "397232"}, + {"2405:4040::/32", "135206"}, + {"2a02:758::/32", "29056"}, + {"2a02:2010:2200::/45", "20978"}, + {"2a02:26f7:d680::/48", "36183"}, + {"2a0a:5180::/29", "203231"}, + {"2401:8700:7f::/48", "36408"}, + {"2405:3e00::/32", "3908"}, + {"2804:2ab8:a::/41", "53180"}, + {"2804:79f4::/32", "271338"}, + {"2a00:b700:f::/48", "51659"}, + {"2a03:8940::/32", "49784"}, + {"2a0e:fd45:b01::/42", "44103"}, + {"2408:8957:e000::/40", "17622"}, + {"2600:1406:e000::/48", "35994"}, + {"2606:5440::/32", "1239"}, + {"2001:559:8482::/48", "7015"}, + {"2001:44c8:45e0::/43", "45430"}, + {"2403:2b40::/32", "137715"}, + {"2408:8207:a840::/28", "4808"}, + {"2408:8957:8a00::/40", "17622"}, + {"240e:45c:5500::/40", "140529"}, + {"2803:60a0::/32", "266809"}, + {"2a02:2aa0:120::/32", "702"}, + {"2001:fd8:31c0::/42", "132199"}, + {"2408:896c::/32", "4837"}, + {"2604:c800:ffff::/48", "6939"}, + {"2610:20:8808::/37", "3477"}, + {"2a00:1d32::/32", "9121"}, + {"2a00:ae20::/32", "60501"}, + {"2a01:788:1000::/48", "34305"}, + {"2a03:7380:3800::/42", "13188"}, + {"2001:57a:c222::/34", "22773"}, + {"2600:1010:f110::/36", "22394"}, + {"2607:f038:6006::/32", "21527"}, + {"2804:2c04::/32", "265188"}, + {"2001:559:842f::/48", "33651"}, + {"2001:67c:1064::/48", "51088"}, + {"240e:698:2a00::/40", "63835"}, + {"2804:1d30::/32", "264353"}, + {"2a00:1850:6ea::/48", "29357"}, + {"2408:8957:8000::/40", "17622"}, + {"2607:f7a8:1400::/38", "46887"}, + {"2a01:49a0::/32", "62199"}, + {"2a04:f580:9240::/48", "4809"}, + {"2a10:7bc0::/63", "60905"}, + {"2a06:6800::/29", "20565"}, + {"2804:65b8::/32", "269510"}, + {"2a07:e344::/32", "49981"}, + {"2001:559:c0a2::/48", "33659"}, + {"2001:579:e328::/41", "22773"}, + {"2401:e780::/32", "63930"}, + {"2607:f208:209::/48", "26496"}, + {"2610:b0:c100::/42", "701"}, + {"2804:2484:8150::/40", "28258"}, + {"2a09:4e04::/32", "208861"}, + {"240a:adfd::/32", "146231"}, + {"2804:3e34::/32", "266580"}, + {"2a02:2ad0:502::/48", "1270"}, + {"2001:559:8327::/44", "7015"}, + {"2402:800:9c71::/40", "7552"}, + {"2404:e100:3::/48", "55685"}, + {"240e:f7:6000::/36", "134771"}, + {"2600:1003:9850::/37", "22394"}, + {"2600:1417:16::/48", "7473"}, + {"2800:4b0:8810::/33", "12252"}, + {"240e:5a:6c00::/38", "137702"}, + {"2606:1e00::/32", "12067"}, + {"2620:22:4000::/48", "29773"}, + {"240a:acf8::/32", "145970"}, + {"240e:106:8000::/34", "4134"}, + {"2406:840:e1ef::/48", "141237"}, + {"2602:fd23:2::/48", "398292"}, + {"2607:6b80:66::/48", "63213"}, + {"2806:2f0:7303::/42", "17072"}, + {"2a0c:9a40:8170::/48", "210633"}, + {"2001:559:1ad::/48", "7725"}, + {"2001:678:78::/48", "42"}, + {"2406:840:f200::/44", "141694"}, + {"2409:8c2f:3801::/43", "56041"}, + {"2620:116:8082::/48", "27281"}, + {"2804:14d:8000::/40", "28573"}, + {"2804:2854::/32", "263956"}, + {"2001:468:26e1::/48", "237"}, + {"240e:3b8:d000::/36", "134772"}, + {"2a00:e800::/32", "49895"}, + {"2a06:1287:4::/42", "61138"}, + {"2a09:d340::/29", "39175"}, + {"2a0e:b107:14dd::/48", "50058"}, + {"2a0f:b507:ff03::/40", "206313"}, + {"2001:388:e3::/35", "7575"}, + {"2001:67c:24a0::/48", "198143"}, + {"2801:1b6::/44", "27951"}, + {"2a0b:6e40::/29", "61399"}, + {"2001:559:134::/48", "33491"}, + {"2001:4878:b228::/48", "12222"}, + {"2402:800:b7a0::/41", "7552"}, + {"2607:f740:20::/45", "36236"}, + {"2804:7504::/33", "271018"}, + {"2a10:ae80::/29", "212131"}, + {"2001:67c:7c2::/48", "57031"}, + {"2804:3c8c::/32", "266219"}, + {"2806:230:401b::/48", "11888"}, + {"2409:8050:3800::/47", "56047"}, + {"2a00:1c50:5::/46", "30811"}, + {"2a00:c8e0::/32", "199876"}, + {"2409:8904:8c90::/39", "24547"}, + {"2605:f340::/32", "399007"}, + {"2a0e:b107:17a1::/45", "56758"}, + {"2001:559:721::/48", "33657"}, + {"2401:d800:58b0::/41", "7552"}, + {"2804:2d8::/32", "52532"}, + {"2a02:26f7:d341::/46", "20940"}, + {"2a03:4c00::/29", "16347"}, + {"2001:480:161::/48", "5978"}, + {"2404:5d80:6600::/40", "33438"}, + {"2600:1001:9010::/40", "22394"}, + {"2607:6100:d0::/48", "54380"}, + {"2a04:e2c0::/29", "207050"}, + {"2a0f:1b00::/29", "7155"}, + {"2402:d0c0::/45", "35913"}, + {"240e:983:1e08::/48", "134773"}, + {"2604:bc0:5::/46", "46562"}, + {"2804:5e74::/32", "269034"}, + {"2a03:1900::/29", "47623"}, + {"2400:9380:89c0::/44", "136167"}, + {"2600:9000:115e::/48", "16509"}, + {"2607:f750:700::/36", "23473"}, + {"2a02:26f7:ec41::/46", "20940"}, + {"2a0d:d742::/45", "210036"}, + {"2a12:4946:4940::/44", "209958"}, + {"2409:8060:1900::/34", "9808"}, + {"2600:1409:a000::/48", "35994"}, + {"2803:17a0::/32", "267777"}, + {"2a02:970:115a::/42", "44002"}, + {"2a02:26f7:df48::/48", "36183"}, + {"2404:1f00:ffb5::/41", "55947"}, + {"2a02:26f7:dcc1::/46", "20940"}, + {"2a00:1aa8::/29", "42189"}, + {"2600:1406:1401::/39", "20940"}, + {"2607:fdc0:180::/38", "20326"}, + {"2804:14d:5c61::/43", "28573"}, + {"2a02:2e02:ea0::/43", "12479"}, + {"2a07:e940::/29", "213150"}, + {"2a0a:d6c0:2::/45", "61423"}, + {"2a0e:1107::/48", "208975"}, + {"2409:4071:1000::/30", "55836"}, + {"240a:a1ea::/32", "143140"}, + {"2603:f400::/26", "397165"}, + {"2806:268:1300::/37", "13999"}, + {"2a0e:e704:45::/48", "212970"}, + {"2001:468:c00::/45", "10886"}, + {"2001:559:443::/48", "7015"}, + {"2001:4410::/35", "132040"}, + {"2a00:1850:6a1::/48", "29357"}, + {"2a00:1908:e48::/32", "43586"}, + {"2001:67c:10cc::/48", "45011"}, + {"2405:1c0:6611::/45", "55303"}, + {"2804:770c::/32", "271151"}, + {"2a03:e00::/32", "50163"}, + {"2001:559:c345::/48", "7922"}, + {"2400:7400:3a::/48", "38044"}, + {"2401:d800:9b60::/40", "7552"}, + {"2405:1300::/32", "58698"}, + {"2406:daa0:a0c0::/44", "16509"}, + {"2600:5c01:2d3a::/35", "10796"}, + {"2804:7f60::/32", "271684"}, + {"2a0b:4581::/48", "16509"}, + {"2607:ac80:100::/40", "397511"}, + {"2607:b480::/32", "394814"}, + {"2620:f1:c000::/48", "22773"}, + {"2804:3244::/46", "265066"}, + {"2804:3c7c::/32", "266215"}, + {"2a05:3280:43a::/29", "50999"}, + {"2a0c:4140::/32", "206656"}, + {"2a0e:b107:510::/48", "209101"}, + {"2001:559:8260::/48", "33667"}, + {"2001:df2:ee00::/47", "45192"}, + {"2001:19f0::/38", "20473"}, + {"2402:800:9b39::/41", "7552"}, + {"2602:fde7::/36", "5650"}, + {"2610:b0:4117::/48", "3573"}, + {"2800:bf0:a6::/48", "27947"}, + {"2a00:ff0:1234::/48", "41494"}, + {"2a00:7b80::/32", "62370"}, + {"2001:998::/40", "719"}, + {"2607:fc48:410::/48", "40009"}, + {"2a0a:59c7:1009::/46", "204724"}, + {"2a03:9e42::/32", "31399"}, + {"2a0e:97c0:738::/45", "208699"}, + {"2001:43f8:d20::/44", "328209"}, + {"2a05:3740::/29", "8774"}, + {"2a0f:ff00:1912::/48", "213281"}, + {"2001:559:8347::/48", "7015"}, + {"2001:67c:504::/48", "61337"}, + {"2402:a300:c006::/36", "55427"}, + {"2a0f:c081:b11e::/48", "48108"}, + {"2001:559:c104::/48", "7725"}, + {"2001:559:c2ea::/47", "33659"}, + {"2401:7400:ec01::/35", "4773"}, + {"2404:b800::/32", "4739"}, + {"240a:a643::/32", "144253"}, + {"2801:1e:c800::/48", "27951"}, + {"2803:5200::/48", "52439"}, + {"2a02:840::/32", "41828"}, + {"2a05:b800::/29", "203550"}, + {"2a0a:1880::/29", "39647"}, + {"2404:bf40:a040::/48", "7545"}, + {"2405:e0c0::/48", "63730"}, + {"2804:5100::/34", "268424"}, + {"2a0b:4d07:a01::/48", "44239"}, + {"2001:1980:500::/36", "29838"}, + {"240a:a239::/32", "143219"}, + {"240a:a5a1::/32", "144091"}, + {"2604:cbc0::/32", "398143"}, + {"2a03:c000::/29", "2116"}, + {"2a0b:b87:ffd4::/48", "204826"}, + {"2c0f:e958::/32", "15399"}, + {"2402:800:34ee::/43", "7552"}, + {"240e:3be:ac00::/35", "4134"}, + {"2a01:b800::/32", "41937"}, + {"2a02:26f7:f089::/46", "20940"}, + {"2001:ee0:9640::/39", "45899"}, + {"2402:800:357f::/40", "7552"}, + {"2409:8c30:1210::/39", "9808"}, + {"2a02:ee80:41d8::/42", "3573"}, + {"2a06:4540::/29", "200428"}, + {"2a06:c5c0:700::/48", "44709"}, + {"2a07:59c6:eed7::/44", "48646"}, + {"2001:559:8322::/48", "33651"}, + {"2a00:f9c0::/32", "31727"}, + {"2a02:888:4052::/47", "48695"}, + {"2001:c38:90aa::/45", "135566"}, + {"2404:3d00:40c4::/47", "21433"}, + {"2604:2e00::/32", "11650"}, + {"2a02:26f7:c8d8::/48", "36183"}, + {"2001:579:d0e4::/39", "22773"}, + {"2409:896a:b000::/36", "9808"}, + {"2600:1402:801::/38", "20940"}, + {"2604:2e80:806::/37", "30036"}, + {"2a02:26f7:cc45::/46", "20940"}, + {"2a04:5c85::/36", "200584"}, + {"2001:c50::/32", "9924"}, + {"2620:12e:e000::/40", "14630"}, + {"2a03:19c0::/32", "204141"}, + {"2001:550:8901:2::/37", "174"}, + {"2804:555c::/32", "264105"}, + {"2001:418:1467::/40", "2914"}, + {"2404:8000:10bb::/32", "17451"}, + {"240c:c0a9:1300::/40", "133513"}, + {"240e:4a:4300::/40", "58571"}, + {"2a0f:ca87:9::/48", "208771"}, + {"2001:559:8596::/48", "7922"}, + {"2001:559:c0cc::/48", "33659"}, + {"2407:4000::/45", "38005"}, + {"240e:86:3000::/37", "137688"}, + {"2620:57:4000::/48", "62831"}, + {"2602:fcff:14::/47", "57164"}, + {"2607:3180::/47", "14877"}, + {"2620:101:200f::/43", "16417"}, + {"2804:6398::/32", "269371"}, + {"2a02:26f7:f300::/48", "36183"}, + {"2a04:8480::/30", "196714"}, + {"2a0d:1a45:6665::/32", "57782"}, + {"2a0e:b540::/29", "30823"}, + {"2a00:1d50::/32", "47605"}, + {"2a00:ab01::/32", "50149"}, + {"2a04:2100::/31", "40999"}, + {"2001:67c:2460::/48", "1257"}, + {"240a:a784::/32", "144574"}, + {"240a:a7bd::/32", "144631"}, + {"2600:3002:1212::/32", "13649"}, + {"2a02:26f0:d101::/38", "20940"}, + {"2a02:26f7:1b::/48", "20940"}, + {"2001:559:10::/48", "7922"}, + {"2001:67c:1264::/48", "51883"}, + {"240e:267:4400::/36", "4134"}, + {"2804:208c::/32", "264497"}, + {"2a07:5c0::/29", "213035"}, + {"2a0e:fd45:40f4::/48", "49367"}, + {"2a0f:5707:b000::/48", "212895"}, + {"2001:559:137::/44", "33650"}, + {"2407:bb00:5000::/44", "45625"}, + {"2602:fd65::/36", "55140"}, + {"2803:ce00::/32", "52422"}, + {"2804:20:7a::/32", "26615"}, + {"2a00:c020::/36", "197588"}, + {"2a03:5a00:3e::/48", "48614"}, + {"2a07:57c0::/32", "50113"}, + {"2001:559:43a::/48", "33657"}, + {"2001:579:60ac::/38", "22773"}, + {"240a:a3dd::/32", "143639"}, + {"2001:559:852f::/48", "33662"}, + {"2001:67c:40::/48", "35733"}, + {"2400:13c0::/32", "135893"}, + {"2402:3a80:c043::/44", "38266"}, + {"2804:b4:f000::/36", "28294"}, + {"2804:d04::/32", "52584"}, + {"2804:1a30:c300::/40", "61844"}, + {"2a02:2e02:2670::/39", "12479"}, + {"2a10:6b00::/29", "399975"}, + {"2001:1260:4::/48", "28535"}, + {"2409:8a52:1100::/31", "56047"}, + {"2a00:ece1::/48", "5606"}, + {"2a01:9500:81::/32", "197696"}, + {"2a04:f580:9200::/46", "4809"}, + {"2001:559:827d::/48", "7015"}, + {"2001:40c0::/48", "21217"}, + {"2409:8752:b00::/37", "56047"}, + {"2001:559:c27a::/48", "33652"}, + {"2001:df7:af00::/48", "138142"}, + {"2001:44c8:4660::/43", "45430"}, + {"2407:5380::/32", "63629"}, + {"2604:af80:448::/36", "18859"}, + {"2a04:4240::/29", "48871"}, + {"2401:3bc0:401::/38", "137409"}, + {"240a:a84d::/32", "144775"}, + {"2605:7200::/32", "21804"}, + {"2803:2a00:3c00::/33", "27895"}, + {"2c0f:f020:8b00::/40", "327907"}, + {"240a:ac03::/32", "145725"}, + {"2600:1007:d0c0::/44", "6167"}, + {"2603:c026:c000::/35", "31898"}, + {"2800:160:1da2::/44", "14259"}, + {"2a00:1d34:4400::/40", "47331"}, + {"2409:8924:6f00::/35", "56046"}, + {"2a00:1588::/33", "25372"}, + {"2a02:2af8:130::/38", "702"}, + {"2a0a:4e83:120::/48", "206074"}, + {"2a0c:82c0::/29", "203015"}, + {"2001:16d8:65::/36", "16150"}, + {"2402:ef03:1::/46", "7633"}, + {"2409:802f:2900::/46", "9808"}, + {"240a:abad::/32", "145639"}, + {"240e:3b5:4c00::/35", "136200"}, + {"2804:2688::/32", "262482"}, + {"2804:2b44:37::/40", "265144"}, + {"2a03:2c40::/32", "199653"}, + {"2a10:44c0::/29", "210054"}, + {"2001:559:5a6::/44", "7922"}, + {"2401:b400:8::/47", "58536"}, + {"2402:9a00::/32", "38199"}, + {"2600:370f:3141::/40", "32261"}, + {"2620:11c:c000::/48", "54830"}, + {"2405:100:101::/32", "9905"}, + {"2600:1017:f110::/38", "6167"}, + {"2620:12b:4000::/40", "395568"}, + {"2801:80:16b0::/48", "265325"}, + {"2001:559:85b0::/48", "33491"}, + {"240a:a8fc::/32", "144950"}, + {"240e:60c:f800::/38", "137688"}, + {"2a0f:3784:100::/46", "213204"}, + {"2001:559:870e::/48", "7016"}, + {"2001:df1:3700:4000::/122", "136324"}, + {"2a0d:c5c0::/32", "210051"}, + {"2408:8956:1f40::/40", "17816"}, + {"2605:7c0:f100::/46", "19382"}, + {"2a10:2f00:14a::/48", "212767"}, + {"2403:e100:1001::/32", "58601"}, + {"2a0e:97c0:240::/44", "211688"}, + {"2001:67c:58::/48", "24629"}, + {"2400:1020::/44", "45276"}, + {"240a:a667::/32", "144289"}, + {"2602:ff62:183::/38", "61317"}, + {"2800:482:4001::/48", "14080"}, + {"2a02:26f7:d6cd::/42", "20940"}, + {"2a0c:c9c2:2::/40", "202414"}, + {"2001:3c8:1202::/48", "4762"}, + {"2001:67c:23b4::/48", "21297"}, + {"2603:b010:8000::/33", "11796"}, + {"2a02:2d8:1:780a::/64", "35277"}, + {"2001:559:73e::/48", "7922"}, + {"2001:16f8::/43", "25525"}, + {"2406:daa0:4080::/44", "16509"}, + {"2804:868::/32", "28649"}, + {"2804:2a50::/32", "262819"}, + {"2a06:6580::/29", "34549"}, + {"2a0f:6580::/44", "48292"}, + {"2001:1248:4320::/41", "11172"}, + {"240e:948::/31", "137695"}, + {"2804:14d:be82::/47", "28573"}, + {"2806:2f0:31a3::/41", "17072"}, + {"2001:67c:1933::/48", "12337"}, + {"2001:810::/32", "8839"}, + {"2409:8914:c600::/39", "56044"}, + {"2001:559:c3db::/48", "33287"}, + {"240a:a23c::/32", "143222"}, + {"2600:1013::/32", "6167"}, + {"2606:ec0:1000::/36", "4906"}, + {"2800:ab0::/32", "262196"}, + {"2a0a:1141:4000::/34", "206702"}, + {"2402:1c00:c07::/33", "23838"}, + {"2402:ef1e:100::/47", "7633"}, + {"2402:f000::/32", "45576"}, + {"2620:134:d000::/44", "32263"}, + {"2804:179c:2016::/35", "263159"}, + {"2a07:fec0::/29", "213138"}, + {"2c0f:f530::/44", "61138"}, + {"2001:418:4001:4::/64", "20940"}, + {"2806:230:5013::/48", "11888"}, + {"240a:a47e::/32", "143800"}, + {"2600:6c36:990::/48", "33588"}, + {"2602:fd36::/36", "398547"}, + {"2606:2800:11c::/48", "15133"}, + {"2804:4900::/34", "267158"}, + {"2a01:250:f000::/36", "34511"}, + {"2a02:4680::/48", "12722"}, + {"2604:4280::/32", "14866"}, + {"2606:5580:2000::/38", "63242"}, + {"2800:bf0:8291::/45", "52257"}, + {"2804:69b0:140::/44", "270285"}, + {"2a02:26f7:c048::/48", "36183"}, + {"2800:68:36::/48", "61468"}, + {"2800:98::/35", "14754"}, + {"2804:640:3e81::/43", "262713"}, + {"2a0a:2540::/29", "42244"}, + {"2001:470:13e::/48", "14979"}, + {"2806:263:c300::/37", "13999"}, + {"2a02:26f7:bd81::/46", "20940"}, + {"2a02:26f7:e80d::/42", "20940"}, + {"2001:559:1c4::/48", "33287"}, + {"2001:559:2b2::/47", "33652"}, + {"2001:559:8601::/46", "33287"}, + {"2001:4220:8015::/48", "24835"}, + {"2602:fc8b:22::/47", "211544"}, + {"2604:4500::/43", "29802"}, + {"2800:160:1db0::/41", "14259"}, + {"2804:38b8::/32", "266497"}, + {"2a02:26f7:d688::/48", "36183"}, + {"2a10:a040::/29", "40970"}, + {"2c0f:f6d8:4004::/47", "3573"}, + {"240a:a65d::/32", "144279"}, + {"240e:108:9b::/48", "134761"}, + {"2804:64d0::/32", "269450"}, + {"2a00:ed40::/32", "51043"}, + {"2a03:63e0::/29", "197099"}, + {"2408:8459:9a10::/42", "17623"}, + {"2600:380:b480::/39", "20057"}, + {"2620:106:e006::/47", "40428"}, + {"2804:2284::/32", "264106"}, + {"2405:203:c09::/29", "55836"}, + {"2407:6ac0::/32", "141968"}, + {"2806:363::/35", "265607"}, + {"2a07:3500:1a48::/48", "29396"}, + {"2a0c:b641:680::/44", "207466"}, + {"2001:4490:7f8::/36", "9829"}, + {"2409:8904:d0b0::/39", "24547"}, + {"2620:138:8000::/47", "62766"}, + {"2806:2f0:374::/40", "17072"}, + {"2a01:6d0::/32", "12552"}, + {"2001:559:80cf::/48", "33491"}, + {"2804:53d4:8000::/33", "268609"}, + {"2001:7f8:5d::/116", "29632"}, + {"2a02:26f0:a601::/39", "20940"}, + {"2a0a:4781::/30", "208861"}, + {"2400:4d40:f001::/36", "134204"}, + {"2400:a740::/32", "133034"}, + {"240a:a3e3::/32", "143645"}, + {"2804:3b6c:c00c::/46", "265442"}, + {"2a01:4fc0::/34", "5517"}, + {"2a10:6980::/29", "204790"}, + {"2001:250:2::/48", "24348"}, + {"2600:1480:9801::/37", "20940"}, + {"2001:978:7602::/36", "174"}, + {"2804:41f8::/32", "267469"}, + {"2a02:26f7:c581::/46", "20940"}, + {"2a06:7340:1782::/48", "199364"}, + {"2001:250:7021::/46", "23910"}, + {"2001:678:ed0::/48", "212567"}, + {"2001:b10:6000::/35", "16283"}, + {"2001:4150::/32", "5539"}, + {"2400:ddc0:1001::/34", "4785"}, + {"240a:afe2::/32", "146716"}, + {"2602:feda:d82::/48", "142566"}, + {"2a02:128:18::/48", "210845"}, + {"2a06:8100::/29", "34549"}, + {"2001:388:1035::/40", "7575"}, + {"2400:7400:65::/48", "23736"}, + {"2409:8e1b::/29", "9808"}, + {"240a:a899::/32", "144851"}, + {"2600:1404:ec01::/35", "20940"}, + {"2620:138:800e::/47", "62766"}, + {"2804:97c::/32", "263092"}, + {"2804:3458::/32", "28128"}, + {"2a06:5240:1ff0::/44", "50629"}, + {"2a0f:85c1:100::/40", "209401"}, + {"2804:4::/32", "28667"}, + {"2a03:6180::/32", "41741"}, + {"2a09:b00::/29", "209895"}, + {"2001:67c:16f8::/48", "198611"}, + {"240a:adc7::/32", "146177"}, + {"240e:45c:c900::/40", "140538"}, + {"2605:ff80::/32", "21632"}, + {"2606:5480:1000::/36", "21722"}, + {"2804:833c:2400::/33", "272185"}, + {"2a00:19d8::/32", "42004"}, + {"2a02:26f7:fc09::/38", "20940"}, + {"2001:559:8237::/48", "7015"}, + {"2405:3580:1919::/48", "62240"}, + {"2408:894c::/32", "4837"}, + {"240a:a66f::/32", "144297"}, + {"240e:bf:b8fc::/46", "138436"}, + {"2600:1006:b130::/44", "22394"}, + {"2604:81c0:3d5::/48", "396422"}, + {"2804:7420::/32", "270960"}, + {"2a02:17e8:801::/37", "13002"}, + {"2c0f:f798::/32", "327817"}, + {"240a:a183::/32", "143037"}, + {"2602:fbc3::/36", "13737"}, + {"2606:2800:5081::/48", "15133"}, + {"2803:7e00:600f::/32", "28026"}, + {"2409:807f:2c00::/24", "9808"}, + {"240a:ad79::/32", "146099"}, + {"2804:14d:ba87::/42", "28573"}, + {"2a01:9760:2::/47", "62087"}, + {"2001:559:8470::/48", "7015"}, + {"2001:67c:18e0::/48", "199971"}, + {"2401:d800:db0::/41", "7552"}, + {"240e:3ba:4c00::/35", "136200"}, + {"240e:438:1a20::/43", "140647"}, + {"2600:1409:1801::/34", "20940"}, + {"2605:fd00::/32", "15296"}, + {"2a02:53e0::/32", "44092"}, + {"2001:1b88:2::/32", "39477"}, + {"2606:2500::/32", "7194"}, + {"2a02:26f7:f6ea::/47", "20940"}, + {"2409:8775::/28", "9808"}, + {"2804:390:2000::/35", "52956"}, + {"2402:9e80:10::/48", "20473"}, + {"240a:a7a5::/32", "144607"}, + {"240e:94::/31", "17638"}, + {"2600:1001:b1d0::/44", "6167"}, + {"2606:f100:b000::/33", "3300"}, + {"2405:fc80::/32", "23805"}, + {"2604:340::/32", "32281"}, + {"2a02:26f7:b741::/46", "20940"}, + {"2a03:3180:10::/36", "44453"}, + {"2001:340::/32", "4678"}, + {"2602:ff12::/36", "62529"}, + {"2804:6e40:3000::/32", "270584"}, + {"2a05:5dc0::/29", "201193"}, + {"2a0c:180::/29", "39419"}, + {"2001:44b8:30b2::/48", "7545"}, + {"2404:8e00::/32", "55391"}, + {"2405:6c0:4::/48", "63641"}, + {"2a02:21b2:ac10::/48", "57370"}, + {"2a0c:2f07:ac1::/48", "206924"}, + {"2001:559:11::/48", "7015"}, + {"2001:559:80d7::/48", "7015"}, + {"2401:b0c0:e000::/48", "136941"}, + {"2604:ff00:1b01::/48", "36271"}, + {"2a03:2760::/32", "49115"}, + {"2a06:e043::/32", "198507"}, + {"2001:559:836e::/48", "7922"}, + {"2402:800:ba70::/40", "7552"}, + {"2402:a7c0::/32", "59253"}, + {"2402:b801::/38", "18371"}, + {"2600:140e:3::/31", "20940"}, + {"2602:fed2:7181::/46", "53356"}, + {"2800:160:1e98::/46", "14259"}, + {"2001:578:118::/42", "22773"}, + {"240e:37b:2600::/32", "4134"}, + {"2600:6c39:22c::/43", "20115"}, + {"2607:f0c8::/32", "21949"}, + {"2a07:3500:1da8::/48", "1136"}, + {"2001:559:852e::/48", "7922"}, + {"2001:67c:271c::/48", "60213"}, + {"2001:1250::/44", "22894"}, + {"240a:a799::/32", "144595"}, + {"2a00:fc00:e004::/35", "3255"}, + {"2a05:7400::/34", "31257"}, + {"2a07:3500:1100::/48", "34108"}, + {"2001:559:81f3::/48", "33657"}, + {"2001:da8:7010::/48", "24363"}, + {"2401:4900:3a2a::/45", "45609"}, + {"2804:14c:a989::/41", "28573"}, + {"2a00:18e0::/48", "196763"}, + {"2a01:ce9c:9000::/31", "51964"}, + {"2a09:1140::/48", "50007"}, + {"2c0f:f188::/46", "328228"}, + {"2406:840:800::/41", "139317"}, + {"2409:8904:cda0::/38", "24547"}, + {"2603:c0f8:1020::/38", "20054"}, + {"2001:559:85b6::/44", "33491"}, + {"2001:8d8::/40", "8560"}, + {"2402:ef1a:1::/32", "7633"}, + {"2605:2040::/32", "396040"}, + {"2607:e400:2904::/32", "7459"}, + {"2a00:4780::/32", "35600"}, + {"2a0b:4340:a0::/48", "205532"}, + {"2408:840c:1e00::/40", "17621"}, + {"2408:8456:9410::/42", "134543"}, + {"240a:a63d::/32", "144247"}, + {"2620:104:8000::/40", "3807"}, + {"2a03:7540:5556::/34", "44406"}, + {"2408:8459:9e50::/34", "17816"}, + {"2001:559:c145::/48", "33652"}, + {"2001:44b8:27::/48", "4739"}, + {"240a:a868::/32", "144802"}, + {"2605:3380:42f2::/45", "12025"}, + {"2607:5600::/32", "31863"}, + {"2804:e0c:80::/48", "28176"}, + {"2001:253:121::/48", "142087"}, + {"2804:1e7c::/32", "264432"}, + {"2a0a:e040::/29", "42349"}, + {"240e:965:e600::/36", "4134"}, + {"2607:e880:8224::/48", "12220"}, + {"2800:484:2300::/40", "10620"}, + {"2804:242c::/32", "264206"}, + {"2001:df3:3980::/48", "44592"}, + {"240a:a36e::/32", "143528"}, + {"240e:44d:2d40::/42", "140349"}, + {"2600:1415:d800::/48", "9443"}, + {"2a0e:fd45:40ff::/48", "53356"}, + {"2402:800:72a0::/41", "7552"}, + {"2a00:5500::/32", "3238"}, + {"240e:e9:5000::/37", "138950"}, + {"2602:fe2e:fff::/48", "212123"}, + {"2804:3770::/32", "266414"}, + {"2a00:7000::/32", "34762"}, + {"2a03:f80:45::/48", "9009"}, + {"2a0a:54c1:57::/30", "62240"}, + {"2a0d:1100::/29", "200000"}, + {"2001:559:ee::/47", "7922"}, + {"2001:7f9:c::/48", "15606"}, + {"2400:a980:4500::/36", "133111"}, + {"240e:5a:4600::/40", "140298"}, + {"2600:c0b::/35", "14745"}, + {"2001:559:8399::/48", "33662"}, + {"2001:c20:4866::/44", "3758"}, + {"2001:4de0:ac18::/47", "20446"}, + {"2407:dc00:104::/38", "9714"}, + {"2602:fba9::/40", "400517"}, + {"2602:fe12:22::/48", "62707"}, + {"2001:559:c16d::/46", "33660"}, + {"2001:678:a8::/48", "48132"}, + {"2408:80ea:6880::/41", "17622"}, + {"2600:141b:7801::/32", "20940"}, + {"2620:104:2040::/48", "14618"}, + {"2a02:2000:facf::/29", "35297"}, + {"2001:16d8:ed00::/38", "16150"}, + {"2403:c00:d00::/46", "17488"}, + {"2806:2f0:8061::/46", "17072"}, + {"2a03:2887:ff46::/47", "33660"}, + {"2a0b:7540::/29", "21140"}, + {"2a0e:b107:f68::/48", "207466"}, + {"2401:a400:8000::/33", "7477"}, + {"2606:1980:10::/48", "54994"}, + {"2a03:ba0::/29", "201188"}, + {"2a09:4c0:3e1::/37", "58057"}, + {"2402:8100:2380::/37", "45271"}, + {"2602:fff3::/36", "11512"}, + {"2607:f050::/32", "7784"}, + {"2804:90:5300::/34", "28580"}, + {"2001:550:405::/44", "174"}, + {"2001:44b8:30a0::/46", "7545"}, + {"2801:1cc::/44", "27951"}, + {"2001:418:1401:19::/62", "2914"}, + {"2001:468:1f0f::/48", "11537"}, + {"2a0b:7086:fff0::/44", "50867"}, + {"2001:1838:c100::/34", "23352"}, + {"2402:800:3155::/42", "7552"}, + {"2409:805c:900::/35", "9808"}, + {"240a:aa39::/32", "145267"}, + {"2600:6c38:238::/41", "20115"}, + {"2604:d600:1333::/37", "32098"}, + {"2001:13d1:3c04::/30", "7303"}, + {"2803:3e40::/32", "269892"}, + {"2804:14c:bb00::/40", "28573"}, + {"2804:73c4::/32", "270936"}, + {"2804:7858::/32", "271236"}, + {"2a05:3e00::/29", "29484"}, + {"2a02:26f7:ee08::/48", "36183"}, + {"2001:559:8513::/48", "7016"}, + {"2404:7a80::/29", "2518"}, + {"2607:c180::/36", "13851"}, + {"2a02:26f7:e948::/48", "36183"}, + {"2a0b:40::/29", "205930"}, + {"2405:6e00:2400::/43", "18291"}, + {"2406:de00:400::/40", "18225"}, + {"2607:f5d8:11::/44", "11096"}, + {"2804:3da8::/32", "266545"}, + {"2806:230:102b::/48", "11888"}, + {"2a06:1ec0::/32", "49832"}, + {"2a07:a040::/29", "49542"}, + {"240d::/27", "2527"}, + {"240e:3b6:ec00::/35", "140314"}, + {"2a01:b180::/47", "57037"}, + {"2a02:26f7:e980::/48", "36183"}, + {"2a02:ee00::/29", "61297"}, + {"2a0b:8800::/46", "43376"}, + {"2a0f:7d07:fc16::/38", "60781"}, + {"2600:e00f:4009::/36", "22995"}, + {"2804:74b4::/32", "270998"}, + {"2001:678:274::/48", "8220"}, + {"2408:877d::/32", "133118"}, + {"240e:108:11c3::/43", "4134"}, + {"2a06:82c5::/48", "209537"}, + {"2001:43f8:1700::/46", "328365"}, + {"2400:c700:9001::/34", "55644"}, + {"2401:4900:5c20::/41", "45609"}, + {"240a:aa75::/32", "145327"}, + {"2602:ffdf:f00::/40", "25851"}, + {"2804:e94:640::/42", "262468"}, + {"2804:6f84::/32", "270665"}, + {"2404:77c0::/32", "138637"}, + {"2607:f3a0:a00a::/48", "399809"}, + {"2a02:26f7:f750::/48", "36183"}, + {"2a03:1e20::/32", "59925"}, + {"2001:3c8:cb01::/48", "136624"}, + {"2001:559:c0aa::/48", "33651"}, + {"2804:1080:c300::/34", "28287"}, + {"2804:64b8:c000::/34", "269444"}, + {"2804:7efc::/36", "271659"}, + {"2806:288:4081::/48", "28469"}, + {"2a04:ffc0:1::/48", "59949"}, + {"2a0b:6880::/32", "206466"}, + {"2001:559:13e::/48", "22258"}, + {"2402:8100:3038::/41", "45271"}, + {"2404:c0:32a0::/39", "23693"}, + {"240a:a7b3::/32", "144621"}, + {"2608:121:c::/48", "27142"}, + {"2803:c010:d::/48", "271799"}, + {"2a0f:5701:fe01::/48", "56382"}, + {"2001:c20:487f::/40", "3758"}, + {"2600:6c34:18e::/48", "33588"}, + {"2801:a6::/32", "52853"}, + {"2a07:b1c0::/29", "207853"}, + {"2001:578:113::/45", "22773"}, + {"240a:aa54::/32", "145294"}, + {"2602:fbd4::/36", "14079"}, + {"2607:f4e8:18::/40", "22822"}, + {"2001:67c:1378::/48", "56823"}, + {"240e:44d:7a80::/41", "4134"}, + {"2604:bf00:210::/48", "397384"}, + {"2804:1d04:b000::/33", "61689"}, + {"2001:250:742d::/48", "23910"}, + {"2402:800:3271::/44", "7552"}, + {"2402:800:3b01::/44", "7552"}, + {"2602:fc23:112::/48", "212360"}, + {"2a0e:fd45:2a00::/44", "213253"}, + {"2001:559:8293::/48", "33650"}, + {"2409:805c:5d00::/34", "9808"}, + {"2409:8915:7800::/39", "56044"}, + {"2804:7068::/32", "270725"}, + {"2a07:ab40::/48", "51172"}, + {"2801:80:c30::/48", "61721"}, + {"2a0d:5642:112::/48", "35487"}, + {"2001:67c:17c4::/48", "3301"}, + {"240a:a2a4::/32", "143326"}, + {"2604:d0c0:ecc1::/46", "396871"}, + {"2804:90:4300::/35", "28580"}, + {"2a02:26f7:e7cc::/48", "36183"}, + {"2a06:7500::/29", "24786"}, + {"2001:559:832d::/48", "33491"}, + {"2001:19d0::/38", "2044"}, + {"2600:1408:c01::/38", "20940"}, + {"2a02:29e8::/32", "49604"}, + {"2001:500:60::/48", "30132"}, + {"2001:67c:2ee4::/48", "28773"}, + {"2408:8456:de40::/34", "17816"}, + {"240e:44d:6d80::/41", "4134"}, + {"2620:171:40::/46", "42"}, + {"2804:694:4900::/37", "262596"}, + {"2a0f:13c0::/29", "20473"}, + {"2001:dc4::/32", "23774"}, + {"2001:df2:a00::/48", "38760"}, + {"2402:a00:4a::/45", "45916"}, + {"2404:8ec0:afb0::/33", "135780"}, + {"2803:9800:a907::/35", "11664"}, + {"2a0e:1c80:14::/47", "1299"}, + {"2001:fd8:b380::/42", "132199"}, + {"2804:80b0::/32", "271767"}, + {"2a00:1a78::/32", "41729"}, + {"2804:57d0::/32", "268088"}, + {"2001:559:322::/48", "7922"}, + {"2602:fd2e::/36", "174"}, + {"2001:1248:55c6::/44", "11172"}, + {"2001:44b8:2039::/45", "4739"}, + {"2402:800:33ee::/37", "7552"}, + {"2a01:8300::/32", "20681"}, + {"2a02:26f7:fa44::/48", "36183"}, + {"2a05:cec0::/29", "47487"}, + {"2402:800:31c5::/43", "7552"}, + {"2a12:4946:1655::/48", "211398"}, + {"2001:44b8:308d::/46", "4739"}, + {"2408:8756::/36", "17622"}, + {"240a:a585::/32", "144063"}, + {"2a00:f826:11::/48", "62874"}, + {"240a:a5fa::/32", "144180"}, + {"240a:a90c::/32", "144966"}, + {"240a:afe6::/32", "146720"}, + {"2800:430:c100::/35", "23487"}, + {"2a06:4b40::/29", "197328"}, + {"2001:48e8:1000::/40", "1249"}, + {"2402:800:9747::/43", "7552"}, + {"2800:160:1a33::/44", "14259"}, + {"2001:df7:7e80::/48", "135959"}, + {"2607:5980::/32", "393573"}, + {"2806:2f0:9480::/42", "17072"}, + {"2a02:26f7:d504::/48", "36183"}, + {"2405:600::/46", "55805"}, + {"2408:8260::/32", "4837"}, + {"2605:a404:5a7::/41", "33363"}, + {"2a02:26f7:f711::/42", "20940"}, + {"2a02:26f7:f741::/46", "20940"}, + {"2001:559:c463::/48", "33650"}, + {"2401:4900:1ce0::/47", "24560"}, + {"2404:d9c0::/32", "134022"}, + {"2001:df7:cd80::/47", "147304"}, + {"2001:4878:225::/48", "12222"}, + {"2603:fd08::/26", "397165"}, + {"2001:559:8363::/48", "33657"}, + {"2001:df0:eb80::/48", "138529"}, + {"2405:b000:a00::/37", "6262"}, + {"2602:fe6a::/40", "54632"}, + {"2800:bf0:92::/47", "27947"}, + {"2804:14d:a08a::/41", "28573"}, + {"2409:8b20::/29", "9808"}, + {"240e:980:8700::/40", "4134"}, + {"2a01:3e0:402::/48", "34164"}, + {"2a06:e540::/47", "203600"}, + {"2600:5c01:1a2::/48", "11955"}, + {"2a05:3340::/42", "134433"}, + {"2001:579:1924::/44", "22773"}, + {"2001:67c:10b4::/48", "34891"}, + {"2408:8256:3b75::/48", "17816"}, + {"2607:f428:91f0::/38", "20115"}, + {"2607:f470::/32", "55"}, + {"2620:101:9000::/48", "40934"}, + {"2001:559:c42d::/48", "7922"}, + {"2001:67c:2f4c::/48", "59729"}, + {"2001:da8:7014::/48", "24363"}, + {"2407:8c00:90::/42", "55441"}, + {"2603:8033::/32", "20001"}, + {"2804:214:8420::/43", "26615"}, + {"2a02:1390:4000::/40", "21351"}, + {"2a02:26f7:db81::/46", "20940"}, + {"2001:fd8:e0::/48", "132199"}, + {"2402:800:9147::/43", "7552"}, + {"240e:3b7:7600::/39", "140313"}, + {"240a:a3d0::/32", "143626"}, + {"240a:a917::/32", "144977"}, + {"2606:2800:4aec::/46", "15133"}, + {"2a0d:7080::/29", "200322"}, + {"2407:8a80::/32", "134437"}, + {"240a:a5d9::/32", "144147"}, + {"2001:df6:2200::/48", "135908"}, + {"2408:8456:3c50::/38", "17816"}, + {"2408:8957:4500::/40", "17816"}, + {"2409:8b03::/32", "9808"}, + {"240a:a272::/32", "143276"}, + {"2606:2800:4a48::/46", "15133"}, + {"2804:63d0::/32", "269385"}, + {"2402:8100:14::/47", "38266"}, + {"2405:800:4::/44", "7545"}, + {"2408:8459:b410::/42", "17623"}, + {"240a:a66d::/32", "144295"}, + {"2605:dd40:8215::/42", "398549"}, + {"2a02:26f7:e285::/42", "20940"}, + {"2001:6a0:4000::/34", "8890"}, + {"240e:108:1171::/46", "139201"}, + {"2a02:26f7:d748::/48", "36183"}, + {"2a02:6ea0:ec00::/39", "60068"}, + {"2408:8956:4a00::/40", "17622"}, + {"2800:160:148e::/43", "14259"}, + {"2804:7034::/34", "270712"}, + {"2806:2f0:4503::/42", "17072"}, + {"2a01:280:358::/48", "207448"}, + {"2602:fe6b:1013::/36", "398646"}, + {"2620:123:4000::/40", "22990"}, + {"2804:df4:9001::/33", "52531"}, + {"2804:5c50::/32", "268901"}, + {"2a02:2aa8:310::/32", "702"}, + {"240e:3b7:7a00::/32", "140313"}, + {"2001:bf7:1321::/48", "213106"}, + {"2001:c20:800::/34", "3758"}, + {"2001:dce:5301::/34", "23869"}, + {"2403:100:2000::/48", "56300"}, + {"2409:8904:4960::/38", "24547"}, + {"240a:adc4::/32", "146174"}, + {"2806:230:4005::/48", "11888"}, + {"2a05:2e00::/32", "49460"}, + {"2001:559:c493::/48", "33660"}, + {"2404:4a00:8500::/64", "55423"}, + {"2a0e:8f00:f100::/47", "49933"}, + {"2a0f:6c40::/29", "34615"}, + {"2600:6c38:212::/45", "20115"}, + {"2604:7300::/32", "393227"}, + {"2a02:26f7:c70c::/48", "36183"}, + {"2401:0:6f00::/40", "58470"}, + {"2402:800:528d::/43", "7552"}, + {"2401:d800:2d30::/41", "7552"}, + {"2408:8256:2f76::/48", "17816"}, + {"240e:49:9400::/30", "4134"}, + {"2600:1002:d020::/34", "22394"}, + {"2602:feda:f020::/48", "147173"}, + {"2604:f980:6800::/40", "19957"}, + {"2a02:6680:2166::/48", "16116"}, + {"2001:df0:8c0::/48", "149005"}, + {"2403:df40::/43", "14630"}, + {"240c:c0a9:1100::/40", "23910"}, + {"2600:6c34:4e::/48", "33588"}, + {"2803:97c0::/32", "265770"}, + {"2804:6764::/32", "269625"}, + {"2a02:26f7:e049::/46", "20940"}, + {"2c0f:f4a8::/34", "37254"}, + {"2001:559:85e2::/48", "33659"}, + {"2400:8500:7000::/36", "58791"}, + {"2409:8959:ca44::/43", "9808"}, + {"2800:160:1994::/44", "14259"}, + {"240a:a0f8::/32", "142898"}, + {"2606:db00::/32", "393398"}, + {"2400:3aa0::/32", "7676"}, + {"2001:4830:c0d0::/42", "27552"}, + {"2402:5100:6::/32", "9902"}, + {"2404:bf40:82c1::/39", "139084"}, + {"2409:8915:5a00::/39", "56044"}, + {"2600:1417:a001::/36", "20940"}, + {"2600:6c10:f286::/47", "20115"}, + {"2804:20a0::/32", "264502"}, + {"2806:103e:5::/46", "8151"}, + {"2a02:26f7:f705::/46", "20940"}, + {"2a0d:9d40::/29", "48704"}, + {"2400:a980:d4::/47", "133111"}, + {"240a:a7ba::/32", "144628"}, + {"2600:1480:d001::/37", "20940"}, + {"2602:10d:9000::/30", "20115"}, + {"2607:6f00::/32", "394111"}, + {"2a02:b48:8115::/36", "39572"}, + {"2a06:5500::/29", "204232"}, + {"2405:7d00::/32", "23777"}, + {"2610:e0:a050::/36", "2572"}, + {"2a00:ce80::/46", "50535"}, + {"240a:aa08::/32", "145218"}, + {"2001:559:a0::/48", "7016"}, + {"2401:d800:ddb0::/41", "7552"}, + {"2406:e000:393::/36", "23655"}, + {"2409:8914:4000::/39", "56044"}, + {"240e:45c:6900::/40", "140531"}, + {"2403:9800:b041::/48", "202818"}, + {"2804:2f8::/32", "28188"}, + {"2804:b18::/40", "52941"}, + {"2804:1028::/32", "263622"}, + {"2a0e:46c3:100::/40", "204982"}, + {"2001:559:8558::/48", "33490"}, + {"2600:140f:1c01::/38", "20940"}, + {"2a02:26f7:f6e4::/48", "36183"}, + {"2001:df4:b880::/48", "17823"}, + {"2001:43f8:900::/48", "327935"}, + {"2402:5300:2310::/33", "45903"}, + {"2409:8055:3014::/46", "56040"}, + {"240e:397:2400::/38", "140497"}, + {"2600:1016:b130::/40", "6167"}, + {"2607:f2d8:43::/33", "18450"}, + {"2a00:93c0::/32", "198853"}, + {"2a04:4ac0::/29", "200844"}, + {"2a09:4e07:e000::/35", "210625"}, + {"2001:67c:13e4::/48", "51410"}, + {"2001:1250:e600::/44", "22894"}, + {"240a:af1a::/32", "146516"}, + {"2a01:45c0::/32", "58208"}, + {"2402:800:5a9b::/42", "7552"}, + {"2408:8957:dc00::/40", "17622"}, + {"2409:8014:80a::/35", "56044"}, + {"240e:58::/32", "4812"}, + {"2a05:1500:300::/40", "202861"}, + {"2a09:6340::/44", "42721"}, + {"2a0c:1d01::/30", "39614"}, + {"2a0c:9a40:8210::/48", "210445"}, + {"2001:559:3d1::/48", "7922"}, + {"2001:559:c530::/48", "33491"}, + {"2403:71c0:3000::/48", "43959"}, + {"2620:12b:d000::/46", "35873"}, + {"2800:160:1e2d::/43", "14259"}, + {"2804:6c5c::/32", "270463"}, + {"2806::/29", "6503"}, + {"2404:5540:401::/32", "134715"}, + {"2605:73c0::/35", "10583"}, + {"2605:dd40:8101::/43", "398549"}, + {"2804:36d0::/32", "266374"}, + {"2804:75b0::/34", "271063"}, + {"2a05:d050:1080::/44", "16509"}, + {"2001:1670::/32", "28885"}, + {"2408:8957:5400::/40", "17622"}, + {"2604:c980::/32", "54203"}, + {"2a03:93e0:2000::/32", "203228"}, + {"2a04:2880::/48", "12684"}, + {"2a0d:140::/35", "209014"}, + {"2001:250:140d::/42", "24354"}, + {"2405:da00:400::/32", "38235"}, + {"240e:982:7400::/36", "4134"}, + {"2804:4160::/32", "267429"}, + {"2001:4490:37fc::/36", "9829"}, + {"2401:8a40:24::/46", "45326"}, + {"2408:8406:6c00::/39", "4808"}, + {"240a:a9a3::/32", "145117"}, + {"2600:1417:d000::/48", "35819"}, + {"2806:230:4028::/48", "265594"}, + {"2a03:4b80::/32", "21246"}, + {"240e:1c:5000::/36", "134771"}, + {"2804:1bf0:f::/32", "61758"}, + {"2604:8740::/32", "19575"}, + {"2001:4b20:1000:2514::/64", "65505"}, + {"2605:3800::/32", "21554"}, + {"2804:6868::/32", "269690"}, + {"2804:68b4:8000::/34", "269710"}, + {"2806:2f0:6281::/46", "17072"}, + {"2001:44b8:30ec::/48", "4739"}, + {"240a:a439::/32", "143731"}, + {"2804:25a4::/32", "52821"}, + {"2401:3480:3000::/36", "58466"}, + {"2402:800:5955::/42", "7552"}, + {"2403:8700::/32", "132232"}, + {"2a04:c700::/48", "34499"}, + {"2401:3140::/48", "55482"}, + {"2404:1c40:4::/48", "24432"}, + {"2409:8753:300::/37", "56047"}, + {"240a:ab61::/32", "145563"}, + {"2804:12b0::/32", "263492"}, + {"2a00:1580:3::/30", "39010"}, + {"2a02:2ad0:243::/45", "702"}, + {"2a04:2dc0:e::/47", "39216"}, + {"2a05:e100::/48", "6830"}, + {"2a09:1680::/48", "209811"}, + {"2607:f868::/34", "20141"}, + {"2620:1b4:ffff::/48", "16401"}, + {"2620:1e0:300::/48", "10801"}, + {"2804:5174::/32", "268453"}, + {"2806:2f0:7043::/42", "17072"}, + {"2a00:4802:390::/44", "8717"}, + {"2a0b:3c40:1::/48", "208258"}, + {"2401:4900:63e0::/37", "45609"}, + {"2600:1404:1001::/37", "20940"}, + {"2607:4280::/32", "36730"}, + {"2801:80:3e70::/47", "271541"}, + {"2a0a:e805:100::/40", "64476"}, + {"2400:ea00:c010::/48", "23884"}, + {"2402:7040::/32", "63704"}, + {"2405:6100::/32", "3462"}, + {"240a:afe3::/32", "146717"}, + {"2801:18:c000::/48", "263186"}, + {"2001:559:7a2::/48", "33659"}, + {"2001:1250:e400::/44", "22894"}, + {"2001:16a2:c300::/44", "39891"}, + {"2001:4478:1500::/40", "4739"}, + {"2401:4900:5760::/43", "45609"}, + {"2403:8400::/48", "17917"}, + {"2409:8030:2900::/38", "9808"}, + {"2605:5e40::/48", "397810"}, + {"2c0f:f850::/39", "327979"}, + {"2001:500:31::/48", "393220"}, + {"2001:559:8461::/48", "33650"}, + {"2405:84c0:ff3e::/48", "139782"}, + {"2408:8459:6010::/42", "17623"}, + {"2a04:4e40:3e00::/48", "54113"}, + {"2a10:8080::/29", "62270"}, + {"2001:4b98:dc7::/32", "29169"}, + {"2401:d800:9f02::/42", "7552"}, + {"2605:a404:8de::/39", "33363"}, + {"2a01:c50f:2380::/36", "12479"}, + {"2a0a:9300:1::/48", "207569"}, + {"2409:8948:9000::/40", "24445"}, + {"240a:ae2a::/32", "146276"}, + {"2806:2f0:9c63::/40", "17072"}, + {"2a03:6085::/30", "16285"}, + {"2600:370f:6063::/45", "32261"}, + {"2804:1354::/33", "52892"}, + {"2600:1002:a110::/36", "22394"}, + {"2600:1419:4001::/38", "20940"}, + {"2606:2800:4280::/48", "15133"}, + {"2620:68:6000::/48", "397321"}, + {"2a00:1468::/48", "35810"}, + {"2a03:8180:1f00::/34", "36351"}, + {"2a07:5340::/29", "62177"}, + {"2602:fff6:d::/48", "30475"}, + {"2803:480::/45", "52458"}, + {"2a02:f9c0::/29", "61231"}, + {"240a:aaec::/32", "145446"}, + {"2600:804:440::/48", "396941"}, + {"2606:1a00::/32", "18973"}, + {"2a02:26f7:d4cd::/46", "20940"}, + {"2403:2c80::/31", "9312"}, + {"2604:ca00:176::/40", "36492"}, + {"2620:101:80fb::/48", "395606"}, + {"2804:cb0:d306::/47", "52742"}, + {"2001:1388:8a45::/48", "6147"}, + {"2001:13c7:6015::/48", "61441"}, + {"2001:49f0:d10e::/47", "30058"}, + {"2408:8956:1940::/40", "17816"}, + {"240a:ac51::/32", "145803"}, + {"240e:983:800::/40", "4134"}, + {"2600:1404:b001::/37", "20940"}, + {"2a02:26f7:c300::/48", "36183"}, + {"2001:470::/42", "6939"}, + {"240a:a1f4::/32", "143150"}, + {"2001:550:7707::/48", "174"}, + {"240e:44d:480::/41", "4134"}, + {"2a05:2a40::/48", "201411"}, + {"2602:ff83::/36", "29948"}, + {"2801:1b:4800::/48", "269844"}, + {"2404:0:10a5::/46", "17709"}, + {"2409:8b7f::/21", "9808"}, + {"2001:1998:9::/39", "7843"}, + {"2404:bd00::/44", "58678"}, + {"2803:4ce0::/32", "269905"}, + {"2804:350c::/32", "265497"}, + {"2a00:1678:dea1::/48", "49453"}, + {"2a02:2c40::/32", "2611"}, + {"2a0b:6b86:401::/48", "207080"}, + {"2001:559:8115::/48", "33287"}, + {"2804:67e4::/32", "269657"}, + {"2804:7c50::/32", "271488"}, + {"2a0f:ee00::/47", "60781"}, + {"240a:a2cd::/32", "143367"}, + {"2806:109f:4::/47", "8151"}, + {"2001:df3:ba00::/48", "134808"}, + {"2001:4878:4164::/48", "12222"}, + {"2402:4600::/40", "45186"}, + {"2607:ae00::/32", "11468"}, + {"2a01:c50f:2a00::/37", "12479"}, + {"2a01:ce9d:1000::/30", "51964"}, + {"2800:160:13a1::/46", "14259"}, + {"2804:7060::/32", "270723"}, + {"2a04:4e42:fd4::/46", "54113"}, + {"2001:470:90::/48", "36225"}, + {"2409:8028:3900::/29", "9808"}, + {"2409:891e::/31", "24400"}, + {"2600:1413:8001::/35", "20940"}, + {"2a0c:2600::/29", "205010"}, + {"2403:2600::/32", "24538"}, + {"2607:eb00::/32", "53486"}, + {"2001:1248:a4c5::/46", "11172"}, + {"2401:d800:9080::/42", "7552"}, + {"2400:a980:30f6::/44", "133513"}, + {"2607:ffd0:704::/36", "26994"}, + {"2620:13:4000::/48", "16652"}, + {"2a01:358:101a::/34", "9121"}, + {"2a0e:be80::/29", "25793"}, + {"2603:b0ae::/32", "53849"}, + {"2620:f5:8000::/48", "22388"}, + {"2803:5fe0::/32", "271785"}, + {"2804:406c::/32", "265958"}, + {"2a02:ee80:41ca::/47", "21433"}, + {"2a03:d9c0:c0de::/48", "3214"}, + {"2a04:9a03:1010::/44", "48037"}, + {"2403:1300:3000::/32", "56286"}, + {"2600:6c38:34b::/42", "20115"}, + {"2804:4fdc::/32", "268354"}, + {"240a:a620::/32", "144218"}, + {"2604:d180::/32", "46573"}, + {"2804:14c:7984::/47", "28573"}, + {"2a01:7d20:700::/40", "203645"}, + {"2a02:26f7:da41::/46", "20940"}, + {"2a03:2b80::/29", "33883"}, + {"2001:1900:236a::/48", "202818"}, + {"2001:44b8:4062::/48", "7545"}, + {"2409:8050:1000::/47", "56047"}, + {"2600:9000:2208::/47", "16509"}, + {"2a0e:b107:1596::/48", "142598"}, + {"2001:559:c32a::/48", "33657"}, + {"2400:7400:e012::/48", "38044"}, + {"2404:c8::/47", "10217"}, + {"2404:8d02::/35", "9587"}, + {"2405:1200::/29", "9824"}, + {"2409:8020:1021::/43", "56046"}, + {"2600:6c44::/32", "20115"}, + {"2607:f7c8:401::/38", "36221"}, + {"2803:8220::/32", "27843"}, + {"2804:5c88::/35", "268914"}, + {"2804:76d8::/32", "271138"}, + {"2a10:fa80:10::/48", "57050"}, + {"2c0f:e970::/32", "327750"}, + {"2401:4900:5130::/44", "45609"}, + {"2a02:2339:4000::/34", "48854"}, + {"2001:559:85ab::/48", "33657"}, + {"2001:16a2:bc00::/38", "39386"}, + {"2403:2d40::/32", "64018"}, + {"2600:6c38:33f::/41", "20115"}, + {"2804:4694::/32", "266998"}, + {"2a0a:9741::/32", "61964"}, + {"2001:559:c324::/48", "33652"}, + {"2001:fd8:2a1::/46", "4775"}, + {"2604:6600:1c7::/38", "40676"}, + {"2a0b:6f80:100::/46", "211196"}, + {"2a0c:2fc0::/29", "50598"}, + {"2001:559:84fb::/48", "33668"}, + {"2001:df1:9680::/48", "135989"}, + {"2600:6c21:a1a::/29", "20115"}, + {"2804:57fc::/32", "268099"}, + {"2804:6984::/32", "270275"}, + {"2a00:79e1:f15::/44", "36384"}, + {"2a03:52e0::/29", "206182"}, + {"2a06:a001:a070::/44", "212085"}, + {"2a0d:2581:14::/48", "209261"}, + {"2409:8050:100::/37", "9808"}, + {"240e:3b9:c000::/37", "140315"}, + {"2a0b:a340::/32", "205934"}, + {"240a:a22b::/32", "143205"}, + {"240a:a903::/32", "144957"}, + {"2620:135:4001::/44", "393891"}, + {"2803:2b80::/32", "263730"}, + {"2001:559:49d::/48", "7922"}, + {"2800:160:19eb::/43", "14259"}, + {"2806:263:9300::/37", "13999"}, + {"2a0c:69c0::/32", "202312"}, + {"2a0d:b201:f040::/42", "206026"}, + {"2409:8055:3019::/48", "56040"}, + {"240e:44d:3e00::/41", "140345"}, + {"2803:9000::/32", "262194"}, + {"2001:559:c271::/48", "13367"}, + {"2804:2b30::/32", "262741"}, + {"2804:85c4::/32", "272599"}, + {"2a02:26f7:7::/48", "20940"}, + {"2001:da8:900e::/43", "24369"}, + {"2401:d800:b1b0::/41", "7552"}, + {"2402:8100:31d0::/47", "45271"}, + {"2408:8456:ae10::/42", "134543"}, + {"2606:4d00::/32", "53893"}, + {"2804:5bbc::/32", "268866"}, + {"2806:2f0:314::/44", "17072"}, + {"2a09:98c0::/48", "50007"}, + {"2001:4998:efeb::/48", "36646"}, + {"2404:7c00:10::/42", "141177"}, + {"240a:aaaa::/32", "145380"}, + {"2a02:680:8000::/36", "20539"}, + {"2a0d:d080::/29", "49054"}, + {"2001:559:84af::/48", "33657"}, + {"2400:9800:1c:5000::/33", "24203"}, + {"2400:dc00:4006::/48", "131111"}, + {"2402:800:349b::/41", "7552"}, + {"2403:4240::/32", "138029"}, + {"2406:24c0::/44", "136634"}, + {"2600:1405:c001::/35", "20940"}, + {"2409:8e1a::/32", "132525"}, + {"2a04:5a00::/29", "60316"}, + {"2400:9880::/32", "133333"}, + {"240a:a5a7::/32", "144097"}, + {"2603:b079::/24", "11796"}, + {"2604:880:52::/48", "396881"}, + {"2801:80:1950::/48", "264995"}, + {"2804:837c::/32", "272201"}, + {"2001:c00:4619::/32", "4618"}, + {"2402:e380:33c::/48", "7489"}, + {"240e:983:203::/48", "17799"}, + {"2600:1417:6001::/36", "20940"}, + {"2603:c001:2010::/37", "31898"}, + {"2a00:1d38:fb::/32", "50655"}, + {"2a06:2e00::/29", "28920"}, + {"2001:44b8:25::/48", "4739"}, + {"2409:805f:2100::/35", "9808"}, + {"2607:9b80:a00::/43", "46558"}, + {"2a0e:97c0:330::/48", "211481"}, + {"2001:559:826a::/48", "13367"}, + {"2001:da8:222::/48", "24348"}, + {"2001:448a:2012::/42", "7713"}, + {"2001:4d10::/32", "16030"}, + {"2401:d800:5da0::/41", "7552"}, + {"2402:800:5463::/43", "7552"}, + {"2a12:5b80::/32", "210460"}, + {"2001:4320::/32", "28683"}, + {"2405:7bc0::/48", "45538"}, + {"2409:8087:5801::/48", "9808"}, + {"2620:149:1170::/38", "714"}, + {"2001:559:c184::/47", "7922"}, + {"2001:1248:55aa::/43", "11172"}, + {"2606:4280::/36", "16696"}, + {"2804:55a8::/32", "267948"}, + {"2804:7ecc::/32", "271648"}, + {"2001:559:c0e9::/48", "7016"}, + {"2001:559:c4e0::/48", "7015"}, + {"240a:a70b::/32", "144453"}, + {"2605:ef80:8000::/44", "36492"}, + {"2803:c800:c000::/34", "23243"}, + {"2804:2304::/32", "264137"}, + {"2a03:6947:1d00::/40", "61266"}, + {"2a04:9a00:104a::/45", "212157"}, + {"2401:b8c0:10::/32", "64074"}, + {"2408:84f3:4a10::/42", "134543"}, + {"2a02:b50:4000::/43", "30282"}, + {"2001:df2:6a80::/48", "55664"}, + {"2404:e100:4000::/47", "55685"}, + {"2804:6ce0::/47", "270498"}, + {"2001:678:6c::/48", "199670"}, + {"2401:d800:5910::/42", "7552"}, + {"2803:7300::/32", "262150"}, + {"2a02:26f7:c390::/48", "36183"}, + {"2a0c:9a40:8084::/48", "13830"}, + {"2408:8459:9810::/42", "17623"}, + {"2804:145c:8f90::/41", "263327"}, + {"2001:470:ee::/48", "62538"}, + {"2800:160:172f::/43", "14259"}, + {"2001:67c:2bfc::/48", "210317"}, + {"240a:a025::/32", "142687"}, + {"2605:dd40:8211::/46", "398549"}, + {"2606:cd00::/47", "40845"}, + {"2803:c200:100::/44", "22411"}, + {"2804:19f0::/32", "22092"}, + {"2804:60b4::/32", "269185"}, + {"2a07:1340::/29", "34907"}, + {"2001:559:c2bc::/48", "33662"}, + {"2001:dc0:e000::/35", "4608"}, + {"2401:d800::/43", "7552"}, + {"2404:a800:1452::/38", "9498"}, + {"2404:f4c0:ff0f::/48", "139247"}, + {"2408:8459:6630::/41", "17622"}, + {"2605:9d80:8031::/48", "4134"}, + {"2606:ed00:4::/48", "40244"}, + {"2a0b:c600::/29", "51344"}, + {"2c0f:f7a8:8211::/48", "4134"}, + {"2001:67c:2e14::/48", "200986"}, + {"240a:a5c7::/32", "144129"}, + {"2a01:b740:a27::/41", "714"}, + {"2001:67c:2ab8::/48", "3301"}, + {"240a:aa1e::/32", "145240"}, + {"2800:130::/32", "27820"}, + {"2a03:d400:25::/39", "198913"}, + {"2001:fd0:3301::/37", "10029"}, + {"240a:a948::/32", "145026"}, + {"2603:c010:2000::/36", "31898"}, + {"2804:6ba4::/32", "270414"}, + {"2a02:2970::/32", "43847"}, + {"2401:c100::/32", "45634"}, + {"2409:896a:6b00::/35", "9808"}, + {"2620:123:2081::/46", "30103"}, + {"2402:800:53d3::/44", "7552"}, + {"2408:8000:1000::/39", "4808"}, + {"2800:bf0:b1::/48", "52257"}, + {"2803:b780:11::/42", "27742"}, + {"2804:14d:ea00::/40", "28573"}, + {"2804:8630::/32", "272627"}, + {"2a02:26f7:ed40::/48", "36183"}, + {"240a:a25a::/32", "143252"}, + {"240a:af15::/32", "146511"}, + {"2a0c:acc0::/29", "13739"}, + {"2401:d800:9cd0::/42", "7552"}, + {"2409:8000:1800::/40", "56048"}, + {"2806:2f0:8083::/43", "17072"}, + {"2a02:26f7:d1c4::/48", "36183"}, + {"2a02:26f7:de89::/46", "20940"}, + {"2001:559:c09d::/48", "33651"}, + {"2401:2000::/33", "4608"}, + {"2607:f3f8:3000::/33", "17378"}, + {"2001:780::/33", "12337"}, + {"240e:67d:c600::/34", "4134"}, + {"2602:806:a000::/48", "398565"}, + {"2a00:e740::/32", "21472"}, + {"2001:559:c2f2::/48", "33651"}, + {"240a:a4a5::/32", "143839"}, + {"2604:a280::/32", "35911"}, + {"2a0f:ca87:b::/48", "210335"}, + {"2604:eb80::/32", "22418"}, + {"2804:14c:f425::/46", "28573"}, + {"2a01:7d8::/47", "34744"}, + {"2001:4de0:1000::/48", "33438"}, + {"2400:6280:109::/48", "132280"}, + {"2405:58c0:4400::/40", "133101"}, + {"2406:bec0::/32", "138734"}, + {"240e:3ba:f100::/37", "134775"}, + {"2620:100:6060::/40", "19679"}, + {"240a:a6d9::/32", "144403"}, + {"2607:1700::/32", "36454"}, + {"2804:6afc::/32", "270370"}, + {"2001:44b8:4048::/48", "7545"}, + {"2a01:7b40::/32", "47347"}, + {"240a:aa70::/32", "145322"}, + {"2600:1402:a801::/35", "20940"}, + {"2804:77c4:8000::/36", "271198"}, + {"2a0b:cc0::/32", "51131"}, + {"2001:250:600b::/48", "24364"}, + {"2001:559:848f::/43", "7922"}, + {"2001:d98::/32", "18106"}, + {"2001:e68:2001:1::/64", "65530"}, + {"2404:4a00:4:1::/36", "45629"}, + {"2607:2a80::/32", "31849"}, + {"2a02:6c20:7::/48", "211085"}, + {"2a07:1800::/29", "51560"}, + {"2c0f:f2a0:7::/32", "327849"}, + {"2400:dcc0:a104::/38", "38631"}, + {"2605:3dc0:1002::/48", "397952"}, + {"2803:7200:7::/43", "27696"}, + {"240e:45c:a900::/40", "140535"}, + {"2602:feda:d30::/44", "212292"}, + {"2a02:1c8:100::/40", "24955"}, + {"2a0b:9401::/32", "209505"}, + {"2a0e:b107:5c8::/48", "1239"}, + {"2001:1900:3007::/44", "3356"}, + {"2402:800:f0b0::/41", "7552"}, + {"240a:af56::/32", "146576"}, + {"2602:803:7000::/44", "399214"}, + {"2804:297c:cf81::/34", "262907"}, + {"2001:16a2:34::/46", "25019"}, + {"2400:cb00:373::/45", "13335"}, + {"2408:8256:399f::/38", "17816"}, + {"2600:9000:21ea::/43", "16509"}, + {"2603:c002:b30::/37", "31898"}, + {"2804:5dfc::/32", "52972"}, + {"2a00:6c40::/32", "9103"}, + {"2001:559:50::/47", "7922"}, + {"2001:559:8078::/47", "7015"}, + {"2001:df7:3700::/48", "138456"}, + {"2001:44b8:4050::/48", "7545"}, + {"2409:8753:900::/38", "56047"}, + {"2409:8924:3700::/36", "56046"}, + {"2a0c:6d00:61::/48", "3218"}, + {"2001:559:c067::/44", "33491"}, + {"240a:a038::/32", "142706"}, + {"2602:fcc5::/48", "207722"}, + {"2605:4400:5::/48", "8001"}, + {"2804:6be0::/32", "270431"}, + {"2a06:200::/29", "200770"}, + {"2001:678:488::/48", "206335"}, + {"2401:d800:b820::/41", "7552"}, + {"2600:80c:1600::/32", "701"}, + {"2602:ffc5:200::/48", "20473"}, + {"2604:4a00::/32", "393885"}, + {"2607:fc48:1410::/48", "40009"}, + {"2a04:9140:3001::/48", "196670"}, + {"2a0a:d540::/32", "207322"}, + {"2001:da8:103b::/48", "23910"}, + {"2001:da8:a01e::/42", "24352"}, + {"2404:6080::/32", "135415"}, + {"2806:2f0:9ea1::/41", "17072"}, + {"2001:468:1b00::/37", "11537"}, + {"2404:bf40:83c4::/37", "139084"}, + {"2a00:f10::/39", "48635"}, + {"2a02:2ad0:250::/37", "702"}, + {"2620:4d:e000::/48", "13367"}, + {"2a0b:8400:1::/48", "43350"}, + {"2c0f:5a00::/48", "327996"}, + {"2620:13c:b000::/44", "18531"}, + {"2804:3e0::/32", "262403"}, + {"240a:adc5::/32", "146175"}, + {"2600:14a0:100::/48", "16625"}, + {"2600:6c34:3a1::/48", "33588"}, + {"2605:9c0::/48", "6233"}, + {"2606:b080::/32", "55140"}, + {"2804:269c:fe10::/46", "47065"}, + {"2a01:a500::/47", "42831"}, + {"2a10:7d00:ffff::/29", "399975"}, + {"2001:df4:1500::/48", "138995"}, + {"2001:df6:ea80::/48", "135876"}, + {"2001:13f0::/32", "28118"}, + {"2001:4da8::/32", "28824"}, + {"2402:800:3b7f::/40", "7552"}, + {"2804:3f00::/32", "52643"}, + {"2a00:16b0::/32", "33837"}, + {"2c0f:f748:103::/32", "37662"}, + {"2001:559:c06e::/47", "7015"}, + {"2804:7b84::/32", "271436"}, + {"2001:520:1039::/48", "8103"}, + {"2408:8456:8640::/39", "17816"}, + {"2607:2680::/32", "394969"}, + {"2a00:14f0::/32", "29017"}, + {"2402:f880::/32", "64056"}, + {"2804:3ecc::/32", "266621"}, + {"2806:370:80d0::/44", "28403"}, + {"2a02:2e0::/38", "12306"}, + {"2a02:26f7:b990::/48", "36183"}, + {"2a02:2ab0::/38", "702"}, + {"2a03:4760::/32", "201457"}, + {"2a03:17e0::/32", "15623"}, + {"2001:559:c446::/44", "33657"}, + {"2001:678:e68::/48", "212567"}, + {"2401:4900:5170::/44", "45609"}, + {"240e:67a:c400::/39", "140330"}, + {"2a01:b740:1341::/36", "714"}, + {"2a02:8100::/27", "3209"}, + {"2a03:9880::/32", "24817"}, + {"2a0a:8c46::/32", "15626"}, + {"2a10:2ec6::/32", "210625"}, + {"2001:598:1301::/32", "21548"}, + {"2a02:26f7:f380::/48", "36183"}, + {"2a04:4e41:12::/45", "54113"}, + {"2001:4408:4510::/36", "4758"}, + {"2407:b000::/33", "17819"}, + {"2804:126c::/32", "263476"}, + {"2001:559:81fa::/48", "33652"}, + {"2001:df7:c680::/48", "137165"}, + {"240a:a615::/32", "144207"}, + {"2804:485c::/33", "267116"}, + {"2806:2f0:4263::/40", "17072"}, + {"2a0e:46c6::/40", "207968"}, + {"2a0e:9780::/29", "39305"}, + {"240a:a511::/32", "143947"}, + {"240a:ab98::/32", "145618"}, + {"2804:7750::/32", "271170"}, + {"2a02:1328:2::/48", "31059"}, + {"2a02:50c0:e0::/32", "29355"}, + {"2605:a404:af8::/39", "33363"}, + {"2803:d560::/32", "269761"}, + {"2a02:4c8:b0::/32", "9070"}, + {"2a02:2330:b2::/48", "34073"}, + {"2401:b200:7::/44", "24186"}, + {"2600:140f:d000::/48", "9498"}, + {"2620:138:30fe::/48", "23344"}, + {"2804:14c:bd87::/41", "28573"}, + {"2001:559:824b::/48", "21508"}, + {"2400:6280:11e::/48", "132280"}, + {"2800:160:119a::/42", "14259"}, + {"2804:75ec::/32", "271078"}, + {"2a02:26f0:3600::/48", "34164"}, + {"2a0a:86c0::/44", "206163"}, + {"2408:84f3:bc10::/42", "134543"}, + {"2620:124:b002::/48", "394731"}, + {"2800:800:a32::/41", "26611"}, + {"2001:1900:2214::/48", "10753"}, + {"2001:19f8:211::/48", "26402"}, + {"2404:b300:1::/46", "131207"}, + {"2610:130::/40", "6122"}, + {"2a01:618:8300::/33", "8683"}, + {"2001:df0:26b::/48", "58505"}, + {"2401:80c0::/32", "135191"}, + {"2407:9240:2400::/40", "141173"}, + {"2409:8f54::/24", "9808"}, + {"2a0a:54c3::/29", "62240"}, + {"2001:1318:1015::/32", "3597"}, + {"2405:201:a200::/37", "55836"}, + {"2600:9000:222b::/43", "16509"}, + {"2804:5068::/32", "268387"}, + {"2a01:7700::/32", "15372"}, + {"2a10:c940::/31", "35277"}, + {"2403:fbc0::/48", "23959"}, + {"2a03:6f81:8000::/30", "35676"}, + {"2a0e:37c0::/32", "29014"}, + {"2001:559:5cd::/48", "33657"}, + {"2001:559:c245::/46", "20214"}, + {"2402:9740::/32", "135023"}, + {"2408:8956:5600::/40", "17622"}, + {"2409:805c:5900::/38", "9808"}, + {"2600:1014:9010::/40", "22394"}, + {"2800:160:1022::/43", "14259"}, + {"2a09:5000::/29", "206189"}, + {"2001:48f8::/32", "11232"}, + {"2804:2144::/46", "52795"}, + {"2806:2f0:7141::/46", "17072"}, + {"2a02:478::/32", "30975"}, + {"240a:a355::/32", "143503"}, + {"2600:6c38:712::/45", "20115"}, + {"2804:2414::/32", "264200"}, + {"2a02:26f7:e009::/42", "20940"}, + {"2001:648:2c10::/48", "8762"}, + {"2001:44b8:6::/48", "4739"}, + {"2402:f500::/32", "63961"}, + {"2604:6d00:3000::/48", "36223"}, + {"2604:ab80:8::/48", "55079"}, + {"2801:0:2f0::/48", "28107"}, + {"2a02:2e02:8d90::/38", "12479"}, + {"2a03:4b40:5701::/34", "50710"}, + {"2a06:d700::/33", "43892"}, + {"2001:4878:c204::/48", "12222"}, + {"2804:1128:c100::/34", "263661"}, + {"2a03:7b80::/32", "198024"}, + {"2001:67c:2af0::/48", "201271"}, + {"2402:e80:24::/48", "23901"}, + {"2800:160:1c93::/44", "14259"}, + {"2803:9800:b8c7::/44", "11664"}, + {"2a00:4802:2f0::/44", "8717"}, + {"2a03:c980:b916::/48", "210079"}, + {"2620:137::/45", "396253"}, + {"2803:6310::/48", "272063"}, + {"2a03:f080:1801::/32", "42685"}, + {"2001:44b8:404e::/48", "7545"}, + {"2403:4e00::/38", "45528"}, + {"2408:8246:1200::/32", "4837"}, + {"2600:1400:2801::/32", "20940"}, + {"2a01:b740:a00::/48", "6185"}, + {"2001:559:8411::/48", "7016"}, + {"2001:559:c2b3::/48", "7015"}, + {"2403:a140:10::/48", "23724"}, + {"2602:fe10::/36", "394119"}, + {"2607:f6f0:1000::/48", "12085"}, + {"2620:49:8::/47", "16686"}, + {"2a0f:6580:104::/48", "200334"}, + {"2a0f:c340::/29", "34487"}, + {"2001:d10:840a::/35", "4787"}, + {"2607:f928::/47", "22645"}, + {"2620:18::/48", "21525"}, + {"2801:80:3ee0::/48", "272215"}, + {"2001:579:a1d4::/42", "22773"}, + {"2001:44b8:2065::/48", "4739"}, + {"2405:f5c0::/48", "135932"}, + {"2409:8078:100::/35", "9808"}, + {"240e:980::/35", "58519"}, + {"2600:1407:6801::/35", "20940"}, + {"2600:9000:f150::/48", "16509"}, + {"2804:1dac::/38", "264385"}, + {"2804:6ac8:105::/34", "270358"}, + {"240a:a296::/32", "143312"}, + {"2607:de00::/42", "23498"}, + {"2610:130:3402::/32", "6122"}, + {"2804:c6c:8105::/33", "52704"}, + {"2804:6a04:44::/32", "270306"}, + {"2a01:66a0::/32", "202208"}, + {"2001:418:1401:22::/63", "2914"}, + {"2001:418:4001:5::/45", "2914"}, + {"2401:dec0::/32", "137023"}, + {"2402:800:321d::/42", "7552"}, + {"240a:a60e::/32", "144200"}, + {"2600:1901:8100::/41", "396982"}, + {"2607:9b80:4000::/36", "46558"}, + {"2a02:88d:101::/40", "47794"}, + {"2a04:eec0::/29", "57795"}, + {"2a0d:abc0::/29", "208861"}, + {"2001:559:8436::/48", "33667"}, + {"2001:67c:2fe0::/48", "39381"}, + {"2001:fd8:a0::/48", "132199"}, + {"2404:fc00:76::/44", "45910"}, + {"240a:a8ff::/32", "144953"}, + {"2600:6c39:452::/45", "20115"}, + {"2602:fe12:20::/48", "62707"}, + {"2602:fe21::/36", "394304"}, + {"2605:a7c0::/43", "53766"}, + {"240a:adc0::/32", "146170"}, + {"2800:160:1553::/42", "14259"}, + {"2804:43c4::/32", "53095"}, + {"2a00:4802:a30::/41", "13124"}, + {"2a02:26f7:de09::/46", "20940"}, + {"2c0f:fd50::/32", "37187"}, + {"2001:df5:3600::/48", "56236"}, + {"2405:9800:c90f::/48", "45430"}, + {"2804:6450::/32", "269420"}, + {"2001:648:24a1::/39", "5408"}, + {"2400:adc7:2800::/39", "9541"}, + {"2400:cb00:279::/48", "13335"}, + {"2409:8c14:8a00::/35", "56044"}, + {"240a:a40b::/32", "143685"}, + {"240a:ac3e::/32", "145784"}, + {"2600:1419:1c01::/38", "20940"}, + {"2607:f7a8:600::/46", "46887"}, + {"2a01:498:8200::/37", "42018"}, + {"2a01:8d00::/31", "43070"}, + {"2a0d:3840::/48", "57629"}, + {"2001:559:86f6::/48", "33491"}, + {"2001:1248:8401::/44", "11172"}, + {"2804:56c::/39", "28210"}, + {"2804:59d8::/32", "268729"}, + {"2a02:26f7:cd84::/48", "36183"}, + {"2001:dc6::/32", "4622"}, + {"2001:43f8:20::/48", "36944"}, + {"2403:9800:6c00::/40", "4648"}, + {"2a0f:b502::/29", "206313"}, + {"2001:559:4a0::/48", "33657"}, + {"2001:559:723::/48", "7015"}, + {"2001:559:879a::/45", "7015"}, + {"2001:da8:d000::/44", "24359"}, + {"2407:adc0::/32", "142470"}, + {"2801:142::/40", "27951"}, + {"2a0e:6540:a48::/48", "208364"}, + {"2a0f:3107::/32", "57487"}, + {"2403:a2c0:128::/47", "131662"}, + {"2407:3e00:c000::/48", "24075"}, + {"2804:954:32::/41", "263073"}, + {"2804:fb4:2ffb::/32", "263599"}, + {"2a02:26f7:f6c8::/48", "36183"}, + {"2a03:d000:67fe::/47", "31205"}, + {"2a10:2a80:53a::/47", "207727"}, + {"2001:9e8:3a40::/32", "8881"}, + {"2404:1c00::/32", "55454"}, + {"2404:7180:a010::/48", "23848"}, + {"2a02:40e0::/32", "48364"}, + {"2a04:4e42:50::/42", "54113"}, + {"2001:500:126::/47", "396574"}, + {"2001:df7:4700::/48", "135957"}, + {"2607:f7e0::/32", "25660"}, + {"2804:5e08:280::/39", "269007"}, + {"2a00:ef60::/32", "12826"}, + {"2a07:bec0::/29", "201466"}, + {"2600:6c21:239::/46", "20115"}, + {"2804:1408:5100::/34", "28635"}, + {"2804:37f0:5900::/34", "266445"}, + {"2804:53b0:4011::/32", "268600"}, + {"2a01:5040:a100::/48", "43996"}, + {"2a0c:b641:4d0::/48", "210732"}, + {"2600:6c3a:61::/44", "20115"}, + {"2605:5fc0::/32", "397881"}, + {"2606:5e00::/35", "14576"}, + {"2606:6440::/32", "16504"}, + {"2804:188:aaab::/35", "262750"}, + {"2804:4758::/32", "267047"}, + {"2804:58b4::/32", "268145"}, + {"2001:559:5ac::/48", "33491"}, + {"2001:559:818a::/48", "7015"}, + {"2001:67c:2ed0::/48", "8767"}, + {"2600:6c10:148::/46", "20115"}, + {"2602:fc41:100::/40", "53667"}, + {"2607:fc50::/34", "36236"}, + {"2804:964:2701::/32", "263080"}, + {"2a0c:4a01:c10::/42", "134981"}, + {"2001:67c:1c0::/48", "25577"}, + {"2400:b200:4100::/46", "45102"}, + {"2409:8055:29::/45", "56040"}, + {"2803:4680::/32", "263222"}, + {"2a03:db05::/32", "28832"}, + {"2a0e:840::/29", "208663"}, + {"2405:8180:f00::/35", "135478"}, + {"240e:3b6:f700::/36", "4134"}, + {"2602:803:2000::/40", "11894"}, + {"2610:20:516a::/48", "5744"}, + {"2620:74:ee::/48", "7342"}, + {"2801:1ee::/48", "19429"}, + {"2803:9c0:4000::/32", "265695"}, + {"2806:266:480::/41", "13999"}, + {"240e:983:904::/40", "17638"}, + {"2804:2dc4::/32", "265302"}, + {"2a01:9840::/32", "31115"}, + {"2a0f:5382:acab::/48", "208135"}, + {"2404:c400:402::/47", "9328"}, + {"2406:dd40::/32", "141268"}, + {"2803:ea80::/36", "28048"}, + {"240e:97d:8000::/33", "4134"}, + {"2600:6c39:2a2::/37", "20115"}, + {"2606:f403::/32", "11776"}, + {"2a0d:5600:30::/47", "63473"}, + {"240a:abf1::/32", "145707"}, + {"2a00:4cc1::/32", "51691"}, + {"240a:ab4f::/32", "145545"}, + {"240a:ae24::/32", "146270"}, + {"240e:964:c400::/39", "133775"}, + {"2607:f6f0:2400::/39", "15830"}, + {"2610:b0:4108::/43", "3573"}, + {"2806:230:403e::/48", "265594"}, + {"2a0c:b641:26b::/45", "59598"}, + {"2a0f:a01:5::/32", "30633"}, + {"240a:ae9c::/32", "146390"}, + {"2602:ff1c:1::/48", "36351"}, + {"2804:1ed0::/35", "262286"}, + {"2806:2f0:93e1::/46", "17072"}, + {"2001:c20:48c9::/46", "3758"}, + {"2001:4878:4259::/48", "12222"}, + {"240c:ca16::/31", "23910"}, + {"240e:698::/35", "58519"}, + {"2804:2b3c::/32", "265142"}, + {"2806:370:1210::/44", "28403"}, + {"2001:1900:229c::/42", "3356"}, + {"2402:6800:7::/37", "22822"}, + {"2620:171:bc::/41", "715"}, + {"2001:559:8552::/48", "33651"}, + {"2001:15e8::/32", "24806"}, + {"2401:7e00::/32", "38355"}, + {"2a00:fe80::/32", "8585"}, + {"2a0c:dd40::/29", "42675"}, + {"240a:ad82::/32", "146108"}, + {"2001:67c:50::/48", "38970"}, + {"2404:de80::/39", "137443"}, + {"240e:44d:4c00::/42", "140345"}, + {"2801:17a:6::/44", "270105"}, + {"2a04:1dc0::/29", "41937"}, + {"2600:2a02::/31", "396319"}, + {"2600:e00f:4005::/44", "22995"}, + {"2604:d600:1404::/46", "32098"}, + {"2803:b310::/32", "271854"}, + {"2a02:26f0:c7::/44", "20940"}, + {"2001:559:c29d::/48", "33651"}, + {"2400:3dc0:701::/32", "134371"}, + {"2409:8904:8f90::/35", "24547"}, + {"2a0c:b641:660::/44", "210189"}, + {"2001:500:2c::/48", "12041"}, + {"240a:ad33::/32", "146029"}, + {"240e:983:1900::/48", "63838"}, + {"2605:a404:71::/45", "33363"}, + {"2607:ff68:9::/43", "46475"}, + {"2001:87f::/32", "198455"}, + {"2600:6c38:514::/46", "20115"}, + {"2001:1248:9719::/46", "11172"}, + {"2407:c280:3000::/45", "24322"}, + {"2a02:ee80:419a::/47", "21433"}, + {"2a10:f200::/29", "212399"}, + {"2001:579:2430::/44", "22773"}, + {"2001:4190:8025::/33", "12912"}, + {"2001:4b00::/29", "12620"}, + {"2402:4900::/32", "9216"}, + {"2605:a80:1::/48", "13213"}, + {"2620:1ec:35::/41", "8075"}, + {"2a07:3502:1070::/48", "38915"}, + {"2a07:dfc0::/32", "212944"}, + {"2a0f:104::/30", "7018"}, + {"2001:559:8659::/48", "33659"}, + {"2001:67c:1bc0::/48", "60216"}, + {"2a00:cf8::/32", "12605"}, + {"2a0a:c340::/32", "12996"}, + {"2409:8904:6670::/40", "24547"}, + {"2a0b:dd00::/29", "31252"}, + {"2001:df6:4f00::/48", "136167"}, + {"2401:1040::/47", "134806"}, + {"2406:9b40::/32", "24262"}, + {"240a:aa42::/32", "145276"}, + {"2600:6c38:e03::/45", "20115"}, + {"2605:a404:a03::/42", "33363"}, + {"2606:2800:4226::/44", "15133"}, + {"2804:6368::/32", "269359"}, + {"2001:4de0:2203::/39", "33438"}, + {"2405:9000:208::/32", "7474"}, + {"2408:8456:e210::/42", "134543"}, + {"2408:8459:a50::/37", "17816"}, + {"240e:983:1804::/47", "4134"}, + {"2600:6c10:818::/46", "20115"}, + {"2620:126:b000::/40", "22208"}, + {"2620:149:1010::/42", "714"}, + {"2a04:4b40::/29", "60476"}, + {"2401:1740:1000::/48", "136600"}, + {"240a:afff::/32", "146745"}, + {"2800:880::/30", "27773"}, + {"2604:cac0::/44", "11019"}, + {"2605:9780:2::/48", "36180"}, + {"2607:6b80:5d::/48", "12167"}, + {"2a00:4802:2610::/39", "8717"}, + {"2604:d600:d::/43", "32098"}, + {"240a:a83b::/32", "144757"}, + {"2600:140f:cc00::/48", "9498"}, + {"2607:8700:110::/46", "25820"}, + {"2405:68c0:21::/48", "139179"}, + {"240a:a5b7::/32", "144113"}, + {"2001:250:701b::/45", "24370"}, + {"2001:b012::/26", "3462"}, + {"2408:8459:5650::/36", "17816"}, + {"240a:a18d::/32", "143047"}, + {"2804:3b0:8309::/45", "53062"}, + {"2804:1644:340::/32", "262903"}, + {"2001:559:8628::/48", "33287"}, + {"2404:bf40:c200::/48", "7545"}, + {"240e:438:7820::/43", "140647"}, + {"240e:983:900::/46", "17638"}, + {"2804:14d:ac94::/42", "28573"}, + {"2a0d:f802:9000::/33", "20278"}, + {"2001:250:812::/48", "23910"}, + {"2001:1248:8473::/45", "11172"}, + {"2404:f4c0:8861::/46", "210384"}, + {"2405:6400:5000::/32", "23678"}, + {"2605:a8c0:10f::/48", "11827"}, + {"2a01:380::/32", "13127"}, + {"2a03:3300::/32", "50399"}, + {"2a02:26f7:c881::/46", "20940"}, + {"2a02:26f7:d981::/46", "20940"}, + {"2a04:8d40::/29", "50304"}, + {"2001:ee0:d040::/39", "45899"}, + {"2400:3860::/32", "149037"}, + {"240e:438:1840::/38", "4134"}, + {"2800:68:3c::/48", "27947"}, + {"2800:160:10d2::/47", "14259"}, + {"2800:484:d800::/40", "10620"}, + {"2a06:62c0::/41", "204138"}, + {"2001:1890::/35", "7018"}, + {"240e:44d:140::/42", "140346"}, + {"2804:80cc::/47", "272413"}, + {"2a02:26f7:38::/48", "36183"}, + {"2a0a:c400::/29", "47716"}, + {"2c0f:f438::/32", "37517"}, + {"2001:67c:1304::/48", "211000"}, + {"240a:a321::/32", "143451"}, + {"2602:807:a000::/44", "398668"}, + {"2605:4e40::/32", "40033"}, + {"2606:2b80::/32", "53338"}, + {"2804:14c:7500::/41", "28573"}, + {"2806:370:9100::/44", "28403"}, + {"2a12:800::/29", "210555"}, + {"2001:4d0:2418::/48", "7847"}, + {"2001:da8:20d::/48", "133111"}, + {"2600:1806:10::/44", "16552"}, + {"2602:fe77::/36", "53732"}, + {"2605:3940::/32", "397566"}, + {"2001:559:2c1::/48", "33287"}, + {"2001:559:c086::/48", "33657"}, + {"2401:9440::/32", "56264"}, + {"2404:2f80:ff00::/48", "140399"}, + {"2604:d600:928::/47", "32098"}, + {"2a02:26f7:d388::/47", "36183"}, + {"2a06:f907::/36", "56630"}, + {"2c0f:1000::/32", "328767"}, + {"2001:de8:16::/48", "55943"}, + {"240e:308:1200::/32", "4134"}, + {"2607:fcd0:10d::/35", "8100"}, + {"2a00:62c0::/32", "12389"}, + {"2a03:25c0::/32", "41770"}, + {"2a06:8dc3::/48", "57878"}, + {"2001:559:c146::/48", "33651"}, + {"2001:df0:ce::/48", "24101"}, + {"2001:44b8:7::/44", "7545"}, + {"2607:fb50:2100::/32", "22781"}, + {"2801:1de::/46", "271901"}, + {"2803:9800:909b::/42", "11664"}, + {"2001:1248:595a::/42", "11172"}, + {"2803:e600:cacf::/34", "18809"}, + {"2804:3810:100::/38", "266453"}, + {"2a0c:a9c7:147::/48", "41740"}, + {"2001:4998:f00f::/36", "10310"}, + {"2404:b640::/32", "137653"}, + {"240a:ae60::/32", "146330"}, + {"2804:1f44::/32", "270710"}, + {"2a00:f940:1::/44", "197695"}, + {"240a:ae9b::/32", "146389"}, + {"2605:5440:a::/32", "23328"}, + {"2806:106e:22::/45", "8151"}, + {"2a02:45c0::/47", "59675"}, + {"2a0d:3341:9000::/34", "36492"}, + {"2a0e:1580::/29", "208942"}, + {"2001:67c:1688::/48", "42632"}, + {"2409:8074:1900::/34", "9808"}, + {"240e:44d:4500::/42", "140345"}, + {"2a02:160::/32", "62183"}, + {"2a02:2230:200::/37", "25467"}, + {"240e:5f:6002::/48", "134772"}, + {"2600:1406:2600::/48", "35994"}, + {"2620:51:8000::/48", "394520"}, + {"2801:11e:1::/48", "3816"}, + {"2001:470:122::/43", "6939"}, + {"2405:c440:2::/32", "139972"}, + {"2406:e001:a000::/33", "23655"}, + {"2409:8d80:b000::/25", "9808"}, + {"2806:230:2052::/48", "265594"}, + {"2a02:888:8151::/48", "47794"}, + {"2409:8915:2a00::/40", "56044"}, + {"240e:3be::/35", "134773"}, + {"2600:6c10:f808::/47", "20115"}, + {"2a02:26f7:d189::/46", "20940"}, + {"2401:d800:b150::/42", "7552"}, + {"2404:5800:101::/32", "9911"}, + {"2605:9880:344::/47", "23470"}, + {"2a06:a005:b5::/48", "207941"}, + {"2a0f:6fc4::/32", "57487"}, + {"2001:250:5811::/46", "23910"}, + {"2001:4802::/32", "27357"}, + {"2400:a040:b::/32", "136237"}, + {"2402:800:bc60::/39", "7552"}, + {"240a:a7a6::/32", "144608"}, + {"2600:1005:d130::/41", "6167"}, + {"2804:5ce8:4100::/32", "268938"}, + {"2a0d:82c7:b000::/36", "47787"}, + {"2001:559:840e::/48", "33659"}, + {"2402:e380:31f::/48", "142148"}, + {"2600:100a:d020::/34", "22394"}, + {"2600:6c10:ff86::/44", "20115"}, + {"2605:4400:6::/47", "40715"}, + {"2804:7924::/32", "271287"}, + {"2a01:9480::/32", "49268"}, + {"2a10:cc42:1600::/40", "20473"}, + {"2001:559:83bb::/48", "33660"}, + {"2001:67c:28d4::/48", "59467"}, + {"2409:8904:5640::/42", "24547"}, + {"240e:5a:4780::/36", "140300"}, + {"2804:358::/39", "53246"}, + {"2a0e:b107:f2a::/48", "212268"}, + {"2a10:4741:20::/48", "208806"}, + {"2001:250:680b::/45", "138373"}, + {"2400:adc0:4010::/47", "9541"}, + {"2408:8459:ec50::/39", "17816"}, + {"2600:5c00:201::/36", "10838"}, + {"2a02:2498::/47", "13213"}, + {"2a04:3200::/47", "30742"}, + {"2a0b:6b81:3::/45", "42615"}, + {"240e:5e:1040::/42", "134774"}, + {"240e:108:1180::/48", "133774"}, + {"2a02:2e02:1350::/40", "12479"}, + {"2a02:50c0::/40", "29355"}, + {"2001:13c7:6016::/48", "61494"}, + {"2001:44b8:4059::/48", "4739"}, + {"2409:8c85:2801::/48", "56041"}, + {"2804:18d0::/32", "19990"}, + {"2804:7598::/32", "271057"}, + {"2a02:26f7:e4c9::/42", "20940"}, + {"2a02:ee80:4272::/45", "3573"}, + {"2a09:4b00::/32", "35280"}, + {"2c0f:f200::/32", "328015"}, + {"2001:559:c3b3::/48", "7016"}, + {"2001:4490:3f00::/42", "9829"}, + {"240a:ae76::/32", "146352"}, + {"2607:fac8::/36", "11404"}, + {"2a04:2dc0:18::/48", "211970"}, + {"2001:67c:23f4::/48", "197982"}, + {"2001:4490:4c00::/40", "9829"}, + {"2403:2c00::/45", "4058"}, + {"2602:ff0c:a3::/48", "5081"}, + {"2804:4f58:4100::/32", "268321"}, + {"2806:2f0:41e3::/38", "17072"}, + {"2a02:5f83:d1cd::/34", "39811"}, + {"2a03:6083:d000::/29", "16285"}, + {"240e:5e:10f0::/34", "4134"}, + {"2800:bf0:8012::/44", "27947"}, + {"2a03:cc00:fc0::/48", "212403"}, + {"2001:da8:e81f::/48", "138373"}, + {"2600:1010:a020::/40", "22394"}, + {"2a02:26f7:7b::/48", "20940"}, + {"2001:559:296::/48", "7922"}, + {"2405:203:888::/43", "55836"}, + {"2408:8459:210::/41", "17622"}, + {"240a:a5c6::/32", "144128"}, + {"240a:aa9e::/32", "145368"}, + {"2607:f0d0:1400::/36", "36351"}, + {"2a04:4e40:f040::/44", "54113"}, + {"2a06:6540:1241::/48", "8220"}, + {"2a06:cd40:400::/48", "43927"}, + {"240a:ad6c::/32", "146086"}, + {"2600:8808:1a00::/34", "22773"}, + {"2800:800:7f0::/45", "26611"}, + {"2a01:cf00:50::/46", "3215"}, + {"2001:1248:a016::/48", "11172"}, + {"2800:160:1431::/45", "14259"}, + {"2a03:7360:1::/48", "197943"}, + {"2a0c:3800:400::/48", "202410"}, + {"2a10:d504::/47", "22773"}, + {"2400:7fc0:220::/44", "55960"}, + {"2406:8b40::/39", "141218"}, + {"2804:3710:a000::/33", "266387"}, + {"2804:5214::/32", "268493"}, + {"2a03:5d60::/29", "14340"}, + {"2a0d:8780::/29", "49475"}, + {"2001:559:86d0::/48", "22909"}, + {"2001:b08:4::/48", "9162"}, + {"2406:8800::/42", "17465"}, + {"2a00:99a0:f000::/48", "64484"}, + {"2a02:7aa0::/35", "43513"}, + {"2404:1fc0::/35", "133217"}, + {"2600:370f:52c1::/42", "32261"}, + {"2604:c340::/32", "17055"}, + {"2a02:26f7:d245::/46", "20940"}, + {"2a06:e881:1709::/48", "206813"}, + {"2001:559:109::/48", "33287"}, + {"2001:678:fdc::/48", "206362"}, + {"2a00:1af0::/29", "35699"}, + {"2a03:2887:ff15::/48", "35819"}, + {"2c0f:fe08:111::/41", "36914"}, + {"2001:1248:571f::/41", "11172"}, + {"2607:f1d8:d2::/32", "7795"}, + {"2607:ffb0:7001::/32", "6327"}, + {"2806:2f0:3343::/42", "17072"}, + {"2a06:f907:4000::/36", "56630"}, + {"2001:559:777::/48", "33657"}, + {"2001:1a11:a7::/48", "8781"}, + {"2001:1ae8::/31", "13036"}, + {"2a02:ac80:601::/39", "25145"}, + {"2001:559:25a::/47", "33657"}, + {"2001:67c:2710::/48", "57823"}, + {"2402:800:5ad3::/44", "7552"}, + {"2405:9800:c908::/48", "45430"}, + {"2605:4640::/32", "20213"}, + {"2800:5f0:6024::/32", "22724"}, + {"2804:e0c:100::/48", "28176"}, + {"2a05:3950::/32", "201503"}, + {"2001:1248:5672::/40", "11172"}, + {"2800:160:1669::/43", "14259"}, + {"2806:370:7110::/44", "28403"}, + {"2a02:26f7:cac9::/42", "20940"}, + {"2401:4900:4a90::/42", "45609"}, + {"2a02:ac80:201::/39", "25145"}, + {"2607:b580:12::/48", "19754"}, + {"2600:2c00:3000::/36", "17378"}, + {"2a00:9340::/32", "57795"}, + {"2a01:5c40:6::/48", "212397"}, + {"2a10:cf00::/29", "12651"}, + {"2001:559:c531::/45", "7922"}, + {"2402:800:9501::/44", "7552"}, + {"2804:4750::/32", "267045"}, + {"2804:7ccc::/32", "271519"}, + {"2a00:d8a0::/29", "44332"}, + {"2a02:26f0:4701::/36", "20940"}, + {"2a02:26f7:eb01::/46", "20940"}, + {"2a04:3f83:49::/48", "211633"}, + {"2a09:9400::/29", "24822"}, + {"2a10:5800::/29", "399975"}, + {"2001:4801::/32", "19994"}, + {"2a0d:740::/29", "57878"}, + {"2600:9000:236a::/47", "16509"}, + {"2620:171:14::/46", "715"}, + {"2a02:2078::/32", "47720"}, + {"2607:fb40::/32", "19008"}, + {"2a02:e0:312f::/38", "34984"}, + {"2a02:26f7:19::/48", "20940"}, + {"2a0d:3840:100::/48", "57629"}, + {"2a0f:4e80::/29", "50629"}, + {"2c0f:fc89:8038::/40", "36992"}, + {"2407:4e00::/47", "17995"}, + {"240e:183:820c::/46", "140651"}, + {"2600:1404:a401::/38", "20940"}, + {"2602:fc09:bc::/41", "13780"}, + {"2602:fed2:7100::/48", "20473"}, + {"2606:2800:500c::/48", "14153"}, + {"2801:1:8004::/48", "18916"}, + {"2804:2044::/32", "52774"}, + {"2a02:7f40::/32", "20860"}, + {"2a06:e881:5901::/48", "209569"}, + {"2001:470:121::/48", "29962"}, + {"2001:559:2c6::/48", "33662"}, + {"2001:df4:1e80::/48", "136632"}, + {"2001:c38:9054::/46", "9931"}, + {"2001:da8:259::/48", "24349"}, + {"240e:9b:f01e::/42", "140255"}, + {"2408:8456:8e00::/42", "17622"}, + {"2408:8957:700::/40", "17816"}, + {"2605:b400::/37", "25956"}, + {"2804:5dd8::/32", "268996"}, + {"2a05:4b80::/29", "59395"}, + {"2a10:400::/32", "201787"}, + {"2400:ac40::/36", "136255"}, + {"2409:8050:1900::/37", "9808"}, + {"2606:2800:4252::/48", "15133"}, + {"2a06:d581:2000::/36", "207308"}, + {"2a03:1981::/32", "48260"}, + {"2001:4c21::/32", "60610"}, + {"2400:cb00:a870::/45", "13335"}, + {"2402:28c0:101::/32", "136620"}, + {"2408:8956:3900::/40", "17816"}, + {"240a:a898::/32", "144850"}, + {"2605:a404:17a::/45", "33363"}, + {"2800:800:a22::/43", "26611"}, + {"2a02:2e02:2570::/40", "12479"}, + {"2a0b:bdc0::/29", "42000"}, + {"2402:e380:318::/48", "141021"}, + {"2404:3d00:41a4::/44", "3573"}, + {"240e:9b:f033::/29", "4134"}, + {"2600:381:3a00::/29", "7018"}, + {"2001:da8:8001::/48", "24365"}, + {"2400:cb00:482::/44", "13335"}, + {"2409:8721::/29", "9808"}, + {"240e:12:1000::/32", "4134"}, + {"240e:67e:e600::/31", "4134"}, + {"2602:fec0::/44", "396320"}, + {"2606:f500:4000::/32", "11352"}, + {"2804:7e0c::/32", "271599"}, + {"2806:230:6017::/48", "11888"}, + {"2a01:170:1051::/36", "8820"}, + {"2a02:26f0:8f01::/35", "20940"}, + {"2a06:e0c0::/31", "28769"}, + {"2001:559:561::/46", "7922"}, + {"2401:d800:b8e0::/39", "7552"}, + {"2402:a00:4d::/42", "45916"}, + {"2801:80:7c0::/46", "263621"}, + {"2001:4888:8041::/46", "22394"}, + {"240e:974:ea00::/40", "4134"}, + {"2620:4e:a000::/48", "393529"}, + {"2a02:26f7:ea84::/48", "36183"}, + {"2a02:2b58::/29", "51074"}, + {"2a06:7243:f::/43", "62425"}, + {"2801:80:2410::/48", "268306"}, + {"2a05:7782::/32", "39892"}, + {"2a0d:40c0:8100::/33", "203448"}, + {"2a0d:ff00::/29", "204877"}, + {"2001:67c:206c::/48", "49788"}, + {"2001:67c:2ad8::/48", "198611"}, + {"2001:df0:247::/48", "58631"}, + {"2001:4b98:dc4::/46", "203476"}, + {"2404:2440:a0a0::/48", "138521"}, + {"2600:1417:d800::/48", "35819"}, + {"2604:5400:8800::/35", "11776"}, + {"2a0e:b107:12f5::/48", "211722"}, + {"2a11:4700::/31", "28680"}, + {"2001:4e0:1051::/32", "2381"}, + {"2001:559:c3b2::/48", "33287"}, + {"2001:da8:23f::/48", "23910"}, + {"240a:a3ca::/32", "143620"}, + {"2800:bf0:2440::/46", "52257"}, + {"2a02:26f7:e48d::/42", "20940"}, + {"2a0f:9400:7860::/47", "9833"}, + {"2001:4b27:ffff::34/121", "34288"}, + {"240e:186:c000::/34", "4812"}, + {"2602:803:4077::/48", "398223"}, + {"2804:6038::/32", "269153"}, + {"2a01:4b40:5000::/34", "21299"}, + {"2001:df6:b000::/48", "45533"}, + {"2400:1660::/48", "140766"}, + {"2804:4560::/32", "266922"}, + {"2a0d:3841:1030::/48", "57629"}, + {"2001:1260:3::/48", "28536"}, + {"2604:6600:78::/40", "40676"}, + {"2803:2210::/36", "271896"}, + {"2001:67c:29cc::/48", "3330"}, + {"2408:8456:4840::/38", "17816"}, + {"240e:45c:3b00::/40", "140528"}, + {"2600:180f::/32", "16552"}, + {"2620:1b::/44", "17103"}, + {"2a01:6c60:4000::/30", "62217"}, + {"2a02:9a8::/32", "47902"}, + {"2a0d:c0c0:3e1::/48", "59439"}, + {"2001:559:323::/48", "33652"}, + {"2402:f300::/32", "132125"}, + {"2a12:a200::/29", "210521"}, + {"2001:559:8004::/48", "33650"}, + {"2001:da8:214::/46", "24350"}, + {"2404:4a00:5542:3a2::/50", "55423"}, + {"2620:79:c000::/48", "62903"}, + {"2800:bf0:1c6::/44", "52257"}, + {"2804:6b14::/33", "270376"}, + {"2001:253:140::/48", "142106"}, + {"240a:a6a5::/32", "144351"}, + {"2602:fca0::/36", "399504"}, + {"2001:df6:2580::/48", "135738"}, + {"2600:805:b00::/48", "397601"}, + {"2605:a401:8419::/42", "33363"}, + {"2a00:4120::/32", "20804"}, + {"2603:c001:3610::/36", "31898"}, + {"2804:f8::/32", "53147"}, + {"2806:2f0:3283::/42", "17072"}, + {"2001:1388:5544::/46", "6147"}, + {"2607:ab00::/32", "600"}, + {"2804:7a4c::/32", "271363"}, + {"2a00:11c0:1799::/48", "42473"}, + {"2402:800:91fe::/38", "7552"}, + {"2408:8956:7300::/40", "17816"}, + {"2804:46f0:21::/41", "267021"}, + {"2001:559:33c::/48", "7016"}, + {"2401:4900:1fe0::/34", "45609"}, + {"2600:6c38:6c::/43", "20115"}, + {"2801:80:2c00::/40", "268460"}, + {"2a02:6900:8820::/48", "7160"}, + {"2a03:1ac0:5f50::/32", "9049"}, + {"2402:800:370f::/43", "7552"}, + {"2408:84f3:f620::/43", "17816"}, + {"240e:12:9000::/37", "134766"}, + {"2600:6c39:63d::/30", "20115"}, + {"2a01:c50e:ff40::/31", "12479"}, + {"2a05:4140:3::/45", "212271"}, + {"2605:b100:fcff::/48", "36522"}, + {"2607:f8f8:600::/39", "27323"}, + {"2804:27ac::/32", "52833"}, + {"2a01:56c1:300::/40", "198864"}, + {"2804:3688::/32", "266354"}, + {"2804:4364::/32", "267567"}, + {"2a00:d400::/32", "197506"}, + {"2001:df0:246::/48", "9555"}, + {"2400:cb00:356::/44", "13335"}, + {"2402:800:5efe::/34", "7552"}, + {"2406:f680:2::/33", "132298"}, + {"2605:4300:1200::/43", "22616"}, + {"2607:ffc8:1::3/63", "17356"}, + {"2804:2620::/32", "264323"}, + {"2a09:e080::/29", "29686"}, + {"2a10:e100::/29", "174"}, + {"2001:300::/32", "2497"}, + {"2001:579:62a0::/35", "22773"}, + {"240a:ad13::/32", "145997"}, + {"2804:716c::/32", "270788"}, + {"2001:44b8:30d8::/46", "7545"}, + {"2402:c800:fff1::/48", "37900"}, + {"2403:cc00:3000::/36", "20860"}, + {"2408:8a23:4000::/34", "4837"}, + {"240a:a4ff::/32", "143929"}, + {"2a02:26f7:e7d0::/48", "36183"}, + {"2a06:fb41::/32", "203385"}, + {"2a0b:3540::/45", "204413"}, + {"2001:41b8::/32", "8365"}, + {"2001:4888:801e::/48", "6167"}, + {"2409:8924:4700::/36", "56046"}, + {"2409:8958:c854::/39", "56040"}, + {"2607:f098:3100::/38", "33363"}, + {"2806:20d:5800::/45", "32098"}, + {"2a02:20a8::/32", "15830"}, + {"2a04:980::/29", "15659"}, + {"2a02:2e02:89e0::/38", "12479"}, + {"2001:978:2801::/38", "174"}, + {"2402:800:9455::/42", "7552"}, + {"2405:ec00:111::/35", "23955"}, + {"2610:a1:1021::/46", "397228"}, + {"2804:a98::/32", "52896"}, + {"2001:1900:2261::/48", "3356"}, + {"2a04:4280:100::/48", "43260"}, + {"2a0e:40c0:3::/48", "204957"}, + {"2001:559:186::/47", "33651"}, + {"2001:67c:48::/48", "51210"}, + {"2600:370f:3588::/42", "32261"}, + {"2606:6080:1004::/48", "32489"}, + {"2001:44b8:606f::/32", "4739"}, + {"2401:4900:40d1::/44", "45609"}, + {"2404:4a00:7500::/64", "55423"}, + {"2405:f080:e00::/46", "136907"}, + {"2600:2:da0::/29", "1239"}, + {"2620:13d:a000::/48", "19712"}, + {"2a02:2e0:407::/43", "12306"}, + {"2a02:ed04:110::/34", "50304"}, + {"2402:ef2f:1c::/48", "7633"}, + {"240e:5e:1080::/44", "4134"}, + {"2602:802:4003::/48", "14038"}, + {"2602:fc23:151::/48", "54625"}, + {"2806:2f0:92e6::/39", "17072"}, + {"2001:dc7::/48", "24409"}, + {"2001:16a2:c310::/41", "39386"}, + {"2404:2940::/34", "132257"}, + {"2a02:ee80:4058::/47", "21433"}, + {"2406:dec0::/32", "45284"}, + {"2a01:b5e0::/32", "43359"}, + {"2a02:26f7:df00::/48", "36183"}, + {"2a0a:ec00::/32", "20836"}, + {"2001:468:1203::/37", "11537"}, + {"2001:559:2a4::/48", "7015"}, + {"2001:559:7a6::/48", "7922"}, + {"2402:800:5de0::/44", "7552"}, + {"2409:8904:5970::/40", "24547"}, + {"2409:8f04:9700::/33", "24547"}, + {"2620:1e:2000::/48", "396288"}, + {"2804:2700::/32", "263869"}, + {"2001:67c:2004::/48", "25173"}, + {"2405:1c0:7951::/46", "55303"}, + {"2605:6f80::/40", "53340"}, + {"2001:250:5866::/48", "138371"}, + {"2001:67c:29c8::/48", "52016"}, + {"2a02:26f7:e100::/48", "36183"}, + {"240a:a095::/32", "142799"}, + {"240a:a4e7::/32", "143905"}, + {"2600:6c20:e4a::/43", "20115"}, + {"240a:ad0e::/32", "145992"}, + {"2600:140b:14::/48", "24319"}, + {"2603:7000::/28", "12271"}, + {"2001:da8:23c::/48", "23910"}, + {"2001:df0:4780::/48", "45278"}, + {"2804:14c:f289::/41", "28573"}, + {"2a01:53c0:ff01::/44", "54994"}, + {"2402:e7c0:840::/38", "59078"}, + {"2605:a900:100a::/34", "46887"}, + {"2804:32e0::/32", "265102"}, + {"2806:230:402e::/48", "265594"}, + {"2a0a:ec02:c01::/48", "42692"}, + {"2a0d:a140::/29", "24639"}, + {"2a0e:800:ff03::/45", "209083"}, + {"2400:4840::/48", "395363"}, + {"2804:7494::/32", "270990"}, + {"2a02:26f7:5e::/48", "36183"}, + {"2c0f:eb68::/32", "36924"}, + {"2401:7400:6001::/43", "4773"}, + {"2606:6a80::/32", "394384"}, + {"2607:fb10:5017::/42", "2906"}, + {"2804:14c:da99::/41", "28573"}, + {"2804:48b4::/32", "267139"}, + {"2804:4968::/32", "262625"}, + {"2a00:1fa2:bb00::/33", "28884"}, + {"2a00:ab00::/33", "49505"}, + {"2a02:26f7:e7d5::/42", "20940"}, + {"2c0f:fbf0:1::/48", "32653"}, + {"2001:559:c233::/48", "33650"}, + {"2001:44b8:4079::/40", "4739"}, + {"240a:ade2::/32", "146204"}, + {"2600:6c7f:9022::/48", "20115"}, + {"2605:940:610::/44", "396919"}, + {"2800:200:f1d0::/36", "12252"}, + {"2001:559:8401::/48", "33491"}, + {"2001:678:e98::/48", "212495"}, + {"2001:1488::/32", "25192"}, + {"2409:8948:8b00::/40", "24445"}, + {"2800:d302:38::/29", "11830"}, + {"2804:a30:c000::/34", "263030"}, + {"2a02:a11::/29", "31251"}, + {"2a02:26f7:c6c2::/47", "20940"}, + {"2a09:a4c7:3000::/36", "208861"}, + {"240a:a75a::/32", "144532"}, + {"2800:68:bacb::/33", "61468"}, + {"2804:30b8:caff::/34", "28154"}, + {"2804:3128::/32", "264997"}, + {"2a02:5e0::/32", "3330"}, + {"2a02:ee80:42d6::/32", "3573"}, + {"2a0b:9cc0::/29", "12859"}, + {"240a:aaf0::/32", "145450"}, + {"2803:8240::/47", "52511"}, + {"2a03:db80:4424::/48", "5501"}, + {"2a0e:aa06:498::/45", "24239"}, + {"2001:559:217::/48", "33659"}, + {"2001:67c:109c::/48", "211479"}, + {"2400:ddc0:d000::/34", "4785"}, + {"2a03:94c0::/40", "39326"}, + {"2001:559:3f4::/47", "7016"}, + {"2402:7d80:241::/48", "63583"}, + {"2404:ce40::/35", "138884"}, + {"2406:daa0:2080::/44", "16509"}, + {"2408:805c:4000::/44", "17622"}, + {"2800:5d0:801::/48", "17048"}, + {"2804:2848::/32", "263952"}, + {"2804:7854::/32", "271235"}, + {"2a02:26f0:9401::/39", "20940"}, + {"2406:5880::/32", "135391"}, + {"240a:adb5::/32", "146159"}, + {"240e:45c:c200::/40", "131285"}, + {"240e:964:ea00::/40", "133776"}, + {"2600:180b:2002::/33", "16552"}, + {"2620:11d:9002::/56", "14805"}, + {"2a02:26f7:d284::/48", "36183"}, + {"2c0f:f148::/32", "37542"}, + {"2602:fe6f:2::/47", "11374"}, + {"2a02:26f7:e989::/46", "20940"}, + {"2a02:5300::/32", "34119"}, + {"2600:2:120::/36", "1239"}, + {"2803:c800::/33", "23243"}, + {"2a01:5041:1000::/48", "202196"}, + {"2a0f:b100::/44", "202945"}, + {"2001:559:c164::/48", "20214"}, + {"2001:43f8:bf0::/48", "2635"}, + {"240e:96b:602d::/32", "4134"}, + {"2605:bc0:2002::/48", "54201"}, + {"2402:800:382b::/41", "7552"}, + {"2407:a080:8000::/33", "133480"}, + {"2600:140f:1c00::/48", "55836"}, + {"2604:4d40:6c::/47", "213073"}, + {"2804:24ac:8000::/33", "264237"}, + {"2a02:2e02:8fd0::/42", "12479"}, + {"2a07:3502:1050::/48", "1136"}, + {"2602:ffe1::/36", "11475"}, + {"2800:bf0:b425::/44", "52257"}, + {"2801:b0:b4::/32", "52888"}, + {"2a0a:fb00::/32", "206969"}, + {"2001:559:8286::/47", "7922"}, + {"240e:44d:d80::/41", "4134"}, + {"2604:f680::/40", "39962"}, + {"2806:269:501::/48", "13999"}, + {"2a01:8dc0:112::/48", "29479"}, + {"2a01:c50f:a080::/39", "12479"}, + {"2a03:3a40:2::/35", "199629"}, + {"2a0d:b0c0::/29", "210111"}, + {"2602:ff92::/36", "54868"}, + {"2620:7a:6000::/48", "398208"}, + {"2804:4e28::/32", "268243"}, + {"2a01:af80::/32", "34785"}, + {"2600:9000:11c1::/44", "16509"}, + {"2804:1f4e::/32", "33353"}, + {"2a02:d100::/29", "197155"}, + {"2a0f:1740::/29", "60262"}, + {"2001:559:4f5::/48", "7922"}, + {"2001:67c:940::/48", "209719"}, + {"2001:da8:702b::/48", "23910"}, + {"2600:8807:6d3e::/32", "22773"}, + {"2605:4a80:f000::/36", "11232"}, + {"2620:0:2900::/48", "22843"}, + {"2800:bf0:255::/44", "27947"}, + {"2804:5b50::/32", "268834"}, + {"2a0e:8240::/29", "207902"}, + {"2001:df0:2fc::/48", "58404"}, + {"2001:44b8:406c::/48", "7545"}, + {"2409:8c85:aa0d::/43", "9808"}, + {"2a01:8aa0::/32", "31122"}, + {"2401:4900:3b00::/42", "45609"}, + {"2804:1354:7900::/32", "52892"}, + {"2804:1ca0:ff05::/48", "61666"}, + {"2001:ee0:ca40::/39", "45899"}, + {"2400:adcc::/39", "9541"}, + {"2405:b8c0:1000::/32", "131674"}, + {"2408:80ea:7880::/42", "17623"}, + {"240e:3bb:c000::/37", "140315"}, + {"2620:12f:e000::/40", "40216"}, + {"2804:2940::/32", "264006"}, + {"2806:20d:5045::/44", "32098"}, + {"2a02:26f7:f288::/48", "36183"}, + {"2a02:2e02:9c10::/41", "12479"}, + {"2a0a:9a04::/48", "61317"}, + {"2a0f:9400:100::/46", "59893"}, + {"2a11:d140::/29", "1239"}, + {"2001:559:8512::/48", "7922"}, + {"2001:67c:784::/48", "201511"}, + {"2409:8904:3da0::/38", "24547"}, + {"240a:a605::/32", "144191"}, + {"240a:aac5::/32", "145407"}, + {"2a01:298:f002::/31", "30880"}, + {"2a01:53c0:ffcb::/45", "54994"}, + {"2a02:2230:6200::/40", "25467"}, + {"2001:559:84c0::/48", "33668"}, + {"2408:8256:880::/39", "17622"}, + {"2409:8061:2100::/36", "9808"}, + {"240e:397:1200::/37", "140491"}, + {"2605:4a00:111::/44", "14361"}, + {"2a02:26f7:decd::/46", "20940"}, + {"2001:638:30d::/48", "8519"}, + {"2405:8100:8005::/48", "13335"}, + {"2406:e1c0:6::/38", "141459"}, + {"2409:803c:3090::/48", "9808"}, + {"2600:5800:1602::/34", "11426"}, + {"2602:ff95::/36", "19194"}, + {"2606:6680:6::/48", "30475"}, + {"2a00:eb80::/32", "48518"}, + {"2a02:26f7:d50c::/48", "36183"}, + {"2a0f:56c0::/48", "48749"}, + {"2c0f:f618::/32", "327814"}, + {"2401:3c0:20c::/46", "45528"}, + {"2408:8256:1066::/39", "17622"}, + {"240a:a070::/32", "142762"}, + {"2604:3d80:400::/40", "11030"}, + {"2001:678:684::/48", "203085"}, + {"2803:a440::/32", "263776"}, + {"2804:4c58::/32", "267365"}, + {"2806:230:5017::/36", "11888"}, + {"2001:250:3417::/44", "138393"}, + {"2001:559:29b::/48", "33490"}, + {"2407:d380::/32", "135673"}, + {"240a:ab1b::/32", "145493"}, + {"2606:2800:4080::/48", "15133"}, + {"2804:74e4::/32", "271010"}, + {"2a03:5ce0::/48", "29667"}, + {"2a07:9440::/30", "202682"}, + {"2409:8020:3074::/40", "56046"}, + {"2a01:c9c0:c5::/48", "8891"}, + {"2a02:26f7:c005::/46", "20940"}, + {"2400:8b00:2180::/42", "45727"}, + {"2402:8a00::/33", "24477"}, + {"2804:543c::/32", "268636"}, + {"2804:7238::/32", "270840"}, + {"2606:d600::/32", "18590"}, + {"2803:5c80:5598::/48", "64114"}, + {"2803:ca80::/47", "263249"}, + {"2a02:5860::/32", "3561"}, + {"2600:1004:f110::/31", "22394"}, + {"2803:c560:fffb::/48", "207688"}, + {"2001:16a2:b20c::/43", "25019"}, + {"2400:dc00:4003::/48", "131702"}, + {"2400:dcc0:a204::/39", "38631"}, + {"2401:c7c0:2::/48", "23864"}, + {"2409:8057:3022::/45", "56040"}, + {"2607:fb10:503d::/46", "2906"}, + {"2a00:7380:feed::/48", "205868"}, + {"2607:fcd0:1338::/32", "8100"}, + {"2620:134:6006::/47", "33538"}, + {"2804:204:23f::/41", "28186"}, + {"2a02:26f7:bd::/48", "20940"}, + {"2a0b:b0c0::/29", "210625"}, + {"2a07:e00:a::/45", "210083"}, + {"2001:579:d264::/40", "22773"}, + {"2001:4200:49::/38", "2018"}, + {"2402:3a80:c037::/44", "38266"}, + {"2806:20d:5226::/40", "32098"}, + {"2a0a:ab80::/32", "206637"}, + {"2a0e:97c0:76f::/48", "207662"}, + {"2001:13c7:601f::/48", "64104"}, + {"2408:8456:5a00::/42", "17622"}, + {"240a:ae35::/32", "146287"}, + {"2600:380:a180::/38", "20057"}, + {"2600:9000:1e01::/46", "16509"}, + {"2a02:2698:782a::/47", "56981"}, + {"2a02:26f7:d9c9::/42", "20940"}, + {"2408:84f3:b210::/42", "134543"}, + {"2408:8957:b000::/40", "17622"}, + {"240a:a4c1::/32", "143867"}, + {"2600:370f:36c5::/46", "32261"}, + {"2606:2800:7030::/46", "15133"}, + {"2620:21:c000::/48", "30256"}, + {"2a02:26f7:d6c5::/46", "20940"}, + {"2a03:d180:fffe::/48", "13172"}, + {"2401:d800:9e50::/42", "7552"}, + {"2402:9e80:55::/48", "141376"}, + {"2408:8459:c050::/38", "17816"}, + {"2604:6600::/47", "40676"}, + {"2a02:2498:295::/48", "13213"}, + {"2a04:5500::/29", "60357"}, + {"2602:fd93::/36", "398230"}, + {"2a00:df80::/47", "12301"}, + {"2a01:53c0:ffba::/45", "54994"}, + {"2001:678:7e8::/48", "200300"}, + {"2607:f380:865::/38", "2152"}, + {"2607:f560::/32", "7029"}, + {"2800:bf0:80c2::/48", "27947"}, + {"2800:bf0:80e0::/45", "52257"}, + {"2a02:2630::/29", "15419"}, + {"2a05:c200::/29", "201050"}, + {"2001:250:21f::/42", "23910"}, + {"2001:579:5384::/36", "22773"}, + {"2402:8100:3a4f::/32", "55644"}, + {"2804:7994::/32", "271314"}, + {"2402:800:5901::/44", "7552"}, + {"2800:4b0:4310::/37", "12252"}, + {"2804:30cc::/32", "263055"}, + {"2a09:9180:ecfb::/48", "42081"}, + {"2001:559:580::/48", "33650"}, + {"2001:c00:101::/33", "4618"}, + {"2001:1340::/32", "10569"}, + {"2001:43f8:13e0::/48", "328403"}, + {"240a:a15a::/32", "142996"}, + {"240e:3b8:9c00::/34", "140310"}, + {"240e:438:e40::/35", "4134"}, + {"2604:6100::/32", "39970"}, + {"2620:13f:701a::/47", "55706"}, + {"2804:108c:d100::/37", "28146"}, + {"2804:3414::/32", "28666"}, + {"2607:fb10:7052::/42", "2906"}, + {"2a02:21e0::/32", "44700"}, + {"2a02:2e02:8c50::/42", "12479"}, + {"2001:559:501::/48", "7725"}, + {"2001:1248:986d::/43", "11172"}, + {"2408:8956:dac0::/39", "17816"}, + {"2409:8c20:5027::/39", "56046"}, + {"240a:a31a::/32", "143444"}, + {"2620:171:a0::/44", "715"}, + {"2a02:26f7:bdd1::/42", "20940"}, + {"2a02:26f7:e8cc::/48", "36183"}, + {"2a02:6f00:ec1::/32", "197692"}, + {"2a0a:2842:3450::/47", "136796"}, + {"2001:da8:ffc::/48", "24351"}, + {"2600:140f:4e01::/39", "20940"}, + {"2620:149:1110::/41", "714"}, + {"2803:b780:2::/44", "27742"}, + {"2803:e600:ffab::/41", "18809"}, + {"2a04:f340:1000::/40", "211174"}, + {"2a09:8180::/30", "3320"}, + {"2001:ee0:3740::/36", "45899"}, + {"2409:807e:100::/36", "9808"}, + {"240a:addc::/32", "146198"}, + {"2600:1006:a120::/36", "22394"}, + {"2606:2800:4ac8::/46", "15133"}, + {"2620:9:c000::/48", "23099"}, + {"2803:7320::/32", "266758"}, + {"2a0c:600::/29", "8399"}, + {"2c0f:f238:8000::/33", "328032"}, + {"2604:2b80::/36", "54351"}, + {"2a02:2861::/32", "25255"}, + {"2a02:4fc0:4200::/32", "199081"}, + {"2402:9040:9001::/33", "137498"}, + {"2806:2f0:2200::/42", "17072"}, + {"2402:b400:4428::/38", "45960"}, + {"240a:a32a::/32", "143460"}, + {"2605:1980:102::/45", "13951"}, + {"2620:135:6052::/40", "22697"}, + {"2800:160:1b22::/45", "14259"}, + {"2804:60a8::/32", "269182"}, + {"2a00:f740:400::/48", "57118"}, + {"2409:8062:3100::/36", "9808"}, + {"240a:a236::/32", "143216"}, + {"2605:b880::/32", "62782"}, + {"2606:e480:200::/39", "55083"}, + {"2800:200::/44", "12252"}, + {"2a03:4900:a0::/47", "197695"}, + {"2a03:fa00::/32", "28760"}, + {"2001:14f8::/32", "12502"}, + {"2402:ee80:b::/45", "132647"}, + {"240e:183:8200::/46", "140648"}, + {"2600:380:8100::/38", "7018"}, + {"2620:130:3022::/47", "62861"}, + {"2804:431c::/38", "267549"}, + {"2a0e:b107:240::/44", "204982"}, + {"2a0f:9400:7846::/44", "147028"}, + {"2001:559:c34d::/46", "7016"}, + {"2804:16a0::/32", "61908"}, + {"2a0e:8180::/48", "48749"}, + {"2001:559:789::/48", "7015"}, + {"2001:559:869f::/42", "7015"}, + {"2404:d500:2::/47", "132370"}, + {"2620:4d:402f::/43", "395403"}, + {"2804:45c4::/32", "266948"}, + {"2a00:1398::/30", "34878"}, + {"2c0f:e8e0:8000::/33", "327926"}, + {"2001:4cf8::/33", "13167"}, + {"2400:b000:300::/48", "45600"}, + {"240a:a2ec::/32", "143398"}, + {"2803:a0::/32", "266784"}, + {"2a02:26f7:dc89::/46", "20940"}, + {"2a03:2880:f140::/46", "32934"}, + {"2001:4b18:4000::/32", "20746"}, + {"2409:8c54:a00::/37", "56040"}, + {"2a00:b220::/32", "43957"}, + {"2a02:c98::/32", "48918"}, + {"240e:678:8800::/33", "4134"}, + {"2804:5818:1500::/32", "268106"}, + {"2a00:aea0:100::/38", "12678"}, + {"2001:250:2426::/48", "23910"}, + {"2604:d600:c3f::/41", "32098"}, + {"2400:bb00:101::/46", "56274"}, + {"240a:a57d::/32", "144055"}, + {"2602:ffc5:da0::/44", "7489"}, + {"2604:2680:2::/48", "2386"}, + {"2a02:503::/47", "51955"}, + {"2a02:ee80:41cc::/43", "3573"}, + {"2a0f:3b03::/32", "58313"}, + {"2001:579:d2a4::/34", "22773"}, + {"2602:ff28::/36", "14877"}, + {"2607:f758:5400::/32", "13649"}, + {"2804:14c:5971::/40", "28573"}, + {"2001:ec0:4000::/44", "131293"}, + {"2406:4440:50::/42", "396303"}, + {"2409:805c:30c1::/42", "9808"}, + {"2607:f060:1004::/32", "11404"}, + {"2804:5a30:4000::/32", "268754"}, + {"2a02:cbf7:2::/39", "61157"}, + {"2403:6e40:190::/44", "9830"}, + {"2a02:26f7:be01::/46", "20940"}, + {"2a02:26f7:e045::/46", "20940"}, + {"2001:559:87a8::/45", "7015"}, + {"240e:ff:a000::/36", "134764"}, + {"240e:6bd:1000::/30", "4134"}, + {"240e:a67:2600::/23", "4134"}, + {"2604:d600:60b::/45", "32098"}, + {"2620:11a:a032::/48", "43515"}, + {"2806:2f0:4721::/46", "17072"}, + {"2a00:86c0:2040::/47", "40027"}, + {"2a02:23c8:ff00::/40", "24592"}, + {"240a:a709::/32", "144451"}, + {"2602:feda:c0::/47", "43126"}, + {"2804:1408:8001::/35", "28635"}, + {"2804:2144:900::/37", "52795"}, + {"2001:559:875e::/48", "7922"}, + {"2001:fb0:1076::/47", "7470"}, + {"2400:cb00:172::/44", "13335"}, + {"240e:3b9:9c00::/34", "140310"}, + {"2600:1007:b1f2::/33", "22394"}, + {"2800:380::/32", "22927"}, + {"2804:7864::/32", "271239"}, + {"2a07:9a40:dcb::/29", "30081"}, + {"2a07:c500::/29", "48501"}, + {"2001:559:7af::/43", "7922"}, + {"2001:44b8:606a::/45", "7545"}, + {"2400:cd00:1037::/48", "38293"}, + {"240e:979:5e00::/40", "134770"}, + {"2603:c001:4010::/39", "31898"}, + {"2605:59c2:8000::/36", "36492"}, + {"2001:df3:7880::/48", "140583"}, + {"2406:840:4880::/47", "139317"}, + {"240a:a754::/32", "144526"}, + {"2600:1901:ffd0::/44", "15169"}, + {"2606:ae00:9c00::/40", "7287"}, + {"2804:69c4::/32", "270290"}, + {"2404:8d02:5000::/32", "9587"}, + {"2408:8957:100::/40", "17816"}, + {"2a02:26f7:d100::/48", "36183"}, + {"2a02:2e02:a30::/41", "12479"}, + {"2a02:5400:828::/48", "33353"}, + {"2001:4860:1026::/33", "15169"}, + {"2001:4d98::/34", "3303"}, + {"2408:8456:5200::/42", "17622"}, + {"240a:a6a3::/32", "144349"}, + {"2a01:8782::/29", "50343"}, + {"240a:a1b1::/32", "143083"}, + {"2a00:1d34::/33", "9121"}, + {"2a06:7a03::/48", "3170"}, + {"2a09:8740::/29", "35426"}, + {"240a:a97e::/32", "145080"}, + {"2001:67c:52c::/48", "49639"}, + {"2001:da8:4031::/46", "24353"}, + {"2408:8409:2400::/40", "4808"}, + {"240e:983:1201::/40", "4134"}, + {"2600:6c38:505::/44", "20115"}, + {"2804:437c:c000::/35", "267573"}, + {"2a03:1e80:ff9::/45", "8590"}, + {"2a0c:3b85::/32", "58057"}, + {"2001:559:1eb::/45", "33489"}, + {"2001:1ab0::/32", "29134"}, + {"2402:a00:6e::/40", "45916"}, + {"2605:4c40:244::/36", "30081"}, + {"2605:f440:5354::/37", "54874"}, + {"2803:6210::/32", "271904"}, + {"2804:1b2:4000::/41", "18881"}, + {"2804:680:600::/36", "262589"}, + {"2804:3e18::/32", "266573"}, + {"2a00:a920:a00::/32", "60486"}, + {"2a09:f880::/32", "52052"}, + {"2a0b:1306:400::/48", "198018"}, + {"2001:bf7:1360::/32", "44194"}, + {"2409:8b63::/27", "9808"}, + {"240e:f9:c000::/30", "134774"}, + {"2606:68c0::/32", "11722"}, + {"2620:3c:8080::/48", "54763"}, + {"2803:9800:a012::/42", "11664"}, + {"2a02:26f7:e404::/48", "36183"}, + {"2a06:1281:5::/48", "203943"}, + {"2001:559:8448::/48", "22909"}, + {"2001:4028::/29", "8798"}, + {"2408:8456:f040::/40", "17816"}, + {"2409:8914::/39", "56044"}, + {"240a:a35d::/32", "143511"}, + {"2602:feb4:40::/44", "25961"}, + {"2a06:8780::/32", "50629"}, + {"240a:a644::/32", "144254"}, + {"2605:9300:1::/48", "13768"}, + {"2806:203:f001::/48", "262916"}, + {"2a02:29ea:14::/48", "49604"}, + {"2a06:a001:a104::/48", "210384"}, + {"240a:ad51::/32", "146059"}, + {"2a02:2370:1::/45", "32787"}, + {"2600:6c10:f06b::/43", "20115"}, + {"2804:63cc::/32", "269384"}, + {"2a00:1cb0::/32", "44219"}, + {"2a01:5042:eff::/48", "202196"}, + {"2a06:a005:3::/45", "147028"}, + {"2a0b:ca80::/32", "57723"}, + {"2400:8480:1000::/48", "133385"}, + {"2407:1400:7::/40", "23752"}, + {"2409:40c1::/30", "55836"}, + {"2620:149:575::/40", "714"}, + {"2001:559:379::/48", "33652"}, + {"2600:140f:5c01::/38", "20940"}, + {"2602:807:d000::/44", "397736"}, + {"2804:14c:9d84::/41", "28573"}, + {"2a09:48c0::/29", "6735"}, + {"2402:1200:11::/39", "24523"}, + {"2408:8456:b840::/38", "17816"}, + {"2804:5f4::/32", "262983"}, + {"2804:6a74::/32", "270337"}, + {"2806:2f0:1183::/43", "22884"}, + {"2a02:1022::/32", "13128"}, + {"2a02:26f7:6c::/48", "36183"}, + {"2a04:15c0::/29", "34134"}, + {"2402:800:930f::/43", "7552"}, + {"2404:e80:b000::/33", "134697"}, + {"2405:9800:b41e::/40", "45430"}, + {"2a02:240::/44", "28812"}, + {"240e:44d:7f80::/41", "4134"}, + {"2620:186::/46", "396013"}, + {"2a01:8840:3e::/41", "12041"}, + {"2a0e:de80::/29", "200462"}, + {"2402:d400::/45", "17762"}, + {"2403:9800:c061::/43", "4648"}, + {"2406:d140:8000::/34", "49544"}, + {"2600:140b:ec01::/35", "20940"}, + {"2804:6048::/32", "269157"}, + {"2a03:85c1:925c::/48", "12085"}, + {"2404:bf40:85c1::/42", "139084"}, + {"2405:f080:2000::/36", "136907"}, + {"2409:4001:2000::/35", "55836"}, + {"2a0d:77c7:748a::/36", "7489"}, + {"2001:da8:202f::/48", "23910"}, + {"2a00:1e1c:4000::/30", "8896"}, + {"2a0a:c40:ffff::/48", "206304"}, + {"2001:559:839a::/48", "33287"}, + {"2001:67c:160::/48", "44238"}, + {"2001:7b0::/32", "8881"}, + {"2402:9900:111::/48", "27435"}, + {"2408:8459:5280::/42", "136959"}, + {"2620:74:10::/48", "11840"}, + {"2800:d300:5000::/30", "11830"}, + {"2a05:6744::/48", "3549"}, + {"240a:a7f8::/32", "144690"}, + {"2a01:190:15f::/48", "51454"}, + {"2a0f:6580:103::/48", "48292"}, + {"2a0f:85c1:240::/44", "206792"}, + {"2804:3118::/32", "264992"}, + {"2804:3448::/32", "265447"}, + {"2804:3a68::/32", "266087"}, + {"2a07:2781:a4a4::/29", "15490"}, + {"2a0f:9400:780a::/47", "147028"}, + {"2001:559:c361::/46", "33287"}, + {"2607:ff60:5002::/48", "397110"}, + {"2a02:26f0:dc01::/39", "20940"}, + {"2001:559:8277::/48", "7016"}, + {"240a:a2c4::/32", "143358"}, + {"240a:adb8::/32", "146162"}, + {"2804:51a4:4100::/34", "268467"}, + {"2804:80f0::/32", "272422"}, + {"2a01:5560::/32", "44128"}, + {"2a02:2368::/32", "50270"}, + {"2a04:3480::/29", "60783"}, + {"2a0d:900::/32", "59951"}, + {"2001:678:ea0::/48", "48992"}, + {"2400:dd09:1006::/30", "7497"}, + {"2606:6c00:100::/48", "32787"}, + {"2a01:250:f900::/37", "34511"}, + {"2401:d800:28c0::/42", "7552"}, + {"2403:4b40::/32", "137785"}, + {"2801:80:1f0::/48", "52996"}, + {"2803:9800:a8c7::/44", "11664"}, + {"2804:7c10::/32", "271473"}, + {"2a03:6505::/32", "6731"}, + {"2a03:8fa0:1000::/36", "17819"}, + {"2001:559:83b9::/48", "33657"}, + {"2001:559:8728::/48", "33657"}, + {"2401:d800:9780::/42", "7552"}, + {"240a:a1b0::/32", "143082"}, + {"2600:2a05::/28", "396319"}, + {"2605:e740::/40", "398710"}, + {"2606:2800:433::/45", "15133"}, + {"2804:720::/32", "262621"}, + {"2001:579:709c::/42", "22773"}, + {"2602:ff50:300::/37", "63452"}, + {"2804:4d3c:2e02::/35", "267420"}, + {"2a01:4da0::/48", "34895"}, + {"2001:1b88::/47", "39477"}, + {"2600:1003:b1b0::/41", "22394"}, + {"2606:2800:21f::/42", "15133"}, + {"2804:8064::/32", "271747"}, + {"2a03:b000:a00::/40", "25369"}, + {"2001:67c:25ec::/48", "207394"}, + {"240e:67e:e400::/39", "140330"}, + {"2600:1001:b130::/40", "22394"}, + {"2606:2800:4209::/48", "14210"}, + {"2607:f358:15::/48", "54500"}, + {"2a00:1748::/32", "44225"}, + {"2001:da8:1001::/42", "24361"}, + {"2400:fc00:4022::/44", "45773"}, + {"2800:3c0:8180::/33", "19863"}, + {"2a02:26f7:be40::/48", "36183"}, + {"2001:200:700::/36", "2500"}, + {"2804:3e90:8a01::/39", "266606"}, + {"2804:684c::/32", "269683"}, + {"2a03:7540:7541::/32", "44406"}, + {"2800:bf0:a805::/48", "52257"}, + {"2806:230:2007::/48", "11888"}, + {"2a01:280:380::/48", "212079"}, + {"2a01:7c0::/32", "12294"}, + {"2a02:4820::/32", "201964"}, + {"2409:805c:6100::/30", "9808"}, + {"2409:8752:100::/38", "56047"}, + {"2600:3300::/24", "398197"}, + {"2607:6004:e301::/48", "397378"}, + {"2620:171:d0::/48", "715"}, + {"2801:80:17c1::/43", "61580"}, + {"2400:9380:95c0::/44", "136167"}, + {"2605:6900::/32", "174"}, + {"2606:7c80:100::/48", "40300"}, + {"2606:a700::/35", "17378"}, + {"2803:1a00:1513::/33", "262186"}, + {"2a01:5042:7::/48", "202196"}, + {"2a02:26f7:f18d::/42", "20940"}, + {"2a04:1b00:8::/47", "61005"}, + {"2001:559:c45c::/48", "7922"}, + {"2001:67c:430::/48", "51523"}, + {"2001:df1:fe00::/48", "141107"}, + {"2001:559:547::/48", "7725"}, + {"240e:108:1170::/48", "134238"}, + {"2804:3e8:1100::/34", "28663"}, + {"2a01:8840:12::/45", "12041"}, + {"2804:c0c::/32", "52665"}, + {"2a02:970:471::/35", "44002"}, + {"2001:67c:18e4::/48", "199957"}, + {"2402:a300:800b::/36", "55427"}, + {"2407:9e40::/32", "210807"}, + {"2602:fe87::/36", "399693"}, + {"2605:a401:806c::/40", "33363"}, + {"2803:33a0::/32", "52471"}, + {"2a0c:4b80::/34", "197991"}, + {"2600:100d:b040::/42", "6167"}, + {"2001:559:71f::/48", "7922"}, + {"2001:df5:f00::/48", "24205"}, + {"2400:a980:3000::/40", "133513"}, + {"240e:37b:1a00::/34", "140330"}, + {"2602:ffe4:c50::/46", "21859"}, + {"2804:57c::/36", "262517"}, + {"2a09:be40:4501::/48", "209109"}, + {"2402:800:3455::/42", "7552"}, + {"240e:3b0:6400::/35", "140312"}, + {"2605:abc0::/32", "16436"}, + {"2804:7b10::/32", "271408"}, + {"2a00:8740:100::/48", "49037"}, + {"2a01:b160::/32", "50064"}, + {"2a06:6280::/29", "209390"}, + {"2a0e:dc0:3::/44", "63473"}, + {"2001:67c:768::/48", "210103"}, + {"2402:800:36d3::/44", "7552"}, + {"240a:a330::/32", "143466"}, + {"2404:bf40:ec02::/38", "139084"}, + {"2404:f4c0:fd00::/47", "131171"}, + {"2408:84f3:e410::/42", "134543"}, + {"240a:ae9e::/32", "146392"}, + {"2600:140b:3c01::/33", "20940"}, + {"2a0e:a900::/29", "208981"}, + {"240e:983:1901::/40", "4134"}, + {"2606:ae00:62a0::/37", "7287"}, + {"2804:18:18d0::/42", "10429"}, + {"2804:7aa0::/32", "271382"}, + {"2402:1200:9::/43", "24523"}, + {"2402:7481::/32", "134809"}, + {"240a:a44b::/32", "143749"}, + {"2a00:c8c0::/47", "44964"}, + {"2a07:4300:1610::/48", "209622"}, + {"2a07:dc40::/32", "34629"}, + {"2409:8002:1900::/37", "9808"}, + {"2409:896a:6300::/37", "9808"}, + {"2604:7fc0::/32", "17017"}, + {"2606:9280::/32", "30035"}, + {"2806:322:1500::/34", "28546"}, + {"2a00:8a01:8010::/44", "18666"}, + {"2401:4900:5070::/40", "45609"}, + {"240e:37f:2600::/32", "4134"}, + {"2804:574:4000::/32", "53013"}, + {"2804:3e50:8000::/36", "266587"}, + {"2001:43f8:df0::/47", "3970"}, + {"2401:47c0:1900::/38", "41095"}, + {"2409:8000:2800::/40", "56048"}, + {"2a02:2698:6400::/38", "56420"}, + {"2a0f:c084::/32", "199669"}, + {"2001:559:c042::/48", "33491"}, + {"2400:4620::/32", "149187"}, + {"2409:8004:3041::/43", "24547"}, + {"2600:370e:7000::/43", "32261"}, + {"2800:160:1d84::/44", "14259"}, + {"2804:22b4::/40", "264117"}, + {"2a01:6140::/32", "51164"}, + {"2a0d:7680::/29", "206576"}, + {"2a0d:e400::/32", "60363"}, + {"2001:44b8:2040::/47", "7545"}, + {"2401:7000:b000::/33", "45177"}, + {"2404:bf40:8002::/45", "7545"}, + {"2408:8256:3b69::/48", "17816"}, + {"2a07:3502:1120::/48", "21286"}, + {"2a0e:77c0:2099::/48", "213281"}, + {"2001:559:c296::/47", "7015"}, + {"2409:8057:380a::/45", "56040"}, + {"240a:adbe::/32", "146168"}, + {"2a02:26f0:1600::/48", "34164"}, + {"2a02:26f7:ce::/48", "36183"}, + {"2a02:d107:e002::/35", "197155"}, + {"2c0f:f5c0:3::/39", "29465"}, + {"2001:559:8687::/48", "33657"}, + {"2620:f0:4005::/44", "394699"}, + {"2804:cfc::/32", "262887"}, + {"2804:2144:8800::/34", "52795"}, + {"2a10:5fc0::/29", "213373"}, + {"2001:df6:1580::/48", "141745"}, + {"240a:a31c::/32", "143446"}, + {"240a:a391::/32", "143563"}, + {"2604:a400:b000::/33", "11320"}, + {"2804:5bdc:4::/32", "268873"}, + {"2a01:55e0::/30", "199938"}, + {"2a02:970:1012::/44", "44002"}, + {"2a02:5320:500::/40", "12189"}, + {"2a03:90c0:4a0::/41", "199524"}, + {"2a04:be20::/30", "47258"}, + {"2401:d800:50f0::/39", "7552"}, + {"2409:8907:6c20::/39", "24547"}, + {"2600:6c10:f099::/45", "20115"}, + {"2804:425c::/32", "267495"}, + {"2a0e:a380::/29", "207902"}, + {"2604:4e80::/32", "39964"}, + {"2804:765c::/32", "271106"}, + {"2001:550:90e::/38", "174"}, + {"2001:67c:294::/48", "47167"}, + {"2001:df1:4480::/48", "135986"}, + {"2001:c38:904b::/43", "9931"}, + {"2606:b840::/32", "397906"}, + {"2a0e:6902:2000::/36", "57695"}, + {"2401:4900:1c00::/46", "24560"}, + {"2408:8459:3210::/41", "17623"}, + {"2620:171:bb::/48", "42"}, + {"2804:2128::/32", "264539"}, + {"2a00:10c0::/32", "8758"}, + {"2001:dea:4001::/48", "7615"}, + {"2402:9500::/36", "55720"}, + {"2404:bf40:8501::/42", "139084"}, + {"2602:ffe4:c44::/47", "21859"}, + {"2800:d302:24::/46", "11830"}, + {"2803:d100:edc0::/38", "52362"}, + {"2409:8055:34::/48", "9808"}, + {"2a03:ac0::/32", "2128"}, + {"2001:678:510::/48", "42060"}, + {"2001:df4:6080::/48", "140967"}, + {"2401:3c00::/43", "38322"}, + {"2408:8459:1c30::/41", "17622"}, + {"240a:a9c4::/32", "145150"}, + {"2800:bf0:a0::/45", "52257"}, + {"2001:6d0:ffd8::/48", "8985"}, + {"2001:c20:48a2::/48", "9255"}, + {"2620:13e:7000::/47", "62621"}, + {"2a02:e981:1::/42", "19551"}, + {"2a09:ec00::/29", "39392"}, + {"240a:a78c::/32", "144582"}, + {"2603:803d::/32", "20001"}, + {"2604:4000:4000::/48", "32491"}, + {"2606:ab80::/32", "36001"}, + {"2804:2e8:a::/42", "262847"}, + {"2a0a:f640::/32", "213155"}, + {"2001:250:212::/48", "24349"}, + {"2001:559:86f9::/48", "33287"}, + {"2001:67c:2018::/48", "204296"}, + {"2408:8459:7610::/42", "17623"}, + {"2408:8656:2d00::/38", "17816"}, + {"2604:f80:3::/45", "22458"}, + {"2605:3dc0::/48", "397952"}, + {"2610:a0:4::/43", "7786"}, + {"2800:bf0:2a08::/42", "27947"}, + {"2804:36c4::/32", "266370"}, + {"2804:4ad8::/32", "267267"}, + {"2804:7bc8::/32", "271454"}, + {"2a01:5a8:9::/32", "8866"}, + {"2a05:96c0::/29", "47886"}, + {"2001:470:a5::/43", "6939"}, + {"2403:7f40:e001::/48", "57401"}, + {"240e:37f::/35", "140329"}, + {"2a09:2884::/48", "202316"}, + {"2001:250:7033::/48", "23910"}, + {"2001:559:85de::/48", "7015"}, + {"2804:745c::/32", "270976"}, + {"2a01:7d20:500::/40", "203645"}, + {"2409:8914:9a00::/40", "56044"}, + {"2600:6c20:e02::/45", "20115"}, + {"2604:d600:15ce::/43", "32098"}, + {"2804:2b2c::/32", "265139"}, + {"2804:713c::/32", "270776"}, + {"2a0b:2280::/32", "32931"}, + {"2001:44b8:308a::/45", "7545"}, + {"2a10:d580::/29", "51809"}, + {"2001:da8:b802::/48", "23910"}, + {"2610:a1:3058::/48", "12008"}, + {"2620:149:ae6::/48", "6185"}, + {"2a0e:97c6:d7::/44", "20473"}, + {"2604:d600:100d::/43", "32098"}, + {"2804:2388::/32", "264168"}, + {"2a0c:9a40:808e::/48", "60404"}, + {"2406:3000:11::/51", "4657"}, + {"240e:651:4000::/26", "4134"}, + {"2804:55fc::/32", "267969"}, + {"2a00:1e88:9::/32", "12389"}, + {"2a02:470::/32", "42303"}, + {"2c0f:f4a8:4000::/32", "37254"}, + {"2001:559:86d2::/47", "397601"}, + {"2001:4200:3401::/33", "2018"}, + {"240a:abeb::/32", "145701"}, + {"240a:afe0::/32", "146714"}, + {"2602:fc97:20::/44", "399544"}, + {"2a02:26f7:e10d::/42", "20940"}, + {"2a02:26f7:f408::/48", "36183"}, + {"2a05:4e40::/32", "49808"}, + {"2a06:1280:1000::/36", "44570"}, + {"2620:13a:5000::/44", "19755"}, + {"2806:2f0:10a3::/43", "17072"}, + {"2a0b:6b86:a00::/40", "200365"}, + {"2001:678:8fc::/48", "209520"}, + {"2408:80ea:75e0::/43", "17623"}, + {"240e:470::/32", "4134"}, + {"2001:520:1052::/48", "8103"}, + {"2001:df7:4b80::/48", "138754"}, + {"2404:b000:1000::/32", "4826"}, + {"2404:f4c0:a012::/37", "210320"}, + {"2408:8957:3b00::/40", "17816"}, + {"240a:a96f::/32", "145065"}, + {"2a00:5720::/32", "61015"}, + {"2a00:79e1:abc::/46", "36384"}, + {"2a00:a960::/32", "200161"}, + {"2a04:a500:1337::/48", "20769"}, + {"2a11:1d00::/29", "210983"}, + {"2001:df3:f900::/48", "137422"}, + {"2409:8914:a000::/39", "56044"}, + {"2803:22a0::/32", "266853"}, + {"2a00:f80::/38", "25542"}, + {"2a02:4880::/32", "12630"}, + {"2001:2092::/32", "3308"}, + {"2804:2d64::/32", "265279"}, + {"2a02:26f7:f7c0::/48", "36183"}, + {"2001:1248:9a7f::/40", "11172"}, + {"240a:a703::/32", "144445"}, + {"2a03:660::/32", "60117"}, + {"2a05:4100::/29", "204272"}, + {"2401:4900:6130::/41", "45609"}, + {"2600:1416:e000::/48", "25019"}, + {"2600:9000:113e::/41", "16509"}, + {"2607:a000::/32", "22799"}, + {"2620:1ec:1e::/42", "8075"}, + {"2804:52ac::/32", "268533"}, + {"2a00:1ca8:89::/48", "204963"}, + {"2a01:e35::/28", "12322"}, + {"2001:44b8:4056::/48", "7545"}, + {"2402:6940:1202::/37", "7645"}, + {"2806:36c::/32", "265615"}, + {"2a06:2d40::/47", "20473"}, + {"2001:559:8202::/48", "33667"}, + {"2001:559:c07c::/47", "33651"}, + {"2401:7140::/32", "136781"}, + {"2404:138:4004::/48", "9431"}, + {"2803:6900:1503::/48", "52423"}, + {"2804:33e4:200::/40", "265423"}, + {"2a01:8840:d6::/44", "12041"}, + {"2001:250:1408::/46", "24354"}, + {"2001:c20:48cc::/43", "9255"}, + {"240a:abd7::/32", "145681"}, + {"2604:2c80::/32", "6591"}, + {"2a10:ec0::/29", "207048"}, + {"2001:559:332::/47", "33650"}, + {"2001:dce:2::/48", "133745"}, + {"240e:6:d800::/44", "139721"}, + {"2602:107:2110::/48", "20115"}, + {"2804:50:2000::/32", "15830"}, + {"2401:4900:5d10::/41", "45609"}, + {"2402:800:93b7::/41", "7552"}, + {"2600:5c01:e0b::/35", "10796"}, + {"2607:ff38::/46", "22937"}, + {"2800:d302:15::/46", "11830"}, + {"2408:8756:2cf1::/46", "135061"}, + {"2620:aa:4000::/48", "26716"}, + {"2804:2d4:400::/38", "28244"}, + {"2600:8807:1fa2::/34", "22773"}, + {"2800:160:1769::/45", "14259"}, + {"2803:1a00:5413::/32", "262186"}, + {"2804:800::/32", "16509"}, + {"2a00:4802:2e0::/44", "13124"}, + {"2a02:26f0:d401::/40", "20940"}, + {"2a05:18c0::/29", "3257"}, + {"2001:ee0:e100::/40", "45899"}, + {"2603:c002:2010::/40", "31898"}, + {"2a02:26f7:ed09::/42", "20940"}, + {"2a0e:2c0::/29", "47755"}, + {"2402:bb00::/32", "23627"}, + {"2409:8948:8f00::/40", "24445"}, + {"240e:934::/28", "4134"}, + {"2a01:550::/32", "42579"}, + {"2001:559:136::/48", "33657"}, + {"2001:559:846d::/48", "7922"}, + {"2400:7400:e019::/48", "23736"}, + {"2400:8500:cbbd::/48", "7506"}, + {"2408:8459:410::/41", "17622"}, + {"2603:ff38::/29", "63023"}, + {"2803:5c80:5051::/46", "64114"}, + {"2409:8914:9b00::/40", "56044"}, + {"2a0a:9e00:a::/29", "61317"}, + {"2a0e:fd45:40f9::/48", "44103"}, + {"2602:feb4:1d0::/44", "25961"}, + {"2a03:9400::/48", "41938"}, + {"2404:cc00:2223::/32", "24441"}, + {"2600:370f:40a4::/46", "32261"}, + {"2a00:6060::/33", "60983"}, + {"2a04:f580:9010::/48", "4809"}, + {"2a05:7f80::/29", "201213"}, + {"2402:9e80:50::/48", "139058"}, + {"240a:a425::/32", "143711"}, + {"2602:ffdf:300::/40", "25851"}, + {"2602:fff6:6::/48", "8100"}, + {"2605:9d80:9052::/48", "4809"}, + {"2605:b100:1000::/39", "577"}, + {"2800:9a0:3100::/30", "14522"}, + {"2a03:3a40::/47", "199629"}, + {"2a11:11c0::/29", "56485"}, + {"2001:579:b114::/44", "22773"}, + {"2404:a640:13a::/32", "133827"}, + {"2620:34:e000::/48", "11195"}, + {"2804:9e0::/32", "262999"}, + {"2001:13b0:8016::/35", "3549"}, + {"2a0f:5701:3521::/48", "206499"}, + {"2001:678:8ec::/48", "41549"}, + {"2001:1248:9e22::/47", "11172"}, + {"2400:5300:3::/45", "45815"}, + {"2401:d800:5940::/42", "7552"}, + {"2620:13d:f000::/46", "22711"}, + {"2804:2ef4::/32", "264863"}, + {"2001:e60:87b8::/35", "4766"}, + {"2001:1248:5798::/42", "11172"}, + {"2401:f000:6::/48", "23838"}, + {"2a0e:5f00::/29", "47787"}, + {"2404:c0::/34", "23693"}, + {"240e:3b4:c800::/37", "4134"}, + {"2602:ff82::/48", "3064"}, + {"2804:7774::/32", "271179"}, + {"2600:8807:1f62::/40", "22773"}, + {"2800:160:1e51::/45", "14259"}, + {"2804:ef4:8004::/33", "28642"}, + {"2804:30d4::/32", "264975"}, + {"2804:6850::/32", "269684"}, + {"2806:267:1300::/37", "13999"}, + {"2a04:a580::/29", "12874"}, + {"2a0c:6a41:f231::/29", "30823"}, + {"2001:559:8358::/48", "21508"}, + {"2001:df5:1e80::/48", "137650"}, + {"240e:ff:c00a::/48", "134774"}, + {"2804:66c8::/33", "269582"}, + {"2a00:b840::/47", "31472"}, + {"2a0a:7e40:3::/29", "206056"}, + {"2406:9f40::/32", "133480"}, + {"2600:1488:6083::/41", "20940"}, + {"2804:2cac:eeef::/35", "265234"}, + {"2804:4fec::/32", "268358"}, + {"2001:fb1::/39", "17552"}, + {"2405:8500::/32", "55898"}, + {"2803:9400::/32", "27839"}, + {"2a0c:2480::/29", "201372"}, + {"2001:320::/32", "1237"}, + {"2001:67c:27f0::/48", "198650"}, + {"2408:80ea:6380::/41", "17622"}, + {"2409:806c:100::/35", "9808"}, + {"2607:b100::/32", "40555"}, + {"2804:2374::/32", "264163"}, + {"2806:10b7:2::/47", "8151"}, + {"2a00:1850:2a1::/48", "29357"}, + {"2a02:26f7:f248::/48", "36183"}, + {"2a0f:dfc0::/32", "60781"}, + {"2606:a000:3000::/36", "11955"}, + {"2a00:fb8:4d00::/34", "8881"}, + {"2a0a:5980::/29", "49544"}, + {"2001:559:7d8::/47", "7922"}, + {"240e:30d:5600::/30", "4134"}, + {"2801:12a::/48", "19429"}, + {"2a00:bec7:10::/47", "12946"}, + {"2001:1810:3000::/33", "30447"}, + {"2403:1cc0:1128::/48", "45352"}, + {"2803:c540::/32", "28049"}, + {"2a02:5ac0::/33", "48424"}, + {"2001:fd8::/41", "4775"}, + {"2403:27c0:1000::/48", "7586"}, + {"2a02:cb80:4240::/44", "43766"}, + {"2a03:7540:223::/33", "44406"}, + {"2a0a:3507:1::/48", "203038"}, + {"240a:a41a::/32", "143700"}, + {"2806:2f0:72e1::/46", "17072"}, + {"2a06:3000:2000::/29", "28715"}, + {"2a07:a905:ffe5::/44", "46261"}, + {"2001:df7:ec00::/48", "7575"}, + {"2001:19f0:4000::/37", "20473"}, + {"2400:cb00:a540::/46", "13335"}, + {"2407:a180::/47", "131758"}, + {"2600:6000:f0cc::/37", "12271"}, + {"2604:8200:1400::/38", "23089"}, + {"2804:1bbc::/32", "61746"}, + {"2a0a:a7c0::/29", "50966"}, + {"2a0b:7b00::/29", "206593"}, + {"2a0f:7540::/48", "49239"}, + {"2001:678:a50::/48", "24971"}, + {"240a:ab68::/32", "145570"}, + {"2a03:ae40:ff00::/40", "56511"}, + {"2c0f:fda8::/32", "37349"}, + {"2605:a400::/31", "33363"}, + {"2a0b:adc0::/29", "205243"}, + {"2401:10c0::/32", "131717"}, + {"2402:b400:4628::/32", "45960"}, + {"2605:e300::/32", "5009"}, + {"2607:f778:b100::/33", "32035"}, + {"2001:938:4044::/43", "8437"}, + {"2001:df1:cd00::/48", "135425"}, + {"2402:800:387f::/40", "7552"}, + {"2605:e200::/32", "18451"}, + {"2620:1ec:28::/47", "8068"}, + {"2803:1100::/32", "60022"}, + {"2804:4844::/32", "267108"}, + {"2804:6670::/32", "269558"}, + {"2001:43a8::/32", "22351"}, + {"2401:d800:5680::/42", "7552"}, + {"2a02:26f7:db10::/48", "36183"}, + {"2a02:c0c0::/29", "25520"}, + {"2806:261:418::/40", "13999"}, + {"2a02:26f7:b688::/48", "36183"}, + {"2a04:2e80:8::/48", "25106"}, + {"2a04:4e40:9800::/48", "54113"}, + {"2001:559:26c::/48", "33660"}, + {"2401:f040::/32", "45828"}, + {"2605:af00::/32", "21782"}, + {"2620:32:c000::/44", "53869"}, + {"2800:160:1fda::/42", "14259"}, + {"2001:67c:8ac::/48", "43183"}, + {"2408:8456:6840::/39", "17816"}, + {"2408:84f3:f820::/43", "17816"}, + {"240a:ac38::/32", "145778"}, + {"2806:2f0:50c3::/42", "17072"}, + {"2a05:1083:fec0::/44", "209870"}, + {"2001:67c:728::/48", "198837"}, + {"2001:df0:2400::/48", "7713"}, + {"2409:805c::/46", "9808"}, + {"2600:370f:74e5::/43", "32261"}, + {"2804:e28::/40", "52547"}, + {"2a02:ee80:420d::/46", "3573"}, + {"2001:57a:501::/46", "22773"}, + {"2400:cb00:a570::/47", "13335"}, + {"2408:8256:2d97::/44", "17623"}, + {"2620:115:40ff::/48", "3145"}, + {"2804:14c:f285::/44", "28573"}, + {"2a0c:e643:babe::/48", "213316"}, + {"2409:8069:2b08::/40", "9808"}, + {"2600:6c20:220::/41", "20115"}, + {"2620:10d:d004::/47", "15101"}, + {"2800:490:c000::/36", "27951"}, + {"2a02:26f0:cf00::/48", "34164"}, + {"2a02:26f7:ce88::/48", "36183"}, + {"2804:3d90:8103::/33", "266539"}, + {"2a00:f0e0:41::/42", "198499"}, + {"2001:df1:800::/48", "59253"}, + {"240a:ab40::/32", "145530"}, + {"2804:1648::/32", "263278"}, + {"240a:a9ac::/32", "145126"}, + {"2602:fcd3:100::/48", "212934"}, + {"2602:feb4:b0::/44", "25961"}, + {"2a02:6620:2::/48", "47478"}, + {"2a0c:b641:650::/48", "212963"}, + {"2001:648:2300::/46", "8248"}, + {"2605:3f40::/32", "15054"}, + {"2804:738::/32", "53153"}, + {"2a09:c5c0::/32", "205718"}, + {"2a0a:6040:407e::/48", "209870"}, + {"2001:df6:8100::/47", "137670"}, + {"240e:438:2e40::/35", "4134"}, + {"2600:80a:422::/48", "55228"}, + {"2602:feda:adf::/48", "140362"}, + {"2606:ae80:1c40::/44", "25751"}, + {"2620:8f:4001::/48", "293"}, + {"2800:bf0:3bc0::/48", "52257"}, + {"2a02:2370:f000::/48", "32787"}, + {"2401:880::/32", "45630"}, + {"2403:e840:8000::/33", "141768"}, + {"2405:8a00:203a::/41", "55824"}, + {"2409:8d35::/28", "9808"}, + {"2600:1007:9010::/40", "22394"}, + {"2607:2c00::/32", "14265"}, + {"2001:559:844c::/48", "7016"}, + {"2400:cb00:a742::/45", "13335"}, + {"2604:8200:5::/48", "23089"}, + {"2804:490:8600::/40", "265705"}, + {"2a01:6480:20::/48", "29049"}, + {"2001:678:770::/48", "201836"}, + {"2407:8100:3::/48", "58436"}, + {"240a:a2cb::/32", "143365"}, + {"240e:267:8000::/38", "140336"}, + {"2607:f740:e635::/44", "63911"}, + {"2804:3180::/38", "265019"}, + {"2a02:26f7:da04::/48", "36183"}, + {"2001:250:6808::/48", "138373"}, + {"2607:ff00:900::/40", "46385"}, + {"2620:a0:4001:1::/46", "55064"}, + {"2a00:f600::/32", "34946"}, + {"2001:678:ecc::/48", "25304"}, + {"2001:559:3b4::/48", "7015"}, + {"2401:8a40:54::/44", "45326"}, + {"2a02:26f7:bf91::/42", "20940"}, + {"2a04:7d00::/29", "3209"}, + {"2a09:4c2:4b::/29", "58057"}, + {"2a0e:97c3:5a7::/48", "20473"}, + {"2a11:5900::/29", "211199"}, + {"2407:5600::/32", "45186"}, + {"2620:134:6004::/47", "397726"}, + {"2804:5524::/32", "268692"}, + {"2806:2f0:6183::/42", "17072"}, + {"2a01:9aa0::/32", "200999"}, + {"2c0f:ef18::/34", "328266"}, + {"2001:df1:1d00::/48", "136547"}, + {"2001:df2:c100::/48", "55306"}, + {"2803:2a01:8400::/48", "27895"}, + {"2804:640:102::/43", "262713"}, + {"2804:3268:9003::/33", "265076"}, + {"2a02:26f7:c0c5::/46", "20940"}, + {"2a04:4e40:1220::/44", "54113"}, + {"2a0e:97c0:2ea::/48", "211544"}, + {"2001:510:303::/45", "376"}, + {"2001:67c:89c::/48", "210731"}, + {"2600:1901:bdd0::/44", "396982"}, + {"2804:8604::/35", "272614"}, + {"2a03:720:19::/32", "57073"}, + {"2402:2000:6001::/35", "24350"}, + {"240a:3:bcc::/48", "9605"}, + {"2600:1407:17::/48", "35994"}, + {"2803:9800:b8ce::/47", "11664"}, + {"2804:85ac::/32", "272594"}, + {"2a06:40c0::/29", "201933"}, + {"2409:8028:8f0::/48", "9808"}, + {"240a:a31b::/32", "143445"}, + {"2804:1214::/32", "263455"}, + {"2a00:1558::/32", "29311"}, + {"2001:44c8::/39", "45430"}, + {"2400:c700:181::/45", "55644"}, + {"2402:800:570f::/43", "7552"}, + {"2409:8904:4c60::/39", "24547"}, + {"240e:267:3000::/38", "140331"}, + {"2600:c04:1024::/32", "10912"}, + {"2800:440:9000::/42", "27738"}, + {"2804:43f4::/42", "267601"}, + {"2a07:a347::/32", "47447"}, + {"2a09:7100::/29", "20676"}, + {"2001:df5::/48", "58869"}, + {"2804:4670::/32", "266989"}, + {"2a02:4540::/41", "197207"}, + {"2a07:e380::/29", "203561"}, + {"2a0e:b107:5d0::/42", "20473"}, + {"2001:1260:400::/40", "28532"}, + {"2001:4c90::/29", "35612"}, + {"240e:966:e400::/39", "133775"}, + {"2620:12f:2000::/40", "32726"}, + {"2620:171:df::/48", "715"}, + {"2804:393c::/32", "266020"}, + {"2c0f:fe08:105::/43", "36914"}, + {"2600:6c10:9e::/42", "20115"}, + {"2804:1ea0::/32", "264440"}, + {"2001:5a0:3604::/36", "6453"}, + {"2001:67c:2308::/48", "39538"}, + {"240a:a334::/32", "143470"}, + {"240a:ad0f::/32", "145993"}, + {"2604:e200::/32", "40237"}, + {"2a02:26f7:f005::/46", "20940"}, + {"2001:4d0:241c::/33", "297"}, + {"2001:559:29::/48", "33660"}, + {"2001:559:858f::/48", "33651"}, + {"2001:1900:2268::/48", "10753"}, + {"2600:3001:1111::/30", "13649"}, + {"2600:6c10:11f::/41", "20115"}, + {"2a09:50c0::/48", "34775"}, + {"2a00:1e70::/30", "50858"}, + {"2a01:7080:17::/42", "42848"}, + {"2a02:26f0:4a01::/40", "20940"}, + {"2001:559:c502::/48", "7015"}, + {"2001:948:40::/43", "39590"}, + {"2401:5f40::/32", "38004"}, + {"2402:7800::/38", "4826"}, + {"2804:523c::/32", "268504"}, + {"2001:da8:a805::/44", "24370"}, + {"2405:5e00::/32", "3257"}, + {"2408:8001:3010::/44", "17622"}, + {"2602:ff96:12::/48", "40676"}, + {"2803:1860:1000::/39", "267823"}, + {"2a0e:da40:140::/44", "147173"}, + {"2001:559:83e5::/48", "33668"}, + {"2001:df0:5e00::/48", "135046"}, + {"2001:4130:50f1::/48", "29067"}, + {"2a0e:6a80::/29", "44486"}, + {"2001:df0:4940::/48", "58965"}, + {"2405:9800:b41d::/48", "133481"}, + {"2620:51:a000::/48", "395730"}, + {"2804:814c::/32", "272445"}, + {"2a05:8e40::/29", "198710"}, + {"2a0b:4580::/32", "20860"}, + {"240a:a5cd::/32", "144135"}, + {"2620:0:2b30::/44", "50"}, + {"2800:160:199b::/45", "14259"}, + {"2804:700c::/32", "270703"}, + {"2806:20d:5025::/44", "32098"}, + {"2001:678:630::/48", "197574"}, + {"2001:df6:c880::/48", "136906"}, + {"240a:a00e::/32", "142664"}, + {"2604:d600:c14::/44", "32098"}, + {"2a00:e460::/32", "62251"}, + {"2a02:26f0:e401::/39", "20940"}, + {"240a:a795::/32", "144591"}, + {"2a00:65c0:2::/32", "25156"}, + {"2001:559:5e1::/46", "22909"}, + {"2001:559:c4f0::/48", "20214"}, + {"2001:128c::/37", "25933"}, + {"2408:8459:9850::/38", "17816"}, + {"2a03:e140:32::/48", "48327"}, + {"2001:559:86db::/48", "33660"}, + {"2001:559:c347::/48", "33651"}, + {"2001:e60:a888::/33", "4766"}, + {"2402:800:78b0::/39", "7552"}, + {"2404:2280:10d::/48", "24429"}, + {"240a:aa78::/32", "145330"}, + {"240e:85:8000::/37", "137691"}, + {"2600:6000:fd84::/38", "12271"}, + {"2604:d600:685::/44", "32098"}, + {"2620:123:5000::/40", "16519"}, + {"2801:120::/32", "27790"}, + {"2001:44b8:4055::/48", "4739"}, + {"2406:3003:3050::/32", "4657"}, + {"2406:e1c0::/45", "141459"}, + {"240e:838:10::/42", "4134"}, + {"2a01:8840:e1::/48", "207266"}, + {"2001:559:8243::/48", "33659"}, + {"2603:90b5::/32", "11955"}, + {"2804:3d5c::/32", "266526"}, + {"2804:59a4::/32", "268715"}, + {"2a04:880:afff::/29", "43623"}, + {"2001:250:5873::/48", "24363"}, + {"2001:559:312::/48", "33287"}, + {"2404:bf40:a542::/42", "139084"}, + {"2600:1406:33::/48", "35994"}, + {"2804:6908:2000::/38", "270244"}, + {"2a05:4540::/29", "35041"}, + {"2a05:e740:162::/48", "29108"}, + {"2a07:6d80::/29", "59891"}, + {"2a0e:b107:13c0::/44", "211242"}, + {"240a:a62f::/32", "144233"}, + {"2602:fc23:14::/48", "38308"}, + {"2607:f5b5::/46", "7203"}, + {"2804:1024::/32", "263620"}, + {"2804:4cf8::/35", "267404"}, + {"2a02:26f7:e511::/46", "20940"}, + {"2a10:b9c0::/32", "211623"}, + {"2001:1b18::/32", "21385"}, + {"2409:8054:68::/48", "9808"}, + {"240e:44d:7680::/41", "4134"}, + {"2600:9000:11a5::/43", "16509"}, + {"2a06:9500::/45", "204028"}, + {"2401:c500:fd06::/44", "54994"}, + {"2404:3d00:400::/40", "21433"}, + {"240e:3b8:2200::/37", "136198"}, + {"2600:1008:b130::/44", "22394"}, + {"2a04:9a00:1110::/46", "208153"}, + {"2001:559:8077::/48", "20214"}, + {"2001:df6:3380::/48", "141884"}, + {"2408:8957:7c00::/40", "17622"}, + {"2606:5580:2::/38", "63242"}, + {"2607:f6f0:a000::/46", "16553"}, + {"2a0a:a3c0:b0::/44", "3320"}, + {"2001:1a68:19::/46", "57367"}, + {"2407:7a00::/32", "24187"}, + {"2602:ffce::/42", "63019"}, + {"2a02:26f7:bcc4::/48", "36183"}, + {"2a03:5a00:3d::/48", "200503"}, + {"2406:840:e1ec::/48", "141237"}, + {"2604:cd00::/32", "7352"}, + {"2803:6900:533::/45", "52423"}, + {"2001:559:52c::/48", "7016"}, + {"2001:678:c14::/48", "5588"}, + {"2001:448a:5150::/34", "7713"}, + {"240e:438:4420::/43", "140647"}, + {"2a00:1be0::/32", "21034"}, + {"2a03:a4e0::/40", "50304"}, + {"2001:559:1de::/47", "33651"}, + {"2001:18c8:700::/41", "18982"}, + {"2401:b780:5004::/44", "45410"}, + {"240e:438:7240::/37", "4134"}, + {"2a04:100:3000::/29", "49223"}, + {"2a04:c100::/29", "210625"}, + {"2402:8100:2550::/44", "55644"}, + {"2800:484:c100::/40", "10620"}, + {"2a00:11c0:df::/48", "42473"}, + {"2a01:a000::/32", "47474"}, + {"2001:e48:44:5::/46", "9583"}, + {"2405:b40:707::/32", "55674"}, + {"2405:9800:b500::/38", "133481"}, + {"2408:8956:2840::/40", "17622"}, + {"2620:11:e000::/48", "33496"}, + {"2804:3d28:9::/48", "262664"}, + {"2a02:26f7:cb80::/48", "36183"}, + {"2001:1221::/48", "28496"}, + {"2400:d400:1008::/48", "45671"}, + {"2001:df0:a900::/48", "45701"}, + {"2403:a3c0:4::/32", "131600"}, + {"2408:80f1:160::/43", "138421"}, + {"2600:1f18::/33", "14618"}, + {"2a00:6901:1005::/48", "20926"}, + {"2a02:2ae8:8110::/33", "702"}, + {"2001:678:5c0::/48", "206883"}, + {"2404:0:5ffa::/45", "24154"}, + {"2405:6e00:240::/40", "133612"}, + {"2a04:b80:1::/48", "42160"}, + {"2001:250:3427::/48", "138438"}, + {"2605:6440:5004::/34", "396356"}, + {"2001:559:c2df::/48", "33491"}, + {"2001:67c:13d4::/48", "51496"}, + {"2a02:26f7:f3c4::/48", "36183"}, + {"2606:2800:401c::/48", "14153"}, + {"2400:7400:63::/48", "23736"}, + {"2404:ae00:17::/44", "45474"}, + {"240a:a56f::/32", "144041"}, + {"2602:fc52:356::/48", "399888"}, + {"2607:fc28:9000::/33", "22911"}, + {"2804:6540::/32", "269478"}, + {"2a02:26f0:9c01::/39", "20940"}, + {"2a0d:4280::/29", "204630"}, + {"2001:559:80a3::/48", "33668"}, + {"2001:da8:21b::/48", "23910"}, + {"2001:da8:5000::/45", "24360"}, + {"2001:4cc8::/31", "31246"}, + {"2400:a980:f00::/40", "133111"}, + {"2607:9b80:420::/39", "46558"}, + {"2a04:b880::/48", "43578"}, + {"2a05:3580:fc00::/29", "35807"}, + {"2001:559:82a0::/48", "7922"}, + {"2604:d600:914::/44", "32098"}, + {"2606:8fc0::/32", "17234"}, + {"2001:559:3da::/48", "7016"}, + {"2605:dd40:8580::/36", "398549"}, + {"2620:13b::/48", "7034"}, + {"2804:250c:c400::/34", "264255"}, + {"2806:230:3019::/48", "11888"}, + {"2401:7400::/38", "4773"}, + {"2600:1480:8000::/40", "33905"}, + {"2804:204:222::/47", "28186"}, + {"2806:230:4036::/48", "265594"}, + {"2a00:f826:8::/48", "200462"}, + {"2001:938:4027::/44", "8437"}, + {"2404:6380:8001::/48", "18257"}, + {"2408:8256:327c::/48", "17816"}, + {"2804:2af4::/32", "265127"}, + {"2804:2d04::/32", "265257"}, + {"2806:2a0:8f1::/44", "28548"}, + {"2001:559:c20c::/48", "13367"}, + {"2408:840d:6a00::/42", "17621"}, + {"240c:ca21::/32", "24363"}, + {"2a0e:8840::/29", "48627"}, + {"2620:192:3::/36", "6461"}, + {"2804:79f0::/32", "271337"}, + {"2a02:f2c0::/29", "208704"}, + {"2001:1ba8::/29", "50821"}, + {"2401:c5c0:dfb::/45", "55492"}, + {"240a:a4da::/32", "143892"}, + {"2607:fd48:3000:100::/32", "13536"}, + {"2401:d800:b7d0::/36", "7552"}, + {"2806:3d4::/32", "265586"}, + {"2a02:6ea0:1300::/40", "212238"}, + {"2001:388:406d::/35", "7575"}, + {"2001:559:c3d4::/48", "7015"}, + {"2001:67c:2178::/48", "29298"}, + {"2405:9800:f010::/36", "45430"}, + {"240a:aa2b::/32", "145253"}, + {"2405:1c0:6141::/46", "55303"}, + {"2803:5180::/32", "263762"}, + {"2a02:b50:4013::/48", "393954"}, + {"2a02:26f7:f681::/46", "20940"}, + {"2a0c:6d00:85::/48", "3218"}, + {"240a:a39d::/32", "143575"}, + {"240a:af39::/32", "146547"}, + {"2a00:1a28:1157::/48", "63473"}, + {"2a07:59c6:ee00::/40", "56382"}, + {"2a10:5d00::/29", "208256"}, + {"2a10:c941:10:b::/61", "35277"}, + {"240a:a5fc::/32", "144182"}, + {"240a:ad3d::/32", "146039"}, + {"2801::/48", "52224"}, + {"2801:16:a800::/48", "27817"}, + {"2606:a600:5000::/34", "23005"}, + {"2a00:9400::/32", "52063"}, + {"2a03:7080::/32", "25387"}, + {"2001:678:688::/48", "8283"}, + {"2001:df0:b500::/47", "61327"}, + {"240a:a9e2::/32", "145180"}, + {"240a:adf3::/32", "146221"}, + {"2804:6c0:800::/43", "262418"}, + {"2001:559:80da::/47", "33287"}, + {"2800:2b0::/32", "14232"}, + {"2804:3924::/32", "266014"}, + {"2804:4ae4:1244::/32", "267270"}, + {"2a06:a000:1e2::/48", "206804"}, + {"2a0f:3680::/32", "211476"}, + {"2001:4178::/29", "15456"}, + {"2600:1402:1401::/36", "20940"}, + {"2804:20dc:b000::/33", "264517"}, + {"2803:e600:7::/43", "18809"}, + {"2a02:26f7:eac9::/46", "20940"}, + {"2a02:e980:18d::/43", "19551"}, + {"2001:df7:c500::/48", "139943"}, + {"2408:8459:a030::/41", "17622"}, + {"2600:1011:f010::/39", "6167"}, + {"2602:107:1310::/48", "33363"}, + {"2804:1cf0::/32", "61684"}, + {"2804:3304::/32", "265111"}, + {"2a04:7d84::/32", "41110"}, + {"2a0c:b641:470::/44", "208029"}, + {"2a0d:4bc0::/29", "8888"}, + {"2001:559:c36e::/48", "7015"}, + {"2401:d800:59a0::/41", "7552"}, + {"2800:9f0::/32", "27845"}, + {"2600:7c00::/28", "15344"}, + {"2620:10a:b000::/47", "15297"}, + {"2a02:26f7:f389::/46", "20940"}, + {"2a09:8880::/36", "56690"}, + {"2a09:9340::/29", "209824"}, + {"2a0d:82c0::/31", "47787"}, + {"2001:520:1014::/47", "8103"}, + {"2001:559:720::/48", "21508"}, + {"2606:9a00::/32", "31845"}, + {"2804:14d:a281::/41", "28573"}, + {"2001:559:8478::/47", "7922"}, + {"2600:9000:2029::/45", "16509"}, + {"2604:af80:2848::/32", "18859"}, + {"2620:63:e000::/48", "13731"}, + {"2804:49fc::/32", "267212"}, + {"2a04:ac00:b::/48", "3180"}, + {"2a01:b140::/29", "24940"}, + {"2001:480:253::/48", "228"}, + {"2001:559:805f::/48", "7016"}, + {"2001:67c:12e0::/48", "206351"}, + {"2405:4cc0::/32", "139671"}, + {"2605:9780:1000::/40", "36180"}, + {"2605:dd40:8207::/44", "398549"}, + {"2620:149:14c::/46", "714"}, + {"2804:1efc:7000::/36", "264458"}, + {"2409:805c:2c00::/35", "9808"}, + {"240a:a708::/32", "144450"}, + {"240a:aa56::/32", "145296"}, + {"2606:c700::/33", "53850"}, + {"2607:fdf0:5e09::/43", "8008"}, + {"2a04:3640::/29", "49784"}, + {"2001:1388:8461::/44", "6147"}, + {"2403:5200::/32", "18049"}, + {"2600:5c01:2c0d::/39", "10796"}, + {"2610:130:200::/35", "6122"}, + {"2409:8051::/47", "56047"}, + {"240a:acb3::/32", "145901"}, + {"240e:108:11a1::/46", "4812"}, + {"2600:100d:be00::/44", "6167"}, + {"2804:70e0::/33", "270753"}, + {"2408:840c:8200::/40", "17621"}, + {"240e:18::/44", "4812"}, + {"2801:16e:2::/48", "19429"}, + {"2001:250:2824::/47", "23910"}, + {"2607:9b80:8000::/35", "46558"}, + {"2804:2c00::/32", "265187"}, + {"2804:63e8::/32", "269391"}, + {"2001:559:c1a3::/48", "33668"}, + {"2404:7e00::/32", "38493"}, + {"240a:ad44::/32", "146046"}, + {"2a01:358:4b11::/35", "9121"}, + {"2a0e:b107:bf0::/47", "140938"}, + {"2408:8459:aa10::/42", "17623"}, + {"2409:8087:1800::/39", "134810"}, + {"240a:71:8000::/35", "2497"}, + {"2605:f440:5652::/47", "50555"}, + {"2a01:270:e003::/36", "29657"}, + {"2a05:4143::/32", "212271"}, + {"2001:559:c1a2::/48", "33287"}, + {"2401:d800:5b0::/41", "7552"}, + {"2800:484:e500::/40", "10620"}, + {"2001:559:8463::/48", "33287"}, + {"2001:5b0:4ede::/35", "6621"}, + {"240a:a819::/32", "144723"}, + {"240a:a862::/32", "144796"}, + {"240c:6:4::/28", "45275"}, + {"240e:9b:f02d::/46", "140260"}, + {"2620:6c:40c0::/48", "32"}, + {"2804:2d80:d00d::/34", "262378"}, + {"2a0a:a2c0:2::/29", "205992"}, + {"2a0c:1940::/43", "60354"}, + {"2a0c:ffc0::/48", "57342"}, + {"2001:77c::/32", "5479"}, + {"2604:d600:15df::/42", "32098"}, + {"2804:29f0::/32", "264046"}, + {"2a0e:46c3:800::/40", "213392"}, + {"2001:559:c356::/47", "33287"}, + {"2001:18b8:a::/42", "29789"}, + {"2402:800:9963::/43", "7552"}, + {"2402:d000:8f01::/33", "9329"}, + {"2408:822a:a800::/31", "4837"}, + {"240a:afc5::/32", "146687"}, + {"2a05:1140::/29", "59890"}, + {"2001:da8:246::/48", "24349"}, + {"2a0f:380::/29", "206766"}, + {"2001:1520:a::/40", "8972"}, + {"2001:1a11:113::/45", "42298"}, + {"240e:e1:9700::/36", "4812"}, + {"2804:6674::/32", "269559"}, + {"2408:8459:e430::/41", "17622"}, + {"2a00:1358:df01::/34", "6866"}, + {"2a02:26f7:d1::/48", "20940"}, + {"2a02:2e02:30b0::/41", "12479"}, + {"2a03:db80:4814::/48", "60824"}, + {"2607:f180:5200::/34", "35908"}, + {"2620:103:e028::/47", "13893"}, + {"2803:d100:ec40::/42", "52362"}, + {"2a02:26f7:c010::/48", "36183"}, + {"2a02:26f7:c151::/42", "20940"}, + {"2001:13d8::/32", "3790"}, + {"2001:4de0:2102::/45", "33438"}, + {"2600:140b:1001::/38", "20940"}, + {"2600:1806:420::/48", "16552"}, + {"2804:828:91::/32", "262354"}, + {"2a02:26f7:dfc5::/46", "20940"}, + {"2a02:2e02:900::/40", "12479"}, + {"240a:a171::/32", "143019"}, + {"240e:85c::/44", "131285"}, + {"2620:13d:d01c::/48", "3356"}, + {"2a01:1b8::/45", "1257"}, + {"2a02:44a0::/43", "61955"}, + {"2404:7c00::/47", "45650"}, + {"2409:8924:4100::/38", "56046"}, + {"240e:3bd:d000::/36", "134772"}, + {"2a00:8a84:27f0:f::/32", "29119"}, + {"2a02:ad8::/43", "12389"}, + {"2605:1980::/48", "13951"}, + {"2a02:26f7:b3c1::/46", "20940"}, + {"2401:4900:3d30::/44", "45609"}, + {"2402:800:5d55::/42", "7552"}, + {"240a:a986::/32", "145088"}, + {"240a:ad62::/32", "146076"}, + {"2804:62e4:facf::/37", "269326"}, + {"2a01:8f40::/32", "59472"}, + {"2a02:26f7:c084::/48", "36183"}, + {"2001:559:120::/48", "7015"}, + {"2001:2004::/28", "1299"}, + {"2409:8924:1300::/37", "56046"}, + {"240a:add8::/32", "146194"}, + {"2603:90f5:2::/44", "11426"}, + {"2804:801c::/32", "271730"}, + {"2a06:6880:800::/29", "209620"}, + {"2a0b:e0c0::/29", "41206"}, + {"2a0c:f700::/29", "206119"}, + {"2001:df2:7e01::/48", "135526"}, + {"2402:7780:2::/32", "132933"}, + {"2604:6040:80::/48", "53698"}, + {"2402:8100:12::/47", "45271"}, + {"2600:380:ec00::/44", "20057"}, + {"2605:7c0:1003::/48", "19382"}, + {"2800:10:11::/48", "27750"}, + {"2804:8584::/32", "272584"}, + {"2402:800:7270::/40", "7552"}, + {"240a:ad4b::/32", "146053"}, + {"240e:698:4b00::/40", "133774"}, + {"2600:100f:d000::/42", "6167"}, + {"2600:8807:1f82::/42", "22773"}, + {"2801:80:3460::/44", "268766"}, + {"2a02:26f7:d2::/48", "36183"}, + {"2408:80ea:7780::/43", "17623"}, + {"2804:4360::/32", "267566"}, + {"2804:4b20::/32", "267285"}, + {"2a02:26f7:d18c::/48", "36183"}, + {"2001:df3:900::/48", "135905"}, + {"240a:a839::/32", "144755"}, + {"2804:14d:4200::/40", "28573"}, + {"2806:230:201a::/48", "265594"}, + {"2001:da8:5853::/48", "24363"}, + {"2001:44b8:3080::/48", "7545"}, + {"2600:1406:9000::/48", "35994"}, + {"2804:6b68::/32", "270398"}, + {"2a02:ff0:3d00::/40", "12735"}, + {"2a02:26f0:5400::/48", "34164"}, + {"2001:388:c::/48", "23859"}, + {"2001:559:810d::/48", "21508"}, + {"2001:1248:5659::/42", "11172"}, + {"2409:8924:c700::/30", "56046"}, + {"240a:a92f::/32", "145001"}, + {"2800:bf0:3420::/44", "52257"}, + {"2804:631c::/32", "269339"}, + {"2804:83a8::/32", "272210"}, + {"2001:559:815d::/48", "33491"}, + {"2001:67c:200c::/48", "51408"}, + {"240a:a34b::/32", "143493"}, + {"240e:44d:7400::/42", "140345"}, + {"240e:947::/36", "139887"}, + {"2607:f220:50a::/48", "5766"}, + {"2804:2314::/47", "262811"}, + {"2a02:26f0:108::/46", "20940"}, + {"240a:a298::/32", "143314"}, + {"2602:fc1f::/36", "46887"}, + {"2a04:4e40:2810::/41", "54113"}, + {"2001:1388:1c::/39", "6147"}, + {"2402:800:95b7::/41", "7552"}, + {"2604:a880:800::/48", "14061"}, + {"2803:2f80:feab::/39", "61503"}, + {"2a02:26f7:c895::/46", "20940"}, + {"2a04:88c0::/48", "60781"}, + {"2a04:a000::/29", "59630"}, + {"2a12:5800::/29", "52177"}, + {"2001:559:245::/48", "22909"}, + {"2408:8957:6d00::/40", "17816"}, + {"2a01:5620::/29", "29396"}, + {"2a02:ed00::/31", "50304"}, + {"2a06:9087:ffff::/48", "203271"}, + {"2a06:a001:a0d0::/44", "213234"}, + {"2001:a98:31::/40", "8517"}, + {"2401:4900:5360::/40", "45609"}, + {"2604:d600:1603::/43", "32098"}, + {"2804:14d:9800::/40", "28573"}, + {"2a02:26f7:e9c1::/46", "20940"}, + {"2a03:a000::/32", "13009"}, + {"2403:300:1c2a::/40", "714"}, + {"2403:44c0:3::/48", "135814"}, + {"2800:bf0:80c3::/45", "52257"}, + {"2a02:5400:820::/48", "33353"}, + {"2001:559:87f4::/48", "7015"}, + {"2402:800:38c5::/43", "7552"}, + {"240e:45c:1f00::/40", "137401"}, + {"2602:fe31::/36", "32281"}, + {"2606:2800:4a50::/47", "15133"}, + {"2804:3244:26::/47", "265066"}, + {"2001:67c:1138::/48", "57288"}, + {"2620:0:e10::/48", "40387"}, + {"2804:29e8::/32", "264043"}, + {"2a00:800::/38", "1257"}, + {"2001:67c:558::/48", "202060"}, + {"2001:7fb:fe18::/48", "12654"}, + {"2001:df4:d600::/48", "45900"}, + {"240e:37a:aa00::/39", "140330"}, + {"2600:9000:202f::/48", "16509"}, + {"2804:170::/33", "28131"}, + {"2402:2000::/33", "24350"}, + {"2607:fdb8:2000::/33", "30496"}, + {"2800:bf0:800b::/45", "52257"}, + {"2a04:9a01:1000::/36", "34663"}, + {"2a06:a000:170::/48", "20473"}, + {"2402:800:5601::/44", "7552"}, + {"240a:a6a6::/32", "144352"}, + {"2804:4f8:8400::/34", "28263"}, + {"2804:64e8::/32", "269457"}, + {"2a0a:e5c0:12::/48", "213081"}, + {"2001:dd9::/48", "24302"}, + {"2401:d800:7a20::/41", "7552"}, + {"240e:3bf:f700::/36", "4134"}, + {"2a00:1200::/32", "33828"}, + {"2001:559:1f1::/48", "7015"}, + {"2409:8061:1900::/34", "9808"}, + {"2600:1417:57::/44", "20940"}, + {"2804:7310::/32", "270893"}, + {"2a0a:f500::/32", "6883"}, + {"2800:5f0:878::/35", "22724"}, + {"2804:45e4:7d10::/32", "262567"}, + {"2a07:68c0::/30", "32338"}, + {"2409:8b28::/32", "56041"}, + {"240a:aed6::/32", "146448"}, + {"2800:160:1e5d::/42", "14259"}, + {"2803:3a40::/32", "263826"}, + {"2a0a:51c0::/30", "48314"}, + {"2a0a:d480::/29", "206549"}, + {"2a0c:f140::/29", "204790"}, + {"2001:df4:2900::/48", "56155"}, + {"2001:fd8:220b::/43", "4775"}, + {"2804:38f0::/32", "266513"}, + {"2402:800:518d::/43", "7552"}, + {"240a:a464::/32", "143774"}, + {"2804:5724::/32", "268047"}, + {"2a01:cd01:2f2a::/47", "28708"}, + {"2001:559:83f0::/48", "7922"}, + {"2400:cd00:1045::/32", "38794"}, + {"240e:438:6020::/43", "140647"}, + {"2806:2f0:72c3::/42", "17072"}, + {"2a05:2c0::/29", "62178"}, + {"2a09:8b40::/29", "197690"}, + {"2a0a:f280:203::/48", "211157"}, + {"2404:e100::/47", "55685"}, + {"2804:14d:8088::/43", "28573"}, + {"2804:2870:1::/46", "52863"}, + {"2001:559:67::/48", "7015"}, + {"240a:a04b::/32", "142725"}, + {"2804:d08::/32", "262311"}, + {"2a01:53c0:ffff:1::/48", "54994"}, + {"2a0a:4640:a::/43", "206177"}, + {"2a0c:b641:6e2::/47", "213201"}, + {"2001:67c:1888::/48", "203426"}, + {"2a01:148::/29", "34245"}, + {"2606:2e00:800e::/43", "36351"}, + {"2804:7354::/32", "270908"}, + {"2a09:9b40::/48", "209562"}, + {"2a0f:5fc0:dead::/48", "39673"}, + {"2001:559:42f::/48", "7015"}, + {"2001:448a:6090::/41", "7713"}, + {"2402:ee40:3::/42", "134033"}, + {"2408:8956:6700::/40", "17816"}, + {"2409:8062:3003::/40", "9808"}, + {"2409:8907:8520::/38", "24547"}, + {"2804:1040:a240::/35", "263626"}, + {"2804:6300::/32", "262898"}, + {"2804:6aa4::/32", "270350"}, + {"2a00:14d8::/29", "8542"}, + {"2a00:e100::/32", "196819"}, + {"2a02:26f7:4f::/48", "20940"}, + {"2a02:ee80:422d::/48", "3573"}, + {"2a06:6e40::/29", "204120"}, + {"2a0f:9400:7b00::/43", "210872"}, + {"2400:cb00:4::/48", "13335"}, + {"2406:e1c0:401::/39", "141459"}, + {"2408:8459:c430::/41", "17622"}, + {"2409:8a55:7a00::/32", "9808"}, + {"2a03:69c0::/48", "60601"}, + {"2a0e:b107:bf6::/48", "140938"}, + {"2a09:bac0:120::/47", "13335"}, + {"2001:df5:2380::/48", "138754"}, + {"2409:8754:f700::/28", "56040"}, + {"2600:1419:5c00::/48", "4230"}, + {"2606:6680:8::/48", "19844"}, + {"2606:f000::/32", "13917"}, + {"2804:214:4016::/47", "26615"}, + {"2001:fb0:109f:8010::/64", "36040"}, + {"2406:2e00::/32", "17648"}, + {"2408:8256:2f6d::/48", "17816"}, + {"2408:8656:32fe::/47", "17623"}, + {"2803:6900:574::/48", "52423"}, + {"2a01:8840:31::/48", "207266"}, + {"2a02:26f7:27::/48", "20940"}, + {"2a02:26f7:d650::/48", "36183"}, + {"2001:1928::/32", "30528"}, + {"2408:8456:1c00::/42", "17622"}, + {"2a12:3540::/29", "60135"}, + {"2001:559:30c::/48", "7922"}, + {"2406:8680::/32", "45753"}, + {"2804:149c::/32", "262643"}, + {"2001:df3:5880::/48", "136704"}, + {"2409:8914:8200::/39", "56044"}, + {"2a02:26f7:e6cd::/42", "20940"}, + {"2600:6c7f:9052::/48", "20115"}, + {"2607:f4e8:10::/46", "22822"}, + {"2a01:280:398::/48", "48942"}, + {"2a03:3f00::/47", "21245"}, + {"2a0b:7ec0:7702::/32", "206728"}, + {"2804:1f2e::/32", "10715"}, + {"2001:559:83dc::/48", "33652"}, + {"2001:4d00::/32", "8226"}, + {"2405:800:a000::/35", "4817"}, + {"2409:8d54::/28", "9808"}, + {"2804:20ec::/32", "264521"}, + {"2806:370:4100::/44", "28403"}, + {"2408:8756:3af3::/33", "17816"}, + {"240e:982:7100::/38", "139201"}, + {"2600:6c20:a0e::/47", "20115"}, + {"2620:11b:e080::/44", "3549"}, + {"2801:1fc:22::/48", "27951"}, + {"2400:1420:1000::/36", "147305"}, + {"2402:800:380f::/43", "7552"}, + {"2a00:1140::/46", "44806"}, + {"240a:add1::/32", "146187"}, + {"2602:fdb1::/36", "54638"}, + {"2604:11c0:600::/40", "395822"}, + {"2806:20d:3100::/38", "32098"}, + {"240a:a788::/32", "144578"}, + {"240a:abc0::/32", "145658"}, + {"2600:140b:8c00::/48", "31109"}, + {"2a00:1560::/45", "29684"}, + {"2a02:2698:a100::/38", "9049"}, + {"2001:559:741::/48", "7016"}, + {"2a01:ce8c:d000::/31", "51964"}, + {"2a02:26f7:c34d::/46", "20940"}, + {"2a02:26f7:fac1::/46", "20940"}, + {"2a05:7ac0::/29", "21263"}, + {"240a:a818::/32", "144722"}, + {"2602:fc97:30::/44", "399544"}, + {"2804:38ac::/32", "266493"}, + {"2804:43fc::/32", "267614"}, + {"2806:2f0:9541::/46", "17072"}, + {"2a00:1678:da7a::/48", "49453"}, + {"2401:cf80:6044::/48", "198949"}, + {"2800:4b0:8011::/40", "12252"}, + {"2803:c080::/32", "27927"}, + {"2a03:5540::/32", "61343"}, + {"2001:1248:97f2::/44", "11172"}, + {"2404:3d00:4064::/40", "3573"}, + {"240a:a177::/32", "143025"}, + {"2605:a900:1005::/44", "46887"}, + {"2607:4000:300::/40", "14221"}, + {"240e:d:a800::/37", "136192"}, + {"2620:118:5000::/44", "4901"}, + {"2804:62f0:f102::/36", "269329"}, + {"2804:6d00::/32", "270506"}, + {"2408:8220::/31", "4837"}, + {"2408:8459:cf50::/35", "17816"}, + {"2600:140b:c801::/38", "20940"}, + {"2602:feda:3ab::/48", "141706"}, + {"2801:1f:c800::/48", "19429"}, + {"2804:920::/33", "263053"}, + {"2404:f801::/32", "3598"}, + {"2800:160:1e05::/46", "14259"}, + {"2a06:aa87:ffff::/48", "49238"}, + {"2001:559:876e::/48", "33652"}, + {"240a:ae12::/32", "146252"}, + {"2602:fc09:de::/42", "13780"}, + {"2408:8957:f4c0::/38", "17816"}, + {"2001:454e:aab1::/33", "9924"}, + {"2600:1007:b000::/41", "6167"}, + {"2804:1b2:d104::/38", "18881"}, + {"2a02:ee80:4136::/44", "3573"}, + {"2a0f:f100::/29", "60776"}, + {"2001:1900:2352::/48", "3356"}, + {"2804:14d:5493::/45", "28573"}, + {"2a02:26f7:d7c4::/48", "36183"}, + {"2001:250:80b::/48", "24348"}, + {"2402:7d80:242::/33", "63582"}, + {"2405:e280:2180::/48", "55769"}, + {"240a:a70e::/32", "144456"}, + {"240a:af27::/32", "146529"}, + {"2a00:18e0:2::/48", "196763"}, + {"2a0c:9a40:8130::/46", "209833"}, + {"2a0e:46c4:2920::/48", "138435"}, + {"2a0e:fd45:d40::/42", "44103"}, + {"2a11:4701:1101::/29", "28680"}, + {"2001:559:c501::/48", "20214"}, + {"2404:8d03::/29", "10089"}, + {"2001:1ae0::/32", "8262"}, + {"2803:d700::/34", "61461"}, + {"2001:df6:ac00::/48", "58404"}, + {"2a03:83a0:1::/48", "201528"}, + {"2a04:4e40:2e10::/44", "54113"}, + {"2a0b:14c0:3::/48", "396535"}, + {"2a0f:30c0::/29", "37637"}, + {"2001:559:a2::/48", "33657"}, + {"2001:1248:a41b::/45", "11172"}, + {"240e:438:2240::/37", "4134"}, + {"2607:f340::/32", "46231"}, + {"2803:e8c0::/32", "266776"}, + {"2804:747c::/32", "270984"}, + {"2804:7a34::/32", "271355"}, + {"2a00:9900::/29", "31252"}, + {"2800:4b0:4420::/39", "12252"}, + {"2a02:26f7:eec5::/46", "20940"}, + {"2a0f:8a80::/29", "62009"}, + {"2001:559:8066::/48", "7016"}, + {"2001:579:2439::/46", "22773"}, + {"2001:fb0:10b6::/32", "7470"}, + {"2804:5c4::/32", "262540"}, + {"2a03:d400:124::/32", "198913"}, + {"2a04:4e40:2e00::/48", "54113"}, + {"240a:a0b4::/32", "142830"}, + {"240a:a339::/32", "143475"}, + {"240a:aeb1::/32", "146411"}, + {"2600:1408:c401::/38", "20940"}, + {"2600:1416:e001::/31", "20940"}, + {"2804:27b0::/32", "263917"}, + {"2a03:b8c0:17::/44", "137922"}, + {"2a11:4d40::/48", "42652"}, + {"2001:559:195::/48", "33666"}, + {"2800:160:11a2::/47", "14259"}, + {"2804:7f2c::/32", "271671"}, + {"2a02:247a::/32", "51862"}, + {"240a:a1ad::/32", "143079"}, + {"2001:559:c47b::/48", "7922"}, + {"2400:4ec0:8a01::/37", "64300"}, + {"2403:f000:11::/46", "38220"}, + {"2a00:9640:6a::/32", "57710"}, + {"2001:4530::/46", "9433"}, + {"2400:ac40:cd0::/39", "136255"}, + {"2401:4900:3dc0::/42", "45609"}, + {"2600:1407:1e::/47", "35994"}, + {"2604:ca00:8000::/35", "36492"}, + {"2620:104:2041::/48", "16509"}, + {"2804:5f18::/32", "269076"}, + {"2a01:c50f:3a00::/37", "12479"}, + {"2a02:26f7:bb84::/47", "36183"}, + {"2a04:4e40:ccf0::/48", "54113"}, + {"240a:adbc::/32", "146166"}, + {"2804:391c:f::/43", "262287"}, + {"240a:ac04::/32", "145726"}, + {"2804:3838:3::/45", "53170"}, + {"2a02:26f7:f844::/48", "36183"}, + {"2001:16a2:4700::/36", "39386"}, + {"2600:1004:b1d0::/42", "6167"}, + {"2801:1c4::/48", "27951"}, + {"2a00:97a0::/32", "60651"}, + {"2001:559:316::/48", "7922"}, + {"2001:559:c221::/48", "33657"}, + {"2607:8400::/32", "3582"}, + {"2804:40f8::/32", "265995"}, + {"2a02:26f0:bb::/45", "34164"}, + {"2a02:4840:200::/47", "60567"}, + {"2001:559:792::/48", "7922"}, + {"2001:41d0::/32", "16276"}, + {"2400:ca02:f08a::/41", "23688"}, + {"240a:a945::/32", "145023"}, + {"240a:ae4e::/32", "146312"}, + {"2620:1d5:620::/41", "14773"}, + {"2400:4fc0:1::/45", "134146"}, + {"2409:802f::/34", "56041"}, + {"2a02:26f7:cc91::/42", "20940"}, + {"2a04:4e40:6630::/41", "54113"}, + {"2a0c:c080::/29", "57866"}, + {"2a0d:3842:1100::/48", "57629"}, + {"2001:4490:d0c0::/46", "9829"}, + {"2401:c680:f::/35", "133854"}, + {"2a00:dd0::/32", "47869"}, + {"2a03:8180:1800::/39", "36351"}, + {"2001:559:876b::/45", "7016"}, + {"2001:49d0:140::/42", "20177"}, + {"2402:e280:2117::/44", "134674"}, + {"240a:a8d5::/32", "144911"}, + {"2804:1494::/32", "263338"}, + {"2a00:1a28:1158::/32", "42708"}, + {"2a07:3502:1160::/48", "20559"}, + {"2a0c:500::/30", "205103"}, + {"2405:2200::/32", "55853"}, + {"2804:7f74:4::/32", "271689"}, + {"240a:aa0c::/32", "145222"}, + {"2600:1008:b000::/42", "6167"}, + {"2607:fcd0:aac0::/35", "8100"}, + {"2620:131:f000::/40", "10255"}, + {"2804:82fc::/32", "272169"}, + {"2c0f:fec8::/44", "37197"}, + {"2001:4479:a900::/38", "7545"}, + {"2409:8e14:4000::/34", "56044"}, + {"2800:160:1321::/44", "14259"}, + {"2001:559:33f::/48", "33652"}, + {"2405:1c0:6131::/45", "55303"}, + {"2408:8957:efc0::/35", "17622"}, + {"2803:a3e0::/32", "270068"}, + {"2804:5c14::/32", "268886"}, + {"2a0b:b86:8::/45", "3280"}, + {"2408:8459:4630::/41", "17622"}, + {"240a:ae88::/32", "146370"}, + {"2606:23c0::/32", "399228"}, + {"2607:f2d8:401c::/35", "18450"}, + {"2a01:8340:200::/32", "59410"}, + {"2a02:2ae0::/32", "702"}, + {"2401:4900:2080::/45", "45609"}, + {"2620:19:e000::/44", "19432"}, + {"2a06:5a80::/29", "12488"}, + {"2a0e:a400::/29", "209042"}, + {"2409:8750:d00::/38", "56047"}, + {"2409:8c54:1810::/42", "56040"}, + {"2804:5414::/32", "268627"}, + {"2804:7874::/32", "271243"}, + {"2a05:6200:75::/32", "201630"}, + {"240a:a06b::/32", "142757"}, + {"240e:983:1e03::/45", "58543"}, + {"2604:ae80:a100::/40", "11904"}, + {"2803:9600::/32", "52391"}, + {"2a0c:5e00::/32", "205053"}, + {"2604:d600:1291::/44", "32098"}, + {"2620:103:c00d::/48", "14203"}, + {"2a01:c50f:cc00::/35", "12479"}, + {"2a02:26f7:2a::/48", "36183"}, + {"2a06:2280::/29", "200582"}, + {"2001:308::/32", "7668"}, + {"2001:559:c18d::/48", "33651"}, + {"2605:8000:8901::/33", "4261"}, + {"2804:802c:203::/45", "271734"}, + {"2a02:26f7:d209::/46", "20940"}, + {"2a03:a980::/32", "16281"}, + {"2001:559:54f::/48", "33491"}, + {"2001:df0:7ac0::/48", "149388"}, + {"2800:390::/32", "25620"}, + {"2a06:9780::/29", "13199"}, + {"2a0d:e4c0::/32", "208861"}, + {"2402:800:92c5::/42", "7552"}, + {"2607:fb10::/43", "2906"}, + {"2804:5468::/32", "268648"}, + {"2804:6628::/32", "269538"}, + {"2a00:5647::/32", "34182"}, + {"2a00:98c0::/32", "29287"}, + {"2a0e:46c6:160::/44", "206161"}, + {"2001:df2:d800::/48", "131895"}, + {"2804:2e1c:e781::/35", "265324"}, + {"2a02:e640::/29", "199571"}, + {"2a07:291b::/32", "211452"}, + {"2001:559:25::/48", "7922"}, + {"2602:feda:c50::/48", "212425"}, + {"2804:3a94::/32", "266097"}, + {"2a03:a660::/32", "203441"}, + {"2a07:2580::/29", "203223"}, + {"2804:8:4002::/31", "14840"}, + {"2a00:ce8::/32", "20914"}, + {"2a01:9ec0::/32", "201785"}, + {"2a02:c804::/32", "24843"}, + {"2600:1901:ff90::/44", "15169"}, + {"2606:b400:880c::/48", "7160"}, + {"2806:2f0:4623::/41", "17072"}, + {"2a02:5cc0::/32", "59689"}, + {"2a04:4e40:8800::/48", "54113"}, + {"2402:800:5be0::/44", "7552"}, + {"2600:1f01:48a0::/47", "16509"}, + {"2804:7b50::/32", "271424"}, + {"2a01:111::/34", "8075"}, + {"2a03:7380:5840::/42", "13188"}, + {"2c0f:f6e8::/32", "37315"}, + {"2406:ae00:101::/32", "55564"}, + {"2606:f900:9901::/37", "812"}, + {"2001:559:8623::/45", "7922"}, + {"2604:e180:6::/40", "55002"}, + {"2801:80:1340::/48", "264029"}, + {"2804:577c::/32", "268068"}, + {"2001:252:ff00::/40", "4538"}, + {"2001:678:d18::/48", "213343"}, + {"2001:67c:2074::/48", "57763"}, + {"2001:40f8::/32", "15798"}, + {"240e:108:47::/48", "131325"}, + {"2800:160:1e79::/40", "14259"}, + {"2804:1638:facf::/37", "263276"}, + {"2a00:8240::/29", "61029"}, + {"2001:16d8:bc00::/33", "16150"}, + {"240e:a52:5c00::/34", "134419"}, + {"2600:1406:200::/48", "35994"}, + {"2604:f1c0::/32", "27580"}, + {"2c0f:fe08::/39", "36914"}, + {"2401:d800:df90::/42", "7552"}, + {"2406:840:c00::/48", "139317"}, + {"2407:eec0::/32", "141556"}, + {"2409:8a3c::/35", "24444"}, + {"2804:2e8:24::/32", "262847"}, + {"2a02:26f7:f0c4::/48", "36183"}, + {"2400:adce:5000::/40", "9541"}, + {"2402:800:5e80::/42", "7552"}, + {"2402:e380:302::/48", "133846"}, + {"2409:8c85:2022::/36", "9808"}, + {"2602:fbd9::/48", "20473"}, + {"2620:13a:1000::/40", "40457"}, + {"2401:7400:4801::/34", "4773"}, + {"2409:40f0:1000::/32", "55836"}, + {"2a0a:59c7:1011::/36", "204724"}, + {"2001:67c:5c::/48", "35627"}, + {"2001:44b8:30db::/45", "4739"}, + {"240a:ad1c::/32", "146006"}, + {"2620:11a:a012::/44", "43515"}, + {"2804:14d:ae00::/40", "28573"}, + {"2a02:26f7:b998::/48", "36183"}, + {"2c0f:f208::/32", "328471"}, + {"2001:559:97::/44", "7922"}, + {"240a:ab97::/32", "145617"}, + {"240a:af86::/32", "146624"}, + {"2806:310:1::/44", "16960"}, + {"2a00:5880:1400::/44", "209090"}, + {"2001:1248:56d8::/47", "11172"}, + {"2001:4408:5251::/37", "4758"}, + {"240a:a71d::/32", "144471"}, + {"2a01:830::/31", "3329"}, + {"2a01:c50f:4300::/40", "12479"}, + {"2408:8956:c940::/40", "17816"}, + {"240a:ab29::/32", "145507"}, + {"2602:103:9000::/34", "20115"}, + {"2804:d0c::/32", "53112"}, + {"2a0a:3a40::/32", "8308"}, + {"2a12:3800::/32", "210512"}, + {"2001:559:367::/48", "33657"}, + {"2001:df7:5380::/47", "3970"}, + {"2602:feda:af2::/48", "138038"}, + {"2a02:568::/32", "8763"}, + {"2a01:8840:f6::/48", "12041"}, + {"2607:fad8:d::/40", "22652"}, + {"2806:250:500::/40", "28509"}, + {"2001:503:83eb::/48", "396574"}, + {"2001:57a:1204::/47", "22773"}, + {"2a00:b402::/31", "12857"}, + {"2a01:8840:15::/48", "207266"}, + {"2a0f:ad00::/31", "208202"}, + {"2001:559:3a3::/48", "7015"}, + {"2401:d800:91d0::/42", "7552"}, + {"2602:fbda:400::/48", "146961"}, + {"2804:7a30::/36", "271353"}, + {"2001:559:24::/48", "7016"}, + {"2402:800:939b::/42", "7552"}, + {"2800:160:1224::/43", "14259"}, + {"2804:3014::/32", "264929"}, + {"2a04:4e40:7e00::/48", "54113"}, + {"240a:a7b1::/32", "144619"}, + {"240a:aff0::/32", "146730"}, + {"2600:6c10:f09e::/38", "20115"}, + {"2620:129::/44", "6169"}, + {"2804:e54::/32", "262807"}, + {"2806:230:301b::/48", "11888"}, + {"2806:2f0:41c1::/46", "17072"}, + {"2a00:7700::/32", "31200"}, + {"2a02:5480::/32", "197013"}, + {"240e:44d:980::/41", "4134"}, + {"2a02:26f7:b74c::/48", "36183"}, + {"2a02:2e02:8410::/41", "12479"}, + {"2a0b:e140::/29", "205241"}, + {"2804:444c::/32", "267623"}, + {"2a02:2010:2510::/42", "20978"}, + {"2a02:26f7:e5c4::/48", "36183"}, + {"2a07:91c0::/29", "47304"}, + {"2001:559:c172::/48", "33651"}, + {"2804:7cc4::/32", "271517"}, + {"2a01:c50f:3e80::/39", "12479"}, + {"2402:8100:2690::/46", "45271"}, + {"2a00:9320:fffd::/46", "48559"}, + {"2a02:400::/32", "47264"}, + {"2a05:dfc7:26::/44", "61138"}, + {"2001:550:907::/48", "32489"}, + {"2001:559:878c::/48", "33661"}, + {"2001:668:1fc::/46", "16260"}, + {"2402:e280:2172::/44", "134674"}, + {"2408:8459:ef30::/41", "17622"}, + {"240a:ae47::/32", "146305"}, + {"240e:108:2c::/48", "4816"}, + {"2801:114:4::/48", "22822"}, + {"2a03:a9c0::/29", "41709"}, + {"2001:1248:8707::/44", "11172"}, + {"2001:12e0:8000::/36", "10429"}, + {"2400:3d80::/32", "56304"}, + {"2402:e280:2242::/47", "134674"}, + {"2803:2610::/32", "271942"}, + {"2a01:2e0::/31", "8374"}, + {"2409:8a50:b00::/37", "56047"}, + {"2804:1bd8:5000::/32", "28224"}, + {"2a00:10b8::/32", "47116"}, + {"2a09:17c0::/29", "60781"}, + {"2a0d:8d07::/39", "207616"}, + {"2402:e280:1000::/47", "134674"}, + {"240a:abed::/32", "145703"}, + {"240e:44d:b00::/41", "140345"}, + {"2605:9180::/33", "53597"}, + {"2800:300:65e0::/36", "27986"}, + {"2a00:5000::/29", "51896"}, + {"2a0a:2f00:1::/46", "49683"}, + {"2001:bf7:7a0::/36", "44194"}, + {"240e:37d:1a00::/34", "140330"}, + {"2804:6310:2000::/33", "269336"}, + {"2603:c010::/36", "31898"}, + {"2a00:d440::/29", "58046"}, + {"2a09:bac0:251::/48", "13335"}, + {"2a0a:df80:25::/48", "42346"}, + {"2001:b50::/32", "16245"}, + {"2001:1a11:85::/46", "8781"}, + {"240e:37c:2600::/32", "4134"}, + {"2806:21a:a000::/46", "262913"}, + {"2a00:1238::/46", "35236"}, + {"2a02:26f7:c201::/46", "20940"}, + {"2404:0:5005::/48", "24154"}, + {"2804:61c::/32", "28166"}, + {"2a01:c50f:bcc0::/38", "12479"}, + {"2001:559:10c::/48", "7015"}, + {"2001:da8:d833::/48", "23910"}, + {"2804:1d04:5000::/36", "61689"}, + {"2402:8c0:1::/44", "137083"}, + {"2408:8456:2e00::/41", "17623"}, + {"240e:3b3:dc00::/34", "4134"}, + {"2800:6e0::/32", "52320"}, + {"2001:250:140c::/48", "23910"}, + {"2001:559:5fc::/48", "7922"}, + {"2409:8914:c000::/39", "56044"}, + {"2804:6fc:b100::/36", "28158"}, + {"2804:15a4:aab0::/33", "263400"}, + {"2804:46dc::/32", "267016"}, + {"2a05:79c0:1::/46", "27381"}, + {"2001:559:82b0::/48", "33287"}, + {"2001:df7:fa80::/48", "138277"}, + {"2803:7420::/32", "265826"}, + {"2804:ad8::/33", "262494"}, + {"2a00:1169::/39", "21499"}, + {"2a02:c00::/32", "12316"}, + {"2a0c:5247:d000::/36", "208861"}, + {"2001:678:95c::/48", "34093"}, + {"2602:fc23:152::/45", "8095"}, + {"2801:1c8:500::/48", "18747"}, + {"2804:384c::/32", "266468"}, + {"2804:6734::/32", "269612"}, + {"2a02:828::/48", "44285"}, + {"2a02:26f7:f6cc::/48", "36183"}, + {"2001:559:8494::/48", "33650"}, + {"2408:8957:cb40::/40", "17816"}, + {"240a:a3cd::/32", "143623"}, + {"2800:484:5c00::/39", "10620"}, + {"2804:4918:8100::/38", "267164"}, + {"2a07:8f40::/29", "57831"}, + {"2001:fd8:260::/48", "132199"}, + {"2600:804:201::/37", "701"}, + {"2800:670::/32", "262589"}, + {"2001:559:c43e::/48", "33657"}, + {"2001:678:c6c::/48", "212123"}, + {"2600:e004::/32", "22995"}, + {"2a03:d9c0:3000::/48", "3214"}, + {"2605:dd40:8205::/46", "398549"}, + {"2a03:5840:101::/44", "35661"}, + {"2a05:d01e::/36", "16509"}, + {"2001:67c:1a0::/48", "5603"}, + {"2403:8600:ea88::/46", "131317"}, + {"2604:5e80::/43", "8"}, + {"2806:2f0:3203::/42", "17072"}, + {"2001:559:c322::/48", "7015"}, + {"2404:a140:11::/48", "138915"}, + {"2405:a540::/35", "38156"}, + {"2604:17c0::/40", "9009"}, + {"2606:4700:99e0::/44", "13335"}, + {"2a00:12d8:700e::/29", "12586"}, + {"240e:1c7::/22", "4134"}, + {"2a02:26f7:b747::/48", "20940"}, + {"2001:559:81fd::/48", "33491"}, + {"2001:620::/29", "559"}, + {"2402:79c0:f0f9::/48", "11840"}, + {"2403:9c00::/32", "18068"}, + {"2602:fe69:a00::/40", "36369"}, + {"2800:484:3000::/40", "14080"}, + {"2001:df6:6900::/48", "18229"}, + {"240e:44:8000::/33", "4134"}, + {"2620:11d:500c::/47", "393732"}, + {"2001:579:1164::/36", "22773"}, + {"2605:a401:8c46::/42", "33363"}, + {"2a02:9b0:1e::/42", "64105"}, + {"2c0f:e9a8::/32", "328732"}, + {"2001:1998:890::/44", "8052"}, + {"2401:2400::/44", "38496"}, + {"2402:fd40::/48", "137889"}, + {"2408:8459:ae30::/41", "17622"}, + {"240a:a197::/32", "143057"}, + {"2600:5801::/32", "7843"}, + {"2607:f810::/38", "6192"}, + {"2001:559:c0ed::/46", "33652"}, + {"2403:ad80:4c00::/38", "134835"}, + {"2406:1400:c100::/48", "24342"}, + {"2001:4878:a007::/44", "12222"}, + {"2804:204:258::/46", "28186"}, + {"2804:1b64::/32", "61725"}, + {"2a02:2228::/32", "51378"}, + {"2001:df3:a280::/48", "16509"}, + {"2001:1b40:3333::/48", "3356"}, + {"240a:a0bf::/32", "142841"}, + {"2604:d600:1327::/44", "32098"}, + {"2806:21a::/48", "32098"}, + {"2001:44b8:206d::/35", "4739"}, + {"2804:14d:ba60::/40", "28573"}, + {"2a02:ed04:3410::/33", "50304"}, + {"2406:840:e770::/46", "136591"}, + {"2801:c4:12::/48", "28477"}, + {"2804:3e70:f008::/36", "266596"}, + {"2600:6c38:224::/44", "20115"}, + {"2604:3d00:d500::/36", "6327"}, + {"2800:68:19::/42", "61468"}, + {"2a02:56c0::/32", "5500"}, + {"2a0a:5dc0::/29", "51395"}, + {"240a:a200::/32", "143162"}, + {"240a:a326::/32", "143456"}, + {"2600:370f:5320::/47", "32261"}, + {"2606:2800:5a80::/46", "15133"}, + {"2a02::/32", "12684"}, + {"2405:9800:b820::/41", "133481"}, + {"2408:8456:8a40::/39", "17816"}, + {"2409:802e:2904::/47", "9808"}, + {"2801:80:3e50::/48", "271444"}, + {"2a00:15c0::/32", "31543"}, + {"2a02:26f7:f70d::/46", "20940"}, + {"2a02:4140:5::/32", "43957"}, + {"2a05:7640:2100::/41", "174"}, + {"2a0f:5c40::/44", "48981"}, + {"2001:559:15c::/48", "33668"}, + {"2404:e640::/32", "136697"}, + {"2a03:7420::/48", "8751"}, + {"2001:67c:268c::/48", "199902"}, + {"2001:1a11:73::/48", "8781"}, + {"2600:1407:2401::/36", "20940"}, + {"2604:880:5e::/48", "29802"}, + {"2804:3f10:5000:900::/34", "262566"}, + {"2404:bf40:a5c0::/47", "7545"}, + {"2803:3c0::/32", "265728"}, + {"2a02:26f7:c7c8::/47", "36183"}, + {"2001:44b8:4034::/47", "7545"}, + {"2607:7300::/32", "40438"}, + {"2804:658c:10::/46", "269499"}, + {"2a0e:4ac0::/29", "207902"}, + {"2001:559:13f::/48", "33655"}, + {"2001:da8:702c::/46", "24363"}, + {"240a:af08::/32", "146498"}, + {"2600:1419:14::/47", "20940"}, + {"2803:fe60::/32", "262186"}, + {"2804:3868:400::/38", "266475"}, + {"2804:7984::/32", "271310"}, + {"2a04:5d00:80::/48", "206754"}, + {"2001:4408:7700::/36", "4758"}, + {"2401:d800:2860::/40", "7552"}, + {"2404:2280:19d::/48", "24429"}, + {"2620:0:1607::/48", "6984"}, + {"2a09:1b80::/29", "203959"}, + {"2001:559:836a::/48", "33652"}, + {"2403:580:2100::/32", "134715"}, + {"240a:a611::/32", "144203"}, + {"2001:559:c4ae::/48", "33287"}, + {"2001:dc7:dd05::/34", "24151"}, + {"2604:5400:c000::/35", "11776"}, + {"2804:5868::/32", "268127"}, + {"2408:840d:a900::/42", "17621"}, + {"2604:10::/32", "19112"}, + {"2804:48d0::/32", "267146"}, + {"2a02:13c0::/32", "20792"}, + {"2a0b:4780::/29", "60129"}, + {"2409:8051:100::/37", "9808"}, + {"2607:f8f0:1200::/40", "271"}, + {"2620:52::/48", "22753"}, + {"2a00:f900::/32", "43925"}, + {"2001:559:c00e::/47", "33651"}, + {"2001:44b8:605b::/48", "4739"}, + {"2607:fe90:8000::/47", "22169"}, + {"2a02:26f7:bed0::/48", "36183"}, + {"2c0f:fe60::/32", "37619"}, + {"2001:559:85ba::/48", "33659"}, + {"2001:559:c0a0::/48", "33651"}, + {"2804:3b70::/32", "266149"}, + {"2001:4830:200::/40", "25623"}, + {"2620:11a:a000::/44", "43515"}, + {"2804:7ffc::/32", "271722"}, + {"2a01:7b0::/32", "34752"}, + {"2a02:26f7:f9c0::/48", "36183"}, + {"2a0f:da40::/29", "60781"}, + {"2408:897e::/32", "4837"}, + {"2a02:1628::/32", "12360"}, + {"2001:559:8045::/48", "33657"}, + {"2001:678:f98::/48", "211069"}, + {"2401:b400:16::/44", "58811"}, + {"2405:4803:2e4::/44", "18403"}, + {"2a02:5960::/32", "201986"}, + {"2408:8459:d040::/42", "134543"}, + {"2804:46a0::/32", "52562"}, + {"2a09:a400::/29", "212660"}, + {"2804:52f0::/32", "268551"}, + {"2408:8456:ef40::/40", "17816"}, + {"2602:fed2:7308::/48", "23470"}, + {"2a01:8840:6a::/45", "12041"}, + {"2a02:26f7:cc88::/48", "36183"}, + {"2a03:51a0::/32", "39046"}, + {"2a07:5c80::/29", "207758"}, + {"2a09:71c0::/29", "44486"}, + {"2a10:4040::/29", "213300"}, + {"2407:f2c0::/32", "139688"}, + {"240a:a4d1::/32", "143883"}, + {"2a07:ec80:230::/47", "44949"}, + {"2a0a:7000::/29", "58073"}, + {"2405:203:c07::/44", "55836"}, + {"2408:8957:9e00::/40", "17622"}, + {"2600:6c34:3d1::/48", "33588"}, + {"2804:14d:a200::/40", "28573"}, + {"2a0a:c0:ffff::/48", "43824"}, + {"2001:67c:64c::/48", "47846"}, + {"2001:42d0:bee0::/44", "33764"}, + {"2001:43f8:e00::/40", "715"}, + {"240a:aad3::/32", "145421"}, + {"2a02:1610::/32", "50986"}, + {"2a0c:4dc0:2::/29", "203959"}, + {"2a0f:2c40::/29", "60262"}, + {"2001:c38:9041::/44", "9931"}, + {"2600:1f01:4844::/47", "16509"}, + {"2606:f500::/34", "11352"}, + {"2620:133:2000::/40", "14074"}, + {"2804:a2c::/32", "263028"}, + {"2a02:10::/42", "24785"}, + {"2a09:c500::/29", "209842"}, + {"2401:4900:6190::/41", "45609"}, + {"240e:7:4000::/37", "134420"}, + {"2603:b0e0:bef0::/33", "11796"}, + {"2801:c4:30::/48", "2708"}, + {"2804:3290::/32", "265085"}, + {"2a07:e01::/32", "210083"}, + {"2403:d300::/34", "15932"}, + {"240a:aec9::/32", "146435"}, + {"2405:3000::/32", "3661"}, + {"2600:100f:9000::/44", "6167"}, + {"2401:d800:d6e0::/39", "7552"}, + {"240a:a368::/32", "143522"}, + {"240a:a172::/32", "143020"}, + {"240e:d6::/36", "140329"}, + {"2620:145:800::/38", "12257"}, + {"2804:5e48:ff30::/46", "269023"}, + {"2a02:26f7:d3c5::/46", "20940"}, + {"2a06:1280:2000::/32", "61138"}, + {"2001:559:c4c4::/47", "7015"}, + {"2409:8055:31::/46", "56040"}, + {"240e:44d:3d80::/41", "4134"}, + {"2602:ff6e::/43", "63202"}, + {"2a02:878:a::/48", "42632"}, + {"2804:204:210::/47", "28186"}, + {"2a12:2140::/29", "210045"}, + {"2001:fb1:190::/36", "17552"}, + {"240e:966:1800::/37", "133774"}, + {"2804:2484:8a00::/33", "28258"}, + {"2a01:7e8::/32", "42525"}, + {"2a0d:5087:1a2d::/32", "62240"}, + {"2605:15c0::/33", "19528"}, + {"2610:a1:1007::/48", "397220"}, + {"2a02:23b0::/32", "44141"}, + {"2a02:2e02:86b0::/41", "12479"}, + {"2001:da8:274::/47", "24349"}, + {"2806:20d:5b05::/40", "32098"}, + {"2a02:26f7:28::/48", "36183"}, + {"2a04:640::/29", "61160"}, + {"2a0c:c647:fd05::/38", "50489"}, + {"2401:7400:801:b::/61", "4773"}, + {"2402:9d80:100::/47", "131429"}, + {"2607:9080:705::/48", "62424"}, + {"2804:694:4c01::/40", "262596"}, + {"2a06:62c0:81::/44", "204138"}, + {"2a0b:5c80::/29", "204779"}, + {"2400:cb00:a720::/45", "13335"}, + {"2401:d800:8a0::/41", "7552"}, + {"2404:bf40:8440::/48", "7545"}, + {"2600:9000:220b::/43", "16509"}, + {"2804:2be0:7200::/32", "262503"}, + {"2a02:2e02:8560::/40", "12479"}, + {"2a04:1200::/29", "33951"}, + {"2a06:6a00::/29", "20493"}, + {"2a06:7b40::/29", "198024"}, + {"2001:da8:202::/48", "24350"}, + {"2001:da8:802a::/48", "23910"}, + {"240e:698:2800::/40", "133775"}, + {"2600:140b:d::/48", "17511"}, + {"2a02:28f8:2::/48", "31323"}, + {"2a03:9ea0::/32", "51815"}, + {"2a04:e8c0::/29", "44486"}, + {"2001:503:5419::/48", "7342"}, + {"2800:160:1e63::/44", "14259"}, + {"2804:2d28::/32", "265264"}, + {"2600:1004:b140::/42", "6167"}, + {"2801:9e::/32", "15256"}, + {"2804:5e48:ff20::/46", "269023"}, + {"2a00:1018::/37", "25394"}, + {"2a00:1858:1100::/32", "25454"}, + {"2a07:9c0::/29", "203328"}, + {"2001:df0:6980::/48", "135973"}, + {"2408:8456:4640::/36", "17816"}, + {"2804:43c:4000::/32", "262422"}, + {"2a01:5041:2004::/48", "202196"}, + {"2a02:26f0:a201::/39", "20940"}, + {"2402:2a80::/33", "46489"}, + {"2606:3c80:8e00::/34", "33582"}, + {"2804:2724:150::/32", "263879"}, + {"2804:4b48::/32", "267295"}, + {"2a02:26f7:b848::/48", "36183"}, + {"2a11:9d40::/29", "210646"}, + {"2409:8052:802::/40", "56047"}, + {"240e:438:b340::/43", "140647"}, + {"2607:f180:7100::/40", "45652"}, + {"2804:768:3880::/33", "52977"}, + {"2a04:8580:fff0::/47", "21030"}, + {"2001:559:c2fa::/47", "33287"}, + {"2409:8055:8::/48", "9808"}, + {"240c:cf81::/32", "138378"}, + {"2602:fdb8:1f0::/44", "394151"}, + {"2800:a4:2a00::/28", "6057"}, + {"2804:833c::/34", "272185"}, + {"2a02:2698:6000::/38", "57378"}, + {"2a07:9780::/29", "202705"}, + {"2a0b:da00::/29", "50113"}, + {"240e:978:3000::/40", "137702"}, + {"2602:fd50::/48", "62513"}, + {"2804:6600::/32", "269527"}, + {"2a02:26f7:b405::/46", "20940"}, + {"2a02:26f7:efc1::/46", "20940"}, + {"240a:a1e0::/32", "143130"}, + {"240a:a4d4::/32", "143886"}, + {"2a02:957::/48", "60217"}, + {"2a02:f28::/32", "20647"}, + {"2a02:26f7:c94c::/47", "36183"}, + {"2a02:26f7:f8c4::/48", "36183"}, + {"2a03:ab00::/32", "197046"}, + {"2804:3a4::/32", "262900"}, + {"2a02:88d:400f::/48", "47794"}, + {"2a02:26f7:f041::/46", "20940"}, + {"2a03:a60::/32", "59862"}, + {"2a0b:1901::/32", "57878"}, + {"2a0e:aa01:aa20::/35", "206499"}, + {"2001:598::/35", "21548"}, + {"2405:8a00:a049::/45", "55824"}, + {"240c:c283::/32", "24353"}, + {"240e:67c:c200::/39", "140329"}, + {"2a02:26f7:b8c1::/46", "20940"}, + {"2a0e:97c3:6d8::/48", "20473"}, + {"2a0a:acc1::/48", "3258"}, + {"2001:559:83a4::/48", "7922"}, + {"240e:7:5000::/37", "134420"}, + {"2605:bc0:1005::/48", "54201"}, + {"2a02:4e0:2400::/40", "16135"}, + {"2a02:2908::/29", "50010"}, + {"2001:559:762::/47", "7015"}, + {"2600:6c38:457::/44", "20115"}, + {"2800:870:1003::/32", "6762"}, + {"2a00:6960::/32", "60950"}, + {"240a:a79e::/32", "144600"}, + {"2a01:c50f:dec0::/34", "12479"}, + {"2a02:26f7:a5::/48", "20940"}, + {"2001:559:86b0::/48", "7922"}, + {"2001:67c:1830::/48", "3301"}, + {"2404:ef80::/48", "135944"}, + {"2408:8674::/28", "4837"}, + {"2804:537c::/32", "268587"}, + {"2a02:258::/32", "43097"}, + {"2a02:26f7:b602::/47", "20940"}, + {"240e:3b8:7800::/39", "4134"}, + {"2604:5500:9000::/38", "19165"}, + {"2605:3100:fffb::/45", "22906"}, + {"2804:14c:7d93::/41", "28573"}, + {"2a0a:1240::/35", "12440"}, + {"2804:79ac::/32", "271320"}, + {"2a02:26f7:e3c1::/46", "20940"}, + {"2a03:e40:47::/32", "202042"}, + {"2a04:f580:8010::/47", "4134"}, + {"2a0c:440::/32", "204419"}, + {"2a0d:5642:119::/48", "35487"}, + {"2a0e:6380::/29", "207902"}, + {"2401:d800:5c20::/41", "7552"}, + {"2402:800:3b71::/44", "7552"}, + {"2403:df40:113::/45", "14630"}, + {"240e:438:5a40::/37", "4134"}, + {"2a01:d0:29::/41", "29632"}, + {"2a02:26f7:dc4c::/48", "36183"}, + {"2a04:4e40:2a00::/47", "54113"}, + {"2a0e:b107:c30::/44", "140731"}, + {"2001:559:8038::/48", "33650"}, + {"2402:3a80:1e18::/45", "38266"}, + {"2405:e6c0::/32", "137532"}, + {"2407:c280:b100::/46", "211876"}, + {"240e:678:1000::/36", "4134"}, + {"2801:140:11::/48", "262249"}, + {"2a02:26f0:7401::/38", "20940"}, + {"2a0b::/29", "41453"}, + {"2408:8456:1f00::/42", "17622"}, + {"2804:56e0:8400::/33", "268029"}, + {"2a0d:65c0::/29", "208091"}, + {"2001:67c:2758::/48", "41618"}, + {"2001:df2:fe80::/48", "132906"}, + {"2405:1500:31::/41", "58717"}, + {"2408:8956:5300::/40", "17816"}, + {"240a:ab87::/32", "145601"}, + {"2804:1a30:8000::/39", "61844"}, + {"2a0f:70c0:100::/48", "207869"}, + {"2001:559:80de::/47", "7922"}, + {"2001:4868::/40", "701"}, + {"2400:9800:6016::/42", "24203"}, + {"2803:a110::/32", "271988"}, + {"2804:130::/32", "28264"}, + {"2804:1194:f000::/44", "263424"}, + {"2409:806b:1900::/34", "9808"}, + {"2606:2c0:2::/48", "14618"}, + {"2806:230:300e::/48", "265594"}, + {"2001:67c:23c4::/48", "21155"}, + {"2400:adc0:10::/45", "9541"}, + {"240e:45c:b500::/40", "140537"}, + {"2600:804:200::/48", "12234"}, + {"2804:14d:5200::/40", "28573"}, + {"2804:73e0:8040::/33", "270943"}, + {"2a11:af03::/32", "210625"}, + {"2401:d800:9e20::/41", "7552"}, + {"2405:4cc1:b00::/40", "55891"}, + {"2a00:e140::/32", "198161"}, + {"2a02:26f0:f400::/48", "34164"}, + {"2400:6280:133::/48", "132280"}, + {"2620:37:4000::/44", "36213"}, + {"2804:d40::/28", "7738"}, + {"2804:edc::/32", "263553"}, + {"2001:559:582::/48", "33287"}, + {"2001:559:82e3::/48", "7922"}, + {"2001:559:c311::/48", "33660"}, + {"2001:67c:1890::/48", "12552"}, + {"2001:c20:c812::/45", "3758"}, + {"2406:5900::/32", "3786"}, + {"2a00:c9c0::/32", "58002"}, + {"2a07:2dc0::/29", "57878"}, + {"2400:d400:1::/46", "45671"}, + {"2600:cc04:e000::/40", "62833"}, + {"2604:d600:c80::/47", "32098"}, + {"2605:a880::/48", "46261"}, + {"2a0b:4d07:201::/46", "44239"}, + {"2406:7400:70::/45", "24309"}, + {"2604:5200:1001::/48", "701"}, + {"2606:a300:f001::/36", "35847"}, + {"2620:171:2d::/46", "715"}, + {"2800:3c0:30a0::/39", "19863"}, + {"2001:559:c4a1::/48", "33650"}, + {"2001:67c:1640::/44", "43516"}, + {"2400:9380:9020::/47", "4809"}, + {"2408:8956:d8c0::/38", "17816"}, + {"2409:4073:1000::/34", "55836"}, + {"240e:109:8026::/48", "4134"}, + {"2606:5700::/32", "6580"}, + {"2001:67c:148::/48", "12991"}, + {"2001:c20:487e::/48", "9255"}, + {"2401:d800:bbe0::/37", "7552"}, + {"2402:7340:1::/46", "136557"}, + {"2408:8459:b830::/41", "17622"}, + {"2600:6c2e:110::/42", "20115"}, + {"2607:fdf0:5ee3::/45", "8008"}, + {"2804:4f78::/32", "268329"}, + {"2001:67c:20ac::/48", "20612"}, + {"2001:559:c374::/48", "7922"}, + {"2001:559:c3a7::/44", "7725"}, + {"2804:b:c002::/45", "14840"}, + {"2804:14d:1000::/42", "28573"}, + {"2806:2f0:8443::/43", "17072"}, + {"2408:8256:3976::/48", "17816"}, + {"240a:a156::/32", "142992"}, + {"240c:c0a9:1200::/40", "133512"}, + {"2602:fbda::/38", "38136"}, + {"2607:f8f0:610::/48", "393249"}, + {"2001:559:c23d::/48", "13367"}, + {"2406:54c0::/32", "140479"}, + {"2409:8924:f00::/35", "56046"}, + {"2800:640::/32", "262149"}, + {"2a02:c40::/46", "13000"}, + {"2a03:ec40::/29", "60800"}, + {"2a04:940::/47", "51407"}, + {"240a:aa36::/32", "145264"}, + {"240e:874:200::/40", "140638"}, + {"2804:485c:6a00::/32", "267116"}, + {"2a0e:97c0:6a0::/48", "206981"}, + {"240a:aa01::/32", "145211"}, + {"2606:2800:511a::/48", "14153"}, + {"2804:1bd0::/32", "61752"}, + {"240a:a3cc::/32", "143622"}, + {"2607:f5b1::/32", "27411"}, + {"2620:100:d000::/47", "33419"}, + {"2806:20d:1300::/37", "32098"}, + {"2001:559:255::/48", "7725"}, + {"2403:9800:b042::/44", "4648"}, + {"240a:a4f6::/32", "143920"}, + {"240e:264:a000::/36", "58772"}, + {"2607:f928:4002::/32", "22645"}, + {"2607:fdf0:5ee7::/44", "8008"}, + {"2620:119:50e1::/48", "14413"}, + {"2801:80:3e60::/48", "271467"}, + {"2804:52c0::/32", "268539"}, + {"2806:2a0:e00::/40", "28548"}, + {"2a01:8840:c::/48", "33280"}, + {"2a0c:1700:2::/47", "205112"}, + {"2a0c:b200::/29", "39782"}, + {"2a0e:b107:1960::/44", "210633"}, + {"2a0e:f780::/29", "208725"}, + {"2c0f:f5c0:483::/36", "29465"}, + {"2001:470:5f::/48", "198362"}, + {"240a:61:1e00::/48", "9605"}, + {"240a:ac45::/32", "145791"}, + {"2800:160:1248::/42", "14259"}, + {"2804:14c:8100::/40", "28573"}, + {"2804:7aac::/32", "271385"}, + {"2804:7ff4::/34", "271720"}, + {"2a09:1d80::/29", "62563"}, + {"2a0b:4d07:801::/48", "44239"}, + {"2401:4900:5810::/45", "45609"}, + {"2610:188::/32", "14511"}, + {"2620:0:cc3::/44", "36692"}, + {"2804:1ca4:8001::/41", "263010"}, + {"2a00:4400::/32", "8692"}, + {"2a03:5760::/46", "201900"}, + {"2001:4430:f::/48", "3786"}, + {"2804:6e6c::/32", "270596"}, + {"2806:230:6015::/48", "11888"}, + {"2a06:9800::/29", "6908"}, + {"2001:318::/32", "7522"}, + {"2001:67c:15a0::/48", "29208"}, + {"2404:bc0:4f00::/43", "137735"}, + {"2600:6c00:2::/47", "33588"}, + {"2600:6c38:855::/42", "20115"}, + {"2800:200:e2e1::/36", "12252"}, + {"2a01:8a60::/39", "60191"}, + {"2a02:26f7:eb00::/48", "36183"}, + {"2804:7ac4::/32", "271391"}, + {"2a02:88d:8110::/44", "48695"}, + {"2a02:26f7:e248::/48", "36183"}, + {"240a:a528::/32", "143970"}, + {"2001:418:1430:200::/44", "2914"}, + {"2604:d200::/32", "33470"}, + {"2a02:26f7:52::/48", "36183"}, + {"2a02:6680:f::/48", "16116"}, + {"2001:df1:e307::/48", "138603"}, + {"2804:2400::/32", "264195"}, + {"2804:37f0:8900::/35", "266445"}, + {"2001:44b8:604d::/48", "4739"}, + {"2404:ee80::/48", "63741"}, + {"2001:559:295::/48", "33651"}, + {"2401:c680:1400::/32", "133854"}, + {"2620:18:6000::/48", "396142"}, + {"2804:62bc:c0cb::/34", "269315"}, + {"2806:2f0:9841::/46", "17072"}, + {"2a01:6980::/32", "43291"}, + {"240a:a0da::/32", "142868"}, + {"2605:32c0:a003::/48", "16509"}, + {"2a05:f507:46::/42", "13443"}, + {"2a0b:f940:2af3::/35", "205373"}, + {"2001:978:4a00::/48", "51863"}, + {"2400:1a00:5::/32", "17501"}, + {"2401:d800:ff62::/40", "7552"}, + {"240a:a4e9::/32", "143907"}, + {"2602:80e:d000::/40", "45"}, + {"2803:5440:4053::/45", "264738"}, + {"2804:14c:de93::/41", "28573"}, + {"2804:1f00::/32", "11802"}, + {"2a0f:1c40::/29", "208229"}, + {"240a:ae61::/32", "146331"}, + {"2a0f:9d00::/29", "51711"}, + {"2804:b48::/32", "262732"}, + {"2a0c:8fc3::/40", "23470"}, + {"2001:510:203::/45", "376"}, + {"2620:11b:4002::/48", "19210"}, + {"2804:41f8:f304::/37", "267469"}, + {"2a00:f060::/32", "19399"}, + {"2a06:a006::/35", "61138"}, + {"2a07:2540::/29", "60991"}, + {"2a10:6e40::/32", "212635"}, + {"2c0f:f818::/32", "37090"}, + {"2404:4a00:6500::/64", "55423"}, + {"2606:2800:422b::/48", "14153"}, + {"2804:18:8f0::/44", "10429"}, + {"2804:fc0::/32", "263601"}, + {"2a02:2010:2120::/45", "20978"}, + {"2a0c:9a40:8089::/48", "202297"}, + {"2001:480:23::/48", "5058"}, + {"2409:8000:2c00::/35", "9808"}, + {"2a00:cd40::/32", "49113"}, + {"2001:420:4100::/37", "109"}, + {"2001:559:8460::/48", "33660"}, + {"2606:8e80:6020::/44", "32133"}, + {"2804:57c8::/32", "268086"}, + {"2a02:6c20::/46", "207167"}, + {"2a03:3320:387::/48", "209098"}, + {"2a07:59c3:45::/46", "203027"}, + {"2a11:cf40::/29", "60530"}, + {"2603:8075::/32", "20001"}, + {"2804:36d4::/32", "266375"}, + {"2804:3fa4::/32", "265904"}, + {"2a0a:ee80:8::/47", "43988"}, + {"2404:4e40:2::/32", "136429"}, + {"2801:80:1d20::/48", "265910"}, + {"2804:d28::/32", "52604"}, + {"2806:230:6020::/48", "265594"}, + {"2001:559:c2ce::/48", "33651"}, + {"2404:8000:aa::/45", "17451"}, + {"2408:8256:a68::/39", "17622"}, + {"2001:559:159::/48", "7015"}, + {"2600:1415:d001::/37", "20940"}, + {"2600:370f:3748::/47", "32261"}, + {"2607:6500::/32", "7794"}, + {"2a00:c80::/32", "48564"}, + {"2a03:f80:81::/48", "9009"}, + {"2620:12c:c000::/46", "395837"}, + {"2a06:c006::/31", "206766"}, + {"2a0e:eac0:2000::/44", "204582"}, + {"2409:8c20:7c92::/32", "56046"}, + {"240a:ab9e::/32", "145624"}, + {"2001:559:5fd::/48", "33659"}, + {"2001:128c:560::/34", "25933"}, + {"2409:8904:cf70::/40", "24547"}, + {"240a:aab6::/32", "145392"}, + {"2604:6f00::/32", "35985"}, + {"2620:12e:3000::/44", "25670"}, + {"2a00:fa40:3000::/33", "45012"}, + {"2a06:8c80::/29", "49223"}, + {"2a11:5703:b00b::/48", "212149"}, + {"2409:8053:1000::/47", "56047"}, + {"240c:c018::/32", "24350"}, + {"2804:f8c:3000::/33", "263591"}, + {"2804:11e0::/32", "263445"}, + {"2c0f:f510::/32", "327941"}, + {"2001:418::/48", "2914"}, + {"2402:800:9bb7::/41", "7552"}, + {"2800:9a5::/30", "14522"}, + {"2a0f:3540::/29", "60262"}, + {"2001:44b8:30c5::/46", "4739"}, + {"2804:e34:e000::/36", "61889"}, + {"2001:67c:2628::/48", "205016"}, + {"2400:89c0:1050::/46", "23724"}, + {"2600:1400:801::/35", "20940"}, + {"2a02:26f7:d441::/46", "20940"}, + {"2c0f:f568:3::/32", "37451"}, + {"240a:a2be::/32", "143352"}, + {"2606:40::/32", "36492"}, + {"2620:110:d000::/44", "26"}, + {"2001:678:6a8::/48", "39577"}, + {"2001:4408:6702::/36", "4758"}, + {"2401:d800:fb30::/41", "7552"}, + {"2604:9cc0:2::/45", "201106"}, + {"2604:d600:120a::/43", "32098"}, + {"2800:bf0:3bc1::/42", "27947"}, + {"2a07:7840::/29", "207390"}, + {"2a09:8280:1::/48", "40509"}, + {"2a0f:9400:7390::/46", "210815"}, + {"2600:1419:8401::/36", "20940"}, + {"2620:171:48::/47", "42"}, + {"2a07:6cc0:40::/47", "61098"}, + {"2401:af80::/33", "10010"}, + {"2402:800:9a71::/44", "7552"}, + {"2402:9e80:17::/48", "149500"}, + {"2406:da1e::/36", "16509"}, + {"2a00:c3c0::/32", "43928"}, + {"2405:201:9800::/34", "55836"}, + {"2a0e:ac00::/32", "48447"}, + {"2406:f040:bcd::/48", "131775"}, + {"240a:a8d4::/32", "144910"}, + {"2600:1404:9401::/36", "20940"}, + {"2620:52:8::/45", "22753"}, + {"2804:d30::/32", "52610"}, + {"2804:37f0:2900::/35", "266445"}, + {"2804:77f8::/32", "271211"}, + {"2a00:e20:144::/44", "25048"}, + {"240a:a274::/32", "143278"}, + {"2404:a640:63::/39", "133827"}, + {"2600:1010:b170::/40", "22394"}, + {"2602:800:c800::/38", "398642"}, + {"2607:f490::/32", "7029"}, + {"2804:26d8::/32", "53160"}, + {"2a01:b740:535::/36", "714"}, + {"2a02:2180::/32", "16245"}, + {"2a03:db40::/32", "61178"}, + {"2a07:6fc0:20::/29", "34549"}, + {"2001:49f0:d0f4::/44", "174"}, + {"2a02:4a00::/32", "48638"}, + {"2a10:e80::/29", "47289"}, + {"2001:559:785::/48", "33659"}, + {"2001:57a:a202::/36", "22773"}, + {"2402:800:367f::/40", "7552"}, + {"2402:b9c0::/32", "24259"}, + {"2605:a404:4f6::/39", "33363"}, + {"2a04:5c85:f002::/48", "47936"}, + {"2606:ae80:1430::/44", "19834"}, + {"2804:15e4:4::/47", "53001"}, + {"2a00:f740::/39", "28875"}, + {"2a10:8701::/30", "212109"}, + {"2400:d400:1337::/48", "45671"}, + {"2405:200:b00::/31", "55836"}, + {"2803:1300::/32", "52263"}, + {"2803:99e0:10::/44", "270020"}, + {"2402:c340:cacc::/34", "38047"}, + {"2804:7eac::/32", "271639"}, + {"2001:1aa0::/29", "12301"}, + {"2404:f000::/32", "18001"}, + {"2600:3c0f:6::/47", "63949"}, + {"2804:aac::/33", "52905"}, + {"2a0b:4f00::/32", "200807"}, + {"2a10:df40::/29", "211458"}, + {"2001:b08:14::/48", "28800"}, + {"2402:800:548d::/43", "7552"}, + {"2402:8100:20e3::/48", "45271"}, + {"2409:8a55:c000::/37", "56040"}, + {"240e:981:9000::/40", "58542"}, + {"2604:fbc0::/36", "13830"}, + {"2605:2c40::/40", "63210"}, + {"2607:ff68:11::/32", "46475"}, + {"2a02:26e8::/32", "51155"}, + {"2a06:c400::/44", "51559"}, + {"2a07:a440::/30", "42927"}, + {"2001:18c8:767::/40", "18982"}, + {"2804:5d88::/32", "268978"}, + {"2400:4480:4000::/34", "17426"}, + {"2606:9080::/32", "397122"}, + {"2a0c:9a47::/44", "209533"}, + {"2001:de8:b::/48", "9825"}, + {"2804:456c::/32", "266925"}, + {"2a02:26f7:cfcd::/42", "20940"}, + {"2804:48c::/32", "262699"}, + {"2001:49f0:d01b::/42", "174"}, + {"2610:b0:415a::/48", "21433"}, + {"2a06:4b00::/31", "51191"}, + {"2a12:bc0::/48", "50414"}, + {"2001:4878:a027::/48", "12222"}, + {"2408:886e::/31", "4837"}, + {"2409:8c1f:68f0::/35", "9808"}, + {"240a:a8ec::/32", "144934"}, + {"2607:fe78::/32", "3851"}, + {"2800:160:13e7::/43", "14259"}, + {"2a06:4600::/29", "200423"}, + {"240e:d9:e800::/48", "38283"}, + {"2607:7e80::/35", "395354"}, + {"2607:fae0:f001::/48", "8038"}, + {"2620:10e:d080::/41", "21538"}, + {"2001:ee0:8140::/38", "45899"}, + {"2001:4dd8::/32", "2116"}, + {"2620:62:c000::/48", "11820"}, + {"2a00:18c0::/32", "8402"}, + {"2001:559:8186::/48", "33490"}, + {"2001:1b70:82b6::/48", "158"}, + {"240a:ac5b::/32", "145813"}, + {"2600:1009:d020::/34", "22394"}, + {"2803:77a0::/32", "269876"}, + {"2a00:b404:f000::/36", "205867"}, + {"2001:fd8:33b0::/44", "4775"}, + {"2600:1404:6401::/36", "20940"}, + {"2605:a404:814::/42", "33363"}, + {"2804:2590::/32", "264288"}, + {"2a01:b880::/32", "1257"}, + {"2a04:9a00:1021::/46", "203396"}, + {"2404:8a00::/48", "17470"}, + {"2602:fed2:770f::/48", "53356"}, + {"2606:a600:fff0::/44", "23005"}, + {"2a00:e040:c08::/48", "60436"}, + {"2001:fd8:b280::/42", "132199"}, + {"2001:44b8:30cc::/48", "7545"}, + {"240a:2:ccc::/48", "9605"}, + {"240e:a7:7fea::/45", "140522"}, + {"2602:fed2:731e::/48", "53356"}, + {"2a0d:9240::/29", "210167"}, + {"240a:a6ef::/32", "144425"}, + {"2804:1b3:4180::/36", "18881"}, + {"2804:603c::/32", "269154"}, + {"2a00:1ca8::/42", "50673"}, + {"2001:428:4803::/48", "19603"}, + {"2001:1900:2018::/48", "10753"}, + {"2803:c310::/32", "23031"}, + {"2a00:cb20:3b00::/32", "60266"}, + {"2401:d800:2de2::/38", "7552"}, + {"2604:d600:15ea::/45", "32098"}, + {"2606:b180::/32", "63069"}, + {"2620:7:6000::/47", "62744"}, + {"2800:160:2e11::/33", "14259"}, + {"2804:33a8::/32", "265410"}, + {"2a01:89a0::/34", "31556"}, + {"2001:3c8:1306::/48", "137198"}, + {"2001:1248:5abe::/41", "11172"}, + {"2001:1248:a47f::/48", "11172"}, + {"2607:f408:1010::/45", "19871"}, + {"2620:11c:3000::/40", "31764"}, + {"2804:1248::/33", "263467"}, + {"2804:7e10::/32", "271600"}, + {"2606:2800:60c::/47", "15133"}, + {"2804:7358::/32", "270909"}, + {"2001:579:f040::/40", "22773"}, + {"2405:ff00::/32", "132519"}, + {"2600:1417:4e::/47", "20940"}, + {"2a12:7800::/32", "42675"}, + {"2001:418:1401:24::/64", "2639"}, + {"240a:a61a::/32", "144212"}, + {"240a:a80a::/32", "144708"}, + {"2620:0:e20::/46", "1999"}, + {"2804:1370::/32", "61901"}, + {"2804:7538::/32", "271032"}, + {"2001:559:20c::/48", "33659"}, + {"2001:c20:7000::/44", "3758"}, + {"2a04:9ac2::/32", "20766"}, + {"2409:8028:30c1::/42", "56041"}, + {"2800:160:1f58::/42", "14259"}, + {"2a00:ccc2::/32", "59592"}, + {"2a10:4646:b::/48", "211693"}, + {"2600:141b:14::/48", "35994"}, + {"2607:f110:e1a0::/38", "21889"}, + {"2803:19c0::/32", "264605"}, + {"2001:6f8:1502::/36", "3257"}, + {"2001:da8:24a::/47", "23910"}, + {"2801:14::/48", "19429"}, + {"2a02:1318::/32", "25054"}, + {"2a0c:b240::/32", "202441"}, + {"2001:67c:758::/48", "204254"}, + {"2800:ba0:10::/48", "263812"}, + {"2a02:2010:2090::/45", "20978"}, + {"2a0d:4600::/29", "204319"}, + {"2a0e:6600::/29", "205516"}, + {"2001:250::/47", "23910"}, + {"2001:c38:b000::/36", "131090"}, + {"2001:1218:6042::/45", "278"}, + {"2402:ef03:b::/45", "7633"}, + {"2804:1888::/32", "61938"}, + {"2a02:26f7:cc90::/48", "36183"}, + {"2a0d:4a40::/29", "197706"}, + {"2001:590::/35", "3257"}, + {"2600:1417:c00::/48", "7713"}, + {"2a02:23d0::/32", "5435"}, + {"2a02:26f7:e209::/42", "20940"}, + {"2a0b:a0c0::/29", "59682"}, + {"2a11:7240::/29", "43114"}, + {"2a00:d10::/32", "20559"}, + {"2a01:190:160::/35", "1764"}, + {"2804:4978::/32", "267186"}, + {"2001:250:c32::/39", "23910"}, + {"2406:7900:9000::/47", "45328"}, + {"2a06:1287:330a::/45", "206499"}, + {"2001:678:2a4::/48", "206777"}, + {"2402:800:91a9::/43", "7552"}, + {"2402:3a80:1e08::/45", "38266"}, + {"240e:3ba:1800::/34", "4134"}, + {"2a00:1b50:11::/32", "8343"}, + {"2a0f:e0c0::/29", "7203"}, + {"2404:7180:c001::/46", "23848"}, + {"240e:3b1:7800::/39", "4134"}, + {"2604:2700::/39", "32181"}, + {"2804:1e38:4001::/45", "264415"}, + {"2001:559:42a::/48", "33657"}, + {"2402:ef2f:33::/48", "7633"}, + {"2a05:2c00::/30", "201559"}, + {"2a05:5800::/29", "200924"}, + {"2a0b:440:880::/32", "39921"}, + {"2001:550:d01::/46", "174"}, + {"2a0e:6300::/29", "210661"}, + {"2a0e:aa07:e02c::/48", "210370"}, + {"2001:400:6441:52::/58", "293"}, + {"2001:c20:5400::/34", "3758"}, + {"2806:2f0:2480::/48", "17072"}, + {"2001:4180::/32", "5409"}, + {"2402:800:59e0::/44", "7552"}, + {"2409:8a04:e300::/31", "24547"}, + {"240a:aad4::/32", "145422"}, + {"2600:6c18::/30", "20115"}, + {"2607:fcf8::/32", "26788"}, + {"2a0b:9b80::/29", "43332"}, + {"2001:559:c2ac::/48", "33287"}, + {"2001:df3:bc80::/48", "135067"}, + {"2600:1002:b0d0::/44", "6167"}, + {"2801:80:1be0::/48", "266521"}, + {"2804:74bc::/32", "271000"}, + {"2a02:214a::/29", "1241"}, + {"2a0b:7940::/29", "207541"}, + {"2a0f:9ac0::/29", "212144"}, + {"2600:370f:374a::/42", "32261"}, + {"2606:5540::/32", "40165"}, + {"2804:564::/32", "20044"}, + {"2404:d540::/47", "2501"}, + {"2407:d300::/32", "17819"}, + {"2a01:c50f:ca40::/39", "12479"}, + {"2400:cb00:20::/46", "13335"}, + {"2408:8957:c000::/40", "17622"}, + {"2602:fc4c::/36", "46082"}, + {"2803:7f60::/32", "52468"}, + {"2806:263:3300::/37", "13999"}, + {"2a02:26f7:ea91::/42", "20940"}, + {"2406:3400:700::/36", "10143"}, + {"240a:adab::/32", "146149"}, + {"240e:267:6400::/36", "4134"}, + {"2804:7704::/32", "271149"}, + {"2001:250:815::/48", "138182"}, + {"2001:1248:5970::/40", "11172"}, + {"2402:2980::/32", "134224"}, + {"2604:ca00:110a::/41", "36492"}, + {"2607:6980:e710::/44", "9009"}, + {"2620:100:9004::/47", "22843"}, + {"2a01:6f8::/32", "15580"}, + {"2405:1f00::/32", "38077"}, + {"240a:a0bb::/32", "142837"}, + {"240a:a592::/32", "144076"}, + {"2a0d:2581:1000::/36", "209261"}, + {"240a:a407::/32", "143681"}, + {"2600:9000:f140::/48", "16509"}, + {"2604:1580:fe03::/39", "54455"}, + {"2801:11a::/48", "14080"}, + {"2a0c:9a40:8280::/48", "207414"}, + {"2800:484:8b00::/35", "10620"}, + {"2804:13dc:cd00::/34", "262428"}, + {"2806:2f0:7041::/46", "17072"}, + {"2a01:9e00::/33", "41495"}, + {"2a0b:7e80:0:200::/29", "43372"}, + {"2600:1408:6001::/37", "20940"}, + {"2a04:5b81:1fff::/48", "202265"}, + {"2001:559:5b4::/48", "33662"}, + {"2001:648:2012::/40", "5408"}, + {"2400:380:9::/48", "4766"}, + {"2804:e1c:fc00::/38", "52545"}, + {"2a03:4b40:5401::/38", "50710"}, + {"2a04:79c0::/29", "59507"}, + {"2a0e:97c3:580::/48", "20473"}, + {"2803:2d60::/35", "14754"}, + {"2804:61b0::/32", "269250"}, + {"2400:bb40:4444::/48", "136787"}, + {"2402:800:7750::/42", "7552"}, + {"240a:a68e::/32", "144328"}, + {"2804:4bac::/32", "267323"}, + {"2a01:3e0:403::/36", "6453"}, + {"2001:1250:e200::/44", "22894"}, + {"2600:100c:f010::/31", "22394"}, + {"2804:b18:90::/41", "52941"}, + {"2a00:4802:3400::/44", "13124"}, + {"2408:84e1:140::/32", "4808"}, + {"2001:7a8:810::/44", "34019"}, + {"2408:8459:d180::/42", "134543"}, + {"2600:1003:b050::/45", "22394"}, + {"2801:12:1800::/48", "27951"}, + {"2804:2db4:4000::/32", "265298"}, + {"2804:2f1c:8300::/34", "264872"}, + {"2001:df2:5380::/48", "48024"}, + {"2400:ac00::/32", "45846"}, + {"2600:1407:9000::/48", "35994"}, + {"2600:1fa0:e080::/44", "16509"}, + {"2806:230:2022::/48", "265594"}, + {"2a09:4c0:402::/39", "58057"}, + {"2001:12a0:aaab::/33", "28292"}, + {"2001:b400:f218::/45", "17421"}, + {"2408:8456:1440::/39", "17816"}, + {"2600:1408:7001::/37", "20940"}, + {"2a02:26f7:e344::/48", "36183"}, + {"240e:67e:1000::/37", "140330"}, + {"2610:80::/34", "6079"}, + {"2801:80:1de0::/48", "267485"}, + {"2a0e:9640::/29", "44592"}, + {"2001:628:2000::/48", "1120"}, + {"2620:103:e0c9::/48", "13893"}, + {"2a00:4bc0:211a::/48", "31004"}, + {"2a00:f826:12::/42", "34549"}, + {"2a02:26f7:cf91::/42", "20940"}, + {"2001:16a2:4020::/45", "25019"}, + {"2409:8a54:c000::/37", "9808"}, + {"240e:698:4600::/40", "134756"}, + {"2600:1003:b150::/40", "22394"}, + {"2600:140f:6001::/37", "20940"}, + {"2605:8c80::/32", "6391"}, + {"2a02:2ab0:8620::/33", "702"}, + {"2a12:1d00::/35", "210103"}, + {"2606:2800:500b::/48", "15133"}, + {"2610:f0::/38", "22925"}, + {"2804:213c:2a::/32", "264544"}, + {"2a0c:2f44::/30", "59829"}, + {"240a:a08a::/32", "142788"}, + {"240a:ab0c::/32", "145478"}, + {"2604:4d40:acc::/48", "213073"}, + {"2804:6f54::/32", "270653"}, + {"2a0c:7340::/32", "204886"}, + {"240a:a78d::/32", "144583"}, + {"2606:4f00:4::/48", "19324"}, + {"2a05:eb40::/29", "200915"}, + {"2001:df6:2a80::/48", "135738"}, + {"2800:160:121b::/42", "14259"}, + {"2a01:6d00:12::/48", "48445"}, + {"2a02:ee80:41b5::/48", "3573"}, + {"2a07:3640::/29", "203179"}, + {"2406:e1c0:501::/38", "141459"}, + {"2600:100d:b130::/44", "22394"}, + {"2604:3fc0:3003::/36", "396300"}, + {"2607:8300:3000::/36", "13876"}, + {"2a00:8740:500::/40", "207490"}, + {"2a00:b405::/30", "12857"}, + {"2a02:26f7:dd49::/42", "20940"}, + {"2a02:26f7:ebc1::/46", "20940"}, + {"2a06:d700:4445::/29", "43892"}, + {"2001:559:82ed::/48", "7922"}, + {"2402:800:5a8d::/43", "7552"}, + {"2405:9800:c702::/36", "45430"}, + {"2602:feda:ae7::/48", "140913"}, + {"2804:2618::/32", "262362"}, + {"2804:7bb4::/32", "271449"}, + {"2a0e:fd45::/48", "47750"}, + {"2001:418:1401:18::/64", "20940"}, + {"2401:ab40:1::/48", "136961"}, + {"2804:3a50::/32", "14204"}, + {"2a00:5320::/32", "24953"}, + {"2604:bc0:3::/48", "18779"}, + {"2a01:8840:d::/48", "63403"}, + {"2a02:26f7:b784::/47", "36183"}, + {"2001:559:8516::/48", "33657"}, + {"2402:800:9a55::/42", "7552"}, + {"2403:9800:7000::/40", "4648"}, + {"2600:6c20:24d::/42", "20115"}, + {"2402:b740:8000::/47", "140867"}, + {"2600:370f:72e0::/48", "32261"}, + {"2605:1140:1::/48", "394142"}, + {"2a00:1830::/32", "24845"}, + {"2a02:26f7:dc4d::/42", "20940"}, + {"2600:1001:d0c0::/44", "6167"}, + {"2806:370:5390::/44", "28403"}, + {"2a02:ce0::/35", "35819"}, + {"2402:e380:30f::/48", "138631"}, + {"240e:438:8220::/43", "140647"}, + {"2a00:f440:b::/48", "48347"}, + {"2a02:26f7:e9c0::/48", "36183"}, + {"2600:141b:1800::/48", "35994"}, + {"2607:f4e8:14::/48", "23059"}, + {"2804:23c0:2100::/32", "26218"}, + {"2a02:26f7:ea4c::/48", "36183"}, + {"2a12:a840::/31", "47556"}, + {"2001:dce:7800::/48", "38064"}, + {"2001:df0:456::/48", "55904"}, + {"240a:a637::/32", "144241"}, + {"2a05:7280::/32", "202173"}, + {"2a0f:f380::/29", "60262"}, + {"2400:7400:71::/45", "38044"}, + {"240a:ac0e::/32", "145736"}, + {"2405:4803:40a::/36", "18403"}, + {"240e:3b6::/35", "134773"}, + {"2600:1413:c000::/48", "24319"}, + {"2a02:9b0:a::/43", "35819"}, + {"2001:559:81e0::/46", "7015"}, + {"240e:14:1000::/36", "140330"}, + {"2800:160:12e6::/44", "14259"}, + {"2a00:9120:1::/46", "60680"}, + {"2001:67c:2e9c::/48", "8742"}, + {"2001:1248:88ee::/43", "11172"}, + {"2001:1a11:27::/41", "8781"}, + {"2402:e380:300::/48", "132316"}, + {"2600:250f::/32", "26801"}, + {"2600:370f:40a8::/41", "32261"}, + {"2803:6604:e401::/39", "28075"}, + {"2a02:26f7:e7cd::/46", "20940"}, + {"2001:579:400c::/42", "22773"}, + {"2001:550:2200:100::/54", "174"}, + {"2001:67c:2a40::/48", "20712"}, + {"240a:a2ac::/32", "143334"}, + {"2604:4b00::/32", "26123"}, + {"2a0b:60c0::/29", "205655"}, + {"2001:559:800e::/43", "7922"}, + {"2400:6280:16::/47", "132280"}, + {"240e:db:8800::/48", "38283"}, + {"2600:6c38:ac0::/39", "20115"}, + {"2804:49c:4203::/48", "7162"}, + {"2a00:1618::/29", "12577"}, + {"2a04:eac0::/29", "201878"}, + {"2001:fd8:f2f0::/44", "4775"}, + {"2a02:578:7400::/38", "9031"}, + {"2408:8459:7a10::/42", "17623"}, + {"2804:6e4::/34", "262612"}, + {"2a0e:97c3:55a::/48", "20473"}, + {"2403:7bc0::/32", "133593"}, + {"2404:bf40:a1c0::/48", "7545"}, + {"2407:9240:2700::/40", "41378"}, + {"240e:438:6a20::/43", "140647"}, + {"2804:2cd4:50::/40", "265246"}, + {"2804:4c90::/32", "267378"}, + {"2a02:2560::/46", "21127"}, + {"2001:250:3430::/48", "138438"}, + {"2001:da8:7020::/48", "23910"}, + {"2401:d800:bbb0::/41", "7552"}, + {"2602:fd50:f::/48", "39975"}, + {"2620:15e:7101::/48", "30383"}, + {"2803:2240::/32", "263777"}, + {"2c0e:2007:200::/23", "5713"}, + {"2409:8915:7200::/39", "56044"}, + {"2604:1700::/48", "23237"}, + {"2620:a2:6000::/48", "40948"}, + {"2800:a40:a000::/35", "22080"}, + {"2001:678:ab4::/48", "208584"}, + {"2001:4878:a321::/45", "12222"}, + {"240e:267:8400::/36", "4134"}, + {"2603:90f5:1::/48", "20001"}, + {"2806:10a6:4::/43", "8151"}, + {"2a02:26f7:d601::/46", "20940"}, + {"2a06:13c0::/29", "206141"}, + {"2a0f:7c40::/29", "14037"}, + {"2409:8704:3f00::/33", "24547"}, + {"2620:13e::/44", "397327"}, + {"2801:80:9e0::/48", "263417"}, + {"2a02:e580::/29", "199339"}, + {"2001:16a2:4c00::/34", "25019"}, + {"240a:a07a::/32", "142772"}, + {"2a03:7c0::/32", "57704"}, + {"2001:67c:1164::/48", "24940"}, + {"2408:8256:376c::/43", "17623"}, + {"2606:2e00:8004::/46", "36351"}, + {"2804:5e48:f000::/40", "269023"}, + {"2804:6894::/32", "269702"}, + {"2a06:9c40::/29", "8769"}, + {"2001:67c:5ac::/48", "44204"}, + {"2001:df7:a401::/48", "134839"}, + {"2401:d800:2630::/41", "7552"}, + {"2408:80f1:10::/44", "17621"}, + {"2804:ac8:102::/40", "262672"}, + {"2804:1ee4::/32", "264452"}, + {"2a06:6f07:ffff::/48", "197164"}, + {"2001:df5:b880::/48", "63528"}, + {"240a:a418::/32", "143698"}, + {"2606:5e80::/32", "22379"}, + {"240e:108:1155::/44", "4134"}, + {"2600:1007:d000::/42", "6167"}, + {"2605:a401:8148::/43", "33363"}, + {"2a01:7d20:a00::/40", "203645"}, + {"2a02:c60::/32", "49985"}, + {"2409:8907:8620::/33", "24547"}, + {"2a00:1d38::/40", "50655"}, + {"2a09:bac0:56::/47", "13335"}, + {"2a10:1440::/29", "213035"}, + {"2001:eb0::/40", "9584"}, + {"2800:440:76::/48", "27738"}, + {"2a02:2e02:30e0::/39", "12479"}, + {"2001:500:70::/48", "30133"}, + {"240e:264:b000::/30", "4134"}, + {"2607:f6f0:a003::/48", "394749"}, + {"2800:8a0:4000::/32", "5722"}, + {"2a00:d000::/29", "34790"}, + {"2001:559:c34a::/47", "7015"}, + {"2403:8100:1000::/40", "24023"}, + {"240a:a0e1::/32", "142875"}, + {"240e:67e:c200::/39", "140329"}, + {"2600:6c39:627::/43", "20115"}, + {"2605:fec0::/32", "398852"}, + {"2607:f110:e110::/42", "21889"}, + {"2804:6d44::/32", "270521"}, + {"2a00:12f0::/32", "27970"}, + {"2a06:ee01::/32", "27552"}, + {"2001:df0:75::/48", "23767"}, + {"2401:d800:c60::/40", "7552"}, + {"2600:1806:30::/46", "16552"}, + {"2a00:4802:a00::/42", "13124"}, + {"2001:559:58d::/48", "7016"}, + {"2001:559:840a::/48", "33287"}, + {"2001:4878:2000::/48", "12222"}, + {"2001:4878:2225::/48", "12222"}, + {"2402:800:597f::/40", "7552"}, + {"240a:a4f5::/32", "143919"}, + {"2800:220:10::/48", "13585"}, + {"2a00:1190::/32", "16302"}, + {"2a00:1e48::/32", "20485"}, + {"2001:57a:801a::/42", "22773"}, + {"2804:5674::/32", "267999"}, + {"2a02:ee80:41be::/41", "3573"}, + {"240e:970::/29", "4134"}, + {"2804:14d::/47", "28573"}, + {"2804:1cbc::/32", "61672"}, + {"2a03:7960::/46", "47661"}, + {"2001:500:4431::/48", "396549"}, + {"2404:ffc0:2::/43", "62707"}, + {"2408:8456:2640::/36", "17816"}, + {"2408:8459:e410::/42", "17623"}, + {"240e:3b4:2800::/38", "4134"}, + {"2a03:5c00::/32", "29177"}, + {"2a0e:b107:980::/48", "213263"}, + {"2602:10f::/32", "33588"}, + {"2a00:f0e0:11::/41", "198499"}, + {"2001:559:7e7::/48", "7922"}, + {"2400:5280:3000::/38", "63199"}, + {"2406:4c40::/48", "135953"}, + {"2408:8456:2140::/40", "17816"}, + {"2a03:46c0::/32", "42525"}, + {"2001:559:8229::/48", "13367"}, + {"2408:84f3:9c10::/42", "134543"}, + {"2409:8054:61::/45", "56040"}, + {"2409:8907:7a20::/39", "24547"}, + {"2620:130:30c0::/48", "62861"}, + {"2804:2818::/44", "263940"}, + {"2804:3e60:150::/37", "266592"}, + {"2001:559:85be::/47", "20214"}, + {"2804:802c:150::/38", "271734"}, + {"2a04:4e40:3400::/48", "54113"}, + {"2404:3d00:40fa::/47", "21433"}, + {"2605:d600::/32", "13823"}, + {"2a01:a360::/32", "200030"}, + {"2a02:26f7:f8::/46", "36183"}, + {"2001:df4:f080::/48", "141214"}, + {"2401:d800:2520::/41", "7552"}, + {"2602:231::/32", "5056"}, + {"2800:3c0:3130::/32", "19863"}, + {"2a03:7400::/29", "39642"}, + {"2001:67c:270::/48", "202592"}, + {"2404:2480::/33", "135391"}, + {"240a:a2e0::/32", "143386"}, + {"2804:528c::/32", "268525"}, + {"2a02:e30:f00c::/48", "51636"}, + {"2408:8957:a200::/40", "17622"}, + {"240a:a79a::/32", "144596"}, + {"2803:e820::/32", "264750"}, + {"2001:250:5829::/48", "24363"}, + {"2408:840c:c300::/40", "17621"}, + {"2605:4c40:209::/42", "30081"}, + {"2606:2800:60e0::/48", "15133"}, + {"2804:7c60::/32", "271492"}, + {"2a01:70:ffff::/48", "25098"}, + {"2a03:adc0::/48", "42807"}, + {"2a12:4b00::/29", "204790"}, + {"2401:c440::/48", "135905"}, + {"2408:840c:a200::/40", "17621"}, + {"240a:abba::/32", "145652"}, + {"2600:1480:4801::/37", "20940"}, + {"2607:f0d0:6:1::/35", "36351"}, + {"2a02:4000::/32", "35361"}, + {"2a04:c00::/29", "41400"}, + {"2402:800:57e0::/44", "7552"}, + {"2404:4a00:1::/64", "55423"}, + {"240e:5f:600b::/48", "140313"}, + {"2804:6a7c::/32", "270339"}, + {"2a06:9000::/32", "25386"}, + {"2a0b:5ac0::/29", "202803"}, + {"2001:1620:2016::/32", "13030"}, + {"2409:8c3c:1400::/32", "24444"}, + {"2401:d800:fe20::/41", "7552"}, + {"2605:c1c0::/32", "63264"}, + {"2804:5104::/32", "268425"}, + {"2a02:26f7:c5c8::/48", "36183"}, + {"2a06:b00::/29", "3342"}, + {"2a0e:97c0:2e0::/47", "211544"}, + {"2001:1248:57cd::/46", "11172"}, + {"2001:4878:2259::/48", "12222"}, + {"2620:16e:f0f5::/48", "3147"}, + {"2a00:cd80:8000::/33", "30778"}, + {"2001:44b8:605f::/48", "4739"}, + {"240a:ab49::/32", "145539"}, + {"2001:418:1450::/48", "3938"}, + {"2404:c0:9900::/33", "23693"}, + {"2606:9740::/32", "400295"}, + {"2804:39ac::/32", "266043"}, + {"2a12:2540::/32", "56488"}, + {"2a03:5da0::/32", "201293"}, + {"2a0b:6b83:2000::/48", "208249"}, + {"2001:678:4bc::/48", "42214"}, + {"2604:2d80:ec00::/35", "30036"}, + {"2804:14d:9e87::/42", "28573"}, + {"2a0e:cf40::/29", "8823"}, + {"240a:a0e0::/32", "142874"}, + {"240a:a3a8::/32", "143586"}, + {"240a:aa1c::/32", "145238"}, + {"240e:ff::/32", "4134"}, + {"2600:1001:f010::/40", "22394"}, + {"2806:230:1005::/48", "11888"}, + {"2a06:f900:4000::/36", "56630"}, + {"2a0f:5385::/32", "208135"}, + {"2001:67c:3cc::/48", "56700"}, + {"2001:9b8::/46", "6774"}, + {"2402:e280:5900::/37", "134674"}, + {"240a:a5bf::/32", "144121"}, + {"2600:140f:9c00::/48", "9498"}, + {"2602:fc7a::/36", "399612"}, + {"2a0a:3680::/29", "34907"}, + {"240a:a04e::/32", "142728"}, + {"2600:1005:a120::/36", "22394"}, + {"2604:d600:682::/45", "32098"}, + {"2a01:498::/37", "42018"}, + {"2a02:26f0:9a01::/39", "20940"}, + {"2a0c:a9c7:160::/48", "43832"}, + {"2001:250:5845::/44", "138371"}, + {"240a:a202::/32", "143164"}, + {"2a03:1c80::/32", "25222"}, + {"2a0c:8a40::/46", "9009"}, + {"2001:df7:c600::/48", "135905"}, + {"2409:8e79::/24", "9808"}, + {"2804:134c::/32", "263527"}, + {"240a:a57f::/32", "144057"}, + {"2a02:26f7:df80::/48", "36183"}, + {"2a0a:36c0::/29", "208457"}, + {"2a0a:3f40::/32", "50673"}, + {"2a12:5844:1212::/48", "209768"}, + {"2c0f:ec40::/33", "327936"}, + {"2001:da8:e801::/46", "138373"}, + {"2403:1400::/32", "24446"}, + {"2602:fdff::/36", "397376"}, + {"2804:7d0c::/32", "271535"}, + {"2a02:ee80:40c0::/47", "21433"}, + {"2403:18c0:1::/45", "54574"}, + {"2801:13e::/45", "19429"}, + {"2804:14d:8c00::/40", "28573"}, + {"2a02:1c8:10::/44", "24955"}, + {"2a04:4e40:1200::/48", "54113"}, + {"2a0a:eac2:1::/29", "31143"}, + {"2a0b:b1c0::/32", "28717"}, + {"2001:500:72::/45", "30133"}, + {"2801:16:6800::/48", "3549"}, + {"2a02:ff0:2000::/40", "12735"}, + {"2a09:7340::/32", "198985"}, + {"2a09:9000::/29", "34907"}, + {"2001:44c8:12a::/45", "45430"}, + {"2001:48e0::/32", "40498"}, + {"2402:ef2f:17::/48", "7633"}, + {"2406:7400:30::/47", "131269"}, + {"240a:afe7::/32", "146721"}, + {"240d:c010:1a::/47", "132203"}, + {"2804:302:4000::/35", "53237"}, + {"2a02:d480::/38", "680"}, + {"2a02:e400::/29", "199318"}, + {"2001:559:83c8::/48", "33659"}, + {"2001:1828::/32", "10297"}, + {"2604:d600:1543::/44", "32098"}, + {"2804:4a84::/32", "267245"}, + {"2a05:4140:6::/48", "211188"}, + {"2605:a404:b02::/43", "33363"}, + {"2a02:26f7:cb84::/48", "36183"}, + {"2001:559:c12d::/48", "13367"}, + {"240a:a2f1::/32", "143403"}, + {"240a:a9e3::/32", "145181"}, + {"2600:1415:1c01::/34", "20940"}, + {"2803:70a0::/32", "27855"}, + {"2804:1bc4::/32", "61748"}, + {"2804:3278::/32", "265080"}, + {"2a0d:8d06:1001::/48", "60557"}, + {"2402:a00:19::/41", "45916"}, + {"2409:896a:3e00::/39", "9808"}, + {"2a0d:4b40::/29", "61317"}, + {"2001:13e0::/32", "262178"}, + {"2600:1405:6001::/35", "20940"}, + {"2803:46e0::/47", "269953"}, + {"2a0f:52c1:1::/48", "212345"}, + {"2001:c20:48d1::/35", "3758"}, + {"2400:6c00::/32", "45838"}, + {"2620:109::/43", "10753"}, + {"2620:171:f00::/45", "42"}, + {"2a00:4cc4:4001::/48", "60109"}, + {"2001:67c:15a1::/48", "21430"}, + {"2402:7780::/47", "132933"}, + {"2406:daa0:9080::/44", "16509"}, + {"2408:8656:2ef1::/48", "17816"}, + {"2806:261:300::/37", "13999"}, + {"2a04:4480::/32", "211037"}, + {"2a07:2d00::/48", "202730"}, + {"2a0e:b107:1390::/44", "211231"}, + {"2402:800:3a7f::/40", "7552"}, + {"2402:5ec0::/35", "23724"}, + {"2804:64f8::/32", "269460"}, + {"2a02:26f7:b60d::/42", "20940"}, + {"2a02:26f7:dd00::/48", "36183"}, + {"2a03:4f20::/29", "200719"}, + {"240a:ad1b::/32", "146005"}, + {"240a:ae55::/32", "146319"}, + {"2600:803:271::/37", "701"}, + {"2605:5c0:c144::/48", "28885"}, + {"2607:f710:85::/48", "19624"}, + {"2401:fcc0::/32", "55699"}, + {"2408:8409:3c00::/40", "4808"}, + {"240a:a8cf::/32", "144905"}, + {"240a:acf0::/32", "145962"}, + {"2600:6c38:e0e::/47", "20115"}, + {"2a00:1418:f::/48", "41391"}, + {"2a02:ff0:ffff::/48", "12735"}, + {"2a07:3503:1033::/48", "208492"}, + {"2600:6c10:c0::/43", "20115"}, + {"2a01:5f0::/32", "35592"}, + {"2a0f:b4c1::/32", "57487"}, + {"2001:559:82a5::/48", "33657"}, + {"2001:678:30::/48", "48283"}, + {"2001:1248:9889::/48", "11172"}, + {"240a:af57::/32", "146577"}, + {"2001:559:749::/46", "33650"}, + {"2402:7500:4b3::/45", "24158"}, + {"2600:1017:b8a0::/44", "22394"}, + {"2600:9000:a400::/43", "16509"}, + {"2602:fdc2:55::/48", "397720"}, + {"2607:fae0:a000::/35", "8038"}, + {"2804:31ec::/32", "265045"}, + {"2804:32cc::/32", "265098"}, + {"2804:44d4::/32", "267656"}, + {"2a01:1101:5::/48", "29535"}, + {"2001:559:282::/48", "33657"}, + {"240a:ada0::/32", "146138"}, + {"2804:14c:b388::/41", "28573"}, + {"2804:1654::/33", "263282"}, + {"2a05:d050:80d0::/42", "16509"}, + {"2405:84c0:fcf5::/48", "211686"}, + {"240a:af5d::/32", "146583"}, + {"240e:37a:1a00::/34", "140330"}, + {"2a00:d40:1::/48", "2597"}, + {"2a02:26f7:f781::/46", "20940"}, + {"2a12:4180::/29", "51088"}, + {"2001:678:b1c::/48", "20676"}, + {"2402:800:9eb1::/44", "7552"}, + {"2409:8050:1100::/37", "9808"}, + {"2409:8635::/24", "9808"}, + {"240a:a259::/32", "143251"}, + {"2803:f860::/32", "262186"}, + {"2804:1ca8::/32", "61667"}, + {"2a03:4b20::/32", "56912"}, + {"2a03:7c80::/32", "25176"}, + {"2a0b:33c0:6::/48", "57395"}, + {"2804:f9c::/32", "263595"}, + {"2a12:a307:1::/48", "138330"}, + {"2001:559:320::/48", "7922"}, + {"2001:44b8:1060::/45", "7545"}, + {"240e:980:8d00::/40", "137693"}, + {"2600:140f:800::/48", "9498"}, + {"2800:bf0:80e8::/45", "52257"}, + {"2804:5e2c:f000::/36", "269016"}, + {"2a01:5b0:2e::/48", "50611"}, + {"2a0e:1a80::/31", "30633"}, + {"2001:df1:bd80::/48", "139742"}, + {"2001:4410:2004::/43", "132040"}, + {"2401:3480::/36", "23724"}, + {"2804:78e0::/32", "271271"}, + {"2800:490::/36", "27951"}, + {"2a00:1d28::/32", "8523"}, + {"2a01:5041:4efd::/48", "202196"}, + {"2a02:88d:10::/44", "48695"}, + {"2a00:86c0:2042::/43", "2906"}, + {"2a09:2900::/48", "212710"}, + {"2a0d:2146:be12::/40", "50801"}, + {"2001:67c:285c::/48", "213199"}, + {"2401:7400:6020::/36", "4773"}, + {"2408:84f3:dc40::/38", "17816"}, + {"240e:44d:3600::/42", "140345"}, + {"2607:8600::/32", "13692"}, + {"2a07:6fc7::/32", "34549"}, + {"2001:4bf0::/48", "34623"}, + {"2400:7400:10::/47", "23736"}, + {"2401:2a00::/35", "7468"}, + {"2408:84f3:f690::/36", "17816"}, + {"2804:1034::/32", "263624"}, + {"2806:230:1019::/48", "11888"}, + {"2a03:f580::/47", "15763"}, + {"2c0f:f918::/32", "37002"}, + {"2001:559:c2e1::/46", "33657"}, + {"2001:579:a1fd::/35", "22773"}, + {"2001:2030:c006::/28", "1299"}, + {"2409:803c:1900::/37", "9808"}, + {"2800:ba0:14::/48", "27796"}, + {"2804:978::/32", "263087"}, + {"2804:20f8:1100::/32", "264524"}, + {"2a05:d03a:8000::/40", "16509"}, + {"2001:559:86ae::/48", "7922"}, + {"2408:8256:2c84::/43", "17623"}, + {"240a:aded::/32", "146215"}, + {"2600:1017:b0b0::/41", "6167"}, + {"2600:1417:53::/48", "9498"}, + {"2a03:7380:600::/40", "13188"}, + {"2001:67c:1038::/48", "59480"}, + {"2405:4bc0::/32", "137677"}, + {"2604:6600:26::/41", "40676"}, + {"2620:83:8000::/48", "16"}, + {"2620:98:c000::/48", "11810"}, + {"2401:9140::/46", "136897"}, + {"2001:57b:1243::/36", "22773"}, + {"2804:190:240::/40", "53165"}, + {"2804:2aec::/32", "265125"}, + {"2001:559:c19b::/48", "7015"}, + {"2409:8904:62b0::/39", "24547"}, + {"2605:9d80:9042::/48", "4809"}, + {"2001:559:830e::/48", "33659"}, + {"2001:4060::/33", "6772"}, + {"2401:38c0::/32", "58915"}, + {"240a:aa99::/32", "145363"}, + {"240a:ac39::/32", "145779"}, + {"2602:fed2:710d::/48", "53356"}, + {"2606:2800:447::/44", "15133"}, + {"2a00:a220::/32", "13287"}, + {"2a02:b48:8b00::/30", "39572"}, + {"2401:f940::/32", "132839"}, + {"2a05:1084:7400::/40", "138990"}, + {"2a09:bac0:470::/48", "13335"}, + {"2a0a:cec0::/29", "47926"}, + {"2001:678:2c0::/48", "206740"}, + {"2406:d500:2::/45", "136557"}, + {"2806:20d:5043::/45", "32098"}, + {"2a0f:2a00::/48", "60236"}, + {"2001:550:2204::/46", "174"}, + {"2001:559:87d5::/48", "7922"}, + {"2001:67c:2894::/48", "3292"}, + {"2001:df0:1040::/48", "138277"}, + {"240e:45c:2a00::/40", "131285"}, + {"2804:553c::/32", "268698"}, + {"2600:1406:a400::/48", "35994"}, + {"2600:6c38:242::/45", "20115"}, + {"2804:2bdc:601::/36", "265181"}, + {"2804:5fe4::/32", "269130"}, + {"2a02:26f7:e0c8::/48", "36183"}, + {"2a07:3501:1060::/48", "39686"}, + {"2001:559:c37d::/48", "33651"}, + {"2408:8459:1b10::/42", "17623"}, + {"2804:2f4::/32", "53118"}, + {"2806:20d:5807::/44", "32098"}, + {"2a02:26f7:da84::/48", "36183"}, + {"2a09:5c0::/29", "202204"}, + {"2a0b:4340:3000::/38", "48024"}, + {"2001:df2:a600::/48", "45320"}, + {"2402:e280:2320::/37", "134674"}, + {"2600:200::/28", "7029"}, + {"2600:1005:a100::/43", "6167"}, + {"2607:fea0::/46", "16578"}, + {"2804:4368::/37", "267568"}, + {"2c0f:f948::/48", "37582"}, + {"2001:559:29a::/48", "7015"}, + {"2001:559:c019::/46", "33490"}, + {"2001:df3:3580::/48", "45325"}, + {"2600:1405:2::/44", "20940"}, + {"2603:7::/32", "398789"}, + {"2607:f740:27::/48", "36236"}, + {"2620:11a:a00a::/48", "36040"}, + {"2804:1b04:d::/48", "53048"}, + {"2a06:e540:2::/39", "203600"}, + {"2a0b:6d80::/29", "31477"}, + {"2001:a10::/39", "8308"}, + {"240a:a4be::/32", "143864"}, + {"2804:7f08:19::/34", "271662"}, + {"2a02:26f7:f100::/48", "36183"}, + {"2a0e:b107:1770::/44", "210631"}, + {"2001:1830::/32", "16559"}, + {"2409:8731:1000::/29", "9808"}, + {"240a:aa26::/32", "145248"}, + {"2600:1488:6001::/40", "20940"}, + {"2606:e800::/39", "25843"}, + {"2804:2f1c::/32", "264872"}, + {"2001:559:8675::/48", "33650"}, + {"2803:9a40:4001::/32", "263824"}, + {"2804:20c4::/32", "264513"}, + {"2a03:4e0::/32", "59897"}, + {"2001:146a::/32", "51032"}, + {"2001:48c8:18::/32", "29791"}, + {"2409:8018:28f0::/47", "9808"}, + {"2620:139:2000::/40", "396912"}, + {"2804:e28:100::/32", "52547"}, + {"2a00:9060::/32", "8778"}, + {"2a02:2540::/32", "8258"}, + {"2a04:f780:1000::/36", "134512"}, + {"2a05:4880::/29", "199811"}, + {"2a0d:1b80::/32", "204664"}, + {"2001:559:595::/48", "7922"}, + {"2803:1720::/32", "266815"}, + {"2804:4e48::/32", "268251"}, + {"2a00:d5c0::/29", "196890"}, + {"2a11:d240::/29", "204790"}, + {"2600:6c38:b13::/44", "20115"}, + {"2800:d300::/33", "11830"}, + {"2804:3c0:4::/32", "28605"}, + {"2a06:4c00::/32", "20473"}, + {"2401:4900:46c0::/43", "45609"}, + {"2a07:4580::/36", "46261"}, + {"2401:5180::/32", "31216"}, + {"240e:3bc:ac00::/35", "4134"}, + {"2804:4704::/32", "267026"}, + {"2a09:8040::/29", "42611"}, + {"2620:118:3000::/40", "46476"}, + {"2001:418:1401:4::/64", "20940"}, + {"2001:67c:2d00::/48", "205597"}, + {"240e:3b5:ac00::/35", "4134"}, + {"2a03:69e0::/32", "51784"}, + {"2001:67c:358::/48", "50262"}, + {"2001:4408:6300::/37", "4758"}, + {"2400:1700:300::/46", "45166"}, + {"2402:5c40:5c40::/48", "64089"}, + {"2800:160:12b1::/44", "14259"}, + {"2a02:4d8::/32", "41589"}, + {"2a02:26f7:b988::/48", "36183"}, + {"2001:44b8:1a::/47", "4739"}, + {"2605:1e80:4000::/32", "14380"}, + {"2620:3d:a000::/48", "14410"}, + {"2a00:55a0:f900::/40", "9009"}, + {"2a0d:3c43::/32", "51659"}, + {"2001:559:c125::/46", "33659"}, + {"2001:4c08:2002::/44", "3356"}, + {"2001:253:141::/32", "38272"}, + {"2408:84f3:be40::/33", "17816"}, + {"240a:ab15::/32", "145487"}, + {"2804:641c:f000::/36", "269407"}, + {"2a04:1640::/29", "60610"}, + {"2a09:a4c7:9000::/34", "208861"}, + {"2a0f:b880::/29", "208060"}, + {"2001:44c8:4880::/41", "45430"}, + {"2a02:2f0c:d000:32::/57", "8708"}, + {"2804:4b34::/32", "267290"}, + {"2804:74fc::/32", "271016"}, + {"2a01:7a00:b01::/32", "51701"}, + {"2400:6280:107::/48", "132280"}, + {"2400:f640::/32", "18231"}, + {"2620:171:800::/44", "42"}, + {"2600:5400::/32", "19108"}, + {"2a00:dec0::/32", "29695"}, + {"2a02:ebc0::/29", "52126"}, + {"2600:802:1101::/46", "701"}, + {"2600:6c10:81c::/37", "20115"}, + {"2a02:970::/37", "44002"}, + {"2001:678:5c::/48", "198147"}, + {"2605:6ac0:4000::/36", "32751"}, + {"2620:cb::/48", "3549"}, + {"2804:1d20:640::/34", "264349"}, + {"2804:74f4::/46", "271014"}, + {"2806:2f0:4681::/46", "17072"}, + {"2806:1070:401::/48", "3905"}, + {"2a00:bfe0::/32", "41088"}, + {"2a04:9dc0::/42", "9009"}, + {"2a0a:b387::/32", "35048"}, + {"2600:1017:b430::/40", "6167"}, + {"2607:3100::/32", "13994"}, + {"2804:5ddc::/32", "268997"}, + {"2804:5ff4::/32", "269136"}, + {"2804:7f24:a::/32", "271669"}, + {"2400:0:810::/41", "4766"}, + {"2404:d0:b::/32", "6648"}, + {"2600:1402:1a::/45", "35994"}, + {"2a02:348:ad::/41", "35470"}, + {"2a02:e08::/32", "41601"}, + {"2a04:cc00::/29", "30781"}, + {"2001:df3:8800::/48", "36351"}, + {"2409:8055:3028::/47", "9808"}, + {"240a:a566::/32", "144032"}, + {"240a:a7c8::/32", "144642"}, + {"2600:1415:9001::/34", "20940"}, + {"2804:3540::/32", "266277"}, + {"2800:440:9a00::/42", "27738"}, + {"2806:286::/33", "265524"}, + {"2a03:c980:e5::/48", "210079"}, + {"2804:744:b0b2::/33", "262632"}, + {"2a03:2880:f078::/40", "32934"}, + {"2a06:1480::/29", "39371"}, + {"2001:559:17e::/48", "33651"}, + {"2001:1a11:151::/45", "8781"}, + {"2408:8256:3a80::/48", "17816"}, + {"2409:8028:8f5::/44", "56041"}, + {"240a:a71f::/32", "144473"}, + {"2800:970::/32", "27787"}, + {"2a00:e180::/32", "57353"}, + {"2a0e:aa06:405::/44", "209306"}, + {"2400:6880:2c00::/32", "9652"}, + {"2604:bc0:4::/48", "30176"}, + {"2806:21b::/47", "19332"}, + {"2a02:2e02:1d50::/42", "12479"}, + {"2a0c:3240::/29", "51134"}, + {"2804:a44::/32", "262675"}, + {"2a09:3504::/32", "208861"}, + {"2405:2000:ff00::/40", "6453"}, + {"2408:8459:b250::/37", "17816"}, + {"2602:807:9000::/44", "11043"}, + {"2605:4c40:43::/39", "30081"}, + {"2a03:2b40::/32", "16143"}, + {"2a06:6541:4101::/48", "8220"}, + {"2001:13e8::/32", "11815"}, + {"2402:800:9371::/40", "7552"}, + {"2600:1406:e401::/36", "20940"}, + {"2a02:26f7:bc84::/48", "36183"}, + {"2a0d:2583:ab00::/40", "148971"}, + {"2001:559:8412::/48", "7015"}, + {"2804:45a4::/32", "266940"}, + {"2a02:26f7:e8c4::/48", "36183"}, + {"2a02:e980:107::/44", "19551"}, + {"2404:f4c0:f9c3::/48", "142281"}, + {"240a:a05f::/32", "142745"}, + {"240e:966:e600::/36", "4134"}, + {"2800:160:2003::/45", "14259"}, + {"2800:860:b0c::/32", "262197"}, + {"2806:2f0:40a3::/41", "17072"}, + {"2001:559:826d::/48", "33287"}, + {"2404:bf40:82c0::/48", "7545"}, + {"2602:fea1::/36", "20018"}, + {"2804:60d4:7002::/32", "269194"}, + {"2a01:1c0::/32", "29513"}, + {"2402:800:582b::/41", "7552"}, + {"2402:3a80:1ef3::/39", "38266"}, + {"2a00:4080::/48", "41609"}, + {"2a12:df00:3800::/32", "210462"}, + {"2409:8c85:430::/35", "9808"}, + {"2605:9480:1000::/39", "31775"}, + {"2804:2b68::/32", "265152"}, + {"2804:6e58::/32", "270590"}, + {"2402:e280:220f::/43", "134674"}, + {"2408:84f3:dc10::/42", "134543"}, + {"240a:a390::/32", "143562"}, + {"2600:6c10:f827::/44", "20115"}, + {"2610:20:90a0::/44", "3477"}, + {"2804:669c::/33", "269571"}, + {"2a03:b8c0:12::/45", "202276"}, + {"2a0e:97c0:3f0::/46", "212539"}, + {"2001:559:87cb::/48", "33650"}, + {"2001:1a11:102::/44", "42298"}, + {"2001:4878:4001::/48", "35994"}, + {"2402:800:37fe::/36", "7552"}, + {"2620:b8:8000::/48", "15199"}, + {"2804:739c::/32", "270926"}, + {"2801:80:38b0::/48", "270348"}, + {"2804:14ec::/32", "263359"}, + {"2804:4904::/32", "267159"}, + {"2a02:26f0:8901::/40", "20940"}, + {"2a0e:b107:ae0::/44", "210980"}, + {"2001:678:134::/48", "206725"}, + {"240a:a670::/32", "144298"}, + {"240a:a881::/32", "144827"}, + {"2600:c00::/32", "14744"}, + {"2602:feda:190::/45", "142025"}, + {"2a00:18f0:1e00::/48", "25432"}, + {"240e:1f:e000::/26", "4134"}, + {"2a01:190::/42", "1764"}, + {"2001:1248:88b0::/47", "11172"}, + {"2401:d800:51a2::/38", "7552"}, + {"2409:8915:5e00::/39", "56044"}, + {"240a:a0a9::/32", "142819"}, + {"2804:65ac::/32", "269507"}, + {"2a03:6600::/32", "44124"}, + {"2600:1417:63::/48", "24319"}, + {"2620:74:2f::/41", "7342"}, + {"2806:2f0:70c3::/42", "17072"}, + {"2a09:7240::/29", "210662"}, + {"2001:1248:5582::/45", "11172"}, + {"2409:8087::/39", "56048"}, + {"2602:ff96:81::/46", "40676"}, + {"2804:14d:4cbb::/41", "28573"}, + {"2408:8426::/31", "4837"}, + {"240a:aa65::/32", "145311"}, + {"2804:6394::/32", "269370"}, + {"2a02:26f7:cd51::/46", "20940"}, + {"2a02:26f7:df40::/48", "36183"}, + {"2a03:c380::/32", "21309"}, + {"2605:8840::/32", "397867"}, + {"2a02:26f7:b840::/48", "36183"}, + {"2a02:26f7:c985::/46", "20940"}, + {"2a02:26f7:dd01::/46", "20940"}, + {"2409:8914:aa00::/39", "56044"}, + {"240a:a915::/32", "144975"}, + {"2600:3502:d000::/31", "396998"}, + {"2803:e100::/32", "27971"}, + {"2804:6004:c000::/34", "269140"}, + {"2001:67c:2b88::/48", "51200"}, + {"2804:2018::/32", "264464"}, + {"2a03:47c0:2281::/37", "21277"}, + {"2a05:7180::/29", "35684"}, + {"2402:800:7a00::/42", "7552"}, + {"240a:af8c::/32", "146630"}, + {"2804:14c:4189::/42", "28573"}, + {"2a02:2278:205::/43", "28907"}, + {"2a02:26f7:ebc0::/48", "36183"}, + {"2a02:cb43:8002::/48", "20546"}, + {"2408:8956:c500::/40", "17816"}, + {"240a:a128::/32", "142946"}, + {"240e:a66:1a00::/34", "140330"}, + {"2405:9ac0::/32", "131920"}, + {"2408:8957:be00::/40", "17622"}, + {"240a:a6af::/32", "144361"}, + {"2600:140f:4801::/39", "20940"}, + {"2600:6c2e:e0f::/40", "20115"}, + {"2001:43f8:ac0::/48", "37356"}, + {"2402:800:7a30::/39", "7552"}, + {"2409:8924:bf00::/33", "56046"}, + {"2800:160:1c2b::/43", "14259"}, + {"2001:678:49c::/48", "44574"}, + {"2401:d800:72b0::/41", "7552"}, + {"2406:3000:11:2006::/44", "4657"}, + {"2804:53f0:f000::/36", "268617"}, + {"2a0a:adc0::/47", "50705"}, + {"2c0f:fef8::/43", "15399"}, + {"2001:67c:7a8::/48", "57720"}, + {"2402:800:91c5::/42", "7552"}, + {"2409:804d:3900::/30", "9808"}, + {"2a0c:fd00::/29", "43541"}, + {"2c0f:eaf8::/32", "328581"}, + {"2404:be00::/32", "55799"}, + {"240a:a4cc::/32", "143878"}, + {"2602:fef4::/48", "54721"}, + {"2a02:6680:1166::/48", "16116"}, + {"2a0a:7880:101::/48", "206677"}, + {"2402:800:3663::/43", "7552"}, + {"2606:fa80::/32", "18616"}, + {"2804:370c::/32", "266386"}, + {"2a02:26f7:ce08::/48", "36183"}, + {"2a02:2988::/32", "24916"}, + {"2a0b:70c0::/32", "206420"}, + {"2a10:b9c0:ffff::/48", "213346"}, + {"2001:254::/33", "24489"}, + {"240a:a24c::/32", "143238"}, + {"2600:1411:6000::/64", "4788"}, + {"2804:2da4::/32", "265294"}, + {"2a00:16d8:53::/32", "42695"}, + {"2404:bf40:e003::/45", "7545"}, + {"2406:8800:9021::/46", "17465"}, + {"240a:ab34::/32", "145518"}, + {"2800:bf0:a10c::/38", "27947"}, + {"2a0c:4480:6::/47", "204720"}, + {"2a0f:5707:ac01::/48", "139589"}, + {"2401:d800:fdc0::/42", "7552"}, + {"2404:138:4011::/48", "134227"}, + {"2409:807c:1100::/36", "9808"}, + {"240a:ab4d::/32", "145543"}, + {"2a02:28a8::/32", "51800"}, + {"2a02:fac0::/32", "58220"}, + {"2001:df2:1000::/47", "132335"}, + {"2600:1488:a361::/40", "20940"}, + {"2804:2958::/32", "264010"}, + {"2a06:ac00::/29", "41405"}, + {"2a0f:5880::/29", "204860"}, + {"2400:9380:9cc0::/44", "136167"}, + {"2607:fb28:10::/48", "29384"}, + {"2803:5ce0:600::/40", "54235"}, + {"2a03:5840::/48", "199586"}, + {"2001:df3:fc00::/48", "134548"}, + {"2408:8957:7b00::/40", "17816"}, + {"240a:a468::/32", "143778"}, + {"240e:6b8:3000::/32", "4134"}, + {"2803:f6e0::/32", "269976"}, + {"2001:df0:1580::/48", "138906"}, + {"2402:ef1e:200::/48", "7633"}, + {"2409:8050::/47", "56047"}, + {"2600:6c38:d1f::/42", "20115"}, + {"2a02:26f7:bd8d::/46", "20940"}, + {"2a02:cb80:4250::/47", "43766"}, + {"2a0c:8fc3:8000::/40", "23470"}, + {"2001:559:c348::/48", "22909"}, + {"2001:df7:6800::/51", "59194"}, + {"2605:b7c0::/32", "30177"}, + {"2a02:26f7:f60c::/48", "36183"}, + {"2a0e:5340::/29", "42306"}, + {"2001:559:83c7::/48", "33491"}, + {"2401:fd80:ff00::/45", "139853"}, + {"2402:8100:27a2::/44", "55644"}, + {"2600:9000:1e1f::/42", "16509"}, + {"2604:9f00::/32", "27364"}, + {"2607:f8e0::/32", "21947"}, + {"2a01:7b60::/32", "48223"}, + {"2a04:440::/32", "12324"}, + {"2a0f:ad40::/32", "41090"}, + {"2001:559:c1ca::/48", "21508"}, + {"2001:df0:30f::/48", "9255"}, + {"2409:807e:1100::/36", "9808"}, + {"240a:afda::/32", "146708"}, + {"2602:fcd3:1::/48", "212934"}, + {"2607:2480:b::/48", "46887"}, + {"2a02:28f8::/48", "31323"}, + {"2a0e:46c4:2500::/40", "142039"}, + {"2620:100:6011::/42", "19679"}, + {"2806:2f0:93e3::/37", "17072"}, + {"2a02:26f7:ba::/48", "36183"}, + {"2001:4998:ef71::/40", "10310"}, + {"2404:4e40::/47", "136429"}, + {"2404:bf40:e903::/40", "139084"}, + {"2804:517c::/32", "268455"}, + {"2a02:26f7:49::/48", "20940"}, + {"2406:e400:deae::/41", "7642"}, + {"2600:1417:3c::/48", "24319"}, + {"2600:6c21:803::/45", "20115"}, + {"2606:2800:647::/48", "15133"}, + {"2620:0:d50::/48", "17244"}, + {"2a09:6800::/29", "50308"}, + {"2001:559:55a::/48", "33651"}, + {"2001:df0:d080::/48", "134337"}, + {"2402:68c0:a000::/36", "137432"}, + {"2607:fe28:5040::/32", "53347"}, + {"2a01:5a60::/32", "200487"}, + {"2a05:b680:1::/48", "34450"}, + {"2001:fd8:301e::/47", "132199"}, + {"2600:1f70:1000::/40", "16509"}, + {"2409:8924:6500::/38", "56046"}, + {"240e:3ba:ac00::/35", "4134"}, + {"2610:e8:1901::/33", "6224"}, + {"2804:3138:d001::/43", "265000"}, + {"2a01:8840:85::/48", "207266"}, + {"2a0e:97c7:160::/48", "42394"}, + {"2001:559:8068::/48", "33657"}, + {"2001:559:c225::/48", "33491"}, + {"2606:2400:1003::/32", "36295"}, + {"2803:bc00::/39", "52438"}, + {"2804:4ccc:8000::/33", "267393"}, + {"2a05:52a0::/30", "201401"}, + {"2401:d800:5430::/41", "7552"}, + {"240a:a4a1::/32", "143835"}, + {"240a:ab2f::/32", "145513"}, + {"2600:380:ac80::/38", "7018"}, + {"2603:f840::/26", "397165"}, + {"2001:400:201:7::/57", "293"}, + {"2001:559:836b::/45", "7015"}, + {"2001:da8:e817::/48", "24368"}, + {"2400:9380:90c0::/44", "136167"}, + {"2401:c5c0:4::/41", "55492"}, + {"2804:1320::/32", "263517"}, + {"2a02:17f9::/32", "35548"}, + {"2a02:2430::/46", "39869"}, + {"2405:1c0:6111::/45", "55303"}, + {"2403:e100::/35", "58601"}, + {"2606:9780::/32", "394141"}, + {"2800:bf0:3044::/38", "27947"}, + {"2804:18:6068::/37", "10429"}, + {"2804:1c2c::/35", "262869"}, + {"2804:5720::/32", "268046"}, + {"2402:800:5d7f::/40", "7552"}, + {"240e:3b0:2800::/38", "4134"}, + {"2804:2778:5000::/36", "263903"}, + {"2a02:ac80:c1::/43", "25145"}, + {"2a04:f480:8000::/34", "25373"}, + {"240a:a76e::/32", "144552"}, + {"2602:fd45::/36", "398419"}, + {"2604:b500::/32", "11045"}, + {"2a0e:b107:ea2::/48", "134478"}, + {"2001:a48:8000::/36", "15851"}, + {"2400:9d80::/47", "58714"}, + {"240a:abe6::/32", "145696"}, + {"240a:acea::/32", "145956"}, + {"240a:ade3::/32", "146205"}, + {"2a03:90a0::/32", "49251"}, + {"2c0f:ede8::/34", "328510"}, + {"2001:4258::/32", "37084"}, + {"2401:d800:d422::/41", "7552"}, + {"2404:fa80::/32", "132111"}, + {"2605:4a40:e00::/32", "13786"}, + {"2605:9c40::/32", "23420"}, + {"2620:111:8000::/46", "32771"}, + {"2a00:1140:3::/38", "44806"}, + {"2001:510:20b::/45", "376"}, + {"2001:67c:210c::/48", "29683"}, + {"240a:ae4a::/32", "146308"}, + {"2600:40f1:102::/28", "701"}, + {"2607:9000:4000::/32", "11878"}, + {"2a01:53c0:ffe8::/47", "54994"}, + {"2a02:f58::/35", "49409"}, + {"2a09:bac0:497::/48", "13335"}, + {"2404:4e00:200::/47", "32787"}, + {"240e:1f:8002::/34", "58543"}, + {"2607:fe28:10::/48", "398119"}, + {"2803:a180::/32", "28118"}, + {"2804:9d4:7000::/32", "262996"}, + {"2a0f:3d80::/48", "30633"}, + {"2001:250:3000::/43", "24357"}, + {"2001:4388:6::/48", "202818"}, + {"2408:8956:e500::/40", "17816"}, + {"2600:1003:a810::/37", "22394"}, + {"2606:a9c0::/32", "399826"}, + {"2a02:c58::/32", "29217"}, + {"2a03:e140:41::/48", "44056"}, + {"2409:8c34:4500::/32", "9808"}, + {"2401:d800:5e90::/42", "7552"}, + {"2401:da40::/32", "134548"}, + {"2607:fa70::/34", "19855"}, + {"240a:a0ea::/32", "142884"}, + {"2a02:26f7:bdcc::/48", "36183"}, + {"2a02:5f81::/32", "8359"}, + {"2001:3c8:4007::/48", "137241"}, + {"2001:559:306::/48", "22909"}, + {"2a09:be45::/30", "211444"}, + {"2001:559:8064::/48", "7725"}, + {"2408:8957:ba00::/40", "17622"}, + {"2409:8a04:5400::/34", "24547"}, + {"2600:3500:1200::/31", "396998"}, + {"2605:e740:ff04::/46", "398710"}, + {"2a12:a1c0::/29", "400522"}, + {"2409:804f:3900::/32", "9808"}, + {"2a03:7380:6400::/42", "13188"}, + {"2a06:8040::/29", "41332"}, + {"2a09:3e40::/29", "41327"}, + {"2a0f:8647:b00b::/48", "212149"}, + {"2600:140f:3601::/36", "20940"}, + {"2605:9d80:9033::/48", "4809"}, + {"2a01:8840:61::/48", "207266"}, + {"2a10:9980:254::/48", "39110"}, + {"2408:8256:3b9b::/48", "17816"}, + {"2804:14d:5cde::/42", "28573"}, + {"2806:2f0:40e0::/39", "17072"}, + {"2a09:be40:3000::/46", "208483"}, + {"2a0a:fe00::/30", "207072"}, + {"2a0e:b107:12c0::/44", "141445"}, + {"2001:678:920::/48", "209487"}, + {"2001:b28:f23f::/48", "62014"}, + {"2001:df0:401::/48", "9357"}, + {"240a:aa13::/32", "145229"}, + {"2600:1806:419::/48", "16552"}, + {"2600:6c20:e59::/31", "20115"}, + {"2001:559:c50f::/48", "7922"}, + {"2401:d800:99e0::/38", "7552"}, + {"2a00:4d60::/32", "12969"}, + {"2a0c:7bc0::/29", "51092"}, + {"2a0d:1000::/29", "206264"}, + {"2402:ef2e:b::/31", "7633"}, + {"2804:5320::/32", "268565"}, + {"2a02:26f7:b640::/47", "36183"}, + {"2402:800:fa80::/42", "7552"}, + {"240a:a4b1::/32", "143851"}, + {"2605:a401:8b6b::/40", "33363"}, + {"2a02:26f7:ec::/48", "36183"}, + {"2404:b280:c000::/34", "141461"}, + {"240a:a656::/32", "144272"}, + {"2600:100e:a010::/39", "6167"}, + {"2605:a404:3c6::/42", "33363"}, + {"2001:579:bf07::/33", "22773"}, + {"2001:fd8:3380::/42", "132199"}, + {"2402:6800:3::/45", "55429"}, + {"240a:a782::/32", "144572"}, + {"2600:1a0f:2001::/32", "46650"}, + {"2400:4800::/32", "9790"}, + {"2403:eb00::/32", "132267"}, + {"2409:8010:3100::/30", "9808"}, + {"2409:8055:44::/48", "9808"}, + {"2604:d600:1c15::/46", "32098"}, + {"2607:f6f0:c000::/40", "29884"}, + {"2a02:26f7:bd41::/46", "20940"}, + {"2a02:26f7:d045::/46", "20940"}, + {"2a05:6440::/29", "49544"}, + {"2409:8910::/30", "9808"}, + {"240a:a5e2::/32", "144156"}, + {"240e:3bd:7a00::/32", "140313"}, + {"2605:a404:c0::/46", "33363"}, + {"2606:f900:a801::/37", "812"}, + {"2607:da00::/39", "15164"}, + {"2001:1248:a4e7::/43", "11172"}, + {"2001:4420::/32", "4782"}, + {"2401:f80::/32", "9268"}, + {"2602:fdb0::/36", "21853"}, + {"2a01:d0:31e::/35", "29632"}, + {"2a02:26f7:f641::/46", "20940"}, + {"2404:2440:dada::/48", "138521"}, + {"2408:8956:5c00::/40", "17622"}, + {"2806:230:4046::/36", "11888"}, + {"2001:67c:15d0::/48", "52201"}, + {"2001:c38:90b0::/39", "9931"}, + {"2602:ffa3::/36", "22921"}, + {"2800:160:1d4d::/43", "14259"}, + {"2a10:9400::/32", "212499"}, + {"2406:dd80::/35", "398704"}, + {"2407:3000:6e::/32", "17707"}, + {"240e:438:2a40::/37", "4134"}, + {"2804:3ca0::/32", "61599"}, + {"2a01:8840:9d::/48", "207266"}, + {"2a02:26f7:ecc4::/48", "36183"}, + {"2a02:f600::/29", "199139"}, + {"2001:5b0:5b00::/40", "6621"}, + {"2405:4000:800:2::/61", "38082"}, + {"2602:fe68:ff0::/44", "26370"}, + {"2607:fb50:1a00::/34", "22781"}, + {"2607:fdf0:5e22::/45", "8008"}, + {"2001:559:179::/46", "33650"}, + {"2408:8456:5e00::/42", "17622"}, + {"2804:14d:2483::/41", "28573"}, + {"2804:3e60:500::/38", "266592"}, + {"2a0a:4380::/29", "60924"}, + {"2404:8d06:2000::/40", "133543"}, + {"2600:1012:a120::/36", "22394"}, + {"2804:145c:501::/33", "263327"}, + {"2806:2f0:4341::/46", "17072"}, + {"2400:4d40:257::/39", "134204"}, + {"240e:44d:7600::/42", "140345"}, + {"2803:7dc0::/32", "265725"}, + {"2806:2f0:38c::/36", "17072"}, + {"2a00:4840::/29", "198967"}, + {"2604:f400:9::/48", "29930"}, + {"2c0f:e8e8::/32", "327750"}, + {"240a:a9eb::/32", "145189"}, + {"2804:4770:8000::/47", "267054"}, + {"2804:545c::/32", "268645"}, + {"2a00:1eb8:e000::/45", "8764"}, + {"2a01:bb24:100::/48", "14618"}, + {"2001:579:418c::/38", "22773"}, + {"2804:571c::/32", "268044"}, + {"2804:7e60::/32", "271620"}, + {"2409:8a3c:5100::/32", "24444"}, + {"2a06:3e87::/32", "198507"}, + {"2c0f:f7a8:8050::/48", "4134"}, + {"2001:a98::/42", "8517"}, + {"240e:c2:2000::/31", "4134"}, + {"2804:8fc::/32", "263043"}, + {"2804:15bc::/32", "28184"}, + {"2a02:26f7:d5c4::/48", "36183"}, + {"2a02:26f7:e90d::/46", "20940"}, + {"2001:67c:20d8::/48", "5603"}, + {"2403:3b40::/32", "55933"}, + {"2600:805:809::/38", "701"}, + {"2605:ed00:6887::/48", "3834"}, + {"2a02:2ad0:245::/46", "702"}, + {"2a10:8640::/31", "198525"}, + {"2804:e30:411::/45", "11338"}, + {"2a02:26f7:c2c9::/42", "20940"}, + {"2a02:26f7:ebc8::/48", "36183"}, + {"2001:1248:55bd::/46", "11172"}, + {"2600:100d:ff00::/44", "6167"}, + {"2801:176::/44", "19429"}, + {"2a01:2b0::/29", "12552"}, + {"2a06:96c0::/29", "60517"}, + {"2a0b:9f00::/29", "47973"}, + {"2001:678:3cc::/48", "206155"}, + {"240e:3be:3e00::/33", "140308"}, + {"2a02:e980:185::/44", "19551"}, + {"2a0f:cc81::/30", "208861"}, + {"2001:bf0::/41", "12732"}, + {"2001:13d0:100c::/38", "7303"}, + {"2405:200:300::/36", "55836"}, + {"240a:a47b::/32", "143797"}, + {"2602:fd00::/44", "147297"}, + {"2620:13a:d000::/36", "395605"}, + {"2a03:3700::/33", "15774"}, + {"2001:4950::/32", "20205"}, + {"2408:84f3:b640::/36", "17816"}, + {"240a:a712::/32", "144460"}, + {"2001:559:3ba::/48", "33657"}, + {"240a:a165::/32", "143007"}, + {"240a:a72a::/32", "144484"}, + {"240e:438:9c20::/43", "140647"}, + {"2600:1401:1::/46", "21342"}, + {"2600:6c10:20::/43", "20115"}, + {"2600:6c38:22a::/43", "20115"}, + {"2a02:26f7:b981::/46", "20940"}, + {"240a:ad26::/32", "146016"}, + {"2600:1806:319::/48", "16552"}, + {"2602:fd9a::/44", "54613"}, + {"2604:9a00::/32", "30633"}, + {"2607:f8f0::/40", "271"}, + {"2800:370:3::/48", "28006"}, + {"2806:370:8140::/42", "28403"}, + {"2a07:a880:4601::/46", "42675"}, + {"2a0d:5c80::/29", "200899"}, + {"2001:67c:1280::/48", "34883"}, + {"2001:44b8:604f::/48", "4739"}, + {"240a:aa89::/32", "145347"}, + {"2600:6c34:18a::/48", "33588"}, + {"2801:1f:b000::/48", "266715"}, + {"2a05:5f80::/29", "210855"}, + {"2402:3680::/32", "135543"}, + {"2606:2800:4ab8::/46", "15133"}, + {"2804:5ac4:2060::/43", "263432"}, + {"2a0b:4340:6::/48", "205603"}, + {"2a11:9c0::/32", "211075"}, + {"2001:579:1130::/41", "22773"}, + {"2800:160:222c::/41", "14259"}, + {"2a00:1eb8:c000::/48", "198651"}, + {"2a01:290::/32", "30781"}, + {"2001:1248:96b9::/41", "11172"}, + {"2001:1900:2385::/42", "3356"}, + {"2400:9380:8301::/48", "4134"}, + {"2403:b100:2013::/48", "394749"}, + {"2405:6e00:f840::/48", "133612"}, + {"2604:5500:e800::/38", "19165"}, + {"2a06:cd40:300::/48", "60781"}, + {"2402:3a80:1c70::/45", "38266"}, + {"240a:a843::/32", "144765"}, + {"2001:559:c0ef::/48", "33660"}, + {"2001:678:aa4::/48", "202297"}, + {"2001:1610::/32", "9008"}, + {"2803:4460::/32", "3549"}, + {"2001:df1:d900::/48", "136797"}, + {"2001:4bd8:52::/48", "199284"}, + {"2400:8500:5701::/48", "58791"}, + {"2404:dac0::/48", "140807"}, + {"2605:e900::/32", "122"}, + {"2804:40a0::/32", "265971"}, + {"2804:6164::/34", "262424"}, + {"2a03:1080::/32", "44395"}, + {"2a03:2480::/41", "41983"}, + {"2607:9e00:2002::/35", "30536"}, + {"2a04:4e40:5210::/41", "54113"}, + {"2001:559:83ec::/48", "7922"}, + {"2001:1980:2500::/33", "29838"}, + {"2804:13b0:2c00::/43", "263546"}, + {"2001:67c:150c::/48", "199302"}, + {"240a:af78::/32", "146610"}, + {"2604:82c0:1::/48", "62917"}, + {"2605:a404:c5f::/42", "33363"}, + {"2620:131:6000::/40", "16639"}, + {"2803:ec10:2::/32", "271880"}, + {"2a06:e881:7302::/40", "213151"}, + {"2406:8800:904b::/33", "17465"}, + {"2408:8459:fb00::/37", "17622"}, + {"240a:a64c::/32", "144262"}, + {"240e:c3:3000::/28", "4134"}, + {"2804:3f4::/32", "262407"}, + {"2a04:2e80:15::/48", "44272"}, + {"2a0b:90c0::/29", "205565"}, + {"2a0e:8f02:1040::/44", "204446"}, + {"2404:2440:abcd::/48", "138521"}, + {"2607:fb00::/32", "13760"}, + {"2620:103:2::/48", "27357"}, + {"2001:1878:401::/45", "4"}, + {"2407:f800:301::/37", "38182"}, + {"240a:a1dc::/32", "143126"}, + {"240a:a4e8::/32", "143906"}, + {"2804:214:8558::/38", "26615"}, + {"2a01:5880::/32", "20924"}, + {"2a06:bcc0:6::/44", "205272"}, + {"2001:d10:9400::/38", "135478"}, + {"2001:df6:6e80::/48", "142049"}, + {"2404:2600::/32", "4776"}, + {"2404:f900::/44", "58482"}, + {"2408:8456:a440::/38", "17816"}, + {"2600:1007:f100::/44", "6167"}, + {"2604:6600:2011::/37", "40676"}, + {"2001:49b8::/32", "21737"}, + {"2606:c000::/32", "2721"}, + {"2a02:970:3281::/32", "44002"}, + {"2a02:2778::/32", "35665"}, + {"2a02:6c20:810::/48", "208143"}, + {"2605:dec0::/32", "17303"}, + {"2804:5ba4::/32", "268860"}, + {"2001:250:5832::/48", "24363"}, + {"2402:d7c0:5::/46", "133234"}, + {"240a:a3cb::/32", "143621"}, + {"2a10:6700::/32", "399975"}, + {"2001:559:81c6::/48", "7016"}, + {"2001:559:c109::/48", "13367"}, + {"2804:79cc::/32", "271328"}, + {"2a10:1340::/29", "206775"}, + {"2001:df1:a800::/48", "133210"}, + {"2409:8c15:2100::/37", "56044"}, + {"240a:ab94::/32", "145614"}, + {"240e:45c:9300::/40", "140534"}, + {"2803:9800:b849::/40", "11664"}, + {"2804:502c::/32", "268373"}, + {"2804:6880::/32", "269696"}, + {"2001:559:7c4::/48", "7015"}, + {"2600:1f70:4000::/40", "16509"}, + {"2605:3380:4c00::/40", "12025"}, + {"2804:6844::/32", "269681"}, + {"2a04:3584::/30", "3308"}, + {"2001:250:7006::/47", "23910"}, + {"2001:559:b3::/45", "33490"}, + {"2409:8070:30ef::/43", "9808"}, + {"2803:c200:c200::/48", "22411"}, + {"2804:16a4::/32", "262977"}, + {"2a00:4020::/32", "24800"}, + {"2a00:de60::/32", "47999"}, + {"2001:559:8138::/47", "7725"}, + {"240a:a4cb::/32", "143877"}, + {"240e:e9:7800::/37", "4134"}, + {"2804:34e0::/32", "265486"}, + {"2a00:1728:d::/48", "198228"}, + {"2a04:6c40::/29", "5432"}, + {"2402:b400:4408::/42", "45960"}, + {"2404:e801:201b::/45", "55430"}, + {"2600:200a:3000::/48", "33517"}, + {"2a01:5a8:4:100::/46", "8866"}, + {"2a03:d000:8701::/46", "31133"}, + {"2c0f:f1a8::/32", "328237"}, + {"240e:3ba:7800::/39", "4134"}, + {"240e:438:4c20::/43", "140647"}, + {"2620:69:c000::/48", "62993"}, + {"2a02:26f0:c1::/46", "20940"}, + {"2a10:a100::/32", "16509"}, + {"2001:559:1af::/48", "33490"}, + {"2607:f6f0:9002::/39", "32323"}, + {"2a02:128:9::/48", "50685"}, + {"2405:3840::/32", "131957"}, + {"240e:904::/30", "23724"}, + {"2600:100c:d230::/34", "22394"}, + {"2600:6c38:820::/47", "20115"}, + {"2001:559:8164::/48", "33490"}, + {"2001:7fe::/32", "29216"}, + {"2001:df0:c180::/48", "139260"}, + {"2001:1248:b0a1::/48", "11172"}, + {"2001:4888:8023::/48", "6167"}, + {"2408:8956:d00::/40", "17816"}, + {"240a:a333::/32", "143469"}, + {"240e:983:1700::/48", "139201"}, + {"2602:fc71::/47", "400232"}, + {"2a09:9ec0::/48", "5606"}, + {"2001:67c:1380::/48", "61078"}, + {"240a:a41e::/32", "143704"}, + {"2600:6c10:f209::/46", "20115"}, + {"2a02:ee80:4290::/45", "3573"}, + {"2a0b:4d07:e01::/48", "44239"}, + {"2001:4998:65::/46", "10310"}, + {"2001:678:508::/48", "766"}, + {"240a:aefc::/32", "146486"}, + {"2610:30::/34", "30313"}, + {"2801:80:3550::/48", "268889"}, + {"2804:1b60::/32", "61724"}, + {"2804:4218:2100::/35", "267477"}, + {"2804:6f24::/32", "270641"}, + {"2a00:cf40::/32", "28902"}, + {"2a10:cc44:110::/48", "59922"}, + {"2001:250:84c::/48", "138182"}, + {"2402:6c80::/32", "23780"}, + {"2406:e000:321::/44", "23655"}, + {"2600:100a:9010::/40", "22394"}, + {"2602:fdf2::/36", "32639"}, + {"2620:27::/48", "10846"}, + {"2620:171:9::/48", "715"}, + {"2a0f:3cc7::/32", "59813"}, + {"2001:4430:4000::/39", "17853"}, + {"2401:803e:1000::/34", "9919"}, + {"2605:9700::/32", "46785"}, + {"2605:280::/32", "22709"}, + {"2804:5124::/32", "268433"}, + {"2a0c:93c0:8022::/48", "212465"}, + {"2001:559:554::/48", "20214"}, + {"2602:220::/32", "16532"}, + {"2a0c:7980::/29", "209372"}, + {"2a0f:5707:aaa0::/44", "205298"}, + {"240a:ab0d::/32", "145479"}, + {"2607:f480:411::/48", "27435"}, + {"2806:2f0:9ee1::/39", "17072"}, + {"2a0e:f7c0::/29", "57048"}, + {"2001:4bb8::/29", "8447"}, + {"240a:acd4::/32", "145934"}, + {"2620:103:200f::/48", "30539"}, + {"2800:bf0:8287::/44", "52257"}, + {"2a02:648::/32", "8804"}, + {"2a09:d2c1:a::/48", "209669"}, + {"2001:559:cd::/48", "33287"}, + {"2400:c540:c345::/37", "59238"}, + {"2603:c002:1610::/39", "31898"}, + {"2a00:8dc0::/32", "57811"}, + {"2a02:26f7:c884::/48", "36183"}, + {"2a02:26f7:d74d::/42", "20940"}, + {"2a02:cbe0::/31", "197029"}, + {"2a04:b647::/32", "28979"}, + {"2a0f:5701:3516::/48", "206499"}, + {"2406:ca00:1::/46", "4858"}, + {"2806:2f0:70a1::/46", "17072"}, + {"2a0e:fd40::/39", "44103"}, + {"2001:da8:e815::/46", "138373"}, + {"2408:8456:c040::/39", "17816"}, + {"2600:1009:b0f0::/44", "22394"}, + {"2a0a:1c00::/29", "207187"}, + {"2401:d800:5880::/42", "7552"}, + {"2404:f4c0:1101::/48", "24144"}, + {"2605:a404:2d9::/45", "33363"}, + {"2a00:4802:2800::/44", "13124"}, + {"2001:da8:e048::/37", "23910"}, + {"240a:a5e1::/32", "144155"}, + {"2804:4b0:110::/38", "262459"}, + {"2a03:5980::/32", "34391"}, + {"2a0b:4ec0::/29", "205692"}, + {"2001:4c30::/32", "9085"}, + {"2605:c900::/32", "26223"}, + {"2607:4300::/47", "55286"}, + {"2a00:afa0::/32", "62210"}, + {"2a03:d000::/39", "31213"}, + {"2407:9300:1::/45", "58765"}, + {"2a0a:90c0:104d::/43", "205080"}, + {"2401:4900:1bb0::/48", "45609"}, + {"240a:a645::/32", "144255"}, + {"2605:1bc0::/32", "16400"}, + {"2605:ae00::/33", "7819"}, + {"2804:11d4:800::/32", "263442"}, + {"2a0b:e7c0::/29", "205400"}, + {"2001:250:5060::/48", "24349"}, + {"2001:250:ff29::/31", "23910"}, + {"2001:559:330::/48", "7922"}, + {"240e:3bc:2800::/38", "4134"}, + {"2606:2800:4060::/46", "15133"}, + {"2806:230:6008::/48", "265594"}, + {"2806:2f0:30e1::/46", "17072"}, + {"2a01:a500:2567::/32", "42831"}, + {"2a06:1d00::/29", "30875"}, + {"2a0f:5940::/30", "209372"}, + {"2001:4878:b048::/48", "12222"}, + {"2a02:2698:5409::/38", "41843"}, + {"2a03:c20::/29", "50825"}, + {"2001:678:5a0::/48", "207946"}, + {"2408:8256:2d9c::/46", "17623"}, + {"240a:afb7::/32", "146673"}, + {"240e:438:8c40::/38", "4134"}, + {"2408:8456:7640::/36", "17816"}, + {"2a02:2b60:242::/32", "42947"}, + {"2001:fb0:109f:1a::/48", "7470"}, + {"2001:1938:3005::/39", "33438"}, + {"2408:840d:6c00::/42", "17621"}, + {"240a:a9b7::/32", "145137"}, + {"2800:be0::/38", "267848"}, + {"2804:135c::/32", "263530"}, + {"2a09:9443::/32", "206766"}, + {"2a10:5500:2002::/32", "33874"}, + {"2a11:6800:1::/48", "204957"}, + {"240e:438:5240::/37", "4134"}, + {"2804:e30:5e00::/39", "11338"}, + {"2a01:e14::/26", "12322"}, + {"2001:ee0:e600::/40", "45899"}, + {"2001:4d78:1900::/40", "15830"}, + {"2401:f980::/32", "63862"}, + {"240e:378:1a00::/34", "140330"}, + {"2600:6c38:72e::/47", "20115"}, + {"2804:853c::/32", "272566"}, + {"2a0b:6040::/32", "41821"}, + {"2401:d800:7d20::/41", "7552"}, + {"2a01:5580::/32", "29037"}, + {"2a11:7300::/29", "204790"}, + {"2409:8924:5700::/36", "56046"}, + {"240e:354:5c00::/34", "134419"}, + {"2620:171:6b::/45", "42"}, + {"2a00:c820::/32", "60330"}, + {"2a01:8840:c6::/44", "12041"}, + {"2a02:5440::/32", "198477"}, + {"240a:acf3::/32", "145965"}, + {"240e:44d:7440::/42", "140356"}, + {"2600:1488:c081::/38", "20940"}, + {"2602:fff9:f00::/40", "54839"}, + {"2605:a401:82b4::/41", "33363"}, + {"2803:4320::/32", "266734"}, + {"2806:265:5300::/37", "28481"}, + {"2a12:a140::/29", "400522"}, + {"2001:1a11:63::/45", "8781"}, + {"2001:2000:1000::/40", "3308"}, + {"240e:980:4200::/40", "58466"}, + {"2607:f898::/32", "13415"}, + {"2a02:6120::/32", "51333"}, + {"2a09:8280:50::/42", "40509"}, + {"2a10:ccc2:33::/36", "35619"}, + {"2001:559:8062::/48", "7922"}, + {"240e:3b9:9200::/36", "140317"}, + {"240e:3ba:8200::/35", "140316"}, + {"2604:d600:15da::/45", "32098"}, + {"2a02:2590::/32", "51615"}, + {"2400:1da0::/48", "140834"}, + {"2602:ff18:216::/48", "21973"}, + {"2804:1d68::/32", "264367"}, + {"2a00:99a0::/33", "28855"}, + {"2a04:78c0::/30", "24764"}, + {"2a0d:c740:1a::/48", "49367"}, + {"2600:6c7f:10::/48", "20115"}, + {"2a02:26f7:ba49::/42", "20940"}, + {"2001:559:1e7::/48", "33657"}, + {"2001:678:c::/48", "2484"}, + {"2001:4878:2228::/48", "12222"}, + {"2620:12c:7004::/48", "13652"}, + {"2a02:2498:9000::/47", "13213"}, + {"2401:4900:46a0::/44", "45609"}, + {"2605:b100::/40", "577"}, + {"2a02:26f7:dec8::/48", "36183"}, + {"2a03:a5a0:1::/48", "57152"}, + {"2a04:ebc0::/29", "30746"}, + {"2001:67c:2b4c::/48", "60218"}, + {"2409:8004:3116::/36", "24547"}, + {"2604:ca00:4b4::/41", "36492"}, + {"2607:fcd8::/42", "33182"}, + {"2801:140:10::/48", "42"}, + {"2804:248:4005::/46", "28598"}, + {"2a02:26f7:c003::/48", "20940"}, + {"2400:a980:6500::/36", "133111"}, + {"2405:11c0::/32", "134000"}, + {"240a:a6bd::/32", "144375"}, + {"2a05:bd40:d17::/48", "29264"}, + {"2a0f:cf00::/29", "30813"}, + {"2001:678:ba8::/48", "207722"}, + {"2a0e:1c40:1::/48", "208635"}, + {"2001:400:211:61::/36", "293"}, + {"2600:1008:d040::/36", "22394"}, + {"2804:5ce8::/33", "268938"}, + {"2606:5e00:f000::/36", "14576"}, + {"2620:20:8000::/48", "14618"}, + {"2a01:4280:2::/32", "31391"}, + {"2001:559:257::/48", "33287"}, + {"2804:14c:5700::/40", "28573"}, + {"2804:574:8::/34", "53013"}, + {"2804:2d48::/32", "265271"}, + {"2a09:5bc0::/29", "63023"}, + {"2001:559:4b9::/48", "33650"}, + {"240a:a80e::/32", "144712"}, + {"2a02:ee80:417e::/40", "3573"}, + {"2a05:d050:40a0::/44", "16509"}, + {"2804:1a90:9400::/33", "61868"}, + {"2a00:1da0:4004::/47", "51969"}, + {"2a02:240:100::/40", "28812"}, + {"2001:559:8744::/48", "7015"}, + {"2001:67c:2b14::/48", "29107"}, + {"2001:c20:c828::/43", "3758"}, + {"2001:1a11:74::/46", "42298"}, + {"2402:800:9ac5::/43", "7552"}, + {"240a:a2d0::/32", "143370"}, + {"240a:acf9::/32", "145971"}, + {"2607:f380::/36", "2152"}, + {"2a02:f200::/29", "33940"}, + {"2600:100e:ff20::/40", "6167"}, + {"2600:40f1:101::/48", "46639"}, + {"2603:7080::/28", "11351"}, + {"2606:8dc0::/32", "400202"}, + {"2804:5dc:48::/36", "53019"}, + {"2804:2fc0:6300::/32", "264910"}, + {"2001:250:1423::/38", "23910"}, + {"240a:a313::/32", "143437"}, + {"240e:a6:2000::/31", "4134"}, + {"2804:214:8408::/43", "26615"}, + {"2a01:5042:2003::/48", "202196"}, + {"2a10:c640:dead::/48", "211541"}, + {"2001:559:c1d9::/46", "33650"}, + {"2408:8957:8300::/40", "17816"}, + {"240a:ac83::/32", "145853"}, + {"2606:ff80:a::/48", "53259"}, + {"2804:f6c::/34", "263585"}, + {"2804:5b34::/32", "268827"}, + {"2804:692c::/32", "270253"}, + {"2a06:4100::/32", "206376"}, + {"2001:559:80cb::/48", "33657"}, + {"2804:1f3e::/32", "269324"}, + {"2a03:16e0::/32", "21235"}, + {"2a03:5640:f100::/42", "14618"}, + {"2001:da8:e80f::/48", "138373"}, + {"240a:a35c::/32", "143510"}, + {"2a03:54a0::/32", "49100"}, + {"240e:96c::/30", "4812"}, + {"2607:a680:f000::/36", "395092"}, + {"2620:132:f523::/38", "394977"}, + {"2804:161c:c00::/45", "263268"}, + {"2804:5410::/32", "268626"}, + {"2804:8564:2160::/43", "262313"}, + {"2806:2f0:9de1::/46", "17072"}, + {"2a01:4a0:51::/45", "201011"}, + {"2a02:26f7:efc9::/42", "20940"}, + {"240a:a9a4::/32", "145118"}, + {"2804:7f30:7c00::/32", "271672"}, + {"2a04:3080::/29", "29170"}, + {"2404:5d80:6000::/40", "54203"}, + {"2606:fe00::/32", "7828"}, + {"2a03:e600::/40", "1764"}, + {"2603:fc90::/26", "397165"}, + {"2800:160:21de::/42", "14259"}, + {"2a02:2370:8000::/48", "32787"}, + {"2a06:a005:20::/41", "210260"}, + {"2409:8054:3012::/47", "9808"}, + {"2001:4888:8064::/44", "22394"}, + {"2600:370f:3705::/42", "32261"}, + {"2806:2f0:7143::/42", "17072"}, + {"240e:6bb:1000::/36", "4134"}, + {"2a00:1caa::/32", "50673"}, + {"2804:38d0::/32", "266503"}, + {"2001:559:80aa::/48", "7922"}, + {"2401:d800:410::/42", "7552"}, + {"2409:8c79::/30", "9808"}, + {"2001:468:ce0::/44", "1312"}, + {"2001:4878:c037::/44", "12222"}, + {"2a01:398::/32", "24867"}, + {"2a06:c380::/29", "60721"}, + {"2401:b240::/46", "133001"}, + {"240e:97f:5000::/32", "4134"}, + {"2a00:efa0::/32", "6776"}, + {"2406:daa0:70c0::/44", "16509"}, + {"240a:a11e::/32", "142936"}, + {"2804:429c::/32", "267512"}, + {"2a02:26f7:fa00::/48", "36183"}, + {"2a0e:aa07:e200::/44", "210903"}, + {"2a10:ef40::/29", "212559"}, + {"240a:a1a0::/32", "143066"}, + {"2600:1408:f801::/31", "20940"}, + {"2602:802:b00c::/43", "397795"}, + {"2a04:2e80:21::/48", "44397"}, + {"2c0f:ed00::/48", "328442"}, + {"2a02:26f7:e184::/48", "36183"}, + {"2a09:bac0:131::/48", "395747"}, + {"2a0d:8240::/29", "210190"}, + {"2404:bf40:f001::/48", "2764"}, + {"240c:cb21::/32", "24360"}, + {"2801:80:2360::/47", "267310"}, + {"2a0e:97c0:381::/46", "211305"}, + {"2001:559:8450::/48", "33660"}, + {"2001:da8:ffd::/48", "24350"}, + {"2402:cf80:1000::/48", "62597"}, + {"2603:c0f0:2020::/39", "6142"}, + {"2607:f038:ffff::/48", "21527"}, + {"2a02:26f0:9e01::/39", "20940"}, + {"2402:e280:3da1::/45", "134674"}, + {"2406:e000:381::/44", "23655"}, + {"2607:f428:9140::/44", "19115"}, + {"2607:fd50::/32", "40015"}, + {"2001:559:15d::/48", "33491"}, + {"2001:df6:f400::/48", "132203"}, + {"240a:a6fd::/32", "144439"}, + {"240a:ad12::/32", "145996"}, + {"2602:fc97::/44", "399544"}, + {"2804:6c7c::/32", "270471"}, + {"2a02:26f7:bcd1::/42", "20940"}, + {"2a04:dcc0::/29", "201983"}, + {"2a10:b040:1::/45", "211582"}, + {"2a10:e780::/40", "212027"}, + {"2001:67c:27c::/48", "2494"}, + {"2001:13c7:7010::/48", "52224"}, + {"2408:8000:2::/47", "4837"}, + {"2607:f100::/32", "13776"}, + {"2804:6edc::/32", "270623"}, + {"2806:230:401a::/48", "265594"}, + {"2001:470:30::/48", "2033"}, + {"2401:8700:ff01::/45", "54994"}, + {"2402:1680:1::/46", "7590"}, + {"2804:1810:4000::/32", "263262"}, + {"2a02:2f00::/28", "8708"}, + {"2401:d800:a0::/41", "7552"}, + {"2401:d800:9d90::/42", "7552"}, + {"2603:40ff:4000::/36", "10578"}, + {"2801:140:fffe::/48", "262249"}, + {"2a02:26f7:1c::/48", "36183"}, + {"2001:559:8366::/47", "7015"}, + {"240a:a06a::/32", "142756"}, + {"240a:ac4f::/32", "145801"}, + {"2600:6c38:8c3::/44", "20115"}, + {"2a10:b740::/29", "202709"}, + {"2001:f28::/32", "9644"}, + {"2001:1248:98cb::/45", "11172"}, + {"2408:8026:480::/42", "17621"}, + {"2804:2990::/33", "264022"}, + {"2804:420c::/32", "267474"}, + {"2a00:8dc0:ff00::/45", "201029"}, + {"2403:ee00::/32", "9244"}, + {"2607:f930::/32", "675"}, + {"2804:4c14:ea01::/39", "267348"}, + {"2001:678:b64::/48", "30781"}, + {"240e:3:9000::/33", "4134"}, + {"2a03:9920::/32", "51546"}, + {"2a0d:8e40::/29", "40970"}, + {"2001:559:1c7::/48", "33287"}, + {"240a:a273::/32", "143277"}, + {"2a01:5420::/32", "199947"}, + {"2a01:74e0::/32", "205668"}, + {"2a0b:14c0:4::/48", "61273"}, + {"2a0f:6fc5:3e84::/48", "43694"}, + {"2620:149:a00::/48", "6185"}, + {"2a02:26f7:fa49::/42", "20940"}, + {"2a0b:4d07:1::/46", "44239"}, + {"2409:8d50::/30", "56047"}, + {"240e:964:e600::/36", "4134"}, + {"2600:370f:7164::/40", "32261"}, + {"2001:559:870a::/48", "33659"}, + {"2001:67c:2e88::/48", "198722"}, + {"2605:1c00:ff0::/44", "16787"}, + {"2804:254::/32", "262806"}, + {"2001:67c:2184::/48", "8365"}, + {"2405:9800:c903::/45", "45430"}, + {"2600:6c10:f22d::/46", "20115"}, + {"2604:2e8b:7c00::/32", "30036"}, + {"2803:9800:a905::/46", "11664"}, + {"2804:5c7c::/32", "268911"}, + {"2a11:7400:d1::/48", "3320"}, + {"2001:559:81ff::/48", "33657"}, + {"2401:3d00::/28", "17547"}, + {"240a:af1b::/32", "146517"}, + {"2a07:21c0::/29", "43260"}, + {"2a0c:b641:220::/46", "210890"}, + {"2a10:ccc0:300::/48", "56755"}, + {"2001:1a11:f0::/45", "42298"}, + {"2401:d800:b630::/41", "7552"}, + {"2402:800:5b9b::/42", "7552"}, + {"2803:d700:bb00::/33", "61461"}, + {"2804:72c4::/32", "270874"}, + {"2a02:27b8:2000::/48", "49278"}, + {"2a03:9d40:fe00::/39", "41095"}, + {"2a06:87c0::/29", "12655"}, + {"2001:67c:69c::/48", "47267"}, + {"2402:800:f780::/42", "7552"}, + {"2a02:26f7:bbc4::/47", "36183"}, + {"2a07:3500:1200::/48", "38915"}, + {"2803:d540::/32", "8053"}, + {"2a02:26f7:bd85::/46", "20940"}, + {"2001:559:823c::/48", "13367"}, + {"2001:559:c4fd::/46", "7922"}, + {"2001:67c:1370::/48", "29203"}, + {"240a:a64b::/32", "144261"}, + {"2a02:26f7:c204::/48", "36183"}, + {"2a10:8001:d000::/30", "8551"}, + {"2001:559:85e5::/46", "33491"}, + {"2405:ba00:887f::/48", "63295"}, + {"2407:7040::/32", "142299"}, + {"2600:140f:e00::/48", "9498"}, + {"2409:8008:d0::/47", "9808"}, + {"2803:6700:140::/48", "263210"}, + {"2a01:a280:8::/40", "35000"}, + {"2a02:2660::/32", "42459"}, + {"2a0b:b583::/48", "208175"}, + {"2001:559:107::/48", "7015"}, + {"2409:8904:d040::/42", "24547"}, + {"2804:1c3c::/32", "61642"}, + {"2a0d:97c0::/29", "208861"}, + {"2400:1d00::/32", "9656"}, + {"2804:43a8::/32", "267582"}, + {"2a01:c50f:43c0::/37", "12479"}, + {"2a09:3c00::/48", "6939"}, + {"240a:aa0a::/32", "145220"}, + {"2604:880:39f::/42", "29802"}, + {"2605:37c0:200::/34", "396469"}, + {"2605:a404:177::/44", "33363"}, + {"2408:8459:5e10::/42", "17623"}, + {"2804:10a4::/34", "263642"}, + {"2001:df1:8700::/48", "136735"}, + {"2404:b1:2000::/33", "9891"}, + {"2406:57c0:130::/47", "134672"}, + {"2804:114::/32", "262721"}, + {"2a0b:b87:ffe1::/48", "204994"}, + {"2a0e:eb00:1::/48", "43431"}, + {"2a0f:9400:7801::/46", "147028"}, + {"2001:16d8:deae::/34", "16150"}, + {"2401:4900:3360::/44", "45609"}, + {"2405:b900:3000::/48", "55701"}, + {"2607:f518:12e::/43", "46887"}, + {"2804:5b0::/32", "266181"}, + {"2a02:26f7:f88d::/46", "20940"}, + {"2a02:45c0:2::/45", "59675"}, + {"2408:8956:3c00::/40", "17622"}, + {"240e:3b6:c800::/37", "4134"}, + {"2804:3ea0:8100::/33", "266610"}, + {"240a:a67a::/32", "144308"}, + {"2806:2f0:80c3::/42", "17072"}, + {"2a04:4e40:5400::/48", "54113"}, + {"2a0e:6540:a16::/48", "208364"}, + {"2600:1406:8c00::/48", "35994"}, + {"2600:370f:5245::/44", "32261"}, + {"2602:fded::/36", "397472"}, + {"2608:c183:1::/48", "27066"}, + {"2800:9a0::/34", "14522"}, + {"2a02:dcc::/30", "31621"}, + {"2c0f:f368::/32", "327750"}, + {"2600:1008:9110::/36", "22394"}, + {"2607:fb10:5040::/48", "55095"}, + {"2620:84:2000::/48", "20344"}, + {"2804:31c0::/32", "262438"}, + {"2804:8454::/32", "272254"}, + {"2001:67c:56c::/48", "8925"}, + {"2406:8d40::/32", "138225"}, + {"2620:2b:e000::/48", "22697"}, + {"2001:250:2031::/48", "23910"}, + {"2001:559:8576::/48", "13367"}, + {"2001:559:8791::/46", "33652"}, + {"2001:559:c51a::/48", "7015"}, + {"2001:678:cc8::/48", "41427"}, + {"2001:e38::/32", "17934"}, + {"2402:800:7eb2::/41", "7552"}, + {"2404:5e40::/45", "137703"}, + {"2620:d0:8000::/48", "16411"}, + {"2620:11c:f::/48", "27647"}, + {"2c0f:5000::/32", "328745"}, + {"2606:7100:3100::/48", "395831"}, + {"2610:b0:4118::/47", "21433"}, + {"2620:6e:a007::/44", "397444"}, + {"2620:89:2000::/48", "394616"}, + {"2a02:73a0:70::/48", "201895"}, + {"2001:550:908::/47", "174"}, + {"2001:559:845b::/48", "33287"}, + {"2600:1417:21::/44", "20940"}, + {"2607:f6f0:8002::/40", "32550"}, + {"2a02:26f7:ba00::/48", "36183"}, + {"2401:4900:40f0::/44", "45609"}, + {"240e:a52:6400::/31", "4134"}, + {"2607:f2d8::/41", "18450"}, + {"2804:4ac8::/32", "267263"}, + {"2806:2f0:3441::/46", "17072"}, + {"2a02:2690::/32", "39783"}, + {"2a03:a5e0::/32", "51551"}, + {"2405:4d00::/32", "17416"}, + {"2409:8020:71::/40", "56046"}, + {"2602:fe9a:9::/48", "25687"}, + {"2804:4fbc::/32", "268346"}, + {"2a00:4802:1800::/44", "13124"}, + {"2a02:26f7:c409::/46", "20940"}, + {"2a02:27a9::/32", "21100"}, + {"2a09:8780::/29", "209737"}, + {"2a10:6ac0::/29", "49735"}, + {"2408:84f3:4610::/42", "134543"}, + {"240a:afc7::/32", "146689"}, + {"2602:fe41::/36", "393434"}, + {"2605:a404:2df::/39", "33363"}, + {"2607:fc48:420::/48", "40009"}, + {"2803:c400::/32", "52308"}, + {"2804:1db0::/32", "264386"}, + {"2804:5cc8::/39", "268930"}, + {"2a02:c200::/47", "51167"}, + {"2a05:14c0::/29", "28686"}, + {"2a07:e140::/29", "50582"}, + {"2a0f:9400:802d::/48", "53356"}, + {"2a0f:eb80::/47", "47267"}, + {"2001:559:7e1::/48", "7725"}, + {"240e:fb::/32", "4134"}, + {"2607:fb10:2033::/45", "55095"}, + {"2800:370:5::/48", "28006"}, + {"2804:2698::/32", "263841"}, + {"2804:68f8::/32", "270240"}, + {"2001:470:2b::/48", "12266"}, + {"2001:559:4fe::/48", "7922"}, + {"2a0c:8fc4::/30", "202401"}, + {"2a0f:9340:1a::/48", "1299"}, + {"2001:559:c1c0::/47", "7922"}, + {"2604:dbc0::/32", "21777"}, + {"2620:116:801a::/45", "27281"}, + {"2a05:2740::/29", "47176"}, + {"2404:5bc0::/32", "138596"}, + {"2404:8d02:1041::/45", "9587"}, + {"2607:2080::/32", "11678"}, + {"2800:24::/32", "14187"}, + {"2804:4170::/39", "267433"}, + {"2a01:8840:c1::/48", "207266"}, + {"2a02:1d8::/32", "20953"}, + {"2a0d:c600::/29", "35826"}, + {"2804:7ed8::/32", "28232"}, + {"2001:559:816c::/48", "7016"}, + {"2001:16a2:4000::/44", "39386"}, + {"2001:4268:120::/43", "15964"}, + {"2800:bf0:b2::/41", "27947"}, + {"2803:e560::/32", "262186"}, + {"2001:df2:7580::/48", "139903"}, + {"2001:1980:6100::/38", "29838"}, + {"2001:4b20:ca1f:1::/31", "34288"}, + {"2800:160:10da::/42", "14259"}, + {"2801:1fc:18::/48", "27951"}, + {"2a01:4a40::/32", "44814"}, + {"2001:559:841b::/48", "33657"}, + {"2402:e380:115::/44", "139073"}, + {"2a05:3580:ca00::/37", "35807"}, + {"2a0a:98c0::/29", "208571"}, + {"2a0b:d9c0:164::/46", "49544"}, + {"1900:2100::2a2c/126", "3356"}, + {"2001:559:204::/48", "33491"}, + {"240a:abff::/32", "145721"}, + {"2600:141b:1801::/34", "20940"}, + {"2801:18e::/48", "271845"}, + {"2804:ad4:d100::/34", "52925"}, + {"2001:db0:4003:ffff::3/37", "17766"}, + {"2001:dc7:cd1b::/35", "24151"}, + {"2603:f4e0::/27", "397165"}, + {"2606:2800:4233::/48", "15133"}, + {"2804:204:229::/45", "28186"}, + {"2001:559:c369::/48", "33651"}, + {"2001:1ad8::/32", "12552"}, + {"2405:2a00::/32", "55388"}, + {"2602:ff41::/36", "395176"}, + {"2804:5690::/32", "268009"}, + {"2a02:26f7:e6c4::/48", "36183"}, + {"2a02:26f7:edc0::/48", "36183"}, + {"2a0a:48c1::/32", "29422"}, + {"2408:8459:2640::/40", "17623"}, + {"2602:fdbf::/48", "397550"}, + {"2a03:2a80::/30", "47232"}, + {"2001:470:de::/48", "8046"}, + {"2001:559:213::/48", "7922"}, + {"2a02:2698:4400::/38", "42116"}, + {"2001:559:8383::/48", "33287"}, + {"2409:8a53:b00::/37", "56047"}, + {"2806:2f0:6083::/42", "17072"}, + {"2a00:11c0:82::/45", "42473"}, + {"2803:d100:e380::/41", "52362"}, + {"2a02:26f0:33::/48", "34164"}, + {"2a02:26f7:f9c1::/46", "20940"}, + {"2001:559:817a::/47", "33668"}, + {"2001:4d78:fe01::/44", "15830"}, + {"2620:75:6000::/48", "397800"}, + {"2804:145c:c210::/39", "263327"}, + {"2a02:26f7:c60a::/47", "20940"}, + {"2402:800:51c5::/43", "7552"}, + {"2407:5200:201::/46", "55915"}, + {"2409:8031:2a00::/29", "9808"}, + {"2606:82c0:500::/40", "32167"}, + {"2606:e800:400::/32", "25843"}, + {"2620:130:3025::/46", "62861"}, + {"2806:2f0:3123::/41", "17072"}, + {"2a02:22c0::/32", "43045"}, + {"2a03:6947:c00::/40", "12400"}, + {"2a0a:27c0::/32", "47217"}, + {"2402:7800:204::/34", "4826"}, + {"2a0e:1c80:a::/48", "1299"}, + {"2001:559:80ae::/48", "7016"}, + {"240a:a163::/32", "143005"}, + {"2a00:1bb0::/32", "28768"}, + {"2a0f:9400:7389::/48", "210337"}, + {"240a:a78b::/32", "144581"}, + {"2804:1040:f700::/36", "263626"}, + {"2a02:2560:a2::/32", "21127"}, + {"2001:559:86d9::/48", "33652"}, + {"2403:fc00:300::/40", "4826"}, + {"240a:af1d::/32", "146519"}, + {"2620:7e::/46", "22414"}, + {"2804:2188::/32", "61789"}, + {"2a01:c50f:fc40::/40", "12479"}, + {"2a02:2e02:2460::/40", "12479"}, + {"2001:559:8693::/48", "7015"}, + {"2600:805:461::/36", "701"}, + {"2607:1280:11a0::/43", "394972"}, + {"2800:300:6500::/40", "27651"}, + {"2a0d:f803:8f00::/40", "20278"}, + {"2a0e:b107:1787::/48", "142553"}, + {"2804:403c::/32", "265946"}, + {"2804:6650::/32", "269548"}, + {"2a0e:46c4:22a5::/44", "136918"}, + {"2600:140f:ac00::/48", "55836"}, + {"2600:370f:342b::/41", "32261"}, + {"2a0c:5000::/34", "60502"}, + {"2405:7f00:a900::/38", "133414"}, + {"2407:7200:2::/33", "10098"}, + {"2800:270::/32", "26610"}, + {"2806:2f0:2421::/48", "22884"}, + {"2a02:88d:810f::/48", "47794"}, + {"2a0e:7e40::/29", "208349"}, + {"2404:d400::/32", "38193"}, + {"2a02:26f0:1::/48", "34164"}, + {"2620:0:280::/48", "19783"}, + {"2a03:3f40:89::/48", "208685"}, + {"2a03:f440::/32", "12552"}, + {"2a0d:5642:117::/48", "35487"}, + {"2403:300::/37", "714"}, + {"2409:8904:6740::/42", "24547"}, + {"240a:a260::/32", "143258"}, + {"240a:a81a::/32", "144724"}, + {"2402:8100:2580::/43", "45271"}, + {"2405:8a00:20c4::/42", "55824"}, + {"2600:1f01:4840::/47", "16509"}, + {"2600:6c38:831::/44", "20115"}, + {"2804:3814::/32", "266454"}, + {"2804:5344::/32", "268573"}, + {"2a02:26f0:fe::/47", "20940"}, + {"2a02:26f0:e501::/38", "20940"}, + {"2a06:3280::/31", "201722"}, + {"2a0c:b641:571::/48", "24239"}, + {"2001:579:523c::/41", "22773"}, + {"2001:df0:3140::/48", "142348"}, + {"2400:b000:1000::/48", "135162"}, + {"240e:721::/29", "4134"}, + {"2620:109:1000::/40", "16958"}, + {"2804:3428::/32", "265439"}, + {"2804:3f94::/32", "262452"}, + {"2a06:b280::/29", "199213"}, + {"2001:da8:d026::/37", "23910"}, + {"2806:2f0:9603::/39", "17072"}, + {"2a03:ff40:4ed2::/32", "61102"}, + {"2a06:1680::/29", "207560"}, + {"2a0f:5100:a01::/48", "20473"}, + {"2c0f:fc88:2f::/43", "36992"}, + {"2001:e60:d8b0::/45", "4766"}, + {"2401:d800:56e0::/39", "7552"}, + {"2600:1002:b150::/40", "22394"}, + {"2801:10:800::/48", "18747"}, + {"2804:6ec0::/32", "28293"}, + {"2001:559:c287::/48", "33652"}, + {"2001:67c:4dc::/48", "201471"}, + {"2001:df1:2280::/48", "139588"}, + {"2001:4210:9816::/33", "25818"}, + {"2402:800:fb70::/40", "7552"}, + {"2600:1480:6801::/37", "20940"}, + {"2607:f740:e627::/44", "63911"}, + {"2620:79::/46", "30013"}, + {"2a00:8740:700::/40", "206680"}, + {"2a0f:e580::/48", "197424"}, + {"2c0f:f930::/32", "39287"}, + {"2404:1a3:1003::/32", "24334"}, + {"2602:107:2710::/48", "20115"}, + {"2607:a800:213::/45", "15695"}, + {"2001:559:835b::/48", "33659"}, + {"2001:df6:9000::/48", "59256"}, + {"2610:b0:4115::/46", "3573"}, + {"2804:7c::/46", "28585"}, + {"2804:2f04::/32", "264866"}, + {"2804:7968::/32", "271303"}, + {"2a04:2b40::/29", "56515"}, + {"2a04:c442:6400::/40", "2047"}, + {"2a04:f580:8290::/48", "4134"}, + {"2a0e:b107:23f::/48", "209419"}, + {"2403:1cc0::/48", "45352"}, + {"240a:ae0d::/32", "146247"}, + {"2a00:6ec0:300::/37", "56837"}, + {"2a05:3c80::/29", "47447"}, + {"2a0e:6340::/29", "58154"}, + {"2400:ca02:f138::/31", "23688"}, + {"2407:9440:52::/42", "141626"}, + {"2604:d600:1641::/46", "32098"}, + {"2a01:71a0::/32", "208988"}, + {"2a02:2498:e000::/45", "13213"}, + {"2001:559:c45a::/48", "7922"}, + {"240a:acc9::/32", "145923"}, + {"2803:d010:f::/32", "271806"}, + {"2804:14c:486::/44", "28573"}, + {"2804:2c0:7f01::/32", "262834"}, + {"2804:4f8:a00c::/40", "28263"}, + {"2804:53c8::/32", "268606"}, + {"2a01:c50f:b280::/39", "12479"}, + {"2001:559:c10c::/48", "7922"}, + {"2001:16a2:6200::/40", "25019"}, + {"2a0e:c4c0::/29", "51711"}, + {"2a10:4646:120::/44", "52073"}, + {"2a10:8011::/28", "8551"}, + {"2001:559:834e::/48", "21508"}, + {"2a02:26f0:b701::/36", "20940"}, + {"2001:470:e8::/45", "6939"}, + {"2409:8062:2100::/36", "9808"}, + {"240a:a538::/32", "143986"}, + {"2607:fc58:1:75::/64", "13536"}, + {"2a05:a1c7::/32", "201155"}, + {"2001:67c:2e64::/48", "15542"}, + {"240a:a87f::/32", "144825"}, + {"2804:4580::/37", "266931"}, + {"2a02:26f7:ec04::/48", "36183"}, + {"2a02:cb80:2710::/48", "43766"}, + {"2405:6e00:4f0::/44", "133612"}, + {"2406:840:e0cf::/48", "141429"}, + {"2a02:b50:8002::/48", "393954"}, + {"2001:559:1cf::/48", "33660"}, + {"2607:fd78::/39", "26677"}, + {"2804:1724::/32", "263126"}, + {"2804:5dc8::/32", "268992"}, + {"2a03:3080:53::/48", "16244"}, + {"2a04:4e40:4200::/48", "54113"}, + {"2a06:b800:1000::/36", "48096"}, + {"2001:fb0:109f:8005::/64", "15133"}, + {"240a:ad76::/32", "146096"}, + {"240e:49:9000::/38", "134419"}, + {"2600:1003:f450::/36", "22394"}, + {"2804:2fc4:ff1e::/40", "264911"}, + {"240a:a68d::/32", "144327"}, + {"2804:23ac::/32", "264177"}, + {"2a02:26f0:c5::/46", "20940"}, + {"2a0b:d00:1::/46", "206886"}, + {"2402:800:33e0::/44", "7552"}, + {"2405:edc0::/48", "140746"}, + {"240a:a13a::/32", "142964"}, + {"240a:a4b6::/32", "143856"}, + {"240e:982:a300::/36", "4134"}, + {"2a00:7420:8000::/33", "208693"}, + {"2400:cb00:a460::/45", "13335"}, + {"2a01:8fb::/29", "3209"}, + {"2a0c:4480:c::/48", "204720"}, + {"2402:800:3e80::/42", "7552"}, + {"2600:6c38:b4e::/43", "20115"}, + {"2803:5ce0:500::/40", "271809"}, + {"2408:8459:bc10::/42", "17623"}, + {"240a:ab89::/32", "145603"}, + {"2607:f358:21::/48", "41095"}, + {"2620:135:5000::/45", "26457"}, + {"2a03:3780::/48", "203474"}, + {"2001:559:c372::/48", "7725"}, + {"2409:8752:300::/37", "56047"}, + {"2600:140b:9001::/38", "20940"}, + {"2800:1e0:1041::/42", "7195"}, + {"2a01:7d00::/32", "15450"}, + {"2404:f380:4::/36", "38614"}, + {"2803:18a0::/32", "266805"}, + {"2a02:26f7:fe::/48", "36183"}, + {"2a08:600:ee::/47", "206747"}, + {"2a0e:aa40::/46", "208408"}, + {"240e:45c:7500::/40", "140532"}, + {"2a02:8b8::/32", "15657"}, + {"2a02:26f7:cd09::/42", "20940"}, + {"2408:8456:4410::/42", "134543"}, + {"240a:a5be::/32", "144120"}, + {"2804:b58::/32", "52767"}, + {"2001:559:8609::/48", "7016"}, + {"2001:43f8:770::/46", "37501"}, + {"2402:3a80:18::/46", "38266"}, + {"2403:4800::/35", "9443"}, + {"2409:8087:5700::/36", "56040"}, + {"2620:107:90e1::/48", "22787"}, + {"2a00:4de0::/29", "202831"}, + {"2a0d:5600:38::/41", "9009"}, + {"2a0f:9300::/29", "198668"}, + {"2001:df3:a300::/48", "137267"}, + {"2804:1d20::/37", "264349"}, + {"2804:2bbc::/33", "265172"}, + {"2804:7e18::/32", "271602"}, + {"2a10:ae02::/48", "8767"}, + {"2001:559:3ac::/48", "21508"}, + {"2001:559:c333::/48", "7015"}, + {"2600:1480::/46", "21342"}, + {"2804:6d40::/32", "270520"}, + {"2a02:a8::/32", "9188"}, + {"2a02:26f7:bb89::/42", "20940"}, + {"2a09:402::/32", "208861"}, + {"2408:8459:a810::/42", "17623"}, + {"2409:f:f4::/48", "142502"}, + {"240c:ce05::/24", "23910"}, + {"2804:2910:10::/42", "263995"}, + {"2a02:d40:6::/48", "44592"}, + {"2a02:2698:9400::/38", "51819"}, + {"2a0e:a600::/29", "209050"}, + {"2402:8100:2140::/40", "45271"}, + {"2a02:26f7:c708::/48", "36183"}, + {"2a0b:b86:12::/48", "34692"}, + {"2001:428:4004::/48", "32571"}, + {"2804:3718::/32", "266389"}, + {"2a00:6480:8748::/48", "29018"}, + {"2a02:26f7:c8c9::/46", "20940"}, + {"2a03:8d20:8000::/48", "200849"}, + {"2a0a:7bc0::/32", "44066"}, + {"2001:559:8568::/48", "20214"}, + {"2001:4018::/32", "9150"}, + {"2407:8b00:9000::/36", "64073"}, + {"2a02:48::/32", "12969"}, + {"2c0f:fab0:1000::/48", "37492"}, + {"2001:559:33d::/48", "33668"}, + {"2001:559:8621::/48", "7922"}, + {"2001:559:86bf::/41", "7725"}, + {"2001:df4:8b00::/48", "137325"}, + {"2402:ef12::/32", "24397"}, + {"2a03:9900:100::/48", "20568"}, + {"2a09:4a40::/29", "62240"}, + {"2001:460::/44", "3561"}, + {"2001:559:4a5::/46", "33657"}, + {"240a:ab0a::/32", "145476"}, + {"240a:abab::/32", "145637"}, + {"2600:1004:a000::/42", "6167"}, + {"2602:ffc5:141::/48", "203027"}, + {"2804:6224::/32", "269278"}, + {"2a02:26f7:ea08::/48", "36183"}, + {"240a:afcd::/32", "146695"}, + {"240e:e:d000::/37", "139887"}, + {"2620:31:2009::/48", "53722"}, + {"2a05:b400::/32", "786"}, + {"2a0d:6940::/29", "47447"}, + {"2001:67c:290c::/48", "212113"}, + {"240e:438:aa20::/43", "140647"}, + {"2600:9000:118e::/43", "16509"}, + {"2804:42a8::/32", "267517"}, + {"2a02:cb43:9000::/47", "20546"}, + {"2a03:2880:f16a::/45", "32934"}, + {"2405:8a00:8030::/46", "55824"}, + {"2604:ca00:400::/42", "36492"}, + {"2800:c30::/32", "52361"}, + {"2a02:25a8:deae::/29", "12824"}, + {"2a0f:1e83:2::/32", "30633"}, + {"2001:559:74c::/48", "7922"}, + {"2604:b080::/32", "54665"}, + {"2804:6ca4::/32", "270482"}, + {"2a02:2658::/34", "20860"}, + {"2a0e:e2c2::/29", "42282"}, + {"2600:141b:b801::/33", "20940"}, + {"2804:dd0::/35", "28639"}, + {"2a02:26f7:cf::/48", "20940"}, + {"2a05:9480::/29", "202247"}, + {"2a0c:9a40:101d::/48", "202479"}, + {"2c0f:f3a0::/32", "327934"}, + {"2001:559:81f4::/48", "7922"}, + {"2001:678:9c0::/48", "50030"}, + {"2600:1419:16::/47", "20940"}, + {"2804:154c:5003::/44", "263382"}, + {"2001:1548::/38", "8280"}, + {"2401:d800:99b0::/41", "7552"}, + {"2409:807e:1900::/34", "9808"}, + {"240e:108:91::/48", "140061"}, + {"2607:f5d8:4::/43", "11096"}, + {"2620:f:1::/48", "3756"}, + {"2804:609c::/32", "269180"}, + {"2408:8956:9000::/40", "17622"}, + {"240e:105:e600::/39", "138982"}, + {"2a02:26f0:e601::/36", "20940"}, + {"2a05:3d80::/31", "59414"}, + {"2600:1004:9010::/40", "22394"}, + {"2604:9e00::/32", "27257"}, + {"2804:7078::/32", "270728"}, + {"2a10:ddc0::/29", "34907"}, + {"2001:1838:9001::/48", "13331"}, + {"2409:8054:69::/34", "56040"}, + {"240d:c000:1000::/34", "132203"}, + {"2607:fcd0:100:b200::/52", "8100"}, + {"2804:be4:c::/32", "52840"}, + {"2804:3858::/32", "266471"}, + {"2804:7158:c000::/34", "270783"}, + {"2a02:6b8:5::/46", "208722"}, + {"2a02:26f7:c2c8::/48", "36183"}, + {"2001:579:8a0::/41", "22773"}, + {"240a:aed4::/32", "146446"}, + {"2001:df0:41a::/48", "9509"}, + {"2408:8956:7b00::/40", "17816"}, + {"2602:fed5:3::/45", "27398"}, + {"2a10:7f00::/29", "399975"}, + {"2400:3b00:f::/48", "18229"}, + {"2405:f280::/47", "131464"}, + {"240a:a033::/32", "142701"}, + {"240e:86:3800::/33", "4134"}, + {"2600:d01:4000::/29", "20161"}, + {"2600:7400::/31", "29933"}, + {"2602:ff22::/36", "63297"}, + {"2604:9cc0:800::/38", "50131"}, + {"2a02:26f0:6601::/36", "20940"}, + {"2001:b08:b::/45", "3267"}, + {"2401:8000::/38", "9919"}, + {"2600:1488:60c3::/39", "20940"}, + {"2606:2800:533::/45", "15133"}, + {"2a01:8320::/32", "39636"}, + {"240e:105:ee00::/39", "58563"}, + {"2605:a401:89cc::/42", "33363"}, + {"2a02:26f7:c419::/42", "20940"}, + {"2402:4440:9c30::/40", "24423"}, + {"2804:4ea8::/32", "268275"}, + {"2403:27c0:5000::/48", "7586"}, + {"2404:5c80::/47", "59261"}, + {"2600:1403:4401::/35", "20940"}, + {"2606:a000:407::/48", "11955"}, + {"2803:3f40::/48", "264754"}, + {"2804:70fc::/32", "270760"}, + {"2001:470:9d::/42", "6939"}, + {"2405:aac0:52::/48", "139949"}, + {"240a:a2f3::/32", "143405"}, + {"240a:aa1f::/32", "145241"}, + {"2a00:11c0:3e::/48", "42473"}, + {"2a01:5f40::/32", "15682"}, + {"2a0d:940::/32", "39191"}, + {"2a0e:3c80::/29", "208909"}, + {"2a0e:46c6:4ff::/48", "209771"}, + {"2001:67c:2604::/48", "8447"}, + {"2408:840c:6a00::/40", "17621"}, + {"2603:c002:1010::/38", "31898"}, + {"2606:ae00:b1d8::/38", "7287"}, + {"2607:f748::/32", "32613"}, + {"2a02:2e02:2c20::/40", "12479"}, + {"2001:4170::/32", "13092"}, + {"2001:b000:595::/44", "3462"}, + {"2403:7e00::/32", "7546"}, + {"240a:acf2::/32", "145964"}, + {"240b::/26", "2516"}, + {"2607:f518::/39", "46887"}, + {"2804:54f8::/32", "268681"}, + {"2a02:6c40::/32", "29283"}, + {"2a04:4a43:4000::/34", "206067"}, + {"2a04:e802:12::/44", "57976"}, + {"2a10:dbc0::/29", "34907"}, + {"2408:8409::/40", "4808"}, + {"2408:8956:d240::/40", "17622"}, + {"240a:a76d::/32", "144551"}, + {"2a00:c1a0::/32", "16202"}, + {"2603:c0e8:2110::/40", "1218"}, + {"2604:3840::/48", "20061"}, + {"2804:14c:479::/40", "28573"}, + {"2804:13d0:1008::/32", "263297"}, + {"2001:559:c122::/48", "7015"}, + {"2403:d340::/32", "136462"}, + {"2409:896a:5800::/39", "9808"}, + {"2a02:26f7:d444::/48", "36183"}, + {"2a0d:ed80:101::/48", "3303"}, + {"2001:559:8498::/48", "33490"}, + {"2408:8360::/29", "4837"}, + {"2a04:4e40:8000::/48", "54113"}, + {"2600:140b:5401::/36", "20940"}, + {"2a0a:e5c0:1b::/48", "207996"}, + {"2001:1a11:9b::/42", "42298"}, + {"2401:ee00:121::/44", "23951"}, + {"2600:1413:1001::/36", "20940"}, + {"2a10:1fc0::/48", "133398"}, + {"2c0f:e8e0:4040::/42", "327926"}, + {"2001:fd8:33c0::/42", "132199"}, + {"240e:870::/44", "140485"}, + {"2800:bf0:3800::/46", "52257"}, + {"2804:4330::/32", "267554"}, + {"2a07:8d85::/30", "61110"}, + {"2a0a:fa40::/29", "210107"}, + {"2001:1248:5781::/46", "11172"}, + {"2001:1978:1e00::/40", "13768"}, + {"2600:370f:71a1::/46", "32261"}, + {"2a00:10f8::/32", "3347"}, + {"2a02:2698:3824::/38", "59713"}, + {"2407:8100:1::/48", "58436"}, + {"2409:8959:44::/32", "56040"}, + {"2602:fc62:a::/47", "399760"}, + {"2620:10f:b070::/48", "4185"}, + {"2a02:26f7:5::/48", "20940"}, + {"2a02:26f7:9e::/48", "36183"}, + {"2401:d9c0::/36", "64271"}, + {"240a:a4a3::/32", "143837"}, + {"240e:3bd:f700::/36", "4134"}, + {"2a05:1082:f000::/48", "211013"}, + {"2a0e:1040:1::/45", "208655"}, + {"2001:559:82dd::/46", "33287"}, + {"2a06:2780::/29", "204195"}, + {"2a0d:ca47::/47", "41195"}, + {"2001:1a11:81::/46", "42298"}, + {"2605:ba00::/32", "14638"}, + {"2a00:e10:2c00::/32", "61157"}, + {"2001:67c:1984::/48", "3303"}, + {"2001:5000:805::/38", "1273"}, + {"2408:836c::/30", "4837"}, + {"240e:3ba:7a00::/32", "140313"}, + {"2602:fff9::/40", "54839"}, + {"2607:fc50:5000::/36", "36236"}, + {"2620:13f:700c::/46", "59116"}, + {"2620:149:234::/41", "714"}, + {"2402:ee40::/47", "134033"}, + {"2600:8807:a0c2::/39", "22773"}, + {"2604:c0c0::/35", "14525"}, + {"2607:f9f0::/32", "14492"}, + {"2803:d900::/32", "262252"}, + {"2804:55dc:2000::/35", "267961"}, + {"2a0c:b641:280::/44", "60240"}, + {"2400:b300:2::/32", "38470"}, + {"2a01:bb20::/35", "61969"}, + {"2a02:26f7:d540::/48", "36183"}, + {"2a0c:8240::/47", "20853"}, + {"2a0d:f407:1001::/48", "209334"}, + {"2001:67c:2dfc::/48", "48004"}, + {"2a00:ba80::/32", "15557"}, + {"2001:559:8471::/48", "33659"}, + {"2800:bf0:82d4::/42", "27947"}, + {"2804:6f3c::/32", "270647"}, + {"2a02:26f0:89::/46", "20940"}, + {"2a02:26f7:d805::/46", "20940"}, + {"2001:559:c315::/48", "33651"}, + {"2404:f4c0:f900::/47", "139833"}, + {"2409:804c:3023::/45", "9808"}, + {"2606:18c0:4::/44", "14445"}, + {"2800:6f0::/37", "20207"}, + {"2804:124::/32", "28247"}, + {"2804:69bc:8000::/33", "270288"}, + {"2804:75a4::/32", "271060"}, + {"2001:678:cec::/48", "60557"}, + {"2404:cc00:8889::/35", "24441"}, + {"2600:1417:70::/48", "9498"}, + {"2606:3240:f800::/37", "399252"}, + {"2800:160:154b::/43", "14259"}, + {"2a06:9680::/41", "31293"}, + {"240a:ad98::/32", "146130"}, + {"2600:1406:44::/47", "20940"}, + {"2620:113:8045::/40", "3680"}, + {"2806:20d:5a09::/45", "32098"}, + {"2a02:cb80:4148::/47", "43766"}, + {"2402:800:9c1d::/42", "7552"}, + {"2a01:c50f:3dc0::/38", "12479"}, + {"2a02:ba0:1::/48", "12491"}, + {"2001:559:825f::/48", "33657"}, + {"2001:44b8:406f::/48", "4739"}, + {"2406:2800::/32", "18282"}, + {"2406:e300:4::/48", "40564"}, + {"2600:3005::/30", "13649"}, + {"2a0a:aac0::/29", "50599"}, + {"2408:84f3:3210::/44", "17623"}, + {"240e:308::/35", "137691"}, + {"2804:1488::/32", "28125"}, + {"2806:20d:1101::/44", "32098"}, + {"2a02:3f0::/32", "9189"}, + {"2a03:e780::/43", "39735"}, + {"2001:4f8:a::/48", "1280"}, + {"2001:4130::/48", "24725"}, + {"2403:1940:60::/48", "137935"}, + {"2409:8915:2800::/40", "56044"}, + {"2001:67c:2f54::/48", "197474"}, + {"2406:9840:1112::/32", "134053"}, + {"2408:840c:d200::/40", "17621"}, + {"240e:44d:5480::/41", "4134"}, + {"240e:978:e00::/40", "4134"}, + {"2806:230:200f::/48", "11888"}, + {"2a01:40c0::/29", "29608"}, + {"2a0c:3c00::/29", "204596"}, + {"2a10:2f00:15a::/48", "212237"}, + {"2620:11d:60c0::/46", "30548"}, + {"2a02:26f7:48::/48", "36183"}, + {"2a06:6500::/29", "204165"}, + {"2001:579:93c3::/36", "22773"}, + {"2610:b0:40d4::/47", "21433"}, + {"2804:2a60::/42", "263089"}, + {"2605:c00:900::/37", "46920"}, + {"2605:a401:81f8::/38", "33363"}, + {"2402:6800:731::/44", "22822"}, + {"2406:f3c0::/48", "135905"}, + {"2408:8000:c038::/45", "140726"}, + {"2600:380:ed00::/35", "7018"}, + {"2604:11c0:400::/40", "395822"}, + {"2a01:8640:1::/48", "61046"}, + {"2a06:dc80::/29", "202898"}, + {"2a0c:a9c7:4::/48", "64409"}, + {"2403:8940::/45", "135817"}, + {"240a:a2fa::/32", "143412"}, + {"240a:a351::/32", "143499"}, + {"2602:80b:7000::/44", "20473"}, + {"2801:80:3200::/48", "61572"}, + {"2804:241c::/32", "264202"}, + {"2804:3678::/32", "266350"}, + {"2804:7f34::/32", "271673"}, + {"2c0f:ef08::/32", "20459"}, + {"2404:3d00:413c::/46", "21433"}, + {"2409:806b:2100::/36", "9808"}, + {"2800:160:1eea::/45", "14259"}, + {"240a:aa48::/32", "145282"}, + {"240a:ad4a::/32", "146052"}, + {"2604:4d40:6a::/48", "213073"}, + {"2801:80:4d0::/48", "52834"}, + {"2409:8924:2300::/37", "56046"}, + {"240a:a90d::/32", "144967"}, + {"2a02:26f7:b705::/46", "20940"}, + {"2001:978:2:c1::b:0/112", "35277"}, + {"2a0f:b4c4::/32", "47596"}, + {"2001:559:839c::/48", "33661"}, + {"2001:1248:5b7f::/40", "11172"}, + {"2401:d800:7032::/41", "7552"}, + {"2a00:fd00::/32", "29695"}, + {"2a01:300::/43", "9009"}, + {"2a04:4e40:ac30::/41", "54113"}, + {"2001:4c38::/29", "15435"}, + {"2400:fa00::/32", "18065"}, + {"2404:bf40:8441::/42", "139084"}, + {"2405:7c00:1000::/32", "24028"}, + {"2600:1010:b0e0::/43", "22394"}, + {"2606:7e00:6::/48", "7215"}, + {"2620:84:8000::/48", "26830"}, + {"2800:160:199e::/41", "14259"}, + {"2a00:1e1f:ff00::/40", "212642"}, + {"2a05:4480::/29", "20853"}, + {"2a0e:46c0::/31", "57183"}, + {"2001:559:234::/47", "7016"}, + {"2a00:1708::/32", "49544"}, + {"2a02:26f7:f80c::/48", "36183"}, + {"2001:559:8654::/48", "33491"}, + {"2400:7400:e023::/45", "23736"}, + {"2408:84f3:e240::/37", "17816"}, + {"2804:4f8:cac9::/37", "28263"}, + {"2804:e34::/36", "61889"}, + {"2400:8700:105::/32", "55394"}, + {"2403:a040:f852::/48", "134823"}, + {"2408:8456:8840::/39", "17816"}, + {"2a09:2fc0::/29", "212144"}, + {"2001:559:82f6::/48", "33667"}, + {"2405:1ac0::/48", "18403"}, + {"2604:d600:651::/46", "32098"}, + {"2606:f780::/32", "394829"}, + {"2804:1d34::/32", "264354"}, + {"2a07:9b40::/48", "202698"}, + {"240e:18:12::/41", "4812"}, + {"2604:f440::/45", "397423"}, + {"2620:149:ae1::/48", "6185"}, + {"2806:2f0:324::/41", "17072"}, + {"2001:559:820a::/48", "33287"}, + {"2400:cb00:165::/44", "13335"}, + {"2409:8904:aa40::/39", "24547"}, + {"2a04:8e40::/29", "199927"}, + {"2001:559:26::/48", "33491"}, + {"2001:4580::/26", "4780"}, + {"2401:4900:3990::/44", "45609"}, + {"2402:800:f0e0::/39", "7552"}, + {"2406:3001:20:d::/46", "4657"}, + {"2408:8756:2cff::/48", "135061"}, + {"2607:ad00::/32", "30325"}, + {"2a00:b700:5::/48", "51659"}, + {"2a06:be80::/29", "24940"}, + {"2a07:f980::/47", "202310"}, + {"2001:da8:a8::/48", "24369"}, + {"2403:5800:4::/47", "4764"}, + {"2a02:26f0:4e00::/48", "34164"}, + {"2001:559:829c::/46", "7015"}, + {"240e:13:8800::/33", "4134"}, + {"2803:bc80::/42", "263202"}, + {"2a0c:93c0:8062::/48", "212465"}, + {"2400:adc5::/39", "9541"}, + {"240a:a783::/32", "144573"}, + {"2600:1415:e800::/48", "24319"}, + {"2001:470:f0::/48", "21589"}, + {"2001:559:7a8::/48", "33650"}, + {"2001:67c:2bb0::/48", "28674"}, + {"2001:dc7:2e00::/33", "24151"}, + {"2404:e00:161::/48", "15695"}, + {"2409:8053:3800::/47", "56047"}, + {"240e:45c:2900::/40", "137402"}, + {"2600:1001:d0d0::/34", "22394"}, + {"2804:67a4::/46", "269641"}, + {"2a00:1a28:100::/48", "48618"}, + {"2a09:b680::/32", "210625"}, + {"2a0e:dc00::/32", "208653"}, + {"2001:918:1000::/32", "3303"}, + {"2001:da8:253::/48", "24349"}, + {"2001:1248:97f9::/46", "11172"}, + {"2001:1548:207::/29", "8280"}, + {"2604:7ac0:900::/40", "398014"}, + {"2606:6680:7::/48", "40676"}, + {"2620:0:c80::/48", "1224"}, + {"2803:b0e0::/32", "269862"}, + {"2804:542c::/35", "268633"}, + {"2804:5ff0::/32", "269135"}, + {"2806:2f0:3141::/46", "17072"}, + {"2001:559:19b::/48", "33662"}, + {"2403:c00:700::/46", "17488"}, + {"2804:230c::/32", "264139"}, + {"2a00:17c8::/31", "12511"}, + {"2a04:4e40:e000::/48", "54113"}, + {"2a10:b940::/29", "5524"}, + {"2404:2000::/32", "23905"}, + {"240a:a9e5::/32", "145183"}, + {"240a:aec0::/32", "146426"}, + {"2602:feda:100::/47", "38008"}, + {"2620:4b::/48", "393523"}, + {"2800:c00::/32", "18747"}, + {"2804:29b4::/32", "264030"}, + {"2a00:13c0:202::/32", "29076"}, + {"2a0d:5dc0::/29", "12453"}, + {"2804:3dc:a2::/41", "52967"}, + {"2a0e:b107:550::/48", "207317"}, + {"240a:a50d::/32", "143943"}, + {"2804:6cd0::/32", "270494"}, + {"2001:559:83e4::/48", "7922"}, + {"2001:559:848b::/48", "33287"}, + {"240e:67b:1000::/37", "140330"}, + {"240e:964:9800::/34", "4134"}, + {"2a00:1588:dc00::/38", "43380"}, + {"2a02:ee80:418f::/43", "3573"}, + {"2408:840d:b800::/42", "17621"}, + {"2600:1008:b100::/42", "6167"}, + {"2620:ec:c000::/48", "394683"}, + {"2804:10b4::/47", "263645"}, + {"2620:1:c000::/48", "22773"}, + {"2a02:26f7:f5c9::/46", "20940"}, + {"2806:2f0:80e3::/39", "17072"}, + {"2a01:5d00::/32", "51918"}, + {"2a11:cfc0::/32", "5408"}, + {"2001:1900:2310::/41", "3356"}, + {"2405:6e00:2e00::/35", "133612"}, + {"240a:aa8f::/32", "145353"}, + {"240a:aac1::/32", "145403"}, + {"2a06:62c0:90::/32", "204138"}, + {"2402:8600::/32", "38896"}, + {"2600:140a:c001::/34", "20940"}, + {"2603:c0f8:2210::/40", "20054"}, + {"2606:9500:300::/36", "19893"}, + {"2a03:aa00::/36", "48176"}, + {"2a0c:98c0::/29", "49223"}, + {"2604:4500:100::/40", "29802"}, + {"2620:1f8:f0ef::/48", "40443"}, + {"2a02:26f7:e300::/48", "36183"}, + {"2a04:5d40::/29", "59767"}, + {"2804:297c:e001::/35", "262907"}, + {"2401:5f80:f000::/36", "38731"}, + {"2409:8051:2c00::/38", "9808"}, + {"2620:3b:4000::/48", "62681"}, + {"2804:33a4::/32", "265409"}, + {"2a02:cb80:2920::/48", "43766"}, + {"2001:4998:ef66::/44", "10310"}, + {"2400:6280:145::/46", "135381"}, + {"240a:ac2b::/32", "145765"}, + {"2607:a800:206::/48", "15695"}, + {"2804:5a1c::/32", "268749"}, + {"2a00:b740:5::/48", "13253"}, + {"2001:559:c134::/48", "33668"}, + {"2600:6c50::/30", "20115"}, + {"2407:7100::/32", "131149"}, + {"240e:438:8620::/43", "140647"}, + {"2602:ff66::/36", "394146"}, + {"2804:4ef4::/34", "268294"}, + {"2a01:b300::/29", "51678"}, + {"2a0b:4340:c8::/47", "44421"}, + {"2c0f:7800::/32", "60171"}, + {"2001:559:7a0::/48", "13367"}, + {"2400:bc00:1800::/48", "10115"}, + {"2401:7400:4020::/36", "4773"}, + {"2804:76e8::/32", "271142"}, + {"2001:628:2001::/29", "1853"}, + {"2001:df0:22c0::/48", "7603"}, + {"2604:2d40::/32", "53764"}, + {"2804:2d80::/32", "262378"}, + {"2001:559:81bd::/46", "7922"}, + {"2001:1a68:7::/48", "42503"}, + {"240a:a2c3::/32", "143357"}, + {"2804:741c::/32", "270959"}, + {"2a02:26f7:d648::/48", "36183"}, + {"2804:64c4::/32", "269447"}, + {"2001:559:2b6::/48", "33657"}, + {"2001:4528::/36", "18101"}, + {"2401:3c00:c0::/46", "38322"}, + {"2401:4900:5c90::/44", "45609"}, + {"2602:fc23:118::/47", "8095"}, + {"2607:7b00:3000::/33", "54643"}, + {"2803:5440:334::/48", "264738"}, + {"2804:4bb8::/32", "267326"}, + {"2a07:c600::/29", "199163"}, + {"2a10:7440::/29", "12552"}, + {"2402:ef23::/32", "7633"}, + {"2404:1fc0:1105::/32", "133217"}, + {"2605:6840:300::/32", "398041"}, + {"2620:10a:8055::/48", "394354"}, + {"2a01:111:202c::/46", "8068"}, + {"2a07:6fc6::/32", "204254"}, + {"2a0e:b107:1580::/48", "211013"}, + {"2605:6400:40::/48", "53667"}, + {"2806:1060::/32", "8151"}, + {"240e:97d::/36", "134763"}, + {"2600:6c10:f05d::/42", "20115"}, + {"2a00:16d8:52::/48", "52011"}, + {"2001:df7:5300::/48", "138115"}, + {"2404:55c0::/32", "17831"}, + {"2a0c:5b00::/29", "204970"}, + {"2a0f:23c7::/32", "35425"}, + {"2a10:e380::/32", "29066"}, + {"2600:370f:3082::/47", "32261"}, + {"2804:1468:9000::/33", "263328"}, + {"2408:8456:7040::/39", "17816"}, + {"240a:a33d::/32", "143479"}, + {"240a:ae86::/32", "146368"}, + {"2602:fd76::/36", "393986"}, + {"2605:500::/32", "823"}, + {"2607:f4e8:ac::/48", "38622"}, + {"2803:5ce0:b00::/37", "54235"}, + {"2a04:71c3::/29", "206583"}, + {"2a0c:5a80::/29", "57269"}, + {"2a0e:b107:900::/44", "20473"}, + {"2001:4457:ff1::/32", "9299"}, + {"240a:ae41::/32", "146299"}, + {"240e:3b0:f700::/36", "4134"}, + {"2a02:2e02:a1b0::/33", "12479"}, + {"2a0b:f600::/48", "56647"}, + {"2a0f:5701:3502::/45", "205593"}, + {"2001:5e0:1e::/47", "16713"}, + {"2409:8a50:500::/38", "56047"}, + {"240a:ae42::/32", "146300"}, + {"2620:f:6000::/48", "11509"}, + {"2a04:d180::/29", "42831"}, + {"240e:44d:6b40::/42", "140351"}, + {"2600:6c38:64::/44", "20115"}, + {"2620:106:8000::/44", "33309"}, + {"2a00:1288:84::/48", "203219"}, + {"2a00:1a08::/32", "25534"}, + {"2a02:26f7:cf45::/46", "20940"}, + {"2001:559:c411::/48", "33650"}, + {"2404:e6:230::/36", "703"}, + {"2001:67c:2f4::/48", "47137"}, + {"2401:ad00::/32", "18125"}, + {"2409:894a:a900::/37", "24445"}, + {"2803:9200::/32", "16592"}, + {"2804:42d4::/32", "267530"}, + {"2a04:3f80::/30", "9120"}, + {"2a0e:97c3:5b5::/48", "20473"}, + {"2001:559:840d::/48", "33657"}, + {"2a02:17c8::/32", "39648"}, + {"2a02:dc00:1::/46", "15493"}, + {"2a04:e800:5015::/46", "57976"}, + {"2620:125:9015::/48", "10780"}, + {"2804:14c:5fe9::/43", "28573"}, + {"2001:13c7:600a::/48", "52376"}, + {"2408:863c::/31", "4837"}, + {"2a01:c50e:5600::/36", "12479"}, + {"2604:a440:ffff::/48", "22549"}, + {"2803:6d00:8c00::/33", "52444"}, + {"2a0a:5900::/29", "30852"}, + {"2405:9800:c880::/48", "45458"}, + {"2406:9840:10::/35", "134053"}, + {"2409:8057:3018::/48", "9808"}, + {"2a02:cdc0::/29", "59715"}, + {"2a04:d040::/29", "48641"}, + {"2605:a900:b::/45", "46887"}, + {"2620:0:6b0::/48", "23028"}, + {"2806:2f0:4563::/40", "17072"}, + {"2001:13c7:6009::/48", "52332"}, + {"2402:7500:4ff::/48", "24158"}, + {"2408:8256:3491::/46", "17816"}, + {"240a:a523::/32", "143965"}, + {"2804:1288:f99a::/37", "263482"}, + {"2804:81dc::/32", "272481"}, + {"2806:2f0:47c1::/42", "17072"}, + {"2001:559:8413::/48", "7016"}, + {"2001:918:fffb::/45", "3303"}, + {"2401:d800:9ea2::/41", "7552"}, + {"2408:8456:ae40::/35", "17816"}, + {"2804:46c0::/32", "267009"}, + {"2a00:e10::/34", "61157"}, + {"2a0d:b201:3000::/42", "206026"}, + {"2801:80:1b60::/48", "266443"}, + {"2804:1ee8::/32", "264453"}, + {"2a00:9de0::/32", "60228"}, + {"2a0c:4187:8002::/33", "29854"}, + {"2001:559:81ab::/48", "33659"}, + {"2001:e60:8768::/43", "4766"}, + {"2400:a840::/32", "134090"}, + {"2a05:36c0:2::/48", "48809"}, + {"2402:6440:1::/46", "135905"}, + {"2409:8924:9700::/36", "56046"}, + {"2804:7f6c::/42", "271687"}, + {"2a0a:2584::/31", "206568"}, + {"2404:8d00:1020::/37", "24378"}, + {"240a:ae3e::/32", "146296"}, + {"2600:6c7f:9010::/48", "20115"}, + {"2606:5300::/32", "3367"}, + {"2a03:cc00::/36", "9183"}, + {"2a09:be40:3662::/48", "41108"}, + {"2001:559:8127::/48", "33660"}, + {"2001:559:8438::/48", "33650"}, + {"2001:559:c338::/48", "33659"}, + {"2001:4540::/31", "9924"}, + {"2600:1800:6::/44", "16552"}, + {"2600:6c38:455::/46", "20115"}, + {"2402:800:fc70::/40", "7552"}, + {"240a:a02e::/32", "142696"}, + {"240a:a09d::/32", "142807"}, + {"2602:fed2:730a::/45", "53356"}, + {"2804:2238:f00::/32", "264598"}, + {"2804:5160::/32", "268448"}, + {"2602:feb4:a0::/44", "25961"}, + {"2606:a500::/32", "10653"}, + {"2a06:480::/29", "200758"}, + {"2401:d800:9f40::/42", "7552"}, + {"2404:cc00::/45", "24441"}, + {"2605:4c40:119::/38", "30081"}, + {"2801:18a::/44", "19429"}, + {"2c0f:f2a0:3::/45", "327849"}, + {"2001:4490:7800::/46", "9829"}, + {"2800:1e0:1020::/46", "7195"}, + {"2806:2f0:10e0::/43", "17072"}, + {"2806:3c6::/32", "270148"}, + {"2a02:26f7:e0c0::/48", "36183"}, + {"2a02:2e02:8f30::/41", "12479"}, + {"2a03:4b27:f000::/36", "204320"}, + {"2001:678:298::/48", "2613"}, + {"2804:37f0:1100::/36", "266445"}, + {"2a02:7540::/32", "47359"}, + {"2a03:8820::/32", "200932"}, + {"2a0b:b480::/29", "43288"}, + {"2404:3d00:4118::/42", "3573"}, + {"2408:8957:5a00::/40", "17622"}, + {"2400:a980:cc::/48", "134169"}, + {"2404:8d06:9000::/40", "133543"}, + {"2600:6:ff40::/46", "10507"}, + {"2620:1bc:1025::/46", "7726"}, + {"2803:6700:10::/48", "263210"}, + {"2804:b:c00d::/48", "14840"}, + {"2407:7c0:100::/43", "9422"}, + {"2409:896a:8200::/39", "9808"}, + {"240e:ff:d000::/36", "58543"}, + {"2607:f318::/32", "7774"}, + {"2620:111:e008::/45", "27367"}, + {"2800:5a0::/32", "27792"}, + {"2001:da8:802b::/43", "24364"}, + {"2401:25c0::/32", "131918"}, + {"2804:2dac::/35", "265296"}, + {"2804:7de0::/32", "271588"}, + {"2c0f:e8e0:4070::/40", "327926"}, + {"2001:bf2::/29", "12732"}, + {"2803:f800:50::/45", "13335"}, + {"2001:4878:a141::/48", "12222"}, + {"2400:9fc0::/32", "136525"}, + {"2408:8459:1f50::/34", "17816"}, + {"2604:680::/32", "40281"}, + {"2a00:bd20::/32", "8455"}, + {"2a02:26f7:bd4d::/46", "20940"}, + {"2408:8459:9610::/42", "17623"}, + {"2604:d600:1818::/38", "32098"}, + {"2800:160:10f5::/39", "14259"}, + {"2804:4124::/32", "266006"}, + {"2a01:750::/47", "6702"}, + {"2a02:26f7:e741::/46", "20940"}, + {"2001:67c:8a0::/48", "24954"}, + {"2402:800:b8c0::/42", "7552"}, + {"2403:140::/32", "134113"}, + {"2804:7008::/32", "270702"}, + {"2a02:26f0:bf01::/33", "20940"}, + {"2620:107:904c::/48", "22787"}, + {"2804:1324::/32", "263518"}, + {"2804:2584::/32", "264285"}, + {"2a00:1ae8::/32", "42517"}, + {"2a12:d100::/29", "204790"}, + {"2400:7800::/32", "4713"}, + {"2401:d800:5ca2::/41", "7552"}, + {"240e:37d:2600::/32", "4134"}, + {"2804:2118::/32", "264533"}, + {"2804:40b0::/32", "265975"}, + {"2001:678:2e0::/48", "29686"}, + {"2001:43f8:c40::/48", "37578"}, + {"240a:ad06::/32", "145984"}, + {"2602:feda:cdc::/48", "141221"}, + {"2a00:8a00:2000::/35", "18666"}, + {"2a0a:d140::/29", "205919"}, + {"2001:253:132::/48", "142098"}, + {"2806:2f0:4421::/46", "17072"}, + {"2a02:26f7:be00::/48", "36183"}, + {"2001:559:c158::/48", "22258"}, + {"2404:a8:3ff::/48", "24514"}, + {"2408:8456:f000::/42", "17622"}, + {"2408:8957:d640::/40", "17622"}, + {"2800:160:10d4::/44", "14259"}, + {"2800:160:1b3f::/41", "14259"}, + {"2a05:4741:25::/48", "212520"}, + {"2606:d280::/32", "394625"}, + {"2800:160:1525::/44", "14259"}, + {"2804:4f58:8100::/33", "268321"}, + {"2a02:26f7:c30d::/42", "20940"}, + {"2a02:cb43:3000::/46", "20546"}, + {"2a06:6d00::/29", "22663"}, + {"2a0c:1480::/29", "16353"}, + {"2400:c0::/27", "4766"}, + {"2409:8904:6570::/40", "24547"}, + {"2620:101:402d::/48", "16880"}, + {"2800:484:7a00::/32", "10620"}, + {"2a00:5646::/32", "13030"}, + {"2401:7500:fff0::/47", "133296"}, + {"2603:c0f8:2a10::/40", "20054"}, + {"2a07:8780::/29", "211466"}, + {"2a12:a307:2::/48", "134666"}, + {"2408:8940::/32", "4837"}, + {"2409:8904:5b70::/40", "24547"}, + {"2600:140f:e401::/38", "20940"}, + {"2604:f3c0::/32", "27602"}, + {"2804:28f0::/32", "263988"}, + {"2804:5548::/32", "268700"}, + {"2a00:f7a0::/40", "21277"}, + {"2a10:22c0::/29", "206807"}, + {"2001:559:8442::/48", "7016"}, + {"2800:300:69a0::/32", "27986"}, + {"2804:6268::/32", "269295"}, + {"2607:6100:100b::/48", "398951"}, + {"2a00:5881:c000::/40", "51083"}, + {"2a01:5c40::/46", "12687"}, + {"2a0b:c200::/29", "24953"}, + {"2804:bd0:df::/32", "10670"}, + {"2804:3218::/32", "265055"}, + {"2a00:1c39::/32", "29014"}, + {"2a0d:8480:1::/48", "207651"}, + {"2602:feb4:80::/44", "25961"}, + {"2a02:26f7:be84::/48", "36183"}, + {"2a02:26f7:d851::/42", "20940"}, + {"2408:8957:8400::/40", "17622"}, + {"2a0e:8f02:f024::/48", "211521"}, + {"2600:6c2e:230::/39", "20115"}, + {"2804:4324::/32", "267551"}, + {"2406:b400:50::/44", "18209"}, + {"2804:1218:4000::/36", "263456"}, + {"2001:559:81b6::/48", "33287"}, + {"2a11:9180::/29", "204790"}, + {"2c0f:f828::/32", "37468"}, + {"2402:800:b160::/40", "7552"}, + {"2406:8000::/32", "17955"}, + {"240e:92a::/31", "58542"}, + {"2600:1003:a800::/44", "6167"}, + {"2a02:26f7:b6cc::/48", "36183"}, + {"2a02:21f8::/32", "8851"}, + {"2a02:26f0:df01::/34", "20940"}, + {"2a11:c80::/29", "208861"}, + {"2001:15e0::/32", "8897"}, + {"2405:af80::/32", "135559"}, + {"2407:ac00::/32", "45470"}, + {"2409:8054:28::/48", "9808"}, + {"2600:1404:1401::/36", "20940"}, + {"2a0c:e082::/43", "51095"}, + {"2a11:af02::/32", "208861"}, + {"2400:a980:c0::/48", "133111"}, + {"2401:d800:fd30::/41", "7552"}, + {"2600:1014::/32", "22394"}, + {"2602:ff3d::/36", "395214"}, + {"2804:204:20a::/45", "28186"}, + {"2804:248::/46", "28598"}, + {"2804:1564::/34", "52570"}, + {"2a02:638::/32", "34803"}, + {"2001:da8:e823::/48", "138373"}, + {"2001:44c8:4600::/43", "131445"}, + {"2803:5780::/32", "263720"}, + {"2a02:26f0:5d01::/38", "20940"}, + {"2404:5800::/39", "9911"}, + {"2409:8020:3032::/45", "56046"}, + {"2600:1008:b040::/42", "6167"}, + {"2620:3::/48", "14200"}, + {"2800:5f0:83e::/41", "22724"}, + {"2a00:14b0::/32", "13135"}, + {"2a0d:70c0::/29", "47995"}, + {"2804:360::/32", "53088"}, + {"2806:20f::/32", "28408"}, + {"240a:acb4::/32", "145902"}, + {"2804:49c8::/32", "267203"}, + {"2a0c:a9c7:8::/46", "41740"}, + {"2001:43f8:c1::/48", "37578"}, + {"2402:800:f290::/42", "7552"}, + {"2606:3380:212::/47", "53334"}, + {"2620:1ec:c11::/48", "8068"}, + {"2804:6b54::/32", "270393"}, + {"2a03:bcc0:1::/48", "197882"}, + {"2001:559:8634::/48", "33659"}, + {"2001:579:90a0::/44", "22773"}, + {"2409:8907:6b20::/37", "24547"}, + {"2804:15a4:1210::/32", "263400"}, + {"2a09:a700::/29", "209854"}, + {"2001:67c:21c::/48", "51090"}, + {"2001:67c:2104::/48", "9182"}, + {"2400:cb00:a800::/45", "13335"}, + {"2800:200:e221::/41", "12252"}, + {"2804:14c:7b00::/40", "28573"}, + {"2a0b:2900:3100::/38", "48582"}, + {"2a0e:6540:b0::/48", "208364"}, + {"2001:448a:10d0::/42", "7713"}, + {"240a:a1a7::/32", "143073"}, + {"2804:2384:d000::/34", "264167"}, + {"2806:103e:10::/48", "8151"}, + {"2a0d:5f00::/30", "31438"}, + {"2c0f:f9e0::/48", "37148"}, + {"2402:9e00::/37", "24183"}, + {"240c:c0a1::/29", "23910"}, + {"2600:1401:6001::/48", "20940"}, + {"2620:111:103d::/48", "18469"}, + {"2a00:1de8::/32", "48220"}, + {"2a0b:2d80::/32", "212521"}, + {"2a0e:97c0:5d0::/44", "210476"}, + {"2001:559:c4d2::/48", "7922"}, + {"2403:7940:fcc0::/48", "33353"}, + {"240a:a57e::/32", "144056"}, + {"2804:185c::/32", "52541"}, + {"2804:6ea0:8030::/34", "270609"}, + {"2a0e:5540:100::/48", "208258"}, + {"240a:a6ea::/32", "144420"}, + {"2803:a760::/32", "269855"}, + {"2a07:1980:13::/48", "25773"}, + {"2a09:6d00::/29", "209871"}, + {"2a10:c0c0::/29", "208861"}, + {"2a11:c500::/29", "42375"}, + {"2405:c0:1000::/47", "138881"}, + {"2607:f4e8::/45", "22822"}, + {"2804:2f88::/32", "264897"}, + {"2001:1388:8441::/42", "6147"}, + {"240a:a6b4::/32", "144366"}, + {"2801:1b:1800::/48", "10753"}, + {"2806:2f0:5241::/46", "17072"}, + {"2a0f:93c1:28::/29", "62240"}, + {"2001:388:cf86::/34", "7575"}, + {"2a02:2a68::/32", "702"}, + {"2a06:2600::/32", "20473"}, + {"2a10:3e40::/29", "204790"}, + {"2406:da00:2000::/40", "16509"}, + {"2620:10a:b080::/47", "15297"}, + {"2a02:26f7:d808::/47", "36183"}, + {"240a:a9ad::/32", "145127"}, + {"2804:4468::/32", "267631"}, + {"2001:559:3e7::/48", "7015"}, + {"2406:a1c0:100::/37", "131921"}, + {"2a01:6a0::/32", "13284"}, + {"2001:559:811e::/48", "33657"}, + {"2001:559:c1aa::/47", "7015"}, + {"2001:67c:1788::/48", "209295"}, + {"2409:8c20:816::/44", "56046"}, + {"2803:e580::/32", "61467"}, + {"2606:b600:104::/48", "12167"}, + {"2001:253:111::/48", "142077"}, + {"2605:b40::/32", "397142"}, + {"2804:14c:7981::/46", "28573"}, + {"2a02:970:1407::/41", "44002"}, + {"2a02:26f7:efc8::/48", "36183"}, + {"2a0e:b107:139::/48", "212227"}, + {"2c0f:eb58::/32", "36924"}, + {"2604:b000:f000::/36", "14638"}, + {"2620:a3:e030::/48", "39952"}, + {"2804:a54:2::/43", "262664"}, + {"2804:b18:8050::/40", "52941"}, + {"2804:b64::/32", "52770"}, + {"2804:13dc::/32", "262428"}, + {"2804:435c::/38", "267565"}, + {"2a02:26f7:32::/48", "36183"}, + {"2001:559:c152::/48", "33652"}, + {"2001:4490:ffc::/46", "9829"}, + {"2408:821a::/31", "4837"}, + {"240c:c002::/27", "23910"}, + {"2607:f4a8:200e::/32", "803"}, + {"2001:4c8:101e::/47", "15290"}, + {"2001:559:862b::/48", "7922"}, + {"2001:67c:176c::/48", "31725"}, + {"2001:ee0:8d40::/35", "45899"}, + {"240e:983:140c::/39", "4134"}, + {"2600:1415:f001::/37", "20940"}, + {"2a02:5940::/32", "42160"}, + {"2a09:400::/35", "208861"}, + {"2001:678:398::/48", "57560"}, + {"2409:8055:302a::/43", "56040"}, + {"2a02:26f0:fa01::/39", "20940"}, + {"2a06:1e00::/48", "60695"}, + {"2001:559:837f::/40", "33657"}, + {"2001:5a0:a000::/33", "6453"}, + {"2001:dc7:ffd3::/45", "24151"}, + {"2400:cb00:a173::/45", "13335"}, + {"2409:806a:5d00::/31", "9808"}, + {"240a:a778::/32", "144562"}, + {"2804:680:11::/44", "262589"}, + {"2a02:fe00::/29", "199332"}, + {"2001:559:81aa::/48", "7015"}, + {"2001:579:114::/42", "22773"}, + {"2409:8924:5300::/37", "56046"}, + {"2607:1280:14b0::/44", "394972"}, + {"2803:e880:bff1::/33", "52468"}, + {"2a02:26f0:bd00::/48", "34164"}, + {"2a09:9d00::/29", "201178"}, + {"2409:8057:303c::/48", "9808"}, + {"240a:a05a::/32", "142740"}, + {"2600:9000:2340::/46", "16509"}, + {"2804:14c:3b81::/44", "28573"}, + {"2804:1d1c::/40", "53196"}, + {"2806:20d:5035::/46", "32098"}, + {"2c0f:ed50::/32", "328468"}, + {"2408:8656:2ef2::/44", "17623"}, + {"2600:1017:a800::/44", "22394"}, + {"2606:9000::/32", "18618"}, + {"2a06:cdc0:2006::/44", "49941"}, + {"2a0e:b107:4d0::/47", "209083"}, + {"2408:8779::/34", "10206"}, + {"240a:aecf::/32", "146441"}, + {"2a02:26f7:eb81::/46", "20940"}, + {"2a09:bac0:282::/45", "13335"}, + {"2a0b:b87:ffd1::/48", "29802"}, + {"2001:4528:9100::/37", "18101"}, + {"2401:d800:5c80::/42", "7552"}, + {"240e:3b7:1200::/39", "4134"}, + {"2600:6c38:c0d::/46", "20115"}, + {"2607:3180:a001::/35", "14877"}, + {"2607:fad0::/42", "32244"}, + {"2800:160:1e26::/44", "14259"}, + {"2a02:26f7:ef09::/45", "20940"}, + {"2001:67c:262c::/48", "1103"}, + {"2605:4080::/32", "26077"}, + {"2606:11c0::/32", "398263"}, + {"2803:d100:e770::/44", "52362"}, + {"2806:2f0:5481::/46", "17072"}, + {"2a0f:8380::/29", "13045"}, + {"2402:4000:bbf9::/33", "18001"}, + {"2403:71c0:2000::/48", "23959"}, + {"2408:8957:4b00::/40", "17816"}, + {"2600:1002:b1e0::/33", "22394"}, + {"2600:140f:2600::/48", "9829"}, + {"2001:67c:978::/48", "2"}, + {"2804:204:32e::/37", "28186"}, + {"2a11:c600::/29", "48352"}, + {"240a:a4f1::/32", "143915"}, + {"2600:6c3a:842::/45", "20115"}, + {"2a05:4180::/29", "201436"}, + {"2001:3c8:5506::/32", "4621"}, + {"2409:8051:3000::/47", "56047"}, + {"240a:a493::/32", "143821"}, + {"2606:c480::/32", "22361"}, + {"2804:2d2c:fa00::/39", "52971"}, + {"2001:559:c096::/48", "33287"}, + {"240a:a32f::/32", "143465"}, + {"2a02:b50:4014::/34", "30282"}, + {"2a02:26f7:e605::/46", "20940"}, + {"2001:ee0:4a80::/34", "45899"}, + {"2400:1c00:310::/44", "45143"}, + {"2602:feb3::/47", "54116"}, + {"2803:7180:2000::/36", "21575"}, + {"2804:14d:b081::/45", "28573"}, + {"2804:3068::/32", "264949"}, + {"2804:6d30::/32", "262831"}, + {"2a07:e080::/29", "202347"}, + {"2409:896a:8400::/39", "9808"}, + {"2620:104:400c::/46", "15248"}, + {"2001:fd8:e8::/39", "4775"}, + {"2001:18c0::/32", "11290"}, + {"2a02:438::/32", "13132"}, + {"2a0d:2681:100::/37", "210842"}, + {"2001:418:149e::/36", "2914"}, + {"2001:559:2f::/48", "33491"}, + {"2409:8055:68::/48", "9808"}, + {"240a:aaa5::/32", "145375"}, + {"2804:428::/32", "28218"}, + {"2a03:a800::/32", "34762"}, + {"2001:67c:240::/48", "42473"}, + {"240a:a73d::/32", "144503"}, + {"2602:ff99:5::/48", "14333"}, + {"2800:bf0:a829::/48", "52257"}, + {"2a02:26f7:db41::/45", "20940"}, + {"240a:a19f::/32", "143065"}, + {"240a:a3ee::/32", "143656"}, + {"2607:f3a0:a009::/48", "399810"}, + {"2620:0:e58::/48", "3677"}, + {"2a04:17c0::/29", "43404"}, + {"2a0c:4182::/29", "29854"}, + {"2c0f:f078:100::/37", "327939"}, + {"2001:1a11:6b::/45", "42298"}, + {"2400:cb00:a7b0::/45", "13335"}, + {"2804:431:8000::/35", "27699"}, + {"2804:4428::/32", "267606"}, + {"2a11:57c0::/29", "1239"}, + {"2001:56b:800c::/34", "852"}, + {"2606:3600:105::/48", "16839"}, + {"2806:2f0:4683::/42", "17072"}, + {"2001:688::/32", "5511"}, + {"2405:fd80:f00::/35", "135391"}, + {"2406:2000:ef69::/48", "56173"}, + {"2409:8c20:b282::/33", "56046"}, + {"2409:8e30::/29", "9808"}, + {"2606:8940::/32", "398464"}, + {"2806:230:1004::/48", "265594"}, + {"2400:cb00:50::/45", "13335"}, + {"2408:8456:e040::/38", "17816"}, + {"2804:da4::/32", "27720"}, + {"2806:288:4090::/48", "28469"}, + {"2a00:1960::/32", "47608"}, + {"2001:550:9005::/48", "2637"}, + {"2407:b001:1011::/40", "24121"}, + {"2806:2f0:44c3::/42", "17072"}, + {"2001:559:8083::/45", "7922"}, + {"2402:8400:400::/40", "17820"}, + {"2408:840d:f00::/42", "17621"}, + {"2a02:ee80:4165::/44", "3573"}, + {"2a06:e881:112::/48", "205897"}, + {"2001:559:1d3::/48", "33287"}, + {"2001:678:bf8::/48", "29301"}, + {"2001:da8:bd::/46", "23910"}, + {"2602:ffb0:ffe::/48", "40676"}, + {"2804:694:4700::/36", "262596"}, + {"2a0f:9400:7340::/47", "209101"}, + {"2001:559:8591::/46", "7016"}, + {"2001:1a10::/47", "8781"}, + {"2402:800:5a71::/44", "7552"}, + {"240e:3b1:5600::/34", "136199"}, + {"2803:7610::/45", "271956"}, + {"2804:580::/33", "262518"}, + {"2001:448a:7030::/41", "7713"}, + {"2402:800:b070::/40", "7552"}, + {"2408:84f3:e440::/38", "17816"}, + {"2620:f0:c006::/47", "14148"}, + {"2804:8324::/32", "272179"}, + {"2a00:f480::/32", "2848"}, + {"2a0e:5480::/29", "16019"}, + {"2001:1b70:b1::/48", "8147"}, + {"2406:3003:1029::/45", "4657"}, + {"2607:9080:105::/48", "7018"}, + {"2804:6170::/38", "269234"}, + {"2001:ec0:400d::/40", "131293"}, + {"2001:44c8:45c0::/43", "131445"}, + {"2409:8a53:300::/37", "56047"}, + {"2605:2400:500::/32", "3361"}, + {"2804:7638::/32", "271097"}, + {"2a00:d90::/31", "12552"}, + {"2a05:4140:190::/48", "211358"}, + {"2a0e:3940:3200::/44", "207834"}, + {"2001:18b8:112::/48", "30361"}, + {"2602:fcb6::/36", "399392"}, + {"2804:56d4::/32", "268026"}, + {"2001:559:856b::/48", "7015"}, + {"2001:18b8:5::/48", "30361"}, + {"240a:ab9b::/32", "145621"}, + {"240e:1c:3000::/36", "136188"}, + {"2804:2d90:2200::/32", "52682"}, + {"2408:8456:5800::/42", "17622"}, + {"2804:bd8:cd00::/34", "52838"}, + {"2804:36a0::/32", "266360"}, + {"2a00:8760::/32", "60750"}, + {"2a07:dbc0::/32", "42422"}, + {"2001:559:48::/48", "33657"}, + {"2001:559:849f::/48", "33657"}, + {"2001:da8:263::/48", "23910"}, + {"2600:1488:41c2::/34", "20940"}, + {"2804:2330::/32", "264147"}, + {"2a02:26f7:da08::/48", "36183"}, + {"2a02:2810::/32", "15954"}, + {"2a07:7580::/29", "44558"}, + {"2a0c:f40::/32", "41451"}, + {"2001:df0:92::/48", "55479"}, + {"2409:8002:1100::/37", "9808"}, + {"2607:ffc8:0:5::/62", "17356"}, + {"2a00:1cd0:6::/48", "43408"}, + {"2001:559:809c::/48", "7922"}, + {"2001:67c:19f8::/48", "56879"}, + {"2001:1248:8477::/40", "11172"}, + {"240a:a1a3::/32", "143069"}, + {"240e:678:c400::/34", "4134"}, + {"2607:f678::/32", "13868"}, + {"2a00:cb8:33::/45", "15695"}, + {"2a05:81c0::/29", "2875"}, + {"2a0c:e640:5::/44", "211876"}, + {"2a0e:1106::/40", "62142"}, + {"2001:da8:5ff6::/44", "23910"}, + {"2402:9800:4007::/32", "38158"}, + {"2402:e280:2244::/47", "134674"}, + {"2602:fed2:7105::/48", "207393"}, + {"2401:2a00:2004::/32", "7468"}, + {"2804:68a0::/32", "269705"}, + {"2a02:26f7:e4c0::/48", "36183"}, + {"240e:45c:6500::/40", "140530"}, + {"2620:171:26::/47", "715"}, + {"2806:2f0:7163::/40", "17072"}, + {"2a04:a182::/32", "201301"}, + {"2a0f:9b80::/32", "210231"}, + {"2001:44c8:2001::/35", "45430"}, + {"240a:a07d::/32", "142775"}, + {"2804:5634::/32", "267983"}, + {"2001:559:11d::/46", "7725"}, + {"240a:ae5a::/32", "146324"}, + {"2602:fc23:130::/44", "142419"}, + {"2001:559:c27c::/47", "33652"}, + {"2405:4700::/32", "132426"}, + {"2408:820c::/34", "17621"}, + {"2a00:ce20::/29", "15600"}, + {"2001:559:8468::/48", "22909"}, + {"2600:1406:30::/48", "35994"}, + {"2602:fe5f::/36", "32899"}, + {"2801:1d:9000::/48", "264718"}, + {"2001:df4:6300::/48", "137487"}, + {"2001:49d0:8800::/33", "2495"}, + {"2600:6c7f:91e0::/44", "19115"}, + {"2606:6000:5000::/34", "20001"}, + {"2606:6c00:104::/44", "32787"}, + {"2a00:11c0:43::/45", "42473"}, + {"2a03:4bc0:3133::/48", "13214"}, + {"2001:559:780::/48", "33652"}, + {"240a:a40c::/32", "143686"}, + {"2607:fc58:1:33::/64", "13536"}, + {"2620:11b:e030::/41", "3356"}, + {"2804:2804::/36", "263935"}, + {"2804:80a4::/32", "271764"}, + {"2a12:2400::/29", "1239"}, + {"2001:67c:25d0::/48", "48061"}, + {"2409:896a:9600::/39", "9808"}, + {"2607:f110:6::/44", "21889"}, + {"2800:bf0:2205::/40", "27947"}, + {"2a01:5240::/31", "58243"}, + {"2a02:26f7:f341::/46", "20940"}, + {"2001:559:c212::/48", "33652"}, + {"2001:fd8:3180::/42", "132199"}, + {"2407:4800:c000::/34", "139759"}, + {"2600:140a:6000::/48", "812"}, + {"2801:80:22b0::/48", "267001"}, + {"2a02:6f40::/32", "199235"}, + {"2a0c:9b40::/29", "202499"}, + {"2001:559:8103::/48", "7922"}, + {"2400:4d40:2::/38", "134204"}, + {"2407:9240:2500::/40", "51044"}, + {"240a:61:e00::/48", "9605"}, + {"2607:4480:1::/46", "40470"}, + {"2607:f5b4::/32", "395954"}, + {"2620:171:52::/45", "42"}, + {"2a07:e740:dc11::/29", "43299"}, + {"2001:559:72::/48", "7725"}, + {"2001:559:28b::/48", "33489"}, + {"2001:559:8056::/48", "33491"}, + {"2804:4fd0::/32", "268351"}, + {"2001:250:3400::/48", "138438"}, + {"2001:559:830d::/48", "33661"}, + {"2404:e00:60::/46", "15695"}, + {"2404:3800:8::/46", "45459"}, + {"240e:44a::/29", "4134"}, + {"2a0c:3cc0::/32", "203936"}, + {"2001:49d0:100::/42", "18460"}, + {"2408:8345::/35", "140726"}, + {"240e:925:3000::/36", "132153"}, + {"2604:1380:4070::/40", "54825"}, + {"2607:f208:d000::/43", "398101"}, + {"2804:3b00::/32", "52973"}, + {"2a02:ee80:4078::/45", "3573"}, + {"2408:84f3:3020::/43", "17816"}, + {"2603:4:1010::/46", "44273"}, + {"2400:adc0:c130::/48", "9541"}, + {"2400:dcc0:ac04::/39", "38631"}, + {"2409:8904:cca0::/39", "24547"}, + {"240e:438:5c40::/38", "4134"}, + {"2804:14c:8789::/45", "28573"}, + {"2804:db0::/40", "52862"}, + {"2806:230:201b::/48", "11888"}, + {"2a01:1101:6::/28", "5617"}, + {"2a10:2ec0::/32", "210625"}, + {"2001:678:bc8::/48", "57078"}, + {"2001:67c:11b0::/48", "24711"}, + {"2804:752c::/32", "271028"}, + {"2a03:db80:4410::/48", "5501"}, + {"2a05:8a00::/29", "201178"}, + {"2401:d800:baf0::/39", "7552"}, + {"2606:a600::/46", "23005"}, + {"2804:176c::/32", "263098"}, + {"2a01:a2e0::/32", "3303"}, + {"2a10:eec0:c::/48", "7342"}, + {"2401:5400::/34", "4434"}, + {"2409:8915:5200::/39", "56044"}, + {"240e:3ba:ec00::/35", "140314"}, + {"2602:ffd9:200::/40", "62874"}, + {"2804:26ec::/32", "263864"}, + {"2a01:4080::/32", "42291"}, + {"2405:a840::/32", "38562"}, + {"2620:125:7006::/48", "53780"}, + {"2a02:26f7:e701::/46", "20940"}, + {"2a02:ac80:501::/38", "25145"}, + {"2001:559:b2::/48", "22258"}, + {"2001:1278::/44", "18734"}, + {"2402:800:3e60::/43", "7552"}, + {"240a:a9c1::/32", "145147"}, + {"2804:4bd4::/32", "267331"}, + {"2a0e:46c4:2c30::/47", "142597"}, + {"2001:67c:43c::/48", "12552"}, + {"2001:da8:8f00::/48", "138370"}, + {"2001:4878:62::/47", "12222"}, + {"2620:85:e000::/48", "46616"}, + {"2a02:26f7:f505::/46", "20940"}, + {"2a06:34c0::/29", "211873"}, + {"2c0f:fc98::/32", "37282"}, + {"2001:4408:c003::/34", "4758"}, + {"2a05:b380::/29", "207307"}, + {"2600:6c10:151::/42", "20115"}, + {"2a0e:46c4:106::/48", "142289"}, + {"2a0e:b107:14a0::/44", "142438"}, + {"2001:559:54a::/48", "7922"}, + {"2001:559:84e0::/48", "33287"}, + {"240a:a9e6::/32", "145184"}, + {"2602:fec5:1::/48", "62952"}, + {"2a01:5a8:3:80::/45", "8866"}, + {"2001:559:c2a4::/48", "33652"}, + {"2001:678:b30::/48", "41634"}, + {"2001:67c:2b5c::/48", "43451"}, + {"240e:d9:d000::/37", "4134"}, + {"2620:12b:5001::/45", "27381"}, + {"2409:8c20:9c72::/47", "56046"}, + {"2620:1d7:2::/48", "7545"}, + {"2804:80d0::/32", "272414"}, + {"2a06:b700::/29", "201616"}, + {"2401:d800:b3c0::/42", "7552"}, + {"2408:8459:e850::/38", "17816"}, + {"240e:183:8208::/46", "140650"}, + {"2a03:5760:3::/32", "201900"}, + {"2a05:4bc0::/29", "59395"}, + {"2a09:bac0:109::/48", "13335"}, + {"2a01:a380::/32", "12693"}, + {"2a07:b400::/29", "14576"}, + {"2001:3c8:2705::/48", "132482"}, + {"2401:a400:400::/33", "7477"}, + {"2a03:5cc0::/32", "48685"}, + {"2a0c:5640::/29", "203498"}, + {"2001:67c:2f8::/48", "47639"}, + {"2620:7e:30e0::/48", "3356"}, + {"2620:129:9001:51::/48", "13767"}, + {"2803:9660::/32", "267900"}, + {"2803:7200:800c::/47", "27696"}, + {"2804:89c::/32", "262381"}, + {"2001:678:d40::/48", "198430"}, + {"2400:cb00:462::/45", "13335"}, + {"2409:8904:7d40::/38", "24547"}, + {"2804:1674:21::/32", "53231"}, + {"2a03:2880:f002::/44", "32934"}, + {"2400:4880:4::/32", "131178"}, + {"2400:8b00:d00::/42", "45727"}, + {"2409:8061:100::/36", "9808"}, + {"2604:b180:50::/44", "23279"}, + {"2a01:8840:79::/48", "207266"}, + {"2a02:408:8093::/48", "35295"}, + {"2a06:7243::/46", "62425"}, + {"2001:1a11:21::/48", "42298"}, + {"2607:ff28:b02b::/33", "62904"}, + {"2800:600:401::/32", "52323"}, + {"2a05:b680:8::/48", "62445"}, + {"2409:8914:b200::/39", "56044"}, + {"240e:3b6:2c00::/35", "134774"}, + {"2804:5ff8::/32", "269137"}, + {"2a02:e980:b9::/45", "19551"}, + {"2a0d:f300::/32", "50673"}, + {"2001:559:8727::/48", "7015"}, + {"2400:cb00:362::/47", "13335"}, + {"2607:4700:f002::/36", "25720"}, + {"2804:14d:4ca7::/43", "28573"}, + {"2a10:9d00::/29", "49188"}, + {"2620:6d:c000::/48", "31921"}, + {"2a0c:9a40:8180::/48", "212983"}, + {"240a:ac23::/32", "145757"}, + {"2a07:3c80:600::/40", "209322"}, + {"2001:550:501::/48", "14877"}, + {"2001:67c:2cfc::/48", "2119"}, + {"2001:8f8::/32", "8966"}, + {"2600:1409:13::/48", "35994"}, + {"2a05:b2c4::/31", "199927"}, + {"2403:b9c0::/48", "131636"}, + {"240e:63:f000::/36", "140313"}, + {"2607:ff60:7000::/32", "3900"}, + {"2804:14d:b200::/40", "28573"}, + {"2804:18e8::/32", "61762"}, + {"2804:2324::/32", "262883"}, + {"2401:1040:3::/38", "134806"}, + {"240a:a51a::/32", "143956"}, + {"2600:140b:6801::/35", "20940"}, + {"2804:29c4::/32", "264033"}, + {"2a01:9fa0::/32", "29316"}, + {"2a03:9340::/32", "25589"}, + {"2402:800:fab0::/41", "7552"}, + {"2409:8051:2002::/40", "56047"}, + {"2804:2720::/32", "263878"}, + {"2408:8459:c210::/42", "17623"}, + {"240a:ad8e::/32", "146120"}, + {"2600:1409:2::/48", "35994"}, + {"2620:0:2810::/48", "14607"}, + {"2800:160:2007::/44", "14259"}, + {"2806:20d:162c::/43", "32098"}, + {"2806:2f0:40c1::/46", "17072"}, + {"2c0f:e8e0:4::/33", "327926"}, + {"2600:9000:10cd::/43", "16509"}, + {"2001:250:3c0f::/43", "23910"}, + {"2409:8020:30c4::/32", "56046"}, + {"240a:a1da::/32", "143124"}, + {"2600:802:f05::/35", "701"}, + {"2600:1010:f010::/40", "22394"}, + {"2408:8459:8e10::/42", "17623"}, + {"2409:8087:280d::/40", "56041"}, + {"2804:4194::/32", "267442"}, + {"2a02:26f7:cfc0::/48", "36183"}, + {"2a02:26f7:eb89::/46", "20940"}, + {"2a11:af00::/32", "208861"}, + {"2404:c2c0::/40", "135629"}, + {"2409:8053:3900::/32", "9808"}, + {"240a:a3a9::/32", "143587"}, + {"240a:ad0c::/32", "145990"}, + {"2a0d:8b00::/29", "208861"}, + {"2001:44b8:4070::/44", "7545"}, + {"2a01:788:aaab::/45", "34343"}, + {"2a09:2280::/48", "209792"}, + {"2408:8456:ce00::/42", "17622"}, + {"2409:8c70:3a51::/40", "9808"}, + {"2602:fcce:801::/39", "399200"}, + {"2804:2984:680::/41", "53184"}, + {"2a00:1e68:102::/43", "42861"}, + {"2a09:bac0:70::/45", "13335"}, + {"2a09:d5c0::/32", "39150"}, + {"2c0f:f118:2::/32", "328201"}, + {"240a:abc5::/32", "145663"}, + {"2602:fd6a::/36", "396412"}, + {"2607:f810:340::/36", "6192"}, + {"2804:b18:8d::/46", "52941"}, + {"2804:5534:e801::/48", "268696"}, + {"2a01:4ba0:4::/29", "199987"}, + {"2a03:8f87:1::/48", "51793"}, + {"2402:6640:31::/36", "134995"}, + {"240e:6b5::/35", "134775"}, + {"2a01:58a0:200::/32", "51018"}, + {"2a02:26f7:b98a::/48", "36183"}, + {"2a04:e380::/29", "31275"}, + {"2a09:6600::/29", "208861"}, + {"2a0f:a200::/29", "1239"}, + {"2409:8d5a::/37", "56040"}, + {"2600:6c7f:9380::/44", "10796"}, + {"2800:160:1738::/41", "14259"}, + {"2409:8c1f:a930::/33", "9808"}, + {"2806:2f0:2121::/48", "22884"}, + {"2a0f:8680::/29", "60781"}, + {"2001:df3:e000::/48", "13214"}, + {"2405:84c0:fdfc::/46", "210872"}, + {"2800:160:1780::/43", "14259"}, + {"2804:52f4:a90::/41", "268552"}, + {"2806:2f0:9e01::/46", "17072"}, + {"2a02:26f7:75::/48", "20940"}, + {"2a05:3440::/29", "211289"}, + {"2001:250:7027::/44", "24369"}, + {"2403:5180::/48", "23961"}, + {"2600:1f10:4000::/36", "14618"}, + {"2a01:9e00:ac53::/48", "206202"}, + {"2403:300:1500::/42", "6185"}, + {"2a00:1a48::/32", "15395"}, + {"2a06:8a07::/32", "12307"}, + {"2001:559:83f6::/48", "7725"}, + {"2001:44b8:40::/46", "7545"}, + {"2400:1a00:b021::/43", "17501"}, + {"2001:559:82ca::/48", "33490"}, + {"2402:6c40::/32", "38084"}, + {"240e:964:cc00::/35", "4134"}, + {"2a00:8880::/32", "15557"}, + {"2a0f:1e81:cdaf::/30", "30633"}, + {"2001:559:85a2::/47", "33651"}, + {"240a:a5f7::/32", "144177"}, + {"2803:9800:9031::/45", "11664"}, + {"2a00:2000::/22", "5400"}, + {"2a04:ac00:1::/48", "201848"}, + {"2a09:8380::/48", "209672"}, + {"2604:cac0:45::/48", "11019"}, + {"2607:ffb0:300e::/33", "6327"}, + {"2a01:80a0:1::/48", "62156"}, + {"2a0f:a080::/29", "15391"}, + {"2804:14c:cc93::/42", "28573"}, + {"2804:7084::/32", "270731"}, + {"2a0a:7d80:2::/48", "56740"}, + {"2a0a:e5c0:c::/47", "209898"}, + {"2001:559:1b0::/47", "7922"}, + {"2001:559:874c::/46", "33657"}, + {"2804:e30:7800::/37", "11338"}, + {"2a02:d8:8009::/46", "44654"}, + {"2a02:26f0:ec00::/48", "34164"}, + {"2001:559:c4d7::/48", "33652"}, + {"2001:df0:7980::/48", "38510"}, + {"2404:26c0::/48", "135987"}, + {"2a02:26f7:f6f1::/46", "20940"}, + {"2a06:a005:60::/43", "148996"}, + {"2a07:3402::/32", "62874"}, + {"2a0d:8d07:b00c::/33", "207616"}, + {"2a0e:7280::/29", "31477"}, + {"2001:250:582a::/48", "138371"}, + {"2403:8dc0::/32", "133648"}, + {"240a:af4e::/32", "146568"}, + {"2001:559:1a9::/48", "33659"}, + {"2001:559:829f::/48", "33657"}, + {"2600:6c38:44e::/43", "20115"}, + {"2a02:26f7:f249::/42", "20940"}, + {"2a02:cb45:101::/48", "20546"}, + {"2600:6c66::/31", "33588"}, + {"2804:4a08::/32", "267214"}, + {"2001:559:2db::/48", "7922"}, + {"2600:1409:2801::/35", "20940"}, + {"2804:4e74::/32", "268262"}, + {"240a:a7eb::/32", "144677"}, + {"240e:3b1:7600::/39", "140313"}, + {"2606:2800:602c::/48", "15133"}, + {"2803:53e0:1000::/48", "52468"}, + {"2a00:ea80::/32", "34749"}, + {"2001:3c8:c305::/48", "37932"}, + {"2001:df0:427::/48", "24514"}, + {"240a:a3e1::/32", "143643"}, + {"240a:a3f8::/32", "143666"}, + {"2605:ed00:4c63::/48", "11351"}, + {"2001:520:100b::/45", "8103"}, + {"2600:4800:80::/28", "6128"}, + {"2804:4f7c::/32", "52320"}, + {"2408:8956:6500::/40", "17816"}, + {"2600:6c10:f051::/45", "20115"}, + {"2804:865c::/32", "272638"}, + {"2001:678:45c::/48", "213237"}, + {"2403:5180:6::/48", "138181"}, + {"2407:5040:400::/36", "134715"}, + {"240e:982:b200::/39", "58461"}, + {"2600:140b:5c00::/48", "31109"}, + {"2600:40ff:fc15::/40", "701"}, + {"2804:13dc:fff0::/44", "262428"}, + {"2804:4df8::/32", "268231"}, + {"2a02:2698::/42", "12768"}, + {"2a0c:d540:1112::/32", "60159"}, + {"2001:559:572::/48", "7015"}, + {"2409:8904:5d40::/42", "24547"}, + {"2600:1406:2c00::/48", "35994"}, + {"2804:5d70::/32", "268972"}, + {"2a01:71c0::/31", "198066"}, + {"2a09:fcc0::/32", "205718"}, + {"2001:559:c171::/48", "33660"}, + {"2001:579:d0c4::/42", "22773"}, + {"2001:4248::/43", "30999"}, + {"2401:4900:1cd8::/45", "24560"}, + {"2408:8274::/28", "4837"}, + {"240e:55::/34", "140330"}, + {"240e:438:1220::/43", "140647"}, + {"2801:172:2::/48", "27951"}, + {"2a02:26f7:f748::/48", "36183"}, + {"2a04:207:ffff::/48", "48101"}, + {"2a0c:e040:127::/43", "200629"}, + {"2001:df0:500::/40", "132361"}, + {"2400:f0c0::/36", "136477"}, + {"2408:8456:1d00::/42", "17622"}, + {"2804:1d04:8000::/35", "61689"}, + {"2001:550:e03::/45", "174"}, + {"2409:8057:306c::/48", "141425"}, + {"2001:49f0:a01f::/41", "174"}, + {"2402:800:348d::/43", "7552"}, + {"2803:9800:b0e1::/37", "11664"}, + {"2a00:7f80::/29", "48585"}, + {"2a00:9620::/32", "43071"}, + {"2001:559:85ea::/47", "7922"}, + {"2804:394:3000::/32", "262895"}, + {"2804:6bdc::/32", "270430"}, + {"2a02:750::/44", "42708"}, + {"2a02:26f7:d349::/42", "20940"}, + {"2402:800:588d::/43", "7552"}, + {"2404:ab80::/43", "55944"}, + {"2600:100d:bf00::/44", "6167"}, + {"2606:7a80::/28", "10958"}, + {"2804:145c:ce10::/39", "263327"}, + {"2804:7a3c:180::/36", "271357"}, + {"2a02:ea0::/29", "16218"}, + {"240a:a17e::/32", "143032"}, + {"2804:8374:8000::/33", "264502"}, + {"2001:559:c256::/48", "7922"}, + {"2402:800:5271::/44", "7552"}, + {"2602:ff1f::/36", "393635"}, + {"2a09:4c2:30::/46", "58057"}, + {"2a0e:d3c0::/48", "205869"}, + {"2a0e:d487:f00e::/48", "211066"}, + {"2001:da8:240::/48", "24349"}, + {"2001:4268:140::/38", "15964"}, + {"2600:100d:f010::/40", "22394"}, + {"2801:80:190::/48", "262413"}, + {"2a01:e0a::/37", "12322"}, + {"240e:6b9::/36", "140312"}, + {"2804:1f20::/32", "19200"}, + {"2a00:db60::/48", "15224"}, + {"2a00:f826:b::/43", "34549"}, + {"240a:a3f1::/32", "143659"}, + {"2a00:47a0::/32", "61010"}, + {"2001:559:c3e6::/48", "7015"}, + {"2607:f758:b400::/33", "13649"}, + {"2405:6c0::/48", "4515"}, + {"2803:6700:240::/48", "263210"}, + {"2a00:6920:1000::/40", "42020"}, + {"2a02:26f7:b3c9::/42", "20940"}, + {"2001:67c:1974::/48", "207760"}, + {"2408:8459:c650::/36", "17816"}, + {"2607:fb10:7062::/40", "2906"}, + {"2804:18:7a00::/37", "10429"}, + {"2804:4f64::/32", "268324"}, + {"2a03:ad40:120::/48", "199349"}, + {"2a10:56c0::/29", "212731"}, + {"2a02:2ad0:137::/44", "702"}, + {"2001:250:702b::/45", "24369"}, + {"2001:550:3500::/48", "54030"}, + {"2408:8256:358f::/48", "17816"}, + {"2001:559:8706::/48", "33659"}, + {"2001:67c:12a0::/48", "41108"}, + {"2001:fe8:8121::/48", "24435"}, + {"2401:a100::/46", "45194"}, + {"2600:1480:6800::/48", "21342"}, + {"2804:7c5c::/32", "271491"}, + {"2a01:a840::/32", "16186"}, + {"2a03:32c0:b::/43", "48503"}, + {"2001:559:c52a::/48", "7015"}, + {"2001:df0:6a80::/48", "134986"}, + {"2408:8456:3a00::/41", "17623"}, + {"2804:14d:ae85::/41", "28573"}, + {"2a02:26f0:11f::/42", "20940"}, + {"2400:f2:7001::/29", "4766"}, + {"2401:b780:5000::/48", "65435"}, + {"2603:fc10::/25", "397165"}, + {"2620:57:2000::/48", "22652"}, + {"2001:438:30::/44", "6461"}, + {"2001:aa0::/32", "5669"}, + {"2001:12f8:6::/47", "53035"}, + {"2001:16d8:57::/44", "16150"}, + {"2409:8028:2100::/37", "9808"}, + {"2604:db40::/32", "30382"}, + {"2620:10:8000::/44", "18563"}, + {"2806:230:6004::/48", "265594"}, + {"2001:559:823a::/48", "13367"}, + {"2001:df2:2c00::/48", "133929"}, + {"2620:136:d000::/48", "54710"}, + {"2001:67c:139c::/48", "44286"}, + {"2400:4c80:1010::/32", "7632"}, + {"2a00:1f68::/32", "50919"}, + {"2a01:cb00::/26", "3215"}, + {"2001:4480::/32", "17554"}, + {"2a0c:ab07:5000::/36", "208861"}, + {"2a10:1fc0:1::/48", "59711"}, + {"2001:bf7:541::/38", "44194"}, + {"2605:1280::/32", "14288"}, + {"2001:559:8403::/48", "7922"}, + {"2600:6c5c::/30", "20115"}, + {"2606:6000:7fc1::/32", "20001"}, + {"2408:840c:3a00::/40", "17621"}, + {"2600:1011:9110::/34", "6167"}, + {"2a02:dc00:9::/48", "8998"}, + {"2a05:5504:1::/44", "8218"}, + {"2a0f:6fc0::/32", "49470"}, + {"2a10:d480:ac01::/48", "206232"}, + {"2001:67c:2a18::/48", "58320"}, + {"240a:aae2::/32", "145436"}, + {"2602:fce1:221::/46", "395886"}, + {"2607:f3a0:a005::/48", "399815"}, + {"2804:50d0::/32", "268412"}, + {"2a05:3181::/32", "31514"}, + {"2001:559:800::/33", "7922"}, + {"2404:3d00:40ef::/43", "21433"}, + {"2804:0:667::/35", "2716"}, + {"2804:5480::/32", "268654"}, + {"2a01:358:4020::/36", "9121"}, + {"2a03:3e00::/32", "50469"}, + {"2a0f:5381:1338::/32", "208135"}, + {"2001:df7:cf80::/48", "138032"}, + {"2001:4490:dda8::/43", "9829"}, + {"240e:37f:1a00::/34", "140330"}, + {"2a0d:7ec0::/31", "25398"}, + {"2001:559:84bc::/48", "33657"}, + {"2402:b180:1::/48", "36351"}, + {"2602:107:30d::/48", "11426"}, + {"2800:bf0:1a6::/43", "27947"}, + {"2804:1e6c::/32", "264428"}, + {"2804:6968::/32", "270268"}, + {"2408:8956:4900::/40", "17816"}, + {"2607:9080:605::/48", "62424"}, + {"2800:590:2051::/45", "16629"}, + {"2a02:2e02:f10::/42", "12479"}, + {"2400:dd01:200e::/35", "7497"}, + {"2602:feb4:1f0::/38", "25961"}, + {"2804:2424::/32", "264204"}, + {"2a02:26f7:d3::/48", "20940"}, + {"2a04:f580:8200::/48", "4134"}, + {"2a0f:bf00:c0::/29", "208196"}, + {"2001:678:588::/48", "57260"}, + {"2602:ff8f::/40", "53274"}, + {"2a00:16f8::/48", "17025"}, + {"2a11:4c00::/29", "43624"}, + {"2001:578::/44", "22773"}, + {"2402:800:977f::/40", "7552"}, + {"2804:1c78::/32", "263041"}, + {"2001:978:2302::/47", "174"}, + {"2001:1218:60b5::/44", "278"}, + {"2804:55a0::/32", "267946"}, + {"240a:a937::/32", "145009"}, + {"2600:1407:1b::/48", "35994"}, + {"2804:220::/32", "262791"}, + {"2804:68c8::/33", "269715"}, + {"2a03:ebc0:5000::/36", "31400"}, + {"2001:4b20:100:f000::/63", "65505"}, + {"2804:1c1c:4001::/36", "61638"}, + {"2001:67c:1880::/48", "49949"}, + {"240a:aa57::/32", "145297"}, + {"2604:ca00:106::/43", "36492"}, + {"2803:d100:e3f0::/37", "52362"}, + {"2a05:d050:2040::/44", "16509"}, + {"240a:a18b::/32", "143045"}, + {"2600:9000:11cb::/45", "16509"}, + {"2620:e8::/48", "14183"}, + {"2804:6b74::/32", "270401"}, + {"2001:4c8:1016::/47", "15290"}, + {"2001:559:a3::/48", "13367"}, + {"2001:da8:20e::/48", "23910"}, + {"2001:13b0:d003::/31", "3549"}, + {"2620:35:8000::/48", "394522"}, + {"2804:7264::/32", "270849"}, + {"2a03:3b80::/32", "3308"}, + {"2001:559:59f::/48", "33287"}, + {"2001:df4:2600::/48", "132398"}, + {"2403:4d00::/32", "55785"}, + {"2408:8340::/32", "4837"}, + {"240e:44d:4c40::/42", "140357"}, + {"2604:26c0::/38", "36815"}, + {"2607:f7f0::/32", "30259"}, + {"2800:430::/34", "23487"}, + {"2804:854::/44", "28368"}, + {"2804:5534:6000::/37", "268696"}, + {"2001:250:3c0b::/45", "23910"}, + {"2001:e48:40:6::/45", "9583"}, + {"2402:a340::/32", "10200"}, + {"2409:8e80:7000::/32", "9808"}, + {"240a:a7b8::/32", "144626"}, + {"2804:75d4::/34", "271072"}, + {"2404:7e40::/47", "138649"}, + {"240e:420::/31", "140061"}, + {"2804:14c:4100::/40", "28573"}, + {"2804:4718::/32", "267031"}, + {"2001:559:836f::/48", "33657"}, + {"2001:579:9dc2::/34", "22773"}, + {"240e:3b2:d000::/36", "134772"}, + {"240e:978:f00::/40", "134769"}, + {"2600:1417:41::/48", "24319"}, + {"2409:8924:1700::/36", "56046"}, + {"2804:1f54:e000::/35", "272220"}, + {"2001:559:8238::/48", "33657"}, + {"2407:500:167::/48", "58940"}, + {"2800:bf0:280::/46", "52257"}, + {"2800:bf0:3c05::/33", "27947"}, + {"2806:2f0:4361::/46", "17072"}, + {"2a00:f440:a::/48", "29588"}, + {"2a10:4646:16::/48", "212022"}, + {"2001:253:112::/48", "142078"}, + {"2401:d800:df00::/42", "7552"}, + {"240a:a419::/32", "143699"}, + {"2804:1ac4:5::/44", "61884"}, + {"2a02:26f0:4801::/40", "20940"}, + {"2a0f:d7c0::/32", "57825"}, + {"2001:67c:2f50::/48", "2119"}, + {"2602:fed5::/46", "27398"}, + {"2804:4a90:2040::/32", "267249"}, + {"2a02:26f7:f940::/48", "36183"}, + {"2a10:5340::/29", "21454"}, + {"240e:438:1820::/43", "140647"}, + {"2804:69a8::/32", "270283"}, + {"2001:559:83cc::/48", "7016"}, + {"2001:559:84b0::/48", "7015"}, + {"2001:559:c0c7::/48", "33287"}, + {"2400:cf00::/32", "45396"}, + {"2804:42d8::/32", "267531"}, + {"2001:e60:d010::/39", "4766"}, + {"2402:800:35c5::/43", "7552"}, + {"2408:8459:cf10::/42", "17623"}, + {"2604:99c0::/32", "397790"}, + {"2804:4cd8::/32", "267396"}, + {"2a02:26f7:f401::/46", "20940"}, + {"2a02:8389:6000::/30", "8412"}, + {"2001:253:122::/48", "142088"}, + {"240a:afac::/32", "146662"}, + {"2620:101:2001::/46", "16417"}, + {"2a10:a180::/30", "10753"}, + {"240c:caa2::/23", "23910"}, + {"2606:ae00:b1b0::/41", "7287"}, + {"2804:5d58::/48", "268966"}, + {"2806:2f0:33c1::/46", "17072"}, + {"2a02:26f7:ea40::/48", "36183"}, + {"2a06:1b00::/40", "8302"}, + {"2001:559:8283::/48", "7015"}, + {"2001:559:8594::/48", "33287"}, + {"2001:1900:23cd::/48", "202818"}, + {"2401:e880::/32", "45873"}, + {"2620:1d5:6a0::/41", "14773"}, + {"2800:160:1055::/44", "14259"}, + {"2804:308c:ab00::/33", "264960"}, + {"2001:559:329::/48", "20214"}, + {"2409:8057:1008::/34", "56040"}, + {"2001:550:4100:2::/47", "174"}, + {"2403:6e40:110::/44", "9830"}, + {"2406:2000:1d0::/48", "10880"}, + {"2606:ea00::/32", "32666"}, + {"2a02:26f7:bbc8::/48", "36183"}, + {"2401:7200:a000::/46", "55328"}, + {"2403:6200:792d::/32", "45629"}, + {"2405:25c0:a300::/40", "18068"}, + {"2405:6b40::/32", "139421"}, + {"2406:3c80::/46", "17747"}, + {"2408:887e::/32", "4837"}, + {"2600:3c0f:9::/48", "63949"}, + {"2620:132:f102::/40", "394977"}, + {"2a02:2a00::/32", "12310"}, + {"2001:250:7000::/48", "24370"}, + {"2404:bf40:e605::/39", "139084"}, + {"2406:e000:371::/45", "23655"}, + {"2606:2800:30c::/46", "15133"}, + {"2a0d:82c7:9::/48", "47787"}, + {"2001:559:8341::/48", "7015"}, + {"2001:67c:2264::/48", "197118"}, + {"2405:9800:d007::/48", "133848"}, + {"2804:7dd4::/32", "271585"}, + {"2a03:4d41:410::/38", "199610"}, + {"2a04:780::/29", "39806"}, + {"2a0e:8f02:f028::/48", "212623"}, + {"240a:ada8::/32", "146146"}, + {"2a00:1a90::/33", "45014"}, + {"2a02:248::/32", "8648"}, + {"2a05:680::/29", "201597"}, + {"2401:4300:1::/45", "45184"}, + {"2408:8957:e400::/40", "17622"}, + {"2804:e30:9c00::/38", "11338"}, + {"2a01:5b40:6::/44", "12996"}, + {"2a02:26f7:e284::/48", "36183"}, + {"2406:840:f895::/46", "212034"}, + {"240e:3b9:6400::/35", "140312"}, + {"2600:1419:9401::/36", "20940"}, + {"2804:a00:f10::/32", "262838"}, + {"2001:678:228::/48", "2863"}, + {"240a:aece::/32", "146440"}, + {"2600:1402:17::/44", "35994"}, + {"2603:f0a0::/25", "397165"}, + {"2607:f428:9420::/33", "20115"}, + {"2800:1e0:2000::/40", "7195"}, + {"2001:df2:2e00::/48", "135421"}, + {"2401:d800:e000::/35", "7552"}, + {"240a:a029::/32", "142691"}, + {"2600:6c38:a3::/44", "20115"}, + {"2804:530c::/32", "268560"}, + {"2a00:1358:c100::/48", "205972"}, + {"2a02:26f7:dac0::/48", "36183"}, + {"2600:370f:71c1::/46", "32261"}, + {"2604:3400:abca::/48", "209453"}, + {"2804:8364::/32", "272195"}, + {"2a0a:e00::/48", "64432"}, + {"2a11:f2c0:ffe0::/47", "208051"}, + {"2001:44c8:3200::/36", "45430"}, + {"2402:9040::/32", "137498"}, + {"2408:8957:3100::/40", "17816"}, + {"2804:192c::/32", "61776"}, + {"2a02:ac80:6001::/35", "25145"}, + {"2a03:5a80::/32", "21367"}, + {"2001:500:a::/48", "13901"}, + {"2401:d800:95b0::/41", "7552"}, + {"2408:8456:9a10::/42", "134543"}, + {"240a:afb8::/32", "146674"}, + {"2803:6680::/39", "267789"}, + {"2804:c4c::/32", "52689"}, + {"2a01:d0:311::/45", "29632"}, + {"2a02:2668:7700::/36", "16345"}, + {"2001:fd8:b370::/44", "4775"}, + {"2801:84::/32", "263300"}, + {"2a0b:6900:185d::/48", "206873"}, + {"2001:1248:844e::/43", "11172"}, + {"240e:e:b000::/37", "58541"}, + {"2604:1380:ffe0::/44", "54825"}, + {"2804:1078::/32", "263637"}, + {"2a00:4802:2a0::/44", "13124"}, + {"2a0a:2f81::/32", "47891"}, + {"2404:de80:800::/39", "137443"}, + {"2406:2140::/32", "24202"}, + {"2605:d680::/32", "63313"}, + {"2a01:5f60::/32", "199321"}, + {"2a0b:46c0::/29", "208578"}, + {"2001:559:8704::/47", "33667"}, + {"2404:5c0:2801::/32", "138466"}, + {"2408:8756:2cfd::/46", "135061"}, + {"2600:6c10:67::/44", "20115"}, + {"2804:404c:1193::/32", "265950"}, + {"2a02:26f7:de0c::/48", "36183"}, + {"2409:8c0c:200::/39", "132510"}, + {"2605:a380:2001::/48", "399201"}, + {"2801:1d6::/40", "271833"}, + {"2804:40:8000::/36", "28657"}, + {"2804:2484:8110::/41", "28258"}, + {"2804:28f8::/32", "263990"}, + {"2a0b:8bc0::/29", "41608"}, + {"2001:4b27:ffff::14/122", "34288"}, + {"240a:a114::/32", "142926"}, + {"2602:107:1210::/48", "33363"}, + {"2605:7280:7::/32", "54600"}, + {"2001:67c:1384::/48", "204896"}, + {"240a:61:1000::/36", "9605"}, + {"2604:8e80::/34", "32505"}, + {"2a03:d5c0:100::/37", "199391"}, + {"2804:13b0:5c00::/44", "263546"}, + {"2804:1760::/32", "263142"}, + {"2a02:c50::/36", "51531"}, + {"2a02:26f7:f908::/48", "36183"}, + {"2a0f:f800::/29", "48603"}, + {"2001:559:c4af::/43", "33657"}, + {"2600:370f:20a1::/41", "32261"}, + {"2620:121:5070::/48", "14618"}, + {"2800:160:10cc::/46", "14259"}, + {"2001:4000::/32", "8565"}, + {"2404:6c00:a001::/33", "24324"}, + {"240e:974:e00::/48", "38283"}, + {"2a02:7040:ff02::/40", "199236"}, + {"2a0d:77c7:a4e::/34", "7489"}, + {"2403:8040::/32", "138184"}, + {"2600:140b:3c00::/48", "31109"}, + {"2800:1e0::/47", "7195"}, + {"2806:230:2034::/48", "265594"}, + {"2001:250:4400::/43", "24359"}, + {"2400:cb00:a760::/47", "13335"}, + {"2408:8956:f440::/40", "17622"}, + {"2607:fae0:8000::/36", "8038"}, + {"2a01:c50f:2d80::/35", "12479"}, + {"2a09:bac0:232::/48", "13335"}, + {"2402:ef05:1::/28", "7633"}, + {"2404:bf40:e302::/48", "7545"}, + {"2409:8010::/35", "9808"}, + {"2600:100a:a100::/44", "6167"}, + {"2a10:2f01:2a0::/46", "212995"}, + {"2408:840d:c500::/42", "17621"}, + {"2801:18c:1::/44", "19429"}, + {"2804:5204::/32", "268490"}, + {"2a0e:2b80:101::/38", "28875"}, + {"2600:1419:f001::/37", "20940"}, + {"2a0b:3700:2::/29", "61317"}, + {"2408:8256:3280::/48", "17816"}, + {"2409:8c70:3ad8::/48", "140105"}, + {"2804:3f0c::/38", "266636"}, + {"2a06:e540:101::/38", "203600"}, + {"2402:8100:20c3::/45", "45271"}, + {"2404:bf40:8841::/48", "7545"}, + {"240a:a517::/32", "143953"}, + {"240e:3b9:2800::/38", "4134"}, + {"2804:14c:3b9c::/42", "28573"}, + {"2804:145c:8f50::/40", "263327"}, + {"2a05:540::/30", "45027"}, + {"2001:678:68c::/48", "13259"}, + {"2001:c20:48a0::/48", "9255"}, + {"2400:8500:4800::/48", "58649"}, + {"2402:800:57d3::/44", "7552"}, + {"2406:b400:60::/48", "18209"}, + {"2804:5cc8:200::/34", "268930"}, + {"2804:7cb0:3e80::/44", "271512"}, + {"2001:df2:8100::/48", "137050"}, + {"2600:1010:b070::/40", "22394"}, + {"2606:4700:8dd0::/42", "13335"}, + {"2a10:6540::/29", "212650"}, + {"2402:c200::/32", "9374"}, + {"2001:559:87d0::/48", "33662"}, + {"2600:1900::/34", "15169"}, + {"2001:67c:2148::/48", "59570"}, + {"2001:67c:25f4::/48", "45045"}, + {"2600:370f:7540::/44", "32261"}, + {"2804:3370::/32", "265396"}, + {"2804:418c::/32", "267440"}, + {"2a01:c50f:f140::/38", "12479"}, + {"2001:559:c186::/48", "33491"}, + {"2404:bf40:8800::/48", "7545"}, + {"2803:b220::/32", "265844"}, + {"2804:2254::/32", "264603"}, + {"2001:67c:22dc::/48", "31019"}, + {"240a:a55a::/32", "144020"}, + {"2804:14d:fe00::/47", "28573"}, + {"2a00:86c0:207a::/40", "2906"}, + {"2a02:fa80::/32", "50520"}, + {"2a0e:fd45:b70::/44", "212744"}, + {"2606:ae00:1003::/48", "7287"}, + {"2800:bf0:81eb::/48", "27947"}, + {"2806:2f0:3541::/46", "17072"}, + {"2001:480:120::/48", "3381"}, + {"2001:559:2f3::/48", "33657"}, + {"2401:d800:7ea0::/41", "7552"}, + {"2803:b5a0::/33", "269804"}, + {"2a07:a905:ffe0::/46", "202297"}, + {"2001:559:8600::/48", "399141"}, + {"2001:67c:2128::/48", "48004"}, + {"2408:8957:de00::/40", "17622"}, + {"2605:100::/32", "11442"}, + {"2803:1120::/32", "52328"}, + {"2804:7b24::/32", "271413"}, + {"2a02:5c40::/32", "42451"}, + {"2a04:b040::/46", "43350"}, + {"240e:1f:b000::/33", "4134"}, + {"2600:1408:4001::/38", "20940"}, + {"2606:4700:ff01::/48", "394536"}, + {"2800:160:12ac::/43", "14259"}, + {"2a02:26f7:c941::/46", "20940"}, + {"2a03:9aa0::/32", "203646"}, + {"2a11:6240::/32", "210685"}, + {"2409:8c85:aa75::/25", "9808"}, + {"2605:a401:8002::/42", "33363"}, + {"2804:81e8::/32", "272485"}, + {"2a00:1ad0::/32", "41589"}, + {"2a05:5cc0::/29", "57877"}, + {"2001:678:20::/48", "1921"}, + {"2001:678:9d0::/48", "34944"}, + {"2001:6f8:1501::/48", "8190"}, + {"240a:c4c1::/20", "137726"}, + {"2803:fbe0:8800::/38", "270092"}, + {"2a02:e0:3204::/36", "34984"}, + {"2a0b:8d00::/29", "60721"}, + {"2001:57b:1001::/38", "22773"}, + {"2402:e280:210d::/46", "134674"}, + {"240e:44d:5580::/41", "4134"}, + {"2606:b300:8000::/40", "13926"}, + {"2a04:e800:5040::/48", "57976"}, + {"2a0b:bbc0:3100::/40", "205388"}, + {"2403:6200:792c::/48", "55451"}, + {"2408:8957:cdc0::/38", "17622"}, + {"2606:2800:4150::/48", "15133"}, + {"2a04:4e40:5000::/47", "54113"}, + {"2a0c:4fc0::/29", "203835"}, + {"2001:fd8:740::/35", "4775"}, + {"2409:8914:8800::/35", "56044"}, + {"240a:a6fc::/32", "144438"}, + {"2804:950::/32", "263072"}, + {"2a07:a640::/29", "202524"}, + {"2a0d:6d80::/29", "204591"}, + {"2001:559:c1d5::/46", "7016"}, + {"2001:918:fff3::/44", "3303"}, + {"2001:43f8:1620::/48", "328706"}, + {"2804:c28::/32", "262983"}, + {"2600:141b:d001::/36", "20940"}, + {"2804:180c::/32", "61924"}, + {"2a02:2788::/36", "12392"}, + {"2402:8100:257c::/46", "55644"}, + {"2409:800c:3001::/46", "132510"}, + {"2409:8053:100::/37", "9808"}, + {"240e:fe:a000::/35", "136198"}, + {"240e:44d:6340::/42", "140348"}, + {"2804:37cc::/32", "266436"}, + {"2804:68fc::/32", "270241"}, + {"2a02:26f7:f441::/46", "20940"}, + {"2001:559:839b::/48", "7016"}, + {"2409:8004:809::/40", "24547"}, + {"2607:bf80::/32", "32100"}, + {"2804:72b8::/32", "270871"}, + {"2a05:1180::/29", "59791"}, + {"2409:8008:2900::/35", "24547"}, + {"2600:1013:a010::/35", "6167"}, + {"2607:f790:f000::/36", "12129"}, + {"240a:a4c0::/32", "143866"}, + {"2804:5ba8::/34", "268861"}, + {"2408:8957:6900::/40", "17816"}, + {"2605:4f40:8::/45", "33661"}, + {"2804:2e1c:e381::/37", "265324"}, + {"2806:362::/32", "265606"}, + {"2a03:ba80::/32", "50446"}, + {"2402:4cc0::/32", "136724"}, + {"2408:8856:8200::/28", "17816"}, + {"240a:a0fe::/32", "142904"}, + {"2a0d:1a40:5500::/48", "57782"}, + {"2a0e:46c4:2810::/44", "212514"}, + {"2a0f:ca83:1::/48", "207616"}, + {"2401:1d40:3102::/36", "59019"}, + {"2602:fed2:7121::/46", "53356"}, + {"2804:567c::/32", "268003"}, + {"2001:12f0:240::/39", "1916"}, + {"2402:9d80:200::/41", "131429"}, + {"2605:7900:1000::/48", "42831"}, + {"2620:11b:4016::/47", "47870"}, + {"2804:14c:87c8::/46", "28573"}, + {"2804:14d:5cba::/45", "28573"}, + {"2804:17d8::/32", "61919"}, + {"2804:196c:b0c0::/33", "61794"}, + {"2a00:1d58:c480::/36", "47524"}, + {"2a00:8dc0:fffe::/47", "201029"}, + {"2409:8914:8000::/39", "56044"}, + {"2804:1f8::/32", "262787"}, + {"2a03:1d80::/29", "31117"}, + {"2406:3003:1050::/44", "4657"}, + {"2408:8956:dc00::/40", "17622"}, + {"240e:6:d810::/31", "4134"}, + {"2a05:4b40::/32", "210664"}, + {"2604:ca00:219::/42", "36492"}, + {"2802:0:49::/30", "18747"}, + {"2804:170c::/32", "263119"}, + {"2804:4c70::/32", "267370"}, + {"2001:579:8e8::/43", "22773"}, + {"2001:4218::/32", "16637"}, + {"2401:d800:9550::/42", "7552"}, + {"2a01:b6c0::/29", "60213"}, + {"2001:a48::/33", "8970"}, + {"2404:bf40:c442::/40", "139084"}, + {"2406:1500:1::/48", "132579"}, + {"2407:a4c0::/48", "140814"}, + {"2a02:ee80:419c::/46", "3573"}, + {"2001:678:338::/48", "8375"}, + {"2602:fbce::/36", "400387"}, + {"2620:78:6000::/48", "25639"}, + {"2402:1400::/32", "9993"}, + {"2407:2200::/32", "38719"}, + {"240a:a8fb::/32", "144949"}, + {"240a:a926::/32", "144992"}, + {"2600:6c21:a11::/44", "20115"}, + {"2606:2800:4a54::/46", "15133"}, + {"2804:49d0::/32", "52698"}, + {"2806:2f0:1003::/42", "22884"}, + {"2a00:6b80::/29", "33924"}, + {"2a02:26f7:e985::/46", "20940"}, + {"2a04:92c7:36::/41", "62240"}, + {"2a06:4880::/32", "211298"}, + {"2001:dc7:ffd2::/48", "24406"}, + {"2001:448a:1050::/42", "7713"}, + {"240a:a473::/32", "143789"}, + {"240c:ca04::/32", "132553"}, + {"2a03:4240::/32", "12731"}, + {"2a06:700::/29", "200665"}, + {"2a06:9687::/32", "199221"}, + {"2001:468:1800::/40", "10466"}, + {"2001:1248:9c1e::/42", "11172"}, + {"240c:408d:3000::/22", "38365"}, + {"240e:3b5:c800::/37", "4134"}, + {"2804:27f4::/32", "263931"}, + {"2804:4d3c:948::/38", "267420"}, + {"2806:230:6034::/48", "265594"}, + {"2806:262:3300::/37", "13999"}, + {"2a07:be80::/29", "212773"}, + {"2804:18c0:1400::/36", "61951"}, + {"2a02:20d0::/29", "34660"}, + {"2001:470:59::/48", "6939"}, + {"2401:d800:9aa0::/41", "7552"}, + {"2404:e00:65::/46", "15695"}, + {"2804:3358::/34", "265390"}, + {"2403:b400::/32", "10212"}, + {"2404:fe40::/32", "131982"}, + {"240e:4a:4400::/29", "4134"}, + {"240e:6b1::/35", "134774"}, + {"2602:fcea::/36", "22659"}, + {"2a02:13b8::/29", "15614"}, + {"2a0b:1c00:1919::/48", "62240"}, + {"2a12:df00:2000::/35", "210462"}, + {"2001:559:817d::/46", "7922"}, + {"2001:1998::/44", "7843"}, + {"2408:84f3:ea10::/42", "134543"}, + {"240a:a372::/32", "143532"}, + {"2804:81c8::/32", "272476"}, + {"2a02:26f7:ea05::/46", "20940"}, + {"2001:49b0::/32", "26860"}, + {"2600:c809::/29", "7018"}, + {"2a03:ff80::/29", "197075"}, + {"2001:678:c9c::/48", "200924"}, + {"2404:f600::/32", "24207"}, + {"2001:dd8:10::/47", "56266"}, + {"2001:1a11:6d::/46", "8781"}, + {"2407:7200:5001::/32", "10098"}, + {"240a:a0ff::/32", "142905"}, + {"240a:afae::/32", "146664"}, + {"2607:fca8:a539::/35", "17139"}, + {"2806:34d:48::/48", "15695"}, + {"2a0f:2740::/29", "36351"}, + {"2001:df0:eb::/48", "38635"}, + {"2404:c400:404::/32", "9328"}, + {"2606:5680:1000::/36", "394344"}, + {"2a01:5980::/32", "15689"}, + {"2001:250:3446::/38", "23910"}, + {"2600:6c10:20c::/46", "20115"}, + {"2804:11b8::/32", "263434"}, + {"2804:507c::/32", "268392"}, + {"2a0a:90c0:1011::/41", "205080"}, + {"2001:4818::/36", "12188"}, + {"2407:46c0::/32", "142024"}, + {"2606:2800:5100::/45", "15133"}, + {"2804:7adc:8000::/33", "262674"}, + {"2a02:c88::/32", "8487"}, + {"2a11:5080::/29", "60935"}, + {"2604:2d80:e280::/36", "30036"}, + {"240a:aef4::/32", "146478"}, + {"2a07:aec0::/29", "32519"}, + {"240a:a9c6::/32", "145152"}, + {"2602:fed2:718f::/48", "20473"}, + {"2607:f180:4200::/35", "35908"}, + {"2804:5790::/32", "268072"}, + {"2a04:2700::/29", "12637"}, + {"2409:8c20:aa52::/35", "56046"}, + {"2a02:26f7:fb44::/48", "36183"}, + {"2a0f:b4c7::/32", "47596"}, + {"2607:f8f8::/37", "23033"}, + {"2804:6708::/32", "269599"}, + {"2804:8378::/32", "272200"}, + {"2a03:2ca0::/38", "59865"}, + {"2403:c000:1402::/32", "4741"}, + {"240a:a12c::/32", "142950"}, + {"240a:ae03::/32", "146237"}, + {"2404:bf40:89c1::/46", "7545"}, + {"240e:d2:8000::/29", "4134"}, + {"2604:d600:161c::/42", "32098"}, + {"2001:559:c216::/47", "33650"}, + {"2606:2800:347::/44", "15133"}, + {"2806:2f0:4001::/46", "17072"}, + {"2a0b:f841::/32", "34549"}, + {"2001:da8:201e::/48", "24357"}, + {"2602:fc8a:ff::/48", "399588"}, + {"2804:75a0::/32", "271059"}, + {"2a04:4e40:e400::/48", "54113"}, + {"2a0c:9a40:2400::/36", "34927"}, + {"2001:559:81e7::/48", "33491"}, + {"2405:8400::/32", "9245"}, + {"240e:2e::/33", "4812"}, + {"240e:3bf:2200::/37", "136198"}, + {"2804:24b0:8000::/33", "264238"}, + {"2a02:4a40:100::/48", "42673"}, + {"2a0d:1a45:bef0::/33", "57782"}, + {"2604:d600:1211::/46", "32098"}, + {"2a0d:e4c4:1000::/34", "208861"}, + {"2001:559:746::/48", "33657"}, + {"2001:590:3803::/48", "206264"}, + {"2001:da8:cf::/48", "138375"}, + {"2600:140b:2001::/38", "20940"}, + {"2600:3000:1314::/37", "13649"}, + {"2604:2c00::/32", "11071"}, + {"2605:80c0::/32", "10700"}, + {"2a00:10a0::/45", "35745"}, + {"2a02:e000::/29", "12670"}, + {"2a0b:1d40::/32", "205676"}, + {"2a11:4780::/29", "56897"}, + {"2001:559:337::/48", "7015"}, + {"2001:559:8662::/48", "33659"}, + {"2804:291c::/35", "263998"}, + {"2a02:26f7:c0c9::/42", "20940"}, + {"2001:4878:3::/48", "12222"}, + {"2404:e4c0:8::/48", "54201"}, + {"240e:5a:4900::/40", "140302"}, + {"2604:6600:2606::/47", "40676"}, + {"2804:16b0:4000::/36", "61910"}, + {"2a09:a4c7:4000::/36", "210625"}, + {"2804:8084::/32", "271756"}, + {"2a01:6520::/32", "199860"}, + {"2a02:26f7:f084::/48", "36183"}, + {"240a:a947::/32", "145025"}, + {"2605:3380:4152::/47", "12025"}, + {"2a02:2290:2::/48", "206610"}, + {"2a02:26f7:c781::/46", "20940"}, + {"2a04:c580::/29", "12315"}, + {"2403:97c0:10::/44", "7489"}, + {"2409:8004:3111::/45", "24547"}, + {"2804:5b88::/32", "268853"}, + {"2a00:70c0::/48", "31477"}, + {"2408:8456:a640::/36", "17816"}, + {"2620:119:e000::/43", "30337"}, + {"2806:2f0:9741::/46", "17072"}, + {"2a09:be40:6b00::/40", "208810"}, + {"2a0f:5707:ab2f::/48", "61138"}, + {"2001:559:66::/48", "33491"}, + {"2001:67c:53c::/48", "43046"}, + {"2620:104:e000::/56", "1351"}, + {"2a02:26f7:c704::/48", "36183"}, + {"2001:1248:5aed::/39", "11172"}, + {"2001:41d8::/32", "5610"}, + {"2801:140:fff1::/46", "262249"}, + {"2806:2f0:9781::/46", "17072"}, + {"2a0c:fa40::/29", "61317"}, + {"2001:559:c280::/47", "7015"}, + {"2406:1200::/32", "24192"}, + {"240e:44d:1940::/42", "140360"}, + {"2801:14a::/40", "3816"}, + {"2804:14d:9400::/40", "28573"}, + {"2a0f:da80::/29", "34856"}, + {"2406:840:e110::/48", "141712"}, + {"2a02:26f7:dd81::/46", "20940"}, + {"2001:dc7:5de2::/43", "24151"}, + {"240e:56c::/30", "4812"}, + {"2804:2eb8::/32", "265361"}, + {"2a02:26f7:c58c::/48", "36183"}, + {"2402:bd80::/30", "134450"}, + {"2a02:26f7:26::/48", "36183"}, + {"2a11:280::/29", "52164"}, + {"2001:559:c0a5::/46", "33659"}, + {"2401:d800:b970::/40", "7552"}, + {"240a:a0f5::/32", "142895"}, + {"240a:ac3c::/32", "145782"}, + {"2607:f220:f1::/48", "19050"}, + {"2800:6f0:1000::/40", "20207"}, + {"2804:351c:1112::/32", "266269"}, + {"2804:5b40::/32", "268829"}, + {"2001:1398:275::/48", "52306"}, + {"240a:a52d::/32", "143975"}, + {"240e:964:1000::/37", "133775"}, + {"2804:5be8::/34", "268876"}, + {"2a01:5b0:10::/47", "50611"}, + {"2a02:2e02:8330::/40", "12479"}, + {"2401:ee00:12a::/43", "23951"}, + {"240a:a579::/32", "144051"}, + {"2600:6c38:a44::/43", "20115"}, + {"2602:ffd1:5::/48", "393336"}, + {"2620:11f:7000::/44", "13737"}, + {"2620:13f:9000::/44", "14782"}, + {"2806:2f0:2021::/48", "22884"}, + {"2a02:26f7:d009::/42", "20940"}, + {"2a02:ee80:4279::/48", "3573"}, + {"2404:4f02:100::/32", "15830"}, + {"240e:438:3020::/43", "140647"}, + {"240e:966:9400::/38", "133776"}, + {"2800:200:b430::/41", "12252"}, + {"2806:230:1003::/48", "11888"}, + {"2806:2f0:9e21::/46", "17072"}, + {"2a03:6e80::/32", "15425"}, + {"2620:1e5::/40", "13382"}, + {"2a03:8d40::/32", "61287"}, + {"2c0f:f5f0::/32", "37564"}, + {"2001:1838:3100::/33", "23352"}, + {"2a00:1aa0::/32", "209480"}, + {"2a02:ee80:41d7::/48", "3573"}, + {"2a05:dfc7:6::/48", "62240"}, + {"2a06:da80::/29", "212144"}, + {"2001:559:c310::/48", "22909"}, + {"2001:16d8:900::/32", "16150"}, + {"2400:ac40:a60::/40", "136255"}, + {"2400:cb00:a2d0::/47", "13335"}, + {"2606:a000:c08::/35", "11426"}, + {"2804:8288::/32", "272525"}, + {"2a06:a001:a0c4::/48", "141694"}, + {"2001:559:128::/48", "7015"}, + {"2001:da8:e813::/48", "138373"}, + {"2401:95c0:2d04::/38", "9678"}, + {"2401:d800:5540::/42", "7552"}, + {"2408:8459:9a50::/37", "17816"}, + {"2804:4a90::/35", "267249"}, + {"2a02:26f7:e680::/48", "36183"}, + {"2a04:a040::/29", "21277"}, + {"2a0c:d500::/29", "41765"}, + {"2402:8100:38c0::/39", "45271"}, + {"2408:8459:8a10::/42", "17623"}, + {"240a:a44f::/32", "143753"}, + {"2804:214:8460::/40", "26615"}, + {"2a03:f80:971::/48", "9009"}, + {"2a03:4d40::/31", "199610"}, + {"2a06:1600:2::/48", "39221"}, + {"2001:df3:2e85::/46", "9833"}, + {"2406:7300:4::/40", "17559"}, + {"2408:8957:dd00::/40", "17816"}, + {"240a:ad02::/32", "145980"}, + {"2800:bf0:a10a::/48", "27947"}, + {"2a02:348:1f::/41", "35470"}, + {"2402:1440:200::/32", "132168"}, + {"2408:8456:9c40::/38", "17816"}, + {"2409:8c54:6100::/32", "56040"}, + {"2a04:84c0::/32", "200083"}, + {"2a09:bac0:26::/44", "13335"}, + {"2a0c:5247:c000::/36", "59504"}, + {"2403:e800:807::/44", "4637"}, + {"2a04:c000::/29", "202194"}, + {"2001:559:c18c::/48", "13367"}, + {"2001:df7:1380::/48", "138754"}, + {"2001:df7:4808::/48", "131893"}, + {"2408:840c:d600::/40", "17621"}, + {"2804:7c8:7000::/32", "262323"}, + {"2804:3384::/32", "265401"}, + {"2001:a18::/29", "2602"}, + {"2402:8100:3940::/40", "45271"}, + {"2a0e:46c3:200::/47", "208717"}, + {"2a11:6780::/29", "204790"}, + {"2401:4900:1260::/44", "45609"}, + {"2804:5268::/39", "268516"}, + {"240a:a964::/32", "145054"}, + {"2600:6000:fa6a::/40", "12271"}, + {"2001:b400:f410::/45", "3462"}, + {"2405:1fc0:720::/48", "139188"}, + {"2600:140b:d801::/37", "20940"}, + {"2804:3830::/32", "266463"}, + {"2a00:c5a0::/32", "39279"}, + {"2001:67c:2d28::/48", "29236"}, + {"2402:9900:200::/48", "27435"}, + {"2406:2400:7777::/48", "45287"}, + {"2806:283:4000::/36", "265515"}, + {"2a01:8:8012::/27", "2860"}, + {"2a02:26f7:f709::/46", "20940"}, + {"2a04:9440::/30", "21182"}, + {"2a0c:93c0:c002::/48", "212465"}, + {"2804:36a8::/32", "266362"}, + {"2804:6140::/32", "61597"}, + {"2a05:dfc7:24::/47", "203909"}, + {"2001:579:9340::/40", "22773"}, + {"240e:3b1:1400::/38", "134773"}, + {"2a12:1c00::/29", "1239"}, + {"2406:94c0::/48", "137767"}, + {"2a05:6cc0::/29", "25151"}, + {"2a10:9f40::/29", "211721"}, + {"2804:ec8::/32", "262532"}, + {"2804:2e44:f700::/36", "265335"}, + {"2806:2f4:1200::/40", "265540"}, + {"2a02:4e0:2600::/41", "16135"}, + {"2a06:af00::/29", "15694"}, + {"2c0f:ebf8::/32", "328436"}, + {"2401:d800:74a2::/41", "7552"}, + {"2402:8d03:ffee::/48", "135008"}, + {"2409:8c63::/27", "9808"}, + {"2401:f9c0:2600::/40", "133398"}, + {"2408:840c:600::/40", "17621"}, + {"240a:a57b::/32", "144053"}, + {"2600:1017:9800::/44", "22394"}, + {"2800:bf0:116::/47", "27947"}, + {"2804:8004::/32", "271724"}, + {"2001:678:b98::/48", "207822"}, + {"2405:1e00:fe::/47", "17771"}, + {"2804:19b4:1::/48", "61813"}, + {"2407:f100:5::/32", "133075"}, + {"2605:a401:8585::/44", "33363"}, + {"2a0f:9d80::/32", "207449"}, + {"2001:418:c06::/48", "262"}, + {"240a:a5ec::/32", "144166"}, + {"2804:4bb4::/39", "267325"}, + {"2804:63a4::/32", "269374"}, + {"2a0f:9400:802a::/48", "20473"}, + {"2001:559:c069::/48", "7922"}, + {"240a:abac::/32", "145638"}, + {"2402:800:540f::/43", "7552"}, + {"2a02:26f7:e584::/48", "36183"}, + {"2a0d:1ac7::/32", "56601"}, + {"2001:559:80d3::/48", "7922"}, + {"2001:559:83ee::/48", "7922"}, + {"2001:da8:c5::/48", "138438"}, + {"2401:bb40::/32", "136838"}, + {"2401:d800:b70::/40", "7552"}, + {"2401:d800:7b40::/42", "7552"}, + {"2610:20:5004::/48", "5744"}, + {"2620:11b:e0f0::/47", "560"}, + {"2804:1ac4:4000::/34", "61884"}, + {"2401:8a00:f700::/36", "10099"}, + {"2405:84c0:9710::/44", "40676"}, + {"2804:8134::/32", "272439"}, + {"2a00:5ee0:4000::/32", "44925"}, + {"2a04:4e40:9640::/44", "54113"}, + {"2a0d:b201:30d0::/42", "206026"}, + {"2001:1248:98f6::/44", "11172"}, + {"2400:8b00:f00::/42", "45727"}, + {"2409:8c7b::/29", "9808"}, + {"2804:188::/33", "262750"}, + {"2804:283c::/32", "263949"}, + {"2001:559:8171::/48", "33657"}, + {"240e:45c:9200::/40", "131285"}, + {"2620:76:a000::/48", "33491"}, + {"2a04:cdc0::/29", "201661"}, + {"2001:4888:8044::/48", "6167"}, + {"2400:ca04:f024::/43", "23688"}, + {"2406:daa0:7080::/44", "16509"}, + {"240a:a057::/32", "142737"}, + {"2607:f428:91e0::/44", "19115"}, + {"2804:6ec::/32", "262613"}, + {"2403:6a40:2::/48", "135967"}, + {"240e:966:5800::/32", "4134"}, + {"2600:9000:1098::/42", "16509"}, + {"2a02:26f7:f810::/48", "36183"}, + {"2a06:e881:580a::/48", "204003"}, + {"2001:df5:5780::/48", "132513"}, + {"2408:8779:c000::/45", "140707"}, + {"240e:3bd:1800::/34", "4134"}, + {"2a04:b40::/29", "36057"}, + {"2a06:e881:73ff::/48", "16509"}, + {"2402:800:53c5::/43", "7552"}, + {"2408:8956:9e00::/40", "17622"}, + {"2602:ffe4:c0d::/48", "21859"}, + {"2804:93c:10c1::/32", "52878"}, + {"2a00::/22", "3209"}, + {"2401:af80:9015::/48", "45679"}, + {"2402:800:72f2::/39", "7552"}, + {"240e:108:2d::/48", "136197"}, + {"2804:1124::/32", "53142"}, + {"2a0b:1d00::/32", "49709"}, + {"2600:380:200::/36", "20057"}, + {"2604:8540:fcd0::/47", "33353"}, + {"2610:190:df00::/40", "62"}, + {"2401:fd80:800::/48", "138177"}, + {"2402:800:53e0::/44", "7552"}, + {"2001:559:28c::/48", "33287"}, + {"240e:3b0::/35", "134773"}, + {"240a:a48d::/32", "143815"}, + {"2620:116:5000::/40", "6059"}, + {"2a00:ec00::/32", "16066"}, + {"2a0b:4342:1a20::/44", "57578"}, + {"2806:20d:580d::/46", "32098"}, + {"2a02:26f7:dd41::/46", "20940"}, + {"2001:67c:1518::/48", "34776"}, + {"2001:a78::/29", "12399"}, + {"2806:230:1035::/40", "11888"}, + {"2401:d00::/32", "133466"}, + {"2404:5dc0::/32", "136652"}, + {"2409:8d15:800::/39", "56044"}, + {"2600:1408:3c01::/38", "20940"}, + {"2a00:1650::/32", "24768"}, + {"240a:a52e::/32", "143976"}, + {"2a04:540::/29", "44391"}, + {"2604:4700::/33", "53591"}, + {"2604:cc00:601::/48", "53292"}, + {"2804:1298::/32", "263486"}, + {"2804:6e74::/32", "270598"}, + {"2600:40ff:ff90::/47", "1321"}, + {"2a03:d6c0::/32", "199370"}, + {"2a05:c100::/29", "57809"}, + {"2409:8004:5::/36", "24547"}, + {"240a:ab56::/32", "145552"}, + {"2001:559:415::/46", "33652"}, + {"2a00:1300::/32", "49272"}, + {"2001:648:25e1::/38", "5408"}, + {"2607:f048::/32", "26803"}, + {"2804:2fc4::/32", "264911"}, + {"2804:5ce0::/32", "268936"}, + {"2001:b28::/46", "42065"}, + {"2403:300:13d5::/37", "714"}, + {"2804:6d3c::/32", "270519"}, + {"2a01:50a0::/32", "201764"}, + {"2a02:d40:7::/48", "197071"}, + {"2a02:26f7:bb49::/42", "20940"}, + {"2001:559:c3c5::/48", "33668"}, + {"2409:8744::/28", "24445"}, + {"2600:140b:e::/43", "20940"}, + {"2a07:e03:4::/42", "210083"}, + {"240a:a9d6::/32", "145168"}, + {"240d:c010:fb::/48", "139341"}, + {"2605:aa40::/32", "395394"}, + {"2606:2800:4a4c::/46", "15133"}, + {"2804:42bc::/38", "267522"}, + {"2a11:29c3:b00b::/48", "212149"}, + {"2409:896a:2800::/39", "9808"}, + {"240a:a7b4::/32", "144622"}, + {"2604:d600:1512::/47", "32098"}, + {"2001:4488:fd62::/38", "7713"}, + {"2405:7700:a000::/35", "45352"}, + {"2620:124:6060::/40", "40816"}, + {"2a02:ee80:4015::/42", "3573"}, + {"2a09:bac0:443::/48", "13335"}, + {"2001:559:c2bf::/48", "7922"}, + {"2401:c040::/32", "136965"}, + {"2402:800:56d3::/44", "7552"}, + {"2602:805:a000::/40", "398319"}, + {"2607:f220:402::/48", "30387"}, + {"2610:e8::/35", "6224"}, + {"2a12:8f00::/29", "60144"}, + {"2001:ee0:e900::/40", "45899"}, + {"2600:1406:2601::/36", "20940"}, + {"2a02:26f7:be08::/48", "36183"}, + {"2a02:ee80:4244::/47", "3573"}, + {"2a03:a360::/32", "12350"}, + {"2001:67c:20c::/48", "51289"}, + {"2001:1248:5779::/40", "11172"}, + {"2401:3c00:a4::/44", "38322"}, + {"2406:aa40::/32", "141383"}, + {"240e:3bb:dc00::/34", "4134"}, + {"2607:fbe0::/32", "40824"}, + {"2a02:7de0::/32", "8621"}, + {"2400:a980:14fe::/47", "133515"}, + {"2402:800:b530::/41", "7552"}, + {"2a01:8840:1a::/45", "12041"}, + {"2a02:26f7:bfc4::/48", "36183"}, + {"2a02:2f08:efff::4/29", "8708"}, + {"2a09:eb40::/32", "205718"}, + {"2001:67c:2b0::/48", "29432"}, + {"2001:67c:400::/48", "44233"}, + {"2001:67c:2d30::/48", "207575"}, + {"2409:8915:7400::/39", "56044"}, + {"2a02:110::/32", "44776"}, + {"2407:5200:33::/41", "55915"}, + {"2804:18:6a00::/37", "10429"}, + {"2a05:e700::/29", "198710"}, + {"2001:559:859f::/48", "33287"}, + {"2001:559:c01d::/48", "7015"}, + {"2404:bf40:84c0::/48", "7545"}, + {"2404:bf40:a303::/42", "139084"}, + {"2800:bf0:1d3::/38", "27947"}, + {"2001:4200:3201::/44", "2018"}, + {"2806:2f0:23e1::/48", "22884"}, + {"2001:559:2f1::/46", "33287"}, + {"2001:678:578::/48", "198956"}, + {"2001:df0:9e00::/48", "132164"}, + {"2401:5a00:ffff::/48", "10032"}, + {"2605:bc40::/32", "7040"}, + {"2804:108c:f400::/36", "28146"}, + {"2804:1a04:7::/44", "61832"}, + {"2a02:1010:c200::/40", "9197"}, + {"2a02:26f7:c888::/48", "36183"}, + {"2a02:26f7:f8d9::/42", "20940"}, + {"2a03:ec00:b500::/36", "12847"}, + {"2409:8905:7d20::/30", "24547"}, + {"2800:88:10::/46", "26210"}, + {"2803:4440::/32", "28009"}, + {"2804:6ef8::/35", "270630"}, + {"2a02:26f7:be89::/46", "20940"}, + {"2a04:b580::/29", "30742"}, + {"2a10:cac0::/29", "43872"}, + {"2607:a500:df01::/43", "12025"}, + {"2a00:e08::/32", "16175"}, + {"2a02:26f7:f909::/46", "20940"}, + {"2a09:4c2:2c::/48", "205977"}, + {"2c0f:f300::/48", "37153"}, + {"2001:978:a700::/48", "33811"}, + {"240a:ab31::/32", "145515"}, + {"2607:5f80::/32", "23336"}, + {"2806:230:4016::/48", "265594"}, + {"2a02:1680::/32", "50673"}, + {"2a06:79c0:2::/29", "15622"}, + {"2a0a:8880::/46", "50937"}, + {"2605:e780::/32", "11142"}, + {"2607:f298:5::/46", "26347"}, + {"2a0e:800:ff00::/48", "209083"}, + {"2001:da8:247::/48", "24350"}, + {"2403:4c0:7800::/37", "56207"}, + {"2409:10::/28", "55391"}, + {"240a:aeef::/32", "146473"}, + {"2620:1f0::/32", "1798"}, + {"2801:15:c800::/48", "18747"}, + {"2804:4e08:2001::/32", "268235"}, + {"2a0f:1e00:987::/48", "30633"}, + {"2001:67c:2f94::/48", "34288"}, + {"2406:e000:333::/41", "23655"}, + {"240a:a255::/32", "143247"}, + {"2a00:1370:f200::/48", "57681"}, + {"2a04:e4c0:10::/48", "36692"}, + {"240a:a936::/32", "145008"}, + {"2602:103:6000::/35", "20115"}, + {"2804:5304::/32", "268557"}, + {"2a00:1728:19::/48", "47748"}, + {"2a04:4e40:6040::/44", "54113"}, + {"2001:67c:2c2c::/48", "57763"}, + {"2402:800:9b63::/43", "7552"}, + {"240a:a314::/32", "143438"}, + {"2800:c30:ae00::/33", "52361"}, + {"2a02:d80::/32", "12778"}, + {"2001:559:173::/45", "7016"}, + {"240a:a04c::/32", "142726"}, + {"240e:44d:7e80::/41", "4134"}, + {"2804:5250:4000::/34", "268510"}, + {"2001:559:82f5::/48", "22909"}, + {"2001:579:417f::/40", "22773"}, + {"2407:c1c0::/48", "135905"}, + {"2408:832e::/27", "4837"}, + {"2409:8924:700::/36", "56046"}, + {"240e:44d:4200::/42", "140345"}, + {"2600:1a0f:1001::/36", "46650"}, + {"2620:0:2901::/48", "13916"}, + {"2405:1c0:6251::/46", "55303"}, + {"240a:acae::/32", "145896"}, + {"2001:559:27a::/48", "7015"}, + {"2401:4900:4b50::/44", "45609"}, + {"2409:8904:4060::/39", "24547"}, + {"2605:3380:416a::/43", "12025"}, + {"2a09:4e07:4000::/34", "208861"}, + {"240a:a8f4::/32", "144942"}, + {"2604:6d00:2200::/48", "36223"}, + {"2804:269c:fe07::/48", "47065"}, + {"2804:726c::/32", "270851"}, + {"2a0b:f880::/29", "200548"}, + {"2607:fd48:301:100::/46", "13536"}, + {"2804:2b38:b00::/32", "265141"}, + {"2a07:1980:8::/48", "48851"}, + {"2610:20:9200::/39", "3477"}, + {"2803:4580:c000::/35", "52468"}, + {"2401:d800:f730::/41", "7552"}, + {"2604:1380:4630::/41", "54825"}, + {"2a01:7f60::/42", "9115"}, + {"2a02:26f7:ddc9::/42", "20940"}, + {"2a02:2e02:8830::/41", "12479"}, + {"2a03:1ea0::/32", "201714"}, + {"2a05:e0c0::/29", "201011"}, + {"2a07:e7c0:1000::/48", "201076"}, + {"2606:ae00:7090::/39", "7287"}, + {"2804:3088::/32", "264959"}, + {"2a02:2e8::/32", "44512"}, + {"2a02:fa8:1c10::/44", "41041"}, + {"2600:1417:6::/47", "20940"}, + {"2605:1c00:fff0::/44", "16787"}, + {"2800:bf0:284::/48", "27947"}, + {"2803:33c0::/32", "265721"}, + {"2804:50f0::/32", "268420"}, + {"2804:6210::/36", "269273"}, + {"2c0f:f3c0::/32", "3491"}, + {"2a02:26f7:fbc0::/48", "36183"}, + {"2001:67c:247c::/48", "49754"}, + {"2402:800:7fe0::/32", "7552"}, + {"2800:bf0:8060::/46", "52257"}, + {"2a00:5da0::/32", "48716"}, + {"2a0b:4340:3231::/39", "48024"}, + {"2a00:6640::/32", "15699"}, + {"2a00:bd80::/32", "51395"}, + {"2a0e:cd01:1b00::/34", "23031"}, + {"2401:d800:7d80::/42", "7552"}, + {"2600:14a0:101::/27", "20940"}, + {"2804:2e8:3::/45", "262847"}, + {"2804:1898:3200::/32", "61942"}, + {"2804:59b8::/32", "268721"}, + {"2401:8800::/46", "17439"}, + {"2804:6d14::/32", "270511"}, + {"2a0b:e900::/29", "13285"}, + {"2a0f:a3c0::/29", "39087"}, + {"2401:1d40:2000::/48", "4811"}, + {"240a:ab24::/32", "145502"}, + {"2607:fdf0:5edd::/42", "8008"}, + {"2a0e:5b00::/29", "212616"}, + {"2001:4c28:4000::/36", "39832"}, + {"2405:a300:1000::/48", "45432"}, + {"2602:fd50:f31::/48", "212149"}, + {"2620:0:2b70::/44", "22847"}, + {"2804:3190::/32", "53097"}, + {"2a02:188::/35", "31027"}, + {"2001:df0:9d80::/48", "139221"}, + {"2402:cb40::/32", "135132"}, + {"2407:d200::/32", "38532"}, + {"2600:6c10:606::/47", "20115"}, + {"2001:1248:1::/45", "11172"}, + {"240e:356:5c00::/34", "134419"}, + {"2600:1408:f800::/48", "35994"}, + {"2600:9000:2038::/41", "16509"}, + {"2804:5e34::/32", "269018"}, + {"2001:c80::/40", "4673"}, + {"2404:5600::/32", "23700"}, + {"2408:8642::/32", "4837"}, + {"240e:3b6:1800::/34", "4134"}, + {"240e:44d:3680::/41", "4134"}, + {"2602:ff67::/36", "15231"}, + {"2604:ff00:ae00::/44", "36271"}, + {"2610:f0:20d::/43", "22925"}, + {"2804:18:4808::/42", "26599"}, + {"2a03:b000:b00::/37", "42695"}, + {"2001:559:c21f::/48", "33651"}, + {"2401:3bc0:100c::/43", "137409"}, + {"2605:8000:de2b::/34", "4261"}, + {"2a02:26f7:81::/48", "20940"}, + {"2a02:26f7:c011::/42", "20940"}, + {"2a09:cfc0::/29", "207709"}, + {"2a10:4741:22::/48", "208768"}, + {"2404:8d02:2642::/36", "9587"}, + {"2606:e880::/32", "46811"}, + {"2806:3c7::/32", "265530"}, + {"2001:559:8788::/46", "7015"}, + {"2600:8808:3e00::/39", "64019"}, + {"2a02:26f7:e784::/48", "36183"}, + {"2600:140b:1800::/48", "24319"}, + {"2600:1417:1800:300::/48", "20940"}, + {"2607:f6f0:4002::/45", "29884"}, + {"2a02:2ab8::/39", "702"}, + {"2404:8000:81::/44", "17451"}, + {"2600:1002:a100::/44", "6167"}, + {"2a05:cc00::/29", "47447"}, + {"2401:1900:30::/44", "45245"}, + {"2600:5c00:2541::/48", "3456"}, + {"2a01:b740:a26::/48", "6185"}, + {"2a03:f80:47::/44", "9009"}, + {"2a0d:3842:1080::/48", "57629"}, + {"2001:67c:267c::/48", "60713"}, + {"2404:6740:2000::/48", "138608"}, + {"240a:a567::/32", "144033"}, + {"2804:4860::/32", "267117"}, + {"2409:8958:cb44::/43", "9808"}, + {"2607:fff8::/32", "47027"}, + {"2620:129:6000::/48", "395363"}, + {"2001:6d0:6d01::/45", "42385"}, + {"240e:438:9240::/37", "4134"}, + {"2a03:7a40::/32", "48173"}, + {"2a10:4646:11::/48", "212106"}, + {"2405:a000::/43", "7693"}, + {"2408:8459:5480::/42", "136959"}, + {"2a01:88::/32", "15806"}, + {"2a01:f8::/32", "39912"}, + {"2a02:7900:101::/32", "16154"}, + {"2a0f:c444::/48", "212073"}, + {"2001:67c:2170::/48", "43376"}, + {"2401:d800:bfe0::/43", "7552"}, + {"2803:7000:e000::/36", "52362"}, + {"2a0a:ad40::/32", "211428"}, + {"2605:a401:89ed::/43", "33363"}, + {"2a10:1bc0::/29", "28972"}, + {"2604:3d40::/32", "40943"}, + {"2607:f250:d018::/48", "7046"}, + {"2a03:1160::/40", "201727"}, + {"2a07:3200::/29", "201873"}, + {"2a0a:e2c3::/32", "201525"}, + {"2001:559:81f2::/48", "33652"}, + {"2a00:5a20:3a11::/32", "199289"}, + {"2a0e:97c0:7f0::/44", "207043"}, + {"2001:559:81d5::/46", "7015"}, + {"2403:b4c0:9000::/36", "138398"}, + {"2408:8956:c400::/40", "17622"}, + {"2409:8054:20::/48", "9808"}, + {"2409:8055:3c::/48", "9808"}, + {"240e:438:5620::/43", "140647"}, + {"2605:ef80::/45", "36492"}, + {"2800:300:8240::/37", "27651"}, + {"2801:10c::/44", "18747"}, + {"2a02:29d0::/32", "35575"}, + {"2a09:11c0:1000::/36", "56381"}, + {"2404:1fc0:1104::/48", "58534"}, + {"2404:7700::/48", "58664"}, + {"2804:5188::/32", "268458"}, + {"2a02:26f7:c784::/47", "36183"}, + {"2604:cf80::/32", "3257"}, + {"2804:80a8:200::/32", "271765"}, + {"2a0c:7580::/29", "8823"}, + {"2001:ee0:9440::/38", "45899"}, + {"2407:4600::/32", "45295"}, + {"2607:f550::/32", "30059"}, + {"2804:1c8c::/32", "28322"}, + {"2a02:ac80:c01::/39", "25145"}, + {"2a0b:7087:fff0::/44", "50867"}, + {"2600:1001:b000::/42", "6167"}, + {"2804:5400::/32", "268622"}, + {"2a02:26f7:c6::/48", "36183"}, + {"2a09:3d04::/32", "208861"}, + {"2a0a:e840::/29", "25540"}, + {"2001:da8:9012::/44", "24369"}, + {"2401:a480:2::/48", "133750"}, + {"2406:da70:6000::/40", "16509"}, + {"2600:9000:a700::/43", "16509"}, + {"2800:160:1e11::/46", "14259"}, + {"2a02:26f7:b6c1::/46", "20940"}, + {"2001:67c:1320::/48", "61183"}, + {"2402:e580::/44", "40138"}, + {"2620:120:f000::/40", "394169"}, + {"2a07:4000::/29", "205639"}, + {"2409:8b10::/34", "9808"}, + {"240a:a328::/32", "143458"}, + {"2605:d480::/32", "3257"}, + {"2610:a1:3084::/47", "399155"}, + {"2804:1cd4::/35", "61678"}, + {"2603:c0e1::/36", "54253"}, + {"2a12:42c0::/29", "62119"}, + {"2401:4900:4f53::/45", "9730"}, + {"240e:978:b00::/37", "4134"}, + {"2804:117c::/32", "53061"}, + {"2806:1030:ceff::/34", "8151"}, + {"2a02:26f7:c500::/48", "36183"}, + {"2a0b:4341:1500::/48", "57695"}, + {"2403:3440:c00::/32", "4787"}, + {"2404:bf40:c300::/48", "7545"}, + {"2408:840c:5f00::/40", "17621"}, + {"2804:22a0:c10::/32", "264112"}, + {"2a02:2010:2800::/43", "20978"}, + {"2a09:4::/48", "3258"}, + {"2001:470:114::/44", "6939"}, + {"2001:559:2e7::/48", "33668"}, + {"2001:1388:3cc4::/33", "6147"}, + {"2400:cb00:43::/44", "13335"}, + {"2408:8956:6100::/40", "17816"}, + {"2804:7438::/46", "270967"}, + {"2001:559:c120::/48", "33657"}, + {"2401:95c0::/34", "9678"}, + {"2605:a401:80d7::/44", "33363"}, + {"2801:80:1320::/48", "263953"}, + {"2a06:f880::/29", "200719"}, + {"2001:1a68:22::/44", "15694"}, + {"240a:a412::/32", "143692"}, + {"2800:98:1100::/43", "14754"}, + {"2804:14c:4a6::/41", "28573"}, + {"2a00:f60::/32", "48635"}, + {"2001:559:c363::/48", "33659"}, + {"2001:1440:204::/32", "8469"}, + {"2404:1100::/32", "134078"}, + {"2406:da16::/36", "16509"}, + {"240e:438:7a20::/43", "140647"}, + {"2a00:6280::/32", "12978"}, + {"2001:250:801::/48", "24348"}, + {"2401:d800:7530::/41", "7552"}, + {"240a:a848::/32", "144770"}, + {"2610:128:1300::/34", "11686"}, + {"2620:98:e008::/48", "399728"}, + {"2a02:2940::/32", "13246"}, + {"2001:559:185::/48", "7015"}, + {"2001:13c7:6019::/48", "52508"}, + {"2001:16a2:4032::/39", "39386"}, + {"2600:370f:9024::/41", "32261"}, + {"2607:f278::/32", "6360"}, + {"2a00:e50::/29", "15451"}, + {"2a0e:5fc0::/29", "207686"}, + {"240a:ac69::/32", "145827"}, + {"2a02:26f7:b581::/46", "20940"}, + {"2a0f:5381::/35", "208135"}, + {"2a01:a040::/32", "39791"}, + {"2a0d:57c0::/29", "44212"}, + {"2a0e:c080::/29", "6768"}, + {"2001:1490::/47", "8895"}, + {"2402:5300:2210::/39", "45903"}, + {"2405:c700::/32", "17939"}, + {"2408:8456:3050::/39", "17816"}, + {"2a01:6480:11::/46", "29049"}, + {"2408:8256:3996::/48", "17816"}, + {"2804:14c:5b88::/43", "28573"}, + {"2804:6db0::/32", "270549"}, + {"2804:7ed0::/32", "271649"}, + {"2a03:7460::/32", "24971"}, + {"2001:559:c121::/48", "33659"}, + {"2401:17c0::/32", "136533"}, + {"2402:4440:9c10::/42", "24423"}, + {"2405:b580::/32", "135234"}, + {"2a02:2160:7111::/46", "201308"}, + {"2620:13a:c013::/42", "53356"}, + {"2001:559:83a7::/44", "33652"}, + {"2600:1488:a281::/39", "20940"}, + {"2600:370f:734f::/42", "32261"}, + {"2620:0:1aa0::/48", "20464"}, + {"2804:809c::/32", "271762"}, + {"2402:3000::/32", "23637"}, + {"2405:6e00:f800::/48", "133612"}, + {"2606:2040::/32", "49791"}, + {"2a09:9180:ec00::/42", "42081"}, + {"2c0f:fc89:8023::/43", "36992"}, + {"2001:579:1934::/37", "22773"}, + {"2001:4048:105::/48", "198345"}, + {"2804:204:21e::/42", "28186"}, + {"2a01:8840:bd::/48", "207266"}, + {"2a01:8840:1ba::/45", "12041"}, + {"2a02:26f7:eac0::/48", "36183"}, + {"2a07:59c6:eed3::/48", "48646"}, + {"2001:df0:3a80::/48", "139002"}, + {"2001:1248:98a5::/48", "11172"}, + {"2a02:2ca7:2e::/48", "58305"}, + {"2001:da8:9008::/45", "24369"}, + {"240e:41:4800::/32", "4134"}, + {"2a00:d1a0:2::/32", "61317"}, + {"2a02:26f0:d100::/48", "9121"}, + {"2a02:7c40:8000::/33", "8758"}, + {"2001:df7:1680::/48", "19151"}, + {"2001:1248:a4de::/47", "11172"}, + {"2800:484:d400::/39", "14080"}, + {"2a07:a343:aee0::/44", "9009"}, + {"2a0e:1d80:10::/46", "9009"}, + {"2001:67c:22ec::/48", "197874"}, + {"2401:4900:519c::/46", "45609"}, + {"2600:6c38:7d::/40", "20115"}, + {"2804:2c0:fbc1::/37", "262834"}, + {"2804:2370::/32", "264162"}, + {"2a02:2278:211::/45", "28907"}, + {"2a07:cf40::/32", "209578"}, + {"2600:d0a:4000::/31", "20161"}, + {"2800:bf0:80d4::/44", "27947"}, + {"2804:14c:7571::/46", "28573"}, + {"2804:161c:e00::/45", "263268"}, + {"2001:67c:2d38::/48", "207576"}, + {"240a:a46c::/32", "143782"}, + {"2600:0:2::/30", "1239"}, + {"2804:8298::/32", "272528"}, + {"2001:678:c10::/48", "207488"}, + {"240a:a8da::/32", "144916"}, + {"240e:44d:1d00::/41", "140345"}, + {"2803:1a00:150e::/43", "262186"}, + {"2803:5110:1000::/48", "271993"}, + {"2803:bee0::/48", "269989"}, + {"2a06:3040:12::/48", "203020"}, + {"2a0b:f740::/29", "198776"}, + {"2a10:2f00:120::/48", "205977"}, + {"2001:559:838d::/48", "7015"}, + {"2600:6c7f:93a0::/44", "19115"}, + {"2a00:12f8::/37", "9198"}, + {"2602:fc6a:200::/48", "399747"}, + {"2803:4480::/33", "263189"}, + {"2804:2214::/44", "28177"}, + {"2a02:26f7:c489::/46", "20940"}, + {"2a02:26f7:cb88::/48", "36183"}, + {"2401:1b00::/32", "18103"}, + {"2401:d800:f5e2::/38", "7552"}, + {"2607:f6f0:1c00::/40", "15830"}, + {"2607:f768::/34", "33152"}, + {"2001:c38:902b::/41", "9931"}, + {"2409:8b31::/29", "9808"}, + {"240a:a15d::/32", "142999"}, + {"240a:a50e::/32", "143944"}, + {"2600:1406:800::/48", "35994"}, + {"2a06:e380::/47", "203507"}, + {"2401:d800:26e2::/39", "7552"}, + {"2804:1e90:1009::/38", "264436"}, + {"2a07:1b40::/31", "48804"}, + {"2001:250:3c00::/46", "138369"}, + {"2001:250:5426::/38", "23910"}, + {"2001:3c8:5007::/48", "17479"}, + {"2001:559:8691::/48", "33659"}, + {"2804:6e84::/32", "270602"}, + {"2a02:26f7:bfcd::/42", "20940"}, + {"2a02:2808:2501::/48", "197185"}, + {"2001:250:2101::/37", "23910"}, + {"2001:648:20f0::/48", "199399"}, + {"2001:67c:218::/48", "51172"}, + {"2401:d800:5ac0::/42", "7552"}, + {"240a:aa67::/32", "145313"}, + {"240a:ad99::/32", "146131"}, + {"240e:108:2f::/48", "134760"}, + {"2a0f:d8c0::/29", "207715"}, + {"2604:4a80::/32", "54665"}, + {"2804:14d:885::/46", "28573"}, + {"2806:2f0:11a0::/38", "17072"}, + {"2a0e:8f02:f032::/48", "211242"}, + {"2401:4900:2340::/43", "45609"}, + {"2600:1004:9000::/44", "6167"}, + {"2600:141b:6001::/36", "20940"}, + {"2804:214:8743::/43", "26615"}, + {"2001:559:82b1::/48", "33668"}, + {"2001:678:58::/48", "198147"}, + {"240e:980:8100::/40", "4134"}, + {"2602:fc30::/40", "21538"}, + {"2604:9d40::/48", "393290"}, + {"2607:fcd0:100:6600::/52", "8100"}, + {"2a00:1d58:cb80::/37", "47524"}, + {"2a01:6f0:200::/32", "42366"}, + {"2a0d:7fc0::/29", "211748"}, + {"2001:67c:2058::/48", "20712"}, + {"2001:67c:2544::/48", "44574"}, + {"2401:d800:bec0::/42", "7552"}, + {"2408:8256:3c61::/43", "17623"}, + {"240a:a40d::/32", "143687"}, + {"240c:ca1b::/32", "24363"}, + {"2620:72:4000::/48", "5050"}, + {"2800:2a0:2101::/37", "27947"}, + {"2a02:26f7:b704::/48", "36183"}, + {"2804:7650::/32", "271103"}, + {"2a03:3a00::/31", "49931"}, + {"2001:fd8:1e8::/38", "4775"}, + {"2408:840d:d200::/42", "17621"}, + {"240a:ac64::/32", "145822"}, + {"2600:6c38:149::/45", "20115"}, + {"2620:0:5070::/48", "302"}, + {"2620:a5:6001::/48", "16509"}, + {"2800:160:1107::/44", "14259"}, + {"2806:33f::/32", "270131"}, + {"2a02:26f7:f484::/48", "36183"}, + {"2409:8c35::/28", "9808"}, + {"2602:fc5d:350::/48", "399866"}, + {"2602:fed3:6::/48", "21769"}, + {"2a00:4300::/32", "44611"}, + {"2a03:5960::/32", "201324"}, + {"2001:559:227::/48", "13367"}, + {"2001:648:2420::/47", "31563"}, + {"2001:978:1d02::/38", "174"}, + {"2001:df0:2e1::/48", "58381"}, + {"2408:8456:4e00::/42", "17622"}, + {"240a:a4ea::/32", "143908"}, + {"2600:380:c800::/38", "7018"}, + {"2804:7d4c::/32", "271552"}, + {"2806:230:4043::/45", "265594"}, + {"2a02:568:fe02::/48", "31529"}, + {"2001:559:590::/48", "7016"}, + {"2400:5200:1400::/40", "55410"}, + {"240a:ab10::/32", "145482"}, + {"2605:8000:de01::/42", "4261"}, + {"2605:dd40:8990::/44", "16509"}, + {"2804:8384::/32", "272203"}, + {"2a02:26f7:b909::/46", "20940"}, + {"2001:559:c236::/48", "33662"}, + {"2001:1248:8749::/43", "11172"}, + {"2620:39::/48", "39984"}, + {"2804:2710::/32", "263873"}, + {"2a02:26f7:f105::/46", "20940"}, + {"2a05:6dc0::/29", "34822"}, + {"2a0c:b641:2f0::/44", "212424"}, + {"2400:7400:24::/44", "38044"}, + {"2402:c800::/40", "38639"}, + {"2a02:26f7:11c::/48", "36183"}, + {"2001:559:c20a::/48", "33491"}, + {"2405:1a80::/32", "18283"}, + {"240a:ac80::/32", "145850"}, + {"2a00:9e80::/40", "56791"}, + {"2001:df0:217::/48", "56201"}, + {"2402:800:9547::/43", "7552"}, + {"2803:8800::/32", "28022"}, + {"2804:19f4::/32", "61828"}, + {"2806:2f0:42e3::/39", "17072"}, + {"2001:67c:1484::/48", "28917"}, + {"2001:1248:5641::/44", "11172"}, + {"240e:438:3a20::/43", "140647"}, + {"2600:6c38:74::/46", "20115"}, + {"2600:9000:f530::/47", "16509"}, + {"2606:1640::/32", "25787"}, + {"2a01:b945::/30", "48635"}, + {"2401:d800:dff0::/44", "7552"}, + {"2409:8c28:a2c1::/39", "56041"}, + {"2604:9e80::/32", "30396"}, + {"2620:125:f000::/44", "395114"}, + {"2a02:7c8::/32", "24864"}, + {"2a06:1c40::/29", "204035"}, + {"2a11:7e01::/32", "44094"}, + {"2001:559:166::/48", "7922"}, + {"2001:44b8:4064::/48", "7545"}, + {"2a00:eac0::/32", "20915"}, + {"2001:5b0:24f4::/36", "6621"}, + {"2400:9800:5::/46", "24203"}, + {"2605:9440::/32", "397446"}, + {"2001:16b8:c00::/35", "8881"}, + {"2600:1480:8800::/48", "21342"}, + {"2600:370f:3645::/46", "32261"}, + {"2600:370f:52e3::/43", "32261"}, + {"2620:119:10::/46", "36692"}, + {"2804:20e0::/32", "264518"}, + {"2a02:26f7:c684::/48", "36183"}, + {"2a04:5080::/29", "35579"}, + {"2001:559:c335::/46", "7015"}, + {"2403:9100::/32", "45302"}, + {"2405:1c0:6861::/45", "55303"}, + {"2602:fd10:860::/43", "398795"}, + {"2608:106::/48", "27046"}, + {"2a00:4b00:22e::/40", "41935"}, + {"2a02:26f7:eb41::/46", "20940"}, + {"2001:da8:266::/48", "24348"}, + {"2a0b:3700::/47", "61317"}, + {"2a10:da80::/29", "211987"}, + {"2c0f:eb00:100::/40", "61266"}, + {"2001:559:872e::/43", "7922"}, + {"2001:678:6dc::/48", "41029"}, + {"2406:840:f890::/48", "212034"}, + {"2409:8043:2904::/47", "24444"}, + {"240e:44d:80::/41", "4134"}, + {"2804:14c:65d8::/42", "28573"}, + {"2a01:57a0::/32", "208909"}, + {"2a0f:9981::/29", "40676"}, + {"2404:bd40:10::/48", "138005"}, + {"2602:feda:2d0::/47", "133492"}, + {"2607:fb10:7100::/43", "2906"}, + {"2804:704c::/32", "270718"}, + {"2a03:4340::/32", "47279"}, + {"2a0f:35c0::/29", "60262"}, + {"2605:2100::/36", "14442"}, + {"2001:16f8:667::/34", "25525"}, + {"2804:4c9c::/32", "267380"}, + {"2a0d:ca47:8379::/33", "8423"}, + {"2001:3c8:a701::/48", "9562"}, + {"2001:df7:aa00::/48", "133800"}, + {"2600:370f:750a::/45", "32261"}, + {"2804:934::/32", "263059"}, + {"2804:e94::/41", "262468"}, + {"2804:5a5c:6000::/35", "268768"}, + {"2a01:bfe0::/32", "199997"}, + {"2a03:5a00:3f::/48", "197394"}, + {"2a06:dac0:100::/44", "212661"}, + {"2001:44b8:37::/48", "4739"}, + {"2404:1c40:2f::/43", "24432"}, + {"2a02:40::/32", "9009"}, + {"2a11:e87:2000::/36", "208861"}, + {"2c0f:f308::/32", "37223"}, + {"2605:cdc0:30::/47", "398088"}, + {"2a10:3d40::/29", "204790"}, + {"240a:a823::/32", "144733"}, + {"2600:80c:900::/40", "701"}, + {"2a02:26f7:c2c4::/48", "36183"}, + {"2a05:7440:a5ac::/48", "200165"}, + {"2001:43c8::/32", "20928"}, + {"2620:12e:f000::/40", "46771"}, + {"2800:160:185b::/45", "14259"}, + {"2a00:85c0:1::/48", "203315"}, + {"2a04:e4c0:30::/47", "36692"}, + {"2a0c:e100::/29", "33962"}, + {"2001:559:7ba::/48", "7922"}, + {"2001:67c:24b4::/48", "8587"}, + {"240a:a8f5::/32", "144943"}, + {"2800:484:400::/38", "10620"}, + {"2a12:a4c2::/32", "45036"}, + {"2001:559:c4c7::/48", "33651"}, + {"2001:1248:96b6::/44", "11172"}, + {"2404:0:5003::/45", "17709"}, + {"2409:896a:9200::/39", "9808"}, + {"2600:6c10:ff2d::/40", "20115"}, + {"2600:6c38:f0a::/45", "20115"}, + {"2602:fc23:116::/48", "8095"}, + {"2804:1b2:f104::/36", "18881"}, + {"2804:83b4::/32", "272213"}, + {"2a06:7240:6::/48", "57878"}, + {"240a:a1cb::/32", "143109"}, + {"2620:171:3d::/46", "715"}, + {"2a02:2e0:3fc::/48", "205766"}, + {"2a04:6e80:1::/46", "174"}, + {"2001:559:70::/47", "13367"}, + {"2405:84c0:9700::/44", "9886"}, + {"2610:108:3100::/40", "13506"}, + {"240e:d:800::/37", "58563"}, + {"240e:978:5100::/36", "4134"}, + {"2804:3bd4::/32", "266173"}, + {"2a0a:2306:e000::/46", "20853"}, + {"2406:3d40::/32", "134980"}, + {"2600:6c38:71a::/42", "20115"}, + {"2804:b44::/32", "262448"}, + {"2a03:4b40:5183::/38", "50710"}, + {"2600:6c10:f20b::/42", "20115"}, + {"2a01:b943::/29", "48635"}, + {"2a0e:be00::/29", "210662"}, + {"2602:ffb7:594::/48", "62874"}, + {"2001:1248:8701::/46", "11172"}, + {"2403:e440::/32", "138096"}, + {"2408:8456:8200::/42", "17622"}, + {"2600:6c38:d12::/47", "20115"}, + {"2607:6400:1101::/32", "30688"}, + {"2803:bd80::/32", "28007"}, + {"2804:3548::/32", "266279"}, + {"2a02:13b0:100::/40", "48635"}, + {"2a0c:e640:1018::/45", "141011"}, + {"240a:ab03::/32", "145469"}, + {"240e:44d:700::/41", "140345"}, + {"2604:4600::/28", "19531"}, + {"2604:4700:8000::/33", "53591"}, + {"2620:149:a31::/46", "6185"}, + {"2001:67c:2118::/48", "44033"}, + {"2602:fc3d::/36", "14051"}, + {"2804:529c:100::/32", "268529"}, + {"2804:7e34::/32", "271609"}, + {"2a02:20d8::/29", "31638"}, + {"2a04:2b00:119::/48", "206925"}, + {"2001:559:c1f3::/45", "7725"}, + {"2402:800:9ed3::/44", "7552"}, + {"2407:4ac0:6d81::/32", "142045"}, + {"2409:8f20::/25", "9808"}, + {"240a:ac06::/32", "145728"}, + {"2607:ffb0:300c::/47", "6327"}, + {"2a01:4a80::/32", "15630"}, + {"2a02:d740::/29", "199567"}, + {"2a03:4bc0:2900::/48", "30893"}, + {"2a0f:e2c0::/29", "8422"}, + {"2001:250:e00::/46", "138375"}, + {"2400:c980::/40", "132816"}, + {"240a:a7ec::/32", "144678"}, + {"240b:240::/26", "2516"}, + {"240b:4003:7::/48", "45102"}, + {"2602:fedd:1::/48", "397023"}, + {"2607:f740:90::/48", "36236"}, + {"2001:1248:a01a::/45", "11172"}, + {"2001:4b10::/32", "3213"}, + {"2804:1c84:7::/37", "61659"}, + {"2a10:cc47:1000::/36", "210662"}, + {"2001:978:7b01:2::/32", "174"}, + {"2001:deb::/48", "63528"}, + {"2600:1003:f100::/44", "6167"}, + {"2600:1406:f800::/48", "35994"}, + {"2804:2c54::/32", "265210"}, + {"2400:54a0:1004::/48", "149476"}, + {"2600:1416:2000::/48", "25019"}, + {"2804:4eb8::/32", "268277"}, + {"2a02:ff0:3f00::/40", "12735"}, + {"2a02:e980:d8::/42", "19551"}, + {"2a10:b40::/29", "212144"}, + {"2408:8978::/30", "4837"}, + {"2804:7c2c::/32", "271480"}, + {"2a02:26f7:cb48::/48", "36183"}, + {"2a06:a600::/30", "400177"}, + {"2408:80ea:76e0::/43", "17623"}, + {"2600:1009:9110::/36", "22394"}, + {"2607:f5a8:8000::/33", "27589"}, + {"2607:f740:e020::/48", "63911"}, + {"2404:3e00::/32", "38758"}, + {"2408:8459:2150::/38", "17816"}, + {"2606:19c0::/32", "398860"}, + {"2607:fcd0::/39", "8100"}, + {"2803:5c80:5593::/48", "64114"}, + {"2804:14c:65e5::/43", "28573"}, + {"2a06:e881:6203::/48", "61138"}, + {"240a:a055::/32", "142735"}, + {"2804:68c:8000::/33", "262594"}, + {"2804:5e04::/33", "269006"}, + {"2a00:7ee0:8::/46", "16347"}, + {"2401:4900:47f0::/44", "45609"}, + {"2800:440:9200::/42", "27738"}, + {"2a02:78a0::/29", "59970"}, + {"2001:500:94::/48", "33517"}, + {"2402:3a80:b00::/41", "38266"}, + {"2404:8d06:b100::/31", "10089"}, + {"2406:e001:9000::/36", "23655"}, + {"240e:1f:2::/36", "134774"}, + {"2600:6c3b:4c1::/42", "20115"}, + {"2803:3aa0::/32", "266876"}, + {"2a12:4946:1650::/48", "211398"}, + {"2a02:26f0:9e00::/48", "34164"}, + {"2001:559:5f7::/48", "33652"}, + {"2600:6:ffc7::/31", "1239"}, + {"2600:1404:a801::/38", "20940"}, + {"2804:1380:2::/45", "263536"}, + {"2804:3170::/32", "265015"}, + {"2001:253:104::/48", "142070"}, + {"2403:b800:1000::/48", "45671"}, + {"240e:44d:3900::/41", "140345"}, + {"2804:3764::/32", "266409"}, + {"2804:5cfc::/32", "268944"}, + {"2a02:26f7:e4c8::/48", "36183"}, + {"2a02:26f7:ea49::/46", "20940"}, + {"2a06:f902::/36", "56630"}, + {"2404:4400::/28", "9790"}, + {"2800:160:1474::/44", "14259"}, + {"2a03:120::/32", "201718"}, + {"2001:559:8426::/48", "7015"}, + {"2001:1248:5586::/44", "11172"}, + {"2402:b400:4608::/42", "45960"}, + {"2a0e:1c80:f::/48", "3399"}, + {"2a0f:4240::/29", "52000"}, + {"2001:559:8407::/44", "7016"}, + {"2400:c540:1cc::/48", "59238"}, + {"240a:a4bf::/32", "143865"}, + {"240e:17:4000::/32", "4134"}, + {"2603:4000::/31", "3"}, + {"2001:978:4001::/38", "174"}, + {"2600:100d:f000::/44", "6167"}, + {"2806:2f0:4403::/42", "17072"}, + {"2c0f:f4c8::/32", "327872"}, + {"2409:8904:4d60::/38", "24547"}, + {"2a02:8040::/32", "25490"}, + {"2a0d:d180::/29", "206211"}, + {"2001:428:2001:205::/64", "20940"}, + {"240e:a64:2600::/32", "4134"}, + {"2602:fbf1::/44", "38136"}, + {"2a02:26f7:b84c::/48", "36183"}, + {"2a04:16c0::/39", "48921"}, + {"2403:400:600::/36", "23820"}, + {"240a:a649::/32", "144259"}, + {"2600:6c10:204::/44", "20115"}, + {"2a02:26f7:c898::/48", "36183"}, + {"2a02:26f7:f0c8::/48", "36183"}, + {"2001:559:232::/48", "20214"}, + {"240e:1f:6000::/36", "4816"}, + {"2804:81a8::/32", "272468"}, + {"2400:ca04:f037::/30", "23688"}, + {"2804:1b0:1a84::/37", "18881"}, + {"2001:1248:96ff::/39", "11172"}, + {"2400:4ec0:8e03::/39", "64300"}, + {"2402:f740:8000::/36", "138391"}, + {"240a:a9a7::/32", "145121"}, + {"2a02:ee80:40b4::/44", "3573"}, + {"2a02:ee80:4281::/46", "3573"}, + {"2a03:2880:f120::/47", "32934"}, + {"2a0c:cbc0::/35", "209620"}, + {"2a0e:97c3:502::/48", "20473"}, + {"2405:4cc1:e00::/40", "38794"}, + {"2409:8080:2a9f::/48", "56040"}, + {"2a0c:d000::/29", "20612"}, + {"2c0f:f440::/32", "5713"}, + {"240a:a3ff::/32", "143673"}, + {"2600:400:3610::/36", "15147"}, + {"2600:1411:1::/48", "24319"}, + {"2a03:8ae0::/32", "35677"}, + {"2804:954:801::/35", "263073"}, + {"2804:7a14::/32", "271346"}, + {"2001:a68::/32", "15830"}, + {"2402:e280:221a::/45", "134674"}, + {"2600:1403:6001::/38", "20940"}, + {"2800:440:8086::/48", "27738"}, + {"2001:559:c4a2::/48", "22909"}, + {"2001:1248:563d::/46", "11172"}, + {"2401:bd00:dc03::/48", "38636"}, + {"2404:3d00::/38", "3573"}, + {"2405:fd80:900::/37", "135391"}, + {"2600:9000:a104::/48", "16509"}, + {"2804:4134::/32", "266010"}, + {"2001:fd8:b230::/44", "4775"}, + {"240a:a9b9::/32", "145139"}, + {"2a02:26f7:ec44::/48", "36183"}, + {"2800:4b0:8100::/37", "12252"}, + {"2804:248:5::/44", "28598"}, + {"2804:2a80:22::/33", "53094"}, + {"2a03:2a84::/30", "47232"}, + {"2606:7c80:1::/48", "40300"}, + {"2a03:d780::/32", "49770"}, + {"2001:559:8546::/48", "33491"}, + {"2001:4878:8261::/48", "12222"}, + {"2400:3dc0:601::/39", "134371"}, + {"2409:806a:1900::/34", "9808"}, + {"2607:fcc0:6000::/35", "32244"}, + {"2620:3e:a000::/48", "393802"}, + {"2a09:1d40::/48", "209132"}, + {"2402:3a80:8::/46", "38266"}, + {"2408:8459:1e30::/41", "17622"}, + {"2607:c00::/32", "3801"}, + {"2803:6780::/32", "264635"}, + {"2a00:d3e0::/29", "15600"}, + {"2a01:b740:a1f::/48", "714"}, + {"2a09:4e06::/31", "208861"}, + {"2a0b:e980::/29", "51783"}, + {"2408:8256:3aa0::/39", "17816"}, + {"2600:6c42::/32", "20115"}, + {"2800:160:170f::/43", "14259"}, + {"2001:df6:7980::/48", "138719"}, + {"2404:af40::/47", "137020"}, + {"2404:af80::/48", "38026"}, + {"2620:136:bb::/48", "12025"}, + {"2806:230:204a::/48", "265594"}, + {"2408:84f3:3440::/44", "17623"}, + {"240e:4::/37", "140061"}, + {"2803:b2c0:3100::/47", "264851"}, + {"2804:2b1c::/32", "265135"}, + {"2a07:3501:1030::/48", "15542"}, + {"2401:d800:f560::/40", "7552"}, + {"2403:9800:b016::/48", "4771"}, + {"2405:b900:20::/44", "55701"}, + {"240a:a2fe::/32", "143416"}, + {"240a:a4bd::/32", "143863"}, + {"2604:7780::/32", "54489"}, + {"2804:6dfc::/32", "270568"}, + {"2001:559:3ff::/37", "33652"}, + {"2408:8957:a300::/40", "17816"}, + {"2409:8d14:2700::/36", "56044"}, + {"2606:2800:6a18::/47", "15133"}, + {"2a0f:1940::/29", "60262"}, + {"2a10:2840::/29", "213381"}, + {"2001:559:c30a::/48", "33657"}, + {"2001:4878:8321::/45", "12222"}, + {"2800:860:7::/44", "262197"}, + {"2804:7e4:8002::/40", "52865"}, + {"2804:4244::/32", "267489"}, + {"2804:7c9c::/32", "271507"}, + {"2a07:b440::/29", "43366"}, + {"2a10:7d00::/32", "399975"}, + {"2001:67c:2440::/48", "16107"}, + {"2404:bf40:8842::/39", "139084"}, + {"2408:8459:6610::/42", "17623"}, + {"2409:896a:8800::/39", "9808"}, + {"2800:5f0:101::/36", "22724"}, + {"2a11:f140::/29", "34907"}, + {"2607:f758::/35", "13649"}, + {"2803:ab00:91::/48", "52471"}, + {"2804:2be0::/33", "262503"}, + {"2001:559:c4ce::/48", "33491"}, + {"2400:ca03:f024::/29", "23688"}, + {"2600:1408:11::/44", "20940"}, + {"2804:890::/32", "52873"}, + {"2a01:518::/32", "25151"}, + {"2c0f:ffc8::/33", "22355"}, + {"2a07:c881::/32", "47557"}, + {"2001:67c:1bd4::/48", "25373"}, + {"240e:a::/29", "4134"}, + {"2604:6400:40e0::/37", "29974"}, + {"2804:4f0c::/32", "268300"}, + {"2a02:888:824a::/45", "47794"}, + {"2a02:5aa0::/32", "57795"}, + {"2a10:c5c1:beef::/48", "211547"}, + {"2001:559:8268::/48", "13367"}, + {"2001:978:6704::/43", "174"}, + {"2406:840:eb00::/45", "142553"}, + {"240a:a946::/32", "145024"}, + {"2605:900:f100::/36", "12110"}, + {"2610:1a0:70::/38", "40193"}, + {"2804:269c:fe01::/46", "47065"}, + {"2a07:60c0::/29", "24679"}, + {"2600:1014:b100::/42", "6167"}, + {"2001:67c:13d8::/48", "203158"}, + {"2001:12f8:c::/47", "14650"}, + {"2404:3d00:40ad::/43", "3573"}, + {"2409:8a52:100::/38", "56047"}, + {"240a:a544::/32", "143998"}, + {"2804:7c:3::/32", "28585"}, + {"2804:8404::/32", "272234"}, + {"2400:7400:57::/44", "38044"}, + {"2602:801:1008::/47", "11281"}, + {"2001:559:80c2::/48", "33657"}, + {"2a09:9440::/32", "47596"}, + {"2001:da8:c2::/48", "138378"}, + {"240a:a1de::/32", "143128"}, + {"2800:bf0:8100::/45", "52257"}, + {"2001:559:83de::/48", "33662"}, + {"2001:67c:2e0::/48", "43758"}, + {"2001:4490:d760::/46", "9829"}, + {"2408:805c::/34", "17816"}, + {"2001:470:4b::/45", "6939"}, + {"2404:3d80::/39", "61138"}, + {"240a:aa23::/32", "145245"}, + {"2800:160:1e57::/44", "14259"}, + {"2804:14d:90b0::/46", "28573"}, + {"2001:559:55e::/48", "33657"}, + {"2001:559:571::/48", "33287"}, + {"2001:5b0:8c00::/38", "6621"}, + {"2404:4a00:6501::/64", "55423"}, + {"240a:ac4a::/32", "145796"}, + {"2a05:500::/48", "174"}, + {"2a06:f080::/32", "203299"}, + {"2001:df0:ec0::/48", "56231"}, + {"2620:196::/32", "14014"}, + {"2804:52c::/32", "262501"}, + {"2001:67c:15d8::/48", "43668"}, + {"240e:f8::/32", "134773"}, + {"2600:1410:9001::/34", "20940"}, + {"2a02:26f7:dc81::/46", "20940"}, + {"2a10:9100:3::/48", "48721"}, + {"2a10:fcc0::/29", "62336"}, + {"2001:67c:44::/48", "8423"}, + {"2401:3cc0:101::/38", "137409"}, + {"2801:1fc:2e::/48", "27951"}, + {"2804:26a8::/32", "263847"}, + {"2a00:801:4c::/28", "1257"}, + {"2001:559:818b::/48", "33287"}, + {"2001:da8:4e02::/39", "23910"}, + {"240e:967:9800::/34", "4134"}, + {"2801:80:13a0::/48", "264080"}, + {"2804:5c9c::/32", "268919"}, + {"2a06:2b80::/29", "61317"}, + {"2a0f:53c0::/29", "8823"}, + {"2400:400:9::/48", "4766"}, + {"2404:1280:1::/48", "393398"}, + {"2800:bf0:8260::/45", "52257"}, + {"2a02:26f0:c100::/48", "34164"}, + {"2a03:ae40::/34", "61233"}, + {"2402:800:63f7::/44", "7552"}, + {"240a:af52::/32", "146572"}, + {"2600:1407:3801::/37", "20940"}, + {"2001:559:3a8::/48", "7016"}, + {"2401:3c00:c8::/45", "38322"}, + {"2602:fe0e::/36", "394378"}, + {"2a02:26f7:bec0::/48", "36183"}, + {"2a05:d03a:6000::/40", "16509"}, + {"2a0e:aa07:e026::/48", "210872"}, + {"2001:559:39f::/42", "33652"}, + {"2001:df1:fd80::/48", "42960"}, + {"2408:8957:a600::/40", "17622"}, + {"2607:f110::/45", "21889"}, + {"2804:15e4:ffc::/32", "53001"}, + {"2a01:8900::/32", "30847"}, + {"2a02:13f0:8100::/48", "48874"}, + {"2a02:26f7:c604::/48", "36183"}, + {"2001:559:512::/48", "7922"}, + {"2001:df7:f400::/47", "17436"}, + {"2400:a980:2000::/38", "133111"}, + {"2804:4240::/32", "267488"}, + {"2001:122c::/32", "18592"}, + {"2409:8087:6300::/36", "9808"}, + {"2606:f900::/35", "812"}, + {"2620:1d0:5b::/48", "397220"}, + {"2a04:6600::/29", "33856"}, + {"2401:4900:4dd0::/38", "45609"}, + {"2001:559:d7::/44", "7922"}, + {"240a:a20b::/32", "143173"}, + {"2800:484:3900::/38", "10620"}, + {"2804:7df4::/32", "271593"}, + {"2a00:ad87:1302::/48", "15465"}, + {"2c0f:ed00:351::/48", "328442"}, + {"2001:559:8210::/48", "33491"}, + {"2001:559:81cb::/48", "7015"}, + {"2001:559:8562::/48", "33651"}, + {"2001:559:c22b::/48", "33661"}, + {"2403:2d00:4::/32", "17516"}, + {"240a:a55f::/32", "144025"}, + {"2600:1407:22::/45", "35994"}, + {"2605:b900:2::/32", "36218"}, + {"2800:300::/33", "27986"}, + {"2a01:5041:200e::/48", "202196"}, + {"2a0c:b642:1a07::/48", "7489"}, + {"2001:df0:b980::/48", "139251"}, + {"2400:3e20:2000::/35", "210542"}, + {"2404:bf40:a300::/48", "2764"}, + {"240a:a378::/32", "143538"}, + {"2600:6c20:c3a::/41", "20115"}, + {"2605:6c00:1000::/33", "2734"}, + {"2607:f740:e604::/48", "63911"}, + {"2620:117:c000::/48", "21837"}, + {"2a00:7380:feee::/39", "51906"}, + {"2001:559:2b1::/48", "33491"}, + {"2001:559:7a3::/48", "7016"}, + {"2001:67c:1000::/47", "43893"}, + {"2606:ae00:bd41::/38", "7287"}, + {"2a05:fb43::/32", "208861"}, + {"2408:8459:8610::/42", "17623"}, + {"2001:559:dc::/48", "7016"}, + {"2001:559:c30e::/48", "33659"}, + {"2001:df7:780::/48", "141667"}, + {"2407:2a80::/32", "133524"}, + {"2800:484:b500::/38", "14080"}, + {"2a01:b740:a1b::/48", "714"}, + {"2404:cc80::/32", "135352"}, + {"2801:80:25a0::/48", "268001"}, + {"2001:559:42c::/48", "33657"}, + {"2001:559:87c9::/48", "7015"}, + {"2403:df40:17::/39", "14630"}, + {"2408:8456:5440::/39", "17816"}, + {"2806:109f:c::/43", "8151"}, + {"2a01:90e0::/32", "199733"}, + {"2a02:2e02:8ed0::/42", "12479"}, + {"2001:559:80ac::/48", "33668"}, + {"2406:e780:eb0::/48", "63678"}, + {"2804:16d8:56f1::/34", "262729"}, + {"2804:70d4:8000::/34", "270751"}, + {"2a00:d120:30::/44", "29990"}, + {"2a02:587:50fb::/34", "6799"}, + {"2a02:4780::/45", "47583"}, + {"2605:9d80:9003::/48", "4809"}, + {"2620:0:6e0::/48", "4185"}, + {"2a02:16e0::/32", "12703"}, + {"2a05:fe80::/29", "39702"}, + {"2405:1500:71::/40", "58717"}, + {"2620:130:1002::/48", "62649"}, + {"2803:6601:c000::/37", "28075"}, + {"2806:2f0:9be3::/37", "17072"}, + {"2a00:a980::/32", "9022"}, + {"2a02:26f0:4900::/48", "35994"}, + {"2a06:1c0::/30", "50873"}, + {"2a0f:5707:aa90::/44", "212592"}, + {"2401:d800:de40::/42", "7552"}, + {"240a:a74a::/32", "144516"}, + {"240a:ab16::/32", "145488"}, + {"2606:9440::/32", "400289"}, + {"2605:6dc0::/32", "394838"}, + {"2a02:f50::/32", "41833"}, + {"2a0f:b400:b::/29", "60781"}, + {"2610:20:2020::/38", "7764"}, + {"2620:9c:c000::/48", "393717"}, + {"2803:760:171::/35", "269816"}, + {"2401:d800:dcb2::/41", "7552"}, + {"2600:1415:3401::/36", "20940"}, + {"2602:fe60::/36", "209"}, + {"2804:3914::/32", "266523"}, + {"2a02:f30::/32", "15879"}, + {"2a02:cb43:2001::/48", "20546"}, + {"240a:a161::/32", "143003"}, + {"2804:4a24:50::/48", "267221"}, + {"2806:2f0:2043::/43", "22884"}, + {"240a:a7fd::/32", "144695"}, + {"240a:aca4::/32", "145886"}, + {"2600:1419:2c01::/38", "20940"}, + {"2603:c0e8:2800::/39", "1218"}, + {"2804:6b48::/32", "270390"}, + {"2001:250:5834::/46", "24363"}, + {"2001:559:c416::/44", "7015"}, + {"2401:9280::/32", "63494"}, + {"2402:800:32ee::/39", "7552"}, + {"2408:8459:7c30::/41", "17622"}, + {"2600:1901:4010::/44", "396982"}, + {"2600:6c10:186::/38", "20115"}, + {"2600:6c10:ff02::/45", "20115"}, + {"2603:b011::/25", "11796"}, + {"2804:4b40:40::/32", "267293"}, + {"2a0f:e640::/29", "60781"}, + {"2c0f:f980::/35", "33763"}, + {"2001:400:a000:3::/61", "293"}, + {"2402:9e00:403::/32", "24183"}, + {"2402:fb00::/34", "3300"}, + {"2605:a401:80e0::/44", "33363"}, + {"2804:ae0:2d00::/32", "28352"}, + {"2401:9d40::/32", "59165"}, + {"2408:8456:c40::/39", "17816"}, + {"2408:8957:b400::/40", "17622"}, + {"240e:40:9::/46", "4134"}, + {"2803:4580:8106::/40", "52468"}, + {"2a01:1b1::/32", "39292"}, + {"2a01:4bc0:901::/32", "12422"}, + {"2a10:8240::/32", "198175"}, + {"2402:800:51e0::/44", "7552"}, + {"2403:5cc0::/40", "134883"}, + {"2804:53a0::/35", "268596"}, + {"2a02:2ab0:503::/32", "702"}, + {"2c0f:4200:2000::/32", "328790"}, + {"2404:f4c0:a667::/36", "210320"}, + {"2607:5d80::/32", "20042"}, + {"2a01:8840:da::/45", "12041"}, + {"2a06:6540:3081::/48", "3549"}, + {"2a0a:59c7:1005::/46", "204724"}, + {"2406:840:e03f::/48", "142418"}, + {"2a10:7f80::/29", "60193"}, + {"2001:df7:7400::/48", "136052"}, + {"2408:84f3:2e40::/44", "17623"}, + {"2600:6c10:ff9a::/45", "20115"}, + {"2606:8e40:1::/48", "46513"}, + {"2a02:cb42::/32", "20546"}, + {"2a05:3a80::/48", "201499"}, + {"2401:d800:2660::/40", "7552"}, + {"2408:8256:379f::/36", "17816"}, + {"2a00:fb00::/29", "24951"}, + {"2a02:2b80:101::/48", "45012"}, + {"2a02:ee80::/34", "3573"}, + {"240a:a50f::/32", "143945"}, + {"240a:a70c::/32", "144454"}, + {"2605:dd40:8880::/44", "16509"}, + {"2800:160:1762::/44", "14259"}, + {"2804:e94:a0::/41", "262468"}, + {"2001:da8:b3::/48", "24362"}, + {"240e:1f:cf00::/40", "134774"}, + {"2604:ae80:6001::/46", "11904"}, + {"2803:cbc0:1000::/36", "265749"}, + {"2a02:26f7:d500::/48", "36183"}, + {"240a:acdd::/32", "145943"}, + {"240e:108:1182::/48", "133776"}, + {"2a02:26f7:d944::/48", "36183"}, + {"2405:fd80::/40", "135391"}, + {"2407:1000:1001::/32", "24005"}, + {"2600:1408:c801::/38", "20940"}, + {"2a00:1348:11::/32", "8879"}, + {"2a0d:8680::/32", "204570"}, + {"2a0e:aa06::/40", "4842"}, + {"2405:c40::/32", "138887"}, + {"2a00:1508::/32", "49835"}, + {"2a02:2455:8000::/30", "20880"}, + {"2a02:26f7:ef85::/46", "20940"}, + {"2a06:5840::/29", "21067"}, + {"2c0f:f178::/32", "32437"}, + {"2a00:1678:1337::/48", "49453"}, + {"2403:f2c0::/32", "64043"}, + {"2408:8956:4800::/40", "17622"}, + {"2600:803:638::/48", "32982"}, + {"2606:b400:8804::/48", "7160"}, + {"2a02:28d0::/32", "6877"}, + {"2409:8050:2c00::/38", "9808"}, + {"2409:8c28:5e91::/39", "56041"}, + {"240e:44d:1580::/41", "4134"}, + {"2600:6c7f:90b0::/48", "20115"}, + {"2800:a010::/32", "19192"}, + {"2001:1248:5a47::/43", "11172"}, + {"2800:160:15bc::/41", "14259"}, + {"2804:71fc::/33", "270824"}, + {"2a04:b480:23::/29", "60110"}, + {"240c:ce04::/32", "24359"}, + {"2604:8340::/32", "53877"}, + {"2620:1ec:8f0::/48", "8068"}, + {"2800:160:133d::/41", "14259"}, + {"2804:1aa4::/32", "61873"}, + {"2806:2f0:91c1::/38", "17072"}, + {"2a02:26f7:17::/48", "20940"}, + {"2a09:b540::/29", "39326"}, + {"2804:3bb4::/32", "266166"}, + {"2804:3ce0::/32", "266240"}, + {"2a0f:c580::/32", "210625"}, + {"2001:559:793::/48", "33659"}, + {"2001:67c:344::/48", "50156"}, + {"2001:db0:3800::/33", "17766"}, + {"2600:9000:108c::/48", "16509"}, + {"2804:1230::/32", "263462"}, + {"2a03:3580::/32", "42082"}, + {"2001:df0:e3::/48", "9536"}, + {"2400:4ec0::/32", "64300"}, + {"2401:3c0:202::/47", "45528"}, + {"2407:0:0:4::/64", "65066"}, + {"240a:a1f6::/32", "143152"}, + {"2001:18c8:200::/40", "10464"}, + {"2403:5a00:fff1::/44", "23783"}, + {"240a:a3a3::/32", "143581"}, + {"2a02:17a5::/32", "204405"}, + {"2a02:c240:103::/48", "30383"}, + {"2001:559:5dd::/48", "33659"}, + {"2001:fd8:1a4::/46", "132199"}, + {"2001:1248:9751::/46", "11172"}, + {"2402:400::/32", "7610"}, + {"240a:a822::/32", "144732"}, + {"240a:acbe::/32", "145912"}, + {"2a05:1085::/32", "209300"}, + {"2001:559:c09f::/48", "33287"}, + {"2402:800:9aa9::/43", "7552"}, + {"2a02:ec80:600::/48", "14907"}, + {"2600:5002:1806::/48", "26793"}, + {"2606:6340::/32", "399857"}, + {"2a01:87c0::/32", "51406"}, + {"2408:8956:b00::/40", "17816"}, + {"240a:ae17::/32", "146257"}, + {"2600:1417:6f::/48", "20940"}, + {"2a02:1670::/32", "16024"}, + {"2001:67c:1f0::/48", "31172"}, + {"2a07:2a80::/29", "3301"}, + {"2408:8256:2f9b::/48", "17816"}, + {"240e:44d:4d00::/42", "140345"}, + {"2a0b:9bc0:1::/46", "9074"}, + {"2001:1248:4345::/42", "11172"}, + {"2403:4e80::/32", "131270"}, + {"240a:afa7::/32", "146657"}, + {"240e:108:45::/48", "58461"}, + {"2610:b0:4113::/45", "3573"}, + {"2a02:88::/32", "8240"}, + {"2a02:ad8:5600::/36", "12389"}, + {"2402:a7c1::/32", "133752"}, + {"2804:240::/34", "262798"}, + {"2804:4710::/32", "267029"}, + {"2a04:9740::/29", "196954"}, + {"2001:559:3d7::/48", "33287"}, + {"2606:5000:2a00::/33", "209"}, + {"2a02:ee80:41ec::/47", "21433"}, + {"2a03:4bc0:2100::/48", "30893"}, + {"2a0c:9a40:8088::/48", "43927"}, + {"2001:67c:24dc::/48", "197944"}, + {"2608:100:8::/48", "27064"}, + {"2a01:8840:cd::/48", "207266"}, + {"2a02:5740::/47", "41564"}, + {"2a04:4e40:6400::/48", "54113"}, + {"2001:218:3005::/32", "2914"}, + {"2001:44b8:30e0::/48", "7545"}, + {"2800:3a0:193::/48", "52229"}, + {"2a01:8840:fa::/48", "12041"}, + {"2a02:26f7:e1c9::/42", "20940"}, + {"2408:8256:2f8d::/48", "17816"}, + {"2409:8904:8a90::/39", "24547"}, + {"2804:c8::/32", "28366"}, + {"2804:3bf4::/32", "266182"}, + {"2804:7dec::/32", "271591"}, + {"2001:500:8c::/48", "20144"}, + {"2001:559:305::/48", "33651"}, + {"240a:a4f3::/32", "143917"}, + {"2a0d:9080::/29", "56708"}, + {"2600:387:14::/48", "13965"}, + {"2620:10a:f000::/43", "21869"}, + {"2804:7c74::/32", "271497"}, + {"2001:559:3dd::/48", "33652"}, + {"2403:a040:886::/48", "38047"}, + {"2801:80:3ef0::/48", "272576"}, + {"2a00:ff0:fffe::/48", "25409"}, + {"2a02:1c8:90::/44", "24955"}, + {"2a06:a005:f0::/44", "141694"}, + {"2a0e:8f02:f023::/48", "211522"}, + {"2408:8459:3450::/38", "17816"}, + {"2804:4744::/32", "267042"}, + {"2a02:26f0:7b01::/37", "20940"}, + {"2a0e:b107:530::/44", "209114"}, + {"2402:8100:26c0::/47", "45271"}, + {"2800:bf0:2000::/48", "52257"}, + {"2804:6b10::/32", "270375"}, + {"2804:849c::/32", "272271"}, + {"2a02:26f0:5f01::/34", "20940"}, + {"2001:4830:c600::/48", "22147"}, + {"2800:bf0:8160::/46", "52257"}, + {"2804:7770::/32", "271178"}, + {"2806:2f0:41c3::/42", "17072"}, + {"2001:67c:2d70::/48", "57118"}, + {"2406:3100::/32", "9411"}, + {"2602:807:4000::/44", "174"}, + {"2604:d600:1306::/44", "32098"}, + {"2801:80:3e20::/44", "271246"}, + {"2a00:bda0::/32", "42525"}, + {"2001:df0:ba00::/48", "132753"}, + {"2402:800:5d71::/44", "7552"}, + {"240a:a7ae::/32", "144616"}, + {"2600:6c10:6b::/43", "20115"}, + {"2001:400:b30::/48", "44"}, + {"2001:559:8577::/48", "7922"}, + {"2402:800:580f::/43", "7552"}, + {"2804:5250:c000::/37", "268510"}, + {"2a02:2070:ffff::/48", "31560"}, + {"2a02:2e02:d70::/40", "12479"}, + {"2a0c:20c0::/29", "204344"}, + {"2a0f:8f80::/29", "43414"}, + {"2001:44b8:2030::/46", "7545"}, + {"2404:f4c0:204::/40", "146961"}, + {"240e:3bc::/35", "134773"}, + {"2600:1405:f001::/30", "20940"}, + {"2600:6c10::/46", "20115"}, + {"2606:2800:40c::/46", "15133"}, + {"2804:1a0::/47", "28189"}, + {"240a:a350::/32", "143498"}, + {"240a:abc2::/32", "145660"}, + {"2a03:4bc0:2200::/48", "30893"}, + {"2001:559:2f8::/48", "20214"}, + {"2001:678:10c::/48", "21155"}, + {"2401:b0c0:a000::/48", "136941"}, + {"2405:b000:e00::/32", "6262"}, + {"2405:ec00:9054::/33", "23955"}, + {"2408:8256:3177::/44", "17623"}, + {"2602:ffe4:c34::/48", "21859"}, + {"2a0e:2b80:203::/32", "28875"}, + {"2604:3f00::/32", "21547"}, + {"2800:bf0:830f::/48", "27947"}, + {"2804:40b4::/32", "265976"}, + {"2a02:24a0::/32", "58343"}, + {"2a02:6680:2162::/48", "16116"}, + {"2400:6500::/32", "16509"}, + {"2405:e40:8::/48", "24511"}, + {"2604:ac0::/32", "40090"}, + {"2604:6600:2602::/45", "40676"}, + {"2804:14c:5f00::/40", "28573"}, + {"2804:10f4::/32", "52683"}, + {"2a00:1728:2c::/48", "26506"}, + {"2a0f:85c1:beef::/48", "207781"}, + {"2001:4450::/42", "9299"}, + {"2406:f400:120::/44", "134451"}, + {"2408:8459:7450::/38", "17816"}, + {"2603:c011:6000::/36", "31898"}, + {"2804:14c:fc8b::/43", "28573"}, + {"2804:161c:30::/45", "263268"}, + {"2a10:cc41:100::/44", "49367"}, + {"2001:559:81d4::/48", "33668"}, + {"240a:a571::/32", "144043"}, + {"2600:100f:a100::/44", "6167"}, + {"2800:160:2448::/45", "14259"}, + {"2a02:26f0:3901::/33", "20940"}, + {"2a02:cb43:4007::/48", "20546"}, + {"240a:a886::/32", "144832"}, + {"240e:97f::/33", "58543"}, + {"2a02:970:1053::/42", "44002"}, + {"2a0a:e780::/29", "62455"}, + {"2001:dc7:9d0d::/46", "24406"}, + {"2400:8500:6703::/48", "7506"}, + {"2803:58e0::/32", "269878"}, + {"2804:5c84::/32", "268913"}, + {"2a02:26f7:ef40::/48", "36183"}, + {"2001:df5:9600::/48", "135480"}, + {"2407:2580::/33", "44592"}, + {"2408:8456:ee00::/42", "17622"}, + {"240a:adc8::/32", "146178"}, + {"2605:4840:ffff::/48", "63473"}, + {"2804:3e98:c0::/32", "266608"}, + {"2a07:2f00:dead::/48", "203132"}, + {"2001:da8:7012::/48", "24363"}, + {"2408:8956:1100::/38", "17816"}, + {"2604:ca00:f::/48", "36492"}, + {"2607:d500:304::/40", "13768"}, + {"2620:67:a000::/48", "6491"}, + {"2a00:1e98::/29", "34058"}, + {"2001:559:82c9::/48", "33657"}, + {"2001:1497:2::/47", "208520"}, + {"2408:80e2::/33", "4837"}, + {"2408:8256:2f7b::/48", "17816"}, + {"2408:8459:ef50::/35", "17816"}, + {"2804:3d0::/32", "262400"}, + {"2a02:26f7:e688::/48", "36183"}, + {"2001:460:78::/46", "7991"}, + {"2001:559:c124::/48", "7016"}, + {"2607:fc68:21::/39", "2711"}, + {"2a00:cb0:8000::/34", "13289"}, + {"2a01:300:10:5::/64", "6461"}, + {"2a02:26f7:35::/48", "20940"}, + {"2a02:26f7:d645::/46", "20940"}, + {"2001:559:86cc::/48", "33652"}, + {"2405:a900:ffef::/43", "55992"}, + {"240e:438:8e20::/43", "140647"}, + {"2804:5384::/32", "268589"}, + {"2a0b:2f00::/29", "48112"}, + {"2001:559:8130::/47", "7016"}, + {"2001:559:82f9::/48", "33661"}, + {"2001:67c:10ec::/48", "559"}, + {"2001:da8:700d::/46", "24363"}, + {"2605:a7c0:101::/44", "16509"}, + {"2001:ec0:c00::/40", "131293"}, + {"2408:8957:f640::/40", "17622"}, + {"240a:a970::/32", "145066"}, + {"240a:ab55::/32", "145551"}, + {"240a:ad4f::/32", "146057"}, + {"2600:6c38:a24::/43", "20115"}, + {"2602:fdbb:a::/45", "17144"}, + {"2606:9500:3000::/36", "14427"}, + {"2800:160:11cd::/46", "14259"}, + {"2001:4998:29::/43", "10310"}, + {"2401:33c0::/32", "131578"}, + {"2803:3340::/32", "264700"}, + {"2a01:b740:2::/43", "714"}, + {"2a0d:9780::/32", "20860"}, + {"2600:380:7b80::/37", "20057"}, + {"2607:fc48:c10::/48", "40009"}, + {"2a02:88d:8000::/44", "48695"}, + {"2001:503:c27::/48", "26415"}, + {"2001:559:814f::/48", "33657"}, + {"2001:dce:5200::/48", "38064"}, + {"2001:4490:d980::/46", "9829"}, + {"2407:6fc0::/32", "137169"}, + {"2804:64c::/32", "262557"}, + {"2a02:26f7:e709::/46", "20940"}, + {"2001:4cb8::/40", "28878"}, + {"2605:ed00:4c71::/34", "11427"}, + {"2a02:26f7:fb49::/42", "20940"}, + {"2605:ef80:6::/43", "36492"}, + {"2804:6598::/32", "269502"}, + {"2001:a40::/32", "9186"}, + {"2402:d400:fa30::/37", "17762"}, + {"2a02:26f7:be80::/48", "36183"}, + {"2a0d:8480:2::/48", "48282"}, + {"2001:559:c165::/48", "7922"}, + {"2607:ffb0:2004::/35", "6327"}, + {"2804:702c::/32", "262909"}, + {"2804:832c::/32", "272181"}, + {"2a02:26f7:ce49::/42", "20940"}, + {"2a07:cd00::/48", "43260"}, + {"2001:253::/39", "38272"}, + {"2400:8800:1e83::/44", "3491"}, + {"2408:8957:5100::/40", "17816"}, + {"2800:bf0:8066::/47", "27947"}, + {"2804:14c:7589::/42", "28573"}, + {"2a02:26f7:3f::/48", "20940"}, + {"2620:c4::/48", "88"}, + {"2806:2f0:41e1::/46", "17072"}, + {"2a0d:5000:2::/48", "15440"}, + {"2001:b400:f208::/45", "17421"}, + {"240e:438:620::/43", "140647"}, + {"2600:1407:9801::/34", "20940"}, + {"2600:370f:6100::/45", "32261"}, + {"2804:805c::/32", "271746"}, + {"2a03:6740::/29", "20910"}, + {"2001:559:8665::/48", "7016"}, + {"2a03:4500::/32", "30827"}, + {"2001:df3:2c80::/48", "132670"}, + {"2408:8957:5f00::/40", "17816"}, + {"2602:800:1005::/48", "397677"}, + {"2a04:2740::/29", "31169"}, + {"2409:8924:5d00::/38", "56046"}, + {"2602:801:f000::/46", "32590"}, + {"2a09:8e40::/33", "200735"}, + {"2001:67c:1740::/48", "34019"}, + {"240a:a8be::/32", "144888"}, + {"2600:1014:d100::/41", "6167"}, + {"2607:f6f0:205::/48", "12085"}, + {"2001:18b8:3a::/41", "29789"}, + {"2a02:d480:240::/42", "42873"}, + {"2a04:1447::/45", "51964"}, + {"240a:aa74::/32", "145326"}, + {"2803:5c80:6054::/44", "64114"}, + {"2001:19f0:8800::/38", "20473"}, + {"2405:6e00:2440::/42", "133612"}, + {"2600:1003:a400::/44", "6167"}, + {"2607:f290::/32", "6106"}, + {"2801:1d:a001::/48", "263779"}, + {"2806:3a6::/32", "265625"}, + {"2a02:26f0:3e::/41", "20940"}, + {"2a02:26f7:c041::/46", "20940"}, + {"2402:ef03:6100::/29", "7633"}, + {"2603:c020:4000::/35", "31898"}, + {"2620:149:1050::/42", "714"}, + {"2001:250:224::/44", "23910"}, + {"2600:1417:3000:300::/48", "24203"}, + {"2a06:c004::/32", "206766"}, + {"2a11:29c5:b00b::/48", "212149"}, + {"2001:fb0:1035::/48", "133167"}, + {"2409:8924:8b00::/37", "56046"}, + {"240a:a65b::/32", "144277"}, + {"240e:90e:3000::/27", "4134"}, + {"2607:fdf0:5ef8::/46", "8008"}, + {"2804:1730::/32", "263130"}, + {"2804:21f4::/32", "52568"}, + {"2a0c:8700::/29", "44050"}, + {"2001:67c:21d8::/48", "41701"}, + {"2a0f:cdc0::/31", "34535"}, + {"2001:559:853f::/48", "7015"}, + {"2404:a3c0::/32", "134823"}, + {"2407:9a00:1::/48", "55446"}, + {"2804:2d74::/32", "265283"}, + {"2a00:5480::/29", "42346"}, + {"2a02:26f0:8401::/39", "20940"}, + {"2001:df5:9000::/48", "36351"}, + {"2404:7180:a021::/46", "23848"}, + {"2409:8057:3003::/44", "56040"}, + {"2602:801:3000::/47", "6556"}, + {"2a0a:2340::/30", "400177"}, + {"2a10:6bc0::/48", "201511"}, + {"2001:559:3c2::/48", "33491"}, + {"2402:800:f5d0::/42", "7552"}, + {"2a0a:8600::/29", "61317"}, + {"2001:559:c29c::/48", "7922"}, + {"2001:4878:2027::/48", "12222"}, + {"2001:4d18::/48", "39543"}, + {"2404:4f01::/32", "23686"}, + {"2a02:26f7:dec5::/46", "20940"}, + {"2a02:26f7:eb51::/42", "20940"}, + {"2404:c000:8003::/33", "17727"}, + {"2406:6e00:fff0::/44", "7280"}, + {"2408:8459:c230::/41", "17622"}, + {"2a09:bac0:227::/48", "13335"}, + {"2a0b:94c0::/48", "205558"}, + {"2001:418:1401:7d::/64", "20940"}, + {"2a02:6940::/32", "39642"}, + {"2408:8256:3b7b::/48", "17816"}, + {"2607:fa38::/32", "25649"}, + {"2620:52:1::/48", "31976"}, + {"2801:80:ce0::/48", "264372"}, + {"2804:3e90::/33", "266606"}, + {"2a02:26f7:e8d1::/42", "20940"}, + {"2a02:6060::/32", "60717"}, + {"2620:106:a000::/44", "25739"}, + {"2804:1e54::/32", "52746"}, + {"2a00:9f00:d::/32", "29314"}, + {"2a02:88d:210::/44", "48695"}, + {"2a02:22a8::/32", "8369"}, + {"2a03:2880:f16e::/47", "32934"}, + {"2a10:ccc2:20::/43", "35619"}, + {"2001:678:c38::/48", "207411"}, + {"240a:a8b0::/32", "144874"}, + {"240e:982:c100::/40", "38283"}, + {"2803:7200:8008::/47", "27696"}, + {"2a00:9801::/32", "51178"}, + {"2a02:26f7:cf90::/48", "36183"}, + {"2a02:cd80::/29", "49100"}, + {"2001:510:130::/48", "36786"}, + {"2605:b81::/32", "395378"}, + {"2804:2664:9000::/33", "52721"}, + {"2a10:e800:1::/48", "28885"}, + {"2001:559:82ac::/47", "7922"}, + {"2402:800:9463::/43", "7552"}, + {"240a:ab23::/32", "145501"}, + {"2600:370f:37c5::/44", "32261"}, + {"2a02:26f7:cec4::/48", "36183"}, + {"2001:559:c3cd::/48", "33657"}, + {"2001:1388:8a83::/35", "6147"}, + {"2001:579:70b5::/39", "22773"}, + {"2804:2ca0::/32", "265231"}, + {"2a00:13d1::/29", "42689"}, + {"2a0f:e586::/32", "207656"}, + {"2001:559:801f::/48", "33287"}, + {"2001:df7:8a00::/48", "132937"}, + {"2401:d800:ff0::/34", "7552"}, + {"2406:b400:a4::/44", "55577"}, + {"2409:8914:6a00::/39", "56044"}, + {"240a:a30c::/32", "143430"}, + {"2804:5b0c::/32", "268815"}, + {"2a04:7300::/29", "200008"}, + {"2a04:88c0:1::/48", "210550"}, + {"2a0e:97c0:180::/44", "200303"}, + {"2001:cb0:210::/34", "4637"}, + {"2001:448a:50b0::/41", "7713"}, + {"2804:14c:d4b0::/47", "28573"}, + {"2804:3558::/32", "53155"}, + {"2a02:26f7:20::/48", "36183"}, + {"2a02:26f7:e588::/48", "36183"}, + {"2a02:26f7:e88d::/42", "20940"}, + {"2402:e380:134::/44", "139073"}, + {"2804:e0c:c0::/48", "28176"}, + {"2804:6fd0::/32", "270686"}, + {"2806:219:509::/48", "28509"}, + {"2a01:4240::/32", "31246"}, + {"2001:df1:2780::/48", "133725"}, + {"2402:800:9e01::/42", "7552"}, + {"2408:8957:ac00::/40", "17622"}, + {"2409:4001:4000::/30", "55836"}, + {"240e:940:cf00::/34", "4134"}, + {"2a02:a10::/32", "60703"}, + {"2a02:2698:6c00::/38", "51570"}, + {"2a02:2a58:230::/32", "702"}, + {"2001:559:83d4::/48", "7015"}, + {"2001:da8:a5::/48", "24360"}, + {"2001:14b0::/41", "12374"}, + {"240a:a53a::/32", "143988"}, + {"2607:f368:3224::/48", "46846"}, + {"2a02:e480::/29", "47441"}, + {"2a0d:db00::/29", "212144"}, + {"2c0f:fcb0::/34", "36916"}, + {"2400:7fc0:8000::/36", "55960"}, + {"240e:13:804::/48", "140856"}, + {"2607:6002::/32", "12189"}, + {"2803:7000::/33", "52362"}, + {"2a03:7220::/32", "197422"}, + {"2001:578:d50::/31", "22773"}, + {"2607:7d00::/32", "18780"}, + {"2804:1cc::/32", "28130"}, + {"2804:5958::/32", "268184"}, + {"2a0e:97c0:260::/44", "58057"}, + {"2001:559:48b::/48", "7016"}, + {"2001:67c:26d4::/48", "57801"}, + {"2001:ac8:88::/48", "16247"}, + {"2001:1248:9c28::/43", "11172"}, + {"2600:370f:7020::/46", "32261"}, + {"2602:fd26:1::/48", "22855"}, + {"2804:3d24::/32", "266256"}, + {"2001:1900:2377::/40", "3356"}, + {"2409:8750:f00::/35", "56047"}, + {"2603:c002:350::/36", "31898"}, + {"2607:f160:10::/47", "6167"}, + {"2001:448a:2030::/41", "7713"}, + {"2406:840:fef8::/48", "142438"}, + {"2607:d500:303::/48", "63213"}, + {"2806:2f0:3223::/41", "17072"}, + {"2001:44c8:4850::/42", "45430"}, + {"2403:1e40:151::/32", "137967"}, + {"2803:8e20::/32", "27843"}, + {"2804:7f20:140::/38", "271668"}, + {"2806:2f0:2401::/48", "22884"}, + {"2a01:390::/32", "29405"}, + {"2a0f:8ac1:574b::/48", "205749"}, + {"2a02:26f7:ba86::/47", "20940"}, + {"2a03:6080:8::/30", "16285"}, + {"2a07:8d40::/29", "207075"}, + {"2406:840:eb06::/44", "142553"}, + {"2408:8624::/30", "4837"}, + {"240a:a692::/32", "144332"}, + {"240e:931::/30", "4134"}, + {"2a03:2880:f155::/44", "32934"}, + {"2a04:4e40:1e00::/48", "54113"}, + {"2001:448a:60d0::/42", "7713"}, + {"2403:9600::/32", "131157"}, + {"2620:10a:8020::/48", "55195"}, + {"2a02:ac80:41::/43", "25145"}, + {"2401:d800:b8b0::/41", "7552"}, + {"240a:a1a9::/32", "143075"}, + {"2600:1488:a421::/41", "20940"}, + {"2602:807:6006::/40", "53978"}, + {"2620:56:6000::/48", "46924"}, + {"2800:160:17c6::/43", "14259"}, + {"2a02:270::/32", "2116"}, + {"2a02:e186:3000::/48", "33517"}, + {"2001:559:84aa::/48", "33287"}, + {"2001:559:85f9::/48", "7015"}, + {"2600:1406:4201::/37", "20940"}, + {"2604:2180::/32", "396098"}, + {"2607:fd78:904::/32", "26677"}, + {"2620:13a:c003::/43", "53356"}, + {"2a02:26f7:b700::/48", "36183"}, + {"2a03:6400::/43", "11054"}, + {"2a09:bac0:165::/44", "13335"}, + {"2001:559:815b::/48", "20214"}, + {"2001:559:825b::/48", "7922"}, + {"2001:c20:c83f::/41", "9255"}, + {"2604:cb80::/32", "21554"}, + {"2620:11c:f00d::/48", "393667"}, + {"2a05:dac0:4::/29", "44166"}, + {"2409:8080:2aa0::/44", "9808"}, + {"2600:380:9300::/40", "7018"}, + {"2804:28c4::/32", "263979"}, + {"2001:559:868f::/48", "33659"}, + {"2404:bf40:a1c1::/38", "139084"}, + {"240a:a88d::/32", "144839"}, + {"240e:3bc:ec00::/35", "140314"}, + {"2620:74:90::/47", "11840"}, + {"2620:1bc:1015::/46", "7726"}, + {"2a0f:f300::/29", "208163"}, + {"2001:1890:1fff:104::/29", "7018"}, + {"2402:6f80::/32", "134220"}, + {"2404:f4c0:facf::/48", "142284"}, + {"2408:8456:8600::/42", "17622"}, + {"2605:3380:4154::/47", "12025"}, + {"2800:160:160c::/43", "14259"}, + {"2803:6900:543::/48", "52423"}, + {"2804:6814::/32", "269668"}, + {"2a02:26f7:d481::/46", "20940"}, + {"2a09:bac0:118::/47", "13335"}, + {"2001:559:87c3::/48", "33287"}, + {"2409:806a:2100::/36", "9808"}, + {"2a02:ee80:425c::/46", "3573"}, + {"2a0e:b107:f0::/48", "209861"}, + {"2001:559:8177::/44", "7922"}, + {"2001:67c:18a0::/48", "39686"}, + {"2a00:800:234::/37", "1257"}, + {"2a07:cd40::/29", "212855"}, + {"2001:1248:59c1::/46", "11172"}, + {"240a:a514::/32", "143950"}, + {"2600:cc00:1::/46", "32298"}, + {"2a0e:4480::/32", "57757"}, + {"2001:559:810c::/48", "7922"}, + {"2804:7bcc::/32", "271455"}, + {"2a00:5d80::/32", "20860"}, + {"2a0a:4280::/29", "3339"}, + {"2001:57a:8058::/38", "22773"}, + {"2001:678:810::/48", "1836"}, + {"2001:67c:1300::/48", "1836"}, + {"2606:6680:31::/46", "6315"}, + {"2606:b780::/32", "14589"}, + {"2607:a480::/32", "395512"}, + {"2a05:9f06::/31", "206898"}, + {"2001:d18::/32", "9821"}, + {"2402:5300:4800::/37", "45903"}, + {"2404:bf40:a442::/42", "139084"}, + {"2620:149:a0b::/48", "714"}, + {"2403:cfc0:1100::/44", "135134"}, + {"2606:1a40:f006::/43", "398962"}, + {"2607:f378::/32", "131"}, + {"2620:10a:80ba::/48", "25192"}, + {"2804:2b40::/32", "265143"}, + {"2a0b:ae00::/35", "207044"}, + {"2001:67c:19b0::/46", "16086"}, + {"2600:6c39:28a::/42", "20115"}, + {"2804:4afc:e000::/35", "267276"}, + {"2a0c:b641:710::/47", "206368"}, + {"2001:678:3b0::/48", "206186"}, + {"2400:d400:b00b::/48", "45671"}, + {"240a:a7e5::/32", "144671"}, + {"2600:140f:3a01::/39", "20940"}, + {"2604:f400:800::/37", "26878"}, + {"2804:63ac::/32", "269376"}, + {"2604:3700::/48", "10973"}, + {"2607:fcd0:106:6001::/47", "8100"}, + {"2804:6c4:9000::/36", "262893"}, + {"2a06:bfc0::/29", "200918"}, + {"2001:fd0:2401::/35", "10029"}, + {"2405:600:1003::/33", "55805"}, + {"2804:2b54::/32", "265147"}, + {"2804:6eac::/32", "270612"}, + {"2a0d:b201:e0b0::/41", "206026"}, + {"2407:bb00::/36", "45625"}, + {"2600:140b:7800::/48", "24319"}, + {"2604:2a80::/32", "20413"}, + {"2607:7000::/32", "25905"}, + {"2804:e94:1000::/41", "262468"}, + {"2804:8558::/32", "272573"}, + {"2a02:27b8:1111::/46", "49278"}, + {"2a03:aac0::/32", "48473"}, + {"240a:a3d4::/32", "143630"}, + {"2804:628c::/34", "269303"}, + {"2a02:26f7:100::/48", "36183"}, + {"2a0c:9e80::/32", "199520"}, + {"2400:f400::/32", "24278"}, + {"2401:d800:f3b0::/41", "7552"}, + {"2406:8dc0:2500::/40", "51044"}, + {"2600:6c30::/32", "20115"}, + {"2606:2800:3fff::/33", "15133"}, + {"2804:6cec::/32", "270501"}, + {"2a0c:e780::/29", "209936"}, + {"2001:470:113::/48", "15096"}, + {"2801:1e:1800::/47", "3970"}, + {"2a02:17c0::/32", "44869"}, + {"2001:559:c05f::/42", "7922"}, + {"2001:67c:3c::/48", "1257"}, + {"2600:9000:20de::/39", "16509"}, + {"2804:65f4::/32", "52743"}, + {"2804:771c::/32", "271156"}, + {"2001:67c:2c08::/48", "31424"}, + {"2001:1bc8::/29", "29422"}, + {"240e:9b:f01b::/45", "140254"}, + {"2620:74:81::/48", "30060"}, + {"2804:14c:bf00::/40", "28573"}, + {"2804:f8c:8100::/36", "263591"}, + {"2804:4568::/32", "266924"}, + {"2001:1248:5788::/43", "11172"}, + {"2407:3000:6b::/45", "17707"}, + {"2408:8459:7a50::/37", "17816"}, + {"2604:b840::/32", "397732"}, + {"2a02:580::/30", "6799"}, + {"2a02:1660::/32", "35132"}, + {"2a09:d400::/32", "41001"}, + {"2400:f940::/43", "45766"}, + {"2409:8054:30::/48", "9808"}, + {"2409:8e80:3000::/33", "9808"}, + {"240a:a085::/32", "142783"}, + {"2001:500:a6::/48", "393246"}, + {"2001:559:5b::/48", "33287"}, + {"2001:df0:e9::/48", "55680"}, + {"2402:800:58c5::/43", "7552"}, + {"2404:bd40:3::/48", "138005"}, + {"2405:b900:4000::/48", "55701"}, + {"2620:1ff::/36", "10497"}, + {"2a01:3b8:6000::/32", "33885"}, + {"2a01:8a60:200::/34", "60191"}, + {"2001:978:3c05::/44", "174"}, + {"2001:48a8:68f7::/48", "229"}, + {"2804:1148::/32", "263668"}, + {"2804:70c0:13::/48", "270746"}, + {"2402:800:9db7::/41", "7552"}, + {"2404:5580::/48", "213059"}, + {"2600:100d:b030::/44", "22394"}, + {"2602:fcff:11::/48", "213216"}, + {"2804:294:4100::/32", "28604"}, + {"2001:559:5ab::/48", "33662"}, + {"2402:57c0::/32", "134913"}, + {"2403:c800::/32", "9738"}, + {"2803:360::/32", "264773"}, + {"2803:2180:10::/46", "27941"}, + {"2804:40:4000::/36", "28657"}, + {"2804:2334::/32", "264148"}, + {"2001:559:84ef::/48", "20214"}, + {"2604:2980::/32", "62943"}, + {"2605:f700:80::/44", "18978"}, + {"2804:6f04::/32", "270633"}, + {"2a02:df4::/32", "58250"}, + {"2001:df5:580::/48", "138243"}, + {"2400:cb00:214::/44", "13335"}, + {"240a:ab65::/32", "145567"}, + {"240a:ad34::/32", "146030"}, + {"2a02:26f0:d601::/40", "20940"}, + {"2a03:6c0::/32", "198520"}, + {"2a03:6800::/32", "47902"}, + {"2001:fb0:109f:8007::/64", "36040"}, + {"2401:1d40:101::/36", "59019"}, + {"2a0f:1f80::/29", "60781"}, + {"2400:adc5:300::/37", "9541"}, + {"2402:90c0::/32", "55720"}, + {"2403:fbc0:4000::/48", "23959"}, + {"240a:a361::/32", "143515"}, + {"2604:3548::/32", "399587"}, + {"2a02:278::/32", "42227"}, + {"2408:875c:10::/32", "4837"}, + {"2600:6c7f:9062::/48", "20115"}, + {"2606:af00::/32", "30236"}, + {"2803:2540:a2::/44", "264668"}, + {"2804:3708::/32", "266385"}, + {"2804:85d8::/32", "272604"}, + {"2a00:6920:d000::/40", "42003"}, + {"2a01:6c60:3000::/36", "39535"}, + {"2a02:aec0:1::/46", "57363"}, + {"2404:63c0::/44", "131645"}, + {"2404:7e40:2::/32", "138649"}, + {"240a:a16e::/32", "143016"}, + {"240a:a470::/32", "143786"}, + {"2804:16cc::/32", "61917"}, + {"2804:5938::/32", "268176"}, + {"2806:2f0:91a1::/41", "17072"}, + {"2a00:86c0:2057::/42", "2906"}, + {"2a00:fd80:aaab::/33", "38719"}, + {"2a01:7a80::/29", "197301"}, + {"2001:468:1a08::/48", "302"}, + {"2001:67c:948::/48", "30920"}, + {"2001:da8:a001::/46", "24352"}, + {"2001:df1:7780::/48", "30823"}, + {"240e:67b:1800::/32", "4134"}, + {"2600:140f:400::/48", "55836"}, + {"2607:f110:28::/43", "21889"}, + {"2a12:b80::/29", "204790"}, + {"2001:67c:2cec::/48", "2686"}, + {"2408:8210::/29", "4837"}, + {"2409:804b:29ff::/48", "9808"}, + {"2602:fc64:a00::/48", "36829"}, + {"2803:fae0::/32", "269956"}, + {"2806:2f0:5223::/41", "17072"}, + {"2806:370:53c0::/44", "28403"}, + {"2001:67c:2028::/48", "43591"}, + {"2001:13d2:3810::/33", "7303"}, + {"2800:26a::/32", "19429"}, + {"2804:58d0::/32", "268151"}, + {"2a02:7380::/32", "8680"}, + {"2a05:d050:e080::/44", "16509"}, + {"2001:500:856e::/48", "396574"}, + {"2001:559:7c2::/47", "33659"}, + {"2407:500::/45", "58940"}, + {"2800:160:11c2::/44", "14259"}, + {"2a02:9e8::/32", "3257"}, + {"2a0d:b201:1050::/40", "206026"}, + {"2600:370f:744a::/42", "32261"}, + {"2620:1ec:21::/45", "8068"}, + {"2405:9800:9811::/48", "45458"}, + {"240e:964:d400::/39", "58772"}, + {"240e:982:e100::/40", "134764"}, + {"2620:0:c91::/46", "8076"}, + {"2620:135:e000::/40", "2495"}, + {"2804:2a60:25::/39", "263089"}, + {"2a07:e480::/48", "202261"}, + {"2001:44b8:3085::/48", "4739"}, + {"2a02:26f7:e380::/48", "36183"}, + {"2a03:29c0:c000::/34", "61189"}, + {"2400:8000::/45", "4800"}, + {"2401:d800:b360::/40", "7552"}, + {"2409:8000:301b::/40", "9808"}, + {"240a:ae66::/32", "146336"}, + {"2800:d302:11::/46", "11830"}, + {"2804:0:5c01::/34", "2716"}, + {"2001:250:211::/48", "23910"}, + {"2402:4200:1100::/48", "24284"}, + {"2600:1802:8::/43", "16552"}, + {"2001:678:c74::/48", "8881"}, + {"2001:44b8:3089::/48", "4739"}, + {"2406:e007:c000::/34", "23655"}, + {"2409:8900::/31", "56048"}, + {"2a02:5740:11::/48", "41564"}, + {"2001:579:a17d::/40", "22773"}, + {"2405:9800:d201::/34", "45430"}, + {"240a:a62a::/32", "144228"}, + {"2600:141c:c001::/35", "20940"}, + {"2606:2e00:8008::/46", "36351"}, + {"2803:10e0:ced1::/34", "269853"}, + {"2804:1040:6667::/35", "263626"}, + {"2804:3a5c::/32", "53174"}, + {"2a03:5640:f500::/48", "16509"}, + {"2402:800:9dc5::/42", "7552"}, + {"2408:8459:6c50::/38", "17816"}, + {"2a02:26f7:d140::/48", "36183"}, + {"2001:559:c00c::/47", "7922"}, + {"2405:8a00:6014::/46", "55824"}, + {"2600:100d:a000::/43", "6167"}, + {"2a0e:b107:dce::/48", "212237"}, + {"2a12::/29", "204790"}, + {"2001:579:a07d::/40", "22773"}, + {"2602:fec3::/38", "62563"}, + {"2a06:f500::/29", "34549"}, + {"2408:8957:3400::/40", "17622"}, + {"240a:a4c8::/32", "143874"}, + {"2600:6001::/32", "11351"}, + {"2001:520:100e::/43", "8103"}, + {"2401:f540:4::/48", "134094"}, + {"2409:803c:1100::/37", "9808"}, + {"2a0e:cd01:2f00::/29", "23031"}, + {"2604:d600:1246::/43", "32098"}, + {"2606:2800:511b::/48", "15133"}, + {"2a00:7700:8a03::/33", "31200"}, + {"240a:a1f3::/32", "143149"}, + {"2605:9480::/37", "31775"}, + {"2800:160:1ead::/43", "14259"}, + {"2804:2784::/32", "263906"}, + {"2a01:8840:72::/45", "12041"}, + {"2a0a:e5c0:2c::/48", "208731"}, + {"2001:da8:c9::/48", "138369"}, + {"2001:db0:1800::/34", "17766"}, + {"2402:2c00::/32", "17645"}, + {"2402:8100:26b0::/46", "45271"}, + {"2408:8456:2400::/42", "17622"}, + {"240e:5e:1090::/44", "140309"}, + {"2600:1008:6010::/32", "22394"}, + {"2607:fdc8:10::/48", "30036"}, + {"2804:6354::/32", "269354"}, + {"2608:101:8::/48", "5974"}, + {"2804:8398::/32", "272207"}, + {"2a09:fc80::/29", "62240"}, + {"2400:cb00:38::/47", "13335"}, + {"2610:20:2000::/43", "7764"}, + {"2804:2a88::/48", "264077"}, + {"2a04:4280:20::/48", "43260"}, + {"2a04:6100::/29", "60169"}, + {"2a04:d140::/29", "202040"}, + {"2a0d:2b40::/29", "210437"}, + {"2607:f110:e430::/41", "21889"}, + {"2804:1a0:c10::/32", "28189"}, + {"2a02:26f7:bb01::/46", "20940"}, + {"2a04:c500::/29", "202146"}, + {"2402:ee40:51::/44", "17754"}, + {"2a02:f784:8000::/47", "25252"}, + {"2a06:8280::/43", "51786"}, + {"2a0d:ae80::/32", "34953"}, + {"2001:67c:2dc::/48", "2119"}, + {"2402:800:5b39::/41", "7552"}, + {"2804:3838::/46", "53170"}, + {"2804:6c2c::/32", "270450"}, + {"2a0e:97c0:450::/44", "211208"}, + {"2a0e:97c0:730::/48", "208699"}, + {"2a06:e881:5506::/48", "209864"}, + {"240a:a443::/32", "143741"}, + {"2a02:e0:3805::/44", "34984"}, + {"2402:800:b740::/42", "7552"}, + {"2402:c480:9000::/48", "63916"}, + {"240a:3:b90::/44", "9605"}, + {"2600:6c38:215::/42", "20115"}, + {"2804:295c::/32", "53209"}, + {"2804:708c::/32", "270733"}, + {"2a00:8d40::/33", "29584"}, + {"2402:800:5eb1::/44", "7552"}, + {"240a:ad72::/32", "146092"}, + {"2804:1a04:25::/46", "61832"}, + {"2a02:198::/32", "16171"}, + {"2001:550:3205::/37", "174"}, + {"2405:f080:800::/43", "136907"}, + {"2408:8444::/40", "140726"}, + {"2804:14d:b400::/40", "28573"}, + {"2804:8560::/32", "272575"}, + {"2a01:7420::/32", "200924"}, + {"2a0c:6100::/29", "50332"}, + {"2001:559:816e::/48", "7016"}, + {"2001:67c:1988::/48", "198333"}, + {"2401:d1c0::/33", "136994"}, + {"2408:84f3:2c60::/40", "17623"}, + {"2600:370f:5208::/47", "32261"}, + {"2a01:8e00::/29", "48803"}, + {"2a02:2880::/32", "28886"}, + {"2a06:fbc0::/29", "48918"}, + {"2400:f000::/32", "17888"}, + {"2600:100f:b100::/42", "6167"}, + {"2804:1734::/32", "52869"}, + {"2a00:6900:10::/48", "60199"}, + {"2405:6e00:498::/41", "133612"}, + {"2607:f190::/34", "11320"}, + {"2800:320:404::/44", "27882"}, + {"2804:5528::/32", "268693"}, + {"2a00:1188:1a::/29", "8455"}, + {"2a0c:b641:2c0::/44", "212510"}, + {"2a11:8c00::/29", "204790"}, + {"2001:559:c1dd::/48", "33650"}, + {"2a00:6440::/32", "12406"}, + {"2605:f440:5700::/32", "54874"}, + {"2801:170:1::/46", "264648"}, + {"2001:1998:8a0::/41", "7843"}, + {"2a04:9dc0:21::/29", "9009"}, + {"2404:bf40:86c2::/39", "139084"}, + {"2409:8a53:500::/38", "56047"}, + {"240a:a8f7::/32", "144945"}, + {"2409:8087:2800::/44", "56041"}, + {"2620:108:1000::/40", "394009"}, + {"2804:402c::/32", "265942"}, + {"2a00:1210:fffe::/48", "204385"}, + {"2c0e:2700::/28", "37457"}, + {"2001:4878:2347::/48", "12222"}, + {"2409:8914:6800::/39", "56044"}, + {"240e:3bd:ac00::/35", "4134"}, + {"2803:fd80:11::/36", "18747"}, + {"2804:1cd4:1d00::/32", "61678"}, + {"2a02:26f7:e7c9::/46", "20940"}, + {"2a0c:1340::/29", "43260"}, + {"2a0e:a580::/29", "328663"}, + {"2a11:7600::/29", "211199"}, + {"2001:67c:148c::/48", "199564"}, + {"2001:4c78::/32", "12350"}, + {"2402:3a80:c01f::/42", "38266"}, + {"2409:876b:200::/27", "9808"}, + {"240a:a559::/32", "144019"}, + {"2a02:c18:8::/32", "15436"}, + {"2a02:2e02:1980::/38", "12479"}, + {"2a02:7980:106::/32", "43937"}, + {"2a03:db80:5461::/46", "680"}, + {"2a09:bac0:132::/48", "13335"}, + {"240a:adfe::/32", "146232"}, + {"2604:1300:7701::/32", "3833"}, + {"2604:3d09:9000::/33", "6327"}, + {"2a02:26f7:f480::/48", "36183"}, + {"2a0e:b107:3d0::/46", "207687"}, + {"2400:4ec0:880a::/43", "64300"}, + {"2403:6f80::/32", "134795"}, + {"2600:1016:9110::/34", "6167"}, + {"2a00:79e1:f0b::/48", "395973"}, + {"2a02:1c8::/47", "24955"}, + {"2001:559:c342::/48", "33657"}, + {"240a:a5b6::/32", "144112"}, + {"2607:f038:e::/33", "21527"}, + {"2a00:7147:e1::/44", "51430"}, + {"2a09:e40::/32", "50673"}, + {"2001:559:82c3::/48", "7015"}, + {"2409:8055:50::/48", "9808"}, + {"2409:8087:6c60::/44", "9808"}, + {"2606:3000:c000::/48", "30295"}, + {"2a02:26f7:bfc1::/46", "20940"}, + {"2a03:bb40::/32", "61211"}, + {"2001:550:2a00:2::/47", "174"}, + {"2406:ae00::/39", "55564"}, + {"2804:ae0::/34", "28352"}, + {"2804:452c::/32", "262529"}, + {"2a00:c30::/32", "5391"}, + {"2a00:1970::/32", "12480"}, + {"2a03:8c00::/32", "39458"}, + {"2001:420:94::/33", "109"}, + {"2001:12f8:a::/47", "11284"}, + {"2401:d800:57f0::/36", "7552"}, + {"2408:8656:3300::/37", "17816"}, + {"240e:95d:800::/38", "136192"}, + {"2001:1bf0::/29", "2586"}, + {"240e:3b7:ac00::/35", "4134"}, + {"2a10:c941:10:4::/60", "35277"}, + {"2804:46d8::/32", "267015"}, + {"2a02:c18:2::/45", "15436"}, + {"2001:559:83aa::/48", "33651"}, + {"2001:559:87d2::/48", "33659"}, + {"2001:df2:d80::/48", "136284"}, + {"2400:3800::/32", "9617"}, + {"240e:18:51::/31", "4812"}, + {"2a0d:f9c3::/32", "24953"}, + {"2001:559:7f7::/48", "7015"}, + {"2400:dd01:3003::/45", "7497"}, + {"2600:6c10:f066::/44", "20115"}, + {"2804:5a08::/32", "268741"}, + {"2a03:db80:4c80::/48", "5501"}, + {"2a0a:54c1:9::/43", "62240"}, + {"2001:559:82c2::/48", "7016"}, + {"240a:a06c::/32", "142758"}, + {"240a:a85d::/32", "144791"}, + {"2604:d600::/44", "32098"}, + {"2607:fcd0:100:801::/54", "8100"}, + {"2604:8200:e000::/36", "23089"}, + {"2604:e3c0::/32", "19523"}, + {"2804:214:401a::/39", "26615"}, + {"2804:7ddc::/32", "271587"}, + {"2a02:128:15::/48", "62008"}, + {"2a06:1900::/32", "200635"}, + {"2a0e:b940::/29", "208395"}, + {"2a0f:b780::/29", "49095"}, + {"2001:559:833a::/48", "33657"}, + {"2001:559:c325::/48", "7725"}, + {"2001:dcc:500::/46", "23596"}, + {"2600:1000:9000::/44", "6167"}, + {"2803:f340:1020::/41", "14754"}, + {"2804:2488:11::/34", "264228"}, + {"2a0a:d500::/29", "206928"}, + {"2a0c:b641:568::/45", "210481"}, + {"2001:250:701f::/48", "23910"}, + {"2001:559:8379::/48", "33287"}, + {"2001:67c:2218::/47", "2485"}, + {"2001:da8:20b::/45", "23910"}, + {"2600:1008:a000::/43", "6167"}, + {"2605:e740:500::/40", "398710"}, + {"2800:800:b90::/41", "26611"}, + {"2404:d900::/32", "58656"}, + {"2409:803c:3900::/31", "9808"}, + {"2a02:888:4a::/45", "47794"}, + {"2a02:26f7:51::/48", "20940"}, + {"2a07:3500:10a0::/48", "58083"}, + {"2001:678:a00::/48", "49697"}, + {"2607:fb90:3d00::/33", "21928"}, + {"2800:381:5151::/48", "265760"}, + {"2a02:26f7:d6c2::/47", "20940"}, + {"2001:998:82::/48", "49762"}, + {"240a:a5c8::/32", "144130"}, + {"240a:aad9::/32", "145427"}, + {"2800:160:17a7::/44", "14259"}, + {"2804:fc::/33", "28142"}, + {"2a02:70e0::/32", "61296"}, + {"2a10:9903:102::/48", "212806"}, + {"2001:678:aac::/48", "208658"}, + {"2a0b:a2c0::/29", "205584"}, + {"2404:1c40:f6::/44", "24432"}, + {"2409:8948:8c00::/40", "24445"}, + {"2605:5300:200::/32", "21557"}, + {"2a00:79e1:f00::/47", "36384"}, + {"2a02:26f7:efc5::/46", "20940"}, + {"2a04:6d80::/30", "199993"}, + {"2a0f:5701:3300::/37", "206499"}, + {"2001:da8:b00a::/47", "24371"}, + {"2a01:a940::/32", "15954"}, + {"2001:678:8cc::/48", "210146"}, + {"2001:4130:140::/48", "29067"}, + {"2404:bf40:8801::/41", "139084"}, + {"240e:3b2:5600::/34", "136199"}, + {"2604:8540:fc0c::/47", "33353"}, + {"2a02:166a::/32", "20473"}, + {"2a02:26f7:f3c0::/48", "36183"}, + {"2a02:4007::/32", "56821"}, + {"2c0f:ef58::/32", "36924"}, + {"2001:df0:4e00::/48", "134823"}, + {"2001:2000:1100::/34", "1299"}, + {"2409:8c85:aa15::/46", "9808"}, + {"240a:ac1c::/32", "145750"}, + {"240a:ac77::/32", "145841"}, + {"2a02:26f7:bf8c::/48", "36183"}, + {"2a0e:8f02:21a4::/47", "208763"}, + {"2a0f:cc87:7000::/32", "210625"}, + {"2a02:26f7:6d::/48", "20940"}, + {"2a05:dfc7:120::/33", "61138"}, + {"2a07:9944:30::/48", "58305"}, + {"2a01:9080::/32", "39658"}, + {"2001:678:e3c::/48", "208169"}, + {"2a04:92c6::/31", "62240"}, + {"2001:15f8:1::/48", "25384"}, + {"2404:b0:1006::/44", "4750"}, + {"240a:a546::/32", "144000"}, + {"2600:6c5a::/32", "20115"}, + {"2804:61e8::/32", "269264"}, + {"2a04:4e40:ec00::/48", "54113"}, + {"2a0e:b107:e80::/44", "39282"}, + {"2001:559:c1cb::/45", "7922"}, + {"2401:5f80:7::/33", "38731"}, + {"2408:8456:1f40::/40", "17816"}, + {"2a10:2600::/29", "8888"}, + {"240d:c040::/44", "132203"}, + {"240e:c3:2800::/37", "63838"}, + {"2600:380:8b80::/37", "20057"}, + {"2804:17f8::/39", "262628"}, + {"2001:559:50b::/45", "7015"}, + {"2001:1248:5f1e::/42", "11172"}, + {"2001:16a2:c130::/40", "39891"}, + {"2607:f428:9150::/42", "20115"}, + {"2610:68::/33", "5774"}, + {"2620:171:47::/48", "715"}, + {"2803:e0e0:100::/47", "269852"}, + {"2806:230:4024::/48", "265594"}, + {"2403:5a40:50::/48", "134562"}, + {"240a:2000::/29", "23844"}, + {"2a04:4e40:e600::/48", "54113"}, + {"2a06:fc0::/29", "29632"}, + {"2001:559:8212::/47", "33657"}, + {"2605:52c0:5::/48", "54574"}, + {"2408:8957:4600::/40", "17622"}, + {"240a:a524::/32", "143966"}, + {"240e:3b2:ac00::/35", "4134"}, + {"2404:bf40:c082::/41", "139084"}, + {"2600:1000:b170::/40", "22394"}, + {"2602:fed2:7300::/48", "139693"}, + {"2a03:22c0::/32", "199551"}, + {"2a0d:3d80::/29", "204635"}, + {"2001:1248:9a81::/45", "11172"}, + {"2800:110:2201::/37", "4270"}, + {"2804:50e8::/32", "268418"}, + {"2a02:398::/32", "30781"}, + {"2001:4c0::/47", "855"}, + {"2001:da8:e80d::/48", "24368"}, + {"2804:6e20::/32", "270577"}, + {"2a00:cb8:48::/47", "15695"}, + {"2a02:26f7:ec0c::/48", "36183"}, + {"2a0a:de40::/32", "205890"}, + {"2804:815c::/32", "272449"}, + {"2a02:26f7:c441::/46", "20940"}, + {"2001:df2:7d00::/48", "45780"}, + {"2409:8055:38::/48", "9808"}, + {"2607:f188::/32", "21769"}, + {"2a0f:2140::/29", "60262"}, + {"2400:c2c0::/32", "63959"}, + {"2404:bf40:83c1::/46", "7545"}, + {"2604:6000::/32", "11351"}, + {"2804:3d18::/32", "266253"}, + {"2804:8074::/32", "271751"}, + {"2a00:1080::/32", "43646"}, + {"2a02:26f7:c8c8::/48", "36183"}, + {"2a02:ee80:4184::/44", "3573"}, + {"2a02:cb80:4220::/45", "43766"}, + {"2a0a:3980:2::/48", "198949"}, + {"2001:559:8455::/46", "7725"}, + {"2403:67c0::/32", "135772"}, + {"240a:abd5::/32", "145679"}, + {"2600:802:1109::/31", "701"}, + {"2600:130c::/32", "20021"}, + {"2607:f298:6050::/44", "26347"}, + {"2804:63b8::/32", "269379"}, + {"2804:64fc:8000::/33", "269461"}, + {"2a02:26f7:68::/48", "36183"}, + {"2a0f:9400:8008::/48", "207756"}, + {"240e:44d:5200::/41", "140345"}, + {"2600:380:e000::/44", "20057"}, + {"2800:484:a00::/40", "10620"}, + {"2001:67c:18ac::/48", "62316"}, + {"2401:4900:5cc0::/44", "45609"}, + {"2606:6680:13::/48", "64249"}, + {"2806:2f0:4781::/42", "17072"}, + {"2a02:e00:ffe9::/48", "62240"}, + {"2a02:26f7:c80c::/48", "36183"}, + {"2a0e:8f02:f015::/48", "212243"}, + {"2800:160:1ad6::/44", "14259"}, + {"2001:559:73d::/48", "7015"}, + {"2001:559:c02d::/48", "33287"}, + {"240e:438:6c40::/38", "4134"}, + {"2804:90:6100::/38", "28580"}, + {"2804:20fc:700::/35", "264525"}, + {"2804:4d5c:c000::/34", "268192"}, + {"2c0f:f748::/39", "37662"}, + {"2001:559:210::/47", "7922"}, + {"2400:7400:e032::/45", "23736"}, + {"2402:e280:2213::/44", "134674"}, + {"240a:a4bb::/32", "143861"}, + {"2a0f:8646:b00b::/48", "212149"}, + {"2001:67c:690::/48", "1836"}, + {"2803:9460::/32", "262186"}, + {"2a02:26f0:4301::/37", "20940"}, + {"240e:438:1c20::/43", "140647"}, + {"2804:37f8:8000::/33", "266447"}, + {"240a:61::/36", "9605"}, + {"240a:a8c3::/32", "144893"}, + {"2801:1c8:88::/48", "19429"}, + {"2804:310::/46", "262688"}, + {"2806:2f0:50a1::/46", "17072"}, + {"2001:df3:2900::/48", "24060"}, + {"2406:2000:ef65::/48", "58525"}, + {"2406:f400:20::/44", "38001"}, + {"2605:59c0:2000::/35", "36492"}, + {"2a04:f580:9070::/48", "4809"}, + {"240a:abfd::/32", "145719"}, + {"2607:fc28::/33", "22911"}, + {"2001:57a:3a06::/33", "22773"}, + {"2001:67c:1398::/48", "199355"}, + {"2403:a200:9999::/48", "133111"}, + {"2407:8800:bf02::/33", "7545"}, + {"2408:8256:3271::/48", "17623"}, + {"2603:90f5:f::/43", "11426"}, + {"2804:1cd8::/46", "262691"}, + {"2804:3b6c:c018::/42", "265442"}, + {"2a04:2181:c010::/47", "61272"}, + {"2a0e:3840:2::/48", "40676"}, + {"2001:1248:87b0::/36", "11172"}, + {"2001:4830:c601::/36", "27552"}, + {"240e:a7:7fed::/32", "4134"}, + {"2600:140f:9c01::/34", "20940"}, + {"2600:6c2e:cf::/39", "20115"}, + {"2801:17:a800::/48", "19429"}, + {"2a03:c980:5fb5::/48", "210079"}, + {"2a0a:53c0::/48", "42780"}, + {"2a0d:e40::/29", "39402"}, + {"2001:559:805e::/48", "33657"}, + {"240a:aa7a::/32", "145332"}, + {"2a01:ce95::/32", "51964"}, + {"2001:550:20c::/39", "174"}, + {"2001:67c:2100::/48", "41011"}, + {"2604:3b40::/32", "399494"}, + {"2806:2f0:4381::/46", "17072"}, + {"2a00:a5a0::/32", "24971"}, + {"2a05:4140:185::/48", "211358"}, + {"2a0a:56c4:8000::/47", "42649"}, + {"2001:559:81::/48", "33287"}, + {"2405:8a00:2022::/43", "55824"}, + {"2408:8459:4050::/38", "17816"}, + {"2a00:a400::/32", "8943"}, + {"2a09:7:2001::/48", "43992"}, + {"2a0a:4cc0::/40", "197540"}, + {"2407:aa80::/32", "135407"}, + {"240a:a5b5::/32", "144111"}, + {"2a01:280:330::/48", "29518"}, + {"2a02:2010:2620::/45", "20978"}, + {"2a0e:aa00:212::/44", "41378"}, + {"240e:5::/35", "17638"}, + {"2600:1017:f400::/44", "22394"}, + {"2001:df6:6880::/48", "16509"}, + {"2600:6c38:d0::/45", "20115"}, + {"2605:dd40:8f80::/44", "16509"}, + {"2a00:1ca0:2402::/32", "21413"}, + {"2600:1480:7000::/48", "21342"}, + {"2804:204:901::/32", "28186"}, + {"2a0d:3340::/32", "36492"}, + {"2a0e:e40::/32", "208638"}, + {"2001:ee0:dd40::/40", "45899"}, + {"2409:805c:30b1::/41", "9808"}, + {"2600:8807:bc2::/35", "22773"}, + {"2603:c027::/35", "31898"}, + {"2804:4b7c::/32", "28227"}, + {"2001:41a8::/37", "6762"}, + {"2804:810c::/32", "272428"}, + {"2a07:7d80::/29", "50304"}, + {"2401:47c0::/35", "41095"}, + {"2001:4e0:1050::/48", "64251"}, + {"240e:bf:b000::/36", "134768"}, + {"2804:4f58::/33", "268321"}, + {"2001:67c:6f0::/48", "44934"}, + {"2001:df2:3680::/48", "131124"}, + {"240a:a028::/32", "142690"}, + {"2600:1010:be0e::/40", "22394"}, + {"2804:2990:6000::/32", "264022"}, + {"2a10:7040::/29", "212602"}, + {"2001:678:ea4::/48", "39704"}, + {"2600:1406:41::/46", "20940"}, + {"2804:44c::/32", "262761"}, + {"2804:7c0:a000::/33", "262316"}, + {"2a03:2a60:8000::/47", "59871"}, + {"2a10:d503::/32", "398464"}, + {"2a12:b180::/29", "49581"}, + {"2c0f:fe88::/32", "12556"}, + {"2001:559:155::/48", "33652"}, + {"2405:2040:1202::/48", "48024"}, + {"2600:14c0:c::/26", "20940"}, + {"2602:fd43::/36", "63267"}, + {"2801:1b:8801::/48", "18678"}, + {"2804:2124::/32", "264538"}, + {"2806:230:101a::/48", "265594"}, + {"2a02:26f0:b401::/39", "20940"}, + {"2001:678:6ac::/48", "49852"}, + {"2a02:26f7:dfc0::/48", "36183"}, + {"2a03:5260::/32", "48576"}, + {"2001:b28:f23c::/48", "44907"}, + {"2a02:26f7:d2c0::/48", "36183"}, + {"2001:678:744::/48", "203660"}, + {"2804:14d:5c21::/41", "28573"}, + {"2804:59ec::/32", "268734"}, + {"2804:8058::/32", "271745"}, + {"2806:2f0:5043::/40", "17072"}, + {"2a0a:a000::/32", "200564"}, + {"2001:559:83b7::/48", "7015"}, + {"2400:a980:40ff::/48", "38587"}, + {"2403:7100:10::/48", "132220"}, + {"2600:380:1c00::/38", "7018"}, + {"2600:1417:19::/48", "20940"}, + {"2a0f:f680::/29", "60262"}, + {"240a:aeda::/32", "146452"}, + {"2602:101:4001::/46", "20115"}, + {"2603:c001:2e10::/35", "31898"}, + {"2a0e:97c3:425::/48", "20473"}, + {"2c0f:f830::/32", "30844"}, + {"2409:8054:3014::/46", "56040"}, + {"2804:29f4:800::/32", "264047"}, + {"2804:7e6c::/32", "271623"}, + {"2a0d:2600::/29", "39736"}, + {"2001:df6:8c80::/48", "136744"}, + {"2407:a600:8000::/36", "18004"}, + {"2602:feda:b64::/48", "146950"}, + {"2607:f358:a::/47", "18779"}, + {"2804:14d:2a79::/45", "28573"}, + {"2a01:8840:a2::/45", "12041"}, + {"2a02:26f7:fbc1::/46", "20940"}, + {"2a0a:ad80::/29", "60670"}, + {"2a10:3000::/29", "2830"}, + {"240e:44d:4680::/41", "4134"}, + {"2a02:128:8::/48", "50916"}, + {"2402:5c40:2000::/48", "64089"}, + {"2600:1419:1::/45", "20940"}, + {"2602:feda:e3c::/48", "147028"}, + {"2a07:85c5::/48", "174"}, + {"2409:8073:2a04::/29", "9808"}, + {"2600:1417:3d::/41", "20940"}, + {"2803:7bc0::/47", "266185"}, + {"2804:1544::/32", "28252"}, + {"2001:559:859a::/48", "33667"}, + {"2001:660:3005::/46", "2486"}, + {"240a:a14c::/32", "142982"}, + {"2a00:6ec0:100::/40", "56837"}, + {"2a02:26f7:aa::/48", "36183"}, + {"2a0a:a2c0::/47", "205992"}, + {"2c0f:f6e0::/32", "37618"}, + {"2401:8d00:b::/45", "38345"}, + {"2602:805:7000::/44", "40069"}, + {"2a0d:eb40::/29", "39070"}, + {"2001:8e0::/29", "8758"}, + {"2607:f750:fe01::/46", "23473"}, + {"2607:fb10:2013::/45", "2906"}, + {"2610:190:5e00::/34", "62"}, + {"2a02:26f7:76::/48", "36183"}, + {"2a03:1280::/32", "197227"}, + {"2600:6c38:2c::/41", "20115"}, + {"2a0c:9a40:10aa::/48", "213288"}, + {"2001:678:7f8::/48", "200273"}, + {"2a02:f90::/32", "12886"}, + {"2001:559:82a6::/48", "33490"}, + {"2408:8256:3379::/48", "17816"}, + {"240a:a1c3::/32", "143101"}, + {"2606:2800:4a58::/46", "15133"}, + {"2610:128:9100::/37", "11686"}, + {"2620:115:81::/46", "18888"}, + {"2a02:20c8:2331::/37", "50304"}, + {"2a0e:fd45:2b71::/40", "44103"}, + {"2001:c20:48c6::/48", "9255"}, + {"2409:8054:11::/45", "56040"}, + {"2409:8c28:35b1::/33", "56041"}, + {"2607:1280:1350::/42", "394972"}, + {"2804:4488:4010::/44", "262480"}, + {"2804:4870:7400::/32", "267121"}, + {"2804:7c18:40::/32", "267398"}, + {"2a00:9d20:49::/48", "28753"}, + {"2a00:ff0:9999::/48", "12672"}, + {"2a0e:1bc0::/35", "208621"}, + {"2001:500:f0::/48", "53535"}, + {"2403:8600:c09::/45", "45820"}, + {"2a05:9f00::/47", "44222"}, + {"2a0f:5701:3522::/45", "205593"}, + {"2800:160:1bba::/47", "14259"}, + {"2a07:42c0::/29", "34670"}, + {"2a0a:c802:2::/45", "39798"}, + {"240e:981:8100::/36", "4134"}, + {"2600:1006:9050::/39", "22394"}, + {"2602:fd10:c00::/48", "19529"}, + {"2607:1d80::/32", "11287"}, + {"2a00:4800:1a0::/44", "13124"}, + {"2a02:26f7:f6fc::/48", "36183"}, + {"2a09:d980::/29", "209681"}, + {"2a0f:3b05:100::/44", "35487"}, + {"2001:df4:dd80::/48", "8888"}, + {"2409:8920::/29", "56046"}, + {"2602:feda:b40::/48", "142130"}, + {"2001:559:822e::/48", "7922"}, + {"2001:4478:ff02::/40", "4802"}, + {"2001:44b8:4045::/48", "4739"}, + {"2402:4e00:101::/33", "45090"}, + {"2409:8087:6a19::/42", "9808"}, + {"240a:a9ca::/32", "145156"}, + {"2607:f070::/32", "13855"}, + {"2804:2140:1024::/36", "53059"}, + {"2001:550:2200:208::/46", "174"}, + {"2001:559:80f0::/48", "7922"}, + {"2409:8070:b00::/35", "9808"}, + {"2605:a980::/48", "1996"}, + {"2804:1b50::/32", "61719"}, + {"2804:794c::/32", "271297"}, + {"2a00:1670::/32", "8902"}, + {"2a04:2dc0::/48", "39216"}, + {"2001:dc2::/32", "2515"}, + {"2606:3c0::/46", "399016"}, + {"2804:47c8::/32", "267076"}, + {"2804:7fd8::/32", "271713"}, + {"2a12:f280::/29", "209097"}, + {"2001:da8:4005::/48", "23910"}, + {"2403:d500::/32", "132029"}, + {"240e:109:8046::/48", "134756"}, + {"2801:18:8800::/48", "267892"}, + {"2804:106c::/32", "263635"}, + {"2a03:9c60::/32", "43420"}, + {"2a10:3b40::/29", "204790"}, + {"2001:559:c0e1::/48", "7015"}, + {"2400:8b00:a400::/44", "45727"}, + {"2606:f280::/34", "46261"}, + {"2803:8f80::/32", "263829"}, + {"2804:84cc:4100::/32", "272541"}, + {"2a03:e440::/29", "206978"}, + {"2a05:fb40::/32", "208861"}, + {"2a0c:8dc0::/29", "25145"}, + {"2c0f:5c00::/32", "328805"}, + {"2409:8d10::/30", "9808"}, + {"240a:a69c::/32", "144342"}, + {"240a:aae7::/32", "145441"}, + {"2620:bd:c000::/48", "393638"}, + {"2804:77c8::/32", "271199"}, + {"2a00:c827:b::/32", "60330"}, + {"2a02:908::/32", "3209"}, + {"2001:1248:98e3::/48", "11172"}, + {"2406:a800::/32", "45437"}, + {"2600:140f:5800::/48", "9498"}, + {"2600:1480:d801::/37", "20940"}, + {"2806:2f0:84::/38", "17072"}, + {"2a06:4380::/29", "51711"}, + {"2001:559:290::/48", "7016"}, + {"2001:559:c423::/48", "7015"}, + {"2409:8000:3100::/37", "9808"}, + {"2600:5c01:34b9::/32", "10796"}, + {"2804:7f6c:32::/41", "271687"}, + {"2a0d:1dc0::/29", "197706"}, + {"2001:559:114::/48", "7016"}, + {"240e:44d:800::/41", "140345"}, + {"2600:1409:d001::/34", "20940"}, + {"2804:4b70::/32", "267306"}, + {"2001:c20:48ac::/47", "3758"}, + {"2001:16d8:53::/45", "16150"}, + {"240a:af41::/32", "146555"}, + {"2806:269:300::/37", "13999"}, + {"2a02:2e02:82b0::/41", "12479"}, + {"2a04:1cc0::/32", "202916"}, + {"2001:559:4d::/46", "33651"}, + {"2001:559:c373::/48", "33287"}, + {"2402:e280:100::/47", "134674"}, + {"2607:fb90::/36", "21928"}, + {"2804:2a44::/32", "264064"}, + {"240a:ad95::/32", "146127"}, + {"2804:6cc8::/32", "270491"}, + {"2a02:cb80:4158::/47", "43766"}, + {"2a03:7202::/32", "44895"}, + {"2a0e:97c0:7b0::/44", "207716"}, + {"2001:559:c061::/48", "33287"}, + {"2001:c10:ff03::/45", "7473"}, + {"2001:da8:254::/48", "23910"}, + {"2401:8180::/32", "24341"}, + {"2406:8e00::/32", "18139"}, + {"240a:af84::/32", "146622"}, + {"2804:40a0:acc4::/33", "265971"}, + {"2a02:26f7:f448::/48", "36183"}, + {"2a02:f680::/48", "35196"}, + {"2c0f:ec80::/32", "37315"}, + {"2001:559:c3f6::/48", "33657"}, + {"2409:8c3c:900::/45", "9808"}, + {"2600:180b:5002::/29", "16552"}, + {"2602:fd50:bb::/48", "206628"}, + {"2603:6038::/32", "10838"}, + {"2804:83ac::/32", "272211"}, + {"2a0b:b87:ffe3::/48", "205117"}, + {"2a0f:9400:8024::/47", "53356"}, + {"2804:218:bef0::/33", "27715"}, + {"2804:5880::/32", "268133"}, + {"2a01:40:494a::/32", "5459"}, + {"2a0b:b87:fff0::/44", "7489"}, + {"2001:da8:211::/48", "24348"}, + {"2804:b28::/32", "52944"}, + {"2a01:b740:a20::/48", "6185"}, + {"2a01:c8ce:2::/31", "25454"}, + {"2001:500:a8::/48", "21556"}, + {"2001:67c:1441::/48", "45018"}, + {"2404:b300:10::/48", "59318"}, + {"2600:180c:6002::/32", "16552"}, + {"2a04:64c0::/29", "208484"}, + {"2401:d800:9ed2::/39", "7552"}, + {"240a:aad6::/32", "145424"}, + {"2804:ae0:8300::/37", "28352"}, + {"2a06:a001:a107::/44", "210384"}, + {"2407:e2c0::/32", "147030"}, + {"2620:57:e000::/48", "397031"}, + {"2a02:17a0::/29", "47232"}, + {"2001:978:1b04::/47", "210743"}, + {"2604:8900::/48", "40285"}, + {"2605:a200::/32", "33576"}, + {"2806:2f0:5483::/34", "17072"}, + {"2a02:50::/48", "15464"}, + {"2a02:a30::/39", "8926"}, + {"2a03:8f84::/32", "52023"}, + {"2a0e:fd45:2b61::/44", "44103"}, + {"240e:44d:200::/42", "140345"}, + {"2a02:2018::/32", "51218"}, + {"2001:1b58::/29", "35283"}, + {"240e:280::/23", "4134"}, + {"2605:1080:12::/45", "23367"}, + {"2607:1e00::/35", "22489"}, + {"2a02:2278::/38", "28907"}, + {"2a02:26f7:d84c::/47", "36183"}, + {"2a04:4e40:4400::/47", "54113"}, + {"2001:559:8381::/48", "33652"}, + {"2600:1415:4401::/36", "20940"}, + {"2600:6c38:c8::/46", "20115"}, + {"2804:10::/32", "28299"}, + {"2a01:5480::/32", "34497"}, + {"2a05:f787:ffff::/48", "57667"}, + {"2a0a:dd40::/32", "206147"}, + {"2a0c:bc80::/29", "34979"}, + {"2a0e:b107:2a0::/44", "31798"}, + {"2407:b1c0::/32", "138524"}, + {"2408:8459:8430::/41", "17622"}, + {"2409:804f:900::/35", "9808"}, + {"2606:1a40:2017::/48", "132335"}, + {"2800:5e0::/32", "28007"}, + {"2804:14c:8300::/40", "28573"}, + {"2804:1c4c:1a3::/37", "61648"}, + {"2a05:bd40:d13::/48", "29264"}, + {"2001:559:c38c::/48", "7016"}, + {"2400:7400:5f::/48", "23736"}, + {"2401:d800:f830::/41", "7552"}, + {"2402:3a80:1cb8::/45", "38266"}, + {"2409:8c54::/36", "56040"}, + {"2801:140:144::/48", "262249"}, + {"2a00:4802:3c00::/44", "13124"}, + {"2001:559:c176::/48", "33657"}, + {"2001:1248:996b::/43", "11172"}, + {"2405:1c0:7191::/45", "55303"}, + {"2409:8620::/27", "9808"}, + {"240a:a59d::/32", "144087"}, + {"2001:4403:dead::/48", "9896"}, + {"2401:cc00::/32", "24363"}, + {"2402:ef14::/32", "24397"}, + {"240a:ae28::/32", "146274"}, + {"2606:3b80::/32", "394109"}, + {"2606:5e40:dc05::/48", "399606"}, + {"2806:10be:6::/44", "8151"}, + {"2a03:b202::/29", "20860"}, + {"2a12:70c0::/29", "49778"}, + {"240a:a102::/32", "142908"}, + {"2605:f700:140::/40", "18978"}, + {"2001:678:d58::/48", "39409"}, + {"2001:67c:27c4::/48", "213032"}, + {"240a:a813::/32", "144717"}, + {"2607:f7b8::/32", "10490"}, + {"2620:0:2e80::/48", "33631"}, + {"2804:cd4::/32", "52558"}, + {"2804:44d8::/32", "267657"}, + {"2806:2f0:7183::/42", "17072"}, + {"2a0e:6e80::/44", "208800"}, + {"2001:559:85db::/45", "7015"}, + {"2001:df5:b480::/56", "137455"}, + {"2001:fd8:268::/40", "4775"}, + {"2a07:4e00::/29", "203058"}, + {"2001:559:199::/48", "7016"}, + {"2001:df0:6b40::/48", "149375"}, + {"2a01:8740::/48", "57344"}, + {"2a02:26f0:c0::/48", "34164"}, + {"2a0b:10c0::/48", "48749"}, + {"2806:1000::/32", "8151"}, + {"2a02:26f7:71::/48", "20940"}, + {"2a04:8f40:2000::/48", "205505"}, + {"2401:4900:39b0::/44", "45609"}, + {"2001:550:2607::/48", "142580"}, + {"240e:978:2900::/40", "146966"}, + {"2600:1400:e::/43", "20940"}, + {"2602:fe5b::/36", "53872"}, + {"2620:101:403a::/48", "36421"}, + {"2a02:6b00::/36", "28757"}, + {"2a03:9d40:2d00::/38", "41095"}, + {"2001:df6:600::/48", "135653"}, + {"2409:8915:5000::/39", "56044"}, + {"2600:5c01:31cc::/37", "10796"}, + {"2604:9cc0:400::/38", "201106"}, + {"2620:dc:c000::/48", "27009"}, + {"2600:1400:1801::/37", "20940"}, + {"2604:6600:2001::/48", "201106"}, + {"2804:1e58:8000::/33", "264422"}, + {"2a02:26f7:bfc8::/48", "36183"}, + {"2a02:2e02::/39", "12479"}, + {"2a03:f80:852::/48", "9009"}, + {"2001:250:341c::/46", "138393"}, + {"2001:559:c1f6::/48", "7016"}, + {"2001:67c:20f8::/48", "34290"}, + {"2001:67c:2730::/48", "198524"}, + {"2409:8a00::/31", "56048"}, + {"2804:3b58::/32", "266143"}, + {"2a03:5344:40::/44", "34414"}, + {"2a0d:7540::/29", "8888"}, + {"2001:448a:5110::/42", "7713"}, + {"2401:8800:c00::/45", "17439"}, + {"2406:dc0:235e::/47", "9221"}, + {"2620:116:800c::/46", "16509"}, + {"2620:13b:30e1::/48", "13607"}, + {"2804:1f18::/32", "52890"}, + {"2a0c:5247:5000::/36", "59504"}, + {"2001:559:249::/48", "33667"}, + {"2600:1402:4001::/35", "20940"}, + {"2620:74:8::/48", "30060"}, + {"2620:ba:8000::/48", "2386"}, + {"2803:7140::/32", "264639"}, + {"2a04:92c7:33::/45", "62240"}, + {"2a07:90c0::/29", "202771"}, + {"2a0b:33c0:1::/46", "57395"}, + {"2a0e:b107:df2::/48", "20473"}, + {"2001:559:7fa::/47", "7922"}, + {"2001:559:8143::/48", "7015"}, + {"2001:df0:206::/48", "9449"}, + {"2408:8256:3b95::/48", "17816"}, + {"2607:f750:4000::/40", "23473"}, + {"2a0e:8f02:215f::/48", "211869"}, + {"2a0e:8f02:f00d::/48", "212360"}, + {"2001:678:464::/48", "34087"}, + {"2405:8e40::/32", "139838"}, + {"2a0e:b107:270::/48", "207852"}, + {"2001:67c:22e0::/48", "48803"}, + {"2001:dc8:c000::/47", "24066"}, + {"2408:8957:5700::/40", "17816"}, + {"240a:ab46::/32", "145536"}, + {"2600:6c38:194::/44", "20115"}, + {"2804:71f0::/32", "270821"}, + {"2a02:26f7:d340::/48", "36183"}, + {"2620:171:37::/44", "42"}, + {"2804:6f90::/32", "270669"}, + {"2804:70c0:a::/48", "270746"}, + {"2a00:1728:24::/48", "198228"}, + {"2a01:7a20::/32", "35383"}, + {"2a0f:1000::/29", "200567"}, + {"2409:8c54:2820::/35", "56040"}, + {"240e:13:808::/48", "140860"}, + {"2a0d:77c7::/36", "7489"}, + {"2403:d240::/32", "138368"}, + {"2404:4a00:8500:1::/36", "45629"}, + {"2404:bf40:e300::/48", "2764"}, + {"2610:20:8068::/38", "6629"}, + {"2620:149:a2a::/43", "714"}, + {"2a10:6d40::/29", "30633"}, + {"2001:250:207::/44", "24349"}, + {"2001:550:d05::/44", "174"}, + {"2001:550:1d00:300::/47", "174"}, + {"2404:f4c0:f202::/47", "139589"}, + {"2408:8456:b810::/42", "134543"}, + {"240d:c010:7b::/48", "139341"}, + {"240e:3b2:1800::/34", "4134"}, + {"2a09:dd81::/30", "12637"}, + {"2a0b:2e00::/29", "15600"}, + {"2a0f:e5c0::/48", "60781"}, + {"2001:559:c1a6::/48", "33662"}, + {"2406:7100::/32", "132692"}, + {"2001:470:79::/48", "393763"}, + {"2001:67c:2e4c::/48", "48724"}, + {"2402:3f80:1400::/40", "133475"}, + {"2409:8008:d7::/48", "24547"}, + {"2606:2480::/32", "36511"}, + {"2a05:8540::/29", "44543"}, + {"2602:fed2:7600::/40", "1239"}, + {"2804:6cf8::/32", "270504"}, + {"2a07:14c0:5000::/36", "59504"}, + {"2001:67c:16e4::/48", "197521"}, + {"2001:e60:1050::/42", "4766"}, + {"2401:d800:97b0::/41", "7552"}, + {"2402:800:330f::/43", "7552"}, + {"2405:6e00:2240::/40", "133612"}, + {"240e:965:8800::/38", "133775"}, + {"2a04:4e40:a00::/47", "54113"}, + {"2a10:2f00:11a::/48", "207317"}, + {"2001:559:828a::/48", "7922"}, + {"2001:4998:44::/46", "36646"}, + {"2409:8028:800::/40", "56041"}, + {"2a00:fd80::/32", "38719"}, + {"2a02:26f7:b3c4::/48", "36183"}, + {"2a02:7160::/32", "43885"}, + {"2a0b:5b00::/29", "48205"}, + {"2402:ef0e::/32", "38536"}, + {"2806:2f0:3523::/41", "17072"}, + {"2001:428:6402:6::/54", "209"}, + {"2404:3d00:40f6::/47", "21433"}, + {"240e:3ba:9c00::/34", "140310"}, + {"2801:80:c70::/48", "61749"}, + {"2a03:4460::/32", "201466"}, + {"2a0b:4342:2000::/36", "57578"}, + {"2607:f368:2000::/40", "46846"}, + {"2804:fc:5100::/32", "28142"}, + {"2804:8138::/35", "272440"}, + {"2a02:490::/29", "20811"}, + {"2408:8956:e200::/40", "17622"}, + {"2804:2d80:ab00::/35", "262378"}, + {"2401:ff80::/32", "133954"}, + {"2600:140b:5c01::/34", "20940"}, + {"2001:559:497::/48", "7016"}, + {"2a01:280:350::/48", "3301"}, + {"2a02:26f7:ee44::/48", "36183"}, + {"2a10:9100:4::/48", "49453"}, + {"2402:eac0::/32", "137852"}, + {"2404:3f80::/32", "24556"}, + {"2801:192::/40", "262589"}, + {"2804:220c::/32", "264588"}, + {"2a02:2000::/45", "35297"}, + {"2a06:a005:b2::/48", "207941"}, + {"2602:ff7c::/36", "55039"}, + {"2804:14c:ccec::/47", "28573"}, + {"2a02:26f0:cc::/43", "20940"}, + {"2a09:4ec0::/48", "47447"}, + {"2409:8924:300::/37", "56046"}, + {"2603:90f4::/32", "7843"}, + {"2604:be00::/32", "22663"}, + {"2806:268:300::/40", "13999"}, + {"2001:678:180::/48", "204188"}, + {"2001:67c:2e0c::/48", "209721"}, + {"2402:940::/32", "137990"}, + {"2804:18:5028::/45", "26599"}, + {"2806:250:22::/47", "28509"}, + {"2a02:26f7:cac1::/46", "20940"}, + {"2a03:f80:ed31::/48", "57169"}, + {"240a:acaf::/32", "145897"}, + {"2604:d600:129a::/39", "32098"}, + {"2606:6200:1c01::/32", "21570"}, + {"2804:519c::/32", "268465"}, + {"2001:16a2:c0f0::/46", "39891"}, + {"240a:a597::/32", "144081"}, + {"240e:6bb:3000::/29", "4134"}, + {"2804:1890::/32", "61940"}, + {"2804:7558::/32", "271040"}, + {"2a03:2887:ff2e::/43", "63293"}, + {"2a04:8900::/29", "38938"}, + {"2a06:7fc0::/29", "206893"}, + {"2001:559:87b8::/41", "7015"}, + {"2600:ac00::/28", "14007"}, + {"2a02:45c0:16::/47", "3209"}, + {"2a12:5440::/45", "51235"}, + {"2400:a980:2500::/36", "133111"}, + {"2605:a401:832d::/41", "33363"}, + {"2620:110::/47", "16692"}, + {"2a03:6947:1800::/40", "28952"}, + {"2001:408:8001::/33", "14793"}, + {"2408:8956:4000::/40", "17622"}, + {"2620:11f:d000::/47", "393941"}, + {"2806:366::/47", "28435"}, + {"2a02:26f7:f440::/48", "36183"}, + {"2001:df6:e300::/48", "138225"}, + {"2001:fd8:164::/46", "132199"}, + {"2001:43f8:1800::/40", "37724"}, + {"2409:8020:51::/42", "56046"}, + {"2a04:92c7:53::/32", "62240"}, + {"2a10:e000:1::/48", "210909"}, + {"2409:8904:a340::/37", "24547"}, + {"2600:1406:4800::/48", "35994"}, + {"2600:6c38:517::/41", "20115"}, + {"2600:6c7f:90c0::/48", "20115"}, + {"2607:f368:1004::/36", "32982"}, + {"2a03:4f40::/32", "206825"}, + {"240a:afd2::/32", "146700"}, + {"2604:eb00:201::/32", "19212"}, + {"2800:370:12::/48", "28006"}, + {"2800:4f0:500::/41", "28006"}, + {"2804:2868::/42", "263961"}, + {"2a01:af::/32", "200363"}, + {"2a02:5420:1::/48", "9053"}, + {"2a0f:6a40::/29", "29329"}, + {"2404:2480:8101::/33", "135391"}, + {"2404:a800::/45", "9498"}, + {"2a00:dd80:3a::/45", "36236"}, + {"2001:7f0:3000::/46", "60380"}, + {"2408:8459:4030::/41", "17622"}, + {"2408:8957:4000::/40", "17622"}, + {"2604:af80:1448::/36", "18859"}, + {"2606:bc00:9000::/34", "19419"}, + {"2a03:1a20::/48", "207467"}, + {"2a0a:a100::/32", "206906"}, + {"2a0d:8540::/29", "49558"}, + {"2a0e:b107:4b8::/45", "135309"}, + {"240a:a4fd::/32", "143927"}, + {"240e:3b2:1400::/38", "134773"}, + {"2600:1402:c00::/48", "35994"}, + {"2602:809:2000::/44", "398312"}, + {"2a02:4640::/32", "25542"}, + {"2a05:4740::/32", "59741"}, + {"2001:559:c3e5::/48", "7725"}, + {"2409:8a4d:e00::/30", "9808"}, + {"240a:ae22::/32", "146268"}, + {"2804:7800::/32", "271214"}, + {"2806:20d:1643::/40", "32098"}, + {"2001:678:df4::/48", "212899"}, + {"2407:c940:1103::/34", "48024"}, + {"2600:1417:1801::/34", "20940"}, + {"2a03:7020::/47", "59625"}, + {"2a0c:93c0:8000::/48", "212465"}, + {"2001:67c:2448::/48", "43065"}, + {"2001:a00::/32", "41437"}, + {"2620:101:b068::/43", "12079"}, + {"2804:1b94:900::/32", "52974"}, + {"2a04:ea40::/29", "3331"}, + {"2001:559:81db::/48", "33651"}, + {"2001:67c:1500::/48", "1257"}, + {"2400:cb80:813f::/48", "141174"}, + {"2408:8456:a40::/39", "17816"}, + {"2600:3504:c000::/31", "396998"}, + {"2605:f700:c0::/44", "18978"}, + {"2a0e:9846::/32", "52000"}, + {"2001:4c8::/35", "15290"}, + {"2607:f640:e::/32", "32354"}, + {"2803:a40::/47", "263817"}, + {"2804:404c:1012::/39", "265950"}, + {"2a01:40::/33", "5459"}, + {"2804:57a4::/32", "268077"}, + {"240a:aea3::/32", "146397"}, + {"2602:ffde::/36", "16504"}, + {"2001:678:b6c::/48", "207880"}, + {"2401:d180:10::/47", "133865"}, + {"2408:8459:8830::/41", "17622"}, + {"240a:abef::/32", "145705"}, + {"2a0f:d440::/29", "51088"}, + {"2001:12a0:a001::/36", "28292"}, + {"2804:3368::/32", "265394"}, + {"2a02:26f0:5600::/48", "34164"}, + {"2600:1012:b140::/42", "6167"}, + {"2602:ff63::/48", "19754"}, + {"2806:2f0:2402::/48", "17072"}, + {"2a0a:4944::/30", "208972"}, + {"2001:559:8619::/48", "33491"}, + {"2001:4200:38a::/37", "2018"}, + {"2400:7400:e011::/48", "23736"}, + {"2402:800:5d01::/44", "7552"}, + {"2a0b:7280:0:6::/29", "48635"}, + {"2001:1248:9850::/45", "11172"}, + {"2408:8956:9300::/40", "17816"}, + {"2600:5800:2b05::/32", "11426"}, + {"2801:14:b000::/48", "52318"}, + {"2409:8714::/33", "56044"}, + {"240e:3b1:1800::/34", "4134"}, + {"2600:9000:11db::/45", "16509"}, + {"2607:f018::/32", "36375"}, + {"2a01:666:500::/31", "48951"}, + {"2a07:a340::/32", "62217"}, + {"2401:a240::/32", "17958"}, + {"240a:adac::/32", "146150"}, + {"2600:140f:f000::/48", "9498"}, + {"2a0d:68c0::/29", "211175"}, + {"2400:dcc0:a904::/38", "38631"}, + {"2620:129:5000::/45", "393347"}, + {"2a03:f280::/29", "42306"}, + {"2a03:2940::/32", "51440"}, + {"2a07:2a00::/29", "203099"}, + {"2001:678:448::/48", "57760"}, + {"2405:6e00:a00::/35", "133612"}, + {"2408:8459:8450::/38", "17816"}, + {"240a:a68c::/32", "144326"}, + {"2603:6034::/32", "11351"}, + {"2804:4d3c:3100::/33", "267420"}, + {"2a00:6d40::/30", "31034"}, + {"2a02:e980:bf::/41", "19551"}, + {"2404:bf40:c101::/40", "139084"}, + {"2404:e801:200f::/43", "55430"}, + {"2409:896a:a800::/39", "9808"}, + {"2804:59d8:a200::/35", "268729"}, + {"2806:230:2003::/48", "11888"}, + {"2806:370:4180::/44", "28403"}, + {"2a00:1bb8::/32", "12810"}, + {"2001:1980::/39", "29838"}, + {"2402:7700::/32", "18074"}, + {"2602:fc23:11a::/48", "213045"}, + {"2602:feda:ab0::/46", "141011"}, + {"2a03:8fa0::/36", "35258"}, + {"2401:b0c0:c000::/48", "136941"}, + {"2404:e801:1008::/46", "55430"}, + {"2600:6c3b:1c::/42", "20115"}, + {"2804:878::/39", "262374"}, + {"2804:8194::/32", "272463"}, + {"2806:283:6000::/37", "265515"}, + {"2a02:d0c2:1::/48", "59793"}, + {"2c0f:f858::/46", "36947"}, + {"2001:1248:5ae8::/45", "11172"}, + {"240a:a58f::/32", "144073"}, + {"2610:a0:25::/32", "7786"}, + {"2806:230:300a::/48", "265594"}, + {"2a02:26f7:e489::/46", "20940"}, + {"2a03:c342::/32", "57324"}, + {"2a0d:f407:1003::/48", "47687"}, + {"2600:1406:ec01::/38", "20940"}, + {"2606:7040::/32", "400006"}, + {"2803:5a40::/32", "27795"}, + {"2804:46ec::/34", "267020"}, + {"2804:4c14:db01::/34", "267348"}, + {"2a07:e02:1400::/40", "210083"}, + {"2a0c:8305::/32", "61049"}, + {"2a0d:6cc0::/29", "49191"}, + {"2001:428:1003::/48", "2560"}, + {"2001:559:21c::/47", "22258"}, + {"2001:559:847f::/40", "7922"}, + {"2001:4998:1b0::/48", "10880"}, + {"2404:3d00:410a::/43", "3573"}, + {"2600:380:8a00::/39", "20057"}, + {"2620:130:3041::/48", "62861"}, + {"2804:7a8::/39", "262309"}, + {"2a09:7:2000::/48", "39220"}, + {"2001:250:680e::/47", "138373"}, + {"2606:8ac0::/32", "400164"}, + {"2a0c:b642:902::/40", "204625"}, + {"2001:468:1900::/40", "57"}, + {"2001:559:3ef::/48", "20214"}, + {"240a:aebc::/32", "146422"}, + {"240e:108:11d4::/48", "131325"}, + {"2620:0:1a10::/48", "159"}, + {"2806:230:4017::/48", "11888"}, + {"2a02:26f0:4001::/38", "20940"}, + {"2001:67c:2190::/48", "51400"}, + {"2408:84f3:4640::/36", "17816"}, + {"240a:a1e9::/32", "143139"}, + {"240a:ab1e::/32", "145496"}, + {"2001:67c:2d44::/48", "201170"}, + {"2001:1248:a462::/44", "11172"}, + {"2403:780:10::/32", "64098"}, + {"2602:260::/32", "54058"}, + {"2a04:2340::/29", "59455"}, + {"2001:fb0:1071::/48", "133761"}, + {"2804:25c0::/32", "264300"}, + {"2a00:800:441::/31", "1257"}, + {"2405:1c0:6a51::/46", "55303"}, + {"2804:848::/32", "262737"}, + {"2804:17b0::/32", "263165"}, + {"2806:370:4000::/44", "28403"}, + {"2a02:4e0:2c00::/41", "16135"}, + {"2a0c:75c0::/46", "44486"}, + {"2001:df0:7::/48", "8075"}, + {"240a:a757::/32", "144529"}, + {"2a06:d700:4444::/48", "201849"}, + {"2605:a900:f::/35", "46887"}, + {"2606:2800:11f::/42", "15133"}, + {"2a02:7200::/32", "30721"}, + {"2001:559:8250::/48", "33652"}, + {"2001:579:f138::/41", "22773"}, + {"2407:f800:201::/39", "38182"}, + {"240a:aa2f::/32", "145257"}, + {"240a:ad54::/32", "146062"}, + {"2803:2e40:10b::/32", "27796"}, + {"2804:525c::/32", "268513"}, + {"2a02:26f7:37::/48", "20940"}, + {"2a04:76c7:200::/48", "13213"}, + {"2001:559:82b5::/48", "33651"}, + {"2606:2800:422c::/48", "15133"}, + {"2a0f:4780::/29", "197706"}, + {"2c0f:f348:1601::/32", "24757"}, + {"2001:c20:c835::/48", "9255"}, + {"2406:3000:1000:100::/31", "4657"}, + {"2409:8c15:4e00::/32", "56044"}, + {"2804:5880:b000::/33", "268133"}, + {"2a02:26f7:b400::/48", "36183"}, + {"2a02:26f7:c301::/45", "20940"}, + {"2a02:2a48::/32", "43853"}, + {"2001:559:8696::/48", "7015"}, + {"240a:aa71::/32", "145323"}, + {"2804:10c8:d010::/34", "263649"}, + {"2001:559:84ac::/48", "7015"}, + {"2001:df1:f180::/48", "139771"}, + {"2402:800:f080::/42", "7552"}, + {"240a:af05::/32", "146495"}, + {"2804:83fc::/32", "272232"}, + {"2a02:26f7:a1::/48", "20940"}, + {"2603:c020:8000::/35", "31898"}, + {"2a00:b340:10::/48", "196745"}, + {"2a01:8180:3000::/36", "29063"}, + {"2a0e:b107:3f6::/47", "57883"}, + {"2001:4:112::/48", "112"}, + {"2605:a7c0:121::/44", "16509"}, + {"2801:10:e800::/48", "27951"}, + {"2804:5e6c::/32", "269032"}, + {"240e:a8:e200::/39", "140647"}, + {"2804:1430::/32", "263316"}, + {"2804:3e64::/32", "266593"}, + {"2a02:20a0::/32", "50217"}, + {"2a07:6fc0:1::/44", "34549"}, + {"2a10:cc42:110::/48", "206671"}, + {"2001:df7:1e80::/48", "138277"}, + {"2402:800:97c5::/43", "7552"}, + {"2606:1a40:1010::/44", "398962"}, + {"2804:a50::/32", "28349"}, + {"2001:df0:3780::/47", "131365"}, + {"2620:12:2001::/48", "54976"}, + {"2620:74:15::/48", "29403"}, + {"2804:3b0:9500::/33", "53062"}, + {"2804:6bb0::/32", "270417"}, + {"2a00:6e80::/32", "2119"}, + {"240a:a8aa::/32", "144868"}, + {"2804:7ec0::/32", "271645"}, + {"2a00:1ca8:78::/40", "50673"}, + {"2a00:6500::/29", "20723"}, + {"2a01:570:2::/32", "33941"}, + {"2a06:9040::/29", "13101"}, + {"2620:0:900::/48", "4185"}, + {"2804:63e0::/32", "269389"}, + {"2a04:5b81:1000::/40", "202265"}, + {"2c0f:1500:2000::/36", "328888"}, + {"2001:1af0:9020::/48", "43009"}, + {"2402:800:579b::/42", "7552"}, + {"2604:a1c0::/32", "395466"}, + {"2001:559:8714::/48", "33662"}, + {"2407:1e00:1004::/32", "45158"}, + {"2600:6c38:707::/44", "20115"}, + {"2606:6500::/28", "19331"}, + {"2607:ffd8:801::/48", "17048"}, + {"2800:160:1826::/44", "14259"}, + {"2806:2f0:72c1::/46", "17072"}, + {"2a02:970:117a::/40", "44002"}, + {"2a02:26f7:cb85::/46", "20940"}, + {"2401:800::/32", "9812"}, + {"2804:2d3c::/32", "265268"}, + {"2804:5e70::/32", "269033"}, + {"2a0d:d740:107::/48", "207675"}, + {"240a:ae40::/32", "146298"}, + {"240e:105:f500::/40", "139316"}, + {"2a01:4a60:ffbf::/48", "196939"}, + {"2001:559:129::/48", "7922"}, + {"2001:fd8:2f3::/39", "4775"}, + {"2408:8256:2d60::/44", "17623"}, + {"2804:1d4c:8040::/33", "264359"}, + {"2a02:21b2:b2ee::/48", "57370"}, + {"2001:c20:c841::/48", "3758"}, + {"2408:8957:e300::/40", "17816"}, + {"2a01:4b40:1000::/33", "21299"}, + {"2a0c:9a40:808d::/48", "201106"}, + {"2001:4d78:2200::/37", "15830"}, + {"2408:8956:ae00::/40", "17622"}, + {"240e:925:1000::/34", "4134"}, + {"2604:3dc0::/32", "394449"}, + {"2a02:26f7:d285::/46", "20940"}, + {"2001:1938:4007::/48", "33438"}, + {"2602:803:4072::/47", "398223"}, + {"2803:3640::/32", "264750"}, + {"2a02:21e8::/32", "197036"}, + {"2a02:26f7:cb10::/48", "36183"}, + {"2a09:3cc0::/29", "204326"}, + {"2401:4900:4680::/44", "45609"}, + {"240e:3bc:7a00::/32", "140313"}, + {"2800:bf0:b400::/45", "52257"}, + {"2a02:26f7:c885::/46", "20940"}, + {"2607:6004:100::/40", "12189"}, + {"2800:160:1ebd::/41", "14259"}, + {"2603:8070::/31", "10796"}, + {"2606:2800:5a48::/46", "15133"}, + {"2804:6180::/32", "269238"}, + {"2a02:26f7:c284::/48", "36183"}, + {"2a02:26f7:c381::/46", "20940"}, + {"2a0c:7e43:2e10::/48", "20473"}, + {"2a11:7a40::/29", "204790"}, + {"2400:7400:77::/32", "38044"}, + {"2406:3003:2000::/42", "55430"}, + {"2804:1e78::/32", "28658"}, + {"2a02:26f7:d44d::/42", "20940"}, + {"2c0f:f9a8::/32", "37680"}, + {"2403:4540::/32", "137991"}, + {"240a:ab35::/32", "145519"}, + {"240e:3b8:f700::/36", "4134"}, + {"2620:22:e000::/48", "64273"}, + {"2a0a:11c0::/29", "43129"}, + {"2401:d800:db70::/40", "7552"}, + {"2402:800:319b::/41", "7552"}, + {"2405:4500:e::/32", "9671"}, + {"2600:100e:a110::/35", "6167"}, + {"2604:f980:2100::/44", "19957"}, + {"2800:ba0:6::/48", "263812"}, + {"2a02:26f7:e::/48", "36183"}, + {"2a02:26f7:fac5::/46", "20940"}, + {"2a02:2e02:1f60::/40", "12479"}, + {"2a09:3345::/30", "209509"}, + {"2606:4000:300::/40", "11074"}, + {"2607:f650::/32", "32869"}, + {"2804:1b08:4000::/32", "61704"}, + {"2a02:ff00::/29", "60475"}, + {"2806:2f0:5283::/41", "17072"}, + {"2001:559:c047::/44", "7922"}, + {"2001:648:2800::/48", "5470"}, + {"2401:d800:2380::/42", "7552"}, + {"2602:fe90:602::/45", "35913"}, + {"2806:2f0:9ec1::/42", "17072"}, + {"2a07:4340::/29", "200612"}, + {"2a10:f540::/29", "15600"}, + {"2001:506:30::/48", "13830"}, + {"240a:ae16::/32", "146256"}, + {"240e:44d:2e80::/41", "4134"}, + {"2605:a000:1f00::/32", "10796"}, + {"2620:101:9008::/47", "40934"}, + {"2800:5d0:802::/32", "52302"}, + {"2803:25e0::/32", "28032"}, + {"2a02:26f7:ce01::/46", "20940"}, + {"2001:678:658::/48", "3209"}, + {"2408:8459:2e10::/41", "17623"}, + {"2605:a401:9::/48", "33363"}, + {"2804:50e4::/32", "268417"}, + {"240e:108:48::/48", "134769"}, + {"2001:559:824c::/47", "33651"}, + {"2001:67c:840::/48", "212688"}, + {"2001:da8:801f::/48", "133475"}, + {"2402:800:74a0::/41", "7552"}, + {"2408:84f3:3460::/40", "17623"}, + {"240e:108:10b0::/47", "134420"}, + {"2001:559:5ad::/48", "7725"}, + {"2001:559:8142::/48", "33491"}, + {"2001:fff::/40", "38620"}, + {"240a:a519::/32", "143955"}, + {"2605:3380:4186::/44", "12025"}, + {"2a11:b00::/29", "208959"}, + {"2001:250:c00::/44", "138374"}, + {"2001:559:c044::/48", "7725"}, + {"240a:acb9::/32", "145907"}, + {"2800:160:1f92::/45", "14259"}, + {"2806:2f0:9501::/46", "17072"}, + {"2a02:c47:4::/48", "48446"}, + {"2001:1a11:78::/48", "8781"}, + {"2402:7b40::/32", "132894"}, + {"2403:f000:100::/40", "38220"}, + {"240a:a39a::/32", "143572"}, + {"2a00:1268::/32", "39761"}, + {"2a03:71c0::/32", "29208"}, + {"2a07:59c1:201a::/45", "210770"}, + {"2a0a:e6c0::/29", "197075"}, + {"2403:7900::/32", "1851"}, + {"2600:1408:3c00::/48", "35994"}, + {"2607:fc48:810::/48", "40009"}, + {"2804:5458:1000::/34", "268644"}, + {"2a01:7a00:adac::/33", "51701"}, + {"2a0b:1306::/48", "198018"}, + {"2001:559:82f8::/48", "33667"}, + {"2001:67c:2704::/48", "47914"}, + {"2401:3ac0::/32", "133189"}, + {"240e:3b1:9200::/36", "140317"}, + {"2600:6c38:8ea::/47", "20115"}, + {"2a02:2248::/32", "12615"}, + {"2405:8340::/32", "132923"}, + {"240a:a0a7::/32", "142817"}, + {"2620:123:9000::/48", "394976"}, + {"2803:c010:7::/48", "271799"}, + {"2804:104c:c000::/40", "263629"}, + {"2806:2f0:2442::/48", "17072"}, + {"2400:1c00:1d0::/42", "45143"}, + {"2600:9000:224e::/43", "16509"}, + {"2603:d000::/24", "30600"}, + {"2001:4998:181::/43", "10310"}, + {"2408:8459:1930::/41", "17622"}, + {"240a:a96a::/32", "145060"}, + {"2605:3380:4149::/45", "12025"}, + {"2620:9f:c000::/48", "6109"}, + {"2620:118:8010::/48", "40885"}, + {"2804:151c::/32", "263371"}, + {"2401:4900:4f80::/44", "45609"}, + {"2401:d800:71f0::/38", "7552"}, + {"2600:6c10:4a::/43", "20115"}, + {"2804:28f4::/32", "263989"}, + {"2804:6720::/32", "269605"}, + {"2a01:4d0::/32", "31400"}, + {"2a07:3b80::/48", "47869"}, + {"2a0b:4340:1340::/48", "205152"}, + {"2600:140f:3401::/39", "20940"}, + {"2600:6c10:f345::/46", "20115"}, + {"2a02:26f7:d185::/46", "20940"}, + {"240a:a0ba::/32", "142836"}, + {"240a:a0c3::/32", "142845"}, + {"2a04:f7c0::/30", "201766"}, + {"2401:4900:a80::/39", "45609"}, + {"2404:7c0::/32", "138109"}, + {"240a:a104::/32", "142910"}, + {"2804:2f3c:2010::/42", "264879"}, + {"2001:218:2200::/40", "18259"}, + {"2407:4c00::/32", "38719"}, + {"240a:aefa::/32", "146484"}, + {"2604:5680::/32", "14860"}, + {"2001:559:c180::/48", "33659"}, + {"2001:da8:b00d::/46", "24371"}, + {"2001:4bf0:1::/48", "29527"}, + {"2401:4900:3f10::/41", "45609"}, + {"240e:db:9801::/34", "4134"}, + {"2001:550:800:200::/39", "174"}, + {"2001:559:4e9::/48", "33651"}, + {"2001:648:20f1::/38", "5408"}, + {"240e:3b2:2800::/38", "4134"}, + {"240e:45c:cb00::/40", "140538"}, + {"2a02:2100::/32", "39134"}, + {"2a0a:56c4:8400::/47", "42649"}, + {"2a0e:fd45:da0::/47", "60557"}, + {"2409:8907:7f20::/32", "24547"}, + {"2409:8c20:9c74::/34", "56046"}, + {"2804:7be8:c005::/44", "271462"}, + {"2001:df0:29f::/48", "58445"}, + {"2404:bf40:e701::/48", "2764"}, + {"240a:af0e::/32", "146504"}, + {"2602:ffe2:99::/48", "53334"}, + {"2606:7480::/32", "394232"}, + {"2607:8500::/32", "14987"}, + {"2001:559:8214::/48", "7015"}, + {"2001:67c:6f4::/48", "50073"}, + {"2a02:26f0:c700::/48", "9121"}, + {"2001:559:26e::/48", "7922"}, + {"2404:7cc0:7f04::/47", "10100"}, + {"2409:8d61::/30", "9808"}, + {"2801:10e::/48", "271844"}, + {"2a01:c50e:f200::/39", "12479"}, + {"2a02:26f7:d7c8::/48", "36183"}, + {"2a10:adc0::/29", "59474"}, + {"2001:da8:b1::/48", "24356"}, + {"2001:dcd:30::/48", "38796"}, + {"240a:a38d::/32", "143559"}, + {"2602:fc26:12::/48", "211562"}, + {"2602:fed2:7316::/47", "53356"}, + {"2604:2d80:c00::/38", "30036"}, + {"2620:171:e0::/43", "42"}, + {"2804:b1c::/32", "53008"}, + {"2804:44cc::/32", "267654"}, + {"2a01:664:1400::/36", "48951"}, + {"2a02:26f0:6201::/40", "20940"}, + {"2001:559:82e1::/48", "33651"}, + {"2605:3380:4189::/41", "12025"}, + {"2607:9b80::/40", "46558"}, + {"2001:559:1a4::/48", "33652"}, + {"2001:559:1dc::/47", "33659"}, + {"2402:800:5cc5::/43", "7552"}, + {"2600:1006:f140::/44", "6167"}, + {"2a0c:9a40:2a00::/40", "34927"}, + {"2a0e:e900::/29", "209994"}, + {"2001:1520:4::/46", "8972"}, + {"2804:35e0:2000::/36", "266312"}, + {"2001:44c8:4680::/44", "131445"}, + {"2001:4d50:fa00::/37", "34309"}, + {"2401:b680::/32", "59029"}, + {"2401:d800:9312::/41", "7552"}, + {"2803:d400::/32", "52384"}, + {"2804:7b88::/32", "271437"}, + {"2a02:2188:1000::/36", "48469"}, + {"2600:140f:9001::/37", "20940"}, + {"2600:6c3b:491::/45", "20115"}, + {"2604:af80:1048::/37", "18859"}, + {"2610:128::/35", "11686"}, + {"2803:9800:b505::/46", "11664"}, + {"2804:14d:3200::/40", "28573"}, + {"2804:1644:240::/39", "262903"}, + {"2a00:1af4:1001::/30", "35699"}, + {"2a00:79e0:500::/47", "395973"}, + {"2a01:40:4949::/48", "204979"}, + {"2a03:6a00::/29", "6908"}, + {"2a09:5640:1::/48", "9186"}, + {"2a0c:b641:5b3::/45", "213015"}, + {"2407:9440:72::/32", "141626"}, + {"2408:8459:de10::/42", "17623"}, + {"240e:108:46::/48", "134756"}, + {"2a01:54e0:6800::/38", "62287"}, + {"2a02:6900:8814::/48", "7160"}, + {"2a09:a200::/29", "51711"}, + {"2a0c:a080::/29", "43646"}, + {"2400:f940:13::/32", "45766"}, + {"2408:891c::/32", "4837"}, + {"2409:8028:1100::/37", "9808"}, + {"2a01:bf00::/32", "9044"}, + {"2a04:4e41:40::/44", "54113"}, + {"2a0a:2f40::/32", "5385"}, + {"2001:559:380::/48", "33659"}, + {"2401:d800:5620::/41", "7552"}, + {"2408:8459:be30::/41", "17622"}, + {"2604:880:6::/48", "29802"}, + {"2800:440:1400::/42", "27738"}, + {"2800:4b0:403f::/40", "12252"}, + {"2a03:4d47:800::/48", "199610"}, + {"2400:ec40::/32", "10214"}, + {"240a:ae54::/32", "146318"}, + {"2620:11d:2000::/40", "63154"}, + {"2804:6b64::/32", "270397"}, + {"2a04:2000::/29", "198184"}, + {"2001:559:474::/48", "33491"}, + {"2001:fd8:b240::/42", "132199"}, + {"2401:1fc0::/32", "141671"}, + {"2408:8456:8000::/42", "17622"}, + {"240a:a0a6::/32", "142816"}, + {"2605:5e00::/32", "40317"}, + {"2620:154:a10::/48", "16733"}, + {"2804:33dc::/32", "265421"}, + {"2804:3cdc::/32", "266239"}, + {"2a02:1388:3000::/33", "29247"}, + {"2a02:68e0::/32", "201896"}, + {"2403:fa00::/32", "9474"}, + {"2600:1015:b0c2::/39", "6167"}, + {"2602:fd26::/48", "14639"}, + {"2800:440:9800::/42", "27738"}, + {"2001:559:8563::/48", "33659"}, + {"2001:4b99:1::/48", "203476"}, + {"240a:ac9a::/32", "145876"}, + {"2a01:9560::/32", "62094"}, + {"2a04:e800:5020::/48", "57976"}, + {"2001:559:19c::/48", "33652"}, + {"2001:1a11:129::/48", "8781"}, + {"2407:4800:8000::/34", "45193"}, + {"240a:aceb::/32", "145957"}, + {"240e:44d:2f80::/41", "4134"}, + {"2a02:ee80:41a1::/43", "3573"}, + {"2001:1541:4110::/42", "16243"}, + {"2404:e4:119::/31", "703"}, + {"2620:125:9009::/48", "397415"}, + {"2a00:c8a0::/29", "48057"}, + {"240e:438:8a40::/37", "4134"}, + {"2600:100a:b100::/42", "6167"}, + {"2620:107:300f::/48", "16509"}, + {"2804:1b3:4001::/46", "18881"}, + {"2a02:26f7:df4d::/42", "20940"}, + {"2001:67c:28fc::/48", "48635"}, + {"2409:801a:3007::/29", "132525"}, + {"240a:a297::/32", "143313"}, + {"2607:f8b8::/32", "3043"}, + {"2800:a0::/29", "6057"}, + {"2a01:7e0:1fd::/32", "44066"}, + {"2a0c:ab07:c000::/36", "208861"}, + {"2001:4d20:8000::/33", "39290"}, + {"2600:1411:6000:1::/32", "20940"}, + {"2606:e600:ffff::/48", "11608"}, + {"2001:44b8:405a::/48", "7545"}, + {"240e:1c:b000::/36", "136190"}, + {"2600:9000:210d::/43", "16509"}, + {"2605:9880:400::/42", "23470"}, + {"2804:8210::/32", "272496"}, + {"2001:67c:2370::/48", "24681"}, + {"2400:8100::/32", "45671"}, + {"240e:3ba:7600::/39", "140313"}, + {"2604:b900:7000::/32", "11042"}, + {"2a01:c50e:cf00::/35", "12479"}, + {"2a03:2880:f05f::/42", "32934"}, + {"2804:1344::/32", "263525"}, + {"2806:20d:3218::/42", "32098"}, + {"2a03:9300::/32", "29649"}, + {"2001:930:131::/41", "15924"}, + {"2001:df5:5e80::/48", "141413"}, + {"2600:1f01:4800::/45", "16509"}, + {"2804:7d7c::/39", "271564"}, + {"2804:85bc:4000::/36", "272597"}, + {"2a0e:97c3:764::/48", "20473"}, + {"2a11:2380::/29", "60935"}, + {"2602:fcce:bae::/37", "399200"}, + {"2a0f:9400:7385::/48", "210537"}, + {"2001:559:83bc::/48", "33491"}, + {"2401:d800:7870::/40", "7552"}, + {"2803:d8a0::/32", "266812"}, + {"2804:77e0::/32", "271205"}, + {"2407:a600:a000::/36", "18004"}, + {"2620:10a:8001::/46", "27299"}, + {"2804:ddc::/32", "262387"}, + {"2804:4cec::/32", "267401"}, + {"2a00:4800:3f0::/30", "8717"}, + {"2c0f:eb50:1::/46", "328580"}, + {"2001:1998:8d0::/44", "13343"}, + {"2803:4580:8210::/44", "52468"}, + {"2a02:2050::/32", "47264"}, + {"240a:a3b7::/32", "143601"}, + {"2607:f790:fff0::/48", "62588"}, + {"2804:3918::/32", "266524"}, + {"2a03:2880:ff0d::/31", "32934"}, + {"2a04:4740:6293::/48", "25468"}, + {"2a05:de00::/29", "30835"}, + {"2405:6e00:450::/42", "18291"}, + {"2409:8914:7000::/36", "56044"}, + {"240a:a04f::/32", "142729"}, + {"240a:acc3::/32", "145917"}, + {"2600:6c38:8d2::/42", "20115"}, + {"2607:3c80::/32", "54039"}, + {"2803:af60::/32", "264637"}, + {"2001:1248:8409::/43", "11172"}, + {"2605:840::/32", "26209"}, + {"2a01:7f20::/48", "43385"}, + {"2a02:26f7:e888::/48", "36183"}, + {"2a06:b1c0::/29", "203765"}, + {"2001:4248:11::/41", "30999"}, + {"2402:e8c0::/32", "137847"}, + {"2804:2090::/32", "264498"}, + {"2a02:26f7:d48d::/42", "20940"}, + {"2a04:f840::/40", "9150"}, + {"2a07:3340::/48", "5539"}, + {"2a0f:e000::/29", "208317"}, + {"2404:bf40:a480::/48", "7545"}, + {"2409:8057:3800::/48", "9808"}, + {"2600:6c10:ffec::/43", "20115"}, + {"2603:f3f0::/29", "397165"}, + {"2404:4a00:7500:1::/36", "45629"}, + {"2620:0:5000::/48", "23431"}, + {"2a0f:5701:3200::/40", "34681"}, + {"240e:964:2b00::/40", "133775"}, + {"2602:803:4070::/48", "398223"}, + {"2606:f40:1::/48", "16509"}, + {"2401:1700:7c10::/42", "55666"}, + {"2a04:840::/43", "33182"}, + {"2a0e:b107:1110::/44", "42394"}, + {"2409:8914:b600::/39", "56044"}, + {"2600:1413:a001::/35", "20940"}, + {"2620:149:a06::/48", "6185"}, + {"2804:1458::/32", "263326"}, + {"2a02:ee80:416a::/43", "3573"}, + {"2607:f428:9410::/44", "20001"}, + {"2803:40e0::/32", "269846"}, + {"2a05:87c0::/29", "198440"}, + {"2a0b:b400::/29", "207141"}, + {"2001:250:3415::/46", "138438"}, + {"2001:df6:580::/48", "131984"}, + {"2001:df7:d000::/47", "133155"}, + {"2620:0:3b0::/48", "20452"}, + {"2806:3be::/32", "270119"}, + {"2a02:e980::/42", "19551"}, + {"2a10:5e40::/29", "8875"}, + {"2001:559:8690::/48", "7922"}, + {"2001:6d0:6d06::/48", "8985"}, + {"2402:800:9ad3::/42", "7552"}, + {"2408:8409:b400::/40", "4808"}, + {"2604:d600:15e3::/44", "32098"}, + {"2607:f000::/32", "26978"}, + {"2804:267c::/32", "264345"}, + {"2001:57a:8001::/43", "22773"}, + {"2001:4430:4f08::/35", "17853"}, + {"2408:8459:650::/36", "17816"}, + {"2607:7b80::/32", "32798"}, + {"2803:c4e0::/35", "269809"}, + {"2001:1398:16::/48", "27678"}, + {"2001:43f8:391::/48", "327775"}, + {"2408:8762::/29", "4837"}, + {"2408:8956:c300::/40", "17816"}, + {"2804:4c04::/32", "267343"}, + {"2804:8460::/32", "272257"}, + {"2a02:26f7:bb80::/48", "36183"}, + {"2600:1000:b1f0::/36", "22394"}, + {"2804:4ee4::/32", "268289"}, + {"2001:559:83ab::/48", "33650"}, + {"2600:1001:9100::/44", "6167"}, + {"2804:dd4:8100::/33", "53024"}, + {"2a01:c9c0:8030::/48", "2285"}, + {"2a07:3f80::/29", "203103"}, + {"2804:b84::/32", "52788"}, + {"2804:7c84::/33", "271501"}, + {"2806:2f0:9f81::/46", "17072"}, + {"2001:559:8276::/48", "7922"}, + {"2400:4e80:79fd::/46", "131584"}, + {"2600:370f:754a::/42", "32261"}, + {"2a06:e500::/29", "199733"}, + {"2400:f340:9::/48", "131746"}, + {"2408:8256:3661::/43", "17623"}, + {"240a:a626::/32", "144224"}, + {"240e:698:2000::/40", "4134"}, + {"2a02:b98::/32", "12897"}, + {"2c0f:eed0::/32", "328316"}, + {"240c:ca43::/32", "24363"}, + {"2610:a1:1079::/48", "397228"}, + {"2620:107:907d::/48", "22787"}, + {"2804:ee4::/32", "263557"}, + {"2804:7fa4::/32", "271700"}, + {"2a02:26f0:8b::/45", "20940"}, + {"2a04:7440::/30", "196714"}, + {"2001:df2:c000::/48", "132644"}, + {"2400:adc0:4100::/46", "9541"}, + {"2607:b80:4::/32", "30247"}, + {"2804:cb0:a001::/37", "52742"}, + {"2804:7540::/35", "271034"}, + {"2a01:358::/35", "9121"}, + {"2001:250:5817::/44", "24363"}, + {"2001:49f0:d0fa::/48", "30058"}, + {"2600:5c01:319d::/41", "10796"}, + {"2001:978:4a01::/37", "174"}, + {"2400:1f00:12::/47", "45769"}, + {"2a0a:4e00::/29", "57755"}, + {"240d:c010:88::/48", "139341"}, + {"2600:140f:3e01::/33", "20940"}, + {"2604:0:c1::/48", "40484"}, + {"2607:f180:3200::/33", "35908"}, + {"2a03:4200::/32", "5413"}, + {"2001:678:9fc::/48", "15550"}, + {"2401:7000:7003::/32", "45177"}, + {"2405:9800:9c00::/40", "38443"}, + {"2620:52:10::/48", "399140"}, + {"2804:3660::/32", "266344"}, + {"2806:2f0:3181::/46", "17072"}, + {"2a02:26f7:e84d::/46", "20940"}, + {"2a03:6660::/32", "43287"}, + {"2001:1a11:139::/46", "8781"}, + {"240e:108:1071::/44", "4134"}, + {"2600:1417:38::/48", "24319"}, + {"2607:9800::/32", "15085"}, + {"2607:f110:41::/46", "21889"}, + {"2a04:4e40:7800::/47", "54113"}, + {"2001:559:c062::/45", "7922"}, + {"2600:1406:1a00::/48", "35994"}, + {"2801:10:c800::/48", "14080"}, + {"2803:a0a0:903::/48", "269799"}, + {"2001:43f8:10a0::/48", "328268"}, + {"2801:1a:1800::/48", "19429"}, + {"2a03:dc80::/32", "42697"}, + {"2a0a:ab00::/29", "25057"}, + {"2402:800:bfc0::/42", "7552"}, + {"240a:a8cc::/32", "144902"}, + {"2606:b600:100::/48", "26527"}, + {"2804:1b3:4000::/48", "10429"}, + {"2804:4dc::/32", "262474"}, + {"2a02:2188::/48", "48469"}, + {"2a04:9300::/32", "62239"}, + {"2001:ec0:8a5::/48", "147027"}, + {"2409:8b75::/28", "9808"}, + {"2600:1417:34::/46", "20940"}, + {"2602:ffc1::/32", "36731"}, + {"2a01:c50f:3180::/42", "5511"}, + {"2a0a:d6c0:eff1::/46", "61423"}, + {"2001:7f8:80::/48", "8695"}, + {"2408:8459:c810::/42", "17623"}, + {"2409:896a:5000::/39", "9808"}, + {"2600:1012:9020::/40", "22394"}, + {"2606:b940::/32", "61138"}, + {"2800:1d0::/32", "14187"}, + {"2a04:5d80::/29", "61310"}, + {"2001:1a90::/32", "8851"}, + {"2a05:5b80::/29", "38999"}, + {"2001:678:330::/48", "3301"}, + {"2606:3840::/32", "31915"}, + {"2803:95e0::/32", "270036"}, + {"2a02:26f7:ba01::/46", "20940"}, + {"2001:559:8230::/48", "13367"}, + {"2404:e80::/32", "134697"}, + {"2406:3000:51::/35", "4657"}, + {"2409:8a54::/32", "56040"}, + {"2806:2f0:3321::/46", "17072"}, + {"2001:470:f8::/48", "64238"}, + {"2001:44b8:406d::/48", "4739"}, + {"240a:a454::/32", "143758"}, + {"240a:a4e6::/32", "143904"}, + {"2800:bf0:3b80::/48", "52257"}, + {"2001:559:c29f::/42", "33657"}, + {"2001:648:2422::/40", "5408"}, + {"2001:44b8:309d::/46", "7545"}, + {"2404:8000:1009::/46", "17451"}, + {"2404:e600::/48", "132804"}, + {"240a:a169::/32", "143011"}, + {"2604:af80:900::/37", "18859"}, + {"2001:559:4c0::/48", "33491"}, + {"2001:559:84d3::/48", "7016"}, + {"2001:4830:c000::/40", "27552"}, + {"2604:d3c0::/32", "14534"}, + {"2804:34e0:fc00::/38", "265486"}, + {"2804:3c04::/47", "266185"}, + {"2a02:26f7:bb81::/46", "20940"}, + {"2a03:5c60::/32", "201157"}, + {"2001:559:8496::/48", "33667"}, + {"240a:a49f::/32", "143833"}, + {"2600:6c4c::/32", "20115"}, + {"2804:a00:2::/45", "262838"}, + {"2a02:26f7:b9c9::/46", "20940"}, + {"2a0f:f340::/32", "208164"}, + {"2001:1a40:202::/32", "5416"}, + {"2001:4450:40::/48", "20940"}, + {"2409:803c::/40", "24444"}, + {"2001:ac8:63::/44", "9009"}, + {"2800:23:3:16::/32", "11271"}, + {"2804:2e28::/32", "265328"}, + {"2806:230:3011::/48", "11888"}, + {"2a02:26f7:dc45::/46", "20940"}, + {"2a02:2af8:403::/45", "702"}, + {"2a0f:8647:b00c::/33", "25682"}, + {"2001:18c8::/39", "8015"}, + {"2402:3a80:1080::/41", "38266"}, + {"2600:1003:f000::/44", "6167"}, + {"2620:17b:5::/48", "209"}, + {"2800:160:19d2::/44", "14259"}, + {"2804:28fc::/32", "263991"}, + {"2a00:1520::/32", "51815"}, + {"2001:559:80ad::/48", "7922"}, + {"2409:802f:2a06::/39", "56041"}, + {"240a:a40e::/32", "143688"}, + {"240a:aade::/32", "145432"}, + {"2600:380:7780::/36", "20057"}, + {"2a01:b740:a08::/48", "6185"}, + {"2a10:9800::/29", "212708"}, + {"2001:559:4d3::/48", "33657"}, + {"2001:559:821d::/48", "20214"}, + {"2001:c20:48c5::/48", "3758"}, + {"2400:dd01:3005::/43", "7497"}, + {"2602:fbf5:1::/46", "212149"}, + {"2804:3fec::/32", "265922"}, + {"2804:8248::/32", "272510"}, + {"2806:20d:100d::/39", "32098"}, + {"2001:559:215::/48", "33659"}, + {"2606:ae00:7120::/32", "7287"}, + {"2607:5700::/32", "20093"}, + {"2804:5380::/32", "268588"}, + {"2a0b:a740::/32", "25276"}, + {"2404:1a0:2012::/30", "24334"}, + {"2404:3980::/32", "134967"}, + {"2404:f4c0:1108::/48", "32167"}, + {"2800:68:1aa6::/32", "61468"}, + {"2801:1fc:2a::/48", "27951"}, + {"2804:4f34::/32", "268311"}, + {"2600:1406:7401::/36", "20940"}, + {"2605:7f40::/32", "396357"}, + {"2801:a4::/32", "262742"}, + {"2804:5258::/32", "268512"}, + {"2a00:9d20:102::/48", "395954"}, + {"2a03:2880:f21d::/46", "32934"}, + {"2001:253:102::/48", "142068"}, + {"2001:480:421::/48", "518"}, + {"2001:67c:c4::/48", "210138"}, + {"2400:cc00:8d00::/33", "17477"}, + {"240a:af99::/32", "146643"}, + {"240e:438:640::/36", "4134"}, + {"2409:8752:d00::/38", "56047"}, + {"240a:a9fe::/32", "145208"}, + {"240a:ac4d::/32", "145799"}, + {"2803:9800:a4c3::/39", "11664"}, + {"2804:5510::/32", "268687"}, + {"2804:80a0::/32", "271763"}, + {"2001:e60:1000::/44", "4766"}, + {"240a:a312::/32", "143436"}, + {"240e:b18::/25", "4134"}, + {"2602:fcf5::/36", "14058"}, + {"2620:bd:4000::/48", "398713"}, + {"2001:578:13::/45", "22773"}, + {"2001:67c:7a4::/48", "199121"}, + {"2401:d800:b10::/42", "7552"}, + {"2600:141b:d::/43", "20940"}, + {"2803:daa0::/32", "266875"}, + {"2804:4390:2020::/32", "28194"}, + {"2804:5cc0::/32", "268928"}, + {"2a0b:2540::/32", "57848"}, + {"2a0e:2900::/30", "209929"}, + {"2804:40d4::/32", "265984"}, + {"2a02:26f7:a::/48", "36183"}, + {"2a05:dfc7:31::/41", "61138"}, + {"2001:559:8151::/48", "7016"}, + {"2409:8a45:400::/28", "24445"}, + {"240a:a10d::/32", "142919"}, + {"2804:1264::/32", "263474"}, + {"2804:161c:800::/45", "263268"}, + {"2804:2df8:eecf::/35", "265315"}, + {"2620:10a:8022::/48", "394354"}, + {"2a01:14f::/32", "47443"}, + {"2a02:8d0::/32", "49413"}, + {"2a03:d000:7301::/46", "31133"}, + {"240a:a96c::/32", "145062"}, + {"2600:1406:f000::/48", "35994"}, + {"2605:b980::/32", "23376"}, + {"2402:5300:2040::/39", "45903"}, + {"2402:e7c0:1000::/32", "59078"}, + {"2602:809:3004::/48", "34553"}, + {"2602:80c:2000::/43", "399976"}, + {"2604:d500::/32", "54098"}, + {"2a03:68c0::/34", "61327"}, + {"2a10:3d00::/29", "212457"}, + {"2001:559:c227::/48", "7922"}, + {"2401:c900:1800::/40", "36351"}, + {"2610:170::/32", "11260"}, + {"2804:4164:a000::/33", "267430"}, + {"2804:7980::/32", "271309"}, + {"2a00:1288:ef6b::/40", "10310"}, + {"2a01:8ae0::/32", "51105"}, + {"2a02:a000::/26", "5432"}, + {"2a03:1840::/46", "51248"}, + {"2401:1801:821::/35", "58683"}, + {"2402:800:94ee::/43", "7552"}, + {"2a03:c300::/32", "20514"}, + {"2001:67c:194::/48", "39138"}, + {"2001:1b70:81::/48", "16086"}, + {"2401:d800:d9f0::/38", "7552"}, + {"2402:c000:2::/34", "9230"}, + {"2001:559:171::/48", "33657"}, + {"2001:6d0:ffd5::/46", "42385"}, + {"2402:3a80:1500::/38", "38266"}, + {"2402:ab00:b0::/41", "24206"}, + {"2408:84f3:2e90::/35", "17816"}, + {"2801:17e::/47", "262589"}, + {"2804:7d74::/32", "271562"}, + {"2001:559:831b::/48", "33660"}, + {"2402:9800:4004::/48", "46025"}, + {"240a:af7a::/32", "146612"}, + {"2a01:8840:a6::/44", "12041"}, + {"2401:ff00:a000::/36", "64073"}, + {"240a:ac19::/32", "145747"}, + {"2600:1409:f000::/48", "35994"}, + {"2604:86c0:f100::/38", "63023"}, + {"2804:19a0:2000::/48", "61808"}, + {"2a0b:2400::/32", "16097"}, + {"2001:ec0:400c::/48", "147027"}, + {"240a:a133::/32", "142957"}, + {"2600:5c01:3045::/39", "10796"}, + {"2804:14d:c000::/40", "28573"}, + {"2a02:26f7:fb45::/46", "20940"}, + {"2a11:7640::/29", "49655"}, + {"2001:579:a08c::/43", "22773"}, + {"2001:1248:98ad::/43", "11172"}, + {"240e:45c:5300::/40", "140529"}, + {"2600:6c20:e2a::/41", "20115"}, + {"2804:262c::/32", "264326"}, + {"2a01:358:3b12::/33", "9121"}, + {"2402:800:369b::/41", "7552"}, + {"2402:800:587f::/40", "7552"}, + {"2406:8800:60::/32", "17465"}, + {"2409:8020:1061::/43", "56046"}, + {"2c0f:f850:dc06::/34", "327979"}, + {"240a:a651::/32", "144267"}, + {"240a:a8a4::/32", "144862"}, + {"2a02:23e9::/32", "49509"}, + {"2a03:77e0:4401::/48", "48305"}, + {"2a11:9280::/29", "204790"}, + {"2602:fcff:18::/47", "38041"}, + {"2804:13ac::/32", "263545"}, + {"2804:17bc::/32", "52739"}, + {"2001:43f0::/32", "37183"}, + {"2409:8057:3019::/48", "56040"}, + {"2806:1010:d000::/34", "8151"}, + {"2a04:f580:9020::/48", "4809"}, + {"2a12:3a00::/29", "204790"}, + {"2001:559:8013::/48", "7016"}, + {"2408:8459:6430::/41", "17622"}, + {"2600:8807:1f42::/42", "22773"}, + {"2803:ae10::/32", "271969"}, + {"2804:e68::/32", "262953"}, + {"2a0a:2ec0::/29", "201050"}, + {"2a10:ad40::/29", "211656"}, + {"240e:44d:7800::/42", "140345"}, + {"2606:2800:e::/47", "15133"}, + {"2801:0:480::/48", "27817"}, + {"2803:8180::/47", "263237"}, + {"2804:1b7c::/32", "61731"}, + {"2a0c:1d00:15::/32", "39614"}, + {"2001:559:8153::/48", "33287"}, + {"2001:4220:8013::/45", "24835"}, + {"2602:fd37::/46", "398493"}, + {"2607:f148:103::/48", "11734"}, + {"2804:680:1000::/32", "262589"}, + {"2804:3d1c::/32", "266254"}, + {"2a0f:4800::/29", "50064"}, + {"2402:800:94a9::/43", "7552"}, + {"2600:1408:1000::/48", "35994"}, + {"2a00:11c0:d::/42", "42473"}, + {"2001:57a:50f::/48", "33438"}, + {"2001:978:4701::/36", "174"}, + {"2001:fd8:31f0::/38", "4775"}, + {"2001:1900:2019::/45", "3356"}, + {"2a0f:c500::/29", "201299"}, + {"2a11:5380::/29", "56485"}, + {"2001:a17::/32", "204679"}, + {"2408:840d:d00::/42", "17621"}, + {"2804:80e4::/32", "272419"}, + {"2a02:2680::/32", "51675"}, + {"2607:7000:a100::/33", "25905"}, + {"2803:9800:94c3::/39", "11664"}, + {"2001:fd8:371::/40", "4775"}, + {"2408:845c::/31", "4837"}, + {"2806:230:3003::/48", "11888"}, + {"2400:c500:100::/38", "17434"}, + {"240a:afde::/32", "146712"}, + {"2804:5bdc::/46", "268873"}, + {"2a0f:9700::/29", "208386"}, + {"2401:bd00:b001::/46", "38636"}, + {"2404:a1c0::/32", "55699"}, + {"2602:feb4:290::/44", "25961"}, + {"2804:20a4::/32", "264503"}, + {"2a01:7080:15::/46", "42848"}, + {"2a02:e180::/46", "15135"}, + {"2a09:59c0::/29", "63023"}, + {"2a00:fea0::/32", "60592"}, + {"2a0a:1ec0::/31", "205790"}, + {"2a0d:3842:1290::/48", "57629"}, + {"2605:a40e:2::/45", "33363"}, + {"2608:121::/48", "5376"}, + {"2a02:26f7:e600::/48", "36183"}, + {"2a0a:5680::/29", "35048"}, + {"2a11:d6c0::/29", "49189"}, + {"2a00:d280::/48", "43919"}, + {"2001:559:c420::/47", "7016"}, + {"2401:4100::/32", "9387"}, + {"2409:8078:1900::/34", "9808"}, + {"2604:7500::/32", "6368"}, + {"2605:5b40::/32", "36363"}, + {"2804:14d:8a00::/40", "28573"}, + {"2804:5234::/32", "268502"}, + {"2806:2f0:3060::/40", "17072"}, + {"2001:5a0:3b06::/37", "6453"}, + {"2402:c480:8000::/47", "63916"}, + {"2620:149:a09::/46", "6185"}, + {"2a01:548::/32", "9113"}, + {"2a02:c08::/32", "21050"}, + {"2c0f:ef68::/46", "37662"}, + {"2001:cf8::/45", "9619"}, + {"2600:1417:c801::/37", "20940"}, + {"2604:b2c0:d00::/40", "7018"}, + {"2803:2540:ae::/32", "264668"}, + {"2a01:6640::/29", "204790"}, + {"2a02:26f7:c8d5::/46", "20940"}, + {"2a0d:95c0::/29", "42375"}, + {"2404:4a00:5542:4::/54", "55423"}, + {"240a:a89d::/32", "144855"}, + {"2600:1417:1b::/45", "20940"}, + {"2607:f110:9::/43", "21889"}, + {"2607:f578::/32", "14263"}, + {"2804:16c0::/32", "61914"}, + {"2a10:9100:8::/48", "49453"}, + {"2409:8c15:9800::/30", "56044"}, + {"2607:9280:1::/48", "395502"}, + {"2804:4da0::/32", "268209"}, + {"240a:abc9::/32", "145667"}, + {"2604:2f80::/32", "26523"}, + {"2a00:1100::/29", "51483"}, + {"2a00:17cf::/32", "12511"}, + {"2a04:cb40::/29", "41552"}, + {"2a05:bec0::/42", "197071"}, + {"2001:559:84f3::/45", "33659"}, + {"2001:b28:a70d:1::/33", "42065"}, + {"2001:1900:201f::/39", "3356"}, + {"2400:cb00:500::/48", "13335"}, + {"2402:800:74c2::/39", "7552"}, + {"2403:8940:5::/44", "135817"}, + {"2a02:2650::/32", "41302"}, + {"2a0e:b107:230::/48", "209419"}, + {"2803:d100:e700::/41", "52362"}, + {"2804:3de4::/32", "266560"}, + {"2a09:3a00:2000::/48", "200299"}, + {"240e:3b1:6400::/35", "140312"}, + {"2606:2800:2aa::/45", "14153"}, + {"2804:5ba8:4000::/32", "268861"}, + {"2a01:5b0:3::/48", "8391"}, + {"2001:579:f034::/44", "22773"}, + {"2804:94::/32", "53081"}, + {"2804:5318::/32", "268563"}, + {"2001:579:5084::/41", "22773"}, + {"2001:da8:b000::/44", "24371"}, + {"2401:4900:3af0::/48", "45609"}, + {"240e:979:9600::/30", "4134"}, + {"2801:80:140c::/48", "11097"}, + {"2804:2598::/32", "264290"}, + {"2a04:e640::/29", "34241"}, + {"2402:800:7580::/42", "7552"}, + {"2409:8087:1e00::/39", "24400"}, + {"2a02:26f7:c9c4::/48", "36183"}, + {"2a04:f580:9080::/48", "4809"}, + {"2001:559:3::/48", "7922"}, + {"2404:f4c0:1000::/40", "17920"}, + {"2804:57e0::/32", "268092"}, + {"2001:250:401::/44", "24352"}, + {"2001:559:84fc::/47", "33651"}, + {"2600:100d:f100::/44", "6167"}, + {"2602:107:2210::/48", "20115"}, + {"2804:3774:2300::/37", "266416"}, + {"2a00:ec0::/32", "20634"}, + {"2001:4350:3001::/48", "5438"}, + {"2620:a4:2050::/48", "394592"}, + {"2a0d:5600:1::/44", "9009"}, + {"2001:678:560::/48", "49225"}, + {"2401:803e:4025::/31", "9919"}, + {"2404:1640::/32", "138494"}, + {"240a:a685::/32", "144319"}, + {"2804:784::/32", "262653"}, + {"2a02:1c8:5::/48", "47775"}, + {"2a0b:4340:30::/44", "41979"}, + {"2a10:b5c0::/29", "211668"}, + {"2001:57a:c204::/42", "22773"}, + {"240e:3ba:6400::/35", "140312"}, + {"2001:4e0::/35", "2381"}, + {"2001:579:d244::/42", "22773"}, + {"2001:4868:209::/42", "701"}, + {"2405:d6c0::/32", "132369"}, + {"240a:a28e::/32", "143304"}, + {"240a:a865::/32", "144799"}, + {"240e:980:9b00::/40", "134761"}, + {"2607:fdf0:5e98::/45", "8008"}, + {"2804:ff0::/32", "263609"}, + {"2402:c480:6000::/46", "63916"}, + {"2a02:88d:8200::/44", "48695"}, + {"2a07:4680::/32", "200697"}, + {"2001:559:8722::/47", "33657"}, + {"2001:559:c3ce::/48", "20214"}, + {"2001:67c:424::/48", "8220"}, + {"240e:f7:1000::/36", "4134"}, + {"2602:ffe2:100::/48", "53334"}, + {"2620:13a:b003::/48", "54344"}, + {"2804:3004::/32", "264926"}, + {"2a01:3e0:d02::/32", "6453"}, + {"2a02:26f0:11b::/48", "34164"}, + {"2a02:26f7:e440::/48", "36183"}, + {"2a02:26f7:f8cd::/46", "20940"}, + {"2600:100f:f010::/40", "22394"}, + {"2a02:2518::/43", "28917"}, + {"2a02:ac40::/29", "25459"}, + {"2a0a:d6c0:efef::/48", "61423"}, + {"2620:108:9001::/48", "12159"}, + {"2a01:8840:e9::/48", "207266"}, + {"2a0d:b201:e030::/41", "206026"}, + {"2001:559:32b::/45", "7922"}, + {"2402:5300:610::/39", "45903"}, + {"240e:45c:8300::/40", "140533"}, + {"2607:fb10:7142::/47", "2906"}, + {"2a02:26f7:cc40::/48", "36183"}, + {"2a02:e982:31::/48", "62571"}, + {"2001:559:759::/48", "7015"}, + {"2001:678:3dc::/48", "39508"}, + {"2408:8956:8f00::/40", "17816"}, + {"2409:8735::/28", "9808"}, + {"2600:8800::/30", "22773"}, + {"2606:6c00:4000::/48", "32787"}, + {"2620:0:840::/48", "13998"}, + {"2a0f:3c40::/29", "3175"}, + {"2001:7be:1::/31", "12859"}, + {"2409:8070:1900::/34", "9808"}, + {"2804:4b04::/32", "267278"}, + {"2a04:b240::/29", "8680"}, + {"240a:a724::/32", "144478"}, + {"2804:2050:1abd::/34", "264485"}, + {"2804:5da8::/32", "268985"}, + {"2806:2f0:7181::/46", "17072"}, + {"2001:579:b05::/37", "22773"}, + {"2001:67c:17dc::/48", "1257"}, + {"2001:df4:a900::/48", "137327"}, + {"2408:8256:337a::/45", "17623"}, + {"240e:3b7:d000::/36", "134772"}, + {"2605:9780:30::/48", "393544"}, + {"2804:3568::/32", "266284"}, + {"2804:4924:10::/32", "267167"}, + {"2001:678:ba4::/48", "207824"}, + {"240c:ca44::/30", "23910"}, + {"2620:107:6000:1146::/53", "6462"}, + {"2800:bf0:800f::/43", "52257"}, + {"2a10:dd40::/29", "34907"}, + {"2001:579:701c::/42", "22773"}, + {"2407:61c0::/32", "131986"}, + {"2408:8957:cd40::/40", "17816"}, + {"240a:a74b::/32", "144517"}, + {"240a:a816::/32", "144720"}, + {"240c:ca18::/31", "24363"}, + {"2603:c001:3e20::/33", "31898"}, + {"2804:7d94::/32", "271570"}, + {"2806:230:1034::/48", "265594"}, + {"2a03:53c0::/32", "197495"}, + {"2a0c:b641:160::/48", "211139"}, + {"2001:df6:1680::/48", "140786"}, + {"2406:19c0::/32", "140659"}, + {"240e:44d:6a80::/41", "4134"}, + {"2806:2f0:8121::/46", "17072"}, + {"2a0d:5c00::/32", "21396"}, + {"2610:d0::/32", "3943"}, + {"2804:4e10::/32", "268237"}, + {"2a03:2960:200::/32", "201590"}, + {"2001:67c:2458::/48", "2119"}, + {"2001:ed8::/32", "18422"}, + {"2001:43f8:6e0::/48", "37354"}, + {"2001:4488:fb62::/37", "7713"}, + {"2a02:f700::/29", "12812"}, + {"2620:34:a000::/48", "62947"}, + {"2620:106:6008::/48", "377"}, + {"2800:98:1710::/36", "14754"}, + {"2800:9a0:2100::/35", "14522"}, + {"2804:11c::/32", "28357"}, + {"2804:f7c::/32", "262715"}, + {"2407:ff00::/32", "45884"}, + {"2408:8256:376b::/48", "17816"}, + {"2800:bf0:802a::/48", "27947"}, + {"2804:60fc::/32", "269204"}, + {"2a01:48c0::/32", "34960"}, + {"2a09:bac0:160::/48", "13335"}, + {"2001:1520:7::/44", "8972"}, + {"2400:7400:e020::/48", "38044"}, + {"2600:1003:b8e0::/33", "22394"}, + {"2600:1010:fe00::/44", "6167"}, + {"2800:110:2800::/48", "27875"}, + {"2800:484:ef00::/35", "14080"}, + {"2804:27c0::/32", "263920"}, + {"2804:5494::/32", "268659"}, + {"2001:67c:1250::/48", "49697"}, + {"2405:2300:ff09::/41", "13443"}, + {"2408:825c::/31", "4837"}, + {"2800:160:1cff::/39", "14259"}, + {"240a:aab5::/32", "145391"}, + {"2605:3380:4145::/46", "12025"}, + {"2606:a600:9::/33", "23005"}, + {"2001:c20:c818::/42", "3758"}, + {"2401:8140::/32", "133736"}, + {"2403:bc00:1::/48", "45668"}, + {"2001:559:24b::/45", "33491"}, + {"240a:a186::/32", "143040"}, + {"2600:3505:8000::/33", "396998"}, + {"2607:2f00::/43", "12025"}, + {"2607:f598:f002::/36", "32329"}, + {"2a07:4ec0::/29", "5606"}, + {"2404:f100:e000::/38", "17483"}, + {"2606:4240::/32", "399513"}, + {"2620:40:a000::/48", "54495"}, + {"2804:548::/39", "53005"}, + {"2a04:4e42:3d::/41", "54113"}, + {"2001:fd8:3f1::/44", "4775"}, + {"2607:ed80::/32", "395785"}, + {"2a01:4e0::/29", "24651"}, + {"2402:800:322b::/41", "7552"}, + {"240a:a3a7::/32", "143585"}, + {"2400:9380:9ec0::/44", "136167"}, + {"2001:67c:10dc::/48", "199215"}, + {"2001:4478:1310:2000::/47", "4802"}, + {"2402:800:981d::/41", "7552"}, + {"2404:4340::/47", "133275"}, + {"2606:6680:30::/48", "12129"}, + {"2001:12f0:b3f::/48", "1916"}, + {"2403:6ec0::/32", "131247"}, + {"2a03:f80:389::/48", "25467"}, + {"2a0e:aa00:120::/45", "41378"}, + {"2001:500:d0::/47", "12041"}, + {"2401:24c0::/32", "37897"}, + {"2620:1ec:12::/47", "8068"}, + {"2001:559:850f::/48", "7922"}, + {"2402:f080:a::/45", "38150"}, + {"2800:960::/32", "27768"}, + {"2600:100f:9110::/36", "22394"}, + {"2001:559:8241::/48", "7922"}, + {"2402:1440:30::/48", "132168"}, + {"2800:4b0:8401::/36", "12252"}, + {"2804:6164:8000::/34", "262424"}, + {"2806:230:1024::/48", "265594"}, + {"2a02:26f7:e3cd::/42", "20940"}, + {"2600:1417:2001::/36", "20940"}, + {"2804:3374::/32", "265397"}, + {"2a02:26f7:b780::/48", "36183"}, + {"2a02:6680:1130::/44", "16116"}, + {"2a07:e040::/32", "211895"}, + {"2801:0:140::/48", "52314"}, + {"2a03:2887:ff43::/45", "63293"}, + {"2001:559:c2ab::/48", "7725"}, + {"2607:9e00:1002::/34", "30536"}, + {"2804:374::/32", "262844"}, + {"2a02:568:fe03::/39", "8763"}, + {"2a0c:b9c0::/32", "202448"}, + {"2001:67c:2af4::/48", "8562"}, + {"2401:d800:fc02::/42", "7552"}, + {"2806:2f0:20e1::/48", "22884"}, + {"2a02:26f7:d8c1::/46", "20940"}, + {"2a0a:a600::/29", "61317"}, + {"2a0c:e642:32::/41", "211323"}, + {"2001:da8:b803::/45", "24372"}, + {"2402:d000:7001::/32", "9329"}, + {"2a00:1b68::/32", "43226"}, + {"2a02:888:4050::/48", "48695"}, + {"2a03:720:5::/44", "57073"}, + {"2001:dc7:1000::/48", "24409"}, + {"2406:cbc0::/48", "135901"}, + {"2408:876c::/27", "4837"}, + {"2605:6440:3005::/33", "396356"}, + {"2620:ff:c000::/48", "64238"}, + {"2620:11b:e0bd::/41", "3356"}, + {"2800:160:1d7d::/40", "14259"}, + {"2804:2e1c:e681::/39", "265324"}, + {"2408:823c::/31", "4837"}, + {"2408:8772::/29", "4837"}, + {"2001:400:14:3::/38", "293"}, + {"2001:44c8:4870::/44", "131445"}, + {"2402:cf80:100::/44", "62597"}, + {"2408:8656:30f6::/44", "17623"}, + {"2409:8904:60b0::/38", "24547"}, + {"2409:8c1e::/34", "9808"}, + {"2800:160:11f9::/38", "14259"}, + {"2804:418::/32", "262415"}, + {"2804:6fc:1b::/42", "28158"}, + {"2001:b18:1000::/47", "47787"}, + {"2001:4c20::/32", "29636"}, + {"2804:bec::/32", "263018"}, + {"2001:418:1401:70::/63", "20940"}, + {"2001:559:8371::/45", "33287"}, + {"2404:e400::/44", "45345"}, + {"2408:8000:9ffd::/48", "140979"}, + {"2606:3340::/32", "399414"}, + {"2620:11b:e000::/43", "3356"}, + {"2a00:6901:e005::/48", "20926"}, + {"2001:67c:2e80::/48", "20712"}, + {"2603:60bd::/32", "11426"}, + {"2620:12d:400e::/47", "53988"}, + {"2804:17cc:4140::/32", "263252"}, + {"2001:67c:560::/48", "8949"}, + {"2001:1250:3000::/44", "22894"}, + {"2600:6c21:23c::/37", "20115"}, + {"2605:6ac0:1000::/36", "13789"}, + {"2806:2f0:1061::/48", "17072"}, + {"2001:559:795::/48", "33287"}, + {"2001:49f0:d0c1::/44", "174"}, + {"2405:c0:30::/48", "138881"}, + {"2409:8000::/40", "56048"}, + {"240a:a26f::/32", "143273"}, + {"2600:1408:f000::/48", "35994"}, + {"2806:240::/32", "14178"}, + {"2405:d3c0::/32", "133164"}, + {"240a:a45e::/32", "143768"}, + {"2600:370f:3541::/45", "32261"}, + {"2602:fd66::/36", "14756"}, + {"2804:204:24f::/43", "28186"}, + {"240e:438:4440::/38", "4134"}, + {"2a01:5700::/32", "209041"}, + {"2001:559:481::/48", "33287"}, + {"2404:7a40:1002::/48", "132556"}, + {"2406:2000:a9::/41", "10310"}, + {"240b:4007:fffe::/47", "45102"}, + {"2600:6c10:e50::/32", "20115"}, + {"2620:10c:c01c::/48", "6071"}, + {"2406:e001:6800::/35", "23655"}, + {"240a:a47c::/32", "143798"}, + {"240e:108:94::/46", "4134"}, + {"2600:380:ec80::/41", "20057"}, + {"2a01:c50f:8040::/35", "12479"}, + {"2c0f:f470::/32", "37640"}, + {"2001:fd8:ff00::/40", "132199"}, + {"2402:3800::/32", "7503"}, + {"2600:6c38:78::/47", "20115"}, + {"2602:fd12::/48", "16509"}, + {"2602:fed2:7060::/44", "53356"}, + {"2607:ae80:4::/47", "26558"}, + {"2607:fcc8:6000::/32", "10796"}, + {"2801:80:1ae0::/48", "266365"}, + {"2806:10ae:17::/48", "8151"}, + {"2407:1400:2::/45", "23752"}, + {"2600:6c38:13::/44", "20115"}, + {"2801:13:8800::/48", "269758"}, + {"2804:4d34::/32", "267418"}, + {"2001:559:87d8::/47", "7015"}, + {"2403:6200::/33", "45629"}, + {"2409:896a:4e00::/39", "9808"}, + {"240e:108:11b1::/48", "136190"}, + {"2a09:4b40::/29", "61317"}, + {"2001:250:6c3f::/41", "138370"}, + {"2607:3c00:6414::/47", "26380"}, + {"2608:121:1::/44", "721"}, + {"2a02:26f7:c8d1::/46", "20940"}, + {"2a03:5640:f506::/48", "2906"}, + {"2a04:1c40::/30", "201035"}, + {"2406:e5c0::/32", "4782"}, + {"240f::/23", "2516"}, + {"2801:1fc:1e::/48", "27951"}, + {"2a01:ce82:4000::/32", "51964"}, + {"2a0d:2d41::/32", "209419"}, + {"2a0e:3080::/29", "208921"}, + {"2a0e:b107:16b0::/44", "58336"}, + {"2a11:6c0:caff::/29", "211083"}, + {"2c0f:f000:500::/38", "36891"}, + {"2801:19:e800::/48", "267777"}, + {"2001:678:bc0::/48", "41064"}, + {"2001:44b8:6067::/48", "4739"}, + {"2620:0:2e50::/44", "15088"}, + {"2620:128:1008::/48", "53620"}, + {"2800:160:12dd::/42", "14259"}, + {"2a0e:b107:17fe::/47", "142553"}, + {"2001:559:8123::/48", "33287"}, + {"2600:1417:6801::/35", "20940"}, + {"2620:0:870::/48", "3856"}, + {"2a05:1cc0::/29", "201601"}, + {"2001:67c:460::/48", "15542"}, + {"2605:2340::/32", "393898"}, + {"2804:2e0c:2001::/32", "263019"}, + {"2804:67ac:8::/43", "269643"}, + {"2806:20d:505a::/42", "32098"}, + {"2001:559:c26d::/46", "7922"}, + {"2409:8002:900::/37", "9808"}, + {"240a:a7af::/32", "144617"}, + {"2600:370f:6068::/40", "32261"}, + {"2606:2800:747::/48", "15133"}, + {"2804:13b0:6c00::/43", "263546"}, + {"2a00:fd40:3::/48", "201924"}, + {"2001:559:1c3::/48", "33659"}, + {"2001:4546:1003::/48", "20940"}, + {"2603:c010:a000::/36", "31898"}, + {"2804:49c:31::/48", "7162"}, + {"2001:3a0:f006::/48", "38644"}, + {"2001:5f8:7f0e::/32", "5056"}, + {"2409:8a7d::/30", "9808"}, + {"2a00:1188:d::/46", "8455"}, + {"2a02:e28::/32", "41696"}, + {"2a02:26f7:ba40::/48", "36183"}, + {"2408:840c:9e00::/40", "17621"}, + {"2001:df7:6300::/48", "132772"}, + {"240e:983:1e02::/48", "134763"}, + {"2804:1e3c::/32", "264416"}, + {"2605:7040::/48", "46176"}, + {"2804:8054:1000::/40", "271744"}, + {"2a0c:b641:92::/48", "210103"}, + {"2408:8957:b900::/40", "17816"}, + {"2605:a401:8df7::/38", "33363"}, + {"2804:51dc::/32", "268481"}, + {"2001:df7:d200::/48", "136179"}, + {"2400:9380:92a0::/47", "4809"}, + {"2404:cf00::/36", "38511"}, + {"240a:a99b::/32", "145109"}, + {"2a01:6420::/29", "62193"}, + {"2001:559:516::/48", "33489"}, + {"2001:57a:aa02::/44", "22773"}, + {"2001:fd8:b2f0::/44", "4775"}, + {"2404:59c0::/34", "58507"}, + {"2408:8459:2010::/42", "17623"}, + {"2801:1c:a800::/48", "19429"}, + {"2804:7568::/32", "271044"}, + {"2a0e:6b80::/29", "202709"}, + {"2a0f:7b40::/29", "21227"}, + {"2001:559:3f2::/47", "7015"}, + {"2001:579:e138::/40", "22773"}, + {"2409:805f:900::/35", "9808"}, + {"240e:3bc:f700::/36", "4134"}, + {"2600:1fa0:20c0::/44", "8987"}, + {"2806:2f0:45e3::/38", "17072"}, + {"2408:8459:cc50::/39", "17816"}, + {"240e:267:2400::/36", "4134"}, + {"2a02:28::/47", "8359"}, + {"2001:559:c4e4::/47", "33491"}, + {"2a05:7c0::/32", "34156"}, + {"240a:a451::/32", "143755"}, + {"2804:399c:e006::/35", "266039"}, + {"2a02:46e0:facf::/37", "60049"}, + {"2001:559:c33d::/48", "7016"}, + {"2001:590:1007::/34", "3257"}, + {"2402:1840::/32", "45355"}, + {"240e:44d:2b00::/42", "140345"}, + {"2600:1003:b4d0::/44", "6167"}, + {"2600:6c38:a1d::/42", "20115"}, + {"2804:7abc::/32", "271389"}, + {"2a00:e760::/32", "8368"}, + {"2001:250:3405::/44", "138393"}, + {"2404:3d00:4142::/47", "3573"}, + {"2a02:26f7:ce85::/46", "20940"}, + {"2a04:f180::/29", "42695"}, + {"2a0e:3780:8150::/48", "206059"}, + {"2a0f:5701:3520::/48", "205593"}, + {"2606:2680:b000::/48", "7138"}, + {"2a12:da00::/29", "1239"}, + {"2001:4408:7300::/37", "4758"}, + {"2405:201:e800::/35", "55836"}, + {"2408:840c:8600::/40", "17621"}, + {"240e:964:2800::/38", "133776"}, + {"2606:2800:60f7::/44", "15133"}, + {"2001:67c:1bf4::/48", "58010"}, + {"2001:c20:4891::/45", "9255"}, + {"2605:a7c0:151::/44", "16509"}, + {"2400:f8c0::/32", "135517"}, + {"2409:803c:800::/40", "24444"}, + {"2607:f7a8::/39", "21687"}, + {"2408:8459:c610::/42", "17623"}, + {"240a:ac29::/32", "145763"}, + {"240a:ad74::/32", "146094"}, + {"2602:ffd1::/48", "393336"}, + {"2001:4428::/32", "18119"}, + {"2405:5340::/32", "63781"}, + {"240a:a75d::/32", "144535"}, + {"2604:6600:6::/42", "40676"}, + {"2a02:26f0::/48", "20940"}, + {"2001:559:82cd::/48", "7725"}, + {"2804:3bb0::/32", "266165"}, + {"2806:2f0:33a3::/41", "17072"}, + {"2001:c20:48a3::/48", "3758"}, + {"2001:559:557::/48", "33491"}, + {"2001:559:c174::/48", "21508"}, + {"2405:f280:2::/43", "131464"}, + {"240a:ac18::/32", "145746"}, + {"2804:6070::/32", "269167"}, + {"2a07:4140::/29", "50084"}, + {"2001:559:bc::/48", "33652"}, + {"2804:8444::/32", "272250"}, + {"240e:3b8:2800::/38", "4134"}, + {"2606:ed00:7::/32", "47869"}, + {"2804:1ec::/32", "53127"}, + {"2001:559:8310::/48", "7016"}, + {"2001:fd0:2100::/38", "10029"}, + {"2001:1388:3686::/36", "6147"}, + {"240e:d0::/33", "140329"}, + {"2806:2f0:1083::/43", "17072"}, + {"2a0c:e640:9::/42", "211876"}, + {"2001:559:c16a::/48", "22909"}, + {"2804:45c8:2::/32", "266949"}, + {"2a0c:9a40:1097::/48", "34927"}, + {"2001:1a11:6f::/43", "42298"}, + {"2a02:b48:4100::/34", "3491"}, + {"2a0e:aa00:311::/48", "41378"}, + {"2a0f:1c0::/29", "60262"}, + {"2804:2114::/32", "264531"}, + {"2a06:b500:2010::/44", "211768"}, + {"2001:559:30d::/48", "33657"}, + {"2a06:a006:2000::/32", "61138"}, + {"2001:fd8:303e::/47", "132199"}, + {"240a:af35::/32", "146543"}, + {"2603:c010:8000::/36", "31898"}, + {"2804:3178::/32", "265017"}, + {"2a0c:9a40:8a00::/48", "213234"}, + {"2001:559:83ce::/48", "33659"}, + {"240a:a99d::/32", "145111"}, + {"240a:a9ee::/32", "145192"}, + {"2800:110:1019::/45", "4270"}, + {"2001:500:13::/48", "393225"}, + {"2604:2d80:8000::/36", "30036"}, + {"2804:14c:65c5::/46", "28573"}, + {"2804:6014:8000::/33", "269144"}, + {"2a02:2e0:cd4f::/29", "12306"}, + {"2a02:26f7:6::/48", "36183"}, + {"2804:1010::/34", "263617"}, + {"2a03:5380::/32", "34612"}, + {"2001:67c:29bc::/48", "207439"}, + {"2600:40ff:ff92::/41", "701"}, + {"2804:ce8::/32", "52574"}, + {"2a02:26f7:f585::/46", "20940"}, + {"2a06:9680:44::/32", "31293"}, + {"2001:67c:518::/48", "206138"}, + {"2401:b8c0:d::/48", "141731"}, + {"2405:6e00:f850::/48", "133612"}, + {"2620:11a:e00e::/48", "22300"}, + {"2804:30f8:80b::/38", "264984"}, + {"2a01:53c0:ffcf::/43", "54994"}, + {"2401:d800:2a70::/40", "7552"}, + {"2402:800:57c5::/43", "7552"}, + {"2405:9800:50::/44", "131445"}, + {"240a:a1a8::/32", "143074"}, + {"2800:160:1c82::/43", "14259"}, + {"2a02:e980:30::/40", "19551"}, + {"2600:1417:a801::/35", "20940"}, + {"2a0a:af80::/29", "24867"}, + {"2402:800:92a9::/43", "7552"}, + {"2404:1c40:4d::/48", "24432"}, + {"2409:8a28:4600::/32", "56041"}, + {"2800:160:1bc9::/43", "14259"}, + {"2804:18e0::/32", "262698"}, + {"2806:102e:15::/44", "8151"}, + {"2001:559:c329::/48", "33659"}, + {"2408:840d:5d00::/42", "17621"}, + {"240e:1e:4000::/36", "140313"}, + {"2001:559:437::/48", "33287"}, + {"2401:d800:f6a0::/41", "7552"}, + {"2408:8256:32a0::/39", "17816"}, + {"2607:1280:11d0::/44", "394972"}, + {"2804:998:2::/43", "28589"}, + {"2a0d:f302::/32", "40994"}, + {"2400:cb00:a9a0::/46", "13335"}, + {"2406:3400:5d::/42", "10143"}, + {"2409:896a:3600::/39", "9808"}, + {"2a05:e840::/29", "34622"}, + {"2a0b:5d40::/29", "6761"}, + {"2c0f:f670::/32", "37532"}, + {"2600:6c38:616::/44", "20115"}, + {"2804:4fac::/32", "268342"}, + {"2806:2f0:4301::/42", "17072"}, + {"2001:4878:2158::/48", "12222"}, + {"2001:4878:c270::/47", "34164"}, + {"240e:3ba:2800::/38", "4134"}, + {"2804:4024:fff0::/44", "265937"}, + {"2001:250:702e::/48", "24370"}, + {"2401:c900:2700::/36", "36351"}, + {"2402:9900:b11::/48", "27435"}, + {"2409:8c30::/41", "9808"}, + {"2602:fcf6:ff9::/48", "212577"}, + {"2620:128:1000::/48", "53620"}, + {"2800:68:15::/48", "52343"}, + {"2804:514c::/32", "268444"}, + {"2001:dce:9501::/33", "23869"}, + {"2001:fd8:400::/38", "132199"}, + {"240a:a4c4::/32", "143870"}, + {"2600:1406:4601::/39", "20940"}, + {"2600:6c38:e33::/44", "20115"}, + {"2602:ffe4::/46", "21859"}, + {"2605:2800::/40", "6922"}, + {"2a01:c8c0::/28", "25454"}, + {"2600:1415:3001::/37", "20940"}, + {"2a00:1298::/32", "5578"}, + {"2603:c002:e10::/35", "31898"}, + {"2606:4640::/32", "399521"}, + {"2804:4488:5010::/44", "262480"}, + {"2a02:26f7:a4::/48", "36183"}, + {"2001:400:8815::/44", "293"}, + {"2001:550:4603::/39", "174"}, + {"2001:559:5f9::/48", "33491"}, + {"2001:b200::/37", "9505"}, + {"2408:8459:5850::/38", "17816"}, + {"2600:6c3a:11::/44", "20115"}, + {"2602:803:1::/48", "5769"}, + {"2800:bf0:14c::/47", "52257"}, + {"2804:73e0::/32", "270943"}, + {"2a0e:a880:1000::/36", "209043"}, + {"2607:f3a0:a000::/48", "399808"}, + {"2a00:1358:f100::/30", "6866"}, + {"2001:579:c5c0::/38", "22773"}, + {"2001:44b8:403e::/47", "4739"}, + {"2400:5a20:a::/45", "139006"}, + {"2401:c1c0::/32", "136966"}, + {"240e:ff:c004::/48", "134772"}, + {"2605:ed00:4c64::/43", "11427"}, + {"2804:161c:f00::/45", "263268"}, + {"2a0f:4700::/29", "208235"}, + {"2001:559:191::/48", "33659"}, + {"2409:8751:900::/38", "56047"}, + {"2600:140b:801::/38", "20940"}, + {"2605:e700:3000::/32", "6913"}, + {"2a0a:2784::/32", "206774"}, + {"2a0a:dc80::/29", "206597"}, + {"2607:2780::/48", "11878"}, + {"2a00:1580::/46", "39010"}, + {"2a00:ad87:4600::/48", "9890"}, + {"2a02:26f7:f5cc::/48", "36183"}, + {"2a02:6f20::/32", "15598"}, + {"2407:a800:3e11:111b::/48", "3949"}, + {"2600:c05:3011::/32", "11855"}, + {"2620:104:2011::/46", "40185"}, + {"2804:1670::/32", "263286"}, + {"2a00:fa40::/35", "45031"}, + {"2a03:6440:1001::/46", "199055"}, + {"2402:9d80:900::/47", "131429"}, + {"2804:7040::/32", "270715"}, + {"2a02:6900:8204::/48", "206209"}, + {"2001:678:d28::/48", "209314"}, + {"2001:7b8::/37", "12859"}, + {"2401:d800:ab0::/41", "7552"}, + {"2408:8456:2440::/39", "17816"}, + {"2600:1419:4601::/36", "20940"}, + {"2001:2090::/31", "3301"}, + {"240e:978:900::/40", "137697"}, + {"2610:85:3000::/30", "6079"}, + {"2804:748c::/32", "270988"}, + {"2806:230:6026::/48", "265594"}, + {"240a:aced::/32", "145959"}, + {"2804:122c::/32", "263461"}, + {"2a05:a100::/29", "200899"}, + {"2404:b0:2002::/33", "4750"}, + {"2603:4:1400::/48", "44273"}, + {"2620:9b:c000::/47", "54413"}, + {"2620:109:5000::/46", "46435"}, + {"2a02:1620:8005::/33", "1290"}, + {"2a07:dc00:1810::/42", "29997"}, + {"2408:8956:8000::/40", "17622"}, + {"240a:acbd::/32", "145911"}, + {"2605:5c0:c040::/45", "28885"}, + {"2804:3030::/32", "264935"}, + {"2a04:4e42:3b::/45", "54113"}, + {"2a10:8b40::/32", "42369"}, + {"2806:2f0:81c3::/43", "17072"}, + {"2a0b:7340::/29", "202895"}, + {"2c0f:ef18:4000::/32", "328266"}, + {"2001:559:8574::/47", "7015"}, + {"2400:8c80::/32", "132158"}, + {"2a02:2070:fffe::/48", "197498"}, + {"2a0e:e704:50::/44", "47837"}, + {"2001:250:600f::/42", "24364"}, + {"2400:4be0::/48", "141898"}, + {"2404:e801:101b::/45", "55430"}, + {"2409:8050:3002::/40", "56047"}, + {"2409:8420::/27", "9808"}, + {"2406:c800:a1cb::/33", "38016"}, + {"2408:8459:3e30::/41", "17622"}, + {"2607:f820::/34", "11051"}, + {"2800:490:8000::/37", "27951"}, + {"2001:250:3420::/46", "138438"}, + {"2001:dce:d455::/34", "23869"}, + {"2409:800b:2b06::/40", "9808"}, + {"2806:2f0:9e23::/41", "17072"}, + {"2a02:26f7:e504::/48", "36183"}, + {"2a0a:5c40::/29", "205976"}, + {"2001:579:404c::/42", "22773"}, + {"2401:d800:7560::/40", "7552"}, + {"2408:8459:bc50::/38", "17816"}, + {"2600:140f:401::/39", "20940"}, + {"2602:fe9c::/36", "33345"}, + {"2620:111:1004::/47", "18469"}, + {"2a02:a30:f091::/45", "8926"}, + {"240e:3bd:7800::/39", "4134"}, + {"2604:b180:510::/44", "14976"}, + {"2607:f358::/46", "18779"}, + {"2804:2448::/32", "264212"}, + {"2001:1820::/43", "12956"}, + {"240a:a79d::/32", "144599"}, + {"240e:5e:10a0::/44", "140311"}, + {"2605:b100:200::/40", "577"}, + {"2804:6d28:8000::/48", "270516"}, + {"2a11:1040::/29", "60561"}, + {"2001:559:c308::/48", "33287"}, + {"2001:13d2:280f::/43", "7303"}, + {"2001:4878:8027::/48", "12222"}, + {"2806:250:20::/48", "28512"}, + {"2a02:26f7:1d::/48", "20940"}, + {"2a02:26f7:bac8::/48", "36183"}, + {"2a06:e881:6500::/44", "208958"}, + {"2001:559:8419::/48", "33657"}, + {"2001:579:f15c::/40", "22773"}, + {"2404:18c:2100::/32", "6619"}, + {"240e:3b5::/35", "134773"}, + {"2a02:26f7:e3c0::/48", "36183"}, + {"2a06:9080::/32", "203271"}, + {"2a0e:8f02:f003::/48", "213033"}, + {"2401:d800:96c0::/42", "7552"}, + {"2402:6940::/38", "7645"}, + {"2404:2ac0::/32", "139699"}, + {"240a:aa60::/32", "145306"}, + {"2803:d700:2100::/35", "61461"}, + {"2804:1f52::/32", "266474"}, + {"2a01:7f0::/32", "34685"}, + {"2001:da8::/45", "23910"}, + {"2402:800:591d::/42", "7552"}, + {"2602:fe90:809::/48", "35913"}, + {"2602:ffe4:4::/37", "21859"}, + {"2804:51a4:6100::/32", "268467"}, + {"2001:3c8:c306::/36", "4621"}, + {"2001:678:a74::/48", "197838"}, + {"2409:8030:1009::/45", "9808"}, + {"2600:4041:1000::/24", "701"}, + {"2602:fdaf::/36", "396176"}, + {"2803:2ac0::/32", "52300"}, + {"2001:559:c1ed::/46", "33287"}, + {"2001:44c8:4090::/41", "45430"}, + {"2620:132:7040::/40", "19537"}, + {"2001:67c:6e8::/48", "201641"}, + {"2001:1388:7c2::/36", "6147"}, + {"2001:4500::/35", "18183"}, + {"2400:d740::/32", "136106"}, + {"2409:4051:3000::/33", "55836"}, + {"2804:5550:7692::/32", "263067"}, + {"2001:1850::/32", "32181"}, + {"2804:3fbc::/32", "265911"}, + {"2a00:126f::/32", "57472"}, + {"2a00:18d0::/32", "47887"}, + {"2408:826a::/32", "4837"}, + {"2804:1b2:f000::/41", "18881"}, + {"2c0f:eeb8::/32", "328303"}, + {"2001:559:429::/48", "22909"}, + {"2800:bf0:8279::/48", "27947"}, + {"2806:250:200::/46", "28555"}, + {"2a05:d050:90c0::/44", "16509"}, + {"2a0c:e304:1::/48", "208529"}, + {"2001:559:c103::/48", "7922"}, + {"2001:778::/32", "2847"}, + {"2405:6e00:2480::/45", "18291"}, + {"2a07:c882::/32", "207249"}, + {"2a0b:4f40::/48", "197473"}, + {"2001:250:83a::/48", "23910"}, + {"2a01:2c0:23dc::/32", "8282"}, + {"2a02:158::/37", "44946"}, + {"2a02:26f7:e6c0::/48", "36183"}, + {"2c0f:eba0::/32", "328596"}, + {"2001:559:2a7::/44", "7015"}, + {"2400:9380:83c0::/44", "136167"}, + {"2404:8000:1031::/40", "17451"}, + {"2408:8459:9430::/41", "17622"}, + {"2620:11f:f000::/40", "2381"}, + {"2606:fa00::/32", "239"}, + {"2001:559:378::/48", "33287"}, + {"2401:d800:f072::/40", "7552"}, + {"2600:6c40::/32", "20115"}, + {"2620:12f:90ff::/48", "6200"}, + {"2a10:ff00::/31", "212242"}, + {"2001:df5:1400::/48", "133255"}, + {"2001:559:c38a::/48", "7015"}, + {"2001:67c:3d4::/48", "207143"}, + {"2001:1388:8a80::/46", "264684"}, + {"2600:1419:6c00::/48", "35994"}, + {"2a02:26f7:bc48::/48", "36183"}, + {"2a09:6200::/29", "38946"}, + {"2001:67c:2de8::/48", "50476"}, + {"2a03:4bc0:1000::/47", "43893"}, + {"2a05:5f40::/31", "201366"}, + {"2001:49f0:d034::/48", "174"}, + {"2404:0:5000::/46", "24154"}, + {"2409:8904:3ea0::/39", "24547"}, + {"2602:107:2910::/48", "20115"}, + {"2801:196:2::/48", "19429"}, + {"2a00:e880::/32", "15557"}, + {"2405:1c0:6a11::/46", "55303"}, + {"240a:a475::/32", "143791"}, + {"2804:2d44::/32", "265270"}, + {"240e:44d:1f80::/41", "4134"}, + {"2600:1007:a010::/40", "22394"}, + {"2806:2f0:3103::/42", "17072"}, + {"2a00:bb40::/32", "3257"}, + {"2800:160:16a8::/46", "14259"}, + {"2804:6158::/32", "269229"}, + {"2a03:7c40::/32", "48173"}, + {"2a0d:ac00:6::/47", "205202"}, + {"2001:678:cc4::/48", "42086"}, + {"2408:840d:9c00::/42", "17621"}, + {"240a:abe2::/32", "145692"}, + {"2600:100e:bf1e::/33", "6167"}, + {"2600:6c38:e3::/45", "20115"}, + {"2a01:5041:600e::/48", "202196"}, + {"2a0b:a240::/29", "205535"}, + {"2c0f:3800::/32", "37616"}, + {"2402:ff00::/32", "45637"}, + {"240a:a6e3::/32", "144413"}, + {"2806:230:2053::/48", "11888"}, + {"2407:d040::/32", "58411"}, + {"2408:8459:7430::/41", "17622"}, + {"240e:878:600::/42", "137689"}, + {"2602:800:cc00::/38", "397695"}, + {"2800:160:1f3c::/41", "14259"}, + {"2a02:26f7:be81::/46", "20940"}, + {"2408:840d:6800::/42", "17621"}, + {"2600:6000:f571::/40", "12271"}, + {"2605:e700::/34", "6913"}, + {"2804:5284:e000::/35", "268523"}, + {"2a00:dd00:3::/45", "56484"}, + {"2600:1405:1001::/36", "20940"}, + {"2600:140f:a800::/48", "9498"}, + {"2800:4b0:4419::/45", "12252"}, + {"2804:2e4::/32", "53234"}, + {"2a02:2620::/32", "29124"}, + {"2a02:26f7:f6f4::/48", "36183"}, + {"2a10:7300::/29", "399975"}, + {"2001:8b0:1629::/33", "20712"}, + {"2403:6dc0::/40", "134526"}, + {"2406:840:eb0f::/48", "142553"}, + {"2603:ff20::/27", "397165"}, + {"2804:4c14:8b01::/35", "267348"}, + {"2001:250:c11::/44", "138374"}, + {"2605:9e00::/32", "15082"}, + {"2605:b740::/40", "2773"}, + {"2620:11b:3002::/48", "36351"}, + {"2001:ee0:d340::/37", "45899"}, + {"2600:1415:b::/43", "20940"}, + {"2a02:26f7:c3d1::/46", "20940"}, + {"2a0a:7300:1000::/34", "56911"}, + {"2001:1248:5a2b::/45", "11172"}, + {"2001:4868:224::/48", "7046"}, + {"2400:6280:10b::/48", "132280"}, + {"2405:1c0:6531::/45", "55303"}, + {"2408:8459:5080::/42", "136959"}, + {"240a:a959::/32", "145043"}, + {"2607:f740:70::/48", "36236"}, + {"2804:6748::/32", "269618"}, + {"2001:250:5800::/46", "24363"}, + {"240a:a957::/32", "145041"}, + {"2607:f5a8::/33", "27589"}, + {"2a02:4840:101::/48", "203557"}, + {"2001:678:690::/48", "49677"}, + {"2408:8957:2500::/40", "17816"}, + {"240a:a9bd::/32", "145143"}, + {"240a:af0f::/32", "146505"}, + {"2600:140f:1200::/48", "9498"}, + {"2607:f4e8:111::/37", "22822"}, + {"2804:4368:500::/35", "267568"}, + {"2404:c480::/32", "135328"}, + {"2405:84c0:8d00::/40", "9886"}, + {"2804:691c::/32", "270249"}, + {"2a0f:12c0::/29", "60262"}, + {"2a11:8900::/29", "204790"}, + {"240a:a0d9::/32", "142867"}, + {"240a:a91d::/32", "144983"}, + {"2001:550:a13::/39", "174"}, + {"2001:5000::/36", "1273"}, + {"2605:72c0:5::/48", "40401"}, + {"2a02:26f7:d28c::/48", "36183"}, + {"2001:253:127::/48", "142093"}, + {"2801:13c::/42", "18747"}, + {"2001:559:80a9::/48", "33651"}, + {"2001:67c:2d2c::/48", "206321"}, + {"2402:47c0::/39", "137280"}, + {"2620:0:1a30::/48", "10546"}, + {"2a02:26f7:d1c0::/48", "36183"}, + {"2001:67c:13f8::/48", "39057"}, + {"2a02:1368::/32", "51873"}, + {"2001:678:2b4::/48", "48882"}, + {"2001:1a68:35::/41", "15694"}, + {"2402:3a80:1436::/41", "38266"}, + {"240a:ab66::/32", "145568"}, + {"2602:fcba::/36", "399332"}, + {"2605:a900:1002::/45", "46887"}, + {"2606:a600:8::/48", "33297"}, + {"2804:6eb8::/32", "270615"}, + {"2806:2a0:800::/40", "28548"}, + {"2a02:5400::/48", "33353"}, + {"2a0e:40c0:1::/48", "15626"}, + {"2a0e:b107:bd0::/48", "140936"}, + {"2a01:5042:1::/48", "202196"}, + {"2001:67c:2390::/48", "21155"}, + {"2405:9800:c92d::/48", "138915"}, + {"240e:438:4a20::/43", "140647"}, + {"2a0b:6b83::/35", "202562"}, + {"2001:1248:9500::/41", "11172"}, + {"2405:1c0:6581::/46", "55303"}, + {"2a01:488:bb18::/48", "34440"}, + {"2001:559:7ea::/48", "33490"}, + {"2001:67c:1440::/48", "44597"}, + {"2400:a980:7500::/36", "133111"}, + {"2605:7840:2000::/36", "32482"}, + {"2a02:26f7:ef89::/42", "20940"}, + {"2a04:8484::/30", "21413"}, + {"2a0e:b80::/29", "208951"}, + {"2a10:8440::/31", "50455"}, + {"2001:9d0::/32", "8387"}, + {"240e:84::/31", "4134"}, + {"2607:f8a8::/32", "40913"}, + {"2800:68:16::/48", "27947"}, + {"2001:559:c47a::/48", "33489"}, + {"2001:67c:189c::/48", "1257"}, + {"240a:ad92::/32", "146124"}, + {"2600:1402:2001::/35", "20940"}, + {"2600:6c38:a35::/44", "20115"}, + {"2804:4618:3200::/39", "266968"}, + {"2001:16b0::/32", "12741"}, + {"2401:d800:9580::/42", "7552"}, + {"2402:dc00::/32", "45682"}, + {"2409:804d:3100::/36", "9808"}, + {"2409:8a55:f700::/30", "56040"}, + {"240a:ac3d::/32", "145783"}, + {"2607:9480:f0::/44", "14338"}, + {"2804:73f0::/32", "270947"}, + {"2402:800:93a9::/43", "7552"}, + {"2606:1880::/35", "32931"}, + {"2a00:1ed0::/32", "43541"}, + {"2a09:9900::/32", "199046"}, + {"2404:8000:a0::/53", "17451"}, + {"2804:175c:8420::/33", "263140"}, + {"2001:67c:230::/48", "49788"}, + {"2001:15f8:1000::/40", "15776"}, + {"2400:c700:88::/39", "55644"}, + {"2402:800:3e40::/43", "7552"}, + {"2607:ff40::/32", "7871"}, + {"2804:2200::/32", "264585"}, + {"2806:230:2043::/48", "11888"}, + {"2a00:fb8:8000::/29", "8881"}, + {"2a01:5041:efd::/46", "202196"}, + {"2a0e:b107:c10::/48", "137256"}, + {"2400:5000::/32", "38826"}, + {"2a00:79e1:800::/45", "36384"}, + {"2a02:2e02:ec0::/39", "12479"}, + {"2a02:c500::/31", "199246"}, + {"2a06:bbc2:1::/48", "212044"}, + {"2a06:f400::/29", "203387"}, + {"2a0c:b641:102::/44", "213154"}, + {"2a11:d0c0::/29", "49655"}, + {"2001:df2:2280::/48", "135851"}, + {"2403:3400::/32", "7604"}, + {"2600:1fa0:e020::/44", "16509"}, + {"2600:9000:10d6::/44", "16509"}, + {"2a00:ef0::/32", "6834"}, + {"2a00:b180::/32", "15557"}, + {"2a03:ca00::/32", "25592"}, + {"2a0d:9a81::/40", "49959"}, + {"2a12:73c0::/29", "400522"}, + {"240e:3bc:dc00::/34", "4134"}, + {"2600:1003:f440::/44", "6167"}, + {"2600:1417:55::/46", "9498"}, + {"2804:66dc::/32", "269587"}, + {"240e:940:ef00::/30", "4134"}, + {"2800:bf0:8277::/48", "27947"}, + {"2a02:970:1193::/38", "44002"}, + {"2a04:b540::/36", "61424"}, + {"2600:1406:6801::/37", "20940"}, + {"2620:10f:3000::/40", "6510"}, + {"2804:99c::/32", "262519"}, + {"2806:20d:1002::/44", "32098"}, + {"2a02:2698:2c::/38", "12768"}, + {"2001:2b8:bc::/48", "1237"}, + {"2001:448a:5130::/41", "7713"}, + {"2402:800:94b7::/41", "7552"}, + {"240a:a2dc::/32", "143382"}, + {"240a:a733::/32", "144493"}, + {"2800:860:face::/48", "20299"}, + {"2a02:26f7:f4c1::/46", "20940"}, + {"2a04:9140:3104::/48", "201958"}, + {"2a0c:1a00::/32", "205389"}, + {"2001:1248:883a::/47", "11172"}, + {"2001:18e8:810::/37", "19782"}, + {"2806:20d:5a05::/46", "32098"}, + {"2a01:240:ab02::/33", "30781"}, + {"2a03:a300:3000::/48", "35104"}, + {"240a:ac05::/32", "145727"}, + {"2001:400:a000:e::/59", "293"}, + {"2a02:26f7:a0::/48", "36183"}, + {"2a03:42e0:1::/32", "59753"}, + {"2a09:60c0::/29", "207668"}, + {"2001:559:85d1::/46", "33287"}, + {"2001:4de0:6200::/39", "33438"}, + {"2409:896a:7e00::/39", "9808"}, + {"240e:1a:130::/41", "23650"}, + {"2600:1417:77::/48", "38266"}, + {"2603:c001:650::/35", "31898"}, + {"2610:b0:4107::/48", "21433"}, + {"2a00:e4c0::/32", "42908"}, + {"2001:559:854c::/47", "33652"}, + {"2401:d800:21a0::/41", "7552"}, + {"2401:d800:b090::/42", "7552"}, + {"240a:a026::/32", "142688"}, + {"2001:df3:2980::/48", "131713"}, + {"2409:8c20:4a23::/37", "56046"}, + {"2603:4:1700::/48", "44273"}, + {"2a00:4802:2b0::/44", "8717"}, + {"2409:8053:900::/37", "9808"}, + {"240e:f:c000::/37", "4134"}, + {"2602:ff98::/39", "63447"}, + {"2803:d820::/32", "265813"}, + {"2a0b:7c00::/32", "8437"}, + {"2001:559:733::/48", "33652"}, + {"2408:8409:5400::/40", "4808"}, + {"2409:8c85:411::/44", "9808"}, + {"2607:1280:1010::/44", "394972"}, + {"2801:80:580::/47", "52740"}, + {"2804:179c:3091::/32", "263159"}, + {"2a07:9d80::/29", "202716"}, + {"2a0e:73c0::/29", "51519"}, + {"2001:559:82a8::/48", "33657"}, + {"2404:f300:11::/48", "58463"}, + {"2801:131::/45", "272084"}, + {"2a0a:580:1100::/40", "15404"}, + {"2001:4998:69::/39", "10310"}, + {"2804:e6c:2000::/33", "262954"}, + {"2001:400:6441:61::/32", "293"}, + {"2001:559:373::/48", "7922"}, + {"2604:ca00:f029::/48", "36492"}, + {"2800:5f0:80d::/42", "22724"}, + {"2a00:6060:b000::/48", "199881"}, + {"2a07:3b80:2::/48", "62240"}, + {"2404:de00::/32", "55819"}, + {"2405:1480:2000::/48", "23724"}, + {"2408:843f:2600::/25", "4837"}, + {"240e:40:c::/48", "58519"}, + {"2600:1200::/24", "4152"}, + {"2a02:26f7:c308::/48", "36183"}, + {"2a09:1980::/29", "209810"}, + {"2a0a:ec02:201::/46", "42692"}, + {"2001:559:c181::/46", "7922"}, + {"2605:1980:402::/32", "13951"}, + {"2a09:1840::/32", "209568"}, + {"2001:559:419::/48", "7015"}, + {"240a:a16c::/32", "143014"}, + {"240e:3b5:d000::/36", "134772"}, + {"2a07:a40:b::/48", "48821"}, + {"2800:370:67::/43", "28006"}, + {"2001:3c8:2809::/38", "4621"}, + {"2402:3a80:1b30::/41", "38266"}, + {"2a0f:2dc0::/29", "60262"}, + {"2404:8000:d3::/42", "17451"}, + {"2605:7380:c000::/34", "25697"}, + {"2620:12d:5002::/44", "55128"}, + {"2a04:4e80:2::/47", "211400"}, + {"2001:559:758::/48", "33657"}, + {"2400:cb00:450::/45", "13335"}, + {"2a03:db80:2c15::/35", "680"}, + {"2001:67c:2d14::/48", "204088"}, + {"240a:a29c::/32", "143318"}, + {"240a:ab2c::/32", "145510"}, + {"2a02:26f7:b844::/48", "36183"}, + {"240a:a21f::/32", "143193"}, + {"240a:a74d::/32", "144519"}, + {"2800:68:38::/48", "61468"}, + {"2804:4488:3010::/44", "262480"}, + {"2804:4afc:f010::/36", "267276"}, + {"2402:ae80::/32", "38800"}, + {"240a:a706::/32", "144448"}, + {"2602:fea6::/36", "40676"}, + {"2804:3790::/32", "266421"}, + {"2a0d:5600:11::/44", "9009"}, + {"2408:840d:1100::/42", "17621"}, + {"2408:8459:5630::/41", "17622"}, + {"2804:c84:32::/32", "52720"}, + {"2a01:20e::/32", "41051"}, + {"2001:559:c1cf::/48", "7725"}, + {"2408:8956:d840::/40", "17622"}, + {"2404:1800::/32", "17705"}, + {"2620:13b:b000::/45", "138005"}, + {"2804:14d:3c00::/40", "28573"}, + {"2804:e60::/32", "61888"}, + {"240e:3b9::/35", "134773"}, + {"240e:438:6c20::/43", "140647"}, + {"2800:1e0:2200::/37", "7195"}, + {"2001:559:37f::/48", "33660"}, + {"2404:cc00:6::/34", "24441"}, + {"2409:8c85:410::/48", "24547"}, + {"2620:cb:8000::/48", "54058"}, + {"2804:7fc0::/32", "271707"}, + {"2a01:53c0:ff0a::/43", "54994"}, + {"2a0c:b641:5d2::/48", "212952"}, + {"2a0e:b107:fff::/48", "42394"}, + {"2a0f:18c0::/29", "60262"}, + {"2001:67c:214::/48", "25057"}, + {"2001:1260:c::/46", "28537"}, + {"2401:8e00:9100::/33", "9260"}, + {"2a02:26f7:d881::/46", "20940"}, + {"2401:dd40:1::/48", "24289"}, + {"2403:5000::/39", "9304"}, + {"2001:559:2c5::/48", "33287"}, + {"2408:8656:3aff::/48", "17623"}, + {"240a:a7e4::/32", "144670"}, + {"2607:fcd0:10a::/45", "8100"}, + {"2803:9800:90a2::/39", "11664"}, + {"2804:2674:d::/46", "264344"}, + {"2a02:e30:f007::/48", "199943"}, + {"2a0f:5707:abf0::/45", "212895"}, + {"240e:44d:3640::/42", "140353"}, + {"2804:4230::/32", "267484"}, + {"2804:7404::/32", "270953"}, + {"2607:f428:9380::/44", "10796"}, + {"2620:171:1a::/45", "42"}, + {"2a12:9d00::/29", "8888"}, + {"2001:559:c50a::/48", "33659"}, + {"2001:67c:2bdc::/48", "205700"}, + {"2001:da8:d00d::/42", "24359"}, + {"2400:8800:1e82::/48", "7262"}, + {"2804:1644:ff00::/40", "262903"}, + {"2a02:26f7:f84c::/48", "36183"}, + {"2001:559:82a9::/48", "33287"}, + {"2001:da8:7039::/36", "23910"}, + {"2600:100d:9e00::/44", "6167"}, + {"2804:7f48::/32", "271678"}, + {"2806:2f0:21c2::/48", "17072"}, + {"2a12:28c0::/29", "60741"}, + {"240a:a49e::/32", "143832"}, + {"240a:aec3::/32", "146429"}, + {"2600:6c29::/30", "20115"}, + {"2607:f7a8:606::/48", "397488"}, + {"2804:4e08::/34", "268235"}, + {"2804:6dac::/32", "270548"}, + {"2806:230:2024::/48", "265594"}, + {"2a04:8300::/29", "34410"}, + {"2001:418:1401:3::/64", "2639"}, + {"240a:a6b6::/32", "144368"}, + {"2803:9a40:8003::/33", "263824"}, + {"2804:249c::/32", "264233"}, + {"2a04:4e40:5200::/48", "54113"}, + {"2001:1a68:14::/48", "51373"}, + {"2402:8100:20d7::/44", "45271"}, + {"2602:fed2:7107::/48", "205096"}, + {"2804:2874::/32", "263962"}, + {"2a11:5706:b00b::/48", "212149"}, + {"2404:bf40:80c0::/47", "7545"}, + {"2600:370f:3088::/43", "32261"}, + {"2607:6980:3a70::/44", "32931"}, + {"2a06:e380:2::/32", "203507"}, + {"2001:559:352::/47", "33651"}, + {"240e:fe:2000::/33", "134774"}, + {"2605:dd40:8beb::/37", "398549"}, + {"2606:1a40:2018::/46", "398962"}, + {"2001:678:e04::/48", "212810"}, + {"2001:da8:2000::/44", "24357"}, + {"2409:896a:8000::/39", "9808"}, + {"2806:230:4010::/48", "265594"}, + {"2001:559:811b::/45", "7922"}, + {"2001:4d98:3ffa::/33", "3303"}, + {"2408:8957:7a00::/40", "17622"}, + {"2409:8002:800::/40", "38019"}, + {"240e:fc:7000::/32", "134772"}, + {"2620:96:4000::/48", "63126"}, + {"2803:ba00::/39", "52286"}, + {"2804:5070::/32", "268389"}, + {"2806:106e:a::/45", "8151"}, + {"240a:a69b::/32", "144341"}, + {"240e:183:8220::/46", "140656"}, + {"2600:1415:4c01::/35", "20940"}, + {"2804:73ec::/33", "270946"}, + {"2a0c:3d40::/32", "204315"}, + {"2001:559:80d6::/48", "33287"}, + {"2001:678:50::/48", "57382"}, + {"2001:67c:714::/48", "224"}, + {"2606:e300::/32", "13370"}, + {"2804:1d80:8000::/36", "264374"}, + {"2a00:e0c0::/32", "16174"}, + {"2600:141b:1401::/38", "20940"}, + {"2801:80:3920::/48", "270591"}, + {"2801:102::/48", "19429"}, + {"2804:5f14::/32", "269075"}, + {"2a0d:1f00::/29", "39122"}, + {"2405:b40:2::/42", "55674"}, + {"2804:54d0::/32", "268671"}, + {"2804:7378::/32", "270917"}, + {"2a06:3b80:21::/46", "206614"}, + {"2602:fed2:7184::/46", "53356"}, + {"2804:466c::/32", "262689"}, + {"2a02:26f7:b980::/48", "36183"}, + {"2a09:4e07:9000::/36", "208861"}, + {"2001:559:579::/48", "7725"}, + {"240c:ca48::/24", "23910"}, + {"2607:fdf0:5e5a::/42", "8008"}, + {"2a02:e980:212::/45", "19551"}, + {"2c0f:fbb8::/32", "37454"}, + {"2001:559:8757::/44", "7015"}, + {"240a:a742::/32", "144508"}, + {"2606:2d00::/36", "32478"}, + {"2804:1ac4::/46", "61884"}, + {"2600:100e:9110::/36", "6167"}, + {"2806:2f0:24c0::/48", "17072"}, + {"2a0c:4144:100::/48", "25091"}, + {"2402:9900:c11::/48", "27435"}, + {"2600:380:2900::/35", "20057"}, + {"2606:2800:6a38::/47", "15133"}, + {"2804:818::/32", "262345"}, + {"2a07:8504::/32", "1104"}, + {"2a09:c140:db::/48", "210079"}, + {"2600:9000:2314::/44", "16509"}, + {"2604:d600:151b::/42", "32098"}, + {"2804:1b68:700::/32", "61726"}, + {"2a02:2928::/32", "39288"}, + {"2c0f:fb08:ff00::/40", "12091"}, + {"2001:559:c450::/48", "7922"}, + {"2402:800:79d0::/42", "7552"}, + {"2402:800:b770::/40", "7552"}, + {"240a:a814::/32", "144718"}, + {"2600:6c3a:c11::/41", "20115"}, + {"2602:fc64:ca00::/48", "36829"}, + {"2804:2f60::/39", "264887"}, + {"2a0c:6d00:232::/48", "3218"}, + {"2a0e:8f01:107::/48", "38230"}, + {"2402:3700::/32", "38496"}, + {"2606:400::/32", "14051"}, + {"2800:6f0:5800::/40", "20207"}, + {"2a00:7ee0::/46", "16347"}, + {"2a00:9fe0::/29", "15600"}, + {"2a02:ff0:2c00::/40", "12735"}, + {"2409:804e:1900::/34", "9808"}, + {"2600:6000:f5d5::/48", "11351"}, + {"2607:7c80:58::/48", "11661"}, + {"2607:f398::/32", "11090"}, + {"2803:4e00::/32", "20002"}, + {"2804:3074::/32", "264952"}, + {"2a02:26f7:fb::/45", "20940"}, + {"2a03:7100::/29", "49567"}, + {"2001:678:ac::/48", "49251"}, + {"2001:67c:18f4::/48", "1257"}, + {"2408:8459:9450::/38", "17816"}, + {"2409:4052:3000::/31", "55836"}, + {"240e:44d:7580::/41", "4134"}, + {"2605:de40:2005::/35", "397553"}, + {"2a0e:ac80::/29", "35600"}, + {"2001:550:9c06::/38", "174"}, + {"2403:6a40:1000::/33", "135967"}, + {"240a:a6a4::/32", "144350"}, + {"240a:ac92::/32", "145868"}, + {"2606:2800:557::/44", "15133"}, + {"2804:1554::/32", "263384"}, + {"2001:559:c44d::/48", "33657"}, + {"240a:aee2::/32", "146460"}, + {"2a04:d380::/29", "41997"}, + {"2001:57a:ef02::/40", "22773"}, + {"2403:1ec0:1400::/48", "136958"}, + {"2605:b540::/32", "15353"}, + {"2804:34:ff08::/40", "28306"}, + {"2a00:1678:2470::/48", "49453"}, + {"2a07:8100::/29", "202865"}, + {"2404:bf40:e301::/48", "139084"}, + {"240d:c010:16::/48", "132203"}, + {"2605:9cc0:450::/48", "14618"}, + {"2804:26dc::/32", "263861"}, + {"2a02:26f7:ef11::/42", "20940"}, + {"2001:67c:3b4::/48", "52092"}, + {"2001:6d0:6d07::/48", "42385"}, + {"2602:fbda:600::/48", "7721"}, + {"2a01:6060::/32", "199990"}, + {"2a02:450:8000::/48", "34372"}, + {"2a0a:e5c0:27::/44", "207996"}, + {"2a0b:1306:3::/48", "29018"}, + {"2001:678:68::/48", "199670"}, + {"2001:da8:ad::/48", "24350"}, + {"2401:d800:5fe0::/43", "7552"}, + {"2803:65e0::/42", "270034"}, + {"2803:9800:98ce::/47", "11664"}, + {"2804:40:6000::/36", "28657"}, + {"2a03:5e60::/32", "6895"}, + {"2001:559:8092::/48", "33660"}, + {"2406:840:e11a::/48", "141712"}, + {"240e:a5:5000::/32", "4134"}, + {"2a0f:3640::/29", "60262"}, + {"2001:559:c4a3::/48", "7922"}, + {"2001:b08:20::/48", "198444"}, + {"2600:6c10:f095::/44", "20115"}, + {"2602:fe67::/36", "40646"}, + {"2a03:7380:1e00::/42", "13188"}, + {"2400:8b00:d80::/42", "45727"}, + {"2a01:d0:309::/43", "29632"}, + {"2a03:7380:2fc0::/35", "13188"}, + {"2408:8245::/35", "140726"}, + {"240a:a44d::/32", "143751"}, + {"2405:1500:61::/43", "58717"}, + {"2806:2f0:34c1::/46", "17072"}, + {"2a00:f88::/32", "15726"}, + {"2a02:4fc0::/33", "199081"}, + {"2a03:a6c0::/32", "201502"}, + {"240a:a091::/32", "142795"}, + {"2600:140f:5c00::/48", "9498"}, + {"2804:6b88::/32", "270406"}, + {"2a02:2698:4c28::/38", "42682"}, + {"2a09:24c0::/32", "209323"}, + {"2001:148f:fffe::/47", "20701"}, + {"2402:8100:27b0::/47", "45271"}, + {"2804:3b44::/32", "266139"}, + {"2a0f:5707:ab23::/48", "48646"}, + {"2a0f:df00::/48", "41281"}, + {"2400:c540:80::/48", "59238"}, + {"2a02:2f8::/32", "12335"}, + {"2a02:26f7:12::/48", "36183"}, + {"2a05:1084::/47", "59598"}, + {"2a0c:4300:70::/40", "43722"}, + {"2001:410:1000::/40", "271"}, + {"2409:8b1e::/31", "24400"}, + {"2804:34:2021::/45", "28306"}, + {"2a03:ac1::/32", "42953"}, + {"2a03:f000::/30", "25472"}, + {"2a09:80c0::/29", "209335"}, + {"2001:67c:a4::/48", "48908"}, + {"2408:8957:4300::/40", "17816"}, + {"2409:8904:52b0::/39", "24547"}, + {"2603:f530::/25", "397165"}, + {"2606:2800:133::/45", "15133"}, + {"2001:559:1db::/48", "7016"}, + {"2801:80:3e00::/48", "271213"}, + {"2804:1408::/33", "28635"}, + {"2806:230:202c::/48", "265594"}, + {"2a02:26f7:facc::/48", "36183"}, + {"2001:250:6000::/48", "24364"}, + {"2400:57a0::/32", "149487"}, + {"2402:800:979b::/42", "7552"}, + {"2606:ae00:2044::/48", "7287"}, + {"2803:9620::/34", "265865"}, + {"2804:535c::/32", "268579"}, + {"2a03:90c0:1a0::/41", "199524"}, + {"2a06:e881:480f::/48", "134666"}, + {"2a0c:4481:1::/46", "204720"}, + {"2a0f:6b40::/29", "60251"}, + {"2001:fb0:109f:8008::/64", "7470"}, + {"2402:800:9ce0::/39", "7552"}, + {"2402:800:b242::/42", "7552"}, + {"2607:ff28:3::/44", "62904"}, + {"2806:230:2032::/48", "265594"}, + {"2a04:4e40:7410::/44", "54113"}, + {"2407:b001:1100::/34", "24121"}, + {"2a02:88d:801f::/48", "47794"}, + {"2001:559:742::/48", "7015"}, + {"2001:559:c3f0::/48", "33651"}, + {"240a:a22e::/32", "143208"}, + {"2620:12c:b005::/48", "43251"}, + {"2620:160:e700::/44", "10837"}, + {"2804:270c::/32", "262732"}, + {"2620:c0:c000::/44", "393501"}, + {"2a02:26f0:a801::/39", "20940"}, + {"2600:380:f10f::/48", "64011"}, + {"2600:9000:211d::/41", "16509"}, + {"2806:2f0:70c1::/46", "17072"}, + {"2402:6940:1402::/32", "7645"}, + {"2a0c:2f07:4663::/48", "206924"}, + {"2a0c:e6c0::/29", "39259"}, + {"2001:df5:4000::/48", "132647"}, + {"2607:f4e8:c::/47", "22822"}, + {"2801:0:100::/48", "28039"}, + {"2001:550:2401::/46", "174"}, + {"2001:559:324::/48", "33491"}, + {"2408:8957:7700::/36", "17816"}, + {"240a:a0d4::/32", "142862"}, + {"2804:6c80::/32", "270472"}, + {"2a03:89c0::/32", "24978"}, + {"2404:e00:365::/48", "15695"}, + {"240a:a59e::/32", "144088"}, + {"2607:4f80::/32", "7029"}, + {"2804:6d24::/32", "270515"}, + {"2a00:7380:600::/32", "51906"}, + {"2a02:7a8::/32", "47917"}, + {"2a04:c680::/29", "201277"}, + {"2a10:1140::/29", "33438"}, + {"2602:febb:200::/36", "394989"}, + {"2a02:7040:ff00::/47", "203501"}, + {"2409:8a1a:1200::/33", "132525"}, + {"2401:4900:1c0e::/47", "24560"}, + {"2607:fcd0:100:bc01::/45", "8100"}, + {"2001:3c8:1402::/38", "4621"}, + {"2001:67c:25e0::/48", "44760"}, + {"2402:600:c1b2::/34", "38515"}, + {"2620:10a:80bb::/45", "40568"}, + {"2620:10a:80d4::/48", "27299"}, + {"2a02:26f7:f54d::/42", "20940"}, + {"2a10:1a40::/29", "206236"}, + {"2001:559:83fc::/48", "7015"}, + {"2402:1b80::/38", "63956"}, + {"2405:7f00:ae40::/40", "133414"}, + {"2604:1ec0::/36", "11260"}, + {"2607:7e80:6000::/35", "395354"}, + {"2620:130::/48", "13460"}, + {"2801:1d:8801::/48", "18747"}, + {"2a00:5800::/32", "198500"}, + {"2a00:b3a0::/36", "62023"}, + {"2a02:888:4044::/46", "48695"}, + {"2a0b:9fc0::/48", "48858"}, + {"2402:800:6148::/47", "7552"}, + {"2408:8256:318b::/48", "17623"}, + {"2409:8053:2c00::/47", "9808"}, + {"2806:230:3010::/48", "265594"}, + {"2001:559:84b5::/48", "7725"}, + {"2405:9800:c902::/48", "45458"}, + {"2607:f6f0:208::/48", "27330"}, + {"2803:6f40::/32", "265641"}, + {"2804:f20::/32", "52741"}, + {"2a07:a880:4603::/45", "3399"}, + {"2a09:bd80::/29", "208861"}, + {"2a0f:9bc0::/29", "212144"}, + {"2409:8904:d140::/42", "24547"}, + {"240a:a244::/32", "143230"}, + {"2804:3e90:4200::/46", "65891"}, + {"2a02:26f7:cac5::/46", "20940"}, + {"2a07:2d80::/29", "42929"}, + {"2001:1248:9922::/44", "11172"}, + {"2401:d800:2d60::/40", "7552"}, + {"2804:61f4::/32", "269267"}, + {"2a00:cc80::/32", "15557"}, + {"2c0e:2208::/30", "37457"}, + {"2406:840:fc00::/48", "140938"}, + {"2409:8070:302d::/40", "9808"}, + {"2804:1d1c:c3::/32", "53196"}, + {"2a00:cc0:ffff::/29", "13237"}, + {"2409:805c:3900::/33", "9808"}, + {"240a:ae7c::/32", "146358"}, + {"2606:ae00:bec1::/42", "7287"}, + {"2620:133::/40", "19692"}, + {"2a0c:8fc1:8000::/40", "142275"}, + {"2001:559:84c9::/46", "33287"}, + {"2610:a1:3028::/48", "12008"}, + {"2804:6a14:200::/32", "61601"}, + {"2402:ef0b:a000::/36", "24515"}, + {"2600:9000:235b::/42", "16509"}, + {"2801:80:70::/48", "28193"}, + {"2804:803c::/32", "271738"}, + {"2a0e:46c4:110::/48", "137490"}, + {"2001:678:6b0::/48", "33873"}, + {"2803:d760::/32", "269827"}, + {"2804:4334::/32", "267555"}, + {"2806:268:2302::/37", "13999"}, + {"2a02:408:7722::/48", "44112"}, + {"2400:cb00:346::/47", "13335"}, + {"2408:8456:cc40::/40", "17816"}, + {"2a02:26f0:106::/47", "34164"}, + {"2a07:3502:1130::/48", "33915"}, + {"2a0e:8f02:2184::/48", "210714"}, + {"2001:1538::/32", "16363"}, + {"2610:28::/33", "81"}, + {"2620:11c:4000::/40", "30698"}, + {"2a0b:89c1:89c3::/33", "3214"}, + {"2401:d800:2572::/40", "7552"}, + {"240e:965:c400::/39", "133775"}, + {"2800:3a0:192::/48", "28008"}, + {"2804:56c:2200::/32", "28210"}, + {"2401:be00::/48", "23724"}, + {"2409:831e::/31", "24400"}, + {"2409:8a52:d00::/38", "56047"}, + {"240a:a893::/32", "144845"}, + {"2804:1ebc::/32", "264446"}, + {"2804:24e8:c000::/34", "53171"}, + {"2804:3310::/32", "265114"}, + {"2804:3650::/32", "266341"}, + {"2a04:6d00::/29", "211892"}, + {"2408:840c:b600::/40", "17621"}, + {"240a:ac75::/32", "145839"}, + {"240a:acc1::/32", "145915"}, + {"2604:6600:2002::/44", "40676"}, + {"2604:7b80::/32", "32808"}, + {"2607:fc48:800::/48", "40009"}, + {"2001:1900:235f::/42", "3356"}, + {"2405:b40:21::/46", "55674"}, + {"240a:a5f4::/32", "144174"}, + {"2600:80d:14::/40", "6984"}, + {"2620:136:a008::/46", "36198"}, + {"2800:2a0:232::/34", "27947"}, + {"2806:2f0:30c3::/42", "17072"}, + {"2a01:488:bb0b::/48", "26496"}, + {"2001:3a0:f008::/36", "7521"}, + {"2001:418:c07::/35", "2914"}, + {"2602:ffcb::/36", "21757"}, + {"2610:a1:3004::/48", "12008"}, + {"2806:230:fff3::/48", "11888"}, + {"2a02:26f0:10f::/48", "20940"}, + {"2a02:26f7:2c::/48", "36183"}, + {"240e:bf:d000::/25", "4134"}, + {"2603:c0f8:2020::/39", "20054"}, + {"2a02:2e02:1460::/40", "12479"}, + {"2403:9800:7f05::/48", "4648"}, + {"2403:e900::/32", "45133"}, + {"2406:b400:d2::/45", "18209"}, + {"240e:3b4:4c00::/35", "136200"}, + {"2600:6c38:51::/42", "20115"}, + {"2605:8bc0:30::/48", "26695"}, + {"2803:1a00:5013::/44", "262186"}, + {"2a04:2d01::/48", "56647"}, + {"2a09:4c0:301::/46", "58057"}, + {"2001:fd8:f0c0::/42", "132199"}, + {"2001:4d8f::/32", "41637"}, + {"2403:b300::/32", "16509"}, + {"240a:a1e5::/32", "143135"}, + {"240a:ac4e::/32", "145800"}, + {"2605:e3c0::/32", "398479"}, + {"2620:83:2000::/48", "13699"}, + {"2804:3ac0:f7b0::/36", "266107"}, + {"2804:3b38::/32", "266136"}, + {"2a07:7bc0::/29", "202882"}, + {"240a:a866::/32", "144800"}, + {"2607:f208:df01::/48", "26496"}, + {"2a02:26f7:c849::/42", "20940"}, + {"2401:f480::/32", "58703"}, + {"2804:6740::/33", "269616"}, + {"2a01:9980:1::/46", "50837"}, + {"2a0e:9f40::/29", "208436"}, + {"2402:f00::/32", "23918"}, + {"240a:a340::/32", "143482"}, + {"240a:a5bc::/32", "144118"}, + {"240e:44d:2480::/41", "4134"}, + {"2606:2800:505b::/48", "14153"}, + {"2a02:888:8252::/47", "48695"}, + {"2c0f:fc89:7c::/40", "36992"}, + {"2607:fbc0::/32", "7029"}, + {"2a01:6780:7::/48", "8426"}, + {"2001:559:c119::/48", "20214"}, + {"2001:678:6e4::/46", "202329"}, + {"2001:67c:1318::/48", "206594"}, + {"2406:1fc0::/32", "140689"}, + {"240e:ff:c003::/48", "134774"}, + {"2804:2274::/32", "264101"}, + {"2a09:bac0:94::/48", "13335"}, + {"2001:559:55b::/48", "7922"}, + {"2001:fb0:109f:15::/62", "7470"}, + {"2602:80b:8011::/48", "26229"}, + {"2804:8e4::/32", "52874"}, + {"2804:4a54::/32", "267233"}, + {"2804:6c98::/32", "270479"}, + {"2a11:780::/29", "208861"}, + {"240a:a82a::/32", "144740"}, + {"2001:678:c0c::/48", "15823"}, + {"2001:ee0:c140::/38", "45899"}, + {"2a02:26f7:ba45::/46", "20940"}, + {"2a0b:fd00::/32", "57119"}, + {"2a0d:7100:a::/48", "34672"}, + {"2001:298::/32", "9600"}, + {"2001:df2:c280::/48", "139989"}, + {"2407:1e40:401::/39", "141732"}, + {"240a:a4e5::/32", "143903"}, + {"2804:7cf8::/39", "271530"}, + {"2001:468:2621::/44", "11537"}, + {"2401:d800:2fd0::/42", "7552"}, + {"240a:ab25::/32", "145503"}, + {"2a02:4780:13::/48", "47583"}, + {"2a06:1b00:101::/46", "8302"}, + {"2001:559:1d0::/48", "7015"}, + {"2001:1260:6::/48", "13591"}, + {"2001:4878:8062::/47", "12222"}, + {"2620:1ec:910::/47", "8068"}, + {"2800:120:7::/32", "27843"}, + {"2a02:26f7:d640::/48", "36183"}, + {"2400:e480::/44", "131588"}, + {"2a06:9900::/29", "12552"}, + {"2a10:2f01:2af::/48", "212995"}, + {"2a00:1a30::/32", "25369"}, + {"2a02:26f7:e044::/48", "36183"}, + {"2a10:2f01:310::/44", "39526"}, + {"2405:9800:c981::/35", "45430"}, + {"2a02:26f7:fb88::/48", "36183"}, + {"2a0f:ce00::/29", "208261"}, + {"2001:c38:9057::/42", "9931"}, + {"2402:800:f810::/42", "7552"}, + {"2402:e380:308::/48", "137256"}, + {"240a:a1e7::/32", "143137"}, + {"2605:7900:20::/47", "63442"}, + {"2806:2f0:6021::/46", "17072"}, + {"2001:559:8112::/45", "7922"}, + {"2405:6e00:2ee::/48", "18291"}, + {"2408:840c:a900::/40", "17621"}, + {"240a:a9a9::/32", "145123"}, + {"2804:2538:200::/33", "28183"}, + {"2806:2f0:2462::/48", "17072"}, + {"2001:559:463::/48", "20214"}, + {"2a04:ae00::/26", "1257"}, + {"2a11:f940::/29", "210118"}, + {"240e:3ba:c000::/37", "140315"}, + {"2a04:de40::/42", "20860"}, + {"2001:16e8:1115::/46", "25542"}, + {"2402:fb00:4000::/32", "3300"}, + {"2409:896a:4800::/39", "9808"}, + {"240a:6b::/32", "9605"}, + {"2604:9fc0::/32", "63270"}, + {"2804:5444::/32", "268638"}, + {"2a02:26f0:a301::/37", "20940"}, + {"2001:418:144d::/48", "275"}, + {"240a:a768::/32", "144546"}, + {"2600:1488:a081::/41", "20940"}, + {"2800:160:126f::/43", "14259"}, + {"2a01:664:1b00::/30", "48951"}, + {"2a02:26f7:de85::/46", "20940"}, + {"2001:1248:9822::/44", "11172"}, + {"2404:f4c0:f54e::/48", "140498"}, + {"2408:8756:4c00::/40", "136959"}, + {"2602:fe3f::/32", "21907"}, + {"2602:ff62:104::/47", "61317"}, + {"2a06:500::/29", "38990"}, + {"2409:8959:cb44::/43", "9808"}, + {"2801:80:e0::/48", "53215"}, + {"2803:9c0::/40", "207036"}, + {"2804:15cc::/32", "263411"}, + {"2001:678:668::/48", "39591"}, + {"2001:4c08:2001::/48", "10753"}, + {"2602:fe7e::/36", "32494"}, + {"2801:1ea::/44", "27951"}, + {"2a10:bcc0::/29", "211597"}, + {"2001:9c8::/29", "29518"}, + {"2600:6c3b:405::/42", "20115"}, + {"2804:14d:a04b::/40", "28573"}, + {"2804:5c20::/32", "268890"}, + {"2001:ee0:3020::/39", "45899"}, + {"2604:d600:c7d::/46", "32098"}, + {"2804:6ef0::/32", "270628"}, + {"2a01:c50e:1600::/36", "12479"}, + {"2401:fd80:ffff::/48", "139853"}, + {"2408:8456:1a40::/40", "17816"}, + {"2806:2f0:6261::/46", "17072"}, + {"2408:80f1:40::/44", "138421"}, + {"2804:145c:cc10::/39", "263327"}, + {"2806:32d::/32", "28431"}, + {"2a02:26f7:d945::/46", "20940"}, + {"2001:e60:a808::/40", "4766"}, + {"2401:d800:d930::/41", "7552"}, + {"2804:5808::/32", "268101"}, + {"2a03:2880:f202::/44", "32934"}, + {"2407:ed40::/32", "147079"}, + {"2408:8656:30fb::/48", "17816"}, + {"2409:8004:3013::/42", "24547"}, + {"240a:a01b::/32", "142677"}, + {"2620:66:a000::/48", "30323"}, + {"2804:59e8::/36", "268733"}, + {"2804:6ce4::/32", "270499"}, + {"2a01:190:15e8::/48", "29330"}, + {"2a02:2d8:1:780b::/32", "9002"}, + {"2001:470:56::/48", "7175"}, + {"2001:559:c2c0::/48", "33660"}, + {"2001:4888:a670::/33", "6167"}, + {"2804:880::/32", "28270"}, + {"2a0c:1700:4::/29", "205112"}, + {"2001:559:80f2::/48", "33659"}, + {"2408:80ea:75a0::/41", "17816"}, + {"2605:d580::/32", "46690"}, + {"2620:186:8::/46", "19690"}, + {"2804:5988::/32", "268708"}, + {"2a00:16f8:11::/32", "6461"}, + {"2a02:26f0:4500::/48", "34164"}, + {"2a02:26f0:8601::/39", "20940"}, + {"2a0d:2d42::/29", "62075"}, + {"2a11:b80::/29", "208861"}, + {"2001:67c:105c::/48", "58226"}, + {"2400:a980:a100::/29", "133111"}, + {"240a:ae2c::/32", "146278"}, + {"2605:3600:fffc::/46", "30452"}, + {"2a04:4e40:da10::/41", "54113"}, + {"2a09:2944::/31", "207996"}, + {"2001:df7:ea80::/48", "146972"}, + {"2405:9f40::/32", "139898"}, + {"240a:ae64::/32", "146334"}, + {"2620:17:a000::/48", "32334"}, + {"2804:2550::/32", "264273"}, + {"2a05:6080::/29", "44920"}, + {"2a0f:600::/48", "51044"}, + {"2001:49f0:d0e7::/43", "174"}, + {"2600:1406:6c01::/35", "20940"}, + {"2610:130:1d00::/34", "6122"}, + {"2804:69f0::/32", "270301"}, + {"2001:579:5a44::/43", "22773"}, + {"2001:678:f0::/48", "29695"}, + {"2400:cb00:410::/45", "13335"}, + {"2406:d840::/32", "141322"}, + {"240a:a1ec::/32", "143142"}, + {"240e:980:2a00::/40", "63835"}, + {"2800:160:1fcc::/43", "14259"}, + {"2a00:1eb8:c001::/48", "50065"}, + {"2a02:26f7:f90c::/48", "36183"}, + {"2a02:2e02:11c0::/38", "12479"}, + {"2a0f:a180::/29", "208083"}, + {"2606:1040::/35", "12243"}, + {"2a00:1728:31::/46", "34224"}, + {"2a00:1bf8::/32", "8487"}, + {"2a06:41c0:6::/44", "51559"}, + {"2001:559:8101::/48", "33287"}, + {"2602:fdf0::/36", "396056"}, + {"2606:4100::/32", "11745"}, + {"2800:160:1a9d::/42", "14259"}, + {"2804:1260::/32", "263473"}, + {"2a08:600:e0::/47", "210536"}, + {"2400:bd00:8004::/33", "45267"}, + {"2404:f4c0:f70f::/48", "138517"}, + {"2600:100c:b0f0::/38", "22394"}, + {"2606:ae80:1474::/44", "26762"}, + {"2806:2f0:44c1::/46", "17072"}, + {"2a00:bf00::/32", "5387"}, + {"2a02:ac80:1001::/34", "25145"}, + {"2c0f:f6d0:23::/44", "327687"}, + {"2001:ee0:ed00::/40", "45899"}, + {"2403:89c0:3::/32", "55824"}, + {"2405:d300::/43", "17477"}, + {"2408:840d:2700::/42", "17621"}, + {"2409:8c85:aa5d::/42", "9808"}, + {"2a04:2fc7::/32", "43238"}, + {"2001:67c:1724::/48", "25151"}, + {"2400:9940::/35", "136224"}, + {"2405:9800:c921::/45", "45430"}, + {"2803:ecc0:d00::/34", "264814"}, + {"2a02:cb40::/32", "20546"}, + {"2620:100:5000::/45", "19557"}, + {"2804:222c:400::/32", "264596"}, + {"2804:8220::/32", "272500"}, + {"2806:2f0:9561::/46", "17072"}, + {"2a0f:607:1052::/48", "212425"}, + {"2001:559:2d2::/48", "7016"}, + {"2400:4ec0:9502::/38", "64300"}, + {"2602:fd3f:f00::/48", "6939"}, + {"2606:2800:4111::/46", "15133"}, + {"2804:49e0::/32", "267206"}, + {"2804:55ec::/32", "267965"}, + {"2806:2f0:4181::/46", "17072"}, + {"2a0f:ff40::/29", "207641"}, + {"2001:ee0:8040::/39", "45899"}, + {"2402:e100::/32", "58485"}, + {"240e:438:ac20::/43", "140647"}, + {"2a01:c50f:c40::/35", "12479"}, + {"2a12:4440::/32", "213052"}, + {"2001:250:7034::/48", "24370"}, + {"2001:16d8:afff::/35", "16150"}, + {"2602:fdb7::/47", "396073"}, + {"2800:190:408::/33", "11664"}, + {"2804:1f48::/32", "53016"}, + {"2402:800:fba0::/41", "7552"}, + {"240c:ce82::/25", "23910"}, + {"2a0e:b107:710::/48", "206843"}, + {"2402:6800:760::/48", "55429"}, + {"2804:110::/32", "28590"}, + {"2a01:5f20::/32", "56784"}, + {"2a10:d502::/32", "22773"}, + {"2409:8060:1100::/36", "9808"}, + {"240a:a318::/32", "143442"}, + {"2a09:84c0:500::/32", "8145"}, + {"2001:559:31f::/48", "33491"}, + {"2407:5280:500::/45", "133557"}, + {"2a05:eb80::/29", "39479"}, + {"2001:470:e4::/48", "36103"}, + {"2409:8c54:3100::/33", "56040"}, + {"2600:370f:6061::/46", "32261"}, + {"2800:bf0:a806::/48", "27947"}, + {"2001:67c:3b8::/48", "44786"}, + {"2001:4878:4246::/48", "12222"}, + {"2409:8008:2100::/36", "24547"}, + {"2605:3380:41fc::/46", "12025"}, + {"2a0e:7180::/29", "200023"}, + {"2001:67c:2cd8::/48", "47867"}, + {"2001:1410::/32", "25538"}, + {"240a:a3fb::/32", "143669"}, + {"2804:5d30::/32", "268956"}, + {"2a02:26f7:da89::/42", "20940"}, + {"2a02:26f7:ea8c::/48", "36183"}, + {"2a05:5c00::/29", "51630"}, + {"2001:c38:1000::/34", "9335"}, + {"240a:a2e7::/32", "143393"}, + {"2604:3400:aaac::/48", "209453"}, + {"2604:d600:102d::/43", "32098"}, + {"2804:150:f000::/31", "10954"}, + {"2602:fd11::/36", "40895"}, + {"2803:6604:6000::/37", "28075"}, + {"2804:7cc0::/32", "271516"}, + {"2806:230:2050::/48", "265594"}, + {"2a00:18e0:5::/48", "16509"}, + {"2a00:a360::/32", "60435"}, + {"2001:250:5805::/46", "138371"}, + {"2400:e780::/32", "131198"}, + {"2409:8c85:aa6b::/45", "9808"}, + {"2600:9000:238c::/48", "16509"}, + {"2804:6264::/32", "269294"}, + {"2804:736c::/32", "270914"}, + {"2001:503:d2d::/48", "396566"}, + {"2001:df1:df00::/48", "136805"}, + {"2404:4a00:2095::/35", "45629"}, + {"240a:afd3::/32", "146701"}, + {"2620:110:e000::/48", "16653"}, + {"2a03:afc0:1::/44", "52000"}, + {"2001:678:284::/48", "206885"}, + {"2402:800:3ed3::/44", "7552"}, + {"2602:fe3a:5::/48", "20119"}, + {"2803:2e10::/32", "271968"}, + {"2001:67c:2ae4::/48", "20572"}, + {"2620:7e:c080::/48", "33187"}, + {"2a01:be00::/32", "197248"}, + {"2001:df0:3600::/48", "135014"}, + {"2600:370f:9063::/43", "32261"}, + {"2804:694:3001::/36", "262596"}, + {"2a03:c7c0::/32", "59432"}, + {"2606:ae00:bf80::/33", "7287"}, + {"2a00:7e80::/32", "197197"}, + {"2a02:26f7:de04::/48", "36183"}, + {"2600:6c21:11::/45", "20115"}, + {"2a02:26f7:bf4d::/46", "20940"}, + {"2001:67c:1c8::/48", "48896"}, + {"2001:df5:4500::/48", "137876"}, + {"2001:490:2000::/35", "14803"}, + {"2001:67c:2150::/48", "49750"}, + {"2400:9380:80c0::/44", "136167"}, + {"240e:63:3000::/33", "140312"}, + {"2604:6e00:2800::/37", "13977"}, + {"2a00:5ba0::/29", "680"}, + {"240a:a2f7::/32", "143409"}, + {"240e:44d:b80::/41", "4134"}, + {"2a01:9000::/29", "43424"}, + {"2a01:ade0::/32", "24641"}, + {"2a02:26f0:100::/45", "20940"}, + {"2604:f6c0::/32", "22987"}, + {"2607:fbe8::/32", "7055"}, + {"2804:1a0:2::/36", "28189"}, + {"2a02:a400::/25", "1136"}, + {"2a02:e980:14f::/43", "19551"}, + {"2401:f000:2:200::/56", "23838"}, + {"2409:8c20:5000::/42", "56046"}, + {"240a:a4c3::/32", "143869"}, + {"2804:6f5c::/32", "270655"}, + {"2001:67c:2fd8::/48", "205496"}, + {"2401:c680:b::/45", "133854"}, + {"2402:ef03:2100::/33", "7633"}, + {"2405:f900::/32", "132509"}, + {"2406:fd00:100::/40", "24459"}, + {"2620:0:c12::/45", "22317"}, + {"2a01:111:2003::/48", "8068"}, + {"2a0a:4580::/29", "29670"}, + {"2c0f:2600::/32", "328848"}, + {"2408:843c::/35", "4837"}, + {"2409:8c18::/31", "134810"}, + {"2604:7e00:80::/32", "17378"}, + {"2604:d600:68e::/43", "32098"}, + {"2a05:d9c0::/29", "200970"}, + {"2a10:3144::/30", "398481"}, + {"240e:608::/35", "137691"}, + {"2804:1850::/32", "61929"}, + {"2a00:79e1:806::/42", "36384"}, + {"2a05:c0c0::/29", "49920"}, + {"2a0b:4040::/29", "62217"}, + {"2a10:bb00::/29", "47864"}, + {"2001:fd8:3042::/44", "132199"}, + {"2403:9400:1::/46", "10006"}, + {"240e:ff:c002::/48", "134773"}, + {"240e:108:88::/48", "38283"}, + {"2a0c:ec00::/29", "205255"}, + {"2408:8956:2300::/40", "17816"}, + {"240a:a2a5::/32", "143327"}, + {"240e:967:c600::/36", "4134"}, + {"2800:160:1b5b::/42", "14259"}, + {"2001:5f8:7d04::/38", "5056"}, + {"2001:43f8:9f0::/48", "327705"}, + {"2408:840c:2d00::/40", "17621"}, + {"240a:a8ea::/32", "144932"}, + {"2a00:8740:15::/44", "49037"}, + {"2a02:5740:21::/48", "41564"}, + {"2a04:e4c0:59::/48", "36692"}, + {"2001:559:34f::/43", "33651"}, + {"2001:578:10::/46", "22773"}, + {"2001:4980:4445::/32", "7753"}, + {"2600:6c38:f36::/44", "20115"}, + {"2620:a0:4002:107::/48", "55064"}, + {"2402:800:521d::/42", "7552"}, + {"2804:62e4:faa3::/41", "269326"}, + {"2a02:26f7:b9c8::/48", "36183"}, + {"2a06:cb80::/32", "60804"}, + {"2001:da8:6013::/42", "24355"}, + {"2401:ab80::/32", "38197"}, + {"2409:8030:3802::/40", "9808"}, + {"240e:1a:110::/44", "134769"}, + {"2600:387:c::/43", "7018"}, + {"2a02:2e02:1020::/40", "12479"}, + {"2a0c:9e00::/32", "7018"}, + {"2403:4000::/43", "24122"}, + {"2600:6c10:f40f::/40", "20115"}, + {"2a0b:1980::/29", "206529"}, + {"240a:af7d::/32", "146615"}, + {"2600:380:d410::/38", "7018"}, + {"2600:1007:a100::/44", "6167"}, + {"2602:feda:30::/44", "46997"}, + {"2804:5ac::/32", "10412"}, + {"2a03:9060::/32", "28768"}, + {"2a0a:c9c0::/32", "205818"}, + {"2600:6c10:ff91::/45", "20115"}, + {"2806:230:500a::/48", "265594"}, + {"2a06:24c0::/29", "12576"}, + {"2a0d:e940::/36", "35507"}, + {"2001:250:3015::/44", "24357"}, + {"240e:449::/32", "140553"}, + {"2602:80c:1004::/48", "10796"}, + {"2602:fcf6:ffd::/48", "59417"}, + {"2a05:b40::/29", "57043"}, + {"2a0a:800::/29", "64478"}, + {"2001:579:7114::/41", "22773"}, + {"2001:12f0:7c0::/36", "1916"}, + {"2408:8409:1800::/40", "4808"}, + {"2605:a401:8d3a::/40", "33363"}, + {"2607:b400:100::/36", "40220"}, + {"2800:bf0:a828::/48", "27947"}, + {"2a03:2887:ff27::/44", "63293"}, + {"2a09:6d80::/32", "13984"}, + {"2a02:26f0:4d01::/40", "20940"}, + {"2401:4900:3b70::/44", "45609"}, + {"240a:a083::/32", "142781"}, + {"240a:a50b::/32", "143941"}, + {"2804:bc8::/32", "52829"}, + {"2804:738c::/32", "270922"}, + {"2001:43f8:1f4::/48", "37663"}, + {"240e:56:c000::/37", "38283"}, + {"2001:4858::/32", "32097"}, + {"2406:da70:4000::/40", "16509"}, + {"240a:aafd::/32", "145463"}, + {"2607:f928:15::/46", "14085"}, + {"2620:74:a8::/48", "26134"}, + {"2806:230:5004::/48", "265594"}, + {"2001:918:1ac::/36", "3303"}, + {"2607:f368::/36", "32982"}, + {"2620:1bc:102d::/46", "7726"}, + {"2001:559:c179::/48", "33652"}, + {"2001:c38:9014::/42", "9931"}, + {"2409:811e::/31", "24400"}, + {"2600:370f:2063::/45", "32261"}, + {"2605:dd40:8f90::/41", "398549"}, + {"2001:559:8337::/48", "13367"}, + {"2a01:30::/31", "8875"}, + {"2a0e:fd45:2b60::/48", "210383"}, + {"2001:550:3c01::/39", "174"}, + {"2406:840:fefa::/48", "141694"}, + {"2409:8051:3100::/37", "9808"}, + {"2409:8924:b500::/38", "56046"}, + {"2804:1198::/32", "263426"}, + {"2804:673c:600::/40", "269615"}, + {"2a09:8700::/32", "12586"}, + {"2a0b:4340:3211::/42", "48024"}, + {"2001:504:57::/48", "64213"}, + {"2602:80a:2004::/48", "398351"}, + {"2001:67c:1844::/48", "199846"}, + {"2001:978:5300:1::/47", "174"}, + {"2001:b08:f::/43", "3267"}, + {"240d:c010:74::/47", "139341"}, + {"2600:4405::/30", "6130"}, + {"2800:310::/47", "18678"}, + {"2a02:26f7:ec10::/48", "36183"}, + {"2a03:f80:420::/48", "174"}, + {"2a0d:ce80::/29", "204189"}, + {"2001:1970::/32", "7992"}, + {"2404:92c0:ff00::/48", "48024"}, + {"240b:4003:e::/48", "45102"}, + {"2602:fbcf:c1::/46", "213384"}, + {"2a00:d101::/34", "15704"}, + {"2a02:26f7:e68d::/42", "20940"}, + {"2a0b:4341:a14::/48", "57695"}, + {"2a0e:fd45:1337::/48", "207740"}, + {"2804:3b34::/32", "266135"}, + {"240a:a9aa::/32", "145124"}, + {"2605:ce80::/37", "393713"}, + {"2606:2f40::/32", "399398"}, + {"2a0c:8fc1::/40", "34081"}, + {"2a0e:1c80:4::/48", "47869"}, + {"2607:6400::/35", "30688"}, + {"2a02:26f7:d7c5::/46", "20940"}, + {"2a0c:4181::/32", "56434"}, + {"2804:4d38::/32", "267419"}, + {"2a06:e881:119::/48", "39753"}, + {"2a07:c387::/32", "8288"}, + {"2a0b:3080:20::/32", "206516"}, + {"2a10:c5c0::/31", "211547"}, + {"2001:550:3704::/36", "174"}, + {"2801:80:1c20::/48", "266068"}, + {"2001:67c:7e0::/48", "41399"}, + {"2001:67c:1954::/48", "44574"}, + {"240a:a85e::/32", "144792"}, + {"240e:108:1130::/47", "137693"}, + {"2600:6c10:ffc2::/42", "20115"}, + {"2604:b000::/34", "14638"}, + {"2a09:10c0::/29", "6886"}, + {"2a10:6180::/29", "204790"}, + {"2600:6c34:302::/48", "33588"}, + {"2804:174::/32", "53152"}, + {"2804:f08::/32", "263563"}, + {"2001:559:799::/48", "7922"}, + {"2001:559:822c::/48", "7922"}, + {"2001:1248:70f2::/48", "11172"}, + {"240a:a098::/32", "142802"}, + {"240a:ae74::/32", "146350"}, + {"2600:1406:3601::/36", "20940"}, + {"2a01:8740:1::/48", "203380"}, + {"2a02:26f7:bdc4::/48", "36183"}, + {"2001:1248:9a2e::/43", "11172"}, + {"2400:a040:ffff::/48", "137995"}, + {"2408:8957:9d00::/40", "17816"}, + {"2804:5804::/32", "268100"}, + {"2806:103e:1::/46", "8151"}, + {"2a00:1528::/39", "6696"}, + {"2a09:bac0:382::/48", "13335"}, + {"2400:ba40::/32", "64271"}, + {"2605:5080::/33", "3367"}, + {"2620:b1:8000::/48", "7018"}, + {"2a10:fa80:212::/48", "57050"}, + {"240e:108:11d3::/48", "134756"}, + {"2604:1380:4550::/42", "54825"}, + {"2804:18:850::/44", "26599"}, + {"2c0f:e9e0::/32", "22572"}, + {"2001:df6:a900::/48", "133320"}, + {"2804:a4c::/32", "262268"}, + {"2804:69a0::/32", "270281"}, + {"2a0e:46c7::/48", "34681"}, + {"2001:fe0::/36", "4775"}, + {"2405:6e00:2690::/41", "18291"}, + {"240a:a8ac::/32", "144870"}, + {"2606:2800:4a0c::/46", "15133"}, + {"2a0b:f400::/32", "15698"}, + {"2001:559:a5::/46", "7922"}, + {"2a01:4ba0::/46", "199987"}, + {"2404:bf40:84c1::/42", "139084"}, + {"2409:8077:2905::/28", "9808"}, + {"240a:a86b::/32", "144805"}, + {"2604:6600:38c::/34", "40676"}, + {"2604:8d00::/32", "3700"}, + {"2a00:4b80:3::/48", "41368"}, + {"2a02:7ac0::/32", "42708"}, + {"2a10:c680::/29", "42357"}, + {"2001:da8:3051::/36", "23910"}, + {"2a02:26f7:be45::/46", "20940"}, + {"2a05:5ec0:2::/29", "201364"}, + {"2408:80ea:6400::/41", "17816"}, + {"2600:1488:6481::/32", "20940"}, + {"2605:d000::/32", "15108"}, + {"2a03:5820::/32", "47736"}, + {"2a04:54c0::/29", "202230"}, + {"240e:982:3200::/39", "138991"}, + {"2600:1419:d401::/36", "20940"}, + {"2605:c540:c010::/44", "398378"}, + {"2804:77a4::/32", "271190"}, + {"2a05:4200:a::/45", "21534"}, + {"240a:ab7c::/32", "145590"}, + {"2605:9740::/32", "398052"}, + {"2803:df00::/32", "262199"}, + {"2a0d:7f00::/29", "8560"}, + {"2401:160c::/32", "133090"}, + {"240a:ad66::/32", "146080"}, + {"2804:2e7c::/32", "265348"}, + {"2001:559:8655::/48", "7725"}, + {"2409:8a3c:8a00::/31", "24444"}, + {"2001:559:8505::/48", "7015"}, + {"2001:c20:19::/37", "3758"}, + {"2400:a980:ef::/37", "133111"}, + {"2401:1d40::/48", "23724"}, + {"2401:b200:93::/32", "24186"}, + {"2600:1015:9010::/39", "6167"}, + {"2600:6c04::/40", "20115"}, + {"2800:bf0:a833::/35", "27947"}, + {"2a06:7280::/29", "204096"}, + {"2403:300:a0a::/48", "6185"}, + {"2600:100e:f010::/39", "6167"}, + {"2620:c:4000::/48", "14834"}, + {"2a0f:3740::/29", "60262"}, + {"2409:8904:6770::/40", "24547"}, + {"2804:6ab0::/32", "270353"}, + {"2a03:5342::/44", "8983"}, + {"2402:8400:200::/40", "17820"}, + {"2804:104c::/40", "263629"}, + {"2a03:7580:4100::/32", "28785"}, + {"2a0b:2281::/29", "43685"}, + {"2001:348::/32", "7679"}, + {"2407:16c0::/48", "135905"}, + {"2408:8459:cb30::/41", "17622"}, + {"2409:8057:801::/45", "56040"}, + {"2600:2100::/32", "54858"}, + {"2607:f368:2100::/36", "32982"}, + {"2001:1248:9aaa::/45", "11172"}, + {"2404:c140:154::/38", "138997"}, + {"2409:893c::/31", "24444"}, + {"2600:6c20:11a::/38", "20115"}, + {"2a03:c040:5::/46", "199484"}, + {"2a03:c480::/32", "198095"}, + {"2a0d:dbc0::/29", "212660"}, + {"2001:559:8747::/48", "7015"}, + {"2407:e500:c::/46", "38551"}, + {"240a:aa49::/32", "145283"}, + {"2620:17a:8::/48", "7345"}, + {"2804:4438::/32", "267610"}, + {"2001:550:2208::/46", "174"}, + {"2001:67c:540::/48", "3301"}, + {"2001:df4:5c80::/48", "135752"}, + {"240c:c726::/32", "24364"}, + {"2606:5940::/32", "399599"}, + {"2804:5d40::/32", "268960"}, + {"2600:1417:2c::/48", "9498"}, + {"2a00:4bc0:2130::/46", "16509"}, + {"2a0d:c140::/29", "211332"}, + {"2a0f:4f40::/48", "48749"}, + {"2405:1c0:6000::/46", "55303"}, + {"2a02:4d0::/32", "8816"}, + {"2409:8053:1802::/40", "56047"}, + {"2606:2800:4130::/47", "15133"}, + {"2804:7228::/32", "270836"}, + {"2a02:26f7:db05::/46", "20940"}, + {"2804:7484::/32", "270986"}, + {"2001:67c:84c::/48", "210775"}, + {"2400:6540::/48", "135905"}, + {"240e:981:9100::/34", "4134"}, + {"2401:7c00::/36", "18400"}, + {"240e:848:50::/42", "4134"}, + {"2800:440:70::/48", "27738"}, + {"2804:7768::/32", "271176"}, + {"2a04:2b00:13cc::/48", "60890"}, + {"2400:adce::/40", "9541"}, + {"2408:8456:1600::/42", "17622"}, + {"240a:ae6a::/32", "146340"}, + {"2620:1f7:81d::/35", "18703"}, + {"2a02:58::/32", "25596"}, + {"2400:6300::/48", "17825"}, + {"2600:140f:5801::/39", "20940"}, + {"2604:6600:2608::/39", "40676"}, + {"2a06:3f00::/29", "62163"}, + {"2405:fd80:1300::/40", "135391"}, + {"2803:7000:9000::/33", "52362"}, + {"2a02:26f7:c640::/48", "36183"}, + {"2a03:9600::/32", "31562"}, + {"2407:1e40:6::/38", "141732"}, + {"240a:aef0::/32", "146474"}, + {"240a:af5c::/32", "146582"}, + {"2600:6c3a:7f::/37", "20115"}, + {"2804:8658::/39", "272637"}, + {"2a01:6500:a04c::/43", "42925"}, + {"2a01:ce8d:3000::/32", "51964"}, + {"2a02:26f7:e788::/48", "36183"}, + {"2a0b:6580::/29", "204007"}, + {"2401:d800:2f70::/40", "7552"}, + {"2405:7f00:82a0::/39", "133414"}, + {"2408:8956:e300::/40", "17816"}, + {"2806:2f0:7261::/46", "17072"}, + {"2a03:b640::/32", "9038"}, + {"2001:559:8702::/48", "7015"}, + {"2001:678:1b::/48", "51966"}, + {"2001:df7:c180::/48", "147087"}, + {"2400:7a00::/32", "6939"}, + {"2408:8456:6c40::/39", "17816"}, + {"240a:a08e::/32", "142792"}, + {"240a:a772::/32", "144556"}, + {"2600:380:9400::/39", "20057"}, + {"2600:6c10:c0a::/45", "20115"}, + {"2a00:d480::/32", "16246"}, + {"2606:8000::/32", "17253"}, + {"2800:484:c200::/40", "14080"}, + {"2a0a:d880:102::/48", "16509"}, + {"2001:67c:918::/48", "209460"}, + {"2408:8256:3b96::/44", "17623"}, + {"2604:f980:5100::/40", "19957"}, + {"2a02:1348::/32", "51059"}, + {"2a0d:8d07:119::/32", "207616"}, + {"2a10:5640::/32", "211690"}, + {"2c0f:ec40:6000::/32", "327936"}, + {"2001:67c:2270::/48", "196674"}, + {"2001:930:14a::/32", "15924"}, + {"2405:100::/39", "9905"}, + {"240a:add0::/32", "146186"}, + {"2605:3ac0:1000::/36", "6939"}, + {"2620:15e:101::/46", "30383"}, + {"2804:2fbc::/32", "264909"}, + {"2401:3900::/32", "45447"}, + {"2401:5e40:1100::/36", "63770"}, + {"2605:a404:37::/44", "33363"}, + {"2a00:1610::/29", "34183"}, + {"2a01:6800::/32", "41809"}, + {"2001:559:80ed::/48", "7922"}, + {"2001:559:85ed::/48", "33662"}, + {"2001:4b20:100:598::/64", "65505"}, + {"240a:a0f9::/32", "142899"}, + {"2600:6c46::/32", "20115"}, + {"2a05:4140:201::/48", "211522"}, + {"2408:8456:a210::/42", "134543"}, + {"2603:4:1304::/48", "44273"}, + {"2607:fb90:6d00::/35", "21928"}, + {"2a01:63a0::/32", "199907"}, + {"2a02:26f7:bb09::/42", "20940"}, + {"2a07:db01:40::/42", "204527"}, + {"2001:67c:1901::/46", "6848"}, + {"2404:bf40:a301::/46", "7545"}, + {"2605:8000:91::/38", "4261"}, + {"2804:2674::/47", "264344"}, + {"2804:74d8::/32", "271007"}, + {"2a03:2880:f246::/44", "32934"}, + {"2402:9900:211::/48", "27435"}, + {"240a:ad16::/32", "146000"}, + {"2a0f:c940::/29", "210107"}, + {"2001:579:90fd::/39", "22773"}, + {"240e:44d:4000::/41", "140345"}, + {"2801:158::/36", "52336"}, + {"2806:2f0:3241::/46", "17072"}, + {"2806:2f0:3501::/46", "17072"}, + {"2806:2f0:9361::/40", "17072"}, + {"2a0d:cb80::/29", "61062"}, + {"2a0d:e8c0:2::/29", "35829"}, + {"2001:1b75::/36", "28852"}, + {"2408:8256:3d69::/48", "17816"}, + {"2409:8959:ca54::/39", "56040"}, + {"2600:9000:229f::/48", "16509"}, + {"2a05:e4c0::/31", "39521"}, + {"2001:250:6009::/48", "24364"}, + {"2604:b200::/32", "29"}, + {"2a01:9b80::/32", "12301"}, + {"2a0a:6c0::/29", "47447"}, + {"2001:678:e0c::/48", "212783"}, + {"2403:4e00:30c::/32", "45528"}, + {"2404:1c40:6::/48", "24432"}, + {"2408:8256:379c::/46", "17623"}, + {"2607:f368:320f::/48", "46846"}, + {"2a02:a18::/32", "29492"}, + {"2a02:2e02:3d60::/32", "12479"}, + {"2a02:6ea0:e400::/39", "211612"}, + {"2a04:ac06::/32", "56534"}, + {"2001:67c:1898::/48", "31337"}, + {"2001:67c:2e58::/48", "205376"}, + {"2001:1248:5982::/45", "11172"}, + {"2600:3c0f:2::/45", "63949"}, + {"2602:fea7:d00::/40", "399139"}, + {"2806:230:1012::/48", "265594"}, + {"2c0f:fa10::/32", "30844"}, + {"2404:b680::/32", "135290"}, + {"2600:100a:b140::/40", "22394"}, + {"2600:1801:12::/47", "16552"}, + {"2605:7680::/32", "11042"}, + {"2607:f060:1000::/46", "17017"}, + {"2804:746c::/33", "270980"}, + {"2a02:c6c0::/32", "12722"}, + {"2402:3a80:50::/46", "38266"}, + {"2600:1000:f010::/40", "22394"}, + {"2804:20b0::/32", "264508"}, + {"2806:230:302f::/36", "11888"}, + {"2a02:26f0:8201::/39", "20940"}, + {"2a04:e00:18::/47", "54103"}, + {"2c0f:f7a8:9210::/47", "4809"}, + {"2001:67c:15f4::/48", "41103"}, + {"240a:a660::/32", "144282"}, + {"2a02:850:ffff::/48", "1921"}, + {"2a05:2607::/32", "57948"}, + {"2a07:6cc0:20::/47", "61098"}, + {"2a0f:a940::/29", "60781"}, + {"2a00:6f60::/32", "44923"}, + {"2a00:f826:3::/48", "30823"}, + {"2a02:26f7:c2c5::/46", "20940"}, + {"2a09:12c0::/48", "34775"}, + {"2a0b:e600::/29", "203964"}, + {"2a0e:97c3:467::/48", "20473"}, + {"2a10:4646:6::/48", "47484"}, + {"2001:559:495::/46", "7922"}, + {"2600:8807:a1c0::/36", "22773"}, + {"2600:9000:21cc::/42", "16509"}, + {"2804:6cc::/32", "262607"}, + {"2804:1a04:27::/33", "61832"}, + {"2001:418:149d::/48", "93"}, + {"2001:559:81fb::/48", "7015"}, + {"2001:559:87ae::/47", "7922"}, + {"2600:1419:1a::/48", "20940"}, + {"2620:13f:701c::/48", "59116"}, + {"2a03:f80:7::/48", "56630"}, + {"2a0b:b86:fff0::/44", "50867"}, + {"2a0c:5247:4000::/36", "208861"}, + {"2402:800:9efe::/39", "7552"}, + {"2605:1f00::/32", "14335"}, + {"2606:ae00:a000::/47", "7287"}, + {"2001:df4:5c00::/48", "135724"}, + {"2401:d800:fcd0::/42", "7552"}, + {"2600:100e:9010::/39", "6167"}, + {"2602:fd15::/47", "398465"}, + {"2607:fc58:1:44::/64", "13536"}, + {"2a02:2288::/29", "41765"}, + {"2400:6180:f000::/36", "14061"}, + {"2406:e000:32b::/45", "23655"}, + {"240a:afc9::/32", "146691"}, + {"2607:5300::/32", "16276"}, + {"2a02:888:8148::/47", "48695"}, + {"2a02:1f0::/32", "34080"}, + {"2402:800:4303::/40", "7552"}, + {"2406:2700::/32", "38283"}, + {"240a:a580::/32", "144058"}, + {"2600:1403:6400::/48", "35994"}, + {"2605:640f:85ab::/48", "210935"}, + {"2a02:2e02:1500::/43", "12479"}, + {"2a0e:fd45:da6::/43", "44103"}, + {"2400:1a00:f000::/36", "17501"}, + {"2804:e0c:200::/48", "28176"}, + {"2a00:4a00::/34", "39356"}, + {"2602:fbcf:b1::/48", "209018"}, + {"2804:62f8::/32", "269331"}, + {"2001:678:918::/48", "57166"}, + {"2400:cb00:134::/44", "13335"}, + {"2406:f00:2::/48", "58758"}, + {"2600:9000:1e38::/47", "16509"}, + {"2607:9800:a10a::/33", "15085"}, + {"2806:230:6011::/48", "11888"}, + {"2a06:eec0::/29", "56722"}, + {"2a10:cc42:120::/44", "58336"}, + {"2a11:9c00::/40", "213354"}, + {"2400:1a00:b1e1::/36", "17501"}, + {"2407:9440::/47", "141626"}, + {"2408:8456:3450::/39", "17816"}, + {"2600:1404:d800::/48", "35994"}, + {"2605:a404:7db::/42", "33363"}, + {"2001:678:60::/48", "42"}, + {"2408:8456:b010::/42", "134543"}, + {"2804:279c::/32", "263913"}, + {"2a0b:fc0::/29", "42217"}, + {"2a10:9107:f000::/36", "209588"}, + {"2400:cb00:150::/44", "13335"}, + {"2404:bf40:8142::/42", "139084"}, + {"2604:8580::/32", "32363"}, + {"2800:bf0:3a42::/40", "27947"}, + {"2a0d:e380:2::/29", "204460"}, + {"2001:1978:802::/48", "13895"}, + {"2001:df5:ca80::/48", "132513"}, + {"2409:8c15:2800::/40", "9808"}, + {"2600:9000:1e2e::/48", "16509"}, + {"2602:ff4d::/36", "20412"}, + {"2804:77a0::/32", "271155"}, + {"2a00:1440::/32", "43727"}, + {"2001:559:c395::/48", "33667"}, + {"2001:da8:103c::/41", "24361"}, + {"2408:84f3:ac10::/42", "134543"}, + {"2803:7200:4::/46", "27696"}, + {"2a02:26f7:bd05::/46", "20940"}, + {"2a03:3160::/32", "62149"}, + {"2001:67c:278c::/48", "12732"}, + {"240e:980:2d00::/40", "136197"}, + {"2602:fc4b::/36", "6977"}, + {"2806:230:302c::/48", "265594"}, + {"2a0e:97c0:7e0::/48", "51076"}, + {"2001:428:6402:220::/64", "2639"}, + {"240a:ab47::/32", "145537"}, + {"2800:4e0:c000::/34", "16629"}, + {"2a02:26f7:d401::/46", "20940"}, + {"2001:df0:6380::/48", "135972"}, + {"2401:2d00:12::/48", "17625"}, + {"2403:6000::/39", "24085"}, + {"2405:3200:502::/38", "17639"}, + {"2a0f:4340::/29", "211626"}, + {"2a12:84c0::/45", "207420"}, + {"2001:4db8::/32", "35706"}, + {"2404:e4c0:5105::/48", "54201"}, + {"2806:2f0:6103::/42", "17072"}, + {"2a02:24b8::/40", "52030"}, + {"2a02:f784:20::/48", "25252"}, + {"2409:8c60:ea01::/30", "9808"}, + {"2602:fed3:8::/48", "19969"}, + {"2803:e840::/32", "61498"}, + {"2806:230:fff2::/48", "265594"}, + {"2a00:1228:103::/32", "31148"}, + {"2a0c:9a40:c002::/47", "209022"}, + {"2a0d:d742:40::/44", "210400"}, + {"2607:6100:e1::/48", "54380"}, + {"2804:17b4::/32", "263166"}, + {"2a02:cb00::/29", "43352"}, + {"2620:11f:d00a::/48", "393941"}, + {"2a02:e70:157::/40", "33965"}, + {"2a07:e345:100::/46", "212477"}, + {"2001:1a11:d7::/44", "42298"}, + {"2800:2a0:2401::/35", "27947"}, + {"2a06:f903::/36", "56630"}, + {"2001:428:4003::/48", "26062"}, + {"2804:35e8::/32", "266314"}, + {"2a00:1f19::/32", "197519"}, + {"2a01:618:400::/45", "43519"}, + {"2a02:26f7:ddc5::/46", "20940"}, + {"2a09:f200::/29", "39305"}, + {"2a0e:46c4:2c00::/44", "213326"}, + {"2001:43f8:a30::/48", "20294"}, + {"2a0e:2000::/29", "62068"}, + {"2001:1b40:3334::/32", "20860"}, + {"2409:8051:1900::/37", "9808"}, + {"240e:37e:ac00::/33", "4134"}, + {"2806:3ca::/32", "270124"}, + {"2a0e:2240:4::/48", "60781"}, + {"2001:559:84cf::/48", "22909"}, + {"240a:aa7e::/32", "145336"}, + {"240a:ad94::/32", "146126"}, + {"2603:f020::/25", "397165"}, + {"2801:15:6800::/48", "13489"}, + {"2a02:27b0::/33", "9146"}, + {"2406:1e40:f012::/47", "4837"}, + {"240e:3b3:d000::/36", "134772"}, + {"2600:c0b:1021::/32", "14745"}, + {"2605:a404:db9::/41", "33363"}, + {"2a03:1120::/32", "19419"}, + {"2401:4900:20::/56", "45609"}, + {"2404:2e00::/44", "10226"}, + {"2600:1480:8801::/37", "20940"}, + {"2602:fed2:7020::/46", "39753"}, + {"2001:559:112::/48", "7016"}, + {"2401:d800:470::/40", "7552"}, + {"2402:d340::/32", "38381"}, + {"2402:f180:3::/48", "58579"}, + {"240a:a11c::/32", "142934"}, + {"240a:a3d8::/32", "143634"}, + {"240a:aec1::/32", "146427"}, + {"2607:f8f0:660::/47", "36391"}, + {"2a03:2fc0::/32", "61394"}, + {"2001:67c:1034::/48", "48854"}, + {"2620:0:1600::/48", "4390"}, + {"2804:6e8c::/32", "270604"}, + {"2a02:af40::/29", "60187"}, + {"2a0a:2c0:5::/48", "12998"}, + {"240e:13:8000::/37", "148969"}, + {"2801:80:2250::/47", "267626"}, + {"2a09:bac0:417::/48", "13335"}, + {"2a0a:f940::/32", "48642"}, + {"2a10:2ec7:5000::/36", "208861"}, + {"2001:250:1c00::/44", "138376"}, + {"2001:1248:551b::/42", "11172"}, + {"2402:8100:20e6::/44", "45271"}, + {"240a:aef8::/32", "146482"}, + {"2600:1407:1c::/48", "3257"}, + {"2620:0:2e64::/48", "29997"}, + {"2620:149:fa::/45", "714"}, + {"2803:51c0::/32", "262181"}, + {"2001:978:900::/48", "47132"}, + {"2804:14d:5c77::/40", "28573"}, + {"2806:286:9000::/34", "265524"}, + {"2001:678:24::/48", "201612"}, + {"240e:3bf:dc00::/34", "4134"}, + {"2605:f480::/31", "7979"}, + {"2607:8b00:2::/47", "36454"}, + {"2804:6b3c::/32", "270387"}, + {"2a00:7c00::/32", "41783"}, + {"2a02:c48::/29", "49024"}, + {"240a:a168::/32", "143010"}, + {"2600:3501:5000::/32", "396998"}, + {"2610:20:90e2::/48", "3477"}, + {"2804:78cc::/32", "271266"}, + {"2a02:d8::/44", "44654"}, + {"2400:9380:8003::/48", "4134"}, + {"2804:294c::/32", "52556"}, + {"2a0c:de80::/48", "49453"}, + {"2a0e:f0c0::/29", "200713"}, + {"240a:a3c0::/32", "143610"}, + {"2600:1403:5401::/36", "20940"}, + {"2a00:1f98::/32", "43557"}, + {"2a07:3500:1460::/48", "34108"}, + {"240e:108:1173::/44", "4134"}, + {"2620:8d:c000::/48", "26365"}, + {"2a06:6c0:254::/47", "200738"}, + {"2a0e:a840::/47", "208440"}, + {"2401:cd80:100::/37", "63920"}, + {"2401:d040::/32", "136988"}, + {"2406:3000:a:2::/61", "4657"}, + {"2409:8043:2906::/37", "9808"}, + {"240e:183:8218::/46", "140654"}, + {"2804:4dfc::/32", "268232"}, + {"2804:7d7c:120::/43", "271564"}, + {"2a06:1440::/29", "30892"}, + {"2001:da8:248::/48", "23910"}, + {"2001:4250::/32", "17400"}, + {"2407:fe40::/32", "147184"}, + {"2605:4a00:310::/44", "14361"}, + {"2a02:26f7:d54c::/48", "36183"}, + {"2a07:9240::/29", "34907"}, + {"2001:448a:3070::/33", "7713"}, + {"2607:fd00:4::/48", "32922"}, + {"2801:15e::/44", "19429"}, + {"2a05:1500::/40", "200837"}, + {"2a0c:b641:6::/48", "34872"}, + {"2406:2a40::/32", "140734"}, + {"2620:103:90d2::/47", "15084"}, + {"2620:1bc:1018::/42", "7726"}, + {"2a02:26f7:cf80::/48", "36183"}, + {"2a05:2880::/32", "59827"}, + {"2a0c:4a00:c10::/42", "203351"}, + {"2a0e:97c3:7b8::/48", "20473"}, + {"2605:fd40::/32", "398930"}, + {"2c0f:fb88::/32", "37143"}, + {"2604:9d80:13::/32", "395172"}, + {"2606:2e00:8027::/44", "13213"}, + {"2800:110:1018::/48", "52442"}, + {"2800:bf0:a82a::/48", "27947"}, + {"2a02:2aa8:129::/45", "702"}, + {"2a10:80c0:1000::/48", "211331"}, + {"240a:a9b8::/32", "145138"}, + {"2604:f980:3000::/36", "19957"}, + {"2607:f3b0::/32", "21976"}, + {"2a00:e79::/30", "34602"}, + {"2a11:e87:3000::/33", "210625"}, + {"2001:4878:c048::/48", "12222"}, + {"2408:8456:5c40::/39", "17816"}, + {"2605:b900::/47", "36218"}, + {"2a04:bf80::/29", "198101"}, + {"2001:678:c58::/48", "213080"}, + {"2402:800:3d9b::/41", "7552"}, + {"2408:8474::/28", "4837"}, + {"2600:6c38:e10::/42", "20115"}, + {"2806:250:100::/40", "28554"}, + {"2a01:8840:19::/48", "207266"}, + {"2a02:888:8154::/38", "47794"}, + {"2a02:26f7:e745::/46", "20940"}, + {"2c0f:f2a0::/46", "327849"}, + {"240a:a7a0::/32", "144602"}, + {"240e:979:1e00::/40", "134770"}, + {"2610:38::/32", "21570"}, + {"2a11:9300::/29", "204790"}, + {"2001:559:c3fd::/48", "33667"}, + {"2404:e480::/32", "18127"}, + {"240e:44d:6080::/41", "4134"}, + {"2600:6c10:fc03::/43", "20115"}, + {"2001:1938:4002::/48", "33438"}, + {"240e:44d:1040::/42", "140358"}, + {"2400:cb00:260::/47", "13335"}, + {"2401:4900:2150::/42", "45609"}, + {"2402:3780::/48", "132789"}, + {"2402:8100:20dd::/46", "45271"}, + {"2404:8d04:2643::/32", "10089"}, + {"2408:8256:376a::/48", "17623"}, + {"2800:320:822::/48", "27882"}, + {"2804:5e0::/32", "262414"}, + {"2001:44b8:3082::/48", "7545"}, + {"2402:800:3255::/42", "7552"}, + {"2408:8957:900::/40", "17816"}, + {"2a0b:6b83:4243::/32", "202562"}, + {"2001:4c8:1068::/48", "46482"}, + {"2001:fd8:221::/46", "4775"}, + {"240a:a619::/32", "144211"}, + {"2607:f430::/32", "3663"}, + {"2804:2e1c:e481::/39", "265324"}, + {"2402:800:9d63::/43", "7552"}, + {"2604:d600:64d::/43", "32098"}, + {"2a07:140::/29", "44702"}, + {"2604:980:7000::/46", "21859"}, + {"2803:7f20::/32", "61317"}, + {"2a01:4bc0::/36", "12422"}, + {"2a12:6e40::/29", "209114"}, + {"2c0f:fe20::/32", "18931"}, + {"2600:6c38:b57::/44", "20115"}, + {"2804:5568::/32", "267933"}, + {"2a00:4bc0:2110::/44", "16509"}, + {"2a0e:c6c1::/32", "209419"}, + {"2408:8459:3410::/41", "17623"}, + {"2620:10f:6000::/40", "102"}, + {"2803:a410:9039::/48", "64114"}, + {"2804:54cc::/32", "268670"}, + {"2a03:cfc0::/32", "201814"}, + {"2a04:1120::/30", "3257"}, + {"2001:67c:14a4::/48", "42191"}, + {"2401:d800:f420::/41", "7552"}, + {"240a:a6a7::/32", "144353"}, + {"2607:fe28:2100::/33", "53347"}, + {"2804:14d:1200::/40", "28573"}, + {"2804:314:4030::/46", "61568"}, + {"2604:880:275::/39", "29802"}, + {"2620:c8::/48", "53708"}, + {"2801:11c:e1::/48", "14080"}, + {"2a04:444::/32", "12346"}, + {"2a0a:f582::/32", "51837"}, + {"2804:1560::/32", "52711"}, + {"2a05:e201::/32", "60079"}, + {"2001:438:fffd:125::/62", "397601"}, + {"2001:559:d4::/47", "33652"}, + {"2600:8400::/28", "14813"}, + {"2a02:26f7:c8d9::/42", "20940"}, + {"2001:44b8:205e::/42", "7545"}, + {"2407:d140::/36", "8849"}, + {"2a02:970:1449::/34", "44002"}, + {"2001:559:216::/48", "7016"}, + {"2001:dc7:1001::/34", "24151"}, + {"2408:8956:7700::/36", "17816"}, + {"2409:806a:1100::/36", "9808"}, + {"2a02:f080::/30", "15800"}, + {"2a07:3500:1ac0::/48", "1136"}, + {"2a0e:fd45:40fe::/48", "44103"}, + {"2620:0:2a03::/48", "25046"}, + {"2001:da8:a80a::/45", "24370"}, + {"2402:800:99a9::/43", "7552"}, + {"2402:8100:27b2::/44", "55644"}, + {"240a:af9d::/32", "146647"}, + {"2804:3614::/32", "266325"}, + {"2806:2f0:3563::/43", "17072"}, + {"2001:559:1d1::/46", "7922"}, + {"2001:4878:a151::/48", "12222"}, + {"2001:4998:1c0::/48", "7280"}, + {"2602:feda:2b8::/45", "138210"}, + {"2804:3420::/32", "265437"}, + {"2a00:79e1:f0e::/48", "395973"}, + {"2402:800:358d::/43", "7552"}, + {"2620:107:f0ff::/48", "36564"}, + {"2804:2594::/32", "264289"}, + {"2806:108e:1c::/46", "8151"}, + {"2a03:8860::/32", "200931"}, + {"2001:da8:262::/48", "24350"}, + {"2800:160:1d90::/47", "14259"}, + {"2a00:11c8::/32", "8457"}, + {"2a02:26f7:bc45::/46", "20940"}, + {"2a03:2880:f0fe::/47", "32934"}, + {"2a0f:9201:1::/29", "45009"}, + {"2001:579:a09c::/41", "22773"}, + {"2a0b:9ec0::/32", "44330"}, + {"2c0f:f2b8::/32", "328471"}, + {"2408:8256:2d8c::/48", "17816"}, + {"240a:a576::/32", "144048"}, + {"2600:8807:c722::/40", "22773"}, + {"2001:4c08:2026::/48", "32787"}, + {"2803:a00::/32", "52381"}, + {"2804:14c:7f55::/40", "28573"}, + {"2a00:d1a0::/47", "61317"}, + {"2a01:b100::/32", "43127"}, + {"2001:648:2810::/48", "12364"}, + {"2402:a800:fff1::/44", "9601"}, + {"240a:acb5::/32", "145903"}, + {"2600:1417:8001::/35", "20940"}, + {"2803:b5a0:c000::/34", "269804"}, + {"2804:4c::/32", "8055"}, + {"240e:44d:7000::/42", "140345"}, + {"240e:981:f100::/38", "136197"}, + {"2607:fcf0::/47", "13445"}, + {"2804:154c::/39", "263382"}, + {"2a01:d0:44::/38", "29632"}, + {"2a0c:9a40:8103::/48", "200857"}, + {"2402:3a80:c00d::/43", "38266"}, + {"2801:146::/48", "19429"}, + {"2804:807c::/32", "271753"}, + {"2a00:7240::/30", "16234"}, + {"2001:67c:2734::/48", "198531"}, + {"2600:1407:b801::/33", "20940"}, + {"2605:a401:81bc::/41", "33363"}, + {"2605:f500:8107::/43", "1828"}, + {"2804:2144:a800::/33", "52795"}, + {"2a02:2698:b000::/36", "47911"}, + {"2a02:26f7:d789::/46", "20940"}, + {"2402:3dc0:570::/48", "11179"}, + {"240a:a248::/32", "143234"}, + {"240e:250::/38", "137693"}, + {"2620:1d:2000::/48", "13539"}, + {"2620:171:6a::/48", "715"}, + {"2803:6604:6600::/36", "28075"}, + {"2a0d:200:1c::/48", "44000"}, + {"2c0f:f488::/32", "37363"}, + {"2801:166::/48", "19429"}, + {"2a02:970:1177::/44", "44002"}, + {"2a02:26f7:cd00::/48", "36183"}, + {"2a10:3c80::/29", "212144"}, + {"2600:1017:9010::/39", "6167"}, + {"2607:5380::/32", "53610"}, + {"2804:4918:8300::/33", "267164"}, + {"2a09:33c0::/29", "400522"}, + {"2a12:5840:1f1::/46", "209768"}, + {"240e:352:5c00::/34", "134419"}, + {"2600:370f:3688::/42", "32261"}, + {"2804:151:3::/41", "10954"}, + {"2804:2100::/32", "264526"}, + {"2a02:26f7:d6c4::/48", "36183"}, + {"2001:559:56f::/48", "7016"}, + {"2001:57a:3202::/36", "22773"}, + {"2001:678:894::/48", "209894"}, + {"2400:cb00:440::/47", "13335"}, + {"2606:9800::/32", "13536"}, + {"2804:14c:ccee::/43", "28573"}, + {"2a02:578:7c00::/32", "9031"}, + {"2a07:a905:ffec::/46", "46261"}, + {"2001:559:73::/48", "33287"}, + {"2001:559:8176::/48", "7725"}, + {"2408:8256:3580::/44", "17623"}, + {"240a:a688::/32", "144322"}, + {"2600:140b:9c00::/48", "24319"}, + {"2a02:e38:8100::/40", "14616"}, + {"2a02:26f7:d5c5::/46", "20940"}, + {"2a0d:d9c0::/30", "208948"}, + {"2001:559:83ca::/48", "7922"}, + {"2620:1b:6000::/47", "30150"}, + {"2804:104c:400::/40", "263629"}, + {"2804:4430::/32", "267608"}, + {"2a0e:7d44:f069::/48", "207618"}, + {"2400:e1c0:800::/37", "58659"}, + {"2402:4100::/32", "9326"}, + {"2607:f740:e623::/45", "63911"}, + {"2804:4da4::/32", "268210"}, + {"2001:67c:2fe4::/48", "9002"}, + {"2400:8b00:300::/42", "45727"}, + {"2408:864c::/32", "4837"}, + {"240e:966:5000::/37", "58772"}, + {"2600:1004:b240::/33", "22394"}, + {"2600:1007:f006::/47", "22394"}, + {"2600:1304::/32", "20021"}, + {"2804:4a4c::/32", "267231"}, + {"2a01:b840::/32", "21321"}, + {"2408:8459:6650::/36", "17816"}, + {"240e:3b4:1800::/34", "4134"}, + {"240e:979:8600::/35", "4134"}, + {"2602:fc1c:fa0::/44", "53356"}, + {"2605:cd40::/47", "14363"}, + {"2607:cd80:c000::/36", "6528"}, + {"2806:105e:1f::/42", "8151"}, + {"2a01:b747:800::/39", "714"}, + {"2a06:e040:5902::/34", "198507"}, + {"2a09:9180:fd::/48", "786"}, + {"2405:8a00:ab::/34", "55824"}, + {"2607:fc48:c28::/48", "40009"}, + {"2803:1040::/35", "263751"}, + {"2001:250:343c::/47", "138393"}, + {"2401:93c0:1::/44", "135834"}, + {"2408:8406:9000::/39", "4808"}, + {"240a:acb1::/32", "145899"}, + {"2620:171:25::/48", "42"}, + {"2801:1a6::/37", "271825"}, + {"2804:bd8:ec00::/35", "52838"}, + {"2001:4878:b007::/44", "12222"}, + {"2406:b200::/32", "9326"}, + {"240a:a3ad::/32", "143591"}, + {"2600:1404:d000::/48", "35994"}, + {"2801:80:3870::/48", "270308"}, + {"2804:4c28::/32", "267353"}, + {"2a00:a520::/32", "198570"}, + {"2a02:26f0:6301::/37", "20940"}, + {"240a:a0a5::/32", "142815"}, + {"2604:a00:17::/39", "19318"}, + {"2605:a404:962::/38", "33363"}, + {"2001:ac8:3a::/41", "9009"}, + {"2001:4828::/32", "16942"}, + {"2400:3980::/32", "2497"}, + {"2402:800:921d::/41", "7552"}, + {"2404:bf40:86c1::/48", "7545"}, + {"2806:20d:5030::/45", "32098"}, + {"2a01:8840:4::/47", "207266"}, + {"2001:559:842a::/48", "7016"}, + {"2409:8904:a740::/36", "24547"}, + {"2600:1409:c::/43", "35994"}, + {"2801:1be::/40", "19429"}, + {"2803:c600:20::/32", "27901"}, + {"2804:b18:85::/44", "52941"}, + {"2406:3a40::/32", "131677"}, + {"2406:fc00::/32", "45477"}, + {"2607:6100:1007::/44", "54380"}, + {"2607:f8f0:c00::/40", "16462"}, + {"2804:2144:309::/36", "52795"}, + {"2806:2f0:32c3::/42", "17072"}, + {"2a00:8a03:8000::/43", "28723"}, + {"2a12:74c0::/29", "400522"}, + {"2602:fe8c:0:10::/60", "2711"}, + {"2a0f:c440::/48", "212073"}, + {"2001:1250:e100::/44", "22894"}, + {"2402:800:b1c0::/42", "7552"}, + {"2a03:4440::/32", "62020"}, + {"2001:250:6407::/48", "23910"}, + {"2001:da8:2020::/46", "24357"}, + {"2408:8a05:6000::/47", "17816"}, + {"240e:9b:f024::/46", "140257"}, + {"2803:b920::/32", "266677"}, + {"2804:840:8300::/33", "262680"}, + {"2a02:26f7:d28d::/42", "20940"}, + {"2a03:96c0::/32", "29319"}, + {"2a09:cc80::/29", "35712"}, + {"2001:250:5809::/43", "24363"}, + {"2001:559:86c1::/48", "33491"}, + {"2605:c500::/32", "19515"}, + {"2606:3d40:2::/47", "400097"}, + {"2804:42f8::/32", "267540"}, + {"2a01:8840:c9::/48", "207266"}, + {"2602:fda6:302::/48", "398051"}, + {"2804:35e0::/36", "266312"}, + {"2804:70c0::/46", "270746"}, + {"2a0c:c9c2:ab::/29", "202414"}, + {"2403:c80::/32", "45062"}, + {"2407:4ac0:1001::/33", "142045"}, + {"240a:ad97::/32", "146129"}, + {"2a02:26f7:ed81::/46", "20940"}, + {"2a10:da00::/32", "34576"}, + {"2001:579:1c84::/39", "22773"}, + {"2408:8034::/32", "4837"}, + {"2602:fcc1::/36", "399204"}, + {"2402:800:5171::/44", "7552"}, + {"2409:8069:2908::/38", "9808"}, + {"2620:171:cd::/48", "715"}, + {"2a0a:25c0::/29", "42977"}, + {"2a0b:3b40::/29", "7"}, + {"2a0d:5300::/38", "135391"}, + {"2600:3503:6000::/32", "396998"}, + {"2602:fd92:900::/40", "174"}, + {"2607:9b00::/32", "30041"}, + {"2804:69d8::/32", "270295"}, + {"2a01:37:2000::/35", "8875"}, + {"2a04:9a00:1042::/45", "212157"}, + {"2a01:4d80::/32", "39702"}, + {"2a03:5480::/29", "35223"}, + {"2a0b:2d40::/32", "209135"}, + {"2001:559:d2::/48", "7922"}, + {"2600:140f:9000::/48", "9498"}, + {"2606:3380:100::/46", "53334"}, + {"2a02:6080::/32", "62214"}, + {"2001:559:c3eb::/48", "33668"}, + {"2001:67c:2efc::/48", "31152"}, + {"240e:d:1000::/32", "4134"}, + {"2001:67c:6ac::/48", "201742"}, + {"2001:15c8::/32", "20495"}, + {"2604:5400:4000::/38", "11776"}, + {"2803:1240:65::/34", "27855"}, + {"2804:2488:9000::/33", "264228"}, + {"2a00:1c28::/29", "20764"}, + {"2a05:57c0::/36", "31259"}, + {"2a0d:6180::/29", "200899"}, + {"2c0f:f570::/32", "327980"}, + {"2001:df6:ca00::/48", "136026"}, + {"2405:1400::/32", "38176"}, + {"2605:cdc0:ffff::/48", "398088"}, + {"2a02:4e0:2000::/41", "16135"}, + {"2001:e60:d300::/42", "4766"}, + {"2a04:6440::/29", "35368"}, + {"2c0f:f070::/32", "36912"}, + {"2406:2580::/32", "397086"}, + {"2a02:fb0::/32", "5503"}, + {"2a02:26f7:bc49::/42", "20940"}, + {"2001:559:513::/48", "7015"}, + {"2403:8300:82bf::/48", "24442"}, + {"2405:7400::/32", "9246"}, + {"240e:3b2:ec00::/35", "140314"}, + {"2600:370f:3183::/41", "32261"}, + {"2800:4d0:24a0::/32", "7004"}, + {"2001:559:c25f::/42", "33490"}, + {"2001:559:c4eb::/48", "33662"}, + {"2001:579:90b0::/41", "22773"}, + {"2001:b011:ae00::/33", "3462"}, + {"2401:a580:4::/47", "55403"}, + {"2409:8924:a300::/37", "56046"}, + {"240e:974:ec00::/30", "4134"}, + {"2806:2f0:2061::/48", "22884"}, + {"2a01:c50f:f900::/40", "12479"}, + {"2a02:26f7:c644::/47", "36183"}, + {"2a03:de40::/32", "21057"}, + {"240a:ac6d::/32", "145831"}, + {"2a02:e980:ed::/43", "19551"}, + {"2001:559:3fa::/48", "33491"}, + {"240a:ad96::/32", "146128"}, + {"2804:37d8:3000::/32", "266439"}, + {"2a03:90c0:9981::/48", "199524"}, + {"2404:e740::/46", "139195"}, + {"240e:838:40::/44", "140647"}, + {"2804:521c:2::/48", "268495"}, + {"2c0f:fdd0::/32", "37358"}, + {"2804:4014::/32", "265933"}, + {"2a0c:7fc0::/40", "43997"}, + {"2806:2f0:7243::/42", "17072"}, + {"2a04:f400:3001::/48", "15404"}, + {"2405:17c0::/47", "139331"}, + {"2409:4054:1000::/34", "55836"}, + {"240a:ac0a::/32", "145732"}, + {"2607:700:1700::/32", "22343"}, + {"2800:bf0:3463::/40", "27947"}, + {"2804:544c::/32", "268641"}, + {"2a00:bba0::/32", "207375"}, + {"2001:678:c40::/48", "207754"}, + {"2403:bf00::/32", "7616"}, + {"2600:1413:2001::/36", "20940"}, + {"2801:1c:6800::/48", "13489"}, + {"2a02:26f7:bd90::/48", "36183"}, + {"240a:a974::/32", "145070"}, + {"240a:addf::/32", "146201"}, + {"2a03:98a0::/32", "203449"}, + {"2a04:b907:1::/48", "16509"}, + {"2a10:ee40::/29", "47787"}, + {"2001:1248:9acf::/43", "11172"}, + {"2404:ba80::/32", "38517"}, + {"240a:a6c8::/32", "144386"}, + {"240e:37e:1a00::/34", "140330"}, + {"240e:45c:7600::/40", "131285"}, + {"2600:140b:7801::/38", "20940"}, + {"2a04:8b40::/29", "62126"}, + {"2a11:e380::/29", "49778"}, + {"2001:4c8:110b::/43", "15290"}, + {"2400:58a0::/32", "38008"}, + {"2a0e:b107:23::/48", "44024"}, + {"2001:6e8::/29", "16086"}, + {"2a02:26f7:e205::/46", "20940"}, + {"2a10:5780::/29", "37478"}, + {"2406:f40::/32", "135697"}, + {"2408:8459:6e10::/42", "17623"}, + {"2409:895a:8400::/33", "56040"}, + {"240b:4003:fc00::/48", "45102"}, + {"2600:180c:3002::/33", "16552"}, + {"2804:500c::/32", "268366"}, + {"2a02:2870:8000::/33", "60781"}, + {"2001:67c:2988::/47", "58151"}, + {"2408:8459:3e50::/33", "17816"}, + {"2804:396c::/32", "262846"}, + {"2a07:b6c0::/29", "50782"}, + {"2001:67c:1b30::/48", "15415"}, + {"240a:a8a5::/32", "144863"}, + {"240e:264:3000::/32", "4134"}, + {"2600:1488:6141::/43", "20940"}, + {"2604:61c0:5001::/32", "29831"}, + {"2804:6074::/32", "269168"}, + {"2401:3c0:21e::/48", "45528"}, + {"2806:230:2035::/48", "11888"}, + {"2a01:c50e:e610::/36", "12479"}, + {"2a0c:b641:130::/44", "142438"}, + {"2001:4188:2::/48", "49666"}, + {"2600:6c38:87b::/45", "20115"}, + {"2a0f:4a00::/29", "29066"}, + {"2001:67c:211c::/48", "8447"}, + {"2001:df5:9780::/48", "55736"}, + {"2001:1248:9a3f::/41", "11172"}, + {"2409:8052:3000::/47", "56047"}, + {"2606:900::/32", "12261"}, + {"2804:3f10:6203::/35", "262566"}, + {"2806:32d:b000::/33", "28431"}, + {"2a01:6780:8::/48", "12586"}, + {"2a0a:5c80::/29", "47926"}, + {"2001:67c:192c::/48", "24961"}, + {"2402:e380:31a::/48", "141376"}, + {"2409:8754::/34", "9808"}, + {"2600:370f:7563::/45", "32261"}, + {"2804:45fc:138::/32", "266959"}, + {"2a06:3b00::/48", "50007"}, + {"240a:a0e4::/32", "142878"}, + {"2600:1480:b801::/37", "20940"}, + {"2600:370e:7100::/43", "32261"}, + {"2600:370f:3445::/44", "32261"}, + {"2607:b680::/32", "174"}, + {"2620:1ec:a92::/48", "8068"}, + {"2804:42f4::/32", "267539"}, + {"2400:a980:7d00::/32", "133111"}, + {"2401:7500:300::/40", "33480"}, + {"2406:840:380::/48", "139317"}, + {"2408:8656:3900::/38", "17816"}, + {"2a03:2880:f06b::/45", "32934"}, + {"2001:480:1611::/41", "668"}, + {"2401:4900:4620::/41", "45609"}, + {"2408:844b::/29", "4837"}, + {"2409:805f:100::/36", "9808"}, + {"2606:9500:202::/40", "393423"}, + {"2400:3f60:1::/46", "138467"}, + {"2602:ffc5:10c::/48", "40676"}, + {"2801:80:2380::/48", "267322"}, + {"2804:4ba4::/32", "267320"}, + {"2a01:b740:a0a::/48", "6185"}, + {"2620:11b:4006::/47", "47870"}, + {"2804:c94::/32", "262720"}, + {"2408:8459:4230::/41", "17622"}, + {"2409:8915:8c00::/39", "56044"}, + {"240a:aa8b::/32", "145349"}, + {"2001:559:856d::/48", "33287"}, + {"2001:559:8673::/45", "7015"}, + {"2a02:26f7:c68d::/42", "20940"}, + {"2a07:b2c0::/32", "56911"}, + {"2001:559:739::/48", "33287"}, + {"2001:da8:276::/44", "23910"}, + {"2400:5200:401::/48", "55410"}, + {"2409:8904:36a0::/39", "24547"}, + {"2800:160:1948::/42", "14259"}, + {"2a00:efc0::/32", "29394"}, + {"240e:dd:d800::/37", "139220"}, + {"2600:9000:21e6::/44", "16509"}, + {"2602:ff3b::/36", "395723"}, + {"2607:f6f0:5001::/48", "394749"}, + {"2a02:ee80:4106::/44", "3573"}, + {"2400:6280:10c::/48", "138911"}, + {"240e:108:10f0::/48", "134760"}, + {"2604:d600:c12::/47", "32098"}, + {"2620:10d::/44", "33503"}, + {"2a09:d180::/29", "35710"}, + {"2001:559:7ed::/46", "7016"}, + {"2404:c600::/32", "38195"}, + {"2600:1404:6::/42", "20940"}, + {"2803:d910::/32", "272011"}, + {"2804:41c8::/32", "267456"}, + {"2600:100a:f010::/40", "22394"}, + {"2620:9e:6000::/47", "3970"}, + {"2620:136:3000::/40", "18874"}, + {"2a0e:fd45:40f3::/48", "201106"}, + {"2001:67c:2548::/48", "6782"}, + {"2404:2ec0::/44", "131675"}, + {"2408:8459:ca10::/42", "17623"}, + {"2804:127c::/32", "263479"}, + {"2804:1638::/32", "263276"}, + {"2001:e30:1111::/48", "2697"}, + {"2803:ec40::/32", "263792"}, + {"2401:4900:5d6a::/48", "45609"}, + {"2600:1017:b8e0::/33", "6167"}, + {"2600:40f0:1130::/32", "701"}, + {"2603:fdb0::/25", "397165"}, + {"2001:559:c264::/48", "33652"}, + {"2001:df7:a900::/48", "135987"}, + {"2409:8055:60::/48", "9808"}, + {"240a:a719::/32", "144467"}, + {"2620:104:6000::/48", "2386"}, + {"2803:3680::/32", "27851"}, + {"2a0d:9d00::/29", "50954"}, + {"2001:559:83e0::/48", "33652"}, + {"2602:ff0b::/36", "11071"}, + {"2001:579:b80c::/43", "22773"}, + {"240a:a482::/32", "143804"}, + {"2c0f:2800::/32", "328543"}, + {"2001:559:81b9::/48", "7015"}, + {"2605:2b80::/32", "16832"}, + {"2800:484:2700::/40", "10620"}, + {"2806:2f0:4583::/42", "17072"}, + {"2001:559:86cf::/48", "33657"}, + {"240b:4009::/32", "45102"}, + {"2803:7260:21::/32", "52238"}, + {"2804:2830::/32", "263946"}, + {"2a00:1cc8::/30", "15605"}, + {"2a01:5b40:ac3::/48", "208045"}, + {"2a10:d700::/29", "44874"}, + {"2406:3003:1015::/48", "4657"}, + {"240a:a738::/32", "144498"}, + {"2600:1002:6010::/32", "22394"}, + {"2804:59f8::/32", "268737"}, + {"2806:20d:5220::/47", "32098"}, + {"2a05:f240::/29", "1828"}, + {"2001:559:c228::/48", "33491"}, + {"2804:6a48::/32", "270324"}, + {"2a02:2e02:3a90::/39", "12479"}, + {"2001:559:c027::/48", "33652"}, + {"240e:f9::/33", "4134"}, + {"2600:1408:e800::/48", "35994"}, + {"2804:4994::/32", "267191"}, + {"2001:df6:c080::/48", "141822"}, + {"2001:1450::/32", "5602"}, + {"2403:580::/38", "134715"}, + {"2409:8904::/34", "24547"}, + {"2620:79:e000::/48", "398065"}, + {"2804:1b2:f102::/47", "10429"}, + {"2001:559:853e::/48", "7922"}, + {"2602:feda:b60::/46", "146950"}, + {"2606:9e40::/32", "19523"}, + {"2804:236c:d000::/34", "264161"}, + {"2a02:7040::/32", "199236"}, + {"2402:e300::/46", "131706"}, + {"2405:d540::/32", "140223"}, + {"2605:ab00::/32", "32277"}, + {"2607:f170:20::/44", "13768"}, + {"2804:38e8::/32", "266509"}, + {"2a00:6bc0::/32", "6855"}, + {"2a0a:1d00::/32", "201401"}, + {"2a00:fb40::/32", "198792"}, + {"2001:df3:4300::/48", "133616"}, + {"240a:a728::/32", "144482"}, + {"240a:abb1::/32", "145643"}, + {"2a02:dc80::/29", "13227"}, + {"2001:44b8:2043::/45", "7545"}, + {"2400:a980:1fff::/48", "133515"}, + {"2409:8002:2a00::/40", "9808"}, + {"240a:a5ea::/32", "144164"}, + {"2a00:edc0:1000::/45", "62597"}, + {"2a09:5e00::/29", "209350"}, + {"2001:559:80b6::/48", "33652"}, + {"2001:2000:4000::/40", "3301"}, + {"240a:a2e5::/32", "143391"}, + {"240a:abae::/32", "145640"}, + {"2600:40fc:1017::/30", "701"}, + {"2a00:b2c0:fade::/48", "2611"}, + {"2a01:488:bb0f::/48", "397516"}, + {"2a02:26f7:d708::/47", "36183"}, + {"2001:559:867f::/48", "33652"}, + {"2405:8a00:8000::/48", "55847"}, + {"2602:fce9::/36", "62943"}, + {"2605:a000:1e00::/40", "11955"}, + {"2606:6480::/32", "22113"}, + {"2a0d:580::/32", "206767"}, + {"2001:559:8424::/48", "7922"}, + {"2001:67c:1718::/48", "2263"}, + {"2001:df5:4080::/48", "135839"}, + {"2600:9000:245a::/47", "16509"}, + {"2001:559:c2c6::/48", "33657"}, + {"2408:8456:7600::/42", "17622"}, + {"2409:8904:2740::/36", "24547"}, + {"2a0b:4340:b0::/48", "205058"}, + {"2408:840c:2700::/40", "17621"}, + {"2803:c2c0::/32", "264836"}, + {"2804:3158::/32", "265008"}, + {"2001:559:7b6::/48", "33287"}, + {"2001:67c:1b24::/48", "30931"}, + {"2600:5c00:140::/48", "11351"}, + {"2606:2800:4adc::/46", "15133"}, + {"2600:380:d820::/39", "7018"}, + {"2803:5440:4067::/44", "264738"}, + {"2402:8100:b::/48", "45271"}, + {"2405:201:3200::/39", "55836"}, + {"2a00:a180::/32", "51922"}, + {"2a01:630::/32", "39839"}, + {"2a0a:2780::/31", "206774"}, + {"2001:559:37d::/48", "21508"}, + {"2408:8256:398d::/48", "17816"}, + {"2620:1ec:a93::/39", "8075"}, + {"2a02:26f7:b900::/48", "36183"}, + {"2a02:26f7:c701::/46", "20940"}, + {"2a07:8c00::/32", "208692"}, + {"2001:559:837b::/48", "33652"}, + {"2001:df5:3100::/48", "137854"}, + {"2404:98c0:10::/32", "135259"}, + {"2602:ff87::/36", "36243"}, + {"2804:ccc::/32", "262827"}, + {"2804:269c:fe50::/46", "47065"}, + {"2a00:f7a0:101::/32", "21277"}, + {"2a02:26f7:c5c1::/46", "20940"}, + {"2a0a:3740::/29", "1257"}, + {"2a11:a80::/29", "208861"}, + {"2800:68:2c::/43", "61468"}, + {"2804:14c:5be1::/46", "28573"}, + {"2a01:b000::/44", "35266"}, + {"2a01:ce88::/32", "51964"}, + {"2001:559:c26f::/48", "33662"}, + {"2001:678:16c::/48", "44872"}, + {"2408:8406:2400::/39", "4808"}, + {"240e:45c:3700::/40", "140528"}, + {"2804:13b4::/32", "262288"}, + {"2001:2f0::/32", "7514"}, + {"2607:fb10:5082::/47", "55095"}, + {"2620:6e:8000::/48", "21680"}, + {"2806:2f4:800::/40", "265540"}, + {"2a00:c120::/32", "60331"}, + {"2a02:958::/32", "29008"}, + {"2a0e:97c3:5a2::/48", "20473"}, + {"2a11:3500::/29", "211344"}, + {"2600:370f:74ca::/42", "32261"}, + {"2605:fb80:f000::/48", "50131"}, + {"2804:5864::/32", "268126"}, + {"2a0e:b107:9d0::/46", "213262"}, + {"2001:559:c3ff::/48", "33489"}, + {"2408:8456:3250::/39", "17816"}, + {"2602:808:b001::/48", "40417"}, + {"2804:74a4::/32", "270994"}, + {"2a01:4d60::/32", "30870"}, + {"2a05:3580:f800::/39", "35807"}, + {"2a03:90c0:3f0::/37", "199524"}, + {"2a0f:4507:8000::/33", "204506"}, + {"2001:67c:f8::/48", "49125"}, + {"240a:a699::/32", "144339"}, + {"2804:3508::/32", "265496"}, + {"2001:67c:568::/48", "57533"}, + {"2600:6c38:c0f::/43", "20115"}, + {"2806:3a9:400::/38", "265626"}, + {"2a01:6e80:ffff::/48", "47223"}, + {"2a02:26f0:df00::/48", "36183"}, + {"2001:4870:e00c::/31", "3549"}, + {"240e:3b2:2c00::/35", "134774"}, + {"2602:ff89::/38", "26269"}, + {"2804:712c::/32", "270772"}, + {"2a02:26f7:d741::/46", "20940"}, + {"2a05:8945::/30", "8468"}, + {"2a0c:6900::/32", "208091"}, + {"2001:559:4a2::/48", "33491"}, + {"2001:67c:14b8::/48", "12655"}, + {"2409:8000:2100::/37", "9808"}, + {"2409:8924:6100::/38", "56046"}, + {"2409:8924:c300::/37", "56046"}, + {"2600:381:3900::/40", "13965"}, + {"2a0e:fd45:b80::/41", "44103"}, + {"2400:6280:13c::/48", "132280"}, + {"2400:cc00:4000::/32", "17477"}, + {"2607:f220:600::/44", "26810"}, + {"2607:ffa0:2::/32", "19355"}, + {"2a07:9cc5::/32", "209589"}, + {"2001:559:8102::/48", "33650"}, + {"2001:67c:220c::/48", "48155"}, + {"2402:5c80::/32", "132296"}, + {"2606:8100::/32", "21817"}, + {"2a05:d01c::/36", "16509"}, + {"2001:559:80e9::/48", "33657"}, + {"2405:203:99b::/45", "55836"}, + {"2408:8459:5830::/41", "17622"}, + {"2600:6c39:226::/44", "20115"}, + {"2604:af80:c48::/35", "18859"}, + {"2a01:b480::/32", "35362"}, + {"2001:559:84c3::/48", "7922"}, + {"2408:81a3:ca66::/48", "140707"}, + {"2804:49c:4208::/48", "7162"}, + {"2804:34d8::/32", "265484"}, + {"2a02:788:1::19/29", "12843"}, + {"2a02:26f7:ee84::/48", "36183"}, + {"2001:5d8::/32", "3742"}, + {"2406:8600:ef69::/48", "23879"}, + {"240e:981:7000::/40", "140061"}, + {"2603:90f5:1500::/40", "33363"}, + {"2803:f500::/32", "60022"}, + {"2a02:26f7:f584::/48", "36183"}, + {"2001:559:c03d::/48", "33491"}, + {"2001:df5:dd80::/48", "135192"}, + {"2607:2f00:15::/44", "12025"}, + {"2607:f2f8::/32", "25795"}, + {"2a00:67c0::/32", "57660"}, + {"2a03:5640:f530::/46", "16509"}, + {"2a06:bcc0:1::/45", "203724"}, + {"2602:fc62:ff::/48", "399760"}, + {"2804:14d:b291::/41", "28573"}, + {"2806:2f0:2482::/48", "17072"}, + {"2a03:20::/32", "200561"}, + {"2a05:f480:1000::/34", "20473"}, + {"2001:559:2e8::/48", "33652"}, + {"2001:67c:2950::/48", "3303"}, + {"2001:df1:3e00::/48", "134868"}, + {"2402:8100:25c0::/43", "45271"}, + {"2403:e000:fec1::/39", "9555"}, + {"2404:0:10a7::/41", "17709"}, + {"2408:8957:600::/40", "17622"}, + {"2605:62c0::/32", "395349"}, + {"2620:36:8000::/48", "33246"}, + {"2001:678:6b8::/48", "209869"}, + {"2402:800:931d::/41", "7552"}, + {"2402:8100:27c2::/44", "55644"}, + {"2408:8957:8700::/40", "17816"}, + {"2600:1402:8801::/35", "20940"}, + {"2607:4000:500::/40", "64247"}, + {"2620:107::/40", "11318"}, + {"2a0b:3b00::/29", "50628"}, + {"2600:9000:117c::/48", "16509"}, + {"2804:701c::/32", "270706"}, + {"2a03:5a00:9::/48", "59738"}, + {"2a10:9c00::/29", "30823"}, + {"2001:978:5302::/37", "174"}, + {"2406:d500:14::/48", "136557"}, + {"2801:121::/48", "19429"}, + {"2a02:d38::/29", "50785"}, + {"2a02:8300::/28", "16019"}, + {"2a02:d180::/29", "39090"}, + {"2a06:e881:53f4::/44", "209859"}, + {"2404:c140::/39", "138997"}, + {"2602:fed2:31::/48", "49134"}, + {"2610:e0:5000::/32", "2572"}, + {"2a06:4740::/29", "207627"}, + {"2001:67c:6d8::/48", "62359"}, + {"2001:c10:ff07::/44", "7473"}, + {"2405:a3c0::/32", "139908"}, + {"240a:a971::/32", "145067"}, + {"2604:5400::/35", "11776"}, + {"2806:1040:fd::/32", "8151"}, + {"2a0f:e842::/32", "60781"}, + {"2409:8335::/21", "9808"}, + {"2804:6154::/32", "269228"}, + {"2a01:3a0::/29", "3308"}, + {"2001:559:221::/45", "33491"}, + {"2001:559:83d9::/46", "33287"}, + {"2405:58c0:3400::/38", "133101"}, + {"2409:8020:d1::/35", "56046"}, + {"2620:101:d000::/45", "53582"}, + {"2800:1e0:1024::/41", "7195"}, + {"2804:1e48:9004::/33", "4809"}, + {"2402:800:567f::/40", "7552"}, + {"2408:840d:3800::/42", "17621"}, + {"240a:a3a6::/32", "143584"}, + {"240a:a909::/32", "144963"}, + {"2804:14d:a485::/43", "28573"}, + {"2a03:e140:35::/48", "56674"}, + {"2408:8956:a900::/40", "17816"}, + {"2605:380:19::/48", "42473"}, + {"2a02:26f7:f449::/42", "20940"}, + {"2a03:5640:f513::/44", "16509"}, + {"2a10:de80::/32", "211993"}, + {"2001:559:81f7::/48", "7922"}, + {"2001:1838:1009::/46", "23352"}, + {"2620:118:c000::/42", "237"}, + {"2804:37d8::/34", "266439"}, + {"2a01:7a5::/30", "29066"}, + {"2a10:1646::/31", "206330"}, + {"240a:a52f::/32", "143977"}, + {"2803:8240:2::/40", "52511"}, + {"2a0f:a40::/29", "399975"}, + {"2404:4200::/32", "24536"}, + {"2409:8d18::/31", "134810"}, + {"2600:140f:7000::/48", "9498"}, + {"2a00:14f8::/32", "21056"}, + {"2406:840:e360::/47", "149292"}, + {"2409:8904:2540::/38", "24547"}, + {"2605:dd40:8890::/39", "398549"}, + {"2a0d:5642:115::/48", "35487"}, + {"240a:a2fb::/32", "143413"}, + {"240a:af96::/32", "146640"}, + {"2606:6c00:120::/44", "35994"}, + {"2803:7200:8019::/45", "27696"}, + {"2804:6488::/32", "269433"}, + {"2a02:888:54::/40", "47794"}, + {"2a12:4944::/32", "212123"}, + {"2001:bf8::/32", "378"}, + {"2409:8c54:1840::/44", "9808"}, + {"2804:3d4:8::/43", "262401"}, + {"2a0b:7140::/48", "39378"}, + {"2c0f:ed00:110::/48", "328442"}, + {"2001:df2:5c00::/48", "133947"}, + {"240e:981:f000::/40", "134760"}, + {"2607:f740:e050::/48", "398748"}, + {"2a02:26f0:4201::/39", "20940"}, + {"2001:559:84ce::/48", "33659"}, + {"2400:e500:36::/44", "138322"}, + {"2404:4f80:320::/32", "58715"}, + {"2001:da8:d0::/38", "23910"}, + {"2409:8914:6600::/39", "56044"}, + {"240a:a253::/32", "143245"}, + {"240a:a37e::/32", "143544"}, + {"2600:1008:20::/33", "22394"}, + {"2801:17c::/44", "14080"}, + {"2a02:888:154::/33", "47794"}, + {"2001:559:83f8::/48", "13367"}, + {"2001:1388:8a64::/43", "6147"}, + {"2408:896e::/31", "4837"}, + {"2401:d800:d4e0::/39", "7552"}, + {"2402:df80::/32", "58473"}, + {"240a:aa61::/32", "145307"}, + {"2a02:ff80::/29", "34764"}, + {"2001:579:a00c::/41", "22773"}, + {"2804:1b1:9000::/34", "18881"}, + {"2804:829c::/32", "272529"}, + {"2806:2f0:2083::/43", "22884"}, + {"2a02:c18::/47", "15436"}, + {"2001:da8:4000::/45", "24353"}, + {"2001:df6:2e80::/48", "139504"}, + {"2409:8904:5cb0::/39", "24547"}, + {"2604:d600:130d::/43", "32098"}, + {"2604:f340:1::/46", "398736"}, + {"2804:16c4::/32", "61915"}, + {"2804:3b6c:c030::/35", "266148"}, + {"2806:20d:1607::/43", "32098"}, + {"2a02:26f7:b7c1::/46", "20940"}, + {"2a02:26f7:c804::/47", "36183"}, + {"2c0f:e938::/32", "328714"}, + {"2405:9800:b0::/41", "45430"}, + {"2600:5800:2b04::/48", "33363"}, + {"2a02:738::/32", "5588"}, + {"2001:559:c4b4::/44", "7922"}, + {"2405:7f00:a0a0::/39", "133414"}, + {"2804:3160::/46", "265010"}, + {"2a02:500::/33", "5538"}, + {"2a06:1301:4100::/48", "203004"}, + {"2001:559:5a1::/48", "33287"}, + {"240e:103:8b20::/44", "139462"}, + {"2001:67c:2924::/48", "211960"}, + {"240e:350:5c00::/34", "134419"}, + {"2604:f700:1::/48", "16509"}, + {"2801:1f:f000::/48", "19429"}, + {"2804:204:204::/47", "28186"}, + {"2804:1ecc::/32", "264448"}, + {"2804:73bc:5::/46", "270934"}, + {"2a01:4a0:2000::/46", "51191"}, + {"2400:6280:140::/48", "132280"}, + {"2408:8957:c9c0::/38", "17622"}, + {"240e:4:800::/32", "4134"}, + {"2600:141c:5001::/34", "20940"}, + {"2600:9000:10c1::/45", "16509"}, + {"2602:fed2:712c::/48", "20473"}, + {"2a0f:3cc0::/29", "207936"}, + {"2404:cf00:e001::/35", "38511"}, + {"2406:840:f40f::/48", "142111"}, + {"2409:8004:1900::/34", "24547"}, + {"2607:fa40:3::/32", "25899"}, + {"2620:84:6000::/48", "393936"}, + {"2806:2f0:21c0::/48", "17072"}, + {"2a05:4140:101::/46", "208753"}, + {"2001:250:84b::/48", "23910"}, + {"2001:1938:7001::/44", "33438"}, + {"240a:ac1d::/32", "145751"}, + {"2604:f980:4500::/44", "19957"}, + {"2a02:26f0:cf01::/35", "20940"}, + {"2a02:26f7:de44::/48", "36183"}, + {"2a02:2e02:1580::/42", "12479"}, + {"2c0f:4e00::/32", "328840"}, + {"2001:559:42b::/48", "21508"}, + {"2607:6100:100c::/48", "400053"}, + {"2a01:c50f:a7c0::/36", "12479"}, + {"2600:6c10:f484::/43", "20115"}, + {"2409:8010:1900::/34", "9808"}, + {"240a:a0ed::/32", "142887"}, + {"2806:230:2031::/48", "11888"}, + {"2001:67c:1758::/48", "8820"}, + {"2403:5800:2::/47", "4764"}, + {"2402:800:9bfe::/37", "7552"}, + {"240e:44::/33", "140061"}, + {"240e:37e::/35", "140329"}, + {"240e:67f:1000::/37", "140330"}, + {"2602:101:4004::/46", "20115"}, + {"2a01:c50f:98c0::/37", "12479"}, + {"2a09:4c0:57e1::/32", "58057"}, + {"2402:800:fd90::/42", "7552"}, + {"2a00:8860:500::/40", "207134"}, + {"2a00:a580::/32", "15557"}, + {"2a02:26f0:129::/43", "20940"}, + {"2a06:f740::/29", "203398"}, + {"2001:559:821e::/48", "7015"}, + {"2001:559:855d::/46", "7015"}, + {"2001:1248:8703::/45", "11172"}, + {"240e:c9:6000::/29", "4134"}, + {"240e:ff:e000::/36", "58466"}, + {"2600:6000:f0cb::/48", "11351"}, + {"2803:13e0::/32", "270072"}, + {"2a02:752:3::/29", "42708"}, + {"2a02:26f7:be4d::/46", "20940"}, + {"240a:a7f7::/32", "144689"}, + {"240e:44d:6f00::/42", "140345"}, + {"2604:380::/32", "237"}, + {"2804:4e64:c000::/34", "268258"}, + {"2a02:848::/32", "33868"}, + {"2a02:26f7:f811::/46", "20940"}, + {"2a03:6f00:9::/48", "9123"}, + {"2402:c800:ff72::/47", "18259"}, + {"2600:1488:a481::/39", "20940"}, + {"2605:2800:8301::/33", "6922"}, + {"2804:1448::/32", "263324"}, + {"2001:559:80cc::/48", "7725"}, + {"2400:cb00:34::/47", "13335"}, + {"240a:a279::/32", "143283"}, + {"240e:63:d000::/34", "140314"}, + {"2804:6fc8:8800::/35", "270684"}, + {"2001:559:5c::/47", "7922"}, + {"2001:559:1cd::/48", "20214"}, + {"2001:559:82e6::/48", "33662"}, + {"2001:559:866a::/48", "7922"}, + {"2606:2940::/32", "15017"}, + {"2a01:c50f:2c80::/39", "12479"}, + {"2a0d:2580:1000::/36", "213262"}, + {"2403:300:a26::/44", "714"}, + {"240e:264:2000::/36", "140330"}, + {"2804:204:306::/43", "28186"}, + {"2a02:888:804a::/45", "47794"}, + {"240a:a8ad::/32", "144871"}, + {"2604:880:11::/48", "54540"}, + {"2804:18:6810::/44", "10429"}, + {"2a00:1fc3::/32", "41209"}, + {"2001:559:c0d7::/48", "33652"}, + {"2409:8c70:3ac0::/43", "9808"}, + {"240e:472::/32", "4134"}, + {"2605:4040::/32", "46300"}, + {"2a0f:b300:2001::/46", "42072"}, + {"2001:67c:1090::/48", "199178"}, + {"2a04:5b80:300::/48", "202265"}, + {"2404:bc0:1::/48", "137735"}, + {"2404:bf40:8541::/42", "139084"}, + {"2800:bf0:3601::/40", "27947"}, + {"2a06:8147:cc9a::/48", "199364"}, + {"2404:4a40::/32", "138571"}, + {"2602:feb4:280::/44", "25961"}, + {"2a02:26f7:b989::/48", "20940"}, + {"2a11:3f80::/29", "204790"}, + {"2001:3c8:c10b::/48", "37932"}, + {"2602:fcf1::/36", "398998"}, + {"2804:17e8::/32", "28245"}, + {"2a03:fa80::/32", "15471"}, + {"2600:1f70:e000::/40", "16509"}, + {"2a06:11c0:5::/29", "31169"}, + {"2001:4b22:0:1::/44", "34288"}, + {"2405:6e00:2420::/43", "133612"}, + {"2a06:5a40::/29", "39650"}, + {"2a07:b941:e10::/42", "209103"}, + {"2a09:da40::/29", "211626"}, + {"2a0d:4140::/32", "31463"}, + {"2600:6c10:39::/45", "20115"}, + {"2a00:4802:2600::/44", "13124"}, + {"2a00:b701::/30", "51659"}, + {"2405:4803:2f8::/39", "18403"}, + {"2408:8956:e00::/40", "17622"}, + {"2409:8706::/28", "9808"}, + {"2409:8751:300::/37", "56047"}, + {"2600:140b:bc00::/48", "24319"}, + {"2606:b040:111::/40", "399726"}, + {"2a02:888:144::/46", "48695"}, + {"2a0e:46c4:2c21::/46", "137509"}, + {"2605:a401:82dc::/39", "33363"}, + {"2804:7ea0::/32", "271636"}, + {"2a0b:2640::/29", "208684"}, + {"2001:559:c45e::/48", "33287"}, + {"240e:44d:5980::/41", "4134"}, + {"2409:8054:3022::/45", "56040"}, + {"240a:a87b::/32", "144821"}, + {"2603:c025:4000::/35", "31898"}, + {"2607:fdc8::/44", "30036"}, + {"2a07:a905:fff0::/30", "46261"}, + {"2409:8052:1100::/37", "9808"}, + {"2404:3d00:40d8::/46", "3573"}, + {"2600:9000:2353::/45", "16509"}, + {"2a00:6520::/32", "48739"}, + {"2a0e:9480::/32", "32338"}, + {"2409:8904:8440::/39", "24547"}, + {"2600:5c01:2d39::/48", "20115"}, + {"2620:149:12::/41", "714"}, + {"2804:9c::/32", "262695"}, + {"2a00:f1c0::/32", "21267"}, + {"2a04:3e00:1000::/48", "50311"}, + {"2001:678:7f0::/48", "6730"}, + {"2408:8256:3789::/48", "17816"}, + {"2603:c012:c000::/36", "31898"}, + {"2607:fb10:7232::/32", "2906"}, + {"2607:fc58:3000:44::/64", "13536"}, + {"2a0b:4340:1501::/48", "48883"}, + {"2409:8027:2a04::/46", "9808"}, + {"2803:8e60::/32", "267914"}, + {"2a0a:4140::/29", "60111"}, + {"2a0e:8f02:2040::/44", "212746"}, + {"2a10:e800:2::/48", "50010"}, + {"2001:559:c1e5::/48", "13367"}, + {"2400:8b00:2280::/42", "45727"}, + {"2a00:f00::/32", "8359"}, + {"2605:6000:800::/31", "11427"}, + {"2620:0:5300::/44", "11131"}, + {"2803:d100:e040::/38", "52362"}, + {"2800:bf0:3ac1::/39", "27947"}, + {"2001:1248:8443::/45", "11172"}, + {"2001:44b8:4040::/47", "7545"}, + {"2600:6c21:1d::/46", "20115"}, + {"2607:fb10:7120::/41", "2906"}, + {"2a0f:b506:ff06::/43", "206313"}, + {"2406:2b00::/32", "4049"}, + {"2a03:2881:1b::/32", "32934"}, + {"2406:e000:36a::/43", "23655"}, + {"2607:1e00:1001::/32", "22489"}, + {"2607:fc48:c40::/48", "40009"}, + {"2804:4f74::/32", "268328"}, + {"2a02:26f7:f589::/46", "20940"}, + {"2409:8924:bb00::/37", "56046"}, + {"2409:8c1e:8fa0::/41", "9808"}, + {"2606:8e80:2800::/37", "32133"}, + {"2804:88c::/32", "52872"}, + {"2a00:1940::/32", "16353"}, + {"2a01:56f::/48", "51603"}, + {"2001:559:52::/47", "33651"}, + {"2001:559:c132::/48", "7922"}, + {"2600:5c00:21d2::/38", "20001"}, + {"2a01:c50f:91c0::/36", "12479"}, + {"2001:df5:4c00::/48", "132711"}, + {"240a:ac67::/32", "145825"}, + {"2603:f620::/27", "397165"}, + {"2804:1e38:2018::/33", "264415"}, + {"2a00:4802:2c40::/39", "8717"}, + {"2a02:9c8::/29", "5619"}, + {"2a02:26f7:d5c0::/48", "36183"}, + {"2001:559:c14e::/48", "33652"}, + {"2001:559:c4ca::/48", "33491"}, + {"2001:67c:4e4::/48", "204896"}, + {"2001:4408:4100::/38", "4758"}, + {"2408:8956:9500::/40", "17816"}, + {"2806:6::/28", "6503"}, + {"2a00:eb40::/32", "28889"}, + {"2a03:7380::/38", "13188"}, + {"2001:250:e0e::/43", "138375"}, + {"2407:a200::/32", "56123"}, + {"240a:ac9d::/32", "145879"}, + {"2600:1012:a020::/40", "22394"}, + {"2806:10a6:1e::/32", "8151"}, + {"2001:dce:8001::/38", "23869"}, + {"2001:1248:84d6::/44", "11172"}, + {"2409:8a5c:4e00::/26", "9808"}, + {"2604:880:273::/45", "29802"}, + {"2a02:26f7:cc85::/46", "20940"}, + {"2001:4878:a000::/48", "12222"}, + {"2402:3940::/32", "137252"}, + {"2408:8459:f700::/40", "17623"}, + {"240a:a201::/32", "143163"}, + {"240a:a209::/32", "143171"}, + {"2604:1380:3020::/33", "54825"}, + {"2606:ac80::/32", "393582"}, + {"2a02:940::/32", "21013"}, + {"2a02:ee80:42a9::/48", "3573"}, + {"2800:40:2b::/45", "16814"}, + {"2620:84:e000::/48", "29818"}, + {"240a:a4c6::/32", "143872"}, + {"240e:45c:6c00::/40", "131285"}, + {"2a02:26f7:eac8::/48", "36183"}, + {"2a03:60::/29", "60022"}, + {"240a:a95d::/32", "145047"}, + {"2600:1014:b140::/40", "22394"}, + {"2602:fd32:1::/48", "30496"}, + {"2804:5e30::/32", "269017"}, + {"2a02:26f7:ea41::/46", "20940"}, + {"2a0d:3842:1160::/48", "57629"}, + {"2a10:9100:9::/48", "209588"}, + {"2001:559:83c2::/48", "33659"}, + {"2408:80ea:7a90::/32", "17816"}, + {"2600:9000:2226::/44", "16509"}, + {"2606:6800:3000::/40", "394896"}, + {"2804:199c::/32", "61806"}, + {"2402:6800:740::/48", "38622"}, + {"2408:84f3:9240::/37", "17816"}, + {"240c:c984::/22", "23910"}, + {"2607:f9d0:f000::/40", "11979"}, + {"2001:559:826b::/48", "22909"}, + {"2001:579:b098::/41", "22773"}, + {"2804:70c0:10::/48", "270746"}, + {"2a02:ff0:1000::/40", "12735"}, + {"2a0e:97c0:740::/46", "208260"}, + {"2001:559:188::/48", "7922"}, + {"2804:7be8:c012::/34", "271462"}, + {"2400:3200::/32", "37963"}, + {"2604:2280:4000::/38", "53340"}, + {"2606:8c00:6::/48", "22995"}, + {"2804:9c0::/32", "262989"}, + {"2a02:26f7:ee45::/42", "20940"}, + {"2001:da8:300d::/48", "23910"}, + {"2620:119:5012::/45", "13443"}, + {"2001:1930:d00::/38", "11985"}, + {"2409:8060:8eb::/43", "9808"}, + {"2620:119:5009::/46", "13443"}, + {"2801:80:390::/48", "262382"}, + {"2804:5ab0::/32", "268789"}, + {"2a00:cb20::/35", "60266"}, + {"2a10:dc00::/29", "61193"}, + {"2409:894a:ad00::/31", "24445"}, + {"2a0e:46c6:700::/40", "34924"}, + {"2a0e:8100::/32", "60742"}, + {"2001:1248:883f::/41", "11172"}, + {"2402:28c0:ffae::/48", "137910"}, + {"2404:7840:1::/46", "138638"}, + {"240a:a100::/32", "142906"}, + {"240e:108:1161::/48", "138982"}, + {"2a02:5120::/32", "1257"}, + {"2a0d:4d40:12::/45", "50630"}, + {"2001:218:2300::/35", "2914"}, + {"2001:500:8d::/48", "26710"}, + {"2001:510:20d::/39", "376"}, + {"2001:559:207::/48", "33652"}, + {"2400:9600:8800::/48", "4812"}, + {"240a:a841::/32", "144763"}, + {"2605:8bc0:50::/44", "26695"}, + {"2800:160:11b5::/41", "14259"}, + {"2804:3714::/32", "266388"}, + {"2804:4e84::/32", "268266"}, + {"2c0f:f608:4000::/36", "21351"}, + {"2409:8c1e:27b0::/33", "9808"}, + {"2a0b:4d07:601::/46", "44239"}, + {"2001:44b8:603e::/41", "4739"}, + {"2400:a800::/32", "2514"}, + {"2605:9d80:9061::/48", "4809"}, + {"2a02:26f7:e0cd::/42", "20940"}, + {"2001:550:b02::/37", "174"}, + {"2620:11f:a008::/48", "62491"}, + {"2001:1270:3001::/36", "22908"}, + {"2405:b900:1::/44", "55701"}, + {"2600:1015:b1e0::/33", "6167"}, + {"2607:f380:804::/48", "257"}, + {"2802:0:13::/44", "18747"}, + {"2803:eb80::/32", "61493"}, + {"2a03:efc0:1500::/40", "33438"}, + {"2a0b:6a00::/29", "207056"}, + {"2a10:1040::/32", "59589"}, + {"2001:df1:2100::/48", "141671"}, + {"2804:52bc::/32", "268538"}, + {"2a07:b800::/29", "44066"}, + {"2a10:9540::/29", "211784"}, + {"2001:559:466::/48", "33659"}, + {"240a:a894::/32", "144846"}, + {"2a02:26f7:f044::/48", "36183"}, + {"2001:67c:1754::/48", "201456"}, + {"2806:2f0:5041::/46", "17072"}, + {"2a00:1d36:1200::/39", "47331"}, + {"2a01:89c0::/32", "25428"}, + {"2a04:6a00:d4::/48", "43460"}, + {"2a07:9443::/32", "205055"}, + {"2401:ee00:131::/38", "23951"}, + {"2405:200::/39", "55836"}, + {"240a:af3f::/32", "146553"}, + {"2603:c0fc::/40", "54253"}, + {"2a01:5c40:3::/48", "6807"}, + {"2400:a140:ffff::/48", "131964"}, + {"2409:8053:3100::/37", "9808"}, + {"2602:fc35::/36", "399285"}, + {"2620:136:4000::/44", "19694"}, + {"2804:2e4:8001::/33", "53234"}, + {"2001:67c:1008::/48", "42385"}, + {"2400:9800:7::/44", "24203"}, + {"240a:ac5e::/32", "145816"}, + {"2803:b9e0::/32", "270024"}, + {"2a02:26f7:c78d::/42", "20940"}, + {"2a06:fec0:3203::/48", "205476"}, + {"2a09:a040::/29", "25486"}, + {"2001:578:13f::/36", "22773"}, + {"2001:678:2::/48", "31529"}, + {"240a:ae15::/32", "146255"}, + {"240a:af04::/32", "146494"}, + {"240e:45c:7800::/32", "131285"}, + {"2a00:c700:8000::/34", "24645"}, + {"2a02:449::/32", "34146"}, + {"2a02:26f7:b60c::/48", "36183"}, + {"2a0b:4342:3000::/36", "57695"}, + {"2a10:e400::/29", "39810"}, + {"2001:579:5a54::/44", "22773"}, + {"2402:9800:4000::/48", "131117"}, + {"2406:b400:f10::/48", "18209"}, + {"2600:1003:b058::/45", "6167"}, + {"2602:feda:d40::/44", "38136"}, + {"2a00:edc0:1007::/48", "395403"}, + {"2a04:4e40:8200::/48", "54113"}, + {"2001:559:7e9::/48", "33657"}, + {"2408:80ea:64c0::/38", "17816"}, + {"2409:8914:4800::/34", "56044"}, + {"2607:fe10:3100::/32", "11796"}, + {"2804:1dac:400::/32", "264385"}, + {"2804:5bb8::/42", "268865"}, + {"2804:5de0::/32", "268998"}, + {"2804:6604:8100::/33", "269528"}, + {"2804:667c::/32", "269563"}, + {"2a02:348:1002::/32", "35470"}, + {"2a02:26f7:d840::/48", "36183"}, + {"2a02:7c00::/32", "21060"}, + {"2001:559:81ee::/48", "33287"}, + {"2001:678:f24::/48", "211514"}, + {"2806:211::/32", "28539"}, + {"2001:67c:2ed8::/48", "6766"}, + {"2400:8800:1e8f::/48", "7262"}, + {"2406:ec40::/32", "134469"}, + {"2407:ff80:2000::/32", "135881"}, + {"240e:878:200::/39", "137689"}, + {"2804:cf4::/32", "52579"}, + {"2a02:26f7:bc88::/48", "36183"}, + {"2001:559:5f2::/45", "7922"}, + {"2606:3c80:a400::/35", "33582"}, + {"2804:214:9::/43", "26615"}, + {"2804:7b14::/32", "271409"}, + {"2a05:8280::/32", "202448"}, + {"2a0c:7e40:b397::/48", "20473"}, + {"2a0c:b641:540::/44", "210546"}, + {"2a0e:7400::/29", "39305"}, + {"2001:4d60::/32", "1126"}, + {"2408:8956:e600::/40", "17622"}, + {"2409:8b79::/29", "9808"}, + {"2620:91:c000::/47", "54900"}, + {"2a05:1500:600::/36", "48635"}, + {"2402:3a80:38::/46", "38266"}, + {"2606:ae80:1440::/43", "26762"}, + {"2804:30c4:2000::/32", "264973"}, + {"2a0b:b87:ff13::/48", "210632"}, + {"2c0f:ed38::/35", "328437"}, + {"2404:1a0:2009::/43", "24334"}, + {"2a00:4120:8005::/48", "210587"}, + {"2a02:26f7:f205::/46", "20940"}, + {"2a0c:b340:2::/29", "206262"}, + {"2605:7700::/48", "36024"}, + {"2401:d800:2c10::/42", "7552"}, + {"2402:800:bdb0::/41", "7552"}, + {"2409:803d:2c00::/25", "9808"}, + {"240a:af79::/32", "146611"}, + {"2804:104c:6400::/40", "263629"}, + {"2a10:3240::/30", "208256"}, + {"2001:559:804c::/48", "21508"}, + {"240e:978:8000::/40", "137702"}, + {"2600:4c00:80::/41", "63410"}, + {"2605:1100::/32", "29953"}, + {"2a02:26f0:ad01::/38", "20940"}, + {"2a02:26f7:f345::/46", "20940"}, + {"2a02:6560::/32", "201932"}, + {"2001:1248:5f59::/42", "11172"}, + {"2001:559:8063::/48", "33650"}, + {"2001:67c:2764::/48", "12552"}, + {"2405:7600:4000::/35", "23956"}, + {"2602:fed2:711d::/48", "140244"}, + {"2804:7dd0:2100::/32", "271584"}, + {"2a00:a900:7aff::/32", "60819"}, + {"2a02:26f7:e649::/42", "20940"}, + {"2604:c580::/32", "55230"}, + {"2804:6c6c::/32", "270467"}, + {"2a00:8900::/32", "41625"}, + {"2001:559:2ef::/48", "33652"}, + {"2400:2000:f::/43", "20940"}, + {"2800:160:1676::/44", "14259"}, + {"2a03:db80:4c81::/46", "680"}, + {"2001:df5:f500::/48", "133296"}, + {"240a:a653::/32", "144269"}, + {"2803:32a0::/32", "266858"}, + {"2804:90c::/40", "262617"}, + {"2804:43f0::/32", "267600"}, + {"2a0e:bfc0::/29", "211619"}, + {"2a11:db00::/29", "204790"}, + {"240a:a65e::/32", "144280"}, + {"2804:854:c::/32", "28368"}, + {"2a00:4460::/32", "199374"}, + {"2a02:2e02:8fb0::/41", "12479"}, + {"2405:3bc0::/48", "139182"}, + {"2408:8456:400::/42", "17622"}, + {"2600:9000:11bf::/48", "16509"}, + {"2801:1fc:26::/48", "27951"}, + {"2a00:b320::/48", "9009"}, + {"2a02:26f7:3a::/48", "36183"}, + {"2a02:26f7:e785::/46", "20940"}, + {"2a06:e881:260c::/48", "206740"}, + {"2001:460:7c::/40", "3561"}, + {"2409:8055:20::/48", "9808"}, + {"2800:200:b3b0::/41", "12252"}, + {"2800:bf0:8290::/48", "27947"}, + {"2804:7ab0::/32", "271386"}, + {"2806:230:300c::/48", "265594"}, + {"2401:d800:b120::/41", "7552"}, + {"2407:7c0:9422::/48", "9422"}, + {"2001:559:5f::/42", "7922"}, + {"2600:1400:12::/36", "20940"}, + {"2a00:11c0:9020::/48", "42473"}, + {"2406:f040:131::/48", "131775"}, + {"2602:fe38::/36", "17177"}, + {"2804:1ac:400::/33", "53175"}, + {"2804:6238::/32", "269283"}, + {"2607:ff18::/36", "40630"}, + {"2801:80:37c0::/48", "269560"}, + {"2803:5160::/39", "269730"}, + {"2804:5e2c::/36", "269016"}, + {"2001:559:359::/46", "33659"}, + {"2401:d800:5ec0::/42", "7552"}, + {"2408:8956:9600::/40", "17622"}, + {"240a:abb5::/32", "145647"}, + {"2800:9e0::/32", "26505"}, + {"2804:2ab8::/44", "53180"}, + {"2a10:86c0::/29", "211850"}, + {"2804:bb4::/38", "52812"}, + {"2806:2f0:94c0::/39", "17072"}, + {"2802:3:2::/44", "18747"}, + {"2804:43f4:30::/41", "267601"}, + {"2001:418:1430:100::/56", "20940"}, + {"2001:559:5a9::/48", "33491"}, + {"2001:1248:9a8d::/43", "11172"}, + {"2403:f4c0::/48", "4847"}, + {"2408:8459:9250::/37", "17816"}, + {"240a:a323::/32", "143453"}, + {"240a:a469::/32", "143779"}, + {"240a:a6be::/32", "144376"}, + {"240e:930::/32", "134420"}, + {"2a02:2e02:3180::/36", "12479"}, + {"2a02:6a80::/33", "3245"}, + {"2001:14c0::/32", "8520"}, + {"2404:3d00:4128::/46", "3573"}, + {"2406:daa0:c040::/44", "16509"}, + {"2804:58e0::/32", "268155"}, + {"2a02:26f7:b809::/42", "20940"}, + {"2a02:26f7:bfcc::/48", "36183"}, + {"2409:8055:3035::/41", "56040"}, + {"2600:9c0f::/32", "7979"}, + {"2605:fb80:e000::/36", "16584"}, + {"2a00:b404::/32", "205867"}, + {"2a10:7340::/29", "52126"}, + {"2408:8244:1200::/32", "4837"}, + {"2409:8055:306d::/43", "56040"}, + {"2620:101:f000::/47", "12093"}, + {"2a01:4f80::/29", "51053"}, + {"2a01:9700:1870::/32", "8376"}, + {"2a05:5180::/47", "211262"}, + {"2a0e:d380::/48", "203566"}, + {"2001:250:859::/48", "23910"}, + {"2804:2cfc::/32", "265255"}, + {"2a0f:5707:ab2a::/48", "53356"}, + {"2001:1938:2203::/39", "33438"}, + {"2406:840:ac10::/44", "139317"}, + {"240e:983:1600::/46", "58563"}, + {"2607:6b80:61::/46", "133480"}, + {"2a02:578::/34", "9031"}, + {"2a02:2ba0::/32", "42781"}, + {"2a07:bd80::/29", "43350"}, + {"2001:e60:8000::/37", "4766"}, + {"2408:8957:8900::/40", "17816"}, + {"2a01:9660:1a::/32", "199743"}, + {"2001:559:c31f::/48", "33651"}, + {"240e:3b1:f100::/37", "134775"}, + {"2605:1ec0::/32", "394501"}, + {"2610:e8:1900::/48", "10753"}, + {"2409:804c:3100::/36", "9808"}, + {"240a:a79f::/32", "144601"}, + {"240a:a8a8::/32", "144866"}, + {"2607:f9c8::/32", "26949"}, + {"2401:9c00::/32", "23923"}, + {"2407:5400::/32", "17551"}, + {"240e:3b0:7600::/39", "140313"}, + {"2600:6000:fd40::/48", "11351"}, + {"2602:ffeb::/36", "54819"}, + {"2605:d100::/32", "19844"}, + {"2800:98:1810::/32", "14754"}, + {"2804:4034::/32", "265944"}, + {"2a02:22d0:d::/32", "61323"}, + {"2a02:29a8::/36", "60142"}, + {"2001:559:8677::/48", "33650"}, + {"2001:1248:59ff::/38", "11172"}, + {"2405:e800::/32", "17675"}, + {"2408:8459:dc30::/41", "17622"}, + {"240a:a9ae::/32", "145128"}, + {"2600:1f70:5000::/40", "16509"}, + {"2a0c:e304::/48", "198985"}, + {"2001:559:c386::/48", "33287"}, + {"2804:5944::/32", "268180"}, + {"2a02:26f7:e241::/46", "20940"}, + {"2a02:26f7:f140::/48", "36183"}, + {"2001:559:80d5::/48", "33652"}, + {"2409:8904:35a0::/38", "24547"}, + {"2a02:26f7:b588::/48", "36183"}, + {"2a02:cb43:a000::/47", "20546"}, + {"2001:808::/35", "9112"}, + {"2408:840d:5f00::/42", "17621"}, + {"2409:8704:500::/34", "24547"}, + {"2607:f8f8:1f02::/45", "201106"}, + {"2804:1a30::/38", "61844"}, + {"2804:5efc::/32", "269069"}, + {"2a01:53c0:ff16::/48", "54994"}, + {"2407:1600::/32", "1299"}, + {"240a:a6ec::/32", "144422"}, + {"240e:324::/30", "4134"}, + {"2607:8380::/32", "11961"}, + {"2804:1880::/32", "61936"}, + {"2a01:190:15ed::/48", "16099"}, + {"2001:559:8397::/48", "7015"}, + {"2606:e400::/34", "26271"}, + {"2a00:61c0::/29", "44143"}, + {"2a01:9e00:ac54::/31", "41495"}, + {"2a01:ce89:b000::/33", "51964"}, + {"2001:470:9b::/48", "6939"}, + {"2001:559:25e::/48", "33659"}, + {"2001:df0:273::/48", "58477"}, + {"2602:ffe4:c32::/48", "21859"}, + {"2604:d600:608::/46", "32098"}, + {"2605:ed80::/32", "20303"}, + {"2a01:6da0::/32", "3249"}, + {"2620:113:8083::/41", "3680"}, + {"2801:80:39b0::/48", "270952"}, + {"2001:1a68:b::/48", "42503"}, + {"2804:8c::/33", "28216"}, + {"2804:21f8:13::/41", "262272"}, + {"2a0b:880::/45", "210834"}, + {"2001:fd8:1e4::/46", "132199"}, + {"2401:47c0:2000::/32", "41095"}, + {"240a:aacf::/32", "145417"}, + {"2600:1005:b0b0::/41", "6167"}, + {"2605:a40e:526::/32", "33363"}, + {"2a03:d602::/31", "42487"}, + {"2001:df0:3ac0::/48", "142507"}, + {"2402:800:b9a2::/41", "7552"}, + {"2408:8459:4430::/41", "17622"}, + {"2804:7a08::/32", "271343"}, + {"2a00:ab00:6000::/36", "61976"}, + {"2606:f40:6800::/48", "16509"}, + {"2620:119:fc::/48", "36692"}, + {"2a02:2330::/40", "12578"}, + {"2806:2f0:9863::/39", "17072"}, + {"2a09:bac0:31::/48", "13335"}, + {"2a0b:1580::/29", "206766"}, + {"240a:a6b9::/32", "144371"}, + {"2408:802a:8000::/33", "4837"}, + {"2408:84f3:f650::/44", "17816"}, + {"240a:aae1::/32", "145435"}, + {"2605:1900::/47", "12208"}, + {"2620:100:403e::/47", "25923"}, + {"2804:4024:ff00::/40", "265937"}, + {"2001:4c8:10a2::/41", "15290"}, + {"2406:da12::/36", "16509"}, + {"2801:1a6:800::/37", "271825"}, + {"2a00:1858::/35", "25454"}, + {"2a0b:b900::/29", "62183"}, + {"2603:b0e0:efad::/35", "11796"}, + {"2604:e180::/45", "55002"}, + {"2605:7900:24::/48", "63442"}, + {"2605:a401:8501::/40", "33363"}, + {"2605:ed00:6888::/32", "11427"}, + {"2806:2f0:34a3::/41", "17072"}, + {"2a03:7b20::/32", "48450"}, + {"2001:67c:26fc::/48", "50344"}, + {"2620:98:e005::/46", "399728"}, + {"2804:58d8::/32", "268153"}, + {"2a02:26f7:f700::/48", "36183"}, + {"2400:5280:1800::/34", "63199"}, + {"2600:1404:b800::/48", "35994"}, + {"2602:ffa6:500::/40", "62731"}, + {"2001:559:80a1::/46", "7015"}, + {"2001:67c:554::/48", "12525"}, + {"2001:4998:24::/46", "36647"}, + {"2402:4f00::/33", "58453"}, + {"2806:2f0:1021::/46", "22884"}, + {"2a02:26f7:d940::/48", "36183"}, + {"2a03:220:f000::/48", "209406"}, + {"2a0a:56c4:8300::/47", "42649"}, + {"2001:678:72c::/48", "201697"}, + {"2402:ec00::/32", "7575"}, + {"2806:283:5000::/36", "265515"}, + {"2402:3a80:1e10::/45", "38266"}, + {"240a:a1ef::/32", "143145"}, + {"2804:314:4025::/46", "61568"}, + {"2806:20d:5077::/38", "32098"}, + {"2a02:f7f:4::/46", "198408"}, + {"2a04:e700::/30", "48849"}, + {"2a0a:d6c0:145::/48", "15404"}, + {"2001:470:97::/44", "6939"}, + {"2001:559:861b::/48", "7922"}, + {"2604:a180:4000::/36", "11139"}, + {"2a09:ac80::/29", "209723"}, + {"2001:559:845f::/48", "7922"}, + {"240e:44d:880::/41", "4134"}, + {"2803:3b80:d::/34", "263702"}, + {"2804:81f4::/32", "272488"}, + {"2a06:afc0:2::/48", "41011"}, + {"2803:f720::/32", "266764"}, + {"2a04:3a60::/33", "56467"}, + {"2001:67c:1748::/48", "60799"}, + {"2a02:390::/32", "12496"}, + {"2a03:6087::/32", "16285"}, + {"240a:a92e::/32", "145000"}, + {"2a00:bf40::/32", "57928"}, + {"2a02:26f0:128::/48", "6762"}, + {"2001:559:736::/48", "22909"}, + {"2001:559:c240::/48", "33650"}, + {"2001:1ad0::/32", "24953"}, + {"240a:ab78::/32", "145586"}, + {"2800:160:1dd9::/46", "14259"}, + {"2801:80:1c80::/48", "266161"}, + {"2804:680:19::/37", "262589"}, + {"2804:4580:1100::/32", "266931"}, + {"2a05:ca80::/29", "49603"}, + {"2408:8459:1f30::/41", "17622"}, + {"2408:84f3:3010::/44", "17623"}, + {"2605:64c0::/47", "63294"}, + {"2a00:7600::/32", "21412"}, + {"2a0c:c0c0::/29", "202438"}, + {"2400:4d60::/32", "63793"}, + {"2604:2e8e::/34", "30036"}, + {"2604:5200::/48", "32504"}, + {"2a03:3820::/32", "201838"}, + {"2401:d800:bc20::/41", "7552"}, + {"2800:800:790::/41", "26611"}, + {"2a09:ba00:4::/48", "61323"}, + {"2c0f:f4e8::/32", "327750"}, + {"2001:67c:10e4::/48", "2119"}, + {"2407:c2c0::/32", "142631"}, + {"2001:559:396::/48", "7725"}, + {"240e:908::/33", "4134"}, + {"2804:f6c:2021::/41", "263585"}, + {"2a10:a200::/48", "16509"}, + {"240a:a4af::/32", "143849"}, + {"2620:11a:a029::/46", "36040"}, + {"2803:2a00:1000::/37", "27895"}, + {"2804:640:7b::/45", "262713"}, + {"2804:29b0:2000::/35", "61577"}, + {"2804:30bc::/32", "52609"}, + {"2403:9800:7f01::/48", "4648"}, + {"240a:a531::/32", "143979"}, + {"2620:101:200b::/45", "16417"}, + {"2a04:5201:2::/48", "200740"}, + {"2402:4400::/32", "44356"}, + {"2404:6380::/48", "23650"}, + {"2600:1806:20::/44", "16552"}, + {"2804:53b8::/32", "268602"}, + {"2a00:1388:1000::/40", "8328"}, + {"2a00:aca0::/32", "49223"}, + {"2401:d800:5030::/41", "7552"}, + {"240e:108:42::/48", "58466"}, + {"240e:3bd:c000::/37", "140315"}, + {"240e:7b2:1000::/32", "4134"}, + {"2600:1012:b130::/44", "22394"}, + {"2605:f980::/32", "7753"}, + {"2804:81c4::/32", "272475"}, + {"2a02:26f7:df81::/46", "20940"}, + {"2a03:6947:100::/40", "50973"}, + {"2a12:a307::/48", "23748"}, + {"2400:ac40:b60::/43", "136255"}, + {"2408:8957:3f00::/40", "17816"}, + {"2606:9500:1000::/36", "393423"}, + {"2804:e50::/32", "53067"}, + {"2a0c:36c2::/31", "9009"}, + {"2600:1010:6010::/32", "22394"}, + {"2620:107:901d::/42", "22787"}, + {"2800:160:116c::/46", "14259"}, + {"2402:5600::/32", "10083"}, + {"2404:bf40:e303::/37", "139084"}, + {"240a:aee4::/32", "146462"}, + {"2803:7d80:5021::/41", "11664"}, + {"2a01:3f1:c00::/34", "8674"}, + {"2001:559:87b6::/48", "7015"}, + {"2600:1007:d040::/40", "22394"}, + {"2605:ed00::/33", "11427"}, + {"2800:800:5f0::/44", "26611"}, + {"2a02:26f7:d280::/48", "36183"}, + {"2a04:f580:9250::/48", "4809"}, + {"2404:a8:10::/48", "24514"}, + {"2408:840c:6100::/40", "17621"}, + {"2001:df5:7800::/48", "133465"}, + {"2402:1d40::/46", "58826"}, + {"2600:1406:1601::/36", "20940"}, + {"2a02:2b60::/45", "42947"}, + {"2a02:c2c0::/29", "12513"}, + {"2a0f:3103::/32", "29182"}, + {"2001:559:832e::/48", "33651"}, + {"2001:559:c15e::/48", "33657"}, + {"2001:fd8:21c8::/38", "4775"}, + {"2408:803e::/32", "4837"}, + {"2801:80:1910::/48", "264958"}, + {"2804:6914::/32", "270247"}, + {"2a01:98::/32", "8190"}, + {"2001:559:c2b9::/48", "33490"}, + {"2001:678:348::/48", "43861"}, + {"2405:54c0::/48", "56150"}, + {"2a05:fdc0::/35", "42313"}, + {"2a10:3c40::/29", "204790"}, + {"2409:8915:3800::/39", "56044"}, + {"2804:14c:9d00::/40", "28573"}, + {"2804:75d4:2800::/32", "271072"}, + {"2a04:1b00:c::/47", "61005"}, + {"2001:408:10::/44", "6250"}, + {"2001:67c:229c::/48", "212002"}, + {"2408:8a06:100::/47", "9929"}, + {"2604:fe80::/32", "7030"}, + {"2610:a1:1024::/48", "397226"}, + {"2a01:1d0::/32", "50670"}, + {"2001:16d8:baff::/39", "16150"}, + {"2001:49f0:d010::/44", "174"}, + {"2804:820::/32", "262352"}, + {"2a02:26f7:b3c8::/48", "36183"}, + {"2a04:600::/29", "61161"}, + {"2a0a:7040::/32", "203712"}, + {"2001:678:cb4::/48", "56396"}, + {"2404:3800:f::/48", "38719"}, + {"2602:ffc5:158::/48", "40676"}, + {"2620:107:90d0::/48", "22787"}, + {"2804:7288::/32", "270859"}, + {"2405:e9c0::/32", "135572"}, + {"2604:a300::/32", "17056"}, + {"2804:14d:4cb5::/46", "28573"}, + {"2804:1d20:2600::/32", "264349"}, + {"2001:559:c266::/48", "33287"}, + {"2400:adc0:c000::/47", "9541"}, + {"2401:2680::/32", "23776"}, + {"2401:d800:d2b0::/41", "7552"}, + {"240a:a8f3::/32", "144941"}, + {"2803:17e0::/32", "52468"}, + {"2a11:6c0:100::/32", "211083"}, + {"2a12:a307:3::/48", "138181"}, + {"2600:9000:a100::/48", "16509"}, + {"2a02:330::/45", "31261"}, + {"2001:978:a02::/35", "174"}, + {"2400:9380:9009::/46", "4809"}, + {"240a:a3e7::/32", "143649"}, + {"240a:a446::/32", "143744"}, + {"2001:559:82db::/48", "13367"}, + {"2402:a00:98::/39", "45916"}, + {"2402:f800:ef01::/40", "7602"}, + {"2803:9800:b501::/45", "11664"}, + {"2804:5ee4::/32", "269063"}, + {"2a02:2608::/32", "44306"}, + {"2a09:ee40::/29", "201011"}, + {"2a0b:b680::/29", "204790"}, + {"2001:4c48::/29", "5483"}, + {"2400:8280::/32", "58511"}, + {"2400:b000:800::/48", "132796"}, + {"2600:1408:6c01::/38", "20940"}, + {"2a02:888:140::/46", "48695"}, + {"2408:8459:1a50::/39", "17816"}, + {"240e:108:27::/48", "133774"}, + {"240e:3b5:9c00::/34", "140310"}, + {"2600:1480:4000::/40", "33905"}, + {"2600:6c47:8000::/28", "20115"}, + {"2a0c:8540:6::/48", "42198"}, + {"2407:d6c0:1::/46", "136785"}, + {"2408:8459:3010::/41", "17623"}, + {"2409:8054:19::/45", "56040"}, + {"240a:a36b::/32", "143525"}, + {"240a:a471::/32", "143787"}, + {"240a:a63a::/32", "144244"}, + {"2a02:26f7:d6c9::/46", "20940"}, + {"2a0a:f480::/29", "206576"}, + {"2001:df0:c480::/48", "138398"}, + {"2402:8100:20ca::/43", "45271"}, + {"2600:1406:35::/48", "35994"}, + {"2a00:f500::/29", "13194"}, + {"2400:c700:a001::/35", "55644"}, + {"240e:a64::/35", "140329"}, + {"2620:19:2000::/48", "803"}, + {"2a0e:1c80:6::/48", "3399"}, + {"2a11:c800::/29", "42375"}, + {"2409:8a50::/38", "56047"}, + {"240e:44d:5f00::/41", "140345"}, + {"2600:370f:352d::/41", "32261"}, + {"2602:fc26:4::/44", "211562"}, + {"2800:484:c600::/40", "10620"}, + {"2803:9800:b507::/36", "11664"}, + {"2804:25c4::/32", "264301"}, + {"2804:673c:c300::/40", "264598"}, + {"2804:68e8::/32", "269724"}, + {"2001:250:1001::/43", "24353"}, + {"2001:67c:10f8::/48", "199233"}, + {"240a:a29b::/32", "143317"}, + {"2606:2700::/32", "54044"}, + {"2804:7d04::/32", "271533"}, + {"2408:840d:d400::/42", "17621"}, + {"2a06:d581:1000::/36", "13283"}, + {"2a07:b700::/29", "57626"}, + {"2001:579:e041::/40", "22773"}, + {"2606:6a00::/32", "14280"}, + {"2a07:cb81::/32", "15404"}, + {"2a0f:16c0::/29", "60262"}, + {"2001:41c8::/31", "35425"}, + {"2804:a54::/47", "262664"}, + {"2a02:2e02:2b00::/37", "12479"}, + {"2a04:6fb0::/31", "58005"}, + {"2001:559:7e8::/48", "21508"}, + {"2001:1a11:ed::/46", "8781"}, + {"240a:a0c1::/32", "142843"}, + {"240a:ad75::/32", "146095"}, + {"2600:6c38:73a::/47", "20115"}, + {"2603:c0fa:4000::/35", "20054"}, + {"2a02:26f7:e180::/48", "36183"}, + {"2a0c:bec0::/29", "12735"}, + {"2001:559:765::/48", "7922"}, + {"2001:559:84a4::/48", "7016"}, + {"2001:67c:2010::/48", "21344"}, + {"2403:e800:516::/44", "4637"}, + {"2804:3c78::/48", "266214"}, + {"2001:978:801:1::/40", "174"}, + {"2401:d800:fbf0::/37", "7552"}, + {"2402:b280::/32", "133934"}, + {"240a:a923::/32", "144989"}, + {"2620:186:4::/46", "396016"}, + {"2801:80:3741::/48", "269406"}, + {"2804:5c4c::/32", "268900"}, + {"2806:102e:10::/46", "8151"}, + {"2a0c:9a40:8113::/45", "204438"}, + {"2a11:f980::/29", "204790"}, + {"2001:559:c4a8::/48", "7922"}, + {"2600:1012:9000::/43", "6167"}, + {"2606:6c0::/32", "399049"}, + {"2a0b:8580::/29", "206429"}, + {"2a10:780::/32", "200780"}, + {"2001:df0:2ee::/48", "55384"}, + {"2405:d800::/39", "24247"}, + {"2a09:cd45::/30", "202448"}, + {"2001:678:a48::/48", "209163"}, + {"2001:67c:1920::/48", "12552"}, + {"2408:8256:319c::/48", "17816"}, + {"240a:a33e::/32", "143480"}, + {"240a:a42c::/32", "143718"}, + {"240a:ada2::/32", "146140"}, + {"2600:370f:74e3::/45", "32261"}, + {"2a05:1a00::/34", "43754"}, + {"2001:559:298::/48", "33652"}, + {"2001:67c:64::/48", "2121"}, + {"2a0d:5642:104::/47", "35487"}, + {"2c0f:efa0::/48", "36902"}, + {"2001:be7::/32", "21233"}, + {"2001:1210::/32", "2549"}, + {"2001:44a8::/32", "23836"}, + {"2804:e30:409::/43", "11338"}, + {"240a:acee::/32", "145960"}, + {"2804:28e4:c::/43", "28260"}, + {"2001:559:81b7::/48", "33650"}, + {"2400:7180::/32", "45671"}, + {"240a:a1f5::/32", "143151"}, + {"240a:aada::/32", "145428"}, + {"240c:ca28::/31", "24363"}, + {"2620:12d:e02f::/48", "3356"}, + {"2a02:e7c0::/29", "50599"}, + {"2a0d:2146:8580::/45", "39526"}, + {"2001:559:8572::/48", "7016"}, + {"2001:df3:ac00::/47", "63972"}, + {"2408:8957:3a00::/40", "17622"}, + {"2409:8053:2c03::/38", "9808"}, + {"240a:a61d::/32", "144215"}, + {"2600:c01::/32", "14743"}, + {"2605:1000::/32", "19662"}, + {"2001:388::/44", "7575"}, + {"2001:678:2d0::/48", "25482"}, + {"2001:cd8::/33", "4780"}, + {"2402:3a80:1860::/40", "38266"}, + {"2408:80ca::/32", "17816"}, + {"2804:73b8::/32", "270933"}, + {"2a0c:2f07:72::/47", "208024"}, + {"2c0f:efe0::/32", "328366"}, + {"2001:559:2a5::/48", "33491"}, + {"2001:1b38::/32", "8554"}, + {"2a00:1560:11::/45", "29684"}, + {"2001:559:193::/48", "33287"}, + {"2001:4878:204::/48", "12222"}, + {"2402:3a80:1400::/42", "38266"}, + {"2404:4e00:c000::/48", "32787"}, + {"2804:6280:5::/32", "269301"}, + {"2804:71a8::/32", "270803"}, + {"2a00:4120:8000:7::/45", "20804"}, + {"2a0e:63c0::/29", "208516"}, + {"2001:559:812c::/48", "33652"}, + {"2001:559:857a::/48", "7016"}, + {"2001:48b0::/32", "2497"}, + {"240a:a7e3::/32", "144669"}, + {"2803:d200::/32", "28086"}, + {"2a00:83a0::/32", "60772"}, + {"2a10:ca00:3::/45", "212217"}, + {"2001:df0:dd80::/48", "135839"}, + {"2620:0:dc0::/49", "683"}, + {"2403:2500:8000::/48", "36236"}, + {"2409:8089:1021::/23", "9808"}, + {"2800:160:112d::/43", "14259"}, + {"2804:441c::/32", "267603"}, + {"2804:7f8c:1130::/32", "271695"}, + {"2a02:26f7:1e::/48", "36183"}, + {"2001:67c:2750::/48", "200745"}, + {"2408:8956:dd00::/40", "17816"}, + {"2600:6c38:b5c::/42", "20115"}, + {"2806:230:6025::/48", "11888"}, + {"2a04:5b82:9::/45", "202265"}, + {"2001:559:56d::/48", "7922"}, + {"2001:df0:e4::/48", "56026"}, + {"2409:8435::/23", "9808"}, + {"240a:aff9::/32", "146739"}, + {"240e:45c:c500::/40", "140536"}, + {"2a05:5f00::/30", "203170"}, + {"2a01:5640::/32", "43207"}, + {"2a02:26f7:c208::/48", "36183"}, + {"2001:559:96::/48", "33287"}, + {"2401:cf80:600e::/41", "55303"}, + {"2402:800:77a2::/36", "7552"}, + {"2402:3380::/32", "134119"}, + {"2a01:b7c0::/32", "60384"}, + {"240a:aeaa::/32", "146404"}, + {"240a:aec2::/32", "146428"}, + {"2804:10c8:d002::/44", "263649"}, + {"2a00:13d8::/29", "3212"}, + {"240a:a8b4::/32", "144878"}, + {"240e:108:1080::/48", "132153"}, + {"2600:1009:b170::/40", "22394"}, + {"2803:7a80::/36", "263713"}, + {"2a0a:acc0::/48", "6369"}, + {"2401:d800:780::/42", "7552"}, + {"2602:fe19:4017::/34", "26073"}, + {"2803:6f00::/36", "14117"}, + {"2a02:26f7:e7c0::/48", "36183"}, + {"2a07:6b40::/29", "559"}, + {"2a0e:8480::/29", "42156"}, + {"2001:978:9e00:1::/34", "174"}, + {"240a:a811::/32", "144715"}, + {"2604:d600:655::/44", "32098"}, + {"2a0a:e200:1911::/38", "33438"}, + {"2001:559:250::/46", "33652"}, + {"2400:c180:19::/48", "132513"}, + {"2405:73c0::/48", "41095"}, + {"2804:3d4:1a::/42", "262401"}, + {"2c0f:f6b0::/32", "327728"}, + {"2001:1398:274::/48", "52234"}, + {"2800:b90::/32", "263246"}, + {"2a01:664:400::/36", "48951"}, + {"2001:67c:1ba4::/48", "59586"}, + {"2400:c700::/44", "55644"}, + {"240a:a402::/32", "143676"}, + {"2803:ae0::/32", "269930"}, + {"2804:2f44::/32", "264881"}, + {"2a03:c2c0::/32", "61205"}, + {"2a0e:b107:3ef::/48", "212034"}, + {"2001:559:81de::/47", "33651"}, + {"2409:8020:10d1::/34", "56046"}, + {"240a:a6aa::/32", "144356"}, + {"2800:160:1d02::/44", "14259"}, + {"2a07:f0c0::/29", "200768"}, + {"2a00:6060:b001::/33", "60983"}, + {"2a02:5d00::/32", "196861"}, + {"2c0f:2e00:400::/32", "328578"}, + {"2600:380:cc00::/41", "20057"}, + {"2600:100f:f100::/44", "6167"}, + {"2804:18:7060::/39", "10429"}, + {"2a07:44c0::/29", "203081"}, + {"2001:559:8a::/48", "21508"}, + {"2001:559:c12a::/48", "33287"}, + {"2401:d800:27a0::/41", "7552"}, + {"2600:1003:f840::/44", "6167"}, + {"2604:be40::/32", "13857"}, + {"2a00:91c0::/32", "204558"}, + {"2001:559:8270::/48", "7016"}, + {"2001:559:c35d::/48", "7016"}, + {"2001:678:104::/48", "20609"}, + {"2001:67c:17e4::/48", "2119"}, + {"2400:9380:a002::/47", "23764"}, + {"2409:8050:2002::/40", "56047"}, + {"2409:8959:ce44::/43", "9808"}, + {"240a:a11b::/32", "142933"}, + {"2804:3fd4:3000::/33", "265918"}, + {"2804:54dc::/32", "268674"}, + {"2a00:1c48::/31", "12695"}, + {"2a00:cee4:dcd::/31", "60268"}, + {"2a01:bc40::/32", "197453"}, + {"2c0f:f7a8:9020::/48", "4809"}, + {"2408:8957:2c00::/40", "17622"}, + {"240e:3b6:1400::/38", "134773"}, + {"2a01:280:3::/45", "12381"}, + {"2001:559:85cd::/48", "33657"}, + {"2404:f4c0:f948::/46", "142551"}, + {"240a:ad2f::/32", "146025"}, + {"2604:ea80::/32", "33438"}, + {"2a12:7700::/29", "212144"}, + {"2001:559:867e::/48", "33650"}, + {"2404:2280:1bd::/46", "24429"}, + {"2605:300::/32", "46849"}, + {"2401:4900:1af0::/44", "45609"}, + {"2804:50c0::/32", "268408"}, + {"2001:255::/32", "38255"}, + {"2001:1218:60bc::/47", "278"}, + {"2001:42d0:a::/48", "37301"}, + {"2800:870::/35", "6762"}, + {"2001:550:e06::/39", "174"}, + {"2401:d800:bc50::/42", "7552"}, + {"240a:ab6a::/32", "145572"}, + {"2600:370f:30e3::/39", "32261"}, + {"2a07:d40::/29", "203338"}, + {"2a0c:5700:3134::/33", "30893"}, + {"2001:559:c0e0::/48", "33659"}, + {"2405:b900:10::/44", "55701"}, + {"2409:806a:2903::/38", "9808"}, + {"2a06:11c0:3::/45", "208086"}, + {"2a0c:5242::/29", "208861"}, + {"2001:400:a000:7::/64", "46846"}, + {"240a:ae0c::/32", "146246"}, + {"2600:9000:209f::/48", "16509"}, + {"2a02:26f7:d344::/48", "36183"}, + {"2a04:7f40::/29", "197212"}, + {"2a04:fcc0::/29", "21396"}, + {"2a06:c780::/29", "198024"}, + {"2a0c:5247:a000::/35", "208861"}, + {"2001:1a11:12c::/48", "8781"}, + {"2602:fed2:770c::/47", "53356"}, + {"2606:ae00:b801::/38", "7287"}, + {"2804:15a4:8010::/34", "263400"}, + {"2406:d00:aaaa::/48", "132165"}, + {"2600:6c2e:635::/40", "20115"}, + {"2804:2f5c::/32", "264886"}, + {"2a0f:c180::/29", "12996"}, + {"2001:67c:2ff0::/48", "50180"}, + {"2409:8958:cc44::/43", "9808"}, + {"2604:61c0::/35", "29831"}, + {"2a00:b0a1::/32", "203434"}, + {"2a03:9d40:6000::/36", "41095"}, + {"2a04:9140:3043::/45", "201958"}, + {"2a0c:e140::/29", "42136"}, + {"2620:125:9050::/48", "397415"}, + {"2001:253:10a::/45", "38272"}, + {"2001:fd8:1f70::/34", "132199"}, + {"2408:8256:2f77::/44", "17623"}, + {"2804:10e0::/32", "263653"}, + {"2804:742c::/32", "270963"}, + {"2a10:80::/29", "207382"}, + {"2001:510:c011::/34", "376"}, + {"240a:aae8::/32", "145442"}, + {"2600:4000::/25", "701"}, + {"2603:c002:9410::/39", "31898"}, + {"2620:141:47e::/48", "6075"}, + {"2001:559:803d::/46", "7922"}, + {"2602:fed2:7319::/46", "53356"}, + {"2603:c0fc:2000::/40", "54253"}, + {"2604:d600:112f::/43", "32098"}, + {"2606:6080:2001::/46", "32489"}, + {"2001:44b8:3087::/48", "4739"}, + {"2403:d000::/32", "23720"}, + {"2600:1000:fe10::/40", "22394"}, + {"2620:11a:c014::/48", "54113"}, + {"2a03:ec00:b300::/37", "24921"}, + {"2001:559:844e::/48", "7922"}, + {"240a:aebd::/32", "146423"}, + {"2804:30f4::/32", "264983"}, + {"2a07:cc0::/29", "60721"}, + {"2a0a:3e80::/29", "206606"}, + {"2001:502:d399::/48", "397226"}, + {"2001:1218:6036::/47", "278"}, + {"2405:2000::/37", "6453"}, + {"2408:8957:2400::/40", "17622"}, + {"2409:8c34:d00::/38", "9808"}, + {"2600:141c:3001::/36", "20940"}, + {"2804:2fd0::/32", "264913"}, + {"2804:581c::/32", "268107"}, + {"2001:1248:55a4::/46", "11172"}, + {"2607:f8f0:6a0::/48", "55185"}, + {"2a02:20c8::/35", "50304"}, + {"2a0a:b382::/32", "19318"}, + {"2a0a:e200:1910::/48", "199156"}, + {"2400:7400:45::/44", "38044"}, + {"2604:b180:10::/44", "32779"}, + {"2a02:16e8::/32", "31376"}, + {"2001:da8:c7::/48", "138441"}, + {"2001:df5:900::/48", "136167"}, + {"2001:4878:a220::/48", "12222"}, + {"2402:2840::/32", "10011"}, + {"2405:6e00:f802::/47", "133612"}, + {"240a:a96e::/32", "145064"}, + {"240a:afce::/32", "146696"}, + {"2800:5f0:203f::/41", "22724"}, + {"2a09:e1c1:f000::/44", "20473"}, + {"2600:6c34:309::/46", "33588"}, + {"2801:80:2e00::/40", "267976"}, + {"2a02:26f7:ba08::/48", "36183"}, + {"2001:b28:f23e::/48", "42065"}, + {"2001:4b98::/36", "29169"}, + {"2401:d800:db40::/42", "7552"}, + {"2402:9d80:3cc::/42", "131429"}, + {"2605:5b00::/32", "15317"}, + {"2a01:367:abcd::/48", "201061"}, + {"2603:c022:4000::/35", "31898"}, + {"2a0e:b102:120::/48", "208765"}, + {"2001:978:1e04::/40", "174"}, + {"2001:da8:238::/48", "24350"}, + {"2001:4c10::/32", "24586"}, + {"2408:8459:e830::/41", "17622"}, + {"240e:e9:5800::/37", "4134"}, + {"2600:6c38:12a::/45", "20115"}, + {"2620:135:a000::/40", "394889"}, + {"2804:2d88::/32", "265288"}, + {"2804:74a0::/32", "270993"}, + {"2405:2300:ff03::/44", "13443"}, + {"240e:6b4::/36", "136198"}, + {"2620:171:30::/45", "42"}, + {"2804:37fc::/32", "266448"}, + {"2a02:26f7:be85::/46", "20940"}, + {"2a02:26f7:d989::/42", "20940"}, + {"2402:cf80:1001::/46", "395403"}, + {"240a:a81e::/32", "144728"}, + {"240e:44d:3080::/41", "4134"}, + {"2600:1013:f010::/36", "6167"}, + {"2600:1404:c001::/37", "20940"}, + {"2800:160:1541::/45", "14259"}, + {"2801:130::/36", "3816"}, + {"2a0d:2a00:ab1::/46", "205157"}, + {"2001:559:c17a::/47", "7016"}, + {"2400:6d00::/32", "45355"}, + {"240a:aba1::/32", "145627"}, + {"2620:ca:4000::/48", "394229"}, + {"2804:7678::/32", "271114"}, + {"2a01:5041:500e::/48", "202196"}, + {"2a03:9e40::/32", "31399"}, + {"2a0d:f107::/32", "208449"}, + {"240e:698:4800::/40", "134769"}, + {"240e:983:1402::/44", "4134"}, + {"2600:e408::/29", "30404"}, + {"2607:fdf0:5eef::/43", "8008"}, + {"2806:210::/32", "28466"}, + {"2a0b:b86:f4::/48", "3280"}, + {"2408:8459:ed30::/41", "17622"}, + {"2001:559:504::/48", "7922"}, + {"2401:9cc0:200::/48", "59256"}, + {"2401:a100:4::/32", "45194"}, + {"2600:6c20:79::/39", "20115"}, + {"2804:1100::/34", "53178"}, + {"2a02:2e02:8850::/39", "12479"}, + {"2a0a:e2c1::/32", "50560"}, + {"2800:870:1002::/48", "6461"}, + {"2a02:2010:2020::/45", "20978"}, + {"2a07:f00::/29", "203412"}, + {"2a0b:dd40::/29", "204817"}, + {"2400:8b00:200::/42", "45727"}, + {"2401:55c0::/32", "131954"}, + {"2804:7214::/32", "270831"}, + {"2a03:2880:f038::/46", "32934"}, + {"240e:3b8:8200::/35", "140316"}, + {"2a02:2e02:1680::/42", "12479"}, + {"2a0c:6a40::/31", "30823"}, + {"2a0c:8080::/32", "204772"}, + {"2001:559:827f::/48", "33652"}, + {"2001:c78::/31", "2764"}, + {"240e:44d:7c40::/42", "140355"}, + {"2600:140f:c000::/48", "24309"}, + {"2600:370f:7510::/47", "32261"}, + {"2804:2f40::/32", "264880"}, + {"2a00:10e8:3::/29", "44574"}, + {"2a10:4646:40::/44", "211617"}, + {"2001:df7:6a00::/48", "132136"}, + {"240a:a08d::/32", "142791"}, + {"2a00:1e1a::/29", "8896"}, + {"2001:3c8:1602::/39", "4621"}, + {"2408:8459:5c50::/38", "17816"}, + {"2605:6400:30::/48", "53667"}, + {"2804:14c:3b89::/43", "28573"}, + {"2804:7480::/32", "270985"}, + {"2806:2f0:3201::/46", "17072"}, + {"2a00:1ff0::/32", "43717"}, + {"2001:67c:10c8::/48", "1257"}, + {"2600:1419:201::/37", "20940"}, + {"2803:6320::/32", "264825"}, + {"2001:1520:300::/32", "8972"}, + {"2400:cb00:a2f0::/46", "13335"}, + {"2402:800:5d1d::/42", "7552"}, + {"2408:84f3:a210::/42", "134543"}, + {"2804:3b0:8306::/44", "53062"}, + {"2a06:8782::/32", "3624"}, + {"2604:ca00:f014::/42", "36492"}, + {"2a02:2e02:8710::/40", "12479"}, + {"2001:67c:2b44::/48", "25525"}, + {"2401:7700::/32", "24150"}, + {"240e:980:2500::/40", "134756"}, + {"2a01:5ae0::/32", "12703"}, + {"2a05:fc80::/29", "57118"}, + {"2a0c:6f40::/29", "205801"}, + {"2001:13c7:7014::/48", "28504"}, + {"240e:44d:6880::/41", "4134"}, + {"2605:1140:1800::/37", "394142"}, + {"2804:5b28::/32", "268822"}, + {"2001:678:df0::/48", "29014"}, + {"2401:d800:d0::/42", "7552"}, + {"2a02:17a6::/31", "47232"}, + {"2001:559:469::/46", "7922"}, + {"240e:97d:3000::/36", "4134"}, + {"2600:80c:1400::/39", "11486"}, + {"2804:72c::/32", "52851"}, + {"2804:7024::/32", "270708"}, + {"2a00:5180::/48", "51957"}, + {"2a12:8400::/32", "198722"}, + {"2001:559:3c7::/48", "33287"}, + {"2001:1838:5002::/48", "13331"}, + {"240a:a00a::/32", "142660"}, + {"240e:44d:6e80::/41", "4134"}, + {"2001:67c:275c::/48", "31371"}, + {"2402:800:3ec0::/43", "7552"}, + {"2402:800:56e0::/44", "7552"}, + {"2406:840:e241::/48", "141011"}, + {"2407:2800::/32", "38227"}, + {"2600:6c20:16::/44", "20115"}, + {"2606:c00:36::/32", "9505"}, + {"2a03:4b21::/32", "201396"}, + {"2a05:fc40::/29", "200797"}, + {"2403:300:1cf2::/38", "714"}, + {"2404:b0:13::/35", "4750"}, + {"2804:24c8::/32", "52846"}, + {"2a0a:62c0::/32", "16086"}, + {"2a0a:89c0::/29", "206010"}, + {"2001:43f8:b70::/48", "327974"}, + {"2401:3cc0:801::/41", "137409"}, + {"2405:1c0:6361::/45", "55303"}, + {"2409:8c28:31b1::/37", "56041"}, + {"2600:6c38:221::/46", "20115"}, + {"2a07:cbc0:1c0::/29", "201299"}, + {"2a0f:9400:770f::/48", "211266"}, + {"240a:aea7::/32", "146401"}, + {"2607:fdf0:5e94::/46", "8008"}, + {"2001:fb0:1036::/41", "7470"}, + {"240e:67a:8800::/38", "140330"}, + {"240e:a53:6400::/26", "4134"}, + {"2001:559:19d::/48", "33650"}, + {"2408:84f3:b410::/42", "134543"}, + {"2605:fe80::/32", "7203"}, + {"2a0e:fd45:b31::/41", "44103"}, + {"2404:e5c0::/32", "146834"}, + {"2620:11a:a01f::/48", "36040"}, + {"2a00:4802:280::/44", "13124"}, + {"2a02:2028::/32", "15943"}, + {"2a0e:46c4:22a1::/48", "136918"}, + {"2400:4ec0:ff1a::/40", "64300"}, + {"2400:8000:9::/34", "4800"}, + {"2804:211c::/32", "264536"}, + {"2001:559:75a::/48", "7922"}, + {"2001:678:f34::/48", "64396"}, + {"2402:e380:e000::/35", "50131"}, + {"2600:1417:54::/48", "20940"}, + {"2800:bf0:288::/48", "27947"}, + {"2a03:1e80:ff6::/47", "8767"}, + {"2a11:87c0::/29", "208241"}, + {"2001:978:2306::/47", "174"}, + {"2405:2000:503::/32", "6453"}, + {"2408:840e:dd00::/34", "17621"}, + {"240a:a5b8::/32", "144114"}, + {"240c:ca05::/32", "138371"}, + {"2600:140f:5a01::/39", "20940"}, + {"2801:80:14e0::/43", "11097"}, + {"2804:12fc::/32", "263508"}, + {"2409:8904:5870::/40", "24547"}, + {"2409:896a:2600::/39", "9808"}, + {"2804:2450:c00::/32", "264214"}, + {"2607:6b80:40::/48", "46562"}, + {"2804:7f24:2::/44", "268853"}, + {"2a02:26f0:99::/46", "20940"}, + {"2404:e100:3001::/48", "133840"}, + {"240a:ab59::/32", "145555"}, + {"2604:25c0::/32", "33392"}, + {"2607:f738:b80::/37", "17184"}, + {"2806:2f0:45e1::/46", "17072"}, + {"2a01:6200::/32", "16095"}, + {"2001:559:c2a3::/48", "7922"}, + {"2001:1248:9cbf::/41", "11172"}, + {"2405:e640:c000::/34", "393954"}, + {"2406:cb41::/48", "395092"}, + {"240a:ab01::/32", "145467"}, + {"2606:ba00::/32", "16700"}, + {"2804:16d8:1d06::/48", "262729"}, + {"2804:5e7c:c100::/34", "269036"}, + {"2804:65b0::/32", "269508"}, + {"2a0e:b107:27e::/48", "212519"}, + {"2402:800:5aee::/39", "7552"}, + {"2804:35a8::/32", "266299"}, + {"2a02:2a90::/32", "702"}, + {"2600:370f:350a::/45", "32261"}, + {"2606:2800:333::/45", "15133"}, + {"2804:3df4::/32", "266565"}, + {"2a00:1c78:2::/29", "25408"}, + {"2a02:888:8047::/48", "47794"}, + {"2a03:7be0::/32", "201787"}, + {"2001:dee:8001::/48", "10084"}, + {"2804:1b04::/45", "53048"}, + {"2a05:9282::/29", "31019"}, + {"2001:df0:21a::/48", "23855"}, + {"2405:a00::/32", "4783"}, + {"2602:ffd1:4::/48", "29802"}, + {"2804:1810:d000::/34", "263262"}, + {"2a0d:1a40:7813::/40", "208563"}, + {"2001:4c0:8003::/33", "855"}, + {"2001:4998:ef99::/48", "26101"}, + {"2400:adc3:800::/39", "9541"}, + {"2a03:1ac0:5f4f::/48", "42682"}, + {"2a03:1b00::/32", "47478"}, + {"2a04:2dc0:19::/48", "39216"}, + {"2001:559:1b8::/48", "7015"}, + {"240a:a4ae::/32", "143848"}, + {"2600:1406:2c01::/38", "20940"}, + {"2001:559:4f4::/48", "7015"}, + {"2405:9800:c917::/44", "45430"}, + {"2603:c010:e000::/36", "31898"}, + {"240a:a98f::/32", "145097"}, + {"2804:14d:5495::/41", "28573"}, + {"2804:e8c:4000::/34", "52561"}, + {"2a00:1238:4::/32", "35236"}, + {"2402:9900:911::/48", "27435"}, + {"2404:c140:956f::/33", "138997"}, + {"240a:a2b7::/32", "143345"}, + {"2801:19:4800::/48", "10753"}, + {"2001:df3:7580::/48", "140570"}, + {"2409:8008:d5::/46", "9808"}, + {"2607:f738:f00::/41", "17184"}, + {"2804:2e04::/32", "265318"}, + {"2a0a:e5c0:1e::/48", "209898"}, + {"2a0f:1240::/29", "60262"}, + {"2409:8915:3a00::/33", "56044"}, + {"2606:b400:8018::/48", "792"}, + {"2a01:42e0:1700::/32", "29046"}, + {"2001:67c:133c::/48", "35052"}, + {"2405:6e00:600::/43", "133612"}, + {"2409:8088::/32", "24445"}, + {"240a:a23a::/32", "143220"}, + {"2600:1015:9110::/34", "6167"}, + {"2607:7c80:57::/48", "6373"}, + {"2a05:4200:2::/47", "35180"}, + {"2404:ce80::/32", "135356"}, + {"240a:a02f::/32", "142697"}, + {"240a:ae3b::/32", "146293"}, + {"2600:370f:3745::/46", "32261"}, + {"2603:c0f9::/36", "20054"}, + {"2a0a:c840::/31", "205394"}, + {"2408:8456:c600::/42", "17622"}, + {"2401:3bc0:1001::/44", "137409"}, + {"2403:ad80:80::/44", "134835"}, + {"2620:0:b80::/48", "701"}, + {"2620:8:8200::/48", "54282"}, + {"2804:14c:6300::/42", "28573"}, + {"2a07:3500:19a0::/48", "38915"}, + {"2c0f:e8f8::/35", "328699"}, + {"2001:df3:ff80::/48", "140924"}, + {"2402:800:5655::/42", "7552"}, + {"2600:6c38:50f::/43", "20115"}, + {"2607:fc58:1:42::/64", "13536"}, + {"2804:3b8:68::/47", "52965"}, + {"2a10:6580::/29", "204790"}, + {"2001:678:7b0::/48", "199568"}, + {"240e:c0:1800::/37", "63835"}, + {"240e:45c:7400::/40", "131285"}, + {"2001:fb0:1003::/44", "7470"}, + {"2408:8956:a300::/40", "17816"}, + {"240a:af07::/32", "146497"}, + {"2604:ebc0::/32", "54225"}, + {"2806:2f0:9e41::/42", "17072"}, + {"240e:3b3:6400::/35", "140312"}, + {"2001:559:7fe::/48", "7922"}, + {"2001:559:8225::/48", "7015"}, + {"2001:c38:900e::/47", "9931"}, + {"240e:45c:8400::/40", "131285"}, + {"2602:fc5c:3::/48", "32748"}, + {"2a02:26f7:e384::/48", "36183"}, + {"2a02:26f7:f7c5::/46", "20940"}, + {"2a03:9d40::/36", "41095"}, + {"2001:500:110::/48", "10745"}, + {"240a:a8c7::/32", "144897"}, + {"2803:ea10:1::/45", "271927"}, + {"2a02:26f7:4a::/48", "36183"}, + {"2a11:9140::/29", "49655"}, + {"2001:559:1f0::/48", "33659"}, + {"240e:44d:5d00::/41", "140345"}, + {"240e:97c:1000::/34", "4134"}, + {"2804:14d:5400::/40", "28573"}, + {"2806:2a0::/43", "28548"}, + {"2a09:be40:3680::/44", "212276"}, + {"2402:800:7210::/42", "7552"}, + {"240a:a504::/32", "143934"}, + {"2804:e1c:2::/32", "52545"}, + {"2a0a:d6c0:134::/47", "208650"}, + {"2c0f:fc70::/32", "37305"}, + {"2404:a140:2::/44", "138915"}, + {"2408:8644:1200::/32", "4837"}, + {"2409:8c28:902::/37", "56041"}, + {"2605:7940:1::/46", "30456"}, + {"2a02:3e0::/32", "39837"}, + {"2a02:16d8:104::/46", "5518"}, + {"2a02:26f7:e249::/42", "20940"}, + {"2404:d540:2::/32", "2501"}, + {"2600:1409:e801::/37", "20940"}, + {"2602:300::/24", "7018"}, + {"2001:559:8416::/48", "21508"}, + {"240a:a0f7::/32", "142897"}, + {"240a:a346::/32", "143488"}, + {"2804:81f0::/32", "272487"}, + {"2a01:190:1501::/43", "1764"}, + {"2a02:f7f:14::/48", "42927"}, + {"2a06:b500:2110::/44", "203759"}, + {"2001:43f8:cc0::/44", "23889"}, + {"2a04:c442:6500::/35", "10725"}, + {"240a:aaf8::/32", "145458"}, + {"2602:fed2:7010::/48", "134666"}, + {"2620:34:a001::/48", "7381"}, + {"2804:2080::/32", "264494"}, + {"2605:a240::/32", "21769"}, + {"2606:3c80:8001:1::/39", "33582"}, + {"2607:3a80:25::/48", "398480"}, + {"2800:150:1::/48", "12956"}, + {"2a0f:88c1::/30", "395003"}, + {"2603:c013:8000::/36", "31898"}, + {"2605:3380:4163::/44", "12025"}, + {"2804:184::/32", "262749"}, + {"2001:67c:f0::/48", "50381"}, + {"2001:df7:c900::/48", "138616"}, + {"2001:1388:2f02::/45", "6147"}, + {"2402:800:9355::/42", "7552"}, + {"240e:44d:3d00::/41", "140345"}, + {"2606:6c00:a000::/48", "32787"}, + {"2804:2af8::/32", "265128"}, + {"2a00:cc0:3::/32", "13237"}, + {"240a:a834::/32", "144750"}, + {"2620:0:6c0::/48", "16807"}, + {"2804:4d28::/32", "267415"}, + {"2a05:91c4::/32", "56430"}, + {"2a0d:7b80::/29", "204556"}, + {"2600:6000:fd83::/48", "11351"}, + {"2804:e0::/46", "28330"}, + {"2001:559:8247::/48", "33657"}, + {"2600:1017:b4d0::/44", "22394"}, + {"2a0c:e640:6780::/48", "17830"}, + {"2001:559:8776::/44", "7015"}, + {"2a03:b580::/32", "51978"}, + {"2001:550:2503::/38", "174"}, + {"2001:1248:4310::/44", "11172"}, + {"2803:e880:810e::/43", "52468"}, + {"2804:2b10:e::/47", "52916"}, + {"2a00:12d8:14::/33", "12586"}, + {"2a06:a100::/29", "48685"}, + {"2a0c:1ec0::/29", "60341"}, + {"2404:bf40:8702::/41", "139084"}, + {"2605:bc0:800::/47", "54201"}, + {"2605:f500:115::/38", "1828"}, + {"2a02:26f7:b9c1::/46", "20940"}, + {"2804:13b0:1c90::/42", "263546"}, + {"2001:43f8:7d0::/48", "37591"}, + {"2400:ddc0:2100::/32", "4785"}, + {"2402:800:7d10::/42", "7552"}, + {"2804:10:9000::/33", "28299"}, + {"2804:f04::/32", "262591"}, + {"2804:1348::/32", "263526"}, + {"2406:840:e145::/48", "142164"}, + {"2600:1418:4001::/32", "20940"}, + {"2602:feda:f3::/48", "205058"}, + {"2804:37a4::/36", "262543"}, + {"2806:230:204f::/48", "11888"}, + {"2a00:1651::/33", "213277"}, + {"2a01:8a60:2301:1::/32", "60191"}, + {"2001:559:8466::/48", "33287"}, + {"2620:115::/45", "18888"}, + {"2804:218:d4::/33", "27715"}, + {"240a:a7e0::/32", "144666"}, + {"2a00:1ab0::/32", "57633"}, + {"2a04:db80::/32", "44724"}, + {"2402:8640:a::/32", "137491"}, + {"2602:fc5d:51::/46", "399866"}, + {"2a02:88d:821f::/48", "47794"}, + {"2a02:26f7:ee00::/48", "36183"}, + {"2a04:ad40::/29", "60156"}, + {"2a06:1b00:9a::/39", "8302"}, + {"2a0e:cb00::/29", "60377"}, + {"2402:9200::/32", "10084"}, + {"2605:9f80::/32", "63018"}, + {"2620:160:eb00::/44", "10837"}, + {"2806:2f0:1123::/41", "22884"}, + {"2001:559:c291::/48", "33659"}, + {"2403:9800:c031::/44", "4648"}, + {"2604:e180:de09::/34", "55002"}, + {"2a0f:5701::/34", "206499"}, + {"2408:8256:397c::/48", "17816"}, + {"2600:1408:b401::/33", "20940"}, + {"2600:370f:73a8::/45", "32261"}, + {"2001:df0:23c0::/48", "147125"}, + {"2402:8100:30f0::/44", "45271"}, + {"240a:af85::/32", "146623"}, + {"2603:c011:c000::/36", "31898"}, + {"2804:5764::/32", "53241"}, + {"2a00:10d8::/44", "42005"}, + {"2a00:f826:25::/48", "201061"}, + {"2a02:26f7:d850::/48", "36183"}, + {"2a02:26f7:da11::/42", "20940"}, + {"2a04:1d80::/29", "60989"}, + {"2a07:c100::/29", "202398"}, + {"2a07:f600:4033::/48", "6679"}, + {"2400:1a00:b112::/40", "17501"}, + {"2401:d800:91a0::/41", "7552"}, + {"2402:b600::/32", "7532"}, + {"2604:e180:86::/35", "55002"}, + {"2a06:c6c0::/48", "21100"}, + {"2400:cb00:160::/46", "13335"}, + {"2402:4880::/32", "134160"}, + {"2403:6240::/32", "134595"}, + {"2408:8a04:8000::/36", "9929"}, + {"2602:fead::/36", "395567"}, + {"2606:a600:9000::/33", "23005"}, + {"2402:800:9801::/44", "7552"}, + {"240a:a550::/32", "144010"}, + {"2602:ffc8:3e5::/34", "20278"}, + {"2605:ef80:36::/44", "36492"}, + {"2804:7c8:9000::/33", "262323"}, + {"2804:4114::/32", "266002"}, + {"2a00:6920:f000::/40", "42003"}, + {"2a02:26f7:fb89::/42", "20940"}, + {"2a09:1cc0::/29", "208574"}, + {"2804:1db8::/32", "264389"}, + {"2804:398c::/32", "266035"}, + {"2001:1a11:156::/32", "8781"}, + {"240a:abc7::/32", "145665"}, + {"2604:c0c0:4000::/35", "14525"}, + {"2605:dd40:5216::/41", "398549"}, + {"2404:b280:1000::/34", "17670"}, + {"2408:8456:3c00::/41", "17623"}, + {"2409:8904:3aa0::/39", "24547"}, + {"2a0f:1540::/29", "399975"}, + {"2001:559:865a::/47", "33657"}, + {"2a02:26f7:c245::/46", "20940"}, + {"2a0b:1f80::/29", "62412"}, + {"2604:7480::/47", "54826"}, + {"2620:74:13::/48", "26134"}, + {"2800:300:8940::/40", "27651"}, + {"2a00:47c0:200::/48", "44568"}, + {"2001:559:2a6::/48", "33650"}, + {"2001:579:524c::/40", "22773"}, + {"2404:2400:200::/48", "38280"}, + {"240e:e5:8000::/30", "4812"}, + {"240e:44d:7640::/42", "140352"}, + {"2001:56b:5::/44", "852"}, + {"240e:966:f600::/31", "4134"}, + {"2604:dc00::/35", "19752"}, + {"2803:7da0:51::/48", "64114"}, + {"2a03:34c0::/32", "9009"}, + {"2a03:5a00:38::/48", "62247"}, + {"2a0d:5d80::/29", "200899"}, + {"2001:559:82d4::/48", "33660"}, + {"2600:1003:b1a0::/44", "6167"}, + {"2804:3528::/32", "266272"}, + {"2a02:26f0:a5::/44", "34164"}, + {"2a0c:b642:ace::/48", "208753"}, + {"240e:3bc:d000::/36", "134772"}, + {"240e:967:5000::/37", "58772"}, + {"2600:370f:4022::/47", "32261"}, + {"2604:4100::/36", "29713"}, + {"2804:1e20:9950::/48", "264409"}, + {"2804:2250:543a::/34", "262756"}, + {"2401:4900:1bc0::/44", "45609"}, + {"2600:6c38:632::/44", "20115"}, + {"2804:1668::/32", "53132"}, + {"2001:559:c198::/48", "7922"}, + {"2600:370f:1124::/43", "32261"}, + {"2804:1a00::/32", "61831"}, + {"2804:5a50::/32", "268764"}, + {"2a10:5880::/29", "37289"}, + {"2001:579:114c::/42", "22773"}, + {"2001:df3:f780::/48", "141052"}, + {"2401:d800:5090::/42", "7552"}, + {"2620:109:a000::/45", "15294"}, + {"2620:119:17::/48", "36692"}, + {"2800:160:1c3a::/41", "14259"}, + {"2804:4498:9000::/33", "267641"}, + {"2a0b:8f80:201::/48", "12859"}, + {"2001:256:100::/48", "24367"}, + {"2001:18e8:10::/38", "19782"}, + {"2401:fa40::/32", "134326"}, + {"2620:149:150::/38", "714"}, + {"2804:2438::/35", "264209"}, + {"2804:6260::/32", "269293"}, + {"2804:654c:200::/40", "269481"}, + {"2a0a:e5c0:26::/48", "213081"}, + {"2a10:840::/29", "62240"}, + {"2408:8459:5a30::/41", "17622"}, + {"240e:67c:e400::/39", "140330"}, + {"2804:41d4::/36", "267459"}, + {"2a01:5340::/29", "62298"}, + {"2001:559:7ff::/48", "33287"}, + {"2602:ffaa::/36", "32621"}, + {"2001:250:40a::/38", "23910"}, + {"2400:5be0::/32", "148968"}, + {"2600:40f0:b::/45", "701"}, + {"2607:fc58:1:87::/64", "13536"}, + {"2a02:ee80:429c::/47", "21433"}, + {"2401:d800:bd10::/42", "7552"}, + {"2407:a080:6000::/35", "133480"}, + {"2409:8051:800::/47", "56047"}, + {"2602:feda:3c5::/48", "205947"}, + {"2801:80:3a00::/40", "270410"}, + {"2804:53b0::/46", "268600"}, + {"2a01:7900::/32", "35100"}, + {"2a02:ee80:4104::/47", "21433"}, + {"2804:37b4::/32", "266430"}, + {"2c0f:f288::/32", "328039"}, + {"2c0f:f850:dc04::/47", "327979"}, + {"2001:da8:270::/46", "23910"}, + {"2001:1a11:125::/48", "42298"}, + {"240a:ac55::/32", "145807"}, + {"2602:fd63::/36", "11805"}, + {"2803:e40:8b::/32", "27797"}, + {"2804:62e0::/32", "269325"}, + {"2a03:f480:1::/46", "198068"}, + {"2a10:ac40:2::/47", "397349"}, + {"2001:559:8472::/48", "33662"}, + {"2001:fd8:b0e0::/44", "132199"}, + {"2401:b00::/43", "17564"}, + {"240a:a850::/32", "144778"}, + {"2604:7180::/36", "36446"}, + {"2604:a140:1502::/45", "4755"}, + {"2804:3238::/32", "265063"}, + {"2001:250:4836::/35", "23910"}, + {"2001:2000:3080:2345::4/41", "1299"}, + {"2406:5a00::/32", "55850"}, + {"2408:8459:aa50::/37", "17816"}, + {"2600:1fa0:2080::/44", "8987"}, + {"2803:a520::/32", "266685"}, + {"2804:3f50::/32", "266652"}, + {"2804:6a80:3002::/32", "270340"}, + {"2a02:26f7:10f::/48", "20940"}, + {"2001:468:364::/48", "10490"}, + {"2001:678:824::/48", "59891"}, + {"2804:d1c::/32", "52600"}, + {"2a02:26f7:d5ca::/42", "20940"}, + {"240a:aa3b::/32", "145269"}, + {"2620:f7:4000::/48", "2828"}, + {"2a11:eb80::/29", "204790"}, + {"2c0f:f048::/32", "36924"}, + {"240a:a3a5::/32", "143583"}, + {"2804:11d0::/32", "263441"}, + {"2804:6018::/32", "269145"}, + {"2001:559:701::/48", "33491"}, + {"2001:4878:4204::/48", "12222"}, + {"2401:b8c0::/44", "64074"}, + {"2804:70b8::/32", "270744"}, + {"2a09:c180::/29", "209707"}, + {"2405:7600:2::/34", "23956"}, + {"2600:5c00:3fc9::/48", "20115"}, + {"2804:2140:1017::/42", "53059"}, + {"2a02:26f7:c289::/41", "20940"}, + {"2c0f:f448::/39", "327880"}, + {"2001:559:86d1::/48", "33287"}, + {"2400:1620::/32", "147314"}, + {"2406:600:2212::/32", "4694"}, + {"2407:6ec0::/32", "133384"}, + {"2604:fb80:1600::/48", "15128"}, + {"2605:a401:8068::/46", "33363"}, + {"2a0d:f301::/48", "40994"}, + {"2001:438:65::/48", "26762"}, + {"2407:2d00::/32", "14381"}, + {"2600:9000:2322::/44", "16509"}, + {"2620:11a:a024::/47", "36040"}, + {"2a0a:cc80::/47", "206667"}, + {"2001:268:83c::/41", "2516"}, + {"2402:800:fc40::/42", "7552"}, + {"2404:8000:79::/40", "17451"}, + {"2600:6c39:5::/44", "20115"}, + {"2401:d800:bfb0::/41", "7552"}, + {"2408:8000::/48", "4837"}, + {"240a:a32b::/32", "143461"}, + {"2a02:60::/29", "35492"}, + {"2a02:100e:bef8::/48", "201318"}, + {"2a02:1390:1000::/34", "21351"}, + {"2001:559:80e0::/48", "33657"}, + {"2803:2880::/32", "262159"}, + {"2a0e:3304::/32", "43312"}, + {"2620:102:3000::/44", "3136"}, + {"2804:4158::/32", "267427"}, + {"2403:8000::/44", "4796"}, + {"2600:1410:c001::/34", "20940"}, + {"2800:bf0:340c::/43", "27947"}, + {"2804:4d80:c001::/34", "268200"}, + {"2804:7c04::/32", "271470"}, + {"2a0c:4b40::/29", "202449"}, + {"2405:9800:d004::/46", "45430"}, + {"2600:6c10:ff95::/44", "20115"}, + {"2604:6800::/32", "36436"}, + {"2607:f6f0:1002::/40", "12085"}, + {"2804:9fc::/32", "263008"}, + {"2a04:2b00:14dd::/48", "212390"}, + {"2405:aac0:55::/46", "139949"}, + {"2405:ed80:a::/32", "135106"}, + {"2408:84f3:a240::/37", "17816"}, + {"240a:af74::/32", "146606"}, + {"2607:d080::/32", "29946"}, + {"2620:19:4000::/48", "395611"}, + {"2803:e210::/32", "271907"}, + {"2a0f:5707:ab80::/44", "56382"}, + {"2001:559:531::/48", "33652"}, + {"2408:8459:be10::/42", "17623"}, + {"2600:1010:6000::/44", "6167"}, + {"2600:bc00::/32", "54600"}, + {"2610:128:2200::/33", "11686"}, + {"240e:438:1420::/43", "140647"}, + {"2804:4bf4::/32", "267339"}, + {"2a00:d102::/34", "15704"}, + {"2001:67c:1443::/48", "31649"}, + {"2001:67c:2ff4::/48", "47699"}, + {"2408:8956:a700::/40", "17816"}, + {"240a:a47d::/32", "143799"}, + {"2a01:8840:a1::/48", "207266"}, + {"2a02:26f7:d240::/48", "36183"}, + {"2600:1017:f410::/38", "6167"}, + {"2605:3380:47fd::/46", "12025"}, + {"2606:2e00:8007::/48", "32780"}, + {"2607:f518:2403::/32", "46887"}, + {"2604:1380:45d0::/38", "54825"}, + {"2804:14c:7de2::/43", "28573"}, + {"2a03:1e80:c000::/40", "3320"}, + {"2001:559:8605::/48", "7015"}, + {"240a:a7da::/32", "144660"}, + {"240e:438:20::/43", "140647"}, + {"2620:138:3018::/45", "22604"}, + {"2a02:348:c9::/35", "35470"}, + {"2001:559:8295::/48", "33490"}, + {"2405:8a00:a04d::/43", "55824"}, + {"2806:2f0:95e1::/46", "17072"}, + {"2806:2f0:9803::/42", "17072"}, + {"2a01:5c8::/32", "12312"}, + {"2a03:be00::/32", "50522"}, + {"2400:c700:1184::/38", "55644"}, + {"240a:a825::/32", "144735"}, + {"2a0f:28c0::/29", "399975"}, + {"2a11:b244::/32", "62068"}, + {"2001:559:4e4::/48", "7922"}, + {"2001:43f8:10f0::/48", "328280"}, + {"2001:43f8:1430::/48", "37520"}, + {"2401:fd80:101::/44", "43519"}, + {"2402:800:337f::/40", "7552"}, + {"2a10:ccc2::/43", "35619"}, + {"2001:67c:22c8::/48", "1257"}, + {"2001:df0:ee::/48", "55951"}, + {"2001:1a40:71::/40", "5416"}, + {"2600:1415:16::/44", "20940"}, + {"2602:801:7000::/47", "397955"}, + {"2806:2f0:9d41::/46", "17072"}, + {"2a03:f80:3991::/48", "56630"}, + {"2a05:ef00::/29", "202536"}, + {"2a0e:97c3:78f::/48", "20473"}, + {"2401:7400:2fe::/48", "132915"}, + {"2402:800:f870::/40", "7552"}, + {"2409:8c4c:19::/42", "9808"}, + {"240a:aa41::/32", "145275"}, + {"240e:979:1000::/36", "4134"}, + {"2804:14d:e600::/41", "28573"}, + {"2001:410:a011::/44", "8111"}, + {"2001:df3:ce00::/48", "132148"}, + {"2606:2800:7022::/48", "15133"}, + {"2804:4900:8000::/33", "267158"}, + {"2a02:2ca7:2f::/32", "210662"}, + {"2a03:ef43:c000::/48", "57218"}, + {"2a0a:6a80::/29", "13045"}, + {"2001:4408:4308::/37", "4758"}, + {"2001:49f0:d102::/48", "3257"}, + {"2404:ddc0:6000::/36", "139074"}, + {"2409:8020:a1::/43", "56046"}, + {"2620:129:f000::/48", "393462"}, + {"2a02:26f7:f149::/42", "20940"}, + {"2604:7280::/32", "31877"}, + {"2803:cda0::/32", "267788"}, + {"2804:19c::/32", "262755"}, + {"2a00:1ca8:d5::/32", "50673"}, + {"2a01:698::/32", "15373"}, + {"2001:4868:10c::/48", "62795"}, + {"2804:3e70:1235::/32", "266596"}, + {"2804:5934::/32", "268175"}, + {"2804:84bc::/32", "272278"}, + {"2a02:4540:c0::/45", "197207"}, + {"2001:468:2611::/44", "11537"}, + {"2408:8706::/28", "4808"}, + {"2804:1a14:4000::/36", "28153"}, + {"2a00:1cd8::/29", "48620"}, + {"2a12:5e00::/29", "204790"}, + {"2408:8456:2100::/42", "17622"}, + {"2409:895a:c800::/37", "9808"}, + {"2602:806:5000::/44", "22617"}, + {"2a00:4bc0:212f::/48", "31004"}, + {"2406:2000::/40", "10310"}, + {"2409:8915:5800::/39", "56044"}, + {"2607:fa78::/32", "10430"}, + {"2607:fb90:5700::/34", "21928"}, + {"2a02:88d:23f::/34", "47794"}, + {"2402:800:7060::/40", "7552"}, + {"2405:9800:c920::/48", "45458"}, + {"2409:806c:2100::/36", "9808"}, + {"2803:6602:8000::/31", "28075"}, + {"2804:17f4::/32", "263260"}, + {"2804:762c::/32", "271094"}, + {"2a02:26f7:d7c0::/48", "36183"}, + {"2401:d800:2a40::/42", "7552"}, + {"240a:a7b5::/32", "144623"}, + {"2804:5718::/32", "268043"}, + {"2001:559:8308::/47", "7922"}, + {"2001:df0:293::/48", "10010"}, + {"2401:d800:1f0::/38", "7552"}, + {"2606:ae00:9e00::/44", "7287"}, + {"2800:160:1b96::/44", "14259"}, + {"2407:24c0:1::/46", "136835"}, + {"2407:a600:6000::/36", "18004"}, + {"240e:67b:8c00::/33", "4134"}, + {"2602:feb4:230::/44", "25961"}, + {"2804:6b2c::/32", "270383"}, + {"2a02:4780:8::/43", "47583"}, + {"2605:cc00::/32", "15065"}, + {"2804:1618::/32", "263267"}, + {"2a02:26f7:c89c::/48", "36183"}, + {"2a02:2ca5::/32", "58305"}, + {"2001:19f8:9000::/33", "4927"}, + {"2400:7400:34::/47", "38044"}, + {"2400:cb00:419::/48", "13335"}, + {"2600:4402::/34", "6130"}, + {"2602:fc23:158::/48", "54625"}, + {"2603:fd30::/25", "397165"}, + {"2620:7b:2000::/48", "398222"}, + {"2803:8080::/32", "12180"}, + {"2001:67c:65c::/48", "198903"}, + {"2404:e601::/48", "132805"}, + {"2604:a940:1::/48", "54538"}, + {"2606:29c0::/39", "31775"}, + {"2806:230:3014::/48", "265594"}, + {"2001:67c:634::/48", "198089"}, + {"2405:4c0::/32", "139281"}, + {"2406:840:e080::/44", "141776"}, + {"2801:80:3ea0::/48", "272432"}, + {"2804:6c4::/36", "262893"}, + {"2001:559:8754::/48", "7016"}, + {"2604:880:3c::/48", "29802"}, + {"2607:f330:2002::/47", "25996"}, + {"2800:484:5100::/36", "10620"}, + {"2804:72f0::/32", "270885"}, + {"2a03:1b20:beef::/48", "39351"}, + {"2a03:96e0::/33", "15659"}, + {"2405:1c0:6221::/46", "55303"}, + {"2406:bd00:decd::/48", "55651"}, + {"2804:4b44::/32", "267294"}, + {"2a04:6ac0::/29", "8100"}, + {"2a04:f581:110a::/47", "23764"}, + {"2001:da8:b80d::/46", "24372"}, + {"2600:180a:1002::/33", "16552"}, + {"2a01:5741:1::/32", "57763"}, + {"2a03:29c0::/32", "61189"}, + {"2a04:e580::/29", "197395"}, + {"2a0d:5642:201::/48", "35487"}, + {"2001:559:84be::/48", "33657"}, + {"2407:7f00::/48", "132898"}, + {"2408:8456:4610::/42", "134543"}, + {"240e:a28::/25", "4134"}, + {"2804:5d64::/32", "268969"}, + {"2a00:1fa0::/32", "8359"}, + {"2001:559:87e0::/45", "7015"}, + {"2401:c5c0:2::/47", "55492"}, + {"2401:fa00:60::/32", "45566"}, + {"240a:a16a::/32", "143012"}, + {"240a:ad9c::/32", "146134"}, + {"2001:df0:65::/48", "38567"}, + {"2607:f3a0:4000::/32", "23342"}, + {"2a01:8840:55::/48", "207266"}, + {"2401:d800:7f00::/42", "7552"}, + {"2404:bf40:8500::/48", "7545"}, + {"2408:8956:f640::/40", "17622"}, + {"2600:1417:49::/46", "20940"}, + {"2607:ffb0:8001::/33", "6327"}, + {"2804:3bf0::/33", "266181"}, + {"2804:640c::/32", "269401"}, + {"2a00:13c0:201::/48", "12616"}, + {"2a02:26f7:b841::/46", "20940"}, + {"2a0b:2800::/29", "207195"}, + {"2a0d:8200::/29", "205144"}, + {"2605:a404:1f9::/38", "33363"}, + {"2607:8300:a::/48", "13876"}, + {"2607:f838::/32", "22581"}, + {"2804:4dc8::/32", "268219"}, + {"2a00:7147:e10::/48", "51430"}, + {"2a02:2aa8:130::/38", "702"}, + {"2a02:2e00:2000::/36", "12479"}, + {"2a0a:2842:463::/48", "136796"}, + {"2a11:ae00::/32", "31515"}, + {"2610:a1:3050::/48", "12008"}, + {"2620:114:d000::/44", "3671"}, + {"2800:490:e800::/39", "27951"}, + {"2804:988::/32", "28239"}, + {"2a03:2800::/29", "12488"}, + {"2a05:b340::/29", "49223"}, + {"2a0e:8f02:f040::/48", "207212"}, + {"2001:1248:97ed::/46", "11172"}, + {"2001:4998:161::/44", "10310"}, + {"240a:a369::/32", "143523"}, + {"240e:966:c600::/36", "4134"}, + {"2607:f640::/44", "32354"}, + {"2620:121:6000::/44", "40267"}, + {"2a00:1ec8:64::/40", "2854"}, + {"2001:67c:1438::/48", "44418"}, + {"240a:a962::/32", "145052"}, + {"240a:ac7e::/32", "145848"}, + {"2804:7b9c::/32", "271439"}, + {"2a03:1aa0:9000::/33", "201730"}, + {"2a09:f180::/48", "50007"}, + {"2001:250:23b::/48", "24348"}, + {"2405:2300:ff73::/45", "13443"}, + {"2405:d980::/32", "23703"}, + {"2406:8800:9013::/45", "17465"}, + {"2605:6c80:3::/48", "13768"}, + {"2a03:9c40:800::/48", "34655"}, + {"2a10:2a80:42::/48", "207727"}, + {"2001:250:4000::/45", "24358"}, + {"2001:559:165::/48", "33287"}, + {"2603:c025:c000::/35", "31898"}, + {"2620:17e::/42", "26072"}, + {"2804:b6c::/32", "52777"}, + {"2806:230:1021::/48", "11888"}, + {"2001:500:203::/44", "394353"}, + {"2001:559:89::/48", "20214"}, + {"2001:559:c01f::/48", "7725"}, + {"2407:680::/33", "9676"}, + {"2610:b0:4151::/44", "3573"}, + {"2803:4a10:b000::/33", "271916"}, + {"2a00:dd80:fb81::/48", "199438"}, + {"2403:be80::/32", "58405"}, + {"2405:3340:e000::/48", "141362"}, + {"2405:6e00:1e00::/39", "133612"}, + {"240a:ac5d::/32", "145815"}, + {"2600:6c38:a54::/47", "20115"}, + {"2605:79c0::/32", "26801"}, + {"2605:a401:816d::/43", "33363"}, + {"2a06:c005::/32", "45027"}, + {"2a10:1f40::/29", "211007"}, + {"2a10:cbc0::/29", "208553"}, + {"2409:8914:200::/39", "56044"}, + {"2600:9800::/24", "4193"}, + {"2803:6900:1514::/48", "52423"}, + {"2804:41d0::/38", "267458"}, + {"2804:4cc8::/32", "267391"}, + {"2a0f:b506:ffee::/48", "206313"}, + {"2001:559:8298::/47", "33661"}, + {"2400:a980:de::/47", "133111"}, + {"2403:c00:1000::/40", "17488"}, + {"2620:1f7:81c::/48", "1747"}, + {"2800:160:1f75::/44", "14259"}, + {"2804:49bc::/32", "267200"}, + {"2a02:888:dd::/48", "48695"}, + {"2001:550:7709::/32", "174"}, + {"2001:dc0:2000::/35", "4608"}, + {"2a09:4040::/48", "50007"}, + {"2001:678:f7c::/48", "213027"}, + {"2001:da8:4806::/37", "23910"}, + {"2404:9140::/48", "134687"}, + {"2804:174c::/32", "263135"}, + {"2804:1e90:a0c0::/39", "264436"}, + {"2001:7a8:820::/34", "13193"}, + {"2402:800:9171::/40", "7552"}, + {"240a:ae5c::/32", "146326"}, + {"2804:1b6c::/32", "61727"}, + {"2a00:a040::/38", "12849"}, + {"2a02:26f7:e3c9::/46", "20940"}, + {"2001:67c:88::/48", "57436"}, + {"2600:140b:e001::/37", "20940"}, + {"2602:fe27:b1::/48", "6473"}, + {"2a0a:4780::/32", "59504"}, + {"2001:559:a::/48", "33652"}, + {"2001:559:c3cf::/48", "21508"}, + {"2001:df2:e800::/48", "131302"}, + {"2408:8957:2f00::/40", "17816"}, + {"240e:14::/36", "140329"}, + {"2804:534:667::/32", "22177"}, + {"2001:559:1da::/48", "33659"}, + {"2602:ff96:8::/48", "26548"}, + {"2607:cd8a::/32", "6528"}, + {"2803:9360::/32", "263222"}, + {"2804:2e70::/32", "265346"}, + {"2a0d:b201:30::/41", "206026"}, + {"2001:1360::/32", "52286"}, + {"2402:c7c0::/32", "137576"}, + {"2408:8409:7800::/40", "4808"}, + {"2c0f:f430::/32", "29614"}, + {"240a:a2e6::/32", "143392"}, + {"2620:171:61::/48", "715"}, + {"2a00:5540::/33", "50763"}, + {"2001:559:8158::/47", "33287"}, + {"240e:679:800::/37", "140329"}, + {"2620:124:3000::/40", "46900"}, + {"2620:1f8:f046::/48", "40443"}, + {"2806:104e:7::/43", "8151"}, + {"2406:4a00:900::/40", "56038"}, + {"2408:8956:8900::/40", "17816"}, + {"2602:fe32::/36", "397081"}, + {"2606:2800:4046::/48", "14210"}, + {"2606:2e00:2::/33", "29854"}, + {"2804:4bbc::/32", "28333"}, + {"2a02:26f7:c491::/42", "20940"}, + {"2001:559:81e6::/48", "7016"}, + {"2402:1c00:5000::/32", "23838"}, + {"2402:9e80:200::/46", "142561"}, + {"2602:fc91:163::/48", "399561"}, + {"2a01:358:5f12::/32", "9121"}, + {"2a02:752:2::/48", "43948"}, + {"2a02:2b60:6::/44", "42947"}, + {"2a02:2698:3800::/42", "59713"}, + {"2a02:26f7:f445::/46", "20940"}, + {"2409:8c20:c17::/35", "56046"}, + {"2804:7514::/32", "271022"}, + {"2806:230:1018::/48", "265594"}, + {"2a09:2::/48", "3258"}, + {"2001:559:57a::/48", "33659"}, + {"2001:559:845c::/48", "7725"}, + {"2401:4900:1800::/40", "45609"}, + {"240e:c0:2000::/30", "4134"}, + {"2602:fd10::/40", "19529"}, + {"2a05:dfc7:bef0::/33", "61138"}, + {"2a0c:4780::/29", "204814"}, + {"2a0f:75c0:1::/48", "44016"}, + {"2001:1248:9885::/46", "11172"}, + {"2001:4878:8151::/48", "12222"}, + {"2605:b9c0::/34", "30705"}, + {"2a0c:8880::/29", "39421"}, + {"2001:1248:8019::/40", "11172"}, + {"2407:b640:40::/47", "132046"}, + {"2600:6c60::/32", "20115"}, + {"2804:73fc::/32", "270950"}, + {"2a01:7c80::/33", "24852"}, + {"240a:ab39::/32", "145523"}, + {"2804:40a0:f200::/39", "265971"}, + {"2804:4318::/32", "267548"}, + {"2a02:9b8::/31", "5610"}, + {"2a0a:4a00::/29", "48662"}, + {"2a10:2ec2::/32", "210625"}, + {"2001:504:b::/48", "101"}, + {"2402:800:54e0::/44", "7552"}, + {"240e:983:1::/48", "4134"}, + {"2600:1488:a341::/42", "20940"}, + {"2600:6c38:b27::/44", "20115"}, + {"2806:2f0:2181::/48", "22884"}, + {"2a00:4802:2e50::/39", "8717"}, + {"2a02:2250::/32", "196714"}, + {"2a04:ec80::/29", "39441"}, + {"2607:f740:b::/43", "36236"}, + {"2804:760:2000::/32", "262638"}, + {"2a06:c300::/29", "197660"}, + {"2a06:e881:2100::/47", "206479"}, + {"2a0b:4d07:b01::/48", "44239"}, + {"2604:d600:1c::/46", "32098"}, + {"2607:fc28:5000::/34", "22911"}, + {"2a03:90c0:610::/44", "199524"}, + {"2a06:3040:9::/48", "203020"}, + {"2c0f:fe38:2120::/38", "33771"}, + {"2409:8000:5900::/40", "9808"}, + {"2400:8000:3003::/32", "4800"}, + {"2400:dcc0:aa04::/39", "38631"}, + {"240a:a0d2::/32", "142860"}, + {"240e:109:8043::/48", "63835"}, + {"2605:a401:8bfa::/37", "33363"}, + {"2a00:1288:ef84::/48", "40986"}, + {"2001:df3:1680::/48", "133296"}, + {"2001:df7:8400::/48", "134819"}, + {"2804:18b0::/32", "61947"}, + {"2a0a:e740::/29", "207020"}, + {"2001:67c:4c4::/48", "48171"}, + {"2402:2b40:8000::/36", "55967"}, + {"2406:840:eee0::/43", "139216"}, + {"2605:bc0::/47", "54201"}, + {"2800:bf0:8270::/48", "52257"}, + {"2803:2a80:20::/47", "262928"}, + {"2804:14c:bb85::/44", "28573"}, + {"2804:52ec::/32", "268550"}, + {"2804:5e7c::/32", "269036"}, + {"2a04:e00:17::/48", "39855"}, + {"2600:1408:7000::/48", "35994"}, + {"2a0a:d400::/29", "39650"}, + {"2001:418:1401:1::/64", "3949"}, + {"2001:559:488::/46", "33657"}, + {"240a:a385::/32", "143551"}, + {"2a01:6900::/32", "16091"}, + {"2a0e:d0c0::/29", "208376"}, + {"2603:90f5::/48", "11426"}, + {"2804:8150:4000::/32", "272446"}, + {"2a00:12e0::/32", "6798"}, + {"2a00:7440::/32", "12625"}, + {"2001:678:a8c::/48", "208727"}, + {"2001:c20:c815::/48", "9255"}, + {"2600:1908::/29", "15169"}, + {"2a01:b1c1::/32", "200548"}, + {"2402:800:7150::/42", "7552"}, + {"2406:daa0:f0c0::/44", "16509"}, + {"240e:5e:1000::/42", "134773"}, + {"2605:a404:343::/40", "33363"}, + {"2607:f4d8::/32", "26785"}, + {"2803:e600:1c::/48", "65500"}, + {"2001:559:87::/48", "33657"}, + {"2001:4878:c000::/48", "12222"}, + {"2606:3c00::/32", "36273"}, + {"2620:10f:400f::/48", "10390"}, + {"2801:1fc:24::/48", "27951"}, + {"2a00:4880::/32", "50348"}, + {"2a02:26f7:77::/48", "20940"}, + {"2a03:70c0::/32", "197068"}, + {"240a:a7d2::/32", "144652"}, + {"2600:370e:108::/47", "32261"}, + {"2605:a404:83e::/41", "33363"}, + {"2a01:5b0:26::/48", "8561"}, + {"2407:6640::/40", "142275"}, + {"2803:e600:999a::/34", "18809"}, + {"2804:24c4:3000::/32", "264241"}, + {"2a01:5042:efd::/48", "202196"}, + {"2a04:7680::/29", "9007"}, + {"2a0b:6b81:205::/48", "203729"}, + {"2406:daa0:20c0::/44", "16509"}, + {"2600:140b:9c01::/34", "20940"}, + {"2800:110:3e01::/32", "4270"}, + {"2800:bf0:800a::/48", "27947"}, + {"2a0f:6940::/32", "207881"}, + {"2001:559:456::/48", "33489"}, + {"2001:559:8644::/48", "7922"}, + {"2401:8940:fc00::/38", "131291"}, + {"2600:1406:7c00::/48", "35994"}, + {"2804:8330::/32", "272182"}, + {"2a02:2070::/32", "48467"}, + {"2001:579:10c8::/39", "22773"}, + {"2001:df5:f680::/48", "147273"}, + {"2a0e:97c0:1a1::/48", "211868"}, + {"2001:559:c140::/46", "33657"}, + {"2804:59dc::/32", "268730"}, + {"2a02:6680:1::/46", "16116"}, + {"2a03:2880:f1fe::/47", "32934"}, + {"2406:1a00::/32", "56028"}, + {"2600:1419:6000::/48", "52376"}, + {"2607:f5a0:802::/32", "17048"}, + {"2607:fb58:4000::/36", "36086"}, + {"2800:160:1c4f::/43", "14259"}, + {"2a01:8840:d5::/48", "207266"}, + {"2a02:ff0:c00::/40", "12735"}, + {"2a06:4180::/48", "48293"}, + {"2a0e:8f02:f000::/48", "213127"}, + {"2407:74c0::/32", "138864"}, + {"2804:1690::/37", "263292"}, + {"2001:1248:a6da::/39", "11172"}, + {"2001:da8:5854::/37", "23910"}, + {"2001:1380:2000::/36", "19180"}, + {"240a:a907::/32", "144961"}, + {"240a:ac85::/32", "145855"}, + {"240a:aca5::/32", "145887"}, + {"2806:230:3024::/48", "265594"}, + {"2a0a:a140::/48", "206446"}, + {"2a11:ce80::/29", "204790"}, + {"2001:44b8:4065::/48", "4739"}, + {"2402:800:5eee::/43", "7552"}, + {"2405:9800:c91f::/48", "45430"}, + {"240a:a780::/32", "144570"}, + {"2a06:e7c0::/32", "202236"}, + {"2001:44b8:20::/46", "4739"}, + {"2405:4802:31b0::/33", "18403"}, + {"240a:a505::/32", "143935"}, + {"2604:ca00:f031::/46", "36492"}, + {"2a0d:4f00:10::/44", "48492"}, + {"2001:df5:bd80::/48", "134502"}, + {"2a09:94c0::/29", "209327"}, + {"2a0e:fd45:d30::/45", "207803"}, + {"2001:1438::/32", "8881"}, + {"2803:a640::/32", "46198"}, + {"2a01:bc00::/29", "43406"}, + {"2a07:240::/32", "16089"}, + {"2408:8459:7030::/41", "17622"}, + {"2804:c64::/32", "52699"}, + {"2804:1a08::/32", "262780"}, + {"2804:5ee8::/33", "269064"}, + {"2a02:26f7:da00::/48", "36183"}, + {"2001:1248:8301::/37", "11172"}, + {"2001:1bd0::/32", "28716"}, + {"2600:1417:74::/46", "20940"}, + {"2800:160:1b1d::/46", "14259"}, + {"2a02:26f7:c205::/46", "20940"}, + {"2a02:26f7:d15a::/47", "20940"}, + {"2404:4ac0::/32", "138572"}, + {"2804:1a6c::/32", "61858"}, + {"2804:5cb4::/32", "268925"}, + {"2804:67a4:124::/32", "269641"}, + {"2a03:a8a0::/29", "203195"}, + {"2a0e:8f02:f01b::/48", "213326"}, + {"2001:559:f::/48", "33287"}, + {"2001:678:9cc::/48", "61384"}, + {"2001:678:fb8::/48", "211042"}, + {"2001:67c:12b0::/48", "29468"}, + {"2402:800:9847::/43", "7552"}, + {"2409:8050:802::/40", "56047"}, + {"2803:100::/32", "7727"}, + {"2402:1b80:400::/35", "63956"}, + {"2801:11:1000::/48", "264633"}, + {"2803:2a80:f0::/47", "262928"}, + {"2803:d100:8000::/35", "52362"}, + {"2804:66cc::/32", "269583"}, + {"2804:6700::/32", "269597"}, + {"2804:777c:8000::/33", "271181"}, + {"2a0f:580::/29", "213250"}, + {"2a0f:9400:7b11::/40", "210872"}, + {"2001:1a11:119::/45", "42298"}, + {"2001:4490:dd18::/46", "9829"}, + {"2600:1403:16::/34", "20940"}, + {"2804:a00:5::/44", "262838"}, + {"2804:307c::/32", "264954"}, + {"2a0f:1e83:1::/48", "60781"}, + {"240e:44d:5b80::/41", "4134"}, + {"2610:b0:403a::/47", "3573"}, + {"2a06:a340::/29", "47689"}, + {"2602:ffb0:1c::/48", "64245"}, + {"2001:559:11c::/48", "20214"}, + {"2001:67c:2db8::/48", "39798"}, + {"240a:af38::/32", "146546"}, + {"2801:1f2::/44", "271820"}, + {"2804:14d:b08b::/41", "28573"}, + {"2001:559:8184::/48", "7016"}, + {"2401:d800:7670::/40", "7552"}, + {"2402:800:9701::/44", "7552"}, + {"2404:ec80::/32", "10076"}, + {"2607:f738:200::/41", "17184"}, + {"2a02:26f7:f488::/48", "36183"}, + {"2a0e:8f04::/30", "58299"}, + {"2001:559:106::/48", "33651"}, + {"2001:da8:5ff0::/45", "24360"}, + {"2406:7400:4::/48", "24309"}, + {"2800:160:10c4::/46", "14259"}, + {"2400:cb00:502::/45", "13335"}, + {"2604:a880:cad::/48", "14061"}, + {"2400:a980:c1::/48", "134169"}, + {"2406:da00:9000::/40", "16509"}, + {"2804:5354::/32", "268577"}, + {"2602:feda:f100::/38", "46997"}, + {"2804:60bc::/32", "269187"}, + {"2804:6ba8::/32", "270415"}, + {"2a07:14c0::/47", "59504"}, + {"2a0a:4d80::/29", "44462"}, + {"2402:800:5863::/43", "7552"}, + {"2408:8956:e100::/40", "17816"}, + {"2803:b000::/32", "27975"}, + {"2a07:b941:f00::/43", "209103"}, + {"2a0d:3a40:1::/48", "41838"}, + {"2001:da8:302e::/48", "23910"}, + {"2001:4998:124::/46", "26101"}, + {"2401:8e00:2800::/35", "9260"}, + {"240a:a534::/32", "143982"}, + {"2803:fc10::/32", "23031"}, + {"2804:28b8::/32", "263976"}, + {"2607:fb90:bf00::/33", "21928"}, + {"2804:27f0::/43", "263930"}, + {"2c0f:f1a0:8200::/33", "37314"}, + {"2001:67c:14a0::/48", "199665"}, + {"240a:ab41::/32", "145531"}, + {"2606:2800:4acc::/48", "15133"}, + {"2606:7b00:3fff::/48", "6939"}, + {"2806:2f0:44e1::/46", "17072"}, + {"2a02:26f7:d9c5::/46", "20940"}, + {"2409:8753:b00::/37", "56047"}, + {"240e:3b0:5600::/34", "136199"}, + {"2600:1802:15::/31", "16552"}, + {"2a02:6680:1162::/48", "16116"}, + {"2001:559:c277::/48", "33657"}, + {"2001:1978:202::/48", "13768"}, + {"2602:fd8c::/36", "32945"}, + {"2607:1400::/48", "13354"}, + {"2800:840::/32", "19422"}, + {"2801:160::/40", "52456"}, + {"2a07:9980::/29", "8487"}, + {"2600:1016:9010::/39", "6167"}, + {"2600:6c20:20::/44", "20115"}, + {"2803:5c80:5034::/48", "64114"}, + {"2a06:2400::/29", "49788"}, + {"2a09:5::/48", "3258"}, + {"2606:ca00::/37", "14537"}, + {"2620:5e:a000::/47", "394855"}, + {"2804:37f0:2100::/36", "266445"}, + {"2a02:c6c1:4::/47", "9009"}, + {"2001:559:c0df::/48", "33287"}, + {"2001:c20:5009::/38", "3758"}, + {"2001:1248:a560::/45", "11172"}, + {"2409:8a51:700::/36", "56047"}, + {"2606:87c0::/48", "399132"}, + {"2001:c20:8409::/48", "9255"}, + {"2402:800:5255::/42", "7552"}, + {"2801:1d0:1::/48", "3549"}, + {"2806:1050::/32", "8151"}, + {"2a03:cac0:a::/47", "61149"}, + {"2a0a:3280::/29", "49748"}, + {"2001:67c:6bc::/48", "201723"}, + {"2001:c20:c848::/45", "3758"}, + {"2400:36a0::/42", "63991"}, + {"2600:140f:fc00::/48", "9498"}, + {"2604:5500:5000::/38", "19165"}, + {"2804:3db8::/32", "266549"}, + {"2600:140f:4a01::/37", "20940"}, + {"2600:1419:2e01::/35", "20940"}, + {"2804:14d:8c89::/41", "28573"}, + {"2a00:d780::/32", "15557"}, + {"2a0e:4f80::/29", "51083"}, + {"2001:3c8:1013::/38", "4621"}, + {"2001:dca:1000::/33", "9735"}, + {"2404:3d00:4109::/48", "21433"}, + {"2600:100f:b1e0::/33", "22394"}, + {"2600:6c10:115::/44", "20115"}, + {"2a02:cb46::/31", "20546"}, + {"2a12:7900::/29", "1239"}, + {"2001:559:29c::/47", "7922"}, + {"2606:2800:357::/44", "15133"}, + {"2a04:dd00::/30", "60117"}, + {"2001:da8:23e::/48", "24350"}, + {"2001:67c:10a8::/47", "48387"}, + {"2409:8c85:aa4d::/43", "9808"}, + {"2606:6680:27::/44", "33387"}, + {"240e:44d:6700::/41", "140345"}, + {"2604:6980:1b0::/47", "26787"}, + {"2620:f3:8000::/48", "29825"}, + {"2804:9c4::/43", "53055"}, + {"2804:6ef4:4000::/32", "270629"}, + {"2804:8178::/32", "272456"}, + {"2a04:4e40:6230::/41", "54113"}, + {"2a06:fc40::/29", "204793"}, + {"2401:d800:8d0::/42", "7552"}, + {"240a:a60f::/32", "144201"}, + {"2a11:f2c0:ffff::/48", "210563"}, + {"2400:a7c0::/32", "133168"}, + {"2406:b400:d0::/47", "55577"}, + {"240a:aeab::/32", "146405"}, + {"2804:3d28::/44", "7063"}, + {"2a02:128:4::/48", "209863"}, + {"2a03:600::/32", "15774"}, + {"2a04:4e40:7a00::/48", "54113"}, + {"2620:1f:a000::/48", "396231"}, + {"2804:30b8::/40", "28154"}, + {"2804:7cd4::/32", "271521"}, + {"2a00:17c0:c4::/48", "29802"}, + {"240e:45c:8100::/40", "140533"}, + {"2600:1419:8c01::/35", "20940"}, + {"2600:2c01::/36", "16695"}, + {"2604:c00::/32", "32875"}, + {"2804:14d:5a00::/40", "28573"}, + {"2a02:26f7:d488::/48", "36183"}, + {"2a0a:d100::/29", "198551"}, + {"2406:a00::/32", "4694"}, + {"2409:8753:700::/36", "56047"}, + {"240e:964:cac0::/42", "133775"}, + {"2600:140b:a801::/37", "20940"}, + {"2604:4ec0::/35", "396480"}, + {"2804:1070:2000::/36", "28209"}, + {"2a0e:97c0:6e0::/47", "213367"}, + {"240a:17:f90::/44", "9605"}, + {"2804:14a0::/32", "263340"}, + {"2806:2f0:6041::/46", "17072"}, + {"2a01:3f8::/32", "34270"}, + {"2a02:5740:14::/48", "58065"}, + {"2a02:ee80:4217::/44", "3573"}, + {"2a0d:8040::/30", "61439"}, + {"2001:559:796::/48", "7015"}, + {"2001:579:7200::/36", "22773"}, + {"2409:8734:aa00::/33", "9808"}, + {"240a:ae02::/32", "146236"}, + {"2607:f330:5000::/48", "15130"}, + {"2a0a:5940::/48", "207080"}, + {"2a0e:acc0:ac01::/46", "208414"}, + {"2001:559:368::/48", "7922"}, + {"2602:fdeb:4::/47", "16509"}, + {"2604:f980:4400::/44", "19957"}, + {"2806:230:6035::/32", "11888"}, + {"2a02:730:5001::/32", "29278"}, + {"2a0b:1b80::/32", "206521"}, + {"2001:250:a80a::/33", "23910"}, + {"2001:dc1::/48", "16509"}, + {"2001:44b8:2050::/48", "7545"}, + {"2404:e7::/38", "703"}, + {"2404:bf40:8646::/40", "139084"}, + {"2804:5018::/32", "268369"}, + {"2806:2f0:9c81::/46", "17072"}, + {"2a09:ea80::/29", "213314"}, + {"2a0a:9301::/46", "35196"}, + {"2402:800:f3b0::/41", "7552"}, + {"2606:2800:6a28::/46", "15133"}, + {"2001:16c0:fefe::/48", "49981"}, + {"2605:3380:4408::/47", "12025"}, + {"2804:6be4::/32", "270432"}, + {"2804:8600::/32", "272613"}, + {"2a00:4bc0:211b::/42", "16509"}, + {"2a00:6fa0::/34", "49206"}, + {"2001:470:df::/42", "6939"}, + {"2401:4900:1050::/42", "45609"}, + {"2402:28c0:3::/45", "136620"}, + {"2408:8456:6440::/39", "17816"}, + {"2409:4070:5000::/31", "55836"}, + {"2604:fec0::/32", "21808"}, + {"2a02:888:404a::/45", "47794"}, + {"2a02:26f0:ee01::/35", "20940"}, + {"2a0b:b600:110::/44", "43350"}, + {"2001:559:4d5::/48", "33657"}, + {"2606:5d40::/32", "399440"}, + {"2804:22c0:4000::/32", "264120"}, + {"2806:2f0:95e3::/38", "17072"}, + {"2a01:498:600::/32", "42018"}, + {"2a0c:b642:a01::/48", "208753"}, + {"2001:559:c476::/48", "33650"}, + {"2001:1248:84ef::/43", "11172"}, + {"2001:4878:a225::/48", "12222"}, + {"2409:807c:4100::/30", "9808"}, + {"240e:3b5:1800::/34", "4134"}, + {"2606:b900::/32", "33089"}, + {"2804:38:4205::/46", "19089"}, + {"2804:5a04::/32", "268740"}, + {"2600:8807:bb2::/41", "22773"}, + {"2620:107:90f1::/48", "22787"}, + {"2a02:ee80:407f::/48", "3573"}, + {"2408:84f3:9640::/36", "17816"}, + {"240e:44d:3b00::/41", "140345"}, + {"2a09:d80::/29", "208861"}, + {"2001:67c:15b8::/48", "48345"}, + {"2604:4200::/32", "36374"}, + {"2a02:26f7:f5c0::/48", "36183"}, + {"2a10:b080::/29", "198473"}, + {"2001:67c:1808::/48", "56837"}, + {"240a:aba0::/32", "145626"}, + {"2600:1419:fc01::/30", "20940"}, + {"2600:1fa0:81c0::/44", "16509"}, + {"2607:ff28:b003::/45", "62904"}, + {"2620:11b:e090::/42", "3356"}, + {"2804:66ec::/32", "269591"}, + {"2a01:ce88:9000::/31", "51964"}, + {"2001:67c:74::/48", "35684"}, + {"2001:559:4b8::/48", "33287"}, + {"2409:8c85:aa02::/48", "38019"}, + {"2602:107:100d::/48", "33363"}, + {"2804:2000::/38", "264459"}, + {"2804:7afc::/32", "271404"}, + {"2a02:26f7:d508::/48", "36183"}, + {"2400:9d80:2::/32", "58714"}, + {"2405:a140::/32", "132559"}, + {"2606:82c0:e008::/48", "32167"}, + {"2804:301:4000::/35", "53237"}, + {"2804:3668::/32", "266346"}, + {"2a02:2370:c000::/48", "32787"}, + {"2a0f:9400:7a00::/48", "135395"}, + {"2001:398::/32", "7682"}, + {"240a:aea2::/32", "146396"}, + {"2801:0:3c0::/48", "61463"}, + {"2801:10:6800::/48", "271821"}, + {"2001:470:58::/48", "393350"}, + {"2001:559:c27b::/48", "33651"}, + {"240a:414c::/31", "58834"}, + {"240a:a0a1::/32", "142811"}, + {"2620:132:5000::/44", "20182"}, + {"2804:1080::/32", "28287"}, + {"2001:559:33e::/48", "7922"}, + {"2407:7a80:22::/48", "30337"}, + {"240a:a5e4::/32", "144158"}, + {"2607:6b80:5::/48", "46562"}, + {"2a00:1ec0:3::/34", "8544"}, + {"2a04:a9c0::/29", "35574"}, + {"2a0f:ea00::/46", "60781"}, + {"2001:559:c0f0::/47", "7922"}, + {"2607:ba80::/32", "394666"}, + {"2a09:bac0:472::/48", "13335"}, + {"2400:9380:93c0::/44", "136167"}, + {"2600:1404:29::/36", "20940"}, + {"2605:13c0::/32", "397103"}, + {"2804:49c0::/32", "267201"}, + {"2400:6280:143::/45", "132280"}, + {"2600:370e:7114::/46", "32261"}, + {"2804:6a38:1000::/34", "270320"}, + {"2405:7040:6000::/48", "4812"}, + {"2409:800b:2c00::/46", "24547"}, + {"240a:4082:c000::/35", "58834"}, + {"2804:27c8::/32", "263922"}, + {"2a0a:6040:ac6a::/40", "61138"}, + {"2001:678:790::/48", "201292"}, + {"240e:108:1143::/44", "4134"}, + {"2600:6c10:ffe8::/46", "20115"}, + {"2804:fe0::/34", "263049"}, + {"2804:1ba4::/32", "61741"}, + {"2401:d800:fa70::/40", "7552"}, + {"240a:a0ca::/32", "142852"}, + {"2602:fda7::/36", "397894"}, + {"2a0f:7840::/29", "6764"}, + {"2001:559:8179::/48", "7016"}, + {"2001:fd8:3440::/42", "132199"}, + {"2405:1c0:6671::/46", "55303"}, + {"240a:a916::/32", "144976"}, + {"2a00:cb60::/48", "49312"}, + {"2a09:2700:8::/48", "208187"}, + {"2001:559:82f7::/48", "33668"}, + {"2402:cf80:1003::/45", "62597"}, + {"2404:bf40:85c0::/48", "7545"}, + {"240a:ae2e::/32", "146280"}, + {"2a02:26f7:d20c::/48", "36183"}, + {"2001:4408:4300::/45", "55824"}, + {"2400:2000:8::/46", "17676"}, + {"2600:1006:b1f0::/33", "22394"}, + {"2607:fb90:db00::/34", "21928"}, + {"2a05:55c1:f::/29", "50597"}, + {"2a0e:7f00::/29", "62177"}, + {"2001:5f8:7f0a::/47", "18883"}, + {"2001:44b8:4067::/48", "4739"}, + {"2602:fc24:10::/45", "210630"}, + {"2a03:4d47::/48", "199610"}, + {"2001:df4:2680::/48", "140389"}, + {"2001:df7:5d00::/48", "133296"}, + {"2001:4878:2102::/48", "12222"}, + {"2404:b0:1002::/45", "4750"}, + {"240e:983:1200::/48", "134766"}, + {"2804:275c::/32", "263896"}, + {"2a00:e340::/29", "25160"}, + {"2001:1358::/32", "11960"}, + {"2400:4d40:206a::/32", "134204"}, + {"2403:8600:c90::/44", "45820"}, + {"240e:44d:6380::/41", "4134"}, + {"2607:fbd8::/32", "11260"}, + {"2606:ab40:1::/48", "400339"}, + {"2803:8d80::/33", "11664"}, + {"2804:3300::/32", "61587"}, + {"2806:230:2051::/48", "11888"}, + {"2001:559:80d8::/47", "7922"}, + {"2804:8360::/32", "272194"}, + {"2401:1d40:2f00::/48", "4811"}, + {"2604:1100:d000::/39", "11911"}, + {"2a02:2230:2200::/40", "25467"}, + {"2a0e:b107:17b0::/48", "210490"}, + {"2001:5014:400:5::/21", "1273"}, + {"2409:8087:7500::/36", "9808"}, + {"2600:1f11::/36", "16509"}, + {"2620:f0:c002::/45", "14148"}, + {"2a0c:7882::/29", "60781"}, + {"2001:b01::/29", "12874"}, + {"2a02:16f8::/32", "12703"}, + {"2a0a:5e40:1::/48", "200353"}, + {"240a:a375::/32", "143535"}, + {"2600:1017:a010::/39", "6167"}, + {"2804:2c58::/35", "265211"}, + {"2a01:6480:2::/44", "29049"}, + {"2a0c:a200::/29", "62183"}, + {"2a0e:8f02:f03c::/48", "208137"}, + {"2408:8957:28c0::/38", "17816"}, + {"2409:805a:2900::/48", "9808"}, + {"240e:44d:6a00::/42", "140345"}, + {"2804:3d2c::/32", "266258"}, + {"2a00:16d0::/32", "12714"}, + {"2402:c0c0::/32", "135071"}, + {"2404:e200:1::/46", "18353"}, + {"240e:3b3:c800::/37", "4134"}, + {"2600:140b:b400::/48", "24319"}, + {"2800:d302:28::/43", "11830"}, + {"2001:559:8111::/48", "33491"}, + {"2402:800:971d::/42", "7552"}, + {"2a07:3502:1100::/48", "213132"}, + {"2001:1248:9e00::/43", "11172"}, + {"2400:adc0:200::/48", "9541"}, + {"240a:a2d1::/32", "143371"}, + {"2600:3003::/29", "13649"}, + {"2607:a500:5::/44", "12025"}, + {"2a06:e881:79ff::/48", "211230"}, + {"2a0c:b641:410::/44", "31396"}, + {"2a10:4640::/47", "212815"}, + {"2001:500:d937::/48", "396566"}, + {"2804:3418:4000::/32", "265435"}, + {"2a0d:f340::/29", "208861"}, + {"2602:fcf6::/36", "51999"}, + {"2a04:6543::/32", "200168"}, + {"2a10:6680::/29", "204790"}, + {"2001:da8:269::/48", "133111"}, + {"240a:a630::/32", "144234"}, + {"2800:bf0:8085::/44", "27947"}, + {"2a01:9ce0::/32", "28682"}, + {"2a02:26f7:df44::/48", "36183"}, + {"2c0f:fc89:80b0::/33", "36992"}, + {"2408:8957:a400::/40", "17622"}, + {"240a:abec::/32", "145702"}, + {"2605:92c0:f000::/36", "13904"}, + {"2001:559:421::/48", "7922"}, + {"2001:998:83::/29", "719"}, + {"2001:df0:5980::/48", "139041"}, + {"2001:4479::/37", "7545"}, + {"2401:0:4000::/40", "23966"}, + {"2001:559:c06d::/48", "7922"}, + {"2405:1c0:6a31::/46", "55303"}, + {"240a:a34d::/32", "143495"}, + {"240c:c406::/32", "24369"}, + {"240d:c010:20::/43", "132203"}, + {"2a02:960::/32", "34168"}, + {"2a10:2f00:128::/48", "213372"}, + {"2001:df0:4b::/48", "45881"}, + {"2001:df0:ea00::/48", "135469"}, + {"2001:1a68:2d::/46", "15694"}, + {"2001:da8:26d::/46", "23910"}, + {"2001:df4:f80::/48", "140443"}, + {"2408:8456:5600::/42", "17622"}, + {"2408:8459:b210::/42", "17623"}, + {"2604:8700::/36", "19578"}, + {"2a0b:d080::/32", "205747"}, + {"2400:d400:18::/48", "45671"}, + {"2600:1415:4801::/37", "20940"}, + {"2604:880:12::/48", "29802"}, + {"2620:149:a07::/44", "714"}, + {"2a02:2398:100::/38", "9166"}, + {"2001:43f8:13f0::/48", "328541"}, + {"2400:9380:8cc0::/44", "136167"}, + {"240e:940:8e00::/40", "136197"}, + {"2a03:ffc0::/32", "199354"}, + {"2804:4b6c::/32", "267305"}, + {"2a0a:6200::/32", "680"}, + {"2c0f:f528::/46", "327782"}, + {"2001:fd8:f370::/36", "4775"}, + {"2407:fc40::/32", "7676"}, + {"2600:1406:401::/39", "20940"}, + {"2804:247c::/32", "264226"}, + {"2a01:358:3021::/36", "9121"}, + {"2600:140f:f401::/38", "20940"}, + {"2620:116:c000::/46", "62708"}, + {"2a00:1328::/32", "31078"}, + {"2a06:a400::/30", "203596"}, + {"2a09:5740::/29", "206793"}, + {"2400:dcc0:af04::/33", "38631"}, + {"2607:2700::/32", "11239"}, + {"2a02:26f0:cc01::/40", "20940"}, + {"2a08:600:99::/48", "206747"}, + {"2001:559:c1fe::/48", "33667"}, + {"2001:7fb:ff00::/45", "12654"}, + {"2409:8062:807::/40", "9808"}, + {"240e:978:3a00::/37", "4134"}, + {"240e:980:4400::/40", "134768"}, + {"2800:800:640::/40", "26611"}, + {"2804:7c08::/32", "271471"}, + {"2a06:9682::/29", "31293"}, + {"2a09:2040::/29", "61157"}, + {"2406:1600:201::/39", "23871"}, + {"2607:fc58:1:18::/64", "13536"}, + {"2801:80:260::/48", "53012"}, + {"2806:267:3300::/41", "13999"}, + {"2a01:4440::/32", "31499"}, + {"2a05:83c0::/29", "201248"}, + {"2001:7fb:fe03::/45", "12654"}, + {"2401:400::/32", "7604"}, + {"240a:abd8::/32", "145682"}, + {"2804:68c0::/32", "269713"}, + {"2001:df3:6b00::/48", "137217"}, + {"2400:e340:3::/32", "136450"}, + {"2408:840d:1a00::/42", "17621"}, + {"2600:6c38:9e::/42", "20115"}, + {"2806:310:31::/46", "16960"}, + {"240a:aa92::/32", "145356"}, + {"240a:ac47::/32", "145793"}, + {"240a:af2b::/32", "146533"}, + {"2a02:6200::/29", "35206"}, + {"2001:559:20d::/48", "33287"}, + {"2001:559:84f5::/48", "33657"}, + {"2001:559:85ff::/48", "21508"}, + {"240a:a9d9::/32", "145171"}, + {"2a0b:7280:0:4::/63", "43345"}, + {"2a0b:dc00::/29", "37002"}, + {"2001:559:84c7::/48", "7015"}, + {"2804:301:8000::/34", "53237"}, + {"2a04:8400::/32", "207176"}, + {"2a0f:8645:b00c::/30", "25682"}, + {"2001:df0:fb00::/48", "136105"}, + {"2001:4350:ffef::/48", "37703"}, + {"2001:43f8:110::/48", "37181"}, + {"240a:ad09::/32", "145987"}, + {"2605:f440:53::/48", "57439"}, + {"2a02:ee80:4252::/44", "3573"}, + {"2001:67c:2644::/48", "6908"}, + {"2001:bf7:1322::/44", "206813"}, + {"2a0c:7e80::/29", "204790"}, + {"2001:250:c2a::/45", "138374"}, + {"2a0c:9c0::/48", "210021"}, + {"2401:2f00::/32", "17617"}, + {"240a:a924::/32", "144990"}, + {"2605:e80::/32", "11269"}, + {"2800:160:200e::/43", "14259"}, + {"2800:bf0:3400::/44", "52257"}, + {"2803:21e0::/32", "262186"}, + {"2804:df4:8000::/35", "52531"}, + {"2804:2a00::/32", "264050"}, + {"2a0b:6b86:200::/40", "60271"}, + {"2804:5240::/32", "268505"}, + {"2409:8751:b00::/37", "56047"}, + {"240a:aba5::/32", "145631"}, + {"2804:52f4::/36", "268552"}, + {"2400:7400:4a::/48", "23736"}, + {"2407:5f80::/32", "135155"}, + {"240a:a0e3::/32", "142877"}, + {"2804:14c:87b3::/41", "28573"}, + {"2804:7828::/32", "271224"}, + {"2a00:f826:a::/48", "204254"}, + {"2001:da8:a3::/48", "24361"}, + {"2607:fb90:c13e::/48", "22140"}, + {"2a0b:fb00::/29", "200548"}, + {"2402:3580:8011::/48", "134118"}, + {"2402:e280:212c::/47", "134674"}, + {"2408:840c:5000::/40", "17621"}, + {"2408:8456:4e40::/39", "17816"}, + {"2600:1406:cc01::/35", "20940"}, + {"2600:1901:c120::/44", "396982"}, + {"2610:28:5031::/32", "81"}, + {"2620:128:1004::/48", "53620"}, + {"2400:cb00:350::/45", "13335"}, + {"2610:a1:1081::/48", "397228"}, + {"2001:559:8301::/48", "7015"}, + {"2001:67c:2070::/48", "200000"}, + {"2400:fc00:e50::/33", "45773"}, + {"2408:8459:ba10::/42", "17623"}, + {"240a:a126::/32", "142944"}, + {"240a:a613::/32", "144205"}, + {"2a00:8f00:205::/48", "16349"}, + {"2a10:a080::/29", "51083"}, + {"2608:c101:1::/48", "27066"}, + {"2806:102e:7::/44", "8151"}, + {"2a0b:b9c0::/32", "45040"}, + {"2001:67c:8e4::/48", "41666"}, + {"2001:67c:10b8::/48", "207021"}, + {"240e:37e:2600::/32", "4134"}, + {"2600:8807:5360::/34", "22773"}, + {"2a00:da8::/32", "34086"}, + {"2a06:4fc0::/29", "8888"}, + {"2a10:9840:1::/46", "211757"}, + {"2001:559:8334::/48", "20214"}, + {"2406:e040::/48", "140765"}, + {"2409:8915:1c00::/39", "56044"}, + {"2602:fc52:320::/48", "212243"}, + {"2602:ffe4:c25::/46", "21859"}, + {"2610:b0:401e::/42", "3573"}, + {"2804:4960::/32", "267181"}, + {"2a02:26f7:c380::/48", "36183"}, + {"2a0b:b8c0::/31", "60405"}, + {"2001:559:44d::/46", "7922"}, + {"240e:3be:5600::/34", "4134"}, + {"240e:980:8a00::/40", "134238"}, + {"2605:a404:8ad::/43", "33363"}, + {"2a0e:fd45:6938::/47", "207972"}, + {"2001:ee0:d140::/38", "45899"}, + {"2408:8957:7100::/40", "17816"}, + {"2804:22c:f700::/36", "22689"}, + {"2804:104c:6000::/40", "263629"}, + {"2806:1040:fc::/48", "20940"}, + {"2a02:26f7:f841::/46", "20940"}, + {"2a02:2e02:92a0::/37", "12479"}, + {"2a05:5940::/29", "42632"}, + {"2a05:fb41::/30", "59504"}, + {"2409:8a55:3e00::/33", "9808"}, + {"2605:6e00::/32", "40298"}, + {"2804:68b4::/34", "269710"}, + {"2a01:b740:a05::/48", "714"}, + {"2a02:29e0::/32", "49367"}, + {"2001:559:c537::/48", "33491"}, + {"2404:1a40::/39", "9744"}, + {"240a:a401::/32", "143675"}, + {"2a01:664:2::/38", "48951"}, + {"2a01:a5e0::/32", "201808"}, + {"2a02:17e0::/32", "29164"}, + {"2a03:6e0:8000::/33", "6663"}, + {"2405:2400::/48", "58640"}, + {"2605:e040::/32", "398325"}, + {"2620:123:20c0::/47", "30103"}, + {"2409:8c20:5a63::/34", "56046"}, + {"2605:9d80:a011::/48", "36678"}, + {"2a10:cdc0:f401::/36", "213100"}, + {"2801:80:760::/48", "263576"}, + {"2804:23fc::/32", "264196"}, + {"2a00:f520::/32", "29551"}, + {"2a10:600::/32", "209208"}, + {"2001:559:34a::/48", "33491"}, + {"2001:559:8476::/48", "7016"}, + {"240e:44d:6e40::/42", "140354"}, + {"2610:e0:9000::/36", "2572"}, + {"2a0c:b642:fc0::/43", "213190"}, + {"2404:b0:f::/43", "7568"}, + {"2404:ec:200::/39", "703"}, + {"2620:63:2000::/48", "18966"}, + {"2620:11b:e0bc::/48", "202818"}, + {"2001:678:e0::/48", "3303"}, + {"240e:958:2100::/30", "4134"}, + {"2804:9a4::/32", "23074"}, + {"2a02:8400::/25", "15557"}, + {"2a04:4e40:7000::/48", "54113"}, + {"2804:2430::/32", "264207"}, + {"2804:7604::/34", "271084"}, + {"2001:559:790::/48", "33659"}, + {"2001:67c:2828::/48", "61013"}, + {"2001:44b8:4051::/48", "4739"}, + {"2602:fd59:10::/48", "25773"}, + {"2804:5128::/32", "268434"}, + {"2001:559:79c::/48", "7016"}, + {"2600:380:a380::/36", "20057"}, + {"2605:bc0:2134::/47", "54201"}, + {"2804:57b4::/32", "268081"}, + {"2804:388::/30", "22085"}, + {"2001:559:c131::/48", "33491"}, + {"2001:559:c2a8::/48", "7922"}, + {"2800:160:1d3d::/46", "14259"}, + {"2800:800:a52::/42", "26611"}, + {"2804:58f4::/32", "268160"}, + {"2a01:8740:2::/45", "57344"}, + {"2a04:6f00::/32", "3214"}, + {"2a04:f340::/36", "8758"}, + {"2001:67c:12d8::/48", "1101"}, + {"2001:67c:2780::/48", "200060"}, + {"2404:0:3000::/36", "17709"}, + {"2806:2f0:99c1::/42", "17072"}, + {"2a00:8f20::/32", "60687"}, + {"2001:559:704::/48", "7922"}, + {"2407:e1c0:4c::/40", "146872"}, + {"2001:559:8536::/48", "33651"}, + {"2402:800:bad0::/42", "7552"}, + {"2405:9800::/45", "45430"}, + {"2408:84f3:a410::/42", "134543"}, + {"240e:4e::/37", "17633"}, + {"2620:4d:400b::/45", "62597"}, + {"2a02:26f7:d161::/43", "20940"}, + {"2001:559:c4cb::/45", "7922"}, + {"2408:8957:6b00::/40", "17816"}, + {"240a:aab9::/32", "145395"}, + {"2804:1110:ab02::/33", "262901"}, + {"2a00:1d23::/32", "206570"}, + {"2a02:2580::/32", "2119"}, + {"2a0d:c900::/29", "31543"}, + {"2001:559:37c::/48", "7016"}, + {"2001:df2:d580::/48", "140101"}, + {"240a:a498::/32", "143826"}, + {"240e:44d:3500::/42", "140345"}, + {"2620:6f:2000::/48", "397529"}, + {"2a02:388::/32", "39040"}, + {"2a02:26f7:f5c8::/48", "36183"}, + {"2001:4878:c347::/48", "12222"}, + {"2400:8b00:a00::/42", "45727"}, + {"240c:ca02::/31", "138371"}, + {"2607:f740:e644::/44", "63911"}, + {"2801:96::/40", "28586"}, + {"2804:76c8::/34", "271134"}, + {"2001:559:856c::/48", "33650"}, + {"2001:6d0:ffc8::/48", "204582"}, + {"2403:e200:11::/46", "45543"}, + {"2620:123:9001::/48", "33695"}, + {"2804:20fc:30::/37", "264525"}, + {"2a02:26f0:3701::/36", "20940"}, + {"2a04:4e40:2e30::/41", "54113"}, + {"2001:418:1401:2::/64", "2914"}, + {"2001:500:8e::/48", "12041"}, + {"2001:da8:8020::/44", "24364"}, + {"2400:ca02:f0e3::/39", "23688"}, + {"2803:ba0:100::/40", "267756"}, + {"2803:4980::/32", "52328"}, + {"2804:7b20::/32", "271412"}, + {"2a0e:e140::/48", "58255"}, + {"2001:67c:27a4::/48", "3301"}, + {"2001:de1::/42", "7667"}, + {"2401:d800:9d60::/40", "7552"}, + {"2600:370f:34ea::/39", "32261"}, + {"2620:149:a33::/40", "714"}, + {"2804:3710::/32", "266387"}, + {"2a00:a8e0:301::/48", "17054"}, + {"2001:559:87b4::/48", "33657"}, + {"2402:ef0b:c000::/36", "24515"}, + {"2405:b640::/47", "24305"}, + {"2409:8904:5570::/40", "24547"}, + {"2604:a100:200::/48", "6939"}, + {"2a00:7180:8008::/46", "207808"}, + {"2a02:26f7:d409::/42", "20940"}, + {"2400:f6c0::/37", "136530"}, + {"2620:0:6c2::/48", "16807"}, + {"2803:3440::/32", "263784"}, + {"2806:2f0:42e1::/46", "17072"}, + {"2a02:26f7:e185::/46", "20940"}, + {"2001:559:8265::/48", "7922"}, + {"2001:ee0:324b::/37", "45899"}, + {"240a:a37f::/32", "143545"}, + {"2803:1dc0::/32", "20207"}, + {"2806:2f0:8203::/42", "17072"}, + {"2a02:26f7:c705::/46", "20940"}, + {"2600:140f:5200::/48", "9829"}, + {"2a02:16a0::/32", "13030"}, + {"2a04:53c0:82::/47", "47784"}, + {"2a0d:3b00::/29", "204939"}, + {"2a00:f440:d::/32", "48347"}, + {"2a02:26f7:c7c5::/46", "20940"}, + {"2a03:1a00::/32", "39647"}, + {"2a00:1d34:4500::/34", "9121"}, + {"2001:1a68:ed00::/35", "15694"}, + {"2a03:3320:4::/48", "8670"}, + {"2a0b:fe40::/29", "2116"}, + {"2001:559:c2fc::/48", "33659"}, + {"2400:e1c0:10::/47", "58659"}, + {"2401:d800:7280::/42", "7552"}, + {"2402:3a80:58::/46", "38266"}, + {"2804:4f0::/32", "22129"}, + {"2401:d000::/28", "38195"}, + {"240a:a785::/32", "144575"}, + {"2606:4700:8390::/44", "13335"}, + {"2800:160:118c::/43", "14259"}, + {"2804:14d:4cb7::/44", "28573"}, + {"2a02:9010:45::/48", "20905"}, + {"2a04:1c42:100::/32", "201035"}, + {"2400:9380:9030::/47", "4809"}, + {"2408:84f3:f850::/44", "17816"}, + {"2408:8957:a500::/40", "17816"}, + {"240a:a105::/32", "142911"}, + {"2604:ee00:7::/48", "18865"}, + {"2804:3274::/32", "265079"}, + {"2409:8055:40::/48", "9808"}, + {"240e:978:100::/37", "4134"}, + {"2600:140b:e800::/48", "24319"}, + {"2a00:dfa0::/32", "50673"}, + {"2a02:24f0::/32", "8592"}, + {"2001:253:120::/48", "142086"}, + {"2001:559:c014::/48", "33651"}, + {"2001:ce1::/32", "137207"}, + {"240e:978::/40", "137702"}, + {"2607:6100::/45", "54380"}, + {"2a02:26f7:bb00::/48", "36183"}, + {"2001:da8:c807::/44", "24356"}, + {"2804:1a64::/32", "14457"}, + {"2a02:f240::/29", "18779"}, + {"2a10:d000:1d::/29", "35506"}, + {"2405:1c0:6771::/46", "55303"}, + {"2a02:25b0:aaab::/33", "49101"}, + {"2a03:3620::/32", "48522"}, + {"2a04:4e42:8::/43", "54113"}, + {"2406:840:e010::/47", "213069"}, + {"2408:840d:200::/42", "17621"}, + {"2602:feb2:80::/36", "62492"}, + {"2803:fbe0:10::/46", "270092"}, + {"2804:14d:4491::/41", "28573"}, + {"2001:559:81fe::/48", "33490"}, + {"2001:559:87b2::/48", "21508"}, + {"2402:800:bbf0::/37", "7552"}, + {"2804:62a8::/32", "269310"}, + {"2a01:bb60::/32", "202120"}, + {"2a03:2440::/32", "199660"}, + {"2001:1a10:ce::/39", "8781"}, + {"2402:800:31d3::/44", "7552"}, + {"2804:4dcc::/33", "52856"}, + {"240a:a0d8::/32", "142866"}, + {"240a:ab05::/32", "145471"}, + {"2600:1407:8001::/37", "20940"}, + {"2604:d600:1408::/39", "32098"}, + {"2a00:19a0::/32", "34222"}, + {"2a0d:8d06:1::/36", "60557"}, + {"2402:7500:800::/38", "24158"}, + {"240a:a9ba::/32", "145140"}, + {"2620:103::/47", "19994"}, + {"2804:46bc::/32", "267008"}, + {"2a00:1cb8:1::/46", "12713"}, + {"2a00:fd40:b::/48", "204402"}, + {"2a0e:aa07:f0d0::/46", "139216"}, + {"2001:559:356::/47", "7015"}, + {"2001:559:c09b::/45", "7922"}, + {"240a:ad37::/32", "146033"}, + {"2804:ef4:6420::/32", "28642"}, + {"2804:f78::/32", "263587"}, + {"2a0d:8700::/29", "3268"}, + {"2001:360:12::/45", "135887"}, + {"240a:a9d5::/32", "145167"}, + {"2603:90bc::/32", "11427"}, + {"2a0b:1040::/29", "50582"}, + {"2402:9b00:84::/32", "45796"}, + {"2405:a200::/32", "17534"}, + {"2406:3000:3:7::/60", "4657"}, + {"240a:a7ff::/32", "144697"}, + {"2804:1040:b0c1::/42", "263626"}, + {"2804:390c::/32", "266520"}, + {"2a0a:fa80::/29", "5582"}, + {"2001:ee0:3c40::/33", "45899"}, + {"2001:4200:8010::/34", "2018"}, + {"2402:800:b950::/42", "7552"}, + {"2620:10d:9004::/48", "25993"}, + {"2a03:2100::/42", "51559"}, + {"2001:fd8:1940::/37", "4775"}, + {"2408:8459:4c80::/42", "136959"}, + {"2602:fed2:fe0::/44", "53356"}, + {"2620:16:e000::/48", "396027"}, + {"2a03:d000:1110::/46", "31163"}, + {"2408:8256:3680::/48", "17816"}, + {"240a:a59c::/32", "144086"}, + {"240e:950:1000::/33", "4134"}, + {"2602:fcd3:210::/44", "1239"}, + {"2604:a180:c000::/34", "11139"}, + {"2620:5c:a000::/48", "397138"}, + {"2620:13d:e002::/47", "398123"}, + {"2801:19:9800::/48", "14080"}, + {"2804:14c:f427::/40", "28573"}, + {"2804:6fc0::/32", "270682"}, + {"2a00:8b40::/29", "60426"}, + {"2401:d800:d7f0::/36", "7552"}, + {"2405:b000:200::/37", "6262"}, + {"2a0e:cd00:680::/31", "23031"}, + {"2409:805c:3071::/40", "9808"}, + {"2620:31:4000::/40", "14977"}, + {"2620:119:5006::/44", "13443"}, + {"2a06:c700::/34", "6810"}, + {"2607:fcd0:1336::/47", "29761"}, + {"2604:8200:8000::/36", "23089"}, + {"2620:100:f00a::/48", "40068"}, + {"2806:2f0:7281::/46", "17072"}, + {"2a10:2f40::/32", "49824"}, + {"2001:559:71a::/48", "7015"}, + {"240a:abc3::/32", "145661"}, + {"2001:df0:d7::/44", "8075"}, + {"2001:fd8:b0f0::/39", "4775"}, + {"2406:8800:9023::/45", "17465"}, + {"2804:3bc0::/32", "262576"}, + {"2a01:73c0:700::/32", "21450"}, + {"2a02:2ad0:639::/45", "702"}, + {"2001:559:876a::/48", "33660"}, + {"2607:f548::/32", "22878"}, + {"2804:518::/32", "262491"}, + {"2a02:26f7:10::/48", "36183"}, + {"2a06:a000:180::/48", "48741"}, + {"2c0f:f6d0:84::/47", "327687"}, + {"2001:559:7b4::/48", "33491"}, + {"2001:559:85c3::/48", "13367"}, + {"2607:e880:5060::/46", "12220"}, + {"2804:842c::/32", "272244"}, + {"2a02:cb80:40f0::/48", "43766"}, + {"2001:559:587::/48", "7015"}, + {"2001:610:121::/29", "1103"}, + {"2400:9380:9220::/47", "4809"}, + {"2605:b640:1101::/48", "53736"}, + {"2804:74e8::/32", "271011"}, + {"2408:8456:a040::/38", "17816"}, + {"240a:ad68::/32", "146082"}, + {"2602:fdd9::/36", "396935"}, + {"2804:285c::/32", "263958"}, + {"2804:2bf4:c0c0::/34", "262785"}, + {"2a06:dd80::/29", "203544"}, + {"2a0e:1c80:e::/48", "1299"}, + {"2001:678:f78::/48", "213027"}, + {"2001:fd8:f1c0::/42", "132199"}, + {"2001:12e0:806::/37", "10429"}, + {"2408:8957:4e00::/40", "17622"}, + {"2600:1419:c401::/36", "20940"}, + {"2804:3ccc::/32", "266235"}, + {"2a00:79e1:f12::/47", "36384"}, + {"2402:800:52c5::/43", "7552"}, + {"240a:aa29::/32", "145251"}, + {"240a:ace9::/32", "145955"}, + {"2a09:d840::/29", "400522"}, + {"2610:a1:3038::/48", "12008"}, + {"2620:8e:2000::/48", "397263"}, + {"2806:20d:2100::/35", "32098"}, + {"2a02:d68::/32", "12778"}, + {"2001:500:99::/46", "30133"}, + {"2001:559:c2f5::/46", "7922"}, + {"2402:3a80:1e00::/45", "38266"}, + {"2406:daa0:80c0::/44", "16509"}, + {"2620:0:ee0::/48", "47015"}, + {"2a07:4080::/29", "47132"}, + {"2400:9800:6011::/45", "139994"}, + {"2402:f800:e000::/36", "7602"}, + {"2404:e200:5::/46", "18353"}, + {"2405:1a40::/48", "135981"}, + {"240e:3b1::/35", "134773"}, + {"2602:ffc5:104::/48", "44954"}, + {"2606:3c00:f010::/36", "20365"}, + {"2806:230:301e::/48", "265594"}, + {"2407:6e00:253::/45", "38332"}, + {"240a:a087::/32", "142785"}, + {"2605:12c0::/32", "394743"}, + {"2804:3d6c::/32", "266530"}, + {"2a00:1a18::/29", "20755"}, + {"2a04:3540::/30", "202053"}, + {"2a04:de40:80::/39", "201971"}, + {"2a05:89c0::/29", "49223"}, + {"2001:559:7f1::/48", "33490"}, + {"2001:df6:5680::/48", "142020"}, + {"2606:3c80:8100:3::/36", "33582"}, + {"2a01:6c8:2000::/36", "59705"}, + {"2001:e60:d3b0::/45", "4766"}, + {"2401:d800:2222::/41", "7552"}, + {"240a:a450::/32", "143754"}, + {"2804:1968::/32", "61793"}, + {"2a0e:b107:dc6::/48", "211486"}, + {"2001:559:3e5::/48", "33490"}, + {"240a:ad2b::/32", "146021"}, + {"240e:2c:c000::/31", "4134"}, + {"240e:3bf:6400::/35", "140312"}, + {"2620:119:e011::/42", "30337"}, + {"2600:9000:10dc::/42", "16509"}, + {"2a01:b960:230f::/48", "213246"}, + {"2a0c:9a40:8082::/48", "61138"}, + {"2401:7000:d902::/34", "45177"}, + {"240a:a2ca::/32", "143364"}, + {"240a:af6d::/32", "146599"}, + {"2606:4700:57::/44", "13335"}, + {"2001:559:8569::/48", "33651"}, + {"2804:3270::/32", "265078"}, + {"2408:8760::/32", "4837"}, + {"240a:aa3c::/32", "145270"}, + {"240a:ac10::/32", "145738"}, + {"2606:9500:4000::/36", "396071"}, + {"2a0c:7e41:8600::/48", "20473"}, + {"2a11:8b40::/29", "1239"}, + {"2001:43f8:1000::/48", "328739"}, + {"240e:3ba:3e00::/33", "140308"}, + {"2602:107:310::/48", "11426"}, + {"2804:6b40::/33", "270388"}, + {"2a00:1850:2e6::/44", "29357"}, + {"2a01:348:fac::/32", "39326"}, + {"2804:6cfc::/32", "270505"}, + {"240a:a3d9::/32", "143635"}, + {"2804:1a14:3000::/36", "265962"}, + {"2a00:d88::/32", "15498"}, + {"2a06:e881:5700::/40", "209619"}, + {"2a10:3044::/30", "398481"}, + {"2c0f:2d00::/32", "328916"}, + {"2001:559:8342::/48", "33651"}, + {"2001:559:c09e::/48", "33659"}, + {"2001:918:fff2::/48", "208813"}, + {"2804:3e70:abce::/35", "266596"}, + {"2a03:2c60::/32", "49627"}, + {"2a0a:df00::/29", "201894"}, + {"2a10:bc80::/29", "212081"}, + {"2602:fcf6:ff8::/48", "212623"}, + {"2605:a000:70f::/36", "10796"}, + {"2800:300:85e0::/36", "27986"}, + {"2001:559:852a::/48", "7015"}, + {"2001:559:c39c::/48", "7015"}, + {"2620:137:a001::/48", "394707"}, + {"2800:a30:7adf::/32", "262187"}, + {"2804:2c6c::/32", "265217"}, + {"2401:d800:28f0::/39", "7552"}, + {"2600:1a0f:2000::/48", "10307"}, + {"2a05:1083:fcc0::/44", "209870"}, + {"2001:67c:2ac0::/48", "29663"}, + {"2001:e60:a000::/43", "4766"}, + {"240a:a03f::/32", "142713"}, + {"2620:93:4000::/48", "36359"}, + {"2001:559:4bf::/48", "7016"}, + {"2001:1250:e500::/44", "22894"}, + {"2404:8000:1025::/44", "17451"}, + {"2804:8574::/32", "272580"}, + {"2001:67c:1770::/48", "3301"}, + {"2001:1248:5f8f::/42", "11172"}, + {"2001:4c40::/32", "8368"}, + {"240a:a82f::/32", "144745"}, + {"2605:6ac0::/36", "14586"}, + {"2400:8b00:700::/42", "45727"}, + {"240e:a7:9000::/28", "4134"}, + {"2600:140b:5400::/48", "31109"}, + {"2804:75d0::/32", "271071"}, + {"2001:67c:ac::/48", "44329"}, + {"2a0d:6d00::/29", "49223"}, + {"2a0f:9400:802c::/48", "213234"}, + {"2408:8256:397f::/48", "17816"}, + {"240e:474::/23", "4134"}, + {"2600:1407:4800::/48", "35994"}, + {"2600:1480:d000::/48", "21342"}, + {"2804:36e8::/32", "52924"}, + {"2806:230:403a::/48", "265594"}, + {"2001:550:8d02::/38", "174"}, + {"2600:380:7880::/39", "20057"}, + {"2600:5c00:3a89::/41", "20001"}, + {"2a05:e2c0::/29", "30766"}, + {"2001:250:600c::/46", "23910"}, + {"2401:d800:522::/40", "7552"}, + {"2401:f000:19::/32", "38477"}, + {"2409:802f:2909::/46", "56041"}, + {"240a:a973::/32", "145069"}, + {"240e:d6:7000::/28", "4134"}, + {"240e:966:2800::/37", "133776"}, + {"2600:1403:4001::/37", "20940"}, + {"2a02:26f7:e544::/48", "36183"}, + {"2a0a:65c0::/32", "15703"}, + {"2a0e:b102:130::/44", "39526"}, + {"2001:67c:2850::/48", "212894"}, + {"2405:f000::/32", "7530"}, + {"240e:9b:f012::/45", "140251"}, + {"2607:fd48:fff0:1031::/57", "13536"}, + {"2620:12c::/44", "19966"}, + {"240a:aac9::/32", "145411"}, + {"2620:105:b0bc::/41", "2055"}, + {"2804:1528::/32", "263374"}, + {"2a05:1082:5::/48", "136918"}, + {"2401:d800:5112::/41", "7552"}, + {"2602:80a:2000::/48", "398351"}, + {"2a01:6e40::/32", "21274"}, + {"2001:550:6c05::/38", "174"}, + {"2001:559:f4::/48", "7725"}, + {"2408:8256:268::/39", "17622"}, + {"2408:8456:9000::/42", "17622"}, + {"240e:5e:2101::/35", "4134"}, + {"2604:d600:15b4::/46", "32098"}, + {"2804:1a14:5000::/32", "28153"}, + {"2409:8914:a400::/39", "56044"}, + {"2600:1419:5c01::/38", "20940"}, + {"2a00:86c0:1053::/34", "2906"}, + {"2a02:2e02:1b40::/40", "12479"}, + {"2806:370:5000::/44", "28403"}, + {"2a03:5341:10::/44", "18666"}, + {"2a06:98c0:1001::/48", "139242"}, + {"2a06:e881:8706::/44", "210554"}, + {"2001:559:8193::/48", "33660"}, + {"2401:2700:a::/48", "9286"}, + {"2600:6c34:381::/48", "33588"}, + {"2607:f4e8:ac2::/48", "38622"}, + {"2620:131:1092::/41", "26450"}, + {"2804:163c:201::/39", "263277"}, + {"2a00:adc0::/35", "41655"}, + {"2a02:26f7:c35e::/42", "20940"}, + {"2a04:a181::/32", "47474"}, + {"2001:559:86ec::/48", "33667"}, + {"2408:8956:4500::/40", "17816"}, + {"240e:980:8c00::/40", "4134"}, + {"2600:140f:b000::/48", "9498"}, + {"2402:800:9a47::/43", "7552"}, + {"240a:a43d::/32", "143735"}, + {"2803:8ae0::/32", "269933"}, + {"2a00:f18::/32", "39545"}, + {"2a00:ab40:5001::/32", "41798"}, + {"2001:678:fd0::/48", "213103"}, + {"2600:803:639::/35", "701"}, + {"2602:200::/32", "7992"}, + {"2804:1e5c::/32", "264424"}, + {"2001:559:2c3::/48", "33287"}, + {"2001:c20:48a1::/48", "3758"}, + {"2001:4800::/32", "33070"}, + {"2600:1416:a001::/33", "20940"}, + {"2607:fb50::/36", "22781"}, + {"2405:d000::/33", "18024"}, + {"240a:a800::/32", "144698"}, + {"2606:2800:5a3c::/46", "15133"}, + {"2801:80:ea0::/48", "264095"}, + {"2803:9800:98c5::/46", "11664"}, + {"2a05:dac0::/46", "44166"}, + {"2a0e:b107:938::/48", "204446"}, + {"2405:1c0:6331::/45", "55303"}, + {"2603:fc88::/29", "63023"}, + {"2803:6604:c600::/34", "28075"}, + {"2804:d70:440::/32", "52626"}, + {"2a06:b100::/29", "198024"}, + {"2600:1f01:4880::/47", "16509"}, + {"2a02:26f7:d109::/42", "20940"}, + {"2a04:5d00:81::/29", "60241"}, + {"2408:8957:9c00::/40", "17622"}, + {"2607:f8f0:1000::/40", "271"}, + {"2a0d:6f80::/29", "212144"}, + {"2001:559:c1b8::/48", "33657"}, + {"2001:559:c38b::/48", "7922"}, + {"2001:67c:2198::/48", "8605"}, + {"2408:8646:1200::/32", "4837"}, + {"2804:4f6c::/32", "268326"}, + {"2001:559:c092::/48", "7922"}, + {"2402:5300:4e00::/40", "38733"}, + {"2a10:bac0::/32", "39396"}, + {"2400:a980:9100::/34", "133111"}, + {"2620:34::/48", "3356"}, + {"2620:11c:8900::/37", "19"}, + {"2a02:26f7:c002::/48", "36183"}, + {"2804:215c::/32", "264550"}, + {"2a02:26f7:c689::/48", "20940"}, + {"2a0e:b107:a20::/44", "213215"}, + {"2a12:a6c0::/29", "400522"}, + {"2001:559:8503::/45", "7922"}, + {"240e:3b5:dc00::/34", "4134"}, + {"2600:140f:5a00::/48", "55836"}, + {"2a01:53a0:1::/48", "199953"}, + {"2a02:d280::/29", "197296"}, + {"2a0c:e640:1000::/48", "57401"}, + {"2001:250:834::/48", "23910"}, + {"2001:4888:8040::/48", "6167"}, + {"2401:3cc0:701::/36", "137409"}, + {"2605:8d80::/37", "812"}, + {"2a00:d91:1::/29", "12552"}, + {"2a01:5041:3000::/48", "202196"}, + {"2a02:6c20:828::/48", "208143"}, + {"2a0c:e2c0::/29", "62275"}, + {"2c0f:ef30::/32", "328334"}, + {"2a0e:b107:11b0::/44", "140731"}, + {"2001:4878:a347::/48", "12222"}, + {"2a11:3280::/29", "204790"}, + {"2804:b18:d000::/34", "52941"}, + {"2804:56e8::/32", "268031"}, + {"2804:6860::/32", "269688"}, + {"2a0c:4400::/32", "39405"}, + {"2a0c:9a40:1070::/40", "34927"}, + {"2403:2c00:7:1::4/62", "4058"}, + {"240a:a8df::/32", "144921"}, + {"2804:5a00::/32", "268739"}, + {"2a0a:200::/29", "786"}, + {"2001:df0:7540::/48", "142439"}, + {"2409:8028:30a1::/43", "56041"}, + {"2603:c012:4000::/36", "31898"}, + {"2a01:110:9009::/33", "6584"}, + {"2a02:e0::/43", "34984"}, + {"2001:559:30::/48", "33287"}, + {"2602:feda:d91::/48", "57401"}, + {"2804:61dc:7000::/32", "269261"}, + {"2a0d:ee80::/32", "42061"}, + {"2001:1248:5a1b::/42", "11172"}, + {"2409:804b:2b09::/32", "24445"}, + {"2607:fc58:1:50::/64", "13536"}, + {"2620:10e:1000::/47", "33397"}, + {"2a00:8007:ff00::/40", "197898"}, + {"2a02:26f7:f8cc::/48", "36183"}, + {"2606:2800:4224::/48", "15133"}, + {"2a01:9dc0::/32", "48684"}, + {"2001:648:2001::/44", "5408"}, + {"2001:d10:8402::/44", "4787"}, + {"2001:dc7:ffd6::/42", "24151"}, + {"2001:128c:7100::/32", "25933"}, + {"2001:4490:3fc::/37", "9829"}, + {"2400:bd00::/32", "45267"}, + {"2607:cd8c::/31", "6528"}, + {"2607:f750:6000::/40", "23473"}, + {"2804:39d4::/32", "266053"}, + {"2403:9800:b066::/33", "4648"}, + {"2408:8256:3b8b::/48", "17816"}, + {"2602:fc23::/43", "8095"}, + {"2607:fc98::/32", "29854"}, + {"2a0f:1202::/32", "60781"}, + {"2604:b040:1::/48", "26282"}, + {"2605:2e00::/36", "63017"}, + {"2400:9700:130::/32", "24550"}, + {"2409:896a:ac00::/39", "9808"}, + {"2600:5c00:200::/48", "11351"}, + {"2620:13f:700a::/47", "51439"}, + {"2806:268:380:12::/37", "13999"}, + {"2a02:26f0:e400::/48", "34164"}, + {"2001:559:c3f7::/48", "33655"}, + {"2001:fd8:224::/46", "132199"}, + {"2408:8956:6b00::/40", "17816"}, + {"240e:e7::/28", "4134"}, + {"2604:fe00:8::/32", "30517"}, + {"2a02:26f7:c844::/48", "36183"}, + {"2a0c:7dc0::/29", "18779"}, + {"2001:df0:1a::/48", "38244"}, + {"2001:df5:9180::/48", "9009"}, + {"2400:a140::/32", "59125"}, + {"2404:bf40:8001::/48", "2764"}, + {"2407:f1c0::/48", "135921"}, + {"2804:4eb4::/32", "61593"}, + {"2001:4479:f000::/39", "7545"}, + {"2001:b400:e000::/36", "17421"}, + {"2402:800:3eee::/43", "7552"}, + {"2600:6c10:fffa::/29", "20115"}, + {"2801:80:ad0::/48", "52826"}, + {"2804:14d:c283::/41", "28573"}, + {"2a0f:c400:ca::/48", "60781"}, + {"2001:559:175::/48", "7922"}, + {"2602:fde5:2b::/36", "393424"}, + {"2a09:bac0:50::/46", "13335"}, + {"2405:d300:400::/48", "38809"}, + {"2602:fe4c::/36", "397427"}, + {"2a02:26f7:f4c9::/42", "20940"}, + {"2a06:e881:180f::/48", "206885"}, + {"2001:418:1401:99::/54", "2914"}, + {"2403:9bc0::/44", "135562"}, + {"2408:80ea:62c0::/42", "17622"}, + {"240a:a5d7::/32", "144145"}, + {"2620:0:2902::/48", "22843"}, + {"2a02:2698:202e::/38", "51645"}, + {"2a0c:280::/30", "34966"}, + {"2405:2001:2::/48", "6421"}, + {"2409:8e01::/28", "9808"}, + {"240e:44d:5a00::/42", "140345"}, + {"2603:fdd0::/22", "397165"}, + {"2604:d600:689::/45", "32098"}, + {"2604:f840::/32", "397026"}, + {"2405:600:3::/35", "55805"}, + {"2a10:4f40:1::/48", "28693"}, + {"2408:8456:c240::/39", "17816"}, + {"240a:adbd::/32", "146167"}, + {"2607:4880:e000::/36", "53508"}, + {"2804:3700::/32", "262312"}, + {"2804:7724::/32", "271158"}, + {"2001:559:c2e5::/48", "33491"}, + {"2401:d800:7612::/41", "7552"}, + {"2403:d4c0::/32", "136714"}, + {"2605:a404:53::/42", "33363"}, + {"2607:b600:8::/48", "10397"}, + {"2a00:8860:b00::/40", "39239"}, + {"2a02:26f7:fc05::/46", "20940"}, + {"2a0b:6903:fdb::/48", "206873"}, + {"2001:938:4052::/32", "8437"}, + {"240a:a096::/32", "142800"}, + {"240e:44d:3800::/42", "140345"}, + {"2605:dd40:8260::/44", "16509"}, + {"2606:f40:4000::/48", "16509"}, + {"2a00:f740:401::/32", "28875"}, + {"2a02:2ab0:213::/44", "702"}, + {"2a0b:20c0:200::/34", "205766"}, + {"2a0f:3105::/32", "199669"}, + {"2001:559:731::/48", "33661"}, + {"2001:1248:5920::/43", "11172"}, + {"2401:d800:d80::/42", "7552"}, + {"2404:ffc0:18::/32", "62707"}, + {"2405:ba00:880c::/48", "7160"}, + {"240a:a110::/32", "142922"}, + {"2a01:b747:4f2::/38", "714"}, + {"2401:8800:600::/40", "17439"}, + {"2605:c380::/32", "21713"}, + {"2606:6140:4000::/32", "31764"}, + {"2a0c:abc0::/29", "212961"}, + {"2001:559:827e::/48", "7922"}, + {"2001:67c:11c::/48", "196883"}, + {"2001:dc7:5d78::/40", "24151"}, + {"2001:ee0:d900::/37", "45899"}, + {"2607:f740:e614::/47", "63911"}, + {"2800:860:b::/36", "262197"}, + {"2603:f130::/25", "397165"}, + {"2a0e:aa07:f0d4::/48", "139216"}, + {"2001:f40::/43", "9930"}, + {"2409:4051:5000::/30", "55836"}, + {"2606:6c00:ffff::/48", "32787"}, + {"2800:160:15d3::/42", "14259"}, + {"2a0e:8a80::/32", "209916"}, + {"2a0f:9247::/44", "207267"}, + {"2402:800:7440::/42", "7552"}, + {"240a:a63c::/32", "144246"}, + {"2602:fd25::/40", "25848"}, + {"2a02:c800:43::/32", "43930"}, + {"2001:250:3410::/45", "138393"}, + {"2001:559:2ee::/48", "33657"}, + {"2001:559:425::/48", "33659"}, + {"2001:559:4f6::/48", "62644"}, + {"2406:3003:2028::/45", "4657"}, + {"2a0d:2587:8100::/41", "142055"}, + {"2001:16a2:c0f3::/48", "39891"}, + {"2402:800:7322::/41", "7552"}, + {"2a09:1::/48", "210937"}, + {"2408:80ea:76a0::/41", "17816"}, + {"2409:805c:3031::/41", "9808"}, + {"2602:fea3::/36", "399611"}, + {"2a01:5043:b::/48", "202196"}, + {"2a01:6880::/32", "13121"}, + {"2a02:2e02:1e40::/42", "12479"}, + {"2600:1480:6000::/40", "33905"}, + {"2803:2b00:8002::/33", "52468"}, + {"2803:d4a0::/32", "266827"}, + {"2001:250:222::/48", "133111"}, + {"2600:5c01:10df::/36", "10796"}, + {"2600:9000:1182::/45", "16509"}, + {"2800:bf0:14e::/43", "27947"}, + {"2001:16e0::/29", "12611"}, + {"2409:8904:8340::/37", "24547"}, + {"240e:688::/29", "4812"}, + {"2a0b:11c0:20::/44", "198682"}, + {"2a00:8280::/32", "45011"}, + {"2001:559:41::/48", "33668"}, + {"2001:559:ce::/47", "7922"}, + {"2001:1248:a402::/43", "11172"}, + {"2620:123:2085::/48", "30103"}, + {"2a02:348:5c::/42", "35470"}, + {"2001:678:be8::/48", "207563"}, + {"2001:67c:1b00::/48", "58027"}, + {"2408:8956:aa00::/40", "17622"}, + {"240e::/32", "4134"}, + {"240e:108:22::/48", "58466"}, + {"2600:1409:801::/35", "20940"}, + {"2607:fb28:11::/32", "9"}, + {"2800:5f0:a001::/35", "22724"}, + {"2001:67c:19dc::/48", "12552"}, + {"2400:2000:11::/20", "17676"}, + {"240e:44d:2680::/41", "4134"}, + {"2804:5854::/32", "268122"}, + {"2a00:c40:8095::/48", "206785"}, + {"2400:cb00:110::/44", "13335"}, + {"2408:8956:ed40::/40", "17816"}, + {"2408:8957:a100::/40", "17816"}, + {"2a01:8280:3331::/32", "44735"}, + {"2a02:b50::/34", "15570"}, + {"2001:418:1439::/48", "1225"}, + {"240e:967:c400::/39", "133775"}, + {"2620:10a:80ae::/48", "394354"}, + {"2801:114:3::/48", "23059"}, + {"2a02:26f7:d005::/46", "20940"}, + {"2a04:4e40:be00::/48", "54113"}, + {"2001:df0:7600::/48", "133281"}, + {"2402:800:372b::/41", "7552"}, + {"2408:8256:3769::/48", "17816"}, + {"2408:8459:8810::/42", "17623"}, + {"2408:8956:4400::/40", "17622"}, + {"240e:9b:f006::/44", "140247"}, + {"2a05:d050:1040::/44", "16509"}, + {"2408:8459:1b30::/41", "17622"}, + {"240e:a64:1a00::/34", "140330"}, + {"2604:b800::/32", "30029"}, + {"2605:f140::/32", "398735"}, + {"2804:7be8::/47", "271462"}, + {"2a02:10:32::/40", "24785"}, + {"2c0f:f0e0::/32", "36972"}, + {"2001:4b69::/32", "12635"}, + {"2600:6c10:f80f::/42", "20115"}, + {"2604:c6c0::/48", "46323"}, + {"2804:23b0:8001::/34", "262645"}, + {"2001:579:40ff::/39", "22773"}, + {"2001:45b1:1000::/28", "4780"}, + {"2406:da70:9000::/40", "16509"}, + {"2600:1417:8::/43", "20940"}, + {"2600:370f:20c3::/45", "32261"}, + {"2804:1094:b020::/36", "263641"}, + {"2804:3888::/32", "266484"}, + {"2804:5120::/32", "268432"}, + {"2c0f:e9c0::/32", "327750"}, + {"2001:67c:45c::/48", "15542"}, + {"240a:a3e4::/32", "143646"}, + {"240e:5f:600c::/48", "4134"}, + {"2620:107:9080::/48", "22787"}, + {"2804:744::/39", "262632"}, + {"2804:8650::/32", "272635"}, + {"2a00:1d58:fa00::/43", "47524"}, + {"2a09:4c0:fe1::/34", "58057"}, + {"2001:559:5ec::/48", "33657"}, + {"240e:44d:3200::/41", "140345"}, + {"2604:9200::/32", "36687"}, + {"2606:4700:302d::/43", "13335"}, + {"2001:559:1be::/48", "33667"}, + {"2001:67c:25cc::/48", "56511"}, + {"2001:67c:2b80::/48", "60997"}, + {"240a:a95e::/32", "145048"}, + {"2600:9000:1e08::/47", "16509"}, + {"2604:3d00:fc00::/28", "6327"}, + {"2a02:26f7:f6cd::/43", "20940"}, + {"2a02:2800::/29", "15388"}, + {"2605:b8c0::/32", "22534"}, + {"2a00:de20::/32", "62405"}, + {"2a07:3140::/29", "48408"}, + {"240e:982:c300::/35", "4134"}, + {"2605:1080::/46", "23367"}, + {"2605:a404:b22::/40", "33363"}, + {"2804:7fac::/32", "271702"}, + {"2a02:2aa8::/39", "702"}, + {"2a0e:b107:440::/44", "207445"}, + {"2409:8c20:8ab2::/35", "56046"}, + {"2620:96:e000::/48", "398324"}, + {"2001:559:2c4::/48", "33652"}, + {"2001:44b8:605c::/48", "7545"}, + {"2804:6974::/32", "270271"}, + {"2a00:1828::/32", "34240"}, + {"2406:b640::/39", "139138"}, + {"2600:6c38:1d8::/42", "20115"}, + {"2607:f608::/32", "7412"}, + {"2804:1bf0:8::/46", "61758"}, + {"2804:3354::/32", "265389"}, + {"2a04:4880::/29", "56450"}, + {"2405:201:2800::/35", "55836"}, + {"2600:1488:a381::/37", "20940"}, + {"2600:6c10:417::/44", "20115"}, + {"2602:806:1000::/48", "397556"}, + {"2804:6088::/32", "269173"}, + {"2a03:5341::/44", "10455"}, + {"2c0f:fa88::/32", "328191"}, + {"2001:678:6d8::/48", "39334"}, + {"2806:10ae:e::/43", "8151"}, + {"2804:c98::/32", "52726"}, + {"2a11:8680::/29", "18779"}, + {"2001:559:840f::/48", "22909"}, + {"2600:1419:11::/46", "20940"}, + {"2806:230:300f::/48", "11888"}, + {"2a02:26f0:6401::/38", "20940"}, + {"2a0a:54c1:25::/46", "62240"}, + {"240a:a83a::/32", "144756"}, + {"2804:663c::/32", "269535"}, + {"2001:4408:8310::/37", "4758"}, + {"240a:a74c::/32", "144518"}, + {"2602:ffc5:180::/46", "29802"}, + {"2603:c002:1d10::/40", "31898"}, + {"2804:29ec::/32", "264045"}, + {"2804:46dc:8400::/33", "267016"}, + {"2a01:53c0:2f::/48", "54994"}, + {"2a01:a080::/32", "30915"}, + {"2001:559:c2af::/43", "33657"}, + {"2001:df6::/46", "132557"}, + {"2407:2f40::/48", "140787"}, + {"2001:559:591::/48", "7015"}, + {"2001:67c:2fc::/48", "41700"}, + {"240a:a282::/32", "143292"}, + {"2a02:74a0:a008::/47", "204038"}, + {"2a03:a240::/46", "199441"}, + {"2001:df7:2980::/48", "142612"}, + {"2401:7000:a0a2::/36", "45177"}, + {"2409:8a14:4a00::/34", "56044"}, + {"2803:db40::/47", "64100"}, + {"2a02:888:8254::/29", "47794"}, + {"2a02:2e02:8d0::/42", "12479"}, + {"2a09:f900::/48", "29182"}, + {"2a0c:4680::/29", "47945"}, + {"2600:1806:120::/47", "16552"}, + {"2a07:14c0:3000::/36", "59504"}, + {"2a09:a4c0::/32", "210625"}, + {"2400:1700:210::/47", "136552"}, + {"2401:d800:fb00::/42", "7552"}, + {"240e:5f:6001::/48", "134774"}, + {"2620:171:56::/44", "42"}, + {"2800:3f0:4006::/32", "15169"}, + {"2804:1e94::/32", "264437"}, + {"2a02:26f7:c7c0::/48", "36183"}, + {"2404:98c0::/44", "135259"}, + {"240e:848::/44", "140553"}, + {"2a07:5900:102::/29", "203014"}, + {"2800:160:14b1::/44", "14259"}, + {"2a09:bac0:455::/48", "13335"}, + {"2600:1416:3001::/32", "20940"}, + {"2804:6da8::/32", "270547"}, + {"2404:4800:20::/48", "9892"}, + {"240e:84c:10::/42", "4134"}, + {"2806:230:3008::/48", "265594"}, + {"2a02:2e02:c40::/43", "12479"}, + {"2a03:ce40::/47", "28753"}, + {"2400:b5c0::/32", "9891"}, + {"2606:6dc0:1338::/32", "13781"}, + {"2804:88::/47", "28135"}, + {"2804:1bc:114::/48", "28122"}, + {"2804:21f8:f::/43", "262272"}, + {"2806:230:101b::/48", "11888"}, + {"2607:f8c0:205::/46", "25885"}, + {"2610:20:8050::/44", "6629"}, + {"2803:5840::/32", "262145"}, + {"2804:4b0:102::/44", "262459"}, + {"2a01:5e0::/32", "16019"}, + {"2a0a:bd40::/29", "208808"}, + {"2001:559:445::/48", "7016"}, + {"2600:100c:9210::/34", "22394"}, + {"2804:3698::/32", "266358"}, + {"2a00:13a0::/32", "31242"}, + {"2a01:8840:de::/42", "12041"}, + {"2a06:2c40::/29", "28952"}, + {"2a0e:e704:47::/48", "210683"}, + {"2408:8374::/28", "4837"}, + {"2600:1010:f000::/44", "6167"}, + {"2801:80:6e0::/44", "262829"}, + {"2804:6ed8::/32", "270622"}, + {"2806:10ae:19::/46", "8151"}, + {"2001:559:194::/48", "7016"}, + {"2001:668:117::/48", "25973"}, + {"2406:840:90::/48", "139317"}, + {"240a:a48c::/32", "143814"}, + {"2806:2f0:1380::/48", "22884"}, + {"2a02:23e8::/32", "51514"}, + {"240a:a166::/32", "143008"}, + {"240a:aa96::/32", "145360"}, + {"240e:438:7e40::/32", "4134"}, + {"2a02:26f7:e3::/48", "20940"}, + {"2a02:2e02:1d00::/41", "12479"}, + {"2a0c:59c0::/32", "3214"}, + {"2c0f:f7f8:1::/46", "10753"}, + {"2a03:9e44::/30", "31399"}, + {"2001:4998:efe7::/44", "10310"}, + {"2602:fe90:800::/46", "35913"}, + {"2001:c20:c831::/48", "9255"}, + {"2400:8b00:2080::/42", "45727"}, + {"2a02:26f7:ec85::/46", "20940"}, + {"2001:559:a1::/48", "7015"}, + {"2402:800:9b71::/40", "7552"}, + {"2408:8256:f96::/35", "17622"}, + {"2408:8957:d8c0::/38", "17816"}, + {"240e:95c::/34", "58563"}, + {"2800:1e0:e02::/39", "7195"}, + {"2804:1288:f01::/35", "263482"}, + {"2a00:7b00:e900::/35", "12338"}, + {"2a03:db80::/34", "680"}, + {"2001:559:569::/48", "33287"}, + {"2001:da8:22b::/48", "24350"}, + {"2402:2f80:4::/48", "63956"}, + {"2607:6980::/43", "62217"}, + {"2801:f0:20::/48", "13679"}, + {"2a02:2e02:8630::/41", "12479"}, + {"2600:141c:b001::/33", "20940"}, + {"2620:5a:6000::/48", "397088"}, + {"2a02:988::/32", "30925"}, + {"2001:480:34::/48", "252"}, + {"2001:559:543::/48", "21508"}, + {"2001:559:85bc::/48", "33657"}, + {"2402:800:5ce0::/39", "7552"}, + {"2605:f500:602::/32", "1828"}, + {"2a03:9b80:4000::/34", "5411"}, + {"2a0d:5080::/30", "62240"}, + {"240a:a9ce::/32", "145160"}, + {"240e:67f:e400::/39", "140330"}, + {"2620:76:e000::/48", "397869"}, + {"2a02:2878:8000::/34", "62310"}, + {"2a02:2b10::/32", "24992"}, + {"2001:dd8:1c::/46", "30133"}, + {"2402:4800::/32", "18228"}, + {"240e:1c:4000::/36", "4134"}, + {"2620:dd::/48", "19764"}, + {"2a01:c50e:400::/36", "12479"}, + {"2a07:22c0:a000::/35", "213190"}, + {"2001:da8:a02b::/38", "23910"}, + {"2001:df2:b680::/48", "140070"}, + {"2620:9f:14::/48", "3549"}, + {"2a00:1158:4::/32", "8972"}, + {"2001:67c:2cf4::/48", "59951"}, + {"240e:44d:5880::/41", "4134"}, + {"2607:f8f0:670::/48", "271"}, + {"2806:2f0:9d43::/40", "17072"}, + {"2a02:26f7:b8c8::/48", "36183"}, + {"2001:da8:21e::/48", "23910"}, + {"2602:fcad:1::/46", "54316"}, + {"2602:feda:2a0::/45", "204185"}, + {"2606:2800:4a80::/46", "15133"}, + {"2804:774:8800::/33", "52858"}, + {"2804:3018:caff::/34", "263020"}, + {"2a00:1058::/32", "39905"}, + {"2408:8459:2240::/40", "17623"}, + {"2409:8d05::/32", "24547"}, + {"2607:f160:8800::/40", "6167"}, + {"2806:230:2010::/48", "265594"}, + {"2001:559:8502::/48", "20214"}, + {"2001:1960:13::/40", "5650"}, + {"2400:480:9::/48", "4766"}, + {"2406:6cc0:a100::/48", "63515"}, + {"2409:800b:2909::/38", "9808"}, + {"2804:1278::/32", "263478"}, + {"2804:386c::/32", "266476"}, + {"2a01:6dc0::/32", "204467"}, + {"2408:8956:8a00::/40", "17622"}, + {"240a:a4dc::/32", "143894"}, + {"240a:a60c::/32", "144198"}, + {"2605:a401:8e3e::/41", "33363"}, + {"2a02:a38::/32", "2119"}, + {"2a02:26f0:be::/47", "20940"}, + {"2a10:9903:120::/44", "212806"}, + {"2001:579:8d4::/44", "22773"}, + {"2408:8456:640::/39", "17816"}, + {"240a:a871::/32", "144811"}, + {"240a:aeac::/32", "146406"}, + {"240e:968:2000::/36", "63835"}, + {"2a03:401:1::/48", "208258"}, + {"2409:8c4c:23::/45", "9808"}, + {"240e:438:6820::/43", "140647"}, + {"2a00:d2c0::/45", "12975"}, + {"2a03:5420::/32", "16353"}, + {"2402:e280:2159::/46", "134674"}, + {"2405:7e40::/32", "137515"}, + {"2408:8456:c840::/40", "17816"}, + {"240a:ab6f::/32", "145577"}, + {"240e:608:1200::/29", "4134"}, + {"2001:559:838e::/48", "13367"}, + {"2409:8924:7700::/36", "56046"}, + {"240a:af49::/32", "146563"}, + {"240e:438:a420::/43", "140647"}, + {"2600:1406:ac01::/35", "20940"}, + {"2806:2f0:9523::/41", "17072"}, + {"2001:253:126::/48", "142092"}, + {"2401:7640::/32", "63771"}, + {"2401:ce00::/32", "24139"}, + {"240e:67d:c400::/39", "140330"}, + {"2603:8078::/32", "10838"}, + {"2408:80ea:6900::/35", "17816"}, + {"2409:8055:21::/45", "56040"}, + {"2604:e480::/32", "36827"}, + {"2605:3680::/32", "63010"}, + {"2a04:f580:9290::/48", "4809"}, + {"2001:559:3ae::/48", "7922"}, + {"2401:3800::/32", "24424"}, + {"2408:8459:1010::/41", "17622"}, + {"240a:a6c7::/32", "144385"}, + {"2804:62d4::/32", "269321"}, + {"2a02:6900:8824::/48", "43898"}, + {"2a10:7ac0::/29", "212238"}, + {"2001:da8:8009::/48", "23910"}, + {"2001:df4:c00::/48", "133985"}, + {"2001:1900:5:2:2:0:c:2280/126", "29632"}, + {"240a:abf0::/32", "145706"}, + {"2600:3001:28::/35", "13649"}, + {"2a01:278::/32", "41913"}, + {"2001:678:35c::/48", "12331"}, + {"2a00:1a28:1106::/48", "33886"}, + {"2a02:26f7:d3c1::/46", "20940"}, + {"2a02:26f7:f340::/48", "36183"}, + {"2a02:cdc6:3101::/31", "59715"}, + {"2a0b:39c0:1010::/44", "12372"}, + {"2a10:2a80:ac::/48", "207727"}, + {"2400:cb00:a640::/45", "13335"}, + {"2404:b0:11::/46", "4750"}, + {"2001:67c:598::/48", "206897"}, + {"2402:9d80:a71::/44", "131429"}, + {"240e:982:6000::/40", "58563"}, + {"2600:802:1107::/44", "701"}, + {"2600:1012:b1f0::/33", "22394"}, + {"2602:107:410::/48", "12271"}, + {"2800:6a0::/32", "27932"}, + {"2804:1e34::/32", "264414"}, + {"2a00:a780::/45", "44229"}, + {"2001:678:71c::/48", "57265"}, + {"2806:370:71c0::/42", "28403"}, + {"2a10:cc40:120::/44", "210881"}, + {"2001:559:8273::/48", "7725"}, + {"2001:578:3f::/39", "22773"}, + {"2600:140f:a400::/48", "9498"}, + {"2400:dd05:1007::/30", "7497"}, + {"2404:4a00:6a00::/64", "55423"}, + {"240a:a99c::/32", "145110"}, + {"2605:f080:200::/40", "62755"}, + {"2a02:ee80:4097::/42", "3573"}, + {"2a04:4e40:b800::/47", "54113"}, + {"2a0c:c400::/32", "8473"}, + {"2001:559:8570::/47", "33651"}, + {"2620:1d0:5d::/48", "397226"}, + {"2a02:26f7:c501::/45", "20940"}, + {"2a05:78c0::/32", "51975"}, + {"2001:4998::/44", "10310"}, + {"2409:8054:3019::/48", "56040"}, + {"2804:78c::/32", "52859"}, + {"2001:df2:7480::/48", "139909"}, + {"2408:8957:f240::/40", "17622"}, + {"2804:51bc::/32", "268473"}, + {"2a02:26f7:fa81::/46", "20940"}, + {"2408:8256:3ca0::/39", "17816"}, + {"240a:a8f1::/32", "144939"}, + {"240e:44d:3480::/41", "4134"}, + {"240e:45c:2000::/37", "131285"}, + {"2a05:2600::/29", "57948"}, + {"2405:6e00:470::/40", "133612"}, + {"240a:a1fa::/32", "143156"}, + {"2804:7a60::/39", "271367"}, + {"2a03:db80:4420::/48", "5501"}, + {"2001:559:598::/48", "7015"}, + {"2001:678:cbc::/48", "43021"}, + {"2402:800:feb0::/39", "7552"}, + {"2600:1419:5001::/37", "20940"}, + {"2604:e840:11::/32", "396965"}, + {"2607:ae80::/46", "26558"}, + {"2620:192::/46", "396367"}, + {"2800:200:e850::/40", "12252"}, + {"2a04:4e40:800::/47", "54113"}, + {"2a0a:db40::/29", "200601"}, + {"2408:8456:c800::/42", "17622"}, + {"2804:72d0::/32", "270877"}, + {"2a00:cc40:1::/46", "8932"}, + {"2a0d:1a40:7900::/47", "207960"}, + {"2001:df0:24c0::/48", "149062"}, + {"2408:8256:3197::/44", "17623"}, + {"2800:bf0:2840::/40", "27947"}, + {"2a0f:8447::/32", "212521"}, + {"2620:171:a::/43", "42"}, + {"2804:36ec::/32", "266380"}, + {"2804:7ad8::/32", "271395"}, + {"2a00:cb8:44::/48", "15695"}, + {"2a01:8840:7e::/40", "12041"}, + {"2a0e:8d80::/29", "207999"}, + {"2603:c002:1f20::/34", "31898"}, + {"2605:1540::/32", "22497"}, + {"2804:218::/40", "27715"}, + {"2804:6c10::/32", "270443"}, + {"2a09:3740::/29", "208944"}, + {"2a0c:e340:2::/32", "30150"}, + {"2c0f:6a00::/32", "328829"}, + {"2001:253:107::/48", "142073"}, + {"2001:559:464::/48", "7725"}, + {"2408:84f3:ba10::/42", "134543"}, + {"2804:4dd4::/32", "268222"}, + {"2804:71f4::/32", "270822"}, + {"2001:559:c3dd::/48", "33287"}, + {"2401:ee00:1041::/40", "23951"}, + {"2600:140b:401::/36", "20940"}, + {"2804:c14:4000::/34", "52671"}, + {"2a00:1878::/29", "8448"}, + {"2402:800:557f::/40", "7552"}, + {"2402:8100:39c0::/44", "45271"}, + {"240a:a716::/32", "144464"}, + {"2600:1008::/43", "6167"}, + {"2804:5544::/32", "268699"}, + {"2001:67c:27a0::/48", "44404"}, + {"2001:4490:da30::/46", "9829"}, + {"2408:8956:3f00::/40", "17816"}, + {"240a:a51c::/32", "143958"}, + {"2606:9100:4000::/34", "1421"}, + {"2607:f588::/32", "3257"}, + {"2620:b4:4000::/48", "63314"}, + {"2403:1f00::/32", "10010"}, + {"240e:3b0:1400::/38", "134773"}, + {"2801:17:d000::/48", "265696"}, + {"2806:2f0:1282::/48", "22884"}, + {"2a00:65c0::/47", "25156"}, + {"2a02:2798::/32", "28775"}, + {"2a0b:f940:4af3::/32", "205373"}, + {"240a:a2d8::/32", "143378"}, + {"2801:80:39d0::/48", "271047"}, + {"2a03:f80:370::/47", "56630"}, + {"2001:2063::/24", "1299"}, + {"2409:8c54:1001::/42", "56040"}, + {"2803:3b80:3030::/33", "263702"}, + {"2804:b4:9000::/33", "28294"}, + {"2804:5e90::/32", "269041"}, + {"2401:1c00:4100::/35", "38809"}, + {"2405:9800:c90c::/46", "45458"}, + {"240a:a7f6::/32", "144688"}, + {"2804:2008::/32", "264461"}, + {"2a07:3403::/32", "46516"}, + {"2409:8907:7720::/36", "24547"}, + {"2604:2e80:1804::/37", "30036"}, + {"2604:a880:fffe::/48", "14061"}, + {"2804:164c:fb::/36", "263280"}, + {"2804:64e4::/32", "3"}, + {"2806:363:2000::/35", "22566"}, + {"2a01:1b8:5::/48", "206804"}, + {"2a02:26f7:e740::/48", "36183"}, + {"2a03:7380:1e80::/42", "13188"}, + {"2a05:1083:ff06::/48", "211876"}, + {"2001:559:724::/48", "33657"}, + {"2001:678:d44::/48", "213279"}, + {"2001:978::/46", "174"}, + {"2409:8054:34::/48", "9808"}, + {"2806:230:6000::/48", "265594"}, + {"2a00:4120:8000:6::/64", "201044"}, + {"2a01:c50f:af00::/40", "12479"}, + {"2a03:a8e0::/32", "57090"}, + {"2a06:3cc0::/29", "57763"}, + {"2001:67c:188c::/48", "196858"}, + {"2408:8459:8c10::/42", "17623"}, + {"240a:a529::/32", "143971"}, + {"240b:4003:3e8::/48", "45102"}, + {"2620:57:4001::/48", "393818"}, + {"2620:116:f000::/46", "14157"}, + {"2804::/37", "2716"}, + {"2a00:f10:171::/38", "48635"}, + {"2a00:c580::/32", "47114"}, + {"2a03:5a00:2f::/48", "203784"}, + {"2a05:d050:a040::/44", "16509"}, + {"2a12:3fc7::/48", "39753"}, + {"2001:4350:2001::/36", "2609"}, + {"2a00:17e8::/29", "50226"}, + {"2a09:7c0::/29", "209624"}, + {"2406:2000:efbc::/48", "10229"}, + {"2406:f940::/32", "141596"}, + {"240a:a17f::/32", "143033"}, + {"2607:6000:700::/40", "12189"}, + {"2620:118:8000::/48", "40885"}, + {"2620:171:c00::/45", "42"}, + {"2a02:3b0::/32", "31736"}, + {"2a02:26f7:c60d::/42", "20940"}, + {"2001:559:84a7::/48", "21508"}, + {"2602:fed2:7307::/48", "33696"}, + {"2604:9100::/36", "29944"}, + {"2a03:2c00::/32", "41268"}, + {"2602:fc88::/36", "14618"}, + {"2606:6680:10::/46", "40676"}, + {"2a10:fa81:1::/48", "48878"}, + {"2001:559:274::/48", "20214"}, + {"2001:559:87b3::/48", "7016"}, + {"2600:1480:1000::/40", "33905"}, + {"2604:f540::/32", "36435"}, + {"2620:ae:c000::/48", "18686"}, + {"2409:8a56:9300::/28", "56040"}, + {"2610:88::/46", "14037"}, + {"2804:30d8::/32", "264976"}, + {"2a03:2a60:8100::/47", "59871"}, + {"2001:668::/39", "3257"}, + {"2001:67c:273c::/48", "3303"}, + {"2409:40c0:1000::/32", "55836"}, + {"240a:a4a2::/32", "143836"}, + {"240c:ca31::/25", "23910"}, + {"2a00:1d58:b900::/37", "47524"}, + {"2a05:2605::/30", "49544"}, + {"2001:559:81b5::/48", "33657"}, + {"2405:8a00:4002::/44", "55824"}, + {"2606:9680:2000::/44", "22918"}, + {"2620:11c:8000::/36", "19"}, + {"2401:48c0::/32", "136119"}, + {"2804:2780::/32", "263905"}, + {"2806:20d:3512::/38", "32098"}, + {"2a02:26f7:70::/48", "36183"}, + {"2620:12f:6000::/44", "393668"}, + {"2408:8456:ec40::/40", "17816"}, + {"2409:8751:100::/38", "56047"}, + {"2606:1980:a::/45", "54994"}, + {"2804:2650::/32", "264340"}, + {"2804:5428::/32", "268632"}, + {"2804:7a30:8000::/33", "271353"}, + {"2806:230:5016::/48", "265594"}, + {"2a00:c78::/32", "28707"}, + {"2401:d800:9372::/40", "7552"}, + {"2404:bb40::/32", "138978"}, + {"240a:a2c5::/32", "143359"}, + {"240a:ae78::/32", "146354"}, + {"2607:f380:a50::/44", "2152"}, + {"2620:130:800a::/47", "3356"}, + {"2400:9380:8ac0::/44", "136167"}, + {"2606:9d00::/32", "46231"}, + {"2801:18:1800::/48", "271963"}, + {"2804:14d:4ced::/46", "28573"}, + {"2804:6728::/32", "269608"}, + {"2806:106e:12::/45", "8151"}, + {"2a00:1ca8:45::/48", "58061"}, + {"2a01:c50f:a4c0::/38", "12479"}, + {"2a0e:7f80::/29", "208927"}, + {"2001:559:8211::/48", "33651"}, + {"2a05:df01:2::/29", "47891"}, + {"2a0f:fe40::/48", "207642"}, + {"2400:cb00:458::/48", "13335"}, + {"2400:cb00:a773::/45", "13335"}, + {"2606:c700:6000::/32", "53850"}, + {"2a00:c7c0::/32", "205617"}, + {"2a09:3d05::/30", "210625"}, + {"2001:579:d164::/40", "22773"}, + {"2405:8a00:602f::/43", "55824"}, + {"2405:b900:40::/44", "55701"}, + {"2408:84f3:ae10::/42", "134543"}, + {"2001:67c:17ec::/48", "13127"}, + {"240a:a9c2::/32", "145148"}, + {"2600:6c10:f80a::/45", "20115"}, + {"2602:800:1006::/44", "16970"}, + {"2607:6b80:7::/48", "46562"}, + {"2a02:2440::/32", "33835"}, + {"2a11:740::/29", "204790"}, + {"2001:250:5064::/48", "23910"}, + {"2001:67c:6ec::/48", "1101"}, + {"2804:11bc:8000::/38", "263435"}, + {"2a00:a300::/32", "47764"}, + {"2400:9380:92b0::/45", "4809"}, + {"2403:9800:112::/33", "4648"}, + {"2406:e640::/48", "140766"}, + {"2a01:7160::/32", "49223"}, + {"2001:559:600::/40", "7922"}, + {"2001:579:d044::/40", "22773"}, + {"2600:1417:58:100::/56", "4788"}, + {"2804:14d:9000::/40", "28573"}, + {"2a00:da8:fffc::/46", "34086"}, + {"2a00:66e0::/32", "48953"}, + {"2a01:4800::/32", "8767"}, + {"2a02:26f7:cf49::/42", "20940"}, + {"2001:550:1d02::/45", "174"}, + {"2001:559:484::/48", "33287"}, + {"2404:8240::/32", "56067"}, + {"2804:18ec::/32", "61763"}, + {"2a02:26f7:c354::/47", "36183"}, + {"2001:16a2:3a::/45", "25019"}, + {"2001:48d8::/32", "6596"}, + {"240e:cf:8000::/36", "134238"}, + {"2600:1806:521::/48", "16552"}, + {"2620:89:8000::/48", "22990"}, + {"2804:3f7c::/32", "265896"}, + {"2a03:6f40::/32", "199508"}, + {"2a04:4640::/29", "16347"}, + {"2600:5c00:21cf::/48", "3456"}, + {"2804:1ac::/38", "53175"}, + {"2804:371c:2::/48", "266390"}, + {"2a02:2698:9c00::/38", "34150"}, + {"2001:67c:1212::/48", "42728"}, + {"240a:aed3::/32", "146445"}, + {"240e:f7:4000::/36", "58461"}, + {"2602:107:200d::/48", "20115"}, + {"2620:135:5005::/44", "26457"}, + {"2804:4618:3400::/32", "266968"}, + {"2a0f:5707:ab28::/48", "136620"}, + {"2c0f:fef0::/32", "36958"}, + {"2001:4c08:2009::/46", "3356"}, + {"2604:2d80:6680::/36", "30036"}, + {"2607:9e00:5002::/32", "30536"}, + {"2401:d800:9980::/42", "7552"}, + {"2a02:768::/32", "44489"}, + {"2a02:26f7:b880::/48", "36183"}, + {"2409:8052:1900::/37", "9808"}, + {"2600:1406:400::/48", "35994"}, + {"2a00:4802:300::/44", "13124"}, + {"2a02:26f7:e5c0::/48", "36183"}, + {"2a07:c800::/29", "42159"}, + {"2001:4860:4865::/32", "15169"}, + {"2600:1406:7801::/38", "20940"}, + {"2804:1a9c::/32", "61871"}, + {"2a00:11c0:63::/48", "42473"}, + {"2a00:1ec8:55::/42", "2854"}, + {"2a02:ef0::/32", "39242"}, + {"2a02:26f7:f58d::/42", "20940"}, + {"2a0e:4844::/32", "33823"}, + {"240a:ac08::/32", "145730"}, + {"2804:5110:161::/32", "268428"}, + {"2a10:65c0::/29", "9063"}, + {"2600:1406:1801::/39", "20940"}, + {"2606:5cc0:1100::/37", "36263"}, + {"2804:7ea8::/32", "271638"}, + {"2a02:26f7:f798::/48", "36183"}, + {"2001:2001:4000::/36", "3301"}, + {"2409:8c54:1000::/48", "9808"}, + {"240e:848:40::/44", "140553"}, + {"2620:100::/47", "19637"}, + {"2804:6fc:17::/44", "28158"}, + {"2804:6ea0::/33", "270609"}, + {"2a00:c020:9000::/33", "200414"}, + {"2a02:70:2::/39", "3326"}, + {"2600:140b:3::/48", "24319"}, + {"2602:fcde::/36", "14618"}, + {"2604:f440:6::/48", "397373"}, + {"2a02:26f0:3c::/48", "20940"}, + {"2a09:f140::/29", "211332"}, + {"2001:3c8:2707::/48", "4762"}, + {"2804:1c14::/32", "61636"}, + {"2a0c:9a40:8018::/46", "207965"}, + {"2001:250:6417::/48", "23910"}, + {"2001:559:8150::/48", "20214"}, + {"2001:1a11:148::/46", "42298"}, + {"2804:534c::/32", "268575"}, + {"240a:ac0d::/32", "145735"}, + {"2a00:b2a0::/32", "3212"}, + {"2403:ad80:98::/42", "134835"}, + {"2600:1408:cc01::/35", "20940"}, + {"2804:28c::/32", "262822"}, + {"2a00:e040:c00::/47", "15953"}, + {"2a0d:1f80::/32", "205614"}, + {"2001:253:129::/48", "142095"}, + {"2001:559:c241::/48", "7725"}, + {"2400:cb00:180::/46", "13335"}, + {"2401:d800:2e80::/42", "7552"}, + {"2a02:26f7:e685::/46", "20940"}, + {"2403:2c00:c::/32", "4058"}, + {"240a:afb2::/32", "146668"}, + {"2605:eac0::/32", "398698"}, + {"2a00:7c40::/32", "202940"}, + {"2400:5280:f803::/48", "23724"}, + {"2405:7f00:ab00::/37", "133414"}, + {"2a0d:7980::/47", "48635"}, + {"2001:418:8404::/63", "20940"}, + {"2001:678:b::/48", "51955"}, + {"2403:a000::/32", "9658"}, + {"2406:7700::/32", "132694"}, + {"2806:322:2030::/40", "28546"}, + {"2a0d:8900::/29", "40970"}, + {"2800:bf0:82c1::/44", "27947"}, + {"2804:2c98::/32", "265229"}, + {"2001:dcd:11::/48", "38796"}, + {"2001:1248:a45e::/42", "11172"}, + {"2403:2c00:fffc::/46", "4058"}, + {"2409:8914:3e00::/39", "56044"}, + {"2804:7ae4::/32", "271398"}, + {"2602:107:210::/48", "10796"}, + {"2607:f6b0::/32", "6189"}, + {"2804:69b8::/32", "270287"}, + {"240a:ad11::/32", "145995"}, + {"2604:f980:4380::/43", "19957"}, + {"2610:20:1000::/40", "10616"}, + {"2804:8f0::/32", "263040"}, + {"2a01:4a0:39::/41", "201011"}, + {"2a00:cbe0:100::/38", "60297"}, + {"2a02:26f7:e201::/46", "20940"}, + {"2604:55c0:a::/45", "4138"}, + {"2001:1a11:7b::/48", "8781"}, + {"2604:81c0::/39", "396422"}, + {"2806:288:4097::/48", "28469"}, + {"2a0d:2902:caf0::/45", "204185"}, + {"240e:438:4620::/43", "140647"}, + {"2a00:1490:f1ea::/48", "42416"}, + {"2a00:1588:d801::/46", "36040"}, + {"2a00:1807::/32", "57728"}, + {"2403:5f40:2::/44", "9268"}, + {"2408:84f3:2c90::/38", "17816"}, + {"2408:872b:404::/32", "4837"}, + {"2409:8a03::/32", "9808"}, + {"2a02:5d01::/29", "28972"}, + {"2a0a:c940::/32", "2119"}, + {"2001:570::/48", "6066"}, + {"2001:12e0:800::/45", "10429"}, + {"2602:fcb1::/36", "399306"}, + {"2804:1010:5000::/32", "263617"}, + {"2804:8280:800::/32", "272521"}, + {"2801:140:dddd::/48", "265731"}, + {"2804:5a2c::/32", "268753"}, + {"2804:7634::/32", "271096"}, + {"2a06:b040::/29", "203779"}, + {"2402:c680::/32", "134518"}, + {"2605:a404:aac::/41", "33363"}, + {"2803:74a0::/32", "267701"}, + {"2402:800:389b::/41", "7552"}, + {"2600:1406:4c01::/38", "20940"}, + {"2001:df4:7700::/46", "137176"}, + {"240a:a6ba::/32", "144372"}, + {"2605:900::/32", "12110"}, + {"2806:2f0:9b81::/46", "17072"}, + {"2001:768::/32", "8356"}, + {"240e:982:c200::/40", "139220"}, + {"2a01:c50f:c700::/36", "12479"}, + {"2a02:4540:7000::/43", "197207"}, + {"2402:800:9b0f::/43", "7552"}, + {"2800:160:1f0d::/43", "14259"}, + {"2402:e280:2160::/47", "134674"}, + {"2408:8256:2d6c::/48", "17816"}, + {"240a:ad28::/32", "146018"}, + {"2804:2c0:6608::/35", "262834"}, + {"2a0e:b107:7f0::/48", "207722"}, + {"2a10:e440::/32", "50293"}, + {"2001:770::/32", "1213"}, + {"2409:801f:3003::/45", "24400"}, + {"240a:a382::/32", "143548"}, + {"2600:1400:9001::/34", "20940"}, + {"2803:2ce0::/32", "269907"}, + {"2a02:26f7:b84d::/46", "20940"}, + {"2001:559:7b9::/48", "7015"}, + {"2405:c400:175::/46", "38880"}, + {"2600:6c38:8f::/43", "20115"}, + {"2606:2800:4ae0::/46", "15133"}, + {"2804:479c::/32", "267065"}, + {"2804:52a4::/32", "268531"}, + {"2a07:7e80::/29", "202870"}, + {"2a0b:f304:463::/32", "62240"}, + {"2a0b:f4c0:1b4::/48", "205100"}, + {"2401:d800:b710::/42", "7552"}, + {"2604:d600:15a6::/47", "32098"}, + {"2620:0:871::/45", "715"}, + {"2804:3b18::/32", "266129"}, + {"2a01:8780::/31", "50343"}, + {"2a01:a300::/32", "21310"}, + {"2a02:26f7:d6c0::/47", "36183"}, + {"2a0a:f00::/29", "207822"}, + {"2405:6000::/32", "4770"}, + {"240a:a520::/32", "143962"}, + {"2600:40ff:ff10::/47", "1321"}, + {"2607:f6f0:4005::/40", "29884"}, + {"2404:e800:104::/31", "55430"}, + {"2408:8956:cfc0::/35", "17622"}, + {"240a:a359::/32", "143507"}, + {"240e:44d:4700::/41", "140345"}, + {"2605:9840::/32", "1448"}, + {"2a00:d08::/32", "48218"}, + {"2001:250:201::/45", "23910"}, + {"2001:559:508::/48", "7922"}, + {"2001:924::/30", "8220"}, + {"2409:8006::/31", "9808"}, + {"2600:1404:cc01::/38", "20940"}, + {"2604:d600:1625::/44", "32098"}, + {"2a02:26f7:ec48::/48", "36183"}, + {"2a04:62c0::/31", "47477"}, + {"2001:550:702::/36", "174"}, + {"2001:c20:48c7::/48", "3758"}, + {"2001:1248:5a7f::/40", "11172"}, + {"2001:1900:2370::/48", "10753"}, + {"2409:8052:1802::/40", "56047"}, + {"240a:ab8b::/32", "145605"}, + {"2606:2e00:1::/48", "13213"}, + {"2607:1280:1120::/43", "394972"}, + {"2800:160:1b13::/44", "14259"}, + {"2a02:26f0:88::/48", "34164"}, + {"2c0f:f058::/32", "32860"}, + {"2001:1a11:101::/48", "8781"}, + {"2400:6280:11a::/48", "132280"}, + {"2408:8656:1800::/34", "17816"}, + {"2409:8939::/30", "9808"}, + {"2804:3e44:3000::/32", "266584"}, + {"2a00:1851:3e21::/39", "29357"}, + {"2a02:26f7:c352::/47", "20940"}, + {"2a02:26f7:db00::/48", "36183"}, + {"2a02:2bc0::/32", "31708"}, + {"2a02:2e02:2e80::/43", "12479"}, + {"2a0c:da04:15::/48", "202365"}, + {"2400:7400:64::/48", "38044"}, + {"2607:fb10:2011::/46", "55095"}, + {"2804:5040::/32", "268377"}, + {"2a04:3544:c000::/30", "202053"}, + {"2a0e:f200:144::/48", "30633"}, + {"2400:cb00:31::/48", "13335"}, + {"2401:bcc0::/48", "133311"}, + {"2602:fed2:3e8::/48", "139693"}, + {"2605:a000::/37", "10796"}, + {"2804:2e8:80c0::/33", "262847"}, + {"2804:2674:d004::/48", "264344"}, + {"2a03:c980:d990::/48", "210079"}, + {"2a09:bac0:451::/48", "13335"}, + {"2001:559:837c::/48", "20214"}, + {"2401:d800:9e72::/40", "7552"}, + {"240e:30e:5600::/31", "4134"}, + {"2604:d600:653::/45", "32098"}, + {"2804:f44::/32", "263574"}, + {"2401:a580:6::/32", "55403"}, + {"2600:1415:c00::/48", "24319"}, + {"2605:3380:4451::/46", "12025"}, + {"2405:800:2000::/33", "7545"}, + {"2a09:bac0:80::/47", "13335"}, + {"2001:df4:a700::/48", "134021"}, + {"240e:183:821c::/46", "140655"}, + {"2600:ec00::/29", "26073"}, + {"2604:5800::/32", "19969"}, + {"2001:559:1d9::/48", "20214"}, + {"2001:648:3500::/29", "5408"}, + {"2001:df2:d00::/48", "134026"}, + {"2001:4408:5::/39", "4758"}, + {"2600:ec04:3f3::/28", "26073"}, + {"2602:fd47:d01::/38", "398461"}, + {"2a00:13fa::/32", "42087"}, + {"2001:858::/32", "8437"}, + {"2001:4878:a102::/48", "12222"}, + {"2400:9380:96c0::/44", "136167"}, + {"2806:20d:52ff::/37", "32098"}, + {"2402:800:5dc5::/43", "7552"}, + {"2406:840:e777::/48", "136591"}, + {"240e:974:e200::/47", "38283"}, + {"2604:9e40:4::/32", "29457"}, + {"2804:ae0:8630::/33", "28352"}, + {"2804:145c:5000::/32", "263327"}, + {"2806:2f0:3341::/46", "17072"}, + {"2001:1218:6056::/40", "278"}, + {"2607:fb10:2043::/43", "2906"}, + {"2800:d302:22::/47", "11830"}, + {"2a11:5c80::/29", "204790"}, + {"2001:559:c127::/48", "33489"}, + {"2600:380:d980::/41", "20057"}, + {"2804:7f78::/32", "271690"}, + {"2a02:26f7:d081::/46", "20940"}, + {"2402:800:f990::/42", "7552"}, + {"2409:4073:3000::/33", "55836"}, + {"2a03:7380:4000::/40", "13188"}, + {"2a0f:9400::/45", "139686"}, + {"2001:1a11:144::/48", "8781"}, + {"240a:a759::/32", "144531"}, + {"240e:97a:2e00::/31", "4134"}, + {"2606:2800:6a20::/47", "15133"}, + {"2a01:827::/32", "30722"}, + {"2001:559:8282::/48", "33660"}, + {"2001:4b22:10:1::/47", "34288"}, + {"2806:230:203f::/48", "11888"}, + {"2806:282::/32", "265509"}, + {"2001:559:7eb::/48", "7015"}, + {"2401:d800:f5c0::/42", "7552"}, + {"2403:7100::/44", "132220"}, + {"2a02:50a0::/32", "201787"}, + {"2a07:3500:19e0::/48", "38915"}, + {"2001:4d0::/39", "297"}, + {"2001:559:861e::/48", "7922"}, + {"2409:8043:2903::/48", "9808"}, + {"2803:c240:2000::/32", "41095"}, + {"2a02:ee80:407d::/46", "3573"}, + {"2a09:4b44:c::/47", "61317"}, + {"2001:500:133::/48", "396549"}, + {"2001:559:c270::/48", "33651"}, + {"2800:be0:3e8::/37", "267848"}, + {"2804:2b5c::/32", "265150"}, + {"2a02:26f7:d9c4::/48", "36183"}, + {"2001:559:336::/48", "33650"}, + {"2001:559:5c5::/48", "33668"}, + {"2001:67c:398::/48", "50213"}, + {"2602:fc3b::/39", "399970"}, + {"2001:500:ed30::/48", "7342"}, + {"2001:4048::/39", "33922"}, + {"2a01:5460::/32", "57795"}, + {"2603:c011:4000::/36", "31898"}, + {"2804:354:b::/32", "262874"}, + {"2001:559:c234::/48", "33652"}, + {"2800:440:8066::/48", "27738"}, + {"2a02:26f7:bdc5::/46", "20940"}, + {"2c0f:f5f8::/32", "37717"}, + {"2001:44b8:6050::/48", "7545"}, + {"2409:8924:2500::/38", "56046"}, + {"2600:370f:6042::/45", "32261"}, + {"2800:bf0:8141::/45", "52257"}, + {"2c0f:1200::/32", "328820"}, + {"2001:da8:203e::/48", "23910"}, + {"2409:8069:2a06::/47", "9808"}, + {"2001:559:422::/48", "7725"}, + {"2001:559:877e::/48", "7015"}, + {"2409:8914:600::/39", "56044"}, + {"2602:809:6000::/44", "399214"}, + {"2804:85a8::/32", "272593"}, + {"2001:67c:2d0::/48", "21155"}, + {"2605:bcc0::/33", "40718"}, + {"2a09:1f00::/29", "197205"}, + {"2a0d:1a45:27::/34", "57782"}, + {"2602:fc09:819::/40", "13780"}, + {"2804:4304::/32", "267543"}, + {"2001:550:1:200::/55", "174"}, + {"2a06:1b80::/29", "199462"}, + {"2a0b:2c0:deae::/29", "205831"}, + {"2001:16f7::/32", "201370"}, + {"2408:8456:600::/42", "17622"}, + {"240e:9b:f015::/46", "140252"}, + {"2001:559:807d::/46", "33657"}, + {"240a:a436::/32", "143728"}, + {"2a0f:a02::/29", "60781"}, + {"2a10:d504:2::/31", "22773"}, + {"2001:559:50d::/48", "33490"}, + {"2001:579:904b::/40", "22773"}, + {"2001:6d0:ffb9::/48", "43832"}, + {"2408:8000:5004::/48", "139007"}, + {"2409:8904:5a70::/40", "24547"}, + {"240a:61:2e00::/48", "9605"}, + {"240e:3bb:2c00::/35", "134774"}, + {"240e:44d:4b80::/41", "4134"}, + {"2a0f:ca87:7::/48", "208471"}, + {"2800:bf0:81c3::/45", "52257"}, + {"2a02:7aa0:1619::/48", "52173"}, + {"2a0d:9e40:1000::/36", "9558"}, + {"2600:6c38:d2d::/41", "20115"}, + {"2a02:26f7:d0c1::/46", "20940"}, + {"2600:1417:1800:100::/54", "16625"}, + {"2409:8052:2800::/47", "56047"}, + {"240a:a3a1::/32", "143579"}, + {"240e:7:4800::/37", "4134"}, + {"2a0e:8140::/29", "35048"}, + {"2001:559:c043::/48", "7922"}, + {"2400:9380:a042::/48", "23764"}, + {"2401:b400:1::/45", "58448"}, + {"2409:8d4c::/30", "9808"}, + {"2605:7e80::/32", "62969"}, + {"2804:e78::/32", "262957"}, + {"2a02:26f7:da45::/46", "20940"}, + {"2a09:ff00:102::/48", "1239"}, + {"2a0d:40c0::/32", "203448"}, + {"2001:253:137::/48", "142103"}, + {"2001:1978:2000::/40", "13768"}, + {"2404:3e00:a300::/37", "38758"}, + {"240e:983:1b01::/48", "134771"}, + {"2620:7d:e000::/48", "42909"}, + {"2806:2f0:60a3::/41", "17072"}, + {"2001:559:c4a7::/48", "33657"}, + {"2600:26c6:8::/48", "20115"}, + {"2602:ff99:2::/47", "14333"}, + {"2804:8480:100::/36", "272264"}, + {"2600:1fa0:2040::/44", "8987"}, + {"2600:e00c::/32", "22995"}, + {"2804:54a0:1c00::/39", "27688"}, + {"2804:8268::/32", "272518"}, + {"240e:966:2000::/37", "4134"}, + {"2801:80:a50::/48", "28148"}, + {"2a07:3502:10e0::/48", "1136"}, + {"2001:559:821f::/48", "7725"}, + {"2001:7f8:18::/48", "2128"}, + {"240e:9b:f030::/46", "140261"}, + {"2803:6d00::/32", "52444"}, + {"2804:1364::/32", "263532"}, + {"2a01:570::/47", "33941"}, + {"2a0e:8f02:2151::/46", "211869"}, + {"2406:840:a08::/48", "139317"}, + {"2408:824e::/27", "4837"}, + {"2804:3f88::/32", "265899"}, + {"2a0f:e404:107::/48", "58057"}, + {"240a:a4aa::/32", "143844"}, + {"2804:6940::/32", "270258"}, + {"2a00:a6a0:1::/48", "60587"}, + {"2a03:4b00::/32", "49888"}, + {"2a09:ce00::/29", "208861"}, + {"2800:160:2184::/43", "14259"}, + {"2a02:610:fffe::/48", "43615"}, + {"2a0e:f41::/32", "208567"}, + {"2001:608::/32", "5539"}, + {"2001:67c:25c4::/48", "31080"}, + {"2001:4d78:100::/36", "15830"}, + {"2400:cb00:474::/46", "13335"}, + {"2409:8924:2d00::/38", "56046"}, + {"2409:8d20::/29", "56046"}, + {"2001:9a8::/32", "15703"}, + {"2401:d800:7130::/41", "7552"}, + {"2607:f6f0:4001::/48", "394749"}, + {"2a00:16f8:f::/48", "6461"}, + {"2a02:26f7:f941::/46", "20940"}, + {"2001:67c:e0::/48", "197000"}, + {"2801:80:2510::/48", "268507"}, + {"2806:20d:110c::/43", "32098"}, + {"2a00:8c40:238::/48", "42037"}, + {"2a02:ac87:59cc::/32", "25145"}, + {"2804:3e60:110::/41", "266592"}, + {"2804:4c40::/32", "267359"}, + {"2001:559:81c1::/48", "33287"}, + {"2404:bf40:8540::/48", "7545"}, + {"2600:6c10:f347::/44", "20115"}, + {"2804:11ec::/32", "52850"}, + {"2001:579:1d84::/34", "22773"}, + {"2402:800:f480::/39", "7552"}, + {"2408:8459:c830::/41", "17622"}, + {"2409:8070:ab5::/44", "9808"}, + {"2a02:26f0:d1::/48", "34164"}, + {"2a06:8340::/29", "202177"}, + {"2a0e:46c4:2820::/44", "210631"}, + {"2a0e:8f02:f00f::/48", "212358"}, + {"240e:3bf:ac00::/35", "4134"}, + {"2804:14c:fc99::/41", "28573"}, + {"2a06:1e00:2d::/48", "212968"}, + {"2a0e:97c3:7f6::/48", "20473"}, + {"2401:d800:fc32::/40", "7552"}, + {"2600:400:3e10::/32", "15147"}, + {"2001:4878:4000::/48", "12222"}, + {"2001:4998:10::/46", "10310"}, + {"2607:f160:12::/48", "22394"}, + {"2804:e70::/32", "262955"}, + {"2a0f:a304::/32", "44326"}, + {"2401:d180::/46", "133865"}, + {"2607:f380:806::/47", "257"}, + {"2804:1414::/32", "263311"}, + {"2a04:cc40::/29", "59770"}, + {"2a0c:9e40:1::/46", "60781"}, + {"2a09:d2c1:4::/48", "207518"}, + {"2001:df7:5100::/48", "4826"}, + {"2409:8704:3100::/36", "24547"}, + {"2607:fdc8:c00::/48", "30036"}, + {"2804:6a78::/32", "270338"}, + {"240a:a373::/32", "143533"}, + {"240e:109:804c::/25", "4134"}, + {"2600:1407:a001::/36", "20940"}, + {"2804:1578::/32", "61906"}, + {"2804:37a8:1214::/44", "266428"}, + {"2a0b:c6c0::/29", "57407"}, + {"2a11:380::/29", "211319"}, + {"2a11:29c0:1::/48", "210738"}, + {"2c0f:f588::/32", "327966"}, + {"2001:df0:218::/48", "38830"}, + {"2408:8256:3d7c::/46", "17623"}, + {"2001:df7:9f80::/48", "147050"}, + {"2409:802f:2b08::/37", "56041"}, + {"2602:ffb6::/36", "174"}, + {"240a:a0e7::/32", "142881"}, + {"2600:1016:a010::/39", "6167"}, + {"2804:5b60::/32", "268838"}, + {"2001:559:822f::/48", "33287"}, + {"2001:df5:e800::/48", "133498"}, + {"2800:160:2b9d::/42", "14259"}, + {"2a01:37:4000::/35", "8875"}, + {"2401:5840::/38", "132113"}, + {"2402:800:5ec0::/43", "7552"}, + {"2607:f368:f00::/40", "46846"}, + {"2800:800:a42::/43", "26611"}, + {"2801:1c8:8a::/48", "27951"}, + {"2804:2b34::/32", "265140"}, + {"2804:4150::/32", "267426"}, + {"2001:b031:ae00::/30", "3462"}, + {"2404:3d00:417c::/40", "3573"}, + {"2408:8a04:e000::/40", "9929"}, + {"2607:fc50:2002::/33", "36236"}, + {"2600:381:400::/34", "7018"}, + {"2804:21a4::/34", "53190"}, + {"2a03:e140:1a::/48", "50317"}, + {"2a0d:2400::/30", "62068"}, + {"2403:e800:922::/32", "4637"}, + {"2605:a000:40e::/48", "11955"}, + {"2606:7240::/48", "399914"}, + {"2620:0:50e0::/48", "31859"}, + {"2804:4b0::/39", "262459"}, + {"2804:744:1100::/32", "262632"}, + {"2804:7180::/39", "270793"}, + {"2a03:5640:f501::/48", "2906"}, + {"2a09:4c2:4a::/48", "212904"}, + {"2408:8026:390::/37", "17621"}, + {"2408:8956:ab00::/40", "17816"}, + {"240a:2:c90::/44", "9605"}, + {"2606:1a40:100c::/47", "398962"}, + {"2806:1016:1::/48", "8151"}, + {"2a04:c444::/32", "2047"}, + {"2001:559:2f0::/48", "33650"}, + {"2402:8100:26b3::/44", "55644"}, + {"2600:6c20:dfb::/45", "20115"}, + {"2a03:d400:122::/47", "198913"}, + {"2001:559:7a::/48", "33657"}, + {"2402:bfc0:1::/44", "136361"}, + {"240e:980:2600::/40", "4134"}, + {"2607:f110:e370::/37", "21889"}, + {"2a11:73c0::/29", "18779"}, + {"2001:559:8124::/48", "7015"}, + {"2001:559:c0a3::/48", "7725"}, + {"2001:559:c42a::/47", "33657"}, + {"2404:2400:101::/44", "56132"}, + {"2408:8256:319d::/46", "17623"}, + {"2605:1900:8440::/33", "12208"}, + {"2620:11b:400a::/47", "47870"}, + {"2a02:26f7:ed05::/46", "20940"}, + {"2001:1248:a548::/47", "11172"}, + {"2404:3d00:412c::/47", "21433"}, + {"2602:fcd3:10::/44", "212934"}, + {"2806:103e:9::/48", "8151"}, + {"2001:578:115::/46", "22773"}, + {"2600:380:f104::/46", "20057"}, + {"2600:880b:6000::/29", "22773"}, + {"2c0f:fe68::/32", "36868"}, + {"2001:559:c9::/46", "33491"}, + {"2001:43f8:11d0::/48", "328381"}, + {"2603:c013:4000::/36", "31898"}, + {"2804:1b1:b6c2::/33", "18881"}, + {"2a02:530:23::/44", "21191"}, + {"2001:df6:be80::/48", "138277"}, + {"240a:a7c0::/32", "144634"}, + {"2604:c880:60::/32", "46455"}, + {"2607:1280:1380::/44", "394972"}, + {"2804:674c::/32", "269619"}, + {"2a03:2460::/32", "59908"}, + {"2001:559:480::/48", "33657"}, + {"2408:8956:b400::/40", "17622"}, + {"240a:a6c3::/32", "144381"}, + {"240e:45c:a800::/40", "131285"}, + {"2600:3500::/35", "396998"}, + {"2c0f:5900::/32", "60171"}, + {"2001:678:76c::/48", "8315"}, + {"2403:c00:900::/45", "17488"}, + {"2600:380:b000::/38", "20057"}, + {"2800:3b0:1001::/48", "6429"}, + {"2001:df2:6200::/48", "135247"}, + {"2400:b300::/47", "38470"}, + {"240a:ab7f::/32", "145593"}, + {"2620:112:f002::/47", "6336"}, + {"2a02:88d:3f::/40", "47794"}, + {"2409:8907:7420::/39", "24547"}, + {"240c:ca0c::/32", "138371"}, + {"240e:44d:1300::/41", "140345"}, + {"2605:1e80:3000::/36", "396930"}, + {"2401:4900:1a70::/40", "45609"}, + {"2600:140f:f801::/38", "20940"}, + {"2001:559:8294::/48", "7922"}, + {"2001:df0:fd80::/48", "139345"}, + {"240a:a7ef::/32", "144681"}, + {"2804:3248::/32", "61582"}, + {"2a02:fd40::/31", "31034"}, + {"2001:200:900::/40", "7660"}, + {"2001:658::/29", "20676"}, + {"2001:4978:10ae::/48", "13331"}, + {"2620:129:b000::/47", "394575"}, + {"2804:1684::/32", "53169"}, + {"2605:46c0:a::/32", "395658"}, + {"2804:4bd0::/32", "262320"}, + {"2001:16a8::/32", "12533"}, + {"2407:c080:5000::/37", "55990"}, + {"2607:f6f0:2000::/48", "54588"}, + {"2806:267:300::/37", "13999"}, + {"2a0b:5480::/29", "50599"}, + {"2406:840:d000::/36", "38136"}, + {"240e:e9:b000::/37", "137697"}, + {"2620:123:2040::/47", "30103"}, + {"2806:310:34::/46", "16960"}, + {"2001:df3:1600::/48", "9555"}, + {"240a:a8fe::/32", "144952"}, + {"2620:11b:e0c1::/48", "202818"}, + {"2a00:1680::/32", "31726"}, + {"2a02:d98::/32", "25146"}, + {"2a04:3780::/29", "48097"}, + {"2001:559:8402::/48", "7015"}, + {"2001:67c:5fc::/48", "8447"}, + {"2001:978:8701::/36", "174"}, + {"2405:25c0:a200::/40", "131969"}, + {"2405:a640::/32", "131668"}, + {"2600:6c20:3f::/41", "20115"}, + {"2603:c0e2:4000::/35", "54253"}, + {"2804:88:2::/35", "28135"}, + {"2804:e94:60::/40", "262468"}, + {"2804:37dc::/32", "266440"}, + {"2a01:d0:306::/44", "29632"}, + {"2a02:88d:802f::/48", "47794"}, + {"2a02:d28::/32", "3257"}, + {"2001:67c:108::/48", "202244"}, + {"2001:67c:2d64::/48", "39923"}, + {"2801:80:1418::/48", "11097"}, + {"2804:4414::/32", "267620"}, + {"2804:8540::/32", "272567"}, + {"2a06:93c0::/29", "680"}, + {"2a10:cc46:12c::/48", "48635"}, + {"2001:250:2420::/46", "24356"}, + {"240a:a327::/32", "143457"}, + {"2620:c8:4000::/48", "36210"}, + {"2a02:888:4048::/47", "48695"}, + {"2a04:a840::/29", "20559"}, + {"2a04:b0c0::/44", "201017"}, + {"2001:559:809a::/48", "33287"}, + {"2600:1005:f100::/44", "6167"}, + {"2803:1520::/32", "266688"}, + {"2804:5c::/32", "28201"}, + {"2804:2160:1ff0::/44", "264551"}, + {"2a01:ba80::/32", "49063"}, + {"2a02:970:1209::/41", "44002"}, + {"2c0f:f988::/32", "37353"}, + {"2400:3dc0::/38", "134371"}, + {"2400:7400:60::/48", "38044"}, + {"2409:8753:1100::/32", "56047"}, + {"2600:370f:728e::/47", "32261"}, + {"2620:115:2000::/46", "12259"}, + {"2804:37f0:b900::/33", "266445"}, + {"2001:df1:2a00::/48", "134553"}, + {"2407:500:100::/48", "58940"}, + {"2408:8956:8e00::/40", "17622"}, + {"240a:a289::/32", "143299"}, + {"240a:a3d3::/32", "143629"}, + {"240a:ae6e::/32", "146344"}, + {"2604:3400:ac01::/48", "209453"}, + {"2804:7598:c010::/44", "265442"}, + {"2a01:3e0:d01::/48", "38191"}, + {"2a02:26f7:c841::/46", "20940"}, + {"2001:250:5009::/48", "23910"}, + {"2406:4a00:17::/48", "56038"}, + {"2804:3288:b1b2::/33", "52827"}, + {"2001:550:5403::/39", "174"}, + {"2409:8002:1000::/40", "38019"}, + {"2a00:b0a0::/46", "203434"}, + {"2a02:4545:e0::/46", "197207"}, + {"2001:67c:23b0::/48", "210223"}, + {"2401:1801:e0::/39", "58683"}, + {"2600:8807:7c6::/36", "22773"}, + {"2a0d:2587:8200::/48", "141011"}, + {"2401:d800:f2f0::/39", "7552"}, + {"2403:ac40::/32", "131149"}, + {"2a02:f181:3000::/48", "47420"}, + {"2a0d:da06::/32", "211675"}, + {"2001:678:868::/48", "8220"}, + {"2409:8915:7a00::/39", "56044"}, + {"240a:a98c::/32", "145094"}, + {"2600:8807:4fe0::/35", "22773"}, + {"2804:4210::/35", "267475"}, + {"2804:83cc::/32", "272221"}, + {"2a0c:9a40:8086::/48", "3280"}, + {"2402:6f40:2::/47", "45079"}, + {"2402:8c00:9::/48", "17753"}, + {"2403:7240::/36", "138171"}, + {"240a:a911::/32", "144971"}, + {"2804:67e0::/32", "269656"}, + {"2a04:d940::/29", "41887"}, + {"2a01:490::/32", "8251"}, + {"2a03:2900::/32", "48823"}, + {"2a0e:b107:1788::/48", "210667"}, + {"2001:df7:6700::/48", "138516"}, + {"2409:804c:3017::/44", "9808"}, + {"2604:b40::/32", "395846"}, + {"2804:a40::/32", "263036"}, + {"2804:340c::/32", "265434"}, + {"240a:a616::/32", "144208"}, + {"2804:7a94:1300::/34", "271380"}, + {"2001:67c:444::/48", "6730"}, + {"2409:8904:2fa0::/35", "24547"}, + {"2600:370f:1120::/46", "32261"}, + {"2610:30:4001::/32", "30313"}, + {"2a00:fe8::/32", "16178"}, + {"2a0c:ef00::/32", "212881"}, + {"2409:8052:900::/37", "9808"}, + {"2a00:f78::/32", "48451"}, + {"2600:1408:8801::/37", "20940"}, + {"2607:800::/32", "26794"}, + {"2800:bf0:2444::/48", "52257"}, + {"2804:5d34::/35", "52690"}, + {"2804:72e0::/32", "270881"}, + {"2a01:8200:ff00::/48", "4455"}, + {"2a03:1984::/32", "48260"}, + {"2a0c:4d40::/29", "57353"}, + {"2604:ca00:f007::/44", "36492"}, + {"2620:0:2a01::/48", "31997"}, + {"2620:42:2000::/48", "30542"}, + {"2a0a:4587:2010::/46", "208294"}, + {"2001:fd0:2301::/37", "10029"}, + {"2400:cb00:a970::/46", "13335"}, + {"2409:8004:801::/48", "9808"}, + {"2800:160:1eef::/43", "14259"}, + {"2a09:b684::/30", "208861"}, + {"2a0a:acc2:6::/48", "6233"}, + {"2400:d280::/44", "45648"}, + {"2405:1c0:6a21::/46", "55303"}, + {"2a02:e0c0:1c00::/34", "9100"}, + {"2a0d:dd80::/29", "200308"}, + {"2a0f:9207:25::/32", "45009"}, + {"2401:4900:2500::/45", "45609"}, + {"2620:6b:4000::/48", "62675"}, + {"2a01:c50f:c480::/41", "12479"}, + {"2a0e:8f02:f021::/48", "211498"}, + {"2400:cb00:435::/48", "13335"}, + {"2606:ae00:b3c0::/36", "7287"}, + {"2801:10:7000::/48", "19429"}, + {"2804:2d24::/40", "263032"}, + {"2001:610::/39", "1103"}, + {"2001:4878:c215::/46", "12222"}, + {"2405:9800:b810::/48", "133481"}, + {"2604:9b80::/32", "30144"}, + {"2804:1bc:f047::/36", "10310"}, + {"2a0d:a2c0::/29", "60721"}, + {"2404:bf40:e801::/39", "139084"}, + {"2600:370f:2025::/41", "32261"}, + {"2a03:db80:3824::/48", "199578"}, + {"2a0d:fec0:21::/48", "47481"}, + {"2a10:afc0:e010::/44", "212794"}, + {"2001:480:10::/48", "22"}, + {"2001:559:82ba::/47", "7015"}, + {"2001:559:831a::/48", "33659"}, + {"2606:2800:420a::/47", "15133"}, + {"2606:6800:1c00::/40", "394902"}, + {"2a00:d300::/32", "31742"}, + {"2a03:9c80::/34", "15525"}, + {"2a0a:5a00::/29", "28954"}, + {"2a0c:b641:100::/47", "213154"}, + {"2001:559:3aa::/48", "7015"}, + {"2001:da8:304a::/45", "24358"}, + {"2a02:f840::/47", "199483"}, + {"2402:800:388d::/43", "7552"}, + {"240a:af0b::/32", "146501"}, + {"2603:f2f0::/23", "397165"}, + {"2a0c:b340::/47", "206262"}, + {"2001:67c:478::/48", "212774"}, + {"2001:67c:2f2c::/48", "44894"}, + {"2001:1900:2262::/48", "21775"}, + {"2402:3a80:1100::/38", "38266"}, + {"2a02:26f7:c38d::/46", "20940"}, + {"2a04:2b00:200::/48", "42044"}, + {"2a0d:e4c2::/29", "208861"}, + {"2001:559:93::/48", "33651"}, + {"2001:678:ad4::/48", "205597"}, + {"240e:c:7800::/31", "4134"}, + {"2a01:500::/32", "39537"}, + {"2001:df0:d4::/48", "55870"}, + {"2001:1a11:71::/48", "8781"}, + {"2600:6000:fa69::/48", "11351"}, + {"2600:6c10:c0d::/43", "20115"}, + {"2607:8100::/32", "11404"}, + {"2804:6ae8::/32", "270365"}, + {"2a03:2880:f00b::/43", "32934"}, + {"240a:a337::/32", "143473"}, + {"2620:1ec:25::/46", "8075"}, + {"2803:5440:aca::/48", "264738"}, + {"2804:24b0:ffff::/48", "264238"}, + {"2806:230:200a::/48", "265594"}, + {"2a00:95a0::/32", "29425"}, + {"2a06:f904::/36", "56630"}, + {"2001:4c8:1094::/47", "15290"}, + {"2402:7e00::/32", "45280"}, + {"2404:bf40:8082::/48", "7545"}, + {"240a:aa19::/32", "145235"}, + {"2606:ef80:6::/48", "3595"}, + {"2804:4e18::/32", "268239"}, + {"2804:7330::/32", "270901"}, + {"2c0f:f3f8::/32", "327972"}, + {"2001:18e8:800::/44", "17"}, + {"2409:803c:2800::/38", "24444"}, + {"2604:d600:1549::/46", "32098"}, + {"2a0e:cc80::/29", "208766"}, + {"2c0f:ef48::/32", "328339"}, + {"2401:7800::/32", "7387"}, + {"2600:6c3a:810::/44", "20115"}, + {"2804:79a8::/32", "271319"}, + {"2a01:871::/29", "3209"}, + {"2a02:26f7:b701::/46", "20940"}, + {"2a02:26f7:b781::/46", "20940"}, + {"2a02:26f7:d2c1::/45", "20940"}, + {"2a07:db01::/47", "204527"}, + {"2001:559:807c::/48", "7015"}, + {"2001:678:c34::/48", "207437"}, + {"2607:fc58:1:52::/64", "13536"}, + {"2804:5c28::/48", "268892"}, + {"2001:b400:d208::/45", "17421"}, + {"2a02:26f7:e409::/42", "20940"}, + {"2a06:7a80::/48", "208712"}, + {"2001:310:3004::/32", "4694"}, + {"240e:3bf:7600::/39", "140313"}, + {"2804:c84:2::/42", "52720"}, + {"2a02:26f7:ceca::/42", "20940"}, + {"2a0f:1900:1000::/36", "209446"}, + {"240a:a636::/32", "144240"}, + {"2606:6800:2800::/40", "394898"}, + {"2a02:26f7:29::/48", "20940"}, + {"2a0f:9400:b00b::/48", "213163"}, + {"2001:559:83be::/47", "7922"}, + {"2402:a800::/32", "9601"}, + {"2403:ad80:3c00::/38", "134835"}, + {"2602:fd72::/36", "2740"}, + {"2602:ff25:e00::/39", "46657"}, + {"2620:104:2001::/46", "40185"}, + {"2804:3ed4::/47", "266623"}, + {"2a02:26f7:de80::/48", "36183"}, + {"2a0e:b107:700::/48", "140098"}, + {"2001:4de0:101::/48", "34343"}, + {"2402:800:31ee::/43", "7552"}, + {"240a:a6e6::/32", "144416"}, + {"240e:a7:7fe1::/46", "140519"}, + {"2800:484:6600::/35", "10620"}, + {"2a02:4540:c000::/41", "197207"}, + {"2a11:c0::/32", "47753"}, + {"2610:f0:37f::/40", "22925"}, + {"2a09:0:13::/48", "34549"}, + {"2c0f:e9a0::/32", "174"}, + {"2001:559:c4bf::/48", "33657"}, + {"2401:4900:4900::/43", "45609"}, + {"2406:daa0:f080::/44", "16509"}, + {"240e:13:809::/48", "140861"}, + {"2607:fe60::/32", "11280"}, + {"2804:fc:8e00::/33", "28142"}, + {"2a00:1d78::/32", "44050"}, + {"2a01:7400::/32", "47544"}, + {"2a02:26f7:c4c8::/48", "36183"}, + {"2409:8014::/44", "56044"}, + {"2409:8924:b00::/37", "56046"}, + {"240e:967:8c00::/35", "4134"}, + {"2604:d600:925::/46", "32098"}, + {"2a01:a700::/33", "39138"}, + {"2a06:1301:4003::/48", "49718"}, + {"2a0e:97c0:750::/44", "210836"}, + {"2001:fd8:33f0::/44", "4775"}, + {"2600:141c:4001::/36", "20940"}, + {"2a00:7b00:15::/44", "12338"}, + {"2001:559:c237::/48", "20214"}, + {"240a:a6c4::/32", "144382"}, + {"240e:108:87::/48", "4134"}, + {"240e:3bb:2800::/38", "4134"}, + {"2a01:67c0::/32", "16074"}, + {"2a02:db40::/48", "48749"}, + {"2a05:7140::/29", "25455"}, + {"2600:100b::/32", "6167"}, + {"2804:4d3c:3001::/40", "267420"}, + {"2a02:26f7:ec81::/46", "20940"}, + {"2a04:4440::/29", "31655"}, + {"2001:c00::/39", "4618"}, + {"2407:1e00::/35", "45158"}, + {"240e:6:d1b0::/37", "4134"}, + {"2604:bc0:1::/48", "46562"}, + {"2604:d600:15c7::/44", "32098"}, + {"2804:16c::/32", "28309"}, + {"2001:559:c0bb::/45", "33650"}, + {"2402:4e00:8031::/33", "45090"}, + {"2605:a401:8e4e::/40", "33363"}, + {"2620:1ec:900::/48", "8068"}, + {"2804:51c:a121::/33", "262495"}, + {"2804:6284::/32", "53090"}, + {"2610:20:8060::/45", "3477"}, + {"2800:440:1800::/42", "27738"}, + {"2803:4500::/32", "27660"}, + {"2a02:cb43:8008::/48", "20546"}, + {"2a11:3b80::/29", "62212"}, + {"2001:da8:e81c::/47", "138373"}, + {"2403:9b00::/32", "45110"}, + {"2a02:ac80:a01::/39", "25145"}, + {"2600:6c38:1f2::/38", "20115"}, + {"2001:67c:2cd4::/48", "29229"}, + {"2402:ea80:d::/48", "17747"}, + {"240a:a67f::/32", "144313"}, + {"2804:340:5000::/32", "28165"}, + {"2804:32d0::/32", "265099"}, + {"2804:6f9c::/32", "270672"}, + {"2a00:f740:101::/38", "28875"}, + {"2a05:c741::/32", "1299"}, + {"2a11:7cc0::/29", "34907"}, + {"2001:579:243b::/41", "22773"}, + {"240a:abbe::/32", "145656"}, + {"240e:978:1900::/40", "137697"}, + {"2800:440::/47", "27738"}, + {"2404:80::/28", "18182"}, + {"2408:840d:7900::/42", "17621"}, + {"2409:802f:290c::/38", "56041"}, + {"2605:3380:ff00::/46", "12025"}, + {"2804:188:b1a2::/33", "262750"}, + {"2400:ac40:dd0::/32", "136255"}, + {"240a:a912::/32", "144972"}, + {"2603:c0f2:4000::/35", "6142"}, + {"2606:a80::/32", "12212"}, + {"2804:1e38:4005::/35", "264415"}, + {"2804:323c::/32", "262367"}, + {"2a0d:5082:59::/29", "62240"}, + {"2804:cf8:c000::/45", "52580"}, + {"2a09:c3c0::/29", "209102"}, + {"2a0a:1f41::/32", "212144"}, + {"2001:67c:10e8::/48", "199220"}, + {"2001:1248:57fc::/47", "11172"}, + {"2400:cb00:479::/48", "13335"}, + {"2401:a100:c010::/34", "45194"}, + {"240a:a25f::/32", "143257"}, + {"2605:9780:f::/43", "36180"}, + {"2a02:7f80::/30", "51942"}, + {"2a03:a820::/32", "39235"}, + {"2001:559:8109::/48", "33651"}, + {"2001:12a0:5000::/32", "28292"}, + {"2620:130:2000::/47", "18701"}, + {"2001:67c:265c::/48", "24861"}, + {"2602:fe19:399a::/33", "26073"}, + {"2607:6000:900::/40", "12189"}, + {"2806:230:301d::/48", "11888"}, + {"2a00:af00:e000::/35", "15599"}, + {"2a0d:4300:2::/29", "204920"}, + {"2401:d800:9050::/42", "7552"}, + {"2402:1e80:0:3000::/48", "4672"}, + {"2804:3fd8:197::/32", "265919"}, + {"2806:322:900::/37", "28546"}, + {"2a0e:b107:3e0::/48", "212034"}, + {"2001:550:2211::/44", "174"}, + {"2408:8956:78c0::/39", "17816"}, + {"2409:8958:c954::/38", "56040"}, + {"2600:1014:d170::/34", "22394"}, + {"240e:944::/36", "58541"}, + {"2a02:26f7:dd04::/48", "36183"}, + {"2001:559:15f::/48", "33287"}, + {"2001:1248:84d4::/47", "11172"}, + {"2001:18e8:c04::/32", "19782"}, + {"2405:2500:5::/48", "136566"}, + {"2408:84f3:3260::/40", "17623"}, + {"2a06:580::/29", "200590"}, + {"2a09:3c00:1::/48", "213268"}, + {"2a0b:7cc0:1::/48", "41652"}, + {"2001:1248:5900::/43", "11172"}, + {"2401:d800:f890::/41", "7552"}, + {"240a:a2de::/32", "143384"}, + {"240a:a5ed::/32", "144167"}, + {"240a:a876::/32", "144816"}, + {"2804:6524::/32", "269471"}, + {"2a00:1358:d100::/36", "6866"}, + {"2001:250:3401::/48", "138393"}, + {"240a:afed::/32", "146727"}, + {"2804:2f98:c000::/34", "264901"}, + {"2a0d:9500::/29", "48551"}, + {"2001:418:1401:25::/64", "20940"}, + {"2001:16a2:b216::/37", "39386"}, + {"2404:b180::/35", "135310"}, + {"2406:7400:38::/46", "131269"}, + {"2606:1a40:1020::/44", "398962"}, + {"2804:4ec:1300::/37", "28668"}, + {"2a00:86c0:200a::/42", "2906"}, + {"2a05:9cc3::/29", "2116"}, + {"2a07:ec80:210::/47", "44949"}, + {"2404:f4c0:8864::/48", "210384"}, + {"2409:8070:3100::/30", "9808"}, + {"240e:979:1f00::/34", "4134"}, + {"240e:a51:5c00::/34", "134419"}, + {"2a0b:2700::/29", "206894"}, + {"240a:a022::/32", "142684"}, + {"240e:983:1000::/48", "136195"}, + {"2607:1b00:1::/46", "54456"}, + {"2a00:1582:3::/29", "39010"}, + {"2a01:c500::/29", "12479"}, + {"2404:0:8240::/36", "131591"}, + {"240a:adf2::/32", "146220"}, + {"2604:6600:fd01::/40", "40676"}, + {"2604:7e00::/42", "17378"}, + {"2806:230:203e::/48", "265594"}, + {"2a03:efc0:500::/40", "197640"}, + {"240a:a250::/32", "143242"}, + {"240a:ace4::/32", "145950"}, + {"2606:7c0::/32", "54804"}, + {"2607:fdc8:1400::/48", "30036"}, + {"2804:64d8::/32", "269453"}, + {"2a04:4e40:4a00::/48", "54113"}, + {"2a10:7680::/32", "209056"}, + {"2408:805c:4009::/36", "17622"}, + {"2607:f018:fffe::/48", "177"}, + {"2a04:5340:4::/48", "200081"}, + {"2001:559:80a7::/48", "7015"}, + {"2404:3d00:40e2::/45", "3573"}, + {"2409:896a:8a00::/39", "9808"}, + {"2600:6c3a:808::/45", "20115"}, + {"2603:c0f8:2110::/38", "20054"}, + {"2800:bf0:37c5::/42", "27947"}, + {"2001:559:f0::/47", "33490"}, + {"2001:43f8:b61::/48", "328010"}, + {"2001:48d0::/32", "195"}, + {"2400:a440::/48", "18019"}, + {"2600:1480:6100::/37", "20940"}, + {"2402:ee40:100::/44", "134033"}, + {"2408:80ea:7580::/43", "17623"}, + {"2409:8c1e:75c0::/32", "9808"}, + {"240a:aebb::/32", "146421"}, + {"2604:d600:155d::/42", "32098"}, + {"2801:141:1::/46", "271958"}, + {"2804:738c:c002::/44", "270922"}, + {"2a01:b740:a16::/47", "714"}, + {"2a01:c50e:7100::/32", "12479"}, + {"2001:67c:374::/48", "51861"}, + {"2600:1480:b800::/48", "21342"}, + {"2607:9500::/32", "22423"}, + {"2620:11a:a020::/46", "43515"}, + {"2c0f:f948:a::/48", "37582"}, + {"2001:480:630::/48", "84"}, + {"2001:559:334::/48", "7015"}, + {"2001:559:c42e::/48", "33651"}, + {"2408:8957:d4c0::/38", "17816"}, + {"2a0d:71c0::/29", "49191"}, + {"2001:12a0:5::/33", "28292"}, + {"2401:d800:f590::/42", "7552"}, + {"2402:800:97ee::/43", "7552"}, + {"2402:28c0:fffa::/45", "136620"}, + {"2620:11d:9003::/48", "14805"}, + {"2806:2f0:9c03::/41", "17072"}, + {"2a02:26f0:c401::/40", "20940"}, + {"2a02:2e02:c10::/42", "12479"}, + {"2a03:1000::/32", "25575"}, + {"2a04:c9c0::/29", "202113"}, + {"2402:9d80:a41::/43", "131429"}, + {"2405:9200:1100::/41", "131596"}, + {"2620:116:3000::/44", "33024"}, + {"2804:5d60::/32", "268968"}, + {"2404:c880::/36", "135220"}, + {"2406:840:f000::/44", "142582"}, + {"2800:bf0:2409::/43", "27947"}, + {"2803:ad20::/32", "266703"}, + {"2001:67c:614::/48", "50157"}, + {"2001:67c:1530::/48", "61283"}, + {"2403:6c0::/48", "137366"}, + {"240a:a063::/32", "142749"}, + {"2606:b400:8300::/47", "1215"}, + {"2620:f:7::/48", "3630"}, + {"2800:bf0:3ac0::/48", "52257"}, + {"2804:4248:9001::/33", "267490"}, + {"2804:5c60::/32", "268905"}, + {"2a02:26f7:f3cc::/48", "36183"}, + {"2c0f:f8c8::/32", "37531"}, + {"2401:803e:4001::/42", "9919"}, + {"2a02:2950::/32", "15566"}, + {"2001:ce0::/47", "3662"}, + {"2409:8055:3018::/48", "9808"}, + {"240e:96b:6009::/46", "140367"}, + {"2620:0:402::/47", "3389"}, + {"2800:160:1a4a::/43", "14259"}, + {"2804:7338::/32", "262842"}, + {"2a02:d70::/32", "41176"}, + {"2a02:26f7:e2c0::/48", "36183"}, + {"2400:cb00:439::/48", "13335"}, + {"2408:8256:2d7b::/48", "17816"}, + {"2800:5f0:103a::/34", "22724"}, + {"2a00:1728:2::/47", "34224"}, + {"2a04:e100::/31", "31034"}, + {"2604:d600:c46::/43", "32098"}, + {"2605:e000::/37", "20001"}, + {"2801:10::/45", "28068"}, + {"2a00:b400::/31", "12857"}, + {"2a04:cf40::/29", "12843"}, + {"2001:fd8:2178::/40", "132199"}, + {"2804:282c::/32", "263945"}, + {"2a0b:e540::/29", "205311"}, + {"2804:14c:9b84::/44", "28573"}, + {"2402:6640:fcf::/32", "134995"}, + {"2402:8a00:4080::/32", "24477"}, + {"2406:ef40:8::/48", "133811"}, + {"2600:6c38:b01::/45", "20115"}, + {"2604:d600:1f::/42", "32098"}, + {"2620:1ec::/46", "8075"}, + {"2804:641c::/32", "269407"}, + {"2804:7cbc::/32", "271515"}, + {"2a00:79e1:f000::/38", "36384"}, + {"2620:10d:c090::/44", "54115"}, + {"2a02:26f0:601::/40", "20940"}, + {"2a02:26f0:c801::/39", "20940"}, + {"240a:a639::/32", "144243"}, + {"2606:2800:4a08::/46", "15133"}, + {"2801:80:d10::/48", "264396"}, + {"2a01:7920::/29", "47292"}, + {"2a01:8480::/34", "15704"}, + {"2a03:c580::/32", "39104"}, + {"2405:1c0:6811::/45", "55303"}, + {"2408:842e::/32", "4837"}, + {"2001:b30:4211::/46", "2614"}, + {"2600:1408:e001::/37", "20940"}, + {"2804:7fb4::/33", "271704"}, + {"2a0e:f200:154::/48", "30633"}, + {"2001:67c:5dc::/48", "3303"}, + {"2402:3a80:1728::/48", "38266"}, + {"240a:a061::/32", "142747"}, + {"2600:1fa0:6080::/44", "16509"}, + {"2602:808:4001::/46", "16509"}, + {"2620:11d:9000::/48", "14805"}, + {"2801:1e2::/44", "27951"}, + {"2a00:13e0::/32", "44764"}, + {"2a04:4e40:ca10::/44", "54113"}, + {"2001:978:4200:100::/46", "174"}, + {"2409:803c:3000::/40", "24444"}, + {"2602:fffd::/36", "55022"}, + {"2804:257c::/32", "52716"}, + {"2a06:2640::/29", "200576"}, + {"2001:460:104::/32", "3561"}, + {"2001:1248:88ff::/39", "11172"}, + {"240a:ac3a::/32", "145780"}, + {"2604:2540::/32", "393299"}, + {"2620:11f:9006::/48", "14746"}, + {"2a02:26f7:b948::/48", "36183"}, + {"2a02:26f7:f409::/46", "20940"}, + {"2a02:6900:881c::/48", "43894"}, + {"2001:559:5fe::/48", "33287"}, + {"2001:4878:c321::/45", "12222"}, + {"2806:20d:7301::/37", "32098"}, + {"2a09:9840::/48", "34775"}, + {"2c0f:fbf0:2::/43", "32653"}, + {"2400:50c0::/32", "136039"}, + {"2406:2000:e8::/46", "10310"}, + {"2408:840c:c500::/40", "17621"}, + {"240e:3b0:d000::/36", "134772"}, + {"2804:2904:a01::/43", "262588"}, + {"2a02:26f7:e840::/48", "36183"}, + {"2a06:2f40::/29", "57878"}, + {"2a0d:2581:3::/48", "209261"}, + {"2001:678:328::/48", "206567"}, + {"2400:4ec0:8c0e::/43", "64300"}, + {"2a02:cb80:2940::/48", "43766"}, + {"2a07:8c80::/29", "202789"}, + {"2001:df5:d880::/48", "141680"}, + {"2620:11a:c016::/48", "54113"}, + {"2001:3b0::/32", "17529"}, + {"2001:4878:356::/48", "12222"}, + {"2a0e:4847::/48", "48749"}, + {"2404:4a00:8000::/64", "55423"}, + {"2a00:cee0::/36", "60268"}, + {"2a00:f720:2::/32", "24824"}, + {"2404:bf40:89c3::/42", "139084"}, + {"2405:1c0:6a41::/46", "55303"}, + {"2405:f080:400::/38", "136907"}, + {"2607:1280:1280::/43", "394972"}, + {"2804:82f0::/32", "272166"}, + {"2a02:26f7:c744::/47", "36183"}, + {"240a:a0ac::/32", "142822"}, + {"240e:964:cb00::/40", "133776"}, + {"2607:700:900::/35", "22343"}, + {"2804:3db0::/32", "266547"}, + {"2806:2f0:80a0::/41", "17072"}, + {"2001:559:84fa::/48", "7016"}, + {"2409:8c44:800::/48", "9808"}, + {"240e:473:ffff::/48", "140485"}, + {"2602:feda:b8e::/48", "211935"}, + {"2a05:bd04::/30", "42221"}, + {"2406:b400:b0::/47", "55577"}, + {"2804:28d8::/32", "263984"}, + {"2804:5f9c::/32", "269112"}, + {"2a0f:9400:7806::/44", "147028"}, + {"2402:a00:145::/32", "45916"}, + {"2404:e400:10::/44", "136402"}, + {"240a:ad1e::/32", "146008"}, + {"2a0c:c900::/29", "30931"}, + {"2001:559:818c::/48", "22909"}, + {"2604:3d00:4c00::/32", "6327"}, + {"2605:8680:12::/47", "25780"}, + {"2804:4bb0::/32", "267324"}, + {"240a:a3df::/32", "143641"}, + {"2804:14d:8c3::/42", "28573"}, + {"2804:2e08::/32", "265319"}, + {"2804:5464::/32", "268647"}, + {"2a03:6947:600::/40", "31027"}, + {"2a03:9e20::/32", "203672"}, + {"2a10:bbc0::/32", "25234"}, + {"2603:90f5:e00::/39", "20115"}, + {"2607:fdf0:5e27::/44", "8008"}, + {"2a02:1c8:30::/44", "57128"}, + {"2a07:e640::/29", "2613"}, + {"2401:4800:2::/48", "38457"}, + {"2409:8774:1000::/32", "9808"}, + {"240a:a190::/32", "143050"}, + {"240e:44d:c80::/41", "4134"}, + {"2a00:fb20:8000::/33", "199319"}, + {"2a04:31c0::/29", "60820"}, + {"2a0d:8d06::/48", "48079"}, + {"2401:d800:9170::/40", "7552"}, + {"2804:ab8::/32", "52911"}, + {"2a01:c50f:100::/38", "12479"}, + {"2a03:1240::/48", "34187"}, + {"2a0a:ec02:b01::/48", "42692"}, + {"2603:c002:9b10::/37", "31898"}, + {"2604:ca00:f00e::/47", "36492"}, + {"2607:f110:17::/44", "21889"}, + {"2804:2604::/32", "264318"}, + {"2a0a:4900::/29", "49425"}, + {"2001:678:598::/48", "31010"}, + {"2001:67c:2020::/48", "48598"}, + {"2001:1a10:1000::/44", "42298"}, + {"240a:a442::/32", "143740"}, + {"240c:0:1::/29", "45275"}, + {"2602:809:8000::/44", "397919"}, + {"2603:f0f0::/23", "397165"}, + {"2401:1d40:2f01::/35", "59019"}, + {"2401:d100:d::/32", "18705"}, + {"2600:6c38:f63::/45", "20115"}, + {"2620:12e:5000::/40", "47101"}, + {"2804:eec:11c4::/48", "25933"}, + {"2804:7ef0::/32", "271656"}, + {"2806:230:203a::/48", "265594"}, + {"240a:a737::/32", "144497"}, + {"240a:ae94::/32", "146382"}, + {"2602:ffc6:100::/37", "21777"}, + {"2607:fc48:1800::/48", "40009"}, + {"2a00:4d80::/32", "25394"}, + {"2a01:5241:200::/29", "58243"}, + {"2001:559:c0c1::/48", "33652"}, + {"2001:fd8:f340::/42", "132199"}, + {"2620:126:7001::/48", "53800"}, + {"2800:160:14f1::/46", "14259"}, + {"240a:ac1e::/32", "145752"}, + {"2a01:8840:92::/45", "12041"}, + {"2a0d:60c3::/32", "59504"}, + {"2400:bb40:8888::/48", "136787"}, + {"2a05:8800::/29", "57513"}, + {"2409:8061:3900::/30", "9808"}, + {"2001:44b8:405f::/48", "4739"}, + {"240e:6b2::/35", "134772"}, + {"2607:f380:a60::/45", "2152"}, + {"2804:318c:200::/34", "265023"}, + {"2806:230:200e::/48", "265594"}, + {"2001:978:1b06::/37", "174"}, + {"2600:380:f1e4::/43", "20057"}, + {"2604:880:72::/45", "29802"}, + {"2a02:2528:2614::/29", "25091"}, + {"2001:678:1c4::/48", "48971"}, + {"2400:bf40::/32", "135003"}, + {"2401:d800:7ab0::/41", "7552"}, + {"2a01:4b0::/47", "42310"}, + {"2a02:7ae0::/32", "201659"}, + {"2a03:cbc0::/29", "61200"}, + {"2a0a:9800::/29", "199163"}, + {"2a11:b100:b100::/48", "57167"}, + {"2804:14bc::/32", "263347"}, + {"2a00:1288:85::/46", "10310"}, + {"2a02:26f7:67::/48", "20940"}, + {"2a10:8802:1000::/29", "31743"}, + {"2001:418:1456:b23::/42", "2914"}, + {"2001:1248:9619::/45", "11172"}, + {"240a:a98b::/32", "145093"}, + {"2600:1407:8801::/37", "20940"}, + {"2600:1fa0:8140::/44", "16509"}, + {"2620:171:3::/48", "715"}, + {"2a02:26f7:64::/48", "36183"}, + {"2001:559:c4b2::/47", "7015"}, + {"2604:ca00:474::/40", "36492"}, + {"2a01:c50f:d500::/36", "12479"}, + {"2a02:26f7:c150::/48", "36183"}, + {"2a0e:240::/29", "209993"}, + {"2405:201:3400::/33", "55836"}, + {"2406:daa0:4040::/44", "16509"}, + {"2408:8456:e410::/42", "134543"}, + {"2804:46c::/32", "52978"}, + {"2a01:5b0:8::/48", "48519"}, + {"2a07:59c6:e000::/47", "203125"}, + {"2602:801:2::/48", "397781"}, + {"2a09:3c0::/29", "211170"}, + {"2c0f:ee78:8008::/33", "61317"}, + {"2001:559:280::/48", "21508"}, + {"2404:bf40:8585::/42", "139084"}, + {"2607:ffb0:600f::/35", "6327"}, + {"2a10:8802::/36", "15404"}, + {"2001:df2:ac00::/48", "134073"}, + {"2409:8054:302a::/43", "56040"}, + {"240a:ad83::/32", "146109"}, + {"240a:af4f::/32", "146569"}, + {"2602:ff06:677::/48", "25720"}, + {"2a02:26f7:dec1::/46", "20940"}, + {"2a02:ee80:404c::/43", "3573"}, + {"2401:4900:5870::/44", "45609"}, + {"2404:2400::/39", "56132"}, + {"2406:c500:ff4::/48", "58534"}, + {"240e:438:3040::/38", "4134"}, + {"2806:2f0:5103::/42", "17072"}, + {"2a03:d000:9008::/47", "20632"}, + {"2c0f:f718::/32", "37678"}, + {"240e:60c:b800::/33", "4134"}, + {"2600:8807:3b20::/33", "22773"}, + {"2605:a404:1bd::/41", "33363"}, + {"2a00:bec7:f800::/40", "12946"}, + {"2a02:7e0::/32", "200163"}, + {"2001:df0:a0c0::/48", "140037"}, + {"2405:4200:205::/32", "24482"}, + {"240e:3be:4c00::/35", "136200"}, + {"2801:80:1bd0::/48", "266512"}, + {"2804:4c0:fc02::/38", "3549"}, + {"2804:5534:b000::/37", "268696"}, + {"2a09:1500:8::/48", "208175"}, + {"2a0e:5000::/29", "49191"}, + {"2a0e:b107:1161::/48", "35761"}, + {"2001:c38:9009::/45", "9931"}, + {"2001:1248:842f::/43", "11172"}, + {"2620:1:2000::/48", "396152"}, + {"2804:18:90::/36", "26599"}, + {"2a0e:8f80::/48", "52051"}, + {"2001:559:2c2::/48", "33490"}, + {"2804:14c:75a8::/46", "28573"}, + {"2a04:e4c0:51::/45", "36692"}, + {"2001:250:a809::/48", "24370"}, + {"2001:559:197::/48", "33651"}, + {"2001:559:596::/47", "33287"}, + {"2404:1a8::/32", "9595"}, + {"2409:8c1f:c340::/34", "9808"}, + {"2804:59d8:b182::/33", "268729"}, + {"2a0d:3a00::/29", "208133"}, + {"2a0d:8d06:1002::/48", "48079"}, + {"2001:648:2303::/42", "5408"}, + {"2001:44c8:4730::/44", "45430"}, + {"2604:f580::/32", "54329"}, + {"2800:160:1da9::/45", "14259"}, + {"2804:1b3:a800::/37", "18881"}, + {"2a00:b340:32::/48", "196745"}, + {"2a02:26f7:e804::/48", "36183"}, + {"2408:8459:8850::/38", "17816"}, + {"2603:90b2::/32", "11351"}, + {"2604:dc40::/48", "393398"}, + {"2620:0:1b00::/48", "714"}, + {"2a01:8880:8001::/33", "8745"}, + {"2001:559:470::/48", "7922"}, + {"240e:438:7040::/38", "4134"}, + {"2a09:3580::/29", "38946"}, + {"2a10:2ec3::/29", "208861"}, + {"2001:1998:a04::/35", "7843"}, + {"240e:3b7:f100::/37", "134775"}, + {"2804:5d50::/32", "268964"}, + {"2a00:13c0::/38", "29076"}, + {"240a:a39e::/32", "143576"}, + {"2605:32c0:a002::/48", "5670"}, + {"2620:60:e000::/48", "19014"}, + {"2001:d68:7::/44", "38759"}, + {"240a:a52c::/32", "143974"}, + {"2600:1406:48::/39", "20940"}, + {"2804:33f0::/32", "265426"}, + {"2001:4220:800d::/46", "24835"}, + {"2001:4da8:c010::/44", "207564"}, + {"2406:140::/35", "398704"}, + {"240a:a262::/32", "143260"}, + {"2a05:5080::/48", "62222"}, + {"2a0c:e640:1010::/47", "141011"}, + {"2605:54c0::/32", "397735"}, + {"2a02:26f7:ea::/48", "36183"}, + {"2a07:7040::/48", "202915"}, + {"240e:3b6:6400::/35", "140312"}, + {"2620:128:6000::/48", "395361"}, + {"2803:6fa0::/48", "267790"}, + {"2c0f:f020::/46", "327907"}, + {"2001:559:2ad::/46", "7015"}, + {"2001:18d8::/32", "14"}, + {"2804:678c::/32", "269635"}, + {"2a02:26f7:c680::/48", "36183"}, + {"2a0a:6040:ac69::/48", "211954"}, + {"2404:4f80:31::/38", "58715"}, + {"2a04:e4c0:12::/48", "36692"}, + {"2001:470:31::/48", "6939"}, + {"2402:8100:27e8::/47", "45271"}, + {"2804:145c:8090::/39", "263327"}, + {"2804:1d00::/32", "61688"}, + {"2804:8258::/32", "272514"}, + {"240a:a48a::/32", "143812"}, + {"240a:a97b::/32", "145077"}, + {"2600:1000:ff00::/44", "6167"}, + {"2a07:2904::/32", "15585"}, + {"2401:d800:90e0::/39", "7552"}, + {"2405:58c0:3e00::/40", "133101"}, + {"2605:2e40::/32", "11260"}, + {"2a03:ad40:430::/48", "54995"}, + {"2a09:9bc0:a::/48", "9009"}, + {"2a01:54e0:a000::/38", "62287"}, + {"2a07:7201::/29", "34197"}, + {"2001:250:83d::/41", "138182"}, + {"2001:6f8:1a00::/32", "3257"}, + {"2001:da8:aa::/48", "24371"}, + {"240a:ac28::/32", "145762"}, + {"240e:44d:7c80::/41", "4134"}, + {"2a02:26f0:a401::/39", "20940"}, + {"2001:4298::/40", "30990"}, + {"2605:cf00::/32", "46525"}, + {"2804:7168::/32", "270787"}, + {"2a0d:5fc0::/29", "62412"}, + {"2402:8100:31e0::/45", "45271"}, + {"2403:2e80::/32", "23858"}, + {"240a:aaf1::/32", "145451"}, + {"2600:8807:9182::/38", "22773"}, + {"2602:fc3e:810::/48", "400190"}, + {"2a02:28:8::/45", "8359"}, + {"2001:918:1ab::/48", "8300"}, + {"2a00:17a0::/32", "34867"}, + {"2403:ac80:89::/32", "4785"}, + {"2402:28c0:5::/39", "136620"}, + {"2607:700:500::/36", "22343"}, + {"2402:9800:4001::/48", "131118"}, + {"2405:6740::/32", "139419"}, + {"2602:feda:afd::/48", "138210"}, + {"2a02:888:8050::/48", "48695"}, + {"2a02:26f7:be41::/46", "20940"}, + {"2a02:ac80:c001::/35", "25145"}, + {"2a09:d140::/29", "28753"}, + {"240e:967:d600::/34", "4134"}, + {"2607:f4e0::/38", "4150"}, + {"2a0e:e700::/31", "2027"}, + {"2001:67c:2468::/48", "48894"}, + {"2405:6800::/35", "18207"}, + {"2605:b940::/46", "19047"}, + {"2001:559:c128::/48", "33287"}, + {"2405:f600:30::/45", "45117"}, + {"2600:1017:9110::/38", "6167"}, + {"2803:ba00:e00::/32", "52286"}, + {"2a09:bac0:174::/48", "13335"}, + {"2001:938:400a::/47", "8437"}, + {"2401:7080::/32", "24157"}, + {"2406:30c0::/48", "38732"}, + {"2600:140f:9800::/48", "9498"}, + {"2803:9110:2001::/32", "271992"}, + {"2001:c20:8406::/44", "3758"}, + {"2001:df5:8480::/48", "141475"}, + {"2001:4868:900::/45", "701"}, + {"2401:4a00::/32", "17444"}, + {"240a:ad7e::/32", "146104"}, + {"240e:a7:7fcf::/43", "140513"}, + {"2405:84c0:ff20::/45", "59598"}, + {"2409:8087:400::/40", "24547"}, + {"2600:6c38:c22::/44", "20115"}, + {"2a02:26f7:fc08::/48", "36183"}, + {"2001:fb0:1079::/40", "7470"}, + {"2800:160:1ff0::/47", "14259"}, + {"2804:39c8::/32", "266050"}, + {"2a02:26f7:f5c1::/46", "20940"}, + {"2401:6bff:8000::/40", "9466"}, + {"2604:8b80::/48", "55106"}, + {"2804:1010:3000::/33", "263617"}, + {"2a02:26f7:f245::/46", "20940"}, + {"2a03:ad05::/30", "8208"}, + {"2001:559:c07e::/47", "33650"}, + {"2001:7f9:8::/48", "51354"}, + {"240a:a24d::/32", "143239"}, + {"240a:a414::/32", "143694"}, + {"2600:1419:1c::/38", "20940"}, + {"2607:f360:100:200::/32", "32592"}, + {"2801:1a1::/44", "272021"}, + {"2804:d3c:8110::/33", "52613"}, + {"2804:3c30::/32", "266195"}, + {"2806:2f0:9bc3::/42", "17072"}, + {"2a0a:9204:30::/48", "211375"}, + {"2407:6100::/32", "58952"}, + {"240a:ae2b::/32", "146277"}, + {"240e:438:7c40::/38", "4134"}, + {"2a0c:ec80::/32", "204659"}, + {"2001:559:c17f::/48", "33651"}, + {"2a00:b8e0::/48", "29119"}, + {"2a0f:1040::/29", "60262"}, + {"2a0f:9240:2000::/48", "212270"}, + {"2001:559:81d0::/48", "33651"}, + {"2402:e280:2120::/45", "134674"}, + {"2408:8256:317c::/48", "17816"}, + {"2804:7d24::/32", "271542"}, + {"2a05:d880::/30", "43066"}, + {"2001:388:3031::/41", "7575"}, + {"240e:965:ca00::/39", "133776"}, + {"2803:420:f800::/37", "265831"}, + {"2a00:1d18::/32", "43939"}, + {"2a02:6a80:530f::/32", "3245"}, + {"2a04:ed00::/29", "199468"}, + {"2804:33c::/32", "53137"}, + {"2804:ab0::/32", "52907"}, + {"2a00:8ee2::/40", "48635"}, + {"2001:559:c265::/48", "33662"}, + {"2408:8459:7c10::/42", "17623"}, + {"240a:a501::/32", "143931"}, + {"2607:f038:4005::/44", "21527"}, + {"2804:74c0::/32", "271001"}, + {"2a0c:ab07:2000::/36", "208861"}, + {"2a0c:f540::/29", "39238"}, + {"2001:67c:21e0::/48", "2116"}, + {"2600:1410:7001::/32", "20940"}, + {"2605:3c80:e7a::/40", "2773"}, + {"2a03:7204::/32", "197023"}, + {"2a0d:5600:10::/48", "50347"}, + {"240a:a0e5::/32", "142879"}, + {"2800:bf0:8271::/48", "27947"}, + {"2804:47fc::/32", "267090"}, + {"2a00:d02::/29", "41887"}, + {"2a12:6f40::/29", "210542"}, + {"2404:5680::/32", "136915"}, + {"240a:a5f1::/32", "144171"}, + {"2a10:4800::/29", "399975"}, + {"2a0b:41c0::/29", "30781"}, + {"2a0e:2e40::/29", "52193"}, + {"240e:974:e300::/37", "38283"}, + {"2a0d:f00::/29", "16186"}, + {"2001:559:87d6::/48", "33652"}, + {"2001:da8:300a::/45", "24358"}, + {"2401:fc00::/32", "55803"}, + {"2408:8956:6e00::/40", "17622"}, + {"2620:8f:4000::/48", "3424"}, + {"2804:5530::/32", "268695"}, + {"2a00:1158::/47", "8972"}, + {"2a02:c680::/31", "196983"}, + {"2001:559:c1c6::/48", "7016"}, + {"240e:438:8820::/43", "140647"}, + {"2804:5bfc::/32", "268881"}, + {"2a06:25c0::/32", "20473"}, + {"2001:550:3403::/45", "174"}, + {"2001:559:564::/48", "33491"}, + {"2620:10a:8054::/48", "55195"}, + {"2a01:bc60::/32", "1836"}, + {"2a12:49c7::/32", "211444"}, + {"2405:ba00:8810::/48", "63295"}, + {"2408:8459:8250::/37", "17816"}, + {"240e:44d:2800::/41", "140345"}, + {"240e:5e:4001::/46", "4134"}, + {"2804:380c::/32", "266452"}, + {"2a03:2880:f255::/44", "32934"}, + {"2a0f:103::/32", "1239"}, + {"2402:e200::/32", "17961"}, + {"2610:a1:300c::/48", "12008"}, + {"2804:63d8::/32", "269387"}, + {"2001:253:110::/48", "142076"}, + {"2001:bf7:170::/44", "206813"}, + {"2001:12f0:540::/38", "1916"}, + {"2400:5460::/46", "135177"}, + {"240e:982:e300::/40", "134763"}, + {"2602:107:2010::/48", "20115"}, + {"2804:24c0:f000::/36", "262290"}, + {"2001:678:7c::/48", "51955"}, + {"2803:9800:98c7::/44", "11664"}, + {"2a00:1288:ef6a::/48", "34010"}, + {"2a03:c040::/48", "199484"}, + {"2a04:2b00:212::/48", "42044"}, + {"2001:559:748::/48", "7015"}, + {"2404:a140:14::/47", "138915"}, + {"2404:c900:1::/45", "58682"}, + {"2409:804b:290d::/40", "24445"}, + {"2600:140f:2201::/39", "20940"}, + {"2605:a404:5cd::/38", "33363"}, + {"2804:3bac:5100::/32", "266164"}, + {"2a01:440:50b::/45", "29551"}, + {"2a05:a780::/29", "49353"}, + {"2001:559:82ab::/48", "33657"}, + {"240e:108:1081::/44", "4134"}, + {"2a02:ff0:3df3::/44", "12735"}, + {"2a02:26f7:c889::/46", "20940"}, + {"2803:5ce0:a00::/40", "10753"}, + {"2001:559:8741::/48", "7015"}, + {"2406:840:fefb::/48", "139231"}, + {"240e:44d:300::/42", "140345"}, + {"2607:1380::/32", "6576"}, + {"2804:1ac:5900::/32", "53175"}, + {"2804:38d8::/32", "266505"}, + {"2804:76b0::/32", "271128"}, + {"2a02:26f7:d581::/46", "20940"}, + {"2a04:5bc0:1::/46", "28695"}, + {"2a09:bac0:411::/46", "13335"}, + {"2408:8920::/32", "4837"}, + {"2a02:26f7:c685::/46", "20940"}, + {"2a02:f181:1000::/48", "174"}, + {"2a0c:efc0:4::/36", "206356"}, + {"2600:100d:b1f0::/36", "22394"}, + {"2806:370:7000::/44", "28403"}, + {"2a03:d600::/31", "12727"}, + {"2a04:5201:1::/48", "204154"}, + {"2401:d800:d5f0::/38", "7552"}, + {"2402:5840::/45", "137403"}, + {"2406:b400:1::/48", "18209"}, + {"2408:840c:1100::/40", "17621"}, + {"2408:8459:4010::/42", "17623"}, + {"2804:7580::/32", "271051"}, + {"2806:2f0:3221::/46", "17072"}, + {"2a04:1ac1:1::/46", "211960"}, + {"2a07:4400::/29", "24961"}, + {"2a0e:4380::/29", "208711"}, + {"2405:6e00:8f0::/44", "133612"}, + {"240e:982:e000::/40", "58466"}, + {"2620:cc:c000::/48", "394298"}, + {"2400:9380:8040::/48", "4134"}, + {"2401:d800:ef2::/39", "7552"}, + {"240a:a7d6::/32", "144656"}, + {"2a02:26f7:e644::/48", "36183"}, + {"2a0e:1b80:1003::/48", "54201"}, + {"2407:90c0::/32", "142433"}, + {"2604:3cc0:2010::/47", "396298"}, + {"2605:dd40:5276::/36", "398549"}, + {"2806:200::/32", "7438"}, + {"2a00:7f20::/32", "60791"}, + {"2a01:798::/29", "29695"}, + {"2a02:26f7:be88::/48", "36183"}, + {"2001:ee0:e300::/37", "45899"}, + {"2a0a:86c0:101::/29", "206163"}, + {"2001:559:8726::/48", "33657"}, + {"2001:660::/34", "2200"}, + {"2403:4e00:301::/46", "45528"}, + {"2806:230:6002::/48", "265594"}, + {"2409:8030:1010::/40", "9808"}, + {"240a:a9bc::/32", "145142"}, + {"2607:f281::/32", "46218"}, + {"2804:5cec::/32", "268939"}, + {"2001:250:586b::/48", "23910"}, + {"2001:559:c0e2::/48", "33489"}, + {"2001:4048:106::/47", "33922"}, + {"2402:8100:289e::/37", "55644"}, + {"2600:1406:3801::/38", "20940"}, + {"2607:fb10:5013::/45", "55095"}, + {"2607:fb10:5041::/46", "2906"}, + {"2803:6700:540::/48", "263210"}, + {"2404:5c0:2800::/48", "135106"}, + {"2620:0:50f0::/48", "3428"}, + {"2a02:26f7:ce81::/46", "20940"}, + {"2402:6940:500::/35", "7645"}, + {"240e:978:6100::/36", "4134"}, + {"2620:74:1e::/47", "16838"}, + {"2804:214:86a0::/39", "26615"}, + {"2804:46c8::/32", "267011"}, + {"2a00:e26::/32", "25048"}, + {"240e:967:2800::/37", "133776"}, + {"2600:380:be00::/33", "20057"}, + {"2600:8070::/28", "29992"}, + {"2606:2800:4a44::/46", "15133"}, + {"2800:bf0:82::/48", "27947"}, + {"240a:a0dd::/32", "142871"}, + {"2603:70bd::/32", "11351"}, + {"2620:44:a000::/48", "33302"}, + {"2001:559:8590::/48", "7725"}, + {"2404:6900:2012::/48", "394749"}, + {"240e:983:1001::/39", "4134"}, + {"2001:67c:11f8::/48", "204796"}, + {"2001:da8:6409::/36", "23910"}, + {"2402:800:9663::/43", "7552"}, + {"2600:3501:9000::/33", "396998"}, + {"2620:104:1000::/44", "20074"}, + {"2a03:47c0:1081::/34", "21277"}, + {"2a0d:7780::/29", "59441"}, + {"2001:330::/32", "6619"}, + {"2001:559:4c2::/48", "7015"}, + {"2001:978:201::/62", "174"}, + {"2001:2000:3100::/36", "1299"}, + {"2602:fd20::/36", "46980"}, + {"2620:38:a00::/48", "22695"}, + {"2001:559:95::/48", "7016"}, + {"2400:3f60:3::/48", "149056"}, + {"2402:800:9d47::/43", "7552"}, + {"2600:1417:e000::/48", "8966"}, + {"2804:17dc::/32", "263255"}, + {"2a02:26f7:c584::/48", "36183"}, + {"2a10:cc42:1fc3::/45", "20473"}, + {"2408:80f9:4000::/34", "4837"}, + {"2804:6bd8:2000::/32", "270429"}, + {"2a0c:5bc0::/29", "786"}, + {"2001:4268:2a1::/37", "15964"}, + {"2001:b400:f418::/45", "17421"}, + {"2402:800:5d0f::/43", "7552"}, + {"240a:a857::/32", "144785"}, + {"2a0d:f407:100::/44", "205148"}, + {"2401:d800:20b0::/41", "7552"}, + {"2409:896a:6700::/36", "9808"}, + {"2804:1040:7778::/32", "263626"}, + {"2804:5984:af00::/33", "268707"}, + {"2a06:7e80:4::/48", "12695"}, + {"2001:559:83c9::/48", "33651"}, + {"240e:63:b000::/33", "140315"}, + {"240e:3b4:c000::/37", "140315"}, + {"2804:65a0::/32", "269504"}, + {"2a02:26f7:b585::/46", "20940"}, + {"2a05:d050:60c0::/44", "16509"}, + {"2001:ee0:380::/41", "135905"}, + {"2401:d800:4d0::/42", "7552"}, + {"2806:230:2000::/48", "265594"}, + {"2001:9b0::/29", "8473"}, + {"2400:cb00:a1f0::/45", "13335"}, + {"2401:4900:1c20::/46", "24560"}, + {"2403:5840::/32", "136306"}, + {"2408:8956:2ac0::/39", "17816"}, + {"2408:8957:d100::/38", "17816"}, + {"240a:a484::/32", "143806"}, + {"2602:ffa7::/36", "46378"}, + {"2610:130:2302::/35", "6122"}, + {"2804:5534:e000::/37", "268696"}, + {"2a02:2578:1910::/38", "51375"}, + {"2001:480:560::/48", "22"}, + {"2001:559:c0a8::/48", "33651"}, + {"2401:4900:4c60::/44", "45609"}, + {"2402:800:34e0::/44", "7552"}, + {"2402:800:71e0::/38", "7552"}, + {"2605:a900:4808::/35", "46887"}, + {"2607:5b00::/32", "12260"}, + {"2801:80:1c10::/48", "52756"}, + {"2804:649c::/32", "61598"}, + {"2a0d:9880::/29", "41435"}, + {"2a03:8460:1::/48", "201222"}, + {"2a12:1d00:1492::/32", "210103"}, + {"2402:b400:40d0::/39", "45960"}, + {"240c::/48", "45275"}, + {"2804:c6c::/32", "52704"}, + {"2a02:26f7:f5cd::/42", "20940"}, + {"2001:410:2000::/47", "10965"}, + {"2001:978:2308::/46", "174"}, + {"2409:8924:3b00::/37", "56046"}, + {"2604:bc80:8000::/33", "29066"}, + {"2605:a40a::/32", "33363"}, + {"2a02:26f7:c3c5::/46", "20940"}, + {"2a0d:f700:400::/35", "207044"}, + {"2a0f:90c0::/29", "59597"}, + {"2001:559:81fc::/48", "7016"}, + {"2001:4310:f2::/32", "30983"}, + {"2802:3:10::/32", "18747"}, + {"2001:250:816::/48", "23910"}, + {"2400:1f00::/43", "45769"}, + {"2600:1010:fe10::/40", "22394"}, + {"2600:2000:2000::/42", "33517"}, + {"2806:2f0:7123::/41", "17072"}, + {"2a02:26f7:db04::/48", "36183"}, + {"2408:872b::/38", "4837"}, + {"2604:5400:8000::/37", "11776"}, + {"2605:3380:4180::/46", "12025"}, + {"240e:3b6:3e00::/33", "140308"}, + {"2600:b000::/28", "46595"}, + {"2804:4688::/32", "266995"}, + {"2a06:1c4::/32", "60571"}, + {"2001:250:6800::/47", "24368"}, + {"2001:4998:18::/48", "36088"}, + {"2403:9800:7f18::/46", "4771"}, + {"240e:41:4000::/37", "17897"}, + {"2a02:cb80:4138::/47", "43766"}, + {"2400:9380:85c0::/44", "136167"}, + {"2a00:1f90::/32", "9021"}, + {"2a00:f826:26::/31", "34549"}, + {"2a03:1b80::/44", "18705"}, + {"2604:c380::/32", "25853"}, + {"2804:2454::/32", "264215"}, + {"2a02:26f7:c700::/48", "36183"}, + {"2a0c:b641:90::/48", "210103"}, + {"2001:559:3d3::/45", "33652"}, + {"2001:df5:4880::/48", "141403"}, + {"2401:d800:7ed0::/42", "7552"}, + {"2408:8262::/29", "4837"}, + {"2409:8055:54::/48", "9808"}, + {"2605:9e80::/32", "6099"}, + {"2606:4300:1::/48", "3595"}, + {"2803:f520::/32", "266695"}, + {"2a02:27e8::/32", "51708"}, + {"2405:7b40::/48", "135994"}, + {"2408:8256:3b7c::/46", "17623"}, + {"2600:6c34:24c::/48", "33588"}, + {"2a00:f28:21::/35", "15802"}, + {"2a0d:f40::/32", "39080"}, + {"2401:d800:9662::/40", "7552"}, + {"2408:84f3:e840::/38", "17816"}, + {"2600:6c38:10a::/45", "20115"}, + {"2607:d500:302::/48", "54527"}, + {"2a08:600:ff::/48", "206747"}, + {"2403:7340::/32", "136308"}, + {"2602:fbff::/36", "400261"}, + {"2801:1fc:3a::/48", "27951"}, + {"2a02:26f7:bd0d::/46", "20940"}, + {"2a02:26f7:e809::/46", "20940"}, + {"2001:48c0::/46", "14589"}, + {"2404:e840::/32", "131949"}, + {"2602:fe19:11::/42", "26073"}, + {"2600:b400::/30", "18254"}, + {"2a0f:9400:6230::/47", "48741"}, + {"2001:648:2e80::/48", "8253"}, + {"2804:9ec:800::/32", "263002"}, + {"2405:f200::/32", "55406"}, + {"240a:a116::/32", "142928"}, + {"2804:7174::/32", "270790"}, + {"2a03:5a00:12::/48", "207079"}, + {"2a0b:fbc0::/32", "209985"}, + {"2a0c:2240::/48", "197988"}, + {"2001:559:7f5::/46", "7922"}, + {"2001:559:821c::/48", "7922"}, + {"2800:160:1e13::/42", "14259"}, + {"2a00:4802:350::/42", "13124"}, + {"2a02:fe0::/31", "41164"}, + {"2001:1248:a533::/44", "11172"}, + {"2404:ba00:fe00::/48", "17665"}, + {"240e:270::/28", "4134"}, + {"2804:4f30::/32", "268310"}, + {"2a00:1da0::/33", "29591"}, + {"2600:8807:93ca::/45", "22773"}, + {"2804:1308::/48", "263511"}, + {"2804:4870:1c1::/46", "267121"}, + {"2001:470:5a::/48", "13746"}, + {"2600:1009:f000::/44", "6167"}, + {"2600:6c20:a0c::/47", "20115"}, + {"2605:6c80:e::/47", "397373"}, + {"2001:1248:5b69::/43", "11172"}, + {"2401:8e00:3800::/32", "9260"}, + {"2607:ffd0:200::/37", "13767"}, + {"240a:a25e::/32", "143256"}, + {"2801:a0::/32", "28616"}, + {"2a02:28d8::/36", "15774"}, + {"2001:1388::/46", "6147"}, + {"2620:128:e082::/48", "22317"}, + {"2804:2e48::/32", "265336"}, + {"2c0f:f9f8::/32", "37424"}, + {"2602:fdce::/36", "397617"}, + {"2a06:a001:a0b0::/48", "210260"}, + {"2604:a180:5000::/36", "22933"}, + {"2604:e8c0::/48", "6233"}, + {"2001:468:1202::/48", "20130"}, + {"2001:67c:227c::/48", "3320"}, + {"2403:3800:1230::/40", "4007"}, + {"2409:8702::/32", "38019"}, + {"2800:bf0:300b::/43", "27947"}, + {"2804:7518::/32", "271023"}, + {"2a02:2090::/47", "48287"}, + {"2001:250:c007::/34", "23910"}, + {"2001:559:8404::/48", "20214"}, + {"2001:678:e44::/48", "61232"}, + {"2408:84f3:f640::/44", "17623"}, + {"240a:afa1::/32", "146651"}, + {"240e:12:9800::/33", "4134"}, + {"2600:6c7f:90e2::/48", "20115"}, + {"2607:ff90::/32", "32880"}, + {"2a01:a800::/29", "16086"}, + {"2a01:ce9c::/32", "51964"}, + {"2001:550:f01::/35", "174"}, + {"2804:8450::/32", "272253"}, + {"2a0c:2f07:384::/48", "206924"}, + {"2408:8957:3900::/40", "17816"}, + {"2a07:a080::/29", "51399"}, + {"2001:559:8790::/48", "7922"}, + {"2403:9f40::/32", "138074"}, + {"2606:6c40::/32", "25780"}, + {"2a01:bbc0::/32", "199673"}, + {"2a07:e03:200::/32", "210083"}, + {"2001:559:74e::/47", "7922"}, + {"2403:3600::/32", "9336"}, + {"240a:ac42::/32", "145788"}, + {"2606:a300::/46", "35847"}, + {"240a:aa8e::/32", "145352"}, + {"2607:f030::/32", "6536"}, + {"2a00:f46:10::/36", "21395"}, + {"2a01:8840:f9::/48", "207266"}, + {"2a02:26f7:7e::/48", "36183"}, + {"2408:8456:c000::/42", "17622"}, + {"240a:a832::/32", "144748"}, + {"2a02:26f7:e3c4::/48", "36183"}, + {"2001:678:a38::/48", "209220"}, + {"2a02:26f7:c890::/48", "36183"}, + {"2a0f:3340::/29", "328131"}, + {"2001:c20:4806::/41", "3758"}, + {"2001:ee0:e700::/36", "45899"}, + {"2408:8459:9e30::/41", "17622"}, + {"240a:a1e3::/32", "143133"}, + {"2600:3408:700::/29", "4181"}, + {"2a00:1e6a::/41", "49373"}, + {"2a00:cd00::/32", "39101"}, + {"2402:e5c0::/32", "134916"}, + {"2404:7ac0:660::/44", "4842"}, + {"240a:a13b::/32", "142965"}, + {"240e:3b7::/35", "134773"}, + {"2409:8924:7f00::/32", "56046"}, + {"2409:8c44:3::/37", "24445"}, + {"2a04:5880::/29", "34759"}, + {"2a10:7700:f216::/29", "399975"}, + {"2a11:3b40::/32", "210723"}, + {"2001:559:d1::/48", "33287"}, + {"2001:559:86eb::/48", "7015"}, + {"2001:44b8:40d8::/35", "4739"}, + {"2602:fe90:805::/46", "35913"}, + {"2604:ee00:3::/48", "18865"}, + {"2804:35d8::/32", "266310"}, + {"2a02:26f7:bf81::/46", "20940"}, + {"2001:978:3c0c::/33", "174"}, + {"2001:49f0:d089::/43", "174"}, + {"240a:a155::/32", "142991"}, + {"240a:a210::/32", "143178"}, + {"2620:6e:6000::/48", "11078"}, + {"2a02:2e02:9720::/36", "12479"}, + {"2001:1250:fe00::/48", "22894"}, + {"2605:dd00::/32", "231"}, + {"2804:26b8::/48", "263852"}, + {"2403:9800:b013::/45", "4648"}, + {"2803:cfa0::/32", "27847"}, + {"2404:7e80:1000::/36", "132717"}, + {"2600:140f:f001::/38", "20940"}, + {"2806:2f0:93c3::/42", "17072"}, + {"2a0e:97c3:7b3::/48", "20473"}, + {"2a10:7bc0:0:2::/48", "60905"}, + {"2001:559:72e::/48", "7015"}, + {"2001:559:8121::/48", "7922"}, + {"2603:c001:3410::/42", "31898"}, + {"2800:160:1650::/45", "14259"}, + {"2803:200::/32", "52284"}, + {"2a02:c38::/32", "30764"}, + {"2a0f:5707:aa20::/46", "207622"}, + {"2c0f:f118::/47", "328201"}, + {"2001:dcd:9::/48", "38796"}, + {"2001:df0:216::/48", "56110"}, + {"2406:2400:c0::/48", "45287"}, + {"2406:bd00:de50::/48", "55651"}, + {"2407:c080:4000::/37", "55990"}, + {"2804:1468::/32", "263328"}, + {"2804:2988::/32", "264020"}, + {"2a00:cb8:41::/48", "15695"}, + {"2a02:26f7:e088::/48", "36183"}, + {"2402:3a80:20::/46", "38266"}, + {"2407:4700::/32", "3462"}, + {"2408:840c:3400::/40", "17621"}, + {"2409:802e:2903::/48", "56041"}, + {"2600:1002:9000::/44", "6167"}, + {"2605:e380::/32", "7954"}, + {"2804:7ad0::/32", "271393"}, + {"2a02:348:9d::/42", "35470"}, + {"2a02:700::/32", "35826"}, + {"2600:6c39:63a::/45", "20115"}, + {"2604:6400:4670::/32", "29974"}, + {"2606:1a40:f013::/36", "398962"}, + {"2001:da8:e822::/48", "24368"}, + {"240a:abb6::/32", "145648"}, + {"2600:803:619::/42", "701"}, + {"2600:1003:9010::/40", "22394"}, + {"2607:f248::/32", "12009"}, + {"2804:204:32c::/47", "28186"}, + {"2a02:9d8::/32", "6672"}, + {"2a02:26f7:cdc4::/48", "36183"}, + {"2001:559:83f5::/48", "22909"}, + {"2402:800:fae0::/39", "7552"}, + {"2409:8d14:900::/35", "56044"}, + {"2605:ad80:ffed::/43", "62887"}, + {"2804:8034::/32", "271736"}, + {"2001:559:c2a1::/48", "7922"}, + {"2401:d800:5dd0::/42", "7552"}, + {"2600:1404:7400::/48", "35994"}, + {"2602:fda4::/36", "27228"}, + {"2602:ff1e::/36", "395688"}, + {"2a02:e100::/29", "8426"}, + {"2001:559:544::/48", "33657"}, + {"240a:aa1b::/32", "145237"}, + {"2600:6c38:26::/44", "20115"}, + {"2806:217:302::/37", "28394"}, + {"2a02:26f7:cb44::/48", "36183"}, + {"2a0a:cc40::/29", "44241"}, + {"2001:250:5061::/46", "24361"}, + {"240a:ac73::/32", "145837"}, + {"2604:e740::/32", "32281"}, + {"2a00:4e60::/32", "13306"}, + {"2a06:9a80::/29", "60241"}, + {"2a0f:9400:7004::/47", "211144"}, + {"2001:250:206::/48", "23910"}, + {"2408:8456:a010::/42", "134543"}, + {"2409:8752:500::/38", "56047"}, + {"240a:aabe::/32", "145400"}, + {"2600:6c38:f49::/42", "20115"}, + {"2604:a180::/35", "11139"}, + {"2606:4700:5d::/40", "13335"}, + {"2607:f6d0::/32", "32"}, + {"2800:bf0:8168::/48", "52257"}, + {"240e:44d:280::/41", "4134"}, + {"2600:e008::/40", "22995"}, + {"2804:37f0:7100::/36", "266445"}, + {"2a0d:c7c7::/32", "205610"}, + {"2001:559:863e::/48", "7922"}, + {"2001:559:c0ea::/48", "7015"}, + {"2001:13c7:6008::/48", "52324"}, + {"2409:896a:8c00::/39", "9808"}, + {"2607:5e00::/32", "40191"}, + {"2804:2488:6000::/32", "264228"}, + {"2a02:26f7:c545::/46", "20940"}, + {"2a02:26f7:d4c1::/46", "20940"}, + {"2a04:df80::/29", "201962"}, + {"2001:559:85e3::/48", "22909"}, + {"2001:67c:2568::/48", "16375"}, + {"2406:3ac0::/40", "135391"}, + {"2409:8914:1500::/38", "56044"}, + {"240a:a4fb::/32", "143925"}, + {"2804:b5c::/32", "52768"}, + {"2c0f:f6d8:4012::/47", "3573"}, + {"2404:efc0:235::/46", "10122"}, + {"2406:6dc0::/32", "141155"}, + {"2409:8f1a::/29", "9808"}, + {"2804:6334:8000::/33", "269345"}, + {"2a02:88d:800f::/48", "47794"}, + {"2001:559:c08e::/48", "7016"}, + {"2404:3d00:40fc::/39", "3573"}, + {"2804:538::/32", "53111"}, + {"2a02:b30::/32", "20886"}, + {"240e:67d:e200::/39", "140329"}, + {"2804:4340::/32", "267558"}, + {"2a01:b740:a23::/48", "714"}, + {"2a02:2698:3c00::/38", "50498"}, + {"2a05:d050:8010::/42", "16509"}, + {"2600:1017:a410::/38", "6167"}, + {"2804:4b68::/32", "267304"}, + {"2a00:4180:1::/46", "56665"}, + {"2a0e:b107:ac0::/48", "204307"}, + {"2406:9e00:10::/44", "55352"}, + {"2409:8055:30::/48", "9808"}, + {"2a0b:6240::/29", "197637"}, + {"2001:559:c2c8::/48", "33491"}, + {"2406:e00:1::/48", "134540"}, + {"2a01:b740:a09::/48", "714"}, + {"2a02:ff0:1800::/40", "12735"}, + {"2a02:25e0:f00::/40", "41691"}, + {"2a04:4e40:e200::/48", "54113"}, + {"2a0c:c80::/29", "200000"}, + {"2a10:4340::/29", "59441"}, + {"2001:559:83e3::/48", "33652"}, + {"2a11:f00::/29", "50178"}, + {"2001:559:8054::/47", "7922"}, + {"240a:aedc::/32", "146454"}, + {"2620:103:e001::/46", "13893"}, + {"2804:8338::/32", "272184"}, + {"2a06:1e82::/47", "207480"}, + {"2001:559:e7::/48", "7922"}, + {"2402:9880:100::/37", "58744"}, + {"2606:1780::/32", "40676"}, + {"2804:83bc::/32", "272216"}, + {"2001:559:c4d6::/48", "33659"}, + {"240a:a4f9::/32", "143923"}, + {"240e:3b7:7800::/39", "4134"}, + {"2607:3c00:6404::/47", "26380"}, + {"2620:127:d011::/46", "394941"}, + {"2a01:8840:a::/48", "207266"}, + {"2a01:c50f:bf80::/33", "12479"}, + {"2a0a:b40::/29", "208861"}, + {"2a0a:e5c0:1::/48", "213081"}, + {"2001:559:8133::/48", "7922"}, + {"240a:a175::/32", "143023"}, + {"2610:f0:389::/37", "22925"}, + {"2a03:db80:2c10::/48", "47610"}, + {"2001:dce:8801::/35", "23869"}, + {"2600:1404:ac01::/38", "20940"}, + {"2a02:26f7:f785::/46", "20940"}, + {"2a0c:b641:45b::/48", "210335"}, + {"2c0f:f720::/32", "327767"}, + {"2001:559:8110::/48", "33659"}, + {"2803:5700::/33", "28024"}, + {"2a06:900::/35", "34373"}, + {"2001:678:34::/48", "48283"}, + {"2001:4290::/32", "23889"}, + {"2406:8800:902b::/43", "17465"}, + {"2803:440::/32", "263774"}, + {"2001:1388:2482::/44", "6147"}, + {"240a:aca3::/32", "145885"}, + {"240e:44d:5b00::/41", "140345"}, + {"2a00:8740::/47", "49037"}, + {"2404:bf40:f282::/36", "139084"}, + {"240a:a75b::/32", "144533"}, + {"2803:e600:3::/48", "65500"}, + {"2804:146c::/32", "263329"}, + {"240a:a404::/32", "143678"}, + {"2804:2e1c:e501::/46", "265324"}, + {"2a03:7320::/48", "62222"}, + {"2a0b:f4c2::/40", "208294"}, + {"2001:559:5a0::/48", "33491"}, + {"2405:7f00:3205::/41", "133414"}, + {"2604:b180:200::/44", "15198"}, + {"2620:43:a000::/48", "395030"}, + {"2806:20d:520e::/43", "32098"}, + {"2a00:ccc3::/32", "60461"}, + {"2a02:26f7:d3c0::/48", "36183"}, + {"2a02:6a00::/32", "25276"}, + {"2001:678:720::/48", "25443"}, + {"2001:c38:500a::/48", "20940"}, + {"240a:a02a::/32", "142692"}, + {"240a:ac74::/32", "145838"}, + {"2620:a8:6000::/48", "54307"}, + {"2804:18:4830::/41", "26599"}, + {"2001:559:c4ec::/47", "7922"}, + {"2406:1000::/32", "4711"}, + {"2600:370f:7288::/45", "32261"}, + {"2602:fc97:10::/44", "399544"}, + {"2a07:e8c0::/32", "212926"}, + {"2400:1c00:b::/45", "45143"}, + {"2406:da14::/36", "16509"}, + {"2600:1000:a000::/43", "6167"}, + {"2a00:1d58:f821::/48", "47524"}, + {"2a02:5f40::/32", "199244"}, + {"2a0b:4340:22::/48", "205651"}, + {"2607:e680::/32", "40355"}, + {"2407:1580:1100::/36", "33438"}, + {"2803:6700:226::/48", "263210"}, + {"2804:4c0:fffd::/46", "3549"}, + {"2a0c:9a40:801b::/45", "207965"}, + {"2406:c300::/32", "137253"}, + {"2804:1b94::/37", "52974"}, + {"2a03:5840:10b::/32", "35661"}, + {"2a0e:b107:1d7::/48", "139328"}, + {"2409:8904:69b0::/35", "24547"}, + {"2600:1015:f010::/39", "6167"}, + {"2607:f4d0::/36", "17054"}, + {"2610:a1:2000::/44", "19905"}, + {"2a01:8b00::/32", "3303"}, + {"2a0b:33c0:50::/47", "57395"}, + {"2001:559:58::/48", "7922"}, + {"2001:559:4f2::/48", "33287"}, + {"2001:fd8:381::/43", "4775"}, + {"2600:c0e:3011::/32", "13789"}, + {"2620:a3:400a::/48", "22773"}, + {"2a0b:84c0::/29", "205582"}, + {"2a0d:12c0::/48", "205804"}, + {"2409:8959:34::/41", "9808"}, + {"2804:5654::/32", "267991"}, + {"2a02:26f7:c8d4::/48", "36183"}, + {"2a0e:7780::/29", "208846"}, + {"2604:6280::/32", "53755"}, + {"2606:2800:6002::/45", "15133"}, + {"2804:7d54::/32", "271554"}, + {"2806:20d:1620::/44", "32098"}, + {"2a05:ab40::/29", "25180"}, + {"2a0e:b780::/31", "205581"}, + {"2800:bf0:8278::/48", "52257"}, + {"2804:14f8::/34", "263362"}, + {"2a02:26f7:c6c4::/47", "36183"}, + {"2a0b:2740::/48", "205755"}, + {"2401:d800:df60::/40", "7552"}, + {"2402:7840::/32", "206264"}, + {"240e:44d:6180::/41", "4134"}, + {"2602:feda:180::/48", "35251"}, + {"2604:4000::/48", "15348"}, + {"2605:a401:82d2::/44", "33363"}, + {"2804:1408:9100::/34", "28635"}, + {"2804:7888::/32", "271249"}, + {"2a02:2e02:2e40::/42", "12479"}, + {"2a02:e980:15c::/48", "19551"}, + {"2a05:7640:20d0::/44", "174"}, + {"2001:559:82df::/48", "33491"}, + {"240e:3b3:ec00::/35", "140314"}, + {"2405:7f00:3251::/42", "133414"}, + {"2a03:5a00:2e::/48", "51011"}, + {"2a04:4e40:f610::/44", "54113"}, + {"2a0e:b107:1180::/48", "211509"}, + {"2001:250:583a::/48", "23910"}, + {"2001:13c7:6f00::/44", "27814"}, + {"2408:8957:1f40::/40", "17816"}, + {"2a00:4800:220::/44", "13124"}, + {"2001:678:198::/48", "61180"}, + {"2001:df4:3200::/48", "132476"}, + {"2001:df5:b00::/48", "136334"}, + {"2409:8087:6a63::/44", "9808"}, + {"240e:bf:b8dc::/46", "140238"}, + {"240e:438:9020::/43", "140647"}, + {"2801:80:3950::/48", "270681"}, + {"2804:55e8::/32", "267964"}, + {"2a02:26f7:e781::/46", "20940"}, + {"2a11:8600::/29", "51009"}, + {"240e:3b1:c800::/37", "4134"}, + {"2600:6000:f570::/48", "11351"}, + {"2800:680:12::/32", "3816"}, + {"2803:15c0::/33", "269822"}, + {"2001:559:828b::/48", "33657"}, + {"2001:559:862e::/48", "33659"}, + {"2001:67c:1b10::/48", "41681"}, + {"2405:1c0:6641::/46", "55303"}, + {"2604:d600:91b::/45", "32098"}, + {"2607:fa48:110::/40", "5769"}, + {"2a02:26e0::/32", "35401"}, + {"2a04:5b80:200::/48", "202265"}, + {"2001:579:b884::/41", "22773"}, + {"2001:df0:5fc0::/48", "149479"}, + {"2001:4878:b141::/48", "12222"}, + {"240a:ab99::/32", "145619"}, + {"2620:133:c000::/44", "22992"}, + {"2801:80:250::/48", "262512"}, + {"2804:42bc:320::/32", "267522"}, + {"2a0e:bbc0:8002::/45", "22604"}, + {"2405:8a00:a032::/41", "55824"}, + {"2406:840:f440::/47", "137835"}, + {"2406:1400:8386::/47", "24342"}, + {"2409:8003:2b00::/40", "38019"}, + {"240e:100:70::/31", "4134"}, + {"2606:2e80::/32", "63125"}, + {"2800:160:1b68::/47", "14259"}, + {"2a01:5040:41::/35", "43996"}, + {"2a02:ff0:1600::/40", "12735"}, + {"2a02:26f0:2001::/39", "20940"}, + {"2001:559:86a7::/48", "33667"}, + {"240a:a635::/32", "144239"}, + {"2606:5240::/32", "6649"}, + {"2607:ff70::/32", "62"}, + {"2610:a1:1075::/46", "397228"}, + {"2a06:6540:4101::/48", "8220"}, + {"2408:8446::/28", "4837"}, + {"2602:80a:2002::/48", "16509"}, + {"2804:a6c::/33", "262282"}, + {"2806:2f0:5101::/46", "17072"}, + {"2402:e7c0::/41", "59078"}, + {"2600:1010:a000::/43", "6167"}, + {"2604:1280:9::/46", "11696"}, + {"2620:1ec:bdf::/48", "8068"}, + {"2a00:ec80::/32", "15557"}, + {"2a02:c50:db9::/32", "51531"}, + {"2a02:26f7:f2cc::/48", "36183"}, + {"2402:800:312b::/41", "7552"}, + {"2407:7000:f301::/36", "9500"}, + {"240a:a596::/32", "144080"}, + {"2804:aa8:900::/32", "52903"}, + {"2a02:26f7:f948::/48", "36183"}, + {"2001:fd0:401::/45", "10029"}, + {"2401:d800:76a0::/41", "7552"}, + {"2402:4280::/32", "135895"}, + {"240a:a127::/32", "142945"}, + {"2600:1405:9::/36", "20940"}, + {"2602:fe65::/46", "396872"}, + {"2604:f980:4240::/44", "19957"}, + {"2803:6900:1510::/48", "52423"}, + {"2806:230:2015::/48", "11888"}, + {"2a02:26f7:c188::/48", "36183"}, + {"2a02:26f7:ed01::/46", "20940"}, + {"2a04:5202::/29", "50113"}, + {"2804:10dc::/32", "263652"}, + {"2a07:3500:1b30::/48", "1136"}, + {"2a07:9a00::/29", "202605"}, + {"2804:5d3c::/32", "268959"}, + {"2001:67c:2204::/53", "24708"}, + {"2405:cf80::/32", "133602"}, + {"2407:36c0::/32", "135247"}, + {"240a:ae26::/32", "146272"}, + {"2606:6680:1001::/48", "40676"}, + {"2a01:5042:2001::/48", "202196"}, + {"2a02:26f7:d14a::/47", "20940"}, + {"2a03:db80:2c11::/46", "680"}, + {"2a07:7c80::/29", "61251"}, + {"2a11:a380::/29", "8511"}, + {"2409:896a:5a00::/37", "9808"}, + {"240e:3bc:4c00::/35", "136200"}, + {"240e:980:2c00::/48", "4816"}, + {"2602:feb7::/48", "16827"}, + {"2804:7510::/33", "271021"}, + {"2804:8174::/32", "272455"}, + {"2a00:7a40::/32", "51945"}, + {"2001:559:738::/48", "33491"}, + {"2402:800:5d9b::/41", "7552"}, + {"2409:8915:3200::/39", "56044"}, + {"240b:4003:fd95::/46", "45102"}, + {"240d:c010:8d::/48", "139341"}, + {"2803:ad80:aa1::/48", "42388"}, + {"2804:3e8c::/32", "266605"}, + {"240a:aadb::/32", "145429"}, + {"2804:8494::/32", "272269"}, + {"2a03:a140::/32", "200185"}, + {"2a0b:3240::/32", "24971"}, + {"2600:3000:2711::/35", "13649"}, + {"2a02:26f7:f304::/48", "36183"}, + {"2a03:3f40:2::/48", "58061"}, + {"2a0f:97c0::/29", "41817"}, + {"2407:1300::/32", "132850"}, + {"2408:8459:e650::/36", "17816"}, + {"2804:4418::/32", "267602"}, + {"2806:230:100a::/48", "265594"}, + {"2a00:82c0::/32", "198433"}, + {"2001:310:9001::/33", "4694"}, + {"2001:690::/32", "1930"}, + {"2a07:f240::/29", "212144"}, + {"2001:678:f18::/48", "211586"}, + {"2620:112:e000::/44", "26679"}, + {"2001:559:28f::/48", "33659"}, + {"240e:967:f400::/39", "58772"}, + {"2001:559:c4e1::/46", "7922"}, + {"2406:daa0:90c0::/44", "16509"}, + {"240e:679:8c00::/33", "4134"}, + {"2620:10a:801d::/48", "55195"}, + {"2a06:6380::/29", "201453"}, + {"2a0b:2ac0::/29", "41366"}, + {"2a0e:2240:2::/48", "60781"}, + {"2606:3d40:5::/44", "400097"}, + {"2804:3094::/32", "264962"}, + {"2806:2f0:8141::/46", "17072"}, + {"2a03:f80:56::/48", "28099"}, + {"2a05:9100::/29", "41993"}, + {"2001:559:8259::/48", "7016"}, + {"2402:dfc0:50::/44", "4808"}, + {"2a02:26f7:e681::/46", "20940"}, + {"2a11:b200::/29", "204790"}, + {"2400:cb00:569::/48", "13335"}, + {"2405:8180:d00::/38", "135478"}, + {"240a:ac60::/32", "145818"}, + {"2600:1002:f100::/44", "6167"}, + {"2a02:26f7:d1c8::/48", "36183"}, + {"2600:100a:a110::/36", "22394"}, + {"2604:d40::/32", "577"}, + {"2001:559:c08d::/48", "13367"}, + {"2001:fb0:1010::/44", "7470"}, + {"2408:8456:b610::/42", "134543"}, + {"240a:af0a::/32", "146500"}, + {"2c0f:f7d0::/32", "15964"}, + {"2401:f000:8::/48", "23838"}, + {"2402:800:9eee::/43", "7552"}, + {"2409:8914:b400::/39", "56044"}, + {"2800:88::/44", "26210"}, + {"2a00:79e0:505::/32", "45566"}, + {"2a02:ee80:2040::/33", "3573"}, + {"2a06:ab00::/32", "60781"}, + {"2602:fed2:718e::/48", "53356"}, + {"2a02:a300::/27", "6830"}, + {"2a03:4900:fffb::/45", "197695"}, + {"2001:4c98::/32", "35062"}, + {"2406:daa0:c080::/44", "16509"}, + {"2a01:c50e:e200::/37", "12479"}, + {"2a11:e480::/32", "60674"}, + {"2001:3c8:c301::/48", "55545"}, + {"2001:559:86f2::/48", "33651"}, + {"2404:3d00:40c6::/47", "3573"}, + {"2600:1415:a001::/35", "20940"}, + {"2a00:b060::/32", "197690"}, + {"2a02:26f7:c481::/46", "20940"}, + {"2a10:8000::/31", "8551"}, + {"2001:559:8701::/48", "33652"}, + {"2001:67c:2794::/48", "57967"}, + {"240a:a62c::/32", "144230"}, + {"2800:160:14f4::/44", "14259"}, + {"2001:490:4a00::/46", "1248"}, + {"2001:dd8::/48", "24390"}, + {"2804:2cd4:d0::/32", "265246"}, + {"2804:68b0::/32", "269709"}, + {"2600:9000:2269::/48", "16509"}, + {"2604:6940::/40", "11006"}, + {"2605:91c0::/32", "397723"}, + {"2a03:720::/45", "57073"}, + {"2001:4c08:2027::/44", "3356"}, + {"2402:800:58d3::/44", "7552"}, + {"2600:cc01::/32", "32298"}, + {"2602:feda:102::/48", "396303"}, + {"2804:204:237::/44", "28186"}, + {"2a02:2e02:9430::/41", "12479"}, + {"2a0f:ca00:8000::/48", "42209"}, + {"2001:559:27e::/47", "33651"}, + {"2001:67c:300::/48", "39387"}, + {"2001:67c:1254::/48", "4455"}, + {"2001:67c:2974::/48", "39128"}, + {"2405:8d40:a07::/48", "139831"}, + {"240a:a760::/32", "144538"}, + {"2600:400:1810::/34", "15147"}, + {"2620:0:2e61::/48", "29997"}, + {"2620:57:4004::/40", "62831"}, + {"2800:160:1589::/45", "14259"}, + {"2800:3a0:7::/39", "23201"}, + {"2001:559:1c8::/48", "7725"}, + {"2001:559:8061::/48", "33657"}, + {"240a:a628::/32", "144226"}, + {"2804:22a0:d0::/38", "264112"}, + {"2a0f:cc87:9000::/33", "208861"}, + {"2600:100c::/32", "22394"}, + {"2604:8600:3000::/33", "14453"}, + {"2605:2540::/32", "397324"}, + {"2806:230:602d::/48", "11888"}, + {"2001:559:24f::/48", "33651"}, + {"240e:244:200::/40", "136195"}, + {"2607:f8f8:800::/35", "23033"}, + {"2a0b:a040::/29", "204790"}, + {"240e:250:2906::/48", "134419"}, + {"2803:1320::/32", "27843"}, + {"2402:8100:207d::/46", "45271"}, + {"2407:be40::/32", "135717"}, + {"240e:438:a020::/43", "140647"}, + {"240e:60c:fc00::/27", "4134"}, + {"2001:67c:197c::/48", "199852"}, + {"2408:8456:1840::/40", "17816"}, + {"2408:8456:3a50::/39", "17816"}, + {"2804:3214::/32", "265054"}, + {"2a01:8c40::/32", "8301"}, + {"2a04:8c00::/29", "44772"}, + {"2401:d800:5452::/40", "7552"}, + {"2408:8001:3000::/44", "17816"}, + {"2409:807e:2100::/36", "9808"}, + {"240e:62::/34", "140308"}, + {"2606:6c00:8000::/48", "32787"}, + {"2a0b:59c2::/29", "16082"}, + {"2001:7fb:ff0a::/45", "12654"}, + {"2001:c20:48b7::/44", "9255"}, + {"2409:8904:33a0::/37", "24547"}, + {"2a02:2260::/32", "49435"}, + {"2a02:26f0:67::/44", "21342"}, + {"2a02:26f7:cc84::/48", "36183"}, + {"2001:1998:380::/37", "7843"}, + {"2402:c800:f0::/32", "38639"}, + {"2408:8956:5d00::/40", "17816"}, + {"2804:1eec::/32", "264455"}, + {"2402:3300:6000::/48", "56300"}, + {"2600:3503:c000::/29", "396998"}, + {"2401:d800:20e0::/39", "7552"}, + {"2620:d1:4000::/47", "36324"}, + {"2401:13c0:8000::/36", "132652"}, + {"2404:3d00:4141::/48", "21433"}, + {"2600:140f:a401::/38", "20940"}, + {"2602:feda:e30::/47", "147028"}, + {"2605:a401:85cf::/38", "33363"}, + {"2a06:e040:6a00::/35", "198507"}, + {"2a10:df80::/29", "60274"}, + {"2001:1380::/37", "19180"}, + {"2001:4b27:ffff::a/123", "34288"}, + {"2408:8456:ca00::/42", "17622"}, + {"240a:a89e::/32", "144856"}, + {"2600:1005:a000::/43", "6167"}, + {"2600:1015:f110::/30", "6167"}, + {"2604:ed40::/32", "25697"}, + {"2804:7364::/32", "270912"}, + {"2a01:28::/32", "39392"}, + {"2001:559:43d::/48", "7016"}, + {"2402:e380:31d::/48", "141781"}, + {"2603:fc50::/24", "397165"}, + {"2607:fdf0:5e84::/47", "8008"}, + {"2804:1efc:f000::/36", "264458"}, + {"2804:21f0::/32", "263554"}, + {"2001:250:5833::/48", "138371"}, + {"2001:ee0:2f20::/35", "45899"}, + {"2001:4528:9700::/33", "18101"}, + {"2406:7e40::/32", "141190"}, + {"2801:8c::/32", "262857"}, + {"240e:351:6400::/30", "4134"}, + {"2607:f208:305::/48", "26496"}, + {"2620:11f:1001::/48", "397794"}, + {"2804:7278::/32", "270854"}, + {"2806:230:100f::/48", "11888"}, + {"2a0f:c840::/29", "212238"}, + {"2001:1900:224d::/48", "393819"}, + {"2402:800:359b::/41", "7552"}, + {"240e:946::/47", "58540"}, + {"2600:cc01:e000::/40", "62833"}, + {"2a02:4060::/29", "202008"}, + {"240a:ae71::/32", "146347"}, + {"2804:3c44::/32", "266200"}, + {"2800:4d0:248a::/45", "7004"}, + {"2804:67cc::/33", "269651"}, + {"2001:550:906::/48", "54412"}, + {"2001:fd8:b1b0::/44", "4775"}, + {"2405:d800:112::/32", "24247"}, + {"2407:f800:401::/39", "38182"}, + {"2600:6c38:89e::/42", "20115"}, + {"2806:2f0:32e1::/46", "17072"}, + {"2001:1348::/32", "27750"}, + {"2605:ce80:702::/32", "393713"}, + {"2606:3f80::/32", "394102"}, + {"2a02:26f0:1601::/39", "20940"}, + {"2a02:26f7:c908::/48", "36183"}, + {"2804:2658::/37", "264328"}, + {"2a01:b740:1001::/39", "714"}, + {"2a02:ee80:413f::/48", "3573"}, + {"2a0b:b300::/29", "206841"}, + {"2a0e:b107:458::/42", "57883"}, + {"2409:8087:300::/40", "9808"}, + {"2600:1400:c001::/34", "20940"}, + {"2600:1402:16::/48", "20940"}, + {"2804:14d:5600::/40", "28573"}, + {"2402:5a00::/32", "18077"}, + {"240a:a4ca::/32", "143876"}, + {"2600:3501:d000::/34", "396998"}, + {"2620:91::/48", "6124"}, + {"240a:a9e9::/32", "145187"}, + {"2001:408:20::/32", "14793"}, + {"240a:acb2::/32", "145900"}, + {"2604:f400:2800::/37", "19406"}, + {"2605:a00::/32", "26744"}, + {"2605:30c0:f11::/46", "29736"}, + {"2a02:6c20:6::/48", "207167"}, + {"2c0f:4a00::/32", "328818"}, + {"2001:67c:41c::/48", "28847"}, + {"2001:878::/30", "1835"}, + {"2403:1cc0:5201::/48", "45352"}, + {"240a:ac27::/32", "145761"}, + {"2804:351c::/35", "266269"}, + {"2804:7fa8::/32", "271701"}, + {"2a01:5800::/32", "39608"}, + {"2a03:7380:3c0::/37", "13188"}, + {"2001:67c:2200::/48", "50620"}, + {"2001:da8:ae::/48", "24351"}, + {"2409:8002:100::/37", "9808"}, + {"240a:adf1::/32", "146219"}, + {"2620:ba:c000::/48", "6971"}, + {"2804:1e38:1001::/36", "264415"}, + {"2804:27bc::/32", "263919"}, + {"2804:6e1c::/32", "270576"}, + {"2a00:1188:10::/48", "47543"}, + {"2a0b:6b86:b13::/45", "206699"}, + {"2001:559:140::/48", "20214"}, + {"2402:1180::/32", "134076"}, + {"2409:8055:69::/34", "56040"}, + {"2620:144:a00::/32", "53692"}, + {"2804:2484:8005::/40", "28258"}, + {"2001:67c:24e4::/48", "57381"}, + {"240a:a72d::/32", "144487"}, + {"240a:ae8f::/32", "146377"}, + {"2804:38dc::/32", "266506"}, + {"2806:230:2059::/36", "11888"}, + {"2a0d:a0c0::/48", "198426"}, + {"2001:250:7003::/48", "23910"}, + {"2001:550:2210::/48", "397601"}, + {"2001:559:351::/48", "7922"}, + {"2001:4dc0::/32", "12703"}, + {"2408:8957:eb00::/40", "17816"}, + {"240a:ac11::/32", "145739"}, + {"2602:fc41::/40", "20278"}, + {"2607:6003:2309::/48", "46385"}, + {"2607:6b80:4a::/43", "13213"}, + {"2001:1230::/39", "13579"}, + {"2603:4:1604::/48", "44273"}, + {"2804:204:224::/44", "28186"}, + {"2a0b:bb41::/32", "12570"}, + {"2a0e:2b00::/30", "1239"}, + {"2c0f:f4a0::/32", "31856"}, + {"2001:559:83b3::/45", "33287"}, + {"2001:1218:600e::/42", "278"}, + {"2606:2800:4a87::/48", "14210"}, + {"2a01:608::/32", "5577"}, + {"2a01:6500:4::/32", "42925"}, + {"2001:480:37::/41", "668"}, + {"2409:8057:301a::/48", "9808"}, + {"2600:6c10:411::/46", "20115"}, + {"2804:570c::/32", "268040"}, + {"2a0b:ab00::/29", "208861"}, + {"2620:9f:12::/48", "3356"}, + {"2804:3e60::/39", "266592"}, + {"2a00:8a84:a010::/30", "29119"}, + {"2400:8b00:600::/42", "45727"}, + {"2605:6500::/48", "26512"}, + {"2001:454f::/27", "9924"}, + {"2001:4978:1005::/40", "19255"}, + {"2400:7400:e02f::/43", "23736"}, + {"2600:1402:f::/43", "20940"}, + {"2620:113:80c4::/42", "3680"}, + {"2a03:2380:5::/48", "212522"}, + {"2001:559:382::/47", "7725"}, + {"2406:c40::/32", "140602"}, + {"2600:6c20:246::/44", "20115"}, + {"2a00:9480::/32", "34578"}, + {"2001:67c:cc::/48", "196870"}, + {"2406:840:fefc::/48", "133555"}, + {"2408:8956:5e00::/40", "17622"}, + {"2600:40ff:fcf9::/48", "7046"}, + {"2600:6c39:50d::/43", "20115"}, + {"2804:90c:facf::/37", "262617"}, + {"2806:230:301a::/48", "265594"}, + {"2a0d:c580::/29", "204490"}, + {"2001:559:c261::/48", "33652"}, + {"2001:559:866b::/48", "33287"}, + {"2001:1660::/32", "25417"}, + {"2407:6340::/32", "135021"}, + {"2408:840c:200::/40", "17621"}, + {"240e:951:2800::/38", "141157"}, + {"2600:3408:300::/37", "4181"}, + {"2600:9000:11bd::/48", "16509"}, + {"2620:131:1046::/44", "26450"}, + {"2804:5f4c::/32", "269090"}, + {"2001:da8:232::/48", "24348"}, + {"2001:1248:5783::/45", "11172"}, + {"2402:800:f132::/41", "7552"}, + {"2602:fcff:16::/48", "213216"}, + {"2800:bf0:2a06::/48", "27947"}, + {"2a0e:aa07:e030::/48", "210041"}, + {"2001:559:801a::/45", "7922"}, + {"2404:19c0::/32", "138505"}, + {"2409:8004:900::/35", "24547"}, + {"240d:c010:72::/48", "139341"}, + {"2001:4130:ce::/48", "29067"}, + {"2400:59e0::/32", "134337"}, + {"2804:2458::/32", "264216"}, + {"2806:2f0:6121::/46", "17072"}, + {"2a06:d500::/29", "51184"}, + {"2a0b:a1c0::/29", "213102"}, + {"2a0d:7740::/29", "208861"}, + {"2001:559:c392::/47", "33659"}, + {"2409:803c:2000::/40", "24444"}, + {"2600:6c38:30e::/43", "20115"}, + {"2804:41cc::/32", "267457"}, + {"2a01:ad00::/45", "51865"}, + {"2a03:5f00::/39", "29644"}, + {"2408:840d:9100::/42", "17621"}, + {"2408:8956:600::/40", "17622"}, + {"2408:8956:ef40::/40", "17816"}, + {"2803:4c60::/45", "267845"}, + {"2a02:2528::/34", "25091"}, + {"2a07:24c0::/29", "203235"}, + {"2a07:2ec0::/32", "48111"}, + {"2001:661:8000::/35", "2470"}, + {"240a:a89a::/32", "144852"}, + {"2600:1016:b030::/40", "6167"}, + {"2804:3920:8000::/36", "266013"}, + {"2a01:a320::/32", "49560"}, + {"2a0d:1640::/32", "200313"}, + {"2a10:d940::/29", "34907"}, + {"240e:183:8101::/46", "140647"}, + {"2606:ae00:beb1::/41", "7287"}, + {"2804:60c8::/32", "269190"}, + {"2804:8510::/32", "272555"}, + {"2a02:cb80:1020::/48", "43766"}, + {"2a0e:72c0::/47", "208479"}, + {"2400:cb00:a4a0::/45", "13335"}, + {"240a:a2a8::/32", "143330"}, + {"240a:aed1::/32", "146443"}, + {"2605:a404:deb::/43", "33363"}, + {"2607:f428:93a0::/44", "19115"}, + {"2620:126:2000::/40", "18694"}, + {"2803:e000::/32", "262215"}, + {"2804:4ec:1500::/38", "28668"}, + {"2a02:26f7:c786::/47", "20940"}, + {"2a0e:b107:180::/44", "6556"}, + {"2001:579:4f0a::/35", "22773"}, + {"2001:648:2e01::/48", "8581"}, + {"2402:800:3dfe::/38", "7552"}, + {"2600:6c3a:19::/46", "20115"}, + {"2603:c0f0:1000::/43", "6142"}, + {"2804:18c4::/32", "53049"}, + {"2804:4104::/32", "265998"}, + {"2001:250:213::/48", "23910"}, + {"2600:6c7f:90e0::/48", "20115"}, + {"2605:b100:900::/41", "577"}, + {"2a00:4802:4c00::/43", "13124"}, + {"2c0f:f6d8:4016::/47", "21433"}, + {"2001:559:36b::/48", "7725"}, + {"240a:a000::/32", "142650"}, + {"2604:940:34::/48", "40386"}, + {"2804:7118::/32", "270766"}, + {"2a01:9ac0::/32", "59919"}, + {"2a06:bc40::/29", "203939"}, + {"2a07:b8c1:12::/32", "14043"}, + {"2001:500:100::/46", "21775"}, + {"2001:559:8415::/48", "33287"}, + {"240e:5e:4006::/48", "134774"}, + {"240e:108:8c::/48", "4134"}, + {"2604:2e8e:c000::/34", "30036"}, + {"2402:8100:26ca::/45", "55644"}, + {"2407:8bc0::/40", "140984"}, + {"240a:aca9::/32", "145891"}, + {"2402:800:9555::/42", "7552"}, + {"2600:802:100::/48", "12234"}, + {"2803:6aa0::/32", "266872"}, + {"2a00:d00:124::/31", "41887"}, + {"2a02:888:147::/48", "47794"}, + {"2001:678:1ec::/48", "42700"}, + {"2001:a98:30::/48", "1967"}, + {"2402:800:989b::/42", "7552"}, + {"240e:982:9500::/34", "4134"}, + {"2604:63c0::/32", "19465"}, + {"2804:dfc:2000::/32", "263042"}, + {"2804:7d58::/32", "271555"}, + {"2a0b:76c0::/29", "201011"}, + {"2a10:9f80::/32", "207459"}, + {"2001:250:5807::/44", "23910"}, + {"2001:e60:d8a0::/45", "4766"}, + {"2400:4ec0:8c1f::/39", "64300"}, + {"2408:8256:2d7f::/48", "17816"}, + {"240e:6b6:5000::/31", "4134"}, + {"2602:802:b045::/48", "399788"}, + {"2a03:2cc0::/32", "57537"}, + {"2a0d:ca47:2::/48", "49423"}, + {"2001:720::/32", "766"}, + {"2402:800:578d::/43", "7552"}, + {"240a:ada7::/32", "146145"}, + {"2803:9800:9083::/43", "11664"}, + {"2804:e94:120::/43", "262468"}, + {"2804:3f10:8000::/39", "262566"}, + {"2804:42cc::/32", "267528"}, + {"2a02:26f7:2e::/48", "36183"}, + {"2600:1480:7800::/48", "21342"}, + {"2804:13f0::/32", "263303"}, + {"2a0f:ca87:3::/48", "211891"}, + {"2a11:8b81::/30", "207143"}, + {"2409:8054:5c::/48", "9808"}, + {"2600:6c38:a01::/43", "20115"}, + {"2600:9000:1148::/48", "16509"}, + {"2a02:26f7:d900::/48", "36183"}, + {"2a03:8100::/32", "5524"}, + {"2a06:aa80::/32", "43267"}, + {"2800:160:1435::/46", "14259"}, + {"2a02:26f7:bb08::/48", "36183"}, + {"240a:adf5::/32", "146223"}, + {"2801:1b:6800::/48", "27951"}, + {"2804:48b8::/32", "267140"}, + {"2a00:1900::/32", "8881"}, + {"2a01:8a00::/32", "42484"}, + {"2a09:6c40::/29", "209408"}, + {"2001:df0:c8::/48", "139612"}, + {"2403:8600:c00::/44", "45820"}, + {"2a0f:607:1024::/48", "212359"}, + {"2001:559:808a::/48", "33660"}, + {"2600:370f:7483::/42", "32261"}, + {"2607:f110:52::/40", "21889"}, + {"2803:e40:a00b::/33", "27797"}, + {"2803:ebc0::/32", "265753"}, + {"2804:3b7c::/32", "266152"}, + {"2001:4368::/32", "9129"}, + {"240a:a234::/32", "143214"}, + {"2806:2f0:81c1::/46", "17072"}, + {"2a02:26f7:b98c::/48", "36183"}, + {"2a03:6947:800::/38", "61266"}, + {"2001:fd8:3010::/44", "4775"}, + {"2404:2200:11::/45", "18200"}, + {"2409:8835::/24", "9808"}, + {"240a:a293::/32", "143309"}, + {"240a:af7e::/32", "146616"}, + {"2607:9000::/34", "11878"}, + {"2804:566c::/32", "267997"}, + {"2a09:13c0::/48", "209562"}, + {"2a0c:b641:16d::/48", "211139"}, + {"2001:df6:7280::/48", "142052"}, + {"2401:8800:e00::/40", "17439"}, + {"2406:e001:1000::/33", "23655"}, + {"2801:1fc:16::/48", "27951"}, + {"2804:3c90::/32", "266220"}, + {"2a0e:aa07:e01b::/48", "211843"}, + {"2001:67c:1428::/48", "49684"}, + {"2408:8456:a610::/42", "134543"}, + {"240a:a223::/32", "143197"}, + {"2602:ff2a::/32", "19323"}, + {"2606:6680:35::/46", "18779"}, + {"2a02:ee80:411d::/48", "3573"}, + {"2a0e:b107:1310::/44", "131668"}, + {"2001:559:c401::/46", "33659"}, + {"2405:d400::/32", "9927"}, + {"2620:a1:c000::/48", "35960"}, + {"2a05:e740:116::/48", "29108"}, + {"2a06:56c1:1000::/48", "16509"}, + {"2404:4a00:7000::/64", "55423"}, + {"2409:8087:7f00::/32", "9808"}, + {"2602:805:d000::/44", "46208"}, + {"2604:4300::/32", "33387"}, + {"2804:1a4::/32", "28140"}, + {"2804:4e60::/32", "268257"}, + {"2806:3d2::/48", "263167"}, + {"2a11:dd80::/29", "204790"}, + {"2001:559:819f::/48", "20214"}, + {"2001:67c:21b0::/48", "51871"}, + {"2001:1248:5a5b::/42", "11172"}, + {"2603:c023:c000::/35", "31898"}, + {"2603:c0e0:1000::/38", "54253"}, + {"2620:1f6::/36", "26305"}, + {"2804:5f10::/32", "269074"}, + {"2a02:2e02:3b70::/40", "12479"}, + {"2001:df3:7c80::/48", "140577"}, + {"2001:1a68:4::/46", "15694"}, + {"2400:dd01:3015::/44", "7497"}, + {"2606:2c0:3::/45", "16509"}, + {"2a0a:ba40::/29", "205958"}, + {"2001:250:852::/44", "138182"}, + {"240a:a371::/32", "143531"}, + {"2600:6c20:116::/47", "20115"}, + {"2607:fe58::/32", "46449"}, + {"2804:64ac::/32", "269441"}, + {"2a00:1418:1000::/34", "41391"}, + {"2a02:2e02:2310::/41", "12479"}, + {"2a04:4e40:fe00::/48", "54113"}, + {"2001:df5:4480::/48", "133296"}, + {"2401:1d80:3000::/47", "16509"}, + {"2600:6c10:c05::/44", "20115"}, + {"2600:9000:2483::/44", "16509"}, + {"2804:1e68::/32", "53006"}, + {"2804:8554::/32", "272572"}, + {"2001:4f8:c::/43", "1280"}, + {"2001:678:d38::/48", "42504"}, + {"240e:3b5:f100::/37", "134775"}, + {"2801:80:3800::/48", "269610"}, + {"2806:2f0:9743::/42", "17072"}, + {"2409:8c1a::/29", "132525"}, + {"2800:1e0:a04::/39", "7195"}, + {"2804:5b4c::/32", "268833"}, + {"2a02:26f7:cac4::/48", "36183"}, + {"2a0f:6580:106::/48", "60707"}, + {"2a0f:9400:7834::/44", "147028"}, + {"2001:df0:f8::/48", "9555"}, + {"2600:1488:a000::/47", "20940"}, + {"2401:d800:24c0::/42", "7552"}, + {"2401:d800:7310::/42", "7552"}, + {"2405:1e40::/47", "58475"}, + {"240a:a641::/32", "144251"}, + {"2600:6c38:e23::/45", "20115"}, + {"2604:ca00:f00a::/45", "36492"}, + {"2a06:6540:30c1::/48", "3549"}, + {"2001:44b8:2066::/44", "7545"}, + {"2604:aec0::/32", "11900"}, + {"2620:1a:4000::/48", "2572"}, + {"2801:80:ef0::/48", "264185"}, + {"2001:4c8:1096::/44", "15290"}, + {"240e:1f::/48", "134774"}, + {"2600:1406:8801::/38", "20940"}, + {"2a02:26f7:ca40::/48", "36183"}, + {"2a02:26f7:cf40::/48", "36183"}, + {"2a02:26f7:d288::/48", "36183"}, + {"2a03:9f00::/32", "8676"}, + {"2001:559:387::/48", "33287"}, + {"2001:559:4c3::/48", "33491"}, + {"240a:ab09::/32", "145475"}, + {"240e:44d:4900::/41", "140345"}, + {"2607:f798::/34", "812"}, + {"2800:160:145c::/42", "14259"}, + {"2804:8098::/32", "271761"}, + {"2a02:26f7:f684::/48", "36183"}, + {"2a04:5b87:1::/48", "202265"}, + {"2a0a:9bc0::/29", "48303"}, + {"2001:67c:19f0::/48", "199771"}, + {"240a:ab3e::/32", "145528"}, + {"240a:afba::/32", "146676"}, + {"2800:bf0:814d::/46", "52257"}, + {"2a01:7040::/32", "58123"}, + {"2a02:26f7:e881::/46", "20940"}, + {"2a02:7b01::/34", "48328"}, + {"2001:250:504a::/48", "23910"}, + {"2408:8459:1450::/38", "17816"}, + {"2409:8062:1900::/34", "9808"}, + {"2606:6d00:200::/32", "1403"}, + {"2804:584c::/32", "268120"}, + {"2806:230:202b::/48", "11888"}, + {"2a0b:f4c1:2::/48", "60729"}, + {"2001:468:2651::/40", "11537"}, + {"2001:559:c352::/48", "33667"}, + {"2407:e740:10b::/42", "59239"}, + {"2800:800:520::/44", "26611"}, + {"2a00:d101:4000::/36", "15704"}, + {"2a02:26f7:ec09::/46", "20940"}, + {"2001:8c0::/29", "2116"}, + {"2001:978:6402::/45", "174"}, + {"2409:8c28:1301::/34", "56041"}, + {"240e:3bb:9c00::/34", "140310"}, + {"2606:6a40::/44", "14638"}, + {"2804:7dd0::/34", "271584"}, + {"2a0c:da02::/32", "57878"}, + {"2400:5d00::/32", "58507"}, + {"2408:8a06::/47", "9929"}, + {"2409:8070:30e8::/48", "140105"}, + {"240a:ac7d::/32", "145847"}, + {"2600:1402:15::/48", "35994"}, + {"2600:6c10:b2::/44", "20115"}, + {"2804:5d90::/32", "13786"}, + {"2a01:8840:62::/45", "12041"}, + {"2600:1010:be00::/44", "6167"}, + {"2602:80c:100a::/48", "20115"}, + {"2606:3600:115::/48", "16839"}, + {"2607:ff60::/46", "3900"}, + {"2804:23d4::/32", "264186"}, + {"2a05:480::/29", "200000"}, + {"240e:3b5:5600::/34", "4134"}, + {"2406:af40::/32", "9237"}, + {"2602:feda:ab3::/44", "141011"}, + {"2603:90b9::/32", "10838"}, + {"2a0e:e2c1::/32", "42156"}, + {"2607:f6f0:1400::/40", "398811"}, + {"2a03:fc00::/29", "34756"}, + {"2001:1998:8e0::/38", "7843"}, + {"2001:49e8::/32", "6939"}, + {"240a:afca::/32", "146692"}, + {"2804:fb4:a040::/33", "263599"}, + {"2804:21b8::/48", "264569"}, + {"2a01:168::/29", "41670"}, + {"2a12:2600::/29", "44685"}, + {"2001:559:bf::/48", "7922"}, + {"2001:559:8682::/48", "33657"}, + {"2408:8957:800::/40", "17622"}, + {"2804:2b88::/32", "265158"}, + {"2806:1020::/37", "8151"}, + {"2a03:b00::/32", "8723"}, + {"2a0b:6940::/29", "49573"}, + {"2a0f:9400:8012::/48", "23470"}, + {"240e:44d:2040::/42", "140361"}, + {"2a02:26f7:bf09::/46", "20940"}, + {"2a02:26f7:d309::/42", "20940"}, + {"2001:550:40a::/39", "174"}, + {"2001:559:865c::/48", "7725"}, + {"2c0f:eb00:300::/40", "61266"}, + {"2604:e100:1::/48", "33028"}, + {"2620:13d:2000::/41", "20326"}, + {"2a00:cee0:dcd::/31", "60268"}, + {"2a02:26f7:eec0::/48", "36183"}, + {"2a02:ee80:41f8::/38", "3573"}, + {"2a03:8600:2::/45", "3399"}, + {"2402:3b00::/32", "38648"}, + {"2402:a800:fff0::/48", "55895"}, + {"2804:7a64:a000::/35", "271368"}, + {"2804:8130::/32", "272438"}, + {"2a0a:67c0::/29", "212796"}, + {"2001:da8:e810::/46", "24368"}, + {"2001:ee0:3101::/43", "45899"}, + {"2600:1480:c000::/40", "33905"}, + {"2a02:2e0:3fd::/46", "12306"}, + {"2001:da8:b81d::/37", "23910"}, + {"2001:43f8:750::/44", "37520"}, + {"2602:ff96:9::/48", "40676"}, + {"2804:28e4::/45", "28260"}, + {"2a04:5f80::/32", "60233"}, + {"2a0f:5707:b130::/44", "210633"}, + {"2402:e280:2228::/47", "134674"}, + {"240e:698:4500::/40", "58461"}, + {"2605:8100::/32", "7311"}, + {"2804:26d0::/32", "262454"}, + {"2a02:26f0:138::/45", "20940"}, + {"2a02:26f7:e08c::/48", "36183"}, + {"2a06:98c1:55::/46", "13335"}, + {"2001:da8:c00a::/37", "23910"}, + {"2401:7400:4001::/43", "4773"}, + {"2600:6c10:80a::/43", "20115"}, + {"2804:154c:502e::/32", "263382"}, + {"2001:559:4ed::/46", "33661"}, + {"2001:678:e90::/48", "8447"}, + {"2001:67c:26f8::/48", "41709"}, + {"2001:4888:8027::/44", "6167"}, + {"2404:3d00:414c::/47", "21433"}, + {"240e:5a:4000::/40", "140290"}, + {"2605:7bc0::/32", "395439"}, + {"2605:f440:beef::/48", "212105"}, + {"2804:39c:5200::/40", "28329"}, + {"2001:559:c499::/48", "7725"}, + {"2001:579:134::/36", "22773"}, + {"2406:8800:9049::/46", "17465"}, + {"2800:2d0::/32", "3603"}, + {"2804:39c4::/32", "266049"}, + {"2804:3cd8::/32", "266238"}, + {"2001:559:4a::/45", "7922"}, + {"2001:920::/31", "8220"}, + {"2600:6c38:abd::/46", "20115"}, + {"2602:fd69::/36", "14731"}, + {"2800:490:4e00::/39", "27951"}, + {"2800:bf0:145::/48", "27947"}, + {"2a05:3880::/29", "201518"}, + {"2607:fb10:7039::/41", "2906"}, + {"2804:3cf0::/32", "266243"}, + {"2804:7534::/32", "271031"}, + {"2806:260:4::/48", "13999"}, + {"2408:8256:2f6b::/48", "17816"}, + {"240a:ac41::/32", "145787"}, + {"2605:4480::/32", "21624"}, + {"2800:160:1581::/44", "14259"}, + {"2800:160:1a96::/44", "14259"}, + {"2806:230:403b::/48", "11888"}, + {"2a01:7520::/32", "62167"}, + {"2a02:ee80:41ba::/45", "21433"}, + {"2a0b:33c0:112::/45", "57395"}, + {"2001:518::/32", "8001"}, + {"2001:67c:13a0::/48", "57954"}, + {"2001:da8:8004::/44", "24364"}, + {"2001:4d88::/32", "31333"}, + {"2600:141c:5000::/48", "8151"}, + {"2620:37:e000::/48", "53535"}, + {"2804:5c68::/32", "268907"}, + {"2a02:26f7:c35c::/47", "36183"}, + {"2a0a:2c0:3::/48", "197481"}, + {"2001:250:7030::/48", "24370"}, + {"2401:4800:3021::/48", "38457"}, + {"240a:aef9::/32", "146483"}, + {"2804:3f38:9000::/36", "266646"}, + {"2001:1ab8::/31", "15440"}, + {"2401:b180::/33", "37963"}, + {"2404:bf40:ec01::/48", "7545"}, + {"2406:840:e14f::/48", "142164"}, + {"2804:14c:da87::/43", "28573"}, + {"2a01:a440::/48", "51297"}, + {"2a02:dd80::/29", "204896"}, + {"2406:e340::/32", "137274"}, + {"2409:8959:cc54::/39", "56040"}, + {"2605:6400:20::/48", "53667"}, + {"2804:5e48:ff02::/48", "269023"}, + {"2a02:ee80:4069::/46", "3573"}, + {"2a04:b906::/48", "211321"}, + {"2a02:26f7:d501::/46", "20940"}, + {"2a03:840::/32", "199405"}, + {"2a0d:8d00::/30", "47750"}, + {"2001:559:c1e6::/48", "33652"}, + {"2402:e280:210f::/43", "134674"}, + {"2409:8924:4b00::/37", "56046"}, + {"240a:ad24::/32", "146014"}, + {"2a0f:7400::/30", "213275"}, + {"2400:cb00:132::/48", "13335"}, + {"2804:158::/32", "53093"}, + {"2a04:6f02::/29", "3214"}, + {"2409:8c0c::/39", "56042"}, + {"2001:559:c1bf::/48", "33489"}, + {"2001:44c8:128::/47", "131445"}, + {"2402:800:3355::/42", "7552"}, + {"2404:8000:ae::/47", "17451"}, + {"2603:f810::/26", "397165"}, + {"2a02:26f7:44::/48", "36183"}, + {"2a02:26f7:b801::/46", "20940"}, + {"2a02:26f7:e341::/46", "20940"}, + {"2a05:d03a:a000::/40", "16509"}, + {"2a0f:e480::/29", "60262"}, + {"2605:dd40:8119::/38", "398549"}, + {"2620:25:a000::/48", "394470"}, + {"2804:5ad0:f000::/36", "268798"}, + {"2a00:ece1:1::/48", "61050"}, + {"2a02:26f7:cfc9::/46", "20940"}, + {"2a10:4580::/29", "399975"}, + {"240a:a3bb::/32", "143605"}, + {"2a02:3d0:622::/32", "22822"}, + {"2a0e:b107:df5::/48", "142055"}, + {"2a00:5400:1235::/32", "35753"}, + {"2a02:2998::/32", "13009"}, + {"2a03:be80::/47", "15510"}, + {"2001:250:c2e::/43", "23910"}, + {"2001:4940::/34", "21547"}, + {"240a:a3c1::/32", "143611"}, + {"2600:1402:3801::/37", "20940"}, + {"2804:1690:680::/36", "263292"}, + {"2a02:4840:1111::/48", "203339"}, + {"2001:559:8234::/48", "33656"}, + {"2408:84f3:4210::/42", "134543"}, + {"2605:f500:502::/38", "1828"}, + {"2806:2f0:3101::/46", "17072"}, + {"2a00:1838::/32", "43317"}, + {"2a01:1df::/32", "15744"}, + {"2404:7c00:2::/48", "141177"}, + {"240a:ae2d::/32", "146279"}, + {"2604:d600:156a::/45", "32098"}, + {"2a10:fa80:92::/48", "57050"}, + {"2001:67c:414::/48", "211073"}, + {"2402:800:39e0::/44", "7552"}, + {"2800:160:14c0::/43", "14259"}, + {"2a11:1c40::/29", "204790"}, + {"2605:3ac0::/36", "20029"}, + {"2a01:4a0:18::/45", "201011"}, + {"2a02:26f7:d180::/48", "36183"}, + {"2402:5300:4410::/39", "45903"}, + {"2620:d8:8000::/48", "2900"}, + {"2800:370:c000::/46", "28006"}, + {"2600:100f:a110::/36", "22394"}, + {"2620:88:6000::/48", "33600"}, + {"2a01:b6a0::/32", "197216"}, + {"2a02:26f7:cc81::/46", "20940"}, + {"2c0f:f280::/32", "37645"}, + {"2001:678:fbc::/48", "43183"}, + {"2001:b28:f23d::/48", "59930"}, + {"2607:2400::/32", "40335"}, + {"2a07:cb40::/29", "207237"}, + {"2a0e:b107:5a9::/48", "203943"}, + {"2001:ee0:ec00::/40", "45899"}, + {"2400:3840::/33", "23860"}, + {"240a:af61::/32", "146587"}, + {"2607:fca8::/37", "17139"}, + {"2a02:790::/32", "24679"}, + {"2a10:53c0::/29", "34907"}, + {"2a10:a480::/29", "6729"}, + {"2c0f:f7a8:9041::/48", "4809"}, + {"2001:559:5b7::/48", "33657"}, + {"2001:918:ff78::/40", "3303"}, + {"2404:f4c0:fff0::/48", "140219"}, + {"240e:388::/29", "4812"}, + {"2804:204:304::/47", "28186"}, + {"2a03:5344::/44", "34414"}, + {"2a07:8142::/36", "209677"}, + {"2a0a:340:200::/40", "48651"}, + {"2001:468:2601::/44", "11537"}, + {"240a:ab1f::/32", "145497"}, + {"2001:4878:8164::/48", "12222"}, + {"2409:8020:3063::/43", "56046"}, + {"240e:980:9600::/40", "58542"}, + {"2605:a401:8141::/45", "33363"}, + {"2a00:e6a0::/46", "12303"}, + {"2a02:7a00::/47", "39904"}, + {"2a0c:6c40:c840::/47", "20705"}, + {"2409:8958:cd54::/38", "56040"}, + {"2804:2b00::/32", "265130"}, + {"2001:500:14::/48", "42"}, + {"2001:559:858d::/46", "22909"}, + {"240a:ad0d::/32", "145991"}, + {"2a09:6280:3::/48", "203493"}, + {"2a11:5200::/29", "211344"}, + {"2001:1248:8849::/43", "11172"}, + {"2408:8957:c300::/40", "17816"}, + {"2600:1417:60::/48", "20940"}, + {"2605:1cc0::/32", "7029"}, + {"2620:a7:8000::/48", "54111"}, + {"2803:e600:4::/47", "18809"}, + {"2804:399c:fff1::/44", "266039"}, + {"2a03:2a60:dc::/48", "59871"}, + {"2a10:3e84::/30", "212144"}, + {"2600:1407:2801::/37", "20940"}, + {"2602:fed2:7708::/48", "208188"}, + {"2a0b:4340:9e::/48", "205610"}, + {"2a0e:aa07:f09b::/48", "208884"}, + {"2400:8500:3000::/48", "55907"}, + {"2409:875c::/33", "9808"}, + {"2804:3dc:f2::/36", "52967"}, + {"2001:559:7db::/48", "21508"}, + {"2a02:26f7:bec9::/46", "20940"}, + {"2a0b:bf80::/32", "60522"}, + {"240a:a205::/32", "143167"}, + {"2408:8956:4700::/40", "17816"}, + {"2801:80:1414::/48", "11097"}, + {"2a02:6380::/32", "56349"}, + {"2405:c0:60::/48", "138881"}, + {"240a:a52a::/32", "143972"}, + {"2800:160:2270::/40", "14259"}, + {"2800:bf0:2200::/45", "52257"}, + {"2a02:26f7:f8d1::/46", "20940"}, + {"2001:520:1012::/48", "8103"}, + {"2001:67c:24a4::/48", "204711"}, + {"2404:cf00:efb::/32", "38511"}, + {"240e:3b4:ac00::/35", "4134"}, + {"2803:bc40:a01c::/33", "52468"}, + {"2806:2f0:9241::/40", "17072"}, + {"2401:d800:d280::/42", "7552"}, + {"2605:8300:2::/48", "25645"}, + {"2402:800:7910::/42", "7552"}, + {"2402:8100:31da::/45", "55644"}, + {"2409:8054:50::/48", "9808"}, + {"2607:f098:6100::/32", "33363"}, + {"2620:79:8000::/48", "698"}, + {"2620:101:200d::/46", "30215"}, + {"2804:14c:da91::/44", "28573"}, + {"2804:4b24::/32", "267286"}, + {"2a0f:f400::/29", "40970"}, + {"2001:df2:df80::/48", "139904"}, + {"2400:ca08::/29", "23688"}, + {"2402:7500:4ce::/42", "24158"}, + {"240a:a714::/32", "144462"}, + {"240a:a9d8::/32", "145170"}, + {"240e:67c:1800::/32", "4134"}, + {"2605:3380:412c::/47", "12025"}, + {"2606:8f80:1::/48", "6327"}, + {"2a03:4c0::/32", "15405"}, + {"2a10:4080::/29", "399975"}, + {"2409:8c85:aa11::/46", "9808"}, + {"2605:a404:fd::/39", "33363"}, + {"2803:740::/32", "264719"}, + {"2804:129c::/32", "263487"}, + {"2a01:190:15ec::/48", "199216"}, + {"2a02:26f7:e4c1::/46", "20940"}, + {"2001:250:702f::/48", "24369"}, + {"2001:e60:a730::/40", "4766"}, + {"2409:8a53:f00::/35", "56047"}, + {"2804:7180:200::/32", "270793"}, + {"2a05:2240::/32", "59835"}, + {"2001:938:402f::/43", "8437"}, + {"240a:a6ee::/32", "144424"}, + {"2606:42c0:dd::/32", "399078"}, + {"2806:342:f600::/36", "265591"}, + {"2605:dd40:5ccd::/32", "398549"}, + {"2a0d:2587:3800::/33", "142553"}, + {"2401:d800:2140::/42", "7552"}, + {"240a:aa10::/32", "145226"}, + {"240a:aac7::/32", "145409"}, + {"2801:80:23f0::/48", "268293"}, + {"2a02:7e60::/32", "200925"}, + {"2400:cb00:397::/44", "13335"}, + {"2607:f740:e060::/43", "398748"}, + {"2800:200:b4f0::/36", "12252"}, + {"2804:b54::/32", "52765"}, + {"2806:2f0:93a2::/41", "17072"}, + {"2a01:c50e:1900::/34", "12479"}, + {"2001:1248:5b75::/44", "11172"}, + {"2402:7480::/32", "18106"}, + {"240a:a032::/32", "142700"}, + {"240e:bf:b8e4::/46", "138641"}, + {"240e:67e:8800::/38", "140330"}, + {"240e:979:8500::/40", "131325"}, + {"2605:1240::/33", "55222"}, + {"2804:38fc::/32", "266516"}, + {"2a02:26f7:d589::/46", "20940"}, + {"2a03:9d40:5000::/40", "41095"}, + {"2a05:1500:ff00::/40", "48635"}, + {"2001:67c:2384::/48", "197942"}, + {"2001:4350:a001::/33", "2609"}, + {"2800:160:159a::/45", "14259"}, + {"2a10:4c40::/29", "212736"}, + {"2001:559:7da::/48", "33650"}, + {"2001:559:83fb::/48", "33667"}, + {"2001:67c:1c00::/40", "48144"}, + {"2001:1930:3c10::/48", "11985"}, + {"2406:8800:9041::/46", "17465"}, + {"2603:90fb::/44", "19115"}, + {"2606:3d40:10::/47", "400097"}, + {"2804:2f6c:dc00::/34", "264890"}, + {"2001:df0:312::/47", "135008"}, + {"2401:2200:1000::/37", "55420"}, + {"2407:5c40::/32", "142139"}, + {"2600:40ff:fcfe::/38", "701"}, + {"2605:dd40:8221::/46", "398549"}, + {"2610:e0:d000::/34", "2572"}, + {"2804:839c::/32", "272208"}, + {"2806:2f0:45a3::/41", "17072"}, + {"2a02:c78::/29", "5607"}, + {"2a04:e800:5407::/48", "57976"}, + {"2620:1ec:908::/47", "8068"}, + {"2804:138::/32", "11432"}, + {"2a00:ea8::/32", "9211"}, + {"2001:559:c156::/48", "33656"}, + {"2001:44b8:30c2::/48", "7545"}, + {"240e:3bc:6400::/35", "140312"}, + {"2a01:b600::/32", "43989"}, + {"2402:8100:26da::/39", "55644"}, + {"2600:6c10:f34e::/37", "20115"}, + {"2620:2f::/48", "32638"}, + {"2804:47b8::/32", "267073"}, + {"2a01:4400:1::/46", "1257"}, + {"2a02:26f7:e481::/46", "20940"}, + {"2a0d:5642:130::/48", "35487"}, + {"2401:f000:2:300::/45", "38477"}, + {"2405:e840::/32", "4049"}, + {"2a02:26f7:c288::/48", "36183"}, + {"2a04:2f00::/29", "60256"}, + {"2a0f:5e80::/29", "39287"}, + {"2001:470:c3::/48", "395466"}, + {"2409:8062:900::/35", "9808"}, + {"2804:7f54::/32", "271681"}, + {"2a02:26f7:eb8c::/48", "36183"}, + {"2a10:ed00::/29", "212297"}, + {"2001:559:19f::/48", "21508"}, + {"2408:8459:5e30::/41", "17622"}, + {"240a:a67c::/32", "144310"}, + {"2a02:ee80:42aa::/41", "3573"}, + {"240a:a427::/32", "143713"}, + {"2600:1004:b130::/44", "22394"}, + {"2800:410::/32", "10269"}, + {"2001:510:305::/32", "376"}, + {"2001:df7:9580::/48", "146867"}, + {"2401:d800:fa10::/42", "7552"}, + {"2402:800:b560::/40", "7552"}, + {"2806:2f0:24a1::/48", "22884"}, + {"2402:9800:4002::/48", "131119"}, + {"2602:ffc5:103::/48", "7489"}, + {"2409:8073:2a00::/46", "9808"}, + {"2600:1013:b030::/40", "6167"}, + {"2a02:88d:8230::/44", "48695"}, + {"2a11:e900::/29", "211199"}, + {"2001:550:9c00::/48", "400302"}, + {"2001:7fb:fe12::/45", "12654"}, + {"2607:f3a0:a004::/48", "399816"}, + {"2402:3a80:c050::/46", "38266"}, + {"2803:d6c0:2::/44", "265698"}, + {"2804:14d:9e00::/40", "28573"}, + {"2804:d3c::/32", "52613"}, + {"2804:df0:e00::/35", "262775"}, + {"2401:3cc0:401::/39", "137409"}, + {"2401:d800:dde0::/38", "7552"}, + {"2620:10c:e000::/40", "32629"}, + {"2804:2a0::/38", "28272"}, + {"2804:cb0:fac4::/44", "52742"}, + {"2001:4868:800::/40", "23148"}, + {"2406:3003:2030::/41", "55430"}, + {"240a:a537::/32", "143985"}, + {"2804:6554::/32", "269483"}, + {"2409:8e61::/27", "9808"}, + {"2600:6c21:486::/44", "20115"}, + {"2801:c4:26::/48", "265584"}, + {"2a02:2718::/29", "30873"}, + {"2001:559:c295::/48", "33491"}, + {"2001:678:900::/48", "39602"}, + {"2600:380:ac00::/41", "20057"}, + {"2804:fc8::/32", "263603"}, + {"2804:3e88::/32", "266603"}, + {"2a02:ac80:301::/37", "25145"}, + {"2001:559:c1d8::/48", "7015"}, + {"240a:a3e9::/32", "143651"}, + {"2610:b0:411a::/45", "3573"}, + {"2804:2a5c::/32", "264071"}, + {"2001:67c:2c24::/48", "15542"}, + {"2605:ca40:1::/48", "397011"}, + {"2a0c:a9c7:177::/48", "43832"}, + {"2401:d800:b0c0::/42", "7552"}, + {"2a0a:3140:2600::/46", "15532"}, + {"2600:1480:f001::/28", "20940"}, + {"2a00:e20:150::/46", "16509"}, + {"2a0c:1700::/47", "205112"}, + {"2001:67c:698::/48", "201820"}, + {"2804:26e8::/32", "262573"}, + {"2a00:4802:3000::/43", "13124"}, + {"2001:1938:2105::/48", "33438"}, + {"2804:158c::/32", "263394"}, + {"2a0d:77c7:de24::/34", "7489"}, + {"2001:559:28e::/48", "33652"}, + {"2804:8140::/35", "272442"}, + {"2806:2f0:71e3::/38", "17072"}, + {"2001:559:c3aa::/48", "33668"}, + {"2001:559:c49a::/48", "33662"}, + {"2001:67c:18c4::/48", "15576"}, + {"2600:1415:d801::/34", "20940"}, + {"2606:6680:2000::/33", "40676"}, + {"2804:3174::/36", "265016"}, + {"2604:880:6f::/48", "29802"}, + {"2a03:4a81::/32", "20473"}, + {"2a0b:c040::/31", "42237"}, + {"2001:67c:2274::/48", "197164"}, + {"2001:978:8900:1::/37", "174"}, + {"2402:af40::/32", "23779"}, + {"2409:8904:5c40::/42", "24547"}, + {"240a:a035::/32", "142703"}, + {"240e:45c:3c00::/33", "131285"}, + {"2620:9d:6000::/48", "16509"}, + {"2620:171:24::/48", "715"}, + {"2800:160:1489::/45", "14259"}, + {"240e:964:a800::/38", "58772"}, + {"2605:6f00:9000::/36", "10929"}, + {"2a02:2a50::/29", "49800"}, + {"2a03:32c0:a::/48", "29555"}, + {"2a0b:1306:c::/48", "198018"}, + {"240e:67f:e200::/39", "140329"}, + {"2606:6680:4::/48", "40676"}, + {"2607:f740::/47", "36236"}, + {"2803:ab00:90::/48", "23520"}, + {"2804:391c:7::/44", "262287"}, + {"2804:3bc8::/32", "266170"}, + {"2804:4c0c::/41", "267345"}, + {"2001:559:82be::/48", "33287"}, + {"2408:8456:4240::/37", "17816"}, + {"2804:45e8::/32", "52814"}, + {"2a00:17f0::/32", "33808"}, + {"2a00:19f8::/32", "49010"}, + {"2a01:7d20:1000::/40", "203645"}, + {"2a10:6b40::/29", "212640"}, + {"2401:d800:5240::/42", "7552"}, + {"2403:fd40:1001::/46", "132372"}, + {"2603:4:1200::/48", "44273"}, + {"2806:230:201c::/48", "265594"}, + {"2a0e:5700::/32", "58291"}, + {"2600:370f:73c5::/42", "32261"}, + {"2a0d:8a80::/32", "33353"}, + {"2607:fcd0:dac0::/34", "8100"}, + {"2a00:a8e0:1::/46", "202108"}, + {"2a05:7740::/29", "57532"}, + {"2406:9c40::/35", "55366"}, + {"2409:8a75::/28", "9808"}, + {"240a:a693::/32", "144333"}, + {"240a:ac65::/32", "145823"}, + {"2801:80:3720::/48", "269400"}, + {"2801:1b2::/44", "14080"}, + {"2804:7d70:2000::/32", "271561"}, + {"2001:250:80f::/48", "23910"}, + {"2001:67c:2978::/48", "211671"}, + {"2401:31c0:ffff::/48", "133429"}, + {"2804:8318:20::/38", "272176"}, + {"2a00:4800:1e0::/44", "13124"}, + {"2407:5200:301::/37", "55915"}, + {"2602:fbd5::/36", "400370"}, + {"2400:8400::/32", "18085"}, + {"2a00:1210::/32", "34700"}, + {"2400:e340::/46", "136450"}, + {"2a0c:b641:219::/48", "209661"}, + {"2001:559:270::/48", "33490"}, + {"2001:1388:2f10::/35", "6147"}, + {"2400:9700:101::/43", "24550"}, + {"240a:a324::/32", "143454"}, + {"2600:6c38:45b::/45", "20115"}, + {"2804:5d00:d000::/34", "268945"}, + {"2a0b:f940:3af3::/33", "205373"}, + {"2001:500:a7::/48", "55195"}, + {"2401:3cc0:901::/32", "137409"}, + {"2401:d800:d100::/42", "7552"}, + {"2606:cd80:1::/48", "29802"}, + {"2804:25f4::/32", "52800"}, + {"2a01:cf00::/42", "2278"}, + {"2804:6f0::/36", "53047"}, + {"2a03:5a00:16::/48", "42574"}, + {"2a03:db80:3411::/36", "680"}, + {"2001:678:318::/48", "51597"}, + {"2001:df7:b300::/48", "131111"}, + {"2402:800:37c5::/43", "7552"}, + {"2800:484:3200::/36", "14080"}, + {"2804:1784::/44", "263152"}, + {"2a02:26f7:c3c1::/46", "20940"}, + {"2a02:26f7:d905::/46", "20940"}, + {"2a06:c5c0:900::/48", "44709"}, + {"2a0c:a880::/29", "204754"}, + {"2a10:e580:1::/46", "399114"}, + {"2001:fd0:3201::/39", "10029"}, + {"2401:d800:c90::/42", "7552"}, + {"2001:67c:2948::/48", "210211"}, + {"2408:8026:530::/38", "17621"}, + {"2800:160:110e::/43", "14259"}, + {"2a02:2698:6800::/38", "34533"}, + {"2c0f:f7a8:815f::/48", "4134"}, + {"2a0c:b641:6c6::/47", "213236"}, + {"2001:550:1402::/47", "397601"}, + {"240a:ad0b::/32", "145989"}, + {"2600:3400::/30", "4181"}, + {"2804:1a0c::/32", "61833"}, + {"2804:2760::/32", "263897"}, + {"2001:468:2650::/48", "22742"}, + {"2001:67c:18bc::/48", "24840"}, + {"2400:a980:5100::/37", "133111"}, + {"2409:8002:2b00::/40", "38019"}, + {"2806:2f0:3261::/46", "17072"}, + {"2400:89c0:1091::/48", "23724"}, + {"240a:abbb::/32", "145653"}, + {"240a:aeb3::/32", "146413"}, + {"2607:ffc8:0:7::/47", "17356"}, + {"2800:160:12be::/41", "14259"}, + {"2409:8070:2100::/36", "9808"}, + {"2605:a404:8b::/42", "33363"}, + {"2804:5050::/32", "268381"}, + {"2804:63f4::/32", "269394"}, + {"2a02:5b20::/32", "47720"}, + {"2001:559:86af::/48", "33491"}, + {"2602:fc09:800::/45", "13780"}, + {"2800:68:37::/48", "27947"}, + {"2804:920:5200::/32", "263053"}, + {"2a02:6f00::/36", "197692"}, + {"2a0f:33c0::/29", "37286"}, + {"2408:8957:4700::/40", "17816"}, + {"2a02:26f7:f048::/48", "36183"}, + {"240e:974:e700::/40", "4134"}, + {"2a02:26f7:d148::/47", "36183"}, + {"2a07:f101::/36", "28885"}, + {"2803:9800:a8c5::/46", "11664"}, + {"2001:559:c263::/48", "33657"}, + {"240a:a7f4::/32", "144686"}, + {"2607:3400::/32", "26891"}, + {"2a03:5640:f507::/44", "16509"}, + {"2a07:22c1:38::/48", "210715"}, + {"2001:4457:ff0::/48", "20940"}, + {"2409:8070:30f8::/45", "140105"}, + {"240e:e1:d101::/30", "4812"}, + {"2a02:367:1187::/48", "42804"}, + {"2a07:9942:39d8::/47", "43350"}, + {"2a09:a440::/48", "205479"}, + {"2001:559:5e5::/48", "7922"}, + {"2402:3a80:c00b::/48", "38266"}, + {"2402:3a80:c034::/47", "38266"}, + {"2409:8700::/31", "56048"}, + {"2804:47f4::/32", "267088"}, + {"2a01:8840:7a::/45", "12041"}, + {"2a02:26f7:ee01::/46", "20940"}, + {"2c0f:e8e0:4010::/42", "327926"}, + {"2001:df0:59c0::/48", "149475"}, + {"2001:df5:4b80::/48", "141404"}, + {"2408:8957:3c00::/40", "17622"}, + {"2605:c640::/32", "62538"}, + {"2607:fb58:d202::/40", "53933"}, + {"2804:53c::/33", "53004"}, + {"2a02:7840::/32", "51088"}, + {"2001:5b8::/32", "13645"}, + {"2400:9380:8221::/48", "4134"}, + {"2602:fcf6:ffe::/48", "49780"}, + {"2804:7c40::/32", "271484"}, + {"2a00:1bd0::/32", "39704"}, + {"2a0f:e040:2::/48", "210662"}, + {"2001:67c:29e0::/48", "21131"}, + {"2a04:c900:3000::/36", "48096"}, + {"2a0e:fd45:b50::/47", "207722"}, + {"2604:6e00:800::/37", "13977"}, + {"2610:a1:1001::/48", "397228"}, + {"2804:1068::/32", "263634"}, + {"2001:559:c151::/48", "33654"}, + {"2404:7c00:50::/32", "45650"}, + {"2405:600:5001::/32", "55805"}, + {"2409:8c62:ff01::/40", "9808"}, + {"2600:140f:c401::/38", "20940"}, + {"2604:c880::/41", "46455"}, + {"2806:2f0:30e3::/39", "17072"}, + {"2a02:26f7:d150::/48", "36183"}, + {"2a02:838a:50::/29", "8412"}, + {"2a05:a884:10::/48", "51964"}, + {"2001:559:c0c0::/48", "7016"}, + {"2001:559:c191::/48", "13367"}, + {"2001:67c:2ad0::/48", "60053"}, + {"2409:893e::/25", "9808"}, + {"2600:6c10:ff23::/45", "20115"}, + {"2804:1f4c::/32", "269175"}, + {"2a06:8e01:1::/46", "44103"}, + {"2a0d:f47::/32", "39080"}, + {"2001:1a11:cc::/43", "42298"}, + {"2403:9800:b017::/48", "4648"}, + {"2409:4014:1000::/34", "55836"}, + {"2620:10a:a000::/47", "16920"}, + {"2620:149:1a10::/39", "714"}, + {"2804:cb0:8889::/34", "52742"}, + {"2804:47a8::/32", "267069"}, + {"2a05:9f04::/42", "210374"}, + {"2a0a:e5c0:22::/48", "213081"}, + {"2a0d:2683::/36", "207268"}, + {"2001:da8:3029::/48", "23910"}, + {"240a:a969::/32", "145059"}, + {"2606:a300:3::/45", "35847"}, + {"2a06:cd40:100::/48", "43927"}, + {"2001:678:15c::/48", "209616"}, + {"2804:7a64::/34", "271368"}, + {"2001:4878:a215::/46", "12222"}, + {"2a0a:7e80::/29", "203203"}, + {"2001:559:85c2::/48", "33491"}, + {"2801:80:3520::/48", "268844"}, + {"2a05:f080::/29", "38919"}, + {"2001:559:c36b::/48", "7922"}, + {"2001:5f8:7f0d::/48", "399693"}, + {"2001:c20:11::/44", "3758"}, + {"2408:8459:4a50::/37", "17816"}, + {"240a:a181::/32", "143035"}, + {"2a06:bcc0:9::/48", "203724"}, + {"2a09:a4c1::/32", "208861"}, + {"2a0a:4940:10::/48", "208972"}, + {"2408:8956:8c00::/40", "17622"}, + {"2a0a:e700::/32", "3292"}, + {"2001:1248:980f::/43", "11172"}, + {"2606:4700:81c0::/44", "13335"}, + {"2a0b:b600:3802::/47", "57758"}, + {"2001:253:135::/48", "142101"}, + {"2001:559:59a::/45", "33659"}, + {"2406:9b80::/32", "132585"}, + {"2a0b:680::/29", "43853"}, + {"2001:559:1ca::/48", "7922"}, + {"2620:110:7000::/44", "13880"}, + {"2804:6f1c::/32", "270639"}, + {"2a07:b8c3:5::/32", "14043"}, + {"2001:1a11:127::/44", "42298"}, + {"2804:18:840::/44", "10429"}, + {"2a07:7140::/29", "202907"}, + {"2a0c:9a40:1009::/48", "34927"}, + {"2001:559:c0eb::/48", "33287"}, + {"2407:c8c0::/32", "134026"}, + {"240a:a2ae::/32", "143336"}, + {"240a:a2b4::/32", "143342"}, + {"2607:f4b8::/32", "22438"}, + {"2804:14d:1885::/44", "28573"}, + {"2a00:1690::/32", "44123"}, + {"2607:f7c8:701::/32", "36221"}, + {"2a01:5041:400e::/48", "202196"}, + {"2a01:6d80:2000::/36", "15683"}, + {"2001:67c:2660::/48", "205016"}, + {"2a03:9700::/32", "20847"}, + {"2400:7fc0:4000::/40", "55960"}, + {"2401:d800:f980::/42", "7552"}, + {"2408:8256:399c::/48", "17816"}, + {"240a:a1bc::/32", "143094"}, + {"2800:5f0:806::/44", "22724"}, + {"2402:800:7c20::/41", "7552"}, + {"2404:63c0:20::/44", "131645"}, + {"2406:3003:2050::/44", "4657"}, + {"2408:840c:6800::/40", "17621"}, + {"2a0b:b82::/44", "7489"}, + {"2001:559:c0b7::/48", "7015"}, + {"2001:1b70:82b0::/46", "158"}, + {"2401:cf80:6109::/40", "55303"}, + {"240a:aba9::/32", "145635"}, + {"2801:80:3810::/48", "52885"}, + {"2a09:bac0:181::/48", "13335"}, + {"2001:3c8:130a::/48", "17827"}, + {"2001:678:2c8::/48", "47121"}, + {"2600:1409:5001::/36", "20940"}, + {"2001:559:c305::/48", "33657"}, + {"2404:f780:4::/47", "136557"}, + {"2408:8459:52c0::/37", "17816"}, + {"2600:6c3b:486::/43", "20115"}, + {"2603:f050::/26", "397165"}, + {"2804:30b8:bd::/32", "28154"}, + {"2001:559:8119::/48", "7922"}, + {"2001:559:8254::/48", "33651"}, + {"240e:980:2100::/40", "4811"}, + {"2804:10bc::/37", "263646"}, + {"2001:559:502::/47", "7016"}, + {"2001:dc9::/32", "24252"}, + {"2001:44b8:3a::/48", "7545"}, + {"240a:a01e::/32", "142680"}, + {"240e:3b9:1400::/38", "134773"}, + {"2600:3007:1400::/32", "13649"}, + {"2a02:26f7:d849::/46", "20940"}, + {"2001:4168::/32", "31424"}, + {"2408:8256:3d60::/44", "17623"}, + {"2001:250:20d::/46", "23910"}, + {"2001:43f8:790::/48", "6968"}, + {"2401:4900:22f0::/39", "45609"}, + {"2408:8956:4b00::/40", "17816"}, + {"2409:8c15:2000::/40", "9808"}, + {"2606:4dc0:4::/32", "399077"}, + {"2a02:26f7:c944::/48", "36183"}, + {"2001:4408:1090::/39", "4758"}, + {"2401:d1c0:8000::/33", "136994"}, + {"240a:a921::/32", "144987"}, + {"2620:4:c000::/48", "20126"}, + {"2804:320c::/32", "265053"}, + {"2a01:c9c0:801c::/48", "2285"}, + {"2a02:26f7:f685::/46", "20940"}, + {"2c0f:f010:8001::/33", "37236"}, + {"2405:ec0:2000::/36", "132768"}, + {"2409:8d1a::/32", "132525"}, + {"240a:a8eb::/32", "144933"}, + {"2a0a:eb00::/29", "212238"}, + {"2001:559:8236::/48", "7922"}, + {"240a:a509::/32", "143939"}, + {"2600:370f:3084::/46", "32261"}, + {"2600:8807:ab22::/40", "22773"}, + {"2607:f570::/32", "13326"}, + {"2a02:1758::/29", "39781"}, + {"240a:abde::/32", "145688"}, + {"2600::/47", "1239"}, + {"2a00:1700::/32", "15672"}, + {"2a07:9f00::/29", "204044"}, + {"2a0c:4280::/32", "20866"}, + {"2a12:d980::/32", "49490"}, + {"2408:84f3:9210::/42", "134543"}, + {"240e:698:2b00::/33", "4134"}, + {"2a02:e980:10c::/46", "19551"}, + {"2001:559:826e::/47", "7922"}, + {"2001:559:c440::/48", "20214"}, + {"2001:18b8:6::/44", "29789"}, + {"2a0a:700::/29", "49720"}, + {"2a0f:9400:7350::/48", "14570"}, + {"2001:559:c10a::/48", "21508"}, + {"2403:80::/32", "134623"}, + {"2405:6e00:22ef::/43", "133612"}, + {"2408:8459:cb10::/42", "17623"}, + {"2620:34:c000::/48", "32031"}, + {"2804:7794::/32", "271187"}, + {"2a0b:81c0::/29", "206893"}, + {"2001:4830:c0c0::/44", "3384"}, + {"2406:6e00:f048::/48", "10310"}, + {"240a:aecd::/32", "146439"}, + {"240e:438:7c20::/43", "140647"}, + {"2606:3000:e000::/35", "30295"}, + {"2607:f7a0:b::/43", "46562"}, + {"2804:7b08::/32", "271407"}, + {"2001:559:70f::/48", "33491"}, + {"240a:a6da::/32", "144404"}, + {"2606:f900:9002::/36", "812"}, + {"2804:2360::/32", "264158"}, + {"2001:67c:2b6c::/48", "3301"}, + {"2001:df3:7e00::/48", "135555"}, + {"2403:5f40:1::/48", "58869"}, + {"240a:a1cd::/32", "143111"}, + {"2607:fc48:808::/48", "40009"}, + {"2800:160:10cf::/43", "14259"}, + {"2001:1248:5ac5::/43", "11172"}, + {"2804:0:1c01::/33", "2716"}, + {"2804:984::/33", "263097"}, + {"2a02:26f7:ee8c::/48", "36183"}, + {"2401:d800:9fd0::/42", "7552"}, + {"2409:8074:30f2::/44", "9808"}, + {"2a01:c50f:f3c0::/37", "12479"}, + {"2a02:26f7:cd56::/42", "20940"}, + {"2a0e:fd45:40f2::/48", "41108"}, + {"2a10:5b00::/29", "208256"}, + {"2404:cc00:999a::/33", "24441"}, + {"240a:a06d::/32", "142759"}, + {"240a:ab38::/32", "145522"}, + {"2800:484:8a00::/40", "14080"}, + {"2806:2f0:40c3::/43", "17072"}, + {"2a10:c941:0:2::/43", "35277"}, + {"2001:559:1f8::/47", "33659"}, + {"2001:559:81ad::/46", "7922"}, + {"2806:370:8060::/40", "28403"}, + {"2001:559:80e6::/48", "33657"}, + {"2001:579:b984::/37", "22773"}, + {"2400:cd00:1044::/48", "138911"}, + {"2405:9800:d002::/48", "45430"}, + {"2800:3d0::/32", "2688"}, + {"2804:31d4::/32", "53139"}, + {"2806:2f0:9323::/41", "17072"}, + {"2a03:1ac0:2e92::/48", "12768"}, + {"2c0f:f7a8:8150::/48", "4134"}, + {"2600:1009:f010::/40", "22394"}, + {"2600:6c38:63e::/47", "20115"}, + {"2606:6080:2004::/46", "32489"}, + {"2a00:c5e0::/32", "198399"}, + {"2a02:26f7:d480::/48", "36183"}, + {"2a0a:7e40::/46", "206056"}, + {"2a0b:1306:6::/47", "198018"}, + {"2001:678:b48::/48", "208008"}, + {"2409:8752:1100::/31", "56047"}, + {"2804:2bf4::/32", "262785"}, + {"2804:4a78::/32", "267242"}, + {"2a0f:68c0::/29", "60781"}, + {"2a02:2870::/33", "25459"}, + {"2a0a:5580:1002::/47", "208687"}, + {"2a0a:6040:407f::/32", "61138"}, + {"2001:898::/29", "15879"}, + {"2001:9b8:3::/32", "6774"}, + {"2408:840c:ad00::/40", "17621"}, + {"2a02:26f7:e2c5::/46", "20940"}, + {"2a0f:607:1054::/48", "212360"}, + {"2c0f:f668::/32", "37519"}, + {"2401:4900:47d0::/44", "45609"}, + {"2401:d800:2402::/40", "7552"}, + {"2600:6000:f003::/48", "11351"}, + {"2606:73c0::/32", "15169"}, + {"2607:3500:f00::/40", "11228"}, + {"2804:6c20::/32", "270447"}, + {"2804:7944::/32", "271295"}, + {"2001:559:80b8::/48", "33659"}, + {"2602:fea5::/36", "35859"}, + {"2603:90f5:b::/48", "11426"}, + {"2804:a4::/32", "53089"}, + {"2a07:3404::/32", "396931"}, + {"2001:559:311::/48", "33491"}, + {"2a06:a000:160::/44", "208046"}, + {"2a0a:5340:ffff::/48", "3320"}, + {"2a0d:5040::/31", "8315"}, + {"2804:21f8:500::/32", "262272"}, + {"2806:2f0:81e0::/38", "17072"}, + {"2a0f:1300::/29", "57675"}, + {"240a:a02b::/32", "142693"}, + {"240a:a987::/32", "145089"}, + {"2600:809:424::/48", "397601"}, + {"2a00:60c0::/32", "34461"}, + {"2a03:ef42::/33", "57218"}, + {"2a0d:7c0::/29", "29262"}, + {"2403:4700::/47", "23728"}, + {"2406:a900:144::/47", "136409"}, + {"2408:8459:6e50::/35", "17816"}, + {"240a:a478::/32", "143794"}, + {"2400:cb00:302::/48", "395747"}, + {"2806:20d:3603::/40", "32098"}, + {"2a06:8380::/29", "212526"}, + {"2001:ac8:36::/44", "9009"}, + {"240a:ae68::/32", "146338"}, + {"2a02:26f7:de0d::/42", "20940"}, + {"2001:559:c3ac::/48", "33287"}, + {"2800:110::/44", "4270"}, + {"2a01:56c1:10::/44", "198864"}, + {"2a02:26f7:15::/48", "20940"}, + {"2a0e:1700::/31", "204135"}, + {"2a0f:b104::/48", "213110"}, + {"2001:e60:a330::/40", "4766"}, + {"2600:1407:5::/48", "18717"}, + {"2800:160:157a::/40", "14259"}, + {"2a0b:3c40:24::/48", "204402"}, + {"2804:c48:e300::/36", "52687"}, + {"2804:3f10::/33", "262566"}, + {"2a02:2e02:8c80::/43", "12479"}, + {"2804:508:ff20::/40", "52999"}, + {"2a07:3502:1040::/48", "38915"}, + {"2001:559:34b::/48", "7922"}, + {"240a:a38b::/32", "143557"}, + {"2600:300::/25", "7018"}, + {"2602:fde4::/36", "22058"}, + {"2800:bf0:2ac0::/46", "52257"}, + {"2a02:9a0::/32", "48514"}, + {"2a02:26f7:f08c::/48", "36183"}, + {"2001:559:83d1::/48", "7922"}, + {"2001:559:c2ef::/48", "7016"}, + {"2001:1a11:12::/44", "8781"}, + {"240e:438:1a40::/37", "4134"}, + {"2a02:26f7:9::/48", "20940"}, + {"2a02:26f7:74::/48", "36183"}, + {"2a02:5f83::/32", "39811"}, + {"2001:559:80b9::/46", "33287"}, + {"2806:2f0:71c1::/46", "17072"}, + {"2a05:a3c0::/29", "201127"}, + {"2a10:de40::/29", "34907"}, + {"2602:fcc2::/36", "399289"}, + {"2804:5cbc:fa00::/42", "52795"}, + {"2a02:e00:ffe8::/48", "43289"}, + {"2001:579:91b0::/41", "22773"}, + {"2401:4900:3670::/40", "45609"}, + {"2401:ec00::/32", "24349"}, + {"2600:9000:f110::/48", "16509"}, + {"2620:135:f000::/44", "393468"}, + {"2803:3040::/32", "27660"}, + {"2a0d:5600:66::/44", "9009"}, + {"2408:8956:b100::/40", "17816"}, + {"2604:2d80:c02c::/46", "30036"}, + {"2a12:4946:1600::/48", "211398"}, + {"2001:250:6413::/45", "24367"}, + {"2001:1998:4000::/32", "7843"}, + {"2404:f4c0:8867::/44", "210384"}, + {"2407:500:502::/47", "58940"}, + {"240a:afd4::/32", "146702"}, + {"2610:1d0::/32", "40068"}, + {"2a02:9b0:8005::/33", "35819"}, + {"2a05:abc0::/29", "43260"}, + {"2a0f:9c40::/29", "206983"}, + {"2001:559:8429::/48", "7015"}, + {"2001:918:ff5d::/48", "15398"}, + {"2804:2058::/32", "264487"}, + {"2806:370:7150::/40", "28403"}, + {"2001:550:220c::/46", "174"}, + {"2001:4878:8356::/48", "12222"}, + {"2409:8062:3900::/28", "9808"}, + {"2a00:d260::/29", "15600"}, + {"2a0f:2c80:1::/48", "25369"}, + {"2001:67c:16d0::/47", "44574"}, + {"2401:d800:d1f0::/38", "7552"}, + {"2404:7500::/32", "58655"}, + {"240a:a5bd::/32", "144119"}, + {"2620:78:8000::/48", "53280"}, + {"2804:45d8::/32", "266953"}, + {"2401:fbc0::/32", "134922"}, + {"2409:8c54:1040::/43", "9808"}, + {"240a:adf0::/32", "146218"}, + {"2a07:1a80::/48", "48767"}, + {"2a0e:aa07:f041::/46", "208993"}, + {"2001:559:8162::/48", "33491"}, + {"2804:2f30:fd00::/38", "53096"}, + {"2806:20d:1631::/45", "32098"}, + {"2a02:26f7:eb08::/48", "36183"}, + {"2a06:9681::/32", "203954"}, + {"2402:800::/35", "7552"}, + {"2606:7d80:1000::/33", "16399"}, + {"2806:2f0:2140::/48", "17072"}, + {"2a09:900:100::/38", "15576"}, + {"240a:add2::/32", "146188"}, + {"2801:80:300::/48", "53039"}, + {"2a00:cb60:1::/48", "47488"}, + {"2a02:2208:2::/29", "6697"}, + {"2a02:2d20::/32", "202096"}, + {"2a0d:c0c0:4e1::/48", "59439"}, + {"2604:af80:1c48::/34", "18859"}, + {"2a00:af60::/32", "199364"}, + {"2a02:26f7:96::/48", "36183"}, + {"2a11:f100::/29", "400522"}, + {"2001:559:8221::/48", "7922"}, + {"240a:a242::/32", "143228"}, + {"2602:fc33::/36", "40281"}, + {"2804:7f6:8000::/33", "18881"}, + {"2804:2e80::/32", "265349"}, + {"2a01:430::/43", "24971"}, + {"2a10:2c80::/32", "58010"}, + {"2001:250:6c44::/38", "23910"}, + {"2001:559:c3ee::/48", "33287"}, + {"2001:42a0::/32", "6083"}, + {"2400:7400:38::/48", "38044"}, + {"2400:a040::/44", "136237"}, + {"240e:109:8042::/48", "58466"}, + {"2600:1900:4000::/39", "396982"}, + {"2602:fcb5::/36", "51999"}, + {"2603:f8f8::/23", "397165"}, + {"2a00:1288:81::/46", "10310"}, + {"2408:8956:9900::/40", "17816"}, + {"2402:800:531d::/42", "7552"}, + {"2407:4940::/48", "140770"}, + {"240a:a041::/32", "142715"}, + {"2804:3b74::/32", "266150"}, + {"2804:5abc::/32", "268792"}, + {"2402:aa40::/32", "137330"}, + {"2603:fb50::/26", "397165"}, + {"2a02:ba8::/32", "15894"}, + {"2400:fc00:4110::/38", "45773"}, + {"2a02:26f7:c144::/48", "36183"}, + {"2a0e:97c0:1b0::/46", "211840"}, + {"2001:559:779::/48", "22909"}, + {"2001:918:ff75::/48", "3303"}, + {"2401:d800:9720::/41", "7552"}, + {"2408:8956:5500::/40", "17816"}, + {"2409:e:e3::/31", "55824"}, + {"240e:e:c000::/37", "58540"}, + {"2a02:26f7:10e::/48", "36183"}, + {"240a:a167::/32", "143009"}, + {"240a:ae59::/32", "146323"}, + {"2610:160:12::/32", "27325"}, + {"2605:9080::/32", "54858"}, + {"2a02:26f7:bd89::/46", "20940"}, + {"2a0e:b107:b8f::/48", "212995"}, + {"2001:4818:3000::/36", "40341"}, + {"2804:2d2c:fc00::/38", "52971"}, + {"2804:4458::/32", "267627"}, + {"2804:55c4::/32", "267955"}, + {"2a02:26f7:ef84::/48", "36183"}, + {"2001:559:47e::/48", "7725"}, + {"2001:1260:10::/39", "13591"}, + {"2001:b000:594::/48", "131660"}, + {"240a:a071::/32", "142763"}, + {"2801:1f0:404a::/45", "3573"}, + {"2a02:26f7:ec8c::/48", "36183"}, + {"2405:6e00:620::/43", "18291"}, + {"2408:8456:cf00::/42", "17622"}, + {"2606:ae00:cc31::/41", "7287"}, + {"2620:1e8:3::/45", "29802"}, + {"2a02:2e02:13c0::/37", "12479"}, + {"2a07:4a40::/29", "57795"}, + {"2600:1014:a000::/43", "6167"}, + {"2600:140b:201::/37", "20940"}, + {"2620:5e:e000::/48", "396088"}, + {"2804:2f8c::/32", "264898"}, + {"2806:2f0:61e1::/46", "17072"}, + {"2001:df6:1300::/48", "138117"}, + {"2400:b200:4104::/32", "37963"}, + {"2409:8c34:1000::/33", "9808"}, + {"240e:108:11e2::/48", "4816"}, + {"2001:16b8:db00::/34", "8881"}, + {"2409:804f:3100::/36", "9808"}, + {"240a:a199::/32", "143059"}, + {"2607:b400:a03::/32", "40220"}, + {"2620:0:b60::/48", "17204"}, + {"2804:69b0:50::/42", "270285"}, + {"2a09:6280:1::/48", "56603"}, + {"2620:11c:f004::/48", "393667"}, + {"2800:340::/32", "5692"}, + {"2802::/43", "18747"}, + {"2803:6600::/31", "28075"}, + {"2804:9d4:3001::/33", "262996"}, + {"2a0e:b107:120f::/48", "142130"}, + {"2001:559:7e0::/48", "7922"}, + {"2001:67c:1850::/48", "16086"}, + {"2405:1c0:6231::/45", "55303"}, + {"2407:9800::/30", "10139"}, + {"2605:ac80::/32", "33481"}, + {"2001:1978:801::/48", "21775"}, + {"2803:8d80:5002::/32", "11664"}, + {"2a05:15c0::/29", "201600"}, + {"2402:800:33d3::/44", "7552"}, + {"2804:58f0::/32", "268159"}, + {"2804:7818::/32", "271220"}, + {"2a02:26f7:f388::/48", "36183"}, + {"2a07:ad80::/29", "46261"}, + {"2001:250:101f::/48", "24364"}, + {"2408:80ea:7600::/41", "17816"}, + {"2408:8459:de50::/34", "17816"}, + {"240a:a1b6::/32", "143088"}, + {"240e:44d:6980::/41", "4134"}, + {"2804:3018::/32", "263020"}, + {"2a02:26f7:bf44::/48", "36183"}, + {"2001:49f0:d0ff::/48", "174"}, + {"2401:d800:d1b2::/41", "7552"}, + {"2402:800:613a::/41", "7552"}, + {"2408:8957:7000::/40", "17622"}, + {"2409:8a53:1100::/32", "56047"}, + {"240e:7b2::/36", "140313"}, + {"2804:3f64::/32", "265890"}, + {"2a0e:97c3:7fc::/48", "20473"}, + {"2001:559:80f6::/48", "7015"}, + {"2001:559:86dc::/47", "33651"}, + {"240a:a440::/32", "143738"}, + {"2600:1fa0:1020::/44", "16509"}, + {"2804:ae0:2b00::/37", "28352"}, + {"2804:184c::/39", "61928"}, + {"2800:1e0:c02::/39", "7195"}, + {"2a07:cb84::/32", "28878"}, + {"2a0e:97c7:d9::/45", "20473"}, + {"2001:7fb:fd02::/47", "12654"}, + {"2400:e2::/31", "4766"}, + {"240a:afeb::/32", "146725"}, + {"2806:230:2018::/48", "265594"}, + {"2400:1360:c000::/34", "147051"}, + {"2408:8459:ea30::/41", "17622"}, + {"2408:84f3:e040::/38", "17816"}, + {"2408:8957:5200::/40", "17622"}, + {"2409:8020:2902::/35", "56046"}, + {"2605:a401:80b8::/47", "33363"}, + {"2803:f080:8900::/43", "64120"}, + {"2a00:79e0:502::/47", "45566"}, + {"2a0e:afc0::/29", "207902"}, + {"2a0e:b107:b15::/48", "212580"}, + {"2400:9940:1003::/34", "136224"}, + {"2407:f700::/36", "132215"}, + {"2a02:26f0:1e00::/48", "34164"}, + {"2405:9f80::/32", "134743"}, + {"2804:3264::/32", "265075"}, + {"2a0c:e000::/31", "31054"}, + {"2001:b08:1a::/45", "3267"}, + {"2409:4052:1000::/34", "55836"}, + {"2804:5518::/32", "268689"}, + {"2806:213::/32", "33182"}, + {"2a02:26f7:c549::/42", "20940"}, + {"240e:3ba:1200::/39", "4134"}, + {"2a02:2698:402a::/47", "56377"}, + {"2001:559:393::/48", "33490"}, + {"2001:67c:644::/48", "58343"}, + {"2001:67c:708::/48", "50629"}, + {"240e:44d:7300::/42", "140345"}, + {"2a0c:e840::/29", "202701"}, + {"240a:a0f6::/32", "142896"}, + {"240a:ac97::/32", "145873"}, + {"2a02:2e0:3ff::/37", "12306"}, + {"2a03:a7a0:3::/32", "203316"}, + {"2401:df40:1::/48", "23734"}, + {"240a:acd2::/32", "145932"}, + {"2a02:26f7:cbc8::/48", "36183"}, + {"2a02:26f7:f608::/48", "36183"}, + {"2600:1000:b100::/41", "6167"}, + {"2a00:16f8:e::/48", "397942"}, + {"2a01:a7e0:1000::/36", "29422"}, + {"2001:1248:56da::/47", "11172"}, + {"240a:a159::/32", "142995"}, + {"240a:ab22::/32", "145500"}, + {"2607:b600::/46", "10397"}, + {"2a00:b5c0::/32", "57910"}, + {"2a02:af8::/32", "29550"}, + {"2a0d:b600::/29", "48642"}, + {"2001:470:2c::/46", "6939"}, + {"2600:1404:801::/35", "20940"}, + {"2a00:97c0::/32", "13243"}, + {"2a02:26f7:ec84::/48", "36183"}, + {"2a04:4e40:8210::/44", "54113"}, + {"2408:8459:f500::/40", "17623"}, + {"2800:ba0:26::/48", "263812"}, + {"2a01:b700::/32", "45011"}, + {"2607:fb58:d200::/47", "53933"}, + {"2800:530::/32", "52233"}, + {"2804:3f14::/32", "266638"}, + {"2a02:2e02:f60::/40", "12479"}, + {"240a:a1b4::/32", "143086"}, + {"2600:370f:7262::/45", "32261"}, + {"2a02:2ab8:130::/38", "702"}, + {"2600:1f1f::/36", "16509"}, + {"2a02:26f7:bac1::/46", "20940"}, + {"2001:579:e360::/40", "22773"}, + {"2408:400e:24::/32", "37963"}, + {"2605:3a00::/47", "22768"}, + {"2605:a900:4806::/47", "46887"}, + {"2001:468:365::/37", "11537"}, + {"240e:87c:c0::/38", "137692"}, + {"2804:5350::/45", "268576"}, + {"2a02:26f7:d101::/46", "20940"}, + {"2a06:5484::/30", "43754"}, + {"2001:1248:9932::/44", "11172"}, + {"2401:4900:4d20::/44", "45609"}, + {"2406:3001:22:a::/59", "4657"}, + {"2605:a404:105::/41", "33363"}, + {"2806:3aa::/32", "265627"}, + {"2001:559:c4a0::/48", "33287"}, + {"2804:3280::/32", "265082"}, + {"2a04:a147::/32", "198507"}, + {"2001:550:2800:101::/48", "174"}, + {"2a04:a8c0::/29", "33438"}, + {"2a04:ce00::/29", "21412"}, + {"2a05:6280:dead::/48", "201349"}, + {"2001:4d0:6318::/48", "10343"}, + {"2001:57a:8202::/35", "22773"}, + {"2803:cae0::/48", "270046"}, + {"2a00:1197::/32", "206364"}, + {"2a01:2e1:ffff:7::/28", "8374"}, + {"2a02:7340::/32", "44838"}, + {"2001:559:c31e::/48", "33287"}, + {"2a00:79e1:f0f::/43", "36384"}, + {"2a07:7800:3::/45", "48254"}, + {"2600:6c38:8ca::/45", "20115"}, + {"2800:160:1c71::/45", "14259"}, + {"2803:8960:105::/32", "269736"}, + {"2a04:4e42:401::/38", "54113"}, + {"2a10:1e00::/32", "208245"}, + {"2001:559:76c::/48", "7922"}, + {"2001:5a0:3904::/38", "6453"}, + {"2001:7b8:407::/29", "12859"}, + {"2409:8020:3052::/42", "56046"}, + {"2600:140f:200::/48", "9498"}, + {"2806:2f0:1063::/43", "17072"}, + {"2620:3f:a000::/48", "18696"}, + {"2806:2f0:71a3::/41", "17072"}, + {"2a02:cb80:2910::/48", "43766"}, + {"2a07:1fc0::/29", "42970"}, + {"2001:1248:5a91::/44", "11172"}, + {"2409:8714:8a00::/31", "56044"}, + {"240a:a647::/32", "144257"}, + {"2602:feda:d51::/48", "141712"}, + {"2804:822c::/32", "272503"}, + {"2a02:26f7:ec80::/48", "36183"}, + {"2001:250:7005::/48", "24370"}, + {"2001:1248:88b2::/41", "11172"}, + {"2408:8256:398::/37", "17622"}, + {"2603:f8f0::/29", "40676"}, + {"2607:fc28:7000::/32", "22911"}, + {"2800:bf0:2426::/43", "27947"}, + {"2a02:26f7:d158::/47", "36183"}, + {"2a0b:6300::/29", "33983"}, + {"2a0c:a480::/29", "47777"}, + {"2001:67c:1bec::/48", "59624"}, + {"2600:100a:b000::/42", "6167"}, + {"2600:370f:4060::/43", "32261"}, + {"2600:6c10:613::/41", "20115"}, + {"2a10:5c40::/29", "59441"}, + {"2001:c20:c824::/46", "9255"}, + {"2400:addc::/39", "9541"}, + {"2607:fd28:a010::/47", "3725"}, + {"2a00:f10:141::/48", "29290"}, + {"2a0a:d6c0:2035::/48", "203564"}, + {"2a00:7b00:1a::/32", "12338"}, + {"2a02:2280::/29", "12924"}, + {"2a0d:5600:70::/46", "9009"}, + {"2400:8500:d29d::/48", "7506"}, + {"2606:2800:6070::/46", "15133"}, + {"2607:fb10:2025::/43", "2906"}, + {"2806:2f0:71c3::/42", "17072"}, + {"2a01:81e0:3::/32", "174"}, + {"2a03:522::/32", "201419"}, + {"2a03:2887:ff35::/48", "63293"}, + {"240e:16:c801::/31", "4134"}, + {"240e:ff:c006::/48", "140308"}, + {"2606:a240::/32", "400354"}, + {"2806:1018:cbff:100::/48", "8151"}, + {"2402:f700::/34", "23907"}, + {"2607:d400::/46", "22364"}, + {"2803:6900:520::/48", "52423"}, + {"2806:2f0:60e3::/39", "17072"}, + {"240a:a0c6::/32", "142848"}, + {"2604:85c0:a::/32", "16524"}, + {"2620:11b:1000::/40", "32274"}, + {"2804:6f28::/32", "270642"}, + {"2a07:a343:94d0::/44", "9009"}, + {"2402:d600::/32", "17948"}, + {"2404:4e00:104::/47", "32787"}, + {"240a:a6c1::/32", "144379"}, + {"2607:fdf8:300::/40", "20284"}, + {"2804:145c:c410::/39", "263327"}, + {"2001:559:439::/48", "33287"}, + {"2001:df0:a300::/48", "17990"}, + {"2605:3380:4309::/48", "12025"}, + {"2607:fd60:c938::/48", "6188"}, + {"2a00:4802:5000::/44", "13124"}, + {"2a02:26f7:c3e0::/48", "36183"}, + {"2a07:4300:1609::/48", "209622"}, + {"2a0d:5600:20::/44", "9009"}, + {"2a10:e800:3::/48", "204170"}, + {"2405:6e00:2f2::/44", "133612"}, + {"2a02:26f7:d24c::/48", "36183"}, + {"2a04:a240::/32", "61351"}, + {"2a0a:90c0:1002::/43", "205080"}, + {"2402:1b40:1002::/48", "7628"}, + {"240a:a00c::/32", "142662"}, + {"240e:a7:7fd8::/46", "140516"}, + {"2804:32b8::/32", "265095"}, + {"2a0a:eac2::/48", "60330"}, + {"240a:a9cf::/32", "145161"}, + {"240a:aae3::/32", "145437"}, + {"2804:520::/47", "262496"}, + {"2a02:750:9::/43", "42708"}, + {"2001:500:13f::/48", "396574"}, + {"2001:559:7a7::/48", "21508"}, + {"2402:800:99b7::/41", "7552"}, + {"2404:3d00:40f2::/45", "3573"}, + {"2a0f:85c1:80::/48", "209735"}, + {"2001:559:710::/48", "33657"}, + {"2400:cb00:445::/44", "13335"}, + {"2404:e680:1121::/41", "18409"}, + {"2405:7f00:9d00::/38", "133414"}, + {"2402:fbc0::/44", "134014"}, + {"2801:80:f80::/44", "264261"}, + {"2804:6248::/32", "269288"}, + {"2607:f358:c::/43", "18779"}, + {"2a06:f901:8000::/36", "8849"}, + {"2001:4b98:abcc::/33", "29169"}, + {"2401:3bc0:7::/44", "137409"}, + {"2602:fff6:1::/46", "8100"}, + {"2607:6b80:36::/48", "9009"}, + {"2610:b0:4032::/45", "3573"}, + {"2a02:6f80::/29", "8851"}, + {"2408:8957:8600::/40", "17622"}, + {"240e:980:9700::/40", "4134"}, + {"2607:8a00::/32", "7212"}, + {"2800:160:142a::/45", "14259"}, + {"2806:2f0:6161::/46", "17072"}, + {"2a04:1b00:6::/47", "61007"}, + {"2a04:4e40:9e00::/48", "54113"}, + {"240a:a5c0::/32", "144122"}, + {"2602:fcf7::/36", "398942"}, + {"2806:327::/32", "265573"}, + {"2a02:ff0:3300::/40", "12735"}, + {"2a06:4480::/29", "200430"}, + {"2a0d:b700::/48", "210984"}, + {"2a0e:fa40::/47", "56970"}, + {"2001:678:f64::/48", "16509"}, + {"2403:b080::/32", "17964"}, + {"240a:a8c8::/32", "144898"}, + {"2603:c001:2c10::/38", "31898"}, + {"2a0f:ab40::/32", "207797"}, + {"2001:470:e6::/48", "47787"}, + {"240a:a20a::/32", "143172"}, + {"240e:44d:6200::/41", "140345"}, + {"2600:6c38:70c::/46", "20115"}, + {"2602:800::/44", "397614"}, + {"2a01:5043:2003::/48", "202196"}, + {"240e:983:1807::/44", "4134"}, + {"2600:6c10:11::/44", "20115"}, + {"2605:6440:1000::/44", "396356"}, + {"2a02:16d0::/32", "49855"}, + {"2a03:2880:f144::/47", "32934"}, + {"2401:d800:f230::/41", "7552"}, + {"2408:8456:2240::/39", "17816"}, + {"2804:5268:200::/32", "268516"}, + {"2804:6688::/32", "269566"}, + {"2a02:f406:ff50::/48", "328778"}, + {"2a0b:e42:1::/48", "205809"}, + {"240a:ad18::/32", "146002"}, + {"2604:6d00:2300::/48", "36223"}, + {"2400:5280:2800::/38", "63199"}, + {"2404:bf40:a581::/46", "139084"}, + {"2a02:26f7:d18d::/46", "20940"}, + {"2a02:888:47::/48", "47794"}, + {"2a02:26f7:e911::/46", "20940"}, + {"2a05:b304::/30", "60781"}, + {"2a09:7c46::/32", "200019"}, + {"2a0b:f380:3e8::/48", "49544"}, + {"2402:4440:a001::/36", "24423"}, + {"2406:e000:301::/42", "23655"}, + {"240a:ae8e::/32", "146376"}, + {"2620:13::/48", "11647"}, + {"2a05:b2c2::/31", "12414"}, + {"2a10:4d40::/29", "49409"}, + {"2001:3c8:2708::/36", "4621"}, + {"2001:67c:2f70::/48", "3303"}, + {"2001:4878:a356::/48", "12222"}, + {"2403:dc00::/32", "45926"}, + {"2607:fb10:7036::/44", "2906"}, + {"2a03:567::/32", "48314"}, + {"2a03:a920::/32", "211417"}, + {"240d:c010:50::/48", "132591"}, + {"2a00:5ee0::/34", "44925"}, + {"2a0b:c080::/29", "197659"}, + {"2a10:ccc2:12::/44", "35619"}, + {"2001:559:772::/48", "7016"}, + {"2001:df3:6500::/48", "55379"}, + {"2405:7f00:9320::/37", "133414"}, + {"240a:af77::/32", "146609"}, + {"2604:280::/32", "6653"}, + {"2605:9fc0::/32", "396238"}, + {"2a0e:aa07:f088::/48", "211323"}, + {"2801:80:150::/48", "28261"}, + {"2806:2f0:3823::/33", "17072"}, + {"2001:67c:187c::/48", "41496"}, + {"2404:bf40:8380::/48", "7545"}, + {"2600:2c00::/34", "7349"}, + {"2620:153:81::/36", "6498"}, + {"2a02:2ca7::/42", "210662"}, + {"2001:da8:700f::/48", "23910"}, + {"2620:111:1001::/48", "18469"}, + {"2a0e:b107:bb0::/44", "212934"}, + {"240a:a35a::/32", "143508"}, + {"2804:164c:abcc::/33", "263280"}, + {"2804:6e90::/32", "270605"}, + {"2a12:3fc7:8000::/48", "39753"}, + {"2a07:3506:4c::/48", "29311"}, + {"2001:4070:8000::/33", "12831"}, + {"2804:1ae0:3::/32", "61696"}, + {"2a03:2500::/32", "59752"}, + {"2a0f:3e01::/32", "210625"}, + {"2a11:f780::/29", "204790"}, + {"2001:44b8:4068::/48", "7545"}, + {"2a0d:aa80::/29", "60380"}, + {"2c0f:faf0::/32", "11259"}, + {"2001:500:a9::/48", "394018"}, + {"2404:bf40:81c2::/38", "139084"}, + {"2409:8a55:2c00::/35", "9808"}, + {"240e:3b0:1200::/39", "4134"}, + {"2606:2800:4a24::/46", "15133"}, + {"2a00:4802:4e10::/44", "8717"}, + {"2a02:970:1029::/41", "44002"}, + {"2603:c0e8::/39", "1218"}, + {"2605:5c0:c100::/45", "28885"}, + {"2620:c1:8000::/48", "22931"}, + {"2a00:1d48::/32", "12571"}, + {"2a0b:11c0:4074::/47", "198682"}, + {"2001:480:35::/48", "668"}, + {"2001:559:b6::/47", "33287"}, + {"2001:559:47f::/48", "33489"}, + {"240a:ab96::/32", "145616"}, + {"2804:1d90::/32", "264378"}, + {"2804:4454::/32", "267625"}, + {"2804:47d4::/32", "267079"}, + {"2804:7340::/32", "270904"}, + {"2a00:55a0:ea00::/40", "9009"}, + {"2a02:26f7:cf81::/46", "20940"}, + {"2a02:2891:15::/48", "51185"}, + {"2001:559:c31c::/48", "33287"}, + {"2409:896a:4000::/39", "9808"}, + {"2600:6c38:e05::/44", "20115"}, + {"2a00:4960::/32", "42525"}, + {"2a02:26f7:6a::/48", "36183"}, + {"2a02:26f7:bd49::/46", "20940"}, + {"2a0d:4c40::/29", "61317"}, + {"2001:559:2e5::/46", "33651"}, + {"2401:2a80::/47", "58793"}, + {"2406:bb00::/29", "10010"}, + {"2804:2078::/32", "264492"}, + {"2a02:730:2::/35", "29278"}, + {"2a04:e00:104::/48", "39855"}, + {"2001:579:6240::/40", "22773"}, + {"2402:800:9347::/43", "7552"}, + {"2804:2634:2110::/32", "264332"}, + {"2804:2c88:8100::/33", "265225"}, + {"2a0f:b6c0::/29", "207788"}, + {"2001:559:99::/48", "33659"}, + {"240e:3b9:ac00::/35", "4134"}, + {"2620:134:6000::/46", "30031"}, + {"2a0d:3c46::/32", "62240"}, + {"2804:9f4::/32", "262530"}, + {"2804:1874::/32", "61934"}, + {"240a:a02d::/32", "142695"}, + {"2804:35fc::/32", "266319"}, + {"2a04:4e40:6020::/44", "54113"}, + {"2a0f:85c1:25::/48", "209507"}, + {"2001:1218:6038::/41", "278"}, + {"2409:8904:2ca0::/39", "24547"}, + {"2800:160:12eb::/39", "14259"}, + {"2804:18fc::/32", "61767"}, + {"2a02:9f8:9000::/44", "6900"}, + {"2a05:a882:10::/48", "51964"}, + {"2a0f:5140::/29", "209372"}, + {"2001:2000:3080:2345::/126", "29632"}, + {"2620:2a:c000::/48", "13977"}, + {"2a01:8840:b6::/44", "12041"}, + {"2a02:c647::/32", "61998"}, + {"2a04:4e40:f630::/44", "54113"}, + {"2a06:5040:20::/45", "6134"}, + {"2800:484:ec00::/40", "10620"}, + {"2806:263:a300::/37", "13999"}, + {"2400:9800:16::/44", "24203"}, + {"2606:b580::/32", "18897"}, + {"2610:e0:a040::/44", "3390"}, + {"2620:74:4::/48", "11840"}, + {"2804:4050::/32", "262856"}, + {"2a02:2738::/32", "51088"}, + {"2405:9000:204::/46", "7474"}, + {"240a:a34f::/32", "143497"}, + {"2806:105e:4::/44", "8151"}, + {"2001:559:c1b9::/48", "33652"}, + {"2600:1001:9110::/36", "22394"}, + {"2604:b300:ad04::/48", "174"}, + {"2605:6f40::/32", "207976"}, + {"2a02:26f7:e04d::/42", "20940"}, + {"2a03:2887:ff13::/48", "35819"}, + {"2c0f:f010::/32", "37236"}, + {"2c0f:fa90::/32", "37271"}, + {"2409:8958:c944::/43", "9808"}, + {"2a02:26f7:d4c8::/47", "36183"}, + {"2a04:e802::/43", "57976"}, + {"2a06:c180::/29", "44549"}, + {"2a11:fe80:fac0::/37", "209209"}, + {"2001:1260:10e::/43", "13591"}, + {"2402:800:6502::/36", "7552"}, + {"2408:8459:9050::/38", "17816"}, + {"2408:8459:a850::/38", "17816"}, + {"2600:1408:1a::/47", "20940"}, + {"2602:fe90:500::/40", "35913"}, + {"2804:151:61::/46", "10954"}, + {"2a00:1ec0:4000::/32", "8544"}, + {"2a02:2308:20::/48", "198485"}, + {"240a:a0c2::/32", "142844"}, + {"2a00:5940::/32", "207693"}, + {"2a07:7e00::/29", "34549"}, + {"2001:559:58c::/48", "33660"}, + {"2600:380:f1d4::/42", "20057"}, + {"2a03:9560::/29", "2590"}, + {"2a03:9c40:400::/48", "34655"}, + {"2001:da8:300f::/48", "23910"}, + {"2408:8956:9b00::/40", "17816"}, + {"240a:aa4e::/32", "145288"}, + {"240a:aa9f::/32", "145369"}, + {"2600:1002:9010::/40", "22394"}, + {"2409:8924:5b00::/37", "56046"}, + {"2409:894c::/30", "9808"}, + {"2605:edc0::/32", "398639"}, + {"2804:b18:8900::/37", "52941"}, + {"2001:48f8:f320::/44", "11055"}, + {"2804:744:102::/35", "262632"}, + {"2804:5578::/32", "262328"}, + {"2804:66e0:8000::/33", "269588"}, + {"2a02:2e02:21d0::/38", "12479"}, + {"2a04:eb00::/29", "21412"}, + {"2001:678:fc0::/48", "196944"}, + {"2803:9800:b4c1::/46", "11664"}, + {"2804:14b8::/32", "263346"}, + {"2001:559:5e9::/48", "33650"}, + {"2001:67c:2318::/48", "57057"}, + {"2406:9dc0:10::/44", "207268"}, + {"2804:4b88::/32", "267312"}, + {"2a00:4e00::/33", "15368"}, + {"2a02:26f7:c411::/45", "20940"}, + {"2001:559:c3d3::/48", "33660"}, + {"240a:a5d2::/32", "144140"}, + {"2a01:8d0::/32", "30722"}, + {"2a05:4200:7::/48", "21534"}, + {"2001:559:1e4::/48", "33651"}, + {"2402:d2c0::/46", "136897"}, + {"2408:8456:8240::/39", "17816"}, + {"2603:c001:1c10::/34", "31898"}, + {"2804:4eac::/32", "268276"}, + {"2001:67c:20b0::/48", "49342"}, + {"2a07:22c1:36::/48", "211244"}, + {"2001:1b70:82c0::/48", "158"}, + {"2401:f8c0::/32", "58895"}, + {"2402:8100:3929::/43", "55644"}, + {"2804:5894::/32", "268137"}, + {"2a02:26f7:d681::/46", "20940"}, + {"2001:559:820f::/48", "33659"}, + {"2402:800:63ff::/48", "7552"}, + {"2409:804c:2a::/43", "9808"}, + {"240a:ac68::/32", "145826"}, + {"2606:5b80::/34", "22612"}, + {"2804:63a0::/32", "269373"}, + {"2806:2f0:10a2::/48", "22884"}, + {"2001:1998:3101::/36", "3456"}, + {"2803:1a00:4113::/35", "262186"}, + {"2600:1406:dc01::/38", "20940"}, + {"2a02:cb81:1000::/45", "43766"}, + {"2a09:407:b000::/36", "210625"}, + {"2001:da8:24c::/48", "24348"}, + {"2001:1a68:2f::/43", "15694"}, + {"2404:8d01::/32", "10089"}, + {"2409:8c44:1b01::/28", "24445"}, + {"2600:1408:4000::/48", "35994"}, + {"2600:1fa0:c040::/44", "16509"}, + {"2600:6c38:245::/43", "20115"}, + {"2409:8069:2b06::/47", "9808"}, + {"240a:a147::/32", "142977"}, + {"2603:90f5:9::/46", "20115"}, + {"2605:9d80:9071::/48", "4809"}, + {"2804:49c:4205::/48", "7162"}, + {"2804:10f8::/32", "52783"}, + {"2804:2cc8::/32", "265243"}, + {"2a02:ee80:424f::/48", "3573"}, + {"2001:df6:6480::/48", "142037"}, + {"2408:8256:3086::/48", "17816"}, + {"2605:9100::/32", "20295"}, + {"2803:6de0::/32", "64126"}, + {"2804:2484:8001::/45", "28258"}, + {"2c0f:fed8::/32", "37277"}, + {"240e:108::/43", "58519"}, + {"2400:4a60::/32", "149248"}, + {"2405:b000:600::/36", "6262"}, + {"2603:c0fa:8000::/35", "20054"}, + {"2606:4700:80f0::/44", "13335"}, + {"2803:af80::/35", "263732"}, + {"2804:1510::/32", "262327"}, + {"2a02:26f7:c109::/42", "20940"}, + {"2001:559:83e7::/48", "33659"}, + {"2401:e280:1000::/36", "133114"}, + {"240a:aa0d::/32", "145223"}, + {"240a:ab73::/32", "145581"}, + {"240e:44d:1c00::/41", "140345"}, + {"2804:145c:8030::/41", "263327"}, + {"2804:5da4::/32", "268984"}, + {"2a05:7e84::/30", "50009"}, + {"2600:1f01:4860::/47", "16509"}, + {"2804:62d0::/32", "269320"}, + {"2001:1248:9a3b::/45", "11172"}, + {"2405:a000:13::/48", "55844"}, + {"2804:2bd4::/32", "265178"}, + {"2a0a:340::/40", "48043"}, + {"240a:a85b::/32", "144789"}, + {"2607:fcd0:bbc0::/33", "8100"}, + {"2804:4a88::/32", "267246"}, + {"2806:230:2027::/48", "11888"}, + {"2a02:db80::/29", "48720"}, + {"2001:559:5d8::/48", "33660"}, + {"2400:7400:39::/48", "23736"}, + {"240e:18:50::/48", "4811"}, + {"2804:13d0::/35", "263297"}, + {"2001:559:850b::/48", "7015"}, + {"2a02:26f7:9b::/48", "20940"}, + {"2a03:2880:f26e::/47", "32934"}, + {"2a05:fb44::/32", "59504"}, + {"2001:67c:21f0::/48", "52191"}, + {"2402:b7c0::/32", "63774"}, + {"2404:b0:6000::/32", "4750"}, + {"2610:a1:1074::/48", "397226"}, + {"2402:6880:2000::/48", "63989"}, + {"2409:802f:2c07::/32", "56041"}, + {"2607:f5d8::/46", "11096"}, + {"2804:e0c:180::/48", "28176"}, + {"2404:bf40:ea00::/48", "2764"}, + {"2a0a:d180::/36", "206652"}, + {"2801:16:1000::/48", "264618"}, + {"2001:978:1f00::/48", "43858"}, + {"2402:800:5763::/43", "7552"}, + {"2804:5828::/32", "268110"}, + {"2a00:11c0:66::/44", "42473"}, + {"2a09:ca00::/48", "34534"}, + {"2a0e:b107:770::/48", "213105"}, + {"2001:559:240::/48", "33659"}, + {"2001:fd8:2213::/44", "132199"}, + {"2606:2800:400b::/48", "14153"}, + {"2804:498c::/32", "267190"}, + {"2a02:26f7:c104::/48", "36183"}, + {"2404:b300:11::/46", "131207"}, + {"2804:2e74::/32", "265347"}, + {"2405:cdc0::/32", "131642"}, + {"2406:1840::/32", "140641"}, + {"240a:ab2e::/32", "145512"}, + {"2607:5800::/32", "10320"}, + {"2a01:c9c0:8014::/48", "2285"}, + {"2a02:26f7:b995::/46", "20940"}, + {"2a05:ccc0::/29", "209288"}, + {"2001:579:9104::/40", "22773"}, + {"2401:d800:fb60::/40", "7552"}, + {"2402:800:32d3::/44", "7552"}, + {"2404:ba00:8::/46", "17665"}, + {"2408:8459:5e50::/34", "17816"}, + {"2620:0:2840::/48", "16813"}, + {"2a01:8a40::/32", "8823"}, + {"240e:1:7100::/40", "137698"}, + {"2600:1419:1801::/38", "20940"}, + {"2804:359c:6000::/35", "266296"}, + {"2806:2f0:33c3::/42", "17072"}, + {"2001:44b8:1069::/34", "4739"}, + {"2401:7641::/32", "63778"}, + {"2409:8904:5e70::/40", "24547"}, + {"2620:11:60::/47", "3486"}, + {"2804:4e50::/32", "268253"}, + {"2804:7064::/32", "270724"}, + {"2a05:2a80:2::/29", "200567"}, + {"2001:678:e8c::/48", "212518"}, + {"2001:df0:dc::/48", "38590"}, + {"2407:3e00:4000::/48", "9255"}, + {"2800:550::/45", "7004"}, + {"2a02:2e02:f30::/41", "12479"}, + {"2a06:57c0::/29", "8888"}, + {"2001:388:3049::/43", "7575"}, + {"2001:559:8326::/48", "7725"}, + {"2600:1405:801::/35", "20940"}, + {"2604:6b80::/32", "47020"}, + {"2620:13:a000::/48", "395651"}, + {"2804:14c:7d00::/40", "28573"}, + {"240e:250:300::/40", "141157"}, + {"2804:5d24::/32", "268953"}, + {"2a02:26f7:e401::/46", "20940"}, + {"2001:520:1022::/48", "8103"}, + {"2001:559:248::/48", "33668"}, + {"2001:559:857d::/48", "33651"}, + {"2001:579:110c::/42", "22773"}, + {"2001:1230:103::/32", "13579"}, + {"2604:d600:1526::/44", "32098"}, + {"2620:1d5:c03::/40", "14773"}, + {"2a0c:f7c0::/29", "200374"}, + {"2400:fc00:8040::/39", "45773"}, + {"2408:8459:5c10::/42", "17623"}, + {"240a:ad47::/32", "146049"}, + {"2a01:620:4::/44", "12389"}, + {"2a03:d500::/32", "35754"}, + {"2401:ccc0::/32", "137236"}, + {"2408:8620::/31", "4837"}, + {"2a0b:cb00::/29", "200561"}, + {"2001:559:c3ef::/48", "7922"}, + {"2403:a200::/32", "17428"}, + {"2600:1008:b0f0::/44", "22394"}, + {"2606:4540::/32", "399571"}, + {"2620:122:a000::/40", "394485"}, + {"2605:8900:1000::/36", "3800"}, + {"2a02:26f7:c0c0::/48", "36183"}, + {"2a02:26f7:d804::/48", "36183"}, + {"2a0f:9400:772f::/48", "53356"}, + {"2401:580::/32", "38200"}, + {"2602:fef4:200::/48", "54721"}, + {"2800:160:13a3::/41", "14259"}, + {"2a00:fd8::/32", "22351"}, + {"2a00:d700::/32", "56438"}, + {"2a02:a98::/32", "42017"}, + {"2a0e:8f02:20f7::/44", "212008"}, + {"2001:408:c001::/34", "14793"}, + {"2a01:5b0:31::/32", "8391"}, + {"2a02:2af8:405::/44", "702"}, + {"2001:559:713::/48", "7015"}, + {"2407:d40:10::/32", "139009"}, + {"240e:a7:7fc9::/46", "140511"}, + {"2804:3dac:200::/32", "266546"}, + {"2c0f:e810::/32", "328624"}, + {"2001:1b90::/32", "6908"}, + {"2001:4878:2141::/48", "12222"}, + {"2402:800:5b8d::/43", "7552"}, + {"2606:2800:4a28::/46", "15133"}, + {"2a01:a820::/32", "61042"}, + {"2a02:26f7:73::/48", "20940"}, + {"2a0a:f880::/29", "60111"}, + {"2406:8600:f83f::/41", "10310"}, + {"2804:70c::/32", "262668"}, + {"2a03:b020::/29", "41327"}, + {"2408:8957:ec00::/39", "17622"}, + {"240a:a6dc::/32", "144406"}, + {"2800:160:1ce0::/44", "14259"}, + {"2a02:2d8:1:7808::/64", "35277"}, + {"2a02:26f0:8801::/39", "20940"}, + {"2806:2f0:93c1::/46", "17072"}, + {"240a:a556::/32", "144016"}, + {"2602:fcd3:500::/48", "212934"}, + {"2607:f390:1440::/44", "2055"}, + {"2800:bf0:8150::/44", "27947"}, + {"2001:ee0:8240::/40", "45899"}, + {"2600:6c58::/32", "20115"}, + {"2804:4f8:a005::/44", "28263"}, + {"2a02:26f0:62::/45", "20940"}, + {"2001:559:c425::/46", "7015"}, + {"2607:fb10:503a::/45", "2906"}, + {"2804:51e0::/32", "268482"}, + {"2a02:2e02:9450::/39", "12479"}, + {"2a05:7c00::/29", "201236"}, + {"2001:da8:b800::/47", "24372"}, + {"2402:800:352b::/41", "7552"}, + {"2409:8924:7d00::/38", "56046"}, + {"2600:6c20:59::/42", "20115"}, + {"2804:1b40:2000::/32", "28255"}, + {"2a0e:b107:d00::/44", "212746"}, + {"2001:550:3203::/45", "174"}, + {"2400:cb00:109::/48", "13335"}, + {"2408:8459:c410::/42", "17623"}, + {"240e:438:7840::/38", "4134"}, + {"2604:d600:164b::/45", "32098"}, + {"2804:626c::/32", "269296"}, + {"2806:2f0:2102::/48", "17072"}, + {"2a00:1fd0:ecc0::/46", "29033"}, + {"2a01:448:72::/48", "20559"}, + {"2a02:26f7:ccc1::/46", "20940"}, + {"2a02:2e02:2590::/38", "12479"}, + {"2406:3000:3:2::/61", "4657"}, + {"2409:8050:3000::/47", "56047"}, + {"240e:11:8800::/37", "137695"}, + {"2a00:86c0:101::/38", "2906"}, + {"2a0a:d880::/44", "207306"}, + {"2001:648:2811::/38", "5408"}, + {"240a:a6e5::/32", "144415"}, + {"2804:32b0::/32", "265093"}, + {"2a04:c442:9000::/33", "10725"}, + {"2803:f7e0:2040::/48", "271773"}, + {"2804:1bf0::/45", "61758"}, + {"2a03:67c0::/32", "12703"}, + {"2a0c:b641:16a::/48", "211139"}, + {"2001:678:a84::/48", "208713"}, + {"2409:8057:303d::/48", "56040"}, + {"240e:30c:5600::/31", "4134"}, + {"2600:6c38:742::/45", "20115"}, + {"2803:f240::/32", "61508"}, + {"2a01:110f:5000::/40", "29535"}, + {"2a02:2f0c:8002:4::4/33", "8708"}, + {"2a03:f80:373::/48", "43289"}, + {"240b:400e:fffe::/48", "45102"}, + {"2603:4:1600::/48", "44273"}, + {"2804:337c::/32", "265399"}, + {"2a02:26f7:ded1::/42", "20940"}, + {"2a0a:4c0::/32", "206303"}, + {"2001:468:c80::/48", "1312"}, + {"2001:41c7::/32", "31459"}, + {"240a:a292::/32", "143308"}, + {"2600:1fa0:5040::/44", "16509"}, + {"2a03:cf80::/32", "31484"}, + {"2001:559:3f::/48", "7015"}, + {"2001:559:c190::/48", "33489"}, + {"2401:1040:2::/48", "59239"}, + {"2402:800:577f::/40", "7552"}, + {"240e:1a:170::/35", "23650"}, + {"2804:2a6c::/32", "264072"}, + {"2a06:c000::/31", "45027"}, + {"2a0b:b86::/45", "3280"}, + {"2001:559:84::/48", "7016"}, + {"2403:8a00::/32", "17686"}, + {"240a:ae6b::/32", "146341"}, + {"2804:1168::/35", "52904"}, + {"2804:145c:c310::/37", "263327"}, + {"2806:20d:3300::/37", "32098"}, + {"2404:6300:1001::/33", "131310"}, + {"2607:f9f1:3::/32", "22205"}, + {"2a01:9520::/29", "62241"}, + {"2a02:ed8::/32", "44898"}, + {"2a02:26f7:d549::/46", "20940"}, + {"2408:8656:2efe::/47", "17623"}, + {"2607:ff68::/44", "46475"}, + {"2806:2f0:8181::/46", "17072"}, + {"2a02:2b60:c::/41", "42947"}, + {"2401:8ac0:120::/48", "4671"}, + {"2408:8956:3a00::/40", "17622"}, + {"240c:cb22::/21", "23910"}, + {"2600:140f:2200::/48", "9829"}, + {"2a02:26f7:fa09::/42", "20940"}, + {"2a11:ba80::/29", "210792"}, + {"2001:d00::/32", "17678"}, + {"2405:e000::/35", "37963"}, + {"2406::/32", "9732"}, + {"2409:8c85:aa19::/42", "9808"}, + {"2606:57c0::/48", "6461"}, + {"2620:10a:8004::/48", "27299"}, + {"2a04:9040::/29", "58138"}, + {"2001:500:121::/48", "396566"}, + {"2001:559:105::/48", "33652"}, + {"2404:5200::/32", "4686"}, + {"240a:a817::/32", "144721"}, + {"2800:ba0:6a::/48", "263812"}, + {"2804:43a0:3003::/33", "267580"}, + {"2a0e:b107:470::/45", "138006"}, + {"2402:d000:1075::/33", "9329"}, + {"240c:c411::/22", "23910"}, + {"2600:1001:b1e0::/33", "22394"}, + {"2607:f8f0:210::/41", "271"}, + {"2001:388:6031::/41", "7575"}, + {"2a02:b60::/35", "44217"}, + {"2a02:26f7:f189::/46", "20940"}, + {"2a04:3100::/29", "196976"}, + {"2001:559:82c1::/48", "33657"}, + {"2001:67c:514::/48", "2116"}, + {"2402:800:3ac5::/43", "7552"}, + {"240a:a515::/32", "143951"}, + {"240a:ac7b::/32", "145845"}, + {"2607:f110:43::/45", "21889"}, + {"2804:2e0c::/34", "263019"}, + {"2804:4f54::/32", "268320"}, + {"2804:56f8::/33", "268035"}, + {"2a02:7880::/32", "28745"}, + {"2001:1260:8::/46", "13591"}, + {"2401:d800:f472::/40", "7552"}, + {"2403:6c40::/32", "131478"}, + {"2a0f:2880:400::/40", "208164"}, + {"2401:d800:b770::/40", "7552"}, + {"2406:3000:8:4040::/46", "4657"}, + {"2804:14d:4031::/40", "28573"}, + {"2a06:a001:a080::/44", "207466"}, + {"2a0b:5f40::/29", "42926"}, + {"2001:559:83b6::/48", "7922"}, + {"2806:230::/36", "11888"}, + {"2a02:26f7:fa80::/48", "36183"}, + {"2001:13d2:2816::/35", "7303"}, + {"2001:16a2:8016::/42", "39386"}, + {"2001:4df0::/29", "1680"}, + {"2401:5c00::/32", "9889"}, + {"2401:d800:bd92::/41", "7552"}, + {"2406:84c0::/32", "138225"}, + {"2602:fc23:15::/39", "8095"}, + {"2600:1417:6b::/45", "20940"}, + {"2a02:26f7:c741::/46", "20940"}, + {"2a02:26f7:c984::/48", "36183"}, + {"240a:adb0::/32", "146154"}, + {"2804:14c:d4a0::/47", "28573"}, + {"2804:a64::/32", "52893"}, + {"2804:8428::/32", "272243"}, + {"2a01:7ea0::/32", "13012"}, + {"2a0b:67c0::/29", "28920"}, + {"2001:fb0::/36", "7470"}, + {"2401:c240:1100::/34", "132847"}, + {"2409:8914:7e00::/39", "56044"}, + {"240a:ac62::/32", "145820"}, + {"2804:4728::/32", "267035"}, + {"2804:636c:2000::/35", "269360"}, + {"2001:4b20:1000:1::/50", "34288"}, + {"240a:a8bf::/32", "144889"}, + {"2606:8e40:200::/37", "46513"}, + {"2804:3c0::/46", "28605"}, + {"2806:20d:5037::/44", "32098"}, + {"2806:2f0:7161::/46", "17072"}, + {"2a02:26f7:ed41::/46", "20940"}, + {"2a0b:6b86:b10::/48", "206699"}, + {"2409:8f05::/27", "9808"}, + {"2804:1b0:1a80::/47", "18881"}, + {"2806:230:4002::/48", "265594"}, + {"2a03:da00::/35", "24991"}, + {"2a0e:1b00::/31", "49436"}, + {"2001:67c:2620::/48", "55002"}, + {"2400:cb00:ab90::/46", "13335"}, + {"2602:fda8::/36", "397925"}, + {"2801:80:37f0::/48", "269607"}, + {"2001:67c:40c::/48", "62116"}, + {"2001:cb0:20e::/47", "4637"}, + {"2600:1403:a401::/36", "20940"}, + {"2620:171:d6::/44", "715"}, + {"2804:14d:ba47::/43", "28573"}, + {"2804:2ef8::/32", "52692"}, + {"240e:3be:8200::/35", "140316"}, + {"2600:1017:f810::/37", "6167"}, + {"2602:fd9e::/36", "397666"}, + {"2602:ff1b::/36", "49981"}, + {"2804:7fc4::/32", "271708"}, + {"2a02:214d:8000::/33", "1241"}, + {"2001:559:82e4::/48", "7015"}, + {"2001:f20:f000::/46", "38154"}, + {"240a:a53c::/32", "143990"}, + {"240a:ace6::/32", "145952"}, + {"240e:640:ce00::/40", "136197"}, + {"2804:204:21c::/47", "28186"}, + {"2804:4c1c::/32", "267350"}, + {"2a09:4bc7:d022::/44", "140096"}, + {"2a0a:90c0::/44", "198912"}, + {"2001:df0:400::/48", "56172"}, + {"2400:ddc0::/35", "4785"}, + {"2620:12d:1000::/47", "26889"}, + {"2a01:5042:200e::/48", "202196"}, + {"2a0c:5700::/34", "30893"}, + {"2a0e:fd87::/46", "13238"}, + {"240a:a771::/32", "144555"}, + {"2a02:26f7:d210::/48", "36183"}, + {"2a02:ee80:4246::/47", "3573"}, + {"2a0f:5707:abf6::/48", "212895"}, + {"2a10:641::/32", "6697"}, + {"240e:103:8b10::/44", "4134"}, + {"240e:438:6640::/36", "4134"}, + {"2603:c021:4000::/35", "31898"}, + {"2806:28f::/32", "28419"}, + {"2a04:2d00::/48", "56647"}, + {"2a0a:3140:1600::/46", "15532"}, + {"2001:67c:39c::/48", "15894"}, + {"2620:131:1065::/48", "14618"}, + {"2804:7b30::/32", "271416"}, + {"2600:1419:d::/43", "20940"}, + {"2604:cc00:a3::/48", "53292"}, + {"2a02:26f7:da0c::/48", "36183"}, + {"2c0f:fee0::/32", "33785"}, + {"2001:559:87ef::/48", "7922"}, + {"2001:fd8:60::/48", "132199"}, + {"2001:42c8::/32", "6453"}, + {"2403:c000:1001::/37", "4741"}, + {"2620:13b:d001::/46", "3549"}, + {"2c0e:2710::/20", "5713"}, + {"2401:d800:d990::/42", "7552"}, + {"2403:1cc0:1201::/48", "45352"}, + {"2604:4e00:6000::/32", "25764"}, + {"2604:8380::/35", "29802"}, + {"2001:559:1d7::/48", "7922"}, + {"2001:67c:29d4::/48", "58247"}, + {"2606:9700::/32", "237"}, + {"2a06:44c0::/29", "200434"}, + {"2001:559:c173::/48", "33660"}, + {"2001:678:928::/48", "60149"}, + {"2406:daa0:c060::/44", "16509"}, + {"2408:840d:8200::/42", "17621"}, + {"2409:8043:2901::/46", "24444"}, + {"2409:896a:8600::/39", "9808"}, + {"2605:72c0:a000::/36", "396865"}, + {"2606:ae00:cc41::/35", "7287"}, + {"2804:1134::/32", "263665"}, + {"2804:12c0::/32", "263496"}, + {"2804:635c::/32", "269356"}, + {"2804:7fec::/32", "271718"}, + {"2001:559:c1b1::/48", "33652"}, + {"2001:67c:195c::/48", "29117"}, + {"2001:67c:2bc0::/48", "3301"}, + {"2804:378::/32", "28283"}, + {"2001:559:80af::/48", "33491"}, + {"2001:559:c30d::/48", "33652"}, + {"2403:ad80:60::/45", "134835"}, + {"2408:8656:a59::/37", "17622"}, + {"2620:135:7002::/48", "3356"}, + {"2804:277c::/32", "263904"}, + {"2402:800:532b::/41", "7552"}, + {"2806:260:1012::/47", "28481"}, + {"2a0e:3f00::/29", "197706"}, + {"2001:250:7020::/48", "24369"}, + {"240b:c000::/24", "138384"}, + {"2a02:26f7:b709::/42", "20940"}, + {"2001:4488:f862::/39", "7713"}, + {"2406:7300::/46", "17559"}, + {"2408:84f3:e010::/42", "134543"}, + {"2620:0:28a8::/48", "33522"}, + {"2a02:26f7:f241::/46", "20940"}, + {"2402:800:970f::/43", "7552"}, + {"2a00:4940:2::/32", "198279"}, + {"2a0f:f6c0::/29", "57191"}, + {"2001:67c:2630::/48", "42044"}, + {"2408:8000:a000::/43", "4837"}, + {"240a:a8b6::/32", "144880"}, + {"2803:3440:9000::/46", "64112"}, + {"2803:5500::/32", "52431"}, + {"2001:500:6b::/48", "27321"}, + {"2001:57a:9208::/47", "22773"}, + {"2408:8001:3080::/39", "17816"}, + {"2620:74:20::/48", "396566"}, + {"2804:4830::/32", "267103"}, + {"2a00:c00:f063::/48", "15769"}, + {"2a06:ed40::/29", "203450"}, + {"2001:67c:13cc::/48", "199330"}, + {"2402:800:614a::/45", "7552"}, + {"240e:3b8:4c00::/35", "136200"}, + {"2607:fa08:2:f::/32", "23404"}, + {"2800:160:13f7::/44", "14259"}, + {"2a02:2010:2290::/45", "20978"}, + {"2a04:b902::/32", "16509"}, + {"2001:df5:1280::/48", "45325"}, + {"2409:804c:1900::/34", "9808"}, + {"2a02:2e02:8950::/40", "12479"}, + {"2a04:4e40:4e10::/42", "54113"}, + {"2a0a:6800::/29", "207202"}, + {"2404:24c0::/32", "138520"}, + {"2404:7800::/32", "17893"}, + {"2407:c280:ffff::/48", "134409"}, + {"2408:8957:400::/40", "17622"}, + {"240e:60c:dc00::/34", "4134"}, + {"2607:ff78::/32", "20161"}, + {"2804:11c0::/32", "263436"}, + {"2602:806:7008::/45", "14618"}, + {"2804:7b40::/32", "271420"}, + {"2a04:efc0::/29", "201847"}, + {"2406:2000:98::/48", "38032"}, + {"2408:8656:2cfe::/47", "17623"}, + {"240a:a7de::/32", "144664"}, + {"240e:67a:e200::/39", "140329"}, + {"2600:c12::/32", "12179"}, + {"2804:63c4::/32", "269382"}, + {"2806:230:5001::/48", "11888"}, + {"2001:559:8768::/47", "7015"}, + {"2001:4500:1200::/32", "18183"}, + {"240a:a72e::/32", "144488"}, + {"2804:70c8::/32", "270748"}, + {"2a00:4b00:20e::/42", "41935"}, + {"2a01:bda0::/32", "61981"}, + {"2a04:f580:9280::/48", "4809"}, + {"2a10:4646:3::/48", "42101"}, + {"2001:559:c40f::/48", "33287"}, + {"2001:14d0::/29", "15516"}, + {"240c:c0a8:9c01::/48", "138440"}, + {"2605:3380:4702::/40", "12025"}, + {"2804:7d38::/32", "271547"}, + {"2a03:fc40::/32", "41937"}, + {"2405:cc00::/34", "55943"}, + {"2600:1419:3a01::/37", "20940"}, + {"2600:5c01:1ffe::/48", "11351"}, + {"2001:500:15::/48", "715"}, + {"2001:559:c0e6::/48", "7922"}, + {"2404:fc00:192::/45", "45910"}, + {"240a:a16d::/32", "143015"}, + {"240a:a37d::/32", "143543"}, + {"240a:a5ef::/32", "144169"}, + {"2606:9880::/32", "394380"}, + {"2804:a58::/32", "262274"}, + {"240a:a18c::/32", "143046"}, + {"2a02:26f7:cd8c::/48", "36183"}, + {"2a03:db80:4421::/46", "680"}, + {"2602:fe13:802::/48", "53356"}, + {"2606:2800:4014::/48", "15133"}, + {"2800:160:2022::/43", "14259"}, + {"2a0c:b080::/29", "204751"}, + {"2001:559:c097::/48", "33651"}, + {"2405:7f00:8b00::/35", "133414"}, + {"2620:52:c000::/48", "54538"}, + {"2804:44ac::/32", "267646"}, + {"2001:df4:ce80::/48", "141166"}, + {"2001:df7:f600::/48", "135214"}, + {"2409:8751:f00::/35", "56047"}, + {"2604:dac0::/32", "36504"}, + {"2a02:26f7:d84e::/47", "20940"}, + {"2001:13d1:2c04::/35", "7303"}, + {"240a:ac63::/32", "145821"}, + {"2a01:73e0:a000::/33", "47872"}, + {"2a0c:9a40:1092::/48", "34927"}, + {"2001:559:3d2::/48", "33657"}, + {"2409:8729::/27", "9808"}, + {"2409:8c14:2e00::/35", "9808"}, + {"2409:8d1e::/31", "24400"}, + {"2450:1740:1::/48", "140079"}, + {"2605:6a40::/32", "398081"}, + {"2800:440:144::/48", "27738"}, + {"2801:11c:c0::/44", "269888"}, + {"2a09:dc0::/32", "47485"}, + {"2600:140b:6400::/48", "31109"}, + {"2607:f6f0:201::/48", "54588"}, + {"2804:5604::/32", "267971"}, + {"2a10:9ec0::/29", "211785"}, + {"2a11:1d41::/46", "210937"}, + {"2001:df0:9580::/48", "134868"}, + {"2804:5890::/32", "268136"}, + {"2803:9300::/32", "265760"}, + {"2a07:4e40::/29", "54058"}, + {"2001:4c8:109c::/46", "15290"}, + {"2605:a401:8c9b::/42", "33363"}, + {"2606:2800:424e::/48", "14153"}, + {"2001:4878:102::/47", "12222"}, + {"2401:b200::/45", "24186"}, + {"2406:52c0::/32", "139141"}, + {"2408:8459:1910::/42", "17623"}, + {"240a:ad2d::/32", "146023"}, + {"2a02:26f7:d889::/42", "20940"}, + {"2a03:5f00:108::/46", "207044"}, + {"2001:67c:1bc4::/48", "5588"}, + {"2001:df5:c680::/48", "141529"}, + {"2400:1760::/32", "7590"}, + {"2402:800:5c8d::/42", "7552"}, + {"2a01:8980::/32", "57124"}, + {"2a04:c240::/29", "62009"}, + {"2001:559:8493::/48", "7015"}, + {"2408:84f3:9c40::/38", "17816"}, + {"2620:13e:9007::/48", "17218"}, + {"2a05:1a00:4000::/27", "43754"}, + {"2a0c:5a00::/29", "50304"}, + {"2001:559:712::/48", "7922"}, + {"2001:978:6715::/35", "174"}, + {"2408:8456:4040::/38", "17816"}, + {"240a:a500::/32", "143930"}, + {"2804:1404::/32", "263309"}, + {"2804:53f0::/32", "268617"}, + {"2a0e:fd45:b00::/48", "213249"}, + {"2001:559:87d3::/48", "33657"}, + {"2400:a980:4900::/35", "133111"}, + {"2409:8914:a00::/39", "56044"}, + {"2801:10:b000::/48", "264635"}, + {"240e:967:e600::/36", "4134"}, + {"2001:ee0:9f40::/34", "45899"}, + {"2600:1007:9100::/44", "6167"}, + {"2606:a000:708::/36", "11426"}, + {"2409:8028:8f3::/45", "9808"}, + {"2a02:dd0::/32", "15735"}, + {"2a03:4b40:5281::/37", "50710"}, + {"2408:840d:4e00::/42", "17621"}, + {"240d:c010:56::/48", "139341"}, + {"2a02:c880::/48", "24642"}, + {"2001:df2:1400::/48", "133923"}, + {"240e:3b0:dc00::/34", "4134"}, + {"2a01:8840:2d::/48", "207266"}, + {"2a02:88d:822f::/48", "47794"}, + {"240c:ce81::/32", "138393"}, + {"2a05:d03a:4000::/40", "16509"}, + {"2a05:d03a:c000::/40", "16509"}, + {"2001:e30:1c1e::/48", "2697"}, + {"2001:4de0:4300::/40", "33438"}, + {"2605:a40e:6::/44", "33363"}, + {"2a03:6540::/32", "61316"}, + {"2a0b:2900:6100::/38", "48582"}, + {"2406:d00:bbbb::/48", "132165"}, + {"240a:aacb::/32", "145413"}, + {"2001:559:45d::/48", "33659"}, + {"240e:f7:c000::/35", "134771"}, + {"2804:14c:5d00::/42", "28573"}, + {"2804:4410::/32", "267619"}, + {"2a0a:1fc0::/29", "41960"}, + {"2408:8456:4a40::/39", "17816"}, + {"240a:ab91::/32", "145611"}, + {"2a02:26f7:f7c8::/48", "36183"}, + {"2001:678:344::/48", "47939"}, + {"2001:67c:17bc::/48", "1257"}, + {"2400:cb00:a620::/46", "13335"}, + {"2804:8424::/33", "272242"}, + {"2a01:90:200::/40", "29668"}, + {"2a02:c70::/32", "47841"}, + {"2001:559:3c4::/48", "33660"}, + {"2001:648:3400::/40", "8248"}, + {"2804:19d0::/32", "61820"}, + {"2804:526c::/36", "268517"}, + {"2001:49f0:2920::/48", "174"}, + {"2001:4de0:6000::/40", "33438"}, + {"240e:3bb:3e00::/33", "140308"}, + {"2a00:c827::/45", "60330"}, + {"2a02:6980::/32", "12935"}, + {"2a02:ee80:40ac::/43", "3573"}, + {"2a0a:e200:1510::/48", "199156"}, + {"2402:1b40:2009::/33", "7628"}, + {"2403:ba00:202f::/48", "132651"}, + {"240a:a726::/32", "144480"}, + {"2607:fe28:11::/38", "53347"}, + {"2804:2d6c::/32", "265281"}, + {"2806:230:2029::/48", "11888"}, + {"2a02:26f7:ba44::/48", "36183"}, + {"2a0e:1c80:1::/48", "42675"}, + {"2a00:1851:bf04::/40", "29357"}, + {"2402:e280:3d00::/41", "134674"}, + {"240a:abd4::/32", "145678"}, + {"2604:4000:8000::/48", "12915"}, + {"2801:11:f000::/48", "266896"}, + {"2801:1f:4800::/48", "269848"}, + {"2a00:c587:fd00::/40", "51331"}, + {"2a0f:7ec0:100::/48", "12303"}, + {"2c0f:4b00::/32", "328939"}, + {"2404:f4c0:f9cd::/48", "142281"}, + {"240a:a595::/32", "144079"}, + {"2804:14c:8500::/40", "28573"}, + {"2a00:1d10::/32", "49909"}, + {"2607:fcd0:108::/47", "8100"}, + {"2800:200:2001::/44", "12252"}, + {"2806:3cf::/32", "270126"}, + {"2a00:1728:1c::/48", "44017"}, + {"2620:11a:c000::/43", "54113"}, + {"2a00:6901:c002::/47", "20926"}, + {"2a02:fa8:8800::/40", "41041"}, + {"2a04:4e40:8230::/44", "54113"}, + {"2001:740::/32", "5400"}, + {"2001:448a:6010::/42", "7713"}, + {"240e:108:8e::/47", "4134"}, + {"2801:1fc:3c::/48", "27951"}, + {"2803:2a80:821::/48", "262928"}, + {"2804:80b8:a000::/36", "271769"}, + {"2a02:26f7:c184::/48", "36183"}, + {"2606:2800:6023::/44", "15133"}, + {"2610:80:3000::/29", "6079"}, + {"2803:e40::/40", "27797"}, + {"2001:559:836d::/48", "33652"}, + {"2804:2e8:8::/47", "262847"}, + {"2804:4e00::/32", "268233"}, + {"2a00:1dd8::/29", "31042"}, + {"2a0c:e040:1235::/39", "200629"}, + {"2001:ce0:6::/48", "4605"}, + {"2407:6c00:18::/48", "45839"}, + {"2801:1c1::/40", "19429"}, + {"2804:16b0:2000::/36", "61910"}, + {"2804:7d88::/32", "271567"}, + {"2a00:17f1::/32", "50533"}, + {"2a0d:4d00::/46", "44794"}, + {"2404:8d06:7100::/36", "10089"}, + {"2405:7600::/47", "23956"}, + {"2407:d40::/44", "139009"}, + {"240a:a6f0::/32", "144426"}, + {"2604:d600:15be::/41", "32098"}, + {"2804:2408:8400::/33", "52705"}, + {"2c0f:5f00::/32", "328974"}, + {"2408:84f3:d840::/37", "17816"}, + {"2600:1419:7001::/38", "20940"}, + {"2620:103:2008::/46", "30539"}, + {"2620:11c:c001::/48", "13768"}, + {"2a11:1200::/29", "204790"}, + {"2001:506:39::/48", "20055"}, + {"2400:1a00:b1c1::/42", "17501"}, + {"2602:fd3a:22a::/48", "16509"}, + {"2c0f:2f00::/32", "328987"}, + {"2600:1407:18::/46", "20940"}, + {"2606:f300:20::/43", "4544"}, + {"2607:f3c8:4000::/34", "33724"}, + {"2a04:4e40:2a10::/41", "54113"}, + {"2a05:b0c2::/35", "210842"}, + {"2a0f:9400:fa0::/43", "53356"}, + {"2a10:7280::/29", "204790"}, + {"2001:4408:101::/38", "4758"}, + {"2401:1d40:3f03::/40", "59019"}, + {"2404:e6:910::/32", "703"}, + {"2600:6c34:13::/48", "33588"}, + {"2602:807:5010::/42", "55136"}, + {"2605:2800:1200::/48", "10812"}, + {"2801:80:1a50::/48", "265450"}, + {"2a00:8380::/32", "15557"}, + {"2a01:5040:1001::/42", "43996"}, + {"240a:a8e2::/32", "144924"}, + {"2a02:1b8::/31", "47692"}, + {"2001:559:c3af::/48", "7016"}, + {"2804:1814::/32", "263263"}, + {"2806:230:2058::/48", "265594"}, + {"2001:559:3fe::/48", "7922"}, + {"2001:df0:22b::/48", "38574"}, + {"2400:9380:9080::/47", "4809"}, + {"2404:2280:1cb::/45", "24429"}, + {"2607:fcc8:afc0::/48", "11955"}, + {"2800:160:1d0a::/45", "14259"}, + {"2804:44e8:101::/38", "267660"}, + {"2a02:26f7:f108::/48", "36183"}, + {"2001:559:c32e::/48", "33657"}, + {"2806:20d:5c00::/34", "32098"}, + {"2806:2f0:2461::/48", "22884"}, + {"2a02:26f7:c94a::/47", "20940"}, + {"2a04:2f81:6::/29", "61157"}, + {"2401:1900:8030::/44", "45245"}, + {"2407:14c0::/39", "138077"}, + {"2602:fcf4::/36", "398738"}, + {"2804:1690:880::/32", "263292"}, + {"2a02:2ab8:8210::/33", "702"}, + {"2403:9800:2f::/48", "2570"}, + {"240e:983:1b00::/48", "58461"}, + {"2a09:3b00::/29", "208861"}, + {"2a0c:e642:80::/32", "211323"}, + {"2405:fa80::/32", "132894"}, + {"2801:16:1800::/48", "271995"}, + {"2a0e:ee80::/29", "328486"}, + {"2001:559:82d1::/48", "7015"}, + {"2401:d800:7db0::/41", "7552"}, + {"2602:104:f::/48", "33588"}, + {"2a06:6400::/29", "15576"}, + {"2001:559:877a::/48", "7922"}, + {"2408:8459:6410::/42", "17623"}, + {"2409:8051:2000::/47", "56047"}, + {"240e:3b0:8200::/35", "140316"}, + {"2a01:448:73::/32", "42585"}, + {"2a02:6723::/32", "208668"}, + {"2001:1248:a530::/46", "11172"}, + {"2001:4479:4000::/35", "7545"}, + {"2401:4900:3050::/44", "45609"}, + {"2409:8907:7120::/38", "24547"}, + {"2600:1008:f000::/44", "6167"}, + {"2803:5e00:120::/32", "267765"}, + {"2a01:8840:3a::/45", "12041"}, + {"2a0d:f780::/29", "202921"}, + {"2404:3d00:500::/33", "3573"}, + {"2406:e940:1001::/32", "9449"}, + {"2602:fd92:c30::/44", "400298"}, + {"2605:a380:2002::/32", "53828"}, + {"2804:1e20:13::/48", "264409"}, + {"2804:2d08::/32", "265258"}, + {"2a02:ee80:422e::/41", "3573"}, + {"2a0b:1300:81dc::/48", "209915"}, + {"240a:a812::/32", "144716"}, + {"2605:5940::/32", "14235"}, + {"2800:160:14e9::/43", "14259"}, + {"2804:6930:3000::/32", "270254"}, + {"2001:1a68:2::/48", "198430"}, + {"2404:e5:212::/30", "703"}, + {"2409:805c:1900::/34", "9808"}, + {"240a:a35f::/32", "143513"}, + {"2620:31:8000::/48", "11540"}, + {"2804:14c:3ba7::/44", "28573"}, + {"2a02:ab40::/29", "196810"}, + {"2a06:2602::/32", "51088"}, + {"2001:559:70b::/48", "33287"}, + {"240e:6b2:2000::/32", "4134"}, + {"2605:9d00::/32", "53767"}, + {"2801:c4:1e::/48", "265553"}, + {"2001:579:124::/43", "22773"}, + {"2604:3380::/28", "46437"}, + {"2607:ffb0::/34", "6327"}, + {"2804:178::/32", "28591"}, + {"2001:678:d94::/48", "49183"}, + {"2001:7fa:5::/48", "23911"}, + {"2001:470:7a::/40", "6939"}, + {"2001:559:5ff::/48", "7016"}, + {"2001:67c:2ee8::/48", "49787"}, + {"2001:df3:2680::/48", "134351"}, + {"2604:1380:4200::/44", "54825"}, + {"2a00:bac0::/32", "58323"}, + {"2a0d:e940:b000::/36", "35507"}, + {"2001:559:7e5::/46", "33657"}, + {"2001:559:8506::/48", "33659"}, + {"2001:448a:6110::/35", "7713"}, + {"2001:4d70::/32", "201210"}, + {"240e:44d:7500::/42", "140345"}, + {"2408:8256:3d96::/44", "17623"}, + {"2600:140f:d001::/37", "20940"}, + {"2620:1bc::/35", "7726"}, + {"2a02:2aa0:111::/44", "702"}, + {"2a0b:b200::/32", "64439"}, + {"2001:678:a0::/48", "43558"}, + {"2001:1248:8461::/44", "11172"}, + {"240a:a683::/32", "144317"}, + {"2602:fc23:111::/48", "57429"}, + {"2804:1168:1819::/37", "52904"}, + {"2a02:26f0:81::/46", "20940"}, + {"2a02:53c0::/32", "210306"}, + {"2402:9d80:103::/48", "131429"}, + {"2402:a1c0:101::/32", "137526"}, + {"240e:44d:1740::/42", "140360"}, + {"2606:240:2::/48", "812"}, + {"2408:840d:8600::/42", "17621"}, + {"2a02:26f7:e2::/48", "36183"}, + {"2a02:26f7:f78c::/48", "36183"}, + {"2403:5000:172::/40", "9304"}, + {"2408:8409:9c00::/40", "4808"}, + {"2804:4a90:1001::/34", "267249"}, + {"2a01:7e0:30::/39", "44066"}, + {"2a07:aa00:81::/44", "3549"}, + {"2001:41a8:605::/32", "6762"}, + {"2606:440::/32", "399060"}, + {"2804:394::/34", "262895"}, + {"2a00:46e0::/32", "50265"}, + {"2a00:4f40::/32", "29104"}, + {"2a01:180::/29", "12709"}, + {"2a01:280:368::/48", "12552"}, + {"2a02:2e02:8480::/41", "12479"}, + {"2001:559:8014::/48", "33491"}, + {"2804:1844::/32", "53065"}, + {"2804:769c::/32", "271123"}, + {"2a05:3040::/29", "42910"}, + {"2a12:1100::/29", "204790"}, + {"240e:438:7420::/43", "140647"}, + {"2a00:9560::/29", "58003"}, + {"2a02:1310:353::/48", "21130"}, + {"2401:4900:1280::/41", "45609"}, + {"240a:aaf6::/32", "145456"}, + {"240e:3be:ec00::/35", "140314"}, + {"240e:44d:1880::/41", "4134"}, + {"2600:3508:f000::/29", "396998"}, + {"2804:18bc::/32", "61950"}, + {"2804:6de8:b000::/33", "270563"}, + {"2a0b:69c0::/29", "205619"}, + {"240e:9b:f009::/46", "140248"}, + {"2a02:26f7:d281::/46", "20940"}, + {"2a02:26f7:dac5::/46", "20940"}, + {"2a03:7380:1f40::/40", "13188"}, + {"2a10:ab00::/29", "47285"}, + {"2001:579:e120::/43", "22773"}, + {"2408:8957:df00::/40", "17816"}, + {"240a:a7cc::/32", "144646"}, + {"2001:579:b814::/41", "22773"}, + {"2409:8c06::/28", "9808"}, + {"2600:1407:3800::/48", "35994"}, + {"2804:389c::/32", "266489"}, + {"2001:af8::/46", "5385"}, + {"2401:85c0::/32", "131605"}, + {"2402:9dc0::/32", "131183"}, + {"2a00:1148:6::/29", "47764"}, + {"2a01:7080:27::/32", "42848"}, + {"2a02:6ea0:ce00::/35", "60068"}, + {"2a03:49c0::/32", "58081"}, + {"2a10:2307:ffff::/48", "16509"}, + {"2001:559:32a::/48", "7016"}, + {"2406:840:c20::/48", "139317"}, + {"2408:8459:5a10::/42", "17623"}, + {"2409:8d03::/29", "9808"}, + {"2600:6c20:e0b::/45", "20115"}, + {"2806:260:4200::/39", "13999"}, + {"2a02:26f7:d50d::/42", "20940"}, + {"2402:ef21:2000::/36", "7633"}, + {"240a:afbb::/32", "146677"}, + {"2a0b:f4c1::/48", "60729"}, + {"2a0c:28c0::/32", "206429"}, + {"2001:678:2c4::/48", "12731"}, + {"2001:1af0:9001::/43", "13046"}, + {"2402:9500:c01::/39", "55720"}, + {"2600:1003:9100::/44", "6167"}, + {"2620:109:c006::/48", "55163"}, + {"2804:50b0::/32", "268404"}, + {"2001:67c:21e4::/48", "51634"}, + {"2401:d800:5e60::/40", "7552"}, + {"2408:8456:6200::/42", "17622"}, + {"2409:8904:9690::/34", "24547"}, + {"2804:1004::/32", "263614"}, + {"2a05:b680:9::/48", "57136"}, + {"2a0d:4340::/29", "8888"}, + {"2a0e:b107:fe0::/44", "138435"}, + {"2402:800:3971::/44", "7552"}, + {"2405:1800::/32", "9999"}, + {"2600:6c39:233::/45", "20115"}, + {"2800:bf0:8240::/44", "52257"}, + {"2803:2180:19::/46", "27941"}, + {"2a02:bc8::/42", "8641"}, + {"2001:678:eb0::/48", "212351"}, + {"2001:4038::/32", "31383"}, + {"240a:a466::/32", "143776"}, + {"240a:a7e1::/32", "144667"}, + {"2605:8cc0::/32", "398203"}, + {"2804:13b0:5c30::/44", "263546"}, + {"2a00:1d58:f015::/44", "47524"}, + {"240e:983::/48", "23724"}, + {"2620:149:a22::/48", "6185"}, + {"2405:dc0:8008::/46", "22604"}, + {"240e:3b3:2800::/38", "4134"}, + {"2620:e4:4000::/48", "394725"}, + {"2800:160:1164::/44", "14259"}, + {"2804:4924::/44", "267167"}, + {"2a04:ac01::/30", "56534"}, + {"2001:250:214::/48", "24351"}, + {"2401:d800:23e0::/37", "7552"}, + {"2600:380:8400::/36", "20057"}, + {"2a01:86e0::/32", "62136"}, + {"2a02:5320:d00::/40", "12189"}, + {"2a03:6b00:2::/44", "48832"}, + {"2607:f7a8:c00::/35", "46887"}, + {"2a05:e181::/32", "200941"}, + {"2001:678:b70::/48", "207886"}, + {"2001:67c:564::/48", "62121"}, + {"2404:7000::/32", "17557"}, + {"2605:9780:1400::/40", "36180"}, + {"2804:81bc::/32", "272473"}, + {"2a11:d82::/29", "208861"}, + {"2001:559:78e::/48", "7922"}, + {"2001:67c:23d4::/48", "57201"}, + {"2001:4190::/32", "12912"}, + {"2404:ce00::/33", "38634"}, + {"2607:fd48:302:100::/37", "13536"}, + {"2803:e600:facf::/37", "18809"}, + {"2a03:4680::/29", "25184"}, + {"2a10:d000:15::/44", "35506"}, + {"2001:559:181::/48", "33490"}, + {"240a:abe9::/32", "145699"}, + {"2603:f550::/24", "397165"}, + {"2a10:cc42:1a00::/40", "20473"}, + {"2408:8956:5a00::/40", "17622"}, + {"240e:3bb:f700::/36", "4134"}, + {"2a00:1538::/32", "44356"}, + {"2a02:26f7:ee05::/46", "20940"}, + {"2804:14d:e669::/40", "28573"}, + {"2804:6c0:300::/43", "262418"}, + {"2804:76a0::/32", "271124"}, + {"2a01:367:abce::/33", "30823"}, + {"2a12:6bc0::/32", "208869"}, + {"2a01:9900::/32", "21171"}, + {"2001:978:b701::/33", "174"}, + {"2001:16a6:c200::/31", "39386"}, + {"2409:8052:3100::/37", "9808"}, + {"2600:6c38:b54::/46", "20115"}, + {"2607:fb10:7092::/42", "2906"}, + {"2804:719c::/32", "270800"}, + {"2001:678:a9c::/48", "39702"}, + {"2001:44b8:30d7::/48", "4739"}, + {"2400:3e80::/32", "2514"}, + {"2607:a800:917::/48", "15695"}, + {"2620:119:50c0::/48", "14413"}, + {"2a03:8f80::/31", "34714"}, + {"2a04:40::/29", "39878"}, + {"2001:df2:4e80::/48", "139849"}, + {"240e:44d:5800::/42", "140345"}, + {"2804:5274::/32", "268519"}, + {"2001:559:c1af::/48", "33489"}, + {"2001:918:ff65::/43", "3303"}, + {"2401:d800:f2c0::/42", "7552"}, + {"2403:e200:1e::/37", "45543"}, + {"2409:8c20:5200::/42", "56046"}, + {"2a02:e00:ffea::/43", "29141"}, + {"2a0b:bb80::/32", "201787"}, + {"2001:df0:a8::/48", "46052"}, + {"2001:4888:8050::/46", "22394"}, + {"240a:ae3d::/32", "146295"}, + {"2806:2f0:9321::/46", "17072"}, + {"2a00:f180::/32", "13173"}, + {"2a03:80::/32", "57154"}, + {"2a0b:80::/29", "34261"}, + {"240a:a8e0::/32", "144922"}, + {"2607:f208:8::/48", "398107"}, + {"2a04:1ac0:fff3::/45", "211960"}, + {"2001:df5:7b00::/48", "137368"}, + {"2400:1160::/32", "9818"}, + {"2a00:8a40::/32", "28978"}, + {"2a02:7900:ff02::/40", "16154"}, + {"2a0c:b641:2b0::/46", "212625"}, + {"2a01:7d80:2400::/40", "62214"}, + {"2a0c:94c0::/29", "21032"}, + {"2001:388:608c::/48", "56132"}, + {"2409:805e:3100::/36", "9808"}, + {"2620:10d:900f::/48", "25993"}, + {"2a01:8180:2000::/36", "20594"}, + {"2c0f:f698:f00b::/36", "37693"}, + {"2001:559:8559::/46", "7015"}, + {"2001:678:b58::/48", "29560"}, + {"2408:8256:3291::/48", "17816"}, + {"2408:8957:b800::/40", "17622"}, + {"240a:a41c::/32", "143702"}, + {"2800:350::/29", "11556"}, + {"2804:5af0::/32", "268808"}, + {"2a00:1988::/32", "5392"}, + {"2a00:4802:1f00::/34", "8717"}, + {"2a10:39c0::/29", "204790"}, + {"2407:1e40:201::/39", "141732"}, + {"2600:14c0:9::/48", "20940"}, + {"2607:fcf0:6::/39", "13445"}, + {"2804:161c:d80::/45", "263268"}, + {"2001:49f0:d103::/45", "3216"}, + {"2401:e7c0::/32", "132298"}, + {"2408:8812::/28", "4837"}, + {"2804:776c::/32", "271177"}, + {"2a01:110::/32", "6584"}, + {"2a01:832::/29", "3209"}, + {"240a:a1c2::/32", "143100"}, + {"240a:a45c::/32", "143766"}, + {"2803:6900:581::/48", "52423"}, + {"2400:c640::/40", "136406"}, + {"240a:a6b5::/32", "144367"}, + {"2801:174:1::/48", "18747"}, + {"2a02:26f7:f504::/48", "36183"}, + {"2001:4878:347::/48", "12222"}, + {"2408:893a::/32", "4837"}, + {"240e:5e:4007::/32", "4134"}, + {"2602:ffe4:c38::/48", "21859"}, + {"2620:149:bc::/41", "714"}, + {"2803:2a60::/32", "267881"}, + {"2a02:16d8:108::/32", "5518"}, + {"2a02:40c0:1000::/48", "50673"}, + {"2a05:1540::/29", "47755"}, + {"2a06:ef40::/32", "50495"}, + {"2001:559:819b::/48", "7922"}, + {"2405:1c0:6121::/46", "55303"}, + {"2804:814::/32", "262777"}, + {"2804:2050:2abd::/35", "264485"}, + {"2a02:e980:a6::/44", "19551"}, + {"2a0f:e6c0:123::/48", "60781"}, + {"2001:559:c257::/48", "33662"}, + {"2001:67c:174::/48", "48345"}, + {"2001:1388:8a40::/45", "264684"}, + {"2409:8087:5100::/37", "9808"}, + {"240a:a7c5::/32", "144639"}, + {"2804:1658:100f::/32", "263283"}, + {"2001:559:85c9::/48", "7922"}, + {"2001:4c08:2025::/48", "3356"}, + {"240a:a341::/32", "143483"}, + {"2620:123:9002::/45", "394976"}, + {"2001:250:6811::/45", "138373"}, + {"2602:fce7::/32", "399065"}, + {"2804:4824::/32", "267100"}, + {"2a02:26f7:d4c5::/46", "20940"}, + {"2a02:d247:1000::/32", "44087"}, + {"2001:559:c04e::/47", "7922"}, + {"2001:67c::/48", "47490"}, + {"2401:1d40:2101::/36", "59019"}, + {"2408:8256:c68::/39", "17622"}, + {"2606:6b80::/32", "16788"}, + {"2605:a404:b97::/42", "33363"}, + {"2804:2d38::/32", "265267"}, + {"2804:3874:a::/48", "266478"}, + {"2806:20d:5a20::/46", "32098"}, + {"2001:550:90b::/45", "174"}, + {"2001:67c:1708::/48", "38974"}, + {"240e:870:40::/44", "140486"}, + {"2604:880:5c::/48", "29802"}, + {"2604:2680::/48", "2386"}, + {"2800:160:1634::/41", "14259"}, + {"2001:df6:5a00::/48", "64302"}, + {"2401:4900:4bb0::/41", "45609"}, + {"2a00:139d::/30", "34878"}, + {"2a0a:3500::/32", "21485"}, + {"2a0f:85c1:200::/44", "209188"}, + {"2001:559:8317::/44", "33650"}, + {"2001:678:c7c::/48", "44416"}, + {"2400:7400:56::/48", "23736"}, + {"2607:700:1100::/38", "22343"}, + {"2803:5440:4059::/48", "264738"}, + {"2804:1290::/32", "263484"}, + {"2804:5294::/32", "268527"}, + {"2806:370:2010::/41", "28403"}, + {"2a03:2380:6::/32", "198818"}, + {"2a05:3580:fa00::/39", "35807"}, + {"2a0e:69c0::/48", "39862"}, + {"2001:df6:8f00::/48", "135817"}, + {"2409:8027:2c06::/44", "9808"}, + {"2600:6c39:223::/45", "20115"}, + {"2804:e94:160::/40", "262468"}, + {"2804:6380::/32", "269365"}, + {"2a01:9460::/32", "44644"}, + {"2a01:bb24:102::/48", "16509"}, + {"2a02:26f7:f509::/42", "20940"}, + {"2a07:a8c1::/33", "34939"}, + {"2001:559:8249::/48", "33657"}, + {"240a:ab80::/32", "145594"}, + {"2406:4440:f010::/44", "46997"}, + {"2408:805d:9::/40", "17623"}, + {"240e:108:23::/48", "58519"}, + {"2602:107:3010::/48", "33588"}, + {"2a02:ad8:4a00::/35", "12389"}, + {"2a02:26f7:e9cc::/48", "36183"}, + {"2001:559:84a3::/48", "33651"}, + {"2803:1f60::/32", "269838"}, + {"2a02:26f7:c605::/46", "20940"}, + {"2a06:5040:3::/48", "6134"}, + {"2001:fd8:2a4::/46", "132199"}, + {"2401:a400::/38", "7477"}, + {"2604:b180:440::/44", "18444"}, + {"2804:3034:181::/38", "264936"}, + {"2804:8118::/32", "272431"}, + {"2402:800:3563::/43", "7552"}, + {"2408:8459:9c10::/42", "17623"}, + {"2408:8957:7d00::/40", "17816"}, + {"2602:feda:106::/41", "38008"}, + {"2620:171:73::/40", "715"}, + {"2804:6a00::/32", "270305"}, + {"2806:21a:1::/39", "262913"}, + {"2a07:ad40::/29", "206772"}, + {"2001:559:c058::/48", "33651"}, + {"2001:67c:2f00::/48", "197763"}, + {"2406:d00:2222::/48", "132165"}, + {"2620:116:800b::/48", "14618"}, + {"2804:b7c::/32", "52762"}, + {"2a01:839::/25", "3209"}, + {"2a0f:b300:2222::/48", "42072"}, + {"2001:1608::/32", "44066"}, + {"2001:4878:4215::/46", "12222"}, + {"2803:ba00:600::/36", "52286"}, + {"2804:1694:8000::/33", "263294"}, + {"2804:4bc8:b00::/32", "267329"}, + {"2400:a980:4100::/37", "133111"}, + {"2403:2c00:d000::/34", "4058"}, + {"2408:8956:f8c0::/37", "17816"}, + {"2804:8cc::/39", "262394"}, + {"2804:2140:100d::/43", "53059"}, + {"2804:2a3c::/32", "264066"}, + {"2a02:2638::/46", "44788"}, + {"2a03:6947:300::/37", "61266"}, + {"2001:4c0:6001::/46", "855"}, + {"2001:67c:205c::/48", "51147"}, + {"2620:132:7000::/42", "19537"}, + {"2a00:dd60::/32", "60171"}, + {"2402:800:9263::/43", "7552"}, + {"240a:a099::/32", "142803"}, + {"2803:1a00:410d::/43", "262186"}, + {"2a07:22c1:ffe1::/48", "40916"}, + {"2001:1248:975d::/42", "11172"}, + {"2401:d800:a000::/35", "7552"}, + {"240e:978:1100::/37", "4134"}, + {"2a04:f580:9090::/48", "4809"}, + {"2001:67c:2a98::/48", "3301"}, + {"2409:8704::/38", "24547"}, + {"240a:aac8::/32", "145410"}, + {"2600:140b:1400::/48", "31109"}, + {"2a07:6cc0:30::/47", "61098"}, + {"2a0f:d780::/32", "44213"}, + {"2001:4878:8007::/44", "12222"}, + {"2402:800:5501::/44", "7552"}, + {"2806:2f0:9c61::/46", "17072"}, + {"2a07:3500:19e8::/48", "38915"}, + {"2001:40e0::/32", "15879"}, + {"2620:171:200::/40", "715"}, + {"2001:550:b001::/37", "174"}, + {"2001:559:8738::/48", "33659"}, + {"2402:c940::/32", "59217"}, + {"240e:3b2:8200::/35", "140316"}, + {"2804:19ec::/35", "61827"}, + {"2804:6a40::/32", "270322"}, + {"2a00:65a0::/32", "15930"}, + {"2a05:9281::/32", "61385"}, + {"2a0e:1c80:b::/48", "47869"}, + {"2001:250:400b::/48", "23910"}, + {"2001:559:e0::/47", "7922"}, + {"2001:559:31c::/48", "7015"}, + {"2001:559:810a::/48", "33287"}, + {"2404:f4c0:ff1f::/48", "149506"}, + {"2408:870c:4000::/44", "140979"}, + {"240e:438:b020::/43", "140647"}, + {"2600:6c38:8b1::/44", "20115"}, + {"2800:bf0:94::/48", "52257"}, + {"2804:878:1c1::/32", "262374"}, + {"2804:c58::/32", "52694"}, + {"2804:3e70:c008::/35", "266596"}, + {"2a0c:2f07:4896::/48", "206924"}, + {"2a0e:4007:fffe::/48", "208226"}, + {"2001:1a11:10d::/46", "42298"}, + {"2402:1880::/30", "20546"}, + {"2403:b4c0:f000::/36", "138398"}, + {"2405:4000:801:6::/38", "38082"}, + {"2408:8957:af00::/40", "17816"}, + {"240e:d:8800::/35", "58563"}, + {"2600:141b:2001::/37", "20940"}, + {"2804:792c::/32", "271289"}, + {"2a02:2498:4::/46", "13213"}, + {"2a02:26f7:db::/48", "20940"}, + {"2a06:3040:10::/48", "203020"}, + {"2a0b:f080::/32", "213319"}, + {"2a10:d900::/32", "34953"}, + {"2401:d800:7900::/42", "7552"}, + {"2408:8459:de30::/41", "17622"}, + {"2804:5700::/32", "268037"}, + {"2a0f:6480::/32", "205112"}, + {"2001:250:7013::/48", "24370"}, + {"2001:67c:179c::/48", "64465"}, + {"240a:a9f2::/32", "145196"}, + {"2607:1880:ec16::/48", "13499"}, + {"2804:3740::/32", "266399"}, + {"2804:5208::/32", "28594"}, + {"2a02:26f7:f404::/48", "36183"}, + {"2a03:a500::/32", "60087"}, + {"240a:a8b2::/32", "144876"}, + {"240a:af33::/32", "146541"}, + {"2605:5a80:c0a0::/48", "701"}, + {"2a04:a802::/39", "3549"}, + {"2a0c:2f07:f::/48", "206924"}, + {"240e:3be:c000::/37", "140315"}, + {"2620:0:1a70::/48", "23294"}, + {"2001:559:17c::/47", "7016"}, + {"2405:1c0:6731::/45", "55303"}, + {"240a:afef::/32", "146729"}, + {"2600:c02:1020::/48", "27385"}, + {"2600:1006:a100::/43", "6167"}, + {"2600:140f:a::/48", "20940"}, + {"2804:3484::/32", "265463"}, + {"2400:a980:68fe::/47", "133111"}, + {"2401:d800:b850::/40", "7552"}, + {"2001:ce0:2::/48", "4528"}, + {"2606:8d00::/32", "36327"}, + {"2804:1564:3000::/32", "52570"}, + {"2804:3a20::/32", "266072"}, + {"2a01:807::/32", "12430"}, + {"2a01:5041::/48", "202196"}, + {"2a0d:3dc0::/29", "210312"}, + {"2001:559:8031::/48", "33491"}, + {"2804:7d30::/32", "271545"}, + {"2a07:22c0:c100::/40", "64473"}, + {"2001:559:c26b::/48", "33659"}, + {"2001:6d0:4006::/48", "50776"}, + {"2001:43f8:780::/48", "37555"}, + {"2001:4860:4805::/48", "43515"}, + {"2402:8100:21c0::/45", "45271"}, + {"2409:8c28:2909::/35", "56041"}, + {"2600:1404:7401::/32", "20940"}, + {"2606:2800:4032::/47", "14210"}, + {"2404:1c80::/32", "4847"}, + {"2800:4f0:3::/48", "28006"}, + {"2801:96:fff9::/45", "28586"}, + {"2a0a:1800:4::/43", "49915"}, + {"2001:559:c3c6::/48", "33287"}, + {"2607:f088::/32", "1706"}, + {"2804:14c:471::/45", "28573"}, + {"2a02:26f0:16::/44", "20940"}, + {"2a03:e581::/48", "201057"}, + {"2a02:26f7:cf44::/48", "36183"}, + {"2a0c:9a40:1024::/48", "34927"}, + {"2409:8c20:5600::/42", "56046"}, + {"2600:100f:b050::/42", "6167"}, + {"2a02:888:44::/46", "48695"}, + {"2a02:26f7:b786::/47", "20940"}, + {"2a09:f040::/29", "29390"}, + {"2a0b:4d07:4::/48", "44239"}, + {"2a0f:b300:1111::/48", "208200"}, + {"2001:250:3012::/47", "24357"}, + {"2001:559:c194::/48", "33287"}, + {"2001:16a2:3e00::/39", "25019"}, + {"2607:a800:647::/48", "15695"}, + {"2804:ef4:5800::/34", "28642"}, + {"2a0a:54c1:2a::/43", "62240"}, + {"2001:978:2304::/48", "174"}, + {"2400:6280:6280::/48", "132280"}, + {"240a:a415::/32", "143695"}, + {"240a:a844::/32", "144766"}, + {"2a03:6100:6101::/32", "34594"}, + {"2401:d800:9c0::/38", "7552"}, + {"240e:90d:d800::/34", "4134"}, + {"2603:c0e0:2910::/40", "54253"}, + {"2604:d600:1016::/44", "32098"}, + {"2804:1788::/32", "263153"}, + {"2401:32c0::/32", "136176"}, + {"2804:e38::/32", "262942"}, + {"2400:5800::/45", "38712"}, + {"2401:be00:1::/45", "55641"}, + {"2409:896a:6500::/38", "9808"}, + {"2409:8c1e:a930::/33", "9808"}, + {"2804:e30:3c00::/38", "11338"}, + {"2a00:6901:a003::/48", "20926"}, + {"2a0e:b107:df1::/48", "141237"}, + {"2402:800:331d::/42", "7552"}, + {"2407:8000::/31", "9381"}, + {"240a:acf1::/32", "145963"}, + {"2606:2800:5088::/48", "15133"}, + {"2607:f6f0:1001::/48", "394749"}, + {"2a00:b160::/32", "47586"}, + {"2a01:540:7000::/32", "12389"}, + {"2a0a:aa80::/32", "57198"}, + {"2001:559:82ff::/48", "7922"}, + {"2001:67c:2ef0::/48", "15542"}, + {"2001:559:76::/48", "33491"}, + {"2400:6280:139::/48", "132280"}, + {"2409:8043:2c05::/32", "9808"}, + {"2a02:26f0:1a00::/48", "34164"}, + {"2a02:4660::/32", "201975"}, + {"2001:4878:b259::/48", "12222"}, + {"240a:a1bd::/32", "143095"}, + {"2806:2f0:3821::/46", "17072"}, + {"2a01:8fc0::/32", "8913"}, + {"2a02:26f7:f289::/42", "20940"}, + {"2a03:3d60::/29", "35394"}, + {"2001:579:6028::/40", "22773"}, + {"2401:4900:22a0::/41", "45609"}, + {"2409:8c44:b00::/48", "9808"}, + {"240a:acf6::/32", "145968"}, + {"240e:438:4e20::/43", "140647"}, + {"2600:6c10:ffaa::/43", "20115"}, + {"2605:3f80::/32", "393238"}, + {"2620:132:f0fb::/39", "394977"}, + {"2a03:f80:70::/48", "56630"}, + {"2001:3c8:1307::/44", "4621"}, + {"2001:559:83ac::/47", "7922"}, + {"2600:1806:111::/48", "16552"}, + {"2a01:620::/46", "12389"}, + {"2a07:a343:ce30::/44", "9009"}, + {"2001:559:82cc::/48", "33287"}, + {"2408:8956:4e00::/40", "17622"}, + {"240e:cf:9000::/36", "139201"}, + {"2804:3b10::/32", "266127"}, + {"2a00:c740::/32", "48803"}, + {"2a0e:acc0:ac04::/48", "208414"}, + {"2001:559:51f::/48", "33652"}, + {"2401:4900:5d60::/44", "45609"}, + {"2408:8956:efc0::/35", "17622"}, + {"2606:9200:9000::/33", "6428"}, + {"2a03:2880:f15d::/46", "32934"}, + {"2001:250:3445::/48", "138393"}, + {"2001:df2:bc00::/48", "45734"}, + {"240e:44d:4780::/41", "4134"}, + {"2a10:9903:101::/48", "15510"}, + {"2405:8a00:20f4::/39", "55824"}, + {"2800:160:1392::/45", "14259"}, + {"2a00:78c0::/29", "30781"}, + {"2a0a:de80::/32", "206605"}, + {"2804:1ef8::/32", "264457"}, + {"2a02:26f7:ca00::/48", "36183"}, + {"2402:1b40:5000::/37", "7628"}, + {"2402:d000:1061::/45", "9329"}, + {"2408:8345:1200::/32", "4837"}, + {"2607:fb90:4500::/35", "21928"}, + {"2804:4f8:e000::/36", "28263"}, + {"2804:41f8:f008::/38", "267469"}, + {"2806:230:4020::/48", "265594"}, + {"2001:559:8725::/48", "33287"}, + {"2001:fd8:a8::/41", "4775"}, + {"240e:966:a800::/38", "58772"}, + {"2602:80a:7000::/48", "399798"}, + {"2607:8480:8000::/33", "22639"}, + {"2620:132:6000::/48", "21701"}, + {"2804:53b0:4001::/43", "268600"}, + {"2001:559:87de::/48", "13367"}, + {"2604:3200::/32", "21623"}, + {"2606:7100::/35", "21581"}, + {"2a05:f180::/29", "200836"}, + {"2a0e:bf00::/39", "202539"}, + {"2001:448a:50f0::/39", "7713"}, + {"2406:8800:40::/43", "17465"}, + {"2409:806b:1100::/36", "9808"}, + {"2605:f080:700::/40", "62756"}, + {"2a03:77a0::/32", "201085"}, + {"2c0f:fe78::/33", "37239"}, + {"2001:559:246::/48", "33657"}, + {"2001:da8:6033::/37", "23910"}, + {"240a:a7a2::/32", "144604"}, + {"240a:a7ea::/32", "144676"}, + {"2600:1419:4c00::/48", "4230"}, + {"2602:ffc5:164::/48", "212032"}, + {"2a0b:6780::/29", "29262"}, + {"2c0f:f888:8000::/33", "37119"}, + {"2401:d800:b490::/42", "7552"}, + {"240a:a124::/32", "142942"}, + {"240a:a4d2::/32", "143884"}, + {"2605:f440:5602::/41", "21957"}, + {"240a:a4a0::/32", "143834"}, + {"240e:964:f400::/39", "58772"}, + {"2804:5b9c::/32", "268858"}, + {"2a0f:3240::/29", "37200"}, + {"2001:1260:103::/45", "13591"}, + {"2001:1a40:c::/41", "5416"}, + {"240a:aab7::/32", "145393"}, + {"2801:94::/32", "52958"}, + {"2401:3600::/32", "131934"}, + {"2401:fb40::/32", "397086"}, + {"2804:157c::/32", "263390"}, + {"2804:4c6c::/32", "52542"}, + {"2a02:e980:206::/44", "19551"}, + {"2001:559:45f::/48", "7015"}, + {"2001:1248:a46e::/43", "11172"}, + {"2001:1868::/32", "11404"}, + {"2408:8957:5600::/40", "17622"}, + {"2600:6c10:92::/45", "20115"}, + {"2604:4d40:3c00::/39", "213073"}, + {"2804:4044:1160::/32", "265948"}, + {"2806:2f0:320::/47", "22884"}, + {"2a03:b540::/32", "31287"}, + {"2a09:4c0:1e1::/38", "58057"}, + {"2a0a:e202:800b::/48", "33438"}, + {"2001:16a2:3800::/38", "25019"}, + {"2602:fc39:1::/48", "174"}, + {"2806:230:3001::/48", "11888"}, + {"2a02:2878:c000::/34", "42699"}, + {"2001:1248:574b::/42", "11172"}, + {"2001:1560::/32", "34171"}, + {"2806:2a0:200::/40", "28548"}, + {"2a01:56c0::/32", "198864"}, + {"2a02:b20::/32", "29321"}, + {"2401:d800:2d2::/39", "7552"}, + {"240e:44d:6900::/42", "140345"}, + {"2409:8750:300::/37", "56047"}, + {"240a:ab06::/32", "145472"}, + {"240e:438:6220::/43", "140647"}, + {"2603:1000::/25", "8075"}, + {"2402:800:3e01::/43", "7552"}, + {"2409:801e:3008::/48", "24400"}, + {"2a0d:9340:626::/35", "35761"}, + {"2001:67c:13a4::/48", "209579"}, + {"240e:981:b200::/33", "4134"}, + {"2600:1fa0:1080::/44", "16509"}, + {"2801:80:510::/48", "52652"}, + {"2a02:26f7:fb85::/46", "20940"}, + {"2a09:b080::/29", "49191"}, + {"2001:470:2a::/48", "54816"}, + {"2408:8459:cb50::/37", "17816"}, + {"2800:160:1ea8::/45", "14259"}, + {"2804:214:13::/45", "26615"}, + {"2001:579:c640::/39", "22773"}, + {"240a:afb4::/32", "146670"}, + {"2600:141b:c801::/35", "20940"}, + {"2600:370f:3701::/45", "32261"}, + {"2804:3a70::/32", "266089"}, + {"2a02:c6c1:1::/48", "10929"}, + {"2001:4878:158::/48", "12222"}, + {"2409:8904:5f40::/42", "24547"}, + {"2620:0:440::/48", "10146"}, + {"2803:9040::/32", "264821"}, + {"2a00:d98::/32", "30833"}, + {"2a02:26f7:da10::/48", "36183"}, + {"2607:f220:400::/47", "3527"}, + {"2a01:b740:1e00::/32", "714"}, + {"2001:559:861c::/48", "33650"}, + {"2a0f:c640::/48", "34798"}, + {"2402:e280:1100::/48", "134674"}, + {"240e:982:9400::/40", "63838"}, + {"2804:2b04::/32", "265131"}, + {"2a02:26f7:5b::/48", "20940"}, + {"2001:da8:c80c::/48", "23910"}, + {"2408:8956:f240::/40", "17622"}, + {"240a:a1c4::/32", "143102"}, + {"2600:6c38:a9f::/42", "20115"}, + {"2620:0:2b0::/48", "21617"}, + {"2803:d100:9080::/38", "52362"}, + {"2a02:a30:f096::/36", "8926"}, + {"2a0f:25c0:1990::/48", "207077"}, + {"2001:be0::/32", "13005"}, + {"2603:c0f1:2000::/36", "6142"}, + {"2604:2d80:880b::/40", "30036"}, + {"2800:bf0:2a40::/46", "52257"}, + {"2804:34c0::/32", "265477"}, + {"2a06:9d40::/29", "31543"}, + {"240a:a8e7::/32", "144929"}, + {"240e:790::/26", "4134"}, + {"240a:a284::/32", "143294"}, + {"240a:a31d::/32", "143447"}, + {"2600:1404:b000::/48", "35994"}, + {"2804:4c34::/32", "61592"}, + {"2a03:d606::/31", "42487"}, + {"2001:43f8:700::/44", "2018"}, + {"240e:86:8000::/36", "17799"}, + {"2804:1918::/39", "52862"}, + {"2001:500:71::/48", "33071"}, + {"2406:3002:21::/43", "4657"}, + {"2804:1d80:4000::/35", "264374"}, + {"2a01:4200::/30", "21453"}, + {"2a02:26f7:b9c4::/47", "36183"}, + {"2001:559:c4b1::/48", "33491"}, + {"2404:4600:fcf::/32", "10158"}, + {"2406:56c0::/32", "18229"}, + {"240a:aa04::/32", "145214"}, + {"2a01:198::/32", "34225"}, + {"2407:1140::/32", "136336"}, + {"240e:1a:30::/44", "138950"}, + {"2604:d600:1622::/45", "32098"}, + {"2800:bf0:3501::/40", "27947"}, + {"2a01:8a80::/32", "25496"}, + {"2a02:6000::/33", "35130"}, + {"2001:559:c316::/48", "7922"}, + {"2001:1248:57f0::/47", "11172"}, + {"2403:8600:60e0::/47", "45820"}, + {"2620:119:50be::/48", "202745"}, + {"2806:230:401e::/48", "265594"}, + {"2001:468:1f12::/34", "11537"}, + {"2001:5f8:7d03::/48", "30325"}, + {"2600:6c10:c23::/45", "20115"}, + {"2804:14c:8700::/40", "28573"}, + {"2a00:1c78::/48", "25408"}, + {"2a04:8080::/29", "61207"}, + {"2a0f:7480::/29", "212807"}, + {"2001:90c::/30", "12618"}, + {"240a:a362::/32", "143516"}, + {"2a02:aa0::/29", "44034"}, + {"2a02:1390:9000::/40", "21351"}, + {"2001:559:77b::/48", "20214"}, + {"2001:da8:a401::/38", "23910"}, + {"2405:5300::/32", "24255"}, + {"2800:40:29::/46", "16814"}, + {"2a01:4262:1ab::/48", "205235"}, + {"2a0c:95c0::/29", "207509"}, + {"2407:9540::/32", "142435"}, + {"240a:a7a9::/32", "144611"}, + {"2800:bf0:68::/48", "27947"}, + {"2001:559:559::/48", "7922"}, + {"2603:c002:9210::/39", "31898"}, + {"2800:160:1b11::/46", "14259"}, + {"2804:1948::/32", "61784"}, + {"2a06:f4c0::/29", "29596"}, + {"240c:c983::/32", "24355"}, + {"240e:109:8020::/48", "4134"}, + {"2804:34::/34", "28306"}, + {"2a02:26f7:f104::/48", "36183"}, + {"2a04:f580:8090::/48", "4134"}, + {"2c0f:6c00::/40", "51110"}, + {"2001:559:243::/48", "21508"}, + {"2001:1248:56e3::/44", "11172"}, + {"2404:3d80:200::/40", "147297"}, + {"2600:1417:30::/46", "24319"}, + {"2a00:e400::/29", "35258"}, + {"2a03:b8c0:10::/48", "202276"}, + {"2a0a:e5c0:16::/48", "213081"}, + {"2001:559:80ee::/47", "33287"}, + {"2401:d800:7062::/40", "7552"}, + {"240e:978:6000::/40", "137702"}, + {"2602:fb95::/36", "400587"}, + {"2804:2144:3::/39", "52795"}, + {"2c0f:ff28::/32", "33788"}, + {"2409:8a55::/34", "9808"}, + {"2604:55c0:100::/48", "4138"}, + {"2a02:d40:3::/48", "197071"}, + {"2001:67c:1348::/48", "2485"}, + {"2001:ee0:f000::/39", "45899"}, + {"240e:379:1a00::/34", "140330"}, + {"2600:1000:be00::/44", "6167"}, + {"2804:3fc4::/32", "265913"}, + {"2804:7ab4::/39", "271387"}, + {"2a07:3502:10c0::/48", "33915"}, + {"2c0e:4020:a000::/36", "36994"}, + {"2001:559:1ce::/48", "7016"}, + {"2001:df6:4400::/48", "133301"}, + {"2407:bc40::/32", "55899"}, + {"2600:370f:5263::/45", "32261"}, + {"2606:49c0::/32", "399679"}, + {"2804:2da8::/32", "265295"}, + {"2a04:4e40:7430::/41", "54113"}, + {"2001:579:5a5c::/42", "22773"}, + {"2001:718::/29", "2852"}, + {"2001:43a0::/32", "36965"}, + {"2804:5678::/32", "268002"}, + {"2a00:4120:8006::/33", "20804"}, + {"2a03:5ac0::/32", "199587"}, + {"2408:8459:b430::/41", "17622"}, + {"2804:2890::/32", "52731"}, + {"2001:559:c01c::/48", "33657"}, + {"2001:559:c286::/48", "33657"}, + {"2404:bf40:f103::/40", "139084"}, + {"2800:bf0:8164::/48", "27947"}, + {"2a0b:a5c0::/29", "205807"}, + {"2001:16a2:82c0::/42", "25019"}, + {"2404:bf40:a241::/48", "7545"}, + {"2800:3a0:5::/46", "23201"}, + {"2806:370:82b0::/41", "28403"}, + {"2a02:26f7:f489::/42", "20940"}, + {"2001:1a11:b7::/44", "42298"}, + {"2001:4878:27::/48", "12222"}, + {"2a01:a0a0::/48", "35501"}, + {"2001:4408:5900::/38", "4758"}, + {"2408:8256:3776::/44", "17623"}, + {"2620:c6::/48", "63056"}, + {"2a02:38:1111::/48", "59747"}, + {"2a02:2958::/32", "20849"}, + {"2a0c:29c1::/32", "56465"}, + {"2405:a540:1004::/44", "38156"}, + {"2406:f400:80::/44", "38001"}, + {"2a04:9a00:1200::/48", "1136"}, + {"2a0e:8ac0::/29", "203744"}, + {"2001:559:af::/48", "7016"}, + {"2001:559:c4c0::/46", "7922"}, + {"2620:122:8002::/48", "399730"}, + {"2800:160:12d3::/44", "14259"}, + {"2804:5b84:8000::/36", "28329"}, + {"2804:673c:c000::/38", "269615"}, + {"2a06:d180::/29", "51184"}, + {"2804:7c6c::/32", "271495"}, + {"240e:40:8::/48", "58519"}, + {"2604:d600:1650::/44", "32098"}, + {"2620:8f:8000::/48", "396012"}, + {"2a0f:d600:154::/32", "208236"}, + {"2c0f:f390::/32", "37356"}, + {"2001:67c:13dc::/48", "210577"}, + {"2001:4998:15d::/46", "10310"}, + {"2804:d98::/32", "52642"}, + {"240a:ab0e::/32", "145480"}, + {"2a00:dd80:10::/48", "36236"}, + {"2a01:ae20::/32", "47381"}, + {"2a02:c6c1:2::/48", "58061"}, + {"2a02:e340::/29", "50304"}, + {"2c0f:ff40::/26", "10474"}, + {"2402:e280:2232::/45", "134674"}, + {"2602:ff23:1::/36", "63252"}, + {"2605:a404:af2::/45", "33363"}, + {"2606:6680:21::/45", "40676"}, + {"2a02:26f7:e349::/42", "20940"}, + {"2001:1248:965a::/42", "11172"}, + {"240a:aef6::/32", "146480"}, + {"2804:498::/32", "52988"}, + {"2804:2438:2000::/32", "264209"}, + {"2a02:e00:ffe7::/48", "61272"}, + {"2a02:efc0::/29", "56689"}, + {"2a0a:1180::/31", "206746"}, + {"2600:6c54::/30", "20115"}, + {"2602:feb4:60::/44", "25961"}, + {"2a00:c10::/32", "12387"}, + {"2a02:26f7:42::/48", "36183"}, + {"2a05:b680:6::/48", "31017"}, + {"2a0f:91c0::/47", "207843"}, + {"2a10:4646:150::/47", "48732"}, + {"2409:873c::/32", "24444"}, + {"240a:a91a::/32", "144980"}, + {"240a:afcf::/32", "146697"}, + {"2801:0:1c0::/45", "21578"}, + {"2a02:70c0::/32", "29467"}, + {"2a0c:9880::/29", "50763"}, + {"2001:550:2f01::/35", "174"}, + {"2804:3394::/32", "265405"}, + {"2001:559:8206::/48", "7016"}, + {"2801:1c8:234::/40", "19429"}, + {"2804:7bf0::/32", "271464"}, + {"2a01:b740:a04::/48", "6185"}, + {"2a03:720:9::/43", "57073"}, + {"2001:559:12a::/48", "7015"}, + {"2404:bf40:a640::/48", "7545"}, + {"2804:2e9c::/32", "265355"}, + {"2402:e280:1200::/39", "134674"}, + {"2806:230:1033::/48", "11888"}, + {"2a02:20::/32", "9026"}, + {"2001:1b76::/32", "158"}, + {"2400:cb00:170::/48", "13335"}, + {"2a02:26f7:e444::/48", "36183"}, + {"2a0f:9400:72ff::/48", "213163"}, + {"2405:1c0:6451::/46", "55303"}, + {"240e:848:10::/42", "4134"}, + {"2001:1248:5741::/44", "11172"}, + {"2402:c400::/32", "18097"}, + {"2806:230:203d::/48", "11888"}, + {"2a01:8840:d9::/48", "207266"}, + {"2a04:4e40:de00::/48", "54113"}, + {"2001:559:825d::/48", "22909"}, + {"2001:579:a0d4::/39", "22773"}, + {"2402:f180:1::/48", "9293"}, + {"2409:896a:aa00::/39", "9808"}, + {"2409:8a50:d00::/38", "56047"}, + {"240a:a22c::/32", "143206"}, + {"240a:aa5f::/32", "145305"}, + {"2a02:26f7:f6e5::/46", "20940"}, + {"2600:1415:5801::/32", "20940"}, + {"2604:ca00:224::/46", "36492"}, + {"2620:100:9008::/47", "13916"}, + {"2804:55d4::/32", "267959"}, + {"2a01:6ca0::/32", "12703"}, + {"2a0c:b641:457::/48", "208471"}, + {"2001:250:6c3e::/48", "23910"}, + {"2401:d800:b180::/42", "7552"}, + {"2409:8060:2100::/35", "9808"}, + {"2a01:b540::/29", "15600"}, + {"2001:380::/32", "4713"}, + {"2001:df3:d700::/48", "137297"}, + {"240a:ae1b::/32", "146261"}, + {"2a0a:c4c0::/48", "47952"}, + {"2a0b:d440::/29", "204586"}, + {"2001:250:1800::/43", "138441"}, + {"2001:df0:8500::/48", "59128"}, + {"240e:3b2:1200::/39", "4134"}, + {"2603:c0f0:2110::/40", "6142"}, + {"2605:49c0:2::/47", "15094"}, + {"2607:ca80::/32", "395475"}, + {"2804:14d:5800::/42", "28573"}, + {"2a0a:ea80::/29", "206589"}, + {"2001:559:c4d8::/48", "33651"}, + {"2600:1007:a000::/44", "6167"}, + {"2604:a00:102::/35", "19318"}, + {"2a0e:800:ff7f::/48", "208266"}, + {"2001:559:8196::/48", "20214"}, + {"2001:678:29c::/48", "51143"}, + {"2001:1810:40::/35", "14116"}, + {"240e:bf:b8d8::/46", "138387"}, + {"2620:22:c000::/48", "55196"}, + {"2001:67c:2824::/48", "12722"}, + {"2403:6b80:ffff::/48", "2635"}, + {"2409:806c:1100::/34", "9808"}, + {"240a:aaea::/32", "145444"}, + {"2600:c05::/34", "11855"}, + {"2605:7100::/32", "11238"}, + {"2804:6e40::/34", "270584"}, + {"2a07:9480::/29", "9083"}, + {"2a0c:ca80::/30", "34915"}, + {"2804:3084::/32", "264956"}, + {"2a01:41e0::/31", "62336"}, + {"2a04:e800:5019::/48", "57976"}, + {"2001:df3:a480::/48", "137549"}, + {"2603:c0e0:2000::/39", "54253"}, + {"2606:2800:6a08::/46", "15133"}, + {"2606:b700::/32", "26809"}, + {"2620:105:c000::/48", "7767"}, + {"2804:1098::/32", "52766"}, + {"2a00:1d58:c980::/38", "47524"}, + {"2a0f:5701:3507::/44", "206499"}, + {"2401:1c00:3100::/33", "38809"}, + {"2406:2000:1d1::/32", "10310"}, + {"2804:5afc:7000::/36", "268811"}, + {"2604:4cc0:11::/48", "20150"}, + {"2001:559:c33a::/48", "33287"}, + {"2400:2000:d::/46", "17676"}, + {"2400:fc00:8550::/40", "45773"}, + {"2402:e280:2139::/45", "134674"}, + {"2405:f080:e06::/44", "136907"}, + {"2409:8003:2900::/40", "38019"}, + {"2a02:26f7:c30c::/48", "36183"}, + {"2a0a:bb80::/29", "206620"}, + {"2001:559:c204::/48", "7922"}, + {"2405:57c0::/48", "137799"}, + {"2408:8456:240::/39", "17816"}, + {"2803:f00:700::/42", "262182"}, + {"2001:fb0:1000::/46", "9287"}, + {"2001:44b8:604e::/48", "7545"}, + {"2403:9800:6200::/37", "4771"}, + {"2409:8c10::/30", "9808"}, + {"2a01:8840:76::/44", "12041"}, + {"2001:6d0:4001::/46", "52016"}, + {"2409:8080:2ad0::/44", "9808"}, + {"2001:500:88::/48", "16876"}, + {"2001:559:38c::/48", "7922"}, + {"2001:df4:d080::/47", "133145"}, + {"2401:d800:d7c0::/42", "7552"}, + {"240a:a12b::/32", "142949"}, + {"2605:1800::/32", "16863"}, + {"2800:4d0::/34", "7004"}, + {"2804:6d1c::/32", "270513"}, + {"2a0c:2f07:29::/48", "206924"}, + {"2001:12f0:440::/39", "1916"}, + {"240a:a039::/32", "142707"}, + {"2806:10c0:ffff::/48", "8151"}, + {"2a02:26f8::/32", "29551"}, + {"2001:559:180::/48", "33659"}, + {"2400:a980:2400::/40", "133518"}, + {"2a01:acc0::/32", "41083"}, + {"2a07:ce40::/29", "201463"}, + {"2800:300:9060::/40", "27986"}, + {"2a02:26f7:b99d::/46", "20940"}, + {"2400:7400:4b::/43", "38044"}, + {"2405:7f00:9900::/38", "133414"}, + {"2804:3e8:103::/35", "28663"}, + {"2a03:8800:1::/48", "200826"}, + {"2001:559:4da::/48", "33491"}, + {"2001:df5:c100::/48", "137950"}, + {"2001:49f0:d03f::/41", "174"}, + {"2600:6c10:f230::/41", "20115"}, + {"2803:9800:a099::/42", "11664"}, + {"2a00:5d00::/32", "39153"}, + {"2a0a:8380::/29", "33943"}, + {"2407:b700::/32", "58708"}, + {"2607:fdf0:5e67::/44", "8008"}, + {"2a00:7fc0:8000::/48", "49130"}, + {"2a06:7d40::/29", "34428"}, + {"2a10:4cc0::/40", "12843"}, + {"2001:559:874a::/47", "13367"}, + {"240e:108:9c::/35", "4134"}, + {"2605:bb00:1004::/34", "4213"}, + {"2a04:6380::/29", "61231"}, + {"2a0c:9a40:82f0::/44", "148971"}, + {"2400:7400:23::/48", "23736"}, + {"2401:4900:5d6c::/48", "45609"}, + {"2600:4c00:200::/37", "63410"}, + {"2804:18:5010::/42", "26599"}, + {"2a10:cc40:150::/46", "209669"}, + {"2001:559:57f::/48", "33660"}, + {"240a:ae05::/32", "146239"}, + {"2804:41e0::/32", "267462"}, + {"2a00:4802:3210::/39", "8717"}, + {"2a01:abc0::/32", "12709"}, + {"2001:559:843e::/48", "7922"}, + {"2001:4b3a::/32", "25220"}, + {"240e:44d:3180::/41", "4134"}, + {"2804:4028::/32", "265938"}, + {"2a03:3740::/32", "43350"}, + {"2405:dc00:8000::/33", "4804"}, + {"2406:4300::/32", "133398"}, + {"2620:125:9070::/48", "397415"}, + {"2800:160:204e::/42", "14259"}, + {"2804:2818:b::/32", "263940"}, + {"2804:4100::/32", "265997"}, + {"2804:858c:8000::/33", "272586"}, + {"2a02:23f0::/32", "20771"}, + {"2a0b:de02:48::/48", "207486"}, + {"2001:a60::/29", "8767"}, + {"2001:43f8:1140::/47", "10310"}, + {"2400:89c0:6100::/48", "37936"}, + {"2402:5300:440::/39", "45903"}, + {"2a00:d80::/29", "35518"}, + {"2a00:1ca8:9d::/41", "50673"}, + {"2a02:26f0:34::/47", "20940"}, + {"2001:559:8421::/48", "33659"}, + {"2403:680::/32", "134723"}, + {"240a:a059::/32", "142739"}, + {"2620:22::/48", "53355"}, + {"2a00:1a58::/32", "20904"}, + {"2a04:8140::/48", "60781"}, + {"2001:da8:2023::/48", "23910"}, + {"2001:44b8:24::/48", "7545"}, + {"240a:a8c1::/32", "144891"}, + {"2804:98c::/32", "263099"}, + {"2001:4878:b102::/48", "12222"}, + {"2408:8459:ec10::/42", "17623"}, + {"2600:380:e400::/44", "20057"}, + {"2600:9000:108e::/47", "16509"}, + {"2804:610::/32", "262565"}, + {"2804:7444::/32", "270970"}, + {"2a02:878:a801::/48", "42632"}, + {"2001:678:5c4::/48", "48534"}, + {"2408:8256:3d95::/48", "17816"}, + {"2620:0:2be0::/48", "19106"}, + {"2620:104:2031::/46", "40185"}, + {"2a00:86c0:1043::/43", "2906"}, + {"2a07:4a80::/29", "212238"}, + {"2001:678:6a0::/48", "207647"}, + {"2401:b780:5012::/32", "45410"}, + {"240a:a2cc::/32", "143366"}, + {"240e:44d:3740::/42", "140353"}, + {"2804:4a0::/32", "52989"}, + {"2a04:4fe0::/30", "200187"}, + {"2a07:b300::/29", "213101"}, + {"2402:6800::/50", "22822"}, + {"2405:6400:2000::/35", "23678"}, + {"2409:804e:2100::/35", "9808"}, + {"2600:d07:4000::/28", "20161"}, + {"2605:dd40:8270::/37", "398549"}, + {"2a02:598:4445::/32", "43037"}, + {"2a04:bb40::/29", "62031"}, + {"2001:13b0:800f::/43", "3549"}, + {"2804:14c:c684::/43", "28573"}, + {"2a02:26f7:eb4d::/46", "20940"}, + {"2a02:a200::/27", "33915"}, + {"2407:4e40::/48", "142040"}, + {"2607:f830::/32", "1998"}, + {"2a0f:7cc0::/29", "34591"}, + {"2a0f:a900::/29", "15391"}, + {"2803:9800:94c1::/46", "11664"}, + {"2a00:13b8::/32", "34279"}, + {"2001:67c:297c::/48", "3209"}, + {"2600:e000:400::/40", "22995"}, + {"2607:1900::/32", "14140"}, + {"2806:2f0:83e3::/37", "17072"}, + {"2a0f:9400:735f::/48", "14570"}, + {"2001:67c:20e0::/48", "34225"}, + {"2406:daa0:2020::/44", "16509"}, + {"2c0f:f578::/42", "24691"}, + {"2402:3b80::/32", "134128"}, + {"2409:8728::/33", "56041"}, + {"2607:c200:1106::/48", "6461"}, + {"2804:fa8::/32", "53050"}, + {"2804:19e0::/32", "61824"}, + {"2804:3588::/32", "266292"}, + {"2a07:8740::/29", "34549"}, + {"2c0f:fff0::/32", "37125"}, + {"2001:559:86d6::/44", "7922"}, + {"2001:1208::/32", "3905"}, + {"2404:3d00:412e::/43", "3573"}, + {"240e:980:8300::/40", "4811"}, + {"2804:5034::/32", "268375"}, + {"2001:13f8::/32", "27817"}, + {"2800:bf0:103::/48", "27947"}, + {"2804:14c:87cb::/42", "28573"}, + {"2a02:26f7:ec55::/44", "20940"}, + {"240a:a652::/32", "144268"}, + {"2604:4580:202::/47", "26375"}, + {"2804:4164::/32", "267430"}, + {"2a11:f400::/48", "197116"}, + {"2001:579:4139::/41", "22773"}, + {"240a:a4e2::/32", "143900"}, + {"2804:49b0::/32", "267197"}, + {"2a0c:9a40:82b0::/48", "1239"}, + {"2001:df2:5a80::/48", "139866"}, + {"2001:fd8:18c0::/39", "4775"}, + {"2806:20d:163b::/45", "32098"}, + {"2001:550:2605::/48", "396509"}, + {"2402:800:99d3::/44", "7552"}, + {"2604:880:38f::/43", "29802"}, + {"2605:9b00::/32", "32220"}, + {"2607:f170::/43", "6364"}, + {"2a09:f780:1::/48", "41864"}, + {"2620:cb:6::/47", "3549"}, + {"2401:d800:c30::/41", "7552"}, + {"2604:6600:ea00::/35", "40676"}, + {"2806:2f0:5161::/46", "17072"}, + {"2a02:587:8500::/33", "6799"}, + {"2a02:2e02:9570::/40", "12479"}, + {"2a0c:5247:7000::/36", "59504"}, + {"2800:b70:400::/48", "262191"}, + {"2801:1fc:28::/48", "27951"}, + {"240e:44d:4600::/41", "140345"}, + {"2804:7dcc::/32", "271583"}, + {"2a01:280:370::/48", "3301"}, + {"2a07:78c0::/29", "211769"}, + {"2001:559:4a3::/48", "33657"}, + {"240a:acc0::/32", "145914"}, + {"2001:c20:48bb::/41", "3758"}, + {"2001:df4:d500::/48", "135905"}, + {"2600:6c38:74e::/42", "20115"}, + {"2804:1818::/32", "262657"}, + {"2806:2f0:4221::/46", "17072"}, + {"2602:feb4:100::/44", "25961"}, + {"2606:fc00::/32", "12097"}, + {"2a02:f48:2100::/40", "44515"}, + {"2a02:16f0::/32", "34928"}, + {"2001:67c:2c14::/48", "31424"}, + {"2001:67c:2d8c::/48", "33965"}, + {"2001:df0:54c0::/48", "149347"}, + {"2404:160::/32", "10030"}, + {"2602:fe12:11::/48", "62707"}, + {"2606:2800:c::/48", "15133"}, + {"2804:75e4::/32", "271076"}, + {"2a00:1ed8::/29", "41073"}, + {"2a00:dd00:7::/32", "212573"}, + {"2a03:47c0:2481::/32", "21277"}, + {"240a:a86a::/32", "144804"}, + {"2804:4200::/32", "267471"}, + {"2001:dc8:2001::/48", "131131"}, + {"2604:1d40:2000::/36", "30612"}, + {"2a0e:8f00:f103::/45", "49933"}, + {"2800:160:1616::/42", "14259"}, + {"2c0f:f3a8::/32", "37308"}, + {"2001:468:280a::/45", "11537"}, + {"2001:559:c1f5::/48", "20214"}, + {"2001:67c:2570::/48", "13030"}, + {"2001:4878:2007::/44", "12222"}, + {"2408:8957:da40::/40", "17622"}, + {"240e:357:5c00::/34", "134419"}, + {"2804:14d:2a2d::/41", "28573"}, + {"2804:1e90:a180::/33", "264436"}, + {"2605:2800:200::/35", "6922"}, + {"2620:132:f000::/40", "394977"}, + {"2804:14c:878e::/43", "28573"}, + {"2804:2cd4:b0::/41", "265246"}, + {"2804:2e44::/32", "265335"}, + {"2806:2f0:8021::/46", "17072"}, + {"2a07:5201::/47", "213208"}, + {"2401:8800:11::/40", "17439"}, + {"2406:f680::/47", "132298"}, + {"240a:ac31::/32", "145771"}, + {"2804:164c:cc::/42", "263280"}, + {"2a0d:7a40:2::/48", "60254"}, + {"2001:df5:fc00::/48", "134249"}, + {"2409:8c54:5100::/37", "9808"}, + {"2600:370f:73c1::/45", "32261"}, + {"2a04:dc80::/29", "49788"}, + {"2602:fd31::/36", "398568"}, + {"2602:fe20::/36", "32444"}, + {"2603:c0fa::/35", "20054"}, + {"2800:bf0:2c7::/44", "52257"}, + {"2804:70f0::/32", "270757"}, + {"2a01:8560::/32", "25376"}, + {"2001:559:c44c::/48", "7922"}, + {"2401:d800:f950::/42", "7552"}, + {"2409:8904:59b0::/38", "24547"}, + {"240c:cd22:cd23::/24", "23910"}, + {"240e:67f:8400::/38", "140329"}, + {"2604:77c0::/32", "19156"}, + {"2605:6840::/39", "398041"}, + {"2804:3090::/32", "264961"}, + {"2a03:68c0:2b00::/32", "61327"}, + {"2a07:8080::/32", "62296"}, + {"2a0a:8d40::/29", "60987"}, + {"2001:67c:5f8::/48", "198089"}, + {"2001:16d8:c014::/36", "16150"}, + {"2402:4440:9c81::/46", "24423"}, + {"240a:a2ee::/32", "143400"}, + {"2600:bc02::/24", "54600"}, + {"2a02:5740:24::/48", "58065"}, + {"2001:559:10a::/48", "7725"}, + {"240a:a87d::/32", "144823"}, + {"2607:fc48:1018::/48", "40009"}, + {"2a02:88d:8301::/30", "47794"}, + {"2a07:a343:7870::/44", "9009"}, + {"2001:559:c1f2::/48", "33650"}, + {"2400:7400:e02d::/48", "23736"}, + {"2620:116:8084::/48", "27281"}, + {"2804:1280::/32", "263480"}, + {"2001:559:81ce::/48", "7016"}, + {"2400:9380:9240::/47", "4809"}, + {"2406:8600:efae::/48", "24236"}, + {"2804:3ab4:7100::/32", "266104"}, + {"2a01:5ec0:5000::/36", "44244"}, + {"2a06:f7c0::/29", "202505"}, + {"2001:559:308::/47", "33491"}, + {"2001:559:c08f::/48", "33656"}, + {"2001:67c:28d0::/48", "212415"}, + {"2001:4b60:101::/32", "28857"}, + {"2406:a040:ff01::/48", "55688"}, + {"240e:45c:9400::/40", "131285"}, + {"2804:32dc::/32", "262322"}, + {"2a02:7a0::/36", "12586"}, + {"2a0c:d980::/29", "35684"}, + {"2409:896a:a000::/39", "9808"}, + {"240a:a483::/32", "143805"}, + {"2804:2c20::/32", "265197"}, + {"240a:a024::/32", "142686"}, + {"2804:6954::/32", "270263"}, + {"2804:73e8::/32", "270945"}, + {"2a00:cb20:2200::/35", "60266"}, + {"2a01:8460::/32", "199770"}, + {"2001:400:a000:12::/33", "293"}, + {"240e:438:5020::/43", "140647"}, + {"2804:908::/36", "263047"}, + {"2a00:a040:400::/29", "12849"}, + {"2001:559:83ed::/48", "33652"}, + {"2600:1900:4120::/44", "396982"}, + {"2a01:ac::/32", "39122"}, + {"2a03:bbc0::/32", "61212"}, + {"2a11:fe80:fab7::/44", "209209"}, + {"2c0f:fc88:3f::/31", "36992"}, + {"2405:201:f400::/36", "55836"}, + {"2602:fed3:1::/45", "19969"}, + {"2606:a840::/32", "55091"}, + {"2402:800:35ee::/38", "7552"}, + {"2600:5400:e101::/36", "19108"}, + {"2804:5450::/32", "268642"}, + {"2001:480:ac::/46", "668"}, + {"2403:300:a11::/46", "714"}, + {"2602:fd38::/36", "394037"}, + {"2a07:6f44::/40", "39083"}, + {"2600:6c38:b78::/37", "20115"}, + {"2603:c0f9:4000::/36", "20054"}, + {"2604:db00::/32", "32233"}, + {"2804:172c::/32", "263129"}, + {"2a02:21a8::/47", "61323"}, + {"2001:480:162::/38", "668"}, + {"2001:559:8039::/48", "7922"}, + {"2001:7f8:10::/48", "24796"}, + {"240a:a5a9::/32", "144099"}, + {"2a02:4c80::/32", "41421"}, + {"2a03:8c80::/29", "31319"}, + {"2a05:a640::/29", "12859"}, + {"2001:559:8046::/47", "7922"}, + {"2605:3380:446d::/43", "12025"}, + {"2620:98:2000::/48", "398894"}, + {"2a02:c800::/41", "43930"}, + {"2a0a:f540::/29", "210759"}, + {"2001:559:8688::/48", "7015"}, + {"2401:d800:d4b0::/41", "7552"}, + {"240a:a12e::/32", "142952"}, + {"240a:a19b::/32", "143061"}, + {"2604:d600:2801::/32", "32098"}, + {"2804:1c98::/32", "61664"}, + {"2a00:4802:1a00::/40", "13124"}, + {"2a02:26f7:ed49::/42", "20940"}, + {"2403:6380:40::/46", "212237"}, + {"2407:9240:4000::/39", "62853"}, + {"2409:8c4c:25::/36", "9808"}, + {"2a0b:7e00:400::/35", "198622"}, + {"2001:4878:4220::/48", "12222"}, + {"2402:800:3d55::/42", "7552"}, + {"2801:19:6800::/48", "19429"}, + {"2001:4c00:893b::/48", "197835"}, + {"2409:8751:500::/38", "56047"}, + {"2803:a360::/32", "269783"}, + {"2a02:26f7:117::/44", "20940"}, + {"2001:250:6810::/48", "24368"}, + {"2001:559:83bd::/48", "7015"}, + {"2001:c38:3001::/46", "9335"}, + {"2804:1684:9100::/33", "53169"}, + {"2804:3268::/32", "265076"}, + {"2804:40a4::/32", "265972"}, + {"2806:2f0:9f83::/33", "17072"}, + {"2a00:cb8:353::/48", "15695"}, + {"2602:fed2:7109::/48", "53356"}, + {"2801:80:1260::/44", "263857"}, + {"2804:4384::/32", "267575"}, + {"2804:6c78::/32", "270470"}, + {"2001:500:e0::/47", "207266"}, + {"2408:840c:7b00::/40", "17621"}, + {"2620:53:e000::/48", "394626"}, + {"2803:6760::/32", "269866"}, + {"2804:7d6c::/32", "271560"}, + {"2001:4878:1e0::/44", "35994"}, + {"2405:9800:b12a::/37", "45430"}, + {"2600:1402:e001::/35", "20940"}, + {"2806:230:600e::/48", "265594"}, + {"2806:250:17::/44", "28509"}, + {"2a00:79e0:102::/37", "45566"}, + {"240a:a9db::/32", "145173"}, + {"2a02:aec0:5::/44", "57363"}, + {"2a02:cb80:1040::/48", "43766"}, + {"2806:267:1501::/48", "13999"}, + {"2a00:e58::/32", "9022"}, + {"2a05:1844::/30", "59866"}, + {"2402:a0c0:3::/45", "137922"}, + {"2800:482:400a::/48", "14080"}, + {"2803:1800::/32", "27831"}, + {"2804:330c::/32", "265113"}, + {"2a01:802::/29", "3209"}, + {"2a05:b0c4:1::/48", "198412"}, + {"2001:250:5804::/48", "23910"}, + {"2408:8756:e90::/44", "136958"}, + {"2a02:26f7:d604::/48", "36183"}, + {"2a06:8e40::/29", "15083"}, + {"2a0c:5247:2000::/36", "208861"}, + {"2c0f:ea68::/32", "37697"}, + {"2405:8180::/36", "135478"}, + {"2408:872f::/27", "4837"}, + {"2602:fd92:f0c::/48", "210348"}, + {"2804:70e8::/32", "270755"}, + {"2a02:2878::/33", "42699"}, + {"2a09:7ac0::/32", "39679"}, + {"2a0d:8400::/32", "56630"}, + {"2001:df3::/48", "132688"}, + {"2402:800:51d3::/44", "7552"}, + {"2404:8000:102d::/43", "17451"}, + {"2606:2800:4213::/48", "14153"}, + {"2620:0:a12::/47", "71"}, + {"2001:250:282f::/38", "23910"}, + {"2804:6980::/32", "270274"}, + {"2806:2f0:4601::/46", "17072"}, + {"2a00:9540::/32", "49974"}, + {"2001:559:c1b6::/47", "7922"}, + {"2404:75c0::/32", "35280"}, + {"2404:b000::/36", "9822"}, + {"2606:fe80:10::/44", "13354"}, + {"2607:f4e8:5::/48", "55429"}, + {"2800:5f0::/45", "22724"}, + {"2804:1598::/32", "263397"}, + {"2806:2f0:9d21::/46", "17072"}, + {"2a03:280::/32", "21211"}, + {"2001:410:a01d::/40", "8111"}, + {"2605:a404:c7::/42", "33363"}, + {"2a01:300:6a::/43", "9009"}, + {"2804:1cf8::/32", "61686"}, + {"2a01:5b0:4::/48", "8561"}, + {"2a09:9fc0::/29", "209318"}, + {"240e:982:d700::/40", "4134"}, + {"2604:1f80::/32", "54412"}, + {"2604:4d40:7cb9::/48", "399196"}, + {"2a04:13c1::/32", "61049"}, + {"2001:67c:28dc::/48", "28674"}, + {"2402:4700::/32", "17931"}, + {"2401:d800:5360::/40", "7552"}, + {"2409:8914:4400::/39", "56044"}, + {"240a:a113::/32", "142925"}, + {"240a:a162::/32", "143004"}, + {"2600:380:d010::/38", "7018"}, + {"2a04:92c0::/31", "62240"}, + {"2a0d:3c47::/32", "25369"}, + {"2001:559:c37c::/48", "22317"}, + {"2405:2700::/32", "24270"}, + {"2405:f740::/32", "59253"}, + {"2408:8956:3800::/40", "17622"}, + {"240e:980:2300::/40", "58519"}, + {"2602:ffc5:145::/48", "203027"}, + {"2607:f250:c020::/47", "7046"}, + {"2804:7200::/32", "270826"}, + {"2a0a:b680::/29", "51815"}, + {"2a0f:dc40::/29", "205185"}, + {"240e:965:5800::/32", "4134"}, + {"2801:80:3840::/48", "269675"}, + {"2804:5508::/32", "268685"}, + {"2804:614c::/32", "269223"}, + {"2406:840:10::/45", "139317"}, + {"240a:a403::/32", "143677"}, + {"2607:ff28:6000::/32", "62904"}, + {"2804:5784::/32", "268069"}, + {"2a01:6240:1a::/29", "58273"}, + {"2a02:26f0:ce01::/40", "20940"}, + {"2a04:2dc0:4::/48", "39216"}, + {"2a05:1500:100::/46", "48635"}, + {"2404:3d00:4060::/46", "3573"}, + {"2409:40f4:2000::/22", "55836"}, + {"2a00:13f8:fffc::/48", "13055"}, + {"2001:250:5863::/48", "24363"}, + {"2001:1998:600::/44", "16787"}, + {"2402:800:3a55::/42", "7552"}, + {"2600:1480:3::/37", "20940"}, + {"2a0f:b80::/29", "34549"}, + {"2001:418:1401:8::/59", "2914"}, + {"2001:559:8364::/48", "7015"}, + {"2400:3000::/32", "7527"}, + {"2401:7500:1111::/48", "33480"}, + {"240a:a564::/32", "144030"}, + {"2604:5500:f800::/38", "19165"}, + {"2001:550:1604::/48", "395730"}, + {"2405:1a00::/32", "24492"}, + {"240a:a8b7::/32", "144881"}, + {"2804:61c8::/32", "269256"}, + {"2a00:5540:5015::/32", "50763"}, + {"2a01:667:500::/32", "48951"}, + {"2804:661c::/32", "269534"}, + {"240a:a42a::/32", "143716"}, + {"2600:9000:21ae::/41", "16509"}, + {"2804:5e98::/32", "269043"}, + {"2a0d:ed40::/32", "209985"}, + {"2801:11:6800::/48", "3816"}, + {"2804:dc8::/32", "28636"}, + {"2001:559:c22c::/48", "13367"}, + {"2401:4640::/32", "18259"}, + {"2610:a0::/47", "7786"}, + {"2a02:26f7:cd54::/47", "36183"}, + {"2001:559:475::/48", "33659"}, + {"2405:1c0:6a71::/48", "55303"}, + {"2c0f:fe40::/32", "30844"}, + {"2401:d800:d960::/40", "7552"}, + {"2409:8a54:c800::/34", "56040"}, + {"2606:40c0::/29", "7018"}, + {"2806:261::/48", "13999"}, + {"2a00:b700::/47", "51659"}, + {"2a02:26f7:f88c::/48", "36183"}, + {"240e:3b5:c000::/37", "140315"}, + {"2803:ae40::/32", "27928"}, + {"2806:2f0:83a3::/41", "17072"}, + {"2001:559:d0::/48", "33651"}, + {"2001:67c:2700::/48", "43382"}, + {"2a12:c380::/29", "201709"}, + {"2405:9d80::/32", "45538"}, + {"2a00:7a80::/32", "34767"}, + {"2a04:2c00::/29", "6876"}, + {"2a0e:b107:1480::/48", "57401"}, + {"2001:44b8:30cd::/48", "4739"}, + {"2806:230:4033::/48", "11888"}, + {"2a02:26f7:e348::/48", "36183"}, + {"2401:401::/32", "132873"}, + {"240e:a7:7fdb::/45", "140517"}, + {"2604:b900::/33", "11042"}, + {"2804:e94:4c0::/39", "262468"}, + {"2001:559:c16b::/48", "33491"}, + {"2001:678:cf4::/48", "213400"}, + {"2405:6800:2000::/37", "18207"}, + {"2602:fdac:10::/48", "397665"}, + {"2804:c30::/32", "28284"}, + {"2a01:aea0:df2::/48", "42473"}, + {"2001:559:849c::/48", "7725"}, + {"2400:fc00:87c0::/43", "45773"}, + {"2607:fb91:7a00::/32", "21928"}, + {"2803:5c80:5591::/48", "64114"}, + {"2804:5460::/32", "268646"}, + {"2a02:26f7:e8c8::/48", "36183"}, + {"2001:559:47::/48", "33659"}, + {"240e:438:6440::/38", "4134"}, + {"2603:f950::/26", "397165"}, + {"2605:9780:1e00::/39", "393544"}, + {"2804:680:c01::/38", "262589"}, + {"2a06:ac80::/48", "205427"}, + {"2a0b:1940::/47", "42411"}, + {"2a0f:c300::/29", "202543"}, + {"2001:67c:1fc::/48", "43462"}, + {"2001:df1:be00::/48", "24541"}, + {"2001:df6:ed00::/48", "134078"}, + {"2408:8459:e030::/41", "17622"}, + {"2409:8704:9b00::/33", "24547"}, + {"2804:3f10:8101::/38", "262566"}, + {"2a07:6fc0:10::/44", "200462"}, + {"2401:9700:2000::/40", "45498"}, + {"240a:ae63::/32", "146333"}, + {"2a05:f507:5::/41", "13443"}, + {"240e:45:8000::/28", "4134"}, + {"2a01:c50e:9c00::/34", "12479"}, + {"2a02:4840:1000::/48", "52048"}, + {"2a0e:a440::/29", "208429"}, + {"2001:559:80ab::/48", "33652"}, + {"2804:2998::/32", "264024"}, + {"2a02:ec00::/29", "25540"}, + {"2001:4198::/32", "25525"}, + {"2600:2108::/34", "54858"}, + {"2803:cc60::/32", "267846"}, + {"2804:591c::/42", "28370"}, + {"2a0a:d840::/29", "42383"}, + {"2a0b:4340:90::/48", "205610"}, + {"240e:27f::/46", "134773"}, + {"2606:2800:4a64::/46", "15133"}, + {"2604:180::/46", "3842"}, + {"2804:14d:ba00::/41", "28573"}, + {"2a0b:cdc7::/32", "35790"}, + {"2a0d:fec0:179::/48", "47481"}, + {"2a0e:97c0:40e::/48", "59936"}, + {"2a0e:b107:f65::/48", "207466"}, + {"2409:805b:2905::/48", "9808"}, + {"2409:8904:2a40::/39", "24547"}, + {"240a:ac49::/32", "145795"}, + {"2a0e:2e80::/29", "60255"}, + {"2400:ca07:f036::/36", "23688"}, + {"2607:f590::/48", "46558"}, + {"2a02:26f7:d7c1::/46", "20940"}, + {"2001:678:b4c::/48", "50643"}, + {"2001:df5:2c00::/48", "59115"}, + {"2402:800:5ab7::/41", "7552"}, + {"240a:a586::/32", "144064"}, + {"2803:c240:1100::/36", "41095"}, + {"2804:82bc::/32", "272537"}, + {"2a0e:dc40::/29", "208315"}, + {"2a11:fb00::/29", "400177"}, + {"2001:559:c22f::/43", "7922"}, + {"2001:43f8:b20::/48", "327974"}, + {"2408:8956:7a00::/40", "17622"}, + {"2804:2e78::/35", "28213"}, + {"2806:230:6014::/48", "265594"}, + {"2a10:db00::/32", "42609"}, + {"2001:559:8190::/48", "7015"}, + {"240e:1:a800::/33", "4134"}, + {"240e:983:1e06::/48", "4816"}, + {"2604:d600:152e::/43", "32098"}, + {"2804:6884::/32", "269698"}, + {"2806:3a4::/32", "265623"}, + {"2a00:dcc7:2200::/40", "48611"}, + {"2001:559:c462::/48", "13367"}, + {"2803:9be0:ff::/48", "174"}, + {"2a02:26f7:d780::/48", "36183"}, + {"2a03:da0::/32", "201782"}, + {"2001:559:c20e::/48", "33650"}, + {"2001:1388:70c2::/45", "6147"}, + {"2401:4900:4700::/42", "45609"}, + {"2407:cdc0:e004::/48", "38136"}, + {"2804:14d:2ca1::/41", "28573"}, + {"2804:16d8:1d00::/46", "262729"}, + {"2a00:4800:e0::/44", "13124"}, + {"2a00:4802:4e30::/39", "8717"}, + {"2001:4830:c211::/39", "27552"}, + {"2a03:b8c0::/44", "202276"}, + {"2001:440:1878::/47", "1878"}, + {"2001:559:8697::/48", "33650"}, + {"2406:9a00::/32", "17649"}, + {"2407:3e00:a000::/48", "9911"}, + {"2a02:21d0::/32", "49677"}, + {"2a02:26f7:c6c6::/47", "20940"}, + {"2a07:58c0::/29", "203018"}, + {"2001:559:7b1::/48", "33651"}, + {"2404:6ac0::/32", "138619"}, + {"2404:8000:8c::/43", "17451"}, + {"240a:a55e::/32", "144024"}, + {"2804:20b4::/32", "264509"}, + {"2a0b:7e80::/55", "43372"}, + {"2a0c:af00:be52::/48", "205321"}, + {"2403:8080::/32", "17964"}, + {"2408:8256:3b80::/44", "17623"}, + {"2408:8456:6e00::/42", "17622"}, + {"2408:8752::/32", "4837"}, + {"2600:6c7f:9310::/44", "20115"}, + {"2804:56a4::/32", "28276"}, + {"2a02:26f7:de88::/48", "36183"}, + {"2a0d:8600::/29", "205185"}, + {"2001:559:8671::/46", "7922"}, + {"2001:4878:c259::/48", "2856"}, + {"2402:800:9b55::/42", "7552"}, + {"2404:160:a440::/33", "10030"}, + {"240e:44d:2980::/41", "4134"}, + {"2600:c09::/32", "12178"}, + {"2604:4580::/38", "26375"}, + {"2804:4140::/33", "267423"}, + {"2804:5f10:9000::/33", "269074"}, + {"2a02:2270::/34", "43939"}, + {"2a09:9540::/48", "60328"}, + {"2804:b4:d000::/34", "28294"}, + {"2804:734c::/32", "270906"}, + {"2a04:2f81:4::/47", "16509"}, + {"2401:4900:33a0::/41", "45609"}, + {"2607:f038:4020::/34", "21527"}, + {"2607:f3f8:5000::/34", "17378"}, + {"2607:f6f0:5000::/48", "27224"}, + {"2620:52:4::/47", "22360"}, + {"2620:109:c003::/48", "40793"}, + {"2804:ae8::/48", "262990"}, + {"2a04:88c6::/31", "205544"}, + {"2a0b:31c0:1::/45", "205726"}, + {"2001:250:6418::/48", "24367"}, + {"2600:1017:b800::/42", "22394"}, + {"2801:162::/48", "13489"}, + {"2804:25ec::/32", "264309"}, + {"2804:53e0:8010::/39", "28258"}, + {"2a02:26f7:f3::/45", "36183"}, + {"2a02:26f7:ec40::/48", "36183"}, + {"2803:cae0:8010::/48", "27951"}, + {"2804:14d:da00::/40", "28573"}, + {"2a00:1c3e:96::/44", "48519"}, + {"2001:559:754::/48", "7016"}, + {"2a01:42c0::/32", "208966"}, + {"2408:8459:ba50::/37", "17816"}, + {"2408:8956:c100::/40", "17816"}, + {"2604:d600:1589::/43", "32098"}, + {"2800:160:2ce6::/38", "14259"}, + {"2a02:26f7:efc4::/48", "36183"}, + {"2001:559:8440::/48", "7015"}, + {"2800:4f0:b::/48", "28006"}, + {"2804:4bc::/33", "262462"}, + {"2804:b2c::/32", "52946"}, + {"2a07:22c1:10::/47", "212856"}, + {"2c0f:fbf8:210::/29", "32653"}, + {"2400:a980:60ff::/48", "133512"}, + {"2001:c38:9069::/40", "9931"}, + {"2001:4878:8000::/48", "12222"}, + {"2409:8904:caa0::/39", "24547"}, + {"2409:8c28:7de1::/32", "56041"}, + {"2620:8e:e000::/48", "398838"}, + {"2804:3d8c::/32", "266538"}, + {"2001:559:82e7::/48", "33650"}, + {"2804:35f0::/33", "266316"}, + {"2804:3820::/32", "266458"}, + {"2a0e:97c0:371::/48", "139989"}, + {"2409:8028:100::/37", "9808"}, + {"2804:56c8::/32", "268023"}, + {"2a00:f4a0::/29", "20910"}, + {"240e:3bd:3e00::/33", "140308"}, + {"2801:c0:3::/48", "16596"}, + {"2a07:f980:2::/47", "26338"}, + {"2a0b:e181::/40", "198605"}, + {"2001:67c:2a10::/48", "200924"}, + {"240e:45c:9600::/34", "131285"}, + {"2602:fc74::/48", "13768"}, + {"2804:314:4034::/32", "61568"}, + {"2001:67c:2a00::/48", "57381"}, + {"2401:4900:900::/41", "45609"}, + {"2a02:2498:257b::/48", "13213"}, + {"2001:4878:8225::/48", "12222"}, + {"2400:eb40:1::/48", "14821"}, + {"2a00:1728:a::/48", "60230"}, + {"2a02:2430:40::/42", "59491"}, + {"2a02:26f7:bb04::/47", "36183"}, + {"2a0b:b86:fd::/48", "3280"}, + {"2001:559:8746::/48", "33650"}, + {"2001:1218:6034::/47", "278"}, + {"2803:c1a0::/32", "267693"}, + {"2804:79f8::/32", "271339"}, + {"2a01:8840:f8::/48", "12041"}, + {"2a02:888:150::/48", "48695"}, + {"2a0e:8f02:f004::/48", "213031"}, + {"2001:470:51::/45", "6939"}, + {"2400:6280:147::/44", "132280"}, + {"2607:c000::/32", "5645"}, + {"2804:2c58:1210::/39", "265211"}, + {"2a01:6480:b::/45", "29049"}, + {"2a09:2900:8::/48", "212710"}, + {"2400:cb00:291::/46", "13335"}, + {"2407:7900:1000::/40", "58955"}, + {"240c:ca1c::/26", "23910"}, + {"2600:1415:400::/48", "24319"}, + {"2604:a840::/46", "6233"}, + {"2607:fbd0::/32", "19872"}, + {"2607:fdc8:c::/47", "30036"}, + {"2a00:f980::/32", "21293"}, + {"2a03:db80:4425::/36", "680"}, + {"2a0d:fec0:177::/48", "47481"}, + {"2001:559:53c::/48", "21508"}, + {"2001:67c:2b04::/48", "28771"}, + {"2600:1407:1d::/48", "20940"}, + {"2605:dd40:8cc0::/38", "398549"}, + {"2804:16f0:8000::/33", "263109"}, + {"2806:2b0::/32", "22566"}, + {"2a07:2c00::/29", "44103"}, + {"2a11:2bc0::/29", "56485"}, + {"240a:a14a::/32", "142980"}, + {"2620:1ec:2a::/43", "8075"}, + {"2804:2fd8::/32", "264915"}, + {"2804:5f78::/32", "269102"}, + {"2001:678:3b4::/48", "49855"}, + {"2408:8456:c440::/39", "17816"}, + {"2409:8c85:aa39::/41", "9808"}, + {"2001:1900:235c::/46", "10753"}, + {"2602:801:300a::/45", "6556"}, + {"2607:b00::/32", "53834"}, + {"2a02:2e02:6d0::/36", "12479"}, + {"2a0e:b101:301::/48", "49459"}, + {"2001:559:8f::/48", "7015"}, + {"2001:559:133::/48", "33287"}, + {"2403:300:a0f::/43", "714"}, + {"2405:9800:ba81::/39", "45430"}, + {"240e:950:5000::/36", "134419"}, + {"2804:2ac0::/32", "264092"}, + {"2804:6a18::/32", "270312"}, + {"2a00:72e0::/32", "201635"}, + {"2a05:4500::/29", "207605"}, + {"2a07:6040::/29", "37468"}, + {"2401:d800:d840::/42", "7552"}, + {"2406:b400:10::/46", "18209"}, + {"2600:8808:3a00::/37", "22773"}, + {"2a00:114f:8::/32", "47764"}, + {"240a:a93b::/32", "145013"}, + {"2804:31bc::/32", "265034"}, + {"2a02:26f7:de84::/48", "36183"}, + {"2a0c:7a00::/29", "57910"}, + {"2405:84c0:ff13::/48", "9886"}, + {"2a02:250::/47", "39570"}, + {"2001:418:1401:7e::/56", "2914"}, + {"2600:6c38:11c::/42", "20115"}, + {"2a02:b48:8104::/47", "39572"}, + {"2001:678:c70::/48", "47937"}, + {"240a:ae96::/32", "146384"}, + {"2604:c80:ffff::/48", "30164"}, + {"2803:d100:3000::/33", "52362"}, + {"2402:6800:741::/43", "22822"}, + {"240e:6ba:1000::/32", "4134"}, + {"2001:559:8681::/48", "7922"}, + {"2404:600::/32", "4833"}, + {"2804:1408:7100::/32", "28635"}, + {"2405:1e00:20::/48", "17771"}, + {"2600:380:5380::/34", "20057"}, + {"2a02:26f7:c00d::/46", "20940"}, + {"2001:578:15::/46", "22773"}, + {"2001:fb1:3009::/48", "7470"}, + {"2401:4900:45b0::/41", "45609"}, + {"2408:8459:2c10::/41", "17623"}, + {"240a:acc8::/32", "145922"}, + {"2600:8807:982::/38", "22773"}, + {"2603:c002:1b10::/37", "31898"}, + {"2801:80:38f0::/48", "270461"}, + {"2804:20b8:2000::/32", "264510"}, + {"2a03:a7a0::/46", "203316"}, + {"2001:1248:a422::/45", "11172"}, + {"2001:fd8:b3c0::/42", "132199"}, + {"2001:4888:a601::/44", "22394"}, + {"2600:1f01:4890::/47", "16509"}, + {"2001:559:4cc::/47", "7015"}, + {"2001:1388:a000::/33", "6147"}, + {"2001:1898:2400::/40", "26914"}, + {"2602:801:f005::/44", "32590"}, + {"2603:c0ec::/40", "54253"}, + {"2804:29e4::/32", "264042"}, + {"2a01:8840:95::/48", "207266"}, + {"2a03:10e0::/48", "62571"}, + {"2a0b:9280::/29", "206438"}, + {"2a0e:fd45:1338::/34", "44103"}, + {"2400:cb00:140::/44", "13335"}, + {"2402:8100:27fa::/45", "55644"}, + {"2409:8057:800::/48", "9808"}, + {"2600:1007:b058::/40", "22394"}, + {"2607:f3c0::/32", "16805"}, + {"2a07:9942:39d6::/47", "58305"}, + {"2001:fe8:4100::/47", "24435"}, + {"2001:1868:a10b::/48", "63366"}, + {"2408:8256:2ea0::/39", "17816"}, + {"2408:84f3:a810::/42", "134543"}, + {"2a00:7940::/32", "20847"}, + {"2a02:80c0::/30", "49562"}, + {"2a09:a4c7:c000::/35", "208861"}, + {"2001:559:87f6::/48", "20214"}, + {"2001:4a00::/27", "13285"}, + {"2403:8940:201::/37", "135817"}, + {"240a:ae1e::/32", "146264"}, + {"2602:feda:3f0::/44", "63279"}, + {"2602:ff23::/48", "398019"}, + {"2604:9b00::/38", "14230"}, + {"2607:6000:b00::/40", "12189"}, + {"2803:d010::/44", "271806"}, + {"2804:73c8::/32", "270937"}, + {"2a0f:ba80::/29", "50629"}, + {"2001:559:3d8::/48", "7015"}, + {"2001:6b0:4::/48", "2832"}, + {"2001:9d8::/32", "25577"}, + {"2806:230:402c::/48", "265594"}, + {"2a03:d000:3000::/36", "31208"}, + {"2a09:407:4000::/32", "208861"}, + {"2a0f:f200::/29", "208257"}, + {"2401:e380:2102::/47", "131091"}, + {"240a:a332::/32", "143468"}, + {"240a:aaac::/32", "145382"}, + {"2a11:ab00::/32", "209164"}, + {"2403:c00:e00::/45", "17488"}, + {"2409:8055:3022::/45", "56040"}, + {"240a:ae31::/32", "146283"}, + {"240e:45c:2700::/40", "137402"}, + {"2602:fd37:fff::/48", "398493"}, + {"2620:130:3050::/48", "62861"}, + {"2001:559:8368::/47", "33651"}, + {"2401:d800:2ca0::/41", "7552"}, + {"2407:d840:2::/48", "51847"}, + {"2605:b100:500::/41", "577"}, + {"2001:559:c224::/48", "7016"}, + {"2402:cd00::/32", "45942"}, + {"2405:1c0:6411::/45", "55303"}, + {"2409:806a:2c00::/35", "9808"}, + {"2602:ffba::/36", "40761"}, + {"2804:12f4::/32", "263506"}, + {"2a04:4e40:1410::/44", "54113"}, + {"2001:559:8076::/48", "7922"}, + {"2801:15:d000::/48", "28116"}, + {"2a00:19b8::/32", "49503"}, + {"2a02:858::/39", "3329"}, + {"2a10:440::/29", "207289"}, + {"2402:800:f450::/42", "7552"}, + {"2409:8904:5f70::/40", "24547"}, + {"2606:2d40::/32", "1239"}, + {"2607:d400:3::/32", "22364"}, + {"2806:230:2056::/48", "265594"}, + {"2806:230:4000::/48", "265594"}, + {"2a02:26f7:bd88::/48", "36183"}, + {"2a12:6741::/32", "8485"}, + {"2001:559:c49d::/48", "21508"}, + {"2403:8940:601::/32", "135817"}, + {"2406:2000:efa7::/43", "10310"}, + {"2600:1415:1401::/36", "20940"}, + {"2606:7000::/32", "46435"}, + {"2801:1e8::/40", "264607"}, + {"2a01:568::/33", "43950"}, + {"2a01:7d80:a000::/35", "8990"}, + {"2a02:2a38::/42", "58073"}, + {"2a0a:f6c0::/29", "42218"}, + {"2402:800:3763::/43", "7552"}, + {"240e:d0:8000::/31", "4134"}, + {"2a0b:b880::/29", "206610"}, + {"2400:f880::/32", "42960"}, + {"2001:559:824e::/48", "33661"}, + {"2001:559:8264::/48", "33651"}, + {"2603:fd50::/24", "397165"}, + {"240a:a940::/32", "145018"}, + {"2607:fca8:598b::/32", "17139"}, + {"2804:7050::/32", "270719"}, + {"2001:678:8b4::/48", "9009"}, + {"2001:da8:c0::/48", "138376"}, + {"2401:a880::/32", "133661"}, + {"240a:afd0::/32", "146698"}, + {"240e:965:a800::/38", "58772"}, + {"2606:7140::/48", "50069"}, + {"2001:67c:2938::/48", "1880"}, + {"2602:103:8000::/36", "33588"}, + {"2804:348c::/32", "265464"}, + {"2804:3530::/32", "266273"}, + {"2804:36f0::/34", "266381"}, + {"2a00:1288:ef98::/48", "34010"}, + {"2a01:280:328::/48", "34628"}, + {"2a02:ac80:71::/40", "25145"}, + {"240a:a462::/32", "143772"}, + {"240a:ab52::/32", "145548"}, + {"2606:7a40:2::/48", "394298"}, + {"2800:160:1357::/42", "14259"}, + {"2001:559:321::/48", "33652"}, + {"2001:559:c06a::/48", "33657"}, + {"2001:67c:1390::/48", "49251"}, + {"240e:874:c0::/39", "4134"}, + {"2620:171:d00::/44", "187"}, + {"2804:1110:8201::/34", "262901"}, + {"2404:8d04:2642::/48", "138915"}, + {"2a02:26f7:f485::/46", "20940"}, + {"2a12:66c0::/32", "208976"}, + {"2406:e780:eb3::/32", "63679"}, + {"240e:473:ff02::/40", "140485"}, + {"2600:387::/44", "20057"}, + {"2804:3674::/32", "37468"}, + {"2a00:1d36:1340::/32", "9121"}, + {"2001:559:1d5::/48", "7015"}, + {"2001:559:80bf::/48", "33652"}, + {"2408:8956:1dc0::/38", "17622"}, + {"240a:ae7f::/32", "146361"}, + {"240a:afec::/32", "146726"}, + {"2804:5e08:180::/38", "269007"}, + {"2a11:f900::/29", "400177"}, + {"2402:8100:20c1::/46", "55644"}, + {"2405:9800:b::/48", "20940"}, + {"2600:1010:b130::/44", "22394"}, + {"2a07:8900::/29", "15516"}, + {"2a12:7540::/29", "400522"}, + {"2001:250:5813::/45", "24363"}, + {"2600:1004:b200::/42", "6167"}, + {"2605:3780::/32", "62622"}, + {"2620:120:1000::/40", "2575"}, + {"2800:160:1a0e::/43", "14259"}, + {"2a02:26f7:f240::/48", "36183"}, + {"2a10:3244::/30", "398481"}, + {"2804:154c:8002::/34", "263382"}, + {"2804:391c:d::/46", "262287"}, + {"2a0a:7d40::/32", "49127"}, + {"2001:250:5867::/44", "24363"}, + {"2606:b0c0:b00c::/33", "8095"}, + {"2804:1c88::/32", "61660"}, + {"2a02:17e8:d00::/32", "13002"}, + {"2a04:2b00:100::/48", "42044"}, + {"2a0c:8fc2::/32", "202401"}, + {"2001:df0:2bf::/48", "198723"}, + {"2001:1248:5668::/47", "11172"}, + {"2600:1003:9840::/44", "6167"}, + {"2600:1406:f801::/38", "20940"}, + {"2606:a000:c07::/48", "11955"}, + {"2a0c:2c00::/29", "205266"}, + {"2401:d800:d340::/42", "7552"}, + {"2403:2500:9000::/41", "36236"}, + {"2408:8417::/28", "4837"}, + {"2602:feb4:140::/42", "25961"}, + {"2405:9800:c881::/39", "45430"}, + {"2408:8956:f2c0::/37", "17816"}, + {"2604:86c0::/32", "63023"}, + {"2608:4121:2::/48", "27065"}, + {"2a02:26f7:b788::/48", "36183"}, + {"2a06:e880:1::/48", "48550"}, + {"2a06:e881:4300::/42", "204307"}, + {"2a0a:5e80::/48", "48715"}, + {"2403:300:a21::/45", "714"}, + {"240e:44d:1800::/42", "140345"}, + {"2620:13f:5000::/48", "397592"}, + {"240e:3bb:4c00::/35", "136200"}, + {"2620:74:a1::/48", "11840"}, + {"2806:230:5002::/48", "265594"}, + {"240a:a7ce::/32", "144648"}, + {"2600:6c38:734::/44", "20115"}, + {"2607:7c80::/41", "64260"}, + {"2a00:a900:6aff::/35", "60819"}, + {"2001:67c:15a2::/48", "61317"}, + {"2804:1d9c:2000::/32", "264381"}, + {"2a02:88d:4000::/44", "48695"}, + {"2403:df00::/46", "9292"}, + {"240a:a81d::/32", "144727"}, + {"240a:a9e4::/32", "145182"}, + {"2a00:e200:105::/32", "41313"}, + {"2001:559:8222::/48", "33652"}, + {"240e:353:6400::/29", "4134"}, + {"2600:370f:73e5::/46", "32261"}, + {"2a02:f040:4::/47", "59605"}, + {"2a0c:4dc0::/48", "47893"}, + {"2001:67c:12f4::/48", "205969"}, + {"2402:ef38::/32", "38536"}, + {"2404:8000:b4b2::/36", "17451"}, + {"2408:8456:a810::/42", "134543"}, + {"240a:ac22::/32", "145756"}, + {"2600:370f:73e3::/45", "32261"}, + {"2804:2a80::/42", "53094"}, + {"2804:31e4::/32", "265043"}, + {"2a02:26f7:c64d::/42", "20940"}, + {"240e:983:700::/40", "140061"}, + {"2600:1417:e001::/36", "20940"}, + {"2620:82:6000::/48", "11048"}, + {"2804:551c::/32", "268690"}, + {"2804:5af8::/32", "268810"}, + {"2a04:d200::/31", "61438"}, + {"2a0f:6f80::/29", "47196"}, + {"2001:678:114::/48", "57436"}, + {"2001:1a40:81::/39", "5416"}, + {"2600:1417:71::/48", "9829"}, + {"2a01:7e27::/32", "199805"}, + {"2a02:26f7:1::/48", "20940"}, + {"2a02:26f7:de05::/46", "20940"}, + {"2a06:7a40:1::/46", "204050"}, + {"2a0e:b107:1786::/48", "58057"}, + {"2a0f:b00::/29", "43414"}, + {"2001:67c:17a8::/48", "24660"}, + {"2001:1548:206::/48", "206804"}, + {"2400:f280:2000::/40", "55766"}, + {"2408:8957:3300::/40", "17816"}, + {"2604:4c00::/32", "40383"}, + {"2a0a:2842:8651::/48", "136796"}, + {"2a0b:e182:100::/38", "198605"}, + {"2001:503:f189::/48", "7342"}, + {"2001:559:85b1::/48", "7015"}, + {"240a:a266::/32", "143264"}, + {"2620:107:6000:1126::/57", "6462"}, + {"2804:1d74::/32", "264369"}, + {"2804:46fc::/32", "267024"}, + {"2a03:b2c0::/29", "40676"}, + {"2a05:1500:500::/40", "43345"}, + {"2a05:d000:c000::/40", "16509"}, + {"2a06:3580::/29", "62183"}, + {"2001:5a0:4605::/36", "6453"}, + {"2001:678:28::/48", "42"}, + {"2001:6a0::/34", "8664"}, + {"2001:978:5d04::/34", "174"}, + {"2405:8a00:21b2::/45", "55824"}, + {"240a:a4db::/32", "143893"}, + {"2a02:26f7:e581::/46", "20940"}, + {"2001:49f0:d0f2::/47", "30058"}, + {"2400:8800:502::/35", "3491"}, + {"2403:a280:8000::/36", "36351"}, + {"240a:ae8a::/32", "146372"}, + {"2607:9b80:a20::/40", "46558"}, + {"2620:130:30c4::/48", "62861"}, + {"2a01:a280:7::/48", "205717"}, + {"2a09:4e05::/32", "210625"}, + {"2a0d:a440::/29", "197915"}, + {"2001:559:4ce::/48", "7016"}, + {"2804:8104::/32", "272426"}, + {"2a02:26f0:2501::/36", "20940"}, + {"2a04:9e00::/29", "62183"}, + {"240e:44d:4400::/42", "140345"}, + {"2607:fad0:4000::/36", "53824"}, + {"2a11:e80::/29", "210625"}, + {"2600:6c7f:9180::/42", "19115"}, + {"2806:2f0:5261::/46", "17072"}, + {"2407:d1c0::/32", "24162"}, + {"2602:107:2a10::/48", "20115"}, + {"2a02:4b0::/38", "43751"}, + {"2a02:26f7:e280::/48", "36183"}, + {"2a02:26f7:e9c4::/48", "36183"}, + {"2606:25c0::/32", "399331"}, + {"2a07:bc0::/29", "197393"}, + {"2001:559:74d::/48", "7015"}, + {"2408:840c:9500::/40", "17621"}, + {"2a02:26f7:f740::/48", "36183"}, + {"2a0b:b86:100::/40", "34641"}, + {"2402:3180::/48", "141706"}, + {"2800:bf0:81ee::/38", "27947"}, + {"2001:559:c0fd::/48", "33287"}, + {"2001:c20:b006::/33", "3758"}, + {"240e:13:7800::/37", "4134"}, + {"2600:1480:4800::/48", "21342"}, + {"2800:440:8180::/48", "27738"}, + {"2804:14c:cca2::/41", "28573"}, + {"2001:678:518::/48", "205423"}, + {"2409:8904:4a60::/39", "24547"}, + {"2604:ca00:d000::/48", "36492"}, + {"2a06:e881:2604::/48", "49745"}, + {"2a09:1500:20::/48", "208175"}, + {"2401:d800:5b20::/41", "7552"}, + {"2408:8856:400::/32", "17816"}, + {"240e:3bb:ec00::/35", "140314"}, + {"2804:e30:418::/38", "11338"}, + {"2a11:9700::/32", "210939"}, + {"2001:559:8749::/48", "7016"}, + {"2001:67c:21b8::/48", "29682"}, + {"2403:1940:30::/48", "137935"}, + {"2409:8904:d1b0::/38", "24547"}, + {"2409:8a28::/33", "56041"}, + {"2620:11a:4081::/48", "26197"}, + {"2804:6f8::/32", "52848"}, + {"2804:15ec:900::/32", "28599"}, + {"2804:2d8c::/32", "265289"}, + {"2804:313c::/32", "265001"}, + {"2001:1a68:2c::/48", "24723"}, + {"2a01:a420::/29", "208425"}, + {"2001:253:123::/48", "142089"}, + {"2001:13c7:7004::/48", "263779"}, + {"2404:c400:dc06::/34", "9328"}, + {"2409:8a18::/31", "134810"}, + {"2604:2a40::/32", "62943"}, + {"2a02:410::/32", "12347"}, + {"2001:44c8:4800::/41", "131445"}, + {"2001:4878:7::/44", "12222"}, + {"2600:1007:c01::/46", "22394"}, + {"2001:559:c074::/44", "7922"}, + {"240e:108:1060::/48", "134761"}, + {"2606:2800:5020::/48", "15133"}, + {"2620:74:2a::/48", "396559"}, + {"2a0c:e040::/39", "200629"}, + {"2001:67c:14::/48", "15960"}, + {"2401:4900:5020::/41", "45609"}, + {"2405:a700:14::/47", "9498"}, + {"2606:2800:6a40::/46", "15133"}, + {"2804:310c::/32", "264989"}, + {"2a01:9dc0:bef0::/33", "48684"}, + {"2a05:c6c0::/29", "49605"}, + {"2600:6c09:2::/30", "20115"}, + {"2602:fb9e::/40", "400550"}, + {"2604:bc40:6111::/32", "22188"}, + {"2a0b:8b40::/29", "60721"}, + {"240a:a224::/32", "143198"}, + {"240e:108:4c::/48", "58519"}, + {"240e:67f:800::/37", "140329"}, + {"2a0a:4e83:f24::/48", "206074"}, + {"2a0e:c40::/29", "57112"}, + {"2409:4043:3000::/27", "55836"}, + {"2607:f800::/32", "26480"}, + {"2409:851e::/31", "24400"}, + {"2a00:b8c0::/32", "198549"}, + {"2a02:888:51::/48", "47794"}, + {"2400:8dc0::/32", "136171"}, + {"240e:3b0:ac00::/35", "4134"}, + {"2600:1404:a800::/48", "35994"}, + {"2604:6840:ac20::/48", "20446"}, + {"2400:3dc0:401::/39", "134371"}, + {"2806:230:2020::/48", "265594"}, + {"2a07:6680::/29", "202954"}, + {"2c0f:ff20::/32", "37286"}, + {"240a:a5b1::/32", "144107"}, + {"2804:3060::/32", "264947"}, + {"2804:4248::/32", "267490"}, + {"2a01:190:15e9::/48", "28848"}, + {"2a06:9140::/29", "31486"}, + {"2001:559:5ca::/48", "33491"}, + {"2402:800:5c39::/41", "7552"}, + {"2408:8957:cfc0::/35", "17622"}, + {"2804:4a8::/32", "262457"}, + {"2a0c:5cc0::/29", "197648"}, + {"2600:1003:a110::/38", "22394"}, + {"2606:4900::/32", "13765"}, + {"2801:a4:fc00::/38", "262742"}, + {"2804:652c::/32", "269473"}, + {"2806:230:5006::/48", "265594"}, + {"2a02:45c0:7::/43", "59675"}, + {"2a0a:5640::/32", "207242"}, + {"2001:559:8484::/47", "33660"}, + {"240e:44d:580::/41", "4134"}, + {"2620:149:13c2::/36", "714"}, + {"2804:4d7c::/32", "268199"}, + {"2a02:88d:2f::/48", "47794"}, + {"2a0c:8680::/29", "59865"}, + {"2a10:4646:170::/44", "399486"}, + {"2402:28c0:ffaf::/41", "136620"}, + {"2606:b400:800c::/48", "792"}, + {"2a02:c540::/29", "12874"}, + {"2400:f800::/32", "24246"}, + {"2405:9800:9::/46", "45458"}, + {"240e:964:ca00::/40", "133776"}, + {"2600:1fa0:6060::/44", "16509"}, + {"2600:370f:31c1::/46", "32261"}, + {"2409:8c85:aa31::/45", "9808"}, + {"2600:140f:601::/39", "20940"}, + {"2620:13f:8000::/47", "27547"}, + {"2800:bf0:2302::/40", "27947"}, + {"2801:80:680::/48", "22819"}, + {"2803:a900:6000::/48", "52420"}, + {"2804:7744::/32", "271166"}, + {"2806:2f0:9cc3::/39", "17072"}, + {"2a02:26f7:cd4c::/48", "36183"}, + {"2001:49f0:a050::/44", "174"}, + {"2405:9800:d008::/39", "45430"}, + {"240a:a1b9::/32", "143091"}, + {"2604:d600:92a::/37", "32098"}, + {"2800:bf0:8310::/47", "52257"}, + {"2804:2dec::/32", "265312"}, + {"240e:473:fffe::/48", "140486"}, + {"2600:1010:a120::/36", "22394"}, + {"2600:9000:1e32::/45", "16509"}, + {"2804:584::/32", "53072"}, + {"2804:766c::/32", "271111"}, + {"2a02:5d0::/29", "21032"}, + {"2a0e:3bc0:fa00::/42", "204982"}, + {"2606:2e00:8020::/48", "36351"}, + {"2804:58c0::/32", "268147"}, + {"2a02:26f7:91::/48", "20940"}, + {"2a0b:8fc1::/35", "49825"}, + {"2c0f:f000:f00::/32", "36891"}, + {"2602:fbf6:100::/48", "9267"}, + {"2607:f8f0:800::/48", "271"}, + {"2804:11b0::/32", "263432"}, + {"2806:370:9700::/36", "28403"}, + {"2001:7f8:6b::/48", "58307"}, + {"2001:1248:9840::/44", "11172"}, + {"2400:da00:405::/33", "38365"}, + {"2001:559:83af::/48", "7922"}, + {"2402:9d80:920::/43", "131429"}, + {"2804:14f4::/32", "263361"}, + {"2a07:6780::/29", "209320"}, + {"2001:ee0:9a40::/39", "45899"}, + {"2800:440:1200::/42", "27738"}, + {"2800:650:4::/48", "262589"}, + {"2604:7c0::/39", "395841"}, + {"2604:d600:51d::/42", "32098"}, + {"2001:559:c28a::/48", "33660"}, + {"2001:1248:5ba2::/44", "11172"}, + {"2600:140f:2e01::/35", "20940"}, + {"2804:30dc::/32", "264977"}, + {"2600:1419:1201::/37", "20940"}, + {"2a04:9ac1::/32", "35616"}, + {"2001:4220::/48", "36935"}, + {"2408:8645::/35", "140726"}, + {"240e:44d:c00::/41", "140345"}, + {"2604:fc00::/32", "10508"}, + {"2620:149:22c::/43", "714"}, + {"2401:4900:1c5a::/42", "24560"}, + {"240a:aad1::/32", "145419"}, + {"2800:490:8500::/36", "27951"}, + {"2803:b860::/32", "267828"}, + {"2804:2654::/32", "264327"}, + {"2a00:c200::/32", "39512"}, + {"2a04:a080::/29", "35205"}, + {"2a0f:8442::/32", "49981"}, + {"2001:559:c087::/44", "7922"}, + {"2600:1480:7801::/37", "20940"}, + {"2600:6c20:211::/44", "20115"}, + {"240a:ac1a::/32", "145748"}, + {"2a02:98:d51::/48", "8468"}, + {"2a02:26f7:f141::/45", "20940"}, + {"2001:559:1d4::/48", "7922"}, + {"2001:559:c33b::/48", "7922"}, + {"240a:ac2a::/32", "145764"}, + {"2a07:3080::/29", "41639"}, + {"2600:1005:9110::/36", "22394"}, + {"2a00:e200::/40", "41313"}, + {"2001:520:1018::/46", "8103"}, + {"2001:678:2d4::/48", "198284"}, + {"2001:1248:84d1::/46", "11172"}, + {"2401:2a80:4::/32", "58793"}, + {"2a02:e0:3006::/39", "34984"}, + {"2a04:88c0:2::/44", "60781"}, + {"2409:896a:1700::/36", "9808"}, + {"2620:130:3080::/48", "62861"}, + {"2804:2c30::/32", "265201"}, + {"2001:559:c44a::/47", "33657"}, + {"2001:67c:14c::/48", "33988"}, + {"2603:c0ea:4000::/35", "1218"}, + {"2606:6680:19::/48", "27323"}, + {"2620:100:3002::/48", "23286"}, + {"2804:45c8::/47", "266949"}, + {"2a0b:6bc0::/47", "43197"}, + {"2401:d800:9b90::/42", "7552"}, + {"240a:aec5::/32", "146431"}, + {"2a03:3800::/32", "31229"}, + {"2a10:83c0::/29", "43440"}, + {"2001:67c:2fc8::/48", "213156"}, + {"2001:2001:5000::/36", "1299"}, + {"2403:400:400::/39", "23820"}, + {"2600:141b:a::/45", "35994"}, + {"2a00:7b01::/29", "12338"}, + {"2001:1248:a020::/46", "11172"}, + {"2600:1006:9040::/44", "6167"}, + {"2a02:26f7:bf08::/48", "36183"}, + {"2a02:26f7:bf40::/48", "36183"}, + {"2001:fd8:32b0::/44", "4775"}, + {"2001:1248:5aa7::/43", "11172"}, + {"2405:1c0:6381::/46", "55303"}, + {"240a:aaf3::/32", "145453"}, + {"2804:4474::/32", "267633"}, + {"2a0c:a640:20::/48", "42298"}, + {"2408:8456:aa40::/37", "17816"}, + {"2804:62b8::/32", "269314"}, + {"2406:e400::/47", "7642"}, + {"2600:1417:f000::/48", "24319"}, + {"2607:ff30:1110::/48", "237"}, + {"2804:ac0::/32", "28134"}, + {"2804:19c4::/32", "61817"}, + {"2a00:b340:30::/48", "196745"}, + {"2a0d:1380::/29", "59959"}, + {"2c0f:fce0::/32", "37027"}, + {"2001:57a:c00::/35", "22773"}, + {"2408:8956:be00::/40", "17622"}, + {"240a:a430::/32", "143722"}, + {"2804:1f0e::/35", "262366"}, + {"2001:fd8:3b1::/41", "4775"}, + {"240e:44d:3e80::/41", "4134"}, + {"2801:80:36b0::/48", "269191"}, + {"2804:4c0:fffa::/45", "3549"}, + {"2804:1840::/32", "262711"}, + {"2a03:db80:5465::/32", "680"}, + {"2001:418:4005::/48", "1412"}, + {"2400:1a00:bd21::/40", "17501"}, + {"2606:b400:882b::/48", "7160"}, + {"2806:268:1501::/48", "13999"}, + {"2a00:cb8:144::/48", "15695"}, + {"2a01:52c0::/32", "15644"}, + {"2a02:26f7:e108::/48", "36183"}, + {"2a11:bb44::/32", "28753"}, + {"2605:dd40:8209::/43", "398549"}, + {"2803:7a00:810d::/33", "52468"}, + {"2a02:1006:c0f0::/48", "3320"}, + {"2001:67c:19c::/48", "196967"}, + {"2001:1388:8470::/36", "6147"}, + {"2001:44b8:30c1::/48", "4739"}, + {"240a:a763::/32", "144541"}, + {"2804:14c:3bb5::/41", "28573"}, + {"2c0f:ed58::/32", "328471"}, + {"2a04:d280::/29", "60164"}, + {"2a10:7707:f216::/42", "399975"}, + {"2001:1440::/38", "8469"}, + {"2a0e:a40::/29", "59645"}, + {"2804:2ebc::/34", "265363"}, + {"2001:559:841f::/48", "33651"}, + {"2803:2a80::/48", "262928"}, + {"2a02:26f7:4::/48", "36183"}, + {"2a05:e800:7::/48", "50881"}, + {"2001:418:4006::/32", "2914"}, + {"2402:e280:2235::/44", "134674"}, + {"240a:a26c::/32", "143270"}, + {"2a00:1c80::/29", "44647"}, + {"2001:67c:10d0::/48", "43101"}, + {"2408:8256:1596::/38", "17622"}, + {"2a03:c980:5fb7::/48", "210079"}, + {"2404:4100::/48", "38185"}, + {"2409:8a04::/34", "24547"}, + {"2620:11d:9002:200::/56", "14805"}, + {"2a07:e03::/46", "210083"}, + {"2408:8956:8300::/40", "17816"}, + {"2a01:650::/32", "30795"}, + {"2001:559:85bd::/48", "33491"}, + {"2401:d800:d6b0::/41", "7552"}, + {"2409:804c:5d00::/31", "9808"}, + {"2409:8924:a100::/38", "56046"}, + {"2602:feb4:1c0::/44", "25961"}, + {"2804:6280::/45", "269301"}, + {"2a03:7840::/29", "207790"}, + {"2a06:1d80::/29", "30786"}, + {"2001:da8:9007::/48", "24370"}, + {"2409:8057:380e::/48", "9808"}, + {"2804:718::/32", "262620"}, + {"2a03:4980::/32", "24904"}, + {"2001:559:771::/48", "13367"}, + {"2001:559:c465::/48", "33490"}, + {"2001:1a68:a::/48", "20555"}, + {"2600:380:a00::/35", "20057"}, + {"2a00:5140::/32", "42707"}, + {"2001:fe8::/46", "24435"}, + {"2001:4c08:202f::/43", "3356"}, + {"240e:67b:c600::/34", "4134"}, + {"2606:2800:424a::/47", "15133"}, + {"2a03:f80:386::/48", "48894"}, + {"2a06:9e00::/29", "57795"}, + {"2a00:d103::/34", "15704"}, + {"2a0a:5b80::/29", "49367"}, + {"2001:dc7:8889::/35", "24151"}, + {"2804:51d0::/32", "268479"}, + {"2a04:9640::/30", "59939"}, + {"2001:559:5c7::/48", "33657"}, + {"2001:4878:b216::/48", "12222"}, + {"2402:9d80:10c::/48", "131429"}, + {"2a02:26f7:f8c5::/46", "20940"}, + {"2a05:9a80::/29", "29691"}, + {"240e:3bc:1200::/39", "4134"}, + {"2600:6c2e:125::/38", "20115"}, + {"2a0a:1900::/29", "43242"}, + {"2a11:efc0::/29", "204790"}, + {"2400:1c00:70::/40", "45143"}, + {"2403:ec00:124::/47", "17806"}, + {"240a:a11a::/32", "142932"}, + {"2a00:1fa2:8000::/40", "28884"}, + {"2a04:9b40::/32", "21305"}, + {"2403:ffc0:1100::/38", "137758"}, + {"240a:a88b::/32", "144837"}, + {"240e:fe:c000::/35", "134775"}, + {"2620:114:3000::/48", "54391"}, + {"2a0f:3e80::/29", "30633"}, + {"2a0b:afc0::/32", "62126"}, + {"2001:df6:3180::/48", "141988"}, + {"2408:84f3:b040::/38", "17816"}, + {"240e:3b9:3e00::/33", "140308"}, + {"240e:920::/30", "140061"}, + {"2400:9380:82c0::/44", "136167"}, + {"2406:e300::/46", "45250"}, + {"2600:6c10:3::/43", "20115"}, + {"2804:49c:3106::/48", "15201"}, + {"2804:ce4::/32", "52573"}, + {"2a06:afc0:1::/48", "58286"}, + {"2001:4ce9::/29", "59716"}, + {"240e:979:4f00::/35", "4134"}, + {"2804:438c::/32", "262911"}, + {"2406:840:f380::/44", "133555"}, + {"2606:5200:9000::/34", "32477"}, + {"2001:4878:8259::/48", "12222"}, + {"2800:160:1bdc::/42", "14259"}, + {"2a02:26f7:ec01::/46", "20940"}, + {"2403:ad80:92::/48", "135309"}, + {"2600:1407:25::/37", "20940"}, + {"2804:1f0a::/34", "10938"}, + {"2001:4388::/45", "8452"}, + {"2a02:26f7:b885::/46", "20940"}, + {"2a12:4946:a000::/47", "211088"}, + {"2001:559:517::/48", "7016"}, + {"2001:7f0:101::/48", "51906"}, + {"2404:c040::/32", "136174"}, + {"240a:af92::/32", "146636"}, + {"2620:0:1000::/40", "45566"}, + {"2a02:2698:5800::/38", "42683"}, + {"2a0d:2800::/29", "25003"}, + {"2001:559:2fd::/48", "7015"}, + {"2001:df4:db00::/48", "134884"}, + {"2605:e2c0::/32", "49434"}, + {"2a03:8641::/32", "39143"}, + {"2001:559:302::/48", "7016"}, + {"2001:67c:1420::/48", "207101"}, + {"2001:df7:4f80::/48", "138754"}, + {"2804:2fe4::/32", "264919"}, + {"2804:6340::/32", "269349"}, + {"2a00:43e0::/32", "60975"}, + {"2001:468:301::/41", "11537"}, + {"2001:559:83eb::/48", "33657"}, + {"2408:8957:b700::/40", "17816"}, + {"2409:8904:5240::/42", "24547"}, + {"240a:af8b::/32", "146629"}, + {"2800:e03:c000::/28", "27665"}, + {"2a05:6900::/29", "47551"}, + {"2a11:3240::/29", "204790"}, + {"2405:4800:18c3::/32", "18403"}, + {"2409:8907:7c20::/39", "24547"}, + {"2620:11e:30c7::/48", "393828"}, + {"2803:c4e0:8000::/35", "269809"}, + {"2001:678:778::/48", "210814"}, + {"2001:6f8:400::/35", "3257"}, + {"2607:f220:403::/43", "3527"}, + {"2800:650::/46", "28032"}, + {"2804:2178:4006::/35", "264556"}, + {"2804:8154::/32", "272447"}, + {"2a02:26f7:bf01::/46", "20940"}, + {"2400:dc00:ea::/48", "23947"}, + {"240a:aeb5::/32", "146415"}, + {"2a00:5fc1::/32", "48324"}, + {"2a03:5900:c::/29", "31126"}, + {"2001:678:880::/48", "35332"}, + {"2401:d800:ded0::/42", "7552"}, + {"2404:73c0:1102::/48", "48024"}, + {"2405:4802:14d0::/34", "18403"}, + {"2a01:667:100::/37", "48951"}, + {"2a0b:1880::/48", "203217"}, + {"2600:9000:2384::/48", "16509"}, + {"2800:160:1894::/44", "14259"}, + {"2803:6fa0:6::/48", "267790"}, + {"2804:1b3:6f42::/32", "18881"}, + {"2a02:6680:e000::/47", "16116"}, + {"2408:8256:357d::/46", "17623"}, + {"240a:aca6::/32", "145888"}, + {"240e:320::/30", "140061"}, + {"2804:1164::/32", "263674"}, + {"2404:bf40:c581::/34", "139084"}, + {"240a:a8c0::/32", "144890"}, + {"2804:4920::/32", "267166"}, + {"2a09:19c0::/48", "35691"}, + {"2a0e:78c0::/29", "174"}, + {"2001:4408:6f00::/35", "4758"}, + {"2406:daa0:c020::/44", "16509"}, + {"2806:2f0:2063::/43", "22884"}, + {"2402:800:baa0::/41", "7552"}, + {"240a:ab6d::/32", "145575"}, + {"2607:fb10:7162::/40", "2906"}, + {"2a00:1480:5::/48", "39737"}, + {"2001:cf8:acf::/32", "9619"}, + {"2406:840:4100::/47", "139317"}, + {"240e:183:8214::/46", "140653"}, + {"2801:80:38d0::/46", "270420"}, + {"2803:dac0:a::/43", "265634"}, + {"2a0d:e6c0::/32", "41114"}, + {"2001:278::/32", "4725"}, + {"2402:f740:2000::/36", "140096"}, + {"2603:c002:1a30::/39", "31898"}, + {"2408:8957:8c00::/40", "17622"}, + {"240a:a956::/32", "145040"}, + {"240e:44d:4b40::/42", "140357"}, + {"2804:145c:f710::/36", "263327"}, + {"2804:81cc::/32", "272477"}, + {"2a0c:7e46:8a7::/48", "20473"}, + {"2a05:1083:fd00::/44", "209870"}, + {"2001:ee0:7b40::/37", "45899"}, + {"2001:1248:990b::/43", "11172"}, + {"2a01:758:ffe9::/43", "3326"}, + {"2001:559:408::/48", "33491"}, + {"240a:a9ff::/32", "145209"}, + {"2a02:26f7:ef08::/48", "36183"}, + {"2001:6d0:ffc4::/48", "21416"}, + {"2401:4900:5a30::/41", "45609"}, + {"2404:7240::/34", "59074"}, + {"240e:ea::/27", "4134"}, + {"2605:efc0::/32", "1970"}, + {"2001:559:77::/44", "33651"}, + {"2001:df3:fd80::/48", "140442"}, + {"2804:3a54::/32", "266083"}, + {"2a02:26f0:11a::/48", "20940"}, + {"2a02:26f7:e1::/48", "20940"}, + {"2a03:6947:200::/40", "49800"}, + {"2a10:f46::/31", "207459"}, + {"2001:250:6001::/48", "24365"}, + {"2001:4490:dad0::/46", "9829"}, + {"2404:fa00:5000::/36", "45780"}, + {"2409:8904:7c40::/39", "24547"}, + {"240e:3b7:4c00::/35", "136200"}, + {"2801:0:60::/48", "52274"}, + {"2801:1c8:5f0::/48", "19429"}, + {"2804:145c:8110::/40", "263327"}, + {"2804:7058::/32", "270721"}, + {"2001:559:8320::/48", "33661"}, + {"2400:8500:1000::/36", "7506"}, + {"2400:adc2:300::/37", "9541"}, + {"2600:1405:3801::/33", "20940"}, + {"2804:3fc0::/32", "265912"}, + {"2a02:b48:8022::/39", "39572"}, + {"2001:678:8ac::/48", "20570"}, + {"2408:8957:b00::/40", "17816"}, + {"2604:1280:4::/46", "11696"}, + {"2800:8a0:a000::/36", "5722"}, + {"2804:1870::/32", "61932"}, + {"2804:5e08:380::/32", "269007"}, + {"2a0e:5540::/48", "208258"}, + {"2a11:1d42::/48", "210937"}, + {"2001:250:342c::/48", "138438"}, + {"2610:a1:3008::/48", "12008"}, + {"2a05:6680::/29", "43648"}, + {"2600:6c34:d0::/48", "33588"}, + {"2001:1b70:82cb::/48", "158"}, + {"2408:8956:7100::/40", "17816"}, + {"2804:8240::/32", "272508"}, + {"2a02:b88::/32", "47927"}, + {"2804:2dc0::/32", "265301"}, + {"2806:262:501::/48", "13999"}, + {"2001:67c:289c::/48", "198093"}, + {"2001:1a88::/29", "15600"}, + {"2001:43e8::/32", "37105"}, + {"240e:978:5000::/40", "137702"}, + {"2a00:db60:2000::/48", "15224"}, + {"2a02:26f7:bd50::/48", "36183"}, + {"2001:448a:60f0::/39", "7713"}, + {"240a:acb7::/32", "145905"}, + {"2c0f:4200::/35", "328790"}, + {"2001:18b8:119::/42", "29789"}, + {"2401:d800:ec2::/42", "7552"}, + {"240a:a21b::/32", "143189"}, + {"240a:a2e9::/32", "143395"}, + {"2605:2080::/33", "33182"}, + {"2804:4efc:4000::/32", "268296"}, + {"2a02:458::/32", "25182"}, + {"2401:b400:20::/47", "58811"}, + {"240e:f7:8000::/35", "58461"}, + {"2607:f098::/35", "33363"}, + {"2804:41a8::/32", "267448"}, + {"2806:250:600::/40", "28512"}, + {"2a00:e7a0::/47", "204167"}, + {"2a01:5a8::/47", "8866"}, + {"2a05:fb00::/29", "1257"}, + {"2405:9800:c::/43", "45430"}, + {"2607:fae0:2000::/35", "8038"}, + {"2402:8100:2510::/41", "45271"}, + {"2a01:c50e:c00::/35", "12479"}, + {"2a02:2698:8800::/38", "51035"}, + {"2a0d:7ac0::/29", "210206"}, + {"2c0f:f7b0::/32", "327819"}, + {"2001:550:301::/48", "26988"}, + {"2800:320:402::/48", "27882"}, + {"2804:5cf4::/32", "268942"}, + {"2a07:3501:1080::/47", "13127"}, + {"2001:4878:4347::/48", "12222"}, + {"2400:1700:303::/32", "4628"}, + {"2804:3e50:12f::/34", "266587"}, + {"2806:2f0:21c3::/43", "22884"}, + {"2a02:f560::/40", "44267"}, + {"2a03:9900:101::/32", "8990"}, + {"2a0b:d380::/29", "206339"}, + {"2408:840c:6c00::/40", "17621"}, + {"2602:fcd8::/48", "14618"}, + {"2a04:2e80:9::/48", "59860"}, + {"2a0c:29c0::/32", "35614"}, + {"2c0e:100:501::/20", "24863"}, + {"2a0e:8f02:1080::/41", "204446"}, + {"2001:fd8:b200::/42", "132199"}, + {"2408:84f3:de10::/42", "134543"}, + {"2804:63a8:818::/35", "269375"}, + {"2a00:ccc1:4::/48", "57433"}, + {"2a02:578:2c00::/35", "9031"}, + {"2a02:26f7:e908::/48", "36183"}, + {"2a03:e140:3::/48", "48409"}, + {"2c0f:f6d0:2b::/40", "327687"}, + {"2001:da8:3011::/48", "23910"}, + {"2400:dcc0:a804::/39", "38631"}, + {"2806:2f0:5081::/46", "17072"}, + {"2a02:26f7:c1c1::/46", "20940"}, + {"2001:67c:2324::/48", "47904"}, + {"2001:67c:2da8::/48", "41040"}, + {"2001:b08:5::/46", "3267"}, + {"2a01:108::/32", "31127"}, + {"2001:559:c506::/44", "7922"}, + {"2400:9380:86c0::/44", "136167"}, + {"2404:170::/32", "38525"}, + {"2404:b740::/48", "18403"}, + {"2600:6c10:ff83::/45", "20115"}, + {"2801:c4:19::/48", "22122"}, + {"2803:9800:b997::/38", "11664"}, + {"2804:6f4::/32", "262539"}, + {"2a02:26f7:eb88::/48", "36183"}, + {"2a0c:36c0:2::/48", "202301"}, + {"2001:559:879e::/48", "33659"}, + {"2401:d800:55a0::/41", "7552"}, + {"240a:a1c1::/32", "143099"}, + {"2804:d20:e000::/35", "262700"}, + {"2804:1f46::/33", "268989"}, + {"2804:30e4::/32", "262772"}, + {"2804:3e90:4254::/42", "266606"}, + {"2804:7e64::/32", "271621"}, + {"2a0e:d487:f000::/48", "59462"}, + {"2408:8456:9240::/37", "17816"}, + {"2801:1e:9800::/48", "272079"}, + {"2a01:c50f:31c0::/38", "12479"}, + {"2a04:8640::/29", "62275"}, + {"2a09:4e07:2000::/35", "210625"}, + {"2a0a:1ac7::/48", "2116"}, + {"2a0c:4a01:c30::/41", "147183"}, + {"2a0e:f40::/32", "208585"}, + {"2001:67c:28a0::/48", "202592"}, + {"2001:b28:9999::/48", "31500"}, + {"2001:da8:21d::/48", "138375"}, + {"2001:da8:25a::/45", "23910"}, + {"2401:9d00:102::/35", "9835"}, + {"2409:8904:e2b0::/31", "24547"}, + {"2605:3b40::/32", "54904"}, + {"2804:1c8:180::/32", "53184"}, + {"2a03:4ba0::/48", "15669"}, + {"2001:559:c2cc::/48", "7016"}, + {"2001:678:ff0::/48", "3320"}, + {"240a:aea4::/32", "146398"}, + {"2a00:fa40:5000::/32", "45031"}, + {"2001:470:143::/44", "6939"}, + {"2409:8054:303d::/48", "56040"}, + {"2607:3f00:3::/48", "26636"}, + {"2804:385c::/39", "262687"}, + {"2804:5aa8::/32", "268787"}, + {"2a0d:2581:10::/48", "209261"}, + {"2001:df0:251::/48", "18055"}, + {"2405:6e00:800::/40", "133612"}, + {"2405:7f00:c900::/34", "133414"}, + {"240a:aa3a::/32", "145268"}, + {"240e:44d:1180::/41", "4134"}, + {"2a0e:b107:a0::/44", "209218"}, + {"2001:559:432::/48", "33287"}, + {"2a00:1288:7d::/46", "10310"}, + {"2a02:26f7:c356::/47", "20940"}, + {"2001:4430:5210::/39", "17853"}, + {"2806:2f0:1280::/48", "22884"}, + {"2001:19b0::/32", "7029"}, + {"2404:5c80:2::/32", "59261"}, + {"2800:160:1b25::/46", "14259"}, + {"2806:230:401f::/48", "11888"}, + {"2a01:b740::/47", "714"}, + {"2a03:a300:1140::/48", "35104"}, + {"2001:4888:a60e::/41", "22394"}, + {"2406:8c00::/32", "24282"}, + {"2409:8b44::/28", "24445"}, + {"2804:84b8::/32", "272277"}, + {"2a0d:4040::/29", "35070"}, + {"2403:300:543::/38", "714"}, + {"240e:108:1002::/48", "23724"}, + {"2607:f8f0:690::/48", "271"}, + {"2a04:a900:5::/48", "48619"}, + {"2602:802:d000::/44", "53506"}, + {"2605:46c0:9000::/33", "395658"}, + {"2001:1900:220b::/45", "3356"}, + {"2804:74f4:4::/33", "271014"}, + {"2a00:d640::/31", "213192"}, + {"2c0f:e818::/32", "328475"}, + {"2001:559:810b::/48", "7015"}, + {"2804:2308:5000::/32", "264138"}, + {"2a00:e860:180::/46", "200129"}, + {"2a05:3950:8001::/37", "201503"}, + {"2a0f:efc0::/32", "49544"}, + {"2001:559:c3d7::/48", "22909"}, + {"2405:b8c0::/36", "131677"}, + {"2605:c00:1000::/40", "46920"}, + {"2001:748::/32", "5430"}, + {"2600:6c38:8a8::/43", "20115"}, + {"2620:d4::/48", "6377"}, + {"2a02:26f7:c6c9::/42", "20940"}, + {"2404:8d06:9100::/36", "10089"}, + {"2a01:5f80::/32", "47408"}, + {"2a02:cb80:2740::/48", "43766"}, + {"2001:250:2c00::/45", "138381"}, + {"2001:df3:c700::/48", "137394"}, + {"2404:2a00::/32", "56089"}, + {"240a:a48b::/32", "143813"}, + {"240a:a94f::/32", "145033"}, + {"2620:0:2b17::/48", "20381"}, + {"2803:7800::/32", "263703"}, + {"2a00:1178:4::/32", "35415"}, + {"2a09:0:1::/44", "3214"}, + {"2a0e:b107:1200::/46", "142130"}, + {"2001:1579::/47", "12657"}, + {"2406:840:f620::/47", "140506"}, + {"240a:a5df::/32", "144153"}, + {"2a02:2010:2400::/45", "20978"}, + {"2a02:26f7:ef05::/46", "20940"}, + {"2a0e:97c0:5a0::/47", "210617"}, + {"2a0f:9400:700e::/47", "211144"}, + {"2800:bf0:3040::/46", "52257"}, + {"2600:806:301::/28", "701"}, + {"2600:370f:1065::/40", "32261"}, + {"2803:ca80:2::/32", "263249"}, + {"2a0d:fd40::/41", "14630"}, + {"2001:579:804::/40", "22773"}, + {"2001:bf7:540::/48", "3624"}, + {"2408:8459:c950::/38", "17816"}, + {"2a02:2668:5500::/34", "16345"}, + {"2a04:4e40:a200::/48", "54113"}, + {"2a10:7180::/29", "25459"}, + {"2001:67c:295c::/48", "8365"}, + {"2402:6640:1a::/42", "134995"}, + {"2600:9000:20ac::/43", "16509"}, + {"2803:600::/32", "18809"}, + {"2a06:a001:a020::/44", "48024"}, + {"2603:4007::/28", "3"}, + {"2604:6080::/32", "13739"}, + {"2001:559:2a9::/48", "33491"}, + {"2406:840:e180::/44", "134478"}, + {"240e:438:a40::/37", "4134"}, + {"2a02:970:1289::/39", "44002"}, + {"2001:b28:7b0d::/32", "42065"}, + {"2405:6b00::/48", "132447"}, + {"2603:c025:8000::/35", "31898"}, + {"2801:80:3560::/44", "28614"}, + {"2804:1110::/32", "262901"}, + {"2804:3c80::/35", "266216"}, + {"2a01:ce89:2000::/32", "51964"}, + {"2001:678:f74::/48", "213027"}, + {"2001:67c:790::/48", "207042"}, + {"2804:2f3c:b030::/33", "264879"}, + {"2804:5f00::/47", "269070"}, + {"2a03:8500::/32", "44291"}, + {"2a04:6c00::/29", "62412"}, + {"2a06:1301:4110::/48", "64492"}, + {"240e:3bc:8200::/35", "140316"}, + {"2620:1d0:5c::/48", "397228"}, + {"2800:160:14fe::/39", "14259"}, + {"2a00:1cf8:6000::/35", "44944"}, + {"2a02:26f7:be90::/48", "36183"}, + {"2a09:cd40::/30", "202448"}, + {"2a0f:8880::/29", "42184"}, + {"2001:559:c2f0::/48", "33490"}, + {"2001:df0:bc::/48", "45731"}, + {"2001:1248:7230::/48", "11172"}, + {"2001:1248:a4bf::/41", "11172"}, + {"2607:fd00:7::/48", "32922"}, + {"2804:7a78::/32", "271373"}, + {"2a02:26f0:fa::/47", "20940"}, + {"2604:d600:1c17::/42", "32098"}, + {"2607:fc58:2000:4000::/56", "13536"}, + {"2a02:bc0::/32", "60781"}, + {"240e:3b3::/35", "134773"}, + {"2600:1015:b070::/40", "6167"}, + {"2804:750c::/32", "271020"}, + {"2a07:22c0:8002::/47", "213034"}, + {"2a0e:46c4:2c10::/44", "142289"}, + {"2a10:2980::/29", "209591"}, + {"2803:6000::/32", "52228"}, + {"2a10:64c0::/29", "204007"}, + {"2a11:ad80::/47", "210829"}, + {"240e:438:9620::/43", "140647"}, + {"2600:1001:a010::/40", "22394"}, + {"2605:f500::/39", "1828"}, + {"2804:6fb8::/36", "270679"}, + {"2a00:1b78::/29", "39087"}, + {"2401:3c00:40::/43", "38322"}, + {"2606:2800:5a10::/47", "15133"}, + {"2804:49c:c0f1::/48", "7162"}, + {"2a00:1ec8:62::/47", "2854"}, + {"2a02:26f7:c80d::/42", "20940"}, + {"2001:67c:6c::/48", "1850"}, + {"2001:67c:2ba4::/48", "212864"}, + {"2400:db80::/32", "56293"}, + {"2401:d800:7ae0::/39", "7552"}, + {"2a0d:77c7:d795::/36", "7489"}, + {"2001:44b8:2034::/48", "4739"}, + {"240a:aaab::/32", "145381"}, + {"2a02:cb80:4070::/40", "43766"}, + {"2408:820c:9c10::/34", "17621"}, + {"240e:4c:7800::/31", "4134"}, + {"2a00:11e8::/32", "50399"}, + {"2001:978:8f00:1::/35", "174"}, + {"240e:108:1181::/48", "133775"}, + {"2804:21f8:180::/37", "262272"}, + {"2001:559:86bc::/48", "33287"}, + {"240a:a184::/32", "143038"}, + {"2a0e:b107:800::/44", "213383"}, + {"2404:f780:a::/48", "136557"}, + {"2a00:dfc0::/29", "198551"}, + {"2a0a:6680:1000::/36", "203500"}, + {"2603:f350::/24", "397165"}, + {"2607:9b80:800::/43", "46558"}, + {"2804:6964::/32", "270267"}, + {"2a0a:1240:1100::/32", "12440"}, + {"2a0e:3840:242::/48", "40676"}, + {"2a0e:b107:c9f::/48", "140938"}, + {"2a0e:b107:df6::/48", "141237"}, + {"2602:fed2:731c::/48", "20473"}, + {"2804:338::/32", "262730"}, + {"2804:20fc:1c00::/34", "264525"}, + {"2a01:4ce0:162::/32", "19624"}, + {"2a0e:b107:ea4::/48", "212085"}, + {"2001:559:e2::/47", "33490"}, + {"2001:67c:26ac::/48", "204635"}, + {"2001:df6:8000::/48", "10014"}, + {"240e:67d:8c00::/33", "4134"}, + {"2607:380::/32", "27195"}, + {"2a02:1720::/32", "197219"}, + {"2a02:26f7:cc08::/48", "36183"}, + {"2a02:26f7:e5c1::/46", "20940"}, + {"2a04:5b80:100::/48", "16509"}, + {"240e:5f:600d::/48", "140315"}, + {"2600:370f:74a5::/41", "32261"}, + {"2602:fc37::/36", "399920"}, + {"2801:1a2::/48", "269845"}, + {"2409:8948:9100::/40", "24445"}, + {"2607:ff18:8000::/35", "40630"}, + {"2a02:26f7:34::/48", "36183"}, + {"2001:250:3014::/48", "23910"}, + {"240a:a392::/32", "143564"}, + {"2a02:26f7:bdc1::/46", "20940"}, + {"2402:b800::/32", "7718"}, + {"2600:1405:5401::/36", "20940"}, + {"2a01:53c0:ffeb::/48", "54994"}, + {"2a01:6560::/32", "62248"}, + {"2001:559:275::/48", "33650"}, + {"2001:67c:2ca6::/47", "50838"}, + {"2606:8c00::/48", "22995"}, + {"2607:f3c8::/34", "33724"}, + {"2a01:8640:c::/48", "61102"}, + {"2a02:ddc3:1::/29", "47165"}, + {"2a0b:fe00::/29", "207026"}, + {"2001:1248:97bc::/41", "11172"}, + {"2404:4f00::/34", "17819"}, + {"2404:8d06:7000::/40", "133543"}, + {"2a02:26f7:c40d::/46", "20940"}, + {"2406:2000:efa6::/48", "56173"}, + {"2a0d:3585::/32", "200303"}, + {"2403:ec00:126::/32", "17806"}, + {"240e:67b:e200::/39", "140329"}, + {"2c0f:ea58::/32", "328537"}, + {"2600:1480:9800::/48", "21342"}, + {"2800:160:1f00::/45", "14259"}, + {"2800:370:4::/48", "26613"}, + {"2800:af0::/32", "27984"}, + {"2804:2384::/32", "264167"}, + {"2a00:4800:b0::/41", "8717"}, + {"2001:550:a500:1::/36", "174"}, + {"2804:298c::/32", "264021"}, + {"2a02:26f7:c3::/48", "20940"}, + {"2a02:26f7:bc01::/46", "20940"}, + {"2c0f:f9e0:ffff::/48", "37148"}, + {"2001:559:399::/48", "13367"}, + {"2001:559:84db::/48", "7922"}, + {"2a04:4e40:2610::/44", "54113"}, + {"2001:559:7be::/48", "33657"}, + {"2400:8b00:2100::/42", "45727"}, + {"2604:2880::/48", "46562"}, + {"2803:e5e0::/32", "270035"}, + {"2a06:4180:1::/48", "43595"}, + {"2001:67c:848::/48", "210775"}, + {"2409:8b14::/30", "56044"}, + {"2606:b340::/32", "549"}, + {"2804:5e4c::/32", "269024"}, + {"2804:673c:2000::/40", "264598"}, + {"2a01:a880::/29", "29600"}, + {"2a02:ac87:5901::/40", "25145"}, + {"2a03:380::/32", "13250"}, + {"2a04:3a60:8000::/30", "56467"}, + {"2a0f:e380::/29", "60262"}, + {"2c0f:ecc0::/46", "328523"}, + {"2804:7520::/32", "271025"}, + {"2a0c:ff00::/47", "204975"}, + {"2a0d:ac41::/32", "208861"}, + {"2408:877c::/32", "137539"}, + {"2804:f80::/32", "61893"}, + {"2001:4830:3100::/48", "25623"}, + {"2600:6c7f:9130::/44", "20115"}, + {"2408:8001:3160::/44", "136958"}, + {"240e:980:9300::/40", "134768"}, + {"2602:fd3a:22c::/46", "16509"}, + {"2804:3390::/34", "265404"}, + {"2a0b:2900:7f::/48", "48582"}, + {"2a0e:1000::/29", "60989"}, + {"2001:559:f8::/48", "7922"}, + {"240a:af82::/32", "146620"}, + {"2804:82e4::/32", "272163"}, + {"2a03:7380:2000::/40", "13188"}, + {"2a11:adc0::/29", "49655"}, + {"2a01:c50e:df00::/34", "12479"}, + {"2a11:29c0:b00b::/48", "212149"}, + {"2001:678:bb0::/48", "207687"}, + {"2001:1900:2215::/44", "3356"}, + {"240a:aa72::/32", "145324"}, + {"2404:ec:340::/37", "703"}, + {"2409:8087:6a23::/43", "9808"}, + {"2600:1403:a::/48", "21342"}, + {"2801:15:8001::/44", "263683"}, + {"2a00:a1a0::/32", "41885"}, + {"2a02:26f7:ea44::/48", "36183"}, + {"2001:1a68:15::/48", "35491"}, + {"2606:9c00::/32", "23314"}, + {"2a04:88c0:a::/30", "60781"}, + {"2001:67c:2280::/48", "39399"}, + {"2408:8957:8200::/40", "17622"}, + {"2a00:8a02:10::/42", "200656"}, + {"2a03:5f00:1001::/32", "29644"}, + {"2001:67c:2870::/48", "198743"}, + {"2402:c300::/32", "55653"}, + {"240a:af30::/32", "146538"}, + {"240e:4c:7000::/37", "136197"}, + {"2610:a1:1080::/48", "397226"}, + {"2804:5424::/32", "268631"}, + {"2806:230:3023::/48", "11888"}, + {"2a00:8860:d00::/40", "208136"}, + {"2a05:8700::/29", "43513"}, + {"2a09:7c44::/32", "43624"}, + {"2401:b800::/32", "38248"}, + {"2409:8904:e170::/40", "24547"}, + {"2600:1017:a810::/35", "6167"}, + {"2603:c0fc:1000::/39", "54253"}, + {"2806:230:6021::/48", "11888"}, + {"2001:3c8:c302::/45", "4621"}, + {"2001:503:7bbf::/48", "7342"}, + {"2001:df2:100::/48", "133968"}, + {"2409:8052:1002::/40", "56047"}, + {"2606:4700:3131::/48", "395747"}, + {"2804:62ac::/32", "269311"}, + {"2804:671c::/32", "269604"}, + {"2001:978:5203::/48", "209312"}, + {"2401:d800:9920::/41", "7552"}, + {"2804:20fc:1b01::/40", "264525"}, + {"2804:7394:8000::/33", "270924"}, + {"2a02:26f7:c509::/42", "20940"}, + {"2a05:5e40:f00f::/48", "49681"}, + {"2001:559:c18e::/48", "7922"}, + {"2409:804c:3002::/43", "9808"}, + {"2806:10a6::/46", "8151"}, + {"2a00:1f58::/29", "44385"}, + {"2a00:6240::/32", "198354"}, + {"2402:800:35e0::/44", "7552"}, + {"2a00:17b0::/32", "204896"}, + {"2a02:26f7:f7d1::/42", "20940"}, + {"2a02:cb81:1100::/45", "43766"}, + {"2402:800:5ae0::/44", "7552"}, + {"2607:f428:9180::/42", "19115"}, + {"2804:3d78::/32", "266533"}, + {"2a11:dbc0::/29", "204790"}, + {"2001:568:800::/40", "7861"}, + {"2600:6c20:885::/46", "20115"}, + {"2602:fccf::/36", "398355"}, + {"2a02:26f7:f8d0::/48", "36183"}, + {"2a0b:fa00::/32", "28674"}, + {"2001:559:8235::/48", "7015"}, + {"2001:e60:1070::/33", "4766"}, + {"2408:84f3:ae40::/35", "17816"}, + {"240e:5a:4240::/40", "140293"}, + {"240e:d9:b000::/36", "4134"}, + {"2806:2f0:2081::/48", "22884"}, + {"2a02:26f7:be09::/46", "20940"}, + {"2001:559:534::/48", "33659"}, + {"240a:aa82::/32", "145340"}, + {"2604:d600:66f::/43", "32098"}, + {"2a00:5881:4000::/40", "51083"}, + {"2001:559:178::/48", "33489"}, + {"2001:df5:5d00::/48", "4770"}, + {"2001:2000:4100::/35", "1299"}, + {"2400:fc00:4030::/41", "45773"}, + {"2405:9200:4100::/41", "131596"}, + {"2409:841e::/31", "24400"}, + {"2604:9140:ffff::/48", "265721"}, + {"2804:5e78::/32", "269035"}, + {"2804:8318::/43", "272176"}, + {"2a0a:2b40::/29", "35278"}, + {"2001:559:7e3::/48", "7725"}, + {"2408:8459:cd50::/38", "17816"}, + {"2409:8714:7000::/32", "56044"}, + {"240a:ab8f::/32", "145609"}, + {"2a11:8880::/29", "211344"}, + {"2408:8957:6200::/40", "17622"}, + {"2600:140b:2a01::/39", "20940"}, + {"2a10:740::/29", "62240"}, + {"2a10:2f01:290::/44", "212996"}, + {"2001:550:3b02::/37", "174"}, + {"2607:fa88::/32", "6582"}, + {"2001:4de0:400::/38", "33438"}, + {"2401:c5c0:51::/38", "55492"}, + {"2604:880:59::/46", "29802"}, + {"2604:5740::/32", "19006"}, + {"2620:137:a::/48", "396253"}, + {"2804:2a98::/32", "264082"}, + {"2001:520:1007::/48", "8103"}, + {"2001:559:49c::/48", "33491"}, + {"2001:df7:6880::/48", "133296"}, + {"2404:e100:3006::/47", "133840"}, + {"2408:8456:ec00::/42", "17622"}, + {"2a05:d050:a080::/44", "16509"}, + {"2407:a800:3e11:111a::/64", "4713"}, + {"2600:1404:24::/46", "35994"}, + {"2804:4b0c::/32", "267280"}, + {"2804:7a18::/32", "271347"}, + {"2a11:4900::/29", "42375"}, + {"2001:559:8740::/48", "33657"}, + {"2402:800:9c39::/41", "7552"}, + {"2403:0:117::/44", "4755"}, + {"2409:8008:dc::/48", "9808"}, + {"2804:76d4::/32", "271137"}, + {"2806:230:1013::/48", "11888"}, + {"2001:559:370::/48", "7015"}, + {"2400:2c1:3000::/48", "4766"}, + {"240a:a8ee::/32", "144936"}, + {"2a05:9f44:2a05::/48", "42831"}, + {"2a0e:a800::/29", "212144"}, + {"2001:559:c3c4::/48", "33657"}, + {"2604:ffc0::/47", "36232"}, + {"2620:11f:9009::/48", "14746"}, + {"2804:6bcc::/32", "270426"}, + {"2a0f:8445::/32", "51659"}, + {"2001:489a:2000::/33", "8070"}, + {"2401:4900:5440::/42", "45609"}, + {"2620:105:b000::/40", "2055"}, + {"2803:e600:1d::/32", "18809"}, + {"2804:7cd8::/32", "271522"}, + {"2a02:26f7:e98d::/42", "20940"}, + {"2a0c:b641:212::/48", "209661"}, + {"2c0f:f290::/32", "37492"}, + {"2001:559:80dd::/48", "7015"}, + {"2405:8080::/33", "23664"}, + {"2804:3970::/32", "266030"}, + {"2001:410:102::/48", "53904"}, + {"2400:c700:1302::/34", "55644"}, + {"2a02:26f7:e50d::/46", "20940"}, + {"2001:500:200::/47", "394353"}, + {"2001:559:8000::/48", "33651"}, + {"240e:e9:7000::/37", "134769"}, + {"2605:7b80::/32", "2728"}, + {"2804:ca4::/32", "262336"}, + {"2a0d:140:2000::/29", "209014"}, + {"2a02:24f8::/32", "34385"}, + {"2a10:9100:a::/48", "47890"}, + {"2001:559:8548::/48", "7725"}, + {"2001:4490:33fc::/37", "9829"}, + {"240a:a016::/32", "142672"}, + {"2a00:dc00::/32", "47288"}, + {"2a05:5504:10::/47", "8218"}, + {"2001:253:124::/48", "142090"}, + {"2600:1406:6001::/38", "20940"}, + {"2602:fc48::/36", "63339"}, + {"2606:2800:7100::/48", "15133"}, + {"2001:4c08:2031::/32", "3356"}, + {"2604:d600:1c04::/44", "32098"}, + {"2804:2c58:1110::/38", "265211"}, + {"2400:adc0:110::/47", "9541"}, + {"2600:140b:3400::/48", "31109"}, + {"2a02:b4c::/32", "39572"}, + {"2a0e:1bc7::/35", "208621"}, + {"2001:fd8:68::/40", "4775"}, + {"2401:0:201::/48", "23966"}, + {"2408:8256:3570::/44", "17623"}, + {"2603:c021:8000::/35", "31898"}, + {"2804:60c0::/32", "269188"}, + {"2a02:26f7:f7c1::/46", "20940"}, + {"2001:559:c05e::/48", "7016"}, + {"2600:6c39:236::/44", "20115"}, + {"2001:250:862::/38", "23910"}, + {"240a:2:dcc::/48", "9605"}, + {"2001:67c:208::/48", "30962"}, + {"2001:67c:19f4::/48", "198877"}, + {"2804:14d:1296::/42", "28573"}, + {"2804:f8c::/34", "263591"}, + {"2a01:8840:36::/44", "12041"}, + {"2a0c:f780::/29", "210321"}, + {"2a0d:c2c0::/29", "44592"}, + {"2a0f:2980::/29", "39587"}, + {"2001:678:6::/48", "44358"}, + {"240a:aa1d::/32", "145239"}, + {"240e:397:2100::/38", "140496"}, + {"2606:e000::/32", "26531"}, + {"2a02:26f0:d600::/48", "34164"}, + {"2001:559:830f::/48", "7922"}, + {"2405:6600:704::/44", "45845"}, + {"240a:a064::/32", "142750"}, + {"240a:ad42::/32", "146044"}, + {"2620:11f:e000::/40", "12243"}, + {"2a00:11c0:38::/48", "203833"}, + {"2a0c:e040:1338::/29", "200629"}, + {"2408:8459:850::/38", "17816"}, + {"2800:937::/32", "264731"}, + {"2804:2480::/32", "264227"}, + {"2a01:6940::/32", "29605"}, + {"2001:559:838a::/48", "7015"}, + {"2001:a98:601::/33", "8517"}, + {"2408:8956:1b40::/40", "17816"}, + {"240a:a513::/32", "143949"}, + {"2620:a8:4000::/48", "393900"}, + {"2a01:358:5013::/36", "9121"}, + {"2001:1248:59ef::/43", "11172"}, + {"2408:8956:7f00::/40", "17816"}, + {"240e:a67::/35", "140329"}, + {"2402:800:3ad3::/44", "7552"}, + {"240a:a052::/32", "142732"}, + {"2602:ff76::/36", "21722"}, + {"2a03:1c0::/32", "202207"}, + {"2a04:4e42:26::/47", "54113"}, + {"2401:d800:7c90::/42", "7552"}, + {"2403:5f40::/48", "9268"}, + {"240a:a506::/32", "143936"}, + {"240e:982:d400::/40", "131325"}, + {"2804:4b0:308::/43", "262459"}, + {"2804:4098:f0db::/39", "265969"}, + {"2804:6a20::/32", "270311"}, + {"2001:559:c4aa::/48", "7922"}, + {"2402:600:2::/35", "38515"}, + {"2405:58c0:3c00::/40", "133101"}, + {"2409:8914:a800::/39", "56044"}, + {"2607:a680::/44", "395092"}, + {"2607:f740:e045::/44", "63911"}, + {"2610:178::/32", "16668"}, + {"2804:3838:31::/32", "53170"}, + {"2a00:11c0:4a::/48", "42473"}, + {"2a02:26f7:f3cd::/42", "20940"}, + {"2a04:f080::/29", "34636"}, + {"2a0c:cac0::/29", "202373"}, + {"2a0e:4680::/32", "24961"}, + {"2401:d800:b660::/40", "7552"}, + {"240c:ca0b::/32", "24363"}, + {"2604:5500::/42", "19165"}, + {"2607:ffb0:5003::/45", "6327"}, + {"2a07:e740:dc01::/43", "43299"}, + {"240e:44d:7540::/42", "140356"}, + {"2405:2040:2302::/48", "48024"}, + {"2409:8054::/45", "56040"}, + {"2600:1004:b100::/42", "6167"}, + {"2a01:780::/32", "25415"}, + {"2a02:26f0:8301::/37", "20940"}, + {"2a0e:b107:19f::/48", "209506"}, + {"2a00:d200::/29", "56329"}, + {"2a02:26f7:e1c0::/48", "36183"}, + {"2a0b:f380::/48", "49544"}, + {"2a0f:540::/29", "7018"}, + {"2001:559:4f7::/48", "7922"}, + {"2001:df2:eb00::/48", "9930"}, + {"2001:44c8:4740::/44", "131445"}, + {"2402:e280:2253::/39", "134674"}, + {"2409:8080:2a90::/44", "9808"}, + {"2602:fbf6:800::/37", "62853"}, + {"2602:fed2:7106::/48", "23470"}, + {"2606:69c0:9000::/36", "11039"}, + {"2001:4f8:b::/48", "16509"}, + {"2408:840d:400::/42", "17621"}, + {"2001:df7:7800::/48", "17523"}, + {"240a:adef::/32", "146217"}, + {"240e:980:4500::/40", "58461"}, + {"2620:14a::/36", "13684"}, + {"2a00:4bc0:2101::/44", "16509"}, + {"2a0e:8f02:f01d::/48", "211747"}, + {"2a0f:cf80::/29", "208861"}, + {"2001:559:24a::/48", "33652"}, + {"2001:579:cec0::/39", "22773"}, + {"2001:4b88::/32", "20640"}, + {"2600:6:ff06::/44", "10507"}, + {"2806:2f0:9801::/46", "17072"}, + {"2001:559:818d::/46", "7922"}, + {"2404:f800::/32", "8075"}, + {"240a:aad0::/32", "145418"}, + {"2a03:d000:2000::/36", "31133"}, + {"2a0e:b107:f08::/45", "9886"}, + {"2402:6e80::/32", "139100"}, + {"2600:1f00:6000::/40", "16509"}, + {"2603:f048::/29", "63023"}, + {"2a03:5500::/31", "8315"}, + {"2a06:900:1849::/29", "34373"}, + {"2402:800:bc30::/41", "7552"}, + {"2602:fd13::/36", "397787"}, + {"2a02:ee80:40a8::/46", "3573"}, + {"2a04:c440::/34", "2047"}, + {"2001:579:717c::/40", "22773"}, + {"2610:1a0::/41", "40193"}, + {"2804:160c:4000::/36", "263264"}, + {"2804:2238::/36", "264598"}, + {"2804:70b0::/32", "270742"}, + {"2a00:fc0::/32", "3212"}, + {"2a0a:a0c0::/29", "50973"}, + {"2400:4ec0:d746::/34", "64300"}, + {"2402:800:5455::/42", "7552"}, + {"2a00:7580:60::/48", "8414"}, + {"2a01:94c0::/32", "31370"}, + {"2a0b:6340::/32", "29423"}, + {"2c0f:ee78:8001::/46", "61317"}, + {"2409:8c34:ac00::/33", "9808"}, + {"2606:2e00:8024::/46", "36351"}, + {"2607:f330:6000::/36", "15130"}, + {"2a05:71c0::/29", "34993"}, + {"2001:1a11:118::/48", "8781"}, + {"240a:ad10::/32", "145994"}, + {"2620:12a:2000::/44", "395421"}, + {"2804:6028::/32", "269149"}, + {"2a0e:a180::/29", "208591"}, + {"2a11:e87:6000::/32", "208861"}, + {"2409:8c85:420::/44", "24547"}, + {"2604:5f00::/32", "10755"}, + {"2a00:1c10::/42", "50300"}, + {"2a02:888:8251::/48", "47794"}, + {"2a10:3300::/29", "207459"}, + {"240a:a74e::/32", "144520"}, + {"2620:10a:6000::/44", "33651"}, + {"2804:1374::/32", "263534"}, + {"2804:1dc8::/32", "264393"}, + {"2804:46e4::/32", "267018"}, + {"2806:2f0:7121::/46", "17072"}, + {"2a02:26f7:b6cd::/42", "20940"}, + {"2a0b:b87:ffc0::/44", "50867"}, + {"2606:1a40:200c::/47", "394256"}, + {"2804:6d28::/48", "270516"}, + {"2409:8915:9600::/30", "56044"}, + {"240e:37d:aa00::/39", "140330"}, + {"2806:20d:5502::/38", "32098"}, + {"2408:8256:377c::/46", "17623"}, + {"2a0e:8f02:f027::/48", "212519"}, + {"2402:5680:2000::/36", "133798"}, + {"2404:f4c0:886e::/48", "210384"}, + {"240e:83:800::/32", "4134"}, + {"240e:109:802b::/41", "4134"}, + {"2804:5244::/32", "268506"}, + {"2001:1248:57fe::/47", "11172"}, + {"2407:2880:c001::/46", "24314"}, + {"2407:c000::/32", "9270"}, + {"2605:3c80:fc::/46", "32787"}, + {"2804:68ec::/32", "270237"}, + {"2401:d800:92e2::/39", "7552"}, + {"2606:4a00::/35", "33154"}, + {"2a11:bc0::/48", "208085"}, + {"2001:559:276::/48", "33651"}, + {"2620:28:c000::/48", "55219"}, + {"2402:800:97b7::/41", "7552"}, + {"2408:8456:4440::/38", "17816"}, + {"2409:8904:34a0::/39", "24547"}, + {"2804:13b0:bc00::/45", "263546"}, + {"2a07:59c1:2010::/48", "210770"}, + {"2001:4938::/32", "33554"}, + {"2408:8956:ad00::/40", "17816"}, + {"2605:a401:815e::/42", "33363"}, + {"2a02:26f7:f548::/48", "36183"}, + {"2001:559:8614::/47", "33651"}, + {"2001:4408:5221::/45", "4758"}, + {"240a:acc7::/32", "145921"}, + {"2600:1016:a110::/35", "6167"}, + {"2800:bf0:2001::/39", "27947"}, + {"2a03:2be0::/32", "59859"}, + {"2404:3d00:40e8::/47", "21433"}, + {"2600:1000:d000::/42", "6167"}, + {"2a01:540:9000::/34", "12389"}, + {"2a01:c9c0:cf::/48", "8891"}, + {"2001:559:c1c7::/44", "7922"}, + {"2001:4878:2031::/48", "12222"}, + {"2402:7400:3000::/33", "38883"}, + {"2403:9e00::/32", "9443"}, + {"2404:160:8080::/34", "10030"}, + {"2600:1012::/32", "22394"}, + {"2001:253:108::/48", "142074"}, + {"2408:8957:bc00::/40", "17622"}, + {"240a:a874::/32", "144814"}, + {"240a:ac98::/32", "145874"}, + {"2620:73:e000::/48", "396970"}, + {"2804:1cd8:4::/32", "262691"}, + {"2804:4ae8::/32", "267271"}, + {"2a02:450::/36", "34372"}, + {"2001:67c:2330::/48", "56963"}, + {"2409:8050:800::/47", "56047"}, + {"2607:f3c8:8000::/33", "33724"}, + {"2a02:26f7:e0c5::/46", "20940"}, + {"2a06:94c0::/29", "51918"}, + {"2001:250:7004::/48", "24369"}, + {"2404:1f00::/33", "55947"}, + {"2806:370:12a0::/41", "28403"}, + {"2a02:2500::/32", "5390"}, + {"2401:d800:7250::/42", "7552"}, + {"240a:a1a2::/32", "143068"}, + {"2607:f770::/32", "22958"}, + {"2a02:288::/32", "16300"}, + {"2a06:4c0::/32", "60447"}, + {"2a0a:61c0::/29", "206119"}, + {"2c0f:f3d8::/32", "327741"}, + {"2620:0:d60::/46", "46"}, + {"2800:3a0:2::/45", "23201"}, + {"2a03:8600:1::/48", "38945"}, + {"2a10:cc42:1b1b::/45", "20473"}, + {"2001:559:1bb::/48", "7922"}, + {"2400:fe00::/32", "17968"}, + {"2404:3d80:300::/40", "210542"}, + {"2409:8935::/28", "9808"}, + {"240e:946:2::/34", "58540"}, + {"2a0c:5440:80::/44", "209650"}, + {"2001:559:84df::/48", "33659"}, + {"2409:250::/28", "55392"}, + {"2804:2978::/32", "264017"}, + {"2001:2010::/30", "3308"}, + {"2404:f4c0:fc80::/44", "139888"}, + {"2600:40ff:fffa::/47", "701"}, + {"2804:4ac4::/32", "267262"}, + {"2a00:5560::/32", "205411"}, + {"2a01:648::/29", "57809"}, + {"2a02:26f7:c049::/46", "20940"}, + {"2a0e:b107:12a0::/44", "211851"}, + {"240a:ad38::/32", "146034"}, + {"2a07:e03:30::/39", "210083"}, + {"2001:559:81e5::/48", "33650"}, + {"2409:896a:5400::/39", "9808"}, + {"2409:897f::/24", "9808"}, + {"2a02:e740::/48", "61157"}, + {"2a05:d050:e040::/44", "16509"}, + {"2a06:e881:1200::/44", "202928"}, + {"2001:1578:100::/40", "29317"}, + {"2406:2000:a5::/46", "10310"}, + {"2408:8a00:c000::/35", "9929"}, + {"240a:a069::/32", "142755"}, + {"240a:af36::/32", "146544"}, + {"2607:fdf0:5e31::/45", "8008"}, + {"2610:58:3:aaab::/32", "111"}, + {"2a00:e20:143::/48", "16509"}, + {"2a0a:c0c0::/29", "52031"}, + {"2804:824c::/35", "272511"}, + {"2a0e:aa07:e02e::/48", "210320"}, + {"2001:fd8:64::/46", "132199"}, + {"2606:2800:4aa4::/46", "15133"}, + {"2a02:10:100::/48", "5418"}, + {"2a02:26f7:5d::/48", "20940"}, + {"2605:a401:80ed::/39", "33363"}, + {"2001:503:eea3::/48", "397197"}, + {"2001:1248:a61e::/41", "11172"}, + {"2400:5a20:2::/48", "139006"}, + {"240e:9b:f00c::/46", "140249"}, + {"240a:a3f7::/32", "143665"}, + {"2607:f6f0:206::/48", "27566"}, + {"2806:20d:1d38::/41", "32098"}, + {"2a02:26f7:f64d::/42", "20940"}, + {"2a04:f000::/29", "60016"}, + {"2602:feda:c10::/44", "212359"}, + {"2803:6a60:4::/32", "262186"}, + {"2804:5b04::/32", "268813"}, + {"2001:559:85fe::/48", "7015"}, + {"2409:8070:100::/36", "9808"}, + {"2804:5bd8::/32", "268872"}, + {"2401:4900:4f10::/44", "45609"}, + {"2409:8914:4200::/39", "56044"}, + {"2804:31e8::/32", "265044"}, + {"2806:2f0:9943::/42", "17072"}, + {"2a01:8e80::/29", "8362"}, + {"2a02:348:4::/43", "35470"}, + {"2a03:85c0::/39", "20561"}, + {"2001:1248:873f::/41", "11172"}, + {"2a0a:1400::/30", "400177"}, + {"2a0a:56c4:8600::/47", "42649"}, + {"2001:678:c2c::/48", "212746"}, + {"2400:5080::/48", "38379"}, + {"2600:1405:7001::/37", "20940"}, + {"2800:160:1566::/44", "14259"}, + {"2804:124c::/37", "263468"}, + {"2806:264:300::/41", "13999"}, + {"2806:1070:cfff:8::/64", "8151"}, + {"2a02:888:8248::/47", "48695"}, + {"2a0e:6540:a0::/48", "208364"}, + {"2408:8256:466::/39", "17622"}, + {"2600:9000:1113::/42", "16509"}, + {"2620:0:2b80::/44", "10702"}, + {"2804:1440::/32", "263321"}, + {"2806:100f::/27", "8151"}, + {"2a00:1d88::/32", "13249"}, + {"2a0d:fec0:121::/45", "47481"}, + {"2409:8c28:30b1::/39", "56041"}, + {"240a:a4e0::/32", "143898"}, + {"2804:264c::/32", "264338"}, + {"2a00:86c0:208a::/45", "2906"}, + {"2a01:9260::/32", "28753"}, + {"2a02:26f7:bf84::/48", "36183"}, + {"2001:67c:293c::/48", "211742"}, + {"2001:1a11:116::/47", "42298"}, + {"2402:8bc0::/32", "59012"}, + {"2409:8003:2c00::/32", "9808"}, + {"2605:b100:100::/41", "577"}, + {"2803:9a40::/33", "263824"}, + {"2806:21a:8000::/48", "262913"}, + {"2a02:ff0:14f4::/44", "12735"}, + {"2001:ab8::/29", "34177"}, + {"2001:1248:8864::/43", "11172"}, + {"2001:1878:500::/40", "127"}, + {"2408:8456:4a10::/42", "134543"}, + {"240e:44d:3100::/41", "140345"}, + {"2001:7f8:f::/48", "6895"}, + {"2604:e000::/32", "27553"}, + {"2605:f880::/32", "32281"}, + {"2804:8304::/32", "272171"}, + {"2a04:ff00:500::/48", "23470"}, + {"2405:34c0:1::/45", "134316"}, + {"2408:8872::/32", "4837"}, + {"2001:579:8d9::/42", "22773"}, + {"240e:967:5800::/32", "4134"}, + {"2600:1fa0:6040::/44", "16509"}, + {"2803:c180:2310::/37", "52341"}, + {"2804:44bc::/32", "267650"}, + {"2804:7c14::/33", "271474"}, + {"2a00:1a98::/32", "21107"}, + {"2a04:4e40:7400::/48", "54113"}, + {"2602:fbee::/40", "7247"}, + {"2803:b4c0:4::/32", "264668"}, + {"2401:c500:fd01::/48", "13658"}, + {"2a05:3950:8661::/33", "201503"}, + {"2a0d:3584:1111::/48", "200303"}, + {"2402:5680:6000::/36", "133798"}, + {"2620:119:e021::/43", "30337"}, + {"2620:12d:e004::/46", "397635"}, + {"2001:470:4a::/48", "6379"}, + {"2605:f740::/32", "25892"}, + {"2803:a410:9191::/48", "64114"}, + {"2001:da8:3006::/48", "23910"}, + {"2620:135:600b::/41", "22697"}, + {"2a01:71e0::/32", "199811"}, + {"2403:a640:200::/39", "63786"}, + {"2408:8956:2d00::/40", "17816"}, + {"240a:a050::/32", "142730"}, + {"2600:1f01:4820::/47", "16509"}, + {"2803:c240::/35", "41095"}, + {"2804:13b0:fc00::/38", "263546"}, + {"2a04:53c0:85::/48", "47784"}, + {"2001:df6:4080::/48", "141999"}, + {"2409:8b10:2400::/30", "9808"}, + {"2604:980:1::/48", "40676"}, + {"2a00:cc0:fffd::/46", "13237"}, + {"240a:a2ef::/32", "143401"}, + {"2604:f740:100::/38", "397041"}, + {"2800:160:17bb::/41", "14259"}, + {"2a03:50a0::/32", "39699"}, + {"2a07:1980:20::/46", "48851"}, + {"2a0c:ef40::/29", "49223"}, + {"2402:3c80::/32", "64098"}, + {"2605:3380:4147::/44", "12025"}, + {"2a03:3380::/46", "47169"}, + {"2001:678:2c::/48", "48283"}, + {"240e:3bf:8200::/35", "140316"}, + {"2604:d600:c32::/45", "32098"}, + {"2a02:501::/32", "29345"}, + {"2a07:7180::/29", "42148"}, + {"2a09:fb86::/32", "35913"}, + {"2001:1248:9a0b::/45", "11172"}, + {"2001:44b8:4000::/48", "7545"}, + {"2405:8a00:8001::/43", "55824"}, + {"2607:faf8::/32", "7029"}, + {"2804:3720:1000::/34", "266391"}, + {"2a02:26f7:c900::/48", "36183"}, + {"2a10:7100::/29", "399975"}, + {"2001:df1:4300::/48", "9746"}, + {"2a02:26f7:d909::/46", "20940"}, + {"2a02:ac80:3001::/33", "25145"}, + {"2a03:2e4::/30", "197451"}, + {"2a04:4e40:7200::/48", "54113"}, + {"2001:1248:9c38::/41", "11172"}, + {"2401:d800:fbc0::/42", "7552"}, + {"2804:69b4:7800::/38", "270286"}, + {"2401:cb80::/32", "63581"}, + {"2402:800:360f::/43", "7552"}, + {"2402:800:3dc5::/43", "7552"}, + {"2405:e5c0::/32", "58971"}, + {"2409:8924:ad00::/38", "56046"}, + {"2a00:1358:c101::/35", "6866"}, + {"2001:ce0:2300::/37", "3662"}, + {"2001:43f8:6b0::/47", "8094"}, + {"2408:8456:7240::/39", "17816"}, + {"2602:fed3:11::/48", "21769"}, + {"2804:5d10::/34", "268948"}, + {"2a06:e881:4001::/46", "204604"}, + {"2a07:c840::/29", "62183"}, + {"2a10:2f00:123::/48", "58133"}, + {"2001:559:42::/48", "7922"}, + {"2001:559:c43d::/48", "7015"}, + {"2402:800:7880::/42", "7552"}, + {"2402:3a80:1730::/48", "38266"}, + {"2408:80ea:6680::/41", "17622"}, + {"2409:4060:3000::/31", "55836"}, + {"240e:63::/34", "140313"}, + {"2606:bc00:8001::/36", "19419"}, + {"2800:4b0:4100::/38", "12252"}, + {"2a02:26f7:f888::/48", "36183"}, + {"2a11:9480::/29", "204790"}, + {"2001:559:c39e::/48", "7015"}, + {"240a:abe7::/32", "145697"}, + {"2606:9e00::/32", "16413"}, + {"2620:122::/46", "394186"}, + {"2800:bf0:28::/45", "27947"}, + {"2806:2f0:42c1::/42", "17072"}, + {"2001:67c:c::/48", "48136"}, + {"2001:b10:c000::/35", "8501"}, + {"2402:800:56ee::/39", "7552"}, + {"2607:3700::/32", "16851"}, + {"2804:76c::/32", "262648"}, + {"2804:1638:fac4::/44", "263276"}, + {"2806:2f0:9b63::/40", "17072"}, + {"2a02:4dc0::/32", "25374"}, + {"2a0a:a800::/29", "207198"}, + {"2402:8400:900::/40", "17820"}, + {"2403:2700:4001::/48", "38500"}, + {"2600:1004:d100::/41", "6167"}, + {"2804:5dcc::/32", "268993"}, + {"2806:2f0:1081::/48", "17072"}, + {"2a02:26f7:d184::/48", "36183"}, + {"2602:fdc2:100::/44", "397720"}, + {"2605:7940:face::/48", "30456"}, + {"2607:f6f0:5002::/47", "27224"}, + {"2620:16e:87::/48", "3147"}, + {"2804:cb0:dc01::/34", "52742"}, + {"2804:19c8:3100::/32", "61818"}, + {"2a00:f80:257::/32", "25542"}, + {"2a02:2698:1800::/38", "51604"}, + {"2804:4ac::/32", "262458"}, + {"2804:4c5c::/32", "267366"}, + {"2a00:ac40::/46", "49694"}, + {"2001:559:743::/48", "33287"}, + {"2404:2280:147::/48", "24429"}, + {"2607:f740:e005::/44", "63911"}, + {"2804:13dc:ffff::/48", "262428"}, + {"2a02:2e02:8530::/41", "12479"}, + {"2a02:6900:8208::/48", "4184"}, + {"2a0a:edc0::/32", "209379"}, + {"2001:559:c19c::/46", "33491"}, + {"2401:d800:2bc0::/42", "7552"}, + {"240a:a853::/32", "144781"}, + {"240e:b7:8000::/28", "4134"}, + {"2a00:fa8::/32", "5605"}, + {"2001:ee0:d840::/40", "45899"}, + {"2800:bf0:814a::/48", "27947"}, + {"2a02:26f0:bc01::/40", "20940"}, + {"2a02:26f0:c101::/40", "20940"}, + {"2001:4988::/32", "7029"}, + {"2400:56a0:100::/38", "149485"}, + {"2605:b100:400::/40", "577"}, + {"2804:14c:6185::/41", "28573"}, + {"2a09:400:3000::/36", "208861"}, + {"2a0f:9400:7730::/44", "211767"}, + {"2001:559:2bc::/48", "7922"}, + {"2001:559:3d6::/48", "33652"}, + {"240a:a64a::/32", "144260"}, + {"240b:4000::/30", "45102"}, + {"2607:ff80::/36", "33509"}, + {"2620:4:4000::/48", "53819"}, + {"2803:fbe0:8000::/46", "270092"}, + {"2a05:1000::/47", "201675"}, + {"2401:d800:9440::/42", "7552"}, + {"2403:f000:1::/48", "38220"}, + {"2604:ca00:e000::/48", "36492"}, + {"2a01:8840:e5::/48", "207266"}, + {"2a0a:7700::/29", "206984"}, + {"2406:840:feff::/48", "141445"}, + {"2607:6b80:3c::/48", "13213"}, + {"2804:d70:180::/37", "52626"}, + {"2a01:5ac0::/32", "25460"}, + {"2a02:26f7:7a::/48", "36183"}, + {"2001:559:c2a9::/48", "33287"}, + {"2402:e280:223b::/41", "134674"}, + {"2604:1940::/33", "47096"}, + {"2607:fb10:5073::/40", "2906"}, + {"2a01:cd01:8080::/48", "28708"}, + {"2a02:e982:32::/45", "19551"}, + {"2405:e180::/32", "134143"}, + {"2803:7d80::/33", "11664"}, + {"2a02:2ad0:247::/44", "702"}, + {"2a0a:d6c0:186::/48", "212981"}, + {"2001:1248:8418::/45", "11172"}, + {"2409:8a52:f00::/35", "56047"}, + {"2603:f508::/26", "397165"}, + {"2800:160:105c::/42", "14259"}, + {"2c0f:ff90::/32", "15808"}, + {"2001:67c:78::/48", "20847"}, + {"2405:b900:30::/44", "55701"}, + {"2600:9000:11d1::/44", "16509"}, + {"2602:807:50f8::/47", "55136"}, + {"2607:9800:c114::/46", "15085"}, + {"2804:6e4:9000::/36", "262612"}, + {"2a02:26f7:c840::/48", "36183"}, + {"2001:250:584b::/42", "24363"}, + {"2001:559:8043::/45", "7015"}, + {"2001:559:8300::/48", "33651"}, + {"2001:44b8:3088::/48", "7545"}, + {"2001:67c:18d4::/48", "62075"}, + {"2801:1f:2800::/48", "19429"}, + {"2804:4eb0::/32", "268278"}, + {"2804:6594::/32", "269501"}, + {"2a0e:b107:861::/48", "211840"}, + {"2001:559:85e1::/48", "13367"}, + {"2001:df0:18::/48", "45344"}, + {"2001:df1:bb80::/48", "18207"}, + {"2804:1a58::/32", "61855"}, + {"2804:4000::/32", "265927"}, + {"2001:1248:9976::/44", "11172"}, + {"2602:800:900f::/48", "16876"}, + {"2602:fd16::/32", "62611"}, + {"2801:1b4::/46", "14080"}, + {"2804:31dc::/32", "265041"}, + {"2a02:26f7:b888::/48", "36183"}, + {"2001:559:84b2::/48", "7922"}, + {"2404:48c0::/32", "138134"}, + {"2001:559:82ef::/43", "33651"}, + {"2001:559:8542::/47", "33651"}, + {"2001:1a11:14d::/43", "42298"}, + {"2401:4800:feed::/48", "38457"}, + {"2402:6780::/32", "45213"}, + {"2604:d600:91e::/42", "32098"}, + {"2804:1b2::/35", "18881"}, + {"2804:80ec::/36", "272421"}, + {"2600:6:ff0b::/42", "1239"}, + {"2001:df4:1f80::/48", "18131"}, + {"2001:1b70:4280::/48", "8147"}, + {"2408:8409:3000::/40", "4808"}, + {"2a00:18d8:2::/48", "328126"}, + {"2001:559:26f::/48", "33652"}, + {"2400:c800::/39", "4515"}, + {"2401:8340::/32", "136168"}, + {"240e:d2::/33", "140330"}, + {"240e:f7:a000::/35", "136188"}, + {"2a02:bf8::/35", "1239"}, + {"2a02:6280::/32", "3257"}, + {"2a09:bac0:270::/48", "13335"}, + {"2a0b:47c0::/29", "204805"}, + {"2a0e:1c80:9::/48", "41281"}, + {"2a10:cc40:100::/43", "211659"}, + {"2a11:c880::/29", "52000"}, + {"2404:f801:802d::/33", "3598"}, + {"2620:78:a000::/48", "397990"}, + {"2a02:2a58::/39", "702"}, + {"2001:559:192::/48", "20214"}, + {"2001:df3:9c00::/48", "55536"}, + {"2001:4998:eff5::/48", "36647"}, + {"2804:24e4:f000::/36", "264247"}, + {"2a02:26f7:d105::/46", "20940"}, + {"240e:965:2800::/37", "133776"}, + {"2600:1408:9400::/48", "35994"}, + {"2604:2e80:2::/36", "30036"}, + {"2800:bf0:16f::/43", "52257"}, + {"2804:2e84:ab::/32", "265350"}, + {"2402:e380:316::/48", "140733"}, + {"2406:4500::/32", "38342"}, + {"2001:559:8019::/48", "33491"}, + {"2401:4900:1f20::/47", "24560"}, + {"2409:8057:3806::/48", "9808"}, + {"240e:640:f00::/32", "4134"}, + {"2602:fcce:b2::/41", "399200"}, + {"2605:b000::/32", "33361"}, + {"2806:230:400b::/48", "11888"}, + {"2a02:2430:3::/48", "59491"}, + {"2a02:26f7:83::/48", "20940"}, + {"2a06:3200::/29", "204989"}, + {"2a0e:9bc0::/29", "204790"}, + {"2408:8756:1000::/37", "17622"}, + {"2a04:5980::/29", "201587"}, + {"2a07:dc0::/29", "25231"}, + {"2001:44b8:3081::/48", "4739"}, + {"2600:100b:a110::/35", "6167"}, + {"2001:559:815a::/48", "7015"}, + {"2001:559:8608::/48", "7922"}, + {"2001:1248:5611::/44", "11172"}, + {"2607:f160:25::/48", "22394"}, + {"2803:3240:1::/48", "36351"}, + {"2804:62cc::/32", "269319"}, + {"2a00:1638::/32", "49322"}, + {"2001:67c:3c0::/48", "197495"}, + {"2001:1250:b000::/44", "22894"}, + {"240a:af6f::/32", "146601"}, + {"2607:faa0::/32", "11924"}, + {"2804:9d4:216::/35", "262996"}, + {"2405:f600:11::/44", "45117"}, + {"240e:3b0:9200::/36", "140317"}, + {"2620:134:c003::/45", "394887"}, + {"2001:253:103::/48", "142069"}, + {"2402:dfc0::/44", "4808"}, + {"2406:7340::/32", "132566"}, + {"2804:5a4::/32", "262531"}, + {"2804:7900::/32", "271279"}, + {"2a02:26f7:e7c8::/48", "36183"}, + {"240a:a980::/32", "145082"}, + {"2620:0:1a80::/48", "46964"}, + {"2800:160:132e::/43", "14259"}, + {"2804:6328::/32", "269342"}, + {"2001:559:272::/47", "33287"}, + {"2402:800:37e0::/44", "7552"}, + {"2607:f750:b000::/40", "23473"}, + {"2602:fde1:bb8::/48", "397546"}, + {"2604:d600:620::/45", "32098"}, + {"2604:f980:2600::/40", "19957"}, + {"2401:d800:b520::/41", "7552"}, + {"2001:1388:1454::/40", "6147"}, + {"2402:800:541d::/42", "7552"}, + {"2404:e740:4::/32", "139195"}, + {"2405:8a00:2003::/44", "55824"}, + {"240a:a3c6::/32", "143616"}, + {"240e:978:3100::/36", "4134"}, + {"2a10:c140::/29", "211572"}, + {"2001:559:335::/48", "33657"}, + {"2001:67c:2400::/48", "57146"}, + {"2001:1998:200::/39", "16787"}, + {"240a:a5ce::/32", "144136"}, + {"2a01:7e80:117::/38", "197990"}, + {"2401:1d40:2100::/48", "4811"}, + {"2401:7000:c100::/35", "45177"}, + {"2408:840c:a000::/40", "17621"}, + {"240e:95:8002::/33", "17638"}, + {"2604:7ac0:f00::/40", "12213"}, + {"2804:14c:489::/42", "28573"}, + {"2804:204::/38", "28186"}, + {"2804:3b1c::/32", "266130"}, + {"2a02:26f7:99::/48", "20940"}, + {"2001:1650::/32", "24776"}, + {"240a:41cc::/31", "58834"}, + {"2600:1480:a000::/40", "33905"}, + {"2620:6e:a000::/46", "397444"}, + {"2a0e:fd45:7::/36", "44103"}, + {"2001:1248:9895::/46", "11172"}, + {"2001:1878:810::/38", "226"}, + {"2a0d:e4c4:b000::/36", "210625"}, + {"2409:8054:4c::/48", "9808"}, + {"2804:5624::/32", "267979"}, + {"2a02:598:3::/34", "43037"}, + {"2a02:26f7:c7c4::/48", "36183"}, + {"2a11:d80::/31", "210625"}, + {"2402:800:317f::/40", "7552"}, + {"240a:afaa::/32", "146660"}, + {"2602:feda:b8a::/48", "140889"}, + {"2a02:26f7:f4c5::/46", "20940"}, + {"2a0d:4d40:1a::/48", "50630"}, + {"2a0f:8980::/32", "39351"}, + {"2001:559:5bc::/48", "7016"}, + {"2001:57a:200::/37", "33438"}, + {"2a00:1768::/33", "43350"}, + {"2a02:88d:30::/44", "48695"}, + {"2a06:8804:1::/30", "12517"}, + {"2600:1003:b1e0::/37", "22394"}, + {"2600:5c01:1fff::/34", "10796"}, + {"2404:8d02:49c6::/37", "9587"}, + {"2407:bc00::/32", "37963"}, + {"2804:4d8::/32", "52995"}, + {"2001:559:859d::/46", "7922"}, + {"2001:4bd8:53::/29", "15725"}, + {"2603:c026:8000::/35", "31898"}, + {"2a04:4e40:5e00::/48", "54113"}, + {"240e:3b7:6400::/35", "140312"}, + {"2600:1017:b1e0::/38", "6167"}, + {"2600:141b:a001::/35", "20940"}, + {"2a09:47c0::/48", "44364"}, + {"2001:480::/44", "668"}, + {"2001:559:519::/48", "33651"}, + {"2400:cc00:8900::/38", "17477"}, + {"2402:8100:3880::/42", "55644"}, + {"240a:ab71::/32", "145579"}, + {"240e:a7:7fe7::/44", "140521"}, + {"2604:4d40:2000::/36", "53667"}, + {"2a0b:9e40::/29", "61138"}, + {"2001:57a:f303::/31", "22773"}, + {"2402:c100::/36", "23673"}, + {"240a:a722::/32", "144476"}, + {"2602:805::/44", "53809"}, + {"2606:1a40:1000::/44", "398962"}, + {"2620:13f:d000::/44", "398767"}, + {"2804:14c4::/32", "263349"}, + {"2a02:26f7:bc81::/46", "20940"}, + {"2403:0:e::/39", "4755"}, + {"2c0f:ec48::/32", "327991"}, + {"2401:d800:5af0::/39", "7552"}, + {"2404:9d80::/32", "59249"}, + {"2600:1419:4401::/38", "20940"}, + {"2804:14d:7e8a::/45", "28573"}, + {"2a01:288:4009::/32", "8717"}, + {"2001:470:e5::/48", "6939"}, + {"2001:559:c3c3::/48", "7015"}, + {"2001:4402::/31", "9500"}, + {"2407:8b00::/35", "64073"}, + {"2804:d24::/32", "52603"}, + {"2a00:1de0::/32", "38915"}, + {"2001:559:3a5::/48", "7922"}, + {"2001:67c:27e4::/48", "198644"}, + {"2603:40ff:6000::/36", "10578"}, + {"2806:2f0:2481::/48", "22884"}, + {"2a00:cba0::/32", "21476"}, + {"2a02:220e:270::/40", "6697"}, + {"2a0b:4340:97::/48", "205610"}, + {"240a:abe1::/32", "145691"}, + {"2a05:1700::/48", "56577"}, + {"2a09:95c0::/48", "209562"}, + {"2803:ecc0:deae::/34", "264814"}, + {"2a02:26f7:f74c::/48", "36183"}, + {"2a06:bf40::/30", "400177"}, + {"2401:d800:9020::/41", "7552"}, + {"2401:ee00:1082::/34", "23951"}, + {"2404:e6:110::/40", "703"}, + {"2602:feb4:2a0::/44", "25961"}, + {"2804:111c::/47", "52818"}, + {"2804:6824::/32", "269671"}, + {"2a02:7520::/32", "207234"}, + {"2a04:4e40:5a40::/44", "54113"}, + {"2a0e:6b40:20::/48", "8495"}, + {"2a0e:97c0:250::/47", "211685"}, + {"2409:8004:3051::/39", "24547"}, + {"2408:873d:1000::/36", "140717"}, + {"240a:aafc::/32", "145462"}, + {"240e:3b8:2c00::/35", "134774"}, + {"2804:35b4::/32", "266301"}, + {"2600:141b:7001::/37", "20940"}, + {"2606:ae04:8020::/48", "17224"}, + {"2a0b:24c1::/33", "205961"}, + {"240a:ae48::/32", "146306"}, + {"2605:b080::/32", "11708"}, + {"2a01:9f00::/32", "42187"}, + {"2001:250:2429::/43", "24356"}, + {"2001:250:2800::/45", "138378"}, + {"2001:559:c525::/48", "7016"}, + {"2001:67c:178c::/48", "34907"}, + {"2404:ff80:101::/32", "64096"}, + {"2408:8256:359c::/48", "17816"}, + {"2804:5788::/32", "268070"}, + {"2806:2f0:20c0::/48", "17072"}, + {"2806:2f0:6043::/42", "17072"}, + {"2400:cb00:365::/44", "13335"}, + {"2404:ffc0::/47", "62707"}, + {"2405:b500::/32", "13335"}, + {"2409:8028:3000::/47", "56041"}, + {"2001:400:b15::/44", "293"}, + {"2401:fdc0::/44", "137074"}, + {"2600:803:614::/46", "701"}, + {"2600:1480:580a::/47", "20940"}, + {"2804:1efc::/36", "264458"}, + {"2405:1c0:6261::/45", "55303"}, + {"2408:8756:f00::/44", "136958"}, + {"2409:8904:7f40::/32", "24547"}, + {"2606:9500:5000::/36", "26004"}, + {"2800:bf0:80::/47", "52257"}, + {"2a03:6c80::/32", "15830"}, + {"2a03:d604::/31", "12727"}, + {"2001:559:7d5::/48", "7015"}, + {"2001:e60:a430::/40", "4766"}, + {"2620:109:6000::/44", "36667"}, + {"2a02:26f7:f2c1::/46", "20940"}, + {"2001:470:138::/48", "58110"}, + {"2001:559:c52b::/45", "7922"}, + {"2408:8956:d4c0::/38", "17816"}, + {"240a:ac6b::/32", "145829"}, + {"240a:ae7d::/32", "146359"}, + {"2a00:7300::/32", "47894"}, + {"2a01:8840:5d::/48", "207266"}, + {"2a02:26f7:fc04::/48", "36183"}, + {"240a:aa34::/32", "145262"}, + {"240a:aff8::/32", "146738"}, + {"2806:1040::/40", "8151"}, + {"2a01:2d8::/29", "8224"}, + {"2a02:d107:f002::/45", "197155"}, + {"2a06:a005:260::/40", "133555"}, + {"2001:648:2000::/48", "3323"}, + {"2001:dce:102::/33", "23869"}, + {"2408:8956:a000::/40", "17622"}, + {"2a01:9980:a::/45", "50837"}, + {"2401:4900:5270::/44", "45609"}, + {"240a:af89::/32", "146627"}, + {"2600:100d:a120::/36", "22394"}, + {"240a:a2b5::/32", "143343"}, + {"2600:140b:2c01::/35", "20940"}, + {"2804:18d4::/32", "262489"}, + {"2a02:348::/46", "35470"}, + {"2a04:f47::/32", "28854"}, + {"2a0f:ca87:8::/48", "208749"}, + {"2001:559:c4ac::/48", "13367"}, + {"2001:579:d1a4::/38", "22773"}, + {"2001:67c:75c::/48", "204254"}, + {"240a:a3c4::/32", "143614"}, + {"2804:14c:7585::/44", "28573"}, + {"2a03:ec00::/32", "12847"}, + {"2a0d:b500::/29", "51834"}, + {"2a0f:e140::/48", "60781"}, + {"2c0f:f860::/32", "36890"}, + {"2001:67c:330::/48", "35742"}, + {"2408:8140:2000::/48", "4808"}, + {"2409:8c28:5f91::/34", "56041"}, + {"240e:3bf:5600::/34", "4134"}, + {"2604:6300::/32", "19024"}, + {"2610:a1:1008::/47", "397228"}, + {"2a0e:97c7:130::/44", "212996"}, + {"2001:559:8437::/48", "7016"}, + {"2403:1cc0:2201::/48", "45352"}, + {"2600:6c38:d14::/44", "20115"}, + {"2606:2800:e006::/48", "14210"}, + {"2803:6604::/35", "28075"}, + {"2804:3a8::/32", "53195"}, + {"2a01:6d80:f000::/36", "6723"}, + {"2a0d:7bc0::/29", "40970"}, + {"2001:559:835d::/48", "33490"}, + {"240a:a1ed::/32", "143143"}, + {"240a:ae06::/32", "146240"}, + {"2a00:1a00::/32", "25593"}, + {"2a03:8fe0::/32", "200861"}, + {"2a10:b880::/32", "38965"}, + {"2001:df7:6980::/48", "138754"}, + {"2401:d800:5210::/42", "7552"}, + {"2409:8904:5370::/40", "24547"}, + {"2806:2f0:97a3::/36", "17072"}, + {"2a01:cb20:9000::/33", "3215"}, + {"2001:468:2600::/48", "396955"}, + {"2001:df4:3b00::/48", "55688"}, + {"2404:5c0::/34", "138466"}, + {"2602:fed2:7120::/48", "20473"}, + {"2607:3180:2::/32", "14877"}, + {"2001:559:c25e::/48", "33287"}, + {"2402:8100:2680::/46", "45271"}, + {"2605:6280::/32", "32338"}, + {"2607:7e80:2000::/33", "395354"}, + {"2a02:7e00::/29", "57630"}, + {"2405:e680::/32", "131292"}, + {"2600:370f:1061::/45", "32261"}, + {"2804:2478::/32", "264224"}, + {"2a01:9580::/32", "49544"}, + {"2a02:ff0:2ab::/41", "12735"}, + {"2001:978:6712::/48", "207866"}, + {"2001:4200:300::/44", "36982"}, + {"2600:4407:c034::/47", "55164"}, + {"2603:fb78::/29", "63023"}, + {"2600:1408:9801::/37", "20940"}, + {"2602:fc23:155::/48", "54625"}, + {"2604:a400::/32", "11320"}, + {"2607:f8b0:4017::/32", "15169"}, + {"2a02:970:1062::/44", "44002"}, + {"2403:4200:401::/48", "58534"}, + {"240e:3b3:7a00::/32", "140313"}, + {"2600:1014:b000::/42", "6167"}, + {"2a00:1598::/29", "29518"}, + {"2a07:1c80::/29", "43065"}, + {"2c0f:eca0::/32", "37415"}, + {"2001:7f8:1e::/48", "13004"}, + {"2405:8a00:6017::/44", "55824"}, + {"2804:e0c:140::/47", "28176"}, + {"2001:dc8:2002::/48", "131122"}, + {"2001:ec0:100::/40", "134166"}, + {"2001:4b18:d000::/34", "20746"}, + {"2401:d800:93b0::/41", "7552"}, + {"2408:8459:9010::/42", "17623"}, + {"2620:1e0:ffff::/48", "14145"}, + {"2801:1d:8800::/48", "262589"}, + {"2001:df3:cc00::/48", "134053"}, + {"2405:da00:20::/38", "38235"}, + {"2804:20b8::/35", "264510"}, + {"2401:3cc0:601::/39", "137409"}, + {"2408:8460::/29", "4837"}, + {"2804:588c::/32", "268135"}, + {"2a00:f720::/47", "24824"}, + {"2001:559:39d::/48", "21508"}, + {"2405:d300:800::/40", "17477"}, + {"2408:8256:3d7b::/48", "17816"}, + {"240a:a6ff::/32", "144441"}, + {"2600:100f:f110::/27", "22394"}, + {"2804:45d4::/32", "266952"}, + {"2804:82ec::/32", "272165"}, + {"2a00:a320::/32", "39605"}, + {"2a0d:380::/29", "200044"}, + {"2a0f:c586::/31", "208861"}, + {"2001:678:504::/48", "25070"}, + {"2409:804e:3900::/31", "9808"}, + {"2600:5c01:10de::/48", "11351"}, + {"2607:fc48:c38::/48", "40009"}, + {"2a09:9446::/32", "49981"}, + {"2402:800:5dee::/38", "7552"}, + {"2602:fd50:10::/48", "207609"}, + {"2a09:5440::/29", "199163"}, + {"2a0e:6540:a64::/48", "208364"}, + {"2a0e:b102:170::/45", "209105"}, + {"2a0f:c082::/32", "16262"}, + {"2001:4b20:100:580::/60", "65505"}, + {"2401:900::/32", "9351"}, + {"240a:a241::/32", "143227"}, + {"240e:4:e100::/35", "4134"}, + {"2001:1248:9aa6::/44", "11172"}, + {"2605:e000:70c::/36", "20001"}, + {"2606:cb00:ff17::/48", "6643"}, + {"2a02:db0::/32", "25500"}, + {"2a02:26f0:f701::/36", "20940"}, + {"2607:ff60:11::/33", "3900"}, + {"2a0a:4980::/29", "57112"}, + {"2001:df3:a700::/48", "58785"}, + {"2001:44b8:26::/48", "7545"}, + {"2401:7500:fff4::/47", "133296"}, + {"240e:3bb:1200::/39", "4134"}, + {"2806:230:4004::/48", "265594"}, + {"2a04:3bc0::/29", "34119"}, + {"2804:4d10::/32", "267410"}, + {"2a0c:5980::/29", "209372"}, + {"2602:fed2:fa0::/41", "53356"}, + {"2c0f:e8a8::/32", "328631"}, + {"2406:3c00::/32", "9650"}, + {"240e:44d:7840::/42", "140352"}, + {"2a0a:b900::/29", "31317"}, + {"2409:896a:a600::/39", "9808"}, + {"2600:9000:113b::/45", "16509"}, + {"2a00:1608::/32", "51275"}, + {"2a03:dfc0::/46", "203520"}, + {"2001:1260:300::/40", "13591"}, + {"2604:880:32::/48", "29802"}, + {"2803:26c0::/32", "267788"}, + {"2804:1cc0::/33", "61673"}, + {"2804:2f98::/34", "264901"}, + {"2001:da8:d834::/41", "24362"}, + {"2001:df2:4480::/48", "134319"}, + {"240a:a508::/32", "143938"}, + {"240a:a67d::/32", "144311"}, + {"2801:1fc:12::/48", "27951"}, + {"2804:3288:a200::/35", "52827"}, + {"2804:3744::/32", "266400"}, + {"2a02:2088:1000::/36", "57564"}, + {"2405:d440::/39", "58813"}, + {"2607:8300:1001::/48", "13876"}, + {"2a04:4e40:5e30::/41", "54113"}, + {"2401:d800:d3d0::/37", "7552"}, + {"2404:b1::/35", "9891"}, + {"2405:8a00:21a6::/43", "55824"}, + {"2405:9800:b860::/40", "45430"}, + {"2a01:230::/45", "29182"}, + {"2602:feb4::/44", "25961"}, + {"2604:880:a::/48", "29802"}, + {"2804:3dd0::/32", "266555"}, + {"2806:103e:b::/45", "8151"}, + {"2a02:26f7:c009::/46", "20940"}, + {"2a0d:b00:9201::/48", "205862"}, + {"2a0f:1200::/45", "60781"}, + {"2600:1014:9100::/44", "6167"}, + {"2806:2f0:2440::/48", "17072"}, + {"2a03:8f00::/29", "49621"}, + {"2001:559:4ef::/48", "20214"}, + {"2001:559:80fe::/47", "7015"}, + {"2600:140f:a801::/38", "20940"}, + {"2803:4dc0::/32", "265721"}, + {"2a02:c382::/32", "9108"}, + {"2001:14e8::/47", "6736"}, + {"2001:4410:1005::/40", "132040"}, + {"2604:b680::/32", "18683"}, + {"2001:559:168::/48", "20214"}, + {"2001:da8:27e::/48", "24349"}, + {"2001:da8:a804::/48", "23910"}, + {"2409:800b:2906::/44", "9808"}, + {"2804:1ed4::/32", "52775"}, + {"2a04:9a00:1030::/41", "212157"}, + {"2400:7400:62::/48", "38044"}, + {"2604:f700::/48", "14618"}, + {"2a01:47c0::/32", "5588"}, + {"2c0f:fc88::/42", "36992"}, + {"2804:2160:e00::/35", "264551"}, + {"2806:2f0:9721::/46", "17072"}, + {"2a05:fa00::/29", "30884"}, + {"2001:4868:200::/45", "701"}, + {"2001:4cb8:40b::/48", "49685"}, + {"2a11:29c4:b00b::/48", "212149"}, + {"2406:840:5880::/47", "139317"}, + {"2605:7c00::/32", "25668"}, + {"2620:107:3001::/48", "16509"}, + {"2a0e:fd45:dc0::/44", "212085"}, + {"2402:8100:2458::/45", "55644"}, + {"2407:5200:206::/39", "55915"}, + {"2602:fed2:7183::/48", "400307"}, + {"2605:a404:487::/41", "33363"}, + {"2607:fee0::/34", "3599"}, + {"2a03:ac40:1::/48", "212882"}, + {"2a05:1200::/30", "201654"}, + {"2a07:c40::/29", "2119"}, + {"2a11:9340::/29", "204790"}, + {"2804:3c38::/32", "266197"}, + {"2804:582c::/32", "268111"}, + {"2409:8c85:5411::/44", "9808"}, + {"2606:1a40:f000::/45", "398962"}, + {"2803:d460::/32", "3549"}, + {"2408:8431::/32", "4837"}, + {"2409:8914:1700::/36", "56044"}, + {"240e:3b2:dc00::/34", "4134"}, + {"2804:4f8:4000::/36", "28263"}, + {"2a01:8840:51::/48", "207266"}, + {"2a02:f3c0::/29", "49633"}, + {"2a0d:3841:1010::/48", "57629"}, + {"2001:559:1e6::/48", "7015"}, + {"2001:678:394::/48", "8995"}, + {"240a:af2f::/32", "146537"}, + {"2608:8105:1::/48", "1733"}, + {"2804:5198::/32", "268464"}, + {"2a02:6680:1100::/44", "16116"}, + {"2a03:afe1::/32", "198203"}, + {"240a:abe8::/32", "145698"}, + {"2600:1008:d020::/43", "6167"}, + {"2804:6b90::/32", "270408"}, + {"2a00:ab40::/34", "41798"}, + {"2001:559:8296::/48", "7922"}, + {"2001:df6:2380::/48", "141767"}, + {"2602:ffc5:60::/43", "7489"}, + {"2800:98:170d::/46", "14754"}, + {"2804:804c::/32", "271742"}, + {"2a0b:6900:2::/48", "206873"}, + {"2001:678:ab8::/48", "35814"}, + {"240e:bf:c800::/37", "4835"}, + {"2606:c900::/32", "22834"}, + {"2a02:26f7:c600::/48", "36183"}, + {"2400:cb00:430::/46", "13335"}, + {"2400:d400:ffff::/48", "45671"}, + {"2407:0:0:5::/58", "4761"}, + {"2407:c340::/48", "140822"}, + {"2804:3798::/44", "266423"}, + {"2001:559:c42f::/48", "33662"}, + {"2607:f6f0:d000::/40", "12085"}, + {"2620:0:1af0::/48", "36786"}, + {"2a01:788:4::/48", "34305"}, + {"2409:8c1e:9000::/34", "9808"}, + {"2806:2f0:6243::/42", "17072"}, + {"2001:1258::/32", "28499"}, + {"240a:a1e1::/32", "143131"}, + {"2605:5c0:c080::/45", "28885"}, + {"2a02:503:9::/29", "5538"}, + {"240a:ae07::/32", "146241"}, + {"2604:a100:100::/48", "6939"}, + {"2a04:4e40:cc10::/44", "54113"}, + {"2405:f800::/32", "17506"}, + {"240a:af01::/32", "146491"}, + {"2600:6c38:1bb::/45", "20115"}, + {"2804:87c::/32", "28202"}, + {"2a02:26f7:f640::/48", "36183"}, + {"2401:7500:100::/40", "33480"}, + {"2804:35c8::/32", "266306"}, + {"2a00:e60::/32", "62023"}, + {"2a01:9c80::/29", "35805"}, + {"2a02:26f7:d20d::/46", "20940"}, + {"2a0f:cd80::/32", "204805"}, + {"2408:840d:a000::/42", "17621"}, + {"2604:9e03::/32", "393710"}, + {"2408:8756:1800::/34", "17816"}, + {"2620:36:c000::/48", "1645"}, + {"2a00:1d58:d080::/39", "47524"}, + {"2001:559:42d::/48", "7015"}, + {"2001:559:c4ba::/48", "7015"}, + {"2401:7500:200::/40", "133296"}, + {"2402:1f00::/32", "16276"}, + {"2403:9800:c042::/44", "133124"}, + {"2405:7f00:3261::/36", "133414"}, + {"2408:84f3:a010::/42", "134543"}, + {"2600:100d:b140::/42", "6167"}, + {"2600:1408:1c01::/34", "20940"}, + {"2a00:1288:efc5::/35", "10310"}, + {"2a03:88c0::/32", "9150"}, + {"2406:57c0:136::/44", "134672"}, + {"2800:160:1353::/45", "14259"}, + {"2a01:6b20:8000::/34", "39218"}, + {"2a02:e900::/32", "16302"}, + {"2a0d:ac0::/29", "42689"}, + {"2001:559:266::/47", "7725"}, + {"2409:8052:1800::/47", "56047"}, + {"2600:140f:ac01::/38", "20940"}, + {"2804:1000::/32", "28208"}, + {"2804:154c:5011::/44", "263382"}, + {"2a0b:4080::/48", "16509"}, + {"2001:4888:8069::/34", "6167"}, + {"2800:484:1300::/37", "10620"}, + {"2803:c180:2410::/39", "52341"}, + {"2a02:26f7:c0c4::/48", "36183"}, + {"2a03:2880:f222::/43", "32934"}, + {"2a09:1240::/48", "44364"}, + {"2001:3c8:5008::/37", "4621"}, + {"2405:1700::/32", "132395"}, + {"2409:8c28::/38", "56041"}, + {"240a:a69d::/32", "144343"}, + {"2605:dd40:8203::/45", "398549"}, + {"2404:7180:b001::/46", "23848"}, + {"240a:a684::/32", "144318"}, + {"240e:947:1004::/36", "137690"}, + {"2605:8bc0::/44", "26695"}, + {"2a0b:3c40:11::/46", "208258"}, + {"2001:13d2:816::/34", "7303"}, + {"240a:a83c::/32", "144758"}, + {"240e:698:2400::/40", "134768"}, + {"2a03:b500:2080::/35", "41135"}, + {"2a05:f440:e::/29", "35280"}, + {"2a10:dc40::/29", "34907"}, + {"2001:559:301::/48", "33652"}, + {"2001:67c:19ec::/48", "47208"}, + {"2001:4878:246::/48", "12222"}, + {"2402:e380:31b::/48", "141706"}, + {"2803:de60::/32", "267924"}, + {"2803:e610::/32", "271945"}, + {"2804:526c:e000::/35", "268517"}, + {"2804:7670::/32", "271112"}, + {"2a02:1388:5000::/29", "29247"}, + {"2a0d:2900:a::/45", "50069"}, + {"2001:2020::/31", "12929"}, + {"2600:140f:f::/39", "20940"}, + {"2620:9c:6000::/48", "174"}, + {"2803:6560::/32", "269755"}, + {"2804:368c::/32", "266355"}, + {"240a:a6a8::/32", "144354"}, + {"2a01:288:4006::/47", "8717"}, + {"2a07:7300::/29", "202877"}, + {"2001:c60::/32", "17828"}, + {"240e:f7:5000::/36", "4134"}, + {"2605:a401:81e1::/43", "33363"}, + {"2001:254:8000::/33", "24490"}, + {"2001:67c:114::/48", "9150"}, + {"2600:1408:7401::/36", "20940"}, + {"2a02:26f7:d880::/48", "36183"}, + {"2a06:2d40:2::/48", "62240"}, + {"2a0e:aa07:f004::/47", "139742"}, + {"2001:502:4612::/48", "397226"}, + {"2001:559:83f4::/48", "33650"}, + {"2001:dc8:1000::/48", "38736"}, + {"2001:1248:84df::/42", "11172"}, + {"240a:a306::/32", "143424"}, + {"2600:380:dc10::/38", "7018"}, + {"2001:fd0:1301::/34", "10029"}, + {"240a:a217::/32", "143185"}, + {"240e:108:1195::/48", "63838"}, + {"2804:4988::/32", "267189"}, + {"2804:6780::/32", "269632"}, + {"2001:da8:d826::/43", "24362"}, + {"2401:d800:78d0::/42", "7552"}, + {"2604:d600:c0a::/43", "32098"}, + {"2800:3c0::/35", "19863"}, + {"2a03:3a60::/32", "49544"}, + {"2001:559:83e9::/46", "7015"}, + {"2001:4490:d930::/46", "9829"}, + {"2804:4b0:1200::/32", "262459"}, + {"2804:289c::/32", "263970"}, + {"2406:840:fbb6::/47", "139058"}, + {"2407:5740::/48", "140799"}, + {"240a:ae5f::/32", "146329"}, + {"2800:bf0:2c0::/45", "52257"}, + {"2a00:c40:8096::/33", "34315"}, + {"2a02:26f7:f38d::/42", "20940"}, + {"2a04:e00::/48", "54103"}, + {"2a0b:4342:1a80::/43", "57695"}, + {"2602:fed3:b::/48", "21769"}, + {"2a00:d820::/32", "8769"}, + {"2a05:7400:c000::/34", "60980"}, + {"2001:1284::/32", "14868"}, + {"240a:ac72::/32", "145836"}, + {"240e:3bc:1400::/38", "134773"}, + {"2a00:e00::/32", "8304"}, + {"2a00:bc00::/32", "31272"}, + {"2a01:170::/35", "8820"}, + {"2a09:6e80::/29", "48585"}, + {"2001:67c:608::/48", "200020"}, + {"2001:44c8:4690::/42", "45430"}, + {"2406:1400:c109::/48", "24342"}, + {"2801:1b8:8::/45", "28000"}, + {"2804:2fdc:4000::/36", "264917"}, + {"2001:559:8272::/48", "33651"}, + {"2409:8904:58b0::/39", "24547"}, + {"240a:a5f2::/32", "144172"}, + {"240e:67f:8800::/38", "140330"}, + {"2804:317c::/32", "265018"}, + {"2804:7d9c::/32", "271572"}, + {"2a01:280:340::/48", "201317"}, + {"2a02:26f7:f6db::/48", "20940"}, + {"2a02:2890::/48", "51185"}, + {"2a0b:4340:1304::/48", "205152"}, + {"2001:5b0:300::/40", "6621"}, + {"2402:800:5dd3::/44", "7552"}, + {"2405:204:f000::/31", "55836"}, + {"2600:1405:7800::/48", "21342"}, + {"2620:6:2000::/46", "395460"}, + {"2804:1810:f000::/38", "263262"}, + {"2804:7560::/32", "271042"}, + {"2a00:e080::/32", "15557"}, + {"2a02:26f7:8b::/48", "20940"}, + {"2a09:f440::/32", "29462"}, + {"2001:559:8597::/48", "7015"}, + {"2400:6680:f000::/36", "13414"}, + {"2803:9760::/32", "265684"}, + {"2a02:6b8:7::/44", "208722"}, + {"2a04:bc40:1dc3::/45", "35277"}, + {"2001:559:833d::/48", "33659"}, + {"240a:a347::/32", "143489"}, + {"2600:250e:f000::/36", "1246"}, + {"2606:6c00:102::/48", "32787"}, + {"2803:2480::/32", "263185"}, + {"2800:400:1c::/48", "27668"}, + {"2a00:4802:1c10::/39", "8717"}, + {"2a01:74c0:20::/32", "15540"}, + {"240e:147::/24", "4134"}, + {"2a01:e04::/28", "12322"}, + {"2a0a:7d80:1000::/36", "56740"}, + {"2001:550:9f03::/34", "174"}, + {"2001:559:83df::/48", "22909"}, + {"2001:a70::/32", "8426"}, + {"2401:d800:f290::/42", "7552"}, + {"2602:800:c400::/38", "398577"}, + {"2001:559:c3b5::/44", "33287"}, + {"2001:7f9:4::/48", "42409"}, + {"2a0a:4587:2000::/44", "213341"}, + {"2a10:17c0::/29", "397651"}, + {"2001:253:106::/48", "142072"}, + {"2001:253:114::/48", "142080"}, + {"2001:16f8:4001::/32", "25525"}, + {"2400:d400:6::/48", "45671"}, + {"240a:a35b::/32", "143509"}, + {"2a0a:19c0::/29", "206231"}, + {"2a10:cdc0:f000::/37", "213100"}, + {"2001:559:c355::/48", "7725"}, + {"2001:49f0:d0a0::/44", "174"}, + {"2406:8800:903b::/41", "17465"}, + {"2408:840d:de00::/42", "17621"}, + {"2803:2180:1f::/48", "27941"}, + {"2a05:2701:f30::/44", "62371"}, + {"2a07:a5c0::/36", "58293"}, + {"2001:44b8:603c::/47", "7545"}, + {"240a:a1bf::/32", "143097"}, + {"240e:b1:f000::/37", "136197"}, + {"2800:cc0::/32", "262210"}, + {"2001:559:c2e6::/48", "33660"}, + {"2001:fa8::/32", "4697"}, + {"2404:a600::/32", "23816"}, + {"2408:80fa:75c0::/32", "17816"}, + {"2604:d600:121c::/42", "32098"}, + {"2a04:18c0::/29", "60941"}, + {"2a06:e881:1700::/48", "206813"}, + {"2a10:cc40:15e::/48", "206895"}, + {"2a02:26f7:f989::/42", "20940"}, + {"2001:250:240f::/43", "24356"}, + {"2001:1388:8411::/41", "6147"}, + {"2407:3b40::/32", "149058"}, + {"2409:8c5b:ffff::/26", "9808"}, + {"2607:fd48:d04:2::/34", "13536"}, + {"2804:7cf0::/32", "271528"}, + {"2a0d:1a40:7553::/48", "213185"}, + {"2001:559:20e::/48", "33651"}, + {"2001:1508::/32", "29208"}, + {"2401:3c0:10f::/43", "45528"}, + {"2606:4700:303d::/46", "13335"}, + {"2804:6bf4::/32", "270436"}, + {"2a03:cf00::/32", "3313"}, + {"2a12:9ec0::/29", "400522"}, + {"2001:559:7b2::/48", "33491"}, + {"2402:3a80:16e0::/39", "38266"}, + {"2804:24bc::/32", "52695"}, + {"2a03:1e84:abf::/48", "1136"}, + {"2a07:e345:103::/40", "212477"}, + {"2a09:4c2:2e::/48", "205947"}, + {"2001:559:82f4::/48", "33668"}, + {"2001:559:c35f::/48", "13367"}, + {"2604:ca00:1f6::/44", "36492"}, + {"2a02:2e02:cf0::/39", "12479"}, + {"2a04:7040:1471::/48", "212012"}, + {"2a0f:9400:7300::/44", "207890"}, + {"2a10:5e80::/29", "328486"}, + {"2806:289::/32", "28418"}, + {"2001:559:8606::/48", "33651"}, + {"2001:67c:277c::/48", "208818"}, + {"2a09:5f80::/48", "48038"}, + {"2a0c:5840::/32", "197226"}, + {"2402:f80::/32", "134004"}, + {"2603:c0ea::/35", "1218"}, + {"2804:1b0:1000::/36", "18881"}, + {"2804:86c::/32", "262369"}, + {"2a0c:9a40:811b::/45", "204438"}, + {"2001:cf0::/32", "9848"}, + {"2401:4900:58a0::/41", "45609"}, + {"2407:e8c0::/46", "147049"}, + {"2600:1006:b040::/42", "6167"}, + {"2606:4700:4000::/43", "13335"}, + {"2801:12e::/48", "271858"}, + {"2803:f2c0::/32", "52468"}, + {"2a00:86c0:2078::/47", "2906"}, + {"2001:559:c187::/48", "7922"}, + {"240a:abb2::/32", "145644"}, + {"240e:45c:6700::/40", "140530"}, + {"2604:e00::/32", "13370"}, + {"2620:160:e340::/44", "4196"}, + {"2a01:88c0::/32", "198807"}, + {"2a0e:b107:382::/48", "208753"}, + {"2a0f:ea42::/32", "7018"}, + {"2001:559:1f7::/48", "33650"}, + {"2001:da8:800c::/47", "24365"}, + {"2404:ba00:ffff::/48", "17665"}, + {"2408:8406:1800::/39", "4808"}, + {"240e:965:d600::/34", "4134"}, + {"2600:1488:a101::/40", "20940"}, + {"2804:774:400::/32", "52858"}, + {"2806:20d:1d1b::/42", "32098"}, + {"2001:678:dc4::/48", "213032"}, + {"2001:df1:6002::/48", "10021"}, + {"2408:8459:c850::/39", "17816"}, + {"240e:44d:1840::/42", "140360"}, + {"2a02:26f7:f049::/42", "20940"}, + {"2001:67c:17ac::/48", "42251"}, + {"2a00:8720::/32", "41937"}, + {"2a05:d000:a000::/40", "16509"}, + {"2a0e:d604::/48", "62410"}, + {"2a11:ec40::/29", "49655"}, + {"2406:2000:ef6a::/40", "10310"}, + {"2600:370f:3423::/45", "32261"}, + {"2600:6c10:10f::/43", "20115"}, + {"2602:fe6b:1000::/43", "398646"}, + {"2001:44b8:404d::/48", "4739"}, + {"2409:8751:1100::/30", "56047"}, + {"2800:440:84::/48", "27738"}, + {"2401:d800:9342::/42", "7552"}, + {"2602:fe27:70::/48", "6473"}, + {"2800:484:1600::/34", "10620"}, + {"2804:101c::/32", "53043"}, + {"240e:698:4200::/40", "58466"}, + {"240e:982:8300::/37", "133775"}, + {"2408:8456:ea10::/42", "134543"}, + {"2409:8904:3f60::/33", "24547"}, + {"240a:a7b2::/32", "144620"}, + {"240a:aef1::/32", "146475"}, + {"2803:1060::/32", "267809"}, + {"2a0f:efc1::/32", "42160"}, + {"2001:678:d54::/48", "213187"}, + {"2405:6680::/32", "135425"}, + {"2600:140a:2000::/48", "35994"}, + {"2600:140f:9801::/38", "20940"}, + {"2605:a404:55a::/40", "33363"}, + {"2607:f128::/48", "46440"}, + {"2803:9800:b024::/43", "11664"}, + {"2804:6288:f400::/36", "269302"}, + {"2a02:26f7:13::/48", "20940"}, + {"2c0f:eab8::/32", "328564"}, + {"2401:d800:f170::/40", "7552"}, + {"2402:5300:510::/38", "45903"}, + {"2409:8a52:300::/37", "56047"}, + {"2803:5440:ca::/48", "264738"}, + {"2804:27c::/32", "25933"}, + {"2001:559:75e::/48", "33657"}, + {"240a:ad6b::/32", "146085"}, + {"240e:db:9800::/48", "38283"}, + {"2a03:21c0::/32", "41722"}, + {"2a0e:aa07:f000::/48", "139742"}, + {"2001:559:1bd::/48", "7016"}, + {"2001:678:1bc::/48", "48149"}, + {"2402:800:f350::/42", "7552"}, + {"2a0c:2f07:d::/48", "206924"}, + {"2a10:a700::/46", "212329"}, + {"2401:7400:6801::/32", "4773"}, + {"2402:800:b212::/41", "7552"}, + {"2408:873d:2000::/36", "140716"}, + {"2409:803c:1000::/40", "24444"}, + {"2a02:f20::/32", "197695"}, + {"2001:559:b::/48", "33657"}, + {"2600:1406:600::/48", "35994"}, + {"2001:678:5d4::/48", "3320"}, + {"2600:1480:1800::/48", "21342"}, + {"2602:feda:bd0::/48", "140946"}, + {"2a04:1540::/29", "199348"}, + {"2a06:dac0:200::/44", "212661"}, + {"2001:559:586::/48", "7922"}, + {"2001:559:849a::/48", "33651"}, + {"2404:f4c0:f600::/45", "139328"}, + {"2a0d:bd80::/30", "47724"}, + {"2001:559:c135::/48", "33651"}, + {"2001:16a2:c240::/40", "39891"}, + {"2600:1006:f040::/44", "6167"}, + {"2a01:6e00:11::/32", "43142"}, + {"2001:678:420::/48", "44233"}, + {"240a:ade1::/32", "146203"}, + {"2800:150:6::/48", "20940"}, + {"2804:18:6020::/43", "26599"}, + {"2620:149:22a::/47", "714"}, + {"2803:abe0::/32", "270082"}, + {"2a01:9820::/32", "62086"}, + {"2001:67c:2964::/48", "57330"}, + {"2620:133:6000::/44", "22084"}, + {"2a01:cd01:8020::/48", "28708"}, + {"2404:1a0:1003::/34", "24334"}, + {"2405:201:4800::/35", "55836"}, + {"2407:c080:7000::/47", "55990"}, + {"2409:408d:9000::/25", "55836"}, + {"2600:140f:b801::/38", "20940"}, + {"2a00:de40::/32", "29119"}, + {"2001:559:38f::/48", "33654"}, + {"2408:8459:6c10::/42", "17623"}, + {"2605:f500:202::/37", "1828"}, + {"2804:7ca8::/32", "271510"}, + {"2408:8459:6230::/41", "17622"}, + {"2408:866a::/32", "4837"}, + {"2409:f:f1::/48", "142501"}, + {"240a:ab92::/32", "145612"}, + {"2001:559:c154::/48", "33660"}, + {"2400:b000:200::/48", "45209"}, + {"2405:6cc0::/32", "131958"}, + {"2409:8914:400::/39", "56044"}, + {"2409:8c28:7ce1::/39", "56041"}, + {"2409:8c34:800::/37", "9808"}, + {"2801:80:1660::/48", "52623"}, + {"2a02:26f7:eb05::/46", "20940"}, + {"2a0b:2a40::/32", "29423"}, + {"2001:43f8:3e0::/48", "37599"}, + {"2408:8456:1000::/42", "17622"}, + {"2806:370:5460::/40", "28403"}, + {"2a0e:3700::/29", "210874"}, + {"2600:9000:225e::/42", "16509"}, + {"2604:3cc0:2012::/44", "396298"}, + {"2001:67c:1990::/48", "207077"}, + {"2001:67c:2208::/48", "21079"}, + {"2402:e280:217c::/38", "134674"}, + {"2a00:1ee0::/32", "41357"}, + {"2a01:53c0:ffe0::/45", "54994"}, + {"2a02:26f7:e048::/48", "36183"}, + {"2a0b:a540::/29", "1267"}, + {"2a0f:b506::/48", "206313"}, + {"2001:b18:1012::/48", "47787"}, + {"2402:800:59d3::/44", "7552"}, + {"2408:80ea:74e0::/43", "17623"}, + {"2409:8c04::/35", "24547"}, + {"2607:e880:501::/48", "12220"}, + {"2804:1ef0::/32", "52650"}, + {"2a02:1388::/34", "29247"}, + {"2606:700::/32", "54054"}, + {"2804:2728:e00::/32", "263880"}, + {"2804:818c::/32", "272461"}, + {"2a02:26f7:d289::/46", "20940"}, + {"2409:8087:7d00::/38", "9808"}, + {"240a:a42e::/32", "143720"}, + {"2a00:7900::/32", "21000"}, + {"2a03:d9c0:2000::/48", "3214"}, + {"2a09:2e80::/29", "199486"}, + {"2408:8459:22c0::/37", "17816"}, + {"2604:6600:4c::/42", "40676"}, + {"2806:230:602a::/48", "265594"}, + {"2a02:26f7:94::/48", "36183"}, + {"2a0b:b600:3c04::/48", "43350"}, + {"2001:559:8710::/47", "33491"}, + {"2804:49c:3403::/48", "7162"}, + {"2804:7a8c::/32", "271378"}, + {"2a0e:8f02:2133::/44", "211722"}, + {"2001:67c:2e7c::/48", "199165"}, + {"2804:5c1c::/32", "268888"}, + {"2a03:420::/32", "28994"}, + {"2a0d:2a00:1::/46", "205157"}, + {"2a0f:5707:abb1::/48", "211620"}, + {"2001:67c:2c8::/48", "47829"}, + {"2402:3cc0::/32", "137257"}, + {"2408:8957:1700::/40", "17816"}, + {"2607:f7c8::/37", "36221"}, + {"2804:8294::/32", "272527"}, + {"2a0b:26c0::/29", "56800"}, + {"2001:3c8:a703::/33", "4621"}, + {"2409:8c44:1b00::/48", "9808"}, + {"2603:90b3::/32", "11426"}, + {"2806:1030::/32", "8151"}, + {"2a05:a880:10::/48", "51964"}, + {"2a0b:3c40:15::/46", "208258"}, + {"2001:559:7cb::/48", "33667"}, + {"2607:3180:b001::/33", "14877"}, + {"2620:171:dc::/46", "42"}, + {"2a02:968::/32", "12859"}, + {"2a0f:c40::/29", "60262"}, + {"2408:856c::/31", "4837"}, + {"2600:1402:19::/48", "20940"}, + {"2804:676c:c00::/32", "269627"}, + {"2a05:7e40::/29", "203854"}, + {"2a0f:ae80::/32", "48131"}, + {"2001:579:b054::/40", "22773"}, + {"2620:ce:8000::/48", "14738"}, + {"2a00:b0e0::/32", "34282"}, + {"2a0c:b440::/29", "48438"}, + {"2408:8957:fd00::/40", "17622"}, + {"2610:a1:3010::/48", "12008"}, + {"2804:4b14::/32", "267282"}, + {"2a11:8480::/32", "47596"}, + {"2402:fd00::/32", "38264"}, + {"2a03:1e00::/32", "34219"}, + {"2a0e:6580::/29", "57112"}, + {"240a:a994::/32", "145102"}, + {"240a:ab17::/32", "145489"}, + {"2a00:fc00:e001::/46", "3255"}, + {"2a0b:e40:1::/46", "205809"}, + {"2602:ff84:e::/48", "36351"}, + {"2610:98::/32", "11478"}, + {"2801:80:3710::/47", "269346"}, + {"2804:7490::/32", "270989"}, + {"2a07:e100::/32", "200925"}, + {"2a0b:dc0::/47", "58049"}, + {"2001:559:24d::/48", "33654"}, + {"2001:41c0::/31", "2818"}, + {"2401:d800:5c50::/42", "7552"}, + {"2600:6c38:f16::/47", "20115"}, + {"2605:3bc0::/32", "7850"}, + {"2607:f6f0:7000::/48", "27330"}, + {"2a10:cc44:201::/48", "211522"}, + {"2001:559:c4f5::/48", "33659"}, + {"2400:3240::/32", "63996"}, + {"2401:d800:7f82::/42", "7552"}, + {"2408:8856::/40", "17816"}, + {"2408:8957:6800::/40", "17622"}, + {"240e:108:1100::/47", "136195"}, + {"2600:141b:4801::/35", "20940"}, + {"2804:f30::/32", "263569"}, + {"2a02:26f0:ec01::/38", "20940"}, + {"2a02:26f7:f1c1::/46", "20940"}, + {"2001:559:c319::/48", "7725"}, + {"2001:678:e::/48", "31529"}, + {"2a01:a280:4::/48", "206357"}, + {"2404:bf40:f102::/48", "2764"}, + {"2600:1408:9401::/36", "20940"}, + {"2600:6c38:114::/44", "20115"}, + {"2605:6600::/32", "21766"}, + {"2001:559:808e::/43", "33657"}, + {"2a01:b747:6f1::/39", "714"}, + {"2a0f:9cc0::/29", "212144"}, + {"2001:559:52a::/48", "33491"}, + {"2001:df0:248::/48", "23883"}, + {"2409:8078:2c00::/30", "9808"}, + {"2a07:f6c0::/29", "49191"}, + {"2a0e:aa06:460::/44", "209215"}, + {"2001:ee0:3120::/38", "45899"}, + {"2001:1228::/32", "18592"}, + {"2401:d800:f500::/42", "7552"}, + {"2408:8459:b630::/41", "17622"}, + {"2600:1417:9801::/34", "20940"}, + {"2605:c00:1800::/39", "46920"}, + {"2620:13a:c011::/46", "53356"}, + {"2620:149:a0c::/43", "6185"}, + {"2a02:7b8::/32", "45011"}, + {"2a0f:2900::/29", "208245"}, + {"2001:559:8545::/48", "7016"}, + {"2001:678:e94::/48", "212695"}, + {"2600:1002:a010::/40", "22394"}, + {"2800:160:184c::/43", "14259"}, + {"2804:204:327::/44", "28186"}, + {"2001:67c:20b8::/47", "25303"}, + {"2402:800:9e60::/40", "7552"}, + {"240e:14:9000::/36", "140330"}, + {"2605:2cc0::/32", "395494"}, + {"2606:f280:4000::/34", "46261"}, + {"2804:26c::/32", "262813"}, + {"2804:1b8c::/32", "61734"}, + {"2001:1900:2350::/47", "10753"}, + {"2407:b001:3100::/32", "24121"}, + {"2800:160:228c::/39", "14259"}, + {"2804:41d0:3200::/37", "267458"}, + {"2804:81ec::/32", "272486"}, + {"2a01:7c00:20::/29", "52075"}, + {"2001:510:109::/42", "376"}, + {"2403:a200:a101::/40", "17428"}, + {"2600:1402:d801::/34", "20940"}, + {"2605:3380:480d::/48", "12025"}, + {"2806:105e:14::/44", "8151"}, + {"2400:8500:3fff::/48", "55907"}, + {"2600:370f:71e4::/38", "32261"}, + {"2a0b:11c0:1010::/48", "198682"}, + {"2001:67c:2c84::/48", "50838"}, + {"2001:4190:8024::/48", "8938"}, + {"2401:b140::/46", "54415"}, + {"2404:3d00:40ca::/43", "3573"}, + {"2804:61c0::/33", "269254"}, + {"2001:559:c18f::/48", "7725"}, + {"240e:974:e800::/39", "38283"}, + {"2600:141b:5001::/36", "20940"}, + {"2804:607c::/32", "269170"}, + {"2a02:2498:e005::/35", "13213"}, + {"2a04:4340::/31", "61349"}, + {"2a0e:2240::/47", "30633"}, + {"2a0e:97c0:233::/48", "211704"}, + {"2001:da8:24d::/46", "23910"}, + {"2001:df6:6d80::/48", "142044"}, + {"2620:0:dc0:4820::/48", "683"}, + {"2804:88:8000::/47", "28135"}, + {"2804:3a00::/32", "266064"}, + {"2806:20d:5016::/42", "32098"}, + {"2001:388:3030::/48", "137188"}, + {"2401:3bc0::/45", "137409"}, + {"2600:1fa0:5080::/44", "16509"}, + {"2804:1070:100::/40", "28209"}, + {"2001:559:c195::/48", "33491"}, + {"2001:4c80::/32", "2857"}, + {"2406:5800:400::/38", "132064"}, + {"240a:a03b::/32", "142709"}, + {"2a04:dbc0::/30", "8395"}, + {"2c0f:f4c0:10a0::/37", "37611"}, + {"2600:100d:a020::/40", "22394"}, + {"2804:8474:20::/32", "272261"}, + {"2a03:ef42:c000::/34", "57218"}, + {"2a0a:1ac0::/29", "206897"}, + {"2001:559:83f2::/47", "33651"}, + {"2409:8904:6640::/42", "24547"}, + {"2600:1401:2001::/33", "20940"}, + {"2600:8804:2400::/35", "22773"}, + {"2604:d600:153b::/41", "32098"}, + {"2a02:9010:74::/48", "13195"}, + {"2607:f110:13::/45", "21889"}, + {"2804:5364:2000::/33", "268581"}, + {"2a02:26f7:b9d0::/48", "36183"}, + {"2001:559:82a7::/48", "7922"}, + {"2600:370f:5042::/42", "32261"}, + {"2803:11e0::/32", "269997"}, + {"2409:8915:3600::/39", "56044"}, + {"2607:f7a0:5::/46", "46562"}, + {"2804:3160:8000::/33", "265010"}, + {"2804:5a30:9000::/33", "268754"}, + {"2a02:2380:ff00::/48", "51941"}, + {"2a0a:1b80::/30", "34773"}, + {"2001:df1:ba00::/48", "45259"}, + {"2001:1a11:f7::/48", "8781"}, + {"240a:a09a::/32", "142804"}, + {"2605:c3c0:e000::/35", "393954"}, + {"2a03:2887:ff0c::/48", "8966"}, + {"2a0a:3140:2610::/44", "15532"}, + {"2001:c20:486c::/46", "9255"}, + {"2001:c20:4874::/48", "9255"}, + {"2401:b200:62::/40", "24186"}, + {"2a03:5640:f140::/46", "2906"}, + {"2a0e:c7c1::/45", "210977"}, + {"2a0e:fb80::/29", "208551"}, + {"2a11:b480::/29", "204790"}, + {"2001:559:4fb::/45", "7922"}, + {"2405:4803:f2f0::/36", "18403"}, + {"2600:140b:9400::/48", "31109"}, + {"2a01:8640:e::/48", "202015"}, + {"2001:559:c377::/48", "20214"}, + {"2001:678:570::/48", "205107"}, + {"2602:ffc5:35::/41", "7489"}, + {"2c0f:7c00::/32", "328809"}, + {"2001:da8:8::/40", "23910"}, + {"240e:44d:7b00::/42", "140345"}, + {"2605:bc00::/32", "46309"}, + {"2a00:1c88:101::/48", "208685"}, + {"2001:67c:2eec::/48", "60531"}, + {"2408:840c:4e00::/40", "17621"}, + {"240a:a77f::/32", "144569"}, + {"240e:bf:c000::/37", "4134"}, + {"2620:102:4020::/43", "4130"}, + {"2a02:2578:130d::/36", "51375"}, + {"2a02:26f7:ded0::/48", "36183"}, + {"2600:1406:37::/44", "35994"}, + {"2800:160:1f24::/44", "14259"}, + {"2a09:d7c0::/29", "28771"}, + {"2001:4998:ef9a::/41", "10310"}, + {"2804:1afc::/32", "61702"}, + {"2a0c:15c0::/29", "59965"}, + {"2401:d800:b5d0::/42", "7552"}, + {"2409:8753:500::/38", "56047"}, + {"2801:1e:800::/48", "3816"}, + {"2804:104c:2000::/40", "263629"}, + {"2a0c:7e42:f776::/48", "20473"}, + {"2001:559:811a::/48", "33489"}, + {"2001:da8:402d::/48", "23910"}, + {"2405:cb00::/48", "55309"}, + {"2600:6c10:168::/40", "20115"}, + {"2602:feda:df0::/47", "147071"}, + {"2607:f5b8::/32", "46208"}, + {"2a03:bec0::/32", "202016"}, + {"2402:800:3901::/44", "7552"}, + {"2600:1402:401::/36", "20940"}, + {"2600:1404:e801::/37", "20940"}, + {"2804:4a38::/33", "267225"}, + {"2a0e:97c3:685::/48", "20473"}, + {"2405:b40::/47", "55674"}, + {"2405:ec00:1101::/32", "23955"}, + {"2620:4a::/48", "25739"}, + {"2806:2f0:2423::/43", "22884"}, + {"2a00:d560::/29", "15600"}, + {"2a02:26f7:f0c9::/42", "20940"}, + {"2a11:3540::/29", "204790"}, + {"2001:559:c445::/48", "7922"}, + {"2606:4f00::/48", "19324"}, + {"2607:fc48:1008::/48", "40009"}, + {"2801:b0::/40", "52888"}, + {"2806:2f0:8023::/41", "17072"}, + {"2a01:68::/32", "13193"}, + {"2a02:26f7:d685::/46", "20940"}, + {"2402:1d40:4008::/35", "58826"}, + {"240a:af4b::/32", "146565"}, + {"2604:4840::/32", "17252"}, + {"2804:5ffc::/32", "269138"}, + {"2a00:dd80:9::/48", "36236"}, + {"2001:468:2811::/32", "11537"}, + {"2405:201:5600::/36", "55836"}, + {"2407:f800:501::/40", "38182"}, + {"2600:370f:5205::/46", "32261"}, + {"2604:7c40::/40", "395649"}, + {"2804:14d:4083::/41", "28573"}, + {"2804:55d0::/37", "267958"}, + {"2804:6de4::/32", "270562"}, + {"2a00:75e0::/32", "206897"}, + {"2a04:2b00:14aa::/48", "203961"}, + {"2001:559:702::/47", "7016"}, + {"2001:559:775::/48", "33650"}, + {"2403:7c00::/32", "10001"}, + {"2408:8459:e630::/41", "17622"}, + {"240a:a285::/32", "143295"}, + {"2604:2400::/32", "14107"}, + {"2620:4f:8000::/48", "112"}, + {"2804:145c:d000::/34", "263327"}, + {"2a09:88c0::/29", "62336"}, + {"2a0e:d080::/29", "15623"}, + {"2a0f:8a00::/29", "43402"}, + {"2800:160:14e1::/46", "14259"}, + {"2804:18:5008::/45", "26599"}, + {"2a02:26f7:ea45::/46", "20940"}, + {"2001:559:5d9::/48", "33491"}, + {"2a00:86c0:2096::/32", "2906"}, + {"2001:250:85b::/48", "23910"}, + {"2001:559:8157::/48", "33491"}, + {"2001:44b8:404b::/48", "4739"}, + {"2804:7a88::/32", "271377"}, + {"2806:2f0:72a3::/41", "17072"}, + {"2001:559:c39b::/48", "33287"}, + {"240a:a560::/32", "144026"}, + {"2607:f160:3e::/48", "22394"}, + {"2a0a:3bc0::/32", "206201"}, + {"2409:8d5a:5c8::/42", "56040"}, + {"2600:1000:b0c0::/42", "6167"}, + {"2620:171:19::/48", "715"}, + {"2a01:9c00::/32", "44567"}, + {"2a0a:8500::/29", "206936"}, + {"2001:559:151::/48", "7015"}, + {"2600:1413:b001::/36", "20940"}, + {"2804:14c:f2::/37", "28573"}, + {"2804:10a0::/40", "28173"}, + {"2804:1e20:9940::/48", "264409"}, + {"2a0e:b107:15b0::/48", "211169"}, + {"2603:c001:1630::/36", "31898"}, + {"2607:2f00:1f::/32", "12025"}, + {"2804:8090::/32", "271759"}, + {"2001:dcd:3::/48", "397232"}, + {"2405:7f00:90a0::/39", "133414"}, + {"2600:100a:a010::/40", "22394"}, + {"2600:1010:ff00::/44", "6167"}, + {"2804:4ca0:2::/39", "267381"}, + {"2a03:e340:1::/48", "60781"}, + {"2a0f:9240:2001::/32", "49434"}, + {"2402:800:5b63::/43", "7552"}, + {"240a:a3c3::/32", "143613"}, + {"240a:a6ae::/32", "144360"}, + {"2606:2800:404a::/45", "14210"}, + {"2804:490:8800::/38", "265705"}, + {"2804:4460::/32", "267629"}, + {"2404:e801:201f::/48", "45938"}, + {"2408:8459:8a50::/37", "17816"}, + {"2620:8b:a000::/48", "399196"}, + {"2804:5534:1800::/34", "268696"}, + {"2a03:5a00:14::/48", "59679"}, + {"2a06:dbc0::/29", "5578"}, + {"2001:559:8718::/48", "33652"}, + {"2400:cb00:a4f0::/46", "13335"}, + {"2600:2600::/31", "33362"}, + {"2803:f580::/32", "61470"}, + {"2a04:2dc0:1d::/48", "212460"}, + {"240a:aba7::/32", "145633"}, + {"2401:b800:f001::/36", "38248"}, + {"240e:438:240::/37", "4134"}, + {"2606:2800:4ad4::/46", "15133"}, + {"2607:f4f8::/32", "23127"}, + {"2804:7b5c::/44", "271427"}, + {"2806:2f0:3002::/42", "17072"}, + {"2a09:1180::/29", "59441"}, + {"240a:ab88::/32", "145602"}, + {"2001:579:cb00::/37", "22773"}, + {"2001:4488:f962::/38", "7713"}, + {"2804:10b4:11::/39", "263645"}, + {"2804:4574::/32", "266927"}, + {"2804:4590::/32", "266935"}, + {"2a03:ec80::/48", "211220"}, + {"2a0c:7100::/29", "40970"}, + {"2a12:e580::/29", "60135"}, + {"2408:8956:7000::/40", "17622"}, + {"2600:2000:2100::/42", "31898"}, + {"2001:da8:6002::/43", "24355"}, + {"2404:1f00:7000::/32", "55947"}, + {"2620:1ec:e::/43", "8075"}, + {"2a00:b300::/32", "8613"}, + {"2001:67c:22b8::/48", "49770"}, + {"2400:cb00:2049::/48", "13335"}, + {"2600:140b:3001::/38", "20940"}, + {"2804:24ec::/32", "264248"}, + {"2a0e:b107:6e3::/48", "213215"}, + {"240a:a2a9::/32", "143331"}, + {"240a:a68f::/32", "144329"}, + {"240e:974:e100::/40", "4134"}, + {"2600:1480:d800::/48", "21342"}, + {"2801:80:1aa0::/48", "28248"}, + {"240a:af90::/32", "146634"}, + {"2804:6da0::/32", "270545"}, + {"2603:6000::/32", "10796"}, + {"2804:364c::/32", "266340"}, + {"2804:612c:4000::/32", "269218"}, + {"2a02:888:8051::/48", "47794"}, + {"2a02:25ad:1a:d2::/30", "12824"}, + {"2a06:a000:190::/44", "212200"}, + {"2001:559:458::/47", "7015"}, + {"2001:df2:a300::/48", "6336"}, + {"2600:1419:1000::/48", "4230"}, + {"2804:954:88::/38", "263073"}, + {"2a10:2f01:350::/46", "212793"}, + {"2001:559:827b::/45", "7922"}, + {"2001:dd8:6::/48", "18368"}, + {"2408:8459:a210::/42", "17623"}, + {"240e:fc:f000::/31", "4134"}, + {"2804:5c08::/32", "52548"}, + {"2409:8904:4860::/39", "24547"}, + {"2600:1403:9c01::/34", "20940"}, + {"2600:6c33:719::/32", "20115"}, + {"2606:8e80:1800::/34", "32133"}, + {"2620:10c:2000::/48", "40931"}, + {"2408:840d:7500::/42", "17621"}, + {"240a:a4c7::/32", "143873"}, + {"2c0f:f4b8::/32", "327889"}, + {"2001:44c8:4620::/43", "45430"}, + {"2400:1880::/32", "17670"}, + {"2405:8540::/32", "138296"}, + {"2a09:2885::/48", "202316"}, + {"2001:c20:c84f::/43", "3758"}, + {"2600:380:7980::/38", "20057"}, + {"2600:6c7f:9080::/48", "20115"}, + {"2804:6184::/32", "269239"}, + {"2a0f:ca81:1330::/44", "212085"}, + {"2405:c9c0:5::/42", "138823"}, + {"2605:6400:100::/48", "53667"}, + {"2a03:28e0::/32", "48093"}, + {"2001:df1:e500::/48", "63773"}, + {"2400:ffc0::/47", "17439"}, + {"2620:0:5090::/48", "22796"}, + {"2a02:2360::/32", "51034"}, + {"2801:1a2:4::/48", "269845"}, + {"2400:9780::/46", "136557"}, + {"2401:d800:ffc2::/42", "7552"}, + {"2407:3e00:400a::/48", "9255"}, + {"240a:aa32::/32", "145260"}, + {"2001:ee0:1081::/34", "45899"}, + {"2400:ac40:c90::/42", "136255"}, + {"2408:8459:dc10::/42", "17623"}, + {"2610:a1:30fc::/48", "397228"}, + {"2a00:d120::/43", "29990"}, + {"2001:470:33::/48", "14613"}, + {"2001:7f8:1d::/48", "29432"}, + {"2409:8080:2a50::/44", "9808"}, + {"240a:ad49::/32", "146051"}, + {"240e:44d:6100::/41", "140345"}, + {"2804:d70:120::/41", "52626"}, + {"2a01:bd40::/29", "12586"}, + {"2a02:26f7:d259::/42", "20940"}, + {"2a07:c000::/29", "202551"}, + {"2a02:26f7:ba05::/46", "20940"}, + {"2a06:1e00:50::/48", "60695"}, + {"2409:8904:66b0::/39", "24547"}, + {"2604:9540::/32", "33125"}, + {"2a02:2f0c:8002::4/62", "8708"}, + {"2001:df0:413::/48", "132423"}, + {"2409:805c:4900::/35", "9808"}, + {"2409:8904:4660::/39", "24547"}, + {"240a:ad6e::/32", "146088"}, + {"2600:6c10:f04e::/43", "20115"}, + {"2800:160:1e9b::/42", "14259"}, + {"2801:80:1920::/48", "264971"}, + {"2804:314:4027::/44", "61568"}, + {"240e:95d::/37", "136193"}, + {"2604:640::/48", "393562"}, + {"2a00:c6c0:1::/48", "133752"}, + {"2001:559:c2e4::/48", "33287"}, + {"2001:559:c4cf::/43", "33650"}, + {"2001:559:c4e8::/48", "7922"}, + {"240e:44d:7200::/42", "140345"}, + {"240e:690::/29", "4134"}, + {"2806:230:1207::/40", "11888"}, + {"2a01:b740:a21::/48", "714"}, + {"2001:559:4bc::/47", "33287"}, + {"2001:559:c183::/48", "7015"}, + {"240a:ae1a::/32", "146260"}, + {"2a02:26f7:e449::/42", "20940"}, + {"2001:559:8048::/48", "7016"}, + {"2001:678:d3c::/48", "206628"}, + {"2001:c20:a006::/35", "3758"}, + {"2001:fd8:b340::/42", "132199"}, + {"2404:7d80::/32", "9268"}, + {"2600:1488:a461::/40", "20940"}, + {"2600:40f0:1120::/44", "7046"}, + {"2a01:7220::/32", "62179"}, + {"2806:2f0:4561::/46", "17072"}, + {"2001:468:cc0::/48", "3140"}, + {"240a:a0ef::/32", "142889"}, + {"240e:45c:ca00::/40", "131285"}, + {"2602:fdd4::/36", "396855"}, + {"2401:d800:7450::/42", "7552"}, + {"2600:1408:5001::/37", "20940"}, + {"2600:140f:e001::/38", "20940"}, + {"2a03:43a0::/32", "44500"}, + {"2a0f:d601::/29", "208236"}, + {"2001:550:2304::/40", "174"}, + {"2402:800:39ee::/38", "7552"}, + {"240e:964:d600::/34", "4134"}, + {"2607:f928:12::/48", "16905"}, + {"2800:160:1121::/44", "14259"}, + {"2804:6648::/32", "269546"}, + {"2806:230:602e::/48", "265594"}, + {"2001:250:5862::/48", "138371"}, + {"2001:559:c466::/48", "20381"}, + {"2401:d800:f450::/42", "7552"}, + {"2604:3400:abcc::/48", "209453"}, + {"2a00:d18::/32", "12714"}, + {"2a0a:68c0:ff00::/40", "134835"}, + {"2a0c:3b80::/32", "58057"}, + {"2001:559:8356::/48", "33651"}, + {"2401:d800:52d0::/42", "7552"}, + {"2408:876a::/32", "4837"}, + {"2602:fc3b:301::/37", "399970"}, + {"2804:14c:65c7::/44", "28573"}, + {"2001:3c8::/38", "4621"}, + {"2001:450:2015::/48", "3356"}, + {"2a02:26f7:cc01::/45", "20940"}, + {"2001:67c:2e28::/48", "3320"}, + {"2604:f400:11::/48", "32654"}, + {"2a0f:5707:af0b::/48", "211358"}, + {"2001:6c8::/29", "3292"}, + {"2409:8907:8020::/39", "24547"}, + {"2800:160:1ceb::/43", "14259"}, + {"2001:67c:1498::/48", "43455"}, + {"2001:dce:5101::/40", "23869"}, + {"2402:800:3d8d::/43", "7552"}, + {"2403:9800:7f0c::/48", "4648"}, + {"2804:7044::/32", "270716"}, + {"2a01:410:3::/32", "30844"}, + {"2403:4280::/48", "23724"}, + {"2404:bc0:4400::/44", "137735"}, + {"2404:4a00:8a00:1::/33", "45629"}, + {"240e:3b3:2c00::/35", "134774"}, + {"2804:4be8::/33", "267336"}, + {"2a02:9b0:403c::/41", "35819"}, + {"2a07:e02:41::/48", "16509"}, + {"2a09:9680::/29", "51546"}, + {"2a0b:dd80::/29", "8298"}, + {"2001:67c:418::/48", "8981"}, + {"2605:a401:8dd2::/42", "33363"}, + {"2804:7990::/32", "271313"}, + {"2804:82cc::/32", "272157"}, + {"2a00:1b98::/32", "25376"}, + {"2a0b:6b83:2001::/33", "202562"}, + {"2400:8905::/32", "48337"}, + {"240a:a81b::/32", "144725"}, + {"2606:2800:4254::/46", "15133"}, + {"2a02:7760::/32", "48166"}, + {"2001:4490:3000::/42", "9829"}, + {"2406:d00:ddff::/48", "132165"}, + {"2409:8004:802::/45", "24547"}, + {"240a:a97a::/32", "145076"}, + {"2a00:f38::/29", "12297"}, + {"2607:3f00::/46", "46261"}, + {"2607:f500:1800::/32", "6181"}, + {"2800:ba0:8::/48", "263812"}, + {"2a02:26f7:c788::/48", "36183"}, + {"2a05:e740:160::/48", "29108"}, + {"2001:5e0:20::/48", "20224"}, + {"2001:1900:2236::/41", "3356"}, + {"2408:8459:b650::/36", "17816"}, + {"2605:5800::/32", "15305"}, + {"2606:7c80:102::/48", "40300"}, + {"2a00:1228:2::/45", "31148"}, + {"2001:fe8:8100::/47", "24435"}, + {"2402:ef15::/32", "9430"}, + {"2804:49c:3101::/46", "15201"}, + {"2400:a980:5d00::/38", "133111"}, + {"2409:8d06::/28", "9808"}, + {"2c0f:eb00:f00::/35", "328962"}, + {"2606:a440:5::/48", "16509"}, + {"2806:230:5012::/48", "265594"}, + {"2404:4dc0::/32", "63570"}, + {"240e:980:3000::/33", "4134"}, + {"2620:131:1049::/46", "26450"}, + {"2804:6024::/32", "269148"}, + {"2a02:ed04:4410::/39", "50304"}, + {"2001:559:5b8::/46", "7922"}, + {"2001:67c:4a0::/48", "43623"}, + {"2409:8008:da::/48", "9808"}, + {"2602:fc23:113::/48", "8095"}, + {"2001:468:d01::/48", "3582"}, + {"2a0e:b107:9fe::/48", "208699"}, + {"2405:c140::/32", "139567"}, + {"2409:8750:1100::/32", "56047"}, + {"2804:3684::/32", "266353"}, + {"2804:3df8:4::/33", "266566"}, + {"2804:7df0::/32", "271592"}, + {"2a0c:3040::/29", "13054"}, + {"2001:1248:8809::/42", "11172"}, + {"2404:4a00:8000:1::/37", "45629"}, + {"2407:3e40::/32", "137165"}, + {"240a:af3d::/32", "146551"}, + {"240e:967:800::/37", "133774"}, + {"2600:100a:b1e0::/33", "22394"}, + {"2605:a404:a1::/44", "33363"}, + {"2606:7700::/48", "399830"}, + {"2804:1768::/32", "263144"}, + {"2a07:a341::/32", "20473"}, + {"2605:f440:bef0::/33", "54874"}, + {"2620:137:4000::/40", "22601"}, + {"2801:1f:8800::/48", "18747"}, + {"2a00:9520::/48", "56641"}, + {"2a09:8680::/29", "38946"}, + {"2405:ba00:8808::/48", "7160"}, + {"2400:a980:3900::/37", "133111"}, + {"240a:a441::/32", "143739"}, + {"2600:6c21:40a::/47", "20115"}, + {"2804:3294::/32", "265086"}, + {"2a05:b040::/29", "8453"}, + {"2400:cb00:aa23::/45", "13335"}, + {"2409:8904:e070::/40", "24547"}, + {"2600:6000:f5d6::/36", "12271"}, + {"2804:5440::/32", "268637"}, + {"2a02:26f7:c60c::/48", "36183"}, + {"2a0c:b642:1a0b::/48", "3280"}, + {"2a0e:7900::/29", "207902"}, + {"2402:8cc0::/40", "131137"}, + {"2402:a300:c000::/45", "55427"}, + {"2409:8904:e270::/40", "24547"}, + {"2a0d:9a40::/29", "47832"}, + {"2600:1404:7001::/38", "20940"}, + {"2801:15:4800::/48", "19429"}, + {"2001:559:80dc::/48", "7922"}, + {"2001:559:c0e7::/48", "33287"}, + {"2409:8028:900::/37", "9808"}, + {"2804:35d4::/32", "266309"}, + {"240a:ac86::/32", "145856"}, + {"2604:e880::/32", "40156"}, + {"2804:1080:8004::/33", "28287"}, + {"2804:3e68::/32", "266594"}, + {"2a00:11c0:25::/43", "42473"}, + {"2a09:11c0:200::/44", "207613"}, + {"2a09:e240:1::/46", "35133"}, + {"2a10:1c40::/48", "206222"}, + {"2800:bf0:80fc::/46", "27947"}, + {"2a09:4e00::/32", "208861"}, + {"240a:ab86::/32", "145600"}, + {"240e:438:2840::/38", "4134"}, + {"2804:14d:12aa::/41", "28573"}, + {"2804:1368::/36", "262808"}, + {"2804:7a54:bebe::/48", "271365"}, + {"2a00:1f10::/32", "198682"}, + {"2a0c:75c0:4::/29", "44486"}, + {"2001:559:87f3::/48", "7922"}, + {"2401:7000:d900::/47", "45177"}, + {"2406:9dc0:60::/44", "18250"}, + {"2620:7f:a000::/48", "62827"}, + {"2a0c:a040::/32", "48918"}, + {"2c0f:edb0::/32", "36236"}, + {"2001:559:87f9::/45", "7015"}, + {"2401:d800:b202::/42", "7552"}, + {"2600:1017:f010::/39", "6167"}, + {"2600:140f:7401::/38", "20940"}, + {"2602:feb4:170::/44", "25961"}, + {"2610:a1:3044::/48", "12008"}, + {"2804:e8::/39", "28280"}, + {"2a0f:cb00::/48", "213274"}, + {"2001:df7:6780::/48", "146944"}, + {"2408:8956:6d00::/40", "17816"}, + {"240e:45c:b400::/40", "131285"}, + {"2603:c0f8::/38", "20054"}, + {"2801:16:4800::/48", "269791"}, + {"2a03:e700::/32", "8922"}, + {"2a0a:9c80::/32", "200665"}, + {"2a00:7180:8018::/33", "15557"}, + {"2a02:acc1::/30", "198726"}, + {"2001:480:a2::/44", "668"}, + {"2402:79c0:1127::/48", "26415"}, + {"240e:3b7:1400::/38", "134773"}, + {"2a0c:63c0::/48", "39642"}, + {"2402:3a80:30::/46", "38266"}, + {"2804:14c:3baa::/43", "28573"}, + {"2804:17e0::/32", "263256"}, + {"2a10:3400::/29", "210054"}, + {"2408:8256:3d89::/48", "17816"}, + {"2804:4148::/32", "267425"}, + {"2806:2f0:10c0::/43", "22884"}, + {"2a00:16f8:1::/44", "6461"}, + {"2a07:aa00:8::/41", "3549"}, + {"2a12:4940:1966::/32", "211398"}, + {"2001:559:c2bd::/46", "7015"}, + {"240a:a6bf::/32", "144377"}, + {"2603:fbd0::/21", "397165"}, + {"2606:4700:90c0::/43", "13335"}, + {"2620:1ec:90d::/46", "8075"}, + {"2804:6104::/32", "269206"}, + {"2a01:a640::/32", "15966"}, + {"2a10:2f00:17e::/48", "209225"}, + {"2804:38f8::/32", "266515"}, + {"2a05:3180::/32", "34580"}, + {"2c0f:ec80:d000::/34", "37315"}, + {"2a00:4680::/32", "56672"}, + {"2001:559:5eb::/48", "22909"}, + {"2402:8100:27f0::/47", "45271"}, + {"240a:ae2f::/32", "146281"}, + {"2605:f100::/32", "14265"}, + {"2620:13f:6000::/44", "237"}, + {"2801:80:550::/48", "28215"}, + {"2804:16d8:1000::/38", "262729"}, + {"2a02:26f7:c3dc::/48", "36183"}, + {"2a10:2c0::/29", "60636"}, + {"2408:84f3:9810::/42", "134543"}, + {"240a:a8de::/32", "144920"}, + {"2a02:26f7:ed04::/48", "36183"}, + {"2a0b:b87:ffe2::/48", "205036"}, + {"2001:930:149::/48", "8386"}, + {"2400:6480::/32", "55507"}, + {"2404:a800:3003::/39", "9498"}, + {"2408:8256:3c81::/43", "17623"}, + {"240a:a48e::/32", "143816"}, + {"2804:2fe0::/32", "264918"}, + {"2a10:5a80::/29", "328663"}, + {"2001:1690::/32", "20847"}, + {"2400:9380:9040::/47", "4809"}, + {"2402:800:7520::/41", "7552"}, + {"240e:96::/28", "4134"}, + {"240e:44d:5280::/41", "4134"}, + {"2804:3114::/32", "264991"}, + {"2607:f7a8:607::/36", "46887"}, + {"2804:41f8:f502::/36", "267469"}, + {"2a02:2339::/36", "207199"}, + {"2a03:60e0::/32", "60768"}, + {"2c0f:f028::/32", "37317"}, + {"2404:a800:3002::/48", "137670"}, + {"2406:2000:f0::/44", "10310"}, + {"2600:140f:2800::/48", "9498"}, + {"2001:559:db::/48", "33657"}, + {"2408:80ea:6700::/41", "17816"}, + {"240e:85c:10::/42", "4134"}, + {"2806:2f0:2420::/48", "17072"}, + {"2a02:26f7:b851::/42", "20940"}, + {"2001:559:86f8::/48", "33659"}, + {"2001:67c:1220::/46", "197451"}, + {"2600:100e::/32", "6167"}, + {"2800:190:1::/48", "19037"}, + {"2804:f90::/32", "263592"}, + {"2001:5e0::/43", "16713"}, + {"2400:ee80:2001::/32", "45177"}, + {"2604:9980::/48", "17216"}, + {"2607:9e80:1101::/40", "397068"}, + {"2804:34fc::/32", "265493"}, + {"2804:3cc4::/32", "266233"}, + {"2804:709c::/32", "270737"}, + {"2806:230:2001::/48", "11888"}, + {"2001:559:3ea::/48", "33656"}, + {"2001:df6:c00::/48", "55451"}, + {"2409:8050:1800::/47", "56047"}, + {"2a01:298:f001::/48", "30893"}, + {"2a06:3b80:25::/46", "206614"}, + {"2a07:4580:b0e::/29", "46261"}, + {"2400:adc4:800::/39", "9541"}, + {"2404:bf40:a586::/42", "139084"}, + {"240a:a5a2::/32", "144092"}, + {"2602:fc5a::/36", "398491"}, + {"2606:7fc0::/32", "400087"}, + {"2a0b:9b00::/37", "62240"}, + {"2001:b30::/33", "2614"}, + {"2409:8057:300a::/43", "56040"}, + {"240a:ac8a::/32", "145860"}, + {"2a0c:ad40::/29", "51184"}, + {"2a0d:6e00::/29", "201290"}, + {"2401:9480::/32", "56304"}, + {"2804:c60::/32", "52696"}, + {"2804:3154::/32", "265007"}, + {"2a04:4e40:6a00::/48", "54113"}, + {"2a07:aa40::/29", "59469"}, + {"2408:8256:3270::/48", "17816"}, + {"2800:c70:20::/37", "23201"}, + {"2804:7370::/32", "270915"}, + {"2806:1000:cfff:2::/34", "8151"}, + {"2a0f:7980::/44", "141694"}, + {"2001:559:84c8::/48", "22909"}, + {"2400:dc40::/32", "136440"}, + {"2605:b100:e000::/41", "577"}, + {"2804:4f80:5000::/48", "268330"}, + {"2804:7e30::/32", "271608"}, + {"2a01:4b00::/32", "56478"}, + {"2c0f:fb98::/32", "37480"}, + {"2001:559:c250::/48", "7922"}, + {"2404:e100:3004::/48", "133840"}, + {"2804:e10::/32", "52540"}, + {"2001:559:88::/48", "7015"}, + {"2804:a78::/32", "262478"}, + {"2a02:2e02:a180::/42", "12479"}, + {"2001:559:800a::/48", "33657"}, + {"2401:d800:5e30::/41", "7552"}, + {"2804:779c::/32", "271189"}, + {"2408:8459:a10::/41", "17622"}, + {"2604:d600:c2d::/43", "32098"}, + {"2a02:26f7:89::/48", "20940"}, + {"2406:9400::/32", "9253"}, + {"2603:c0ec:2800::/40", "54253"}, + {"2a03:dd40::/32", "61025"}, + {"2001:67c:21a4::/48", "5420"}, + {"2001:67c:2430::/46", "57517"}, + {"2409:8057:3811::/46", "56040"}, + {"2600:1001:a100::/44", "6167"}, + {"2804:55cc::/32", "267957"}, + {"2001:559:c1e4::/48", "22909"}, + {"2001:1388:1b8e::/34", "6147"}, + {"240e:108:11d7::/48", "4134"}, + {"2804:4ec:2::/35", "28668"}, + {"2a02:26f7:c800::/48", "36183"}, + {"2a11:d100::/29", "202505"}, + {"2001:678:ef0::/48", "202592"}, + {"240a:a9ef::/32", "145193"}, + {"2804:1588::/33", "263393"}, + {"2a02:26f0:1201::/39", "20940"}, + {"2a02:26f7:bcc5::/46", "20940"}, + {"2a06:e881:5608::/48", "208340"}, + {"2001:da8:e820::/48", "24368"}, + {"2001:12f0:b18::/42", "1916"}, + {"2400:6700::/32", "16509"}, + {"240a:a2aa::/32", "143332"}, + {"2600:1402:6801::/35", "20940"}, + {"2a0d:d480::/29", "35916"}, + {"2400:cb00:241::/46", "13335"}, + {"2409:8e14::/34", "56044"}, + {"2804:45b0::/32", "266943"}, + {"2a04:c740::/29", "202131"}, + {"2001:a98:8000::/48", "9095"}, + {"2604:d600:122d::/43", "32098"}, + {"2607:a500:df11::/34", "12025"}, + {"2a02:6ea0:babe::/48", "60068"}, + {"2001:559:86fb::/45", "7015"}, + {"2001:678:3::/48", "42"}, + {"2001:df5:b900::/48", "131418"}, + {"2406:2400:cdef::/48", "45287"}, + {"240e:db:b000::/37", "4134"}, + {"2804:bdc::/32", "52866"}, + {"2804:79c0::/32", "271325"}, + {"2a03:a960:30::/32", "61317"}, + {"2001:250:7820::/32", "23910"}, + {"2401:4900:5d80::/38", "45609"}, + {"2600:6c10:fff8::/47", "20115"}, + {"2606:2800:233::/45", "15133"}, + {"2620:149:af1::/37", "714"}, + {"2a0e:46c4:2269::/48", "136918"}, + {"2400:cb00:a740::/48", "13335"}, + {"2403:fcc0::/32", "138453"}, + {"2408:8459:8e50::/35", "17816"}, + {"2400:7400:e014::/44", "38044"}, + {"2804:5a80::/32", "268777"}, + {"2001:250:3428::/47", "138393"}, + {"2400:fc00:8110::/42", "45773"}, + {"2600:6c10:5f::/42", "20115"}, + {"2606:bc00:8ef0::/39", "19419"}, + {"2001:550:4a01:1::/46", "174"}, + {"2604:2bc0::/32", "396141"}, + {"2804:4c14:bb01::/33", "267348"}, + {"2804:4e04::/32", "268234"}, + {"2001:550:300:1::/48", "174"}, + {"2001:2001:6100::/32", "1299"}, + {"2804:2f2c::/32", "264876"}, + {"2001:678:ca8::/48", "12897"}, + {"2001:67c:2e60::/48", "12348"}, + {"2800:160:603::/35", "14259"}, + {"2804:3cb8:d000::/34", "53221"}, + {"2600:1012:f110::/36", "22394"}, + {"2607:f358:4::/46", "18779"}, + {"2a07:3500:19f8::/48", "38915"}, + {"2001:559:85d5::/48", "33650"}, + {"2405:6940::/48", "139178"}, + {"2605:7900:10::/47", "19133"}, + {"2806:2f0:31a1::/46", "17072"}, + {"2001:559:c1e7::/48", "20214"}, + {"2607:f108:1900::/33", "29838"}, + {"2804:5d8::/32", "262546"}, + {"2804:3244:4::/43", "265066"}, + {"2a02:27c8::/32", "48645"}, + {"2001:4c28:212::/48", "39832"}, + {"2600:1007:b100::/41", "6167"}, + {"2800:160:1a84::/46", "14259"}, + {"2804:163c:17a::/38", "263277"}, + {"2804:31fc::/32", "53022"}, + {"2a03:a780::/32", "198031"}, + {"2001:579:c01c::/40", "22773"}, + {"2001:579:c17d::/40", "22773"}, + {"2408:8456:a410::/42", "134543"}, + {"240a:a178::/32", "143026"}, + {"240e:44d:1a40::/42", "140360"}, + {"2804:673c:1000::/40", "264598"}, + {"2806:20d:1d43::/45", "32098"}, + {"2806:2f0:12a0::/41", "17072"}, + {"2a09:bd00:1fe::/47", "42385"}, + {"2401:d800:362::/40", "7552"}, + {"2408:8256:397d::/46", "17623"}, + {"240a:aac4::/32", "145406"}, + {"240a:abda::/32", "145684"}, + {"2607:fd90::/32", "14717"}, + {"2a02:2430:5::/46", "59491"}, + {"2001:559:1c6::/48", "7922"}, + {"240a:ab12::/32", "145484"}, + {"2607:f128:800::/32", "32748"}, + {"2620:0:210::/48", "43"}, + {"2001:df2:c300::/48", "131924"}, + {"2402:800:9939::/41", "7552"}, + {"2607:f1e0::/33", "19092"}, + {"2803:e60::/32", "267913"}, + {"2a0e:8f02:f017::/48", "212112"}, + {"2804:2320::/32", "264144"}, + {"2a0e:97c0:510::/44", "61978"}, + {"2001:da8:e01f::/42", "23910"}, + {"2001:f20:2000::/47", "9875"}, + {"2600:1003:b0e0::/43", "22394"}, + {"2806:2f0:4663::/40", "17072"}, + {"2001:502:100e::/48", "397226"}, + {"2001:559:8611::/46", "7922"}, + {"2620:0:22f0::/48", "6406"}, + {"2001:df0:2b4::/48", "2526"}, + {"2401:f000:18::/48", "23838"}, + {"2600:370f:3783::/41", "32261"}, + {"2606:3c40::/32", "399493"}, + {"2804:a00:8e0::/37", "262838"}, + {"2804:c48:e000::/38", "52687"}, + {"2804:37f0:5100::/36", "266445"}, + {"240e:45c:1c00::/40", "131285"}, + {"2a10:c080::/29", "209288"}, + {"2a12:23c0::/29", "62177"}, + {"2001:1a11:110::/47", "42298"}, + {"2406:4a00:1700::/48", "56038"}, + {"2620:132:c000::/40", "11478"}, + {"2804:18:7200::/37", "10429"}, + {"2804:93c:31::/40", "52878"}, + {"2806:106e:2::/48", "8151"}, + {"2001:f90::/32", "4609"}, + {"2400:fc00:8130::/41", "45773"}, + {"2600:9000:110b::/43", "16509"}, + {"2a07:95c0::/30", "400177"}, + {"2a0a:e9c0::/29", "56986"}, + {"2409:800b:2806::/39", "9808"}, + {"240a:a42b::/32", "143717"}, + {"240e:438:a820::/43", "140647"}, + {"240e:978:1000::/40", "137702"}, + {"2605:a401:893f::/41", "33363"}, + {"2405:4200:f002::/36", "24482"}, + {"2409:8c54:2000::/43", "9808"}, + {"2600:1007:f110::/36", "22394"}, + {"2600:1407:4801::/35", "20940"}, + {"2a00:7180:800c::/46", "15557"}, + {"2a01:ab20::/32", "47302"}, + {"2001:559:c259::/48", "7922"}, + {"2602:fe13:fa0::/44", "53356"}, + {"2800:bf0:824d::/46", "52257"}, + {"2806:320:380::/32", "28438"}, + {"2a00:1560:e::/43", "29684"}, + {"2a00:1818::/32", "3285"}, + {"2a02:6900:8804::/48", "43898"}, + {"2a07:59c6:eed9::/42", "56382"}, + {"2001:67c:235c::/48", "54990"}, + {"2406:3003:107c::/36", "4657"}, + {"2604:2d80:7200::/36", "30036"}, + {"2620:e4::/48", "17365"}, + {"2803:9810::/39", "36492"}, + {"2a00:f380::/32", "39551"}, + {"2a02:26f7:bbc1::/46", "20940"}, + {"2a02:26f7:ed84::/48", "36183"}, + {"2a02:26f7:fa08::/48", "36183"}, + {"2a03:ac60::/32", "199758"}, + {"2a0e:6c00::/29", "63023"}, + {"2001:49f0:a01c::/46", "174"}, + {"2405:3240::/36", "132434"}, + {"2409:8754:c800::/34", "9808"}, + {"240a:a049::/32", "142723"}, + {"240a:a9bb::/32", "145141"}, + {"2600:380:ea00::/39", "7018"}, + {"2803:d080:a135::/33", "27960"}, + {"2001:250:1c0b::/45", "138376"}, + {"2804:53e0::/32", "28258"}, + {"2001:918:ff5e::/42", "3303"}, + {"2401:4900:54c0::/39", "45609"}, + {"2401:8a00:f601::/40", "10099"}, + {"2610:28:5030::/48", "13371"}, + {"2a02:26f7:c34c::/48", "36183"}, + {"2001:df0:2f5::/48", "55912"}, + {"2620:171:39::/46", "715"}, + {"2a0d:1600::/32", "57354"}, + {"2001:559:858b::/48", "33491"}, + {"2400:bb40:2010::/47", "141039"}, + {"2400:cb00:422::/45", "13335"}, + {"2606:1a40:2012::/47", "42473"}, + {"2607:ffa0::/47", "19355"}, + {"2001:da8:256::/48", "23910"}, + {"2405:9800:b419::/45", "45430"}, + {"2607:f428:93c0::/42", "19115"}, + {"2001:579:cf04::/46", "22773"}, + {"2402:800:571d::/42", "7552"}, + {"2605:5c0:c045::/44", "28885"}, + {"2a05:dfc7:100::/43", "200897"}, + {"2a0c:7ac0::/29", "203215"}, + {"2a04:4e40:1000::/48", "54113"}, + {"2a09:2200::/29", "29655"}, + {"2400:cb00:a1c0::/45", "13335"}, + {"240a:a5cb::/32", "144133"}, + {"2a02:26f7:bc44::/48", "36183"}, + {"2a0f:c087:c3ae::/48", "212521"}, + {"2001:200:f00::/32", "2500"}, + {"2001:250:6032::/38", "23910"}, + {"2001:67c:3a8::/48", "51839"}, + {"2001:da8:21a::/48", "24348"}, + {"2605:3a00:7::/48", "22768"}, + {"2610:f0:6b5::/36", "22925"}, + {"2a09:54c0::/29", "61138"}, + {"2001:253:105::/48", "142071"}, + {"2a01:b940::/30", "48635"}, + {"2a05:b0c6:200a::/48", "208753"}, + {"2001:678:58c::/48", "204926"}, + {"2402:b780::/41", "64047"}, + {"2a0f:2ac0::/29", "60262"}, + {"240e:473::/32", "140485"}, + {"2804:1c2c:2000::/32", "262869"}, + {"2a02:26f7:e6c1::/46", "20940"}, + {"2402:4440::/32", "24423"}, + {"2607:6000:300::/40", "12189"}, + {"2a07:a80::/29", "34766"}, + {"2001:4490:3fbc::/46", "9829"}, + {"240a:a8c6::/32", "144896"}, + {"2600:100a:9110::/36", "22394"}, + {"2606:2800:8::/47", "15133"}, + {"2804:5f38::/32", "269084"}, + {"2804:8564:2180::/32", "262313"}, + {"2a02:26f7:d705::/46", "20940"}, + {"2a0a:2842:aa00::/46", "136796"}, + {"240a:aaa0::/32", "145370"}, + {"2600:9000:1197::/48", "16509"}, + {"2803:9800:a505::/46", "11664"}, + {"2001:4878:8048::/48", "12222"}, + {"240a:a444::/32", "143742"}, + {"240a:aa9d::/32", "145367"}, + {"2607:fd48::/62", "13536"}, + {"2806:20d:161e::/47", "32098"}, + {"2806:261:1300::/41", "13999"}, + {"2a00:6901:a103::/48", "20926"}, + {"2001:418:2401:1::/64", "20940"}, + {"2001:678:bbc::/48", "207671"}, + {"2402:800:5e40::/43", "7552"}, + {"2408:84f3:3250::/44", "17816"}, + {"2604:f500:2::/32", "16698"}, + {"2a09:a443::/32", "205479"}, + {"2a0e:57c0:800::/38", "12731"}, + {"240e:379:ac00::/33", "4134"}, + {"240e:44d:3700::/42", "140345"}, + {"2606:70c0::/32", "399951"}, + {"2402:800:997f::/40", "7552"}, + {"2600:1415:401::/36", "20940"}, + {"2800:160:1e3c::/41", "14259"}, + {"2405:8a00:c024::/46", "55824"}, + {"2408:8956:8800::/40", "17622"}, + {"240a:a942::/32", "145020"}, + {"2600:6c39:9::/45", "20115"}, + {"2607:b400:a02::/48", "1312"}, + {"2804:41b4:5000::/32", "267451"}, + {"2806:2f0:322::/47", "22884"}, + {"2a02:2668:6700::/35", "16345"}, + {"2a06:e881:170f::/48", "206813"}, + {"2401:4900:4abb::/48", "45609"}, + {"2804:14d4::/32", "263353"}, + {"2001:559:78f::/48", "7015"}, + {"2001:67c:2328::/48", "31473"}, + {"2606:e780::/32", "394868"}, + {"2804:14c:4387::/43", "28573"}, + {"2804:2038::/32", "264478"}, + {"2a01:4260::/32", "205938"}, + {"2a01:6920::/32", "54876"}, + {"2001:559:c039::/48", "33650"}, + {"2409:896a:4a00::/39", "9808"}, + {"2607:6100:1000::/48", "54380"}, + {"2a06:e2c0::/29", "56697"}, + {"2001:fd8:3340::/42", "132199"}, + {"2606:1fc0::/40", "21529"}, + {"2620:15e:7001::/48", "30383"}, + {"2800:160:1af8::/46", "14259"}, + {"2a0d:e4c4:4000::/36", "210625"}, + {"2001:559:8094::/47", "33490"}, + {"2402:800:949b::/42", "7552"}, + {"2402:9800:4003::/48", "38508"}, + {"240a:a910::/32", "144970"}, + {"2401:d800:90b0::/41", "7552"}, + {"2402:800:3463::/43", "7552"}, + {"2607:f740:e051::/44", "63911"}, + {"2a01:b747:3003::/32", "714"}, + {"2600:6c10:409::/46", "20115"}, + {"2a00:fd0::/32", "30914"}, + {"2a0e:97c0:4df::/48", "211024"}, + {"2803:24c0::/37", "264796"}, + {"2a01:9a80::/30", "39120"}, + {"2a05:b740::/29", "210026"}, + {"2001:559:15a::/48", "7725"}, + {"2409:8073:801::/34", "9808"}, + {"240a:ae69::/32", "146339"}, + {"2602:feda:af3::/48", "131477"}, + {"2607:fd78:102::/37", "26677"}, + {"2804:4d3c:a10::/42", "267420"}, + {"2a01:6a40:1::/48", "30720"}, + {"2001:559:8703::/48", "33651"}, + {"2001:c38:9010::/47", "9931"}, + {"2001:4430:5310::/34", "17853"}, + {"2604:bc0::/48", "8100"}, + {"2607:5100::/28", "36734"}, + {"2405:9800:b811::/44", "45430"}, + {"2804:1558::/32", "263385"}, + {"2a01:5043:2efd::/48", "202196"}, + {"2a01:9dc0:beef::/48", "30361"}, + {"2a02:26f7:eb49::/46", "20940"}, + {"2001:250:23e::/48", "133111"}, + {"240a:a826::/32", "144736"}, + {"2605:de40::/35", "397553"}, + {"2a0b:8e40::/29", "51571"}, + {"2a02:970:1354::/40", "44002"}, + {"2a06:600::/29", "200742"}, + {"2001:250:fe02::/39", "23910"}, + {"2a0f:5707:aac0::/44", "48646"}, + {"2001:44b8:405d::/48", "4739"}, + {"2804:14c:b100::/40", "28573"}, + {"2a0c:67c0::/29", "29262"}, + {"2001:559:526::/48", "7016"}, + {"2001:67c:2904::/48", "212125"}, + {"2404:bf40:a681::/48", "2764"}, + {"2001:7fb:fe0a::/45", "12654"}, + {"2800:bf0:8284::/46", "27947"}, + {"2804:27b8::/32", "263918"}, + {"2806:310:22::/45", "16960"}, + {"2a0f:9400:7398::/48", "210815"}, + {"2804:41b8::/32", "267452"}, + {"2a03:3d80::/29", "13113"}, + {"2a0a:a042::/29", "12552"}, + {"2001:df1:b080::/48", "131373"}, + {"240e:44d:680::/41", "4134"}, + {"240e:473:ff01::/48", "140486"}, + {"240e:67d:8800::/38", "140330"}, + {"2600:2700::/28", "81"}, + {"2804:71ac::/32", "270804"}, + {"2a00:4800:1f0::/38", "8717"}, + {"2a03:5640:f000::/41", "16509"}, + {"2001:388:5071::/34", "7575"}, + {"2001:559:c099::/46", "7015"}, + {"2001:1248:56f6::/44", "11172"}, + {"2001:4200::/41", "2018"}, + {"240a:ae0f::/32", "146249"}, + {"2800:bf0:814b::/48", "52257"}, + {"2a04:4e40:6e00::/48", "54113"}, + {"2001:559:838b::/48", "33651"}, + {"2001:1248:55e6::/43", "11172"}, + {"2600:80d:a::/43", "6984"}, + {"2600:100a:f110::/36", "22394"}, + {"2620:13c:8000::/44", "27360"}, + {"2804:81c::/32", "262346"}, + {"2001:559:449::/48", "7016"}, + {"2001:41f0::/32", "33915"}, + {"2a00:1fa8::/32", "8818"}, + {"2a03:db80:4411::/46", "680"}, + {"2001:1248:55da::/42", "11172"}, + {"240e:3be:c800::/37", "4134"}, + {"2602:fcf8::/36", "7018"}, + {"2607:ffb0:3004::/44", "6327"}, + {"240e:950::/36", "137693"}, + {"2605:6400:300::/48", "53667"}, + {"2804:35b8::/32", "266302"}, + {"2a01:9f60::/32", "34139"}, + {"2a02:26f7:df84::/48", "36183"}, + {"2c0f:ed98::/32", "328483"}, + {"2001:559:729::/46", "33659"}, + {"2001:b28:a70d::/64", "42765"}, + {"2001:1b50::/29", "1836"}, + {"2402:1b80:9000::/33", "63956"}, + {"240e:44d:7a00::/42", "140345"}, + {"2604:f940::/45", "397134"}, + {"2606:2800:506b::/48", "14153"}, + {"2607:4580::/32", "395173"}, + {"2806:2f0:2042::/48", "17072"}, + {"2409:8904:8e90::/39", "24547"}, + {"2409:8959:cf54::/30", "56040"}, + {"2606:4700:7000::/48", "13335"}, + {"2a01:5b8::/29", "16333"}, + {"2a02:26f7:e885::/46", "20940"}, + {"240a:a325::/32", "143455"}, + {"2806:230:1015::/48", "11888"}, + {"2a02:26f7:d040::/48", "36183"}, + {"2800:484:3b00::/33", "14080"}, + {"2a00:f70::/32", "30962"}, + {"2a02:214d:f000::/36", "1241"}, + {"2001:559:3f1::/48", "33657"}, + {"2001:4408:4d09::/35", "4758"}, + {"2400:0:860::/44", "4766"}, + {"240e:90d:a000::/36", "137688"}, + {"2a07:1440::/29", "203293"}, + {"2a09:19c0:8000::/48", "56335"}, + {"2a09:5080::/48", "42652"}, + {"2001:559:c2ee::/48", "33287"}, + {"2001:1248:964f::/43", "11172"}, + {"2a0d:2580::/47", "213262"}, + {"2409:8a50:f00::/35", "56047"}, + {"2804:785c::/32", "271237"}, + {"2a0f:b140::/29", "50067"}, + {"2a10:dac0:100::/48", "50399"}, + {"2001:1a11:83::/48", "8781"}, + {"2402:e280:2000::/39", "134674"}, + {"2804:11d4::/37", "263442"}, + {"2804:189c::/32", "61943"}, + {"2806:2ee::/32", "265539"}, + {"2a00:d30:16::/48", "202024"}, + {"2a00:a600::/32", "56595"}, + {"2001:438:fffd:6c::/64", "7181"}, + {"2001:df6:fd80::/48", "137531"}, + {"2001:250:1827::/38", "23910"}, + {"2400:5460:8::/46", "135177"}, + {"2408:8256:2d6a::/48", "17816"}, + {"2604:d600:1277::/40", "32098"}, + {"2620:11f:d00c::/46", "393941"}, + {"2804:532c::/32", "268568"}, + {"2804:77f0::/32", "271209"}, + {"2a00:1188:11::/44", "8455"}, + {"2804:14c:3b00::/40", "28573"}, + {"2804:5b2c::/32", "268823"}, + {"2c0f:ef78:9::/48", "63293"}, + {"2001:fb0:109f:8011::/62", "7470"}, + {"2603:8080::/26", "11427"}, + {"2a0a:3840::/29", "39287"}, + {"2a0f:72c0::/29", "52031"}, + {"2402:e380:311::/48", "139058"}, + {"240a:adad::/32", "146151"}, + {"2803:7e00::/33", "28026"}, + {"2803:9810:2000::/48", "14593"}, + {"2804:1534::/32", "263377"}, + {"2001:559:27::/44", "7922"}, + {"2001:4408:6d00::/44", "55824"}, + {"2401:a480::/48", "1221"}, + {"2404:3d00:400a::/45", "21433"}, + {"240e:108:1102::/44", "4134"}, + {"2803:9800:9485::/41", "11664"}, + {"2a0e:d9c0::/29", "39287"}, + {"240a:ab79::/32", "145587"}, + {"2800:370:48::/48", "28006"}, + {"2800:8a0:b000::/36", "5722"}, + {"2804:7a60:200::/32", "271367"}, + {"2a02:26f7:db0c::/48", "36183"}, + {"2a02:6900:8808::/47", "43894"}, + {"2a0a:90c0:1055::/44", "205080"}, + {"2409:8055:306c::/48", "141425"}, + {"240a:acfb::/32", "145973"}, + {"2a02:26f7:d38a::/42", "20940"}, + {"2001:559:8145::/46", "7922"}, + {"2600:9000:2091::/44", "16509"}, + {"2620:74:a5::/46", "7342"}, + {"2800:484:100::/38", "14080"}, + {"2804:3adc::/32", "266114"}, + {"2a06:1287:330d::/48", "208753"}, + {"2408:8956:3700::/40", "17816"}, + {"2409:802e:2902::/48", "9808"}, + {"240e:96b:6015::/46", "140371"}, + {"2a00:d70::/32", "29097"}, + {"2001:df0:270::/48", "9836"}, + {"2401:c240:2100::/33", "132847"}, + {"2405:a900::/32", "55992"}, + {"2600:1408:21::/46", "20940"}, + {"2605:a7c0:100::/48", "14618"}, + {"2620:4d:4020::/48", "62597"}, + {"2804:82e0::/32", "272162"}, + {"2a04:de80::/29", "201952"}, + {"2001:559:847a::/48", "33657"}, + {"2602:ffc5:500::/40", "26548"}, + {"2a02:26f7:cd88::/48", "36183"}, + {"2a02:2698:a002::/48", "31483"}, + {"2a02:26f7:dbc5::/46", "20940"}, + {"2a02:45c0:18::/32", "59675"}, + {"2a0a:6040:ac96::/48", "211954"}, + {"2a0b:4880::/46", "48614"}, + {"2001:1248:4400::/42", "11172"}, + {"2804:4c14:fa01::/39", "267348"}, + {"2408:80ea:4000::/34", "17816"}, + {"2a02:26f7:f3c8::/48", "36183"}, + {"2403:6b00:2000::/48", "58562"}, + {"2602:80b:5000::/47", "18792"}, + {"2a09:bac0:34::/47", "13335"}, + {"2a0c:b641:1d0::/48", "211227"}, + {"2001:678:6e0::/46", "202329"}, + {"2001:67c:638::/48", "60059"}, + {"2408:8456:de10::/42", "134543"}, + {"2a04:4e40:1640::/44", "54113"}, + {"2a07:c9c0::/29", "59659"}, + {"2a0f:fb80::/29", "60262"}, + {"240e:45c:3900::/40", "140528"}, + {"2620:171:f2::/47", "715"}, + {"2405:9000:80::/48", "17719"}, + {"2406:840:ece0::/44", "213215"}, + {"2406:3000:11:101b::/50", "4657"}, + {"2406:57c0:244::/46", "134672"}, + {"2409:8c20:5224::/37", "56046"}, + {"240a:ad55::/32", "146063"}, + {"2600:140f:2401::/39", "20940"}, + {"2603:9033::/32", "33363"}, + {"2605:a401:8039::/41", "33363"}, + {"2a02:928::/43", "34108"}, + {"2a09:bd00:ffc9::/48", "204582"}, + {"2403:6c0:137::/48", "137366"}, + {"2804:2084::/32", "264496"}, + {"2a02:26f7:d509::/46", "20940"}, + {"2001:250:641a::/42", "24367"}, + {"2402:540::/47", "132996"}, + {"240a:a6c2::/32", "144380"}, + {"2602:fd50:200::/40", "207609"}, + {"2801:1d:e800::/48", "271918"}, + {"2a02:2e02:2060::/39", "12479"}, + {"2400:c180:20::/47", "132513"}, + {"2a02:26f7:e9c8::/48", "36183"}, + {"2a02:2ca0::/32", "43350"}, + {"2a06:c8c0::/30", "203623"}, + {"2406:4580::/32", "59123"}, + {"2600:d400::/31", "1403"}, + {"2803:efc0:1::/32", "266664"}, + {"2001:dc8:2003::/48", "131123"}, + {"2600:1012:b0f0::/44", "22394"}, + {"2600:1408:4400::/48", "35994"}, + {"2800:160:1185::/44", "14259"}, + {"2804:1d04::/45", "61689"}, + {"2804:38b0::/38", "266494"}, + {"2804:7c90::/32", "271504"}, + {"2a0e:dd40::/32", "397735"}, + {"2a10:38c0::/29", "204790"}, + {"240c:f:2::/32", "45275"}, + {"240e:438:a440::/38", "4134"}, + {"2605:a900:3005::/48", "55088"}, + {"2a03:b100::/32", "15991"}, + {"2001:559:c28c::/47", "33491"}, + {"2001:4288:8008::/48", "36903"}, + {"240a:aaa4::/32", "145374"}, + {"2a0e:b107:9c0::/44", "213171"}, + {"2001:4488:2001::/45", "7713"}, + {"240a:ab64::/32", "145566"}, + {"240e:966:d600::/34", "4134"}, + {"2803:9800:a0a2::/37", "11664"}, + {"2804:a14:8400::/33", "262342"}, + {"2a11:2307::/37", "209209"}, + {"2001:559:492::/47", "7922"}, + {"2a03:c780::/32", "29672"}, + {"2001:559:482::/48", "33650"}, + {"2001:67c:2c0::/48", "49014"}, + {"2405:9800:bc81::/38", "45430"}, + {"2607:f00::/32", "5704"}, + {"2a02:26f7:dd45::/46", "20940"}, + {"2a04:a140::/32", "62217"}, + {"2001:67c:2724::/48", "211696"}, + {"240a:ae7b::/32", "146357"}, + {"2804:db0:184::/32", "52862"}, + {"2a06:e881:6209::/48", "7489"}, + {"2a0a:e5c0:303::/45", "207996"}, + {"2001:559:8360::/47", "7922"}, + {"2408:8456:1e00::/42", "17622"}, + {"2408:8459:4ec0::/35", "17816"}, + {"2600:6c38:b0c::/47", "20115"}, + {"2804:e30:1c00::/38", "11338"}, + {"2a02:27f8::/32", "42755"}, + {"2001:579:b1c4::/38", "22773"}, + {"2402:8100:3100::/40", "55644"}, + {"2409:8070:30ee::/48", "140105"}, + {"240a:a4b9::/32", "143859"}, + {"2605:9000::/32", "10929"}, + {"2a02:26f7:e005::/46", "20940"}, + {"240a:a37b::/32", "143541"}, + {"2a0a:23c0::/29", "39730"}, + {"2001:67c:580::/48", "12703"}, + {"2001:67c:1388::/48", "13030"}, + {"2602:807:6000::/46", "53978"}, + {"2606:a600:5::/46", "23005"}, + {"2804:1cd0::/32", "61677"}, + {"2001:559:c3fe::/48", "33659"}, + {"2605:de00::/40", "30083"}, + {"2001:559:8487::/48", "33287"}, + {"2409:8055:11::/45", "56040"}, + {"2804:2050:6a8c::/35", "264485"}, + {"2001:67c:2f74::/48", "198992"}, + {"2607:ff28:b017::/42", "62904"}, + {"2806:2f0:4243::/42", "17072"}, + {"2c0f:f6d0:b::/43", "327687"}, + {"2001:559:c0f3::/45", "7922"}, + {"2001:1990::/32", "5693"}, + {"2605:640f:e511::/46", "53667"}, + {"2800:484:700::/36", "14080"}, + {"2606:6680:29::/48", "12129"}, + {"2a00:ab40:4001::/35", "41798"}, + {"2a03:e581:5::/29", "49282"}, + {"2409:8055:45::/44", "56040"}, + {"2600:9000:2381::/48", "16509"}, + {"2804:4a30::/32", "267223"}, + {"2804:52dc::/32", "268546"}, + {"2a00:8647::/32", "31056"}, + {"2a02:26f7:f40d::/42", "20940"}, + {"2402:800:9955::/42", "7552"}, + {"240a:a111::/32", "142923"}, + {"2605:2800:c301::/34", "6922"}, + {"2804:619c::/32", "269245"}, + {"2a00:ea0::/29", "202204"}, + {"2a02:26f7:cb49::/42", "20940"}, + {"2a02:26f7:f6fd::/46", "20940"}, + {"2a06:6540:2002::/48", "3356"}, + {"2001:4878:b027::/48", "12222"}, + {"2403:580:400::/36", "134715"}, + {"2600:1411:2::/34", "20940"}, + {"2602:fed2:7126::/48", "398325"}, + {"2804:3a8c::/32", "266095"}, + {"2804:7104::/32", "270762"}, + {"2a02:26f7:c940::/48", "36183"}, + {"2a02:26f7:d15c::/47", "36183"}, + {"2404:5e40:a::/32", "137703"}, + {"240a:acc6::/32", "145920"}, + {"2600:1003:b440::/42", "6167"}, + {"2600:6c38:640::/39", "20115"}, + {"2804:b18:9000::/33", "52941"}, + {"2a02:26f7:e0c4::/48", "36183"}, + {"2a02:6300:30::/48", "57801"}, + {"2001:fb0:1072::/45", "7470"}, + {"2402:4840::/32", "137329"}, + {"2600:1407:c00::/48", "35994"}, + {"2804:1304::/32", "263510"}, + {"2a0b:8f00::/29", "33988"}, + {"2001:559:8120::/48", "19231"}, + {"240e:5e:10b0::/44", "140318"}, + {"2600:6c38:266::/43", "20115"}, + {"2602:fe19:4003::/45", "26073"}, + {"2610:88:223::/32", "14037"}, + {"2a02:26f7:bc08::/48", "36183"}, + {"2a07:af00::/29", "202625"}, + {"2001:559:8658::/48", "7015"}, + {"2001:da8:241::/46", "24350"}, + {"2409:8753:100::/38", "56047"}, + {"2409:8d5a:608::/32", "56040"}, + {"2804:37c4::/32", "266435"}, + {"2806:2f0:9543::/42", "17072"}, + {"2406:3003:1016::/42", "55430"}, + {"2602:fc5d:10::/44", "399866"}, + {"2001:1938:3000::/45", "33438"}, + {"2402:4000:b281::/36", "18001"}, + {"2606:a000:1800::/34", "11426"}, + {"2610:20:8800::/46", "3477"}, + {"2a00:4cc0::/32", "57664"}, + {"2a02:4b00::/29", "50168"}, + {"2a0c:2540::/29", "34820"}, + {"2001:559:852d::/48", "33662"}, + {"2001:67c:2c28::/48", "57118"}, + {"2409:8924:3d00::/33", "56046"}, + {"2806:2a0:11::/45", "28548"}, + {"2001:559:7f2::/48", "33489"}, + {"2001:1a11:1f::/42", "8781"}, + {"2409:8c21::/29", "9808"}, + {"2a0f:8640::/32", "25682"}, + {"2001:559:242::/48", "7016"}, + {"240a:a270::/32", "143274"}, + {"240e:44d:6b00::/42", "140345"}, + {"2620:1d5:200::/37", "14773"}, + {"2a01:760::/32", "41622"}, + {"2a02:26f7:eacd::/42", "20940"}, + {"2a0f:7280::/48", "60781"}, + {"2402:f840::/47", "137883"}, + {"2a07:4b00::/29", "48813"}, + {"2a01:4f8::/31", "24940"}, + {"2a02:ff0:3a00::/40", "12735"}, + {"2001:1248:59c7::/43", "11172"}, + {"2001:4490:3fe4::/33", "9829"}, + {"2801:0:3b0::/48", "19429"}, + {"2804:1658::/35", "263283"}, + {"2a11:7c0::/29", "211084"}, + {"2001:13d2:5804::/34", "7303"}, + {"2001:44b8:405b::/48", "4739"}, + {"2409:8d15:a00::/35", "56044"}, + {"2a07:4ac0:2400::/40", "205881"}, + {"2001:559:c358::/48", "7016"}, + {"2408:8756:d000::/40", "134543"}, + {"2804:5364:6000::/35", "268581"}, + {"2806:106e:10::/48", "8151"}, + {"2a02:26f7:b6c0::/48", "36183"}, + {"2400:7400:70::/48", "23736"}, + {"2600:1406:7c01::/38", "20940"}, + {"2620:101:2005::/46", "16417"}, + {"2804:28e4:e815::/46", "28260"}, + {"2806:230:3013::/48", "11888"}, + {"2a0a:c380::/29", "50308"}, + {"2a0f:cc86::/31", "208861"}, + {"2406:3001:22:2::/60", "4657"}, + {"2409:8904:6240::/42", "24547"}, + {"240a:a729::/32", "144483"}, + {"2606:c00:32::/48", "10126"}, + {"2804:7894::/32", "271252"}, + {"2a02:26f7:e4c5::/46", "20940"}, + {"2409:8914:ba00::/37", "56044"}, + {"2804:1d04:402::/36", "61689"}, + {"2a11:5d40::/29", "204790"}, + {"2405:f080:820::/40", "136907"}, + {"240e:44d:d00::/41", "140345"}, + {"2604:6400:4520::/38", "29974"}, + {"2605:52c0:1::/46", "54574"}, + {"2a01:a280:6::/48", "35000"}, + {"2a0d:8800::/29", "205624"}, + {"2001:dc7:fff2::/44", "24151"}, + {"2404:6980:32::/48", "58431"}, + {"2409:8c85:7c01::/32", "9808"}, + {"2800:bf0:82d0::/46", "52257"}, + {"2804:7898:5000::/48", "271253"}, + {"2a09:a080::/48", "44364"}, + {"2001:559:8486::/48", "33657"}, + {"2001:938:400c::/42", "8437"}, + {"2a01:e09::/32", "29447"}, + {"2400:8000:5::/46", "4800"}, + {"2404:b300:23::/48", "59318"}, + {"2803:4040::/32", "10834"}, + {"2804:236c::/32", "264161"}, + {"2a03:a480::/32", "59469"}, + {"2405:c840::/32", "140072"}, + {"2804:14d:1686::/44", "28573"}, + {"2804:1f0a:8000::/34", "10938"}, + {"2a00:1e08::/32", "196997"}, + {"2a00:4802:e00::/42", "13124"}, + {"2407:3780::/32", "132960"}, + {"2408:8957:9200::/40", "17622"}, + {"2409:804e:900::/35", "9808"}, + {"240a:ae79::/32", "146355"}, + {"240e:947:1000::/46", "137690"}, + {"2a02:2e02:8ab0::/41", "12479"}, + {"2a0b:6b86:f30::/40", "211387"}, + {"2401:5300::/32", "45680"}, + {"240e:67c:8800::/38", "140330"}, + {"240e:97a:2d00::/48", "23650"}, + {"2606:1680::/32", "63414"}, + {"2620:149:551::/42", "714"}, + {"2804:c84::/47", "52720"}, + {"2a01:450::/32", "6908"}, + {"2a02:2399:101::/48", "9166"}, + {"2a03:f80:ad15::/48", "57169"}, + {"2409:8904:9590::/38", "24547"}, + {"2804:2a54::/32", "264069"}, + {"2001:250:2e00::/48", "138442"}, + {"2001:559:72d::/48", "33659"}, + {"2407:a300::/32", "132497"}, + {"2a00:1ca8:56::/48", "211623"}, + {"2a0b:4340:70::/48", "205618"}, + {"2001:559:8245::/48", "33657"}, + {"2001:19e8:8ab0::/48", "4046"}, + {"2800:200:f181::/41", "12252"}, + {"2a04:4e40:8e00::/48", "54113"}, + {"2600:1408:c00::/48", "35994"}, + {"2604:f400:51::/48", "29930"}, + {"2a03:5640::/32", "2906"}, + {"2001:4d0:241b::/48", "22767"}, + {"2001:500:85::/48", "53459"}, + {"2001:559:31d::/46", "7016"}, + {"2001:df2:7700::/48", "45240"}, + {"2605:b380::/32", "13333"}, + {"2a03:6947:1100::/37", "61266"}, + {"2a0f:5c47:3e8::/48", "206499"}, + {"2400:1700::/39", "4628"}, + {"2403:1140::/32", "135719"}, + {"240a:ae09::/32", "146243"}, + {"2607:9e00::/35", "30536"}, + {"2a00:1840::/32", "12333"}, + {"2a0f:9441:42::/47", "62240"}, + {"2a10:80c0::/48", "211331"}, + {"2001:678:848::/48", "8873"}, + {"2801:1fc:20::/48", "27951"}, + {"2804:67e8::/32", "269658"}, + {"2a00:db20::/32", "62429"}, + {"2001:559:c0a4::/48", "33491"}, + {"2001:67c:2a84::/48", "204847"}, + {"2a02:26f7:ca85::/46", "20940"}, + {"2a02:26f7:e0c1::/46", "20940"}, + {"2a10:8400::/29", "203206"}, + {"2001:67c:530::/48", "42295"}, + {"2001:df4:6c00::/48", "133802"}, + {"2409:8080:2a70::/40", "9808"}, + {"2604:edc0::/32", "40764"}, + {"2607:f358:25::/48", "398826"}, + {"2804:74d4::/32", "271006"}, + {"240e:804:400::/30", "4134"}, + {"2804:19c8:1010::/34", "61818"}, + {"2a09:bac0:40::/48", "13335"}, + {"2401:d800:2600::/42", "7552"}, + {"240a:aacc::/32", "145414"}, + {"240e:6b9:2000::/36", "140312"}, + {"2804:cb0:d308::/36", "52742"}, + {"2a0c:90c0::/29", "197637"}, + {"2a02:26f0:4b00::/48", "35994"}, + {"2a04:940:1601::/29", "51407"}, + {"2a10:14c0::/29", "1239"}, + {"2001:468:509::/40", "14041"}, + {"2803:d080::/32", "27960"}, + {"2804:20c0::/32", "264512"}, + {"2a10:68c0::/29", "30633"}, + {"2001:1218::/33", "278"}, + {"2602:fba1:a00::/40", "60438"}, + {"2605:72c0:a::/48", "40401"}, + {"2806:2f0:4363::/40", "17072"}, + {"2a03:9d40:2000::/37", "41095"}, + {"2a10:6840::/29", "60781"}, + {"2610:48::/32", "557"}, + {"2620:171:66::/44", "42"}, + {"2803:2800::/33", "52368"}, + {"2804:2610::/32", "264321"}, + {"2a01:c50e:b900::/37", "12479"}, + {"2a02:878:a80e::/48", "42632"}, + {"2404:8d06:8000::/40", "133543"}, + {"2408:8957:ab00::/40", "17816"}, + {"2409:8924:5100::/38", "56046"}, + {"2600:100e:9f20::/34", "6167"}, + {"2804:7ac8::/32", "271392"}, + {"2a01:cb20:d000::/34", "3215"}, + {"2a06:a005:2d0::/42", "210542"}, + {"2602:fd7d::/39", "16925"}, + {"2a02:2668:7900::/32", "16345"}, + {"2a03:f8c0::/32", "201973"}, + {"2001:cf8:6::/36", "9619"}, + {"2001:1248:9601::/43", "11172"}, + {"240a:a4bc::/32", "143862"}, + {"2602:fcd3:300::/48", "212934"}, + {"2a03:4400::/29", "28999"}, + {"2a0a:dc05::/30", "51262"}, + {"2001:559:527::/44", "7015"}, + {"2401:d800:dd12::/40", "7552"}, + {"2402:800:9dfe::/38", "7552"}, + {"2405:ba00:8000::/48", "23885"}, + {"2600:1004:f100::/44", "6167"}, + {"2600:1401:6002::/32", "20940"}, + {"2a01:7640:400::/48", "60708"}, + {"2a06:d9c0::/29", "60059"}, + {"2001:df7:480c::/48", "131893"}, + {"2001:4200:ab10::/33", "2018"}, + {"2604:880:4f::/43", "29802"}, + {"2800:120::/45", "27843"}, + {"2a02:2230:1200::/39", "25467"}, + {"2a02:26f7:f185::/46", "20940"}, + {"240e:b6::/36", "58563"}, + {"2607:f808::/32", "3464"}, + {"2620:123:f000::/48", "20127"}, + {"2620:138:7000::/44", "14747"}, + {"2801:126::/44", "262589"}, + {"2a00:ab60::/29", "60522"}, + {"2001:4c8:1008::/48", "25864"}, + {"2403:8c0::/32", "137406"}, + {"2405:204:9000::/33", "55836"}, + {"2620:b4::/48", "1341"}, + {"2a02:100e:6b80::/48", "212587"}, + {"2a02:26f7:cb40::/48", "36183"}, + {"2001:559:8712::/47", "7725"}, + {"2001:559:c0c5::/48", "33491"}, + {"2408:8957:9400::/40", "17622"}, + {"240a:aa5d::/32", "145303"}, + {"2610::/32", "11084"}, + {"2620:12e:4001::/48", "36741"}, + {"2804:30f8:c00::/32", "264984"}, + {"2001:840::/29", "2116"}, + {"2402:4000::/35", "18001"}, + {"240e:3b9:7800::/39", "4134"}, + {"2804:14d:148a::/45", "28573"}, + {"2804:5cdc::/32", "268935"}, + {"2c0e::/37", "24863"}, + {"2001:44b8:4044::/48", "7545"}, + {"2620:0:860::/46", "14907"}, + {"2a09:ccc0::/29", "209222"}, + {"240a:ab9a::/32", "145620"}, + {"2a00:1a40::/32", "33923"}, + {"2a09:0:12::/48", "60144"}, + {"2a0b:f240::/29", "202509"}, + {"2001:da8:239::/48", "23910"}, + {"2402:800:5b55::/42", "7552"}, + {"2408:8456:c640::/39", "17816"}, + {"2804:2a7c::/32", "264075"}, + {"2806:109f:7::/44", "8151"}, + {"2001:559:c045::/46", "7015"}, + {"2403:8300:e04::/44", "204527"}, + {"2406:2000:1a0::/46", "10229"}, + {"240a:a1c0::/32", "143098"}, + {"240a:ad4e::/32", "146056"}, + {"2602:fcda::/36", "54142"}, + {"2a02:26f7:bdc9::/46", "20940"}, + {"2c0f:fdf0::/32", "37150"}, + {"2001:67c:1213::/48", "47445"}, + {"2402:800:fbd0::/37", "7552"}, + {"2407:8800::/32", "7545"}, + {"2407:cdc0:e006::/48", "38136"}, + {"2409:8050:3900::/32", "9808"}, + {"2607:f738:700::/41", "17184"}, + {"2804:84d0::/32", "272542"}, + {"2a0a:4a40:2270::/46", "200280"}, + {"240e:3b1:3e00::/33", "140308"}, + {"2600:1417:801::/38", "20940"}, + {"2a03:2887:ff0d::/48", "35819"}, + {"2a06:eb00::/46", "203462"}, + {"2001:44b8:4069::/48", "4739"}, + {"240a:a55b::/32", "144021"}, + {"2600:805:148::/48", "12234"}, + {"2602:febe::/38", "30405"}, + {"2a0c:a9c7:247::/48", "45018"}, + {"2001:67c:2b50::/48", "44865"}, + {"2401:4900:948::/40", "45609"}, + {"2401:d800:e62::/40", "7552"}, + {"2620:124:6040::/43", "22918"}, + {"2804:8424:4100::/32", "272242"}, + {"2a05:5244::/30", "198722"}, + {"2804:4594::/32", "266936"}, + {"2a00:1288:efc4::/48", "14778"}, + {"2001:559:7dd::/46", "7922"}, + {"2001:78d::/30", "6893"}, + {"240e:944:3000::/36", "58541"}, + {"2600:1806:320::/48", "16552"}, + {"2606:7c00::/32", "46103"}, + {"2001:df7:5080::/48", "137655"}, + {"2403:9800:7700::/40", "4648"}, + {"2604:d600:162d::/46", "32098"}, + {"2620:2d:a000::/48", "27282"}, + {"2800:160:1630::/46", "14259"}, + {"2804:4f98::/32", "268337"}, + {"2804:7248::/32", "270844"}, + {"2001:67c:434::/48", "8422"}, + {"2001:67c:2e8c::/48", "8881"}, + {"2406:daa0:f040::/44", "16509"}, + {"240a:ad63::/32", "146077"}, + {"2600:3000::/35", "13649"}, + {"2001:559:c15c::/48", "7015"}, + {"2001:67c:2464::/48", "39022"}, + {"2400:36a0:3d::/46", "63991"}, + {"2400:ac40:ab0::/39", "136255"}, + {"240e:3b2:9200::/36", "140317"}, + {"2a02:2098::/29", "47314"}, + {"240a:a588::/32", "144066"}, + {"2a0c:8dc7::/32", "43260"}, + {"2600:1480:2800::/48", "21342"}, + {"2a0b:11c0:30::/45", "198682"}, + {"2001:559:529::/48", "7922"}, + {"2001:559:c4e7::/48", "33491"}, + {"2001:df0:1400::/48", "64010"}, + {"2402:800:b980::/42", "7552"}, + {"240a:a458::/32", "143762"}, + {"2804:7094::/33", "270735"}, + {"2404:c140:2596::/48", "131668"}, + {"2804:72b0::/32", "270869"}, + {"2001:559:809b::/48", "33491"}, + {"240e:3b5:8200::/35", "140316"}, + {"2607:fef8:ffe0::/46", "13750"}, + {"2a01:4f00:2234::/32", "35047"}, + {"2a03:4d22::/32", "59397"}, + {"2a07:7800::/47", "48254"}, + {"2403:0:206::/47", "4755"}, + {"240a:a7fc::/32", "144694"}, + {"240a:adea::/32", "146212"}, + {"2600:140b:9401::/38", "20940"}, + {"2001:559:837e::/48", "33491"}, + {"2401:2900:3f00::/40", "23679"}, + {"2800:160:1df9::/38", "14259"}, + {"2804:4c94::/32", "267379"}, + {"2a10:1900::/29", "208669"}, + {"2402:3280::/32", "134116"}, + {"2406:69c0:2000::/36", "132420"}, + {"2804:8050::/32", "271743"}, + {"2401:a400:c500::/34", "7477"}, + {"2409:8c14:a000::/36", "9808"}, + {"2804:3124::/32", "264996"}, + {"2a02:2f0c:d000:15::/58", "8708"}, + {"2a06:f980::/29", "174"}, + {"2604:8f00::/32", "17223"}, + {"2001:678:18::/48", "42385"}, + {"2600:1400::/45", "20940"}, + {"2001:fd0:2201::/39", "10029"}, + {"2001:4490:e000::/46", "9829"}, + {"2600:1003:f010::/40", "22394"}, + {"2620:32::/48", "4468"}, + {"2803:800::/45", "25607"}, + {"2803:4180:b00::/32", "263238"}, + {"2a03:5640:f144::/40", "2906"}, + {"2001:1248:883c::/46", "11172"}, + {"2402:9d80:a51::/42", "131429"}, + {"2403:9800:7f1f::/32", "4648"}, + {"2801:80:36c0::/48", "269209"}, + {"2001:470:150::/45", "6939"}, + {"2408:8459:4850::/38", "17816"}, + {"2620:144::/36", "53692"}, + {"2a00:9460::/31", "47631"}, + {"2a02:26f7:ee8d::/42", "20940"}, + {"2406:c500:ffd8::/48", "135421"}, + {"2409:8d15:1800::/39", "56044"}, + {"2a01:cb20:5000::/32", "3215"}, + {"2a02:bf0:2000::/33", "25106"}, + {"2a02:2698:8400::/38", "39028"}, + {"2a03:ce80::/32", "47562"}, + {"2a09:c2c0::/29", "31736"}, + {"2408:8459:a650::/36", "17816"}, + {"240c:ca0d::/27", "24363"}, + {"2804:480:1000::/40", "23002"}, + {"2a01:8840:1bd::/48", "13810"}, + {"2001:13c7:6007::/48", "52294"}, + {"2001:4878:c1e0::/44", "35994"}, + {"2604:eb00::/38", "19212"}, + {"2803:80::/35", "61317"}, + {"2804:6f4c:4000::/34", "270651"}, + {"2804:7b4c::/33", "271423"}, + {"2a07:e343::/32", "5511"}, + {"2001:67c:1798::/48", "51744"}, + {"2607:ffc8:1:2::/33", "17356"}, + {"2804:f50::/32", "263579"}, + {"2a0c:7e43:43be::/48", "20473"}, + {"2a0e:8440::/29", "47373"}, + {"2a0e:b107:272::/48", "210041"}, + {"2001:559:82ce::/48", "7922"}, + {"2408:8956:4f00::/40", "17816"}, + {"240a:a261::/32", "143259"}, + {"240a:ada5::/32", "146143"}, + {"2604:61c0:9001::/33", "29831"}, + {"2607:f250:d004::/48", "7046"}, + {"2620:0:930::/48", "1734"}, + {"2a02:26f7:b808::/48", "36183"}, + {"2a03:5e80::/32", "3233"}, + {"240a:409a:c000::/35", "58834"}, + {"2804:8688::/32", "272650"}, + {"2a00:4802:5100::/44", "13124"}, + {"2a02:7c40::/33", "5539"}, + {"2c0f:eea8:8000::/35", "39356"}, + {"2001:502:be98::/48", "7342"}, + {"2001:559:11f::/48", "7922"}, + {"2409:8959:c944::/43", "9808"}, + {"2a03:c800::/32", "56993"}, + {"2a0a:e140::/29", "16181"}, + {"2a0c:b641:140::/44", "211448"}, + {"2c0f:f2a8::/32", "327960"}, + {"2001:18f0::/32", "12059"}, + {"2800:5f0:2044::/35", "22724"}, + {"2a02:26f7:eac5::/46", "20940"}, + {"2001:67c:1870::/48", "15830"}, + {"2001:1568::/32", "39790"}, + {"2001:67c:10b0::/48", "31317"}, + {"2404:63c0:30::/44", "131645"}, + {"2a01:308::/32", "42009"}, + {"2a01:a280:100::/48", "58191"}, + {"240e:44d:8080::/27", "4134"}, + {"2a02:26f7:e849::/46", "20940"}, + {"2001:1900:2284::/48", "16491"}, + {"2401:4900:5550::/44", "45609"}, + {"2406:9c40:2002::/32", "55366"}, + {"2408:8456:e00::/42", "17622"}, + {"240a:aac6::/32", "145408"}, + {"2801:80:d90::/48", "264471"}, + {"2001:ee0:9e40::/39", "45899"}, + {"2001:4130:50f2::/48", "24725"}, + {"2403:1940:200::/48", "137935"}, + {"2600:5800:f78a::/48", "11955"}, + {"2800:ba0:2::/48", "263812"}, + {"2a0b:1ec0::/32", "205769"}, + {"2001:559:52d::/48", "7725"}, + {"2600:6c38:ea::/39", "20115"}, + {"2803:a0a0:901::/48", "269799"}, + {"2001:559:176::/47", "7015"}, + {"2804:1a24::/32", "61839"}, + {"2a02:1798::/29", "24637"}, + {"2a02:54c0::/29", "20811"}, + {"2001:250:586c::/43", "24363"}, + {"240a:a572::/32", "144044"}, + {"2605:73c0:2000::/32", "10583"}, + {"2a02:26f0:4901::/40", "20940"}, + {"2a05:19c0::/47", "59800"}, + {"2a0e:97c0:4d0::/48", "211024"}, + {"2a10:4d80::/29", "203447"}, + {"2001:694::/48", "207969"}, + {"2001:6b0::/46", "1653"}, + {"240a:a943::/32", "145021"}, + {"2804:38:1000::/39", "19089"}, + {"2a0e:97c3:74c::/48", "20473"}, + {"2001:da8:e80c::/48", "138373"}, + {"2001:1248:a53f::/41", "11172"}, + {"2620:171:2a::/45", "42"}, + {"2a00:7b00::/43", "12338"}, + {"2606:8700::/32", "7050"}, + {"2620:171:f7::/44", "42"}, + {"2a00:adc0:1b00::/32", "41655"}, + {"2a02:cb44::/32", "20546"}, + {"2a0c:47c0::/29", "18779"}, + {"2402:f800:cf01::/40", "7602"}, + {"240a:a480::/32", "143802"}, + {"240a:a553::/32", "144013"}, + {"2804:e94:740::/40", "262468"}, + {"2804:7210:100::/48", "270830"}, + {"2a02:26f7:edc4::/48", "36183"}, + {"2600:370f:7320::/41", "32261"}, + {"2607:fc58:1:64::/64", "13536"}, + {"2803:dba0::/32", "267767"}, + {"2001:de8:1::/48", "9498"}, + {"240a:aead::/32", "146407"}, + {"2602:ffa4::/36", "46886"}, + {"2a0a:3140:610::/44", "15532"}, + {"2a0a:7bc7::/32", "44066"}, + {"2a0b:6f80:200::/37", "211196"}, + {"2a0c:f280::/29", "204703"}, + {"2406:5ec0::/32", "141014"}, + {"2001:1398:276::/48", "52305"}, + {"2404:f780:8::/48", "136557"}, + {"240a:abf2::/32", "145708"}, + {"2604:cc00::/48", "53292"}, + {"2803:1b40::/32", "27843"}, + {"2804:6174::/32", "269235"}, + {"2001:16a2:c100::/43", "39891"}, + {"2401:b000::/32", "17971"}, + {"2600:1017:b830::/40", "6167"}, + {"2602:fe69:200::/39", "36369"}, + {"2a02:26f7:ce84::/48", "36183"}, + {"2a03:2880:f23b::/45", "32934"}, + {"2a0b:9700::/32", "8943"}, + {"2001:67c:24d0::/48", "51316"}, + {"2404:3d00:413f::/41", "21433"}, + {"2800:160:1426::/44", "14259"}, + {"2804:4660::/32", "266986"}, + {"2a00:1788::/32", "31167"}, + {"2a0d:f100::/32", "208449"}, + {"2001:559:814e::/48", "33652"}, + {"2401:1d40:f25::/35", "59019"}, + {"2408:8956:b300::/40", "17816"}, + {"2408:8a00:e000::/31", "9929"}, + {"2600:8807:89aa::/41", "22773"}, + {"2604:3700:1000::/34", "10973"}, + {"2804:3a34::/32", "262616"}, + {"2a01:6e80::/32", "47223"}, + {"240a:a416::/32", "143696"}, + {"2602:feb2::/41", "62492"}, + {"2804:67a0::/32", "269640"}, + {"2806:270::/32", "19373"}, + {"2a00:d2a0::/29", "15600"}, + {"2001:250:181b::/42", "138441"}, + {"2001:559:1ae::/48", "7015"}, + {"2606:7100:3101::/32", "21581"}, + {"2607:ff50::/32", "53264"}, + {"2403:1240::/32", "24279"}, + {"2604:8b80:a::/48", "55106"}, + {"2a02:26f7:d0c4::/48", "36183"}, + {"2001:559:123::/48", "33667"}, + {"2001:67c:2250::/48", "33895"}, + {"2409:8087:1a00::/40", "132525"}, + {"2804:14c:6587::/44", "28573"}, + {"2a02:5820::/32", "201939"}, + {"2a05:2180::/29", "20661"}, + {"2a0c:8a80::/29", "13113"}, + {"2001:550:2302::/47", "174"}, + {"240a:aba3::/32", "145629"}, + {"2804:3b0:830d::/35", "53062"}, + {"2804:2b14::/32", "265133"}, + {"2001:40a8::/32", "12400"}, + {"240a:a5e8::/32", "144162"}, + {"2804:c00:a300::/33", "52655"}, + {"2804:6c94::/32", "270478"}, + {"2a00:42c0::/32", "29608"}, + {"2a0b:3180::/29", "198333"}, + {"2409:8904:c9a0::/38", "24547"}, + {"240e:964:eb00::/40", "133776"}, + {"2606:2800:700a::/45", "15133"}, + {"2a03:9d40:2600::/36", "41095"}, + {"2001:44b8:30e1::/45", "4739"}, + {"2404:2440:beef::/48", "138521"}, + {"2600:40f0:140::/44", "3369"}, + {"2804:37f0:4900::/35", "266445"}, + {"2a0f:5300::/48", "208230"}, + {"2001:418:1c01:2::/34", "2914"}, + {"2001:df2:ca00::/48", "135905"}, + {"2001:13b0:800d::/46", "267790"}, + {"2408:8459:ac30::/41", "17622"}, + {"2606:a2c0:1::/46", "396362"}, + {"2a07:a240::/29", "6786"}, + {"2408:8956:9700::/40", "17816"}, + {"2409:896a:4400::/39", "9808"}, + {"2603:c023:8000::/35", "31898"}, + {"2a06:5600:28f8::/48", "50297"}, + {"2001:678:44::/48", "25354"}, + {"2001:1838:6005::/32", "23352"}, + {"2400:af80::/32", "4693"}, + {"2604:cc00:1a::/48", "53292"}, + {"2a02:188:5109::/37", "31027"}, + {"2401:4900:51c0::/42", "45609"}, + {"2804:6ad0::/32", "270360"}, + {"2806:2f0:61a1::/46", "17072"}, + {"2402:e380:127::/44", "139073"}, + {"2404:c2c0:280::/44", "135629"}, + {"2404:3500::/32", "58627"}, + {"2605:2400::/38", "3361"}, + {"2804:2c64::/32", "265215"}, + {"2804:2f94::/32", "264900"}, + {"2a0a:2f80::/32", "174"}, + {"240a:a746::/32", "144512"}, + {"2605:a401:8354::/42", "33363"}, + {"2804:2014::/32", "264463"}, + {"2804:7350::/32", "270907"}, + {"2a03:ada0::/32", "44404"}, + {"2a07:fc0::/29", "203322"}, + {"2a10:d780:cccd::/34", "211997"}, + {"2600:8807:c800::/35", "22773"}, + {"2607:fad0:1000::/34", "32244"}, + {"2a00:1528:101::/32", "6696"}, + {"2a02:730::/48", "29278"}, + {"2001:418:1401:98::/64", "3949"}, + {"240e:e9:6000::/37", "134756"}, + {"2800:300:9000::/41", "27651"}, + {"2a00:ad87:c00::/48", "31027"}, + {"2a01:9640::/32", "47727"}, + {"2a02:26f7:da48::/48", "36183"}, + {"2001:67c:28f4::/48", "198827"}, + {"240a:ae23::/32", "146269"}, + {"2600:6c21:608::/47", "20115"}, + {"2604:4440::/32", "396139"}, + {"2a03:d000:4000::/36", "25159"}, + {"240e:3b7:1800::/34", "4134"}, + {"2a02:888:8054::/39", "47794"}, + {"2001:550:2606::/48", "174"}, + {"2001:dc7:ffc7::/43", "24151"}, + {"2001:4888:801f::/42", "22394"}, + {"2404:2c00::/32", "45170"}, + {"2a00:81a0::/29", "60804"}, + {"2a09:be47::/32", "209968"}, + {"2402:9500:b01::/37", "55720"}, + {"2a04:f500::/29", "33988"}, + {"2a0e:1bc4::/35", "208621"}, + {"2404:4a00:6000::/64", "55423"}, + {"2600:1007:d0d0::/34", "22394"}, + {"2604:9cc0:1::/48", "50131"}, + {"2a0e:b4c0::/29", "208420"}, + {"2001:579:cf08::/35", "22773"}, + {"2402:800:327f::/40", "7552"}, + {"240a:a878::/32", "144818"}, + {"2803:b4c0::/46", "264668"}, + {"2a01:5b0:20::/45", "8561"}, + {"2a02:26f7:88::/48", "36183"}, + {"2a02:26f7:ebc5::/46", "20940"}, + {"2a10:6480::/29", "204790"}, + {"240a:a849::/32", "144771"}, + {"240e:966:ca00::/39", "133776"}, + {"2600:80c:1200::/40", "23148"}, + {"2606:6200:1c00::/48", "54351"}, + {"2607:ffb0:4005::/46", "6327"}, + {"2a02:26f7:c904::/48", "36183"}, + {"2001:559:84cb::/45", "33657"}, + {"2001:13b0:d002::/48", "23031"}, + {"2605:36c0:1::/48", "29944"}, + {"2804:699c::/32", "270280"}, + {"240a:a5f3::/32", "144173"}, + {"2600:1006:b0f0::/44", "22394"}, + {"2605:de40:1005::/34", "397553"}, + {"2800:bf0:1a0::/45", "52257"}, + {"2803:d100:9280::/37", "52362"}, + {"2804:c48::/36", "52687"}, + {"2a00:6000::/32", "35012"}, + {"2a02:26f7:f308::/48", "36183"}, + {"2402:8100:39b0::/44", "55644"}, + {"2620:160:e740::/44", "4196"}, + {"2804:41b0:3d8::/32", "267450"}, + {"2804:6e3c::/32", "28572"}, + {"2a07:abc0::/29", "62000"}, + {"2a07:e480:100::/47", "202261"}, + {"2a0c:6080::/29", "200000"}, + {"2a0e:b500::/29", "208974"}, + {"2a0f:b1c0::/30", "35732"}, + {"2001:678:468::/48", "39431"}, + {"2001:da8:da8::/48", "24358"}, + {"2600:1404:c800::/48", "35994"}, + {"2607:6300::/32", "29804"}, + {"2804:2814::/32", "263939"}, + {"2806:230:1032::/48", "265594"}, + {"2a0f:2040::/29", "60262"}, + {"2001:df7:2080::/48", "142600"}, + {"2800:160:2453::/40", "14259"}, + {"2804:72e4:3001::/33", "270882"}, + {"2001:559:c37b::/48", "33667"}, + {"2001:b10::/35", "8256"}, + {"2404:ec:420::/39", "703"}, + {"2405:800:bfff::/48", "4817"}, + {"2620:11:70::/47", "3486"}, + {"2620:11b:e020::/44", "3549"}, + {"2806:230:1100::/46", "265594"}, + {"2a02:a50::/32", "20742"}, + {"2001:678:4b4::/48", "48395"}, + {"2001:44b8:2047::/48", "4739"}, + {"2404:bf40:e402::/47", "2764"}, + {"2800:68:34::/47", "61468"}, + {"2801:80:3e40::/48", "271396"}, + {"2a06:6200::/29", "21500"}, + {"2804:13c4::/32", "262825"}, + {"2a09:4c0:ae01::/40", "58057"}, + {"2a0c:e480::/29", "15623"}, + {"2a0d:c7c1::/32", "43959"}, + {"2a12:7280::/29", "16509"}, + {"2800:160:21e4::/38", "14259"}, + {"2804:341c::/32", "265436"}, + {"2804:41b4::/33", "267451"}, + {"2a02:ee80:4123::/44", "3573"}, + {"2a03:1600::/32", "34093"}, + {"2001:550:2b02::/37", "174"}, + {"2602:808:a001::/48", "16509"}, + {"2407:3880::/39", "133012"}, + {"2409:8028:3006::/41", "56041"}, + {"240a:a2d6::/32", "143376"}, + {"240e:1a:120::/44", "134756"}, + {"2804:14d:5cbd::/41", "28573"}, + {"2804:77d8::/32", "271203"}, + {"2804:75b4::/32", "271064"}, + {"2a00:6700::/48", "202753"}, + {"240a:a38c::/32", "143558"}, + {"2803:c860::/32", "267819"}, + {"2806:230:4018::/48", "265594"}, + {"2a04:4e40:1e10::/41", "54113"}, + {"2001:df1:c080::/48", "139739"}, + {"2405:2840::/48", "135951"}, + {"2600:1403:5c01::/34", "20940"}, + {"2800:160:1bc0::/44", "14259"}, + {"2001:e90::/32", "9622"}, + {"2602:feda:2a9::/46", "204185"}, + {"2804:6c34::/32", "270452"}, + {"2a02:26f0:c501::/38", "20940"}, + {"2a0c:9a40:8118::/46", "204438"}, + {"2001:250:817::/48", "138182"}, + {"2001:42d8:1001::/48", "29571"}, + {"2804:5100:3100::/32", "268424"}, + {"2a0e:fb41::/32", "206766"}, + {"2a0f:305::/30", "398559"}, + {"240a:a798::/32", "144594"}, + {"240e:44d:780::/41", "4134"}, + {"2a04:4e41:4::/43", "54113"}, + {"2001:559:8451::/48", "7015"}, + {"2408:840d:3600::/42", "17621"}, + {"2800:240::/32", "12956"}, + {"2403:9800:7f02::/45", "4771"}, + {"2408:8459:e230::/41", "17622"}, + {"2a02:26f0:1a01::/39", "20940"}, + {"2408:80f1::/44", "138421"}, + {"240a:a406::/32", "143680"}, + {"240e:3bc:7600::/39", "140313"}, + {"2603:c011:e000::/36", "31898"}, + {"2804:e30:2c00::/38", "11338"}, + {"2806:2f0:9be1::/46", "17072"}, + {"2a02:26f7:db8d::/42", "20940"}, + {"2a0f:5707:ab29::/48", "398646"}, + {"2600:1016:b1e0::/33", "6167"}, + {"2804:545c:9400::/33", "268645"}, + {"2a01:4020:31::/45", "25369"}, + {"2a0f:f240::/32", "13282"}, + {"2407:7400::/48", "9498"}, + {"2600:9000:107f::/40", "16509"}, + {"2605:ed40::/32", "31998"}, + {"2803:6ce0:b000::/33", "269909"}, + {"2804:e24:fff1::/44", "262417"}, + {"2806:2f0:32a3::/41", "17072"}, + {"2a00:8a03::/43", "28723"}, + {"2a0d:2d40::/32", "62075"}, + {"2001:559:149::/46", "33287"}, + {"2001:559:c111::/48", "20214"}, + {"2001:4288:302::/32", "6713"}, + {"2001:4490:d4c0::/46", "9829"}, + {"2408:8256:2d96::/48", "17816"}, + {"2620:133:d000::/40", "395746"}, + {"2804:1b50:c840::/34", "61719"}, + {"2a02:708::/32", "8741"}, + {"2a06:5e40:1::/48", "204101"}, + {"2a0c:b641:20a::/48", "209710"}, + {"240a:a3d2::/32", "143628"}, + {"2605:ec0::/48", "26272"}, + {"2001:559:845e::/48", "7016"}, + {"2001:559:c21e::/48", "7922"}, + {"2402:e240::/32", "55699"}, + {"2600:6c38:c2b::/45", "20115"}, + {"2604:abc0::/32", "64236"}, + {"2607:f8f8:1f00::/47", "50131"}, + {"2803:500::/32", "262168"}, + {"2804:2e8::/46", "262847"}, + {"2a04:e9c0::/29", "34768"}, + {"2a12:2000::/29", "204790"}, + {"2402:ef03:6001::/40", "7633"}, + {"2408:8662::/29", "4837"}, + {"2606:2080::/32", "11672"}, + {"2804:4c14::/32", "267348"}, + {"2001:559:c443::/45", "7015"}, + {"2402:e280:221f::/42", "134674"}, + {"2408:8957:f00::/40", "17816"}, + {"240e:978:500::/40", "131325"}, + {"2600:6c10:8a::/45", "20115"}, + {"2a02:26f7:ee88::/48", "36183"}, + {"2a02:de80::/29", "8595"}, + {"2001:ba0::/32", "8560"}, + {"2406:daa0:c0a0::/44", "16509"}, + {"2001:559:8533::/48", "7922"}, + {"2400:adc0:210::/47", "9541"}, + {"2804:4b0:3a0::/37", "262459"}, + {"2409:8924:100::/38", "56046"}, + {"240a:a0cb::/32", "142853"}, + {"2801:168:2::/48", "61554"}, + {"2c0f:3000::/32", "327903"}, + {"2001:559:85b4::/47", "33651"}, + {"2409:896a:2200::/39", "9808"}, + {"240e:95a:3000::/36", "140083"}, + {"2a00:45c0::/32", "42707"}, + {"2a02:4f40::/32", "51464"}, + {"2a05:2701:f00::/43", "62371"}, + {"2001:579:888::/43", "22773"}, + {"2407:ba40::/32", "398465"}, + {"2a05:6d40::/29", "202128"}, + {"2a0a:ff80::/32", "206566"}, + {"2600:380:b280::/39", "20057"}, + {"2600:5c00:3fca::/32", "20001"}, + {"2a03:8180:1000::/37", "36351"}, + {"2001:4888::/43", "6167"}, + {"2400:5fa0::/32", "139870"}, + {"2800:484:dc00::/40", "10620"}, + {"2806:2f0:2022::/48", "17072"}, + {"2a00:d940::/32", "43542"}, + {"2001:19e8:f1::/44", "2576"}, + {"2409:8c15:3c00::/33", "56044"}, + {"2600:6c10:5a::/45", "20115"}, + {"2602:fbda:666::/48", "7721"}, + {"2804:25a8::/32", "264293"}, + {"2a04:4e42:fe6::/43", "54113"}, + {"2a06:82c2::/48", "136620"}, + {"2001:df0:8580::/48", "139197"}, + {"2402:8780::/32", "63859"}, + {"2806:266:380::/41", "13999"}, + {"2a02:26f0:a101::/40", "20940"}, + {"2a03:5e20::/32", "15576"}, + {"2a03:7900:600::/32", "197731"}, + {"2620:ff:4000::/48", "394566"}, + {"2800:160:1375::/46", "14259"}, + {"2803:7da0:1::/46", "64114"}, + {"2a0a:df80:26::/48", "39212"}, + {"2a0d:ac00:1006::/47", "205202"}, + {"2001:1248:5a2d::/46", "11172"}, + {"240e:698:2700::/40", "133774"}, + {"2804:14d:4600::/40", "28573"}, + {"2a04:9680::/29", "20830"}, + {"240a:a4ef::/32", "143913"}, + {"2606:f180::/48", "64286"}, + {"2620:fc::/48", "40119"}, + {"2001:559:206::/48", "7922"}, + {"240a:aecb::/32", "146437"}, + {"2a02:26f7:ddc8::/48", "36183"}, + {"2a0e:8f02:f02b::/45", "206477"}, + {"2001:67c:1914::/48", "20708"}, + {"2401:4900:1f80::/44", "45609"}, + {"2407:52c0::/32", "139484"}, + {"2408:80f1:240::/44", "138421"}, + {"2a02:26f7:be10::/48", "36183"}, + {"2c0f:f8b8::/32", "37356"}, + {"2001:559:81b3::/45", "7922"}, + {"2407:7000::/32", "9500"}, + {"2605:f440:5654::/40", "21957"}, + {"2804:5f8c::/32", "269108"}, + {"2a02:430::/32", "12941"}, + {"2a02:2488::/32", "29413"}, + {"2a02:26f7:ca01::/46", "20940"}, + {"240a:a689::/32", "144323"}, + {"240e:84c:50::/27", "4134"}, + {"240e:980:2e00::/40", "4134"}, + {"2a00:79e1:f21::/48", "395973"}, + {"2a02:26f7:bb88::/48", "36183"}, + {"2a0e:aa07:e00a::/48", "207454"}, + {"240a:a0d5::/32", "142863"}, + {"2604:640:105::/46", "393562"}, + {"2804:794::/32", "262303"}, + {"2001:67c:107c::/48", "8473"}, + {"2602:fc0f::/40", "400148"}, + {"2804:19dc::/32", "61823"}, + {"2a01:430:12::/32", "24971"}, + {"2a11:36c0::/29", "58243"}, + {"2001:559:2d4::/46", "7015"}, + {"2405:a480::/32", "63981"}, + {"2409:806c:3100::/36", "9808"}, + {"240e:a7:7fde::/42", "140518"}, + {"2606:a600:4::/48", "397933"}, + {"2a02:2408::/32", "197064"}, + {"2a03:4020::/32", "201506"}, + {"2001:1248:96d9::/42", "11172"}, + {"2600:100d:9f00::/44", "6167"}, + {"2600:5c00:386d::/38", "20001"}, + {"2800:300:8a00::/37", "27986"}, + {"2a06:e881:260f::/48", "206740"}, + {"2001:559:7d0::/48", "33657"}, + {"2401:1f80:10::/44", "29990"}, + {"240a:a3f0::/32", "143658"}, + {"240e:982:9000::/38", "63835"}, + {"2602:80a:200c::/48", "16509"}, + {"2804:6e94::/32", "270606"}, + {"2a02:922::/35", "49292"}, + {"2a0f:55c7:ffff::/48", "48749"}, + {"2c0f:f6f8::/32", "37589"}, + {"2001:678:fb0::/48", "211041"}, + {"2605:4400::/47", "40715"}, + {"2606:62c0:187::/44", "399686"}, + {"2804:8328::/32", "272180"}, + {"2804:6a80::/34", "270340"}, + {"2a06:4cc0::/29", "24633"}, + {"2001:559:c3fb::/48", "33659"}, + {"2804:14c:6521::/41", "28573"}, + {"2a01:8100:1::/48", "203461"}, + {"2a02:26f7:40::/48", "36183"}, + {"2001:559:8215::/48", "33657"}, + {"2605:9500:212::/47", "14244"}, + {"2804:2fdc:1000::/36", "264917"}, + {"2806:203:f002::/36", "13999"}, + {"2806:230:3006::/48", "265594"}, + {"2001:559:e4::/47", "33651"}, + {"2001:559:c1d1::/48", "395676"}, + {"2607:9480::/43", "14338"}, + {"2804:7a9c::/32", "53141"}, + {"2a06:1287:2902::/37", "61138"}, + {"2001:559:8312::/47", "7015"}, + {"2409:8052:1000::/47", "56047"}, + {"2409:8a14:8a00::/31", "56044"}, + {"2804:3b8:1fe::/32", "52965"}, + {"2001:559:c351::/48", "33657"}, + {"2001:67c:140::/48", "48344"}, + {"2402:800:3a0f::/43", "7552"}, + {"240a:ae13::/32", "146253"}, + {"2620:158:c1::/48", "13996"}, + {"2804:259c:bb00::/37", "52772"}, + {"2804:39f8::/32", "266062"}, + {"2806:2f0:3323::/41", "17072"}, + {"2a01:58c0::/32", "42487"}, + {"2a04:8340::/29", "43260"}, + {"2620:148:f00::/44", "4983"}, + {"2800:160:1fe3::/44", "14259"}, + {"2a05:45c7:f000::/36", "28910"}, + {"240e:928:1500::/32", "58542"}, + {"2600:6c20:e24::/47", "20115"}, + {"2a04:ff00:101::/48", "207616"}, + {"2001:7f0:4021::/29", "13237"}, + {"2803:6604:6801::/39", "28075"}, + {"2804:18e4::/32", "61761"}, + {"2804:3e7c::/32", "266599"}, + {"2001:559:85a4::/48", "7015"}, + {"2620:10e:d000::/41", "21538"}, + {"2001:579:703d::/40", "22773"}, + {"2407:e740:12c::/32", "59239"}, + {"240a:a301::/32", "143419"}, + {"2600:1300::/32", "20021"}, + {"2602:809:b000::/48", "399242"}, + {"2605:9b80::/32", "14828"}, + {"2804:3a30::/32", "266076"}, + {"2804:851c::/32", "272558"}, + {"2a02:820::/32", "29061"}, + {"2a02:2a30::/29", "9158"}, + {"2001:1900:2371::/48", "3356"}, + {"2406:b100::/32", "132730"}, + {"2409:807b::/29", "9808"}, + {"240a:ad8a::/32", "146116"}, + {"2001:da8:255::/48", "24350"}, + {"2806:2f0:20c3::/43", "22884"}, + {"2409:804b:2909::/48", "9808"}, + {"2600:1012:b1d0::/42", "6167"}, + {"2804:7a40::/32", "271358"}, + {"2a02:26f7:c8c1::/46", "20940"}, + {"2001:1248:9c8f::/43", "11172"}, + {"240e:e0::/31", "4812"}, + {"2600:141c:801::/35", "20940"}, + {"2a00:8d00::/32", "3257"}, + {"2a04:8740::/29", "44212"}, + {"2001:559:5d4::/48", "7015"}, + {"240a:ab83::/32", "145597"}, + {"2607:fc58:1:1b::/64", "13536"}, + {"2803:7ca0::/32", "262213"}, + {"2804:3cc0::/32", "266232"}, + {"2804:45fc::/39", "266959"}, + {"2a0f:54c0::/29", "207906"}, + {"2a12:62c0::/29", "210619"}, + {"2404:4e00:101::/46", "32787"}, + {"240a:acc4::/32", "145918"}, + {"2606:2800:31f::/42", "15133"}, + {"2a04:4e40:da00::/47", "54113"}, + {"2001:559:5a5::/48", "33659"}, + {"240e:67d:c200::/39", "140329"}, + {"2600:a000::/30", "394092"}, + {"2a05:8240::/29", "57353"}, + {"2402:8100::/44", "55644"}, + {"240a:ace7::/32", "145953"}, + {"2600:8807:ac00::/35", "22773"}, + {"2607:6000:100::/40", "12189"}, + {"2a00:8b20::/32", "48407"}, + {"2a03:4b40::/33", "50710"}, + {"2408:8459:cd10::/42", "17623"}, + {"240a:aa06::/32", "145216"}, + {"2804:7e78::/32", "271626"}, + {"2001:67c:3fc::/48", "51776"}, + {"2402:28c0:fff9::/48", "137411"}, + {"2602:fdeb:1::/48", "14618"}, + {"2804:3e90:4204::/41", "266606"}, + {"2602:806:f000::/47", "27217"}, + {"2804:59a0:c000::/36", "268714"}, + {"2804:70f8::/32", "270759"}, + {"2001:4888:805f::/48", "22394"}, + {"2401:d800:feb0::/41", "7552"}, + {"240a:a146::/32", "142976"}, + {"2804:14d:e200::/40", "28573"}, + {"2a03:60c0::/32", "20473"}, + {"2a0e:2980:2::/48", "34568"}, + {"2602:fd23:9::/48", "19168"}, + {"2804:2570::/32", "264281"}, + {"2804:5028::/32", "268372"}, + {"2804:5db8::/32", "268988"}, + {"2001:559:8290::/48", "7016"}, + {"2409:8a53:700::/36", "56047"}, + {"2a0b:1200::/29", "559"}, + {"2a0d:80c0::/29", "15848"}, + {"2a10:4647::/46", "50046"}, + {"2408:8000:a020::/48", "140720"}, + {"2600:100f:9010::/40", "22394"}, + {"2804:1644:f760::/36", "262903"}, + {"2a04:c440:2b00::/33", "2047"}, + {"2404:5f40::/48", "38447"}, + {"2602:ff62:205::/46", "61317"}, + {"2610:a1:3064::/48", "12008"}, + {"2a00:d2e0::/29", "15600"}, + {"2a01:8880::/32", "8745"}, + {"2a0a:2e82::/32", "47596"}, + {"2a0f:e240::/29", "60781"}, + {"2001:67c:1bcc::/48", "41009"}, + {"2001:ddc::/48", "133874"}, + {"2409:896a:9c00::/39", "9808"}, + {"2600:1010:9010::/40", "22394"}, + {"2804:6358::/32", "269355"}, + {"2a02:26f7:bccc::/48", "36183"}, + {"2a0e:fd45:b00c::/30", "44103"}, + {"240a:a944::/32", "145022"}, + {"2600:1000:f110::/36", "22394"}, + {"2001:550:1200:4::/45", "174"}, + {"240a:af5b::/32", "146581"}, + {"2a02:2e02:96a0::/39", "12479"}, + {"2a0c:9780::/29", "65560"}, + {"240e:96b:6021::/46", "140375"}, + {"2804:301:1000::/36", "53237"}, + {"2a02:26f7:ca0d::/42", "20940"}, + {"2001:4340::/32", "3208"}, + {"2400:adc0:30::/46", "9541"}, + {"2408:84f3:e810::/42", "134543"}, + {"240a:a622::/32", "144220"}, + {"2600:400:8500::/36", "15147"}, + {"2804:7824::/32", "271223"}, + {"2a02:8000::/32", "50472"}, + {"240a:abc8::/32", "145666"}, + {"240e:95c:5000::/36", "138982"}, + {"2600:6c20:110::/45", "20115"}, + {"2804:2748::/32", "263891"}, + {"2804:8318:400::/32", "272176"}, + {"2a07:3ac0::/29", "58243"}, + {"2409:806a:3900::/33", "9808"}, + {"2806:2f0:5281::/46", "17072"}, + {"2001:67c:740::/48", "44655"}, + {"2400:8500:6800::/48", "58786"}, + {"2405:8180:b00::/37", "135478"}, + {"2405:9800:b128::/47", "133481"}, + {"240e:3b4:3e00::/33", "140308"}, + {"2605:2a00::/32", "16532"}, + {"2804:5574::/32", "267936"}, + {"2806:2eb::/32", "265524"}, + {"2001:559:50a::/48", "33287"}, + {"2401:9cc0:300::/48", "59256"}, + {"2804:3378::/32", "265398"}, + {"2001:559:2e0::/48", "33490"}, + {"2409:8904:2640::/39", "24547"}, + {"2804:56e0:40::/32", "268029"}, + {"2001:da8:4008::/48", "23910"}, + {"2a00:f440:c::/48", "57712"}, + {"2402:e380:304::/48", "134997"}, + {"2404:4a00:5542::/62", "55423"}, + {"2804:14c:41a3::/41", "28573"}, + {"2a0e:f200:184::/48", "30633"}, + {"2001:df6:7f80::/48", "134021"}, + {"240e:9b:f000::/46", "140245"}, + {"2606:6ac0::/32", "15176"}, + {"2804:8224::/32", "272501"}, + {"2a0c:b641:451::/48", "209389"}, + {"2001:67c:440::/48", "57944"}, + {"240a:ad93::/32", "146125"}, + {"2a01:b960:2307::/48", "210266"}, + {"2001:ce0:2200::/40", "4528"}, + {"2402:5300:710::/36", "45903"}, + {"2a03:39a0::/32", "15733"}, + {"2600:1001:a000::/44", "6167"}, + {"2804:13d8::/40", "262669"}, + {"2a01:110:9008::/48", "35106"}, + {"2a02:208::/32", "5495"}, + {"2a0b:4340:93::/48", "205610"}, + {"2001:df1:ad80::/47", "56093"}, + {"240a:abee::/32", "145704"}, + {"2600:3001:22::/45", "13649"}, + {"2804:10b4:2::/43", "263645"}, + {"2c0f:1b00::/32", "21271"}, + {"2001:579:b850::/40", "22773"}, + {"2800:200:2009::/32", "12252"}, + {"2804:3ab4:f800::/37", "266104"}, + {"2001:470:f1::/45", "6939"}, + {"240a:adbf::/32", "146169"}, + {"2620:38:c000::/48", "25656"}, + {"2a00:8740:1a::/42", "49037"}, + {"2a02:26f7:e204::/48", "36183"}, + {"2001:b08::/46", "3267"}, + {"2404:bf40:ea04::/37", "139084"}, + {"2408:8957:6f00::/40", "17816"}, + {"2604:880:217::/42", "29802"}, + {"2606:2980:2000::/40", "26344"}, + {"2803:760:181a::/40", "269816"}, + {"2a02:7920::/48", "201868"}, + {"2a07:7940:fffd::/48", "211691"}, + {"2001:1248:5770::/44", "11172"}, + {"2400:cb00:a170::/47", "13335"}, + {"2408:8957:3600::/40", "17622"}, + {"2801:80:600::/48", "52622"}, + {"2803:b220:b003::/33", "265844"}, + {"2804:4b0:4ec::/43", "262459"}, + {"2a00:4c00:3::/48", "15632"}, + {"2a02:26f7:ca49::/42", "20940"}, + {"2a09:be80::/32", "44901"}, + {"2a0a:ec02:501::/48", "42692"}, + {"2606:2000::/43", "1616"}, + {"2607:fc58:1:71::/64", "13536"}, + {"2804:3d68::/32", "266529"}, + {"2804:6134::/32", "269220"}, + {"2c0f:ef78:f::/48", "63293"}, + {"2001:4b08::/32", "29452"}, + {"2400:d400:11::/46", "45671"}, + {"240a:a563::/32", "144029"}, + {"2803:780::/32", "8053"}, + {"2a02:17f8::/32", "44700"}, + {"2001:559:c3f4::/48", "7015"}, + {"2401:2200::/48", "55420"}, + {"2402:2a80:4300::/32", "46489"}, + {"2804:10c4::/32", "263648"}, + {"2600:1f01:48b0::/47", "16509"}, + {"2600:1600::/24", "40788"}, + {"2804:29a4:500::/35", "264026"}, + {"2c0f:eb00:a00::/40", "328962"}, + {"2c0f:f598::/47", "327813"}, + {"240a:a295::/32", "143311"}, + {"2620:df:4002::/44", "16509"}, + {"2a03:9b40::/32", "9063"}, + {"2a09:f907::/32", "62200"}, + {"2a0e:dc80::/29", "202346"}, + {"2001:4490:de18::/46", "9829"}, + {"2400:b080::/33", "45296"}, + {"2409:8051:2802::/38", "56047"}, + {"2600:6c38::/45", "20115"}, + {"2607:fdc8:fff0::/44", "30036"}, + {"2804:43f4:c0::/32", "267601"}, + {"2a01:bb20:2000::/36", "206834"}, + {"2a09:ee00::/29", "200272"}, + {"2001:b18:a::/47", "47787"}, + {"240a:a99f::/32", "145113"}, + {"2804:3d70::/32", "266531"}, + {"2a09:480::/29", "212449"}, + {"2409:805e:2c00::/35", "9808"}, + {"240e:e1:9f00::/33", "4811"}, + {"2620:149:1070::/40", "714"}, + {"2a00:1f78:f008::/36", "8893"}, + {"2a01:120::/29", "12348"}, + {"2a02:ac80:101::/38", "25145"}, + {"2001:468:2630::/48", "396955"}, + {"2001:df0:3040::/48", "141592"}, + {"2404:c900:d::/48", "58682"}, + {"2602:fcd9::/36", "36326"}, + {"2606:2800:4104::/44", "15133"}, + {"2a01:9ba0::/32", "30742"}, + {"2a02:26f0:1901::/40", "20940"}, + {"2a06:1040::/29", "200648"}, + {"2001:c20:4890::/48", "3758"}, + {"2001:43f8:1460::/48", "328601"}, + {"2405:205:d000::/34", "55836"}, + {"2001:559:c0d3::/48", "7016"}, + {"2001:67c:1488::/48", "1257"}, + {"240e:67c:c400::/39", "140330"}, + {"2800:160:146a::/43", "14259"}, + {"2a0e:97c0:520::/44", "57351"}, + {"2400:8500:5700::/48", "58651"}, + {"240e:473:eeef::/35", "140485"}, + {"2600:8807:d060::/36", "22773"}, + {"2001:559:c376::/48", "33660"}, + {"2403:cd40::/32", "10075"}, + {"2409:8070:2c00::/35", "9808"}, + {"2600:1014:f000::/44", "6167"}, + {"2800:bf0:2af::/43", "27947"}, + {"2804:2050:5a6f::/43", "264485"}, + {"2a06:7b80::/29", "204052"}, + {"240a:a794::/32", "144590"}, + {"2804:33e8::/32", "265424"}, + {"2804:3df8::/46", "266566"}, + {"2a02:26f7:ccc0::/48", "36183"}, + {"2600:140b:a01::/39", "20940"}, + {"2804:7f3:e000::/29", "18881"}, + {"2001:4de0:ac10::/46", "20446"}, + {"2405:8a00:400e::/43", "55824"}, + {"2408:8459:3650::/36", "17816"}, + {"2408:8459:f030::/41", "17622"}, + {"2606:2800:6060::/48", "15133"}, + {"2a00:86c0::/39", "2906"}, + {"2a00:8920::/32", "25415"}, + {"2402:800:5bc5::/43", "7552"}, + {"2600:1415:f800::/48", "24319"}, + {"2600:370f:3080::/47", "32261"}, + {"2600:8807:3a20::/39", "22773"}, + {"2605:72c0:1::/48", "32354"}, + {"2a02:610:ffff::/48", "42979"}, + {"2a02:4440::/32", "60185"}, + {"2a07:ae00::/31", "51299"}, + {"2a0b:35c0::/29", "200005"}, + {"2a0e:b880::/31", "208789"}, + {"2a0f:9400:6105::/48", "210337"}, + {"2a12:1680::/29", "60144"}, + {"2001:559:c2f7::/44", "7015"}, + {"2401:d800:fee0::/39", "7552"}, + {"240a:a349::/32", "143491"}, + {"240a:a6a0::/32", "144346"}, + {"2620:65:c000::/48", "15053"}, + {"2804:4a24:116::/47", "267221"}, + {"2600:1012:b074::/44", "22394"}, + {"2803:de10::/32", "271978"}, + {"240e:3b1:7a00::/32", "140313"}, + {"2602:800:e000::/44", "33201"}, + {"2a03:b500:81::/41", "41135"}, + {"2a0f:cc0::/29", "60262"}, + {"2600:6:ffc0::/45", "10507"}, + {"2600:1417:13::/45", "20940"}, + {"2600:370f:72e4::/48", "32261"}, + {"2a01:c50e:5a00::/37", "12479"}, + {"2a0e:b107:6d0::/44", "134478"}, + {"240a:af31::/32", "146539"}, + {"240c:c0a8:5c26::/48", "24364"}, + {"2001:253:113::/48", "142079"}, + {"2408:8000:9000::/36", "17621"}, + {"2600:6c38:f14::/47", "20115"}, + {"2600:9000:2356::/47", "16509"}, + {"2806:230:5011::/48", "11888"}, + {"2a0e:d606::/48", "210644"}, + {"2401:bc40:a300::/40", "136899"}, + {"2402:9d80:300::/40", "131429"}, + {"2408:8256:396b::/48", "17816"}, + {"2409:801f:3008::/48", "24400"}, + {"2a02:26f7:dd40::/48", "36183"}, + {"2001:378::/32", "9318"}, + {"2001:6a8:be01::/33", "2611"}, + {"2001:dce:5300::/48", "45285"}, + {"2001:4310::/40", "30983"}, + {"2607:9000:3000::/36", "46844"}, + {"2620:1f:8000::/48", "10908"}, + {"2804:5f8::/32", "262551"}, + {"2a02:26f0:ae01::/40", "20940"}, + {"2a02:26f7:c78c::/48", "36183"}, + {"2a02:26f7:c948::/47", "36183"}, + {"2a03:8600:6::/48", "44394"}, + {"2402:800:59a9::/41", "7552"}, + {"2408:8000:1200::/36", "4808"}, + {"2a09:e240::/48", "57706"}, + {"2001:559:585::/48", "33650"}, + {"240a:a9f8::/32", "145202"}, + {"2a02:d40:4::/47", "44592"}, + {"2a03:db80:4415::/44", "680"}, + {"2a11:4800::/29", "204790"}, + {"2001:559:c3c1::/48", "33659"}, + {"240a:ae3c::/32", "146294"}, + {"2600:1417:1001::/36", "20940"}, + {"2605:66c0::/32", "398559"}, + {"2606:3a80:200::/48", "54913"}, + {"2800:b30::/31", "27740"}, + {"2801:80:3e80::/48", "271640"}, + {"2804:bf8::/33", "52653"}, + {"2804:4934::/32", "267170"}, + {"2806:230:4013::/48", "11888"}, + {"2a01:838::/32", "33874"}, + {"2001:678:59c::/48", "44973"}, + {"240a:acaa::/32", "145892"}, + {"2602:fd71::/36", "396325"}, + {"2607:fb10:7083::/43", "2906"}, + {"2a00:1d40::/32", "25180"}, + {"2a01:6500::/46", "42925"}, + {"2a0b:de00::/48", "207486"}, + {"2a0f:e40::/29", "60262"}, + {"2001:559:8515::/48", "33287"}, + {"2001:67c:2fbc::/48", "212467"}, + {"2605:c00:1400::/38", "46920"}, + {"2605:f080:500::/40", "23535"}, + {"2a06:7a05::/48", "207682"}, + {"2620:121:5071::/48", "16509"}, + {"2806:230:500d::/48", "11888"}, + {"2a02:26f7:f795::/46", "20940"}, + {"2001:559:23b::/48", "33491"}, + {"2001:df1:6000::/48", "131217"}, + {"2804:4040::/32", "265947"}, + {"2001:16a2:d700::/34", "25019"}, + {"2001:b400:d210::/37", "3462"}, + {"2620:4a:c000::/48", "32703"}, + {"2804:2dcc::/48", "265304"}, + {"2a0a:e202:8013::/45", "33438"}, + {"2401:d800:1c0::/42", "7552"}, + {"2409:8087:c00::/38", "56042"}, + {"240a:a8bd::/32", "144887"}, + {"2a01:c0::/32", "31708"}, + {"2a10:d181::/32", "197444"}, + {"2406:3e00::/32", "56030"}, + {"240e:438:3820::/43", "140647"}, + {"2a04:3b40::/29", "60664"}, + {"2001:1248:55f6::/44", "11172"}, + {"2402:5680:a000::/36", "133798"}, + {"2409:8c7d::/30", "9808"}, + {"240a:aaad::/32", "145383"}, + {"2600:1010:b000::/42", "6167"}, + {"2a02:2578:1305::/44", "51375"}, + {"2c0f:eab0::/32", "328111"}, + {"2001:67c:2c58::/48", "29551"}, + {"2001:8a8::/32", "15623"}, + {"2402:800:351d::/42", "7552"}, + {"2404:1f00:d000::/34", "55947"}, + {"240e:3be:2800::/38", "4134"}, + {"2a00:1ec8:39::/41", "2854"}, + {"2a03:b8c0:15::/48", "396253"}, + {"2001:1860::/32", "101"}, + {"2620:82:e000::/48", "33014"}, + {"2620:116:8087::/48", "27281"}, + {"2803:9810:140::/35", "36492"}, + {"2804:5e44:8000::/33", "269022"}, + {"2a02:26f7:e540::/48", "36183"}, + {"2a05:bc0::/32", "8495"}, + {"2a09:bd00::/48", "42385"}, + {"2a0d:59c7::/32", "202766"}, + {"240e:965:ea00::/39", "133776"}, + {"2620:12e:9000::/44", "395423"}, + {"2a00:67e0::/29", "203986"}, + {"2001:da8:264::/47", "24350"}, + {"2001:49f0:a05e::/47", "174"}, + {"2408:8956:5700::/40", "17816"}, + {"2a03:3140:fffe::/47", "61345"}, + {"2001:550:5c08::/34", "174"}, + {"2803:1400::/32", "27887"}, + {"2a02:6180::/32", "31510"}, + {"2001:438:fffd:14::/57", "6461"}, + {"2001:559:f5::/46", "7922"}, + {"2401:7500:ff5::/48", "133296"}, + {"2620:0:1a50::/48", "32360"}, + {"2806:108e:8::/43", "8151"}, + {"2a0f:5946::/31", "209372"}, + {"2607:5d00:5::/46", "53587"}, + {"2607:9a00::/32", "35916"}, + {"2001:400:8824::/34", "293"}, + {"2401:d800:3d0::/37", "7552"}, + {"2600:6c38:8f2::/38", "20115"}, + {"2620:f6::/48", "26806"}, + {"2a04:2dc0:1e::/48", "39216"}, + {"2a0e:b101::/38", "60474"}, + {"2001:559:c53a::/29", "7922"}, + {"2402:800:f8a0::/41", "7552"}, + {"240e:983:1b03::/37", "4134"}, + {"2803:5c80:6051::/46", "64114"}, + {"2804:db4::/32", "28257"}, + {"2804:7c1c::/32", "271476"}, + {"2a05:d050:6040::/44", "16509"}, + {"2a07:f280::/29", "206163"}, + {"240a:a25d::/32", "143255"}, + {"2602:feb4:190::/44", "25961"}, + {"2800:310:901::/32", "18678"}, + {"2800:8e0::/47", "18822"}, + {"2804:494::/32", "52987"}, + {"2a00:e70::/32", "43655"}, + {"2406:f0c0:105::/46", "138654"}, + {"240a:a400::/32", "143674"}, + {"240e:250:2800::/40", "138991"}, + {"2600:1012:b040::/42", "6167"}, + {"2620:1d5::/44", "14773"}, + {"2a01:73e0::/36", "47872"}, + {"2a10:a800::/30", "213013"}, + {"2001:67c:21bc::/48", "200533"}, + {"240e:3b6:7600::/39", "140313"}, + {"2600:370f:35a5::/44", "32261"}, + {"2804:710:2::/44", "17222"}, + {"2403:300:13c5::/43", "714"}, + {"2606:af80::/32", "25710"}, + {"2804:49f0::/32", "267210"}, + {"2a02:26f7:eec8::/48", "36183"}, + {"2a05:3182::/29", "34580"}, + {"2400:6a80::/32", "55821"}, + {"2405:1c0:6781::/46", "55303"}, + {"2600:9000:1175::/44", "16509"}, + {"2803:2d60:2000::/32", "14754"}, + {"2001:1b70:86c0::/48", "8147"}, + {"2402:800:7720::/41", "7552"}, + {"240e:3b1:dc00::/34", "4134"}, + {"2602:fc9d::/36", "20220"}, + {"2804:357c::/32", "266289"}, + {"2a0f:9400:7814::/44", "147028"}, + {"2c0f:f278::/32", "328036"}, + {"2402:3a80:10::/46", "38266"}, + {"2a03:6f01:1::/48", "9123"}, + {"2a07:afc0::/29", "205435"}, + {"2001:da8:4033::/36", "23910"}, + {"240e:720::/32", "140061"}, + {"2001:16a2::/43", "25019"}, + {"2400:a980:cd::/43", "133111"}, + {"2600:370f:74c8::/47", "32261"}, + {"2a00:1908:e000::/48", "199491"}, + {"2a01:8840:71::/48", "207266"}, + {"2a07:9944:40::/48", "58305"}, + {"2001:559:327::/48", "33650"}, + {"2408:8957:3700::/40", "17816"}, + {"2804:f24:f201::/36", "263567"}, + {"2804:470c::/32", "267028"}, + {"2a02:2d8::/47", "9002"}, + {"2a02:26f7:be04::/48", "36183"}, + {"2400:300:9::/48", "4766"}, + {"240a:a2bb::/32", "143349"}, + {"2804:4dc0::/32", "268217"}, + {"2a0b:fd80::/48", "49419"}, + {"2a0c:b641:80::/47", "209861"}, + {"2001:978:909::/48", "61083"}, + {"2406:e00:100::/47", "55740"}, + {"2600:1402:9801::/34", "20940"}, + {"2600:140f:ec00::/48", "9498"}, + {"240a:a828::/32", "144738"}, + {"2604:1040::/32", "18918"}, + {"2408:8957:9f00::/40", "17816"}, + {"2803:5810::/32", "271837"}, + {"2806:2f0:4541::/46", "17072"}, + {"2a00:1298:8016::/48", "206055"}, + {"2a01:3f1:c400::/34", "8674"}, + {"2a07:22c1:35::/48", "211777"}, + {"2c0f:5d00::/48", "328677"}, + {"2408:8956:bc00::/40", "17622"}, + {"2408:8957:ae00::/40", "17622"}, + {"240e:980:4b00::/40", "133774"}, + {"2610:f0:30d7::/32", "22925"}, + {"2001:798::/32", "20965"}, + {"2001:48a8:68fe::/32", "237"}, + {"240e:1e:2000::/36", "136200"}, + {"240e:108:10f3::/44", "4134"}, + {"2620:0:2820::/48", "91"}, + {"2001:44b8:4061::/48", "4739"}, + {"2001:4850::/32", "27446"}, + {"240e:44d:7740::/42", "140352"}, + {"2a03:2880:f165::/46", "32934"}, + {"2a03:5a00:17::/48", "61335"}, + {"2a0a:54c1:2::/45", "62240"}, + {"2a12:e100:1::/46", "149502"}, + {"2001:559:433::/45", "33490"}, + {"2001:da8:e021::/41", "24367"}, + {"240a:a193::/32", "143053"}, + {"2a06:6540:1440::/48", "8220"}, + {"2001:1248:5bfa::/45", "11172"}, + {"2402:ef03:5::/44", "7633"}, + {"2403:ce00::/32", "9984"}, + {"2404:bf40:c182::/41", "139084"}, + {"2408:8256:3283::/44", "17623"}, + {"2602:ff58::/36", "40713"}, + {"2408:8020::/29", "4808"}, + {"240a:a2ad::/32", "143335"}, + {"2620:13d:c004::/48", "395360"}, + {"2804:458c::/32", "266934"}, + {"2a03:d840::/32", "198668"}, + {"2a0d:42c0::/29", "197706"}, + {"2403:9800:7f10::/48", "4648"}, + {"2404:1c0::/32", "138454"}, + {"2409:8904:6940::/42", "24547"}, + {"240e:878:c0::/39", "4134"}, + {"2610:18:8802::/33", "2828"}, + {"2001:550:2806::/39", "174"}, + {"2801:80:16e0::/48", "265362"}, + {"2804:ecc::/32", "52722"}, + {"2001:559:c0f2::/48", "7015"}, + {"2401:8000:221::/26", "9919"}, + {"2408:8957:e500::/40", "17816"}, + {"2a0f:9280::/29", "41407"}, + {"2a10:8800::/31", "31743"}, + {"2001:559:8447::/48", "33491"}, + {"2001:4408:4508::/45", "55824"}, + {"2408:840d:3400::/42", "17621"}, + {"240a:a77a::/32", "144564"}, + {"240a:a7cb::/32", "144645"}, + {"2602:fc10::/36", "400129"}, + {"2804:31c:6500::/40", "52962"}, + {"2806:230:403d::/48", "11888"}, + {"2a02:2e02:9180::/38", "12479"}, + {"2001:67c:1223::/48", "201263"}, + {"2001:19f0:9000::/37", "20473"}, + {"2001:44b8:2051::/48", "4739"}, + {"2408:8744::/28", "4837"}, + {"2600:1012:b180::/43", "22394"}, + {"2a00:4802:330::/41", "8717"}, + {"2a02:26f7:ea88::/48", "36183"}, + {"2a02:e183::/36", "33517"}, + {"2001:678:cdc::/48", "210660"}, + {"2402:800:3201::/44", "7552"}, + {"2409:8087:6a6f::/37", "9808"}, + {"2a00:eb8::/32", "200044"}, + {"2a02:26f0:8e01::/39", "20940"}, + {"2a02:26f7:ec49::/46", "20940"}, + {"2a0a:e202:800e::/43", "33438"}, + {"2409:8d5d::/26", "9808"}, + {"240e:44d:7100::/41", "140345"}, + {"2804:52c4::/32", "268540"}, + {"2a02:2278:fffd::/46", "59613"}, + {"240e:438:9e20::/43", "140647"}, + {"2600:1009:9010::/40", "22394"}, + {"2605:3380:46ff::/39", "12025"}, + {"2801:1a:9000::/48", "262247"}, + {"2804:250c::/32", "264255"}, + {"2806:2f0:4163::/40", "17072"}, + {"2a01:c50f:1a40::/39", "12479"}, + {"2a07:1840::/32", "48430"}, + {"2a0d:c400::/31", "48314"}, + {"2a0f:7880::/48", "47384"}, + {"2001:559:81c2::/48", "33651"}, + {"2606:7540:a::/47", "213073"}, + {"2607:fb08::/45", "32703"}, + {"2800:5f0:83a::/45", "22724"}, + {"2001:67c:2f7c::/48", "24605"}, + {"2407:500:1000::/48", "58940"}, + {"2600:100e:b050::/42", "6167"}, + {"2600:b405::/28", "18254"}, + {"2603:c0f2::/35", "6142"}, + {"2804:7938::/32", "271292"}, + {"2401:1d40:2001::/40", "59019"}, + {"240a:a1e2::/32", "143132"}, + {"2620:13:2000::/48", "29807"}, + {"2a0e:fd40:201::/32", "44103"}, + {"2409:8057:3813::/28", "56040"}, + {"2600:140b:1601::/39", "20940"}, + {"2604:5500:f000::/38", "19165"}, + {"2620:9a:8000::/48", "174"}, + {"2801:1c:e800::/48", "18747"}, + {"2803:f840::/32", "269980"}, + {"2804:391c::/45", "262287"}, + {"2a07:7780::/29", "49191"}, + {"2001:470:158::/48", "398922"}, + {"2409:8028:2a00::/40", "9808"}, + {"2604:6040:20::/48", "53698"}, + {"2804:7590::/32", "271055"}, + {"2a00:fac0::/32", "20677"}, + {"2a02:26f0:d2::/42", "20940"}, + {"2606:7e80::/36", "33695"}, + {"2607:fa20::/32", "26259"}, + {"2804:14d:fc40::/44", "28573"}, + {"2804:3d60::/32", "266527"}, + {"2a01:4a60::/32", "6768"}, + {"2a07:d940::/29", "42375"}, + {"240e:44d:1e80::/41", "4134"}, + {"2001:678:7b8::/48", "197600"}, + {"2400:adc0:4210::/47", "9541"}, + {"2804:40ac::/32", "265974"}, + {"2a01:270::/32", "41075"}, + {"2a01:6300::/32", "42303"}, + {"2a01:6600::/32", "39405"}, + {"2a10:4dc0::/32", "62240"}, + {"2400:8b00:800::/42", "45727"}, + {"2610:a1:1015::/46", "397228"}, + {"2a06:6540:4181::/48", "8220"}, + {"2001:b08:27::/32", "3267"}, + {"240a:a19c::/32", "143062"}, + {"2a00:1288:efc1::/48", "14778"}, + {"2a02:4620::/32", "3303"}, + {"2a03:4000::/31", "197540"}, + {"2a04:f580:9260::/48", "4809"}, + {"2a0d:3b40::/29", "8808"}, + {"2a0e:2400::/29", "212865"}, + {"2001:559:8195::/48", "7015"}, + {"240e:938:f900::/48", "139462"}, + {"2603:90fc:20::/41", "19115"}, + {"2804:4ed4::/32", "268285"}, + {"2a05:b00::/29", "196645"}, + {"2a0e:b107:178a::/48", "208529"}, + {"2401:d800:2282::/41", "7552"}, + {"2402:800:3a1d::/42", "7552"}, + {"2404:b1:5000::/32", "9891"}, + {"2801:14:d000::/44", "264843"}, + {"2a01:b740:a25::/48", "714"}, + {"2a0f:a0c0:ffff::/48", "209635"}, + {"2400:1ba0::/32", "148992"}, + {"2408:8957:3200::/40", "17622"}, + {"240a:a7cd::/32", "144647"}, + {"240e:965:cc00::/35", "4134"}, + {"2602:ff96:17::/48", "35913"}, + {"2a00:1d34:8180::/30", "9121"}, + {"2a02:26f7:f985::/46", "20940"}, + {"2a07:76c0:1::/48", "42352"}, + {"2400:bc80::/32", "38726"}, + {"2405:c00:64::/48", "17787"}, + {"240a:a758::/32", "144530"}, + {"240e:7b3:1000::/28", "4134"}, + {"2607:fdc8:400::/48", "30036"}, + {"2806:370:80b0::/44", "28403"}, + {"2a0a:880::/48", "41524"}, + {"2401:c740::/32", "23734"}, + {"2a03:8d20:1182::/44", "200849"}, + {"2001:559:3bb::/48", "22909"}, + {"2001:678:360::/48", "206506"}, + {"2620:10d:9000::/48", "25993"}, + {"2001:da8:da9::/38", "23910"}, + {"2405:9800:b002::/45", "133481"}, + {"2001:da8:c805::/46", "23910"}, + {"2403:6a40:1::/48", "135905"}, + {"240e:e1:8000::/36", "4811"}, + {"2804:495c::/32", "267180"}, + {"2804:4bc8:ab::/36", "267329"}, + {"2001:559:3c1::/48", "33287"}, + {"2409:8038:3900::/30", "9808"}, + {"2001:678:a90::/48", "20473"}, + {"240a:a086::/32", "142784"}, + {"2001:1900:2246::/44", "3356"}, + {"2406:3400:7d::/40", "10143"}, + {"2409:8009::/30", "9808"}, + {"2600:370f:71a3::/45", "32261"}, + {"2a09:6280:2::/48", "51628"}, + {"2a10:2f00:157::/48", "212425"}, + {"2001:948:80::/32", "2603"}, + {"2607:fe10::/34", "11796"}, + {"2a0b:3540:6::/47", "208176"}, + {"2001:678:370::/48", "202584"}, + {"2804:7b4:8300::/40", "262314"}, + {"240a:aedf::/32", "146457"}, + {"2605:9240::/32", "22792"}, + {"2803:3c20::/32", "266672"}, + {"2803:5b80::/32", "263699"}, + {"2804:288c::/32", "263968"}, + {"2a02:26f7:de8d::/46", "20940"}, + {"2a07:a107::/32", "202701"}, + {"2400:5280:3800::/38", "63199"}, + {"2400:df00::/32", "18260"}, + {"2402:c780::/32", "134232"}, + {"2402:e380:30b::/48", "138219"}, + {"2409:8c75::/28", "9808"}, + {"2804:7414::/32", "270957"}, + {"2001:468:914::/38", "11537"}, + {"2806:2f0:4643::/42", "17072"}, + {"2001:250:c1e::/42", "138374"}, + {"2800:23::/46", "11271"}, + {"2a0d:6c40::/29", "40970"}, + {"2804:74dc::/32", "271008"}, + {"2804:80d8::/32", "272416"}, + {"2806:2f0:45c1::/46", "17072"}, + {"2a01:ab40::/29", "62275"}, + {"2a02:26f7:2d::/48", "20940"}, + {"2a04:b700:185d::/48", "201403"}, + {"240a:af69::/32", "146595"}, + {"2604:f640::/32", "19584"}, + {"2605:a404:606::/40", "33363"}, + {"2001:559:c3fa::/48", "7016"}, + {"2409:8d14:1100::/38", "56044"}, + {"2607:f020::/40", "40289"}, + {"2a0b:2980::/48", "206520"}, + {"2001:559:3b1::/48", "33659"}, + {"2001:1248:5638::/45", "11172"}, + {"2408:8956:4600::/40", "17622"}, + {"2408:8962::/29", "4837"}, + {"2804:46f0::/42", "267021"}, + {"2804:5c38::/32", "268895"}, + {"2a0b:6b86:404::/48", "207080"}, + {"2c0f:eb78::/32", "328331"}, + {"2001:16d8:60::/45", "16150"}, + {"2001:4c08:201d::/48", "10753"}, + {"2600:1419:e01::/39", "20940"}, + {"2607:fdb8:33::/35", "30496"}, + {"2a00:4802:3e00::/40", "13124"}, + {"2a06:d440::/29", "57329"}, + {"2402:800:9763::/43", "7552"}, + {"2600:3402:1405::/29", "4181"}, + {"2607:da00:801::/48", "26793"}, + {"2607:f948::/32", "6597"}, + {"2804:5594:4000::/32", "267943"}, + {"2402:2940::/32", "24390"}, + {"2803:db00::/36", "262234"}, + {"2a02:df80::/29", "31655"}, + {"2c0f:fd48::/32", "37329"}, + {"2404:1f00:ffa8::/43", "55947"}, + {"2804:2468::/32", "264221"}, + {"2a0e:97c3:40d::/48", "20473"}, + {"2407:56c0::/32", "142116"}, + {"2804:6fb4::/32", "270678"}, + {"2a00:f50::/32", "21497"}, + {"2001:1248:8447::/44", "11172"}, + {"2402:e280:213f::/41", "134674"}, + {"240e:13:1000::/33", "4134"}, + {"2a01:8de0::/32", "47169"}, + {"2a02:26f0:b101::/38", "20940"}, + {"2001:418:1401:300::/53", "20940"}, + {"2001:fd8:34f0::/32", "4775"}, + {"2406:46c0::/32", "140933"}, + {"2602:803:c001::/45", "26667"}, + {"2607:b400:801::/39", "40220"}, + {"2804:4fc8::/32", "268349"}, + {"2a03:4780::/29", "47589"}, + {"2001:4de0:5010::/48", "33438"}, + {"240a:a213::/32", "143181"}, + {"2804:5498::/32", "268660"}, + {"2a02:bf0:8000::/33", "25106"}, + {"2a0e:8f02:2190::/47", "211153"}, + {"2001:559:7d3::/48", "33650"}, + {"2001:559:c43f::/48", "7922"}, + {"2600:140b:7401::/38", "20940"}, + {"2600:1417:39::/46", "20940"}, + {"2606:ba80::/32", "35975"}, + {"2607:fc48:430::/48", "40009"}, + {"2803:9800:9501::/45", "11664"}, + {"2804:4228::/32", "267481"}, + {"2a02:ee80:406b::/45", "3573"}, + {"2a06:c580::/29", "62297"}, + {"2001:aa8::/32", "61157"}, + {"2401:d800:d040::/42", "7552"}, + {"2404:5780:3::/48", "9558"}, + {"2405:f280:15::/42", "131464"}, + {"2602:800:1000::/45", "16970"}, + {"2401:7400:1001::/33", "4773"}, + {"2407:57c0::/48", "140799"}, + {"240e:44d:5f80::/41", "4134"}, + {"240e:980:4a00::/40", "4811"}, + {"2605:7900:8::/47", "19133"}, + {"2804:18:80::/44", "10429"}, + {"2804:3ab0::/32", "266103"}, + {"2804:5290::/32", "268526"}, + {"2a00:11c0::/44", "42473"}, + {"2a00:1e18::/31", "8896"}, + {"2a04:880::/32", "43623"}, + {"2a0e:5e84::/32", "44176"}, + {"2001:559:c14b::/48", "20214"}, + {"2402:800:33c5::/43", "7552"}, + {"2408:8456:8c00::/42", "17622"}, + {"2a0a:8d80::/48", "44094"}, + {"2001:559:c36f::/48", "7922"}, + {"2001:1248:9a5c::/46", "11172"}, + {"2400:cb00:102::/45", "13335"}, + {"2402:800:9ba9::/43", "7552"}, + {"2804:2144:104::/38", "52795"}, + {"2806:1010:cbff:100::/37", "8151"}, + {"2a01:8d1::/26", "3209"}, + {"2400:cb00:a980::/46", "13335"}, + {"2404:7600::/39", "23853"}, + {"2409:8000:800::/40", "56048"}, + {"2801:0:190::/48", "264630"}, + {"2409:8057:3035::/44", "56040"}, + {"2800:bf0:b423::/48", "52257"}, + {"2a02:26f7:f385::/46", "20940"}, + {"2a02:26f7:e88c::/48", "36183"}, + {"2602:feda:103::/45", "38008"}, + {"2804:51c8::/32", "268477"}, + {"2001:870::/29", "8447"}, + {"2001:dcd:4::/46", "397226"}, + {"2a00:df00::/29", "34790"}, + {"2a0e:3c0::/29", "553"}, + {"2001:559:86de::/42", "33659"}, + {"2a00:6020::/32", "60294"}, + {"2a04:f580:9012::/47", "4809"}, + {"2001:678:3f4::/48", "211509"}, + {"2001:938:403b::/41", "8437"}, + {"2404:6740:1000::/48", "138608"}, + {"240a:a3ae::/32", "143592"}, + {"2600:1406:3c01::/38", "20940"}, + {"2a02:26f7:e8c5::/46", "20940"}, + {"2a03:4c60::/32", "199909"}, + {"2a09:bf80::/40", "12213"}, + {"2804:2a4:c000::/34", "262828"}, + {"2804:4884::/32", "267126"}, + {"2a03:ae60::/45", "202847"}, + {"2001:559:28d::/48", "7725"}, + {"2001:559:85a0::/48", "33659"}, + {"2001:1248:8445::/46", "11172"}, + {"2804:7184::/32", "270794"}, + {"2a0e:b107:b88::/46", "212995"}, + {"2a0f:eb80:2::/44", "47267"}, + {"2001:559:803b::/48", "26419"}, + {"2001:67c:5cc::/48", "3320"}, + {"2001:df0:8fc0::/48", "7387"}, + {"2804:298:2013::/32", "53087"}, + {"2a02:587:6800::/32", "6799"}, + {"2a0d:c7c0::/32", "6233"}, + {"2001:550:5c07::/48", "15235"}, + {"2401:d800:2d00::/42", "7552"}, + {"2409:8050:3100::/37", "9808"}, + {"2804:4038::/32", "265945"}, + {"2a05:dfc7:5354::/32", "61138"}, + {"2408:8726::/32", "4837"}, + {"2602:fed2:730f::/48", "53356"}, + {"2a01:4580::/29", "8426"}, + {"2a05:6747::/48", "1759"}, + {"2a09:4740::/48", "44364"}, + {"2c0f:ee18::/32", "37110"}, + {"2402:e380:113::/45", "139073"}, + {"2600:1413:4001::/34", "20940"}, + {"2804:28a8::/32", "263973"}, + {"2a00:c780::/32", "15557"}, + {"2408:8459:dc50::/38", "17816"}, + {"2620:149:1030::/41", "714"}, + {"2804:2f84::/32", "264896"}, + {"2a00:1850:2ea::/48", "29357"}, + {"240a:ac3b::/32", "145781"}, + {"2801:80:2400::/48", "268302"}, + {"2804:170:5000::/32", "28131"}, + {"2a01:9f40::/29", "199101"}, + {"2a0f:ca87:c::/48", "210348"}, + {"2001:da8:8034::/36", "23910"}, + {"2405:8a00:20e4::/43", "55824"}, + {"2409:4025:1000::/25", "55836"}, + {"2409:8924:d00::/38", "56046"}, + {"240a:ae33::/32", "146285"}, + {"2a03:52a0:173::/32", "12557"}, + {"2804:8624::/32", "272624"}, + {"2a02:4e80::/32", "204645"}, + {"2001:df7:4100::/48", "137621"}, + {"240a:af6b::/32", "146597"}, + {"240e:90::/34", "140061"}, + {"2800:160:1ff2::/45", "14259"}, + {"2a04:4e40:5a00::/48", "54113"}, + {"2a09:4200::/29", "47602"}, + {"2a0e:2b80::/39", "28875"}, + {"2600:100a:b1c0::/43", "6167"}, + {"2804:84c4::/32", "272280"}, + {"2806:2f0:20a2::/48", "17072"}, + {"2402:800:9d01::/44", "7552"}, + {"2600:1003:9000::/44", "6167"}, + {"2804:21a0::/32", "264565"}, + {"2a00:a780:900::/32", "44229"}, + {"2a02:2010:2420::/45", "20978"}, + {"2001:1900:222f::/43", "3356"}, + {"2804:8::/45", "14840"}, + {"2a12:b500::/32", "210477"}, + {"2610:b0:c200::/34", "3573"}, + {"2804:1e2c:1000::/40", "264412"}, + {"2a01:3f1:5400::/32", "8674"}, + {"2a03:4bc0:2000::/48", "30893"}, + {"2001:500:2e::/47", "3557"}, + {"2001:559:c3ae::/48", "7922"}, + {"2406:840:e800::/48", "134488"}, + {"240a:aad2::/32", "145420"}, + {"2a00:d180::/32", "15457"}, + {"2a03:77e0:5301::/48", "48305"}, + {"2401:d800:b9a0::/41", "7552"}, + {"2408:8456:ce40::/40", "17816"}, + {"2409:801f:3010::/32", "24400"}, + {"2607:2a00:2::/48", "3584"}, + {"2800:440:8143::/48", "27738"}, + {"2001:4be8::/32", "31595"}, + {"2407:54c0::/32", "142065"}, + {"2001:559:c41a::/45", "7015"}, + {"2400:35a0::/32", "137645"}, + {"2400:dd01:301c::/30", "7497"}, + {"2409:8959:c854::/39", "56040"}, + {"2600:380:f1c0::/43", "20057"}, + {"2a01:5b40:d::/36", "12996"}, + {"2a02:26f7:f751::/42", "20940"}, + {"2a0b:6b86:d18::/40", "212232"}, + {"2001:559:832f::/43", "33659"}, + {"2804:238c::/35", "264169"}, + {"2804:6484::/32", "269432"}, + {"2604:d600:1d0c::/34", "32098"}, + {"2604:e5c0::/32", "31950"}, + {"2804:4c14:ca01::/39", "267348"}, + {"2804:5968::/36", "268188"}, + {"2a02:2e02:2ea0::/39", "12479"}, + {"2a0b:3c40:20::/48", "208258"}, + {"2001:559:83c1::/48", "7922"}, + {"2001:67c:1494::/48", "61431"}, + {"2001:1248:c233::/48", "11172"}, + {"2408:862a:9200::/34", "139007"}, + {"240a:a0f4::/32", "142894"}, + {"2a0b:8340::/29", "50304"}, + {"2001:12c4:5aff::/32", "28262"}, + {"2600:c04:1023::/48", "12180"}, + {"2800:160:2311::/42", "14259"}, + {"2a00:1728:18::/48", "34368"}, + {"2a09:e0c0::/29", "64421"}, + {"2a0e:fd45:40f5::/48", "43927"}, + {"2a12:4340::/29", "60135"}, + {"2001:559:386::/48", "20214"}, + {"2001:559:86d5::/48", "7725"}, + {"2001:579:1044::/40", "22773"}, + {"2001:c38:9126::/48", "38228"}, + {"2406:840:880::/48", "139317"}, + {"2620:171:f6::/48", "715"}, + {"2806:230:3016::/48", "265594"}, + {"2a01:7b00::/32", "41589"}, + {"2a03:3a40:2000::/48", "20712"}, + {"2a0f:6fc5:a4ae::/48", "43694"}, + {"2001:44b8:105e::/48", "7545"}, + {"2001:44c8:130::/47", "131445"}, + {"2620:149:a1e::/48", "6185"}, + {"2a02:26f7:dbcc::/48", "36183"}, + {"2a0c:b641:780::/44", "207301"}, + {"2402:2200:8000::/35", "4788"}, + {"2804:14d:8099::/41", "28573"}, + {"2a0a:5ac0::/32", "212696"}, + {"2001:559:2af::/43", "7016"}, + {"2a04:2800::/29", "206114"}, + {"2403:a880::/32", "17964"}, + {"2403:d200::/32", "45230"}, + {"2801:114:7::/48", "26506"}, + {"2804:6ac8::/39", "270358"}, + {"2a07:9340::/32", "56911"}, + {"2401:d800:960::/40", "7552"}, + {"2404:bf40:a4c1::/39", "139084"}, + {"2408:8a24:4000::/34", "4837"}, + {"2804:2f30:6d00::/32", "53096"}, + {"2804:0:1801::/37", "2716"}, + {"2a01:b460::/32", "6830"}, + {"2a0e:97c0:39b::/45", "211437"}, + {"2001:4888:803f::/48", "22394"}, + {"2402:8100:2460::/44", "45271"}, + {"240a:a6a1::/32", "144347"}, + {"240e:4:e000::/40", "132147"}, + {"2801:11:2000::/48", "61486"}, + {"2801:96:fff3::/45", "28586"}, + {"2a02:26f7:e518::/48", "36183"}, + {"2001:df5:4f80::/48", "141411"}, + {"240a:a01c::/32", "142678"}, + {"240a:a93a::/32", "145012"}, + {"2804:446c:c001::/34", "28369"}, + {"2001:df0:318::/47", "136601"}, + {"2404:7180:c011::/46", "23848"}, + {"2800:68:23::/45", "61468"}, + {"2a05:9f47::/32", "58305"}, + {"2403:18c0:1000::/47", "54574"}, + {"2404:138:134::/33", "38022"}, + {"2602:fdad::/40", "397438"}, + {"2604:d600:c6f::/43", "32098"}, + {"2800:160:1590::/44", "14259"}, + {"2a04:8ec0::/48", "1712"}, + {"240c:c727::/24", "23910"}, + {"2620:171:da::/48", "42"}, + {"2804:31c8::/32", "265037"}, + {"2a01:9b60::/32", "30742"}, + {"2a02:4180::/32", "42334"}, + {"2402:800:b5c0::/42", "7552"}, + {"2605:a404:ba3::/41", "33363"}, + {"2804:5f6c::/35", "262287"}, + {"2a0d:f103::/32", "208449"}, + {"2408:8456:9840::/38", "17816"}, + {"2605:9cc0:40c::/48", "8987"}, + {"2804:40c8::/32", "265981"}, + {"2a06:c700:3000::/31", "6810"}, + {"2001:67c:2818::/48", "20647"}, + {"240e:981:200::/40", "23724"}, + {"2600:1014:9000::/44", "6167"}, + {"2804:b94::/32", "52796"}, + {"2a03:f80:972::/48", "61102"}, + {"2a04:57c0::/29", "62183"}, + {"2a04:9700::/29", "62227"}, + {"2a0e:8f02:f00e::/48", "212359"}, + {"2404:af80:3::/48", "38026"}, + {"2600:6c10:19::/45", "20115"}, + {"2804:2250::/33", "262756"}, + {"2a00:4520::/44", "42961"}, + {"2a05:91c3:1::/48", "39511"}, + {"2001:250:5011::/48", "23910"}, + {"2001:559:719::/48", "395680"}, + {"2604:ca00:454::/42", "36492"}, + {"2803:19a0::/32", "267714"}, + {"2803:c800:40e0::/32", "23243"}, + {"2a00:11c0:1010::/48", "42388"}, + {"2a06:e80:3000::/36", "211720"}, + {"240e:983:1801::/48", "133774"}, + {"2a02:26f7:8a::/48", "36183"}, + {"2a04:9a04::/32", "29311"}, + {"2001:19f0:1000::/37", "20473"}, + {"2606:2800:410e::/48", "14153"}, + {"2620:9:a005::/48", "395515"}, + {"2800:440:9600::/42", "27738"}, + {"2804:8564:1160::/43", "262313"}, + {"2a00:c58::/32", "41887"}, + {"2405:1c0:6281::/46", "55303"}, + {"240a:a543::/32", "143997"}, + {"240a:acf4::/32", "145966"}, + {"240e:965:c600::/36", "4134"}, + {"2804:7250::/32", "270846"}, + {"2a02:26f7:e6::/48", "36183"}, + {"2a02:26f7:bc00::/48", "36183"}, + {"2607:ff38:4::/32", "22937"}, + {"2800:bf0:8090::/45", "52257"}, + {"2a02:26f7:e109::/46", "20940"}, + {"2600:370f:33ca::/45", "32261"}, + {"2620:24:8080::/48", "23389"}, + {"2a0e:92c0::/29", "58061"}, + {"2001:559:83b1::/48", "33287"}, + {"2402:800:3c1d::/41", "7552"}, + {"2a02:50e0::/32", "198203"}, + {"2a0f:5944::/32", "9009"}, + {"2402:dc40::/48", "134331"}, + {"2404:7180:b010::/48", "23848"}, + {"2001:579:f130::/45", "22773"}, + {"2001:1248:5a2f::/43", "11172"}, + {"2408:8956:2400::/40", "17622"}, + {"2a02:7b02::/36", "48328"}, + {"2a04:7e80::/29", "50794"}, + {"2001:500:b::/45", "12041"}, + {"2600:1415:e801::/35", "20940"}, + {"2804:3f30::/32", "266645"}, + {"2a02:23a8::/32", "16164"}, + {"2a02:26f7:bd40::/48", "36183"}, + {"2001:579:f084::/42", "22773"}, + {"2001:67c:5ec::/48", "34172"}, + {"2001:1248:5767::/44", "11172"}, + {"240a:a83d::/32", "144759"}, + {"240e:108:8a::/48", "134238"}, + {"2804:7ce0::/32", "271524"}, + {"2a03:920::/32", "203536"}, + {"2409:8c30:1010::/39", "9808"}, + {"240a:af45::/32", "146559"}, + {"2620:0:28a4::/48", "33522"}, + {"2800:160:189b::/42", "14259"}, + {"2804:37a8:121f::/32", "266428"}, + {"2a02:26f7:b649::/42", "20940"}, + {"2001:559:80a0::/48", "7016"}, + {"2001:559:c055::/46", "7015"}, + {"2402:800:f2c0::/42", "7552"}, + {"2409:8915:5600::/39", "56044"}, + {"2620:da::/48", "23177"}, + {"2801:104:8::/47", "27828"}, + {"2804:2178:5001::/32", "264556"}, + {"2a02:2430:8::/42", "39869"}, + {"2a0f:607:1008::/48", "7480"}, + {"2409:8a4c::/32", "9808"}, + {"2607:f4e8:15::/46", "22822"}, + {"2804:1390::/32", "263538"}, + {"2804:7440::/32", "270969"}, + {"2a01:190:15ea::/47", "1764"}, + {"2001:4b20:20::/63", "65505"}, + {"2401:4300:a::/48", "45184"}, + {"2409:8038:1100::/36", "9808"}, + {"2620:185:50::/36", "11396"}, + {"2804:16d8::/38", "262729"}, + {"2804:3c48::/32", "266201"}, + {"2a09:55c0::/32", "209451"}, + {"2a0f:e3c7::/40", "210542"}, + {"2001:559:8731::/46", "7015"}, + {"2604:d600:159a::/42", "32098"}, + {"2a02:26f7:d58d::/42", "20940"}, + {"2001:559:8618::/48", "33651"}, + {"2001:678:4b8::/48", "41985"}, + {"2001:678:584::/48", "5409"}, + {"2402:8100:30e0::/44", "55644"}, + {"240e:3b6:4c00::/35", "136200"}, + {"240e:67b:e600::/29", "4134"}, + {"2804:2d90::/34", "52682"}, + {"2409:8904:d590::/34", "24547"}, + {"2a00:d320::/29", "15600"}, + {"2404:d0::/44", "6648"}, + {"2606:f280:8000::/33", "46261"}, + {"2804:5f80::/32", "269104"}, + {"2804:8388::/32", "268843"}, + {"2a04:6640::/29", "3257"}, + {"2402:e000:5380::/41", "24499"}, + {"240a:aa28::/32", "145250"}, + {"2803:c0::/32", "264756"}, + {"2a12:df00::/35", "210462"}, + {"2c0f:f5c0:231::/39", "29465"}, + {"2001:678:118::/48", "57436"}, + {"2404:ed::/30", "703"}, + {"240a:a399::/32", "143571"}, + {"2a01:73c0::/39", "21450"}, + {"2a0d:c440::/29", "39305"}, + {"2001:559:71b::/48", "33491"}, + {"2804:290c::/32", "263994"}, + {"2a06:d00::/29", "200689"}, + {"2402:c840::/32", "37892"}, + {"2803:ecc0:600::/36", "264814"}, + {"2a06:e881:6900::/48", "208434"}, + {"240e:438:a240::/37", "4134"}, + {"2800:484:da00::/40", "14080"}, + {"2a02:26f7:eec1::/46", "20940"}, + {"2a02:26f7:f7cc::/48", "36183"}, + {"2c0f:f348::/44", "24757"}, + {"2402:4480:301::/46", "174"}, + {"2402:d000:106d::/43", "9329"}, + {"2600:1010:b140::/42", "6167"}, + {"2607:fb90:2100::/35", "21928"}, + {"2a02:26f7:c444::/48", "36183"}, + {"2404:8d06:4100::/35", "10089"}, + {"2409:8d14:400::/38", "56044"}, + {"240e:ff:c005::/48", "136200"}, + {"2800:6f0:9800::/40", "20207"}, + {"2804:4d48::/33", "53115"}, + {"2a02:26f7:110::/48", "36183"}, + {"2804:14d:72a3::/45", "28573"}, + {"2a01:9800::/35", "52070"}, + {"2a0a:2840:20::/43", "42962"}, + {"2a10:cc42:1400::/40", "20473"}, + {"2409:896a:3800::/39", "9808"}, + {"2602:feda:ae2::/47", "138181"}, + {"2620:12c:9006::/47", "395359"}, + {"2804:828::/40", "262354"}, + {"2804:308c::/32", "264960"}, + {"2a04:92c1:7::/30", "62240"}, + {"2001:559:548::/48", "33657"}, + {"240e:980:2000::/40", "4134"}, + {"2607:a400:8::/32", "21859"}, + {"2a02:ad8:5900::/32", "12389"}, + {"2001:559:c169::/48", "7725"}, + {"2600:1417:52::/48", "24319"}, + {"2800:160:1496::/42", "14259"}, + {"2804:7ff0::/32", "271719"}, + {"2a0e:b107:110::/47", "209294"}, + {"2c0f:ecf8::/32", "328441"}, + {"2607:de00:300::/32", "23498"}, + {"2406:4440:20::/41", "38008"}, + {"240a:aeee::/32", "146472"}, + {"2001:1248:9abf::/41", "11172"}, + {"2804:4cdc::/32", "267397"}, + {"2a0a:4540:220::/48", "16509"}, + {"240a:ad3c::/32", "146038"}, + {"2604:d600:c85::/43", "32098"}, + {"2800:160:1b53::/44", "14259"}, + {"2800:300:90a0::/41", "27651"}, + {"2804:71c4::/32", "270810"}, + {"2407:7700::/32", "132354"}, + {"240e:3bf:f100::/37", "134775"}, + {"2600:100f:a000::/44", "6167"}, + {"2600:1409:8::/46", "20940"}, + {"2600:6c20:e1f::/42", "20115"}, + {"2806:2a0:16::/44", "28548"}, + {"2a02:2e02:2cf0::/38", "12479"}, + {"2001:8b0:5000::/32", "20712"}, + {"2607:1280:1260::/44", "394972"}, + {"2610:8::/32", "3999"}, + {"2804:f60::/32", "263582"}, + {"2804:69e0::/32", "270297"}, + {"2001:559:3a2::/48", "7016"}, + {"2a02:26f7:d5c1::/46", "20940"}, + {"2a02:26f7:f801::/46", "20940"}, + {"2a09:e440::/46", "209185"}, + {"2806:2f0:3183::/42", "17072"}, + {"2400:fc00:8d50::/35", "45773"}, + {"2408:8456:1b40::/40", "17816"}, + {"240e:109:8027::/48", "133774"}, + {"240e:982:1000::/39", "137695"}, + {"2a02:728::/32", "25542"}, + {"2a04:4345:10::/44", "38965"}, + {"2001:67c:754::/48", "204254"}, + {"2001:67c:1314::/48", "15935"}, + {"240a:accb::/32", "145925"}, + {"240a:af8f::/32", "146633"}, + {"2804:1830::/32", "61922"}, + {"2a03:5640:f502::/45", "16509"}, + {"2001:250:83c::/48", "23910"}, + {"2001:559:8166::/48", "33657"}, + {"2607:8200:8000::/36", "46691"}, + {"2407:a600:2000::/36", "18004"}, + {"240e:108:1112::/42", "4134"}, + {"2620:cd:c000::/48", "32932"}, + {"2800:160:131d::/42", "14259"}, + {"2804:190::/38", "53165"}, + {"2804:55b4::/32", "267951"}, + {"2a03:b8c0:29::/46", "396253"}, + {"2a0e:b107:50::/44", "212267"}, + {"240a:ae70::/32", "146346"}, + {"240a:aeb6::/32", "146416"}, + {"2602:fe6a:100::/40", "397131"}, + {"2806:288:4010::/48", "28469"}, + {"2a06:c00::/30", "59414"}, + {"2001:559:c4b9::/48", "33661"}, + {"2001:67c:28a4::/48", "198794"}, + {"2402:8100:210e::/47", "55644"}, + {"2402:8100:2693::/44", "55644"}, + {"2607:ffd0:700::/46", "26994"}, + {"2a09:1500:13::/48", "208175"}, + {"2a10:6280::/29", "400177"}, + {"2401:d800:e40::/42", "7552"}, + {"240a:a675::/32", "144303"}, + {"2602:ffe2:10::/48", "53334"}, + {"2001:ee0:c840::/39", "45899"}, + {"2401:d800:2f40::/42", "7552"}, + {"2405:8740::/32", "46019"}, + {"2409:805e:1900::/34", "9808"}, + {"2804:28dc::/32", "263985"}, + {"2804:439c::/32", "267579"}, + {"2806:2f0:3143::/42", "17072"}, + {"2a00:9d20:101::/48", "30633"}, + {"2001:d70::/30", "7671"}, + {"2408:80f5:4000::/34", "4837"}, + {"240a:abf7::/32", "145713"}, + {"240e:100:30::/41", "137689"}, + {"2801:80:d0::/48", "28301"}, + {"2408:8456:5a40::/39", "17816"}, + {"2a02:26f7:d258::/48", "36183"}, + {"2804:2bb0::/32", "265169"}, + {"2408:8742::/32", "4837"}, + {"2600:2000:2200::/41", "31898"}, + {"2604:180:f1::/45", "3842"}, + {"2605:b100:300::/41", "577"}, + {"2607:c280::/32", "397168"}, + {"2804:20fc:603::/40", "264525"}, + {"2804:7718::/32", "271154"}, + {"2408:8459:ed10::/42", "17623"}, + {"2603:f500::/29", "396356"}, + {"2806:230:1501::/40", "265594"}, + {"2a01:8740:6::/32", "57344"}, + {"2a02:7c0::/32", "34816"}, + {"2a02:26f7:dc49::/46", "20940"}, + {"2a02:5be0::/47", "42427"}, + {"2402:5680::/36", "133798"}, + {"2801:80:6c0::/48", "262963"}, + {"2001:1838:9100::/34", "23352"}, + {"2402:8100:26d2::/45", "55644"}, + {"2408:8957:6100::/40", "17816"}, + {"2600:370f:3620::/47", "32261"}, + {"2801:18:6000::/48", "61496"}, + {"2804:694::/34", "262596"}, + {"2804:1210::/32", "263454"}, + {"2806:2f0:1160::/40", "17072"}, + {"2a09:d940::/29", "209202"}, + {"2001:218:2003::/39", "2914"}, + {"2001:559:8167::/48", "33667"}, + {"240e:61:4000::/35", "136198"}, + {"2a0b:dac0::/29", "205424"}, + {"2404:0:4000::/36", "9311"}, + {"2409:8c1e:c340::/31", "9808"}, + {"2606:5200::/32", "32477"}, + {"2804:28e4:50::/37", "28260"}, + {"2405:fc00::/32", "37989"}, + {"240e:964:8c00::/35", "4134"}, + {"2600:1009:b070::/40", "22394"}, + {"2607:f3a0:a008::/48", "399812"}, + {"2804:5f08::/32", "269072"}, + {"2a07:6cc0:50::/48", "61098"}, + {"240a:3:bfe::/48", "9605"}, + {"2a01:8840:f4::/48", "12041"}, + {"240e:108:2e::/48", "4134"}, + {"2804:77c0::/32", "271197"}, + {"2408:840d:ad00::/42", "17621"}, + {"240a:a830::/32", "144746"}, + {"2605:a40e::/47", "33363"}, + {"2606:4700:53::/45", "13335"}, + {"2607:f790:fff6::/48", "398351"}, + {"2800:68:41::/43", "61468"}, + {"2804:d0::/32", "28145"}, + {"2a0e:b107:1577::/48", "141011"}, + {"2001:503:ba3e::/48", "396574"}, + {"2001:559:c157::/48", "33662"}, + {"2402:d000:143::/35", "9329"}, + {"2a0b:1c0::/29", "51088"}, + {"2c0f:ee08::/48", "328249"}, + {"2001:67c:2ca0::/46", "50838"}, + {"2803:c600:10::/44", "27901"}, + {"2405:ec01::/35", "137412"}, + {"240a:a6d8::/32", "144402"}, + {"2600:140f:dc01::/34", "20940"}, + {"2620:cc::/48", "40816"}, + {"2804:1e90:1300::/32", "264436"}, + {"2a04:bc40:1dc1::/48", "35277"}, + {"2402:e280:215c::/46", "134674"}, + {"2600:1007:b1d0::/44", "6167"}, + {"2602:801:c000::/47", "2639"}, + {"2607:4000::/38", "73"}, + {"2804:14d:badf::/42", "28573"}, + {"2a0f:15c0::/29", "60262"}, + {"240a:acdf::/32", "145945"}, + {"240e:c2:1800::/37", "63835"}, + {"240e:37c:ac00::/33", "4134"}, + {"2001:218:8400::/33", "2914"}, + {"2001:500:104::/44", "21775"}, + {"2804:560::/32", "53009"}, + {"2a02:26f7:c359::/46", "20940"}, + {"2001:559:80a5::/48", "7922"}, + {"2001:df0:2c8::/48", "56178"}, + {"2604:cc80::/32", "62488"}, + {"2a00:1cd0:1::/46", "43408"}, + {"2a0c:8fc3:6400::/40", "23470"}, + {"2c0f:e8e0:40a0::/41", "327926"}, + {"2604:0:c2::/32", "7397"}, + {"2a00:79e1:f1a::/47", "395973"}, + {"2a04:1a80::/29", "207606"}, + {"2a0f:ac00::/29", "60781"}, + {"2600:1f01:4830::/47", "16509"}, + {"2605:7280::/45", "54600"}, + {"2605:b100:b80::/37", "577"}, + {"2804:1040:facf::/42", "263626"}, + {"2a02:130::/32", "42841"}, + {"2804:4ec::/47", "28668"}, + {"2a02:2e02:2530::/41", "12479"}, + {"240a:a01f::/32", "142681"}, + {"240e:974:1200::/48", "38283"}, + {"2600:d00::/31", "20161"}, + {"2804:3244:1c::/42", "265066"}, + {"2a03:2320::/32", "201648"}, + {"2605:4a80::/32", "11232"}, + {"2607:fd68::/32", "7029"}, + {"2a02:21a0::/29", "49743"}, + {"2001:253:117::/48", "142083"}, + {"2001:df0:e680::/48", "136369"}, + {"2001:4020::/32", "13110"}, + {"2402:800:6277::/44", "7552"}, + {"2403:8c00::/32", "24371"}, + {"2a02:26f7:c4c9::/42", "20940"}, + {"2a11:ed40::/29", "1239"}, + {"2001:559:8567::/48", "33668"}, + {"2620:e9:4000::/48", "394662"}, + {"2a07:59c6:eed4::/46", "56382"}, + {"2001:559:8072::/47", "22909"}, + {"240a:ad85::/32", "146111"}, + {"2a0f:3cc6::/32", "60735"}, + {"2409:896a:a400::/39", "9808"}, + {"2600:1417:5000::/48", "23693"}, + {"2a0c:1c80::/29", "203119"}, + {"2403:cb00:a000::/36", "58621"}, + {"2a02:26f7:e488::/48", "36183"}, + {"2a03:e480::/32", "15640"}, + {"240a:a836::/32", "144752"}, + {"2804:7700::/32", "271148"}, + {"2a02:26f7:ccc9::/46", "20940"}, + {"2a02:5400:808::/48", "33353"}, + {"2a0b:f8c0::/29", "44297"}, + {"2001:559:8239::/48", "7725"}, + {"2001:df5:fb80::/48", "141727"}, + {"2001:559:7bd::/48", "7922"}, + {"2001:c20:4865::/48", "9255"}, + {"2001:df0:4e80::/48", "139035"}, + {"2001:4130:18::/48", "24725"}, + {"2604:6d00:2100::/48", "36223"}, + {"2620:128:e008::/48", "22317"}, + {"2806:20d:1121::/38", "32098"}, + {"2a00:4800:a0::/44", "13124"}, + {"2a01:8be0::/29", "61956"}, + {"2a02:ac8::/32", "34594"}, + {"2a02:67e0:4000::/32", "203148"}, + {"2001:559:c24c::/48", "33652"}, + {"2001:7fb:ff12::/44", "12654"}, + {"2001:df0:95::/48", "7667"}, + {"2402:800:390f::/43", "7552"}, + {"2406:f680:7101::/32", "132298"}, + {"2804:1af8::/32", "61701"}, + {"2804:1cc4:4003::/36", "61674"}, + {"2804:7f3c::/32", "271675"}, + {"2a0d:a6c0::/29", "39724"}, + {"2a0e:66c0::/29", "44486"}, + {"2607:8200:4000::/36", "33561"}, + {"2a03:e140:1::/48", "12722"}, + {"2a10:6380::/29", "204790"}, + {"2804:845c::/32", "272256"}, + {"2804:85fc::/32", "272612"}, + {"2a0f:5707:aa40::/44", "48126"}, + {"2001:67c:11a8::/48", "50695"}, + {"2001:67c:2600::/48", "15655"}, + {"2409:8958:ce44::/43", "9808"}, + {"2620:1d6:ff0::/46", "2571"}, + {"2a02:26f7:d948::/48", "36183"}, + {"2a0b:ddc0::/29", "59970"}, + {"2c0f:f0c0::/31", "37035"}, + {"2001:559:816a::/47", "33657"}, + {"2402:800:551d::/42", "7552"}, + {"2409:8050:1802::/40", "56047"}, + {"2800:370:36::/48", "28006"}, + {"2804:14c:bbae::/47", "28573"}, + {"2a02:358::/32", "12822"}, + {"2408:8956:1400::/40", "17622"}, + {"240a:ab3b::/32", "145525"}, + {"2600:380:f1d1::/48", "20057"}, + {"2801:80:4b0::/48", "52798"}, + {"2a02:26f7:c681::/46", "20940"}, + {"2402:1440:31::/39", "63689"}, + {"2405:f080::/38", "136907"}, + {"2a00:1288:112::/47", "34010"}, + {"2a0b:f00::/29", "49191"}, + {"2001:559:c057::/48", "7922"}, + {"2001:b28:5::/33", "42065"}, + {"2804:f00::/32", "263562"}, + {"2804:7f38::/32", "271674"}, + {"2806:250:400::/40", "28545"}, + {"2a09:ff40::/32", "209146"}, + {"2001:559:c3e7::/44", "7922"}, + {"2402:e380:31e::/48", "142030"}, + {"2a0e:97c0:141::/45", "211946"}, + {"2401:d800:f320::/41", "7552"}, + {"2a00:b260::/32", "51417"}, + {"2a02:26f7:cd50::/48", "36183"}, + {"2405:3f00::/31", "38719"}, + {"2604:a840:8::/48", "6233"}, + {"2806:20d:520b::/45", "32098"}, + {"2806:230:6007::/48", "11888"}, + {"2806:370:7340::/40", "28403"}, + {"2a0f:340::/29", "16509"}, + {"2001:468:26e2::/36", "11537"}, + {"240a:aeca::/32", "146436"}, + {"240e:1:800::/37", "137691"}, + {"2620:11c::/46", "27647"}, + {"2a00:9b40::/48", "44684"}, + {"2a02:2e02:3000::/40", "12479"}, + {"2001:559:869e::/48", "7922"}, + {"2402:a040::/32", "137522"}, + {"2600:6c3b:31::/37", "20115"}, + {"2606:ae00:6000::/41", "7287"}, + {"2620:13e:500f::/48", "206885"}, + {"2a02:2010:2320::/45", "20978"}, + {"2a05:f340::/29", "41827"}, + {"2001:678:e30::/48", "48108"}, + {"2402:800:6901::/35", "7552"}, + {"2600:1014:a100::/44", "6167"}, + {"2001:4410:1100::/34", "132040"}, + {"2603:f660::/24", "397165"}, + {"2604:200:14::/32", "33132"}, + {"2a02:2348::/32", "3301"}, + {"2a02:cbf0::/29", "61157"}, + {"2a0c:a980::/29", "210198"}, + {"240a:a990::/32", "145098"}, + {"2606:1980:4::/48", "54994"}, + {"2804:2390::/32", "264170"}, + {"2409:8a56:2800::/32", "56040"}, + {"240a:a457::/32", "143761"}, + {"2600:6c38:130::/41", "20115"}, + {"2a03:db80:4c84::/48", "5501"}, + {"2c0f:ed40::/32", "328461"}, + {"2406:7400:b7::/44", "24309"}, + {"240e:a7:7fc6::/44", "140510"}, + {"2804:7258::/32", "270848"}, + {"2001:df4:5a80::/48", "59185"}, + {"2400:c540::/46", "59238"}, + {"2604:72c0::/32", "26095"}, + {"2409:8704:c500::/34", "24547"}, + {"2610:b0:2030::/41", "3573"}, + {"2a05:35c0:3::/29", "60781"}, + {"240a:a26d::/32", "143271"}, + {"2804:7f74:8001::/33", "271689"}, + {"2a00:f826:4::/46", "34549"}, + {"2a02:26f7:c989::/42", "20940"}, + {"2400:5280:fc00::/38", "63199"}, + {"2401:d800:73c2::/42", "7552"}, + {"2408:840c:2900::/40", "17621"}, + {"240a:a548::/32", "144002"}, + {"2001:559:362::/48", "7725"}, + {"2402:800:5e60::/43", "7552"}, + {"2407:500:4111::/34", "58940"}, + {"2409:8904:2940::/38", "24547"}, + {"2605:9d80:a021::/48", "36678"}, + {"2a01:111:5000::/32", "8075"}, + {"2a02:888:8150::/48", "48695"}, + {"2a03:db80:4811::/46", "680"}, + {"2607:f8e8::/32", "46208"}, + {"2804:5ea8::/32", "269048"}, + {"2a0c:a6c0:1::/48", "21473"}, + {"2402:800:5bd3::/44", "7552"}, + {"2408:840d:b600::/42", "17621"}, + {"240a:a4fc::/32", "143926"}, + {"2600:1000:d040::/34", "22394"}, + {"2804:e8c:a000::/33", "52561"}, + {"2804:4338::/32", "267556"}, + {"2001:df6:180:200::/48", "141731"}, + {"2401:d800:b0f0::/39", "7552"}, + {"2403:300:a09::/48", "714"}, + {"240e:3b5:2200::/37", "136198"}, + {"2600:1417:7801::/32", "20940"}, + {"2804:67bc::/32", "269647"}, + {"2a02:26f7:dbc4::/48", "36183"}, + {"2a02:2e02:2420::/41", "12479"}, + {"2a05:a282::/32", "31586"}, + {"2a09:9e40::/48", "44364"}, + {"2001:559:837a::/48", "33651"}, + {"2001:df2:c680::/48", "139980"}, + {"2408:8459:2130::/41", "17622"}, + {"240e:1e:1000::/36", "134772"}, + {"2602:fd47::/36", "398461"}, + {"2804:37f0:c100::/35", "266445"}, + {"2a07:ad00::/30", "200544"}, + {"2a0e:59c0::/29", "207187"}, + {"2001:559:442::/48", "22258"}, + {"2001:559:c302::/47", "7015"}, + {"2001:12f0:b0a::/43", "1916"}, + {"2001:1a10:200::/36", "8781"}, + {"2602:feda:3::/45", "46997"}, + {"2804:4f8:6001::/39", "28263"}, + {"2804:6b08::/32", "270373"}, + {"2001:df7:2f00::/48", "138114"}, + {"2600:6c38:e3b::/39", "20115"}, + {"2605:540::/32", "62640"}, + {"2804:4544:b000::/40", "266915"}, + {"2a00:ec8:407::/32", "38930"}, + {"2a06:d680::/29", "203593"}, + {"2401:1c00:6100::/32", "38809"}, + {"2401:d800:b4f0::/39", "7552"}, + {"2606:2b00::/32", "5723"}, + {"2a0e:97c0:500::/46", "210969"}, + {"240a:a8d3::/32", "144909"}, + {"2607:fcf8:bbbc::/33", "26788"}, + {"2a02:2e02:5f0::/38", "12479"}, + {"2409:8014:1010::/34", "56044"}, + {"2605:a401:89fa::/38", "33363"}, + {"2a02:26f0:3101::/38", "20940"}, + {"2a0f:36c0::/29", "60262"}, + {"2001:559:c2a2::/48", "33651"}, + {"2001:67c:7d8::/48", "31676"}, + {"2406:3000:43::/44", "4657"}, + {"2600:1419:6::/44", "20940"}, + {"2a01:8840:ba::/45", "12041"}, + {"2a04:340::/29", "200828"}, + {"2a04:4d40::/29", "16019"}, + {"2a04:8f80:2000::/36", "15466"}, + {"2a11:7e40::/32", "208626"}, + {"2001:df3:fa80::/48", "9498"}, + {"2405:7f00:b1a0::/33", "133414"}, + {"2620:13f:7007::/48", "55706"}, + {"2804:8490::/32", "272268"}, + {"2001:df1:780::/48", "136644"}, + {"2804:2214:800c::/33", "28177"}, + {"2001:559:822d::/48", "33652"}, + {"2001:579:b004::/41", "22773"}, + {"2405:1e00::/44", "17771"}, + {"2804:3130::/32", "264999"}, + {"2804:57bc::/33", "268083"}, + {"2a06:9f80::/29", "61138"}, + {"2001:df0:62::/48", "38040"}, + {"2001:df5:c300::/48", "133876"}, + {"240e:108:1167::/48", "58563"}, + {"2605:6c00:9::/48", "10255"}, + {"2804:63f0::/32", "269393"}, + {"2a02:2ba8::/32", "14717"}, + {"2001:df0:fe::/48", "56098"}, + {"2408:8957:6600::/40", "17622"}, + {"240a:a594::/32", "144078"}, + {"240a:ad4c::/32", "146054"}, + {"240e:3b1:4c00::/35", "136200"}, + {"240a:a89f::/32", "144857"}, + {"2804:2630::/32", "264331"}, + {"2a00:d340:ffe0::/48", "41321"}, + {"2a0d:2407::/32", "62068"}, + {"2001:559:7bb::/48", "33287"}, + {"2409:8051:3802::/40", "56047"}, + {"2600:6c34:298::/48", "33588"}, + {"2804:4558::/32", "266920"}, + {"2a02:26f7:f4c0::/48", "36183"}, + {"2a03:2880:f04d::/43", "32934"}, + {"2a0c:f100::/29", "212880"}, + {"2a12:a240::/29", "400522"}, + {"2c0f:ee00::/47", "37721"}, + {"2a02:26f7:e0::/48", "36183"}, + {"2a0a:9fc0::/29", "31673"}, + {"2001:a08::/32", "39326"}, + {"2402:800:4400::/35", "7552"}, + {"2600:40ff:fc10::/45", "1321"}, + {"2001:250:6809::/46", "24368"}, + {"2405:f280:35::/32", "131464"}, + {"2600:140b:8801::/38", "20940"}, + {"2605:4a00:121::/44", "14361"}, + {"2607:da80::/32", "13760"}, + {"2804:fe0:24b0::/32", "263049"}, + {"2a01:158::/32", "3249"}, + {"2a02:d08::/32", "34762"}, + {"240a:a56d::/32", "144039"}, + {"240e:1a:2000::/29", "4134"}, + {"2408:8459:1d30::/41", "17622"}, + {"240a:abbd::/32", "145655"}, + {"2607:fc38::/32", "17378"}, + {"2a10:6900::/29", "399975"}, + {"2404:c400:a000::/33", "9328"}, + {"2409:8a51:500::/38", "56047"}, + {"240a:ab6e::/32", "145576"}, + {"2600:1419:3601::/36", "20940"}, + {"2801:80:a00::/48", "263279"}, + {"2a04:2e80:5::/48", "208407"}, + {"2a04:f580:9040::/48", "4809"}, + {"2a06:6540:1201::/48", "8220"}, + {"2c0f:ed28::/32", "328453"}, + {"2001:559:82f2::/48", "33659"}, + {"240a:ad17::/32", "146001"}, + {"2a02:26f7:b685::/46", "20940"}, + {"2a06:d340::/29", "25109"}, + {"2001:559:38e::/48", "33652"}, + {"2001:559:871d::/48", "33657"}, + {"2400:cb00:130::/48", "13335"}, + {"2603:c0fe::/35", "54253"}, + {"2804:2c08::/32", "265189"}, + {"2a0b:4340:80::/48", "134176"}, + {"2001:559:1f3::/48", "33652"}, + {"2402:e280:3db4::/33", "134674"}, + {"240a:a344::/32", "143486"}, + {"2804:5a90::/32", "268781"}, + {"2403:b900::/32", "4382"}, + {"2406:840:fd00::/45", "134993"}, + {"2602:fe78::/36", "33360"}, + {"2804:796c::/32", "271304"}, + {"2a02:26f7:bcc8::/48", "36183"}, + {"2a02:26f7:ca45::/46", "20940"}, + {"2a05:bd40:cd13::/48", "29264"}, + {"2404:7c00:30::/41", "45650"}, + {"240e:44d:2a80::/41", "4134"}, + {"2607:9e00:3002::/33", "30536"}, + {"2a0e:6540:53a::/48", "208364"}, + {"2001:559:c041::/48", "7922"}, + {"2409:8750::/38", "56047"}, + {"2409:896a:ae00::/39", "9808"}, + {"240a:a6f5::/32", "144431"}, + {"240a:abc6::/32", "145664"}, + {"2604:65c0:101::/32", "14585"}, + {"2804:761c::/32", "271090"}, + {"2804:7b5c:a::/32", "271427"}, + {"2a00:8a04:8000::/44", "34414"}, + {"2a11:5700:b00b::/48", "212149"}, + {"2001:3c8:d10a::/34", "4621"}, + {"2001:4d0:6119::/38", "297"}, + {"2001:978:1e02::/47", "174"}, + {"2804:4c08::/32", "267344"}, + {"2a06:ba80::/29", "50042"}, + {"2404:efc0:1300::/47", "10122"}, + {"2408:8459:1d50::/38", "17816"}, + {"240e:45c:a600::/40", "131285"}, + {"2620:103:e019::/48", "13893"}, + {"2804:78bc::/32", "271262"}, + {"2a0b:6b86:f00::/42", "211387"}, + {"2001:559:c031::/48", "33659"}, + {"2400:cb00:443::/48", "13335"}, + {"2405:4340::/48", "135987"}, + {"240e:967:3000::/33", "4134"}, + {"2001:559:c46c::/48", "7922"}, + {"240e:267:4000::/38", "140332"}, + {"2409:804b:290a::/48", "24445"}, + {"2001:559:4de::/48", "7922"}, + {"2804:14c:475::/46", "28573"}, + {"2a0e:b107:1204::/48", "142130"}, + {"2001:4de0:4000::/39", "33438"}, + {"2409:800c:3003::/30", "56042"}, + {"2620:128:7000::/48", "32030"}, + {"2804:680::/43", "262589"}, + {"2a01:aa20::/32", "3178"}, + {"2001:da8:b813::/48", "24372"}, + {"2402:7d80:6666::/48", "63583"}, + {"2406:3400:201::/37", "10143"}, + {"2409:8904:3ba0::/37", "24547"}, + {"240a:ad60::/32", "146074"}, + {"2600:1419:3e01::/33", "20940"}, + {"2a02:26f7:b789::/46", "20940"}, + {"2a02:26f7:f8d4::/48", "36183"}, + {"240a:af75::/32", "146607"}, + {"2804:2af0:5::/32", "265126"}, + {"2a00:ad00:2020::/30", "41897"}, + {"2a12:8640::/29", "49581"}, + {"2001:559:8169::/48", "7015"}, + {"2001:13c7:6013::/48", "52404"}, + {"2401:4900:3ee0::/44", "45609"}, + {"2408:8956:2600::/40", "17622"}, + {"2409:8087:560::/36", "24547"}, + {"2602:feda:dc0::/44", "142427"}, + {"2606:18c0:c::/47", "61317"}, + {"2801:14:f000::/48", "266869"}, + {"2a02:26f7:ec4d::/46", "20940"}, + {"2a09:2600::/29", "197036"}, + {"2001:559:80c9::/46", "7725"}, + {"2001:1248:55b3::/44", "11172"}, + {"2402:8100:27f2::/45", "55644"}, + {"240a:aeff::/32", "146489"}, + {"2607:f910::/32", "31753"}, + {"2001:559:3ad::/48", "20214"}, + {"2001:559:c098::/48", "33657"}, + {"2402:8100:2500::/44", "55644"}, + {"2402:a800:c000::/34", "9601"}, + {"240e:3b4::/35", "134773"}, + {"2a0e:aa07:e00e::/48", "206843"}, + {"240a:add5::/32", "146191"}, + {"2806:2f0:4343::/42", "17072"}, + {"2a01:c50e:bf00::/33", "12479"}, + {"2a06:e8c0::/29", "8285"}, + {"2001:579:8f8::/38", "22773"}, + {"240a:ae27::/32", "146273"}, + {"2804:2e84::/44", "265350"}, + {"2a04:4e40:6000::/48", "54113"}, + {"2400:cb00:267::/44", "13335"}, + {"240a:a0e2::/32", "142876"}, + {"240a:a806::/32", "144704"}, + {"2401:91c0::/32", "136815"}, + {"240e:3bc:5600::/34", "4134"}, + {"2606:2cc0::/46", "54113"}, + {"2607:d500:600::/47", "13768"}, + {"2620:ac:c000::/48", "21630"}, + {"2800:484:cf00::/40", "14080"}, + {"2a01:488:bb0c::/48", "20773"}, + {"2a01:5043::/48", "202196"}, + {"2a12:7c05::/30", "210625"}, + {"2001:559:283::/48", "33662"}, + {"2400:6700:ff01::/40", "16509"}, + {"2604:6840:2000::/38", "33438"}, + {"2804:6610::/32", "269531"}, + {"2001:468:f001::/40", "11537"}, + {"2001:67c:54::/48", "47207"}, + {"2600:6c38:f42::/44", "20115"}, + {"2804:6d90::/32", "270541"}, + {"2a01:e0a:600::/29", "12322"}, + {"2001:559:c1d0::/48", "33287"}, + {"2001:590:3c02::/32", "3257"}, + {"240a:aeed::/32", "146471"}, + {"240e:108:1091::/42", "4134"}, + {"2a0f:5707:ab2c::/48", "60404"}, + {"2a0f:8644:b00b::/48", "212149"}, + {"2001:3a0::/32", "7521"}, + {"2001:559:86a5::/46", "33651"}, + {"2620:137:5090::/42", "10851"}, + {"2804:12dc::/32", "263501"}, + {"2804:7320::/32", "270897"}, + {"2806:260:1000::/44", "13999"}, + {"2806:2f0:4741::/46", "17072"}, + {"2a0e:b107:1030::/48", "213045"}, + {"2406:20c0:c001::/34", "140423"}, + {"2607:f220:200::/46", "19050"}, + {"2800:160:1729::/45", "14259"}, + {"2a03:f003:2002::/38", "25472"}, + {"2404:bf40:a142::/40", "139084"}, + {"2600:5400:e001::/39", "19108"}, + {"2a02:26f0:11c::/46", "20940"}, + {"2001:559:346::/44", "33491"}, + {"2401:7f40::/32", "136908"}, + {"2406:6940::/41", "141047"}, + {"2804:f70::/32", "270814"}, + {"2804:1878::/39", "61935"}, + {"2804:450c::/32", "267669"}, + {"2a02:120::/47", "29396"}, + {"2804:1e0c::/32", "264141"}, + {"2a04:4a00::/29", "47440"}, + {"2001:678:82c::/48", "59776"}, + {"2409:8055:5d::/46", "56040"}, + {"240a:a8e4::/32", "144926"}, + {"2a03:3380:3::/32", "47169"}, + {"2001:da8:d825::/48", "23910"}, + {"2a02:26f7:c646::/47", "20940"}, + {"2001:fd8:3430::/44", "4775"}, + {"2605:fb40::/33", "40050"}, + {"2620:13a:6001::/48", "33491"}, + {"2804:14d:7e34::/44", "28573"}, + {"2a02:2e02:83b0::/41", "12479"}, + {"2a03:2980::/32", "49641"}, + {"2404:8d06:a100::/36", "10089"}, + {"2a00:4940::/47", "198279"}, + {"2a03:5680::/32", "15495"}, + {"2406:9dc0:70::/44", "212705"}, + {"240e:5a:4840::/40", "140301"}, + {"2600:1419:7c00::/48", "35204"}, + {"2620:91:c004::/47", "54900"}, + {"2a00:1178::/46", "35415"}, + {"2001:559:c1e1::/48", "7922"}, + {"2001:4b30::/29", "9036"}, + {"2a02:26f0:f901::/38", "20940"}, + {"2001:250:5828::/48", "138371"}, + {"2001:678:814::/48", "64404"}, + {"2400:fc00:4a02::/44", "45773"}, + {"2607:f220:411::/48", "70"}, + {"2804:2c74::/32", "265220"}, + {"2a00:1fa1:8000::/30", "8359"}, + {"2001:913:5000::/36", "209090"}, + {"2408:840c:d000::/40", "17621"}, + {"2409:8904:56b0::/39", "24547"}, + {"2607:f750:d00::/40", "23473"}, + {"2803:a480::/32", "262192"}, + {"2804:b:c009::/46", "14840"}, + {"2804:1bf0:b::/45", "61758"}, + {"2806:230:400a::/48", "265594"}, + {"2a02:26f7:e941::/46", "20940"}, + {"2a0f:b7c0::/29", "49688"}, + {"2406:5d40:2::/32", "141009"}, + {"240e:3b9:2c00::/35", "134774"}, + {"2600:1010:9e00::/44", "6167"}, + {"2a01:6d80::/36", "13307"}, + {"2a02:6680:210c::/42", "16116"}, + {"2a04:edc0::/29", "200437"}, + {"2001:250:23f::/48", "24357"}, + {"2001:559:568::/48", "7015"}, + {"2001:559:c115::/48", "33489"}, + {"2600:1017:b4a0::/44", "22394"}, + {"2a02:23c8::/40", "24592"}, + {"2a02:26f7:bb48::/48", "36183"}, + {"2409:8052:100::/37", "9808"}, + {"240a:aa2a::/32", "145252"}, + {"2a02:26f7:f285::/46", "20940"}, + {"2001:4ba2::/32", "39519"}, + {"2400:6300:1f::/48", "38746"}, + {"240e:438:3440::/38", "4134"}, + {"2605:7c0:1000::/48", "19382"}, + {"2620:123:2003::/45", "30103"}, + {"2804:28e4:6::/44", "28260"}, + {"2804:3604::/32", "266321"}, + {"2a0f:3400::/29", "203698"}, + {"2407:b9c0::/36", "142616"}, + {"2606:7380::/32", "11763"}, + {"2607:f110:e130::/41", "21889"}, + {"2620:4d:4000::/48", "62597"}, + {"2001:250:5065::/43", "24361"}, + {"2001:559:82b8::/48", "7922"}, + {"240e:108:11e1::/48", "134764"}, + {"2804:cdc::/34", "52565"}, + {"2804:8618::/32", "272620"}, + {"2400:63a0::/45", "139590"}, + {"2408:8456:1800::/42", "17622"}, + {"2804:1c6c::/32", "61655"}, + {"2a02:ee80:4219::/42", "3573"}, + {"2a0a:c740:4::/47", "204170"}, + {"2001:559:c0db::/45", "33657"}, + {"2600:6c39:605::/46", "20115"}, + {"2a07:22c1:ffe5::/48", "207740"}, + {"2a0e:8f02:213f::/48", "211722"}, + {"2403:cd80::/32", "135025"}, + {"2408:8459:2110::/42", "17623"}, + {"2600:6c3a:821::/46", "20115"}, + {"2a02:2f0::/29", "42965"}, + {"2a04:bc40:1dc0::/48", "44750"}, + {"2a0a:ed80::/29", "49127"}, + {"2a0c:2f40::/30", "59829"}, + {"2403:71c0:1000::/48", "43959"}, + {"2406:a4c0::/32", "141120"}, + {"2408:8456:b640::/36", "17816"}, + {"240e:982:6200::/37", "4134"}, + {"2600:100b:b130::/40", "6167"}, + {"2620:9b:4000::/48", "26569"}, + {"2804:2264::/32", "264096"}, + {"2a02:2f80::/29", "200064"}, + {"2a10:2f00:124::/48", "205635"}, + {"2404:4600::/46", "10158"}, + {"2409:8053:2800::/47", "56047"}, + {"2a02:21b0::/31", "57370"}, + {"2001:559:8670::/48", "33660"}, + {"2001:1248:9613::/44", "11172"}, + {"2001:1520:100::/47", "34011"}, + {"2001:b033::/23", "3462"}, + {"2402:a00:10f::/41", "45916"}, + {"2402:b801:2900::/38", "18371"}, + {"2603:f000::/27", "397165"}, + {"2a0e:aa07:f050::/48", "138632"}, + {"2001:67c:748::/48", "202188"}, + {"2001:1900:2283::/48", "3356"}, + {"240e:9:6000::/36", "134419"}, + {"2600:e001::/32", "22995"}, + {"2804:4c24::/32", "263103"}, + {"2001:67c:670::/48", "201824"}, + {"2001:12d8:81::/32", "1251"}, + {"2401:d800:21d0::/42", "7552"}, + {"2408:8459:1810::/42", "17623"}, + {"2a05:ff00::/31", "202592"}, + {"2a06:300::/29", "51093"}, + {"2001:250:3c03::/48", "23910"}, + {"2001:ab0::/36", "15594"}, + {"2001:1248:9855::/42", "11172"}, + {"2404:130::/32", "24226"}, + {"2804:419c::/32", "267444"}, + {"240a:a966::/32", "145056"}, + {"2a0a:600::/29", "64431"}, + {"2a0a:2380::/48", "39845"}, + {"2001:1a11:b6::/48", "8781"}, + {"2804:5ca4::/32", "268921"}, + {"2804:7e90::/37", "271632"}, + {"2607:8b00::/48", "36454"}, + {"2804:7c8:f000::/36", "262323"}, + {"2605:2b00::/32", "19881"}, + {"2804:725c::/32", "262506"}, + {"2a01:63c0::/32", "31319"}, + {"2402:e280:2126::/44", "134674"}, + {"2602:fd92:400::/40", "210842"}, + {"2602:ff62::/40", "61317"}, + {"2a00:ebc0::/32", "3190"}, + {"2a04:7a00::/32", "6786"}, + {"2a05:f280::/29", "30884"}, + {"2001:4b20:20:2::/39", "34288"}, + {"240a:accf::/32", "145929"}, + {"2804:6d34::/32", "53114"}, + {"2a01:cb22:8000::/34", "3215"}, + {"2a02:26f7:d0c9::/42", "20940"}, + {"2a02:7080:3000::/36", "48024"}, + {"2001:559:8540::/48", "33652"}, + {"2401:d800:71c0::/42", "7552"}, + {"240a:ac8b::/32", "145861"}, + {"2a00:fd40:8::/47", "204402"}, + {"2a06:a0c0::/29", "43016"}, + {"2a0b:4340:99::/48", "205610"}, + {"2001:579:407f::/40", "22773"}, + {"2001:448a:1090::/42", "7713"}, + {"2600:6c7f:9070::/48", "20115"}, + {"2a02:26f7:fb01::/46", "20940"}, + {"2a02:26f7:fb04::/48", "36183"}, + {"2c0f:4000::/32", "1828"}, + {"2001:559:840b::/48", "7016"}, + {"2001:df0:230::/48", "56237"}, + {"2408:873d:3000::/32", "4837"}, + {"2804:214:8300::/37", "26615"}, + {"2a01:8280::/34", "44735"}, + {"2a0a:10c0::/29", "206270"}, + {"2001:2d8::/32", "9644"}, + {"2001:559:7ae::/48", "7016"}, + {"2001:df6:6100::/48", "134934"}, + {"2407:1240:1::/48", "141197"}, + {"240a:a380::/32", "143546"}, + {"2603:90f5:1800::/40", "33363"}, + {"2804:4488:8010::/44", "262480"}, + {"2804:78f4::/32", "271276"}, + {"240e:3bd::/35", "134773"}, + {"2607:fc68::/42", "2711"}, + {"2a02:26f7:f8c0::/48", "36183"}, + {"2a0b:ad40::/29", "205493"}, + {"2a0c:ac0::/29", "60843"}, + {"2001:4408:7c01::/40", "4758"}, + {"240e:108:1070::/48", "140061"}, + {"240e:958:1200::/40", "142608"}, + {"2600:1488:6302::/41", "20940"}, + {"2804:12d8::/32", "263500"}, + {"2800:160:17a0::/45", "14259"}, + {"2a00:bdc0:e006::/48", "60476"}, + {"2a01:8b40:2000::/32", "203165"}, + {"2a02:26f0:3601::/39", "20940"}, + {"2a03:db80:4414::/48", "5501"}, + {"2403:5740::/32", "135872"}, + {"240a:af37::/32", "146545"}, + {"2a02:26f0:7e01::/39", "20940"}, + {"2a04:f580:9060::/48", "4809"}, + {"240e:a8:e400::/27", "4134"}, + {"2604:d600:1506::/43", "32098"}, + {"2001:559:20f::/48", "7016"}, + {"2001:67c:286c::/48", "58148"}, + {"2408:840c:f00::/40", "17621"}, + {"240e:44d:5080::/41", "4134"}, + {"2800:2a0:9501::/33", "27947"}, + {"2a01:b380::/32", "196735"}, + {"2c0f:f810::/32", "36907"}, + {"2001:559:8724::/48", "33650"}, + {"2001:4998:58::/45", "26101"}, + {"2400:9840::/32", "136217"}, + {"240e:185::/30", "4134"}, + {"2604:1cc0::/32", "21559"}, + {"2804:1268::/32", "263475"}, + {"2001:b000:59c::/48", "131660"}, + {"2401:b0c0:1000::/43", "136941"}, + {"2620:109:c00e::/48", "14413"}, + {"2a00:1f60::/32", "8218"}, + {"2a00:ad40:10::/44", "57052"}, + {"2a01:3f7::/48", "57021"}, + {"2c0f:ec68::/32", "37675"}, + {"2001:df3:d500::/48", "137399"}, + {"2a00:afc0::/32", "48339"}, + {"2409:e:e2::/48", "142501"}, + {"240a:a388::/32", "143554"}, + {"240e:424::/30", "4134"}, + {"2600:141c:2801::/35", "20940"}, + {"2600:2000:f010::/48", "33517"}, + {"2a02:2010:2610::/45", "20978"}, + {"2408:8459:7e50::/32", "17816"}, + {"2800:381::/33", "10834"}, + {"2804:1ca4:8041::/40", "263010"}, + {"2a01:ce8c::/32", "51964"}, + {"2a03:c140::/29", "13101"}, + {"2a03:cac0:2::/48", "61149"}, + {"2001:579:92a8::/43", "22773"}, + {"2600:1017:b4b0::/41", "6167"}, + {"2800:bf0:285::/46", "52257"}, + {"2804:25fc::/32", "264316"}, + {"2407:b380::/32", "45062"}, + {"240e:3bd:ec00::/35", "140314"}, + {"2401:d980:1100::/40", "10138"}, + {"2001:df3:804::/44", "22787"}, + {"2001:4878:a259::/48", "12222"}, + {"2403:2c00:c002::/36", "4058"}, + {"240a:a106::/32", "142912"}, + {"240a:afbc::/32", "146678"}, + {"2600:100a:d000::/43", "6167"}, + {"2001:559:288::/48", "33657"}, + {"2406:f480::/32", "136969"}, + {"240a:a624::/32", "144222"}, + {"240e:629::/25", "4134"}, + {"2600:1411:8001::/30", "20940"}, + {"2001:da8:e000::/45", "24367"}, + {"2001:da8:e80e::/48", "23910"}, + {"2405:f140::/32", "138754"}, + {"2409:8751:700::/36", "56047"}, + {"2409:8a6b:200::/29", "9808"}, + {"240a:ac34::/32", "145774"}, + {"2604:880:212::/45", "29802"}, + {"2a01:8840:32::/45", "12041"}, + {"2a02:578:3c00::/33", "9031"}, + {"2001:67c:1720::/48", "60918"}, + {"2001:1900:221e::/48", "14627"}, + {"240a:ad5a::/32", "146068"}, + {"2605:a404:3ee::/37", "33363"}, + {"2804:14c:7d89::/43", "28573"}, + {"2a02:26f7:d8c8::/48", "36183"}, + {"2a0a:8fc0::/29", "60783"}, + {"2a10:f45::/32", "210107"}, + {"2001:480:a0::/47", "5132"}, + {"2001:43b8::/32", "30844"}, + {"2406:1a40::/48", "55320"}, + {"2a0e:b107:b20::/44", "63279"}, + {"2001:67c:13c4::/48", "196978"}, + {"240e:3b3:9c00::/34", "140310"}, + {"2c0f:eb00:1200::/40", "327941"}, + {"2408:8956:3200::/40", "17622"}, + {"2605:f500:404::/39", "1828"}, + {"2606:7f00:100::/40", "32307"}, + {"2804:67a4:121::/46", "269641"}, + {"2a00:4120:8000:3::/61", "20804"}, + {"2a02:26f0:a2::/45", "20940"}, + {"2a02:26f7:d381::/46", "20940"}, + {"2001:559:80f8::/48", "33652"}, + {"240e:12:800::/37", "134765"}, + {"2803:7200:8016::/44", "27696"}, + {"2804:5404::/32", "268623"}, + {"2804:5bc8::/32", "268869"}, + {"2a0f:85c1:230::/47", "207831"}, + {"2001:67c:11c0::/48", "206082"}, + {"2406:4b00::/44", "132602"}, + {"2604:23c0::/32", "36792"}, + {"2a00:1eb8:c004::/48", "43811"}, + {"2a11:1400::/29", "211344"}, + {"2406:840:f90b::/48", "139833"}, + {"2409:8c54:b000::/44", "141425"}, + {"240e:45c:5100::/40", "140529"}, + {"2801:1bc::/44", "27951"}, + {"2804:314:3001::/33", "61568"}, + {"2a02:26f7:f649::/46", "20940"}, + {"2a03:3f40:3::/40", "50673"}, + {"2a04:1b00:12::/47", "61007"}, + {"2409:8c85:5e01::/34", "9808"}, + {"2a0a:981::/32", "50113"}, + {"2001:1a11:7d::/40", "8781"}, + {"2402:800:5747::/43", "7552"}, + {"2408:8456:2600::/42", "17622"}, + {"2600:380:4600::/39", "20057"}, + {"2a06:5580::/39", "21145"}, + {"2a0c:2c40::/32", "58110"}, + {"2a11:3780::/29", "34734"}, + {"2001:67c:2594::/48", "57496"}, + {"2001:da8:b806::/48", "23910"}, + {"2404:e801:101f::/48", "45938"}, + {"2409:8d02::/32", "38019"}, + {"2800:bf0:a7::/44", "52257"}, + {"2c0f:ebd0:2200::/32", "328608"}, + {"2408:8756:e00::/40", "17622"}, + {"2600:370f:7441::/44", "32261"}, + {"2607:f2c8::/32", "23473"}, + {"2400:da00::/37", "38365"}, + {"2a04:ac00:9::/46", "203004"}, + {"2404:1c40:ce::/47", "24432"}, + {"2606:2800:600b::/48", "14153"}, + {"2803:4a80::/32", "27865"}, + {"2a0f:2d40::/29", "60262"}, + {"2001:250:5012::/41", "24361"}, + {"2401:4900:3e20::/41", "45609"}, + {"240a:ae84::/32", "146366"}, + {"2804:2cc0::/32", "265241"}, + {"2a02:26f7:c8c0::/48", "36183"}, + {"2404:bf40:a242::/40", "139084"}, + {"240a:a499::/32", "143827"}, + {"240a:ac20::/32", "145754"}, + {"2607:f740:56::/47", "36236"}, + {"2804:2064::/32", "262433"}, + {"2001:4cd8::/32", "8319"}, + {"2402:800:3b8d::/43", "7552"}, + {"2407:1200::/32", "7524"}, + {"2409:8000:5800::/40", "56048"}, + {"2409:8d15:2800::/39", "56044"}, + {"240e:67c:800::/37", "140329"}, + {"2803:3100::/32", "16973"}, + {"2a00:4980::/42", "33848"}, + {"2a0a:59c7:100d::/46", "204724"}, + {"2001:559:8465::/48", "33654"}, + {"2001:67c:2290::/48", "43407"}, + {"2602:801:5000::/40", "399477"}, + {"2620:0:a0f::/43", "71"}, + {"2804:15d4:8000::/33", "263413"}, + {"2a10:1380::/29", "207335"}, + {"2400:cb00:460::/48", "13335"}, + {"2408:8957:9000::/40", "17622"}, + {"2a01:9540::/32", "59597"}, + {"2a01:aec0::/32", "41549"}, + {"2a02:2370:4000::/48", "32787"}, + {"2408:8956:4200::/40", "17622"}, + {"240a:af21::/32", "146523"}, + {"2607:bb80::/32", "395774"}, + {"2a0b:6900::/48", "206873"}, + {"2a0d:5940::/29", "58212"}, + {"2001:559:c015::/44", "7922"}, + {"2408:840c:bc00::/40", "17621"}, + {"2a06:e881:1407::/44", "202540"}, + {"2400:7400:41::/48", "23736"}, + {"2401:d800:c000::/35", "7552"}, + {"2602:feb6::/36", "7001"}, + {"2804:2f0::/32", "53236"}, + {"2804:724c::/32", "270845"}, + {"2001:250:6c41::/48", "23910"}, + {"2001:da8:d025::/48", "24359"}, + {"2001:df2:f000::/48", "55319"}, + {"240a:ace2::/32", "145948"}, + {"2a01:178::/32", "8607"}, + {"2a06:9300::/29", "35684"}, + {"2620:a4:2051::/48", "399120"}, + {"2620:1d0:5e::/47", "397228"}, + {"2804:2b60::/32", "262587"}, + {"2804:7148::/32", "270779"}, + {"2a02:20c8:1241::/48", "44511"}, + {"2a02:26f7:bfc0::/48", "36183"}, + {"2a02:26f7:dbcd::/42", "20940"}, + {"2a0e:46c4:109::/48", "142598"}, + {"240a:a395::/32", "143567"}, + {"2001:df2:a980::/48", "131203"}, + {"2401:4900:4e40::/42", "45609"}, + {"2405:7800::/32", "17689"}, + {"2803:7c60::/32", "27951"}, + {"2a02:26f7:d0::/48", "36183"}, + {"2a02:e840::/30", "15974"}, + {"2a06:6a40::/29", "203924"}, + {"2a07:8980::/39", "198651"}, + {"2001:578:18::/42", "22773"}, + {"2604:ca00:136::/41", "36492"}, + {"2606:2a00::/32", "53292"}, + {"2806:230:4037::/48", "11888"}, + {"2a02:26f7:db11::/42", "20940"}, + {"2600:40fc:1003::/48", "14210"}, + {"2804:64b0:4000::/36", "269442"}, + {"2804:7b70::/32", "271432"}, + {"2a02:8c0::/32", "39257"}, + {"240e:980:8000::/40", "23724"}, + {"2600:40ff:fc01::/44", "701"}, + {"2804:14c:4a3::/45", "28573"}, + {"2a01:d8:9::/32", "5537"}, + {"2400:a980:e4::/47", "133111"}, + {"2409:8b50::/30", "9808"}, + {"2a01:51a0::/32", "21348"}, + {"2a03:51e0::/32", "43776"}, + {"2a0f:e040:1::/48", "60781"}, + {"2001:559:c0a9::/48", "33490"}, + {"2602:ff96:6::/48", "26548"}, + {"2a01:620:10::/32", "12389"}, + {"2a01:c50f:5180::/32", "12479"}, + {"2a02:26f7:dfc8::/48", "36183"}, + {"2a04:e802:1d::/32", "57976"}, + {"2402:800:3a2b::/41", "7552"}, + {"240a:a84c::/32", "144774"}, + {"2600:141b:f001::/29", "20940"}, + {"2607:f038:400c::/46", "21527"}, + {"2620:171:62::/45", "42"}, + {"2804:27cc::/32", "53125"}, + {"2806:310:9::/48", "28523"}, + {"2a01:b780::/32", "43612"}, + {"2a02:26f7:dd85::/46", "20940"}, + {"2001:67c:1360::/48", "41231"}, + {"2402:5cc0:1::/46", "27381"}, + {"2409:4086:a000::/28", "55836"}, + {"2409:8a39::/30", "9808"}, + {"240a:a3fd::/32", "143671"}, + {"240a:a804::/32", "144702"}, + {"2a02:26f7:bf89::/46", "20940"}, + {"240e:bf:b8ec::/46", "138597"}, + {"2a07:a343:cd10::/44", "9009"}, + {"2001:7f0:102::/34", "13237"}, + {"2402:800:7f50::/42", "7552"}, + {"2600:1014:b070::/40", "22394"}, + {"2806:20d:1912::/44", "32098"}, + {"2402:800:95ee::/38", "7552"}, + {"2a09:3340::/29", "209509"}, + {"2a0f:c00::/29", "48627"}, + {"2404:c400:9000::/36", "133321"}, + {"2604:d600:c79::/46", "32098"}, + {"2804:3dac::/39", "266546"}, + {"2a02:2328::/32", "8426"}, + {"2404:afc0::/32", "138829"}, + {"2408:8456:1d40::/40", "17816"}, + {"2804:4f8:8000::/38", "28263"}, + {"2a09:2941::/32", "207996"}, + {"2001:67c:22c0::/48", "3301"}, + {"2604:6940:980::/32", "11006"}, + {"2804:5e8::/32", "262549"}, + {"2806:2f0:6001::/46", "17072"}, + {"2806:310:2b::/45", "16960"}, + {"2a04:c900:1000::/36", "48096"}, + {"2606:a600:7000::/32", "23005"}, + {"2607:700:1300::/37", "22343"}, + {"2804:b40::/32", "52760"}, + {"2806:230:2023::/48", "11888"}, + {"2a0d:d40::/32", "200318"}, + {"2c0f:ee20::/32", "328251"}, + {"2001:559:45a::/47", "33657"}, + {"2001:559:4ff::/48", "33491"}, + {"2408:8956:a400::/40", "17622"}, + {"240e:3b6:ac00::/35", "4134"}, + {"2a02:26f7:f500::/48", "36183"}, + {"2a04:bd40::/29", "62038"}, + {"2a0c:7e45:1f8e::/48", "20473"}, + {"2001:1420::/30", "8676"}, + {"2402:7940::/32", "134090"}, + {"240a:ab62::/32", "145564"}, + {"2604:7c0:200::/36", "395841"}, + {"2610:b0:4062::/43", "3573"}, + {"2804:20e4::/32", "264519"}, + {"2a00:1780::/32", "8194"}, + {"2a02:26f0:7e00::/48", "34164"}, + {"2409:8c14:100::/36", "56044"}, + {"2804:138b:c041::/40", "53037"}, + {"2a0e:c500::/29", "57878"}, + {"2400:3a60:1ff0::/32", "149051"}, + {"2401:b900::/32", "17894"}, + {"2402:ef03:3::/45", "7633"}, + {"2403:6600::/32", "55329"}, + {"2404:4a00::/48", "45629"}, + {"2620:cc:4000::/48", "3356"}, + {"2a02:26f7:d841::/46", "20940"}, + {"2001:559:8081::/48", "7015"}, + {"2408:84f3:9610::/42", "134543"}, + {"2804:3048::/32", "264941"}, + {"2a02:e3c0::/29", "213402"}, + {"2402:800:57a9::/43", "7552"}, + {"2409:881e::/31", "24400"}, + {"2804:1ad4::/32", "52536"}, + {"2a04:4540::/29", "15943"}, + {"2a06:f901::/36", "56630"}, + {"2c0f:fec8:1001::/32", "37197"}, + {"2800:ba0:24::/48", "263812"}, + {"2a00:c98:2053::/32", "28753"}, + {"2a02:5340::/48", "12552"}, + {"2001:df2:c800::/48", "133394"}, + {"240a:acfe::/32", "145976"}, + {"2607:f8f8:1f05::/44", "50131"}, + {"2620:107:9058::/48", "22787"}, + {"2a00:4c20::/32", "6769"}, + {"2a02:26f0:e001::/38", "20940"}, + {"2001:559:c538::/48", "7922"}, + {"240a:aadf::/32", "145433"}, + {"240a:aafb::/32", "145461"}, + {"2620:10a:80e8::/46", "55195"}, + {"2806:288::/35", "28469"}, + {"2a10:4e00::/29", "399975"}, + {"2401:8c00::/32", "38858"}, + {"2804:2f50::/32", "264883"}, + {"2804:6a9c::/32", "270347"}, + {"2a10:c5c1:affe::/48", "211547"}, + {"2001:559:319::/48", "33657"}, + {"2803:aba0:2000::/38", "265554"}, + {"2a0f:300::/32", "397881"}, + {"2001:559:ad::/48", "33659"}, + {"2804:6918:4300::/36", "270248"}, + {"2a02:26f7:f790::/48", "36183"}, + {"2a11:7d80::/29", "61192"}, + {"2001:df4:e180::/48", "140751"}, + {"2408:8256:318a::/48", "17816"}, + {"240e:438:8040::/38", "4134"}, + {"240e:967:a800::/38", "58772"}, + {"2602:fc52:100::/40", "399888"}, + {"2803:4b80::/32", "27940"}, + {"2804:154c:101::/33", "263382"}, + {"2a0f:f580::/29", "60262"}, + {"2400:fc00:82f2::/37", "45773"}, + {"2804:75f8::/32", "271081"}, + {"2a02:26f7:bc06::/47", "20940"}, + {"2001:559:281::/48", "20214"}, + {"2001:678:a08::/48", "209395"}, + {"2400:adc7:1800::/39", "9541"}, + {"2408:80fa:6300::/35", "17816"}, + {"240a:a15c::/32", "142998"}, + {"2001:559:85f3::/45", "33651"}, + {"2600:140b:d000::/48", "7679"}, + {"2600:6c38:25b::/45", "20115"}, + {"2606:aec0::/36", "398646"}, + {"2804:7bd8::/32", "271458"}, + {"2a00:1c30::/32", "12659"}, + {"2a02:26f7:f6c1::/46", "20940"}, + {"2a05:2d07::/32", "198507"}, + {"2402:e280:3d9a::/42", "134674"}, + {"2404:f100::/37", "17483"}, + {"2800:160:1176::/44", "14259"}, + {"2800:381:cccd::/34", "10834"}, + {"2001:ddd::/48", "18369"}, + {"2804:5390::/32", "268592"}, + {"2a0f:5707:ab2b::/48", "7489"}, + {"2001:44b8:30f2::/48", "4739"}, + {"2606:8800::/32", "19940"}, + {"2804:6bb4::/35", "270418"}, + {"2c0e:220c::/30", "37457"}, + {"2001:1248:988b::/45", "11172"}, + {"2400:6900::/32", "56304"}, + {"240a:a78f::/32", "144585"}, + {"2a0c:ce80::/41", "197113"}, + {"2001:559:81c7::/44", "33652"}, + {"2400:7400:e01c::/46", "23736"}, + {"2620:129:100f::/48", "13536"}, + {"2801:0:210::/48", "19429"}, + {"2a04:9b80::/29", "57608"}, + {"2a06:4180:2::/29", "48293"}, + {"2001:559:737::/48", "33657"}, + {"2406:3000:2:10a::/47", "4657"}, + {"2407:ef00::/36", "12422"}, + {"240a:a5ff::/32", "144185"}, + {"2804:4cb4:9000::/33", "267386"}, + {"2a01:c50f:dd40::/38", "12479"}, + {"2001:1248:a543::/45", "11172"}, + {"2400:a980:3500::/36", "133111"}, + {"2804:145c:8050::/40", "263327"}, + {"2a06:3100::/29", "51588"}, + {"2001:559:b5::/48", "33657"}, + {"2001:da8:a6::/48", "24352"}, + {"2603:903e::/32", "33363"}, + {"2a02:280::/32", "12883"}, + {"240e:438:3620::/43", "140647"}, + {"2001:fe0:919::/32", "4775"}, + {"240a:a765::/32", "144543"}, + {"2803:b700::/32", "262262"}, + {"2a02:2e02:9530::/41", "12479"}, + {"2a03:c600::/32", "3262"}, + {"2001:559:8499::/48", "33650"}, + {"2409:8904:6540::/42", "24547"}, + {"2a10:1d00::/32", "16019"}, + {"2400:adc0:20::/47", "9541"}, + {"2409:8e54::/28", "9808"}, + {"2001:4878:220::/48", "12222"}, + {"2804:6cdc:8000::/33", "270497"}, + {"2a00:5c60::/46", "43329"}, + {"2a02:26f7:e6c5::/46", "20940"}, + {"2a04:f600::/29", "200435"}, + {"2001:67c:18a8::/48", "50438"}, + {"240a:a895::/32", "144847"}, + {"240a:aaa8::/32", "145378"}, + {"240e:44d:240::/42", "140346"}, + {"2602:fd50:b00b::/48", "212149"}, + {"2a06:efc0::/32", "34762"}, + {"2001:678:904::/48", "47453"}, + {"2800:9a3:100::/29", "14522"}, + {"2804:1da0::/32", "264382"}, + {"2a0d:2581:2333::/48", "209261"}, + {"2001:559:8257::/48", "7016"}, + {"2001:6c0::/32", "25286"}, + {"2403:8600:8000::/44", "45820"}, + {"240a:a998::/32", "145106"}, + {"2a11:4c0::/47", "211632"}, + {"2406:daa0:a080::/44", "16509"}, + {"2a01:c50e:4100::/35", "12479"}, + {"2a06:bdc0:191a::/38", "62240"}, + {"2a0b:1640:1::/48", "205787"}, + {"2001:559:5bf::/48", "33659"}, + {"2001:4b20:100:58a::/59", "34288"}, + {"240e:983:1802::/48", "4134"}, + {"2620:10f:b000::/48", "4185"}, + {"2a02:fe80:2010::/48", "30148"}, + {"2a04:2e80:4::/48", "207587"}, + {"2a10:2f01:244::/46", "213316"}, + {"2001:559:c39d::/48", "33657"}, + {"2001:13c8::/32", "11960"}, + {"2001:4c08:201f::/48", "10753"}, + {"2404:bf40:e604::/48", "7545"}, + {"2600:8807:b7ea::/33", "22773"}, + {"2605:bc0:1014::/47", "54201"}, + {"2804:df0:2000::/32", "262775"}, + {"2804:3eac::/32", "266614"}, + {"2a02:26f7:e884::/48", "36183"}, + {"2a0a:2300::/31", "212754"}, + {"2001:559:72f::/48", "7016"}, + {"2001:fc8::/32", "23624"}, + {"2402:b801:3900::/37", "18371"}, + {"2804:6abc::/32", "270356"}, + {"2a00:a500::/32", "49457"}, + {"2a06:eac0::/29", "48854"}, + {"2a0c:7e46:4f08::/48", "20473"}, + {"2001:559:df::/48", "33489"}, + {"2001:559:12e::/43", "7922"}, + {"240e:983:1b02::/48", "136188"}, + {"2604:4500:b00::/37", "29802"}, + {"2610:190:1c00::/38", "62"}, + {"2408:8256:2f60::/44", "17623"}, + {"2408:8256:399d::/46", "17623"}, + {"2800:160:1905::/44", "14259"}, + {"2804:4d80:801::/32", "268200"}, + {"2a02:1718::/32", "51182"}, + {"2a02:26f7:ab::/48", "20940"}, + {"2a11:da80::/29", "210806"}, + {"2403:3d80::/32", "48024"}, + {"2409:8904:53b0::/37", "24547"}, + {"2620:133:8000::/46", "19054"}, + {"2806:2f0:5123::/41", "17072"}, + {"2a0b:e3c0::/29", "205215"}, + {"2407:cdc0:b000::/36", "38136"}, + {"2600:1000:fe00::/44", "6167"}, + {"2602:fed2:ff4::/48", "53356"}, + {"2804:8ec::/32", "28235"}, + {"2a05:da00::/29", "200984"}, + {"2c0f:fd08::/32", "37309"}, + {"2001:67c:1680::/48", "212037"}, + {"2800:bf0:824c::/48", "27947"}, + {"2803:fd80:4::/43", "18747"}, + {"2804:4354::/32", "267563"}, + {"2a06:7780::/29", "204790"}, + {"2400:9340::/32", "136189"}, + {"2400:ea00:ffff::/48", "23884"}, + {"2407:2400::/32", "45641"}, + {"2804:7508::/32", "271019"}, + {"2a00:55a0:ff00::/40", "9009"}, + {"2a02:ee80:419f::/42", "3573"}, + {"2001:559:8163::/48", "7015"}, + {"2406:b580::/32", "132296"}, + {"2804:5ab8::/32", "268791"}, + {"240e:438:a040::/38", "4134"}, + {"2804:41d0:3600::/32", "267458"}, + {"2a02:2548::/32", "48822"}, + {"2a0b:2fc0::/29", "29632"}, + {"240e:5e:4004::/47", "58543"}, + {"2804:14d:6800::/40", "28573"}, + {"2804:da0::/32", "28587"}, + {"2804:4dbc::/32", "268216"}, + {"2001:918:ff3e::/48", "48038"}, + {"2400:cb00:19::/48", "13335"}, + {"2a02:26f7:e984::/48", "36183"}, + {"2a0e:97c0:700::/44", "48987"}, + {"2001:500:40::/45", "207266"}, + {"2406:3003:3000::/42", "55430"}, + {"2607:ee80:10::/48", "11403"}, + {"2a01:5043:eff::/48", "202196"}, + {"2605:f440::/41", "54874"}, + {"2620:128:e014::/48", "22317"}, + {"2a03:b0c0::/46", "14061"}, + {"2a07:cb80::/32", "49685"}, + {"2001:950::/32", "47381"}, + {"2404:bf40:8780::/46", "7545"}, + {"2804:3ec::/32", "61570"}, + {"2001:559:261::/48", "33668"}, + {"2001:559:8323::/48", "7015"}, + {"2409:801f:3000::/46", "9808"}, + {"2800:bf0:20::/45", "52257"}, + {"2804:e30:c00::/38", "11338"}, + {"2a0a:17c0::/29", "206894"}, + {"2a0c:b641:5c0::/44", "210466"}, + {"2804:c40::/32", "262809"}, + {"2804:276c:100::/37", "263900"}, + {"2001:559:81e4::/48", "33651"}, + {"2001:559:863f::/48", "33662"}, + {"240e:3b9:dc00::/34", "4134"}, + {"2804:7c24::/32", "271478"}, + {"2620:4d:400a::/48", "395403"}, + {"2804:33ec::/32", "265425"}, + {"2a07:c480::/29", "50017"}, + {"2001:df0:6880::/48", "138731"}, + {"2001:16f8:4000::/48", "199522"}, + {"2001:18b8:43::/45", "29789"}, + {"2404:c8:2::/48", "27435"}, + {"2406:7400:80::/46", "24309"}, + {"2600:1419:2201::/37", "20940"}, + {"2403:9800:b018::/48", "4771"}, + {"2606:ef80::/45", "7226"}, + {"2804:21a4:2800::/35", "53191"}, + {"2804:8434:b::/48", "272246"}, + {"2604:d600:677::/44", "32098"}, + {"2620:13a:4000::/40", "22686"}, + {"2a01:90a0::/32", "62105"}, + {"2a02:2010:2700::/43", "20978"}, + {"2a10:d780::/46", "211997"}, + {"2401:d800:9750::/42", "7552"}, + {"2408:8459:9830::/41", "17622"}, + {"2600:9000:1199::/46", "16509"}, + {"2620:138:3000::/46", "11251"}, + {"2a02:26f7:b0::/48", "36183"}, + {"2a09:be40:3441::/48", "57401"}, + {"240a:a84a::/32", "144772"}, + {"2607:f060:b004::/48", "53708"}, + {"2804:49b8::/32", "267199"}, + {"2a00:fd40:6::/48", "20473"}, + {"2a06:6740::/29", "20596"}, + {"2001:678:d10::/48", "20473"}, + {"2409:8d01::/32", "9808"}, + {"2804:5734::/32", "268051"}, + {"2a02:6a80:5301::/44", "3245"}, + {"2a0a:dc40::/29", "12843"}, + {"2a0d:3280::/29", "34907"}, + {"2001:cb0:2204::/46", "4637"}, + {"2620:149:a14::/48", "6185"}, + {"2804:1c4c::/39", "61648"}, + {"2a02:26f7:ce89::/42", "20940"}, + {"2a0b:4740::/29", "211274"}, + {"2001:559:8180::/48", "33659"}, + {"2001:12f0:b28::/43", "1916"}, + {"2404:8000:73::/44", "17451"}, + {"2600:6c21:4c1::/38", "20115"}, + {"2001:559:c004::/48", "7922"}, + {"240a:a303::/32", "143421"}, + {"2804:79d8::/32", "271331"}, + {"2a01:7b8::/32", "34920"}, + {"2a03:4900:5::/46", "197695"}, + {"2606:2800:5150::/48", "15133"}, + {"2a02:26f7:ef::/48", "20940"}, + {"2001:559:8433::/48", "22909"}, + {"2001:1248:a400::/47", "11172"}, + {"2a0e:46c4:2b00::/40", "212767"}, + {"2402:5b00:b0::/44", "18002"}, + {"240e:3b9:7600::/39", "140313"}, + {"2620:171:11::/46", "715"}, + {"2800:2f0:1c::/48", "27668"}, + {"2806:2f0:2403::/43", "22884"}, + {"2a03:a960:2::/42", "61317"}, + {"2001:250:3c13::/48", "23910"}, + {"2001:559:12c::/48", "7922"}, + {"2001:5b0:4eca::/43", "6621"}, + {"2406:20c0:2001::/33", "140423"}, + {"2406:4f40:4::/44", "40676"}, + {"2600:6c38:a59::/40", "20115"}, + {"2604:4780::/32", "6994"}, + {"2606:2400::/35", "36295"}, + {"2610:b0:4134::/41", "3573"}, + {"2620:10d:2080::/48", "29384"}, + {"2804:14c:4e1::/45", "28573"}, + {"2001:559:26a::/48", "7922"}, + {"2001:67c:1534::/48", "208281"}, + {"240e:e6:1000::/32", "4812"}, + {"2602:fed2:7111::/48", "36436"}, + {"2804:2d70::/32", "265282"}, + {"2a0b:e44:1::/48", "205809"}, + {"2001:4408:5b08::/37", "4758"}, + {"2800:160:1d59::/42", "14259"}, + {"2804:aa4::/32", "52902"}, + {"2804:45fc:c002::/34", "266959"}, + {"2a01:b740:a24::/48", "6185"}, + {"2a0d:a180::/32", "211494"}, + {"2001:559:8394::/47", "7922"}, + {"2001:4888:801a::/47", "6167"}, + {"2403:9800:b010::/46", "4771"}, + {"2408:8459:6210::/42", "17623"}, + {"2604:9c0::/32", "395777"}, + {"2804:1c::/32", "11844"}, + {"2804:1a8c::/32", "61865"}, + {"2804:7bb8::/32", "271450"}, + {"2a06:9240::/29", "47406"}, + {"2a07:3500:12d0::/48", "33915"}, + {"2409:8038:3100::/36", "9808"}, + {"2804:14d:5c00::/42", "28573"}, + {"2804:1628::/32", "263271"}, + {"2804:51e4::/32", "268483"}, + {"2804:6e50::/32", "270588"}, + {"2a06:c240::/42", "49222"}, + {"2001:559:c1ff::/48", "7922"}, + {"2605:8dc0::/32", "55081"}, + {"2605:a404:a36::/40", "33363"}, + {"2607:fb50:a00::/35", "22781"}, + {"2620:10a:f020::/40", "21869"}, + {"2803:8aa0::/32", "266865"}, + {"2804:562c::/32", "267981"}, + {"2402:800:3a9b::/41", "7552"}, + {"2408:8256:396c::/48", "17623"}, + {"2408:84f3:2e10::/44", "17623"}, + {"2804:16b0::/36", "61910"}, + {"2a0d:3842:1110::/48", "57629"}, + {"2001:da8:224::/48", "24350"}, + {"2408:8459:24c0::/38", "17816"}, + {"2620:a5:c000::/48", "27625"}, + {"2804:14c:6573::/40", "28573"}, + {"2a03:ddc0::/32", "199350"}, + {"2001:559:c148::/46", "33490"}, + {"240a:aa33::/32", "145261"}, + {"2a0b:6903:1ad::/48", "212461"}, + {"2001:559:8385::/48", "33651"}, + {"2806:230:3028::/48", "265594"}, + {"240e:438:3240::/37", "4134"}, + {"2600:3000:3102::/33", "13649"}, + {"2620:98:6000::/48", "7018"}, + {"2a00:c640::/32", "198612"}, + {"2a07:f880::/29", "52212"}, + {"2a0f:3040::/29", "37686"}, + {"2001:559:82cf::/48", "33659"}, + {"2001:579:c24::/35", "22773"}, + {"240a:ac88::/32", "145858"}, + {"2800:bf0:80a2::/43", "27947"}, + {"2804:6e14:4000::/34", "270574"}, + {"2408:8256:1800::/34", "17816"}, + {"2606:8600::/32", "33604"}, + {"2804:84d4::/32", "272282"}, + {"2a0e:5b40::/29", "41960"}, + {"2a0f:85c1:27::/48", "210532"}, + {"2406:3800::/32", "24245"}, + {"2605:a404:8b7::/41", "33363"}, + {"2804:1a98::/32", "61870"}, + {"2804:5cf8::/32", "268943"}, + {"2a02:26f7:b708::/48", "36183"}, + {"2a07:aa80::/29", "202657"}, + {"2a12:3580::/29", "204623"}, + {"2607:fb10:70e2::/47", "2906"}, + {"2803:7a00::/32", "52468"}, + {"2803:c300::/32", "22869"}, + {"240a:a329::/32", "143459"}, + {"240a:ab6b::/32", "145573"}, + {"2804:443c::/32", "267611"}, + {"2001:559:c082::/48", "33667"}, + {"2001:44b8:3086::/48", "7545"}, + {"2401:b200:a::/41", "24186"}, + {"2408:8256:36a0::/39", "17816"}, + {"2605:3380:4138::/41", "12025"}, + {"2804:668c::/32", "269567"}, + {"2a00:4820::/32", "24800"}, + {"2a01:8640:6::/48", "42708"}, + {"2001:559:80f5::/48", "33657"}, + {"2606:8f00::/32", "18712"}, + {"2806:101e:6::/44", "8151"}, + {"2001:559:c242::/48", "33651"}, + {"2a02:26f7:b744::/46", "36183"}, + {"240e:848:a0::/30", "4134"}, + {"2605:2800:102::/40", "3354"}, + {"2a00:adc0:1a00::/40", "13030"}, + {"2a02:2ad0:117::/44", "702"}, + {"2a03:2880:f270::/40", "32934"}, + {"2801:116:1::/48", "27951"}, + {"2a02:26f7:9d::/48", "20940"}, + {"2a06:b500:204f::/48", "211768"}, + {"2a09:7184::/30", "39614"}, + {"2a0e:aa01:bad2::/33", "206499"}, + {"2001:500:12::/48", "5927"}, + {"2804:4368:1450::/32", "267568"}, + {"2a02:26f7:d301::/46", "20940"}, + {"2a0e:b107:760::/44", "205977"}, + {"2001:48d0:c000::/34", "7377"}, + {"2804:214:8498::/39", "26615"}, + {"2804:1ed0:1003::/32", "262286"}, + {"2001:550:4701:201::/36", "174"}, + {"240a:a290::/32", "143306"}, + {"2a02:27b0:5400::/39", "9146"}, + {"2001:a38::/32", "20633"}, + {"2407:9240:3100::/44", "149423"}, + {"240a:a3b0::/32", "143594"}, + {"2a02:6680:21f0::/44", "16116"}, + {"2a0a:59c7:1007::/44", "204724"}, + {"2001:559:8793::/48", "33491"}, + {"2001:14e8:2::/32", "6736"}, + {"2001:1a11:7c::/48", "42298"}, + {"240a:a3fe::/32", "143672"}, + {"2605:6c80::/47", "397373"}, + {"2620:122:7000::/48", "16507"}, + {"2a00:59a0::/32", "42442"}, + {"2a03:97a0::/40", "197380"}, + {"2a04:5200:5978::/32", "50113"}, + {"2001:559:87ee::/48", "33659"}, + {"2600:1005:9010::/40", "22394"}, + {"2600:1419:ec01::/35", "20940"}, + {"2a05:9f80::/29", "211308"}, + {"2602:fbbc::/46", "400498"}, + {"2606:41c0::/45", "11448"}, + {"2800:160:12bb::/45", "14259"}, + {"2804:54::/35", "28220"}, + {"2a0d:9a80:100::/38", "49959"}, + {"2001:44b8:2a::/43", "7545"}, + {"2401:d800:2252::/40", "7552"}, + {"2620:13d:e000::/48", "397127"}, + {"2a02:2198::/32", "21161"}, + {"2a03:c980:b957::/48", "210079"}, + {"2a04:ed40::/29", "201864"}, + {"2a0d:a1c0::/29", "42695"}, + {"2001:4bf8::/32", "8271"}, + {"2804:1658:ffff::/48", "263283"}, + {"2a00:79e0::/39", "45566"}, + {"2a09:400:8000::/36", "208861"}, + {"2a07:39c0::/29", "60111"}, + {"2402:800:7ee2::/39", "7552"}, + {"2a07:1f40::/29", "28725"}, + {"2001:678:ccc::/48", "206477"}, + {"2001:90f::/32", "204873"}, + {"240e:965:d400::/39", "58772"}, + {"2620:74:8a::/48", "26134"}, + {"2a00:d980::/32", "12512"}, + {"2a06:a005:b8::/48", "207941"}, + {"2a12:280::/29", "204790"}, + {"2001:559:8539::/48", "33652"}, + {"2001:67c:4::/48", "51531"}, + {"2001:1248:8416::/47", "11172"}, + {"2607:fdf0:5eb8::/41", "8008"}, + {"2804:e48::/32", "262949"}, + {"2a0f:cc84::/31", "210625"}, + {"2404:1c40:f0::/45", "24432"}, + {"2408:8956:5000::/40", "17622"}, + {"2602:230::/32", "6128"}, + {"2a03:1fc0::/48", "35220"}, + {"2a0e:fd45:da5::/48", "60557"}, + {"2400:dcc0:a404::/39", "38631"}, + {"2401:d800:40::/42", "7552"}, + {"2403:6100::/32", "4621"}, + {"2409:8924:9900::/38", "56046"}, + {"240a:ad14::/32", "145998"}, + {"2604:3a80::/32", "33130"}, + {"2800:800:400::/39", "26611"}, + {"2a11:2800:3::/48", "61317"}, + {"2001:559:855c::/48", "7922"}, + {"2001:678:e40::/48", "205593"}, + {"2001:67c:29fc::/48", "30923"}, + {"2001:4830:c160::/44", "27552"}, + {"2405:d440:101::/32", "58813"}, + {"240e:390::/29", "4134"}, + {"2605:4c40:abd::/32", "30081"}, + {"2804:6584::/32", "269496"}, + {"2c0f:f6d0:a7::/41", "327687"}, + {"2406:f100::/32", "58923"}, + {"240a:a835::/32", "144751"}, + {"2620:12d:2000::/40", "33545"}, + {"2804:24d8::/32", "264244"}, + {"2804:38b0:ff00::/40", "266494"}, + {"2804:826c::/32", "272520"}, + {"2a03:1ae0:1::/48", "59944"}, + {"2c0f:f030:4000::/34", "328137"}, + {"2001:559:8154::/48", "33657"}, + {"2001:67c:1368::/48", "20932"}, + {"2607:fdf8:400::/32", "13649"}, + {"2804:836c::/32", "272197"}, + {"2a00:6a00::/32", "56588"}, + {"2a00:cee1:dcd::/30", "60268"}, + {"2001:9c0::/32", "12902"}, + {"240a:ade5::/32", "146207"}, + {"2600:141b:801::/37", "20940"}, + {"2a00:1160::/29", "5500"}, + {"2a02:26f7:e188::/48", "36183"}, + {"2600:1417:1f::/48", "20940"}, + {"2605:4300:5::/48", "53813"}, + {"2804:22f0::/32", "264133"}, + {"2001:470:11d::/46", "6939"}, + {"2001:67c:734::/48", "198656"}, + {"2001:c20:8800::/34", "3758"}, + {"2401:d800:5570::/40", "7552"}, + {"2401:d800:d010::/42", "7552"}, + {"2407:9e00::/48", "23888"}, + {"2a02:7900::/39", "16154"}, + {"2a03:4920::/32", "42652"}, + {"2a06:6180::/29", "34941"}, + {"2606:1b80::/32", "40864"}, + {"2804:13a8::/32", "263544"}, + {"2804:6534::/32", "269475"}, + {"2a0a:a1c0::/29", "205998"}, + {"2a10:7707:f224::/36", "399975"}, + {"2001:559:8303::/45", "7015"}, + {"2001:67c:225c::/48", "56736"}, + {"2408:8957:8800::/40", "17622"}, + {"2607:fdf8:db::/45", "13649"}, + {"2620:120:c000::/40", "395182"}, + {"2804:7f0::/30", "18881"}, + {"2a03:c9c0::/32", "51752"}, + {"2a05:ce40::/29", "201006"}, + {"2001:250:4018::/38", "23910"}, + {"2409:8a44::/31", "24445"}, + {"2602:808:6000::/40", "1798"}, + {"2620:57:4003::/48", "39122"}, + {"2620:132:b000::/40", "21951"}, + {"2804:664c::/34", "269547"}, + {"2a07:c5c0::/29", "202526"}, + {"2408:8456:e610::/42", "134543"}, + {"2600:1006:b1d0::/42", "6167"}, + {"2804:18b8::/32", "61949"}, + {"2402:b00::/32", "24554"}, + {"2603:c001:250::/37", "31898"}, + {"2620:74:21::/48", "396574"}, + {"2803:53e0::/48", "52468"}, + {"2a00:8620::/32", "200698"}, + {"2001:253:134::/48", "142100"}, + {"2404:e00:265::/48", "15695"}, + {"240a:aa09::/32", "145219"}, + {"240e:e:d800::/31", "4134"}, + {"2606:21c0::/32", "36698"}, + {"2a01:6b40::/32", "198403"}, + {"2a02:ee80:427a::/40", "3573"}, + {"2001:579:b8d4::/39", "22773"}, + {"2402:8200::/32", "9790"}, + {"2a00:1da0:4006::/32", "29591"}, + {"2a06:c3c0:3::/48", "42093"}, + {"2401:d800:79c0::/42", "7552"}, + {"2402:800:9b8d::/43", "7552"}, + {"2600:1015:a120::/35", "6167"}, + {"2801:80:660::/48", "52520"}, + {"2803:b780:22::/32", "27742"}, + {"2a02:26f7:c080::/48", "36183"}, + {"2a02:26f7:e705::/46", "20940"}, + {"2a02:e0c0:2c00::/38", "9100"}, + {"2001:559:86aa::/48", "33491"}, + {"2001:1248:a4d2::/47", "11172"}, + {"2001:4998:1d::/46", "10310"}, + {"2402:9800::/34", "38158"}, + {"240a:af18::/32", "146514"}, + {"240e:982:e400::/35", "4134"}, + {"2a02:26f7:d80d::/42", "20940"}, + {"2a07:ca07::/32", "35048"}, + {"2a0f:ca87:2::/48", "211944"}, + {"2408:8459:ec30::/41", "17622"}, + {"2604:9cc0::/48", "201106"}, + {"2604:ca00:f024::/46", "36492"}, + {"2804:7ef4::/32", "271657"}, + {"2a01:5042:b::/48", "202196"}, + {"2001:559:8657::/48", "7922"}, + {"2602:feb4:d0::/44", "25961"}, + {"2604:240:1::/48", "33724"}, + {"2606:bc00::/33", "19419"}, + {"2a0b:bd00::/29", "208861"}, + {"2400:7400:e036::/48", "23736"}, + {"2602:fed2:712e::/48", "206607"}, + {"2604:d600:123f::/41", "32098"}, + {"2605:ff40::/32", "13837"}, + {"2a02:df40::/48", "61347"}, + {"2001:559:c473::/45", "7015"}, + {"2001:df0:f800::/48", "58397"}, + {"2001:4878:c228::/48", "12222"}, + {"2804:3034:280::/32", "264936"}, + {"2804:6350::/32", "269353"}, + {"2a02:b8::/38", "25273"}, + {"2a0a:4dc0:1::/48", "206168"}, + {"2001:67c:b4::/48", "16509"}, + {"2402:3a80:c071::/46", "38266"}, + {"2602:fde5::/42", "393424"}, + {"2a02:26f7:11::/48", "20940"}, + {"2a02:26f7:e944::/48", "36183"}, + {"2a05:6300::/29", "201341"}, + {"2402:ef03:100::/34", "7633"}, + {"2409:8b29::/27", "9808"}, + {"2a02:26f7:cb45::/46", "20940"}, + {"2a04:6ec0::/29", "197637"}, + {"2a05:1700:2::/47", "56577"}, + {"2a0b:640::/46", "35236"}, + {"2a0d:b201:8000::/42", "206026"}, + {"240e:17:3800::/37", "139220"}, + {"240e:45c:b200::/40", "131285"}, + {"2600:1402:b801::/33", "20940"}, + {"2600:370f:33ce::/37", "32261"}, + {"2804:1c44::/36", "61645"}, + {"2a00:8b60::/32", "8440"}, + {"2c0f:7900::/32", "328935"}, + {"2001:1248:57bf::/41", "11172"}, + {"2001:4490:da70::/46", "9829"}, + {"240a:aa7d::/32", "145335"}, + {"2607:fe00::/35", "30689"}, + {"2804:c5c::/32", "262318"}, + {"2a0f:d9c0::/29", "205544"}, + {"2a0f:f4c0::/32", "43380"}, + {"2400:cb00:210::/46", "13335"}, + {"2404:d680::/32", "132111"}, + {"240a:a85f::/32", "144793"}, + {"240e:3bf:d000::/36", "134772"}, + {"2a02:5320:900::/40", "12189"}, + {"2804:6a2c::/32", "270317"}, + {"2806:2f0:5243::/42", "17072"}, + {"2a00:1851::/34", "29357"}, + {"2408:84f3:de40::/39", "17816"}, + {"240a:af34::/32", "146542"}, + {"2600:6c38:1eb::/43", "20115"}, + {"2806:2f0:4323::/41", "17072"}, + {"2600:1488:60c1::/46", "20940"}, + {"2804:b0::/32", "22431"}, + {"2a06:dd40::/46", "203416"}, + {"2001:1248:550c::/43", "11172"}, + {"2a00:8c60:a::/47", "60706"}, + {"2a02:228::/29", "25400"}, + {"2a03:2880:f15f::/42", "32934"}, + {"2001:678:490::/48", "12843"}, + {"240a:a215::/32", "143183"}, + {"2606:18c0:1::/48", "42831"}, + {"2a02:26f7:ee::/48", "36183"}, + {"2a0b:c1c0::/29", "42580"}, + {"2a0e:aa07:e035::/48", "208679"}, + {"2402:5300:407::/42", "45903"}, + {"2a04:5680::/29", "197790"}, + {"2406:da70:8000::/40", "16509"}, + {"240a:ae7e::/32", "146360"}, + {"2806:370:6110::/40", "28403"}, + {"2402:800:5663::/43", "7552"}, + {"2402:800:7c50::/42", "7552"}, + {"2606:45c0::/32", "26073"}, + {"2620:8c:4000::/48", "54054"}, + {"2804:fa0::/32", "263596"}, + {"2a02:26f7:cac0::/48", "36183"}, + {"2001:e30:1800::/40", "2697"}, + {"2408:8459:f050::/39", "17816"}, + {"2607:f0d0:2a00::/32", "36351"}, + {"2800:480:ff50::/48", "14080"}, + {"2a12:9080::/29", "210429"}, + {"2001:470:159::/32", "6939"}, + {"2001:559:30b::/48", "33491"}, + {"2001:559:801e::/48", "33650"}, + {"2001:ac8:d::/42", "9009"}, + {"2400:6880::/34", "9652"}, + {"2402:800:7690::/42", "7552"}, + {"2001:16a2:7200::/39", "39386"}, + {"2001:44c8:40ff::/39", "131445"}, + {"2400:5200:403::/45", "55410"}, + {"2403:b100:cd00::/34", "9989"}, + {"2804:2e84:10::/40", "265350"}, + {"2a01:6240::/43", "58273"}, + {"2a05:1083::/47", "147028"}, + {"2606:b400:8004::/48", "792"}, + {"2800:160:1a2f::/43", "14259"}, + {"2804:14d:8481::/44", "28573"}, + {"2a0a:bf40::/36", "205943"}, + {"2001:559:8087::/48", "33651"}, + {"2001:678:1::/48", "25192"}, + {"240a:a842::/32", "144764"}, + {"240e:6:d130::/44", "140083"}, + {"2a00:1288:ef85::/43", "10310"}, + {"2001:7a8::/37", "13193"}, + {"2001:c20:4849::/48", "9255"}, + {"2405:b900:5570::/48", "55701"}, + {"2409:8053:2::/40", "56047"}, + {"2607:fdf0:5ea2::/45", "8008"}, + {"2801:80:25b0::/48", "268014"}, + {"2a02:26f7:d904::/48", "36183"}, + {"2001:da8:b0::/48", "24355"}, + {"2404:bf40:c002::/45", "7545"}, + {"2801:132::/44", "19429"}, + {"2803:1740::/32", "36511"}, + {"2a02:26f7:d384::/48", "36183"}, + {"2a00:f30::/48", "12418"}, + {"2401:d800:7a80::/42", "7552"}, + {"240a:a847::/32", "144769"}, + {"240e:966:ea00::/39", "133776"}, + {"2604:d980::/32", "54235"}, + {"2a09:be40:1700::/40", "208029"}, + {"2a0e:c980::/32", "34393"}, + {"240a:a310::/32", "143434"}, + {"2a02:f8::/32", "28929"}, + {"2407:e400:b000::/33", "18390"}, + {"240e:3b3:c000::/37", "140315"}, + {"2804:37a8:1213::/48", "65004"}, + {"2001:501:b1f9::/48", "396566"}, + {"2001:559:5e6::/48", "22909"}, + {"2001:df4:9480::/48", "140748"}, + {"2604:8200:1::/48", "23089"}, + {"2620:12f:c000::/46", "395831"}, + {"2804:1b2:f100::/47", "18881"}, + {"2804:b10::/32", "52936"}, + {"2409:4000::/31", "55836"}, + {"2001:559:5ed::/46", "33287"}, + {"2806:230:4022::/48", "265594"}, + {"2401:b180:4101::/34", "37963"}, + {"2402:9d80:840::/43", "131429"}, + {"2406:e1c0:201::/39", "141459"}, + {"2408:84f3::/34", "17816"}, + {"2409:8904:4360::/37", "24547"}, + {"240a:a9df::/32", "145177"}, + {"240a:adcb::/32", "146181"}, + {"2a00:5760::/32", "61012"}, + {"2a0b:a4c0::/29", "212238"}, + {"2001:559:1f2::/48", "7922"}, + {"2603:c012:8000::/36", "31898"}, + {"2803:f00:49c::/41", "262182"}, + {"2a04:a142::/32", "20473"}, + {"2001:48b8::/32", "19517"}, + {"2403:d300:2800::/32", "15932"}, + {"240e:44d:2c80::/41", "4134"}, + {"2804:5e48:ff40::/46", "269023"}, + {"2a05:2200::/29", "54058"}, + {"2a0a:6040:ac97::/29", "61138"}, + {"2a10:2f00:17d::/48", "208893"}, + {"2001:559:11a::/47", "7016"}, + {"2a0d:d400::/29", "12748"}, + {"2001:559:8343::/48", "33652"}, + {"2001:678:18c::/48", "202928"}, + {"2001:df4:fc00::/48", "136557"}, + {"2402:3a80:19e0::/43", "38266"}, + {"2606:2800:e000::/45", "14210"}, + {"2800:160:2083::/41", "14259"}, + {"2a02:26f7:f680::/48", "36183"}, + {"2620:107:9031::/48", "22787"}, + {"2804:f8c:9000::/33", "263591"}, + {"2804:2b44:12::/42", "265144"}, + {"2804:34b8::/32", "265475"}, + {"2001:428:b27::/37", "209"}, + {"2605:ccc0::/32", "394209"}, + {"2803:f00:440::/40", "262182"}, + {"2804:7594::/32", "271056"}, + {"2a02:26f0:ed::/43", "20940"}, + {"2a02:ee80:429e::/42", "3573"}, + {"2400:cc00:8500::/36", "17477"}, + {"2600:1407:5801::/34", "20940"}, + {"2620:13c:e000::/48", "19382"}, + {"2a03:e2c0::/32", "205125"}, + {"2a0b:85c0::/32", "32338"}, + {"2001:dce:8000::/48", "45285"}, + {"2409:8054:9::/45", "56040"}, + {"2804:214:4018::/47", "26615"}, + {"2804:58a4::/32", "268141"}, + {"2a04:c442::/33", "10725"}, + {"2a06:1287:3000::/44", "34549"}, + {"2a0b:4940::/29", "205699"}, + {"2a0f:d980::/32", "1152"}, + {"2600:1002:a000::/44", "6167"}, + {"2806:2f0:47a1::/41", "17072"}, + {"2a0a:c080::/29", "51546"}, + {"2409:8075::/30", "9808"}, + {"240e:804:a0::/39", "4134"}, + {"2605:9480:1300::/40", "31775"}, + {"2804:3eb4::/32", "266616"}, + {"2a01:be60::/32", "31458"}, + {"2001:559:389::/48", "22258"}, + {"2001:c20:4875::/46", "3758"}, + {"2001:df6:a480::/48", "141815"}, + {"240e:a7:7fc3::/45", "140509"}, + {"2610:130:1900::/37", "6122"}, + {"2804:3478::/32", "262450"}, + {"2402:6940:407::/40", "7645"}, + {"240a:afdc::/32", "146710"}, + {"2801:80:1ce0::/44", "266604"}, + {"2a00:5f00::/32", "51055"}, + {"2a01:c50f:4040::/39", "12479"}, + {"2a01:c50f:fd80::/38", "12479"}, + {"2a02:530::/43", "21191"}, + {"2a02:e5c0::/29", "51219"}, + {"2001:da8:b7::/48", "24365"}, + {"2408:8256:3997::/44", "17623"}, + {"2a01:110:8068::/48", "3598"}, + {"2a02:fc0::/29", "42428"}, + {"2a02:26f7:cf89::/46", "20940"}, + {"2400:cb00:348::/47", "132892"}, + {"240a:a58c::/32", "144070"}, + {"2604:5b00::/32", "19024"}, + {"2a02:360::/32", "42804"}, + {"2001:559:4ea::/45", "7015"}, + {"2001:57a:a801::/38", "22773"}, + {"2806:2f0:4543::/42", "17072"}, + {"2a02:d480:280::/32", "680"}, + {"2a04:1500::/29", "61026"}, + {"2a0a:441:1::/48", "47692"}, + {"240a:a518::/32", "143954"}, + {"2600:8000::/26", "29992"}, + {"2001:4200:5001::/34", "2018"}, + {"2001:44b8:3090::/48", "7545"}, + {"2604:2680:8::/48", "2386"}, + {"2a00:1dd0::/29", "719"}, + {"2a02:26f7:3c::/48", "36183"}, + {"2a02:26f7:c405::/46", "20940"}, + {"2001:df0:2a00::/48", "63731"}, + {"2001:19e8:8900::/48", "4046"}, + {"240e:982:6100::/40", "138982"}, + {"2607:fdf0:5e2a::/43", "8008"}, + {"2804:10f0::/32", "17108"}, + {"2a02:367:4044::/48", "42804"}, + {"240a:a357::/32", "143505"}, + {"240a:aa6d::/32", "145319"}, + {"2605:a404:50e::/42", "33363"}, + {"2400:b000:eee::/48", "23862"}, + {"2403:8000:10::/48", "18007"}, + {"2a0c:c8c0::/47", "202315"}, + {"2804:1128::/32", "263661"}, + {"2a00:a7a0:2000::/48", "60212"}, + {"2a0a:6e00:49::/48", "207098"}, + {"2a0e:abc0::/29", "197706"}, + {"2001:559:26d::/48", "7015"}, + {"2a0a:9302::/32", "35196"}, + {"2001:559:81a6::/48", "33660"}, + {"2804:6948::/32", "270260"}, + {"2a02:26f7:14::/48", "36183"}, + {"2a11:38c0::/29", "1152"}, + {"2001:559:8314::/48", "7922"}, + {"2400:ebc0::/32", "59022"}, + {"2402:a300:4000::/36", "55427"}, + {"240e:982:8200::/40", "133776"}, + {"2604:880:241::/42", "29802"}, + {"2001:4c8:100e::/43", "15290"}, + {"2001:559:2ec::/48", "7016"}, + {"2001:559:c2d8::/48", "33287"}, + {"2001:678:528::/48", "25126"}, + {"2407:6bc0::/32", "63981"}, + {"2408:8459:6250::/37", "17816"}, + {"2a00:13b7::/48", "34762"}, + {"2a00:b9a0::/32", "198872"}, + {"2a0a:dc00::/30", "51262"}, + {"2001:550:3402::/48", "398355"}, + {"2402:800:36c5::/43", "7552"}, + {"2409:8924:a500::/38", "56046"}, + {"2602:fc9b::/36", "26795"}, + {"2606:2800:4a94::/46", "15133"}, + {"2a02:28:7::/48", "60490"}, + {"2a02:26f7:e519::/42", "20940"}, + {"2602:fd7d:420::/40", "16925"}, + {"2804:1790::/32", "53085"}, + {"2001:250:2428::/48", "23910"}, + {"2001:12f0:3e::/38", "1916"}, + {"2606:6780:6::/48", "20324"}, + {"2620:15:e000::/48", "396079"}, + {"2a11:200::/29", "208861"}, + {"2001:648:2330::/48", "9069"}, + {"2600:1411:2001::/33", "20940"}, + {"2803:7200:800a::/47", "27696"}, + {"2804:7adc::/33", "262674"}, + {"2001:559:5d5::/48", "33659"}, + {"240e:108:1153::/45", "149178"}, + {"2a0f:1e80::/31", "30633"}, + {"2a0f:9400:7100::/40", "53356"}, + {"2001:388:5070::/48", "7573"}, + {"2607:ad80::/32", "395558"}, + {"2804:431:a000::/35", "27699"}, + {"2a02:26f7:c641::/46", "20940"}, + {"2a02:26f7:c68b::/48", "20940"}, + {"2a02:26f7:dc01::/46", "20940"}, + {"2a11:8040::/29", "209551"}, + {"2001:c20:48b3::/45", "3758"}, + {"2406:840:c0a8::/48", "139317"}, + {"240e:3bb:1400::/38", "134773"}, + {"2801:14:e800::/48", "271877"}, + {"2804:4b58::/32", "267299"}, + {"2a00:16c8:10c::/48", "3257"}, + {"2a09:5f80:2::/47", "48038"}, + {"2001:559:506::/48", "7922"}, + {"2604:5140::/32", "396316"}, + {"2606:ed00:5::/46", "47869"}, + {"2a0e:97c0:661::/45", "56758"}, + {"2a0f:3100::/32", "47596"}, + {"2001:668:123::/40", "3257"}, + {"2607:fb10:5084::/42", "2906"}, + {"2804:14d:90b4::/41", "28573"}, + {"2c0f:eb00:1400::/39", "61266"}, + {"2804:40d8::/32", "265985"}, + {"2806:1018::/32", "8151"}, + {"2a07:a343:cc70::/44", "136620"}, + {"2406:2000:99::/46", "10310"}, + {"2408:8456:ca40::/40", "17816"}, + {"2804:145c:c610::/42", "263327"}, + {"2a00:1cb8:2:4::/60", "12713"}, + {"2a00:4802:2a00::/44", "13124"}, + {"2a05:bf81::/32", "50352"}, + {"2001:559:200::/48", "33659"}, + {"2600:a00::/31", "16904"}, + {"2804:b18:81::/45", "52941"}, + {"2a0d:5641:2100::/44", "57695"}, + {"2001:67c:15c::/48", "34387"}, + {"2001:dc7:2dff::/48", "24406"}, + {"2400:8000:7::/44", "4800"}, + {"2401:4900:1c06::/44", "24560"}, + {"2408:8720::/30", "4837"}, + {"2409:804e:100::/36", "9808"}, + {"2606:4f00:a::/48", "19324"}, + {"2620:119:5041::/46", "13443"}, + {"2800:190:110::/37", "11664"}, + {"2803:4700::/31", "28073"}, + {"2001:1248:987f::/40", "11172"}, + {"240e:438:4a40::/37", "4134"}, + {"2806:20d:5066::/43", "32098"}, + {"2806:2f0:32e3::/39", "17072"}, + {"2a06:98c1:3100::/44", "13335"}, + {"2c0f:7200::/32", "37219"}, + {"2001:559:806e::/47", "7922"}, + {"2001:da8:23b::/48", "24349"}, + {"240a:af48::/32", "146562"}, + {"2600:1001:f100::/44", "6167"}, + {"2602:fc1d::/47", "7720"}, + {"2001:500:30::/48", "7018"}, + {"2001:5002:300:2::/27", "1273"}, + {"2404:bf40:81c0::/47", "7545"}, + {"240a:a1a6::/32", "143072"}, + {"240e:44d:5d80::/41", "4134"}, + {"2600:1419:c01::/38", "20940"}, + {"2a02:2e02:9230::/40", "12479"}, + {"2a09:2942::/31", "209898"}, + {"2409:8904:6840::/42", "24547"}, + {"2602:ffb7:f00::/40", "62874"}, + {"2620:73:2000::/48", "33491"}, + {"2804:76f0::/32", "271144"}, + {"2806:230:1030::/48", "265594"}, + {"2402:ee40:60::/40", "17754"}, + {"2408:8256:3180::/44", "17623"}, + {"2620:74:49::/45", "7342"}, + {"2804:225c::/36", "264093"}, + {"2804:7be8:c000::/45", "271462"}, + {"2404:2d00::/32", "55900"}, + {"240e:44d:4e00::/41", "140345"}, + {"2801:13:b000::/48", "64109"}, + {"2a04:c1::/30", "47123"}, + {"2a05:8440::/29", "31708"}, + {"2001:7f8:46::/48", "51988"}, + {"2401:be00:6::/32", "55641"}, + {"240a:a00d::/32", "142663"}, + {"2600:6c10:f405::/44", "20115"}, + {"2a02:760::/29", "29468"}, + {"2001:da8:b011::/46", "24371"}, + {"2600:9000:2304::/44", "16509"}, + {"2602:ff50::/40", "63452"}, + {"2409:8008:900::/35", "24547"}, + {"2600:8807:89a6::/44", "22773"}, + {"2a02:26f7:93::/48", "20940"}, + {"240a:a185::/32", "143039"}, + {"2001:df0:2240::/48", "149053"}, + {"2401:5e40:2000::/32", "63770"}, + {"240a:a29e::/32", "143320"}, + {"240a:a63f::/32", "144249"}, + {"240e:108:13f0::/31", "4134"}, + {"2605:66c5::/30", "53820"}, + {"2607:f4a8::/34", "803"}, + {"2803:9a40:d000::/34", "263824"}, + {"2001:e60:87a8::/43", "4766"}, + {"240a:ad07::/32", "145985"}, + {"2605:3380:42f8::/48", "12025"}, + {"2803:29a0::/32", "267710"}, + {"2804:2f9c::/32", "264902"}, + {"2a02:d540::/29", "199659"}, + {"2400:54a0::/48", "149476"}, + {"2402:6a40::/46", "135718"}, + {"2604:4940::/32", "62516"}, + {"2001:43f8:c90::/48", "328374"}, + {"2804:4f80:1001::/48", "268330"}, + {"2a09:7:2009::/48", "208982"}, + {"2001:410:101::/48", "6509"}, + {"2001:559:8676::/48", "33287"}, + {"2402:800:3b63::/43", "7552"}, + {"2803:2180:1c::/47", "27941"}, + {"2804:a38::/32", "263035"}, + {"2a02:26f7:e915::/42", "20940"}, + {"2a05:fa82::/29", "202139"}, + {"2001:da8:7031::/44", "24363"}, + {"240e:30f:4a00::/35", "137688"}, + {"2600:802:101::/37", "701"}, + {"2800:bf0:1ca::/47", "27947"}, + {"2804:2f30:6c40::/40", "53096"}, + {"2a0f:e600::/47", "60781"}, + {"2001:b00::/32", "12874"}, + {"2402:800:7e00::/42", "7552"}, + {"240a:a27a::/32", "143284"}, + {"240e:bf:b8f8::/46", "138409"}, + {"240e:85c:40::/44", "131285"}, + {"2600:100a:a000::/44", "6167"}, + {"2600:1010:ff10::/40", "22394"}, + {"2620:1e8:1::/48", "29802"}, + {"2804:37f0:7900::/32", "266445"}, + {"2a01:7e80::/39", "197990"}, + {"2c0f:e00::/31", "36924"}, + {"2408:8256:339f::/37", "17816"}, + {"2800:160:1938::/41", "14259"}, + {"2a07:b8c3::/45", "14043"}, + {"2001:559:4e2::/48", "7922"}, + {"2600:1005:f010::/40", "22394"}, + {"2606:2800:4262::/44", "15133"}, + {"2a10:cc42:1000::/40", "20473"}, + {"2001:559:8012::/48", "33662"}, + {"240a:a208::/32", "143170"}, + {"2804:e00::/33", "11419"}, + {"2804:4cc0::/32", "267389"}, + {"2a0c:9a47:20::/48", "209533"}, + {"2607:f740:e00b::/48", "63911"}, + {"2a03:7380:7380::/42", "13188"}, + {"2a06:e881:3900::/44", "204624"}, + {"2a0b:f6c0::/48", "203339"}, + {"2a02:26f0:801::/38", "20940"}, + {"2a07:dc00:180::/44", "29997"}, + {"2a0e:97c0:1d0::/47", "211337"}, + {"2001:418:1401:6a::/64", "20940"}, + {"2404:bf40:8641::/45", "7545"}, + {"2405:cc40::/32", "135690"}, + {"240a:af67::/32", "146593"}, + {"2600:1010:d1d0::/36", "22394"}, + {"2608:4162:1::/48", "27065"}, + {"2001:559:87f5::/48", "33657"}, + {"2607:fc48:438::/48", "40009"}, + {"2a02:4c8::/40", "9070"}, + {"2001:559:37b::/48", "7922"}, + {"2406:f380::/32", "398109"}, + {"240a:a5b4::/32", "144110"}, + {"2001:559:c293::/48", "7015"}, + {"2001:648:2cef::/48", "199399"}, + {"2001:da8:a023::/44", "24352"}, + {"2600:6:ff00::/45", "10507"}, + {"2804:5878::/32", "268131"}, + {"2a0d:4a00:d000::/34", "29148"}, + {"2001:250:2826::/44", "138378"}, + {"2001:fd8:34c0::/42", "132199"}, + {"2a0e:b107:dd0::/44", "212508"}, + {"2001:559:81c9::/48", "33662"}, + {"2001:13c7:600b::/48", "52360"}, + {"2409:4056:3000::/26", "55836"}, + {"2604:7a00::/32", "11232"}, + {"2604:e440::/32", "19523"}, + {"2605:8d80:3368::/32", "812"}, + {"2605:a404:41::/44", "33363"}, + {"2620:f4:8000::/48", "54652"}, + {"2804:2270::/32", "264100"}, + {"2806:20d:1605::/46", "32098"}, + {"2a02:26f7:f94c::/48", "36183"}, + {"2a03:2260:4000::/30", "201701"}, + {"2a05:91c2::/48", "57640"}, + {"2001:559:87e9::/45", "7015"}, + {"2001:559:c304::/48", "33287"}, + {"2404:3d00:40ea::/47", "3573"}, + {"2800:bf0:2a43::/42", "27947"}, + {"2400:89c0:1010::/42", "4808"}, + {"2401:d800:d510::/42", "7552"}, + {"2405:f980::/48", "135905"}, + {"2600:1480:e801::/37", "20940"}, + {"2605:8480::/32", "11472"}, + {"2a0a:73c0::/29", "207006"}, + {"2a0b:21c0:1000::/34", "21859"}, + {"2600:6c10:c18::/42", "20115"}, + {"2806:230:500c::/48", "265594"}, + {"2806:2f0:2082::/48", "17072"}, + {"2a00:10c8::/32", "12835"}, + {"2001:4490:dc4c::/46", "9829"}, + {"2408:80f1:110::/42", "138421"}, + {"2001:559:3a7::/48", "33651"}, + {"2001:df5:fb00::/48", "135495"}, + {"2408:8256:3d76::/44", "17623"}, + {"2409:8c85:aa04::/48", "24547"}, + {"240a:a140::/32", "142970"}, + {"2a00:86c0:2088::/47", "2906"}, + {"2a02:26f7:c0c1::/46", "20940"}, + {"2600:370f:71c3::/42", "32261"}, + {"2801:1c0::/39", "52424"}, + {"2a02:d6c0::/29", "34524"}, + {"2a06:86c0::/29", "3213"}, + {"2402:800:2100::/35", "7552"}, + {"2402:4440:8f00::/35", "24423"}, + {"2a01:367::/32", "30823"}, + {"240a:a467::/32", "143777"}, + {"2804:20fc:1a00::/39", "264525"}, + {"2a02:5a0::/29", "9063"}, + {"2001:559:8216::/48", "33652"}, + {"2804:2e50::/32", "265338"}, + {"2804:5df8::/32", "269004"}, + {"2a00:f660::/32", "42442"}, + {"2a09:2dc1::/32", "43641"}, + {"2401:8d00:2::/48", "24149"}, + {"240a:a77c::/32", "144566"}, + {"2600:370f:7512::/44", "32261"}, + {"2a05:2500::/32", "31586"}, + {"2a0b:3d00::/30", "48152"}, + {"2001:ee0:9840::/39", "45899"}, + {"2603:603d::/32", "10796"}, + {"2604:dc00:7454::/32", "19752"}, + {"2605:9a00:10::/48", "160"}, + {"2a02:26f7:e909::/46", "20940"}, + {"2a11:f500::/29", "400522"}, + {"2406:300::/32", "3462"}, + {"2600:6c20:20d::/43", "20115"}, + {"2408:80c5::/33", "4837"}, + {"2604:50:8::/48", "393950"}, + {"2605:9cc0:378::/48", "16509"}, + {"2a00:e48:8000::/33", "39787"}, + {"2001:3c8:1010::/47", "4621"}, + {"2400:adc2:600::/39", "9541"}, + {"2607:7c80:c0ff::/34", "64260"}, + {"2804:4774::/32", "267055"}, + {"2804:61b8::/32", "269252"}, + {"2a02:26f7:21::/48", "20940"}, + {"2403:a3c0::/46", "131600"}, + {"2602:806:4002::/48", "14032"}, + {"2602:ff96:15::/46", "40676"}, + {"2a02:ee80:4275::/46", "3573"}, + {"2a04:3e00:1001::/29", "56910"}, + {"2a11:cd40::/48", "210483"}, + {"2001:250:742f::/36", "23910"}, + {"2400:ab80::/32", "133399"}, + {"2406:fd00:800::/40", "24459"}, + {"240a:a1db::/32", "143125"}, + {"2607:8700:109::/48", "25820"}, + {"2620:10c:f004::/48", "33459"}, + {"2804:1cb4::/32", "61670"}, + {"2a00:5a20:2::/34", "199289"}, + {"2a02:26f7:d7::/48", "20940"}, + {"2001:7a0::/32", "15782"}, + {"2001:1248:5b8d::/42", "11172"}, + {"2403:9800:7f1c::/48", "4648"}, + {"2408:840d:7700::/42", "17621"}, + {"2804:27a8::/32", "263915"}, + {"2804:7ae0::/32", "271397"}, + {"2a00:e8c0::/32", "34797"}, + {"2a02:fb00::/29", "44066"}, + {"2a03:f140::/32", "206617"}, + {"2605:4c40::/41", "30081"}, + {"2620:11f:b000::/46", "394514"}, + {"2402:800:57ee::/36", "7552"}, + {"2403:2d00::/46", "17516"}, + {"2403:9800:7d00::/38", "4771"}, + {"240e:5:4000::/34", "17638"}, + {"2a00:f41::/30", "43447"}, + {"2a0b:b86:f8::/48", "3280"}, + {"2408:4009:501::/29", "37963"}, + {"2804:4fa0::/32", "268339"}, + {"2a07:3502:1060::/48", "33915"}, + {"2001:e48:80:1011::/46", "9583"}, + {"2409:8057:3014::/46", "56040"}, + {"2001:559:241::/48", "7725"}, + {"240e:45c:2b00::/40", "137402"}, + {"2806:2f0:24c1::/48", "22884"}, + {"2a02:4d80::/32", "8968"}, + {"2001:559:167::/48", "33652"}, + {"240a:a3eb::/32", "143653"}, + {"2a02:26f7:fbc5::/46", "20940"}, + {"2a0c:8c80::/32", "201808"}, + {"2001:67c:28e4::/48", "15370"}, + {"2001:1b48::/32", "8218"}, + {"2604:2500::/32", "19323"}, + {"2620:11c:f008::/48", "393667"}, + {"2c0f:edf8::/32", "328512"}, + {"2400:cb00:a2b0::/47", "13335"}, + {"240a:a8a6::/32", "144864"}, + {"2a01:8840:22::/45", "12041"}, + {"2a02:26f7:be05::/46", "20940"}, + {"2a0d:f280::/29", "59953"}, + {"2001:559:c2ba::/48", "7725"}, + {"2001:67c:778::/48", "50607"}, + {"2401:c680:2::/44", "133854"}, + {"2606:9a80::/32", "21769"}, + {"2606:b400:8020::/48", "1219"}, + {"2a02:1788::/32", "35838"}, + {"2a03:10c0::/30", "61044"}, + {"2001:da8:a809::/48", "23910"}, + {"2001:4430:c028::/35", "17853"}, + {"2001:44b8:6065::/48", "4739"}, + {"2409:8087:3d00::/33", "9808"}, + {"240a:afab::/32", "146661"}, + {"2800:280:4001::/48", "20940"}, + {"240e:1e:5000::/36", "140315"}, + {"2a0e:4840::/32", "33823"}, + {"2400:3240:9000::/33", "63996"}, + {"2402:ee40:10a::/32", "17754"}, + {"240a:a91e::/32", "144984"}, + {"2804:23c0::/34", "26218"}, + {"2a05:93c0::/29", "7979"}, + {"2407:a600::/36", "18004"}, + {"2607:fe28::/47", "53347"}, + {"2804:41ac::/32", "267449"}, + {"2001:559:83b0::/48", "33659"}, + {"2001:56b:500d::/36", "852"}, + {"2001:1248:59b3::/44", "11172"}, + {"2402:5300:4610::/40", "45903"}, + {"2605:a404:4b::/45", "33363"}, + {"2a0b:ff80::/29", "207980"}, + {"240a:afa6::/32", "146656"}, + {"2a03:4b40:8000::/29", "50710"}, + {"2a03:b280::/36", "29134"}, + {"2001:df0:467::/48", "131893"}, + {"240e:108:11c2::/48", "139220"}, + {"2620:149:5b1::/45", "714"}, + {"2800:bf0:3b40::/47", "52257"}, + {"2a00:f580::/32", "35819"}, + {"2001:67c:258::/48", "29067"}, + {"2401:d800:2bf0::/37", "7552"}, + {"2620:13b:a000::/44", "393657"}, + {"2a04:4e40:bc00::/48", "54113"}, + {"2620:12f:100e::/48", "396279"}, + {"2001:579:cf02::/47", "22773"}, + {"2001:678:acc::/48", "60404"}, + {"2402:6640:24::/43", "134995"}, + {"2804:7f7:c000::/34", "18881"}, + {"2a0b:4d07:259::/48", "44239"}, + {"2a10:ca80::/29", "44592"}, + {"2c0f:f1c8::/32", "37037"}, + {"2001:559:47b::/48", "7015"}, + {"240a:a981::/32", "145083"}, + {"240e:64::/32", "4134"}, + {"2804:41c0::/32", "267454"}, + {"2806:3d5::/32", "270133"}, + {"2a0e:fd45:2ba1::/33", "44103"}, + {"2a10:3600::/32", "8422"}, + {"2001:559:829a::/48", "33657"}, + {"2001:16f8:15::/48", "30870"}, + {"2604:2d80::/40", "30036"}, + {"2803:9ba0::/32", "263750"}, + {"2a10:3980::/29", "397423"}, + {"2606:b400:8824::/46", "14506"}, + {"2607:f110:e060::/39", "21889"}, + {"2804:7708:e000::/35", "271150"}, + {"2a01:7d40::/32", "8620"}, + {"2a02:26f7:ccc8::/48", "36183"}, + {"2a05:45c0::/32", "8193"}, + {"2001:559:4e3::/48", "7016"}, + {"2405:acc0::/32", "139922"}, + {"2620:129:9002::/48", "64262"}, + {"2405:201:ae00::/33", "55836"}, + {"240a:adff::/32", "146233"}, + {"2600:1401:4001::/34", "20940"}, + {"2806:230:2028::/48", "265594"}, + {"2a0f:abc0::/29", "56485"}, + {"2402:800:9971::/44", "7552"}, + {"2608:140:c::/48", "5927"}, + {"2804:5a64::/32", "268770"}, + {"2a02:26f7:e684::/48", "36183"}, + {"2001:559:c059::/48", "7922"}, + {"2600:1002:b0e0::/43", "22394"}, + {"2001:559:53e::/48", "33651"}, + {"2402:3a80:1b68::/40", "38266"}, + {"2405:ecc0::/32", "138293"}, + {"2407:b000:4012::/45", "17819"}, + {"2605:7d80::/32", "16843"}, + {"2804:5920::/32", "268170"}, + {"2001:559:4bb::/48", "33657"}, + {"240a:a9cc::/32", "145158"}, + {"2803:ad80:16::/48", "42473"}, + {"2a0a:c740:2::/48", "204170"}, + {"2001:559:8075::/48", "20214"}, + {"2603:4:1504::/48", "44273"}, + {"2804:6a14::/39", "61601"}, + {"2a00:16e8::/32", "9051"}, + {"2001:559:8136::/48", "7016"}, + {"2401:2700:3::/48", "9286"}, + {"2001:470:14f::/48", "47061"}, + {"2001:559:1ac::/48", "20214"}, + {"240e:3be:9c00::/34", "140310"}, + {"2a0e:bc40::/29", "204860"}, + {"2a0f:1e00:123::/48", "30633"}, + {"2001:1a11:84::/48", "42298"}, + {"2400:1c00:1a::/45", "45143"}, + {"2620:74:a3::/45", "11840"}, + {"2a03:3180::/44", "44453"}, + {"2402:ef2c::/31", "7633"}, + {"2602:febc::/36", "398491"}, + {"2620:10a::/44", "43"}, + {"2800:484:bf00::/40", "10620"}, + {"2a02:26f7:f1c5::/46", "20940"}, + {"2a07:4a00::/29", "50113"}, + {"2a0f:ff00:1337::/44", "213281"}, + {"2c0f:f980:2000::/33", "33763"}, + {"2001:559:48c::/48", "22909"}, + {"2001:978:2401:1::/36", "174"}, + {"2001:448a:7070::/40", "7713"}, + {"2400:9380:98c0::/44", "136167"}, + {"2a00:cb60:2::/32", "49312"}, + {"2a04:a40::/29", "50324"}, + {"240a:a18f::/32", "143049"}, + {"2804:3764:ffff::/48", "266409"}, + {"2a07:f600:4010::/48", "60591"}, + {"2a0c:bc00::/29", "205344"}, + {"2001:559:3b8::/48", "7922"}, + {"2001:df6:a380::/48", "141966"}, + {"2405:70c0::/32", "55736"}, + {"2409:8002:1800::/40", "38019"}, + {"2806:2f0:60a1::/46", "17072"}, + {"2a03:5a00:35::/48", "201717"}, + {"2406:bd00:de00::/48", "55651"}, + {"2a02:2350::/32", "51468"}, + {"2001:504:2e::/48", "10578"}, + {"2001:559:5b1::/48", "22909"}, + {"2407:1e40:fcf::/32", "141732"}, + {"2604:6680::/32", "18853"}, + {"2804:3398::/32", "265406"}, + {"2a02:21c8::/32", "35625"}, + {"2a06:c002::/32", "206766"}, + {"2001:550:1:b::/61", "174"}, + {"2001:ba8::/32", "8943"}, + {"2001:df7:6800:1182::/52", "59194"}, + {"2401:4900:1100::/41", "45609"}, + {"2a02:9d0::/32", "12617"}, + {"2001:559:c46d::/46", "7016"}, + {"2804:57f4:800::/48", "264349"}, + {"2a01:c50f:b780::/36", "12479"}, + {"2001:559:c2da::/48", "33652"}, + {"2001:67c:1968::/48", "24989"}, + {"2603:f260::/24", "397165"}, + {"2605:a401:8385::/41", "33363"}, + {"2a0b:4342:4000::/36", "57578"}, + {"2a11:cb40::/29", "204790"}, + {"2001:67c:22f8::/48", "44770"}, + {"240e:45c:7300::/40", "140532"}, + {"2a00:6140::/32", "200062"}, + {"2a04:4e42:6000::/32", "54113"}, + {"2a0d:5800::/29", "34422"}, + {"240a:aaf9::/32", "145459"}, + {"240e:397:1800::/38", "140493"}, + {"2803:3360::/32", "269794"}, + {"2a05:acc0::/29", "3212"}, + {"2a0b:bbc0:1c00::/40", "58010"}, + {"2001:da8:a80d::/37", "23910"}, + {"240a:a41b::/32", "143701"}, + {"2606:7700:1::/46", "395461"}, + {"2804:67a4:fe01::/39", "269641"}, + {"2408:8459:ae50::/35", "17816"}, + {"2606:4700:5b::/45", "13335"}, + {"2620:125:9005::/46", "397415"}, + {"2801:1c8:200::/42", "19429"}, + {"2a00:e4a0:200:100::/56", "49952"}, + {"2a0f:8340::/29", "29608"}, + {"2001:7f8:e7::/48", "34800"}, + {"2405:eb80:8000::/33", "18351"}, + {"240a:affd::/32", "146743"}, + {"2409:806a:5b00::/37", "9808"}, + {"2409:8c20::/36", "56046"}, + {"240a:acdc::/32", "145942"}, + {"2804:214:15::/33", "26615"}, + {"2804:7f88::/32", "271694"}, + {"2a01:4b40:4802::/37", "21299"}, + {"2408:870c:2060::/36", "17621"}, + {"2600:1419:d001::/37", "20940"}, + {"2a00:4380::/29", "24751"}, + {"2405:1c0:6651::/46", "55303"}, + {"240e:45c:5400::/40", "131285"}, + {"2604:a00:13::/45", "19318"}, + {"2620:117:5000::/40", "14298"}, + {"2800:160:1051::/46", "14259"}, + {"2c0f:f188:8::/32", "28683"}, + {"2001:ee0:3d0::/42", "135905"}, + {"2804:26d4::/32", "263860"}, + {"2001:250:2403::/45", "23910"}, + {"2001:49f0:d0d0::/44", "174"}, + {"2406:2400:ccef::/48", "45287"}, + {"240e:728::/24", "4134"}, + {"2803:1600::/32", "52389"}, + {"240e:44d:1400::/41", "140345"}, + {"2800:370:42::/48", "28006"}, + {"2a05:2ec0::/29", "34580"}, + {"2001:450:2016::/32", "3549"}, + {"240a:af2c::/32", "146534"}, + {"2600:1f12::/36", "8987"}, + {"2a04:4e40:12f0::/48", "54113"}, + {"2408:8256::/41", "17622"}, + {"240e:92c::/30", "4134"}, + {"2804:14fc::/32", "263363"}, + {"2a02:26f7:c9::/48", "20940"}, + {"2400:3b00::/46", "18229"}, + {"2404:bf40:c281::/41", "139084"}, + {"2409:8d5b::/29", "9808"}, + {"2600:1006:b070::/40", "22394"}, + {"2800:160:1336::/44", "14259"}, + {"2804:5260::/32", "268514"}, + {"2806:370:9050::/40", "28403"}, + {"2c0f:ea20::/32", "328526"}, + {"2408:870c:10::/44", "17621"}, + {"2a02:26f7:d6::/48", "36183"}, + {"2a04:e00:14::/46", "54103"}, + {"2001:559:c1c4::/47", "7015"}, + {"2a01:8b20::/32", "42314"}, + {"2a03:85c0:140::/48", "24989"}, + {"2001:559:7b5::/48", "7922"}, + {"2001:559:8155::/48", "33287"}, + {"2402:800:377f::/40", "7552"}, + {"2604:ae00::/46", "7029"}, + {"2001:559:8579::/48", "33491"}, + {"2a03:5a00:7::/48", "61400"}, + {"2600:140b:fc01::/29", "20940"}, + {"2600:1802:3::/45", "16552"}, + {"2804:414::/32", "262760"}, + {"2804:2a64::/32", "262644"}, + {"2001:559:498::/48", "7922"}, + {"2001:19d0:700::/32", "2044"}, + {"2001:4888:803e::/48", "6167"}, + {"2620:1ec:8f8::/45", "8068"}, + {"2804:39d8::/32", "266054"}, + {"2a03:ad00::/29", "8208"}, + {"2a07:4900::/29", "50959"}, + {"2a0d:b201:c0c0::/42", "206026"}, + {"2001:67c:274::/48", "42307"}, + {"2406:57c0:9999::/48", "134672"}, + {"2407:cbc0::/48", "140824"}, + {"2409:805c:30f1::/44", "9808"}, + {"2602:feda:b99::/46", "212995"}, + {"2804:14d:baa3::/45", "28573"}, + {"2a0d:eb00::/31", "204880"}, + {"2001:1900:5:2:2:0:c:2284/34", "3356"}, + {"2404:bf40:a181::/48", "2764"}, + {"2600:6c10:f606::/47", "20115"}, + {"2801:c4:50::/48", "28519"}, + {"2a06:1b00:108::/32", "8302"}, + {"2001:559:47c::/48", "33287"}, + {"2400:3360::/48", "140766"}, + {"2401:c280::/32", "9752"}, + {"240a:aacd::/32", "145415"}, + {"240e:908:8200::/29", "4134"}, + {"2605:5640:3000::/36", "25635"}, + {"2804:5ea0::/32", "269046"}, + {"2001:559:844f::/48", "7016"}, + {"2001:fd0:201::/39", "10029"}, + {"2401:d800:22f0::/39", "7552"}, + {"2a01:6400::/32", "21430"}, + {"2a0b:8540::/29", "205572"}, + {"2001:978:501::/38", "174"}, + {"2401:4900:5930::/40", "45609"}, + {"2600:1003:b8d0::/44", "6167"}, + {"2804:1a14::/34", "28153"}, + {"2806:263:8300::/37", "13999"}, + {"2a10:a9c0::/29", "212144"}, + {"2409:8d39::/25", "9808"}, + {"2607:fb91:be00::/28", "21928"}, + {"2610:128:9600::/33", "11686"}, + {"2804:4508::/32", "267668"}, + {"2a02:5320:700::/40", "12189"}, + {"2a0a:90c0:1051::/45", "205080"}, + {"2403:7940:fcd0::/47", "33353"}, + {"2804:1398:8000::/33", "263541"}, + {"2804:69d0::/32", "270293"}, + {"2a02:26f7:e141::/46", "20940"}, + {"2a0e:fd45:1000::/48", "207852"}, + {"2a0f:9400:780d::/43", "147028"}, + {"2001:559:38a::/48", "33287"}, + {"2401:c3c0::/32", "136972"}, + {"2804:8110::/33", "272429"}, + {"2a02:26f7:e105::/46", "20940"}, + {"2400:cb00:a410::/45", "13335"}, + {"2408:8957:4a00::/40", "17622"}, + {"2607:f5f0::/32", "5739"}, + {"2a04:4e40:610::/44", "54113"}, + {"2a10:be40:1::/48", "20799"}, + {"2803:cb00::/32", "26619"}, + {"2001:67c:164::/48", "49866"}, + {"2408:840c:c700::/40", "17621"}, + {"2801:1b:2800::/48", "270074"}, + {"2804:6490::/32", "269435"}, + {"2a02:67e0::/34", "203148"}, + {"2a03:9480::/32", "42442"}, + {"2a0d:e841::/32", "35913"}, + {"2001:67c:4ac::/48", "198692"}, + {"2600:140f:7400::/48", "9498"}, + {"2602:fbac::/36", "400523"}, + {"2001:67c:2e74::/48", "60396"}, + {"2409:8d7f::/24", "9808"}, + {"240a:a432::/32", "143724"}, + {"240e:678:2600::/32", "4134"}, + {"2605:3b00::/36", "36146"}, + {"2407:9802:f000::/29", "10139"}, + {"2409:8750:f400::/31", "56047"}, + {"2a02:26f7:cbc4::/48", "36183"}, + {"2001:da8:900d::/48", "23910"}, + {"2001:4878:a204::/48", "12222"}, + {"2403:1cc0:1101::/46", "45352"}, + {"2001:67c:12f0::/48", "12843"}, + {"2001:df0:e400::/48", "133661"}, + {"240e:438:9220::/43", "140647"}, + {"2607:ff60:5003::/34", "3900"}, + {"2804:75c::/32", "262637"}, + {"2a0f:ca83:1337::/48", "208046"}, + {"2001:da8:8032::/47", "24364"}, + {"2001:48a8:68f8::/45", "237"}, + {"240a:af1c::/32", "146518"}, + {"240e:982:e200::/40", "4816"}, + {"2a02:b70::/32", "48972"}, + {"2a03:3cc0::/29", "50596"}, + {"2001:668:121::/46", "54040"}, + {"2804:6fc:c100::/36", "28158"}, + {"2804:2d80:b00d::/33", "262378"}, + {"2a06:1287:3::/48", "135103"}, + {"2a0f:c240::/29", "21488"}, + {"2a12:b580::/29", "60135"}, + {"2001:559:4ae::/43", "7922"}, + {"2001:559:54c::/47", "21508"}, + {"2402:800:950f::/43", "7552"}, + {"2402:3a80:500::/41", "38266"}, + {"2402:e280:300::/48", "134674"}, + {"2408:8000:a017::/48", "140717"}, + {"2605:e680::/32", "30500"}, + {"2804:3774::/34", "266416"}, + {"2409:800c::/34", "56042"}, + {"240a:aee9::/32", "146467"}, + {"2600:1012:b090::/41", "22394"}, + {"2804:2e0::/32", "28233"}, + {"2804:50c8::/32", "268410"}, + {"2001:559:c3d8::/48", "7016"}, + {"2406:6e00:f03a::/48", "55517"}, + {"240e:45c:2800::/40", "131285"}, + {"2604:d600:618::/45", "32098"}, + {"2804:214:8440::/43", "26615"}, + {"2a01:190:15ef::/48", "44753"}, + {"2402:800:920f::/43", "7552"}, + {"240a:a5f9::/32", "144179"}, + {"2600:140f:2c00::/48", "9498"}, + {"2804:4ae0::/47", "267269"}, + {"2a04:4e42:4058::/35", "54113"}, + {"2001:b08:8::/48", "59714"}, + {"2406:840:f893::/48", "212034"}, + {"2806:2a0:34::/40", "28548"}, + {"2a02:830::/32", "8426"}, + {"2a04:4e40:f400::/48", "54113"}, + {"2400:cb00:427::/48", "13335"}, + {"2406:57c0:128::/47", "134672"}, + {"240a:aa02::/32", "145212"}, + {"240a:ae4f::/32", "146313"}, + {"2804:3dc0::/32", "266551"}, + {"2a00:74c0::/32", "6659"}, + {"2001:1900:236b::/45", "3356"}, + {"2402:800:53ee::/37", "7552"}, + {"2405:be00::/32", "18148"}, + {"2a02:26f7:b9a5::/46", "20940"}, + {"2401:ee00:202::/37", "23951"}, + {"2606:c0:1::/48", "18450"}, + {"2804:11a4::/32", "53243"}, + {"2a00:1370:f201::/36", "25513"}, + {"2a03:5640:f303::/37", "2906"}, + {"2a0d:3842:1270::/48", "57629"}, + {"2001:1218:6047::/44", "278"}, + {"2a02:26f7:dcc5::/46", "20940"}, + {"240a:a593::/32", "144077"}, + {"2804:1444::/32", "263322"}, + {"2a03:ad40:110::/48", "199349"}, + {"2604:f80:5::/32", "22458"}, + {"2a0c:a340::/29", "50673"}, + {"2a0e:d800::/29", "209110"}, + {"2604:880:6e::/48", "394727"}, + {"2800:110:3805::/37", "4270"}, + {"2a00:1800::/32", "57728"}, + {"2a02:ed0::/34", "47956"}, + {"2a02:2640::/32", "2119"}, + {"2a09:9740::/48", "50007"}, + {"2408:8256:3d7f::/48", "17816"}, + {"2600:1012:b0d0::/42", "6167"}, + {"2a01:6340::/29", "60404"}, + {"2a06:6940::/29", "20559"}, + {"2607:f5c0:8041::/33", "10326"}, + {"2a07:5980::/29", "204601"}, + {"2400:dcc0:a504::/38", "38631"}, + {"2804:3320::/32", "265374"}, + {"2a02:26f7:c508::/48", "36183"}, + {"2a02:26f7:db09::/46", "20940"}, + {"2604:d600:15fe::/38", "32098"}, + {"2801:17:2800::/48", "13489"}, + {"2a05:4200::/47", "21534"}, + {"2001:559:172::/48", "33662"}, + {"2001:559:c3e3::/48", "7015"}, + {"240a:a0b8::/32", "142834"}, + {"240a:a80b::/32", "144709"}, + {"2600:1488:6461::/40", "20940"}, + {"2600:9000:1156::/44", "16509"}, + {"2400:a980:2900::/37", "133111"}, + {"2600:141c:d001::/34", "20940"}, + {"2804:137c::/32", "26609"}, + {"2001:da8:3050::/48", "24358"}, + {"240a:a06e::/32", "142760"}, + {"240a:a21d::/32", "143191"}, + {"2604:af80:2448::/36", "18859"}, + {"2800:b40:10::/48", "262220"}, + {"2806:230:200d::/48", "11888"}, + {"2405:4800:101::/35", "18403"}, + {"2604:1280:1::/46", "11696"}, + {"2800:320:840e::/47", "27882"}, + {"2a01:b747:12a::/41", "714"}, + {"2a09:3b40::/29", "57773"}, + {"2408:8957:9900::/40", "17816"}, + {"2409:8914:c400::/39", "56044"}, + {"2602:fed2:7709::/48", "23470"}, + {"2401:4900:3100::/41", "45609"}, + {"240a:ab2b::/32", "145509"}, + {"2a10:e140::/32", "12779"}, + {"2001:559:c1a7::/48", "7015"}, + {"2001:678:14::/47", "42385"}, + {"2606:a000:707::/48", "11955"}, + {"2001:1be0::/32", "2686"}, + {"2401:b80::/34", "133334"}, + {"2405:2d40:1a::/32", "55695"}, + {"2803:ea60::/32", "267883"}, + {"2804:14d:5c55::/44", "28573"}, + {"2804:3538::/32", "266275"}, + {"2a00:1d58:e000::/35", "47524"}, + {"2a0a:e5c2::/32", "209898"}, + {"2001:559:85e8::/48", "33287"}, + {"2001:678:c0::/48", "51058"}, + {"2804:5a4c::/32", "268763"}, + {"2404:b1:b000::/33", "9891"}, + {"2804:a14:300b::/43", "262342"}, + {"2804:23e4::/42", "264191"}, + {"2806:217:402::/38", "28394"}, + {"2806:310:100::/42", "16960"}, + {"2001:559:85bb::/48", "33287"}, + {"240a:ab51::/32", "145547"}, + {"2804:2d60::/32", "265278"}, + {"2a02:26f7:dd89::/42", "20940"}, + {"2001:500:84::/48", "394353"}, + {"2001:1248:a900::/40", "11172"}, + {"2001:44b8:2042::/48", "4739"}, + {"2409:8028:30e1::/43", "56041"}, + {"2604:65c0::/39", "14585"}, + {"2a02:a00:1034::/34", "15987"}, + {"2a02:26f7:ba89::/42", "20940"}, + {"2a03:cd00::/32", "10310"}, + {"2001:550:b801::/38", "174"}, + {"2401:4f00::/32", "38328"}, + {"240a:a39f::/32", "143577"}, + {"2a02:cfc0::/29", "60032"}, + {"2a09:bac0:87::/44", "13335"}, + {"240e:3bb:7800::/39", "4134"}, + {"240a:ad0a::/32", "145988"}, + {"2604:d600:1071::/46", "32098"}, + {"2804:23b0::/32", "262645"}, + {"2a0e:b107:1780::/46", "210623"}, + {"2405:6e00:420::/43", "18291"}, + {"2620:17a:a::/48", "29705"}, + {"2800:bf0:8272::/45", "52257"}, + {"2a06:1287:2600::/44", "62217"}, + {"2a09:aa80::/32", "50673"}, + {"2408:8459:6850::/38", "17816"}, + {"240e:bf:b8f0::/46", "138514"}, + {"2a05:45c7::/47", "202175"}, + {"2001:559:4a9::/48", "33660"}, + {"2400:7b80::/30", "133193"}, + {"2a03:2880:f070::/47", "32934"}, + {"2a04:4e42:fd8::/42", "54113"}, + {"2a04:d9c0::/32", "20495"}, + {"2001:250:6412::/48", "23910"}, + {"2408:8756:3af0::/46", "17623"}, + {"2600:140b:dc01::/34", "20940"}, + {"2605:c840::/32", "397303"}, + {"2806:230:4027::/48", "11888"}, + {"2a06:e881:53ff::/48", "209859"}, + {"2a0c:800::/29", "207439"}, + {"2001:67c:2ffc:2e00::/56", "15440"}, + {"2402:800:3755::/42", "7552"}, + {"2408:8956:2c00::/40", "17622"}, + {"2604:4640::/32", "32625"}, + {"2607:f1c8::/32", "32890"}, + {"2804:2088::/32", "53223"}, + {"2806:230:2004::/48", "265594"}, + {"2a02:26f7:e7d1::/46", "20940"}, + {"2a11:4c40::/29", "204790"}, + {"2001:559:c274::/48", "33651"}, + {"2600:6c3a:47::/42", "20115"}, + {"2602:feb4:260::/44", "25961"}, + {"2806:2f0:9601::/46", "17072"}, + {"2a01:5b0:27::/44", "50611"}, + {"2001:559:1d8::/48", "33287"}, + {"240e:438:5e40::/34", "4134"}, + {"2806:2f0:1281::/48", "17072"}, + {"2001:4de0:6102::/48", "33438"}, + {"240e:980:2900::/40", "4134"}, + {"2602:fc0e::/40", "22630"}, + {"2804:14d:4e00::/40", "28573"}, + {"2804:133c::/32", "263523"}, + {"2804:6bd8::/35", "270429"}, + {"2806:230:2009::/48", "11888"}, + {"2a02:26f7:4c::/48", "36183"}, + {"2a11:75c0::/29", "211501"}, + {"2001:250:851::/48", "23910"}, + {"2001:67c:2bb8::/48", "35731"}, + {"2001:43f8:280::/48", "23889"}, + {"2001:44c8:4060::/43", "45430"}, + {"2600:370f:6105::/43", "32261"}, + {"2604:2e80:c06::/38", "30036"}, + {"2606:9c40::/48", "14618"}, + {"2804:1710::/32", "263120"}, + {"2a00:d1e0::/32", "12843"}, + {"2a02:2c00::/29", "203424"}, + {"2606:8900:b::/32", "33044"}, + {"2607:cc80:2000::/32", "25664"}, + {"2803:2b00:1101::/46", "52468"}, + {"2001:49f0:d0fb::/45", "174"}, + {"2600:1009:b1f0::/33", "22394"}, + {"2804:2d24:d0::/39", "263032"}, + {"2804:7848::/32", "271232"}, + {"2a00:d680::/32", "31708"}, + {"2a0f:ca85:1::/48", "207616"}, + {"2001:dc7:5d0d::/41", "24151"}, + {"2401:b840::/32", "136956"}, + {"2607:fad8::/44", "22652"}, + {"2804:5bb8:c4::/44", "268865"}, + {"2a02:26f0:80::/48", "43639"}, + {"2001:ee0:9200::/37", "45899"}, + {"2600:6c3a:819::/42", "20115"}, + {"2604:7c80::/32", "18897"}, + {"2800:170::/32", "7908"}, + {"2801:104:40::/44", "27828"}, + {"2806:230:4039::/48", "11888"}, + {"2806:2f0:12e1::/48", "17072"}, + {"2a02:3d0:7::/48", "26506"}, + {"2a0b:7a80::/29", "34856"}, + {"2a0d:d7c0::/29", "210044"}, + {"2001:559:87f7::/48", "33491"}, + {"2407:880::/32", "4594"}, + {"2408:8956:e700::/40", "17816"}, + {"2600:9000:a500::/43", "16509"}, + {"2804:21d8::/32", "264577"}, + {"2001:1250:a000::/44", "22894"}, + {"2408:8956:1240::/40", "17622"}, + {"2804:804::/32", "262338"}, + {"2a00:cee2:dcd::/31", "60268"}, + {"2c0f:ef78:5::/46", "63293"}, + {"2400:8800:1e90::/33", "3491"}, + {"2400:cb00:59::/48", "13335"}, + {"2402:e280:400::/40", "134674"}, + {"2405:201:800::/34", "55836"}, + {"2408:8000:5005::/32", "4837"}, + {"2a02:26f7:c14c::/48", "36183"}, + {"2a03:b680::/29", "211197"}, + {"2a04:4e40:2405::/40", "54113"}, + {"2604:d600:661::/44", "32098"}, + {"2a00:cb8:39::/48", "15695"}, + {"2a02:26f0:8600::/48", "34164"}, + {"2a06:1281:6::/29", "61138"}, + {"2001:253:116::/48", "142082"}, + {"240a:a45f::/32", "143769"}, + {"2804:3138:d020::/34", "265000"}, + {"2a02:9b0:400f::/42", "35819"}, + {"2001:503:231d::/48", "26415"}, + {"2401:d800:5d70::/40", "7552"}, + {"2402:800:7b20::/41", "7552"}, + {"240a:ab7a::/32", "145588"}, + {"240e:44d:6800::/42", "140345"}, + {"2602:fbf6:101::/37", "8095"}, + {"2800:bf0:2809::/43", "27947"}, + {"2806:2f0:2120::/48", "17072"}, + {"2a02:26f7:b9a4::/48", "36183"}, + {"2a02:26f7:fbc8::/48", "36183"}, + {"2a03:1ac0::/48", "41002"}, + {"2a04:4300::/48", "12703"}, + {"2a07:3c00::/29", "42093"}, + {"2001:559:48d::/48", "7922"}, + {"2600:6c20:1c::/46", "20115"}, + {"2605:83c0::/32", "33556"}, + {"2400:9380:81c0::/44", "136167"}, + {"2800:bf0:828f::/48", "52257"}, + {"2804:4658::/32", "266984"}, + {"2a0f:9400:8015::/48", "213347"}, + {"2001:470:c4::/47", "6939"}, + {"2001:da8:4006::/47", "24353"}, + {"2a05:2941::/29", "61131"}, + {"240e:438:5640::/36", "4134"}, + {"2604:fc80::/32", "33438"}, + {"2806:2f0:1320::/41", "17072"}, + {"2001:67c:1768::/48", "209859"}, + {"2001:df0:7440::/48", "131112"}, + {"2001:44b8:30cf::/48", "4739"}, + {"2600:140f:1600::/48", "9498"}, + {"2804:6e4:4000::/32", "262612"}, + {"2804:4348::/32", "267560"}, + {"2001:ce0:5::/48", "4158"}, + {"2a0f:ec81::/32", "207893"}, + {"240a:a34c::/32", "143494"}, + {"240a:a64f::/32", "144265"}, + {"2804:2d24:200::/32", "263032"}, + {"2405:6e00:2f1::/48", "65442"}, + {"2607:fea8::/32", "812"}, + {"2804:10cc::/32", "263650"}, + {"2804:1f10::/32", "2715"}, + {"2804:4488:1010::/44", "262480"}, + {"2a0b:89c0::/31", "3214"}, + {"2402:3a80:1708::/47", "38266"}, + {"2804:6308::/32", "269334"}, + {"2806:2f0:83c3::/42", "17072"}, + {"2001:559:7b8::/48", "7016"}, + {"2001:559:c341::/48", "7015"}, + {"2001:978:2202:1::/47", "174"}, + {"2402:8100:3058::/42", "55644"}, + {"2a04:d500::/32", "48618"}, + {"2a12:4940:1235::/36", "211398"}, + {"2600:5c00:1000::/34", "20001"}, + {"2602:fc49::/36", "399905"}, + {"2607:f038:4016::/44", "21527"}, + {"2806:2f0:8161::/46", "17072"}, + {"2a02:26f7:c3c4::/48", "36183"}, + {"2a02:26f7:ec00::/48", "36183"}, + {"2804:76e0::/32", "271140"}, + {"2a00:e6a0:4::/32", "12303"}, + {"2001:559:8091::/48", "7922"}, + {"2001:67c:252c::/48", "39879"}, + {"2a01:ce91::/36", "51964"}, + {"240e:982:8000::/40", "133774"}, + {"2804:3f08::/32", "266635"}, + {"2a02:26f0:a501::/38", "20940"}, + {"2001:559:84b6::/48", "33656"}, + {"2403:c00:704::/36", "17488"}, + {"240a:a012::/32", "142668"}, + {"2606:4700:83b0::/44", "13335"}, + {"2001:6d0:fffc::/48", "42385"}, + {"2001:1878:b00::/44", "5726"}, + {"2606:1a40:201b::/48", "25369"}, + {"2a0d:3440::/29", "49223"}, + {"2c0f:ece8::/32", "328386"}, + {"2600:6c20:c28::/43", "20115"}, + {"2804:1d4c::/32", "264359"}, + {"2804:5284:1000::/33", "268523"}, + {"2a02:26f7:bf4c::/48", "36183"}, + {"2001:559:8620::/48", "33650"}, + {"2001:43f8:1030::/48", "3067"}, + {"2402:7800:203::/48", "45772"}, + {"240a:ae0e::/32", "146248"}, + {"240a:af3a::/32", "146548"}, + {"2600:370f:34d1::/42", "32261"}, + {"2a05:5840::/31", "28761"}, + {"2804:65f0::/32", "269524"}, + {"2a01:7440::/32", "12739"}, + {"2a0e:6540:a192::/48", "208364"}, + {"2800:bf0:104::/43", "52257"}, + {"2804:14c:7d85::/44", "28573"}, + {"2a0b:ae47:3::/45", "40676"}, + {"2620:84:c000::/48", "30242"}, + {"2800:160:1317::/44", "14259"}, + {"2804:675c::/32", "269623"}, + {"2a0b:a907::/32", "206468"}, + {"2a0d:2100::/29", "204947"}, + {"2001:df0:266::/48", "55901"}, + {"2400:cb00:60::/47", "13335"}, + {"2409:8054:3018::/48", "9808"}, + {"2803:a200::/32", "27775"}, + {"2a01:53c0:ff13::/48", "54994"}, + {"2a02:26f7:c988::/48", "36183"}, + {"2a03:78c0::/32", "198167"}, + {"2a07:c700::/29", "50178"}, + {"2001:da8:3049::/48", "23910"}, + {"2600:1408:cc00::/48", "32787"}, + {"2606:ae80:1c10::/44", "25751"}, + {"2804:1b80::/32", "262993"}, + {"2001:df0::/48", "9431"}, + {"2408:8459:9630::/41", "17622"}, + {"2804:14d:5ce4::/43", "28573"}, + {"2a0d:1a45:2002::/33", "57782"}, + {"2001:4888:8054::/47", "6167"}, + {"2402:7d80:999a::/33", "63582"}, + {"2409:8055:300a::/43", "56040"}, + {"2604:2e8e:2c00::/35", "30036"}, + {"2a00:1cc0::/32", "20521"}, + {"2a07:a1c0::/29", "206423"}, + {"2001:559:842d::/48", "13367"}, + {"2401:1d40:3100::/47", "58466"}, + {"2405:c0:80::/48", "138881"}, + {"2602:feda:d80::/48", "142048"}, + {"2804:4914::/32", "267163"}, + {"2a04:4e40:200::/48", "54113"}, + {"2a06:e881:1702::/48", "206813"}, + {"2a0e:8f02:f02a::/48", "212577"}, + {"2001:559:8108::/48", "33491"}, + {"2804:56b8::/32", "52633"}, + {"2001:559:254::/48", "7922"}, + {"2409:8d14::/43", "56044"}, + {"2600:141b:d801::/34", "20940"}, + {"2602:fcce::/40", "399200"}, + {"2804:2514:8100::/33", "264259"}, + {"2a0e:2980:1::/48", "33984"}, + {"2a06:2ec0::/32", "206281"}, + {"2a0a:8e40::/29", "203605"}, + {"2a0f:5680:4::/32", "60906"}, + {"2001:559:c477::/48", "7015"}, + {"2405:4800:ae01::/30", "18403"}, + {"2602:fe2e::/37", "21700"}, + {"2605:3380:4445::/44", "12025"}, + {"2800:29::/29", "7908"}, + {"2a01:7a8::/48", "207701"}, + {"2001:1a11:12d::/48", "42298"}, + {"2600:1400:b001::/33", "20940"}, + {"2800:160:19ca::/45", "14259"}, + {"2a03:220::/32", "61400"}, + {"2409:8904:2da0::/38", "24547"}, + {"2607:f3a0:a007::/48", "399813"}, + {"2800:550:2b::/32", "7004"}, + {"2001:1c00::/23", "33915"}, + {"2804:2898::/32", "28305"}, + {"2a02:26f7:bdc0::/48", "36183"}, + {"2a02:26f7:ea01::/46", "20940"}, + {"2a02:26f7:f6c4::/48", "36183"}, + {"2001:750::/29", "15589"}, + {"2001:da8:ce::/48", "138374"}, + {"2607:fa40:2::/48", "6649"}, + {"2403:c00::/45", "17488"}, + {"2403:a200:a200::/39", "17428"}, + {"2604:d6c0:5000::/36", "64271"}, + {"2a03:db80:4810::/48", "60824"}, + {"2a0e:1101::/47", "51255"}, + {"2001:559:570::/48", "7922"}, + {"2604:600::/33", "40260"}, + {"2804:62f0:d102::/34", "269329"}, + {"2a00:16a0::/32", "15830"}, + {"2600:1408:1c::/48", "21342"}, + {"2607:f4a8:200d::/48", "397894"}, + {"2402:6a40:6::/48", "135718"}, + {"2604:2940::/32", "395719"}, + {"2801:80:280::/48", "28631"}, + {"2a00:9380::/32", "15557"}, + {"2a07:3500:1998::/48", "38915"}, + {"2a0f:607:1060::/47", "43126"}, + {"2001:559:c360::/48", "7016"}, + {"2604:9cc0:9::/48", "201106"}, + {"2607:fdf0:5e07::/44", "8008"}, + {"2803:e3e0::/32", "270071"}, + {"2001:559:85e4::/48", "33657"}, + {"2001:67c:2294::/48", "9052"}, + {"2001:df0:20b::/48", "38549"}, + {"2600:1406:1b::/48", "21342"}, + {"2804:5180::/32", "268456"}, + {"2804:7bf8::/32", "271466"}, + {"2a0e:1c80:5::/48", "40028"}, + {"2001:559:2f4::/46", "33287"}, + {"2001:578:d00::/41", "22773"}, + {"240a:ab2a::/32", "145508"}, + {"2607:fd48:0:3::/39", "13536"}, + {"2804:1368:fb00::/37", "262808"}, + {"2804:61c0:9000::/36", "269254"}, + {"2001:400:6440:105::/47", "293"}, + {"2001:400:8823::/48", "291"}, + {"2001:43f8:70::/45", "36982"}, + {"2401:d800:5790::/42", "7552"}, + {"240a:a66c::/32", "144294"}, + {"240a:a6eb::/32", "144421"}, + {"2804:7ebc::/32", "271644"}, + {"2a01:41e3::/32", "62336"}, + {"2a0e:9900::/29", "56598"}, + {"2604:2d80:4000::/34", "30036"}, + {"2604:4340::/32", "32647"}, + {"2800:d302:18::/45", "11830"}, + {"2804:f24::/32", "263567"}, + {"2804:5f24::/32", "269079"}, + {"2a0e:fd45:1::/48", "61409"}, + {"2001:559:870d::/48", "33650"}, + {"2403:5340::/32", "137639"}, + {"2406:840:9992::/47", "210320"}, + {"2406:840:e509::/48", "211571"}, + {"2406:9a80:311::/48", "206704"}, + {"2408:8756:a00::/40", "136958"}, + {"240a:a386::/32", "143552"}, + {"240a:ab3a::/32", "145524"}, + {"2a02:26f7:c341::/45", "20940"}, + {"2406:840:fef7::/48", "132623"}, + {"240a:a0cd::/32", "142855"}, + {"2804:2140:1802::/32", "53059"}, + {"2a02:f18::/32", "15879"}, + {"2a04:6400::/35", "62240"}, + {"2001:4268:700::/35", "15964"}, + {"2001:4490:3a00::/42", "9829"}, + {"2400:b480::/32", "131589"}, + {"240a:a220::/32", "143194"}, + {"240e:fc::/33", "136200"}, + {"240e:108:11d9::/45", "4134"}, + {"2a0c:a9c7:241::/48", "42728"}, + {"2401:d800:56b0::/41", "7552"}, + {"2001:559:816d::/48", "33657"}, + {"2402:f280::/32", "4851"}, + {"2409:897d::/30", "9808"}, + {"2a02:ac80:5001::/34", "25145"}, + {"240a:a216::/32", "143184"}, + {"2600:6c7f:9030::/48", "20115"}, + {"2604:d2c0::/32", "12131"}, + {"2a02:26f7:b68c::/48", "36183"}, + {"2a05:9cc7::/32", "2116"}, + {"2001:9e8:2180::/35", "8881"}, + {"2804:46f8:8000::/34", "267023"}, + {"2a02:26f7:c391::/42", "20940"}, + {"2801:116::/48", "271827"}, + {"2a06:1e00:30::/48", "60695"}, + {"2a07:180::/32", "209242"}, + {"2001:1248:a9a1::/38", "11172"}, + {"2620:10a:a002::/40", "16920"}, + {"2a02:8388::/31", "8412"}, + {"2001:559:8346::/48", "33287"}, + {"2001:4490:d000::/46", "9829"}, + {"2620:100:5007::/48", "29889"}, + {"2a02:26f7:f6fa::/47", "20940"}, + {"2a02:27d0:101::/32", "49463"}, + {"2001:559:455::/48", "7016"}, + {"2001:559:80d4::/48", "7016"}, + {"2408:84f3:4440::/38", "17816"}, + {"240a:a65f::/32", "144281"}, + {"2600:1480:7001::/37", "20940"}, + {"2a00:14d0::/32", "8331"}, + {"2400:9bc0:4::/32", "55313"}, + {"2a02:26f7:e7c4::/48", "36183"}, + {"2408:8256:2d80::/44", "17623"}, + {"240a:ac61::/32", "145819"}, + {"2605:3380:4120::/45", "12025"}, + {"2803:4600:2000::/32", "14754"}, + {"2a0c:b642:1030::/44", "210020"}, + {"2001:470:ef::/48", "6939"}, + {"2600:140b:2801::/38", "20940"}, + {"2800:484:e700::/36", "10620"}, + {"2804:b14::/32", "52937"}, + {"2804:c48:8000::/36", "52687"}, + {"2a01:5041:6000::/48", "202196"}, + {"2a02:26f7:a2::/48", "36183"}, + {"2a02:ea80::/32", "52195"}, + {"2c0f:eae0::/32", "37521"}, + {"2400:6280:11b::/48", "135381"}, + {"2804:5338::/32", "268570"}, + {"2405:1c0:7a81::/48", "55303"}, + {"2a02:26f7:ef01::/46", "20940"}, + {"2a03:5640:f302::/48", "16509"}, + {"2a03:d1c0::/32", "41690"}, + {"2402:800:b100::/42", "7552"}, + {"2800:bf0:a415::/38", "27947"}, + {"2c0f:eb00:b00::/37", "61266"}, + {"2402:ef17::/33", "7633"}, + {"2604:4e00:4100::/35", "25764"}, + {"2806:2f0:4501::/46", "17072"}, + {"2a07:3502:1090::/48", "38915"}, + {"2a0f:9400:7382::/48", "53356"}, + {"2a06:e881:6602::/47", "208872"}, + {"2a0b:c480::/32", "206374"}, + {"2804:3e4::/32", "262404"}, + {"2a06:61c0::/29", "56329"}, + {"2a0f:4400::/29", "48305"}, + {"2001:559:59e::/48", "7725"}, + {"2406:5140::/32", "135404"}, + {"2408:8456:4210::/42", "134543"}, + {"2602:fcf6:ffa::/48", "212528"}, + {"2a01:c50f:4600::/41", "12479"}, + {"2405:ec00:facf::/37", "23955"}, + {"240a:a003::/32", "142653"}, + {"2801:1e:d000::/48", "265652"}, + {"2001:559:c49b::/48", "7922"}, + {"240a:a281::/32", "143291"}, + {"240e:3b2:9c00::/34", "140310"}, + {"240e:3b3:1200::/39", "4134"}, + {"2604:76c0::/32", "36103"}, + {"2804:4ad4::/32", "267266"}, + {"2806:230:500b::/48", "11888"}, + {"2a02:26f7:c38c::/48", "36183"}, + {"2a02:26f7:db80::/48", "36183"}, + {"2a06:3c80::/29", "197648"}, + {"240a:afad::/32", "146663"}, + {"2600:1413:e001::/29", "20940"}, + {"2a02:26f7:f7cd::/46", "20940"}, + {"2a03:1980:d0ff::/48", "48260"}, + {"2a0f:6500:3000::/32", "208183"}, + {"2c0f:fc89:4001::/32", "36992"}, + {"2602:808:2000::/47", "398946"}, + {"2804:6194::/32", "269243"}, + {"2804:81a0::/32", "272466"}, + {"2a06:d647::/32", "35048"}, + {"2c0f:f738:2005::/38", "61317"}, + {"2001:c20:c839::/48", "9255"}, + {"2402:e300:4::/32", "131706"}, + {"2600:1406:5401::/36", "20940"}, + {"2804:3a1c::/32", "266071"}, + {"2a04:5201:6::/47", "200740"}, + {"2a12:9fc0::/29", "400522"}, + {"2001:da8:223::/48", "23910"}, + {"2400:9380:90a0::/47", "4809"}, + {"2405:201:a600::/36", "55836"}, + {"2408:8459:4610::/42", "17623"}, + {"240a:aa3e::/32", "145272"}, + {"2a09:bac0:253::/48", "13335"}, + {"2409:8924:b300::/37", "56046"}, + {"240a:ae4b::/32", "146309"}, + {"2600:6c10:14b::/45", "20115"}, + {"2a02:26f7:c649::/46", "20940"}, + {"2001:da8:21f::/48", "24348"}, + {"240a:a51b::/32", "143957"}, + {"2600:6c26::/28", "20115"}, + {"2a02:26f7:bb06::/47", "20940"}, + {"2001:559:745::/48", "33287"}, + {"2402:d700::/32", "37906"}, + {"240a:a447::/32", "143745"}, + {"240e:95d:1800::/37", "136194"}, + {"2a0a:2845:d20::/46", "136796"}, + {"2001:559:8589::/46", "7922"}, + {"2400:1020:10::/32", "45276"}, + {"2408:8459:b450::/38", "17816"}, + {"2a02:2e0:3e0::/43", "12306"}, + {"2a03:ec00:b100::/40", "24921"}, + {"2a10:1800:1::/46", "207463"}, + {"2409:8914:1100::/38", "56044"}, + {"2409:8c3c:ffff::/48", "9808"}, + {"240a:afe1::/32", "146715"}, + {"2603:90fc:10::/44", "20115"}, + {"2806:2f0:2080::/48", "17072"}, + {"2001:250:20a::/48", "24351"}, + {"2400:e800:1000::/36", "17564"}, + {"2402:800:5ba9::/41", "7552"}, + {"240a:a88a::/32", "144836"}, + {"2602:ffb0:30::/48", "13213"}, + {"2605:dd40:8223::/41", "398549"}, + {"2607:6000:500::/40", "12189"}, + {"2408:8459:a230::/41", "17622"}, + {"2606:4a00:1200::/32", "33154"}, + {"2804:d7c::/39", "52634"}, + {"2804:1674:c::/42", "53231"}, + {"2a02:27b8:1::/48", "49278"}, + {"2001:820::/32", "16186"}, + {"2001:43f8:14d0::/48", "328700"}, + {"2408:8256:3d80::/44", "17623"}, + {"2605:a680::/32", "174"}, + {"2620:0:e00::/47", "38"}, + {"2803:1a00:501d::/38", "262186"}, + {"2a02:ee80:41ee::/47", "3573"}, + {"2001:250:6419::/48", "23910"}, + {"2001:ee0:de00::/40", "45899"}, + {"2600:380:f103::/48", "64011"}, + {"2604:b140::/32", "40918"}, + {"2804:c88::/32", "263466"}, + {"2001:559:36e::/48", "33489"}, + {"240c:ca07::/32", "138371"}, + {"2604:1f40::/32", "33038"}, + {"2a00:1310::/32", "25181"}, + {"2a02:26f7:f84d::/46", "20940"}, + {"2001:559:c4a5::/46", "7922"}, + {"2401:3c00:180::/42", "38322"}, + {"2401:d800:750::/42", "7552"}, + {"240a:af42::/32", "146556"}, + {"2a0f:5707:af01::/46", "211358"}, + {"2001:678:12::/48", "197440"}, + {"2401:d800:f380::/42", "7552"}, + {"2602:fddb:804::/37", "397460"}, + {"2606:6d00::/39", "1403"}, + {"2610:a1:1003::/45", "397228"}, + {"2620:78:200f::/48", "209242"}, + {"2801:1c6::/44", "19429"}, + {"2a00:6901:5::/48", "20926"}, + {"2a09:e100::/29", "209834"}, + {"2c0f:f920::/32", "37550"}, + {"2001:1848::/32", "6325"}, + {"2804:46f8::/34", "267023"}, + {"2402:e380:320::/48", "142165"}, + {"240a:aff5::/32", "146735"}, + {"2a10:4646:1a0::/44", "206569"}, + {"2a12:7240::/29", "400522"}, + {"2409:877f::/20", "9808"}, + {"2606:5200:d000::/34", "32477"}, + {"2a02:26f7:b6::/48", "36183"}, + {"2a0b:1306:b::/48", "133142"}, + {"2600:1406:8001::/37", "20940"}, + {"2a06:f700::/29", "208332"}, + {"2a09:a780::/29", "397270"}, + {"2409:8c70:3a90::/44", "140105"}, + {"2a02:a00:4000::/32", "15987"}, + {"2001:559:c1a9::/48", "7725"}, + {"2403:1cc0:1000::/47", "45352"}, + {"2605:a404:b1a::/42", "33363"}, + {"2804:10a0:21c::/42", "28173"}, + {"2804:84fc:1900::/32", "272550"}, + {"2a07:9b40:1aa5::/48", "39702"}, + {"2a0e:b107:468::/45", "57883"}, + {"2001:448a:4010::/42", "7713"}, + {"2406:f400:100::/44", "38001"}, + {"2408:8406:3c00::/39", "4808"}, + {"2804:1064::/32", "263633"}, + {"240e:870:10::/42", "4134"}, + {"2620:11f:100c::/48", "7385"}, + {"2a02:26f7:f6f5::/46", "20940"}, + {"2a02:7b03::/36", "48328"}, + {"2406:2000:1ac::/46", "56173"}, + {"240a:a6e1::/32", "144411"}, + {"2804:49d4::/32", "52631"}, + {"240a:ae8c::/32", "146374"}, + {"2605:b9c0:4000::/34", "398804"}, + {"2804:14c:5be4::/43", "28573"}, + {"2804:2160::/36", "264551"}, + {"2804:271c::/32", "263877"}, + {"2600:140b:4::/48", "20940"}, + {"2600:1419:7400::/48", "35204"}, + {"2804:496c::/32", "267183"}, + {"2600:380:f880::/39", "20057"}, + {"2803:760:1900::/33", "269816"}, + {"2806:2f0:8003::/42", "17072"}, + {"2a00:1fa1::/33", "29497"}, + {"2a02:26f7:85::/48", "20940"}, + {"2a06:8dc6::/44", "57878"}, + {"2001:438:3a::/41", "6461"}, + {"2001:1248:961f::/41", "11172"}, + {"2404:bf40:a682::/41", "139084"}, + {"2607:f738:a00::/39", "17184"}, + {"2a00:dd8:2::/32", "31012"}, + {"2404:4280::/32", "18106"}, + {"2404:a500::/48", "45854"}, + {"2406:840:feed::/48", "209306"}, + {"2409:8924:3900::/38", "56046"}, + {"2604:c140::/32", "394740"}, + {"2a02:3b8::/32", "16371"}, + {"240e:428::/27", "4134"}, + {"2600:6c2e:584::/38", "20115"}, + {"2602:ffc5:109::/48", "7489"}, + {"2a07:580::/29", "31263"}, + {"2a0f:9980:195::/48", "40676"}, + {"2001:559:4b5::/48", "33650"}, + {"2001:978:2300:202::/47", "174"}, + {"2404:bf40:8681::/48", "7545"}, + {"2409:8020:10c1::/43", "56046"}, + {"2a02:1698::/32", "51127"}, + {"240e:267:2000::/38", "140330"}, + {"2a02:26f7:d74c::/48", "36183"}, + {"2a02:26f7:db84::/48", "36183"}, + {"2a02:5080::/32", "51825"}, + {"2a06:e881:1708::/48", "49745"}, + {"2a0b:ccc0::/29", "41306"}, + {"2001:4328::/32", "30844"}, + {"240a:aadd::/32", "145431"}, + {"2620:b3::/48", "2914"}, + {"2a02:26f0:a901::/38", "20940"}, + {"2001:250:7025::/46", "23910"}, + {"2001:da8:200a::/43", "24357"}, + {"2600:6c10:e49::/45", "20115"}, + {"2406:e001:7800::/32", "23655"}, + {"240a:a8a2::/32", "144860"}, + {"240e:967:8800::/38", "133775"}, + {"2804:1748::/32", "263133"}, + {"2a0a:ec02:701::/48", "42692"}, + {"2001:250:236::/47", "24349"}, + {"2600:140b:2401::/38", "20940"}, + {"2a09:3d01::/30", "208861"}, + {"2402:9d80:a61::/43", "131429"}, + {"2600:1009:a020::/40", "22394"}, + {"2804:218:7003::/32", "27715"}, + {"2804:7f70::/32", "271688"}, + {"2806:230:1029::/48", "11888"}, + {"2806:30f::/48", "265561"}, + {"2a06:2300::/29", "29458"}, + {"240a:a198::/32", "143058"}, + {"2801:140:121::/45", "262249"}, + {"2803:3380:f000::/36", "27818"}, + {"2804:6638::/32", "269542"}, + {"2a04:45c0::/29", "60717"}, + {"2402:6880:1000::/48", "63989"}, + {"2405:e340::/32", "137067"}, + {"240a:a721::/32", "144475"}, + {"2604:d600:1533::/44", "32098"}, + {"2a11:3c01::/32", "43624"}, + {"2c0f:e8f8:2000::/40", "36868"}, + {"2600:1009:b000::/41", "6167"}, + {"2605:67c0::/32", "397911"}, + {"2605:93c0::/32", "19413"}, + {"2804:41a0::/34", "267446"}, + {"2a01:5043:3::/48", "202196"}, + {"2a01:9380::/32", "43638"}, + {"2400:ae00:1981::/48", "38367"}, + {"2404:6800::/33", "15169"}, + {"240a:a951::/32", "145035"}, + {"2804:3d88::/32", "266537"}, + {"2a05:fb46::/32", "59504"}, + {"2001:4998:ef5e::/48", "7233"}, + {"2408:8456:cd40::/40", "17816"}, + {"2a0c:9a40:8083::/48", "49367"}, + {"2603:9031::/40", "33363"}, + {"2804:51b4:7100::/32", "268471"}, + {"2001:559:457::/48", "33651"}, + {"2001:6d0:ffd1::/46", "21416"}, + {"2405:4803:c1c::/41", "18403"}, + {"2408:8026:4b0::/39", "17621"}, + {"2604:8880::/32", "8304"}, + {"2605:d8c0::/32", "3367"}, + {"2607:fe28:1040::/34", "53347"}, + {"2803:6900:507::/48", "52423"}, + {"2804:d0c:8040::/42", "53112"}, + {"2804:1918:380::/32", "52862"}, + {"2604:2d00::/36", "64236"}, + {"2604:6840:1200::/36", "33438"}, + {"2804:5284:d000::/48", "268523"}, + {"2a00:8740:2b::/45", "49037"}, + {"2a02:568:fe01::/48", "8763"}, + {"2a02:2378::/32", "15895"}, + {"2a0f:9980:598::/48", "40676"}, + {"2001:16a2:c400::/36", "25019"}, + {"2402:800:97d3::/44", "7552"}, + {"2405:1c0:6711::/45", "55303"}, + {"2405:ac80::/32", "135524"}, + {"240a:af5a::/32", "146580"}, + {"2600:1001:9000::/44", "6167"}, + {"2804:76f4::/32", "271145"}, + {"2a00:7100::/32", "8311"}, + {"2a0e:c147::/32", "16262"}, + {"2409:8018:4000::/32", "9808"}, + {"2800:160:16ac::/41", "14259"}, + {"2a05:d000:6000::/40", "16509"}, + {"2604:2b40::/32", "46262"}, + {"2a01:8840:89::/48", "207266"}, + {"2a07:dc00:2550::/44", "29997"}, + {"2001:559:56c::/48", "22909"}, + {"2400:65c0::/32", "132774"}, + {"2804:6dc::/32", "7048"}, + {"2804:7fa0::/32", "271699"}, + {"2a03:5840:10a::/48", "213073"}, + {"2404:6b00::/32", "58640"}, + {"2604:ee80::/32", "7276"}, + {"2606:a000:1700::/40", "11955"}, + {"2a0a:9b80::/32", "200665"}, + {"2a0d:aa00::/29", "49362"}, + {"2001:559:7ce::/48", "7016"}, + {"2001:559:86ab::/45", "7922"}, + {"240e:7b0::/36", "140310"}, + {"2800:160:1c02::/45", "14259"}, + {"2a01:e10::/30", "29447"}, + {"2a01:c50f:1200::/37", "12479"}, + {"2a03:93e0::/35", "203228"}, + {"2409:8754:c000::/37", "56040"}, + {"2607:f060::/36", "11404"}, + {"2804:17cc::/33", "263252"}, + {"2a02:2ad0:520::/38", "702"}, + {"2a10:2f00:13f::/48", "212996"}, + {"2001:559:8197::/48", "33656"}, + {"2401:d800:d0a0::/41", "7552"}, + {"2404:1a0::/35", "24334"}, + {"240a:a13e::/32", "142968"}, + {"2a01:238:500::/29", "6724"}, + {"2a09:3::/48", "3258"}, + {"2a0a:1182::/32", "39122"}, + {"2620:0:610::/48", "4185"}, + {"2001:67c:168::/48", "12350"}, + {"2001:4878:c246::/48", "12222"}, + {"240a:a0ad::/32", "142823"}, + {"240a:a50a::/32", "143940"}, + {"2607:fdf8::/40", "13649"}, + {"2804:358c::/32", "266293"}, + {"2a00:1e6a:78::/32", "49373"}, + {"2001:fd8:b2c0::/42", "132199"}, + {"2403:9800:c050::/42", "4648"}, + {"2600:6ce0::/29", "16787"}, + {"2602:80c:1000::/48", "400013"}, + {"2a03:2880:f25f::/42", "32934"}, + {"2001:503:5ae2::/48", "7342"}, + {"2001:559:750::/48", "7015"}, + {"240a:aaf4::/32", "145454"}, + {"240a:ab20::/32", "145498"}, + {"2600:370f:75a8::/47", "32261"}, + {"2a02:888:4043::/48", "47794"}, + {"2a02:26f7:f6dc::/48", "36183"}, + {"2402:800:5801::/44", "7552"}, + {"240a:a3b2::/32", "143596"}, + {"2600:6c20:803::/45", "20115"}, + {"2a00:4b00:22d::/48", "136772"}, + {"2a06:eb40::/29", "205115"}, + {"2a10:ccc0::/48", "56755"}, + {"2001:2c0::/32", "2514"}, + {"2001:550:103::/45", "174"}, + {"2407:cdc0:e011::/48", "38136"}, + {"2001:67c:2524::/48", "20626"}, + {"2001:1a68:2a::/48", "206838"}, + {"240a:ac56::/32", "145808"}, + {"240a:af70::/32", "146602"}, + {"2604:98c0::/32", "23379"}, + {"2804:3d80::/32", "266535"}, + {"2408:8456:cd00::/42", "17622"}, + {"2001:253:115::/48", "142081"}, + {"2405:9800:9801::/48", "45430"}, + {"2408:8459:5c30::/41", "17622"}, + {"240e:438:1040::/38", "4134"}, + {"2603:c0ed::/36", "54253"}, + {"2804:5e4::/32", "262548"}, + {"2400:8b00:e80::/42", "45727"}, + {"2400:d400:9897::/44", "45671"}, + {"240a:ad90::/32", "146122"}, + {"2804:182c::/32", "52845"}, + {"2a05:fb45::/32", "208861"}, + {"2001:559:2ac::/48", "33651"}, + {"2001:559:87d1::/48", "7015"}, + {"240e:640:8e00::/40", "136197"}, + {"2a06:5780::/29", "56457"}, + {"2001:559:c244::/48", "33652"}, + {"2001:df4:1700::/48", "137084"}, + {"2401:d800:f90::/42", "7552"}, + {"2402:5840:6::/32", "137403"}, + {"2403:a280:1000::/48", "64087"}, + {"2404:4a00:3::/64", "55423"}, + {"240e:438:8440::/38", "4134"}, + {"2806:230:2047::/48", "11888"}, + {"2001:67c:1490::/48", "3301"}, + {"2409:8087:5000::/43", "56047"}, + {"240e:983:1400::/47", "134768"}, + {"2804:f40::/32", "263573"}, + {"2804:1d80::/36", "264374"}, + {"2a01:8840:9a::/45", "12041"}, + {"2a02:2498:55::/48", "13213"}, + {"2001:559:56e::/48", "7015"}, + {"2001:559:83e6::/48", "7015"}, + {"2001:888::/29", "3265"}, + {"2605:a404:15f::/42", "33363"}, + {"2804:bd8::/33", "52838"}, + {"2804:1980::/32", "61798"}, + {"2a01:32::/29", "8875"}, + {"2a01:8840:ae::/43", "12041"}, + {"2001:b18:1018::/47", "47787"}, + {"2401:9800::/32", "23930"}, + {"2620:2:6000::/48", "395409"}, + {"2804:1ca0::/38", "61666"}, + {"2804:5aa4::/32", "268786"}, + {"2804:6de8::/32", "270563"}, + {"2804:8578::/32", "272581"}, + {"2001:550:7708::/48", "25829"}, + {"2001:559:1c0::/47", "33651"}, + {"2600:3404:500::/28", "4181"}, + {"2620:154:a08::/48", "16733"}, + {"2001:559:5cc::/48", "33491"}, + {"2600:6c4e::/32", "20115"}, + {"2620:52:3::/48", "17314"}, + {"2804:70dc::/32", "270752"}, + {"2a01:54e0:ec00::/35", "31483"}, + {"2a03:24e0::/48", "15623"}, + {"2a04:d480:3c00::/38", "25291"}, + {"2c0e:40:501::/23", "24863"}, + {"2001:250:835::/44", "138182"}, + {"2620:134:6008::/47", "30031"}, + {"2803:2180:15::/46", "27941"}, + {"2803:d700:d000::/34", "61461"}, + {"2804:d18::/32", "52599"}, + {"240e:104:7d00::/38", "4134"}, + {"2620:111:d005::/48", "32908"}, + {"2804:7fb8::/32", "271705"}, + {"2a02:26f7:f6ee::/47", "20940"}, + {"2a03:37e0::/32", "197898"}, + {"2409:8914:a200::/39", "56044"}, + {"2804:770::/32", "262649"}, + {"2a01:5040:2021::/36", "43996"}, + {"2a02:26f7:c801::/46", "20940"}, + {"2a0d:4a00::/32", "29148"}, + {"2a11:e600::/29", "42929"}, + {"2a02:730:5000::/48", "49857"}, + {"2001:678:88::/48", "44358"}, + {"2001:12f0:340::/37", "1916"}, + {"2001:1900:2364::/48", "202818"}, + {"2402:800:9771::/44", "7552"}, + {"240a:a18e::/32", "143048"}, + {"2606:2800:5a40::/47", "15133"}, + {"2a02:26f7:ea8d::/46", "20940"}, + {"240e:44d:2180::/41", "4134"}, + {"240e:967:9400::/38", "133776"}, + {"2606:ae00:6080::/39", "7287"}, + {"2a02:26f7:db8c::/48", "36183"}, + {"2a0f:80::/32", "24796"}, + {"2001:b10:a000::/44", "196844"}, + {"2001:5002:300:1::/64", "6461"}, + {"2402:5300:4040::/39", "45903"}, + {"2408:84f3:b240::/37", "17816"}, + {"2803:ba0::/46", "267756"}, + {"2a02:26f7:f9c8::/48", "36183"}, + {"2001:559:73b::/48", "7015"}, + {"2402:800:75b0::/41", "7552"}, + {"240a:ad46::/32", "146048"}, + {"240a:af71::/32", "146603"}, + {"2607:f4a0:501::/33", "11272"}, + {"2a04:3c0::/29", "57099"}, + {"2001:559:8279::/48", "7015"}, + {"2001:67c:2a34::/48", "58346"}, + {"2804:14c:bb8f::/43", "28573"}, + {"2a00:1ab8::/32", "29422"}, + {"2a03:7a00::/32", "42908"}, + {"240a:acc5::/32", "145919"}, + {"2804:d20::/32", "262700"}, + {"2804:145c:c040::/38", "263327"}, + {"2a00:5100::/32", "35046"}, + {"2001:df7:d980::/48", "148968"}, + {"2406:c940::/32", "58972"}, + {"2804:37a8:121e::/48", "263919"}, + {"2806:230:6029::/48", "11888"}, + {"2a01:b760::/32", "204281"}, + {"2a02:23b8::/32", "25003"}, + {"2a0e:b100:106::/44", "207556"}, + {"2001:559:8530::/48", "33650"}, + {"2001:678:b94::/48", "34601"}, + {"2a0f:4440:aaaa::/48", "50937"}, + {"2001:4d78:fe20::/46", "15830"}, + {"240a:a60b::/32", "144197"}, + {"2605:6340::/32", "40033"}, + {"2620:171:20::/46", "715"}, + {"2806:104e:13::/42", "8151"}, + {"2a02:600::/29", "31263"}, + {"2a02:26f7:ddc1::/46", "20940"}, + {"2001:1248:5fd4::/42", "11172"}, + {"240e:13:800::/48", "140852"}, + {"240e:44d:6640::/42", "140348"}, + {"2606:f40::/48", "14618"}, + {"2804:4328::/32", "267552"}, + {"2804:4350::/32", "267562"}, + {"2a04:b700:185a::/48", "201405"}, + {"2400:6080::/32", "56030"}, + {"2401:d800:ba00::/42", "7552"}, + {"2403:9800:c400::/34", "4648"}, + {"2405:1207::/32", "9824"}, + {"2604:cac0:112::/48", "11019"}, + {"2804:5f90::/32", "269109"}, + {"2a01:d0:1658::/32", "29632"}, + {"2a01:6280::/32", "30900"}, + {"2001:559:c211::/48", "33650"}, + {"2409:8a55:c800::/34", "9808"}, + {"2605:3380:4440::/46", "12025"}, + {"2806:2f0:1043::/42", "22884"}, + {"2a03:8600:7::/32", "3399"}, + {"2a05:df40::/29", "9186"}, + {"2001:559:46::/48", "7922"}, + {"2404:bc80:1::/48", "64072"}, + {"240a:a897::/32", "144849"}, + {"2800:2a0:3801::/33", "27947"}, + {"2404:bf40:e404::/38", "139084"}, + {"2604:6d00:1::/48", "36223"}, + {"2803:3660::/32", "267905"}, + {"2a0d:5480::/29", "49024"}, + {"2001:579:40fc::/46", "22773"}, + {"2600:1403:8401::/36", "20940"}, + {"2607:f9d0:700::/36", "11979"}, + {"2a0d:9f40::/29", "204326"}, + {"2a10:aac0::/29", "211666"}, + {"2001:678:3a8::/48", "34309"}, + {"240a:a0d1::/32", "142859"}, + {"2804:14d:1491::/41", "28573"}, + {"2a00:fc8::/32", "34863"}, + {"2a03:1f80::/32", "57188"}, + {"2a04:2600::/29", "60924"}, + {"2001:550:7704::/48", "394346"}, + {"240e:3be:f700::/36", "4134"}, + {"2600:1419:8000::/48", "4230"}, + {"2803:23c0::/32", "52444"}, + {"2a00:9801:e002::/35", "51178"}, + {"2a01:b3c0::/32", "59647"}, + {"2a03:90c0:420::/41", "199524"}, + {"2a0b:52c0:8000::/33", "205691"}, + {"2001:67c:281c::/48", "198692"}, + {"2600:1002:b1d0::/44", "6167"}, + {"2602:fe12:1::/44", "62707"}, + {"2804:1b40:9000::/33", "28255"}, + {"2a01:8b80::/29", "8821"}, + {"2a02:9000::/28", "3352"}, + {"2001:559:c2c2::/48", "13367"}, + {"2804:13d0:9ac0::/33", "263297"}, + {"2001:559:84c1::/48", "33489"}, + {"2408::/22", "9595"}, + {"2605:a401:80c1::/45", "33363"}, + {"2804:73bc:700::/40", "270934"}, + {"2a00:a7a0:1000::/48", "62243"}, + {"2409:801d:2906::/32", "132525"}, + {"2800:22::/32", "7908"}, + {"2600:6c38:e1::/46", "20115"}, + {"2001:559:c317::/48", "33652"}, + {"2409:805c:3::/45", "9808"}, + {"2600:100a:b0d0::/44", "6167"}, + {"2804:2fc4:ff1a::/45", "264911"}, + {"2a03:d280::/32", "197133"}, + {"2409:8052:2c00::/38", "9808"}, + {"240a:a42f::/32", "143721"}, + {"2620:72::/48", "10359"}, + {"2803:d100:e480::/38", "52362"}, + {"2a11:e487:42::/48", "212568"}, + {"2804:844c::/32", "272252"}, + {"2806:2f0:9c01::/46", "17072"}, + {"2a00:1158:2::/47", "34011"}, + {"2400:fc00:8160::/40", "45773"}, + {"240e:44d:1780::/41", "4134"}, + {"2804:2350::/32", "264155"}, + {"2a02:2370:200::/46", "32787"}, + {"2a02:26f7:e514::/48", "36183"}, + {"2a09:e201::/48", "208422"}, + {"2001:550:c06::/39", "174"}, + {"2407:3a80::/32", "133045"}, + {"2602:ffb8::/36", "14469"}, + {"2a03:8040::/32", "60551"}, + {"2a0f:9441:41::/48", "209808"}, + {"2001:da8:9011::/48", "23910"}, + {"2403:2140::/32", "9751"}, + {"240a:adba::/32", "146164"}, + {"2604:8dc0:100::/40", "40474"}, + {"2a00:cac0::/32", "39555"}, + {"2404:bf40:c005::/42", "139084"}, + {"2800:200:e801::/41", "12252"}, + {"2a02:26f7:e8cd::/46", "20940"}, + {"2408:8456:8440::/39", "17816"}, + {"2409:8924:bd00::/38", "56046"}, + {"2806:250:5f1::/44", "28509"}, + {"2a02:26f7:c688::/48", "36183"}, + {"2c0f:ec60::/32", "37282"}, + {"2001:559:c512::/48", "33659"}, + {"2804:2e18::/32", "265323"}, + {"2607:fe90::/33", "19237"}, + {"2800:484:bb00::/40", "10620"}, + {"2804:3fdc::/32", "265920"}, + {"2a0b:d100::/29", "206828"}, + {"2408:8956:b700::/40", "17816"}, + {"240a:a1f9::/32", "143155"}, + {"2604:ca00:100::/45", "36492"}, + {"2a01:53c0:fff4::/44", "54994"}, + {"2001:67c:2b28::/48", "39489"}, + {"2001:43d0::/32", "37061"}, + {"2404:f4c0:800::/40", "32167"}, + {"2a00:1ec0:2::/48", "5425"}, + {"2a0e:1c40:2000::/48", "208635"}, + {"2409:8b1a::/29", "132525"}, + {"2803:8d43::/32", "52262"}, + {"2804:296c::/32", "264014"}, + {"2001:253:131::/48", "142097"}, + {"2001:678:26c::/48", "41062"}, + {"2401:c400:1000::/48", "45785"}, + {"2603:fa90::/25", "397165"}, + {"2a00:f400::/32", "28931"}, + {"2a06:e6c0::/29", "203143"}, + {"2401:e80::/32", "38293"}, + {"240a:a9be::/32", "145144"}, + {"2804:14c:d482::/48", "28573"}, + {"2001:678:d90::/48", "213092"}, + {"2605:3380:4462::/44", "12025"}, + {"2806:230:6028::/48", "265594"}, + {"2001:4878:4136::/48", "12222"}, + {"2402:800:5363::/43", "7552"}, + {"2804:235c::/32", "52747"}, + {"2a02:38:1112::/32", "6881"}, + {"2a02:ee80:42ce::/43", "3573"}, + {"2401:d800:d20::/41", "7552"}, + {"2402:3a80:c00a::/48", "55410"}, + {"240a:a0ae::/32", "142824"}, + {"2803:b8c0::/32", "264790"}, + {"2804:6a44::/32", "270323"}, + {"2804:729c::/32", "270864"}, + {"2a02:26f7:bf8d::/46", "20940"}, + {"2001:df1:5680::/48", "139378"}, + {"2001:df6:e580::/48", "24565"}, + {"2001:1248:8714::/44", "11172"}, + {"2404:ba00:10::/41", "17665"}, + {"2409:8958:cb54::/37", "56040"}, + {"2600:370f:72aa::/43", "32261"}, + {"2607:f7a8:163e::/36", "46887"}, + {"2804:44fc::/32", "267665"}, + {"2804:7988::/32", "271311"}, + {"2a02:4e0:2500::/41", "16135"}, + {"2a02:2638:4::/44", "44788"}, + {"2a04:4e80::/47", "211400"}, + {"2001:678:f3c::/48", "211640"}, + {"2408:8256:2d8a::/48", "17816"}, + {"2607:c080::/32", "32767"}, + {"2a09:e980::/29", "62240"}, + {"2a11:e280::/29", "204790"}, + {"240a:a93d::/32", "145015"}, + {"2a0a:1e40::/32", "51300"}, + {"2001:6f0::/34", "1257"}, + {"2401:d800:5bb0::/41", "7552"}, + {"2a0b:15c0::/29", "42207"}, + {"2404:ff80::/39", "64096"}, + {"240e:2::/31", "4134"}, + {"2620:12f:d000::/48", "40342"}, + {"2804:1828::/32", "61921"}, + {"2804:29a4::/37", "264026"}, + {"2a00:1a80::/32", "33920"}, + {"2a0a:9a40::/29", "205801"}, + {"2a0d:b201:60b0::/41", "206026"}, + {"2604:dc00:7409::/41", "19752"}, + {"2606:f480::/32", "54328"}, + {"2804:664c:3e90::/32", "269547"}, + {"2a07:e700::/29", "43260"}, + {"2600:1406:801::/38", "20940"}, + {"2602:feb4:c0::/44", "25961"}, + {"2804:31cc::/32", "265038"}, + {"2804:7eb8::/32", "271643"}, + {"2a09:7:2003::/48", "35536"}, + {"2a0c:2340::/29", "44399"}, + {"2402:d000:100d::/41", "9329"}, + {"2408:8956:c700::/40", "17816"}, + {"2800:484:d600::/40", "10620"}, + {"2a02:2e02:8790::/36", "12479"}, + {"2001:df0:62:8896::/49", "38040"}, + {"2401:d800:8000::/35", "7552"}, + {"2604:9dc0::/32", "393626"}, + {"2a02:88d:8010::/44", "48695"}, + {"240a:a479::/32", "143795"}, + {"240e:44d:1480::/41", "4134"}, + {"2800:ba0::/48", "263812"}, + {"2806:2f0:9823::/41", "17072"}, + {"2a03:c500::/32", "51704"}, + {"2607:f7a8:826::/48", "395749"}, + {"2803:5c80:6598::/48", "64114"}, + {"2a0e:ffc0::/29", "57756"}, + {"2001:559:854f::/48", "7725"}, + {"2001:559:c166::/47", "33659"}, + {"2408:8456:2000::/42", "17622"}, + {"2607:f038:401c::/46", "21527"}, + {"2620:113:1000::/46", "15224"}, + {"2408:80ea:6780::/41", "17622"}, + {"2408:820c:a940::/30", "17621"}, + {"2804:bcc::/32", "52830"}, + {"2a02:26f7:97::/48", "20940"}, + {"2409:8914:8400::/39", "56044"}, + {"240e:108:10b2::/41", "4134"}, + {"2602:fed2:712d::/48", "53356"}, + {"2606:7740::/47", "16509"}, + {"2607:f250:d024::/48", "7046"}, + {"2001:559:85d8::/48", "33667"}, + {"2001:16a2:8000::/43", "25019"}, + {"2401:d800:d250::/42", "7552"}, + {"2404:e800:4::/39", "55430"}, + {"240a:408a:c000::/35", "58834"}, + {"2604:9500::/32", "13807"}, + {"2804:14c:bbb0::/41", "28573"}, + {"2804:28c8::/32", "263980"}, + {"2405:f080:9ff::/48", "141180"}, + {"2408:8459:e810::/42", "17623"}, + {"240a:a26a::/32", "143268"}, + {"240e:3ba:9200::/36", "140317"}, + {"2600:6c38:b2d::/43", "20115"}, + {"2600:6c38:c16::/42", "20115"}, + {"2607:fed8::/32", "36416"}, + {"2800:b20::/35", "14754"}, + {"2804:4234::/32", "26104"}, + {"2a01:8840:ed::/48", "207266"}, + {"2a04:4e40:6200::/48", "54113"}, + {"2a07:4700::/29", "2119"}, + {"2a0a:8a40::/32", "56859"}, + {"2001:da8:5007::/41", "24360"}, + {"2408:8206::/35", "4808"}, + {"240e:d9:c000::/36", "38283"}, + {"240e:983:1e07::/48", "58543"}, + {"2804:14d:7800::/40", "28573"}, + {"2804:4478::/32", "267634"}, + {"2a06:dac0::/44", "212661"}, + {"2a0e:e744::/30", "208283"}, + {"2402:800:9a2b::/41", "7552"}, + {"2408:400e:fe88::/22", "37963"}, + {"2a02:26f7:b589::/42", "20940"}, + {"2804:20::/41", "26615"}, + {"2a05:c680::/29", "39259"}, + {"2001:559:132::/48", "7922"}, + {"2409:802e:2901::/48", "56041"}, + {"240e:108:1150::/48", "140527"}, + {"2600:100d:b0d0::/42", "6167"}, + {"2a00:1f70::/32", "12722"}, + {"2001:559:573::/48", "33659"}, + {"2001:67c:2d6c::/48", "16302"}, + {"2409:8074:2100::/35", "9808"}, + {"240a:a2e2::/32", "143388"}, + {"2403:9800:c300::/40", "4771"}, + {"2a0f:20c0::/29", "60262"}, + {"2403:7a00::/32", "17676"}, + {"2408:8856:100::/38", "17622"}, + {"240a:a6d5::/32", "144399"}, + {"2600:2004:3000::/36", "33517"}, + {"2001:67c:132c::/48", "13189"}, + {"2001:c08::/32", "9264"}, + {"240a:aab3::/32", "145389"}, + {"240e:bf:b8e0::/46", "138679"}, + {"2605:c080::/32", "393682"}, + {"2001:388:3059::/40", "7575"}, + {"2406:9dc0:100::/44", "18250"}, + {"2409:8087:4c17::/38", "9808"}, + {"240a:a179::/32", "143027"}, + {"2804:4724::/32", "267034"}, + {"2804:7344::/32", "270905"}, + {"2a02:26f7:d084::/48", "36183"}, + {"2001:678:ec4::/48", "212378"}, + {"2407:6480::/32", "141153"}, + {"2408:8956:7d00::/40", "17816"}, + {"2408:8957:2300::/40", "17816"}, + {"240a:a5b3::/32", "144109"}, + {"2607:fca8:1531::/33", "17139"}, + {"2c0f:7d00::/32", "328942"}, + {"2001:559:8622::/48", "33287"}, + {"2409:8c54:5800::/34", "56040"}, + {"2a00:a8e0:101::/48", "8767"}, + {"2a0c:a400::/29", "34907"}, + {"2404:3d00:40dc::/47", "21433"}, + {"2804:2c8c::/32", "265226"}, + {"2804:3d74::/45", "262617"}, + {"2804:3df8:8000::/33", "266566"}, + {"2a02:26f7:f80d::/46", "20940"}, + {"2a02:ddc0::/30", "47165"}, + {"2a0f:63c0::/29", "212238"}, + {"2600:1402:1c01::/34", "20940"}, + {"2602:ff3c::/36", "395111"}, + {"2607:6780::/32", "395282"}, + {"2801:1b0::/40", "263719"}, + {"2804:32d8::/32", "28212"}, + {"2804:4d48:4040::/32", "53115"}, + {"2a02:970:1246::/44", "44002"}, + {"2a04:a180::/32", "199799"}, + {"2a09:b280::/48", "210025"}, + {"2408:840d:ba00::/42", "17621"}, + {"2804:4dd0::/32", "268221"}, + {"2001:ee0:320a::/41", "45899"}, + {"2800:3c0:1060::/40", "19863"}, + {"2c0f:f060::/32", "328154"}, + {"2402:3a80:c064::/48", "38266"}, + {"240a:a21a::/32", "143188"}, + {"2804:8534::/32", "272564"}, + {"2001:559:c34f::/48", "7015"}, + {"2001:678:84::/48", "51955"}, + {"2401:d800:9d00::/42", "7552"}, + {"2404:c300::/32", "4859"}, + {"2407:70c0::/48", "140833"}, + {"2408:8459:9c30::/41", "17622"}, + {"2804:2e5c::/32", "265341"}, + {"2a02:6c00:f000::/44", "44971"}, + {"2401:4900:4110::/38", "45609"}, + {"2408:8956:4100::/40", "17816"}, + {"240a:ad03::/32", "145981"}, + {"240e:a7:8800::/37", "134419"}, + {"2605:b800::/37", "23550"}, + {"2804:7010::/32", "270701"}, + {"2a01:7d20:7d20::/47", "203645"}, + {"2001:678:600::/48", "204600"}, + {"2602:ff32:3::/48", "55247"}, + {"2803:a410:9012::/48", "64114"}, + {"2804:1d28::/32", "264351"}, + {"2804:1f22::/32", "264957"}, + {"2001:6d0:d6::/48", "43832"}, + {"2409:8000:5a00::/40", "56048"}, + {"240e:45c:c800::/40", "131285"}, + {"2804:f28::/32", "262683"}, + {"2a02:29ab:1::/29", "60142"}, + {"2a0f:a440::/29", "212598"}, + {"2001:559:8344::/48", "7922"}, + {"2001:1980:200::/37", "29838"}, + {"2401:d800:7930::/41", "7552"}, + {"2602:feda:b70::/48", "212705"}, + {"2804:14c:9983::/41", "28573"}, + {"2804:14d:3e00::/40", "28573"}, + {"2409:8087:7100::/37", "9808"}, + {"2806:2f0:5181::/42", "17072"}, + {"2a07:600::/29", "13030"}, + {"2401:af00::/32", "45345"}, + {"2401:d800:b690::/42", "7552"}, + {"2600:1408:8::/46", "20940"}, + {"2804:51a4::/33", "268467"}, + {"2a0c:78c0::/29", "207133"}, + {"2001:67c:18d8::/48", "199973"}, + {"2804:cdc:9040::/34", "52565"}, + {"2a00:1908:fffa::/48", "205365"}, + {"2a00:7f20:e000::/35", "60791"}, + {"2a02:26f7:c848::/48", "36183"}, + {"2001:67c:4bc::/48", "204896"}, + {"2607:a800:305::/48", "15695"}, + {"2804:462c::/32", "266973"}, + {"2804:5298::/32", "268528"}, + {"2408:8956:2500::/40", "17816"}, + {"2409:8914:6e00::/39", "56044"}, + {"240e:678:e400::/31", "4134"}, + {"2a00:f6e0::/32", "49034"}, + {"2a02:26f0:ab::/45", "20940"}, + {"2a05:aa40::/29", "5500"}, + {"2001:bc8::/35", "12876"}, + {"2001:1248:5578::/46", "11172"}, + {"2620:16e:89::/48", "3147"}, + {"2a0d:77c7:88e3::/33", "7489"}, + {"2404:bf40:a641::/40", "139084"}, + {"2607:b800::/32", "1970"}, + {"2804:14d:4e81::/45", "28573"}, + {"2806:2f0:2040::/48", "17072"}, + {"2a05:1084:7500::/32", "59598"}, + {"2a0c:16c0::/31", "42532"}, + {"2a11:3e00::/29", "42375"}, + {"2401:d800:bb20::/41", "7552"}, + {"2605:da00:5222::/48", "14935"}, + {"2a06:2d40:3::/48", "20473"}, + {"2001:67c:2954::/48", "51973"}, + {"2402:3300:5000::/48", "56300"}, + {"2408:8256:316d::/43", "17623"}, + {"2602:fd60:12::/48", "396503"}, + {"2a02:ec40::/32", "39150"}, + {"2001:550:6a01::/46", "174"}, + {"2001:559:84d1::/48", "7922"}, + {"2001:da8:c6::/48", "138440"}, + {"2a02:ff0:4::/48", "12735"}, + {"2a0e:b107:ea7::/48", "212085"}, + {"2001:500:83::/48", "42"}, + {"240a:ae75::/32", "146351"}, + {"2600:1408:b000::/48", "35994"}, + {"2803:da00::/32", "52253"}, + {"2804:383c::/45", "52601"}, + {"2804:68ac::/33", "269708"}, + {"2001:250:5876::/47", "24363"}, + {"2001:da8:217::/48", "23910"}, + {"240e:698:4c00::/26", "4134"}, + {"2602:fbd2::/36", "400395"}, + {"2804:7ee0::/32", "271651"}, + {"2a00:17d8::/32", "12574"}, + {"2001:678:303::/48", "207996"}, + {"2600:1007:b1f1::/48", "6167"}, + {"2804:44e8::/39", "267660"}, + {"2804:51a8::/32", "268468"}, + {"2806:2f0:3383::/42", "17072"}, + {"2a04:4e40:a600::/48", "54113"}, + {"2001:559:366::/48", "33660"}, + {"240a:a82d::/32", "144743"}, + {"2600:140a:a001::/33", "20940"}, + {"2607:9e80:1301::/40", "397068"}, + {"2a02:a58::/32", "8953"}, + {"2404:bf40:8a02::/34", "139084"}, + {"240a:a258::/32", "143250"}, + {"2600:1900:4110::/44", "15169"}, + {"2606:7940::/32", "26073"}, + {"2620:83:8001::/48", "63331"}, + {"240e:978:2000::/40", "137702"}, + {"2604:d600:1082::/44", "32098"}, + {"2804:7b0:8000::/33", "262453"}, + {"2402:800:572b::/43", "7552"}, + {"2402:7d80:6667::/35", "63582"}, + {"240a:a8b3::/32", "144877"}, + {"2605:a404:4f::/43", "33363"}, + {"2a02:2ad8:4110::/32", "702"}, + {"2a03:2880:f14d::/43", "32934"}, + {"2a03:7620::/32", "198297"}, + {"240a:ae43::/32", "146301"}, + {"2604:b100::/32", "20394"}, + {"2803:b2c0:1102::/45", "264851"}, + {"2001:559:1ee::/48", "33287"}, + {"2001:67c:2e48::/48", "210140"}, + {"2001:4490:d800::/46", "9829"}, + {"2406:20c0:e001::/35", "140423"}, + {"240e:108:1140::/46", "134768"}, + {"240e:95a:5000::/31", "4134"}, + {"2a00:7c80::/30", "49981"}, + {"2401:9d00:1132::/32", "9835"}, + {"2402:1b40:2000::/44", "7628"}, + {"2604:fe00::/45", "30517"}, + {"2001:4270::/32", "30998"}, + {"2409:8020::/43", "56046"}, + {"2409:8754:2800::/38", "56040"}, + {"240a:a5d0::/32", "144138"}, + {"2604:5cc0::/35", "13351"}, + {"2a01:3f7:2::/45", "57021"}, + {"2a02:26f7:e500::/48", "36183"}, + {"2001:559:86fe::/47", "33654"}, + {"2401:4900:3f90::/41", "45609"}, + {"2409:8c01::/30", "9808"}, + {"240e:109:8049::/46", "4134"}, + {"2804:798::/32", "262304"}, + {"2a01:a280:5::/48", "50306"}, + {"2a11:5704:b00b::/48", "212149"}, + {"2001:df3:d000::/48", "133044"}, + {"2409:8028:3002::/47", "56041"}, + {"2800:160:1159::/42", "14259"}, + {"2a01:5043:2007::/48", "202196"}, + {"2a02:26f7:ca44::/48", "36183"}, + {"2a03:f003:2300::/29", "25472"}, + {"2a0a:6580::/32", "206548"}, + {"2001:da8:d00c::/48", "23910"}, + {"2001:4878:37::/44", "12222"}, + {"2404:3e00:a500::/38", "38758"}, + {"2405:1c0:6371::/46", "55303"}, + {"2407:14c0:200::/37", "138077"}, + {"2408:8740::/32", "4837"}, + {"2806:2f0:11::/48", "22884"}, + {"2001:67c:1bdc::/48", "29493"}, + {"2001:4878:4027::/48", "12222"}, + {"2604:4500:18::/48", "29802"}, + {"2804:e00:6000::/32", "11419"}, + {"2a02:26f7:c4c0::/48", "36183"}, + {"2a02:26f7:f880::/48", "36183"}, + {"2001:559:8391::/48", "33667"}, + {"2401:4900:808::/43", "45609"}, + {"2804:14d:7e41::/40", "28573"}, + {"2403:bc80::/32", "133882"}, + {"2408:8459:a630::/41", "17622"}, + {"240a:a704::/32", "144446"}, + {"2604:d600:1227::/44", "32098"}, + {"2804:391c:1c::/32", "262287"}, + {"2001:559:841a::/48", "33650"}, + {"2408:8606::/28", "4808"}, + {"2408:8656::/36", "17622"}, + {"2800:40:1f::/42", "16814"}, + {"2a02:ed0:4000::/29", "47956"}, + {"2001:67c:764::/48", "201530"}, + {"2608:146:4::/48", "27046"}, + {"2801:0:360::/48", "27951"}, + {"2a02:17d8::/32", "41489"}, + {"2a02:cb43:4009::/48", "20546"}, + {"2a03:2c0:e::/48", "31029"}, + {"2001:579:9d8c::/41", "22773"}, + {"2001:648:2c30::/48", "8522"}, + {"2401:d800:21f2::/38", "7552"}, + {"2403:1540::/48", "45671"}, + {"2404:bb41::/32", "139240"}, + {"2408:8256:3b9c::/46", "17623"}, + {"2804:6614::/32", "269532"}, + {"2a0a:2cc0::/29", "206355"}, + {"2a0d:7980:200::/32", "48635"}, + {"2a11:1880::/29", "204790"}, + {"2001:500:2d::/48", "10886"}, + {"2401:e900::/45", "23991"}, + {"2602:fc6a::/48", "399747"}, + {"2001:559:c2b5::/48", "7015"}, + {"2408:840d:9300::/42", "17621"}, + {"2606:9fc0:9000::/48", "14618"}, + {"2607:9800:e001::/35", "15085"}, + {"2a09:77c4::/30", "1239"}, + {"2001:559:4b2::/48", "33651"}, + {"2403:4f00::/36", "139580"}, + {"2a02:7b00::/36", "48328"}, + {"2a0b:f302:459::/31", "62240"}, + {"2409:806b:3900::/33", "9808"}, + {"2a02:26f7:108::/48", "36183"}, + {"2a02:26f7:f34c::/48", "36183"}, + {"2a0e:3400::/29", "209095"}, + {"2001:559:80e8::/48", "33651"}, + {"2402:8100:39cd::/46", "55644"}, + {"2605:59c1:2000::/32", "36492"}, + {"2620:0:360::/47", "14182"}, + {"2001:559:5ea::/48", "33651"}, + {"2001:661:4000::/35", "2472"}, + {"2606:6140::/34", "31764"}, + {"2a00:4bc0:210d::/46", "31004"}, + {"2405:a900:ffff::/48", "55992"}, + {"240e:3b8:c000::/37", "140315"}, + {"240e:3be:1200::/39", "4134"}, + {"2605:2fc0:1000::/39", "31984"}, + {"2a02:4500::/32", "200567"}, + {"2001:559:c370::/48", "33657"}, + {"2406:20c0:8001::/34", "140423"}, + {"2a01:53c0:fd00::/48", "13658"}, + {"2a03:2ba0::/32", "47944"}, + {"2a09:4c0:101::/40", "58057"}, + {"2400:8b00:f80::/42", "45727"}, + {"2403:9800:7f06::/44", "4771"}, + {"240a:a9f4::/32", "145198"}, + {"2804:4b0:500::/40", "262459"}, + {"2804:5798::/32", "268074"}, + {"2806:2f0:6263::/40", "17072"}, + {"2806:2f0:8101::/46", "17072"}, + {"2a11:dc0::/29", "211199"}, + {"2400:4be0:14::/48", "141898"}, + {"240a:a70d::/32", "144455"}, + {"2804:1574::/32", "263389"}, + {"2804:65a8::/32", "269506"}, + {"2a02:26f7:f2c5::/46", "20940"}, + {"2a0b:7dc0::/32", "205494"}, + {"2a0c:a0c0::/31", "202486"}, + {"2001:410:a000::/47", "8111"}, + {"2001:559:c223::/48", "7922"}, + {"240a:ae53::/32", "146317"}, + {"2804:1270:a1::/32", "262851"}, + {"2a03:be80:15::/41", "15510"}, + {"2a0e:97c0:1ba::/47", "211840"}, + {"2a12:b3c0::/29", "174"}, + {"2408:84f3:2e20::/43", "17816"}, + {"2001:df6:e400::/48", "132976"}, + {"2401:d800:d702::/41", "7552"}, + {"2402:800:9d9b::/42", "7552"}, + {"2800:bf0:a108::/47", "52257"}, + {"2a0c:f000::/48", "206976"}, + {"2001:559:c084::/48", "33651"}, + {"2604:d600:15b7::/44", "32098"}, + {"2806:230:1009::/48", "11888"}, + {"2a0c:480::/32", "50673"}, + {"2001:559:829b::/48", "33651"}, + {"2604:eb40::/48", "6233"}, + {"2804:3034::/39", "264936"}, + {"2a01:8840:91::/48", "207266"}, + {"2a05:d050:c080::/44", "16509"}, + {"2a0a:4785::/32", "59504"}, + {"2001:fd0:db::/38", "10029"}, + {"2402:800:3655::/42", "7552"}, + {"240e:980:9a00::/40", "58466"}, + {"2600:9000:22ff::/39", "16509"}, + {"2a0f:5707:ab2d::/48", "13830"}, + {"2400:9380:92c0::/44", "136167"}, + {"2620:d2::/48", "25631"}, + {"2803:6602::/33", "28075"}, + {"2a00:1eb8::/35", "8764"}, + {"2a02:26f7:c410::/48", "36183"}, + {"2001:df3:e480::/48", "140699"}, + {"2600:100a:b050::/40", "22394"}, + {"2600:1404:1801::/33", "20940"}, + {"2603:c012:6000::/36", "31898"}, + {"2804:1b3:6000::/36", "18881"}, + {"2a0e:46c4:22a3::/48", "136918"}, + {"2001:559:c10d::/48", "33662"}, + {"2001:579:52c4::/39", "22773"}, + {"2001:67c:1590::/48", "21430"}, + {"2001:67c:1b1c::/48", "43719"}, + {"2001:bf7:fc00::/44", "208942"}, + {"2404:1580::/32", "134854"}, + {"2405:5600::/32", "10135"}, + {"2a07:6cc1::/32", "61098"}, + {"2a11:89c0::/29", "204790"}, + {"240a:a779::/32", "144563"}, + {"2a02:79e0::/32", "60032"}, + {"240a:a9fa::/32", "145204"}, + {"2606:9840::/32", "400282"}, + {"2001:559:c117::/48", "33667"}, + {"2001:678:450::/48", "1257"}, + {"2001:1998:610::/41", "7843"}, + {"2001:4200:5000::/48", "37501"}, + {"2402:800:9a63::/43", "7552"}, + {"2404:3d80:2cb::/42", "147297"}, + {"240e:44d:7980::/41", "4134"}, + {"2605:4380::/32", "260"}, + {"2607:ffe0::/32", "33541"}, + {"2a01:cde0:100::/48", "16028"}, + {"2405:6e00:2ef::/43", "133612"}, + {"2620:87:a000::/44", "12186"}, + {"2a02:ad0::/29", "61157"}, + {"2c0f:ec18::/32", "328391"}, + {"2408:8956:e800::/40", "17622"}, + {"2620:101:b000::/41", "12079"}, + {"2a02:888:151::/48", "47794"}, + {"2a02:970:101a::/42", "44002"}, + {"2a02:26f7:c490::/48", "36183"}, + {"2a06:6880::/37", "209620"}, + {"2001:559:86a8::/47", "33651"}, + {"2001:df3:1e00::/48", "55824"}, + {"2001:16a2:6400::/35", "25019"}, + {"2610:1e0:1f01::/32", "3714"}, + {"2804:18:30::/44", "26599"}, + {"2400:9700:6::/39", "24550"}, + {"2403:6040::/32", "17665"}, + {"2600:1900:4130::/44", "15169"}, + {"2600:9000:231b::/45", "16509"}, + {"2800:370:4a::/48", "28006"}, + {"2804:7254::/32", "270847"}, + {"2a02:26f0:700::/48", "7545"}, + {"2a0a:fcc0::/32", "211752"}, + {"2001:df1:3200::/48", "131353"}, + {"2001:1248:a41e::/42", "11172"}, + {"2605:7900:1::/45", "19133"}, + {"2620:11f:4000::/40", "16478"}, + {"2804:eec:4001::/46", "25933"}, + {"2a0a:dd80::/29", "211199"}, + {"2602:fc64:a000::/47", "36829"}, + {"2803:b780::/48", "27742"}, + {"2804:37a8::/35", "266428"}, + {"2a0b:4340:41::/48", "41780"}, + {"2001:579:b158::/40", "22773"}, + {"2001:da8:a0::/48", "24348"}, + {"240a:a115::/32", "142927"}, + {"240a:aa52::/32", "145292"}, + {"2606:6800:3400::/40", "394895"}, + {"2804:7a4::/32", "52860"}, + {"2a01:4c80::/32", "21446"}, + {"2a02:26f7:c709::/46", "20940"}, + {"2001:918:ff3f::/41", "3303"}, + {"2602:fc8b::/48", "211544"}, + {"2001:559:8227::/44", "7922"}, + {"2001:559:c123::/48", "7725"}, + {"2600:6c10:bb::/45", "20115"}, + {"2804:6510:c000::/34", "269466"}, + {"2a03:8d20::/48", "200849"}, + {"2a0d:8480:3::/48", "207651"}, + {"2620:107:9098::/46", "22787"}, + {"2803:7200:801d::/33", "27696"}, + {"2806:3c2::/32", "270121"}, + {"2a0b:4e00::/46", "207059"}, + {"2001:559:4fa::/48", "33491"}, + {"2001:678:89c::/48", "57195"}, + {"2409:8907:7920::/38", "24547"}, + {"2409:8959:cc44::/43", "9808"}, + {"2804:2408::/32", "52705"}, + {"2a00:4cc4:a::/48", "60109"}, + {"2a05:d050:10c0::/44", "16509"}, + {"2001:678:d70::/48", "212535"}, + {"2600:6c10:e04::/41", "20115"}, + {"2603:c002:9010::/38", "31898"}, + {"2605:e000:c0c::/35", "20001"}, + {"2804:14d:72bd::/41", "28573"}, + {"2806:2f0:43e1::/46", "17072"}, + {"2a03:2880:f072::/45", "32934"}, + {"2a09:1480:200::/29", "35704"}, + {"2a0c:b642:1a0e::/48", "61138"}, + {"2400:fc00:8c60::/40", "45773"}, + {"2404:bf40:8401::/46", "7545"}, + {"2408:8459:6830::/41", "17622"}, + {"2800:160:1a8a::/45", "14259"}, + {"2001:b400:d410::/36", "3462"}, + {"2806:2f0:429f::/41", "17072"}, + {"2a09:f540::/31", "202376"}, + {"2a02:7d8::/36", "3302"}, + {"2001:508::/44", "32020"}, + {"2402:c800:fff7::/44", "38639"}, + {"2804:21b4::/32", "264568"}, + {"2804:6128::/33", "269217"}, + {"2a01:111:3000::/33", "8075"}, + {"2a01:5c40:4::/47", "12687"}, + {"2a02:f680:2::/29", "35196"}, + {"2a03:7680::/32", "20905"}, + {"2001:559:84ba::/48", "7015"}, + {"2001:559:c02a::/45", "7922"}, + {"2400:c000::/32", "38294"}, + {"2602:feda:f4::/48", "38023"}, + {"2607:ff00:100::/40", "20454"}, + {"2806:230:601a::/48", "265594"}, + {"2001:da8:700c::/48", "23910"}, + {"2001:4cb8:86::/41", "28878"}, + {"2408:8956:ec00::/39", "17622"}, + {"240a:a160::/32", "143002"}, + {"240a:ac57::/32", "145809"}, + {"2600:6c38:b5a::/47", "20115"}, + {"2607:f0d0:2000::/39", "36351"}, + {"2a02:26f0:9601::/40", "20940"}, + {"2a04:f580:9210::/48", "4809"}, + {"2c0f:fea8::/32", "37248"}, + {"2605:c400::/32", "19381"}, + {"2a02:26f7:eac1::/46", "20940"}, + {"2a0d:c940::/29", "212144"}, + {"2407:f6c0::/32", "147064"}, + {"2409:4043:1000::/34", "55836"}, + {"2600:1404:c801::/37", "20940"}, + {"2001:559:361::/48", "7922"}, + {"2401:8640::/32", "23884"}, + {"2400:6180:100::/40", "14061"}, + {"2401:7500:1000::/39", "133296"}, + {"2405:9800:c910::/48", "55488"}, + {"2409:804b:2b08::/48", "9808"}, + {"2a04:4e40:ca30::/41", "54113"}, + {"2a10:8a40::/29", "39405"}, + {"2607:f480:111::/48", "27435"}, + {"2a02:26f7:ef48::/48", "36183"}, + {"2001:4c0:2::/33", "855"}, + {"2403:e800::/37", "4637"}, + {"2604:8f80::/32", "22667"}, + {"2800:160:10b2::/41", "14259"}, + {"2804:5e18::/33", "269011"}, + {"2a02:26f0:9901::/40", "20940"}, + {"2a04:bdc7:100::/48", "63473"}, + {"2a0a:db00::/44", "51559"}, + {"2a11:3600::/48", "35592"}, + {"2401:4900:60d0::/42", "45609"}, + {"240a:affb::/32", "146741"}, + {"2605:3400::/32", "15267"}, + {"2607:6b80:6::/48", "55081"}, + {"2620:123:200b::/45", "30103"}, + {"2a01:7dc0::/32", "204274"}, + {"2a0e:bb00::/29", "680"}, + {"240a:ae38::/32", "146290"}, + {"2a00:6060:8001::/34", "60983"}, + {"2a02:6ea0:c000::/36", "60068"}, + {"2a09:b340::/29", "202591"}, + {"2407:4d00:2000::/36", "38841"}, + {"2602:fc6f::/36", "399568"}, + {"2801:14:6800::/48", "19429"}, + {"2a03:77e0:3301::/48", "48305"}, + {"2c0f:ff80::/32", "327698"}, + {"2408:80e0:4000::/32", "4808"}, + {"240a:a1cc::/32", "143110"}, + {"2606:12c0::/32", "55017"}, + {"2804:73a4::/32", "270928"}, + {"2a0a:60c1:2::/48", "212782"}, + {"2001:1388:602::/39", "6147"}, + {"2620:108:f006::/48", "8161"}, + {"2a00:5d20::/32", "28717"}, + {"2a01:468::/29", "5403"}, + {"2a0f:2a80::/29", "204860"}, + {"2001:400:8818:51::/42", "293"}, + {"2600:6c34:203::/45", "33588"}, + {"2602:fd92:802::/40", "211481"}, + {"2804:5534:2002::/37", "268696"}, + {"2a02:26f7:f08d::/42", "20940"}, + {"2600:1403:b401::/36", "20940"}, + {"2600:1406:1a01::/37", "20940"}, + {"2602:fdc8::/36", "397656"}, + {"2603:90f5:600::/40", "10796"}, + {"2620:6e:c000::/48", "393401"}, + {"2a02:b50:8000::/47", "48910"}, + {"2a09:a300::/32", "8896"}, + {"2402:800:52d3::/44", "7552"}, + {"240a:a176::/32", "143024"}, + {"240e:44d:7180::/41", "4134"}, + {"2001:559:8d::/46", "13367"}, + {"2001:49f0:d057::/40", "174"}, + {"240e:267:7400::/36", "4134"}, + {"2603:c026::/35", "31898"}, + {"2605:d880::/32", "40945"}, + {"2a00:c6c0::/48", "47172"}, + {"2a02:2ac0::/32", "702"}, + {"2a0e:4c80::/29", "328543"}, + {"240a:ae85::/32", "146367"}, + {"2a02:587:50f8::/46", "6799"}, + {"2a0a:4540::/48", "203420"}, + {"2001:559:522::/48", "7015"}, + {"2001:1838:a100::/33", "23352"}, + {"2001:1ad0:c4ff::/34", "24953"}, + {"2402:8100:ca0::/44", "45271"}, + {"2602:803:9000::/46", "17138"}, + {"2804:3d4:38::/45", "262401"}, + {"2a01:51c2::/29", "29422"}, + {"2001:550:2400::/48", "18531"}, + {"2001:559:85cb::/48", "7015"}, + {"2408:84f3:aa40::/37", "17816"}, + {"240e:1:f800::/37", "17799"}, + {"2607:fc00::/32", "13576"}, + {"2804:f54::/32", "263580"}, + {"2a03:a960::/47", "61317"}, + {"2400:3b00:50::/48", "18229"}, + {"240a:a8af::/32", "144873"}, + {"2600:6c7f:93c0::/42", "19115"}, + {"2605:5240:5000::/32", "397494"}, + {"2804:14d:2c81::/46", "28573"}, + {"2804:870::/32", "52871"}, + {"2806:2f0:4223::/41", "17072"}, + {"2a04:b00::/29", "199256"}, + {"2001:df1:a180::/48", "137655"}, + {"2001:fd8:b2b0::/44", "4775"}, + {"2804:2054::/32", "264486"}, + {"2804:5694::/32", "268010"}, + {"2806:370:91a0::/41", "28403"}, + {"2a02:6100::/32", "34572"}, + {"2001:470:8a::/48", "16871"}, + {"2409:8a1a:7600::/29", "132525"}, + {"2607:fa48:200::/32", "5769"}, + {"2a02:7a01::/32", "197895"}, + {"2405:6400::/35", "23678"}, + {"2804:18:1020::/40", "26599"}, + {"2804:44dc::/32", "267658"}, + {"2a02:26f7:b8::/48", "36183"}, + {"2400:ac40:bb0::/37", "136255"}, + {"240e:3b3:5600::/34", "136199"}, + {"240e:67e:c400::/39", "140330"}, + {"2620:9b:e000::/48", "399992"}, + {"2a12:a300::/31", "23959"}, + {"2c0f:fe18::/32", "37179"}, + {"2602:80d:1000::/48", "398722"}, + {"2a02:26f7:d200::/48", "36183"}, + {"2a06:d1c0::/32", "59645"}, + {"2a11:2280::/29", "204790"}, + {"2402:3a80:c056::/48", "38266"}, + {"2409:8904:8b90::/37", "24547"}, + {"240a:acbb::/32", "145909"}, + {"2606:4700:80c0::/44", "13335"}, + {"2804:4d98::/32", "268207"}, + {"2a00:16c8:10d::/32", "50173"}, + {"2a00:49c0::/32", "199213"}, + {"2a02:888:814a::/45", "47794"}, + {"2a0f:5f40::/29", "200019"}, + {"2001:418:1401:6b::/61", "2914"}, + {"2001:c38:90a5::/44", "135566"}, + {"2001:fb0:109f::/59", "7470"}, + {"240a:a91f::/32", "144985"}, + {"2804:17c0::/32", "263155"}, + {"2a02:26f0:3d::/48", "31108"}, + {"2001:559:8410::/48", "7015"}, + {"2001:67c:24c::/48", "49420"}, + {"2001:df1:c700::/47", "136786"}, + {"2402:3a80:f00::/35", "38266"}, + {"2605:1980:206::/37", "13951"}, + {"2606:2440::/36", "3838"}, + {"2620:16d:701::/34", "7862"}, + {"2a01:7a4::/32", "34289"}, + {"2001:678:4d4::/48", "24868"}, + {"2607:ffd8:802::/32", "33333"}, + {"2001:738:5::/32", "1955"}, + {"2001:1980:6900::/32", "29838"}, + {"2800:160:1104::/46", "14259"}, + {"2a02:b48:810e::/43", "39572"}, + {"2001:df0:4400::/48", "17670"}, + {"240a:a17a::/32", "143028"}, + {"2600:1405:5c01::/34", "20940"}, + {"2606:2800:400e::/47", "15133"}, + {"2804:4644::/32", "266979"}, + {"2403:1940:40::/48", "137935"}, + {"2403:cec0::/32", "137995"}, + {"2600:80c:e00::/40", "701"}, + {"2600:1004:a120::/36", "22394"}, + {"2607:f170:30::/39", "6364"}, + {"2a02:26f7:e78c::/48", "36183"}, + {"2a0c:9a40:c000::/47", "209022"}, + {"2403:8600:80a0::/41", "45820"}, + {"2602:809:3008::/47", "34553"}, + {"2804:4c14:fb01::/37", "267348"}, + {"2a00:43c0::/32", "3257"}, + {"2a09:1340::/29", "56430"}, + {"2603:8074::/32", "11351"}, + {"2607:f6f0:6001::/48", "394749"}, + {"2a02:26f7:bf41::/46", "20940"}, + {"2a04:8000::/29", "200000"}, + {"2a04:ac00:8::/48", "57010"}, + {"2001:559:385::/48", "33491"}, + {"2602:fdb8:130::/44", "394151"}, + {"2a0c:4c0::/29", "52080"}, + {"2001:559:c472::/48", "33287"}, + {"2409:8907:6e20::/35", "24547"}, + {"2607:7c80:59::/32", "64260"}, + {"2804:6bb8::/32", "270419"}, + {"2a0d:2587:8300::/48", "138517"}, + {"2001:559:73f::/48", "33491"}, + {"2001:67c:20f4::/48", "39732"}, + {"2001:1248:5fad::/41", "11172"}, + {"2804:18:4000::/36", "26599"}, + {"2001:559:6e::/48", "33651"}, + {"2001:559:8566::/48", "7015"}, + {"2408:8000:c040::/31", "4837"}, + {"2a02:26f7:e889::/46", "20940"}, + {"2001:c20:4883::/45", "9255"}, + {"2406:2000:a4::/48", "10230"}, + {"2604:b480::/32", "46841"}, + {"2a0d:2581:fffe::/47", "209261"}, + {"2a0d:91c0::/29", "40970"}, + {"2404:e4c0:1008::/48", "54201"}, + {"2606:3c80::/32", "33582"}, + {"2607:6b80:27::/43", "262287"}, + {"2804:82c::/32", "262355"}, + {"2404:5700::/32", "58666"}, + {"2408:8957:5900::/40", "17816"}, + {"2804:248:200::/33", "28598"}, + {"2a0d:9ec0::/48", "395092"}, + {"2001:18c8:300::/40", "19149"}, + {"2001:4dc8:f00:1::96:a/32", "16316"}, + {"2401:d800:d2e0::/39", "7552"}, + {"2001:df0:a1::/48", "55532"}, + {"2409:8924:9300::/37", "56046"}, + {"240a:ac84::/32", "145854"}, + {"2606:2800:4a10::/46", "15133"}, + {"2607:f368:3210::/44", "32982"}, + {"2804:595c::/32", "268185"}, + {"2c0f:ea08::/32", "37159"}, + {"2620:11f:b006::/44", "394514"}, + {"2804:5608::/32", "267972"}, + {"2403:a800::/32", "1239"}, + {"2406:3c80:5::/48", "17747"}, + {"2610:b0:c140::/40", "701"}, + {"2620:30:c000::/44", "32234"}, + {"2001:579:f0f4::/39", "22773"}, + {"2402:4000:b1b1::/41", "18001"}, + {"2a02:26f7:c1c9::/42", "20940"}, + {"2a0a:6a00::/32", "207097"}, + {"2001:559:8774::/48", "33668"}, + {"2001:67c:25e8::/48", "34958"}, + {"2401:d800:332::/41", "7552"}, + {"2402:8640::/47", "137491"}, + {"2001:559:c1ad::/48", "7015"}, + {"2a02:26f7:c200::/48", "36183"}, + {"2001:df0:12c0::/48", "149019"}, + {"2001:4220:8016::/33", "24835"}, + {"240a:a756::/32", "144528"}, + {"2605:c100::/32", "16567"}, + {"2804:7d7c:140::/32", "271564"}, + {"2001:250:702a::/48", "24370"}, + {"2404:63c0:50::/48", "131645"}, + {"2800:370:150::/42", "28006"}, + {"2001:418:3808::/33", "2914"}, + {"2001:559:12d::/48", "33491"}, + {"2001:df3:4a80::/48", "135902"}, + {"2001:1248:56dc::/42", "11172"}, + {"2401:d800:9290::/42", "7552"}, + {"2408:8957:5500::/40", "17816"}, + {"2606:2800:5a18::/47", "15133"}, + {"2a01:420::/32", "41695"}, + {"2a0e:1101:2::/44", "51255"}, + {"2001:559:8735::/48", "7922"}, + {"2406:840:100::/47", "139317"}, + {"2607:f148:100::/47", "11734"}, + {"2804:7dc4::/32", "271581"}, + {"2a00:1678:b00b::/48", "49453"}, + {"2a0c:d540::/35", "60159"}, + {"2a0e:fd45:d80::/44", "212948"}, + {"2c0f:fb90::/32", "42235"}, + {"2001:559:43::/48", "33491"}, + {"2401:1801::/40", "58683"}, + {"2404:c740::/47", "131655"}, + {"240c:c0a9::/36", "23910"}, + {"2a0d:9b80::/47", "43519"}, + {"2a0e:b580::/29", "59808"}, + {"2001:67c:1445::/46", "42385"}, + {"2001:b28:f240::/36", "42065"}, + {"2001:1a68:1b::/42", "15694"}, + {"2405:8c0::/47", "139301"}, + {"2800:160:1f52::/45", "14259"}, + {"2a02:26f7:fa04::/48", "36183"}, + {"2a06:8680::/29", "35175"}, + {"2a0e:97c3:551::/48", "20473"}, + {"2800:484:c400::/40", "10620"}, + {"2a01:4f0:4018::/32", "28717"}, + {"2a02:c200:2::/32", "51167"}, + {"2a06:5040:6::/48", "3214"}, + {"240e:9b:f018::/46", "140253"}, + {"2a0e:f180::/29", "63023"}, + {"2401:5500::/32", "9749"}, + {"2604:6600:fc7b::/39", "40676"}, + {"2804:5728::/32", "268048"}, + {"2a00:1560:6::/44", "29684"}, + {"2a01:5380::/32", "10474"}, + {"2a02:2308::/43", "29028"}, + {"2a07:de40:1000::/38", "29298"}, + {"2402:49c0::/32", "137385"}, + {"2a02:26f7:f7c4::/48", "36183"}, + {"2001:559:514::/48", "20214"}, + {"2401:1c00:2100::/35", "38809"}, + {"2604:8b80:2::/48", "55106"}, + {"2620:139:5002::/48", "32244"}, + {"2804:48d4::/32", "267147"}, + {"2403:4800:1100::/40", "9714"}, + {"2804:82d0::/32", "272158"}, + {"2400:7fc0:240::/44", "55960"}, + {"2401:d800:55c2::/38", "7552"}, + {"2402:b801:4000::/32", "18371"}, + {"2405:6280::/32", "132111"}, + {"2600:a800::/28", "27017"}, + {"2620:4d:4009::/48", "62597"}, + {"2804:14d:58a1::/41", "28573"}, + {"2804:80c0::/32", "271771"}, + {"2806:370:1090::/44", "28403"}, + {"2001:388:30::/48", "137188"}, + {"2400:6280:20::/48", "132876"}, + {"2408:843f:1600::/34", "140716"}, + {"2604:3545::/30", "399587"}, + {"2a0d:2a00:c0::/48", "205157"}, + {"2406:2000:a8::/48", "18293"}, + {"2607:3200:15::/32", "11240"}, + {"2804:1380:6::/39", "263536"}, + {"2804:29a4:1103::/32", "264026"}, + {"2001:678:974::/48", "49697"}, + {"2a06:2140::/29", "200600"}, + {"2a0b:6cc0::/31", "202984"}, + {"2a0b:ed80::/29", "206324"}, + {"2001:da8:220::/47", "23910"}, + {"2401:d800:2020::/41", "7552"}, + {"240a:a9b6::/32", "145136"}, + {"2605:a40e:521::/45", "33363"}, + {"2804:4880::/32", "267125"}, + {"2a0a:bf80::/29", "49223"}, + {"2804:117c:800f::/48", "53061"}, + {"2a02:7a00:3::/45", "39904"}, + {"2405:c9c0::/45", "138823"}, + {"240c:c0a9:1400::/22", "23910"}, + {"2a09:f7c0::/29", "49028"}, + {"2600:1003:b0b0::/41", "22394"}, + {"2606:b500::/32", "19751"}, + {"2803:41a0::/32", "262186"}, + {"2a03:860::/32", "59971"}, + {"2a03:4d25::/32", "59397"}, + {"2001:559:c3ad::/48", "7725"}, + {"2001:67c:2d0c::/48", "201222"}, + {"2a05:5c80::/29", "48846"}, + {"2a0c:9a40:821b::/45", "210445"}, + {"2001:559:44::/48", "7922"}, + {"2001:dc7:cd1a::/48", "38283"}, + {"2001:1248:a576::/44", "11172"}, + {"2401:d800:9890::/42", "7552"}, + {"2407:1400::/47", "23752"}, + {"2407:42c0::/32", "135188"}, + {"240c:c701::/32", "24365"}, + {"2606:7c00:d003::/34", "46103"}, + {"2803:7360::/32", "269800"}, + {"2a0a:dc07::/32", "39142"}, + {"2400:b180::/32", "59276"}, + {"2403:e200:403::/45", "45543"}, + {"2408:8456:6240::/39", "17816"}, + {"240a:acd8::/32", "145938"}, + {"2620:13e:1000::/44", "11917"}, + {"2804:75f0::/32", "271079"}, + {"2a0e:fd45:bee::/48", "139921"}, + {"2620:76:6000::/48", "54544"}, + {"2800:bf0:8064::/47", "52257"}, + {"2a02:26f0:8101::/40", "20940"}, + {"2400:9380:9000::/46", "4809"}, + {"2409:8a10:2400::/30", "9808"}, + {"2605:c00:500::/36", "46920"}, + {"2600:140b:1c00::/48", "31109"}, + {"2804:1568::/32", "263387"}, + {"2a0c:5247:f000::/36", "208861"}, + {"2400:c700:5001::/32", "55644"}, + {"2408:8406:c00::/39", "4808"}, + {"2620:a2:4000::/48", "701"}, + {"2a06:e40::/29", "31631"}, + {"2001:c10:ff19::/40", "7473"}, + {"240a:a013::/32", "142669"}, + {"2804:10fc::/32", "263656"}, + {"2a03:5f80::/46", "31500"}, + {"240e:44d:f40::/42", "140358"}, + {"2620:7b:b000::/48", "3713"}, + {"240a:ae81::/32", "146363"}, + {"240a:af7b::/32", "146613"}, + {"240e:44d:3300::/41", "140345"}, + {"2607:f358:8::/47", "60311"}, + {"2a03:2480:8025::/46", "200107"}, + {"2406:7400:48::/46", "131269"}, + {"240e:a6::/35", "134419"}, + {"2804:3380::/32", "265400"}, + {"2409:8087:8009::/33", "9808"}, + {"2409:8904:5670::/40", "24547"}, + {"2409:8c20:1833::/48", "9808"}, + {"2a02:17e8::/36", "13002"}, + {"2406:840:eb97::/44", "140731"}, + {"2602:fcd8:7::/48", "14618"}, + {"2804:214:4103::/32", "26615"}, + {"2804:18c8::/32", "53119"}, + {"2a01:378::/32", "39180"}, + {"2a01:4020:6::/48", "212914"}, + {"2001:250:ff17::/42", "23910"}, + {"2001:559:79d::/46", "21508"}, + {"2001:559:820e::/48", "22258"}, + {"240a:a180::/32", "143034"}, + {"2a01:b740:983::/41", "714"}, + {"2a02:26f7:c3cd::/46", "20940"}, + {"2001:503:ff39::/48", "7342"}, + {"2600:6c38:276::/39", "20115"}, + {"2606:bf00::/32", "35891"}, + {"2001:4878:c158::/48", "12222"}, + {"2406:3000:11:100c::/59", "4657"}, + {"2800:4f0:24::/41", "28006"}, + {"2804:22a0:3f1::/37", "264112"}, + {"2804:3fc8::/32", "265914"}, + {"2001:468:1f10::/47", "396955"}, + {"2001:579:5181::/38", "22773"}, + {"2400:6e80::/32", "132882"}, + {"2400:b100::/32", "55555"}, + {"240a:ae3a::/32", "146292"}, + {"2605:3c00:99::/48", "47"}, + {"2a02:ee80:4080::/46", "3573"}, + {"2c0e:2204::/30", "37457"}, + {"2001:468:1a09::/40", "4557"}, + {"2001:559:87e8::/48", "21508"}, + {"2001:4490:d340::/46", "9829"}, + {"2401:7b40:4200::/44", "38071"}, + {"240a:a815::/32", "144719"}, + {"240e:6b9:3000::/32", "4134"}, + {"2a03:2887:ff23::/48", "63293"}, + {"2a05:33c0::/48", "201522"}, + {"2001:559:c28e::/48", "33650"}, + {"2001:6d0:4009::/48", "57503"}, + {"2401:4900:5818::/42", "45609"}, + {"2407:b9c0:e000::/35", "57695"}, + {"2804:6274::/32", "269298"}, + {"2a01:280:108::/48", "199150"}, + {"2a0b:9b00:614::/32", "62240"}, + {"2a0d:5085:1::/30", "62240"}, + {"2a12:8140::/30", "49434"}, + {"2001:559:87b7::/48", "33659"}, + {"2001:67c:1e0::/48", "31554"}, + {"2406:840:f990::/44", "208618"}, + {"2408:8459:8410::/42", "17623"}, + {"2800:160:1b42::/43", "14259"}, + {"2804:5ac8::/32", "268796"}, + {"2400:4ec0:9800::/33", "64300"}, + {"2600:1417:4801::/37", "20940"}, + {"2804:5c78::/33", "53245"}, + {"2401:b200:5d::/42", "24186"}, + {"2408:80f1:80::/39", "17621"}, + {"2600:6c33:718::/48", "11351"}, + {"2a03:2880:f068::/46", "32934"}, + {"2001:559:20a::/48", "33660"}, + {"2001:559:c106::/48", "20214"}, + {"2001:678:d4c::/48", "3320"}, + {"2407:5d80::/32", "59362"}, + {"2408:840c:7500::/40", "17621"}, + {"2409:8c20:5625::/39", "56046"}, + {"2804:4444::/32", "267621"}, + {"2a00:8740:23::/44", "49037"}, + {"2001:67c:2e8::/48", "3333"}, + {"2001:df5:3180::/48", "135905"}, + {"240a:aa00::/32", "145210"}, + {"2620:1ec:be0::/37", "8075"}, + {"2a07:ab42::/48", "44358"}, + {"2405:4000:800:e::/48", "38082"}, + {"2408:80ea:78c0::/39", "17816"}, + {"2a10:2f00:160::/48", "212129"}, + {"2001:559:8473::/48", "33668"}, + {"2001:2013::/28", "1299"}, + {"2402:1200::/47", "24523"}, + {"2600:c05:3010::/48", "398019"}, + {"2604:8780::/32", "54972"}, + {"2a02:26f0:8501::/40", "20940"}, + {"2a0f:9400:772c::/48", "53356"}, + {"2a02:26f7:f815::/42", "20940"}, + {"2001:480:b0::/48", "5132"}, + {"2001:fd8:f0f0::/39", "4775"}, + {"2001:559:824a::/48", "33287"}, + {"2001:5e8::/32", "5050"}, + {"2408:840d:c700::/42", "17621"}, + {"2603:c0e0:2800::/39", "54253"}, + {"2610:130:3401::/48", "398119"}, + {"2804:14d:1c00::/40", "28573"}, + {"2001:df0:1d80::/48", "135726"}, + {"2001:16f8:16::/37", "25525"}, + {"240d:c010:14::/48", "132203"}, + {"2605:4a40::/36", "13786"}, + {"2605:dd40:89a0::/38", "398549"}, + {"2606:c00::/42", "9505"}, + {"2804:1e40::/32", "264417"}, + {"2403:f880:6300::/40", "33438"}, + {"2409:8020:10b1::/41", "56046"}, + {"2804:1894::/32", "61941"}, + {"2804:3080::/32", "264955"}, + {"2a00:5d60::/32", "62353"}, + {"2a0a:9b40::/29", "43139"}, + {"2001:57a:920a::/34", "22773"}, + {"2600:6c38:8a::/45", "20115"}, + {"2605:a40c:a::/42", "33363"}, + {"2806:310:1f::/42", "16960"}, + {"2a00:e2a0::/32", "51004"}, + {"2402:800:3b2b::/41", "7552"}, + {"2405:dc0:8000::/47", "11251"}, + {"2408:8957:edc0::/38", "17622"}, + {"2409:8c62:f20::/32", "9808"}, + {"2605:8e00::/32", "22772"}, + {"2804:3bfc:1100::/40", "52607"}, + {"2001:df6:e780::/48", "142334"}, + {"2405:203:988::/43", "55836"}, + {"2804:7f20:201::/32", "271668"}, + {"2a0b:fd40::/29", "12637"}, + {"2a10:c340::/29", "208861"}, + {"2001:559:34c::/47", "33651"}, + {"2001:ee0:d440::/39", "45899"}, + {"2001:1900:225e::/42", "3356"}, + {"2402:800:5c01::/43", "7552"}, + {"2405:da80::/32", "24225"}, + {"2a02:a60:8000::/33", "57739"}, + {"2409:8057:301b::/45", "56040"}, + {"2607:fcd0:105:701::/50", "8100"}, + {"2a00:1410::/32", "39264"}, + {"2803:c640::/32", "263834"}, + {"2804:1994::/32", "262905"}, + {"2a03:9e00::/37", "14537"}, + {"2a04:a1c0:17::/48", "43059"}, + {"2a0f:7ec0:1::/48", "210788"}, + {"2404:bf40:a540::/47", "7545"}, + {"2001:559:c200::/48", "33662"}, + {"2001:df2:4a00::/48", "135441"}, + {"2001:4408:6100::/38", "4758"}, + {"2001:4878:4102::/47", "12222"}, + {"2610:20:8040::/44", "20033"}, + {"2a03:5e40::/32", "47110"}, + {"2001:468:cff::/48", "40220"}, + {"2001:559:c21c::/48", "13367"}, + {"2407:8a40::/47", "139516"}, + {"2620:1b2:c60::/38", "26673"}, + {"2803:9ca0::/32", "266842"}, + {"2804:4f8:a300::/36", "28263"}, + {"2a05:a880:de52::/48", "20765"}, + {"2a0c:aac0::/29", "49890"}, + {"2001:468:503::/44", "14041"}, + {"2001:44b8::/45", "4739"}, + {"2400:c700:3002::/33", "55644"}, + {"2408:84f3:f810::/44", "17623"}, + {"2604:a5c0::/32", "54509"}, + {"2a0a:2280::/29", "44851"}, + {"2001:250:215::/46", "23910"}, + {"2001:250:740f::/48", "23910"}, + {"2001:559:82eb::/48", "7015"}, + {"2001:559:831c::/48", "33287"}, + {"2408:8956:7c00::/40", "17622"}, + {"2800:484:f00::/35", "14080"}, + {"2a0a:86c0:a::/39", "206163"}, + {"2001:dc8:9000::/48", "131415"}, + {"240a:a741::/32", "144507"}, + {"2607:f0d8::/29", "7385"}, + {"2804:2178::/33", "264556"}, + {"2001:67c:21f4::/48", "197579"}, + {"2600:6c38:6a::/47", "20115"}, + {"2804:5638::/32", "267984"}, + {"2a02:26f7:dc84::/48", "36183"}, + {"2a02:26f7:e880::/48", "36183"}, + {"2409:8904:d2b0::/37", "24547"}, + {"2606:2800:4140::/48", "15133"}, + {"2620:11d:9004::/44", "33186"}, + {"2804:14c:bfb0::/41", "28573"}, + {"2a0a:5cc0::/29", "60921"}, + {"2001:da8:ffe::/35", "23910"}, + {"2402:c000::/47", "9230"}, + {"2407:ddc0::/32", "135782"}, + {"2804:204:267::/40", "28186"}, + {"2804:19a0:3000::/48", "61808"}, + {"2a04:4a45:10::/32", "206067"}, + {"2a11:2c00::/29", "211054"}, + {"2001:438:39::/48", "17025"}, + {"2001:579:e1a4::/43", "22773"}, + {"2400:f780::/32", "3257"}, + {"2405:9200:3100::/41", "131596"}, + {"240a:a8a0::/32", "144858"}, + {"2600:1408:f001::/37", "20940"}, + {"2806:3d8::/32", "270140"}, + {"240e:16:b000::/38", "38283"}, + {"2604:8b00::/32", "19554"}, + {"2804:4b0:41c::/40", "262459"}, + {"2804:4d50::/35", "268189"}, + {"2a02:c10::/32", "12990"}, + {"2a02:26f7:e905::/46", "20940"}, + {"2a10:db40::/29", "48817"}, + {"2001:454d::/30", "9924"}, + {"2401:d800:bc80::/42", "7552"}, + {"2001:370:b::/32", "9607"}, + {"2001:43f8:1500::/44", "328560"}, + {"2405:4cc1:500::/36", "55891"}, + {"240a:a892::/32", "144844"}, + {"240e:96b:6006::/44", "140366"}, + {"2a04:f40::/32", "28854"}, + {"2001:559:c45d::/48", "7015"}, + {"2408:8459:810::/41", "17622"}, + {"240a:aa91::/32", "145355"}, + {"2600:6c7f:ffff::/48", "20115"}, + {"2607:f428:9310::/42", "20115"}, + {"2804:37d0:4::/33", "266437"}, + {"2804:6918::/35", "270248"}, + {"2a02:f980::/32", "213270"}, + {"2400:36a0:40::/32", "63991"}, + {"2404:4600:a::/36", "10158"}, + {"2406:f700::/32", "132837"}, + {"2408:8957:f840::/40", "17622"}, + {"2409:8718::/31", "134810"}, + {"240a:ae6d::/32", "146343"}, + {"2606:29c0:200::/39", "31775"}, + {"2c0f:600::/32", "328838"}, + {"2001:559:83c4::/48", "33660"}, + {"2001:df2:8400::/48", "133950"}, + {"2605:9a00::/48", "160"}, + {"2605:c800::/32", "393924"}, + {"2a06:c0c0:2::/29", "41018"}, + {"2a07:b240::/29", "202618"}, + {"2001:67c:5a0::/48", "21286"}, + {"2405:58c0:5e00::/40", "133101"}, + {"2405:fd80:f0::/38", "135391"}, + {"2a00:1d58:f81c::/46", "47524"}, + {"2a06:ca40::/29", "44749"}, + {"2001:4838::/32", "29748"}, + {"2406:e1c0:fcf::/32", "141459"}, + {"2001:559:41a::/48", "33660"}, + {"2402:8e40::/32", "137473"}, + {"2408:866c::/27", "4837"}, + {"2804:7c4c::/32", "271487"}, + {"2a0d:2581:5::/48", "209261"}, + {"240e:3b7:2800::/38", "4134"}, + {"2600:100a:9100::/44", "6167"}, + {"2604:d600:60d::/43", "32098"}, + {"2a00:1790::/29", "42000"}, + {"2a02:6680:110c::/46", "16116"}, + {"240c:c0a8::/33", "24348"}, + {"2001:fd8:3400::/42", "132199"}, + {"2606:4dc0::/46", "399077"}, + {"2803:2320::/32", "266721"}, + {"2a02:26f7:e910::/48", "36183"}, + {"2a03:5a00:43::/48", "51081"}, + {"2401:d800:2b00::/42", "7552"}, + {"240a:a6d7::/32", "144401"}, + {"2607:a800:202::/48", "15695"}, + {"2800:440:8040::/47", "27738"}, + {"2804:14c:7f00::/41", "28573"}, + {"2001:559:800b::/45", "7922"}, + {"2001:559:82e0::/48", "33662"}, + {"2001:18b0::/32", "12282"}, + {"2401:4900:6050::/40", "45609"}, + {"240e:44d:5940::/42", "140350"}, + {"2604:2d80:6d00::/38", "30036"}, + {"2620:5f:c000::/48", "39971"}, + {"2804:2450::/36", "264214"}, + {"2a00:4802:f00::/40", "8717"}, + {"2a03:ed00::/32", "35205"}, + {"2401:b8c0:a::/48", "141731"}, + {"240a:a30f::/32", "143433"}, + {"240e:108:11f0::/38", "4134"}, + {"2605:a940::/32", "15171"}, + {"2607:9080:5::/48", "701"}, + {"2a02:26f7:c4c1::/46", "20940"}, + {"2a07:45c2::/40", "31463"}, + {"2a07:f9c0::/29", "60144"}, + {"2402:800:5401::/44", "7552"}, + {"2600:380:f100::/46", "20057"}, + {"2a02:26f7:c448::/48", "36183"}, + {"2a0f:6580:100::/48", "213252"}, + {"2400:51c0::/32", "133073"}, + {"2405:9e40::/32", "139468"}, + {"2408:8956:9c00::/40", "17622"}, + {"2001:579:403f::/41", "22773"}, + {"2602:fc59::/40", "19625"}, + {"2607:f110:e280::/39", "21889"}, + {"2801:80:80::/48", "53150"}, + {"2001:df1:6b80::/48", "59045"}, + {"2001:b011:9400::/34", "3462"}, + {"2408:80fa:9000::/36", "136959"}, + {"2409:8061:3100::/36", "9808"}, + {"2602:fed2:7110::/48", "139677"}, + {"2804:6444:2000::/32", "269417"}, + {"2a07:ca40::/29", "207242"}, + {"2001:2042::/29", "3301"}, + {"240e:13:80a::/48", "140862"}, + {"2a00:1120::/32", "34574"}, + {"2a01:8d20::/32", "57795"}, + {"2a04:4e40:f420::/44", "54113"}, + {"2a06:e881:9008::/48", "210286"}, + {"2a0c:cbc0:1002::/29", "209620"}, + {"2409:8924:b100::/38", "56046"}, + {"2605:c0::/32", "397019"}, + {"2806:2f0:8163::/40", "17072"}, + {"2001:559:208::/48", "33659"}, + {"2001:559:c139::/46", "33652"}, + {"240e:3b4:5600::/34", "4134"}, + {"2a02:26f7:f348::/46", "36183"}, + {"2400:ff00::/45", "132045"}, + {"2a00:b980::/29", "41000"}, + {"2a03:f880::/32", "211700"}, + {"2a0e:aa07:f081::/48", "211323"}, + {"2a02:f406:fed0::/48", "328778"}, + {"2a0d:4b80::/29", "16245"}, + {"2001:67c:202c::/48", "1257"}, + {"2001:fd8:3002::/47", "132199"}, + {"2800:bf0:2c20::/47", "52257"}, + {"2001:630::/32", "786"}, + {"2001:678:258::/48", "58057"}, + {"2408:8456:2c00::/41", "17623"}, + {"2804:6c38::/32", "270453"}, + {"2a03:2880:f051::/45", "32934"}, + {"2408:8406:6000::/39", "4808"}, + {"2a02:26f7:bdcd::/46", "20940"}, + {"2a02:26f7:cdc0::/48", "36183"}, + {"2a0c:7140::/29", "39305"}, + {"2402:cac0::/32", "59217"}, + {"2606:50c0:8000::/46", "54113"}, + {"2a05:3580:2500::/36", "35807"}, + {"2a0e:9b40:1000::/48", "208431"}, + {"2001:250:2423::/48", "23910"}, + {"2607:f5b2::/32", "396190"}, + {"2a02:26f7:b905::/46", "20940"}, + {"2a0d:d6c7:258::/32", "200350"}, + {"2001:559:86b7::/48", "33668"}, + {"2602:fd98::/47", "14770"}, + {"2607:8b00:1::/48", "31463"}, + {"2607:fb10:70c0::/43", "2906"}, + {"2806:20d:503a::/41", "32098"}, + {"2a01:6ee0::/32", "62214"}, + {"2a06:a780::/29", "28022"}, + {"2402:8100:207f::/40", "45271"}, + {"240a:a8c9::/32", "144899"}, + {"2a02:2490::/32", "51815"}, + {"2001:559:3ab::/48", "7922"}, + {"2001:67c:1864::/48", "1853"}, + {"2001:ee0:9b40::/37", "45899"}, + {"2401:d800:7f30::/41", "7552"}, + {"2804:d80::/32", "52635"}, + {"2406:3000:3:9::/61", "4657"}, + {"2408:8000:2000::/33", "4837"}, + {"2405:9800:9d00::/34", "45430"}, + {"2408:8256:3d8c::/43", "17623"}, + {"2800:bf0:176::/48", "27947"}, + {"2806:102e:20::/46", "8151"}, + {"2804:7e0::/32", "262330"}, + {"2804:404c:12::/41", "265950"}, + {"2804:6c14::/32", "270444"}, + {"2a04:4e40:7810::/42", "54113"}, + {"2a07:7200:2::/32", "34197"}, + {"2a0b:2900:2300::/40", "48582"}, + {"2001:559:10f::/48", "7016"}, + {"2001:df0:426::/48", "38331"}, + {"2607:f208:d310::/44", "21499"}, + {"2a00:d0c0:201::/32", "58010"}, + {"2a02:dd8::/29", "8778"}, + {"2a0f:b580::/29", "51050"}, + {"2400:c800:109::/37", "4515"}, + {"2401:3bc0:9::/45", "137409"}, + {"2408:8001:3170::/44", "135061"}, + {"2602:fe54:23::/33", "16584"}, + {"2806:2f0:9961::/46", "17072"}, + {"2a02:fe80:1010::/48", "30148"}, + {"2406:ac40::/32", "141389"}, + {"2a00:1cf8:4000::/35", "44944"}, + {"2001:559:541::/48", "33651"}, + {"2001:67c:1274::/48", "208868"}, + {"2600:140b:b401::/36", "20940"}, + {"2a07:2900::/32", "33845"}, + {"2001:559:837d::/48", "33287"}, + {"240a:a011::/32", "142667"}, + {"2607:9280:a::/47", "395502"}, + {"2a02:d0::/32", "44096"}, + {"2a02:26f7:f4c8::/48", "36183"}, + {"2a02:ee80:4283::/45", "3573"}, + {"2a02:f842::/29", "199483"}, + {"2a03:680::/32", "197518"}, + {"2a0a:90c0:1068::/40", "205080"}, + {"2001:559:c175::/48", "33491"}, + {"2402:fc80::/32", "134695"}, + {"240e:108:26::/48", "4134"}, + {"2801:12:c800::/48", "10753"}, + {"2001:1bc7::/48", "29686"}, + {"2408:8957:2e00::/40", "17622"}, + {"240e:982:b400::/33", "4134"}, + {"2600:140f:fc01::/27", "20940"}, + {"2605:96c0::/32", "396841"}, + {"2804:2da0::/32", "265293"}, + {"2a01:7300::/32", "50031"}, + {"2a07:6d40::/29", "44592"}, + {"2a0c:780::/29", "200000"}, + {"2001:67c:81c::/48", "210905"}, + {"2001:67c:2344::/48", "200479"}, + {"2001:1260:f::/48", "28544"}, + {"240e:13:80c::/37", "134238"}, + {"2600:140a:1001::/36", "20940"}, + {"2602:fd01::/36", "23483"}, + {"2804:204:22d::/43", "28186"}, + {"2a00:c380::/32", "50629"}, + {"2804:23f4::/32", "264193"}, + {"2804:5534:9000::/34", "268696"}, + {"2a0a:4786::/31", "208861"}, + {"240e:900::/40", "141679"}, + {"2607:fc30::/39", "19740"}, + {"2a00:1cf8::/35", "44944"}, + {"2c0f:f888:500::/40", "37119"}, + {"2a02:26f7:11f::/32", "20940"}, + {"2001:559:101::/48", "33491"}, + {"2001:559:3b0::/48", "7015"}, + {"2001:559:81a0::/48", "7015"}, + {"2001:67c:2fc0::/48", "207424"}, + {"2602:fd09:1::/48", "212643"}, + {"2606:680::/42", "46429"}, + {"2800:160:1b05::/44", "14259"}, + {"2a0d:1c0::/29", "49095"}, + {"2600:806:101::/38", "701"}, + {"2605:b640:1530::/44", "53736"}, + {"2606:2800:4a98::/46", "15133"}, + {"2803:4a60::/32", "52468"}, + {"2804:26c8::/32", "263856"}, + {"2600:1008:f110::/31", "22394"}, + {"2a01:95a0::/32", "199711"}, + {"2a02:2e02:9680::/43", "12479"}, + {"2409:8904:cea0::/39", "24547"}, + {"2a01:b740:a07::/48", "714"}, + {"2a0e:20c0::/29", "208015"}, + {"2001:1288::/32", "28640"}, + {"2400:9380:88c0::/44", "136167"}, + {"2a01:8::/32", "2860"}, + {"2a01:6f80::/32", "56867"}, + {"2409:8017:2903::/48", "9808"}, + {"2a01:b960:230b::/48", "39239"}, + {"2a04:a380::/29", "62160"}, + {"2800:26f::/32", "19429"}, + {"2409:8c85:5420::/44", "56040"}, + {"2605:940:200::/40", "396919"}, + {"2803:b060::/36", "267815"}, + {"2a00:1e40::/32", "48689"}, + {"2a00:d7a0::/48", "8884"}, + {"2a02:26f7:cc8c::/48", "36183"}, + {"2a02:2a58:110::/38", "702"}, + {"2a04:4e40:3e10::/44", "54113"}, + {"2602:fe1a::/36", "55016"}, + {"2001:559:8126::/48", "33651"}, + {"2001:1a68:2b::/48", "29272"}, + {"2804:14d:7600::/40", "28573"}, + {"2a11:ef00::/29", "400522"}, + {"240e:45c:300::/40", "137266"}, + {"2605::/32", "29848"}, + {"2a0f:6580:101::/48", "48292"}, + {"2001:67c:2d90::/48", "41046"}, + {"2800:810:107::/28", "27747"}, + {"2804:2e1c:e505::/38", "265324"}, + {"2a01:280:300::/48", "3301"}, + {"2405:f600:50::/44", "45117"}, + {"2804:50dc::/32", "268415"}, + {"2804:64c0::/32", "269446"}, + {"2a00:c88::/32", "15474"}, + {"2a0e:46c4:1300::/44", "147224"}, + {"240a:a1ba::/32", "143092"}, + {"2606:ae00:9300::/37", "7287"}, + {"2804:6f58::/32", "270654"}, + {"2001:290::/32", "9318"}, + {"2001:16a2:c210::/42", "39386"}, + {"2405:f540::/48", "135905"}, + {"2408:8957:1940::/40", "17816"}, + {"2804:620c::/32", "28225"}, + {"2a01:100::/32", "39912"}, + {"2a0b:9940::/32", "29413"}, + {"2c0f:e8e0::/46", "327926"}, + {"2001:67c:12c::/48", "43692"}, + {"2001:938:2048::/33", "8437"}, + {"240e:d9:d800::/48", "38283"}, + {"2804:49a0::/32", "262498"}, + {"2a00:1c50:2002::/45", "30811"}, + {"2a02:26f7:cdc1::/46", "20940"}, + {"2a09:6::/47", "8888"}, + {"2001:559:c0e4::/47", "33651"}, + {"2001:44b8:6069::/48", "4739"}, + {"2602:feda:f070::/40", "38008"}, + {"2606:8900::/44", "33044"}, + {"2001:468:1600::/39", "11537"}, + {"2620:10d:2000::/41", "103"}, + {"2a02:cb80:2540::/48", "43766"}, + {"2001:918::/39", "3303"}, + {"2001:df6:7b80::/48", "142059"}, + {"2001:1a20::/32", "8607"}, + {"2402:800:6400::/39", "7552"}, + {"2600:6c38:f3c::/46", "20115"}, + {"2606:8240::/32", "399143"}, + {"2804:3848:2::/32", "266467"}, + {"2a02:29a8:900::/30", "60142"}, + {"2a02:29ea:1e::/48", "49604"}, + {"2405:1c0:6151::/46", "55303"}, + {"240e:966:f400::/39", "58772"}, + {"2602:fccd::/36", "397898"}, + {"2a01:4960::/32", "16267"}, + {"2400:cb00:437::/48", "13335"}, + {"2403:9800:6500::/40", "4648"}, + {"2405:6e00:6f0::/44", "133612"}, + {"2a02:f340::/29", "8767"}, + {"2c0f:f878::/32", "37109"}, + {"2001:4998:38::/46", "26085"}, + {"2404:4600:9::/48", "7625"}, + {"2409:8904:8140::/38", "24547"}, + {"240a:acd3::/32", "145933"}, + {"2804:96c::/32", "263085"}, + {"2a09:a640::/32", "203536"}, + {"2409:8087:6a4c::/42", "9808"}, + {"2001:18c8:400::/40", "54519"}, + {"240a:aa03::/32", "145213"}, + {"2620:101:8030::/47", "36856"}, + {"2804:5860::/32", "268125"}, + {"2409:8904:9390::/37", "24547"}, + {"240a:a7ed::/32", "144679"}, + {"2604:4d40:7000::/48", "399196"}, + {"2804:8290::/32", "272526"}, + {"2001:678:ff4::/48", "211033"}, + {"240a:a494::/32", "143822"}, + {"240a:ae87::/32", "146369"}, + {"2620:9:6000::/48", "22742"}, + {"2804:4948::/32", "267175"}, + {"2804:59fc:2000::/33", "268738"}, + {"2a05:e00::/29", "202793"}, + {"2a0c:9a40:8081::/48", "41108"}, + {"2001:4bc8::/29", "8412"}, + {"2404:1200:2::/47", "14636"}, + {"2404:8600:4800::/32", "17918"}, + {"2804:344c::/32", "262818"}, + {"2001:559:21b::/48", "7922"}, + {"240c:cec2::/23", "23910"}, + {"2001:678:718::/48", "786"}, + {"2001:16a2:6300::/40", "39386"}, + {"2001:4220:2::/48", "24835"}, + {"2407:8100:6::/48", "58436"}, + {"240e:11:9000::/30", "4134"}, + {"2a00:1d38:feee::/39", "50655"}, + {"2a02:26f7:d749::/46", "20940"}, + {"2a05:7780::/32", "39892"}, + {"2409:8904:3ca0::/39", "24547"}, + {"2801:0:270::/48", "262212"}, + {"2a0a:de00::/32", "8758"}, + {"2408:815f:e000::/35", "4837"}, + {"2606:2800:5110::/48", "15133"}, + {"2001:48d0:a000::/35", "75"}, + {"2404:8000:1016::/44", "17451"}, + {"2405:7000::/38", "9354"}, + {"2804:14d:72a7::/43", "28573"}, + {"2a04:d2c0::/29", "15552"}, + {"2a0b:3c40:19::/48", "20473"}, + {"2001:67c:23ec::/48", "24693"}, + {"2405:4500::/44", "9671"}, + {"240a:a36d::/32", "143527"}, + {"2600:1001:f000::/44", "6167"}, + {"2602:809:9000::/46", "399201"}, + {"2408:8406:4800::/39", "4808"}, + {"240a:a151::/32", "142987"}, + {"2620:90:c000::/48", "701"}, + {"2001:559:869d::/48", "33491"}, + {"2001:ee0:ccc0::/39", "45899"}, + {"2405:800:c000::/34", "7545"}, + {"2600:1404:5c01::/34", "20940"}, + {"2602:ffc5:10::/42", "7489"}, + {"2800:200:f101::/40", "12252"}, + {"2a00:9d20:1::/48", "60626"}, + {"2001:438:fffd:110::/63", "3456"}, + {"240a:a010::/32", "142666"}, + {"2804:3850::/32", "266469"}, + {"2804:4f84::/32", "268331"}, + {"2a10:a647::/32", "47753"}, + {"2001:559:c391::/48", "21508"}, + {"240a:a535::/32", "143983"}, + {"240a:ac12::/32", "145740"}, + {"2605:b100:1600::/40", "577"}, + {"2620:13d:4000::/44", "63326"}, + {"2804:5914::/32", "268168"}, + {"2a12:2940::/29", "62177"}, + {"2804:8564:1180::/34", "262313"}, + {"2a04:4e40:8a00::/48", "54113"}, + {"2a04:6680::/48", "198325"}, + {"2a09:bac0:404::/48", "13335"}, + {"2001:559:71c::/48", "20214"}, + {"2001:da8:231::/48", "24350"}, + {"2402:800:95c5::/42", "7552"}, + {"2600:1fa0:4010::/41", "16509"}, + {"2620:9:a003::/48", "395515"}, + {"2a02:26f7:fbc4::/48", "36183"}, + {"2400:addf::/39", "9541"}, + {"2409:8051:1000::/47", "56047"}, + {"2600:140f:2c01::/38", "20940"}, + {"2600:3000:1512::/36", "13649"}, + {"2804:590::/32", "262523"}, + {"2806:2f0:3580::/36", "17072"}, + {"2a0d:2582:160::/43", "211367"}, + {"2c0f:f538::/32", "22354"}, + {"2400:7400:e02e::/48", "38044"}, + {"2401:d800:5a90::/42", "7552"}, + {"2604:f400:6::/48", "19982"}, + {"2804:594c::/32", "52870"}, + {"2a02:2648::/29", "42514"}, + {"2a0b:2b40::/29", "42035"}, + {"2001:579:e01c::/42", "22773"}, + {"2001:1248:a566::/43", "11172"}, + {"2a02:7b0:64::/48", "39780"}, + {"2a0e:4200::/29", "204790"}, + {"2404:7900::/32", "131160"}, + {"2405:1c0:7f10::/46", "55303"}, + {"2a01:60e0::/32", "199935"}, + {"2a0d:8d06:1000::/48", "48079"}, + {"2001:559:8684::/46", "7922"}, + {"2001:df3:5c00::/48", "135905"}, + {"2804:4ab4::/32", "267258"}, + {"2001:579:9020::/41", "22773"}, + {"2001:df5:8280::/48", "138622"}, + {"2001:12f0:d40::/40", "1916"}, + {"2408:80fa:7580::/42", "17623"}, + {"2606:2800:e415::/48", "15133"}, + {"2a09:a540::/29", "57353"}, + {"2a0a:e100::/29", "206927"}, + {"2001:559:85f1::/48", "7016"}, + {"2409:8017:2904::/32", "56044"}, + {"2409:8050:2000::/47", "56047"}, + {"240e:967:1800::/34", "4134"}, + {"2605:3600:11::/48", "20034"}, + {"2620:ae::/48", "22950"}, + {"2001:559:8329::/48", "33660"}, + {"2403:34c0::/32", "4787"}, + {"2602:fed2::/48", "53356"}, + {"2607:ac80:200::/32", "17"}, + {"2804:4a60::/32", "267236"}, + {"2600:6c10:420::/38", "20115"}, + {"2600:9000:5300::/45", "16509"}, + {"2803:b2c0:2100::/48", "264851"}, + {"2404:1ec0::/32", "138511"}, + {"2804:14c:65a8::/41", "28573"}, + {"2a02:26f7:c548::/48", "36183"}, + {"2a11:fa80::/29", "204790"}, + {"2803:7a80:9bf::/32", "263713"}, + {"2a01:5043:7::/48", "202196"}, + {"2a02:ee80:4277::/44", "3573"}, + {"2402:2c80::/32", "134090"}, + {"2600:1f01:48e0::/46", "16509"}, + {"2a03:6e60:1::/48", "47720"}, + {"2a0b:9380::/32", "206002"}, + {"2001:579:c0df::/39", "22773"}, + {"2400:9c80:d7e1::/48", "58396"}, + {"2403:bd80::/32", "59105"}, + {"2404:1c40:10::/44", "24432"}, + {"2803:1440::/32", "263781"}, + {"2001:559:764::/48", "33287"}, + {"2001:7fc:2::/47", "3970"}, + {"2001:df5:6a00::/48", "133742"}, + {"2402:800:972b::/43", "7552"}, + {"2402:800:bde0::/38", "7552"}, + {"240e:438:2640::/36", "4134"}, + {"2804:21b0::/32", "264567"}, + {"2a00:f28:2000::/36", "57187"}, + {"2001:678:c08::/48", "207491"}, + {"2600:5c00:21d1::/48", "3456"}, + {"2804:554::/32", "53143"}, + {"2a02:26f7:eb48::/48", "36183"}, + {"2a02:26f7:fb48::/48", "36183"}, + {"2001:559:43e::/48", "20214"}, + {"2001:559:847c::/48", "7016"}, + {"2600:1402:3001::/36", "20940"}, + {"2804:1eb8::/32", "52564"}, + {"2a03:2880:f01d::/46", "32934"}, + {"2600:1000:9010::/40", "22394"}, + {"2605:9500:b001::/48", "14244"}, + {"2800:bf0:178::/40", "27947"}, + {"2a02:2ad0:11b::/45", "702"}, + {"2a07:3400::/32", "62874"}, + {"2408:840c:3800::/40", "17621"}, + {"240a:a27d::/32", "143287"}, + {"2605:5fc8::/32", "46573"}, + {"2801:80:1df0::/48", "267509"}, + {"2a03:90c0:210::/40", "199524"}, + {"2001:559:8414::/48", "7922"}, + {"2001:559:c3e4::/48", "7016"}, + {"2407:a6c0::/32", "63790"}, + {"2603:6010::/28", "10796"}, + {"2803:84c0::/32", "262191"}, + {"2804:42e8::/32", "267536"}, + {"2804:597c::/32", "268705"}, + {"2a0b:1600::/29", "56485"}, + {"2001:559:1b5::/48", "7016"}, + {"2001:559:766::/47", "33491"}, + {"2401:d800:58e0::/39", "7552"}, + {"2600:1409:800::/48", "35994"}, + {"2607:f098:4100::/34", "33363"}, + {"2804:5310::/32", "268561"}, + {"2407:6080::/32", "133583"}, + {"2001:df0:1800::/48", "23642"}, + {"2408:8456:be40::/39", "17816"}, + {"2605:9ac0:fffe::/48", "3356"}, + {"2a00:1c40::/29", "8851"}, + {"2a05:e380:3::/29", "15739"}, + {"2001:559:c0dd::/46", "7922"}, + {"2001:4490:7c00::/46", "9829"}, + {"2409:8915:2400::/39", "56044"}, + {"2409:8b0c::/30", "56042"}, + {"2806:268:489::/41", "13999"}, + {"2001:468::/40", "11537"}, + {"2001:67c:2388::/48", "12843"}, + {"2001:af8:4::/32", "5385"}, + {"2401:e700::/32", "38628"}, + {"2806:21a:1400::/40", "262913"}, + {"2a02:c28::/29", "8681"}, + {"2a02:2278:216::/32", "28907"}, + {"2a07:c884::/32", "207249"}, + {"2001:fd8:f240::/42", "132199"}, + {"240a:ade0::/32", "146202"}, + {"240e:3b5:1200::/39", "4134"}, + {"2600:1488:a002::/40", "20940"}, + {"2804:53a0:4000::/36", "268596"}, + {"2804:6214::/32", "269274"}, + {"2804:7f0c::/34", "271663"}, + {"2a0c:b640::/44", "34872"}, + {"240a:a4ac::/32", "143846"}, + {"240a:a6ab::/32", "144357"}, + {"2803:da10::/32", "271931"}, + {"2a01:8380::/32", "5433"}, + {"2a0f:5707:fff4::/47", "207401"}, + {"2408:8456:9640::/36", "17816"}, + {"2600:1417:c01::/35", "20940"}, + {"2a00:fe00:d07e::/48", "702"}, + {"2a02:778::/32", "48284"}, + {"2a02:26f0:ce00::/48", "34164"}, + {"2001:67c:26d0::/48", "198476"}, + {"2001:250:7031::/48", "23910"}, + {"2402:800:5bee::/37", "7552"}, + {"2607:f0b0::/45", "13319"}, + {"2001:44c8:a121::/36", "38444"}, + {"240a:a343::/32", "143485"}, + {"2607:fae0:f00c::/47", "8038"}, + {"2a07:ecc0::/29", "48399"}, + {"240a:a3c7::/32", "143617"}, + {"2607:f868:8008::/34", "20141"}, + {"2a0a:bb00::/29", "64435"}, + {"2001:678:638::/48", "204307"}, + {"240a:61:2000::/36", "9605"}, + {"240a:ad20::/32", "146010"}, + {"2800:200:e261::/40", "12252"}, + {"2a10:bc40::/29", "211598"}, + {"2001:250:6427::/48", "23910"}, + {"2403:9800:7f17::/48", "4648"}, + {"2409:8915:2d00::/38", "56044"}, + {"2a00:5200::/32", "20985"}, + {"2a04:7d82::/32", "44974"}, + {"2a0f:5680:2::/47", "60906"}, + {"2800:bf0:3804::/39", "27947"}, + {"2a06:1280:c0df::/36", "61138"}, + {"2a0e:6a00::/29", "209057"}, + {"2409:8054:54::/48", "9808"}, + {"240a:a6ed::/32", "144423"}, + {"2600:1408:9c02::/34", "20940"}, + {"2806:230:3025::/48", "11888"}, + {"2a06:a005:e0::/44", "211358"}, + {"2a0d:3140::/29", "198668"}, + {"2a0c:8040::/29", "211892"}, + {"2001:559:c4a9::/48", "33491"}, + {"2001:e68:20db:10::/63", "54994"}, + {"2408:80f1:20::/43", "140979"}, + {"2001:470:dd::/48", "397787"}, + {"2806:230:2026::/48", "265594"}, + {"2a00:bdc0:e007::/44", "28709"}, + {"2001:4490:d100::/46", "9829"}, + {"2402:5ec0:2000::/32", "23724"}, + {"2602:ff96:3::/48", "31863"}, + {"2603:c001:2810::/38", "31898"}, + {"2607:6980:e000::/44", "36351"}, + {"2804:3b98::/32", "266159"}, + {"2a02:25e8::/29", "52157"}, + {"2a09:e1c0::/32", "200462"}, + {"2a11::/48", "6233"}, + {"2001:44b8:30a4::/48", "7545"}, + {"2a01:6460::/32", "13193"}, + {"2800:40:32::/47", "16814"}, + {"240a:a879::/32", "144819"}, + {"2600:1488:6381::/37", "20940"}, + {"2605:9180:5000::/32", "53597"}, + {"2402:8100:2450::/45", "45271"}, + {"2408:8256:3d6c::/43", "17623"}, + {"2604:85c0::/45", "16524"}, + {"2620:1bc:1030::/32", "7726"}, + {"2806:20d:320a::/43", "32098"}, + {"2806:2f0:9763::/40", "17072"}, + {"2a06:1600:71::/48", "39221"}, + {"2001:250:504b::/43", "24361"}, + {"2409:8000:1100::/37", "9808"}, + {"2600:230f::/32", "20115"}, + {"2600:370f:3523::/44", "32261"}, + {"2604:20c0::/36", "40641"}, + {"2a02:2e02:1800::/40", "12479"}, + {"2a04:7100::/29", "62391"}, + {"2a0e:15c0::/38", "60781"}, + {"2a0e:eec1::/32", "49542"}, + {"2001:df6:6b00::/48", "135772"}, + {"2408:8459:7650::/36", "17816"}, + {"2602:fdea:2::/48", "19186"}, + {"2607:f1c0::/40", "8560"}, + {"2804:7a24::/32", "271350"}, + {"2001:250:240::/39", "23910"}, + {"240e:982:200::/36", "4134"}, + {"2800:160:2078::/45", "14259"}, + {"2a02:26f7:f7c9::/46", "20940"}, + {"2a06:9280::/29", "12984"}, + {"2408:8459:b010::/42", "17623"}, + {"2800:440:8104::/48", "27738"}, + {"2a02:888:8244::/46", "48695"}, + {"2a02:2e02:1d90::/38", "12479"}, + {"2800:160:2167::/44", "14259"}, + {"2a02:2410::/32", "44286"}, + {"2a02:26f7:e601::/46", "20940"}, + {"2001:1248:9900::/44", "11172"}, + {"2408:8459:e010::/42", "17623"}, + {"240e:44d:4300::/42", "140345"}, + {"2803:d320::/32", "263689"}, + {"2a11:2100::/29", "42375"}, + {"2001:678:7d4::/48", "13045"}, + {"2001:da8:c80d::/46", "24356"}, + {"2804:1d14::/32", "61694"}, + {"2406:2100::/45", "56209"}, + {"2a02:e980:cb::/43", "19551"}, + {"2001:418:9809::/33", "2914"}, + {"2403:9800:7f11::/45", "4771"}, + {"2408:8456:ed00::/42", "17622"}, + {"2800:560::/32", "27833"}, + {"2806:230:6006::/48", "265594"}, + {"2400:a980:34ff::/48", "133111"}, + {"240a:a03e::/32", "142712"}, + {"240a:a495::/32", "143823"}, + {"240e:108:83::/48", "4811"}, + {"2607:d500:d00::/40", "13768"}, + {"2a02:26f7:f644::/48", "36183"}, + {"2001:559:c24b::/48", "33650"}, + {"2402:9d80:269::/48", "131429"}, + {"240a:afa8::/32", "146658"}, + {"2606:5000:4a00::/35", "209"}, + {"2804:66f4::/32", "269594"}, + {"2001:67c:224::/48", "51164"}, + {"2402:1500:8000::/33", "25222"}, + {"240e:9b:f02a::/45", "140259"}, + {"2801:11:4800::/48", "269850"}, + {"2a03:e842::/44", "43131"}, + {"2401:d800:fdf0::/38", "7552"}, + {"2804:358:200::/32", "53246"}, + {"2804:d70::/41", "52626"}, + {"2a0a:1ac7:1::/32", "206897"}, + {"2402:4200:f000::/48", "24284"}, + {"240a:a587::/32", "144065"}, + {"240e:37b:ac00::/33", "4134"}, + {"2a10:f40::/29", "207459"}, + {"240a:a2c7::/32", "143361"}, + {"2620:52:11::/40", "22753"}, + {"2800:68:21::/46", "27947"}, + {"2001:41a8:604::/48", "34164"}, + {"2406:e000:c1e::/31", "23655"}, + {"2804:1380::/47", "263536"}, + {"2804:27d4::/32", "263924"}, + {"2a02:26f0:9600::/48", "34164"}, + {"240e:983:180b::/40", "4134"}, + {"2804:998:81::/32", "28589"}, + {"240a:a5ba::/32", "144116"}, + {"2602:fd50:20::/48", "206628"}, + {"2803:6940::/35", "61512"}, + {"2804:56a0::/32", "268013"}, + {"2804:5af4::/32", "268809"}, + {"2a02:26f7:fa40::/48", "36183"}, + {"2a07:35c2::/31", "197561"}, + {"2a0a:1f43::/29", "212144"}, + {"2c0f:f970::/32", "328471"}, + {"2600:370f:75aa::/43", "32261"}, + {"2a0a:7d80::/47", "6697"}, + {"2001:a10:185::/48", "207105"}, + {"2402:7500:f9ff::/48", "24158"}, + {"2406:9e00:1113::/48", "55352"}, + {"2620:160:e320::/44", "4196"}, + {"2a01:310::/32", "8312"}, + {"2a01:5041:4eff::/48", "202196"}, + {"2001:67c:1be8::/48", "57692"}, + {"2001:df1:3700:4000::40/48", "136324"}, + {"2001:4541:a000::/29", "9924"}, + {"2804:2558::/48", "264275"}, + {"2804:7d2c::/32", "271544"}, + {"2a06:55c0::/29", "206130"}, + {"2001:16d8:a0a1::/46", "16150"}, + {"2406:4440:80::/43", "46997"}, + {"2409:8054:41::/46", "56040"}, + {"2409:8c20:1834::/34", "56046"}, + {"2a02:cc4:2f00::/41", "8211"}, + {"2a03:9b80::/34", "375"}, + {"2001:67c:34c::/48", "28714"}, + {"2408:8459:5610::/42", "17623"}, + {"2605:a401:816a::/45", "33363"}, + {"2606:a000:408::/38", "11426"}, + {"2620:128:f021::/48", "18872"}, + {"2a00:47c0:711::/48", "27435"}, + {"2a01:c8::/38", "20756"}, + {"2a01:5a8:2::/47", "8866"}, + {"2401:13c0:c000::/36", "132652"}, + {"2600:1406:3f::/41", "20940"}, + {"2a01:7c8:f4::/33", "20857"}, + {"2a02:5620::/32", "202675"}, + {"2001:df7:a800::/48", "18267"}, + {"2620:12b:d005::/46", "35873"}, + {"2a01:4a0:2003::/29", "201011"}, + {"2c0f:f7a8:8011::/48", "4134"}, + {"2001:67c:1598::/48", "24642"}, + {"2406:c500:ffcd::/48", "7545"}, + {"240a:ac07::/32", "145729"}, + {"2607:fd48:fff0:1046::/44", "13536"}, + {"2803:f00:4c3::/48", "262182"}, + {"2804:7c64::/32", "271493"}, + {"2a00:f460::/32", "28968"}, + {"2001:67c:2224::/48", "42655"}, + {"2401:4900:ee0::/43", "134426"}, + {"240a:adeb::/32", "146213"}, + {"2600:1406:1e01::/34", "20940"}, + {"2800:800:a00::/43", "26611"}, + {"2804:1ddc::/32", "263258"}, + {"2a11:f240::/29", "208846"}, + {"2001:559:80d1::/48", "13367"}, + {"2402:800:3863::/43", "7552"}, + {"240a:a858::/32", "144786"}, + {"2600:6ce6:4410::/27", "16787"}, + {"2603:90f5:1200::/40", "20115"}, + {"240a:abb3::/32", "145645"}, + {"240e:30b:1200::/29", "4134"}, + {"2804:14c:5ba5::/41", "28573"}, + {"2804:14d:2a77::/44", "28573"}, + {"2a00:19a8::/32", "49640"}, + {"2001:559:82e5::/48", "7016"}, + {"2001:559:c2e7::/48", "33668"}, + {"2402:800:58ee::/39", "7552"}, + {"2402:800:96b7::/41", "7552"}, + {"2a00:1f78::/32", "8893"}, + {"2a02:26f7:d5c8::/47", "36183"}, + {"2a05:7f00:188::/48", "1921"}, + {"2402:8100:20e4::/47", "55644"}, + {"2409:8052:800::/47", "56047"}, + {"240e:44d:2c40::/42", "140349"}, + {"2804:7af4::/32", "271402"}, + {"2409:806a:900::/35", "9808"}, + {"2600:1014:b040::/42", "6167"}, + {"2804:e30:4c00::/38", "11338"}, + {"2806:2f0:7241::/46", "17072"}, + {"2a0e:97c3:5c7::/48", "20473"}, + {"2001:c20:486f::/43", "3758"}, + {"2409:805c:3100::/36", "9808"}, + {"240a:a254::/32", "143246"}, + {"240e:108:11d6::/48", "134756"}, + {"2804:5cd0::/32", "268932"}, + {"2a02:2400::/32", "29263"}, + {"2801:80:1b80::/48", "266461"}, + {"2001:44b8:1c::/46", "7545"}, + {"2400:c600:3410::/41", "24389"}, + {"2409:8914:a600::/39", "56044"}, + {"240a:a278::/32", "143282"}, + {"240e:3bd:1200::/39", "4134"}, + {"2600:1009:d000::/43", "6167"}, + {"2804:5154:130::/32", "268445"}, + {"2a0a:e805:500::/40", "64476"}, + {"2001:559:122::/48", "7015"}, + {"2804:789c::/32", "271254"}, + {"2a02:2149:c000::/34", "1241"}, + {"2406:3000:3:e::/58", "4657"}, + {"2620:132:f365::/40", "394977"}, + {"2a06:3040:b::/48", "203020"}, + {"2a0c:580::/29", "210107"}, + {"2a12:4946:a002::/40", "211088"}, + {"2001:559:726::/48", "33659"}, + {"2804:40fc::/32", "265996"}, + {"2c0f:f6d0:104::/46", "327687"}, + {"2001:559:4b6::/48", "21508"}, + {"2001:559:87c8::/48", "33667"}, + {"2001:1248:a4f4::/39", "11172"}, + {"2800:bf0:8267::/48", "27947"}, + {"2a01:a1c0::/32", "21412"}, + {"2a0a:90c0:1049::/45", "205080"}, + {"2001:559:c29b::/48", "33652"}, + {"2001:12c4::/33", "28262"}, + {"2401:4900:5190::/44", "45609"}, + {"2602:ff59::/36", "53282"}, + {"2607:f738:300::/41", "17184"}, + {"2803:6900:578::/48", "52423"}, + {"2a0f:b500::/32", "206313"}, + {"2408:8957:4200::/40", "17622"}, + {"240a:af14::/32", "146510"}, + {"2804:79a4::/32", "271318"}, + {"2a02:6ea0:ea00::/40", "60068"}, + {"2001:df5:fd00::/48", "138034"}, + {"2409:8904:2840::/39", "24547"}, + {"240a:a978::/32", "145074"}, + {"2606:f900:6100::/46", "16583"}, + {"2803:a80:1::/48", "22698"}, + {"2803:c180:2510::/32", "52341"}, + {"2a00:d4a0::/29", "15600"}, + {"2a07:6a82::/31", "203568"}, + {"2001:559:c344::/48", "21508"}, + {"2001:da8:2030::/44", "24357"}, + {"2603:c001:3430::/38", "31898"}, + {"2604:ca00:4d4::/42", "36492"}, + {"2800:160:1114::/47", "14259"}, + {"2001:559:819a::/48", "33489"}, + {"2602:808:4004::/48", "398960"}, + {"2804:6d48::/32", "270522"}, + {"2a02:26f7:ebcc::/48", "36183"}, + {"2a0e:44c0::/29", "39371"}, + {"2a0e:fd45:1001::/38", "44103"}, + {"2001:780:5307::/32", "12337"}, + {"2607:f7c0:8100::/34", "36444"}, + {"2804:310:3::/32", "262688"}, + {"2a01:8840:6d::/48", "207266"}, + {"2a01:cd01:4f2a::/47", "28708"}, + {"2a03:90c0:460::/43", "199524"}, + {"2001:579:a064::/43", "22773"}, + {"2001:ee0:d240::/39", "45899"}, + {"2405:6600::/37", "45845"}, + {"2806:2f0:9ca3::/41", "17072"}, + {"2a02:b08::/29", "25486"}, + {"2409:8054:40::/48", "9808"}, + {"240e:940:e00::/40", "136197"}, + {"2804:dc0::/32", "28610"}, + {"2804:2624::/36", "264324"}, + {"2401:d800:9610::/42", "7552"}, + {"2600:1f01:4874::/47", "16509"}, + {"2607:f708::/32", "18558"}, + {"2a06:1287:2900::/47", "207150"}, + {"2001:559:c32c::/47", "33659"}, + {"240e:a7:7fcc::/46", "140512"}, + {"2607:8700:106::/48", "25820"}, + {"2001:559:c209::/48", "33657"}, + {"2606:3380:54::/48", "53334"}, + {"2001:1388:4::/44", "6147"}, + {"2001:4998:3d::/41", "10310"}, + {"2402:800:bff0::/44", "7552"}, + {"240e:5a:4300::/40", "140294"}, + {"240e:3bd:9c00::/34", "140310"}, + {"2804:5b30::/32", "268824"}, + {"2001:67c:2d68::/48", "31169"}, + {"2400:a980:3100::/37", "133111"}, + {"2402:3a80:c000::/44", "38266"}, + {"2402:9d80::/47", "131429"}, + {"2605:3640::/32", "13476"}, + {"2800:5d0::/38", "52302"}, + {"2a02:2e02:9f70::/40", "12479"}, + {"2a06:f906::/36", "56630"}, + {"2a0e:22c0:1::/48", "48918"}, + {"2c0f:e868::/32", "328641"}, + {"2001:559:c35b::/45", "33650"}, + {"2602:fcd3:103::/48", "212934"}, + {"2804:6504::/32", "269463"}, + {"2a10:2f00:15f::/48", "212194"}, + {"2001:1a48::/32", "25512"}, + {"2600:1006:f050::/39", "22394"}, + {"2600:370f:60a5::/41", "32261"}, + {"2600:6c21:20::/38", "20115"}, + {"2806:2f0:34a1::/46", "17072"}, + {"2a02:26f7:df05::/46", "20940"}, + {"2a03:9000::/32", "49371"}, + {"2a07:4480::/32", "59494"}, + {"2a0a:22c0::/29", "60167"}, + {"2404:8000::/43", "17451"}, + {"2405:800:8000::/35", "4817"}, + {"2606:4b40::/32", "31791"}, + {"2803:6900:1500::/47", "52423"}, + {"2a02:2e02:2390::/37", "12479"}, + {"2001:1248:8459::/45", "11172"}, + {"2405:203:c03::/45", "55836"}, + {"2600:6c20:83f::/41", "20115"}, + {"2804:728c::/32", "270860"}, + {"2a02:26f7:b98b::/48", "20940"}, + {"2a02:2af8:410::/32", "702"}, + {"2a03:79a0::/32", "47989"}, + {"2a0c:9480::/29", "62177"}, + {"2001:7a8:3450::/32", "13193"}, + {"2804:31a8::/32", "265029"}, + {"240a:ad4d::/32", "146055"}, + {"2a02:26f0:110::/48", "34164"}, + {"2001:468:c08::/45", "10886"}, + {"2001:67c:25dc::/48", "41018"}, + {"240a:a0f2::/32", "142892"}, + {"2600:2101::/29", "11404"}, + {"2a09:6640::/29", "13135"}, + {"2405:1dc0::/32", "46047"}, + {"2804:4290::/32", "267508"}, + {"2408:8957:9300::/40", "17816"}, + {"2600:1409:8801::/37", "20940"}, + {"2800:160:11dd::/42", "14259"}, + {"2804:2cb4::/32", "265238"}, + {"2600:1004:a030::/40", "22394"}, + {"2604:2100::/32", "3634"}, + {"2800:160:17c4::/47", "14259"}, + {"2804:cc4:11::/32", "52551"}, + {"2a00:1630:5201::/29", "49544"}, + {"2001:559:1a1::/48", "7725"}, + {"2001:559:468::/48", "33491"}, + {"2404:8d05::/30", "10089"}, + {"2406:16c0::/40", "132934"}, + {"2620:13a:b001::/48", "54344"}, + {"2804:1d7c::/32", "264373"}, + {"2806:260:100a::/43", "13999"}, + {"2a00:fa60::/35", "53550"}, + {"2a0d:1680::/29", "199926"}, + {"2404:99c0::/32", "132196"}, + {"2404:e801:2020::/32", "55430"}, + {"2409:8027:801::/34", "9808"}, + {"240a:a73f::/32", "144505"}, + {"2602:fed2:7700::/48", "38179"}, + {"2620:111:1036::/48", "18469"}, + {"2804:10a4:4000::/35", "263642"}, + {"2804:37f0:9900::/34", "266445"}, + {"2806:2f0:1080::/48", "22884"}, + {"2a05:f840::/29", "57795"}, + {"2001:1820:1b::/32", "12956"}, + {"2800:160:13cd::/42", "14259"}, + {"2a02:26f7:da::/48", "36183"}, + {"2a02:2e02:9550::/42", "12479"}, + {"2001:438:6e::/47", "397942"}, + {"2400:fc00:4550::/36", "45773"}, + {"2403:6e40:200::/44", "9830"}, + {"240a:aaa7::/32", "145377"}, + {"240e:3b2:2200::/37", "136198"}, + {"240e:44d::/42", "140345"}, + {"2001:579:c299::/37", "22773"}, + {"2804:1538::/32", "263378"}, + {"2804:4048::/32", "265949"}, + {"2001:559:8170::/48", "33659"}, + {"2604:9000::/39", "19693"}, + {"2604:b180:170::/44", "36339"}, + {"2a00:5400:f006::/36", "35753"}, + {"2a00:6300::/32", "42228"}, + {"2a02:16d8:103::/48", "15133"}, + {"2001:ac8:89::/43", "9009"}, + {"2406:6200::/37", "23756"}, + {"240a:aabd::/32", "145399"}, + {"240e:438:40::/38", "4134"}, + {"2602:807:6003::/48", "399209"}, + {"2001:250:5074::/44", "24361"}, + {"2409:8055:5c::/48", "9808"}, + {"2620:14d::/36", "17324"}, + {"2a02:26f7:cb89::/42", "20940"}, + {"2a07:1ec0::/29", "41364"}, + {"2001:678:f::/43", "25192"}, + {"2408:822a::/32", "4837"}, + {"2a07:c883::/32", "59872"}, + {"2a0e:e6c0:2000::/36", "51579"}, + {"2c0e:4010:a000::/36", "36994"}, + {"2001:550:5700:100::/36", "174"}, + {"2607:fae0:f200::/44", "63311"}, + {"2804:29b8::/32", "28126"}, + {"2804:8094::/32", "271760"}, + {"2a04:4e40:fa00::/48", "54113"}, + {"2a07:85c1::/48", "174"}, + {"2a0e:8f01::/48", "38230"}, + {"2001:1838:6004::/48", "13331"}, + {"2001:4878:c007::/44", "12222"}, + {"2607:fb58:2002::/36", "36086"}, + {"2803:15c0:5000::/32", "269822"}, + {"2804:19ac::/32", "61811"}, + {"2804:3b6c::/32", "266148"}, + {"2a05:dfc7:45::/46", "208753"}, + {"2a06:7d80::/29", "204046"}, + {"2a12:b340::/29", "59829"}, + {"2001:548::/32", "30432"}, + {"2001:559:86ee::/48", "33287"}, + {"2001:559:c1a8::/48", "33662"}, + {"2001:67c:1bb8::/48", "3306"}, + {"240e:3b0:ec00::/35", "140314"}, + {"2600:1002:b000::/41", "6167"}, + {"2804:14d:728e::/42", "28573"}, + {"2804:6c4c::/32", "270458"}, + {"2a07:8e00::/29", "42331"}, + {"2001:500:a0::/45", "12041"}, + {"2600:1012:b030::/44", "22394"}, + {"2804:74:ffff::/48", "52468"}, + {"2804:404c::/43", "265950"}, + {"2a01:4b40::/36", "21299"}, + {"240e:43:f800::/37", "134761"}, + {"240e:61:2000::/35", "136199"}, + {"2a02:5be0:2::/47", "39588"}, + {"2406:6e00:ef98::/35", "17457"}, + {"240a:ac58::/32", "145810"}, + {"2a00:cb8:971::/48", "15695"}, + {"2a01:368::/29", "20845"}, + {"2001:67c:20c4::/48", "8767"}, + {"240e:ff:9000::/36", "134763"}, + {"2607:f518:2000::/37", "46887"}, + {"2620:135:2000::/40", "19704"}, + {"2a00:dd0:bbbc::/33", "47869"}, + {"2a0d:7c40::/32", "54290"}, + {"2402:800:7e82::/42", "7552"}, + {"2803:7200:18::/34", "27696"}, + {"2806:319::/32", "265530"}, + {"2a02:710::/32", "42973"}, + {"2a02:2668::/34", "16345"}, + {"2a09:26c0::/32", "41114"}, + {"2a0f:3000::/29", "12586"}, + {"2001:559:5f8::/48", "33659"}, + {"2001:559:8653::/48", "33659"}, + {"2405:3440::/44", "138311"}, + {"2602:fc09:cd::/43", "13780"}, + {"2806:2f0:6023::/41", "17072"}, + {"2a04:b880:5::/48", "43578"}, + {"2800:160:1860::/46", "14259"}, + {"2a02:888:8243::/48", "47794"}, + {"2a02:e980:142::/44", "19551"}, + {"2404:8c40::/48", "136374"}, + {"2602:fcce:904::/38", "399200"}, + {"2603:c024:8000::/35", "31898"}, + {"2a02:26f0:a::/48", "34164"}, + {"2408:8956:6600::/40", "17622"}, + {"2804:5e88::/32", "269039"}, + {"2806:230:601b::/48", "11888"}, + {"2a01:c506::/28", "12479"}, + {"2a02:26f7:c74d::/42", "20940"}, + {"2a02:26f7:fb40::/48", "36183"}, + {"2a0e:97c0:6c0::/44", "210013"}, + {"2001:559:c22d::/46", "33287"}, + {"2001:19d0:305::/48", "6423"}, + {"2406:daa0:80a0::/44", "16509"}, + {"2407:ca40:30::/48", "142502"}, + {"240a:a715::/32", "144463"}, + {"240a:acec::/32", "145958"}, + {"2a12:4946:4000::/44", "211184"}, + {"2001:1248:a54a::/43", "11172"}, + {"2404:bf40:a340::/48", "2764"}, + {"2602:80c:f000::/44", "400235"}, + {"2602:fd8d::/36", "398044"}, + {"2804:ad4::/32", "52925"}, + {"2a05:b2c0::/31", "12859"}, + {"2001:559:4d4::/48", "20214"}, + {"2408:8456:aa10::/42", "134543"}, + {"240e:980:9c00::/31", "4134"}, + {"2600:370f:7085::/46", "32261"}, + {"2a07:9444::/30", "202682"}, + {"2405:7740::/32", "23827"}, + {"2409:8087:5d00::/34", "9808"}, + {"240a:a1d4::/32", "143118"}, + {"240e:49:5000::/36", "137693"}, + {"2804:7328:1000::/34", "270899"}, + {"2404:c800:8203::/48", "20940"}, + {"240a:a7c4::/32", "144638"}, + {"2804:14d:c600::/40", "28573"}, + {"2a02:26f7:f945::/46", "20940"}, + {"2001:13b0:c001::/35", "3549"}, + {"2600:1415:1801::/37", "20940"}, + {"2600:370f:5281::/41", "32261"}, + {"2605:3600:1a::/48", "20034"}, + {"2804:210::/32", "262790"}, + {"2804:7a8:200::/32", "262309"}, + {"2a00:9a40::/32", "6819"}, + {"2402:ef19:200::/30", "7633"}, + {"2804:1138::/32", "262726"}, + {"2001:550:409::/48", "30103"}, + {"240a:a764::/32", "144542"}, + {"2600:1014:a020::/40", "22394"}, + {"2803:840:2300::/47", "263793"}, + {"2a01:358:5811::/37", "9121"}, + {"2a0e:b107:580::/44", "138211"}, + {"240e:87c:390::/41", "137692"}, + {"2620:df:4000::/48", "14618"}, + {"2804:14d:1400::/40", "28573"}, + {"2a02:e182::/36", "33517"}, + {"2402:800:7cb0::/41", "7552"}, + {"240a:aaeb::/32", "145445"}, + {"2605:e000:40b::/48", "10838"}, + {"2a02:1390:f000::/40", "21351"}, + {"2001:559:8069::/48", "7015"}, + {"2401:14c0::/45", "136531"}, + {"2408:8459:c010::/42", "17623"}, + {"240a:ad9f::/32", "146137"}, + {"2804:a00::/47", "262838"}, + {"2a02:ac80:4001::/35", "25145"}, + {"2a03:7380:5c80::/42", "13188"}, + {"2a11:2900::/29", "212559"}, + {"2001:df3:b880::/48", "17538"}, + {"2403:fe00::/32", "38743"}, + {"2804:8544::/32", "272568"}, + {"2400:7e00::/32", "24572"}, + {"2402:1c00::/36", "23838"}, + {"2602:fbb6::/36", "2914"}, + {"2606:3c80:a300:10::/40", "33582"}, + {"2800:160:2031::/46", "14259"}, + {"2804:dcc::/32", "28638"}, + {"2a02:88d:823f::/40", "47794"}, + {"2001:550:3501::/38", "174"}, + {"2001:559:755::/48", "33651"}, + {"240a:a2ea::/32", "143396"}, + {"2600:1415:19::/38", "20940"}, + {"2605:a840::/32", "7775"}, + {"2804:760::/35", "262638"}, + {"2804:1820::/32", "61920"}, + {"2a04:fb00:1::/48", "39315"}, + {"2001:559:8288::/48", "7015"}, + {"2804:5b7c::/32", "268848"}, + {"2001:da8:209::/48", "23910"}, + {"2400:9380:84c0::/44", "136167"}, + {"240a:ad3a::/32", "146036"}, + {"2620:109:3000::/45", "29888"}, + {"2804:4a78:a200::/33", "267242"}, + {"2a09:5180::/29", "42487"}, + {"2a0a:340:ff00::/40", "48043"}, + {"2a0b:7080:10::/42", "7489"}, + {"2a0b:f100::/29", "43451"}, + {"2001:470:61::/45", "6939"}, + {"2001:4490:d140::/46", "9829"}, + {"2401:fa00:42::/45", "24424"}, + {"2409:8915:2b00::/37", "56044"}, + {"2620:5e:c000::/48", "393304"}, + {"2800:440:106::/48", "27738"}, + {"2a0e:8300::/29", "43415"}, + {"2400:52e0:1::/48", "200325"}, + {"2402:800:b1f0::/38", "7552"}, + {"2a0e:5c00::/29", "209097"}, + {"2001:4b21:0:1::/32", "34288"}, + {"2620:11b:3000::/48", "26470"}, + {"2803:b60::/32", "269797"}, + {"2804:5e48:ff50::/48", "269023"}, + {"2001:41e0::/32", "20932"}, + {"2402:8100:30d0::/44", "45271"}, + {"2404:4a00:2094::/48", "55423"}, + {"240a:ac1f::/32", "145753"}, + {"240a:aff7::/32", "146737"}, + {"2804:52e0::/32", "268547"}, + {"2a02:ee80:42d2::/45", "3573"}, + {"2a09:bac0:38::/47", "13335"}, + {"2001:559:87cf::/48", "7922"}, + {"2402:800:9b1d::/42", "7552"}, + {"2408:8957:12c0::/39", "17816"}, + {"240e:44d:4280::/41", "4134"}, + {"2804:5d48::/32", "268962"}, + {"2a0e:d780::/29", "204790"}, + {"2600:1401:c001::/30", "20940"}, + {"2600:1406:9401::/36", "20940"}, + {"2806:3d0::/32", "398013"}, + {"2a02:26f7:e7d4::/48", "36183"}, + {"2a0c:f8c0::/30", "210214"}, + {"2a0f:3784:103::/40", "213204"}, + {"2001:559:c0d2::/48", "7922"}, + {"2602:fef0::/47", "396388"}, + {"2607:f208:df00::/48", "398101"}, + {"2a07:14c0:6000::/36", "208861"}, + {"2001:678:150::/48", "59617"}, + {"2408:8409:8400::/40", "4808"}, + {"240e:108:20::/48", "4134"}, + {"2604:4d40:fff::/48", "213073"}, + {"2804:14c:f200::/40", "28573"}, + {"2804:32ac::/32", "265092"}, + {"2806:230:401c::/48", "265594"}, + {"2a02:26f7:c8cc::/48", "36183"}, + {"2a02:26f7:d211::/42", "20940"}, + {"2800:160:16a6::/47", "14259"}, + {"2803:2540:12::/48", "271874"}, + {"2a02:2218::/29", "41157"}, + {"2a02:f040::/47", "59605"}, + {"2001:250:582b::/43", "24363"}, + {"2001:1a11:1d::/46", "42298"}, + {"240a:a043::/32", "142717"}, + {"2600:380:7480::/38", "20057"}, + {"2001:559:c3a1::/46", "7015"}, + {"2403:c380::/32", "59189"}, + {"240e:980:8900::/40", "4134"}, + {"2607:fd48:202::/47", "13536"}, + {"2804:508::/32", "52999"}, + {"2001:1a40:110::/44", "5416"}, + {"2404:bf40:e902::/48", "7545"}, + {"240a:a023::/32", "142685"}, + {"2804:1248:9000::/33", "263467"}, + {"2804:3220:2001::/46", "265058"}, + {"2804:5490::/32", "268658"}, + {"2804:76a0:f000::/36", "271124"}, + {"2001:df5:9a80::/48", "134458"}, + {"240a:a0ee::/32", "142888"}, + {"2620:7e:60c0::/48", "7385"}, + {"2408:8459:6a50::/37", "17816"}, + {"240a:a107::/32", "142913"}, + {"240a:a9a6::/32", "145120"}, + {"2607:f740:e00d::/43", "63911"}, + {"2800:160:1e6b::/43", "14259"}, + {"2a0e:1bc1::/35", "208621"}, + {"2a0e:b107:260::/44", "208627"}, + {"2402:800:b830::/41", "7552"}, + {"2405:6e00:488::/43", "18291"}, + {"240a:a49d::/32", "143831"}, + {"2804:4c60::/32", "267367"}, + {"2a02:26f7:b9a1::/46", "20940"}, + {"2a03:2880:f044::/47", "32934"}, + {"2a10:ac00::/32", "31242"}, + {"2402:800:bd80::/42", "7552"}, + {"2402:800:be70::/39", "7552"}, + {"2a02:51c0::/32", "42277"}, + {"2c0f:f418:4::/32", "37714"}, + {"2001:67c:253c::/48", "21080"}, + {"2401:d800:f260::/40", "7552"}, + {"2405:3140:11::/48", "56006"}, + {"2409:8924:1f00::/34", "56046"}, + {"2a00:79e1:805::/48", "15169"}, + {"2001:678:f2c::/48", "211499"}, + {"2600:805:808::/48", "33172"}, + {"2600:e400::/29", "30404"}, + {"2602:ffc5:610::/44", "147173"}, + {"2001:1900:3013::/32", "3356"}, + {"2620:126:e000::/48", "21556"}, + {"2804:26a0::/32", "263845"}, + {"2a0c:93c0:8020::/48", "212465"}, + {"2806:230:1001::/48", "11888"}, + {"2a04:5300::/29", "13135"}, + {"2a0e:68c0:2::/48", "209121"}, + {"2001:559:c18b::/48", "21508"}, + {"2405:a100:10::/41", "131283"}, + {"2804:3bac::/35", "266164"}, + {"2a0b:e640:1::/48", "206316"}, + {"2402:800:5e01::/42", "7552"}, + {"240a:abfc::/32", "145718"}, + {"2a01:7660::/45", "12843"}, + {"2a03:b780::/32", "29134"}, + {"2a11:8700::/29", "204790"}, + {"2804:d34::/32", "52611"}, + {"2804:2a80:8000::/33", "53094"}, + {"2001:559:c12f::/48", "33656"}, + {"240a:adb3::/32", "146157"}, + {"2604:500::/32", "22464"}, + {"2806:230:100e::/48", "265594"}, + {"240a:a81f::/32", "144729"}, + {"2600:1404:e800::/48", "35994"}, + {"2600:9000:21f3::/38", "16509"}, + {"2604:2a00::/32", "23138"}, + {"2001:ee0:df00::/34", "45899"}, + {"2400:8b00:b00::/42", "45727"}, + {"2404:3440::/32", "138534"}, + {"2408:840c:c900::/40", "17621"}, + {"2602:ffc5:190::/46", "7489"}, + {"2804:28e4:e825::/35", "28260"}, + {"2a11:4e00::/36", "213042"}, + {"2001:67c:2fd0::/48", "201925"}, + {"240a:a574::/32", "144046"}, + {"2801:80:50::/48", "11802"}, + {"2409:8a50:300::/37", "56047"}, + {"240e:965:9800::/34", "4134"}, + {"2a07:5440::/29", "24875"}, + {"2a0d:da00::/32", "205072"}, + {"2400:ffc0:4::/47", "132335"}, + {"2401:d800:2c70::/40", "7552"}, + {"240a:ae73::/32", "146349"}, + {"2803:e40:84::/44", "27797"}, + {"2804:3f10:6101::/38", "262566"}, + {"2a0d:5600:63::/48", "9009"}, + {"2405:6e00:400::/43", "133612"}, + {"240e:8::/31", "4134"}, + {"2606:6380:5::/46", "26721"}, + {"2804:8434:300::/47", "272246"}, + {"2a00:1cb8:2:e::/48", "12713"}, + {"2a02:26f7:dc09::/46", "20940"}, + {"2a03:5780::/48", "25122"}, + {"2409:8038:900::/35", "9808"}, + {"240a:a3bf::/32", "143609"}, + {"240e:5a:43c0::/37", "140295"}, + {"2606:a000::/37", "11426"}, + {"2804:6a1c::/32", "270313"}, + {"2a02:2f0c:8002:3::4/61", "8708"}, + {"2a02:ac80:f001::/29", "25145"}, + {"2a0b:ae40:1::/45", "40676"}, + {"2001:1248:96c5::/43", "11172"}, + {"240a:a988::/32", "145090"}, + {"2600:370f:526a::/40", "32261"}, + {"2a00:e98::/32", "39912"}, + {"2a02:26f0:8a01::/39", "20940"}, + {"2a03:a060::/32", "203538"}, + {"2a0b:abc0::/29", "205516"}, + {"2001:559:c380::/48", "33659"}, + {"2620:11e:3083::/48", "7060"}, + {"2803:b780:a::/43", "27742"}, + {"2001:559:80c3::/45", "33651"}, + {"2606:2400:1002::/48", "16896"}, + {"2803:efc0::/48", "3549"}, + {"2804:7e58::/32", "271618"}, + {"2a02:26f7:f780::/48", "36183"}, + {"2001:67c:2380::/48", "20897"}, + {"2602:103:2000::/33", "20115"}, + {"2800:e01:7000::/30", "27665"}, + {"2804:799c::/32", "271316"}, + {"2a02:888:8144::/46", "48695"}, + {"2a02:26f7:c340::/48", "36183"}, + {"2a0e:7bc0::/29", "57610"}, + {"2402:800:34c5::/43", "7552"}, + {"2a01:5041:2efd::/46", "202196"}, + {"2a02:25b0::/32", "49101"}, + {"2602:ffcd::/36", "55254"}, + {"2800:160:12a6::/44", "14259"}, + {"2a02:2e02:9fd0::/34", "12479"}, + {"2404:f4c0:ff13::/48", "149506"}, + {"2804:14c:75ab::/41", "28573"}, + {"2001:550:7702:1::/47", "174"}, + {"2001:da8:e81b::/48", "24368"}, + {"2403:1940:100::/48", "137935"}, + {"2804:84a8::/32", "272274"}, + {"2405:e40::/45", "139005"}, + {"2409:8087:5020::/40", "56047"}, + {"240a:a38f::/32", "143561"}, + {"240e:3b3:9200::/36", "140317"}, + {"2001:67c:2558::/48", "20943"}, + {"2401:b00:12::/36", "17564"}, + {"2001:250:3c0d::/46", "138369"}, + {"240e:45c:8200::/40", "131285"}, + {"2604:3940::/32", "31841"}, + {"2606:5080::/32", "63343"}, + {"2a00:4a00:3000::/33", "39356"}, + {"2408:8256:3b9f::/37", "17816"}, + {"240a:ace3::/32", "145949"}, + {"240e:e1:8e00::/35", "4811"}, + {"2607:fcd0:100:f::/52", "8100"}, + {"2a01:488:bb1a::/48", "398106"}, + {"2a02:888:8250::/48", "48695"}, + {"2a02:6f60::/32", "12617"}, + {"2806:2f0:83a1::/46", "17072"}, + {"2a01:4642:100::/40", "9042"}, + {"2804:6498::/32", "269437"}, + {"2804:83ec::/32", "272229"}, + {"2400:1a00:8003::/43", "17501"}, + {"240a:ab48::/32", "145538"}, + {"2605:e4c0::/32", "63394"}, + {"2606:82c0:11::/45", "32167"}, + {"2401:d800:2db2::/41", "7552"}, + {"2408:8459:f110::/42", "17623"}, + {"2600:40ff:fcfc::/47", "7046"}, + {"2607:fc48:440::/48", "40009"}, + {"2001:1930:7c08::/48", "11985"}, + {"2408:8459:3c10::/41", "17623"}, + {"2605:8780::/32", "393457"}, + {"2803:6700:640::/48", "263210"}, + {"2a02:4e0:fe02::/48", "16135"}, + {"2a02:e88:8000::/48", "44914"}, + {"2a02:25a8::/32", "12824"}, + {"2a05:6d80::/29", "9110"}, + {"2407:5c80::/32", "59362"}, + {"2804:434c::/32", "267561"}, + {"2001:559:756::/47", "7922"}, + {"2001:19b8::/32", "30340"}, + {"2401:d800:7160::/40", "7552"}, + {"240e:45c:b600::/33", "131285"}, + {"2a00:5e80::/32", "15557"}, + {"2001:559:753::/48", "33659"}, + {"240e:45c:b100::/40", "140537"}, + {"2a10:a500:21::/32", "205920"}, + {"2408:8226::/32", "4837"}, + {"240a:a138::/32", "142962"}, + {"2001:44b8:1065::/48", "4739"}, + {"2409:8087:6100::/38", "9808"}, + {"2804:14d:1a85::/41", "28573"}, + {"2804:2dd8::/32", "265307"}, + {"2804:6528::/32", "269472"}, + {"2a02:26f7:cf04::/48", "36183"}, + {"2001:67c:8fc::/48", "212925"}, + {"2402:a00::/43", "45916"}, + {"2403:9800:7c00::/40", "4648"}, + {"2620:149:14a::/47", "714"}, + {"2803:f340::/35", "14754"}, + {"2001:67c:1b58::/47", "35559"}, + {"2404:1c40:2d::/48", "24432"}, + {"240e:145::/30", "4134"}, + {"2605:e740:100::/40", "174"}, + {"2620:31:2007::/48", "53722"}, + {"2804:2d14::/32", "265260"}, + {"2001:559:83d6::/48", "33287"}, + {"2402:800:55c5::/43", "7552"}, + {"2407:e80:4::/32", "58689"}, + {"2409:8087:5802::/48", "56040"}, + {"2600:6c39:409::/41", "20115"}, + {"2620:103:a000::/44", "12148"}, + {"2806:300::/46", "28387"}, + {"2a0f:5707:aa00::/44", "34924"}, + {"2001:559:3e6::/48", "20214"}, + {"2001:918:ffb7::/48", "8300"}, + {"2407:a600:4000::/36", "18004"}, + {"2600:1000:b000::/40", "6167"}, + {"2600:40fc:1010::/45", "14210"}, + {"2001:678:9c::/48", "57801"}, + {"2605:8300:f::/48", "25645"}, + {"2a02:26f7:bd04::/48", "36183"}, + {"2a02:26f7:bd48::/48", "36183"}, + {"2a12:eb00::/29", "49581"}, + {"2402:7d80:9999::/48", "63583"}, + {"2804:151:1::/46", "10954"}, + {"2a03:7a0::/29", "43940"}, + {"2001:1248:55cb::/43", "11172"}, + {"240e:974:e01::/35", "4134"}, + {"2401:d800:9ca0::/41", "7552"}, + {"240a:a94a::/32", "145028"}, + {"2604:5540:4010::/48", "13750"}, + {"2607:d300::/32", "8059"}, + {"2001:1a11:12a::/47", "42298"}, + {"2001:44b8:30b3::/44", "4739"}, + {"2404:8000:100c::/43", "17451"}, + {"240a:a12d::/32", "142951"}, + {"240c:c0a8:5c49::/48", "24364"}, + {"2606:5000:600::/35", "209"}, + {"2803:3400::/32", "14754"}, + {"2804:3574::/32", "266287"}, + {"2804:70bc:9000::/33", "270745"}, + {"2a00:1420::/32", "44993"}, + {"2a0e:15c2::/29", "60781"}, + {"2001:67c:2ae0::/48", "3292"}, + {"2600:6c38:748::/45", "20115"}, + {"2804:14d:ac00::/40", "28573"}, + {"2804:1d04:f000::/36", "61689"}, + {"2804:55bc::/32", "267953"}, + {"2401:8800:a04::/40", "17439"}, + {"2404:2440:cafe::/48", "138521"}, + {"2001:559:163::/48", "33652"}, + {"2001:559:c2e0::/48", "7016"}, + {"2403:3b00::/32", "38083"}, + {"240e:678:e200::/39", "140329"}, + {"2804:2e34::/32", "265331"}, + {"2a0f:9340:3d::/48", "1299"}, + {"2001:67c:20d0::/47", "5421"}, + {"2001:1a68:c::/43", "15694"}, + {"2408:8456:ac10::/42", "134543"}, + {"2804:eec:1301::/48", "25933"}, + {"2804:217c::/32", "264557"}, + {"2804:6828::/32", "269672"}, + {"2a03:2880::/34", "32934"}, + {"2001:559:c1de::/48", "33287"}, + {"2408:8459:d080::/39", "17816"}, + {"240e:329::/25", "4134"}, + {"2602:fcdd::/36", "398697"}, + {"2001:559:c419::/48", "7016"}, + {"2405:fb80::/32", "132006"}, + {"240a:a5d8::/32", "144146"}, + {"2600:1401:7::/48", "35994"}, + {"2602:fd0f::/36", "18515"}, + {"2001:559:8218::/47", "7922"}, + {"240e:44d:1c80::/41", "4134"}, + {"2804:30b4::/32", "264970"}, + {"2a02:2e02:1610::/41", "12479"}, + {"2001:67c:59c::/48", "59448"}, + {"240e:438:9a40::/37", "4134"}, + {"2a02:88d:812f::/48", "47794"}, + {"2a02:26f7:b999::/46", "20940"}, + {"2a0e:b107:1590::/47", "142598"}, + {"2001:550:1900:2::/45", "174"}, + {"240a:a082::/32", "142780"}, + {"2600:380:2000::/40", "20057"}, + {"2a03:2880:f238::/46", "32934"}, + {"2a0c:efc0::/46", "206356"}, + {"2001:df3:9400::/48", "134138"}, + {"2803:180::/32", "28036"}, + {"2804:5c0c::/32", "268884"}, + {"2c0f:f4c0:1482::/32", "37611"}, + {"2001:df4:9800::/48", "38775"}, + {"2400:4480:1000::/47", "17426"}, + {"2408:8256:38a0::/39", "17816"}, + {"2604:d600:115c::/38", "32098"}, + {"2a01:81e0::/46", "199783"}, + {"2001:678:538::/48", "197942"}, + {"2001:df0:d680::/46", "139287"}, + {"2804:4d4::/32", "262469"}, + {"2a0a:3200::/29", "400177"}, + {"2001:4210:9805::/44", "25818"}, + {"2408:8756:d100::/28", "17816"}, + {"240a:a80c::/32", "144710"}, + {"2800:bf0:8298::/42", "27947"}, + {"2a02:26f7:f701::/46", "20940"}, + {"2001:250:5002::/44", "24361"}, + {"2408:8956:5b00::/40", "17816"}, + {"240e:44d:e80::/41", "4134"}, + {"2803:ad10::/32", "272042"}, + {"2804:71c8::/32", "270811"}, + {"2001:559:85f8::/48", "33662"}, + {"2404:5d80:6100::/40", "33438"}, + {"2600:1012:f000::/43", "6167"}, + {"2803:f0e0::/32", "269864"}, + {"2804:5780::/32", "262734"}, + {"2a02:2e02:9040::/43", "12479"}, + {"2a03:2480:70::/48", "200107"}, + {"2001:1248:97fb::/45", "11172"}, + {"2406:cd40::/32", "132202"}, + {"2607:fca8:a538::/48", "54380"}, + {"2001:67c:20cc::/48", "16243"}, + {"2603:c014::/36", "31898"}, + {"2804:14c:ce82::/41", "28573"}, + {"2a0c:4480:1::/46", "204720"}, + {"2409:8c28:d06::/35", "56041"}, + {"240e:974:e000::/40", "139220"}, + {"2607:7e80:f000::/36", "395354"}, + {"2800:160:150d::/43", "14259"}, + {"2804:7820::/32", "271222"}, + {"2804:8394::/32", "272206"}, + {"2001:678:ce4::/48", "60557"}, + {"2001:678:edc::/48", "1257"}, + {"2407:b001:1010::/48", "394749"}, + {"2804:1908::/32", "61770"}, + {"2804:7150::/32", "270781"}, + {"2400:5100::/32", "10012"}, + {"2401:d800:9c10::/42", "7552"}, + {"2600:6c38:1ab::/43", "20115"}, + {"2806:370:41a0::/41", "28403"}, + {"2a02:f040:7::/48", "59605"}, + {"2a0c:8440::/48", "205296"}, + {"2400:9380:8030::/48", "4134"}, + {"2409:8054:301b::/45", "56040"}, + {"2800:482:4002::/48", "10620"}, + {"2a00:d40:100::/45", "2597"}, + {"2a07:e900::/29", "8888"}, + {"2a0e:97c0:420::/44", "211267"}, + {"2400:1c00:66::/48", "45143"}, + {"2408:8956:a100::/40", "17816"}, + {"2603:fa68::/29", "63023"}, + {"2a01:6e00:a::/43", "43142"}, + {"2a02:26f7:eb4c::/48", "36183"}, + {"2a03:dc40:ffef::/48", "199926"}, + {"2a03:e140:1b::/48", "56674"}, + {"2a05:f507:73::/45", "13443"}, + {"2a06:e881:1705::/46", "206813"}, + {"2001:1248:991b::/42", "11172"}, + {"2a0c:b642:5000::/43", "49519"}, + {"2001:438:66::/44", "6461"}, + {"2001:559:8534::/48", "7015"}, + {"2001:678:a34::/48", "51567"}, + {"2801:0:90::/48", "28109"}, + {"2a01:400::/32", "44212"}, + {"2a04:4e40:b000::/48", "54113"}, + {"2600:40f0:150::/35", "701"}, + {"2804:25c8:4000::/38", "264302"}, + {"2804:622c::/32", "269280"}, + {"2804:7c44::/32", "271485"}, + {"2a02:9b0::/44", "35819"}, + {"2a02:26f7:e308::/48", "36183"}, + {"2400:2000:b::/45", "20940"}, + {"2804:802c:130::/41", "271734"}, + {"2001:3d8::/32", "9595"}, + {"2001:559:c114::/48", "7016"}, + {"2001:978:3902::/38", "174"}, + {"2001:da8:204::/48", "24349"}, + {"2400:8b00:c80::/42", "45727"}, + {"2600:1408:8401::/36", "20940"}, + {"2803:af80:1100::/32", "263732"}, + {"2a02:e58::/46", "209523"}, + {"2401:cd81::/48", "63920"}, + {"2401:d800:7c52::/40", "7552"}, + {"2409:890c::/30", "56042"}, + {"2600:1fa0:81a0::/44", "16509"}, + {"2001:67c:2350::/48", "6830"}, + {"2409:801e:3005::/46", "9808"}, + {"2620:100:900c::/47", "26211"}, + {"2800:bf0:3740::/47", "52257"}, + {"2a10:d506::/31", "398464"}, + {"2404:bf40:a0c0::/48", "2764"}, + {"2408:8956:fe00::/39", "17816"}, + {"2803:4510::/32", "272018"}, + {"2803:8420:ff00::/48", "269799"}, + {"2804:6c0:10::/44", "262418"}, + {"2804:161c:d00::/45", "263268"}, + {"2a0e:fd45:40f7::/48", "398646"}, + {"2001:df4:bb80::/48", "139495"}, + {"2409:8000:5b00::/40", "9808"}, + {"2804:7e54::/32", "271617"}, + {"2a06:5f00::/29", "204147"}, + {"2001:559:c511::/48", "7922"}, + {"2001:579:92be::/41", "22773"}, + {"2402:800:3c01::/43", "7552"}, + {"2804:1d40::/32", "52674"}, + {"2804:5308::/32", "268559"}, + {"2a02:ee80:405a::/42", "3573"}, + {"2a07:de40:400::/38", "29298"}, + {"2a0a:ec02:401::/48", "42692"}, + {"2a0c:7e41:5357::/48", "20473"}, + {"2a0f:bf00::/42", "208196"}, + {"240e:679:8800::/38", "140330"}, + {"2600:1010:9110::/36", "22394"}, + {"2600:40ff:fc00::/48", "7046"}, + {"2606:2800:457::/44", "15133"}, + {"2a00:ba60::/31", "35625"}, + {"2001:7f8:1f::/48", "1835"}, + {"2400:cb00:a0f7::/48", "13335"}, + {"2407:9940::/48", "18403"}, + {"2607:d700::/32", "19566"}, + {"2001:559:91::/46", "7922"}, + {"2408:80f1:200::/43", "17621"}, + {"2800:160:1864::/47", "14259"}, + {"2a00:1f88::/32", "29545"}, + {"2a02:26f7:57::/48", "20940"}, + {"2a0f:9400:7842::/47", "147028"}, + {"2400:a980:50fd::/46", "133111"}, + {"240e:67c:8c00::/33", "4134"}, + {"2800:98:1809::/45", "14754"}, + {"2804:57a8::/32", "268078"}, + {"2a02:26f7:b98d::/46", "20940"}, + {"2001:4490:4800::/40", "9829"}, + {"2401:7200:2102::/48", "55328"}, + {"2402:7d80::/38", "63582"}, + {"2605:940:510::/44", "396919"}, + {"2a02:26f7:f54c::/48", "36183"}, + {"2a03:d400::/42", "198913"}, + {"2a10:9c0::/29", "61272"}, + {"2401:7340:1000::/48", "34985"}, + {"2804:14d:be8b::/41", "28573"}, + {"2a02:26f7:b7c8::/48", "36183"}, + {"2a03:f580:2::/32", "15763"}, + {"2001:df6:2400::/48", "38880"}, + {"2001:4118::/32", "2607"}, + {"2409:8c28:91a1::/34", "56041"}, + {"2607:fa10::/32", "7106"}, + {"2620:107:6000::/51", "6462"}, + {"2801:80:17e0::/43", "61580"}, + {"2803:d100:e7c0::/36", "52362"}, + {"2804:2d80:aa03::/40", "262378"}, + {"2001:559:c337::/48", "33652"}, + {"2001:648:2cf0::/38", "5408"}, + {"240a:a7d1::/32", "144651"}, + {"240a:a965::/32", "145055"}, + {"240e:309:1200::/32", "4134"}, + {"2620:106:7080::/46", "11795"}, + {"2803:b100::/32", "52392"}, + {"2a06:3300::/29", "56532"}, + {"240a:a19e::/32", "143064"}, + {"240a:af23::/32", "146525"}, + {"2804:6530::/32", "269474"}, + {"2a02:88d:402f::/48", "47794"}, + {"2a02:4540:7040::/45", "197207"}, + {"2a0c:f587:fffd::/48", "205381"}, + {"2001:559:8715::/48", "33659"}, + {"2409:8948:9200::/40", "24445"}, + {"240a:a6f4::/32", "144430"}, + {"2602:fc23:11b::/48", "207852"}, + {"2804:37e8:fd00::/38", "262671"}, + {"2a03:1780::/32", "34173"}, + {"2001:4d50::/32", "34309"}, + {"2603:c0f8:2820::/39", "20054"}, + {"2800:9a7:3011::/41", "14522"}, + {"2a03:f0c0::/32", "16253"}, + {"2a06:f901:c000::/36", "8849"}, + {"2a0e:b3c0::/29", "204790"}, + {"2001:559:29f::/48", "33652"}, + {"2407:dc00::/46", "9714"}, + {"240a:a139::/32", "142963"}, + {"240a:a975::/32", "145071"}, + {"240e:3bf:c800::/37", "4134"}, + {"2602:fbb5::/36", "13849"}, + {"2a01:c50f:d140::/38", "12479"}, + {"2a02:26f7:e2c1::/46", "20940"}, + {"2a02:6300::/42", "50128"}, } diff --git a/vendor/github.com/libp2p/go-libp2p-asn-util/version.json b/vendor/github.com/libp2p/go-libp2p-asn-util/version.json new file mode 100644 index 0000000000..1437d5b735 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p-asn-util/version.json @@ -0,0 +1,3 @@ +{ + "version": "v0.2.0" +} diff --git a/vendor/github.com/libp2p/go-libp2p-blankhost/LICENSE b/vendor/github.com/libp2p/go-libp2p-blankhost/LICENSE deleted file mode 100644 index 26100332ba..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-blankhost/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Jeromy Johnson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-libp2p-blankhost/README.md b/vendor/github.com/libp2p/go-libp2p-blankhost/README.md deleted file mode 100644 index ad83ee3fe1..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-blankhost/README.md +++ /dev/null @@ -1,38 +0,0 @@ -go-libp2p-blankhost -================== - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Travis CI](https://travis-ci.org/libp2p/go-libp2p-blankhost.svg?branch=master)](https://travis-ci.org/libp2p/go-libp2p-blankhost) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - - -A very thin implementation of go-libp2p-host. Does not contain any identify, relay, or NAT traversal code. - - -## Table of Contents - -- [Install](#install) -- [Contribute](#contribute) -- [License](#license) - -## Install - -```sh -make install -``` - -## Contribute - -PRs are welcome! - -Small note: If editing the Readme, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. - -## License - -MIT © Jeromy Johnson - ---- - -The last gx published version of this module was: 0.3.26: QmcBTHN7uAMBdkzRoQ3n9cE7tGu8Ubd9zmahjskjTRw4Uf diff --git a/vendor/github.com/libp2p/go-libp2p-blankhost/codecov.yml b/vendor/github.com/libp2p/go-libp2p-blankhost/codecov.yml deleted file mode 100644 index 5f88a9ea27..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-blankhost/codecov.yml +++ /dev/null @@ -1,3 +0,0 @@ -coverage: - range: "50...100" -comment: off diff --git a/vendor/github.com/libp2p/go-libp2p-blankhost/go.mod b/vendor/github.com/libp2p/go-libp2p-blankhost/go.mod deleted file mode 100644 index 1e33dbb418..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-blankhost/go.mod +++ /dev/null @@ -1,13 +0,0 @@ -module github.com/libp2p/go-libp2p-blankhost - -go 1.16 - -require ( - github.com/ipfs/go-log/v2 v2.3.0 - github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p-core v0.11.0 - github.com/libp2p/go-libp2p-swarm v0.8.0 - github.com/multiformats/go-multiaddr v0.4.0 - github.com/multiformats/go-multistream v0.2.1 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/libp2p/go-libp2p-blankhost/go.sum b/vendor/github.com/libp2p/go-libp2p-blankhost/go.sum deleted file mode 100644 index d32bf37420..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-blankhost/go.sum +++ /dev/null @@ -1,888 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.3.0 h1:31Re/cPqFHpsRHgyVwjWADPoF0otB1WrjTy8ZFYwEZU= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-addr-util v0.1.0 h1:acKsntI33w2bTU7tC9a0SaPimJGfSI0bFKC18ChxeVI= -github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.11.0 h1:75jAgdA+IChNa+/mZXogfmrGkgwxkVvxmIC7pV+F6sI= -github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-mplex v0.4.1 h1:/pyhkP1nLwjG3OM+VuaNJkQT/Pqq73WzB3aDN3Fx1sc= -github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-peerstore v0.4.0 h1:DOhRJLnM9Dc9lIXi3rPDZBf789LXy1BrzwIs7Tj0cKA= -github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-quic-transport v0.13.0 h1:MTVojS4AnGD/rng6rF/HXEqwMHL27rHUEf3DaqSdnUw= -github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= -github.com/libp2p/go-libp2p-swarm v0.8.0 h1:nRHNRhi86L7jhka02N4MoV+PSFFPoJFkHNQwCTFxNhw= -github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= -github.com/libp2p/go-libp2p-testing v0.5.0 h1:bTjC29TTQ/ODq0ld3+0KLq3irdA5cAH3OMbRi0/QsvE= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-tls v0.3.0 h1:8BgvUJiOTcj0Gp6XvEicF0rL5aUtRg/UzEdeZDmDlC8= -github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0 h1:7SDl3O2+AYOgfE40Mis83ClpfGNkNA6m4FwhbOHs+iI= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= -github.com/libp2p/go-libp2p-yamux v0.5.0 h1:ZzmUhbQE+X7NuYUT2naxN31JyebZfRmpZVhKtRP13ys= -github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= -github.com/libp2p/go-maddr-filter v0.1.0 h1:4ACqZKw8AqiuJfwFGq1CYDFugfXTOos+qQ3DETkhtCE= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.3.0 h1:U1T+vmCYJaEoDJPV1aq31N56hS+lJgb397GsylNSgrU= -github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.5 h1:Qj8GE/6Cxmw9aQUYTA9BrS+TELTqU7kKKspWBR4ieVw= -github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= -github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.0 h1:Y4s3/jNoryVRKEBrkJ576F17CPOaMIzUeCsg7dlTDj0= -github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-tcp-transport v0.4.0 h1:VDyg4j6en3OuXf90gfDQh5Sy9KowO9udnd0OU8PP6zg= -github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= -github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucas-clemente/quic-go v0.23.0 h1:5vFnKtZ6nHDFsc/F3uuiF4T3y/AXaQdxjUqiVw26GZE= -github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr v0.4.0 h1:hL/K4ZJhJ5PTw3nwylq9lGU5yArzcAroZmex1ghSEkQ= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.2.1 h1:R5exp4cKvGlePuxg/bn4cnV53K4DxCe+uldxs7QzfrE= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0 h1:WCVKW7aL6LEe1uryfI9dnEc2ZqNB1Fn0ok930v0iL1Y= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/libp2p/go-libp2p-core/crypto/btcd_go116.go b/vendor/github.com/libp2p/go-libp2p-core/crypto/btcd_go116.go new file mode 100644 index 0000000000..63ecf7465c --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p-core/crypto/btcd_go116.go @@ -0,0 +1,13 @@ +//go:build !go1.17 +// +build !go1.17 + +package crypto + +// This import allows us to force a minimum version of github.com/btcsuite/btcd, +// which otherwise causes problems when `go mod tidy` tries to please Go 1.16 +// (which we don't care about any more at this point). +// +// See https://github.com/libp2p/go-libp2p-core/issues/252 for details. +import ( + _ "github.com/btcsuite/btcd/chaincfg" +) diff --git a/vendor/github.com/libp2p/go-libp2p-core/crypto/key_not_openssl.go b/vendor/github.com/libp2p/go-libp2p-core/crypto/key_not_openssl.go index 93734c3200..28792f8f51 100644 --- a/vendor/github.com/libp2p/go-libp2p-core/crypto/key_not_openssl.go +++ b/vendor/github.com/libp2p/go-libp2p-core/crypto/key_not_openssl.go @@ -9,7 +9,7 @@ import ( "crypto/ed25519" "crypto/rsa" - btcec "github.com/btcsuite/btcd/btcec" + btcec "github.com/btcsuite/btcd/btcec/v2" ) // KeyPairFromStdKey wraps standard library (and secp256k1) private keys in libp2p/go-libp2p-core/crypto keys diff --git a/vendor/github.com/libp2p/go-libp2p-core/crypto/key_openssl.go b/vendor/github.com/libp2p/go-libp2p-core/crypto/key_openssl.go index 1a85ab4487..60f9ced27f 100644 --- a/vendor/github.com/libp2p/go-libp2p-core/crypto/key_openssl.go +++ b/vendor/github.com/libp2p/go-libp2p-core/crypto/key_openssl.go @@ -10,7 +10,7 @@ import ( "crypto/rsa" "crypto/x509" - btcec "github.com/btcsuite/btcd/btcec" + btcec "github.com/btcsuite/btcd/btcec/v2" openssl "github.com/libp2p/go-openssl" "github.com/libp2p/go-libp2p-core/internal/catch" diff --git a/vendor/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go b/vendor/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go index 9197f62fe2..d90b232439 100644 --- a/vendor/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go +++ b/vendor/github.com/libp2p/go-libp2p-core/crypto/secp256k1.go @@ -7,7 +7,8 @@ import ( pb "github.com/libp2p/go-libp2p-core/crypto/pb" "github.com/libp2p/go-libp2p-core/internal/catch" - "github.com/btcsuite/btcd/btcec" + btcec "github.com/btcsuite/btcd/btcec/v2" + btcececdsa "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/minio/sha256-simd" ) @@ -19,7 +20,7 @@ type Secp256k1PublicKey btcec.PublicKey // GenerateSecp256k1Key generates a new Secp256k1 private and public key pair func GenerateSecp256k1Key(src io.Reader) (PrivKey, PubKey, error) { - privk, err := btcec.NewPrivateKey(btcec.S256()) + privk, err := btcec.NewPrivateKey() if err != nil { return nil, nil, err } @@ -35,14 +36,14 @@ func UnmarshalSecp256k1PrivateKey(data []byte) (k PrivKey, err error) { } defer func() { catch.HandlePanic(recover(), &err, "secp256k1 private-key unmarshal") }() - privk, _ := btcec.PrivKeyFromBytes(btcec.S256(), data) + privk, _ := btcec.PrivKeyFromBytes(data) return (*Secp256k1PrivateKey)(privk), nil } // UnmarshalSecp256k1PublicKey returns a public key from bytes func UnmarshalSecp256k1PublicKey(data []byte) (_k PubKey, err error) { defer func() { catch.HandlePanic(recover(), &err, "secp256k1 public-key unmarshal") }() - k, err := btcec.ParsePubKey(data, btcec.S256()) + k, err := btcec.ParsePubKey(data) if err != nil { return nil, err } @@ -73,11 +74,9 @@ func (k *Secp256k1PrivateKey) Equals(o Key) bool { // Sign returns a signature from input data func (k *Secp256k1PrivateKey) Sign(data []byte) (_sig []byte, err error) { defer func() { catch.HandlePanic(recover(), &err, "secp256k1 signing") }() + key := (*btcec.PrivateKey)(k) hash := sha256.Sum256(data) - sig, err := (*btcec.PrivateKey)(k).Sign(hash[:]) - if err != nil { - return nil, err - } + sig := btcececdsa.Sign(key, hash[:]) return sig.Serialize(), nil } @@ -118,7 +117,7 @@ func (k *Secp256k1PublicKey) Verify(data []byte, sigStr []byte) (success bool, e success = false } }() - sig, err := btcec.ParseDERSignature(sigStr, btcec.S256()) + sig, err := btcececdsa.ParseDERSignature(sigStr) if err != nil { return false, err } diff --git a/vendor/github.com/libp2p/go-libp2p-core/network/notifee.go b/vendor/github.com/libp2p/go-libp2p-core/network/notifee.go index 10ef72f1e1..bb2f383387 100644 --- a/vendor/github.com/libp2p/go-libp2p-core/network/notifee.go +++ b/vendor/github.com/libp2p/go-libp2p-core/network/notifee.go @@ -11,12 +11,6 @@ type Notifiee interface { ListenClose(Network, ma.Multiaddr) // called when network stops listening on an addr Connected(Network, Conn) // called when a connection opened Disconnected(Network, Conn) // called when a connection closed - OpenedStream(Network, Stream) // called when a stream opened - ClosedStream(Network, Stream) // called when a stream closed - - // TODO - // PeerConnected(Network, peer.ID) // called when a peer connected - // PeerDisconnected(Network, peer.ID) // called when a peer disconnected } // NotifyBundle implements Notifiee by calling any of the functions set on it, @@ -28,9 +22,6 @@ type NotifyBundle struct { ConnectedF func(Network, Conn) DisconnectedF func(Network, Conn) - - OpenedStreamF func(Network, Stream) - ClosedStreamF func(Network, Stream) } var _ Notifiee = (*NotifyBundle)(nil) @@ -63,20 +54,6 @@ func (nb *NotifyBundle) Disconnected(n Network, c Conn) { } } -// OpenedStream calls OpenedStreamF if it is not null. -func (nb *NotifyBundle) OpenedStream(n Network, s Stream) { - if nb.OpenedStreamF != nil { - nb.OpenedStreamF(n, s) - } -} - -// ClosedStream calls ClosedStreamF if it is not null. -func (nb *NotifyBundle) ClosedStream(n Network, s Stream) { - if nb.ClosedStreamF != nil { - nb.ClosedStreamF(n, s) - } -} - // Global noop notifiee. Do not change. var GlobalNoopNotifiee = &NoopNotifiee{} @@ -88,5 +65,3 @@ func (nn *NoopNotifiee) Connected(n Network, c Conn) {} func (nn *NoopNotifiee) Disconnected(n Network, c Conn) {} func (nn *NoopNotifiee) Listen(n Network, addr ma.Multiaddr) {} func (nn *NoopNotifiee) ListenClose(n Network, addr ma.Multiaddr) {} -func (nn *NoopNotifiee) OpenedStream(Network, Stream) {} -func (nn *NoopNotifiee) ClosedStream(Network, Stream) {} diff --git a/vendor/github.com/libp2p/go-libp2p-core/protocol/switch.go b/vendor/github.com/libp2p/go-libp2p-core/protocol/switch.go index f3ac369bec..e00ba1ad1f 100644 --- a/vendor/github.com/libp2p/go-libp2p-core/protocol/switch.go +++ b/vendor/github.com/libp2p/go-libp2p-core/protocol/switch.go @@ -51,7 +51,6 @@ type Router interface { // Negotiator is a component capable of reaching agreement over what protocols // to use for inbound streams of communication. type Negotiator interface { - // NegotiateLazy will return the registered protocol handler to use // for a given inbound stream, returning as soon as the protocol has been // determined. Returns an error if negotiation fails. @@ -59,6 +58,8 @@ type Negotiator interface { // NegotiateLazy may return before all protocol negotiation responses have been // written to the stream. This is in contrast to Negotiate, which will block until // the Negotiator is finished with the stream. + // + // Deprecated: use Negotiate instead. NegotiateLazy(rwc io.ReadWriteCloser) (io.ReadWriteCloser, string, HandlerFunc, error) // Negotiate will return the registered protocol handler to use for a given diff --git a/vendor/github.com/libp2p/go-libp2p-discovery/README.md b/vendor/github.com/libp2p/go-libp2p-discovery/README.md index 4ab7fe40be..cee25074f6 100644 --- a/vendor/github.com/libp2p/go-libp2p-discovery/README.md +++ b/vendor/github.com/libp2p/go-libp2p-discovery/README.md @@ -1,3 +1,8 @@ +# DEPRECATION NOTICE + +This package has moved into go-libp2p, split into multiple sub-packages: +`github.com/libp2p/go-libp2p/p2p/discovery`. + # go-libp2p-discovery [![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) diff --git a/vendor/github.com/libp2p/go-libp2p-discovery/backoff.go b/vendor/github.com/libp2p/go-libp2p-discovery/backoff.go index 384a95cf6f..897a6bd147 100644 --- a/vendor/github.com/libp2p/go-libp2p-discovery/backoff.go +++ b/vendor/github.com/libp2p/go-libp2p-discovery/backoff.go @@ -1,228 +1,67 @@ package discovery import ( - "math" "math/rand" - "sync" "time" + + dbackoff "github.com/libp2p/go-libp2p/p2p/discovery/backoff" ) -type BackoffFactory func() BackoffStrategy +// Deprecated: use go-libp2p/p2p/discovery/backoff.BackoffFactory instead. +type BackoffFactory = dbackoff.BackoffFactory // BackoffStrategy describes how backoff will be implemented. BackoffStratgies are stateful. -type BackoffStrategy interface { - // Delay calculates how long the next backoff duration should be, given the prior calls to Delay - Delay() time.Duration - // Reset clears the internal state of the BackoffStrategy - Reset() -} +// Deprecated: use go-libp2p/p2p/discovery/backoff.BackoffStrategy instead. +type BackoffStrategy = dbackoff.BackoffStrategy // Jitter implementations taken roughly from https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ // Jitter must return a duration between min and max. Min must be lower than, or equal to, max. -type Jitter func(duration, min, max time.Duration, rng *rand.Rand) time.Duration +// Deprecated: use go-libp2p/p2p/discovery/backoff.Jitter instead. +type Jitter = dbackoff.Jitter // FullJitter returns a random number uniformly chose from the range [min, boundedDur]. // boundedDur is the duration bounded between min and max. +// Deprecated: use go-libp2p/p2p/discovery/backoff.FullJitter instead. func FullJitter(duration, min, max time.Duration, rng *rand.Rand) time.Duration { - if duration <= min { - return min - } - - normalizedDur := boundedDuration(duration, min, max) - min - - return boundedDuration(time.Duration(rng.Int63n(int64(normalizedDur)))+min, min, max) + return dbackoff.FullJitter(duration, min, max, rng) } // NoJitter returns the duration bounded between min and max +// Deprecated: use go-libp2p/p2p/discovery/backoff.NoJitter instead. func NoJitter(duration, min, max time.Duration, rng *rand.Rand) time.Duration { - return boundedDuration(duration, min, max) -} - -type randomizedBackoff struct { - min time.Duration - max time.Duration - rng *rand.Rand -} - -func (b *randomizedBackoff) BoundedDelay(duration time.Duration) time.Duration { - return boundedDuration(duration, b.min, b.max) -} - -func boundedDuration(d, min, max time.Duration) time.Duration { - if d < min { - return min - } - if d > max { - return max - } - return d -} - -type attemptBackoff struct { - attempt int - jitter Jitter - randomizedBackoff -} - -func (b *attemptBackoff) Reset() { - b.attempt = 0 + return dbackoff.NoJitter(duration, min, max, rng) } // NewFixedBackoff creates a BackoffFactory with a constant backoff duration +// Deprecated: use go-libp2p/p2p/discovery/backoff.NewFixedBackoff instead. func NewFixedBackoff(delay time.Duration) BackoffFactory { - return func() BackoffStrategy { - return &fixedBackoff{delay: delay} - } -} - -type fixedBackoff struct { - delay time.Duration -} - -func (b *fixedBackoff) Delay() time.Duration { - return b.delay + return dbackoff.NewFixedBackoff(delay) } -func (b *fixedBackoff) Reset() {} - // NewPolynomialBackoff creates a BackoffFactory with backoff of the form c0*x^0, c1*x^1, ...cn*x^n where x is the attempt number // jitter is the function for adding randomness around the backoff // timeUnits are the units of time the polynomial is evaluated in // polyCoefs is the array of polynomial coefficients from [c0, c1, ... cn] +// Deprecated: use go-libp2p/p2p/discovery/backoff.NewPolynomialBackoff instead. func NewPolynomialBackoff(min, max time.Duration, jitter Jitter, timeUnits time.Duration, polyCoefs []float64, rngSrc rand.Source) BackoffFactory { - rng := rand.New(&lockedSource{src: rngSrc}) - return func() BackoffStrategy { - return &polynomialBackoff{ - attemptBackoff: attemptBackoff{ - randomizedBackoff: randomizedBackoff{ - min: min, - max: max, - rng: rng, - }, - jitter: jitter, - }, - timeUnits: timeUnits, - poly: polyCoefs, - } - } -} - -type polynomialBackoff struct { - attemptBackoff - timeUnits time.Duration - poly []float64 -} - -func (b *polynomialBackoff) Delay() time.Duration { - var polySum float64 - switch len(b.poly) { - case 0: - return 0 - case 1: - polySum = b.poly[0] - default: - polySum = b.poly[0] - exp := 1 - attempt := b.attempt - b.attempt++ - - for _, c := range b.poly[1:] { - exp *= attempt - polySum += float64(exp) * c - } - } - return b.jitter(time.Duration(float64(b.timeUnits)*polySum), b.min, b.max, b.rng) + return dbackoff.NewPolynomialBackoff(min, max, jitter, timeUnits, polyCoefs, rngSrc) } // NewExponentialBackoff creates a BackoffFactory with backoff of the form base^x + offset where x is the attempt number // jitter is the function for adding randomness around the backoff // timeUnits are the units of time the base^x is evaluated in +// Deprecated: use go-libp2p/p2p/discovery/backoff.NewExponentialBackoff instead. func NewExponentialBackoff(min, max time.Duration, jitter Jitter, timeUnits time.Duration, base float64, offset time.Duration, rngSrc rand.Source) BackoffFactory { - rng := rand.New(&lockedSource{src: rngSrc}) - return func() BackoffStrategy { - return &exponentialBackoff{ - attemptBackoff: attemptBackoff{ - randomizedBackoff: randomizedBackoff{ - min: min, - max: max, - rng: rng, - }, - jitter: jitter, - }, - timeUnits: timeUnits, - base: base, - offset: offset, - } - } -} - -type exponentialBackoff struct { - attemptBackoff - timeUnits time.Duration - base float64 - offset time.Duration -} - -func (b *exponentialBackoff) Delay() time.Duration { - attempt := b.attempt - b.attempt++ - return b.jitter( - time.Duration(math.Pow(b.base, float64(attempt))*float64(b.timeUnits))+b.offset, b.min, b.max, b.rng) + return dbackoff.NewExponentialBackoff(min, max, jitter, timeUnits, base, offset, rngSrc) } // NewExponentialDecorrelatedJitter creates a BackoffFactory with backoff of the roughly of the form base^x where x is the attempt number. // Delays start at the minimum duration and after each attempt delay = rand(min, delay * base), bounded by the max // See https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ for more information +// Deprecated: use go-libp2p/p2p/discovery/backoff.NewExponentialDecorrelatedJitter instead. func NewExponentialDecorrelatedJitter(min, max time.Duration, base float64, rngSrc rand.Source) BackoffFactory { - rng := rand.New(&lockedSource{src: rngSrc}) - return func() BackoffStrategy { - return &exponentialDecorrelatedJitter{ - randomizedBackoff: randomizedBackoff{ - min: min, - max: max, - rng: rng, - }, - base: base, - } - } -} - -type exponentialDecorrelatedJitter struct { - randomizedBackoff - base float64 - lastDelay time.Duration -} - -func (b *exponentialDecorrelatedJitter) Delay() time.Duration { - if b.lastDelay < b.min { - b.lastDelay = b.min - return b.lastDelay - } - - nextMax := int64(float64(b.lastDelay) * b.base) - b.lastDelay = boundedDuration(time.Duration(b.rng.Int63n(nextMax-int64(b.min)))+b.min, b.min, b.max) - return b.lastDelay -} - -func (b *exponentialDecorrelatedJitter) Reset() { b.lastDelay = 0 } - -type lockedSource struct { - lk sync.Mutex - src rand.Source -} - -func (r *lockedSource) Int63() (n int64) { - r.lk.Lock() - n = r.src.Int63() - r.lk.Unlock() - return -} - -func (r *lockedSource) Seed(seed int64) { - r.lk.Lock() - r.src.Seed(seed) - r.lk.Unlock() + return dbackoff.NewExponentialDecorrelatedJitter(min, max, base, rngSrc) } diff --git a/vendor/github.com/libp2p/go-libp2p-discovery/backoffcache.go b/vendor/github.com/libp2p/go-libp2p-discovery/backoffcache.go index 1ec71b8598..d459d445e3 100644 --- a/vendor/github.com/libp2p/go-libp2p-discovery/backoffcache.go +++ b/vendor/github.com/libp2p/go-libp2p-discovery/backoffcache.go @@ -1,302 +1,32 @@ package discovery import ( - "context" - "fmt" - "sync" - "time" - "github.com/libp2p/go-libp2p-core/discovery" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-peerstore/addr" + dbackoff "github.com/libp2p/go-libp2p/p2p/discovery/backoff" ) // BackoffDiscovery is an implementation of discovery that caches peer data and attenuates repeated queries -type BackoffDiscovery struct { - disc discovery.Discovery - stratFactory BackoffFactory - peerCache map[string]*backoffCache - peerCacheMux sync.RWMutex - - parallelBufSz int - returnedBufSz int -} +// Deprecated: use go-libp2p/p2p/discovery/backoff.BackoffDiscovery instead. +type BackoffDiscovery = dbackoff.BackoffDiscovery -type BackoffDiscoveryOption func(*BackoffDiscovery) error +// Deprecated: use go-libp2p/p2p/discovery/backoff.BackoffDiscoveryOption instead. +type BackoffDiscoveryOption = dbackoff.BackoffDiscoveryOption +// Deprecated: use go-libp2p/p2p/discovery/backoff.NewBackoffDiscovery instead. func NewBackoffDiscovery(disc discovery.Discovery, stratFactory BackoffFactory, opts ...BackoffDiscoveryOption) (discovery.Discovery, error) { - b := &BackoffDiscovery{ - disc: disc, - stratFactory: stratFactory, - peerCache: make(map[string]*backoffCache), - - parallelBufSz: 32, - returnedBufSz: 32, - } - - for _, opt := range opts { - if err := opt(b); err != nil { - return nil, err - } - } - - return b, nil + return dbackoff.NewBackoffDiscovery(disc, stratFactory, opts...) } // WithBackoffDiscoverySimultaneousQueryBufferSize sets the buffer size for the channels between the main FindPeers query // for a given namespace and all simultaneous FindPeers queries for the namespace +// Deprecated: use go-libp2p/p2p/discovery/backoff.WithBackoffDiscoverySimultaneousQueryBufferSize instead. func WithBackoffDiscoverySimultaneousQueryBufferSize(size int) BackoffDiscoveryOption { - return func(b *BackoffDiscovery) error { - if size < 0 { - return fmt.Errorf("cannot set size to be smaller than 0") - } - b.parallelBufSz = size - return nil - } + return dbackoff.WithBackoffDiscoverySimultaneousQueryBufferSize(size) } // WithBackoffDiscoveryReturnedChannelSize sets the size of the buffer to be used during a FindPeer query. // Note: This does not apply if the query occurs during the backoff time +// Deprecated: use go-libp2p/p2p/discovery/backoff.WithBackoffDiscoveryReturnedChannelSize instead. func WithBackoffDiscoveryReturnedChannelSize(size int) BackoffDiscoveryOption { - return func(b *BackoffDiscovery) error { - if size < 0 { - return fmt.Errorf("cannot set size to be smaller than 0") - } - b.returnedBufSz = size - return nil - } -} - -type backoffCache struct { - // strat is assigned on creation and not written to - strat BackoffStrategy - - mux sync.Mutex // guards writes to all following fields - nextDiscover time.Time - prevPeers map[peer.ID]peer.AddrInfo - peers map[peer.ID]peer.AddrInfo - sendingChs map[chan peer.AddrInfo]int - ongoing bool -} - -func (d *BackoffDiscovery) Advertise(ctx context.Context, ns string, opts ...discovery.Option) (time.Duration, error) { - return d.disc.Advertise(ctx, ns, opts...) -} - -func (d *BackoffDiscovery) FindPeers(ctx context.Context, ns string, opts ...discovery.Option) (<-chan peer.AddrInfo, error) { - // Get options - var options discovery.Options - err := options.Apply(opts...) - if err != nil { - return nil, err - } - - // Get cached peers - d.peerCacheMux.RLock() - c, ok := d.peerCache[ns] - d.peerCacheMux.RUnlock() - - /* - Overall plan: - If it's time to look for peers, look for peers, then return them - If it's not time then return cache - If it's time to look for peers, but we have already started looking. Get up to speed with ongoing request - */ - - // Setup cache if we don't have one yet - if !ok { - pc := &backoffCache{ - nextDiscover: time.Time{}, - prevPeers: make(map[peer.ID]peer.AddrInfo), - peers: make(map[peer.ID]peer.AddrInfo), - sendingChs: make(map[chan peer.AddrInfo]int), - strat: d.stratFactory(), - } - - d.peerCacheMux.Lock() - c, ok = d.peerCache[ns] - - if !ok { - d.peerCache[ns] = pc - c = pc - } - - d.peerCacheMux.Unlock() - } - - c.mux.Lock() - defer c.mux.Unlock() - - timeExpired := time.Now().After(c.nextDiscover) - - // If it's not yet time to search again and no searches are in progress then return cached peers - if !(timeExpired || c.ongoing) { - chLen := options.Limit - - if chLen == 0 { - chLen = len(c.prevPeers) - } else if chLen > len(c.prevPeers) { - chLen = len(c.prevPeers) - } - pch := make(chan peer.AddrInfo, chLen) - for _, ai := range c.prevPeers { - select { - case pch <- ai: - default: - // skip if we have asked for a lower limit than the number of peers known - } - } - close(pch) - return pch, nil - } - - // If a request is not already in progress setup a dispatcher channel for dispatching incoming peers - if !c.ongoing { - pch, err := d.disc.FindPeers(ctx, ns, opts...) - if err != nil { - return nil, err - } - - c.ongoing = true - go findPeerDispatcher(ctx, c, pch) - } - - // Setup receiver channel for receiving peers from ongoing requests - evtCh := make(chan peer.AddrInfo, d.parallelBufSz) - pch := make(chan peer.AddrInfo, d.returnedBufSz) - rcvPeers := make([]peer.AddrInfo, 0, 32) - for _, ai := range c.peers { - rcvPeers = append(rcvPeers, ai) - } - c.sendingChs[evtCh] = options.Limit - - go findPeerReceiver(ctx, pch, evtCh, rcvPeers) - - return pch, nil -} - -func findPeerDispatcher(ctx context.Context, c *backoffCache, pch <-chan peer.AddrInfo) { - defer func() { - c.mux.Lock() - - for ch := range c.sendingChs { - close(ch) - } - - // If the peer addresses have changed reset the backoff - if checkUpdates(c.prevPeers, c.peers) { - c.strat.Reset() - c.prevPeers = c.peers - } - c.nextDiscover = time.Now().Add(c.strat.Delay()) - - c.ongoing = false - c.peers = make(map[peer.ID]peer.AddrInfo) - c.sendingChs = make(map[chan peer.AddrInfo]int) - c.mux.Unlock() - }() - - for { - select { - case ai, ok := <-pch: - if !ok { - return - } - c.mux.Lock() - - // If we receive the same peer multiple times return the address union - var sendAi peer.AddrInfo - if prevAi, ok := c.peers[ai.ID]; ok { - if combinedAi := mergeAddrInfos(prevAi, ai); combinedAi != nil { - sendAi = *combinedAi - } else { - c.mux.Unlock() - continue - } - } else { - sendAi = ai - } - - c.peers[ai.ID] = sendAi - - for ch, rem := range c.sendingChs { - ch <- sendAi - if rem == 1 { - close(ch) - delete(c.sendingChs, ch) - break - } else if rem > 0 { - rem-- - } - } - - c.mux.Unlock() - case <-ctx.Done(): - return - } - } -} - -func findPeerReceiver(ctx context.Context, pch, evtCh chan peer.AddrInfo, rcvPeers []peer.AddrInfo) { - defer close(pch) - - for { - select { - case ai, ok := <-evtCh: - if ok { - rcvPeers = append(rcvPeers, ai) - - sentAll := true - sendPeers: - for i, p := range rcvPeers { - select { - case pch <- p: - default: - rcvPeers = rcvPeers[i:] - sentAll = false - break sendPeers - } - } - if sentAll { - rcvPeers = []peer.AddrInfo{} - } - } else { - for _, p := range rcvPeers { - select { - case pch <- p: - case <-ctx.Done(): - return - } - } - return - } - case <-ctx.Done(): - return - } - } -} - -func mergeAddrInfos(prevAi, newAi peer.AddrInfo) *peer.AddrInfo { - combinedAddrs := addr.UniqueSource(addr.Slice(prevAi.Addrs), addr.Slice(newAi.Addrs)).Addrs() - if len(combinedAddrs) > len(prevAi.Addrs) { - combinedAi := &peer.AddrInfo{ID: prevAi.ID, Addrs: combinedAddrs} - return combinedAi - } - return nil -} - -func checkUpdates(orig, update map[peer.ID]peer.AddrInfo) bool { - if len(orig) != len(update) { - return true - } - for p, ai := range update { - if prevAi, ok := orig[p]; ok { - if combinedAi := mergeAddrInfos(prevAi, ai); combinedAi != nil { - return true - } - } else { - return true - } - } - return false + return dbackoff.WithBackoffDiscoveryReturnedChannelSize(size) } diff --git a/vendor/github.com/libp2p/go-libp2p-discovery/backoffconnector.go b/vendor/github.com/libp2p/go-libp2p-discovery/backoffconnector.go index 6f6c58f637..ebdda9ef49 100644 --- a/vendor/github.com/libp2p/go-libp2p-discovery/backoffconnector.go +++ b/vendor/github.com/libp2p/go-libp2p-discovery/backoffconnector.go @@ -1,95 +1,22 @@ package discovery import ( - "context" - lru "github.com/hashicorp/golang-lru" - "sync" "time" "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/peer" + + dbackoff "github.com/libp2p/go-libp2p/p2p/discovery/backoff" ) // BackoffConnector is a utility to connect to peers, but only if we have not recently tried connecting to them already -type BackoffConnector struct { - cache *lru.TwoQueueCache - host host.Host - connTryDur time.Duration - backoff BackoffFactory - mux sync.Mutex -} +// Deprecated: use go-libp2p/p2p/discovery/backoff.BackoffConnector inste +type BackoffConnector = dbackoff.BackoffConnector // NewBackoffConnector creates a utility to connect to peers, but only if we have not recently tried connecting to them already // cacheSize is the size of a TwoQueueCache // connectionTryDuration is how long we attempt to connect to a peer before giving up // backoff describes the strategy used to decide how long to backoff after previously attempting to connect to a peer +// Deprecated: use go-libp2p/p2p/discovery/backoff.NewBackoffConnector instead. func NewBackoffConnector(h host.Host, cacheSize int, connectionTryDuration time.Duration, backoff BackoffFactory) (*BackoffConnector, error) { - cache, err := lru.New2Q(cacheSize) - if err != nil { - return nil, err - } - - return &BackoffConnector{ - cache: cache, - host: h, - connTryDur: connectionTryDuration, - backoff: backoff, - }, nil -} - -type connCacheData struct { - nextTry time.Time - strat BackoffStrategy -} - -// Connect attempts to connect to the peers passed in by peerCh. Will not connect to peers if they are within the backoff period. -// As Connect will attempt to dial peers as soon as it learns about them, the caller should try to keep the number, -// and rate, of inbound peers manageable. -func (c *BackoffConnector) Connect(ctx context.Context, peerCh <-chan peer.AddrInfo) { - for { - select { - case pi, ok := <-peerCh: - if !ok { - return - } - - if pi.ID == c.host.ID() || pi.ID == "" { - continue - } - - c.mux.Lock() - val, ok := c.cache.Get(pi.ID) - var cachedPeer *connCacheData - if ok { - tv := val.(*connCacheData) - now := time.Now() - if now.Before(tv.nextTry) { - c.mux.Unlock() - continue - } - - tv.nextTry = now.Add(tv.strat.Delay()) - } else { - cachedPeer = &connCacheData{strat: c.backoff()} - cachedPeer.nextTry = time.Now().Add(cachedPeer.strat.Delay()) - c.cache.Add(pi.ID, cachedPeer) - } - c.mux.Unlock() - - go func(pi peer.AddrInfo) { - ctx, cancel := context.WithTimeout(ctx, c.connTryDur) - defer cancel() - - err := c.host.Connect(ctx, pi) - if err != nil { - log.Debugf("Error connecting to pubsub peer %s: %s", pi.ID, err.Error()) - return - } - }(pi) - - case <-ctx.Done(): - log.Infof("discovery: backoff connector context error %v", ctx.Err()) - return - } - } + return dbackoff.NewBackoffConnector(h, cacheSize, connectionTryDuration, backoff) } diff --git a/vendor/github.com/libp2p/go-libp2p-discovery/go.mod b/vendor/github.com/libp2p/go-libp2p-discovery/go.mod deleted file mode 100644 index 37050b385c..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-discovery/go.mod +++ /dev/null @@ -1,15 +0,0 @@ -module github.com/libp2p/go-libp2p-discovery - -require ( - github.com/hashicorp/golang-lru v0.5.4 - github.com/ipfs/go-cid v0.0.7 - github.com/ipfs/go-log v1.0.5 - github.com/libp2p/go-libp2p-blankhost v0.2.0 - github.com/libp2p/go-libp2p-core v0.11.0 - github.com/libp2p/go-libp2p-peerstore v0.4.0 - github.com/libp2p/go-libp2p-swarm v0.8.0 - github.com/multiformats/go-multihash v0.0.15 - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c -) - -go 1.15 diff --git a/vendor/github.com/libp2p/go-libp2p-discovery/go.sum b/vendor/github.com/libp2p/go-libp2p-discovery/go.sum deleted file mode 100644 index b0b1c87a6f..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-discovery/go.sum +++ /dev/null @@ -1,893 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.3.0 h1:31Re/cPqFHpsRHgyVwjWADPoF0otB1WrjTy8ZFYwEZU= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-addr-util v0.1.0 h1:acKsntI33w2bTU7tC9a0SaPimJGfSI0bFKC18ChxeVI= -github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-blankhost v0.2.0 h1:3EsGAi0CBGcZ33GwRuXEYJLLPoVWyXJ1bcJzAJjINkk= -github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.11.0 h1:75jAgdA+IChNa+/mZXogfmrGkgwxkVvxmIC7pV+F6sI= -github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-mplex v0.4.1 h1:/pyhkP1nLwjG3OM+VuaNJkQT/Pqq73WzB3aDN3Fx1sc= -github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-peerstore v0.4.0 h1:DOhRJLnM9Dc9lIXi3rPDZBf789LXy1BrzwIs7Tj0cKA= -github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-quic-transport v0.13.0 h1:MTVojS4AnGD/rng6rF/HXEqwMHL27rHUEf3DaqSdnUw= -github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= -github.com/libp2p/go-libp2p-swarm v0.8.0 h1:nRHNRhi86L7jhka02N4MoV+PSFFPoJFkHNQwCTFxNhw= -github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= -github.com/libp2p/go-libp2p-testing v0.5.0 h1:bTjC29TTQ/ODq0ld3+0KLq3irdA5cAH3OMbRi0/QsvE= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-tls v0.3.0 h1:8BgvUJiOTcj0Gp6XvEicF0rL5aUtRg/UzEdeZDmDlC8= -github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0 h1:7SDl3O2+AYOgfE40Mis83ClpfGNkNA6m4FwhbOHs+iI= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= -github.com/libp2p/go-libp2p-yamux v0.5.0 h1:ZzmUhbQE+X7NuYUT2naxN31JyebZfRmpZVhKtRP13ys= -github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= -github.com/libp2p/go-maddr-filter v0.1.0 h1:4ACqZKw8AqiuJfwFGq1CYDFugfXTOos+qQ3DETkhtCE= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.3.0 h1:U1T+vmCYJaEoDJPV1aq31N56hS+lJgb397GsylNSgrU= -github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.5 h1:Qj8GE/6Cxmw9aQUYTA9BrS+TELTqU7kKKspWBR4ieVw= -github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= -github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.0 h1:Y4s3/jNoryVRKEBrkJ576F17CPOaMIzUeCsg7dlTDj0= -github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-tcp-transport v0.4.0 h1:VDyg4j6en3OuXf90gfDQh5Sy9KowO9udnd0OU8PP6zg= -github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= -github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucas-clemente/quic-go v0.23.0 h1:5vFnKtZ6nHDFsc/F3uuiF4T3y/AXaQdxjUqiVw26GZE= -github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr v0.4.0 h1:hL/K4ZJhJ5PTw3nwylq9lGU5yArzcAroZmex1ghSEkQ= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.2.1 h1:R5exp4cKvGlePuxg/bn4cnV53K4DxCe+uldxs7QzfrE= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0 h1:WCVKW7aL6LEe1uryfI9dnEc2ZqNB1Fn0ok930v0iL1Y= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/libp2p/go-libp2p-discovery/routing.go b/vendor/github.com/libp2p/go-libp2p-discovery/routing.go index a05071da1c..ccfea64040 100644 --- a/vendor/github.com/libp2p/go-libp2p-discovery/routing.go +++ b/vendor/github.com/libp2p/go-libp2p-discovery/routing.go @@ -1,113 +1,27 @@ +// Deprecated: This package has moved into go-libp2p, split into multiple sub-packages: github.com/libp2p/go-libp2p/p2p/discovery. package discovery import ( - "context" "github.com/libp2p/go-libp2p-core/discovery" - "time" + drouting "github.com/libp2p/go-libp2p/p2p/discovery/routing" - "github.com/ipfs/go-cid" - - "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/routing" - - mh "github.com/multiformats/go-multihash" ) // RoutingDiscovery is an implementation of discovery using ContentRouting. // Namespaces are translated to Cids using the SHA256 hash. -type RoutingDiscovery struct { - routing.ContentRouting -} +// Deprecated: use go-libp2p/p2p/discovery/routing.RoutingDiscovery instead. +type RoutingDiscovery = drouting.RoutingDiscovery +// Deprecated: use go-libp2p/p2p/discovery/routing.NewRoutingDiscovery instead. func NewRoutingDiscovery(router routing.ContentRouting) *RoutingDiscovery { - return &RoutingDiscovery{router} -} - -func (d *RoutingDiscovery) Advertise(ctx context.Context, ns string, opts ...discovery.Option) (time.Duration, error) { - var options discovery.Options - err := options.Apply(opts...) - if err != nil { - return 0, err - } - - ttl := options.Ttl - if ttl == 0 || ttl > 3*time.Hour { - // the DHT provider record validity is 24hrs, but it is recommnded to republish at least every 6hrs - // we go one step further and republish every 3hrs - ttl = 3 * time.Hour - } - - cid, err := nsToCid(ns) - if err != nil { - return 0, err - } - - // this context requires a timeout; it determines how long the DHT looks for - // closest peers to the key/CID before it goes on to provide the record to them. - // Not setting a timeout here will make the DHT wander forever. - pctx, cancel := context.WithTimeout(ctx, 60*time.Second) - defer cancel() - - err = d.Provide(pctx, cid, true) - if err != nil { - return 0, err - } - - return ttl, nil -} - -func (d *RoutingDiscovery) FindPeers(ctx context.Context, ns string, opts ...discovery.Option) (<-chan peer.AddrInfo, error) { - var options discovery.Options - err := options.Apply(opts...) - if err != nil { - return nil, err - } - - limit := options.Limit - if limit == 0 { - limit = 100 // that's just arbitrary, but FindProvidersAsync needs a count - } - - cid, err := nsToCid(ns) - if err != nil { - return nil, err - } - - return d.FindProvidersAsync(ctx, cid, limit), nil -} - -func nsToCid(ns string) (cid.Cid, error) { - h, err := mh.Sum([]byte(ns), mh.SHA2_256, -1) - if err != nil { - return cid.Undef, err - } - - return cid.NewCidV1(cid.Raw, h), nil + return drouting.NewRoutingDiscovery(router) } +// Deprecated: use go-libp2p/p2p/discovery/routing.NewDiscoveryRouting instead. func NewDiscoveryRouting(disc discovery.Discovery, opts ...discovery.Option) *DiscoveryRouting { - return &DiscoveryRouting{disc, opts} -} - -type DiscoveryRouting struct { - discovery.Discovery - opts []discovery.Option + return drouting.NewDiscoveryRouting(disc, opts...) } -func (r *DiscoveryRouting) Provide(ctx context.Context, c cid.Cid, bcast bool) error { - if !bcast { - return nil - } - - _, err := r.Advertise(ctx, cidToNs(c), r.opts...) - return err -} - -func (r *DiscoveryRouting) FindProvidersAsync(ctx context.Context, c cid.Cid, limit int) <-chan peer.AddrInfo { - ch, _ := r.FindPeers(ctx, cidToNs(c), append([]discovery.Option{discovery.Limit(limit)}, r.opts...)...) - return ch -} - -func cidToNs(c cid.Cid) string { - return "/provider/" + c.String() -} +// Deprecated: use go-libp2p/p2p/discovery/routing.RoutingDiscovery instead. +type DiscoveryRouting = drouting.DiscoveryRouting diff --git a/vendor/github.com/libp2p/go-libp2p-discovery/util.go b/vendor/github.com/libp2p/go-libp2p-discovery/util.go index 9fd61c5dfe..45849e1c52 100644 --- a/vendor/github.com/libp2p/go-libp2p-discovery/util.go +++ b/vendor/github.com/libp2p/go-libp2p-discovery/util.go @@ -2,57 +2,21 @@ package discovery import ( "context" - "time" "github.com/libp2p/go-libp2p-core/discovery" "github.com/libp2p/go-libp2p-core/peer" - logging "github.com/ipfs/go-log" + dutil "github.com/libp2p/go-libp2p/p2p/discovery/util" ) -var log = logging.Logger("discovery") - // FindPeers is a utility function that synchronously collects peers from a Discoverer. +// Deprecated: use go-libp2p/p2p/discovery/routing.FindPeers instead. func FindPeers(ctx context.Context, d discovery.Discoverer, ns string, opts ...discovery.Option) ([]peer.AddrInfo, error) { - var res []peer.AddrInfo - - ch, err := d.FindPeers(ctx, ns, opts...) - if err != nil { - return nil, err - } - - for pi := range ch { - res = append(res, pi) - } - - return res, nil + return dutil.FindPeers(ctx, d, ns, opts...) } // Advertise is a utility function that persistently advertises a service through an Advertiser. +// Deprecated: use go-libp2p/p2p/discovery/routing.Advertise instead. func Advertise(ctx context.Context, a discovery.Advertiser, ns string, opts ...discovery.Option) { - go func() { - for { - ttl, err := a.Advertise(ctx, ns, opts...) - if err != nil { - log.Debugf("Error advertising %s: %s", ns, err.Error()) - if ctx.Err() != nil { - return - } - - select { - case <-time.After(2 * time.Minute): - continue - case <-ctx.Done(): - return - } - } - - wait := 7 * ttl / 8 - select { - case <-time.After(wait): - case <-ctx.Done(): - return - } - } - }() + dutil.Advertise(ctx, a, ns, opts...) } diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/version.json b/vendor/github.com/libp2p/go-libp2p-discovery/version.json similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-transport-upgrader/version.json rename to vendor/github.com/libp2p/go-libp2p-discovery/version.json diff --git a/vendor/github.com/libp2p/go-libp2p-kbucket/go.mod b/vendor/github.com/libp2p/go-libp2p-kbucket/go.mod deleted file mode 100644 index 6d7819dd33..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-kbucket/go.mod +++ /dev/null @@ -1,16 +0,0 @@ -module github.com/libp2p/go-libp2p-kbucket - -require ( - github.com/ipfs/go-ipfs-util v0.0.2 - github.com/ipfs/go-log v1.0.4 - github.com/libp2p/go-cidranger v1.1.0 - github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052 - github.com/libp2p/go-libp2p-core v0.6.1 - github.com/libp2p/go-libp2p-peerstore v0.2.6 - github.com/minio/sha256-simd v0.1.1 - github.com/multiformats/go-multiaddr v0.3.1 - github.com/multiformats/go-multihash v0.0.14 - github.com/stretchr/testify v1.5.1 -) - -go 1.13 diff --git a/vendor/github.com/libp2p/go-libp2p-kbucket/go.sum b/vendor/github.com/libp2p/go-libp2p-kbucket/go.sum deleted file mode 100644 index 2da0bd5e08..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-kbucket/go.sum +++ /dev/null @@ -1,293 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/badger v1.6.1/go.mod h1:FRmFw3uxvcpa8zG3Rxs0th+hCLIuaQg8HlNV5bjgnuU= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ipfs/go-cid v0.0.5 h1:o0Ix8e/ql7Zb5UVUJEUfjsWCIY8t48++9lR8qi6oiJU= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.4.1/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-datastore v0.4.4/go.mod h1:SX/xMIKoCszPqp+z9JhPYCmoOoXTvaa13XEbGtsFUhA= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.2.3/go.mod h1:pEYw0rgg3FIrywKKnL+Snr+w/LjJZVMTBRn4FS6UHUk= -github.com/ipfs/go-ds-leveldb v0.4.2/go.mod h1:jpbku/YqBSsBc1qgME8BkWS4AxzF2cEu1Ii2r79Hh9s= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= -github.com/ipfs/go-log v0.0.1 h1:9XTUN/rW64BCG1YhPK9Hoy3q8nr4gOmHHBpgFdfw6Lc= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.3 h1:Gg7SUYSZ7BrqaKMwM+hRgcAkKv4QLfzP4XPQt5Sx/OI= -github.com/ipfs/go-log v1.0.3/go.mod h1:OsLySYkwIbiSUR/yBTdv1qPtcE4FW3WPWk/ewz9Ru+A= -github.com/ipfs/go-log v1.0.4 h1:6nLQdX4W8P9yZZFH7mO+X/PzjN8Laozm/lMJ6esdgzY= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log/v2 v2.0.3 h1:Q2gXcBoCALyLN/pUQlz1qgu0x3uFV6FzP9oXhpfyJpc= -github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.5 h1:fL4YI+1g5V/b1Yxr1qAiXTMg1H8z9vx/VmJxBuQMHvU= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/goprocess v0.0.0-20160826012719-b497e2f366b8/go.mod h1:Ly/wlsjFq/qrU3Rar62tu1gASgGw6chQbSh/XgIIXCY= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052 h1:BM7aaOF7RpmNn9+9g6uTjGJ0cTzWr5j9i9IKeun2M8U= -github.com/libp2p/go-libp2p-asn-util v0.0.0-20200825225859-85005c6cf052/go.mod h1:nRMRTab+kZuk0LnKZpxhOVH/ndsdr2Nr//Zltc/vwgo= -github.com/libp2p/go-libp2p-core v0.5.4 h1:Z8Tt3R5or2pkl3Wgywfcc0GCNjf18aYWA30OjBpbmRs= -github.com/libp2p/go-libp2p-core v0.5.4/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.6.1 h1:XS+Goh+QegCDojUZp00CaPMfiEADCrLjNZskWE7pvqs= -github.com/libp2p/go-libp2p-core v0.6.1/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-peerstore v0.2.6 h1:2ACefBX23iMdJU9Ke+dcXt3w86MIryes9v7In4+Qq3U= -github.com/libp2p/go-libp2p-peerstore v0.2.6/go.mod h1:ss/TWTgHZTMpsU/oKVVPQCGuDHItOpf2W8RxAi50P2s= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.4 h1:d27YZvLoTyMhIN4njrkr8zMDOM4lfpHIp6A+TK9fovg= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-colorable v0.1.1 h1:G1f5SKeVxmagw/IyvzvtZE4Gybcc4Tr1tf7I8z0XgOg= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-isatty v0.0.5 h1:tHXDdz1cpzGaovsTB+TVB8q90WEokoVmfMqoVcrLUgw= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2 h1:ZEw4I2EgPKDJ2iEw0cNmLB3ROrEmkOtXIkaG7wZg+78= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.1.1 h1:rVAztJYMhCQ7vEFr8FvxW3mS+HF2eY/oPbOMeS0ZDnE= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.1 h1:SgG/cw5vqyB5QQe5FPe2TqggU9WtrA9X4nZw7LlVqOI= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2 h1:XZLDTszBIJe6m0zF6ITBrEcZR73OPUhCBBS9rYAuUzI= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1 h1:1bxa+W7j9wZKTZREySx1vPMs2TqrYWjVZ7zE6/XLG1I= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.1.4 h1:g6gwydsfADqFvrHoMkS0n9Ok9CG6F7ytOH/bJDkhIOY= -github.com/multiformats/go-multiaddr-net v0.1.4/go.mod h1:ilNnaM9HbmVFqsb/qcNysjCu4PVONlrBZpHIrw/qQuA= -github.com/multiformats/go-multiaddr-net v0.2.0 h1:MSXRGN0mFymt6B1yo/6BPnIRpLPEnKgQNvVfCX5VDJk= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1 h1:PN9/v21eLywrFWdFNsFKaU04kLJzuYzmrJR+ubhT9qA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.8 h1:wrYcW5yxSi3dU07n5jnuS5PrNwyHy0zRHGVoUugWvXg= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13 h1:06x+mk/zj1FoMsgNejLpy6QTvJqlSt/BhLEy87zidlc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5 h1:XVZwSo04Cs3j/jS0uAEPpT3JY6DzMcVLLoWOSnCxOjg= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg4X946/Y5Zwg= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/whyrusleeping/go-keyspace v0.0.0-20160322163242-5b898ac5add1/go.mod h1:8UvriyWtv5Q5EOgjHaSseUEdkQfvwFv1I/In/O2M9gc= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc h1:9lDbC6Rz4bwmou+oE6Dt4Cb2BGMur5eR/GYptkKUVHo= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.6.0 h1:Ezj3JGmsOnG1MoRWQkPBsKLe9DwWD9QeXzTRzzldNVk= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/goleak v1.0.0/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.5.0 h1:KCa4XfM8CWFCpxXRGok+Q0SS/0XBhMDbHHGABQLvD2A= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.14.1 h1:nYDKopTbvAPq/NrUVZwT15y2lpROBiLLyoRTbXOYWOo= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7 h1:C2F/nMkR/9sfUTpvR3QrjBuTdvMUC/cFajkphs1YLQo= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223 h1:DH4skfRX4EBpamg7iV4ZlCpblAHI6s6TDM39bFZumv8= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5 h1:LfCXLvNmTYH9kEmVgqbnsWfruoXZIrh4YBgqVHtDvw0= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd h1:/e+gpKk9r3dJobndpTytxS2gOy6m5uvpg+ISQoEcusQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11 h1:Yq9t9jnGoR+dBuitxdo9l6Q7xh/zOyNnYUtDKaQ3x0E= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/.gitignore b/vendor/github.com/libp2p/go-libp2p-mplex/.gitignore deleted file mode 100644 index 1377554ebe..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.swp diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/LICENSE b/vendor/github.com/libp2p/go-libp2p-mplex/LICENSE deleted file mode 100644 index c7386b3c94..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Juan Batiz-Benet - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/README.md b/vendor/github.com/libp2p/go-libp2p-mplex/README.md deleted file mode 100644 index fc3d7889a0..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# go-libp2p-mplex - a go-stream-muxer shim for multiplex - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) ![](https://raw.githubusercontent.com/libp2p/go-stream-muxer/master/img/badge.png) - -This is an implementation of the [go-stream-muxer](https://github.com/libp2p/go-stream-muxer) interface for [multiplex](https://github.com/libp2p/go-mplex). For more information, see that repo. - -## Installation - -```sh -go get -d github.com/libp2p/go-libp2p-mplex -cd $GOPATH/src/github.com/libp2p/go-libp2p-mplex -make deps -``` diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/conn.go b/vendor/github.com/libp2p/go-libp2p-mplex/conn.go deleted file mode 100644 index c8bcb4788c..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/conn.go +++ /dev/null @@ -1,43 +0,0 @@ -package peerstream_multiplex - -import ( - "context" - - "github.com/libp2p/go-libp2p-core/network" - - mp "github.com/libp2p/go-mplex" -) - -type conn mp.Multiplex - -var _ network.MuxedConn = &conn{} - -func (c *conn) Close() error { - return c.mplex().Close() -} - -func (c *conn) IsClosed() bool { - return c.mplex().IsClosed() -} - -// OpenStream creates a new stream. -func (c *conn) OpenStream(ctx context.Context) (network.MuxedStream, error) { - s, err := c.mplex().NewStream(ctx) - if err != nil { - return nil, err - } - return (*stream)(s), nil -} - -// AcceptStream accepts a stream opened by the other side. -func (c *conn) AcceptStream() (network.MuxedStream, error) { - s, err := c.mplex().Accept() - if err != nil { - return nil, err - } - return (*stream)(s), nil -} - -func (c *conn) mplex() *mp.Multiplex { - return (*mp.Multiplex)(c) -} diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/go.mod b/vendor/github.com/libp2p/go-libp2p-mplex/go.mod deleted file mode 100644 index 1b239be474..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/libp2p/go-libp2p-mplex - -go 1.16 - -require ( - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-testing v0.7.0 - github.com/libp2p/go-mplex v0.4.0 -) diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/go.sum b/vendor/github.com/libp2p/go-libp2p-mplex/go.sum deleted file mode 100644 index 0444337226..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/go.sum +++ /dev/null @@ -1,230 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/stream.go b/vendor/github.com/libp2p/go-libp2p-mplex/stream.go deleted file mode 100644 index 0a841824ff..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/stream.go +++ /dev/null @@ -1,64 +0,0 @@ -package peerstream_multiplex - -import ( - "time" - - "github.com/libp2p/go-libp2p-core/network" - - mp "github.com/libp2p/go-mplex" -) - -// stream implements network.MuxedStream over mplex.Stream. -type stream mp.Stream - -var _ network.MuxedStream = &stream{} - -func (s *stream) Read(b []byte) (n int, err error) { - n, err = s.mplex().Read(b) - if err == mp.ErrStreamReset { - err = network.ErrReset - } - - return n, err -} - -func (s *stream) Write(b []byte) (n int, err error) { - n, err = s.mplex().Write(b) - if err == mp.ErrStreamReset { - err = network.ErrReset - } - - return n, err -} - -func (s *stream) Close() error { - return s.mplex().Close() -} - -func (s *stream) CloseWrite() error { - return s.mplex().CloseWrite() -} - -func (s *stream) CloseRead() error { - return s.mplex().CloseRead() -} - -func (s *stream) Reset() error { - return s.mplex().Reset() -} - -func (s *stream) SetDeadline(t time.Time) error { - return s.mplex().SetDeadline(t) -} - -func (s *stream) SetReadDeadline(t time.Time) error { - return s.mplex().SetReadDeadline(t) -} - -func (s *stream) SetWriteDeadline(t time.Time) error { - return s.mplex().SetWriteDeadline(t) -} - -func (s *stream) mplex() *mp.Stream { - return (*mp.Stream)(s) -} diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/transport.go b/vendor/github.com/libp2p/go-libp2p-mplex/transport.go deleted file mode 100644 index ac08b9b656..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/transport.go +++ /dev/null @@ -1,22 +0,0 @@ -package peerstream_multiplex - -import ( - "net" - - "github.com/libp2p/go-libp2p-core/network" - - mp "github.com/libp2p/go-mplex" -) - -// DefaultTransport has default settings for Transport -var DefaultTransport = &Transport{} - -var _ network.Multiplexer = &Transport{} - -// Transport implements mux.Multiplexer that constructs -// mplex-backed muxed connections. -type Transport struct{} - -func (t *Transport) NewConn(nc net.Conn, isServer bool, scope network.PeerScope) (network.MuxedConn, error) { - return (*conn)(mp.NewMultiplex(nc, isServer, scope)), nil -} diff --git a/vendor/github.com/libp2p/go-libp2p-mplex/version.json b/vendor/github.com/libp2p/go-libp2p-mplex/version.json deleted file mode 100644 index fc15ae013a..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-mplex/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.5.0" -} diff --git a/vendor/github.com/libp2p/go-libp2p-nat/LICENSE b/vendor/github.com/libp2p/go-libp2p-nat/LICENSE deleted file mode 100644 index 26100332ba..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-nat/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Jeromy Johnson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-libp2p-nat/README.md b/vendor/github.com/libp2p/go-libp2p-nat/README.md deleted file mode 100644 index 5d1ac972c8..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-nat/README.md +++ /dev/null @@ -1,46 +0,0 @@ -go-libp2p-nat -================== - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Travis CI](https://travis-ci.org/libp2p/go-libp2p-nat.svg?branch=master)](https://travis-ci.org/libp2p/go-libp2p-nat) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -> NAT port mapping library for go-libp2p. - - -## Table of Contents - -- [Install](#install) -- [Usage](#usage) -- [Contribute](#contribute) -- [License](#license) - -## Install - -```sh -make install -``` - -## Usage - -```sh -# TODO -``` - -## Contribute - -PRs are welcome! Feel free to join in. All welcome. Open an [issue](https://github.com/ipfs/go-libp2p-nat/issues)! - -Check out our [contributing document](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) for more information on how we work, and about contributing in general. Please be aware that all interactions related to libp2p are subject to the IPFS [Code of Conduct](https://github.com/ipfs/community/blob/master/code-of-conduct.md). - -Small note: If editing the Readme, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. - -## License - -[MIT](LICENSE) © Jeromy Johnson - ---- - -The last gx published version of this module was: 0.8.13: QmRbx7DYHgw3uNn2RuU2nv9Bdh96ZdtT65CG1CGPNRQcGZ diff --git a/vendor/github.com/libp2p/go-libp2p-nat/go.mod b/vendor/github.com/libp2p/go-libp2p-nat/go.mod deleted file mode 100644 index 5ca42044b8..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-nat/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/libp2p/go-libp2p-nat - -go 1.16 - -require ( - github.com/ipfs/go-log/v2 v2.0.3 - github.com/libp2p/go-nat v0.1.0 -) diff --git a/vendor/github.com/libp2p/go-libp2p-nat/go.sum b/vendor/github.com/libp2p/go-libp2p-nat/go.sum deleted file mode 100644 index 350185dd07..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-nat/go.sum +++ /dev/null @@ -1,50 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/ipfs/go-log/v2 v2.0.3 h1:Q2gXcBoCALyLN/pUQlz1qgu0x3uFV6FzP9oXhpfyJpc= -github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d h1:68u9r4wEvL3gYg2jvAOgROwZ3H+Y3hIDk4tbbmIjcYQ= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= -github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= -github.com/libp2p/go-netroute v0.1.2 h1:UHhB35chwgvcRI392znJA3RCBtZ3MpE3ahNCN5MR4Xg= -github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-sockaddr v0.0.2 h1:tCuXfpA9rq7llM/v834RKc/Xvovy/AqM9kHvTV/jY/Q= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -go.uber.org/atomic v1.4.0 h1:cxzIVoETapQEqDhQu3QfnvXAV4AlzcvUCxkVUFw3+EU= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/multierr v1.1.0 h1:HoEmRHQPVSqub6w2z2d2EOVs2fjyFRGyofhKuyDq0QI= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/zap v1.10.0 h1:ORx85nbTijNz8ljznvCMR1ZBIPKFn3jQrag10X2AsuM= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67 h1:1Fzlr8kkDLQwqMP8GxrhptBLqZG/EDpiATneiZHY998= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/libp2p/go-libp2p-noise/README.md b/vendor/github.com/libp2p/go-libp2p-noise/README.md deleted file mode 100644 index 7ff4d346ba..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-noise/README.md +++ /dev/null @@ -1,97 +0,0 @@ -# go-libp2p-noise - -[![](https://img.shields.io/badge/made%20by-ETHBerlinZwei-blue.svg?style=flat-square)](https://ethberlinzwei.com) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![GoDoc](https://godoc.org/github.com/libp2p/go-libp2p-noise?status.svg)](https://godoc.org/github.com/libp2p/go-libp2p-noise) -[![Build Status](https://travis-ci.com/libp2p/go-libp2p-noise.svg?branch=master)](https://travis-ci.com/libp2p/go-libp2p-noise) - -> go-libp2p's noise encrypted transport - -`go-libp2p-noise` is a component of the [libp2p project](https://libp2p.io), a -modular networking stack for developing peer-to-peer applications. It provides a -secure transport channel for [`go-libp2p`][go-libp2p] based on the -[Noise Protocol Framework](https://noiseprotocol.org). Following an initial -plaintext handshake, all data exchanged between peers using `go-libp2p-noise` is -encrypted and protected from eavesdropping. - -libp2p supports multiple [transport protocols][docs-transport], many of which -lack native channel security. `go-libp2p-noise` is designed to work with -go-libp2p's ["transport upgrader"][transport-upgrader], which applies security -modules (like `go-libp2p-noise`) to an insecure channel. `go-libp2p-noise` -implements the [`SecureTransport` interface][godoc-securetransport], which -allows the upgrader to secure any underlying connection. - -More detail on the handshake protocol and wire format used is available in the -[noise-libp2p specification][noise-libp2p-spec]. Details about security protocol -negotiation in libp2p can be found in the [connection establishment spec][conn-spec]. - -## Status - -This implementation is currently considered "feature complete," but it has not yet -been widely tested in a production environment. - -## Install - -As `go-libp2p-noise` is still in development, it is not included as a default dependency of `go-libp2p`. - -`go-libp2p-noise` is a standard Go module which can be installed with: - -```sh -go get github.com/libp2p/go-libp2p-noise -``` - -## Usage - -`go-libp2p-noise` is enabled by default when constructing a new libp2p [Host][godoc-host]. - -On a blank host, you can pass `noise.New` as an argument to a `libp2p.Security` `Option` -when constructing a libp2p `Host` with `libp2p.New`: - -```go -import ( - libp2p "github.com/libp2p/go-libp2p" - noise "github.com/libp2p/go-libp2p-noise" -) - -// wherever you create your libp2p instance: -host := libp2p.New( - libp2p.Security(noise.ID, noise.New) -) -``` - -Note that the above snippet will _replace_ the default security protocols. To add Noise -as an additional protocol, chain it to the default options instead: - -```go -libp2p.ChainOptions(libp2p.DefaultSecurity, libp2p.Security(noise.ID, noise.New)) -``` - -## Contribute - -Feel free to join in. All welcome. Open an [issue](https://github.com/libp2p/go-libp2p-noise/issues)! - -This repository falls under the libp2p [Code of Conduct](https://github.com/libp2p/community/blob/master/code-of-conduct.md). - -### Want to hack on libp2p? - -[![](https://cdn.rawgit.com/libp2p/community/master/img/contribute.gif)](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) - -## License - -MIT/Apache-2.0 - ---- - -[go-libp2p]: https://github.com/libp2p/go-libp2p -[noise-libp2p-spec]: https://github.com/libp2p/specs/blob/master/noise/README.md -[conn-spec]: https://github.com/libp2p/specs/blob/master/connections/README.md -[docs-transport]: https://docs.libp2p.io/concepts/transport -[transport-upgrader]: https://github.com/libp2p/go-libp2p-transport-upgrader -[godoc-host]: https://godoc.org/github.com/libp2p/go-libp2p-core/host#Host -[godoc-option]: https://godoc.org/github.com/libp2p/go-libp2p#Option -[godoc-go-libp2p-pkg-vars]: https://godoc.org/github.com/libp2p/go-libp2p#pkg-variables -[godoc-security-option]: https://godoc.org/github.com/libp2p/go-libp2p#Security -[godoc-securetransport]: https://godoc.org/github.com/libp2p/go-libp2p-core/sec#SecureTransport - diff --git a/vendor/github.com/libp2p/go-libp2p-noise/go.mod b/vendor/github.com/libp2p/go-libp2p-noise/go.mod deleted file mode 100644 index 9c83ddab02..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-noise/go.mod +++ /dev/null @@ -1,33 +0,0 @@ -module github.com/libp2p/go-libp2p-noise - -go 1.17 - -require ( - github.com/flynn/noise v1.0.0 - github.com/gogo/protobuf v1.3.2 - github.com/libp2p/go-buffer-pool v0.0.2 - github.com/libp2p/go-libp2p-core v0.10.0 - github.com/stretchr/testify v1.7.0 - golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 -) - -require ( - github.com/btcsuite/btcd v0.21.0-beta // indirect - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/ipfs/go-cid v0.0.7 // indirect - github.com/klauspost/cpuid/v2 v2.0.4 // indirect - github.com/libp2p/go-openssl v0.0.7 // indirect - github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect - github.com/minio/sha256-simd v1.0.0 // indirect - github.com/mr-tron/base58 v1.2.0 // indirect - github.com/multiformats/go-base32 v0.0.3 // indirect - github.com/multiformats/go-base36 v0.1.0 // indirect - github.com/multiformats/go-multiaddr v0.3.3 // indirect - github.com/multiformats/go-multibase v0.0.3 // indirect - github.com/multiformats/go-multihash v0.0.15 // indirect - github.com/multiformats/go-varint v0.0.6 // indirect - github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect - golang.org/x/sys v0.0.0-20210426080607-c94f62235c83 // indirect - gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect -) diff --git a/vendor/github.com/libp2p/go-libp2p-noise/go.sum b/vendor/github.com/libp2p/go-libp2p-noise/go.sum deleted file mode 100644 index 54a11bf031..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-noise/go.sum +++ /dev/null @@ -1,147 +0,0 @@ -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.21.0-beta h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= -github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= -github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.10.0 h1:jFy7v5Muq58GTeYkPhGzIH8Qq4BFfziqc0ixPd/pP9k= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.3 h1:vo2OTSAqnENB2rLk79pLtr+uhj+VAzSe3uef5q0lRSs= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2 h1:It14KIkyBFYkHkwZ7k45minvA9aorojkyjGk9KJ5B/w= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83 h1:kHSDPqCtsHZOg0nVylfTo20DDhE9gG4Y0jn7hKQ0QAM= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/libp2p/go-libp2p-noise/version.json b/vendor/github.com/libp2p/go-libp2p-noise/version.json deleted file mode 100644 index 372b6eab3e..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-noise/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.4.0" -} diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/addr/addrsrcs.go b/vendor/github.com/libp2p/go-libp2p-peerstore/addr/addrsrcs.go deleted file mode 100644 index 9be78d5ccc..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/addr/addrsrcs.go +++ /dev/null @@ -1,70 +0,0 @@ -// Package addr provides utility functions to handle peer addresses. -package addr - -import ( - ma "github.com/multiformats/go-multiaddr" -) - -// AddrSource is a source of addresses. It allows clients to retrieve -// a set of addresses at a last possible moment in time. It is used -// to query a set of addresses that may change over time, as a result -// of the network changing interfaces or mappings. -type Source interface { - Addrs() []ma.Multiaddr -} - -// CombineSources returns a new AddrSource which is the -// concatenation of all input AddrSources: -// -// combined := CombinedSources(a, b) -// combined.Addrs() // append(a.Addrs(), b.Addrs()...) -// -func CombineSources(srcs ...Source) Source { - return combinedAS(srcs) -} - -type combinedAS []Source - -func (cas combinedAS) Addrs() []ma.Multiaddr { - var addrs []ma.Multiaddr - for _, s := range cas { - addrs = append(addrs, s.Addrs()...) - } - return addrs -} - -// UniqueSource returns a new AddrSource which omits duplicate -// addresses from the inputs: -// -// unique := UniqueSource(a, b) -// unique.Addrs() // append(a.Addrs(), b.Addrs()...) -// // but only adds each addr once. -// -func UniqueSource(srcs ...Source) Source { - return uniqueAS(srcs) -} - -type uniqueAS []Source - -func (uas uniqueAS) Addrs() []ma.Multiaddr { - seen := make(map[string]struct{}) - var addrs []ma.Multiaddr - for _, s := range uas { - for _, a := range s.Addrs() { - s := a.String() - if _, found := seen[s]; !found { - addrs = append(addrs, a) - seen[s] = struct{}{} - } - } - } - return addrs -} - -// Slice is a simple slice of addresses that implements -// the AddrSource interface. -type Slice []ma.Multiaddr - -func (as Slice) Addrs() []ma.Multiaddr { - return as -} diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/go.mod b/vendor/github.com/libp2p/go-libp2p-peerstore/go.mod deleted file mode 100644 index da84215d97..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/go.mod +++ /dev/null @@ -1,22 +0,0 @@ -module github.com/libp2p/go-libp2p-peerstore - -go 1.16 - -retract v0.2.9 // Contains backwards-incompatible changes. Use v0.3.0 instead. - -require ( - github.com/gogo/protobuf v1.3.2 - github.com/hashicorp/golang-lru v0.5.4 - github.com/ipfs/go-datastore v0.5.0 - github.com/ipfs/go-ds-badger v0.3.0 - github.com/ipfs/go-ds-leveldb v0.5.0 - github.com/ipfs/go-log/v2 v2.3.0 - github.com/libp2p/go-buffer-pool v0.0.2 - github.com/libp2p/go-libp2p-core v0.12.0 - github.com/multiformats/go-base32 v0.0.3 - github.com/multiformats/go-multiaddr v0.3.3 - github.com/multiformats/go-multiaddr-fmt v0.1.0 - github.com/stretchr/testify v1.7.0 - go.uber.org/goleak v1.1.10 - golang.org/x/tools v0.1.1 // indirect -) diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/go.sum b/vendor/github.com/libp2p/go-libp2p-peerstore/go.sum deleted file mode 100644 index f7f62f9075..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/go.sum +++ /dev/null @@ -1,250 +0,0 @@ -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.2 h1:a5WaUrDa0qm0YrAAS1tUykT5El3kt62KNZZeMxQn3po= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2 h1:tdlZCpZ/P9DhczCTSixgIKmwPv6+wP5DGjqLYw5SUiA= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1 h1:Gkbcsh/GbpXz7lPftLA3P6TYMwjCLYm83jiFQZF/3gY= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.5.0 h1:rQicVCEacWyk4JZ6G5bD9TKR7lZEG1MWcG7UdWYrFAU= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= -github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= -github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.3.0 h1:31Re/cPqFHpsRHgyVwjWADPoF0otB1WrjTy8ZFYwEZU= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.12.0 h1:S9bO2lhSJtOvAKo8QAdW9Zp1FEo0XkfXymqvrW6l/I8= -github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.3 h1:vo2OTSAqnENB2rLk79pLtr+uhj+VAzSe3uef5q0lRSs= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/addr_book.go b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/addr_book.go index e40d006c8c..8055efdee9 100644 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/addr_book.go +++ b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/addr_book.go @@ -7,8 +7,6 @@ import ( "sync" "time" - "github.com/libp2p/go-libp2p-peerstore/addr" - "github.com/libp2p/go-libp2p-core/peer" pstore "github.com/libp2p/go-libp2p-core/peerstore" "github.com/libp2p/go-libp2p-core/record" @@ -51,14 +49,25 @@ func (segments *addrSegments) get(p peer.ID) *addrSegment { return segments[byte(p[len(p)-1])] } +type clock interface { + Now() time.Time +} + +type realclock struct{} + +func (rc realclock) Now() time.Time { + return time.Now() +} + // memoryAddrBook manages addresses. type memoryAddrBook struct { segments addrSegments - ctx context.Context - cancel func() + refCount sync.WaitGroup + cancel func() subManager *AddrSubManager + clock clock } var _ pstore.AddrBook = (*memoryAddrBook)(nil) @@ -77,16 +86,26 @@ func NewAddrBook() *memoryAddrBook { return ret }(), subManager: NewAddrSubManager(), - ctx: ctx, cancel: cancel, + clock: realclock{}, } - - go ab.background() + ab.refCount.Add(1) + go ab.background(ctx) return ab } +type AddrBookOption func(book *memoryAddrBook) error + +func WithClock(clock clock) AddrBookOption { + return func(book *memoryAddrBook) error { + book.clock = clock + return nil + } +} + // background periodically schedules a gc -func (mab *memoryAddrBook) background() { +func (mab *memoryAddrBook) background(ctx context.Context) { + defer mab.refCount.Done() ticker := time.NewTicker(1 * time.Hour) defer ticker.Stop() @@ -94,8 +113,7 @@ func (mab *memoryAddrBook) background() { select { case <-ticker.C: mab.gc() - - case <-mab.ctx.Done(): + case <-ctx.Done(): return } } @@ -103,15 +121,15 @@ func (mab *memoryAddrBook) background() { func (mab *memoryAddrBook) Close() error { mab.cancel() + mab.refCount.Wait() return nil } // gc garbage collects the in-memory address book. func (mab *memoryAddrBook) gc() { - now := time.Now() + now := mab.clock.Now() for _, s := range mab.segments { s.Lock() - var collectedPeers []peer.ID for p, amap := range s.addrs { for k, addr := range amap { if addr.ExpiredBy(now) { @@ -120,13 +138,9 @@ func (mab *memoryAddrBook) gc() { } if len(amap) == 0 { delete(s.addrs, p) - collectedPeers = append(collectedPeers, p) + delete(s.signedPeerRecords, p) } } - // remove signed records for peers whose signed addrs have all been removed - for _, p := range collectedPeers { - delete(s.signedPeerRecords, p) - } s.Unlock() } } @@ -196,11 +210,6 @@ func (mab *memoryAddrBook) ConsumePeerRecord(recordEnvelope *record.Envelope, tt } func (mab *memoryAddrBook) addAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration) { - if err := p.Validate(); err != nil { - log.Warnw("tried to set addrs for invalid peer ID", "peer", p, "error", err) - return - } - s := mab.segments.get(p) s.Lock() defer s.Unlock() @@ -220,24 +229,20 @@ func (mab *memoryAddrBook) addAddrsUnlocked(s *addrSegment, p peer.ID, addrs []m s.addrs[p] = amap } - exp := time.Now().Add(ttl) - addrSet := make(map[string]struct{}, len(addrs)) + exp := mab.clock.Now().Add(ttl) for _, addr := range addrs { if addr == nil { log.Warnw("was passed nil multiaddr", "peer", p) continue } - k := string(addr.Bytes()) - addrSet[k] = struct{}{} // find the highest TTL and Expiry time between // existing records and function args - a, found := amap[k] // won't allocate. - + a, found := amap[string(addr.Bytes())] // won't allocate. if !found { // not found, announce it. entry := &expiringAddr{Addr: addr, Expires: exp, TTL: ttl} - amap[k] = entry + amap[string(addr.Bytes())] = entry mab.subManager.BroadcastAddr(p, addr) } else { // update ttl & exp to whichever is greater between new and existing entry @@ -253,22 +258,12 @@ func (mab *memoryAddrBook) addAddrsUnlocked(s *addrSegment, p peer.ID, addrs []m // SetAddr calls mgr.SetAddrs(p, addr, ttl) func (mab *memoryAddrBook) SetAddr(p peer.ID, addr ma.Multiaddr, ttl time.Duration) { - if err := p.Validate(); err != nil { - log.Warnw("tried to set addrs for invalid peer ID", "peer", p, "error", err) - return - } - mab.SetAddrs(p, []ma.Multiaddr{addr}, ttl) } // SetAddrs sets the ttl on addresses. This clears any TTL there previously. // This is used when we receive the best estimate of the validity of an address. func (mab *memoryAddrBook) SetAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Duration) { - if err := p.Validate(); err != nil { - log.Warnw("tried to set addrs for invalid peer ID", "peer", p, "error", err) - return - } - s := mab.segments.get(p) s.Lock() defer s.Unlock() @@ -279,7 +274,7 @@ func (mab *memoryAddrBook) SetAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Du s.addrs[p] = amap } - exp := time.Now().Add(ttl) + exp := mab.clock.Now().Add(ttl) for _, addr := range addrs { if addr == nil { log.Warnw("was passed nil multiaddr", "peer", p) @@ -301,15 +296,10 @@ func (mab *memoryAddrBook) SetAddrs(p peer.ID, addrs []ma.Multiaddr, ttl time.Du // UpdateAddrs updates the addresses associated with the given peer that have // the given oldTTL to have the given newTTL. func (mab *memoryAddrBook) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTTL time.Duration) { - if err := p.Validate(); err != nil { - log.Warnw("tried to set addrs for invalid peer ID", "peer", p, "error", err) - return - } - s := mab.segments.get(p) s.Lock() defer s.Unlock() - exp := time.Now().Add(newTTL) + exp := mab.clock.Now().Add(newTTL) amap, found := s.addrs[p] if !found { return @@ -330,20 +320,14 @@ func (mab *memoryAddrBook) UpdateAddrs(p peer.ID, oldTTL time.Duration, newTTL t // Addrs returns all known (and valid) addresses for a given peer func (mab *memoryAddrBook) Addrs(p peer.ID) []ma.Multiaddr { - if err := p.Validate(); err != nil { - // invalid peer ID = no addrs - return nil - } - s := mab.segments.get(p) s.RLock() defer s.RUnlock() - return validAddrs(s.addrs[p]) + return validAddrs(mab.clock.Now(), s.addrs[p]) } -func validAddrs(amap map[string]*expiringAddr) []ma.Multiaddr { - now := time.Now() +func validAddrs(now time.Time, amap map[string]*expiringAddr) []ma.Multiaddr { good := make([]ma.Multiaddr, 0, len(amap)) if amap == nil { return good @@ -361,11 +345,6 @@ func validAddrs(amap map[string]*expiringAddr) []ma.Multiaddr { // given peer id, if one exists. // Returns nil if no signed PeerRecord exists for the peer. func (mab *memoryAddrBook) GetPeerRecord(p peer.ID) *record.Envelope { - if err := p.Validate(); err != nil { - // invalid peer ID = no addrs - return nil - } - s := mab.segments.get(p) s.RLock() defer s.RUnlock() @@ -373,7 +352,7 @@ func (mab *memoryAddrBook) GetPeerRecord(p peer.ID) *record.Envelope { // although the signed record gets garbage collected when all addrs inside it are expired, // we may be in between the expiration time and the GC interval // so, we check to see if we have any valid signed addrs before returning the record - if len(validAddrs(s.addrs[p])) == 0 { + if len(validAddrs(mab.clock.Now(), s.addrs[p])) == 0 { return nil } @@ -386,11 +365,6 @@ func (mab *memoryAddrBook) GetPeerRecord(p peer.ID) *record.Envelope { // ClearAddrs removes all previously stored addresses func (mab *memoryAddrBook) ClearAddrs(p peer.ID) { - if err := p.Validate(); err != nil { - // nothing to clear - return - } - s := mab.segments.get(p) s.Lock() defer s.Unlock() @@ -402,13 +376,6 @@ func (mab *memoryAddrBook) ClearAddrs(p peer.ID) { // AddrStream returns a channel on which all new addresses discovered for a // given peer ID will be published. func (mab *memoryAddrBook) AddrStream(ctx context.Context, p peer.ID) <-chan ma.Multiaddr { - if err := p.Validate(); err != nil { - log.Warnw("tried to set addrs for invalid peer ID", "peer", p, "error", err) - ch := make(chan ma.Multiaddr) - close(ch) - return ch - } - s := mab.segments.get(p) s.RLock() defer s.RUnlock() @@ -495,18 +462,17 @@ func (mgr *AddrSubManager) AddrStream(ctx context.Context, p peer.ID, initial [] mgr.subs[p] = append(mgr.subs[p], sub) mgr.mu.Unlock() - sort.Sort(addr.AddrList(initial)) + sort.Sort(addrList(initial)) go func(buffer []ma.Multiaddr) { defer close(out) - sent := make(map[string]bool, len(buffer)) - var outch chan ma.Multiaddr - + sent := make(map[string]struct{}, len(buffer)) for _, a := range buffer { - sent[string(a.Bytes())] = true + sent[string(a.Bytes())] = struct{}{} } + var outch chan ma.Multiaddr var next ma.Multiaddr if len(buffer) > 0 { next = buffer[0] @@ -525,11 +491,11 @@ func (mgr *AddrSubManager) AddrStream(ctx context.Context, p peer.ID, initial [] next = nil } case naddr := <-sub.pubch: - if sent[string(naddr.Bytes())] { + if _, ok := sent[string(naddr.Bytes())]; ok { continue } + sent[string(naddr.Bytes())] = struct{}{} - sent[string(naddr.Bytes())] = true if next == nil { next = naddr outch = out @@ -541,7 +507,6 @@ func (mgr *AddrSubManager) AddrStream(ctx context.Context, p peer.ID, initial [] return } } - }(initial) return out diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/metadata.go b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/metadata.go index a23f3ce137..0fd41c07dd 100644 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/metadata.go +++ b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/metadata.go @@ -22,9 +22,6 @@ func NewPeerMetadata() *memoryPeerMetadata { } func (ps *memoryPeerMetadata) Put(p peer.ID, key string, val interface{}) error { - if err := p.Validate(); err != nil { - return err - } ps.dslock.Lock() defer ps.dslock.Unlock() m, ok := ps.ds[p] @@ -37,9 +34,6 @@ func (ps *memoryPeerMetadata) Put(p peer.ID, key string, val interface{}) error } func (ps *memoryPeerMetadata) Get(p peer.ID, key string) (interface{}, error) { - if err := p.Validate(); err != nil { - return nil, err - } ps.dslock.RLock() defer ps.dslock.RUnlock() m, ok := ps.ds[p] diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/peerstore.go b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/peerstore.go index 2aefcf1803..ce34dc851f 100644 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/peerstore.go +++ b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/peerstore.go @@ -26,12 +26,21 @@ type Option interface{} // NewPeerstore creates an in-memory threadsafe collection of peers. // It's the caller's responsibility to call RemovePeer to ensure // that memory consumption of the peerstore doesn't grow unboundedly. -func NewPeerstore(opts ...Option) (*pstoremem, error) { +func NewPeerstore(opts ...Option) (ps *pstoremem, err error) { + ab := NewAddrBook() + defer func() { + if err != nil { + ab.Close() + } + }() + var protoBookOpts []ProtoBookOption for _, opt := range opts { switch o := opt.(type) { case ProtoBookOption: protoBookOpts = append(protoBookOpts, o) + case AddrBookOption: + o(ab) default: return nil, fmt.Errorf("unexpected peer store option: %v", o) } @@ -43,7 +52,7 @@ func NewPeerstore(opts ...Option) (*pstoremem, error) { return &pstoremem{ Metrics: pstore.NewMetrics(), memoryKeyBook: NewKeyBook(), - memoryAddrBook: NewAddrBook(), + memoryAddrBook: ab, memoryProtoBook: pb, memoryPeerMetadata: NewPeerMetadata(), }, nil diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/protobook.go b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/protobook.go index 3aa9578cd2..b2cf73e1c7 100644 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/protobook.go +++ b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/protobook.go @@ -89,9 +89,6 @@ func (pb *memoryProtoBook) internProtocol(proto string) string { } func (pb *memoryProtoBook) SetProtocols(p peer.ID, protos ...string) error { - if err := p.Validate(); err != nil { - return err - } if len(protos) > pb.maxProtos { return errTooManyProtocols } @@ -110,10 +107,6 @@ func (pb *memoryProtoBook) SetProtocols(p peer.ID, protos ...string) error { } func (pb *memoryProtoBook) AddProtocols(p peer.ID, protos ...string) error { - if err := p.Validate(); err != nil { - return err - } - s := pb.segments.get(p) s.Lock() defer s.Unlock() @@ -134,15 +127,11 @@ func (pb *memoryProtoBook) AddProtocols(p peer.ID, protos ...string) error { } func (pb *memoryProtoBook) GetProtocols(p peer.ID) ([]string, error) { - if err := p.Validate(); err != nil { - return nil, err - } - s := pb.segments.get(p) s.RLock() defer s.RUnlock() - out := make([]string, 0, len(s.protocols)) + out := make([]string, 0, len(s.protocols[p])) for k := range s.protocols[p] { out = append(out, k) } @@ -151,10 +140,6 @@ func (pb *memoryProtoBook) GetProtocols(p peer.ID) ([]string, error) { } func (pb *memoryProtoBook) RemoveProtocols(p peer.ID, protos ...string) error { - if err := p.Validate(); err != nil { - return err - } - s := pb.segments.get(p) s.Lock() defer s.Unlock() @@ -172,10 +157,6 @@ func (pb *memoryProtoBook) RemoveProtocols(p peer.ID, protos ...string) error { } func (pb *memoryProtoBook) SupportsProtocols(p peer.ID, protos ...string) ([]string, error) { - if err := p.Validate(); err != nil { - return nil, err - } - s := pb.segments.get(p) s.RLock() defer s.RUnlock() @@ -191,10 +172,6 @@ func (pb *memoryProtoBook) SupportsProtocols(p peer.ID, protos ...string) ([]str } func (pb *memoryProtoBook) FirstSupportedProtocol(p peer.ID, protos ...string) (string, error) { - if err := p.Validate(); err != nil { - return "", err - } - s := pb.segments.get(p) s.RLock() defer s.RUnlock() diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/addr/sorting.go b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/sorting.go similarity index 76% rename from vendor/github.com/libp2p/go-libp2p-peerstore/addr/sorting.go rename to vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/sorting.go index 61ff4db76a..f36ac41b58 100644 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/addr/sorting.go +++ b/vendor/github.com/libp2p/go-libp2p-peerstore/pstoremem/sorting.go @@ -1,4 +1,4 @@ -package addr +package pstoremem import ( "bytes" @@ -12,27 +12,20 @@ func isFDCostlyTransport(a ma.Multiaddr) bool { return mafmt.TCP.Matches(a) } -type AddrList []ma.Multiaddr +type addrList []ma.Multiaddr -func (al AddrList) Len() int { - return len(al) -} - -func (al AddrList) Swap(i, j int) { - al[i], al[j] = al[j], al[i] -} +func (al addrList) Len() int { return len(al) } +func (al addrList) Swap(i, j int) { al[i], al[j] = al[j], al[i] } -func (al AddrList) Less(i, j int) bool { +func (al addrList) Less(i, j int) bool { a := al[i] b := al[j] // dial localhost addresses next, they should fail immediately lba := manet.IsIPLoopback(a) lbb := manet.IsIPLoopback(b) - if lba { - if !lbb { - return true - } + if lba && !lbb { + return true } // dial utp and similar 'non-fd-consuming' addresses first diff --git a/vendor/github.com/libp2p/go-libp2p-peerstore/version.json b/vendor/github.com/libp2p/go-libp2p-peerstore/version.json index 42c14d1be6..c5e44da41e 100644 --- a/vendor/github.com/libp2p/go-libp2p-peerstore/version.json +++ b/vendor/github.com/libp2p/go-libp2p-peerstore/version.json @@ -1,3 +1,3 @@ { - "version": "v0.6.0" -} + "version": "v0.7.0" +} \ No newline at end of file diff --git a/vendor/github.com/libp2p/go-libp2p-pnet/.travis.yml b/vendor/github.com/libp2p/go-libp2p-pnet/.travis.yml deleted file mode 100644 index a156d3eb5e..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-pnet/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -os: - - linux - -language: go - -go: - - 1.13.x - -env: - global: - - GOTFLAGS="-race" - matrix: - - BUILD_DEPTYPE=gomod - - -# disable travis install -install: - - true - -script: - - bash <(curl -s https://raw.githubusercontent.com/ipfs/ci-helpers/master/travis-ci/run-standard-tests.sh) - - -cache: - directories: - - $GOPATH/pkg/mod - - $HOME/.cache/go-build - -notifications: - email: false diff --git a/vendor/github.com/libp2p/go-libp2p-pnet/LICENSE b/vendor/github.com/libp2p/go-libp2p-pnet/LICENSE deleted file mode 100644 index 4ddb347ce3..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-pnet/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2017 Jakub Sztandera - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-libp2p-pnet/README.md b/vendor/github.com/libp2p/go-libp2p-pnet/README.md deleted file mode 100644 index 77ea2881a4..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-pnet/README.md +++ /dev/null @@ -1,36 +0,0 @@ -go-libp2p-pnet -================== - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Travis CI](https://img.shields.io/travis/libp2p/go-libp2p-pnet.svg?style=flat-square&branch=master)](https://travis-ci.org/libp2p/go-libp2p-pnet) -[![codecov.io](https://img.shields.io/codecov/c/github/libp2p/go-libp2p-pnet.svg?style=flat-square&branch=master)](https://codecov.io/github/libp2p/go-libp2p-pnet?branch=master) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -> An implementation of go-libp2p-interface-pnet - - -## Table of Contents - -- [Usage](#usage) -- [Contribute](#contribute) -- [License](#license) - -## Usage - -See [Godocs](https://godoc.org/github.com/libp2p/go-libp2p-pnet) - -## Contribute - -PRs are welcome! - -Small note: If editing the Readme, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. - -## License - -MIT © Jakub Sztandera - ---- - -The last gx published version of this module was: 3.0.5: QmTwDsJUPioMKoiuXkAmiPxL1i4tjuG5vkxJgNpiHpXb3Y diff --git a/vendor/github.com/libp2p/go-libp2p-pnet/codecov.yml b/vendor/github.com/libp2p/go-libp2p-pnet/codecov.yml deleted file mode 100644 index 5f88a9ea27..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-pnet/codecov.yml +++ /dev/null @@ -1,3 +0,0 @@ -coverage: - range: "50...100" -comment: off diff --git a/vendor/github.com/libp2p/go-libp2p-pnet/go.mod b/vendor/github.com/libp2p/go-libp2p-pnet/go.mod deleted file mode 100644 index 6d034d4a24..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-pnet/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/libp2p/go-libp2p-pnet - -go 1.13 - -require ( - github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 - github.com/libp2p/go-buffer-pool v0.0.2 - github.com/libp2p/go-libp2p-core v0.5.0 -) diff --git a/vendor/github.com/libp2p/go-libp2p-pnet/go.sum b/vendor/github.com/libp2p/go-libp2p-pnet/go.sum deleted file mode 100644 index 3fd0f0b3f1..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-pnet/go.sum +++ /dev/null @@ -1,147 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.5 h1:o0Ix8e/ql7Zb5UVUJEUfjsWCIY8t48++9lR8qi6oiJU= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/goprocess v0.1.3 h1:YKyIEECS/XvcfHtBzxtjBBbWK+MbvA6dG8ASiqwvr10= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.5.0 h1:FBQ1fpq2Fo/ClyjojVJ5AKXlKhvNc/B6U0O+7AN1ffE= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-openssl v0.0.4 h1:d27YZvLoTyMhIN4njrkr8zMDOM4lfpHIp6A+TK9fovg= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329 h1:2gxZ0XQIU/5z3Z3bUBu+FXuk2pFbkN6tcwi/pjyaDic= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-multiaddr v0.2.1 h1:SgG/cw5vqyB5QQe5FPe2TqggU9WtrA9X4nZw7LlVqOI= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multibase v0.0.1 h1:PN9/v21eLywrFWdFNsFKaU04kLJzuYzmrJR+ubhT9qA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multihash v0.0.13 h1:06x+mk/zj1FoMsgNejLpy6QTvJqlSt/BhLEy87zidlc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5 h1:XVZwSo04Cs3j/jS0uAEPpT3JY6DzMcVLLoWOSnCxOjg= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smola/gocompat v0.2.0 h1:6b1oIMlUXIpz//VKEDzPVBK8KG7beVwmHIUEBIs/Pns= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd h1:/e+gpKk9r3dJobndpTytxS2gOy6m5uvpg+ISQoEcusQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/.gitignore b/vendor/github.com/libp2p/go-libp2p-pubsub/.gitignore index 5b98de7852..8707669ab3 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/.gitignore +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/.gitignore @@ -1,3 +1,5 @@ cover.out prof.out go-floodsub.test + +.idea/ diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/README.md b/vendor/github.com/libp2p/go-libp2p-pubsub/README.md index e51b164f67..1ae9125eca 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/README.md +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/README.md @@ -35,7 +35,7 @@ This repo contains the canonical pubsub implementation for libp2p. We currently - [Install](#install) - [Usage](#usage) -- [Implementations](#implementations) +- [Example](#example) - [Documentation](#documentation) - [Tracing](#tracing) - [Contribute](#contribute) diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/backoff.go b/vendor/github.com/libp2p/go-libp2p-pubsub/backoff.go new file mode 100644 index 0000000000..1a1b6ecf58 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/backoff.go @@ -0,0 +1,107 @@ +package pubsub + +import ( + "context" + "fmt" + "math/rand" + "sync" + "time" + + "github.com/libp2p/go-libp2p-core/peer" +) + +const ( + MinBackoffDelay = 100 * time.Millisecond + MaxBackoffDelay = 10 * time.Second + TimeToLive = 10 * time.Minute + BackoffCleanupInterval = 1 * time.Minute + BackoffMultiplier = 2 + MaxBackoffJitterCoff = 100 + MaxBackoffAttempts = 4 +) + +type backoffHistory struct { + duration time.Duration + lastTried time.Time + attempts int +} + +type backoff struct { + mu sync.Mutex + info map[peer.ID]*backoffHistory + ct int // size threshold that kicks off the cleaner + ci time.Duration // cleanup intervals + maxAttempts int // maximum backoff attempts prior to ejection +} + +func newBackoff(ctx context.Context, sizeThreshold int, cleanupInterval time.Duration, maxAttempts int) *backoff { + b := &backoff{ + mu: sync.Mutex{}, + ct: sizeThreshold, + ci: cleanupInterval, + maxAttempts: maxAttempts, + info: make(map[peer.ID]*backoffHistory), + } + + rand.Seed(time.Now().UnixNano()) // used for jitter + go b.cleanupLoop(ctx) + + return b +} + +func (b *backoff) updateAndGet(id peer.ID) (time.Duration, error) { + b.mu.Lock() + defer b.mu.Unlock() + + h, ok := b.info[id] + switch { + case !ok || time.Since(h.lastTried) > TimeToLive: + // first request goes immediately. + h = &backoffHistory{ + duration: time.Duration(0), + attempts: 0, + } + case h.attempts >= b.maxAttempts: + return 0, fmt.Errorf("peer %s has reached its maximum backoff attempts", id) + + case h.duration < MinBackoffDelay: + h.duration = MinBackoffDelay + + case h.duration < MaxBackoffDelay: + jitter := rand.Intn(MaxBackoffJitterCoff) + h.duration = (BackoffMultiplier * h.duration) + time.Duration(jitter)*time.Millisecond + if h.duration > MaxBackoffDelay || h.duration < 0 { + h.duration = MaxBackoffDelay + } + } + + h.attempts += 1 + h.lastTried = time.Now() + b.info[id] = h + return h.duration, nil +} + +func (b *backoff) cleanup() { + b.mu.Lock() + defer b.mu.Unlock() + + for id, h := range b.info { + if time.Since(h.lastTried) > TimeToLive { + delete(b.info, id) + } + } +} + +func (b *backoff) cleanupLoop(ctx context.Context) { + ticker := time.NewTicker(b.ci) + defer ticker.Stop() + + for { + select { + case <-ctx.Done(): + return // pubsub shutting down + case <-ticker.C: + b.cleanup() + } + } +} diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/comm.go b/vendor/github.com/libp2p/go-libp2p-pubsub/comm.go index 5a9d0d8525..a135a60a26 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/comm.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/comm.go @@ -4,6 +4,7 @@ import ( "bufio" "context" "io" + "time" "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" @@ -121,6 +122,15 @@ func (p *PubSub) handleNewPeer(ctx context.Context, pid peer.ID, outgoing <-chan } } +func (p *PubSub) handleNewPeerWithBackoff(ctx context.Context, pid peer.ID, backoff time.Duration, outgoing <-chan *RPC) { + select { + case <-time.After(backoff): + p.handleNewPeer(ctx, pid, outgoing) + case <-ctx.Done(): + return + } +} + func (p *PubSub) handlePeerEOF(ctx context.Context, s network.Stream) { pid := s.Conn().RemotePeer() r := protoio.NewDelimitedReader(s, p.maxMessageSize) diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/go.mod b/vendor/github.com/libp2p/go-libp2p-pubsub/go.mod deleted file mode 100644 index 0558072eed..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/go.mod +++ /dev/null @@ -1,17 +0,0 @@ -module github.com/libp2p/go-libp2p-pubsub - -go 1.13 - -require ( - github.com/benbjohnson/clock v1.0.3 - github.com/gogo/protobuf v1.3.2 - github.com/ipfs/go-log v1.0.5 - github.com/libp2p/go-libp2p-blankhost v0.2.0 - github.com/libp2p/go-libp2p-connmgr v0.2.4 - github.com/libp2p/go-libp2p-core v0.11.0 - github.com/libp2p/go-libp2p-discovery v0.6.0 - github.com/libp2p/go-libp2p-swarm v0.8.0 - github.com/libp2p/go-msgio v0.0.6 - github.com/multiformats/go-multiaddr v0.4.0 - github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee -) diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/go.sum b/vendor/github.com/libp2p/go-libp2p-pubsub/go.sum deleted file mode 100644 index 7d896322be..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/go.sum +++ /dev/null @@ -1,903 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.0.2/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/benbjohnson/clock v1.0.3 h1:vkLuvpK4fmtSCuo60+yC63p7y0BmQ8gm5ZXGuBCJyXg= -github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.3.0 h1:31Re/cPqFHpsRHgyVwjWADPoF0otB1WrjTy8ZFYwEZU= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.11.7 h1:0hzRabrMN4tSTvMfnL3SCv1ZGeAP23ynzodBgaHeMeg= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-addr-util v0.1.0 h1:acKsntI33w2bTU7tC9a0SaPimJGfSI0bFKC18ChxeVI= -github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-blankhost v0.2.0 h1:3EsGAi0CBGcZ33GwRuXEYJLLPoVWyXJ1bcJzAJjINkk= -github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-connmgr v0.2.4 h1:TMS0vc0TCBomtQJyWr7fYxcVYYhx+q/2gF++G5Jkl/w= -github.com/libp2p/go-libp2p-connmgr v0.2.4/go.mod h1:YV0b/RIm8NGPnnNWM7hG9Q38OeQiQfKhHCCs1++ufn0= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.11.0 h1:75jAgdA+IChNa+/mZXogfmrGkgwxkVvxmIC7pV+F6sI= -github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-discovery v0.6.0 h1:1XdPmhMJr8Tmj/yUfkJMIi8mgwWrLUsCB3bMxdT+DSo= -github.com/libp2p/go-libp2p-discovery v0.6.0/go.mod h1:/u1voHt0tKIe5oIA1RHBKQLVCWPna2dXmPNHc2zR9S8= -github.com/libp2p/go-libp2p-mplex v0.4.1 h1:/pyhkP1nLwjG3OM+VuaNJkQT/Pqq73WzB3aDN3Fx1sc= -github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-peerstore v0.4.0 h1:DOhRJLnM9Dc9lIXi3rPDZBf789LXy1BrzwIs7Tj0cKA= -github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-quic-transport v0.13.0 h1:MTVojS4AnGD/rng6rF/HXEqwMHL27rHUEf3DaqSdnUw= -github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= -github.com/libp2p/go-libp2p-swarm v0.8.0 h1:nRHNRhi86L7jhka02N4MoV+PSFFPoJFkHNQwCTFxNhw= -github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= -github.com/libp2p/go-libp2p-testing v0.5.0 h1:bTjC29TTQ/ODq0ld3+0KLq3irdA5cAH3OMbRi0/QsvE= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-tls v0.3.0 h1:8BgvUJiOTcj0Gp6XvEicF0rL5aUtRg/UzEdeZDmDlC8= -github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0 h1:7SDl3O2+AYOgfE40Mis83ClpfGNkNA6m4FwhbOHs+iI= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= -github.com/libp2p/go-libp2p-yamux v0.5.0 h1:ZzmUhbQE+X7NuYUT2naxN31JyebZfRmpZVhKtRP13ys= -github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= -github.com/libp2p/go-maddr-filter v0.1.0 h1:4ACqZKw8AqiuJfwFGq1CYDFugfXTOos+qQ3DETkhtCE= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.3.0 h1:U1T+vmCYJaEoDJPV1aq31N56hS+lJgb397GsylNSgrU= -github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.5 h1:Qj8GE/6Cxmw9aQUYTA9BrS+TELTqU7kKKspWBR4ieVw= -github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= -github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.0 h1:Y4s3/jNoryVRKEBrkJ576F17CPOaMIzUeCsg7dlTDj0= -github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.3.0 h1:TqnSHPJEIqDEO7h1wZZ0p3DXdvDSiLHQidKKUGZtiOY= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-tcp-transport v0.4.0 h1:VDyg4j6en3OuXf90gfDQh5Sy9KowO9udnd0OU8PP6zg= -github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= -github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucas-clemente/quic-go v0.23.0 h1:5vFnKtZ6nHDFsc/F3uuiF4T3y/AXaQdxjUqiVw26GZE= -github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr v0.4.0 h1:hL/K4ZJhJ5PTw3nwylq9lGU5yArzcAroZmex1ghSEkQ= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.2.1 h1:R5exp4cKvGlePuxg/bn4cnV53K4DxCe+uldxs7QzfrE= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0 h1:WCVKW7aL6LEe1uryfI9dnEc2ZqNB1Fn0ok930v0iL1Y= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee h1:lYbXeSvJi5zk5GLKVuid9TVjS9a0OmLIDKTfoZBL6Ow= -github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee/go.mod h1:m2aV4LZI4Aez7dP5PMyVKEHhUyEJ/RjmPEDOpDvudHg= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10 h1:z+mqJhf6ss6BSfSM671tgKyZBFPTTJM+HLxnhPC3wu0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/gossip_tracer.go b/vendor/github.com/libp2p/go-libp2p-pubsub/gossip_tracer.go index 04e77193cc..a40b707ce2 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/gossip_tracer.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/gossip_tracer.go @@ -15,7 +15,7 @@ import ( type gossipTracer struct { sync.Mutex - msgID MsgIdFunction + idGen *msgIDGenerator followUpTime time.Duration @@ -29,7 +29,7 @@ type gossipTracer struct { func newGossipTracer() *gossipTracer { return &gossipTracer{ - msgID: DefaultMsgIdFn, + idGen: newMsgIdGenerator(), promises: make(map[string]map[peer.ID]time.Time), peerPromises: make(map[peer.ID]map[string]struct{}), } @@ -40,7 +40,7 @@ func (gt *gossipTracer) Start(gs *GossipSubRouter) { return } - gt.msgID = gs.p.msgID + gt.idGen = gs.p.idGen gt.followUpTime = gs.params.IWantFollowupTime } @@ -117,7 +117,7 @@ func (gt *gossipTracer) GetBrokenPromises() map[peer.ID]int { var _ RawTracer = (*gossipTracer)(nil) func (gt *gossipTracer) fulfillPromise(msg *Message) { - mid := gt.msgID(msg.Message) + mid := gt.idGen.ID(msg) gt.Lock() defer gt.Unlock() diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/gossipsub.go b/vendor/github.com/libp2p/go-libp2p-pubsub/gossipsub.go index 7c2da306a5..11d9b1c3b5 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/gossipsub.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/gossipsub.go @@ -235,7 +235,7 @@ func DefaultGossipSubParams() GossipSubParams { Dscore: GossipSubDscore, Dout: GossipSubDout, HistoryLength: GossipSubHistoryLength, - HistoryGossip: GossipSubHistoryLength, + HistoryGossip: GossipSubHistoryGossip, Dlazy: GossipSubDlazy, GossipFactor: GossipSubGossipFactor, GossipRetransmission: GossipSubGossipRetransmission, @@ -295,7 +295,7 @@ func WithPeerScore(params *PeerScoreParams, thresholds *PeerScoreThresholds) Opt ps.tracer = &pubsubTracer{ raw: []RawTracer{gs.score, gs.gossipTracer}, pid: ps.host.ID(), - msgID: ps.msgID, + idGen: ps.idGen, } } @@ -484,7 +484,7 @@ func (gs *GossipSubRouter) Attach(p *PubSub) { gs.tagTracer.Start(gs) // start using the same msg ID function as PubSub for caching messages. - gs.mcache.SetMsgIdFn(p.msgID) + gs.mcache.SetMsgIdFn(p.idGen.ID) // start the heartbeat go gs.heartbeatTimer() @@ -705,7 +705,7 @@ func (gs *GossipSubRouter) handleIWant(p peer.ID, ctl *pb.ControlMessage) []*pb. continue } - ihave[mid] = msg + ihave[mid] = msg.Message } } @@ -954,7 +954,7 @@ func (gs *GossipSubRouter) connector() { } func (gs *GossipSubRouter) Publish(msg *Message) { - gs.mcache.Put(msg.Message) + gs.mcache.Put(msg) from := msg.ReceivedFrom topic := msg.GetTopic() @@ -1036,10 +1036,12 @@ func (gs *GossipSubRouter) Join(topic string) { gmap, ok = gs.fanout[topic] if ok { + backoff := gs.backoff[topic] // these peers have a score above the publish threshold, which may be negative // so drop the ones with a negative score for p := range gmap { - if gs.score.Score(p) < 0 { + _, doBackOff := backoff[p] + if gs.score.Score(p) < 0 || doBackOff { delete(gmap, p) } } @@ -1047,10 +1049,12 @@ func (gs *GossipSubRouter) Join(topic string) { if len(gmap) < gs.params.D { // we need more peers; eager, as this would get fixed in the next heartbeat more := gs.getPeers(topic, gs.params.D-len(gmap), func(p peer.ID) bool { - // filter our current peers, direct peers, and peers with negative scores + // filter our current peers, direct peers, peers we are backing off, and + // peers with negative scores _, inMesh := gmap[p] _, direct := gs.direct[p] - return !inMesh && !direct && gs.score.Score(p) >= 0 + _, doBackOff := backoff[p] + return !inMesh && !direct && !doBackOff && gs.score.Score(p) >= 0 }) for _, p := range more { gmap[p] = struct{}{} @@ -1060,10 +1064,12 @@ func (gs *GossipSubRouter) Join(topic string) { delete(gs.fanout, topic) delete(gs.lastpub, topic) } else { + backoff := gs.backoff[topic] peers := gs.getPeers(topic, gs.params.D, func(p peer.ID) bool { - // filter direct peers and peers with negative score + // filter direct peers, peers we are backing off and peers with negative score _, direct := gs.direct[p] - return !direct && gs.score.Score(p) >= 0 + _, doBackOff := backoff[p] + return !direct && !doBackOff && gs.score.Score(p) >= 0 }) gmap = peerListToMap(peers) gs.mesh[topic] = gmap @@ -1091,6 +1097,10 @@ func (gs *GossipSubRouter) Leave(topic string) { log.Debugf("LEAVE: Remove mesh link to %s in %s", p, topic) gs.tracer.Prune(p, topic) gs.sendPrune(p, topic) + // Add a backoff to this peer to prevent us from eagerly + // re-grafting this peer into our mesh if we rejoin this + // topic before the backoff period ends. + gs.addBackoff(p, topic) } } diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/mcache.go b/vendor/github.com/libp2p/go-libp2p-pubsub/mcache.go index e1f02ab321..889948eb2d 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/mcache.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/mcache.go @@ -3,8 +3,6 @@ package pubsub import ( "fmt" - pb "github.com/libp2p/go-libp2p-pubsub/pb" - "github.com/libp2p/go-libp2p-core/peer" ) @@ -27,23 +25,25 @@ func NewMessageCache(gossip, history int) *MessageCache { panic(err) } return &MessageCache{ - msgs: make(map[string]*pb.Message), + msgs: make(map[string]*Message), peertx: make(map[string]map[peer.ID]int), history: make([][]CacheEntry, history), gossip: gossip, - msgID: DefaultMsgIdFn, + msgID: func(msg *Message) string { + return DefaultMsgIdFn(msg.Message) + }, } } type MessageCache struct { - msgs map[string]*pb.Message + msgs map[string]*Message peertx map[string]map[peer.ID]int history [][]CacheEntry gossip int - msgID MsgIdFunction + msgID func(*Message) string } -func (mc *MessageCache) SetMsgIdFn(msgID MsgIdFunction) { +func (mc *MessageCache) SetMsgIdFn(msgID func(*Message) string) { mc.msgID = msgID } @@ -52,18 +52,18 @@ type CacheEntry struct { topic string } -func (mc *MessageCache) Put(msg *pb.Message) { +func (mc *MessageCache) Put(msg *Message) { mid := mc.msgID(msg) mc.msgs[mid] = msg mc.history[0] = append(mc.history[0], CacheEntry{mid: mid, topic: msg.GetTopic()}) } -func (mc *MessageCache) Get(mid string) (*pb.Message, bool) { +func (mc *MessageCache) Get(mid string) (*Message, bool) { m, ok := mc.msgs[mid] return m, ok } -func (mc *MessageCache) GetForPeer(mid string, p peer.ID) (*pb.Message, int, bool) { +func (mc *MessageCache) GetForPeer(mid string, p peer.ID) (*Message, int, bool) { m, ok := mc.msgs[mid] if !ok { return nil, 0, false diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/midgen.go b/vendor/github.com/libp2p/go-libp2p-pubsub/midgen.go new file mode 100644 index 0000000000..9d3acfc174 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/midgen.go @@ -0,0 +1,52 @@ +package pubsub + +import ( + "sync" + + pb "github.com/libp2p/go-libp2p-pubsub/pb" +) + +// msgIDGenerator handles computing IDs for msgs +// It allows setting custom generators(MsgIdFunction) per topic +type msgIDGenerator struct { + Default MsgIdFunction + + topicGensLk sync.RWMutex + topicGens map[string]MsgIdFunction +} + +func newMsgIdGenerator() *msgIDGenerator { + return &msgIDGenerator{ + Default: DefaultMsgIdFn, + topicGens: make(map[string]MsgIdFunction), + } +} + +// Set sets custom id generator(MsgIdFunction) for topic. +func (m *msgIDGenerator) Set(topic string, gen MsgIdFunction) { + m.topicGensLk.Lock() + m.topicGens[topic] = gen + m.topicGensLk.Unlock() +} + +// ID computes ID for the msg or short-circuits with the cached value. +func (m *msgIDGenerator) ID(msg *Message) string { + if msg.ID != "" { + return msg.ID + } + + msg.ID = m.RawID(msg.Message) + return msg.ID +} + +// RawID computes ID for the proto 'msg'. +func (m *msgIDGenerator) RawID(msg *pb.Message) string { + m.topicGensLk.RLock() + gen, ok := m.topicGens[msg.GetTopic()] + m.topicGensLk.RUnlock() + if !ok { + gen = m.Default + } + + return gen(msg) +} diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/peer_gater.go b/vendor/github.com/libp2p/go-libp2p-pubsub/peer_gater.go index e334324c89..3da2755f01 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/peer_gater.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/peer_gater.go @@ -182,7 +182,7 @@ func WithPeerGater(params *PeerGaterParams) Option { ps.tracer = &pubsubTracer{ raw: []RawTracer{gs.gate}, pid: ps.host.ID(), - msgID: ps.msgID, + idGen: ps.idGen, } } diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/pubsub.go b/vendor/github.com/libp2p/go-libp2p-pubsub/pubsub.go index fdfa755b32..98ebb34bf2 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/pubsub.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/pubsub.go @@ -20,13 +20,15 @@ import ( "github.com/libp2p/go-libp2p-core/protocol" logging "github.com/ipfs/go-log" - timecache "github.com/whyrusleeping/timecache" + "github.com/whyrusleeping/timecache" ) // DefaultMaximumMessageSize is 1mb. const DefaultMaxMessageSize = 1 << 20 var ( + // TimeCacheDuration specifies how long a message ID will be remembered as seen. + // Use WithSeenMessagesTTL to configure this per pubsub instance, instead of overriding the global default. TimeCacheDuration = 120 * time.Second // ErrSubscriptionCancelled may be returned when a subscription Next() is called after the @@ -110,6 +112,8 @@ type PubSub struct { peerDeadPrioLk sync.RWMutex peerDeadMx sync.Mutex peerDeadPend map[peer.ID]struct{} + // backoff for retrying new connections to dead peers + deadPeerBackoff *backoff // The set of topics we are subscribed to mySubs map[string]map[*Subscription]struct{} @@ -146,9 +150,10 @@ type PubSub struct { seenMessagesMx sync.Mutex seenMessages *timecache.TimeCache + seenMsgTTL time.Duration - // function used to compute the ID for a message - msgID MsgIdFunction + // generator used to compute the ID for a message + idGen *msgIDGenerator // key for signing messages; nil when signing is disabled signKey crypto.PrivKey @@ -213,6 +218,7 @@ const ( type Message struct { *pb.Message + ID string ReceivedFrom peer.ID ValidatorData interface{} } @@ -251,6 +257,7 @@ func NewPubSub(ctx context.Context, h host.Host, rt PubSubRouter, opts ...Option newPeerError: make(chan peer.ID), peerDead: make(chan struct{}, 1), peerDeadPend: make(map[peer.ID]struct{}), + deadPeerBackoff: newBackoff(ctx, 1000, BackoffCleanupInterval, MaxBackoffAttempts), cancelCh: make(chan *Subscription), getPeers: make(chan *listPeerReq), addSub: make(chan *addSubReq), @@ -271,8 +278,8 @@ func NewPubSub(ctx context.Context, h host.Host, rt PubSubRouter, opts ...Option inboundStreams: make(map[peer.ID]network.Stream), blacklist: NewMapBlacklist(), blacklistPeer: make(chan peer.ID), - seenMessages: timecache.NewTimeCache(TimeCacheDuration), - msgID: DefaultMsgIdFn, + seenMsgTTL: TimeCacheDuration, + idGen: newMsgIdGenerator(), counter: uint64(time.Now().UnixNano()), } @@ -293,6 +300,8 @@ func NewPubSub(ctx context.Context, h host.Host, rt PubSubRouter, opts ...Option } } + ps.seenMessages = timecache.NewTimeCache(ps.seenMsgTTL) + if err := ps.disc.Start(ps); err != nil { return nil, err } @@ -326,11 +335,7 @@ type MsgIdFunction func(pmsg *pb.Message) string // but it can be customized to e.g. the hash of the message. func WithMessageIdFn(fn MsgIdFunction) Option { return func(p *PubSub) error { - p.msgID = fn - // the tracer Option may already be set. Update its message ID function to make options order-independent. - if p.tracer != nil { - p.tracer.msgID = fn - } + p.idGen.Default = fn return nil } } @@ -455,7 +460,7 @@ func WithEventTracer(tracer EventTracer) Option { if p.tracer != nil { p.tracer.tracer = tracer } else { - p.tracer = &pubsubTracer{tracer: tracer, pid: p.host.ID(), msgID: p.msgID} + p.tracer = &pubsubTracer{tracer: tracer, pid: p.host.ID(), idGen: p.idGen} } return nil } @@ -468,7 +473,7 @@ func WithRawTracer(tracer RawTracer) Option { if p.tracer != nil { p.tracer.raw = append(p.tracer.raw, tracer) } else { - p.tracer = &pubsubTracer{raw: []RawTracer{tracer}, pid: p.host.ID(), msgID: p.msgID} + p.tracer = &pubsubTracer{raw: []RawTracer{tracer}, pid: p.host.ID(), idGen: p.idGen} } return nil } @@ -513,6 +518,14 @@ func WithProtocolMatchFn(m ProtocolMatchFn) Option { } } +// WithSeenMessagesTTL configures when a previously seen message ID can be forgotten about +func WithSeenMessagesTTL(ttl time.Duration) Option { + return func(ps *PubSub) error { + ps.seenMsgTTL = ttl + return nil + } +} + // processLoop handles all inputs arriving on the channels func (p *PubSub) processLoop(ctx context.Context) { defer func() { @@ -684,12 +697,18 @@ func (p *PubSub) handleDeadPeers() { close(ch) if p.host.Network().Connectedness(pid) == network.Connected { + backoffDelay, err := p.deadPeerBackoff.updateAndGet(pid) + if err != nil { + log.Debug(err) + continue + } + // still connected, must be a duplicate connection being closed. // we respawn the writer as we need to ensure there is a stream active log.Debugf("peer declared dead but still connected; respawning writer: %s", pid) messages := make(chan *RPC, p.peerOutboundQueueSize) messages <- p.getHelloPacket() - go p.handleNewPeer(p.ctx, pid, messages) + go p.handleNewPeerWithBackoff(p.ctx, pid, backoffDelay, messages) p.peers[pid] = messages continue } @@ -1047,8 +1066,7 @@ func (p *PubSub) handleIncomingRPC(rpc *RPC) { continue } - msg := &Message{pmsg, rpc.from, nil} - p.pushMsg(msg) + p.pushMsg(&Message{pmsg, "", rpc.from, nil}) } } @@ -1097,7 +1115,7 @@ func (p *PubSub) pushMsg(msg *Message) { } // have we already seen and validated this message? - id := p.msgID(msg.Message) + id := p.idGen.ID(msg) if p.seenMessage(id) { p.tracer.DuplicateMessage(msg) return @@ -1164,6 +1182,14 @@ type TopicOptions struct{} type TopicOpt func(t *Topic) error +// WithTopicMessageIdFn sets custom MsgIdFunction for a Topic, enabling topics to have own msg id generation rules. +func WithTopicMessageIdFn(msgId MsgIdFunction) TopicOpt { + return func(t *Topic) error { + t.p.idGen.Set(t.topic, msgId) + return nil + } +} + // Join joins the topic and returns a Topic handle. Only one Topic handle should exist per topic, and Join will error if // the Topic handle already exists. func (p *PubSub) Join(topic string, opts ...TopicOpt) (*Topic, error) { diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/score.go b/vendor/github.com/libp2p/go-libp2p-pubsub/score.go index 1ee61418b5..b762b2b0d4 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/score.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/score.go @@ -76,7 +76,7 @@ type peerScore struct { // message delivery tracking deliveries *messageDeliveries - msgID MsgIdFunction + idGen *msgIDGenerator host host.Host // debugging inspection @@ -88,6 +88,8 @@ type peerScore struct { var _ RawTracer = (*peerScore)(nil) type messageDeliveries struct { + seenMsgTTL time.Duration + records map[string]*deliveryRecord // queue for cleaning up old delivery records @@ -178,12 +180,16 @@ func WithPeerScoreInspect(inspect interface{}, period time.Duration) Option { // implementation func newPeerScore(params *PeerScoreParams) *peerScore { + seenMsgTTL := params.SeenMsgTTL + if seenMsgTTL == 0 { + seenMsgTTL = TimeCacheDuration + } return &peerScore{ params: params, peerStats: make(map[peer.ID]*peerStats), peerIPs: make(map[string]map[peer.ID]struct{}), - deliveries: &messageDeliveries{records: make(map[string]*deliveryRecord)}, - msgID: DefaultMsgIdFn, + deliveries: &messageDeliveries{seenMsgTTL: seenMsgTTL, records: make(map[string]*deliveryRecord)}, + idGen: newMsgIdGenerator(), } } @@ -239,7 +245,7 @@ func (ps *peerScore) Start(gs *GossipSubRouter) { return } - ps.msgID = gs.p.msgID + ps.idGen = gs.p.idGen ps.host = gs.p.host go ps.background(gs.p.ctx) } @@ -689,7 +695,7 @@ func (ps *peerScore) ValidateMessage(msg *Message) { // the pubsub subsystem is beginning validation; create a record to track time in // the validation pipeline with an accurate firstSeen time. - _ = ps.deliveries.getRecord(ps.msgID(msg.Message)) + _ = ps.deliveries.getRecord(ps.idGen.ID(msg)) } func (ps *peerScore) DeliverMessage(msg *Message) { @@ -698,7 +704,7 @@ func (ps *peerScore) DeliverMessage(msg *Message) { ps.markFirstMessageDelivery(msg.ReceivedFrom, msg) - drec := ps.deliveries.getRecord(ps.msgID(msg.Message)) + drec := ps.deliveries.getRecord(ps.idGen.ID(msg)) // defensive check that this is the first delivery trace -- delivery status should be unknown if drec.status != deliveryUnknown { @@ -749,7 +755,7 @@ func (ps *peerScore) RejectMessage(msg *Message, reason string) { return } - drec := ps.deliveries.getRecord(ps.msgID(msg.Message)) + drec := ps.deliveries.getRecord(ps.idGen.ID(msg)) // defensive check that this is the first rejection trace -- delivery status should be unknown if drec.status != deliveryUnknown { @@ -789,7 +795,7 @@ func (ps *peerScore) DuplicateMessage(msg *Message) { ps.Lock() defer ps.Unlock() - drec := ps.deliveries.getRecord(ps.msgID(msg.Message)) + drec := ps.deliveries.getRecord(ps.idGen.ID(msg)) _, ok := drec.peers[msg.ReceivedFrom] if ok { @@ -841,7 +847,7 @@ func (d *messageDeliveries) getRecord(id string) *deliveryRecord { rec = &deliveryRecord{peers: make(map[peer.ID]struct{}), firstSeen: now} d.records[id] = rec - entry := &deliveryEntry{id: id, expire: now.Add(TimeCacheDuration)} + entry := &deliveryEntry{id: id, expire: now.Add(d.seenMsgTTL)} if d.tail != nil { d.tail.next = entry d.tail = entry diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/score_params.go b/vendor/github.com/libp2p/go-libp2p-pubsub/score_params.go index 8a4d2098f9..f9b7e29b2f 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/score_params.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/score_params.go @@ -93,6 +93,9 @@ type PeerScoreParams struct { // time to remember counters for a disconnected peer. RetainScore time.Duration + + // time to remember a message delivery for. Default to global TimeCacheDuration if 0. + SeenMsgTTL time.Duration } type TopicScoreParams struct { diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/tag_tracer.go b/vendor/github.com/libp2p/go-libp2p-pubsub/tag_tracer.go index 65e99be9c6..333edf8424 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/tag_tracer.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/tag_tracer.go @@ -45,7 +45,7 @@ type tagTracer struct { sync.RWMutex cmgr connmgr.ConnManager - msgID MsgIdFunction + idGen *msgIDGenerator decayer connmgr.Decayer decaying map[string]connmgr.DecayingTag direct map[peer.ID]struct{} @@ -62,7 +62,7 @@ func newTagTracer(cmgr connmgr.ConnManager) *tagTracer { } return &tagTracer{ cmgr: cmgr, - msgID: DefaultMsgIdFn, + idGen: newMsgIdGenerator(), decayer: decayer, decaying: make(map[string]connmgr.DecayingTag), nearFirst: make(map[string]map[peer.ID]struct{}), @@ -74,7 +74,7 @@ func (t *tagTracer) Start(gs *GossipSubRouter) { return } - t.msgID = gs.p.msgID + t.idGen = gs.p.idGen t.direct = gs.direct } @@ -162,7 +162,7 @@ func (t *tagTracer) bumpTagsForMessage(p peer.ID, msg *Message) { func (t *tagTracer) nearFirstPeers(msg *Message) []peer.ID { t.Lock() defer t.Unlock() - peersMap, ok := t.nearFirst[t.msgID(msg.Message)] + peersMap, ok := t.nearFirst[t.idGen.ID(msg)] if !ok { return nil } @@ -194,7 +194,7 @@ func (t *tagTracer) DeliverMessage(msg *Message) { // delete the delivery state for this message t.Lock() - delete(t.nearFirst, t.msgID(msg.Message)) + delete(t.nearFirst, t.idGen.ID(msg)) t.Unlock() } @@ -215,7 +215,7 @@ func (t *tagTracer) ValidateMessage(msg *Message) { defer t.Unlock() // create map to start tracking the peers who deliver while we're validating - id := t.msgID(msg.Message) + id := t.idGen.ID(msg) if _, exists := t.nearFirst[id]; exists { return } @@ -226,7 +226,7 @@ func (t *tagTracer) DuplicateMessage(msg *Message) { t.Lock() defer t.Unlock() - id := t.msgID(msg.Message) + id := t.idGen.ID(msg) peers, ok := t.nearFirst[id] if !ok { return @@ -247,7 +247,7 @@ func (t *tagTracer) RejectMessage(msg *Message, reason string) { case RejectValidationIgnored: fallthrough case RejectValidationFailed: - delete(t.nearFirst, t.msgID(msg.Message)) + delete(t.nearFirst, t.idGen.ID(msg)) } } diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/topic.go b/vendor/github.com/libp2p/go-libp2p-pubsub/topic.go index 8de88c3c9f..901138bf09 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/topic.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/topic.go @@ -7,6 +7,7 @@ import ( "sync" "time" + "github.com/libp2p/go-libp2p-core/crypto" pb "github.com/libp2p/go-libp2p-pubsub/pb" "github.com/libp2p/go-libp2p-core/peer" @@ -15,6 +16,12 @@ import ( // ErrTopicClosed is returned if a Topic is utilized after it has been closed var ErrTopicClosed = errors.New("this Topic is closed, try opening a new one") +// ErrNilSignKey is returned if a nil private key was provided +var ErrNilSignKey = errors.New("nil sign key") + +// ErrEmptyPeerID is returned if an empty peer ID was provided +var ErrEmptyPeerID = errors.New("empty peer ID") + // Topic is the handle for a pubsub topic type Topic struct { p *PubSub @@ -202,8 +209,12 @@ func (t *Topic) Relay() (RelayCancelFunc, error) { // RouterReady is a function that decides if a router is ready to publish type RouterReady func(rt PubSubRouter, topic string) (bool, error) +// ProvideKey is a function that provides a private key and its associated peer ID when publishing a new message +type ProvideKey func() (crypto.PrivKey, peer.ID) + type PublishOptions struct { - ready RouterReady + ready RouterReady + customKey ProvideKey } type PubOpt func(pub *PublishOptions) error @@ -216,27 +227,40 @@ func (t *Topic) Publish(ctx context.Context, data []byte, opts ...PubOpt) error return ErrTopicClosed } + pid := t.p.signID + key := t.p.signKey + + pub := &PublishOptions{} + for _, opt := range opts { + err := opt(pub) + if err != nil { + return err + } + } + + if pub.customKey != nil { + key, pid = pub.customKey() + if key == nil { + return ErrNilSignKey + } + if len(pid) == 0 { + return ErrEmptyPeerID + } + } + m := &pb.Message{ Data: data, Topic: &t.topic, From: nil, Seqno: nil, } - if t.p.signID != "" { - m.From = []byte(t.p.signID) + if pid != "" { + m.From = []byte(pid) m.Seqno = t.p.nextSeqno() } - if t.p.signKey != nil { - m.From = []byte(t.p.signID) - err := signMessage(t.p.signID, t.p.signKey, m) - if err != nil { - return err - } - } - - pub := &PublishOptions{} - for _, opt := range opts { - err := opt(pub) + if key != nil { + m.From = []byte(pid) + err := signMessage(pid, key, m) if err != nil { return err } @@ -283,7 +307,7 @@ func (t *Topic) Publish(ctx context.Context, data []byte, opts ...PubOpt) error } } - return t.p.val.PushLocal(&Message{m, t.p.host.ID(), nil}) + return t.p.val.PushLocal(&Message{m, "", t.p.host.ID(), nil}) } // WithReadiness returns a publishing option for only publishing when the router is ready. @@ -295,6 +319,18 @@ func WithReadiness(ready RouterReady) PubOpt { } } +// WithSecretKeyAndPeerId returns a publishing option for providing a custom private key and its corresponding peer ID +// This option is useful when we want to send messages from "virtual", never-connectable peers in the network +func WithSecretKeyAndPeerId(key crypto.PrivKey, pid peer.ID) PubOpt { + return func(pub *PublishOptions) error { + pub.customKey = func() (crypto.PrivKey, peer.ID) { + return key, pid + } + + return nil + } +} + // Close closes down the topic. Will return an error unless there are no active event handlers or subscriptions. // Does not error if the topic is already closed. func (t *Topic) Close() error { diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/trace.go b/vendor/github.com/libp2p/go-libp2p-pubsub/trace.go index 323254226d..1426e318aa 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/trace.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/trace.go @@ -64,7 +64,7 @@ type pubsubTracer struct { tracer EventTracer raw []RawTracer pid peer.ID - msgID MsgIdFunction + idGen *msgIDGenerator } func (t *pubsubTracer) PublishMessage(msg *Message) { @@ -82,7 +82,7 @@ func (t *pubsubTracer) PublishMessage(msg *Message) { PeerID: []byte(t.pid), Timestamp: &now, PublishMessage: &pb.TraceEvent_PublishMessage{ - MessageID: []byte(t.msgID(msg.Message)), + MessageID: []byte(t.idGen.ID(msg)), Topic: msg.Message.Topic, }, } @@ -123,7 +123,7 @@ func (t *pubsubTracer) RejectMessage(msg *Message, reason string) { PeerID: []byte(t.pid), Timestamp: &now, RejectMessage: &pb.TraceEvent_RejectMessage{ - MessageID: []byte(t.msgID(msg.Message)), + MessageID: []byte(t.idGen.ID(msg)), ReceivedFrom: []byte(msg.ReceivedFrom), Reason: &reason, Topic: msg.Topic, @@ -154,7 +154,7 @@ func (t *pubsubTracer) DuplicateMessage(msg *Message) { PeerID: []byte(t.pid), Timestamp: &now, DuplicateMessage: &pb.TraceEvent_DuplicateMessage{ - MessageID: []byte(t.msgID(msg.Message)), + MessageID: []byte(t.idGen.ID(msg)), ReceivedFrom: []byte(msg.ReceivedFrom), Topic: msg.Topic, }, @@ -184,7 +184,7 @@ func (t *pubsubTracer) DeliverMessage(msg *Message) { PeerID: []byte(t.pid), Timestamp: &now, DeliverMessage: &pb.TraceEvent_DeliverMessage{ - MessageID: []byte(t.msgID(msg.Message)), + MessageID: []byte(t.idGen.ID(msg)), Topic: msg.Topic, ReceivedFrom: []byte(msg.ReceivedFrom), }, @@ -344,7 +344,7 @@ func (t *pubsubTracer) traceRPCMeta(rpc *RPC) *pb.TraceEvent_RPCMeta { var msgs []*pb.TraceEvent_MessageMeta for _, m := range rpc.Publish { msgs = append(msgs, &pb.TraceEvent_MessageMeta{ - MessageID: []byte(t.msgID(m)), + MessageID: []byte(t.idGen.RawID(m)), Topic: m.Topic, }) } diff --git a/vendor/github.com/libp2p/go-libp2p-pubsub/validation.go b/vendor/github.com/libp2p/go-libp2p-pubsub/validation.go index 35d291a153..9fa28d26cd 100644 --- a/vendor/github.com/libp2p/go-libp2p-pubsub/validation.go +++ b/vendor/github.com/libp2p/go-libp2p-pubsub/validation.go @@ -284,7 +284,7 @@ func (v *validation) validate(vals []*topicVal, src peer.ID, msg *Message, synch // we can mark the message as seen now that we have verified the signature // and avoid invoking user validators more than once - id := v.p.msgID(msg.Message) + id := v.p.idGen.ID(msg) if !v.p.markSeen(id) { v.tracer.DuplicateMessage(msg) return nil diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/.gitignore b/vendor/github.com/libp2p/go-libp2p-quic-transport/.gitignore deleted file mode 100644 index c63c2f6f05..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -*.qlog -*.qlog.gz -*.qlog.zst diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/LICENSE b/vendor/github.com/libp2p/go-libp2p-quic-transport/LICENSE deleted file mode 100644 index f66e9485ac..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2019 Marten Seemann - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/README.md b/vendor/github.com/libp2p/go-libp2p-quic-transport/README.md deleted file mode 100644 index 7e1fd48a41..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/README.md +++ /dev/null @@ -1,35 +0,0 @@ -# go-libp2p-quic-transport - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Godoc Reference](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](https://godoc.org/github.com/libp2p/go-libp2p-quic-transport) -[![Linux Build Status](https://img.shields.io/travis/libp2p/go-libp2p-quic-transport/master.svg?style=flat-square&label=linux+build)](https://travis-ci.org/libp2p/go-libp2p-quic-transport) -[![Code Coverage](https://img.shields.io/codecov/c/github/libp2p/go-libp2p-quic-transport/master.svg?style=flat-square)](https://codecov.io/gh/libp2p/go-libp2p-quic-transport/) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -go-libp2p-quic-transport uses [quic-go](https://github.com/lucas-clemente/quic-go/) to provide QUIC support for libp2p. - -## Install - -`go-libp2p-quic-transport` is a standard Go module which can be installed with: - -```sh -go get github.com/libp2p/go-libp2p-quic-transport -``` - -This repo is [gomod](https://github.com/golang/go/wiki/Modules)-compatible, and users of -Go 1.11 and later with modules enabled will automatically pull the latest tagged release -by referencing this package. Upgrades to future releases can be managed using `go get`, -or by editing your `go.mod` file as [described by the gomod documentation](https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies). - -## Contribute - -Feel free to join in. All welcome. Open an [issue](https://github.com/libp2p/go-libp2p-quic-transport/issues)! - -This repository falls under the libp2p [Code of Conduct](https://github.com/libp2p/community/blob/master/code-of-conduct.md). - -### Want to hack on libp2p? - -[![](https://cdn.rawgit.com/libp2p/community/master/img/contribute.gif)](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) - diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/go.mod b/vendor/github.com/libp2p/go-libp2p-quic-transport/go.mod deleted file mode 100644 index 5d48ed9392..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/go.mod +++ /dev/null @@ -1,22 +0,0 @@ -module github.com/libp2p/go-libp2p-quic-transport - -go 1.16 - -require ( - github.com/golang/mock v1.6.0 - github.com/google/gopacket v1.1.19 - github.com/ipfs/go-log/v2 v2.5.0 - github.com/klauspost/compress v1.13.6 - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-testing v0.7.0 - github.com/libp2p/go-libp2p-tls v0.3.0 - github.com/libp2p/go-netroute v0.2.0 - github.com/lucas-clemente/quic-go v0.25.0 - github.com/minio/sha256-simd v0.1.1 - github.com/multiformats/go-multiaddr v0.4.1 - github.com/multiformats/go-multiaddr-fmt v0.1.0 - github.com/prometheus/client_golang v1.9.0 - github.com/stretchr/testify v1.7.0 - golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c -) diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/go.sum b/vendor/github.com/libp2p/go-libp2p-quic-transport/go.sum deleted file mode 100644 index 62ae198722..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/go.sum +++ /dev/null @@ -1,696 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-libp2p-tls v0.3.0 h1:8BgvUJiOTcj0Gp6XvEicF0rL5aUtRg/UzEdeZDmDlC8= -github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-netroute v0.2.0/go.mod h1:Vio7LTzZ+6hoT4CMZi5/6CpY3Snzh2vgZhWgxMNwlQI= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucas-clemente/quic-go v0.25.0 h1:K+X9Gvd7JXsOHtU0N2icZ2Nw3rx82uBej3mP4CLgibc= -github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 h1:EnzzN9fPUkUck/1CuY1FlzBaIYMoiBsdwTNmNGkwUUM= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.9.0 h1:Rrch9mh17XcxvEu9D9DEpb4isxjGBtcevQjKvxPRQIU= -github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0 h1:4fgOnadei3EZvgRwxJ7RMpG1k1pOZth5Pc13tyspaKM= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/version.json b/vendor/github.com/libp2p/go-libp2p-quic-transport/version.json deleted file mode 100644 index e0943d02a5..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.16.0" -} diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/go.mod b/vendor/github.com/libp2p/go-libp2p-resource-manager/go.mod deleted file mode 100644 index ca87239406..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-resource-manager/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/libp2p/go-libp2p-resource-manager - -go 1.16 - -require ( - github.com/ipfs/go-log/v2 v2.5.0 - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/go.sum b/vendor/github.com/libp2p/go-libp2p-resource-manager/go.sum deleted file mode 100644 index b78292dd94..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-resource-manager/go.sum +++ /dev/null @@ -1,141 +0,0 @@ -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/limit_config.go b/vendor/github.com/libp2p/go-libp2p-resource-manager/limit_config.go index 532f5a4d71..251382af84 100644 --- a/vendor/github.com/libp2p/go-libp2p-resource-manager/limit_config.go +++ b/vendor/github.com/libp2p/go-libp2p-resource-manager/limit_config.go @@ -11,15 +11,15 @@ import ( "github.com/pbnjay/memory" ) -type limitConfig struct { +type BasicLimitConfig struct { // if true, then a dynamic limit is used - Dynamic bool + Dynamic bool `json:",omitempty"` // either Memory is set for fixed memory limit - Memory int64 + Memory int64 `json:",omitempty"` // or the following 3 fields for computed memory limits - MinMemory int64 - MaxMemory int64 - MemoryFraction float64 + MinMemory int64 `json:",omitempty"` + MaxMemory int64 `json:",omitempty"` + MemoryFraction float64 `json:",omitempty"` StreamsInbound int StreamsOutbound int @@ -32,7 +32,7 @@ type limitConfig struct { FD int } -func (cfg *limitConfig) toLimit(base BaseLimit, mem MemoryLimit) (Limit, error) { +func (cfg *BasicLimitConfig) toLimit(base BaseLimit, mem MemoryLimit) (Limit, error) { if cfg == nil { m := mem.GetMemory(int64(memory.TotalMemory())) return &StaticLimit{ @@ -111,7 +111,7 @@ func (cfg *limitConfig) toLimit(base BaseLimit, mem MemoryLimit) (Limit, error) } } -func (cfg *limitConfig) toLimitFixed(base BaseLimit, mem int64) (Limit, error) { +func (cfg *BasicLimitConfig) toLimitFixed(base BaseLimit, mem int64) (Limit, error) { if cfg == nil { return &StaticLimit{ Memory: mem, @@ -162,25 +162,25 @@ func (cfg *limitConfig) toLimitFixed(base BaseLimit, mem int64) (Limit, error) { } } -type limiterConfig struct { - System *limitConfig - Transient *limitConfig +type BasicLimiterConfig struct { + System *BasicLimitConfig `json:",omitempty"` + Transient *BasicLimitConfig `json:",omitempty"` - ServiceDefault *limitConfig - ServicePeerDefault *limitConfig - Service map[string]limitConfig - ServicePeer map[string]limitConfig + ServiceDefault *BasicLimitConfig `json:",omitempty"` + ServicePeerDefault *BasicLimitConfig `json:",omitempty"` + Service map[string]BasicLimitConfig `json:",omitempty"` + ServicePeer map[string]BasicLimitConfig `json:",omitempty"` - ProtocolDefault *limitConfig - ProtocolPeerDefault *limitConfig - Protocol map[string]limitConfig - ProtocolPeer map[string]limitConfig + ProtocolDefault *BasicLimitConfig `json:",omitempty"` + ProtocolPeerDefault *BasicLimitConfig `json:",omitempty"` + Protocol map[string]BasicLimitConfig `json:",omitempty"` + ProtocolPeer map[string]BasicLimitConfig `json:",omitempty"` - PeerDefault *limitConfig - Peer map[string]limitConfig + PeerDefault *BasicLimitConfig `json:",omitempty"` + Peer map[string]BasicLimitConfig `json:",omitempty"` - Conn *limitConfig - Stream *limitConfig + Conn *BasicLimitConfig `json:",omitempty"` + Stream *BasicLimitConfig `json:",omitempty"` } // NewDefaultLimiterFromJSON creates a new limiter by parsing a json configuration, @@ -193,12 +193,16 @@ func NewDefaultLimiterFromJSON(in io.Reader) (*BasicLimiter, error) { func NewLimiterFromJSON(in io.Reader, defaults DefaultLimitConfig) (*BasicLimiter, error) { jin := json.NewDecoder(in) - var cfg limiterConfig + var cfg BasicLimiterConfig if err := jin.Decode(&cfg); err != nil { return nil, err } + return NewLimiter(cfg, defaults) +} + +func NewLimiter(cfg BasicLimiterConfig, defaults DefaultLimitConfig) (*BasicLimiter, error) { limiter := new(BasicLimiter) var err error @@ -214,12 +218,12 @@ func NewLimiterFromJSON(in io.Reader, defaults DefaultLimitConfig) (*BasicLimite limiter.DefaultServiceLimits, err = cfg.ServiceDefault.toLimit(defaults.ServiceBaseLimit, defaults.ServiceMemory) if err != nil { - return nil, fmt.Errorf("invlaid default service limit: %w", err) + return nil, fmt.Errorf("invalid default service limit: %w", err) } limiter.DefaultServicePeerLimits, err = cfg.ServicePeerDefault.toLimit(defaults.ServicePeerBaseLimit, defaults.ServicePeerMemory) if err != nil { - return nil, fmt.Errorf("invlaid default service peer limit: %w", err) + return nil, fmt.Errorf("invalid default service peer limit: %w", err) } if len(cfg.Service) > 0 { @@ -244,12 +248,12 @@ func NewLimiterFromJSON(in io.Reader, defaults DefaultLimitConfig) (*BasicLimite limiter.DefaultProtocolLimits, err = cfg.ProtocolDefault.toLimit(defaults.ProtocolBaseLimit, defaults.ProtocolMemory) if err != nil { - return nil, fmt.Errorf("invlaid default protocol limit: %w", err) + return nil, fmt.Errorf("invalid default protocol limit: %w", err) } limiter.DefaultProtocolPeerLimits, err = cfg.ProtocolPeerDefault.toLimit(defaults.ProtocolPeerBaseLimit, defaults.ProtocolPeerMemory) if err != nil { - return nil, fmt.Errorf("invlaid default protocol peer limit: %w", err) + return nil, fmt.Errorf("invalid default protocol peer limit: %w", err) } if len(cfg.Protocol) > 0 { @@ -280,7 +284,7 @@ func NewLimiterFromJSON(in io.Reader, defaults DefaultLimitConfig) (*BasicLimite if len(cfg.Peer) > 0 { limiter.PeerLimits = make(map[peer.ID]Limit, len(cfg.Peer)) for p, cfgLimit := range cfg.Peer { - pid, err := peer.IDFromString(p) + pid, err := peer.Decode(p) if err != nil { return nil, fmt.Errorf("invalid peer ID %s: %w", p, err) } diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/limit_config_test.json b/vendor/github.com/libp2p/go-libp2p-resource-manager/limit_config_test.json index b0571d86c1..a766a7f11a 100644 --- a/vendor/github.com/libp2p/go-libp2p-resource-manager/limit_config_test.json +++ b/vendor/github.com/libp2p/go-libp2p-resource-manager/limit_config_test.json @@ -51,5 +51,10 @@ }, "PeerDefault": { "Memory": 4096 + }, + "Peer": { + "12D3KooWPFH2Bx2tPfw6RLxN8k2wh47GRXgkt9yrAHU37zFwHWzS": { + "Memory": 4096 + } } } diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/metrics.go b/vendor/github.com/libp2p/go-libp2p-resource-manager/metrics.go new file mode 100644 index 0000000000..40918fc177 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p-resource-manager/metrics.go @@ -0,0 +1,168 @@ +package rcmgr + +import ( + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/protocol" +) + +// MetricsReporter is an interface for collecting metrics from resource manager actions +type MetricsReporter interface { + // AllowConn is invoked when opening a connection is allowed + AllowConn(dir network.Direction, usefd bool) + // BlockConn is invoked when opening a connection is blocked + BlockConn(dir network.Direction, usefd bool) + + // AllowStream is invoked when opening a stream is allowed + AllowStream(p peer.ID, dir network.Direction) + // BlockStream is invoked when opening a stream is blocked + BlockStream(p peer.ID, dir network.Direction) + + // AllowPeer is invoked when attaching ac onnection to a peer is allowed + AllowPeer(p peer.ID) + // BlockPeer is invoked when attaching ac onnection to a peer is blocked + BlockPeer(p peer.ID) + + // AllowProtocol is invoked when setting the protocol for a stream is allowed + AllowProtocol(proto protocol.ID) + // BlockProtocol is invoked when setting the protocol for a stream is blocked + BlockProtocol(proto protocol.ID) + // BlockedProtocolPeer is invoekd when setting the protocol for a stream is blocked at the per protocol peer scope + BlockProtocolPeer(proto protocol.ID, p peer.ID) + + // AllowPService is invoked when setting the protocol for a stream is allowed + AllowService(svc string) + // BlockPService is invoked when setting the protocol for a stream is blocked + BlockService(svc string) + // BlockedServicePeer is invoked when setting the service for a stream is blocked at the per service peer scope + BlockServicePeer(svc string, p peer.ID) + + // AllowMemory is invoked when a memory reservation is allowed + AllowMemory(size int) + // BlockMemory is invoked when a memory reservation is blocked + BlockMemory(size int) +} + +type metrics struct { + reporter MetricsReporter +} + +// WithMetrics is a resource manager option to enable metrics collection +func WithMetrics(reporter MetricsReporter) Option { + return func(r *resourceManager) error { + r.metrics = &metrics{reporter: reporter} + return nil + } +} + +func (m *metrics) AllowConn(dir network.Direction, usefd bool) { + if m == nil { + return + } + + m.reporter.AllowConn(dir, usefd) +} + +func (m *metrics) BlockConn(dir network.Direction, usefd bool) { + if m == nil { + return + } + + m.reporter.BlockConn(dir, usefd) +} + +func (m *metrics) AllowStream(p peer.ID, dir network.Direction) { + if m == nil { + return + } + + m.reporter.AllowStream(p, dir) +} + +func (m *metrics) BlockStream(p peer.ID, dir network.Direction) { + if m == nil { + return + } + + m.reporter.BlockStream(p, dir) +} + +func (m *metrics) AllowPeer(p peer.ID) { + if m == nil { + return + } + + m.reporter.AllowPeer(p) +} + +func (m *metrics) BlockPeer(p peer.ID) { + if m == nil { + return + } + + m.reporter.BlockPeer(p) +} + +func (m *metrics) AllowProtocol(proto protocol.ID) { + if m == nil { + return + } + + m.reporter.AllowProtocol(proto) +} + +func (m *metrics) BlockProtocol(proto protocol.ID) { + if m == nil { + return + } + + m.reporter.BlockProtocol(proto) +} + +func (m *metrics) BlockProtocolPeer(proto protocol.ID, p peer.ID) { + if m == nil { + return + } + + m.reporter.BlockProtocolPeer(proto, p) +} + +func (m *metrics) AllowService(svc string) { + if m == nil { + return + } + + m.reporter.AllowService(svc) +} + +func (m *metrics) BlockService(svc string) { + if m == nil { + return + } + + m.reporter.BlockService(svc) +} + +func (m *metrics) BlockServicePeer(svc string, p peer.ID) { + if m == nil { + return + } + + m.reporter.BlockServicePeer(svc, p) +} + +func (m *metrics) AllowMemory(size int) { + if m == nil { + return + } + + m.reporter.AllowMemory(size) +} + +func (m *metrics) BlockMemory(size int) { + if m == nil { + return + } + + m.reporter.BlockMemory(size) +} diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/rcmgr.go b/vendor/github.com/libp2p/go-libp2p-resource-manager/rcmgr.go index 61d9c2badd..bebae9ba7f 100644 --- a/vendor/github.com/libp2p/go-libp2p-resource-manager/rcmgr.go +++ b/vendor/github.com/libp2p/go-libp2p-resource-manager/rcmgr.go @@ -18,7 +18,8 @@ var log = logging.Logger("rcmgr") type resourceManager struct { limits Limiter - trace *trace + trace *trace + metrics *metrics system *systemScope transient *transientScope @@ -259,9 +260,11 @@ func (r *resourceManager) OpenConnection(dir network.Direction, usefd bool) (net if err := conn.AddConn(dir, usefd); err != nil { conn.Done() + r.metrics.BlockConn(dir, usefd) return nil, err } + r.metrics.AllowConn(dir, usefd) return conn, nil } @@ -273,9 +276,11 @@ func (r *resourceManager) OpenStream(p peer.ID, dir network.Direction) (network. err := stream.AddStream(dir) if err != nil { stream.Done() + r.metrics.BlockStream(p, dir) return nil, err } + r.metrics.AllowStream(p, dir) return stream, nil } @@ -360,56 +365,68 @@ func (r *resourceManager) gc() { func newSystemScope(limit Limit, rcmgr *resourceManager) *systemScope { return &systemScope{ - resourceScope: newResourceScope(limit, nil, "system", rcmgr.trace), + resourceScope: newResourceScope(limit, nil, "system", rcmgr.trace, rcmgr.metrics), } } func newTransientScope(limit Limit, rcmgr *resourceManager) *transientScope { return &transientScope{ - resourceScope: newResourceScope(limit, []*resourceScope{rcmgr.system.resourceScope}, "transient", rcmgr.trace), - system: rcmgr.system, + resourceScope: newResourceScope(limit, + []*resourceScope{rcmgr.system.resourceScope}, + "transient", rcmgr.trace, rcmgr.metrics), + system: rcmgr.system, } } func newServiceScope(name string, limit Limit, rcmgr *resourceManager) *serviceScope { return &serviceScope{ - resourceScope: newResourceScope(limit, []*resourceScope{rcmgr.system.resourceScope}, fmt.Sprintf("service:%s", name), rcmgr.trace), - name: name, - rcmgr: rcmgr, + resourceScope: newResourceScope(limit, + []*resourceScope{rcmgr.system.resourceScope}, + fmt.Sprintf("service:%s", name), rcmgr.trace, rcmgr.metrics), + name: name, + rcmgr: rcmgr, } } func newProtocolScope(proto protocol.ID, limit Limit, rcmgr *resourceManager) *protocolScope { return &protocolScope{ - resourceScope: newResourceScope(limit, []*resourceScope{rcmgr.system.resourceScope}, fmt.Sprintf("protocol:%s", proto), rcmgr.trace), - proto: proto, - rcmgr: rcmgr, + resourceScope: newResourceScope(limit, + []*resourceScope{rcmgr.system.resourceScope}, + fmt.Sprintf("protocol:%s", proto), rcmgr.trace, rcmgr.metrics), + proto: proto, + rcmgr: rcmgr, } } func newPeerScope(p peer.ID, limit Limit, rcmgr *resourceManager) *peerScope { return &peerScope{ - resourceScope: newResourceScope(limit, []*resourceScope{rcmgr.system.resourceScope}, fmt.Sprintf("peer:%s", p), rcmgr.trace), - peer: p, - rcmgr: rcmgr, + resourceScope: newResourceScope(limit, + []*resourceScope{rcmgr.system.resourceScope}, + fmt.Sprintf("peer:%s", p), rcmgr.trace, rcmgr.metrics), + peer: p, + rcmgr: rcmgr, } } func newConnectionScope(dir network.Direction, usefd bool, limit Limit, rcmgr *resourceManager) *connectionScope { return &connectionScope{ - resourceScope: newResourceScope(limit, []*resourceScope{rcmgr.transient.resourceScope, rcmgr.system.resourceScope}, fmt.Sprintf("conn-%d", rcmgr.nextConnId()), rcmgr.trace), - dir: dir, - usefd: usefd, - rcmgr: rcmgr, + resourceScope: newResourceScope(limit, + []*resourceScope{rcmgr.transient.resourceScope, rcmgr.system.resourceScope}, + fmt.Sprintf("conn-%d", rcmgr.nextConnId()), rcmgr.trace, rcmgr.metrics), + dir: dir, + usefd: usefd, + rcmgr: rcmgr, } } func newStreamScope(dir network.Direction, limit Limit, peer *peerScope, rcmgr *resourceManager) *streamScope { return &streamScope{ - resourceScope: newResourceScope(limit, []*resourceScope{peer.resourceScope, rcmgr.transient.resourceScope, rcmgr.system.resourceScope}, fmt.Sprintf("stream-%d", rcmgr.nextStreamId()), rcmgr.trace), - dir: dir, - rcmgr: peer.rcmgr, - peer: peer, + resourceScope: newResourceScope(limit, + []*resourceScope{peer.resourceScope, rcmgr.transient.resourceScope, rcmgr.system.resourceScope}, + fmt.Sprintf("stream-%d", rcmgr.nextStreamId()), rcmgr.trace, rcmgr.metrics), + dir: dir, + rcmgr: peer.rcmgr, + peer: peer, } } @@ -433,7 +450,7 @@ func (s *serviceScope) getPeerScope(p peer.ID) *resourceScope { s.peers = make(map[peer.ID]*resourceScope) } - ps = newResourceScope(l, nil, fmt.Sprintf("%s.peer:%s", s.name, p), s.rcmgr.trace) + ps = newResourceScope(l, nil, fmt.Sprintf("%s.peer:%s", s.name, p), s.rcmgr.trace, s.rcmgr.metrics) s.peers[p] = ps ps.IncRef() @@ -460,7 +477,7 @@ func (s *protocolScope) getPeerScope(p peer.ID) *resourceScope { s.peers = make(map[peer.ID]*resourceScope) } - ps = newResourceScope(l, nil, fmt.Sprintf("%s.peer:%s", s.name, p), s.rcmgr.trace) + ps = newResourceScope(l, nil, fmt.Sprintf("%s.peer:%s", s.name, p), s.rcmgr.trace, s.rcmgr.metrics) s.peers[p] = ps ps.IncRef() @@ -474,6 +491,12 @@ func (s *peerScope) Peer() peer.ID { func (s *connectionScope) PeerScope() network.PeerScope { s.Lock() defer s.Unlock() + + // avoid nil is not nil footgun; go.... + if s.peer == nil { + return nil + } + return s.peer } @@ -491,6 +514,7 @@ func (s *connectionScope) SetPeer(p peer.ID) error { if err := s.peer.ReserveForChild(stat); err != nil { s.peer.DecRef() s.peer = nil + s.rcmgr.metrics.BlockPeer(p) return err } @@ -504,12 +528,19 @@ func (s *connectionScope) SetPeer(p peer.ID) error { } s.resourceScope.edges = edges + s.rcmgr.metrics.AllowPeer(p) return nil } func (s *streamScope) ProtocolScope() network.ProtocolScope { s.Lock() defer s.Unlock() + + // avoid nil is not nil footgun; go.... + if s.proto == nil { + return nil + } + return s.proto } @@ -528,6 +559,7 @@ func (s *streamScope) SetProtocol(proto protocol.ID) error { if err := s.proto.ReserveForChild(stat); err != nil { s.proto.DecRef() s.proto = nil + s.rcmgr.metrics.BlockProtocol(proto) return err } @@ -538,6 +570,7 @@ func (s *streamScope) SetProtocol(proto protocol.ID) error { s.proto = nil s.peerProtoScope.DecRef() s.peerProtoScope = nil + s.rcmgr.metrics.BlockProtocolPeer(proto, s.peer.peer) return err } @@ -553,12 +586,19 @@ func (s *streamScope) SetProtocol(proto protocol.ID) error { } s.resourceScope.edges = edges + s.rcmgr.metrics.AllowProtocol(proto) return nil } func (s *streamScope) ServiceScope() network.ServiceScope { s.Lock() defer s.Unlock() + + // avoid nil is not nil footgun; go.... + if s.svc == nil { + return nil + } + return s.svc } @@ -580,6 +620,7 @@ func (s *streamScope) SetService(svc string) error { if err := s.svc.ReserveForChild(stat); err != nil { s.svc.DecRef() s.svc = nil + s.rcmgr.metrics.BlockService(svc) return err } @@ -591,6 +632,7 @@ func (s *streamScope) SetService(svc string) error { s.svc = nil s.peerSvcScope.DecRef() s.peerSvcScope = nil + s.rcmgr.metrics.BlockServicePeer(svc, s.peer.peer) return err } @@ -605,11 +647,18 @@ func (s *streamScope) SetService(svc string) error { } s.resourceScope.edges = edges + s.rcmgr.metrics.AllowService(svc) return nil } func (s *streamScope) PeerScope() network.PeerScope { s.Lock() defer s.Unlock() + + // avoid nil is not nil footgun; go.... + if s.peer == nil { + return nil + } + return s.peer } diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/scope.go b/vendor/github.com/libp2p/go-libp2p-resource-manager/scope.go index beb61606f9..06fedcb57d 100644 --- a/vendor/github.com/libp2p/go-libp2p-resource-manager/scope.go +++ b/vendor/github.com/libp2p/go-libp2p-resource-manager/scope.go @@ -36,22 +36,24 @@ type resourceScope struct { owner *resourceScope // set in span scopes, which define trees edges []*resourceScope // set in DAG scopes, it's the linearized parent set - name string // for debugging purposes - trace *trace // debug tracing + name string // for debugging purposes + trace *trace // debug tracing + metrics *metrics // metrics collection } var _ network.ResourceScope = (*resourceScope)(nil) var _ network.ResourceScopeSpan = (*resourceScope)(nil) -func newResourceScope(limit Limit, edges []*resourceScope, name string, trace *trace) *resourceScope { +func newResourceScope(limit Limit, edges []*resourceScope, name string, trace *trace, metrics *metrics) *resourceScope { for _, e := range edges { e.IncRef() } r := &resourceScope{ - rc: resources{limit: limit}, - edges: edges, - name: name, - trace: trace, + rc: resources{limit: limit}, + edges: edges, + name: name, + trace: trace, + metrics: metrics, } r.trace.CreateScope(name, limit) return r @@ -59,10 +61,11 @@ func newResourceScope(limit Limit, edges []*resourceScope, name string, trace *t func newResourceScopeSpan(owner *resourceScope) *resourceScope { r := &resourceScope{ - rc: resources{limit: owner.rc.limit}, - owner: owner, - name: fmt.Sprintf("%s.span", owner.name), - trace: owner.trace, + rc: resources{limit: owner.rc.limit}, + owner: owner, + name: fmt.Sprintf("%s.span", owner.name), + trace: owner.trace, + metrics: owner.metrics, } r.trace.CreateScope(r.name, r.rc.limit) return r @@ -236,19 +239,20 @@ func (s *resourceScope) ReserveMemory(size int, prio uint8) error { } if err := s.rc.reserveMemory(int64(size), prio); err != nil { - log.Debugw("blocked memory reservation", "scope", s.name, "size", size, "priority", prio, "error", err) + log.Debugw("blocked memory reservation", "scope", s.name, "size", size, "priority", prio, "stat", s.rc.stat(), "error", err) s.trace.BlockReserveMemory(s.name, prio, int64(size), s.rc.memory) + s.metrics.BlockMemory(size) return s.wrapError(err) } if err := s.reserveMemoryForEdges(size, prio); err != nil { - log.Debugw("blocked memory reservation from constraining edge", "scope", s.name, "size", size, "priority", prio, "error", err) - s.rc.releaseMemory(int64(size)) + s.metrics.BlockMemory(size) return s.wrapError(err) } s.trace.ReserveMemory(s.name, prio, int64(size), s.rc.memory) + s.metrics.AllowMemory(size) return nil } @@ -261,6 +265,7 @@ func (s *resourceScope) reserveMemoryForEdges(size int, prio uint8) error { var err error for _, e := range s.edges { if err = e.ReserveMemoryForChild(int64(size), prio); err != nil { + log.Debugw("blocked memory reservation from constraining edge", "scope", s.name, "edge", e.name, "size", size, "priority", prio, "stat", e.Stat(), "error", err) break } @@ -339,13 +344,12 @@ func (s *resourceScope) AddStream(dir network.Direction) error { } if err := s.rc.addStream(dir); err != nil { - log.Debugw("blocked stream", "scope", s.name, "direction", dir, "error", err) + log.Debugw("blocked stream", "scope", s.name, "direction", dir, "stat", s.rc.stat(), "error", err) s.trace.BlockAddStream(s.name, dir, s.rc.nstreamsIn, s.rc.nstreamsOut) return s.wrapError(err) } if err := s.addStreamForEdges(dir); err != nil { - log.Debugw("blocked stream from constraining edge", "scope", s.name, "direction", dir, "error", err) s.rc.removeStream(dir) return s.wrapError(err) } @@ -363,6 +367,7 @@ func (s *resourceScope) addStreamForEdges(dir network.Direction) error { var reserved int for _, e := range s.edges { if err = e.AddStreamForChild(dir); err != nil { + log.Debugw("blocked stream from constraining edge", "scope", s.name, "edge", e.name, "direction", dir, "stat", e.Stat(), "error", err) break } reserved++ @@ -439,13 +444,12 @@ func (s *resourceScope) AddConn(dir network.Direction, usefd bool) error { } if err := s.rc.addConn(dir, usefd); err != nil { - log.Debugw("blocked connection", "scope", s.name, "direction", dir, "usefd", usefd, "error", err) + log.Debugw("blocked connection", "scope", s.name, "direction", dir, "usefd", usefd, "stat", s.rc.stat(), "error", err) s.trace.BlockAddConn(s.name, dir, usefd, s.rc.nconnsIn, s.rc.nconnsOut, s.rc.nfd) return s.wrapError(err) } if err := s.addConnForEdges(dir, usefd); err != nil { - log.Debugw("blocked connection from constraining edge", "scope", s.name, "direction", dir, "usefd", usefd, "error", err) s.rc.removeConn(dir, usefd) return s.wrapError(err) } @@ -463,6 +467,7 @@ func (s *resourceScope) addConnForEdges(dir network.Direction, usefd bool) error var reserved int for _, e := range s.edges { if err = e.AddConnForChild(dir, usefd); err != nil { + log.Debugw("blocked connection from constraining edge", "scope", s.name, "edge", e.name, "direction", dir, "usefd", usefd, "stat", e.Stat(), "error", err) break } reserved++ diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/trace.go b/vendor/github.com/libp2p/go-libp2p-resource-manager/trace.go index f0bebcd34e..b178f29886 100644 --- a/vendor/github.com/libp2p/go-libp2p-resource-manager/trace.go +++ b/vendor/github.com/libp2p/go-libp2p-resource-manager/trace.go @@ -32,22 +32,22 @@ func WithTrace(path string) Option { } const ( - traceStartEvt = iota - traceCreateScopeEvt - traceDestroyScopeEvt - traceReserveMemoryEvt - traceBlockReserveMemoryEvt - traceReleaseMemoryEvt - traceAddStreamEvt - traceBlockAddStreamEvt - traceRemoveStreamEvt - traceAddConnEvt - traceBlockAddConnEvt - traceRemoveConnEvt + traceStartEvt = "start" + traceCreateScopeEvt = "create_scope" + traceDestroyScopeEvt = "destroy_scope" + traceReserveMemoryEvt = "reserve_memory" + traceBlockReserveMemoryEvt = "block_reserve_memory" + traceReleaseMemoryEvt = "release_memory" + traceAddStreamEvt = "add_stream" + traceBlockAddStreamEvt = "block_add_stream" + traceRemoveStreamEvt = "remove_stream" + traceAddConnEvt = "add_conn" + traceBlockAddConnEvt = "block_add_conn" + traceRemoveConnEvt = "remove_conn" ) type traceEvt struct { - Type int + Type string Scope string `json:",omitempty"` @@ -261,7 +261,7 @@ func (t *trace) ReleaseMemory(scope string, size, mem int64) { t.push(traceEvt{ Type: traceReleaseMemoryEvt, Scope: scope, - Delta: -size, + Delta: size, Memory: mem, }) } diff --git a/vendor/github.com/libp2p/go-libp2p-resource-manager/version.json b/vendor/github.com/libp2p/go-libp2p-resource-manager/version.json index defa6b18f5..a654d65abc 100644 --- a/vendor/github.com/libp2p/go-libp2p-resource-manager/version.json +++ b/vendor/github.com/libp2p/go-libp2p-resource-manager/version.json @@ -1,3 +1,3 @@ { - "version": "v0.1.2" + "version": "v0.3.0" } diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/LICENSE b/vendor/github.com/libp2p/go-libp2p-swarm/LICENSE deleted file mode 100644 index 26100332ba..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-swarm/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Jeromy Johnson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/README.md b/vendor/github.com/libp2p/go-libp2p-swarm/README.md deleted file mode 100644 index f5ef795944..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-swarm/README.md +++ /dev/null @@ -1,75 +0,0 @@ -go-libp2p-swarm -================== - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![Go Reference](https://pkg.go.dev/badge/github.com/libp2p/go-libp2p-swarm)](https://pkg.go.dev/github.com/libp2p/go-libp2p-swarm) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Code Coverage](https://img.shields.io/codecov/c/github/libp2p/go-libp2p-swarm/master.svg?style=flat-square)](https://codecov.io/gh/libp2p/go-libp2p-swarm) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -> The libp2p swarm manages groups of connections to peers, and handles incoming and outgoing streams. - -The libp2p swarm is the 'low level' interface for working with a given libp2p -network. It gives you more fine grained control over various aspects of the -system. Most applications don't need this level of access, so the `Swarm` is -generally wrapped in a `Host` abstraction that provides a more friendly -interface. See [the host interface](https://godoc.org/github.com/libp2p/go-libp2p-core/host#Host) -for more info on that. - -## Table of Contents - -- [Install](#install) -- [Contribute](#contribute) -- [License](#license) - -## Install - -```sh -go get github.com/libp2p/go-libp2p-swarm -``` - -## Usage - -### Creating a swarm - -To construct a swarm, you'll be calling `NewSwarm`. That function looks like this: -```go -swarm, err := NewSwarm(peerID, peerstore) -``` - -The first parameter of the swarm constructor is an identity in the form of a peer.ID. - -The second argument is a peerstore. This is essentially a database that the -swarm will use to store peer IDs, addresses, public keys, protocol preferences -and more. - -### Streams -The swarm is designed around using multiplexed streams to communicate with -other peers. When working with a swarm, you will want to set a function to -handle incoming streams from your peers: - -```go -swrm.SetStreamHandler(func(s network.Stream) { - defer s.Close() - fmt.Println("Got a stream from: ", s.SwarmConn().RemotePeer()) - fmt.Fprintln(s, "Hello Friend!") -}) -``` - -Tip: Always make sure to close streams when you're done with them. - - -## Contribute - -PRs are welcome! - -Small note: If editing the Readme, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. - -## License - -MIT © Jeromy Johnson - ---- - -The last gx published version of this module was: 3.0.35: QmQVoMEL1CxrVusTSUdYsiJXVBnvSqNUpBsGybkwSfksEF diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/go.mod b/vendor/github.com/libp2p/go-libp2p-swarm/go.mod deleted file mode 100644 index 3982a6fa95..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-swarm/go.mod +++ /dev/null @@ -1,21 +0,0 @@ -module github.com/libp2p/go-libp2p-swarm - -go 1.16 - -require ( - github.com/golang/mock v1.6.0 - github.com/ipfs/go-log/v2 v2.5.0 - github.com/libp2p/go-conn-security-multistream v0.3.0 - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-peerstore v0.6.0 - github.com/libp2p/go-libp2p-quic-transport v0.16.0 - github.com/libp2p/go-libp2p-testing v0.7.0 - github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 - github.com/libp2p/go-libp2p-yamux v0.8.1 - github.com/libp2p/go-stream-muxer-multistream v0.4.0 - github.com/libp2p/go-tcp-transport v0.5.0 - github.com/multiformats/go-multiaddr v0.5.0 - github.com/multiformats/go-multiaddr-fmt v0.1.0 - github.com/stretchr/testify v1.7.0 - github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 -) diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/go.sum b/vendor/github.com/libp2p/go-libp2p-swarm/go.sum deleted file mode 100644 index 1f26da9fd4..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-swarm/go.sum +++ /dev/null @@ -1,859 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-mplex v0.5.0 h1:vt3k4E4HSND9XH4Z8rUpacPJFSAgLOv6HDvG8W9Ks9E= -github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= -github.com/libp2p/go-libp2p-peerstore v0.6.0 h1:HJminhQSGISBIRb93N6WK3t6Fa8OOTnHd/VBjL4mY5A= -github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-quic-transport v0.16.0 h1:aVg9/jr+R2esov5sH7wkXrmYmqJiUjtLMLYX3L9KYdY= -github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-libp2p-tls v0.3.0 h1:8BgvUJiOTcj0Gp6XvEicF0rL5aUtRg/UzEdeZDmDlC8= -github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= -github.com/libp2p/go-libp2p-yamux v0.8.1 h1:pi7zUeZ4Z9TpbUMntvSvoP3dFD4SEw/VPybxBcOZGzg= -github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-netroute v0.2.0/go.mod h1:Vio7LTzZ+6hoT4CMZi5/6CpY3Snzh2vgZhWgxMNwlQI= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= -github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.4.0 h1:HsM/9OdtqnIzjVXcxTXjmqKrj3gJ8kacaOJwJS1ipaY= -github.com/libp2p/go-stream-muxer-multistream v0.4.0/go.mod h1:nb+dGViZleRP4XcyHuZSVrJCBl55nRBOMmiSL/dyziw= -github.com/libp2p/go-tcp-transport v0.5.0 h1:3ZPW8HAuyRAuFzyabE0hSrCXKKSWzROnZZX7DtcIatY= -github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= -github.com/libp2p/go-yamux/v3 v3.0.2 h1:LW0q5+A1Wy0npEsPJP9wmare2NH4ohNluN5EWVwv2mE= -github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucas-clemente/quic-go v0.25.0 h1:K+X9Gvd7JXsOHtU0N2icZ2Nw3rx82uBej3mP4CLgibc= -github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 h1:EnzzN9fPUkUck/1CuY1FlzBaIYMoiBsdwTNmNGkwUUM= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multiaddr v0.5.0 h1:i/JuOoVg4szYQ4YEzDGtb2h0o8M7CG/Yq6cGlcjWZpM= -github.com/multiformats/go-multiaddr v0.5.0/go.mod h1:3KAxNkUqLTJ20AAwN4XVX4kZar+bR+gh4zgbfr3SNug= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.2.1 h1:R5exp4cKvGlePuxg/bn4cnV53K4DxCe+uldxs7QzfrE= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0 h1:WCVKW7aL6LEe1uryfI9dnEc2ZqNB1Fn0ok930v0iL1Y= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf h1:B2n+Zi5QeYRDAEodEu72OS36gmTWjgpXr2+cWcBW90o= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/version.json b/vendor/github.com/libp2p/go-libp2p-swarm/version.json deleted file mode 100644 index b6bb0741ad..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-swarm/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.10.1" -} diff --git a/vendor/github.com/libp2p/go-libp2p-tls/README.md b/vendor/github.com/libp2p/go-libp2p-tls/README.md deleted file mode 100644 index 8d03e5058c..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-tls/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# go-libp2p-tls - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](http://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![GoDoc](https://godoc.org/github.com/libp2p/go-libp2p-tls?status.svg)](https://godoc.org/github.com/libp2p/go-libp2p-tls) -[![Linux Build Status](https://img.shields.io/travis/libp2p/go-libp2p-tls/master.svg?style=flat-square&label=linux+build)](https://travis-ci.org/libp2p/go-libp2p-tls) -[![Code Coverage](https://img.shields.io/codecov/c/github/libp2p/go-libp2p-tls/master.svg?style=flat-square)](https://codecov.io/gh/libp2p/go-libp2p-tls/) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -> go-libp2p's TLS encrypted transport - -Package `go-libp2p-tls` is a libp2p [conn security transport](https://godoc.org/github.com/libp2p/go-libp2p-core/sec). It uses TLS to setup the communication channel. - -## Install - -`go-libp2p-tls` is a standard Go module which can be installed with: - -```sh -go get github.com/libp2p/go-libp2p-tls -``` - -This repo is [gomod](https://github.com/golang/go/wiki/Modules)-compatible, and users of -go 1.11 and later with modules enabled will automatically pull the latest tagged release -by referencing this package. Upgrades to future releases can be managed using `go get`, -or by editing your `go.mod` file as [described by the gomod documentation](https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies). - -## Contribute - -Feel free to join in. All welcome. Open an [issue](https://github.com/libp2p/go-libp2p-tls/issues)! - -This repository falls under the libp2p [Code of Conduct](https://github.com/libp2p/community/blob/master/code-of-conduct.md). - -### Want to hack on libp2p? - -[![](https://cdn.rawgit.com/libp2p/community/master/img/contribute.gif)](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) - -## License - -MIT - ---- - -The last gx published version of this module was: 0.1.0: QmR4qpcxA1UoHg7SZ89hJHYCpfrxToPjH9xSCug1cQeH1M diff --git a/vendor/github.com/libp2p/go-libp2p-tls/codecov.yml b/vendor/github.com/libp2p/go-libp2p-tls/codecov.yml deleted file mode 100644 index 00064af331..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-tls/codecov.yml +++ /dev/null @@ -1,7 +0,0 @@ -coverage: - round: nearest - status: - project: - default: - threshold: 1 - patch: false diff --git a/vendor/github.com/libp2p/go-libp2p-tls/go.mod b/vendor/github.com/libp2p/go-libp2p-tls/go.mod deleted file mode 100644 index 9f71e41cfb..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-tls/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/libp2p/go-libp2p-tls - -go 1.16 - -require ( - github.com/libp2p/go-libp2p-core v0.10.0 - github.com/onsi/ginkgo v1.12.0 - github.com/onsi/gomega v1.9.0 - golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab -) diff --git a/vendor/github.com/libp2p/go-libp2p-tls/go.sum b/vendor/github.com/libp2p/go-libp2p-tls/go.sum deleted file mode 100644 index 28fafdc7d3..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-tls/go.sum +++ /dev/null @@ -1,108 +0,0 @@ -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.10.0 h1:jFy7v5Muq58GTeYkPhGzIH8Qq4BFfziqc0ixPd/pP9k= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.2.2 h1:XZLDTszBIJe6m0zF6ITBrEcZR73OPUhCBBS9rYAuUzI= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0 h1:R1uwffexN6Pr340GtYRIdZmAiN4J+iw6WG4wog1DUXg= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab h1:FvshnhkKW+LO3HWHodML8kuVX8rnJTxKm9dFPuI68UM= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/LICENSE b/vendor/github.com/libp2p/go-libp2p-transport-upgrader/LICENSE deleted file mode 100644 index 6cccfc2baf..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2018 Protocol Labs - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/README.md b/vendor/github.com/libp2p/go-libp2p-transport-upgrader/README.md deleted file mode 100644 index c4e22071be..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/README.md +++ /dev/null @@ -1,173 +0,0 @@ -# go-libp2p-transport-upgrader - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![GoDoc](https://godoc.org/github.com/libp2p/go-libp2p-transport-upgrader?status.svg)](https://godoc.org/github.com/libp2p/go-libp2p-transport-upgrader) -[![Build Status](https://travis-ci.org/libp2p/go-libp2p-transport-upgrader.svg?branch=master)](https://travis-ci.org/libp2p/go-libp2p-transport-upgrader) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -> Add encryption and multiplexing capabilities to libp2p transport connections - -This package is a component of [libp2p](https://libp2p.io), a modular networking -stack for building peer-to-peer applications. - -For two libp2p peers to communicate, the connection between them must be secure, -and each peer must be able to open multiple independent streams of communication -over a single channel. We call connections with these features "capable" -connections. - -Many of the underlying [transport protocols][docs-transport] that are used by -libp2p do not provide the required capabilities "out of the box." -`go-libp2p-transport-upgrader` provides the necessary logic to upgrade -connections and listeners into fully capable connections and connection -listeners. - -In order to be upgraded, the underlying connection or listener must be a -[`multiaddr-net`][manet] [`Conn`][manet-conn] or [`Listener`][manet-listener]. -The `multiaddr-net` types integrate the Go standard library connection types -with [`multiaddr`][multiaddr], an extensible addressing format used throughout -libp2p. - -As well as the mandatory capabilities of security and multiplexing, the upgrader -can optionally apply a `Protector` for [private networking][pnet], as well as an -[address filter][maddr-filter] to prevent connections to specific addresses. - -## Install - -Most people building applications with libp2p will have no need to install -`go-libp2p-transport-upgrader` directly. It is included as a dependency of the -main [`go-libp2p`][go-libp2p] "entry point" module and is integrated into the -libp2p `Host`. - -For users who do not depend on `go-libp2p` and are managing their libp2p module -dependencies in a more manual fashion, `go-libp2p-transport-upgrader` is a -standard Go module which can be installed with: - -```sh -go get github.com/libp2p/go-libp2p-transport-upgrader -``` - -## Usage - -To use, construct a new `Upgrader` with: - -* An optional [pnet][pnet] `Protector`. -* An optional [go-maddr-filter][maddr-filter] address `Filter`. -* A mandatory [stream security transport][ss]. -* A mandatory [stream multiplexer][smux]. - -In practice, most users will not need to construct an `Upgrader` directly. -Instead, when constructing a libp2p [`Host`][godoc-host], you can pass in some -combination of the [`PrivateNetwork`][godoc-pnet-option], -[`Filters`][godoc-filters-option], [`Security`][godoc-security-option], and -[`Muxer`][godoc-muxer-option] `Option`s. This will configure the `Upgrader` that -is created and used by the `Host` internally. - -## Example - -Below is a simplified TCP transport implementation using the transport upgrader. -In practice, you'll want to use -[go-tcp-transport](https://github.com/libp2p/go-tcp-transport), which is -optimized for production usage. - -```go -package tcptransport - -import ( - "context" - - tptu "github.com/libp2p/go-libp2p-transport-upgrader" - - ma "github.com/multiformats/go-multiaddr" - mafmt "github.com/multiformats/go-multiaddr-fmt" - manet "github.com/multiformats/go-multiaddr/net" - tpt "github.com/libp2p/go-libp2p-core/transport" - peer "github.com/libp2p/go-libp2p-core/peer" -) - -// TcpTransport is a simple TCP transport. -type TcpTransport struct { - // Connection upgrader for upgrading insecure stream connections to - // secure multiplex connections. - Upgrader *tptu.Upgrader -} - -var _ tpt.Transport = &TcpTransport{} - -// NewTCPTransport creates a new TCP transport instance. -func NewTCPTransport(upgrader *tptu.Upgrader) *TcpTransport { - return &TcpTransport{Upgrader: upgrader} -} - -// CanDial returns true if this transport believes it can dial the given -// multiaddr. -func (t *TcpTransport) CanDial(addr ma.Multiaddr) bool { - return mafmt.TCP.Matches(addr) -} - -// Dial dials the peer at the remote address. -func (t *TcpTransport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (tpt.CapableConn, error) { - var dialer manet.Dialer - conn, err := dialer.DialContext(ctx, raddr) - if err != nil { - return nil, err - } - return t.Upgrader.UpgradeOutbound(ctx, t, conn, p) -} - -// Listen listens on the given multiaddr. -func (t *TcpTransport) Listen(laddr ma.Multiaddr) (tpt.Listener, error) { - list, err := manet.Listen(laddr) - if err != nil { - return nil, err - } - return t.Upgrader.UpgradeListener(t, list), nil -} - -// Protocols returns the list of terminal protocols this transport can dial. -func (t *TcpTransport) Protocols() []int { - return []int{ma.P_TCP} -} - -// Proxy always returns false for the TCP transport. -func (t *TcpTransport) Proxy() bool { - return false -} - -``` - -## Contribute - -Feel free to join in. All welcome. Open an [issue](https://github.com/libp2p/go-libp2p-transport-upgrader/issues)! - -This repository falls under the libp2p [Code of Conduct](https://github.com/libp2p/community/blob/master/code-of-conduct.md). - -### Want to hack on libp2p? - -[![](https://cdn.rawgit.com/libp2p/community/master/img/contribute.gif)](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) - -## License - -MIT - ---- - -The last gx published version of this module was: 0.1.28: QmeqC5shQjEBRG9B8roZqQCJ9xb7Pq6AbWxJFMyLgqBBWh - -[tpt]: https://godoc.org/github.com/libp2p/go-libp2p-core/transport -[manet]: https://github.com/multiformats/go-multiaddr/ -[ss]: https://godoc.org/github.com/libp2p/go-libp2p-core/sec -[smux]: https://godoc.org/github.com/libp2p/go-libp2p-core/mux -[pnet]: https://godoc.org/github.com/libp2p/go-libp2p-core/pnet -[manet-conn]: https://godoc.org/github.com/multiformats/go-multiaddr/net#Conn -[manet-listener]: https://godoc.org/github.com/multiformats/go-multiaddr/net#Listener -[maddr-filter]: https://github.com/multiformats/go-multiaddr -[docs-transport]: https://docs.libp2p.io/concepts/transport -[multiaddr]: https://github.com/multiformats/multiaddr -[go-libp2p]: https://github.com/lib2p2/go-libp2p -[godoc-host]: https://godoc.org/github.com/libp2p/go-libp2p-core/host#Host -[godoc-pnet-option]: https://godoc.org/github.com/libp2p/go-libp2p#PrivateNetwork -[godoc-filters-option]: https://godoc.org/github.com/libp2p/go-libp2p#Filters -[godoc-security-option]: https://godoc.org/github.com/libp2p/go-libp2p#Security -[godoc-muxer-option]: https://godoc.org/github.com/libp2p/go-libp2p#Muxer diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/go.mod b/vendor/github.com/libp2p/go-libp2p-transport-upgrader/go.mod deleted file mode 100644 index b60d99ab7a..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/go.mod +++ /dev/null @@ -1,15 +0,0 @@ -module github.com/libp2p/go-libp2p-transport-upgrader - -go 1.16 - -require ( - github.com/golang/mock v1.6.0 - github.com/ipfs/go-log/v2 v2.5.0 - github.com/jbenet/go-temp-err-catcher v0.1.0 - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-mplex v0.5.0 - github.com/libp2p/go-libp2p-pnet v0.2.0 - github.com/libp2p/go-libp2p-testing v0.7.0 - github.com/multiformats/go-multiaddr v0.4.1 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/go.sum b/vendor/github.com/libp2p/go-libp2p-transport-upgrader/go.sum deleted file mode 100644 index 19407f9738..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/go.sum +++ /dev/null @@ -1,248 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-mplex v0.5.0 h1:vt3k4E4HSND9XH4Z8rUpacPJFSAgLOv6HDvG8W9Ks9E= -github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/.gitignore b/vendor/github.com/libp2p/go-libp2p-yamux/.gitignore deleted file mode 100644 index 1377554ebe..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-yamux/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.swp diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/LICENSE b/vendor/github.com/libp2p/go-libp2p-yamux/LICENSE deleted file mode 100644 index c7386b3c94..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-yamux/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Juan Batiz-Benet - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/README.md b/vendor/github.com/libp2p/go-libp2p-yamux/README.md deleted file mode 100644 index 46165b7c5f..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-yamux/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# go-libp2p-yamux - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![GoDoc](https://godoc.org/github.com/libp2p/go-libp2p-yamux?status.svg)](https://godoc.org/github.com/libp2p/go-libp2p-yamux) -[![Coverage Status](https://coveralls.io/repos/github/libp2p/go-libp2p-yamux/badge.svg?branch=master)](https://coveralls.io/github/libp2p/go-libp2p-yamux?branch=master) -[![Build Status](https://travis-ci.com/libp2p/go-libp2p-yamux.svg?branch=master)](https://travis-ci.com/libp2p/go-libp2p-yamux) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -> An adapter to integrate the yamux multiplexer into libp2p as a stream muxer. - -## Install - -```sh -go get github.com/libp2p/go-libp2p-yamux -``` - -## Usage - -Check out the [GoDocs](https://godoc.org/github.com/libp2p/go-libp2p-yamux). - -## License - -Dual-licensed under MIT and ASLv2, by way of the [Permissive License Stack](https://protocol.ai/blog/announcing-the-permissive-license-stack/). diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/go.mod b/vendor/github.com/libp2p/go-libp2p-yamux/go.mod deleted file mode 100644 index 669a5e2f8c..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-yamux/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/libp2p/go-libp2p-yamux - -go 1.16 - -require ( - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-testing v0.7.0 - github.com/libp2p/go-yamux/v3 v3.0.2 -) diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/go.sum b/vendor/github.com/libp2p/go-libp2p-yamux/go.sum deleted file mode 100644 index a3da2a851d..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-yamux/go.sum +++ /dev/null @@ -1,172 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-yamux/v3 v3.0.2 h1:LW0q5+A1Wy0npEsPJP9wmare2NH4ohNluN5EWVwv2mE= -github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/version.json b/vendor/github.com/libp2p/go-libp2p-yamux/version.json deleted file mode 100644 index 8047016a4e..0000000000 --- a/vendor/github.com/libp2p/go-libp2p-yamux/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.8.1" -} diff --git a/vendor/github.com/libp2p/go-libp2p/README.md b/vendor/github.com/libp2p/go-libp2p/README.md index 131ca6c519..591b296890 100644 --- a/vendor/github.com/libp2p/go-libp2p/README.md +++ b/vendor/github.com/libp2p/go-libp2p/README.md @@ -8,7 +8,7 @@

- + Go Reference

@@ -19,25 +19,23 @@ - [Examples](#examples) - [Development](#development) - [Using the go-libp2p Workspace](#using-the-go-libp2p-workspace) - - [About gx](#about-gx) - [Tests](#tests) - [Packages](#packages) - [Contribute](#contribute) +- [Supported Go Versions](#supported-go-versions) ## Background [libp2p](https://github.com/libp2p/specs) is a networking stack and library modularized out of [The IPFS Project](https://github.com/ipfs/ipfs), and bundled separately for other tools to use. > libp2p is the product of a long, and arduous quest of understanding -- a deep dive into the internet's network stack, and plentiful peer-to-peer protocols from the past. Building large-scale peer-to-peer systems has been complex and difficult in the last 15 years, and libp2p is a way to fix that. It is a "network stack" -- a protocol suite -- that cleanly separates concerns, and enables sophisticated applications to only use the protocols they absolutely need, without giving up interoperability and upgradeability. libp2p grew out of IPFS, but it is built so that lots of people can use it, for lots of different projects. -> -> We will be writing a set of docs, posts, tutorials, and talks to explain what p2p is, why it is tremendously useful, and how it can help your existing and new projects. But in the meantime, check out -> -> - [**Our developing collection of docs**](https://docs.libp2p.io) -> - [**Our community discussion forums**](https://discuss.libp2p.io) -> - [**The libp2p Specification**](https://github.com/libp2p/specs) -> - [**go-libp2p implementation**](https://github.com/libp2p/go-libp2p) -> - [**js-libp2p implementation**](https://github.com/libp2p/js-libp2p) -> - [**rust-libp2p implementation**](https://github.com/libp2p/rust-libp2p) + +To learn more, check out the following resources: +- [**Our documentation**](https://docs.libp2p.io) +- [**Our community discussion forum**](https://discuss.libp2p.io) +- [**The libp2p Specification**](https://github.com/libp2p/specs) +- [**js-libp2p implementation**](https://github.com/libp2p/js-libp2p) +- [**rust-libp2p implementation**](https://github.com/libp2p/rust-libp2p) ## Usage @@ -67,26 +65,10 @@ Once you've committed your changes, you can switch back to "remote mode", which See the [workspace repo](https://github.com/libp2p/workspace-go-libp2p) for more information. -### About gx - -Before adopting gomod, libp2p used [gx](https://github.com/whyrusleeping/gx) to manage dependencies using [IPFS](https://ipfs.io). - -Due to the difficulties in keeping both dependency management solutions up-to-date, gx support was ended in April 2019. - -Ending gx support does not mean that existing gx builds will break. Because gx references dependencies by their immutable IPFS hash, any currently working gx builds will continue to work for as long as the dependencies are resolvable in IPFS. - -However, new changes to go-libp2p will not be published via gx, and users are encouraged to adopt gomod to stay up-to-date. - -If you experience any issues migrating from gx to gomod, please [join the discussion at the libp2p forums](https://discuss.libp2p.io/t/gomod-and-go-libp2p/44). - ### Tests `go test ./...` will run all tests in the repo. -### Releasing - -Please start a release by opening a new [Libp2p Release](https://github.com/libp2p/go-libp2p/issues/new?assignees=&labels=kind/tracking&template=release.md) issue. - ### Packages > This table is generated using the module [`package-table`](https://github.com/ipfs-shipyard/package-table) with `package-table --data=package-list.json`. @@ -161,12 +143,9 @@ go-libp2p is part of [The IPFS Project](https://github.com/ipfs/ipfs), and is MI Guidelines: - read the [libp2p spec](https://github.com/libp2p/specs) -- please make branches + pull-request, even if working on the main repository -- ask questions or talk about things in [issues](https://github.com/libp2p/go-libp2p/issues), our [discussion forums](https://discuss.libp2p.io), or #libp2p or #ipfs on freenode. +- ask questions or talk about things in our [discussion forums](https://discuss.libp2p.io), or open an [issue](https://github.com/libp2p/go-libp2p/issues) for bug reports, or #libp2p on freenode. - ensure you are able to contribute (no legal issues please -- we use the DCO) -- run `go fmt` before pushing any code -- run `golint` and `go vet` too -- some things (like protobuf files) are expected to fail. -- get in touch with @raulk and @mgoelzer about how best to contribute +- get in touch with @marten-seemann about how best to contribute - have fun! There's a few things you can do right now to help out: @@ -174,6 +153,7 @@ There's a few things you can do right now to help out: - **Perform code reviews**. - **Add tests**. There can never be enough tests. ---- +## Supported Go Versions -The last gx published version of this module was: 6.0.41: QmTRN7hRxvGkxKxDdeudty7sRet4L7ZKZCqKsXHa79wmAc +We test against and support the two most recent major releases of Go. This is +informed by Go's own [security policy](https://go.dev/security). \ No newline at end of file diff --git a/vendor/github.com/libp2p/go-libp2p/config/config.go b/vendor/github.com/libp2p/go-libp2p/config/config.go index a9a264158a..e1ce654562 100644 --- a/vendor/github.com/libp2p/go-libp2p/config/config.go +++ b/vendor/github.com/libp2p/go-libp2p/config/config.go @@ -18,19 +18,17 @@ import ( "github.com/libp2p/go-libp2p-core/transport" "github.com/libp2p/go-libp2p-peerstore/pstoremem" - drouting "github.com/libp2p/go-libp2p/p2p/discovery/routing" "github.com/libp2p/go-libp2p/p2p/host/autonat" "github.com/libp2p/go-libp2p/p2p/host/autorelay" bhost "github.com/libp2p/go-libp2p/p2p/host/basic" + blankhost "github.com/libp2p/go-libp2p/p2p/host/blank" routed "github.com/libp2p/go-libp2p/p2p/host/routed" + "github.com/libp2p/go-libp2p/p2p/net/swarm" + tptu "github.com/libp2p/go-libp2p/p2p/net/upgrader" circuitv2 "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/client" relayv2 "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/relay" "github.com/libp2p/go-libp2p/p2p/protocol/holepunch" - blankhost "github.com/libp2p/go-libp2p-blankhost" - swarm "github.com/libp2p/go-libp2p-swarm" - tptu "github.com/libp2p/go-libp2p-transport-upgrader" - logging "github.com/ipfs/go-log/v2" ma "github.com/multiformats/go-multiaddr" madns "github.com/multiformats/go-multiaddr-dns" @@ -101,8 +99,8 @@ type Config struct { Routing RoutingC EnableAutoRelay bool + AutoRelayOpts []autorelay.Option AutoNATConfig - StaticRelayOpt autorelay.StaticRelayOption EnableHolePunching bool HolePunchingOptions []holepunch.Option @@ -270,7 +268,7 @@ func (cfg *Config) NewNode() (host.Host, error) { } } - // Note: h.AddrsFactory may be changed by AutoRelay, but non-relay version is + // Note: h.AddrsFactory may be changed by relayFinder, but non-relay version is // used by AutoNAT below. var ar *autorelay.AutoRelay addrF := h.AddrsFactory @@ -280,22 +278,7 @@ func (cfg *Config) NewNode() (host.Host, error) { return nil, fmt.Errorf("cannot enable autorelay; relay is not enabled") } - var opts []autorelay.Option - if cfg.StaticRelayOpt != nil { - opts = append(opts, autorelay.Option(cfg.StaticRelayOpt)) - } else { - if router == nil { - h.Close() - return nil, fmt.Errorf("cannot enable autorelay; no routing for discovery") - } - crouter, ok := router.(routing.ContentRouting) - if !ok { - h.Close() - return nil, fmt.Errorf("cannot enable autorelay; no suitable routing for discovery") - } - opts = append(opts, autorelay.WithDiscoverer(drouting.NewRoutingDiscovery(crouter))) - } - ar, err = autorelay.NewAutoRelay(h, router, opts...) + ar, err = autorelay.NewAutoRelay(h, cfg.AutoRelayOpts...) if err != nil { return nil, err } diff --git a/vendor/github.com/libp2p/go-libp2p/config/muxer.go b/vendor/github.com/libp2p/go-libp2p/config/muxer.go index f59d204c30..2b3e857083 100644 --- a/vendor/github.com/libp2p/go-libp2p/config/muxer.go +++ b/vendor/github.com/libp2p/go-libp2p/config/muxer.go @@ -3,7 +3,7 @@ package config import ( "fmt" - msmux "github.com/libp2p/go-stream-muxer-multistream" + msmux "github.com/libp2p/go-libp2p/p2p/muxer/muxer-multistream" "github.com/libp2p/go-libp2p-core/network" diff --git a/vendor/github.com/libp2p/go-libp2p/config/security.go b/vendor/github.com/libp2p/go-libp2p/config/security.go index 0f6c78871a..bac3eb2185 100644 --- a/vendor/github.com/libp2p/go-libp2p/config/security.go +++ b/vendor/github.com/libp2p/go-libp2p/config/security.go @@ -3,13 +3,13 @@ package config import ( "fmt" + csms "github.com/libp2p/go-libp2p/p2p/net/conn-security-multistream" + "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/host" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/sec" "github.com/libp2p/go-libp2p-core/sec/insecure" - - csms "github.com/libp2p/go-conn-security-multistream" ) // SecC is a security transport constructor. diff --git a/vendor/github.com/libp2p/go-libp2p/defaults.go b/vendor/github.com/libp2p/go-libp2p/defaults.go index f3e8aeba43..7cca89a6cf 100644 --- a/vendor/github.com/libp2p/go-libp2p/defaults.go +++ b/vendor/github.com/libp2p/go-libp2p/defaults.go @@ -5,17 +5,18 @@ package libp2p import ( "crypto/rand" + "github.com/libp2p/go-libp2p/p2p/muxer/yamux" + "github.com/libp2p/go-libp2p/p2p/net/connmgr" + "github.com/libp2p/go-libp2p/p2p/security/noise" + tls "github.com/libp2p/go-libp2p/p2p/security/tls" + quic "github.com/libp2p/go-libp2p/p2p/transport/quic" + "github.com/libp2p/go-libp2p/p2p/transport/tcp" + ws "github.com/libp2p/go-libp2p/p2p/transport/websocket" + "github.com/libp2p/go-libp2p-core/crypto" - mplex "github.com/libp2p/go-libp2p-mplex" - noise "github.com/libp2p/go-libp2p-noise" + "github.com/libp2p/go-libp2p-peerstore/pstoremem" - quic "github.com/libp2p/go-libp2p-quic-transport" rcmgr "github.com/libp2p/go-libp2p-resource-manager" - tls "github.com/libp2p/go-libp2p-tls" - yamux "github.com/libp2p/go-libp2p-yamux" - "github.com/libp2p/go-libp2p/p2p/net/connmgr" - "github.com/libp2p/go-tcp-transport" - ws "github.com/libp2p/go-ws-transport" "github.com/multiformats/go-multiaddr" ) @@ -32,10 +33,7 @@ var DefaultSecurity = ChainOptions( // // Use this option when you want to *extend* the set of multiplexers used by // libp2p instead of replacing them. -var DefaultMuxers = ChainOptions( - Muxer("/yamux/1.0.0", yamux.DefaultTransport), - Muxer("/mplex/6.7.0", mplex.DefaultTransport), -) +var DefaultMuxers = Muxer("/yamux/1.0.0", yamux.DefaultTransport) // DefaultTransports are the default libp2p transports. // diff --git a/vendor/github.com/libp2p/go-libp2p/go.mod b/vendor/github.com/libp2p/go-libp2p/go.mod deleted file mode 100644 index 07b7202b9d..0000000000 --- a/vendor/github.com/libp2p/go-libp2p/go.mod +++ /dev/null @@ -1,63 +0,0 @@ -module github.com/libp2p/go-libp2p - -go 1.16 - -require ( - github.com/benbjohnson/clock v1.1.0 - github.com/btcsuite/btcd v0.22.0-beta // indirect - github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c // indirect - github.com/gogo/protobuf v1.3.2 - github.com/golang/mock v1.6.0 - github.com/google/uuid v1.3.0 // indirect - github.com/hashicorp/golang-lru v0.5.4 - github.com/huin/goupnp v1.0.2 // indirect - github.com/ipfs/go-cid v0.0.7 - github.com/ipfs/go-datastore v0.5.0 - github.com/ipfs/go-ipfs-util v0.0.2 - github.com/ipfs/go-log/v2 v2.5.0 - github.com/klauspost/cpuid/v2 v2.0.9 // indirect - github.com/koron/go-ssdp v0.0.2 // indirect - github.com/libp2p/go-buffer-pool v0.0.2 - github.com/libp2p/go-conn-security-multistream v0.3.0 - github.com/libp2p/go-eventbus v0.2.1 - github.com/libp2p/go-libp2p-asn-util v0.1.0 - github.com/libp2p/go-libp2p-blankhost v0.3.0 - github.com/libp2p/go-libp2p-circuit v0.6.0 - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-mplex v0.5.0 - github.com/libp2p/go-libp2p-nat v0.1.0 - github.com/libp2p/go-libp2p-noise v0.3.0 - github.com/libp2p/go-libp2p-peerstore v0.6.0 - github.com/libp2p/go-libp2p-quic-transport v0.16.0 - github.com/libp2p/go-libp2p-resource-manager v0.1.2 - github.com/libp2p/go-libp2p-swarm v0.10.1 - github.com/libp2p/go-libp2p-testing v0.7.0 - github.com/libp2p/go-libp2p-tls v0.3.1 - github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 - github.com/libp2p/go-libp2p-yamux v0.8.1 - github.com/libp2p/go-msgio v0.1.0 - github.com/libp2p/go-netroute v0.2.0 - github.com/libp2p/go-stream-muxer-multistream v0.4.0 - github.com/libp2p/go-tcp-transport v0.5.0 - github.com/libp2p/go-ws-transport v0.6.0 - github.com/libp2p/zeroconf/v2 v2.1.1 - github.com/multiformats/go-multiaddr v0.5.0 - github.com/multiformats/go-multiaddr-dns v0.3.1 - github.com/multiformats/go-multihash v0.0.15 - github.com/multiformats/go-multistream v0.2.2 - github.com/multiformats/go-varint v0.0.6 - github.com/prometheus/common v0.30.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect - github.com/raulk/go-watchdog v1.2.0 - github.com/stretchr/testify v1.7.0 - github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9 - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/multierr v1.7.0 // indirect - golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e // indirect - golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 // indirect - golang.org/x/text v0.3.7 // indirect - google.golang.org/grpc v1.40.0 // indirect - google.golang.org/protobuf v1.27.1 // indirect -) diff --git a/vendor/github.com/libp2p/go-libp2p/go.sum b/vendor/github.com/libp2p/go-libp2p/go.sum deleted file mode 100644 index f0acb9a3b5..0000000000 --- a/vendor/github.com/libp2p/go-libp2p/go.sum +++ /dev/null @@ -1,1269 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/btcsuite/btcd v0.0.0-20190523000118-16327141da8c/go.mod h1:3J08xEfcugPacsc34/LKRU2yO7YmuT8yt28J8k2+rrI= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327 h1:7grrpcfCtbZLsjtB0DgMuzs1umsJmpzaHMZ6cO6iAWw= -github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d h1:t5Wuyh53qYyg9eqn4BbnlIT+vmhyww0TatL+zT3uWgI= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c/go.mod h1:6UhI8N9EjYm1c2odKpFpAYeR8dsBeM7PtzQhRgxRr9U= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/dgraph-io/badger v1.6.2/go.mod h1:JW2yswe3V058sS0kZ2h/AXeDSqFjxnZcRrVH//y2UQE= -github.com/dgraph-io/ristretto v0.0.2/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elastic/gosigar v0.12.0 h1:AsdhYCJlTudhfOYQyFNgx+fIVTfrDO0V1ST0vHgiapU= -github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= -github.com/flynn/noise v1.0.0/go.mod h1:xbMo+0i6+IGbYdJhF31t2eR1BIU0CYc12+BNAKwUTag= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goupnp v1.0.2 h1:RfGLP+h3mvisuWEyybxNq5Eft3NWhHLPeUN72kpKZoI= -github.com/huin/goupnp v1.0.2/go.mod h1:0dxJBVBHqTMjIUMkESDTNgOOx/Mw5wYIfyFmdzSamkM= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.2/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-datastore v0.5.0 h1:rQicVCEacWyk4JZ6G5bD9TKR7lZEG1MWcG7UdWYrFAU= -github.com/ipfs/go-datastore v0.5.0/go.mod h1:9zhEApYMTl17C8YDp7JmU7sQZi2/wqiYh73hakZ90Bk= -github.com/ipfs/go-detect-race v0.0.1 h1:qX/xay2W3E4Q1U7d9lNs1sU9nvguX0a7319XbyQ6cOk= -github.com/ipfs/go-detect-race v0.0.1/go.mod h1:8BNT7shDZPo99Q74BpGMK+4D8Mn4j46UU0LZ723meps= -github.com/ipfs/go-ds-badger v0.3.0/go.mod h1:1ke6mXNqeV8K3y5Ak2bAA0osoTfmxUdupVCGm4QUIek= -github.com/ipfs/go-ds-leveldb v0.5.0/go.mod h1:d3XG9RUDzQ6V4SHi8+Xgj9j1XuEk1z82lquxrVbml/Q= -github.com/ipfs/go-ipfs-delay v0.0.0-20181109222059-70721b86a9a8/go.mod h1:8SP1YXK1M1kXuc4KJZINY3TQQ03J2rwBG9QfXmbRPrw= -github.com/ipfs/go-ipfs-util v0.0.2 h1:59Sswnk1MFaiq+VcaknX7aYEyGyGDAA73ilhEK2POp8= -github.com/ipfs/go-ipfs-util v0.0.2/go.mod h1:CbPtkWJzjLdEcezDns2XYaehFVNXG9zrdrtMecczcsQ= -github.com/ipfs/go-log v0.0.1/go.mod h1:kL1d2/hzSpI0thNYjiKfjanbVNU+IIGA/WnNESY9leM= -github.com/ipfs/go-log v1.0.4/go.mod h1:oDCg2FkjogeFOhqqb+N39l2RpTNPL6F/StPkB3kPgcs= -github.com/ipfs/go-log v1.0.5 h1:2dOuUCB1Z7uoczMWgAyDck5JLb72zHzrMnGnCNNbvY8= -github.com/ipfs/go-log v1.0.5/go.mod h1:j0b8ZoR+7+R99LD9jZ6+AJsrzkPbSXbZfGakb5JPtIo= -github.com/ipfs/go-log/v2 v2.0.3/go.mod h1:O7P1lJt27vWHhOwQmcFEvlmo49ry2VY2+JfBWFaa9+0= -github.com/ipfs/go-log/v2 v2.0.5/go.mod h1:eZs4Xt4ZUJQFM3DlanGhy7TkwwawCZcSByscwkWG+dw= -github.com/ipfs/go-log/v2 v2.1.1/go.mod h1:2v2nsGfZsvvAJz13SyFzf9ObaqwHiHxsPLEHntrv9KM= -github.com/ipfs/go-log/v2 v2.1.3/go.mod h1:/8d0SH3Su5Ooc31QlL1WysJhvyOTDCjcCZ9Axpmri6g= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jbenet/goprocess v0.1.4/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/koron/go-ssdp v0.0.2 h1:fL3wAoyT6hXHQlORyXUW4Q23kkQpJRgEAYcZB5BR71o= -github.com/koron/go-ssdp v0.0.2/go.mod h1:XoLfkAiA2KeZsYh4DbHxD7h3nR2AZNqVQOa+LJuqPYs= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1 h1:Fmg33tUaq4/8ym9TJN1x7sLJnHVwhP33CNkpYV/7rwI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-addr-util v0.1.0/go.mod h1:6I3ZYuFr2O/9D+SoyM0zEw0EF3YkldtTX406BpdQMqw= -github.com/libp2p/go-buffer-pool v0.0.1/go.mod h1:xtyIz9PMobb13WaxR6Zo1Pd1zXJKYg0a8KiIvDp3TzQ= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-cidranger v1.1.0/go.mod h1:KWZTfSr+r9qEo9OkI9/SIEeAtw+NNoU0dXIXt15Okic= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-eventbus v0.2.1 h1:VanAdErQnpTioN2TowqNcOijf6YwhuODe4pPKSDpxGc= -github.com/libp2p/go-eventbus v0.2.1/go.mod h1:jc2S4SoEVPP48H9Wpzm5aiGwUCBMfGhVhhBjyhhCJs8= -github.com/libp2p/go-flow-metrics v0.0.1/go.mod h1:Iv1GH0sG8DtYN3SVJ2eG221wMiNpZxBdp967ls1g+k8= -github.com/libp2p/go-flow-metrics v0.0.3 h1:8tAs/hSdNvUiLgtlSy3mxwxWP4I9y/jlkPFT7epKdeM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-asn-util v0.1.0 h1:rABPCO77SjdbJ/eJ/ynIo8vWICy1VEnL5JAxJbQLo1E= -github.com/libp2p/go-libp2p-asn-util v0.1.0/go.mod h1:wu+AnM9Ii2KgO5jMmS1rz9dvzTdj8BXqsPR9HR0XB7I= -github.com/libp2p/go-libp2p-blankhost v0.2.0/go.mod h1:eduNKXGTioTuQAUcZ5epXi9vMl+t4d8ugUBRQ4SqaNQ= -github.com/libp2p/go-libp2p-blankhost v0.3.0 h1:kTnLArltMabZlzY63pgGDA4kkUcLkBFSM98zBssn/IY= -github.com/libp2p/go-libp2p-blankhost v0.3.0/go.mod h1:urPC+7U01nCGgJ3ZsV8jdwTp6Ji9ID0dMTvq+aJ+nZU= -github.com/libp2p/go-libp2p-circuit v0.6.0 h1:rw/HlhmUB3OktS/Ygz6+2XABOmHKzZpPUuMNUMosj8w= -github.com/libp2p/go-libp2p-circuit v0.6.0/go.mod h1:kB8hY+zCpMeScyvFrKrGicRdid6vNXbunKE4rXATZ0M= -github.com/libp2p/go-libp2p-core v0.2.0/go.mod h1:X0eyB0Gy93v0DZtSYbEM7RnMChm9Uv3j7yRXjO77xSI= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.5.1/go.mod h1:uN7L2D4EvPCvzSH5SrhR72UWbnSGpt5/a35Sm4upn4Y= -github.com/libp2p/go-libp2p-core v0.5.7/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.6.0/go.mod h1:txwbVEhHEXikXn9gfC7/UDDw7rkxuX0bJvM49Ykaswo= -github.com/libp2p/go-libp2p-core v0.8.0/go.mod h1:FfewUH/YpvWbEB+ZY9AQRQ4TAD8sJBt/G1rVvhz5XT8= -github.com/libp2p/go-libp2p-core v0.8.6/go.mod h1:dgHr0l0hIKfWpGpqAMbpo19pen9wJfdCGv51mTmdpmM= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.11.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.12.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-mplex v0.4.1/go.mod h1:cmy+3GfqfM1PceHTLL7zQzAAYaryDu6iPSC+CIb094g= -github.com/libp2p/go-libp2p-mplex v0.5.0 h1:vt3k4E4HSND9XH4Z8rUpacPJFSAgLOv6HDvG8W9Ks9E= -github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= -github.com/libp2p/go-libp2p-nat v0.1.0 h1:vigUi2MEN+fwghe5ijpScxtbbDz+L/6y8XwlzYOJgSY= -github.com/libp2p/go-libp2p-nat v0.1.0/go.mod h1:DQzAG+QbDYjN1/C3B6vXucLtz3u9rEonLVPtZVzQqks= -github.com/libp2p/go-libp2p-noise v0.3.0 h1:NCVH7evhVt9njbTQshzT7N1S3Q6fjj9M11FCgfH5+cA= -github.com/libp2p/go-libp2p-noise v0.3.0/go.mod h1:JNjHbociDJKHD64KTkzGnzqJ0FEV5gHJa6AB00kbCNQ= -github.com/libp2p/go-libp2p-peerstore v0.4.0/go.mod h1:rDJUFyzEWPpXpEwywkcTYYzDHlwza8riYMaUzaN6hX0= -github.com/libp2p/go-libp2p-peerstore v0.6.0 h1:HJminhQSGISBIRb93N6WK3t6Fa8OOTnHd/VBjL4mY5A= -github.com/libp2p/go-libp2p-peerstore v0.6.0/go.mod h1:DGEmKdXrcYpK9Jha3sS7MhqYdInxJy84bIPtSu65bKc= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-quic-transport v0.13.0/go.mod h1:39/ZWJ1TW/jx1iFkKzzUg00W6tDJh73FC0xYudjr7Hc= -github.com/libp2p/go-libp2p-quic-transport v0.16.0 h1:aVg9/jr+R2esov5sH7wkXrmYmqJiUjtLMLYX3L9KYdY= -github.com/libp2p/go-libp2p-quic-transport v0.16.0/go.mod h1:1BXjVMzr+w7EkPfiHkKnwsWjPjtfaNT0q8RS3tGDvEQ= -github.com/libp2p/go-libp2p-resource-manager v0.1.2 h1:t66B/6EF6ivWEUgvO34NKOT3oPtkb+JTBJHdsIMx+mg= -github.com/libp2p/go-libp2p-resource-manager v0.1.2/go.mod h1:wJPNjeE4XQlxeidwqVY5G6DLOKqFK33u2n8blpl0I6Y= -github.com/libp2p/go-libp2p-swarm v0.8.0/go.mod h1:sOMp6dPuqco0r0GHTzfVheVBh6UEL0L1lXUZ5ot2Fvc= -github.com/libp2p/go-libp2p-swarm v0.10.0/go.mod h1:71ceMcV6Rg/0rIQ97rsZWMzto1l9LnNquef+efcRbmA= -github.com/libp2p/go-libp2p-swarm v0.10.1 h1:lXW3pgGt+BVmkzcFX61erX7l6Lt+WAamNhwa2Kf3eJM= -github.com/libp2p/go-libp2p-swarm v0.10.1/go.mod h1:Pdkq0QU5a+qu+oyqIV3bknMsnzk9lnNyKvB9acJ5aZs= -github.com/libp2p/go-libp2p-testing v0.1.1/go.mod h1:xaZWMJrPUM5GlDBxCeGUi7kI4eqnjVyavGroI2nxEM0= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.4.0/go.mod h1:Q+PFXYoiYFN5CAEG2w3gLPEzotlKsNSbKQ/lImlOWF0= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-libp2p-tls v0.3.0/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-tls v0.3.1 h1:lsE2zYte+rZCEOHF72J1Fg3XK3dGQyKvI6i5ehJfEp0= -github.com/libp2p/go-libp2p-tls v0.3.1/go.mod h1:fwF5X6PWGxm6IDRwF3V8AVCCj/hOd5oFlg+wo2FxJDY= -github.com/libp2p/go-libp2p-transport-upgrader v0.5.0/go.mod h1:Rc+XODlB3yce7dvFV4q/RmyJGsFcCZRkeZMu/Zdg0mo= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= -github.com/libp2p/go-libp2p-yamux v0.5.0/go.mod h1:AyR8k5EzyM2QN9Bbdg6X1SkVVuqLwTGf0L4DFq9g6po= -github.com/libp2p/go-libp2p-yamux v0.8.0/go.mod h1:yTkPgN2ib8FHyU1ZcVD7aelzyAqXXwEPbyx+aSKm9h8= -github.com/libp2p/go-libp2p-yamux v0.8.1 h1:pi7zUeZ4Z9TpbUMntvSvoP3dFD4SEw/VPybxBcOZGzg= -github.com/libp2p/go-libp2p-yamux v0.8.1/go.mod h1:rUozF8Jah2dL9LLGyBaBeTQeARdwhefMCTQVQt6QobE= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.3.0/go.mod h1:0Oy/A9PQlwBytDRp4wSkFnzHYDKcpLot35JQ6msjvYQ= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= -github.com/libp2p/go-msgio v0.0.4/go.mod h1:63lBBgOTDKQL6EWazRMCwXsEeEeK9O2Cd+0+6OOuipQ= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-msgio v0.1.0 h1:8Q7g/528ivAlfXTFWvWhVjTE8XG8sDTkRUKPYh9+5Q8= -github.com/libp2p/go-msgio v0.1.0/go.mod h1:eNlv2vy9V2X/kNldcZ+SShFE++o2Yjxwx6RAYsmgJnE= -github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= -github.com/libp2p/go-nat v0.1.0/go.mod h1:X7teVkwRHNInVNWQiO/tAiAVRwSr5zoRz4YSTC3uRBM= -github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-netroute v0.2.0/go.mod h1:Vio7LTzZ+6hoT4CMZi5/6CpY3Snzh2vgZhWgxMNwlQI= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.5/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= -github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-stream-muxer-multistream v0.3.0/go.mod h1:yDh8abSIzmZtqtOt64gFJUXEryejzNb0lisTt+fAMJA= -github.com/libp2p/go-stream-muxer-multistream v0.4.0 h1:HsM/9OdtqnIzjVXcxTXjmqKrj3gJ8kacaOJwJS1ipaY= -github.com/libp2p/go-stream-muxer-multistream v0.4.0/go.mod h1:nb+dGViZleRP4XcyHuZSVrJCBl55nRBOMmiSL/dyziw= -github.com/libp2p/go-tcp-transport v0.4.0/go.mod h1:0y52Rwrn4076xdJYu/51/qJIdxz+EWDAOG2S45sV3VI= -github.com/libp2p/go-tcp-transport v0.5.0 h1:3ZPW8HAuyRAuFzyabE0hSrCXKKSWzROnZZX7DtcIatY= -github.com/libp2p/go-tcp-transport v0.5.0/go.mod h1:UPPL0DIjQqiWRwVAb+CEQlaAG0rp/mCqJfIhFcLHc4Y= -github.com/libp2p/go-ws-transport v0.6.0 h1:326XBL6Q+5CQ2KtjXz32+eGu02W/Kz2+Fm4SpXdr0q4= -github.com/libp2p/go-ws-transport v0.6.0/go.mod h1:dXqtI9e2JV9FtF1NOtWVZSKXh5zXvnuwPXfj8GPBbYU= -github.com/libp2p/go-yamux v1.4.1 h1:P1Fe9vF4th5JOxxgQvfbOHkrGqIZniTLf+ddhZp8YTI= -github.com/libp2p/go-yamux v1.4.1/go.mod h1:fr7aVgmdNGJK+N1g+b6DW6VxzbRCjCOejR/hkmpooHE= -github.com/libp2p/go-yamux/v3 v3.0.1/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/libp2p/go-yamux/v3 v3.0.2 h1:LW0q5+A1Wy0npEsPJP9wmare2NH4ohNluN5EWVwv2mE= -github.com/libp2p/go-yamux/v3 v3.0.2/go.mod h1:s2LsDhHbh+RfCsQoICSYt58U2f8ijtPANFD8BmE74Bo= -github.com/libp2p/zeroconf/v2 v2.1.1 h1:XAuSczA96MYkVwH+LqqqCUZb2yH3krobMJ1YE+0hG2s= -github.com/libp2p/zeroconf/v2 v2.1.1/go.mod h1:fuJqLnUwZTshS3U/bMRJ3+ow/v9oid1n0DmyYyNO1Xs= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lucas-clemente/quic-go v0.23.0/go.mod h1:paZuzjXCE5mj6sikVLMvqXk8lJV2AsqtJ6bDhjEfxx0= -github.com/lucas-clemente/quic-go v0.25.0 h1:K+X9Gvd7JXsOHtU0N2icZ2Nw3rx82uBej3mP4CLgibc= -github.com/lucas-clemente/quic-go v0.25.0/go.mod h1:YtzP8bxRVCBlO77yRanE264+fY/T2U9ZlW1AaHOsMOg= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 h1:EnzzN9fPUkUck/1CuY1FlzBaIYMoiBsdwTNmNGkwUUM= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43 h1:JKfpVSCB84vrAmHzyrsxB5NAr5kLoMXZArPSw7Qlgyg= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.0.0-20190328051042-05b4dd3047e5/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.0/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.0.4/go.mod h1:xKVEak1K9cS1VdmPZW3LSIb6lgmoS58qz/pzqmAxV44= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.3.3/go.mod h1:lCKNGP1EQ1eZ35Za2wlqnabm9xQkib3fyB+nZXHLag0= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multiaddr v0.5.0 h1:i/JuOoVg4szYQ4YEzDGtb2h0o8M7CG/Yq6cGlcjWZpM= -github.com/multiformats/go-multiaddr v0.5.0/go.mod h1:3KAxNkUqLTJ20AAwN4XVX4kZar+bR+gh4zgbfr3SNug= -github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multiaddr-dns v0.3.1/go.mod h1:G/245BRQ6FJGmryJCrOuTdB37AMA5AMOVuO6NY3JwTk= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.5/go.mod h1:lt/HCbqlQwlPBz7lv0sQCdtfcMtlJvakRUn/0Ual8po= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-multistream v0.2.2 h1:TCYu1BHTDr1F/Qm75qwYISQdzGcRdC21nFgQW7l7GBo= -github.com/multiformats/go-multistream v0.2.2/go.mod h1:UIcnm7Zuo8HKG+HkWgfQsGL+/MIEhyTqbODbIUwSXKs= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.0/go.mod h1:oUhWkIvk5aDxtKvDDuw8gItl8pKl42LzjC9KZE0HfGg= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.9.0/go.mod h1:FqZLKOZnGdFAhOK4nqGHa7D66IdsO+O441Eve7ptJDU= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_golang v1.11.0 h1:HNkLOAEQMIDv/K+04rukrLx6ch7msSRwf3/SASFAGtQ= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0 h1:JEkYlQnpzrzQFxi6gnukFPdQ+ac82oRhzMcIduJu/Ug= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y= -github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmOeY0= -github.com/raulk/go-watchdog v1.2.0 h1:konN75pw2BMmZ+AfuAm5rtFsWcJpKF3m02rKituuXNo= -github.com/raulk/go-watchdog v1.2.0/go.mod h1:lzSbAl5sh4rtI8tYHU01BWIDzgzqaQLj6RcA1i4mlqI= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/spacemonkeygo/openssl v0.0.0-20181017203307-c2dcc5cca94a/go.mod h1:7AyxJNCJ7SBZ1MfVQCWD6Uqo2oubI2Eq2y2eqf+A5r0= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/whyrusleeping/go-logging v0.0.0-20170515211332-0457bb6b88fc/go.mod h1:bopw91TMyo8J3tvftk8xmU2kPmlrt4nScJQZU2hE5EM= -github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9 h1:Y1/FEOpaCpD21WxrmfeIYCFPuVPRCY2XZTWzTNHGw30= -github.com/whyrusleeping/mdns v0.0.0-20190826153040-b9b60ed33aa9/go.mod h1:j4l84WPFclQPj320J9gp0XwNKBb3U0zt5CBqjPp22G4= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 h1:E9S12nwJwEOXe2d6gT6qxdvqMnNq+VnSsKPgm2ZZNds= -github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7/go.mod h1:X2c0RVCI1eSUFI8eLcY3c0423ykwiUdxLJtkDvruhjI= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0 h1:zaiO/rmgFjbmCXdSYJWQcdvOCsthmdaHfr3Gm2Kx4Ec= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.14.1/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200602180216-279210d13fed/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210322153248-0c34fe9e7dc2/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210506145944-38f3c27a63bf/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e h1:VvfwVmMH40bpMeizC9/K7ipM5Qjucuu16RWfneFPyhQ= -golang.org/x/crypto v0.0.0-20210813211128-0a44fdfbc16e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190227160552-c95aed5357e7/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d h1:LO7XpTYMwTqxjLcGWPijK3vRXg1aWdlNOVOHRq45d7c= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191206220618-eeba5f6aabab/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912 h1:uCLL3g5wH2xjxVREVuAbP9JM5PPKjRbXKRa6IBjkzmU= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.40.0 h1:AGJ0Ih4mHjSeibYkFGh1dD9KJ/eOtZ93I6hoHhukQ5Q= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/libp2p/go-libp2p/options.go b/vendor/github.com/libp2p/go-libp2p/options.go index 6821f4ed4f..ce40fa5d34 100644 --- a/vendor/github.com/libp2p/go-libp2p/options.go +++ b/vendor/github.com/libp2p/go-libp2p/options.go @@ -250,15 +250,10 @@ func EnableRelayService(opts ...relayv2.Option) Option { // // This subsystem performs automatic address rewriting to advertise relay addresses when it // detects that the node is publicly unreachable (e.g. behind a NAT). -func EnableAutoRelay(opts ...autorelay.StaticRelayOption) Option { +func EnableAutoRelay(opts ...autorelay.Option) Option { return func(cfg *Config) error { - if len(opts) > 0 { - if len(opts) > 1 { - return errors.New("only expected a single static relay configuration option") - } - cfg.StaticRelayOpt = opts[0] - } cfg.EnableAutoRelay = true + cfg.AutoRelayOpts = opts return nil } } @@ -269,7 +264,7 @@ func EnableAutoRelay(opts ...autorelay.StaticRelayOption) Option { // Deprecated: pass an autorelay.WithStaticRelays option to EnableAutoRelay. func StaticRelays(relays []peer.AddrInfo) Option { return func(cfg *Config) error { - cfg.StaticRelayOpt = autorelay.WithStaticRelays(relays) + cfg.AutoRelayOpts = append(cfg.AutoRelayOpts, autorelay.WithStaticRelays(relays)) return nil } } diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoff.go b/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoff.go new file mode 100644 index 0000000000..242821ec19 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoff.go @@ -0,0 +1,232 @@ +package backoff + +import ( + "math" + "math/rand" + "sync" + "time" + + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("discovery-backoff") + +type BackoffFactory func() BackoffStrategy + +// BackoffStrategy describes how backoff will be implemented. BackoffStratgies are stateful. +type BackoffStrategy interface { + // Delay calculates how long the next backoff duration should be, given the prior calls to Delay + Delay() time.Duration + // Reset clears the internal state of the BackoffStrategy + Reset() +} + +// Jitter implementations taken roughly from https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ + +// Jitter must return a duration between min and max. Min must be lower than, or equal to, max. +type Jitter func(duration, min, max time.Duration, rng *rand.Rand) time.Duration + +// FullJitter returns a random number uniformly chose from the range [min, boundedDur]. +// boundedDur is the duration bounded between min and max. +func FullJitter(duration, min, max time.Duration, rng *rand.Rand) time.Duration { + if duration <= min { + return min + } + + normalizedDur := boundedDuration(duration, min, max) - min + + return boundedDuration(time.Duration(rng.Int63n(int64(normalizedDur)))+min, min, max) +} + +// NoJitter returns the duration bounded between min and max +func NoJitter(duration, min, max time.Duration, rng *rand.Rand) time.Duration { + return boundedDuration(duration, min, max) +} + +type randomizedBackoff struct { + min time.Duration + max time.Duration + rng *rand.Rand +} + +func (b *randomizedBackoff) BoundedDelay(duration time.Duration) time.Duration { + return boundedDuration(duration, b.min, b.max) +} + +func boundedDuration(d, min, max time.Duration) time.Duration { + if d < min { + return min + } + if d > max { + return max + } + return d +} + +type attemptBackoff struct { + attempt int + jitter Jitter + randomizedBackoff +} + +func (b *attemptBackoff) Reset() { + b.attempt = 0 +} + +// NewFixedBackoff creates a BackoffFactory with a constant backoff duration +func NewFixedBackoff(delay time.Duration) BackoffFactory { + return func() BackoffStrategy { + return &fixedBackoff{delay: delay} + } +} + +type fixedBackoff struct { + delay time.Duration +} + +func (b *fixedBackoff) Delay() time.Duration { + return b.delay +} + +func (b *fixedBackoff) Reset() {} + +// NewPolynomialBackoff creates a BackoffFactory with backoff of the form c0*x^0, c1*x^1, ...cn*x^n where x is the attempt number +// jitter is the function for adding randomness around the backoff +// timeUnits are the units of time the polynomial is evaluated in +// polyCoefs is the array of polynomial coefficients from [c0, c1, ... cn] +func NewPolynomialBackoff(min, max time.Duration, jitter Jitter, + timeUnits time.Duration, polyCoefs []float64, rngSrc rand.Source) BackoffFactory { + rng := rand.New(&lockedSource{src: rngSrc}) + return func() BackoffStrategy { + return &polynomialBackoff{ + attemptBackoff: attemptBackoff{ + randomizedBackoff: randomizedBackoff{ + min: min, + max: max, + rng: rng, + }, + jitter: jitter, + }, + timeUnits: timeUnits, + poly: polyCoefs, + } + } +} + +type polynomialBackoff struct { + attemptBackoff + timeUnits time.Duration + poly []float64 +} + +func (b *polynomialBackoff) Delay() time.Duration { + var polySum float64 + switch len(b.poly) { + case 0: + return 0 + case 1: + polySum = b.poly[0] + default: + polySum = b.poly[0] + exp := 1 + attempt := b.attempt + b.attempt++ + + for _, c := range b.poly[1:] { + exp *= attempt + polySum += float64(exp) * c + } + } + return b.jitter(time.Duration(float64(b.timeUnits)*polySum), b.min, b.max, b.rng) +} + +// NewExponentialBackoff creates a BackoffFactory with backoff of the form base^x + offset where x is the attempt number +// jitter is the function for adding randomness around the backoff +// timeUnits are the units of time the base^x is evaluated in +func NewExponentialBackoff(min, max time.Duration, jitter Jitter, + timeUnits time.Duration, base float64, offset time.Duration, rngSrc rand.Source) BackoffFactory { + rng := rand.New(&lockedSource{src: rngSrc}) + return func() BackoffStrategy { + return &exponentialBackoff{ + attemptBackoff: attemptBackoff{ + randomizedBackoff: randomizedBackoff{ + min: min, + max: max, + rng: rng, + }, + jitter: jitter, + }, + timeUnits: timeUnits, + base: base, + offset: offset, + } + } +} + +type exponentialBackoff struct { + attemptBackoff + timeUnits time.Duration + base float64 + offset time.Duration +} + +func (b *exponentialBackoff) Delay() time.Duration { + attempt := b.attempt + b.attempt++ + return b.jitter( + time.Duration(math.Pow(b.base, float64(attempt))*float64(b.timeUnits))+b.offset, b.min, b.max, b.rng) +} + +// NewExponentialDecorrelatedJitter creates a BackoffFactory with backoff of the roughly of the form base^x where x is the attempt number. +// Delays start at the minimum duration and after each attempt delay = rand(min, delay * base), bounded by the max +// See https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/ for more information +func NewExponentialDecorrelatedJitter(min, max time.Duration, base float64, rngSrc rand.Source) BackoffFactory { + rng := rand.New(&lockedSource{src: rngSrc}) + return func() BackoffStrategy { + return &exponentialDecorrelatedJitter{ + randomizedBackoff: randomizedBackoff{ + min: min, + max: max, + rng: rng, + }, + base: base, + } + } +} + +type exponentialDecorrelatedJitter struct { + randomizedBackoff + base float64 + lastDelay time.Duration +} + +func (b *exponentialDecorrelatedJitter) Delay() time.Duration { + if b.lastDelay < b.min { + b.lastDelay = b.min + return b.lastDelay + } + + nextMax := int64(float64(b.lastDelay) * b.base) + b.lastDelay = boundedDuration(time.Duration(b.rng.Int63n(nextMax-int64(b.min)))+b.min, b.min, b.max) + return b.lastDelay +} + +func (b *exponentialDecorrelatedJitter) Reset() { b.lastDelay = 0 } + +type lockedSource struct { + lk sync.Mutex + src rand.Source +} + +func (r *lockedSource) Int63() (n int64) { + r.lk.Lock() + n = r.src.Int63() + r.lk.Unlock() + return +} + +func (r *lockedSource) Seed(seed int64) { + r.lk.Lock() + r.src.Seed(seed) + r.lk.Unlock() +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoffcache.go b/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoffcache.go new file mode 100644 index 0000000000..9aacfdadc7 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoffcache.go @@ -0,0 +1,337 @@ +package backoff + +import ( + "context" + "fmt" + "sync" + "time" + + "github.com/libp2p/go-libp2p-core/discovery" + "github.com/libp2p/go-libp2p-core/peer" + + ma "github.com/multiformats/go-multiaddr" +) + +// BackoffDiscovery is an implementation of discovery that caches peer data and attenuates repeated queries +type BackoffDiscovery struct { + disc discovery.Discovery + stratFactory BackoffFactory + peerCache map[string]*backoffCache + peerCacheMux sync.RWMutex + + parallelBufSz int + returnedBufSz int + + clock clock +} + +type BackoffDiscoveryOption func(*BackoffDiscovery) error + +func NewBackoffDiscovery(disc discovery.Discovery, stratFactory BackoffFactory, opts ...BackoffDiscoveryOption) (discovery.Discovery, error) { + b := &BackoffDiscovery{ + disc: disc, + stratFactory: stratFactory, + peerCache: make(map[string]*backoffCache), + + parallelBufSz: 32, + returnedBufSz: 32, + + clock: realClock{}, + } + + for _, opt := range opts { + if err := opt(b); err != nil { + return nil, err + } + } + + return b, nil +} + +// WithBackoffDiscoverySimultaneousQueryBufferSize sets the buffer size for the channels between the main FindPeers query +// for a given namespace and all simultaneous FindPeers queries for the namespace +func WithBackoffDiscoverySimultaneousQueryBufferSize(size int) BackoffDiscoveryOption { + return func(b *BackoffDiscovery) error { + if size < 0 { + return fmt.Errorf("cannot set size to be smaller than 0") + } + b.parallelBufSz = size + return nil + } +} + +// WithBackoffDiscoveryReturnedChannelSize sets the size of the buffer to be used during a FindPeer query. +// Note: This does not apply if the query occurs during the backoff time +func WithBackoffDiscoveryReturnedChannelSize(size int) BackoffDiscoveryOption { + return func(b *BackoffDiscovery) error { + if size < 0 { + return fmt.Errorf("cannot set size to be smaller than 0") + } + b.returnedBufSz = size + return nil + } +} + +type clock interface { + Now() time.Time +} + +type realClock struct{} + +func (c realClock) Now() time.Time { + return time.Now() +} + +// withClock lets you override the default time.Now() call. Useful for tests. +func withClock(c clock) BackoffDiscoveryOption { + return func(b *BackoffDiscovery) error { + b.clock = c + return nil + } +} + +type backoffCache struct { + // strat is assigned on creation and not written to + strat BackoffStrategy + + mux sync.Mutex // guards writes to all following fields + nextDiscover time.Time + prevPeers map[peer.ID]peer.AddrInfo + peers map[peer.ID]peer.AddrInfo + sendingChs map[chan peer.AddrInfo]int + ongoing bool + + clock clock +} + +func (d *BackoffDiscovery) Advertise(ctx context.Context, ns string, opts ...discovery.Option) (time.Duration, error) { + return d.disc.Advertise(ctx, ns, opts...) +} + +func (d *BackoffDiscovery) FindPeers(ctx context.Context, ns string, opts ...discovery.Option) (<-chan peer.AddrInfo, error) { + // Get options + var options discovery.Options + err := options.Apply(opts...) + if err != nil { + return nil, err + } + + // Get cached peers + d.peerCacheMux.RLock() + c, ok := d.peerCache[ns] + d.peerCacheMux.RUnlock() + + /* + Overall plan: + If it's time to look for peers, look for peers, then return them + If it's not time then return cache + If it's time to look for peers, but we have already started looking. Get up to speed with ongoing request + */ + + // Setup cache if we don't have one yet + if !ok { + pc := &backoffCache{ + nextDiscover: time.Time{}, + prevPeers: make(map[peer.ID]peer.AddrInfo), + peers: make(map[peer.ID]peer.AddrInfo), + sendingChs: make(map[chan peer.AddrInfo]int), + strat: d.stratFactory(), + clock: d.clock, + } + + d.peerCacheMux.Lock() + c, ok = d.peerCache[ns] + + if !ok { + d.peerCache[ns] = pc + c = pc + } + + d.peerCacheMux.Unlock() + } + + c.mux.Lock() + defer c.mux.Unlock() + + timeExpired := d.clock.Now().After(c.nextDiscover) + + // If it's not yet time to search again and no searches are in progress then return cached peers + if !(timeExpired || c.ongoing) { + chLen := options.Limit + + if chLen == 0 { + chLen = len(c.prevPeers) + } else if chLen > len(c.prevPeers) { + chLen = len(c.prevPeers) + } + pch := make(chan peer.AddrInfo, chLen) + for _, ai := range c.prevPeers { + select { + case pch <- ai: + default: + // skip if we have asked for a lower limit than the number of peers known + } + } + close(pch) + return pch, nil + } + + // If a request is not already in progress setup a dispatcher channel for dispatching incoming peers + if !c.ongoing { + pch, err := d.disc.FindPeers(ctx, ns, opts...) + if err != nil { + return nil, err + } + + c.ongoing = true + go findPeerDispatcher(ctx, c, pch) + } + + // Setup receiver channel for receiving peers from ongoing requests + evtCh := make(chan peer.AddrInfo, d.parallelBufSz) + pch := make(chan peer.AddrInfo, d.returnedBufSz) + rcvPeers := make([]peer.AddrInfo, 0, 32) + for _, ai := range c.peers { + rcvPeers = append(rcvPeers, ai) + } + c.sendingChs[evtCh] = options.Limit + + go findPeerReceiver(ctx, pch, evtCh, rcvPeers) + + return pch, nil +} + +func findPeerDispatcher(ctx context.Context, c *backoffCache, pch <-chan peer.AddrInfo) { + defer func() { + c.mux.Lock() + + // If the peer addresses have changed reset the backoff + if checkUpdates(c.prevPeers, c.peers) { + c.strat.Reset() + c.prevPeers = c.peers + } + c.nextDiscover = c.clock.Now().Add(c.strat.Delay()) + + c.ongoing = false + c.peers = make(map[peer.ID]peer.AddrInfo) + + for ch := range c.sendingChs { + close(ch) + } + c.sendingChs = make(map[chan peer.AddrInfo]int) + c.mux.Unlock() + }() + + for { + select { + case ai, ok := <-pch: + if !ok { + return + } + c.mux.Lock() + + // If we receive the same peer multiple times return the address union + var sendAi peer.AddrInfo + if prevAi, ok := c.peers[ai.ID]; ok { + if combinedAi := mergeAddrInfos(prevAi, ai); combinedAi != nil { + sendAi = *combinedAi + } else { + c.mux.Unlock() + continue + } + } else { + sendAi = ai + } + + c.peers[ai.ID] = sendAi + + for ch, rem := range c.sendingChs { + if rem > 0 { + ch <- sendAi + c.sendingChs[ch] = rem - 1 + } + } + + c.mux.Unlock() + case <-ctx.Done(): + return + } + } +} + +func findPeerReceiver(ctx context.Context, pch, evtCh chan peer.AddrInfo, rcvPeers []peer.AddrInfo) { + defer close(pch) + + for { + select { + case ai, ok := <-evtCh: + if ok { + rcvPeers = append(rcvPeers, ai) + + sentAll := true + sendPeers: + for i, p := range rcvPeers { + select { + case pch <- p: + default: + rcvPeers = rcvPeers[i:] + sentAll = false + break sendPeers + } + } + if sentAll { + rcvPeers = []peer.AddrInfo{} + } + } else { + for _, p := range rcvPeers { + select { + case pch <- p: + case <-ctx.Done(): + return + } + } + return + } + case <-ctx.Done(): + return + } + } +} + +func mergeAddrInfos(prevAi, newAi peer.AddrInfo) *peer.AddrInfo { + seen := make(map[string]struct{}, len(prevAi.Addrs)) + combinedAddrs := make([]ma.Multiaddr, 0, len(prevAi.Addrs)) + addAddrs := func(addrs []ma.Multiaddr) { + for _, addr := range addrs { + if _, ok := seen[addr.String()]; ok { + continue + } + seen[addr.String()] = struct{}{} + combinedAddrs = append(combinedAddrs, addr) + } + } + addAddrs(prevAi.Addrs) + addAddrs(newAi.Addrs) + + if len(combinedAddrs) > len(prevAi.Addrs) { + combinedAi := &peer.AddrInfo{ID: prevAi.ID, Addrs: combinedAddrs} + return combinedAi + } + return nil +} + +func checkUpdates(orig, update map[peer.ID]peer.AddrInfo) bool { + if len(orig) != len(update) { + return true + } + for p, ai := range update { + if prevAi, ok := orig[p]; ok { + if combinedAi := mergeAddrInfos(prevAi, ai); combinedAi != nil { + return true + } + } else { + return true + } + } + return false +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoffconnector.go b/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoffconnector.go new file mode 100644 index 0000000000..62ac49897b --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/discovery/backoff/backoffconnector.go @@ -0,0 +1,96 @@ +package backoff + +import ( + "context" + "sync" + "time" + + lru "github.com/hashicorp/golang-lru" + + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/peer" +) + +// BackoffConnector is a utility to connect to peers, but only if we have not recently tried connecting to them already +type BackoffConnector struct { + cache *lru.TwoQueueCache + host host.Host + connTryDur time.Duration + backoff BackoffFactory + mux sync.Mutex +} + +// NewBackoffConnector creates a utility to connect to peers, but only if we have not recently tried connecting to them already +// cacheSize is the size of a TwoQueueCache +// connectionTryDuration is how long we attempt to connect to a peer before giving up +// backoff describes the strategy used to decide how long to backoff after previously attempting to connect to a peer +func NewBackoffConnector(h host.Host, cacheSize int, connectionTryDuration time.Duration, backoff BackoffFactory) (*BackoffConnector, error) { + cache, err := lru.New2Q(cacheSize) + if err != nil { + return nil, err + } + + return &BackoffConnector{ + cache: cache, + host: h, + connTryDur: connectionTryDuration, + backoff: backoff, + }, nil +} + +type connCacheData struct { + nextTry time.Time + strat BackoffStrategy +} + +// Connect attempts to connect to the peers passed in by peerCh. Will not connect to peers if they are within the backoff period. +// As Connect will attempt to dial peers as soon as it learns about them, the caller should try to keep the number, +// and rate, of inbound peers manageable. +func (c *BackoffConnector) Connect(ctx context.Context, peerCh <-chan peer.AddrInfo) { + for { + select { + case pi, ok := <-peerCh: + if !ok { + return + } + + if pi.ID == c.host.ID() || pi.ID == "" { + continue + } + + c.mux.Lock() + val, ok := c.cache.Get(pi.ID) + var cachedPeer *connCacheData + if ok { + tv := val.(*connCacheData) + now := time.Now() + if now.Before(tv.nextTry) { + c.mux.Unlock() + continue + } + + tv.nextTry = now.Add(tv.strat.Delay()) + } else { + cachedPeer = &connCacheData{strat: c.backoff()} + cachedPeer.nextTry = time.Now().Add(cachedPeer.strat.Delay()) + c.cache.Add(pi.ID, cachedPeer) + } + c.mux.Unlock() + + go func(pi peer.AddrInfo) { + ctx, cancel := context.WithTimeout(ctx, c.connTryDur) + defer cancel() + + err := c.host.Connect(ctx, pi) + if err != nil { + log.Debugf("Error connecting to pubsub peer %s: %s", pi.ID, err.Error()) + return + } + }(pi) + + case <-ctx.Done(): + log.Infof("discovery: backoff connector context error %v", ctx.Err()) + return + } + } +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/discovery/util/util.go b/vendor/github.com/libp2p/go-libp2p/p2p/discovery/util/util.go new file mode 100644 index 0000000000..ad10d242f0 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/discovery/util/util.go @@ -0,0 +1,58 @@ +package util + +import ( + "context" + "time" + + "github.com/libp2p/go-libp2p-core/discovery" + "github.com/libp2p/go-libp2p-core/peer" + + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("discovery-util") + +// FindPeers is a utility function that synchronously collects peers from a Discoverer. +func FindPeers(ctx context.Context, d discovery.Discoverer, ns string, opts ...discovery.Option) ([]peer.AddrInfo, error) { + var res []peer.AddrInfo + + ch, err := d.FindPeers(ctx, ns, opts...) + if err != nil { + return nil, err + } + + for pi := range ch { + res = append(res, pi) + } + + return res, nil +} + +// Advertise is a utility function that persistently advertises a service through an Advertiser. +func Advertise(ctx context.Context, a discovery.Advertiser, ns string, opts ...discovery.Option) { + go func() { + for { + ttl, err := a.Advertise(ctx, ns, opts...) + if err != nil { + log.Debugf("Error advertising %s: %s", ns, err.Error()) + if ctx.Err() != nil { + return + } + + select { + case <-time.After(2 * time.Minute): + continue + case <-ctx.Done(): + return + } + } + + wait := 7 * ttl / 8 + select { + case <-time.After(wait): + case <-ctx.Done(): + return + } + } + }() +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/client.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/client.go index 83b13cc0fd..f4eb08ad39 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/client.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/client.go @@ -31,6 +31,10 @@ type client struct { // DialBack asks peer p to dial us back on all addresses returned by the addrFunc. // It blocks until we've received a response from the peer. +// +// Note: A returned error Message_E_DIAL_ERROR does not imply that the server +// actually performed a dial attempt. Servers that run a version < v0.20.0 also +// return Message_E_DIAL_ERROR if the dial was skipped due to the dialPolicy. func (c *client) DialBack(ctx context.Context, p peer.ID) (ma.Multiaddr, error) { s, err := c.h.NewStream(ctx, p, AutoNATProto) if err != nil { diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/notify.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/notify.go index c5811f160e..fb8e980afb 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/notify.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/notify.go @@ -15,12 +15,6 @@ func (as *AmbientAutoNAT) Listen(net network.Network, a ma.Multiaddr) {} // ListenClose is part of the network.Notifiee interface func (as *AmbientAutoNAT) ListenClose(net network.Network, a ma.Multiaddr) {} -// OpenedStream is part of the network.Notifiee interface -func (as *AmbientAutoNAT) OpenedStream(net network.Network, s network.Stream) {} - -// ClosedStream is part of the network.Notifiee interface -func (as *AmbientAutoNAT) ClosedStream(net network.Network, s network.Stream) {} - // Connected is part of the network.Notifiee interface func (as *AmbientAutoNAT) Connected(net network.Network, c network.Conn) { if c.Stat().Direction == network.DirInbound && diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/svc.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/svc.go index 4ad3502f35..fc1fc3a8a0 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/svc.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/autonat/svc.go @@ -126,7 +126,8 @@ func (as *autoNATService) handleDial(p peer.ID, obsaddr ma.Multiaddr, mpi *pb.Me // need to know their public IP address, and it needs to be different from our public IP // address. if as.config.dialPolicy.skipDial(obsaddr) { - return newDialResponseError(pb.Message_E_DIAL_ERROR, "refusing to dial peer with blocked observed address") + // Note: versions < v0.20.0 return Message_E_DIAL_ERROR here, thus we can not rely on this error code. + return newDialResponseError(pb.Message_E_DIAL_REFUSED, "refusing to dial peer with blocked observed address") } // Determine the peer's IP address. @@ -187,7 +188,8 @@ func (as *autoNATService) handleDial(p peer.ID, obsaddr ma.Multiaddr, mpi *pb.Me } if len(addrs) == 0 { - return newDialResponseError(pb.Message_E_DIAL_ERROR, "no dialable addresses") + // Note: versions < v0.20.0 return Message_E_DIAL_ERROR here, thus we can not rely on this error code. + return newDialResponseError(pb.Message_E_DIAL_REFUSED, "no dialable addresses") } return as.doDial(peer.AddrInfo{ID: p, Addrs: addrs}) @@ -242,6 +244,7 @@ func (as *autoNATService) Enable() { ctx, cancel := context.WithCancel(context.Background()) as.instance = cancel as.backgroundRunning = make(chan struct{}) + as.config.host.SetStreamHandler(AutoNATProto, as.handleStream) go as.background(ctx) } @@ -251,6 +254,7 @@ func (as *autoNATService) Disable() { as.instanceLock.Lock() defer as.instanceLock.Unlock() if as.instance != nil { + as.config.host.RemoveStreamHandler(AutoNATProto) as.instance() as.instance = nil <-as.backgroundRunning @@ -259,7 +263,6 @@ func (as *autoNATService) Disable() { func (as *autoNATService) background(ctx context.Context) { defer close(as.backgroundRunning) - as.config.host.SetStreamHandler(AutoNATProto, as.handleStream) timer := time.NewTimer(as.config.throttleResetPeriod) defer timer.Stop() @@ -274,7 +277,6 @@ func (as *autoNATService) background(ctx context.Context) { jitter := rand.Float32() * float32(as.config.throttleResetJitter) timer.Reset(as.config.throttleResetPeriod + time.Duration(int64(jitter))) case <-ctx.Done(): - as.config.host.RemoveStreamHandler(AutoNATProto) return } } diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/autorelay.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/autorelay.go index 7f81fa954b..bcf8432c8e 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/autorelay.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/autorelay.go @@ -2,532 +2,145 @@ package autorelay import ( "context" - "errors" - "fmt" - "math/rand" "sync" - "sync/atomic" - "time" - "golang.org/x/sync/errgroup" + basic "github.com/libp2p/go-libp2p/p2p/host/basic" - "github.com/libp2p/go-libp2p-core/discovery" "github.com/libp2p/go-libp2p-core/event" + "github.com/libp2p/go-libp2p-core/host" "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/routing" - - basic "github.com/libp2p/go-libp2p/p2p/host/basic" - relayv1 "github.com/libp2p/go-libp2p/p2p/protocol/circuitv1/relay" - circuitv2 "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/client" - circuitv2_proto "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/proto" + logging "github.com/ipfs/go-log/v2" ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr/net" -) - -const ( - RelayRendezvous = "/libp2p/relay" - - rsvpRefreshInterval = time.Minute - rsvpExpirationSlack = 2 * time.Minute - - autorelayTag = "autorelay" - - protoIDv1 = string(relayv1.ProtoID) - protoIDv2 = string(circuitv2_proto.ProtoIDv2Hop) ) -var ( - DesiredRelays = 1 - - BootDelay = 20 * time.Second -) - -// DefaultRelays are the known PL-operated v1 relays; will be decommissioned in 2022. -var DefaultRelays = []string{ - "/ip4/147.75.80.110/tcp/4001/p2p/QmbFgm5zan8P6eWWmeyfncR5feYEMPbht5b1FW1C37aQ7y", - "/ip4/147.75.80.110/udp/4001/quic/p2p/QmbFgm5zan8P6eWWmeyfncR5feYEMPbht5b1FW1C37aQ7y", - "/ip4/147.75.195.153/tcp/4001/p2p/QmW9m57aiBDHAkKj9nmFSEn7ZqrcF1fZS4bipsTCHburei", - "/ip4/147.75.195.153/udp/4001/quic/p2p/QmW9m57aiBDHAkKj9nmFSEn7ZqrcF1fZS4bipsTCHburei", - "/ip4/147.75.70.221/tcp/4001/p2p/Qme8g49gm3q4Acp7xWBKg3nAa9fxZ1YmyDJdyGgoG6LsXh", - "/ip4/147.75.70.221/udp/4001/quic/p2p/Qme8g49gm3q4Acp7xWBKg3nAa9fxZ1YmyDJdyGgoG6LsXh", -} - -var defaultStaticRelays []peer.AddrInfo - -func init() { - for _, s := range DefaultRelays { - pi, err := peer.AddrInfoFromString(s) - if err != nil { - panic(fmt.Sprintf("failed to initialize default static relays: %s", err)) - } - defaultStaticRelays = append(defaultStaticRelays, *pi) - } -} - -type Option func(*AutoRelay) error -type StaticRelayOption Option - -func WithStaticRelays(static []peer.AddrInfo) StaticRelayOption { - return func(r *AutoRelay) error { - if len(r.static) > 0 { - return errors.New("can't set static relays, static relays already configured") - } - r.static = static - return nil - } -} - -func WithDefaultStaticRelays() StaticRelayOption { - return WithStaticRelays(defaultStaticRelays) -} +var log = logging.Logger("autorelay") -func WithDiscoverer(discover discovery.Discoverer) Option { - return func(r *AutoRelay) error { - r.discover = discover - return nil - } -} - -// AutoRelay is a Host that uses relays for connectivity when a NAT is detected. type AutoRelay struct { - host *basic.BasicHost - discover discovery.Discoverer - router routing.PeerRouting - addrsF basic.AddrsFactory - - static []peer.AddrInfo - refCount sync.WaitGroup + ctx context.Context ctxCancel context.CancelFunc - relayFound chan struct{} - findRelaysRunning int32 // to be used as an atomic + conf *config mx sync.Mutex - relays map[peer.ID]*circuitv2.Reservation // rsvp will be nil if it is a v1 relay status network.Reachability - cachedAddrs []ma.Multiaddr - cachedAddrsExpiry time.Time + relayFinder *relayFinder + + peerChanOut chan peer.AddrInfo // capacity 20 + + host host.Host + addrsF basic.AddrsFactory } -func NewAutoRelay(bhost *basic.BasicHost, router routing.PeerRouting, opts ...Option) (*AutoRelay, error) { - ctx, cancel := context.WithCancel(context.Background()) - ar := &AutoRelay{ - ctxCancel: cancel, - host: bhost, - router: router, - addrsF: bhost.AddrsFactory, - relays: make(map[peer.ID]*circuitv2.Reservation), - relayFound: make(chan struct{}, 1), - status: network.ReachabilityUnknown, +func NewAutoRelay(bhost *basic.BasicHost, opts ...Option) (*AutoRelay, error) { + r := &AutoRelay{ + host: bhost, + addrsF: bhost.AddrsFactory, + status: network.ReachabilityUnknown, } + conf := defaultConfig for _, opt := range opts { - if err := opt(ar); err != nil { + if err := opt(&conf); err != nil { return nil, err } } - bhost.AddrsFactory = ar.hostAddrs - ar.refCount.Add(1) - go ar.background(ctx) - return ar, nil -} + r.ctx, r.ctxCancel = context.WithCancel(context.Background()) + r.peerChanOut = make(chan peer.AddrInfo, conf.maxCandidates) + r.conf = &conf + r.relayFinder = newRelayFinder(bhost, r.peerChanOut, &conf) + bhost.AddrsFactory = r.hostAddrs -func (ar *AutoRelay) hostAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { - return ar.relayAddrs(ar.addrsF(addrs)) + r.refCount.Add(1) + go func() { + defer r.refCount.Done() + r.background() + }() + return r, nil } -func (ar *AutoRelay) background(ctx context.Context) { - defer ar.refCount.Done() - - subReachability, err := ar.host.EventBus().Subscribe(new(event.EvtLocalReachabilityChanged)) +func (r *AutoRelay) background() { + subReachability, err := r.host.EventBus().Subscribe(new(event.EvtLocalReachabilityChanged)) if err != nil { - log.Error("failed to subscribe to the EvtLocalReachabilityChanged") + log.Debug("failed to subscribe to the EvtLocalReachabilityChanged") return } defer subReachability.Close() - subConnectedness, err := ar.host.EventBus().Subscribe(new(event.EvtPeerConnectednessChanged)) - if err != nil { - log.Error("failed to subscribe to the EvtPeerConnectednessChanged") - return - } - defer subConnectedness.Close() - ticker := time.NewTicker(rsvpRefreshInterval) - defer ticker.Stop() + var peerChan <-chan peer.AddrInfo + if len(r.conf.staticRelays) == 0 { + peerChan = r.conf.peerChan + } else { + pc := make(chan peer.AddrInfo) + peerChan = pc + r.refCount.Add(1) + go func() { + defer r.refCount.Done() + for _, sr := range r.conf.staticRelays { + select { + case pc <- sr: + case <-r.ctx.Done(): + return + } + } + }() + } for { - // when true, we need to identify push - var push bool - select { - case ev, ok := <-subConnectedness.Out(): - if !ok { - return - } - evt := ev.(event.EvtPeerConnectednessChanged) - switch evt.Connectedness { - case network.Connected: - // If we just connect to one of our static relays, get a reservation immediately. - for _, pi := range ar.static { - if pi.ID == evt.Peer { - rsvp, ok := ar.tryRelay(ctx, pi) - if ok { - ar.mx.Lock() - ar.relays[pi.ID] = rsvp - ar.mx.Unlock() - } - push = true - break - } - } - case network.NotConnected: - ar.mx.Lock() - if ar.usingRelay(evt.Peer) { // we were disconnected from a relay - delete(ar.relays, evt.Peer) - push = true - } - ar.mx.Unlock() - } + case <-r.ctx.Done(): + return case ev, ok := <-subReachability.Out(): if !ok { return } + // TODO: push changed addresses evt := ev.(event.EvtLocalReachabilityChanged) - - if evt.Reachability == network.ReachabilityPrivate { - // findRelays is a long-lived task (runs up to 2.5 minutes) - // Make sure we only start it once. - if atomic.CompareAndSwapInt32(&ar.findRelaysRunning, 0, 1) { - go func() { - defer atomic.StoreInt32(&ar.findRelaysRunning, 0) - ar.findRelays(ctx) - }() + switch evt.Reachability { + case network.ReachabilityPrivate, network.ReachabilityUnknown: + if err := r.relayFinder.Start(); err != nil { + log.Error("failed to start relay finder") } + case network.ReachabilityPublic: + r.relayFinder.Stop() } - - ar.mx.Lock() - // if our reachability changed - if ar.status != evt.Reachability && evt.Reachability != network.ReachabilityUnknown { - push = true - } - ar.status = evt.Reachability - ar.mx.Unlock() - case <-ar.relayFound: - push = true - case now := <-ticker.C: - push = ar.refreshReservations(ctx, now) - case <-ctx.Done(): - return - } - - if push { - ar.mx.Lock() - ar.cachedAddrs = nil - ar.mx.Unlock() - ar.host.SignalAddressChange() - } - } -} - -func (ar *AutoRelay) refreshReservations(ctx context.Context, now time.Time) bool { - ar.mx.Lock() - if ar.status == network.ReachabilityPublic { - // we are public, forget about the relays, unprotect peers - for p := range ar.relays { - ar.host.ConnManager().Unprotect(p, autorelayTag) - delete(ar.relays, p) - } - - ar.mx.Unlock() - return true - } - - if len(ar.relays) == 0 { - ar.mx.Unlock() - return false - } - - // find reservations about to expire and refresh them in parallel - g := new(errgroup.Group) - for p, rsvp := range ar.relays { - if rsvp == nil { - // this is a circuitv1 relay, there is no reservation - continue - } - if now.Add(rsvpExpirationSlack).Before(rsvp.Expiration) { - continue - } - - p := p - g.Go(func() error { return ar.refreshRelayReservation(ctx, p) }) - } - ar.mx.Unlock() - - err := g.Wait() - return err != nil -} - -func (ar *AutoRelay) refreshRelayReservation(ctx context.Context, p peer.ID) error { - rsvp, err := circuitv2.Reserve(ctx, ar.host, peer.AddrInfo{ID: p}) - - ar.mx.Lock() - defer ar.mx.Unlock() - - if err != nil { - log.Debugf("failed to refresh relay slot reservation with %s: %s", p, err) - - delete(ar.relays, p) - // unprotect the connection - ar.host.ConnManager().Unprotect(p, autorelayTag) - } else { - log.Debugf("refreshed relay slot reservation with %s", p) - ar.relays[p] = rsvp - } - - return err -} - -func (ar *AutoRelay) findRelays(ctx context.Context) { - timer := time.NewTimer(30 * time.Second) - defer timer.Stop() - for retry := 0; retry < 5; retry++ { - if retry > 0 { - log.Debug("no relays connected; retrying in 30s") + r.mx.Lock() + r.status = evt.Reachability + r.mx.Unlock() + case pi := <-peerChan: select { - case <-timer.C: - case <-ctx.Done(): - return + case r.peerChanOut <- pi: // if there's space in the channel, great + default: + // no space left in the channel. Drop the oldest entry. + select { + case <-r.peerChanOut: + default: // The consumer might just have emptied the channel. Make sure we don't block in that case. + } + r.peerChanOut <- pi } } - - if foundAtLeastOneRelay := ar.findRelaysOnce(ctx); foundAtLeastOneRelay { - return - } - } -} - -func (ar *AutoRelay) findRelaysOnce(ctx context.Context) bool { - relays, err := ar.discoverRelays(ctx) - if err != nil { - log.Debugf("error discovering relays: %s", err) - return false - } - log.Debugf("discovered %d relays", len(relays)) - relays = ar.selectRelays(ctx, relays) - log.Debugf("selected %d relays", len(relays)) - - var found bool - for _, pi := range relays { - ar.mx.Lock() - relayInUse := ar.usingRelay(pi.ID) - ar.mx.Unlock() - if relayInUse { - continue - } - rsvp, ok := ar.tryRelay(ctx, pi) - if !ok { - continue - } - // make sure we're still connected. - if ar.host.Network().Connectedness(pi.ID) != network.Connected { - continue - } - found = true - ar.mx.Lock() - ar.relays[pi.ID] = rsvp - // protect the connection - ar.host.ConnManager().Protect(pi.ID, autorelayTag) - numRelays := len(ar.relays) - ar.mx.Unlock() - - if numRelays >= DesiredRelays { - break - } - } - if found { - ar.relayFound <- struct{}{} - return true - } - return false -} - -// usingRelay returns if we're currently using the given relay. -func (ar *AutoRelay) usingRelay(p peer.ID) bool { - _, ok := ar.relays[p] - return ok -} - -// addRelay adds the given relay to our set of relays. -// returns true when we add a new relay -func (ar *AutoRelay) tryRelay(ctx context.Context, pi peer.AddrInfo) (*circuitv2.Reservation, bool) { - if !ar.connect(ctx, pi) { - return nil, false - } - - protos, err := ar.host.Peerstore().SupportsProtocols(pi.ID, protoIDv1, protoIDv2) - if err != nil { - log.Debugf("error checking relay protocol support for peer %s: %s", pi.ID, err) - return nil, false - } - - var supportsv1, supportsv2 bool -protoLoop: - for _, proto := range protos { - switch proto { - case protoIDv1: - supportsv1 = true - case protoIDv2: - supportsv2 = true - break protoLoop - } - } - - switch { - case supportsv2: - rsvp, err := circuitv2.Reserve(ctx, ar.host, pi) - if err != nil { - log.Debugf("error reserving slot with %s: %s", pi.ID, err) - return nil, false - } - return rsvp, true - case supportsv1: - ok, err := relayv1.CanHop(ctx, ar.host, pi.ID) - if err != nil { - log.Debugf("error querying relay %s for v1 hop: %s", pi.ID, err) - return nil, false - } - return nil, ok - default: // supports neither, unusable relay. - return nil, false - } -} - -func (ar *AutoRelay) connect(ctx context.Context, pi peer.AddrInfo) bool { - ctx, cancel := context.WithTimeout(ctx, 60*time.Second) - defer cancel() - - if len(pi.Addrs) == 0 { - var err error - pi, err = ar.router.FindPeer(ctx, pi.ID) - if err != nil { - log.Debugf("error finding relay peer %s: %s", pi.ID, err.Error()) - return false - } - } - - err := ar.host.Connect(ctx, pi) - if err != nil { - log.Debugf("error connecting to relay %s: %s", pi.ID, err.Error()) - return false - } - - // wait for identify to complete in at least one conn so that we can check the supported protocols - conns := ar.host.Network().ConnsToPeer(pi.ID) - if len(conns) == 0 { - return false - } - - ready := make(chan struct{}, len(conns)) - for _, conn := range conns { - go func(conn network.Conn) { - select { - case <-ar.host.IDService().IdentifyWait(conn): - ready <- struct{}{} - case <-ctx.Done(): - } - }(conn) - } - - select { - case <-ready: - case <-ctx.Done(): - return false - } - - return true -} - -func (ar *AutoRelay) discoverRelays(ctx context.Context) ([]peer.AddrInfo, error) { - if len(ar.static) > 0 { - return ar.static, nil } - - ctx, cancel := context.WithTimeout(ctx, 30*time.Second) - defer cancel() - var ret []peer.AddrInfo - ch, err := ar.discover.FindPeers(ctx, RelayRendezvous, discovery.Limit(1000)) - if err != nil { - return nil, err - } - for p := range ch { - ret = append(ret, p) - } - return ret, nil } -func (ar *AutoRelay) selectRelays(ctx context.Context, pis []peer.AddrInfo) []peer.AddrInfo { - // TODO: better relay selection strategy; this just selects random relays, - // but we should probably use ping latency as the selection metric - rand.Shuffle(len(pis), func(i, j int) { - pis[i], pis[j] = pis[j], pis[i] - }) - return pis +func (r *AutoRelay) hostAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { + return r.relayAddrs(r.addrsF(addrs)) } -// This function is computes the NATed relay addrs when our status is private: -// - The public addrs are removed from the address set. -// - The non-public addrs are included verbatim so that peers behind the same NAT/firewall -// can still dial us directly. -// - On top of those, we add the relay-specific addrs for the relays to which we are -// connected. For each non-private relay addr, we encapsulate the p2p-circuit addr -// through which we can be dialed. -func (ar *AutoRelay) relayAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { - ar.mx.Lock() - defer ar.mx.Unlock() +func (r *AutoRelay) relayAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { + r.mx.Lock() + defer r.mx.Unlock() - if ar.status != network.ReachabilityPrivate { + if r.status != network.ReachabilityPrivate { return addrs } - - if ar.cachedAddrs != nil && time.Now().Before(ar.cachedAddrsExpiry) { - return ar.cachedAddrs - } - - raddrs := make([]ma.Multiaddr, 0, 4*len(ar.relays)+4) - - // only keep private addrs from the original addr set - for _, addr := range addrs { - if manet.IsPrivateAddr(addr) { - raddrs = append(raddrs, addr) - } - } - - // add relay specific addrs to the list - for p := range ar.relays { - addrs := cleanupAddressSet(ar.host.Peerstore().Addrs(p)) - - circuit, err := ma.NewMultiaddr(fmt.Sprintf("/p2p/%s/p2p-circuit", p.Pretty())) - if err != nil { - panic(err) - } - - for _, addr := range addrs { - pub := addr.Encapsulate(circuit) - raddrs = append(raddrs, pub) - } - } - - ar.cachedAddrs = raddrs - ar.cachedAddrsExpiry = time.Now().Add(30 * time.Second) - - return raddrs + return r.relayFinder.relayAddrs(addrs) } -func (ar *AutoRelay) Close() error { - ar.ctxCancel() - ar.refCount.Wait() - return nil +func (r *AutoRelay) Close() error { + r.ctxCancel() + err := r.relayFinder.Stop() + r.refCount.Wait() + return err } diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/doc.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/doc.go deleted file mode 100644 index 4955dc5e1f..0000000000 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/doc.go +++ /dev/null @@ -1,28 +0,0 @@ -/* -The relay package contains the components necessary to implement the "autorelay" -feature. - -Warning: the internal interfaces are unstable. - -System Components: -- A discovery service to discover public relays. -- An AutoNAT client used to determine if the node is behind a NAT/firewall. -- One or more autonat services, instances of `AutoNATServices`. These are used - by the autonat client. -- One or more relays, instances of `RelayHost`. -- The AutoRelay service. This is the service that actually: - -AutoNATService: https://github.com/libp2p/go-libp2p-autonat-svc -AutoNAT: https://github.com/libp2p/go-libp2p/p2p/host/autonat - -How it works: -- `AutoNATService` instances are instantiated in the bootstrappers (or other - well known publicly reachable hosts) -- `AutoRelay`s are constructed with `libp2p.New(libp2p.Routing(makeDHT))` - They passively discover autonat service instances and test dialability of - their listen address set through them. When the presence of NAT is detected, - they discover relays through the DHT, connect to some of them and begin - advertising relay addresses. The new set of addresses is propagated to - connected peers through the `identify/push` protocol. -*/ -package autorelay diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/log.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/log.go deleted file mode 100644 index 9c4e5ed52c..0000000000 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/log.go +++ /dev/null @@ -1,7 +0,0 @@ -package autorelay - -import ( - logging "github.com/ipfs/go-log/v2" -) - -var log = logging.Logger("autorelay") diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/options.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/options.go new file mode 100644 index 0000000000..e6119a2612 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/options.go @@ -0,0 +1,155 @@ +package autorelay + +import ( + "errors" + "fmt" + "time" + + "github.com/libp2p/go-libp2p-core/peer" +) + +type config struct { + peerChan <-chan peer.AddrInfo + staticRelays []peer.AddrInfo + // see WithMinCandidates + minCandidates int + // see WithMaxCandidates + maxCandidates int + // Delay until we obtain reservations with relays, if we have less than minCandidates candidates. + // See WithBootDelay. + bootDelay time.Duration + // backoff is the time we wait after failing to obtain a reservation with a candidate + backoff time.Duration + // If we fail to obtain a reservation more than maxAttempts, we stop trying. + maxAttempts int + // Number of relays we strive to obtain a reservation with. + desiredRelays int + setMinCandidates bool + enableCircuitV1 bool +} + +var defaultConfig = config{ + minCandidates: 4, + maxCandidates: 20, + bootDelay: 3 * time.Minute, + backoff: time.Hour, + maxAttempts: 3, + desiredRelays: 2, +} + +var errStaticRelaysMinCandidates = errors.New("cannot use WithMinCandidates and WithStaticRelays") + +// DefaultRelays are the known PL-operated v1 relays; will be decommissioned in 2022. +var DefaultRelays = []string{ + "/ip4/147.75.80.110/tcp/4001/p2p/QmbFgm5zan8P6eWWmeyfncR5feYEMPbht5b1FW1C37aQ7y", + "/ip4/147.75.80.110/udp/4001/quic/p2p/QmbFgm5zan8P6eWWmeyfncR5feYEMPbht5b1FW1C37aQ7y", + "/ip4/147.75.195.153/tcp/4001/p2p/QmW9m57aiBDHAkKj9nmFSEn7ZqrcF1fZS4bipsTCHburei", + "/ip4/147.75.195.153/udp/4001/quic/p2p/QmW9m57aiBDHAkKj9nmFSEn7ZqrcF1fZS4bipsTCHburei", + "/ip4/147.75.70.221/tcp/4001/p2p/Qme8g49gm3q4Acp7xWBKg3nAa9fxZ1YmyDJdyGgoG6LsXh", + "/ip4/147.75.70.221/udp/4001/quic/p2p/Qme8g49gm3q4Acp7xWBKg3nAa9fxZ1YmyDJdyGgoG6LsXh", +} + +var defaultStaticRelays []peer.AddrInfo + +func init() { + for _, s := range DefaultRelays { + pi, err := peer.AddrInfoFromString(s) + if err != nil { + panic(fmt.Sprintf("failed to initialize default static relays: %s", err)) + } + defaultStaticRelays = append(defaultStaticRelays, *pi) + } +} + +type Option func(*config) error + +func WithStaticRelays(static []peer.AddrInfo) Option { + return func(c *config) error { + if c.setMinCandidates { + return errStaticRelaysMinCandidates + } + if len(c.staticRelays) > 0 { + return errors.New("can't set static relays, static relays already configured") + } + c.minCandidates = len(static) + c.staticRelays = static + return nil + } +} + +func WithDefaultStaticRelays() Option { + return WithStaticRelays(defaultStaticRelays) +} + +func WithPeerSource(peerChan <-chan peer.AddrInfo) Option { + return func(c *config) error { + c.peerChan = peerChan + return nil + } +} + +// WithNumRelays sets the number of relays we strive to obtain reservations with. +func WithNumRelays(n int) Option { + return func(c *config) error { + c.desiredRelays = n + return nil + } +} + +// WithMaxCandidates sets the number of relay candidates that we buffer. +func WithMaxCandidates(n int) Option { + return func(c *config) error { + c.maxCandidates = n + return nil + } +} + +// WithMinCandidates sets the minimum number of relay candidates we collect before to get a reservation +// with any of them (unless we've been running for longer than the boot delay). +// This is to make sure that we don't just randomly connect to the first candidate that we discover. +func WithMinCandidates(n int) Option { + return func(c *config) error { + if len(c.staticRelays) > 0 { + return errStaticRelaysMinCandidates + } + c.minCandidates = n + c.setMinCandidates = true + return nil + } +} + +// WithBootDelay set the boot delay for finding relays. +// We won't attempt any reservation if we've have less than a minimum number of candidates. +// This prevents us to connect to the "first best" relay, and allows us to carefully select the relay. +// However, in case we haven't found enough relays after the boot delay, we use what we have. +func WithBootDelay(d time.Duration) Option { + return func(c *config) error { + c.bootDelay = d + return nil + } +} + +// WithBackoff sets the time we wait after failing to obtain a reservation with a candidate. +func WithBackoff(d time.Duration) Option { + return func(c *config) error { + c.backoff = d + return nil + } +} + +// WithMaxAttempts sets the number of times we attempt to obtain a reservation with a candidate. +// If we still fail to obtain a reservation, this candidate is dropped. +func WithMaxAttempts(n int) Option { + return func(c *config) error { + c.maxAttempts = n + return nil + } +} + +// WithCircuitV1Support enables support for circuit v1 relays. +func WithCircuitV1Support() Option { + return func(c *config) error { + c.enableCircuitV1 = true + return nil + } +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/relay.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/relay.go index 4d7fb0adee..db0d97ec01 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/relay.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/relay.go @@ -1,55 +1,9 @@ package autorelay import ( - "context" - "time" - - "github.com/libp2p/go-libp2p-core/discovery" - ma "github.com/multiformats/go-multiaddr" ) -var ( - // this is purposefully long to require some node stability before advertising as a relay - AdvertiseBootDelay = 15 * time.Minute - AdvertiseTTL = 30 * time.Minute -) - -// Advertise advertises this node as a libp2p relay. -func Advertise(ctx context.Context, advertise discovery.Advertiser) { - go func() { - select { - case <-time.After(AdvertiseBootDelay): - go func() { - for { - ttl, err := advertise.Advertise(ctx, RelayRendezvous, discovery.TTL(AdvertiseTTL)) - if err != nil { - log.Debugf("Error advertising %s: %s", RelayRendezvous, err.Error()) - if ctx.Err() != nil { - return - } - - select { - case <-time.After(2 * time.Minute): - continue - case <-ctx.Done(): - return - } - } - - wait := 7 * ttl / 8 - select { - case <-time.After(wait): - case <-ctx.Done(): - return - } - } - }() - case <-ctx.Done(): - } - }() -} - // Filter filters out all relay addresses. func Filter(addrs []ma.Multiaddr) []ma.Multiaddr { raddrs := make([]ma.Multiaddr, 0, len(addrs)) diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/relay_finder.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/relay_finder.go new file mode 100644 index 0000000000..48bc7f7fd4 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/autorelay/relay_finder.go @@ -0,0 +1,612 @@ +package autorelay + +import ( + "context" + "errors" + "fmt" + "math/rand" + "sync" + "time" + + "golang.org/x/sync/errgroup" + + basic "github.com/libp2p/go-libp2p/p2p/host/basic" + relayv1 "github.com/libp2p/go-libp2p/p2p/protocol/circuitv1/relay" + circuitv2 "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/client" + circuitv2_proto "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/proto" + + "github.com/libp2p/go-libp2p-core/event" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" +) + +const ( + protoIDv1 = string(relayv1.ProtoID) + protoIDv2 = string(circuitv2_proto.ProtoIDv2Hop) +) + +// Terminology: +// Candidate: Once we connect to a node and it supports (v1 / v2) relay protocol, +// we call it a candidate, and consider using it as a relay. +// Relay: Out of the list of candidates, we select a relay to connect to. +// Currently, we just randomly select a candidate, but we can employ more sophisticated +// selection strategies here (e.g. by facotring in the RTT). + +const ( + rsvpRefreshInterval = time.Minute + rsvpExpirationSlack = 2 * time.Minute + + autorelayTag = "autorelay" +) + +type candidate struct { + added time.Time + supportsRelayV2 bool + ai peer.AddrInfo + numAttempts int +} + +type candidateOnBackoff struct { + candidate + nextConnAttempt time.Time +} + +// relayFinder is a Host that uses relays for connectivity when a NAT is detected. +type relayFinder struct { + bootTime time.Time + host *basic.BasicHost + + conf *config + + refCount sync.WaitGroup + + ctxCancel context.CancelFunc + ctxCancelMx sync.Mutex + + peerChan <-chan peer.AddrInfo + + candidateFound chan struct{} // receives every time we find a new relay candidate + candidateMx sync.Mutex + candidates map[peer.ID]*candidate + candidatesOnBackoff []*candidateOnBackoff // this slice is always sorted by the nextConnAttempt time + handleNewCandidateTrigger chan struct{} // cap: 1 + + relayUpdated chan struct{} + + relayMx sync.Mutex + relays map[peer.ID]*circuitv2.Reservation // rsvp will be nil if it is a v1 relay + + cachedAddrs []ma.Multiaddr + cachedAddrsExpiry time.Time +} + +func newRelayFinder(host *basic.BasicHost, peerChan <-chan peer.AddrInfo, conf *config) *relayFinder { + r := &relayFinder{ + bootTime: time.Now(), + host: host, + conf: conf, + peerChan: peerChan, + candidates: make(map[peer.ID]*candidate), + candidateFound: make(chan struct{}, 1), + handleNewCandidateTrigger: make(chan struct{}, 1), + relays: make(map[peer.ID]*circuitv2.Reservation), + relayUpdated: make(chan struct{}, 1), + } + return r +} + +func (rf *relayFinder) background(ctx context.Context) { + rf.refCount.Add(1) + go func() { + defer rf.refCount.Done() + rf.findNodes(ctx) + }() + rf.refCount.Add(1) + go func() { + defer rf.refCount.Done() + rf.handleNewCandidates(ctx) + }() + + subConnectedness, err := rf.host.EventBus().Subscribe(new(event.EvtPeerConnectednessChanged)) + if err != nil { + log.Error("failed to subscribe to the EvtPeerConnectednessChanged") + return + } + defer subConnectedness.Close() + + bootDelayTimer := time.NewTimer(rf.conf.bootDelay) + defer bootDelayTimer.Stop() + refreshTicker := time.NewTicker(rsvpRefreshInterval) + defer refreshTicker.Stop() + backoffTicker := time.NewTicker(rf.conf.backoff / 5) + defer backoffTicker.Stop() + + for { + // when true, we need to identify push + var push bool + + select { + case ev, ok := <-subConnectedness.Out(): + if !ok { + return + } + evt := ev.(event.EvtPeerConnectednessChanged) + if evt.Connectedness != network.NotConnected { + continue + } + rf.relayMx.Lock() + if rf.usingRelay(evt.Peer) { // we were disconnected from a relay + log.Debugw("disconnected from relay", "id", evt.Peer) + delete(rf.relays, evt.Peer) + push = true + } + rf.relayMx.Unlock() + case <-rf.candidateFound: + select { + case rf.handleNewCandidateTrigger <- struct{}{}: + default: + } + case <-bootDelayTimer.C: + select { + case rf.handleNewCandidateTrigger <- struct{}{}: + default: + } + case <-rf.relayUpdated: + push = true + case now := <-refreshTicker.C: + push = rf.refreshReservations(ctx, now) + case now := <-backoffTicker.C: + rf.checkForCandidatesOnBackoff(now) + case <-ctx.Done(): + return + } + + if push { + rf.relayMx.Lock() + rf.cachedAddrs = nil + rf.relayMx.Unlock() + rf.host.SignalAddressChange() + } + } +} + +// findNodes accepts nodes from the channel and tests if they support relaying. +// It is run on both public and private nodes. +// It garbage collects old entries, so that nodes doesn't overflow. +// This makes sure that as soon as we need to find relay candidates, we have them available. +func (rf *relayFinder) findNodes(ctx context.Context) { + for { + select { + case pi := <-rf.peerChan: + log.Debugw("found node", "id", pi.ID) + rf.candidateMx.Lock() + numCandidates := len(rf.candidates) + rf.candidateMx.Unlock() + if numCandidates >= rf.conf.maxCandidates { + log.Debugw("skipping node. Already have enough candidates", "id", pi.ID, "num", numCandidates, "max", rf.conf.maxCandidates) + continue + } + rf.refCount.Add(1) + go func() { + defer rf.refCount.Done() + rf.handleNewNode(ctx, pi) + }() + case <-ctx.Done(): + return + } + } +} + +func (rf *relayFinder) notifyNewCandidate() { + select { + case rf.candidateFound <- struct{}{}: + default: + } +} + +// handleNewNode tests if a peer supports circuit v1 or v2. +// This method is only run on private nodes. +// If a peer does, it is added to the candidates map. +// Note that just supporting the protocol doesn't guarantee that we can also obtain a reservation. +func (rf *relayFinder) handleNewNode(ctx context.Context, pi peer.AddrInfo) { + rf.relayMx.Lock() + relayInUse := rf.usingRelay(pi.ID) + rf.relayMx.Unlock() + if relayInUse { + return + } + + ctx, cancel := context.WithTimeout(ctx, 20*time.Second) + defer cancel() + supportsV2, err := rf.tryNode(ctx, pi) + if err != nil { + log.Debugf("node %s not accepted as a candidate: %s", pi.ID, err) + return + } + rf.candidateMx.Lock() + if len(rf.candidates) > rf.conf.maxCandidates { + rf.candidateMx.Unlock() + return + } + log.Debugw("node supports relay protocol", "peer", pi.ID, "supports circuit v2", supportsV2) + rf.candidates[pi.ID] = &candidate{ai: pi, supportsRelayV2: supportsV2} + rf.candidateMx.Unlock() + + rf.notifyNewCandidate() +} + +// tryNode checks if a peer actually supports either circuit v1 or circuit v2. +// It does not modify any internal state. +func (rf *relayFinder) tryNode(ctx context.Context, pi peer.AddrInfo) (supportsRelayV2 bool, err error) { + if err := rf.host.Connect(ctx, pi); err != nil { + return false, fmt.Errorf("error connecting to relay %s: %w", pi.ID, err) + } + + conns := rf.host.Network().ConnsToPeer(pi.ID) + for _, conn := range conns { + if isRelayAddr(conn.RemoteMultiaddr()) { + return false, errors.New("not a public node") + } + } + + // wait for identify to complete in at least one conn so that we can check the supported protocols + ready := make(chan struct{}, 1) + for _, conn := range conns { + go func(conn network.Conn) { + select { + case <-rf.host.IDService().IdentifyWait(conn): + select { + case ready <- struct{}{}: + default: + } + case <-ctx.Done(): + } + }(conn) + } + + select { + case <-ready: + case <-ctx.Done(): + return false, ctx.Err() + } + + protos, err := rf.host.Peerstore().SupportsProtocols(pi.ID, protoIDv1, protoIDv2) + if err != nil { + return false, fmt.Errorf("error checking relay protocol support for peer %s: %w", pi.ID, err) + } + + // If the node speaks both, prefer circuit v2 + var maybeSupportsV1, supportsV2 bool + for _, proto := range protos { + switch proto { + case protoIDv1: + maybeSupportsV1 = true + case protoIDv2: + supportsV2 = true + } + } + + if supportsV2 { + return true, nil + } + + if !rf.conf.enableCircuitV1 && !supportsV2 { + return false, errors.New("doesn't speak circuit v2") + } + if !maybeSupportsV1 && !supportsV2 { + return false, errors.New("doesn't speak circuit v1 or v2") + } + + // The node *may* support circuit v1. + supportsV1, err := relayv1.CanHop(ctx, rf.host, pi.ID) + if err != nil { + return false, fmt.Errorf("CanHop failed: %w", err) + } + if !supportsV1 { + return false, errors.New("doesn't speak circuit v1 or v2") + } + return false, nil +} + +// When a new node that could be a relay is found, we receive a notification on the handleNewCandidateTrigger chan. +// This function makes sure that we only run one instance of handleNewCandidate at once, and buffers +// exactly one more trigger event to run handleNewCandidate. +func (rf *relayFinder) handleNewCandidates(ctx context.Context) { + sem := make(chan struct{}, 1) + for { + select { + case <-ctx.Done(): + return + case <-rf.handleNewCandidateTrigger: + select { + case <-ctx.Done(): + return + case sem <- struct{}{}: + } + rf.handleNewCandidate(ctx) + <-sem + } + } +} + +func (rf *relayFinder) handleNewCandidate(ctx context.Context) { + rf.relayMx.Lock() + numRelays := len(rf.relays) + rf.relayMx.Unlock() + // We're already connected to our desired number of relays. Nothing to do here. + if numRelays == rf.conf.desiredRelays { + return + } + + rf.candidateMx.Lock() + if len(rf.conf.staticRelays) != 0 { + // make sure we read all static relays before continuing + if len(rf.peerChan) > 0 && len(rf.candidates) < rf.conf.minCandidates && time.Since(rf.bootTime) < rf.conf.bootDelay { + rf.candidateMx.Unlock() + return + } + } else if len(rf.relays) == 0 && len(rf.candidates) < rf.conf.minCandidates && time.Since(rf.bootTime) < rf.conf.bootDelay { + // During the startup phase, we don't want to connect to the first candidate that we find. + // Instead, we wait until we've found at least minCandidates, and then select the best of those. + // However, if that takes too long (longer than bootDelay), we still go ahead. + rf.candidateMx.Unlock() + return + } + if len(rf.candidates) == 0 { + rf.candidateMx.Unlock() + return + } + candidates := rf.selectCandidates() + rf.candidateMx.Unlock() + + // We now iterate over the candidates, attempting (sequentially) to get reservations with them, until + // we reach the desired number of relays. + for _, cand := range candidates { + id := cand.ai.ID + rf.relayMx.Lock() + usingRelay := rf.usingRelay(id) + rf.relayMx.Unlock() + if usingRelay { + continue + } + rsvp, err := rf.connectToRelay(ctx, cand) + if err != nil { + log.Debugw("failed to connect to relay", "peer", id, "error", err) + continue + } + log.Debugw("adding new relay", "id", id) + rf.relayMx.Lock() + rf.relays[id] = rsvp + numRelays := len(rf.relays) + rf.relayMx.Unlock() + + rf.host.ConnManager().Protect(id, autorelayTag) // protect the connection + + select { + case rf.relayUpdated <- struct{}{}: + default: + } + if numRelays >= rf.conf.desiredRelays { + break + } + } +} + +func (rf *relayFinder) connectToRelay(ctx context.Context, cand *candidate) (*circuitv2.Reservation, error) { + id := cand.ai.ID + + ctx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + + var failed bool + var rsvp *circuitv2.Reservation + + // make sure we're still connected. + if rf.host.Network().Connectedness(id) != network.Connected { + if err := rf.host.Connect(ctx, cand.ai); err != nil { + rf.candidateMx.Lock() + delete(rf.candidates, cand.ai.ID) + rf.candidateMx.Unlock() + return nil, fmt.Errorf("failed to connect: %w", err) + } + } + var err error + if cand.supportsRelayV2 { + rsvp, err = circuitv2.Reserve(ctx, rf.host, cand.ai) + if err != nil { + failed = true + err = fmt.Errorf("failed to reserve slot: %w", err) + } + } + rf.candidateMx.Lock() + defer rf.candidateMx.Unlock() + if failed { + cand.numAttempts++ + delete(rf.candidates, id) + // We failed to obtain a reservation for too many times. We give up. + if cand.numAttempts >= rf.conf.maxAttempts { + return nil, fmt.Errorf("failed to obtain a reservation too may times: %w", err) + } + rf.moveCandidateToBackoff(cand) + return nil, err + } + return rsvp, nil +} + +// must be called with mutex locked +func (rf *relayFinder) moveCandidateToBackoff(cand *candidate) { + if len(rf.candidatesOnBackoff) >= rf.conf.maxCandidates { + log.Debugw("already have enough candidates on backoff. Dropping.", "id", cand.ai.ID) + return + } + log.Debugw("moving candidate to backoff", "id", cand.ai.ID) + backoff := rf.conf.backoff * (1 << (cand.numAttempts - 1)) + // introduce a bit of jitter + backoff = (backoff * time.Duration(16+rand.Intn(8))) / time.Duration(20) + rf.candidatesOnBackoff = append(rf.candidatesOnBackoff, &candidateOnBackoff{ + candidate: *cand, + nextConnAttempt: time.Now().Add(backoff), + }) +} + +func (rf *relayFinder) checkForCandidatesOnBackoff(now time.Time) { + rf.candidateMx.Lock() + defer rf.candidateMx.Unlock() + + for _, cand := range rf.candidatesOnBackoff { + if cand.nextConnAttempt.After(now) { + break + } + if len(rf.candidates) >= rf.conf.maxCandidates { + // drop this candidate if we already have enough others + log.Debugw("cannot move backoff'ed candidate back. Already have enough candidates.", "id", cand.ai.ID) + } else { + log.Debugw("moving backoff'ed candidate back", "id", cand.ai.ID) + rf.candidates[cand.ai.ID] = &candidate{ + added: cand.added, + supportsRelayV2: cand.supportsRelayV2, + ai: cand.ai, + numAttempts: cand.numAttempts, + } + rf.notifyNewCandidate() + } + rf.candidatesOnBackoff = rf.candidatesOnBackoff[1:] + } +} + +func (rf *relayFinder) refreshReservations(ctx context.Context, now time.Time) bool { + rf.relayMx.Lock() + + // find reservations about to expire and refresh them in parallel + g := new(errgroup.Group) + for p, rsvp := range rf.relays { + if rsvp == nil { // this is a circuit v1 relay, there is no reservation + continue + } + if now.Add(rsvpExpirationSlack).Before(rsvp.Expiration) { + continue + } + + p := p + g.Go(func() error { return rf.refreshRelayReservation(ctx, p) }) + } + rf.relayMx.Unlock() + + err := g.Wait() + return err != nil +} + +func (rf *relayFinder) refreshRelayReservation(ctx context.Context, p peer.ID) error { + rsvp, err := circuitv2.Reserve(ctx, rf.host, peer.AddrInfo{ID: p}) + + rf.relayMx.Lock() + defer rf.relayMx.Unlock() + + if err != nil { + log.Debugw("failed to refresh relay slot reservation", "relay", p, "error", err) + + delete(rf.relays, p) + // unprotect the connection + rf.host.ConnManager().Unprotect(p, autorelayTag) + return err + } + + log.Debugw("refreshed relay slot reservation", "relay", p) + rf.relays[p] = rsvp + return nil +} + +// usingRelay returns if we're currently using the given relay. +func (rf *relayFinder) usingRelay(p peer.ID) bool { + _, ok := rf.relays[p] + return ok +} + +// selectCandidates returns an ordered slice of relay candidates. +// Callers should attempt to obtain reservations with the candidates in this order. +func (rf *relayFinder) selectCandidates() []*candidate { + var candidates []*candidate + for _, cand := range rf.candidates { + candidates = append(candidates, cand) + } + + // TODO: better relay selection strategy; this just selects random relays, + // but we should probably use ping latency as the selection metric + rand.Shuffle(len(candidates), func(i, j int) { + candidates[i], candidates[j] = candidates[j], candidates[i] + }) + return candidates +} + +// This function is computes the NATed relay addrs when our status is private: +// - The public addrs are removed from the address set. +// - The non-public addrs are included verbatim so that peers behind the same NAT/firewall +// can still dial us directly. +// - On top of those, we add the relay-specific addrs for the relays to which we are +// connected. For each non-private relay addr, we encapsulate the p2p-circuit addr +// through which we can be dialed. +func (rf *relayFinder) relayAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { + rf.relayMx.Lock() + defer rf.relayMx.Unlock() + + if rf.cachedAddrs != nil && time.Now().Before(rf.cachedAddrsExpiry) { + return rf.cachedAddrs + } + + raddrs := make([]ma.Multiaddr, 0, 4*len(rf.relays)+4) + + // only keep private addrs from the original addr set + for _, addr := range addrs { + if manet.IsPrivateAddr(addr) { + raddrs = append(raddrs, addr) + } + } + + // add relay specific addrs to the list + for p := range rf.relays { + addrs := cleanupAddressSet(rf.host.Peerstore().Addrs(p)) + + circuit := ma.StringCast(fmt.Sprintf("/p2p/%s/p2p-circuit", p.Pretty())) + for _, addr := range addrs { + pub := addr.Encapsulate(circuit) + raddrs = append(raddrs, pub) + } + } + + rf.cachedAddrs = raddrs + rf.cachedAddrsExpiry = time.Now().Add(30 * time.Second) + + return raddrs +} + +func (rf *relayFinder) Start() error { + rf.ctxCancelMx.Lock() + defer rf.ctxCancelMx.Unlock() + if rf.ctxCancel != nil { + return errors.New("relayFinder already running") + } + log.Debug("starting relay finder") + ctx, cancel := context.WithCancel(context.Background()) + rf.ctxCancel = cancel + rf.refCount.Add(1) + go func() { + defer rf.refCount.Done() + rf.background(ctx) + }() + return nil +} + +func (rf *relayFinder) Stop() error { + rf.ctxCancelMx.Lock() + defer rf.ctxCancelMx.Unlock() + log.Debug("stopping relay finder") + if rf.ctxCancel != nil { + rf.ctxCancel() + } + rf.refCount.Wait() + rf.ctxCancel = nil + return nil +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/basic_host.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/basic_host.go index 5bcbf5433f..9073639ba1 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/basic_host.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/basic_host.go @@ -12,6 +12,7 @@ import ( "github.com/libp2p/go-libp2p/p2p/host/autonat" "github.com/libp2p/go-libp2p/p2p/host/pstoremanager" "github.com/libp2p/go-libp2p/p2p/host/relaysvc" + inat "github.com/libp2p/go-libp2p/p2p/net/nat" relayv2 "github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/relay" "github.com/libp2p/go-libp2p/p2p/protocol/holepunch" "github.com/libp2p/go-libp2p/p2p/protocol/identify" @@ -28,7 +29,6 @@ import ( "github.com/libp2p/go-libp2p-core/record" "github.com/libp2p/go-eventbus" - inat "github.com/libp2p/go-libp2p-nat" "github.com/libp2p/go-netroute" logging "github.com/ipfs/go-log/v2" @@ -376,7 +376,7 @@ func (h *BasicHost) newStreamHandler(s network.Stream) { } } - lzc, protoID, handle, err := h.Mux().NegotiateLazy(s) + protoID, handle, err := h.Mux().Negotiate(s) took := time.Since(before) if err != nil { if err == io.EOF { @@ -392,11 +392,6 @@ func (h *BasicHost) newStreamHandler(s network.Stream) { return } - s = &streamWrapper{ - Stream: s, - rw: lzc, - } - if h.negtimeout > 0 { if err := s.SetDeadline(time.Time{}); err != nil { log.Debugf("resetting stream deadline: ", err) @@ -605,6 +600,17 @@ func (h *BasicHost) RemoveStreamHandler(pid protocol.ID) { // to create one. If ProtocolID is "", writes no header. // (Threadsafe) func (h *BasicHost) NewStream(ctx context.Context, p peer.ID, pids ...protocol.ID) (network.Stream, error) { + // Ensure we have a connection, with peer addresses resolved by the routing system (#207) + // It is not sufficient to let the underlying host connect, it will most likely not have + // any addresses for the peer without any prior connections. + // If the caller wants to prevent the host from dialing, it should use the NoDial option. + if nodial, _ := network.GetNoDial(ctx); !nodial { + err := h.Connect(ctx, peer.AddrInfo{ID: p}) + if err != nil { + return nil, err + } + } + s, err := h.Network().NewStream(ctx, p) if err != nil { return nil, err @@ -1054,6 +1060,10 @@ func (h *BasicHost) Close() error { } h.refCount.Wait() + + if h.Network().ResourceManager() != nil { + h.Network().ResourceManager().Close() + } }) return nil diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/natmgr.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/natmgr.go index 8b41bfa820..dc6b156552 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/natmgr.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/natmgr.go @@ -8,8 +8,10 @@ import ( "sync" "time" + inat "github.com/libp2p/go-libp2p/p2p/net/nat" + "github.com/libp2p/go-libp2p-core/network" - inat "github.com/libp2p/go-libp2p-nat" + ma "github.com/multiformats/go-multiaddr" ) @@ -226,7 +228,5 @@ func (nn *nmgrNetNotifiee) ListenClose(n network.Network, addr ma.Multiaddr) { nn.natManager().sync() } -func (nn *nmgrNetNotifiee) Connected(network.Network, network.Conn) {} -func (nn *nmgrNetNotifiee) Disconnected(network.Network, network.Conn) {} -func (nn *nmgrNetNotifiee) OpenedStream(network.Network, network.Stream) {} -func (nn *nmgrNetNotifiee) ClosedStream(network.Network, network.Stream) {} +func (nn *nmgrNetNotifiee) Connected(network.Network, network.Conn) {} +func (nn *nmgrNetNotifiee) Disconnected(network.Network, network.Conn) {} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/peer_connectedness.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/peer_connectedness.go index a0ba17c3da..5460498cc0 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/peer_connectedness.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/basic/peer_connectedness.go @@ -26,10 +26,8 @@ func newPeerConnectWatcher(emitter event.Emitter) *peerConnectWatcher { } } -func (w *peerConnectWatcher) Listen(network.Network, ma.Multiaddr) {} -func (w *peerConnectWatcher) ListenClose(network.Network, ma.Multiaddr) {} -func (w *peerConnectWatcher) OpenedStream(network.Network, network.Stream) {} -func (w *peerConnectWatcher) ClosedStream(network.Network, network.Stream) {} +func (w *peerConnectWatcher) Listen(network.Network, ma.Multiaddr) {} +func (w *peerConnectWatcher) ListenClose(network.Network, ma.Multiaddr) {} func (w *peerConnectWatcher) Connected(n network.Network, conn network.Conn) { p := conn.RemotePeer() diff --git a/vendor/github.com/libp2p/go-libp2p-blankhost/blank.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/blank/blank.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-blankhost/blank.go rename to vendor/github.com/libp2p/go-libp2p/p2p/host/blank/blank.go diff --git a/vendor/github.com/libp2p/go-libp2p-blankhost/peer_connectedness.go b/vendor/github.com/libp2p/go-libp2p/p2p/host/blank/peer_connectedness.go similarity index 89% rename from vendor/github.com/libp2p/go-libp2p-blankhost/peer_connectedness.go rename to vendor/github.com/libp2p/go-libp2p/p2p/host/blank/peer_connectedness.go index 8a0f98c6be..670edc545f 100644 --- a/vendor/github.com/libp2p/go-libp2p-blankhost/peer_connectedness.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/host/blank/peer_connectedness.go @@ -26,10 +26,8 @@ func newPeerConnectWatcher(emitter event.Emitter) *peerConnectWatcher { } } -func (w *peerConnectWatcher) Listen(network.Network, ma.Multiaddr) {} -func (w *peerConnectWatcher) ListenClose(network.Network, ma.Multiaddr) {} -func (w *peerConnectWatcher) OpenedStream(network.Network, network.Stream) {} -func (w *peerConnectWatcher) ClosedStream(network.Network, network.Stream) {} +func (w *peerConnectWatcher) Listen(network.Network, ma.Multiaddr) {} +func (w *peerConnectWatcher) ListenClose(network.Network, ma.Multiaddr) {} func (w *peerConnectWatcher) Connected(n network.Network, conn network.Conn) { p := conn.RemotePeer() diff --git a/vendor/github.com/libp2p/go-stream-muxer-multistream/multistream.go b/vendor/github.com/libp2p/go-libp2p/p2p/muxer/muxer-multistream/multistream.go similarity index 94% rename from vendor/github.com/libp2p/go-stream-muxer-multistream/multistream.go rename to vendor/github.com/libp2p/go-libp2p/p2p/muxer/muxer-multistream/multistream.go index e4c89bc757..1668c0b90b 100644 --- a/vendor/github.com/libp2p/go-stream-muxer-multistream/multistream.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/muxer/muxer-multistream/multistream.go @@ -1,6 +1,6 @@ -// Package multistream implements a peerstream transport using +// Package muxer_multistream implements a peerstream transport using // go-multistream to select the underlying stream muxer -package multistream +package muxer_multistream import ( "fmt" diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/conn.go b/vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/conn.go similarity index 98% rename from vendor/github.com/libp2p/go-libp2p-yamux/conn.go rename to vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/conn.go index 5be7ed362d..a7c6dc00de 100644 --- a/vendor/github.com/libp2p/go-libp2p-yamux/conn.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/conn.go @@ -1,4 +1,4 @@ -package sm_yamux +package yamux import ( "context" diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/stream.go b/vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/stream.go similarity index 98% rename from vendor/github.com/libp2p/go-libp2p-yamux/stream.go rename to vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/stream.go index 1a93916a8c..f75e77d659 100644 --- a/vendor/github.com/libp2p/go-libp2p-yamux/stream.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/stream.go @@ -1,4 +1,4 @@ -package sm_yamux +package yamux import ( "time" diff --git a/vendor/github.com/libp2p/go-libp2p-yamux/transport.go b/vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/transport.go similarity index 87% rename from vendor/github.com/libp2p/go-libp2p-yamux/transport.go rename to vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/transport.go index a7a1fec1b6..0d43208ad0 100644 --- a/vendor/github.com/libp2p/go-libp2p-yamux/transport.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/muxer/yamux/transport.go @@ -1,7 +1,8 @@ -package sm_yamux +package yamux import ( "io/ioutil" + "math" "net" "github.com/libp2p/go-libp2p-core/network" @@ -24,7 +25,9 @@ func init() { // We always run over a security transport that buffers internally // (i.e., uses a block cipher). config.ReadBufSize = 0 - config.MaxIncomingStreams = 256 + // Effectively disable the incoming streams limit. + // This is now dynamically limited by the resource manager. + config.MaxIncomingStreams = math.MaxUint32 DefaultTransport = (*Transport)(config) } diff --git a/vendor/github.com/libp2p/go-conn-security-multistream/ssms.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/conn-security-multistream/ssms.go similarity index 100% rename from vendor/github.com/libp2p/go-conn-security-multistream/ssms.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/conn-security-multistream/ssms.go diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/net/connmgr/connmgr.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/connmgr/connmgr.go index 9ee587015c..b73e3a71d5 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/net/connmgr/connmgr.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/connmgr/connmgr.go @@ -686,9 +686,3 @@ func (nn *cmNotifee) Listen(n network.Network, addr ma.Multiaddr) {} // ListenClose is no-op in this implementation. func (nn *cmNotifee) ListenClose(n network.Network, addr ma.Multiaddr) {} - -// OpenedStream is no-op in this implementation. -func (nn *cmNotifee) OpenedStream(network.Network, network.Stream) {} - -// ClosedStream is no-op in this implementation. -func (nn *cmNotifee) ClosedStream(network.Network, network.Stream) {} diff --git a/vendor/github.com/libp2p/go-libp2p-nat/mapping.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/nat/mapping.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-nat/mapping.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/nat/mapping.go diff --git a/vendor/github.com/libp2p/go-libp2p-nat/nat.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/nat/nat.go similarity index 96% rename from vendor/github.com/libp2p/go-libp2p-nat/nat.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/nat/nat.go index dad3226b46..e2656f8bcc 100644 --- a/vendor/github.com/libp2p/go-libp2p-nat/nat.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/nat/nat.go @@ -175,7 +175,11 @@ func (nat *NAT) establishMapping(m *mapping) { if err != nil || newport == 0 { m.setExternalPort(0) // clear mapping // TODO: log.Event - log.Warnf("failed to establish port mapping: %s", err) + if err != nil { + log.Warnf("failed to establish port mapping: %s", err) + } else { + log.Warnf("failed to establish port mapping: newport = 0") + } // we do not close if the mapping failed, // because it may work again next time. return diff --git a/vendor/github.com/libp2p/go-libp2p-pnet/protector.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/pnet/protector.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-pnet/protector.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/pnet/protector.go diff --git a/vendor/github.com/libp2p/go-libp2p-pnet/psk_conn.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/pnet/psk_conn.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-pnet/psk_conn.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/pnet/psk_conn.go diff --git a/vendor/github.com/libp2p/go-reuseport-transport/dial.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/dial.go similarity index 99% rename from vendor/github.com/libp2p/go-reuseport-transport/dial.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/dial.go index 12a70b7e3e..b998be7d29 100644 --- a/vendor/github.com/libp2p/go-reuseport-transport/dial.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/dial.go @@ -1,4 +1,4 @@ -package tcpreuse +package reuseport import ( "context" diff --git a/vendor/github.com/libp2p/go-reuseport-transport/listen.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/listen.go similarity index 98% rename from vendor/github.com/libp2p/go-reuseport-transport/listen.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/listen.go index 8bb2c4022e..4388b35c8e 100644 --- a/vendor/github.com/libp2p/go-reuseport-transport/listen.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/listen.go @@ -1,4 +1,4 @@ -package tcpreuse +package reuseport import ( "net" diff --git a/vendor/github.com/libp2p/go-reuseport-transport/multidialer.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/multidialer.go similarity index 99% rename from vendor/github.com/libp2p/go-reuseport-transport/multidialer.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/multidialer.go index edb200f8df..a3b5e2e99f 100644 --- a/vendor/github.com/libp2p/go-reuseport-transport/multidialer.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/multidialer.go @@ -1,4 +1,4 @@ -package tcpreuse +package reuseport import ( "context" diff --git a/vendor/github.com/libp2p/go-reuseport-transport/reuseport.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport.go similarity index 92% rename from vendor/github.com/libp2p/go-reuseport-transport/reuseport.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport.go index 4299ddc037..27ec45e561 100644 --- a/vendor/github.com/libp2p/go-reuseport-transport/reuseport.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport.go @@ -1,10 +1,10 @@ -package tcpreuse +package reuseport import ( "context" "net" - reuseport "github.com/libp2p/go-reuseport" + "github.com/libp2p/go-reuseport" ) var fallbackDialer net.Dialer diff --git a/vendor/github.com/libp2p/go-reuseport-transport/reuseport_plan9.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport_plan9.go similarity index 97% rename from vendor/github.com/libp2p/go-reuseport-transport/reuseport_plan9.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport_plan9.go index 9318652ce4..c40eb2e8be 100644 --- a/vendor/github.com/libp2p/go-reuseport-transport/reuseport_plan9.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport_plan9.go @@ -1,4 +1,4 @@ -package tcpreuse +package reuseport import ( "net" diff --git a/vendor/github.com/libp2p/go-reuseport-transport/reuseport_posix.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport_posix.go similarity index 97% rename from vendor/github.com/libp2p/go-reuseport-transport/reuseport_posix.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport_posix.go index 4f0d89c60d..a40035477d 100644 --- a/vendor/github.com/libp2p/go-reuseport-transport/reuseport_posix.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/reuseport_posix.go @@ -1,7 +1,7 @@ //go:build !plan9 // +build !plan9 -package tcpreuse +package reuseport import ( "net" diff --git a/vendor/github.com/libp2p/go-reuseport-transport/singledialer.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/singledialer.go similarity index 95% rename from vendor/github.com/libp2p/go-reuseport-transport/singledialer.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/singledialer.go index efb96eb1ae..b15dae80b9 100644 --- a/vendor/github.com/libp2p/go-reuseport-transport/singledialer.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/singledialer.go @@ -1,4 +1,4 @@ -package tcpreuse +package reuseport import ( "context" diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/transport.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/transport.go new file mode 100644 index 0000000000..37fb446cb7 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/reuseport/transport.go @@ -0,0 +1,35 @@ +// Package reuseport provides a basic transport for automatically (and intelligently) reusing TCP ports. +// +// To use, construct a new Transport and configure listeners tr.Listen(...). +// When dialing (tr.Dial(...)), the transport will attempt to reuse the ports it's currently listening on, +// choosing the best one depending on the destination address. +// +// It is recommended to set SO_LINGER to 0 for all connections, otherwise +// reusing the port may fail when re-dialing a recently closed connection. +// See https://hea-www.harvard.edu/~fine/Tech/addrinuse.html for details. +package reuseport + +import ( + "errors" + "sync" + + logging "github.com/ipfs/go-log/v2" +) + +var log = logging.Logger("reuseport-transport") + +// ErrWrongProto is returned when dialing a protocol other than tcp. +var ErrWrongProto = errors.New("can only dial TCP over IPv4 or IPv6") + +// Transport is a TCP reuse transport that reuses listener ports. +// The zero value is safe to use. +type Transport struct { + v4 network + v6 network +} + +type network struct { + mu sync.RWMutex + listeners map[*listener]struct{} + dialer dialer +} diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/addrs.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/addrs.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-swarm/addrs.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/addrs.go diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/dial_error.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/dial_error.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-swarm/dial_error.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/dial_error.go diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/dial_sync.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/dial_sync.go similarity index 95% rename from vendor/github.com/libp2p/go-libp2p-swarm/dial_sync.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/dial_sync.go index 73d8af6b1f..f24ecd3c41 100644 --- a/vendor/github.com/libp2p/go-libp2p-swarm/dial_sync.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/dial_sync.go @@ -74,8 +74,6 @@ func (ds *dialSync) getActiveDial(p peer.ID) (*activeDial, error) { if !ok { // This code intentionally uses the background context. Otherwise, if the first call // to Dial is canceled, subsequent dial calls will also be canceled. - // XXX: this also breaks direct connection logic. We will need to pipe the - // information through some other way. ctx, cancel := context.WithCancel(context.Background()) actd = &activeDial{ ctx: ctx, diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/dial_worker.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/dial_worker.go new file mode 100644 index 0000000000..8d5d434197 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/dial_worker.go @@ -0,0 +1,316 @@ +package swarm + +import ( + "context" + "sync" + + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" +) + +// ///////////////////////////////////////////////////////////////////////////////// +// lo and behold, The Dialer +// TODO explain how all this works +// //////////////////////////////////////////////////////////////////////////////// + +type dialRequest struct { + ctx context.Context + resch chan dialResponse +} + +type dialResponse struct { + conn *Conn + err error +} + +type pendRequest struct { + req dialRequest // the original request + err *DialError // dial error accumulator + addrs map[ma.Multiaddr]struct{} // pending addr dials +} + +type addrDial struct { + addr ma.Multiaddr + ctx context.Context + conn *Conn + err error + requests []int + dialed bool +} + +type dialWorker struct { + s *Swarm + peer peer.ID + reqch <-chan dialRequest + reqno int + requests map[int]*pendRequest + pending map[ma.Multiaddr]*addrDial + resch chan dialResult + + connected bool // true when a connection has been successfully established + + nextDial []ma.Multiaddr + + // ready when we have more addresses to dial (nextDial is not empty) + triggerDial <-chan struct{} + + // for testing + wg sync.WaitGroup +} + +func newDialWorker(s *Swarm, p peer.ID, reqch <-chan dialRequest) *dialWorker { + return &dialWorker{ + s: s, + peer: p, + reqch: reqch, + requests: make(map[int]*pendRequest), + pending: make(map[ma.Multiaddr]*addrDial), + resch: make(chan dialResult), + } +} + +func (w *dialWorker) loop() { + w.wg.Add(1) + defer w.wg.Done() + defer w.s.limiter.clearAllPeerDials(w.peer) + + // used to signal readiness to dial and completion of the dial + ready := make(chan struct{}) + close(ready) + +loop: + for { + select { + case req, ok := <-w.reqch: + if !ok { + return + } + + c := w.s.bestAcceptableConnToPeer(req.ctx, w.peer) + if c != nil { + req.resch <- dialResponse{conn: c} + continue loop + } + + addrs, err := w.s.addrsForDial(req.ctx, w.peer) + if err != nil { + req.resch <- dialResponse{err: err} + continue loop + } + + // at this point, len(addrs) > 0 or else it would be error from addrsForDial + // ranke them to process in order + addrs = w.rankAddrs(addrs) + + // create the pending request object + pr := &pendRequest{ + req: req, + err: &DialError{Peer: w.peer}, + addrs: make(map[ma.Multiaddr]struct{}), + } + for _, a := range addrs { + pr.addrs[a] = struct{}{} + } + + // check if any of the addrs has been successfully dialed and accumulate + // errors from complete dials while collecting new addrs to dial/join + var todial []ma.Multiaddr + var tojoin []*addrDial + + for _, a := range addrs { + ad, ok := w.pending[a] + if !ok { + todial = append(todial, a) + continue + } + + if ad.conn != nil { + // dial to this addr was successful, complete the request + req.resch <- dialResponse{conn: ad.conn} + continue loop + } + + if ad.err != nil { + // dial to this addr errored, accumulate the error + pr.err.recordErr(a, ad.err) + delete(pr.addrs, a) + continue + } + + // dial is still pending, add to the join list + tojoin = append(tojoin, ad) + } + + if len(todial) == 0 && len(tojoin) == 0 { + // all request applicable addrs have been dialed, we must have errored + req.resch <- dialResponse{err: pr.err} + continue loop + } + + // the request has some pending or new dials, track it and schedule new dials + w.reqno++ + w.requests[w.reqno] = pr + + for _, ad := range tojoin { + if !ad.dialed { + if simConnect, isClient, reason := network.GetSimultaneousConnect(req.ctx); simConnect { + if simConnect, _, _ := network.GetSimultaneousConnect(ad.ctx); !simConnect { + ad.ctx = network.WithSimultaneousConnect(ad.ctx, isClient, reason) + } + } + } + ad.requests = append(ad.requests, w.reqno) + } + + if len(todial) > 0 { + for _, a := range todial { + w.pending[a] = &addrDial{addr: a, ctx: req.ctx, requests: []int{w.reqno}} + } + + w.nextDial = append(w.nextDial, todial...) + w.nextDial = w.rankAddrs(w.nextDial) + + // trigger a new dial now to account for the new addrs we added + w.triggerDial = ready + } + + case <-w.triggerDial: + for _, addr := range w.nextDial { + // spawn the dial + ad := w.pending[addr] + err := w.s.dialNextAddr(ad.ctx, w.peer, addr, w.resch) + if err != nil { + w.dispatchError(ad, err) + } + } + + w.nextDial = nil + w.triggerDial = nil + + case res := <-w.resch: + if res.Conn != nil { + w.connected = true + } + + ad := w.pending[res.Addr] + + if res.Conn != nil { + // we got a connection, add it to the swarm + conn, err := w.s.addConn(res.Conn, network.DirOutbound) + if err != nil { + // oops no, we failed to add it to the swarm + res.Conn.Close() + w.dispatchError(ad, err) + continue loop + } + + // dispatch to still pending requests + for _, reqno := range ad.requests { + pr, ok := w.requests[reqno] + if !ok { + // it has already dispatched a connection + continue + } + + pr.req.resch <- dialResponse{conn: conn} + delete(w.requests, reqno) + } + + ad.conn = conn + ad.requests = nil + + continue loop + } + + // it must be an error -- add backoff if applicable and dispatch + if res.Err != context.Canceled && !w.connected { + // we only add backoff if there has not been a successful connection + // for consistency with the old dialer behavior. + w.s.backf.AddBackoff(w.peer, res.Addr) + } + + w.dispatchError(ad, res.Err) + } + } +} + +// dispatches an error to a specific addr dial +func (w *dialWorker) dispatchError(ad *addrDial, err error) { + ad.err = err + for _, reqno := range ad.requests { + pr, ok := w.requests[reqno] + if !ok { + // has already been dispatched + continue + } + + // accumulate the error + pr.err.recordErr(ad.addr, err) + + delete(pr.addrs, ad.addr) + if len(pr.addrs) == 0 { + // all addrs have erred, dispatch dial error + // but first do a last one check in case an acceptable connection has landed from + // a simultaneous dial that started later and added new acceptable addrs + c := w.s.bestAcceptableConnToPeer(pr.req.ctx, w.peer) + if c != nil { + pr.req.resch <- dialResponse{conn: c} + } else { + pr.req.resch <- dialResponse{err: pr.err} + } + delete(w.requests, reqno) + } + } + + ad.requests = nil + + // if it was a backoff, clear the address dial so that it doesn't inhibit new dial requests. + // this is necessary to support active listen scenarios, where a new dial comes in while + // another dial is in progress, and needs to do a direct connection without inhibitions from + // dial backoff. + // it is also necessary to preserve consisent behaviour with the old dialer -- TestDialBackoff + // regresses without this. + if err == ErrDialBackoff { + delete(w.pending, ad.addr) + } +} + +// ranks addresses in descending order of preference for dialing, with the following rules: +// NonRelay > Relay +// NonWS > WS +// Private > Public +// UDP > TCP +func (w *dialWorker) rankAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { + addrTier := func(a ma.Multiaddr) (tier int) { + if isRelayAddr(a) { + tier |= 0b1000 + } + if isExpensiveAddr(a) { + tier |= 0b0100 + } + if !manet.IsPrivateAddr(a) { + tier |= 0b0010 + } + if isFdConsumingAddr(a) { + tier |= 0b0001 + } + + return tier + } + + tiers := make([][]ma.Multiaddr, 16) + for _, a := range addrs { + tier := addrTier(a) + tiers[tier] = append(tiers[tier], a) + } + + result := make([]ma.Multiaddr, 0, len(addrs)) + for _, tier := range tiers { + result = append(result, tier...) + } + + return result +} diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/limiter.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/limiter.go similarity index 99% rename from vendor/github.com/libp2p/go-libp2p-swarm/limiter.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/limiter.go index ac72279bfe..6b49d8ec0b 100644 --- a/vendor/github.com/libp2p/go-libp2p-swarm/limiter.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/limiter.go @@ -220,7 +220,7 @@ func (dl *dialLimiter) executeDial(j *dialJob) { select { case j.resp <- dialResult{Conn: con, Addr: j.addr, Err: err}: case <-j.ctx.Done(): - if err == nil { + if con != nil { con.Close() } } diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/swarm.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-swarm/swarm.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm.go diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_addr.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_addr.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-swarm/swarm_addr.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_addr.go diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_conn.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_conn.go similarity index 95% rename from vendor/github.com/libp2p/go-libp2p-swarm/swarm_conn.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_conn.go index 77b2defb52..64fb2ed5df 100644 --- a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_conn.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_conn.go @@ -233,17 +233,7 @@ func (c *Conn) addStream(ts network.MuxedStream, dir network.Direction, scope ne // firing (in Swarm.remove). c.swarm.refs.Add(1) - // Take the notification lock before releasing the streams lock to block - // StreamClose notifications until after the StreamOpen notifications - // done. - s.notifyLk.Lock() c.streams.Unlock() - - c.swarm.notifyAll(func(f network.Notifiee) { - f.OpenedStream(c.swarm, s) - }) - s.notifyLk.Unlock() - return s, nil } diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_dial.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_dial.go similarity index 62% rename from vendor/github.com/libp2p/go-libp2p-swarm/swarm_dial.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_dial.go index c92970cdee..ca11d7326f 100644 --- a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_dial.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_dial.go @@ -278,281 +278,10 @@ func (s *Swarm) dialPeer(ctx context.Context, p peer.ID) (*Conn, error) { return nil, err } -// ///////////////////////////////////////////////////////////////////////////////// -// lo and behold, The Dialer -// TODO explain how all this works -// //////////////////////////////////////////////////////////////////////////////// - -type dialRequest struct { - ctx context.Context - resch chan dialResponse -} - -type dialResponse struct { - conn *Conn - err error -} - // dialWorkerLoop synchronizes and executes concurrent dials to a single peer func (s *Swarm) dialWorkerLoop(p peer.ID, reqch <-chan dialRequest) { - defer s.limiter.clearAllPeerDials(p) - - type pendRequest struct { - req dialRequest // the original request - err *DialError // dial error accumulator - addrs map[ma.Multiaddr]struct{} // pending addr dials - } - - type addrDial struct { - addr ma.Multiaddr - ctx context.Context - conn *Conn - err error - requests []int - dialed bool - } - - reqno := 0 - requests := make(map[int]*pendRequest) - pending := make(map[ma.Multiaddr]*addrDial) - - dispatchError := func(ad *addrDial, err error) { - ad.err = err - for _, reqno := range ad.requests { - pr, ok := requests[reqno] - if !ok { - // has already been dispatched - continue - } - - // accumulate the error - pr.err.recordErr(ad.addr, err) - - delete(pr.addrs, ad.addr) - if len(pr.addrs) == 0 { - // all addrs have erred, dispatch dial error - // but first do a last one check in case an acceptable connection has landed from - // a simultaneous dial that started later and added new acceptable addrs - c := s.bestAcceptableConnToPeer(pr.req.ctx, p) - if c != nil { - pr.req.resch <- dialResponse{conn: c} - } else { - pr.req.resch <- dialResponse{err: pr.err} - } - delete(requests, reqno) - } - } - - ad.requests = nil - - // if it was a backoff, clear the address dial so that it doesn't inhibit new dial requests. - // this is necessary to support active listen scenarios, where a new dial comes in while - // another dial is in progress, and needs to do a direct connection without inhibitions from - // dial backoff. - // it is also necessary to preserve consisent behaviour with the old dialer -- TestDialBackoff - // regresses without this. - if err == ErrDialBackoff { - delete(pending, ad.addr) - } - } - - var triggerDial <-chan struct{} - triggerNow := make(chan struct{}) - close(triggerNow) - - var nextDial []ma.Multiaddr - active := 0 - done := false // true when the request channel has been closed - connected := false // true when a connection has been successfully established - - resch := make(chan dialResult) - -loop: - for { - select { - case req, ok := <-reqch: - if !ok { - // request channel has been closed, wait for pending dials to complete - if active > 0 { - done = true - reqch = nil - triggerDial = nil - continue loop - } - - // no active dials, we are done - return - } - - c := s.bestAcceptableConnToPeer(req.ctx, p) - if c != nil { - req.resch <- dialResponse{conn: c} - continue loop - } - - addrs, err := s.addrsForDial(req.ctx, p) - if err != nil { - req.resch <- dialResponse{err: err} - continue loop - } - - // at this point, len(addrs) > 0 or else it would be error from addrsForDial - // ranke them to process in order - addrs = s.rankAddrs(addrs) - - // create the pending request object - pr := &pendRequest{ - req: req, - err: &DialError{Peer: p}, - addrs: make(map[ma.Multiaddr]struct{}), - } - for _, a := range addrs { - pr.addrs[a] = struct{}{} - } - - // check if any of the addrs has been successfully dialed and accumulate - // errors from complete dials while collecting new addrs to dial/join - var todial []ma.Multiaddr - var tojoin []*addrDial - - for _, a := range addrs { - ad, ok := pending[a] - if !ok { - todial = append(todial, a) - continue - } - - if ad.conn != nil { - // dial to this addr was successful, complete the request - req.resch <- dialResponse{conn: ad.conn} - continue loop - } - - if ad.err != nil { - // dial to this addr errored, accumulate the error - pr.err.recordErr(a, ad.err) - delete(pr.addrs, a) - continue - } - - // dial is still pending, add to the join list - tojoin = append(tojoin, ad) - } - - if len(todial) == 0 && len(tojoin) == 0 { - // all request applicable addrs have been dialed, we must have errored - req.resch <- dialResponse{err: pr.err} - continue loop - } - - // the request has some pending or new dials, track it and schedule new dials - reqno++ - requests[reqno] = pr - - for _, ad := range tojoin { - if !ad.dialed { - if simConnect, isClient, reason := network.GetSimultaneousConnect(req.ctx); simConnect { - if simConnect, _, _ := network.GetSimultaneousConnect(ad.ctx); !simConnect { - ad.ctx = network.WithSimultaneousConnect(ad.ctx, isClient, reason) - } - } - } - ad.requests = append(ad.requests, reqno) - } - - if len(todial) > 0 { - for _, a := range todial { - pending[a] = &addrDial{addr: a, ctx: req.ctx, requests: []int{reqno}} - } - - nextDial = append(nextDial, todial...) - nextDial = s.rankAddrs(nextDial) - - // trigger a new dial now to account for the new addrs we added - triggerDial = triggerNow - } - - case <-triggerDial: - for _, addr := range nextDial { - // spawn the dial - ad := pending[addr] - err := s.dialNextAddr(ad.ctx, p, addr, resch) - if err != nil { - dispatchError(ad, err) - } else { - active++ - } - } - - nextDial = nil - triggerDial = nil - - case res := <-resch: - active-- - - if res.Conn != nil { - connected = true - } - - if done && active == 0 { - if res.Conn != nil { - // we got an actual connection, but the dial has been cancelled - // Should we close it? I think not, we should just add it to the swarm - _, err := s.addConn(res.Conn, network.DirOutbound) - if err != nil { - // well duh, now we have to close it - res.Conn.Close() - } - } - return - } - - ad := pending[res.Addr] - - if res.Conn != nil { - // we got a connection, add it to the swarm - conn, err := s.addConn(res.Conn, network.DirOutbound) - if err != nil { - // oops no, we failed to add it to the swarm - res.Conn.Close() - dispatchError(ad, err) - if active == 0 && len(nextDial) > 0 { - triggerDial = triggerNow - } - continue loop - } - - // dispatch to still pending requests - for _, reqno := range ad.requests { - pr, ok := requests[reqno] - if !ok { - // it has already dispatched a connection - continue - } - - pr.req.resch <- dialResponse{conn: conn} - delete(requests, reqno) - } - - ad.conn = conn - ad.requests = nil - - continue loop - } - - // it must be an error -- add backoff if applicable and dispatch - if res.Err != context.Canceled && !connected { - // we only add backoff if there has not been a successful connection - // for consistency with the old dialer behavior. - s.backf.AddBackoff(p, res.Addr) - } - - dispatchError(ad, res.Err) - if active == 0 && len(nextDial) > 0 { - triggerDial = triggerNow - } - } - } + w := newDialWorker(s, p, reqch) + w.loop() } func (s *Swarm) addrsForDial(ctx context.Context, p peer.ID) ([]ma.Multiaddr, error) { @@ -597,43 +326,6 @@ func (s *Swarm) nonProxyAddr(addr ma.Multiaddr) bool { return !t.Proxy() } -// ranks addresses in descending order of preference for dialing, with the following rules: -// NonRelay > Relay -// NonWS > WS -// Private > Public -// UDP > TCP -func (s *Swarm) rankAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { - addrTier := func(a ma.Multiaddr) (tier int) { - if isRelayAddr(a) { - tier |= 0b1000 - } - if isExpensiveAddr(a) { - tier |= 0b0100 - } - if !manet.IsPrivateAddr(a) { - tier |= 0b0010 - } - if isFdConsumingAddr(a) { - tier |= 0b0001 - } - - return tier - } - - tiers := make([][]ma.Multiaddr, 16) - for _, a := range addrs { - tier := addrTier(a) - tiers[tier] = append(tiers[tier], a) - } - - result := make([]ma.Multiaddr, 0, len(addrs)) - for _, tier := range tiers { - result = append(result, tier...) - } - - return result -} - // filterKnownUndialables takes a list of multiaddrs, and removes those // that we definitely don't want to dial: addresses configured to be blocked, // IPv6 link-local addresses, addresses without a dial-capable transport, diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_listen.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_listen.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-swarm/swarm_listen.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_listen.go diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_stream.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_stream.go similarity index 88% rename from vendor/github.com/libp2p/go-libp2p-swarm/swarm_stream.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_stream.go index 5e5c965335..109cce5800 100644 --- a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_stream.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_stream.go @@ -24,8 +24,6 @@ type Stream struct { closeOnce sync.Once - notifyLk sync.Mutex - protocol atomic.Value stat network.Stats @@ -90,14 +88,14 @@ func (s *Stream) Reset() error { return err } -// Close closes the stream for writing, flushing all data and sending an EOF. +// CloseWrite closes the stream for writing, flushing all data and sending an EOF. // This function does not free resources, call Close or Reset when done with the // stream. func (s *Stream) CloseWrite() error { return s.stream.CloseWrite() } -// Close closes the stream for reading. This function does not free resources, +// CloseRead closes the stream for reading. This function does not free resources, // call Close or Reset when done with the stream. func (s *Stream) CloseRead() error { return s.stream.CloseRead() @@ -105,18 +103,7 @@ func (s *Stream) CloseRead() error { func (s *Stream) remove() { s.conn.removeStream(s) - - // We *must* do this in a goroutine. This can be called during a - // an open notification and will block until that notification is done. - go func() { - s.notifyLk.Lock() - defer s.notifyLk.Unlock() - - s.conn.swarm.notifyAll(func(f network.Notifiee) { - f.ClosedStream(s.conn.swarm, s) - }) - s.conn.swarm.refs.Done() - }() + s.conn.swarm.refs.Done() } // Protocol returns the protocol negotiated on this stream (if set). diff --git a/vendor/github.com/libp2p/go-libp2p-swarm/swarm_transport.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_transport.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-swarm/swarm_transport.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/swarm/swarm_transport.go diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/conn.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/conn.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-transport-upgrader/conn.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/conn.go diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/listener.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/listener.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-transport-upgrader/listener.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/listener.go diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/threshold.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/threshold.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-transport-upgrader/threshold.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/threshold.go diff --git a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/upgrader.go b/vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/upgrader.go similarity index 96% rename from vendor/github.com/libp2p/go-libp2p-transport-upgrader/upgrader.go rename to vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/upgrader.go index 9a3ec0f8ba..4f8e712254 100644 --- a/vendor/github.com/libp2p/go-libp2p-transport-upgrader/upgrader.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/net/upgrader/upgrader.go @@ -7,6 +7,8 @@ import ( "net" "time" + "github.com/libp2p/go-libp2p/p2p/net/pnet" + "github.com/libp2p/go-libp2p-core/connmgr" "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" @@ -14,7 +16,6 @@ import ( "github.com/libp2p/go-libp2p-core/sec" "github.com/libp2p/go-libp2p-core/transport" - pnet "github.com/libp2p/go-libp2p-pnet" manet "github.com/multiformats/go-multiaddr/net" ) @@ -157,9 +158,9 @@ func (u *upgrader) upgrade(ctx context.Context, t transport.Transport, maconn ma return nil, fmt.Errorf("gater rejected connection with peer %s and addr %s with direction %d", sconn.RemotePeer().Pretty(), maconn.RemoteMultiaddr(), dir) } - // Only call SetPeer if we didn't know the peer ID in advance. - // Otherwise, the caller will already have called it before calling Upgrade. - if p == "" { + // Only call SetPeer if it hasn't already been set -- this can happen when we don't know + // the peer in advance and in some bug scenarios. + if connScope.PeerScope() == nil { if err := connScope.SetPeer(sconn.RemotePeer()); err != nil { log.Debugw("resource manager blocked connection for peer", "peer", sconn.RemotePeer(), "addr", conn.RemoteAddr(), "error", err) if err := maconn.Close(); err != nil { diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/coordination.go b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/coordination.go deleted file mode 100644 index c396448571..0000000000 --- a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/coordination.go +++ /dev/null @@ -1,511 +0,0 @@ -package holepunch - -import ( - "context" - "errors" - "fmt" - "sync" - "time" - - "github.com/libp2p/go-libp2p-core/host" - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/protocol" - pb "github.com/libp2p/go-libp2p/p2p/protocol/holepunch/pb" - "github.com/libp2p/go-libp2p/p2p/protocol/identify" - - logging "github.com/ipfs/go-log/v2" - "github.com/libp2p/go-msgio/protoio" - ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr/net" -) - -// Protocol is the libp2p protocol for Hole Punching. -const Protocol protocol.ID = "/libp2p/dcutr" - -// StreamTimeout is the timeout for the hole punch protocol stream. -var StreamTimeout = 1 * time.Minute - -// TODO Should we have options for these ? -const ( - ServiceName = "libp2p.holepunch" - - maxMsgSize = 4 * 1024 // 4K - dialTimeout = 5 * time.Second - maxRetries = 3 - retryWait = 2 * time.Second -) - -var ( - log = logging.Logger("p2p-holepunch") - // ErrHolePunchActive is returned from DirectConnect when another hole punching attempt is currently running - ErrHolePunchActive = errors.New("another hole punching attempt to this peer is active") - // ErrClosed is returned when the hole punching is closed - ErrClosed = errors.New("hole punching service closing") -) - -// The Service is used to make direct connections with a peer via hole-punching. -type Service struct { - ctx context.Context - ctxCancel context.CancelFunc - - ids identify.IDService - host host.Host - - tracer *tracer - - closeMx sync.RWMutex - closed bool - refCount sync.WaitGroup - - hasPublicAddrsChan chan struct{} // this chan is closed as soon as we have a public address - - // active hole punches for deduplicating - activeMx sync.Mutex - active map[peer.ID]struct{} -} - -type Option func(*Service) error - -// NewService creates a new service that can be used for hole punching -func NewService(h host.Host, ids identify.IDService, opts ...Option) (*Service, error) { - if ids == nil { - return nil, errors.New("identify service can't be nil") - } - - ctx, cancel := context.WithCancel(context.Background()) - hs := &Service{ - ctx: ctx, - ctxCancel: cancel, - host: h, - ids: ids, - active: make(map[peer.ID]struct{}), - hasPublicAddrsChan: make(chan struct{}), - } - - for _, opt := range opts { - if err := opt(hs); err != nil { - cancel() - return nil, err - } - } - - hs.refCount.Add(1) - go hs.watchForPublicAddr() - - h.Network().Notify((*netNotifiee)(hs)) - return hs, nil -} - -func (hs *Service) watchForPublicAddr() { - defer hs.refCount.Done() - - log.Debug("waiting until we have at least one public address", "peer", hs.host.ID()) - - // TODO: We should have an event here that fires when identify discovers a new - // address (and when autonat confirms that address). - // As we currently don't have an event like this, just check our observed addresses - // regularly (exponential backoff starting at 250 ms, capped at 5s). - duration := 250 * time.Millisecond - const maxDuration = 5 * time.Second - t := time.NewTimer(duration) - defer t.Stop() - for { - if containsPublicAddr(hs.ids.OwnObservedAddrs()) { - log.Debug("Host now has a public address. Starting holepunch protocol.") - hs.host.SetStreamHandler(Protocol, hs.handleNewStream) - close(hs.hasPublicAddrsChan) - return - } - - select { - case <-hs.ctx.Done(): - return - case <-t.C: - duration *= 2 - if duration > maxDuration { - duration = maxDuration - } - t.Reset(duration) - } - } -} - -// Close closes the Hole Punch Service. -func (hs *Service) Close() error { - hs.closeMx.Lock() - hs.closed = true - hs.closeMx.Unlock() - hs.tracer.Close() - hs.host.RemoveStreamHandler(Protocol) - hs.ctxCancel() - hs.refCount.Wait() - return nil -} - -// initiateHolePunch opens a new hole punching coordination stream, -// exchanges the addresses and measures the RTT. -func (hs *Service) initiateHolePunch(rp peer.ID) ([]ma.Multiaddr, time.Duration, error) { - hpCtx := network.WithUseTransient(hs.ctx, "hole-punch") - sCtx := network.WithNoDial(hpCtx, "hole-punch") - - str, err := hs.host.NewStream(sCtx, rp, Protocol) - if err != nil { - return nil, 0, fmt.Errorf("failed to open hole-punching stream: %w", err) - } - defer str.Close() - - if err := str.Scope().SetService(ServiceName); err != nil { - log.Debugf("error attaching stream to holepunch service: %s", err) - str.Reset() - return nil, 0, err - } - - if err := str.Scope().ReserveMemory(maxMsgSize, network.ReservationPriorityAlways); err != nil { - log.Debugf("error reserving memory for stream: %s, err") - str.Reset() - return nil, 0, err - } - defer str.Scope().ReleaseMemory(maxMsgSize) - - w := protoio.NewDelimitedWriter(str) - rd := protoio.NewDelimitedReader(str, maxMsgSize) - - str.SetDeadline(time.Now().Add(StreamTimeout)) - // send a CONNECT and start RTT measurement. - msg := &pb.HolePunch{ - Type: pb.HolePunch_CONNECT.Enum(), - ObsAddrs: addrsToBytes(removeRelayAddrs(hs.ids.OwnObservedAddrs())), - } - - start := time.Now() - if err := w.WriteMsg(msg); err != nil { - str.Reset() - return nil, 0, err - } - - // wait for a CONNECT message from the remote peer - msg.Reset() - if err := rd.ReadMsg(msg); err != nil { - str.Reset() - return nil, 0, fmt.Errorf("failed to read CONNECT message from remote peer: %w", err) - } - rtt := time.Since(start) - - if t := msg.GetType(); t != pb.HolePunch_CONNECT { - str.Reset() - return nil, 0, fmt.Errorf("expect CONNECT message, got %s", t) - } - addrs := removeRelayAddrs(addrsFromBytes(msg.ObsAddrs)) - if len(addrs) == 0 { - str.Reset() - } - - msg.Reset() - msg.Type = pb.HolePunch_SYNC.Enum() - if err := w.WriteMsg(msg); err != nil { - str.Reset() - return nil, 0, fmt.Errorf("failed to send SYNC message for hole punching: %w", err) - } - return addrs, rtt, nil -} - -func (hs *Service) beginDirectConnect(p peer.ID) error { - hs.closeMx.RLock() - defer hs.closeMx.RUnlock() - if hs.closed { - return ErrClosed - } - - hs.activeMx.Lock() - defer hs.activeMx.Unlock() - if _, ok := hs.active[p]; ok { - return ErrHolePunchActive - } - - hs.active[p] = struct{}{} - return nil -} - -// DirectConnect attempts to make a direct connection with a remote peer. -// It first attempts a direct dial (if we have a public address of that peer), and then -// coordinates a hole punch over the given relay connection. -func (hs *Service) DirectConnect(p peer.ID) error { - if err := hs.beginDirectConnect(p); err != nil { - return err - } - - defer func() { - hs.activeMx.Lock() - delete(hs.active, p) - hs.activeMx.Unlock() - }() - - return hs.directConnect(p) -} - -func (hs *Service) directConnect(rp peer.ID) error { - // short-circuit check to see if we already have a direct connection - for _, c := range hs.host.Network().ConnsToPeer(rp) { - if !isRelayAddress(c.RemoteMultiaddr()) { - return nil - } - } - - // short-circuit hole punching if a direct dial works. - // attempt a direct connection ONLY if we have a public address for the remote peer - for _, a := range hs.host.Peerstore().Addrs(rp) { - if manet.IsPublicAddr(a) && !isRelayAddress(a) { - forceDirectConnCtx := network.WithForceDirectDial(hs.ctx, "hole-punching") - dialCtx, cancel := context.WithTimeout(forceDirectConnCtx, dialTimeout) - - tstart := time.Now() - // This dials *all* public addresses from the peerstore. - err := hs.host.Connect(dialCtx, peer.AddrInfo{ID: rp}) - dt := time.Since(tstart) - cancel() - - if err != nil { - hs.tracer.DirectDialFailed(rp, dt, err) - break - } - hs.tracer.DirectDialSuccessful(rp, dt) - log.Debugw("direct connection to peer successful, no need for a hole punch", "peer", rp) - return nil - } - } - - log.Debugw("got inbound proxy conn", "peer", rp) - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - defer cancel() - select { - case <-hs.ctx.Done(): - return hs.ctx.Err() - case <-ctx.Done(): - log.Debug("didn't find any public host address") - return errors.New("can't initiate hole punch, as we don't have any public addresses") - case <-hs.hasPublicAddrsChan: - } - - // hole punch - for i := 0; i < maxRetries; i++ { - addrs, rtt, err := hs.initiateHolePunch(rp) - if err != nil { - log.Debugw("hole punching failed", "peer", rp, "error", err) - hs.tracer.ProtocolError(rp, err) - return err - } - synTime := rtt / 2 - log.Debugf("peer RTT is %s; starting hole punch in %s", rtt, synTime) - - // wait for sync to reach the other peer and then punch a hole for it in our NAT - // by attempting a connect to it. - timer := time.NewTimer(synTime) - select { - case start := <-timer.C: - pi := peer.AddrInfo{ - ID: rp, - Addrs: addrs, - } - hs.tracer.StartHolePunch(rp, addrs, rtt) - err := hs.holePunchConnect(pi, true) - dt := time.Since(start) - hs.tracer.EndHolePunch(rp, dt, err) - if err == nil { - log.Debugw("hole punching with successful", "peer", rp, "time", dt) - return nil - } - case <-hs.ctx.Done(): - timer.Stop() - return hs.ctx.Err() - } - } - return fmt.Errorf("all retries for hole punch with peer %s failed", rp) -} - -func (hs *Service) incomingHolePunch(s network.Stream) (rtt time.Duration, addrs []ma.Multiaddr, err error) { - // sanity check: a hole punch request should only come from peers behind a relay - if !isRelayAddress(s.Conn().RemoteMultiaddr()) { - return 0, nil, fmt.Errorf("received hole punch stream: %s", s.Conn().RemoteMultiaddr()) - } - ownAddrs := removeRelayAddrs(hs.ids.OwnObservedAddrs()) - // If we can't tell the peer where to dial us, there's no point in starting the hole punching. - if len(ownAddrs) == 0 { - return 0, nil, errors.New("rejecting hole punch request, as we don't have any public addresses") - } - - if err := s.Scope().ReserveMemory(maxMsgSize, network.ReservationPriorityAlways); err != nil { - log.Debugf("error reserving memory for stream: %s, err") - return 0, nil, err - } - defer s.Scope().ReleaseMemory(maxMsgSize) - - wr := protoio.NewDelimitedWriter(s) - rd := protoio.NewDelimitedReader(s, maxMsgSize) - - // Read Connect message - msg := new(pb.HolePunch) - - s.SetDeadline(time.Now().Add(StreamTimeout)) - - if err := rd.ReadMsg(msg); err != nil { - return 0, nil, fmt.Errorf("failed to read message from initator: %w", err) - } - if t := msg.GetType(); t != pb.HolePunch_CONNECT { - return 0, nil, fmt.Errorf("expected CONNECT message from initiator but got %d", t) - } - obsDial := removeRelayAddrs(addrsFromBytes(msg.ObsAddrs)) - log.Debugw("received hole punch request", "peer", s.Conn().RemotePeer(), "addrs", obsDial) - if len(obsDial) == 0 { - return 0, nil, errors.New("expected CONNECT message to contain at least one address") - } - - // Write CONNECT message - msg.Reset() - msg.Type = pb.HolePunch_CONNECT.Enum() - msg.ObsAddrs = addrsToBytes(ownAddrs) - tstart := time.Now() - if err := wr.WriteMsg(msg); err != nil { - return 0, nil, fmt.Errorf("failed to write CONNECT message to initator: %w", err) - } - - // Read SYNC message - msg.Reset() - if err := rd.ReadMsg(msg); err != nil { - return 0, nil, fmt.Errorf("failed to read message from initator: %w", err) - } - if t := msg.GetType(); t != pb.HolePunch_SYNC { - return 0, nil, fmt.Errorf("expected SYNC message from initiator but got %d", t) - } - return time.Since(tstart), obsDial, nil -} - -func (hs *Service) handleNewStream(s network.Stream) { - // Check directionality of the underlying connection. - // Peer A receives an inbound connection from peer B. - // Peer A opens a new hole punch stream to peer B. - // Peer B receives this stream, calling this function. - // Peer B sees the underlying connection as an outbound connection. - if s.Conn().Stat().Direction == network.DirInbound { - s.Reset() - return - } - - if err := s.Scope().SetService(ServiceName); err != nil { - log.Debugf("error attaching stream to holepunch service: %s", err) - s.Reset() - return - } - - rp := s.Conn().RemotePeer() - rtt, addrs, err := hs.incomingHolePunch(s) - if err != nil { - hs.tracer.ProtocolError(rp, err) - log.Debugw("error handling holepunching stream from", rp, "error", err) - s.Reset() - return - } - s.Close() - - // Hole punch now by forcing a connect - pi := peer.AddrInfo{ - ID: rp, - Addrs: addrs, - } - hs.tracer.StartHolePunch(rp, addrs, rtt) - log.Debugw("starting hole punch", "peer", rp) - start := time.Now() - err = hs.holePunchConnect(pi, false) - dt := time.Since(start) - hs.tracer.EndHolePunch(rp, dt, err) -} - -func (hs *Service) holePunchConnect(pi peer.AddrInfo, isClient bool) error { - holePunchCtx := network.WithSimultaneousConnect(hs.ctx, isClient, "hole-punching") - forceDirectConnCtx := network.WithForceDirectDial(holePunchCtx, "hole-punching") - dialCtx, cancel := context.WithTimeout(forceDirectConnCtx, dialTimeout) - defer cancel() - - hs.tracer.HolePunchAttempt(pi.ID) - if err := hs.host.Connect(dialCtx, pi); err != nil { - log.Debugw("hole punch attempt with peer failed", "peer ID", pi.ID, "error", err) - return err - } - log.Debugw("hole punch successful", "peer", pi.ID) - return nil -} - -func containsPublicAddr(addrs []ma.Multiaddr) bool { - for _, addr := range addrs { - if isRelayAddress(addr) || !manet.IsPublicAddr(addr) { - continue - } - return true - } - return false -} - -func removeRelayAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { - result := make([]ma.Multiaddr, 0, len(addrs)) - for _, addr := range addrs { - if !isRelayAddress(addr) { - result = append(result, addr) - } - } - return result -} - -func isRelayAddress(a ma.Multiaddr) bool { - _, err := a.ValueForProtocol(ma.P_CIRCUIT) - return err == nil -} - -func addrsToBytes(as []ma.Multiaddr) [][]byte { - bzs := make([][]byte, 0, len(as)) - for _, a := range as { - bzs = append(bzs, a.Bytes()) - } - return bzs -} - -func addrsFromBytes(bzs [][]byte) []ma.Multiaddr { - addrs := make([]ma.Multiaddr, 0, len(bzs)) - for _, bz := range bzs { - a, err := ma.NewMultiaddrBytes(bz) - if err == nil { - addrs = append(addrs, a) - } - } - return addrs -} - -type netNotifiee Service - -func (nn *netNotifiee) Connected(_ network.Network, conn network.Conn) { - hs := (*Service)(nn) - - // Hole punch if it's an inbound proxy connection. - // If we already have a direct connection with the remote peer, this will be a no-op. - if conn.Stat().Direction == network.DirInbound && isRelayAddress(conn.RemoteMultiaddr()) { - hs.refCount.Add(1) - go func() { - defer hs.refCount.Done() - - select { - // waiting for Identify here will allow us to access the peer's public and observed addresses - // that we can dial to for a hole punch. - case <-hs.ids.IdentifyWait(conn): - case <-hs.ctx.Done(): - return - } - - _ = hs.DirectConnect(conn.RemotePeer()) - }() - } -} - -func (nn *netNotifiee) Disconnected(_ network.Network, v network.Conn) {} -func (nn *netNotifiee) OpenedStream(n network.Network, v network.Stream) {} -func (nn *netNotifiee) ClosedStream(n network.Network, v network.Stream) {} -func (nn *netNotifiee) Listen(n network.Network, a ma.Multiaddr) {} -func (nn *netNotifiee) ListenClose(n network.Network, a ma.Multiaddr) {} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/holepuncher.go b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/holepuncher.go new file mode 100644 index 0000000000..810608f204 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/holepuncher.go @@ -0,0 +1,273 @@ +package holepunch + +import ( + "context" + "errors" + "fmt" + "sync" + "time" + + pb "github.com/libp2p/go-libp2p/p2p/protocol/holepunch/pb" + "github.com/libp2p/go-libp2p/p2p/protocol/identify" + + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + + "github.com/libp2p/go-msgio/protoio" + + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" +) + +// ErrHolePunchActive is returned from DirectConnect when another hole punching attempt is currently running +var ErrHolePunchActive = errors.New("another hole punching attempt to this peer is active") + +const ( + dialTimeout = 5 * time.Second + maxRetries = 3 +) + +// The holePuncher is run on the peer that's behind a NAT / Firewall. +// It observes new incoming connections via a relay that it has a reservation with, +// and initiates the DCUtR protocol with them. +// It then first tries to establish a direct connection, and if that fails, it +// initiates a hole punch. +type holePuncher struct { + ctx context.Context + ctxCancel context.CancelFunc + + host host.Host + refCount sync.WaitGroup + + ids identify.IDService + + // active hole punches for deduplicating + activeMx sync.Mutex + active map[peer.ID]struct{} + + closeMx sync.RWMutex + closed bool + + tracer *tracer +} + +func newHolePuncher(h host.Host, ids identify.IDService, tracer *tracer) *holePuncher { + hp := &holePuncher{ + host: h, + ids: ids, + active: make(map[peer.ID]struct{}), + tracer: tracer, + } + hp.ctx, hp.ctxCancel = context.WithCancel(context.Background()) + h.Network().Notify((*netNotifiee)(hp)) + return hp +} + +func (hp *holePuncher) beginDirectConnect(p peer.ID) error { + hp.closeMx.RLock() + defer hp.closeMx.RUnlock() + if hp.closed { + return ErrClosed + } + + hp.activeMx.Lock() + defer hp.activeMx.Unlock() + if _, ok := hp.active[p]; ok { + return ErrHolePunchActive + } + + hp.active[p] = struct{}{} + return nil +} + +// DirectConnect attempts to make a direct connection with a remote peer. +// It first attempts a direct dial (if we have a public address of that peer), and then +// coordinates a hole punch over the given relay connection. +func (hp *holePuncher) DirectConnect(p peer.ID) error { + if err := hp.beginDirectConnect(p); err != nil { + return err + } + + defer func() { + hp.activeMx.Lock() + delete(hp.active, p) + hp.activeMx.Unlock() + }() + + return hp.directConnect(p) +} + +func (hp *holePuncher) directConnect(rp peer.ID) error { + // short-circuit check to see if we already have a direct connection + for _, c := range hp.host.Network().ConnsToPeer(rp) { + if !isRelayAddress(c.RemoteMultiaddr()) { + return nil + } + } + + // short-circuit hole punching if a direct dial works. + // attempt a direct connection ONLY if we have a public address for the remote peer + for _, a := range hp.host.Peerstore().Addrs(rp) { + if manet.IsPublicAddr(a) && !isRelayAddress(a) { + forceDirectConnCtx := network.WithForceDirectDial(hp.ctx, "hole-punching") + dialCtx, cancel := context.WithTimeout(forceDirectConnCtx, dialTimeout) + + tstart := time.Now() + // This dials *all* public addresses from the peerstore. + err := hp.host.Connect(dialCtx, peer.AddrInfo{ID: rp}) + dt := time.Since(tstart) + cancel() + + if err != nil { + hp.tracer.DirectDialFailed(rp, dt, err) + break + } + hp.tracer.DirectDialSuccessful(rp, dt) + log.Debugw("direct connection to peer successful, no need for a hole punch", "peer", rp) + return nil + } + } + + log.Debugw("got inbound proxy conn", "peer", rp) + + // hole punch + for i := 0; i < maxRetries; i++ { + addrs, rtt, err := hp.initiateHolePunch(rp) + if err != nil { + log.Debugw("hole punching failed", "peer", rp, "error", err) + hp.tracer.ProtocolError(rp, err) + return err + } + synTime := rtt / 2 + log.Debugf("peer RTT is %s; starting hole punch in %s", rtt, synTime) + + // wait for sync to reach the other peer and then punch a hole for it in our NAT + // by attempting a connect to it. + timer := time.NewTimer(synTime) + select { + case start := <-timer.C: + pi := peer.AddrInfo{ + ID: rp, + Addrs: addrs, + } + hp.tracer.StartHolePunch(rp, addrs, rtt) + hp.tracer.HolePunchAttempt(pi.ID) + err := holePunchConnect(hp.ctx, hp.host, pi, true) + dt := time.Since(start) + hp.tracer.EndHolePunch(rp, dt, err) + if err == nil { + log.Debugw("hole punching with successful", "peer", rp, "time", dt) + return nil + } + case <-hp.ctx.Done(): + timer.Stop() + return hp.ctx.Err() + } + } + return fmt.Errorf("all retries for hole punch with peer %s failed", rp) +} + +// initiateHolePunch opens a new hole punching coordination stream, +// exchanges the addresses and measures the RTT. +func (hp *holePuncher) initiateHolePunch(rp peer.ID) ([]ma.Multiaddr, time.Duration, error) { + hpCtx := network.WithUseTransient(hp.ctx, "hole-punch") + sCtx := network.WithNoDial(hpCtx, "hole-punch") + + str, err := hp.host.NewStream(sCtx, rp, Protocol) + if err != nil { + return nil, 0, fmt.Errorf("failed to open hole-punching stream: %w", err) + } + defer str.Close() + + addr, rtt, err := hp.initiateHolePunchImpl(str) + if err != nil { + log.Debugf("%s", err) + str.Reset() + return addr, rtt, err + } + return addr, rtt, err +} + +func (hp *holePuncher) initiateHolePunchImpl(str network.Stream) ([]ma.Multiaddr, time.Duration, error) { + if err := str.Scope().SetService(ServiceName); err != nil { + return nil, 0, fmt.Errorf("error attaching stream to holepunch service: %s", err) + } + + if err := str.Scope().ReserveMemory(maxMsgSize, network.ReservationPriorityAlways); err != nil { + return nil, 0, fmt.Errorf("error reserving memory for stream: %s", err) + } + defer str.Scope().ReleaseMemory(maxMsgSize) + + w := protoio.NewDelimitedWriter(str) + rd := protoio.NewDelimitedReader(str, maxMsgSize) + + str.SetDeadline(time.Now().Add(StreamTimeout)) + + // send a CONNECT and start RTT measurement. + start := time.Now() + if err := w.WriteMsg(&pb.HolePunch{ + Type: pb.HolePunch_CONNECT.Enum(), + ObsAddrs: addrsToBytes(removeRelayAddrs(hp.ids.OwnObservedAddrs())), + }); err != nil { + str.Reset() + return nil, 0, err + } + + // wait for a CONNECT message from the remote peer + var msg pb.HolePunch + if err := rd.ReadMsg(&msg); err != nil { + return nil, 0, fmt.Errorf("failed to read CONNECT message from remote peer: %w", err) + } + rtt := time.Since(start) + if t := msg.GetType(); t != pb.HolePunch_CONNECT { + return nil, 0, fmt.Errorf("expect CONNECT message, got %s", t) + } + addrs := removeRelayAddrs(addrsFromBytes(msg.ObsAddrs)) + if len(addrs) == 0 { + return nil, 0, errors.New("didn't receive any public addresses in CONNECT") + } + + if err := w.WriteMsg(&pb.HolePunch{Type: pb.HolePunch_SYNC.Enum()}); err != nil { + return nil, 0, fmt.Errorf("failed to send SYNC message for hole punching: %w", err) + } + return addrs, rtt, nil +} + +func (hp *holePuncher) Close() error { + hp.closeMx.Lock() + hp.closed = true + hp.closeMx.Unlock() + hp.ctxCancel() + hp.refCount.Wait() + return nil +} + +type netNotifiee holePuncher + +func (nn *netNotifiee) Connected(_ network.Network, conn network.Conn) { + hs := (*holePuncher)(nn) + + // Hole punch if it's an inbound proxy connection. + // If we already have a direct connection with the remote peer, this will be a no-op. + if conn.Stat().Direction == network.DirInbound && isRelayAddress(conn.RemoteMultiaddr()) { + hs.refCount.Add(1) + go func() { + defer hs.refCount.Done() + + select { + // waiting for Identify here will allow us to access the peer's public and observed addresses + // that we can dial to for a hole punch. + case <-hs.ids.IdentifyWait(conn): + case <-hs.ctx.Done(): + return + } + + _ = hs.DirectConnect(conn.RemotePeer()) + }() + } +} + +func (nn *netNotifiee) Disconnected(_ network.Network, v network.Conn) {} +func (nn *netNotifiee) Listen(n network.Network, a ma.Multiaddr) {} +func (nn *netNotifiee) ListenClose(n network.Network, a ma.Multiaddr) {} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/svc.go b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/svc.go new file mode 100644 index 0000000000..f7ca7c4a12 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/svc.go @@ -0,0 +1,273 @@ +package holepunch + +import ( + "context" + "errors" + "fmt" + "sync" + "time" + + pb "github.com/libp2p/go-libp2p/p2p/protocol/holepunch/pb" + "github.com/libp2p/go-libp2p/p2p/protocol/identify" + + "github.com/libp2p/go-libp2p-core/event" + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/protocol" + + logging "github.com/ipfs/go-log/v2" + "github.com/libp2p/go-msgio/protoio" + ma "github.com/multiformats/go-multiaddr" +) + +// Protocol is the libp2p protocol for Hole Punching. +const Protocol protocol.ID = "/libp2p/dcutr" + +var log = logging.Logger("p2p-holepunch") + +// StreamTimeout is the timeout for the hole punch protocol stream. +var StreamTimeout = 1 * time.Minute + +const ( + ServiceName = "libp2p.holepunch" + + maxMsgSize = 4 * 1024 // 4K +) + +// ErrClosed is returned when the hole punching is closed +var ErrClosed = errors.New("hole punching service closing") + +type Option func(*Service) error + +// The Service runs on every node that supports the DCUtR protocol. +type Service struct { + ctx context.Context + ctxCancel context.CancelFunc + + host host.Host + ids identify.IDService + + holePuncherMx sync.Mutex + holePuncher *holePuncher + + hasPublicAddrsChan chan struct{} + + tracer *tracer + + refCount sync.WaitGroup +} + +// NewService creates a new service that can be used for hole punching +// The Service runs on all hosts that support the DCUtR protocol, +// no matter if they are behind a NAT / firewall or not. +// The Service handles DCUtR streams (which are initiated from the node behind +// a NAT / Firewall once we establish a connection to them through a relay. +func NewService(h host.Host, ids identify.IDService, opts ...Option) (*Service, error) { + if ids == nil { + return nil, errors.New("identify service can't be nil") + } + + ctx, cancel := context.WithCancel(context.Background()) + s := &Service{ + ctx: ctx, + ctxCancel: cancel, + host: h, + ids: ids, + hasPublicAddrsChan: make(chan struct{}), + } + + for _, opt := range opts { + if err := opt(s); err != nil { + cancel() + return nil, err + } + } + + s.refCount.Add(1) + go s.watchForPublicAddr() + + return s, nil +} + +func (s *Service) watchForPublicAddr() { + defer s.refCount.Done() + + log.Debug("waiting until we have at least one public address", "peer", s.host.ID()) + + // TODO: We should have an event here that fires when identify discovers a new + // address (and when autonat confirms that address). + // As we currently don't have an event like this, just check our observed addresses + // regularly (exponential backoff starting at 250 ms, capped at 5s). + duration := 250 * time.Millisecond + const maxDuration = 5 * time.Second + t := time.NewTimer(duration) + defer t.Stop() + for { + if containsPublicAddr(s.ids.OwnObservedAddrs()) { + log.Debug("Host now has a public address. Starting holepunch protocol.") + s.host.SetStreamHandler(Protocol, s.handleNewStream) + break + } + + select { + case <-s.ctx.Done(): + return + case <-t.C: + duration *= 2 + if duration > maxDuration { + duration = maxDuration + } + t.Reset(duration) + } + } + + // Only start the holePuncher if we're behind a NAT / firewall. + sub, err := s.host.EventBus().Subscribe(&event.EvtLocalReachabilityChanged{}) + if err != nil { + log.Debugf("failed to subscripe to Reachability event: %s", err) + return + } + defer sub.Close() + for { + select { + case <-s.ctx.Done(): + return + case e, ok := <-sub.Out(): + if !ok { + return + } + if e.(event.EvtLocalReachabilityChanged).Reachability != network.ReachabilityPrivate { + continue + } + s.holePuncherMx.Lock() + s.holePuncher = newHolePuncher(s.host, s.ids, s.tracer) + s.holePuncherMx.Unlock() + close(s.hasPublicAddrsChan) + return + } + } +} + +// Close closes the Hole Punch Service. +func (s *Service) Close() error { + var err error + s.holePuncherMx.Lock() + if s.holePuncher != nil { + err = s.holePuncher.Close() + } + s.holePuncherMx.Unlock() + s.tracer.Close() + s.host.RemoveStreamHandler(Protocol) + s.ctxCancel() + s.refCount.Wait() + return err +} + +func (s *Service) incomingHolePunch(str network.Stream) (rtt time.Duration, addrs []ma.Multiaddr, err error) { + // sanity check: a hole punch request should only come from peers behind a relay + if !isRelayAddress(str.Conn().RemoteMultiaddr()) { + return 0, nil, fmt.Errorf("received hole punch stream: %s", str.Conn().RemoteMultiaddr()) + } + ownAddrs := removeRelayAddrs(s.ids.OwnObservedAddrs()) + // If we can't tell the peer where to dial us, there's no point in starting the hole punching. + if len(ownAddrs) == 0 { + return 0, nil, errors.New("rejecting hole punch request, as we don't have any public addresses") + } + + if err := str.Scope().ReserveMemory(maxMsgSize, network.ReservationPriorityAlways); err != nil { + log.Debugf("error reserving memory for stream: %s, err") + return 0, nil, err + } + defer str.Scope().ReleaseMemory(maxMsgSize) + + wr := protoio.NewDelimitedWriter(str) + rd := protoio.NewDelimitedReader(str, maxMsgSize) + + // Read Connect message + msg := new(pb.HolePunch) + + str.SetDeadline(time.Now().Add(StreamTimeout)) + + if err := rd.ReadMsg(msg); err != nil { + return 0, nil, fmt.Errorf("failed to read message from initator: %w", err) + } + if t := msg.GetType(); t != pb.HolePunch_CONNECT { + return 0, nil, fmt.Errorf("expected CONNECT message from initiator but got %d", t) + } + obsDial := removeRelayAddrs(addrsFromBytes(msg.ObsAddrs)) + log.Debugw("received hole punch request", "peer", str.Conn().RemotePeer(), "addrs", obsDial) + if len(obsDial) == 0 { + return 0, nil, errors.New("expected CONNECT message to contain at least one address") + } + + // Write CONNECT message + msg.Reset() + msg.Type = pb.HolePunch_CONNECT.Enum() + msg.ObsAddrs = addrsToBytes(ownAddrs) + tstart := time.Now() + if err := wr.WriteMsg(msg); err != nil { + return 0, nil, fmt.Errorf("failed to write CONNECT message to initator: %w", err) + } + + // Read SYNC message + msg.Reset() + if err := rd.ReadMsg(msg); err != nil { + return 0, nil, fmt.Errorf("failed to read message from initator: %w", err) + } + if t := msg.GetType(); t != pb.HolePunch_SYNC { + return 0, nil, fmt.Errorf("expected SYNC message from initiator but got %d", t) + } + return time.Since(tstart), obsDial, nil +} + +func (s *Service) handleNewStream(str network.Stream) { + // Check directionality of the underlying connection. + // Peer A receives an inbound connection from peer B. + // Peer A opens a new hole punch stream to peer B. + // Peer B receives this stream, calling this function. + // Peer B sees the underlying connection as an outbound connection. + if str.Conn().Stat().Direction == network.DirInbound { + str.Reset() + return + } + + if err := str.Scope().SetService(ServiceName); err != nil { + log.Debugf("error attaching stream to holepunch service: %s", err) + str.Reset() + return + } + + rp := str.Conn().RemotePeer() + rtt, addrs, err := s.incomingHolePunch(str) + if err != nil { + s.tracer.ProtocolError(rp, err) + log.Debugw("error handling holepunching stream from", rp, "error", err) + str.Reset() + return + } + str.Close() + + // Hole punch now by forcing a connect + pi := peer.AddrInfo{ + ID: rp, + Addrs: addrs, + } + s.tracer.StartHolePunch(rp, addrs, rtt) + log.Debugw("starting hole punch", "peer", rp) + start := time.Now() + s.tracer.HolePunchAttempt(pi.ID) + err = holePunchConnect(s.ctx, s.host, pi, false) + dt := time.Since(start) + s.tracer.EndHolePunch(rp, dt, err) +} + +// DirectConnect is only exposed for testing purposes. +// TODO: find a solution for this. +func (s *Service) DirectConnect(p peer.ID) error { + <-s.hasPublicAddrsChan + s.holePuncherMx.Lock() + holePuncher := s.holePuncher + s.holePuncherMx.Unlock() + return holePuncher.DirectConnect(p) +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/util.go b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/util.go new file mode 100644 index 0000000000..af70775704 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/holepunch/util.go @@ -0,0 +1,69 @@ +package holepunch + +import ( + "context" + + "github.com/libp2p/go-libp2p-core/host" + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" +) + +func containsPublicAddr(addrs []ma.Multiaddr) bool { + for _, addr := range addrs { + if isRelayAddress(addr) || !manet.IsPublicAddr(addr) { + continue + } + return true + } + return false +} + +func removeRelayAddrs(addrs []ma.Multiaddr) []ma.Multiaddr { + result := make([]ma.Multiaddr, 0, len(addrs)) + for _, addr := range addrs { + if !isRelayAddress(addr) { + result = append(result, addr) + } + } + return result +} + +func isRelayAddress(a ma.Multiaddr) bool { + _, err := a.ValueForProtocol(ma.P_CIRCUIT) + return err == nil +} + +func addrsToBytes(as []ma.Multiaddr) [][]byte { + bzs := make([][]byte, 0, len(as)) + for _, a := range as { + bzs = append(bzs, a.Bytes()) + } + return bzs +} + +func addrsFromBytes(bzs [][]byte) []ma.Multiaddr { + addrs := make([]ma.Multiaddr, 0, len(bzs)) + for _, bz := range bzs { + a, err := ma.NewMultiaddrBytes(bz) + if err == nil { + addrs = append(addrs, a) + } + } + return addrs +} + +func holePunchConnect(ctx context.Context, host host.Host, pi peer.AddrInfo, isClient bool) error { + holePunchCtx := network.WithSimultaneousConnect(ctx, isClient, "hole-punching") + forceDirectConnCtx := network.WithForceDirectDial(holePunchCtx, "hole-punching") + dialCtx, cancel := context.WithTimeout(forceDirectConnCtx, dialTimeout) + defer cancel() + + if err := host.Connect(dialCtx, pi); err != nil { + log.Debugw("hole punch attempt with peer failed", "peer ID", pi.ID, "error", err) + return err + } + log.Debugw("hole punch successful", "peer", pi.ID) + return nil +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id.go b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id.go index 70ff28b638..072cc81aa2 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id.go @@ -4,7 +4,6 @@ import ( "context" "fmt" "io" - "runtime/debug" "sync" "time" @@ -55,19 +54,6 @@ var ( defaultUserAgent = "github.com/libp2p/go-libp2p" ) -func init() { - bi, ok := debug.ReadBuildInfo() - if !ok { - return - } - version := bi.Main.Version - if version == "(devel)" { - defaultUserAgent = bi.Main.Path - } else { - defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, bi.Main.Version) - } -} - type addPeerHandlerReq struct { rp peer.ID resp chan *peerHandler @@ -828,7 +814,5 @@ func (nn *netNotifiee) Disconnected(n network.Network, v network.Conn) { } } -func (nn *netNotifiee) OpenedStream(n network.Network, v network.Stream) {} -func (nn *netNotifiee) ClosedStream(n network.Network, v network.Stream) {} -func (nn *netNotifiee) Listen(n network.Network, a ma.Multiaddr) {} -func (nn *netNotifiee) ListenClose(n network.Network, a ma.Multiaddr) {} +func (nn *netNotifiee) Listen(n network.Network, a ma.Multiaddr) {} +func (nn *netNotifiee) ListenClose(n network.Network, a ma.Multiaddr) {} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id_go117.go b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id_go117.go new file mode 100644 index 0000000000..42d6ff5b64 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id_go117.go @@ -0,0 +1,23 @@ +//go:build !go1.18 +// +build !go1.18 + +package identify + +import ( + "fmt" + "runtime/debug" +) + +func init() { + bi, ok := debug.ReadBuildInfo() + // ok will only be true if this is built as a dependency of another module + if !ok { + return + } + version := bi.Main.Version + if version == "(devel)" { + defaultUserAgent = bi.Main.Path + } else { + defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, bi.Main.Version) + } +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id_go118.go b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id_go118.go new file mode 100644 index 0000000000..e4f4779402 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/id_go118.go @@ -0,0 +1,46 @@ +//go:build go1.18 +// +build go1.18 + +package identify + +import ( + "fmt" + "runtime/debug" +) + +func init() { + bi, ok := debug.ReadBuildInfo() + if !ok { + return + } + version := bi.Main.Version + // version will only be non-empty if built as a dependency of another module + if version == "" { + return + } + + if version != "(devel)" { + defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, bi.Main.Version) + return + } + + var revision string + var dirty bool + for _, bs := range bi.Settings { + switch bs.Key { + case "vcs.revision": + revision = bs.Value + if len(revision) > 9 { + revision = revision[:9] + } + case "vcs.modified": + if bs.Value == "true" { + dirty = true + } + } + } + defaultUserAgent = fmt.Sprintf("%s@%s", bi.Main.Path, revision) + if dirty { + defaultUserAgent += "-dirty" + } +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/obsaddr.go b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/obsaddr.go index c01ff61b80..8562f65251 100644 --- a/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/obsaddr.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/protocol/identify/obsaddr.go @@ -588,5 +588,3 @@ func (on *obsAddrNotifiee) Connected(n network.Network, v network.Conn) {} func (on *obsAddrNotifiee) Disconnected(n network.Network, v network.Conn) { (*ObservedAddrManager)(on).removeConn(v) } -func (on *obsAddrNotifiee) OpenedStream(n network.Network, s network.Stream) {} -func (on *obsAddrNotifiee) ClosedStream(n network.Network, s network.Stream) {} diff --git a/vendor/github.com/libp2p/go-libp2p-noise/LICENSE.md b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/LICENSE.md similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-noise/LICENSE.md rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/LICENSE.md diff --git a/vendor/github.com/libp2p/go-libp2p-noise/crypto.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/crypto.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-noise/crypto.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/crypto.go diff --git a/vendor/github.com/libp2p/go-libp2p-noise/handshake.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/handshake.go similarity index 97% rename from vendor/github.com/libp2p/go-libp2p-noise/handshake.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/handshake.go index 052915fe62..59d1eebedb 100644 --- a/vendor/github.com/libp2p/go-libp2p-noise/handshake.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/handshake.go @@ -9,16 +9,16 @@ import ( "runtime/debug" "time" - "golang.org/x/crypto/poly1305" + "golang.org/x/crypto/chacha20poly1305" - "github.com/flynn/noise" - "github.com/gogo/protobuf/proto" + "github.com/libp2p/go-libp2p/p2p/security/noise/pb" - pool "github.com/libp2p/go-buffer-pool" "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-noise/pb" + "github.com/flynn/noise" + "github.com/gogo/protobuf/proto" + pool "github.com/libp2p/go-buffer-pool" ) // payloadSigPrefix is prepended to our Noise static key before signing with @@ -73,7 +73,7 @@ func (s *secureSession) runHandshake(ctx context.Context) (err error) { // will be the size of the maximum handshake message for the Noise XX pattern. // Also, since we prefix every noise handshake message with its length, we need to account for // it when we fetch the buffer from the pool - maxMsgSize := 2*noise.DH25519.DHLen() + len(payload) + 2*poly1305.TagSize + maxMsgSize := 2*noise.DH25519.DHLen() + len(payload) + 2*chacha20poly1305.Overhead hbuf := pool.Get(maxMsgSize + LengthPrefixLength) defer pool.Put(hbuf) diff --git a/vendor/github.com/libp2p/go-libp2p-noise/pb/Makefile b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/pb/Makefile similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-noise/pb/Makefile rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/pb/Makefile diff --git a/vendor/github.com/libp2p/go-libp2p-noise/pb/payload.pb.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/pb/payload.pb.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-noise/pb/payload.pb.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/pb/payload.pb.go diff --git a/vendor/github.com/libp2p/go-libp2p-noise/pb/payload.proto b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/pb/payload.proto similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-noise/pb/payload.proto rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/pb/payload.proto diff --git a/vendor/github.com/libp2p/go-libp2p-noise/rw.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/rw.go similarity index 96% rename from vendor/github.com/libp2p/go-libp2p-noise/rw.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/rw.go index b73845f5c3..d52768f485 100644 --- a/vendor/github.com/libp2p/go-libp2p-noise/rw.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/rw.go @@ -5,8 +5,7 @@ import ( "io" pool "github.com/libp2p/go-buffer-pool" - - "golang.org/x/crypto/poly1305" + "golang.org/x/crypto/chacha20poly1305" ) // MaxTransportMsgLength is the Noise-imposed maximum transport message length, @@ -15,7 +14,7 @@ const MaxTransportMsgLength = 0xffff // MaxPlaintextLength is the maximum payload size. It is MaxTransportMsgLength // minus the MAC size. Payloads over this size will be automatically chunked. -const MaxPlaintextLength = MaxTransportMsgLength - poly1305.TagSize +const MaxPlaintextLength = MaxTransportMsgLength - chacha20poly1305.Overhead // LengthPrefixLength is the length of the length prefix itself, which precedes // all transport messages in order to delimit them. In bytes. @@ -100,7 +99,7 @@ func (s *secureSession) Write(data []byte) (int, error) { ) if total < MaxPlaintextLength { - cbuf = pool.Get(total + poly1305.TagSize + LengthPrefixLength) + cbuf = pool.Get(total + chacha20poly1305.Overhead + LengthPrefixLength) } else { cbuf = pool.Get(MaxTransportMsgLength + LengthPrefixLength) } diff --git a/vendor/github.com/libp2p/go-libp2p-noise/session.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/session.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-noise/session.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/session.go diff --git a/vendor/github.com/libp2p/go-libp2p-noise/transport.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/noise/transport.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-noise/transport.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/noise/transport.go diff --git a/vendor/github.com/libp2p/go-libp2p-tls/LICENSE.md b/vendor/github.com/libp2p/go-libp2p/p2p/security/tls/LICENSE.md similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-tls/LICENSE.md rename to vendor/github.com/libp2p/go-libp2p/p2p/security/tls/LICENSE.md diff --git a/vendor/github.com/libp2p/go-libp2p-tls/conn.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/tls/conn.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-tls/conn.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/tls/conn.go diff --git a/vendor/github.com/libp2p/go-libp2p-tls/crypto.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/tls/crypto.go similarity index 95% rename from vendor/github.com/libp2p/go-libp2p-tls/crypto.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/tls/crypto.go index f3502aa740..24a06939ee 100644 --- a/vendor/github.com/libp2p/go-libp2p-tls/crypto.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/security/tls/crypto.go @@ -11,6 +11,8 @@ import ( "errors" "fmt" "math/big" + "os" + "runtime/debug" "time" "golang.org/x/sys/cpu" @@ -72,7 +74,15 @@ func (i *Identity) ConfigForPeer(remote peer.ID) (*tls.Config, <-chan ic.PubKey) conf := i.config.Clone() // We're using InsecureSkipVerify, so the verifiedChains parameter will always be empty. // We need to parse the certificates ourselves from the raw certs. - conf.VerifyPeerCertificate = func(rawCerts [][]byte, _ [][]*x509.Certificate) error { + conf.VerifyPeerCertificate = func(rawCerts [][]byte, _ [][]*x509.Certificate) (err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "panic when processing peer certificate in TLS handshake: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic when processing peer certificate in TLS handshake: %s", rerr) + + } + }() + defer close(keyCh) chain := make([]*x509.Certificate, len(rawCerts)) diff --git a/vendor/github.com/libp2p/go-libp2p-tls/extension.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/tls/extension.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-tls/extension.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/tls/extension.go diff --git a/vendor/github.com/libp2p/go-libp2p-tls/transport.go b/vendor/github.com/libp2p/go-libp2p/p2p/security/tls/transport.go similarity index 69% rename from vendor/github.com/libp2p/go-libp2p-tls/transport.go rename to vendor/github.com/libp2p/go-libp2p/p2p/security/tls/transport.go index 6be3c79a79..f8911fc960 100644 --- a/vendor/github.com/libp2p/go-libp2p-tls/transport.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/security/tls/transport.go @@ -4,8 +4,10 @@ import ( "context" "crypto/tls" "errors" + "fmt" "net" - "sync" + "os" + "runtime/debug" ci "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" @@ -71,44 +73,16 @@ func (t *Transport) SecureOutbound(ctx context.Context, insecure net.Conn, p pee return cs, err } -func (t *Transport) handshake( - ctx context.Context, - tlsConn *tls.Conn, - keyCh <-chan ci.PubKey, -) (sec.SecureConn, error) { - // There's no way to pass a context to tls.Conn.Handshake(). - // See https://github.com/golang/go/issues/18482. - // Close the connection instead. - select { - case <-ctx.Done(): - tlsConn.Close() - default: - } +func (t *Transport) handshake(ctx context.Context, tlsConn *tls.Conn, keyCh <-chan ci.PubKey) (_sconn sec.SecureConn, err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "panic in TLS handshake: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic in TLS handshake: %s", rerr) - done := make(chan struct{}) - var wg sync.WaitGroup - - // Ensure that we do not return before - // either being done or having a context - // cancellation. - defer wg.Wait() - defer close(done) - - wg.Add(1) - go func() { - defer wg.Done() - select { - case <-done: - case <-ctx.Done(): - tlsConn.Close() } }() - if err := tlsConn.Handshake(); err != nil { - // if the context was canceled, return the context error - if ctxErr := ctx.Err(); ctxErr != nil { - return nil, ctxErr - } + if err := tlsConn.HandshakeContext(ctx); err != nil { return nil, err } @@ -119,18 +93,10 @@ func (t *Transport) handshake( default: } if remotePubKey == nil { - return nil, errors.New("go-libp2p-tls BUG: expected remote pub key to be set") + return nil, errors.New("go-libp2p tls BUG: expected remote pub key to be set") } - conn, err := t.setupConn(tlsConn, remotePubKey) - if err != nil { - // if the context was canceled, return the context error - if ctxErr := ctx.Err(); ctxErr != nil { - return nil, ctxErr - } - return nil, err - } - return conn, nil + return t.setupConn(tlsConn, remotePubKey) } func (t *Transport) setupConn(tlsConn *tls.Conn, remotePubKey ci.PubKey) (sec.SecureConn, error) { diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/conn.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/conn.go similarity index 89% rename from vendor/github.com/libp2p/go-libp2p-quic-transport/conn.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/conn.go index 990180cf34..778460c6c9 100644 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/conn.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/conn.go @@ -13,7 +13,7 @@ import ( ) type conn struct { - sess quic.Session + quicConn quic.Connection pconn *reuseConn transport *transport scope network.ConnManagementScope @@ -33,8 +33,8 @@ var _ tpt.CapableConn = &conn{} // It must be called even if the peer closed the connection in order for // garbage collection to properly work in this package. func (c *conn) Close() error { - c.transport.removeConn(c.sess) - err := c.sess.CloseWithError(0, "") + c.transport.removeConn(c.quicConn) + err := c.quicConn.CloseWithError(0, "") c.pconn.DecreaseCount() c.scope.Done() return err @@ -42,7 +42,7 @@ func (c *conn) Close() error { // IsClosed returns whether a connection is fully closed. func (c *conn) IsClosed() bool { - return c.sess.Context().Err() != nil + return c.quicConn.Context().Err() != nil } func (c *conn) allowWindowIncrease(size uint64) bool { @@ -51,13 +51,13 @@ func (c *conn) allowWindowIncrease(size uint64) bool { // OpenStream creates a new stream. func (c *conn) OpenStream(ctx context.Context) (network.MuxedStream, error) { - qstr, err := c.sess.OpenStreamSync(ctx) + qstr, err := c.quicConn.OpenStreamSync(ctx) return &stream{Stream: qstr}, err } // AcceptStream accepts a stream opened by the other side. func (c *conn) AcceptStream() (network.MuxedStream, error) { - qstr, err := c.sess.AcceptStream(context.Background()) + qstr, err := c.quicConn.AcceptStream(context.Background()) return &stream{Stream: qstr}, err } diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/listener.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/listener.go similarity index 84% rename from vendor/github.com/libp2p/go-libp2p-quic-transport/listener.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/listener.go index 093e9ce48e..293fa0314a 100644 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/listener.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/listener.go @@ -5,13 +5,13 @@ import ( "crypto/tls" "net" + p2ptls "github.com/libp2p/go-libp2p/p2p/security/tls" + ic "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" tpt "github.com/libp2p/go-libp2p-core/transport" - p2ptls "github.com/libp2p/go-libp2p-tls" - "github.com/lucas-clemente/quic-go" ma "github.com/multiformats/go-multiaddr" ) @@ -63,24 +63,24 @@ func newListener(rconn *reuseConn, t *transport, localPeer peer.ID, key ic.PrivK // Accept accepts new connections. func (l *listener) Accept() (tpt.CapableConn, error) { for { - sess, err := l.quicListener.Accept(context.Background()) + qconn, err := l.quicListener.Accept(context.Background()) if err != nil { return nil, err } - c, err := l.setupConn(sess) + c, err := l.setupConn(qconn) if err != nil { - sess.CloseWithError(0, err.Error()) + qconn.CloseWithError(0, err.Error()) continue } if l.transport.gater != nil && !(l.transport.gater.InterceptAccept(c) && l.transport.gater.InterceptSecured(network.DirInbound, c.remotePeerID, c)) { c.scope.Done() - sess.CloseWithError(errorCodeConnectionGating, "connection gated") + qconn.CloseWithError(errorCodeConnectionGating, "connection gated") continue } - l.transport.addConn(sess, c) + l.transport.addConn(qconn, c) // return through active hole punching if any - key := holePunchKey{addr: sess.RemoteAddr().String(), peer: c.remotePeerID} + key := holePunchKey{addr: qconn.RemoteAddr().String(), peer: c.remotePeerID} var wasHolePunch bool l.transport.holePunchingMx.Lock() holePunch, ok := l.transport.holePunching[key] @@ -97,17 +97,17 @@ func (l *listener) Accept() (tpt.CapableConn, error) { } } -func (l *listener) setupConn(sess quic.Session) (*conn, error) { +func (l *listener) setupConn(qconn quic.Connection) (*conn, error) { connScope, err := l.rcmgr.OpenConnection(network.DirInbound, false) if err != nil { - log.Debugw("resource manager blocked incoming connection", "addr", sess.RemoteAddr(), "error", err) + log.Debugw("resource manager blocked incoming connection", "addr", qconn.RemoteAddr(), "error", err) return nil, err } // The tls.Config used to establish this connection already verified the certificate chain. // Since we don't have any way of knowing which tls.Config was used though, // we have to re-determine the peer's identity here. // Therefore, this is expected to never fail. - remotePubKey, err := p2ptls.PubKeyFromCertChain(sess.ConnectionState().TLS.PeerCertificates) + remotePubKey, err := p2ptls.PubKeyFromCertChain(qconn.ConnectionState().TLS.PeerCertificates) if err != nil { connScope.Done() return nil, err @@ -118,11 +118,11 @@ func (l *listener) setupConn(sess quic.Session) (*conn, error) { return nil, err } if err := connScope.SetPeer(remotePeerID); err != nil { - log.Debugw("resource manager blocked incoming connection for peer", "peer", remotePeerID, "addr", sess.RemoteAddr(), "error", err) + log.Debugw("resource manager blocked incoming connection for peer", "peer", remotePeerID, "addr", qconn.RemoteAddr(), "error", err) connScope.Done() return nil, err } - remoteMultiaddr, err := toQuicMultiaddr(sess.RemoteAddr()) + remoteMultiaddr, err := toQuicMultiaddr(qconn.RemoteAddr()) if err != nil { connScope.Done() return nil, err @@ -130,7 +130,7 @@ func (l *listener) setupConn(sess quic.Session) (*conn, error) { l.conn.IncreaseCount() return &conn{ - sess: sess, + quicConn: qconn, pconn: l.conn, transport: l.transport, scope: connScope, diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/quic_multiaddr.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/quic_multiaddr.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-quic-transport/quic_multiaddr.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/quic_multiaddr.go diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/reuse.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/reuse.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-quic-transport/reuse.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/reuse.go diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/stream.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/stream.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-quic-transport/stream.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/stream.go diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/tracer.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/tracer.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-quic-transport/tracer.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/tracer.go diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/tracer_metrics.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/tracer_metrics.go similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-quic-transport/tracer_metrics.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/tracer_metrics.go diff --git a/vendor/github.com/libp2p/go-libp2p-quic-transport/transport.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/transport.go similarity index 91% rename from vendor/github.com/libp2p/go-libp2p-quic-transport/transport.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/transport.go index bc1b39d111..a36b3e58cb 100644 --- a/vendor/github.com/libp2p/go-libp2p-quic-transport/transport.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/transport/quic/transport.go @@ -12,6 +12,8 @@ import ( "golang.org/x/crypto/hkdf" + p2ptls "github.com/libp2p/go-libp2p/p2p/security/tls" + "github.com/libp2p/go-libp2p-core/connmgr" ic "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/network" @@ -19,8 +21,6 @@ import ( "github.com/libp2p/go-libp2p-core/pnet" tpt "github.com/libp2p/go-libp2p-core/transport" - p2ptls "github.com/libp2p/go-libp2p-tls" - ma "github.com/multiformats/go-multiaddr" mafmt "github.com/multiformats/go-multiaddr-fmt" manet "github.com/multiformats/go-multiaddr/net" @@ -118,7 +118,7 @@ type transport struct { holePunching map[holePunchKey]*activeHolePunch connMx sync.Mutex - conns map[quic.Session]*conn + conns map[quic.Connection]*conn } var _ tpt.Transport = &transport{} @@ -173,7 +173,7 @@ func NewTransport(key ic.PrivKey, psk pnet.PSK, gater connmgr.ConnectionGater, r connManager: connManager, gater: gater, rcmgr: rcmgr, - conns: make(map[quic.Session]*conn), + conns: make(map[quic.Connection]*conn), holePunching: make(map[holePunchKey]*activeHolePunch), } config.AllowConnectionWindowIncrease = tr.allowWindowIncrease @@ -215,7 +215,7 @@ func (t *transport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (tp if err != nil { return nil, err } - sess, err := quicDialContext(ctx, pconn, addr, host, tlsConf, t.clientConfig) + qconn, err := quicDialContext(ctx, pconn, addr, host, tlsConf, t.clientConfig) if err != nil { scope.Done() pconn.DecreaseCount() @@ -230,16 +230,16 @@ func (t *transport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (tp if remotePubKey == nil { pconn.DecreaseCount() scope.Done() - return nil, errors.New("go-libp2p-quic-transport BUG: expected remote pub key to be set") + return nil, errors.New("p2p/transport/quic BUG: expected remote pub key to be set") } localMultiaddr, err := toQuicMultiaddr(pconn.LocalAddr()) if err != nil { - sess.CloseWithError(0, "") + qconn.CloseWithError(0, "") return nil, err } c := &conn{ - sess: sess, + quicConn: qconn, pconn: pconn, transport: t, scope: scope, @@ -251,22 +251,22 @@ func (t *transport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (tp remoteMultiaddr: remoteMultiaddr, } if t.gater != nil && !t.gater.InterceptSecured(network.DirOutbound, p, c) { - sess.CloseWithError(errorCodeConnectionGating, "connection gated") + qconn.CloseWithError(errorCodeConnectionGating, "connection gated") return nil, fmt.Errorf("secured connection gated") } - t.addConn(sess, c) + t.addConn(qconn, c) return c, nil } -func (t *transport) addConn(sess quic.Session, c *conn) { +func (t *transport) addConn(conn quic.Connection, c *conn) { t.connMx.Lock() - t.conns[sess] = c + t.conns[conn] = c t.connMx.Unlock() } -func (t *transport) removeConn(sess quic.Session) { +func (t *transport) removeConn(conn quic.Connection) { t.connMx.Lock() - delete(t.conns, sess) + delete(t.conns, conn) t.connMx.Unlock() } @@ -376,12 +376,14 @@ func (t *transport) Listen(addr ma.Multiaddr) (tpt.Listener, error) { return ln, nil } -func (t *transport) allowWindowIncrease(sess quic.Session, size uint64) bool { - // If the QUIC session tries to increase the window before we've inserted it +func (t *transport) allowWindowIncrease(conn quic.Connection, size uint64) bool { + // If the QUIC connection tries to increase the window before we've inserted it // into our connections map (which we do right after dialing / accepting it), // we have no way to account for that memory. This should be very rare. - // Block this attempt. The session can request more memory later. - c, ok := t.conns[sess] + // Block this attempt. The connection can request more memory later. + t.connMx.Lock() + c, ok := t.conns[conn] + t.connMx.Unlock() if !ok { return false } diff --git a/vendor/github.com/libp2p/go-tcp-transport/metrics.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics.go similarity index 100% rename from vendor/github.com/libp2p/go-tcp-transport/metrics.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics.go diff --git a/vendor/github.com/libp2p/go-tcp-transport/metrics_darwin.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics_darwin.go similarity index 100% rename from vendor/github.com/libp2p/go-tcp-transport/metrics_darwin.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics_darwin.go diff --git a/vendor/github.com/libp2p/go-tcp-transport/metrics_general.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics_general.go similarity index 100% rename from vendor/github.com/libp2p/go-tcp-transport/metrics_general.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics_general.go diff --git a/vendor/github.com/libp2p/go-tcp-transport/metrics_linux.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics_linux.go similarity index 100% rename from vendor/github.com/libp2p/go-tcp-transport/metrics_linux.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics_linux.go diff --git a/vendor/github.com/libp2p/go-tcp-transport/metrics_windows.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics_windows.go similarity index 100% rename from vendor/github.com/libp2p/go-tcp-transport/metrics_windows.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/metrics_windows.go diff --git a/vendor/github.com/libp2p/go-tcp-transport/reuseport.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/reuseport.go similarity index 100% rename from vendor/github.com/libp2p/go-tcp-transport/reuseport.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/reuseport.go diff --git a/vendor/github.com/libp2p/go-tcp-transport/tcp.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/tcp.go similarity index 96% rename from vendor/github.com/libp2p/go-tcp-transport/tcp.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/tcp.go index e9de3b345e..9db7cf5dd6 100644 --- a/vendor/github.com/libp2p/go-tcp-transport/tcp.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/transport/tcp/tcp.go @@ -6,14 +6,15 @@ import ( "net" "os" "runtime" + "syscall" "time" + "github.com/libp2p/go-libp2p/p2p/net/reuseport" + "github.com/libp2p/go-libp2p-core/network" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p-core/transport" - rtpt "github.com/libp2p/go-reuseport-transport" - logging "github.com/ipfs/go-log/v2" ma "github.com/multiformats/go-multiaddr" mafmt "github.com/multiformats/go-multiaddr-fmt" @@ -45,7 +46,7 @@ func tryKeepAlive(conn net.Conn, keepAlive bool) { // // But there's nothing we can do about invalid arguments, so we'll drop this to a // debug. - if errors.Is(err, os.ErrInvalid) { + if errors.Is(err, os.ErrInvalid) || errors.Is(err, syscall.EINVAL) { log.Debugw("failed to enable TCP keepalive", "error", err) } else { log.Errorw("failed to enable TCP keepalive", "error", err) @@ -85,7 +86,7 @@ func (ll *tcpListener) Accept() (manet.Conn, error) { tryKeepAlive(c, true) // We're not calling OpenConnection in the resource manager here, // since the manet.Conn doesn't allow us to save the scope. - // It's the caller's (usually the go-libp2p-transport-upgrader) responsibility + // It's the caller's (usually the p2p/net/upgrader) responsibility // to call the resource manager. return c, nil } @@ -120,7 +121,7 @@ type TcpTransport struct { rcmgr network.ResourceManager - reuse rtpt.Transport + reuse reuseport.Transport } var _ transport.Transport = &TcpTransport{} diff --git a/vendor/github.com/libp2p/go-ws-transport/LICENSE-APACHE b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/LICENSE-APACHE similarity index 100% rename from vendor/github.com/libp2p/go-ws-transport/LICENSE-APACHE rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/LICENSE-APACHE diff --git a/vendor/github.com/libp2p/go-ws-transport/LICENSE-MIT b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/LICENSE-MIT similarity index 100% rename from vendor/github.com/libp2p/go-ws-transport/LICENSE-MIT rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/LICENSE-MIT diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/addrs.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/addrs.go new file mode 100644 index 0000000000..608eb2d0da --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/addrs.go @@ -0,0 +1,137 @@ +package websocket + +import ( + "fmt" + "net" + "net/url" + "strconv" + + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" +) + +// Addr is an implementation of net.Addr for WebSocket. +type Addr struct { + *url.URL +} + +var _ net.Addr = (*Addr)(nil) + +// Network returns the network type for a WebSocket, "websocket". +func (addr *Addr) Network() string { + return "websocket" +} + +// NewAddr creates an Addr with `ws` scheme (insecure). +// +// Deprecated. Use NewAddrWithScheme. +func NewAddr(host string) *Addr { + // Older versions of the transport only supported insecure connections (i.e. + // WS instead of WSS). Assume that is the case here. + return NewAddrWithScheme(host, false) +} + +// NewAddrWithScheme creates a new Addr using the given host string. isSecure +// should be true for WSS connections and false for WS. +func NewAddrWithScheme(host string, isSecure bool) *Addr { + scheme := "ws" + if isSecure { + scheme = "wss" + } + return &Addr{ + URL: &url.URL{ + Scheme: scheme, + Host: host, + }, + } +} + +func ConvertWebsocketMultiaddrToNetAddr(maddr ma.Multiaddr) (net.Addr, error) { + url, err := parseMultiaddr(maddr) + if err != nil { + return nil, err + } + return &Addr{URL: url}, nil +} + +func ParseWebsocketNetAddr(a net.Addr) (ma.Multiaddr, error) { + wsa, ok := a.(*Addr) + if !ok { + return nil, fmt.Errorf("not a websocket address") + } + + var ( + tcpma ma.Multiaddr + err error + port int + host = wsa.Hostname() + ) + + // Get the port + if portStr := wsa.Port(); portStr != "" { + port, err = strconv.Atoi(portStr) + if err != nil { + return nil, fmt.Errorf("failed to parse port '%q': %s", portStr, err) + } + } else { + return nil, fmt.Errorf("invalid port in url: '%q'", wsa.URL) + } + + // NOTE: Ignoring IPv6 zones... + // Detect if host is IP address or DNS + if ip := net.ParseIP(host); ip != nil { + // Assume IP address + tcpma, err = manet.FromNetAddr(&net.TCPAddr{ + IP: ip, + Port: port, + }) + if err != nil { + return nil, err + } + } else { + // Assume DNS name + tcpma, err = ma.NewMultiaddr(fmt.Sprintf("/dns/%s/tcp/%d", host, port)) + if err != nil { + return nil, err + } + } + + wsma, err := ma.NewMultiaddr("/" + wsa.Scheme) + if err != nil { + return nil, err + } + + return tcpma.Encapsulate(wsma), nil +} + +func parseMultiaddr(maddr ma.Multiaddr) (*url.URL, error) { + // Only look at the _last_ component. + maddr, wscomponent := ma.SplitLast(maddr) + if maddr == nil || wscomponent == nil { + return nil, fmt.Errorf("websocket addrs need at least two components") + } + + var scheme string + switch wscomponent.Protocol().Code { + case ma.P_WS: + scheme = "ws" + case ma.P_WSS: + scheme = "wss" + default: + return nil, fmt.Errorf("not a websocket multiaddr") + } + + network, host, err := manet.DialArgs(maddr) + if err != nil { + return nil, err + } + switch network { + case "tcp", "tcp4", "tcp6": + default: + return nil, fmt.Errorf("unsupported websocket network %s", network) + } + return &url.URL{ + Scheme: scheme, + Host: host, + }, nil +} diff --git a/vendor/github.com/libp2p/go-ws-transport/conn_native.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/conn.go similarity index 85% rename from vendor/github.com/libp2p/go-ws-transport/conn_native.go rename to vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/conn.go index 37ff31edb4..6f2e0a7667 100644 --- a/vendor/github.com/libp2p/go-ws-transport/conn_native.go +++ b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/conn.go @@ -1,6 +1,3 @@ -//go:build !js -// +build !js - package websocket import ( @@ -12,9 +9,14 @@ import ( ws "github.com/gorilla/websocket" ) +// GracefulCloseTimeout is the time to wait trying to gracefully close a +// connection before simply cutting it. +var GracefulCloseTimeout = 100 * time.Millisecond + // Conn implements net.Conn interface for gorilla/websocket. type Conn struct { *ws.Conn + secure bool DefaultMessageType int reader io.Reader closeOnce sync.Once @@ -22,6 +24,17 @@ type Conn struct { readLock, writeLock sync.Mutex } +var _ net.Conn = (*Conn)(nil) + +// NewConn creates a Conn given a regular gorilla/websocket Conn. +func NewConn(raw *ws.Conn, secure bool) *Conn { + return &Conn{ + Conn: raw, + secure: secure, + DefaultMessageType: ws.BinaryMessage, + } +} + func (c *Conn) Read(b []byte) (int, error) { c.readLock.Lock() defer c.readLock.Unlock() @@ -106,11 +119,11 @@ func (c *Conn) Close() error { } func (c *Conn) LocalAddr() net.Addr { - return NewAddr(c.Conn.LocalAddr().String()) + return NewAddrWithScheme(c.Conn.LocalAddr().String(), c.secure) } func (c *Conn) RemoteAddr() net.Addr { - return NewAddr(c.Conn.RemoteAddr().String()) + return NewAddrWithScheme(c.Conn.RemoteAddr().String(), c.secure) } func (c *Conn) SetDeadline(t time.Time) error { @@ -136,11 +149,3 @@ func (c *Conn) SetWriteDeadline(t time.Time) error { return c.Conn.SetWriteDeadline(t) } - -// NewConn creates a Conn given a regular gorilla/websocket Conn. -func NewConn(raw *ws.Conn) *Conn { - return &Conn{ - Conn: raw, - DefaultMessageType: ws.BinaryMessage, - } -} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/listener.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/listener.go new file mode 100644 index 0000000000..b94bed798c --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/listener.go @@ -0,0 +1,127 @@ +package websocket + +import ( + "crypto/tls" + "fmt" + "net" + "net/http" + + ma "github.com/multiformats/go-multiaddr" + manet "github.com/multiformats/go-multiaddr/net" +) + +var ( + wsma = ma.StringCast("/ws") + wssma = ma.StringCast("/wss") +) + +type listener struct { + nl net.Listener + server http.Server + + laddr ma.Multiaddr + + closed chan struct{} + incoming chan *Conn +} + +// newListener creates a new listener from a raw net.Listener. +// tlsConf may be nil (for unencrypted websockets). +func newListener(a ma.Multiaddr, tlsConf *tls.Config) (*listener, error) { + // Only look at the _last_ component. + maddr, wscomponent := ma.SplitLast(a) + isWSS := wscomponent.Equal(wssma) + if isWSS && tlsConf == nil { + return nil, fmt.Errorf("cannot listen on wss address %s without a tls.Config", a) + } + lnet, lnaddr, err := manet.DialArgs(maddr) + if err != nil { + return nil, err + } + nl, err := net.Listen(lnet, lnaddr) + if err != nil { + return nil, err + } + + laddr, err := manet.FromNetAddr(nl.Addr()) + if err != nil { + return nil, err + } + first, _ := ma.SplitFirst(a) + // Don't resolve dns addresses. + // We want to be able to announce domain names, so the peer can validate the TLS certificate. + if c := first.Protocol().Code; c == ma.P_DNS || c == ma.P_DNS4 || c == ma.P_DNS6 || c == ma.P_DNSADDR { + _, last := ma.SplitFirst(laddr) + laddr = first.Encapsulate(last) + } + + ln := &listener{ + nl: nl, + laddr: laddr.Encapsulate(wscomponent), + incoming: make(chan *Conn), + closed: make(chan struct{}), + } + ln.server = http.Server{Handler: ln} + if isWSS { + ln.server.TLSConfig = tlsConf + } + return ln, nil +} + +func (l *listener) serve() { + defer close(l.closed) + if l.server.TLSConfig == nil { + l.server.Serve(l.nl) + } else { + l.server.ServeTLS(l.nl, "", "") + } +} + +func (l *listener) ServeHTTP(w http.ResponseWriter, r *http.Request) { + c, err := upgrader.Upgrade(w, r, nil) + if err != nil { + // The upgrader writes a response for us. + return + } + + select { + case l.incoming <- NewConn(c, false): + case <-l.closed: + c.Close() + } + // The connection has been hijacked, it's safe to return. +} + +func (l *listener) Accept() (manet.Conn, error) { + select { + case c, ok := <-l.incoming: + if !ok { + return nil, fmt.Errorf("listener is closed") + } + + mnc, err := manet.WrapNetConn(c) + if err != nil { + c.Close() + return nil, err + } + + return mnc, nil + case <-l.closed: + return nil, fmt.Errorf("listener is closed") + } +} + +func (l *listener) Addr() net.Addr { + return l.nl.Addr() +} + +func (l *listener) Close() error { + l.server.Close() + err := l.nl.Close() + <-l.closed + return err +} + +func (l *listener) Multiaddr() ma.Multiaddr { + return l.laddr +} diff --git a/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/websocket.go b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/websocket.go new file mode 100644 index 0000000000..a65fcdccf1 --- /dev/null +++ b/vendor/github.com/libp2p/go-libp2p/p2p/transport/websocket/websocket.go @@ -0,0 +1,155 @@ +// Package websocket implements a websocket based transport for go-libp2p. +package websocket + +import ( + "context" + "crypto/tls" + "net/http" + "time" + + "github.com/libp2p/go-libp2p-core/network" + "github.com/libp2p/go-libp2p-core/peer" + "github.com/libp2p/go-libp2p-core/transport" + + ma "github.com/multiformats/go-multiaddr" + mafmt "github.com/multiformats/go-multiaddr-fmt" + manet "github.com/multiformats/go-multiaddr/net" + + ws "github.com/gorilla/websocket" +) + +// WsFmt is multiaddr formatter for WsProtocol +var WsFmt = mafmt.And(mafmt.TCP, mafmt.Base(ma.P_WS)) + +// This is _not_ WsFmt because we want the transport to stick to dialing fully +// resolved addresses. +var dialMatcher = mafmt.And(mafmt.IP, mafmt.Base(ma.P_TCP), mafmt.Or(mafmt.Base(ma.P_WS), mafmt.Base(ma.P_WSS))) + +func init() { + manet.RegisterFromNetAddr(ParseWebsocketNetAddr, "websocket") + manet.RegisterToNetAddr(ConvertWebsocketMultiaddrToNetAddr, "ws") + manet.RegisterToNetAddr(ConvertWebsocketMultiaddrToNetAddr, "wss") +} + +// Default gorilla upgrader +var upgrader = ws.Upgrader{ + // Allow requests from *all* origins. + CheckOrigin: func(r *http.Request) bool { + return true + }, +} + +type Option func(*WebsocketTransport) error + +// WithTLSClientConfig sets a TLS client configuration on the WebSocket Dialer. Only +// relevant for non-browser usages. +// +// Some useful use cases include setting InsecureSkipVerify to `true`, or +// setting user-defined trusted CA certificates. +func WithTLSClientConfig(c *tls.Config) Option { + return func(t *WebsocketTransport) error { + t.tlsClientConf = c + return nil + } +} + +// WithTLSConfig sets a TLS configuration for the WebSocket listener. +func WithTLSConfig(conf *tls.Config) Option { + return func(t *WebsocketTransport) error { + t.tlsConf = conf + return nil + } +} + +// WebsocketTransport is the actual go-libp2p transport +type WebsocketTransport struct { + upgrader transport.Upgrader + rcmgr network.ResourceManager + + tlsClientConf *tls.Config + tlsConf *tls.Config +} + +var _ transport.Transport = (*WebsocketTransport)(nil) + +func New(u transport.Upgrader, rcmgr network.ResourceManager, opts ...Option) (*WebsocketTransport, error) { + if rcmgr == nil { + rcmgr = network.NullResourceManager + } + t := &WebsocketTransport{ + upgrader: u, + rcmgr: rcmgr, + } + for _, opt := range opts { + if err := opt(t); err != nil { + return nil, err + } + } + return t, nil +} + +func (t *WebsocketTransport) CanDial(a ma.Multiaddr) bool { + return dialMatcher.Matches(a) +} + +func (t *WebsocketTransport) Protocols() []int { + return []int{ma.P_WS, ma.P_WSS} +} + +func (t *WebsocketTransport) Proxy() bool { + return false +} + +func (t *WebsocketTransport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (transport.CapableConn, error) { + connScope, err := t.rcmgr.OpenConnection(network.DirOutbound, true) + if err != nil { + return nil, err + } + macon, err := t.maDial(ctx, raddr) + if err != nil { + connScope.Done() + return nil, err + } + return t.upgrader.Upgrade(ctx, t, macon, network.DirOutbound, p, connScope) +} + +func (t *WebsocketTransport) maDial(ctx context.Context, raddr ma.Multiaddr) (manet.Conn, error) { + wsurl, err := parseMultiaddr(raddr) + if err != nil { + return nil, err + } + isWss := wsurl.Scheme == "wss" + dialer := ws.Dialer{HandshakeTimeout: 30 * time.Second} + if isWss { + dialer.TLSClientConfig = t.tlsClientConf + + } + wscon, _, err := dialer.DialContext(ctx, wsurl.String(), nil) + if err != nil { + return nil, err + } + + mnc, err := manet.WrapNetConn(NewConn(wscon, isWss)) + if err != nil { + wscon.Close() + return nil, err + } + return mnc, nil +} + +func (t *WebsocketTransport) maListen(a ma.Multiaddr) (manet.Listener, error) { + l, err := newListener(a, t.tlsConf) + if err != nil { + return nil, err + } + go l.serve() + return l, nil +} + +func (t *WebsocketTransport) Listen(a ma.Multiaddr) (transport.Listener, error) { + malist, err := t.maListen(a) + if err != nil { + return nil, err + } + return t.upgrader.UpgradeListener(t, malist), nil +} diff --git a/vendor/github.com/libp2p/go-libp2p/version.json b/vendor/github.com/libp2p/go-libp2p/version.json index c2b79fcdf9..82c63e5030 100644 --- a/vendor/github.com/libp2p/go-libp2p/version.json +++ b/vendor/github.com/libp2p/go-libp2p/version.json @@ -1,3 +1,3 @@ { - "version": "v0.18.0-rc2" + "version": "v0.20.0" } diff --git a/vendor/github.com/libp2p/go-mplex/LICENSE b/vendor/github.com/libp2p/go-mplex/LICENSE deleted file mode 100644 index 26100332ba..0000000000 --- a/vendor/github.com/libp2p/go-mplex/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Jeromy Johnson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-mplex/README.md b/vendor/github.com/libp2p/go-mplex/README.md deleted file mode 100644 index e8e016970c..0000000000 --- a/vendor/github.com/libp2p/go-mplex/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# go-mplex - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![Go Reference](https://pkg.go.dev/badge/github.com/libp2p/go-mplex.svg)](https://pkg.go.dev/github.com/libp2p/go-mplex) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) - -A super simple [stream muxing](https://docs.libp2p.io/concepts/stream-multiplexing/) library implementing [mplex](https://github.com/libp2p/specs/tree/master/mplex). - -## Usage - -```go -mplex := multiplex.NewMultiplex(mysocket) - -s, _ := mplex.NewStream() -s.Write([]byte("Hello World!")) -s.Close() - -os, _ := mplex.Accept() -// echo back everything received -io.Copy(os, os) -``` - ---- - -The last gx published version of this module was: 0.2.35: QmWGQQ6Tz8AdUpxktLf3zgnVN9Vy8fcWVezZJSU3ZmiANj diff --git a/vendor/github.com/libp2p/go-mplex/deadline.go b/vendor/github.com/libp2p/go-mplex/deadline.go deleted file mode 100644 index b251c1a49a..0000000000 --- a/vendor/github.com/libp2p/go-mplex/deadline.go +++ /dev/null @@ -1,97 +0,0 @@ -// Copied from the go standard library. -// -// Copyright 2010 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE-BSD file. - -package multiplex - -import ( - "sync" - "time" -) - -// pipeDeadline is an abstraction for handling timeouts. -type pipeDeadline struct { - mu sync.Mutex // Guards timer and cancel - timer *time.Timer - cancel chan struct{} // Must be non-nil -} - -func makePipeDeadline() pipeDeadline { - return pipeDeadline{cancel: make(chan struct{})} -} - -// set sets the point in time when the deadline will time out. -// A timeout event is signaled by closing the channel returned by waiter. -// Once a timeout has occurred, the deadline can be refreshed by specifying a -// t value in the future. -// -// A zero value for t prevents timeout. -func (d *pipeDeadline) set(t time.Time) { - d.mu.Lock() - defer d.mu.Unlock() - - // deadline closed - if d.cancel == nil { - return - } - - if d.timer != nil && !d.timer.Stop() { - <-d.cancel // Wait for the timer callback to finish and close cancel - } - d.timer = nil - - // Time is zero, then there is no deadline. - closed := isClosedChan(d.cancel) - if t.IsZero() { - if closed { - d.cancel = make(chan struct{}) - } - return - } - - // Time in the future, setup a timer to cancel in the future. - if dur := time.Until(t); dur > 0 { - if closed { - d.cancel = make(chan struct{}) - } - d.timer = time.AfterFunc(dur, func() { - close(d.cancel) - }) - return - } - - // Time in the past, so close immediately. - if !closed { - close(d.cancel) - } -} - -// wait returns a channel that is closed when the deadline is exceeded. -func (d *pipeDeadline) wait() chan struct{} { - d.mu.Lock() - defer d.mu.Unlock() - return d.cancel -} - -// close closes, the deadline. Any future calls to `set` will do nothing. -func (d *pipeDeadline) close() { - d.mu.Lock() - defer d.mu.Unlock() - - if d.timer != nil && !d.timer.Stop() { - <-d.cancel // Wait for the timer callback to finish and close cancel - } - d.timer = nil - d.cancel = nil -} - -func isClosedChan(c <-chan struct{}) bool { - select { - case <-c: - return true - default: - return false - } -} diff --git a/vendor/github.com/libp2p/go-mplex/go.mod b/vendor/github.com/libp2p/go-mplex/go.mod deleted file mode 100644 index d9f3c104f3..0000000000 --- a/vendor/github.com/libp2p/go-mplex/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module github.com/libp2p/go-mplex - -require ( - github.com/ipfs/go-log/v2 v2.5.0 - github.com/libp2p/go-buffer-pool v0.0.2 - github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8 - github.com/multiformats/go-varint v0.0.6 - go.uber.org/multierr v1.6.0 - google.golang.org/grpc v1.28.1 -) - -go 1.16 diff --git a/vendor/github.com/libp2p/go-mplex/go.sum b/vendor/github.com/libp2p/go-mplex/go.sum deleted file mode 100644 index a098b63c00..0000000000 --- a/vendor/github.com/libp2p/go-mplex/go.sum +++ /dev/null @@ -1,210 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.3 h1:UIAh32wymBpStoe83YCzwVQQ5Oy/H0FdxvUS6DJDzms= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.3.0 h1:F7PqduvrztDtFsAa/bcheQ3azmNo+Nq7m8hQY5GiUW8= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8 h1:v4dvk7YEW8buwCdIVWnhpv0Hp/AAJKRWIxBhmLRZrsk= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-openssl v0.0.4 h1:d27YZvLoTyMhIN4njrkr8zMDOM4lfpHIp6A+TK9fovg= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-multiaddr v0.2.0 h1:lR52sFwcTCuQb6bTfnXF6zA2XfyYvyd+5a9qECv/J90= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multibase v0.0.1 h1:PN9/v21eLywrFWdFNsFKaU04kLJzuYzmrJR+ubhT9qA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10 h1:lMoNbh2Ssd9PUF74Nz008KGzGPlfeV6wH3rit5IIGCM= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.28.1 h1:C1QC6KzgSiLyBabDi87BbjaGreoRgGUF5nOyvfrAZ1k= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/libp2p/go-mplex/multiplex.go b/vendor/github.com/libp2p/go-mplex/multiplex.go deleted file mode 100644 index 4ee4156a70..0000000000 --- a/vendor/github.com/libp2p/go-mplex/multiplex.go +++ /dev/null @@ -1,583 +0,0 @@ -package multiplex - -import ( - "bufio" - "context" - "encoding/binary" - "errors" - "fmt" - "io" - "net" - "sync" - "time" - - pool "github.com/libp2p/go-buffer-pool" - - logging "github.com/ipfs/go-log/v2" - "github.com/multiformats/go-varint" -) - -var log = logging.Logger("mplex") - -var MaxMessageSize = 1 << 20 - -// Max time to block waiting for a slow reader to read from a stream before -// resetting it. Preferably, we'd have some form of back-pressure mechanism but -// we don't have that in this protocol. -var ReceiveTimeout = 5 * time.Second - -// ErrShutdown is returned when operating on a shutdown session -var ErrShutdown = errors.New("session shut down") - -// ErrTwoInitiators is returned when both sides think they're the initiator -var ErrTwoInitiators = errors.New("two initiators") - -// ErrInvalidState is returned when the other side does something it shouldn't. -// In this case, we close the connection to be safe. -var ErrInvalidState = errors.New("received an unexpected message from the peer") - -var errTimeout = timeout{} - -var ( - ResetStreamTimeout = 2 * time.Minute - - WriteCoalesceDelay = 100 * time.Microsecond -) - -type timeout struct{} - -func (timeout) Error() string { return "i/o deadline exceeded" } -func (timeout) Temporary() bool { return true } -func (timeout) Timeout() bool { return true } - -// The MemoryManager allows management of memory allocations. -type MemoryManager interface { - // ReserveMemory reserves memory / buffer. - ReserveMemory(size int, prio uint8) error - // ReleaseMemory explicitly releases memory previously reserved with ReserveMemory - ReleaseMemory(size int) -} - -type nullMemoryManager struct{} - -func (m *nullMemoryManager) ReserveMemory(size int, prio uint8) error { return nil } -func (m *nullMemoryManager) ReleaseMemory(size int) {} - -// +1 for initiator -const ( - newStreamTag = 0 - messageTag = 2 - closeTag = 4 - resetTag = 6 -) - -// Multiplex is a mplex session. -type Multiplex struct { - con net.Conn - buf *bufio.Reader - nextID uint64 - initiator bool - - memoryManager MemoryManager - - closed chan struct{} - shutdown chan struct{} - shutdownErr error - shutdownLock sync.Mutex - - writeCh chan []byte - writeTimer *time.Timer - writeTimerFired bool - - nstreams chan *Stream - - channels map[streamID]*Stream - chLock sync.Mutex -} - -// NewMultiplex creates a new multiplexer session. -func NewMultiplex(con net.Conn, initiator bool, memoryManager MemoryManager) *Multiplex { - if memoryManager == nil { - memoryManager = &nullMemoryManager{} - } - mp := &Multiplex{ - con: con, - initiator: initiator, - buf: bufio.NewReader(con), - channels: make(map[streamID]*Stream), - closed: make(chan struct{}), - shutdown: make(chan struct{}), - writeCh: make(chan []byte, 16), - writeTimer: time.NewTimer(0), - nstreams: make(chan *Stream, 16), - memoryManager: memoryManager, - } - - go mp.handleIncoming() - go mp.handleOutgoing() - - return mp -} - -func (mp *Multiplex) newStream(id streamID, name string) (s *Stream) { - s = &Stream{ - id: id, - name: name, - dataIn: make(chan []byte, 8), - rDeadline: makePipeDeadline(), - wDeadline: makePipeDeadline(), - mp: mp, - writeCancel: make(chan struct{}), - readCancel: make(chan struct{}), - } - return -} - -// Accept accepts the next stream from the connection. -func (m *Multiplex) Accept() (*Stream, error) { - select { - case s, ok := <-m.nstreams: - if !ok { - return nil, errors.New("multiplex closed") - } - return s, nil - case <-m.closed: - return nil, m.shutdownErr - } -} - -// Close closes the session. -func (mp *Multiplex) Close() error { - mp.closeNoWait() - - // Wait for the receive loop to finish. - <-mp.closed - - return nil -} - -func (mp *Multiplex) closeNoWait() { - mp.shutdownLock.Lock() - select { - case <-mp.shutdown: - default: - mp.con.Close() - close(mp.shutdown) - } - mp.shutdownLock.Unlock() -} - -// IsClosed returns true if the session is closed. -func (mp *Multiplex) IsClosed() bool { - select { - case <-mp.closed: - return true - default: - return false - } -} - -// CloseChan returns a read-only channel which will be closed when the session is closed -func (mp *Multiplex) CloseChan() <-chan struct{} { - return mp.closed -} - -func (mp *Multiplex) sendMsg(timeout, cancel <-chan struct{}, header uint64, data []byte) error { - buf, err := mp.getBuffer(len(data) + 20) - if err != nil { - return err - } - - n := 0 - n += binary.PutUvarint(buf[n:], header) - n += binary.PutUvarint(buf[n:], uint64(len(data))) - n += copy(buf[n:], data) - - select { - case mp.writeCh <- buf[:n]: - return nil - case <-mp.shutdown: - return ErrShutdown - case <-timeout: - return errTimeout - case <-cancel: - return ErrStreamClosed - } -} - -func (mp *Multiplex) handleOutgoing() { - for { - select { - case <-mp.shutdown: - return - - case data := <-mp.writeCh: - // FIXME: https://github.com/libp2p/go-libp2p/issues/644 - // write coalescing disabled until this can be fixed. - // err := mp.writeMsg(data) - err := mp.doWriteMsg(data) - mp.putBuffer(data) - if err != nil { - // the connection is closed by this time - log.Warnf("error writing data: %s", err.Error()) - return - } - } - } -} - -//lint:ignore U1000 disabled -func (mp *Multiplex) writeMsg(data []byte) error { - if len(data) >= 512 { - err := mp.doWriteMsg(data) - mp.putBuffer(data) - return err - } - - buf, err := mp.getBuffer(4096) - if err != nil { - return err - } - defer mp.putBuffer(buf) - - n := copy(buf, data) - mp.putBuffer(data) - - if !mp.writeTimerFired { - if !mp.writeTimer.Stop() { - <-mp.writeTimer.C - } - } - mp.writeTimer.Reset(WriteCoalesceDelay) - mp.writeTimerFired = false - - for { - select { - case data = <-mp.writeCh: - wr := copy(buf[n:], data) - if wr < len(data) { - // we filled the buffer, send it - if err := mp.doWriteMsg(buf); err != nil { - mp.putBuffer(data) - return err - } - - if len(data)-wr >= 512 { - // the remaining data is not a small write, send it - err := mp.doWriteMsg(data[wr:]) - mp.putBuffer(data) - return err - } - - n = copy(buf, data[wr:]) - - // we've written some, reset the timer to coalesce the rest - if !mp.writeTimer.Stop() { - <-mp.writeTimer.C - } - mp.writeTimer.Reset(WriteCoalesceDelay) - } else { - n += wr - } - - mp.putBuffer(data) - - case <-mp.writeTimer.C: - mp.writeTimerFired = true - return mp.doWriteMsg(buf[:n]) - - case <-mp.shutdown: - return ErrShutdown - } - } -} - -func (mp *Multiplex) doWriteMsg(data []byte) error { - if mp.isShutdown() { - return ErrShutdown - } - - _, err := mp.con.Write(data) - if err != nil { - mp.closeNoWait() - } - - return err -} - -func (mp *Multiplex) nextChanID() uint64 { - out := mp.nextID - mp.nextID++ - return out -} - -// NewStream creates a new stream. -func (mp *Multiplex) NewStream(ctx context.Context) (*Stream, error) { - return mp.NewNamedStream(ctx, "") -} - -// NewNamedStream creates a new named stream. -func (mp *Multiplex) NewNamedStream(ctx context.Context, name string) (*Stream, error) { - mp.chLock.Lock() - - // We could call IsClosed but this is faster (given that we already have - // the lock). - if mp.channels == nil { - mp.chLock.Unlock() - return nil, ErrShutdown - } - - sid := mp.nextChanID() - header := (sid << 3) | newStreamTag - - if name == "" { - name = fmt.Sprint(sid) - } - s := mp.newStream(streamID{ - id: sid, - initiator: true, - }, name) - mp.channels[s.id] = s - mp.chLock.Unlock() - - err := mp.sendMsg(ctx.Done(), nil, header, []byte(name)) - if err != nil { - if err == errTimeout { - return nil, ctx.Err() - } - return nil, err - } - - return s, nil -} - -func (mp *Multiplex) cleanup() { - mp.closeNoWait() - - // Take the channels. - mp.chLock.Lock() - channels := mp.channels - mp.channels = nil - mp.chLock.Unlock() - - // Cancel any reads/writes - for _, msch := range channels { - msch.cancelRead(ErrStreamReset) - msch.cancelWrite(ErrStreamReset) - } - - // And... shutdown! - if mp.shutdownErr == nil { - mp.shutdownErr = ErrShutdown - } - close(mp.closed) -} - -func (mp *Multiplex) handleIncoming() { - defer mp.cleanup() - - recvTimeout := time.NewTimer(0) - defer recvTimeout.Stop() - - if !recvTimeout.Stop() { - <-recvTimeout.C - } - - for { - chID, tag, err := mp.readNextHeader() - if err != nil { - mp.shutdownErr = err - return - } - - remoteIsInitiator := tag&1 == 0 - ch := streamID{ - // true if *I'm* the initiator. - initiator: !remoteIsInitiator, - id: chID, - } - // Rounds up the tag: - // 0 -> 0 - // 1 -> 2 - // 2 -> 2 - // 3 -> 4 - // etc... - tag += (tag & 1) - - b, err := mp.readNext() - if err != nil { - mp.shutdownErr = err - return - } - - mp.chLock.Lock() - msch, ok := mp.channels[ch] - mp.chLock.Unlock() - - switch tag { - case newStreamTag: - if ok { - log.Debugf("received NewStream message for existing stream: %d", ch) - mp.shutdownErr = ErrInvalidState - return - } - - name := string(b) - mp.putBuffer(b) - - msch = mp.newStream(ch, name) - mp.chLock.Lock() - mp.channels[ch] = msch - mp.chLock.Unlock() - select { - case mp.nstreams <- msch: - case <-mp.shutdown: - return - } - - case resetTag: - if !ok { - // This is *ok*. We forget the stream on reset. - continue - } - - // Cancel any ongoing reads/writes. - msch.cancelRead(ErrStreamReset) - msch.cancelWrite(ErrStreamReset) - case closeTag: - if !ok { - // may have canceled our reads already. - continue - } - - // unregister and throw away future data. - mp.chLock.Lock() - delete(mp.channels, ch) - mp.chLock.Unlock() - - // close data channel, there will be no more data. - close(msch.dataIn) - - // We intentionally don't cancel any deadlines, cancel reads, cancel - // writes, etc. We just deliver the EOF by closing the - // data channel, and unregister the channel so we don't - // receive any more data. The user still needs to call - // `Close()` or `Reset()`. - case messageTag: - if !ok { - // We're not accepting data on this stream, for - // some reason. It's likely that we reset it, or - // simply canceled reads (e.g., called Close). - mp.putBuffer(b) - continue - } - - recvTimeout.Reset(ReceiveTimeout) - select { - case msch.dataIn <- b: - case <-msch.readCancel: - // the user has canceled reading. walk away. - mp.putBuffer(b) - case <-recvTimeout.C: - mp.putBuffer(b) - log.Warnf("timed out receiving message into stream queue.") - // Do not do this asynchronously. Otherwise, we - // could drop a message, then receive a message, - // then reset. - msch.Reset() - continue - case <-mp.shutdown: - mp.putBuffer(b) - return - } - if !recvTimeout.Stop() { - <-recvTimeout.C - } - default: - log.Debugf("message with unknown header on stream %s", ch) - if ok { - msch.Reset() - } - } - } -} - -func (mp *Multiplex) isShutdown() bool { - select { - case <-mp.shutdown: - return true - default: - return false - } -} - -func (mp *Multiplex) sendResetMsg(header uint64, hard bool) { - ctx, cancel := context.WithTimeout(context.Background(), ResetStreamTimeout) - defer cancel() - - err := mp.sendMsg(ctx.Done(), nil, header, nil) - if err != nil && !mp.isShutdown() { - if hard { - log.Warnf("error sending reset message: %s; killing connection", err.Error()) - mp.Close() - } else { - log.Debugf("error sending reset message: %s", err.Error()) - } - } -} - -func (mp *Multiplex) readNextHeader() (uint64, uint64, error) { - h, err := varint.ReadUvarint(mp.buf) - if err != nil { - return 0, 0, err - } - - // get channel ID - ch := h >> 3 - - rem := h & 7 - - return ch, rem, nil -} - -func (mp *Multiplex) readNext() ([]byte, error) { - // get length - l, err := varint.ReadUvarint(mp.buf) - if err != nil { - return nil, err - } - - if l > uint64(MaxMessageSize) { - return nil, fmt.Errorf("message size too large") - } - - if l == 0 { - return nil, nil - } - - buf, err := mp.getBuffer(int(l)) - if err != nil { - return nil, err - } - n, err := io.ReadFull(mp.buf, buf) - if err != nil { - return nil, err - } - - return buf[:n], nil -} - -func (mp *Multiplex) getBuffer(length int) ([]byte, error) { - if err := mp.memoryManager.ReserveMemory(length, 128); err != nil { - // Kill the connection when we can't reserve memory. - // Since mplex doesn't support backpressure, there's not a lot we can do. - mp.closeNoWait() - return nil, err - } - return pool.Get(length), nil -} - -func (mp *Multiplex) putBuffer(slice []byte) { - mp.memoryManager.ReleaseMemory(len(slice)) - pool.Put(slice) -} diff --git a/vendor/github.com/libp2p/go-mplex/stream.go b/vendor/github.com/libp2p/go-mplex/stream.go deleted file mode 100644 index 4d7007d0d8..0000000000 --- a/vendor/github.com/libp2p/go-mplex/stream.go +++ /dev/null @@ -1,269 +0,0 @@ -package multiplex - -import ( - "context" - "errors" - "io" - "sync" - "time" - - pool "github.com/libp2p/go-buffer-pool" - "go.uber.org/multierr" -) - -var ( - ErrStreamReset = errors.New("stream reset") - ErrStreamClosed = errors.New("closed stream") -) - -// streamID is a convenience type for operating on stream IDs -type streamID struct { - id uint64 - initiator bool -} - -// header computes the header for the given tag -func (id *streamID) header(tag uint64) uint64 { - header := id.id<<3 | tag - if !id.initiator { - header-- - } - return header -} - -type Stream struct { - id streamID - name string - dataIn chan []byte - mp *Multiplex - - extra []byte - - // exbuf is for holding the reference to the beginning of the extra slice - // for later memory pool freeing - exbuf []byte - - rDeadline, wDeadline pipeDeadline - - clLock sync.Mutex - writeCancelErr, readCancelErr error - writeCancel, readCancel chan struct{} -} - -func (s *Stream) Name() string { - return s.name -} - -// tries to preload pending data -func (s *Stream) preloadData() { - select { - case read, ok := <-s.dataIn: - if !ok { - return - } - s.extra = read - s.exbuf = read - default: - } -} - -func (s *Stream) waitForData() error { - select { - case read, ok := <-s.dataIn: - if !ok { - return io.EOF - } - s.extra = read - s.exbuf = read - return nil - case <-s.readCancel: - // This is the only place where it's safe to return these. - s.returnBuffers() - return s.readCancelErr - case <-s.rDeadline.wait(): - return errTimeout - } -} - -func (s *Stream) returnBuffers() { - if s.exbuf != nil { - pool.Put(s.exbuf) - s.exbuf = nil - s.extra = nil - } - for { - select { - case read, ok := <-s.dataIn: - if !ok { - return - } - if read == nil { - continue - } - pool.Put(read) - default: - return - } - } -} - -func (s *Stream) Read(b []byte) (int, error) { - select { - case <-s.readCancel: - return 0, s.readCancelErr - default: - } - - if s.extra == nil { - err := s.waitForData() - if err != nil { - return 0, err - } - } - n := 0 - for s.extra != nil && n < len(b) { - read := copy(b[n:], s.extra) - n += read - if read < len(s.extra) { - s.extra = s.extra[read:] - } else { - if s.exbuf != nil { - pool.Put(s.exbuf) - } - s.extra = nil - s.exbuf = nil - s.preloadData() - } - } - return n, nil -} - -func (s *Stream) Write(b []byte) (int, error) { - var written int - for written < len(b) { - wl := len(b) - written - if wl > MaxMessageSize { - wl = MaxMessageSize - } - - n, err := s.write(b[written : written+wl]) - if err != nil { - return written, err - } - - written += n - } - - return written, nil -} - -func (s *Stream) write(b []byte) (int, error) { - select { - case <-s.writeCancel: - return 0, s.writeCancelErr - default: - } - - err := s.mp.sendMsg(s.wDeadline.wait(), s.writeCancel, s.id.header(messageTag), b) - if err != nil { - return 0, err - } - - return len(b), nil -} - -func (s *Stream) cancelWrite(err error) bool { - s.wDeadline.close() - - s.clLock.Lock() - defer s.clLock.Unlock() - select { - case <-s.writeCancel: - return false - default: - s.writeCancelErr = err - close(s.writeCancel) - return true - } -} - -func (s *Stream) cancelRead(err error) bool { - // Always unregister for reading first, even if we're already closed (or - // already closing). When handleIncoming calls this, it expects the - // stream to be unregistered by the time it returns. - s.mp.chLock.Lock() - delete(s.mp.channels, s.id) - s.mp.chLock.Unlock() - - s.rDeadline.close() - - s.clLock.Lock() - defer s.clLock.Unlock() - select { - case <-s.readCancel: - return false - default: - s.readCancelErr = err - close(s.readCancel) - return true - } -} - -func (s *Stream) CloseWrite() error { - if !s.cancelWrite(ErrStreamClosed) { - // Check if we closed the stream _nicely_. If so, we don't need - // to report an error to the user. - if s.writeCancelErr == ErrStreamClosed { - return nil - } - // Closed for some other reason. Report it. - return s.writeCancelErr - } - - ctx, cancel := context.WithTimeout(context.Background(), ResetStreamTimeout) - defer cancel() - - err := s.mp.sendMsg(ctx.Done(), nil, s.id.header(closeTag), nil) - // We failed to close the stream after 2 minutes, something is probably wrong. - if err != nil && !s.mp.isShutdown() { - log.Warnf("Error closing stream: %s; killing connection", err.Error()) - s.mp.Close() - } - return err -} - -func (s *Stream) CloseRead() error { - s.cancelRead(ErrStreamClosed) - return nil -} - -func (s *Stream) Close() error { - return multierr.Combine(s.CloseRead(), s.CloseWrite()) -} - -func (s *Stream) Reset() error { - s.cancelRead(ErrStreamReset) - - if s.cancelWrite(ErrStreamReset) { - // Send a reset in the background. - go s.mp.sendResetMsg(s.id.header(resetTag), true) - } - - return nil -} - -func (s *Stream) SetDeadline(t time.Time) error { - s.rDeadline.set(t) - s.wDeadline.set(t) - return nil -} - -func (s *Stream) SetReadDeadline(t time.Time) error { - s.rDeadline.set(t) - return nil -} - -func (s *Stream) SetWriteDeadline(t time.Time) error { - s.wDeadline.set(t) - return nil -} diff --git a/vendor/github.com/libp2p/go-mplex/version.json b/vendor/github.com/libp2p/go-mplex/version.json deleted file mode 100644 index 372b6eab3e..0000000000 --- a/vendor/github.com/libp2p/go-mplex/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.4.0" -} diff --git a/vendor/github.com/libp2p/go-msgio/README.md b/vendor/github.com/libp2p/go-msgio/README.md index c2196ec58c..37c99ca4d9 100644 --- a/vendor/github.com/libp2p/go-msgio/README.md +++ b/vendor/github.com/libp2p/go-msgio/README.md @@ -65,25 +65,6 @@ for { } ``` -### Channels - -```go -import "github.com/libp2p/go-msgio" -rw := genReadWriter() -rch := msgio.NewReadChannel(rw) -wch := msgio.NewWriteChannel(rw) - -for { - msg, err := <-rch - if err != nil { - return err - } - - // echo it back :) - wch<- rw -} -``` - --- The last gx published version of this module was: 0.0.6: QmcxL9MDzSU5Mj1GcWZD8CXkAFuJXjdbjotZ93o371bKSf diff --git a/vendor/github.com/libp2p/go-msgio/go.mod b/vendor/github.com/libp2p/go-msgio/go.mod deleted file mode 100644 index 5d4aec7fb7..0000000000 --- a/vendor/github.com/libp2p/go-msgio/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/libp2p/go-msgio - -go 1.16 - -require ( - github.com/gogo/protobuf v1.3.1 - github.com/libp2p/go-buffer-pool v0.0.2 - github.com/multiformats/go-varint v0.0.6 -) diff --git a/vendor/github.com/libp2p/go-msgio/go.sum b/vendor/github.com/libp2p/go-msgio/go.sum deleted file mode 100644 index 89aa941241..0000000000 --- a/vendor/github.com/libp2p/go-msgio/go.sum +++ /dev/null @@ -1,9 +0,0 @@ -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/vendor/github.com/libp2p/go-msgio/protoio/uvarint_reader.go b/vendor/github.com/libp2p/go-msgio/protoio/uvarint_reader.go index a3607fd73c..1173467156 100644 --- a/vendor/github.com/libp2p/go-msgio/protoio/uvarint_reader.go +++ b/vendor/github.com/libp2p/go-msgio/protoio/uvarint_reader.go @@ -34,7 +34,10 @@ package protoio import ( "bufio" + "fmt" "io" + "os" + "runtime/debug" "github.com/gogo/protobuf/proto" @@ -56,7 +59,14 @@ func NewDelimitedReader(r io.Reader, maxSize int) ReadCloser { return &uvarintReader{bufio.NewReader(r), nil, maxSize, closer} } -func (ur *uvarintReader) ReadMsg(msg proto.Message) error { +func (ur *uvarintReader) ReadMsg(msg proto.Message) (err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "caught panic: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic reading message: %s", rerr) + } + }() + length64, err := varint.ReadUvarint(ur.r) if err != nil { return err diff --git a/vendor/github.com/libp2p/go-msgio/protoio/uvarint_writer.go b/vendor/github.com/libp2p/go-msgio/protoio/uvarint_writer.go index 0da567a552..ace982e113 100644 --- a/vendor/github.com/libp2p/go-msgio/protoio/uvarint_writer.go +++ b/vendor/github.com/libp2p/go-msgio/protoio/uvarint_writer.go @@ -33,7 +33,10 @@ package protoio import ( + "fmt" "io" + "os" + "runtime/debug" "github.com/gogo/protobuf/proto" @@ -51,6 +54,13 @@ func NewDelimitedWriter(w io.Writer) WriteCloser { } func (uw *uvarintWriter) WriteMsg(msg proto.Message) (err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "caught panic: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic reading message: %s", rerr) + } + }() + var data []byte if m, ok := msg.(interface { MarshalTo(data []byte) (n int, err error) diff --git a/vendor/github.com/libp2p/go-msgio/version.json b/vendor/github.com/libp2p/go-msgio/version.json new file mode 100644 index 0000000000..1437d5b735 --- /dev/null +++ b/vendor/github.com/libp2p/go-msgio/version.json @@ -0,0 +1,3 @@ +{ + "version": "v0.2.0" +} diff --git a/vendor/github.com/libp2p/go-nat/go.mod b/vendor/github.com/libp2p/go-nat/go.mod deleted file mode 100644 index 53fe02c477..0000000000 --- a/vendor/github.com/libp2p/go-nat/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/libp2p/go-nat - -require ( - github.com/huin/goupnp v1.0.0 - github.com/jackpal/go-nat-pmp v1.0.2 - github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d - github.com/libp2p/go-netroute v0.1.2 -) - -go 1.16 diff --git a/vendor/github.com/libp2p/go-nat/go.sum b/vendor/github.com/libp2p/go-nat/go.sum deleted file mode 100644 index be2d04ac02..0000000000 --- a/vendor/github.com/libp2p/go-nat/go.sum +++ /dev/null @@ -1,23 +0,0 @@ -github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/huin/goupnp v1.0.0 h1:wg75sLpL6DZqwHQN6E1Cfk6mtfzS45z8OV+ic+DtHRo= -github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= -github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3iZrZfqZzyLl6l7F3c6L1oWn7OICBi6o= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d h1:68u9r4wEvL3gYg2jvAOgROwZ3H+Y3hIDk4tbbmIjcYQ= -github.com/koron/go-ssdp v0.0.0-20191105050749-2e1c40ed0b5d/go.mod h1:5Ky9EC2xfoUKUor0Hjgi2BJhCSXJfMOFlmyYrVKGQMk= -github.com/libp2p/go-netroute v0.1.2 h1:UHhB35chwgvcRI392znJA3RCBtZ3MpE3ahNCN5MR4Xg= -github.com/libp2p/go-netroute v0.1.2/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-sockaddr v0.0.2 h1:tCuXfpA9rq7llM/v834RKc/Xvovy/AqM9kHvTV/jY/Q= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20181011144130-49bb7cea24b1/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3 h1:0GoQqolDA55aaLxZyTzK/Y2ePZzZTUrRacwib7cNsYQ= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67 h1:1Fzlr8kkDLQwqMP8GxrhptBLqZG/EDpiATneiZHY998= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/vendor/github.com/libp2p/go-netroute/go.mod b/vendor/github.com/libp2p/go-netroute/go.mod deleted file mode 100644 index 87412274b5..0000000000 --- a/vendor/github.com/libp2p/go-netroute/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/libp2p/go-netroute - -go 1.16 - -require ( - github.com/google/gopacket v1.1.19 - golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6 - golang.org/x/sys v0.0.0-20210426080607-c94f62235c83 -) diff --git a/vendor/github.com/libp2p/go-netroute/go.sum b/vendor/github.com/libp2p/go-netroute/go.sum deleted file mode 100644 index 69c19ab874..0000000000 --- a/vendor/github.com/libp2p/go-netroute/go.sum +++ /dev/null @@ -1,23 +0,0 @@ -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6 h1:0PC75Fz/kyMGhL0e1QnypqK2kQMqKt9csD1GnMJR+Zk= -golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83 h1:kHSDPqCtsHZOg0nVylfTo20DDhE9gG4Y0jn7hKQ0QAM= -golang.org/x/sys v0.0.0-20210426080607-c94f62235c83/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/vendor/github.com/libp2p/go-openssl/go.mod b/vendor/github.com/libp2p/go-openssl/go.mod deleted file mode 100644 index 51068e7f57..0000000000 --- a/vendor/github.com/libp2p/go-openssl/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/libp2p/go-openssl - -require ( - github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 - golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb // indirect -) - -go 1.12 diff --git a/vendor/github.com/libp2p/go-openssl/go.sum b/vendor/github.com/libp2p/go-openssl/go.sum deleted file mode 100644 index 3b2b650f82..0000000000 --- a/vendor/github.com/libp2p/go-openssl/go.sum +++ /dev/null @@ -1,4 +0,0 @@ -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/libp2p/go-reuseport-transport/LICENSE b/vendor/github.com/libp2p/go-reuseport-transport/LICENSE deleted file mode 100644 index 26100332ba..0000000000 --- a/vendor/github.com/libp2p/go-reuseport-transport/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Jeromy Johnson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-reuseport-transport/README.md b/vendor/github.com/libp2p/go-reuseport-transport/README.md deleted file mode 100644 index ba35dcd428..0000000000 --- a/vendor/github.com/libp2p/go-reuseport-transport/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# go-reuseport-transport - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![GoDoc](https://godoc.org/github.com/libp2p/go-reuseport-transport?status.svg)](https://godoc.org/github.com/libp2p/go-reuseport-transport) -[![Build Status](https://travis-ci.org/libp2p/go-reuseport-transport.svg?branch=master)](https://travis-ci.org/libp2p/go-reuseport-transport) - -> Basic reuseport TCP transport - -This package provides a basic transport for automatically (and intelligently) reusing TCP ports. - -To use, construct a new `Transport` (the zero value is safe to use) and configure any listeners (`tr.Listen(...)`). - -Then, when dialing (`tr.Dial(...)`), the transport will attempt to reuse the ports it's currently listening on, choosing the best one depending on the destination address. - - -NOTE: Currently, we don't make any attempts to prevent two reusport transports from interfering with each other (reusing each other's ports). However, we reserve the right to fix this in the future. - -## Install - -`go-reuseport-transport` is a standard Go module which can be installed with: - -```sh -go get github.com/libp2p/go-reuseport-transport -``` - -## Current use in libp2p - -This package is *currently* used by the [go-tcp-transport](https://github.com/libp2p/go-tcp-transport) libp2p transport and will likely be used by more libp2p transports in the future. - -## Contribute - -Feel free to join in. All welcome. Open an [issue](https://github.com/libp2p/go-reuseport-transport/issues)! - -This repository falls under the libp2p [Code of Conduct](https://github.com/libp2p/community/blob/master/code-of-conduct.md). - -### Want to hack on libp2p? - -[![](https://cdn.rawgit.com/libp2p/community/master/img/contribute.gif)](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) - -## License - -MIT - ---- - -The last gx published version of this module was: 0.2.3: QmTmbamDjDWgHe8qeMt7ZpaeNpTj349JpFKuwTF321XavT diff --git a/vendor/github.com/libp2p/go-reuseport-transport/go.mod b/vendor/github.com/libp2p/go-reuseport-transport/go.mod deleted file mode 100644 index def1bff2c0..0000000000 --- a/vendor/github.com/libp2p/go-reuseport-transport/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/libp2p/go-reuseport-transport - -go 1.16 - -require ( - github.com/ipfs/go-log/v2 v2.3.0 - github.com/libp2p/go-netroute v0.1.3 - github.com/libp2p/go-reuseport v0.1.0 - github.com/multiformats/go-multiaddr v0.4.0 -) diff --git a/vendor/github.com/libp2p/go-reuseport-transport/go.sum b/vendor/github.com/libp2p/go-reuseport-transport/go.sum deleted file mode 100644 index e113870b22..0000000000 --- a/vendor/github.com/libp2p/go-reuseport-transport/go.sum +++ /dev/null @@ -1,100 +0,0 @@ -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/google/gopacket v1.1.17 h1:rMrlX2ZY2UbvT+sdz3+6J+pp2z+msCq9MxTU6ymxbBY= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-log/v2 v2.3.0 h1:31Re/cPqFHpsRHgyVwjWADPoF0otB1WrjTy8ZFYwEZU= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-netroute v0.1.3 h1:1ngWRx61us/EpaKkdqkMjKk/ufr/JlIFYQAxV2XX8Ig= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-sockaddr v0.0.2 h1:tCuXfpA9rq7llM/v834RKc/Xvovy/AqM9kHvTV/jY/Q= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/mattn/go-isatty v0.0.13 h1:qdl+GuBjcsKKDco5BsxPJlId98mSWNKqYA+Co0SC1yA= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771 h1:MHkK1uRtFbVqvAgvWxafZe54+5uBxLluGylDiKgdhwo= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.4.0 h1:hL/K4ZJhJ5PTw3nwylq9lGU5yArzcAroZmex1ghSEkQ= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.16.0 h1:uFRZXykJGK9lLY4HtgSw44DnIcAM+kRBP7x5m+NpAOM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5 h1:hKsoRgsbwY1NafxrwTs+k64bikrLBkAgPir1TNCj3Zs= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= diff --git a/vendor/github.com/libp2p/go-reuseport-transport/transport.go b/vendor/github.com/libp2p/go-reuseport-transport/transport.go deleted file mode 100644 index ce7c4c50b2..0000000000 --- a/vendor/github.com/libp2p/go-reuseport-transport/transport.go +++ /dev/null @@ -1,25 +0,0 @@ -package tcpreuse - -import ( - "errors" - "sync" - - logging "github.com/ipfs/go-log/v2" -) - -var log = logging.Logger("reuseport-transport") - -// ErrWrongProto is returned when dialing a protocol other than tcp. -var ErrWrongProto = errors.New("can only dial TCP over IPv4 or IPv6") - -// Transport is a TCP reuse transport that reuses listener ports. -type Transport struct { - v4 network - v6 network -} - -type network struct { - mu sync.RWMutex - listeners map[*listener]struct{} - dialer dialer -} diff --git a/vendor/github.com/libp2p/go-reuseport/go.mod b/vendor/github.com/libp2p/go-reuseport/go.mod deleted file mode 100644 index 04aea24754..0000000000 --- a/vendor/github.com/libp2p/go-reuseport/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/libp2p/go-reuseport - -go 1.16 - -require ( - github.com/stretchr/testify v1.7.0 - golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e -) diff --git a/vendor/github.com/libp2p/go-reuseport/go.sum b/vendor/github.com/libp2p/go-reuseport/go.sum deleted file mode 100644 index 953409942b..0000000000 --- a/vendor/github.com/libp2p/go-reuseport/go.sum +++ /dev/null @@ -1,13 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e h1:ZytStCyV048ZqDsWHiYDdoI2Vd4msMcrDECFxS+tL9c= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/libp2p/go-reuseport/version.json b/vendor/github.com/libp2p/go-reuseport/version.json new file mode 100644 index 0000000000..1437d5b735 --- /dev/null +++ b/vendor/github.com/libp2p/go-reuseport/version.json @@ -0,0 +1,3 @@ +{ + "version": "v0.2.0" +} diff --git a/vendor/github.com/libp2p/go-stream-muxer-multistream/.gitignore b/vendor/github.com/libp2p/go-stream-muxer-multistream/.gitignore deleted file mode 100644 index 1377554ebe..0000000000 --- a/vendor/github.com/libp2p/go-stream-muxer-multistream/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.swp diff --git a/vendor/github.com/libp2p/go-stream-muxer-multistream/LICENSE b/vendor/github.com/libp2p/go-stream-muxer-multistream/LICENSE deleted file mode 100644 index c7386b3c94..0000000000 --- a/vendor/github.com/libp2p/go-stream-muxer-multistream/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2014 Juan Batiz-Benet - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-stream-muxer-multistream/Makefile b/vendor/github.com/libp2p/go-stream-muxer-multistream/Makefile deleted file mode 100644 index 3907e85789..0000000000 --- a/vendor/github.com/libp2p/go-stream-muxer-multistream/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -build: deps - go build ./... - -test: deps - go test ./... - -test_race: deps - go test -race ./... - -gx-bins: - go get github.com/whyrusleeping/gx - go get github.com/whyrusleeping/gx-go - -deps: gx-bins - gx --verbose install --global - gx-go rewrite - -clean: gx-bins - gx-go rewrite --undo diff --git a/vendor/github.com/libp2p/go-stream-muxer-multistream/README.md b/vendor/github.com/libp2p/go-stream-muxer-multistream/README.md deleted file mode 100644 index 68bc2da627..0000000000 --- a/vendor/github.com/libp2p/go-stream-muxer-multistream/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# go-smux-multistream - a go-stream-muxer shim for multistream - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](http://ipn.io) [![](https://img.shields.io/badge/freenode-%23ipfs-blue.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23ipfs) ![](https://raw.githubusercontent.com/libp2p/go-stream-muxer/master/img/badge.png) - -This is an implementation of the [go-stream-muxer](https://github.com/libp2p/go-stream-muxer) interface for [multistream](https://github.com/whyrusleeping/go-multistream). For more information, see that repo. - -## Installation - -```sh -go get -d github.com/libp2p/go-stream-muxer-multistream -cd $GOPATH/src/github.com/libp2p/go-stream-muxer-multistream -make deps -``` diff --git a/vendor/github.com/libp2p/go-stream-muxer-multistream/go.mod b/vendor/github.com/libp2p/go-stream-muxer-multistream/go.mod deleted file mode 100644 index 7d12c8ce36..0000000000 --- a/vendor/github.com/libp2p/go-stream-muxer-multistream/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/libp2p/go-stream-muxer-multistream - -go 1.16 - -require ( - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/multiformats/go-multistream v0.1.1 -) diff --git a/vendor/github.com/libp2p/go-stream-muxer-multistream/go.sum b/vendor/github.com/libp2p/go-stream-muxer-multistream/go.sum deleted file mode 100644 index 77ac28ac4d..0000000000 --- a/vendor/github.com/libp2p/go-stream-muxer-multistream/go.sum +++ /dev/null @@ -1,92 +0,0 @@ -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multistream v0.1.1 h1:JlAdpIFhBhGRLxe9W6Om0w++Gd6KMWoFPZL/dEnm9nI= -github.com/multiformats/go-multistream v0.1.1/go.mod h1:KmHZ40hzVxiaiwlj3MEbYgK9JFk2/9UktWZAF54Du38= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/libp2p/go-stream-muxer-multistream/version.json b/vendor/github.com/libp2p/go-stream-muxer-multistream/version.json deleted file mode 100644 index 372b6eab3e..0000000000 --- a/vendor/github.com/libp2p/go-stream-muxer-multistream/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.4.0" -} diff --git a/vendor/github.com/libp2p/go-tcp-transport/LICENSE b/vendor/github.com/libp2p/go-tcp-transport/LICENSE deleted file mode 100644 index 26100332ba..0000000000 --- a/vendor/github.com/libp2p/go-tcp-transport/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Jeromy Johnson - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/libp2p/go-tcp-transport/README.md b/vendor/github.com/libp2p/go-tcp-transport/README.md deleted file mode 100644 index 4052a609d7..0000000000 --- a/vendor/github.com/libp2p/go-tcp-transport/README.md +++ /dev/null @@ -1,144 +0,0 @@ -go-tcp-transport -================== - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![Coverage Status](https://coveralls.io/repos/github/libp2p/go-tcp-transport/badge.svg?branch=master)](https://coveralls.io/github/libp2p/go-tcp-transport?branch=master) -[![Travis CI](https://travis-ci.com/libp2p/go-tcp-transport.svg?branch=master)](https://travis-ci.com/libp2p/go-tcp-transport) - -> A libp2p transport implementation for tcp, including reuseport socket options. - -`go-tcp-transport` is an implementation of the [libp2p transport -interface][concept-transport] that streams data over TCP/IP sockets. It is -included by default in the main [`go-libp2p`][go-libp2p] "entry point" module. - -## Table of Contents - -- [go-tcp-transport](#go-tcp-transport) - - [Table of Contents](#table-of-contents) - - [Install](#install) - - [Usage](#usage) - - [Security and Multiplexing](#security-and-multiplexing) - - [reuseport](#reuseport) - - [Contribute](#contribute) - - [License](#license) - -## Install - -`go-tcp-transport` is included as a dependency of `go-libp2p`, which is the most -common libp2p entry point. If you depend on `go-libp2p`, there is generally no -need to explicitly depend on this module. - -`go-tcp-transport` is a standard Go module which can be installed with: - -``` sh -go get github.com/libp2p/go-tcp-transport -``` - - -This repo is [gomod](https://github.com/golang/go/wiki/Modules)-compatible, and users of -go 1.11 and later with modules enabled will automatically pull the latest tagged release -by referencing this package. Upgrades to future releases can be managed using `go get`, -or by editing your `go.mod` file as [described by the gomod documentation](https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies). - -## Usage - -TCP is one of the default transports enabled when constructing a standard libp2p -Host, along with [WebSockets](https://github.com/libp2p/go-ws-transport). - -Calling [`libp2p.New`][godoc-libp2p-new] to construct a libp2p Host will enable -the TCP transport, unless you override the default transports by passing in -`Options` to `libp2p.New`. - -To explicitly enable the TCP transport while constructing a host, use the -`libp2p.Transport` option, passing in the `NewTCPTransport` constructor function: - -``` go - -import ( - libp2p "github.com/libp2p/go-libp2p" - tcp "github.com/libp2p/go-tcp-transport" -) - -// TCP only: -h, err := libp2p.New( - libp2p.Transport(tcp.NewTCPTransport) -) -``` - -The example above will replace the default transports with a single TCP -transport. To add multiple transports: - -``` go -// TCP and QUIC: -h, err := libp2p.New( - libp2p.Transport(tcp.NewTCPTransport), - libp2p.Transport(quic.NewTransport), // see https://github.com/libp2p/go-libp2p-quic-transport -) -``` - -To use TCP transport options, pass them to the `libp2p.Transport` constructor: -```go -h, err := libp2p.New( - libp2p.Transport(tcp.NewTCPTransport, tcp.DisableReuseport(), tcp.WithConnectionTimeout(20*time.Second)) -) -``` - -## Addresses - -The TCP transport supports [multiaddrs][multiaddr] that contain a `tcp` -component, provided that there is sufficient addressing information for the IP -layer of the connection. - -Examples: - -| addr | description | -|----------------------------|----------------------------------------------------| -| `/ip4/1.2.3.4/tcp/1234` | IPv4: 1.2.3.4, TCP port 1234 | -| `/ip6/::1/tcp/1234` | IPv6 loopback, TCP port 1234 | - -## Security and Multiplexing - -Because TCP lacks native connection security and stream multiplexing facilities, -the TCP transport uses a [transport upgrader][transport-upgrader] to provide -those features. The transport upgrader negotiates transport security and -multiplexing for each connection according to the protocols supported by each -party. - -## reuseport - -The [`SO_REUSEPORT`][explain-reuseport] socket option allows multiple processes -or threads to bind to the same TCP port, provided that all of them set the -socket option. This has some performance benefits, and it can potentially assist -in NAT traversal by only requiring one port to be accessible for many -connections. - -The reuseport functionality is provided by a seperate module, -[go-reuseport-transport](https://github.com/libp2p/go-reuseport-transport). It -is enabled by default, but can be disabled at runtime by setting the -`LIBP2P_TCP_REUSEPORT` environment variable to `false` or `0`. - -## Contribute - -PRs are welcome! - -Small note: If editing the Readme, please conform to the [standard-readme](https://github.com/RichardLitt/standard-readme) specification. - -## License - -MIT © Jeromy Johnson - ---- - -The last gx published version of this module was: 2.0.28: QmTGiDkw4eeKq31wwpQRk5GwWiReaxrcTQLuCCLWgfKo5M - - -[go-libp2p]: https://github.com/libp2p/go-libp2p -[concept-transport]: https://docs.libp2p.io/concepts/transport/ -[interface-host]: https://github.com/libp2p/go-libp2p-core/blob/master/host/host.go -[godoc-libp2p-new]: https://godoc.org/github.com/libp2p/go-libp2p#New -[transport-upgrader]: https://github.com/libp2p/go-libp2p-transport-upgrader -[explain-reuseport]: https://lwn.net/Articles/542629/ -[multiaddr]: https://github.com/multiformats/multiaddr diff --git a/vendor/github.com/libp2p/go-tcp-transport/codecov.yml b/vendor/github.com/libp2p/go-tcp-transport/codecov.yml deleted file mode 100644 index 5f88a9ea27..0000000000 --- a/vendor/github.com/libp2p/go-tcp-transport/codecov.yml +++ /dev/null @@ -1,3 +0,0 @@ -coverage: - range: "50...100" -comment: off diff --git a/vendor/github.com/libp2p/go-tcp-transport/go.mod b/vendor/github.com/libp2p/go-tcp-transport/go.mod deleted file mode 100644 index 0d3d064fc9..0000000000 --- a/vendor/github.com/libp2p/go-tcp-transport/go.mod +++ /dev/null @@ -1,23 +0,0 @@ -module github.com/libp2p/go-tcp-transport - -go 1.16 - -require ( - github.com/golang/mock v1.6.0 - github.com/ipfs/go-log/v2 v2.5.0 - github.com/libp2p/go-conn-security-multistream v0.3.0 - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-mplex v0.5.0 - github.com/libp2p/go-libp2p-testing v0.7.0 - github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 - github.com/libp2p/go-netroute v0.1.5 // indirect - github.com/libp2p/go-reuseport v0.1.0 - github.com/libp2p/go-reuseport-transport v0.1.0 - github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd - github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b - github.com/multiformats/go-multiaddr v0.4.1 - github.com/multiformats/go-multiaddr-fmt v0.1.0 - github.com/multiformats/go-multihash v0.0.15 // indirect - github.com/prometheus/client_golang v1.10.0 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/libp2p/go-tcp-transport/go.sum b/vendor/github.com/libp2p/go-tcp-transport/go.sum deleted file mode 100644 index d3218a6810..0000000000 --- a/vendor/github.com/libp2p/go-tcp-transport/go.sum +++ /dev/null @@ -1,619 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.17/go.mod h1:UdDNZ1OO62aGYVnPhxT1U6aI7ukYtA/kB8vaU0diBUM= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/gopacket v1.1.19/go.mod h1:iJ8V8n6KS+z2U1A8pUwu8bW5SyEMkXJB8Yo/Vo+TKTo= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-log/v2 v2.3.0/go.mod h1:QqGoj30OTpnKaG/LKTGTxoP2mmQtjVMEnK72gynbe/g= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-mplex v0.5.0 h1:vt3k4E4HSND9XH4Z8rUpacPJFSAgLOv6HDvG8W9Ks9E= -github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-netroute v0.1.3/go.mod h1:jZLDV+1PE8y5XxBySEBgbuVAXbhtuHSdmLPL2n9MKbk= -github.com/libp2p/go-netroute v0.1.5 h1:Qj8GE/6Cxmw9aQUYTA9BrS+TELTqU7kKKspWBR4ieVw= -github.com/libp2p/go-netroute v0.1.5/go.mod h1:V1SR3AaECRkEQCoFFzYwVYWvYIEtlxx89+O3qcpCl4A= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-reuseport v0.1.0 h1:0ooKOx2iwyIkf339WCZ2HN3ujTDbkK0PjC7JVoP1AiM= -github.com/libp2p/go-reuseport v0.1.0/go.mod h1:bQVn9hmfcTaoo0c9v5pBhOarsU1eNOBZdaAd2hzXRKU= -github.com/libp2p/go-reuseport-transport v0.1.0 h1:C3PHeHjmnz8m6f0uydObj02tMEoi7CyD1zuN7xQT8gc= -github.com/libp2p/go-reuseport-transport v0.1.0/go.mod h1:vev0C0uMkzriDY59yFHD9v+ujJvYmDQVLowvAjEOmfw= -github.com/libp2p/go-sockaddr v0.0.2/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/libp2p/go-sockaddr v0.1.0 h1:Y4s3/jNoryVRKEBrkJ576F17CPOaMIzUeCsg7dlTDj0= -github.com/libp2p/go-sockaddr v0.1.0/go.mod h1:syPvOmNs24S3dFVGJA1/mrqdeijPxLV2Le3BRLKd68k= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd/go.mod h1:QuCEs1Nt24+FYQEqAAncTDPJIuGs+LxK1MCiFL25pMU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.13/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.4.0/go.mod h1:YcpyLH8ZPudLxQlemYBPhSm0/oCXAT8Z4mzFpyoPyRc= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.15 h1:hWOPdrNqDjwHDx82vsYGSDZNyktOJJ2dzZJzFkOV1jM= -github.com/multiformats/go-multihash v0.0.15/go.mod h1:D6aZrWNLFTV/ynMpKsNtB40mJzmCl4jb1alC0OvHiHg= -github.com/multiformats/go-multistream v0.2.1 h1:R5exp4cKvGlePuxg/bn4cnV53K4DxCe+uldxs7QzfrE= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.10.0 h1:/o0BDeWzLWXNZ+4q5gXltUvaMpJqckTa+jTNoB+z4cg= -github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3eltZnBwfENSU7mdogU= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.18.0 h1:WCVKW7aL6LEe1uryfI9dnEc2ZqNB1Fn0ok930v0iL1Y= -github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190228124157-a34e9553db1e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190405154228-4b34438f7a67/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210317225723-c4fcb01b228e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/vendor/github.com/libp2p/go-tcp-transport/version.json b/vendor/github.com/libp2p/go-tcp-transport/version.json deleted file mode 100644 index fc15ae013a..0000000000 --- a/vendor/github.com/libp2p/go-tcp-transport/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.5.0" -} diff --git a/vendor/github.com/libp2p/go-ws-transport/.gitignore b/vendor/github.com/libp2p/go-ws-transport/.gitignore deleted file mode 100644 index 60978d0b59..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/.gitignore +++ /dev/null @@ -1 +0,0 @@ -/tools/bin/ diff --git a/vendor/github.com/libp2p/go-ws-transport/README.md b/vendor/github.com/libp2p/go-ws-transport/README.md deleted file mode 100644 index eca2351222..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# go-ws-transport - -[![](https://img.shields.io/badge/made%20by-Protocol%20Labs-blue.svg?style=flat-square)](https://protocol.ai) -[![](https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square)](https://libp2p.io/) -[![](https://img.shields.io/badge/freenode-%23libp2p-yellow.svg?style=flat-square)](http://webchat.freenode.net/?channels=%23libp2p) -[![Discourse posts](https://img.shields.io/discourse/https/discuss.libp2p.io/posts.svg)](https://discuss.libp2p.io) -[![GoDoc](https://godoc.org/github.com/libp2p/go-ws-transport?status.svg)](https://godoc.org/github.com/libp2p/go-ws-transport) -[![Coverage Status](https://coveralls.io/repos/github/libp2p/go-ws-transport/badge.svg?branch=master)](https://coveralls.io/github/libp2p/go-ws-transport?branch=master) -[![Build Status](https://travis-ci.org/libp2p/go-ws-transport.svg?branch=master)](https://travis-ci.org/libp2p/go-ws-transport) - -> A libp2p transport implementation using WebSockets - -`go-ws-transport` is an implementation of the [libp2p transport -interface][concept-transport] that streams data over -[WebSockets][spec-websockets], which are themselves layered over TCP/IP. It is -included by default in the main [`go-libp2p`][go-libp2p] "entry point" module. - -## Table of Contents - -- [go-ws-transport](#go-ws-transport) - - [Table of Contents](#table-of-contents) - - [Install](#install) - - [Usage](#usage) - - [Addresses](#addresses) - - [Security and Multiplexing](#security-and-multiplexing) - - [Contribute](#contribute) - - [Want to hack on IPFS?](#want-to-hack-on-ipfs) - - [License](#license) - -## Install - -`go-ws-transport` is included as a dependency of `go-libp2p`, which is the most -common libp2p entry point. If you depend on `go-libp2p`, there is generally no -need to explicitly depend on this module. - -`go-ws-transport` is a standard Go module which can be installed with: - -```sh -> go get github.com/libp2p/go-ws-transport -``` - -This repo is [gomod](https://github.com/golang/go/wiki/Modules)-compatible, and users of -go 1.11 and later with modules enabled will automatically pull the latest tagged release -by referencing this package. Upgrades to future releases can be managed using `go get`, -or by editing your `go.mod` file as [described by the gomod documentation](https://github.com/golang/go/wiki/Modules#how-to-upgrade-and-downgrade-dependencies). - -## Usage - -WebSockets are one of the default transports enabled when constructing a standard libp2p -Host, along with [TCP](https://github.com/libp2p/go-tcp-transport). - -Calling [`libp2p.New`][godoc-libp2p-new] to construct a libp2p Host will enable -the WebSocket transport, unless you override the default transports by passing in -`Options` to `libp2p.New`. - -To explicitly enable the WebSocket transport while constructing a host, use the -`libp2p.Transport` option, passing in the `ws.New` constructor function: - -``` go - -import ( - libp2p "github.com/libp2p/go-libp2p" - ws "github.com/libp2p/go-ws-transport" -) - -// WebSockets only: -h, err := libp2p.New( - libp2p.Transport(ws.New) -) -``` - -The example above will replace the default transports with a single WebSocket -transport. To add multiple tranports, use `ChainOptions`: - -``` go -// WebSockets and QUIC: -h, err := libp2p.New( - libp2p.ChainOptions( - libp2p.Transport(ws.New), - libp2p.Transport(quic.NewTransport)) // see https://github.com/libp2p/go-libp2p-quic-transport -) -``` - -## Addresses - -The WebSocket transport supports [multiaddrs][multiaddr] that contain a `ws` -component, which is encapsulated within (or layered onto) another valid TCP -multiaddr. - -Examples: - -| addr | description | -|-------------------------------|----------------------------------------------------| -| `/ip4/1.2.3.4/tcp/1234/ws` | IPv4: 1.2.3.4, TCP port 1234 | -| `/ip6/::1/tcp/1234/ws` | IPv6 loopback, TCP port 1234 | -| `/dns4/example.com/tcp/80/ws` | DNS over IPv4, hostname `example.com`, TCP port 80 | - -Notice that the `/ws` multiaddr component contextualizes an existing TCP/IP -multiaddr and does not require any additional addressing information. - -## Security and Multiplexing - -While the WebSocket spec defines a `wss` URI scheme for encrypted WebSocket -connections, support for `wss` URIs relies on TLS, which wraps the WebSocket -connection in a similar manner to TLS-protected HTTP traffic. - -As libp2p does not integrate with the TLS Certificate Authority infrastructure -by design, security for WebSockets is provided by a [transport -upgrader][transport-upgrader]. The transport upgrader negotiates transport -security for each connection according to the protocols supported by each party. - -The transport upgrader also negotiates a stream multiplexing protocol to allow -many bidirectional streams to coexist on a single WebSocket connection. - -## Contribute - -Feel free to join in. All welcome. Open an [issue](https://github.com/libp2p/go-ws-transport/issues)! - -This repository falls under the libp2p [Code of Conduct](https://github.com/libp2p/community/blob/master/code-of-conduct.md). - -### Want to hack on libp2p? - -[![](https://cdn.rawgit.com/libp2p/community/master/img/contribute.gif)](https://github.com/libp2p/community/blob/master/CONTRIBUTE.md) - -## License - -MIT - ---- - -The last gx published version of this module was: 2.0.27: QmaSWc4ox6SZQF6DHZvDuM9sP1syNajkKuPXmKR1t5BAz5 - - -[go-libp2p]: https://github.com/libp2p/go-libp2p -[concept-transport]: https://docs.libp2p.io/concepts/transport/ -[interface-host]: https://github.com/libp2p/go-libp2p-core/blob/master/host/host.go -[godoc-libp2p-new]: https://godoc.org/github.com/libp2p/go-libp2p#New -[transport-upgrader]: https://github.com/libp2p/go-libp2p-transport-upgrader -[multiaddr]: https://github.com/multiformats/multiaddr -[spec-websockets]: https://tools.ietf.org/html/rfc6455 diff --git a/vendor/github.com/libp2p/go-ws-transport/addrs.go b/vendor/github.com/libp2p/go-ws-transport/addrs.go deleted file mode 100644 index e789399da3..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/addrs.go +++ /dev/null @@ -1,73 +0,0 @@ -package websocket - -import ( - "fmt" - "net" - "net/url" - - ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr/net" -) - -// Addr is an implementation of net.Addr for WebSocket. -type Addr struct { - *url.URL -} - -var _ net.Addr = (*Addr)(nil) - -// Network returns the network type for a WebSocket, "websocket". -func (addr *Addr) Network() string { - return "websocket" -} - -// NewAddr creates a new Addr using the given host string -func NewAddr(host string) *Addr { - return &Addr{ - URL: &url.URL{ - Host: host, - }, - } -} - -func ConvertWebsocketMultiaddrToNetAddr(maddr ma.Multiaddr) (net.Addr, error) { - _, host, err := manet.DialArgs(maddr) - if err != nil { - return nil, err - } - - return NewAddr(host), nil -} - -func ParseWebsocketNetAddr(a net.Addr) (ma.Multiaddr, error) { - wsa, ok := a.(*Addr) - if !ok { - return nil, fmt.Errorf("not a websocket address") - } - - tcpaddr, err := net.ResolveTCPAddr("tcp", wsa.Host) - if err != nil { - return nil, err - } - - tcpma, err := manet.FromNetAddr(tcpaddr) - if err != nil { - return nil, err - } - - wsma, err := ma.NewMultiaddr("/ws") - if err != nil { - return nil, err - } - - return tcpma.Encapsulate(wsma), nil -} - -func parseMultiaddr(a ma.Multiaddr) (string, error) { - _, host, err := manet.DialArgs(a) - if err != nil { - return "", err - } - - return "ws://" + host, nil -} diff --git a/vendor/github.com/libp2p/go-ws-transport/conn.go b/vendor/github.com/libp2p/go-ws-transport/conn.go deleted file mode 100644 index b100b44598..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/conn.go +++ /dev/null @@ -1,12 +0,0 @@ -package websocket - -import ( - "net" - "time" -) - -// GracefulCloseTimeout is the time to wait trying to gracefully close a -// connection before simply cutting it. -var GracefulCloseTimeout = 100 * time.Millisecond - -var _ net.Conn = (*Conn)(nil) diff --git a/vendor/github.com/libp2p/go-ws-transport/conn_browser.go b/vendor/github.com/libp2p/go-ws-transport/conn_browser.go deleted file mode 100644 index eaf0e645eb..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/conn_browser.go +++ /dev/null @@ -1,305 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package websocket - -import ( - "bytes" - "errors" - "fmt" - "net" - "strings" - "sync" - "syscall/js" - "time" -) - -const ( - webSocketStateConnecting = 0 - webSocketStateOpen = 1 - webSocketStateClosing = 2 - webSocketStateClosed = 3 -) - -var errConnectionClosed = errors.New("connection is closed") - -// Conn implements net.Conn interface for WebSockets in js/wasm. -type Conn struct { - js.Value - messageHandler *js.Func - closeHandler *js.Func - errorHandler *js.Func - mut sync.Mutex - currDataMut sync.RWMutex - currData bytes.Buffer - closeOnce sync.Once - closeSignalOnce sync.Once - closeSignal chan struct{} - dataSignal chan struct{} - localAddr net.Addr - remoteAddr net.Addr - firstErr error // only read this _after_ observing that closeSignal has been closed. -} - -// NewConn creates a Conn given a regular js/wasm WebSocket Conn. -func NewConn(raw js.Value) *Conn { - conn := &Conn{ - Value: raw, - closeSignal: make(chan struct{}), - dataSignal: make(chan struct{}, 1), - localAddr: NewAddr("0.0.0.0:0"), - remoteAddr: getRemoteAddr(raw), - } - // Force the JavaScript WebSockets API to use the ArrayBuffer type for - // incoming messages instead of the Blob type. This is better for us because - // ArrayBuffer can be converted to []byte synchronously but Blob cannot. - conn.Set("binaryType", "arraybuffer") - conn.setUpHandlers() - return conn -} - -func (c *Conn) Read(b []byte) (int, error) { - select { - case <-c.closeSignal: - c.readAfterErr(b) - default: - } - - for { - c.currDataMut.RLock() - n, _ := c.currData.Read(b) - c.currDataMut.RUnlock() - - if n != 0 { - // Data was ready. Return the number of bytes read. - return n, nil - } - - // There is no data ready to be read. Wait for more data or for the - // connection to be closed. - select { - case <-c.dataSignal: - case <-c.closeSignal: - return c.readAfterErr(b) - } - } -} - -// readAfterError reads from c.currData. If there is no more data left it -// returns c.firstErr if non-nil and otherwise returns io.EOF. -func (c *Conn) readAfterErr(b []byte) (int, error) { - if c.firstErr != nil { - return 0, c.firstErr - } - c.currDataMut.RLock() - n, err := c.currData.Read(b) - c.currDataMut.RUnlock() - return n, err -} - -// checkOpen returns an error if the connection is not open. Otherwise, it -// returns nil. -func (c *Conn) checkOpen() error { - state := c.Get("readyState").Int() - switch state { - case webSocketStateClosed, webSocketStateClosing: - return errConnectionClosed - } - return nil -} - -func (c *Conn) Write(b []byte) (n int, err error) { - defer func() { - if e := recover(); e != nil { - err = recoveredValueToError(e) - } - }() - if err := c.checkOpen(); err != nil { - return 0, err - } - uint8Array := js.Global().Get("Uint8Array").New(len(b)) - if js.CopyBytesToJS(uint8Array, b) != len(b) { - panic("expected to copy all bytes") - } - c.Call("send", uint8Array.Get("buffer")) - return len(b), nil -} - -// Close closes the connection. Only the first call to Close will receive the -// close error, subsequent and concurrent calls will return nil. -// This method is thread-safe. -func (c *Conn) Close() error { - c.closeOnce.Do(func() { - c.Call("close") - c.signalClose(nil) - c.releaseHandlers() - }) - return nil -} - -func (c *Conn) signalClose(err error) { - c.closeSignalOnce.Do(func() { - c.firstErr = err - close(c.closeSignal) - }) -} - -func (c *Conn) releaseHandlers() { - c.mut.Lock() - defer c.mut.Unlock() - if c.messageHandler != nil { - c.Call("removeEventListener", "message", *c.messageHandler) - c.messageHandler.Release() - c.messageHandler = nil - } - if c.closeHandler != nil { - c.Call("removeEventListener", "close", *c.closeHandler) - c.closeHandler.Release() - c.closeHandler = nil - } - if c.errorHandler != nil { - c.Call("removeEventListener", "error", *c.errorHandler) - c.errorHandler.Release() - c.errorHandler = nil - } -} - -func (c *Conn) LocalAddr() net.Addr { - return c.localAddr -} - -func getRemoteAddr(val js.Value) net.Addr { - rawURL := val.Get("url").String() - withoutPrefix := strings.TrimPrefix(rawURL, "ws://") - withoutSuffix := strings.TrimSuffix(withoutPrefix, "/") - return NewAddr(withoutSuffix) -} - -func (c *Conn) RemoteAddr() net.Addr { - return c.remoteAddr -} - -// TODO: Return os.ErrNoDeadline. For now we return nil because multiplexers -// don't handle the error correctly. -func (c *Conn) SetDeadline(t time.Time) error { - return nil -} - -func (c *Conn) SetReadDeadline(t time.Time) error { - return nil -} - -func (c *Conn) SetWriteDeadline(t time.Time) error { - return nil -} - -func (c *Conn) setUpHandlers() { - c.mut.Lock() - defer c.mut.Unlock() - if c.messageHandler != nil { - // Message handlers already created. Nothing to do. - return - } - messageHandler := js.FuncOf(func(this js.Value, args []js.Value) interface{} { - arrayBuffer := args[0].Get("data") - data := arrayBufferToBytes(arrayBuffer) - c.currDataMut.Lock() - if _, err := c.currData.Write(data); err != nil { - c.currDataMut.Unlock() - return err - } - c.currDataMut.Unlock() - - // Non-blocking signal - select { - case c.dataSignal <- struct{}{}: - default: - } - - return nil - }) - c.messageHandler = &messageHandler - c.Call("addEventListener", "message", messageHandler) - - closeHandler := js.FuncOf(func(this js.Value, args []js.Value) interface{} { - go func() { - c.signalClose(errorEventToError(args[0])) - c.releaseHandlers() - }() - return nil - }) - c.closeHandler = &closeHandler - c.Call("addEventListener", "close", closeHandler) - - errorHandler := js.FuncOf(func(this js.Value, args []js.Value) interface{} { - // Unfortunately, the "error" event doesn't appear to give us any useful - // information. All we can do is close the connection. - c.Close() - return nil - }) - c.errorHandler = &errorHandler - c.Call("addEventListener", "error", errorHandler) -} - -func (c *Conn) waitForOpen() error { - openSignal := make(chan struct{}) - handler := js.FuncOf(func(this js.Value, args []js.Value) interface{} { - close(openSignal) - return nil - }) - defer c.Call("removeEventListener", "open", handler) - defer handler.Release() - c.Call("addEventListener", "open", handler) - select { - case <-openSignal: - return nil - case <-c.closeSignal: - // c.closeSignal means there was an error when trying to open the - // connection. - return c.firstErr - } -} - -// arrayBufferToBytes converts a JavaScript ArrayBuffer to a slice of bytes. -func arrayBufferToBytes(buffer js.Value) []byte { - view := js.Global().Get("Uint8Array").New(buffer) - dataLen := view.Length() - data := make([]byte, dataLen) - if js.CopyBytesToGo(data, view) != dataLen { - panic("expected to copy all bytes") - } - return data -} - -func errorEventToError(val js.Value) error { - var typ string - if gotType := val.Get("type"); !gotType.Equal(js.Undefined()) { - typ = gotType.String() - } else { - typ = val.Type().String() - } - var reason string - if gotReason := val.Get("reason"); !gotReason.Equal(js.Undefined()) && gotReason.String() != "" { - reason = gotReason.String() - } else { - code := val.Get("code") - if !code.Equal(js.Undefined()) { - switch code := code.Int(); code { - case 1006: - reason = "code 1006: connection unexpectedly closed" - default: - reason = fmt.Sprintf("unexpected code: %d", code) - } - } - } - return fmt.Errorf("JavaScript error: (%s) %s", typ, reason) -} - -func recoveredValueToError(e interface{}) error { - switch e := e.(type) { - case error: - return e - default: - return fmt.Errorf("recovered from unexpected panic: %T %s", e, e) - } -} diff --git a/vendor/github.com/libp2p/go-ws-transport/go.mod b/vendor/github.com/libp2p/go-ws-transport/go.mod deleted file mode 100644 index 9f621c4c36..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/go.mod +++ /dev/null @@ -1,14 +0,0 @@ -module github.com/libp2p/go-ws-transport - -require ( - github.com/gorilla/websocket v1.4.2 - github.com/libp2p/go-conn-security-multistream v0.3.0 - github.com/libp2p/go-libp2p-core v0.14.0 - github.com/libp2p/go-libp2p-mplex v0.5.0 - github.com/libp2p/go-libp2p-testing v0.7.0 - github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 - github.com/multiformats/go-multiaddr v0.4.1 - github.com/multiformats/go-multiaddr-fmt v0.1.0 -) - -go 1.16 diff --git a/vendor/github.com/libp2p/go-ws-transport/go.sum b/vendor/github.com/libp2p/go-ws-transport/go.sum deleted file mode 100644 index 27f9870888..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/go.sum +++ /dev/null @@ -1,265 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/btcsuite/btcd v0.20.1-beta h1:Ik4hyJqN8Jfyv3S4AGBOmyouMsYE3EdYODkMbQjwPGw= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018 h1:6xT9KW8zLC5IlbaIF5Q7JNieBoACT7iW0YTxQHR0in0= -github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018/go.mod h1:rQYf4tfk5sSwFsnDg3qYaBxSjsD9S8+59vW0dKUgme4= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gxed/hashland/keccakpg v0.0.1/go.mod h1:kRzw3HkwxFU1mpmPP8v1WyQzwdGfmKFJ6tItnhQ67kU= -github.com/gxed/hashland/murmur3 v0.0.1/go.mod h1:KjXop02n4/ckmZSnY2+HKcLud/tcmvhST0bie/0lS48= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/ipfs/go-cid v0.0.3/go.mod h1:GHWU/WuQdMPmIosc4Yn1bcCT7dSeX4lBafM7iqUPQvM= -github.com/ipfs/go-cid v0.0.5/go.mod h1:plgt+Y5MnOey4vO4UlUazGqdbEXuFYitED67FexhXog= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/ipfs/go-log/v2 v2.5.0 h1:+MhAooFd9XZNvR0i9FriKW6HB0ql7HNXUuflWtc0dd4= -github.com/ipfs/go-log/v2 v2.5.0/go.mod h1:prSpmC1Gpllc9UYWxDiZDreBYw7zp4Iqp1kOLU9U5UI= -github.com/jbenet/go-cienv v0.1.0/go.mod h1:TqNnHUmJgXau0nCzC7kXWeotg3J9W34CUv5Djy1+FlA= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/go-temp-err-catcher v0.1.0/go.mod h1:0kJRvmDZXNMIiJirNPEYfhpPwbGVtZVWC34vc5WLsDk= -github.com/jbenet/goprocess v0.1.3/go.mod h1:5yspPrukOVuOLORacaBi858NqyClJPQxYZlqdZVfqY4= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kami-zh/go-capturer v0.0.0-20171211120116-e492ea43421d/go.mod h1:P2viExyCEfeWGU259JnaQ34Inuec4R38JCyBx2edgD0= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/libp2p/go-conn-security-multistream v0.3.0 h1:9UCIKlBL1hC9u7nkMXpD1nkc/T53PKMAn3/k9ivBAVc= -github.com/libp2p/go-conn-security-multistream v0.3.0/go.mod h1:EEP47t4fw/bTelVmEzIDqSe69hO/ip52xBEhZMLWAHM= -github.com/libp2p/go-flow-metrics v0.0.3/go.mod h1:HeoSNUrOJVK1jEpDqVEiUOIXqhbnS27omG0uWU5slZs= -github.com/libp2p/go-libp2p-core v0.3.0/go.mod h1:ACp3DmS3/N64c2jDzcV429ukDpicbL6+TrrxANBjPGw= -github.com/libp2p/go-libp2p-core v0.5.0/go.mod h1:49XGI+kc38oGVwqSBhDEwytaAxgZasHhFfQKibzTls0= -github.com/libp2p/go-libp2p-core v0.10.0/go.mod h1:ECdxehoYosLYHgDDFa2N4yE8Y7aQRAMf0sX9mf2sbGg= -github.com/libp2p/go-libp2p-core v0.14.0 h1:0kYSgiK/D7Eo28GTuRXo5YHsWwAisVpFCqCVPUd/vJs= -github.com/libp2p/go-libp2p-core v0.14.0/go.mod h1:tLasfcVdTXnixsLB0QYaT1syJOhsbrhG7q6pGrHtBg8= -github.com/libp2p/go-libp2p-mplex v0.5.0 h1:vt3k4E4HSND9XH4Z8rUpacPJFSAgLOv6HDvG8W9Ks9E= -github.com/libp2p/go-libp2p-mplex v0.5.0/go.mod h1:eLImPJLkj3iG5t5lq68w3Vm5NAQ5BcKwrrb2VmOYb3M= -github.com/libp2p/go-libp2p-pnet v0.2.0 h1:J6htxttBipJujEjz1y0a5+eYoiPcFHhSYHH6na5f0/k= -github.com/libp2p/go-libp2p-pnet v0.2.0/go.mod h1:Qqvq6JH/oMZGwqs3N1Fqhv8NVhrdYcO0BW4wssv21LA= -github.com/libp2p/go-libp2p-testing v0.1.2-0.20200422005655-8775583591d8/go.mod h1:Qy8sAncLKpwXtS2dSnDOP8ktexIAHKu+J+pnZOFZLTc= -github.com/libp2p/go-libp2p-testing v0.5.0/go.mod h1:QBk8fqIL1XNcno/l3/hhaIEn4aLRijpYOR+zVjjlh+A= -github.com/libp2p/go-libp2p-testing v0.7.0 h1:9bfyhNINizxuLrKsenzGaZalXRXIaAEmx1BP/PzF1gM= -github.com/libp2p/go-libp2p-testing v0.7.0/go.mod h1:OLbdn9DbgdMwv00v+tlp1l3oe2Cl+FAjoWIA2pa0X6E= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 h1:ADnLrL7fC4Vy7HPjk9oGof7nDeTqGXuof85Ar6kin9Q= -github.com/libp2p/go-libp2p-transport-upgrader v0.7.0/go.mod h1:GIR2aTRp1J5yjVlkUoFqMkdobfob6RnAwYg/RZPhrzg= -github.com/libp2p/go-maddr-filter v0.1.0/go.mod h1:VzZhTXkMucEGGEOSKddrwGiOv0tUhgnKqNEmIAz/bPU= -github.com/libp2p/go-mplex v0.4.0 h1:Ukkez9/4EOX5rTw4sHefNJp10dksftAA05ZgyjplUbM= -github.com/libp2p/go-mplex v0.4.0/go.mod h1:y26Lx+wNVtMYMaPu300Cbot5LkEZ4tJaNYeHeT9dh6E= -github.com/libp2p/go-msgio v0.0.6 h1:lQ7Uc0kS1wb1EfRxO2Eir/RJoHkHn7t6o+EiwsYIKJA= -github.com/libp2p/go-msgio v0.0.6/go.mod h1:4ecVB6d9f4BDSL5fqvPiC4A3KivjWn+Venn/1ALLMWA= -github.com/libp2p/go-openssl v0.0.4/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.0.0-20190131020904-2d45a736cd16/go.mod h1:2FMWW+8GMoPweT6+pI63m9YE3Lmw4J71hV56Chs1E/U= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/minio/sha256-simd v0.1.1 h1:5QHSlgo3nt5yKOJrC7W8w7X+NFl8cMPZm96iu8kKUJU= -github.com/minio/sha256-simd v0.1.1/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multiaddr v0.2.1/go.mod h1:s/Apk6IyxfvMjDafnhJgJ3/46z7tZ04iMk5wP4QMGGE= -github.com/multiformats/go-multiaddr v0.2.2/go.mod h1:NtfXiOtHvghW9KojvtySjH5y0u0xW5UouOmQQrn6a3Y= -github.com/multiformats/go-multiaddr v0.3.0/go.mod h1:dF9kph9wfJ+3VLAaeBqo9Of8x4fJxp6ggJGteB8HQTI= -github.com/multiformats/go-multiaddr v0.3.1/go.mod h1:uPbspcUPd5AfaP6ql3ujFY+QWzmBD8uLLL4bXW0XfGc= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multiaddr-fmt v0.1.0/go.mod h1:hGtDIW4PU4BqJ50gW2quDuPVjyWNZxToGUh/HwTZYJo= -github.com/multiformats/go-multiaddr-net v0.2.0/go.mod h1:gGdH3UXny6U3cKKYCvpXI5rnK7YaOIEOPVDI9tsJbEA= -github.com/multiformats/go-multibase v0.0.1/go.mod h1:bja2MqRZ3ggyXtZSEDKpl0uO/gviWFaSteVbWT51qgs= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.1/go.mod h1:w/5tugSrLEbWqlcgJabL3oHFKTwfvkofsjW2Qa1ct4U= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.10/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multistream v0.2.1 h1:R5exp4cKvGlePuxg/bn4cnV53K4DxCe+uldxs7QzfrE= -github.com/multiformats/go-multistream v0.2.1/go.mod h1:5GZPQZbkWOLOn3J2y4Y99vVW7vOfsAflxARk3x14o6k= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.2/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/smola/gocompat v0.2.0/go.mod h1:1B0MlxbmoZNo3h8guHp8HztB3BSYR5itql9qtVc0ypY= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 h1:RC6RW7j+1+HkWaX/Yh71Ee5ZHaHYt7ZP4sQgUrm6cDU= -github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572/go.mod h1:w0SWMsp6j9O/dk4/ZpIhL+3CkG8ofA2vuv7k+ltqUMc= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/src-d/envconfig v1.0.0/go.mod h1:Q9YQZ7BKITldTBnoxsE5gOeB5y66RyPXeue/R4aaNBc= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/x-cray/logrus-prefixed-formatter v0.5.2/go.mod h1:2duySbKsL6M18s5GU7VPsoEPHyzalCE06qoARUCeBBE= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723 h1:sHOAIxRGBp443oHZIPB+HsUGaksVCXVQENPxwTfQdH4= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/zap v1.19.1 h1:ue41HOKd1vGURxrmeKIgELGb3jPW9DMUDGtsinblHwI= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 h1:ObdrDkeb4kJdCP557AjRjq69pTHfNouLtWZG7j9rPN8= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190219092855-153ac476189d/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181130052023-1c3d964395ce/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/src-d/go-cli.v0 v0.0.0-20181105080154-d492247bbc0d/go.mod h1:z+K8VcOYVYcSwSjGebuDL6176A1XskgbtNl64NSg+n8= -gopkg.in/src-d/go-log.v1 v1.0.1/go.mod h1:GN34hKP0g305ysm2/hctJ0Y8nWP3zxXXJ8GFabTyABE= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/github.com/libp2p/go-ws-transport/listener.go b/vendor/github.com/libp2p/go-ws-transport/listener.go deleted file mode 100644 index 8931b1f17c..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/listener.go +++ /dev/null @@ -1,65 +0,0 @@ -//go:build !js -// +build !js - -package websocket - -import ( - "fmt" - "net" - "net/http" - - ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr/net" -) - -type listener struct { - net.Listener - - laddr ma.Multiaddr - - closed chan struct{} - incoming chan *Conn -} - -func (l *listener) serve() { - defer close(l.closed) - _ = http.Serve(l.Listener, l) -} - -func (l *listener) ServeHTTP(w http.ResponseWriter, r *http.Request) { - c, err := upgrader.Upgrade(w, r, nil) - if err != nil { - // The upgrader writes a response for us. - return - } - - select { - case l.incoming <- NewConn(c): - case <-l.closed: - c.Close() - } - // The connection has been hijacked, it's safe to return. -} - -func (l *listener) Accept() (manet.Conn, error) { - select { - case c, ok := <-l.incoming: - if !ok { - return nil, fmt.Errorf("listener is closed") - } - - mnc, err := manet.WrapNetConn(c) - if err != nil { - c.Close() - return nil, err - } - - return mnc, nil - case <-l.closed: - return nil, fmt.Errorf("listener is closed") - } -} - -func (l *listener) Multiaddr() ma.Multiaddr { - return l.laddr -} diff --git a/vendor/github.com/libp2p/go-ws-transport/version.json b/vendor/github.com/libp2p/go-ws-transport/version.json deleted file mode 100644 index 42c14d1be6..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/version.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "version": "v0.6.0" -} diff --git a/vendor/github.com/libp2p/go-ws-transport/websocket.go b/vendor/github.com/libp2p/go-ws-transport/websocket.go deleted file mode 100644 index a620904a67..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/websocket.go +++ /dev/null @@ -1,69 +0,0 @@ -// Package websocket implements a websocket based transport for go-libp2p. -package websocket - -import ( - "context" - - "github.com/libp2p/go-libp2p-core/network" - "github.com/libp2p/go-libp2p-core/peer" - "github.com/libp2p/go-libp2p-core/transport" - - ma "github.com/multiformats/go-multiaddr" - mafmt "github.com/multiformats/go-multiaddr-fmt" - manet "github.com/multiformats/go-multiaddr/net" -) - -// WsFmt is multiaddr formatter for WsProtocol -var WsFmt = mafmt.And(mafmt.TCP, mafmt.Base(ma.P_WS)) - -// This is _not_ WsFmt because we want the transport to stick to dialing fully -// resolved addresses. -var dialMatcher = mafmt.And(mafmt.IP, mafmt.Base(ma.P_TCP), mafmt.Base(ma.P_WS)) - -func init() { - manet.RegisterFromNetAddr(ParseWebsocketNetAddr, "websocket") - manet.RegisterToNetAddr(ConvertWebsocketMultiaddrToNetAddr, "ws") -} - -var _ transport.Transport = (*WebsocketTransport)(nil) - -// WebsocketTransport is the actual go-libp2p transport -type WebsocketTransport struct { - upgrader transport.Upgrader - rcmgr network.ResourceManager -} - -func New(u transport.Upgrader, rcmgr network.ResourceManager) *WebsocketTransport { - if rcmgr == nil { - rcmgr = network.NullResourceManager - } - return &WebsocketTransport{ - upgrader: u, - rcmgr: rcmgr, - } -} - -func (t *WebsocketTransport) CanDial(a ma.Multiaddr) bool { - return dialMatcher.Matches(a) -} - -func (t *WebsocketTransport) Protocols() []int { - return []int{ma.ProtocolWithCode(ma.P_WS).Code} -} - -func (t *WebsocketTransport) Proxy() bool { - return false -} - -func (t *WebsocketTransport) Dial(ctx context.Context, raddr ma.Multiaddr, p peer.ID) (transport.CapableConn, error) { - connScope, err := t.rcmgr.OpenConnection(network.DirOutbound, true) - if err != nil { - return nil, err - } - macon, err := t.maDial(ctx, raddr) - if err != nil { - connScope.Done() - return nil, err - } - return t.upgrader.Upgrade(ctx, t, macon, network.DirOutbound, p, connScope) -} diff --git a/vendor/github.com/libp2p/go-ws-transport/websocket_browser.go b/vendor/github.com/libp2p/go-ws-transport/websocket_browser.go deleted file mode 100644 index eef1f981da..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/websocket_browser.go +++ /dev/null @@ -1,39 +0,0 @@ -//go:build js && wasm -// +build js,wasm - -package websocket - -import ( - "context" - "errors" - "syscall/js" - - "github.com/libp2p/go-libp2p-core/transport" - ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr/net" -) - -func (t *WebsocketTransport) maDial(ctx context.Context, raddr ma.Multiaddr) (manet.Conn, error) { - wsurl, err := parseMultiaddr(raddr) - if err != nil { - return nil, err - } - - rawConn := js.Global().Get("WebSocket").New(wsurl) - conn := NewConn(rawConn) - if err := conn.waitForOpen(); err != nil { - conn.Close() - return nil, err - } - mnc, err := manet.WrapNetConn(conn) - if err != nil { - conn.Close() - return nil, err - } - - return mnc, nil -} - -func (t *WebsocketTransport) Listen(a ma.Multiaddr) (transport.Listener, error) { - return nil, errors.New("Listen not implemented on js/wasm") -} diff --git a/vendor/github.com/libp2p/go-ws-transport/websocket_native.go b/vendor/github.com/libp2p/go-ws-transport/websocket_native.go deleted file mode 100644 index b652045e89..0000000000 --- a/vendor/github.com/libp2p/go-ws-transport/websocket_native.go +++ /dev/null @@ -1,98 +0,0 @@ -//go:build !js -// +build !js - -package websocket - -import ( - "context" - "net" - "net/http" - "net/url" - - ws "github.com/gorilla/websocket" - "github.com/libp2p/go-libp2p-core/transport" - ma "github.com/multiformats/go-multiaddr" - manet "github.com/multiformats/go-multiaddr/net" -) - -// Default gorilla upgrader -var upgrader = ws.Upgrader{ - // Allow requests from *all* origins. - CheckOrigin: func(r *http.Request) bool { - return true - }, -} - -func (t *WebsocketTransport) maDial(ctx context.Context, raddr ma.Multiaddr) (manet.Conn, error) { - wsurl, err := parseMultiaddr(raddr) - if err != nil { - return nil, err - } - - wscon, _, err := ws.DefaultDialer.Dial(wsurl, nil) - if err != nil { - return nil, err - } - - mnc, err := manet.WrapNetConn(NewConn(wscon)) - if err != nil { - wscon.Close() - return nil, err - } - return mnc, nil -} - -func (t *WebsocketTransport) maListen(a ma.Multiaddr) (manet.Listener, error) { - lnet, lnaddr, err := manet.DialArgs(a) - if err != nil { - return nil, err - } - - nl, err := net.Listen(lnet, lnaddr) - if err != nil { - return nil, err - } - - u, err := url.Parse("http://" + nl.Addr().String()) - if err != nil { - nl.Close() - return nil, err - } - - malist, err := t.wrapListener(nl, u) - if err != nil { - nl.Close() - return nil, err - } - - go malist.serve() - - return malist, nil -} - -func (t *WebsocketTransport) Listen(a ma.Multiaddr) (transport.Listener, error) { - malist, err := t.maListen(a) - if err != nil { - return nil, err - } - return t.upgrader.UpgradeListener(t, malist), nil -} - -func (t *WebsocketTransport) wrapListener(l net.Listener, origin *url.URL) (*listener, error) { - laddr, err := manet.FromNetAddr(l.Addr()) - if err != nil { - return nil, err - } - wsma, err := ma.NewMultiaddr("/ws") - if err != nil { - return nil, err - } - laddr = laddr.Encapsulate(wsma) - - return &listener{ - laddr: laddr, - Listener: l, - incoming: make(chan *Conn), - closed: make(chan struct{}), - }, nil -} diff --git a/vendor/github.com/libp2p/go-yamux/v3/go.mod b/vendor/github.com/libp2p/go-yamux/v3/go.mod deleted file mode 100644 index c5b5d24604..0000000000 --- a/vendor/github.com/libp2p/go-yamux/v3/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/libp2p/go-yamux/v3 - -go 1.16 - -require ( - github.com/libp2p/go-buffer-pool v0.0.2 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/libp2p/go-yamux/v3/go.sum b/vendor/github.com/libp2p/go-yamux/v3/go.sum deleted file mode 100644 index 1ae1330f27..0000000000 --- a/vendor/github.com/libp2p/go-yamux/v3/go.sum +++ /dev/null @@ -1,13 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= -github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/libp2p/go-yamux/v3/session.go b/vendor/github.com/libp2p/go-yamux/v3/session.go index e6017d4c8e..7b0c03ca83 100644 --- a/vendor/github.com/libp2p/go-yamux/v3/session.go +++ b/vendor/github.com/libp2p/go-yamux/v3/session.go @@ -10,6 +10,7 @@ import ( "math" "net" "os" + "runtime/debug" "strings" "sync" "sync/atomic" @@ -293,9 +294,14 @@ func (s *Session) Close() error { s.streamLock.Lock() defer s.streamLock.Unlock() + var memory int for _, stream := range s.streams { + memory += stream.memory stream.forceClose() } + if memory > 0 { + s.memoryManager.ReleaseMemory(memory) + } return nil } @@ -483,7 +489,14 @@ func (s *Session) send() { } } -func (s *Session) sendLoop() error { +func (s *Session) sendLoop() (err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "caught panic: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic in yamux send loop: %s", rerr) + } + }() + defer close(s.sendDoneCh) // Extend the write deadline if we've passed the halfway point. This can @@ -615,7 +628,13 @@ var ( ) // recvLoop continues to receive data until a fatal error is encountered -func (s *Session) recvLoop() error { +func (s *Session) recvLoop() (err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "caught panic: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic in yamux receive loop: %s", rerr) + } + }() defer close(s.recvDoneCh) var hdr header for { @@ -776,14 +795,14 @@ func (s *Session) incomingStream(id uint32) error { if sendErr := s.sendMsg(s.goAway(goAwayProtoErr), nil, nil); sendErr != nil { s.logger.Printf("[WARN] yamux: failed to send go away: %v", sendErr) } - s.memoryManager.ReleaseMemory(initialStreamWindow) + s.memoryManager.ReleaseMemory(stream.memory) return ErrDuplicateStream } if s.numIncomingStreams >= s.config.MaxIncomingStreams { // too many active streams at the same time s.logger.Printf("[WARN] yamux: MaxIncomingStreams exceeded, forcing stream reset") - s.memoryManager.ReleaseMemory(initialStreamWindow) + s.memoryManager.ReleaseMemory(stream.memory) hdr := encode(typeWindowUpdate, flagRST, id, 0) return s.sendMsg(hdr, nil, nil) } @@ -830,7 +849,7 @@ func (s *Session) deleteStream(id uint32) { if !ok { return } - s.memoryManager.ReleaseMemory(int(str.recvWindow)) + s.memoryManager.ReleaseMemory(str.memory) delete(s.streams, id) } diff --git a/vendor/github.com/libp2p/go-yamux/v3/stream.go b/vendor/github.com/libp2p/go-yamux/v3/stream.go index 80f08966f1..9175268c3b 100644 --- a/vendor/github.com/libp2p/go-yamux/v3/stream.go +++ b/vendor/github.com/libp2p/go-yamux/v3/stream.go @@ -31,6 +31,8 @@ const ( type Stream struct { sendWindow uint32 + memory int + id uint32 session *Session @@ -49,14 +51,15 @@ type Stream struct { readDeadline, writeDeadline pipeDeadline } -// newStream is used to construct a new stream within -// a given session for an ID +// newStream is used to construct a new stream within a given session for an ID. +// It assumes that a memory allocation has been obtained for the initialWindow. func newStream(session *Session, id uint32, state streamState, initialWindow uint32) *Stream { s := &Stream{ id: id, session: session, state: state, sendWindow: initialStreamWindow, + memory: int(initialWindow), readDeadline: makePipeDeadline(), writeDeadline: makePipeDeadline(), // Initialize the recvBuf with initialStreamWindow, not config.InitialStreamWindowSize. @@ -228,6 +231,7 @@ func (s *Stream) sendWindowUpdate() error { grow := recvWindow - s.recvWindow if err := s.session.memoryManager.ReserveMemory(int(grow), 128); err == nil { s.recvWindow = recvWindow + s.memory += int(grow) _, delta = s.recvBuf.GrowTo(s.recvWindow, true) } } diff --git a/vendor/github.com/libp2p/go-yamux/v3/version.json b/vendor/github.com/libp2p/go-yamux/v3/version.json index 4217776422..d7a882dd46 100644 --- a/vendor/github.com/libp2p/go-yamux/v3/version.json +++ b/vendor/github.com/libp2p/go-yamux/v3/version.json @@ -1,3 +1,3 @@ { - "version": "v3.0.2" + "version": "v3.1.1" } diff --git a/vendor/github.com/lucas-clemente/quic-go/.golangci.yml b/vendor/github.com/lucas-clemente/quic-go/.golangci.yml index 05ddb79ac9..2589c05389 100644 --- a/vendor/github.com/lucas-clemente/quic-go/.golangci.yml +++ b/vendor/github.com/lucas-clemente/quic-go/.golangci.yml @@ -28,7 +28,6 @@ linters: - ineffassign - misspell - prealloc - - scopelint - staticcheck - stylecheck - structcheck diff --git a/vendor/github.com/lucas-clemente/quic-go/README.md b/vendor/github.com/lucas-clemente/quic-go/README.md index a5995879ca..b28062d538 100644 --- a/vendor/github.com/lucas-clemente/quic-go/README.md +++ b/vendor/github.com/lucas-clemente/quic-go/README.md @@ -3,9 +3,6 @@ [![PkgGoDev](https://pkg.go.dev/badge/github.com/lucas-clemente/quic-go)](https://pkg.go.dev/github.com/lucas-clemente/quic-go) -[![Travis Build Status](https://img.shields.io/travis/lucas-clemente/quic-go/master.svg?style=flat-square&label=Travis+build)](https://travis-ci.org/lucas-clemente/quic-go) -[![CircleCI Build Status](https://img.shields.io/circleci/project/github/lucas-clemente/quic-go.svg?style=flat-square&label=CircleCI+build)](https://circleci.com/gh/lucas-clemente/quic-go) -[![Windows Build Status](https://img.shields.io/appveyor/ci/lucas-clemente/quic-go/master.svg?style=flat-square&label=windows+build)](https://ci.appveyor.com/project/lucas-clemente/quic-go/branch/master) [![Code Coverage](https://img.shields.io/codecov/c/github/lucas-clemente/quic-go/master.svg?style=flat-square)](https://codecov.io/gh/lucas-clemente/quic-go/) quic-go is an implementation of the [QUIC protocol, RFC 9000](https://datatracker.ietf.org/doc/html/rfc9000) protocol in Go. @@ -13,7 +10,7 @@ In addition to RFC 9000, it currently implements the [IETF QUIC draft-29](https: ## Guides -*We currently support Go 1.16.x and Go 1.17.x.* +*We currently support Go 1.16.x, Go 1.17.x, and Go 1.18.x.* Running tests: @@ -51,11 +48,12 @@ http.Client{ | [algernon](https://github.com/xyproto/algernon) | Small self-contained pure-Go web server with Lua, Markdown, HTTP/2, QUIC, Redis and PostgreSQL support | ![GitHub Repo stars](https://img.shields.io/github/stars/xyproto/algernon?style=flat-square) | | [caddy](https://github.com/caddyserver/caddy/) | Fast, multi-platform web server with automatic HTTPS | ![GitHub Repo stars](https://img.shields.io/github/stars/caddyserver/caddy?style=flat-square) | | [go-ipfs](https://github.com/ipfs/go-ipfs) | IPFS implementation in go | ![GitHub Repo stars](https://img.shields.io/github/stars/ipfs/go-ipfs?style=flat-square) | -| [nextdns](https://github.com/nextdns/nextdns) | NextDNS CLI client (DoH Proxy) | ![GitHub Repo stars](https://img.shields.io/github/stars/nextdns/nextdns?style=flat-square) | | [syncthing](https://github.com/syncthing/syncthing/) | Open Source Continuous File Synchronization | ![GitHub Repo stars](https://img.shields.io/github/stars/syncthing/syncthing?style=flat-square) | | [traefik](https://github.com/traefik/traefik) | The Cloud Native Application Proxy | ![GitHub Repo stars](https://img.shields.io/github/stars/traefik/traefik?style=flat-square) | | [v2ray-core](https://github.com/v2fly/v2ray-core) | A platform for building proxies to bypass network restrictions | ![GitHub Repo stars](https://img.shields.io/github/stars/v2fly/v2ray-core?style=flat-square) | -| [cloudflared](https://github.com/cloudflare/cloudflared) | A tunneling daemon that proxies traffic from the Cloudflare network to your origins | ![GitHub Repo stars](https://img.shields.io/github/stars/cloudflare/cloudflared?style=flat-square) | +| [cloudflared](https://github.com/cloudflare/cloudflared) | A tunneling daemon that proxies traffic from the Cloudflare network to your origins | ![GitHub Repo stars](https://img.shields.io/github/stars/cloudflare/cloudflared?style=flat-square) | +| [OONI Probe](https://github.com/ooni/probe-cli) | The Open Observatory of Network Interference (OONI) aims to empower decentralized efforts in documenting Internet censorship around the world. | ![GitHub Repo stars](https://img.shields.io/github/stars/ooni/probe-cli?style=flat-square) | + ## Contributing diff --git a/vendor/github.com/lucas-clemente/quic-go/client.go b/vendor/github.com/lucas-clemente/quic-go/client.go index 9dbe4ac5c3..c29a1c2955 100644 --- a/vendor/github.com/lucas-clemente/quic-go/client.go +++ b/vendor/github.com/lucas-clemente/quic-go/client.go @@ -14,7 +14,7 @@ import ( ) type client struct { - conn sendConn + sconn sendConn // If the client is created with DialAddr, we create a packet conn. // If it is started with Dial, we take a packet conn as a parameter. createdPacketConn bool @@ -35,7 +35,7 @@ type client struct { handshakeChan chan struct{} - session quicSession + conn quicConn tracer logging.ConnectionTracer tracingID uint64 @@ -49,26 +49,26 @@ var ( ) // DialAddr establishes a new QUIC connection to a server. -// It uses a new UDP connection and closes this connection when the QUIC session is closed. +// It uses a new UDP connection and closes this connection when the QUIC connection is closed. // The hostname for SNI is taken from the given address. // The tls.Config.CipherSuites allows setting of TLS 1.3 cipher suites. func DialAddr( addr string, tlsConf *tls.Config, config *Config, -) (Session, error) { +) (Connection, error) { return DialAddrContext(context.Background(), addr, tlsConf, config) } // DialAddrEarly establishes a new 0-RTT QUIC connection to a server. -// It uses a new UDP connection and closes this connection when the QUIC session is closed. +// It uses a new UDP connection and closes this connection when the QUIC connection is closed. // The hostname for SNI is taken from the given address. // The tls.Config.CipherSuites allows setting of TLS 1.3 cipher suites. func DialAddrEarly( addr string, tlsConf *tls.Config, config *Config, -) (EarlySession, error) { +) (EarlyConnection, error) { return DialAddrEarlyContext(context.Background(), addr, tlsConf, config) } @@ -79,13 +79,13 @@ func DialAddrEarlyContext( addr string, tlsConf *tls.Config, config *Config, -) (EarlySession, error) { - sess, err := dialAddrContext(ctx, addr, tlsConf, config, true) +) (EarlyConnection, error) { + conn, err := dialAddrContext(ctx, addr, tlsConf, config, true) if err != nil { return nil, err } - utils.Logger.WithPrefix(utils.DefaultLogger, "client").Debugf("Returning early session") - return sess, nil + utils.Logger.WithPrefix(utils.DefaultLogger, "client").Debugf("Returning early connection") + return conn, nil } // DialAddrContext establishes a new QUIC connection to a server using the provided context. @@ -95,7 +95,7 @@ func DialAddrContext( addr string, tlsConf *tls.Config, config *Config, -) (Session, error) { +) (Connection, error) { return dialAddrContext(ctx, addr, tlsConf, config, false) } @@ -105,7 +105,7 @@ func dialAddrContext( tlsConf *tls.Config, config *Config, use0RTT bool, -) (quicSession, error) { +) (quicConn, error) { udpAddr, err := net.ResolveUDPAddr("udp", addr) if err != nil { return nil, err @@ -131,7 +131,7 @@ func Dial( host string, tlsConf *tls.Config, config *Config, -) (Session, error) { +) (Connection, error) { return dialContext(context.Background(), pconn, remoteAddr, host, tlsConf, config, false, false) } @@ -146,7 +146,7 @@ func DialEarly( host string, tlsConf *tls.Config, config *Config, -) (EarlySession, error) { +) (EarlyConnection, error) { return DialEarlyContext(context.Background(), pconn, remoteAddr, host, tlsConf, config) } @@ -159,7 +159,7 @@ func DialEarlyContext( host string, tlsConf *tls.Config, config *Config, -) (EarlySession, error) { +) (EarlyConnection, error) { return dialContext(ctx, pconn, remoteAddr, host, tlsConf, config, true, false) } @@ -172,7 +172,7 @@ func DialContext( host string, tlsConf *tls.Config, config *Config, -) (Session, error) { +) (Connection, error) { return dialContext(ctx, pconn, remoteAddr, host, tlsConf, config, false, false) } @@ -185,7 +185,7 @@ func dialContext( config *Config, use0RTT bool, createdPacketConn bool, -) (quicSession, error) { +) (quicConn, error) { if tlsConf == nil { return nil, errors.New("quic: tls.Config not set") } @@ -203,21 +203,21 @@ func dialContext( } c.packetHandlers = packetHandlers - c.tracingID = nextSessionTracingID() + c.tracingID = nextConnTracingID() if c.config.Tracer != nil { c.tracer = c.config.Tracer.TracerForConnection( - context.WithValue(ctx, SessionTracingKey, c.tracingID), + context.WithValue(ctx, ConnectionTracingKey, c.tracingID), protocol.PerspectiveClient, c.destConnID, ) } if c.tracer != nil { - c.tracer.StartedConnection(c.conn.LocalAddr(), c.conn.RemoteAddr(), c.srcConnID, c.destConnID) + c.tracer.StartedConnection(c.sconn.LocalAddr(), c.sconn.RemoteAddr(), c.srcConnID, c.destConnID) } if err := c.dial(ctx); err != nil { return nil, err } - return c.session, nil + return c.conn, nil } func newClient( @@ -265,7 +265,7 @@ func newClient( c := &client{ srcConnID: srcConnID, destConnID: destConnID, - conn: newSendPconn(pconn, remoteAddr), + sconn: newSendPconn(pconn, remoteAddr), createdPacketConn: createdPacketConn, use0RTT: use0RTT, tlsConf: tlsConf, @@ -278,10 +278,10 @@ func newClient( } func (c *client) dial(ctx context.Context) error { - c.logger.Infof("Starting new connection to %s (%s -> %s), source connection ID %s, destination connection ID %s, version %s", c.tlsConf.ServerName, c.conn.LocalAddr(), c.conn.RemoteAddr(), c.srcConnID, c.destConnID, c.version) + c.logger.Infof("Starting new connection to %s (%s -> %s), source connection ID %s, destination connection ID %s, version %s", c.tlsConf.ServerName, c.sconn.LocalAddr(), c.sconn.RemoteAddr(), c.srcConnID, c.destConnID, c.version) - c.session = newClientSession( - c.conn, + c.conn = newClientConnection( + c.sconn, c.packetHandlers, c.destConnID, c.srcConnID, @@ -295,11 +295,11 @@ func (c *client) dial(ctx context.Context) error { c.logger, c.version, ) - c.packetHandlers.Add(c.srcConnID, c.session) + c.packetHandlers.Add(c.srcConnID, c.conn) errorChan := make(chan error, 1) go func() { - err := c.session.run() // returns as soon as the session is closed + err := c.conn.run() // returns as soon as the connection is closed if e := (&errCloseForRecreating{}); !errors.As(err, &e) && c.createdPacketConn { c.packetHandlers.Destroy() @@ -308,15 +308,15 @@ func (c *client) dial(ctx context.Context) error { }() // only set when we're using 0-RTT - // Otherwise, earlySessionChan will be nil. Receiving from a nil chan blocks forever. - var earlySessionChan <-chan struct{} + // Otherwise, earlyConnChan will be nil. Receiving from a nil chan blocks forever. + var earlyConnChan <-chan struct{} if c.use0RTT { - earlySessionChan = c.session.earlySessionReady() + earlyConnChan = c.conn.earlyConnReady() } select { case <-ctx.Done(): - c.session.shutdown() + c.conn.shutdown() return ctx.Err() case err := <-errorChan: var recreateErr *errCloseForRecreating @@ -327,10 +327,10 @@ func (c *client) dial(ctx context.Context) error { return c.dial(ctx) } return err - case <-earlySessionChan: + case <-earlyConnChan: // ready to send 0-RTT data return nil - case <-c.session.HandshakeComplete().Done(): + case <-c.conn.HandshakeComplete().Done(): // handshake successfully completed return nil } diff --git a/vendor/github.com/lucas-clemente/quic-go/closed_session.go b/vendor/github.com/lucas-clemente/quic-go/closed_conn.go similarity index 51% rename from vendor/github.com/lucas-clemente/quic-go/closed_session.go rename to vendor/github.com/lucas-clemente/quic-go/closed_conn.go index 3127902024..35c2d7390a 100644 --- a/vendor/github.com/lucas-clemente/quic-go/closed_session.go +++ b/vendor/github.com/lucas-clemente/quic-go/closed_conn.go @@ -7,15 +7,15 @@ import ( "github.com/lucas-clemente/quic-go/internal/utils" ) -// A closedLocalSession is a session that we closed locally. -// When receiving packets for such a session, we need to retransmit the packet containing the CONNECTION_CLOSE frame, +// A closedLocalConn is a connection that we closed locally. +// When receiving packets for such a connection, we need to retransmit the packet containing the CONNECTION_CLOSE frame, // with an exponential backoff. -type closedLocalSession struct { +type closedLocalConn struct { conn sendConn connClosePacket []byte closeOnce sync.Once - closeChan chan struct{} // is closed when the session is closed or destroyed + closeChan chan struct{} // is closed when the connection is closed or destroyed receivedPackets chan *receivedPacket counter uint64 // number of packets received @@ -25,16 +25,16 @@ type closedLocalSession struct { logger utils.Logger } -var _ packetHandler = &closedLocalSession{} +var _ packetHandler = &closedLocalConn{} -// newClosedLocalSession creates a new closedLocalSession and runs it. -func newClosedLocalSession( +// newClosedLocalConn creates a new closedLocalConn and runs it. +func newClosedLocalConn( conn sendConn, connClosePacket []byte, perspective protocol.Perspective, logger utils.Logger, ) packetHandler { - s := &closedLocalSession{ + s := &closedLocalConn{ conn: conn, connClosePacket: connClosePacket, perspective: perspective, @@ -46,7 +46,7 @@ func newClosedLocalSession( return s } -func (s *closedLocalSession) run() { +func (s *closedLocalConn) run() { for { select { case p := <-s.receivedPackets: @@ -57,14 +57,14 @@ func (s *closedLocalSession) run() { } } -func (s *closedLocalSession) handlePacket(p *receivedPacket) { +func (s *closedLocalConn) handlePacket(p *receivedPacket) { select { case s.receivedPackets <- p: default: } } -func (s *closedLocalSession) handlePacketImpl(_ *receivedPacket) { +func (s *closedLocalConn) handlePacketImpl(_ *receivedPacket) { s.counter++ // exponential backoff // only send a CONNECTION_CLOSE for the 1st, 2nd, 4th, 8th, 16th, ... packet arriving @@ -79,34 +79,34 @@ func (s *closedLocalSession) handlePacketImpl(_ *receivedPacket) { } } -func (s *closedLocalSession) shutdown() { +func (s *closedLocalConn) shutdown() { s.destroy(nil) } -func (s *closedLocalSession) destroy(error) { +func (s *closedLocalConn) destroy(error) { s.closeOnce.Do(func() { close(s.closeChan) }) } -func (s *closedLocalSession) getPerspective() protocol.Perspective { +func (s *closedLocalConn) getPerspective() protocol.Perspective { return s.perspective } -// A closedRemoteSession is a session that was closed remotely. -// For such a session, we might receive reordered packets that were sent before the CONNECTION_CLOSE. +// A closedRemoteConn is a connection that was closed remotely. +// For such a connection, we might receive reordered packets that were sent before the CONNECTION_CLOSE. // We can just ignore those packets. -type closedRemoteSession struct { +type closedRemoteConn struct { perspective protocol.Perspective } -var _ packetHandler = &closedRemoteSession{} +var _ packetHandler = &closedRemoteConn{} -func newClosedRemoteSession(pers protocol.Perspective) packetHandler { - return &closedRemoteSession{perspective: pers} +func newClosedRemoteConn(pers protocol.Perspective) packetHandler { + return &closedRemoteConn{perspective: pers} } -func (s *closedRemoteSession) handlePacket(*receivedPacket) {} -func (s *closedRemoteSession) shutdown() {} -func (s *closedRemoteSession) destroy(error) {} -func (s *closedRemoteSession) getPerspective() protocol.Perspective { return s.perspective } +func (s *closedRemoteConn) handlePacket(*receivedPacket) {} +func (s *closedRemoteConn) shutdown() {} +func (s *closedRemoteConn) destroy(error) {} +func (s *closedRemoteConn) getPerspective() protocol.Perspective { return s.perspective } diff --git a/vendor/github.com/lucas-clemente/quic-go/session.go b/vendor/github.com/lucas-clemente/quic-go/connection.go similarity index 87% rename from vendor/github.com/lucas-clemente/quic-go/session.go rename to vendor/github.com/lucas-clemente/quic-go/connection.go index 2568acfa47..47f4ca99f0 100644 --- a/vendor/github.com/lucas-clemente/quic-go/session.go +++ b/vendor/github.com/lucas-clemente/quic-go/connection.go @@ -90,7 +90,7 @@ func (p *receivedPacket) Clone() *receivedPacket { } } -type sessionRunner interface { +type connRunner interface { Add(protocol.ConnectionID, packetHandler) bool GetStatelessResetToken(protocol.ConnectionID) protocol.StatelessResetToken Retire(protocol.ConnectionID) @@ -124,18 +124,14 @@ type errCloseForRecreating struct { } func (e *errCloseForRecreating) Error() string { - return "closing session in order to recreate it" + return "closing connection in order to recreate it" } -var sessionTracingID uint64 // to be accessed atomically -func nextSessionTracingID() uint64 { return atomic.AddUint64(&sessionTracingID, 1) } +var connTracingID uint64 // to be accessed atomically +func nextConnTracingID() uint64 { return atomic.AddUint64(&connTracingID, 1) } -func pathMTUDiscoveryEnabled(config *Config) bool { - return !disablePathMTUDiscovery && !config.DisablePathMTUDiscovery -} - -// A Session is a QUIC session -type session struct { +// A Connection is a QUIC connection +type connection struct { // Destination connection ID used during the handshake. // Used to check source connection ID on incoming packets. handshakeDestConnID protocol.ConnectionID @@ -192,7 +188,7 @@ type session struct { undecryptablePacketsToProcess []*receivedPacket clientHelloWritten <-chan *wire.TransportParameters - earlySessionReadyChan chan struct{} + earlyConnReadyChan chan struct{} handshakeCompleteChan chan struct{} // is closed when the handshake completes handshakeComplete bool handshakeConfirmed bool @@ -201,8 +197,8 @@ type session struct { versionNegotiated bool receivedFirstPacket bool - idleTimeout time.Duration - sessionCreationTime time.Time + idleTimeout time.Duration + creationTime time.Time // The idle timeout is set based on the max of the time we received the last packet... lastPacketReceivedTime time.Time // ... and the time we sent a new ack-eliciting packet after receiving a packet. @@ -226,15 +222,15 @@ type session struct { } var ( - _ Session = &session{} - _ EarlySession = &session{} - _ streamSender = &session{} - deadlineSendImmediately = time.Time{}.Add(42 * time.Millisecond) // any value > time.Time{} and before time.Now() is fine + _ Connection = &connection{} + _ EarlyConnection = &connection{} + _ streamSender = &connection{} + deadlineSendImmediately = time.Time{}.Add(42 * time.Millisecond) // any value > time.Time{} and before time.Now() is fine ) -var newSession = func( +var newConnection = func( conn sendConn, - runner sessionRunner, + runner connRunner, origDestConnID protocol.ConnectionID, retrySrcConnID *protocol.ConnectionID, clientDestConnID protocol.ConnectionID, @@ -249,8 +245,8 @@ var newSession = func( tracingID uint64, logger utils.Logger, v protocol.VersionNumber, -) quicSession { - s := &session{ +) quicConn { + s := &connection{ conn: conn, config: conf, handshakeDestConnID: destConnID, @@ -286,7 +282,7 @@ var newSession = func( s.version, ) s.preSetup() - s.ctx, s.ctxCancel = context.WithCancel(context.WithValue(context.Background(), SessionTracingKey, tracingID)) + s.ctx, s.ctxCancel = context.WithCancel(context.WithValue(context.Background(), ConnectionTracingKey, tracingID)) s.sentPacketHandler, s.receivedPacketHandler = ackhandler.NewAckHandler( 0, getMaxPacketSize(s.conn.RemoteAddr()), @@ -366,9 +362,9 @@ var newSession = func( } // declare this as a variable, such that we can it mock it in the tests -var newClientSession = func( +var newClientConnection = func( conn sendConn, - runner sessionRunner, + runner connRunner, destConnID protocol.ConnectionID, srcConnID protocol.ConnectionID, conf *Config, @@ -380,8 +376,8 @@ var newClientSession = func( tracingID uint64, logger utils.Logger, v protocol.VersionNumber, -) quicSession { - s := &session{ +) quicConn { + s := &connection{ conn: conn, config: conf, origDestConnID: destConnID, @@ -413,7 +409,7 @@ var newClientSession = func( s.version, ) s.preSetup() - s.ctx, s.ctxCancel = context.WithCancel(context.WithValue(context.Background(), SessionTracingKey, tracingID)) + s.ctx, s.ctxCancel = context.WithCancel(context.WithValue(context.Background(), ConnectionTracingKey, tracingID)) s.sentPacketHandler, s.receivedPacketHandler = ackhandler.NewAckHandler( initialPacketNumber, getMaxPacketSize(s.conn.RemoteAddr()), @@ -497,7 +493,7 @@ var newClientSession = func( return s } -func (s *session) preSetup() { +func (s *connection) preSetup() { s.sendQueue = newSendQueue(s.conn) s.retransmissionQueue = newRetransmissionQueue(s.version) s.frameParser = wire.NewFrameParser(s.config.EnableDatagrams, s.version) @@ -515,7 +511,7 @@ func (s *session) preSetup() { s.rttStats, s.logger, ) - s.earlySessionReadyChan = make(chan struct{}) + s.earlyConnReadyChan = make(chan struct{}) s.streamsMap = newStreamsMap( s, s.newFlowController, @@ -525,14 +521,14 @@ func (s *session) preSetup() { s.version, ) s.framer = newFramer(s.streamsMap, s.version) - s.receivedPackets = make(chan *receivedPacket, protocol.MaxSessionUnprocessedPackets) + s.receivedPackets = make(chan *receivedPacket, protocol.MaxConnUnprocessedPackets) s.closeChan = make(chan closeError, 1) s.sendingScheduled = make(chan struct{}, 1) s.handshakeCtx, s.handshakeCtxCancel = context.WithCancel(context.Background()) now := time.Now() s.lastPacketReceivedTime = now - s.sessionCreationTime = now + s.creationTime = now s.windowUpdateQueue = newWindowUpdateQueue(s.streamsMap, s.connFlowController, s.framer.QueueControlFrame) if s.config.EnableDatagrams { @@ -540,8 +536,8 @@ func (s *session) preSetup() { } } -// run the session main loop -func (s *session) run() error { +// run the connection main loop +func (s *connection) run() error { defer s.ctxCancel() s.timer = utils.NewTimer() @@ -559,7 +555,7 @@ func (s *session) run() error { s.scheduleSending() if zeroRTTParams != nil { s.restoreTransportParameters(zeroRTTParams) - close(s.earlySessionReadyChan) + close(s.earlyConnReadyChan) } case closeErr := <-s.closeChan: // put the close error back into the channel, so that the run loop can receive it @@ -593,7 +589,7 @@ runLoop: if processed := s.handlePacketImpl(p); processed { processedUndecryptablePacket = true } - // Don't set timers and send packets if the packet made us close the session. + // Don't set timers and send packets if the packet made us close the connection. select { case closeErr = <-s.closeChan: break runLoop @@ -616,7 +612,7 @@ runLoop: case <-sendQueueAvailable: case firstPacket := <-s.receivedPackets: wasProcessed := s.handlePacketImpl(firstPacket) - // Don't set timers and send packets if the packet made us close the session. + // Don't set timers and send packets if the packet made us close the connection. select { case closeErr = <-s.closeChan: break runLoop @@ -665,11 +661,11 @@ runLoop: } if keepAliveTime := s.nextKeepAliveTime(); !keepAliveTime.IsZero() && !now.Before(keepAliveTime) { - // send a PING frame since there is no activity in the session + // send a PING frame since there is no activity in the connection s.logger.Debugf("Sending a keep-alive PING to keep the connection alive.") s.framer.QueueControlFrame(&wire.PingFrame{}) s.keepAlivePingSent = true - } else if !s.handshakeComplete && now.Sub(s.sessionCreationTime) >= s.config.handshakeTimeout() { + } else if !s.handshakeComplete && now.Sub(s.creationTime) >= s.config.handshakeTimeout() { s.destroyImpl(qerr.ErrHandshakeTimeout) continue } else { @@ -708,24 +704,24 @@ runLoop: return closeErr.err } -// blocks until the early session can be used -func (s *session) earlySessionReady() <-chan struct{} { - return s.earlySessionReadyChan +// blocks until the early connection can be used +func (s *connection) earlyConnReady() <-chan struct{} { + return s.earlyConnReadyChan } -func (s *session) HandshakeComplete() context.Context { +func (s *connection) HandshakeComplete() context.Context { return s.handshakeCtx } -func (s *session) Context() context.Context { +func (s *connection) Context() context.Context { return s.ctx } -func (s *session) supportsDatagrams() bool { +func (s *connection) supportsDatagrams() bool { return s.peerParams.MaxDatagramFrameSize != protocol.InvalidByteCount } -func (s *session) ConnectionState() ConnectionState { +func (s *connection) ConnectionState() ConnectionState { return ConnectionState{ TLS: s.cryptoStreamHandler.ConnectionState(), SupportsDatagrams: s.supportsDatagrams(), @@ -734,18 +730,18 @@ func (s *session) ConnectionState() ConnectionState { // Time when the next keep-alive packet should be sent. // It returns a zero time if no keep-alive should be sent. -func (s *session) nextKeepAliveTime() time.Time { +func (s *connection) nextKeepAliveTime() time.Time { if !s.config.KeepAlive || s.keepAlivePingSent || !s.firstAckElicitingPacketAfterIdleSentTime.IsZero() { return time.Time{} } return s.lastPacketReceivedTime.Add(s.keepAliveInterval) } -func (s *session) maybeResetTimer() { +func (s *connection) maybeResetTimer() { var deadline time.Time if !s.handshakeComplete { deadline = utils.MinTime( - s.sessionCreationTime.Add(s.config.handshakeTimeout()), + s.creationTime.Add(s.config.handshakeTimeout()), s.idleTimeoutStartTime().Add(s.config.HandshakeIdleTimeout), ) } else { @@ -755,11 +751,6 @@ func (s *session) maybeResetTimer() { deadline = s.idleTimeoutStartTime().Add(s.idleTimeout) } } - if s.handshakeConfirmed && pathMTUDiscoveryEnabled(s.config) { - if probeTime := s.mtuDiscoverer.NextProbeTime(); !probeTime.IsZero() { - deadline = utils.MinTime(deadline, probeTime) - } - } if ackAlarm := s.receivedPacketHandler.GetAlarmTimeout(); !ackAlarm.IsZero() { deadline = utils.MinTime(deadline, ackAlarm) @@ -774,11 +765,11 @@ func (s *session) maybeResetTimer() { s.timer.Reset(deadline) } -func (s *session) idleTimeoutStartTime() time.Time { +func (s *connection) idleTimeoutStartTime() time.Time { return utils.MaxTime(s.lastPacketReceivedTime, s.firstAckElicitingPacketAfterIdleSentTime) } -func (s *session) handleHandshakeComplete() { +func (s *connection) handleHandshakeComplete() { s.handshakeComplete = true s.handshakeCompleteChan = nil // prevent this case from ever being selected again defer s.handshakeCtxCancel() @@ -814,12 +805,12 @@ func (s *session) handleHandshakeComplete() { s.queueControlFrame(&wire.HandshakeDoneFrame{}) } -func (s *session) handleHandshakeConfirmed() { +func (s *connection) handleHandshakeConfirmed() { s.handshakeConfirmed = true s.sentPacketHandler.SetHandshakeConfirmed() s.cryptoStreamHandler.SetHandshakeConfirmed() - if pathMTUDiscoveryEnabled(s.config) { + if !s.config.DisablePathMTUDiscovery { maxPacketSize := s.peerParams.MaxUDPPayloadSize if maxPacketSize == 0 { maxPacketSize = protocol.MaxByteCount @@ -837,7 +828,7 @@ func (s *session) handleHandshakeConfirmed() { } } -func (s *session) handlePacketImpl(rp *receivedPacket) bool { +func (s *connection) handlePacketImpl(rp *receivedPacket) bool { s.sentPacketHandler.ReceivedBytes(rp.Size()) if wire.IsVersionNegotiationPacket(rp.data) { @@ -905,7 +896,7 @@ func (s *session) handlePacketImpl(rp *receivedPacket) bool { return processed } -func (s *session) handleSinglePacket(p *receivedPacket, hdr *wire.Header) bool /* was the packet successfully processed */ { +func (s *connection) handleSinglePacket(p *receivedPacket, hdr *wire.Header) bool /* was the packet successfully processed */ { var wasQueued bool defer func() { @@ -997,7 +988,7 @@ func (s *session) handleSinglePacket(p *receivedPacket, hdr *wire.Header) bool / return true } -func (s *session) handleRetryPacket(hdr *wire.Header, data []byte) bool /* was this a valid Retry */ { +func (s *connection) handleRetryPacket(hdr *wire.Header, data []byte) bool /* was this a valid Retry */ { if s.perspective == protocol.PerspectiveServer { if s.tracer != nil { s.tracer.DroppedPacket(logging.PacketTypeRetry, protocol.ByteCount(len(data)), logging.PacketDropUnexpectedPacket) @@ -1059,7 +1050,7 @@ func (s *session) handleRetryPacket(hdr *wire.Header, data []byte) bool /* was t return true } -func (s *session) handleVersionNegotiationPacket(p *receivedPacket) { +func (s *connection) handleVersionNegotiationPacket(p *receivedPacket) { if s.perspective == protocol.PerspectiveServer || // servers never receive version negotiation packets s.receivedFirstPacket || s.versionNegotiated { // ignore delayed / duplicated version negotiation packets if s.tracer != nil { @@ -1113,7 +1104,7 @@ func (s *session) handleVersionNegotiationPacket(p *receivedPacket) { }) } -func (s *session) handleUnpackedPacket( +func (s *connection) handleUnpackedPacket( packet *unpackedPacket, ecn protocol.ECN, rcvTime time.Time, @@ -1145,10 +1136,10 @@ func (s *session) handleUnpackedPacket( s.handshakeDestConnID = cid s.connIDManager.ChangeInitialConnID(cid) } - // We create the session as soon as we receive the first packet from the client. + // We create the connection as soon as we receive the first packet from the client. // We do that before authenticating the packet. // That means that if the source connection ID was corrupted, - // we might have create a session with an incorrect source connection ID. + // we might have create a connection with an incorrect source connection ID. // Once we authenticate the first packet, we need to update it. if s.perspective == protocol.PerspectiveServer { if !packet.hdr.SrcConnectionID.Equal(s.handshakeDestConnID) { @@ -1213,7 +1204,7 @@ func (s *session) handleUnpackedPacket( return s.receivedPacketHandler.ReceivedPacket(packet.packetNumber, ecn, packet.encryptionLevel, rcvTime, isAckEliciting) } -func (s *session) handleFrame(f wire.Frame, encLevel protocol.EncryptionLevel, destConnID protocol.ConnectionID) error { +func (s *connection) handleFrame(f wire.Frame, encLevel protocol.EncryptionLevel, destConnID protocol.ConnectionID) error { var err error wire.LogFrame(s.logger, f, false) switch frame := f.(type) { @@ -1261,9 +1252,9 @@ func (s *session) handleFrame(f wire.Frame, encLevel protocol.EncryptionLevel, d } // handlePacket is called by the server with a new packet -func (s *session) handlePacket(p *receivedPacket) { +func (s *connection) handlePacket(p *receivedPacket) { // Discard packets once the amount of queued packets is larger than - // the channel size, protocol.MaxSessionUnprocessedPackets + // the channel size, protocol.MaxConnUnprocessedPackets select { case s.receivedPackets <- p: default: @@ -1273,7 +1264,7 @@ func (s *session) handlePacket(p *receivedPacket) { } } -func (s *session) handleConnectionCloseFrame(frame *wire.ConnectionCloseFrame) { +func (s *connection) handleConnectionCloseFrame(frame *wire.ConnectionCloseFrame) { if frame.IsApplicationError { s.closeRemote(&qerr.ApplicationError{ Remote: true, @@ -1290,7 +1281,7 @@ func (s *session) handleConnectionCloseFrame(frame *wire.ConnectionCloseFrame) { }) } -func (s *session) handleCryptoFrame(frame *wire.CryptoFrame, encLevel protocol.EncryptionLevel) error { +func (s *connection) handleCryptoFrame(frame *wire.CryptoFrame, encLevel protocol.EncryptionLevel) error { encLevelChanged, err := s.cryptoStreamManager.HandleCryptoFrame(frame, encLevel) if err != nil { return err @@ -1303,7 +1294,7 @@ func (s *session) handleCryptoFrame(frame *wire.CryptoFrame, encLevel protocol.E return nil } -func (s *session) handleStreamFrame(frame *wire.StreamFrame) error { +func (s *connection) handleStreamFrame(frame *wire.StreamFrame) error { str, err := s.streamsMap.GetOrOpenReceiveStream(frame.StreamID) if err != nil { return err @@ -1316,11 +1307,11 @@ func (s *session) handleStreamFrame(frame *wire.StreamFrame) error { return str.handleStreamFrame(frame) } -func (s *session) handleMaxDataFrame(frame *wire.MaxDataFrame) { +func (s *connection) handleMaxDataFrame(frame *wire.MaxDataFrame) { s.connFlowController.UpdateSendWindow(frame.MaximumData) } -func (s *session) handleMaxStreamDataFrame(frame *wire.MaxStreamDataFrame) error { +func (s *connection) handleMaxStreamDataFrame(frame *wire.MaxStreamDataFrame) error { str, err := s.streamsMap.GetOrOpenSendStream(frame.StreamID) if err != nil { return err @@ -1333,11 +1324,11 @@ func (s *session) handleMaxStreamDataFrame(frame *wire.MaxStreamDataFrame) error return nil } -func (s *session) handleMaxStreamsFrame(frame *wire.MaxStreamsFrame) { +func (s *connection) handleMaxStreamsFrame(frame *wire.MaxStreamsFrame) { s.streamsMap.HandleMaxStreamsFrame(frame) } -func (s *session) handleResetStreamFrame(frame *wire.ResetStreamFrame) error { +func (s *connection) handleResetStreamFrame(frame *wire.ResetStreamFrame) error { str, err := s.streamsMap.GetOrOpenReceiveStream(frame.StreamID) if err != nil { return err @@ -1349,7 +1340,7 @@ func (s *session) handleResetStreamFrame(frame *wire.ResetStreamFrame) error { return str.handleResetStreamFrame(frame) } -func (s *session) handleStopSendingFrame(frame *wire.StopSendingFrame) error { +func (s *connection) handleStopSendingFrame(frame *wire.StopSendingFrame) error { str, err := s.streamsMap.GetOrOpenSendStream(frame.StreamID) if err != nil { return err @@ -1362,11 +1353,11 @@ func (s *session) handleStopSendingFrame(frame *wire.StopSendingFrame) error { return nil } -func (s *session) handlePathChallengeFrame(frame *wire.PathChallengeFrame) { +func (s *connection) handlePathChallengeFrame(frame *wire.PathChallengeFrame) { s.queueControlFrame(&wire.PathResponseFrame{Data: frame.Data}) } -func (s *session) handleNewTokenFrame(frame *wire.NewTokenFrame) error { +func (s *connection) handleNewTokenFrame(frame *wire.NewTokenFrame) error { if s.perspective == protocol.PerspectiveServer { return &qerr.TransportError{ ErrorCode: qerr.ProtocolViolation, @@ -1379,15 +1370,15 @@ func (s *session) handleNewTokenFrame(frame *wire.NewTokenFrame) error { return nil } -func (s *session) handleNewConnectionIDFrame(f *wire.NewConnectionIDFrame) error { +func (s *connection) handleNewConnectionIDFrame(f *wire.NewConnectionIDFrame) error { return s.connIDManager.Add(f) } -func (s *session) handleRetireConnectionIDFrame(f *wire.RetireConnectionIDFrame, destConnID protocol.ConnectionID) error { +func (s *connection) handleRetireConnectionIDFrame(f *wire.RetireConnectionIDFrame, destConnID protocol.ConnectionID) error { return s.connIDGenerator.Retire(f.SequenceNumber, destConnID) } -func (s *session) handleHandshakeDoneFrame() error { +func (s *connection) handleHandshakeDoneFrame() error { if s.perspective == protocol.PerspectiveServer { return &qerr.TransportError{ ErrorCode: qerr.ProtocolViolation, @@ -1400,7 +1391,7 @@ func (s *session) handleHandshakeDoneFrame() error { return nil } -func (s *session) handleAckFrame(frame *wire.AckFrame, encLevel protocol.EncryptionLevel) error { +func (s *connection) handleAckFrame(frame *wire.AckFrame, encLevel protocol.EncryptionLevel) error { acked1RTTPacket, err := s.sentPacketHandler.ReceivedAck(frame, encLevel, s.lastPacketReceivedTime) if err != nil { return err @@ -1414,7 +1405,7 @@ func (s *session) handleAckFrame(frame *wire.AckFrame, encLevel protocol.Encrypt return s.cryptoStreamHandler.SetLargest1RTTAcked(frame.LargestAcked()) } -func (s *session) handleDatagramFrame(f *wire.DatagramFrame) error { +func (s *connection) handleDatagramFrame(f *wire.DatagramFrame) error { if f.Length(s.version) > protocol.MaxDatagramFrameSize { return &qerr.TransportError{ ErrorCode: qerr.ProtocolViolation, @@ -1425,50 +1416,50 @@ func (s *session) handleDatagramFrame(f *wire.DatagramFrame) error { return nil } -// closeLocal closes the session and send a CONNECTION_CLOSE containing the error -func (s *session) closeLocal(e error) { +// closeLocal closes the connection and send a CONNECTION_CLOSE containing the error +func (s *connection) closeLocal(e error) { s.closeOnce.Do(func() { if e == nil { - s.logger.Infof("Closing session.") + s.logger.Infof("Closing connection.") } else { - s.logger.Errorf("Closing session with error: %s", e) + s.logger.Errorf("Closing connection with error: %s", e) } s.closeChan <- closeError{err: e, immediate: false, remote: false} }) } -// destroy closes the session without sending the error on the wire -func (s *session) destroy(e error) { +// destroy closes the connection without sending the error on the wire +func (s *connection) destroy(e error) { s.destroyImpl(e) <-s.ctx.Done() } -func (s *session) destroyImpl(e error) { +func (s *connection) destroyImpl(e error) { s.closeOnce.Do(func() { if nerr, ok := e.(net.Error); ok && nerr.Timeout() { - s.logger.Errorf("Destroying session: %s", e) + s.logger.Errorf("Destroying connection: %s", e) } else { - s.logger.Errorf("Destroying session with error: %s", e) + s.logger.Errorf("Destroying connection with error: %s", e) } s.closeChan <- closeError{err: e, immediate: true, remote: false} }) } -func (s *session) closeRemote(e error) { +func (s *connection) closeRemote(e error) { s.closeOnce.Do(func() { - s.logger.Errorf("Peer closed session with error: %s", e) + s.logger.Errorf("Peer closed connection with error: %s", e) s.closeChan <- closeError{err: e, immediate: true, remote: true} }) } // Close the connection. It sends a NO_ERROR application error. // It waits until the run loop has stopped before returning -func (s *session) shutdown() { +func (s *connection) shutdown() { s.closeLocal(nil) <-s.ctx.Done() } -func (s *session) CloseWithError(code ApplicationErrorCode, desc string) error { +func (s *connection) CloseWithError(code ApplicationErrorCode, desc string) error { s.closeLocal(&qerr.ApplicationError{ ErrorCode: code, ErrorMessage: desc, @@ -1477,7 +1468,7 @@ func (s *session) CloseWithError(code ApplicationErrorCode, desc string) error { return nil } -func (s *session) handleCloseError(closeErr *closeError) { +func (s *connection) handleCloseError(closeErr *closeError) { e := closeErr.err if e == nil { e = &qerr.ApplicationError{} @@ -1521,7 +1512,7 @@ func (s *session) handleCloseError(closeErr *closeError) { // If this is a remote close we're done here if closeErr.remote { - s.connIDGenerator.ReplaceWithClosed(newClosedRemoteSession(s.perspective)) + s.connIDGenerator.ReplaceWithClosed(newClosedRemoteConn(s.perspective)) return } if closeErr.immediate { @@ -1532,11 +1523,11 @@ func (s *session) handleCloseError(closeErr *closeError) { if err != nil { s.logger.Debugf("Error sending CONNECTION_CLOSE: %s", err) } - cs := newClosedLocalSession(s.conn, connClosePacket, s.perspective, s.logger) + cs := newClosedLocalConn(s.conn, connClosePacket, s.perspective, s.logger) s.connIDGenerator.ReplaceWithClosed(cs) } -func (s *session) dropEncryptionLevel(encLevel protocol.EncryptionLevel) { +func (s *connection) dropEncryptionLevel(encLevel protocol.EncryptionLevel) { s.sentPacketHandler.DropPackets(encLevel) s.receivedPacketHandler.DropPackets(encLevel) if s.tracer != nil { @@ -1554,7 +1545,7 @@ func (s *session) dropEncryptionLevel(encLevel protocol.EncryptionLevel) { } // is called for the client, when restoring transport parameters saved for 0-RTT -func (s *session) restoreTransportParameters(params *wire.TransportParameters) { +func (s *connection) restoreTransportParameters(params *wire.TransportParameters) { if s.logger.Debug() { s.logger.Debugf("Restoring Transport Parameters: %s", params) } @@ -1565,7 +1556,7 @@ func (s *session) restoreTransportParameters(params *wire.TransportParameters) { s.streamsMap.UpdateLimits(params) } -func (s *session) handleTransportParameters(params *wire.TransportParameters) { +func (s *connection) handleTransportParameters(params *wire.TransportParameters) { if err := s.checkTransportParameters(params); err != nil { s.closeLocal(&qerr.TransportError{ ErrorCode: qerr.TransportParameterError, @@ -1577,13 +1568,13 @@ func (s *session) handleTransportParameters(params *wire.TransportParameters) { // During a 0-RTT connection, we are only allowed to use the new transport parameters for 1-RTT packets. if s.perspective == protocol.PerspectiveServer { s.applyTransportParameters() - // On the server side, the early session is ready as soon as we processed + // On the server side, the early connection is ready as soon as we processed // the client's transport parameters. - close(s.earlySessionReadyChan) + close(s.earlyConnReadyChan) } } -func (s *session) checkTransportParameters(params *wire.TransportParameters) error { +func (s *connection) checkTransportParameters(params *wire.TransportParameters) error { if s.logger.Debug() { s.logger.Debugf("Processed Transport Parameters: %s", params) } @@ -1616,7 +1607,7 @@ func (s *session) checkTransportParameters(params *wire.TransportParameters) err return nil } -func (s *session) applyTransportParameters() { +func (s *connection) applyTransportParameters() { params := s.peerParams // Our local idle timeout will always be > 0. s.idleTimeout = utils.MinNonZeroDuration(s.config.MaxIdleTimeout, params.MaxIdleTimeout) @@ -1637,7 +1628,7 @@ func (s *session) applyTransportParameters() { } } -func (s *session) sendPackets() error { +func (s *connection) sendPackets() error { s.pacingDeadline = time.Time{} var sentPacket bool // only used in for packets sent in send mode SendAny @@ -1703,7 +1694,7 @@ func (s *session) sendPackets() error { } } -func (s *session) maybeSendAckOnlyPacket() error { +func (s *connection) maybeSendAckOnlyPacket() error { packet, err := s.packer.MaybePackAckPacket(s.handshakeConfirmed) if err != nil { return err @@ -1715,7 +1706,7 @@ func (s *session) maybeSendAckOnlyPacket() error { return nil } -func (s *session) sendProbePacket(encLevel protocol.EncryptionLevel) error { +func (s *connection) sendProbePacket(encLevel protocol.EncryptionLevel) error { // Queue probe packets until we actually send out a packet, // or until there are no more packets to queue. var packet *packedPacket @@ -1751,13 +1742,13 @@ func (s *session) sendProbePacket(encLevel protocol.EncryptionLevel) error { } } if packet == nil || packet.packetContents == nil { - return fmt.Errorf("session BUG: couldn't pack %s probe packet", encLevel) + return fmt.Errorf("connection BUG: couldn't pack %s probe packet", encLevel) } s.sendPackedPacket(packet, time.Now()) return nil } -func (s *session) sendPacket() (bool, error) { +func (s *connection) sendPacket() (bool, error) { if isBlocked, offset := s.connFlowController.IsNewlyBlocked(); isBlocked { s.framer.QueueControlFrame(&wire.DataBlockedFrame{MaximumData: offset}) } @@ -1780,7 +1771,7 @@ func (s *session) sendPacket() (bool, error) { s.sendQueue.Send(packet.buffer) return true, nil } - if pathMTUDiscoveryEnabled(s.config) && s.mtuDiscoverer.ShouldSendProbe(now) { + if !s.config.DisablePathMTUDiscovery && s.mtuDiscoverer.ShouldSendProbe(now) { packet, err := s.packer.PackMTUProbePacket(s.mtuDiscoverer.GetPing()) if err != nil { return false, err @@ -1796,7 +1787,7 @@ func (s *session) sendPacket() (bool, error) { return true, nil } -func (s *session) sendPackedPacket(packet *packedPacket, now time.Time) { +func (s *connection) sendPackedPacket(packet *packedPacket, now time.Time) { if s.firstAckElicitingPacketAfterIdleSentTime.IsZero() && packet.IsAckEliciting() { s.firstAckElicitingPacketAfterIdleSentTime = now } @@ -1806,7 +1797,7 @@ func (s *session) sendPackedPacket(packet *packedPacket, now time.Time) { s.sendQueue.Send(packet.buffer) } -func (s *session) sendConnectionClose(e error) ([]byte, error) { +func (s *connection) sendConnectionClose(e error) ([]byte, error) { var packet *coalescedPacket var err error var transportErr *qerr.TransportError @@ -1818,7 +1809,7 @@ func (s *session) sendConnectionClose(e error) ([]byte, error) { } else { packet, err = s.packer.PackConnectionClose(&qerr.TransportError{ ErrorCode: qerr.InternalError, - ErrorMessage: fmt.Sprintf("session BUG: unspecified error type (msg: %s)", e.Error()), + ErrorMessage: fmt.Sprintf("connection BUG: unspecified error type (msg: %s)", e.Error()), }) } if err != nil { @@ -1828,7 +1819,7 @@ func (s *session) sendConnectionClose(e error) ([]byte, error) { return packet.buffer.Data, s.conn.Write(packet.buffer.Data) } -func (s *session) logPacketContents(p *packetContents) { +func (s *connection) logPacketContents(p *packetContents) { // tracing if s.tracer != nil { frames := make([]logging.Frame, 0, len(p.frames)) @@ -1851,7 +1842,7 @@ func (s *session) logPacketContents(p *packetContents) { } } -func (s *session) logCoalescedPacket(packet *coalescedPacket) { +func (s *connection) logCoalescedPacket(packet *coalescedPacket) { if s.logger.Debug() { if len(packet.packets) > 1 { s.logger.Debugf("-> Sending coalesced packet (%d parts, %d bytes) for connection %s", len(packet.packets), packet.buffer.Len(), s.logID) @@ -1864,7 +1855,7 @@ func (s *session) logCoalescedPacket(packet *coalescedPacket) { } } -func (s *session) logPacket(packet *packedPacket) { +func (s *connection) logPacket(packet *packedPacket) { if s.logger.Debug() { s.logger.Debugf("-> Sending packet %d (%d bytes) for connection %s, %s", packet.header.PacketNumber, packet.buffer.Len(), s.logID, packet.EncryptionLevel()) } @@ -1872,32 +1863,32 @@ func (s *session) logPacket(packet *packedPacket) { } // AcceptStream returns the next stream openend by the peer -func (s *session) AcceptStream(ctx context.Context) (Stream, error) { +func (s *connection) AcceptStream(ctx context.Context) (Stream, error) { return s.streamsMap.AcceptStream(ctx) } -func (s *session) AcceptUniStream(ctx context.Context) (ReceiveStream, error) { +func (s *connection) AcceptUniStream(ctx context.Context) (ReceiveStream, error) { return s.streamsMap.AcceptUniStream(ctx) } // OpenStream opens a stream -func (s *session) OpenStream() (Stream, error) { +func (s *connection) OpenStream() (Stream, error) { return s.streamsMap.OpenStream() } -func (s *session) OpenStreamSync(ctx context.Context) (Stream, error) { +func (s *connection) OpenStreamSync(ctx context.Context) (Stream, error) { return s.streamsMap.OpenStreamSync(ctx) } -func (s *session) OpenUniStream() (SendStream, error) { +func (s *connection) OpenUniStream() (SendStream, error) { return s.streamsMap.OpenUniStream() } -func (s *session) OpenUniStreamSync(ctx context.Context) (SendStream, error) { +func (s *connection) OpenUniStreamSync(ctx context.Context) (SendStream, error) { return s.streamsMap.OpenUniStreamSync(ctx) } -func (s *session) newFlowController(id protocol.StreamID) flowcontrol.StreamFlowController { +func (s *connection) newFlowController(id protocol.StreamID) flowcontrol.StreamFlowController { initialSendWindow := s.peerParams.InitialMaxStreamDataUni if id.Type() == protocol.StreamTypeBidi { if id.InitiatedBy() == s.perspective { @@ -1919,14 +1910,14 @@ func (s *session) newFlowController(id protocol.StreamID) flowcontrol.StreamFlow } // scheduleSending signals that we have data for sending -func (s *session) scheduleSending() { +func (s *connection) scheduleSending() { select { case s.sendingScheduled <- struct{}{}: default: } } -func (s *session) tryQueueingUndecryptablePacket(p *receivedPacket, hdr *wire.Header) { +func (s *connection) tryQueueingUndecryptablePacket(p *receivedPacket, hdr *wire.Header) { if s.handshakeComplete { panic("shouldn't queue undecryptable packets after handshake completion") } @@ -1944,33 +1935,33 @@ func (s *session) tryQueueingUndecryptablePacket(p *receivedPacket, hdr *wire.He s.undecryptablePackets = append(s.undecryptablePackets, p) } -func (s *session) queueControlFrame(f wire.Frame) { +func (s *connection) queueControlFrame(f wire.Frame) { s.framer.QueueControlFrame(f) s.scheduleSending() } -func (s *session) onHasStreamWindowUpdate(id protocol.StreamID) { +func (s *connection) onHasStreamWindowUpdate(id protocol.StreamID) { s.windowUpdateQueue.AddStream(id) s.scheduleSending() } -func (s *session) onHasConnectionWindowUpdate() { +func (s *connection) onHasConnectionWindowUpdate() { s.windowUpdateQueue.AddConnection() s.scheduleSending() } -func (s *session) onHasStreamData(id protocol.StreamID) { +func (s *connection) onHasStreamData(id protocol.StreamID) { s.framer.AddActiveStream(id) s.scheduleSending() } -func (s *session) onStreamCompleted(id protocol.StreamID) { +func (s *connection) onStreamCompleted(id protocol.StreamID) { if err := s.streamsMap.DeleteStream(id); err != nil { s.closeLocal(err) } } -func (s *session) SendMessage(p []byte) error { +func (s *connection) SendMessage(p []byte) error { f := &wire.DatagramFrame{DataLenPresent: true} if protocol.ByteCount(len(p)) > f.MaxDataLen(s.peerParams.MaxDatagramFrameSize, s.version) { return errors.New("message too large") @@ -1980,27 +1971,27 @@ func (s *session) SendMessage(p []byte) error { return s.datagramQueue.AddAndWait(f) } -func (s *session) ReceiveMessage() ([]byte, error) { +func (s *connection) ReceiveMessage() ([]byte, error) { return s.datagramQueue.Receive() } -func (s *session) LocalAddr() net.Addr { +func (s *connection) LocalAddr() net.Addr { return s.conn.LocalAddr() } -func (s *session) RemoteAddr() net.Addr { +func (s *connection) RemoteAddr() net.Addr { return s.conn.RemoteAddr() } -func (s *session) getPerspective() protocol.Perspective { +func (s *connection) getPerspective() protocol.Perspective { return s.perspective } -func (s *session) GetVersion() protocol.VersionNumber { +func (s *connection) GetVersion() protocol.VersionNumber { return s.version } -func (s *session) NextSession() Session { +func (s *connection) NextConnection() Connection { <-s.HandshakeComplete().Done() s.streamsMap.UseResetMaps() return s diff --git a/vendor/github.com/lucas-clemente/quic-go/go.mod b/vendor/github.com/lucas-clemente/quic-go/go.mod deleted file mode 100644 index e868284e17..0000000000 --- a/vendor/github.com/lucas-clemente/quic-go/go.mod +++ /dev/null @@ -1,20 +0,0 @@ -module github.com/lucas-clemente/quic-go - -go 1.16 - -require ( - github.com/cheekybits/genny v1.0.0 - github.com/francoispqt/gojay v1.2.13 - github.com/golang/mock v1.6.0 - github.com/marten-seemann/qpack v0.2.1 - github.com/marten-seemann/qtls-go1-16 v0.1.4 - github.com/marten-seemann/qtls-go1-17 v0.1.0 - github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 - github.com/onsi/ginkgo v1.16.4 - github.com/onsi/gomega v1.13.0 - golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 - golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210510120138-977fb7262007 - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect -) diff --git a/vendor/github.com/lucas-clemente/quic-go/go.sum b/vendor/github.com/lucas-clemente/quic-go/go.sum deleted file mode 100644 index bf00cfdbe6..0000000000 --- a/vendor/github.com/lucas-clemente/quic-go/go.sum +++ /dev/null @@ -1,285 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.31.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.37.0/go.mod h1:TS1dMSSfndXH133OKGwekG838Om/cQT0BUHV3HcBgoo= -dmitri.shuralyov.com/app/changes v0.0.0-20180602232624-0a106ad413e3/go.mod h1:Yl+fi1br7+Rr3LqpNJf1/uxUdtRUV+Tnj0o93V2B9MU= -dmitri.shuralyov.com/html/belt v0.0.0-20180602232347-f7d459c86be0/go.mod h1:JLBrvjyP0v+ecvNYvCpyZgu5/xkfAUhi6wJj28eUfSU= -dmitri.shuralyov.com/service/change v0.0.0-20181023043359-a85b471d5412/go.mod h1:a1inKt/atXimZ4Mv927x+r7UpyzRUf4emIoiiSC2TN4= -dmitri.shuralyov.com/state v0.0.0-20180228185332-28bcc343414c/go.mod h1:0PRwlb0D6DFvNNtx+9ybjezNCa8XF0xaYcETyp6rHWU= -git.apache.org/thrift.git v0.0.0-20180902110319-2566ecd5d999/go.mod h1:fPE2ZNJGynbRyZ4dJvy6G277gSllfV2HJqblrnkyeyg= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/bradfitz/go-smtpd v0.0.0-20170404230938-deb6d6237625/go.mod h1:HYsPBTaaSFSlLx/70C2HPIMNZpVV8+vt/A+FMnYP11g= -github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheekybits/genny v1.0.0/go.mod h1:+tQajlRqAUrPI7DOSpB0XAqZYtQakVtB7wXkRAgjxjQ= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:tluoj9z5200jBnyusfRPU2LqT6J+DAorxEvtC7LHB+E= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= -github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= -github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE08qbEPm1M08qg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/jellevandenhooff/dkim v0.0.0-20150330215556-f50fe3d243e1/go.mod h1:E0B/fFc00Y+Rasa88328GlI/XbtyysCtTHZS8h7IrBU= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.3/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lunixbochs/vtclean v1.0.0/go.mod h1:pHhQNgMf3btfWnGBVipUOjRYhoOsdGqdm/+2c2E2WMI= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/marten-seemann/qpack v0.2.1 h1:jvTsT/HpCn2UZJdP+UUB53FfUUgeOyG5K1ns0OJOGVs= -github.com/marten-seemann/qpack v0.2.1/go.mod h1:F7Gl5L1jIgN1D11ucXefiuJS9UMVP2opoCp2jDKb7wc= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/marten-seemann/qtls-go1-16 v0.1.4 h1:xbHbOGGhrenVtII6Co8akhLEdrawwB2iHl5yhJRpnco= -github.com/marten-seemann/qtls-go1-16 v0.1.4/go.mod h1:gNpI2Ol+lRS3WwSOtIUUtRwZEQMXjYK+dQSBFbethAk= -github.com/marten-seemann/qtls-go1-17 v0.1.0 h1:P9ggrs5xtwiqXv/FHNwntmuLMNq3KaSIG93AtAZ48xk= -github.com/marten-seemann/qtls-go1-17 v0.1.0/go.mod h1:fz4HIxByo+LlWcreM4CZOYNuz3taBQ8rN2X6FqvaWo8= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 h1:EnzzN9fPUkUck/1CuY1FlzBaIYMoiBsdwTNmNGkwUUM= -github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1/go.mod h1:PUhIQk19LoFt2174H4+an8TYvWOGjb/hHwphBeaDHwI= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/neelance/astrewrite v0.0.0-20160511093645-99348263ae86/go.mod h1:kHJEU3ofeGjhHklVoIGuVj85JJwZ6kWPaJwCIxgnFmo= -github.com/neelance/sourcemap v0.0.0-20151028013722-8c68805598ab/go.mod h1:Qr6/a/Q4r9LP1IltGz7tA7iOK1WonHEYhu1HRBA7ZiM= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/common v0.0.0-20180801064454-c7de2306084e/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/procfs v0.0.0-20180725123919-05ee40e3a273/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/shurcooL/component v0.0.0-20170202220835-f88ec8f54cc4/go.mod h1:XhFIlyj5a1fBNx5aJTbKoIq0mNaPvOagO+HjB3EtxrY= -github.com/shurcooL/events v0.0.0-20181021180414-410e4ca65f48/go.mod h1:5u70Mqkb5O5cxEA8nxTsgrgLehJeAw6Oc4Ab1c/P1HM= -github.com/shurcooL/github_flavored_markdown v0.0.0-20181002035957-2122de532470/go.mod h1:2dOwnU2uBioM+SGy2aZoq1f/Sd1l9OkAeAUvjSyvgU0= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/gofontwoff v0.0.0-20180329035133-29b52fc0a18d/go.mod h1:05UtEgK5zq39gLST6uB0cf3NEHjETfB4Fgr3Gx5R9Vw= -github.com/shurcooL/gopherjslib v0.0.0-20160914041154-feb6d3990c2c/go.mod h1:8d3azKNyqcHP1GaQE/c6dDgjkgSx2BZ4IoEi4F1reUI= -github.com/shurcooL/highlight_diff v0.0.0-20170515013008-09bb4053de1b/go.mod h1:ZpfEhSmds4ytuByIcDnOLkTHGUI6KNqRNPDLHDk+mUU= -github.com/shurcooL/highlight_go v0.0.0-20181028180052-98c3abbbae20/go.mod h1:UDKB5a1T23gOMUJrI+uSuH0VRDStOiUVSjBTRDVBVag= -github.com/shurcooL/home v0.0.0-20181020052607-80b7ffcb30f9/go.mod h1:+rgNQw2P9ARFAs37qieuu7ohDNQ3gds9msbT2yn85sg= -github.com/shurcooL/htmlg v0.0.0-20170918183704-d01228ac9e50/go.mod h1:zPn1wHpTIePGnXSHpsVPWEktKXHr6+SS6x/IKRb7cpw= -github.com/shurcooL/httperror v0.0.0-20170206035902-86b7830d14cc/go.mod h1:aYMfkZ6DWSJPJ6c4Wwz3QtW22G7mf/PEgaB9k/ik5+Y= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= -github.com/shurcooL/httpgzip v0.0.0-20180522190206-b1c53ac65af9/go.mod h1:919LwcH0M7/W4fcZ0/jy0qGght1GIhqyS/EgWGH2j5Q= -github.com/shurcooL/issues v0.0.0-20181008053335-6292fdc1e191/go.mod h1:e2qWDig5bLteJ4fwvDAc2NHzqFEthkqn7aOZAOpj+PQ= -github.com/shurcooL/issuesapp v0.0.0-20180602232740-048589ce2241/go.mod h1:NPpHK2TI7iSaM0buivtFUc9offApnI0Alt/K8hcHy0I= -github.com/shurcooL/notifications v0.0.0-20181007000457-627ab5aea122/go.mod h1:b5uSkrEVM1jQUspwbixRBhaIjIzL2xazXp6kntxYle0= -github.com/shurcooL/octicon v0.0.0-20181028054416-fa4f57f9efb2/go.mod h1:eWdoE5JD4R5UVWDucdOPg1g2fqQRq78IQa9zlOV1vpQ= -github.com/shurcooL/reactions v0.0.0-20181006231557-f2e0b4ca5b82/go.mod h1:TCR1lToEk4d2s07G3XGfz2QrgHXg4RJBvjrOozvoWfk= -github.com/shurcooL/sanitized_anchor_name v0.0.0-20170918181015-86672fcb3f95/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/users v0.0.0-20180125191416-49c67e49c537/go.mod h1:QJTqeLYEDaXHZDBsXlPCDqdhQuJkuw4NOtaxYe3xii4= -github.com/shurcooL/webdavfs v0.0.0-20170829043945-18c3829fa133/go.mod h1:hKmq5kWdCj2z2KEozexVbfEZIWiTjhE0+UjmZgPqehw= -github.com/sourcegraph/annotate v0.0.0-20160123013949-f4cad6c6324d/go.mod h1:UdhH50NIW0fCiwBSr0co2m7BnFLdv4fQTgdqdJTHFeE= -github.com/sourcegraph/syntaxhighlight v0.0.0-20170531221838-bd320f5d308e/go.mod h1:HuIsMU8RRBOtsCgI77wP899iHVBQpCmg4ErYMZB+2IA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= -github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= -go4.org v0.0.0-20180809161055-417644f6feb5/go.mod h1:MkTOUMDaeVYJUOUsaDXIhWPZYa1yOyC1qaOBpL57BhE= -golang.org/x/build v0.0.0-20190111050920-041ab4dc3f9d/go.mod h1:OWs+y06UdEOHN4y+MfF/py+xQ/tYqIWW03b70/CG9Rw= -golang.org/x/crypto v0.0.0-20181030102418-4d3f4d9ffa16/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181029044818-c44066c5c816/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181106065722-10aee1819953/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190313220215-9f648a60d977/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781 h1:DzZ89McO9/gWPsQXS/FVKAlG02ZjaQ6AlZRBimEYOd0= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190316082340-a2f829d7f35f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6 h1:aRYxNxv6iGQlyVaZmk6ZgYEDa+Jg18DxebPSrd6bg1M= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1 h1:wGiQel/hW0NnEkJUk8lbzkX2gFJU6PFxf1v5OlCfuOs= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20180910000450-7ca32eb868bf/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.0.0-20181030000543-1d582fd0359e/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.1.0/go.mod h1:UGEZY7KEX120AnNLIHFMKIo4obdJhkp2tPbaPlQx13Y= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181029155118-b69ba1387ce2/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181202183823-bd91e49a0898/go.mod h1:7Ep/1NZk928CDR8SjdVbjWNpdIf6nzjE3BTgJDr2Atg= -google.golang.org/genproto v0.0.0-20190306203927-b5d61aea6440/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/grpc v1.14.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.16.0/go.mod h1:0JHn/cJsOMiMfNA9+DeHDlAU7KAAB5GDlYFpa9MZMio= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -sourcegraph.com/sourcegraph/go-diff v0.5.0/go.mod h1:kuch7UrkMzY0X+p9CRK03kfuPQ2zzQcaEFbx8wA8rck= -sourcegraph.com/sqs/pbtypes v0.0.0-20180604144634-d3ebe8f20ae4/go.mod h1:ketZ/q3QxT9HOBeFhu6RdvsftgpsbFHBF5Cas6cDKZ0= diff --git a/vendor/github.com/lucas-clemente/quic-go/interface.go b/vendor/github.com/lucas-clemente/quic-go/interface.go index 6381e9eddf..8291a1082a 100644 --- a/vendor/github.com/lucas-clemente/quic-go/interface.go +++ b/vendor/github.com/lucas-clemente/quic-go/interface.go @@ -59,15 +59,15 @@ type TokenStore interface { // when the server rejects a 0-RTT connection attempt. var Err0RTTRejected = errors.New("0-RTT rejected") -// SessionTracingKey can be used to associate a ConnectionTracer with a Session. -// It is set on the Session.Context() context, +// ConnectionTracingKey can be used to associate a ConnectionTracer with a Connection. +// It is set on the Connection.Context() context, // as well as on the context passed to logging.Tracer.NewConnectionTracer. -var SessionTracingKey = sessionTracingCtxKey{} +var ConnectionTracingKey = connTracingCtxKey{} -type sessionTracingCtxKey struct{} +type connTracingCtxKey struct{} // Stream is the interface implemented by QUIC streams -// In addition to the errors listed on the Session, +// In addition to the errors listed on the Connection, // calls to stream functions can return a StreamError if the stream is canceled. type Stream interface { ReceiveStream @@ -87,7 +87,7 @@ type ReceiveStream interface { // after a fixed time limit; see SetDeadline and SetReadDeadline. // If the stream was canceled by the peer, the error implements the StreamError // interface, and Canceled() == true. - // If the session was closed due to a timeout, the error satisfies + // If the connection was closed due to a timeout, the error satisfies // the net.Error interface, and Timeout() will be true. io.Reader // CancelRead aborts receiving on this stream. @@ -111,7 +111,7 @@ type SendStream interface { // after a fixed time limit; see SetDeadline and SetWriteDeadline. // If the stream was canceled by the peer, the error implements the StreamError // interface, and Canceled() == true. - // If the session was closed due to a timeout, the error satisfies + // If the connection was closed due to a timeout, the error satisfies // the net.Error interface, and Timeout() will be true. io.Writer // Close closes the write-direction of the stream. @@ -137,21 +137,21 @@ type SendStream interface { SetWriteDeadline(t time.Time) error } -// A Session is a QUIC connection between two peers. -// Calls to the session (and to streams) can return the following types of errors: +// A Connection is a QUIC connection between two peers. +// Calls to the connection (and to streams) can return the following types of errors: // * ApplicationError: for errors triggered by the application running on top of QUIC // * TransportError: for errors triggered by the QUIC transport (in many cases a misbehaving peer) // * IdleTimeoutError: when the peer goes away unexpectedly (this is a net.Error timeout error) // * HandshakeTimeoutError: when the cryptographic handshake takes too long (this is a net.Error timeout error) // * StatelessResetError: when we receive a stateless reset (this is a net.Error temporary error) // * VersionNegotiationError: returned by the client, when there's no version overlap between the peers -type Session interface { +type Connection interface { // AcceptStream returns the next stream opened by the peer, blocking until one is available. - // If the session was closed due to a timeout, the error satisfies + // If the connection was closed due to a timeout, the error satisfies // the net.Error interface, and Timeout() will be true. AcceptStream(context.Context) (Stream, error) // AcceptUniStream returns the next unidirectional stream opened by the peer, blocking until one is available. - // If the session was closed due to a timeout, the error satisfies + // If the connection was closed due to a timeout, the error satisfies // the net.Error interface, and Timeout() will be true. AcceptUniStream(context.Context) (ReceiveStream, error) // OpenStream opens a new bidirectional QUIC stream. @@ -159,22 +159,22 @@ type Session interface { // The peer can only accept the stream after data has been sent on the stream. // If the error is non-nil, it satisfies the net.Error interface. // When reaching the peer's stream limit, err.Temporary() will be true. - // If the session was closed due to a timeout, Timeout() will be true. + // If the connection was closed due to a timeout, Timeout() will be true. OpenStream() (Stream, error) // OpenStreamSync opens a new bidirectional QUIC stream. // It blocks until a new stream can be opened. // If the error is non-nil, it satisfies the net.Error interface. - // If the session was closed due to a timeout, Timeout() will be true. + // If the connection was closed due to a timeout, Timeout() will be true. OpenStreamSync(context.Context) (Stream, error) // OpenUniStream opens a new outgoing unidirectional QUIC stream. // If the error is non-nil, it satisfies the net.Error interface. // When reaching the peer's stream limit, Temporary() will be true. - // If the session was closed due to a timeout, Timeout() will be true. + // If the connection was closed due to a timeout, Timeout() will be true. OpenUniStream() (SendStream, error) // OpenUniStreamSync opens a new outgoing unidirectional QUIC stream. // It blocks until a new stream can be opened. // If the error is non-nil, it satisfies the net.Error interface. - // If the session was closed due to a timeout, Timeout() will be true. + // If the connection was closed due to a timeout, Timeout() will be true. OpenUniStreamSync(context.Context) (SendStream, error) // LocalAddr returns the local address. LocalAddr() net.Addr @@ -183,7 +183,7 @@ type Session interface { // CloseWithError closes the connection with an error. // The error string will be sent to the peer. CloseWithError(ApplicationErrorCode, string) error - // The context is cancelled when the session is closed. + // The context is cancelled when the connection is closed. // Warning: This API should not be considered stable and might change soon. Context() context.Context // ConnectionState returns basic details about the QUIC connection. @@ -199,19 +199,19 @@ type Session interface { ReceiveMessage() ([]byte, error) } -// An EarlySession is a session that is handshaking. +// An EarlyConnection is a connection that is handshaking. // Data sent during the handshake is encrypted using the forward secure keys. // When using client certificates, the client's identity is only verified // after completion of the handshake. -type EarlySession interface { - Session +type EarlyConnection interface { + Connection // HandshakeComplete blocks until the handshake completes (or fails). // Data sent before completion of the handshake is encrypted with 1-RTT keys. // Note that the client's identity hasn't been verified yet. HandshakeComplete() context.Context - NextSession() Session + NextConnection() Connection } // Config contains all configuration data needed for a QUIC server or client. @@ -270,9 +270,9 @@ type Config struct { // to increase the connection flow control window. // If set, the caller can prevent an increase of the window. Typically, it would do so to // limit the memory usage. - // To avoid deadlocks, it is not valid to call other functions on the session or on streams + // To avoid deadlocks, it is not valid to call other functions on the connection or on streams // in this callback. - AllowConnectionWindowIncrease func(sess Session, delta uint64) bool + AllowConnectionWindowIncrease func(sess Connection, delta uint64) bool // MaxIncomingStreams is the maximum number of concurrent bidirectional streams that a peer is allowed to open. // Values above 2^60 are invalid. // If not set, it will default to 100. @@ -290,7 +290,7 @@ type Config struct { KeepAlive bool // DisablePathMTUDiscovery disables Path MTU Discovery (RFC 8899). // Packets will then be at most 1252 (IPv4) / 1232 (IPv6) bytes in size. - // Note that Path MTU discovery is always disabled on Windows, see https://github.com/lucas-clemente/quic-go/issues/3273. + // Note that if Path MTU discovery is causing issues on your system, please open a new issue DisablePathMTUDiscovery bool // DisableVersionNegotiationPackets disables the sending of Version Negotiation packets. // This can be useful if version information is exchanged out-of-band. @@ -310,21 +310,21 @@ type ConnectionState struct { // A Listener for incoming QUIC connections type Listener interface { - // Close the server. All active sessions will be closed. + // Close the server. All active connections will be closed. Close() error // Addr returns the local network addr that the server is listening on. Addr() net.Addr - // Accept returns new sessions. It should be called in a loop. - Accept(context.Context) (Session, error) + // Accept returns new connections. It should be called in a loop. + Accept(context.Context) (Connection, error) } // An EarlyListener listens for incoming QUIC connections, // and returns them before the handshake completes. type EarlyListener interface { - // Close the server. All active sessions will be closed. + // Close the server. All active connections will be closed. Close() error // Addr returns the local network addr that the server is listening on. Addr() net.Addr - // Accept returns new early sessions. It should be called in a loop. - Accept(context.Context) (EarlySession, error) + // Accept returns new early connections. It should be called in a loop. + Accept(context.Context) (EarlyConnection, error) } diff --git a/vendor/github.com/lucas-clemente/quic-go/internal/protocol/params.go b/vendor/github.com/lucas-clemente/quic-go/internal/protocol/params.go index 4bc33e2746..5988b93fd1 100644 --- a/vendor/github.com/lucas-clemente/quic-go/internal/protocol/params.go +++ b/vendor/github.com/lucas-clemente/quic-go/internal/protocol/params.go @@ -14,7 +14,7 @@ const InitialPacketSizeIPv6 = 1232 // MaxCongestionWindowPackets is the maximum congestion window in packet. const MaxCongestionWindowPackets = 10000 -// MaxUndecryptablePackets limits the number of undecryptable packets that are queued in the session. +// MaxUndecryptablePackets limits the number of undecryptable packets that are queued in the connection. const MaxUndecryptablePackets = 32 // ConnectionFlowControlMultiplier determines how much larger the connection flow control windows needs to be relative to any stream's flow control window @@ -45,8 +45,8 @@ const DefaultMaxIncomingUniStreams = 100 // MaxServerUnprocessedPackets is the max number of packets stored in the server that are not yet processed. const MaxServerUnprocessedPackets = 1024 -// MaxSessionUnprocessedPackets is the max number of packets stored in each session that are not yet processed. -const MaxSessionUnprocessedPackets = 256 +// MaxConnUnprocessedPackets is the max number of packets stored in each connection that are not yet processed. +const MaxConnUnprocessedPackets = 256 // SkipPacketInitialPeriod is the initial period length used for packet number skipping to prevent an Optimistic ACK attack. // Every time a packet number is skipped, the period is doubled, up to SkipPacketMaxPeriod. @@ -55,7 +55,7 @@ const SkipPacketInitialPeriod PacketNumber = 256 // SkipPacketMaxPeriod is the maximum period length used for packet number skipping. const SkipPacketMaxPeriod PacketNumber = 128 * 1024 -// MaxAcceptQueueSize is the maximum number of sessions that the server queues for accepting. +// MaxAcceptQueueSize is the maximum number of connections that the server queues for accepting. // If the queue is full, new connection attempts will be rejected. const MaxAcceptQueueSize = 32 @@ -112,7 +112,7 @@ const DefaultHandshakeTimeout = 10 * time.Second // It should be shorter than the time that NATs clear their mapping. const MaxKeepAliveInterval = 20 * time.Second -// RetiredConnectionIDDeleteTimeout is the time we keep closed sessions around in order to retransmit the CONNECTION_CLOSE. +// RetiredConnectionIDDeleteTimeout is the time we keep closed connections around in order to retransmit the CONNECTION_CLOSE. // after this time all information about the old connection will be deleted const RetiredConnectionIDDeleteTimeout = 5 * time.Second @@ -189,7 +189,7 @@ const Max0RTTQueueingDuration = 100 * time.Millisecond const Max0RTTQueues = 32 // Max0RTTQueueLen is the maximum number of 0-RTT packets that we buffer for each connection. -// When a new session is created, all buffered packets are passed to the session immediately. -// To avoid blocking, this value has to be smaller than MaxSessionUnprocessedPackets. -// To avoid packets being dropped as undecryptable by the session, this value has to be smaller than MaxUndecryptablePackets. +// When a new connection is created, all buffered packets are passed to the connection immediately. +// To avoid blocking, this value has to be smaller than MaxConnUnprocessedPackets. +// To avoid packets being dropped as undecryptable by the connection, this value has to be smaller than MaxUndecryptablePackets. const Max0RTTQueueLen = 31 diff --git a/vendor/github.com/lucas-clemente/quic-go/internal/qtls/go119.go b/vendor/github.com/lucas-clemente/quic-go/internal/qtls/go119.go index 2c648639e3..87e7132e5a 100644 --- a/vendor/github.com/lucas-clemente/quic-go/internal/qtls/go119.go +++ b/vendor/github.com/lucas-clemente/quic-go/internal/qtls/go119.go @@ -3,4 +3,4 @@ package qtls -var _ int = "quic-go doesn't build on Go 1.19 yet." +var _ int = "The version of quic-go you're using can't be built on Go 1.19 yet. For more details, please see https://github.com/lucas-clemente/quic-go/wiki/quic-go-and-Go-versions." diff --git a/vendor/github.com/lucas-clemente/quic-go/internal/qtls/go_oldversion.go b/vendor/github.com/lucas-clemente/quic-go/internal/qtls/go_oldversion.go new file mode 100644 index 0000000000..384d719c6e --- /dev/null +++ b/vendor/github.com/lucas-clemente/quic-go/internal/qtls/go_oldversion.go @@ -0,0 +1,7 @@ +//go:build (go1.9 || go1.10 || go1.11 || go1.12 || go1.13 || go1.14 || go1.15) && !go1.16 +// +build go1.9 go1.10 go1.11 go1.12 go1.13 go1.14 go1.15 +// +build !go1.16 + +package qtls + +var _ int = "The version of quic-go you're using can't be built using outdated Go versions. For more details, please see https://github.com/lucas-clemente/quic-go/wiki/quic-go-and-Go-versions." diff --git a/vendor/github.com/lucas-clemente/quic-go/logging/types.go b/vendor/github.com/lucas-clemente/quic-go/logging/types.go index e18865033e..ad80069235 100644 --- a/vendor/github.com/lucas-clemente/quic-go/logging/types.go +++ b/vendor/github.com/lucas-clemente/quic-go/logging/types.go @@ -68,14 +68,14 @@ const ( TimerTypePTO ) -// TimeoutReason is the reason why a session is closed +// TimeoutReason is the reason why a connection is closed type TimeoutReason uint8 const ( - // TimeoutReasonHandshake is used when the session is closed due to a handshake timeout + // TimeoutReasonHandshake is used when the connection is closed due to a handshake timeout // This reason is not defined in the qlog draft, but very useful for debugging. TimeoutReasonHandshake TimeoutReason = iota - // TimeoutReasonIdle is used when the session is closed due to an idle timeout + // TimeoutReasonIdle is used when the connection is closed due to an idle timeout // This reason is not defined in the qlog draft, but very useful for debugging. TimeoutReasonIdle ) @@ -87,7 +87,7 @@ const ( CongestionStateSlowStart CongestionState = iota // CongestionStateCongestionAvoidance is the slow start phase of Reno / Cubic CongestionStateCongestionAvoidance - // CongestionStateCongestionAvoidance is the recovery phase of Reno / Cubic + // CongestionStateRecovery is the recovery phase of Reno / Cubic CongestionStateRecovery // CongestionStateApplicationLimited means that the congestion controller is application limited CongestionStateApplicationLimited diff --git a/vendor/github.com/lucas-clemente/quic-go/mockgen.go b/vendor/github.com/lucas-clemente/quic-go/mockgen.go index 053cfa9ab5..22c2c0e74e 100644 --- a/vendor/github.com/lucas-clemente/quic-go/mockgen.go +++ b/vendor/github.com/lucas-clemente/quic-go/mockgen.go @@ -16,8 +16,8 @@ package quic //go:generate sh -c "./mockgen_private.sh quic mock_unpacker_test.go github.com/lucas-clemente/quic-go unpacker" //go:generate sh -c "./mockgen_private.sh quic mock_packer_test.go github.com/lucas-clemente/quic-go packer" //go:generate sh -c "./mockgen_private.sh quic mock_mtu_discoverer_test.go github.com/lucas-clemente/quic-go mtuDiscoverer" -//go:generate sh -c "./mockgen_private.sh quic mock_session_runner_test.go github.com/lucas-clemente/quic-go sessionRunner" -//go:generate sh -c "./mockgen_private.sh quic mock_quic_session_test.go github.com/lucas-clemente/quic-go quicSession" +//go:generate sh -c "./mockgen_private.sh quic mock_conn_runner_test.go github.com/lucas-clemente/quic-go connRunner" +//go:generate sh -c "./mockgen_private.sh quic mock_quic_conn_test.go github.com/lucas-clemente/quic-go quicConn" //go:generate sh -c "./mockgen_private.sh quic mock_packet_handler_test.go github.com/lucas-clemente/quic-go packetHandler" //go:generate sh -c "./mockgen_private.sh quic mock_unknown_packet_handler_test.go github.com/lucas-clemente/quic-go unknownPacketHandler" //go:generate sh -c "./mockgen_private.sh quic mock_packet_handler_manager_test.go github.com/lucas-clemente/quic-go packetHandlerManager" diff --git a/vendor/github.com/lucas-clemente/quic-go/mtu_discoverer.go b/vendor/github.com/lucas-clemente/quic-go/mtu_discoverer.go index a5a8302193..bf38eaac7d 100644 --- a/vendor/github.com/lucas-clemente/quic-go/mtu_discoverer.go +++ b/vendor/github.com/lucas-clemente/quic-go/mtu_discoverer.go @@ -11,7 +11,6 @@ import ( type mtuDiscoverer interface { ShouldSendProbe(now time.Time) bool - NextProbeTime() time.Time GetPing() (ping ackhandler.Frame, datagramSize protocol.ByteCount) } @@ -53,16 +52,7 @@ func (f *mtuFinder) ShouldSendProbe(now time.Time) bool { if f.probeInFlight || f.done() { return false } - return !now.Before(f.NextProbeTime()) -} - -// NextProbeTime returns the time when the next probe packet should be sent. -// It returns the zero value if no probe packet should be sent. -func (f *mtuFinder) NextProbeTime() time.Time { - if f.probeInFlight || f.done() { - return time.Time{} - } - return f.lastProbeTime.Add(mtuProbeDelay * f.rttStats.SmoothedRTT()) + return !now.Before(f.lastProbeTime.Add(mtuProbeDelay * f.rttStats.SmoothedRTT())) } func (f *mtuFinder) GetPing() (ackhandler.Frame, protocol.ByteCount) { diff --git a/vendor/github.com/lucas-clemente/quic-go/multiplexer.go b/vendor/github.com/lucas-clemente/quic-go/multiplexer.go index 006305af18..2271b55172 100644 --- a/vendor/github.com/lucas-clemente/quic-go/multiplexer.go +++ b/vendor/github.com/lucas-clemente/quic-go/multiplexer.go @@ -32,7 +32,7 @@ type connManager struct { } // The connMultiplexer listens on multiple net.PacketConns and dispatches -// incoming packets to the session handler. +// incoming packets to the connection handler. type connMultiplexer struct { mutex sync.Mutex diff --git a/vendor/github.com/lucas-clemente/quic-go/packet_handler_map.go b/vendor/github.com/lucas-clemente/quic-go/packet_handler_map.go index 5b4659d20a..6975d5a25e 100644 --- a/vendor/github.com/lucas-clemente/quic-go/packet_handler_map.go +++ b/vendor/github.com/lucas-clemente/quic-go/packet_handler_map.go @@ -7,8 +7,12 @@ import ( "errors" "fmt" "hash" + "io" "log" "net" + "os" + "strconv" + "strings" "sync" "time" @@ -45,6 +49,14 @@ func (h *zeroRTTQueue) Clear() { } } +// rawConn is a connection that allow reading of a receivedPacket. +type rawConn interface { + ReadPacket() (*receivedPacket, error) + WritePacket(b []byte, addr net.Addr, oob []byte) (int, error) + LocalAddr() net.Addr + io.Closer +} + type packetHandlerMapEntry struct { packetHandler packetHandler is0RTTQueue bool @@ -52,12 +64,12 @@ type packetHandlerMapEntry struct { // The packetHandlerMap stores packetHandlers, identified by connection ID. // It is used: -// * by the server to store sessions +// * by the server to store connections // * when multiplexing outgoing connections to store clients type packetHandlerMap struct { mutex sync.Mutex - conn connection + conn rawConn connIDLen int handlers map[string] /* string(ConnectionID)*/ packetHandlerMapEntry @@ -68,8 +80,8 @@ type packetHandlerMap struct { listening chan struct{} // is closed when listen returns closed bool - deleteRetiredSessionsAfter time.Duration - zeroRTTQueueDuration time.Duration + deleteRetiredConnsAfter time.Duration + zeroRTTQueueDuration time.Duration statelessResetEnabled bool statelessResetMutex sync.Mutex @@ -110,7 +122,7 @@ func setReceiveBuffer(c net.PacketConn, logger utils.Logger) error { return nil } -// only print warnings about the UPD receive buffer size once +// only print warnings about the UDP receive buffer size once var receiveBufferWarningOnce sync.Once func newPacketHandlerMap( @@ -121,26 +133,31 @@ func newPacketHandlerMap( logger utils.Logger, ) (packetHandlerManager, error) { if err := setReceiveBuffer(c, logger); err != nil { - receiveBufferWarningOnce.Do(func() { - log.Printf("%s. See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details.", err) - }) + if !strings.Contains(err.Error(), "use of closed network connection") { + receiveBufferWarningOnce.Do(func() { + if disable, _ := strconv.ParseBool(os.Getenv("QUIC_GO_DISABLE_RECEIVE_BUFFER_WARNING")); disable { + return + } + log.Printf("%s. See https://github.com/lucas-clemente/quic-go/wiki/UDP-Receive-Buffer-Size for details.", err) + }) + } } conn, err := wrapConn(c) if err != nil { return nil, err } m := &packetHandlerMap{ - conn: conn, - connIDLen: connIDLen, - listening: make(chan struct{}), - handlers: make(map[string]packetHandlerMapEntry), - resetTokens: make(map[protocol.StatelessResetToken]packetHandler), - deleteRetiredSessionsAfter: protocol.RetiredConnectionIDDeleteTimeout, - zeroRTTQueueDuration: protocol.Max0RTTQueueingDuration, - statelessResetEnabled: len(statelessResetKey) > 0, - statelessResetHasher: hmac.New(sha256.New, statelessResetKey), - tracer: tracer, - logger: logger, + conn: conn, + connIDLen: connIDLen, + listening: make(chan struct{}), + handlers: make(map[string]packetHandlerMapEntry), + resetTokens: make(map[protocol.StatelessResetToken]packetHandler), + deleteRetiredConnsAfter: protocol.RetiredConnectionIDDeleteTimeout, + zeroRTTQueueDuration: protocol.Max0RTTQueueingDuration, + statelessResetEnabled: len(statelessResetKey) > 0, + statelessResetHasher: hmac.New(sha256.New, statelessResetKey), + tracer: tracer, + logger: logger, } go m.listen() @@ -196,7 +213,7 @@ func (h *packetHandlerMap) AddWithConnID(clientDestConnID, newConnID protocol.Co var q *zeroRTTQueue if entry, ok := h.handlers[string(clientDestConnID)]; ok { if !entry.is0RTTQueue { - h.logger.Debugf("Not adding connection ID %s for a new session, as it already exists.", clientDestConnID) + h.logger.Debugf("Not adding connection ID %s for a new connection, as it already exists.", clientDestConnID) return false } q = entry.packetHandler.(*zeroRTTQueue) @@ -212,7 +229,7 @@ func (h *packetHandlerMap) AddWithConnID(clientDestConnID, newConnID protocol.Co } h.handlers[string(clientDestConnID)] = packetHandlerMapEntry{packetHandler: sess} h.handlers[string(newConnID)] = packetHandlerMapEntry{packetHandler: sess} - h.logger.Debugf("Adding connection IDs %s and %s for a new session.", clientDestConnID, newConnID) + h.logger.Debugf("Adding connection IDs %s and %s for a new connection.", clientDestConnID, newConnID) return true } @@ -224,8 +241,8 @@ func (h *packetHandlerMap) Remove(id protocol.ConnectionID) { } func (h *packetHandlerMap) Retire(id protocol.ConnectionID) { - h.logger.Debugf("Retiring connection ID %s in %s.", id, h.deleteRetiredSessionsAfter) - time.AfterFunc(h.deleteRetiredSessionsAfter, func() { + h.logger.Debugf("Retiring connection ID %s in %s.", id, h.deleteRetiredConnsAfter) + time.AfterFunc(h.deleteRetiredConnsAfter, func() { h.mutex.Lock() delete(h.handlers, string(id)) h.mutex.Unlock() @@ -237,14 +254,14 @@ func (h *packetHandlerMap) ReplaceWithClosed(id protocol.ConnectionID, handler p h.mutex.Lock() h.handlers[string(id)] = packetHandlerMapEntry{packetHandler: handler} h.mutex.Unlock() - h.logger.Debugf("Replacing session for connection ID %s with a closed session.", id) + h.logger.Debugf("Replacing connection for connection ID %s with a closed connection.", id) - time.AfterFunc(h.deleteRetiredSessionsAfter, func() { + time.AfterFunc(h.deleteRetiredConnsAfter, func() { h.mutex.Lock() handler.shutdown() delete(h.handlers, string(id)) h.mutex.Unlock() - h.logger.Debugf("Removing connection ID %s for a closed session after it has been retired.", id) + h.logger.Debugf("Removing connection ID %s for a closed connection after it has been retired.", id) }) } @@ -289,7 +306,7 @@ func (h *packetHandlerMap) CloseServer() { } // Destroy closes the underlying connection and waits until listen() has returned. -// It does not close active sessions. +// It does not close active connections. func (h *packetHandlerMap) Destroy() error { if err := h.conn.Close(); err != nil { return err @@ -327,6 +344,10 @@ func (h *packetHandlerMap) listen() { defer close(h.listening) for { p, err := h.conn.ReadPacket() + //nolint:staticcheck // SA1019 ignore this! + // TODO: This code is used to ignore wsa errors on Windows. + // Since net.Error.Temporary is deprecated as of Go 1.18, we should find a better solution. + // See https://github.com/lucas-clemente/quic-go/issues/1737 for details. if nerr, ok := err.(net.Error); ok && nerr.Temporary() { h.logger.Debugf("Temporary error reading from conn: %w", err) continue @@ -363,7 +384,7 @@ func (h *packetHandlerMap) handlePacket(p *receivedPacket) { entry.packetHandler.handlePacket(p) return } - } else { // existing session + } else { // existing connection entry.packetHandler.handlePacket(p) return } @@ -389,7 +410,7 @@ func (h *packetHandlerMap) handlePacket(p *receivedPacket) { queue.retireTimer = time.AfterFunc(h.zeroRTTQueueDuration, func() { h.mutex.Lock() defer h.mutex.Unlock() - // The entry might have been replaced by an actual session. + // The entry might have been replaced by an actual connection. // Only delete it if it's still a 0-RTT queue. if entry, ok := h.handlers[string(connID)]; ok && entry.is0RTTQueue { delete(h.handlers, string(connID)) @@ -421,7 +442,7 @@ func (h *packetHandlerMap) maybeHandleStatelessReset(data []byte) bool { var token protocol.StatelessResetToken copy(token[:], data[len(data)-16:]) if sess, ok := h.resetTokens[token]; ok { - h.logger.Debugf("Received a stateless reset with token %#x. Closing session.", token) + h.logger.Debugf("Received a stateless reset with token %#x. Closing connection.", token) go sess.destroy(&StatelessResetError{Token: token}) return true } diff --git a/vendor/github.com/lucas-clemente/quic-go/send_conn.go b/vendor/github.com/lucas-clemente/quic-go/send_conn.go index b276af1138..c53ebdfab1 100644 --- a/vendor/github.com/lucas-clemente/quic-go/send_conn.go +++ b/vendor/github.com/lucas-clemente/quic-go/send_conn.go @@ -13,7 +13,7 @@ type sendConn interface { } type sconn struct { - connection + rawConn remoteAddr net.Addr info *packetInfo @@ -22,9 +22,9 @@ type sconn struct { var _ sendConn = &sconn{} -func newSendConn(c connection, remote net.Addr, info *packetInfo) sendConn { +func newSendConn(c rawConn, remote net.Addr, info *packetInfo) sendConn { return &sconn{ - connection: c, + rawConn: c, remoteAddr: remote, info: info, oob: info.OOB(), @@ -41,7 +41,7 @@ func (c *sconn) RemoteAddr() net.Addr { } func (c *sconn) LocalAddr() net.Addr { - addr := c.connection.LocalAddr() + addr := c.rawConn.LocalAddr() if c.info != nil { if udpAddr, ok := addr.(*net.UDPAddr); ok { addrCopy := *udpAddr diff --git a/vendor/github.com/lucas-clemente/quic-go/send_queue.go b/vendor/github.com/lucas-clemente/quic-go/send_queue.go index bf25dded60..1fc8c1bf89 100644 --- a/vendor/github.com/lucas-clemente/quic-go/send_queue.go +++ b/vendor/github.com/lucas-clemente/quic-go/send_queue.go @@ -64,7 +64,13 @@ func (h *sendQueue) Run() error { shouldClose = true case p := <-h.queue: if err := h.conn.Write(p.Data); err != nil { - return err + // This additional check enables: + // 1. Checking for "datagram too large" message from the kernel, as such, + // 2. Path MTU discovery,and + // 3. Eventual detection of loss PingFrame. + if !isMsgSizeErr(err) { + return err + } } p.Release() select { diff --git a/vendor/github.com/lucas-clemente/quic-go/server.go b/vendor/github.com/lucas-clemente/quic-go/server.go index 6ab869c020..5bf568a61f 100644 --- a/vendor/github.com/lucas-clemente/quic-go/server.go +++ b/vendor/github.com/lucas-clemente/quic-go/server.go @@ -36,14 +36,14 @@ type unknownPacketHandler interface { type packetHandlerManager interface { AddWithConnID(protocol.ConnectionID, protocol.ConnectionID, func() packetHandler) bool Destroy() error - sessionRunner + connRunner SetServer(unknownPacketHandler) CloseServer() } -type quicSession interface { - EarlySession - earlySessionReady() <-chan struct{} +type quicConn interface { + EarlyConnection + earlyConnReady() <-chan struct{} handlePacket(*receivedPacket) GetVersion() protocol.VersionNumber getPerspective() protocol.Perspective @@ -56,26 +56,26 @@ type quicSession interface { type baseServer struct { mutex sync.Mutex - acceptEarlySessions bool + acceptEarlyConns bool tlsConf *tls.Config config *Config - conn connection + conn rawConn // If the server is started with ListenAddr, we create a packet conn. // If it is started with Listen, we take a packet conn as a parameter. createdPacketConn bool tokenGenerator *handshake.TokenGenerator - sessionHandler packetHandlerManager + connHandler packetHandlerManager receivedPackets chan *receivedPacket // set as a member, so they can be set in the tests - newSession func( + newConn func( sendConn, - sessionRunner, + connRunner, protocol.ConnectionID, /* original dest connection ID */ *protocol.ConnectionID, /* retry src connection ID */ protocol.ConnectionID, /* client dest connection ID */ @@ -90,15 +90,15 @@ type baseServer struct { uint64, utils.Logger, protocol.VersionNumber, - ) quicSession + ) quicConn serverError error errorChan chan struct{} closed bool running chan struct{} // closed as soon as run() returns - sessionQueue chan quicSession - sessionQueueLen int32 // to be used as an atomic + connQueue chan quicConn + connQueueLen int32 // to be used as an atomic logger utils.Logger } @@ -112,7 +112,7 @@ type earlyServer struct{ *baseServer } var _ EarlyListener = &earlyServer{} -func (s *earlyServer) Accept(ctx context.Context) (EarlySession, error) { +func (s *earlyServer) Accept(ctx context.Context) (EarlyConnection, error) { return s.baseServer.accept(ctx) } @@ -123,7 +123,7 @@ func ListenAddr(addr string, tlsConf *tls.Config, config *Config) (Listener, err return listenAddr(addr, tlsConf, config, false) } -// ListenAddrEarly works like ListenAddr, but it returns sessions before the handshake completes. +// ListenAddrEarly works like ListenAddr, but it returns connections before the handshake completes. func ListenAddrEarly(addr string, tlsConf *tls.Config, config *Config) (EarlyListener, error) { s, err := listenAddr(addr, tlsConf, config, true) if err != nil { @@ -164,7 +164,7 @@ func Listen(conn net.PacketConn, tlsConf *tls.Config, config *Config) (Listener, return listen(conn, tlsConf, config, false) } -// ListenEarly works like Listen, but it returns sessions before the handshake completes. +// ListenEarly works like Listen, but it returns connections before the handshake completes. func ListenEarly(conn net.PacketConn, tlsConf *tls.Config, config *Config) (EarlyListener, error) { s, err := listen(conn, tlsConf, config, true) if err != nil { @@ -187,7 +187,7 @@ func listen(conn net.PacketConn, tlsConf *tls.Config, config *Config, acceptEarl } } - sessionHandler, err := getMultiplexer().AddConn(conn, config.ConnectionIDLength, config.StatelessResetKey, config.Tracer) + connHandler, err := getMultiplexer().AddConn(conn, config.ConnectionIDLength, config.StatelessResetKey, config.Tracer) if err != nil { return nil, err } @@ -200,21 +200,21 @@ func listen(conn net.PacketConn, tlsConf *tls.Config, config *Config, acceptEarl return nil, err } s := &baseServer{ - conn: c, - tlsConf: tlsConf, - config: config, - tokenGenerator: tokenGenerator, - sessionHandler: sessionHandler, - sessionQueue: make(chan quicSession), - errorChan: make(chan struct{}), - running: make(chan struct{}), - receivedPackets: make(chan *receivedPacket, protocol.MaxServerUnprocessedPackets), - newSession: newSession, - logger: utils.DefaultLogger.WithPrefix("server"), - acceptEarlySessions: acceptEarly, + conn: c, + tlsConf: tlsConf, + config: config, + tokenGenerator: tokenGenerator, + connHandler: connHandler, + connQueue: make(chan quicConn), + errorChan: make(chan struct{}), + running: make(chan struct{}), + receivedPackets: make(chan *receivedPacket, protocol.MaxServerUnprocessedPackets), + newConn: newConnection, + logger: utils.DefaultLogger.WithPrefix("server"), + acceptEarlyConns: acceptEarly, } go s.run() - sessionHandler.SetServer(s) + connHandler.SetServer(s) s.logger.Debugf("Listening for %s connections on %s", conn.LocalAddr().Network(), conn.LocalAddr().String()) return s, nil } @@ -258,19 +258,19 @@ var defaultAcceptToken = func(clientAddr net.Addr, token *Token) bool { return sourceAddr == token.RemoteAddr } -// Accept returns sessions that already completed the handshake. -// It is only valid if acceptEarlySessions is false. -func (s *baseServer) Accept(ctx context.Context) (Session, error) { +// Accept returns connections that already completed the handshake. +// It is only valid if acceptEarlyConns is false. +func (s *baseServer) Accept(ctx context.Context) (Connection, error) { return s.accept(ctx) } -func (s *baseServer) accept(ctx context.Context) (quicSession, error) { +func (s *baseServer) accept(ctx context.Context) (quicConn, error) { select { case <-ctx.Done(): return nil, ctx.Err() - case sess := <-s.sessionQueue: - atomic.AddInt32(&s.sessionQueueLen, -1) - return sess, nil + case conn := <-s.connQueue: + atomic.AddInt32(&s.connQueueLen, -1) + return conn, nil case <-s.errorChan: return nil, s.serverError } @@ -294,9 +294,9 @@ func (s *baseServer) Close() error { s.mutex.Unlock() <-s.running - s.sessionHandler.CloseServer() + s.connHandler.CloseServer() if createdPacketConn { - return s.sessionHandler.Destroy() + return s.connHandler.Destroy() } return nil } @@ -336,7 +336,7 @@ func (s *baseServer) handlePacketImpl(p *receivedPacket) bool /* is the buffer s } return false } - // If we're creating a new session, the packet will be passed to the session. + // If we're creating a new connection, the packet will be passed to the connection. // The header will then be parsed again. hdr, _, _, err := wire.ParsePacket(p.data, s.config.ConnectionIDLength) if err != nil && err != wire.ErrUnsupportedVersion { @@ -436,7 +436,7 @@ func (s *baseServer) handleInitialImpl(p *receivedPacket, hdr *wire.Header) erro return nil } - if queueLen := atomic.LoadInt32(&s.sessionQueueLen); queueLen >= protocol.MaxAcceptQueueSize { + if queueLen := atomic.LoadInt32(&s.connQueueLen); queueLen >= protocol.MaxAcceptQueueSize { s.logger.Debugf("Rejecting new connection. Server currently busy. Accept queue length: %d (max %d)", queueLen, protocol.MaxAcceptQueueSize) go func() { defer p.buffer.Release() @@ -452,9 +452,9 @@ func (s *baseServer) handleInitialImpl(p *receivedPacket, hdr *wire.Header) erro return err } s.logger.Debugf("Changing connection ID to %s.", connID) - var sess quicSession - tracingID := nextSessionTracingID() - if added := s.sessionHandler.AddWithConnID(hdr.DestConnectionID, connID, func() packetHandler { + var conn quicConn + tracingID := nextConnTracingID() + if added := s.connHandler.AddWithConnID(hdr.DestConnectionID, connID, func() packetHandler { var tracer logging.ConnectionTracer if s.config.Tracer != nil { // Use the same connection ID that is passed to the client's GetLogWriter callback. @@ -463,74 +463,74 @@ func (s *baseServer) handleInitialImpl(p *receivedPacket, hdr *wire.Header) erro connID = origDestConnID } tracer = s.config.Tracer.TracerForConnection( - context.WithValue(context.Background(), SessionTracingKey, tracingID), + context.WithValue(context.Background(), ConnectionTracingKey, tracingID), protocol.PerspectiveServer, connID, ) } - sess = s.newSession( + conn = s.newConn( newSendConn(s.conn, p.remoteAddr, p.info), - s.sessionHandler, + s.connHandler, origDestConnID, retrySrcConnID, hdr.DestConnectionID, hdr.SrcConnectionID, connID, - s.sessionHandler.GetStatelessResetToken(connID), + s.connHandler.GetStatelessResetToken(connID), s.config, s.tlsConf, s.tokenGenerator, - s.acceptEarlySessions, + s.acceptEarlyConns, tracer, tracingID, s.logger, hdr.Version, ) - sess.handlePacket(p) - return sess + conn.handlePacket(p) + return conn }); !added { return nil } - go sess.run() - go s.handleNewSession(sess) - if sess == nil { + go conn.run() + go s.handleNewConn(conn) + if conn == nil { p.buffer.Release() return nil } return nil } -func (s *baseServer) handleNewSession(sess quicSession) { - sessCtx := sess.Context() - if s.acceptEarlySessions { - // wait until the early session is ready (or the handshake fails) +func (s *baseServer) handleNewConn(conn quicConn) { + connCtx := conn.Context() + if s.acceptEarlyConns { + // wait until the early connection is ready (or the handshake fails) select { - case <-sess.earlySessionReady(): - case <-sessCtx.Done(): + case <-conn.earlyConnReady(): + case <-connCtx.Done(): return } } else { // wait until the handshake is complete (or fails) select { - case <-sess.HandshakeComplete().Done(): - case <-sessCtx.Done(): + case <-conn.HandshakeComplete().Done(): + case <-connCtx.Done(): return } } - atomic.AddInt32(&s.sessionQueueLen, 1) + atomic.AddInt32(&s.connQueueLen, 1) select { - case s.sessionQueue <- sess: - // blocks until the session is accepted - case <-sessCtx.Done(): - atomic.AddInt32(&s.sessionQueueLen, -1) - // don't pass sessions that were already closed to Accept() + case s.connQueue <- conn: + // blocks until the connection is accepted + case <-connCtx.Done(): + atomic.AddInt32(&s.connQueueLen, -1) + // don't pass connections that were already closed to Accept() } } func (s *baseServer) sendRetry(remoteAddr net.Addr, hdr *wire.Header, info *packetInfo) error { // Log the Initial packet now. - // If no Retry is sent, the packet will be logged by the session. + // If no Retry is sent, the packet will be logged by the connection. (&wire.ExtendedHeader{Header: *hdr}).Log(s.logger) srcConnID, err := protocol.GenerateConnectionID(s.config.ConnectionIDLength) if err != nil { diff --git a/vendor/github.com/lucas-clemente/quic-go/conn.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn.go similarity index 69% rename from vendor/github.com/lucas-clemente/quic-go/conn.go rename to vendor/github.com/lucas-clemente/quic-go/sys_conn.go index 2f4e3a2398..d73b01d234 100644 --- a/vendor/github.com/lucas-clemente/quic-go/conn.go +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn.go @@ -1,7 +1,6 @@ package quic import ( - "io" "net" "syscall" "time" @@ -10,14 +9,8 @@ import ( "github.com/lucas-clemente/quic-go/internal/utils" ) -type connection interface { - ReadPacket() (*receivedPacket, error) - WritePacket(b []byte, addr net.Addr, oob []byte) (int, error) - LocalAddr() net.Addr - io.Closer -} - -// If the PacketConn passed to Dial or Listen satisfies this interface, quic-go will read the ECN bits from the IP header. +// OOBCapablePacketConn is a connection that allows the reading of ECN bits from the IP header. +// If the PacketConn passed to Dial or Listen satisfies this interface, quic-go will use it. // In this case, ReadMsgUDP() will be used instead of ReadFrom() to read packets. type OOBCapablePacketConn interface { net.PacketConn @@ -28,7 +21,20 @@ type OOBCapablePacketConn interface { var _ OOBCapablePacketConn = &net.UDPConn{} -func wrapConn(pc net.PacketConn) (connection, error) { +func wrapConn(pc net.PacketConn) (rawConn, error) { + conn, ok := pc.(interface { + SyscallConn() (syscall.RawConn, error) + }) + if ok { + rawConn, err := conn.SyscallConn() + if err != nil { + return nil, err + } + err = setDF(rawConn) + if err != nil { + return nil, err + } + } c, ok := pc.(OOBCapablePacketConn) if !ok { utils.DefaultLogger.Infof("PacketConn is not a net.UDPConn. Disabling optimizations possible on UDP connections.") @@ -37,11 +43,16 @@ func wrapConn(pc net.PacketConn) (connection, error) { return newConn(c) } +// The basicConn is the most trivial implementation of a connection. +// It reads a single packet from the underlying net.PacketConn. +// It is used when +// * the net.PacketConn is not a OOBCapablePacketConn, and +// * when the OS doesn't support OOB. type basicConn struct { net.PacketConn } -var _ connection = &basicConn{} +var _ rawConn = &basicConn{} func (c *basicConn) ReadPacket() (*receivedPacket, error) { buffer := getPacketBuffer() diff --git a/vendor/github.com/lucas-clemente/quic-go/sys_conn_df.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_df.go new file mode 100644 index 0000000000..ae9274d97f --- /dev/null +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_df.go @@ -0,0 +1,16 @@ +//go:build !linux && !windows +// +build !linux,!windows + +package quic + +import "syscall" + +func setDF(rawConn syscall.RawConn) error { + // no-op on unsupported platforms + return nil +} + +func isMsgSizeErr(err error) bool { + // to be implemented for more specific platforms + return false +} diff --git a/vendor/github.com/lucas-clemente/quic-go/sys_conn_df_linux.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_df_linux.go new file mode 100644 index 0000000000..17ac67f12a --- /dev/null +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_df_linux.go @@ -0,0 +1,40 @@ +//go:build linux +// +build linux + +package quic + +import ( + "errors" + "syscall" + + "github.com/lucas-clemente/quic-go/internal/utils" + "golang.org/x/sys/unix" +) + +func setDF(rawConn syscall.RawConn) error { + // Enabling IP_MTU_DISCOVER will force the kernel to return "sendto: message too long" + // and the datagram will not be fragmented + var errDFIPv4, errDFIPv6 error + if err := rawConn.Control(func(fd uintptr) { + errDFIPv4 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IP, unix.IP_MTU_DISCOVER, unix.IP_PMTUDISC_DO) + errDFIPv6 = unix.SetsockoptInt(int(fd), unix.IPPROTO_IPV6, unix.IPV6_MTU_DISCOVER, unix.IPV6_PMTUDISC_DO) + }); err != nil { + return err + } + switch { + case errDFIPv4 == nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4 and IPv6.") + case errDFIPv4 == nil && errDFIPv6 != nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4.") + case errDFIPv4 != nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv6.") + case errDFIPv4 != nil && errDFIPv6 != nil: + return errors.New("setting DF failed for both IPv4 and IPv6") + } + return nil +} + +func isMsgSizeErr(err error) bool { + // https://man7.org/linux/man-pages/man7/udp.7.html + return errors.Is(err, unix.EMSGSIZE) +} diff --git a/vendor/github.com/lucas-clemente/quic-go/sys_conn_df_windows.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_df_windows.go new file mode 100644 index 0000000000..4649f6463d --- /dev/null +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_df_windows.go @@ -0,0 +1,46 @@ +//go:build windows +// +build windows + +package quic + +import ( + "errors" + "syscall" + + "github.com/lucas-clemente/quic-go/internal/utils" + "golang.org/x/sys/windows" +) + +const ( + // same for both IPv4 and IPv6 on Windows + // https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Networking/WinSock/constant.IP_DONTFRAG.html + // https://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Networking/WinSock/constant.IPV6_DONTFRAG.html + IP_DONTFRAGMENT = 14 + IPV6_DONTFRAG = 14 +) + +func setDF(rawConn syscall.RawConn) error { + var errDFIPv4, errDFIPv6 error + if err := rawConn.Control(func(fd uintptr) { + errDFIPv4 = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, IP_DONTFRAGMENT, 1) + errDFIPv6 = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IPV6, IPV6_DONTFRAG, 1) + }); err != nil { + return err + } + switch { + case errDFIPv4 == nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4 and IPv6.") + case errDFIPv4 == nil && errDFIPv6 != nil: + utils.DefaultLogger.Debugf("Setting DF for IPv4.") + case errDFIPv4 != nil && errDFIPv6 == nil: + utils.DefaultLogger.Debugf("Setting DF for IPv6.") + case errDFIPv4 != nil && errDFIPv6 != nil: + return errors.New("setting DF failed for both IPv4 and IPv6") + } + return nil +} + +func isMsgSizeErr(err error) bool { + // https://docs.microsoft.com/en-us/windows/win32/winsock/windows-sockets-error-codes-2 + return errors.Is(err, windows.WSAEMSGSIZE) +} diff --git a/vendor/github.com/lucas-clemente/quic-go/conn_helper_darwin.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_darwin.go similarity index 81% rename from vendor/github.com/lucas-clemente/quic-go/conn_helper_darwin.go rename to vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_darwin.go index fdab73b615..eabf489f10 100644 --- a/vendor/github.com/lucas-clemente/quic-go/conn_helper_darwin.go +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_darwin.go @@ -5,10 +5,7 @@ package quic import "golang.org/x/sys/unix" -const ( - msgTypeIPTOS = unix.IP_RECVTOS - disablePathMTUDiscovery = false -) +const msgTypeIPTOS = unix.IP_RECVTOS const ( ipv4RECVPKTINFO = unix.IP_RECVPKTINFO diff --git a/vendor/github.com/lucas-clemente/quic-go/conn_helper_freebsd.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_freebsd.go similarity index 75% rename from vendor/github.com/lucas-clemente/quic-go/conn_helper_freebsd.go rename to vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_freebsd.go index e22f986127..0b3e8434b8 100644 --- a/vendor/github.com/lucas-clemente/quic-go/conn_helper_freebsd.go +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_freebsd.go @@ -6,8 +6,7 @@ package quic import "golang.org/x/sys/unix" const ( - msgTypeIPTOS = unix.IP_RECVTOS - disablePathMTUDiscovery = false + msgTypeIPTOS = unix.IP_RECVTOS ) const ( diff --git a/vendor/github.com/lucas-clemente/quic-go/conn_helper_linux.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_linux.go similarity index 81% rename from vendor/github.com/lucas-clemente/quic-go/conn_helper_linux.go rename to vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_linux.go index 4aa04dc9c2..51bec90024 100644 --- a/vendor/github.com/lucas-clemente/quic-go/conn_helper_linux.go +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_helper_linux.go @@ -5,10 +5,7 @@ package quic import "golang.org/x/sys/unix" -const ( - msgTypeIPTOS = unix.IP_TOS - disablePathMTUDiscovery = false -) +const msgTypeIPTOS = unix.IP_TOS const ( ipv4RECVPKTINFO = unix.IP_PKTINFO diff --git a/vendor/github.com/lucas-clemente/quic-go/conn_generic.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_no_oob.go similarity index 75% rename from vendor/github.com/lucas-clemente/quic-go/conn_generic.go rename to vendor/github.com/lucas-clemente/quic-go/sys_conn_no_oob.go index 526778c1cc..e3b0d11f68 100644 --- a/vendor/github.com/lucas-clemente/quic-go/conn_generic.go +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_no_oob.go @@ -5,9 +5,7 @@ package quic import "net" -const disablePathMTUDiscovery = false - -func newConn(c net.PacketConn) (connection, error) { +func newConn(c net.PacketConn) (rawConn, error) { return &basicConn{PacketConn: c}, nil } diff --git a/vendor/github.com/lucas-clemente/quic-go/conn_oob.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_oob.go similarity index 99% rename from vendor/github.com/lucas-clemente/quic-go/conn_oob.go rename to vendor/github.com/lucas-clemente/quic-go/sys_conn_oob.go index b46781377d..acd74d023c 100644 --- a/vendor/github.com/lucas-clemente/quic-go/conn_oob.go +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_oob.go @@ -64,7 +64,7 @@ type oobConn struct { buffers [batchSize]*packetBuffer } -var _ connection = &oobConn{} +var _ rawConn = &oobConn{} func newConn(c OOBCapablePacketConn) (*oobConn, error) { rawConn, err := c.SyscallConn() diff --git a/vendor/github.com/lucas-clemente/quic-go/conn_windows.go b/vendor/github.com/lucas-clemente/quic-go/sys_conn_windows.go similarity index 56% rename from vendor/github.com/lucas-clemente/quic-go/conn_windows.go rename to vendor/github.com/lucas-clemente/quic-go/sys_conn_windows.go index a6e591b62a..f2cc22ab7c 100644 --- a/vendor/github.com/lucas-clemente/quic-go/conn_windows.go +++ b/vendor/github.com/lucas-clemente/quic-go/sys_conn_windows.go @@ -12,24 +12,7 @@ import ( "golang.org/x/sys/windows" ) -const ( - disablePathMTUDiscovery = true - IP_DONTFRAGMENT = 14 -) - -func newConn(c OOBCapablePacketConn) (connection, error) { - rawConn, err := c.SyscallConn() - if err != nil { - return nil, fmt.Errorf("couldn't get syscall.RawConn: %w", err) - } - if err := rawConn.Control(func(fd uintptr) { - // This should succeed if the connection is a IPv4 or a dual-stack connection. - // It will fail for IPv6 connections. - // TODO: properly handle error. - _ = windows.SetsockoptInt(windows.Handle(fd), windows.IPPROTO_IP, IP_DONTFRAGMENT, 1) - }); err != nil { - return nil, err - } +func newConn(c OOBCapablePacketConn) (rawConn, error) { return &basicConn{PacketConn: c}, nil } diff --git a/vendor/github.com/marten-seemann/qtls-go1-16/common.go b/vendor/github.com/marten-seemann/qtls-go1-16/common.go index 9d07e1759b..266f93fef8 100644 --- a/vendor/github.com/marten-seemann/qtls-go1-16/common.go +++ b/vendor/github.com/marten-seemann/qtls-go1-16/common.go @@ -20,13 +20,10 @@ import ( "fmt" "io" "net" - "runtime" "sort" "strings" "sync" "time" - - "golang.org/x/sys/cpu" ) const ( @@ -1463,17 +1460,6 @@ func defaultCipherSuitesTLS13() []uint16 { return varDefaultCipherSuitesTLS13 } -var ( - hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ - hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL - // Keep in sync with crypto/aes/cipher_s390x.go. - hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) - - hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || - runtime.GOARCH == "arm64" && hasGCMAsmARM64 || - runtime.GOARCH == "s390x" && hasGCMAsmS390X -) - func initDefaultCipherSuites() { var topCipherSuites []uint16 diff --git a/vendor/github.com/marten-seemann/qtls-go1-16/common_js.go b/vendor/github.com/marten-seemann/qtls-go1-16/common_js.go new file mode 100644 index 0000000000..97e6ecefd7 --- /dev/null +++ b/vendor/github.com/marten-seemann/qtls-go1-16/common_js.go @@ -0,0 +1,12 @@ +// +build js + +package qtls + +var ( + hasGCMAsmAMD64 = false + hasGCMAsmARM64 = false + // Keep in sync with crypto/aes/cipher_s390x.go. + hasGCMAsmS390X = false + + hasAESGCMHardwareSupport = false +) diff --git a/vendor/github.com/marten-seemann/qtls-go1-16/common_nojs.go b/vendor/github.com/marten-seemann/qtls-go1-16/common_nojs.go new file mode 100644 index 0000000000..5e56e0fb36 --- /dev/null +++ b/vendor/github.com/marten-seemann/qtls-go1-16/common_nojs.go @@ -0,0 +1,20 @@ +// +build !js + +package qtls + +import ( + "runtime" + + "golang.org/x/sys/cpu" +) + +var ( + hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ + hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL + // Keep in sync with crypto/aes/cipher_s390x.go. + hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) + + hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || + runtime.GOARCH == "arm64" && hasGCMAsmARM64 || + runtime.GOARCH == "s390x" && hasGCMAsmS390X +) diff --git a/vendor/github.com/marten-seemann/qtls-go1-16/go.mod b/vendor/github.com/marten-seemann/qtls-go1-16/go.mod deleted file mode 100644 index 28c2c4c928..0000000000 --- a/vendor/github.com/marten-seemann/qtls-go1-16/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/marten-seemann/qtls-go1-16 - -go 1.16 - -require ( - github.com/golang/mock v1.4.4 - golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d - golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae -) diff --git a/vendor/github.com/marten-seemann/qtls-go1-16/go.sum b/vendor/github.com/marten-seemann/qtls-go1-16/go.sum deleted file mode 100644 index c23ddd604b..0000000000 --- a/vendor/github.com/marten-seemann/qtls-go1-16/go.sum +++ /dev/null @@ -1,14 +0,0 @@ -github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d h1:1ZiEyfaQIg3Qh0EoqpwAakHVhecoE5wlSg5GjnafJGw= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= diff --git a/vendor/github.com/marten-seemann/qtls-go1-17/cipher_suites.go b/vendor/github.com/marten-seemann/qtls-go1-17/cipher_suites.go index f28466422b..53a3956aae 100644 --- a/vendor/github.com/marten-seemann/qtls-go1-17/cipher_suites.go +++ b/vendor/github.com/marten-seemann/qtls-go1-17/cipher_suites.go @@ -15,10 +15,8 @@ import ( "crypto/sha256" "fmt" "hash" - "runtime" "golang.org/x/crypto/chacha20poly1305" - "golang.org/x/sys/cpu" ) // CipherSuite is a TLS cipher suite. Note that most functions in this package @@ -365,18 +363,6 @@ var defaultCipherSuitesTLS13NoAES = []uint16{ TLS_AES_256_GCM_SHA384, } -var ( - hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ - hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL - // Keep in sync with crypto/aes/cipher_s390x.go. - hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && - (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) - - hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || - runtime.GOARCH == "arm64" && hasGCMAsmARM64 || - runtime.GOARCH == "s390x" && hasGCMAsmS390X -) - var aesgcmCiphers = map[uint16]bool{ // TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: true, diff --git a/vendor/github.com/marten-seemann/qtls-go1-17/cpu.go b/vendor/github.com/marten-seemann/qtls-go1-17/cpu.go new file mode 100644 index 0000000000..1219450879 --- /dev/null +++ b/vendor/github.com/marten-seemann/qtls-go1-17/cpu.go @@ -0,0 +1,22 @@ +//go:build !js +// +build !js + +package qtls + +import ( + "runtime" + + "golang.org/x/sys/cpu" +) + +var ( + hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ + hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL + // Keep in sync with crypto/aes/cipher_s390x.go. + hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && + (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) + + hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || + runtime.GOARCH == "arm64" && hasGCMAsmARM64 || + runtime.GOARCH == "s390x" && hasGCMAsmS390X +) diff --git a/vendor/github.com/marten-seemann/qtls-go1-17/cpu_other.go b/vendor/github.com/marten-seemann/qtls-go1-17/cpu_other.go new file mode 100644 index 0000000000..33f7d21942 --- /dev/null +++ b/vendor/github.com/marten-seemann/qtls-go1-17/cpu_other.go @@ -0,0 +1,12 @@ +//go:build js +// +build js + +package qtls + +var ( + hasGCMAsmAMD64 = false + hasGCMAsmARM64 = false + hasGCMAsmS390X = false + + hasAESGCMHardwareSupport = false +) diff --git a/vendor/github.com/marten-seemann/qtls-go1-17/go.mod b/vendor/github.com/marten-seemann/qtls-go1-17/go.mod deleted file mode 100644 index d89bf93c0d..0000000000 --- a/vendor/github.com/marten-seemann/qtls-go1-17/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/marten-seemann/qtls-go1-17 - -go 1.17 - -require ( - github.com/golang/mock v1.6.0 - github.com/marten-seemann/qtls-go1-15 v0.1.4 // indirect - golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d - golang.org/x/sys v0.0.0-20210510120138-977fb7262007 -) diff --git a/vendor/github.com/marten-seemann/qtls-go1-17/go.sum b/vendor/github.com/marten-seemann/qtls-go1-17/go.sum deleted file mode 100644 index 0412f14d58..0000000000 --- a/vendor/github.com/marten-seemann/qtls-go1-17/go.sum +++ /dev/null @@ -1,34 +0,0 @@ -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/marten-seemann/qtls-go1-15 v0.1.4 h1:RehYMOyRW8hPVEja1KBVsFVNSm35Jj9Mvs5yNoZZ28A= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d h1:1ZiEyfaQIg3Qh0EoqpwAakHVhecoE5wlSg5GjnafJGw= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/vendor/github.com/marten-seemann/qtls-go1-18/cipher_suites.go b/vendor/github.com/marten-seemann/qtls-go1-18/cipher_suites.go index 2071cebf45..e0be514740 100644 --- a/vendor/github.com/marten-seemann/qtls-go1-18/cipher_suites.go +++ b/vendor/github.com/marten-seemann/qtls-go1-18/cipher_suites.go @@ -15,10 +15,8 @@ import ( "crypto/sha256" "fmt" "hash" - "runtime" "golang.org/x/crypto/chacha20poly1305" - "golang.org/x/sys/cpu" ) // CipherSuite is a TLS cipher suite. Note that most functions in this package @@ -365,18 +363,6 @@ var defaultCipherSuitesTLS13NoAES = []uint16{ TLS_AES_256_GCM_SHA384, } -var ( - hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ - hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL - // Keep in sync with crypto/aes/cipher_s390x.go. - hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && - (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) - - hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || - runtime.GOARCH == "arm64" && hasGCMAsmARM64 || - runtime.GOARCH == "s390x" && hasGCMAsmS390X -) - var aesgcmCiphers = map[uint16]bool{ // TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256: true, diff --git a/vendor/github.com/marten-seemann/qtls-go1-18/cpu.go b/vendor/github.com/marten-seemann/qtls-go1-18/cpu.go new file mode 100644 index 0000000000..1219450879 --- /dev/null +++ b/vendor/github.com/marten-seemann/qtls-go1-18/cpu.go @@ -0,0 +1,22 @@ +//go:build !js +// +build !js + +package qtls + +import ( + "runtime" + + "golang.org/x/sys/cpu" +) + +var ( + hasGCMAsmAMD64 = cpu.X86.HasAES && cpu.X86.HasPCLMULQDQ + hasGCMAsmARM64 = cpu.ARM64.HasAES && cpu.ARM64.HasPMULL + // Keep in sync with crypto/aes/cipher_s390x.go. + hasGCMAsmS390X = cpu.S390X.HasAES && cpu.S390X.HasAESCBC && cpu.S390X.HasAESCTR && + (cpu.S390X.HasGHASH || cpu.S390X.HasAESGCM) + + hasAESGCMHardwareSupport = runtime.GOARCH == "amd64" && hasGCMAsmAMD64 || + runtime.GOARCH == "arm64" && hasGCMAsmARM64 || + runtime.GOARCH == "s390x" && hasGCMAsmS390X +) diff --git a/vendor/github.com/marten-seemann/qtls-go1-18/cpu_other.go b/vendor/github.com/marten-seemann/qtls-go1-18/cpu_other.go new file mode 100644 index 0000000000..33f7d21942 --- /dev/null +++ b/vendor/github.com/marten-seemann/qtls-go1-18/cpu_other.go @@ -0,0 +1,12 @@ +//go:build js +// +build js + +package qtls + +var ( + hasGCMAsmAMD64 = false + hasGCMAsmARM64 = false + hasGCMAsmS390X = false + + hasAESGCMHardwareSupport = false +) diff --git a/vendor/github.com/marten-seemann/qtls-go1-18/go.mod b/vendor/github.com/marten-seemann/qtls-go1-18/go.mod deleted file mode 100644 index d3cdad8036..0000000000 --- a/vendor/github.com/marten-seemann/qtls-go1-18/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/marten-seemann/qtls-go1-18 - -go 1.18 - -require ( - github.com/golang/mock v1.6.0 - github.com/marten-seemann/qtls-go1-15 v0.1.4 // indirect - golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d - golang.org/x/sys v0.0.0-20210510120138-977fb7262007 -) diff --git a/vendor/github.com/marten-seemann/qtls-go1-18/go.sum b/vendor/github.com/marten-seemann/qtls-go1-18/go.sum deleted file mode 100644 index 0412f14d58..0000000000 --- a/vendor/github.com/marten-seemann/qtls-go1-18/go.sum +++ /dev/null @@ -1,34 +0,0 @@ -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/marten-seemann/qtls-go1-15 v0.1.4 h1:RehYMOyRW8hPVEja1KBVsFVNSm35Jj9Mvs5yNoZZ28A= -github.com/marten-seemann/qtls-go1-15 v0.1.4/go.mod h1:GyFwywLKkRt+6mfU99csTEY1joMZz5vmB1WNZH3P81I= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d h1:1ZiEyfaQIg3Qh0EoqpwAakHVhecoE5wlSg5GjnafJGw= -golang.org/x/crypto v0.0.0-20200221231518-2aa609cf4a9d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/vendor/github.com/marten-seemann/tcp/go.mod b/vendor/github.com/marten-seemann/tcp/go.mod deleted file mode 100644 index 9ae91d3229..0000000000 --- a/vendor/github.com/marten-seemann/tcp/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/marten-seemann/tcp - -go 1.15 - -require ( - github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c - github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b - github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc - golang.org/x/net v0.0.0-20210119194325-5f4716e94777 -) diff --git a/vendor/github.com/marten-seemann/tcp/go.sum b/vendor/github.com/marten-seemann/tcp/go.sum deleted file mode 100644 index cb2a3aec31..0000000000 --- a/vendor/github.com/marten-seemann/tcp/go.sum +++ /dev/null @@ -1,12 +0,0 @@ -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c h1:bzE/A84HN25pxAuk9Eej1Kz9OUelF97nAc82bDquQI8= -github.com/mikioh/tcp v0.0.0-20190314235350-803a9b46060c/go.mod h1:0SQS9kMwD2VsyFEB++InYyBJroV/FRmBgcydeSUcJms= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b/go.mod h1:lxPUiZwKoFL8DUUmalo2yJJUCxbPKtm8OKfqr2/FTNU= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc/go.mod h1:cGKTAVKx4SxOuR/czcZ/E2RSJ3sfHs8FpHhQ5CWMf9s= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777 h1:003p0dJM77cxMSyCPFphvZf/Y5/NXf5fzg6ufd1/Oew= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/vendor/github.com/mattn/go-colorable/go.mod b/vendor/github.com/mattn/go-colorable/go.mod deleted file mode 100644 index 27351c0278..0000000000 --- a/vendor/github.com/mattn/go-colorable/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/mattn/go-colorable - -require ( - github.com/mattn/go-isatty v0.0.14 - golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 // indirect -) - -go 1.13 diff --git a/vendor/github.com/mattn/go-colorable/go.sum b/vendor/github.com/mattn/go-colorable/go.sum deleted file mode 100644 index 40c33b333c..0000000000 --- a/vendor/github.com/mattn/go-colorable/go.sum +++ /dev/null @@ -1,5 +0,0 @@ -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6 h1:foEbQz/B0Oz6YIqu/69kfXPYeFQAuuMYFkjaqXzl5Wo= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/vendor/github.com/mattn/go-isatty/go.mod b/vendor/github.com/mattn/go-isatty/go.mod deleted file mode 100644 index c9a20b7f3f..0000000000 --- a/vendor/github.com/mattn/go-isatty/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/mattn/go-isatty - -go 1.12 - -require golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c diff --git a/vendor/github.com/mattn/go-isatty/go.sum b/vendor/github.com/mattn/go-isatty/go.sum deleted file mode 100644 index 912e29cbc1..0000000000 --- a/vendor/github.com/mattn/go-isatty/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -golang.org/x/sys v0.0.0-20200116001909-b77594299b42 h1:vEOn+mP2zCOVzKckCZy6YsCtDblrpj/w7B9nxGNELpg= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= diff --git a/vendor/github.com/miekg/dns/README.md b/vendor/github.com/miekg/dns/README.md index 4ed217e7df..5a799d88f8 100644 --- a/vendor/github.com/miekg/dns/README.md +++ b/vendor/github.com/miekg/dns/README.md @@ -76,6 +76,7 @@ A not-so-up-to-date-list-that-may-be-actually-current: * https://www.misaka.io/services/dns * https://ping.sx/dig * https://fleetdeck.io/ +* https://github.com/markdingo/autoreverse Send pull request if you want to be listed here. diff --git a/vendor/github.com/miekg/dns/client.go b/vendor/github.com/miekg/dns/client.go index 6bae3a1ca7..31bf5759dd 100644 --- a/vendor/github.com/miekg/dns/client.go +++ b/vendor/github.com/miekg/dns/client.go @@ -18,6 +18,18 @@ const ( tcpIdleTimeout time.Duration = 8 * time.Second ) +func isPacketConn(c net.Conn) bool { + if _, ok := c.(net.PacketConn); !ok { + return false + } + + if ua, ok := c.LocalAddr().(*net.UnixAddr); ok { + return ua.Net == "unixgram" + } + + return true +} + // A Conn represents a connection to a DNS server. type Conn struct { net.Conn // a net.Conn holding the connection @@ -27,6 +39,14 @@ type Conn struct { tsigRequestMAC string } +func (co *Conn) tsigProvider() TsigProvider { + if co.TsigProvider != nil { + return co.TsigProvider + } + // tsigSecretProvider will return ErrSecret if co.TsigSecret is nil. + return tsigSecretProvider(co.TsigSecret) +} + // A Client defines parameters for a DNS client. type Client struct { Net string // if "tcp" or "tcp-tls" (DNS over TLS) a TCP query will be initiated, otherwise an UDP one (default is "" for UDP) @@ -221,7 +241,7 @@ func (c *Client) exchangeContext(ctx context.Context, m *Msg, co *Conn) (r *Msg, return nil, 0, err } - if _, ok := co.Conn.(net.PacketConn); ok { + if isPacketConn(co.Conn) { for { r, err = co.ReadMsg() // Ignore replies with mismatched IDs because they might be @@ -259,15 +279,8 @@ func (co *Conn) ReadMsg() (*Msg, error) { return m, err } if t := m.IsTsig(); t != nil { - if co.TsigProvider != nil { - err = tsigVerifyProvider(p, co.TsigProvider, co.tsigRequestMAC, false) - } else { - if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { - return m, ErrSecret - } - // Need to work on the original message p, as that was used to calculate the tsig. - err = TsigVerify(p, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) - } + // Need to work on the original message p, as that was used to calculate the tsig. + err = tsigVerifyProvider(p, co.tsigProvider(), co.tsigRequestMAC, false) } return m, err } @@ -282,7 +295,7 @@ func (co *Conn) ReadMsgHeader(hdr *Header) ([]byte, error) { err error ) - if _, ok := co.Conn.(net.PacketConn); ok { + if isPacketConn(co.Conn) { if co.UDPSize > MinMsgSize { p = make([]byte, co.UDPSize) } else { @@ -322,7 +335,7 @@ func (co *Conn) Read(p []byte) (n int, err error) { return 0, ErrConnEmpty } - if _, ok := co.Conn.(net.PacketConn); ok { + if isPacketConn(co.Conn) { // UDP connection return co.Conn.Read(p) } @@ -344,17 +357,8 @@ func (co *Conn) Read(p []byte) (n int, err error) { func (co *Conn) WriteMsg(m *Msg) (err error) { var out []byte if t := m.IsTsig(); t != nil { - mac := "" - if co.TsigProvider != nil { - out, mac, err = tsigGenerateProvider(m, co.TsigProvider, co.tsigRequestMAC, false) - } else { - if _, ok := co.TsigSecret[t.Hdr.Name]; !ok { - return ErrSecret - } - out, mac, err = TsigGenerate(m, co.TsigSecret[t.Hdr.Name], co.tsigRequestMAC, false) - } - // Set for the next read, although only used in zone transfers - co.tsigRequestMAC = mac + // Set tsigRequestMAC for the next read, although only used in zone transfers. + out, co.tsigRequestMAC, err = tsigGenerateProvider(m, co.tsigProvider(), co.tsigRequestMAC, false) } else { out, err = m.Pack() } @@ -371,7 +375,7 @@ func (co *Conn) Write(p []byte) (int, error) { return 0, &Error{err: "message too large"} } - if _, ok := co.Conn.(net.PacketConn); ok { + if isPacketConn(co.Conn) { return co.Conn.Write(p) } diff --git a/vendor/github.com/miekg/dns/dnssec.go b/vendor/github.com/miekg/dns/dnssec.go index 8539aae6c7..ea01aa81fc 100644 --- a/vendor/github.com/miekg/dns/dnssec.go +++ b/vendor/github.com/miekg/dns/dnssec.go @@ -65,6 +65,9 @@ var AlgorithmToString = map[uint8]string{ } // AlgorithmToHash is a map of algorithm crypto hash IDs to crypto.Hash's. +// For newer algorithm that do their own hashing (i.e. ED25519) the returned value +// is 0, implying no (external) hashing should occur. The non-exported identityHash is then +// used. var AlgorithmToHash = map[uint8]crypto.Hash{ RSAMD5: crypto.MD5, // Deprecated in RFC 6725 DSA: crypto.SHA1, @@ -74,7 +77,7 @@ var AlgorithmToHash = map[uint8]crypto.Hash{ ECDSAP256SHA256: crypto.SHA256, ECDSAP384SHA384: crypto.SHA384, RSASHA512: crypto.SHA512, - ED25519: crypto.Hash(0), + ED25519: 0, } // DNSSEC hashing algorithm codes. @@ -137,12 +140,12 @@ func (k *DNSKEY) KeyTag() uint16 { var keytag int switch k.Algorithm { case RSAMD5: - // Look at the bottom two bytes of the modules, which the last - // item in the pubkey. // This algorithm has been deprecated, but keep this key-tag calculation. + // Look at the bottom two bytes of the modules, which the last item in the pubkey. + // See https://www.rfc-editor.org/errata/eid193 . modulus, _ := fromBase64([]byte(k.PublicKey)) if len(modulus) > 1 { - x := binary.BigEndian.Uint16(modulus[len(modulus)-2:]) + x := binary.BigEndian.Uint16(modulus[len(modulus)-3:]) keytag = int(x) } default: @@ -296,35 +299,20 @@ func (rr *RRSIG) Sign(k crypto.Signer, rrset []RR) error { return err } - hash, ok := AlgorithmToHash[rr.Algorithm] - if !ok { - return ErrAlg + h, cryptohash, err := hashFromAlgorithm(rr.Algorithm) + if err != nil { + return err } switch rr.Algorithm { - case ED25519: - // ed25519 signs the raw message and performs hashing internally. - // All other supported signature schemes operate over the pre-hashed - // message, and thus ed25519 must be handled separately here. - // - // The raw message is passed directly into sign and crypto.Hash(0) is - // used to signal to the crypto.Signer that the data has not been hashed. - signature, err := sign(k, append(signdata, wire...), crypto.Hash(0), rr.Algorithm) - if err != nil { - return err - } - - rr.Signature = toBase64(signature) - return nil case RSAMD5, DSA, DSANSEC3SHA1: // See RFC 6944. return ErrAlg default: - h := hash.New() h.Write(signdata) h.Write(wire) - signature, err := sign(k, h.Sum(nil), hash, rr.Algorithm) + signature, err := sign(k, h.Sum(nil), cryptohash, rr.Algorithm) if err != nil { return err } @@ -341,7 +329,7 @@ func sign(k crypto.Signer, hashed []byte, hash crypto.Hash, alg uint8) ([]byte, } switch alg { - case RSASHA1, RSASHA1NSEC3SHA1, RSASHA256, RSASHA512: + case RSASHA1, RSASHA1NSEC3SHA1, RSASHA256, RSASHA512, ED25519: return signature, nil case ECDSAP256SHA256, ECDSAP384SHA384: ecdsaSignature := &struct { @@ -362,8 +350,6 @@ func sign(k crypto.Signer, hashed []byte, hash crypto.Hash, alg uint8) ([]byte, signature := intToBytes(ecdsaSignature.R, intlen) signature = append(signature, intToBytes(ecdsaSignature.S, intlen)...) return signature, nil - case ED25519: - return signature, nil default: return nil, ErrAlg } @@ -437,9 +423,9 @@ func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error { // remove the domain name and assume its ours? } - hash, ok := AlgorithmToHash[rr.Algorithm] - if !ok { - return ErrAlg + h, cryptohash, err := hashFromAlgorithm(rr.Algorithm) + if err != nil { + return err } switch rr.Algorithm { @@ -450,10 +436,9 @@ func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error { return ErrKey } - h := hash.New() h.Write(signeddata) h.Write(wire) - return rsa.VerifyPKCS1v15(pubkey, hash, h.Sum(nil), sigbuf) + return rsa.VerifyPKCS1v15(pubkey, cryptohash, h.Sum(nil), sigbuf) case ECDSAP256SHA256, ECDSAP384SHA384: pubkey := k.publicKeyECDSA() @@ -465,7 +450,6 @@ func (rr *RRSIG) Verify(k *DNSKEY, rrset []RR) error { r := new(big.Int).SetBytes(sigbuf[:len(sigbuf)/2]) s := new(big.Int).SetBytes(sigbuf[len(sigbuf)/2:]) - h := hash.New() h.Write(signeddata) h.Write(wire) if ecdsa.Verify(pubkey, h.Sum(nil), r, s) { diff --git a/vendor/github.com/miekg/dns/doc.go b/vendor/github.com/miekg/dns/doc.go index 5c83f82e49..f00f5722c2 100644 --- a/vendor/github.com/miekg/dns/doc.go +++ b/vendor/github.com/miekg/dns/doc.go @@ -251,7 +251,7 @@ information. EDNS0 EDNS0 is an extension mechanism for the DNS defined in RFC 2671 and updated by -RFC 6891. It defines an new RR type, the OPT RR, which is then completely +RFC 6891. It defines a new RR type, the OPT RR, which is then completely abused. Basic use pattern for creating an (empty) OPT RR: diff --git a/vendor/github.com/miekg/dns/edns.go b/vendor/github.com/miekg/dns/edns.go index 862e534399..14568c2e96 100644 --- a/vendor/github.com/miekg/dns/edns.go +++ b/vendor/github.com/miekg/dns/edns.go @@ -584,14 +584,17 @@ func (e *EDNS0_N3U) copy() EDNS0 { return &EDNS0_N3U{e.Code, e.AlgCode} } type EDNS0_EXPIRE struct { Code uint16 // Always EDNS0EXPIRE Expire uint32 + Empty bool // Empty is used to signal an empty Expire option in a backwards compatible way, it's not used on the wire. } // Option implements the EDNS0 interface. func (e *EDNS0_EXPIRE) Option() uint16 { return EDNS0EXPIRE } -func (e *EDNS0_EXPIRE) String() string { return strconv.FormatUint(uint64(e.Expire), 10) } -func (e *EDNS0_EXPIRE) copy() EDNS0 { return &EDNS0_EXPIRE{e.Code, e.Expire} } +func (e *EDNS0_EXPIRE) copy() EDNS0 { return &EDNS0_EXPIRE{e.Code, e.Expire, e.Empty} } func (e *EDNS0_EXPIRE) pack() ([]byte, error) { + if e.Empty { + return []byte{}, nil + } b := make([]byte, 4) binary.BigEndian.PutUint32(b, e.Expire) return b, nil @@ -600,15 +603,24 @@ func (e *EDNS0_EXPIRE) pack() ([]byte, error) { func (e *EDNS0_EXPIRE) unpack(b []byte) error { if len(b) == 0 { // zero-length EXPIRE query, see RFC 7314 Section 2 + e.Empty = true return nil } if len(b) < 4 { return ErrBuf } e.Expire = binary.BigEndian.Uint32(b) + e.Empty = false return nil } +func (e *EDNS0_EXPIRE) String() (s string) { + if e.Empty { + return "" + } + return strconv.FormatUint(uint64(e.Expire), 10) +} + // The EDNS0_LOCAL option is used for local/experimental purposes. The option // code is recommended to be within the range [EDNS0LOCALSTART, EDNS0LOCALEND] // (RFC6891), although any unassigned code can actually be used. The content of diff --git a/vendor/github.com/miekg/dns/go.mod b/vendor/github.com/miekg/dns/go.mod deleted file mode 100644 index f736320483..0000000000 --- a/vendor/github.com/miekg/dns/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/miekg/dns - -go 1.14 - -require ( - golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985 - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c - golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c - golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 -) diff --git a/vendor/github.com/miekg/dns/go.sum b/vendor/github.com/miekg/dns/go.sum deleted file mode 100644 index 008f5fd6f8..0000000000 --- a/vendor/github.com/miekg/dns/go.sum +++ /dev/null @@ -1,33 +0,0 @@ -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985 h1:4CSI6oo7cOjJKajidEljs9h+uP0rRZBPPPhcCbj5mw8= -golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c h1:F1jZWGFhYfh0Ci55sIpILtKKK8p3i2/krTr0H1rg74I= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2 h1:BonxutuHCTL0rBDnZlKjpGIQFTjyUVTexFOdWkB6Fg0= -golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/vendor/github.com/miekg/dns/hash.go b/vendor/github.com/miekg/dns/hash.go new file mode 100644 index 0000000000..7d4183e027 --- /dev/null +++ b/vendor/github.com/miekg/dns/hash.go @@ -0,0 +1,31 @@ +package dns + +import ( + "bytes" + "crypto" + "hash" +) + +// identityHash will not hash, it only buffers the data written into it and returns it as-is. +type identityHash struct { + b *bytes.Buffer +} + +// Implement the hash.Hash interface. + +func (i identityHash) Write(b []byte) (int, error) { return i.b.Write(b) } +func (i identityHash) Size() int { return i.b.Len() } +func (i identityHash) BlockSize() int { return 1024 } +func (i identityHash) Reset() { i.b.Reset() } +func (i identityHash) Sum(b []byte) []byte { return append(b, i.b.Bytes()...) } + +func hashFromAlgorithm(alg uint8) (hash.Hash, crypto.Hash, error) { + hashnumber, ok := AlgorithmToHash[alg] + if !ok { + return nil, 0, ErrAlg + } + if hashnumber == 0 { + return identityHash{b: &bytes.Buffer{}}, hashnumber, nil + } + return hashnumber.New(), hashnumber, nil +} diff --git a/vendor/github.com/miekg/dns/msg.go b/vendor/github.com/miekg/dns/msg.go index ead4b6931d..60a2e8c3d6 100644 --- a/vendor/github.com/miekg/dns/msg.go +++ b/vendor/github.com/miekg/dns/msg.go @@ -901,6 +901,11 @@ func (dns *Msg) String() string { s += "ANSWER: " + strconv.Itoa(len(dns.Answer)) + ", " s += "AUTHORITY: " + strconv.Itoa(len(dns.Ns)) + ", " s += "ADDITIONAL: " + strconv.Itoa(len(dns.Extra)) + "\n" + opt := dns.IsEdns0() + if opt != nil { + // OPT PSEUDOSECTION + s += opt.String() + "\n" + } if len(dns.Question) > 0 { s += "\n;; QUESTION SECTION:\n" for _, r := range dns.Question { @@ -923,10 +928,10 @@ func (dns *Msg) String() string { } } } - if len(dns.Extra) > 0 { + if len(dns.Extra) > 0 && (opt == nil || len(dns.Extra) > 1) { s += "\n;; ADDITIONAL SECTION:\n" for _, r := range dns.Extra { - if r != nil { + if r != nil && r.Header().Rrtype != TypeOPT { s += r.String() + "\n" } } diff --git a/vendor/github.com/miekg/dns/msg_helpers.go b/vendor/github.com/miekg/dns/msg_helpers.go index 10754c8b85..b049028b70 100644 --- a/vendor/github.com/miekg/dns/msg_helpers.go +++ b/vendor/github.com/miekg/dns/msg_helpers.go @@ -558,6 +558,16 @@ func packDataNsec(bitmap []uint16, msg []byte, off int) (int, error) { if len(bitmap) == 0 { return off, nil } + if off > len(msg) { + return off, &Error{err: "overflow packing nsec"} + } + toZero := msg[off:] + if maxLen := typeBitMapLen(bitmap); maxLen < len(toZero) { + toZero = toZero[:maxLen] + } + for i := range toZero { + toZero[i] = 0 + } var lastwindow, lastlength uint16 for _, t := range bitmap { window := t / 256 diff --git a/vendor/github.com/miekg/dns/server.go b/vendor/github.com/miekg/dns/server.go index b2a63bda49..b962e6f35c 100644 --- a/vendor/github.com/miekg/dns/server.go +++ b/vendor/github.com/miekg/dns/server.go @@ -71,12 +71,12 @@ type response struct { tsigTimersOnly bool tsigStatus error tsigRequestMAC string - tsigSecret map[string]string // the tsig secrets - udp net.PacketConn // i/o connection if UDP was used - tcp net.Conn // i/o connection if TCP was used - udpSession *SessionUDP // oob data to get egress interface right - pcSession net.Addr // address to use when writing to a generic net.PacketConn - writer Writer // writer to output the raw DNS bits + tsigProvider TsigProvider + udp net.PacketConn // i/o connection if UDP was used + tcp net.Conn // i/o connection if TCP was used + udpSession *SessionUDP // oob data to get egress interface right + pcSession net.Addr // address to use when writing to a generic net.PacketConn + writer Writer // writer to output the raw DNS bits } // handleRefused returns a HandlerFunc that returns REFUSED for every request it gets. @@ -211,6 +211,8 @@ type Server struct { WriteTimeout time.Duration // TCP idle timeout for multiple queries, if nil, defaults to 8 * time.Second (RFC 5966). IdleTimeout func() time.Duration + // An implementation of the TsigProvider interface. If defined it replaces TsigSecret and is used for all TSIG operations. + TsigProvider TsigProvider // Secret(s) for Tsig map[]. The zonename must be in canonical form (lowercase, fqdn, see RFC 4034 Section 6.2). TsigSecret map[string]string // If NotifyStartedFunc is set it is called once the server has started listening. @@ -238,6 +240,16 @@ type Server struct { udpPool sync.Pool } +func (srv *Server) tsigProvider() TsigProvider { + if srv.TsigProvider != nil { + return srv.TsigProvider + } + if srv.TsigSecret != nil { + return tsigSecretProvider(srv.TsigSecret) + } + return nil +} + func (srv *Server) isStarted() bool { srv.lock.RLock() started := srv.started @@ -526,7 +538,7 @@ func (srv *Server) serveUDP(l net.PacketConn) error { // Serve a new TCP connection. func (srv *Server) serveTCPConn(wg *sync.WaitGroup, rw net.Conn) { - w := &response{tsigSecret: srv.TsigSecret, tcp: rw} + w := &response{tsigProvider: srv.tsigProvider(), tcp: rw} if srv.DecorateWriter != nil { w.writer = srv.DecorateWriter(w) } else { @@ -581,7 +593,7 @@ func (srv *Server) serveTCPConn(wg *sync.WaitGroup, rw net.Conn) { // Serve a new UDP request. func (srv *Server) serveUDPPacket(wg *sync.WaitGroup, m []byte, u net.PacketConn, udpSession *SessionUDP, pcSession net.Addr) { - w := &response{tsigSecret: srv.TsigSecret, udp: u, udpSession: udpSession, pcSession: pcSession} + w := &response{tsigProvider: srv.tsigProvider(), udp: u, udpSession: udpSession, pcSession: pcSession} if srv.DecorateWriter != nil { w.writer = srv.DecorateWriter(w) } else { @@ -632,15 +644,11 @@ func (srv *Server) serveDNS(m []byte, w *response) { } w.tsigStatus = nil - if w.tsigSecret != nil { + if w.tsigProvider != nil { if t := req.IsTsig(); t != nil { - if secret, ok := w.tsigSecret[t.Hdr.Name]; ok { - w.tsigStatus = TsigVerify(m, secret, "", false) - } else { - w.tsigStatus = ErrSecret - } + w.tsigStatus = tsigVerifyProvider(m, w.tsigProvider, "", false) w.tsigTimersOnly = false - w.tsigRequestMAC = req.Extra[len(req.Extra)-1].(*TSIG).MAC + w.tsigRequestMAC = t.MAC } } @@ -718,9 +726,9 @@ func (w *response) WriteMsg(m *Msg) (err error) { } var data []byte - if w.tsigSecret != nil { // if no secrets, dont check for the tsig (which is a longer check) + if w.tsigProvider != nil { // if no provider, dont check for the tsig (which is a longer check) if t := m.IsTsig(); t != nil { - data, w.tsigRequestMAC, err = TsigGenerate(m, w.tsigSecret[t.Hdr.Name], w.tsigRequestMAC, w.tsigTimersOnly) + data, w.tsigRequestMAC, err = tsigGenerateProvider(m, w.tsigProvider, w.tsigRequestMAC, w.tsigTimersOnly) if err != nil { return err } diff --git a/vendor/github.com/miekg/dns/sig0.go b/vendor/github.com/miekg/dns/sig0.go index e781c9bb6c..2c4b103521 100644 --- a/vendor/github.com/miekg/dns/sig0.go +++ b/vendor/github.com/miekg/dns/sig0.go @@ -3,6 +3,7 @@ package dns import ( "crypto" "crypto/ecdsa" + "crypto/ed25519" "crypto/rsa" "encoding/binary" "math/big" @@ -38,18 +39,17 @@ func (rr *SIG) Sign(k crypto.Signer, m *Msg) ([]byte, error) { } buf = buf[:off:cap(buf)] - hash, ok := AlgorithmToHash[rr.Algorithm] - if !ok { - return nil, ErrAlg + h, cryptohash, err := hashFromAlgorithm(rr.Algorithm) + if err != nil { + return nil, err } - hasher := hash.New() // Write SIG rdata - hasher.Write(buf[len(mbuf)+1+2+2+4+2:]) + h.Write(buf[len(mbuf)+1+2+2+4+2:]) // Write message - hasher.Write(buf[:len(mbuf)]) + h.Write(buf[:len(mbuf)]) - signature, err := sign(k, hasher.Sum(nil), hash, rr.Algorithm) + signature, err := sign(k, h.Sum(nil), cryptohash, rr.Algorithm) if err != nil { return nil, err } @@ -82,20 +82,10 @@ func (rr *SIG) Verify(k *KEY, buf []byte) error { return ErrKey } - var hash crypto.Hash - switch rr.Algorithm { - case RSASHA1: - hash = crypto.SHA1 - case RSASHA256, ECDSAP256SHA256: - hash = crypto.SHA256 - case ECDSAP384SHA384: - hash = crypto.SHA384 - case RSASHA512: - hash = crypto.SHA512 - default: - return ErrAlg - } - hasher := hash.New() + h, cryptohash, err := hashFromAlgorithm(rr.Algorithm) + if err != nil { + return err + } buflen := len(buf) qdc := binary.BigEndian.Uint16(buf[4:]) @@ -103,7 +93,6 @@ func (rr *SIG) Verify(k *KEY, buf []byte) error { auc := binary.BigEndian.Uint16(buf[8:]) adc := binary.BigEndian.Uint16(buf[10:]) offset := headerSize - var err error for i := uint16(0); i < qdc && offset < buflen; i++ { _, offset, err = UnpackDomainName(buf, offset) if err != nil { @@ -166,21 +155,21 @@ func (rr *SIG) Verify(k *KEY, buf []byte) error { return &Error{err: "signer name doesn't match key name"} } sigend := offset - hasher.Write(buf[sigstart:sigend]) - hasher.Write(buf[:10]) - hasher.Write([]byte{ + h.Write(buf[sigstart:sigend]) + h.Write(buf[:10]) + h.Write([]byte{ byte((adc - 1) << 8), byte(adc - 1), }) - hasher.Write(buf[12:bodyend]) + h.Write(buf[12:bodyend]) - hashed := hasher.Sum(nil) + hashed := h.Sum(nil) sig := buf[sigend:] switch k.Algorithm { case RSASHA1, RSASHA256, RSASHA512: pk := k.publicKeyRSA() if pk != nil { - return rsa.VerifyPKCS1v15(pk, hash, hashed, sig) + return rsa.VerifyPKCS1v15(pk, cryptohash, hashed, sig) } case ECDSAP256SHA256, ECDSAP384SHA384: pk := k.publicKeyECDSA() @@ -192,6 +181,14 @@ func (rr *SIG) Verify(k *KEY, buf []byte) error { } return ErrSig } + case ED25519: + pk := k.publicKeyED25519() + if pk != nil { + if ed25519.Verify(pk, hashed, sig) { + return nil + } + return ErrSig + } } return ErrKeyAlg } diff --git a/vendor/github.com/miekg/dns/svcb.go b/vendor/github.com/miekg/dns/svcb.go index 3344253c2b..ea58710da9 100644 --- a/vendor/github.com/miekg/dns/svcb.go +++ b/vendor/github.com/miekg/dns/svcb.go @@ -4,6 +4,7 @@ import ( "bytes" "encoding/binary" "errors" + "fmt" "net" "sort" "strconv" @@ -13,16 +14,18 @@ import ( // SVCBKey is the type of the keys used in the SVCB RR. type SVCBKey uint16 -// Keys defined in draft-ietf-dnsop-svcb-https-01 Section 12.3.2. +// Keys defined in draft-ietf-dnsop-svcb-https-08 Section 14.3.2. const ( - SVCB_MANDATORY SVCBKey = 0 - SVCB_ALPN SVCBKey = 1 - SVCB_NO_DEFAULT_ALPN SVCBKey = 2 - SVCB_PORT SVCBKey = 3 - SVCB_IPV4HINT SVCBKey = 4 - SVCB_ECHCONFIG SVCBKey = 5 - SVCB_IPV6HINT SVCBKey = 6 - svcb_RESERVED SVCBKey = 65535 + SVCB_MANDATORY SVCBKey = iota + SVCB_ALPN + SVCB_NO_DEFAULT_ALPN + SVCB_PORT + SVCB_IPV4HINT + SVCB_ECHCONFIG + SVCB_IPV6HINT + SVCB_DOHPATH // draft-ietf-add-svcb-dns-02 Section 9 + + svcb_RESERVED SVCBKey = 65535 ) var svcbKeyToStringMap = map[SVCBKey]string{ @@ -31,8 +34,9 @@ var svcbKeyToStringMap = map[SVCBKey]string{ SVCB_NO_DEFAULT_ALPN: "no-default-alpn", SVCB_PORT: "port", SVCB_IPV4HINT: "ipv4hint", - SVCB_ECHCONFIG: "echconfig", + SVCB_ECHCONFIG: "ech", SVCB_IPV6HINT: "ipv6hint", + SVCB_DOHPATH: "dohpath", } var svcbStringToKeyMap = reverseSVCBKeyMap(svcbKeyToStringMap) @@ -167,10 +171,14 @@ func (rr *SVCB) parse(c *zlexer, o string) *ParseError { } l, _ = c.Next() } + + // "In AliasMode, records SHOULD NOT include any SvcParams, and recipients MUST + // ignore any SvcParams that are present." + // However, we don't check rr.Priority == 0 && len(xs) > 0 here + // It is the responsibility of the user of the library to check this. + // This is to encourage the fixing of the source of this error. + rr.Value = xs - if rr.Priority == 0 && len(xs) > 0 { - return &ParseError{l.token, "SVCB aliasform can't have values", l} - } return nil } @@ -191,6 +199,8 @@ func makeSVCBKeyValue(key SVCBKey) SVCBKeyValue { return new(SVCBECHConfig) case SVCB_IPV6HINT: return new(SVCBIPv6Hint) + case SVCB_DOHPATH: + return new(SVCBDoHPath) case svcb_RESERVED: return nil default: @@ -200,16 +210,24 @@ func makeSVCBKeyValue(key SVCBKey) SVCBKeyValue { } } -// SVCB RR. See RFC xxxx (https://tools.ietf.org/html/draft-ietf-dnsop-svcb-https-01). +// SVCB RR. See RFC xxxx (https://tools.ietf.org/html/draft-ietf-dnsop-svcb-https-08). +// +// NOTE: The HTTPS/SVCB RFCs are in the draft stage. +// The API, including constants and types related to SVCBKeyValues, may +// change in future versions in accordance with the latest drafts. type SVCB struct { Hdr RR_Header - Priority uint16 + Priority uint16 // If zero, Value must be empty or discarded by the user of this library Target string `dns:"domain-name"` - Value []SVCBKeyValue `dns:"pairs"` // Value must be empty if Priority is zero. + Value []SVCBKeyValue `dns:"pairs"` } // HTTPS RR. Everything valid for SVCB applies to HTTPS as well. // Except that the HTTPS record is intended for use with the HTTP and HTTPS protocols. +// +// NOTE: The HTTPS/SVCB RFCs are in the draft stage. +// The API, including constants and types related to SVCBKeyValues, may +// change in future versions in accordance with the latest drafts. type HTTPS struct { SVCB } @@ -235,15 +253,29 @@ type SVCBKeyValue interface { } // SVCBMandatory pair adds to required keys that must be interpreted for the RR -// to be functional. +// to be functional. If ignored, the whole RRSet must be ignored. +// "port" and "no-default-alpn" are mandatory by default if present, +// so they shouldn't be included here. +// +// It is incumbent upon the user of this library to reject the RRSet if +// or avoid constructing such an RRSet that: +// - "mandatory" is included as one of the keys of mandatory +// - no key is listed multiple times in mandatory +// - all keys listed in mandatory are present +// - escape sequences are not used in mandatory +// - mandatory, when present, lists at least one key +// // Basic use pattern for creating a mandatory option: // // s := &dns.SVCB{Hdr: dns.RR_Header{Name: ".", Rrtype: dns.TypeSVCB, Class: dns.ClassINET}} // e := new(dns.SVCBMandatory) -// e.Code = []uint16{65403} +// e.Code = []uint16{dns.SVCB_ALPN} // s.Value = append(s.Value, e) +// t := new(dns.SVCBAlpn) +// t.Alpn = []string{"xmpp-client"} +// s.Value = append(s.Value, t) type SVCBMandatory struct { - Code []SVCBKey // Must not include mandatory + Code []SVCBKey } func (*SVCBMandatory) Key() SVCBKey { return SVCB_MANDATORY } @@ -302,7 +334,8 @@ func (s *SVCBMandatory) copy() SVCBKeyValue { } // SVCBAlpn pair is used to list supported connection protocols. -// Protocol ids can be found at: +// The user of this library must ensure that at least one protocol is listed when alpn is present. +// Protocol IDs can be found at: // https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids // Basic use pattern for creating an alpn option: // @@ -310,13 +343,57 @@ func (s *SVCBMandatory) copy() SVCBKeyValue { // h.Hdr = dns.RR_Header{Name: ".", Rrtype: dns.TypeHTTPS, Class: dns.ClassINET} // e := new(dns.SVCBAlpn) // e.Alpn = []string{"h2", "http/1.1"} -// h.Value = append(o.Value, e) +// h.Value = append(h.Value, e) type SVCBAlpn struct { Alpn []string } -func (*SVCBAlpn) Key() SVCBKey { return SVCB_ALPN } -func (s *SVCBAlpn) String() string { return strings.Join(s.Alpn, ",") } +func (*SVCBAlpn) Key() SVCBKey { return SVCB_ALPN } + +func (s *SVCBAlpn) String() string { + // An ALPN value is a comma-separated list of values, each of which can be + // an arbitrary binary value. In order to allow parsing, the comma and + // backslash characters are themselves excaped. + // + // However, this escaping is done in addition to the normal escaping which + // happens in zone files, meaning that these values must be + // double-escaped. This looks terrible, so if you see a never-ending + // sequence of backslash in a zone file this may be why. + // + // https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-08#appendix-A.1 + var str strings.Builder + for i, alpn := range s.Alpn { + // 4*len(alpn) is the worst case where we escape every character in the alpn as \123, plus 1 byte for the ',' separating the alpn from others + str.Grow(4*len(alpn) + 1) + if i > 0 { + str.WriteByte(',') + } + for j := 0; j < len(alpn); j++ { + e := alpn[j] + if ' ' > e || e > '~' { + str.WriteString(escapeByte(e)) + continue + } + switch e { + // We escape a few characters which may confuse humans or parsers. + case '"', ';', ' ': + str.WriteByte('\\') + str.WriteByte(e) + // The comma and backslash characters themselves must be + // doubly-escaped. We use `\\` for the first backslash and + // the escaped numeric value for the other value. We especially + // don't want a comma in the output. + case ',': + str.WriteString(`\\\044`) + case '\\': + str.WriteString(`\\\092`) + default: + str.WriteByte(e) + } + } + } + return str.String() +} func (s *SVCBAlpn) pack() ([]byte, error) { // Liberally estimate the size of an alpn as 10 octets @@ -351,7 +428,47 @@ func (s *SVCBAlpn) unpack(b []byte) error { } func (s *SVCBAlpn) parse(b string) error { - s.Alpn = strings.Split(b, ",") + if len(b) == 0 { + s.Alpn = []string{} + return nil + } + + alpn := []string{} + a := []byte{} + for p := 0; p < len(b); { + c, q := nextByte(b, p) + if q == 0 { + return errors.New("dns: svcbalpn: unterminated escape") + } + p += q + // If we find a comma, we have finished reading an alpn. + if c == ',' { + if len(a) == 0 { + return errors.New("dns: svcbalpn: empty protocol identifier") + } + alpn = append(alpn, string(a)) + a = []byte{} + continue + } + // If it's a backslash, we need to handle a comma-separated list. + if c == '\\' { + dc, dq := nextByte(b, p) + if dq == 0 { + return errors.New("dns: svcbalpn: unterminated escape decoding comma-separated list") + } + if dc != '\\' && dc != ',' { + return errors.New("dns: svcbalpn: bad escaped character decoding comma-separated list") + } + p += dq + c = dc + } + a = append(a, c) + } + // Add the final alpn. + if len(a) == 0 { + return errors.New("dns: svcbalpn: last protocol identifier empty") + } + s.Alpn = append(alpn, string(a)) return nil } @@ -370,9 +487,13 @@ func (s *SVCBAlpn) copy() SVCBKeyValue { } // SVCBNoDefaultAlpn pair signifies no support for default connection protocols. +// Should be used in conjunction with alpn. // Basic use pattern for creating a no-default-alpn option: // // s := &dns.SVCB{Hdr: dns.RR_Header{Name: ".", Rrtype: dns.TypeSVCB, Class: dns.ClassINET}} +// t := new(dns.SVCBAlpn) +// t.Alpn = []string{"xmpp-client"} +// s.Value = append(s.Value, t) // e := new(dns.SVCBNoDefaultAlpn) // s.Value = append(s.Value, e) type SVCBNoDefaultAlpn struct{} @@ -385,14 +506,14 @@ func (*SVCBNoDefaultAlpn) len() int { return 0 } func (*SVCBNoDefaultAlpn) unpack(b []byte) error { if len(b) != 0 { - return errors.New("dns: svcbnodefaultalpn: no_default_alpn must have no value") + return errors.New("dns: svcbnodefaultalpn: no-default-alpn must have no value") } return nil } func (*SVCBNoDefaultAlpn) parse(b string) error { if b != "" { - return errors.New("dns: svcbnodefaultalpn: no_default_alpn must have no value") + return errors.New("dns: svcbnodefaultalpn: no-default-alpn must have no value") } return nil } @@ -523,7 +644,7 @@ func (s *SVCBIPv4Hint) copy() SVCBKeyValue { } // SVCBECHConfig pair contains the ECHConfig structure defined in draft-ietf-tls-esni [RFC xxxx]. -// Basic use pattern for creating an echconfig option: +// Basic use pattern for creating an ech option: // // h := new(dns.HTTPS) // h.Hdr = dns.RR_Header{Name: ".", Rrtype: dns.TypeHTTPS, Class: dns.ClassINET} @@ -531,7 +652,7 @@ func (s *SVCBIPv4Hint) copy() SVCBKeyValue { // e.ECH = []byte{0xfe, 0x08, ...} // h.Value = append(h.Value, e) type SVCBECHConfig struct { - ECH []byte + ECH []byte // Specifically ECHConfigList including the redundant length prefix } func (*SVCBECHConfig) Key() SVCBKey { return SVCB_ECHCONFIG } @@ -555,7 +676,7 @@ func (s *SVCBECHConfig) unpack(b []byte) error { func (s *SVCBECHConfig) parse(b string) error { x, err := fromBase64([]byte(b)) if err != nil { - return errors.New("dns: svcbechconfig: bad base64 echconfig") + return errors.New("dns: svcbech: bad base64 ech") } s.ECH = x return nil @@ -618,9 +739,6 @@ func (s *SVCBIPv6Hint) String() string { } func (s *SVCBIPv6Hint) parse(b string) error { - if strings.Contains(b, ".") { - return errors.New("dns: svcbipv6hint: expected ipv6, got ipv4") - } str := strings.Split(b, ",") dst := make([]net.IP, len(str)) for i, e := range str { @@ -628,6 +746,9 @@ func (s *SVCBIPv6Hint) parse(b string) error { if ip == nil { return errors.New("dns: svcbipv6hint: bad ip") } + if ip.To4() != nil { + return errors.New("dns: svcbipv6hint: expected ipv6, got ipv4-mapped-ipv6") + } dst[i] = ip } s.Hint = dst @@ -645,6 +766,54 @@ func (s *SVCBIPv6Hint) copy() SVCBKeyValue { } } +// SVCBDoHPath pair is used to indicate the URI template that the +// clients may use to construct a DNS over HTTPS URI. +// +// See RFC xxxx (https://datatracker.ietf.org/doc/html/draft-ietf-add-svcb-dns-02) +// and RFC yyyy (https://datatracker.ietf.org/doc/html/draft-ietf-add-ddr-06). +// +// A basic example of using the dohpath option together with the alpn +// option to indicate support for DNS over HTTPS on a certain path: +// +// s := new(dns.SVCB) +// s.Hdr = dns.RR_Header{Name: ".", Rrtype: dns.TypeSVCB, Class: dns.ClassINET} +// e := new(dns.SVCBAlpn) +// e.Alpn = []string{"h2", "h3"} +// p := new(dns.SVCBDoHPath) +// p.Template = "/dns-query{?dns}" +// s.Value = append(s.Value, e, p) +// +// The parsing currently doesn't validate that Template is a valid +// RFC 6570 URI template. +type SVCBDoHPath struct { + Template string +} + +func (*SVCBDoHPath) Key() SVCBKey { return SVCB_DOHPATH } +func (s *SVCBDoHPath) String() string { return svcbParamToStr([]byte(s.Template)) } +func (s *SVCBDoHPath) len() int { return len(s.Template) } +func (s *SVCBDoHPath) pack() ([]byte, error) { return []byte(s.Template), nil } + +func (s *SVCBDoHPath) unpack(b []byte) error { + s.Template = string(b) + return nil +} + +func (s *SVCBDoHPath) parse(b string) error { + template, err := svcbParseParam(b) + if err != nil { + return fmt.Errorf("dns: svcbdohpath: %w", err) + } + s.Template = string(template) + return nil +} + +func (s *SVCBDoHPath) copy() SVCBKeyValue { + return &SVCBDoHPath{ + Template: s.Template, + } +} + // SVCBLocal pair is intended for experimental/private use. The key is recommended // to be in the range [SVCB_PRIVATE_LOWER, SVCB_PRIVATE_UPPER]. // Basic use pattern for creating a keyNNNNN option: @@ -661,6 +830,7 @@ type SVCBLocal struct { } func (s *SVCBLocal) Key() SVCBKey { return s.KeyCode } +func (s *SVCBLocal) String() string { return svcbParamToStr(s.Data) } func (s *SVCBLocal) pack() ([]byte, error) { return append([]byte(nil), s.Data...), nil } func (s *SVCBLocal) len() int { return len(s.Data) } @@ -669,50 +839,10 @@ func (s *SVCBLocal) unpack(b []byte) error { return nil } -func (s *SVCBLocal) String() string { - var str strings.Builder - str.Grow(4 * len(s.Data)) - for _, e := range s.Data { - if ' ' <= e && e <= '~' { - switch e { - case '"', ';', ' ', '\\': - str.WriteByte('\\') - str.WriteByte(e) - default: - str.WriteByte(e) - } - } else { - str.WriteString(escapeByte(e)) - } - } - return str.String() -} - func (s *SVCBLocal) parse(b string) error { - data := make([]byte, 0, len(b)) - for i := 0; i < len(b); { - if b[i] != '\\' { - data = append(data, b[i]) - i++ - continue - } - if i+1 == len(b) { - return errors.New("dns: svcblocal: svcb private/experimental key escape unterminated") - } - if isDigit(b[i+1]) { - if i+3 < len(b) && isDigit(b[i+2]) && isDigit(b[i+3]) { - a, err := strconv.ParseUint(b[i+1:i+4], 10, 8) - if err == nil { - i += 4 - data = append(data, byte(a)) - continue - } - } - return errors.New("dns: svcblocal: svcb private/experimental key bad escaped octet") - } else { - data = append(data, b[i+1]) - i += 2 - } + data, err := svcbParseParam(b) + if err != nil { + return fmt.Errorf("dns: svcblocal: svcb private/experimental key %w", err) } s.Data = data return nil @@ -753,3 +883,53 @@ func areSVCBPairArraysEqual(a []SVCBKeyValue, b []SVCBKeyValue) bool { } return true } + +// svcbParamStr converts the value of an SVCB parameter into a DNS presentation-format string. +func svcbParamToStr(s []byte) string { + var str strings.Builder + str.Grow(4 * len(s)) + for _, e := range s { + if ' ' <= e && e <= '~' { + switch e { + case '"', ';', ' ', '\\': + str.WriteByte('\\') + str.WriteByte(e) + default: + str.WriteByte(e) + } + } else { + str.WriteString(escapeByte(e)) + } + } + return str.String() +} + +// svcbParseParam parses a DNS presentation-format string into an SVCB parameter value. +func svcbParseParam(b string) ([]byte, error) { + data := make([]byte, 0, len(b)) + for i := 0; i < len(b); { + if b[i] != '\\' { + data = append(data, b[i]) + i++ + continue + } + if i+1 == len(b) { + return nil, errors.New("escape unterminated") + } + if isDigit(b[i+1]) { + if i+3 < len(b) && isDigit(b[i+2]) && isDigit(b[i+3]) { + a, err := strconv.ParseUint(b[i+1:i+4], 10, 8) + if err == nil { + i += 4 + data = append(data, byte(a)) + continue + } + } + return nil, errors.New("bad escaped octet") + } else { + data = append(data, b[i+1]) + i += 2 + } + } + return data, nil +} diff --git a/vendor/github.com/miekg/dns/tsig.go b/vendor/github.com/miekg/dns/tsig.go index 55ca752135..8b37cc8410 100644 --- a/vendor/github.com/miekg/dns/tsig.go +++ b/vendor/github.com/miekg/dns/tsig.go @@ -74,6 +74,24 @@ func (key tsigHMACProvider) Verify(msg []byte, t *TSIG) error { return nil } +type tsigSecretProvider map[string]string + +func (ts tsigSecretProvider) Generate(msg []byte, t *TSIG) ([]byte, error) { + key, ok := ts[t.Hdr.Name] + if !ok { + return nil, ErrSecret + } + return tsigHMACProvider(key).Generate(msg, t) +} + +func (ts tsigSecretProvider) Verify(msg []byte, t *TSIG) error { + key, ok := ts[t.Hdr.Name] + if !ok { + return ErrSecret + } + return tsigHMACProvider(key).Verify(msg, t) +} + // TSIG is the RR the holds the transaction signature of a message. // See RFC 2845 and RFC 4635. type TSIG struct { diff --git a/vendor/github.com/miekg/dns/version.go b/vendor/github.com/miekg/dns/version.go index 5094af7e93..971a271992 100644 --- a/vendor/github.com/miekg/dns/version.go +++ b/vendor/github.com/miekg/dns/version.go @@ -3,7 +3,7 @@ package dns import "fmt" // Version is current version of this library. -var Version = v{1, 1, 45} +var Version = v{1, 1, 49} // v holds the version of this library. type v struct { diff --git a/vendor/github.com/miekg/dns/xfr.go b/vendor/github.com/miekg/dns/xfr.go index 43970e64f3..f0dcf61d42 100644 --- a/vendor/github.com/miekg/dns/xfr.go +++ b/vendor/github.com/miekg/dns/xfr.go @@ -17,11 +17,22 @@ type Transfer struct { DialTimeout time.Duration // net.DialTimeout, defaults to 2 seconds ReadTimeout time.Duration // net.Conn.SetReadTimeout value for connections, defaults to 2 seconds WriteTimeout time.Duration // net.Conn.SetWriteTimeout value for connections, defaults to 2 seconds + TsigProvider TsigProvider // An implementation of the TsigProvider interface. If defined it replaces TsigSecret and is used for all TSIG operations. TsigSecret map[string]string // Secret(s) for Tsig map[], zonename must be in canonical form (lowercase, fqdn, see RFC 4034 Section 6.2) tsigTimersOnly bool } -// Think we need to away to stop the transfer +func (t *Transfer) tsigProvider() TsigProvider { + if t.TsigProvider != nil { + return t.TsigProvider + } + if t.TsigSecret != nil { + return tsigSecretProvider(t.TsigSecret) + } + return nil +} + +// TODO: Think we need to away to stop the transfer // In performs an incoming transfer with the server in a. // If you would like to set the source IP, or some other attribute @@ -224,12 +235,9 @@ func (t *Transfer) ReadMsg() (*Msg, error) { if err := m.Unpack(p); err != nil { return nil, err } - if ts := m.IsTsig(); ts != nil && t.TsigSecret != nil { - if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok { - return m, ErrSecret - } + if ts, tp := m.IsTsig(), t.tsigProvider(); ts != nil && tp != nil { // Need to work on the original message p, as that was used to calculate the tsig. - err = TsigVerify(p, t.TsigSecret[ts.Hdr.Name], t.tsigRequestMAC, t.tsigTimersOnly) + err = tsigVerifyProvider(p, tp, t.tsigRequestMAC, t.tsigTimersOnly) t.tsigRequestMAC = ts.MAC } return m, err @@ -238,11 +246,8 @@ func (t *Transfer) ReadMsg() (*Msg, error) { // WriteMsg writes a message through the transfer connection t. func (t *Transfer) WriteMsg(m *Msg) (err error) { var out []byte - if ts := m.IsTsig(); ts != nil && t.TsigSecret != nil { - if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok { - return ErrSecret - } - out, t.tsigRequestMAC, err = TsigGenerate(m, t.TsigSecret[ts.Hdr.Name], t.tsigRequestMAC, t.tsigTimersOnly) + if ts, tp := m.IsTsig(), t.tsigProvider(); ts != nil && tp != nil { + out, t.tsigRequestMAC, err = tsigGenerateProvider(m, tp, t.tsigRequestMAC, t.tsigTimersOnly) } else { out, err = m.Pack() } diff --git a/vendor/github.com/mikioh/tcpinfo/go.mod b/vendor/github.com/mikioh/tcpinfo/go.mod deleted file mode 100644 index 4584ac7dbd..0000000000 --- a/vendor/github.com/mikioh/tcpinfo/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/mikioh/tcpinfo diff --git a/vendor/github.com/mikioh/tcpopt/go.mod b/vendor/github.com/mikioh/tcpopt/go.mod deleted file mode 100644 index 60863fdf0e..0000000000 --- a/vendor/github.com/mikioh/tcpopt/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/mikioh/tcpopt diff --git a/vendor/github.com/minio/sha256-simd/go.mod b/vendor/github.com/minio/sha256-simd/go.mod deleted file mode 100644 index 89b70e04b7..0000000000 --- a/vendor/github.com/minio/sha256-simd/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/minio/sha256-simd - -go 1.13 - -require github.com/klauspost/cpuid/v2 v2.0.4 diff --git a/vendor/github.com/minio/sha256-simd/go.sum b/vendor/github.com/minio/sha256-simd/go.sum deleted file mode 100644 index 227bdb2eff..0000000000 --- a/vendor/github.com/minio/sha256-simd/go.sum +++ /dev/null @@ -1,4 +0,0 @@ -github.com/klauspost/cpuid/v2 v2.0.3 h1:DNljyrHyxlkk8139OXIAAauCwV8eQGDD6Z8YqnDXdZw= -github.com/klauspost/cpuid/v2 v2.0.3/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw= -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= diff --git a/vendor/github.com/mitchellh/copystructure/.travis.yml b/vendor/github.com/mitchellh/copystructure/.travis.yml deleted file mode 100644 index d7b9589ab1..0000000000 --- a/vendor/github.com/mitchellh/copystructure/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: go - -go: - - 1.7 - - tip - -script: - - go test - -matrix: - allow_failures: - - go: tip diff --git a/vendor/github.com/mitchellh/copystructure/README.md b/vendor/github.com/mitchellh/copystructure/README.md index bcb8c8d2cb..f0fbd2e5c9 100644 --- a/vendor/github.com/mitchellh/copystructure/README.md +++ b/vendor/github.com/mitchellh/copystructure/README.md @@ -1,21 +1,21 @@ -# copystructure - -copystructure is a Go library for deep copying values in Go. - -This allows you to copy Go values that may contain reference values -such as maps, slices, or pointers, and copy their data as well instead -of just their references. - -## Installation - -Standard `go get`: - -``` -$ go get github.com/mitchellh/copystructure -``` - -## Usage & Example - -For usage and examples see the [Godoc](http://godoc.org/github.com/mitchellh/copystructure). - -The `Copy` function has examples associated with it there. +# copystructure + +copystructure is a Go library for deep copying values in Go. + +This allows you to copy Go values that may contain reference values +such as maps, slices, or pointers, and copy their data as well instead +of just their references. + +## Installation + +Standard `go get`: + +``` +$ go get github.com/mitchellh/copystructure +``` + +## Usage & Example + +For usage and examples see the [Godoc](http://godoc.org/github.com/mitchellh/copystructure). + +The `Copy` function has examples associated with it there. diff --git a/vendor/github.com/mitchellh/copystructure/copystructure.go b/vendor/github.com/mitchellh/copystructure/copystructure.go index 140435255e..8089e6670a 100644 --- a/vendor/github.com/mitchellh/copystructure/copystructure.go +++ b/vendor/github.com/mitchellh/copystructure/copystructure.go @@ -8,7 +8,30 @@ import ( "github.com/mitchellh/reflectwalk" ) +const tagKey = "copy" + // Copy returns a deep copy of v. +// +// Copy is unable to copy unexported fields in a struct (lowercase field names). +// Unexported fields can't be reflected by the Go runtime and therefore +// copystructure can't perform any data copies. +// +// For structs, copy behavior can be controlled with struct tags. For example: +// +// struct { +// Name string +// Data *bytes.Buffer `copy:"shallow"` +// } +// +// The available tag values are: +// +// * "ignore" - The field will be ignored, effectively resulting in it being +// assigned the zero value in the copy. +// +// * "shallow" - The field will be be shallow copied. This means that references +// values such as pointers, maps, slices, etc. will be directly assigned +// versus deep copied. +// func Copy(v interface{}) (interface{}, error) { return Config{}.Copy(v) } @@ -28,6 +51,19 @@ type CopierFunc func(interface{}) (interface{}, error) // this map as well as to Copy in a mutex. var Copiers map[reflect.Type]CopierFunc = make(map[reflect.Type]CopierFunc) +// ShallowCopiers is a map of pointer types that behave specially +// when they are copied. If a type is found in this map while deep +// copying, the pointer value will be shallow copied and not walked +// into. +// +// The key should be the type, obtained using: reflect.TypeOf(value +// with type). +// +// It is unsafe to write to this map after Copies have started. If you +// are writing to this map while also copying, wrap all modifications to +// this map as well as to Copy in a mutex. +var ShallowCopiers map[reflect.Type]struct{} = make(map[reflect.Type]struct{}) + // Must is a helper that wraps a call to a function returning // (interface{}, error) and panics if the error is non-nil. It is intended // for use in variable initializations and should only be used when a copy @@ -50,6 +86,11 @@ type Config struct { // Copiers is a map of types associated with a CopierFunc. Use the global // Copiers map if this is nil. Copiers map[reflect.Type]CopierFunc + + // ShallowCopiers is a map of pointer types that when they are + // shallow copied no matter where they are encountered. Use the + // global ShallowCopiers if this is nil. + ShallowCopiers map[reflect.Type]struct{} } func (c Config) Copy(v interface{}) (interface{}, error) { @@ -65,6 +106,12 @@ func (c Config) Copy(v interface{}) (interface{}, error) { if c.Copiers == nil { c.Copiers = Copiers } + w.copiers = c.Copiers + + if c.ShallowCopiers == nil { + c.ShallowCopiers = ShallowCopiers + } + w.shallowCopiers = c.ShallowCopiers err := reflectwalk.Walk(v, w) if err != nil { @@ -93,10 +140,12 @@ func ifaceKey(pointers, depth int) uint64 { type walker struct { Result interface{} - depth int - ignoreDepth int - vals []reflect.Value - cs []reflect.Value + copiers map[reflect.Type]CopierFunc + shallowCopiers map[reflect.Type]struct{} + depth int + ignoreDepth int + vals []reflect.Value + cs []reflect.Value // This stores the number of pointers we've walked over, indexed by depth. ps []int @@ -263,6 +312,20 @@ func (w *walker) PointerExit(v bool) error { return nil } +func (w *walker) Pointer(v reflect.Value) error { + if _, ok := w.shallowCopiers[v.Type()]; ok { + // Shallow copy this value. Use the same logic as primitive, then + // return skip. + if err := w.Primitive(v); err != nil { + return err + } + + return reflectwalk.SkipEntry + } + + return nil +} + func (w *walker) Interface(v reflect.Value) error { if !v.IsValid() { return nil @@ -356,7 +419,7 @@ func (w *walker) Struct(s reflect.Value) error { w.lock(s) var v reflect.Value - if c, ok := Copiers[s.Type()]; ok { + if c, ok := w.copiers[s.Type()]; ok { // We have a Copier for this struct, so we use that copier to // get the copy, and we ignore anything deeper than this. w.ignoreDepth = w.depth @@ -396,9 +459,29 @@ func (w *walker) StructField(f reflect.StructField, v reflect.Value) error { return reflectwalk.SkipEntry } + switch f.Tag.Get(tagKey) { + case "shallow": + // If we're shallow copying then assign the value directly to the + // struct and skip the entry. + if v.IsValid() { + s := w.cs[len(w.cs)-1] + sf := reflect.Indirect(s).FieldByName(f.Name) + if sf.CanSet() { + sf.Set(v) + } + } + + return reflectwalk.SkipEntry + + case "ignore": + // Do nothing + return reflectwalk.SkipEntry + } + // Push the field onto the stack, we'll handle it when we exit // the struct field in Exit... w.valPush(reflect.ValueOf(f)) + return nil } diff --git a/vendor/github.com/mitchellh/copystructure/go.mod b/vendor/github.com/mitchellh/copystructure/go.mod deleted file mode 100644 index d01864309b..0000000000 --- a/vendor/github.com/mitchellh/copystructure/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/mitchellh/copystructure - -require github.com/mitchellh/reflectwalk v1.0.0 diff --git a/vendor/github.com/mitchellh/copystructure/go.sum b/vendor/github.com/mitchellh/copystructure/go.sum deleted file mode 100644 index be57245619..0000000000 --- a/vendor/github.com/mitchellh/copystructure/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/mitchellh/reflectwalk v1.0.0 h1:9D+8oIskB4VJBN5SFlmc27fSlIBZaov1Wpk/IfikLNY= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= diff --git a/vendor/github.com/mitchellh/go-homedir/go.mod b/vendor/github.com/mitchellh/go-homedir/go.mod deleted file mode 100644 index 7efa09a043..0000000000 --- a/vendor/github.com/mitchellh/go-homedir/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/mitchellh/go-homedir diff --git a/vendor/github.com/mitchellh/go-testing-interface/.travis.yml b/vendor/github.com/mitchellh/go-testing-interface/.travis.yml index 928d000ec4..cca949103a 100644 --- a/vendor/github.com/mitchellh/go-testing-interface/.travis.yml +++ b/vendor/github.com/mitchellh/go-testing-interface/.travis.yml @@ -1,7 +1,6 @@ language: go go: - - 1.8 - 1.x - tip diff --git a/vendor/github.com/mitchellh/go-testing-interface/README.md b/vendor/github.com/mitchellh/go-testing-interface/README.md index 26781bbae8..ee435adc54 100644 --- a/vendor/github.com/mitchellh/go-testing-interface/README.md +++ b/vendor/github.com/mitchellh/go-testing-interface/README.md @@ -38,6 +38,14 @@ You can also call the test helper at runtime if needed: TestHelper(&testing.RuntimeT{}) } +## Versioning + +The tagged version matches the version of Go that the interface is +compatible with. For example, the version "1.14.0" is for Go 1.14 and +introduced the `Cleanup` function. The patch version (the ".0" in the +prior example) is used to fix any bugs found in this library and has no +correlation to the supported Go version. + ## Why?! **Why would I call a test helper that takes a *testing.T at runtime?** diff --git a/vendor/github.com/mitchellh/go-testing-interface/go.mod b/vendor/github.com/mitchellh/go-testing-interface/go.mod deleted file mode 100644 index 062796de72..0000000000 --- a/vendor/github.com/mitchellh/go-testing-interface/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/mitchellh/go-testing-interface diff --git a/vendor/github.com/mitchellh/go-testing-interface/testing.go b/vendor/github.com/mitchellh/go-testing-interface/testing.go index 204afb4200..86510322ab 100644 --- a/vendor/github.com/mitchellh/go-testing-interface/testing.go +++ b/vendor/github.com/mitchellh/go-testing-interface/testing.go @@ -1,5 +1,3 @@ -// +build !go1.9 - package testing import ( @@ -12,6 +10,7 @@ import ( // In unit tests you can just pass a *testing.T struct. At runtime, outside // of tests, you can pass in a RuntimeT struct from this package. type T interface { + Cleanup(func()) Error(args ...interface{}) Errorf(format string, args ...interface{}) Fail() @@ -19,9 +18,11 @@ type T interface { Failed() bool Fatal(args ...interface{}) Fatalf(format string, args ...interface{}) + Helper() Log(args ...interface{}) Logf(format string, args ...interface{}) Name() string + Parallel() Skip(args ...interface{}) SkipNow() Skipf(format string, args ...interface{}) @@ -31,10 +32,15 @@ type T interface { // RuntimeT implements T and can be instantiated and run at runtime to // mimic *testing.T behavior. Unlike *testing.T, this will simply panic // for calls to Fatal. For calls to Error, you'll have to check the errors -// list to determine whether to exit yourself. Name and Skip methods are -// unimplemented noops. +// list to determine whether to exit yourself. +// +// Cleanup does NOT work, so if you're using a helper that uses Cleanup, +// there may be dangling resources. +// +// Parallel does not do anything. type RuntimeT struct { - failed bool + skipped bool + failed bool } func (t *RuntimeT) Error(args ...interface{}) { @@ -43,20 +49,10 @@ func (t *RuntimeT) Error(args ...interface{}) { } func (t *RuntimeT) Errorf(format string, args ...interface{}) { - log.Println(fmt.Sprintf(format, args...)) + log.Printf(format, args...) t.Fail() } -func (t *RuntimeT) Fatal(args ...interface{}) { - log.Println(fmt.Sprintln(args...)) - t.FailNow() -} - -func (t *RuntimeT) Fatalf(format string, args ...interface{}) { - log.Println(fmt.Sprintf(format, args...)) - t.FailNow() -} - func (t *RuntimeT) Fail() { t.failed = true } @@ -69,6 +65,16 @@ func (t *RuntimeT) Failed() bool { return t.failed } +func (t *RuntimeT) Fatal(args ...interface{}) { + log.Print(args...) + t.FailNow() +} + +func (t *RuntimeT) Fatalf(format string, args ...interface{}) { + log.Printf(format, args...) + t.FailNow() +} + func (t *RuntimeT) Log(args ...interface{}) { log.Println(fmt.Sprintln(args...)) } @@ -77,8 +83,30 @@ func (t *RuntimeT) Logf(format string, args ...interface{}) { log.Println(fmt.Sprintf(format, args...)) } -func (t *RuntimeT) Name() string { return "" } -func (t *RuntimeT) Skip(args ...interface{}) {} -func (t *RuntimeT) SkipNow() {} -func (t *RuntimeT) Skipf(format string, args ...interface{}) {} -func (t *RuntimeT) Skipped() bool { return false } +func (t *RuntimeT) Name() string { + return "" +} + +func (t *RuntimeT) Parallel() {} + +func (t *RuntimeT) Skip(args ...interface{}) { + log.Print(args...) + t.SkipNow() +} + +func (t *RuntimeT) SkipNow() { + t.skipped = true +} + +func (t *RuntimeT) Skipf(format string, args ...interface{}) { + log.Printf(format, args...) + t.SkipNow() +} + +func (t *RuntimeT) Skipped() bool { + return t.skipped +} + +func (t *RuntimeT) Helper() {} + +func (t *RuntimeT) Cleanup(func()) {} diff --git a/vendor/github.com/mitchellh/go-testing-interface/testing_go19.go b/vendor/github.com/mitchellh/go-testing-interface/testing_go19.go deleted file mode 100644 index 31b42cadf8..0000000000 --- a/vendor/github.com/mitchellh/go-testing-interface/testing_go19.go +++ /dev/null @@ -1,108 +0,0 @@ -// +build go1.9 - -// NOTE: This is a temporary copy of testing.go for Go 1.9 with the addition -// of "Helper" to the T interface. Go 1.9 at the time of typing is in RC -// and is set for release shortly. We'll support this on master as the default -// as soon as 1.9 is released. - -package testing - -import ( - "fmt" - "log" -) - -// T is the interface that mimics the standard library *testing.T. -// -// In unit tests you can just pass a *testing.T struct. At runtime, outside -// of tests, you can pass in a RuntimeT struct from this package. -type T interface { - Error(args ...interface{}) - Errorf(format string, args ...interface{}) - Fail() - FailNow() - Failed() bool - Fatal(args ...interface{}) - Fatalf(format string, args ...interface{}) - Log(args ...interface{}) - Logf(format string, args ...interface{}) - Name() string - Skip(args ...interface{}) - SkipNow() - Skipf(format string, args ...interface{}) - Skipped() bool - Helper() -} - -// RuntimeT implements T and can be instantiated and run at runtime to -// mimic *testing.T behavior. Unlike *testing.T, this will simply panic -// for calls to Fatal. For calls to Error, you'll have to check the errors -// list to determine whether to exit yourself. -type RuntimeT struct { - skipped bool - failed bool -} - -func (t *RuntimeT) Error(args ...interface{}) { - log.Println(fmt.Sprintln(args...)) - t.Fail() -} - -func (t *RuntimeT) Errorf(format string, args ...interface{}) { - log.Printf(format, args...) - t.Fail() -} - -func (t *RuntimeT) Fail() { - t.failed = true -} - -func (t *RuntimeT) FailNow() { - panic("testing.T failed, see logs for output (if any)") -} - -func (t *RuntimeT) Failed() bool { - return t.failed -} - -func (t *RuntimeT) Fatal(args ...interface{}) { - log.Print(args...) - t.FailNow() -} - -func (t *RuntimeT) Fatalf(format string, args ...interface{}) { - log.Printf(format, args...) - t.FailNow() -} - -func (t *RuntimeT) Log(args ...interface{}) { - log.Println(fmt.Sprintln(args...)) -} - -func (t *RuntimeT) Logf(format string, args ...interface{}) { - log.Println(fmt.Sprintf(format, args...)) -} - -func (t *RuntimeT) Name() string { - return "" -} - -func (t *RuntimeT) Skip(args ...interface{}) { - log.Print(args...) - t.SkipNow() -} - -func (t *RuntimeT) SkipNow() { - t.skipped = true -} - -func (t *RuntimeT) Skipf(format string, args ...interface{}) { - log.Printf(format, args...) - t.SkipNow() -} - -func (t *RuntimeT) Skipped() bool { - return t.skipped -} - -func (t *RuntimeT) Helper() {} diff --git a/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md b/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md index 38a099162c..c758234904 100644 --- a/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md +++ b/vendor/github.com/mitchellh/mapstructure/CHANGELOG.md @@ -1,3 +1,16 @@ +## 1.5.0 + +* New option `IgnoreUntaggedFields` to ignore decoding to any fields + without `mapstructure` (or the configured tag name) set [GH-277] +* New option `ErrorUnset` which makes it an error if any fields + in a target struct are not set by the decoding process. [GH-225] +* New function `OrComposeDecodeHookFunc` to help compose decode hooks. [GH-240] +* Decoding to slice from array no longer crashes [GH-265] +* Decode nested struct pointers to map [GH-271] +* Fix issue where `,squash` was ignored if `Squash` option was set. [GH-280] +* Fix issue where fields with `,omitempty` would sometimes decode + into a map with an empty string key [GH-281] + ## 1.4.3 * Fix cases where `json.Number` didn't decode properly [GH-261] diff --git a/vendor/github.com/mitchellh/mapstructure/decode_hooks.go b/vendor/github.com/mitchellh/mapstructure/decode_hooks.go index 4d4bbc733b..3a754ca724 100644 --- a/vendor/github.com/mitchellh/mapstructure/decode_hooks.go +++ b/vendor/github.com/mitchellh/mapstructure/decode_hooks.go @@ -77,6 +77,28 @@ func ComposeDecodeHookFunc(fs ...DecodeHookFunc) DecodeHookFunc { } } +// OrComposeDecodeHookFunc executes all input hook functions until one of them returns no error. In that case its value is returned. +// If all hooks return an error, OrComposeDecodeHookFunc returns an error concatenating all error messages. +func OrComposeDecodeHookFunc(ff ...DecodeHookFunc) DecodeHookFunc { + return func(a, b reflect.Value) (interface{}, error) { + var allErrs string + var out interface{} + var err error + + for _, f := range ff { + out, err = DecodeHookExec(f, a, b) + if err != nil { + allErrs += err.Error() + "\n" + continue + } + + return out, nil + } + + return nil, errors.New(allErrs) + } +} + // StringToSliceHookFunc returns a DecodeHookFunc that converts // string to []string by splitting on the given sep. func StringToSliceHookFunc(sep string) DecodeHookFunc { diff --git a/vendor/github.com/mitchellh/mapstructure/go.mod b/vendor/github.com/mitchellh/mapstructure/go.mod deleted file mode 100644 index a03ae97308..0000000000 --- a/vendor/github.com/mitchellh/mapstructure/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/mitchellh/mapstructure - -go 1.14 diff --git a/vendor/github.com/mitchellh/mapstructure/mapstructure.go b/vendor/github.com/mitchellh/mapstructure/mapstructure.go index 6b81b00679..1efb22ac36 100644 --- a/vendor/github.com/mitchellh/mapstructure/mapstructure.go +++ b/vendor/github.com/mitchellh/mapstructure/mapstructure.go @@ -122,7 +122,7 @@ // field value is zero and a numeric type, the field is empty, and it won't // be encoded into the destination type. // -// type Source { +// type Source struct { // Age int `mapstructure:",omitempty"` // } // @@ -215,6 +215,12 @@ type DecoderConfig struct { // (extra keys). ErrorUnused bool + // If ErrorUnset is true, then it is an error for there to exist + // fields in the result that were not set in the decoding process + // (extra fields). This only applies to decoding to a struct. This + // will affect all nested structs as well. + ErrorUnset bool + // ZeroFields, if set to true, will zero fields before writing them. // For example, a map will be emptied before decoded values are put in // it. If this is false, a map will be merged. @@ -259,6 +265,10 @@ type DecoderConfig struct { // defaults to "mapstructure" TagName string + // IgnoreUntaggedFields ignores all struct fields without explicit + // TagName, comparable to `mapstructure:"-"` as default behaviour. + IgnoreUntaggedFields bool + // MatchName is the function used to match the map key to the struct // field name or tag. Defaults to `strings.EqualFold`. This can be used // to implement case-sensitive tag values, support snake casing, etc. @@ -284,6 +294,11 @@ type Metadata struct { // Unused is a slice of keys that were found in the raw value but // weren't decoded since there was no matching field in the result interface Unused []string + + // Unset is a slice of field names that were found in the result interface + // but weren't set in the decoding process since there was no matching value + // in the input + Unset []string } // Decode takes an input structure and uses reflection to translate it to @@ -375,6 +390,10 @@ func NewDecoder(config *DecoderConfig) (*Decoder, error) { if config.Metadata.Unused == nil { config.Metadata.Unused = make([]string, 0) } + + if config.Metadata.Unset == nil { + config.Metadata.Unset = make([]string, 0) + } } if config.TagName == "" { @@ -906,9 +925,15 @@ func (d *Decoder) decodeMapFromStruct(name string, dataVal reflect.Value, val re tagValue := f.Tag.Get(d.config.TagName) keyName := f.Name + if tagValue == "" && d.config.IgnoreUntaggedFields { + continue + } + // If Squash is set in the config, we squash the field down. squash := d.config.Squash && v.Kind() == reflect.Struct && f.Anonymous + v = dereferencePtrToStructIfNeeded(v, d.config.TagName) + // Determine the name of the key in the map if index := strings.Index(tagValue, ","); index != -1 { if tagValue[:index] == "-" { @@ -920,7 +945,7 @@ func (d *Decoder) decodeMapFromStruct(name string, dataVal reflect.Value, val re } // If "squash" is specified in the tag, we squash the field down. - squash = !squash && strings.Index(tagValue[index+1:], "squash") != -1 + squash = squash || strings.Index(tagValue[index+1:], "squash") != -1 if squash { // When squashing, the embedded type can be a pointer to a struct. if v.Kind() == reflect.Ptr && v.Elem().Kind() == reflect.Struct { @@ -932,7 +957,9 @@ func (d *Decoder) decodeMapFromStruct(name string, dataVal reflect.Value, val re return fmt.Errorf("cannot squash non-struct type '%s'", v.Type()) } } - keyName = tagValue[:index] + if keyNameTagValue := tagValue[:index]; keyNameTagValue != "" { + keyName = keyNameTagValue + } } else if len(tagValue) > 0 { if tagValue == "-" { continue @@ -1088,7 +1115,7 @@ func (d *Decoder) decodeSlice(name string, data interface{}, val reflect.Value) } // If the input value is nil, then don't allocate since empty != nil - if dataVal.IsNil() { + if dataValKind != reflect.Array && dataVal.IsNil() { return nil } @@ -1250,6 +1277,7 @@ func (d *Decoder) decodeStructFromMap(name string, dataVal, val reflect.Value) e dataValKeysUnused[dataValKey.Interface()] = struct{}{} } + targetValKeysUnused := make(map[interface{}]struct{}) errors := make([]string, 0) // This slice will keep track of all the structs we'll be decoding. @@ -1354,7 +1382,8 @@ func (d *Decoder) decodeStructFromMap(name string, dataVal, val reflect.Value) e if !rawMapVal.IsValid() { // There was no matching key in the map for the value in - // the struct. Just ignore. + // the struct. Remember it for potential errors and metadata. + targetValKeysUnused[fieldName] = struct{}{} continue } } @@ -1414,6 +1443,17 @@ func (d *Decoder) decodeStructFromMap(name string, dataVal, val reflect.Value) e errors = appendErrors(errors, err) } + if d.config.ErrorUnset && len(targetValKeysUnused) > 0 { + keys := make([]string, 0, len(targetValKeysUnused)) + for rawKey := range targetValKeysUnused { + keys = append(keys, rawKey.(string)) + } + sort.Strings(keys) + + err := fmt.Errorf("'%s' has unset fields: %s", name, strings.Join(keys, ", ")) + errors = appendErrors(errors, err) + } + if len(errors) > 0 { return &Error{errors} } @@ -1428,6 +1468,14 @@ func (d *Decoder) decodeStructFromMap(name string, dataVal, val reflect.Value) e d.config.Metadata.Unused = append(d.config.Metadata.Unused, key) } + for rawKey := range targetValKeysUnused { + key := rawKey.(string) + if name != "" { + key = name + "." + key + } + + d.config.Metadata.Unset = append(d.config.Metadata.Unset, key) + } } return nil @@ -1465,3 +1513,28 @@ func getKind(val reflect.Value) reflect.Kind { return kind } } + +func isStructTypeConvertibleToMap(typ reflect.Type, checkMapstructureTags bool, tagName string) bool { + for i := 0; i < typ.NumField(); i++ { + f := typ.Field(i) + if f.PkgPath == "" && !checkMapstructureTags { // check for unexported fields + return true + } + if checkMapstructureTags && f.Tag.Get(tagName) != "" { // check for mapstructure tags inside + return true + } + } + return false +} + +func dereferencePtrToStructIfNeeded(v reflect.Value, tagName string) reflect.Value { + if v.Kind() != reflect.Ptr || v.Elem().Kind() != reflect.Struct { + return v + } + deref := v.Elem() + derefT := deref.Type() + if isStructTypeConvertibleToMap(derefT, true, tagName) { + return deref + } + return v +} diff --git a/vendor/github.com/mitchellh/reflectwalk/go.mod b/vendor/github.com/mitchellh/reflectwalk/go.mod deleted file mode 100644 index 52bb7c469e..0000000000 --- a/vendor/github.com/mitchellh/reflectwalk/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/mitchellh/reflectwalk diff --git a/vendor/github.com/mitchellh/reflectwalk/reflectwalk.go b/vendor/github.com/mitchellh/reflectwalk/reflectwalk.go index d7ab7b6d78..7fee7b050b 100644 --- a/vendor/github.com/mitchellh/reflectwalk/reflectwalk.go +++ b/vendor/github.com/mitchellh/reflectwalk/reflectwalk.go @@ -69,6 +69,13 @@ type PointerWalker interface { PointerExit(bool) error } +// PointerValueWalker implementations are notified with the value of +// a particular pointer when a pointer is walked. Pointer is called +// right before PointerEnter. +type PointerValueWalker interface { + Pointer(reflect.Value) error +} + // SkipEntry can be returned from walk functions to skip walking // the value of this field. This is only valid in the following functions: // @@ -130,6 +137,17 @@ func walk(v reflect.Value, w interface{}) (err error) { } if pointerV.Kind() == reflect.Ptr { + if pw, ok := w.(PointerValueWalker); ok { + if err = pw.Pointer(pointerV); err != nil { + if err == SkipEntry { + // Skip the rest of this entry but clear the error + return nil + } + + return + } + } + pointer = true v = reflect.Indirect(pointerV) } @@ -230,7 +248,8 @@ func walkMap(v reflect.Value, w interface{}) error { ew.Enter(MapValue) } - if err := walk(kv, w); err != nil { + // get the map value again as it may have changed in the MapElem call + if err := walk(v.MapIndex(k), w); err != nil { return err } diff --git a/vendor/github.com/multiformats/go-base32/go.mod b/vendor/github.com/multiformats/go-base32/go.mod deleted file mode 100644 index b0c7dc9afd..0000000000 --- a/vendor/github.com/multiformats/go-base32/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/multiformats/go-base32 - -go 1.16 diff --git a/vendor/github.com/multiformats/go-base36/go.mod b/vendor/github.com/multiformats/go-base36/go.mod deleted file mode 100644 index ec179094ec..0000000000 --- a/vendor/github.com/multiformats/go-base36/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/multiformats/go-base36 - -go 1.11 diff --git a/vendor/github.com/multiformats/go-base36/go.sum b/vendor/github.com/multiformats/go-base36/go.sum deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/vendor/github.com/multiformats/go-multiaddr-dns/go.mod b/vendor/github.com/multiformats/go-multiaddr-dns/go.mod deleted file mode 100644 index 70c5f49867..0000000000 --- a/vendor/github.com/multiformats/go-multiaddr-dns/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/multiformats/go-multiaddr-dns - -require ( - github.com/miekg/dns v1.1.41 - github.com/multiformats/go-multiaddr v0.2.0 -) - -go 1.15 diff --git a/vendor/github.com/multiformats/go-multiaddr-dns/go.sum b/vendor/github.com/multiformats/go-multiaddr-dns/go.sum deleted file mode 100644 index f3237b812a..0000000000 --- a/vendor/github.com/multiformats/go-multiaddr-dns/go.sum +++ /dev/null @@ -1,33 +0,0 @@ -github.com/miekg/dns v1.1.41 h1:WMszZWJG0XmzbK9FEmzH2TVcqYzFesusSIB41b8KHxY= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771 h1:MHkK1uRtFbVqvAgvWxafZe54+5uBxLluGylDiKgdhwo= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.2 h1:ZEw4I2EgPKDJ2iEw0cNmLB3ROrEmkOtXIkaG7wZg+78= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-multiaddr v0.2.0 h1:lR52sFwcTCuQb6bTfnXF6zA2XfyYvyd+5a9qECv/J90= -github.com/multiformats/go-multiaddr v0.2.0/go.mod h1:0nO36NvPpyV4QzvTLi/lafl2y95ncPj0vFwVF6k6wJ4= -github.com/multiformats/go-multihash v0.0.8 h1:wrYcW5yxSi3dU07n5jnuS5PrNwyHy0zRHGVoUugWvXg= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/multiformats/go-varint v0.0.1 h1:TR/0rdQtnNxuN2IhiB639xC3tWM4IUi7DkTBVTdGW/M= -github.com/multiformats/go-varint v0.0.1/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110 h1:qWPm9rbaAMKs8Bq/9LRpbMqxWRVUAQwMI9fVrssnTfw= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04 h1:cEhElsAv9LUt9ZUUocxzWe05oFLVd+AA2nstydTeI8g= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/vendor/github.com/multiformats/go-multiaddr-fmt/go.mod b/vendor/github.com/multiformats/go-multiaddr-fmt/go.mod deleted file mode 100644 index f2c79fe860..0000000000 --- a/vendor/github.com/multiformats/go-multiaddr-fmt/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/multiformats/go-multiaddr-fmt - -require github.com/multiformats/go-multiaddr v0.1.1 - -go 1.13 diff --git a/vendor/github.com/multiformats/go-multiaddr-fmt/go.sum b/vendor/github.com/multiformats/go-multiaddr-fmt/go.sum deleted file mode 100644 index 0061b94a7d..0000000000 --- a/vendor/github.com/multiformats/go-multiaddr-fmt/go.sum +++ /dev/null @@ -1,20 +0,0 @@ -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771 h1:MHkK1uRtFbVqvAgvWxafZe54+5uBxLluGylDiKgdhwo= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.2 h1:ZEw4I2EgPKDJ2iEw0cNmLB3ROrEmkOtXIkaG7wZg+78= -github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-multiaddr v0.1.1 h1:rVAztJYMhCQ7vEFr8FvxW3mS+HF2eY/oPbOMeS0ZDnE= -github.com/multiformats/go-multiaddr v0.1.1/go.mod h1:aMKBKNEYmzmDmxfX88/vz+J5IU55txyt0p4aiWVohjo= -github.com/multiformats/go-multihash v0.0.8 h1:wrYcW5yxSi3dU07n5jnuS5PrNwyHy0zRHGVoUugWvXg= -github.com/multiformats/go-multihash v0.0.8/go.mod h1:YSLudS+Pi8NHE7o6tb3D8vrpKa63epEDmG8nTduyAew= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/vendor/github.com/multiformats/go-multiaddr/go.mod b/vendor/github.com/multiformats/go-multiaddr/go.mod deleted file mode 100644 index 907c15554c..0000000000 --- a/vendor/github.com/multiformats/go-multiaddr/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/multiformats/go-multiaddr - -go 1.16 - -require ( - github.com/ipfs/go-cid v0.0.7 - github.com/multiformats/go-multihash v0.0.14 - github.com/multiformats/go-varint v0.0.6 - github.com/stretchr/testify v1.7.0 -) diff --git a/vendor/github.com/multiformats/go-multiaddr/go.sum b/vendor/github.com/multiformats/go-multiaddr/go.sum deleted file mode 100644 index 67ce30874d..0000000000 --- a/vendor/github.com/multiformats/go-multiaddr/go.sum +++ /dev/null @@ -1,42 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771 h1:MHkK1uRtFbVqvAgvWxafZe54+5uBxLluGylDiKgdhwo= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3 h1:v+sk57XuaCKGXpWtVBX8YJzO7hMGx4Aajh4TQbdEFdc= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14 h1:QoBceQYQQtNUuf6s7wHxnE2c8bhbMqhfGzNI032se/I= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXTqk7U7zPQCb+T4rbU9ZEoU= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d h1:+R4KGOnez64A81RvjARKc4UT5/tI9ujCIVX+P5KiHuI= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/github.com/multiformats/go-multibase/go.mod b/vendor/github.com/multiformats/go-multibase/go.mod deleted file mode 100644 index 68d09821e3..0000000000 --- a/vendor/github.com/multiformats/go-multibase/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/multiformats/go-multibase - -go 1.11 - -require ( - github.com/mr-tron/base58 v1.1.0 - github.com/multiformats/go-base32 v0.0.3 - github.com/multiformats/go-base36 v0.1.0 -) diff --git a/vendor/github.com/multiformats/go-multibase/go.sum b/vendor/github.com/multiformats/go-multibase/go.sum deleted file mode 100644 index 8256cfd116..0000000000 --- a/vendor/github.com/multiformats/go-multibase/go.sum +++ /dev/null @@ -1,6 +0,0 @@ -github.com/mr-tron/base58 v1.1.0 h1:Y51FGVJ91WBqCEabAi5OPUz38eAx8DakuAm5svLcsfQ= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= -github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= -github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= diff --git a/vendor/github.com/multiformats/go-multicodec/README.md b/vendor/github.com/multiformats/go-multicodec/README.md index ed858e13c9..d8f7c95575 100644 --- a/vendor/github.com/multiformats/go-multicodec/README.md +++ b/vendor/github.com/multiformats/go-multicodec/README.md @@ -19,20 +19,46 @@ go get github.com/multiformats/go-multicodec + +## Type + +`Code` describes an integer reserved in the multicodec table, defined at [multiformats/multicodec/table.csv](https://github.com/multiformats/multicodec/blob/master/table.csv). + +```go +type Code uint64 +``` + ## Usage +### Importing Code constant + ```go package main import "github.com/multiformats/go-multicodec" func main() { - _ = multicodec.Sha2_256 + code := multicodec.Sha2_256 // Code + name := multicodec.Sha2_256.String() } ``` The corresponding `name` value for each codec from the [multicodecs table](https://raw.githubusercontent.com/multiformats/multicodec/master/table.csv) can be accessed via its `String` method. For example, `multicodec.Sha2_256.String()` will return `sha2-256`. +### Code from string + +```go +var multicodec.Code code +err := code.Set("libp2p-key") +``` + + +### Code from uint64 + +```go +rawCode := multicodec.Code(0x55) +``` + ## Generator To generate the constants yourself: diff --git a/vendor/github.com/multiformats/go-multicodec/code.go b/vendor/github.com/multiformats/go-multicodec/code.go index 454465c745..ed6b1dd8fc 100644 --- a/vendor/github.com/multiformats/go-multicodec/code.go +++ b/vendor/github.com/multiformats/go-multicodec/code.go @@ -9,7 +9,7 @@ import ( //go:generate go run gen.go //go:generate gofmt -w code_table.go -//go:generate go run golang.org/x/tools/cmd/stringer@v0.1.7 -type=Code -linecomment +//go:generate go run golang.org/x/tools/cmd/stringer@v0.1.10 -type=Code -linecomment // Code describes an integer reserved in the multicodec table, defined at // github.com/multiformats/multicodec. diff --git a/vendor/github.com/multiformats/go-multicodec/go.mod b/vendor/github.com/multiformats/go-multicodec/go.mod deleted file mode 100644 index 277126a378..0000000000 --- a/vendor/github.com/multiformats/go-multicodec/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/multiformats/go-multicodec - -go 1.16 diff --git a/vendor/github.com/multiformats/go-multicodec/go.sum b/vendor/github.com/multiformats/go-multicodec/go.sum deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/vendor/github.com/multiformats/go-multicodec/version.json b/vendor/github.com/multiformats/go-multicodec/version.json index 26a7d47855..fc15ae013a 100644 --- a/vendor/github.com/multiformats/go-multicodec/version.json +++ b/vendor/github.com/multiformats/go-multicodec/version.json @@ -1,3 +1,3 @@ { - "version": "v0.4.1" + "version": "v0.5.0" } diff --git a/vendor/github.com/multiformats/go-multihash/go.mod b/vendor/github.com/multiformats/go-multihash/go.mod deleted file mode 100644 index 1baf4b6e58..0000000000 --- a/vendor/github.com/multiformats/go-multihash/go.mod +++ /dev/null @@ -1,14 +0,0 @@ -module github.com/multiformats/go-multihash - -require ( - github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 - github.com/minio/sha256-simd v1.0.0 - github.com/mr-tron/base58 v1.2.0 - github.com/multiformats/go-varint v0.0.6 - github.com/spaolacci/murmur3 v1.1.0 - golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 - golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 // indirect - lukechampine.com/blake3 v1.1.6 -) - -go 1.16 diff --git a/vendor/github.com/multiformats/go-multihash/go.sum b/vendor/github.com/multiformats/go-multihash/go.sum deleted file mode 100644 index 42a516e370..0000000000 --- a/vendor/github.com/multiformats/go-multihash/go.sum +++ /dev/null @@ -1,25 +0,0 @@ -github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= -github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= -github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= -github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= -github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2 h1:46ULzRKLh1CwgRq2dC5SlBzEqqNCi8rreOZnNrbqcIY= -golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -lukechampine.com/blake3 v1.1.6 h1:H3cROdztr7RCfoaTpGZFQsrqvweFLrqS73j7L7cmR5c= -lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= diff --git a/vendor/github.com/multiformats/go-multistream/.gitignore b/vendor/github.com/multiformats/go-multistream/.gitignore new file mode 100644 index 0000000000..29585fe79b --- /dev/null +++ b/vendor/github.com/multiformats/go-multistream/.gitignore @@ -0,0 +1 @@ +*-fuzz.zip diff --git a/vendor/github.com/multiformats/go-multistream/.travis.yml b/vendor/github.com/multiformats/go-multistream/.travis.yml deleted file mode 100644 index 09f9a4cc36..0000000000 --- a/vendor/github.com/multiformats/go-multistream/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -os: - - linux - -language: go - -go: - - 1.11.x - -env: - global: - - GOTFLAGS="-race" - matrix: - - BUILD_DEPTYPE=gomod - - -# disable travis install -install: - - true - -script: - - bash <(curl -s https://raw.githubusercontent.com/ipfs/ci-helpers/master/travis-ci/run-standard-tests.sh) - - -cache: - directories: - - $GOPATH/pkg/mod - - /home/travis/.cache/go-build - -notifications: - email: false diff --git a/vendor/github.com/multiformats/go-multistream/Makefile b/vendor/github.com/multiformats/go-multistream/Makefile deleted file mode 100644 index 4f5206e4a2..0000000000 --- a/vendor/github.com/multiformats/go-multistream/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -export IPFS_API ?= v04x.ipfs.io - -gx: - go get github.com/whyrusleeping/gx - go get github.com/whyrusleeping/gx-go - -deps: gx - gx --verbose install --global - gx-go rewrite - -publish: - gx-go rewrite --undo - diff --git a/vendor/github.com/multiformats/go-multistream/README.md b/vendor/github.com/multiformats/go-multistream/README.md index 3532927924..9666d20450 100644 --- a/vendor/github.com/multiformats/go-multistream/README.md +++ b/vendor/github.com/multiformats/go-multistream/README.md @@ -30,14 +30,10 @@ The protocol is defined [here](https://github.com/multiformats/multistream-selec go get github.com/multiformats/go-multistream ``` -Note that `go-multistream` is packaged with Gx, so it is recommended to use Gx to install and use it (see Usage section). - - ## Usage ### Example - This example shows how to use a multistream muxer. A muxer uses user-added handlers to handle different "protocols". The first step when interacting with a connection handler by the muxer is to select the protocol (the example uses `SelectProtoOrFail`). This will then let the muxer use the right handler. diff --git a/vendor/github.com/multiformats/go-multistream/cases.md b/vendor/github.com/multiformats/go-multistream/cases.md deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/vendor/github.com/multiformats/go-multistream/client.go b/vendor/github.com/multiformats/go-multistream/client.go index 6958f4bee0..811e3b3955 100644 --- a/vendor/github.com/multiformats/go-multistream/client.go +++ b/vendor/github.com/multiformats/go-multistream/client.go @@ -5,7 +5,10 @@ import ( "crypto/rand" "encoding/binary" "errors" + "fmt" "io" + "os" + "runtime/debug" "strconv" "strings" ) @@ -28,7 +31,14 @@ const ( // to inform the muxer of the protocol that will be used to communicate // on this ReadWriteCloser. It returns an error if, for example, // the muxer does not know how to handle this protocol. -func SelectProtoOrFail(proto string, rwc io.ReadWriteCloser) error { +func SelectProtoOrFail(proto string, rwc io.ReadWriteCloser) (err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "caught panic: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic selecting protocol: %s", rerr) + } + }() + errCh := make(chan error, 1) go func() { var buf bytes.Buffer @@ -56,7 +66,14 @@ func SelectProtoOrFail(proto string, rwc io.ReadWriteCloser) error { // SelectOneOf will perform handshakes with the protocols on the given slice // until it finds one which is supported by the muxer. -func SelectOneOf(protos []string, rwc io.ReadWriteCloser) (string, error) { +func SelectOneOf(protos []string, rwc io.ReadWriteCloser) (proto string, err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "caught panic: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic selecting one of protocols: %s", rerr) + } + }() + if len(protos) == 0 { return "", ErrNoProtocols } @@ -78,9 +95,16 @@ func SelectOneOf(protos []string, rwc io.ReadWriteCloser) (string, error) { const simOpenProtocol = "/libp2p/simultaneous-connect" -// Performs protocol negotiation with the simultaneous open extension; the returned boolean -// indicator will be true if we should act as a server. -func SelectWithSimopenOrFail(protos []string, rwc io.ReadWriteCloser) (string, bool, error) { +// SelectWithSimopenOrFail performs protocol negotiation with the simultaneous open extension. +// The returned boolean indicator will be true if we should act as a server. +func SelectWithSimopenOrFail(protos []string, rwc io.ReadWriteCloser) (proto string, isServer bool, err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "caught panic: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic selecting protocol with simopen: %s", rerr) + } + }() + if len(protos) == 0 { return "", false, ErrNoProtocols } @@ -97,8 +121,7 @@ func SelectWithSimopenOrFail(protos []string, rwc io.ReadWriteCloser) (string, b werrCh <- err }() - err := readMultistreamHeader(rwc) - if err != nil { + if err := readMultistreamHeader(rwc); err != nil { return "", false, err } @@ -284,18 +307,6 @@ func simOpenSelectClient(protos []string, rwc io.ReadWriteCloser) (string, error return selectProtosOrFail(protos, rwc) } -func handshake(rw io.ReadWriter) error { - errCh := make(chan error, 1) - go func() { - errCh <- delimWriteBuffered(rw, []byte(ProtocolID)) - }() - - if err := readMultistreamHeader(rw); err != nil { - return err - } - return <-errCh -} - func readMultistreamHeader(r io.Reader) error { tok, err := ReadNextToken(r) if err != nil { diff --git a/vendor/github.com/multiformats/go-multistream/go.mod b/vendor/github.com/multiformats/go-multistream/go.mod deleted file mode 100644 index aa76af9f6b..0000000000 --- a/vendor/github.com/multiformats/go-multistream/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/multiformats/go-multistream - -go 1.15 - -require github.com/multiformats/go-varint v0.0.6 diff --git a/vendor/github.com/multiformats/go-multistream/go.sum b/vendor/github.com/multiformats/go-multistream/go.sum deleted file mode 100644 index 6d765fb53e..0000000000 --- a/vendor/github.com/multiformats/go-multistream/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= -github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= diff --git a/vendor/github.com/multiformats/go-multistream/lazyClient.go b/vendor/github.com/multiformats/go-multistream/lazyClient.go index 202fd6440e..76d79ffe62 100644 --- a/vendor/github.com/multiformats/go-multistream/lazyClient.go +++ b/vendor/github.com/multiformats/go-multistream/lazyClient.go @@ -77,6 +77,10 @@ func (l *lazyClientConn) doReadHandshake() { return } + if tok == "na" { + l.rerr = ErrNotSupported + return + } if tok != proto { l.rerr = fmt.Errorf("protocol mismatch in lazy handshake ( %s != %s )", tok, proto) return diff --git a/vendor/github.com/multiformats/go-multistream/lazyServer.go b/vendor/github.com/multiformats/go-multistream/lazyServer.go deleted file mode 100644 index b2c795b928..0000000000 --- a/vendor/github.com/multiformats/go-multistream/lazyServer.go +++ /dev/null @@ -1,51 +0,0 @@ -package multistream - -import ( - "io" - "sync" -) - -// lazyServerConn is an io.ReadWriteCloser adapter used for negotiating inbound -// streams (see NegotiateLazy). -// -// This is "lazy" because it doesn't wait for the write half to succeed before -// allowing us to read from the stream. -type lazyServerConn struct { - waitForHandshake sync.Once - werr error - - con io.ReadWriteCloser -} - -func (l *lazyServerConn) Write(b []byte) (int, error) { - l.waitForHandshake.Do(func() { panic("didn't initiate handshake") }) - if l.werr != nil { - return 0, l.werr - } - return l.con.Write(b) -} - -func (l *lazyServerConn) Read(b []byte) (int, error) { - if len(b) == 0 { - return 0, nil - } - return l.con.Read(b) -} - -func (l *lazyServerConn) Close() error { - // As the server, we MUST flush the handshake on close. Otherwise, if - // the other side is actually waiting for our close (i.e., reading until - // EOF), they may get an error even though we received the request. - // - // However, we MUST NOT return any errors from Flush. The initiator may - // have already closed their side for reading. Basically, _we_ don't - // care about the outcome of this flush, only the other side does. - _ = l.Flush() - return l.con.Close() -} - -// Flush sends the handshake. -func (l *lazyServerConn) Flush() error { - l.waitForHandshake.Do(func() { panic("didn't initiate handshake") }) - return l.werr -} diff --git a/vendor/github.com/multiformats/go-multistream/multistream-fuzz.zip b/vendor/github.com/multiformats/go-multistream/multistream-fuzz.zip deleted file mode 100644 index c4158f4888..0000000000 Binary files a/vendor/github.com/multiformats/go-multistream/multistream-fuzz.zip and /dev/null differ diff --git a/vendor/github.com/multiformats/go-multistream/multistream.go b/vendor/github.com/multiformats/go-multistream/multistream.go index 26d28c35b1..ff57554de4 100644 --- a/vendor/github.com/multiformats/go-multistream/multistream.go +++ b/vendor/github.com/multiformats/go-multistream/multistream.go @@ -5,9 +5,10 @@ package multistream import ( "bufio" - "bytes" "errors" "fmt" + "os" + "runtime/debug" "io" "sync" @@ -110,39 +111,6 @@ func delimWrite(w io.Writer, mes []byte) error { return nil } -// Ls is a Multistream muxer command which returns the list of handler names -// available on a muxer. -func Ls(rw io.ReadWriter) ([]string, error) { - err := handshake(rw) - if err != nil { - return nil, err - } - err = delimWriteBuffered(rw, []byte("ls")) - if err != nil { - return nil, err - } - - response, err := lpReadBuf(rw) - if err != nil { - return nil, err - } - - r := bytes.NewReader(response) - - var out []string - for { - val, err := lpReadBuf(r) - switch err { - default: - return nil, err - case io.EOF: - return out, nil - case nil: - out = append(out, string(val)) - } - } -} - func fulltextMatch(s string) func(string) bool { return func(a string) bool { return a == s @@ -220,101 +188,24 @@ func (msm *MultistreamMuxer) findHandler(proto string) *Handler { // a multistream, the protocol used, the handler and an error. It is lazy // because the write-handshake is performed on a subroutine, allowing this // to return before that handshake is completed. -func (msm *MultistreamMuxer) NegotiateLazy(rwc io.ReadWriteCloser) (io.ReadWriteCloser, string, HandlerFunc, error) { - pval := make(chan string, 1) - writeErr := make(chan error, 1) - defer close(pval) - - lzc := &lazyServerConn{ - con: rwc, - } - - started := make(chan struct{}) - go lzc.waitForHandshake.Do(func() { - close(started) - - defer close(writeErr) - - if err := delimWriteBuffered(rwc, []byte(ProtocolID)); err != nil { - lzc.werr = err - writeErr <- err - return - } - - for proto := range pval { - if err := delimWriteBuffered(rwc, []byte(proto)); err != nil { - lzc.werr = err - writeErr <- err - return - } - } - }) - <-started - - line, err := ReadNextToken(rwc) - if err != nil { - return nil, "", nil, err - } - - if line != ProtocolID { - rwc.Close() - return nil, "", nil, ErrIncorrectVersion - } - -loop: - for { - // Now read and respond to commands until they send a valid protocol id - tok, err := ReadNextToken(rwc) - if err != nil { - rwc.Close() - return nil, "", nil, err - } - - switch tok { - case "ls": - protos, err := msm.encodeLocalProtocols() - if err != nil { - rwc.Close() - return nil, "", nil, err - } - select { - case pval <- string(protos): - case err := <-writeErr: - rwc.Close() - return nil, "", nil, err - } - default: - h := msm.findHandler(tok) - if h == nil { - select { - case pval <- "na": - case err := <-writeErr: - rwc.Close() - return nil, "", nil, err - } - continue loop - } - - select { - case pval <- tok: - case <-writeErr: - // explicitly ignore this error. It will be returned to any - // writers and if we don't plan on writing anything, we still - // want to complete the handshake - } - - // hand off processing to the sub-protocol handler - return lzc, tok, h.Handle, nil - } - } +// Deprecated: use Negotiate instead. +func (msm *MultistreamMuxer) NegotiateLazy(rwc io.ReadWriteCloser) (rwc_ io.ReadWriteCloser, proto string, handler HandlerFunc, err error) { + proto, handler, err = msm.Negotiate(rwc) + return rwc, proto, handler, err } // Negotiate performs protocol selection and returns the protocol name and // the matching handler function for it (or an error). -func (msm *MultistreamMuxer) Negotiate(rwc io.ReadWriteCloser) (string, HandlerFunc, error) { +func (msm *MultistreamMuxer) Negotiate(rwc io.ReadWriteCloser) (proto string, handler HandlerFunc, err error) { + defer func() { + if rerr := recover(); rerr != nil { + fmt.Fprintf(os.Stderr, "caught panic: %s\n%s\n", rerr, debug.Stack()) + err = fmt.Errorf("panic in multistream negotiation: %s", rerr) + } + }() + // Send our protocol ID - err := delimWriteBuffered(rwc, []byte(ProtocolID)) - if err != nil { + if err := delimWriteBuffered(rwc, []byte(ProtocolID)); err != nil { return "", nil, err } @@ -336,58 +227,22 @@ loop: return "", nil, err } - switch tok { - case "ls": - err := msm.Ls(rwc) - if err != nil { - return "", nil, err - } - default: - h := msm.findHandler(tok) - if h == nil { - err := delimWriteBuffered(rwc, []byte("na")) - if err != nil { - return "", nil, err - } - continue loop - } - - err := delimWriteBuffered(rwc, []byte(tok)) - if err != nil { + h := msm.findHandler(tok) + if h == nil { + if err := delimWriteBuffered(rwc, []byte("na")); err != nil { return "", nil, err } - - // hand off processing to the sub-protocol handler - return tok, h.Handle, nil + continue loop } - } -} + if err := delimWriteBuffered(rwc, []byte(tok)); err != nil { + return "", nil, err + } -// Ls implements the "ls" command which writes the list of -// supported protocols to the given Writer. -func (msm *MultistreamMuxer) Ls(w io.Writer) error { - protos, err := msm.encodeLocalProtocols() - if err != nil { - return err + // hand off processing to the sub-protocol handler + return tok, h.Handle, nil } - return delimWrite(w, protos) -} -// encodeLocalProtocols encodes the protocols this multistream-select router -// handles, packed in a list of varint-delimited strings. -func (msm *MultistreamMuxer) encodeLocalProtocols() ([]byte, error) { - buf := new(bytes.Buffer) - msm.handlerlock.RLock() - for _, h := range msm.handlers { - err := delimWrite(buf, []byte(h.AddName)) - if err != nil { - msm.handlerlock.RUnlock() - return nil, err - } - } - msm.handlerlock.RUnlock() - return buf.Bytes(), nil } // Handle performs protocol negotiation on a ReadWriteCloser @@ -437,7 +292,7 @@ func lpReadBuf(r io.Reader) ([]byte, error) { return nil, err } - if length > 64*1024 { + if length > 1024 { return nil, ErrTooLarge } diff --git a/vendor/github.com/multiformats/go-multistream/multistream_fuzz.go b/vendor/github.com/multiformats/go-multistream/multistream_fuzz.go index 602bbb5841..3d65ca600b 100644 --- a/vendor/github.com/multiformats/go-multistream/multistream_fuzz.go +++ b/vendor/github.com/multiformats/go-multistream/multistream_fuzz.go @@ -1,3 +1,4 @@ +//go:build gofuzz // +build gofuzz package multistream diff --git a/vendor/github.com/libp2p/go-libp2p-tls/version.json b/vendor/github.com/multiformats/go-multistream/version.json similarity index 100% rename from vendor/github.com/libp2p/go-libp2p-tls/version.json rename to vendor/github.com/multiformats/go-multistream/version.json diff --git a/vendor/github.com/multiformats/go-varint/go.mod b/vendor/github.com/multiformats/go-varint/go.mod deleted file mode 100644 index f32e76408e..0000000000 --- a/vendor/github.com/multiformats/go-varint/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/multiformats/go-varint - -go 1.12 diff --git a/vendor/github.com/nxadm/tail/go.mod b/vendor/github.com/nxadm/tail/go.mod deleted file mode 100644 index 5de9a60618..0000000000 --- a/vendor/github.com/nxadm/tail/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/nxadm/tail - -go 1.13 - -require ( - github.com/fsnotify/fsnotify v1.4.9 - gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 -) diff --git a/vendor/github.com/nxadm/tail/go.sum b/vendor/github.com/nxadm/tail/go.sum deleted file mode 100644 index 3485daedbd..0000000000 --- a/vendor/github.com/nxadm/tail/go.sum +++ /dev/null @@ -1,6 +0,0 @@ -github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9 h1:L2auWcuQIvxz9xSEqzESnV/QN/gNRXNApHi3fYwl2w0= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= diff --git a/vendor/github.com/oklog/run/.travis.yml b/vendor/github.com/oklog/run/.travis.yml deleted file mode 100644 index 362bdd41c0..0000000000 --- a/vendor/github.com/oklog/run/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ -language: go -sudo: false -go: - - 1.x - - tip -install: - - go get -v github.com/golang/lint/golint - - go build ./... -script: - - go vet ./... - - $HOME/gopath/bin/golint . - - go test -v -race ./... diff --git a/vendor/github.com/oklog/run/README.md b/vendor/github.com/oklog/run/README.md index a7228cd9a3..eba7d11cf3 100644 --- a/vendor/github.com/oklog/run/README.md +++ b/vendor/github.com/oklog/run/README.md @@ -1,7 +1,7 @@ # run [![GoDoc](https://godoc.org/github.com/oklog/run?status.svg)](https://godoc.org/github.com/oklog/run) -[![Build Status](https://travis-ci.org/oklog/run.svg?branch=master)](https://travis-ci.org/oklog/run) +[![Build Status](https://img.shields.io/endpoint.svg?url=https%3A%2F%2Factions-badge.atrox.dev%2Foklog%2Frun%2Fbadge&style=flat-square&label=build)](https://github.com/oklog/run/actions?query=workflow%3ATest) [![Go Report Card](https://goreportcard.com/badge/github.com/oklog/run)](https://goreportcard.com/report/github.com/oklog/run) [![Apache 2 licensed](https://img.shields.io/badge/license-Apache2-blue.svg)](https://raw.githubusercontent.com/oklog/run/master/LICENSE) @@ -10,9 +10,11 @@ run.Group is a universal mechanism to manage goroutine lifecycles. Create a zero-value run.Group, and then add actors to it. Actors are defined as a pair of functions: an **execute** function, which should run synchronously; and an **interrupt** function, which, when invoked, should cause the execute -function to return. Finally, invoke Run, which blocks until the first actor -returns. This general-purpose API allows callers to model pretty much any -runnable task, and achieve well-defined lifecycle semantics for the group. +function to return. Finally, invoke Run, which concurrently runs all of the +actors, waits until the first actor exits, invokes the interrupt functions, and +finally returns control to the caller only once all actors have returned. This +general-purpose API allows callers to model pretty much any runnable task, and +achieve well-defined lifecycle semantics for the group. run.Group was written to manage component lifecycles in func main for [OK Log](https://github.com/oklog/oklog). diff --git a/vendor/github.com/oklog/run/actors.go b/vendor/github.com/oklog/run/actors.go new file mode 100644 index 0000000000..ef93495d3f --- /dev/null +++ b/vendor/github.com/oklog/run/actors.go @@ -0,0 +1,38 @@ +package run + +import ( + "context" + "fmt" + "os" + "os/signal" +) + +// SignalHandler returns an actor, i.e. an execute and interrupt func, that +// terminates with SignalError when the process receives one of the provided +// signals, or the parent context is canceled. +func SignalHandler(ctx context.Context, signals ...os.Signal) (execute func() error, interrupt func(error)) { + ctx, cancel := context.WithCancel(ctx) + return func() error { + c := make(chan os.Signal, 1) + signal.Notify(c, signals...) + select { + case sig := <-c: + return SignalError{Signal: sig} + case <-ctx.Done(): + return ctx.Err() + } + }, func(error) { + cancel() + } +} + +// SignalError is returned by the signal handler's execute function +// when it terminates due to a received signal. +type SignalError struct { + Signal os.Signal +} + +// Error implements the error interface. +func (e SignalError) Error() string { + return fmt.Sprintf("received signal %s", e.Signal) +} diff --git a/vendor/github.com/opentracing/opentracing-go/go.mod b/vendor/github.com/opentracing/opentracing-go/go.mod deleted file mode 100644 index bf48bb5d73..0000000000 --- a/vendor/github.com/opentracing/opentracing-go/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module github.com/opentracing/opentracing-go - -go 1.14 - -require github.com/stretchr/testify v1.3.0 diff --git a/vendor/github.com/opentracing/opentracing-go/go.sum b/vendor/github.com/opentracing/opentracing-go/go.sum deleted file mode 100644 index 4347755afe..0000000000 --- a/vendor/github.com/opentracing/opentracing-go/go.sum +++ /dev/null @@ -1,7 +0,0 @@ -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/github.com/pbnjay/memory/go.mod b/vendor/github.com/pbnjay/memory/go.mod deleted file mode 100644 index 5965765912..0000000000 --- a/vendor/github.com/pbnjay/memory/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/pbnjay/memory - -go 1.16 diff --git a/vendor/github.com/pierrec/lz4/lz4.go b/vendor/github.com/pierrec/lz4/lz4.go index 6c73539a34..a3284bdf70 100644 --- a/vendor/github.com/pierrec/lz4/lz4.go +++ b/vendor/github.com/pierrec/lz4/lz4.go @@ -10,9 +10,10 @@ // package lz4 -import "math/bits" - -import "sync" +import ( + "math/bits" + "sync" +) const ( // Extension is the LZ4 frame file name extension @@ -20,8 +21,9 @@ const ( // Version is the LZ4 frame format version Version = 1 - frameMagic uint32 = 0x184D2204 - frameSkipMagic uint32 = 0x184D2A50 + frameMagic uint32 = 0x184D2204 + frameSkipMagic uint32 = 0x184D2A50 + frameMagicLegacy uint32 = 0x184C2102 // The following constants are used to setup the compression algorithm. minMatch = 4 // the minimum size of the match sequence size (4 bytes) @@ -108,6 +110,7 @@ type Header struct { done bool // Header processed flag (Read or Write and checked). } +// Reset reset internal status func (h *Header) Reset() { h.done = false } diff --git a/vendor/github.com/pierrec/lz4/reader_legacy.go b/vendor/github.com/pierrec/lz4/reader_legacy.go new file mode 100644 index 0000000000..1670a77d02 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/reader_legacy.go @@ -0,0 +1,207 @@ +package lz4 + +import ( + "encoding/binary" + "fmt" + "io" +) + +// ReaderLegacy implements the LZ4Demo frame decoder. +// The Header is set after the first call to Read(). +type ReaderLegacy struct { + Header + // Handler called when a block has been successfully read. + // It provides the number of bytes read. + OnBlockDone func(size int) + + lastBlock bool + buf [8]byte // Scrap buffer. + pos int64 // Current position in src. + src io.Reader // Source. + zdata []byte // Compressed data. + data []byte // Uncompressed data. + idx int // Index of unread bytes into data. + skip int64 // Bytes to skip before next read. + dpos int64 // Position in dest +} + +// NewReaderLegacy returns a new LZ4Demo frame decoder. +// No access to the underlying io.Reader is performed. +func NewReaderLegacy(src io.Reader) *ReaderLegacy { + r := &ReaderLegacy{src: src} + return r +} + +// readHeader checks the frame magic number and parses the frame descriptoz. +// Skippable frames are supported even as a first frame although the LZ4 +// specifications recommends skippable frames not to be used as first frames. +func (z *ReaderLegacy) readLegacyHeader() error { + z.lastBlock = false + magic, err := z.readUint32() + if err != nil { + z.pos += 4 + if err == io.ErrUnexpectedEOF { + return io.EOF + } + return err + } + if magic != frameMagicLegacy { + return ErrInvalid + } + z.pos += 4 + + // Legacy has fixed 8MB blocksizes + // https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md#legacy-frame + bSize := blockSize4M * 2 + + // Allocate the compressed/uncompressed buffers. + // The compressed buffer cannot exceed the uncompressed one. + if n := 2 * bSize; cap(z.zdata) < n { + z.zdata = make([]byte, n, n) + } + if debugFlag { + debug("header block max size size=%d", bSize) + } + z.zdata = z.zdata[:bSize] + z.data = z.zdata[:cap(z.zdata)][bSize:] + z.idx = len(z.data) + + z.Header.done = true + if debugFlag { + debug("header read: %v", z.Header) + } + + return nil +} + +// Read decompresses data from the underlying source into the supplied buffer. +// +// Since there can be multiple streams concatenated, Header values may +// change between calls to Read(). If that is the case, no data is actually read from +// the underlying io.Reader, to allow for potential input buffer resizing. +func (z *ReaderLegacy) Read(buf []byte) (int, error) { + if debugFlag { + debug("Read buf len=%d", len(buf)) + } + if !z.Header.done { + if err := z.readLegacyHeader(); err != nil { + return 0, err + } + if debugFlag { + debug("header read OK compressed buffer %d / %d uncompressed buffer %d : %d index=%d", + len(z.zdata), cap(z.zdata), len(z.data), cap(z.data), z.idx) + } + } + + if len(buf) == 0 { + return 0, nil + } + + if z.idx == len(z.data) { + // No data ready for reading, process the next block. + if debugFlag { + debug(" reading block from writer %d %d", z.idx, blockSize4M*2) + } + + // Reset uncompressed buffer + z.data = z.zdata[:cap(z.zdata)][len(z.zdata):] + + bLen, err := z.readUint32() + if err != nil { + return 0, err + } + if debugFlag { + debug(" bLen %d (0x%x) offset = %d (0x%x)", bLen, bLen, z.pos, z.pos) + } + z.pos += 4 + + // Legacy blocks are always compressed, even when detrimental + if debugFlag { + debug(" compressed block size %d", bLen) + } + + if int(bLen) > cap(z.data) { + return 0, fmt.Errorf("lz4: invalid block size: %d", bLen) + } + zdata := z.zdata[:bLen] + if _, err := io.ReadFull(z.src, zdata); err != nil { + return 0, err + } + z.pos += int64(bLen) + + n, err := UncompressBlock(zdata, z.data) + if err != nil { + return 0, err + } + + z.data = z.data[:n] + if z.OnBlockDone != nil { + z.OnBlockDone(n) + } + + z.idx = 0 + + // Legacy blocks are fixed to 8MB, if we read a decompressed block smaller than this + // it means we've reached the end... + if n < blockSize4M*2 { + z.lastBlock = true + } + } + + if z.skip > int64(len(z.data[z.idx:])) { + z.skip -= int64(len(z.data[z.idx:])) + z.dpos += int64(len(z.data[z.idx:])) + z.idx = len(z.data) + return 0, nil + } + + z.idx += int(z.skip) + z.dpos += z.skip + z.skip = 0 + + n := copy(buf, z.data[z.idx:]) + z.idx += n + z.dpos += int64(n) + if debugFlag { + debug("%v] copied %d bytes to input (%d:%d)", z.lastBlock, n, z.idx, len(z.data)) + } + if z.lastBlock && len(z.data) == z.idx { + return n, io.EOF + } + return n, nil +} + +// Seek implements io.Seeker, but supports seeking forward from the current +// position only. Any other seek will return an error. Allows skipping output +// bytes which aren't needed, which in some scenarios is faster than reading +// and discarding them. +// Note this may cause future calls to Read() to read 0 bytes if all of the +// data they would have returned is skipped. +func (z *ReaderLegacy) Seek(offset int64, whence int) (int64, error) { + if offset < 0 || whence != io.SeekCurrent { + return z.dpos + z.skip, ErrUnsupportedSeek + } + z.skip += offset + return z.dpos + z.skip, nil +} + +// Reset discards the Reader's state and makes it equivalent to the +// result of its original state from NewReader, but reading from r instead. +// This permits reusing a Reader rather than allocating a new one. +func (z *ReaderLegacy) Reset(r io.Reader) { + z.Header = Header{} + z.pos = 0 + z.src = r + z.zdata = z.zdata[:0] + z.data = z.data[:0] + z.idx = 0 +} + +// readUint32 reads an uint32 into the supplied buffer. +// The idea is to make use of the already allocated buffers avoiding additional allocations. +func (z *ReaderLegacy) readUint32() (uint32, error) { + buf := z.buf[:4] + _, err := io.ReadFull(z.src, buf) + x := binary.LittleEndian.Uint32(buf) + return x, err +} diff --git a/vendor/github.com/pierrec/lz4/writer.go b/vendor/github.com/pierrec/lz4/writer.go index 324f1386b8..f066d56305 100644 --- a/vendor/github.com/pierrec/lz4/writer.go +++ b/vendor/github.com/pierrec/lz4/writer.go @@ -3,9 +3,10 @@ package lz4 import ( "encoding/binary" "fmt" - "github.com/pierrec/lz4/internal/xxh32" "io" "runtime" + + "github.com/pierrec/lz4/internal/xxh32" ) // zResult contains the results of compressing a block. @@ -83,10 +84,8 @@ func (z *Writer) WithConcurrency(n int) *Writer { z.err = err } } - if isCompressed := res.size&compressedBlockFlag == 0; isCompressed { - // It is now safe to release the buffer as no longer in use by any goroutine. - putBuffer(cap(res.data), res.data) - } + // It is now safe to release the buffer as no longer in use by any goroutine. + putBuffer(cap(res.data), res.data) if h := z.OnBlockDone; h != nil { h(n) } @@ -230,7 +229,12 @@ func (z *Writer) compressBlock(data []byte) error { if z.c != nil { c := make(chan zResult) z.c <- c // Send now to guarantee order - go writerCompressBlock(c, z.Header, data) + + // get a buffer from the pool and copy the data over + block := getBuffer(z.Header.BlockMaxSize)[:len(data)] + copy(block, data) + + go writerCompressBlock(c, z.Header, block) return nil } @@ -298,7 +302,9 @@ func (z *Writer) Flush() error { return nil } - data := z.data[:z.idx] + data := getBuffer(z.Header.BlockMaxSize)[:len(z.data[:z.idx])] + copy(data, z.data[:z.idx]) + z.idx = 0 if z.c == nil { return z.compressBlock(data) @@ -370,6 +376,10 @@ func (z *Writer) Reset(w io.Writer) { z.checksum.Reset() z.idx = 0 z.err = nil + // reset hashtable to ensure deterministic output. + for i := range z.hashtable { + z.hashtable[i] = 0 + } z.WithConcurrency(n) } @@ -397,9 +407,13 @@ func writerCompressBlock(c chan zResult, header Header, data []byte) { if zn > 0 && zn < len(data) { res.size = uint32(zn) res.data = zdata[:zn] + // release the uncompressed block since it is not used anymore + putBuffer(header.BlockMaxSize, data) } else { res.size = uint32(len(data)) | compressedBlockFlag res.data = data + // release the compressed block since it was not used + putBuffer(header.BlockMaxSize, zdata) } if header.BlockChecksum { res.checksum = xxh32.ChecksumZero(res.data) diff --git a/vendor/github.com/pierrec/lz4/writer_legacy.go b/vendor/github.com/pierrec/lz4/writer_legacy.go new file mode 100644 index 0000000000..ca8dc8c7f0 --- /dev/null +++ b/vendor/github.com/pierrec/lz4/writer_legacy.go @@ -0,0 +1,182 @@ +package lz4 + +import ( + "encoding/binary" + "io" +) + +// WriterLegacy implements the LZ4Demo frame decoder. +type WriterLegacy struct { + Header + // Handler called when a block has been successfully read. + // It provides the number of bytes read. + OnBlockDone func(size int) + + dst io.Writer // Destination. + data []byte // Data to be compressed + buffer for compressed data. + idx int // Index into data. + hashtable [winSize]int // Hash table used in CompressBlock(). +} + +// NewWriterLegacy returns a new LZ4 encoder for the legacy frame format. +// No access to the underlying io.Writer is performed. +// The supplied Header is checked at the first Write. +// It is ok to change it before the first Write but then not until a Reset() is performed. +func NewWriterLegacy(dst io.Writer) *WriterLegacy { + z := new(WriterLegacy) + z.Reset(dst) + return z +} + +// Write compresses data from the supplied buffer into the underlying io.Writer. +// Write does not return until the data has been written. +func (z *WriterLegacy) Write(buf []byte) (int, error) { + if !z.Header.done { + if err := z.writeHeader(); err != nil { + return 0, err + } + } + if debugFlag { + debug("input buffer len=%d index=%d", len(buf), z.idx) + } + + zn := len(z.data) + var n int + for len(buf) > 0 { + if z.idx == 0 && len(buf) >= zn { + // Avoid a copy as there is enough data for a block. + if err := z.compressBlock(buf[:zn]); err != nil { + return n, err + } + n += zn + buf = buf[zn:] + continue + } + // Accumulate the data to be compressed. + m := copy(z.data[z.idx:], buf) + n += m + z.idx += m + buf = buf[m:] + if debugFlag { + debug("%d bytes copied to buf, current index %d", n, z.idx) + } + + if z.idx < len(z.data) { + // Buffer not filled. + if debugFlag { + debug("need more data for compression") + } + return n, nil + } + + // Buffer full. + if err := z.compressBlock(z.data); err != nil { + return n, err + } + z.idx = 0 + } + + return n, nil +} + +// writeHeader builds and writes the header to the underlying io.Writer. +func (z *WriterLegacy) writeHeader() error { + // Legacy has fixed 8MB blocksizes + // https://github.com/lz4/lz4/blob/dev/doc/lz4_Frame_format.md#legacy-frame + bSize := 2 * blockSize4M + + buf := make([]byte, 2*bSize, 2*bSize) + z.data = buf[:bSize] // Uncompressed buffer is the first half. + + z.idx = 0 + + // Header consists of one mageic number, write it out. + if err := binary.Write(z.dst, binary.LittleEndian, frameMagicLegacy); err != nil { + return err + } + z.Header.done = true + if debugFlag { + debug("wrote header %v", z.Header) + } + + return nil +} + +// compressBlock compresses a block. +func (z *WriterLegacy) compressBlock(data []byte) error { + bSize := 2 * blockSize4M + zdata := z.data[bSize:cap(z.data)] + // The compressed block size cannot exceed the input's. + var zn int + + if level := z.Header.CompressionLevel; level != 0 { + zn, _ = CompressBlockHC(data, zdata, level) + } else { + zn, _ = CompressBlock(data, zdata, z.hashtable[:]) + } + + if debugFlag { + debug("block compression %d => %d", len(data), zn) + } + zdata = zdata[:zn] + + // Write the block. + if err := binary.Write(z.dst, binary.LittleEndian, uint32(zn)); err != nil { + return err + } + written, err := z.dst.Write(zdata) + if err != nil { + return err + } + if h := z.OnBlockDone; h != nil { + h(written) + } + return nil +} + +// Flush flushes any pending compressed data to the underlying writer. +// Flush does not return until the data has been written. +// If the underlying writer returns an error, Flush returns that error. +func (z *WriterLegacy) Flush() error { + if debugFlag { + debug("flush with index %d", z.idx) + } + if z.idx == 0 { + return nil + } + + data := z.data[:z.idx] + z.idx = 0 + return z.compressBlock(data) +} + +// Close closes the WriterLegacy, flushing any unwritten data to the underlying io.Writer, but does not close the underlying io.Writer. +func (z *WriterLegacy) Close() error { + if !z.Header.done { + if err := z.writeHeader(); err != nil { + return err + } + } + if err := z.Flush(); err != nil { + return err + } + + if debugFlag { + debug("writing last empty block") + } + + return nil +} + +// Reset clears the state of the WriterLegacy z such that it is equivalent to its +// initial state from NewWriterLegacy, but instead writing to w. +// No access to the underlying io.Writer is performed. +func (z *WriterLegacy) Reset(w io.Writer) { + z.Header.Reset() + z.dst = w + z.idx = 0 + // reset hashtable to ensure deterministic output. + for i := range z.hashtable { + z.hashtable[i] = 0 + } +} diff --git a/vendor/github.com/prometheus/common/expfmt/fuzz.go b/vendor/github.com/prometheus/common/expfmt/fuzz.go index dc2eedeefc..f819e4f8b5 100644 --- a/vendor/github.com/prometheus/common/expfmt/fuzz.go +++ b/vendor/github.com/prometheus/common/expfmt/fuzz.go @@ -12,6 +12,7 @@ // limitations under the License. // Build only when actually fuzzing +//go:build gofuzz // +build gofuzz package expfmt diff --git a/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go index 8a9313a3be..9d94ae9eff 100644 --- a/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go +++ b/vendor/github.com/prometheus/common/expfmt/openmetrics_create.go @@ -22,7 +22,6 @@ import ( "strconv" "strings" - "github.com/golang/protobuf/ptypes" "github.com/prometheus/common/model" dto "github.com/prometheus/client_model/go" @@ -473,10 +472,11 @@ func writeExemplar(w enhancedWriter, e *dto.Exemplar) (int, error) { if err != nil { return written, err } - ts, err := ptypes.Timestamp((*e).Timestamp) + err = (*e).Timestamp.CheckValid() if err != nil { return written, err } + ts := (*e).Timestamp.AsTime() // TODO(beorn7): Format this directly from components of ts to // avoid overflow/underflow and precision issues of the float // conversion. diff --git a/vendor/github.com/prometheus/common/model/time.go b/vendor/github.com/prometheus/common/model/time.go index 7f67b16e42..c909b8aa8c 100644 --- a/vendor/github.com/prometheus/common/model/time.go +++ b/vendor/github.com/prometheus/common/model/time.go @@ -193,7 +193,7 @@ func ParseDuration(durationStr string) (Duration, error) { // Allow 0 without a unit. return 0, nil case "": - return 0, fmt.Errorf("empty duration string") + return 0, errors.New("empty duration string") } matches := durationRE.FindStringSubmatch(durationStr) if matches == nil { diff --git a/vendor/github.com/prometheus/procfs/go.mod b/vendor/github.com/prometheus/procfs/go.mod deleted file mode 100644 index ba6681f521..0000000000 --- a/vendor/github.com/prometheus/procfs/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/prometheus/procfs - -go 1.13 - -require ( - github.com/google/go-cmp v0.5.4 - golang.org/x/sync v0.0.0-20201207232520-09787c993a3a - golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c -) diff --git a/vendor/github.com/prometheus/procfs/go.sum b/vendor/github.com/prometheus/procfs/go.sum deleted file mode 100644 index 7ceaf56b7d..0000000000 --- a/vendor/github.com/prometheus/procfs/go.sum +++ /dev/null @@ -1,8 +0,0 @@ -github.com/google/go-cmp v0.5.4 h1:L8R9j+yAqZuZjsqh/z+F1NCffTKKLShY6zXTItVIZ8M= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c h1:VwygUrnw9jn88c4u8GD3rZQbqrP/tgas88tPUbBxQrk= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/vendor/github.com/raulk/clock/go.mod b/vendor/github.com/raulk/clock/go.mod deleted file mode 100644 index cb6f7f73d4..0000000000 --- a/vendor/github.com/raulk/clock/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/raulk/clock - -go 1.14 diff --git a/vendor/github.com/raulk/go-watchdog/go.mod b/vendor/github.com/raulk/go-watchdog/go.mod deleted file mode 100644 index b133a7cf6f..0000000000 --- a/vendor/github.com/raulk/go-watchdog/go.mod +++ /dev/null @@ -1,13 +0,0 @@ -module github.com/raulk/go-watchdog - -go 1.15 - -require ( - github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327 - github.com/elastic/gosigar v0.12.0 - github.com/kr/pretty v0.1.0 // indirect - github.com/opencontainers/runtime-spec v1.0.2 - github.com/raulk/clock v1.1.0 - github.com/stretchr/testify v1.4.0 - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect -) diff --git a/vendor/github.com/raulk/go-watchdog/go.sum b/vendor/github.com/raulk/go-watchdog/go.sum deleted file mode 100644 index 5d43f306c3..0000000000 --- a/vendor/github.com/raulk/go-watchdog/go.sum +++ /dev/null @@ -1,57 +0,0 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/cilium/ebpf v0.2.0/go.mod h1:To2CFviqOWL/M0gIMsvSMlqe7em/l1ALkX1PyjrX2Qs= -github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327 h1:7grrpcfCtbZLsjtB0DgMuzs1umsJmpzaHMZ6cO6iAWw= -github.com/containerd/cgroups v0.0.0-20201119153540-4cbc285b3327/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE= -github.com/coreos/go-systemd/v22 v22.1.0 h1:kq/SbG2BCKLkDKkjQf5OWwKWUKj1lgs3lFI4PxnR5lg= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/elastic/gosigar v0.12.0 h1:AsdhYCJlTudhfOYQyFNgx+fIVTfrDO0V1ST0vHgiapU= -github.com/elastic/gosigar v0.12.0/go.mod h1:iXRIGg2tLnu7LBdpqzyQfGDEidKCfWcCMS0WKyPWoMs= -github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls= -github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/opencontainers/runtime-spec v1.0.2 h1:UfAcuLBJB9Coz72x1hgl8O5RVzTdNiaglX6v2DM6FI0= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/raulk/clock v1.1.0 h1:dpb29+UKMbLqiU/jqIJptgLR1nn23HLgMY0sTCDza5Y= -github.com/raulk/clock v1.1.0/go.mod h1:3MpVxdZ/ODBQDxbN+kzshf5OSZwPjtMDx6BBXBmOeY0= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0 h1:8H8QZJ30plJyIVj60H3lr8TZGIq2Fh3Cyrs/ZNg1foU= -golang.org/x/sys v0.0.0-20180810173357-98c5dad5d1a0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9 h1:1/DFK4b7JH8DmkqhUk48onnSfrPzImPoVxuomtbT2nk= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/vendor/github.com/ryanuber/go-glob/go.mod b/vendor/github.com/ryanuber/go-glob/go.mod deleted file mode 100644 index f38203593c..0000000000 --- a/vendor/github.com/ryanuber/go-glob/go.mod +++ /dev/null @@ -1 +0,0 @@ -module github.com/ryanuber/go-glob diff --git a/vendor/github.com/spf13/cobra/go.mod b/vendor/github.com/spf13/cobra/go.mod deleted file mode 100644 index 2d6855911d..0000000000 --- a/vendor/github.com/spf13/cobra/go.mod +++ /dev/null @@ -1,10 +0,0 @@ -module github.com/spf13/cobra - -go 1.15 - -require ( - github.com/cpuguy83/go-md2man/v2 v2.0.1 - github.com/inconshreveable/mousetrap v1.0.0 - github.com/spf13/pflag v1.0.5 - gopkg.in/yaml.v2 v2.4.0 -) diff --git a/vendor/github.com/spf13/cobra/go.sum b/vendor/github.com/spf13/cobra/go.sum deleted file mode 100644 index 431058ed0f..0000000000 --- a/vendor/github.com/spf13/cobra/go.sum +++ /dev/null @@ -1,18 +0,0 @@ -github.com/cpuguy83/go-md2man/v2 v2.0.1 h1:r/myEWzV9lfsM1tFLgDyu0atFtJ1fXn261LKYj/3DxU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= diff --git a/vendor/github.com/spf13/pflag/go.mod b/vendor/github.com/spf13/pflag/go.mod deleted file mode 100644 index b2287eec13..0000000000 --- a/vendor/github.com/spf13/pflag/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/spf13/pflag - -go 1.12 diff --git a/vendor/github.com/spf13/pflag/go.sum b/vendor/github.com/spf13/pflag/go.sum deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/vendor/github.com/umbracle/ethgo/.gitignore b/vendor/github.com/umbracle/ethgo/.gitignore new file mode 100644 index 0000000000..851df5be96 --- /dev/null +++ b/vendor/github.com/umbracle/ethgo/.gitignore @@ -0,0 +1,10 @@ +bin/ +pkg/ + +.idea + +# website +node_modules +.next + +dist/ diff --git a/vendor/github.com/umbracle/ethgo/.goreleaser.yaml b/vendor/github.com/umbracle/ethgo/.goreleaser.yaml new file mode 100644 index 0000000000..d2a33d7c4f --- /dev/null +++ b/vendor/github.com/umbracle/ethgo/.goreleaser.yaml @@ -0,0 +1,28 @@ +before: + hooks: + - go mod tidy +builds: + - dir: cmd + env: + - CGO_ENABLED=0 + goos: + - linux + - windows + - darwin +archives: + - replacements: + darwin: Darwin + linux: Linux + windows: Windows + 386: i386 + amd64: x86_64 +checksum: + name_template: 'checksums.txt' +snapshot: + name_template: "{{ incpatch .Version }}-next" +changelog: + sort: asc + filters: + exclude: + - '^docs:' + - '^test:' diff --git a/vendor/github.com/umbracle/ethgo/CHANGELOG.md b/vendor/github.com/umbracle/ethgo/CHANGELOG.md new file mode 100644 index 0000000000..84f9b9662d --- /dev/null +++ b/vendor/github.com/umbracle/ethgo/CHANGELOG.md @@ -0,0 +1,28 @@ + +# 0.1.2 (Unreleased) + +- Update `btcd` library to new `v0.22.1` +- Add option in `contract` to send transactions with EIP-1559 [[GH-198](https://github.com/umbracle/ethgo/issues/198)] +- Add custom `TxnOpts` to send a transaction in `contract` [[GH-195](https://github.com/umbracle/ethgo/issues/195)] +- Add `ens resolve` command to resolve an ENS name [[GH-196](https://github.com/umbracle/ethgo/issues/196)] +- Fix signing of typed transactions [[GH-197](https://github.com/umbracle/ethgo/issues/197)] +- Fix. Use `ethgo.BlockNumber` input to make `Call` in contract [[GH-194](https://github.com/umbracle/ethgo/issues/194)] +- Add `testcases` for contract signature and transaction signing [[GH-193](https://github.com/umbracle/ethgo/issues/193)] +- Add `eth_feeHistory` rpc endpoint [[GH-192](https://github.com/umbracle/ethgo/issues/192)] +- Update `testserver` to `go-ethereum:v1.10.15` [[GH-191](https://github.com/umbracle/ethgo/issues/191)] +- Do not decode `to` in `Transaction` if not exists [[GH-190](https://github.com/umbracle/ethgo/issues/190)] + +# 0.1.1 (25 April, 2022) + +- Retrieve latest nonce when sending a transaction on `contract` [[GH-185](https://github.com/umbracle/ethgo/issues/185)] +- Add `etherscan.GasPrice` function to return last block gas price [[GH-182](https://github.com/umbracle/ethgo/issues/182)] +- Add `4byte` package and cli [[GH-178](https://github.com/umbracle/ethgo/issues/178)] +- Install and use `ethers.js` spec tests for wallet private key decoding [[GH-177](https://github.com/umbracle/ethgo/issues/177)] +- Add `GetLogs` function Etherscan to return logs by filter [[GH-170](https://github.com/umbracle/ethgo/issues/170)] +- Add `Copy` function to major data types [[GH-169](https://github.com/umbracle/ethgo/issues/169)] +- Parse `fixed bytes` type in event topic [[GH-168](https://github.com/umbracle/ethgo/issues/168)] +- Introduce `NodeProvider` and update `Contract` and `abigen` format. [[GH-167](https://github.com/umbracle/ethgo/issues/167)] + +# 0.1.0 (5 March, 2022) + +- Initial public release. diff --git a/vendor/github.com/umbracle/go-web3/LICENSE b/vendor/github.com/umbracle/ethgo/LICENSE similarity index 100% rename from vendor/github.com/umbracle/go-web3/LICENSE rename to vendor/github.com/umbracle/ethgo/LICENSE diff --git a/vendor/github.com/umbracle/go-web3/Makefile b/vendor/github.com/umbracle/ethgo/Makefile similarity index 53% rename from vendor/github.com/umbracle/go-web3/Makefile rename to vendor/github.com/umbracle/ethgo/Makefile index c380041f30..4b7790c896 100644 --- a/vendor/github.com/umbracle/go-web3/Makefile +++ b/vendor/github.com/umbracle/ethgo/Makefile @@ -3,8 +3,3 @@ build-artifacts: @echo "--> Build Artifacts" @sh -c ./scripts/build-artifacts.sh - -.PHONY: build-abigen -build-abigen: - @echo "--> Build abigen" - @sh -c ./scripts/build-abigen.sh diff --git a/vendor/github.com/umbracle/ethgo/README.md b/vendor/github.com/umbracle/ethgo/README.md new file mode 100644 index 0000000000..e5d7104a87 --- /dev/null +++ b/vendor/github.com/umbracle/ethgo/README.md @@ -0,0 +1,14 @@ + +# Eth-Go + +Ethgo is a lightweight SDK in Go to interact with Ethereum compatible blockchains. + +- Website: https://ethgo.dev + +Ethgo provides the next key features: + +- **Simple**: Light and with a small number of direct dependencies. + +- **Ethereum ecosystem**: Native integration with other tools from the ecosystem like `ens` and `etherscan`. + +- **Command-line-interface**: Ethgo is both a Golang SDK library and a CLI. diff --git a/vendor/github.com/umbracle/go-web3/abi/abi.go b/vendor/github.com/umbracle/ethgo/abi/abi.go similarity index 98% rename from vendor/github.com/umbracle/go-web3/abi/abi.go rename to vendor/github.com/umbracle/ethgo/abi/abi.go index a85ecb81b3..e74b13c634 100644 --- a/vendor/github.com/umbracle/go-web3/abi/abi.go +++ b/vendor/github.com/umbracle/ethgo/abi/abi.go @@ -10,7 +10,7 @@ import ( "strings" "sync" - "github.com/umbracle/go-web3" + "github.com/umbracle/ethgo" "golang.org/x/crypto/sha3" ) @@ -292,7 +292,7 @@ func (e *Event) Sig() string { } // ID returns the id of the event used during logs -func (e *Event) ID() (res web3.Hash) { +func (e *Event) ID() (res ethgo.Hash) { k := acquireKeccak() k.Write([]byte(e.Sig())) dst := k.Sum(nil) @@ -364,7 +364,7 @@ func NewEventFromType(name string, typ *Type) *Event { } // Match checks wheter the log is from this event -func (e *Event) Match(log *web3.Log) bool { +func (e *Event) Match(log *ethgo.Log) bool { if len(log.Topics) == 0 { return false } @@ -375,7 +375,7 @@ func (e *Event) Match(log *web3.Log) bool { } // ParseLog parses a log with this event -func (e *Event) ParseLog(log *web3.Log) (map[string]interface{}, error) { +func (e *Event) ParseLog(log *ethgo.Log) (map[string]interface{}, error) { if !e.Match(log) { return nil, fmt.Errorf("log does not match this event") } diff --git a/vendor/github.com/umbracle/go-web3/abi/decode.go b/vendor/github.com/umbracle/ethgo/abi/decode.go similarity index 98% rename from vendor/github.com/umbracle/go-web3/abi/decode.go rename to vendor/github.com/umbracle/ethgo/abi/decode.go index 5c5d0ee5a3..52979a45b9 100644 --- a/vendor/github.com/umbracle/go-web3/abi/decode.go +++ b/vendor/github.com/umbracle/ethgo/abi/decode.go @@ -8,7 +8,7 @@ import ( "strconv" "github.com/mitchellh/mapstructure" - "github.com/umbracle/go-web3" + "github.com/umbracle/ethgo" ) // Decode decodes the input with a given type @@ -101,8 +101,8 @@ var ( big.NewInt(-1)) ) -func readAddr(b []byte) (web3.Address, error) { - res := web3.Address{} +func readAddr(b []byte) (ethgo.Address, error) { + res := ethgo.Address{} if len(b) != 32 { return res, fmt.Errorf("len is not correct") } diff --git a/vendor/github.com/umbracle/go-web3/abi/encode.go b/vendor/github.com/umbracle/ethgo/abi/encode.go similarity index 99% rename from vendor/github.com/umbracle/go-web3/abi/encode.go rename to vendor/github.com/umbracle/ethgo/abi/encode.go index 7721a3bf60..30f86f09cf 100644 --- a/vendor/github.com/umbracle/go-web3/abi/encode.go +++ b/vendor/github.com/umbracle/ethgo/abi/encode.go @@ -3,11 +3,12 @@ package abi import ( "encoding/hex" "fmt" - "github.com/umbracle/go-web3" "math/big" "reflect" "strconv" "strings" + + "github.com/umbracle/ethgo" ) var ( @@ -189,7 +190,7 @@ func encodeAddress(v reflect.Value) ([]byte, error) { v = convertArrayToBytes(v) } if v.Kind() == reflect.String { - var addr web3.Address + var addr ethgo.Address if err := addr.UnmarshalText([]byte(v.String())); err != nil { return nil, err } diff --git a/vendor/github.com/umbracle/go-web3/abi/revert.go b/vendor/github.com/umbracle/ethgo/abi/revert.go similarity index 100% rename from vendor/github.com/umbracle/go-web3/abi/revert.go rename to vendor/github.com/umbracle/ethgo/abi/revert.go diff --git a/vendor/github.com/umbracle/go-web3/abi/testing.go b/vendor/github.com/umbracle/ethgo/abi/testing.go similarity index 98% rename from vendor/github.com/umbracle/go-web3/abi/testing.go rename to vendor/github.com/umbracle/ethgo/abi/testing.go index b0ec28080c..aafca72e16 100644 --- a/vendor/github.com/umbracle/go-web3/abi/testing.go +++ b/vendor/github.com/umbracle/ethgo/abi/testing.go @@ -7,7 +7,7 @@ import ( "reflect" "strings" - "github.com/umbracle/go-web3" + "github.com/umbracle/ethgo" ) func randomInt(min, max int) int { @@ -113,7 +113,7 @@ func generateRandomType(t *Type) interface{} { return false case KindAddress: - buf := web3.Address{} + buf := ethgo.Address{} rand.Read(buf[:]) return buf diff --git a/vendor/github.com/umbracle/go-web3/abi/topics.go b/vendor/github.com/umbracle/ethgo/abi/topics.go similarity index 73% rename from vendor/github.com/umbracle/go-web3/abi/topics.go rename to vendor/github.com/umbracle/ethgo/abi/topics.go index 521ea6a9ba..6401d0fcb6 100644 --- a/vendor/github.com/umbracle/go-web3/abi/topics.go +++ b/vendor/github.com/umbracle/ethgo/abi/topics.go @@ -5,11 +5,11 @@ import ( "fmt" "reflect" - "github.com/umbracle/go-web3" + "github.com/umbracle/ethgo" ) // ParseLog parses an event log -func ParseLog(args *Type, log *web3.Log) (map[string]interface{}, error) { +func ParseLog(args *Type, log *ethgo.Log) (map[string]interface{}, error) { var indexed, nonIndexed []*TupleElem for _, arg := range args.TupleElems() { @@ -53,7 +53,7 @@ func ParseLog(args *Type, log *web3.Log) (map[string]interface{}, error) { } // ParseTopics parses topics from a log event -func ParseTopics(args *Type, topics []web3.Hash) ([]interface{}, error) { +func ParseTopics(args *Type, topics []ethgo.Hash) ([]interface{}, error) { if args.kind != KindTuple { return nil, fmt.Errorf("expected a tuple type") } @@ -74,7 +74,7 @@ func ParseTopics(args *Type, topics []web3.Hash) ([]interface{}, error) { } // ParseTopic parses an individual topic -func ParseTopic(t *Type, topic web3.Hash) (interface{}, error) { +func ParseTopic(t *Type, topic ethgo.Hash) (interface{}, error) { switch t.kind { case KindBool: if bytes.Equal(topic[:], topicTrue[:]) { @@ -90,17 +90,20 @@ func ParseTopic(t *Type, topic web3.Hash) (interface{}, error) { case KindAddress: return readAddr(topic[:]) + case KindFixedBytes: + return readFixedBytes(t, topic[:]) + default: - return nil, fmt.Errorf("Topic parsing for type %s not supported", t.String()) + return nil, fmt.Errorf("topic parsing for type %s not supported", t.String()) } } // EncodeTopic encodes a topic -func EncodeTopic(t *Type, val interface{}) (web3.Hash, error) { +func EncodeTopic(t *Type, val interface{}) (ethgo.Hash, error) { return encodeTopic(t, reflect.ValueOf(val)) } -func encodeTopic(t *Type, val reflect.Value) (web3.Hash, error) { +func encodeTopic(t *Type, val reflect.Value) (ethgo.Hash, error) { switch t.kind { case KindBool: return encodeTopicBool(val) @@ -112,16 +115,16 @@ func encodeTopic(t *Type, val reflect.Value) (web3.Hash, error) { return encodeTopicAddress(val) } - return web3.Hash{}, fmt.Errorf("not found") + return ethgo.Hash{}, fmt.Errorf("not found") } -var topicTrue, topicFalse web3.Hash +var topicTrue, topicFalse ethgo.Hash func init() { topicTrue[31] = 1 } -func encodeTopicAddress(val reflect.Value) (res web3.Hash, err error) { +func encodeTopicAddress(val reflect.Value) (res ethgo.Hash, err error) { var b []byte b, err = encodeAddress(val) if err != nil { @@ -131,7 +134,7 @@ func encodeTopicAddress(val reflect.Value) (res web3.Hash, err error) { return } -func encodeTopicNum(t *Type, val reflect.Value) (res web3.Hash, err error) { +func encodeTopicNum(t *Type, val reflect.Value) (res ethgo.Hash, err error) { var b []byte b, err = encodeNum(val) if err != nil { @@ -141,16 +144,12 @@ func encodeTopicNum(t *Type, val reflect.Value) (res web3.Hash, err error) { return } -func encodeTopicBool(v reflect.Value) (res web3.Hash, err error) { +func encodeTopicBool(v reflect.Value) (res ethgo.Hash, err error) { if v.Kind() != reflect.Bool { - return web3.Hash{}, encodeErr(v, "bool") + return ethgo.Hash{}, encodeErr(v, "bool") } if v.Bool() { return topicTrue, nil } return topicFalse, nil } - -func encodeTopicErr(val reflect.Value, str string) error { - return fmt.Errorf("cannot encode %s as %s", val.Type().String(), str) -} diff --git a/vendor/github.com/umbracle/go-web3/abi/type.go b/vendor/github.com/umbracle/ethgo/abi/type.go similarity index 97% rename from vendor/github.com/umbracle/go-web3/abi/type.go rename to vendor/github.com/umbracle/ethgo/abi/type.go index dca9983177..f21945883b 100644 --- a/vendor/github.com/umbracle/go-web3/abi/type.go +++ b/vendor/github.com/umbracle/ethgo/abi/type.go @@ -8,7 +8,7 @@ import ( "strconv" "strings" - "github.com/umbracle/go-web3" + "github.com/umbracle/ethgo" ) // batch of predefined reflect types @@ -22,7 +22,7 @@ var ( int16T = reflect.TypeOf(int16(0)) int32T = reflect.TypeOf(int32(0)) int64T = reflect.TypeOf(int64(0)) - addressT = reflect.TypeOf(web3.Address{}) + addressT = reflect.TypeOf(ethgo.Address{}) stringT = reflect.TypeOf("") dynamicBytesT = reflect.SliceOf(reflect.TypeOf(byte(0))) functionT = reflect.ArrayOf(24, reflect.TypeOf(byte(0))) @@ -131,7 +131,7 @@ func NewTupleTypeFromArgs(inputs []*ArgumentStr) (*Type, error) { } // ParseLog parses a log using this type -func (t *Type) ParseLog(log *web3.Log) (map[string]interface{}, error) { +func (t *Type) ParseLog(log *ethgo.Log) (map[string]interface{}, error) { return ParseLog(t, log) } @@ -165,7 +165,9 @@ func (t *Type) Format(includeArgs bool) string { name += " indexed" } if includeArgs { - name += " " + i.Name + if i.Name != "" { + name += " " + i.Name + } } rawAux = append(rawAux, name) } @@ -328,11 +330,17 @@ func readType(l *lexer) (*Type, error) { var tt *Type tok := l.nextToken() + + isTuple := false if tok.typ == tupleToken { if l.nextToken().typ != lparenToken { return nil, expectedToken(lparenToken) } - + isTuple = true + } else if tok.typ == lparenToken { + isTuple = true + } + if isTuple { var next token elems := []*TupleElem{} for { diff --git a/vendor/github.com/umbracle/ethgo/encoding.go b/vendor/github.com/umbracle/ethgo/encoding.go new file mode 100644 index 0000000000..6b5412ac42 --- /dev/null +++ b/vendor/github.com/umbracle/ethgo/encoding.go @@ -0,0 +1,90 @@ +package ethgo + +import ( + "encoding/hex" + "math/big" + "strconv" + "strings" +) + +type ArgBig big.Int + +func (a *ArgBig) UnmarshalText(input []byte) error { + buf, err := decodeToHex(input) + if err != nil { + return err + } + b := new(big.Int) + b.SetBytes(buf) + *a = ArgBig(*b) + return nil +} + +func (a ArgBig) MarshalText() ([]byte, error) { + b := (*big.Int)(&a) + return []byte("0x" + b.Text(16)), nil +} + +type ArgUint64 uint64 + +func (b ArgUint64) MarshalText() ([]byte, error) { + buf := make([]byte, 2, 10) + copy(buf, `0x`) + buf = strconv.AppendUint(buf, uint64(b), 16) + return buf, nil +} + +func (u *ArgUint64) UnmarshalText(input []byte) error { + str := strings.TrimPrefix(string(input), "0x") + if str == "" { + str = "0" + } + num, err := strconv.ParseUint(str, 16, 64) + if err != nil { + return err + } + *u = ArgUint64(num) + return nil +} + +func (u *ArgUint64) Uint64() uint64 { + return uint64(*u) +} + +type ArgBytes []byte + +func (b ArgBytes) MarshalText() ([]byte, error) { + return encodeToHex(b), nil +} + +func (b *ArgBytes) UnmarshalText(input []byte) error { + hh, err := decodeToHex(input) + if err != nil { + return nil + } + aux := make([]byte, len(hh)) + copy(aux[:], hh[:]) + *b = aux + return nil +} + +func (b *ArgBytes) Bytes() []byte { + return *b +} + +func decodeToHex(b []byte) ([]byte, error) { + str := string(b) + str = strings.TrimPrefix(str, "0x") + if len(str)%2 != 0 { + str = "0" + str + } + return hex.DecodeString(str) +} + +func encodeToHex(b []byte) []byte { + str := hex.EncodeToString(b) + if len(str)%2 != 0 { + str = "0" + str + } + return []byte("0x" + str) +} diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/client.go b/vendor/github.com/umbracle/ethgo/jsonrpc/client.go similarity index 96% rename from vendor/github.com/umbracle/go-web3/jsonrpc/client.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/client.go index f394cea9cb..1aeb6d7c11 100644 --- a/vendor/github.com/umbracle/go-web3/jsonrpc/client.go +++ b/vendor/github.com/umbracle/ethgo/jsonrpc/client.go @@ -1,7 +1,7 @@ package jsonrpc import ( - "github.com/umbracle/go-web3/jsonrpc/transport" + "github.com/umbracle/ethgo/jsonrpc/transport" ) // Client is the jsonrpc client diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/codec/codec.go b/vendor/github.com/umbracle/ethgo/jsonrpc/codec/codec.go similarity index 100% rename from vendor/github.com/umbracle/go-web3/jsonrpc/codec/codec.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/codec/codec.go diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/debug.go b/vendor/github.com/umbracle/ethgo/jsonrpc/debug.go similarity index 81% rename from vendor/github.com/umbracle/go-web3/jsonrpc/debug.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/debug.go index 7458251469..7fa427121a 100644 --- a/vendor/github.com/umbracle/go-web3/jsonrpc/debug.go +++ b/vendor/github.com/umbracle/ethgo/jsonrpc/debug.go @@ -1,6 +1,6 @@ package jsonrpc -import "github.com/umbracle/go-web3" +import "github.com/umbracle/ethgo" type Debug struct { c *Client @@ -28,7 +28,7 @@ type StructLogs struct { Storage map[string]string } -func (d *Debug) TraceTransaction(hash web3.Hash) (*TransactionTrace, error) { +func (d *Debug) TraceTransaction(hash ethgo.Hash) (*TransactionTrace, error) { var res *TransactionTrace err := d.c.Call("debug_traceTransaction", &res, hash) return res, err diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/eth.go b/vendor/github.com/umbracle/ethgo/jsonrpc/eth.go similarity index 61% rename from vendor/github.com/umbracle/go-web3/jsonrpc/eth.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/eth.go index 698c86fb68..65bacd03ae 100644 --- a/vendor/github.com/umbracle/go-web3/jsonrpc/eth.go +++ b/vendor/github.com/umbracle/ethgo/jsonrpc/eth.go @@ -6,7 +6,7 @@ import ( "fmt" "math/big" - "github.com/umbracle/go-web3" + "github.com/umbracle/ethgo" ) // Eth is the eth namespace @@ -20,7 +20,7 @@ func (c *Client) Eth() *Eth { } // GetCode returns the code of a contract -func (e *Eth) GetCode(addr web3.Address, block web3.BlockNumberOrHash) (string, error) { +func (e *Eth) GetCode(addr ethgo.Address, block ethgo.BlockNumberOrHash) (string, error) { var res string if err := e.c.Call("eth_getCode", &res, addr, block.Location()); err != nil { return "", err @@ -29,8 +29,8 @@ func (e *Eth) GetCode(addr web3.Address, block web3.BlockNumberOrHash) (string, } // Accounts returns a list of addresses owned by client. -func (e *Eth) Accounts() ([]web3.Address, error) { - var out []web3.Address +func (e *Eth) Accounts() ([]ethgo.Address, error) { + var out []ethgo.Address if err := e.c.Call("eth_accounts", &out); err != nil { return nil, err } @@ -38,8 +38,8 @@ func (e *Eth) Accounts() ([]web3.Address, error) { } // GetStorageAt returns the value from a storage position at a given address. -func (e *Eth) GetStorageAt(addr web3.Address, slot web3.Hash, block web3.BlockNumberOrHash) (web3.Hash, error) { - var hash web3.Hash +func (e *Eth) GetStorageAt(addr ethgo.Address, slot ethgo.Hash, block ethgo.BlockNumberOrHash) (ethgo.Hash, error) { + var hash ethgo.Hash err := e.c.Call("eth_getStorageAt", &hash, addr, slot, block.Location()) return hash, err } @@ -54,8 +54,8 @@ func (e *Eth) BlockNumber() (uint64, error) { } // GetBlockByNumber returns information about a block by block number. -func (e *Eth) GetBlockByNumber(i web3.BlockNumber, full bool) (*web3.Block, error) { - var b *web3.Block +func (e *Eth) GetBlockByNumber(i ethgo.BlockNumber, full bool) (*ethgo.Block, error) { + var b *ethgo.Block if err := e.c.Call("eth_getBlockByNumber", &b, i.String(), full); err != nil { return nil, err } @@ -63,8 +63,8 @@ func (e *Eth) GetBlockByNumber(i web3.BlockNumber, full bool) (*web3.Block, erro } // GetBlockByHash returns information about a block by hash. -func (e *Eth) GetBlockByHash(hash web3.Hash, full bool) (*web3.Block, error) { - var b *web3.Block +func (e *Eth) GetBlockByHash(hash ethgo.Hash, full bool) (*ethgo.Block, error) { + var b *ethgo.Block if err := e.c.Call("eth_getBlockByHash", &b, hash, full); err != nil { return nil, err } @@ -72,13 +72,13 @@ func (e *Eth) GetBlockByHash(hash web3.Hash, full bool) (*web3.Block, error) { } // GetFilterChanges returns the filter changes for log filters -func (e *Eth) GetFilterChanges(id string) ([]*web3.Log, error) { +func (e *Eth) GetFilterChanges(id string) ([]*ethgo.Log, error) { var raw string err := e.c.Call("eth_getFilterChanges", &raw, id) if err != nil { return nil, err } - var res []*web3.Log + var res []*ethgo.Log if err := json.Unmarshal([]byte(raw), &res); err != nil { return nil, err } @@ -86,20 +86,20 @@ func (e *Eth) GetFilterChanges(id string) ([]*web3.Log, error) { } // GetTransactionByHash returns a transaction by his hash -func (e *Eth) GetTransactionByHash(hash web3.Hash) (*web3.Transaction, error) { - var txn *web3.Transaction +func (e *Eth) GetTransactionByHash(hash ethgo.Hash) (*ethgo.Transaction, error) { + var txn *ethgo.Transaction err := e.c.Call("eth_getTransactionByHash", &txn, hash) return txn, err } // GetFilterChangesBlock returns the filter changes for block filters -func (e *Eth) GetFilterChangesBlock(id string) ([]web3.Hash, error) { +func (e *Eth) GetFilterChangesBlock(id string) ([]ethgo.Hash, error) { var raw string err := e.c.Call("eth_getFilterChanges", &raw, id) if err != nil { return nil, err } - var res []web3.Hash + var res []ethgo.Hash if err := json.Unmarshal([]byte(raw), &res); err != nil { return nil, err } @@ -107,7 +107,7 @@ func (e *Eth) GetFilterChangesBlock(id string) ([]web3.Hash, error) { } // NewFilter creates a new log filter -func (e *Eth) NewFilter(filter *web3.LogFilter) (string, error) { +func (e *Eth) NewFilter(filter *ethgo.LogFilter) (string, error) { var id string err := e.c.Call("eth_newFilter", &id, filter) return id, err @@ -128,29 +128,29 @@ func (e *Eth) UninstallFilter(id string) (bool, error) { } // SendRawTransaction sends a signed transaction in rlp format. -func (e *Eth) SendRawTransaction(data []byte) (web3.Hash, error) { - var hash web3.Hash +func (e *Eth) SendRawTransaction(data []byte) (ethgo.Hash, error) { + var hash ethgo.Hash hexData := "0x" + hex.EncodeToString(data) err := e.c.Call("eth_sendRawTransaction", &hash, hexData) return hash, err } // SendTransaction creates new message call transaction or a contract creation. -func (e *Eth) SendTransaction(txn *web3.Transaction) (web3.Hash, error) { - var hash web3.Hash +func (e *Eth) SendTransaction(txn *ethgo.Transaction) (ethgo.Hash, error) { + var hash ethgo.Hash err := e.c.Call("eth_sendTransaction", &hash, txn) return hash, err } // GetTransactionReceipt returns the receipt of a transaction by transaction hash. -func (e *Eth) GetTransactionReceipt(hash web3.Hash) (*web3.Receipt, error) { - var receipt *web3.Receipt +func (e *Eth) GetTransactionReceipt(hash ethgo.Hash) (*ethgo.Receipt, error) { + var receipt *ethgo.Receipt err := e.c.Call("eth_getTransactionReceipt", &receipt, hash) return receipt, err } // GetNonce returns the nonce of the account -func (e *Eth) GetNonce(addr web3.Address, blockNumber web3.BlockNumberOrHash) (uint64, error) { +func (e *Eth) GetNonce(addr ethgo.Address, blockNumber ethgo.BlockNumberOrHash) (uint64, error) { var nonce string if err := e.c.Call("eth_getTransactionCount", &nonce, addr, blockNumber.Location()); err != nil { return 0, err @@ -159,7 +159,7 @@ func (e *Eth) GetNonce(addr web3.Address, blockNumber web3.BlockNumberOrHash) (u } // GetBalance returns the balance of the account of given address. -func (e *Eth) GetBalance(addr web3.Address, blockNumber web3.BlockNumberOrHash) (*big.Int, error) { +func (e *Eth) GetBalance(addr ethgo.Address, blockNumber ethgo.BlockNumberOrHash) (*big.Int, error) { var out string if err := e.c.Call("eth_getBalance", &out, addr, blockNumber.Location()); err != nil { return nil, err @@ -181,7 +181,7 @@ func (e *Eth) GasPrice() (uint64, error) { } // Call executes a new message call immediately without creating a transaction on the block chain. -func (e *Eth) Call(msg *web3.CallMsg, block web3.BlockNumber) (string, error) { +func (e *Eth) Call(msg *ethgo.CallMsg, block ethgo.BlockNumber) (string, error) { var out string if err := e.c.Call("eth_call", &out, msg, block.String()); err != nil { return "", err @@ -202,7 +202,7 @@ func (e *Eth) EstimateGasContract(bin []byte) (uint64, error) { } // EstimateGas generates and returns an estimate of how much gas is necessary to allow the transaction to complete. -func (e *Eth) EstimateGas(msg *web3.CallMsg) (uint64, error) { +func (e *Eth) EstimateGas(msg *ethgo.CallMsg) (uint64, error) { var out string if err := e.c.Call("eth_estimateGas", &out, msg); err != nil { return 0, err @@ -211,8 +211,8 @@ func (e *Eth) EstimateGas(msg *web3.CallMsg) (uint64, error) { } // GetLogs returns an array of all logs matching a given filter object -func (e *Eth) GetLogs(filter *web3.LogFilter) ([]*web3.Log, error) { - var out []*web3.Log +func (e *Eth) GetLogs(filter *ethgo.LogFilter) ([]*ethgo.Log, error) { + var out []*ethgo.Log if err := e.c.Call("eth_getLogs", &out, filter); err != nil { return nil, err } @@ -227,3 +227,53 @@ func (e *Eth) ChainID() (*big.Int, error) { } return parseBigInt(out), nil } + +// FeeHistory is the result of the eth_feeHistory endpoint +type FeeHistory struct { + OldestBlock *big.Int `json:"oldestBlock"` + Reward [][]*big.Int `json:"reward,omitempty"` + BaseFee []*big.Int `json:"baseFeePerGas,omitempty"` + GasUsedRatio []float64 `json:"gasUsedRatio"` +} + +func (f *FeeHistory) UnmarshalJSON(data []byte) error { + var raw struct { + OldestBlock *ArgBig `json:"oldestBlock"` + Reward [][]*ArgBig `json:"reward,omitempty"` + BaseFee []*ArgBig `json:"baseFeePerGas,omitempty"` + GasUsedRatio []float64 `json:"gasUsedRatio"` + } + if err := json.Unmarshal(data, &raw); err != nil { + return err + } + if raw.OldestBlock != nil { + f.OldestBlock = raw.OldestBlock.Big() + } + if raw.Reward != nil { + f.Reward = [][]*big.Int{} + for _, r := range raw.Reward { + elem := []*big.Int{} + for _, i := range r { + elem = append(elem, i.Big()) + } + f.Reward = append(f.Reward, elem) + } + } + if raw.BaseFee != nil { + f.BaseFee = []*big.Int{} + for _, i := range raw.BaseFee { + f.BaseFee = append(f.BaseFee, i.Big()) + } + } + f.GasUsedRatio = raw.GasUsedRatio + return nil +} + +// FeeHistory returns base fee per gas and transaction effective priority fee +func (e *Eth) FeeHistory(from, to ethgo.BlockNumber) (*FeeHistory, error) { + var out *FeeHistory + if err := e.c.Call("eth_feeHistory", &out, from.String(), to.String(), nil); err != nil { + return nil, err + } + return out, nil +} diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/net.go b/vendor/github.com/umbracle/ethgo/jsonrpc/net.go similarity index 100% rename from vendor/github.com/umbracle/go-web3/jsonrpc/net.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/net.go diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/subscribe.go b/vendor/github.com/umbracle/ethgo/jsonrpc/subscribe.go similarity index 81% rename from vendor/github.com/umbracle/go-web3/jsonrpc/subscribe.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/subscribe.go index c06cc843de..470b43548b 100644 --- a/vendor/github.com/umbracle/go-web3/jsonrpc/subscribe.go +++ b/vendor/github.com/umbracle/ethgo/jsonrpc/subscribe.go @@ -3,7 +3,7 @@ package jsonrpc import ( "fmt" - "github.com/umbracle/go-web3/jsonrpc/transport" + "github.com/umbracle/ethgo/jsonrpc/transport" ) // SubscriptionEnabled returns true if the subscription endpoints are enabled @@ -16,7 +16,7 @@ func (c *Client) SubscriptionEnabled() bool { func (c *Client) Subscribe(method string, callback func(b []byte)) (func() error, error) { pub, ok := c.transport.(transport.PubSubTransport) if !ok { - return nil, fmt.Errorf("Transport does not support the subscribe method") + return nil, fmt.Errorf("transport does not support the subscribe method") } close, err := pub.Subscribe(method, callback) return close, err diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/transport/http.go b/vendor/github.com/umbracle/ethgo/jsonrpc/transport/http.go similarity index 92% rename from vendor/github.com/umbracle/go-web3/jsonrpc/transport/http.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/transport/http.go index 9bcefeff83..d328543cfd 100644 --- a/vendor/github.com/umbracle/go-web3/jsonrpc/transport/http.go +++ b/vendor/github.com/umbracle/ethgo/jsonrpc/transport/http.go @@ -3,21 +3,21 @@ package transport import ( "encoding/json" - "github.com/umbracle/go-web3/jsonrpc/codec" + "github.com/umbracle/ethgo/jsonrpc/codec" "github.com/valyala/fasthttp" ) // HTTP is an http transport type HTTP struct { - addr string - client *fasthttp.Client + addr string + client *fasthttp.Client headers map[string]string } func newHTTP(addr string, headers map[string]string) *HTTP { return &HTTP{ - addr: addr, - client: &fasthttp.Client{}, + addr: addr, + client: &fasthttp.Client{}, headers: headers, } } diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/transport/ipc.go b/vendor/github.com/umbracle/ethgo/jsonrpc/transport/ipc.go similarity index 100% rename from vendor/github.com/umbracle/go-web3/jsonrpc/transport/ipc.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/transport/ipc.go diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/transport/transport.go b/vendor/github.com/umbracle/ethgo/jsonrpc/transport/transport.go similarity index 100% rename from vendor/github.com/umbracle/go-web3/jsonrpc/transport/transport.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/transport/transport.go diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/transport/websocket.go b/vendor/github.com/umbracle/ethgo/jsonrpc/transport/websocket.go similarity index 99% rename from vendor/github.com/umbracle/go-web3/jsonrpc/transport/websocket.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/transport/websocket.go index 4f2b528f0a..88b7e9e565 100644 --- a/vendor/github.com/umbracle/go-web3/jsonrpc/transport/websocket.go +++ b/vendor/github.com/umbracle/ethgo/jsonrpc/transport/websocket.go @@ -9,7 +9,7 @@ import ( "time" "github.com/gorilla/websocket" - "github.com/umbracle/go-web3/jsonrpc/codec" + "github.com/umbracle/ethgo/jsonrpc/codec" ) func newWebsocket(url string, headers map[string]string) (Transport, error) { diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/util.go b/vendor/github.com/umbracle/ethgo/jsonrpc/util.go similarity index 62% rename from vendor/github.com/umbracle/go-web3/jsonrpc/util.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/util.go index b32b42ce36..59aadfd2f8 100644 --- a/vendor/github.com/umbracle/go-web3/jsonrpc/util.go +++ b/vendor/github.com/umbracle/ethgo/jsonrpc/util.go @@ -8,14 +8,30 @@ import ( "strings" ) +type ArgBig big.Int + +func (a *ArgBig) UnmarshalText(input []byte) error { + buf, err := parseHexBytes(string(input)) + if err != nil { + return err + } + b := new(big.Int) + b.SetBytes(buf) + *a = ArgBig(*b) + return nil +} + +func (a *ArgBig) Big() *big.Int { + b := big.Int(*a) + return &b +} + func encodeUintToHex(i uint64) string { return fmt.Sprintf("0x%x", i) } func parseBigInt(str string) *big.Int { - if strings.HasPrefix(str, "0x") { - str = str[2:] - } + str = strings.TrimPrefix(str, "0x") num := new(big.Int) num.SetString(str, 16) return num @@ -38,7 +54,11 @@ func parseHexBytes(str string) ([]byte, error) { if !strings.HasPrefix(str, "0x") { return nil, fmt.Errorf("it does not have 0x prefix") } - buf, err := hex.DecodeString(str[2:]) + str = strings.TrimPrefix(str, "0x") + if len(str)%2 != 0 { + str = "0" + str + } + buf, err := hex.DecodeString(str) if err != nil { return nil, err } diff --git a/vendor/github.com/umbracle/go-web3/jsonrpc/web3.go b/vendor/github.com/umbracle/ethgo/jsonrpc/web3.go similarity index 100% rename from vendor/github.com/umbracle/go-web3/jsonrpc/web3.go rename to vendor/github.com/umbracle/ethgo/jsonrpc/web3.go diff --git a/vendor/github.com/umbracle/go-web3/keccak.go b/vendor/github.com/umbracle/ethgo/keccak.go similarity index 93% rename from vendor/github.com/umbracle/go-web3/keccak.go rename to vendor/github.com/umbracle/ethgo/keccak.go index 5374c5dca1..df66ab9c50 100644 --- a/vendor/github.com/umbracle/go-web3/keccak.go +++ b/vendor/github.com/umbracle/ethgo/keccak.go @@ -1,4 +1,4 @@ -package web3 +package ethgo import "golang.org/x/crypto/sha3" diff --git a/vendor/github.com/umbracle/go-web3/networks.go b/vendor/github.com/umbracle/ethgo/networks.go similarity index 95% rename from vendor/github.com/umbracle/go-web3/networks.go rename to vendor/github.com/umbracle/ethgo/networks.go index 193607409e..8ee6c526d4 100644 --- a/vendor/github.com/umbracle/go-web3/networks.go +++ b/vendor/github.com/umbracle/ethgo/networks.go @@ -1,4 +1,4 @@ -package web3 +package ethgo // Network is a chain id type Network uint64 diff --git a/vendor/github.com/umbracle/go-web3/structs.go b/vendor/github.com/umbracle/ethgo/structs.go similarity index 78% rename from vendor/github.com/umbracle/go-web3/structs.go rename to vendor/github.com/umbracle/ethgo/structs.go index 9b661feb72..668badf024 100644 --- a/vendor/github.com/umbracle/go-web3/structs.go +++ b/vendor/github.com/umbracle/ethgo/structs.go @@ -1,4 +1,4 @@ -package web3 +package ethgo import ( "encoding/hex" @@ -37,6 +37,16 @@ func BytesToAddress(b []byte) Address { return a } +// Address implements the ethgo.Key interface Address method. +func (a Address) Address() Address { + return a +} + +// Sign implements the ethgo.Key interface Sign method. +func (a Address) Sign(hash []byte) ([]byte, error) { + panic("an address cannot sign messages") +} + // UnmarshalText implements the unmarshal interface func (a *Address) UnmarshalText(b []byte) error { return unmarshalTextByte(a[:], b, 20) @@ -138,6 +148,20 @@ type Block struct { Uncles []Hash } +func (b *Block) Copy() *Block { + bb := new(Block) + *bb = *b + if b.Difficulty != nil { + bb.Difficulty = new(big.Int).Set(b.Difficulty) + } + bb.ExtraData = append(bb.ExtraData[:0], b.ExtraData...) + bb.Transactions = make([]*Transaction, len(b.Transactions)) + for indx, txn := range b.Transactions { + bb.Transactions[indx] = txn.Copy() + } + return bb +} + type TransactionType int const ( @@ -178,9 +202,34 @@ type Transaction struct { MaxFeePerGas *big.Int } +func (t *Transaction) Copy() *Transaction { + tt := new(Transaction) + if t.To != nil { + to := Address(*t.To) + tt.To = &to + } + tt.Input = append(tt.Input[:0], t.Input...) + if t.Value != nil { + tt.Value = new(big.Int).Set(t.Value) + } + tt.V = append(tt.V[:0], t.V...) + tt.R = append(tt.R[:0], t.R...) + tt.S = append(tt.S[:0], t.S...) + if t.ChainID != nil { + tt.ChainID = new(big.Int).Set(t.ChainID) + } + if t.MaxPriorityFeePerGas != nil { + tt.MaxPriorityFeePerGas = new(big.Int).Set(t.MaxPriorityFeePerGas) + } + if t.MaxFeePerGas != nil { + tt.MaxFeePerGas = new(big.Int).Set(t.MaxFeePerGas) + } + return tt +} + type AccessEntry struct { - Address Address - Storage []Hash + Address Address `json:"address"` + Storage []Hash `json:"storageKeys"` } type AccessList []AccessEntry @@ -230,6 +279,17 @@ type Receipt struct { Status uint64 } +func (r *Receipt) Copy() *Receipt { + rr := new(Receipt) + *rr = *r + rr.LogsBloom = append(rr.LogsBloom[:0], r.LogsBloom...) + rr.Logs = make([]*Log, len(r.Logs)) + for indx, log := range r.Logs { + rr.Logs[indx] = log.Copy() + } + return rr +} + type Log struct { Removed bool LogIndex uint64 @@ -242,6 +302,13 @@ type Log struct { Data []byte } +func (l *Log) Copy() *Log { + ll := new(Log) + *ll = *l + ll.Data = append(ll.Data[:0], l.Data...) + return ll +} + type BlockNumber int const ( @@ -280,12 +347,6 @@ type BlockNumberOrHash interface { Location() string } -func (b *Block) Copy() *Block { - bb := new(Block) - *bb = *b - return bb -} - func min(i, j int) int { if i < j { return i diff --git a/vendor/github.com/umbracle/go-web3/structs_marshal.go b/vendor/github.com/umbracle/ethgo/structs_marshal.go similarity index 99% rename from vendor/github.com/umbracle/go-web3/structs_marshal.go rename to vendor/github.com/umbracle/ethgo/structs_marshal.go index 866fab40b4..53cc38a9ab 100644 --- a/vendor/github.com/umbracle/go-web3/structs_marshal.go +++ b/vendor/github.com/umbracle/ethgo/structs_marshal.go @@ -1,4 +1,4 @@ -package web3 +package ethgo import ( "encoding/hex" diff --git a/vendor/github.com/umbracle/go-web3/structs_marshal_rlp.go b/vendor/github.com/umbracle/ethgo/structs_marshal_rlp.go similarity index 99% rename from vendor/github.com/umbracle/go-web3/structs_marshal_rlp.go rename to vendor/github.com/umbracle/ethgo/structs_marshal_rlp.go index 0aaeefafe2..473bdcea74 100644 --- a/vendor/github.com/umbracle/go-web3/structs_marshal_rlp.go +++ b/vendor/github.com/umbracle/ethgo/structs_marshal_rlp.go @@ -1,4 +1,4 @@ -package web3 +package ethgo import ( "fmt" diff --git a/vendor/github.com/umbracle/go-web3/structs_unmarshal.go b/vendor/github.com/umbracle/ethgo/structs_unmarshal.go similarity index 93% rename from vendor/github.com/umbracle/go-web3/structs_unmarshal.go rename to vendor/github.com/umbracle/ethgo/structs_unmarshal.go index a4ea1d2ea5..9ad67d6f52 100644 --- a/vendor/github.com/umbracle/go-web3/structs_unmarshal.go +++ b/vendor/github.com/umbracle/ethgo/structs_unmarshal.go @@ -1,4 +1,4 @@ -package web3 +package ethgo import ( "encoding/hex" @@ -143,11 +143,6 @@ func (t *Transaction) unmarshalJSON(v *fastjson.Value) error { } t.Type = typ - // 'to' must exists - if err := exists("to"); err != nil { - return err - } - var err error if err := decodeHash(&t.Hash, v, "hash"); err != nil { return err @@ -169,12 +164,15 @@ func (t *Transaction) unmarshalJSON(v *fastjson.Value) error { } { - if v.Get("to").String() != "null" { - var to Address - if err = decodeAddr(&to, v, "to"); err != nil { - return err + // Do not decode 'to' if it doesn't exist. + if err := exists("to"); err == nil { + if v.Get("to").String() != "null" { + var to Address + if err = decodeAddr(&to, v, "to"); err != nil { + return err + } + t.To = &to } - t.To = &to } } @@ -199,6 +197,10 @@ func (t *Transaction) unmarshalJSON(v *fastjson.Value) error { } } + if t.Gas, err = decodeUint(v, "gas"); err != nil { + return err + } + if typ == TransactionDynamicFee { if t.MaxPriorityFeePerGas, err = decodeBigInt(t.MaxPriorityFeePerGas, v, "maxPriorityFeePerGas"); err != nil { return err @@ -206,10 +208,6 @@ func (t *Transaction) unmarshalJSON(v *fastjson.Value) error { if t.MaxFeePerGas, err = decodeBigInt(t.MaxFeePerGas, v, "maxFeePerGas"); err != nil { return err } - } else { - if t.Gas, err = decodeUint(v, "gas"); err != nil { - return err - } } // Check if the block hash field is set @@ -453,8 +451,11 @@ func (r *Log) UnmarshalJSON(buf []byte) error { func (r *Log) unmarshalJSON(v *fastjson.Value) error { var err error - if r.Removed, err = decodeBool(v, "removed"); err != nil { - return err + if v.Exists("removed") { + // it is empty in etherscan API endpoint + if r.Removed, err = decodeBool(v, "removed"); err != nil { + return err + } } if r.LogIndex, err = decodeUint(v, "logIndex"); err != nil { return err @@ -468,8 +469,11 @@ func (r *Log) unmarshalJSON(v *fastjson.Value) error { if err := decodeHash(&r.TransactionHash, v, "transactionHash"); err != nil { return err } - if err := decodeHash(&r.BlockHash, v, "blockHash"); err != nil { - return err + if v.Exists("blockHash") { + // it is empty in etherscan API endpoint + if err := decodeHash(&r.BlockHash, v, "blockHash"); err != nil { + return err + } } if err := decodeAddr(&r.Address, v, "address"); err != nil { return err @@ -564,7 +568,16 @@ func decodeUint(v *fastjson.Value, key string) (uint64, error) { if !strings.HasPrefix(str, "0x") { return 0, fmt.Errorf("field '%s' does not have 0x prefix: '%s'", key, str) } - return strconv.ParseUint(str[2:], 16, 64) + str = str[2:] + if str == "" { + str = "0" + } + + num, err := strconv.ParseUint(str, 16, 64) + if err != nil { + return 0, fmt.Errorf("field '%s' failed to decode uint: %s", key, str) + } + return num, nil } func decodeInt64(v *fastjson.Value, key string) (int64, error) { @@ -578,8 +591,16 @@ func decodeInt64(v *fastjson.Value, key string) (int64, error) { if !strings.HasPrefix(str, "0x") { return 0, fmt.Errorf("field '%s' does not have 0x prefix: '%s'", key, str) } + str = str[2:] + if str == "" { + str = "0" + } - return strconv.ParseInt(str[2:], 16, 64) + num, err := strconv.ParseInt(str, 16, 64) + if err != nil { + return 0, fmt.Errorf("field '%s' failed to decode int64: %s", key, str) + } + return num, nil } func decodeHash(h *Hash, v *fastjson.Value, key string) error { diff --git a/vendor/github.com/umbracle/go-web3/units.go b/vendor/github.com/umbracle/ethgo/units.go similarity index 96% rename from vendor/github.com/umbracle/go-web3/units.go rename to vendor/github.com/umbracle/ethgo/units.go index 3ca08ea04f..b321fbe4aa 100644 --- a/vendor/github.com/umbracle/go-web3/units.go +++ b/vendor/github.com/umbracle/ethgo/units.go @@ -1,4 +1,4 @@ -package web3 +package ethgo import "math/big" diff --git a/vendor/github.com/umbracle/fastrlp/go.mod b/vendor/github.com/umbracle/fastrlp/go.mod deleted file mode 100644 index 7a6c402b9f..0000000000 --- a/vendor/github.com/umbracle/fastrlp/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module github.com/umbracle/fastrlp - -go 1.12 - -require ( - github.com/google/gofuzz v1.2.0 - golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad -) diff --git a/vendor/github.com/umbracle/fastrlp/go.sum b/vendor/github.com/umbracle/fastrlp/go.sum deleted file mode 100644 index a4e72448b5..0000000000 --- a/vendor/github.com/umbracle/fastrlp/go.sum +++ /dev/null @@ -1,11 +0,0 @@ -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= diff --git a/vendor/github.com/umbracle/fastrlp/parser.go b/vendor/github.com/umbracle/fastrlp/parser.go index 65fbf4b295..bb2327ebdd 100644 --- a/vendor/github.com/umbracle/fastrlp/parser.go +++ b/vendor/github.com/umbracle/fastrlp/parser.go @@ -66,6 +66,9 @@ func parseValue(b []byte, c *cache) (*Value, []byte, error) { } if cur < 0xC0 { intSize := int(cur - 0xB7) + if len(b) < intSize+1 { + return nil, nil, fmt.Errorf("bad size") + } size := readUint(b[1:intSize+1], c.buf[:]) if size < 56 { return nil, nil, fmt.Errorf("bad size") @@ -85,6 +88,9 @@ func parseValue(b []byte, c *cache) (*Value, []byte, error) { } intSize := int(cur - 0xF7) + if len(b) < intSize+1 { + return nil, nil, fmt.Errorf("bad size") + } size := readUint(b[1:intSize+1], c.buf[:]) if size < 56 { return nil, nil, fmt.Errorf("bad size") diff --git a/vendor/github.com/umbracle/go-web3/.gitignore b/vendor/github.com/umbracle/go-web3/.gitignore deleted file mode 100644 index f91c026a33..0000000000 --- a/vendor/github.com/umbracle/go-web3/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -bin/ -pkg/ - -.idea \ No newline at end of file diff --git a/vendor/github.com/umbracle/go-web3/README.md b/vendor/github.com/umbracle/go-web3/README.md deleted file mode 100644 index ef556d36a5..0000000000 --- a/vendor/github.com/umbracle/go-web3/README.md +++ /dev/null @@ -1,219 +0,0 @@ - -# Go-Web3 - -## JsonRPC - -```golang -package main - -import ( - "fmt" - - web3 "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/jsonrpc" -) - -func main() { - client, err := jsonrpc.NewClient("https://mainnet.infura.io") - if err != nil { - panic(err) - } - - number, err := client.Eth().BlockNumber() - if err != nil { - panic(err) - } - - header, err := client.Eth().GetBlockByNumber(web3.BlockNumber(number), true) - if err != nil { - panic(err) - } - - fmt.Println(header) -} -``` - -## ABI - -The ABI codifier uses randomized tests with e2e integration tests with a real Geth client to ensure that the codification is correct and provides the same results as the AbiEncoder from Solidity. - -To use the library import: - -``` -"github.com/umbracle/go-web3/abi" -``` - -Declare basic objects: - -```golang -typ, err := abi.NewType("uint256") -``` - -or - -```golang -typ = abi.MustNewType("uint256") -``` - -and use it to encode/decode the data: - -```golang -num := big.NewInt(1) - -encoded, err := typ.Encode(num) -if err != nil { - panic(err) -} - -decoded, err := typ.Decode(encoded) // decoded as interface -if err != nil { - panic(err) -} - -num2 := decoded.(*big.Int) -fmt.Println(num.Cmp(num2) == 0) // num == num2 -``` - -You can also codify structs as Solidity tuples: - -```golang -import ( - "fmt" - - web3 "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/abi" - "math/big" -) - -func main() { - typ := abi.MustNewType("tuple(address a, uint256 b)") - - type Obj struct { - A web3.Address - B *big.Int - } - obj := &Obj{ - A: web3.Address{0x1}, - B: big.NewInt(1), - } - - // Encode - encoded, err := typ.Encode(obj) - if err != nil { - panic(err) - } - - // Decode output into a map - res, err := typ.Decode(encoded) - if err != nil { - panic(err) - } - - // Decode into a struct - var obj2 Obj - if err := typ.DecodeStruct(encoded, &obj2); err != nil { - panic(err) - } - - fmt.Println(res) - fmt.Println(obj) -} -``` - -## Wallet - -As for now the library only provides primitive abstractions to send signed abstractions. The intended goal is to abstract the next steps inside the contract package. - -```golang -// Generate a random wallet -key, _ := wallet.GenerateKey() - -to := web3.Address{0x1} -transferVal := big.NewInt(1000) - -// Create the transaction -txn := &web3.Transaction{ - To: &to, - Value: transferVal, - Gas: 100000, -} - -// Create the signer object and sign -signer := wallet.NewEIP155Signer(chainID) -txn, _ = signer.SignTx(txn, key) - -// Send the signed transaction -data := txn.MarshalRLP() -hash, _ := c.Eth().SendRawTransaction(data) -``` - -## ENS - -Resolve names on the Ethereum Name Service registrar. - -```golang -import ( - "fmt" - - "github.com/umbracle/go-web3/jsonrpc" - "github.com/umbracle/go-web3/ens" -) - -func main() { - client, err := jsonrpc.NewClient("https://mainnet.infura.io") - if err != nil { - panic(err) - } - - ens, err := ens.NewENS(ens.WithClient(client)) - if err != nil { - panic(err) - } - addr, err := ens.Resolve("ens_address") - if err != nil { - panic(err) - } - fmt.Println(addr) -} -``` - -## Block tracker - -```golang -import ( - "fmt" - - web3 "github.com/umbracle/go-web3" - "github.com/umbracle/go-web3/jsonrpc" - "github.com/umbracle/go-web3/blocktracker" -) - -func main() { - client, err := jsonrpc.NewClient("https://mainnet.infura.io") - if err != nil { - panic(err) - } - - tracker = blocktracker.NewBlockTracker(client, WithBlockMaxBacklog(1000)) - if err := tracker.Init(); err != nil { - panic(err) - } - go tracker.Start() - - sub := tracker.Subscribe() - go func() { - for { - select { - case evnt := <-sub: - fmt.Println(evnt) - case <-ctx.Done(): - return - } - } - } -} -``` - -## Tracker - -Complete example of the tracker [here](./tracker/README.md) diff --git a/vendor/github.com/umbracle/go-web3/go.mod b/vendor/github.com/umbracle/go-web3/go.mod deleted file mode 100644 index df291f1ca4..0000000000 --- a/vendor/github.com/umbracle/go-web3/go.mod +++ /dev/null @@ -1,41 +0,0 @@ -module github.com/umbracle/go-web3 - -go 1.12 - -require ( - github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect - github.com/Microsoft/go-winio v0.4.13 // indirect - github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect - github.com/boltdb/bolt v1.3.1 - github.com/btcsuite/btcd v0.21.0-beta - github.com/btcsuite/btcutil v1.0.2 - github.com/cenkalti/backoff v2.2.1+incompatible // indirect - github.com/containerd/continuity v0.0.0-20191214063359-1097c8bae83b // indirect - github.com/docker/go-connections v0.4.0 // indirect - github.com/docker/go-units v0.4.0 // indirect - github.com/go-sql-driver/mysql v1.4.1 // indirect - github.com/google/go-cmp v0.3.1 // indirect - github.com/gorilla/websocket v1.4.1 - github.com/gotestyourself/gotestyourself v2.2.0+incompatible // indirect - github.com/jmoiron/sqlx v1.2.0 - github.com/klauspost/compress v1.4.1 // indirect - github.com/klauspost/cpuid v1.2.0 // indirect - github.com/kr/pretty v0.1.0 // indirect - github.com/lib/pq v1.2.0 - github.com/mitchellh/mapstructure v1.1.2 - github.com/opencontainers/image-spec v1.0.1 // indirect - github.com/opencontainers/runc v0.1.1 // indirect - github.com/ory/dockertest v3.3.5+incompatible - github.com/sirupsen/logrus v1.4.2 // indirect - github.com/stretchr/testify v1.4.0 - github.com/tyler-smith/go-bip39 v1.1.0 - github.com/umbracle/fastrlp v0.0.0-20211229195328-c1416904ae17 - github.com/valyala/fasthttp v1.4.0 - github.com/valyala/fastjson v1.4.1 - golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad - golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 // indirect - golang.org/x/text v0.3.2 - google.golang.org/appengine v1.6.5 // indirect - gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect - gotest.tools v2.2.0+incompatible // indirect -) diff --git a/vendor/github.com/umbracle/go-web3/go.sum b/vendor/github.com/umbracle/go-web3/go.sum deleted file mode 100644 index 0d2708fc24..0000000000 --- a/vendor/github.com/umbracle/go-web3/go.sum +++ /dev/null @@ -1,164 +0,0 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Microsoft/go-winio v0.4.13 h1:Hmi80lzZuI/CaYmlJp/b+FjZdRZhKu9c2mDVqKlLWVs= -github.com/Microsoft/go-winio v0.4.13/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4= -github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps= -github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.21.0-beta h1:At9hIZdJW0s9E/fAz28nrz6AmcNlSVucCH796ZteX1M= -github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= -github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= -github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/containerd/continuity v0.0.0-20191214063359-1097c8bae83b h1:pik3LX++5O3UiNWv45wfP/WT81l7ukBJzd3uUiifbSU= -github.com/containerd/continuity v0.0.0-20191214063359-1097c8bae83b/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.4.1 h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jmoiron/sqlx v1.2.0 h1:41Ip0zITnmWNR/vHV+S4m+VoUivnWY5E4OJfLZjCJMA= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/compress v1.4.1 h1:8VMb5+0wMgdBykOV96DwNwKFQ+WTI4pzYURP99CcB9E= -github.com/klauspost/compress v1.4.1/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE= -github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/mattn/go-sqlite3 v1.9.0 h1:pDRiWfl+++eC2FEFRy6jXmQlvp4Yh3z1MJKg4UeYM/4= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/tyler-smith/go-bip39 v1.1.0 h1:5eUemwrMargf3BSLRRCalXT93Ns6pQJIjYQN2nyfOP8= -github.com/tyler-smith/go-bip39 v1.1.0/go.mod h1:gUYDtqQw1JS3ZJ8UWVcGTGqqr6YIN3CWg+kkNaLt55U= -github.com/umbracle/fastrlp v0.0.0-20211229195328-c1416904ae17 h1:ZZy8Rj2SqGcZn1hTcoLdwFBROzrf5KiuRwhp8G4nnfA= -github.com/umbracle/fastrlp v0.0.0-20211229195328-c1416904ae17/go.mod h1:c8J0h9aULj2i3umrfyestM6jCq0LK0U6ly6bWy96nd4= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.4.0 h1:PuaTGZIw3mjYhhhbVbCQp8aciRZN9YdoB7MGX9Ko76A= -github.com/valyala/fasthttp v1.4.0/go.mod h1:4vX61m6KN+xDduDNwXrhIAVZaZaZiQ1luJk8LWSxF3s= -github.com/valyala/fastjson v1.4.1 h1:hrltpHpIpkaxll8QltMU8c3QZ5+qIiCL8yKqPFJI/yE= -github.com/valyala/fastjson v1.4.1/go.mod h1:nV6MsjxL2IMJQUoHDIrjEI7oLyeqK6aBD7EFWPsvP8o= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad h1:DN0cp81fZ3njFcrLCytUHRSUkqBjfTo4Tx9RJTWs0EY= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 h1:YyJpGZS1sBuBCzLAR1VEpK193GlqGZbnPFnPV/5Rsb4= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= diff --git a/vendor/github.com/valyala/fasthttp/.gitignore b/vendor/github.com/valyala/fasthttp/.gitignore index 7b58ce45bc..df53ec1942 100644 --- a/vendor/github.com/valyala/fasthttp/.gitignore +++ b/vendor/github.com/valyala/fasthttp/.gitignore @@ -1,3 +1,7 @@ tags *.pprof *.fasthttp.gz +*.fasthttp.br +.idea +.DS_Store +vendor/ diff --git a/vendor/github.com/valyala/fasthttp/.travis.yml b/vendor/github.com/valyala/fasthttp/.travis.yml deleted file mode 100644 index 76cb8c17df..0000000000 --- a/vendor/github.com/valyala/fasthttp/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ -language: go - -go: - - tip - - 1.12 - - 1.11.x - - 1.10.x - - 1.9.x - -os: - - linux - - osx - -matrix: - allow_failures: - - tip - fast_finish: true - -before_install: - - go get -t -v ./... - # - go get -v golang.org/x/tools/cmd/goimports - -script: - # TODO(@kirilldanshin) - # - test -z "$(goimports -d $(find . -type f -name '*.go' -not -path "./vendor/*"))" - # build test for supported platforms - - GOOS=linux go build - - GOOS=darwin go build - - GOOS=freebsd go build - - GOOS=windows go build - - GOARCH=386 go build - - # run tests on a standard platform - - go test -v ./... - - # run tests with the race detector as well - - go test -race -v ./... diff --git a/vendor/github.com/valyala/fasthttp/LICENSE b/vendor/github.com/valyala/fasthttp/LICENSE index b098914af5..24a50469e7 100644 --- a/vendor/github.com/valyala/fasthttp/LICENSE +++ b/vendor/github.com/valyala/fasthttp/LICENSE @@ -1,25 +1,9 @@ The MIT License (MIT) -Copyright (c) 2015-present Aliaksandr Valialkin, VertaMedia -Copyright (c) 2018-present Kirill Danshin -Copyright (c) 2018-present Erik Dubbelboer -Copyright (c) 2018-present FastHTTP Authors +Copyright (c) 2015-present Aliaksandr Valialkin, VertaMedia, Kirill Danshin, Erik Dubbelboer, FastHTTP Authors -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/valyala/fasthttp/README.md b/vendor/github.com/valyala/fasthttp/README.md index 5fcb6398d0..c11d9cef14 100644 --- a/vendor/github.com/valyala/fasthttp/README.md +++ b/vendor/github.com/valyala/fasthttp/README.md @@ -1,15 +1,20 @@ -[![Build Status](https://travis-ci.org/valyala/fasthttp.svg)](https://travis-ci.org/valyala/fasthttp) -[![GoDoc](https://godoc.org/github.com/valyala/fasthttp?status.svg)](http://godoc.org/github.com/valyala/fasthttp) -[![Go Report](https://goreportcard.com/badge/github.com/valyala/fasthttp)](https://goreportcard.com/report/github.com/valyala/fasthttp) +# fasthttp [![GoDoc](https://godoc.org/github.com/valyala/fasthttp?status.svg)](http://godoc.org/github.com/valyala/fasthttp) [![Go Report](https://goreportcard.com/badge/github.com/valyala/fasthttp)](https://goreportcard.com/report/github.com/valyala/fasthttp) + +![FastHTTP – Fastest and reliable HTTP implementation in Go](https://github.com/fasthttp/docs-assets/raw/master/banner@0.5.png) -# fasthttp Fast HTTP implementation for Go. +# fasthttp might not be for you! +fasthttp was design for some high performance edge cases. **Unless** your server/client needs to handle **thousands of small to medium requests per seconds** and needs a consistent low millisecond response time fasthttp might not be for you. **For most cases `net/http` is much better** as it's easier to use and can handle more cases. For most cases you won't even notice the performance difference. + + +## General info and links + Currently fasthttp is successfully used by [VertaMedia](https://vertamedia.com/) in a production serving up to 200K rps from more than 1.5M concurrent keep-alive connections per physical server. -[TechEmpower Benchmark round 12 results](https://www.techempower.com/benchmarks/#section=data-r12&hw=peak&test=plaintext) +[TechEmpower Benchmark round 19 results](https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=plaintext) [Server Benchmarks](#http-server-performance-comparison-with-nethttp) @@ -35,7 +40,7 @@ connections per physical server. [FAQ](#faq) -# HTTP server performance comparison with [net/http](https://golang.org/pkg/net/http/) +## HTTP server performance comparison with [net/http](https://golang.org/pkg/net/http/) In short, fasthttp server is up to 10 times faster than net/http. Below are benchmark results. @@ -96,7 +101,7 @@ BenchmarkServerGet10ReqPerConn10KClients-4 30000000 346 ns/ BenchmarkServerGet100ReqPerConn10KClients-4 50000000 282 ns/op 0 B/op 0 allocs/op ``` -# HTTP client comparison with net/http +## HTTP client comparison with net/http In short, fasthttp client is up to 10 times faster than net/http. Below are benchmark results. @@ -158,19 +163,19 @@ BenchmarkClientGetEndToEnd1000Inmemory-4 10000000 1316 ns/ ``` -# Install +## Install ``` go get -u github.com/valyala/fasthttp ``` -# Switching from net/http to fasthttp +## Switching from net/http to fasthttp Unfortunately, fasthttp doesn't provide API identical to net/http. See the [FAQ](#faq) for details. There is [net/http -> fasthttp handler converter](https://godoc.org/github.com/valyala/fasthttp/fasthttpadaptor), -but it is better to write fasthttp request handlers by hand in order to use +but it is better to write fasthttp request handlers by hand in order to use all of the fasthttp advantages (especially high performance :) ). Important points: @@ -278,9 +283,11 @@ but there are more powerful third-party routers and web frameworks with fasthttp support: * [fasthttp-routing](https://github.com/qiangxue/fasthttp-routing) - * [fasthttprouter](https://github.com/buaazp/fasthttprouter) + * [router](https://github.com/fasthttp/router) * [lu](https://github.com/vincentLiuxiang/lu) * [atreugo](https://github.com/savsgio/atreugo) + * [Fiber](https://github.com/gofiber/fiber) + * [Gearbox](https://github.com/gogearbox/gearbox) Net/http code with simple ServeMux is trivially converted to fasthttp code: @@ -392,17 +399,17 @@ instead of [html/template](https://golang.org/pkg/html/template/). [expvarhandler](https://godoc.org/github.com/valyala/fasthttp/expvarhandler). -# Performance optimization tips for multi-core systems +## Performance optimization tips for multi-core systems * Use [reuseport](https://godoc.org/github.com/valyala/fasthttp/reuseport) listener. * Run a separate server instance per CPU core with GOMAXPROCS=1. * Pin each server instance to a separate CPU core using [taskset](http://linux.die.net/man/1/taskset). * Ensure the interrupts of multiqueue network card are evenly distributed between CPU cores. See [this article](https://blog.cloudflare.com/how-to-achieve-low-latency/) for details. -* Use Go 1.6 as it provides some considerable performance improvements. +* Use the latest version of Go as each version contains performance improvements. -# Fasthttp best practices +## Fasthttp best practices * Do not allocate objects and `[]byte` buffers - just reuse them as much as possible. Fasthttp API design encourages this. @@ -423,7 +430,7 @@ instead of [html/template](https://golang.org/pkg/html/template/). [html/template](https://golang.org/pkg/html/template/) in your webserver. -# Tricks with `[]byte` buffers +## Tricks with `[]byte` buffers The following tricks are used by fasthttp. Use them in your code too. @@ -478,25 +485,54 @@ statusCode, body, err := fasthttp.Get(nil, "http://google.com/") uintBuf := fasthttp.AppendUint(nil, 1234) ``` -# Related projects +* String and `[]byte` buffers may converted without memory allocations +```go +func b2s(b []byte) string { + return *(*string)(unsafe.Pointer(&b)) +} + +func s2b(s string) (b []byte) { + bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) + sh := (*reflect.StringHeader)(unsafe.Pointer(&s)) + bh.Data = sh.Data + bh.Cap = sh.Len + bh.Len = sh.Len + return b +} +``` + +### Warning: +This is an **unsafe** way, the result string and `[]byte` buffer share the same bytes. + +**Please make sure not to modify the bytes in the `[]byte` buffer if the string still survives!** + +## Related projects * [fasthttp](https://github.com/fasthttp) - various useful helpers for projects based on fasthttp. * [fasthttp-routing](https://github.com/qiangxue/fasthttp-routing) - fast and powerful routing package for fasthttp servers. - * [fasthttprouter](https://github.com/buaazp/fasthttprouter) - a high + * [http2](https://github.com/dgrr/http2) - HTTP/2 implementation for fasthttp. + * [router](https://github.com/fasthttp/router) - a high performance fasthttp request router that scales well. + * [fastws](https://github.com/fasthttp/fastws) - Bloatless WebSocket package made for fasthttp + to handle Read/Write operations concurrently. * [gramework](https://github.com/gramework/gramework) - a web framework made by one of fasthttp maintainers * [lu](https://github.com/vincentLiuxiang/lu) - a high performance go middleware web framework which is based on fasthttp. * [websocket](https://github.com/fasthttp/websocket) - Gorilla-based websocket implementation for fasthttp. + * [websocket](https://github.com/dgrr/websocket) - Event-based high-performance WebSocket library for zero-allocation + websocket servers and clients. * [fasthttpsession](https://github.com/phachon/fasthttpsession) - a fast and powerful session package for fasthttp servers. - * [atreugo](https://github.com/savsgio/atreugo) - Micro-framework to make simple the use of routing and middlewares. + * [atreugo](https://github.com/savsgio/atreugo) - High performance and extensible micro web framework with zero memory allocations in hot paths. * [kratgo](https://github.com/savsgio/kratgo) - Simple, lightweight and ultra-fast HTTP Cache to speed up your websites. + * [kit-plugins](https://github.com/wencan/kit-plugins/tree/master/transport/fasthttp) - go-kit transport implementation for fasthttp. + * [Fiber](https://github.com/gofiber/fiber) - An Expressjs inspired web framework running on Fasthttp + * [Gearbox](https://github.com/gogearbox/gearbox) - :gear: gearbox is a web framework written in Go with a focus on high performance and memory optimization -# FAQ +## FAQ * *Why creating yet another http package instead of optimizing net/http?* @@ -523,7 +559,7 @@ uintBuf := fasthttp.AppendUint(nil, 1234) * *Why fasthttp doesn't support HTTP/2.0 and WebSockets?* - [HTTP/2.0 support](https://github.com/fasthttp/http2) is in progress. [WebSockets](https://github.com/fasthttp/websockets) has been done already. + [HTTP/2.0 support](https://github.com/fasthttp/http2) is in progress. [WebSockets](https://github.com/fasthttp/websockets) has been done already. Third parties also may use [RequestCtx.Hijack](https://godoc.org/github.com/valyala/fasthttp#RequestCtx.Hijack) for implementing these goodies. @@ -533,9 +569,10 @@ uintBuf := fasthttp.AppendUint(nil, 1234) * net/http supports [HTTP/2.0 starting from go1.6](https://http2.golang.org/). * net/http API is stable, while fasthttp API constantly evolves. * net/http handles more HTTP corner cases. + * net/http can stream both request and response bodies + * net/http can handle bigger bodies as it doesn't read the whole body into memory * net/http should contain less bugs, since it is used and tested by much wider audience. - * net/http works on Go older than 1.5. * *Why fasthttp API prefers returning `[]byte` instead of `string`?* @@ -546,10 +583,7 @@ uintBuf := fasthttp.AppendUint(nil, 1234) * *Which GO versions are supported by fasthttp?* - Go1.5+. Older versions won't be supported, since their standard package - [miss useful functions](https://github.com/valyala/fasthttp/issues/5). - - **NOTE**: Go 1.9.7 is the oldest tested version. We recommend you to update as soon as you can. As of 1.11.3 we will drop 1.9.x support. + Go 1.15.x. Older versions won't be supported. * *Please provide real benchmark data and server information* @@ -561,10 +595,12 @@ uintBuf := fasthttp.AppendUint(nil, 1234) Use third-party routers and web frameworks with fasthttp support: * [fasthttp-routing](https://github.com/qiangxue/fasthttp-routing) - * [fasthttprouter](https://github.com/buaazp/fasthttprouter) + * [router](https://github.com/fasthttp/router) * [gramework](https://github.com/gramework/gramework) * [lu](https://github.com/vincentLiuxiang/lu) * [atreugo](https://github.com/savsgio/atreugo) + * [Fiber](https://github.com/gofiber/fiber) + * [Gearbox](https://github.com/gogearbox/gearbox) See also [this issue](https://github.com/valyala/fasthttp/issues/9) for more info. diff --git a/vendor/github.com/valyala/fasthttp/SECURITY.md b/vendor/github.com/valyala/fasthttp/SECURITY.md index 2beab1714c..642bbb988c 100644 --- a/vendor/github.com/valyala/fasthttp/SECURITY.md +++ b/vendor/github.com/valyala/fasthttp/SECURITY.md @@ -54,7 +54,7 @@ Any GitHub issues pertaining to a security issue will be prefixed with [security ### Comments on This Policy If you have any suggestions to improve this policy, please send an email to oss-security@highload.solutions for discussion. -### PGP Key for oss-security@highload.solutions +### PGP Key for oss-security@highload.ltd We accept PGP-encrypted email, but the majority of the security team are not regular PGP users so it's somewhat inconvenient. Please only use PGP for critical security reports. diff --git a/vendor/github.com/valyala/fasthttp/args.go b/vendor/github.com/valyala/fasthttp/args.go index e5865cd2c7..dc10ea1c48 100644 --- a/vendor/github.com/valyala/fasthttp/args.go +++ b/vendor/github.com/valyala/fasthttp/args.go @@ -44,7 +44,7 @@ var argsPool = &sync.Pool{ // // Args instance MUST NOT be used from concurrently running goroutines. type Args struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck args []argsKV buf []byte @@ -110,7 +110,8 @@ func (a *Args) String() string { // QueryString returns query string for the args. // -// The returned value is valid until the next call to Args methods. +// The returned value is valid until the Args is reused or released (ReleaseArgs). +// Do not store references to the returned value. Make copies instead. func (a *Args) QueryString() []byte { a.buf = a.AppendBytes(a.buf[:0]) return a.buf @@ -229,7 +230,7 @@ func (a *Args) SetBytesKV(key, value []byte) { // SetNoValue sets only 'key' as argument without the '='. // -// Only key in argumemt, like key1&key2 +// Only key in argument, like key1&key2 func (a *Args) SetNoValue(key string) { a.args = setArg(a.args, key, "", argsNoValue) } @@ -241,14 +242,16 @@ func (a *Args) SetBytesKNoValue(key []byte) { // Peek returns query arg value for the given key. // -// Returned value is valid until the next Args call. +// The returned value is valid until the Args is reused or released (ReleaseArgs). +// Do not store references to the returned value. Make copies instead. func (a *Args) Peek(key string) []byte { return peekArgStr(a.args, key) } // PeekBytes returns query arg value for the given key. // -// Returned value is valid until the next Args call. +// The returned value is valid until the Args is reused or released (ReleaseArgs). +// Do not store references to the returned value. Make copies instead. func (a *Args) PeekBytes(key []byte) []byte { return peekArgBytes(a.args, key) } @@ -358,10 +361,23 @@ func visitArgs(args []argsKV, f func(k, v []byte)) { } } +func visitArgsKey(args []argsKV, f func(k []byte)) { + for i, n := 0, len(args); i < n; i++ { + kv := &args[i] + f(kv.key) + } +} + func copyArgs(dst, src []argsKV) []argsKV { if cap(dst) < len(src) { tmp := make([]argsKV, len(src)) + dst = dst[:cap(dst)] // copy all of dst. copy(tmp, dst) + for i := len(dst); i < len(tmp); i++ { + // Make sure nothing is nil. + tmp[i].key = []byte{} + tmp[i].value = []byte{} + } dst = tmp } n := len(src) @@ -391,6 +407,7 @@ func delAllArgs(args []argsKV, key string) []argsKV { tmp := *kv copy(args[i:], args[i+1:]) n-- + i-- args[n] = tmp args = args[:n] } @@ -441,7 +458,9 @@ func allocArg(h []argsKV) ([]argsKV, *argsKV) { if cap(h) > n { h = h[:n+1] } else { - h = append(h, argsKV{}) + h = append(h, argsKV{ + value: []byte{}, + }) } return h, &h[n] } @@ -525,13 +544,28 @@ func (s *argsScanner) next(kv *argsKV) bool { } func decodeArgAppend(dst, src []byte) []byte { - if bytes.IndexByte(src, '%') < 0 && bytes.IndexByte(src, '+') < 0 { + idxPercent := bytes.IndexByte(src, '%') + idxPlus := bytes.IndexByte(src, '+') + if idxPercent == -1 && idxPlus == -1 { // fast path: src doesn't contain encoded chars return append(dst, src...) } + idx := 0 + if idxPercent == -1 { + idx = idxPlus + } else if idxPlus == -1 { + idx = idxPercent + } else if idxPercent > idxPlus { + idx = idxPlus + } else { + idx = idxPercent + } + + dst = append(dst, src[:idx]...) + // slow path - for i := 0; i < len(src); i++ { + for i := idx; i < len(src); i++ { c := src[i] if c == '%' { if i+2 >= len(src) { @@ -560,13 +594,16 @@ func decodeArgAppend(dst, src []byte) []byte { // The function is copy-pasted from decodeArgAppend due to the performance // reasons only. func decodeArgAppendNoPlus(dst, src []byte) []byte { - if bytes.IndexByte(src, '%') < 0 { + idx := bytes.IndexByte(src, '%') + if idx < 0 { // fast path: src doesn't contain encoded chars return append(dst, src...) + } else { + dst = append(dst, src[:idx]...) } // slow path - for i := 0; i < len(src); i++ { + for i := idx; i < len(src); i++ { c := src[i] if c == '%' { if i+2 >= len(src) { diff --git a/vendor/github.com/valyala/fasthttp/brotli.go b/vendor/github.com/valyala/fasthttp/brotli.go new file mode 100644 index 0000000000..41e9609287 --- /dev/null +++ b/vendor/github.com/valyala/fasthttp/brotli.go @@ -0,0 +1,193 @@ +package fasthttp + +import ( + "bytes" + "fmt" + "io" + "sync" + + "github.com/andybalholm/brotli" + "github.com/valyala/bytebufferpool" + "github.com/valyala/fasthttp/stackless" +) + +// Supported compression levels. +const ( + CompressBrotliNoCompression = 0 + CompressBrotliBestSpeed = brotli.BestSpeed + CompressBrotliBestCompression = brotli.BestCompression + + // Choose a default brotli compression level comparable to + // CompressDefaultCompression (gzip 6) + // See: https://github.com/valyala/fasthttp/issues/798#issuecomment-626293806 + CompressBrotliDefaultCompression = 4 +) + +func acquireBrotliReader(r io.Reader) (*brotli.Reader, error) { + v := brotliReaderPool.Get() + if v == nil { + return brotli.NewReader(r), nil + } + zr := v.(*brotli.Reader) + if err := zr.Reset(r); err != nil { + return nil, err + } + return zr, nil +} + +func releaseBrotliReader(zr *brotli.Reader) { + brotliReaderPool.Put(zr) +} + +var brotliReaderPool sync.Pool + +func acquireStacklessBrotliWriter(w io.Writer, level int) stackless.Writer { + nLevel := normalizeBrotliCompressLevel(level) + p := stacklessBrotliWriterPoolMap[nLevel] + v := p.Get() + if v == nil { + return stackless.NewWriter(w, func(w io.Writer) stackless.Writer { + return acquireRealBrotliWriter(w, level) + }) + } + sw := v.(stackless.Writer) + sw.Reset(w) + return sw +} + +func releaseStacklessBrotliWriter(sw stackless.Writer, level int) { + sw.Close() + nLevel := normalizeBrotliCompressLevel(level) + p := stacklessBrotliWriterPoolMap[nLevel] + p.Put(sw) +} + +func acquireRealBrotliWriter(w io.Writer, level int) *brotli.Writer { + nLevel := normalizeBrotliCompressLevel(level) + p := realBrotliWriterPoolMap[nLevel] + v := p.Get() + if v == nil { + zw := brotli.NewWriterLevel(w, level) + return zw + } + zw := v.(*brotli.Writer) + zw.Reset(w) + return zw +} + +func releaseRealBrotliWriter(zw *brotli.Writer, level int) { + zw.Close() + nLevel := normalizeBrotliCompressLevel(level) + p := realBrotliWriterPoolMap[nLevel] + p.Put(zw) +} + +var ( + stacklessBrotliWriterPoolMap = newCompressWriterPoolMap() + realBrotliWriterPoolMap = newCompressWriterPoolMap() +) + +// AppendBrotliBytesLevel appends brotlied src to dst using the given +// compression level and returns the resulting dst. +// +// Supported compression levels are: +// +// * CompressBrotliNoCompression +// * CompressBrotliBestSpeed +// * CompressBrotliBestCompression +// * CompressBrotliDefaultCompression +func AppendBrotliBytesLevel(dst, src []byte, level int) []byte { + w := &byteSliceWriter{dst} + WriteBrotliLevel(w, src, level) //nolint:errcheck + return w.b +} + +// WriteBrotliLevel writes brotlied p to w using the given compression level +// and returns the number of compressed bytes written to w. +// +// Supported compression levels are: +// +// * CompressBrotliNoCompression +// * CompressBrotliBestSpeed +// * CompressBrotliBestCompression +// * CompressBrotliDefaultCompression +func WriteBrotliLevel(w io.Writer, p []byte, level int) (int, error) { + switch w.(type) { + case *byteSliceWriter, + *bytes.Buffer, + *bytebufferpool.ByteBuffer: + // These writers don't block, so we can just use stacklessWriteBrotli + ctx := &compressCtx{ + w: w, + p: p, + level: level, + } + stacklessWriteBrotli(ctx) + return len(p), nil + default: + zw := acquireStacklessBrotliWriter(w, level) + n, err := zw.Write(p) + releaseStacklessBrotliWriter(zw, level) + return n, err + } +} + +var stacklessWriteBrotli = stackless.NewFunc(nonblockingWriteBrotli) + +func nonblockingWriteBrotli(ctxv interface{}) { + ctx := ctxv.(*compressCtx) + zw := acquireRealBrotliWriter(ctx.w, ctx.level) + + _, err := zw.Write(ctx.p) + if err != nil { + panic(fmt.Sprintf("BUG: brotli.Writer.Write for len(p)=%d returned unexpected error: %v", len(ctx.p), err)) + } + + releaseRealBrotliWriter(zw, ctx.level) +} + +// WriteBrotli writes brotlied p to w and returns the number of compressed +// bytes written to w. +func WriteBrotli(w io.Writer, p []byte) (int, error) { + return WriteBrotliLevel(w, p, CompressBrotliDefaultCompression) +} + +// AppendBrotliBytes appends brotlied src to dst and returns the resulting dst. +func AppendBrotliBytes(dst, src []byte) []byte { + return AppendBrotliBytesLevel(dst, src, CompressBrotliDefaultCompression) +} + +// WriteUnbrotli writes unbrotlied p to w and returns the number of uncompressed +// bytes written to w. +func WriteUnbrotli(w io.Writer, p []byte) (int, error) { + r := &byteSliceReader{p} + zr, err := acquireBrotliReader(r) + if err != nil { + return 0, err + } + n, err := copyZeroAlloc(w, zr) + releaseBrotliReader(zr) + nn := int(n) + if int64(nn) != n { + return 0, fmt.Errorf("too much data unbrotlied: %d", n) + } + return nn, err +} + +// AppendUnbrotliBytes appends unbrotlied src to dst and returns the resulting dst. +func AppendUnbrotliBytes(dst, src []byte) ([]byte, error) { + w := &byteSliceWriter{dst} + _, err := WriteUnbrotli(w, src) + return w.b, err +} + +// normalizes compression level into [0..11], so it could be used as an index +// in *PoolMap. +func normalizeBrotliCompressLevel(level int) int { + // -2 is the lowest compression level - CompressHuffmanOnly + // 9 is the highest compression level - CompressBestCompression + if level < 0 || level > 11 { + level = CompressBrotliDefaultCompression + } + return level +} diff --git a/vendor/github.com/valyala/fasthttp/bytesconv.go b/vendor/github.com/valyala/fasthttp/bytesconv.go index 8c0e1545d1..a12bb95979 100644 --- a/vendor/github.com/valyala/fasthttp/bytesconv.go +++ b/vendor/github.com/valyala/fasthttp/bytesconv.go @@ -1,3 +1,5 @@ +//go:generate go run bytesconv_table_gen.go + package fasthttp import ( @@ -9,7 +11,6 @@ import ( "math" "net" "reflect" - "strings" "sync" "time" "unsafe" @@ -17,29 +18,24 @@ import ( // AppendHTMLEscape appends html-escaped s to dst and returns the extended dst. func AppendHTMLEscape(dst []byte, s string) []byte { - if strings.IndexByte(s, '<') < 0 && - strings.IndexByte(s, '>') < 0 && - strings.IndexByte(s, '"') < 0 && - strings.IndexByte(s, '\'') < 0 { - - // fast path - nothing to escape - return append(dst, s...) - } + var ( + prev int + sub string + ) - // slow path - var prev int - var sub string for i, n := 0, len(s); i < n; i++ { sub = "" switch s[i] { + case '&': + sub = "&" case '<': sub = "<" case '>': sub = ">" case '"': - sub = """ + sub = """ // """ is shorter than """. case '\'': - sub = "'" + sub = "'" // "'" is shorter than "'" and apos was not in HTML until HTML5. } if len(sub) > 0 { dst = append(dst, s[prev:i]...) @@ -96,7 +92,7 @@ func ParseIPv4(dst net.IP, ipStr []byte) (net.IP, error) { } v, err := ParseUint(b[:n]) if err != nil { - return dst, fmt.Errorf("cannot parse ipStr %q: %s", ipStr, err) + return dst, fmt.Errorf("cannot parse ipStr %q: %w", ipStr, err) } if v > 255 { return dst, fmt.Errorf("cannot parse ipStr %q: ip part cannot exceed 255: parsed %d", ipStr, v) @@ -106,7 +102,7 @@ func ParseIPv4(dst net.IP, ipStr []byte) (net.IP, error) { } v, err := ParseUint(b) if err != nil { - return dst, fmt.Errorf("cannot parse ipStr %q: %s", ipStr, err) + return dst, fmt.Errorf("cannot parse ipStr %q: %w", ipStr, err) } if v > 255 { return dst, fmt.Errorf("cannot parse ipStr %q: ip part cannot exceed 255: parsed %d", ipStr, v) @@ -183,11 +179,12 @@ func parseUintBuf(b []byte) (int, int, error) { } return v, i, nil } + vNew := 10*v + int(k) // Test for overflow. - if v*10 < v { + if vNew < v { return -1, i, errTooLongInt } - v = 10*v + int(k) + v = vNew } return v, n, nil } @@ -271,7 +268,9 @@ func readHexInt(r *bufio.Reader) (int, error) { if i == 0 { return -1, errEmptyHexNum } - r.UnreadByte() + if err := r.UnreadByte(); err != nil { + return -1, err + } return n, nil } if i >= maxHexIntChars { @@ -296,7 +295,7 @@ func writeHexInt(w *bufio.Writer, n int) error { buf := v.([]byte) i := len(buf) - 1 for { - buf[i] = int2hexbyte(n & 0xf) + buf[i] = lowerhex[n&0xf] n >>= 4 if n == 0 { break @@ -308,61 +307,10 @@ func writeHexInt(w *bufio.Writer, n int) error { return err } -func int2hexbyte(n int) byte { - if n < 10 { - return '0' + byte(n) - } - return 'a' + byte(n) - 10 -} - -func hexCharUpper(c byte) byte { - if c < 10 { - return '0' + c - } - return c - 10 + 'A' -} - -var hex2intTable = func() []byte { - b := make([]byte, 256) - for i := 0; i < 256; i++ { - c := byte(16) - if i >= '0' && i <= '9' { - c = byte(i) - '0' - } else if i >= 'a' && i <= 'f' { - c = byte(i) - 'a' + 10 - } else if i >= 'A' && i <= 'F' { - c = byte(i) - 'A' + 10 - } - b[i] = c - } - return b -}() - -const toLower = 'a' - 'A' - -var toLowerTable = func() [256]byte { - var a [256]byte - for i := 0; i < 256; i++ { - c := byte(i) - if c >= 'A' && c <= 'Z' { - c += toLower - } - a[i] = c - } - return a -}() - -var toUpperTable = func() [256]byte { - var a [256]byte - for i := 0; i < 256; i++ { - c := byte(i) - if c >= 'a' && c <= 'z' { - c -= toLower - } - a[i] = c - } - return a -}() +const ( + upperhex = "0123456789ABCDEF" + lowerhex = "0123456789abcdef" +) func lowercaseBytes(b []byte) { for i := 0; i < len(b); i++ { @@ -377,6 +325,7 @@ func lowercaseBytes(b []byte) { // Note it may break if string and/or slice header will change // in the future go versions. func b2s(b []byte) string { + /* #nosec G103 */ return *(*string)(unsafe.Pointer(&b)) } @@ -384,14 +333,15 @@ func b2s(b []byte) string { // // Note it may break if string and/or slice header will change // in the future go versions. -func s2b(s string) []byte { +func s2b(s string) (b []byte) { + /* #nosec G103 */ + bh := (*reflect.SliceHeader)(unsafe.Pointer(&b)) + /* #nosec G103 */ sh := (*reflect.StringHeader)(unsafe.Pointer(&s)) - bh := reflect.SliceHeader{ - Data: sh.Data, - Len: sh.Len, - Cap: sh.Len, - } - return *(*[]byte)(unsafe.Pointer(&bh)) + bh.Data = sh.Data + bh.Cap = sh.Len + bh.Len = sh.Len + return b } // AppendUnquotedArg appends url-decoded src to dst and returns appended dst. @@ -404,33 +354,29 @@ func AppendUnquotedArg(dst, src []byte) []byte { // AppendQuotedArg appends url-encoded src to dst and returns appended dst. func AppendQuotedArg(dst, src []byte) []byte { for _, c := range src { - // See http://www.w3.org/TR/html5/forms.html#form-submission-algorithm - if c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || - c == '*' || c == '-' || c == '.' || c == '_' { + switch { + case c == ' ': + dst = append(dst, '+') + case quotedArgShouldEscapeTable[int(c)] != 0: + dst = append(dst, '%', upperhex[c>>4], upperhex[c&0xf]) + default: dst = append(dst, c) - } else { - dst = append(dst, '%', hexCharUpper(c>>4), hexCharUpper(c&15)) } } return dst } func appendQuotedPath(dst, src []byte) []byte { + // Fix issue in https://github.com/golang/go/issues/11202 + if len(src) == 1 && src[0] == '*' { + return append(dst, '*') + } + for _, c := range src { - // From the spec: http://tools.ietf.org/html/rfc3986#section-3.3 - // an path can contain zero or more of pchar that is defined as follows: - // pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - // pct-encoded = "%" HEXDIG HEXDIG - // unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - // sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - // / "*" / "+" / "," / ";" / "=" - if c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9' || - c == '-' || c == '.' || c == '_' || c == '~' || c == '!' || c == '$' || - c == '&' || c == '\'' || c == '(' || c == ')' || c == '*' || c == '+' || - c == ',' || c == ';' || c == '=' || c == ':' || c == '@' || c == '/' { - dst = append(dst, c) + if quotedPathShouldEscapeTable[int(c)] != 0 { + dst = append(dst, '%', upperhex[c>>4], upperhex[c&0xf]) } else { - dst = append(dst, '%', hexCharUpper(c>>4), hexCharUpper(c&15)) + dst = append(dst, c) } } return dst diff --git a/vendor/github.com/valyala/fasthttp/bytesconv_32.go b/vendor/github.com/valyala/fasthttp/bytesconv_32.go index 7fd6f5f12b..b574883380 100644 --- a/vendor/github.com/valyala/fasthttp/bytesconv_32.go +++ b/vendor/github.com/valyala/fasthttp/bytesconv_32.go @@ -1,4 +1,5 @@ -// +build !amd64,!arm64,!ppc64 +//go:build !amd64 && !arm64 && !ppc64 && !ppc64le && !s390x +// +build !amd64,!arm64,!ppc64,!ppc64le,!s390x package fasthttp diff --git a/vendor/github.com/valyala/fasthttp/bytesconv_64.go b/vendor/github.com/valyala/fasthttp/bytesconv_64.go index edf7309c2b..94d0ec684c 100644 --- a/vendor/github.com/valyala/fasthttp/bytesconv_64.go +++ b/vendor/github.com/valyala/fasthttp/bytesconv_64.go @@ -1,4 +1,5 @@ -// +build amd64 arm64 ppc64 +//go:build amd64 || arm64 || ppc64 || ppc64le || s390x +// +build amd64 arm64 ppc64 ppc64le s390x package fasthttp diff --git a/vendor/github.com/valyala/fasthttp/bytesconv_table.go b/vendor/github.com/valyala/fasthttp/bytesconv_table.go new file mode 100644 index 0000000000..78a12a30b1 --- /dev/null +++ b/vendor/github.com/valyala/fasthttp/bytesconv_table.go @@ -0,0 +1,10 @@ +package fasthttp + +// Code generated by go run bytesconv_table_gen.go; DO NOT EDIT. +// See bytesconv_table_gen.go for more information about these tables. + +const hex2intTable = "\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x00\x01\x02\x03\x04\x05\x06\a\b\t\x10\x10\x10\x10\x10\x10\x10\n\v\f\r\x0e\x0f\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\v\f\r\x0e\x0f\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10" +const toLowerTable = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u007f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" +const toUpperTable = "\x00\x01\x02\x03\x04\x05\x06\a\b\t\n\v\f\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\u007f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff" +const quotedArgShouldEscapeTable = "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" +const quotedPathShouldEscapeTable = "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x00\x01\x00\x01\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x01\x00\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01" diff --git a/vendor/github.com/valyala/fasthttp/client.go b/vendor/github.com/valyala/fasthttp/client.go index cd55961f92..7ffae8b6f4 100644 --- a/vendor/github.com/valyala/fasthttp/client.go +++ b/vendor/github.com/valyala/fasthttp/client.go @@ -1,13 +1,15 @@ +// go:build !windows || !race + package fasthttp import ( "bufio" - "bytes" "crypto/tls" "errors" "fmt" "io" "net" + "strconv" "strings" "sync" "sync/atomic" @@ -96,6 +98,30 @@ func DoDeadline(req *Request, resp *Response, deadline time.Time) error { return defaultClient.DoDeadline(req, resp, deadline) } +// DoRedirects performs the given http request and fills the given http response, +// following up to maxRedirectsCount redirects. When the redirect count exceeds +// maxRedirectsCount, ErrTooManyRedirects is returned. +// +// Request must contain at least non-zero RequestURI with full url (including +// scheme and host) or non-zero Host header + RequestURI. +// +// Client determines the server to be requested in the following order: +// +// - from RequestURI if it contains full url with scheme and host; +// - from Host header otherwise. +// +// Response is ignored if resp is nil. +// +// ErrNoFreeConns is returned if all DefaultMaxConnsPerHost connections +// to the requested host are busy. +// +// It is recommended obtaining req and resp via AcquireRequest +// and AcquireResponse in performance-critical code. +func DoRedirects(req *Request, resp *Response, maxRedirectsCount int) error { + _, _, err := doRequestFollowRedirects(req, resp, req.URI().String(), maxRedirectsCount, &defaultClient) + return err +} + // Get returns the status code and body of url. // // The contents of dst will be replaced by the body and returned, if the dst @@ -151,8 +177,10 @@ var defaultClient Client // Copying Client by value is prohibited. Create new instance instead. // // It is safe calling Client methods from concurrently running goroutines. +// +// The fields of a Client should not be changed while it is in use. type Client struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Client name. Used in User-Agent request header. // @@ -193,6 +221,11 @@ type Client struct { // after DefaultMaxIdleConnDuration. MaxIdleConnDuration time.Duration + // Keep-alive connections are closed after this duration. + // + // By default connection duration is unlimited. + MaxConnDuration time.Duration + // Maximum number of attempts for idempotent calls // // DefaultMaxIdemponentCallAttempts is used if not set. @@ -245,9 +278,33 @@ type Client struct { // * cONTENT-lenGTH -> Content-Length DisableHeaderNamesNormalizing bool - mLock sync.Mutex - m map[string]*HostClient - ms map[string]*HostClient + // Path values are sent as-is without normalization + // + // Disabled path normalization may be useful for proxying incoming requests + // to servers that are expecting paths to be forwarded as-is. + // + // By default path values are normalized, i.e. + // extra slashes are removed, special characters are encoded. + DisablePathNormalizing bool + + // Maximum duration for waiting for a free connection. + // + // By default will not waiting, return ErrNoFreeConns immediately + MaxConnWaitTimeout time.Duration + + // RetryIf controls whether a retry should be attempted after an error. + // + // By default will use isIdempotent function + RetryIf RetryIfFunc + + // ConfigureClient configures the fasthttp.HostClient. + ConfigureClient func(hc *HostClient) error + + mLock sync.Mutex + m map[string]*HostClient + ms map[string]*HostClient + readerPool sync.Pool + writerPool sync.Pool } // Get returns the status code and body of url. @@ -357,6 +414,30 @@ func (c *Client) DoDeadline(req *Request, resp *Response, deadline time.Time) er return clientDoDeadline(req, resp, deadline, c) } +// DoRedirects performs the given http request and fills the given http response, +// following up to maxRedirectsCount redirects. When the redirect count exceeds +// maxRedirectsCount, ErrTooManyRedirects is returned. +// +// Request must contain at least non-zero RequestURI with full url (including +// scheme and host) or non-zero Host header + RequestURI. +// +// Client determines the server to be requested in the following order: +// +// - from RequestURI if it contains full url with scheme and host; +// - from Host header otherwise. +// +// Response is ignored if resp is nil. +// +// ErrNoFreeConns is returned if all DefaultMaxConnsPerHost connections +// to the requested host are busy. +// +// It is recommended obtaining req and resp via AcquireRequest +// and AcquireResponse in performance-critical code. +func (c *Client) DoRedirects(req *Request, resp *Response, maxRedirectsCount int) error { + _, _, err := doRequestFollowRedirects(req, resp, req.URI().String(), maxRedirectsCount, c) + return err +} + // Do performs the given http request and fills the given http response. // // Request must contain at least non-zero RequestURI with full url (including @@ -378,14 +459,17 @@ func (c *Client) DoDeadline(req *Request, resp *Response, deadline time.Time) er // and AcquireResponse in performance-critical code. func (c *Client) Do(req *Request, resp *Response) error { uri := req.URI() + if uri == nil { + return ErrorInvalidURI + } + host := uri.Host() isTLS := false - scheme := uri.Scheme() - if bytes.Equal(scheme, strHTTPS) { + if uri.isHttps() { isTLS = true - } else if !bytes.Equal(scheme, strHTTP) { - return fmt.Errorf("unsupported protocol %q. http and https are supported", scheme) + } else if !uri.isHttp() { + return fmt.Errorf("unsupported protocol %q. http and https are supported", uri.Scheme()) } startCleaner := false @@ -415,6 +499,7 @@ func (c *Client) Do(req *Request, resp *Response) error { TLSConfig: c.TLSConfig, MaxConns: c.MaxConnsPerHost, MaxIdleConnDuration: c.MaxIdleConnDuration, + MaxConnDuration: c.MaxConnDuration, MaxIdemponentCallAttempts: c.MaxIdemponentCallAttempts, ReadBufferSize: c.ReadBufferSize, WriteBufferSize: c.WriteBufferSize, @@ -422,12 +507,28 @@ func (c *Client) Do(req *Request, resp *Response) error { WriteTimeout: c.WriteTimeout, MaxResponseBodySize: c.MaxResponseBodySize, DisableHeaderNamesNormalizing: c.DisableHeaderNamesNormalizing, + DisablePathNormalizing: c.DisablePathNormalizing, + MaxConnWaitTimeout: c.MaxConnWaitTimeout, + RetryIf: c.RetryIf, + clientReaderPool: &c.readerPool, + clientWriterPool: &c.writerPool, } + + if c.ConfigureClient != nil { + if err := c.ConfigureClient(hc); err != nil { + return err + } + } + m[string(host)] = hc if len(m) == 1 { startCleaner = true } } + + atomic.AddInt32(&hc.pendingClientRequests, 1) + defer atomic.AddInt32(&hc.pendingClientRequests, -1) + c.mLock.Unlock() if startCleaner { @@ -437,19 +538,39 @@ func (c *Client) Do(req *Request, resp *Response) error { return hc.Do(req, resp) } +// CloseIdleConnections closes any connections which were previously +// connected from previous requests but are now sitting idle in a +// "keep-alive" state. It does not interrupt any connections currently +// in use. +func (c *Client) CloseIdleConnections() { + c.mLock.Lock() + for _, v := range c.m { + v.CloseIdleConnections() + } + for _, v := range c.ms { + v.CloseIdleConnections() + } + c.mLock.Unlock() +} + func (c *Client) mCleaner(m map[string]*HostClient) { mustStop := false + sleep := c.MaxIdleConnDuration + if sleep < time.Second { + sleep = time.Second + } else if sleep > 10*time.Second { + sleep = 10 * time.Second + } + for { c.mLock.Lock() for k, v := range m { v.connsLock.Lock() - shouldRemove := v.connsCount == 0 - v.connsLock.Unlock() - - if shouldRemove { + if v.connsCount == 0 && atomic.LoadInt32(&v.pendingClientRequests) == 0 { delete(m, k) } + v.connsLock.Unlock() } if len(m) == 0 { mustStop = true @@ -459,7 +580,7 @@ func (c *Client) mCleaner(m map[string]*HostClient) { if mustStop { break } - time.Sleep(10 * time.Second) + time.Sleep(sleep) } } @@ -489,6 +610,22 @@ const DefaultMaxIdemponentCallAttempts = 5 // - foobar.com:8080 type DialFunc func(addr string) (net.Conn, error) +// RetryIfFunc signature of retry if function +// +// Request argument passed to RetryIfFunc, if there are any request errors. +type RetryIfFunc func(request *Request) bool + +// TransportFunc wraps every request/response. +type TransportFunc func(*Request, *Response) error + +// ConnPoolStrategyType define strategy of connection pool enqueue/dequeue +type ConnPoolStrategyType int + +const ( + FIFO ConnPoolStrategyType = iota + LIFO +) + // HostClient balances http requests among hosts listed in Addr. // // HostClient may be used for balancing load among multiple upstream hosts. @@ -500,7 +637,7 @@ type DialFunc func(addr string) (net.Conn, error) // // It is safe calling HostClient methods from concurrently running goroutines. type HostClient struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Comma-separated list of upstream HTTP server host addresses, // which are passed to Dial in a round-robin manner. @@ -613,12 +750,46 @@ type HostClient struct { // * cONTENT-lenGTH -> Content-Length DisableHeaderNamesNormalizing bool + // Path values are sent as-is without normalization + // + // Disabled path normalization may be useful for proxying incoming requests + // to servers that are expecting paths to be forwarded as-is. + // + // By default path values are normalized, i.e. + // extra slashes are removed, special characters are encoded. + DisablePathNormalizing bool + + // Will not log potentially sensitive content in error logs + // + // This option is useful for servers that handle sensitive data + // in the request/response. + // + // Client logs full errors by default. + SecureErrorLogMessage bool + + // Maximum duration for waiting for a free connection. + // + // By default will not waiting, return ErrNoFreeConns immediately + MaxConnWaitTimeout time.Duration + + // RetryIf controls whether a retry should be attempted after an error. + // + // By default will use isIdempotent function + RetryIf RetryIfFunc + + // Transport defines a transport-like mechanism that wraps every request/response. + Transport TransportFunc + + // Connection pool strategy. Can be either LIFO or FIFO (default). + ConnPoolStrategy ConnPoolStrategyType + clientName atomic.Value lastUseTime uint32 connsLock sync.Mutex connsCount int conns []*clientConn + connsWait *wantConnQueue addrsLock sync.Mutex addrs []string @@ -630,8 +801,15 @@ type HostClient struct { readerPool sync.Pool writerPool sync.Pool + clientReaderPool *sync.Pool + clientWriterPool *sync.Pool + pendingRequests int32 + // pendingClientRequests counts the number of requests that a Client is currently running using this HostClient. + // It will be incremented ealier than pendingRequests and will be used by Client to see if the HostClient is still in use. + pendingClientRequests int32 + connsCleanerRun bool } @@ -705,7 +883,7 @@ type clientDoer interface { func clientGetURL(dst []byte, url string, c clientDoer) (statusCode int, body []byte, err error) { req := AcquireRequest() - statusCode, body, err = doRequestFollowRedirects(req, dst, url, c) + statusCode, body, err = doRequestFollowRedirectsBuffer(req, dst, url, c) ReleaseRequest(req) return statusCode, body, err @@ -735,8 +913,6 @@ func clientGetURLDeadline(dst []byte, url string, deadline time.Time, c clientDo } ch = chv.(chan clientURLResponse) - req := AcquireRequest() - // Note that the request continues execution on ErrTimeout until // client-specific ReadTimeout exceeds. This helps limiting load // on slow hosts by MaxConns* concurrent requests. @@ -744,29 +920,56 @@ func clientGetURLDeadline(dst []byte, url string, deadline time.Time, c clientDo // Without this 'hack' the load on slow host could exceed MaxConns* // concurrent requests, since timed out requests on client side // usually continue execution on the host. + + var mu sync.Mutex + var timedout, responded bool + go func() { - statusCodeCopy, bodyCopy, errCopy := doRequestFollowRedirects(req, dst, url, c) - ch <- clientURLResponse{ - statusCode: statusCodeCopy, - body: bodyCopy, - err: errCopy, + req := AcquireRequest() + + statusCodeCopy, bodyCopy, errCopy := doRequestFollowRedirectsBuffer(req, dst, url, c) + mu.Lock() + { + if !timedout { + ch <- clientURLResponse{ + statusCode: statusCodeCopy, + body: bodyCopy, + err: errCopy, + } + responded = true + } } + mu.Unlock() + + ReleaseRequest(req) }() tc := AcquireTimer(timeout) select { case resp := <-ch: - ReleaseRequest(req) - clientURLResponseChPool.Put(chv) statusCode = resp.statusCode body = resp.body err = resp.err case <-tc.C: - body = dst - err = ErrTimeout + mu.Lock() + { + if responded { + resp := <-ch + statusCode = resp.statusCode + body = resp.body + err = resp.err + } else { + timedout = true + err = ErrTimeout + body = dst + } + } + mu.Unlock() } ReleaseTimer(tc) + clientURLResponseChPool.Put(chv) + return statusCode, body, err } @@ -774,83 +977,81 @@ var clientURLResponseChPool sync.Pool func clientPostURL(dst []byte, url string, postArgs *Args, c clientDoer) (statusCode int, body []byte, err error) { req := AcquireRequest() - req.Header.SetMethodBytes(strPost) + req.Header.SetMethod(MethodPost) req.Header.SetContentTypeBytes(strPostArgsContentType) if postArgs != nil { - postArgs.WriteTo(req.BodyWriter()) + if _, err := postArgs.WriteTo(req.BodyWriter()); err != nil { + return 0, nil, err + } } - statusCode, body, err = doRequestFollowRedirects(req, dst, url, c) + statusCode, body, err = doRequestFollowRedirectsBuffer(req, dst, url, c) ReleaseRequest(req) return statusCode, body, err } var ( - errMissingLocation = errors.New("missing Location header for http redirect") - errTooManyRedirects = errors.New("too many redirects detected when doing the request") + // ErrMissingLocation is returned by clients when the Location header is missing on + // an HTTP response with a redirect status code. + ErrMissingLocation = errors.New("missing Location header for http redirect") + // ErrTooManyRedirects is returned by clients when the number of redirects followed + // exceed the max count. + ErrTooManyRedirects = errors.New("too many redirects detected when doing the request") + + // HostClients are only able to follow redirects to the same protocol. + ErrHostClientRedirectToDifferentScheme = errors.New("HostClient can't follow redirects to a different protocol, please use Client instead") ) -const maxRedirectsCount = 16 +const defaultMaxRedirectsCount = 16 -func doRequestFollowRedirects(req *Request, dst []byte, url string, c clientDoer) (statusCode int, body []byte, err error) { +func doRequestFollowRedirectsBuffer(req *Request, dst []byte, url string, c clientDoer) (statusCode int, body []byte, err error) { resp := AcquireResponse() bodyBuf := resp.bodyBuffer() resp.keepBodyBuffer = true oldBody := bodyBuf.B bodyBuf.B = dst - scheme := req.uri.Scheme() - req.schemaUpdate = false + statusCode, _, err = doRequestFollowRedirects(req, resp, url, defaultMaxRedirectsCount, c) + + body = bodyBuf.B + bodyBuf.B = oldBody + resp.keepBodyBuffer = false + ReleaseResponse(resp) + + return statusCode, body, err +} + +func doRequestFollowRedirects(req *Request, resp *Response, url string, maxRedirectsCount int, c clientDoer) (statusCode int, body []byte, err error) { redirectsCount := 0 - for { - // In case redirect to different scheme - if redirectsCount > 0 && !bytes.Equal(scheme, req.uri.Scheme()) { - if strings.HasPrefix(url, string(strHTTPS)) { - req.isTLS = true - req.uri.SetSchemeBytes(strHTTPS) - } else { - req.isTLS = false - req.uri.SetSchemeBytes(strHTTP) - } - scheme = req.uri.Scheme() - req.schemaUpdate = true - } - req.parsedURI = false - req.Header.host = req.Header.host[:0] + for { req.SetRequestURI(url) + if err := req.parseURI(); err != nil { + return 0, nil, err + } if err = c.Do(req, resp); err != nil { break } statusCode = resp.Header.StatusCode() - if statusCode != StatusMovedPermanently && - statusCode != StatusFound && - statusCode != StatusSeeOther && - statusCode != StatusTemporaryRedirect && - statusCode != StatusPermanentRedirect { + if !StatusCodeIsRedirect(statusCode) { break } redirectsCount++ if redirectsCount > maxRedirectsCount { - err = errTooManyRedirects + err = ErrTooManyRedirects break } location := resp.Header.peek(strLocation) if len(location) == 0 { - err = errMissingLocation + err = ErrMissingLocation break } url = getRedirectURL(url, location) } - body = bodyBuf.B - bodyBuf.B = oldBody - resp.keepBodyBuffer = false - ReleaseResponse(resp) - return statusCode, body, err } @@ -863,6 +1064,15 @@ func getRedirectURL(baseURL string, location []byte) string { return redirectURL } +// StatusCodeIsRedirect returns true if the status code indicates a redirect. +func StatusCodeIsRedirect(statusCode int) bool { + return statusCode == StatusMovedPermanently || + statusCode == StatusFound || + statusCode == StatusSeeOther || + statusCode == StatusTemporaryRedirect || + statusCode == StatusPermanentRedirect +} + var ( requestPool sync.Pool responsePool sync.Pool @@ -961,6 +1171,30 @@ func (c *HostClient) DoDeadline(req *Request, resp *Response, deadline time.Time return clientDoDeadline(req, resp, deadline, c) } +// DoRedirects performs the given http request and fills the given http response, +// following up to maxRedirectsCount redirects. When the redirect count exceeds +// maxRedirectsCount, ErrTooManyRedirects is returned. +// +// Request must contain at least non-zero RequestURI with full url (including +// scheme and host) or non-zero Host header + RequestURI. +// +// Client determines the server to be requested in the following order: +// +// - from RequestURI if it contains full url with scheme and host; +// - from Host header otherwise. +// +// Response is ignored if resp is nil. +// +// ErrNoFreeConns is returned if all DefaultMaxConnsPerHost connections +// to the requested host are busy. +// +// It is recommended obtaining req and resp via AcquireRequest +// and AcquireResponse in performance-critical code. +func (c *HostClient) DoRedirects(req *Request, resp *Response, maxRedirectsCount int) error { + _, _, err := doRequestFollowRedirects(req, resp, req.URI().String(), maxRedirectsCount, c) + return err +} + func clientDoTimeout(req *Request, resp *Response, timeout time.Duration, c clientDoer) error { deadline := time.Now().Add(timeout) return clientDoDeadline(req, resp, deadline, c) @@ -1000,9 +1234,10 @@ func clientDoDeadline(req *Request, resp *Response, deadline time.Time, c client // usually continue execution on the host. var mu sync.Mutex - var timedout bool + var timedout, responded bool go func() { + reqCopy.timeout = timeout errDo := c.Do(reqCopy, respCopy) mu.Lock() { @@ -1013,6 +1248,7 @@ func clientDoDeadline(req *Request, resp *Response, deadline time.Time, c client } swapRequestBody(reqCopy, req) ch <- errDo + responded = true } } mu.Unlock() @@ -1028,17 +1264,17 @@ func clientDoDeadline(req *Request, resp *Response, deadline time.Time, c client case <-tc.C: mu.Lock() { - timedout = true - err = ErrTimeout + if responded { + err = <-ch + } else { + timedout = true + err = ErrTimeout + } } mu.Unlock() } ReleaseTimer(tc) - select { - case <-ch: - default: - } errorChPool.Put(chv) return err @@ -1067,7 +1303,12 @@ func (c *HostClient) Do(req *Request, resp *Response) error { if maxAttempts <= 0 { maxAttempts = DefaultMaxIdemponentCallAttempts } + isRequestRetryable := isIdempotent + if c.RetryIf != nil { + isRequestRetryable = c.RetryIf + } attempts := 0 + hasBodyStream := req.IsBodyStream() atomic.AddInt32(&c.pendingRequests, 1) for { @@ -1076,7 +1317,10 @@ func (c *HostClient) Do(req *Request, resp *Response) error { break } - if !isIdempotent(req) { + if hasBodyStream { + break + } + if !isRequestRetryable(req) { // Retry non-idempotent requests if the server closes // the connection before sending the response. // @@ -1138,23 +1382,39 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error) panic("BUG: resp cannot be nil") } + // Secure header error logs configuration + resp.secureErrorLogMessage = c.SecureErrorLogMessage + resp.Header.secureErrorLogMessage = c.SecureErrorLogMessage + req.secureErrorLogMessage = c.SecureErrorLogMessage + req.Header.secureErrorLogMessage = c.SecureErrorLogMessage + + if c.IsTLS != req.URI().isHttps() { + return false, ErrHostClientRedirectToDifferentScheme + } + atomic.StoreUint32(&c.lastUseTime, uint32(time.Now().Unix()-startTimeUnix)) // Free up resources occupied by response before sending the request, // so the GC may reclaim these resources (e.g. response body). + + // backing up SkipBody in case it was set explicitly + customSkipBody := resp.SkipBody resp.Reset() + resp.SkipBody = customSkipBody - // If we detected a redirect to another schema - if req.schemaUpdate { - c.IsTLS = bytes.Equal(req.URI().Scheme(), strHTTPS) - c.Addr = addMissingPort(string(req.Host()), c.IsTLS) - c.addrIdx = 0 - c.addrs = nil - req.schemaUpdate = false - req.SetConnectionClose() + req.URI().DisablePathNormalizing = c.DisablePathNormalizing + + userAgentOld := req.Header.UserAgent() + if len(userAgentOld) == 0 { + req.Header.userAgent = append(req.Header.userAgent[:0], c.getClientName()...) + } + + if c.Transport != nil { + err := c.Transport(req, resp) + return err == nil, err } - cc, err := c.acquireConn() + cc, err := c.acquireConn(req.timeout, req.ConnectionClose()) if err != nil { return false, err } @@ -1178,10 +1438,6 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error) resetConnection = true } - userAgentOld := req.Header.UserAgent() - if len(userAgentOld) == 0 { - req.Header.userAgent = c.getClientName() - } bw := c.acquireWriter(conn) err = req.Write(bw) @@ -1192,12 +1448,12 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error) if err == nil { err = bw.Flush() } - if err != nil { - c.releaseWriter(bw) + c.releaseWriter(bw) + isConnRST := isConnectionReset(err) + if err != nil && !isConnRST { c.closeConn(cc) return true, err } - c.releaseWriter(bw) if c.ReadTimeout > 0 { // Set Deadline every time, since golang has fixed the performance issue @@ -1209,7 +1465,7 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error) } } - if !req.Header.IsGet() && req.Header.IsHead() { + if customSkipBody || req.Header.IsHead() { resp.SkipBody = true } if c.DisableHeaderNamesNormalizing { @@ -1217,22 +1473,22 @@ func (c *HostClient) doNonNilReqResp(req *Request, resp *Response) (bool, error) } br := c.acquireReader(conn) - if err = resp.ReadLimitBody(br, c.MaxResponseBodySize); err != nil { - c.releaseReader(br) + err = resp.ReadLimitBody(br, c.MaxResponseBodySize) + c.releaseReader(br) + if err != nil { c.closeConn(cc) // Don't retry in case of ErrBodyTooLarge since we will just get the same again. retry := err != ErrBodyTooLarge return retry, err } - c.releaseReader(br) - if resetConnection || req.ConnectionClose() || resp.ConnectionClose() { + if resetConnection || req.ConnectionClose() || resp.ConnectionClose() || isConnRST { c.closeConn(cc) } else { c.releaseConn(cc) } - return false, err + return false, nil } var ( @@ -1243,9 +1499,6 @@ var ( // see this error. ErrNoFreeConns = errors.New("no free connections available to host") - // ErrTimeout is returned from timed out calls. - ErrTimeout = errors.New("timeout") - // ErrConnectionClosed may be returned from client methods if the server // closes connection before returning the first response byte. // @@ -1255,16 +1508,37 @@ var ( // to broken server. ErrConnectionClosed = errors.New("the server closed connection before returning the first response byte. " + "Make sure the server returns 'Connection: close' response header before closing the connection") + + // ErrConnPoolStrategyNotImpl is returned when HostClient.ConnPoolStrategy is not implement yet. + // If you see this error, then you need to check your HostClient configuration. + ErrConnPoolStrategyNotImpl = errors.New("connection pool strategy is not implement") ) +type timeoutError struct{} + +func (e *timeoutError) Error() string { + return "timeout" +} + +// Only implement the Timeout() function of the net.Error interface. +// This allows for checks like: +// +// if x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() { +func (e *timeoutError) Timeout() bool { + return true +} + +// ErrTimeout is returned from timed out calls. +var ErrTimeout = &timeoutError{} + +// SetMaxConns sets up the maximum number of connections which may be established to all hosts listed in Addr. func (c *HostClient) SetMaxConns(newMaxConns int) { c.connsLock.Lock() c.MaxConns = newMaxConns c.connsLock.Unlock() } -func (c *HostClient) acquireConn() (*clientConn, error) { - var cc *clientConn +func (c *HostClient) acquireConn(reqTimeout time.Duration, connectionClose bool) (cc *clientConn, err error) { createConn := false startCleaner := false @@ -1279,16 +1553,26 @@ func (c *HostClient) acquireConn() (*clientConn, error) { if c.connsCount < maxConns { c.connsCount++ createConn = true - if !c.connsCleanerRun { + if !c.connsCleanerRun && !connectionClose { startCleaner = true c.connsCleanerRun = true } } } else { - n-- - cc = c.conns[n] - c.conns[n] = nil - c.conns = c.conns[:n] + switch c.ConnPoolStrategy { + case LIFO: + n-- + cc = c.conns[n] + c.conns[n] = nil + c.conns = c.conns[:n] + case FIFO: + cc = c.conns[0] + copy(c.conns, c.conns[1:]) + c.conns[n-1] = nil + c.conns = c.conns[:n-1] + default: + return nil, ErrConnPoolStrategyNotImpl + } } c.connsLock.Unlock() @@ -1296,7 +1580,47 @@ func (c *HostClient) acquireConn() (*clientConn, error) { return cc, nil } if !createConn { - return nil, ErrNoFreeConns + if c.MaxConnWaitTimeout <= 0 { + return nil, ErrNoFreeConns + } + + // reqTimeout c.MaxConnWaitTimeout wait duration + // d1 d2 min(d1, d2) + // 0(not set) d2 d2 + // d1 0(don't wait) 0(don't wait) + // 0(not set) d2 d2 + timeout := c.MaxConnWaitTimeout + timeoutOverridden := false + // reqTimeout == 0 means not set + if reqTimeout > 0 && reqTimeout < timeout { + timeout = reqTimeout + timeoutOverridden = true + } + + // wait for a free connection + tc := AcquireTimer(timeout) + defer ReleaseTimer(tc) + + w := &wantConn{ + ready: make(chan struct{}, 1), + } + defer func() { + if err != nil { + w.cancel(c, err) + } + }() + + c.queueForIdle(w) + + select { + case <-w.ready: + return w.conn, w.err + case <-tc.C: + if timeoutOverridden { + return nil, ErrTimeout + } + return nil, ErrNoFreeConns + } } if startCleaner { @@ -1313,6 +1637,50 @@ func (c *HostClient) acquireConn() (*clientConn, error) { return cc, nil } +func (c *HostClient) queueForIdle(w *wantConn) { + c.connsLock.Lock() + defer c.connsLock.Unlock() + if c.connsWait == nil { + c.connsWait = &wantConnQueue{} + } + c.connsWait.clearFront() + c.connsWait.pushBack(w) +} + +func (c *HostClient) dialConnFor(w *wantConn) { + conn, err := c.dialHostHard() + if err != nil { + w.tryDeliver(nil, err) + c.decConnsCount() + return + } + + cc := acquireClientConn(conn) + delivered := w.tryDeliver(cc, nil) + if !delivered { + // not delivered, return idle connection + c.releaseConn(cc) + } +} + +// CloseIdleConnections closes any connections which were previously +// connected from previous requests but are now sitting idle in a +// "keep-alive" state. It does not interrupt any connections currently +// in use. +func (c *HostClient) CloseIdleConnections() { + c.connsLock.Lock() + scratch := append([]*clientConn{}, c.conns...) + for i := range c.conns { + c.conns[i] = nil + } + c.conns = c.conns[:0] + c.connsLock.Unlock() + + for _, cc := range scratch { + c.closeConn(cc) + } +} + func (c *HostClient) connsCleaner() { var ( scratch []*clientConn @@ -1376,9 +1744,37 @@ func (c *HostClient) closeConn(cc *clientConn) { } func (c *HostClient) decConnsCount() { + if c.MaxConnWaitTimeout <= 0 { + c.connsLock.Lock() + c.connsCount-- + c.connsLock.Unlock() + return + } + c.connsLock.Lock() - c.connsCount-- - c.connsLock.Unlock() + defer c.connsLock.Unlock() + dialed := false + if q := c.connsWait; q != nil && q.len() > 0 { + for q.len() > 0 { + w := q.popFront() + if w.waiting() { + go c.dialConnFor(w) + dialed = true + break + } + } + } + if !dialed { + c.connsCount-- + } +} + +// ConnsCount returns connection count of HostClient +func (c *HostClient) ConnsCount() int { + c.connsLock.Lock() + defer c.connsLock.Unlock() + + return c.connsCount } func acquireClientConn(conn net.Conn) *clientConn { @@ -1402,79 +1798,106 @@ var clientConnPool sync.Pool func (c *HostClient) releaseConn(cc *clientConn) { cc.lastUseTime = time.Now() + if c.MaxConnWaitTimeout <= 0 { + c.connsLock.Lock() + c.conns = append(c.conns, cc) + c.connsLock.Unlock() + return + } + + // try to deliver an idle connection to a *wantConn c.connsLock.Lock() - c.conns = append(c.conns, cc) - c.connsLock.Unlock() + defer c.connsLock.Unlock() + delivered := false + if q := c.connsWait; q != nil && q.len() > 0 { + for q.len() > 0 { + w := q.popFront() + if w.waiting() { + delivered = w.tryDeliver(cc, nil) + break + } + } + } + if !delivered { + c.conns = append(c.conns, cc) + } } func (c *HostClient) acquireWriter(conn net.Conn) *bufio.Writer { - v := c.writerPool.Get() - if v == nil { - n := c.WriteBufferSize - if n <= 0 { - n = defaultWriteBufferSize + var v interface{} + if c.clientWriterPool != nil { + v = c.clientWriterPool.Get() + if v == nil { + n := c.WriteBufferSize + if n <= 0 { + n = defaultWriteBufferSize + } + return bufio.NewWriterSize(conn, n) + } + } else { + v = c.writerPool.Get() + if v == nil { + n := c.WriteBufferSize + if n <= 0 { + n = defaultWriteBufferSize + } + return bufio.NewWriterSize(conn, n) } - return bufio.NewWriterSize(conn, n) } + bw := v.(*bufio.Writer) bw.Reset(conn) return bw } func (c *HostClient) releaseWriter(bw *bufio.Writer) { - c.writerPool.Put(bw) + if c.clientWriterPool != nil { + c.clientWriterPool.Put(bw) + } else { + c.writerPool.Put(bw) + } } func (c *HostClient) acquireReader(conn net.Conn) *bufio.Reader { - v := c.readerPool.Get() - if v == nil { - n := c.ReadBufferSize - if n <= 0 { - n = defaultReadBufferSize + var v interface{} + if c.clientReaderPool != nil { + v = c.clientReaderPool.Get() + if v == nil { + n := c.ReadBufferSize + if n <= 0 { + n = defaultReadBufferSize + } + return bufio.NewReaderSize(conn, n) + } + } else { + v = c.readerPool.Get() + if v == nil { + n := c.ReadBufferSize + if n <= 0 { + n = defaultReadBufferSize + } + return bufio.NewReaderSize(conn, n) } - return bufio.NewReaderSize(conn, n) } + br := v.(*bufio.Reader) br.Reset(conn) return br } func (c *HostClient) releaseReader(br *bufio.Reader) { - c.readerPool.Put(br) + if c.clientReaderPool != nil { + c.clientReaderPool.Put(br) + } else { + c.readerPool.Put(br) + } } func newClientTLSConfig(c *tls.Config, addr string) *tls.Config { if c == nil { c = &tls.Config{} } else { - // TODO: substitute this with c.Clone() after go1.8 becomes mainstream :) - c = &tls.Config{ - Rand: c.Rand, - Time: c.Time, - Certificates: c.Certificates, - NameToCertificate: c.NameToCertificate, - GetCertificate: c.GetCertificate, - RootCAs: c.RootCAs, - NextProtos: c.NextProtos, - ServerName: c.ServerName, - - // Do not copy ClientAuth, since it is server-related stuff - // Do not copy ClientCAs, since it is server-related stuff - - InsecureSkipVerify: c.InsecureSkipVerify, - CipherSuites: c.CipherSuites, - - // Do not copy PreferServerCipherSuites - this is server stuff - - SessionTicketsDisabled: c.SessionTicketsDisabled, - - // Do not copy SessionTicketKey - this is server stuff - - ClientSessionCache: c.ClientSessionCache, - MinVersion: c.MinVersion, - MaxVersion: c.MaxVersion, - CurvePreferences: c.CurvePreferences, - } + c = c.Clone() } if c.ClientSessionCache == nil { @@ -1537,7 +1960,7 @@ func (c *HostClient) dialHostHard() (conn net.Conn, err error) { for n > 0 { addr := c.nextAddr() tlsConfig := c.cachedTLSConfig(addr) - conn, err = dialAddr(addr, c.Dial, c.DialDualStack, c.IsTLS, tlsConfig) + conn, err = dialAddr(addr, c.Dial, c.DialDualStack, c.IsTLS, tlsConfig, c.WriteTimeout) if err == nil { return conn, nil } @@ -1568,7 +1991,36 @@ func (c *HostClient) cachedTLSConfig(addr string) *tls.Config { return cfg } -func dialAddr(addr string, dial DialFunc, dialDualStack, isTLS bool, tlsConfig *tls.Config) (net.Conn, error) { +// ErrTLSHandshakeTimeout indicates there is a timeout from tls handshake. +var ErrTLSHandshakeTimeout = errors.New("tls handshake timed out") + +func tlsClientHandshake(rawConn net.Conn, tlsConfig *tls.Config, deadline time.Time) (_ net.Conn, retErr error) { + defer func() { + if retErr != nil { + rawConn.Close() + } + }() + conn := tls.Client(rawConn, tlsConfig) + err := conn.SetDeadline(deadline) + if err != nil { + return nil, err + } + err = conn.Handshake() + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + return nil, ErrTLSHandshakeTimeout + } + if err != nil { + return nil, err + } + err = conn.SetDeadline(time.Time{}) + if err != nil { + return nil, err + } + return conn, nil +} + +func dialAddr(addr string, dial DialFunc, dialDualStack, isTLS bool, tlsConfig *tls.Config, timeout time.Duration) (net.Conn, error) { + deadline := time.Now().Add(timeout) if dial == nil { if dialDualStack { dial = DialDualStack @@ -1584,8 +2036,12 @@ func dialAddr(addr string, dial DialFunc, dialDualStack, isTLS bool, tlsConfig * if conn == nil { panic("BUG: DialFunc returned (nil, nil)") } - if isTLS { - conn = tls.Client(conn, tlsConfig) + _, isTLSAlready := conn.(*tls.Conn) + if isTLS && !isTLSAlready { + if timeout == 0 { + return tls.Client(conn, tlsConfig), nil + } + return tlsClientHandshake(conn, tlsConfig, deadline) } return conn, nil } @@ -1614,7 +2070,136 @@ func addMissingPort(addr string, isTLS bool) string { if isTLS { port = 443 } - return fmt.Sprintf("%s:%d", addr, port) + return net.JoinHostPort(addr, strconv.Itoa(port)) +} + +// A wantConn records state about a wanted connection +// (that is, an active call to getConn). +// The conn may be gotten by dialing or by finding an idle connection, +// or a cancellation may make the conn no longer wanted. +// These three options are racing against each other and use +// wantConn to coordinate and agree about the winning outcome. +// +// inspired by net/http/transport.go +type wantConn struct { + ready chan struct{} + mu sync.Mutex // protects conn, err, close(ready) + conn *clientConn + err error +} + +// waiting reports whether w is still waiting for an answer (connection or error). +func (w *wantConn) waiting() bool { + select { + case <-w.ready: + return false + default: + return true + } +} + +// tryDeliver attempts to deliver conn, err to w and reports whether it succeeded. +func (w *wantConn) tryDeliver(conn *clientConn, err error) bool { + w.mu.Lock() + defer w.mu.Unlock() + + if w.conn != nil || w.err != nil { + return false + } + w.conn = conn + w.err = err + if w.conn == nil && w.err == nil { + panic("fasthttp: internal error: misuse of tryDeliver") + } + close(w.ready) + return true +} + +// cancel marks w as no longer wanting a result (for example, due to cancellation). +// If a connection has been delivered already, cancel returns it with c.releaseConn. +func (w *wantConn) cancel(c *HostClient, err error) { + w.mu.Lock() + if w.conn == nil && w.err == nil { + close(w.ready) // catch misbehavior in future delivery + } + + conn := w.conn + w.conn = nil + w.err = err + w.mu.Unlock() + + if conn != nil { + c.releaseConn(conn) + } +} + +// A wantConnQueue is a queue of wantConns. +// +// inspired by net/http/transport.go +type wantConnQueue struct { + // This is a queue, not a deque. + // It is split into two stages - head[headPos:] and tail. + // popFront is trivial (headPos++) on the first stage, and + // pushBack is trivial (append) on the second stage. + // If the first stage is empty, popFront can swap the + // first and second stages to remedy the situation. + // + // This two-stage split is analogous to the use of two lists + // in Okasaki's purely functional queue but without the + // overhead of reversing the list when swapping stages. + head []*wantConn + headPos int + tail []*wantConn +} + +// len returns the number of items in the queue. +func (q *wantConnQueue) len() int { + return len(q.head) - q.headPos + len(q.tail) +} + +// pushBack adds w to the back of the queue. +func (q *wantConnQueue) pushBack(w *wantConn) { + q.tail = append(q.tail, w) +} + +// popFront removes and returns the wantConn at the front of the queue. +func (q *wantConnQueue) popFront() *wantConn { + if q.headPos >= len(q.head) { + if len(q.tail) == 0 { + return nil + } + // Pick up tail as new head, clear tail. + q.head, q.headPos, q.tail = q.tail, 0, q.head[:0] + } + + w := q.head[q.headPos] + q.head[q.headPos] = nil + q.headPos++ + return w +} + +// peekFront returns the wantConn at the front of the queue without removing it. +func (q *wantConnQueue) peekFront() *wantConn { + if q.headPos < len(q.head) { + return q.head[q.headPos] + } + if len(q.tail) > 0 { + return q.tail[0] + } + return nil +} + +// cleanFront pops any wantConns that are no longer waiting from the head of the +// queue, reporting whether any were popped. +func (q *wantConnQueue) clearFront() (cleaned bool) { + for { + w := q.peekFront() + if w == nil || w.waiting() { + return cleaned + } + q.popFront() + cleaned = true + } } // PipelineClient pipelines requests over a limited set of concurrent @@ -1630,11 +2215,18 @@ func addMissingPort(addr string, isTLS bool) string { // It is safe calling PipelineClient methods from concurrently running // goroutines. type PipelineClient struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Address of the host to connect to. Addr string + // PipelineClient name. Used in User-Agent request header. + Name string + + // NoDefaultUserAgentHeader when set to true, causes the default + // User-Agent header to be excluded from the Request. + NoDefaultUserAgentHeader bool + // The maximum number of concurrent connections to the Addr. // // A single connection is used by default. @@ -1667,6 +2259,33 @@ type PipelineClient struct { // since unfortunately ipv6 remains broken in many networks worldwide :) DialDualStack bool + // Response header names are passed as-is without normalization + // if this option is set. + // + // Disabled header names' normalization may be useful only for proxying + // responses to other clients expecting case-sensitive + // header names. See https://github.com/valyala/fasthttp/issues/57 + // for details. + // + // By default request and response header names are normalized, i.e. + // The first letter and the first letters following dashes + // are uppercased, while all the other letters are lowercased. + // Examples: + // + // * HOST -> Host + // * content-type -> Content-Type + // * cONTENT-lenGTH -> Content-Length + DisableHeaderNamesNormalizing bool + + // Path values are sent as-is without normalization + // + // Disabled path normalization may be useful for proxying incoming requests + // to servers that are expecting paths to be forwarded as-is. + // + // By default path values are normalized, i.e. + // extra slashes are removed, special characters are encoded. + DisablePathNormalizing bool + // Whether to use TLS (aka SSL or HTTPS) for host connections. IsTLS bool @@ -1710,21 +2329,25 @@ type PipelineClient struct { } type pipelineConnClient struct { - noCopy noCopy - - Addr string - MaxPendingRequests int - MaxBatchDelay time.Duration - Dial DialFunc - DialDualStack bool - IsTLS bool - TLSConfig *tls.Config - MaxIdleConnDuration time.Duration - ReadBufferSize int - WriteBufferSize int - ReadTimeout time.Duration - WriteTimeout time.Duration - Logger Logger + noCopy noCopy //nolint:unused,structcheck + + Addr string + Name string + NoDefaultUserAgentHeader bool + MaxPendingRequests int + MaxBatchDelay time.Duration + Dial DialFunc + DialDualStack bool + DisableHeaderNamesNormalizing bool + DisablePathNormalizing bool + IsTLS bool + TLSConfig *tls.Config + MaxIdleConnDuration time.Duration + ReadBufferSize int + WriteBufferSize int + ReadTimeout time.Duration + WriteTimeout time.Duration + Logger Logger workPool sync.Pool @@ -1734,6 +2357,7 @@ type pipelineConnClient struct { tlsConfigLock sync.Mutex tlsConfig *tls.Config + clientName atomic.Value } type pipelineWork struct { @@ -1798,7 +2422,17 @@ func (c *pipelineConnClient) DoDeadline(req *Request, resp *Response, deadline t return ErrTimeout } + if c.DisablePathNormalizing { + req.URI().DisablePathNormalizing = true + } + + userAgentOld := req.Header.UserAgent() + if len(userAgentOld) == 0 { + req.Header.userAgent = append(req.Header.userAgent[:0], c.getClientName()...) + } + w := acquirePipelineWork(&c.workPool, timeout) + w.respCopy.Header.disableNormalizing = c.DisableHeaderNamesNormalizing w.req = &w.reqCopy w.resp = &w.respCopy @@ -1855,9 +2489,19 @@ func (c *PipelineClient) Do(req *Request, resp *Response) error { func (c *pipelineConnClient) Do(req *Request, resp *Response) error { c.init() + if c.DisablePathNormalizing { + req.URI().DisablePathNormalizing = true + } + + userAgentOld := req.Header.UserAgent() + if len(userAgentOld) == 0 { + req.Header.userAgent = append(req.Header.userAgent[:0], c.getClientName()...) + } + w := acquirePipelineWork(&c.workPool, 0) w.req = req if resp != nil { + resp.Header.disableNormalizing = c.DisableHeaderNamesNormalizing w.resp = resp } else { w.resp = &w.respCopy @@ -1933,19 +2577,23 @@ func (c *PipelineClient) getConnClientUnlocked() *pipelineConnClient { func (c *PipelineClient) newConnClient() *pipelineConnClient { cc := &pipelineConnClient{ - Addr: c.Addr, - MaxPendingRequests: c.MaxPendingRequests, - MaxBatchDelay: c.MaxBatchDelay, - Dial: c.Dial, - DialDualStack: c.DialDualStack, - IsTLS: c.IsTLS, - TLSConfig: c.TLSConfig, - MaxIdleConnDuration: c.MaxIdleConnDuration, - ReadBufferSize: c.ReadBufferSize, - WriteBufferSize: c.WriteBufferSize, - ReadTimeout: c.ReadTimeout, - WriteTimeout: c.WriteTimeout, - Logger: c.Logger, + Addr: c.Addr, + Name: c.Name, + NoDefaultUserAgentHeader: c.NoDefaultUserAgentHeader, + MaxPendingRequests: c.MaxPendingRequests, + MaxBatchDelay: c.MaxBatchDelay, + Dial: c.Dial, + DialDualStack: c.DialDualStack, + DisableHeaderNamesNormalizing: c.DisableHeaderNamesNormalizing, + DisablePathNormalizing: c.DisablePathNormalizing, + IsTLS: c.IsTLS, + TLSConfig: c.TLSConfig, + MaxIdleConnDuration: c.MaxIdleConnDuration, + ReadBufferSize: c.ReadBufferSize, + WriteBufferSize: c.WriteBufferSize, + ReadTimeout: c.ReadTimeout, + WriteTimeout: c.WriteTimeout, + Logger: c.Logger, } c.connClients = append(c.connClients, cc) return cc @@ -1971,20 +2619,28 @@ func (c *pipelineConnClient) init() { c.chW = make(chan *pipelineWork, maxPendingRequests) } go func() { - if err := c.worker(); err != nil { - c.logger().Printf("error in PipelineClient(%q): %s", c.Addr, err) - if netErr, ok := err.(net.Error); ok && netErr.Temporary() { - // Throttle client reconnections on temporary errors - time.Sleep(time.Second) + // Keep restarting the worker if it fails (connection errors for example). + for { + if err := c.worker(); err != nil { + c.logger().Printf("error in PipelineClient(%q): %v", c.Addr, err) + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + // Throttle client reconnections on timeout errors + time.Sleep(time.Second) + } + } else { + c.chLock.Lock() + stop := len(c.chR) == 0 && len(c.chW) == 0 + if !stop { + c.chR = nil + c.chW = nil + } + c.chLock.Unlock() + + if stop { + break + } } } - - c.chLock.Lock() - // Do not reset c.chW to nil, since it may contain - // pending requests, which could be served on the next - // connection to the host. - c.chR = nil - c.chLock.Unlock() }() } c.chLock.Unlock() @@ -1992,7 +2648,7 @@ func (c *pipelineConnClient) init() { func (c *pipelineConnClient) worker() error { tlsConfig := c.cachedTLSConfig() - conn, err := dialAddr(c.Addr, c.Dial, c.DialDualStack, c.IsTLS, tlsConfig) + conn, err := dialAddr(c.Addr, c.Dial, c.DialDualStack, c.IsTLS, tlsConfig, c.WriteTimeout) if err != nil { return err } @@ -2235,16 +2891,32 @@ func (c *pipelineConnClient) PendingRequests() int { return n } +func (c *pipelineConnClient) getClientName() []byte { + v := c.clientName.Load() + var clientName []byte + if v == nil { + clientName = []byte(c.Name) + if len(clientName) == 0 && !c.NoDefaultUserAgentHeader { + clientName = defaultUserAgent + } + c.clientName.Store(clientName) + } else { + clientName = v.([]byte) + } + return clientName +} + var errPipelineConnStopped = errors.New("pipeline connection has been stopped") -func acquirePipelineWork(pool *sync.Pool, timeout time.Duration) *pipelineWork { +func acquirePipelineWork(pool *sync.Pool, timeout time.Duration) (w *pipelineWork) { v := pool.Get() - if v == nil { - v = &pipelineWork{ + if v != nil { + w = v.(*pipelineWork) + } else { + w = &pipelineWork{ done: make(chan struct{}, 1), } } - w := v.(*pipelineWork) if timeout > 0 { if w.t == nil { w.t = time.NewTimer(timeout) diff --git a/vendor/github.com/valyala/fasthttp/compress.go b/vendor/github.com/valyala/fasthttp/compress.go index 73a40d3bd2..803d7cc513 100644 --- a/vendor/github.com/valyala/fasthttp/compress.go +++ b/vendor/github.com/valyala/fasthttp/compress.go @@ -101,7 +101,7 @@ func acquireRealGzipWriter(w io.Writer, level int) *gzip.Writer { if v == nil { zw, err := gzip.NewWriterLevel(w, level) if err != nil { - panic(fmt.Sprintf("BUG: unexpected error from gzip.NewWriterLevel(%d): %s", level, err)) + panic(fmt.Sprintf("BUG: unexpected error from gzip.NewWriterLevel(%d): %v", level, err)) } return zw } @@ -134,7 +134,7 @@ var ( // * CompressHuffmanOnly func AppendGzipBytesLevel(dst, src []byte, level int) []byte { w := &byteSliceWriter{dst} - WriteGzipLevel(w, src, level) + WriteGzipLevel(w, src, level) //nolint:errcheck return w.b } @@ -177,7 +177,7 @@ func nonblockingWriteGzip(ctxv interface{}) { _, err := zw.Write(ctx.p) if err != nil { - panic(fmt.Sprintf("BUG: gzip.Writer.Write for len(p)=%d returned unexpected error: %s", len(ctx.p), err)) + panic(fmt.Sprintf("BUG: gzip.Writer.Write for len(p)=%d returned unexpected error: %v", len(ctx.p), err)) } releaseRealGzipWriter(zw, ctx.level) @@ -230,7 +230,7 @@ func AppendGunzipBytes(dst, src []byte) ([]byte, error) { // * CompressHuffmanOnly func AppendDeflateBytesLevel(dst, src []byte, level int) []byte { w := &byteSliceWriter{dst} - WriteDeflateLevel(w, src, level) + WriteDeflateLevel(w, src, level) //nolint:errcheck return w.b } @@ -273,7 +273,7 @@ func nonblockingWriteDeflate(ctxv interface{}) { _, err := zw.Write(ctx.p) if err != nil { - panic(fmt.Sprintf("BUG: zlib.Writer.Write for len(p)=%d returned unexpected error: %s", len(ctx.p), err)) + panic(fmt.Sprintf("BUG: zlib.Writer.Write for len(p)=%d returned unexpected error: %v", len(ctx.p), err)) } releaseRealDeflateWriter(zw, ctx.level) @@ -342,6 +342,15 @@ func (r *byteSliceReader) Read(p []byte) (int, error) { return n, nil } +func (r *byteSliceReader) ReadByte() (byte, error) { + if len(r.b) == 0 { + return 0, io.EOF + } + n := r.b[0] + r.b = r.b[1:] + return n, nil +} + func acquireStacklessDeflateWriter(w io.Writer, level int) stackless.Writer { nLevel := normalizeCompressLevel(level) p := stacklessDeflateWriterPoolMap[nLevel] @@ -370,7 +379,7 @@ func acquireRealDeflateWriter(w io.Writer, level int) *zlib.Writer { if v == nil { zw, err := zlib.NewWriterLevel(w, level) if err != nil { - panic(fmt.Sprintf("BUG: unexpected error from zlib.NewWriterLevel(%d): %s", level, err)) + panic(fmt.Sprintf("BUG: unexpected error from zlib.NewWriterLevel(%d): %v", level, err)) } return zw } @@ -415,7 +424,7 @@ func isFileCompressible(f *os.File, minCompressRatio float64) bool { } _, err := copyZeroAlloc(zw, lr) releaseStacklessGzipWriter(zw, CompressDefaultCompression) - f.Seek(0, 0) + f.Seek(0, 0) //nolint:errcheck if err != nil { return false } diff --git a/vendor/github.com/valyala/fasthttp/cookie.go b/vendor/github.com/valyala/fasthttp/cookie.go index fb6618a958..69f732853f 100644 --- a/vendor/github.com/valyala/fasthttp/cookie.go +++ b/vendor/github.com/valyala/fasthttp/cookie.go @@ -65,7 +65,7 @@ var cookiePool = &sync.Pool{ // // Cookie instance MUST NOT be used from concurrently running goroutines. type Cookie struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck key []byte value []byte @@ -85,12 +85,12 @@ type Cookie struct { // CopyTo copies src cookie to c. func (c *Cookie) CopyTo(src *Cookie) { c.Reset() - c.key = append(c.key[:0], src.key...) - c.value = append(c.value[:0], src.value...) + c.key = append(c.key, src.key...) + c.value = append(c.value, src.value...) c.expire = src.expire c.maxAge = src.maxAge - c.domain = append(c.domain[:0], src.domain...) - c.path = append(c.path[:0], src.path...) + c.domain = append(c.domain, src.domain...) + c.path = append(c.path, src.path...) c.httpOnly = src.httpOnly c.secure = src.secure c.sameSite = src.sameSite @@ -149,7 +149,8 @@ func (c *Cookie) SetPathBytes(path []byte) { // Domain returns cookie domain. // -// The returned domain is valid until the next Cookie modification method call. +// The returned value is valid until the Cookie reused or released (ReleaseCookie). +// Do not store references to the returned value. Make copies instead. func (c *Cookie) Domain() []byte { return c.domain } @@ -201,7 +202,8 @@ func (c *Cookie) SetExpire(expire time.Time) { // Value returns cookie value. // -// The returned value is valid until the next Cookie modification method call. +// The returned value is valid until the Cookie reused or released (ReleaseCookie). +// Do not store references to the returned value. Make copies instead. func (c *Cookie) Value() []byte { return c.value } @@ -218,7 +220,8 @@ func (c *Cookie) SetValueBytes(value []byte) { // Key returns cookie name. // -// The returned value is valid until the next Cookie modification method call. +// The returned value is valid until the Cookie reused or released (ReleaseCookie). +// Do not store references to the returned value. Make copies instead. func (c *Cookie) Key() []byte { return c.key } @@ -306,7 +309,8 @@ func (c *Cookie) AppendBytes(dst []byte) []byte { // Cookie returns cookie representation. // -// The returned value is valid until the next call to Cookie methods. +// The returned value is valid until the Cookie reused or released (ReleaseCookie). +// Do not store references to the returned value. Make copies instead. func (c *Cookie) Cookie() []byte { c.buf = c.AppendBytes(c.buf[:0]) return c.buf @@ -345,8 +349,8 @@ func (c *Cookie) ParseBytes(src []byte) error { return errNoCookies } - c.key = append(c.key[:0], kv.key...) - c.value = append(c.value[:0], kv.value...) + c.key = append(c.key, kv.key...) + c.value = append(c.value, kv.value...) for s.next(kv) { if len(kv.key) != 0 { @@ -378,29 +382,31 @@ func (c *Cookie) ParseBytes(src []byte) error { case 'd': // "domain" if caseInsensitiveCompare(strCookieDomain, kv.key) { - c.domain = append(c.domain[:0], kv.value...) + c.domain = append(c.domain, kv.value...) } case 'p': // "path" if caseInsensitiveCompare(strCookiePath, kv.key) { - c.path = append(c.path[:0], kv.value...) + c.path = append(c.path, kv.value...) } case 's': // "samesite" if caseInsensitiveCompare(strCookieSameSite, kv.key) { - // Case insensitive switch on first char - switch kv.value[0] | 0x20 { - case 'l': // "lax" - if caseInsensitiveCompare(strCookieSameSiteLax, kv.value) { - c.sameSite = CookieSameSiteLaxMode - } - case 's': // "strict" - if caseInsensitiveCompare(strCookieSameSiteStrict, kv.value) { - c.sameSite = CookieSameSiteStrictMode - } - case 'n': // "none" - if caseInsensitiveCompare(strCookieSameSiteNone, kv.value) { - c.sameSite = CookieSameSiteNoneMode + if len(kv.value) > 0 { + // Case insensitive switch on first char + switch kv.value[0] | 0x20 { + case 'l': // "lax" + if caseInsensitiveCompare(strCookieSameSiteLax, kv.value) { + c.sameSite = CookieSameSiteLaxMode + } + case 's': // "strict" + if caseInsensitiveCompare(strCookieSameSiteStrict, kv.value) { + c.sameSite = CookieSameSiteStrictMode + } + case 'n': // "none" + if caseInsensitiveCompare(strCookieSameSiteNone, kv.value) { + c.sameSite = CookieSameSiteNoneMode + } } } } diff --git a/vendor/github.com/valyala/fasthttp/fasthttputil/inmemory_listener.go b/vendor/github.com/valyala/fasthttp/fasthttputil/inmemory_listener.go index 1b1a5f3666..87f8b62746 100644 --- a/vendor/github.com/valyala/fasthttp/fasthttputil/inmemory_listener.go +++ b/vendor/github.com/valyala/fasthttp/fasthttputil/inmemory_listener.go @@ -1,11 +1,14 @@ package fasthttputil import ( - "fmt" + "errors" "net" "sync" ) +// ErrInmemoryListenerClosed indicates that the InmemoryListener is already closed. +var ErrInmemoryListenerClosed = errors.New("InmemoryListener is already closed: use of closed network connection") + // InmemoryListener provides in-memory dialer<->net.Listener implementation. // // It may be used either for fast in-process client<->server communications @@ -36,7 +39,7 @@ func NewInmemoryListener() *InmemoryListener { func (ln *InmemoryListener) Accept() (net.Conn, error) { c, ok := <-ln.conns if !ok { - return nil, fmt.Errorf("InmemoryListener is already closed: use of closed network connection") + return nil, ErrInmemoryListenerClosed } close(c.accepted) return c.conn, nil @@ -51,7 +54,7 @@ func (ln *InmemoryListener) Close() error { close(ln.conns) ln.closed = true } else { - err = fmt.Errorf("InmemoryListener is already closed") + err = ErrInmemoryListenerClosed } ln.lock.Unlock() return err @@ -81,14 +84,14 @@ func (ln *InmemoryListener) Dial() (net.Conn, error) { // Wait until the connection has been accepted. <-accepted } else { - sConn.Close() - cConn.Close() + sConn.Close() //nolint:errcheck + cConn.Close() //nolint:errcheck cConn = nil } ln.lock.Unlock() if cConn == nil { - return nil, fmt.Errorf("InmemoryListener is already closed") + return nil, ErrInmemoryListenerClosed } return cConn, nil } diff --git a/vendor/github.com/valyala/fasthttp/fasthttputil/pipeconns.go b/vendor/github.com/valyala/fasthttp/fasthttputil/pipeconns.go index aa92b6ff8d..c992da30c6 100644 --- a/vendor/github.com/valyala/fasthttp/fasthttputil/pipeconns.go +++ b/vendor/github.com/valyala/fasthttp/fasthttputil/pipeconns.go @@ -9,6 +9,8 @@ import ( ) // NewPipeConns returns new bi-directional connection pipe. +// +// PipeConns is NOT safe for concurrent use by multiple goroutines! func NewPipeConns() *PipeConns { ch1 := make(chan *byteBuffer, 4) ch2 := make(chan *byteBuffer, 4) @@ -38,6 +40,7 @@ func NewPipeConns() *PipeConns { // calling Read in order to unblock each Write call. // * It supports read and write deadlines. // +// PipeConns is NOT safe for concurrent use by multiple goroutines! type PipeConns struct { c1 pipeConn c2 pipeConn @@ -87,6 +90,8 @@ type pipeConn struct { readDeadlineCh <-chan time.Time writeDeadlineCh <-chan time.Time + + readDeadlineChLock sync.Mutex } func (c *pipeConn) Write(p []byte) (int, error) { @@ -158,10 +163,15 @@ func (c *pipeConn) readNextByteBuffer(mayBlock bool) error { if !mayBlock { return errWouldBlock } + c.readDeadlineChLock.Lock() + readDeadlineCh := c.readDeadlineCh + c.readDeadlineChLock.Unlock() select { case c.b = <-c.rCh: - case <-c.readDeadlineCh: + case <-readDeadlineCh: + c.readDeadlineChLock.Lock() c.readDeadlineCh = closedDeadlineCh + c.readDeadlineChLock.Unlock() // rCh may contain data when deadline is reached. // Read the data before returning ErrTimeout. select { @@ -187,9 +197,26 @@ func (c *pipeConn) readNextByteBuffer(mayBlock bool) error { var ( errWouldBlock = errors.New("would block") errConnectionClosed = errors.New("connection closed") +) +type timeoutError struct { +} + +func (e *timeoutError) Error() string { + return "timeout" +} + +// Only implement the Timeout() function of the net.Error interface. +// This allows for checks like: +// +// if x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() { +func (e *timeoutError) Timeout() bool { + return true +} + +var ( // ErrTimeout is returned from Read() or Write() on timeout. - ErrTimeout = errors.New("timeout") + ErrTimeout = &timeoutError{} ) func (c *pipeConn) Close() error { @@ -205,8 +232,8 @@ func (c *pipeConn) RemoteAddr() net.Addr { } func (c *pipeConn) SetDeadline(deadline time.Time) error { - c.SetReadDeadline(deadline) - c.SetWriteDeadline(deadline) + c.SetReadDeadline(deadline) //nolint:errcheck + c.SetWriteDeadline(deadline) //nolint:errcheck return nil } @@ -214,7 +241,10 @@ func (c *pipeConn) SetReadDeadline(deadline time.Time) error { if c.readDeadlineTimer == nil { c.readDeadlineTimer = time.NewTimer(time.Hour) } - c.readDeadlineCh = updateTimer(c.readDeadlineTimer, deadline) + readDeadlineCh := updateTimer(c.readDeadlineTimer, deadline) + c.readDeadlineChLock.Lock() + c.readDeadlineCh = readDeadlineCh + c.readDeadlineChLock.Unlock() return nil } diff --git a/vendor/github.com/valyala/fasthttp/fs.go b/vendor/github.com/valyala/fasthttp/fs.go index 1e9b4ab193..90bbf12cb3 100644 --- a/vendor/github.com/valyala/fasthttp/fs.go +++ b/vendor/github.com/valyala/fasthttp/fs.go @@ -16,6 +16,7 @@ import ( "sync" "time" + "github.com/andybalholm/brotli" "github.com/klauspost/compress/gzip" "github.com/valyala/bytebufferpool" ) @@ -29,6 +30,10 @@ import ( // with good compression ratio. // // See also RequestCtx.SendFileBytes. +// +// WARNING: do not pass any user supplied paths to this function! +// WARNING: if path is based on user input users will be able to request +// any file on your filesystem! Use fasthttp.FS with a sane Root instead. func ServeFileBytesUncompressed(ctx *RequestCtx, path []byte) { ServeFileUncompressed(ctx, b2s(path)) } @@ -42,6 +47,10 @@ func ServeFileBytesUncompressed(ctx *RequestCtx, path []byte) { // with good compression ratio. // // See also RequestCtx.SendFile. +// +// WARNING: do not pass any user supplied paths to this function! +// WARNING: if path is based on user input users will be able to request +// any file on your filesystem! Use fasthttp.FS with a sane Root instead. func ServeFileUncompressed(ctx *RequestCtx, path string) { ctx.Request.Header.DelBytes(strAcceptEncoding) ServeFile(ctx, path) @@ -61,6 +70,10 @@ func ServeFileUncompressed(ctx *RequestCtx, path string) { // file contents. // // See also RequestCtx.SendFileBytes. +// +// WARNING: do not pass any user supplied paths to this function! +// WARNING: if path is based on user input users will be able to request +// any file on your filesystem! Use fasthttp.FS with a sane Root instead. func ServeFileBytes(ctx *RequestCtx, path []byte) { ServeFile(ctx, b2s(path)) } @@ -78,19 +91,35 @@ func ServeFileBytes(ctx *RequestCtx, path []byte) { // Use ServeFileUncompressed is you don't need serving compressed file contents. // // See also RequestCtx.SendFile. +// +// WARNING: do not pass any user supplied paths to this function! +// WARNING: if path is based on user input users will be able to request +// any file on your filesystem! Use fasthttp.FS with a sane Root instead. func ServeFile(ctx *RequestCtx, path string) { rootFSOnce.Do(func() { rootFSHandler = rootFS.NewRequestHandler() }) - if len(path) == 0 || path[0] != '/' { + + if len(path) == 0 || !filepath.IsAbs(path) { // extend relative path to absolute path + hasTrailingSlash := len(path) > 0 && (path[len(path)-1] == '/' || path[len(path)-1] == '\\') + var err error + path = filepath.FromSlash(path) if path, err = filepath.Abs(path); err != nil { - ctx.Logger().Printf("cannot resolve path %q to absolute file path: %s", path, err) + ctx.Logger().Printf("cannot resolve path %q to absolute file path: %v", path, err) ctx.Error("Internal Server Error", StatusInternalServerError) return } + if hasTrailingSlash { + path += "/" + } } + + // convert the path to forward slashes regardless the OS in order to set the URI properly + // the handler will convert back to OS path separator before opening the file + path = filepath.ToSlash(path) + ctx.Request.SetRequestURI(path) rootFSHandler(ctx) } @@ -98,9 +127,11 @@ func ServeFile(ctx *RequestCtx, path string) { var ( rootFSOnce sync.Once rootFS = &FS{ - Root: "/", + Root: "", + AllowEmptyRoot: true, GenerateIndexPages: true, Compress: true, + CompressBrotli: true, AcceptByteRange: true, } rootFSHandler RequestHandler @@ -194,11 +225,17 @@ func NewPathPrefixStripper(prefixSize int) PathRewriteFunc { // // It is prohibited copying FS values. Create new values instead. type FS struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Path to the root directory to serve files from. Root string + // AllowEmptyRoot controls what happens when Root is empty. When false (default) it will default to the + // current working directory. An empty root is mostly useful when you want to use absolute paths + // on windows that are on different filesystems. On linux setting your Root to "/" already allows you to use + // absolute paths on any filesystem. + AllowEmptyRoot bool + // List of index file names to try opening during directory access. // // For example: @@ -232,6 +269,13 @@ type FS struct { // Transparent compression is disabled by default. Compress bool + // Uses brotli encoding and fallbacks to gzip in responses if set to true, uses gzip if set to false. + // + // This value has sense only if Compress is set. + // + // Brotli encoding is disabled by default. + CompressBrotli bool + // Enables byte range requests if set to true. // // Byte range requests are disabled by default. @@ -262,6 +306,18 @@ type FS struct { // FSCompressedFileSuffix is used by default. CompressedFileSuffix string + // Suffixes list to add to compressedFileSuffix depending on encoding + // + // This value has sense only if Compress is set. + // + // FSCompressedFileSuffixes is used by default. + CompressedFileSuffixes map[string]string + + // If CleanStop is set, the channel can be closed to stop the cleanup handlers + // for the FS RequestHandlers created with NewRequestHandler. + // NEVER close this channel while the handler is still being used! + CleanStop chan struct{} + once sync.Once h RequestHandler } @@ -271,6 +327,14 @@ type FS struct { // See FS.Compress for details. const FSCompressedFileSuffix = ".fasthttp.gz" +// FSCompressedFileSuffixes is the suffixes FS adds to the original file names depending on encoding +// when trying to store compressed file under the new file name. +// See FS.Compress for details. +var FSCompressedFileSuffixes = map[string]string{ + "gzip": ".fasthttp.gz", + "br": ".fasthttp.br", +} + // FSHandlerCacheDuration is the default expiration duration for inactive // file handlers opened by FS. const FSHandlerCacheDuration = 10 * time.Second @@ -327,13 +391,19 @@ func (fs *FS) NewRequestHandler() RequestHandler { func (fs *FS) initRequestHandler() { root := fs.Root - // serve files from the current working directory if root is empty - if len(root) == 0 { - root = "." + // Serve files from the current working directory if Root is empty or if Root is a relative path. + if (!fs.AllowEmptyRoot && len(root) == 0) || (len(root) > 0 && !filepath.IsAbs(root)) { + path, err := os.Getwd() + if err != nil { + path = "." + } + root = path + "/" + root } + // convert the root directory slashes to the native format + root = filepath.FromSlash(root) // strip trailing slashes from the root path - for len(root) > 0 && root[len(root)-1] == '/' { + for len(root) > 0 && root[len(root)-1] == os.PathSeparator { root = root[:len(root)-1] } @@ -341,30 +411,59 @@ func (fs *FS) initRequestHandler() { if cacheDuration <= 0 { cacheDuration = FSHandlerCacheDuration } - compressedFileSuffix := fs.CompressedFileSuffix - if len(compressedFileSuffix) == 0 { - compressedFileSuffix = FSCompressedFileSuffix + + compressedFileSuffixes := fs.CompressedFileSuffixes + if len(compressedFileSuffixes["br"]) == 0 || len(compressedFileSuffixes["gzip"]) == 0 || + compressedFileSuffixes["br"] == compressedFileSuffixes["gzip"] { + compressedFileSuffixes = FSCompressedFileSuffixes + } + + if len(fs.CompressedFileSuffix) > 0 { + compressedFileSuffixes["gzip"] = fs.CompressedFileSuffix + compressedFileSuffixes["br"] = FSCompressedFileSuffixes["br"] } h := &fsHandler{ - root: root, - indexNames: fs.IndexNames, - pathRewrite: fs.PathRewrite, - generateIndexPages: fs.GenerateIndexPages, - compress: fs.Compress, - pathNotFound: fs.PathNotFound, - acceptByteRange: fs.AcceptByteRange, - cacheDuration: cacheDuration, - compressedFileSuffix: compressedFileSuffix, - cache: make(map[string]*fsFile), - compressedCache: make(map[string]*fsFile), + root: root, + indexNames: fs.IndexNames, + pathRewrite: fs.PathRewrite, + generateIndexPages: fs.GenerateIndexPages, + compress: fs.Compress, + compressBrotli: fs.CompressBrotli, + pathNotFound: fs.PathNotFound, + acceptByteRange: fs.AcceptByteRange, + cacheDuration: cacheDuration, + compressedFileSuffixes: compressedFileSuffixes, + cache: make(map[string]*fsFile), + cacheBrotli: make(map[string]*fsFile), + cacheGzip: make(map[string]*fsFile), } go func() { var pendingFiles []*fsFile + + clean := func() { + pendingFiles = h.cleanCache(pendingFiles) + } + + if fs.CleanStop != nil { + t := time.NewTicker(cacheDuration / 2) + for { + select { + case <-t.C: + clean() + case _, stillOpen := <-fs.CleanStop: + // Ignore values send on the channel, only stop when it is closed. + if !stillOpen { + t.Stop() + return + } + } + } + } for { time.Sleep(cacheDuration / 2) - pendingFiles = h.cleanCache(pendingFiles) + clean() } }() @@ -372,19 +471,21 @@ func (fs *FS) initRequestHandler() { } type fsHandler struct { - root string - indexNames []string - pathRewrite PathRewriteFunc - pathNotFound RequestHandler - generateIndexPages bool - compress bool - acceptByteRange bool - cacheDuration time.Duration - compressedFileSuffix string - - cache map[string]*fsFile - compressedCache map[string]*fsFile - cacheLock sync.Mutex + root string + indexNames []string + pathRewrite PathRewriteFunc + pathNotFound RequestHandler + generateIndexPages bool + compress bool + compressBrotli bool + acceptByteRange bool + cacheDuration time.Duration + compressedFileSuffixes map[string]string + + cache map[string]*fsFile + cacheBrotli map[string]*fsFile + cacheGzip map[string]*fsFile + cacheLock sync.Mutex smallFileReaderPool sync.Pool } @@ -415,10 +516,10 @@ func (ff *fsFile) NewReader() (io.Reader, error) { } return r, err } - return ff.smallFileReader(), nil + return ff.smallFileReader() } -func (ff *fsFile) smallFileReader() io.Reader { +func (ff *fsFile) smallFileReader() (io.Reader, error) { v := ff.h.smallFileReaderPool.Get() if v == nil { v = &fsSmallFileReader{} @@ -427,9 +528,9 @@ func (ff *fsFile) smallFileReader() io.Reader { r.ff = ff r.endPos = ff.contentLength if r.startPos > 0 { - panic("BUG: fsSmallFileReader with non-nil startPos found in the pool") + return nil, errors.New("bug: fsSmallFileReader with non-nil startPos found in the pool") } - return r + return r, nil } // files bigger than this size are sent with sendfile @@ -441,7 +542,7 @@ func (ff *fsFile) isBig() bool { func (ff *fsFile) bigFileReader() (io.Reader, error) { if ff.f == nil { - panic("BUG: ff.f must be non-nil in bigFileReader") + return nil, errors.New("bug: ff.f must be non-nil in bigFileReader") } var r io.Reader @@ -460,7 +561,7 @@ func (ff *fsFile) bigFileReader() (io.Reader, error) { f, err := os.Open(ff.f.Name()) if err != nil { - return nil, fmt.Errorf("cannot open already opened file: %s", err) + return nil, fmt.Errorf("cannot open already opened file: %w", err) } return &bigFileReader{ f: f, @@ -471,12 +572,12 @@ func (ff *fsFile) bigFileReader() (io.Reader, error) { func (ff *fsFile) Release() { if ff.f != nil { - ff.f.Close() + _ = ff.f.Close() if ff.isBig() { ff.bigFilesLock.Lock() for _, r := range ff.bigFiles { - r.f.Close() + _ = r.f.Close() } ff.bigFilesLock.Unlock() } @@ -517,7 +618,7 @@ func (r *bigFileReader) Read(p []byte) (int, error) { func (r *bigFileReader) WriteTo(w io.Writer) (int64, error) { if rf, ok := w.(io.ReaderFrom); ok { - // fast path. Senfile must be triggered + // fast path. Send file must be triggered return rf.ReadFrom(r.r) } @@ -529,16 +630,17 @@ func (r *bigFileReader) Close() error { r.r = r.f n, err := r.f.Seek(0, 0) if err == nil { - if n != 0 { - panic("BUG: File.Seek(0,0) returned (non-zero, nil)") + if n == 0 { + ff := r.ff + ff.bigFilesLock.Lock() + ff.bigFiles = append(ff.bigFiles, r) + ff.bigFilesLock.Unlock() + } else { + _ = r.f.Close() + err = errors.New("bug: File.Seek(0,0) returned (non-zero, nil)") } - - ff := r.ff - ff.bigFilesLock.Lock() - ff.bigFiles = append(ff.bigFiles, r) - ff.bigFilesLock.Unlock() } else { - r.f.Close() + _ = r.f.Close() } r.ff.decReadersCount() return err @@ -616,7 +718,7 @@ func (r *fsSmallFileReader) WriteTo(w io.Writer) (int64, error) { nw, errw := w.Write(buf[:n]) curPos += nw if errw == nil && nw != n { - panic("BUG: Write(p) returned (n, nil), where n != len(p)") + errw = errors.New("bug: Write(p) returned (n, nil), where n != len(p)") } if err == nil { err = errw @@ -648,7 +750,8 @@ func (h *fsHandler) cleanCache(pendingFiles []*fsFile) []*fsFile { pendingFiles = remainingFiles pendingFiles, filesToRelease = cleanCacheNolock(h.cache, pendingFiles, filesToRelease, h.cacheDuration) - pendingFiles, filesToRelease = cleanCacheNolock(h.compressedCache, pendingFiles, filesToRelease, h.cacheDuration) + pendingFiles, filesToRelease = cleanCacheNolock(h.cacheBrotli, pendingFiles, filesToRelease, h.cacheDuration) + pendingFiles, filesToRelease = cleanCacheNolock(h.cacheGzip, pendingFiles, filesToRelease, h.cacheDuration) h.cacheLock.Unlock() @@ -684,6 +787,7 @@ func (h *fsHandler) handleRequest(ctx *RequestCtx) { } else { path = ctx.Path() } + hasTrailingSlash := len(path) > 0 && path[len(path)-1] == '/' path = stripTrailingSlashes(path) if n := bytes.IndexByte(path, 0); n >= 0 { @@ -704,10 +808,18 @@ func (h *fsHandler) handleRequest(ctx *RequestCtx) { mustCompress := false fileCache := h.cache + fileEncoding := "" byteRange := ctx.Request.Header.peek(strRange) - if len(byteRange) == 0 && h.compress && ctx.Request.Header.HasAcceptEncodingBytes(strGzip) { - mustCompress = true - fileCache = h.compressedCache + if len(byteRange) == 0 && h.compress { + if h.compressBrotli && ctx.Request.Header.HasAcceptEncodingBytes(strBr) { + mustCompress = true + fileCache = h.cacheBrotli + fileEncoding = "br" + } else if ctx.Request.Header.HasAcceptEncodingBytes(strGzip) { + mustCompress = true + fileCache = h.cacheGzip + fileEncoding = "gzip" + } } h.cacheLock.Lock() @@ -719,24 +831,29 @@ func (h *fsHandler) handleRequest(ctx *RequestCtx) { if !ok { pathStr := string(path) - filePath := h.root + pathStr + filePath := filepath.FromSlash(h.root + pathStr) + var err error - ff, err = h.openFSFile(filePath, mustCompress) + ff, err = h.openFSFile(filePath, mustCompress, fileEncoding) if mustCompress && err == errNoCreatePermission { ctx.Logger().Printf("insufficient permissions for saving compressed file for %q. Serving uncompressed file. "+ "Allow write access to the directory with this file in order to improve fasthttp performance", filePath) mustCompress = false - ff, err = h.openFSFile(filePath, mustCompress) + ff, err = h.openFSFile(filePath, mustCompress, fileEncoding) } if err == errDirIndexRequired { - ff, err = h.openIndexFile(ctx, filePath, mustCompress) + if !hasTrailingSlash { + ctx.RedirectBytes(append(path, '/'), StatusFound) + return + } + ff, err = h.openIndexFile(ctx, filePath, mustCompress, fileEncoding) if err != nil { - ctx.Logger().Printf("cannot open dir index %q: %s", filePath, err) + ctx.Logger().Printf("cannot open dir index %q: %v", filePath, err) ctx.Error("Directory index is forbidden", StatusForbidden) return } } else if err != nil { - ctx.Logger().Printf("cannot open file %q: %s", filePath, err) + ctx.Logger().Printf("cannot open file %q: %v", filePath, err) if h.pathNotFound == nil { ctx.Error("Cannot open requested path", StatusNotFound) } else { @@ -773,14 +890,18 @@ func (h *fsHandler) handleRequest(ctx *RequestCtx) { r, err := ff.NewReader() if err != nil { - ctx.Logger().Printf("cannot obtain file reader for path=%q: %s", path, err) + ctx.Logger().Printf("cannot obtain file reader for path=%q: %v", path, err) ctx.Error("Internal Server Error", StatusInternalServerError) return } hdr := &ctx.Response.Header if ff.compressed { - hdr.SetCanonical(strContentEncoding, strGzip) + if fileEncoding == "br" { + hdr.SetCanonical(strContentEncoding, strBr) + } else if fileEncoding == "gzip" { + hdr.SetCanonical(strContentEncoding, strGzip) + } } statusCode := StatusOK @@ -790,15 +911,15 @@ func (h *fsHandler) handleRequest(ctx *RequestCtx) { if len(byteRange) > 0 { startPos, endPos, err := ParseByteRange(byteRange, contentLength) if err != nil { - r.(io.Closer).Close() - ctx.Logger().Printf("cannot parse byte range %q for path=%q: %s", byteRange, path, err) + _ = r.(io.Closer).Close() + ctx.Logger().Printf("cannot parse byte range %q for path=%q: %v", byteRange, path, err) ctx.Error("Range Not Satisfiable", StatusRequestedRangeNotSatisfiable) return } if err = r.(byteRangeUpdater).UpdateByteRange(startPos, endPos); err != nil { - r.(io.Closer).Close() - ctx.Logger().Printf("cannot seek byte range %q for path=%q: %s", byteRange, path, err) + _ = r.(io.Closer).Close() + ctx.Logger().Printf("cannot seek byte range %q for path=%q: %v", byteRange, path, err) ctx.Error("Internal Server Error", StatusInternalServerError) return } @@ -818,7 +939,7 @@ func (h *fsHandler) handleRequest(ctx *RequestCtx) { ctx.Response.Header.SetContentLength(contentLength) if rc, ok := r.(io.Closer); ok { if err := rc.Close(); err != nil { - ctx.Logger().Printf("cannot close file reader: %s", err) + ctx.Logger().Printf("cannot close file reader: %v", err) ctx.Error("Internal Server Error", StatusInternalServerError) return } @@ -891,15 +1012,15 @@ func ParseByteRange(byteRange []byte, contentLength int) (startPos, endPos int, return startPos, endPos, nil } -func (h *fsHandler) openIndexFile(ctx *RequestCtx, dirPath string, mustCompress bool) (*fsFile, error) { +func (h *fsHandler) openIndexFile(ctx *RequestCtx, dirPath string, mustCompress bool, fileEncoding string) (*fsFile, error) { for _, indexName := range h.indexNames { indexFilePath := dirPath + "/" + indexName - ff, err := h.openFSFile(indexFilePath, mustCompress) + ff, err := h.openFSFile(indexFilePath, mustCompress, fileEncoding) if err == nil { return ff, nil } if !os.IsNotExist(err) { - return nil, fmt.Errorf("cannot open file %q: %s", indexFilePath, err) + return nil, fmt.Errorf("cannot open file %q: %w", indexFilePath, err) } } @@ -907,7 +1028,7 @@ func (h *fsHandler) openIndexFile(ctx *RequestCtx, dirPath string, mustCompress return nil, fmt.Errorf("cannot access directory without index page. Directory %q", dirPath) } - return h.createDirIndex(ctx.URI(), dirPath, mustCompress) + return h.createDirIndex(ctx.URI(), dirPath, mustCompress, fileEncoding) } var ( @@ -915,20 +1036,20 @@ var ( errNoCreatePermission = errors.New("no 'create file' permissions") ) -func (h *fsHandler) createDirIndex(base *URI, dirPath string, mustCompress bool) (*fsFile, error) { +func (h *fsHandler) createDirIndex(base *URI, dirPath string, mustCompress bool, fileEncoding string) (*fsFile, error) { w := &bytebufferpool.ByteBuffer{} basePathEscaped := html.EscapeString(string(base.Path())) - fmt.Fprintf(w, "%s", basePathEscaped) - fmt.Fprintf(w, "

%s

", basePathEscaped) - fmt.Fprintf(w, "
    ") + _, _ = fmt.Fprintf(w, "%s", basePathEscaped) + _, _ = fmt.Fprintf(w, "

    %s

    ", basePathEscaped) + _, _ = fmt.Fprintf(w, "
      ") if len(basePathEscaped) > 1 { var parentURI URI base.CopyTo(&parentURI) parentURI.Update(string(base.Path()) + "/..") parentPathEscaped := html.EscapeString(string(parentURI.Path())) - fmt.Fprintf(w, `
    • ..
    • `, parentPathEscaped) + _, _ = fmt.Fprintf(w, `
    • ..
    • `, parentPathEscaped) } f, err := os.Open(dirPath) @@ -937,18 +1058,21 @@ func (h *fsHandler) createDirIndex(base *URI, dirPath string, mustCompress bool) } fileinfos, err := f.Readdir(0) - f.Close() + _ = f.Close() if err != nil { return nil, err } fm := make(map[string]os.FileInfo, len(fileinfos)) filenames := make([]string, 0, len(fileinfos)) +nestedContinue: for _, fi := range fileinfos { name := fi.Name() - if strings.HasSuffix(name, h.compressedFileSuffix) { - // Do not show compressed files on index page. - continue + for _, cfs := range h.compressedFileSuffixes { + if strings.HasSuffix(name, cfs) { + // Do not show compressed files on index page. + continue nestedContinue + } } fm[name] = fi filenames = append(filenames, name) @@ -969,15 +1093,19 @@ func (h *fsHandler) createDirIndex(base *URI, dirPath string, mustCompress bool) auxStr = fmt.Sprintf("file, %d bytes", fi.Size()) className = "file" } - fmt.Fprintf(w, `
    • %s, %s, last modified %s
    • `, + _, _ = fmt.Fprintf(w, `
    • %s, %s, last modified %s
    • `, pathEscaped, className, html.EscapeString(name), auxStr, fsModTime(fi.ModTime())) } - fmt.Fprintf(w, "
    ") + _, _ = fmt.Fprintf(w, "
") if mustCompress { var zbuf bytebufferpool.ByteBuffer - zbuf.B = AppendGzipBytesLevel(zbuf.B, w.B, CompressDefaultCompression) + if fileEncoding == "br" { + zbuf.B = AppendBrotliBytesLevel(zbuf.B, w.B, CompressDefaultCompression) + } else if fileEncoding == "gzip" { + zbuf.B = AppendGzipBytesLevel(zbuf.B, w.B, CompressDefaultCompression) + } w = &zbuf } @@ -1002,7 +1130,7 @@ const ( fsMaxCompressibleFileSize = 8 * 1024 * 1024 ) -func (h *fsHandler) compressAndOpenFSFile(filePath string) (*fsFile, error) { +func (h *fsHandler) compressAndOpenFSFile(filePath string, fileEncoding string) (*fsFile, error) { f, err := os.Open(filePath) if err != nil { return nil, err @@ -1010,44 +1138,44 @@ func (h *fsHandler) compressAndOpenFSFile(filePath string) (*fsFile, error) { fileInfo, err := f.Stat() if err != nil { - f.Close() - return nil, fmt.Errorf("cannot obtain info for file %q: %s", filePath, err) + _ = f.Close() + return nil, fmt.Errorf("cannot obtain info for file %q: %w", filePath, err) } if fileInfo.IsDir() { - f.Close() + _ = f.Close() return nil, errDirIndexRequired } - if strings.HasSuffix(filePath, h.compressedFileSuffix) || + if strings.HasSuffix(filePath, h.compressedFileSuffixes[fileEncoding]) || fileInfo.Size() > fsMaxCompressibleFileSize || !isFileCompressible(f, fsMinCompressRatio) { - return h.newFSFile(f, fileInfo, false) + return h.newFSFile(f, fileInfo, false, "") } - compressedFilePath := filePath + h.compressedFileSuffix + compressedFilePath := filePath + h.compressedFileSuffixes[fileEncoding] absPath, err := filepath.Abs(compressedFilePath) if err != nil { - f.Close() - return nil, fmt.Errorf("cannot determine absolute path for %q: %s", compressedFilePath, err) + _ = f.Close() + return nil, fmt.Errorf("cannot determine absolute path for %q: %v", compressedFilePath, err) } flock := getFileLock(absPath) flock.Lock() - ff, err := h.compressFileNolock(f, fileInfo, filePath, compressedFilePath) + ff, err := h.compressFileNolock(f, fileInfo, filePath, compressedFilePath, fileEncoding) flock.Unlock() return ff, err } -func (h *fsHandler) compressFileNolock(f *os.File, fileInfo os.FileInfo, filePath, compressedFilePath string) (*fsFile, error) { +func (h *fsHandler) compressFileNolock(f *os.File, fileInfo os.FileInfo, filePath, compressedFilePath string, fileEncoding string) (*fsFile, error) { // Attempt to open compressed file created by another concurrent // goroutine. // It is safe opening such a file, since the file creation // is guarded by file mutex - see getFileLock call. if _, err := os.Stat(compressedFilePath); err == nil { - f.Close() - return h.newCompressedFSFile(compressedFilePath) + _ = f.Close() + return h.newCompressedFSFile(compressedFilePath, fileEncoding) } // Create temporary file, so concurrent goroutines don't use @@ -1055,72 +1183,80 @@ func (h *fsHandler) compressFileNolock(f *os.File, fileInfo os.FileInfo, filePat tmpFilePath := compressedFilePath + ".tmp" zf, err := os.Create(tmpFilePath) if err != nil { - f.Close() + _ = f.Close() if !os.IsPermission(err) { - return nil, fmt.Errorf("cannot create temporary file %q: %s", tmpFilePath, err) + return nil, fmt.Errorf("cannot create temporary file %q: %w", tmpFilePath, err) } return nil, errNoCreatePermission } - - zw := acquireStacklessGzipWriter(zf, CompressDefaultCompression) - _, err = copyZeroAlloc(zw, f) - if err1 := zw.Flush(); err == nil { - err = err1 + if fileEncoding == "br" { + zw := acquireStacklessBrotliWriter(zf, CompressDefaultCompression) + _, err = copyZeroAlloc(zw, f) + if err1 := zw.Flush(); err == nil { + err = err1 + } + releaseStacklessBrotliWriter(zw, CompressDefaultCompression) + } else if fileEncoding == "gzip" { + zw := acquireStacklessGzipWriter(zf, CompressDefaultCompression) + _, err = copyZeroAlloc(zw, f) + if err1 := zw.Flush(); err == nil { + err = err1 + } + releaseStacklessGzipWriter(zw, CompressDefaultCompression) } - releaseStacklessGzipWriter(zw, CompressDefaultCompression) - zf.Close() - f.Close() + _ = zf.Close() + _ = f.Close() if err != nil { - return nil, fmt.Errorf("error when compressing file %q to %q: %s", filePath, tmpFilePath, err) + return nil, fmt.Errorf("error when compressing file %q to %q: %w", filePath, tmpFilePath, err) } if err = os.Chtimes(tmpFilePath, time.Now(), fileInfo.ModTime()); err != nil { - return nil, fmt.Errorf("cannot change modification time to %s for tmp file %q: %s", + return nil, fmt.Errorf("cannot change modification time to %v for tmp file %q: %v", fileInfo.ModTime(), tmpFilePath, err) } if err = os.Rename(tmpFilePath, compressedFilePath); err != nil { - return nil, fmt.Errorf("cannot move compressed file from %q to %q: %s", tmpFilePath, compressedFilePath, err) + return nil, fmt.Errorf("cannot move compressed file from %q to %q: %w", tmpFilePath, compressedFilePath, err) } - return h.newCompressedFSFile(compressedFilePath) + return h.newCompressedFSFile(compressedFilePath, fileEncoding) } -func (h *fsHandler) newCompressedFSFile(filePath string) (*fsFile, error) { +func (h *fsHandler) newCompressedFSFile(filePath string, fileEncoding string) (*fsFile, error) { f, err := os.Open(filePath) if err != nil { - return nil, fmt.Errorf("cannot open compressed file %q: %s", filePath, err) + return nil, fmt.Errorf("cannot open compressed file %q: %w", filePath, err) } fileInfo, err := f.Stat() if err != nil { - f.Close() - return nil, fmt.Errorf("cannot obtain info for compressed file %q: %s", filePath, err) + _ = f.Close() + return nil, fmt.Errorf("cannot obtain info for compressed file %q: %w", filePath, err) } - return h.newFSFile(f, fileInfo, true) + return h.newFSFile(f, fileInfo, true, fileEncoding) } -func (h *fsHandler) openFSFile(filePath string, mustCompress bool) (*fsFile, error) { +func (h *fsHandler) openFSFile(filePath string, mustCompress bool, fileEncoding string) (*fsFile, error) { filePathOriginal := filePath if mustCompress { - filePath += h.compressedFileSuffix + filePath += h.compressedFileSuffixes[fileEncoding] } f, err := os.Open(filePath) if err != nil { if mustCompress && os.IsNotExist(err) { - return h.compressAndOpenFSFile(filePathOriginal) + return h.compressAndOpenFSFile(filePathOriginal, fileEncoding) } return nil, err } fileInfo, err := f.Stat() if err != nil { - f.Close() - return nil, fmt.Errorf("cannot obtain info for file %q: %s", filePath, err) + _ = f.Close() + return nil, fmt.Errorf("cannot obtain info for file %q: %w", filePath, err) } if fileInfo.IsDir() { - f.Close() + _ = f.Close() if mustCompress { return nil, fmt.Errorf("directory with unexpected suffix found: %q. Suffix: %q", - filePath, h.compressedFileSuffix) + filePath, h.compressedFileSuffixes[fileEncoding]) } return nil, errDirIndexRequired } @@ -1128,36 +1264,39 @@ func (h *fsHandler) openFSFile(filePath string, mustCompress bool) (*fsFile, err if mustCompress { fileInfoOriginal, err := os.Stat(filePathOriginal) if err != nil { - f.Close() - return nil, fmt.Errorf("cannot obtain info for original file %q: %s", filePathOriginal, err) + _ = f.Close() + return nil, fmt.Errorf("cannot obtain info for original file %q: %w", filePathOriginal, err) } - if fileInfoOriginal.ModTime() != fileInfo.ModTime() { + // Only re-create the compressed file if there was more than a second between the mod times. + // On MacOS the gzip seems to truncate the nanoseconds in the mod time causing the original file + // to look newer than the gzipped file. + if fileInfoOriginal.ModTime().Sub(fileInfo.ModTime()) >= time.Second { // The compressed file became stale. Re-create it. - f.Close() - os.Remove(filePath) - return h.compressAndOpenFSFile(filePathOriginal) + _ = f.Close() + _ = os.Remove(filePath) + return h.compressAndOpenFSFile(filePathOriginal, fileEncoding) } } - return h.newFSFile(f, fileInfo, mustCompress) + return h.newFSFile(f, fileInfo, mustCompress, fileEncoding) } -func (h *fsHandler) newFSFile(f *os.File, fileInfo os.FileInfo, compressed bool) (*fsFile, error) { +func (h *fsHandler) newFSFile(f *os.File, fileInfo os.FileInfo, compressed bool, fileEncoding string) (*fsFile, error) { n := fileInfo.Size() contentLength := int(n) if n != int64(contentLength) { - f.Close() + _ = f.Close() return nil, fmt.Errorf("too big file: %d bytes", n) } // detect content-type - ext := fileExtension(fileInfo.Name(), compressed, h.compressedFileSuffix) + ext := fileExtension(fileInfo.Name(), compressed, h.compressedFileSuffixes[fileEncoding]) contentType := mime.TypeByExtension(ext) if len(contentType) == 0 { - data, err := readFileHeader(f, compressed) + data, err := readFileHeader(f, compressed, fileEncoding) if err != nil { - return nil, fmt.Errorf("cannot read header of the file %q: %s", f.Name(), err) + return nil, fmt.Errorf("cannot read header of the file %q: %w", f.Name(), err) } contentType = http.DetectContentType(data) } @@ -1177,15 +1316,25 @@ func (h *fsHandler) newFSFile(f *os.File, fileInfo os.FileInfo, compressed bool) return ff, nil } -func readFileHeader(f *os.File, compressed bool) ([]byte, error) { +func readFileHeader(f *os.File, compressed bool, fileEncoding string) ([]byte, error) { r := io.Reader(f) - var zr *gzip.Reader + var ( + br *brotli.Reader + zr *gzip.Reader + ) if compressed { var err error - if zr, err = acquireGzipReader(f); err != nil { - return nil, err + if fileEncoding == "br" { + if br, err = acquireBrotliReader(f); err != nil { + return nil, err + } + r = br + } else if fileEncoding == "gzip" { + if zr, err = acquireGzipReader(f); err != nil { + return nil, err + } + r = zr } - r = zr } lr := &io.LimitedReader{ @@ -1193,7 +1342,13 @@ func readFileHeader(f *os.File, compressed bool) ([]byte, error) { N: 512, } data, err := ioutil.ReadAll(lr) - f.Seek(0, 0) + if _, err := f.Seek(0, 0); err != nil { + return nil, err + } + + if br != nil { + releaseBrotliReader(br) + } if zr != nil { releaseGzipReader(zr) @@ -1243,7 +1398,7 @@ func FileLastModified(path string) (time.Time, error) { return zeroTime, err } fileInfo, err := f.Stat() - f.Close() + _ = f.Close() if err != nil { return zeroTime, err } @@ -1254,18 +1409,10 @@ func fsModTime(t time.Time) time.Time { return t.In(time.UTC).Truncate(time.Second) } -var ( - filesLockMap = make(map[string]*sync.Mutex) - filesLockMapLock sync.Mutex -) +var filesLockMap sync.Map func getFileLock(absPath string) *sync.Mutex { - filesLockMapLock.Lock() - flock := filesLockMap[absPath] - if flock == nil { - flock = &sync.Mutex{} - filesLockMap[absPath] = flock - } - filesLockMapLock.Unlock() - return flock + v, _ := filesLockMap.LoadOrStore(absPath, &sync.Mutex{}) + filelock := v.(*sync.Mutex) + return filelock } diff --git a/vendor/github.com/valyala/fasthttp/go.mod b/vendor/github.com/valyala/fasthttp/go.mod deleted file mode 100644 index 8434ca1ec8..0000000000 --- a/vendor/github.com/valyala/fasthttp/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module github.com/valyala/fasthttp - -require ( - github.com/klauspost/compress v1.4.0 - github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e // indirect - github.com/valyala/bytebufferpool v1.0.0 - github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a - golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3 -) diff --git a/vendor/github.com/valyala/fasthttp/go.sum b/vendor/github.com/valyala/fasthttp/go.sum deleted file mode 100644 index 93f38fcf2e..0000000000 --- a/vendor/github.com/valyala/fasthttp/go.sum +++ /dev/null @@ -1,10 +0,0 @@ -github.com/klauspost/compress v1.4.0 h1:8nsMz3tWa9SWWPL60G1V6CUsf4lLjWLTNEtibhe8gh8= -github.com/klauspost/compress v1.4.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A= -github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e h1:+lIPJOWl+jSiJOc70QXJ07+2eg2Jy2EC7Mi11BWujeM= -github.com/klauspost/cpuid v0.0.0-20180405133222-e7e905edc00e/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a h1:0R4NLDRDZX6JcmhJgXi5E4b8Wg84ihbmUKp/GvSPEzc= -github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= -golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3 h1:czFLhve3vsQetD6JOJ8NZZvGQIXlnN3/yXxbT6/awxI= -golang.org/x/net v0.0.0-20180911220305-26e67e76b6c3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= diff --git a/vendor/github.com/valyala/fasthttp/header.go b/vendor/github.com/valyala/fasthttp/header.go index 9f9c012c12..08f5912b8a 100644 --- a/vendor/github.com/valyala/fasthttp/header.go +++ b/vendor/github.com/valyala/fasthttp/header.go @@ -6,10 +6,16 @@ import ( "errors" "fmt" "io" + "sync" "sync/atomic" "time" ) +const ( + rChar = byte('\r') + nChar = byte('\n') +) + // ResponseHeader represents HTTP response header. // // It is forbidden copying ResponseHeader instances. @@ -18,22 +24,27 @@ import ( // ResponseHeader instance MUST NOT be used from concurrently running // goroutines. type ResponseHeader struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck disableNormalizing bool noHTTP11 bool connectionClose bool noDefaultContentType bool + noDefaultDate bool - statusCode int - contentLength int - contentLengthBytes []byte + statusCode int + statusMessage []byte + protocol []byte + contentLength int + contentLengthBytes []byte + secureErrorLogMessage bool contentType []byte server []byte - h []argsKV - bufKV argsKV + h []argsKV + trailer []argsKV + bufKV argsKV cookies []argsKV } @@ -46,36 +57,37 @@ type ResponseHeader struct { // RequestHeader instance MUST NOT be used from concurrently running // goroutines. type RequestHeader struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck - disableNormalizing bool - noHTTP11 bool - connectionClose bool + disableNormalizing bool + noHTTP11 bool + connectionClose bool + noDefaultContentType bool // These two fields have been moved close to other bool fields // for reducing RequestHeader object size. cookiesCollected bool - rawHeadersParsed bool - contentLength int - contentLengthBytes []byte + contentLength int + contentLengthBytes []byte + secureErrorLogMessage bool method []byte requestURI []byte + proto []byte host []byte contentType []byte userAgent []byte - h []argsKV - bufKV argsKV + h []argsKV + trailer []argsKV + bufKV argsKV cookies []argsKV - rawHeaders []byte - // stores an immutable copy of headers as they were received from the // wire. - rawHeadersCopy []byte + rawHeaders []byte } // SetContentRange sets 'Content-Range: bytes startPos-endPos/contentLength' @@ -99,8 +111,6 @@ func (h *ResponseHeader) SetContentRange(startPos, endPos, contentLength int) { // * If startPos is negative, then 'bytes=-startPos' value is set. // * If endPos is negative, then 'bytes=startPos-' value is set. func (h *RequestHeader) SetByteRange(startPos, endPos int) { - h.parseRawHeaders() - b := h.bufKV.value[:0] b = append(b, strBytes...) b = append(b, '=') @@ -131,6 +141,29 @@ func (h *ResponseHeader) SetStatusCode(statusCode int) { h.statusCode = statusCode } +// StatusMessage returns response status message. +func (h *ResponseHeader) StatusMessage() []byte { + return h.statusMessage +} + +// SetStatusMessage sets response status message bytes. +func (h *ResponseHeader) SetStatusMessage(statusMessage []byte) { + h.statusMessage = append(h.statusMessage[:0], statusMessage...) +} + +// Protocol returns response protocol bytes. +func (h *ResponseHeader) Protocol() []byte { + if len(h.protocol) > 0 { + return h.protocol + } + return strHTTP11 +} + +// SetProtocol sets response protocol bytes. +func (h *ResponseHeader) SetProtocol(protocol []byte) { + h.protocol = append(h.protocol[:0], protocol...) +} + // SetLastModified sets 'Last-Modified' header to the given value. func (h *ResponseHeader) SetLastModified(t time.Time) { h.bufKV.value = AppendHTTPDate(h.bufKV.value[:0], t) @@ -157,19 +190,16 @@ func (h *ResponseHeader) ResetConnectionClose() { // ConnectionClose returns true if 'Connection: close' header is set. func (h *RequestHeader) ConnectionClose() bool { - h.parseRawHeaders() return h.connectionClose } // SetConnectionClose sets 'Connection: close' header. func (h *RequestHeader) SetConnectionClose() { - // h.parseRawHeaders() isn't called for performance reasons. h.connectionClose = true } // ResetConnectionClose clears 'Connection: close' header if it exists. func (h *RequestHeader) ResetConnectionClose() { - h.parseRawHeaders() if h.connectionClose { h.connectionClose = false h.h = delAllArgsBytes(h.h, strConnection) @@ -183,7 +213,6 @@ func (h *ResponseHeader) ConnectionUpgrade() bool { // ConnectionUpgrade returns true if 'Connection: Upgrade' header is set. func (h *RequestHeader) ConnectionUpgrade() bool { - h.parseRawHeaders() return hasHeaderValue(h.Peek(HeaderConnection), strUpgrade) } @@ -244,16 +273,12 @@ func (h *ResponseHeader) mustSkipContentLength() bool { // It may be negative: // -1 means Transfer-Encoding: chunked. func (h *RequestHeader) ContentLength() int { - if h.ignoreBody() { - return 0 - } return h.realContentLength() } // realContentLength returns the actual Content-Length set in the request, // including positive lengths for GET/HEAD requests. func (h *RequestHeader) realContentLength() int { - h.parseRawHeaders() return h.contentLength } @@ -261,7 +286,6 @@ func (h *RequestHeader) realContentLength() int { // // Negative content-length sets 'Transfer-Encoding: chunked' header. func (h *RequestHeader) SetContentLength(contentLength int) { - h.parseRawHeaders() h.contentLength = contentLength if contentLength >= 0 { h.contentLengthBytes = AppendUint(h.contentLengthBytes[:0], contentLength) @@ -275,7 +299,11 @@ func (h *RequestHeader) SetContentLength(contentLength int) { func (h *ResponseHeader) isCompressibleContentType() bool { contentType := h.ContentType() return bytes.HasPrefix(contentType, strTextSlash) || - bytes.HasPrefix(contentType, strApplicationSlash) + bytes.HasPrefix(contentType, strApplicationSlash) || + bytes.HasPrefix(contentType, strImageSVG) || + bytes.HasPrefix(contentType, strImageIcon) || + bytes.HasPrefix(contentType, strFontSlash) || + bytes.HasPrefix(contentType, strMultipartSlash) } // ContentType returns Content-Type header value. @@ -314,19 +342,16 @@ func (h *ResponseHeader) SetServerBytes(server []byte) { // ContentType returns Content-Type header value. func (h *RequestHeader) ContentType() []byte { - h.parseRawHeaders() return h.contentType } // SetContentType sets Content-Type header value. func (h *RequestHeader) SetContentType(contentType string) { - h.parseRawHeaders() h.contentType = append(h.contentType[:0], contentType...) } // SetContentTypeBytes sets Content-Type header value. func (h *RequestHeader) SetContentTypeBytes(contentType []byte) { - h.parseRawHeaders() h.contentType = append(h.contentType[:0], contentType...) } @@ -334,8 +359,6 @@ func (h *RequestHeader) SetContentTypeBytes(contentType []byte) { // 'multipart/form-data; boundary=...' // where ... is substituted by the given boundary. func (h *RequestHeader) SetMultipartFormBoundary(boundary string) { - h.parseRawHeaders() - b := h.bufKV.value[:0] b = append(b, strMultipartFormData...) b = append(b, ';', ' ') @@ -351,8 +374,6 @@ func (h *RequestHeader) SetMultipartFormBoundary(boundary string) { // 'multipart/form-data; boundary=...' // where ... is substituted by the given boundary. func (h *RequestHeader) SetMultipartFormBoundaryBytes(boundary []byte) { - h.parseRawHeaders() - b := h.bufKV.value[:0] b = append(b, strMultipartFormData...) b = append(b, ';', ' ') @@ -364,6 +385,117 @@ func (h *RequestHeader) SetMultipartFormBoundaryBytes(boundary []byte) { h.SetContentTypeBytes(h.bufKV.value) } +// SetTrailer sets header Trailer value for chunked response +// to indicate which headers will be sent after the body. +// +// Use Set to set the trailer header later. +// +// Trailers are only supported with chunked transfer. +// Trailers allow the sender to include additional headers at the end of chunked messages. +// +// The following trailers are forbidden: +// 1. necessary for message framing (e.g., Transfer-Encoding and Content-Length), +// 2. routing (e.g., Host), +// 3. request modifiers (e.g., controls and conditionals in Section 5 of [RFC7231]), +// 4. authentication (e.g., see [RFC7235] and [RFC6265]), +// 5. response control data (e.g., see Section 7.1 of [RFC7231]), +// 6. determining how to process the payload (e.g., Content-Encoding, Content-Type, Content-Range, and Trailer) +// +// Return ErrBadTrailer if contain any forbidden trailers. +func (h *ResponseHeader) SetTrailer(trailer string) error { + return h.SetTrailerBytes(s2b(trailer)) +} + +// SetTrailerBytes sets Trailer header value for chunked response +// to indicate which headers will be sent after the body. +// +// Use Set to set the trailer header later. +// +// Trailers are only supported with chunked transfer. +// Trailers allow the sender to include additional headers at the end of chunked messages. +// +// The following trailers are forbidden: +// 1. necessary for message framing (e.g., Transfer-Encoding and Content-Length), +// 2. routing (e.g., Host), +// 3. request modifiers (e.g., controls and conditionals in Section 5 of [RFC7231]), +// 4. authentication (e.g., see [RFC7235] and [RFC6265]), +// 5. response control data (e.g., see Section 7.1 of [RFC7231]), +// 6. determining how to process the payload (e.g., Content-Encoding, Content-Type, Content-Range, and Trailer) +// +// Return ErrBadTrailer if contain any forbidden trailers. +func (h *ResponseHeader) SetTrailerBytes(trailer []byte) error { + h.trailer = h.trailer[:0] + return h.AddTrailerBytes(trailer) +} + +// AddTrailer add Trailer header value for chunked response +// to indicate which headers will be sent after the body. +// +// Use Set to set the trailer header later. +// +// Trailers are only supported with chunked transfer. +// Trailers allow the sender to include additional headers at the end of chunked messages. +// +// The following trailers are forbidden: +// 1. necessary for message framing (e.g., Transfer-Encoding and Content-Length), +// 2. routing (e.g., Host), +// 3. request modifiers (e.g., controls and conditionals in Section 5 of [RFC7231]), +// 4. authentication (e.g., see [RFC7235] and [RFC6265]), +// 5. response control data (e.g., see Section 7.1 of [RFC7231]), +// 6. determining how to process the payload (e.g., Content-Encoding, Content-Type, Content-Range, and Trailer) +// +// Return ErrBadTrailer if contain any forbidden trailers. +func (h *ResponseHeader) AddTrailer(trailer string) error { + return h.AddTrailerBytes(s2b(trailer)) +} + +var ErrBadTrailer = errors.New("contain forbidden trailer") + +// AddTrailerBytes add Trailer header value for chunked response +// to indicate which headers will be sent after the body. +// +// Use Set to set the trailer header later. +// +// Trailers are only supported with chunked transfer. +// Trailers allow the sender to include additional headers at the end of chunked messages. +// +// The following trailers are forbidden: +// 1. necessary for message framing (e.g., Transfer-Encoding and Content-Length), +// 2. routing (e.g., Host), +// 3. request modifiers (e.g., controls and conditionals in Section 5 of [RFC7231]), +// 4. authentication (e.g., see [RFC7235] and [RFC6265]), +// 5. response control data (e.g., see Section 7.1 of [RFC7231]), +// 6. determining how to process the payload (e.g., Content-Encoding, Content-Type, Content-Range, and Trailer) +// +// Return ErrBadTrailer if contain any forbidden trailers. +func (h *ResponseHeader) AddTrailerBytes(trailer []byte) error { + var err error + for i := -1; i+1 < len(trailer); { + trailer = trailer[i+1:] + i = bytes.IndexByte(trailer, ',') + if i < 0 { + i = len(trailer) + } + key := trailer[:i] + for len(key) > 0 && key[0] == ' ' { + key = key[1:] + } + for len(key) > 0 && key[len(key)-1] == ' ' { + key = key[:len(key)-1] + } + // Forbidden by RFC 7230, section 4.1.2 + if isBadTrailer(key) { + err = ErrBadTrailer + continue + } + h.bufKV.key = append(h.bufKV.key[:0], key...) + normalizeHeaderKey(h.bufKV.key, h.disableNormalizing) + h.trailer = appendArgBytes(h.trailer, h.bufKV.key, nil, argsNoValue) + } + + return err +} + // MultipartFormBoundary returns boundary part // from 'multipart/form-data; boundary=...' Content-Type. func (h *RequestHeader) MultipartFormBoundary() []byte { @@ -408,50 +540,31 @@ func (h *RequestHeader) MultipartFormBoundary() []byte { // Host returns Host header value. func (h *RequestHeader) Host() []byte { - if len(h.host) > 0 { - return h.host - } - if !h.rawHeadersParsed { - // fast path without employing full headers parsing. - host := peekRawHeader(h.rawHeaders, strHost) - if len(host) > 0 { - h.host = append(h.host[:0], host...) - return h.host - } - } - - // slow path. - h.parseRawHeaders() return h.host } // SetHost sets Host header value. func (h *RequestHeader) SetHost(host string) { - h.parseRawHeaders() h.host = append(h.host[:0], host...) } // SetHostBytes sets Host header value. func (h *RequestHeader) SetHostBytes(host []byte) { - h.parseRawHeaders() h.host = append(h.host[:0], host...) } // UserAgent returns User-Agent header value. func (h *RequestHeader) UserAgent() []byte { - h.parseRawHeaders() return h.userAgent } // SetUserAgent sets User-Agent header value. func (h *RequestHeader) SetUserAgent(userAgent string) { - h.parseRawHeaders() h.userAgent = append(h.userAgent[:0], userAgent...) } // SetUserAgentBytes sets User-Agent header value. func (h *RequestHeader) SetUserAgentBytes(userAgent []byte) { - h.parseRawHeaders() h.userAgent = append(h.userAgent[:0], userAgent...) } @@ -473,7 +586,7 @@ func (h *RequestHeader) SetRefererBytes(referer []byte) { // Method returns HTTP request method. func (h *RequestHeader) Method() []byte { if len(h.method) == 0 { - return strGet + return []byte(MethodGet) } return h.method } @@ -488,6 +601,26 @@ func (h *RequestHeader) SetMethodBytes(method []byte) { h.method = append(h.method[:0], method...) } +// Protocol returns HTTP protocol. +func (h *RequestHeader) Protocol() []byte { + if len(h.proto) == 0 { + return strHTTP11 + } + return h.proto +} + +// SetProtocol sets HTTP request protocol. +func (h *RequestHeader) SetProtocol(method string) { + h.proto = append(h.proto[:0], method...) + h.noHTTP11 = !bytes.Equal(h.proto, strHTTP11) +} + +// SetProtocolBytes sets HTTP request protocol. +func (h *RequestHeader) SetProtocolBytes(method []byte) { + h.proto = append(h.proto[:0], method...) + h.noHTTP11 = !bytes.Equal(h.proto, strHTTP11) +} + // RequestURI returns RequestURI from the first HTTP request line. func (h *RequestHeader) RequestURI() []byte { requestURI := h.requestURI @@ -511,49 +644,158 @@ func (h *RequestHeader) SetRequestURIBytes(requestURI []byte) { h.requestURI = append(h.requestURI[:0], requestURI...) } +// SetTrailer sets Trailer header value for chunked request +// to indicate which headers will be sent after the body. +// +// Use Set to set the trailer header later. +// +// Trailers are only supported with chunked transfer. +// Trailers allow the sender to include additional headers at the end of chunked messages. +// +// The following trailers are forbidden: +// 1. necessary for message framing (e.g., Transfer-Encoding and Content-Length), +// 2. routing (e.g., Host), +// 3. request modifiers (e.g., controls and conditionals in Section 5 of [RFC7231]), +// 4. authentication (e.g., see [RFC7235] and [RFC6265]), +// 5. response control data (e.g., see Section 7.1 of [RFC7231]), +// 6. determining how to process the payload (e.g., Content-Encoding, Content-Type, Content-Range, and Trailer) +// +// Return ErrBadTrailer if contain any forbidden trailers. +func (h *RequestHeader) SetTrailer(trailer string) error { + return h.SetTrailerBytes(s2b(trailer)) +} + +// SetTrailerBytes sets Trailer header value for chunked request +// to indicate which headers will be sent after the body. +// +// Use Set to set the trailer header later. +// +// Trailers are only supported with chunked transfer. +// Trailers allow the sender to include additional headers at the end of chunked messages. +// +// The following trailers are forbidden: +// 1. necessary for message framing (e.g., Transfer-Encoding and Content-Length), +// 2. routing (e.g., Host), +// 3. request modifiers (e.g., controls and conditionals in Section 5 of [RFC7231]), +// 4. authentication (e.g., see [RFC7235] and [RFC6265]), +// 5. response control data (e.g., see Section 7.1 of [RFC7231]), +// 6. determining how to process the payload (e.g., Content-Encoding, Content-Type, Content-Range, and Trailer) +// +// Return ErrBadTrailer if contain any forbidden trailers. +func (h *RequestHeader) SetTrailerBytes(trailer []byte) error { + h.trailer = h.trailer[:0] + return h.AddTrailerBytes(trailer) +} + +// AddTrailer add Trailer header value for chunked request +// to indicate which headers will be sent after the body. +// +// Use Set to set the trailer header later. +// +// Trailers are only supported with chunked transfer. +// Trailers allow the sender to include additional headers at the end of chunked messages. +// +// The following trailers are forbidden: +// 1. necessary for message framing (e.g., Transfer-Encoding and Content-Length), +// 2. routing (e.g., Host), +// 3. request modifiers (e.g., controls and conditionals in Section 5 of [RFC7231]), +// 4. authentication (e.g., see [RFC7235] and [RFC6265]), +// 5. response control data (e.g., see Section 7.1 of [RFC7231]), +// 6. determining how to process the payload (e.g., Content-Encoding, Content-Type, Content-Range, and Trailer) +// +// Return ErrBadTrailer if contain any forbidden trailers. +func (h *RequestHeader) AddTrailer(trailer string) error { + return h.AddTrailerBytes(s2b(trailer)) +} + +// AddTrailerBytes add Trailer header value for chunked request +// to indicate which headers will be sent after the body. +// +// Use Set to set the trailer header later. +// +// Trailers are only supported with chunked transfer. +// Trailers allow the sender to include additional headers at the end of chunked messages. +// +// The following trailers are forbidden: +// 1. necessary for message framing (e.g., Transfer-Encoding and Content-Length), +// 2. routing (e.g., Host), +// 3. request modifiers (e.g., controls and conditionals in Section 5 of [RFC7231]), +// 4. authentication (e.g., see [RFC7235] and [RFC6265]), +// 5. response control data (e.g., see Section 7.1 of [RFC7231]), +// 6. determining how to process the payload (e.g., Content-Encoding, Content-Type, Content-Range, and Trailer) +// +// Return ErrBadTrailer if contain any forbidden trailers. +func (h *RequestHeader) AddTrailerBytes(trailer []byte) error { + var err error + for i := -1; i+1 < len(trailer); { + trailer = trailer[i+1:] + i = bytes.IndexByte(trailer, ',') + if i < 0 { + i = len(trailer) + } + key := trailer[:i] + for len(key) > 0 && key[0] == ' ' { + key = key[1:] + } + for len(key) > 0 && key[len(key)-1] == ' ' { + key = key[:len(key)-1] + } + // Forbidden by RFC 7230, section 4.1.2 + if isBadTrailer(key) { + err = ErrBadTrailer + continue + } + h.bufKV.key = append(h.bufKV.key[:0], key...) + normalizeHeaderKey(h.bufKV.key, h.disableNormalizing) + h.trailer = appendArgBytes(h.trailer, h.bufKV.key, nil, argsNoValue) + } + + return err +} + // IsGet returns true if request method is GET. func (h *RequestHeader) IsGet() bool { - return bytes.Equal(h.Method(), strGet) + return string(h.Method()) == MethodGet } // IsPost returns true if request method is POST. func (h *RequestHeader) IsPost() bool { - return bytes.Equal(h.Method(), strPost) + return string(h.Method()) == MethodPost } // IsPut returns true if request method is PUT. func (h *RequestHeader) IsPut() bool { - return bytes.Equal(h.Method(), strPut) + return string(h.Method()) == MethodPut } // IsHead returns true if request method is HEAD. func (h *RequestHeader) IsHead() bool { - return bytes.Equal(h.Method(), strHead) + return string(h.Method()) == MethodHead } // IsDelete returns true if request method is DELETE. func (h *RequestHeader) IsDelete() bool { - return bytes.Equal(h.Method(), strDelete) + return string(h.Method()) == MethodDelete } // IsConnect returns true if request method is CONNECT. func (h *RequestHeader) IsConnect() bool { - return bytes.Equal(h.Method(), strConnect) + return string(h.Method()) == MethodConnect } // IsOptions returns true if request method is OPTIONS. func (h *RequestHeader) IsOptions() bool { - return bytes.Equal(h.Method(), strOptions) + return string(h.Method()) == MethodOptions } // IsTrace returns true if request method is TRACE. func (h *RequestHeader) IsTrace() bool { - return bytes.Equal(h.Method(), strTrace) + return string(h.Method()) == MethodTrace } // IsPatch returns true if request method is PATCH. func (h *RequestHeader) IsPatch() bool { - return bytes.Equal(h.Method(), strPatch) + return string(h.Method()) == MethodPatch } // IsHTTP11 returns true if the request is HTTP/1.1. @@ -623,6 +865,22 @@ func (h *RequestHeader) DisableNormalizing() { h.disableNormalizing = true } +// EnableNormalizing enables header names' normalization. +// +// Header names are normalized by uppercasing the first letter and +// all the first letters following dashes, while lowercasing all +// the other letters. +// Examples: +// +// * CONNECTION -> Connection +// * conteNT-tYPE -> Content-Type +// * foo-bar-baz -> Foo-Bar-Baz +// +// This is enabled by default unless disabled using DisableNormalizing() +func (h *RequestHeader) EnableNormalizing() { + h.disableNormalizing = false +} + // DisableNormalizing disables header names' normalization. // // By default all the header names are normalized by uppercasing @@ -639,10 +897,32 @@ func (h *ResponseHeader) DisableNormalizing() { h.disableNormalizing = true } +// EnableNormalizing enables header names' normalization. +// +// Header names are normalized by uppercasing the first letter and +// all the first letters following dashes, while lowercasing all +// the other letters. +// Examples: +// +// * CONNECTION -> Connection +// * conteNT-tYPE -> Content-Type +// * foo-bar-baz -> Foo-Bar-Baz +// +// This is enabled by default unless disabled using DisableNormalizing() +func (h *ResponseHeader) EnableNormalizing() { + h.disableNormalizing = false +} + +// SetNoDefaultContentType allows you to control if a default Content-Type header will be set (false) or not (true). +func (h *ResponseHeader) SetNoDefaultContentType(noDefaultContentType bool) { + h.noDefaultContentType = noDefaultContentType +} + // Reset clears response header. func (h *ResponseHeader) Reset() { h.disableNormalizing = false - h.noDefaultContentType = false + h.SetNoDefaultContentType(false) + h.noDefaultDate = false h.resetSkipNormalize() } @@ -651,6 +931,8 @@ func (h *ResponseHeader) resetSkipNormalize() { h.connectionClose = false h.statusCode = 0 + h.statusMessage = h.statusMessage[:0] + h.protocol = h.protocol[:0] h.contentLength = 0 h.contentLengthBytes = h.contentLengthBytes[:0] @@ -659,11 +941,18 @@ func (h *ResponseHeader) resetSkipNormalize() { h.h = h.h[:0] h.cookies = h.cookies[:0] + h.trailer = h.trailer[:0] +} + +// SetNoDefaultContentType allows you to control if a default Content-Type header will be set (false) or not (true). +func (h *RequestHeader) SetNoDefaultContentType(noDefaultContentType bool) { + h.noDefaultContentType = noDefaultContentType } // Reset clears request header. func (h *RequestHeader) Reset() { h.disableNormalizing = false + h.SetNoDefaultContentType(false) h.resetSkipNormalize() } @@ -675,17 +964,18 @@ func (h *RequestHeader) resetSkipNormalize() { h.contentLengthBytes = h.contentLengthBytes[:0] h.method = h.method[:0] + h.proto = h.proto[:0] h.requestURI = h.requestURI[:0] h.host = h.host[:0] h.contentType = h.contentType[:0] h.userAgent = h.userAgent[:0] + h.trailer = h.trailer[:0] h.h = h.h[:0] h.cookies = h.cookies[:0] h.cookiesCollected = false h.rawHeaders = h.rawHeaders[:0] - h.rawHeadersParsed = false } // CopyTo copies all the headers to dst. @@ -696,14 +986,18 @@ func (h *ResponseHeader) CopyTo(dst *ResponseHeader) { dst.noHTTP11 = h.noHTTP11 dst.connectionClose = h.connectionClose dst.noDefaultContentType = h.noDefaultContentType + dst.noDefaultDate = h.noDefaultDate dst.statusCode = h.statusCode + dst.statusMessage = append(dst.statusMessage, h.statusMessage...) + dst.protocol = append(dst.protocol, h.protocol...) dst.contentLength = h.contentLength - dst.contentLengthBytes = append(dst.contentLengthBytes[:0], h.contentLengthBytes...) - dst.contentType = append(dst.contentType[:0], h.contentType...) - dst.server = append(dst.server[:0], h.server...) + dst.contentLengthBytes = append(dst.contentLengthBytes, h.contentLengthBytes...) + dst.contentType = append(dst.contentType, h.contentType...) + dst.server = append(dst.server, h.server...) dst.h = copyArgs(dst.h, h.h) dst.cookies = copyArgs(dst.cookies, h.cookies) + dst.trailer = copyArgs(dst.trailer, h.trailer) } // CopyTo copies all the headers to dst. @@ -715,18 +1009,18 @@ func (h *RequestHeader) CopyTo(dst *RequestHeader) { dst.connectionClose = h.connectionClose dst.contentLength = h.contentLength - dst.contentLengthBytes = append(dst.contentLengthBytes[:0], h.contentLengthBytes...) - dst.method = append(dst.method[:0], h.method...) - dst.requestURI = append(dst.requestURI[:0], h.requestURI...) - dst.host = append(dst.host[:0], h.host...) - dst.contentType = append(dst.contentType[:0], h.contentType...) - dst.userAgent = append(dst.userAgent[:0], h.userAgent...) + dst.contentLengthBytes = append(dst.contentLengthBytes, h.contentLengthBytes...) + dst.method = append(dst.method, h.method...) + dst.proto = append(dst.proto, h.proto...) + dst.requestURI = append(dst.requestURI, h.requestURI...) + dst.host = append(dst.host, h.host...) + dst.contentType = append(dst.contentType, h.contentType...) + dst.userAgent = append(dst.userAgent, h.userAgent...) + dst.trailer = append(dst.trailer, h.trailer...) dst.h = copyArgs(dst.h, h.h) dst.cookies = copyArgs(dst.cookies, h.cookies) dst.cookiesCollected = h.cookiesCollected - dst.rawHeaders = append(dst.rawHeaders[:0], h.rawHeaders...) - dst.rawHeadersParsed = h.rawHeadersParsed - dst.rawHeadersCopy = append(dst.rawHeadersCopy[:0], h.rawHeadersCopy...) + dst.rawHeaders = append(dst.rawHeaders, h.rawHeaders...) } // VisitAll calls f for each header. @@ -750,12 +1044,29 @@ func (h *ResponseHeader) VisitAll(f func(key, value []byte)) { f(strSetCookie, v) }) } + if len(h.trailer) > 0 { + f(strTrailer, appendArgsKeyBytes(nil, h.trailer, strCommaSpace)) + } visitArgs(h.h, f) if h.ConnectionClose() { f(strConnection, strClose) } } +// VisitAllTrailer calls f for each response Trailer. +// +// f must not retain references to value after returning. +func (h *ResponseHeader) VisitAllTrailer(f func(value []byte)) { + visitArgsKey(h.trailer, f) +} + +// VisitAllTrailer calls f for each request Trailer. +// +// f must not retain references to value after returning. +func (h *RequestHeader) VisitAllTrailer(f func(value []byte)) { + visitArgsKey(h.trailer, f) +} + // VisitAllCookie calls f for each response cookie. // // Cookie name is passed in key and the whole Set-Cookie header value @@ -771,7 +1082,6 @@ func (h *ResponseHeader) VisitAllCookie(f func(key, value []byte)) { // // f must not retain references to key and/or value after returning. func (h *RequestHeader) VisitAllCookie(f func(key, value []byte)) { - h.parseRawHeaders() h.collectCookies() visitArgs(h.cookies, f) } @@ -783,7 +1093,6 @@ func (h *RequestHeader) VisitAllCookie(f func(key, value []byte)) { // // To get the headers in order they were received use VisitAllInOrder. func (h *RequestHeader) VisitAll(f func(key, value []byte)) { - h.parseRawHeaders() host := h.Host() if len(host) > 0 { f(strHost, host) @@ -799,6 +1108,9 @@ func (h *RequestHeader) VisitAll(f func(key, value []byte)) { if len(userAgent) > 0 { f(strUserAgent, userAgent) } + if len(h.trailer) > 0 { + f(strTrailer, appendArgsKeyBytes(nil, h.trailer, strCommaSpace)) + } h.collectCookies() if len(h.cookies) > 0 { @@ -819,7 +1131,6 @@ func (h *RequestHeader) VisitAll(f func(key, value []byte)) { // This function is slightly slower than VisitAll because it has to reparse the // raw headers to get the order. func (h *RequestHeader) VisitAllInOrder(f func(key, value []byte)) { - h.parseRawHeaders() var s headerScanner s.b = h.rawHeaders s.disableNormalizing = h.disableNormalizing @@ -856,20 +1167,20 @@ func (h *ResponseHeader) del(key []byte) { h.contentLengthBytes = h.contentLengthBytes[:0] case HeaderConnection: h.connectionClose = false + case HeaderTrailer: + h.trailer = h.trailer[:0] } h.h = delAllArgsBytes(h.h, key) } // Del deletes header with the given key. func (h *RequestHeader) Del(key string) { - h.parseRawHeaders() k := getHeaderKeyBytes(&h.bufKV, key, h.disableNormalizing) h.del(k) } // DelBytes deletes header with the given key. func (h *RequestHeader) DelBytes(key []byte) { - h.parseRawHeaders() h.bufKV.key = append(h.bufKV.key[:0], key...) normalizeHeaderKey(h.bufKV.key, h.disableNormalizing) h.del(h.bufKV.key) @@ -890,45 +1201,190 @@ func (h *RequestHeader) del(key []byte) { h.contentLengthBytes = h.contentLengthBytes[:0] case HeaderConnection: h.connectionClose = false + case HeaderTrailer: + h.trailer = h.trailer[:0] } h.h = delAllArgsBytes(h.h, key) } +// setSpecialHeader handles special headers and return true when a header is processed. +func (h *ResponseHeader) setSpecialHeader(key, value []byte) bool { + if len(key) == 0 { + return false + } + + switch key[0] | 0x20 { + case 'c': + if caseInsensitiveCompare(strContentType, key) { + h.SetContentTypeBytes(value) + return true + } else if caseInsensitiveCompare(strContentLength, key) { + if contentLength, err := parseContentLength(value); err == nil { + h.contentLength = contentLength + h.contentLengthBytes = append(h.contentLengthBytes[:0], value...) + } + return true + } else if caseInsensitiveCompare(strConnection, key) { + if bytes.Equal(strClose, value) { + h.SetConnectionClose() + } else { + h.ResetConnectionClose() + h.h = setArgBytes(h.h, key, value, argsHasValue) + } + return true + } + case 's': + if caseInsensitiveCompare(strServer, key) { + h.SetServerBytes(value) + return true + } else if caseInsensitiveCompare(strSetCookie, key) { + var kv *argsKV + h.cookies, kv = allocArg(h.cookies) + kv.key = getCookieKey(kv.key, value) + kv.value = append(kv.value[:0], value...) + return true + } + case 't': + if caseInsensitiveCompare(strTransferEncoding, key) { + // Transfer-Encoding is managed automatically. + return true + } else if caseInsensitiveCompare(strTrailer, key) { + _ = h.SetTrailerBytes(value) + return true + } + case 'd': + if caseInsensitiveCompare(strDate, key) { + // Date is managed automatically. + return true + } + } + + return false +} + +// setSpecialHeader handles special headers and return true when a header is processed. +func (h *RequestHeader) setSpecialHeader(key, value []byte) bool { + if len(key) == 0 { + return false + } + + switch key[0] | 0x20 { + case 'c': + if caseInsensitiveCompare(strContentType, key) { + h.SetContentTypeBytes(value) + return true + } else if caseInsensitiveCompare(strContentLength, key) { + if contentLength, err := parseContentLength(value); err == nil { + h.contentLength = contentLength + h.contentLengthBytes = append(h.contentLengthBytes[:0], value...) + } + return true + } else if caseInsensitiveCompare(strConnection, key) { + if bytes.Equal(strClose, value) { + h.SetConnectionClose() + } else { + h.ResetConnectionClose() + h.h = setArgBytes(h.h, key, value, argsHasValue) + } + return true + } else if caseInsensitiveCompare(strCookie, key) { + h.collectCookies() + h.cookies = parseRequestCookies(h.cookies, value) + return true + } + case 't': + if caseInsensitiveCompare(strTransferEncoding, key) { + // Transfer-Encoding is managed automatically. + return true + } else if caseInsensitiveCompare(strTrailer, key) { + _ = h.SetTrailerBytes(value) + return true + } + case 'h': + if caseInsensitiveCompare(strHost, key) { + h.SetHostBytes(value) + return true + } + case 'u': + if caseInsensitiveCompare(strUserAgent, key) { + h.SetUserAgentBytes(value) + return true + } + } + + return false +} + // Add adds the given 'key: value' header. // // Multiple headers with the same key may be added with this function. // Use Set for setting a single header for the given key. +// +// the Content-Type, Content-Length, Connection, Server, Set-Cookie, +// Transfer-Encoding and Date headers can only be set once and will +// overwrite the previous value. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see AddTrailer for more details), +// it will be sent after the chunked response body. func (h *ResponseHeader) Add(key, value string) { - k := getHeaderKeyBytes(&h.bufKV, key, h.disableNormalizing) - h.h = appendArg(h.h, b2s(k), value, argsHasValue) + h.AddBytesKV(s2b(key), s2b(value)) } // AddBytesK adds the given 'key: value' header. // // Multiple headers with the same key may be added with this function. // Use SetBytesK for setting a single header for the given key. +// +// the Content-Type, Content-Length, Connection, Server, Set-Cookie, +// Transfer-Encoding and Date headers can only be set once and will +// overwrite the previous value. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see AddTrailer for more details), +// it will be sent after the chunked response body. func (h *ResponseHeader) AddBytesK(key []byte, value string) { - h.Add(b2s(key), value) + h.AddBytesKV(key, s2b(value)) } // AddBytesV adds the given 'key: value' header. // // Multiple headers with the same key may be added with this function. // Use SetBytesV for setting a single header for the given key. +// +// the Content-Type, Content-Length, Connection, Server, Set-Cookie, +// Transfer-Encoding and Date headers can only be set once and will +// overwrite the previous value. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see AddTrailer for more details), +// it will be sent after the chunked response body. func (h *ResponseHeader) AddBytesV(key string, value []byte) { - h.Add(key, b2s(value)) + h.AddBytesKV(s2b(key), value) } // AddBytesKV adds the given 'key: value' header. // // Multiple headers with the same key may be added with this function. // Use SetBytesKV for setting a single header for the given key. +// +// the Content-Type, Content-Length, Connection, Server, Set-Cookie, +// Transfer-Encoding and Date headers can only be set once and will +// overwrite the previous value. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see AddTrailer for more details), +// it will be sent after the chunked response body. func (h *ResponseHeader) AddBytesKV(key, value []byte) { - h.Add(b2s(key), b2s(value)) + if h.setSpecialHeader(key, value) { + return + } + + k := getHeaderKeyBytes(&h.bufKV, b2s(key), h.disableNormalizing) + h.h = appendArgBytes(h.h, k, value, argsHasValue) } // Set sets the given 'key: value' header. // +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked response body. +// // Use Add for setting multiple header values under the same key. func (h *ResponseHeader) Set(key, value string) { initHeaderKV(&h.bufKV, key, value, h.disableNormalizing) @@ -937,6 +1393,9 @@ func (h *ResponseHeader) Set(key, value string) { // SetBytesK sets the given 'key: value' header. // +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked response body. +// // Use AddBytesK for setting multiple header values under the same key. func (h *ResponseHeader) SetBytesK(key []byte, value string) { h.bufKV.value = append(h.bufKV.value[:0], value...) @@ -945,6 +1404,9 @@ func (h *ResponseHeader) SetBytesK(key []byte, value string) { // SetBytesV sets the given 'key: value' header. // +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked response body. +// // Use AddBytesV for setting multiple header values under the same key. func (h *ResponseHeader) SetBytesV(key string, value []byte) { k := getHeaderKeyBytes(&h.bufKV, key, h.disableNormalizing) @@ -953,6 +1415,9 @@ func (h *ResponseHeader) SetBytesV(key string, value []byte) { // SetBytesKV sets the given 'key: value' header. // +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked response body. +// // Use AddBytesKV for setting multiple header values under the same key. func (h *ResponseHeader) SetBytesKV(key, value []byte) { h.bufKV.key = append(h.bufKV.key[:0], key...) @@ -962,36 +1427,15 @@ func (h *ResponseHeader) SetBytesKV(key, value []byte) { // SetCanonical sets the given 'key: value' header assuming that // key is in canonical form. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked response body. func (h *ResponseHeader) SetCanonical(key, value []byte) { - switch string(key) { - case HeaderContentType: - h.SetContentTypeBytes(value) - case HeaderServer: - h.SetServerBytes(value) - case HeaderSetCookie: - var kv *argsKV - h.cookies, kv = allocArg(h.cookies) - kv.key = getCookieKey(kv.key, value) - kv.value = append(kv.value[:0], value...) - case HeaderContentLength: - if contentLength, err := parseContentLength(value); err == nil { - h.contentLength = contentLength - h.contentLengthBytes = append(h.contentLengthBytes[:0], value...) - } - case HeaderConnection: - if bytes.Equal(strClose, value) { - h.SetConnectionClose() - } else { - h.ResetConnectionClose() - h.h = setArgBytes(h.h, key, value, argsHasValue) - } - case HeaderTransferEncoding: - // Transfer-Encoding is managed automatically. - case HeaderDate: - // Date is managed automatically. - default: - h.h = setArgBytes(h.h, key, value, argsHasValue) + if h.setSpecialHeader(key, value) { + return } + + h.h = setArgBytes(h.h, key, value, argsHasValue) } // SetCookie sets the given response cookie. @@ -1003,7 +1447,6 @@ func (h *ResponseHeader) SetCookie(cookie *Cookie) { // SetCookie sets 'key: value' cookies. func (h *RequestHeader) SetCookie(key, value string) { - h.parseRawHeaders() h.collectCookies() h.cookies = setArg(h.cookies, key, value, argsHasValue) } @@ -1019,6 +1462,16 @@ func (h *RequestHeader) SetCookieBytesKV(key, value []byte) { } // DelClientCookie instructs the client to remove the given cookie. +// This doesn't work for a cookie with specific domain or path, +// you should delete it manually like: +// +// c := AcquireCookie() +// c.SetKey(key) +// c.SetDomain("example.com") +// c.SetPath("/path") +// c.SetExpire(CookieExpireDelete) +// h.SetCookie(c) +// ReleaseCookie(c) // // Use DelCookie if you want just removing the cookie from response header. func (h *ResponseHeader) DelClientCookie(key string) { @@ -1032,6 +1485,16 @@ func (h *ResponseHeader) DelClientCookie(key string) { } // DelClientCookieBytes instructs the client to remove the given cookie. +// This doesn't work for a cookie with specific domain or path, +// you should delete it manually like: +// +// c := AcquireCookie() +// c.SetKey(key) +// c.SetDomain("example.com") +// c.SetPath("/path") +// c.SetExpire(CookieExpireDelete) +// h.SetCookie(c) +// ReleaseCookie(c) // // Use DelCookieBytes if you want just removing the cookie from response header. func (h *ResponseHeader) DelClientCookieBytes(key []byte) { @@ -1056,7 +1519,6 @@ func (h *ResponseHeader) DelCookieBytes(key []byte) { // DelCookie removes cookie under the given key. func (h *RequestHeader) DelCookie(key string) { - h.parseRawHeaders() h.collectCookies() h.cookies = delAllArgs(h.cookies, key) } @@ -1073,7 +1535,6 @@ func (h *ResponseHeader) DelAllCookies() { // DelAllCookies removes all the cookies from request headers. func (h *RequestHeader) DelAllCookies() { - h.parseRawHeaders() h.collectCookies() h.cookies = h.cookies[:0] } @@ -1082,37 +1543,60 @@ func (h *RequestHeader) DelAllCookies() { // // Multiple headers with the same key may be added with this function. // Use Set for setting a single header for the given key. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see AddTrailer for more details), +// it will be sent after the chunked request body. func (h *RequestHeader) Add(key, value string) { - k := getHeaderKeyBytes(&h.bufKV, key, h.disableNormalizing) - h.h = appendArg(h.h, b2s(k), value, argsHasValue) + h.AddBytesKV(s2b(key), s2b(value)) } // AddBytesK adds the given 'key: value' header. // // Multiple headers with the same key may be added with this function. // Use SetBytesK for setting a single header for the given key. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see AddTrailer for more details), +// it will be sent after the chunked request body. func (h *RequestHeader) AddBytesK(key []byte, value string) { - h.Add(b2s(key), value) + h.AddBytesKV(key, s2b(value)) } // AddBytesV adds the given 'key: value' header. // // Multiple headers with the same key may be added with this function. // Use SetBytesV for setting a single header for the given key. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see AddTrailer for more details), +// it will be sent after the chunked request body. func (h *RequestHeader) AddBytesV(key string, value []byte) { - h.Add(key, b2s(value)) + h.AddBytesKV(s2b(key), value) } // AddBytesKV adds the given 'key: value' header. // // Multiple headers with the same key may be added with this function. // Use SetBytesKV for setting a single header for the given key. +// +// the Content-Type, Content-Length, Connection, Cookie, +// Transfer-Encoding, Host and User-Agent headers can only be set once +// and will overwrite the previous value. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see AddTrailer for more details), +// it will be sent after the chunked request body. func (h *RequestHeader) AddBytesKV(key, value []byte) { - h.Add(b2s(key), b2s(value)) + if h.setSpecialHeader(key, value) { + return + } + + k := getHeaderKeyBytes(&h.bufKV, b2s(key), h.disableNormalizing) + h.h = appendArgBytes(h.h, k, value, argsHasValue) } // Set sets the given 'key: value' header. // +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked request body. +// // Use Add for setting multiple header values under the same key. func (h *RequestHeader) Set(key, value string) { initHeaderKV(&h.bufKV, key, value, h.disableNormalizing) @@ -1121,6 +1605,9 @@ func (h *RequestHeader) Set(key, value string) { // SetBytesK sets the given 'key: value' header. // +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked request body. +// // Use AddBytesK for setting multiple header values under the same key. func (h *RequestHeader) SetBytesK(key []byte, value string) { h.bufKV.value = append(h.bufKV.value[:0], value...) @@ -1129,6 +1616,9 @@ func (h *RequestHeader) SetBytesK(key []byte, value string) { // SetBytesV sets the given 'key: value' header. // +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked request body. +// // Use AddBytesV for setting multiple header values under the same key. func (h *RequestHeader) SetBytesV(key string, value []byte) { k := getHeaderKeyBytes(&h.bufKV, key, h.disableNormalizing) @@ -1137,6 +1627,9 @@ func (h *RequestHeader) SetBytesV(key string, value []byte) { // SetBytesKV sets the given 'key: value' header. // +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked request body. +// // Use AddBytesKV for setting multiple header values under the same key. func (h *RequestHeader) SetBytesKV(key, value []byte) { h.bufKV.key = append(h.bufKV.key[:0], key...) @@ -1146,41 +1639,22 @@ func (h *RequestHeader) SetBytesKV(key, value []byte) { // SetCanonical sets the given 'key: value' header assuming that // key is in canonical form. +// +// If the header is set as a Trailer (forbidden trailers will not be set, see SetTrailer for more details), +// it will be sent after the chunked request body. func (h *RequestHeader) SetCanonical(key, value []byte) { - h.parseRawHeaders() - switch string(key) { - case HeaderHost: - h.SetHostBytes(value) - case HeaderContentType: - h.SetContentTypeBytes(value) - case HeaderUserAgent: - h.SetUserAgentBytes(value) - case HeaderCookie: - h.collectCookies() - h.cookies = parseRequestCookies(h.cookies, value) - case HeaderContentLength: - if contentLength, err := parseContentLength(value); err == nil { - h.contentLength = contentLength - h.contentLengthBytes = append(h.contentLengthBytes[:0], value...) - } - case HeaderConnection: - if bytes.Equal(strClose, value) { - h.SetConnectionClose() - } else { - h.ResetConnectionClose() - h.h = setArgBytes(h.h, key, value, argsHasValue) - } - case HeaderTransferEncoding: - // Transfer-Encoding is managed automatically. - default: - h.h = setArgBytes(h.h, key, value, argsHasValue) + if h.setSpecialHeader(key, value) { + return } + + h.h = setArgBytes(h.h, key, value, argsHasValue) } // Peek returns header value for the given key. // -// Returned value is valid until the next call to ResponseHeader. -// Do not store references to returned value. Make copies instead. +// The returned value is valid until the response is released, +// either though ReleaseResponse or your request handler returning. +// Do not store references to the returned value. Make copies instead. func (h *ResponseHeader) Peek(key string) []byte { k := getHeaderKeyBytes(&h.bufKV, key, h.disableNormalizing) return h.peek(k) @@ -1188,7 +1662,8 @@ func (h *ResponseHeader) Peek(key string) []byte { // PeekBytes returns header value for the given key. // -// Returned value is valid until the next call to ResponseHeader. +// The returned value is valid until the response is released, +// either though ReleaseResponse or your request handler returning. // Do not store references to returned value. Make copies instead. func (h *ResponseHeader) PeekBytes(key []byte) []byte { h.bufKV.key = append(h.bufKV.key[:0], key...) @@ -1198,7 +1673,8 @@ func (h *ResponseHeader) PeekBytes(key []byte) []byte { // Peek returns header value for the given key. // -// Returned value is valid until the next call to RequestHeader. +// The returned value is valid until the request is released, +// either though ReleaseRequest or your request handler returning. // Do not store references to returned value. Make copies instead. func (h *RequestHeader) Peek(key string) []byte { k := getHeaderKeyBytes(&h.bufKV, key, h.disableNormalizing) @@ -1207,7 +1683,8 @@ func (h *RequestHeader) Peek(key string) []byte { // PeekBytes returns header value for the given key. // -// Returned value is valid until the next call to RequestHeader. +// The returned value is valid until the request is released, +// either though ReleaseRequest or your request handler returning. // Do not store references to returned value. Make copies instead. func (h *RequestHeader) PeekBytes(key []byte) []byte { h.bufKV.key = append(h.bufKV.key[:0], key...) @@ -1230,13 +1707,14 @@ func (h *ResponseHeader) peek(key []byte) []byte { return h.contentLengthBytes case HeaderSetCookie: return appendResponseCookieBytes(nil, h.cookies) + case HeaderTrailer: + return appendArgsKeyBytes(nil, h.trailer, strCommaSpace) default: return peekArgBytes(h.h, key) } } func (h *RequestHeader) peek(key []byte) []byte { - h.parseRawHeaders() switch string(key) { case HeaderHost: return h.Host() @@ -1256,6 +1734,8 @@ func (h *RequestHeader) peek(key []byte) []byte { return appendRequestCookieBytes(nil, h.cookies) } return peekArgBytes(h.h, key) + case HeaderTrailer: + return appendArgsKeyBytes(nil, h.trailer, strCommaSpace) default: return peekArgBytes(h.h, key) } @@ -1263,14 +1743,12 @@ func (h *RequestHeader) peek(key []byte) []byte { // Cookie returns cookie for the given key. func (h *RequestHeader) Cookie(key string) []byte { - h.parseRawHeaders() h.collectCookies() return peekArgStr(h.cookies, key) } // CookieBytes returns cookie for the given key. func (h *RequestHeader) CookieBytes(key []byte) []byte { - h.parseRawHeaders() h.collectCookies() return peekArgBytes(h.cookies, key) } @@ -1283,7 +1761,7 @@ func (h *ResponseHeader) Cookie(cookie *Cookie) bool { if v == nil { return false } - cookie.ParseBytes(v) + cookie.ParseBytes(v) //nolint:errcheck return true } @@ -1309,35 +1787,99 @@ func (h *ResponseHeader) tryRead(r *bufio.Reader, n int) error { h.resetSkipNormalize() b, err := r.Peek(n) if len(b) == 0 { - // treat all errors on the first byte read as EOF + // Return ErrTimeout on any timeout. + if x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() { + return ErrTimeout + } + // treat all other errors on the first byte read as EOF if n == 1 || err == io.EOF { return io.EOF } // This is for go 1.6 bug. See https://github.com/golang/go/issues/14121 . if err == bufio.ErrBufferFull { + if h.secureErrorLogMessage { + return &ErrSmallBuffer{ + error: fmt.Errorf("error when reading response headers"), + } + } return &ErrSmallBuffer{ - error: fmt.Errorf("error when reading response headers: %s", errSmallBuffer), + error: fmt.Errorf("error when reading response headers: %w", errSmallBuffer), } } - return fmt.Errorf("error when reading response headers: %s", err) + return fmt.Errorf("error when reading response headers: %w", err) } b = mustPeekBuffered(r) headersLen, errParse := h.parse(b) if errParse != nil { - return headerError("response", err, errParse, b) + return headerError("response", err, errParse, b, h.secureErrorLogMessage) } mustDiscard(r, headersLen) return nil } -func headerError(typ string, err, errParse error, b []byte) error { - if errParse != errNeedMore { - return headerErrorMsg(typ, errParse, b) - } - if err == nil { - return errNeedMore +// ReadTrailer reads response trailer header from r. +// +// io.EOF is returned if r is closed before reading the first byte. +func (h *ResponseHeader) ReadTrailer(r *bufio.Reader) error { + n := 1 + for { + err := h.tryReadTrailer(r, n) + if err == nil { + return nil + } + if err != errNeedMore { + return err + } + n = r.Buffered() + 1 + } +} + +func (h *ResponseHeader) tryReadTrailer(r *bufio.Reader, n int) error { + b, err := r.Peek(n) + if len(b) == 0 { + // Return ErrTimeout on any timeout. + if x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() { + return ErrTimeout + } + + if n == 1 || err == io.EOF { + return io.EOF + } + + // This is for go 1.6 bug. See https://github.com/golang/go/issues/14121 . + if err == bufio.ErrBufferFull { + if h.secureErrorLogMessage { + return &ErrSmallBuffer{ + error: fmt.Errorf("error when reading response trailer"), + } + } + return &ErrSmallBuffer{ + error: fmt.Errorf("error when reading response trailer: %w", errSmallBuffer), + } + } + + return fmt.Errorf("error when reading response trailer: %w", err) + } + b = mustPeekBuffered(r) + headersLen, errParse := h.parseTrailer(b) + if errParse != nil { + if err == io.EOF { + return err + } + return headerError("response", err, errParse, b, h.secureErrorLogMessage) + } + mustDiscard(r, headersLen) + return nil +} + +func headerError(typ string, err, errParse error, b []byte, secureErrorLogMessage bool) error { + if errParse != errNeedMore { + return headerErrorMsg(typ, errParse, b, secureErrorLogMessage) + } + if err == nil { + return errNeedMore } // Buggy servers may leave trailing CRLFs after http body. @@ -1347,28 +1889,38 @@ func headerError(typ string, err, errParse error, b []byte) error { } if err != bufio.ErrBufferFull { - return headerErrorMsg(typ, err, b) + return headerErrorMsg(typ, err, b, secureErrorLogMessage) } return &ErrSmallBuffer{ - error: headerErrorMsg(typ, errSmallBuffer, b), + error: headerErrorMsg(typ, errSmallBuffer, b, secureErrorLogMessage), } } -func headerErrorMsg(typ string, err error, b []byte) error { - return fmt.Errorf("error when reading %s headers: %s. Buffer size=%d, contents: %s", typ, err, len(b), bufferSnippet(b)) +func headerErrorMsg(typ string, err error, b []byte, secureErrorLogMessage bool) error { + if secureErrorLogMessage { + return fmt.Errorf("error when reading %s headers: %w. Buffer size=%d", typ, err, len(b)) + } + return fmt.Errorf("error when reading %s headers: %w. Buffer size=%d, contents: %s", typ, err, len(b), bufferSnippet(b)) } // Read reads request header from r. // // io.EOF is returned if r is closed before reading the first header byte. func (h *RequestHeader) Read(r *bufio.Reader) error { + return h.readLoop(r, true) +} + +// readLoop reads request header from r optionally loops until it has enough data. +// +// io.EOF is returned if r is closed before reading the first header byte. +func (h *RequestHeader) readLoop(r *bufio.Reader, waitForMore bool) error { n := 1 for { err := h.tryRead(r, n) if err == nil { return nil } - if err != errNeedMore { + if !waitForMore || err != errNeedMore { h.resetSkipNormalize() return err } @@ -1376,6 +1928,61 @@ func (h *RequestHeader) Read(r *bufio.Reader) error { } } +// ReadTrailer reads request trailer header from r. +// +// io.EOF is returned if r is closed before reading the first byte. +func (h *RequestHeader) ReadTrailer(r *bufio.Reader) error { + n := 1 + for { + err := h.tryReadTrailer(r, n) + if err == nil { + return nil + } + if err != errNeedMore { + return err + } + n = r.Buffered() + 1 + } +} + +func (h *RequestHeader) tryReadTrailer(r *bufio.Reader, n int) error { + b, err := r.Peek(n) + if len(b) == 0 { + // Return ErrTimeout on any timeout. + if x, ok := err.(interface{ Timeout() bool }); ok && x.Timeout() { + return ErrTimeout + } + + if n == 1 || err == io.EOF { + return io.EOF + } + + // This is for go 1.6 bug. See https://github.com/golang/go/issues/14121 . + if err == bufio.ErrBufferFull { + if h.secureErrorLogMessage { + return &ErrSmallBuffer{ + error: fmt.Errorf("error when reading request trailer"), + } + } + return &ErrSmallBuffer{ + error: fmt.Errorf("error when reading request trailer: %w", errSmallBuffer), + } + } + + return fmt.Errorf("error when reading request trailer: %w", err) + } + b = mustPeekBuffered(r) + headersLen, errParse := h.parseTrailer(b) + if errParse != nil { + if err == io.EOF { + return err + } + return headerError("request", err, errParse, b, h.secureErrorLogMessage) + } + mustDiscard(r, headersLen) + return nil +} + func (h *RequestHeader) tryRead(r *bufio.Reader, n int) error { h.resetSkipNormalize() b, err := r.Peek(n) @@ -1391,21 +1998,22 @@ func (h *RequestHeader) tryRead(r *bufio.Reader, n int) error { // This is for go 1.6 bug. See https://github.com/golang/go/issues/14121 . if err == bufio.ErrBufferFull { return &ErrSmallBuffer{ - error: fmt.Errorf("error when reading request headers: %s", errSmallBuffer), + error: fmt.Errorf("error when reading request headers: %w (n=%d, r.Buffered()=%d)", errSmallBuffer, n, r.Buffered()), } } + // n == 1 on the first read for the request. if n == 1 { // We didn't read a single byte. - return errNothingRead + return ErrNothingRead{err} } - return fmt.Errorf("error when reading request headers: %s", err) + return fmt.Errorf("error when reading request headers: %w", err) } b = mustPeekBuffered(r) headersLen, errParse := h.parse(b) if errParse != nil { - return headerError("request", err, errParse, b) + return headerError("request", err, errParse, b, h.secureErrorLogMessage) } mustDiscard(r, headersLen) return nil @@ -1428,14 +2036,14 @@ func bufferSnippet(b []byte) string { func isOnlyCRLF(b []byte) bool { for _, ch := range b { - if ch != '\r' && ch != '\n' { + if ch != rChar && ch != nChar { return false } } return true } -func init() { +func updateServerDate() { refreshServerDate() go func() { for { @@ -1445,7 +2053,10 @@ func init() { }() } -var serverDate atomic.Value +var ( + serverDate atomic.Value + serverDateOnce sync.Once // serverDateOnce.Do(updateServerDate) +) func refreshServerDate() { b := AppendHTTPDate(nil, time.Now()) @@ -1468,37 +2079,77 @@ func (h *ResponseHeader) WriteTo(w io.Writer) (int64, error) { // Header returns response header representation. // -// The returned value is valid until the next call to ResponseHeader methods. +// Headers that set as Trailer will not represent. Use TrailerHeader for trailers. +// +// The returned value is valid until the request is released, +// either though ReleaseRequest or your request handler returning. +// Do not store references to returned value. Make copies instead. func (h *ResponseHeader) Header() []byte { h.bufKV.value = h.AppendBytes(h.bufKV.value[:0]) return h.bufKV.value } +// writeTrailer writes response trailer to w. +func (h *ResponseHeader) writeTrailer(w *bufio.Writer) error { + _, err := w.Write(h.TrailerHeader()) + return err +} + +// TrailerHeader returns response trailer header representation. +// +// Trailers will only be received with chunked transfer. +// +// The returned value is valid until the request is released, +// either though ReleaseRequest or your request handler returning. +// Do not store references to returned value. Make copies instead. +func (h *ResponseHeader) TrailerHeader() []byte { + h.bufKV.value = h.bufKV.value[:0] + for _, t := range h.trailer { + value := h.peek(t.key) + h.bufKV.value = appendHeaderLine(h.bufKV.value, t.key, value) + } + h.bufKV.value = append(h.bufKV.value, strCRLF...) + return h.bufKV.value +} + // String returns response header representation. func (h *ResponseHeader) String() string { return string(h.Header()) } -// AppendBytes appends response header representation to dst and returns +// appendStatusLine appends the response status line to dst and returns // the extended dst. -func (h *ResponseHeader) AppendBytes(dst []byte) []byte { +func (h *ResponseHeader) appendStatusLine(dst []byte) []byte { statusCode := h.StatusCode() if statusCode < 0 { statusCode = StatusOK } - dst = append(dst, statusLine(statusCode)...) + return formatStatusLine(dst, h.Protocol(), statusCode, h.StatusMessage()) +} + +// AppendBytes appends response header representation to dst and returns +// the extended dst. +func (h *ResponseHeader) AppendBytes(dst []byte) []byte { + dst = h.appendStatusLine(dst[:0]) server := h.Server() if len(server) != 0 { dst = appendHeaderLine(dst, strServer, server) } - dst = appendHeaderLine(dst, strDate, serverDate.Load().([]byte)) + + if !h.noDefaultDate { + serverDateOnce.Do(updateServerDate) + dst = appendHeaderLine(dst, strDate, serverDate.Load().([]byte)) + } // Append Content-Type only for non-zero responses // or if it is explicitly set. // See https://github.com/valyala/fasthttp/issues/28 . if h.ContentLength() != 0 || len(h.contentType) > 0 { - dst = appendHeaderLine(dst, strContentType, h.ContentType()) + contentType := h.ContentType() + if len(contentType) > 0 { + dst = appendHeaderLine(dst, strContentType, contentType) + } } if len(h.contentLengthBytes) > 0 { @@ -1507,11 +2158,24 @@ func (h *ResponseHeader) AppendBytes(dst []byte) []byte { for i, n := 0, len(h.h); i < n; i++ { kv := &h.h[i] - if !bytes.Equal(kv.key, strDate) { + + // Exclude trailer from header + exclude := false + for _, t := range h.trailer { + if bytes.Equal(kv.key, t.key) { + exclude = true + break + } + } + if !exclude && (h.noDefaultDate || !bytes.Equal(kv.key, strDate)) { dst = appendHeaderLine(dst, kv.key, kv.value) } } + if len(h.trailer) > 0 { + dst = appendHeaderLine(dst, strTrailer, appendArgsKeyBytes(nil, h.trailer, strCommaSpace)) + } + n := len(h.cookies) if n > 0 { for i := 0; i < n; i++ { @@ -1543,12 +2207,39 @@ func (h *RequestHeader) WriteTo(w io.Writer) (int64, error) { // Header returns request header representation. // -// The returned representation is valid until the next call to RequestHeader methods. +// Headers that set as Trailer will not represent. Use TrailerHeader for trailers. +// +// The returned value is valid until the request is released, +// either though ReleaseRequest or your request handler returning. +// Do not store references to returned value. Make copies instead. func (h *RequestHeader) Header() []byte { h.bufKV.value = h.AppendBytes(h.bufKV.value[:0]) return h.bufKV.value } +// writeTrailer writes request trailer to w. +func (h *RequestHeader) writeTrailer(w *bufio.Writer) error { + _, err := w.Write(h.TrailerHeader()) + return err +} + +// TrailerHeader returns request trailer header representation. +// +// Trailers will only be received with chunked transfer. +// +// The returned value is valid until the request is released, +// either though ReleaseRequest or your request handler returning. +// Do not store references to returned value. Make copies instead. +func (h *RequestHeader) TrailerHeader() []byte { + h.bufKV.value = h.bufKV.value[:0] + for _, t := range h.trailer { + value := h.peek(t.key) + h.bufKV.value = appendHeaderLine(h.bufKV.value, t.key, value) + } + h.bufKV.value = append(h.bufKV.value, strCRLF...) + return h.bufKV.value +} + // RawHeaders returns raw header key/value bytes. // // Depending on server configuration, header keys may be normalized to @@ -1560,7 +2251,7 @@ func (h *RequestHeader) Header() []byte { // // The slice is not safe to use after the handler returns. func (h *RequestHeader) RawHeaders() []byte { - return h.rawHeadersCopy + return h.rawHeaders } // String returns request header representation. @@ -1571,18 +2262,13 @@ func (h *RequestHeader) String() string { // AppendBytes appends request header representation to dst and returns // the extended dst. func (h *RequestHeader) AppendBytes(dst []byte) []byte { - // there is no need in h.parseRawHeaders() here - raw headers are specially handled below. dst = append(dst, h.Method()...) dst = append(dst, ' ') dst = append(dst, h.RequestURI()...) dst = append(dst, ' ') - dst = append(dst, strHTTP11...) + dst = append(dst, h.Protocol()...) dst = append(dst, strCRLF...) - if !h.rawHeadersParsed && len(h.rawHeaders) > 0 { - return append(dst, h.rawHeaders...) - } - userAgent := h.UserAgent() if len(userAgent) > 0 { dst = appendHeaderLine(dst, strUserAgent, userAgent) @@ -1594,22 +2280,33 @@ func (h *RequestHeader) AppendBytes(dst []byte) []byte { } contentType := h.ContentType() - if !h.ignoreBody() { - if len(contentType) == 0 { - contentType = strPostArgsContentType - } - dst = appendHeaderLine(dst, strContentType, contentType) - - if len(h.contentLengthBytes) > 0 { - dst = appendHeaderLine(dst, strContentLength, h.contentLengthBytes) - } - } else if len(contentType) > 0 { + if !h.noDefaultContentType && len(contentType) == 0 && !h.ignoreBody() { + contentType = strDefaultContentType + } + if len(contentType) > 0 { dst = appendHeaderLine(dst, strContentType, contentType) } + if len(h.contentLengthBytes) > 0 { + dst = appendHeaderLine(dst, strContentLength, h.contentLengthBytes) + } for i, n := 0, len(h.h); i < n; i++ { kv := &h.h[i] - dst = appendHeaderLine(dst, kv.key, kv.value) + // Exclude trailer from header + exclude := false + for _, t := range h.trailer { + if bytes.Equal(kv.key, t.key) { + exclude = true + break + } + } + if !exclude { + dst = appendHeaderLine(dst, kv.key, kv.value) + } + } + + if len(h.trailer) > 0 { + dst = appendHeaderLine(dst, strTrailer, appendArgsKeyBytes(nil, h.trailer, strCommaSpace)) } // there is no need in h.collectCookies() here, since if cookies aren't collected yet, @@ -1648,6 +2345,43 @@ func (h *ResponseHeader) parse(buf []byte) (int, error) { return m + n, nil } +func (h *ResponseHeader) parseTrailer(buf []byte) (int, error) { + // Skip any 0 length chunk. + if buf[0] == '0' { + skip := len(strCRLF) + 1 + if len(buf) < skip { + return 0, io.EOF + } + buf = buf[skip:] + } + + var s headerScanner + s.b = buf + s.disableNormalizing = h.disableNormalizing + var err error + for s.next() { + if len(s.key) > 0 { + if bytes.IndexByte(s.key, ' ') != -1 || bytes.IndexByte(s.key, '\t') != -1 { + err = fmt.Errorf("invalid trailer key %q", s.key) + continue + } + // Forbidden by RFC 7230, section 4.1.2 + if isBadTrailer(s.key) { + err = fmt.Errorf("forbidden trailer key %q", s.key) + continue + } + } + h.h = appendArgBytes(h.h, s.key, s.value, argsHasValue) + } + if s.err != nil { + return 0, s.err + } + if err != nil { + return 0, err + } + return s.hLen, nil +} + func (h *RequestHeader) ignoreBody() bool { return h.IsGet() || h.IsHead() } @@ -1658,24 +2392,97 @@ func (h *RequestHeader) parse(buf []byte) (int, error) { return 0, err } + h.rawHeaders, _, err = readRawHeaders(h.rawHeaders[:0], buf[m:]) + if err != nil { + return 0, err + } var n int - var rawHeaders []byte - rawHeaders, n, err = readRawHeaders(h.rawHeaders[:0], buf[m:]) + n, err = h.parseHeaders(buf[m:]) if err != nil { return 0, err } - h.rawHeadersCopy = append(h.rawHeadersCopy[:0], rawHeaders...) - if !h.ignoreBody() || h.noHTTP11 { - n, err = h.parseHeaders(buf[m:]) - if err != nil { - return 0, err + return m + n, nil +} + +func (h *RequestHeader) parseTrailer(buf []byte) (int, error) { + // Skip any 0 length chunk. + if buf[0] == '0' { + skip := len(strCRLF) + 1 + if len(buf) < skip { + return 0, io.EOF } - h.rawHeaders = append(h.rawHeaders[:0], buf[m:m+n]...) - h.rawHeadersParsed = true - } else { - h.rawHeaders = rawHeaders + buf = buf[skip:] } - return m + n, nil + + var s headerScanner + s.b = buf + s.disableNormalizing = h.disableNormalizing + var err error + for s.next() { + if len(s.key) > 0 { + if bytes.IndexByte(s.key, ' ') != -1 || bytes.IndexByte(s.key, '\t') != -1 { + err = fmt.Errorf("invalid trailer key %q", s.key) + continue + } + // Forbidden by RFC 7230, section 4.1.2 + if isBadTrailer(s.key) { + err = fmt.Errorf("forbidden trailer key %q", s.key) + continue + } + h.h = appendArgBytes(h.h, s.key, s.value, argsHasValue) + } + } + if s.err != nil { + return 0, s.err + } + if err != nil { + return 0, err + } + return s.hLen, nil +} + +func isBadTrailer(key []byte) bool { + if len(key) == 0 { + return true + } + + switch key[0] | 0x20 { + case 'a': + return caseInsensitiveCompare(key, strAuthorization) + case 'c': + if len(key) > len(HeaderContentType) && caseInsensitiveCompare(key[:8], strContentType[:8]) { + // skip compare prefix 'Content-' + return caseInsensitiveCompare(key[8:], strContentEncoding[8:]) || + caseInsensitiveCompare(key[8:], strContentLength[8:]) || + caseInsensitiveCompare(key[8:], strContentType[8:]) || + caseInsensitiveCompare(key[8:], strContentRange[8:]) + } + return caseInsensitiveCompare(key, strConnection) + case 'e': + return caseInsensitiveCompare(key, strExpect) + case 'h': + return caseInsensitiveCompare(key, strHost) + case 'k': + return caseInsensitiveCompare(key, strKeepAlive) + case 'm': + return caseInsensitiveCompare(key, strMaxForwards) + case 'p': + if len(key) > len(HeaderProxyConnection) && caseInsensitiveCompare(key[:6], strProxyConnection[:6]) { + // skip compare prefix 'Proxy-' + return caseInsensitiveCompare(key[6:], strProxyConnection[6:]) || + caseInsensitiveCompare(key[6:], strProxyAuthenticate[6:]) || + caseInsensitiveCompare(key[6:], strProxyAuthorization[6:]) + } + case 'r': + return caseInsensitiveCompare(key, strRange) + case 't': + return caseInsensitiveCompare(key, strTE) || + caseInsensitiveCompare(key, strTrailer) || + caseInsensitiveCompare(key, strTransferEncoding) + case 'w': + return caseInsensitiveCompare(key, strWWWAuthenticate) + } + return false } func (h *ResponseHeader) parseFirstLine(buf []byte) (int, error) { @@ -1691,6 +2498,9 @@ func (h *ResponseHeader) parseFirstLine(buf []byte) (int, error) { // parse protocol n := bytes.IndexByte(b, ' ') if n < 0 { + if h.secureErrorLogMessage { + return 0, fmt.Errorf("cannot find whitespace in the first line of response") + } return 0, fmt.Errorf("cannot find whitespace in the first line of response %q", buf) } h.noHTTP11 = !bytes.Equal(b[:n], strHTTP11) @@ -1699,11 +2509,20 @@ func (h *ResponseHeader) parseFirstLine(buf []byte) (int, error) { // parse status code h.statusCode, n, err = parseUintBuf(b) if err != nil { - return 0, fmt.Errorf("cannot parse response status code: %s. Response %q", err, buf) + if h.secureErrorLogMessage { + return 0, fmt.Errorf("cannot parse response status code: %w", err) + } + return 0, fmt.Errorf("cannot parse response status code: %w. Response %q", err, buf) } if len(b) > n && b[n] != ' ' { + if h.secureErrorLogMessage { + return 0, fmt.Errorf("unexpected char at the end of status code") + } return 0, fmt.Errorf("unexpected char at the end of status code. Response %q", buf) } + if len(b) > n+1 { + h.SetStatusMessage(b[n+1:]) + } return len(buf) - len(bNext), nil } @@ -1721,63 +2540,43 @@ func (h *RequestHeader) parseFirstLine(buf []byte) (int, error) { // parse method n := bytes.IndexByte(b, ' ') if n <= 0 { + if h.secureErrorLogMessage { + return 0, fmt.Errorf("cannot find http request method") + } return 0, fmt.Errorf("cannot find http request method in %q", buf) } h.method = append(h.method[:0], b[:n]...) b = b[n+1:] + protoStr := strHTTP11 // parse requestURI n = bytes.LastIndexByte(b, ' ') if n < 0 { h.noHTTP11 = true n = len(b) + protoStr = strHTTP10 } else if n == 0 { + if h.secureErrorLogMessage { + return 0, fmt.Errorf("requestURI cannot be empty") + } return 0, fmt.Errorf("requestURI cannot be empty in %q", buf) } else if !bytes.Equal(b[n+1:], strHTTP11) { h.noHTTP11 = true + protoStr = b[n+1:] } + + h.proto = append(h.proto[:0], protoStr...) h.requestURI = append(h.requestURI[:0], b[:n]...) return len(buf) - len(bNext), nil } -func peekRawHeader(buf, key []byte) []byte { - n := bytes.Index(buf, key) - if n < 0 { - return nil - } - if n > 0 && buf[n-1] != '\n' { - return nil - } - n += len(key) - if n >= len(buf) { - return nil - } - if buf[n] != ':' { - return nil - } - n++ - if buf[n] != ' ' { - return nil - } - n++ - buf = buf[n:] - n = bytes.IndexByte(buf, '\n') - if n < 0 { - return nil - } - if n > 0 && buf[n-1] == '\r' { - n-- - } - return buf[:n] -} - func readRawHeaders(dst, buf []byte) ([]byte, int, error) { - n := bytes.IndexByte(buf, '\n') + n := bytes.IndexByte(buf, nChar) if n < 0 { - return nil, 0, errNeedMore + return dst[:0], 0, errNeedMore } - if (n == 1 && buf[0] == '\r') || n == 0 { + if (n == 1 && buf[0] == rChar) || n == 0 { // empty headers return dst, n + 1, nil } @@ -1787,13 +2586,13 @@ func readRawHeaders(dst, buf []byte) ([]byte, int, error) { m := n for { b = b[m:] - m = bytes.IndexByte(b, '\n') + m = bytes.IndexByte(b, nChar) if m < 0 { - return nil, 0, errNeedMore + return dst, 0, errNeedMore } m++ n += m - if (m == 2 && b[0] == '\r') || m == 1 { + if (m == 2 && b[0] == rChar) || m == 1 { dst = append(dst, buf[:n]...) return dst, n, nil } @@ -1849,12 +2648,16 @@ func (h *ResponseHeader) parseHeaders(buf []byte) (int, error) { } case 't': if caseInsensitiveCompare(s.key, strTransferEncoding) { - if !bytes.Equal(s.value, strIdentity) { + if len(s.value) > 0 && !bytes.Equal(s.value, strIdentity) { h.contentLength = -1 h.h = setArgBytes(h.h, strTransferEncoding, strChunked, argsHasValue) } continue } + if caseInsensitiveCompare(s.key, strTrailer) { + err = h.SetTrailerBytes(s.value) + continue + } } h.h = appendArgBytes(h.h, s.key, s.value, argsHasValue) } @@ -1877,7 +2680,7 @@ func (h *ResponseHeader) parseHeaders(buf []byte) (int, error) { h.connectionClose = !hasHeaderValue(v, strKeepAlive) } - return len(buf) - len(s.b), nil + return len(buf) - len(s.b), err } func (h *RequestHeader) parseHeaders(buf []byte) (int, error) { @@ -1889,6 +2692,13 @@ func (h *RequestHeader) parseHeaders(buf []byte) (int, error) { var err error for s.next() { if len(s.key) > 0 { + // Spaces between the header key and colon are not allowed. + // See RFC 7230, Section 3.2.4. + if bytes.IndexByte(s.key, ' ') != -1 || bytes.IndexByte(s.key, '\t') != -1 { + err = fmt.Errorf("invalid header key %q", s.key) + continue + } + switch s.key[0] | 0x20 { case 'h': if caseInsensitiveCompare(s.key, strHost) { @@ -1907,7 +2717,11 @@ func (h *RequestHeader) parseHeaders(buf []byte) (int, error) { } if caseInsensitiveCompare(s.key, strContentLength) { if h.contentLength != -1 { - if h.contentLength, err = parseContentLength(s.value); err != nil { + var nerr error + if h.contentLength, nerr = parseContentLength(s.value); nerr != nil { + if err == nil { + err = nerr + } h.contentLength = -2 } else { h.contentLengthBytes = append(h.contentLengthBytes[:0], s.value...) @@ -1932,13 +2746,24 @@ func (h *RequestHeader) parseHeaders(buf []byte) (int, error) { } continue } + if caseInsensitiveCompare(s.key, strTrailer) { + if nerr := h.SetTrailerBytes(s.value); nerr != nil { + if err == nil { + err = nerr + } + } + continue + } } } h.h = appendArgBytes(h.h, s.key, s.value, argsHasValue) } - if s.err != nil { + if s.err != nil && err == nil { + err = s.err + } + if err != nil { h.connectionClose = true - return 0, s.err + return 0, err } if h.contentLength < 0 { @@ -1952,17 +2777,6 @@ func (h *RequestHeader) parseHeaders(buf []byte) (int, error) { return s.hLen, nil } -func (h *RequestHeader) parseRawHeaders() { - if h.rawHeadersParsed { - return - } - h.rawHeadersParsed = true - if len(h.rawHeaders) == 0 { - return - } - h.parseHeaders(h.rawHeaders) -} - func (h *RequestHeader) collectCookies() { if h.cookiesCollected { return @@ -1970,7 +2784,7 @@ func (h *RequestHeader) collectCookies() { for i, n := 0, len(h.h); i < n; i++ { kv := &h.h[i] - if bytes.Equal(kv.key, strCookie) { + if caseInsensitiveCompare(kv.key, strCookie) { h.cookies = parseRequestCookies(h.cookies, kv.value) tmp := *kv copy(h.h[i:], h.h[i+1:]) @@ -1983,13 +2797,15 @@ func (h *RequestHeader) collectCookies() { h.cookiesCollected = true } +var errNonNumericChars = errors.New("non-numeric chars found") + func parseContentLength(b []byte) (int, error) { v, n, err := parseUintBuf(b) if err != nil { - return -1, err + return -1, fmt.Errorf("cannot parse Content-Length: %w", err) } if n != len(b) { - return -1, fmt.Errorf("non-numeric chars at the end of Content-Length") + return -1, fmt.Errorf("cannot parse Content-Length: %w", errNonNumericChars) } return v, nil } @@ -2004,21 +2820,56 @@ type headerScanner struct { hLen int disableNormalizing bool + + // by checking whether the next line contains a colon or not to tell + // it's a header entry or a multi line value of current header entry. + // the side effect of this operation is that we know the index of the + // next colon and new line, so this can be used during next iteration, + // instead of find them again. + nextColon int + nextNewLine int + + initialized bool } func (s *headerScanner) next() bool { + if !s.initialized { + s.nextColon = -1 + s.nextNewLine = -1 + s.initialized = true + } bLen := len(s.b) - if bLen >= 2 && s.b[0] == '\r' && s.b[1] == '\n' { + if bLen >= 2 && s.b[0] == rChar && s.b[1] == nChar { s.b = s.b[2:] s.hLen += 2 return false } - if bLen >= 1 && s.b[0] == '\n' { + if bLen >= 1 && s.b[0] == nChar { s.b = s.b[1:] s.hLen++ return false } - n := bytes.IndexByte(s.b, ':') + var n int + if s.nextColon >= 0 { + n = s.nextColon + s.nextColon = -1 + } else { + n = bytes.IndexByte(s.b, ':') + + // There can't be a \n inside the header name, check for this. + x := bytes.IndexByte(s.b, nChar) + if x < 0 { + // A header name should always at some point be followed by a \n + // even if it's the one that terminates the header block. + s.err = errNeedMore + return false + } + if x < n { + // There was a \n before the : + s.err = errInvalidName + return false + } + } if n < 0 { s.err = errNeedMore return false @@ -2028,25 +2879,65 @@ func (s *headerScanner) next() bool { n++ for len(s.b) > n && s.b[n] == ' ' { n++ + // the newline index is a relative index, and lines below trimed `s.b` by `n`, + // so the relative newline index also shifted forward. it's safe to decrease + // to a minus value, it means it's invalid, and will find the newline again. + s.nextNewLine-- } s.hLen += n s.b = s.b[n:] - n = bytes.IndexByte(s.b, '\n') + if s.nextNewLine >= 0 { + n = s.nextNewLine + s.nextNewLine = -1 + } else { + n = bytes.IndexByte(s.b, nChar) + } if n < 0 { s.err = errNeedMore return false } + isMultiLineValue := false + for { + if n+1 >= len(s.b) { + break + } + if s.b[n+1] != ' ' && s.b[n+1] != '\t' { + break + } + d := bytes.IndexByte(s.b[n+1:], nChar) + if d <= 0 { + break + } else if d == 1 && s.b[n+1] == rChar { + break + } + e := n + d + 1 + if c := bytes.IndexByte(s.b[n+1:e], ':'); c >= 0 { + s.nextColon = c + s.nextNewLine = d - c - 1 + break + } + isMultiLineValue = true + n = e + } + if n >= len(s.b) { + s.err = errNeedMore + return false + } + oldB := s.b s.value = s.b[:n] s.hLen += n + 1 s.b = s.b[n+1:] - if n > 0 && s.value[n-1] == '\r' { + if n > 0 && s.value[n-1] == rChar { n-- } for n > 0 && s.value[n-1] == ' ' { n-- } s.value = s.value[:n] + if isMultiLineValue { + s.value, s.b, s.hLen = normalizeHeaderValue(s.value, oldB, s.hLen) + } return true } @@ -2093,12 +2984,12 @@ func hasHeaderValue(s, value []byte) bool { } func nextLine(b []byte) ([]byte, []byte, error) { - nNext := bytes.IndexByte(b, '\n') + nNext := bytes.IndexByte(b, nChar) if nNext < 0 { return nil, nil, errNeedMore } n := nNext - if n > 0 && b[n-1] == '\r' { + if n > 0 && b[n-1] == rChar { n-- } return b[:n], b[nNext+1:], nil @@ -2106,7 +2997,9 @@ func nextLine(b []byte) ([]byte, []byte, error) { func initHeaderKV(kv *argsKV, key, value string, disableNormalizing bool) { kv.key = getHeaderKeyBytes(kv, key, disableNormalizing) + // https://tools.ietf.org/html/rfc7230#section-3.2.4 kv.value = append(kv.value[:0], value...) + kv.value = removeNewLines(kv.value) } func getHeaderKeyBytes(kv *argsKV, key string, disableNormalizing bool) []byte { @@ -2115,6 +3008,52 @@ func getHeaderKeyBytes(kv *argsKV, key string, disableNormalizing bool) []byte { return kv.key } +func normalizeHeaderValue(ov, ob []byte, headerLength int) (nv, nb []byte, nhl int) { + nv = ov + length := len(ov) + if length <= 0 { + return + } + write := 0 + shrunk := 0 + lineStart := false + for read := 0; read < length; read++ { + c := ov[read] + if c == rChar || c == nChar { + shrunk++ + if c == nChar { + lineStart = true + } + continue + } else if lineStart && c == '\t' { + c = ' ' + } else { + lineStart = false + } + nv[write] = c + write++ + } + + nv = nv[:write] + copy(ob[write:], ob[write+shrunk:]) + + // Check if we need to skip \r\n or just \n + skip := 0 + if ob[write] == rChar { + if ob[write+1] == nChar { + skip += 2 + } else { + skip++ + } + } else if ob[write] == nChar { + skip++ + } + + nb = ob[write+skip : len(ob)-shrunk] + nhl = headerLength - shrunk + return +} + func normalizeHeaderKey(b []byte, disableNormalizing bool) { if disableNormalizing { return @@ -2139,6 +3078,37 @@ func normalizeHeaderKey(b []byte, disableNormalizing bool) { } } +// removeNewLines will replace `\r` and `\n` with an empty space +func removeNewLines(raw []byte) []byte { + // check if a `\r` is present and save the position. + // if no `\r` is found, check if a `\n` is present. + foundR := bytes.IndexByte(raw, rChar) + foundN := bytes.IndexByte(raw, nChar) + start := 0 + + if foundN != -1 { + if foundR > foundN { + start = foundN + } else if foundR != -1 { + start = foundR + } + } else if foundR != -1 { + start = foundR + } else { + return raw + } + + for i := start; i < len(raw); i++ { + switch raw[i] { + case rChar, nChar: + raw[i] = ' ' + default: + continue + } + } + return raw +} + // AppendNormalizedHeaderKey appends normalized header key (name) to dst // and returns the resulting dst. // @@ -2169,12 +3139,29 @@ func AppendNormalizedHeaderKeyBytes(dst, key []byte) []byte { return AppendNormalizedHeaderKey(dst, b2s(key)) } +func appendArgsKeyBytes(dst []byte, args []argsKV, sep []byte) []byte { + for i, n := 0, len(args); i < n; i++ { + kv := &args[i] + dst = append(dst, kv.key...) + if i+1 < n { + dst = append(dst, sep...) + } + } + return dst +} + var ( errNeedMore = errors.New("need more data: cannot find trailing lf") + errInvalidName = errors.New("invalid header name") errSmallBuffer = errors.New("small read buffer. Increase ReadBufferSize") - errNothingRead = errors.New("read timeout with nothing read") ) +// ErrNothingRead is returned when a keep-alive connection is closed, +// either because the remote closed it or because of a read timeout. +type ErrNothingRead struct { + error +} + // ErrSmallBuffer is returned when the provided buffer size is too small // for reading request and/or response headers. // @@ -2194,6 +3181,6 @@ func mustPeekBuffered(r *bufio.Reader) []byte { func mustDiscard(r *bufio.Reader, n int) { if _, err := r.Discard(n); err != nil { - panic(fmt.Sprintf("bufio.Reader.Discard(%d) failed: %s", n, err)) + panic(fmt.Sprintf("bufio.Reader.Discard(%d) failed: %v", n, err)) } } diff --git a/vendor/github.com/valyala/fasthttp/headers.go b/vendor/github.com/valyala/fasthttp/headers.go index 7c3b2cb2a4..676a0da185 100644 --- a/vendor/github.com/valyala/fasthttp/headers.go +++ b/vendor/github.com/valyala/fasthttp/headers.go @@ -36,8 +36,9 @@ const ( HeaderVary = "Vary" // Connection management - HeaderConnection = "Connection" - HeaderKeepAlive = "Keep-Alive" + HeaderConnection = "Connection" + HeaderKeepAlive = "Keep-Alive" + HeaderProxyConnection = "Proxy-Connection" // Content negotiation HeaderAccept = "Accept" @@ -158,7 +159,7 @@ const ( HeaderUpgrade = "Upgrade" HeaderXDNSPrefetchControl = "X-DNS-Prefetch-Control" HeaderXPingback = "X-Pingback" - HeaderXRequestedWith = "X-RequestedWith" + HeaderXRequestedWith = "X-Requested-With" HeaderXRobotsTag = "X-Robots-Tag" HeaderXUACompatible = "X-UA-Compatible" ) diff --git a/vendor/github.com/valyala/fasthttp/http.go b/vendor/github.com/valyala/fasthttp/http.go index ce30f8c977..384a7b3ffd 100644 --- a/vendor/github.com/valyala/fasthttp/http.go +++ b/vendor/github.com/valyala/fasthttp/http.go @@ -3,6 +3,8 @@ package fasthttp import ( "bufio" "bytes" + "compress/gzip" + "encoding/base64" "errors" "fmt" "io" @@ -10,10 +12,23 @@ import ( "net" "os" "sync" + "time" "github.com/valyala/bytebufferpool" ) +var ( + requestBodyPoolSizeLimit = -1 + responseBodyPoolSizeLimit = -1 +) + +// SetBodySizePoolLimit set the max body size for bodies to be returned to the pool. +// If the body size is larger it will be released instead of put back into the pool for reuse. +func SetBodySizePoolLimit(reqBodyLimit, respBodyLimit int) { + requestBodyPoolSizeLimit = reqBodyLimit + responseBodyPoolSizeLimit = respBodyLimit +} + // Request represents HTTP request. // // It is forbidden copying Request instances. Create new instances @@ -21,7 +36,7 @@ import ( // // Request instance MUST NOT be used from concurrently running goroutines. type Request struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Request header // @@ -34,9 +49,11 @@ type Request struct { bodyStream io.Reader w requestBodyWriter body *bytebufferpool.ByteBuffer + bodyRaw []byte multipartForm *multipart.Form multipartFormBoundary string + secureErrorLogMessage bool // Group bool members in order to reduce Request object size. parsedURI bool @@ -44,10 +61,16 @@ type Request struct { keepBodyBuffer bool + // Used by Server to indicate the request was received on a HTTPS endpoint. + // Client/HostClient shouldn't use this field but should depend on the uri.scheme instead. isTLS bool - // To detect scheme changes in redirects - schemaUpdate bool + // Request timeout. Usually set by DoDeadline or DoTimeout + // if <= 0, means not set + timeout time.Duration + + // Use Host header (request.Header.SetHost) instead of the host from SetRequestURI, SetHost, or URI().SetHost + UseHostHeader bool } // Response represents HTTP response. @@ -57,7 +80,7 @@ type Request struct { // // Response instance MUST NOT be used from concurrently running goroutines. type Response struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Response header // @@ -80,7 +103,8 @@ type Response struct { // Use it for writing HEAD responses. SkipBody bool - keepBodyBuffer bool + keepBodyBuffer bool + secureErrorLogMessage bool // Remote TCPAddr from concurrently net.Conn raddr net.Addr @@ -237,7 +261,7 @@ func (resp *Response) IsBodyStream() bool { // // Note that GET and HEAD requests cannot have body. // -/// See also SetBodyStream. +// See also SetBodyStream. func (req *Request) SetBodyStreamWriter(sw StreamWriter) { sr := NewStreamReader(sw) req.SetBodyStream(sr, -1) @@ -311,13 +335,15 @@ func (resp *Response) LocalAddr() net.Addr { // Body returns response body. // -// The returned body is valid until the response modification. +// The returned value is valid until the response is released, +// either though ReleaseResponse or your request handler returning. +// Do not store references to returned value. Make copies instead. func (resp *Response) Body() []byte { if resp.bodyStream != nil { bodyBuf := resp.bodyBuffer() bodyBuf.Reset() _, err := copyZeroAlloc(bodyBuf, resp.bodyStream) - resp.closeBodyStream() + resp.closeBodyStream() //nolint:errcheck if err != nil { bodyBuf.SetString(err.Error()) } @@ -336,6 +362,18 @@ func (resp *Response) bodyBytes() []byte { } func (req *Request) bodyBytes() []byte { + if req.bodyRaw != nil { + return req.bodyRaw + } + if req.bodyStream != nil { + bodyBuf := req.bodyBuffer() + bodyBuf.Reset() + _, err := copyZeroAlloc(bodyBuf, req.bodyStream) + req.closeBodyStream() //nolint:errcheck + if err != nil { + bodyBuf.SetString(err.Error()) + } + } if req.body == nil { return nil } @@ -354,6 +392,7 @@ func (req *Request) bodyBuffer() *bytebufferpool.ByteBuffer { if req.body == nil { req.body = requestBodyPool.Get() } + req.bodyRaw = nil return req.body } @@ -389,6 +428,33 @@ func gunzipData(p []byte) ([]byte, error) { return bb.B, nil } +// BodyUnbrotli returns un-brotlied body data. +// +// This method may be used if the request header contains +// 'Content-Encoding: br' for reading un-brotlied body. +// Use Body for reading brotlied request body. +func (req *Request) BodyUnbrotli() ([]byte, error) { + return unBrotliData(req.Body()) +} + +// BodyUnbrotli returns un-brotlied body data. +// +// This method may be used if the response header contains +// 'Content-Encoding: br' for reading un-brotlied body. +// Use Body for reading brotlied response body. +func (resp *Response) BodyUnbrotli() ([]byte, error) { + return unBrotliData(resp.Body()) +} + +func unBrotliData(p []byte) ([]byte, error) { + var bb bytebufferpool.ByteBuffer + _, err := WriteUnbrotli(&bb, p) + if err != nil { + return nil, err + } + return bb.B, nil +} + // BodyInflate returns inflated body data. // // This method may be used if the response header contains @@ -407,6 +473,10 @@ func (resp *Response) BodyInflate() ([]byte, error) { return inflateData(resp.Body()) } +func (ctx *RequestCtx) RequestBodyStream() io.Reader { + return ctx.Request.bodyStream +} + func inflateData(p []byte) ([]byte, error) { var bb bytebufferpool.ByteBuffer _, err := WriteInflate(&bb, p) @@ -420,7 +490,7 @@ func inflateData(p []byte) ([]byte, error) { func (req *Request) BodyWriteTo(w io.Writer) error { if req.bodyStream != nil { _, err := copyZeroAlloc(w, req.bodyStream) - req.closeBodyStream() + req.closeBodyStream() //nolint:errcheck return err } if req.onlyMultipartForm() { @@ -434,7 +504,7 @@ func (req *Request) BodyWriteTo(w io.Writer) error { func (resp *Response) BodyWriteTo(w io.Writer) error { if resp.bodyStream != nil { _, err := copyZeroAlloc(w, resp.bodyStream) - resp.closeBodyStream() + resp.closeBodyStream() //nolint:errcheck return err } _, err := w.Write(resp.bodyBytes()) @@ -445,34 +515,38 @@ func (resp *Response) BodyWriteTo(w io.Writer) error { // // It is safe re-using p after the function returns. func (resp *Response) AppendBody(p []byte) { - resp.AppendBodyString(b2s(p)) + resp.closeBodyStream() //nolint:errcheck + resp.bodyBuffer().Write(p) //nolint:errcheck } // AppendBodyString appends s to response body. func (resp *Response) AppendBodyString(s string) { - resp.closeBodyStream() - resp.bodyBuffer().WriteString(s) + resp.closeBodyStream() //nolint:errcheck + resp.bodyBuffer().WriteString(s) //nolint:errcheck } // SetBody sets response body. // // It is safe re-using body argument after the function returns. func (resp *Response) SetBody(body []byte) { - resp.SetBodyString(b2s(body)) + resp.closeBodyStream() //nolint:errcheck + bodyBuf := resp.bodyBuffer() + bodyBuf.Reset() + bodyBuf.Write(body) //nolint:errcheck } // SetBodyString sets response body. func (resp *Response) SetBodyString(body string) { - resp.closeBodyStream() + resp.closeBodyStream() //nolint:errcheck bodyBuf := resp.bodyBuffer() bodyBuf.Reset() - bodyBuf.WriteString(body) + bodyBuf.WriteString(body) //nolint:errcheck } // ResetBody resets response body. func (resp *Response) ResetBody() { resp.bodyRaw = nil - resp.closeBodyStream() + resp.closeBodyStream() //nolint:errcheck if resp.body != nil { if resp.keepBodyBuffer { resp.body.Reset() @@ -491,6 +565,14 @@ func (resp *Response) SetBodyRaw(body []byte) { resp.bodyRaw = body } +// SetBodyRaw sets response body, but without copying it. +// +// From this point onward the body argument must not be changed. +func (req *Request) SetBodyRaw(body []byte) { + req.ResetBody() + req.bodyRaw = body +} + // ReleaseBody retires the response body if it is greater than "size" bytes. // // This permits GC to reclaim the large buffer. If used, must be before @@ -500,8 +582,11 @@ func (resp *Response) SetBodyRaw(body []byte) { // The majority of workloads don't need this method. func (resp *Response) ReleaseBody(size int) { resp.bodyRaw = nil + if resp.body == nil { + return + } if cap(resp.body.B) > size { - resp.closeBodyStream() + resp.closeBodyStream() //nolint:errcheck resp.body = nil } } @@ -514,8 +599,12 @@ func (resp *Response) ReleaseBody(size int) { // Use this method only if you really understand how it works. // The majority of workloads don't need this method. func (req *Request) ReleaseBody(size int) { + req.bodyRaw = nil + if req.body == nil { + return + } if cap(req.body.B) > size { - req.closeBodyStream() + req.closeBodyStream() //nolint:errcheck req.body = nil } } @@ -531,7 +620,7 @@ func (resp *Response) SwapBody(body []byte) []byte { if resp.bodyStream != nil { bb.Reset() _, err := copyZeroAlloc(bb, resp.bodyStream) - resp.closeBodyStream() + resp.closeBodyStream() //nolint:errcheck if err != nil { bb.Reset() bb.SetString(err.Error()) @@ -556,13 +645,15 @@ func (req *Request) SwapBody(body []byte) []byte { if req.bodyStream != nil { bb.Reset() _, err := copyZeroAlloc(bb, req.bodyStream) - req.closeBodyStream() + req.closeBodyStream() //nolint:errcheck if err != nil { bb.Reset() bb.SetString(err.Error()) } } + req.bodyRaw = nil + oldBody := bb.B bb.B = body return oldBody @@ -570,16 +661,12 @@ func (req *Request) SwapBody(body []byte) []byte { // Body returns request body. // -// The returned body is valid until the request modification. +// The returned value is valid until the request is released, +// either though ReleaseRequest or your request handler returning. +// Do not store references to returned value. Make copies instead. func (req *Request) Body() []byte { - if req.bodyStream != nil { - bodyBuf := req.bodyBuffer() - bodyBuf.Reset() - _, err := copyZeroAlloc(bodyBuf, req.bodyStream) - req.closeBodyStream() - if err != nil { - bodyBuf.SetString(err.Error()) - } + if req.bodyRaw != nil { + return req.bodyRaw } else if req.onlyMultipartForm() { body, err := marshalMultipartForm(req.multipartForm, req.multipartFormBoundary) if err != nil { @@ -594,34 +681,39 @@ func (req *Request) Body() []byte { // // It is safe re-using p after the function returns. func (req *Request) AppendBody(p []byte) { - req.AppendBodyString(b2s(p)) + req.RemoveMultipartFormFiles() + req.closeBodyStream() //nolint:errcheck + req.bodyBuffer().Write(p) //nolint:errcheck } // AppendBodyString appends s to request body. func (req *Request) AppendBodyString(s string) { req.RemoveMultipartFormFiles() - req.closeBodyStream() - req.bodyBuffer().WriteString(s) + req.closeBodyStream() //nolint:errcheck + req.bodyBuffer().WriteString(s) //nolint:errcheck } // SetBody sets request body. // // It is safe re-using body argument after the function returns. func (req *Request) SetBody(body []byte) { - req.SetBodyString(b2s(body)) + req.RemoveMultipartFormFiles() + req.closeBodyStream() //nolint:errcheck + req.bodyBuffer().Set(body) } // SetBodyString sets request body. func (req *Request) SetBodyString(body string) { req.RemoveMultipartFormFiles() - req.closeBodyStream() + req.closeBodyStream() //nolint:errcheck req.bodyBuffer().SetString(body) } // ResetBody resets request body. func (req *Request) ResetBody() { + req.bodyRaw = nil req.RemoveMultipartFormFiles() - req.closeBodyStream() + req.closeBodyStream() //nolint:errcheck if req.body != nil { if req.keepBodyBuffer { req.body.Reset() @@ -635,7 +727,12 @@ func (req *Request) ResetBody() { // CopyTo copies req contents to dst except of body stream. func (req *Request) CopyTo(dst *Request) { req.copyToSkipBody(dst) - if req.body != nil { + if req.bodyRaw != nil { + dst.bodyRaw = req.bodyRaw + if dst.body != nil { + dst.body.Reset() + } + } else if req.body != nil { dst.bodyBuffer().Set(req.body.B) } else if dst.body != nil { dst.body.Reset() @@ -653,6 +750,8 @@ func (req *Request) copyToSkipBody(dst *Request) { dst.parsedPostArgs = req.parsedPostArgs dst.isTLS = req.isTLS + dst.UseHostHeader = req.UseHostHeader + // do not copy multipartForm - it will be automatically // re-created on the first call to MultipartForm. } @@ -682,7 +781,16 @@ func (resp *Response) copyToSkipBody(dst *Response) { func swapRequestBody(a, b *Request) { a.body, b.body = b.body, a.body + a.bodyRaw, b.bodyRaw = b.bodyRaw, a.bodyRaw a.bodyStream, b.bodyStream = b.bodyStream, a.bodyStream + + // This code assumes that if a requestStream was swapped the headers are also swapped or copied. + if rs, ok := a.bodyStream.(*requestStream); ok { + rs.header = &a.Header + } + if rs, ok := b.bodyStream.(*requestStream); ok { + rs.header = &b.Header + } } func swapResponseBody(a, b *Response) { @@ -693,17 +801,31 @@ func swapResponseBody(a, b *Response) { // URI returns request URI func (req *Request) URI() *URI { - req.parseURI() + req.parseURI() //nolint:errcheck return &req.uri } -func (req *Request) parseURI() { - if req.parsedURI { +// SetURI initializes request URI +// Use this method if a single URI may be reused across multiple requests. +// Otherwise, you can just use SetRequestURI() and it will be parsed as new URI. +// The URI is copied and can be safely modified later. +func (req *Request) SetURI(newUri *URI) { + if newUri != nil { + newUri.CopyTo(&req.uri) + req.parsedURI = true return } + req.uri.Reset() + req.parsedURI = false +} + +func (req *Request) parseURI() error { + if req.parsedURI { + return nil + } req.parsedURI = true - req.uri.parseQuick(req.Header.RequestURI(), &req.Header, req.isTLS) + return req.uri.parse(req.Header.Host(), req.Header.RequestURI(), req.isTLS) } // PostArgs returns POST arguments. @@ -745,24 +867,43 @@ func (req *Request) MultipartForm() (*multipart.Form, error) { return nil, ErrNoMultipartForm } + var err error ce := req.Header.peek(strContentEncoding) - body := req.bodyBytes() - if bytes.Equal(ce, strGzip) { - // Do not care about memory usage here. - var err error - if body, err = AppendGunzipBytes(nil, body); err != nil { - return nil, fmt.Errorf("cannot gunzip request body: %s", err) + + if req.bodyStream != nil { + bodyStream := req.bodyStream + if bytes.Equal(ce, strGzip) { + // Do not care about memory usage here. + if bodyStream, err = gzip.NewReader(bodyStream); err != nil { + return nil, fmt.Errorf("cannot gunzip request body: %w", err) + } + } else if len(ce) > 0 { + return nil, fmt.Errorf("unsupported Content-Encoding: %q", ce) } - } else if len(ce) > 0 { - return nil, fmt.Errorf("unsupported Content-Encoding: %q", ce) - } - f, err := readMultipartForm(bytes.NewReader(body), req.multipartFormBoundary, len(body), len(body)) - if err != nil { - return nil, err + mr := multipart.NewReader(bodyStream, req.multipartFormBoundary) + req.multipartForm, err = mr.ReadForm(8 * 1024) + if err != nil { + return nil, fmt.Errorf("cannot read multipart/form-data body: %w", err) + } + } else { + body := req.bodyBytes() + if bytes.Equal(ce, strGzip) { + // Do not care about memory usage here. + if body, err = AppendGunzipBytes(nil, body); err != nil { + return nil, fmt.Errorf("cannot gunzip request body: %w", err) + } + } else if len(ce) > 0 { + return nil, fmt.Errorf("unsupported Content-Encoding: %q", ce) + } + + req.multipartForm, err = readMultipartForm(bytes.NewReader(body), req.multipartFormBoundary, len(body), len(body)) + if err != nil { + return nil, err + } } - req.multipartForm = f - return f, nil + + return req.multipartForm, nil } func marshalMultipartForm(f *multipart.Form, boundary string) ([]byte, error) { @@ -784,14 +925,14 @@ func WriteMultipartForm(w io.Writer, f *multipart.Form, boundary string) error { mw := multipart.NewWriter(w) if err := mw.SetBoundary(boundary); err != nil { - return fmt.Errorf("cannot use form boundary %q: %s", boundary, err) + return fmt.Errorf("cannot use form boundary %q: %w", boundary, err) } // marshal values for k, vv := range f.Value { for _, v := range vv { if err := mw.WriteField(k, v); err != nil { - return fmt.Errorf("cannot write form field %q value %q: %s", k, v, err) + return fmt.Errorf("cannot write form field %q value %q: %w", k, v, err) } } } @@ -801,23 +942,23 @@ func WriteMultipartForm(w io.Writer, f *multipart.Form, boundary string) error { for _, fv := range fvv { vw, err := mw.CreatePart(fv.Header) if err != nil { - return fmt.Errorf("cannot create form file %q (%q): %s", k, fv.Filename, err) + return fmt.Errorf("cannot create form file %q (%q): %w", k, fv.Filename, err) } fh, err := fv.Open() if err != nil { - return fmt.Errorf("cannot open form file %q (%q): %s", k, fv.Filename, err) + return fmt.Errorf("cannot open form file %q (%q): %w", k, fv.Filename, err) } if _, err = copyZeroAlloc(vw, fh); err != nil { - return fmt.Errorf("error when copying form file %q (%q): %s", k, fv.Filename, err) + return fmt.Errorf("error when copying form file %q (%q): %w", k, fv.Filename, err) } if err = fh.Close(); err != nil { - return fmt.Errorf("cannot close form file %q (%q): %s", k, fv.Filename, err) + return fmt.Errorf("cannot close form file %q (%q): %w", k, fv.Filename, err) } } } if err := mw.Close(); err != nil { - return fmt.Errorf("error when closing multipart form writer: %s", err) + return fmt.Errorf("error when closing multipart form writer: %w", err) } return nil @@ -829,21 +970,26 @@ func readMultipartForm(r io.Reader, boundary string, size, maxInMemoryFileSize i // in multipart/form-data requests. if size <= 0 { - panic(fmt.Sprintf("BUG: form size must be greater than 0. Given %d", size)) + return nil, fmt.Errorf("form size must be greater than 0. Given %d", size) } lr := io.LimitReader(r, int64(size)) mr := multipart.NewReader(lr, boundary) f, err := mr.ReadForm(int64(maxInMemoryFileSize)) if err != nil { - return nil, fmt.Errorf("cannot read multipart/form-data body: %s", err) + return nil, fmt.Errorf("cannot read multipart/form-data body: %w", err) } return f, nil } // Reset clears request contents. func (req *Request) Reset() { + if requestBodyPoolSizeLimit >= 0 && req.body != nil { + req.ReleaseBody(requestBodyPoolSizeLimit) + } req.Header.Reset() req.resetSkipHeader() + req.timeout = 0 + req.UseHostHeader = false } func (req *Request) resetSkipHeader() { @@ -861,7 +1007,7 @@ func (req *Request) RemoveMultipartFormFiles() { if req.multipartForm != nil { // Do not check for error, since these files may be deleted or moved // to new places by user code. - req.multipartForm.RemoveAll() + req.multipartForm.RemoveAll() //nolint:errcheck req.multipartForm = nil } req.multipartFormBoundary = "" @@ -869,6 +1015,9 @@ func (req *Request) RemoveMultipartFormFiles() { // Reset clears response contents. func (resp *Response) Reset() { + if responseBodyPoolSizeLimit >= 0 && resp.body != nil { + resp.ReleaseBody(responseBodyPoolSizeLimit) + } resp.Header.Reset() resp.resetSkipHeader() resp.SkipBody = false @@ -926,17 +1075,35 @@ var ErrGetOnly = errors.New("non-GET request received") // io.EOF is returned if r is closed before reading the first header byte. func (req *Request) ReadLimitBody(r *bufio.Reader, maxBodySize int) error { req.resetSkipHeader() - return req.readLimitBody(r, maxBodySize, false) + if err := req.Header.Read(r); err != nil { + return err + } + + return req.readLimitBody(r, maxBodySize, false, true) } -func (req *Request) readLimitBody(r *bufio.Reader, maxBodySize int, getOnly bool) error { +func (req *Request) readLimitBody(r *bufio.Reader, maxBodySize int, getOnly bool, preParseMultipartForm bool) error { // Do not reset the request here - the caller must reset it before // calling this method. - err := req.Header.Read(r) - if err != nil { - return err + if getOnly && !req.Header.IsGet() { + return ErrGetOnly } + + if req.MayContinue() { + // 'Expect: 100-continue' header found. Let the caller deciding + // whether to read request body or + // to return StatusExpectationFailed. + return nil + } + + return req.ContinueReadBody(r, maxBodySize, preParseMultipartForm) +} + +func (req *Request) readBodyStream(r *bufio.Reader, maxBodySize int, getOnly bool, preParseMultipartForm bool) error { + // Do not reset the request here - the caller must reset it before + // calling this method. + if getOnly && !req.Header.IsGet() { return ErrGetOnly } @@ -948,7 +1115,7 @@ func (req *Request) readLimitBody(r *bufio.Reader, maxBodySize int, getOnly bool return nil } - return req.ContinueReadBody(r, maxBodySize) + return req.ContinueReadBodyStream(r, maxBodySize, preParseMultipartForm) } // MayContinue returns true if the request contains @@ -972,7 +1139,7 @@ func (req *Request) MayContinue() bool { // // If maxBodySize > 0 and the body size exceeds maxBodySize, // then ErrBodyTooLarge is returned. -func (req *Request) ContinueReadBody(r *bufio.Reader, maxBodySize int) error { +func (req *Request) ContinueReadBody(r *bufio.Reader, maxBodySize int, preParseMultipartForm ...bool) error { var err error contentLength := req.Header.realContentLength() if contentLength > 0 { @@ -980,18 +1147,97 @@ func (req *Request) ContinueReadBody(r *bufio.Reader, maxBodySize int) error { return ErrBodyTooLarge } - // Pre-read multipart form data of known length. - // This way we limit memory usage for large file uploads, since their contents - // is streamed into temporary files if file size exceeds defaultMaxInMemoryFileSize. - req.multipartFormBoundary = string(req.Header.MultipartFormBoundary()) - if len(req.multipartFormBoundary) > 0 && len(req.Header.peek(strContentEncoding)) == 0 { - req.multipartForm, err = readMultipartForm(r, req.multipartFormBoundary, contentLength, defaultMaxInMemoryFileSize) - if err != nil { - req.Reset() + if len(preParseMultipartForm) == 0 || preParseMultipartForm[0] { + // Pre-read multipart form data of known length. + // This way we limit memory usage for large file uploads, since their contents + // is streamed into temporary files if file size exceeds defaultMaxInMemoryFileSize. + req.multipartFormBoundary = string(req.Header.MultipartFormBoundary()) + if len(req.multipartFormBoundary) > 0 && len(req.Header.peek(strContentEncoding)) == 0 { + req.multipartForm, err = readMultipartForm(r, req.multipartFormBoundary, contentLength, defaultMaxInMemoryFileSize) + if err != nil { + req.Reset() + } + return err } + } + } + + if contentLength == -2 { + // identity body has no sense for http requests, since + // the end of body is determined by connection close. + // So just ignore request body for requests without + // 'Content-Length' and 'Transfer-Encoding' headers. + // refer to https://tools.ietf.org/html/rfc7230#section-3.3.2 + if !req.Header.ignoreBody() { + req.Header.SetContentLength(0) + } + return nil + } + + if err = req.ReadBody(r, contentLength, maxBodySize); err != nil { + return err + } + + if req.Header.ContentLength() == -1 { + err = req.Header.ReadTrailer(r) + if err != nil && err != io.EOF { return err } } + return nil +} + +// ReadBody reads request body from the given r, limiting the body size. +// +// If maxBodySize > 0 and the body size exceeds maxBodySize, +// then ErrBodyTooLarge is returned. +func (req *Request) ReadBody(r *bufio.Reader, contentLength int, maxBodySize int) (err error) { + bodyBuf := req.bodyBuffer() + bodyBuf.Reset() + + if contentLength >= 0 { + bodyBuf.B, err = readBody(r, contentLength, maxBodySize, bodyBuf.B) + + } else if contentLength == -1 { + bodyBuf.B, err = readBodyChunked(r, maxBodySize, bodyBuf.B) + + } else { + bodyBuf.B, err = readBodyIdentity(r, maxBodySize, bodyBuf.B) + req.Header.SetContentLength(len(bodyBuf.B)) + } + + if err != nil { + req.Reset() + return err + } + return nil +} + +// ContinueReadBodyStream reads request body if request header contains +// 'Expect: 100-continue'. +// +// The caller must send StatusContinue response before calling this method. +// +// If maxBodySize > 0 and the body size exceeds maxBodySize, +// then ErrBodyTooLarge is returned. +func (req *Request) ContinueReadBodyStream(r *bufio.Reader, maxBodySize int, preParseMultipartForm ...bool) error { + var err error + contentLength := req.Header.realContentLength() + if contentLength > 0 { + if len(preParseMultipartForm) == 0 || preParseMultipartForm[0] { + // Pre-read multipart form data of known length. + // This way we limit memory usage for large file uploads, since their contents + // is streamed into temporary files if file size exceeds defaultMaxInMemoryFileSize. + req.multipartFormBoundary = b2s(req.Header.MultipartFormBoundary()) + if len(req.multipartFormBoundary) > 0 && len(req.Header.peek(strContentEncoding)) == 0 { + req.multipartForm, err = readMultipartForm(r, req.multipartFormBoundary, contentLength, defaultMaxInMemoryFileSize) + if err != nil { + req.Reset() + } + return err + } + } + } if contentLength == -2 { // identity body has no sense for http requests, since @@ -1004,12 +1250,26 @@ func (req *Request) ContinueReadBody(r *bufio.Reader, maxBodySize int) error { bodyBuf := req.bodyBuffer() bodyBuf.Reset() - bodyBuf.B, err = readBody(r, contentLength, maxBodySize, bodyBuf.B) + bodyBuf.B, err = readBodyWithStreaming(r, contentLength, maxBodySize, bodyBuf.B) if err != nil { + if err == ErrBodyTooLarge { + req.Header.SetContentLength(contentLength) + req.body = bodyBuf + req.bodyStream = acquireRequestStream(bodyBuf, r, &req.Header) + return nil + } + if err == errChunkedStream { + req.body = bodyBuf + req.bodyStream = acquireRequestStream(bodyBuf, r, &req.Header) + return nil + } req.Reset() return err } - req.Header.SetContentLength(len(bodyBuf.B)) + + req.body = bodyBuf + req.bodyStream = acquireRequestStream(bodyBuf, r, &req.Header) + req.Header.SetContentLength(contentLength) return nil } @@ -1020,7 +1280,10 @@ func (resp *Response) Read(r *bufio.Reader) error { return resp.ReadLimitBody(r, 0) } -// ReadLimitBody reads response from the given r, limiting the body size. +// ReadLimitBody reads response headers from the given r, +// then reads the body using the ReadBody function and limiting the body size. +// +// If resp.SkipBody is true then it skips reading the response body. // // If maxBodySize > 0 and the body size exceeds maxBodySize, // then ErrBodyTooLarge is returned. @@ -1040,17 +1303,49 @@ func (resp *Response) ReadLimitBody(r *bufio.Reader, maxBodySize int) error { } if !resp.mustSkipBody() { - bodyBuf := resp.bodyBuffer() - bodyBuf.Reset() - bodyBuf.B, err = readBody(r, resp.Header.ContentLength(), maxBodySize, bodyBuf.B) + err = resp.ReadBody(r, maxBodySize) if err != nil { + if isConnectionReset(err) { + return nil + } + return err + } + } + + if resp.Header.ContentLength() == -1 { + err = resp.Header.ReadTrailer(r) + if err != nil && err != io.EOF { + if isConnectionReset(err) { + return nil + } return err } - resp.Header.SetContentLength(len(bodyBuf.B)) } return nil } +// ReadBody reads response body from the given r, limiting the body size. +// +// If maxBodySize > 0 and the body size exceeds maxBodySize, +// then ErrBodyTooLarge is returned. +func (resp *Response) ReadBody(r *bufio.Reader, maxBodySize int) (err error) { + bodyBuf := resp.bodyBuffer() + bodyBuf.Reset() + + contentLength := resp.Header.ContentLength() + if contentLength >= 0 { + bodyBuf.B, err = readBody(r, contentLength, maxBodySize, bodyBuf.B) + + } else if contentLength == -1 { + bodyBuf.B, err = readBodyChunked(r, maxBodySize, bodyBuf.B) + + } else { + bodyBuf.B, err = readBodyIdentity(r, maxBodySize, bodyBuf.B) + resp.Header.SetContentLength(len(bodyBuf.B)) + } + return err +} + func (resp *Response) mustSkipBody() bool { return resp.SkipBody || resp.Header.mustSkipContentLength() } @@ -1143,11 +1438,35 @@ func (req *Request) Write(w *bufio.Writer) error { if len(req.Header.Host()) == 0 || req.parsedURI { uri := req.URI() host := uri.Host() - if len(host) == 0 { - return errRequestHostRequired + if len(req.Header.Host()) == 0 { + if len(host) == 0 { + return errRequestHostRequired + } else { + req.Header.SetHostBytes(host) + } + } else if !req.UseHostHeader { + req.Header.SetHostBytes(host) } - req.Header.SetHostBytes(host) req.Header.SetRequestURIBytes(uri.RequestURI()) + + if len(uri.username) > 0 { + // RequestHeader.SetBytesKV only uses RequestHeader.bufKV.key + // So we are free to use RequestHeader.bufKV.value as a scratch pad for + // the base64 encoding. + nl := len(uri.username) + len(uri.password) + 1 + nb := nl + len(strBasicSpace) + tl := nb + base64.StdEncoding.EncodedLen(nl) + if tl > cap(req.Header.bufKV.value) { + req.Header.bufKV.value = make([]byte, 0, tl) + } + buf := req.Header.bufKV.value[:0] + buf = append(buf, uri.username...) + buf = append(buf, strColon...) + buf = append(buf, uri.password...) + buf = append(buf, strBasicSpace...) + base64.StdEncoding.Encode(buf[nb:tl], buf[:nl]) + req.Header.SetBytesKV(strAuthorization, buf[nl:tl]) + } } if req.bodyStream != nil { @@ -1159,16 +1478,17 @@ func (req *Request) Write(w *bufio.Writer) error { if req.onlyMultipartForm() { body, err = marshalMultipartForm(req.multipartForm, req.multipartFormBoundary) if err != nil { - return fmt.Errorf("error when marshaling multipart form: %s", err) + return fmt.Errorf("error when marshaling multipart form: %w", err) } req.Header.SetMultipartFormBoundary(req.multipartFormBoundary) } - hasBody := !req.Header.ignoreBody() - if hasBody { - if len(body) == 0 { - body = req.postArgs.QueryString() - } + hasBody := false + if len(body) == 0 { + body = req.postArgs.QueryString() + } + if len(body) != 0 || !req.Header.ignoreBody() { + hasBody = true req.Header.SetContentLength(len(body)) } if err = req.Header.Write(w); err != nil { @@ -1177,6 +1497,9 @@ func (req *Request) Write(w *bufio.Writer) error { if hasBody { _, err = w.Write(body) } else if len(body) > 0 { + if req.secureErrorLogMessage { + return fmt.Errorf("non-zero body for non-POST request") + } return fmt.Errorf("non-zero body for non-POST request. body=%q", body) } return err @@ -1244,6 +1567,61 @@ func (resp *Response) WriteDeflateLevel(w *bufio.Writer, level int) error { return resp.Write(w) } +func (resp *Response) brotliBody(level int) error { + if len(resp.Header.peek(strContentEncoding)) > 0 { + // It looks like the body is already compressed. + // Do not compress it again. + return nil + } + + if !resp.Header.isCompressibleContentType() { + // The content-type cannot be compressed. + return nil + } + + if resp.bodyStream != nil { + // Reset Content-Length to -1, since it is impossible + // to determine body size beforehand of streamed compression. + // For https://github.com/valyala/fasthttp/issues/176 . + resp.Header.SetContentLength(-1) + + // Do not care about memory allocations here, since brotli is slow + // and allocates a lot of memory by itself. + bs := resp.bodyStream + resp.bodyStream = NewStreamReader(func(sw *bufio.Writer) { + zw := acquireStacklessBrotliWriter(sw, level) + fw := &flushWriter{ + wf: zw, + bw: sw, + } + copyZeroAlloc(fw, bs) //nolint:errcheck + releaseStacklessBrotliWriter(zw, level) + if bsc, ok := bs.(io.Closer); ok { + bsc.Close() + } + }) + } else { + bodyBytes := resp.bodyBytes() + if len(bodyBytes) < minCompressLen { + // There is no sense in spending CPU time on small body compression, + // since there is a very high probability that the compressed + // body size will be bigger than the original body size. + return nil + } + w := responseBodyPool.Get() + w.B = AppendBrotliBytesLevel(w.B, bodyBytes, level) + + // Hack: swap resp.body with w. + if resp.body != nil { + responseBodyPool.Put(resp.body) + } + resp.body = w + resp.bodyRaw = nil + } + resp.Header.SetCanonical(strContentEncoding, strBr) + return nil +} + func (resp *Response) gzipBody(level int) error { if len(resp.Header.peek(strContentEncoding)) > 0 { // It looks like the body is already compressed. @@ -1271,7 +1649,7 @@ func (resp *Response) gzipBody(level int) error { wf: zw, bw: sw, } - copyZeroAlloc(fw, bs) + copyZeroAlloc(fw, bs) //nolint:errcheck releaseStacklessGzipWriter(zw, level) if bsc, ok := bs.(io.Closer); ok { bsc.Close() @@ -1326,7 +1704,7 @@ func (resp *Response) deflateBody(level int) error { wf: zw, bw: sw, } - copyZeroAlloc(fw, bs) + copyZeroAlloc(fw, bs) //nolint:errcheck releaseStacklessDeflateWriter(zw, level) if bsc, ok := bs.(io.Closer); ok { bsc.Close() @@ -1431,9 +1809,13 @@ func (req *Request) writeBodyStream(w *bufio.Writer) error { } } else { req.Header.SetContentLength(-1) - if err = req.Header.Write(w); err == nil { + err = req.Header.Write(w) + if err == nil { err = writeBodyChunked(w, req.bodyStream) } + if err == nil { + err = req.Header.writeTrailer(w) + } } err1 := req.closeBodyStream() if err == nil { @@ -1442,8 +1824,19 @@ func (req *Request) writeBodyStream(w *bufio.Writer) error { return err } -func (resp *Response) writeBodyStream(w *bufio.Writer, sendBody bool) error { - var err error +// ErrBodyStreamWritePanic is returned when panic happens during writing body stream. +type ErrBodyStreamWritePanic struct { + error +} + +func (resp *Response) writeBodyStream(w *bufio.Writer, sendBody bool) (err error) { + defer func() { + if r := recover(); r != nil { + err = &ErrBodyStreamWritePanic{ + error: fmt.Errorf("panic while writing body stream: %+v", r), + } + } + }() contentLength := resp.Header.ContentLength() if contentLength < 0 { @@ -1459,23 +1852,26 @@ func (resp *Response) writeBodyStream(w *bufio.Writer, sendBody bool) error { } } if contentLength >= 0 { - if err = resp.Header.Write(w); err == nil && sendBody { + if err = resp.Header.Write(w); err == nil { if resp.ImmediateHeaderFlush { err = w.Flush() } - if err == nil { + if err == nil && sendBody { err = writeBodyFixedSize(w, resp.bodyStream, int64(contentLength)) } } } else { resp.Header.SetContentLength(-1) - if err = resp.Header.Write(w); err == nil && sendBody { + if err = resp.Header.Write(w); err == nil { if resp.ImmediateHeaderFlush { err = w.Flush() } - if err == nil { + if err == nil && sendBody { err = writeBodyChunked(w, resp.bodyStream) } + if err == nil { + err = resp.Header.writeTrailer(w) + } } } err1 := resp.closeBodyStream() @@ -1493,6 +1889,9 @@ func (req *Request) closeBodyStream() error { if bsc, ok := req.bodyStream.(io.Closer); ok { err = bsc.Close() } + if rs, ok := req.bodyStream.(*requestStream); ok { + releaseRequestStream(rs) + } req.bodyStream = nil return err } @@ -1591,19 +1990,8 @@ func writeBodyFixedSize(w *bufio.Writer, r io.Reader, size int64) error { } } - // Unwrap a single limited reader for triggering sendfile path - // in net.TCPConn.ReadFrom. - lr, ok := r.(*io.LimitedReader) - if ok { - r = lr.R - } - n, err := copyZeroAlloc(w, r) - if ok { - lr.N -= n - } - if n != size && err == nil { err = fmt.Errorf("copied %d bytes from body stream instead of %d bytes", n, size) } @@ -1626,15 +2014,22 @@ var copyBufPool = sync.Pool{ func writeChunk(w *bufio.Writer, b []byte) error { n := len(b) - writeHexInt(w, n) - w.Write(strCRLF) - w.Write(b) - _, err := w.Write(strCRLF) - err1 := w.Flush() - if err == nil { - err = err1 + if err := writeHexInt(w, n); err != nil { + return err } - return err + if _, err := w.Write(strCRLF); err != nil { + return err + } + if _, err := w.Write(b); err != nil { + return err + } + // If is end chunk, write CRLF after writing trailer + if n > 0 { + if _, err := w.Write(strCRLF); err != nil { + return err + } + } + return w.Flush() } // ErrBodyTooLarge is returned if either request or response body exceeds @@ -1642,17 +2037,43 @@ func writeChunk(w *bufio.Writer, b []byte) error { var ErrBodyTooLarge = errors.New("body size exceeds the given limit") func readBody(r *bufio.Reader, contentLength int, maxBodySize int, dst []byte) ([]byte, error) { - dst = dst[:0] - if contentLength >= 0 { - if maxBodySize > 0 && contentLength > maxBodySize { - return dst, ErrBodyTooLarge - } - return appendBodyFixedSize(r, dst, contentLength) + if maxBodySize > 0 && contentLength > maxBodySize { + return dst, ErrBodyTooLarge } + return appendBodyFixedSize(r, dst, contentLength) +} + +var errChunkedStream = errors.New("chunked stream") + +func readBodyWithStreaming(r *bufio.Reader, contentLength int, maxBodySize int, dst []byte) (b []byte, err error) { if contentLength == -1 { - return readBodyChunked(r, maxBodySize, dst) + // handled in requestStream.Read() + return b, errChunkedStream + } + + dst = dst[:0] + + readN := maxBodySize + if readN > contentLength { + readN = contentLength + } + if readN > 8*1024 { + readN = 8 * 1024 } - return readBodyIdentity(r, maxBodySize, dst) + + if contentLength >= 0 && maxBodySize >= contentLength { + b, err = appendBodyFixedSize(r, dst, readN) + } else { + b, err = readBodyIdentity(r, readN, dst) + } + + if err != nil { + return b, err + } + if contentLength > maxBodySize { + return b, ErrBodyTooLarge + } + return b, nil } func readBodyIdentity(r *bufio.Reader, maxBodySize int, dst []byte) ([]byte, error) { @@ -1736,6 +2157,9 @@ func readBodyChunked(r *bufio.Reader, maxBodySize int, dst []byte) ([]byte, erro if err != nil { return dst, err } + if chunkSize == 0 { + return dst, err + } if maxBodySize > 0 && len(dst)+chunkSize > maxBodySize { return dst, ErrBodyTooLarge } @@ -1749,9 +2173,6 @@ func readBodyChunked(r *bufio.Reader, maxBodySize int, dst []byte) ([]byte, erro } } dst = dst[:len(dst)-strCRLFLen] - if chunkSize == 0 { - return dst, nil - } } } @@ -1764,43 +2185,56 @@ func parseChunkSize(r *bufio.Reader) (int, error) { c, err := r.ReadByte() if err != nil { return -1, ErrBrokenChunk{ - error: fmt.Errorf("cannot read '\r' char at the end of chunk size: %s", err), + error: fmt.Errorf("cannot read '\r' char at the end of chunk size: %w", err), } } - // Skip any trailing whitespace after chunk size. - if c == ' ' { + // Skip chunk extension after chunk size. + // Add support later if anyone needs it. + if c != '\r' { continue } - if c != '\r' { + if err := r.UnreadByte(); err != nil { return -1, ErrBrokenChunk{ - error: fmt.Errorf("unexpected char %q at the end of chunk size. Expected %q", c, '\r'), + error: fmt.Errorf("cannot unread '\r' char at the end of chunk size: %w", err), } } break } - c, err := r.ReadByte() + err = readCrLf(r) if err != nil { - return -1, ErrBrokenChunk{ - error: fmt.Errorf("cannot read '\n' char at the end of chunk size: %s", err), - } + return -1, err } - if c != '\n' { - return -1, ErrBrokenChunk{ - error: fmt.Errorf("unexpected char %q at the end of chunk size. Expected %q", c, '\n'), + return n, nil +} + +func readCrLf(r *bufio.Reader) error { + for _, exp := range []byte{'\r', '\n'} { + c, err := r.ReadByte() + if err != nil { + return ErrBrokenChunk{ + error: fmt.Errorf("cannot read %q char at the end of chunk size: %w", exp, err), + } + } + if c != exp { + return ErrBrokenChunk{ + error: fmt.Errorf("unexpected char %q at the end of chunk size. Expected %q", c, exp), + } } } - return n, nil + return nil } func round2(n int) int { if n <= 0 { return 0 } - n-- - x := uint(0) - for n > 0 { - n >>= 1 - x++ - } - return 1 << x + + x := uint32(n - 1) + x |= x >> 1 + x |= x >> 2 + x |= x >> 4 + x |= x >> 8 + x |= x >> 16 + + return int(x + 1) } diff --git a/vendor/github.com/valyala/fasthttp/lbclient.go b/vendor/github.com/valyala/fasthttp/lbclient.go index 12418b6b6f..34ff719721 100644 --- a/vendor/github.com/valyala/fasthttp/lbclient.go +++ b/vendor/github.com/valyala/fasthttp/lbclient.go @@ -17,7 +17,7 @@ type BalancingClient interface { // // It has the following features: // -// - Balances load among available clients using 'least loaded' + 'round robin' +// - Balances load among available clients using 'least loaded' + 'least total' // hybrid technique. // - Dynamically decreases load on unhealthy clients. // @@ -25,7 +25,7 @@ type BalancingClient interface { // // It is safe calling LBClient methods from concurrently running goroutines. type LBClient struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Clients must contain non-zero clients list. // Incoming requests are balanced among these clients. @@ -49,11 +49,8 @@ type LBClient struct { cs []*lbClient - // nextIdx is for spreading requests among equally loaded clients - // in a round-robin fashion. - nextIdx uint32 - once sync.Once + mu sync.RWMutex } // DefaultLBClientTimeout is the default request timeout used by LBClient @@ -84,6 +81,8 @@ func (cc *LBClient) Do(req *Request, resp *Response) error { } func (cc *LBClient) init() { + cc.mu.Lock() + defer cc.mu.Unlock() if len(cc.Clients) == 0 { panic("BUG: LBClient.Clients cannot be empty") } @@ -93,44 +92,61 @@ func (cc *LBClient) init() { healthCheck: cc.HealthCheck, }) } +} - // Randomize nextIdx in order to prevent initial servers' - // hammering from a cluster of identical LBClients. - cc.nextIdx = uint32(time.Now().UnixNano()) +// AddClient adds a new client to the balanced clients +// returns the new total number of clients +func (cc *LBClient) AddClient(c BalancingClient) int { + cc.mu.Lock() + cc.cs = append(cc.cs, &lbClient{ + c: c, + healthCheck: cc.HealthCheck, + }) + cc.mu.Unlock() + return len(cc.cs) +} + +// RemoveClients removes clients using the provided callback +// if rc returns true, the passed client will be removed +// returns the new total number of clients +func (cc *LBClient) RemoveClients(rc func(BalancingClient) bool) int { + cc.mu.Lock() + n := 0 + for _, cs := range cc.cs { + if rc(cs.c) { + continue + } + cc.cs[n] = cs + n++ + } + for i := n; i < len(cc.cs); i++ { + cc.cs[i] = nil + } + cc.cs = cc.cs[:n] + + cc.mu.Unlock() + return len(cc.cs) } func (cc *LBClient) get() *lbClient { cc.once.Do(cc.init) + cc.mu.RLock() cs := cc.cs - idx := atomic.AddUint32(&cc.nextIdx, 1) - idx %= uint32(len(cs)) - minC := cs[idx] + minC := cs[0] minN := minC.PendingRequests() - if minN == 0 { - return minC - } - for _, c := range cs[idx+1:] { + minT := atomic.LoadUint64(&minC.total) + for _, c := range cs[1:] { n := c.PendingRequests() - if n == 0 { - return c - } - if n < minN { - minC = c - minN = n - } - } - for _, c := range cs[:idx] { - n := c.PendingRequests() - if n == 0 { - return c - } - if n < minN { + t := atomic.LoadUint64(&c.total) + if n < minN || (n == minN && t < minT) { minC = c minN = n + minT = t } } + cc.mu.RUnlock() return minC } @@ -138,6 +154,9 @@ type lbClient struct { c BalancingClient healthCheck func(req *Request, resp *Response, err error) bool penalty uint32 + + // total amount of requests handled. + total uint64 } func (c *lbClient) DoDeadline(req *Request, resp *Response, deadline time.Time) error { @@ -146,6 +165,8 @@ func (c *lbClient) DoDeadline(req *Request, resp *Response, deadline time.Time) // Penalize the client returning error, so the next requests // are routed to another clients. time.AfterFunc(penaltyDuration, c.decPenalty) + } else { + atomic.AddUint64(&c.total, 1) } return err } diff --git a/vendor/github.com/valyala/fasthttp/nocopy.go b/vendor/github.com/valyala/fasthttp/nocopy.go index 8e9b89a419..5e41bdf40d 100644 --- a/vendor/github.com/valyala/fasthttp/nocopy.go +++ b/vendor/github.com/valyala/fasthttp/nocopy.go @@ -5,7 +5,7 @@ package fasthttp // // See https://github.com/golang/go/issues/8005#issuecomment-190753527 for details. // and also: https://stackoverflow.com/questions/52494458/nocopy-minimal-example -type noCopy struct{} +type noCopy struct{} //nolint:unused -func (*noCopy) Lock() {} -func (*noCopy) Unlock() {} +func (*noCopy) Lock() {} //nolint:unused +func (*noCopy) Unlock() {} //nolint:unused diff --git a/vendor/github.com/valyala/fasthttp/server.go b/vendor/github.com/valyala/fasthttp/server.go index 9d14599283..396efdea59 100644 --- a/vendor/github.com/valyala/fasthttp/server.go +++ b/vendor/github.com/valyala/fasthttp/server.go @@ -17,7 +17,7 @@ import ( "time" ) -var errNoCertOrKeyProvided = errors.New("Cert or key has not provided") +var errNoCertOrKeyProvided = errors.New("cert or key has not provided") var ( // ErrAlreadyServing is returned when calling Serve on a Server @@ -148,7 +148,7 @@ type ServeHandler func(c net.Conn) error // // It is safe to call Server methods from concurrently running goroutines. type Server struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Handler for processing incoming requests. // @@ -167,6 +167,22 @@ type Server struct { // * ErrBrokenChunks ErrorHandler func(ctx *RequestCtx, err error) + // HeaderReceived is called after receiving the header + // + // non zero RequestConfig field values will overwrite the default configs + HeaderReceived func(header *RequestHeader) RequestConfig + + // ContinueHandler is called after receiving the Expect 100 Continue Header + // + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3 + // https://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1.1 + // Using ContinueHandler a server can make decisioning on whether or not + // to read a potentially large request body based on the headers + // + // The default is to automatically read request bodies of Expect 100 Continue requests + // like they are normal requests + ContinueHandler func(header *RequestHeader) bool + // Server name for sending in response headers. // // Default server name is used if left blank. @@ -175,15 +191,10 @@ type Server struct { // The maximum number of concurrent connections the server may serve. // // DefaultConcurrency is used if not set. - Concurrency int - - // Whether to disable keep-alive connections. - // - // The server will close all the incoming connections after sending - // the first response to client if this option is set to true. // - // By default keep-alive connections are enabled. - DisableKeepalive bool + // Concurrency only works if you either call Serve once, or only ServeConn multiple times. + // It works with ListenAndServe as well. + Concurrency int // Per-connection buffer size for requests' reading. // This also limits the maximum header size. @@ -237,12 +248,9 @@ type Server struct { // Deprecated: Use IdleTimeout instead. MaxKeepaliveDuration time.Duration - // Whether to enable tcp keep-alive connections. - // - // Whether the operating system should send tcp keep-alive messages on the tcp connection. - // - // By default tcp keep-alive connections are disabled. - TCPKeepalive bool + // MaxIdleWorkerDuration is the maximum idle time of a single worker in the underlying + // worker pool of the Server. Idle workers beyond this time will be cleared. + MaxIdleWorkerDuration time.Duration // Period between tcp keep-alive messages. // @@ -256,6 +264,21 @@ type Server struct { // Request body size is limited by DefaultMaxRequestBodySize by default. MaxRequestBodySize int + // Whether to disable keep-alive connections. + // + // The server will close all the incoming connections after sending + // the first response to client if this option is set to true. + // + // By default keep-alive connections are enabled. + DisableKeepalive bool + + // Whether to enable tcp keep-alive connections. + // + // Whether the operating system should send tcp keep-alive messages on the tcp connection. + // + // By default tcp keep-alive connections are disabled. + TCPKeepalive bool + // Aggressively reduces memory usage at the cost of higher CPU usage // if set to true. // @@ -275,6 +298,14 @@ type Server struct { // Server accepts all the requests by default. GetOnly bool + // Will not pre parse Multipart Form data if set to true. + // + // This option is useful for servers that desire to treat + // multipart form data as a binary blob, or choose when to parse the data. + // + // Server pre parses multipart form data by default. + DisablePreParseMultipartForm bool + // Logs all errors, including the most frequent // 'connection reset by peer', 'broken pipe' and 'connection timeout' // errors. Such errors are common in production serving real-world @@ -285,6 +316,14 @@ type Server struct { // are suppressed in order to limit output log traffic. LogAllErrors bool + // Will not log potentially sensitive content in error logs + // + // This option is useful for servers that handle sensitive data + // in the request/response. + // + // Server logs all full errors by default. + SecureErrorLogMessage bool + // Header names are passed as-is without normalization // if this option is set. // @@ -305,7 +344,7 @@ type Server struct { // SleepWhenConcurrencyLimitsExceeded is a duration to be slept of if // the concurrency limit in exceeded (default [when is 0]: don't sleep - // and accept new connections immidiatelly). + // and accept new connections immediately). SleepWhenConcurrencyLimitsExceeded time.Duration // NoDefaultServerHeader, when set to true, causes the default Server header @@ -317,6 +356,13 @@ type Server struct { // value is explicitly provided during a request. NoDefaultServerHeader bool + // NoDefaultDate, when set to true, causes the default Date + // header to be excluded from the Response. + // + // The default Date header value is the current date value. When + // set to true, the Date will not be present. + NoDefaultDate bool + // NoDefaultContentType, when set to true, causes the default Content-Type // header to be excluded from the Response. // @@ -324,6 +370,21 @@ type Server struct { // set to true, the Content-Type will not be present. NoDefaultContentType bool + // KeepHijackedConns is an opt-in disable of connection + // close by fasthttp after connections' HijackHandler returns. + // This allows to save goroutines, e.g. when fasthttp used to upgrade + // http connections to WS and connection goes to another handler, + // which will close it when needed. + KeepHijackedConns bool + + // CloseOnShutdown when true adds a `Connection: close` header when when the server is shutting down. + CloseOnShutdown bool + + // StreamRequestBody enables request body streaming, + // and calls the handler sooner when given body is + // larger then the current limit. + StreamRequestBody bool + // ConnState specifies an optional callback function that is // called when a client connection changes state. See the // ConnState type and associated constants for details. @@ -334,14 +395,17 @@ type Server struct { // By default standard logger from log package is used. Logger Logger - // KeepHijackedConns is an opt-in disable of connection - // close by fasthttp after connections' HijackHandler returns. - // This allows to save goroutines, e.g. when fasthttp used to upgrade - // http connections to WS and connection goes to another handler, - // which will close it when needed. - KeepHijackedConns bool + // TLSConfig optionally provides a TLS configuration for use + // by ServeTLS, ServeTLSEmbed, ListenAndServeTLS, ListenAndServeTLSEmbed, + // AppendCert, AppendCertEmbed and NextProto. + // + // Note that this value is cloned by ServeTLS, ServeTLSEmbed, ListenAndServeTLS + // and ListenAndServeTLSEmbed, so it's not possible to modify the configuration + // with methods like tls.Config.SetSessionTicketKeys. + // To use SetSessionTicketKeys, use Server.Serve with a TLS Listener + // instead. + TLSConfig *tls.Config - tlsConfig *tls.Config nextProtos map[string]ServeHandler concurrency uint32 @@ -354,8 +418,11 @@ type Server struct { writerPool sync.Pool hijackConnPool sync.Pool - // We need to know our listener so we can close it in Shutdown(). - ln net.Listener + // We need to know our listeners and idle connections so we can close them in Shutdown(). + ln []net.Listener + + idleConns map[net.Conn]struct{} + idleConnsMu sync.Mutex mu sync.Mutex open int32 @@ -371,10 +438,10 @@ type Server struct { // msg to the client if there are more than Server.Concurrency concurrent // handlers h are running at the moment. func TimeoutHandler(h RequestHandler, timeout time.Duration, msg string) RequestHandler { - return TimeoutWithCodeHandler(h,timeout,msg, StatusRequestTimeout) + return TimeoutWithCodeHandler(h, timeout, msg, StatusRequestTimeout) } -// TimeoutWithCodeHandler creates RequestHandler, which returns an error with +// TimeoutWithCodeHandler creates RequestHandler, which returns an error with // the given msg and status code to the client if h didn't return during // the given duration. // @@ -415,6 +482,21 @@ func TimeoutWithCodeHandler(h RequestHandler, timeout time.Duration, msg string, } } +// RequestConfig configure the per request deadline and body limits +type RequestConfig struct { + // ReadTimeout is the maximum duration for reading the entire + // request body. + // a zero value means that default values will be honored + ReadTimeout time.Duration + // WriteTimeout is the maximum duration before timing out + // writes of the response. + // a zero value means that default values will be honored + WriteTimeout time.Duration + // Maximum request body size. + // a zero value means that default values will be honored + MaxRequestBodySize int +} + // CompressHandler returns RequestHandler that transparently compresses // response body generated by h if the request contains 'gzip' or 'deflate' // 'Accept-Encoding' header. @@ -423,7 +505,7 @@ func CompressHandler(h RequestHandler) RequestHandler { } // CompressHandlerLevel returns RequestHandler that transparently compresses -// response body generated by h if the request contains 'gzip' or 'deflate' +// response body generated by h if the request contains a 'gzip' or 'deflate' // 'Accept-Encoding' header. // // Level is the desired compression level: @@ -437,9 +519,40 @@ func CompressHandlerLevel(h RequestHandler, level int) RequestHandler { return func(ctx *RequestCtx) { h(ctx) if ctx.Request.Header.HasAcceptEncodingBytes(strGzip) { - ctx.Response.gzipBody(level) + ctx.Response.gzipBody(level) //nolint:errcheck } else if ctx.Request.Header.HasAcceptEncodingBytes(strDeflate) { - ctx.Response.deflateBody(level) + ctx.Response.deflateBody(level) //nolint:errcheck + } + } +} + +// CompressHandlerBrotliLevel returns RequestHandler that transparently compresses +// response body generated by h if the request contains a 'br', 'gzip' or 'deflate' +// 'Accept-Encoding' header. +// +// brotliLevel is the desired compression level for brotli. +// +// * CompressBrotliNoCompression +// * CompressBrotliBestSpeed +// * CompressBrotliBestCompression +// * CompressBrotliDefaultCompression +// +// otherLevel is the desired compression level for gzip and deflate. +// +// * CompressNoCompression +// * CompressBestSpeed +// * CompressBestCompression +// * CompressDefaultCompression +// * CompressHuffmanOnly +func CompressHandlerBrotliLevel(h RequestHandler, brotliLevel, otherLevel int) RequestHandler { + return func(ctx *RequestCtx) { + h(ctx) + if ctx.Request.Header.HasAcceptEncodingBytes(strBr) { + ctx.Response.brotliBody(brotliLevel) //nolint:errcheck + } else if ctx.Request.Header.HasAcceptEncodingBytes(strGzip) { + ctx.Response.gzipBody(otherLevel) //nolint:errcheck + } else if ctx.Request.Header.HasAcceptEncodingBytes(strDeflate) { + ctx.Response.deflateBody(otherLevel) //nolint:errcheck } } } @@ -459,7 +572,7 @@ func CompressHandlerLevel(h RequestHandler, level int) RequestHandler { // running goroutines. The only exception is TimeoutError*, which may be called // while other goroutines accessing RequestCtx. type RequestCtx struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck // Incoming request. // @@ -476,6 +589,7 @@ type RequestCtx struct { connID uint64 connRequestNum uint64 connTime time.Time + remoteAddr net.Addr time time.Time @@ -488,7 +602,8 @@ type RequestCtx struct { timeoutCh chan struct{} timeoutTimer *time.Timer - hijackHandler HijackHandler + hijackHandler HijackHandler + hijackNoResponse bool } // HijackHandler must process the hijacked connection c. @@ -515,6 +630,7 @@ type HijackHandler func(c net.Conn) // * Unexpected error during response writing to the connection. // // The server stops processing requests from hijacked connections. +// // Server limits such as Concurrency, ReadTimeout, WriteTimeout, etc. // aren't applied to hijacked connections. // @@ -530,6 +646,15 @@ func (ctx *RequestCtx) Hijack(handler HijackHandler) { ctx.hijackHandler = handler } +// HijackSetNoResponse changes the behavior of hijacking a request. +// If HijackSetNoResponse is called with false fasthttp will send a response +// to the client before calling the HijackHandler (default). If HijackSetNoResponse +// is called with true no response is send back before calling the +// HijackHandler supplied in the Hijack function. +func (ctx *RequestCtx) HijackSetNoResponse(noResponse bool) { + ctx.hijackNoResponse = noResponse +} + // Hijacked returns true after Hijack is called. func (ctx *RequestCtx) Hijacked() bool { return ctx.hijackHandler != nil @@ -585,6 +710,21 @@ func (ctx *RequestCtx) VisitUserValues(visitor func([]byte, interface{})) { } } +// ResetUserValues allows to reset user values from Request Context +func (ctx *RequestCtx) ResetUserValues() { + ctx.userValues.Reset() +} + +// RemoveUserValue removes the given key and the value under it in ctx. +func (ctx *RequestCtx) RemoveUserValue(key string) { + ctx.userValues.Remove(key) +} + +// RemoveUserValueBytes removes the given key and the value under it in ctx. +func (ctx *RequestCtx) RemoveUserValueBytes(key []byte) { + ctx.userValues.RemoveBytes(key) +} + type connTLSer interface { Handshake() error ConnectionState() tls.ConnectionState @@ -602,6 +742,13 @@ func (ctx *RequestCtx) IsTLS() bool { // // // other custom fields here // } + + // perIPConn wraps the net.Conn in the Conn field + if pic, ok := ctx.c.(*perIPConn); ok { + _, ok := pic.Conn.(connTLSer) + return ok + } + _, ok := ctx.c.(connTLSer) return ok } @@ -630,12 +777,49 @@ func (ctx *RequestCtx) Conn() net.Conn { return ctx.c } +func (ctx *RequestCtx) reset() { + ctx.userValues.Reset() + ctx.Request.Reset() + ctx.Response.Reset() + ctx.fbr.reset() + + ctx.connID = 0 + ctx.connRequestNum = 0 + ctx.connTime = zeroTime + ctx.remoteAddr = nil + ctx.time = zeroTime + ctx.c = nil + + // Don't reset ctx.s! + // We have a pool per server so the next time this ctx is used it + // will be assigned the same value again. + // ctx might still be in use for context.Done() and context.Err() + // which are safe to use as they only use ctx.s and no other value. + + if ctx.timeoutResponse != nil { + ctx.timeoutResponse.Reset() + } + + if ctx.timeoutTimer != nil { + stopTimer(ctx.timeoutTimer) + } + + ctx.hijackHandler = nil + ctx.hijackNoResponse = false +} + type firstByteReader struct { c net.Conn ch byte byteRead bool } +func (r *firstByteReader) reset() { + r.c = nil + r.ch = 0 + r.byteRead = false +} + func (r *firstByteReader) Read(b []byte) (int, error) { if len(b) == 0 { return 0, nil @@ -739,40 +923,42 @@ func (ctx *RequestCtx) SetContentTypeBytes(contentType []byte) { // RequestURI returns RequestURI. // -// This uri is valid until returning from RequestHandler. +// The returned bytes are valid until your request handler returns. func (ctx *RequestCtx) RequestURI() []byte { return ctx.Request.Header.RequestURI() } // URI returns requested uri. // -// The uri is valid until returning from RequestHandler. +// This uri is valid until your request handler returns. func (ctx *RequestCtx) URI() *URI { return ctx.Request.URI() } // Referer returns request referer. // -// The referer is valid until returning from RequestHandler. +// The returned bytes are valid until your request handler returns. func (ctx *RequestCtx) Referer() []byte { return ctx.Request.Header.Referer() } // UserAgent returns User-Agent header value from the request. +// +// The returned bytes are valid until your request handler returns. func (ctx *RequestCtx) UserAgent() []byte { return ctx.Request.Header.UserAgent() } // Path returns requested path. // -// The path is valid until returning from RequestHandler. +// The returned bytes are valid until your request handler returns. func (ctx *RequestCtx) Path() []byte { return ctx.URI().Path() } // Host returns requested host. // -// The host is valid until returning from RequestHandler. +// The returned bytes are valid until your request handler returns. func (ctx *RequestCtx) Host() []byte { return ctx.URI().Host() } @@ -781,9 +967,9 @@ func (ctx *RequestCtx) Host() []byte { // // It doesn't return POST'ed arguments - use PostArgs() for this. // -// Returned arguments are valid until returning from RequestHandler. -// // See also PostArgs, FormValue and FormFile. +// +// These args are valid until your request handler returns. func (ctx *RequestCtx) QueryArgs() *Args { return ctx.URI().QueryArgs() } @@ -792,9 +978,9 @@ func (ctx *RequestCtx) QueryArgs() *Args { // // It doesn't return query arguments from RequestURI - use QueryArgs for this. // -// Returned arguments are valid until returning from RequestHandler. -// // See also QueryArgs, FormValue and FormFile. +// +// These args are valid until your request handler returns. func (ctx *RequestCtx) PostArgs() *Args { return ctx.Request.PostArgs() } @@ -810,7 +996,7 @@ func (ctx *RequestCtx) PostArgs() *Args { // // Use SaveMultipartFile function for permanently saving uploaded file. // -// The returned form is valid until returning from RequestHandler. +// The returned form is valid until your request handler returns. // // See also FormFile and FormValue. func (ctx *RequestCtx) MultipartForm() (*multipart.Form, error) { @@ -824,7 +1010,7 @@ func (ctx *RequestCtx) MultipartForm() (*multipart.Form, error) { // // Use SaveMultipartFile function for permanently saving uploaded file. // -// The returned file header is valid until returning from RequestHandler. +// The returned file header is valid until your request handler returns. func (ctx *RequestCtx) FormFile(key string) (*multipart.FileHeader, error) { mf, err := ctx.MultipartForm() if err != nil { @@ -845,16 +1031,21 @@ func (ctx *RequestCtx) FormFile(key string) (*multipart.FileHeader, error) { var ErrMissingFile = errors.New("there is no uploaded file associated with the given key") // SaveMultipartFile saves multipart file fh under the given filename path. -func SaveMultipartFile(fh *multipart.FileHeader, path string) error { - f, err := fh.Open() +func SaveMultipartFile(fh *multipart.FileHeader, path string) (err error) { + var ( + f multipart.File + ff *os.File + ) + f, err = fh.Open() if err != nil { - return err + return } - if ff, ok := f.(*os.File); ok { + var ok bool + if ff, ok = f.(*os.File); ok { // Windows can't rename files that are opened. - if err := f.Close(); err != nil { - return err + if err = f.Close(); err != nil { + return } // If renaming fails we try the normal copying method. @@ -864,21 +1055,29 @@ func SaveMultipartFile(fh *multipart.FileHeader, path string) error { } // Reopen f for the code below. - f, err = fh.Open() - if err != nil { - return err + if f, err = fh.Open(); err != nil { + return } } - defer f.Close() + defer func() { + e := f.Close() + if err == nil { + err = e + } + }() - ff, err := os.Create(path) - if err != nil { - return err + if ff, err = os.Create(path); err != nil { + return } - defer ff.Close() + defer func() { + e := ff.Close() + if err == nil { + err = e + } + }() _, err = copyZeroAlloc(ff, f) - return err + return } // FormValue returns form value associated with the given key. @@ -895,7 +1094,7 @@ func SaveMultipartFile(fh *multipart.FileHeader, path string) error { // * MultipartForm for obtaining values from multipart form. // * FormFile for obtaining uploaded files. // -// The returned value is valid until returning from RequestHandler. +// The returned value is valid until your request handler returns. func (ctx *RequestCtx) FormValue(key string) []byte { v := ctx.QueryArgs().Peek(key) if len(v) > 0 { @@ -957,7 +1156,7 @@ func (ctx *RequestCtx) IsPatch() bool { // Method return request method. // -// Returned value is valid until returning from RequestHandler. +// Returned value is valid until your request handler returns. func (ctx *RequestCtx) Method() []byte { return ctx.Request.Header.Method() } @@ -971,6 +1170,9 @@ func (ctx *RequestCtx) IsHead() bool { // // Always returns non-nil result. func (ctx *RequestCtx) RemoteAddr() net.Addr { + if ctx.remoteAddr != nil { + return ctx.remoteAddr + } if ctx.c == nil { return zeroTCPAddr } @@ -981,6 +1183,14 @@ func (ctx *RequestCtx) RemoteAddr() net.Addr { return addr } +// SetRemoteAddr sets remote address to the given value. +// +// Set nil value to resore default behaviour for using +// connection remote address. +func (ctx *RequestCtx) SetRemoteAddr(remoteAddr net.Addr) { + ctx.remoteAddr = remoteAddr +} + // LocalAddr returns server address for the given request. // // Always returns non-nil result. @@ -1133,6 +1343,10 @@ func (ctx *RequestCtx) ResetBody() { // SendFile logs all the errors via ctx.Logger. // // See also ServeFile, FSHandler and FS. +// +// WARNING: do not pass any user supplied paths to this function! +// WARNING: if path is based on user input users will be able to request +// any file on your filesystem! Use fasthttp.FS with a sane Root instead. func (ctx *RequestCtx) SendFile(path string) { ServeFile(ctx, path) } @@ -1144,6 +1358,10 @@ func (ctx *RequestCtx) SendFile(path string) { // SendFileBytes logs all the errors via ctx.Logger. // // See also ServeFileBytes, FSHandler and FS. +// +// WARNING: do not pass any user supplied paths to this function! +// WARNING: if path is based on user input users will be able to request +// any file on your filesystem! Use fasthttp.FS with a sane Root instead. func (ctx *RequestCtx) SendFileBytes(path []byte) { ServeFileBytes(ctx, path) } @@ -1192,7 +1410,7 @@ func (ctx *RequestCtx) WriteString(s string) (int, error) { // PostBody returns POST request body. // -// The returned value is valid until RequestHandler return. +// The returned bytes are valid until your request handler returns. func (ctx *RequestCtx) PostBody() []byte { return ctx.Request.Body() } @@ -1242,7 +1460,7 @@ func (ctx *RequestCtx) IsBodyStream() bool { // It is safe re-using returned logger for logging multiple messages // for the current request. // -// The returned logger is valid until returning from RequestHandler. +// The returned logger is valid until your request handler returns. func (ctx *RequestCtx) Logger() Logger { if ctx.logger.ctx == nil { ctx.logger.ctx = ctx @@ -1308,13 +1526,26 @@ func (s *Server) NextProto(key string, nph ServeHandler) { if s.nextProtos == nil { s.nextProtos = make(map[string]ServeHandler) } + s.configTLS() - s.tlsConfig.NextProtos = append(s.tlsConfig.NextProtos, key) + s.TLSConfig.NextProtos = append(s.TLSConfig.NextProtos, key) s.nextProtos[key] = nph } func (s *Server) getNextProto(c net.Conn) (proto string, err error) { if tlsConn, ok := c.(connTLSer); ok { + if s.ReadTimeout > 0 { + if err := c.SetReadDeadline(time.Now().Add(s.ReadTimeout)); err != nil { + panic(fmt.Sprintf("BUG: error in SetReadDeadline(%v): %v", s.ReadTimeout, err)) + } + } + + if s.WriteTimeout > 0 { + if err := c.SetWriteDeadline(time.Now().Add(s.WriteTimeout)); err != nil { + panic(fmt.Sprintf("BUG: error in SetWriteDeadline(%v): %v", s.WriteTimeout, err)) + } + } + err = tlsConn.Handshake() if err == nil { proto = tlsConn.ConnectionState().NegotiatedProtocol @@ -1329,6 +1560,7 @@ func (s *Server) getNextProto(c net.Conn) (proto string, err error) { // eventually go away. type tcpKeepaliveListener struct { *net.TCPListener + keepalive bool keepalivePeriod time.Duration } @@ -1337,9 +1569,15 @@ func (ln tcpKeepaliveListener) Accept() (net.Conn, error) { if err != nil { return nil, err } - tc.SetKeepAlive(true) + if err := tc.SetKeepAlive(ln.keepalive); err != nil { + tc.Close() //nolint:errcheck + return nil, err + } if ln.keepalivePeriod > 0 { - tc.SetKeepAlivePeriod(ln.keepalivePeriod) + if err := tc.SetKeepAlivePeriod(ln.keepalivePeriod); err != nil { + tc.Close() //nolint:errcheck + return nil, err + } } return tc, nil } @@ -1355,13 +1593,12 @@ func (s *Server) ListenAndServe(addr string) error { if err != nil { return err } - if s.TCPKeepalive { - if tcpln, ok := ln.(*net.TCPListener); ok { - return s.Serve(tcpKeepaliveListener{ - TCPListener: tcpln, - keepalivePeriod: s.TCPKeepalivePeriod, - }) - } + if tcpln, ok := ln.(*net.TCPListener); ok { + return s.Serve(tcpKeepaliveListener{ + TCPListener: tcpln, + keepalive: s.TCPKeepalive, + keepalivePeriod: s.TCPKeepalivePeriod, + }) } return s.Serve(ln) } @@ -1373,14 +1610,14 @@ func (s *Server) ListenAndServe(addr string) error { // The server sets the given file mode for the UNIX addr. func (s *Server) ListenAndServeUNIX(addr string, mode os.FileMode) error { if err := os.Remove(addr); err != nil && !os.IsNotExist(err) { - return fmt.Errorf("unexpected error when trying to remove unix socket file %q: %s", addr, err) + return fmt.Errorf("unexpected error when trying to remove unix socket file %q: %w", addr, err) } ln, err := net.Listen("unix", addr) if err != nil { return err } if err = os.Chmod(addr, mode); err != nil { - return fmt.Errorf("cannot chmod %#o for %q: %s", mode, addr, err) + return fmt.Errorf("cannot chmod %#o for %q: %w", mode, addr, err) } return s.Serve(ln) } @@ -1401,13 +1638,12 @@ func (s *Server) ListenAndServeTLS(addr, certFile, keyFile string) error { if err != nil { return err } - if s.TCPKeepalive { - if tcpln, ok := ln.(*net.TCPListener); ok { - return s.ServeTLS(tcpKeepaliveListener{ - TCPListener: tcpln, - keepalivePeriod: s.TCPKeepalivePeriod, - }, certFile, keyFile) - } + if tcpln, ok := ln.(*net.TCPListener); ok { + return s.ServeTLS(tcpKeepaliveListener{ + TCPListener: tcpln, + keepalive: s.TCPKeepalive, + keepalivePeriod: s.TCPKeepalivePeriod, + }, certFile, keyFile) } return s.ServeTLS(ln, certFile, keyFile) } @@ -1428,13 +1664,12 @@ func (s *Server) ListenAndServeTLSEmbed(addr string, certData, keyData []byte) e if err != nil { return err } - if s.TCPKeepalive { - if tcpln, ok := ln.(*net.TCPListener); ok { - return s.ServeTLSEmbed(tcpKeepaliveListener{ - TCPListener: tcpln, - keepalivePeriod: s.TCPKeepalivePeriod, - }, certData, keyData) - } + if tcpln, ok := ln.(*net.TCPListener); ok { + return s.ServeTLSEmbed(tcpKeepaliveListener{ + TCPListener: tcpln, + keepalive: s.TCPKeepalive, + keepalivePeriod: s.TCPKeepalivePeriod, + }, certData, keyData) } return s.ServeTLSEmbed(ln, certData, keyData) } @@ -1446,17 +1681,25 @@ func (s *Server) ListenAndServeTLSEmbed(addr string, certData, keyData []byte) e // If the certFile or keyFile has not been provided the server structure, // the function will use previously added TLS configuration. func (s *Server) ServeTLS(ln net.Listener, certFile, keyFile string) error { + s.mu.Lock() err := s.AppendCert(certFile, keyFile) if err != nil && err != errNoCertOrKeyProvided { + s.mu.Unlock() return err } - if s.tlsConfig == nil { + if s.TLSConfig == nil { + s.mu.Unlock() return errNoCertOrKeyProvided } - s.tlsConfig.BuildNameToCertificate() + + // BuildNameToCertificate has been deprecated since 1.14. + // But since we also support older versions we'll keep this here. + s.TLSConfig.BuildNameToCertificate() //nolint:staticcheck + + s.mu.Unlock() return s.Serve( - tls.NewListener(ln, s.tlsConfig), + tls.NewListener(ln, s.TLSConfig.Clone()), ) } @@ -1467,17 +1710,26 @@ func (s *Server) ServeTLS(ln net.Listener, certFile, keyFile string) error { // If the certFile or keyFile has not been provided the server structure, // the function will use previously added TLS configuration. func (s *Server) ServeTLSEmbed(ln net.Listener, certData, keyData []byte) error { + s.mu.Lock() + err := s.AppendCertEmbed(certData, keyData) if err != nil && err != errNoCertOrKeyProvided { + s.mu.Unlock() return err } - if s.tlsConfig == nil { + if s.TLSConfig == nil { + s.mu.Unlock() return errNoCertOrKeyProvided } - s.tlsConfig.BuildNameToCertificate() + + // BuildNameToCertificate has been deprecated since 1.14. + // But since we also support older versions we'll keep this here. + s.TLSConfig.BuildNameToCertificate() //nolint:staticcheck + + s.mu.Unlock() return s.Serve( - tls.NewListener(ln, s.tlsConfig), + tls.NewListener(ln, s.TLSConfig.Clone()), ) } @@ -1492,12 +1744,12 @@ func (s *Server) AppendCert(certFile, keyFile string) error { cert, err := tls.LoadX509KeyPair(certFile, keyFile) if err != nil { - return fmt.Errorf("cannot load TLS key pair from certFile=%q and keyFile=%q: %s", certFile, keyFile, err) + return fmt.Errorf("cannot load TLS key pair from certFile=%q and keyFile=%q: %w", certFile, keyFile, err) } s.configTLS() + s.TLSConfig.Certificates = append(s.TLSConfig.Certificates, cert) - s.tlsConfig.Certificates = append(s.tlsConfig.Certificates, cert) return nil } @@ -1509,21 +1761,19 @@ func (s *Server) AppendCertEmbed(certData, keyData []byte) error { cert, err := tls.X509KeyPair(certData, keyData) if err != nil { - return fmt.Errorf("cannot load TLS key pair from the provided certData(%d) and keyData(%d): %s", + return fmt.Errorf("cannot load TLS key pair from the provided certData(%d) and keyData(%d): %w", len(certData), len(keyData), err) } s.configTLS() + s.TLSConfig.Certificates = append(s.TLSConfig.Certificates, cert) - s.tlsConfig.Certificates = append(s.tlsConfig.Certificates, cert) return nil } func (s *Server) configTLS() { - if s.tlsConfig == nil { - s.tlsConfig = &tls.Config{ - PreferServerCipherSuites: true, - } + if s.TLSConfig == nil { + s.TLSConfig = &tls.Config{} } } @@ -1540,26 +1790,28 @@ func (s *Server) Serve(ln net.Listener) error { var c net.Conn var err error + maxWorkersCount := s.getConcurrency() + s.mu.Lock() { - if s.ln != nil { - s.mu.Unlock() - return ErrAlreadyServing + s.ln = append(s.ln, ln) + if s.done == nil { + s.done = make(chan struct{}) } - s.ln = ln - s.done = make(chan struct{}) + if s.concurrencyCh == nil { + s.concurrencyCh = make(chan struct{}, maxWorkersCount) + } } s.mu.Unlock() - maxWorkersCount := s.getConcurrency() - s.concurrencyCh = make(chan struct{}, maxWorkersCount) wp := &workerPool{ - WorkerFunc: s.serveConn, - MaxWorkersCount: maxWorkersCount, - LogAllErrors: s.LogAllErrors, - Logger: s.logger(), - connState: s.setState, + WorkerFunc: s.serveConn, + MaxWorkersCount: maxWorkersCount, + LogAllErrors: s.LogAllErrors, + MaxIdleWorkerDuration: s.MaxIdleWorkerDuration, + Logger: s.logger(), + connState: s.setState, } wp.Start() @@ -1614,7 +1866,7 @@ func (s *Server) Serve(ln net.Listener) error { // When Shutdown is called, Serve, ListenAndServe, and ListenAndServeTLS immediately return nil. // Make sure the program doesn't exit and waits instead for Shutdown to return. // -// Shutdown does not close keepalive connections so its recommended to set ReadTimeout to something else than 0. +// Shutdown does not close keepalive connections so its recommended to set ReadTimeout and IdleTimeout to something else than 0. func (s *Server) Shutdown() error { s.mu.Lock() defer s.mu.Unlock() @@ -1626,14 +1878,18 @@ func (s *Server) Shutdown() error { return nil } - if err := s.ln.Close(); err != nil { - return err + for _, ln := range s.ln { + if err := ln.Close(); err != nil { + return err + } } if s.done != nil { close(s.done) } + s.closeIdleConns() + // Closing the listener will make Serve() call Stop on the worker pool. // Setting .stop to 1 will make serveConn() break out of its loop. // Now we just have to wait until all workers are done. @@ -1647,6 +1903,7 @@ func (s *Server) Shutdown() error { time.Sleep(time.Millisecond * 100) } + s.done = nil s.ln = nil return nil } @@ -1658,13 +1915,13 @@ func acceptConn(s *Server, ln net.Listener, lastPerIPErrorTime *time.Time) (net. if c != nil { panic("BUG: net.Listener returned non-nil conn and non-nil error") } - if netErr, ok := err.(net.Error); ok && netErr.Temporary() { - s.logger().Printf("Temporary error when accepting new connections: %s", netErr) + if netErr, ok := err.(net.Error); ok && netErr.Timeout() { + s.logger().Printf("Timeout error when accepting new connections: %v", netErr) time.Sleep(time.Second) continue } if err != io.EOF && !strings.Contains(err.Error(), "use of closed network connection") { - s.logger().Printf("Permanent error when accepting new connections: %s", err) + s.logger().Printf("Permanent error when accepting new connections: %v", err) return nil, err } return nil, io.EOF @@ -1781,7 +2038,15 @@ func (s *Server) GetCurrentConcurrency() uint32 { // // This function is intended be used by monitoring systems func (s *Server) GetOpenConnectionsCount() int32 { - return atomic.LoadInt32(&s.open) - 1 + if atomic.LoadInt32(&s.stop) == 0 { + // Decrement by one to avoid reporting the extra open value that gets + // counted while the server is listening. + return atomic.LoadInt32(&s.open) - 1 + } + // This is not perfect, because s.stop could have changed to zero + // before we load the value of s.open. However, in the common case + // this avoids underreporting open connections by 1 during server shutdown. + return atomic.LoadInt32(&s.open) } func (s *Server) getConcurrency() int { @@ -1811,16 +2076,29 @@ func (s *Server) idleTimeout() time.Duration { return s.ReadTimeout } -func (s *Server) serveConn(c net.Conn) error { - defer atomic.AddInt32(&s.open, -1) +func (s *Server) serveConnCleanup() { + atomic.AddInt32(&s.open, -1) + atomic.AddUint32(&s.concurrency, ^uint32(0)) +} - if proto, err := s.getNextProto(c); err != nil { - return err - } else { - handler, ok := s.nextProtos[proto] - if ok { - return handler(c) +func (s *Server) serveConn(c net.Conn) (err error) { + defer s.serveConnCleanup() + atomic.AddUint32(&s.concurrency, 1) + + var proto string + if proto, err = s.getNextProto(c); err != nil { + return + } + if handler, ok := s.nextProtos[proto]; ok { + // Remove read or write deadlines that might have previously been set. + // The next handler is responsible for setting its own deadlines. + if s.ReadTimeout > 0 || s.WriteTimeout > 0 { + if err := c.SetDeadline(zeroTime); err != nil { + panic(fmt.Sprintf("BUG: error in SetDeadline(zeroTime): %v", err)) + } } + + return handler(c) } var serverName []byte @@ -1834,6 +2112,8 @@ func (s *Server) serveConn(c net.Conn) error { if maxRequestBodySize <= 0 { maxRequestBodySize = DefaultMaxRequestBodySize } + writeTimeout := s.WriteTimeout + previousWriteTimeout := time.Duration(0) ctx := s.acquireCtx(c) ctx.connTime = connTime @@ -1842,14 +2122,14 @@ func (s *Server) serveConn(c net.Conn) error { br *bufio.Reader bw *bufio.Writer - err error - timeoutResponse *Response - hijackHandler HijackHandler + timeoutResponse *Response + hijackHandler HijackHandler + hijackNoResponse bool connectionClose bool isHTTP11 bool - reqReset bool + continueReadingRequest bool = true ) for { connRequestNum++ @@ -1858,7 +2138,7 @@ func (s *Server) serveConn(c net.Conn) error { if connRequestNum > 1 { if d := s.idleTimeout(); d > 0 { if err := c.SetReadDeadline(time.Now().Add(d)); err != nil { - panic(fmt.Sprintf("BUG: error in SetReadDeadline(%s): %s", d, err)) + break } } } @@ -1872,11 +2152,13 @@ func (s *Server) serveConn(c net.Conn) error { // within the idle time. if connRequestNum > 1 { var b []byte - b, err = br.Peek(4) + b, err = br.Peek(1) if len(b) == 0 { // If reading from a keep-alive connection returns nothing it means // the connection was closed (either timeout or from the other side). - err = errNothingRead + if err != io.EOF { + err = ErrNothingRead{err} + } } } } else { @@ -1887,24 +2169,77 @@ func (s *Server) serveConn(c net.Conn) error { ctx.Request.isTLS = isTLS ctx.Response.Header.noDefaultContentType = s.NoDefaultContentType + ctx.Response.Header.noDefaultDate = s.NoDefaultDate + + // Secure header error logs configuration + ctx.Request.Header.secureErrorLogMessage = s.SecureErrorLogMessage + ctx.Response.Header.secureErrorLogMessage = s.SecureErrorLogMessage + ctx.Request.secureErrorLogMessage = s.SecureErrorLogMessage + ctx.Response.secureErrorLogMessage = s.SecureErrorLogMessage if err == nil { + s.setState(c, StateActive) + if s.ReadTimeout > 0 { if err := c.SetReadDeadline(time.Now().Add(s.ReadTimeout)); err != nil { - panic(fmt.Sprintf("BUG: error in SetReadDeadline(%s): %s", s.ReadTimeout, err)) + break + } + } else if s.IdleTimeout > 0 && connRequestNum > 1 { + // If this was an idle connection and the server has an IdleTimeout but + // no ReadTimeout then we should remove the ReadTimeout. + if err := c.SetReadDeadline(zeroTime); err != nil { + break } } - if s.DisableHeaderNamesNormalizing { ctx.Request.Header.DisableNormalizing() ctx.Response.Header.DisableNormalizing() } - // reading Headers and Body - err = ctx.Request.readLimitBody(br, maxRequestBodySize, s.GetOnly) + + // Reading Headers. + // + // If we have pipline response in the outgoing buffer, + // we only want to try and read the next headers once. + // If we have to wait for the next request we flush the + // outgoing buffer first so it doesn't have to wait. + if bw != nil && bw.Buffered() > 0 { + err = ctx.Request.Header.readLoop(br, false) + if err == errNeedMore { + err = bw.Flush() + if err != nil { + break + } + + err = ctx.Request.Header.Read(br) + } + } else { + err = ctx.Request.Header.Read(br) + } + if err == nil { - // If we read any bytes off the wire, we're active. - s.setState(c, StateActive) + if onHdrRecv := s.HeaderReceived; onHdrRecv != nil { + reqConf := onHdrRecv(&ctx.Request.Header) + if reqConf.ReadTimeout > 0 { + deadline := time.Now().Add(reqConf.ReadTimeout) + if err := c.SetReadDeadline(deadline); err != nil { + panic(fmt.Sprintf("BUG: error in SetReadDeadline(%v): %v", deadline, err)) + } + } + if reqConf.MaxRequestBodySize > 0 { + maxRequestBodySize = reqConf.MaxRequestBodySize + } + if reqConf.WriteTimeout > 0 { + writeTimeout = reqConf.WriteTimeout + } + } + // read body + if s.StreamRequestBody { + err = ctx.Request.readBodyStream(br, maxRequestBodySize, s.GetOnly, !s.DisablePreParseMultipartForm) + } else { + err = ctx.Request.readLimitBody(br, maxRequestBodySize, s.GetOnly, !s.DisablePreParseMultipartForm) + } } + if (s.ReduceMemoryUsage && br.Buffered() == 0) || err != nil { releaseReader(s, br) br = nil @@ -1914,48 +2249,77 @@ func (s *Server) serveConn(c net.Conn) error { if err != nil { if err == io.EOF { err = nil - } else if connRequestNum > 1 && err == errNothingRead { - // This is not the first request and we haven't read a single byte - // of a new request yet. This means it's just a keep-alive connection - // closing down either because the remote closed it or because - // or a read timeout on our side. Either way just close the connection - // and don't return any error response. - err = nil - } else { + } else if nr, ok := err.(ErrNothingRead); ok { + if connRequestNum > 1 { + // This is not the first request and we haven't read a single byte + // of a new request yet. This means it's just a keep-alive connection + // closing down either because the remote closed it or because + // or a read timeout on our side. Either way just close the connection + // and don't return any error response. + err = nil + } else { + err = nr.error + } + } + + if err != nil { bw = s.writeErrorResponse(bw, ctx, serverName, err) } break } // 'Expect: 100-continue' request handling. - // See http://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html for details. - if !ctx.Request.Header.ignoreBody() && ctx.Request.MayContinue() { - // Send 'HTTP/1.1 100 Continue' response. - if bw == nil { - bw = acquireWriter(ctx) - } - bw.Write(strResponseContinue) - err = bw.Flush() - if err != nil { - break - } - if s.ReduceMemoryUsage { - releaseWriter(s, bw) - bw = nil - } + // See https://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8.2.3 for details. + if ctx.Request.MayContinue() { - // Read request body. - if br == nil { - br = acquireReader(ctx) - } - err = ctx.Request.ContinueReadBody(br, maxRequestBodySize) - if (s.ReduceMemoryUsage && br.Buffered() == 0) || err != nil { - releaseReader(s, br) - br = nil + // Allow the ability to deny reading the incoming request body + if s.ContinueHandler != nil { + if continueReadingRequest = s.ContinueHandler(&ctx.Request.Header); !continueReadingRequest { + if br != nil { + br.Reset(ctx.c) + } + + ctx.SetStatusCode(StatusExpectationFailed) + } } - if err != nil { - bw = s.writeErrorResponse(bw, ctx, serverName, err) - break + + if continueReadingRequest { + if bw == nil { + bw = acquireWriter(ctx) + } + + // Send 'HTTP/1.1 100 Continue' response. + _, err = bw.Write(strResponseContinue) + if err != nil { + break + } + err = bw.Flush() + if err != nil { + break + } + if s.ReduceMemoryUsage { + releaseWriter(s, bw) + bw = nil + } + + // Read request body. + if br == nil { + br = acquireReader(ctx) + } + + if s.StreamRequestBody { + err = ctx.Request.ContinueReadBodyStream(br, maxRequestBodySize, !s.DisablePreParseMultipartForm) + } else { + err = ctx.Request.ContinueReadBody(br, maxRequestBodySize, !s.DisablePreParseMultipartForm) + } + if (s.ReduceMemoryUsage && br.Buffered() == 0) || err != nil { + releaseReader(s, br) + br = nil + } + if err != nil { + bw = s.writeErrorResponse(bw, ctx, serverName, err) + break + } } } @@ -1968,40 +2332,46 @@ func (s *Server) serveConn(c net.Conn) error { ctx.connID = connID ctx.connRequestNum = connRequestNum ctx.time = time.Now() - s.Handler(ctx) + + // If a client denies a request the handler should not be called + if continueReadingRequest { + s.Handler(ctx) + } timeoutResponse = ctx.timeoutResponse if timeoutResponse != nil { + // Acquire a new ctx because the old one will still be in use by the timeout out handler. ctx = s.acquireCtx(c) timeoutResponse.CopyTo(&ctx.Response) - if br != nil { - // Close connection, since br may be attached to the old ctx via ctx.fbr. - ctx.SetConnectionClose() - } } - if !ctx.IsGet() && ctx.IsHead() { + if ctx.IsHead() { ctx.Response.SkipBody = true } - reqReset = true - ctx.Request.Reset() hijackHandler = ctx.hijackHandler ctx.hijackHandler = nil - - ctx.userValues.Reset() + hijackNoResponse = ctx.hijackNoResponse && hijackHandler != nil + ctx.hijackNoResponse = false if s.MaxRequestsPerConn > 0 && connRequestNum >= uint64(s.MaxRequestsPerConn) { ctx.SetConnectionClose() } - if s.WriteTimeout > 0 { - if err := c.SetWriteDeadline(time.Now().Add(s.WriteTimeout)); err != nil { - panic(fmt.Sprintf("BUG: error in SetWriteDeadline(%s): %s", s.WriteTimeout, err)) + if writeTimeout > 0 { + if err := c.SetWriteDeadline(time.Now().Add(writeTimeout)); err != nil { + panic(fmt.Sprintf("BUG: error in SetWriteDeadline(%v): %v", writeTimeout, err)) + } + previousWriteTimeout = writeTimeout + } else if previousWriteTimeout > 0 { + // We don't want a write timeout but we previously set one, remove it. + if err := c.SetWriteDeadline(zeroTime); err != nil { + panic(fmt.Sprintf("BUG: error in SetWriteDeadline(zeroTime): %v", err)) } + previousWriteTimeout = 0 } - connectionClose = connectionClose || ctx.Response.ConnectionClose() + connectionClose = connectionClose || ctx.Response.ConnectionClose() || (s.CloseOnShutdown && atomic.LoadInt32(&s.stop) == 1) if connectionClose { ctx.Response.Header.SetCanonical(strConnection, strClose) } else if !isHTTP11 { @@ -2015,30 +2385,32 @@ func (s *Server) serveConn(c net.Conn) error { ctx.Response.Header.SetServerBytes(serverName) } - if bw == nil { - bw = acquireWriter(ctx) - } - if err = writeResponse(ctx, bw); err != nil { - break - } + if !hijackNoResponse { + if bw == nil { + bw = acquireWriter(ctx) + } + if err = writeResponse(ctx, bw); err != nil { + break + } - // Only flush the writer if we don't have another request in the pipeline. - // This is a big of an ugly optimization for https://www.techempower.com/benchmarks/ - // This benchmark will send 16 pipelined requests. It is faster to pack as many responses - // in a TCP packet and send it back at once than waiting for a flush every request. - // In real world circumstances this behaviour could be argued as being wrong. - if br == nil || br.Buffered() == 0 || connectionClose { - err = bw.Flush() - if err != nil { + // Only flush the writer if we don't have another request in the pipeline. + // This is a big of an ugly optimization for https://www.techempower.com/benchmarks/ + // This benchmark will send 16 pipelined requests. It is faster to pack as many responses + // in a TCP packet and send it back at once than waiting for a flush every request. + // In real world circumstances this behaviour could be argued as being wrong. + if br == nil || br.Buffered() == 0 || connectionClose { + err = bw.Flush() + if err != nil { + break + } + } + if connectionClose { break } - } - if connectionClose { - break - } - if s.ReduceMemoryUsage { - releaseWriter(s, bw) - bw = nil + if s.ReduceMemoryUsage && hijackHandler == nil { + releaseWriter(s, bw) + bw = nil + } } if hijackHandler != nil { @@ -2046,9 +2418,6 @@ func (s *Server) serveConn(c net.Conn) error { if br != nil { hjr = br br = nil - - // br may point to ctx.fbr, so do not return ctx into pool below. - ctx = nil } if bw != nil { err = bw.Flush() @@ -2058,15 +2427,26 @@ func (s *Server) serveConn(c net.Conn) error { releaseWriter(s, bw) bw = nil } - c.SetReadDeadline(zeroTime) - c.SetWriteDeadline(zeroTime) - go hijackConnHandler(hjr, c, s, hijackHandler) - hijackHandler = nil + err = c.SetDeadline(zeroTime) + if err != nil { + break + } + go hijackConnHandler(ctx, hjr, c, s, hijackHandler) err = errHijacked break } + if ctx.Request.bodyStream != nil { + if rs, ok := ctx.Request.bodyStream.(*requestStream); ok { + releaseRequestStream(rs) + } + ctx.Request.bodyStream = nil + } + s.setState(c, StateIdle) + ctx.userValues.Reset() + ctx.Request.Reset() + ctx.Response.Reset() if atomic.LoadInt32(&s.stop) == 1 { err = nil @@ -2080,25 +2460,21 @@ func (s *Server) serveConn(c net.Conn) error { if bw != nil { releaseWriter(s, bw) } - if ctx != nil { - // in unexpected cases the for loop will break - // before request reset call. in such cases, call it before - // release to fix #548 - if !reqReset { - ctx.Request.Reset() - } + if hijackHandler == nil { s.releaseCtx(ctx) } - return err + + return } func (s *Server) setState(nc net.Conn, state ConnState) { + s.trackConn(nc, state) if hook := s.ConnState; hook != nil { hook(nc, state) } } -func hijackConnHandler(r io.Reader, c net.Conn, s *Server, h HijackHandler) { +func hijackConnHandler(ctx *RequestCtx, r io.Reader, c net.Conn, s *Server, h HijackHandler) { hjc := s.acquireHijackConn(r, c) h(hjc) @@ -2109,6 +2485,7 @@ func hijackConnHandler(r io.Reader, c net.Conn, s *Server, h HijackHandler) { c.Close() s.releaseHijackConn(hjc) } + s.releaseCtx(ctx) } func (s *Server) acquireHijackConn(r io.Reader, c net.Conn) *hijackConn { @@ -2172,7 +2549,7 @@ func writeResponse(ctx *RequestCtx, w *bufio.Writer) error { panic("BUG: cannot write timed out response") } err := ctx.Response.Write(w) - ctx.Response.Reset() + return err } @@ -2253,17 +2630,19 @@ func releaseWriter(s *Server, w *bufio.Writer) { func (s *Server) acquireCtx(c net.Conn) (ctx *RequestCtx) { v := s.ctxPool.Get() if v == nil { - ctx = &RequestCtx{ - s: s, - } keepBodyBuffer := !s.ReduceMemoryUsage + + ctx = new(RequestCtx) ctx.Request.keepBodyBuffer = keepBodyBuffer ctx.Response.keepBodyBuffer = keepBodyBuffer + ctx.s = s } else { ctx = v.(*RequestCtx) } + ctx.c = c - return + + return ctx } // Init2 prepares ctx for passing to RequestHandler. @@ -2274,6 +2653,7 @@ func (s *Server) acquireCtx(c net.Conn) (ctx *RequestCtx) { // See https://github.com/valyala/httpteleport for details. func (ctx *RequestCtx) Init2(conn net.Conn, logger Logger, reduceMemoryUsage bool) { ctx.c = conn + ctx.remoteAddr = nil ctx.logger.logger = logger ctx.connID = nextConnID() ctx.s = fakeServer @@ -2385,8 +2765,8 @@ func (s *Server) releaseCtx(ctx *RequestCtx) { if ctx.timeoutResponse != nil { panic("BUG: cannot release timed out RequestCtx") } - ctx.c = nil - ctx.fbr.c = nil + + ctx.reset() s.ctxPool.Put(ctx) } @@ -2406,26 +2786,34 @@ func (s *Server) getServerName() []byte { } func (s *Server) writeFastError(w io.Writer, statusCode int, msg string) { - w.Write(statusLine(statusCode)) + w.Write(formatStatusLine(nil, strHTTP11, statusCode, s2b(StatusMessage(statusCode)))) //nolint:errcheck server := "" if !s.NoDefaultServerHeader { server = fmt.Sprintf("Server: %s\r\n", s.getServerName()) } + date := "" + if !s.NoDefaultDate { + serverDateOnce.Do(updateServerDate) + date = fmt.Sprintf("Date: %s\r\n", serverDate.Load()) + } + fmt.Fprintf(w, "Connection: close\r\n"+ server+ - "Date: %s\r\n"+ + date+ "Content-Type: text/plain\r\n"+ "Content-Length: %d\r\n"+ "\r\n"+ "%s", - serverDate.Load(), len(msg), msg) + len(msg), msg) } func defaultErrorHandler(ctx *RequestCtx, err error) { if _, ok := err.(*ErrSmallBuffer); ok { ctx.Error("Too big request header", StatusRequestHeaderFieldsTooLarge) + } else if netErr, ok := err.(*net.OpError); ok && netErr.Timeout() { + ctx.Error("Request timeout", StatusRequestTimeout) } else { ctx.Error("Error when parsing request", StatusBadRequest) } @@ -2446,11 +2834,38 @@ func (s *Server) writeErrorResponse(bw *bufio.Writer, ctx *RequestCtx, serverNam if bw == nil { bw = acquireWriter(ctx) } - writeResponse(ctx, bw) + + writeResponse(ctx, bw) //nolint:errcheck + ctx.Response.Reset() bw.Flush() + return bw } +func (s *Server) trackConn(c net.Conn, state ConnState) { + s.idleConnsMu.Lock() + switch state { + case StateIdle: + if s.idleConns == nil { + s.idleConns = make(map[net.Conn]struct{}) + } + s.idleConns[c] = struct{}{} + + default: + delete(s.idleConns, c) + } + s.idleConnsMu.Unlock() +} + +func (s *Server) closeIdleConns() { + s.idleConnsMu.Lock() + for c := range s.idleConns { + _ = c.Close() + } + s.idleConns = nil + s.idleConnsMu.Unlock() +} + // A ConnState represents the state of a client connection to a server. // It's used by the optional Server.ConnState hook. type ConnState int diff --git a/vendor/github.com/valyala/fasthttp/ssl-cert-snakeoil.key b/vendor/github.com/valyala/fasthttp/ssl-cert-snakeoil.key deleted file mode 100644 index 00a79a3b57..0000000000 --- a/vendor/github.com/valyala/fasthttp/ssl-cert-snakeoil.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD4IQusAs8PJdnG -3mURt/AXtgC+ceqLOatJ49JJE1VPTkMAy+oE1f1XvkMrYsHqmDf6GWVzgVXryL4U -wq2/nJSm56ddhN55nI8oSN3dtywUB8/ShelEN73nlN77PeD9tl6NksPwWaKrqxq0 -FlabRPZSQCfmgZbhDV8Sa8mfCkFU0G0lit6kLGceCKMvmW+9Bz7ebsYmVdmVMxmf -IJStFD44lWFTdUc65WISKEdW2ELcUefb0zOLw+0PCbXFGJH5x5ktksW8+BBk2Hkg -GeQRL/qPCccthbScO0VgNj3zJ3ZZL0ObSDAbvNDG85joeNjDNq5DT/BAZ0bOSbEF -sh+f9BAzAgMBAAECggEBAJWv2cq7Jw6MVwSRxYca38xuD6TUNBopgBvjREixURW2 -sNUaLuMb9Omp7fuOaE2N5rcJ+xnjPGIxh/oeN5MQctz9gwn3zf6vY+15h97pUb4D -uGvYPRDaT8YVGS+X9NMZ4ZCmqW2lpWzKnCFoGHcy8yZLbcaxBsRdvKzwOYGoPiFb -K2QuhXZ/1UPmqK9i2DFKtj40X6vBszTNboFxOVpXrPu0FJwLVSDf2hSZ4fMM0DH3 -YqwKcYf5te+hxGKgrqRA3tn0NCWii0in6QIwXMC+kMw1ebg/tZKqyDLMNptAK8J+ -DVw9m5X1seUHS5ehU/g2jrQrtK5WYn7MrFK4lBzlRwECgYEA/d1TeANYECDWRRDk -B0aaRZs87Rwl/J9PsvbsKvtU/bX+OfSOUjOa9iQBqn0LmU8GqusEET/QVUfocVwV -Bggf/5qDLxz100Rj0ags/yE/kNr0Bb31kkkKHFMnCT06YasR7qKllwrAlPJvQv9x -IzBKq+T/Dx08Wep9bCRSFhzRCnsCgYEA+jdeZXTDr/Vz+D2B3nAw1frqYFfGnEVY -wqmoK3VXMDkGuxsloO2rN+SyiUo3JNiQNPDub/t7175GH5pmKtZOlftePANsUjBj -wZ1D0rI5Bxu/71ibIUYIRVmXsTEQkh/ozoh3jXCZ9+bLgYiYx7789IUZZSokFQ3D -FICUT9KJ36kCgYAGoq9Y1rWJjmIrYfqj2guUQC+CfxbbGIrrwZqAsRsSmpwvhZ3m -tiSZxG0quKQB+NfSxdvQW5ulbwC7Xc3K35F+i9pb8+TVBdeaFkw+yu6vaZmxQLrX -fQM/pEjD7A7HmMIaO7QaU5SfEAsqdCTP56Y8AftMuNXn/8IRfo2KuGwaWwKBgFpU -ILzJoVdlad9E/Rw7LjYhZfkv1uBVXIyxyKcfrkEXZSmozDXDdxsvcZCEfVHM6Ipk -K/+7LuMcqp4AFEAEq8wTOdq6daFaHLkpt/FZK6M4TlruhtpFOPkoNc3e45eM83OT -6mziKINJC1CQ6m65sQHpBtjxlKMRG8rL/D6wx9s5AoGBAMRlqNPMwglT3hvDmsAt -9Lf9pdmhERUlHhD8bj8mDaBj2Aqv7f6VRJaYZqP403pKKQexuqcn80mtjkSAPFkN -Cj7BVt/RXm5uoxDTnfi26RF9F6yNDEJ7UU9+peBr99aazF/fTgW/1GcMkQnum8uV -c257YgaWmjK9uB0Y2r2VxS0G ------END PRIVATE KEY----- diff --git a/vendor/github.com/valyala/fasthttp/ssl-cert-snakeoil.pem b/vendor/github.com/valyala/fasthttp/ssl-cert-snakeoil.pem deleted file mode 100644 index 93e77cd956..0000000000 --- a/vendor/github.com/valyala/fasthttp/ssl-cert-snakeoil.pem +++ /dev/null @@ -1,17 +0,0 @@ ------BEGIN CERTIFICATE----- -MIICujCCAaKgAwIBAgIJAMbXnKZ/cikUMA0GCSqGSIb3DQEBCwUAMBUxEzARBgNV -BAMTCnVidW50dS5uYW4wHhcNMTUwMjA0MDgwMTM5WhcNMjUwMjAxMDgwMTM5WjAV -MRMwEQYDVQQDEwp1YnVudHUubmFuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB -CgKCAQEA+CELrALPDyXZxt5lEbfwF7YAvnHqizmrSePSSRNVT05DAMvqBNX9V75D -K2LB6pg3+hllc4FV68i+FMKtv5yUpuenXYTeeZyPKEjd3bcsFAfP0oXpRDe955Te -+z3g/bZejZLD8Fmiq6satBZWm0T2UkAn5oGW4Q1fEmvJnwpBVNBtJYrepCxnHgij -L5lvvQc+3m7GJlXZlTMZnyCUrRQ+OJVhU3VHOuViEihHVthC3FHn29Mzi8PtDwm1 -xRiR+ceZLZLFvPgQZNh5IBnkES/6jwnHLYW0nDtFYDY98yd2WS9Dm0gwG7zQxvOY -6HjYwzauQ0/wQGdGzkmxBbIfn/QQMwIDAQABow0wCzAJBgNVHRMEAjAAMA0GCSqG -SIb3DQEBCwUAA4IBAQBQjKm/4KN/iTgXbLTL3i7zaxYXFLXsnT1tF+ay4VA8aj98 -L3JwRTciZ3A5iy/W4VSCt3eASwOaPWHKqDBB5RTtL73LoAqsWmO3APOGQAbixcQ2 -45GXi05OKeyiYRi1Nvq7Unv9jUkRDHUYVPZVSAjCpsXzPhFkmZoTRxmx5l0ZF7Li -K91lI5h+eFq0dwZwrmlPambyh1vQUi70VHv8DNToVU29kel7YLbxGbuqETfhrcy6 -X+Mha6RYITkAn5FqsZcKMsc9eYGEF4l3XV+oS7q6xfTxktYJMFTI18J0lQ2Lv/CI -whdMnYGntDQBE/iFCrJEGNsKGc38796GBOb5j+zd ------END CERTIFICATE----- diff --git a/vendor/github.com/valyala/fasthttp/stackless/writer.go b/vendor/github.com/valyala/fasthttp/stackless/writer.go index c2053f9a13..b0d3e8dd96 100644 --- a/vendor/github.com/valyala/fasthttp/stackless/writer.go +++ b/vendor/github.com/valyala/fasthttp/stackless/writer.go @@ -75,7 +75,7 @@ func (w *writer) Close() error { func (w *writer) Reset(dstW io.Writer) { w.xw.Reset() - w.do(opReset) + w.do(opReset) //nolint:errcheck w.dstW = dstW } @@ -125,8 +125,7 @@ func (w *xWriter) Write(p []byte) (int, error) { if w.bb == nil { w.bb = bufferPool.Get() } - w.bb.Write(p) - return len(p), nil + return w.bb.Write(p) } func (w *xWriter) Reset() { diff --git a/vendor/github.com/valyala/fasthttp/status.go b/vendor/github.com/valyala/fasthttp/status.go index 6687efb424..c88ba11ee7 100644 --- a/vendor/github.com/valyala/fasthttp/status.go +++ b/vendor/github.com/valyala/fasthttp/status.go @@ -1,8 +1,12 @@ package fasthttp import ( - "fmt" - "sync/atomic" + "strconv" +) + +const ( + statusMessageMin = 100 + statusMessageMax = 511 ) // HTTP status codes were stolen from net/http. @@ -10,6 +14,7 @@ const ( StatusContinue = 100 // RFC 7231, 6.2.1 StatusSwitchingProtocols = 101 // RFC 7231, 6.2.2 StatusProcessing = 102 // RFC 2518, 10.1 + StatusEarlyHints = 103 // RFC 8297 StatusOK = 200 // RFC 7231, 6.3.1 StatusCreated = 201 // RFC 7231, 6.3.2 @@ -51,6 +56,7 @@ const ( StatusRequestedRangeNotSatisfiable = 416 // RFC 7233, 4.4 StatusExpectationFailed = 417 // RFC 7231, 6.5.14 StatusTeapot = 418 // RFC 7168, 2.3.3 + StatusMisdirectedRequest = 421 // RFC 7540, 9.1.2 StatusUnprocessableEntity = 422 // RFC 4918, 11.2 StatusLocked = 423 // RFC 4918, 11.3 StatusFailedDependency = 424 // RFC 4918, 11.4 @@ -74,12 +80,13 @@ const ( ) var ( - statusLines atomic.Value + unknownStatusCode = "Unknown Status Code" - statusMessages = map[int]string{ + statusMessages = []string{ StatusContinue: "Continue", StatusSwitchingProtocols: "Switching Protocols", StatusProcessing: "Processing", + StatusEarlyHints: "Early Hints", StatusOK: "OK", StatusCreated: "Created", @@ -120,6 +127,7 @@ var ( StatusRequestedRangeNotSatisfiable: "Requested Range Not Satisfiable", StatusExpectationFailed: "Expectation Failed", StatusTeapot: "I'm a teapot", + StatusMisdirectedRequest: "Misdirected Request", StatusUnprocessableEntity: "Unprocessable Entity", StatusLocked: "Locked", StatusFailedDependency: "Failed Dependency", @@ -145,32 +153,25 @@ var ( // StatusMessage returns HTTP status message for the given status code. func StatusMessage(statusCode int) string { - s := statusMessages[statusCode] - if s == "" { - s = "Unknown Status Code" + if statusCode < statusMessageMin || statusCode > statusMessageMax { + return unknownStatusCode } - return s -} -func init() { - statusLines.Store(make(map[int][]byte)) -} - -func statusLine(statusCode int) []byte { - m := statusLines.Load().(map[int][]byte) - h := m[statusCode] - if h != nil { - return h + if s := statusMessages[statusCode]; s != "" { + return s } + return unknownStatusCode +} - statusText := StatusMessage(statusCode) - - h = []byte(fmt.Sprintf("HTTP/1.1 %d %s\r\n", statusCode, statusText)) - newM := make(map[int][]byte, len(m)+1) - for k, v := range m { - newM[k] = v +func formatStatusLine(dst []byte, protocol []byte, statusCode int, statusText []byte) []byte { + dst = append(dst, protocol...) + dst = append(dst, ' ') + dst = strconv.AppendInt(dst, int64(statusCode), 10) + dst = append(dst, ' ') + if len(statusText) == 0 { + dst = append(dst, s2b(StatusMessage(statusCode))...) + } else { + dst = append(dst, statusText...) } - newM[statusCode] = h - statusLines.Store(newM) - return h + return append(dst, strCRLF...) } diff --git a/vendor/github.com/valyala/fasthttp/streaming.go b/vendor/github.com/valyala/fasthttp/streaming.go new file mode 100644 index 0000000000..fc04916d5e --- /dev/null +++ b/vendor/github.com/valyala/fasthttp/streaming.go @@ -0,0 +1,109 @@ +package fasthttp + +import ( + "bufio" + "bytes" + "io" + "sync" + + "github.com/valyala/bytebufferpool" +) + +type requestStream struct { + header *RequestHeader + prefetchedBytes *bytes.Reader + reader *bufio.Reader + totalBytesRead int + chunkLeft int +} + +func (rs *requestStream) Read(p []byte) (int, error) { + var ( + n int + err error + ) + if rs.header.contentLength == -1 { + if rs.chunkLeft == 0 { + chunkSize, err := parseChunkSize(rs.reader) + if err != nil { + return 0, err + } + if chunkSize == 0 { + err = rs.header.ReadTrailer(rs.reader) + if err != nil && err != io.EOF { + return 0, err + } + return 0, io.EOF + } + rs.chunkLeft = chunkSize + } + bytesToRead := len(p) + if rs.chunkLeft < len(p) { + bytesToRead = rs.chunkLeft + } + n, err = rs.reader.Read(p[:bytesToRead]) + rs.totalBytesRead += n + rs.chunkLeft -= n + if err == io.EOF { + err = io.ErrUnexpectedEOF + } + if err == nil && rs.chunkLeft == 0 { + err = readCrLf(rs.reader) + } + return n, err + } + if rs.totalBytesRead == rs.header.contentLength { + return 0, io.EOF + } + prefetchedSize := int(rs.prefetchedBytes.Size()) + if prefetchedSize > rs.totalBytesRead { + left := prefetchedSize - rs.totalBytesRead + if len(p) > left { + p = p[:left] + } + n, err := rs.prefetchedBytes.Read(p) + rs.totalBytesRead += n + if n == rs.header.contentLength { + return n, io.EOF + } + return n, err + } else { + left := rs.header.contentLength - rs.totalBytesRead + if len(p) > left { + p = p[:left] + } + n, err = rs.reader.Read(p) + rs.totalBytesRead += n + if err != nil { + return n, err + } + } + + if rs.totalBytesRead == rs.header.contentLength { + err = io.EOF + } + return n, err +} + +func acquireRequestStream(b *bytebufferpool.ByteBuffer, r *bufio.Reader, h *RequestHeader) *requestStream { + rs := requestStreamPool.Get().(*requestStream) + rs.prefetchedBytes = bytes.NewReader(b.B) + rs.reader = r + rs.header = h + return rs +} + +func releaseRequestStream(rs *requestStream) { + rs.prefetchedBytes = nil + rs.totalBytesRead = 0 + rs.chunkLeft = 0 + rs.reader = nil + rs.header = nil + requestStreamPool.Put(rs) +} + +var requestStreamPool = sync.Pool{ + New: func() interface{} { + return &requestStream{} + }, +} diff --git a/vendor/github.com/valyala/fasthttp/strings.go b/vendor/github.com/valyala/fasthttp/strings.go index f654f958a0..370e307989 100644 --- a/vendor/github.com/valyala/fasthttp/strings.go +++ b/vendor/github.com/valyala/fasthttp/strings.go @@ -7,51 +7,56 @@ var ( ) var ( - strSlash = []byte("/") - strSlashSlash = []byte("//") - strSlashDotDot = []byte("/..") - strSlashDotSlash = []byte("/./") - strSlashDotDotSlash = []byte("/../") - strCRLF = []byte("\r\n") - strHTTP = []byte("http") - strHTTPS = []byte("https") - strHTTP11 = []byte("HTTP/1.1") - strColonSlashSlash = []byte("://") - strColonSpace = []byte(": ") - strGMT = []byte("GMT") + strSlash = []byte("/") + strSlashSlash = []byte("//") + strSlashDotDot = []byte("/..") + strSlashDotSlash = []byte("/./") + strSlashDotDotSlash = []byte("/../") + strBackSlashDotDot = []byte(`\..`) + strBackSlashDotBackSlash = []byte(`\.\`) + strSlashDotDotBackSlash = []byte(`/..\`) + strBackSlashDotDotBackSlash = []byte(`\..\`) + strCRLF = []byte("\r\n") + strHTTP = []byte("http") + strHTTPS = []byte("https") + strHTTP10 = []byte("HTTP/1.0") + strHTTP11 = []byte("HTTP/1.1") + strColon = []byte(":") + strColonSlashSlash = []byte("://") + strColonSpace = []byte(": ") + strCommaSpace = []byte(", ") + strGMT = []byte("GMT") strResponseContinue = []byte("HTTP/1.1 100 Continue\r\n\r\n") - strGet = []byte(MethodGet) - strHead = []byte(MethodHead) - strPost = []byte(MethodPost) - strPut = []byte(MethodPut) - strDelete = []byte(MethodDelete) - strConnect = []byte(MethodConnect) - strOptions = []byte(MethodOptions) - strTrace = []byte(MethodTrace) - strPatch = []byte(MethodPatch) - - strExpect = []byte(HeaderExpect) - strConnection = []byte(HeaderConnection) - strContentLength = []byte(HeaderContentLength) - strContentType = []byte(HeaderContentType) - strDate = []byte(HeaderDate) - strHost = []byte(HeaderHost) - strReferer = []byte(HeaderReferer) - strServer = []byte(HeaderServer) - strTransferEncoding = []byte(HeaderTransferEncoding) - strContentEncoding = []byte(HeaderContentEncoding) - strAcceptEncoding = []byte(HeaderAcceptEncoding) - strUserAgent = []byte(HeaderUserAgent) - strCookie = []byte(HeaderCookie) - strSetCookie = []byte(HeaderSetCookie) - strLocation = []byte(HeaderLocation) - strIfModifiedSince = []byte(HeaderIfModifiedSince) - strLastModified = []byte(HeaderLastModified) - strAcceptRanges = []byte(HeaderAcceptRanges) - strRange = []byte(HeaderRange) - strContentRange = []byte(HeaderContentRange) + strExpect = []byte(HeaderExpect) + strConnection = []byte(HeaderConnection) + strContentLength = []byte(HeaderContentLength) + strContentType = []byte(HeaderContentType) + strDate = []byte(HeaderDate) + strHost = []byte(HeaderHost) + strReferer = []byte(HeaderReferer) + strServer = []byte(HeaderServer) + strTransferEncoding = []byte(HeaderTransferEncoding) + strContentEncoding = []byte(HeaderContentEncoding) + strAcceptEncoding = []byte(HeaderAcceptEncoding) + strUserAgent = []byte(HeaderUserAgent) + strCookie = []byte(HeaderCookie) + strSetCookie = []byte(HeaderSetCookie) + strLocation = []byte(HeaderLocation) + strIfModifiedSince = []byte(HeaderIfModifiedSince) + strLastModified = []byte(HeaderLastModified) + strAcceptRanges = []byte(HeaderAcceptRanges) + strRange = []byte(HeaderRange) + strContentRange = []byte(HeaderContentRange) + strAuthorization = []byte(HeaderAuthorization) + strTE = []byte(HeaderTE) + strTrailer = []byte(HeaderTrailer) + strMaxForwards = []byte(HeaderMaxForwards) + strProxyConnection = []byte(HeaderProxyConnection) + strProxyAuthenticate = []byte(HeaderProxyAuthenticate) + strProxyAuthorization = []byte(HeaderProxyAuthorization) + strWWWAuthenticate = []byte(HeaderWWWAuthenticate) strCookieExpires = []byte("expires") strCookieDomain = []byte("domain") @@ -66,6 +71,7 @@ var ( strClose = []byte("close") strGzip = []byte("gzip") + strBr = []byte("br") strDeflate = []byte("deflate") strKeepAlive = []byte("keep-alive") strUpgrade = []byte("Upgrade") @@ -73,9 +79,16 @@ var ( strIdentity = []byte("identity") str100Continue = []byte("100-continue") strPostArgsContentType = []byte("application/x-www-form-urlencoded") + strDefaultContentType = []byte("application/octet-stream") strMultipartFormData = []byte("multipart/form-data") strBoundary = []byte("boundary") strBytes = []byte("bytes") - strTextSlash = []byte("text/") - strApplicationSlash = []byte("application/") + strBasicSpace = []byte("Basic ") + + strApplicationSlash = []byte("application/") + strImageSVG = []byte("image/svg") + strImageIcon = []byte("image/x-icon") + strFontSlash = []byte("font/") + strMultipartSlash = []byte("multipart/") + strTextSlash = []byte("text/") ) diff --git a/vendor/github.com/valyala/fasthttp/tcp.go b/vendor/github.com/valyala/fasthttp/tcp.go new file mode 100644 index 0000000000..54d30334ea --- /dev/null +++ b/vendor/github.com/valyala/fasthttp/tcp.go @@ -0,0 +1,13 @@ +//go:build !windows +// +build !windows + +package fasthttp + +import ( + "errors" + "syscall" +) + +func isConnectionReset(err error) bool { + return errors.Is(err, syscall.ECONNRESET) +} diff --git a/vendor/github.com/valyala/fasthttp/tcp_windows.go b/vendor/github.com/valyala/fasthttp/tcp_windows.go new file mode 100644 index 0000000000..5c33025f40 --- /dev/null +++ b/vendor/github.com/valyala/fasthttp/tcp_windows.go @@ -0,0 +1,13 @@ +//go:build windows +// +build windows + +package fasthttp + +import ( + "errors" + "syscall" +) + +func isConnectionReset(err error) bool { + return errors.Is(err, syscall.WSAECONNRESET) +} diff --git a/vendor/github.com/valyala/fasthttp/tcpdialer.go b/vendor/github.com/valyala/fasthttp/tcpdialer.go index 6a5cd3a1f5..294cf1418b 100644 --- a/vendor/github.com/valyala/fasthttp/tcpdialer.go +++ b/vendor/github.com/valyala/fasthttp/tcpdialer.go @@ -1,6 +1,7 @@ package fasthttp import ( + "context" "errors" "net" "strconv" @@ -14,7 +15,7 @@ import ( // This function has the following additional features comparing to net.Dial: // // * It reduces load on DNS resolver by caching resolved TCP addressed -// for DefaultDNSCacheDuration. +// for DNSCacheDuration. // * It dials all the resolved TCP addresses in round-robin manner until // connection is established. This may be useful if certain addresses // are temporarily unreachable. @@ -41,7 +42,7 @@ func Dial(addr string) (net.Conn, error) { // This function has the following additional features comparing to net.Dial: // // * It reduces load on DNS resolver by caching resolved TCP addressed -// for DefaultDNSCacheDuration. +// for DNSCacheDuration. // * It dials all the resolved TCP addresses in round-robin manner until // connection is established. This may be useful if certain addresses // are temporarily unreachable. @@ -66,7 +67,7 @@ func DialTimeout(addr string, timeout time.Duration) (net.Conn, error) { // This function has the following additional features comparing to net.Dial: // // * It reduces load on DNS resolver by caching resolved TCP addressed -// for DefaultDNSCacheDuration. +// for DNSCacheDuration. // * It dials all the resolved TCP addresses in round-robin manner until // connection is established. This may be useful if certain addresses // are temporarily unreachable. @@ -95,7 +96,7 @@ func DialDualStack(addr string) (net.Conn, error) { // This function has the following additional features comparing to net.Dial: // // * It reduces load on DNS resolver by caching resolved TCP addressed -// for DefaultDNSCacheDuration. +// for DNSCacheDuration. // * It dials all the resolved TCP addresses in round-robin manner until // connection is established. This may be useful if certain addresses // are temporarily unreachable. @@ -119,9 +120,14 @@ var ( defaultDialer = &TCPDialer{Concurrency: 1000} ) +// Resolver represents interface of the tcp resolver. +type Resolver interface { + LookupIPAddr(context.Context, string) (names []net.IPAddr, err error) +} + // TCPDialer contains options to control a group of Dial calls. type TCPDialer struct { - // Concurrency controls the maximum number of concurrent Dails + // Concurrency controls the maximum number of concurrent Dials // that can be performed using this object. // Setting this to 0 means unlimited. // @@ -129,8 +135,28 @@ type TCPDialer struct { // Changes made after the first Dial will not affect anything. Concurrency int - tcpAddrsLock sync.Mutex - tcpAddrsMap map[string]*tcpAddrEntry + // LocalAddr is the local address to use when dialing an + // address. + // If nil, a local address is automatically chosen. + LocalAddr *net.TCPAddr + + // This may be used to override DNS resolving policy, like this: + // var dialer = &fasthttp.TCPDialer{ + // Resolver: &net.Resolver{ + // PreferGo: true, + // StrictErrors: false, + // Dial: func (ctx context.Context, network, address string) (net.Conn, error) { + // d := net.Dialer{} + // return d.DialContext(ctx, "udp", "8.8.8.8:53") + // }, + // }, + // } + Resolver Resolver + + // DNSCacheDuration may be used to override the default DNS cache duration (DefaultDNSCacheDuration) + DNSCacheDuration time.Duration + + tcpAddrsMap sync.Map concurrencyCh chan struct{} @@ -142,7 +168,7 @@ type TCPDialer struct { // This function has the following additional features comparing to net.Dial: // // * It reduces load on DNS resolver by caching resolved TCP addressed -// for DefaultDNSCacheDuration. +// for DNSCacheDuration. // * It dials all the resolved TCP addresses in round-robin manner until // connection is established. This may be useful if certain addresses // are temporarily unreachable. @@ -169,7 +195,7 @@ func (d *TCPDialer) Dial(addr string) (net.Conn, error) { // This function has the following additional features comparing to net.Dial: // // * It reduces load on DNS resolver by caching resolved TCP addressed -// for DefaultDNSCacheDuration. +// for DNSCacheDuration. // * It dials all the resolved TCP addresses in round-robin manner until // connection is established. This may be useful if certain addresses // are temporarily unreachable. @@ -194,7 +220,7 @@ func (d *TCPDialer) DialTimeout(addr string, timeout time.Duration) (net.Conn, e // This function has the following additional features comparing to net.Dial: // // * It reduces load on DNS resolver by caching resolved TCP addressed -// for DefaultDNSCacheDuration. +// for DNSCacheDuration. // * It dials all the resolved TCP addresses in round-robin manner until // connection is established. This may be useful if certain addresses // are temporarily unreachable. @@ -223,7 +249,7 @@ func (d *TCPDialer) DialDualStack(addr string) (net.Conn, error) { // This function has the following additional features comparing to net.Dial: // // * It reduces load on DNS resolver by caching resolved TCP addressed -// for DefaultDNSCacheDuration. +// for DNSCacheDuration. // * It dials all the resolved TCP addresses in round-robin manner until // connection is established. This may be useful if certain addresses // are temporarily unreachable. @@ -248,7 +274,11 @@ func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (ne if d.Concurrency > 0 { d.concurrencyCh = make(chan struct{}, d.Concurrency) } - d.tcpAddrsMap = make(map[string]*tcpAddrEntry) + + if d.DNSCacheDuration == 0 { + d.DNSCacheDuration = DefaultDNSCacheDuration + } + go d.tcpAddrsClean() }) @@ -265,7 +295,7 @@ func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (ne n := uint32(len(addrs)) deadline := time.Now().Add(timeout) for n > 0 { - conn, err = tryDial(network, &addrs[idx%n], deadline, d.concurrencyCh) + conn, err = d.tryDial(network, &addrs[idx%n], deadline, d.concurrencyCh) if err == nil { return conn, nil } @@ -278,7 +308,7 @@ func (d *TCPDialer) dial(addr string, dualStack bool, timeout time.Duration) (ne return nil, err } -func tryDial(network string, addr *net.TCPAddr, deadline time.Time, concurrencyCh chan struct{}) (net.Conn, error) { +func (d *TCPDialer) tryDial(network string, addr *net.TCPAddr, deadline time.Time, concurrencyCh chan struct{}) (net.Conn, error) { timeout := -time.Since(deadline) if timeout <= 0 { return nil, ErrDialTimeout @@ -300,48 +330,23 @@ func tryDial(network string, addr *net.TCPAddr, deadline time.Time, concurrencyC return nil, ErrDialTimeout } } + defer func() { <-concurrencyCh }() } - chv := dialResultChanPool.Get() - if chv == nil { - chv = make(chan dialResult, 1) + dialer := net.Dialer{} + if d.LocalAddr != nil { + dialer.LocalAddr = d.LocalAddr } - ch := chv.(chan dialResult) - go func() { - var dr dialResult - dr.conn, dr.err = net.DialTCP(network, nil, addr) - ch <- dr - if concurrencyCh != nil { - <-concurrencyCh - } - }() - - var ( - conn net.Conn - err error - ) - - tc := AcquireTimer(timeout) - select { - case dr := <-ch: - conn = dr.conn - err = dr.err - dialResultChanPool.Put(ch) - case <-tc.C: - err = ErrDialTimeout - } - ReleaseTimer(tc) + ctx, cancel_ctx := context.WithDeadline(context.Background(), deadline) + defer cancel_ctx() + conn, err := dialer.DialContext(ctx, network, addr.String()) + if err != nil && ctx.Err() == context.DeadlineExceeded { + return nil, ErrDialTimeout + } return conn, err } -var dialResultChanPool sync.Pool - -type dialResult struct { - conn net.Conn - err error -} - // ErrDialTimeout is returned when TCP dialing is timed out. var ErrDialTimeout = errors.New("dialing to the given TCP address timed out") @@ -353,8 +358,8 @@ type tcpAddrEntry struct { addrs []net.TCPAddr addrsIdx uint32 + pending int32 resolveTime time.Time - pending bool } // DefaultDNSCacheDuration is the duration for caching resolved TCP addresses @@ -362,39 +367,39 @@ type tcpAddrEntry struct { const DefaultDNSCacheDuration = time.Minute func (d *TCPDialer) tcpAddrsClean() { - expireDuration := 2 * DefaultDNSCacheDuration + expireDuration := 2 * d.DNSCacheDuration for { time.Sleep(time.Second) t := time.Now() - - d.tcpAddrsLock.Lock() - for k, e := range d.tcpAddrsMap { - if t.Sub(e.resolveTime) > expireDuration { - delete(d.tcpAddrsMap, k) + d.tcpAddrsMap.Range(func(k, v interface{}) bool { + if e, ok := v.(*tcpAddrEntry); ok && t.Sub(e.resolveTime) > expireDuration { + d.tcpAddrsMap.Delete(k) } - } - d.tcpAddrsLock.Unlock() + return true + }) + } } func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, uint32, error) { - d.tcpAddrsLock.Lock() - e := d.tcpAddrsMap[addr] - if e != nil && !e.pending && time.Since(e.resolveTime) > DefaultDNSCacheDuration { - e.pending = true - e = nil + item, exist := d.tcpAddrsMap.Load(addr) + e, ok := item.(*tcpAddrEntry) + if exist && ok && e != nil && time.Since(e.resolveTime) > d.DNSCacheDuration { + // Only let one goroutine re-resolve at a time. + if atomic.SwapInt32(&e.pending, 1) == 0 { + e = nil + } } - d.tcpAddrsLock.Unlock() if e == nil { - addrs, err := resolveTCPAddrs(addr, dualStack) + addrs, err := resolveTCPAddrs(addr, dualStack, d.Resolver) if err != nil { - d.tcpAddrsLock.Lock() - e = d.tcpAddrsMap[addr] - if e != nil && e.pending { - e.pending = false + item, exist := d.tcpAddrsMap.Load(addr) + e, ok = item.(*tcpAddrEntry) + if exist && ok && e != nil { + // Set pending to 0 so another goroutine can retry. + atomic.StoreInt32(&e.pending, 0) } - d.tcpAddrsLock.Unlock() return nil, 0, err } @@ -402,17 +407,14 @@ func (d *TCPDialer) getTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, uin addrs: addrs, resolveTime: time.Now(), } - - d.tcpAddrsLock.Lock() - d.tcpAddrsMap[addr] = e - d.tcpAddrsLock.Unlock() + d.tcpAddrsMap.Store(addr, e) } idx := atomic.AddUint32(&e.addrsIdx, 1) return e.addrs, idx, nil } -func resolveTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, error) { +func resolveTCPAddrs(addr string, dualStack bool, resolver Resolver) ([]net.TCPAddr, error) { host, portS, err := net.SplitHostPort(addr) if err != nil { return nil, err @@ -422,21 +424,27 @@ func resolveTCPAddrs(addr string, dualStack bool) ([]net.TCPAddr, error) { return nil, err } - ips, err := net.LookupIP(host) + if resolver == nil { + resolver = net.DefaultResolver + } + + ctx := context.Background() + ipaddrs, err := resolver.LookupIPAddr(ctx, host) if err != nil { return nil, err } - n := len(ips) + n := len(ipaddrs) addrs := make([]net.TCPAddr, 0, n) for i := 0; i < n; i++ { - ip := ips[i] - if !dualStack && ip.To4() == nil { + ip := ipaddrs[i] + if !dualStack && ip.IP.To4() == nil { continue } addrs = append(addrs, net.TCPAddr{ - IP: ip, + IP: ip.IP, Port: port, + Zone: ip.Zone, }) } if len(addrs) == 0 { diff --git a/vendor/github.com/valyala/fasthttp/tls.go b/vendor/github.com/valyala/fasthttp/tls.go new file mode 100644 index 0000000000..08b03cec7c --- /dev/null +++ b/vendor/github.com/valyala/fasthttp/tls.go @@ -0,0 +1,60 @@ +package fasthttp + +import ( + "crypto/rand" + "crypto/rsa" + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "math/big" + "time" +) + +// GenerateTestCertificate generates a test certificate and private key based on the given host. +func GenerateTestCertificate(host string) ([]byte, []byte, error) { + priv, err := rsa.GenerateKey(rand.Reader, 2048) + if err != nil { + return nil, nil, err + } + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, nil, err + } + + cert := &x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + Organization: []string{"fasthttp test"}, + }, + NotBefore: time.Now(), + NotAfter: time.Now().Add(365 * 24 * time.Hour), + KeyUsage: x509.KeyUsageCertSign | x509.KeyUsageDigitalSignature, + ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth}, + SignatureAlgorithm: x509.SHA256WithRSA, + DNSNames: []string{host}, + BasicConstraintsValid: true, + IsCA: true, + } + + certBytes, err := x509.CreateCertificate( + rand.Reader, cert, cert, &priv.PublicKey, priv, + ) + + p := pem.EncodeToMemory( + &pem.Block{ + Type: "PRIVATE KEY", + Bytes: x509.MarshalPKCS1PrivateKey(priv), + }, + ) + + b := pem.EncodeToMemory( + &pem.Block{ + Type: "CERTIFICATE", + Bytes: certBytes, + }, + ) + + return b, p, err +} diff --git a/vendor/github.com/valyala/fasthttp/uri.go b/vendor/github.com/valyala/fasthttp/uri.go index d536f5934b..ffd68c6367 100644 --- a/vendor/github.com/valyala/fasthttp/uri.go +++ b/vendor/github.com/valyala/fasthttp/uri.go @@ -2,7 +2,11 @@ package fasthttp import ( "bytes" + "errors" + "fmt" "io" + "path/filepath" + "strconv" "sync" ) @@ -36,7 +40,7 @@ var uriPool = &sync.Pool{ // // URI instance MUST NOT be used from concurrently running goroutines. type URI struct { - noCopy noCopy + noCopy noCopy //nolint:unused,structcheck pathOriginal []byte scheme []byte @@ -48,33 +52,45 @@ type URI struct { queryArgs Args parsedQueryArgs bool + // Path values are sent as-is without normalization + // + // Disabled path normalization may be useful for proxying incoming requests + // to servers that are expecting paths to be forwarded as-is. + // + // By default path values are normalized, i.e. + // extra slashes are removed, special characters are encoded. + DisablePathNormalizing bool + fullURI []byte requestURI []byte - h *RequestHeader + username []byte + password []byte } // CopyTo copies uri contents to dst. func (u *URI) CopyTo(dst *URI) { dst.Reset() - dst.pathOriginal = append(dst.pathOriginal[:0], u.pathOriginal...) - dst.scheme = append(dst.scheme[:0], u.scheme...) - dst.path = append(dst.path[:0], u.path...) - dst.queryString = append(dst.queryString[:0], u.queryString...) - dst.hash = append(dst.hash[:0], u.hash...) - dst.host = append(dst.host[:0], u.host...) + dst.pathOriginal = append(dst.pathOriginal, u.pathOriginal...) + dst.scheme = append(dst.scheme, u.scheme...) + dst.path = append(dst.path, u.path...) + dst.queryString = append(dst.queryString, u.queryString...) + dst.hash = append(dst.hash, u.hash...) + dst.host = append(dst.host, u.host...) + dst.username = append(dst.username, u.username...) + dst.password = append(dst.password, u.password...) u.queryArgs.CopyTo(&dst.queryArgs) dst.parsedQueryArgs = u.parsedQueryArgs + dst.DisablePathNormalizing = u.DisablePathNormalizing // fullURI and requestURI shouldn't be copied, since they are created // from scratch on each FullURI() and RequestURI() call. - dst.h = u.h } // Hash returns URI hash, i.e. qwe of http://aaa.com/foo/bar?baz=123#qwe . // -// The returned value is valid until the next URI method call. +// The returned bytes are valid until the next URI method call. func (u *URI) Hash() []byte { return u.hash } @@ -89,10 +105,44 @@ func (u *URI) SetHashBytes(hash []byte) { u.hash = append(u.hash[:0], hash...) } +// Username returns URI username +// +// The returned bytes are valid until the next URI method call. +func (u *URI) Username() []byte { + return u.username +} + +// SetUsername sets URI username. +func (u *URI) SetUsername(username string) { + u.username = append(u.username[:0], username...) +} + +// SetUsernameBytes sets URI username. +func (u *URI) SetUsernameBytes(username []byte) { + u.username = append(u.username[:0], username...) +} + +// Password returns URI password +// +// The returned bytes are valid until the next URI method call. +func (u *URI) Password() []byte { + return u.password +} + +// SetPassword sets URI password. +func (u *URI) SetPassword(password string) { + u.password = append(u.password[:0], password...) +} + +// SetPasswordBytes sets URI password. +func (u *URI) SetPasswordBytes(password []byte) { + u.password = append(u.password[:0], password...) +} + // QueryString returns URI query string, // i.e. baz=123 of http://aaa.com/foo/bar?baz=123#qwe . // -// The returned value is valid until the next URI method call. +// The returned bytes are valid until the next URI method call. func (u *URI) QueryString() []byte { return u.queryString } @@ -114,7 +164,7 @@ func (u *URI) SetQueryStringBytes(queryString []byte) { // The returned path is always urldecoded and normalized, // i.e. '//f%20obar/baz/../zzz' becomes '/f obar/zzz'. // -// The returned value is valid until the next URI method call. +// The returned bytes are valid until the next URI method call. func (u *URI) Path() []byte { path := u.path if len(path) == 0 { @@ -137,7 +187,7 @@ func (u *URI) SetPathBytes(path []byte) { // PathOriginal returns the original path from requestURI passed to URI.Parse(). // -// The returned value is valid until the next URI method call. +// The returned bytes are valid until the next URI method call. func (u *URI) PathOriginal() []byte { return u.pathOriginal } @@ -146,7 +196,7 @@ func (u *URI) PathOriginal() []byte { // // Returned scheme is always lowercased. // -// The returned value is valid until the next URI method call. +// The returned bytes are valid until the next URI method call. func (u *URI) Scheme() []byte { scheme := u.scheme if len(scheme) == 0 { @@ -167,6 +217,14 @@ func (u *URI) SetSchemeBytes(scheme []byte) { lowercaseBytes(u.scheme) } +func (u *URI) isHttps() bool { + return bytes.Equal(u.scheme, strHTTPS) +} + +func (u *URI) isHttp() bool { + return len(u.scheme) == 0 || bytes.Equal(u.scheme, strHTTP) +} + // Reset clears uri. func (u *URI) Reset() { u.pathOriginal = u.pathOriginal[:0] @@ -174,29 +232,27 @@ func (u *URI) Reset() { u.path = u.path[:0] u.queryString = u.queryString[:0] u.hash = u.hash[:0] + u.username = u.username[:0] + u.password = u.password[:0] u.host = u.host[:0] u.queryArgs.Reset() u.parsedQueryArgs = false + u.DisablePathNormalizing = false // There is no need in u.fullURI = u.fullURI[:0], since full uri // is calculated on each call to FullURI(). // There is no need in u.requestURI = u.requestURI[:0], since requestURI // is calculated on each call to RequestURI(). - - u.h = nil } // Host returns host part, i.e. aaa.com of http://aaa.com/foo/bar?baz=123#qwe . // // Host is always lowercased. +// +// The returned bytes are valid until the next URI method call. func (u *URI) Host() []byte { - if len(u.host) == 0 && u.h != nil { - u.host = append(u.host[:0], u.h.Host()...) - lowercaseBytes(u.host) - u.h = nil - } return u.host } @@ -212,31 +268,57 @@ func (u *URI) SetHostBytes(host []byte) { lowercaseBytes(u.host) } +var ( + ErrorInvalidURI = errors.New("invalid uri") +) + // Parse initializes URI from the given host and uri. // // host may be nil. In this case uri must contain fully qualified uri, // i.e. with scheme and host. http is assumed if scheme is omitted. // // uri may contain e.g. RequestURI without scheme and host if host is non-empty. -func (u *URI) Parse(host, uri []byte) { - u.parse(host, uri, nil) +func (u *URI) Parse(host, uri []byte) error { + return u.parse(host, uri, false) } -func (u *URI) parseQuick(uri []byte, h *RequestHeader, isTLS bool) { - u.parse(nil, uri, h) +func (u *URI) parse(host, uri []byte, isTLS bool) error { + u.Reset() + + if stringContainsCTLByte(uri) { + return ErrorInvalidURI + } + + if len(host) == 0 || bytes.Contains(uri, strColonSlashSlash) { + scheme, newHost, newURI := splitHostURI(host, uri) + u.SetSchemeBytes(scheme) + host = newHost + uri = newURI + } + if isTLS { - u.scheme = append(u.scheme[:0], strHTTPS...) + u.SetSchemeBytes(strHTTPS) } -} -func (u *URI) parse(host, uri []byte, h *RequestHeader) { - u.Reset() - u.h = h + if n := bytes.IndexByte(host, '@'); n >= 0 { + auth := host[:n] + host = host[n+1:] + + if n := bytes.IndexByte(auth, ':'); n >= 0 { + u.username = append(u.username[:0], auth[:n]...) + u.password = append(u.password[:0], auth[n+1:]...) + } else { + u.username = append(u.username[:0], auth...) + u.password = u.password[:0] + } + } - scheme, host, uri := splitHostURI(host, uri) - u.scheme = append(u.scheme, scheme...) - lowercaseBytes(u.scheme) u.host = append(u.host, host...) + if parsedHost, err := parseHost(u.host); err != nil { + return err + } else { + u.host = parsedHost + } lowercaseBytes(u.host) b := uri @@ -250,7 +332,7 @@ func (u *URI) parse(host, uri []byte, h *RequestHeader) { if queryIndex < 0 && fragmentIndex < 0 { u.pathOriginal = append(u.pathOriginal, b...) u.path = normalizePath(u.path, u.pathOriginal) - return + return nil } if queryIndex >= 0 { @@ -264,7 +346,7 @@ func (u *URI) parse(host, uri []byte, h *RequestHeader) { u.queryString = append(u.queryString, b[queryIndex+1:fragmentIndex]...) u.hash = append(u.hash, b[fragmentIndex+1:]...) } - return + return nil } // fragmentIndex >= 0 && queryIndex < 0 @@ -272,6 +354,228 @@ func (u *URI) parse(host, uri []byte, h *RequestHeader) { u.pathOriginal = append(u.pathOriginal, b[:fragmentIndex]...) u.path = normalizePath(u.path, u.pathOriginal) u.hash = append(u.hash, b[fragmentIndex+1:]...) + + return nil +} + +// parseHost parses host as an authority without user +// information. That is, as host[:port]. +// +// Based on https://github.com/golang/go/blob/8ac5cbe05d61df0a7a7c9a38ff33305d4dcfea32/src/net/url/url.go#L619 +// +// The host is parsed and unescaped in place overwriting the contents of the host parameter. +func parseHost(host []byte) ([]byte, error) { + if len(host) > 0 && host[0] == '[' { + // Parse an IP-Literal in RFC 3986 and RFC 6874. + // E.g., "[fe80::1]", "[fe80::1%25en0]", "[fe80::1]:80". + i := bytes.LastIndexByte(host, ']') + if i < 0 { + return nil, errors.New("missing ']' in host") + } + colonPort := host[i+1:] + if !validOptionalPort(colonPort) { + return nil, fmt.Errorf("invalid port %q after host", colonPort) + } + + // RFC 6874 defines that %25 (%-encoded percent) introduces + // the zone identifier, and the zone identifier can use basically + // any %-encoding it likes. That's different from the host, which + // can only %-encode non-ASCII bytes. + // We do impose some restrictions on the zone, to avoid stupidity + // like newlines. + zone := bytes.Index(host[:i], []byte("%25")) + if zone >= 0 { + host1, err := unescape(host[:zone], encodeHost) + if err != nil { + return nil, err + } + host2, err := unescape(host[zone:i], encodeZone) + if err != nil { + return nil, err + } + host3, err := unescape(host[i:], encodeHost) + if err != nil { + return nil, err + } + return append(host1, append(host2, host3...)...), nil + } + } else if i := bytes.LastIndexByte(host, ':'); i != -1 { + colonPort := host[i:] + if !validOptionalPort(colonPort) { + return nil, fmt.Errorf("invalid port %q after host", colonPort) + } + } + + var err error + if host, err = unescape(host, encodeHost); err != nil { + return nil, err + } + return host, nil +} + +type encoding int + +const ( + encodeHost encoding = 1 + iota + encodeZone +) + +type EscapeError string + +func (e EscapeError) Error() string { + return "invalid URL escape " + strconv.Quote(string(e)) +} + +type InvalidHostError string + +func (e InvalidHostError) Error() string { + return "invalid character " + strconv.Quote(string(e)) + " in host name" +} + +// unescape unescapes a string; the mode specifies +// which section of the URL string is being unescaped. +// +// Based on https://github.com/golang/go/blob/8ac5cbe05d61df0a7a7c9a38ff33305d4dcfea32/src/net/url/url.go#L199 +// +// Unescapes in place overwriting the contents of s and returning it. +func unescape(s []byte, mode encoding) ([]byte, error) { + // Count %, check that they're well-formed. + n := 0 + for i := 0; i < len(s); { + switch s[i] { + case '%': + n++ + if i+2 >= len(s) || !ishex(s[i+1]) || !ishex(s[i+2]) { + s = s[i:] + if len(s) > 3 { + s = s[:3] + } + return nil, EscapeError(s) + } + // Per https://tools.ietf.org/html/rfc3986#page-21 + // in the host component %-encoding can only be used + // for non-ASCII bytes. + // But https://tools.ietf.org/html/rfc6874#section-2 + // introduces %25 being allowed to escape a percent sign + // in IPv6 scoped-address literals. Yay. + if mode == encodeHost && unhex(s[i+1]) < 8 && !bytes.Equal(s[i:i+3], []byte("%25")) { + return nil, EscapeError(s[i : i+3]) + } + if mode == encodeZone { + // RFC 6874 says basically "anything goes" for zone identifiers + // and that even non-ASCII can be redundantly escaped, + // but it seems prudent to restrict %-escaped bytes here to those + // that are valid host name bytes in their unescaped form. + // That is, you can use escaping in the zone identifier but not + // to introduce bytes you couldn't just write directly. + // But Windows puts spaces here! Yay. + v := unhex(s[i+1])<<4 | unhex(s[i+2]) + if !bytes.Equal(s[i:i+3], []byte("%25")) && v != ' ' && shouldEscape(v, encodeHost) { + return nil, EscapeError(s[i : i+3]) + } + } + i += 3 + default: + if (mode == encodeHost || mode == encodeZone) && s[i] < 0x80 && shouldEscape(s[i], mode) { + return nil, InvalidHostError(s[i : i+1]) + } + i++ + } + } + + if n == 0 { + return s, nil + } + + t := s[:0] + for i := 0; i < len(s); i++ { + switch s[i] { + case '%': + t = append(t, unhex(s[i+1])<<4|unhex(s[i+2])) + i += 2 + default: + t = append(t, s[i]) + } + } + return t, nil +} + +// Return true if the specified character should be escaped when +// appearing in a URL string, according to RFC 3986. +// +// Please be informed that for now shouldEscape does not check all +// reserved characters correctly. See golang.org/issue/5684. +// +// Based on https://github.com/golang/go/blob/8ac5cbe05d61df0a7a7c9a38ff33305d4dcfea32/src/net/url/url.go#L100 +func shouldEscape(c byte, mode encoding) bool { + // §2.3 Unreserved characters (alphanum) + if 'a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9' { + return false + } + + if mode == encodeHost || mode == encodeZone { + // §3.2.2 Host allows + // sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "=" + // as part of reg-name. + // We add : because we include :port as part of host. + // We add [ ] because we include [ipv6]:port as part of host. + // We add < > because they're the only characters left that + // we could possibly allow, and Parse will reject them if we + // escape them (because hosts can't use %-encoding for + // ASCII bytes). + switch c { + case '!', '$', '&', '\'', '(', ')', '*', '+', ',', ';', '=', ':', '[', ']', '<', '>', '"': + return false + } + } + + if c == '-' || c == '_' || c == '.' || c == '~' { // §2.3 Unreserved characters (mark) + return false + } + + // Everything else must be escaped. + return true +} + +func ishex(c byte) bool { + switch { + case '0' <= c && c <= '9': + return true + case 'a' <= c && c <= 'f': + return true + case 'A' <= c && c <= 'F': + return true + } + return false +} + +func unhex(c byte) byte { + switch { + case '0' <= c && c <= '9': + return c - '0' + case 'a' <= c && c <= 'f': + return c - 'a' + 10 + case 'A' <= c && c <= 'F': + return c - 'A' + 10 + } + return 0 +} + +// validOptionalPort reports whether port is either an empty string +// or matches /^:\d*$/ +func validOptionalPort(port []byte) bool { + if len(port) == 0 { + return true + } + if port[0] != ':' { + return false + } + for _, b := range port[1:] { + if b < '0' || b > '9' { + return false + } + } + return true } func normalizePath(dst, src []byte) []byte { @@ -326,28 +630,83 @@ func normalizePath(dst, src []byte) []byte { if n >= 0 && n+len(strSlashDotDot) == len(b) { nn := bytes.LastIndexByte(b[:n], '/') if nn < 0 { - return strSlash + return append(dst[:0], strSlash...) } b = b[:nn+1] } + if filepath.Separator == '\\' { + // remove \.\ parts + b = dst + for { + n := bytes.Index(b, strBackSlashDotBackSlash) + if n < 0 { + break + } + nn := n + len(strSlashDotSlash) - 1 + copy(b[n:], b[nn:]) + b = b[:len(b)-nn+n] + } + + // remove /foo/..\ parts + for { + n := bytes.Index(b, strSlashDotDotBackSlash) + if n < 0 { + break + } + nn := bytes.LastIndexByte(b[:n], '/') + if nn < 0 { + nn = 0 + } + n += len(strSlashDotDotBackSlash) - 1 + copy(b[nn:], b[n:]) + b = b[:len(b)-n+nn] + } + + // remove /foo\..\ parts + for { + n := bytes.Index(b, strBackSlashDotDotBackSlash) + if n < 0 { + break + } + nn := bytes.LastIndexByte(b[:n], '/') + if nn < 0 { + nn = 0 + } + n += len(strBackSlashDotDotBackSlash) - 1 + copy(b[nn:], b[n:]) + b = b[:len(b)-n+nn] + } + + // remove trailing \foo\.. + n := bytes.LastIndex(b, strBackSlashDotDot) + if n >= 0 && n+len(strSlashDotDot) == len(b) { + nn := bytes.LastIndexByte(b[:n], '/') + if nn < 0 { + return append(dst[:0], strSlash...) + } + b = b[:nn+1] + } + } + return b } // RequestURI returns RequestURI - i.e. URI without Scheme and Host. func (u *URI) RequestURI() []byte { - dst := appendQuotedPath(u.requestURI[:0], u.Path()) - if u.queryArgs.Len() > 0 { + var dst []byte + if u.DisablePathNormalizing { + dst = append(u.requestURI[:0], u.PathOriginal()...) + } else { + dst = appendQuotedPath(u.requestURI[:0], u.Path()) + } + if u.parsedQueryArgs && u.queryArgs.Len() > 0 { dst = append(dst, '?') dst = u.queryArgs.AppendBytes(dst) } else if len(u.queryString) > 0 { dst = append(dst, '?') dst = append(dst, u.queryString...) } - if len(u.hash) > 0 { - dst = append(dst, '#') - dst = append(dst, u.hash...) - } u.requestURI = dst return u.requestURI } @@ -359,6 +718,8 @@ func (u *URI) RequestURI() []byte { // * For /foo/bar/baz.html path returns baz.html. // * For /foo/bar/ returns empty byte slice. // * For /foobar.js returns foobar.js. +// +// The returned bytes are valid until the next URI method call. func (u *URI) LastPathSegment() []byte { path := u.Path() n := bytes.LastIndexByte(path, '/') @@ -413,7 +774,9 @@ func (u *URI) updateBytes(newURI, buf []byte) []byte { if len(u.scheme) > 0 { schemeOriginal = append([]byte(nil), u.scheme...) } - u.Parse(nil, newURI) + if err := u.Parse(nil, newURI); err != nil { + return nil + } if len(schemeOriginal) > 0 && len(u.scheme) == 0 { u.scheme = append(u.scheme[:0], schemeOriginal...) } @@ -424,7 +787,9 @@ func (u *URI) updateBytes(newURI, buf []byte) []byte { // uri without host buf = u.appendSchemeHost(buf[:0]) buf = append(buf, newURI...) - u.Parse(nil, buf) + if err := u.Parse(nil, buf); err != nil { + return nil + } return buf } @@ -443,17 +808,21 @@ func (u *URI) updateBytes(newURI, buf []byte) []byte { path := u.Path() n = bytes.LastIndexByte(path, '/') if n < 0 { - panic("BUG: path must contain at least one slash") + panic(fmt.Sprintf("BUG: path must contain at least one slash: %q %q", u.Path(), newURI)) } buf = u.appendSchemeHost(buf[:0]) buf = appendQuotedPath(buf, path[:n+1]) buf = append(buf, newURI...) - u.Parse(nil, buf) + if err := u.Parse(nil, buf); err != nil { + return nil + } return buf } } // FullURI returns full uri in the form {Scheme}://{Host}{RequestURI}#{Hash}. +// +// The returned bytes are valid until the next URI method call. func (u *URI) FullURI() []byte { u.fullURI = u.AppendBytes(u.fullURI[:0]) return u.fullURI @@ -462,7 +831,12 @@ func (u *URI) FullURI() []byte { // AppendBytes appends full uri to dst and returns the extended dst. func (u *URI) AppendBytes(dst []byte) []byte { dst = u.appendSchemeHost(dst) - return append(dst, u.RequestURI()...) + dst = append(dst, u.RequestURI()...) + if len(u.hash) > 0 { + dst = append(dst, '#') + dst = append(dst, u.hash...) + } + return dst } func (u *URI) appendSchemeHost(dst []byte) []byte { @@ -499,11 +873,15 @@ func splitHostURI(host, uri []byte) ([]byte, []byte, []byte) { n += len(strSlashSlash) uri = uri[n:] n = bytes.IndexByte(uri, '/') - if n < 0 { + nq := bytes.IndexByte(uri, '?') + if nq >= 0 && nq < n { + // A hack for urls like foobar.com?a=b/xyz + n = nq + } else if n < 0 { // A hack for bogus urls like foobar.com?a=b without // slash after host. - if n = bytes.IndexByte(uri, '?'); n >= 0 { - return scheme, uri[:n], uri[n:] + if nq >= 0 { + return scheme, uri[:nq], uri[nq:] } return scheme, uri, strSlash } @@ -511,6 +889,8 @@ func splitHostURI(host, uri []byte) ([]byte, []byte, []byte) { } // QueryArgs returns query args. +// +// The returned args are valid until the next URI method call. func (u *URI) QueryArgs() *Args { u.parseQueryArgs() return &u.queryArgs @@ -523,3 +903,14 @@ func (u *URI) parseQueryArgs() { u.queryArgs.ParseBytes(u.queryString) u.parsedQueryArgs = true } + +// stringContainsCTLByte reports whether s contains any ASCII control character. +func stringContainsCTLByte(s []byte) bool { + for i := 0; i < len(s); i++ { + b := s[i] + if b < ' ' || b == 0x7f { + return true + } + } + return false +} diff --git a/vendor/github.com/valyala/fasthttp/uri_unix.go b/vendor/github.com/valyala/fasthttp/uri_unix.go index 1e3073329d..c2ac8fa46e 100644 --- a/vendor/github.com/valyala/fasthttp/uri_unix.go +++ b/vendor/github.com/valyala/fasthttp/uri_unix.go @@ -1,3 +1,4 @@ +//go:build !windows // +build !windows package fasthttp diff --git a/vendor/github.com/valyala/fasthttp/uri_windows.go b/vendor/github.com/valyala/fasthttp/uri_windows.go index 95917a6bc7..e1391a7ac6 100644 --- a/vendor/github.com/valyala/fasthttp/uri_windows.go +++ b/vendor/github.com/valyala/fasthttp/uri_windows.go @@ -1,3 +1,4 @@ +//go:build windows // +build windows package fasthttp diff --git a/vendor/github.com/valyala/fasthttp/userdata.go b/vendor/github.com/valyala/fasthttp/userdata.go index bd3e28aa1d..37f7d9b1f9 100644 --- a/vendor/github.com/valyala/fasthttp/userdata.go +++ b/vendor/github.com/valyala/fasthttp/userdata.go @@ -22,6 +22,10 @@ func (d *userData) Set(key string, value interface{}) { } } + if value == nil { + return + } + c := cap(args) if c > n { args = args[:n+1] @@ -69,3 +73,23 @@ func (d *userData) Reset() { } *d = (*d)[:0] } + +func (d *userData) Remove(key string) { + args := *d + n := len(args) + for i := 0; i < n; i++ { + kv := &args[i] + if string(kv.key) == key { + n-- + args[i], args[n] = args[n], args[i] + args[n].value = nil + args = args[:n] + *d = args + return + } + } +} + +func (d *userData) RemoveBytes(key []byte) { + d.Remove(b2s(key)) +} diff --git a/vendor/github.com/valyala/fasthttp/workerpool.go b/vendor/github.com/valyala/fasthttp/workerpool.go index bfd297c31e..50a5c75f8c 100644 --- a/vendor/github.com/valyala/fasthttp/workerpool.go +++ b/vendor/github.com/valyala/fasthttp/workerpool.go @@ -1,6 +1,7 @@ package fasthttp import ( + "errors" "net" "runtime" "strings" @@ -50,6 +51,11 @@ func (wp *workerPool) Start() { } wp.stopCh = make(chan struct{}) stopCh := wp.stopCh + wp.workerChanPool.New = func() interface{} { + return &workerChan{ + ch: make(chan net.Conn, workerChanCap), + } + } go func() { var scratch []*workerChan for { @@ -76,8 +82,8 @@ func (wp *workerPool) Stop() { // serving the connection and noticing wp.mustStop = true. wp.lock.Lock() ready := wp.ready - for i, ch := range ready { - ch.ch <- nil + for i := range ready { + ready[i].ch <- nil ready[i] = nil } wp.ready = ready[:0] @@ -97,23 +103,34 @@ func (wp *workerPool) clean(scratch *[]*workerChan) { // Clean least recently used workers if they didn't serve connections // for more than maxIdleWorkerDuration. - currentTime := time.Now() + criticalTime := time.Now().Add(-maxIdleWorkerDuration) wp.lock.Lock() ready := wp.ready n := len(ready) - i := 0 - for i < n && currentTime.Sub(ready[i].lastUseTime) > maxIdleWorkerDuration { - i++ - } - *scratch = append((*scratch)[:0], ready[:i]...) - if i > 0 { - m := copy(ready, ready[i:]) - for i = m; i < n; i++ { - ready[i] = nil + + // Use binary-search algorithm to find out the index of the least recently worker which can be cleaned up. + l, r, mid := 0, n-1, 0 + for l <= r { + mid = (l + r) / 2 + if criticalTime.After(wp.ready[mid].lastUseTime) { + l = mid + 1 + } else { + r = mid - 1 } - wp.ready = ready[:m] } + i := r + if i == -1 { + wp.lock.Unlock() + return + } + + *scratch = append((*scratch)[:0], ready[:i+1]...) + m := copy(ready, ready[i+1:]) + for i = m; i < n; i++ { + ready[i] = nil + } + wp.ready = ready[:m] wp.lock.Unlock() // Notify obsolete workers to stop. @@ -121,8 +138,8 @@ func (wp *workerPool) clean(scratch *[]*workerChan) { // may be blocking and may consume a lot of time if many workers // are located on non-local CPUs. tmp := *scratch - for i, ch := range tmp { - ch.ch <- nil + for i := range tmp { + tmp[i].ch <- nil tmp[i] = nil } } @@ -174,11 +191,6 @@ func (wp *workerPool) getCh() *workerChan { return nil } vch := wp.workerChanPool.Get() - if vch == nil { - vch = &workerChan{ - ch: make(chan net.Conn, workerChanCap), - } - } ch = vch.(*workerChan) go func() { wp.workerFunc(ch) @@ -214,14 +226,16 @@ func (wp *workerPool) workerFunc(ch *workerChan) { if wp.LogAllErrors || !(strings.Contains(errStr, "broken pipe") || strings.Contains(errStr, "reset by peer") || strings.Contains(errStr, "request headers: small read buffer") || - strings.Contains(errStr, "i/o timeout")) { - wp.Logger.Printf("error when serving connection %q<->%q: %s", c.LocalAddr(), c.RemoteAddr(), err) + strings.Contains(errStr, "unexpected EOF") || + strings.Contains(errStr, "i/o timeout") || + errors.Is(err, ErrBadTrailer)) { + wp.Logger.Printf("error when serving connection %q<->%q: %v", c.LocalAddr(), c.RemoteAddr(), err) } } if err == errHijacked { wp.connState(c, StateHijacked) } else { - c.Close() + _ = c.Close() wp.connState(c, StateClosed) } c = nil diff --git a/vendor/github.com/valyala/fastjson/go.mod b/vendor/github.com/valyala/fastjson/go.mod deleted file mode 100644 index c85c656561..0000000000 --- a/vendor/github.com/valyala/fastjson/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module github.com/valyala/fastjson - -go 1.12 diff --git a/vendor/go.opencensus.io/go.mod b/vendor/go.opencensus.io/go.mod deleted file mode 100644 index 95b2522a7f..0000000000 --- a/vendor/go.opencensus.io/go.mod +++ /dev/null @@ -1,12 +0,0 @@ -module go.opencensus.io - -require ( - github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e - github.com/golang/protobuf v1.4.3 - github.com/google/go-cmp v0.5.3 - github.com/stretchr/testify v1.6.1 - golang.org/x/net v0.0.0-20201110031124-69a78807bb2b - google.golang.org/grpc v1.33.2 -) - -go 1.13 diff --git a/vendor/go.opencensus.io/go.sum b/vendor/go.opencensus.io/go.sum deleted file mode 100644 index c97cd1b551..0000000000 --- a/vendor/go.opencensus.io/go.sum +++ /dev/null @@ -1,116 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3 h1:x95R7cp+rSeeqAMI2knLtQ0DKlaBhv2NrtrOvafPHRo= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3 h1:XQyxROzUlZH+WIQwySDgnISgOivlhjIEwaQaJEJrrN0= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd h1:/e+gpKk9r3dJobndpTytxS2gOy6m5uvpg+ISQoEcusQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= -google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/go.uber.org/atomic/go.mod b/vendor/go.uber.org/atomic/go.mod deleted file mode 100644 index daa7599fe1..0000000000 --- a/vendor/go.uber.org/atomic/go.mod +++ /dev/null @@ -1,8 +0,0 @@ -module go.uber.org/atomic - -require ( - github.com/davecgh/go-spew v1.1.1 // indirect - github.com/stretchr/testify v1.3.0 -) - -go 1.13 diff --git a/vendor/go.uber.org/atomic/go.sum b/vendor/go.uber.org/atomic/go.sum deleted file mode 100644 index 4f89841505..0000000000 --- a/vendor/go.uber.org/atomic/go.sum +++ /dev/null @@ -1,8 +0,0 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= diff --git a/vendor/go.uber.org/multierr/CHANGELOG.md b/vendor/go.uber.org/multierr/CHANGELOG.md index b0814e7c9b..3ba05276f1 100644 --- a/vendor/go.uber.org/multierr/CHANGELOG.md +++ b/vendor/go.uber.org/multierr/CHANGELOG.md @@ -1,6 +1,12 @@ Releases ======== +v1.8.0 (2022-02-28) +=================== + +- `Combine`: perform zero allocations when there are no errors. + + v1.7.0 (2021-05-06) =================== diff --git a/vendor/go.uber.org/multierr/error.go b/vendor/go.uber.org/multierr/error.go index faa0a05946..f45af149c1 100644 --- a/vendor/go.uber.org/multierr/error.go +++ b/vendor/go.uber.org/multierr/error.go @@ -103,7 +103,7 @@ // if err != nil { // return err // } -// defer multierr.AppendInvoke(err, multierr.Close(conn)) +// defer multierr.AppendInvoke(&err, multierr.Close(conn)) // // ... // } // @@ -372,6 +372,14 @@ func inspect(errors []error) (res inspectResult) { // fromSlice converts the given list of errors into a single error. func fromSlice(errors []error) error { + // Don't pay to inspect small slices. + switch len(errors) { + case 0: + return nil + case 1: + return errors[0] + } + res := inspect(errors) switch res.Count { case 0: @@ -381,8 +389,13 @@ func fromSlice(errors []error) error { return errors[res.FirstErrorIdx] case len(errors): if !res.ContainsMultiError { - // already flat - return &multiError{errors: errors} + // Error list is flat. Make a copy of it + // Otherwise "errors" escapes to the heap + // unconditionally for all other cases. + // This lets us optimize for the "no errors" case. + out := make([]error, len(errors)) + copy(out, errors) + return &multiError{errors: out} } } diff --git a/vendor/go.uber.org/multierr/go.mod b/vendor/go.uber.org/multierr/go.mod deleted file mode 100644 index 398d6c99e7..0000000000 --- a/vendor/go.uber.org/multierr/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module go.uber.org/multierr - -go 1.14 - -require ( - github.com/stretchr/testify v1.7.0 - go.uber.org/atomic v1.7.0 - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect -) diff --git a/vendor/go.uber.org/multierr/go.sum b/vendor/go.uber.org/multierr/go.sum deleted file mode 100644 index 75edd735e0..0000000000 --- a/vendor/go.uber.org/multierr/go.sum +++ /dev/null @@ -1,16 +0,0 @@ -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/go.uber.org/zap/CHANGELOG.md b/vendor/go.uber.org/zap/CHANGELOG.md index bfc493c80e..1793b08c89 100644 --- a/vendor/go.uber.org/zap/CHANGELOG.md +++ b/vendor/go.uber.org/zap/CHANGELOG.md @@ -3,6 +3,27 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## 1.21.0 (7 Feb 2022) + +Enhancements: +* [#1047][]: Add `zapcore.ParseLevel` to parse a `Level` from a string. +* [#1048][]: Add `zap.ParseAtomicLevel` to parse an `AtomicLevel` from a + string. + +Bugfixes: +* [#1058][]: Fix panic in JSON encoder when `EncodeLevel` is unset. + +Other changes: +* [#1052][]: Improve encoding performance when the `AddCaller` and + `AddStacktrace` options are used together. + +[#1047]: https://github.com/uber-go/zap/pull/1047 +[#1048]: https://github.com/uber-go/zap/pull/1048 +[#1052]: https://github.com/uber-go/zap/pull/1052 +[#1058]: https://github.com/uber-go/zap/pull/1058 + +Thanks to @aerosol and @Techassi for their contributions to this release. + ## 1.20.0 (4 Jan 2022) Enhancements: diff --git a/vendor/go.uber.org/zap/go.mod b/vendor/go.uber.org/zap/go.mod deleted file mode 100644 index 51cd3367ed..0000000000 --- a/vendor/go.uber.org/zap/go.mod +++ /dev/null @@ -1,14 +0,0 @@ -module go.uber.org/zap - -go 1.13 - -require ( - github.com/benbjohnson/clock v1.1.0 - github.com/pkg/errors v0.8.1 - github.com/stretchr/testify v1.7.0 - go.uber.org/atomic v1.7.0 - go.uber.org/goleak v1.1.11 - go.uber.org/multierr v1.6.0 - gopkg.in/yaml.v2 v2.2.8 - gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b // indirect -) diff --git a/vendor/go.uber.org/zap/go.sum b/vendor/go.uber.org/zap/go.sum deleted file mode 100644 index 509a0e4e82..0000000000 --- a/vendor/go.uber.org/zap/go.sum +++ /dev/null @@ -1,63 +0,0 @@ -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007 h1:gG67DSER+11cZvqIMb8S8bt0vZtiN6xWYARwirrOSfE= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/vendor/go.uber.org/zap/level.go b/vendor/go.uber.org/zap/level.go index 3567a9a1e6..8f86c430f0 100644 --- a/vendor/go.uber.org/zap/level.go +++ b/vendor/go.uber.org/zap/level.go @@ -86,6 +86,23 @@ func NewAtomicLevelAt(l zapcore.Level) AtomicLevel { return a } +// ParseAtomicLevel parses an AtomicLevel based on a lowercase or all-caps ASCII +// representation of the log level. If the provided ASCII representation is +// invalid an error is returned. +// +// This is particularly useful when dealing with text input to configure log +// levels. +func ParseAtomicLevel(text string) (AtomicLevel, error) { + a := NewAtomicLevel() + l, err := zapcore.ParseLevel(text) + if err != nil { + return a, err + } + + a.SetLevel(l) + return a, nil +} + // Enabled implements the zapcore.LevelEnabler interface, which allows the // AtomicLevel to be used in place of traditional static levels. func (lvl AtomicLevel) Enabled(l zapcore.Level) bool { diff --git a/vendor/go.uber.org/zap/logger.go b/vendor/go.uber.org/zap/logger.go index f116bd936f..087c742228 100644 --- a/vendor/go.uber.org/zap/logger.go +++ b/vendor/go.uber.org/zap/logger.go @@ -24,9 +24,9 @@ import ( "fmt" "io/ioutil" "os" - "runtime" "strings" + "go.uber.org/zap/internal/bufferpool" "go.uber.org/zap/zapcore" ) @@ -259,8 +259,10 @@ func (log *Logger) clone() *Logger { } func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry { - // check must always be called directly by a method in the Logger interface - // (e.g., Check, Info, Fatal). + // Logger.check must always be called directly by a method in the + // Logger interface (e.g., Check, Info, Fatal). + // This skips Logger.check and the Info/Fatal/Check/etc. method that + // called it. const callerSkipOffset = 2 // Check the level first to reduce the cost of disabled log calls. @@ -307,42 +309,55 @@ func (log *Logger) check(lvl zapcore.Level, msg string) *zapcore.CheckedEntry { // Thread the error output through to the CheckedEntry. ce.ErrorOutput = log.errorOutput - if log.addCaller { - frame, defined := getCallerFrame(log.callerSkip + callerSkipOffset) - if !defined { + + addStack := log.addStack.Enabled(ce.Level) + if !log.addCaller && !addStack { + return ce + } + + // Adding the caller or stack trace requires capturing the callers of + // this function. We'll share information between these two. + stackDepth := stacktraceFirst + if addStack { + stackDepth = stacktraceFull + } + stack := captureStacktrace(log.callerSkip+callerSkipOffset, stackDepth) + defer stack.Free() + + if stack.Count() == 0 { + if log.addCaller { fmt.Fprintf(log.errorOutput, "%v Logger.check error: failed to get caller\n", ent.Time.UTC()) log.errorOutput.Sync() } + return ce + } - ce.Entry.Caller = zapcore.EntryCaller{ - Defined: defined, + frame, more := stack.Next() + + if log.addCaller { + ce.Caller = zapcore.EntryCaller{ + Defined: frame.PC != 0, PC: frame.PC, File: frame.File, Line: frame.Line, Function: frame.Function, } } - if log.addStack.Enabled(ce.Entry.Level) { - ce.Entry.Stack = StackSkip("", log.callerSkip+callerSkipOffset).String - } - return ce -} + if addStack { + buffer := bufferpool.Get() + defer buffer.Free() -// getCallerFrame gets caller frame. The argument skip is the number of stack -// frames to ascend, with 0 identifying the caller of getCallerFrame. The -// boolean ok is false if it was not possible to recover the information. -// -// Note: This implementation is similar to runtime.Caller, but it returns the whole frame. -func getCallerFrame(skip int) (frame runtime.Frame, ok bool) { - const skipOffset = 2 // skip getCallerFrame and Callers - - pc := make([]uintptr, 1) - numFrames := runtime.Callers(skip+skipOffset, pc) - if numFrames < 1 { - return + stackfmt := newStackFormatter(buffer) + + // We've already extracted the first frame, so format that + // separately and defer to stackfmt for the rest. + stackfmt.FormatFrame(frame) + if more { + stackfmt.FormatStack(stack) + } + ce.Stack = buffer.String() } - frame, _ = runtime.CallersFrames(pc).Next() - return frame, frame.PC != 0 + return ce } diff --git a/vendor/go.uber.org/zap/stacktrace.go b/vendor/go.uber.org/zap/stacktrace.go index 0cf8c1ddff..3d187fa566 100644 --- a/vendor/go.uber.org/zap/stacktrace.go +++ b/vendor/go.uber.org/zap/stacktrace.go @@ -24,62 +24,153 @@ import ( "runtime" "sync" + "go.uber.org/zap/buffer" "go.uber.org/zap/internal/bufferpool" ) -var ( - _stacktracePool = sync.Pool{ - New: func() interface{} { - return newProgramCounters(64) - }, - } +var _stacktracePool = sync.Pool{ + New: func() interface{} { + return &stacktrace{ + storage: make([]uintptr, 64), + } + }, +} + +type stacktrace struct { + pcs []uintptr // program counters; always a subslice of storage + frames *runtime.Frames + + // The size of pcs varies depending on requirements: + // it will be one if the only the first frame was requested, + // and otherwise it will reflect the depth of the call stack. + // + // storage decouples the slice we need (pcs) from the slice we pool. + // We will always allocate a reasonably large storage, but we'll use + // only as much of it as we need. + storage []uintptr +} + +// stacktraceDepth specifies how deep of a stack trace should be captured. +type stacktraceDepth int + +const ( + // stacktraceFirst captures only the first frame. + stacktraceFirst stacktraceDepth = iota + + // stacktraceFull captures the entire call stack, allocating more + // storage for it if needed. + stacktraceFull ) -func takeStacktrace(skip int) string { - buffer := bufferpool.Get() - defer buffer.Free() - programCounters := _stacktracePool.Get().(*programCounters) - defer _stacktracePool.Put(programCounters) - - var numFrames int - for { - // Skip the call to runtime.Callers and takeStacktrace so that the - // program counters start at the caller of takeStacktrace. - numFrames = runtime.Callers(skip+2, programCounters.pcs) - if numFrames < len(programCounters.pcs) { - break - } - // Don't put the too-short counter slice back into the pool; this lets - // the pool adjust if we consistently take deep stacktraces. - programCounters = newProgramCounters(len(programCounters.pcs) * 2) +// captureStacktrace captures a stack trace of the specified depth, skipping +// the provided number of frames. skip=0 identifies the caller of +// captureStacktrace. +// +// The caller must call Free on the returned stacktrace after using it. +func captureStacktrace(skip int, depth stacktraceDepth) *stacktrace { + stack := _stacktracePool.Get().(*stacktrace) + + switch depth { + case stacktraceFirst: + stack.pcs = stack.storage[:1] + case stacktraceFull: + stack.pcs = stack.storage } - i := 0 - frames := runtime.CallersFrames(programCounters.pcs[:numFrames]) + // Unlike other "skip"-based APIs, skip=0 identifies runtime.Callers + // itself. +2 to skip captureStacktrace and runtime.Callers. + numFrames := runtime.Callers( + skip+2, + stack.pcs, + ) - // Note: On the last iteration, frames.Next() returns false, with a valid - // frame, but we ignore this frame. The last frame is a a runtime frame which - // adds noise, since it's only either runtime.main or runtime.goexit. - for frame, more := frames.Next(); more; frame, more = frames.Next() { - if i != 0 { - buffer.AppendByte('\n') + // runtime.Callers truncates the recorded stacktrace if there is no + // room in the provided slice. For the full stack trace, keep expanding + // storage until there are fewer frames than there is room. + if depth == stacktraceFull { + pcs := stack.pcs + for numFrames == len(pcs) { + pcs = make([]uintptr, len(pcs)*2) + numFrames = runtime.Callers(skip+2, pcs) } - i++ - buffer.AppendString(frame.Function) - buffer.AppendByte('\n') - buffer.AppendByte('\t') - buffer.AppendString(frame.File) - buffer.AppendByte(':') - buffer.AppendInt(int64(frame.Line)) + + // Discard old storage instead of returning it to the pool. + // This will adjust the pool size over time if stack traces are + // consistently very deep. + stack.storage = pcs + stack.pcs = pcs[:numFrames] + } else { + stack.pcs = stack.pcs[:numFrames] } + stack.frames = runtime.CallersFrames(stack.pcs) + return stack +} + +// Free releases resources associated with this stacktrace +// and returns it back to the pool. +func (st *stacktrace) Free() { + st.frames = nil + st.pcs = nil + _stacktracePool.Put(st) +} + +// Count reports the total number of frames in this stacktrace. +// Count DOES NOT change as Next is called. +func (st *stacktrace) Count() int { + return len(st.pcs) +} + +// Next returns the next frame in the stack trace, +// and a boolean indicating whether there are more after it. +func (st *stacktrace) Next() (_ runtime.Frame, more bool) { + return st.frames.Next() +} + +func takeStacktrace(skip int) string { + stack := captureStacktrace(skip+1, stacktraceFull) + defer stack.Free() + + buffer := bufferpool.Get() + defer buffer.Free() + + stackfmt := newStackFormatter(buffer) + stackfmt.FormatStack(stack) return buffer.String() } -type programCounters struct { - pcs []uintptr +// stackFormatter formats a stack trace into a readable string representation. +type stackFormatter struct { + b *buffer.Buffer + nonEmpty bool // whehther we've written at least one frame already +} + +// newStackFormatter builds a new stackFormatter. +func newStackFormatter(b *buffer.Buffer) stackFormatter { + return stackFormatter{b: b} +} + +// FormatStack formats all remaining frames in the provided stacktrace -- minus +// the final runtime.main/runtime.goexit frame. +func (sf *stackFormatter) FormatStack(stack *stacktrace) { + // Note: On the last iteration, frames.Next() returns false, with a valid + // frame, but we ignore this frame. The last frame is a a runtime frame which + // adds noise, since it's only either runtime.main or runtime.goexit. + for frame, more := stack.Next(); more; frame, more = stack.Next() { + sf.FormatFrame(frame) + } } -func newProgramCounters(size int) *programCounters { - return &programCounters{make([]uintptr, size)} +// FormatFrame formats the given frame. +func (sf *stackFormatter) FormatFrame(frame runtime.Frame) { + if sf.nonEmpty { + sf.b.AppendByte('\n') + } + sf.nonEmpty = true + sf.b.AppendString(frame.Function) + sf.b.AppendByte('\n') + sf.b.AppendByte('\t') + sf.b.AppendString(frame.File) + sf.b.AppendByte(':') + sf.b.AppendInt(int64(frame.Line)) } diff --git a/vendor/go.uber.org/zap/zapcore/json_encoder.go b/vendor/go.uber.org/zap/zapcore/json_encoder.go index 505c714ac4..c5d751b821 100644 --- a/vendor/go.uber.org/zap/zapcore/json_encoder.go +++ b/vendor/go.uber.org/zap/zapcore/json_encoder.go @@ -364,7 +364,7 @@ func (enc *jsonEncoder) EncodeEntry(ent Entry, fields []Field) (*buffer.Buffer, final := enc.clone() final.buf.AppendByte('{') - if final.LevelKey != "" { + if final.LevelKey != "" && final.EncodeLevel != nil { final.addKey(final.LevelKey) cur := final.buf.Len() final.EncodeLevel(ent.Level, final) diff --git a/vendor/go.uber.org/zap/zapcore/level.go b/vendor/go.uber.org/zap/zapcore/level.go index e575c9f432..56e88dc0c8 100644 --- a/vendor/go.uber.org/zap/zapcore/level.go +++ b/vendor/go.uber.org/zap/zapcore/level.go @@ -55,6 +55,18 @@ const ( _maxLevel = FatalLevel ) +// ParseLevel parses a level based on the lower-case or all-caps ASCII +// representation of the log level. If the provided ASCII representation is +// invalid an error is returned. +// +// This is particularly useful when dealing with text input to configure log +// levels. +func ParseLevel(text string) (Level, error) { + var level Level + err := level.UnmarshalText([]byte(text)) + return level, err +} + // String returns a lower-case ASCII representation of the log level. func (l Level) String() string { switch l { diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go b/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go index c5898db465..4652247b8a 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go +++ b/vendor/golang.org/x/crypto/chacha20/chacha_s390x.go @@ -15,6 +15,7 @@ const bufSize = 256 // xorKeyStreamVX is an assembly implementation of XORKeyStream. It must only // be called when the vector facility is available. Implementation in asm_s390x.s. +// //go:noescape func xorKeyStreamVX(dst, src []byte, key *[8]uint32, nonce *[3]uint32, counter *uint32) diff --git a/vendor/golang.org/x/crypto/cryptobyte/builder.go b/vendor/golang.org/x/crypto/cryptobyte/builder.go index ca7b1db5ce..c7ded75771 100644 --- a/vendor/golang.org/x/crypto/cryptobyte/builder.go +++ b/vendor/golang.org/x/crypto/cryptobyte/builder.go @@ -106,13 +106,13 @@ func (b *Builder) AddBytes(v []byte) { // supplied to them. The child builder passed to the continuation can be used // to build the content of the length-prefixed sequence. For example: // -// parent := cryptobyte.NewBuilder() -// parent.AddUint8LengthPrefixed(func (child *Builder) { -// child.AddUint8(42) -// child.AddUint8LengthPrefixed(func (grandchild *Builder) { -// grandchild.AddUint8(5) -// }) -// }) +// parent := cryptobyte.NewBuilder() +// parent.AddUint8LengthPrefixed(func (child *Builder) { +// child.AddUint8(42) +// child.AddUint8LengthPrefixed(func (grandchild *Builder) { +// grandchild.AddUint8(5) +// }) +// }) // // It is an error to write more bytes to the child than allowed by the reserved // length prefix. After the continuation returns, the child must be considered diff --git a/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go b/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go index 44dc8e8caf..edcf163c4e 100644 --- a/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go +++ b/vendor/golang.org/x/crypto/curve25519/internal/field/fe_amd64.go @@ -1,13 +1,16 @@ // Code generated by command: go run fe_amd64_asm.go -out ../fe_amd64.s -stubs ../fe_amd64.go -pkg field. DO NOT EDIT. +//go:build amd64 && gc && !purego // +build amd64,gc,!purego package field // feMul sets out = a * b. It works like feMulGeneric. +// //go:noescape func feMul(out *Element, a *Element, b *Element) // feSquare sets out = a * a. It works like feSquareGeneric. +// //go:noescape func feSquare(out *Element, a *Element) diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go index c942a65904..e041da5ea3 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_generic.go @@ -136,7 +136,7 @@ func shiftRightBy2(a uint128) uint128 { // updateGeneric absorbs msg into the state.h accumulator. For each chunk m of // 128 bits of message, it computes // -// h₊ = (h + m) * r mod 2¹³⁰ - 5 +// h₊ = (h + m) * r mod 2¹³⁰ - 5 // // If the msg length is not a multiple of TagSize, it assumes the last // incomplete chunk is the final one. @@ -278,8 +278,7 @@ const ( // finalize completes the modular reduction of h and computes // -// out = h + s mod 2¹²⁸ -// +// out = h + s mod 2¹²⁸ func finalize(out *[TagSize]byte, h *[3]uint64, s *[2]uint64) { h0, h1, h2 := h[0], h[1], h[2] diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go index 62cc9f8470..ec95966889 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_s390x.go @@ -14,6 +14,7 @@ import ( // updateVX is an assembly implementation of Poly1305 that uses vector // instructions. It must only be called if the vector facility (vx) is // available. +// //go:noescape func updateVX(state *macState, msg []byte) diff --git a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go index 593f653008..904b57e01d 100644 --- a/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go +++ b/vendor/golang.org/x/crypto/pbkdf2/pbkdf2.go @@ -32,7 +32,7 @@ import ( // can get a derived key for e.g. AES-256 (which needs a 32-byte key) by // doing: // -// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) +// dk := pbkdf2.Key([]byte("some password"), salt, 4096, 32, sha1.New) // // Remember to get a good random salt. At least 8 bytes is recommended by the // RFC. diff --git a/vendor/golang.org/x/crypto/poly1305/poly1305_compat.go b/vendor/golang.org/x/crypto/poly1305/poly1305_compat.go deleted file mode 100644 index dd975a32c9..0000000000 --- a/vendor/golang.org/x/crypto/poly1305/poly1305_compat.go +++ /dev/null @@ -1,91 +0,0 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// Package poly1305 implements Poly1305 one-time message authentication code as -// specified in https://cr.yp.to/mac/poly1305-20050329.pdf. -// -// Poly1305 is a fast, one-time authentication function. It is infeasible for an -// attacker to generate an authenticator for a message without the key. However, a -// key must only be used for a single message. Authenticating two different -// messages with the same key allows an attacker to forge authenticators for other -// messages with the same key. -// -// Poly1305 was originally coupled with AES in order to make Poly1305-AES. AES was -// used with a fixed key in order to generate one-time keys from an nonce. -// However, in this package AES isn't used and the one-time key is specified -// directly. -// -// Deprecated: Poly1305 as implemented by this package is a cryptographic -// building block that is not safe for general purpose use. -// For encryption, use the full ChaCha20-Poly1305 construction implemented by -// golang.org/x/crypto/chacha20poly1305. For authentication, use a general -// purpose MAC such as HMAC implemented by crypto/hmac. -package poly1305 // import "golang.org/x/crypto/poly1305" - -import "golang.org/x/crypto/internal/poly1305" - -// TagSize is the size, in bytes, of a poly1305 authenticator. -// -// For use with golang.org/x/crypto/chacha20poly1305, chacha20poly1305.Overhead -// can be used instead. -const TagSize = 16 - -// Sum generates an authenticator for msg using a one-time key and puts the -// 16-byte result into out. Authenticating two different messages with the same -// key allows an attacker to forge messages at will. -func Sum(out *[16]byte, m []byte, key *[32]byte) { - poly1305.Sum(out, m, key) -} - -// Verify returns true if mac is a valid authenticator for m with the given key. -func Verify(mac *[16]byte, m []byte, key *[32]byte) bool { - return poly1305.Verify(mac, m, key) -} - -// New returns a new MAC computing an authentication -// tag of all data written to it with the given key. -// This allows writing the message progressively instead -// of passing it as a single slice. Common users should use -// the Sum function instead. -// -// The key must be unique for each message, as authenticating -// two different messages with the same key allows an attacker -// to forge messages at will. -func New(key *[32]byte) *MAC { - return &MAC{mac: poly1305.New(key)} -} - -// MAC is an io.Writer computing an authentication tag -// of the data written to it. -// -// MAC cannot be used like common hash.Hash implementations, -// because using a poly1305 key twice breaks its security. -// Therefore writing data to a running MAC after calling -// Sum or Verify causes it to panic. -type MAC struct { - mac *poly1305.MAC -} - -// Size returns the number of bytes Sum will return. -func (h *MAC) Size() int { return TagSize } - -// Write adds more data to the running message authentication code. -// It never returns an error. -// -// It must not be called after the first call of Sum or Verify. -func (h *MAC) Write(p []byte) (n int, err error) { - return h.mac.Write(p) -} - -// Sum computes the authenticator of all data written to the -// message authentication code. -func (h *MAC) Sum(b []byte) []byte { - return h.mac.Sum(b) -} - -// Verify returns whether the authenticator of all data written to -// the message authentication code matches the expected value. -func (h *MAC) Verify(expected []byte) bool { - return h.mac.Verify(expected) -} diff --git a/vendor/golang.org/x/crypto/sha3/doc.go b/vendor/golang.org/x/crypto/sha3/doc.go index c2fef30aff..decd8cf9bf 100644 --- a/vendor/golang.org/x/crypto/sha3/doc.go +++ b/vendor/golang.org/x/crypto/sha3/doc.go @@ -8,8 +8,7 @@ // Both types of hash function use the "sponge" construction and the Keccak // permutation. For a detailed specification see http://keccak.noekeon.org/ // -// -// Guidance +// # Guidance // // If you aren't sure what function you need, use SHAKE256 with at least 64 // bytes of output. The SHAKE instances are faster than the SHA3 instances; @@ -19,8 +18,7 @@ // secret key to the input, hash with SHAKE256 and read at least 32 bytes of // output. // -// -// Security strengths +// # Security strengths // // The SHA3-x (x equals 224, 256, 384, or 512) functions have a security // strength against preimage attacks of x bits. Since they only produce "x" @@ -31,8 +29,7 @@ // is used. Requesting more than 64 or 32 bytes of output, respectively, does // not increase the collision-resistance of the SHAKE functions. // -// -// The sponge construction +// # The sponge construction // // A sponge builds a pseudo-random function from a public pseudo-random // permutation, by applying the permutation to a state of "rate + capacity" @@ -50,8 +47,7 @@ // Since the KeccakF-1600 permutation is 1600 bits (200 bytes) wide, this means // that the security strength of a sponge instance is equal to (1600 - bitrate) / 2. // -// -// Recommendations +// # Recommendations // // The SHAKE functions are recommended for most new uses. They can produce // output of arbitrary length. SHAKE256, with an output length of at least diff --git a/vendor/golang.org/x/crypto/sha3/sha3_s390x.go b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go index 4fcfc924ef..63a3edb4ce 100644 --- a/vendor/golang.org/x/crypto/sha3/sha3_s390x.go +++ b/vendor/golang.org/x/crypto/sha3/sha3_s390x.go @@ -34,11 +34,13 @@ const ( // kimd is a wrapper for the 'compute intermediate message digest' instruction. // src must be a multiple of the rate for the given function code. +// //go:noescape func kimd(function code, chain *[200]byte, src []byte) // klmd is a wrapper for the 'compute last message digest' instruction. // src padding is handled by the instruction. +// //go:noescape func klmd(function code, chain *[200]byte, dst, src []byte) diff --git a/vendor/golang.org/x/mod/module/module.go b/vendor/golang.org/x/mod/module/module.go index ba97ac356e..355b5a4568 100644 --- a/vendor/golang.org/x/mod/module/module.go +++ b/vendor/golang.org/x/mod/module/module.go @@ -286,12 +286,7 @@ func fileNameOK(r rune) bool { if '0' <= r && r <= '9' || 'A' <= r && r <= 'Z' || 'a' <= r && r <= 'z' { return true } - for i := 0; i < len(allowed); i++ { - if rune(allowed[i]) == r { - return true - } - } - return false + return strings.ContainsRune(allowed, r) } // It may be OK to add more ASCII punctuation here, but only carefully. // For example Windows disallows < > \, and macOS disallows :, so we must not allow those. @@ -803,6 +798,7 @@ func unescapeString(escaped string) (string, bool) { // GOPRIVATE environment variable, as described by 'go help module-private'. // // It ignores any empty or malformed patterns in the list. +// Trailing slashes on patterns are ignored. func MatchPrefixPatterns(globs, target string) bool { for globs != "" { // Extract next non-empty glob in comma-separated list. @@ -812,6 +808,7 @@ func MatchPrefixPatterns(globs, target string) bool { } else { glob, globs = globs, "" } + glob = strings.TrimSuffix(glob, "/") if glob == "" { continue } diff --git a/vendor/golang.org/x/mod/semver/semver.go b/vendor/golang.org/x/mod/semver/semver.go index 7be398f80d..a30a22bf20 100644 --- a/vendor/golang.org/x/mod/semver/semver.go +++ b/vendor/golang.org/x/mod/semver/semver.go @@ -32,7 +32,6 @@ type parsed struct { short string prerelease string build string - err string } // IsValid reports whether v is a valid semantic version string. @@ -172,12 +171,10 @@ func Sort(list []string) { func parse(v string) (p parsed, ok bool) { if v == "" || v[0] != 'v' { - p.err = "missing v prefix" return } p.major, v, ok = parseInt(v[1:]) if !ok { - p.err = "bad major version" return } if v == "" { @@ -187,13 +184,11 @@ func parse(v string) (p parsed, ok bool) { return } if v[0] != '.' { - p.err = "bad minor prefix" ok = false return } p.minor, v, ok = parseInt(v[1:]) if !ok { - p.err = "bad minor version" return } if v == "" { @@ -202,31 +197,26 @@ func parse(v string) (p parsed, ok bool) { return } if v[0] != '.' { - p.err = "bad patch prefix" ok = false return } p.patch, v, ok = parseInt(v[1:]) if !ok { - p.err = "bad patch version" return } if len(v) > 0 && v[0] == '-' { p.prerelease, v, ok = parsePrerelease(v) if !ok { - p.err = "bad prerelease" return } } if len(v) > 0 && v[0] == '+' { p.build, v, ok = parseBuild(v) if !ok { - p.err = "bad build" return } } if v != "" { - p.err = "junk on end" ok = false return } diff --git a/vendor/golang.org/x/net/bpf/doc.go b/vendor/golang.org/x/net/bpf/doc.go index ae62feb534..04ec1c8ab5 100644 --- a/vendor/golang.org/x/net/bpf/doc.go +++ b/vendor/golang.org/x/net/bpf/doc.go @@ -3,7 +3,6 @@ // license that can be found in the LICENSE file. /* - Package bpf implements marshaling and unmarshaling of programs for the Berkeley Packet Filter virtual machine, and provides a Go implementation of the virtual machine. @@ -21,7 +20,7 @@ access to kernel functions, and while conditional branches are allowed, they can only jump forwards, to guarantee that there are no infinite loops. -The virtual machine +# The virtual machine The BPF VM is an accumulator machine. Its main register, called register A, is an implicit source and destination in all arithmetic @@ -50,7 +49,7 @@ to extensions, which are essentially calls to kernel utility functions. Currently, the only extensions supported by this package are the Linux packet filter extensions. -Examples +# Examples This packet filter selects all ARP packets. @@ -77,6 +76,5 @@ This packet filter captures a random 1% sample of traffic. // Ignore. bpf.RetConstant{Val: 0}, }) - */ package bpf // import "golang.org/x/net/bpf" diff --git a/vendor/golang.org/x/net/context/context.go b/vendor/golang.org/x/net/context/context.go index a3c021d3f8..cf66309c4a 100644 --- a/vendor/golang.org/x/net/context/context.go +++ b/vendor/golang.org/x/net/context/context.go @@ -21,9 +21,9 @@ // explicitly to each function that needs it. The Context should be the first // parameter, typically named ctx: // -// func DoSomething(ctx context.Context, arg Arg) error { -// // ... use ctx ... -// } +// func DoSomething(ctx context.Context, arg Arg) error { +// // ... use ctx ... +// } // // Do not pass a nil Context, even if a function permits it. Pass context.TODO // if you are unsure about which Context to use. diff --git a/vendor/golang.org/x/net/context/go17.go b/vendor/golang.org/x/net/context/go17.go index 344bd14334..0a54bdbcc6 100644 --- a/vendor/golang.org/x/net/context/go17.go +++ b/vendor/golang.org/x/net/context/go17.go @@ -54,11 +54,11 @@ func WithDeadline(parent Context, deadline time.Time) (Context, CancelFunc) { // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete: // -// func slowOperationWithTimeout(ctx context.Context) (Result, error) { -// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) -// defer cancel() // releases resources if slowOperation completes before timeout elapses -// return slowOperation(ctx) -// } +// func slowOperationWithTimeout(ctx context.Context) (Result, error) { +// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) +// defer cancel() // releases resources if slowOperation completes before timeout elapses +// return slowOperation(ctx) +// } func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { return WithDeadline(parent, time.Now().Add(timeout)) } diff --git a/vendor/golang.org/x/net/context/pre_go17.go b/vendor/golang.org/x/net/context/pre_go17.go index 5270db5db7..7b6b685114 100644 --- a/vendor/golang.org/x/net/context/pre_go17.go +++ b/vendor/golang.org/x/net/context/pre_go17.go @@ -264,11 +264,11 @@ func (c *timerCtx) cancel(removeFromParent bool, err error) { // Canceling this context releases resources associated with it, so code should // call cancel as soon as the operations running in this Context complete: // -// func slowOperationWithTimeout(ctx context.Context) (Result, error) { -// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) -// defer cancel() // releases resources if slowOperation completes before timeout elapses -// return slowOperation(ctx) -// } +// func slowOperationWithTimeout(ctx context.Context) (Result, error) { +// ctx, cancel := context.WithTimeout(ctx, 100*time.Millisecond) +// defer cancel() // releases resources if slowOperation completes before timeout elapses +// return slowOperation(ctx) +// } func WithTimeout(parent Context, timeout time.Duration) (Context, CancelFunc) { return WithDeadline(parent, time.Now().Add(timeout)) } diff --git a/vendor/golang.org/x/net/http/httpguts/httplex.go b/vendor/golang.org/x/net/http/httpguts/httplex.go index c79aa73f28..6e071e8524 100644 --- a/vendor/golang.org/x/net/http/httpguts/httplex.go +++ b/vendor/golang.org/x/net/http/httpguts/httplex.go @@ -173,13 +173,15 @@ func tokenEqual(t1, t2 string) bool { // isLWS reports whether b is linear white space, according // to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 -// LWS = [CRLF] 1*( SP | HT ) +// +// LWS = [CRLF] 1*( SP | HT ) func isLWS(b byte) bool { return b == ' ' || b == '\t' } // isCTL reports whether b is a control byte, according // to http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 -// CTL = +// +// CTL = func isCTL(b byte) bool { const del = 0x7f // a CTL return b < ' ' || b == del @@ -189,12 +191,13 @@ func isCTL(b byte) bool { // HTTP/2 imposes the additional restriction that uppercase ASCII // letters are not allowed. // -// RFC 7230 says: -// header-field = field-name ":" OWS field-value OWS -// field-name = token -// token = 1*tchar -// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / -// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA +// RFC 7230 says: +// +// header-field = field-name ":" OWS field-value OWS +// field-name = token +// token = 1*tchar +// tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" / "+" / "-" / "." / +// "^" / "_" / "`" / "|" / "~" / DIGIT / ALPHA func ValidHeaderFieldName(v string) bool { if len(v) == 0 { return false @@ -267,27 +270,28 @@ var validHostByte = [256]bool{ // ValidHeaderFieldValue reports whether v is a valid "field-value" according to // http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2 : // -// message-header = field-name ":" [ field-value ] -// field-value = *( field-content | LWS ) -// field-content = +// message-header = field-name ":" [ field-value ] +// field-value = *( field-content | LWS ) +// field-content = // // http://www.w3.org/Protocols/rfc2616/rfc2616-sec2.html#sec2.2 : // -// TEXT = -// LWS = [CRLF] 1*( SP | HT ) -// CTL = +// TEXT = +// LWS = [CRLF] 1*( SP | HT ) +// CTL = // // RFC 7230 says: -// field-value = *( field-content / obs-fold ) -// obj-fold = N/A to http2, and deprecated -// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] -// field-vchar = VCHAR / obs-text -// obs-text = %x80-FF -// VCHAR = "any visible [USASCII] character" +// +// field-value = *( field-content / obs-fold ) +// obj-fold = N/A to http2, and deprecated +// field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ] +// field-vchar = VCHAR / obs-text +// obs-text = %x80-FF +// VCHAR = "any visible [USASCII] character" // // http2 further says: "Similarly, HTTP/2 allows header field values // that are not valid. While most of the values that can be encoded diff --git a/vendor/golang.org/x/net/http2/errors.go b/vendor/golang.org/x/net/http2/errors.go index 2663e5d287..f2067dabc5 100644 --- a/vendor/golang.org/x/net/http2/errors.go +++ b/vendor/golang.org/x/net/http2/errors.go @@ -136,7 +136,7 @@ func (e headerFieldNameError) Error() string { type headerFieldValueError string func (e headerFieldValueError) Error() string { - return fmt.Sprintf("invalid header field value %q", string(e)) + return fmt.Sprintf("invalid header field value for %q", string(e)) } var ( diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go index 96a7479052..0178647ee0 100644 --- a/vendor/golang.org/x/net/http2/frame.go +++ b/vendor/golang.org/x/net/http2/frame.go @@ -1532,7 +1532,8 @@ func (fr *Framer) readMetaFrame(hf *HeadersFrame) (*MetaHeadersFrame, error) { fr.debugReadLoggerf("http2: decoded hpack field %+v", hf) } if !httpguts.ValidHeaderFieldValue(hf.Value) { - invalid = headerFieldValueError(hf.Value) + // Don't include the value in the error, because it may be sensitive. + invalid = headerFieldValueError(hf.Name) } isPseudo := strings.HasPrefix(hf.Name, ":") if isPseudo { diff --git a/vendor/golang.org/x/net/http2/hpack/huffman.go b/vendor/golang.org/x/net/http2/hpack/huffman.go index fe0b84ccd4..20d083a716 100644 --- a/vendor/golang.org/x/net/http2/hpack/huffman.go +++ b/vendor/golang.org/x/net/http2/hpack/huffman.go @@ -169,25 +169,50 @@ func buildRootHuffmanNode() { // AppendHuffmanString appends s, as encoded in Huffman codes, to dst // and returns the extended buffer. func AppendHuffmanString(dst []byte, s string) []byte { - rembits := uint8(8) - + // This relies on the maximum huffman code length being 30 (See tables.go huffmanCodeLen array) + // So if a uint64 buffer has less than 32 valid bits can always accommodate another huffmanCode. + var ( + x uint64 // buffer + n uint // number valid of bits present in x + ) for i := 0; i < len(s); i++ { - if rembits == 8 { - dst = append(dst, 0) + c := s[i] + n += uint(huffmanCodeLen[c]) + x <<= huffmanCodeLen[c] % 64 + x |= uint64(huffmanCodes[c]) + if n >= 32 { + n %= 32 // Normally would be -= 32 but %= 32 informs compiler 0 <= n <= 31 for upcoming shift + y := uint32(x >> n) // Compiler doesn't combine memory writes if y isn't uint32 + dst = append(dst, byte(y>>24), byte(y>>16), byte(y>>8), byte(y)) } - dst, rembits = appendByteToHuffmanCode(dst, rembits, s[i]) } - - if rembits < 8 { - // special EOS symbol - code := uint32(0x3fffffff) - nbits := uint8(30) - - t := uint8(code >> (nbits - rembits)) - dst[len(dst)-1] |= t + // Add padding bits if necessary + if over := n % 8; over > 0 { + const ( + eosCode = 0x3fffffff + eosNBits = 30 + eosPadByte = eosCode >> (eosNBits - 8) + ) + pad := 8 - over + x = (x << pad) | (eosPadByte >> over) + n += pad // 8 now divides into n exactly } - - return dst + // n in (0, 8, 16, 24, 32) + switch n / 8 { + case 0: + return dst + case 1: + return append(dst, byte(x)) + case 2: + y := uint16(x) + return append(dst, byte(y>>8), byte(y)) + case 3: + y := uint16(x >> 8) + return append(dst, byte(y>>8), byte(y), byte(x)) + } + // case 4: + y := uint32(x) + return append(dst, byte(y>>24), byte(y>>16), byte(y>>8), byte(y)) } // HuffmanEncodeLength returns the number of bytes required to encode @@ -199,35 +224,3 @@ func HuffmanEncodeLength(s string) uint64 { } return (n + 7) / 8 } - -// appendByteToHuffmanCode appends Huffman code for c to dst and -// returns the extended buffer and the remaining bits in the last -// element. The appending is not byte aligned and the remaining bits -// in the last element of dst is given in rembits. -func appendByteToHuffmanCode(dst []byte, rembits uint8, c byte) ([]byte, uint8) { - code := huffmanCodes[c] - nbits := huffmanCodeLen[c] - - for { - if rembits > nbits { - t := uint8(code << (rembits - nbits)) - dst[len(dst)-1] |= t - rembits -= nbits - break - } - - t := uint8(code >> (nbits - rembits)) - dst[len(dst)-1] |= t - - nbits -= rembits - rembits = 8 - - if nbits == 0 { - break - } - - dst = append(dst, 0) - } - - return dst, rembits -} diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go index 5571ccfd26..479ba4b2b1 100644 --- a/vendor/golang.org/x/net/http2/http2.go +++ b/vendor/golang.org/x/net/http2/http2.go @@ -13,7 +13,6 @@ // See https://http2.github.io/ for more information on HTTP/2. // // See https://http2.golang.org/ for a test server running this code. -// package http2 // import "golang.org/x/net/http2" import ( @@ -176,10 +175,11 @@ func (s SettingID) String() string { // name (key). See httpguts.ValidHeaderName for the base rules. // // Further, http2 says: -// "Just as in HTTP/1.x, header field names are strings of ASCII -// characters that are compared in a case-insensitive -// fashion. However, header field names MUST be converted to -// lowercase prior to their encoding in HTTP/2. " +// +// "Just as in HTTP/1.x, header field names are strings of ASCII +// characters that are compared in a case-insensitive +// fashion. However, header field names MUST be converted to +// lowercase prior to their encoding in HTTP/2. " func validWireHeaderFieldName(v string) bool { if len(v) == 0 { return false @@ -365,8 +365,8 @@ func (s *sorter) SortStrings(ss []string) { // validPseudoPath reports whether v is a valid :path pseudo-header // value. It must be either: // -// *) a non-empty string starting with '/' -// *) the string '*', for OPTIONS requests. +// - a non-empty string starting with '/' +// - the string '*', for OPTIONS requests. // // For now this is only used a quick check for deciding when to clean // up Opaque URLs before sending requests from the Transport. diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index e644d9b2f3..47524a61a5 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -315,6 +315,20 @@ type ServeConnOpts struct { // requests. If nil, BaseConfig.Handler is used. If BaseConfig // or BaseConfig.Handler is nil, http.DefaultServeMux is used. Handler http.Handler + + // UpgradeRequest is an initial request received on a connection + // undergoing an h2c upgrade. The request body must have been + // completely read from the connection before calling ServeConn, + // and the 101 Switching Protocols response written. + UpgradeRequest *http.Request + + // Settings is the decoded contents of the HTTP2-Settings header + // in an h2c upgrade request. + Settings []byte + + // SawClientPreface is set if the HTTP/2 connection preface + // has already been read from the connection. + SawClientPreface bool } func (o *ServeConnOpts) context() context.Context { @@ -383,6 +397,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { headerTableSize: initialHeaderTableSize, serveG: newGoroutineLock(), pushEnabled: true, + sawClientPreface: opts.SawClientPreface, } s.state.registerConn(sc) @@ -400,7 +415,7 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { if s.NewWriteScheduler != nil { sc.writeSched = s.NewWriteScheduler() } else { - sc.writeSched = NewRandomWriteScheduler() + sc.writeSched = NewPriorityWriteScheduler(nil) } // These start at the RFC-specified defaults. If there is a higher @@ -465,9 +480,27 @@ func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { } } + if opts.Settings != nil { + fr := &SettingsFrame{ + FrameHeader: FrameHeader{valid: true}, + p: opts.Settings, + } + if err := fr.ForeachSetting(sc.processSetting); err != nil { + sc.rejectConn(ErrCodeProtocol, "invalid settings") + return + } + opts.Settings = nil + } + if hook := testHookGetServerConn; hook != nil { hook(sc) } + + if opts.UpgradeRequest != nil { + sc.upgradeRequest(opts.UpgradeRequest) + opts.UpgradeRequest = nil + } + sc.serve() } @@ -512,6 +545,7 @@ type serverConn struct { // Everything following is owned by the serve loop; use serveG.check(): serveG goroutineLock // used to verify funcs are on serve() pushEnabled bool + sawClientPreface bool // preface has already been read, used in h2c upgrade sawFirstSettings bool // got the initial SETTINGS frame after the preface needToSendSettingsAck bool unackedSettings int // how many SETTINGS have we sent without ACKs? @@ -974,6 +1008,9 @@ var errPrefaceTimeout = errors.New("timeout waiting for client preface") // returns errPrefaceTimeout on timeout, or an error if the greeting // is invalid. func (sc *serverConn) readPreface() error { + if sc.sawClientPreface { + return nil + } errc := make(chan error, 1) go func() { // Read the client preface @@ -1915,6 +1952,26 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { return nil } +func (sc *serverConn) upgradeRequest(req *http.Request) { + sc.serveG.check() + id := uint32(1) + sc.maxClientStreamID = id + st := sc.newStream(id, 0, stateHalfClosedRemote) + st.reqTrailer = req.Trailer + if st.reqTrailer != nil { + st.trailer = make(http.Header) + } + rw := sc.newResponseWriter(st, req) + + // Disable any read deadline set by the net/http package + // prior to the upgrade. + if sc.hs.ReadTimeout != 0 { + sc.conn.SetReadDeadline(time.Time{}) + } + + go sc.runHandler(rw, req, sc.handler.ServeHTTP) +} + func (st *stream) processTrailerHeaders(f *MetaHeadersFrame) error { sc := st.sc sc.serveG.check() @@ -2145,6 +2202,11 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r } req = req.WithContext(st.ctx) + rw := sc.newResponseWriter(st, req) + return rw, req, nil +} + +func (sc *serverConn) newResponseWriter(st *stream, req *http.Request) *responseWriter { rws := responseWriterStatePool.Get().(*responseWriterState) bwSave := rws.bw *rws = responseWriterState{} // zero all the fields @@ -2153,10 +2215,7 @@ func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*r rws.bw.Reset(chunkWriter{rws}) rws.stream = st rws.req = req - rws.body = body - - rw := &responseWriter{rws: rws} - return rw, req, nil + return &responseWriter{rws: rws} } // Run on its own goroutine. @@ -2316,17 +2375,18 @@ type requestBody struct { _ incomparable stream *stream conn *serverConn - closed bool // for use by Close only - sawEOF bool // for use by Read only - pipe *pipe // non-nil if we have a HTTP entity message body - needsContinue bool // need to send a 100-continue + closeOnce sync.Once // for use by Close only + sawEOF bool // for use by Read only + pipe *pipe // non-nil if we have a HTTP entity message body + needsContinue bool // need to send a 100-continue } func (b *requestBody) Close() error { - if b.pipe != nil && !b.closed { - b.pipe.BreakWithError(errClosedBody) - } - b.closed = true + b.closeOnce.Do(func() { + if b.pipe != nil { + b.pipe.BreakWithError(errClosedBody) + } + }) return nil } @@ -2370,7 +2430,6 @@ type responseWriterState struct { // immutable within a request: stream *stream req *http.Request - body *requestBody // to close at end of request, if DATA frames didn't conn *serverConn // TODO: adjust buffer writing sizes based on server config, frame size updates from peer, etc @@ -2546,8 +2605,9 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { // prior to the headers being written. If the set of trailers is fixed // or known before the header is written, the normal Go trailers mechanism // is preferred: -// https://golang.org/pkg/net/http/#ResponseWriter -// https://golang.org/pkg/net/http/#example_ResponseWriter_trailers +// +// https://golang.org/pkg/net/http/#ResponseWriter +// https://golang.org/pkg/net/http/#example_ResponseWriter_trailers const TrailerPrefix = "Trailer:" // promoteUndeclaredTrailers permits http.Handlers to set trailers @@ -2643,8 +2703,7 @@ func checkWriteHeaderCode(code int) { // Issue 22880: require valid WriteHeader status codes. // For now we only enforce that it's three digits. // In the future we might block things over 599 (600 and above aren't defined - // at http://httpwg.org/specs/rfc7231.html#status.codes) - // and we might block under 200 (once we have more mature 1xx support). + // at http://httpwg.org/specs/rfc7231.html#status.codes). // But for now any three digits. // // We used to send "HTTP/1.1 000 0" on the wire in responses but there's @@ -2665,13 +2724,41 @@ func (w *responseWriter) WriteHeader(code int) { } func (rws *responseWriterState) writeHeader(code int) { - if !rws.wroteHeader { - checkWriteHeaderCode(code) - rws.wroteHeader = true - rws.status = code - if len(rws.handlerHeader) > 0 { - rws.snapHeader = cloneHeader(rws.handlerHeader) + if rws.wroteHeader { + return + } + + checkWriteHeaderCode(code) + + // Handle informational headers + if code >= 100 && code <= 199 { + // Per RFC 8297 we must not clear the current header map + h := rws.handlerHeader + + _, cl := h["Content-Length"] + _, te := h["Transfer-Encoding"] + if cl || te { + h = h.Clone() + h.Del("Content-Length") + h.Del("Transfer-Encoding") + } + + if rws.conn.writeHeaders(rws.stream, &writeResHeaders{ + streamID: rws.stream.id, + httpResCode: code, + h: h, + endStream: rws.handlerDone && !rws.hasTrailers(), + }) != nil { + rws.dirty = true } + + return + } + + rws.wroteHeader = true + rws.status = code + if len(rws.handlerHeader) > 0 { + rws.snapHeader = cloneHeader(rws.handlerHeader) } } diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 4f09897637..4ded4dfd56 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -16,7 +16,6 @@ import ( "errors" "fmt" "io" - "io/ioutil" "log" "math" mathrand "math/rand" @@ -501,12 +500,14 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res if req, err = shouldRetryRequest(req, err); err == nil { // After the first retry, do exponential backoff with 10% jitter. if retry == 0 { + t.vlogf("RoundTrip retrying after failure: %v", err) continue } backoff := float64(uint(1) << (uint(retry) - 1)) backoff += backoff * (0.1 * mathrand.Float64()) select { case <-time.After(time.Second * time.Duration(backoff)): + t.vlogf("RoundTrip retrying after failure: %v", err) continue case <-req.Context().Done(): err = req.Context().Err() @@ -732,10 +733,13 @@ func (cc *ClientConn) healthCheck() { // trigger the healthCheck again if there is no frame received. ctx, cancel := context.WithTimeout(context.Background(), pingTimeout) defer cancel() + cc.vlogf("http2: Transport sending health check") err := cc.Ping(ctx) if err != nil { + cc.vlogf("http2: Transport health check failure: %v", err) cc.closeForLostPing() - return + } else { + cc.vlogf("http2: Transport health check success") } } @@ -1765,7 +1769,8 @@ func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trail } for _, v := range vv { if !httpguts.ValidHeaderFieldValue(v) { - return nil, fmt.Errorf("invalid HTTP header value %q for header %q", v, k) + // Don't include the value in the error, because it may be sensitive. + return nil, fmt.Errorf("invalid HTTP header value for header %q", k) } } } @@ -2898,7 +2903,12 @@ func (t *Transport) logf(format string, args ...interface{}) { log.Printf(format, args...) } -var noBody io.ReadCloser = ioutil.NopCloser(bytes.NewReader(nil)) +var noBody io.ReadCloser = noBodyReader{} + +type noBodyReader struct{} + +func (noBodyReader) Close() error { return nil } +func (noBodyReader) Read([]byte) (int, error) { return 0, io.EOF } type missingBody struct{} diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority.go index 2618b2c11d..0a242c669e 100644 --- a/vendor/golang.org/x/net/http2/writesched_priority.go +++ b/vendor/golang.org/x/net/http2/writesched_priority.go @@ -383,16 +383,15 @@ func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority Priorit func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) { var n *priorityNode - if id := wr.StreamID(); id == 0 { + if wr.isControl() { n = &ws.root } else { + id := wr.StreamID() n = ws.nodes[id] if n == nil { // id is an idle or closed stream. wr should not be a HEADERS or - // DATA frame. However, wr can be a RST_STREAM. In this case, we - // push wr onto the root, rather than creating a new priorityNode, - // since RST_STREAM is tiny and the stream's priority is unknown - // anyway. See issue #17919. + // DATA frame. In other case, we push wr onto the root, rather + // than creating a new priorityNode. if wr.DataSize() > 0 { panic("add DATA on non-open stream") } diff --git a/vendor/golang.org/x/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go index 7a8cf889b5..9c070a44b3 100644 --- a/vendor/golang.org/x/net/idna/trieval.go +++ b/vendor/golang.org/x/net/idna/trieval.go @@ -17,23 +17,23 @@ package idna // // The per-rune values have the following format: // -// if mapped { -// if inlinedXOR { -// 15..13 inline XOR marker -// 12..11 unused -// 10..3 inline XOR mask -// } else { -// 15..3 index into xor or mapping table -// } -// } else { -// 15..14 unused -// 13 mayNeedNorm -// 12..11 attributes -// 10..8 joining type -// 7..3 category type -// } -// 2 use xor pattern -// 1..0 mapped category +// if mapped { +// if inlinedXOR { +// 15..13 inline XOR marker +// 12..11 unused +// 10..3 inline XOR mask +// } else { +// 15..3 index into xor or mapping table +// } +// } else { +// 15..14 unused +// 13 mayNeedNorm +// 12..11 attributes +// 10..8 joining type +// 7..3 category type +// } +// 2 use xor pattern +// 1..0 mapped category // // See the definitions below for a more detailed description of the various // bits. diff --git a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go index 59b71da571..4c19269bee 100644 --- a/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go +++ b/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc.go @@ -4,32 +4,32 @@ package socket type iovec struct { - Base *byte - Len uint32 + Base *byte + Len uint32 } type msghdr struct { - Name *byte - Namelen uint32 - Iov *iovec - Iovlen uint32 - Control *byte - Controllen uint32 - Flags int32 + Name *byte + Namelen uint32 + Iov *iovec + Iovlen uint32 + Control *byte + Controllen uint32 + Flags int32 } type mmsghdr struct { - Hdr msghdr - Len uint32 + Hdr msghdr + Len uint32 } type cmsghdr struct { - Len uint32 - Level int32 - Type int32 + Len uint32 + Level int32 + Type int32 } const ( - sizeofIovec = 0x8 - sizeofMsghdr = 0x1c + sizeofIovec = 0x8 + sizeofMsghdr = 0x1c ) diff --git a/vendor/golang.org/x/net/ipv4/doc.go b/vendor/golang.org/x/net/ipv4/doc.go index 2458349799..6fbdc52b96 100644 --- a/vendor/golang.org/x/net/ipv4/doc.go +++ b/vendor/golang.org/x/net/ipv4/doc.go @@ -16,8 +16,7 @@ // 3376. // Source-specific multicast is defined in RFC 4607. // -// -// Unicasting +// # Unicasting // // The options for unicasting are available for net.TCPConn, // net.UDPConn and net.IPConn which are created as network connections @@ -51,8 +50,7 @@ // }(c) // } // -// -// Multicasting +// # Multicasting // // The options for multicasting are available for net.UDPConn and // net.IPConn which are created as network connections that use the @@ -141,8 +139,7 @@ // } // } // -// -// More multicasting +// # More multicasting // // An application that uses PacketConn or RawConn may join multiple // multicast groups. For example, a UDP listener with port 1024 might @@ -200,8 +197,7 @@ // // error handling // } // -// -// Source-specific multicasting +// # Source-specific multicasting // // An application that uses PacketConn or RawConn on IGMPv3 supported // platform is able to join source-specific multicast groups. diff --git a/vendor/golang.org/x/net/ipv6/doc.go b/vendor/golang.org/x/net/ipv6/doc.go index e0be9d50d7..2148b814ff 100644 --- a/vendor/golang.org/x/net/ipv6/doc.go +++ b/vendor/golang.org/x/net/ipv6/doc.go @@ -17,8 +17,7 @@ // On Darwin, this package requires OS X Mavericks version 10.9 or // above, or equivalent. // -// -// Unicasting +// # Unicasting // // The options for unicasting are available for net.TCPConn, // net.UDPConn and net.IPConn which are created as network connections @@ -52,8 +51,7 @@ // }(c) // } // -// -// Multicasting +// # Multicasting // // The options for multicasting are available for net.UDPConn and // net.IPConn which are created as network connections that use the @@ -140,8 +138,7 @@ // } // } // -// -// More multicasting +// # More multicasting // // An application that uses PacketConn may join multiple multicast // groups. For example, a UDP listener with port 1024 might join two @@ -199,8 +196,7 @@ // // error handling // } // -// -// Source-specific multicasting +// # Source-specific multicasting // // An application that uses PacketConn on MLDv2 supported platform is // able to join source-specific multicast groups. diff --git a/vendor/golang.org/x/oauth2/go.mod b/vendor/golang.org/x/oauth2/go.mod deleted file mode 100644 index 468b626791..0000000000 --- a/vendor/golang.org/x/oauth2/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module golang.org/x/oauth2 - -go 1.11 - -require ( - cloud.google.com/go v0.65.0 - golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd - google.golang.org/appengine v1.6.6 -) diff --git a/vendor/golang.org/x/oauth2/go.sum b/vendor/golang.org/x/oauth2/go.sum deleted file mode 100644 index bdceef99ea..0000000000 --- a/vendor/golang.org/x/oauth2/go.sum +++ /dev/null @@ -1,366 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0 h1:Dg9iHVQfrhq82rUNu9ZxUDrJLaxFUe/HlCVaLyRruq8= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd h1:O7DYs+zxREGLKzKoMQrtrEacpb0ZVXA5rIwylE2Xchk= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/vendor/golang.org/x/oauth2/google/default.go b/vendor/golang.org/x/oauth2/google/default.go index 880dd7b59f..dd0042016f 100644 --- a/vendor/golang.org/x/oauth2/google/default.go +++ b/vendor/golang.org/x/oauth2/google/default.go @@ -94,20 +94,20 @@ func DefaultTokenSource(ctx context.Context, scope ...string) (oauth2.TokenSourc // It looks for credentials in the following places, // preferring the first location found: // -// 1. A JSON file whose path is specified by the -// GOOGLE_APPLICATION_CREDENTIALS environment variable. -// For workload identity federation, refer to -// https://cloud.google.com/iam/docs/how-to#using-workload-identity-federation on -// how to generate the JSON configuration file for on-prem/non-Google cloud -// platforms. -// 2. A JSON file in a location known to the gcloud command-line tool. -// On Windows, this is %APPDATA%/gcloud/application_default_credentials.json. -// On other systems, $HOME/.config/gcloud/application_default_credentials.json. -// 3. On Google App Engine standard first generation runtimes (<= Go 1.9) it uses -// the appengine.AccessToken function. -// 4. On Google Compute Engine, Google App Engine standard second generation runtimes -// (>= Go 1.11), and Google App Engine flexible environment, it fetches -// credentials from the metadata server. +// 1. A JSON file whose path is specified by the +// GOOGLE_APPLICATION_CREDENTIALS environment variable. +// For workload identity federation, refer to +// https://cloud.google.com/iam/docs/how-to#using-workload-identity-federation on +// how to generate the JSON configuration file for on-prem/non-Google cloud +// platforms. +// 2. A JSON file in a location known to the gcloud command-line tool. +// On Windows, this is %APPDATA%/gcloud/application_default_credentials.json. +// On other systems, $HOME/.config/gcloud/application_default_credentials.json. +// 3. On Google App Engine standard first generation runtimes (<= Go 1.9) it uses +// the appengine.AccessToken function. +// 4. On Google Compute Engine, Google App Engine standard second generation runtimes +// (>= Go 1.11), and Google App Engine flexible environment, it fetches +// credentials from the metadata server. func FindDefaultCredentialsWithParams(ctx context.Context, params CredentialsParams) (*Credentials, error) { // Make defensive copy of the slices in params. params = params.deepCopy() diff --git a/vendor/golang.org/x/oauth2/google/doc.go b/vendor/golang.org/x/oauth2/google/doc.go index 8e6a57ce96..dddf651445 100644 --- a/vendor/golang.org/x/oauth2/google/doc.go +++ b/vendor/golang.org/x/oauth2/google/doc.go @@ -15,14 +15,14 @@ // For more information on using workload identity federation, refer to // https://cloud.google.com/iam/docs/how-to#using-workload-identity-federation. // -// OAuth2 Configs +// # OAuth2 Configs // // Two functions in this package return golang.org/x/oauth2.Config values from Google credential // data. Google supports two JSON formats for OAuth2 credentials: one is handled by ConfigFromJSON, // the other by JWTConfigFromJSON. The returned Config can be used to obtain a TokenSource or // create an http.Client. // -// Workload Identity Federation +// # Workload Identity Federation // // Using workload identity federation, your application can access Google Cloud // resources from Amazon Web Services (AWS), Microsoft Azure or any identity @@ -36,9 +36,9 @@ // Follow the detailed instructions on how to configure Workload Identity Federation // in various platforms: // -// Amazon Web Services (AWS): https://cloud.google.com/iam/docs/access-resources-aws -// Microsoft Azure: https://cloud.google.com/iam/docs/access-resources-azure -// OIDC identity provider: https://cloud.google.com/iam/docs/access-resources-oidc +// Amazon Web Services (AWS): https://cloud.google.com/iam/docs/access-resources-aws +// Microsoft Azure: https://cloud.google.com/iam/docs/access-resources-azure +// OIDC identity provider: https://cloud.google.com/iam/docs/access-resources-oidc // // For OIDC providers, the library can retrieve OIDC tokens either from a // local file location (file-sourced credentials) or from a local server @@ -51,8 +51,7 @@ // return the OIDC token. The response can be in plain text or JSON. // Additional required request headers can also be specified. // -// -// Credentials +// # Credentials // // The Credentials type represents Google credentials, including Application Default // Credentials. diff --git a/vendor/golang.org/x/oauth2/google/google.go b/vendor/golang.org/x/oauth2/google/google.go index ccc23ee0ae..ceddd5dde5 100644 --- a/vendor/golang.org/x/oauth2/google/google.go +++ b/vendor/golang.org/x/oauth2/google/google.go @@ -139,6 +139,7 @@ func (f *credentialsFile) jwtConfig(scopes []string, subject string) *jwt.Config Scopes: scopes, TokenURL: f.TokenURL, Subject: subject, // This is the user email to impersonate + Audience: f.Audience, } if cfg.TokenURL == "" { cfg.TokenURL = JWTTokenURL diff --git a/vendor/golang.org/x/sync/errgroup/errgroup.go b/vendor/golang.org/x/sync/errgroup/errgroup.go index 9857fe53d3..1eab2fdf93 100644 --- a/vendor/golang.org/x/sync/errgroup/errgroup.go +++ b/vendor/golang.org/x/sync/errgroup/errgroup.go @@ -8,9 +8,12 @@ package errgroup import ( "context" + "fmt" "sync" ) +type token struct{} + // A Group is a collection of goroutines working on subtasks that are part of // the same overall task. // @@ -20,10 +23,19 @@ type Group struct { wg sync.WaitGroup + sem chan token + errOnce sync.Once err error } +func (g *Group) done() { + if g.sem != nil { + <-g.sem + } + g.wg.Done() +} + // WithContext returns a new Group and an associated Context derived from ctx. // // The derived Context is canceled the first time a function passed to Go @@ -45,14 +57,48 @@ func (g *Group) Wait() error { } // Go calls the given function in a new goroutine. +// It blocks until the new goroutine can be added without the number of +// active goroutines in the group exceeding the configured limit. // // The first call to return a non-nil error cancels the group; its error will be // returned by Wait. func (g *Group) Go(f func() error) { + if g.sem != nil { + g.sem <- token{} + } + g.wg.Add(1) + go func() { + defer g.done() + + if err := f(); err != nil { + g.errOnce.Do(func() { + g.err = err + if g.cancel != nil { + g.cancel() + } + }) + } + }() +} + +// TryGo calls the given function in a new goroutine only if the number of +// active goroutines in the group is currently below the configured limit. +// +// The return value reports whether the goroutine was started. +func (g *Group) TryGo(f func() error) bool { + if g.sem != nil { + select { + case g.sem <- token{}: + // Note: this allows barging iff channels in general allow barging. + default: + return false + } + } + g.wg.Add(1) go func() { - defer g.wg.Done() + defer g.done() if err := f(); err != nil { g.errOnce.Do(func() { @@ -63,4 +109,23 @@ func (g *Group) Go(f func() error) { }) } }() + return true +} + +// SetLimit limits the number of active goroutines in this group to at most n. +// A negative value indicates no limit. +// +// Any subsequent call to the Go method will block until it can add an active +// goroutine without exceeding the configured limit. +// +// The limit must not be modified while any goroutines in the group are active. +func (g *Group) SetLimit(n int) { + if n < 0 { + g.sem = nil + return + } + if len(g.sem) != 0 { + panic(fmt.Errorf("errgroup: modify limit while %v goroutines in the group are still active", len(g.sem))) + } + g.sem = make(chan token, n) } diff --git a/vendor/golang.org/x/sys/cpu/byteorder.go b/vendor/golang.org/x/sys/cpu/byteorder.go index dcbb14ef35..271055be0b 100644 --- a/vendor/golang.org/x/sys/cpu/byteorder.go +++ b/vendor/golang.org/x/sys/cpu/byteorder.go @@ -46,6 +46,7 @@ func hostByteOrder() byteOrder { case "386", "amd64", "amd64p32", "alpha", "arm", "arm64", + "loong64", "mipsle", "mips64le", "mips64p32le", "nios2", "ppc64le", diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index b56886f261..83f112c4c8 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -106,8 +106,8 @@ var ARM64 struct { // ARM contains the supported CPU features of the current ARM (32-bit) platform. // All feature flags are false if: -// 1. the current platform is not arm, or -// 2. the current operating system is not Linux. +// 1. the current platform is not arm, or +// 2. the current operating system is not Linux. var ARM struct { _ CacheLinePad HasSWP bool // SWP instruction support diff --git a/vendor/golang.org/x/sys/cpu/cpu_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_loong64.go new file mode 100644 index 0000000000..0f57b05bdb --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_loong64.go @@ -0,0 +1,13 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 +// +build loong64 + +package cpu + +const cacheLineSize = 64 + +func initOptions() { +} diff --git a/vendor/golang.org/x/sys/execabs/execabs.go b/vendor/golang.org/x/sys/execabs/execabs.go index 78192498db..b981cfbb4a 100644 --- a/vendor/golang.org/x/sys/execabs/execabs.go +++ b/vendor/golang.org/x/sys/execabs/execabs.go @@ -53,7 +53,7 @@ func relError(file, path string) error { // LookPath instead returns an error. func LookPath(file string) (string, error) { path, err := exec.LookPath(file) - if err != nil { + if err != nil && !isGo119ErrDot(err) { return "", err } if filepath.Base(file) == file && !filepath.IsAbs(path) { diff --git a/vendor/golang.org/x/sys/execabs/execabs_go118.go b/vendor/golang.org/x/sys/execabs/execabs_go118.go new file mode 100644 index 0000000000..6ab5f50894 --- /dev/null +++ b/vendor/golang.org/x/sys/execabs/execabs_go118.go @@ -0,0 +1,12 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.19 +// +build !go1.19 + +package execabs + +func isGo119ErrDot(err error) bool { + return false +} diff --git a/vendor/golang.org/x/sys/execabs/execabs_go119.go b/vendor/golang.org/x/sys/execabs/execabs_go119.go new file mode 100644 index 0000000000..1e7a9ada0b --- /dev/null +++ b/vendor/golang.org/x/sys/execabs/execabs_go119.go @@ -0,0 +1,15 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.19 +// +build go1.19 + +package execabs + +import "strings" + +func isGo119ErrDot(err error) bool { + // TODO: return errors.Is(err, exec.ErrDot) + return strings.Contains(err.Error(), "current directory") +} diff --git a/vendor/golang.org/x/sys/unix/asm_linux_loong64.s b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s new file mode 100644 index 0000000000..6abd48eef0 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/asm_linux_loong64.s @@ -0,0 +1,54 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && loong64 && gc +// +build linux +// +build loong64 +// +build gc + +#include "textflag.h" + + +// Just jump to package syscall's implementation for all these functions. +// The runtime may know about them. + +TEXT ·Syscall(SB),NOSPLIT,$0-56 + JMP syscall·Syscall(SB) + +TEXT ·Syscall6(SB),NOSPLIT,$0-80 + JMP syscall·Syscall6(SB) + +TEXT ·SyscallNoError(SB),NOSPLIT,$0-48 + JAL runtime·entersyscall(SB) + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R11 // syscall entry + SYSCALL + MOVV R4, r1+32(FP) + MOVV R5, r2+40(FP) + JAL runtime·exitsyscall(SB) + RET + +TEXT ·RawSyscall(SB),NOSPLIT,$0-56 + JMP syscall·RawSyscall(SB) + +TEXT ·RawSyscall6(SB),NOSPLIT,$0-80 + JMP syscall·RawSyscall6(SB) + +TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48 + MOVV a1+8(FP), R4 + MOVV a2+16(FP), R5 + MOVV a3+24(FP), R6 + MOVV R0, R7 + MOVV R0, R8 + MOVV R0, R9 + MOVV trap+0(FP), R11 // syscall entry + SYSCALL + MOVV R4, r1+32(FP) + MOVV R5, r2+40(FP) + RET diff --git a/vendor/golang.org/x/sys/unix/endian_little.go b/vendor/golang.org/x/sys/unix/endian_little.go index 4362f47e2c..b0f2bc4ae3 100644 --- a/vendor/golang.org/x/sys/unix/endian_little.go +++ b/vendor/golang.org/x/sys/unix/endian_little.go @@ -2,8 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. // -//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh -// +build 386 amd64 amd64p32 alpha arm arm64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh +//go:build 386 || amd64 || amd64p32 || alpha || arm || arm64 || loong64 || mipsle || mips64le || mips64p32le || nios2 || ppc64le || riscv || riscv64 || sh +// +build 386 amd64 amd64p32 alpha arm arm64 loong64 mipsle mips64le mips64p32le nios2 ppc64le riscv riscv64 sh package unix diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go index 934af313c3..15721a5104 100644 --- a/vendor/golang.org/x/sys/unix/ifreq_linux.go +++ b/vendor/golang.org/x/sys/unix/ifreq_linux.go @@ -8,7 +8,6 @@ package unix import ( - "bytes" "unsafe" ) @@ -45,13 +44,7 @@ func NewIfreq(name string) (*Ifreq, error) { // Name returns the interface name associated with the Ifreq. func (ifr *Ifreq) Name() string { - // BytePtrToString requires a NULL terminator or the program may crash. If - // one is not present, just return the empty string. - if !bytes.Contains(ifr.raw.Ifrn[:], []byte{0x00}) { - return "" - } - - return BytePtrToString(&ifr.raw.Ifrn[0]) + return ByteSliceToString(ifr.raw.Ifrn[:]) } // According to netdevice(7), only AF_INET addresses are returned for numerous diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 72f65a9af1..d888fb7703 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -215,6 +215,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -613,6 +614,7 @@ ccflags="$@" $2 ~ /^OTP/ || $2 ~ /^MEM/ || $2 ~ /^WG/ || + $2 ~ /^FIB_RULE_/ || $2 ~ /^BLK[A-Z]*(GET$|SET$|BUF$|PART$|SIZE)/ {printf("\t%s = C.%s\n", $2, $2)} $2 ~ /^__WCOREFLAG$/ {next} $2 ~ /^__W[A-Z0-9]+$/ {printf("\t%s = C.%s\n", substr($2,3), $2)} diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index f2a114fc27..ad22c33db3 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -37,6 +37,7 @@ func Creat(path string, mode uint32) (fd int, err error) { } //sys utimes(path string, times *[2]Timeval) (err error) + func Utimes(path string, tv []Timeval) error { if len(tv) != 2 { return EINVAL @@ -45,6 +46,7 @@ func Utimes(path string, tv []Timeval) error { } //sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) + func UtimesNano(path string, ts []Timespec) error { if len(ts) != 2 { return EINVAL @@ -300,11 +302,13 @@ func direntNamlen(buf []byte) (uint64, bool) { } //sys getdirent(fd int, buf []byte) (n int, err error) + func Getdents(fd int, buf []byte) (n int, err error) { return getdirent(fd, buf) } //sys wait4(pid Pid_t, status *_C_int, options int, rusage *Rusage) (wpid Pid_t, err error) + func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, err error) { var status _C_int var r Pid_t @@ -372,6 +376,7 @@ func (w WaitStatus) TrapCause() int { return -1 } //sys fcntl(fd int, cmd int, arg int) (val int, err error) //sys fsyncRange(fd int, how int, start int64, length int64) (err error) = fsync_range + func Fsync(fd int) error { return fsyncRange(fd, O_SYNC, 0, 0) } @@ -536,6 +541,7 @@ func Poll(fds []PollFd, timeout int) (n int, err error) { //sys Getsystemcfg(label int) (n uint64) //sys umount(target string) (err error) + func Unmount(target string, flags int) (err error) { if flags != 0 { // AIX doesn't have any flags for umount. diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 09a25c6532..e5448cc93c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -504,6 +504,7 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mkfifo(path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) +//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) //sys Pathconf(path string, name int) (val int, err error) @@ -572,7 +573,6 @@ func SysctlKinfoProcSlice(name string, args ...int) ([]KinfoProc, error) { // Nfssvc // Getfh // Quotactl -// Mount // Csops // Waitid // Add_profil diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index c61e274980..61c0d0de15 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -125,11 +125,13 @@ func Pipe2(p []int, flags int) (err error) { } //sys extpread(fd int, p []byte, flags int, offset int64) (n int, err error) + func pread(fd int, p []byte, offset int64) (n int, err error) { return extpread(fd, p, 0, offset) } //sys extpwrite(fd int, p []byte, flags int, offset int64) (n int, err error) + func pwrite(fd int, p []byte, offset int64) (n int, err error) { return extpwrite(fd, p, 0, offset) } diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index bda98498b1..c8d2032125 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -512,24 +512,24 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { // // Server example: // -// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) -// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{ -// Channel: 1, -// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00 -// }) -// _ = Listen(fd, 1) -// nfd, sa, _ := Accept(fd) -// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd) -// Read(nfd, buf) +// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) +// _ = unix.Bind(fd, &unix.SockaddrRFCOMM{ +// Channel: 1, +// Addr: [6]uint8{0, 0, 0, 0, 0, 0}, // BDADDR_ANY or 00:00:00:00:00:00 +// }) +// _ = Listen(fd, 1) +// nfd, sa, _ := Accept(fd) +// fmt.Printf("conn addr=%v fd=%d", sa.(*unix.SockaddrRFCOMM).Addr, nfd) +// Read(nfd, buf) // // Client example: // -// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) -// _ = Connect(fd, &SockaddrRFCOMM{ -// Channel: 1, -// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11 -// }) -// Write(fd, []byte(`hello`)) +// fd, _ := Socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM) +// _ = Connect(fd, &SockaddrRFCOMM{ +// Channel: 1, +// Addr: [6]byte{0x11, 0x22, 0x33, 0xaa, 0xbb, 0xcc}, // CC:BB:AA:33:22:11 +// }) +// Write(fd, []byte(`hello`)) type SockaddrRFCOMM struct { // Addr represents a bluetooth address, byte ordering is little-endian. Addr [6]uint8 @@ -556,12 +556,12 @@ func (sa *SockaddrRFCOMM) sockaddr() (unsafe.Pointer, _Socklen, error) { // The SockaddrCAN struct must be bound to the socket file descriptor // using Bind before the CAN socket can be used. // -// // Read one raw CAN frame -// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) -// addr := &SockaddrCAN{Ifindex: index} -// Bind(fd, addr) -// frame := make([]byte, 16) -// Read(fd, frame) +// // Read one raw CAN frame +// fd, _ := Socket(AF_CAN, SOCK_RAW, CAN_RAW) +// addr := &SockaddrCAN{Ifindex: index} +// Bind(fd, addr) +// frame := make([]byte, 16) +// Read(fd, frame) // // The full SocketCAN documentation can be found in the linux kernel // archives at: https://www.kernel.org/doc/Documentation/networking/can.txt @@ -632,13 +632,13 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { // Here is an example of using an AF_ALG socket with SHA1 hashing. // The initial socket setup process is as follows: // -// // Open a socket to perform SHA1 hashing. -// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) -// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} -// unix.Bind(fd, addr) -// // Note: unix.Accept does not work at this time; must invoke accept() -// // manually using unix.Syscall. -// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) +// // Open a socket to perform SHA1 hashing. +// fd, _ := unix.Socket(unix.AF_ALG, unix.SOCK_SEQPACKET, 0) +// addr := &unix.SockaddrALG{Type: "hash", Name: "sha1"} +// unix.Bind(fd, addr) +// // Note: unix.Accept does not work at this time; must invoke accept() +// // manually using unix.Syscall. +// hashfd, _, _ := unix.Syscall(unix.SYS_ACCEPT, uintptr(fd), 0, 0) // // Once a file descriptor has been returned from Accept, it may be used to // perform SHA1 hashing. The descriptor is not safe for concurrent use, but @@ -647,39 +647,39 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { // When hashing a small byte slice or string, a single Write and Read may // be used: // -// // Assume hashfd is already configured using the setup process. -// hash := os.NewFile(hashfd, "sha1") -// // Hash an input string and read the results. Each Write discards -// // previous hash state. Read always reads the current state. -// b := make([]byte, 20) -// for i := 0; i < 2; i++ { -// io.WriteString(hash, "Hello, world.") -// hash.Read(b) -// fmt.Println(hex.EncodeToString(b)) -// } -// // Output: -// // 2ae01472317d1935a84797ec1983ae243fc6aa28 -// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// // Assume hashfd is already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash an input string and read the results. Each Write discards +// // previous hash state. Read always reads the current state. +// b := make([]byte, 20) +// for i := 0; i < 2; i++ { +// io.WriteString(hash, "Hello, world.") +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// } +// // Output: +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 +// // 2ae01472317d1935a84797ec1983ae243fc6aa28 // // For hashing larger byte slices, or byte streams such as those read from // a file or socket, use Sendto with MSG_MORE to instruct the kernel to update // the hash digest instead of creating a new one for a given chunk and finalizing it. // -// // Assume hashfd and addr are already configured using the setup process. -// hash := os.NewFile(hashfd, "sha1") -// // Hash the contents of a file. -// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") -// b := make([]byte, 4096) -// for { -// n, err := f.Read(b) -// if err == io.EOF { -// break -// } -// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) -// } -// hash.Read(b) -// fmt.Println(hex.EncodeToString(b)) -// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 +// // Assume hashfd and addr are already configured using the setup process. +// hash := os.NewFile(hashfd, "sha1") +// // Hash the contents of a file. +// f, _ := os.Open("/tmp/linux-4.10-rc7.tar.xz") +// b := make([]byte, 4096) +// for { +// n, err := f.Read(b) +// if err == io.EOF { +// break +// } +// unix.Sendto(hashfd, b[:n], unix.MSG_MORE, addr) +// } +// hash.Read(b) +// fmt.Println(hex.EncodeToString(b)) +// // Output: 85cdcad0c06eef66f805ecce353bec9accbeecc5 // // For more information, see: http://www.chronox.de/crypto-API/crypto/userspace-if.html. type SockaddrALG struct { @@ -1829,6 +1829,9 @@ func Dup2(oldfd, newfd int) error { //sys Fremovexattr(fd int, attr string) (err error) //sys Fsetxattr(fd int, attr string, dest []byte, flags int) (err error) //sys Fsync(fd int) (err error) +//sys Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) +//sys Fsopen(fsName string, flags int) (fd int, err error) +//sys Fspick(dirfd int, pathName string, flags int) (fd int, err error) //sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64 //sysnb Getpgid(pid int) (pgid int, err error) @@ -1859,7 +1862,9 @@ func Getpgrp() (pid int) { //sys MemfdCreate(name string, flags int) (fd int, err error) //sys Mkdirat(dirfd int, path string, mode uint32) (err error) //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) +//sys OpenTree(dfd int, fileName string, flags uint) (r int, err error) //sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) //sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT //sysnb Prlimit(pid int, resource int, newlimit *Rlimit, old *Rlimit) (err error) = SYS_PRLIMIT64 @@ -2184,7 +2189,7 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { gid = Getgid() } - if uint32(gid) == st.Gid || isGroupMember(gid) { + if uint32(gid) == st.Gid || isGroupMember(int(st.Gid)) { fmode = (st.Mode >> 3) & 7 } else { fmode = st.Mode & 7 diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go index b945ab254d..f5e9d6bef1 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_amd64.go @@ -28,6 +28,7 @@ func Lstat(path string, stat *Stat_t) (err error) { return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) } +//sys MemfdSecret(flags int) (fd int, err error) //sys Pause() (err error) //sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 //sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index 81db4833a5..d83e2c6571 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -22,6 +22,7 @@ import "unsafe" //sysnb getrlimit(resource int, rlim *Rlimit) (err error) //sysnb Getuid() (uid int) //sys Listen(s int, n int) (err error) +//sys MemfdSecret(flags int) (fd int, err error) //sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 //sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 //sys Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go new file mode 100644 index 0000000000..28ba7b8cb7 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -0,0 +1,191 @@ +// Copyright 2022 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build loong64 && linux +// +build loong64,linux + +package unix + +import "unsafe" + +//sys EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) = SYS_EPOLL_PWAIT +//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64 +//sys Fchown(fd int, uid int, gid int) (err error) +//sys Fstat(fd int, stat *Stat_t) (err error) +//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) +//sys Fstatfs(fd int, buf *Statfs_t) (err error) +//sys Ftruncate(fd int, length int64) (err error) +//sysnb Getegid() (egid int) +//sysnb Geteuid() (euid int) +//sysnb Getgid() (gid int) +//sysnb Getuid() (uid int) +//sys Listen(s int, n int) (err error) +//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64 +//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64 +//sys Seek(fd int, offset int64, whence int) (off int64, err error) = SYS_LSEEK + +func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { + var ts *Timespec + if timeout != nil { + ts = &Timespec{Sec: timeout.Sec, Nsec: timeout.Usec * 1000} + } + return Pselect(nfd, r, w, e, ts, nil) +} + +//sys sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) +//sys setfsgid(gid int) (prev int, err error) +//sys setfsuid(uid int) (prev int, err error) +//sysnb Setregid(rgid int, egid int) (err error) +//sysnb Setresgid(rgid int, egid int, sgid int) (err error) +//sysnb Setresuid(ruid int, euid int, suid int) (err error) +//sysnb Setreuid(ruid int, euid int) (err error) +//sys Shutdown(fd int, how int) (err error) +//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) + +func Stat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, 0) +} + +func Lchown(path string, uid int, gid int) (err error) { + return Fchownat(AT_FDCWD, path, uid, gid, AT_SYMLINK_NOFOLLOW) +} + +func Lstat(path string, stat *Stat_t) (err error) { + return Fstatat(AT_FDCWD, path, stat, AT_SYMLINK_NOFOLLOW) +} + +//sys Statfs(path string, buf *Statfs_t) (err error) +//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error) +//sys Truncate(path string, length int64) (err error) + +func Ustat(dev int, ubuf *Ustat_t) (err error) { + return ENOSYS +} + +//sys accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) +//sys bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sys connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) +//sysnb getgroups(n int, list *_Gid_t) (nn int, err error) +//sysnb setgroups(n int, list *_Gid_t) (err error) +//sys getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) +//sys setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) +//sysnb socket(domain int, typ int, proto int) (fd int, err error) +//sysnb socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) +//sysnb getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sysnb getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) +//sys recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) +//sys sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) +//sys recvmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys sendmsg(s int, msg *Msghdr, flags int) (n int, err error) +//sys mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) + +//sysnb Gettimeofday(tv *Timeval) (err error) + +func setTimespec(sec, nsec int64) Timespec { + return Timespec{Sec: sec, Nsec: nsec} +} + +func setTimeval(sec, usec int64) Timeval { + return Timeval{Sec: sec, Usec: usec} +} + +func Getrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, nil, rlim) + return +} + +func Setrlimit(resource int, rlim *Rlimit) (err error) { + err = Prlimit(0, resource, rlim, nil) + return +} + +func futimesat(dirfd int, path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(dirfd, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(dirfd, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func Time(t *Time_t) (Time_t, error) { + var tv Timeval + err := Gettimeofday(&tv) + if err != nil { + return 0, err + } + if t != nil { + *t = Time_t(tv.Sec) + } + return Time_t(tv.Sec), nil +} + +func Utime(path string, buf *Utimbuf) error { + tv := []Timeval{ + {Sec: buf.Actime}, + {Sec: buf.Modtime}, + } + return Utimes(path, tv) +} + +func utimes(path string, tv *[2]Timeval) (err error) { + if tv == nil { + return utimensat(AT_FDCWD, path, nil, 0) + } + + ts := []Timespec{ + NsecToTimespec(TimevalToNsec(tv[0])), + NsecToTimespec(TimevalToNsec(tv[1])), + } + return utimensat(AT_FDCWD, path, (*[2]Timespec)(unsafe.Pointer(&ts[0])), 0) +} + +func (r *PtraceRegs) PC() uint64 { return r.Era } + +func (r *PtraceRegs) SetPC(era uint64) { r.Era = era } + +func (iov *Iovec) SetLen(length int) { + iov.Len = uint64(length) +} + +func (msghdr *Msghdr) SetControllen(length int) { + msghdr.Controllen = uint64(length) +} + +func (msghdr *Msghdr) SetIovlen(length int) { + msghdr.Iovlen = uint64(length) +} + +func (cmsg *Cmsghdr) SetLen(length int) { + cmsg.Len = uint64(length) +} + +func (rsa *RawSockaddrNFCLLCP) SetServiceNameLen(length int) { + rsa.Service_name_len = uint64(length) +} + +func Pause() error { + _, err := ppoll(nil, 0, nil, nil) + return err +} + +func Renameat(olddirfd int, oldpath string, newdirfd int, newpath string) (err error) { + return Renameat2(olddirfd, oldpath, newdirfd, newpath, 0) +} + +//sys kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) + +func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error { + cmdlineLen := len(cmdline) + if cmdlineLen > 0 { + // Account for the additional NULL byte added by + // BytePtrFromString in kexecFileLoad. The kexec_file_load + // syscall expects a NULL-terminated string. + cmdlineLen++ + } + return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index 15d637d63e..78daceb338 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -81,6 +81,7 @@ func Pipe(p []int) (err error) { } //sysnb pipe2(p *[2]_C_int, flags int) (err error) + func Pipe2(p []int, flags int) error { if len(p) != 2 { return EINVAL @@ -95,6 +96,7 @@ func Pipe2(p []int, flags int) error { } //sys Getdents(fd int, buf []byte) (n int, err error) + func Getdirentries(fd int, buf []byte, basep *uintptr) (n int, err error) { n, err = Getdents(fd, buf) if err != nil || basep == nil { diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 36a89c643d..c0a43f8ba6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -393,9 +393,11 @@ const ( CAP_SYS_TIME = 0x19 CAP_SYS_TTY_CONFIG = 0x1a CAP_WAKE_ALARM = 0x23 + CEPH_SUPER_MAGIC = 0xc36400 CFLUSH = 0xf CGROUP2_SUPER_MAGIC = 0x63677270 CGROUP_SUPER_MAGIC = 0x27e0eb + CIFS_SUPER_MAGIC = 0xff534d42 CLOCK_BOOTTIME = 0x7 CLOCK_BOOTTIME_ALARM = 0x9 CLOCK_DEFAULT = 0x0 @@ -784,6 +786,7 @@ const ( EV_SYN = 0x0 EV_VERSION = 0x10001 EXABYTE_ENABLE_NEST = 0xf0 + EXFAT_SUPER_MAGIC = 0x2011bab0 EXT2_SUPER_MAGIC = 0xef53 EXT3_SUPER_MAGIC = 0xef53 EXT4_SUPER_MAGIC = 0xef53 @@ -826,6 +829,8 @@ const ( FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 FAN_EVENT_INFO_TYPE_ERROR = 0x5 FAN_EVENT_INFO_TYPE_FID = 0x1 + FAN_EVENT_INFO_TYPE_NEW_DFID_NAME = 0xc + FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa FAN_EVENT_INFO_TYPE_PIDFD = 0x4 FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 @@ -854,17 +859,27 @@ const ( FAN_OPEN_EXEC_PERM = 0x40000 FAN_OPEN_PERM = 0x10000 FAN_Q_OVERFLOW = 0x4000 + FAN_RENAME = 0x10000000 FAN_REPORT_DFID_NAME = 0xc00 + FAN_REPORT_DFID_NAME_TARGET = 0x1e00 FAN_REPORT_DIR_FID = 0x400 FAN_REPORT_FID = 0x200 FAN_REPORT_NAME = 0x800 FAN_REPORT_PIDFD = 0x80 + FAN_REPORT_TARGET_FID = 0x1000 FAN_REPORT_TID = 0x100 FAN_UNLIMITED_MARKS = 0x20 FAN_UNLIMITED_QUEUE = 0x10 FD_CLOEXEC = 0x1 FD_SETSIZE = 0x400 FF0 = 0x0 + FIB_RULE_DEV_DETACHED = 0x8 + FIB_RULE_FIND_SADDR = 0x10000 + FIB_RULE_IIF_DETACHED = 0x8 + FIB_RULE_INVERT = 0x2 + FIB_RULE_OIF_DETACHED = 0x10 + FIB_RULE_PERMANENT = 0x1 + FIB_RULE_UNRESOLVED = 0x4 FIDEDUPERANGE = 0xc0189436 FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" @@ -927,6 +942,7 @@ const ( FS_VERITY_METADATA_TYPE_DESCRIPTOR = 0x2 FS_VERITY_METADATA_TYPE_MERKLE_TREE = 0x1 FS_VERITY_METADATA_TYPE_SIGNATURE = 0x3 + FUSE_SUPER_MAGIC = 0x65735546 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 F_DUPFD = 0x0 @@ -1294,6 +1310,7 @@ const ( KEXEC_ARCH_ARM = 0x280000 KEXEC_ARCH_DEFAULT = 0x0 KEXEC_ARCH_IA_64 = 0x320000 + KEXEC_ARCH_LOONGARCH = 0x1020000 KEXEC_ARCH_MASK = 0xffff0000 KEXEC_ARCH_MIPS = 0x80000 KEXEC_ARCH_MIPS_LE = 0xa0000 @@ -1495,6 +1512,7 @@ const ( MNT_DETACH = 0x2 MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 + MODULE_INIT_COMPRESSED_FILE = 0x4 MODULE_INIT_IGNORE_MODVERSIONS = 0x1 MODULE_INIT_IGNORE_VERMAGIC = 0x2 MOUNT_ATTR_IDMAP = 0x100000 @@ -1849,6 +1867,9 @@ const ( PERF_MEM_BLK_NA = 0x1 PERF_MEM_BLK_SHIFT = 0x28 PERF_MEM_HOPS_0 = 0x1 + PERF_MEM_HOPS_1 = 0x2 + PERF_MEM_HOPS_2 = 0x3 + PERF_MEM_HOPS_3 = 0x4 PERF_MEM_HOPS_SHIFT = 0x2b PERF_MEM_LOCK_LOCKED = 0x2 PERF_MEM_LOCK_NA = 0x1 @@ -2052,6 +2073,8 @@ const ( PR_SET_TIMING = 0xe PR_SET_TSC = 0x1a PR_SET_UNALIGN = 0x6 + PR_SET_VMA = 0x53564d41 + PR_SET_VMA_ANON_NAME = 0x0 PR_SPEC_DISABLE = 0x4 PR_SPEC_DISABLE_NOEXEC = 0x10 PR_SPEC_ENABLE = 0x2 @@ -2509,6 +2532,7 @@ const ( SMART_STATUS = 0xda SMART_WRITE_LOG_SECTOR = 0xd6 SMART_WRITE_THRESHOLDS = 0xd7 + SMB2_SUPER_MAGIC = 0xfe534d42 SMB_SUPER_MAGIC = 0x517b SOCKFS_MAGIC = 0x534f434b SOCK_BUF_LOCK_MASK = 0x3 @@ -2650,7 +2674,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xa + TASKSTATS_VERSION = 0xb TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index 234fd4a5d1..1b305fab1b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -5,7 +5,7 @@ // +build 386,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 58619b7589..6bcdef5dd6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -5,7 +5,7 @@ // +build amd64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 3a64ff59dc..e65df0f8d1 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -5,7 +5,7 @@ // +build arm,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index abe0b92578..c7021115aa 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -5,7 +5,7 @@ // +build arm64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go new file mode 100644 index 0000000000..0d83a1cd45 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -0,0 +1,818 @@ +// mkerrors.sh -Wall -Werror -static -I/tmp/include +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build loong64 && linux +// +build loong64,linux + +// Code generated by cmd/cgo -godefs; DO NOT EDIT. +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go + +package unix + +import "syscall" + +const ( + B1000000 = 0x1008 + B115200 = 0x1002 + B1152000 = 0x1009 + B1500000 = 0x100a + B2000000 = 0x100b + B230400 = 0x1003 + B2500000 = 0x100c + B3000000 = 0x100d + B3500000 = 0x100e + B4000000 = 0x100f + B460800 = 0x1004 + B500000 = 0x1005 + B57600 = 0x1001 + B576000 = 0x1006 + B921600 = 0x1007 + BLKBSZGET = 0x80081270 + BLKBSZSET = 0x40081271 + BLKFLSBUF = 0x1261 + BLKFRAGET = 0x1265 + BLKFRASET = 0x1264 + BLKGETSIZE = 0x1260 + BLKGETSIZE64 = 0x80081272 + BLKPBSZGET = 0x127b + BLKRAGET = 0x1263 + BLKRASET = 0x1262 + BLKROGET = 0x125e + BLKROSET = 0x125d + BLKRRPART = 0x125f + BLKSECTGET = 0x1267 + BLKSECTSET = 0x1266 + BLKSSZGET = 0x1268 + BOTHER = 0x1000 + BS1 = 0x2000 + BSDLY = 0x2000 + CBAUD = 0x100f + CBAUDEX = 0x1000 + CIBAUD = 0x100f0000 + CLOCAL = 0x800 + CR1 = 0x200 + CR2 = 0x400 + CR3 = 0x600 + CRDLY = 0x600 + CREAD = 0x80 + CS6 = 0x10 + CS7 = 0x20 + CS8 = 0x30 + CSIZE = 0x30 + CSTOPB = 0x40 + ECCGETLAYOUT = 0x81484d11 + ECCGETSTATS = 0x80104d12 + ECHOCTL = 0x200 + ECHOE = 0x10 + ECHOK = 0x20 + ECHOKE = 0x800 + ECHONL = 0x40 + ECHOPRT = 0x400 + EFD_CLOEXEC = 0x80000 + EFD_NONBLOCK = 0x800 + EPOLL_CLOEXEC = 0x80000 + EXTPROC = 0x10000 + FF1 = 0x8000 + FFDLY = 0x8000 + FICLONE = 0x40049409 + FICLONERANGE = 0x4020940d + FLUSHO = 0x1000 + FPU_CTX_MAGIC = 0x46505501 + FS_IOC_ENABLE_VERITY = 0x40806685 + FS_IOC_GETFLAGS = 0x80086601 + FS_IOC_GET_ENCRYPTION_NONCE = 0x8010661b + FS_IOC_GET_ENCRYPTION_POLICY = 0x400c6615 + FS_IOC_GET_ENCRYPTION_PWSALT = 0x40106614 + FS_IOC_SETFLAGS = 0x40086602 + FS_IOC_SET_ENCRYPTION_POLICY = 0x800c6613 + F_GETLK = 0x5 + F_GETLK64 = 0x5 + F_GETOWN = 0x9 + F_RDLCK = 0x0 + F_SETLK = 0x6 + F_SETLK64 = 0x6 + F_SETLKW = 0x7 + F_SETLKW64 = 0x7 + F_SETOWN = 0x8 + F_UNLCK = 0x2 + F_WRLCK = 0x1 + HIDIOCGRAWINFO = 0x80084803 + HIDIOCGRDESC = 0x90044802 + HIDIOCGRDESCSIZE = 0x80044801 + HUPCL = 0x400 + ICANON = 0x2 + IEXTEN = 0x8000 + IN_CLOEXEC = 0x80000 + IN_NONBLOCK = 0x800 + IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + ISIG = 0x1 + IUCLC = 0x200 + IXOFF = 0x1000 + IXON = 0x400 + LASX_CTX_MAGIC = 0x41535801 + LSX_CTX_MAGIC = 0x53580001 + MAP_ANON = 0x20 + MAP_ANONYMOUS = 0x20 + MAP_DENYWRITE = 0x800 + MAP_EXECUTABLE = 0x1000 + MAP_GROWSDOWN = 0x100 + MAP_HUGETLB = 0x40000 + MAP_LOCKED = 0x2000 + MAP_NONBLOCK = 0x10000 + MAP_NORESERVE = 0x4000 + MAP_POPULATE = 0x8000 + MAP_STACK = 0x20000 + MAP_SYNC = 0x80000 + MCL_CURRENT = 0x1 + MCL_FUTURE = 0x2 + MCL_ONFAULT = 0x4 + MEMERASE = 0x40084d02 + MEMERASE64 = 0x40104d14 + MEMGETBADBLOCK = 0x40084d0b + MEMGETINFO = 0x80204d01 + MEMGETOOBSEL = 0x80c84d0a + MEMGETREGIONCOUNT = 0x80044d07 + MEMISLOCKED = 0x80084d17 + MEMLOCK = 0x40084d05 + MEMREADOOB = 0xc0104d04 + MEMSETBADBLOCK = 0x40084d0c + MEMUNLOCK = 0x40084d06 + MEMWRITEOOB = 0xc0104d03 + MTDFILEMODE = 0x4d13 + NFDBITS = 0x40 + NLDLY = 0x100 + NOFLSH = 0x80 + NS_GET_NSTYPE = 0xb703 + NS_GET_OWNER_UID = 0xb704 + NS_GET_PARENT = 0xb702 + NS_GET_USERNS = 0xb701 + OLCUC = 0x2 + ONLCR = 0x4 + OTPERASE = 0x400c4d19 + OTPGETREGIONCOUNT = 0x40044d0e + OTPGETREGIONINFO = 0x400c4d0f + OTPLOCK = 0x800c4d10 + OTPSELECT = 0x80044d0d + O_APPEND = 0x400 + O_ASYNC = 0x2000 + O_CLOEXEC = 0x80000 + O_CREAT = 0x40 + O_DIRECT = 0x4000 + O_DIRECTORY = 0x10000 + O_DSYNC = 0x1000 + O_EXCL = 0x80 + O_FSYNC = 0x101000 + O_LARGEFILE = 0x0 + O_NDELAY = 0x800 + O_NOATIME = 0x40000 + O_NOCTTY = 0x100 + O_NOFOLLOW = 0x20000 + O_NONBLOCK = 0x800 + O_PATH = 0x200000 + O_RSYNC = 0x101000 + O_SYNC = 0x101000 + O_TMPFILE = 0x410000 + O_TRUNC = 0x200 + PARENB = 0x100 + PARODD = 0x200 + PENDIN = 0x4000 + PERF_EVENT_IOC_DISABLE = 0x2401 + PERF_EVENT_IOC_ENABLE = 0x2400 + PERF_EVENT_IOC_ID = 0x80082407 + PERF_EVENT_IOC_MODIFY_ATTRIBUTES = 0x4008240b + PERF_EVENT_IOC_PAUSE_OUTPUT = 0x40042409 + PERF_EVENT_IOC_PERIOD = 0x40082404 + PERF_EVENT_IOC_QUERY_BPF = 0xc008240a + PERF_EVENT_IOC_REFRESH = 0x2402 + PERF_EVENT_IOC_RESET = 0x2403 + PERF_EVENT_IOC_SET_BPF = 0x40042408 + PERF_EVENT_IOC_SET_FILTER = 0x40082406 + PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + PPPIOCATTACH = 0x4004743d + PPPIOCATTCHAN = 0x40047438 + PPPIOCBRIDGECHAN = 0x40047435 + PPPIOCCONNECT = 0x4004743a + PPPIOCDETACH = 0x4004743c + PPPIOCDISCONN = 0x7439 + PPPIOCGASYNCMAP = 0x80047458 + PPPIOCGCHAN = 0x80047437 + PPPIOCGDEBUG = 0x80047441 + PPPIOCGFLAGS = 0x8004745a + PPPIOCGIDLE = 0x8010743f + PPPIOCGIDLE32 = 0x8008743f + PPPIOCGIDLE64 = 0x8010743f + PPPIOCGL2TPSTATS = 0x80487436 + PPPIOCGMRU = 0x80047453 + PPPIOCGRASYNCMAP = 0x80047455 + PPPIOCGUNIT = 0x80047456 + PPPIOCGXASYNCMAP = 0x80207450 + PPPIOCSACTIVE = 0x40107446 + PPPIOCSASYNCMAP = 0x40047457 + PPPIOCSCOMPRESS = 0x4010744d + PPPIOCSDEBUG = 0x40047440 + PPPIOCSFLAGS = 0x40047459 + PPPIOCSMAXCID = 0x40047451 + PPPIOCSMRRU = 0x4004743b + PPPIOCSMRU = 0x40047452 + PPPIOCSNPMODE = 0x4008744b + PPPIOCSPASS = 0x40107447 + PPPIOCSRASYNCMAP = 0x40047454 + PPPIOCSXASYNCMAP = 0x4020744f + PPPIOCUNBRIDGECHAN = 0x7434 + PPPIOCXFERUNIT = 0x744e + PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTRACE_SYSEMU = 0x1f + PTRACE_SYSEMU_SINGLESTEP = 0x20 + RLIMIT_AS = 0x9 + RLIMIT_MEMLOCK = 0x8 + RLIMIT_NOFILE = 0x7 + RLIMIT_NPROC = 0x6 + RLIMIT_RSS = 0x5 + RNDADDENTROPY = 0x40085203 + RNDADDTOENTCNT = 0x40045201 + RNDCLEARPOOL = 0x5206 + RNDGETENTCNT = 0x80045200 + RNDGETPOOL = 0x80085202 + RNDRESEEDCRNG = 0x5207 + RNDZAPENTCNT = 0x5204 + RTC_AIE_OFF = 0x7002 + RTC_AIE_ON = 0x7001 + RTC_ALM_READ = 0x80247008 + RTC_ALM_SET = 0x40247007 + RTC_EPOCH_READ = 0x8008700d + RTC_EPOCH_SET = 0x4008700e + RTC_IRQP_READ = 0x8008700b + RTC_IRQP_SET = 0x4008700c + RTC_PARAM_GET = 0x40187013 + RTC_PARAM_SET = 0x40187014 + RTC_PIE_OFF = 0x7006 + RTC_PIE_ON = 0x7005 + RTC_PLL_GET = 0x80207011 + RTC_PLL_SET = 0x40207012 + RTC_RD_TIME = 0x80247009 + RTC_SET_TIME = 0x4024700a + RTC_UIE_OFF = 0x7004 + RTC_UIE_ON = 0x7003 + RTC_VL_CLR = 0x7014 + RTC_VL_READ = 0x80047013 + RTC_WIE_OFF = 0x7010 + RTC_WIE_ON = 0x700f + RTC_WKALM_RD = 0x80287010 + RTC_WKALM_SET = 0x4028700f + SCM_TIMESTAMPING = 0x25 + SCM_TIMESTAMPING_OPT_STATS = 0x36 + SCM_TIMESTAMPING_PKTINFO = 0x3a + SCM_TIMESTAMPNS = 0x23 + SCM_TXTIME = 0x3d + SCM_WIFI_STATUS = 0x29 + SFD_CLOEXEC = 0x80000 + SFD_NONBLOCK = 0x800 + SIOCATMARK = 0x8905 + SIOCGPGRP = 0x8904 + SIOCGSTAMPNS_NEW = 0x80108907 + SIOCGSTAMP_NEW = 0x80108906 + SIOCINQ = 0x541b + SIOCOUTQ = 0x5411 + SIOCSPGRP = 0x8902 + SOCK_CLOEXEC = 0x80000 + SOCK_DGRAM = 0x2 + SOCK_NONBLOCK = 0x800 + SOCK_STREAM = 0x1 + SOL_SOCKET = 0x1 + SO_ACCEPTCONN = 0x1e + SO_ATTACH_BPF = 0x32 + SO_ATTACH_REUSEPORT_CBPF = 0x33 + SO_ATTACH_REUSEPORT_EBPF = 0x34 + SO_BINDTODEVICE = 0x19 + SO_BINDTOIFINDEX = 0x3e + SO_BPF_EXTENSIONS = 0x30 + SO_BROADCAST = 0x6 + SO_BSDCOMPAT = 0xe + SO_BUF_LOCK = 0x48 + SO_BUSY_POLL = 0x2e + SO_BUSY_POLL_BUDGET = 0x46 + SO_CNX_ADVICE = 0x35 + SO_COOKIE = 0x39 + SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DOMAIN = 0x27 + SO_DONTROUTE = 0x5 + SO_ERROR = 0x4 + SO_INCOMING_CPU = 0x31 + SO_INCOMING_NAPI_ID = 0x38 + SO_KEEPALIVE = 0x9 + SO_LINGER = 0xd + SO_LOCK_FILTER = 0x2c + SO_MARK = 0x24 + SO_MAX_PACING_RATE = 0x2f + SO_MEMINFO = 0x37 + SO_NETNS_COOKIE = 0x47 + SO_NOFCS = 0x2b + SO_OOBINLINE = 0xa + SO_PASSCRED = 0x10 + SO_PASSSEC = 0x22 + SO_PEEK_OFF = 0x2a + SO_PEERCRED = 0x11 + SO_PEERGROUPS = 0x3b + SO_PEERSEC = 0x1f + SO_PREFER_BUSY_POLL = 0x45 + SO_PROTOCOL = 0x26 + SO_RCVBUF = 0x8 + SO_RCVBUFFORCE = 0x21 + SO_RCVLOWAT = 0x12 + SO_RCVTIMEO = 0x14 + SO_RCVTIMEO_NEW = 0x42 + SO_RCVTIMEO_OLD = 0x14 + SO_RESERVE_MEM = 0x49 + SO_REUSEADDR = 0x2 + SO_REUSEPORT = 0xf + SO_RXQ_OVFL = 0x28 + SO_SECURITY_AUTHENTICATION = 0x16 + SO_SECURITY_ENCRYPTION_NETWORK = 0x18 + SO_SECURITY_ENCRYPTION_TRANSPORT = 0x17 + SO_SELECT_ERR_QUEUE = 0x2d + SO_SNDBUF = 0x7 + SO_SNDBUFFORCE = 0x20 + SO_SNDLOWAT = 0x13 + SO_SNDTIMEO = 0x15 + SO_SNDTIMEO_NEW = 0x43 + SO_SNDTIMEO_OLD = 0x15 + SO_TIMESTAMPING = 0x25 + SO_TIMESTAMPING_NEW = 0x41 + SO_TIMESTAMPING_OLD = 0x25 + SO_TIMESTAMPNS = 0x23 + SO_TIMESTAMPNS_NEW = 0x40 + SO_TIMESTAMPNS_OLD = 0x23 + SO_TIMESTAMP_NEW = 0x3f + SO_TXTIME = 0x3d + SO_TYPE = 0x3 + SO_WIFI_STATUS = 0x29 + SO_ZEROCOPY = 0x3c + TAB1 = 0x800 + TAB2 = 0x1000 + TAB3 = 0x1800 + TABDLY = 0x1800 + TCFLSH = 0x540b + TCGETA = 0x5405 + TCGETS = 0x5401 + TCGETS2 = 0x802c542a + TCGETX = 0x5432 + TCSAFLUSH = 0x2 + TCSBRK = 0x5409 + TCSBRKP = 0x5425 + TCSETA = 0x5406 + TCSETAF = 0x5408 + TCSETAW = 0x5407 + TCSETS = 0x5402 + TCSETS2 = 0x402c542b + TCSETSF = 0x5404 + TCSETSF2 = 0x402c542d + TCSETSW = 0x5403 + TCSETSW2 = 0x402c542c + TCSETX = 0x5433 + TCSETXF = 0x5434 + TCSETXW = 0x5435 + TCXONC = 0x540a + TFD_CLOEXEC = 0x80000 + TFD_NONBLOCK = 0x800 + TIOCCBRK = 0x5428 + TIOCCONS = 0x541d + TIOCEXCL = 0x540c + TIOCGDEV = 0x80045432 + TIOCGETD = 0x5424 + TIOCGEXCL = 0x80045440 + TIOCGICOUNT = 0x545d + TIOCGISO7816 = 0x80285442 + TIOCGLCKTRMIOS = 0x5456 + TIOCGPGRP = 0x540f + TIOCGPKT = 0x80045438 + TIOCGPTLCK = 0x80045439 + TIOCGPTN = 0x80045430 + TIOCGPTPEER = 0x5441 + TIOCGRS485 = 0x542e + TIOCGSERIAL = 0x541e + TIOCGSID = 0x5429 + TIOCGSOFTCAR = 0x5419 + TIOCGWINSZ = 0x5413 + TIOCINQ = 0x541b + TIOCLINUX = 0x541c + TIOCMBIC = 0x5417 + TIOCMBIS = 0x5416 + TIOCMGET = 0x5415 + TIOCMIWAIT = 0x545c + TIOCMSET = 0x5418 + TIOCM_CAR = 0x40 + TIOCM_CD = 0x40 + TIOCM_CTS = 0x20 + TIOCM_DSR = 0x100 + TIOCM_RI = 0x80 + TIOCM_RNG = 0x80 + TIOCM_SR = 0x10 + TIOCM_ST = 0x8 + TIOCNOTTY = 0x5422 + TIOCNXCL = 0x540d + TIOCOUTQ = 0x5411 + TIOCPKT = 0x5420 + TIOCSBRK = 0x5427 + TIOCSCTTY = 0x540e + TIOCSERCONFIG = 0x5453 + TIOCSERGETLSR = 0x5459 + TIOCSERGETMULTI = 0x545a + TIOCSERGSTRUCT = 0x5458 + TIOCSERGWILD = 0x5454 + TIOCSERSETMULTI = 0x545b + TIOCSERSWILD = 0x5455 + TIOCSER_TEMT = 0x1 + TIOCSETD = 0x5423 + TIOCSIG = 0x40045436 + TIOCSISO7816 = 0xc0285443 + TIOCSLCKTRMIOS = 0x5457 + TIOCSPGRP = 0x5410 + TIOCSPTLCK = 0x40045431 + TIOCSRS485 = 0x542f + TIOCSSERIAL = 0x541f + TIOCSSOFTCAR = 0x541a + TIOCSTI = 0x5412 + TIOCSWINSZ = 0x5414 + TIOCVHANGUP = 0x5437 + TOSTOP = 0x100 + TUNATTACHFILTER = 0x401054d5 + TUNDETACHFILTER = 0x401054d6 + TUNGETDEVNETNS = 0x54e3 + TUNGETFEATURES = 0x800454cf + TUNGETFILTER = 0x801054db + TUNGETIFF = 0x800454d2 + TUNGETSNDBUF = 0x800454d3 + TUNGETVNETBE = 0x800454df + TUNGETVNETHDRSZ = 0x800454d7 + TUNGETVNETLE = 0x800454dd + TUNSETCARRIER = 0x400454e2 + TUNSETDEBUG = 0x400454c9 + TUNSETFILTEREBPF = 0x800454e1 + TUNSETGROUP = 0x400454ce + TUNSETIFF = 0x400454ca + TUNSETIFINDEX = 0x400454da + TUNSETLINK = 0x400454cd + TUNSETNOCSUM = 0x400454c8 + TUNSETOFFLOAD = 0x400454d0 + TUNSETOWNER = 0x400454cc + TUNSETPERSIST = 0x400454cb + TUNSETQUEUE = 0x400454d9 + TUNSETSNDBUF = 0x400454d4 + TUNSETSTEERINGEBPF = 0x800454e0 + TUNSETTXFILTER = 0x400454d1 + TUNSETVNETBE = 0x400454de + TUNSETVNETHDRSZ = 0x400454d8 + TUNSETVNETLE = 0x400454dc + UBI_IOCATT = 0x40186f40 + UBI_IOCDET = 0x40046f41 + UBI_IOCEBCH = 0x40044f02 + UBI_IOCEBER = 0x40044f01 + UBI_IOCEBISMAP = 0x80044f05 + UBI_IOCEBMAP = 0x40084f03 + UBI_IOCEBUNMAP = 0x40044f04 + UBI_IOCMKVOL = 0x40986f00 + UBI_IOCRMVOL = 0x40046f01 + UBI_IOCRNVOL = 0x51106f03 + UBI_IOCRPEB = 0x40046f04 + UBI_IOCRSVOL = 0x400c6f02 + UBI_IOCSETVOLPROP = 0x40104f06 + UBI_IOCSPEB = 0x40046f05 + UBI_IOCVOLCRBLK = 0x40804f07 + UBI_IOCVOLRMBLK = 0x4f08 + UBI_IOCVOLUP = 0x40084f00 + VDISCARD = 0xd + VEOF = 0x4 + VEOL = 0xb + VEOL2 = 0x10 + VMIN = 0x6 + VREPRINT = 0xc + VSTART = 0x8 + VSTOP = 0x9 + VSUSP = 0xa + VSWTC = 0x7 + VT1 = 0x4000 + VTDLY = 0x4000 + VTIME = 0x5 + VWERASE = 0xe + WDIOC_GETBOOTSTATUS = 0x80045702 + WDIOC_GETPRETIMEOUT = 0x80045709 + WDIOC_GETSTATUS = 0x80045701 + WDIOC_GETSUPPORT = 0x80285700 + WDIOC_GETTEMP = 0x80045703 + WDIOC_GETTIMELEFT = 0x8004570a + WDIOC_GETTIMEOUT = 0x80045707 + WDIOC_KEEPALIVE = 0x80045705 + WDIOC_SETOPTIONS = 0x80045704 + WORDSIZE = 0x40 + XCASE = 0x4 + XTABS = 0x1800 + _HIDIOCGRAWNAME = 0x80804804 + _HIDIOCGRAWPHYS = 0x80404805 + _HIDIOCGRAWUNIQ = 0x80404808 +) + +// Errors +const ( + EADDRINUSE = syscall.Errno(0x62) + EADDRNOTAVAIL = syscall.Errno(0x63) + EADV = syscall.Errno(0x44) + EAFNOSUPPORT = syscall.Errno(0x61) + EALREADY = syscall.Errno(0x72) + EBADE = syscall.Errno(0x34) + EBADFD = syscall.Errno(0x4d) + EBADMSG = syscall.Errno(0x4a) + EBADR = syscall.Errno(0x35) + EBADRQC = syscall.Errno(0x38) + EBADSLT = syscall.Errno(0x39) + EBFONT = syscall.Errno(0x3b) + ECANCELED = syscall.Errno(0x7d) + ECHRNG = syscall.Errno(0x2c) + ECOMM = syscall.Errno(0x46) + ECONNABORTED = syscall.Errno(0x67) + ECONNREFUSED = syscall.Errno(0x6f) + ECONNRESET = syscall.Errno(0x68) + EDEADLK = syscall.Errno(0x23) + EDEADLOCK = syscall.Errno(0x23) + EDESTADDRREQ = syscall.Errno(0x59) + EDOTDOT = syscall.Errno(0x49) + EDQUOT = syscall.Errno(0x7a) + EHOSTDOWN = syscall.Errno(0x70) + EHOSTUNREACH = syscall.Errno(0x71) + EHWPOISON = syscall.Errno(0x85) + EIDRM = syscall.Errno(0x2b) + EILSEQ = syscall.Errno(0x54) + EINPROGRESS = syscall.Errno(0x73) + EISCONN = syscall.Errno(0x6a) + EISNAM = syscall.Errno(0x78) + EKEYEXPIRED = syscall.Errno(0x7f) + EKEYREJECTED = syscall.Errno(0x81) + EKEYREVOKED = syscall.Errno(0x80) + EL2HLT = syscall.Errno(0x33) + EL2NSYNC = syscall.Errno(0x2d) + EL3HLT = syscall.Errno(0x2e) + EL3RST = syscall.Errno(0x2f) + ELIBACC = syscall.Errno(0x4f) + ELIBBAD = syscall.Errno(0x50) + ELIBEXEC = syscall.Errno(0x53) + ELIBMAX = syscall.Errno(0x52) + ELIBSCN = syscall.Errno(0x51) + ELNRNG = syscall.Errno(0x30) + ELOOP = syscall.Errno(0x28) + EMEDIUMTYPE = syscall.Errno(0x7c) + EMSGSIZE = syscall.Errno(0x5a) + EMULTIHOP = syscall.Errno(0x48) + ENAMETOOLONG = syscall.Errno(0x24) + ENAVAIL = syscall.Errno(0x77) + ENETDOWN = syscall.Errno(0x64) + ENETRESET = syscall.Errno(0x66) + ENETUNREACH = syscall.Errno(0x65) + ENOANO = syscall.Errno(0x37) + ENOBUFS = syscall.Errno(0x69) + ENOCSI = syscall.Errno(0x32) + ENODATA = syscall.Errno(0x3d) + ENOKEY = syscall.Errno(0x7e) + ENOLCK = syscall.Errno(0x25) + ENOLINK = syscall.Errno(0x43) + ENOMEDIUM = syscall.Errno(0x7b) + ENOMSG = syscall.Errno(0x2a) + ENONET = syscall.Errno(0x40) + ENOPKG = syscall.Errno(0x41) + ENOPROTOOPT = syscall.Errno(0x5c) + ENOSR = syscall.Errno(0x3f) + ENOSTR = syscall.Errno(0x3c) + ENOSYS = syscall.Errno(0x26) + ENOTCONN = syscall.Errno(0x6b) + ENOTEMPTY = syscall.Errno(0x27) + ENOTNAM = syscall.Errno(0x76) + ENOTRECOVERABLE = syscall.Errno(0x83) + ENOTSOCK = syscall.Errno(0x58) + ENOTSUP = syscall.Errno(0x5f) + ENOTUNIQ = syscall.Errno(0x4c) + EOPNOTSUPP = syscall.Errno(0x5f) + EOVERFLOW = syscall.Errno(0x4b) + EOWNERDEAD = syscall.Errno(0x82) + EPFNOSUPPORT = syscall.Errno(0x60) + EPROTO = syscall.Errno(0x47) + EPROTONOSUPPORT = syscall.Errno(0x5d) + EPROTOTYPE = syscall.Errno(0x5b) + EREMCHG = syscall.Errno(0x4e) + EREMOTE = syscall.Errno(0x42) + EREMOTEIO = syscall.Errno(0x79) + ERESTART = syscall.Errno(0x55) + ERFKILL = syscall.Errno(0x84) + ESHUTDOWN = syscall.Errno(0x6c) + ESOCKTNOSUPPORT = syscall.Errno(0x5e) + ESRMNT = syscall.Errno(0x45) + ESTALE = syscall.Errno(0x74) + ESTRPIPE = syscall.Errno(0x56) + ETIME = syscall.Errno(0x3e) + ETIMEDOUT = syscall.Errno(0x6e) + ETOOMANYREFS = syscall.Errno(0x6d) + EUCLEAN = syscall.Errno(0x75) + EUNATCH = syscall.Errno(0x31) + EUSERS = syscall.Errno(0x57) + EXFULL = syscall.Errno(0x36) +) + +// Signals +const ( + SIGBUS = syscall.Signal(0x7) + SIGCHLD = syscall.Signal(0x11) + SIGCLD = syscall.Signal(0x11) + SIGCONT = syscall.Signal(0x12) + SIGIO = syscall.Signal(0x1d) + SIGPOLL = syscall.Signal(0x1d) + SIGPROF = syscall.Signal(0x1b) + SIGPWR = syscall.Signal(0x1e) + SIGSTKFLT = syscall.Signal(0x10) + SIGSTOP = syscall.Signal(0x13) + SIGSYS = syscall.Signal(0x1f) + SIGTSTP = syscall.Signal(0x14) + SIGTTIN = syscall.Signal(0x15) + SIGTTOU = syscall.Signal(0x16) + SIGURG = syscall.Signal(0x17) + SIGUSR1 = syscall.Signal(0xa) + SIGUSR2 = syscall.Signal(0xc) + SIGVTALRM = syscall.Signal(0x1a) + SIGWINCH = syscall.Signal(0x1c) + SIGXCPU = syscall.Signal(0x18) + SIGXFSZ = syscall.Signal(0x19) +) + +// Error table +var errorList = [...]struct { + num syscall.Errno + name string + desc string +}{ + {1, "EPERM", "operation not permitted"}, + {2, "ENOENT", "no such file or directory"}, + {3, "ESRCH", "no such process"}, + {4, "EINTR", "interrupted system call"}, + {5, "EIO", "input/output error"}, + {6, "ENXIO", "no such device or address"}, + {7, "E2BIG", "argument list too long"}, + {8, "ENOEXEC", "exec format error"}, + {9, "EBADF", "bad file descriptor"}, + {10, "ECHILD", "no child processes"}, + {11, "EAGAIN", "resource temporarily unavailable"}, + {12, "ENOMEM", "cannot allocate memory"}, + {13, "EACCES", "permission denied"}, + {14, "EFAULT", "bad address"}, + {15, "ENOTBLK", "block device required"}, + {16, "EBUSY", "device or resource busy"}, + {17, "EEXIST", "file exists"}, + {18, "EXDEV", "invalid cross-device link"}, + {19, "ENODEV", "no such device"}, + {20, "ENOTDIR", "not a directory"}, + {21, "EISDIR", "is a directory"}, + {22, "EINVAL", "invalid argument"}, + {23, "ENFILE", "too many open files in system"}, + {24, "EMFILE", "too many open files"}, + {25, "ENOTTY", "inappropriate ioctl for device"}, + {26, "ETXTBSY", "text file busy"}, + {27, "EFBIG", "file too large"}, + {28, "ENOSPC", "no space left on device"}, + {29, "ESPIPE", "illegal seek"}, + {30, "EROFS", "read-only file system"}, + {31, "EMLINK", "too many links"}, + {32, "EPIPE", "broken pipe"}, + {33, "EDOM", "numerical argument out of domain"}, + {34, "ERANGE", "numerical result out of range"}, + {35, "EDEADLK", "resource deadlock avoided"}, + {36, "ENAMETOOLONG", "file name too long"}, + {37, "ENOLCK", "no locks available"}, + {38, "ENOSYS", "function not implemented"}, + {39, "ENOTEMPTY", "directory not empty"}, + {40, "ELOOP", "too many levels of symbolic links"}, + {42, "ENOMSG", "no message of desired type"}, + {43, "EIDRM", "identifier removed"}, + {44, "ECHRNG", "channel number out of range"}, + {45, "EL2NSYNC", "level 2 not synchronized"}, + {46, "EL3HLT", "level 3 halted"}, + {47, "EL3RST", "level 3 reset"}, + {48, "ELNRNG", "link number out of range"}, + {49, "EUNATCH", "protocol driver not attached"}, + {50, "ENOCSI", "no CSI structure available"}, + {51, "EL2HLT", "level 2 halted"}, + {52, "EBADE", "invalid exchange"}, + {53, "EBADR", "invalid request descriptor"}, + {54, "EXFULL", "exchange full"}, + {55, "ENOANO", "no anode"}, + {56, "EBADRQC", "invalid request code"}, + {57, "EBADSLT", "invalid slot"}, + {59, "EBFONT", "bad font file format"}, + {60, "ENOSTR", "device not a stream"}, + {61, "ENODATA", "no data available"}, + {62, "ETIME", "timer expired"}, + {63, "ENOSR", "out of streams resources"}, + {64, "ENONET", "machine is not on the network"}, + {65, "ENOPKG", "package not installed"}, + {66, "EREMOTE", "object is remote"}, + {67, "ENOLINK", "link has been severed"}, + {68, "EADV", "advertise error"}, + {69, "ESRMNT", "srmount error"}, + {70, "ECOMM", "communication error on send"}, + {71, "EPROTO", "protocol error"}, + {72, "EMULTIHOP", "multihop attempted"}, + {73, "EDOTDOT", "RFS specific error"}, + {74, "EBADMSG", "bad message"}, + {75, "EOVERFLOW", "value too large for defined data type"}, + {76, "ENOTUNIQ", "name not unique on network"}, + {77, "EBADFD", "file descriptor in bad state"}, + {78, "EREMCHG", "remote address changed"}, + {79, "ELIBACC", "can not access a needed shared library"}, + {80, "ELIBBAD", "accessing a corrupted shared library"}, + {81, "ELIBSCN", ".lib section in a.out corrupted"}, + {82, "ELIBMAX", "attempting to link in too many shared libraries"}, + {83, "ELIBEXEC", "cannot exec a shared library directly"}, + {84, "EILSEQ", "invalid or incomplete multibyte or wide character"}, + {85, "ERESTART", "interrupted system call should be restarted"}, + {86, "ESTRPIPE", "streams pipe error"}, + {87, "EUSERS", "too many users"}, + {88, "ENOTSOCK", "socket operation on non-socket"}, + {89, "EDESTADDRREQ", "destination address required"}, + {90, "EMSGSIZE", "message too long"}, + {91, "EPROTOTYPE", "protocol wrong type for socket"}, + {92, "ENOPROTOOPT", "protocol not available"}, + {93, "EPROTONOSUPPORT", "protocol not supported"}, + {94, "ESOCKTNOSUPPORT", "socket type not supported"}, + {95, "ENOTSUP", "operation not supported"}, + {96, "EPFNOSUPPORT", "protocol family not supported"}, + {97, "EAFNOSUPPORT", "address family not supported by protocol"}, + {98, "EADDRINUSE", "address already in use"}, + {99, "EADDRNOTAVAIL", "cannot assign requested address"}, + {100, "ENETDOWN", "network is down"}, + {101, "ENETUNREACH", "network is unreachable"}, + {102, "ENETRESET", "network dropped connection on reset"}, + {103, "ECONNABORTED", "software caused connection abort"}, + {104, "ECONNRESET", "connection reset by peer"}, + {105, "ENOBUFS", "no buffer space available"}, + {106, "EISCONN", "transport endpoint is already connected"}, + {107, "ENOTCONN", "transport endpoint is not connected"}, + {108, "ESHUTDOWN", "cannot send after transport endpoint shutdown"}, + {109, "ETOOMANYREFS", "too many references: cannot splice"}, + {110, "ETIMEDOUT", "connection timed out"}, + {111, "ECONNREFUSED", "connection refused"}, + {112, "EHOSTDOWN", "host is down"}, + {113, "EHOSTUNREACH", "no route to host"}, + {114, "EALREADY", "operation already in progress"}, + {115, "EINPROGRESS", "operation now in progress"}, + {116, "ESTALE", "stale file handle"}, + {117, "EUCLEAN", "structure needs cleaning"}, + {118, "ENOTNAM", "not a XENIX named type file"}, + {119, "ENAVAIL", "no XENIX semaphores available"}, + {120, "EISNAM", "is a named type file"}, + {121, "EREMOTEIO", "remote I/O error"}, + {122, "EDQUOT", "disk quota exceeded"}, + {123, "ENOMEDIUM", "no medium found"}, + {124, "EMEDIUMTYPE", "wrong medium type"}, + {125, "ECANCELED", "operation canceled"}, + {126, "ENOKEY", "required key not available"}, + {127, "EKEYEXPIRED", "key has expired"}, + {128, "EKEYREVOKED", "key has been revoked"}, + {129, "EKEYREJECTED", "key was rejected by service"}, + {130, "EOWNERDEAD", "owner died"}, + {131, "ENOTRECOVERABLE", "state not recoverable"}, + {132, "ERFKILL", "operation not possible due to RF-kill"}, + {133, "EHWPOISON", "memory page has hardware error"}, +} + +// Signal table +var signalList = [...]struct { + num syscall.Signal + name string + desc string +}{ + {1, "SIGHUP", "hangup"}, + {2, "SIGINT", "interrupt"}, + {3, "SIGQUIT", "quit"}, + {4, "SIGILL", "illegal instruction"}, + {5, "SIGTRAP", "trace/breakpoint trap"}, + {6, "SIGABRT", "aborted"}, + {7, "SIGBUS", "bus error"}, + {8, "SIGFPE", "floating point exception"}, + {9, "SIGKILL", "killed"}, + {10, "SIGUSR1", "user defined signal 1"}, + {11, "SIGSEGV", "segmentation fault"}, + {12, "SIGUSR2", "user defined signal 2"}, + {13, "SIGPIPE", "broken pipe"}, + {14, "SIGALRM", "alarm clock"}, + {15, "SIGTERM", "terminated"}, + {16, "SIGSTKFLT", "stack fault"}, + {17, "SIGCHLD", "child exited"}, + {18, "SIGCONT", "continued"}, + {19, "SIGSTOP", "stopped (signal)"}, + {20, "SIGTSTP", "stopped"}, + {21, "SIGTTIN", "stopped (tty input)"}, + {22, "SIGTTOU", "stopped (tty output)"}, + {23, "SIGURG", "urgent I/O condition"}, + {24, "SIGXCPU", "CPU time limit exceeded"}, + {25, "SIGXFSZ", "file size limit exceeded"}, + {26, "SIGVTALRM", "virtual timer expired"}, + {27, "SIGPROF", "profiling timer expired"}, + {28, "SIGWINCH", "window changed"}, + {29, "SIGIO", "I/O possible"}, + {30, "SIGPWR", "power failure"}, + {31, "SIGSYS", "bad system call"}, +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index 14d7a84399..7f44a495b7 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -5,7 +5,7 @@ // +build mips,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index 99e7c4ac0b..2f92b4e48e 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -5,7 +5,7 @@ // +build mips64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index 496364c33c..f5367a966b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -5,7 +5,7 @@ // +build mips64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 3e40830857..2e22337d7c 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -5,7 +5,7 @@ // +build mipsle,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 1151a7dfab..858c4f30f5 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -5,7 +5,7 @@ // +build ppc,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index ed17f249e7..af2a7ba6e6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -5,7 +5,7 @@ // +build ppc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index d84a37c1ac..eaa2eb8e24 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -5,7 +5,7 @@ // +build ppc64le,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 5cafba83f6..faaa9f0637 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -5,7 +5,7 @@ // +build riscv64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 6d122da41c..0d161f0b75 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -5,7 +5,7 @@ // +build s390x,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index 6bd19e51db..4fd497a3e3 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -5,7 +5,7 @@ // +build sparc64,linux // Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/_const.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include _const.go package unix diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 8793765896..467deed763 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -1643,6 +1643,30 @@ var libc_mknod_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Open(path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 8da90cf0e4..7e308a476d 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -600,6 +600,12 @@ TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) + +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_open(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index f47eedd5a8..35938d34ff 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -1643,6 +1643,30 @@ var libc_mknod_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Open(path string, mode int, perm uint32) (fd int, err error) { var _p0 *byte _p0, err = BytePtrFromString(path) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 4d26f7d014..b09e5bb0e2 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -600,6 +600,12 @@ TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) + +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_open(SB) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 78d74520b9..bc4a275311 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -828,6 +828,49 @@ func Fsync(fd int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Fsmount(fd int, flags int, mountAttrs int) (fsfd int, err error) { + r0, _, e1 := Syscall(SYS_FSMOUNT, uintptr(fd), uintptr(flags), uintptr(mountAttrs)) + fsfd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fsopen(fsName string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_FSOPEN, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fspick(dirfd int, pathName string, flags int) (fd int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(pathName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_FSPICK, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Getdents(fd int, buf []byte) (n int, err error) { var _p0 unsafe.Pointer if len(buf) > 0 { @@ -1205,6 +1248,26 @@ func Mknodat(dirfd int, path string, mode uint32, dev int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func MoveMount(fromDirfd int, fromPathName string, toDirfd int, toPathName string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fromPathName) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(toPathName) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_MOVE_MOUNT, uintptr(fromDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(toDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := Syscall(SYS_NANOSLEEP, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { @@ -1215,6 +1278,22 @@ func Nanosleep(time *Timespec, leftover *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func OpenTree(dfd int, fileName string, flags uint) (r int, err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fileName) + if err != nil { + return + } + r0, _, e1 := Syscall(SYS_OPEN_TREE, uintptr(dfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + r = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error) { r0, _, e1 := Syscall6(SYS_PERF_EVENT_OPEN, uintptr(unsafe.Pointer(attr)), uintptr(pid), uintptr(cpu), uintptr(groupFd), uintptr(flags), 0) fd = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go index c947a4d10e..2a0c4aa6a6 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_amd64.go @@ -215,6 +215,17 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func MemfdSecret(flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Pause() (err error) { _, _, e1 := Syscall(SYS_PAUSE, 0, 0, 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go index dd15284d84..9f8c24e434 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_arm64.go @@ -180,6 +180,17 @@ func Listen(s int, n int) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func MemfdSecret(flags int) (fd int, err error) { + r0, _, e1 := Syscall(SYS_MEMFD_SECRET, uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func pread(fd int, p []byte, offset int64) (n int, err error) { var _p0 unsafe.Pointer if len(p) > 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go new file mode 100644 index 0000000000..8cdfbe71e6 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux_loong64.go @@ -0,0 +1,552 @@ +// go run mksyscall.go -tags linux,loong64 syscall_linux.go syscall_linux_loong64.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build linux && loong64 +// +build linux,loong64 + +package unix + +import ( + "syscall" + "unsafe" +) + +var _ syscall.Errno + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func fanotifyMark(fd int, flags uint, mask uint64, dirFd int, pathname *byte) (err error) { + _, _, e1 := Syscall6(SYS_FANOTIFY_MARK, uintptr(fd), uintptr(flags), uintptr(mask), uintptr(dirFd), uintptr(unsafe.Pointer(pathname)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fallocate(fd int, mode uint32, off int64, len int64) (err error) { + _, _, e1 := Syscall6(SYS_FALLOCATE, uintptr(fd), uintptr(mode), uintptr(off), uintptr(len), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Tee(rfd int, wfd int, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_TEE, uintptr(rfd), uintptr(wfd), uintptr(len), uintptr(flags), 0, 0) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func EpollWait(epfd int, events []EpollEvent, msec int) (n int, err error) { + var _p0 unsafe.Pointer + if len(events) > 0 { + _p0 = unsafe.Pointer(&events[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_EPOLL_PWAIT, uintptr(epfd), uintptr(_p0), uintptr(len(events)), uintptr(msec), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fadvise(fd int, offset int64, length int64, advice int) (err error) { + _, _, e1 := Syscall6(SYS_FADVISE64, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fchown(fd int, uid int, gid int) (err error) { + _, _, e1 := Syscall(SYS_FCHOWN, uintptr(fd), uintptr(uid), uintptr(gid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstat(fd int, stat *Stat_t) (err error) { + _, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_FSTATAT, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Fstatfs(fd int, buf *Statfs_t) (err error) { + _, _, e1 := Syscall(SYS_FSTATFS, uintptr(fd), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Ftruncate(fd int, length int64) (err error) { + _, _, e1 := Syscall(SYS_FTRUNCATE, uintptr(fd), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getegid() (egid int) { + r0, _ := RawSyscallNoError(SYS_GETEGID, 0, 0, 0) + egid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Geteuid() (euid int) { + r0, _ := RawSyscallNoError(SYS_GETEUID, 0, 0, 0) + euid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getgid() (gid int) { + r0, _ := RawSyscallNoError(SYS_GETGID, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Getuid() (uid int) { + r0, _ := RawSyscallNoError(SYS_GETUID, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Listen(s int, n int) (err error) { + _, _, e1 := Syscall(SYS_LISTEN, uintptr(s), uintptr(n), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pread(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PREAD64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwrite(fd int, p []byte, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_PWRITE64, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Seek(fd int, offset int64, whence int) (off int64, err error) { + r0, _, e1 := Syscall(SYS_LSEEK, uintptr(fd), uintptr(offset), uintptr(whence)) + off = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + r0, _, e1 := Syscall6(SYS_SENDFILE, uintptr(outfd), uintptr(infd), uintptr(unsafe.Pointer(offset)), uintptr(count), 0, 0) + written = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsgid(gid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSGID, uintptr(gid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setfsuid(uid int) (prev int, err error) { + r0, _, e1 := Syscall(SYS_SETFSUID, uintptr(uid), 0, 0) + prev = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setregid(rgid int, egid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREGID, uintptr(rgid), uintptr(egid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresgid(rgid int, egid int, sgid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESGID, uintptr(rgid), uintptr(egid), uintptr(sgid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setresuid(ruid int, euid int, suid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETRESUID, uintptr(ruid), uintptr(euid), uintptr(suid)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Setreuid(ruid int, euid int) (err error) { + _, _, e1 := RawSyscall(SYS_SETREUID, uintptr(ruid), uintptr(euid), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Shutdown(fd int, how int) (err error) { + _, _, e1 := Syscall(SYS_SHUTDOWN, uintptr(fd), uintptr(how), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error) { + r0, _, e1 := Syscall6(SYS_SPLICE, uintptr(rfd), uintptr(unsafe.Pointer(roff)), uintptr(wfd), uintptr(unsafe.Pointer(woff)), uintptr(len), uintptr(flags)) + n = int64(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Statfs(path string, buf *Statfs_t) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_STATFS, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(buf)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func SyncFileRange(fd int, off int64, n int64, flags int) (err error) { + _, _, e1 := Syscall6(SYS_SYNC_FILE_RANGE, uintptr(fd), uintptr(off), uintptr(n), uintptr(flags), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Truncate(path string, length int64) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(path) + if err != nil { + return + } + _, _, e1 := Syscall(SYS_TRUNCATE, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func accept4(s int, rsa *RawSockaddrAny, addrlen *_Socklen, flags int) (fd int, err error) { + r0, _, e1 := Syscall6(SYS_ACCEPT4, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen)), uintptr(flags), 0, 0) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_BIND, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { + _, _, e1 := Syscall(SYS_CONNECT, uintptr(s), uintptr(addr), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getgroups(n int, list *_Gid_t) (nn int, err error) { + r0, _, e1 := RawSyscall(SYS_GETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + nn = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setgroups(n int, list *_Gid_t) (err error) { + _, _, e1 := RawSyscall(SYS_SETGROUPS, uintptr(n), uintptr(unsafe.Pointer(list)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { + _, _, e1 := Syscall6(SYS_GETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { + _, _, e1 := Syscall6(SYS_SETSOCKOPT, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socket(domain int, typ int, proto int) (fd int, err error) { + r0, _, e1 := RawSyscall(SYS_SOCKET, uintptr(domain), uintptr(typ), uintptr(proto)) + fd = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { + _, _, e1 := RawSyscall6(SYS_SOCKETPAIR, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETPEERNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { + _, _, e1 := RawSyscall(SYS_GETSOCKNAME, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { + var _p0 unsafe.Pointer + if len(p) > 0 { + _p0 = unsafe.Pointer(&p[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := Syscall6(SYS_RECVFROM, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { + var _p0 unsafe.Pointer + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall6(SYS_SENDTO, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_RECVMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { + r0, _, e1 := Syscall(SYS_SENDMSG, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func mmap(addr uintptr, length uintptr, prot int, flags int, fd int, offset int64) (xaddr uintptr, err error) { + r0, _, e1 := Syscall6(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flags), uintptr(fd), uintptr(offset)) + xaddr = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Gettimeofday(tv *Timeval) (err error) { + _, _, e1 := RawSyscall(SYS_GETTIMEOFDAY, uintptr(unsafe.Pointer(tv)), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func kexecFileLoad(kernelFd int, initrdFd int, cmdlineLen int, cmdline string, flags int) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(cmdline) + if err != nil { + return + } + _, _, e1 := Syscall6(SYS_KEXEC_FILE_LOAD, uintptr(kernelFd), uintptr(initrdFd), uintptr(cmdlineLen), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index cac1f758bf..62192e1de2 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -446,4 +446,5 @@ const ( SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index f327e4a0bc..490aab5d21 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -368,4 +368,5 @@ const ( SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index fb06a08d4e..aca17b6fad 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -410,4 +410,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index 58285646eb..54b4dfa547 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -313,4 +313,5 @@ const ( SYS_MEMFD_SECRET = 447 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go new file mode 100644 index 0000000000..e443f9a322 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -0,0 +1,313 @@ +// go run linux/mksysnum.go -Wall -Werror -static -I/tmp/include /tmp/include/asm/unistd.h +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build loong64 && linux +// +build loong64,linux + +package unix + +const ( + SYS_IO_SETUP = 0 + SYS_IO_DESTROY = 1 + SYS_IO_SUBMIT = 2 + SYS_IO_CANCEL = 3 + SYS_IO_GETEVENTS = 4 + SYS_SETXATTR = 5 + SYS_LSETXATTR = 6 + SYS_FSETXATTR = 7 + SYS_GETXATTR = 8 + SYS_LGETXATTR = 9 + SYS_FGETXATTR = 10 + SYS_LISTXATTR = 11 + SYS_LLISTXATTR = 12 + SYS_FLISTXATTR = 13 + SYS_REMOVEXATTR = 14 + SYS_LREMOVEXATTR = 15 + SYS_FREMOVEXATTR = 16 + SYS_GETCWD = 17 + SYS_LOOKUP_DCOOKIE = 18 + SYS_EVENTFD2 = 19 + SYS_EPOLL_CREATE1 = 20 + SYS_EPOLL_CTL = 21 + SYS_EPOLL_PWAIT = 22 + SYS_DUP = 23 + SYS_DUP3 = 24 + SYS_FCNTL = 25 + SYS_INOTIFY_INIT1 = 26 + SYS_INOTIFY_ADD_WATCH = 27 + SYS_INOTIFY_RM_WATCH = 28 + SYS_IOCTL = 29 + SYS_IOPRIO_SET = 30 + SYS_IOPRIO_GET = 31 + SYS_FLOCK = 32 + SYS_MKNODAT = 33 + SYS_MKDIRAT = 34 + SYS_UNLINKAT = 35 + SYS_SYMLINKAT = 36 + SYS_LINKAT = 37 + SYS_UMOUNT2 = 39 + SYS_MOUNT = 40 + SYS_PIVOT_ROOT = 41 + SYS_NFSSERVCTL = 42 + SYS_STATFS = 43 + SYS_FSTATFS = 44 + SYS_TRUNCATE = 45 + SYS_FTRUNCATE = 46 + SYS_FALLOCATE = 47 + SYS_FACCESSAT = 48 + SYS_CHDIR = 49 + SYS_FCHDIR = 50 + SYS_CHROOT = 51 + SYS_FCHMOD = 52 + SYS_FCHMODAT = 53 + SYS_FCHOWNAT = 54 + SYS_FCHOWN = 55 + SYS_OPENAT = 56 + SYS_CLOSE = 57 + SYS_VHANGUP = 58 + SYS_PIPE2 = 59 + SYS_QUOTACTL = 60 + SYS_GETDENTS64 = 61 + SYS_LSEEK = 62 + SYS_READ = 63 + SYS_WRITE = 64 + SYS_READV = 65 + SYS_WRITEV = 66 + SYS_PREAD64 = 67 + SYS_PWRITE64 = 68 + SYS_PREADV = 69 + SYS_PWRITEV = 70 + SYS_SENDFILE = 71 + SYS_PSELECT6 = 72 + SYS_PPOLL = 73 + SYS_SIGNALFD4 = 74 + SYS_VMSPLICE = 75 + SYS_SPLICE = 76 + SYS_TEE = 77 + SYS_READLINKAT = 78 + SYS_FSTATAT = 79 + SYS_FSTAT = 80 + SYS_SYNC = 81 + SYS_FSYNC = 82 + SYS_FDATASYNC = 83 + SYS_SYNC_FILE_RANGE = 84 + SYS_TIMERFD_CREATE = 85 + SYS_TIMERFD_SETTIME = 86 + SYS_TIMERFD_GETTIME = 87 + SYS_UTIMENSAT = 88 + SYS_ACCT = 89 + SYS_CAPGET = 90 + SYS_CAPSET = 91 + SYS_PERSONALITY = 92 + SYS_EXIT = 93 + SYS_EXIT_GROUP = 94 + SYS_WAITID = 95 + SYS_SET_TID_ADDRESS = 96 + SYS_UNSHARE = 97 + SYS_FUTEX = 98 + SYS_SET_ROBUST_LIST = 99 + SYS_GET_ROBUST_LIST = 100 + SYS_NANOSLEEP = 101 + SYS_GETITIMER = 102 + SYS_SETITIMER = 103 + SYS_KEXEC_LOAD = 104 + SYS_INIT_MODULE = 105 + SYS_DELETE_MODULE = 106 + SYS_TIMER_CREATE = 107 + SYS_TIMER_GETTIME = 108 + SYS_TIMER_GETOVERRUN = 109 + SYS_TIMER_SETTIME = 110 + SYS_TIMER_DELETE = 111 + SYS_CLOCK_SETTIME = 112 + SYS_CLOCK_GETTIME = 113 + SYS_CLOCK_GETRES = 114 + SYS_CLOCK_NANOSLEEP = 115 + SYS_SYSLOG = 116 + SYS_PTRACE = 117 + SYS_SCHED_SETPARAM = 118 + SYS_SCHED_SETSCHEDULER = 119 + SYS_SCHED_GETSCHEDULER = 120 + SYS_SCHED_GETPARAM = 121 + SYS_SCHED_SETAFFINITY = 122 + SYS_SCHED_GETAFFINITY = 123 + SYS_SCHED_YIELD = 124 + SYS_SCHED_GET_PRIORITY_MAX = 125 + SYS_SCHED_GET_PRIORITY_MIN = 126 + SYS_SCHED_RR_GET_INTERVAL = 127 + SYS_RESTART_SYSCALL = 128 + SYS_KILL = 129 + SYS_TKILL = 130 + SYS_TGKILL = 131 + SYS_SIGALTSTACK = 132 + SYS_RT_SIGSUSPEND = 133 + SYS_RT_SIGACTION = 134 + SYS_RT_SIGPROCMASK = 135 + SYS_RT_SIGPENDING = 136 + SYS_RT_SIGTIMEDWAIT = 137 + SYS_RT_SIGQUEUEINFO = 138 + SYS_RT_SIGRETURN = 139 + SYS_SETPRIORITY = 140 + SYS_GETPRIORITY = 141 + SYS_REBOOT = 142 + SYS_SETREGID = 143 + SYS_SETGID = 144 + SYS_SETREUID = 145 + SYS_SETUID = 146 + SYS_SETRESUID = 147 + SYS_GETRESUID = 148 + SYS_SETRESGID = 149 + SYS_GETRESGID = 150 + SYS_SETFSUID = 151 + SYS_SETFSGID = 152 + SYS_TIMES = 153 + SYS_SETPGID = 154 + SYS_GETPGID = 155 + SYS_GETSID = 156 + SYS_SETSID = 157 + SYS_GETGROUPS = 158 + SYS_SETGROUPS = 159 + SYS_UNAME = 160 + SYS_SETHOSTNAME = 161 + SYS_SETDOMAINNAME = 162 + SYS_GETRUSAGE = 165 + SYS_UMASK = 166 + SYS_PRCTL = 167 + SYS_GETCPU = 168 + SYS_GETTIMEOFDAY = 169 + SYS_SETTIMEOFDAY = 170 + SYS_ADJTIMEX = 171 + SYS_GETPID = 172 + SYS_GETPPID = 173 + SYS_GETUID = 174 + SYS_GETEUID = 175 + SYS_GETGID = 176 + SYS_GETEGID = 177 + SYS_GETTID = 178 + SYS_SYSINFO = 179 + SYS_MQ_OPEN = 180 + SYS_MQ_UNLINK = 181 + SYS_MQ_TIMEDSEND = 182 + SYS_MQ_TIMEDRECEIVE = 183 + SYS_MQ_NOTIFY = 184 + SYS_MQ_GETSETATTR = 185 + SYS_MSGGET = 186 + SYS_MSGCTL = 187 + SYS_MSGRCV = 188 + SYS_MSGSND = 189 + SYS_SEMGET = 190 + SYS_SEMCTL = 191 + SYS_SEMTIMEDOP = 192 + SYS_SEMOP = 193 + SYS_SHMGET = 194 + SYS_SHMCTL = 195 + SYS_SHMAT = 196 + SYS_SHMDT = 197 + SYS_SOCKET = 198 + SYS_SOCKETPAIR = 199 + SYS_BIND = 200 + SYS_LISTEN = 201 + SYS_ACCEPT = 202 + SYS_CONNECT = 203 + SYS_GETSOCKNAME = 204 + SYS_GETPEERNAME = 205 + SYS_SENDTO = 206 + SYS_RECVFROM = 207 + SYS_SETSOCKOPT = 208 + SYS_GETSOCKOPT = 209 + SYS_SHUTDOWN = 210 + SYS_SENDMSG = 211 + SYS_RECVMSG = 212 + SYS_READAHEAD = 213 + SYS_BRK = 214 + SYS_MUNMAP = 215 + SYS_MREMAP = 216 + SYS_ADD_KEY = 217 + SYS_REQUEST_KEY = 218 + SYS_KEYCTL = 219 + SYS_CLONE = 220 + SYS_EXECVE = 221 + SYS_MMAP = 222 + SYS_FADVISE64 = 223 + SYS_SWAPON = 224 + SYS_SWAPOFF = 225 + SYS_MPROTECT = 226 + SYS_MSYNC = 227 + SYS_MLOCK = 228 + SYS_MUNLOCK = 229 + SYS_MLOCKALL = 230 + SYS_MUNLOCKALL = 231 + SYS_MINCORE = 232 + SYS_MADVISE = 233 + SYS_REMAP_FILE_PAGES = 234 + SYS_MBIND = 235 + SYS_GET_MEMPOLICY = 236 + SYS_SET_MEMPOLICY = 237 + SYS_MIGRATE_PAGES = 238 + SYS_MOVE_PAGES = 239 + SYS_RT_TGSIGQUEUEINFO = 240 + SYS_PERF_EVENT_OPEN = 241 + SYS_ACCEPT4 = 242 + SYS_RECVMMSG = 243 + SYS_ARCH_SPECIFIC_SYSCALL = 244 + SYS_WAIT4 = 260 + SYS_PRLIMIT64 = 261 + SYS_FANOTIFY_INIT = 262 + SYS_FANOTIFY_MARK = 263 + SYS_NAME_TO_HANDLE_AT = 264 + SYS_OPEN_BY_HANDLE_AT = 265 + SYS_CLOCK_ADJTIME = 266 + SYS_SYNCFS = 267 + SYS_SETNS = 268 + SYS_SENDMMSG = 269 + SYS_PROCESS_VM_READV = 270 + SYS_PROCESS_VM_WRITEV = 271 + SYS_KCMP = 272 + SYS_FINIT_MODULE = 273 + SYS_SCHED_SETATTR = 274 + SYS_SCHED_GETATTR = 275 + SYS_RENAMEAT2 = 276 + SYS_SECCOMP = 277 + SYS_GETRANDOM = 278 + SYS_MEMFD_CREATE = 279 + SYS_BPF = 280 + SYS_EXECVEAT = 281 + SYS_USERFAULTFD = 282 + SYS_MEMBARRIER = 283 + SYS_MLOCK2 = 284 + SYS_COPY_FILE_RANGE = 285 + SYS_PREADV2 = 286 + SYS_PWRITEV2 = 287 + SYS_PKEY_MPROTECT = 288 + SYS_PKEY_ALLOC = 289 + SYS_PKEY_FREE = 290 + SYS_STATX = 291 + SYS_IO_PGETEVENTS = 292 + SYS_RSEQ = 293 + SYS_KEXEC_FILE_LOAD = 294 + SYS_PIDFD_SEND_SIGNAL = 424 + SYS_IO_URING_SETUP = 425 + SYS_IO_URING_ENTER = 426 + SYS_IO_URING_REGISTER = 427 + SYS_OPEN_TREE = 428 + SYS_MOVE_MOUNT = 429 + SYS_FSOPEN = 430 + SYS_FSCONFIG = 431 + SYS_FSMOUNT = 432 + SYS_FSPICK = 433 + SYS_PIDFD_OPEN = 434 + SYS_CLONE3 = 435 + SYS_CLOSE_RANGE = 436 + SYS_OPENAT2 = 437 + SYS_PIDFD_GETFD = 438 + SYS_FACCESSAT2 = 439 + SYS_PROCESS_MADVISE = 440 + SYS_EPOLL_PWAIT2 = 441 + SYS_MOUNT_SETATTR = 442 + SYS_QUOTACTL_FD = 443 + SYS_LANDLOCK_CREATE_RULESET = 444 + SYS_LANDLOCK_ADD_RULE = 445 + SYS_LANDLOCK_RESTRICT_SELF = 446 + SYS_PROCESS_MRELEASE = 448 + SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 +) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index 3b0418e689..65a99efc23 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -430,4 +430,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 4446 SYS_PROCESS_MRELEASE = 4448 SYS_FUTEX_WAITV = 4449 + SYS_SET_MEMPOLICY_HOME_NODE = 4450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 314ebf166a..841c8a6682 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -360,4 +360,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 5446 SYS_PROCESS_MRELEASE = 5448 SYS_FUTEX_WAITV = 5449 + SYS_SET_MEMPOLICY_HOME_NODE = 5450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index b8fbb937a3..e26a7c7658 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -360,4 +360,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 5446 SYS_PROCESS_MRELEASE = 5448 SYS_FUTEX_WAITV = 5449 + SYS_SET_MEMPOLICY_HOME_NODE = 5450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index ee309b2bac..26447260a9 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -430,4 +430,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 4446 SYS_PROCESS_MRELEASE = 4448 SYS_FUTEX_WAITV = 4449 + SYS_SET_MEMPOLICY_HOME_NODE = 4450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index ac3748104e..26aefc1869 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -437,4 +437,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index 5aa4721110..8d4cd9d99d 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -409,4 +409,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 0793ac1a65..3b405d1f82 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -409,4 +409,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index a520962e39..c3a5af8623 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -311,4 +311,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index d1738586b4..8ffa66469e 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -374,4 +374,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index dfd5660f97..6a39640e76 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -388,4 +388,5 @@ const ( SYS_LANDLOCK_RESTRICT_SELF = 446 SYS_PROCESS_MRELEASE = 448 SYS_FUTEX_WAITV = 449 + SYS_SET_MEMPOLICY_HOME_NODE = 450 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 2c26466e07..9962d26bb3 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -754,6 +754,25 @@ const ( AT_SYMLINK_NOFOLLOW = 0x100 AT_EACCESS = 0x200 + + OPEN_TREE_CLONE = 0x1 + + MOVE_MOUNT_F_SYMLINKS = 0x1 + MOVE_MOUNT_F_AUTOMOUNTS = 0x2 + MOVE_MOUNT_F_EMPTY_PATH = 0x4 + MOVE_MOUNT_T_SYMLINKS = 0x10 + MOVE_MOUNT_T_AUTOMOUNTS = 0x20 + MOVE_MOUNT_T_EMPTY_PATH = 0x40 + MOVE_MOUNT_SET_GROUP = 0x100 + + FSOPEN_CLOEXEC = 0x1 + + FSPICK_CLOEXEC = 0x1 + FSPICK_SYMLINK_NOFOLLOW = 0x2 + FSPICK_NO_AUTOMOUNT = 0x4 + FSPICK_EMPTY_PATH = 0x8 + + FSMOUNT_CLOEXEC = 0x1 ) type OpenHow struct { @@ -3619,7 +3638,7 @@ const ( ETHTOOL_A_RINGS_RX_MINI = 0x7 ETHTOOL_A_RINGS_RX_JUMBO = 0x8 ETHTOOL_A_RINGS_TX = 0x9 - ETHTOOL_A_RINGS_MAX = 0x9 + ETHTOOL_A_RINGS_MAX = 0xa ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -4304,7 +4323,7 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x133 + NL80211_ATTR_MAX = 0x135 NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce NL80211_ATTR_MAX_MATCH_SETS = 0x85 @@ -4645,7 +4664,7 @@ const ( NL80211_CMD_LEAVE_IBSS = 0x2c NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x92 + NL80211_CMD_MAX = 0x93 NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_NAN_MATCH = 0x78 NL80211_CMD_NEW_BEACON = 0xf @@ -5532,3 +5551,40 @@ const ( NL80211_WPA_VERSION_2 = 0x2 NL80211_WPA_VERSION_3 = 0x4 ) + +const ( + FRA_UNSPEC = 0x0 + FRA_DST = 0x1 + FRA_SRC = 0x2 + FRA_IIFNAME = 0x3 + FRA_GOTO = 0x4 + FRA_UNUSED2 = 0x5 + FRA_PRIORITY = 0x6 + FRA_UNUSED3 = 0x7 + FRA_UNUSED4 = 0x8 + FRA_UNUSED5 = 0x9 + FRA_FWMARK = 0xa + FRA_FLOW = 0xb + FRA_TUN_ID = 0xc + FRA_SUPPRESS_IFGROUP = 0xd + FRA_SUPPRESS_PREFIXLEN = 0xe + FRA_TABLE = 0xf + FRA_FWMASK = 0x10 + FRA_OIFNAME = 0x11 + FRA_PAD = 0x12 + FRA_L3MDEV = 0x13 + FRA_UID_RANGE = 0x14 + FRA_PROTOCOL = 0x15 + FRA_IP_PROTO = 0x16 + FRA_SPORT_RANGE = 0x17 + FRA_DPORT_RANGE = 0x18 + FR_ACT_UNSPEC = 0x0 + FR_ACT_TO_TBL = 0x1 + FR_ACT_GOTO = 0x2 + FR_ACT_NOP = 0x3 + FR_ACT_RES3 = 0x4 + FR_ACT_RES4 = 0x5 + FR_ACT_BLACKHOLE = 0x6 + FR_ACT_UNREACHABLE = 0x7 + FR_ACT_PROHIBIT = 0x8 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index 531aefab75..4948362f2c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m32 linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build 386 && linux @@ -240,6 +240,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -318,6 +322,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index 727f664bb8..f64345e0e2 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -m64 linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build amd64 && linux @@ -255,6 +255,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -332,6 +336,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index 639141b1eb..72469c79e7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm && linux @@ -231,6 +231,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -309,6 +313,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index 6cb03b1d95..68f072283a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build arm64 && linux @@ -234,6 +234,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -311,6 +315,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go new file mode 100644 index 0000000000..090ae46c67 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -0,0 +1,679 @@ +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go +// Code generated by the command above; see README.md. DO NOT EDIT. + +//go:build loong64 && linux +// +build loong64,linux + +package unix + +const ( + SizeofPtr = 0x8 + SizeofLong = 0x8 +) + +type ( + _C_long int64 +) + +type Timespec struct { + Sec int64 + Nsec int64 +} + +type Timeval struct { + Sec int64 + Usec int64 +} + +type Timex struct { + Modes uint32 + Offset int64 + Freq int64 + Maxerror int64 + Esterror int64 + Status int32 + Constant int64 + Precision int64 + Tolerance int64 + Time Timeval + Tick int64 + Ppsfreq int64 + Jitter int64 + Shift int32 + Stabil int64 + Jitcnt int64 + Calcnt int64 + Errcnt int64 + Stbcnt int64 + Tai int32 + _ [44]byte +} + +type Time_t int64 + +type Tms struct { + Utime int64 + Stime int64 + Cutime int64 + Cstime int64 +} + +type Utimbuf struct { + Actime int64 + Modtime int64 +} + +type Rusage struct { + Utime Timeval + Stime Timeval + Maxrss int64 + Ixrss int64 + Idrss int64 + Isrss int64 + Minflt int64 + Majflt int64 + Nswap int64 + Inblock int64 + Oublock int64 + Msgsnd int64 + Msgrcv int64 + Nsignals int64 + Nvcsw int64 + Nivcsw int64 +} + +type Stat_t struct { + Dev uint64 + Ino uint64 + Mode uint32 + Nlink uint32 + Uid uint32 + Gid uint32 + Rdev uint64 + _ uint64 + Size int64 + Blksize int32 + _ int32 + Blocks int64 + Atim Timespec + Mtim Timespec + Ctim Timespec + _ [2]int32 +} + +type Dirent struct { + Ino uint64 + Off int64 + Reclen uint16 + Type uint8 + Name [256]int8 + _ [5]byte +} + +type Flock_t struct { + Type int16 + Whence int16 + Start int64 + Len int64 + Pid int32 + _ [4]byte +} + +type DmNameList struct { + Dev uint64 + Next uint32 + Name [0]byte + _ [4]byte +} + +const ( + FADV_DONTNEED = 0x4 + FADV_NOREUSE = 0x5 +) + +type RawSockaddrNFCLLCP struct { + Sa_family uint16 + Dev_idx uint32 + Target_idx uint32 + Nfc_protocol uint32 + Dsap uint8 + Ssap uint8 + Service_name [63]uint8 + Service_name_len uint64 +} + +type RawSockaddr struct { + Family uint16 + Data [14]int8 +} + +type RawSockaddrAny struct { + Addr RawSockaddr + Pad [96]int8 +} + +type Iovec struct { + Base *byte + Len uint64 +} + +type Msghdr struct { + Name *byte + Namelen uint32 + Iov *Iovec + Iovlen uint64 + Control *byte + Controllen uint64 + Flags int32 + _ [4]byte +} + +type Cmsghdr struct { + Len uint64 + Level int32 + Type int32 +} + +type ifreq struct { + Ifrn [16]byte + Ifru [24]byte +} + +const ( + SizeofSockaddrNFCLLCP = 0x60 + SizeofIovec = 0x10 + SizeofMsghdr = 0x38 + SizeofCmsghdr = 0x10 +) + +const ( + SizeofSockFprog = 0x10 +) + +type PtraceRegs struct { + Regs [32]uint64 + Orig_a0 uint64 + Era uint64 + Badv uint64 + Reserved [10]uint64 +} + +type FdSet struct { + Bits [16]int64 +} + +type Sysinfo_t struct { + Uptime int64 + Loads [3]uint64 + Totalram uint64 + Freeram uint64 + Sharedram uint64 + Bufferram uint64 + Totalswap uint64 + Freeswap uint64 + Procs uint16 + Pad uint16 + Totalhigh uint64 + Freehigh uint64 + Unit uint32 + _ [0]int8 + _ [4]byte +} + +type Ustat_t struct { + Tfree int32 + Tinode uint64 + Fname [6]int8 + Fpack [6]int8 + _ [4]byte +} + +type EpollEvent struct { + Events uint32 + _ int32 + Fd int32 + Pad int32 +} + +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + +const ( + POLLRDHUP = 0x2000 +) + +type Sigset_t struct { + Val [16]uint64 +} + +const _C__NSIG = 0x41 + +type Siginfo struct { + Signo int32 + Errno int32 + Code int32 + _ int32 + _ [112]byte +} + +type Termios struct { + Iflag uint32 + Oflag uint32 + Cflag uint32 + Lflag uint32 + Line uint8 + Cc [19]uint8 + Ispeed uint32 + Ospeed uint32 +} + +type Taskstats struct { + Version uint16 + Ac_exitcode uint32 + Ac_flag uint8 + Ac_nice uint8 + Cpu_count uint64 + Cpu_delay_total uint64 + Blkio_count uint64 + Blkio_delay_total uint64 + Swapin_count uint64 + Swapin_delay_total uint64 + Cpu_run_real_total uint64 + Cpu_run_virtual_total uint64 + Ac_comm [32]int8 + Ac_sched uint8 + Ac_pad [3]uint8 + _ [4]byte + Ac_uid uint32 + Ac_gid uint32 + Ac_pid uint32 + Ac_ppid uint32 + Ac_btime uint32 + Ac_etime uint64 + Ac_utime uint64 + Ac_stime uint64 + Ac_minflt uint64 + Ac_majflt uint64 + Coremem uint64 + Virtmem uint64 + Hiwater_rss uint64 + Hiwater_vm uint64 + Read_char uint64 + Write_char uint64 + Read_syscalls uint64 + Write_syscalls uint64 + Read_bytes uint64 + Write_bytes uint64 + Cancelled_write_bytes uint64 + Nvcsw uint64 + Nivcsw uint64 + Ac_utimescaled uint64 + Ac_stimescaled uint64 + Cpu_scaled_run_real_total uint64 + Freepages_count uint64 + Freepages_delay_total uint64 + Thrashing_count uint64 + Thrashing_delay_total uint64 + Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 +} + +type cpuMask uint64 + +const ( + _NCPUBITS = 0x40 +) + +const ( + CBitFieldMaskBit0 = 0x1 + CBitFieldMaskBit1 = 0x2 + CBitFieldMaskBit2 = 0x4 + CBitFieldMaskBit3 = 0x8 + CBitFieldMaskBit4 = 0x10 + CBitFieldMaskBit5 = 0x20 + CBitFieldMaskBit6 = 0x40 + CBitFieldMaskBit7 = 0x80 + CBitFieldMaskBit8 = 0x100 + CBitFieldMaskBit9 = 0x200 + CBitFieldMaskBit10 = 0x400 + CBitFieldMaskBit11 = 0x800 + CBitFieldMaskBit12 = 0x1000 + CBitFieldMaskBit13 = 0x2000 + CBitFieldMaskBit14 = 0x4000 + CBitFieldMaskBit15 = 0x8000 + CBitFieldMaskBit16 = 0x10000 + CBitFieldMaskBit17 = 0x20000 + CBitFieldMaskBit18 = 0x40000 + CBitFieldMaskBit19 = 0x80000 + CBitFieldMaskBit20 = 0x100000 + CBitFieldMaskBit21 = 0x200000 + CBitFieldMaskBit22 = 0x400000 + CBitFieldMaskBit23 = 0x800000 + CBitFieldMaskBit24 = 0x1000000 + CBitFieldMaskBit25 = 0x2000000 + CBitFieldMaskBit26 = 0x4000000 + CBitFieldMaskBit27 = 0x8000000 + CBitFieldMaskBit28 = 0x10000000 + CBitFieldMaskBit29 = 0x20000000 + CBitFieldMaskBit30 = 0x40000000 + CBitFieldMaskBit31 = 0x80000000 + CBitFieldMaskBit32 = 0x100000000 + CBitFieldMaskBit33 = 0x200000000 + CBitFieldMaskBit34 = 0x400000000 + CBitFieldMaskBit35 = 0x800000000 + CBitFieldMaskBit36 = 0x1000000000 + CBitFieldMaskBit37 = 0x2000000000 + CBitFieldMaskBit38 = 0x4000000000 + CBitFieldMaskBit39 = 0x8000000000 + CBitFieldMaskBit40 = 0x10000000000 + CBitFieldMaskBit41 = 0x20000000000 + CBitFieldMaskBit42 = 0x40000000000 + CBitFieldMaskBit43 = 0x80000000000 + CBitFieldMaskBit44 = 0x100000000000 + CBitFieldMaskBit45 = 0x200000000000 + CBitFieldMaskBit46 = 0x400000000000 + CBitFieldMaskBit47 = 0x800000000000 + CBitFieldMaskBit48 = 0x1000000000000 + CBitFieldMaskBit49 = 0x2000000000000 + CBitFieldMaskBit50 = 0x4000000000000 + CBitFieldMaskBit51 = 0x8000000000000 + CBitFieldMaskBit52 = 0x10000000000000 + CBitFieldMaskBit53 = 0x20000000000000 + CBitFieldMaskBit54 = 0x40000000000000 + CBitFieldMaskBit55 = 0x80000000000000 + CBitFieldMaskBit56 = 0x100000000000000 + CBitFieldMaskBit57 = 0x200000000000000 + CBitFieldMaskBit58 = 0x400000000000000 + CBitFieldMaskBit59 = 0x800000000000000 + CBitFieldMaskBit60 = 0x1000000000000000 + CBitFieldMaskBit61 = 0x2000000000000000 + CBitFieldMaskBit62 = 0x4000000000000000 + CBitFieldMaskBit63 = 0x8000000000000000 +) + +type SockaddrStorage struct { + Family uint16 + _ [118]int8 + _ uint64 +} + +type HDGeometry struct { + Heads uint8 + Sectors uint8 + Cylinders uint16 + Start uint64 +} + +type Statfs_t struct { + Type int64 + Bsize int64 + Blocks uint64 + Bfree uint64 + Bavail uint64 + Files uint64 + Ffree uint64 + Fsid Fsid + Namelen int64 + Frsize int64 + Flags int64 + Spare [4]int64 +} + +type TpacketHdr struct { + Status uint64 + Len uint32 + Snaplen uint32 + Mac uint16 + Net uint16 + Sec uint32 + Usec uint32 + _ [4]byte +} + +const ( + SizeofTpacketHdr = 0x20 +) + +type RTCPLLInfo struct { + Ctrl int32 + Value int32 + Max int32 + Min int32 + Posmult int32 + Negmult int32 + Clock int64 +} + +type BlkpgPartition struct { + Start int64 + Length int64 + Pno int32 + Devname [64]uint8 + Volname [64]uint8 + _ [4]byte +} + +const ( + BLKPG = 0x1269 +) + +type XDPUmemReg struct { + Addr uint64 + Len uint64 + Size uint32 + Headroom uint32 + Flags uint32 + _ [4]byte +} + +type CryptoUserAlg struct { + Name [64]int8 + Driver_name [64]int8 + Module_name [64]int8 + Type uint32 + Mask uint32 + Refcnt uint32 + Flags uint32 +} + +type CryptoStatAEAD struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatAKCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Verify_cnt uint64 + Sign_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatCipher struct { + Type [64]int8 + Encrypt_cnt uint64 + Encrypt_tlen uint64 + Decrypt_cnt uint64 + Decrypt_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatCompress struct { + Type [64]int8 + Compress_cnt uint64 + Compress_tlen uint64 + Decompress_cnt uint64 + Decompress_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatHash struct { + Type [64]int8 + Hash_cnt uint64 + Hash_tlen uint64 + Err_cnt uint64 +} + +type CryptoStatKPP struct { + Type [64]int8 + Setsecret_cnt uint64 + Generate_public_key_cnt uint64 + Compute_shared_secret_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatRNG struct { + Type [64]int8 + Generate_cnt uint64 + Generate_tlen uint64 + Seed_cnt uint64 + Err_cnt uint64 +} + +type CryptoStatLarval struct { + Type [64]int8 +} + +type CryptoReportLarval struct { + Type [64]int8 +} + +type CryptoReportHash struct { + Type [64]int8 + Blocksize uint32 + Digestsize uint32 +} + +type CryptoReportCipher struct { + Type [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 +} + +type CryptoReportBlkCipher struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Min_keysize uint32 + Max_keysize uint32 + Ivsize uint32 +} + +type CryptoReportAEAD struct { + Type [64]int8 + Geniv [64]int8 + Blocksize uint32 + Maxauthsize uint32 + Ivsize uint32 +} + +type CryptoReportComp struct { + Type [64]int8 +} + +type CryptoReportRNG struct { + Type [64]int8 + Seedsize uint32 +} + +type CryptoReportAKCipher struct { + Type [64]int8 +} + +type CryptoReportKPP struct { + Type [64]int8 +} + +type CryptoReportAcomp struct { + Type [64]int8 +} + +type LoopInfo struct { + Number int32 + Device uint32 + Inode uint64 + Rdevice uint32 + Offset int32 + Encrypt_type int32 + Encrypt_key_size int32 + Flags int32 + Name [64]int8 + Encrypt_key [32]uint8 + Init [2]uint64 + Reserved [4]int8 + _ [4]byte +} + +type TIPCSubscr struct { + Seq TIPCServiceRange + Timeout uint32 + Filter uint32 + Handle [8]int8 +} + +type TIPCSIOCLNReq struct { + Peer uint32 + Id uint32 + Linkname [68]int8 +} + +type TIPCSIOCNodeIDReq struct { + Peer uint32 + Id [16]int8 +} + +type PPSKInfo struct { + Assert_sequence uint32 + Clear_sequence uint32 + Assert_tu PPSKTime + Clear_tu PPSKTime + Current_mode int32 + _ [4]byte +} + +const ( + PPS_GETPARAMS = 0x800870a1 + PPS_SETPARAMS = 0x400870a2 + PPS_GETCAP = 0x800870a3 + PPS_FETCH = 0xc00870a4 +) + +const ( + PIDFD_NONBLOCK = 0x800 +) + +type SysvIpcPerm struct { + Key int32 + Uid uint32 + Gid uint32 + Cuid uint32 + Cgid uint32 + Mode uint32 + _ [0]uint8 + Seq uint16 + _ uint16 + _ uint64 + _ uint64 +} +type SysvShmDesc struct { + Perm SysvIpcPerm + Segsz uint64 + Atime int64 + Dtime int64 + Ctime int64 + Cpid int32 + Lpid int32 + Nattch uint64 + _ uint64 + _ uint64 +} diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 4a1555455d..03604cca13 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips && linux @@ -236,6 +236,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -314,6 +318,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index e1084926f6..fe57a7b265 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64 && linux @@ -237,6 +237,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -314,6 +318,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index 8904ac84e5..3f0db4da81 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mips64le && linux @@ -237,6 +237,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -314,6 +318,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index a1a28cc7d9..70ecd3b239 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build mipsle && linux @@ -236,6 +236,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -314,6 +318,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index abdc534523..4e700120db 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc && linux @@ -243,6 +243,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -321,6 +325,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index f4afbbe002..34a57c6992 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64 && linux @@ -244,6 +244,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -321,6 +325,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index ea0b8406df..6b84a47296 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build ppc64le && linux @@ -244,6 +244,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -321,6 +325,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 85d0a0d50d..c4a305fe2e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build riscv64 && linux @@ -262,6 +262,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -339,6 +343,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index 81dd9c22c1..a1f1e4c9e1 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include -fsigned-char linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build s390x && linux @@ -257,6 +257,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x80000 +) + const ( POLLRDHUP = 0x2000 ) @@ -334,6 +338,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 6991b00b5b..df95ebf3a1 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -1,4 +1,4 @@ -// cgo -godefs -- -Wall -Werror -static -I/tmp/include /build/unix/linux/types.go | go run mkpost.go +// cgo -godefs -- -Wall -Werror -static -I/tmp/include linux/types.go | go run mkpost.go // Code generated by the command above; see README.md. DO NOT EDIT. //go:build sparc64 && linux @@ -239,6 +239,10 @@ type EpollEvent struct { Pad int32 } +const ( + OPEN_TREE_CLOEXEC = 0x400000 +) + const ( POLLRDHUP = 0x800 ) @@ -316,6 +320,8 @@ type Taskstats struct { Thrashing_count uint64 Thrashing_delay_total uint64 Ac_btime64 uint64 + Compact_count uint64 + Compact_delay_total uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go index baf5fe6504..2ed718ca06 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_386.go @@ -94,10 +94,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte Pad_cgo_0 [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go index e21ae8ecfa..b4fb97ebe6 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_amd64.go @@ -96,10 +96,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte _ [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go index f190651cd9..2c4675040e 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm.go @@ -98,10 +98,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte _ [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go index 84747c582c..ddee045147 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_arm64.go @@ -94,10 +94,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte _ [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go index ac5c8b6370..eb13d4e8bf 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_openbsd_mips64.go @@ -94,10 +94,10 @@ type Statfs_t struct { F_namemax uint32 F_owner uint32 F_ctime uint64 - F_fstypename [16]int8 - F_mntonname [90]int8 - F_mntfromname [90]int8 - F_mntfromspec [90]int8 + F_fstypename [16]byte + F_mntonname [90]byte + F_mntfromname [90]byte + F_mntfromspec [90]byte _ [2]byte Mount_info [160]byte } diff --git a/vendor/golang.org/x/sys/windows/exec_windows.go b/vendor/golang.org/x/sys/windows/exec_windows.go index 855698bb28..75980fd44a 100644 --- a/vendor/golang.org/x/sys/windows/exec_windows.go +++ b/vendor/golang.org/x/sys/windows/exec_windows.go @@ -15,11 +15,11 @@ import ( // in http://msdn.microsoft.com/en-us/library/ms880421. // This function returns "" (2 double quotes) if s is empty. // Alternatively, these transformations are done: -// - every back slash (\) is doubled, but only if immediately -// followed by double quote ("); -// - every double quote (") is escaped by back slash (\); -// - finally, s is wrapped with double quotes (arg -> "arg"), -// but only if there is space or tab inside s. +// - every back slash (\) is doubled, but only if immediately +// followed by double quote ("); +// - every double quote (") is escaped by back slash (\); +// - finally, s is wrapped with double quotes (arg -> "arg"), +// but only if there is space or tab inside s. func EscapeArg(s string) string { if len(s) == 0 { return "\"\"" diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index ce3075c453..636e5de60e 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -623,7 +623,6 @@ var ( func getStdHandle(stdhandle uint32) (fd Handle) { r, _ := GetStdHandle(stdhandle) - CloseOnExec(r) return r } diff --git a/vendor/golang.org/x/time/rate/rate.go b/vendor/golang.org/x/time/rate/rate.go index 0cfcc8463c..e77ade398e 100644 --- a/vendor/golang.org/x/time/rate/rate.go +++ b/vendor/golang.org/x/time/rate/rate.go @@ -196,13 +196,15 @@ func (lim *Limiter) Reserve() *Reservation { // The Limiter takes this Reservation into account when allowing future events. // The returned Reservation’s OK() method returns false if n exceeds the Limiter's burst size. // Usage example: -// r := lim.ReserveN(time.Now(), 1) -// if !r.OK() { -// // Not allowed to act! Did you remember to set lim.burst to be > 0 ? -// return -// } -// time.Sleep(r.Delay()) -// Act() +// +// r := lim.ReserveN(time.Now(), 1) +// if !r.OK() { +// // Not allowed to act! Did you remember to set lim.burst to be > 0 ? +// return +// } +// time.Sleep(r.Delay()) +// Act() +// // Use this method if you wish to wait and slow down in accordance with the rate limit without dropping events. // If you need to respect a deadline or cancel the delay, use Wait instead. // To drop or skip events exceeding rate limit, use Allow instead. @@ -306,15 +308,27 @@ func (lim *Limiter) SetBurstAt(now time.Time, newBurst int) { // reserveN returns Reservation, not *Reservation, to avoid allocation in AllowN and WaitN. func (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duration) Reservation { lim.mu.Lock() + defer lim.mu.Unlock() if lim.limit == Inf { - lim.mu.Unlock() return Reservation{ ok: true, lim: lim, tokens: n, timeToAct: now, } + } else if lim.limit == 0 { + var ok bool + if lim.burst >= n { + ok = true + lim.burst -= n + } + return Reservation{ + ok: ok, + lim: lim, + tokens: lim.burst, + timeToAct: now, + } } now, last, tokens := lim.advance(now) @@ -351,7 +365,6 @@ func (lim *Limiter) reserveN(now time.Time, n int, maxFutureReserve time.Duratio lim.last = last } - lim.mu.Unlock() return r } @@ -377,6 +390,9 @@ func (lim *Limiter) advance(now time.Time) (newNow time.Time, newLast time.Time, // durationFromTokens is a unit conversion function from the number of tokens to the duration // of time it takes to accumulate them at a rate of limit tokens per second. func (limit Limit) durationFromTokens(tokens float64) time.Duration { + if limit <= 0 { + return InfDuration + } seconds := tokens / float64(limit) return time.Duration(float64(time.Second) * seconds) } @@ -384,5 +400,8 @@ func (limit Limit) durationFromTokens(tokens float64) time.Duration { // tokensFromDuration is a unit conversion function from a time duration to the number of tokens // which could be accumulated during that duration at a rate of limit tokens per second. func (limit Limit) tokensFromDuration(d time.Duration) float64 { + if limit <= 0 { + return 0 + } return d.Seconds() * float64(limit) } diff --git a/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go index 1a33cd5c6c..84cfb807d7 100644 --- a/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go +++ b/vendor/golang.org/x/tools/go/internal/gcimporter/iimport.go @@ -237,6 +237,15 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data pkg.MarkComplete() } + // SetConstraint can't be called if the constraint type is not yet complete. + // When type params are created in the 'P' case of (*importReader).obj(), + // the associated constraint type may not be complete due to recursion. + // Therefore, we defer calling SetConstraint there, and call it here instead + // after all types are complete. + for _, d := range p.later { + typeparams.SetTypeParamConstraint(d.t, d.constraint) + } + for _, typ := range p.interfaceList { typ.Complete() } @@ -244,6 +253,11 @@ func iimportCommon(fset *token.FileSet, imports map[string]*types.Package, data return pkgs, nil } +type setConstraintArgs struct { + t *typeparams.TypeParam + constraint types.Type +} + type iimporter struct { version int ipath string @@ -260,6 +274,9 @@ type iimporter struct { fake fakeFileSet interfaceList []*types.Interface + // Arguments for calls to SetConstraint that are deferred due to recursive types + later []setConstraintArgs + indent int // for tracing support } @@ -458,7 +475,11 @@ func (r *importReader) obj(name string) { } typeparams.MarkImplicit(iface) } - typeparams.SetTypeParamConstraint(t, constraint) + // The constraint type may not be complete, if we + // are in the middle of a type recursion involving type + // constraints. So, we defer SetConstraint until we have + // completely set up all types in ImportData. + r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint}) case 'V': typ := r.typ() diff --git a/vendor/golang.org/x/tools/internal/gocommand/invoke.go b/vendor/golang.org/x/tools/internal/gocommand/invoke.go index 8659a0c5da..f753368346 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/invoke.go +++ b/vendor/golang.org/x/tools/internal/gocommand/invoke.go @@ -9,7 +9,6 @@ import ( "bytes" "context" "fmt" - exec "golang.org/x/sys/execabs" "io" "os" "regexp" @@ -18,6 +17,8 @@ import ( "sync" "time" + exec "golang.org/x/sys/execabs" + "golang.org/x/tools/internal/event" ) @@ -131,9 +132,16 @@ type Invocation struct { Verb string Args []string BuildFlags []string - ModFlag string - ModFile string - Overlay string + + // If ModFlag is set, the go command is invoked with -mod=ModFlag. + ModFlag string + + // If ModFile is set, the go command is invoked with -modfile=ModFile. + ModFile string + + // If Overlay is set, the go command is invoked with -overlay=Overlay. + Overlay string + // If CleanEnv is set, the invocation will run only with the environment // in Env, not starting with os.Environ. CleanEnv bool diff --git a/vendor/golang.org/x/tools/internal/gocommand/vendor.go b/vendor/golang.org/x/tools/internal/gocommand/vendor.go index 5e75bd6d8f..2d3d408c0b 100644 --- a/vendor/golang.org/x/tools/internal/gocommand/vendor.go +++ b/vendor/golang.org/x/tools/internal/gocommand/vendor.go @@ -38,10 +38,10 @@ var modFlagRegexp = regexp.MustCompile(`-mod[ =](\w+)`) // with the supplied context.Context and Invocation. The Invocation can contain pre-defined fields, // of which only Verb and Args are modified to run the appropriate Go command. // Inspired by setDefaultBuildMod in modload/init.go -func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) { +func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (bool, *ModuleJSON, error) { mainMod, go114, err := getMainModuleAnd114(ctx, inv, r) if err != nil { - return nil, false, err + return false, nil, err } // We check the GOFLAGS to see if there is anything overridden or not. @@ -49,7 +49,7 @@ func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, inv.Args = []string{"GOFLAGS"} stdout, err := r.Run(ctx, inv) if err != nil { - return nil, false, err + return false, nil, err } goflags := string(bytes.TrimSpace(stdout.Bytes())) matches := modFlagRegexp.FindStringSubmatch(goflags) @@ -57,25 +57,27 @@ func VendorEnabled(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, if len(matches) != 0 { modFlag = matches[1] } - if modFlag != "" { - // Don't override an explicit '-mod=' argument. - return mainMod, modFlag == "vendor", nil + // Don't override an explicit '-mod=' argument. + if modFlag == "vendor" { + return true, mainMod, nil + } else if modFlag != "" { + return false, nil, nil } if mainMod == nil || !go114 { - return mainMod, false, nil + return false, nil, nil } // Check 1.14's automatic vendor mode. if fi, err := os.Stat(filepath.Join(mainMod.Dir, "vendor")); err == nil && fi.IsDir() { if mainMod.GoVersion != "" && semver.Compare("v"+mainMod.GoVersion, "v1.14") >= 0 { // The Go version is at least 1.14, and a vendor directory exists. // Set -mod=vendor by default. - return mainMod, true, nil + return true, mainMod, nil } } - return mainMod, false, nil + return false, nil, nil } -// getMainModuleAnd114 gets the main module's information and whether the +// getMainModuleAnd114 gets one of the main modules' information and whether the // go command in use is 1.14+. This is the information needed to figure out // if vendoring should be enabled. func getMainModuleAnd114(ctx context.Context, inv Invocation, r *Runner) (*ModuleJSON, bool, error) { diff --git a/vendor/golang.org/x/tools/internal/imports/imports.go b/vendor/golang.org/x/tools/internal/imports/imports.go index 2815edc33d..25973989e6 100644 --- a/vendor/golang.org/x/tools/internal/imports/imports.go +++ b/vendor/golang.org/x/tools/internal/imports/imports.go @@ -306,7 +306,7 @@ func matchSpace(orig []byte, src []byte) []byte { return b.Bytes() } -var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+)"`) +var impLine = regexp.MustCompile(`^\s+(?:[\w\.]+\s+)?"(.+?)"`) func addImportSpaces(r io.Reader, breaks []string) ([]byte, error) { var out bytes.Buffer diff --git a/vendor/golang.org/x/tools/internal/imports/mod.go b/vendor/golang.org/x/tools/internal/imports/mod.go index dff6d55362..2bcf41f5fa 100644 --- a/vendor/golang.org/x/tools/internal/imports/mod.go +++ b/vendor/golang.org/x/tools/internal/imports/mod.go @@ -34,7 +34,8 @@ type ModuleResolver struct { scannedRoots map[gopathwalk.Root]bool initialized bool - main *gocommand.ModuleJSON + mains []*gocommand.ModuleJSON + mainByDir map[string]*gocommand.ModuleJSON modsByModPath []*gocommand.ModuleJSON // All modules, ordered by # of path components in module Path... modsByDir []*gocommand.ModuleJSON // ...or Dir. @@ -69,21 +70,21 @@ func (r *ModuleResolver) init() error { Logf: r.env.Logf, WorkingDir: r.env.WorkingDir, } - mainMod, vendorEnabled, err := gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner) + vendorEnabled, mainModVendor, err := gocommand.VendorEnabled(context.TODO(), inv, r.env.GocmdRunner) if err != nil { return err } - if mainMod != nil && vendorEnabled { + if mainModVendor != nil && vendorEnabled { // Vendor mode is on, so all the non-Main modules are irrelevant, // and we need to search /vendor for everything. - r.main = mainMod + r.mains = []*gocommand.ModuleJSON{mainModVendor} r.dummyVendorMod = &gocommand.ModuleJSON{ Path: "", - Dir: filepath.Join(mainMod.Dir, "vendor"), + Dir: filepath.Join(mainModVendor.Dir, "vendor"), } - r.modsByModPath = []*gocommand.ModuleJSON{mainMod, r.dummyVendorMod} - r.modsByDir = []*gocommand.ModuleJSON{mainMod, r.dummyVendorMod} + r.modsByModPath = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod} + r.modsByDir = []*gocommand.ModuleJSON{mainModVendor, r.dummyVendorMod} } else { // Vendor mode is off, so run go list -m ... to find everything. err := r.initAllMods() @@ -122,8 +123,10 @@ func (r *ModuleResolver) init() error { r.roots = []gopathwalk.Root{ {filepath.Join(goenv["GOROOT"], "/src"), gopathwalk.RootGOROOT}, } - if r.main != nil { - r.roots = append(r.roots, gopathwalk.Root{r.main.Dir, gopathwalk.RootCurrentModule}) + r.mainByDir = make(map[string]*gocommand.ModuleJSON) + for _, main := range r.mains { + r.roots = append(r.roots, gopathwalk.Root{main.Dir, gopathwalk.RootCurrentModule}) + r.mainByDir[main.Dir] = main } if vendorEnabled { r.roots = append(r.roots, gopathwalk.Root{r.dummyVendorMod.Dir, gopathwalk.RootOther}) @@ -189,7 +192,7 @@ func (r *ModuleResolver) initAllMods() error { r.modsByModPath = append(r.modsByModPath, mod) r.modsByDir = append(r.modsByDir, mod) if mod.Main { - r.main = mod + r.mains = append(r.mains, mod) } } return nil @@ -609,7 +612,7 @@ func (r *ModuleResolver) scanDirForPackage(root gopathwalk.Root, dir string) dir } switch root.Type { case gopathwalk.RootCurrentModule: - importPath = path.Join(r.main.Path, filepath.ToSlash(subdir)) + importPath = path.Join(r.mainByDir[root.Path].Path, filepath.ToSlash(subdir)) case gopathwalk.RootModuleCache: matches := modCacheRegexp.FindStringSubmatch(subdir) if len(matches) == 0 { diff --git a/vendor/golang.org/x/tools/internal/typeparams/common.go b/vendor/golang.org/x/tools/internal/typeparams/common.go index 1222764b6a..ab6b30b83e 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/common.go +++ b/vendor/golang.org/x/tools/internal/typeparams/common.go @@ -77,3 +77,104 @@ func IsTypeParam(t types.Type) bool { _, ok := t.(*TypeParam) return ok } + +// OriginMethod returns the origin method associated with the method fn. +// For methods on a non-generic receiver base type, this is just +// fn. However, for methods with a generic receiver, OriginMethod returns the +// corresponding method in the method set of the origin type. +// +// As a special case, if fn is not a method (has no receiver), OriginMethod +// returns fn. +func OriginMethod(fn *types.Func) *types.Func { + recv := fn.Type().(*types.Signature).Recv() + if recv == nil { + + return fn + } + base := recv.Type() + p, isPtr := base.(*types.Pointer) + if isPtr { + base = p.Elem() + } + named, isNamed := base.(*types.Named) + if !isNamed { + // Receiver is a *types.Interface. + return fn + } + if ForNamed(named).Len() == 0 { + // Receiver base has no type parameters, so we can avoid the lookup below. + return fn + } + orig := NamedTypeOrigin(named) + gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name()) + return gfn.(*types.Func) +} + +// GenericAssignableTo is a generalization of types.AssignableTo that +// implements the following rule for uninstantiated generic types: +// +// If V and T are generic named types, then V is considered assignable to T if, +// for every possible instantation of V[A_1, ..., A_N], the instantiation +// T[A_1, ..., A_N] is valid and V[A_1, ..., A_N] implements T[A_1, ..., A_N]. +// +// If T has structural constraints, they must be satisfied by V. +// +// For example, consider the following type declarations: +// +// type Interface[T any] interface { +// Accept(T) +// } +// +// type Container[T any] struct { +// Element T +// } +// +// func (c Container[T]) Accept(t T) { c.Element = t } +// +// In this case, GenericAssignableTo reports that instantiations of Container +// are assignable to the corresponding instantiation of Interface. +func GenericAssignableTo(ctxt *Context, V, T types.Type) bool { + // If V and T are not both named, or do not have matching non-empty type + // parameter lists, fall back on types.AssignableTo. + + VN, Vnamed := V.(*types.Named) + TN, Tnamed := T.(*types.Named) + if !Vnamed || !Tnamed { + return types.AssignableTo(V, T) + } + + vtparams := ForNamed(VN) + ttparams := ForNamed(TN) + if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || NamedTypeArgs(VN).Len() != 0 || NamedTypeArgs(TN).Len() != 0 { + return types.AssignableTo(V, T) + } + + // V and T have the same (non-zero) number of type params. Instantiate both + // with the type parameters of V. This must always succeed for V, and will + // succeed for T if and only if the type set of each type parameter of V is a + // subset of the type set of the corresponding type parameter of T, meaning + // that every instantiation of V corresponds to a valid instantiation of T. + + // Minor optimization: ensure we share a context across the two + // instantiations below. + if ctxt == nil { + ctxt = NewContext() + } + + var targs []types.Type + for i := 0; i < vtparams.Len(); i++ { + targs = append(targs, vtparams.At(i)) + } + + vinst, err := Instantiate(ctxt, V, targs, true) + if err != nil { + panic("type parameters should satisfy their own constraints") + } + + tinst, err := Instantiate(ctxt, T, targs, true) + if err != nil { + return false + } + + return types.AssignableTo(vinst, tinst) +} diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go index 5fd3fc3515..b4788978ff 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go117.go @@ -185,6 +185,11 @@ func GetInstances(info *types.Info) map[*ast.Ident]Instance { return nil } // this Go version. type Context struct{} +// NewContext returns a placeholder Context instance. +func NewContext() *Context { + return &Context{} +} + // Instantiate is unsupported on this Go version, and panics. func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) { unsupported() diff --git a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go index 7470aed8c9..114a36b866 100644 --- a/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go +++ b/vendor/golang.org/x/tools/internal/typeparams/typeparams_go118.go @@ -140,6 +140,11 @@ func GetInstances(info *types.Info) map[*ast.Ident]Instance { // Context is an alias for types.Context. type Context = types.Context +// NewContext calls types.NewContext. +func NewContext() *Context { + return types.NewContext() +} + // Instantiate calls types.Instantiate. func Instantiate(ctxt *Context, typ types.Type, targs []types.Type, validate bool) (types.Type, error) { return types.Instantiate(ctxt, typ, targs, validate) diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go index fa2834e2ab..d38ee3c27c 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/errorcode.go @@ -1365,4 +1365,162 @@ const ( // return i // } InvalidGo + + // All codes below were added in Go 1.17. + + /* decl */ + + // BadDecl occurs when a declaration has invalid syntax. + BadDecl + + // RepeatedDecl occurs when an identifier occurs more than once on the left + // hand side of a short variable declaration. + // + // Example: + // func _() { + // x, y, y := 1, 2, 3 + // } + RepeatedDecl + + /* unsafe */ + + // InvalidUnsafeAdd occurs when unsafe.Add is called with a + // length argument that is not of integer type. + // + // Example: + // import "unsafe" + // + // var p unsafe.Pointer + // var _ = unsafe.Add(p, float64(1)) + InvalidUnsafeAdd + + // InvalidUnsafeSlice occurs when unsafe.Slice is called with a + // pointer argument that is not of pointer type or a length argument + // that is not of integer type, negative, or out of bounds. + // + // Example: + // import "unsafe" + // + // var x int + // var _ = unsafe.Slice(x, 1) + // + // Example: + // import "unsafe" + // + // var x int + // var _ = unsafe.Slice(&x, float64(1)) + // + // Example: + // import "unsafe" + // + // var x int + // var _ = unsafe.Slice(&x, -1) + // + // Example: + // import "unsafe" + // + // var x int + // var _ = unsafe.Slice(&x, uint64(1) << 63) + InvalidUnsafeSlice + + // All codes below were added in Go 1.18. + + /* features */ + + // UnsupportedFeature occurs when a language feature is used that is not + // supported at this Go version. + UnsupportedFeature + + /* type params */ + + // NotAGenericType occurs when a non-generic type is used where a generic + // type is expected: in type or function instantiation. + // + // Example: + // type T int + // + // var _ T[int] + NotAGenericType + + // WrongTypeArgCount occurs when a type or function is instantiated with an + // incorrent number of type arguments, including when a generic type or + // function is used without instantiation. + // + // Errors inolving failed type inference are assigned other error codes. + // + // Example: + // type T[p any] int + // + // var _ T[int, string] + // + // Example: + // func f[T any]() {} + // + // var x = f + WrongTypeArgCount + + // CannotInferTypeArgs occurs when type or function type argument inference + // fails to infer all type arguments. + // + // Example: + // func f[T any]() {} + // + // func _() { + // f() + // } + // + // Example: + // type N[P, Q any] struct{} + // + // var _ N[int] + CannotInferTypeArgs + + // InvalidTypeArg occurs when a type argument does not satisfy its + // corresponding type parameter constraints. + // + // Example: + // type T[P ~int] struct{} + // + // var _ T[string] + InvalidTypeArg // arguments? InferenceFailed + + // InvalidInstanceCycle occurs when an invalid cycle is detected + // within the instantiation graph. + // + // Example: + // func f[T any]() { f[*T]() } + InvalidInstanceCycle + + // InvalidUnion occurs when an embedded union or approximation element is + // not valid. + // + // Example: + // type _ interface { + // ~int | interface{ m() } + // } + InvalidUnion + + // MisplacedConstraintIface occurs when a constraint-type interface is used + // outside of constraint position. + // + // Example: + // type I interface { ~int } + // + // var _ I + MisplacedConstraintIface + + // InvalidMethodTypeParams occurs when methods have type parameters. + // + // It cannot be encountered with an AST parsed using go/parser. + InvalidMethodTypeParams + + // MisplacedTypeParam occurs when a type parameter is used in a place where + // it is not permitted. + // + // Example: + // type T[P any] P + // + // Example: + // type T[P any] struct{ *P } + MisplacedTypeParam ) diff --git a/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go b/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go index 3e5842a5f0..de90e9515a 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.go @@ -138,11 +138,25 @@ func _() { _ = x[UnusedResults-128] _ = x[InvalidDefer-129] _ = x[InvalidGo-130] + _ = x[BadDecl-131] + _ = x[RepeatedDecl-132] + _ = x[InvalidUnsafeAdd-133] + _ = x[InvalidUnsafeSlice-134] + _ = x[UnsupportedFeature-135] + _ = x[NotAGenericType-136] + _ = x[WrongTypeArgCount-137] + _ = x[CannotInferTypeArgs-138] + _ = x[InvalidTypeArg-139] + _ = x[InvalidInstanceCycle-140] + _ = x[InvalidUnion-141] + _ = x[MisplacedConstraintIface-142] + _ = x[InvalidMethodTypeParams-143] + _ = x[MisplacedTypeParam-144] } -const _ErrorCode_name = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGo" +const _ErrorCode_name = "TestBlankPkgNameMismatchedPkgNameInvalidPkgUseBadImportPathBrokenImportImportCRenamedUnusedImportInvalidInitCycleDuplicateDeclInvalidDeclCycleInvalidTypeCycleInvalidConstInitInvalidConstValInvalidConstTypeUntypedNilWrongAssignCountUnassignableOperandNoNewVarMultiValAssignOpInvalidIfaceAssignInvalidChanAssignIncompatibleAssignUnaddressableFieldAssignNotATypeInvalidArrayLenBlankIfaceMethodIncomparableMapKeyInvalidIfaceEmbedInvalidPtrEmbedBadRecvInvalidRecvDuplicateFieldAndMethodDuplicateMethodInvalidBlankInvalidIotaMissingInitBodyInvalidInitSigInvalidInitDeclInvalidMainDeclTooManyValuesNotAnExprTruncatedFloatNumericOverflowUndefinedOpMismatchedTypesDivByZeroNonNumericIncDecUnaddressableOperandInvalidIndirectionNonIndexableOperandInvalidIndexSwappedSliceIndicesNonSliceableOperandInvalidSliceExprInvalidShiftCountInvalidShiftOperandInvalidReceiveInvalidSendDuplicateLitKeyMissingLitKeyInvalidLitIndexOversizeArrayLitMixedStructLitInvalidStructLitMissingLitFieldDuplicateLitFieldUnexportedLitFieldInvalidLitFieldUntypedLitInvalidLitAmbiguousSelectorUndeclaredImportedNameUnexportedNameUndeclaredNameMissingFieldOrMethodBadDotDotDotSyntaxNonVariadicDotDotDotMisplacedDotDotDotInvalidDotDotDotOperandInvalidDotDotDotUncalledBuiltinInvalidAppendInvalidCapInvalidCloseInvalidCopyInvalidComplexInvalidDeleteInvalidImagInvalidLenSwappedMakeArgsInvalidMakeInvalidRealInvalidAssertImpossibleAssertInvalidConversionInvalidUntypedConversionBadOffsetofSyntaxInvalidOffsetofUnusedExprUnusedVarMissingReturnWrongResultCountOutOfScopeResultInvalidCondInvalidPostDeclInvalidChanRangeInvalidIterVarInvalidRangeExprMisplacedBreakMisplacedContinueMisplacedFallthroughDuplicateCaseDuplicateDefaultBadTypeKeywordInvalidTypeSwitchInvalidExprSwitchInvalidSelectCaseUndeclaredLabelDuplicateLabelMisplacedLabelUnusedLabelJumpOverDeclJumpIntoBlockInvalidMethodExprWrongArgCountInvalidCallUnusedResultsInvalidDeferInvalidGoBadDeclRepeatedDeclInvalidUnsafeAddInvalidUnsafeSliceUnsupportedFeatureNotAGenericTypeWrongTypeArgCountCannotInferTypeArgsInvalidTypeArgInvalidInstanceCycleInvalidUnionMisplacedConstraintIfaceInvalidMethodTypeParamsMisplacedTypeParam" -var _ErrorCode_index = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 215, 231, 250, 258, 274, 292, 309, 327, 351, 359, 374, 390, 408, 425, 440, 447, 458, 481, 496, 508, 519, 534, 548, 563, 578, 591, 600, 614, 629, 640, 655, 664, 680, 700, 718, 737, 749, 768, 787, 803, 820, 839, 853, 864, 879, 892, 907, 923, 937, 953, 968, 985, 1003, 1018, 1028, 1038, 1055, 1077, 1091, 1105, 1125, 1143, 1163, 1181, 1204, 1220, 1235, 1248, 1258, 1270, 1281, 1295, 1308, 1319, 1329, 1344, 1355, 1366, 1379, 1395, 1412, 1436, 1453, 1468, 1478, 1487, 1500, 1516, 1532, 1543, 1558, 1574, 1588, 1604, 1618, 1635, 1655, 1668, 1684, 1698, 1715, 1732, 1749, 1764, 1778, 1792, 1803, 1815, 1828, 1845, 1858, 1869, 1882, 1894, 1903} +var _ErrorCode_index = [...]uint16{0, 4, 16, 33, 46, 59, 71, 85, 97, 113, 126, 142, 158, 174, 189, 205, 215, 231, 250, 258, 274, 292, 309, 327, 351, 359, 374, 390, 408, 425, 440, 447, 458, 481, 496, 508, 519, 534, 548, 563, 578, 591, 600, 614, 629, 640, 655, 664, 680, 700, 718, 737, 749, 768, 787, 803, 820, 839, 853, 864, 879, 892, 907, 923, 937, 953, 968, 985, 1003, 1018, 1028, 1038, 1055, 1077, 1091, 1105, 1125, 1143, 1163, 1181, 1204, 1220, 1235, 1248, 1258, 1270, 1281, 1295, 1308, 1319, 1329, 1344, 1355, 1366, 1379, 1395, 1412, 1436, 1453, 1468, 1478, 1487, 1500, 1516, 1532, 1543, 1558, 1574, 1588, 1604, 1618, 1635, 1655, 1668, 1684, 1698, 1715, 1732, 1749, 1764, 1778, 1792, 1803, 1815, 1828, 1845, 1858, 1869, 1882, 1894, 1903, 1910, 1922, 1938, 1956, 1974, 1989, 2006, 2025, 2039, 2059, 2071, 2095, 2118, 2136} func (i ErrorCode) String() string { i -= 1 diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types.go b/vendor/golang.org/x/tools/internal/typesinternal/types.go index 7c77c2fbc0..ce7d4351b2 100644 --- a/vendor/golang.org/x/tools/internal/typesinternal/types.go +++ b/vendor/golang.org/x/tools/internal/typesinternal/types.go @@ -48,3 +48,5 @@ func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos, } return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true } + +var SetGoVersion = func(conf *types.Config, version string) bool { return false } diff --git a/vendor/golang.org/x/tools/internal/typesinternal/types_118.go b/vendor/golang.org/x/tools/internal/typesinternal/types_118.go new file mode 100644 index 0000000000..a42b072a67 --- /dev/null +++ b/vendor/golang.org/x/tools/internal/typesinternal/types_118.go @@ -0,0 +1,19 @@ +// Copyright 2021 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.18 +// +build go1.18 + +package typesinternal + +import ( + "go/types" +) + +func init() { + SetGoVersion = func(conf *types.Config, version string) bool { + conf.GoVersion = version + return true + } +} diff --git a/vendor/golang.org/x/xerrors/doc.go b/vendor/golang.org/x/xerrors/doc.go index eef99d9d54..2ef99f5a87 100644 --- a/vendor/golang.org/x/xerrors/doc.go +++ b/vendor/golang.org/x/xerrors/doc.go @@ -5,7 +5,8 @@ // Package xerrors implements functions to manipulate errors. // // This package is based on the Go 2 proposal for error values: -// https://golang.org/design/29934-error-values +// +// https://golang.org/design/29934-error-values // // These functions were incorporated into the standard library's errors package // in Go 1.13: diff --git a/vendor/golang.org/x/xerrors/fmt.go b/vendor/golang.org/x/xerrors/fmt.go index 829862ddf6..6df18669fa 100644 --- a/vendor/golang.org/x/xerrors/fmt.go +++ b/vendor/golang.org/x/xerrors/fmt.go @@ -33,6 +33,8 @@ const percentBangString = "%!" // It is invalid to include more than one %w verb or to supply it with an // operand that does not implement the error interface. The %w verb is otherwise // a synonym for %v. +// +// Deprecated: As of Go 1.13, use fmt.Errorf instead. func Errorf(format string, a ...interface{}) error { format = formatPlusW(format) // Support a ": %[wsv]" suffix, which works well with xerrors.Formatter. diff --git a/vendor/golang.org/x/xerrors/go.mod b/vendor/golang.org/x/xerrors/go.mod deleted file mode 100644 index 870d4f612d..0000000000 --- a/vendor/golang.org/x/xerrors/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module golang.org/x/xerrors - -go 1.11 diff --git a/vendor/golang.org/x/xerrors/wrap.go b/vendor/golang.org/x/xerrors/wrap.go index 9a3b510374..9842758ca7 100644 --- a/vendor/golang.org/x/xerrors/wrap.go +++ b/vendor/golang.org/x/xerrors/wrap.go @@ -35,6 +35,8 @@ func (e noWrapper) FormatError(p Printer) (next error) { // Unwrap returns the result of calling the Unwrap method on err, if err implements // Unwrap. Otherwise, Unwrap returns nil. +// +// Deprecated: As of Go 1.13, use errors.Unwrap instead. func Unwrap(err error) error { u, ok := err.(Wrapper) if !ok { @@ -47,6 +49,8 @@ func Unwrap(err error) error { // // An error is considered to match a target if it is equal to that target or if // it implements a method Is(error) bool such that Is(target) returns true. +// +// Deprecated: As of Go 1.13, use errors.Is instead. func Is(err, target error) bool { if target == nil { return err == target @@ -77,6 +81,8 @@ func Is(err, target error) bool { // // The As method should set the target to its value and return true if err // matches the type to which target points. +// +// Deprecated: As of Go 1.13, use errors.As instead. func As(err error, target interface{}) bool { if target == nil { panic("errors: target cannot be nil") diff --git a/vendor/google.golang.org/api/internal/version.go b/vendor/google.golang.org/api/internal/version.go index 66b62400ad..060319e1ba 100644 --- a/vendor/google.golang.org/api/internal/version.go +++ b/vendor/google.golang.org/api/internal/version.go @@ -5,4 +5,4 @@ package internal // Version is the current tagged release of the library. -const Version = "0.74.0" +const Version = "0.81.0" diff --git a/vendor/google.golang.org/api/transport/grpc/dial.go b/vendor/google.golang.org/api/transport/grpc/dial.go index d25497868c..c86f56507f 100644 --- a/vendor/google.golang.org/api/transport/grpc/dial.go +++ b/vendor/google.golang.org/api/transport/grpc/dial.go @@ -150,8 +150,7 @@ func dial(ctx context.Context, insecure bool, o *internal.DialSettings) (*grpc.C grpcOpts = append(grpcOpts, timeoutDialerOption) } // Check if google-c2p resolver is enabled for DirectPath - // TODO(mohanli): remove grpc version guard once google-api-go-client is able to depends on the latest grpc - if grpc.Version >= "1.42" && strings.EqualFold(os.Getenv(enableDirectPathXds), "true") { + if strings.EqualFold(os.Getenv(enableDirectPathXds), "true") { // google-c2p resolver target must not have a port number if addr, _, err := net.SplitHostPort(endpoint); err == nil { endpoint = "google-c2p-experimental:///" + addr diff --git a/vendor/google.golang.org/appengine/go.mod b/vendor/google.golang.org/appengine/go.mod deleted file mode 100644 index 635c34f5a1..0000000000 --- a/vendor/google.golang.org/appengine/go.mod +++ /dev/null @@ -1,9 +0,0 @@ -module google.golang.org/appengine - -go 1.11 - -require ( - github.com/golang/protobuf v1.3.1 - golang.org/x/net v0.0.0-20190603091049-60506f45cf65 - golang.org/x/text v0.3.2 -) diff --git a/vendor/google.golang.org/appengine/go.sum b/vendor/google.golang.org/appengine/go.sum deleted file mode 100644 index ce22f6856c..0000000000 --- a/vendor/google.golang.org/appengine/go.sum +++ /dev/null @@ -1,11 +0,0 @@ -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65 h1:+rhAzEzT3f4JtomfC371qB+0Ola2caSKcY69NUBZrRQ= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/vendor/google.golang.org/grpc/clientconn.go b/vendor/google.golang.org/grpc/clientconn.go index ea9836d28b..de6d41c238 100644 --- a/vendor/google.golang.org/grpc/clientconn.go +++ b/vendor/google.golang.org/grpc/clientconn.go @@ -801,16 +801,31 @@ func (ac *addrConn) connect() error { return nil } +func equalAddresses(a, b []resolver.Address) bool { + if len(a) != len(b) { + return false + } + for i, v := range a { + if !v.Equal(b[i]) { + return false + } + } + return true +} + // tryUpdateAddrs tries to update ac.addrs with the new addresses list. // -// If ac is Connecting, it returns false. The caller should tear down the ac and -// create a new one. Note that the backoff will be reset when this happens. -// // If ac is TransientFailure, it updates ac.addrs and returns true. The updated // addresses will be picked up by retry in the next iteration after backoff. // // If ac is Shutdown or Idle, it updates ac.addrs and returns true. // +// If the addresses is the same as the old list, it does nothing and returns +// true. +// +// If ac is Connecting, it returns false. The caller should tear down the ac and +// create a new one. Note that the backoff will be reset when this happens. +// // If ac is Ready, it checks whether current connected address of ac is in the // new addrs list. // - If true, it updates ac.addrs and returns true. The ac will keep using @@ -827,6 +842,10 @@ func (ac *addrConn) tryUpdateAddrs(addrs []resolver.Address) bool { return true } + if equalAddresses(ac.addrs, addrs) { + return true + } + if ac.state == connectivity.Connecting { return false } @@ -1219,6 +1238,7 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne ac.mu.Lock() defer ac.mu.Unlock() defer connClosed.Fire() + defer hcancel() if !hcStarted || hctx.Err() != nil { // We didn't start the health check or set the state to READY, so // no need to do anything else here. @@ -1229,7 +1249,6 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne // state, since there may be a new transport in this addrConn. return } - hcancel() ac.transport = nil // Refresh the name resolver ac.cc.resolveNow(resolver.ResolveNowOptions{}) @@ -1252,6 +1271,7 @@ func (ac *addrConn) createTransport(addr resolver.Address, copts transport.Conne newTr, err := transport.NewClientTransport(connectCtx, ac.cc.ctx, addr, copts, func() { prefaceReceived.Fire() }, onGoAway, onClose) if err != nil { // newTr is either nil, or closed. + hcancel() channelz.Warningf(logger, ac.channelzID, "grpc: addrConn.createTransport failed to connect to %s. Err: %v", addr, err) return err } diff --git a/vendor/google.golang.org/grpc/encoding/encoding.go b/vendor/google.golang.org/grpc/encoding/encoding.go index 6d84f74c7d..18e530fc90 100644 --- a/vendor/google.golang.org/grpc/encoding/encoding.go +++ b/vendor/google.golang.org/grpc/encoding/encoding.go @@ -108,7 +108,7 @@ var registeredCodecs = make(map[string]Codec) // more details. // // NOTE: this function must only be called during initialization time (i.e. in -// an init() function), and is not thread-safe. If multiple Compressors are +// an init() function), and is not thread-safe. If multiple Codecs are // registered with the same name, the one registered last will take effect. func RegisterCodec(codec Codec) { if codec == nil { diff --git a/vendor/google.golang.org/grpc/go.mod b/vendor/google.golang.org/grpc/go.mod deleted file mode 100644 index 6a760ed743..0000000000 --- a/vendor/google.golang.org/grpc/go.mod +++ /dev/null @@ -1,19 +0,0 @@ -module google.golang.org/grpc - -go 1.14 - -require ( - github.com/cespare/xxhash/v2 v2.1.1 - github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 - github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 - github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 - github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b - github.com/golang/protobuf v1.5.2 - github.com/google/go-cmp v0.5.6 - github.com/google/uuid v1.1.2 - golang.org/x/net v0.0.0-20201021035429-f5854403a974 - golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d - golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 - google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 - google.golang.org/protobuf v1.27.1 -) diff --git a/vendor/google.golang.org/grpc/go.sum b/vendor/google.golang.org/grpc/go.sum deleted file mode 100644 index 5f418dba1b..0000000000 --- a/vendor/google.golang.org/grpc/go.sum +++ /dev/null @@ -1,141 +0,0 @@ -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0 h1:eOI3/cP2VTU6uZLDYAoic+eyzzB9YyGmJ7eIjl8rOPg= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/census-instrumentation/opencensus-proto v0.2.1 h1:glEXhBS5PSLLv4IXzLA5yPRVX4bilULVyxxbrfOtDAk= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4 h1:hzAQntlaYRkVSFEfj9OTWlVV1H155FMD8BTKktLv0QI= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1 h1:zH8ljVhhq7yC0MIeUL/IviMtY8hx2mK8cN9wEYb8ggw= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1 h1:xvqufLtNVwAhN8NMyWklVgxnWohi+wtMGQMhtxexlm0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.1.0 h1:EQciDnbrYxy13PgWoY8AqoxGiPrpgBZ1R8UNe3ddc+A= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go index 8394d252df..244f4b081d 100644 --- a/vendor/google.golang.org/grpc/internal/transport/controlbuf.go +++ b/vendor/google.golang.org/grpc/internal/transport/controlbuf.go @@ -137,6 +137,7 @@ type earlyAbortStream struct { streamID uint32 contentSubtype string status *status.Status + rst bool } func (*earlyAbortStream) isTransportResponseFrame() bool { return false } @@ -786,6 +787,11 @@ func (l *loopyWriter) earlyAbortStreamHandler(eas *earlyAbortStream) error { if err := l.writeHeader(eas.streamID, true, headerFields, nil); err != nil { return err } + if eas.rst { + if err := l.framer.fr.WriteRSTStream(eas.streamID, http2.ErrCodeNo); err != nil { + return err + } + } return nil } diff --git a/vendor/google.golang.org/grpc/internal/transport/http2_server.go b/vendor/google.golang.org/grpc/internal/transport/http2_server.go index 0956b500c1..45d7bd145e 100644 --- a/vendor/google.golang.org/grpc/internal/transport/http2_server.go +++ b/vendor/google.golang.org/grpc/internal/transport/http2_server.go @@ -21,7 +21,6 @@ package transport import ( "bytes" "context" - "errors" "fmt" "io" "math" @@ -53,10 +52,10 @@ import ( var ( // ErrIllegalHeaderWrite indicates that setting header is illegal because of // the stream's state. - ErrIllegalHeaderWrite = errors.New("transport: the stream is done or WriteHeader was already called") + ErrIllegalHeaderWrite = status.Error(codes.Internal, "transport: SendHeader called multiple times") // ErrHeaderListSizeLimitViolation indicates that the header list size is larger // than the limit set by peer. - ErrHeaderListSizeLimitViolation = errors.New("transport: trying to send header list size larger than the limit set by peer") + ErrHeaderListSizeLimitViolation = status.Error(codes.Internal, "transport: trying to send header list size larger than the limit set by peer") ) // serverConnectionCounter counts the number of connections a server has seen @@ -449,6 +448,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( streamID: streamID, contentSubtype: s.contentSubtype, status: status.New(codes.Internal, errMsg), + rst: !frame.StreamEnded(), }) return false } @@ -522,14 +522,16 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( } if httpMethod != http.MethodPost { t.mu.Unlock() + errMsg := fmt.Sprintf("http2Server.operateHeaders parsed a :method field: %v which should be POST", httpMethod) if logger.V(logLevel) { - logger.Infof("transport: http2Server.operateHeaders parsed a :method field: %v which should be POST", httpMethod) + logger.Infof("transport: %v", errMsg) } - t.controlBuf.put(&cleanupStream{ - streamID: streamID, - rst: true, - rstCode: http2.ErrCodeProtocol, - onWrite: func() {}, + t.controlBuf.put(&earlyAbortStream{ + httpStatus: 405, + streamID: streamID, + contentSubtype: s.contentSubtype, + status: status.New(codes.Internal, errMsg), + rst: !frame.StreamEnded(), }) s.cancel() return false @@ -550,6 +552,7 @@ func (t *http2Server) operateHeaders(frame *http2.MetaHeadersFrame, handle func( streamID: s.id, contentSubtype: s.contentSubtype, status: stat, + rst: !frame.StreamEnded(), }) return false } @@ -931,11 +934,25 @@ func (t *http2Server) checkForHeaderListSize(it interface{}) bool { return true } +func (t *http2Server) streamContextErr(s *Stream) error { + select { + case <-t.done: + return ErrConnClosing + default: + } + return ContextErr(s.ctx.Err()) +} + // WriteHeader sends the header metadata md back to the client. func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { - if s.updateHeaderSent() || s.getState() == streamDone { + if s.updateHeaderSent() { return ErrIllegalHeaderWrite } + + if s.getState() == streamDone { + return t.streamContextErr(s) + } + s.hdrMu.Lock() if md.Len() > 0 { if s.header.Len() > 0 { @@ -946,7 +963,7 @@ func (t *http2Server) WriteHeader(s *Stream, md metadata.MD) error { } if err := t.writeHeaderLocked(s); err != nil { s.hdrMu.Unlock() - return err + return status.Convert(err).Err() } s.hdrMu.Unlock() return nil @@ -1062,23 +1079,12 @@ func (t *http2Server) WriteStatus(s *Stream, st *status.Status) error { func (t *http2Server) Write(s *Stream, hdr []byte, data []byte, opts *Options) error { if !s.isHeaderSent() { // Headers haven't been written yet. if err := t.WriteHeader(s, nil); err != nil { - if _, ok := err.(ConnectionError); ok { - return err - } - // TODO(mmukhi, dfawley): Make sure this is the right code to return. - return status.Errorf(codes.Internal, "transport: %v", err) + return err } } else { // Writing headers checks for this condition. if s.getState() == streamDone { - // TODO(mmukhi, dfawley): Should the server write also return io.EOF? - s.cancel() - select { - case <-t.done: - return ErrConnClosing - default: - } - return ContextErr(s.ctx.Err()) + return t.streamContextErr(s) } } df := &dataFrame{ @@ -1088,12 +1094,7 @@ func (t *http2Server) Write(s *Stream, hdr []byte, data []byte, opts *Options) e onEachWrite: t.setResetPingStrikes, } if err := s.wq.get(int32(len(hdr) + len(data))); err != nil { - select { - case <-t.done: - return ErrConnClosing - default: - } - return ContextErr(s.ctx.Err()) + return t.streamContextErr(s) } return t.controlBuf.put(df) } @@ -1229,10 +1230,6 @@ func (t *http2Server) Close() { // deleteStream deletes the stream s from transport's active streams. func (t *http2Server) deleteStream(s *Stream, eosReceived bool) { - // In case stream sending and receiving are invoked in separate - // goroutines (e.g., bi-directional streaming), cancel needs to be - // called to interrupt the potential blocking on other goroutines. - s.cancel() t.mu.Lock() if _, ok := t.activeStreams[s.id]; ok { @@ -1254,6 +1251,11 @@ func (t *http2Server) deleteStream(s *Stream, eosReceived bool) { // finishStream closes the stream and puts the trailing headerFrame into controlbuf. func (t *http2Server) finishStream(s *Stream, rst bool, rstCode http2.ErrCode, hdr *headerFrame, eosReceived bool) { + // In case stream sending and receiving are invoked in separate + // goroutines (e.g., bi-directional streaming), cancel needs to be + // called to interrupt the potential blocking on other goroutines. + s.cancel() + oldState := s.swapState(streamDone) if oldState == streamDone { // If the stream was already done, return. @@ -1273,6 +1275,11 @@ func (t *http2Server) finishStream(s *Stream, rst bool, rstCode http2.ErrCode, h // closeStream clears the footprint of a stream when the stream is not needed any more. func (t *http2Server) closeStream(s *Stream, rst bool, rstCode http2.ErrCode, eosReceived bool) { + // In case stream sending and receiving are invoked in separate + // goroutines (e.g., bi-directional streaming), cancel needs to be + // called to interrupt the potential blocking on other goroutines. + s.cancel() + s.swapState(streamDone) t.deleteStream(s, eosReceived) diff --git a/vendor/google.golang.org/grpc/server.go b/vendor/google.golang.org/grpc/server.go index 96431a058b..65de84b300 100644 --- a/vendor/google.golang.org/grpc/server.go +++ b/vendor/google.golang.org/grpc/server.go @@ -1801,12 +1801,26 @@ func (s *Server) getCodec(contentSubtype string) baseCodec { return codec } -// SetHeader sets the header metadata. -// When called multiple times, all the provided metadata will be merged. -// All the metadata will be sent out when one of the following happens: -// - grpc.SendHeader() is called; -// - The first response is sent out; -// - An RPC status is sent out (error or success). +// SetHeader sets the header metadata to be sent from the server to the client. +// The context provided must be the context passed to the server's handler. +// +// Streaming RPCs should prefer the SetHeader method of the ServerStream. +// +// When called multiple times, all the provided metadata will be merged. All +// the metadata will be sent out when one of the following happens: +// +// - grpc.SendHeader is called, or for streaming handlers, stream.SendHeader. +// - The first response message is sent. For unary handlers, this occurs when +// the handler returns; for streaming handlers, this can happen when stream's +// SendMsg method is called. +// - An RPC status is sent out (error or success). This occurs when the handler +// returns. +// +// SetHeader will fail if called after any of the events above. +// +// The error returned is compatible with the status package. However, the +// status code will often not match the RPC status as seen by the client +// application, and therefore, should not be relied upon for this purpose. func SetHeader(ctx context.Context, md metadata.MD) error { if md.Len() == 0 { return nil @@ -1818,8 +1832,14 @@ func SetHeader(ctx context.Context, md metadata.MD) error { return stream.SetHeader(md) } -// SendHeader sends header metadata. It may be called at most once. -// The provided md and headers set by SetHeader() will be sent. +// SendHeader sends header metadata. It may be called at most once, and may not +// be called after any event that causes headers to be sent (see SetHeader for +// a complete list). The provided md and headers set by SetHeader() will be +// sent. +// +// The error returned is compatible with the status package. However, the +// status code will often not match the RPC status as seen by the client +// application, and therefore, should not be relied upon for this purpose. func SendHeader(ctx context.Context, md metadata.MD) error { stream := ServerTransportStreamFromContext(ctx) if stream == nil { @@ -1833,6 +1853,10 @@ func SendHeader(ctx context.Context, md metadata.MD) error { // SetTrailer sets the trailer metadata that will be sent when an RPC returns. // When called more than once, all the provided metadata will be merged. +// +// The error returned is compatible with the status package. However, the +// status code will often not match the RPC status as seen by the client +// application, and therefore, should not be relied upon for this purpose. func SetTrailer(ctx context.Context, md metadata.MD) error { if md.Len() == 0 { return nil diff --git a/vendor/google.golang.org/grpc/stream.go b/vendor/google.golang.org/grpc/stream.go index be51405358..236fc17ec3 100644 --- a/vendor/google.golang.org/grpc/stream.go +++ b/vendor/google.golang.org/grpc/stream.go @@ -1381,8 +1381,10 @@ func (as *addrConnStream) finish(err error) { // ServerStream defines the server-side behavior of a streaming RPC. // -// All errors returned from ServerStream methods are compatible with the -// status package. +// Errors returned from ServerStream methods are compatible with the status +// package. However, the status code will often not match the RPC status as +// seen by the client application, and therefore, should not be relied upon for +// this purpose. type ServerStream interface { // SetHeader sets the header metadata. It may be called multiple times. // When call multiple times, all the provided metadata will be merged. diff --git a/vendor/google.golang.org/grpc/version.go b/vendor/google.golang.org/grpc/version.go index f17192e6a3..5bc03f9b36 100644 --- a/vendor/google.golang.org/grpc/version.go +++ b/vendor/google.golang.org/grpc/version.go @@ -19,4 +19,4 @@ package grpc // Version is the current grpc version. -const Version = "1.46.2" +const Version = "1.47.0" diff --git a/vendor/gopkg.in/square/go-jose.v2/.travis.yml b/vendor/gopkg.in/square/go-jose.v2/.travis.yml index ae69862df2..391b99a401 100644 --- a/vendor/gopkg.in/square/go-jose.v2/.travis.yml +++ b/vendor/gopkg.in/square/go-jose.v2/.travis.yml @@ -8,8 +8,8 @@ matrix: - go: tip go: -- '1.11.x' -- '1.12.x' +- '1.14.x' +- '1.15.x' - tip go_import_path: gopkg.in/square/go-jose.v2 diff --git a/vendor/gopkg.in/square/go-jose.v2/cipher/cbc_hmac.go b/vendor/gopkg.in/square/go-jose.v2/cipher/cbc_hmac.go index 126b85ce25..f6465c041f 100644 --- a/vendor/gopkg.in/square/go-jose.v2/cipher/cbc_hmac.go +++ b/vendor/gopkg.in/square/go-jose.v2/cipher/cbc_hmac.go @@ -150,7 +150,7 @@ func (ctx *cbcAEAD) computeAuthTag(aad, nonce, ciphertext []byte) []byte { return hmac.Sum(nil)[:ctx.authtagBytes] } -// resize ensures the the given slice has a capacity of at least n bytes. +// resize ensures that the given slice has a capacity of at least n bytes. // If the capacity of the slice is less than n, a new slice is allocated // and the existing data will be copied. func resize(in []byte, n uint64) (head, tail []byte) { diff --git a/vendor/gopkg.in/square/go-jose.v2/crypter.go b/vendor/gopkg.in/square/go-jose.v2/crypter.go index d24cabf6b6..be7433e28f 100644 --- a/vendor/gopkg.in/square/go-jose.v2/crypter.go +++ b/vendor/gopkg.in/square/go-jose.v2/crypter.go @@ -216,6 +216,7 @@ func NewMultiEncrypter(enc ContentEncryption, rcpts []Recipient, opts *Encrypter if opts != nil { encrypter.compressionAlg = opts.Compression + encrypter.extraHeaders = opts.ExtraHeaders } for _, recipient := range rcpts { diff --git a/vendor/gopkg.in/square/go-jose.v2/json/decode.go b/vendor/gopkg.in/square/go-jose.v2/json/decode.go index 37457e5a83..4dbc4146cf 100644 --- a/vendor/gopkg.in/square/go-jose.v2/json/decode.go +++ b/vendor/gopkg.in/square/go-jose.v2/json/decode.go @@ -13,6 +13,7 @@ import ( "encoding/base64" "errors" "fmt" + "math" "reflect" "runtime" "strconv" @@ -245,6 +246,18 @@ func isValidNumber(s string) bool { return s == "" } +type NumberUnmarshalType int + +const ( + // unmarshal a JSON number into an interface{} as a float64 + UnmarshalFloat NumberUnmarshalType = iota + // unmarshal a JSON number into an interface{} as a `json.Number` + UnmarshalJSONNumber + // unmarshal a JSON number into an interface{} as a int64 + // if value is an integer otherwise float64 + UnmarshalIntOrFloat +) + // decodeState represents the state while decoding a JSON value. type decodeState struct { data []byte @@ -252,7 +265,7 @@ type decodeState struct { scan scanner nextscan scanner // for calls to nextValue savedError error - useNumber bool + numberType NumberUnmarshalType } // errPhase is used for errors that should not happen unless @@ -723,17 +736,38 @@ func (d *decodeState) literal(v reflect.Value) { d.literalStore(d.data[start:d.off], v, false) } -// convertNumber converts the number literal s to a float64 or a Number -// depending on the setting of d.useNumber. +// convertNumber converts the number literal s to a float64, int64 or a Number +// depending on d.numberDecodeType. func (d *decodeState) convertNumber(s string) (interface{}, error) { - if d.useNumber { + switch d.numberType { + + case UnmarshalJSONNumber: return Number(s), nil + case UnmarshalIntOrFloat: + v, err := strconv.ParseInt(s, 10, 64) + if err == nil { + return v, nil + } + + // tries to parse integer number in scientific notation + f, err := strconv.ParseFloat(s, 64) + if err != nil { + return nil, &UnmarshalTypeError{"number " + s, reflect.TypeOf(0.0), int64(d.off)} + } + + // if it has no decimal value use int64 + if fi, fd := math.Modf(f); fd == 0.0 { + return int64(fi), nil + } + return f, nil + default: + f, err := strconv.ParseFloat(s, 64) + if err != nil { + return nil, &UnmarshalTypeError{"number " + s, reflect.TypeOf(0.0), int64(d.off)} + } + return f, nil } - f, err := strconv.ParseFloat(s, 64) - if err != nil { - return nil, &UnmarshalTypeError{"number " + s, reflect.TypeOf(0.0), int64(d.off)} - } - return f, nil + } var numberType = reflect.TypeOf(Number("")) diff --git a/vendor/gopkg.in/square/go-jose.v2/json/stream.go b/vendor/gopkg.in/square/go-jose.v2/json/stream.go index 8ddcf4d279..9b2b926b03 100644 --- a/vendor/gopkg.in/square/go-jose.v2/json/stream.go +++ b/vendor/gopkg.in/square/go-jose.v2/json/stream.go @@ -31,9 +31,14 @@ func NewDecoder(r io.Reader) *Decoder { return &Decoder{r: r} } +// Deprecated: Use `SetNumberType` instead // UseNumber causes the Decoder to unmarshal a number into an interface{} as a // Number instead of as a float64. -func (dec *Decoder) UseNumber() { dec.d.useNumber = true } +func (dec *Decoder) UseNumber() { dec.d.numberType = UnmarshalJSONNumber } + +// SetNumberType causes the Decoder to unmarshal a number into an interface{} as a +// Number, float64 or int64 depending on `t` enum value. +func (dec *Decoder) SetNumberType(t NumberUnmarshalType) { dec.d.numberType = t } // Decode reads the next JSON-encoded value from its // input and stores it in the value pointed to by v. diff --git a/vendor/gopkg.in/square/go-jose.v2/jwk.go b/vendor/gopkg.in/square/go-jose.v2/jwk.go index 2dc6aec4b9..222e260cb5 100644 --- a/vendor/gopkg.in/square/go-jose.v2/jwk.go +++ b/vendor/gopkg.in/square/go-jose.v2/jwk.go @@ -238,7 +238,7 @@ func (k *JSONWebKey) UnmarshalJSON(data []byte) (err error) { if certPub != nil && keyPub != nil { if !reflect.DeepEqual(certPub, keyPub) { - return errors.New("square/go-jose: invalid JWK, public keys in key and x5c fields to not match") + return errors.New("square/go-jose: invalid JWK, public keys in key and x5c fields do not match") } } @@ -332,7 +332,7 @@ func (s *JSONWebKeySet) Key(kid string) []JSONWebKey { const rsaThumbprintTemplate = `{"e":"%s","kty":"RSA","n":"%s"}` const ecThumbprintTemplate = `{"crv":"%s","kty":"EC","x":"%s","y":"%s"}` -const edThumbprintTemplate = `{"crv":"%s","kty":"OKP",x":"%s"}` +const edThumbprintTemplate = `{"crv":"%s","kty":"OKP","x":"%s"}` func ecThumbprintInput(curve elliptic.Curve, x, y *big.Int) (string, error) { coordLength := curveSize(curve) @@ -406,7 +406,7 @@ func (k *JSONWebKey) IsPublic() bool { } } -// Public creates JSONWebKey with corresponding publik key if JWK represents asymmetric private key. +// Public creates JSONWebKey with corresponding public key if JWK represents asymmetric private key. func (k *JSONWebKey) Public() JSONWebKey { if k.IsPublic() { return *k diff --git a/vendor/gopkg.in/square/go-jose.v2/jwt/builder.go b/vendor/gopkg.in/square/go-jose.v2/jwt/builder.go index 686ec80a4b..3afa9030aa 100644 --- a/vendor/gopkg.in/square/go-jose.v2/jwt/builder.go +++ b/vendor/gopkg.in/square/go-jose.v2/jwt/builder.go @@ -143,7 +143,7 @@ func normalize(i interface{}) (map[string]interface{}, error) { } d := json.NewDecoder(bytes.NewReader(raw)) - d.UseNumber() + d.SetNumberType(json.UnmarshalJSONNumber) if err := d.Decode(&m); err != nil { return nil, err diff --git a/vendor/gopkg.in/square/go-jose.v2/jwt/claims.go b/vendor/gopkg.in/square/go-jose.v2/jwt/claims.go index 30fbe1cdc9..5f40ef3ba5 100644 --- a/vendor/gopkg.in/square/go-jose.v2/jwt/claims.go +++ b/vendor/gopkg.in/square/go-jose.v2/jwt/claims.go @@ -36,8 +36,9 @@ type Claims struct { } // NumericDate represents date and time as the number of seconds since the -// epoch, including leap seconds. Non-integer values can be represented +// epoch, ignoring leap seconds. Non-integer values can be represented // in the serialized format, but we round to the nearest second. +// See RFC7519 Section 2: https://tools.ietf.org/html/rfc7519#section-2 type NumericDate int64 // NewNumericDate constructs NumericDate from time.Time value. diff --git a/vendor/gopkg.in/square/go-jose.v2/jwt/jwt.go b/vendor/gopkg.in/square/go-jose.v2/jwt/jwt.go index aa13d4f0e9..47498840f7 100644 --- a/vendor/gopkg.in/square/go-jose.v2/jwt/jwt.go +++ b/vendor/gopkg.in/square/go-jose.v2/jwt/jwt.go @@ -137,8 +137,14 @@ func ParseSignedAndEncrypted(s string) (*NestedJSONWebToken, error) { } func tryJWKS(headers []jose.Header, key interface{}) interface{} { - jwks, ok := key.(*jose.JSONWebKeySet) - if !ok { + var jwks jose.JSONWebKeySet + + switch jwksType := key.(type) { + case *jose.JSONWebKeySet: + jwks = *jwksType + case jose.JSONWebKeySet: + jwks = jwksType + default: return key } diff --git a/vendor/gopkg.in/square/go-jose.v2/opaque.go b/vendor/gopkg.in/square/go-jose.v2/opaque.go index df747f9922..fc3e8d2ef6 100644 --- a/vendor/gopkg.in/square/go-jose.v2/opaque.go +++ b/vendor/gopkg.in/square/go-jose.v2/opaque.go @@ -17,7 +17,7 @@ package jose // OpaqueSigner is an interface that supports signing payloads with opaque -// private key(s). Private key operations preformed by implementors may, for +// private key(s). Private key operations performed by implementers may, for // example, occur in a hardware module. An OpaqueSigner may rotate signing keys // transparently to the user of this interface. type OpaqueSigner interface { diff --git a/vendor/gopkg.in/square/go-jose.v2/shared.go b/vendor/gopkg.in/square/go-jose.v2/shared.go index f8438641f6..f72e5a53d1 100644 --- a/vendor/gopkg.in/square/go-jose.v2/shared.go +++ b/vendor/gopkg.in/square/go-jose.v2/shared.go @@ -183,7 +183,7 @@ type Header struct { // Unverified certificate chain parsed from x5c header. certificates []*x509.Certificate - // Any headers not recognised above get unmarshaled + // Any headers not recognised above get unmarshalled // from JSON in a generic manner and placed in this map. ExtraHeaders map[HeaderKey]interface{} } @@ -295,12 +295,12 @@ func (parsed rawHeader) getAPV() (*byteBuffer, error) { return parsed.getByteBuffer(headerAPV) } -// getIV extracts parsed "iv" frpom the raw JSON. +// getIV extracts parsed "iv" from the raw JSON. func (parsed rawHeader) getIV() (*byteBuffer, error) { return parsed.getByteBuffer(headerIV) } -// getTag extracts parsed "tag" frpom the raw JSON. +// getTag extracts parsed "tag" from the raw JSON. func (parsed rawHeader) getTag() (*byteBuffer, error) { return parsed.getByteBuffer(headerTag) } diff --git a/vendor/gopkg.in/yaml.v3/decode.go b/vendor/gopkg.in/yaml.v3/decode.go index df36e3a30f..0173b6982e 100644 --- a/vendor/gopkg.in/yaml.v3/decode.go +++ b/vendor/gopkg.in/yaml.v3/decode.go @@ -100,7 +100,10 @@ func (p *parser) peek() yaml_event_type_t { if p.event.typ != yaml_NO_EVENT { return p.event.typ } - if !yaml_parser_parse(&p.parser, &p.event) { + // It's curious choice from the underlying API to generally return a + // positive result on success, but on this case return true in an error + // scenario. This was the source of bugs in the past (issue #666). + if !yaml_parser_parse(&p.parser, &p.event) || p.parser.error != yaml_NO_ERROR { p.fail() } return p.event.typ @@ -320,6 +323,8 @@ type decoder struct { decodeCount int aliasCount int aliasDepth int + + mergedFields map[interface{}]bool } var ( @@ -808,6 +813,11 @@ func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { } } + mergedFields := d.mergedFields + d.mergedFields = nil + + var mergeNode *Node + mapIsNew := false if out.IsNil() { out.Set(reflect.MakeMap(outt)) @@ -815,11 +825,18 @@ func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { } for i := 0; i < l; i += 2 { if isMerge(n.Content[i]) { - d.merge(n.Content[i+1], out) + mergeNode = n.Content[i+1] continue } k := reflect.New(kt).Elem() if d.unmarshal(n.Content[i], k) { + if mergedFields != nil { + ki := k.Interface() + if mergedFields[ki] { + continue + } + mergedFields[ki] = true + } kkind := k.Kind() if kkind == reflect.Interface { kkind = k.Elem().Kind() @@ -833,6 +850,12 @@ func (d *decoder) mapping(n *Node, out reflect.Value) (good bool) { } } } + + d.mergedFields = mergedFields + if mergeNode != nil { + d.merge(n, mergeNode, out) + } + d.stringMapType = stringMapType d.generalMapType = generalMapType return true @@ -844,7 +867,8 @@ func isStringMap(n *Node) bool { } l := len(n.Content) for i := 0; i < l; i += 2 { - if n.Content[i].ShortTag() != strTag { + shortTag := n.Content[i].ShortTag() + if shortTag != strTag && shortTag != mergeTag { return false } } @@ -861,7 +885,6 @@ func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) { var elemType reflect.Type if sinfo.InlineMap != -1 { inlineMap = out.Field(sinfo.InlineMap) - inlineMap.Set(reflect.New(inlineMap.Type()).Elem()) elemType = inlineMap.Type().Elem() } @@ -870,6 +893,9 @@ func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) { d.prepare(n, field) } + mergedFields := d.mergedFields + d.mergedFields = nil + var mergeNode *Node var doneFields []bool if d.uniqueKeys { doneFields = make([]bool, len(sinfo.FieldsList)) @@ -879,13 +905,20 @@ func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) { for i := 0; i < l; i += 2 { ni := n.Content[i] if isMerge(ni) { - d.merge(n.Content[i+1], out) + mergeNode = n.Content[i+1] continue } if !d.unmarshal(ni, name) { continue } - if info, ok := sinfo.FieldsMap[name.String()]; ok { + sname := name.String() + if mergedFields != nil { + if mergedFields[sname] { + continue + } + mergedFields[sname] = true + } + if info, ok := sinfo.FieldsMap[sname]; ok { if d.uniqueKeys { if doneFields[info.Id] { d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s already set in type %s", ni.Line, name.String(), out.Type())) @@ -911,6 +944,11 @@ func (d *decoder) mappingStruct(n *Node, out reflect.Value) (good bool) { d.terrors = append(d.terrors, fmt.Sprintf("line %d: field %s not found in type %s", ni.Line, name.String(), out.Type())) } } + + d.mergedFields = mergedFields + if mergeNode != nil { + d.merge(n, mergeNode, out) + } return true } @@ -918,19 +956,29 @@ func failWantMap() { failf("map merge requires map or sequence of maps as the value") } -func (d *decoder) merge(n *Node, out reflect.Value) { - switch n.Kind { +func (d *decoder) merge(parent *Node, merge *Node, out reflect.Value) { + mergedFields := d.mergedFields + if mergedFields == nil { + d.mergedFields = make(map[interface{}]bool) + for i := 0; i < len(parent.Content); i += 2 { + k := reflect.New(ifaceType).Elem() + if d.unmarshal(parent.Content[i], k) { + d.mergedFields[k.Interface()] = true + } + } + } + + switch merge.Kind { case MappingNode: - d.unmarshal(n, out) + d.unmarshal(merge, out) case AliasNode: - if n.Alias != nil && n.Alias.Kind != MappingNode { + if merge.Alias != nil && merge.Alias.Kind != MappingNode { failWantMap() } - d.unmarshal(n, out) + d.unmarshal(merge, out) case SequenceNode: - // Step backwards as earlier nodes take precedence. - for i := len(n.Content) - 1; i >= 0; i-- { - ni := n.Content[i] + for i := 0; i < len(merge.Content); i++ { + ni := merge.Content[i] if ni.Kind == AliasNode { if ni.Alias != nil && ni.Alias.Kind != MappingNode { failWantMap() @@ -943,6 +991,8 @@ func (d *decoder) merge(n *Node, out reflect.Value) { default: failWantMap() } + + d.mergedFields = mergedFields } func isMerge(n *Node) bool { diff --git a/vendor/gopkg.in/yaml.v3/go.mod b/vendor/gopkg.in/yaml.v3/go.mod deleted file mode 100644 index f407ea3213..0000000000 --- a/vendor/gopkg.in/yaml.v3/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module "gopkg.in/yaml.v3" - -require ( - "gopkg.in/check.v1" v0.0.0-20161208181325-20d25e280405 -) diff --git a/vendor/gopkg.in/yaml.v3/parserc.go b/vendor/gopkg.in/yaml.v3/parserc.go index ac66fccc05..268558a0d6 100644 --- a/vendor/gopkg.in/yaml.v3/parserc.go +++ b/vendor/gopkg.in/yaml.v3/parserc.go @@ -687,6 +687,9 @@ func yaml_parser_parse_node(parser *yaml_parser_t, event *yaml_event_t, block, i func yaml_parser_parse_block_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { if first { token := peek_token(parser) + if token == nil { + return false + } parser.marks = append(parser.marks, token.start_mark) skip_token(parser) } @@ -786,7 +789,7 @@ func yaml_parser_split_stem_comment(parser *yaml_parser_t, stem_len int) { } token := peek_token(parser) - if token.typ != yaml_BLOCK_SEQUENCE_START_TOKEN && token.typ != yaml_BLOCK_MAPPING_START_TOKEN { + if token == nil || token.typ != yaml_BLOCK_SEQUENCE_START_TOKEN && token.typ != yaml_BLOCK_MAPPING_START_TOKEN { return } @@ -813,6 +816,9 @@ func yaml_parser_split_stem_comment(parser *yaml_parser_t, stem_len int) { func yaml_parser_parse_block_mapping_key(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { if first { token := peek_token(parser) + if token == nil { + return false + } parser.marks = append(parser.marks, token.start_mark) skip_token(parser) } @@ -922,6 +928,9 @@ func yaml_parser_parse_block_mapping_value(parser *yaml_parser_t, event *yaml_ev func yaml_parser_parse_flow_sequence_entry(parser *yaml_parser_t, event *yaml_event_t, first bool) bool { if first { token := peek_token(parser) + if token == nil { + return false + } parser.marks = append(parser.marks, token.start_mark) skip_token(parser) } diff --git a/vendor/lukechampine.com/blake3/go.mod b/vendor/lukechampine.com/blake3/go.mod deleted file mode 100644 index 8f0680f60f..0000000000 --- a/vendor/lukechampine.com/blake3/go.mod +++ /dev/null @@ -1,5 +0,0 @@ -module lukechampine.com/blake3 - -go 1.13 - -require github.com/klauspost/cpuid/v2 v2.0.9 diff --git a/vendor/lukechampine.com/blake3/go.sum b/vendor/lukechampine.com/blake3/go.sum deleted file mode 100644 index a389a66fc5..0000000000 --- a/vendor/lukechampine.com/blake3/go.sum +++ /dev/null @@ -1,2 +0,0 @@ -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= diff --git a/vendor/modules.txt b/vendor/modules.txt index dad321ef6a..c1ba06d058 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -1,21 +1,27 @@ -# cloud.google.com/go v0.100.2 -## explicit +# cloud.google.com/go v0.102.0 +## explicit; go 1.15 cloud.google.com/go -# cloud.google.com/go/compute v1.5.0 +# cloud.google.com/go/compute v1.6.1 +## explicit; go 1.15 cloud.google.com/go/compute/metadata # cloud.google.com/go/iam v0.3.0 +## explicit; go 1.15 cloud.google.com/go/iam # cloud.google.com/go/secretmanager v1.4.0 -## explicit +## explicit; go 1.16 cloud.google.com/go/secretmanager/apiv1 cloud.google.com/go/secretmanager/internal -# github.com/armon/go-metrics v0.3.10 -## explicit +# github.com/andybalholm/brotli v1.0.4 +## explicit; go 1.12 +github.com/andybalholm/brotli +# github.com/armon/go-metrics v0.4.0 +## explicit; go 1.12 github.com/armon/go-metrics # github.com/armon/go-radix v1.0.0 -github.com/armon/go-radix -# github.com/aws/aws-sdk-go v1.44.14 ## explicit +github.com/armon/go-radix +# github.com/aws/aws-sdk-go v1.44.25 +## explicit; go 1.11 github.com/aws/aws-sdk-go/aws github.com/aws/aws-sdk-go/aws/awserr github.com/aws/aws-sdk-go/aws/awsutil @@ -58,67 +64,93 @@ github.com/aws/aws-sdk-go/service/sso/ssoiface github.com/aws/aws-sdk-go/service/sts github.com/aws/aws-sdk-go/service/sts/stsiface # github.com/benbjohnson/clock v1.3.0 -## explicit +## explicit; go 1.15 github.com/benbjohnson/clock # github.com/beorn7/perks v1.0.1 +## explicit; go 1.11 github.com/beorn7/perks/quantile # github.com/btcsuite/btcd v0.22.1 -## explicit +## explicit; go 1.17 github.com/btcsuite/btcd/btcec -# github.com/cenkalti/backoff/v3 v3.0.0 +github.com/btcsuite/btcd/chaincfg +github.com/btcsuite/btcd/wire +# github.com/btcsuite/btcd/btcec/v2 v2.2.0 +## explicit; go 1.17 +github.com/btcsuite/btcd/btcec/v2 +github.com/btcsuite/btcd/btcec/v2/ecdsa +# github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 +## explicit; go 1.17 +github.com/btcsuite/btcd/chaincfg/chainhash +# github.com/cenkalti/backoff/v3 v3.2.2 +## explicit; go 1.12 github.com/cenkalti/backoff/v3 # github.com/cespare/xxhash/v2 v2.1.2 +## explicit; go 1.11 github.com/cespare/xxhash/v2 # github.com/cheekybits/genny v1.0.0 +## explicit github.com/cheekybits/genny github.com/cheekybits/genny/generic github.com/cheekybits/genny/out github.com/cheekybits/genny/parse -# github.com/containerd/cgroups v1.0.2 -## explicit +# github.com/containerd/cgroups v1.0.4 +## explicit; go 1.17 github.com/containerd/cgroups github.com/containerd/cgroups/stats/v1 # github.com/coreos/go-systemd/v22 v22.3.2 +## explicit; go 1.12 github.com/coreos/go-systemd/v22/dbus # github.com/davecgh/go-spew v1.1.1 +## explicit github.com/davecgh/go-spew/spew # github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c +## explicit; go 1.14 github.com/davidlazar/go-crypto/salsa20 +# github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 +## explicit; go 1.16 +github.com/decred/dcrd/dcrec/secp256k1/v4 +github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa # github.com/docker/go-units v0.4.0 +## explicit github.com/docker/go-units # github.com/elastic/gosigar v0.14.2 -## explicit +## explicit; go 1.14 github.com/elastic/gosigar github.com/elastic/gosigar/sys/windows # github.com/fatih/color v1.13.0 -## explicit +## explicit; go 1.13 github.com/fatih/color # github.com/flynn/noise v1.0.0 +## explicit; go 1.16 github.com/flynn/noise # github.com/francoispqt/gojay v1.2.13 +## explicit; go 1.12 github.com/francoispqt/gojay -# github.com/fsnotify/fsnotify v1.5.1 -## explicit +# github.com/fsnotify/fsnotify v1.5.4 +## explicit; go 1.16 github.com/fsnotify/fsnotify # github.com/go-kit/kit v0.12.0 -## explicit +## explicit; go 1.17 github.com/go-kit/kit/metrics github.com/go-kit/kit/metrics/discard github.com/go-kit/kit/metrics/internal/lv github.com/go-kit/kit/metrics/prometheus # github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 +## explicit; go 1.13 github.com/go-task/slim-sprig -# github.com/godbus/dbus/v5 v5.0.6 -## explicit +# github.com/godbus/dbus/v5 v5.1.0 +## explicit; go 1.12 github.com/godbus/dbus/v5 # github.com/gogo/protobuf v1.3.2 +## explicit; go 1.15 github.com/gogo/protobuf/gogoproto github.com/gogo/protobuf/proto github.com/gogo/protobuf/protoc-gen-gogo/descriptor # github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da +## explicit github.com/golang/groupcache/lru # github.com/golang/protobuf v1.5.2 -## explicit +## explicit; go 1.9 github.com/golang/protobuf/jsonpb github.com/golang/protobuf/proto github.com/golang/protobuf/ptypes @@ -127,62 +159,79 @@ github.com/golang/protobuf/ptypes/duration github.com/golang/protobuf/ptypes/empty github.com/golang/protobuf/ptypes/timestamp # github.com/golang/snappy v0.0.4 +## explicit github.com/golang/snappy -# github.com/google/go-cmp v0.5.7 +# github.com/google/go-cmp v0.5.8 +## explicit; go 1.13 github.com/google/go-cmp/cmp github.com/google/go-cmp/cmp/internal/diff github.com/google/go-cmp/cmp/internal/flags github.com/google/go-cmp/cmp/internal/function github.com/google/go-cmp/cmp/internal/value # github.com/google/gofuzz v1.2.0 +## explicit; go 1.12 github.com/google/gofuzz github.com/google/gofuzz/bytesource # github.com/google/gopacket v1.1.19 +## explicit; go 1.12 github.com/google/gopacket/routing # github.com/google/uuid v1.3.0 ## explicit github.com/google/uuid -# github.com/googleapis/gax-go/v2 v2.2.0 +# github.com/googleapis/gax-go/v2 v2.4.0 +## explicit; go 1.15 github.com/googleapis/gax-go/v2 github.com/googleapis/gax-go/v2/apierror github.com/googleapis/gax-go/v2/apierror/internal/proto +github.com/googleapis/gax-go/v2/internal # github.com/gorilla/websocket v1.5.0 -## explicit +## explicit; go 1.12 github.com/gorilla/websocket # github.com/hashicorp/errwrap v1.1.0 +## explicit github.com/hashicorp/errwrap # github.com/hashicorp/go-cleanhttp v0.5.2 +## explicit; go 1.13 github.com/hashicorp/go-cleanhttp # github.com/hashicorp/go-hclog v1.2.0 -## explicit +## explicit; go 1.13 github.com/hashicorp/go-hclog # github.com/hashicorp/go-immutable-radix v1.3.1 ## explicit github.com/hashicorp/go-immutable-radix # github.com/hashicorp/go-multierror v1.1.1 -## explicit +## explicit; go 1.13 github.com/hashicorp/go-multierror -# github.com/hashicorp/go-plugin v1.4.3 +# github.com/hashicorp/go-plugin v1.4.4 +## explicit; go 1.17 github.com/hashicorp/go-plugin github.com/hashicorp/go-plugin/internal/plugin -# github.com/hashicorp/go-retryablehttp v0.6.6 +# github.com/hashicorp/go-retryablehttp v0.7.1 +## explicit; go 1.13 github.com/hashicorp/go-retryablehttp # github.com/hashicorp/go-rootcerts v1.0.2 +## explicit; go 1.12 github.com/hashicorp/go-rootcerts -# github.com/hashicorp/go-secure-stdlib/mlock v0.1.1 +# github.com/hashicorp/go-secure-stdlib/mlock v0.1.2 +## explicit; go 1.16 github.com/hashicorp/go-secure-stdlib/mlock -# github.com/hashicorp/go-secure-stdlib/parseutil v0.1.1 +# github.com/hashicorp/go-secure-stdlib/parseutil v0.1.5 +## explicit; go 1.16 github.com/hashicorp/go-secure-stdlib/parseutil -# github.com/hashicorp/go-secure-stdlib/strutil v0.1.1 +# github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 +## explicit; go 1.16 github.com/hashicorp/go-secure-stdlib/strutil # github.com/hashicorp/go-sockaddr v1.0.2 +## explicit github.com/hashicorp/go-sockaddr -# github.com/hashicorp/go-uuid v1.0.2 +# github.com/hashicorp/go-uuid v1.0.3 +## explicit github.com/hashicorp/go-uuid -# github.com/hashicorp/go-version v1.2.0 +# github.com/hashicorp/go-version v1.5.0 +## explicit github.com/hashicorp/go-version # github.com/hashicorp/golang-lru v0.5.4 -## explicit +## explicit; go 1.12 github.com/hashicorp/golang-lru github.com/hashicorp/golang-lru/simplelru # github.com/hashicorp/hcl v1.0.0 @@ -196,10 +245,11 @@ github.com/hashicorp/hcl/hcl/token github.com/hashicorp/hcl/json/parser github.com/hashicorp/hcl/json/scanner github.com/hashicorp/hcl/json/token -# github.com/hashicorp/vault/api v1.3.1 -## explicit +# github.com/hashicorp/vault/api v1.6.0 +## explicit; go 1.13 github.com/hashicorp/vault/api -# github.com/hashicorp/vault/sdk v0.3.0 +# github.com/hashicorp/vault/sdk v0.5.0 +## explicit; go 1.16 github.com/hashicorp/vault/sdk/helper/certutil github.com/hashicorp/vault/sdk/helper/compressutil github.com/hashicorp/vault/sdk/helper/consts @@ -218,9 +268,11 @@ github.com/hashicorp/vault/sdk/logical github.com/hashicorp/vault/sdk/physical github.com/hashicorp/vault/sdk/physical/inmem github.com/hashicorp/vault/sdk/version -# github.com/hashicorp/yamux v0.0.0-20180604194846-3520598351bb +# github.com/hashicorp/yamux v0.0.0-20211028200310-0bc27b27de87 +## explicit; go 1.15 github.com/hashicorp/yamux -# github.com/huin/goupnp v1.0.2 +# github.com/huin/goupnp v1.0.3 +## explicit; go 1.14 github.com/huin/goupnp github.com/huin/goupnp/dcps/internetgateway1 github.com/huin/goupnp/dcps/internetgateway2 @@ -229,64 +281,87 @@ github.com/huin/goupnp/scpd github.com/huin/goupnp/soap github.com/huin/goupnp/ssdp # github.com/inconshreveable/mousetrap v1.0.0 -github.com/inconshreveable/mousetrap -# github.com/ipfs/go-cid v0.1.0 ## explicit +github.com/inconshreveable/mousetrap +# github.com/ipfs/go-cid v0.2.0 +## explicit; go 1.17 github.com/ipfs/go-cid # github.com/ipfs/go-ipfs-util v0.0.2 +## explicit; go 1.14 github.com/ipfs/go-ipfs-util # github.com/ipfs/go-log v1.0.5 +## explicit; go 1.12 github.com/ipfs/go-log github.com/ipfs/go-log/tracer github.com/ipfs/go-log/tracer/wire github.com/ipfs/go-log/writer -# github.com/ipfs/go-log/v2 v2.5.0 +# github.com/ipfs/go-log/v2 v2.5.1 +## explicit; go 1.16 github.com/ipfs/go-log/v2 # github.com/jackpal/go-nat-pmp v1.0.2 +## explicit github.com/jackpal/go-nat-pmp # github.com/jbenet/go-temp-err-catcher v0.1.0 +## explicit; go 1.13 github.com/jbenet/go-temp-err-catcher # github.com/jmespath/go-jmespath v0.4.0 +## explicit; go 1.14 github.com/jmespath/go-jmespath -# github.com/klauspost/compress v1.14.2 -## explicit +# github.com/klauspost/compress v1.15.5 +## explicit; go 1.16 github.com/klauspost/compress github.com/klauspost/compress/flate github.com/klauspost/compress/fse github.com/klauspost/compress/gzip github.com/klauspost/compress/huff0 +github.com/klauspost/compress/internal/cpuinfo github.com/klauspost/compress/internal/snapref github.com/klauspost/compress/zlib github.com/klauspost/compress/zstd github.com/klauspost/compress/zstd/internal/xxhash -# github.com/klauspost/cpuid/v2 v2.0.9 +# github.com/klauspost/cpuid/v2 v2.0.12 +## explicit; go 1.15 github.com/klauspost/cpuid/v2 -# github.com/koron/go-ssdp v0.0.2 +# github.com/koron/go-ssdp v0.0.3 +## explicit; go 1.17 github.com/koron/go-ssdp # github.com/libp2p/go-buffer-pool v0.0.2 +## explicit; go 1.12 github.com/libp2p/go-buffer-pool # github.com/libp2p/go-cidranger v1.1.0 +## explicit; go 1.14 github.com/libp2p/go-cidranger github.com/libp2p/go-cidranger/net -# github.com/libp2p/go-conn-security-multistream v0.3.0 -github.com/libp2p/go-conn-security-multistream # github.com/libp2p/go-eventbus v0.2.1 +## explicit; go 1.12 github.com/libp2p/go-eventbus # github.com/libp2p/go-flow-metrics v0.0.3 +## explicit; go 1.12 github.com/libp2p/go-flow-metrics -# github.com/libp2p/go-libp2p v0.18.0-rc2 -## explicit +# github.com/libp2p/go-libp2p v0.20.0 +## explicit; go 1.17 github.com/libp2p/go-libp2p github.com/libp2p/go-libp2p/config +github.com/libp2p/go-libp2p/p2p/discovery/backoff github.com/libp2p/go-libp2p/p2p/discovery/routing +github.com/libp2p/go-libp2p/p2p/discovery/util github.com/libp2p/go-libp2p/p2p/host/autonat github.com/libp2p/go-libp2p/p2p/host/autonat/pb github.com/libp2p/go-libp2p/p2p/host/autorelay github.com/libp2p/go-libp2p/p2p/host/basic +github.com/libp2p/go-libp2p/p2p/host/blank github.com/libp2p/go-libp2p/p2p/host/pstoremanager github.com/libp2p/go-libp2p/p2p/host/relaysvc github.com/libp2p/go-libp2p/p2p/host/routed +github.com/libp2p/go-libp2p/p2p/muxer/muxer-multistream +github.com/libp2p/go-libp2p/p2p/muxer/yamux +github.com/libp2p/go-libp2p/p2p/net/conn-security-multistream github.com/libp2p/go-libp2p/p2p/net/connmgr +github.com/libp2p/go-libp2p/p2p/net/nat +github.com/libp2p/go-libp2p/p2p/net/pnet +github.com/libp2p/go-libp2p/p2p/net/reuseport +github.com/libp2p/go-libp2p/p2p/net/swarm +github.com/libp2p/go-libp2p/p2p/net/upgrader github.com/libp2p/go-libp2p/p2p/protocol/circuitv1/pb github.com/libp2p/go-libp2p/p2p/protocol/circuitv1/relay github.com/libp2p/go-libp2p/p2p/protocol/circuitv2/client @@ -299,12 +374,19 @@ github.com/libp2p/go-libp2p/p2p/protocol/holepunch/pb github.com/libp2p/go-libp2p/p2p/protocol/identify github.com/libp2p/go-libp2p/p2p/protocol/identify/pb github.com/libp2p/go-libp2p/p2p/protocol/ping -# github.com/libp2p/go-libp2p-asn-util v0.1.0 +github.com/libp2p/go-libp2p/p2p/security/noise +github.com/libp2p/go-libp2p/p2p/security/noise/pb +github.com/libp2p/go-libp2p/p2p/security/tls +github.com/libp2p/go-libp2p/p2p/transport/quic +github.com/libp2p/go-libp2p/p2p/transport/tcp +github.com/libp2p/go-libp2p/p2p/transport/websocket +# github.com/libp2p/go-libp2p-asn-util v0.2.0 +## explicit; go 1.17 github.com/libp2p/go-libp2p-asn-util -# github.com/libp2p/go-libp2p-blankhost v0.3.0 -github.com/libp2p/go-libp2p-blankhost -# github.com/libp2p/go-libp2p-core v0.15.1 -## explicit +# github.com/libp2p/go-libp2p-blankhost v0.4.0 +## explicit; go 1.17 +# github.com/libp2p/go-libp2p-core v0.16.1 +## explicit; go 1.17 github.com/libp2p/go-libp2p-core/connmgr github.com/libp2p/go-libp2p-core/control github.com/libp2p/go-libp2p-core/crypto @@ -330,68 +412,49 @@ github.com/libp2p/go-libp2p-core/sec github.com/libp2p/go-libp2p-core/sec/insecure github.com/libp2p/go-libp2p-core/sec/insecure/pb github.com/libp2p/go-libp2p-core/transport -# github.com/libp2p/go-libp2p-discovery v0.6.0 +# github.com/libp2p/go-libp2p-discovery v0.7.0 +## explicit; go 1.16 github.com/libp2p/go-libp2p-discovery # github.com/libp2p/go-libp2p-kbucket v0.4.7 -## explicit +## explicit; go 1.13 github.com/libp2p/go-libp2p-kbucket github.com/libp2p/go-libp2p-kbucket/keyspace github.com/libp2p/go-libp2p-kbucket/peerdiversity -# github.com/libp2p/go-libp2p-mplex v0.5.0 -github.com/libp2p/go-libp2p-mplex -# github.com/libp2p/go-libp2p-nat v0.1.0 -github.com/libp2p/go-libp2p-nat -# github.com/libp2p/go-libp2p-noise v0.4.0 -## explicit -github.com/libp2p/go-libp2p-noise -github.com/libp2p/go-libp2p-noise/pb -# github.com/libp2p/go-libp2p-peerstore v0.6.0 +# github.com/libp2p/go-libp2p-peerstore v0.7.0 +## explicit; go 1.17 github.com/libp2p/go-libp2p-peerstore -github.com/libp2p/go-libp2p-peerstore/addr github.com/libp2p/go-libp2p-peerstore/pstoremem -# github.com/libp2p/go-libp2p-pnet v0.2.0 -github.com/libp2p/go-libp2p-pnet -# github.com/libp2p/go-libp2p-pubsub v0.6.1 -## explicit +# github.com/libp2p/go-libp2p-pubsub v0.7.0 +## explicit; go 1.13 github.com/libp2p/go-libp2p-pubsub github.com/libp2p/go-libp2p-pubsub/pb -# github.com/libp2p/go-libp2p-quic-transport v0.16.0 -github.com/libp2p/go-libp2p-quic-transport -# github.com/libp2p/go-libp2p-resource-manager v0.1.2 +# github.com/libp2p/go-libp2p-resource-manager v0.3.0 +## explicit; go 1.17 github.com/libp2p/go-libp2p-resource-manager -# github.com/libp2p/go-libp2p-swarm v0.10.1 -github.com/libp2p/go-libp2p-swarm -# github.com/libp2p/go-libp2p-tls v0.3.1 -github.com/libp2p/go-libp2p-tls -# github.com/libp2p/go-libp2p-transport-upgrader v0.7.0 -github.com/libp2p/go-libp2p-transport-upgrader -# github.com/libp2p/go-libp2p-yamux v0.8.1 -github.com/libp2p/go-libp2p-yamux -# github.com/libp2p/go-mplex v0.4.0 -github.com/libp2p/go-mplex -# github.com/libp2p/go-msgio v0.1.0 +# github.com/libp2p/go-libp2p-swarm v0.11.0 +## explicit; go 1.17 +# github.com/libp2p/go-msgio v0.2.0 +## explicit; go 1.17 github.com/libp2p/go-msgio github.com/libp2p/go-msgio/protoio # github.com/libp2p/go-nat v0.1.0 +## explicit; go 1.16 github.com/libp2p/go-nat # github.com/libp2p/go-netroute v0.2.0 +## explicit; go 1.16 github.com/libp2p/go-netroute # github.com/libp2p/go-openssl v0.0.7 +## explicit; go 1.12 github.com/libp2p/go-openssl github.com/libp2p/go-openssl/utils -# github.com/libp2p/go-reuseport v0.1.0 +# github.com/libp2p/go-reuseport v0.2.0 +## explicit; go 1.17 github.com/libp2p/go-reuseport -# github.com/libp2p/go-reuseport-transport v0.1.0 -github.com/libp2p/go-reuseport-transport -# github.com/libp2p/go-stream-muxer-multistream v0.4.0 -github.com/libp2p/go-stream-muxer-multistream -# github.com/libp2p/go-tcp-transport v0.5.0 -github.com/libp2p/go-tcp-transport -# github.com/libp2p/go-ws-transport v0.6.0 -github.com/libp2p/go-ws-transport -# github.com/libp2p/go-yamux/v3 v3.0.2 +# github.com/libp2p/go-yamux/v3 v3.1.1 +## explicit; go 1.17 github.com/libp2p/go-yamux/v3 -# github.com/lucas-clemente/quic-go v0.25.0 +# github.com/lucas-clemente/quic-go v0.27.1 +## explicit; go 1.16 github.com/lucas-clemente/quic-go github.com/lucas-clemente/quic-go/internal/ackhandler github.com/lucas-clemente/quic-go/internal/congestion @@ -406,64 +469,84 @@ github.com/lucas-clemente/quic-go/internal/wire github.com/lucas-clemente/quic-go/logging github.com/lucas-clemente/quic-go/qlog github.com/lucas-clemente/quic-go/quicvarint -# github.com/marten-seemann/qtls-go1-16 v0.1.4 +# github.com/marten-seemann/qtls-go1-16 v0.1.5 +## explicit; go 1.16 github.com/marten-seemann/qtls-go1-16 -# github.com/marten-seemann/qtls-go1-17 v0.1.0 +# github.com/marten-seemann/qtls-go1-17 v0.1.1 +## explicit; go 1.17 github.com/marten-seemann/qtls-go1-17 -# github.com/marten-seemann/qtls-go1-18 v0.1.0-beta.1 +# github.com/marten-seemann/qtls-go1-18 v0.1.1 +## explicit; go 1.18 github.com/marten-seemann/qtls-go1-18 # github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd +## explicit; go 1.15 github.com/marten-seemann/tcp # github.com/mattn/go-colorable v0.1.12 -## explicit +## explicit; go 1.13 github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.14 +## explicit; go 1.12 github.com/mattn/go-isatty # github.com/matttproud/golang_protobuf_extensions v1.0.1 -github.com/matttproud/golang_protobuf_extensions/pbutil -# github.com/miekg/dns v1.1.45 ## explicit +github.com/matttproud/golang_protobuf_extensions/pbutil +# github.com/miekg/dns v1.1.49 +## explicit; go 1.14 github.com/miekg/dns # github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b +## explicit github.com/mikioh/tcpinfo # github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc +## explicit github.com/mikioh/tcpopt # github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 +## explicit github.com/minio/blake2b-simd # github.com/minio/sha256-simd v1.0.0 +## explicit; go 1.13 github.com/minio/sha256-simd -# github.com/mitchellh/copystructure v1.0.0 +# github.com/mitchellh/copystructure v1.2.0 +## explicit; go 1.15 github.com/mitchellh/copystructure # github.com/mitchellh/go-homedir v1.1.0 +## explicit github.com/mitchellh/go-homedir -# github.com/mitchellh/go-testing-interface v1.0.0 +# github.com/mitchellh/go-testing-interface v1.14.1 +## explicit; go 1.14 github.com/mitchellh/go-testing-interface -# github.com/mitchellh/mapstructure v1.4.3 -## explicit +# github.com/mitchellh/mapstructure v1.5.0 +## explicit; go 1.14 github.com/mitchellh/mapstructure -# github.com/mitchellh/reflectwalk v1.0.0 +# github.com/mitchellh/reflectwalk v1.0.2 +## explicit github.com/mitchellh/reflectwalk # github.com/mr-tron/base58 v1.2.0 +## explicit; go 1.12 github.com/mr-tron/base58/base58 # github.com/multiformats/go-base32 v0.0.4 -## explicit +## explicit; go 1.16 github.com/multiformats/go-base32 # github.com/multiformats/go-base36 v0.1.0 +## explicit; go 1.11 github.com/multiformats/go-base36 # github.com/multiformats/go-multiaddr v0.5.0 -## explicit +## explicit; go 1.16 github.com/multiformats/go-multiaddr github.com/multiformats/go-multiaddr/net # github.com/multiformats/go-multiaddr-dns v0.3.1 +## explicit; go 1.15 github.com/multiformats/go-multiaddr-dns # github.com/multiformats/go-multiaddr-fmt v0.1.0 +## explicit; go 1.13 github.com/multiformats/go-multiaddr-fmt # github.com/multiformats/go-multibase v0.0.3 +## explicit; go 1.11 github.com/multiformats/go-multibase -# github.com/multiformats/go-multicodec v0.4.1 +# github.com/multiformats/go-multicodec v0.5.0 +## explicit; go 1.17 github.com/multiformats/go-multicodec # github.com/multiformats/go-multihash v0.1.0 -## explicit +## explicit; go 1.16 github.com/multiformats/go-multihash github.com/multiformats/go-multihash/core github.com/multiformats/go-multihash/register/all @@ -472,20 +555,24 @@ github.com/multiformats/go-multihash/register/blake3 github.com/multiformats/go-multihash/register/miniosha256 github.com/multiformats/go-multihash/register/murmur3 github.com/multiformats/go-multihash/register/sha3 -# github.com/multiformats/go-multistream v0.2.2 +# github.com/multiformats/go-multistream v0.3.1 +## explicit; go 1.17 github.com/multiformats/go-multistream # github.com/multiformats/go-varint v0.0.6 +## explicit; go 1.12 github.com/multiformats/go-varint # github.com/nxadm/tail v1.4.8 +## explicit; go 1.13 github.com/nxadm/tail github.com/nxadm/tail/ratelimiter github.com/nxadm/tail/util github.com/nxadm/tail/watch github.com/nxadm/tail/winfile -# github.com/oklog/run v1.0.0 +# github.com/oklog/run v1.1.0 +## explicit; go 1.13 github.com/oklog/run # github.com/onsi/ginkgo v1.16.5 -## explicit +## explicit; go 1.16 github.com/onsi/ginkgo/config github.com/onsi/ginkgo/formatter github.com/onsi/ginkgo/ginkgo @@ -510,58 +597,73 @@ github.com/onsi/ginkgo/reporters/stenographer/support/go-colorable github.com/onsi/ginkgo/reporters/stenographer/support/go-isatty github.com/onsi/ginkgo/types # github.com/opencontainers/runtime-spec v1.0.2 +## explicit github.com/opencontainers/runtime-spec/specs-go # github.com/opentracing/opentracing-go v1.2.0 +## explicit; go 1.14 github.com/opentracing/opentracing-go github.com/opentracing/opentracing-go/ext github.com/opentracing/opentracing-go/log # github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 +## explicit; go 1.16 github.com/pbnjay/memory -# github.com/pierrec/lz4 v2.5.2+incompatible +# github.com/pierrec/lz4 v2.6.1+incompatible +## explicit github.com/pierrec/lz4 github.com/pierrec/lz4/internal/xxh32 # github.com/pkg/errors v0.9.1 +## explicit github.com/pkg/errors # github.com/pmezard/go-difflib v1.0.0 +## explicit github.com/pmezard/go-difflib/difflib # github.com/prometheus/client_golang v1.12.2 -## explicit +## explicit; go 1.13 github.com/prometheus/client_golang/prometheus github.com/prometheus/client_golang/prometheus/internal github.com/prometheus/client_golang/prometheus/promhttp # github.com/prometheus/client_model v0.2.0 +## explicit; go 1.9 github.com/prometheus/client_model/go -# github.com/prometheus/common v0.32.1 +# github.com/prometheus/common v0.34.0 +## explicit; go 1.15 github.com/prometheus/common/expfmt github.com/prometheus/common/internal/bitbucket.org/ww/goautoneg github.com/prometheus/common/model # github.com/prometheus/procfs v0.7.3 +## explicit; go 1.13 github.com/prometheus/procfs github.com/prometheus/procfs/internal/fs github.com/prometheus/procfs/internal/util # github.com/raulk/clock v1.1.0 +## explicit; go 1.14 github.com/raulk/clock # github.com/raulk/go-watchdog v1.2.0 +## explicit; go 1.15 github.com/raulk/go-watchdog # github.com/ryanuber/columnize v2.1.2+incompatible ## explicit github.com/ryanuber/columnize # github.com/ryanuber/go-glob v1.0.0 +## explicit github.com/ryanuber/go-glob # github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 +## explicit github.com/spacemonkeygo/spacelog # github.com/spaolacci/murmur3 v1.1.0 +## explicit github.com/spaolacci/murmur3 # github.com/spf13/cobra v1.4.0 -## explicit +## explicit; go 1.15 github.com/spf13/cobra # github.com/spf13/pflag v1.0.5 +## explicit; go 1.12 github.com/spf13/pflag # github.com/stretchr/testify v1.7.1 -## explicit +## explicit; go 1.13 github.com/stretchr/testify/assert # github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 -## explicit +## explicit; go 1.14 github.com/syndtr/goleveldb/leveldb github.com/syndtr/goleveldb/leveldb/cache github.com/syndtr/goleveldb/leveldb/comparer @@ -574,34 +676,39 @@ github.com/syndtr/goleveldb/leveldb/opt github.com/syndtr/goleveldb/leveldb/storage github.com/syndtr/goleveldb/leveldb/table github.com/syndtr/goleveldb/leveldb/util -# github.com/umbracle/fastrlp v0.0.0-20211229195328-c1416904ae17 -## explicit +# github.com/umbracle/ethgo v0.1.2 +## explicit; go 1.18 +github.com/umbracle/ethgo +github.com/umbracle/ethgo/abi +github.com/umbracle/ethgo/jsonrpc +github.com/umbracle/ethgo/jsonrpc/codec +github.com/umbracle/ethgo/jsonrpc/transport +# github.com/umbracle/fastrlp v0.0.0-20220527094140-59d5dd30e722 +## explicit; go 1.12 github.com/umbracle/fastrlp # github.com/umbracle/go-eth-bn256 v0.0.0-20190607160430-b36caf4e0f6b ## explicit github.com/umbracle/go-eth-bn256 -# github.com/umbracle/go-web3 v0.0.0-20220224145938-aaa1038c1b69 -## explicit -github.com/umbracle/go-web3 -github.com/umbracle/go-web3/abi -github.com/umbracle/go-web3/jsonrpc -github.com/umbracle/go-web3/jsonrpc/codec -github.com/umbracle/go-web3/jsonrpc/transport # github.com/valyala/bytebufferpool v1.0.0 +## explicit github.com/valyala/bytebufferpool -# github.com/valyala/fasthttp v1.4.0 +# github.com/valyala/fasthttp v1.37.0 +## explicit; go 1.15 github.com/valyala/fasthttp github.com/valyala/fasthttp/fasthttputil github.com/valyala/fasthttp/stackless # github.com/valyala/fastjson v1.6.3 -## explicit +## explicit; go 1.12 github.com/valyala/fastjson github.com/valyala/fastjson/fastfloat # github.com/whyrusleeping/multiaddr-filter v0.0.0-20160516205228-e903e4adabd7 +## explicit github.com/whyrusleeping/multiaddr-filter # github.com/whyrusleeping/timecache v0.0.0-20160911033111-cfcb2f1abfee +## explicit github.com/whyrusleeping/timecache # go.opencensus.io v0.23.0 +## explicit; go 1.13 go.opencensus.io go.opencensus.io/internal go.opencensus.io/internal/tagencoding @@ -618,19 +725,21 @@ go.opencensus.io/trace/internal go.opencensus.io/trace/propagation go.opencensus.io/trace/tracestate # go.uber.org/atomic v1.9.0 +## explicit; go 1.13 go.uber.org/atomic -# go.uber.org/multierr v1.7.0 +# go.uber.org/multierr v1.8.0 +## explicit; go 1.14 go.uber.org/multierr -# go.uber.org/zap v1.20.0 -## explicit +# go.uber.org/zap v1.21.0 +## explicit; go 1.13 go.uber.org/zap go.uber.org/zap/buffer go.uber.org/zap/internal/bufferpool go.uber.org/zap/internal/color go.uber.org/zap/internal/exit go.uber.org/zap/zapcore -# golang.org/x/crypto v0.0.0-20220214200702-86341886e292 -## explicit +# golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e +## explicit; go 1.17 golang.org/x/crypto/blake2b golang.org/x/crypto/blake2s golang.org/x/crypto/chacha20 @@ -644,15 +753,16 @@ golang.org/x/crypto/hkdf golang.org/x/crypto/internal/poly1305 golang.org/x/crypto/internal/subtle golang.org/x/crypto/pbkdf2 -golang.org/x/crypto/poly1305 golang.org/x/crypto/ripemd160 golang.org/x/crypto/salsa20/salsa golang.org/x/crypto/sha3 -# golang.org/x/mod v0.5.1 +# golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3 +## explicit; go 1.17 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/module golang.org/x/mod/semver -# golang.org/x/net v0.0.0-20220325170049-de3da57026de +# golang.org/x/net v0.0.0-20220531201128-c960675eff93 +## explicit; go 1.17 golang.org/x/net/bpf golang.org/x/net/context golang.org/x/net/context/ctxhttp @@ -667,7 +777,8 @@ golang.org/x/net/ipv4 golang.org/x/net/ipv6 golang.org/x/net/route golang.org/x/net/trace -# golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a +# golang.org/x/oauth2 v0.0.0-20220524215830-622c5d57e401 +## explicit; go 1.11 golang.org/x/oauth2 golang.org/x/oauth2/authhandler golang.org/x/oauth2/google @@ -675,23 +786,27 @@ golang.org/x/oauth2/google/internal/externalaccount golang.org/x/oauth2/internal golang.org/x/oauth2/jws golang.org/x/oauth2/jwt -# golang.org/x/sync v0.0.0-20210220032951-036812b2e83c +# golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 +## explicit golang.org/x/sync/errgroup -# golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886 +# golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a +## explicit; go 1.17 golang.org/x/sys/cpu golang.org/x/sys/execabs golang.org/x/sys/internal/unsafeheader golang.org/x/sys/unix golang.org/x/sys/windows # golang.org/x/text v0.3.7 +## explicit; go 1.17 golang.org/x/text/secure/bidirule golang.org/x/text/transform golang.org/x/text/unicode/bidi golang.org/x/text/unicode/norm -# golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac -golang.org/x/time/rate -# golang.org/x/tools v0.1.9 +# golang.org/x/time v0.0.0-20220411224347-583f2d630306 ## explicit +golang.org/x/time/rate +# golang.org/x/tools v0.1.10 +## explicit; go 1.17 golang.org/x/tools/go/ast/astutil golang.org/x/tools/go/ast/inspector golang.org/x/tools/go/gcexportdata @@ -710,10 +825,12 @@ golang.org/x/tools/internal/imports golang.org/x/tools/internal/packagesinternal golang.org/x/tools/internal/typeparams golang.org/x/tools/internal/typesinternal -# golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 +# golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df +## explicit; go 1.17 golang.org/x/xerrors golang.org/x/xerrors/internal -# google.golang.org/api v0.74.0 +# google.golang.org/api v0.81.0 +## explicit; go 1.15 google.golang.org/api/googleapi google.golang.org/api/internal google.golang.org/api/internal/impersonate @@ -725,6 +842,7 @@ google.golang.org/api/transport/cert google.golang.org/api/transport/grpc google.golang.org/api/transport/internal/dca # google.golang.org/appengine v1.6.7 +## explicit; go 1.11 google.golang.org/appengine google.golang.org/appengine/internal google.golang.org/appengine/internal/app_identity @@ -737,8 +855,8 @@ google.golang.org/appengine/internal/socket google.golang.org/appengine/internal/urlfetch google.golang.org/appengine/socket google.golang.org/appengine/urlfetch -# google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3 -## explicit +# google.golang.org/genproto v0.0.0-20220531173845-685668d2de03 +## explicit; go 1.15 google.golang.org/genproto/googleapis/api/annotations google.golang.org/genproto/googleapis/cloud/secretmanager/v1 google.golang.org/genproto/googleapis/iam/v1 @@ -746,8 +864,8 @@ google.golang.org/genproto/googleapis/rpc/code google.golang.org/genproto/googleapis/rpc/errdetails google.golang.org/genproto/googleapis/rpc/status google.golang.org/genproto/googleapis/type/expr -# google.golang.org/grpc v1.46.2 -## explicit +# google.golang.org/grpc v1.47.0 +## explicit; go 1.14 google.golang.org/grpc google.golang.org/grpc/attributes google.golang.org/grpc/backoff @@ -813,7 +931,7 @@ google.golang.org/grpc/stats google.golang.org/grpc/status google.golang.org/grpc/tap # google.golang.org/protobuf v1.28.0 -## explicit +## explicit; go 1.11 google.golang.org/protobuf/encoding/protojson google.golang.org/protobuf/encoding/prototext google.golang.org/protobuf/encoding/protowire @@ -851,16 +969,18 @@ google.golang.org/protobuf/types/known/timestamppb # gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce ## explicit gopkg.in/natefinch/npipe.v2 -# gopkg.in/square/go-jose.v2 v2.5.1 +# gopkg.in/square/go-jose.v2 v2.6.0 +## explicit gopkg.in/square/go-jose.v2 gopkg.in/square/go-jose.v2/cipher gopkg.in/square/go-jose.v2/json gopkg.in/square/go-jose.v2/jwt # gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 +## explicit gopkg.in/tomb.v1 -# gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b +# gopkg.in/yaml.v3 v3.0.1 ## explicit gopkg.in/yaml.v3 # lukechampine.com/blake3 v1.1.7 -## explicit +## explicit; go 1.13 lukechampine.com/blake3